diff --git a/klp-ui/src/views/wms/coil/panels/base.vue b/klp-ui/src/views/wms/coil/panels/base.vue index d0a5df23..086c9be2 100644 --- a/klp-ui/src/views/wms/coil/panels/base.vue +++ b/klp-ui/src/views/wms/coil/panels/base.vue @@ -607,6 +607,178 @@ + + + +
+ 钢卷暂存单据管理 + 创建暂存单据 +
+ + + + + + + + + + + + + + + + + + + +
+ +
暂无暂存单据
+
点击右上角"创建暂存单据"开始使用
+
+
+ + + + + + + + + + + + + + + + + + + + + + + 查询 + 重置 + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -994,6 +1166,31 @@ export default { // 调拨记录弹窗 transferRecordVisible: false, transferRecordList: [], + // 暂存单据管理相关数据 + tempOrderList: [], + currentTempOrder: null, + coilSelectionVisible: false, + selectedCoilsVisible: false, + coilLoading: false, + availableCoils: [], + selectedCoils: [], + coilTotal: 0, + coilQueryParams: { + pageNum: 1, + pageSize: 20, + enterCoilNo: '', + currentCoilNo: '', + itemName: '', + itemSpecification: '', + itemMaterial: '', + status: 0, + orderBy: true, + dataType: 1, + materialType: '成品', + itemType: 'product', + excludeBound: true, + selectType: 'product' + }, }; }, computed: { @@ -1021,8 +1218,257 @@ export default { this.warehouseIds = this.warehouseOptions.map(item => item.value).join(','); } this.getList(); + // 初始化暂存单据列表 + this.loadTempOrderList(); }, methods: { + // === 暂存单据管理相关方法 === + // 加载暂存单据列表 + loadTempOrderList() { + const savedOrders = localStorage.getItem('tempCoilOrders'); + if (savedOrders) { + this.tempOrderList = JSON.parse(savedOrders); + } else { + this.tempOrderList = []; + } + }, + + // 保存暂存单据列表到本地存储 + saveTempOrderList() { + localStorage.setItem('tempCoilOrders', JSON.stringify(this.tempOrderList)); + }, + + // 创建暂存单据 + createTempOrder() { + const orderName = `暂存单据_${new Date().toLocaleString().replace(/[/:]/g, '-')}`; + const newOrder = { + orderId: Date.now().toString(), + orderName: orderName, + createTime: new Date().toLocaleString(), + coils: [] + }; + + this.tempOrderList.unshift(newOrder); + this.saveTempOrderList(); + + this.$message.success('暂存单据创建成功'); + }, + + // 删除暂存单据 + deleteTempOrder(order) { + this.$confirm(`确认删除暂存单据"${order.orderName}"吗?`, '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + const index = this.tempOrderList.findIndex(item => item.orderId === order.orderId); + if (index > -1) { + this.tempOrderList.splice(index, 1); + this.saveTempOrderList(); + this.$message.success('删除成功'); + } + }).catch(() => { + this.$message.info('已取消删除'); + }); + }, + + // 查看已选钢卷列表 + viewSelectedCoils(order) { + this.currentTempOrder = order; + this.selectedCoilsVisible = true; + }, + + // 编辑单据名称 + editOrderName(order) { + this.$prompt('请输入新的单据名称', '编辑单据名称', { + confirmButtonText: '确定', + cancelButtonText: '取消', + inputValue: order.orderName, + inputValidator: (value) => { + if (!value || value.trim() === '') { + return '单据名称不能为空'; + } + return true; + } + }).then(({ value }) => { + const newName = value.trim(); + // 检查名称是否重复 + const duplicateOrder = this.tempOrderList.find(item => + item.orderId !== order.orderId && item.orderName === newName + ); + + if (duplicateOrder) { + this.$message.warning('单据名称已存在,请使用其他名称'); + return; + } + + // 更新单据名称 + order.orderName = newName; + this.saveTempOrderList(); + this.$message.success('单据名称修改成功'); + }).catch(() => { + this.$message.info('已取消编辑'); + }); + }, + + // 打开钢卷选择对话框 + openCoilSelection(order) { + this.currentTempOrder = order; + this.coilSelectionVisible = true; + this.searchCoils(); + }, + + // 计算总重量 + calculateTotalWeight(coils) { + if (!coils || coils.length === 0) return 0; + return coils.reduce((total, coil) => { + return total + (parseFloat(coil.netWeight) || 0); + }, 0); + }, + + // 计算选中钢卷的总重量 + calculateSelectedWeight() { + return this.calculateTotalWeight(this.selectedCoils); + }, + + // 查询钢卷 + async searchCoils() { + this.coilLoading = true; + try { + // 构建查询参数 + const params = { ...this.coilQueryParams }; + + // 移除空值参数 + Object.keys(params).forEach(key => { + if (params[key] === '' || params[key] === null || params[key] === undefined) { + delete params[key]; + } + }); + + // 调用接口查询钢卷 + const response = await listMaterialCoil(params); + this.availableCoils = response.rows || []; + this.coilTotal = response.total || 0; + + // 过滤掉所有单据中已选择的钢卷,确保钢卷在所有单据中唯一 + const allExistingCoilIds = []; + this.tempOrderList.forEach(order => { + if (order.coils && Array.isArray(order.coils)) { + order.coils.forEach(coil => { + if (coil.coilId) { + allExistingCoilIds.push(coil.coilId); + } + }); + } + }); + + // 如果是当前正在编辑的单据,排除当前单据中的钢卷(因为它们已经在allExistingCoilIds中了) + // 这样可以确保其他单据不能选择当前单据已选的钢卷 + this.availableCoils = this.availableCoils.filter(coil => !allExistingCoilIds.includes(coil.coilId)); + + } catch (error) { + console.error('查询钢卷失败:', error); + this.$message.error('查询钢卷失败'); + } finally { + this.coilLoading = false; + } + }, + + // 重置钢卷查询条件 + resetCoilQuery() { + this.coilQueryParams = { + pageNum: 1, + pageSize: 20, + enterCoilNo: '', + currentCoilNo: '', + itemName: '', + itemSpecification: '', + itemMaterial: '', + status: 0, + orderBy: true, + dataType: 1, + materialType: '成品', + itemType: 'product', + excludeBound: true, + selectType: 'product' + }; + this.searchCoils(); + }, + + // 处理钢卷选择变化 + handleCoilSelection(selection) { + this.selectedCoils = selection; + }, + + // 保存选中的钢卷 + saveSelectedCoils() { + if (!this.currentTempOrder) { + this.$message.error('请先选择暂存单据'); + return; + } + + if (this.selectedCoils.length === 0) { + this.$message.warning('请选择要添加的钢卷'); + return; + } + + // 确保coils数组存在 + if (!this.currentTempOrder.coils) { + this.currentTempOrder.coils = []; + } + + // 由于在查询阶段已经过滤了所有重复的钢卷,这里不需要再次检查 + // 但为了安全起见,保留基本的检查逻辑 + if (this.currentTempOrder.coils && this.currentTempOrder.coils.length > 0) { + const existingCoilIds = this.currentTempOrder.coils.map(coil => coil.coilId); + const duplicateCoils = this.selectedCoils.filter(coil => existingCoilIds.includes(coil.coilId)); + + if (duplicateCoils.length > 0) { + this.$message.warning(`钢卷 ${duplicateCoils.map(coil => coil.enterCoilNo).join(', ')} 已存在,不能重复添加`); + return; + } + } + + // 添加钢卷到当前单据 + this.currentTempOrder.coils.push(...this.selectedCoils); + this.saveTempOrderList(); + + this.$message.success(`成功添加 ${this.selectedCoils.length} 个钢卷`); + + // 关闭对话框并重置选择 + this.coilSelectionVisible = false; + this.selectedCoils = []; + }, + + // 从单据中移除钢卷 + removeCoilFromOrder(index) { + if (!this.currentTempOrder || !this.currentTempOrder.coils || !this.currentTempOrder.coils[index]) return; + + this.$confirm('确认移除该钢卷吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.currentTempOrder.coils.splice(index, 1); + this.saveTempOrderList(); + this.$message.success('移除成功'); + }).catch(() => { + this.$message.info('已取消移除'); + }); + }, + + // 钢卷分页相关方法 + handleCoilSizeChange(val) { + this.coilQueryParams.pageSize = val; + this.coilQueryParams.pageNum = 1; + this.searchCoils(); + }, + + handleCoilCurrentChange(val) { + this.coilQueryParams.pageNum = val; + this.searchCoils(); + }, + // 进入数字钢卷页面 handleNumberCoilClick(row) { this.$router.push({