heli-mes/mes-ui/mes-ui-admin-vue3/src/views/heli/storagecheck/checkdetail.vue
2025-07-20 20:38:44 +08:00

871 lines
32 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- 出库 -->
<el-card class="hl-card" style="position: relative">
<template #header>
<span v-text="dialogTitle"></span>
</template>
<div class="abstatus">
<img src="/src/assets/imgs/status/status2.png" v-if="formData.status == 2" alt="" />
<img src="/src/assets/imgs/status/statuszf.png" v-else-if="formData.status == 3" alt="" />
<span v-else></span>
</div>
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="200px" v-loading="formLoading">
<!-- 基础信息 -->
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">基础信息</span>
</template>
<el-row>
<el-col :span="8">
<el-row>
<el-col :span="24">
<el-form-item prop="stockNo" label="盘点单号">
<el-input v-model="formData.stockNo" disabled placeholder="系统自动生成" class="!w-400px" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="whId" label="盘点仓库" required>
<el-select v-model="formData.whId" placeholder="下拉选择" clearable disabled class="!w-400px" @change="handleWh">
<el-option v-for="dict in whList" :key="dict.id" :label="dict.wh_name" :value="dict.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="8">
<el-row>
<el-col :span="24">
<el-form-item prop="status" label="单据状态">
<el-select v-model="formData.status" placeholder="下拉选择" clearable class="!w-400px" disabled>
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_MAT_CHECK_STATUS)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="checkType" label="盘点类型">
<el-select v-model="formData.checkType" clearable class="!w-400px" disabled>
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_MAT_CHECK_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="8">
<el-row>
<el-col :span="24">
<el-form-item label="排除库存为0的物料?" prop="noZero" >
<el-switch
v-model="noZeroSwich"
inline-prompt
active-text="是"
inactive-text="否"
disabled="true"
/>
<!-- <el-radio-group v-model="formData.noZero" disabled>
<el-radio v-for="dict in getIntDictOptions(DICT_TYPE.HELI_COMMON_IS_OR_NOT)" :key="dict.value" :label="dict.value">
{{ dict.label }}
</el-radio>
</el-radio-group> -->
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="盘点开始日期" prop="checkTime">
<el-date-picker v-model="formData.checkTime" value-format="x" placeholder="盘点开始时间" class="!w-220px" disabled />
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row>
<el-col :span="16">
<el-form-item label="备注" prop="description">
<el-input type="textarea" v-model="formData.description" show-word-limit maxlength="200" disabled />
</el-form-item>
</el-col>
</el-row>
</el-card>
<!-- 物料信息 -->
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">物料信息</span>
</template>
<el-row>
<el-col>
<el-card class="hl-incard">
<el-col>
<el-button class="hl-addbutton" type="primary" size="large" :disabled="ctrView || ctrSave" @click="openMatForm">获取物料</el-button>
</el-col>
<el-form ref="matSubFormRef" :model="formData.matItemDOList" :rules="subFormRules" v-loading="subFormLoading" label-width="0">
<el-table :data="formData.matItemDOList" class="hl-table">
<el-table-column prop="cid" label="序号" :width="80" />
<el-table-column prop="matCode" label="物料编码" min-width="120" align="center" />
<el-table-column prop="matName" label="物料名称" min-width="140" align="center" />
<el-table-column prop="matType" label="物料类型" min-width="120" align="center" />
<el-table-column prop="shortName" label="物料简称" min-width="120" align="center" />
<el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" />
<el-table-column prop="matBrand" label="品牌" min-width="120" align="center" />
<el-table-column prop="rgId" min-width="140" align="center">
<template #header> <span class="hl-table_header">*</span>库区 </template>
<template #default="scope">
<el-form-item :prop="`${scope.$index}.rgId`" :rules="subFormRules.rgId" class="mb-0px!">
<el-select v-model="scope.row.rgId" placeholder="" style="width: 100%" @change="(val)=>handleRg(val,scope)" :disabled="ctrView || ctrSave">
<el-option v-for="dict in rgList" :key="dict.id" :label="dict.rg_name" :value="dict.id" />
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="pnId" min-width="180" align="center">
<template #header> <span class="hl-table_header">*</span>库位 </template>
<template #default="scope">
<el-form-item :prop="`${scope.$index}.pnId`" :rules="subFormRules.pnId" class="mb-0px!">
<el-select v-model="scope.row.pnId" placeholder="" style="width: 100%" @change="(val)=>handlePn(val,scope)" :disabled="ctrView || ctrSave">
<el-option v-for="dict in scope.row.pnlist" :key="dict.id" :label="dict.pn_name" :value="dict.id" />
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="matRest" label="库存数量" min-width="120" align="center" />
<el-table-column prop="storageOkQty" align="center" min-width="180" >
<template #header> <span class="hl-table_header">*</span>盘点数量</template>
<template #default="scope">
<el-form-item :prop="`${scope.$index}.storageOkQty`" :rules="subFormRules.storageOkQty" class="mb-0px!">
<el-input-number v-model="scope.row.storageOkQty" :min="0" @change="(val)=>handleSub(val,scope)" :disabled="ctrView || ctrSave"/>
</el-form-item>
</template>
</el-table-column>
<!-- <el-table-column prop="money" min-width="120" align="center" >
<template #header> <span class="hl-table_header">*</span>金额</template>
<template #default="scope">
<el-form-item :prop="`${scope.$index}.money`" :rules="subFormRules.money" class="mb-0px!" >
<el-input v-model="scope.row.money" :disabled="ctrView || ctrSave" />
</el-form-item>
</template>
</el-table-column> -->
<el-table-column prop="onemoney" label="单价" align="center" min-width="180" >
<template #default="scope">
<el-form-item :prop="`${scope.$index}.onemoney`" class="mb-0px!">
<el-input-number v-model="scope.row.onemoney" :min="0" :disabled="ctrView || ctrSave"/>
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="matSub" label="盈亏差异" min-width="120" align="center">
<template #default="scope">
<div v-if="scope.row.matSub<0" style="color:#EC808D;">
{{scope.row.matSub}}
</div>
<span v-else-if="scope.row.matSub>0" style="color:#63A103;">
+{{scope.row.matSub}}
</span>
<span v-else>
{{scope.row.matSub}}
</span>
</template>
</el-table-column>
<el-table-column prop="matUnit" label="库存单位" min-width="120" align="center" />
<el-table-column label="操作" align="center" width="240">
<template #default="scope" >
<el-button link type="danger" size="small" @click.prevent="handleDelete2(scope.$index)" :disabled="ctrView || ctrDelete" v-if="scope.row.isCopy==1">
删除
</el-button>
<el-button link type="primary" v-if="scope.row.isCopy==0" @click="handleCopy(scope.$index, scope.row)" :disabled="ctrView || ctrDelete">复制</el-button>
</template>
</el-table-column>
</el-table>
</el-form>
</el-card>
</el-col>
</el-row>
</el-card>
<!-- 附件信息 -->
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">附件信息</span>
</template>
<el-row>
<el-col>
<el-card class="hl-incard">
<el-col>
<el-upload
ref="matUploadRef" :file-list="matUploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData" :on-change="matUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader">
<el-button type="primary" :disabled="ctrView || ctrSave">
<Icon icon="ep:upload-filled" />上传
</el-button>
</el-upload>
</el-col>
<el-table :data="formData.attachments" class="hl-table" v-loading.fullscreen.lock="uploading" element-loading-text="附件上传中..." style="margin-top: 10px" element-loading-background="rgba(122, 122, 122, 0.6)">
<el-table-column prop="name" label="文件名称" align="center">
<!-- <template #default="scope">
<a :href="scope.row.url" target="_blank" style="color: #409eff">{{ scope.row.name }} </a>
</template> -->
</el-table-column>
<el-table-column prop="createTime" align="center" label="上传日期" :formatter="dateFormatter" />
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button link type="danger" size="small" @click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)" :disabled="ctrView || ctrDelete">
删除
</el-button>
<el-button link type="primary" size="small" @click="downloadAttachment(scope.row.name, scope.row.url)" :disabled="ctrView || ctrDelete">
下载
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
</el-card>
<!-- 系统信息 -->
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">系统信息</span>
<el-button @click="() => router.go(-1)" size="large" style="margin-left: 5rem">取 消</el-button>
<el-button @click="submitForm" type="success" v-if="btnSave" size="large">保
存</el-button>
<el-button @click="handleStatus(2)" type="primary" v-if="btnSave" size="large">提
交</el-button>
<el-button @click="handleStatus(3)" type="danger" v-if="btnCancel" size="large">删
除</el-button>
</template>
<el-row justify="center">
<el-col :span="8">
<el-form-item prop="creator" label="创建人">
{{ userList.find((user) => user.id == formData.creator)?.nickname }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="createTime" label="创建时间">
{{ formatDate(formData.createTime, 'YYYY-MM-DD HH:mm') }}
</el-form-item>
</el-col>
</el-row>
<el-row justify="center">
<el-col :span="8">
<el-form-item prop="keeper" label="提交人">
{{ userList.find((user) => user.id == formData.keeper)?.nickname }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="keepTime" label="提交时间">
{{ formatDate(formData.keeperTime, 'YYYY-MM-DD HH:mm') }}
</el-form-item>
</el-col>
</el-row>
<!-- <el-row justify="center">
<el-col :span="8">
<el-form-item prop="cancel" label="作废人">
{{ userList.find((user) => user.id == formData.cancel)?.nickname }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="cancelTime" label="作废时间">
{{ formatDate(formData.cancelTime, 'YYYY-MM-DD HH:mm') }}
</el-form-item>
</el-col>
</el-row> -->
<el-dialog v-model="centerDialogVisible" title="提醒" width="30%" center>
<span>
提交后将修改库存数量,是否继续!
</span>
<template #footer>
<span class="dialog-footer">
<el-button type="primary" @click="sureToSubmit()">
确认
</el-button>
<el-button @click="centerDialogVisible = false">取消</el-button>
</span>
</template>
</el-dialog>
<el-dialog v-model="deleteDialogVisible" title="提醒" width="30%" center>
<span>
删除后单据将被作废,是否继续!
</span>
<template #footer>
<span class="dialog-footer">
<el-button type="primary" @click="sureToDelete()">
确认
</el-button>
<el-button @click="deleteDialogVisible = false">取消</el-button>
</span>
</template>
</el-dialog>
</el-card>
</el-form>
<!-- <div class="hl-footer text-center">-->
<!-- -->
<!-- </div>-->
</el-card>
<!-- 表单弹窗:物料列表 -->
<materials ref="matOpenFormRef" @success="getList" />
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { useRoute } from 'vue-router'
import { dateFormatter, formatDate } from '@/utils/formatTime'
import { getIntDictOptions, getDictLabel, DICT_TYPE } from '@/utils/dict'
import { getAccessToken, getTenantId } from '@/utils/auth'
import { useUserStore } from '@/store/modules/user'
import * as CheckApi from '@/api/heli/storagecheck'
import * as CheckMatApi from '@/api/heli/storagecheckmat'
import * as MatApi from '@/api/heli/material'
import * as UserApi from '@/api/system/user'
import * as WhApi from '@/api/heli/warehouse'
import * as RgApi from '@/api/heli/rg'
import * as PnApi from '@/api/heli/pn'
import type { UploadUserFile } from 'element-plus'
import { deleteFile, downloadFile, getFilePage } from '@/api/infra/file'
import download from '@/utils/download'
import materials from './materialsNew.vue'
const reload: any = inject('reload')
const centerDialogVisible = ref(false)
const deleteDialogVisible = ref(false)
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
const { query } = useRoute()
const router = useRouter()
const noZeroSwich = ref(false)
const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 表单的加载中1修改时的数据加载2提交的按钮禁用
const formData = ref({
id: undefined,
stockNo: undefined,
checkType: undefined,
checkTime: undefined,
status: undefined,
noZero: undefined,
whId: undefined,
description: undefined,
creator: undefined,
createTime: undefined,
keeper: undefined,
keeperTime: undefined,
outbound: undefined,
outboundTime: undefined,
cancel: undefined,
cancelTime: undefined,
matItemDOList: [],
attachments: []
})
const formRules = reactive({
// name: [{ required: true, message: '模具类型不能为空', trigger: 'blur' }],
status: [{ required: true, message: '启用状态不能为空', trigger: 'blur' }],
stockInType: [{ required: true, message: '出库类型不能为空', trigger: 'blur' }],
whId: [{ required: true, message: '出库仓库不能为空', trigger: 'blur' }]
})
const formRef = ref() // 表单 Ref
const matSubFormRef = ref() //子表单 Ref
const matOpenFormRef = ref()
const openMatForm = () => {
//noZero: number,whId?: number,isAll?: number
matOpenFormRef.value.open(formData.value.noZero, formData.value.whId, formData.value.checkType)
}
const subFormLoading = ref(false) // 子表单的加载中
const subFormRules = reactive({
matId: [{ required: true, message: '物料不能为空', trigger: 'blur' }],
rgId: [{ required: true, message: '库区不能为空', trigger: 'blur' }],
pnId: [{ required: true, message: '库位不能为空', trigger: 'blur' }],
storageOkQty: [{ required: true, message: '盘点数量不能为空', trigger: 'blur' }],
money: [{ required: true, message: '金额不能为空', trigger: 'blur' }]
})
const handleStatus = async (num) => {
formData.value.status = num
if (num == 2) {
// 校验表单
await formRef.value.validate()
if (formData.value.matItemDOList == undefined || formData.value.matItemDOList.length === 0) {
message.alertWarning('请添加物料信息!')
return
}
// 校验子表单
try {
var isRepeat = false
formData.value.matItemDOList.forEach((item) => {
if (
formData.value.matItemDOList.filter(
(mat) => mat.matId == item.matId && mat.pnId == item.pnId
).length > 1
) {
isRepeat = true
}
})
if (isRepeat) {
message.alertWarning('存在相同库位的物料信息,请修改,避免重复盘点!')
return
}
await matSubFormRef.value.validate()
} catch (e) {
return
}
formData.value.keeper = useUserStore().getUser.id
centerDialogVisible.value = true;
} else {
deleteDialogVisible.value = true;
}
}
const sureToDelete = async() =>{
formData.value.cancel = useUserStore().getUser.id
const data = formData.value as unknown as CheckApi.StorageCheckVO
deleteDialogVisible.value = false;
await CheckApi.updateStorageCheck(data)
await initStatus(formData.value.status)
if (sumbefore.value == 0) {
reload()
}
}
const getList = async (arrMat) => {
arrMat.forEach((row) => {
row.cid = matCount
if (
formData.value.matItemDOList.filter(
(item) =>
item.matId == row.id &&
item.whId == row.whId &&
item.rgId == row.rgId &&
item.pnId == row.pnId
).length == 0
) {
row.isCopy = 0
row.matId = row.id
row.pnlist = ref([])
row.pnlist = pnList.value.filter((pn) => pn.rg_id == row.rgId)
if (row.pnlist.length == 0) {
row.rgId = ''
row.pnId = ''
row.matRest = 0
}
console.log(row.price)
if(row.price){
row.onemoney = row.price
}
formData.value.matItemDOList.push(row)
matCount = matCount + 1
}
})
//formData.value.matItemDOList = arrMat
}
// 复制数据
const handleCopy = (index, item) => {
const data: any = formData.value.matItemDOList[index]
// 复制数据
const newData: any = {
...data,
isCopy: 1,
cid: matCount
}
// 添加新数据
formData.value.matItemDOList.splice(index + 1, 0, newData)
matCount = matCount + 1
}
const userList = ref<UserApi.UserVO[]>([]) // 用户列表
// ====================附件信息 开始=======================================
const uploadUrl = ref(import.meta.env.VITE_UPLOAD_BATCH_URL)
const matUploadRef = ref()
const matUploadFiles = ref<UploadUserFile[]>([])
const uploading = ref(false)
const matUploadData = ref({
businessType: 'STORAGECHECK',
businessId: formData.value.id,
businessFileType: ''
})
const matUploadChange = (file, files) => {
matUploadFiles.value = files
refreshAttachments(files, '')
}
// 记录待上传、成功上传及失败上传的文件数量
const sumbefore = ref(0)
const successfulUploadsCount = ref(0)
const failedUploadsCount = ref(0)
const failedAttachments = ref<UploadUserFile[]>([])
const failedAttachmentsName = ref()
// 处理单个文件上传成功的情况
const handleSuccess = (response: any, file: UploadUserFile) => {
successfulUploadsCount.value++
// 更新附件信息等其他逻辑...
// console.log('上传成功数量', successfulUploadsCount.value)
}
// 处理单个文件上传失败的情况
const handleError = (error: Error, file: UploadUserFile) => {
failedUploadsCount.value++
if (failedUploadsCount.value > 0) {
// 当有上传错误时
// 将失败的附件添加到failedAttachments.value数组中
failedAttachments.value.push(file)
failedAttachmentsName.value = failedAttachments.value.map((value) => value.name)
}
// console.log('上传失败数量', failedUploadsCount.value)
}
// 文件上传前的钩子
const before = (rawFile) => {
sumbefore.value++
}
const refreshAttachments = (files, type) => {
formData.value.attachments = formData.value.attachments.filter((value) => value.id)
// 避免重复添加
const newFiles = files.filter(
(file) => !formData.value.attachments.some((att) => att.name === file.name)
)
for (let i = 0; i < newFiles.length; i++) {
let file = newFiles[i]
file.businessFileType = type
file.createTime = new Date()
formData.value.attachments.push(file)
}
// 排序
formData.value.attachments.sort((v1, v2) => v1.createTime - v2.createTime)
// 文件上传一遍 上传总数等于要上传文件时 刷新页面
const sum = successfulUploadsCount.value + failedUploadsCount.value
// console.log('上传总数', sum)
// console.log('要上传文件数量', sumbefore.value)
if (sumbefore.value !== sum && sumbefore.value !== 0 && sum !== 0) {
// console.log('要上传文件数量不等于上传总数时等待',uploading.value)
uploading.value = true
} else if (sum == sumbefore.value && sumbefore.value > 0 && sum > 0) {
// console.log('要上传文件数量等于上传总数 刷新页面并给出提示')
if (failedUploadsCount.value > 0) {
ElMessageBox.alert(
// 使用错误信息作为提示内容
`文件名为:${failedAttachmentsName.value.join(' / ')}上传失败`,
`文件格式不正确或网络问题 请您稍后再试`,
{
dangerouslyUseHTMLString: false,
confirmButtonText: '知道了',
center: true
}
)
}
reload()
uploading.value = false
}
}
// 删除附件
const handleDeleteAttachment = async (index, type) => {
const deletedAttachments = formData.value.attachments.splice(index, 1)
for (let i = 0; i < deletedAttachments.length; i++) {
const attachment = deletedAttachments[i]
if (attachment.id) {
// 清理已上传文件
await deleteFile(attachment.id)
}
// 清理待上传文件
matUploadFiles.value = matUploadFiles.value.filter((file1) => {
return file1.name != attachment.name || file1.businessFileType != type
})
}
}
// 下载文件
const downloadAttachment = async (name, url) => {
if (url) {
const baseUrl = import.meta.env.VITE_BASE_URL;
url =baseUrl+'/admin-api/'+ url.split('/admin-api/')[1]; const data = await downloadFile(url)
download.any(data, name)
}
}
// ====================附件信息 结束=======================================
/** 提交表单 */
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
const saveFormData = async () => {
// 提交请求
formLoading.value = true
try {
const data = formData.value as unknown as CheckApi.StorageCheckVO
await CheckApi.updateStorageCheck(data)
//物料信息保存
if (formData.value.matItemDOList) {
formData.value.matItemDOList.forEach((item) => {
item.checkId = formData.value.id
item.whId = formData.value.whId
})
}
const dataMats = formData.value.matItemDOList as unknown as CheckMatApi.StorageCheckMatVO[]
await CheckMatApi.createCheckMatBatch(dataMats, formData.value.id)
if (formData.value.attachments != undefined && formData.value.attachments.length > 0) {
//附件信息保存
matUploadData.value.businessId = formData.value.id
await matUploadRef.value!.submit()
}
message.success(t('common.updateSuccess'))
} finally {
formLoading.value = false
}
}
const sureToSubmit = async() =>{
centerDialogVisible.value = false;
//保存表单数据
await saveFormData()
await CheckApi.updateStorageCheckStatus(formData.value.id)
await initStatus(formData.value.status)
if (sumbefore.value == 0) {
reload()
}
}
const submitForm = async () => {
// 校验表单
await formRef.value.validate()
if (formData.value.matItemDOList == undefined || formData.value.matItemDOList.length === 0) {
message.alertWarning('请添加物料信息!')
return
}
// 校验子表单
try {
var isRepeat = false
formData.value.matItemDOList.forEach((item) => {
if (
formData.value.matItemDOList.filter(
(mat) => mat.matId == item.matId && mat.pnId == item.pnId
).length > 1
) {
isRepeat = true
}
})
if (isRepeat) {
message.alertWarning('存在相同库位的物料信息,请修改,避免重复盘点!')
return
}
await matSubFormRef.value.validate()
} catch (e) {
return
}
//保存表单数据
await saveFormData()
await initStatus(formData.value.status)
// 成功后刷新
if (sumbefore.value == 0) {
reload()
}
}
var matCount = 1
//删除新增物料信息
const handleDelete2 = (index: number) => {
var itemDelteing = formData.value.matItemDOList[index]
if (itemDelteing.isCopy == 0) {
message.alertWarning('原始物料不能删除')
} else {
formData.value.matItemDOList.splice(index, 1)
}
}
//仓库全数据
const whList = ref([])
//库区全数据
var rgList = ref([])
//库位全数据
var pnList = ref([])
const handleRg = async (rgid, scope) => {
//-------------------库位全数据
scope.row.pnId = ''
scope.row.pnlist = pnList.value.filter((pn) => pn.rg_id === rgid)
//-------------------
}
const handlePn = async (pnid, scope) => {
//-------------------库位全数据
if (
formData.value.matItemDOList.filter(
(item) =>
item.id == scope.row.id &&
item.whId == scope.row.whId &&
item.rgId == scope.row.rgId &&
item.pnId == pnid
).length > 1
) {
scope.row.matRest = 0
message.alertWarning('物料编码' + scope.row.matCode + ',当前库位已存在,请修改,避免重复盘点')
return
}
var currentMatRest = await CheckApi.getStorageNowMatRestNew(scope.row.id, scope.row.pnId)
scope.row.matRest = currentMatRest
if (scope.row.storageOkQty == undefined || scope.row.storageOkQty == '') {
scope.row.matSub = 0
} else {
scope.row.matSub = scope.row.storageOkQty - scope.row.matRest
}
//-------------------
}
const handleSub = async (pNum, scope) => {
//-------------------库位全数据
// scope.row.matSub = Number(pNum) - Number(scope.row.matRest)
// console.log(typeof scope.row.matSub)
if(scope.row.storageOkQty < 0){
scope.row.storageOkQty = 0;
}
const matSubValue = Number(pNum) - Number(scope.row.matRest)
scope.row.matSub = matSubValue.toFixed(2) // 保留两位小数
console.log(typeof scope.row.matSub)
}
//仓库列表
const init_page_wh = async () => {
whList.value = await WhApi.getSimpList()
}
//库区列表
const init_page_rg = async () => {
var rgData = await RgApi.getSimpList()
rgList.value = rgData.filter((item) => item.wh_id == formData.value.whId)
}
//库位列表
const init_page_pn = async () => {
var pnData = await PnApi.getSimpList()
pnList.value = pnData.filter((item) => item.wh_id == formData.value.whId)
}
// 按钮控制
const ctrView = ref(false)
const ctrSave = ref(false)
const ctrCancel = ref(true)
const ctrDelete = ref(false)
const btnSave = ref(true)
const btnCancel = ref(false)
// 根据页面动作和数据状态控制按钮输入框信息
const initStatus = async (status) => {
switch (status) {
case 1:
ctrView.value = false
ctrSave.value = false
ctrCancel.value = true
ctrDelete.value = false
btnSave.value = true
btnCancel.value = true
break
case 2:
ctrView.value = false
ctrSave.value = true
ctrCancel.value = false
ctrDelete.value = true
btnSave.value = false
btnCancel.value = false
break
case 3:
ctrView.value = true
ctrSave.value = true
ctrCancel.value = true
ctrDelete.value = true
btnSave.value = false
btnCancel.value = false
break
default:
break
}
// 查看页面时可操作控件禁用
if (query.type === 'review') {
ctrView.value = true
ctrSave.value = true
ctrCancel.value = true
ctrDelete.value = true
btnSave.value = false
btnCancel.value = false
}
}
/** 初始化 **/
onMounted(async () => {
dialogTitle.value = query.type === 'update' ? '编辑页' : '详情页'
formData.value = await CheckApi.getStorageCheck(query.id)
if(formData.value.noZero != 2){
noZeroSwich.value = true
}
// 页面控件可视初始化
await initStatus(formData.value.status)
await init_page_wh()
await init_page_rg()
await init_page_pn()
const dataCheckMats = await CheckMatApi.getStorageCheckListByCheckID(query.id)
formData.value.matItemDOList = dataCheckMats
if (formData.value.matItemDOList == undefined) {
formData.value.matItemDOList = []
}
const dataMatSimples = await MatApi.getSimpList()
formData.value.matItemDOList.forEach((item) => {
var matFind = dataMatSimples.find((simp) => simp.id == item.matId)
item.isCopy = 0
item.matName = matFind?.name
item.matCode = matFind?.code
item.matSpec = matFind?.spec
item.matUnit = getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, matFind?.unit)
item.matType = getDictLabel(DICT_TYPE.HELI_MATERIAL_TYPE, matFind?.unit)
item.matBrand = matFind?.brand
item.shortName = matFind?.short_name
item.matSub = item.storageOkQty - item.matRest
item.pnlist = pnList.value.filter((pn) => pn.rg_id == item.rgId)
})
formData.value.matItemDOList.sort((a, b) => a.matCode - b.matCode)
formData.value.matItemDOList.forEach((item) => {
item.cid = matCount
matCount = matCount + 1
})
// 附件信息
let attParams = {
pageNo: 1,
pageSize: 99,
businessId: query.id,
businessType: 'STORAGECHECK'
}
formData.value.attachments = (await getFilePage(attParams)).list
//用户信息
userList.value = await UserApi.getSimpleUserList()
})
</script>
<style>
a {
color: #409eff;
text-decoration: none;
}
</style>