From 11ca3ae4a606ab1ce9250e1116b18d9eaeb9558a Mon Sep 17 00:00:00 2001 From: "Mr.j" <2221464500@qq.com> Date: Wed, 13 Aug 2025 16:46:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E7=82=B9=E5=87=BB=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=E6=94=B6=E8=B4=A7=E5=90=8E=E7=9B=B4=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/equipment/procurement.ts | 5 +- src/apis/equipment/type.ts | 56 ++++-- .../procurement/components/ReceiptModal.vue | 189 +++++++++++++++--- 3 files changed, 212 insertions(+), 38 deletions(-) diff --git a/src/apis/equipment/procurement.ts b/src/apis/equipment/procurement.ts index 2aab76b..d58e7d1 100644 --- a/src/apis/equipment/procurement.ts +++ b/src/apis/equipment/procurement.ts @@ -100,9 +100,12 @@ export const equipmentProcurementApi = { }, /** - * 确认收货 + * 确认收货(扩展版,支持完整设备数据) */ receiveGoods: (equipmentId: string, data: ReceiptRequest) => { + console.log('📦 收货API被调用,设备ID:', equipmentId) + console.log('📦 收货数据:', data) + return http.post>(`/equipment/procurement/receipt/${equipmentId}`, data) }, diff --git a/src/apis/equipment/type.ts b/src/apis/equipment/type.ts index a7fdf57..f9bf6d9 100644 --- a/src/apis/equipment/type.ts +++ b/src/apis/equipment/type.ts @@ -410,33 +410,63 @@ export interface EquipmentApprovalResp { } /** - * 收货请求参数 + * 收货请求参数(扩展版,包含完整设备信息) */ export interface ReceiptRequest { - /** 收货时间 */ + // 收货特有信息 receiptTime: string - /** 收货人 */ receiptPerson: string - /** 收货数量 */ receiptQuantity: number - /** 收货备注 */ receiptRemark?: string - /** 外观检查结果 */ appearanceCheck: string - /** 功能测试结果 */ functionTest: string - /** 包装完整性 */ packageIntegrity: string - /** 配件完整性 */ accessoryIntegrity: string - /** 检查结果 */ checkResult: 'PASS' | 'FAIL' | 'CONDITIONAL' - /** 检查备注 */ checkRemark?: string - /** 入库位置 */ storageLocation: string - /** 库管员 */ storageManager: string + + // 设备基本信息(从采购数据继承) + equipmentName?: string + equipmentModel?: string + equipmentType?: string + equipmentSn?: string + brand?: string + specification?: string + assetCode?: string + + // 采购信息(从采购数据继承) + purchaseOrder?: string + supplierName?: string + purchasePrice?: number + purchaseTime?: string + quantity?: number + unitPrice?: number + totalPrice?: number + + // 入库信息 + inStockTime?: string + physicalLocation?: string + locationStatus?: string + responsiblePerson?: string + inventoryBarcode?: string + + // 状态信息 + equipmentStatus?: string + useStatus?: string + healthStatus?: string + receiptStatus?: string + + // 其他管理信息 + depreciationMethod?: string + depreciationYears?: number + salvageValue?: number + currentNetValue?: number + + // 系统字段 + createTime?: string + updateTime?: string } /** diff --git a/src/views/system-resource/device-management/procurement/components/ReceiptModal.vue b/src/views/system-resource/device-management/procurement/components/ReceiptModal.vue index 1d8a437..17ebc74 100644 --- a/src/views/system-resource/device-management/procurement/components/ReceiptModal.vue +++ b/src/views/system-resource/device-management/procurement/components/ReceiptModal.vue @@ -48,6 +48,7 @@ v-model="formData.receiptTime" show-time format="YYYY-MM-DD HH:mm:ss" + value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择收货时间" style="width: 100%" /> @@ -233,8 +234,9 @@ const emit = defineEmits<{ const formRef = ref() const loading = ref(false) -// 表单数据 +// 表单数据 - 使用正确的字段映射 const formData = reactive({ + // 收货特有信息 receiptTime: '', receiptPerson: '', receiptQuantity: 1, @@ -247,6 +249,47 @@ const formData = reactive({ checkRemark: '', storageLocation: '', storageManager: '', + + // 设备基本信息(从采购数据继承) + equipmentName: '', + equipmentModel: '', + equipmentType: '', + equipmentSn: '', + brand: '', + specification: '', + assetCode: '', + + // 采购信息(从采购数据继承) + purchaseOrder: '', + supplierName: '', + purchasePrice: 0, + purchaseTime: '', + quantity: 1, + unitPrice: 0, + totalPrice: 0, + + // 入库信息 + inStockTime: '', + physicalLocation: '', + locationStatus: '', + responsiblePerson: '', + inventoryBarcode: '', + + // 状态信息 + equipmentStatus: '', + useStatus: '', + healthStatus: '', + receiptStatus: '', + + // 其他管理信息 + depreciationMethod: '', + depreciationYears: 5, + salvageValue: 0, + currentNetValue: 0, + + // 系统字段 + createTime: '', + updateTime: '' }) // 表单验证规则 @@ -287,28 +330,46 @@ const rules = { ], } +// 初始化表单数据 +const initFormData = () => { + if (props.equipmentData) { + // 从设备数据中复制相关字段 + Object.keys(formData).forEach((key) => { + const formKey = key as keyof ReceiptRequest + const equipmentKey = key as keyof EquipmentResp + if (formKey in formData && equipmentKey in props.equipmentData!) { + const value = props.equipmentData![equipmentKey] + if (value !== undefined) { + (formData[formKey] as any) = value + } + } + }) + + // 设置默认值 + formData.receiptQuantity = props.equipmentData.quantity || 1 + formData.storageLocation = props.equipmentData.physicalLocation || '' + formData.storageManager = props.equipmentData.responsiblePerson || '' + + // 设置收货时间默认为当前时间 + formData.receiptTime = formatDateTime(new Date()) + } +} + // 监听弹窗显示状态 watch(() => props.visible, (visible) => { if (visible) { - // 重置表单 - Object.assign(formData, { - receiptTime: '', - receiptPerson: '', - receiptQuantity: props.equipmentData?.quantity || 1, - receiptRemark: '', - appearanceCheck: '', - functionTest: '', - packageIntegrity: '', - accessoryIntegrity: '', - checkResult: 'PASS', - checkRemark: '', - storageLocation: '', - storageManager: '', - }) + initFormData() formRef.value?.clearValidate() } }) +// 监听设备数据变化 +watch(() => props.equipmentData, () => { + if (props.visible && props.equipmentData) { + initFormData() + } +}, { deep: true }) + // 提交表单 const handleSubmit = async () => { try { @@ -319,17 +380,77 @@ const handleSubmit = async () => { throw new Error('设备ID不能为空') } - // 格式化时间 - const receiptTime = formData.receiptTime ? new Date(formData.receiptTime).toISOString() : new Date().toISOString() - - const requestData: ReceiptRequest = { - ...formData, - receiptTime, + console.log('📦 开始提交收货数据...') + console.log('📦 设备数据:', props.equipmentData) + console.log('📦 表单数据:', formData) + + // 构建收货请求数据 + const receiptData: ReceiptRequest = { + // 收货特有信息 + receiptTime: formData.receiptTime ? formatDateTime(formData.receiptTime) : formatDateTime(new Date()), + receiptPerson: formData.receiptPerson, + receiptQuantity: formData.receiptQuantity, + receiptRemark: formData.receiptRemark, + appearanceCheck: formData.appearanceCheck, + functionTest: formData.functionTest, + packageIntegrity: formData.packageIntegrity, + accessoryIntegrity: formData.accessoryIntegrity, + checkResult: formData.checkResult, + checkRemark: formData.checkRemark, + storageLocation: formData.storageLocation, + storageManager: formData.storageManager, + + // 设备基本信息(从采购数据继承) + equipmentName: props.equipmentData.equipmentName, + equipmentModel: props.equipmentData.equipmentModel, + equipmentType: props.equipmentData.equipmentType, + equipmentSn: props.equipmentData.equipmentSn, + brand: props.equipmentData.brand, + specification: props.equipmentData.specification, + assetCode: props.equipmentData.assetCode, + + // 采购信息(从采购数据继承) + purchaseOrder: props.equipmentData.purchaseOrder, + supplierName: props.equipmentData.supplierName, + purchasePrice: props.equipmentData.purchasePrice, + purchaseTime: props.equipmentData.purchaseTime, + quantity: props.equipmentData.quantity, + unitPrice: props.equipmentData.unitPrice, + totalPrice: props.equipmentData.totalPrice, + + // 入库信息 + inStockTime: formData.receiptTime ? formatDateTime(formData.receiptTime) : formatDateTime(new Date()), + physicalLocation: formData.storageLocation, + locationStatus: 'in_stock', + responsiblePerson: formData.storageManager, + inventoryBarcode: props.equipmentData.inventoryBarcode || generateInventoryBarcode(), + + // 状态信息 + equipmentStatus: 'normal', + useStatus: '0', + healthStatus: 'good', + receiptStatus: 'RECEIVED', + + // 其他管理信息 + depreciationMethod: props.equipmentData.depreciationMethod || 'straight_line', + depreciationYears: props.equipmentData.depreciationYears || 5, + salvageValue: props.equipmentData.salvageValue || 0, + currentNetValue: props.equipmentData.purchasePrice || 0, + + // 系统字段 + createTime: formatDateTime(new Date()), + updateTime: formatDateTime(new Date()) } - await equipmentProcurementApi.receiveGoods(props.equipmentData.equipmentId, requestData) + console.log('📦 构建的收货数据:', receiptData) + + // 调用收货API + await equipmentProcurementApi.receiveGoods( + props.equipmentData.equipmentId, + receiptData + ) - Message.success('收货成功') + Message.success('收货成功,设备已自动入库') emit('success') emit('update:visible', false) } catch (error: any) { @@ -340,6 +461,26 @@ const handleSubmit = async () => { } } +// 生成库存条码的辅助函数 +const generateInventoryBarcode = () => { + const timestamp = Date.now().toString(36) + const random = Math.random().toString(36).substr(2, 5) + return `INV-${timestamp}-${random}`.toUpperCase() +} + +// 格式化日期时间 +const formatDateTime = (date: string | Date) => { + const d = new Date(date); + let month = '' + (d.getMonth() + 1); + let day = '' + d.getDate(); + const year = d.getFullYear(); + if (month.length < 2) + month = '0' + month; + if (day.length < 2) + day = '0' + day; + return [year, month, day].join('-') + ' ' + [d.getHours(), d.getMinutes(), d.getSeconds()].join(':'); +} + // 取消 const handleCancel = () => { emit('update:visible', false)