diff --git a/klp-ui/src/components/CoilSelector/data.js b/klp-ui/src/components/CoilSelector/data.js index 1234331d..9ff3f2f3 100644 --- a/klp-ui/src/components/CoilSelector/data.js +++ b/klp-ui/src/components/CoilSelector/data.js @@ -1,4 +1,5 @@ -export const defaultColumns = [{ +export const defaultColumns = [ + { label: '入场卷号', align: 'center', prop: 'enterCoilNo', @@ -61,10 +62,149 @@ export const defaultColumns = [{ width: '100', showOverflowTooltip: true }, - // { - // label: '备注', - // align: 'center', - // prop: 'remark', - // showOverflowTooltip: true - // } + { + label: '备注', + align: 'center', + prop: 'remark', + showOverflowTooltip: true + }, +] + +export const fullPageDefaultColumns = [ + { + label: '入场卷号', + align: 'center', + prop: 'enterCoilNo', + showOverflowTooltip: true + }, + { + label: '当前卷号', + align: 'center', + prop: 'currentCoilNo', + showOverflowTooltip: true + }, + { + label: '存储位置', + align: 'center', + prop: 'actualWarehouseName', + width: '120', + showOverflowTooltip: true + }, + { + label: '物料', + align: 'center', + prop: 'itemName', + width: '100' + }, + { + label: '规格', + align: 'center', + prop: 'specification', + width: '100' + }, + { + label: '重量(t)', + align: 'center', + prop: 'netWeight', + width: '100' + }, + { + label: '材质', + align: 'center', + prop: 'material', + width: '100' + }, + { + label: '厂家', + align: 'center', + prop: 'manufacturer', + width: '100' + }, + { + label: '库区', + align: 'center', + prop: 'warehouseName', + width: '120', + showOverflowTooltip: true + }, + { + label: '创建时间', + align: 'center', + prop: 'createTime', + width: '100', + showOverflowTooltip: true + }, + { + label: '品质', + align: 'center', + prop: 'qualityStatus', + }, + { + label: '表面处理', + align: 'center', + prop: 'surfaceTreatmentDesc', + }, + { + label: '备注', + align: 'center', + prop: 'remark', + width: '100', + showOverflowTooltip: true + }, + { + label: '切边', + align: 'center', + prop: 'trimmingRequirement', + }, + { + label: '包装', + align: 'center', + prop: 'packagingRequirement', + }, + { + label: '镀层质量', + align: 'center', + prop: 'zincLayer', + }, +] + +export const optionalColumns = [ + { label: '入场卷号', value: 'enterCoilNo' }, + { label: '当前卷号', value: 'currentCoilNo' }, + { label: '厂家钢卷号', value: 'supplierCoilNo' }, + { label: '逻辑库区', value: 'warehouseName' }, + { label: '实际库区', value: 'actualWarehouseName' }, + { label: '质量状态', value: 'qualityStatus' }, + { label: '切边要求', value: 'trimmingRequirement' }, + { label: '原料材质', value: 'packingStatus' }, + { label: '包装要求', value: 'packagingRequirement' }, + { label: '产品类型', value: 'itemId' }, + { label: '品名', value: 'itemName' }, + { label: '宽度', value: 'computedWidth' }, + { label: '厚度', value: 'computedThickness' }, + { label: '规格', value: 'specification' }, + { label: '材质', value: 'material' }, + { label: '厂家', value: 'manufacturer' }, + { label: '表面处理', value: 'surfaceTreatmentDesc' }, + { label: '镀层质量', value: 'zincLayer' }, + { label: '长度', value: 'length' }, + { label: '毛重', value: 'grossWeight' }, + { label: '净重', value: 'netWeight' }, + { label: '创建时间', value: 'createTime' }, + { label: '创建人', value: 'createBy' }, + { label: '更新时间', value: 'updateTime' }, + { label: '更新人', value: 'updateByName' }, + { label: '备注', value: 'remark' }, + { label: '生产开始时间', value: 'productionStartTime' }, + { label: '生产结束时间', value: 'productionEndTime' }, + { label: '生产耗时', value: 'productionDuration' }, + { label: '出库状态', value: 'status' }, + { label: '操作完成时间', value: 'actionCompleteTime' }, + { label: '生产线速度', value: 'productionSpeed' }, + { label: '发货绑定车牌号', value: 'bindLicensePlate' }, + { label: '发货绑定目标客户', value: 'bindConsigneeUnit' }, + { label: '发货绑定单位', value: 'bindSenderUnit' }, + { label: '发货绑定负责人', value: 'bindPrincipal' }, + { label: '发货配卷时间', value: 'bindDeliveryTime' }, + { label: '发货时间', value: 'exportTime' }, ] diff --git a/klp-ui/src/components/CoilSelector/index.vue b/klp-ui/src/components/CoilSelector/index.vue index 26701f9c..8bf21d68 100644 --- a/klp-ui/src/components/CoilSelector/index.vue +++ b/klp-ui/src/components/CoilSelector/index.vue @@ -19,75 +19,85 @@ -
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + 全选当前卷 + 显示钢卷地图 + 显示订单详情 + + + + +
搜索 重置 - 全选当前卷 - 显示钢卷地图 - 显示订单详情 - - + 列配置 +
+
@@ -99,12 +109,6 @@ - - - - - - @@ -138,17 +142,11 @@
- + - - - - - - - + @@ -182,12 +180,6 @@ - - - - - - @@ -226,6 +218,52 @@
+ + + + + + + + + + + + + + + + + + + + +
@@ -236,7 +274,7 @@ import { listActualWarehouse } from "@/api/wms/actualWarehouse"; import { treeActualWarehouseTwoLevel } from "@/api/wms/actualWarehouse"; import MemoInput from '@/components/MemoInput/index.vue'; import MutiSelect from '@/components/MutiSelect/index.vue'; -import { defaultColumns } from './data'; +import { defaultColumns, fullPageDefaultColumns, optionalColumns } from './data'; import ActualWarehouseSelect from '@/components/KLPService/ActualWarehouseSelect/index.vue'; import WarehouseBirdMini from '@/views/wms/warehouse/components/WarehouseBirdMini.vue'; import DragResizeBox from '@/components/DragResizeBox/index.vue'; @@ -323,7 +361,7 @@ export default { defaultType: { type: String, default: 'product' - } + }, }, data() { return { @@ -346,10 +384,10 @@ export default { actualWarehouseId: null, itemType: this.defaultType, selectType: this.defaultType, - status: 0, // 不包含已发货的钢卷 - dataType: 1 // 只查询当前数据,不查询历史数据 + status: 0, + dataType: 1 }, - columns: defaultColumns, + optionalColumns, selectedCoils: [], warehouseList: [], selectedNodeId: null, @@ -359,6 +397,9 @@ export default { treeLoading: false, showOrderInfo: false, coilTrimStatistics: {}, + showColumnSetting: false, + columnsConfig: [], + columnsConfigVersion: 0, }; }, computed: { @@ -383,8 +424,37 @@ export default { } }, renderColumns() { - // 如果有自定义列配置,使用它;否则使用默认列 - return this.coilColumn.length > 0 ? this.coilColumn : this.columns; + const _ = this.columnsConfigVersion; + if (this.coilColumn.length > 0) { + return this.coilColumn; + } + const storageKey = this.columnStorageKey; + const savedConfig = localStorage.getItem(storageKey); + if (savedConfig) { + try { + const config = JSON.parse(savedConfig); + if (config.length > 0) { + return config; + } + } catch (e) { + console.error('解析列配置失败', e); + } + } + return this.orderBy ? fullPageDefaultColumns : defaultColumns; + }, + columnStorageKey() { + return `coil-selector-columns-${this.orderBy ? 'full' : 'default'}`; + }, + displayColumns() { + const displayData = [...this.columnsConfig]; + displayData.push({ + label: "", + prop: "", + width: "100", + align: "center", + _isEmpty: true + }); + return displayData; }, // 已选钢卷ID集合(用于快速判断) selectedCoilIds() { @@ -411,7 +481,7 @@ export default { dialogVisible(val) { if (val) { this.resetQuery(); - this.getList(); + // this.getList(); } }, // 非触发器模式下,监听外部visible属性变化 @@ -438,9 +508,13 @@ export default { return; } if (val && !this.selectedCoil?.coilId) { - // 如果传入了coilId但还没有选中数据,尝试通过id匹配(可选功能) this.matchCoilById(val); } + }, + showColumnSetting(val) { + if (val) { + this.loadColumnConfig(); + } } }, created() { @@ -694,8 +768,78 @@ export default { // 关闭对话框 handleClose() { this.dialogVisible = false; - // 触发关闭事件,通知父组件 this.$emit('close'); + }, + confirmColumnConfig() { + this.saveColumnConfig(); + this.loadColumnConfig(); + this.showColumnSetting = false; + }, + loadColumnConfig() { + const storageKey = this.columnStorageKey; + const savedConfig = localStorage.getItem(storageKey); + if (savedConfig) { + try { + this.columnsConfig = JSON.parse(savedConfig); + } catch (e) { + console.error('解析列配置失败', e); + this.columnsConfig = this.orderBy ? [...fullPageDefaultColumns] : [...defaultColumns]; + } + } else { + this.columnsConfig = this.orderBy ? [...fullPageDefaultColumns] : [...defaultColumns]; + } + }, + saveColumnConfig() { + const nonEmptyColumns = this.columnsConfig.filter(col => col.prop && col.label); + localStorage.setItem(this.columnStorageKey, JSON.stringify(nonEmptyColumns)); + this.columnsConfigVersion++; + }, + moveColumnUp(index) { + if (index > 0 && !this.displayColumns[index]._isEmpty) { + const temp = this.columnsConfig[index]; + this.columnsConfig.splice(index, 1); + this.columnsConfig.splice(index - 1, 0, temp); + this.saveColumnConfig(); + } + }, + moveColumnDown(index) { + if (index < this.columnsConfig.length - 1 && !this.displayColumns[index]._isEmpty) { + const temp = this.columnsConfig[index]; + this.columnsConfig.splice(index, 1); + this.columnsConfig.splice(index + 1, 0, temp); + this.saveColumnConfig(); + } + }, + removeColumn(index) { + if (!this.displayColumns[index]._isEmpty) { + this.columnsConfig.splice(index, 1); + this.saveColumnConfig(); + } + }, + columnPropChange(propValue, row) { + const item = optionalColumns.find(item => item.value === propValue); + if (item) { + row.label = item.label; + } else { + row.label = propValue; + } + if (row._isEmpty && propValue) { + const newColumn = { + label: row.label, + prop: row.prop, + width: row.width, + align: row.align, + showOverflowTooltip: true + }; + this.columnsConfig.push(newColumn); + this.saveColumnConfig(); + } else { + this.saveColumnConfig(); + } + }, + resetColumnConfig() { + this.columnsConfig = this.orderBy ? [...fullPageDefaultColumns] : [...defaultColumns]; + this.saveColumnConfig(); } } };