From a22a1d64e8031800e76cbc1d81f391e5d8af3acd Mon Sep 17 00:00:00 2001 From: zhangdi <1104545947@qq.com> Date: Tue, 24 Mar 2026 20:17:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=92=E4=BA=A7=E7=AE=A1=E7=90=86=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 2 +- public/config.js | 3 +- src/api/productionSchedulingPlan/basic.js | 2 +- .../components/addQuantityDialog.vue | 2 +- .../components/inPlantMaintenance.vue | 5 +- .../components/processMainte/partDetails.vue | 3 +- .../components/batchesDialog.vue | 12 +- .../basic/components/addEquipment.vue | 707 ++++++++++++++++++ .../basic/components/addPersonnel.vue | 444 +++++++++++ .../basic/equipmentCapacity.vue | 239 +++--- .../basic/personnelCapacity.vue | 118 ++- .../basic/principalProducer.vue | 1 - 12 files changed, 1389 insertions(+), 149 deletions(-) create mode 100644 src/views/productionSchedulingPlan/basic/components/addEquipment.vue create mode 100644 src/views/productionSchedulingPlan/basic/components/addPersonnel.vue diff --git a/index.html b/index.html index c2f9877..dc1538b 100644 --- a/index.html +++ b/index.html @@ -22,7 +22,7 @@ - + 电镀智能化生产管理系统 diff --git a/public/config.js b/public/config.js index 67782e4..1742def 100644 --- a/public/config.js +++ b/public/config.js @@ -1,6 +1,7 @@ window.LOAD_Remind = 86400000 window.TIMED_Trigger=86400000 window.YINGDU_Trigger=3000 //硬度检测 轮巡时间 + window.PROCESS_FLOW_CARD_HEAT_METER="http://192.168.169.172:9000/jmreport/view/1154214123878776832"//工艺流程卡地址 热表公用 window.PROCESS_FLOW_CARD_HEAT_SINTER="http://192.168.169.172:9000/jmreport/view/1154632438942031872"//工艺流程卡地址 烧结 @@ -19,8 +20,6 @@ window.COMPANION = "http://192.168.169.172:9000/jmreport/view/118870568359470694 // 领料单打印 window.WARE_MATERIAL_PRINT = "http://192.168.169.172:9000/jmreport/view/1181486341205573632" -// 领料单明细打印 - // 库存汇总标签打印 window.WARE_MATERIAL_STOCK_TAG = "http://192.168.169.172:9000/jmreport/view/1181492297180168192" diff --git a/src/api/productionSchedulingPlan/basic.js b/src/api/productionSchedulingPlan/basic.js index bcbc77d..861b2e8 100644 --- a/src/api/productionSchedulingPlan/basic.js +++ b/src/api/productionSchedulingPlan/basic.js @@ -384,7 +384,7 @@ export const getDetailSintTempCurve = params => { // 获取证书类型列表数据/personAbility/selectCertificateList export const getSelectCertificateList = params => { return request({ - url: '/personAbility/selectCertificateList', + url: '/blade-scheduling/personAbility/selectCertificateList', method: 'get', params: params, }); diff --git a/src/views/processManagement/bathRefine/components/addQuantityDialog.vue b/src/views/processManagement/bathRefine/components/addQuantityDialog.vue index e43c9ec..dd3e2fe 100644 --- a/src/views/processManagement/bathRefine/components/addQuantityDialog.vue +++ b/src/views/processManagement/bathRefine/components/addQuantityDialog.vue @@ -211,7 +211,7 @@ export default { row => row.id == this.form.tableData[index].batchNo ); console.log(select, 'select'); - this.form.tableData[index].batchNoName = select[0].name; + this.form.tableData[index].batchName = select[0].name; }, // 切换作业中心 changeWorkCenter(index) { diff --git a/src/views/processManagement/components/inPlantMaintenance.vue b/src/views/processManagement/components/inPlantMaintenance.vue index f57a665..a458fb0 100644 --- a/src/views/processManagement/components/inPlantMaintenance.vue +++ b/src/views/processManagement/components/inPlantMaintenance.vue @@ -26,7 +26,8 @@ 导入 + + + \ No newline at end of file diff --git a/src/views/productionSchedulingPlan/basic/components/addPersonnel.vue b/src/views/productionSchedulingPlan/basic/components/addPersonnel.vue new file mode 100644 index 0000000..855987a --- /dev/null +++ b/src/views/productionSchedulingPlan/basic/components/addPersonnel.vue @@ -0,0 +1,444 @@ + + + \ No newline at end of file diff --git a/src/views/productionSchedulingPlan/basic/equipmentCapacity.vue b/src/views/productionSchedulingPlan/basic/equipmentCapacity.vue index fdc99c1..dc064ef 100644 --- a/src/views/productionSchedulingPlan/basic/equipmentCapacity.vue +++ b/src/views/productionSchedulingPlan/basic/equipmentCapacity.vue @@ -18,21 +18,41 @@ @refresh-change="refreshChange" @on-load="onLoad" :before-open="beforeOpen" + :span-method="spanMethod" > - + - + - @@ -43,8 +63,12 @@ import { addEquipAbility, updateEquipAbility, } from '@/api/productionSchedulingPlan/basic'; +import addEquipment from './components/addEquipment.vue'; +import { ElButton } from 'element-plus'; export default { - components: {}, + components: { + addEquipment, + }, data() { return { form: {}, @@ -70,8 +94,8 @@ export default { border: true, index: true, selection: false, - addBtn: true, - editBtn: true, + addBtn: false, + editBtn: false, viewBtn: false, delBtn: true, editBtnText: '修改', @@ -98,75 +122,32 @@ export default { searchMenuPosition: 'right', align: 'center', column: [ - { - label: '作业中心', - prop: 'workCenterId', - search: true, - sortable: true, - span: 12, - width: 120, - type: 'select', - filterable: true, - dicUrl: '/blade-scheduling/workCenter/findList', - rules: [ - { - required: true, - message: '请选择', - trigger: 'blur', - }, - ], - props: { - label: 'wcName', - value: 'id', - }, - change: val => { - this.onChangeData(val.item, 'workCenterId'); - }, - }, { label: '作业中心', prop: 'workCenterName', - search: false, + search: true, sortable: true, span: 12, hide: true, display: false, }, { - label: '设备编码', - prop: 'equipCode', + label: '设备名称', + prop: 'equipName', search: true, sortable: true, span: 12, width: 120, - type: 'select', - // hide:true, - filterable: true, - dicUrl: '/blade-scheduling/equipment/findList', - props: { - label: 'deviceCode', - value: 'deviceCode', - }, - rules: [ - { - required: true, - message: '请选择', - trigger: 'blur', - }, - ], - change: val => { - this.onChangeData(val.item, 'equipName'); - }, + disabled: true, }, { - label: '设备名称', - prop: 'equipName', - search: false, + label: '设备编码', + prop: 'equipCode', + search: true, sortable: true, span: 12, width: 120, disabled: true, - // display:false, }, { label: '设备型号', @@ -177,15 +158,6 @@ export default { width: 120, disabled: true, }, - // { - // label: '设备编码', - // prop: 'equipCode', - // search: true, - // sortable: true, - // span: 12, - // width: 120, - // disabled:true, - // }, { label: '设备分类', @@ -213,31 +185,7 @@ export default { }, ], }, - { - label: '工艺能力', - prop: 'craftId', - search: false, - sortable: true, - span: 12, - width: 120, - type: 'select', - filterable: true, - dicUrl: '/blade-scheduling/craftAbility/findList', - props: { - label: 'caName', - value: 'id', - }, - rules: [ - { - required: true, - message: '请选择', - trigger: 'blur', - }, - ], - change: val => { - this.onChangeData(val.item, 'craftId'); - }, - }, + { label: '工艺能力', prop: 'craftName', @@ -248,7 +196,7 @@ export default { display: false, }, { - label: '额定加工能力(烧结-个/热表-面积)', + label: '额定加工能力(烧结-件/热表-dm²)', prop: 'standardProcessAbility', search: false, sortable: true, @@ -336,9 +284,100 @@ export default { }, data: [], + addShow: false, + moldAddMore: false, + title: '新增', + rowData: [], //行数据 + spanArr: [ + { + prop: 'workCenterName', + span: [], + }, + { + prop: 'equipName', + span: [], + }, + { + prop: 'equipCode', + span: [], + }, + ], }; }, methods: { + // 计算合并单元格数据 + getSpanArr() { + this.spanArr = [ + { prop: 'workCenterName', span: [] }, + { prop: 'equipName', span: [] }, + { prop: 'equipCode', span: [] }, + ]; + + this.spanArr.forEach(item => { + item.span = []; + item.pos = 0; // 记录合并起始位置 + + for (let i = 0; i < this.data.length; i++) { + if (i === 0) { + // 第一行 + item.span.push(1); + item.pos = 1; + } else { + // 判断当前行与上一行是否相同 + if (this.data[i][item.prop] === this.data[i - 1][item.prop]) { + // 相同则合并行数 +1 + item.span[this.pos] += 1; + item.span.push(0); + } else { + // 不同则重新开始 + item.span.push(1); + item.pos = i; + } + } + } + }); + }, + // 合并单元格方法 + spanMethod({ row, column, rowIndex, columnIndex }) { + // 只处理前三列 + const mergeProps = ['workCenterName', 'equipName', 'equipCode']; + + if (!mergeProps.includes(column.property)) { + return [1, 1]; + } + + // 查找对应列的合并数据 + const spanData = this.spanArr.find(item => item.prop === column.property); + console.log(9999999, column.property); + if (!spanData) { + return [1, 1]; + } + + const rowspan = spanData.span[rowIndex] || 1; + const colspan = rowspan > 0 ? 1 : 0; + + return { + rowspan: rowspan, + colspan: colspan, + }; + }, + // 新增 + handleAdd() { + this.addShow = true; + this.moldAddMore = true; + this.title = '新增'; + }, + // 修改 + handleEdit(row) { + this.addShow = true; + this.moldAddMore = true; + this.rowData = [row]; + this.title = '修改'; + }, + closeDialog() { + this.addShow = false; + this.onLoad(this.page, this.query); + }, beforeOpen(done, type) { if (['edit', 'view'].includes(type)) { // this.form.processId = this.form.processId+'' @@ -442,7 +481,11 @@ export default { this.data = res.data.data.records; this.loading = false; this.page.total = res.data.data.total; - this.selectionClear(); + this.data.forEach(item => { + if (item.partType != 0) { + item.abilityList = JSON.parse(item.standardProcessAbility); + } + }); } ); }, diff --git a/src/views/productionSchedulingPlan/basic/personnelCapacity.vue b/src/views/productionSchedulingPlan/basic/personnelCapacity.vue index 99c6d2a..fc59405 100644 --- a/src/views/productionSchedulingPlan/basic/personnelCapacity.vue +++ b/src/views/productionSchedulingPlan/basic/personnelCapacity.vue @@ -18,14 +18,35 @@ @refresh-change="refreshChange" @on-load="onLoad" :before-open="beforeOpen" - > - + - + - + + + + @@ -37,8 +58,11 @@ import { updatePersonAbility, getSelectCertificateList, } from '@/api/productionSchedulingPlan/basic'; +import addPersonnel from './components/addPersonnel.vue'; export default { - components: {}, + components: { + addPersonnel, + }, data() { return { form: {}, @@ -64,8 +88,8 @@ export default { border: true, index: true, selection: false, - addBtn: true, - editBtn: true, + addBtn: false, + editBtn: false, viewBtn: false, delBtn: true, editBtnText: '修改', @@ -108,7 +132,7 @@ export default { change: (val, row) => { this.onChangeData(val.item, 'workCenterId'); }, - rules: [ + rules: [ { required: true, message: '请选择', @@ -197,7 +221,7 @@ export default { search: false, sortable: true, span: 12, - type:'select', + type: 'select', rules: [ { required: true, @@ -205,16 +229,16 @@ export default { trigger: 'blur', }, ], - dicData:[ + dicData: [ { - label:'单个零件', - value:'0' + label: '单个零件', + value: '0', }, { - label:'订单', - value:'1' - } - ] + label: '订单', + value: '1', + }, + ], }, { label: '额定工时(分钟/每人每个)', @@ -222,7 +246,7 @@ export default { search: false, sortable: true, span: 12, - width:250, + width: 250, labelWidth: 220, type: 'number', rules: [ @@ -240,17 +264,9 @@ export default { sortable: true, span: 12, labelWidth: 180, - width:180, - type: 'number', - rules: [ - { - required: true, - message: '请输入', - trigger: 'blur', - }, - ], + width: 180, }, - { + { label: '生产标识', prop: 'productIdent', search: false, @@ -265,7 +281,7 @@ export default { sortable: true, span: 12, type: 'select', - hide:true, + hide: true, filterable: true, dicUrl: '/blade-scheduling/personAbility/selectCertificateList', props: { @@ -282,21 +298,36 @@ export default { search: true, sortable: true, span: 12, - display:false, + display: false, }, - ], }, data: [], + showDialog: false, + title: '新增', + rowData: {}, }; }, methods: { + handleAdd() { + this.showDialog = true; + this.title = '新增'; + }, + handleEdit(row) { + this.showDialog = true; + this.title = '修改'; + this.rowData = row; + }, + closeDialog() { + this.showDialog = false; + this.onLoad(this.page, this.query); + }, beforeOpen(done, type) { if (['edit', 'view'].includes(type)) { - this.form.processId = this.form.processId+'' - this.form.craftId = this.form.craftId+'' - this.form.workCenterId = this.form.workCenterId+'' + this.form.processId = this.form.processId + ''; + this.form.craftId = this.form.craftId + ''; + this.form.workCenterId = this.form.workCenterId + ''; } done(); }, @@ -310,14 +341,14 @@ export default { if (val && type == 'craftId') { this.form.craftName = val.caName; } - if(val && type == 'certificateId'){ + if (val && type == 'certificateId') { this.form.certificateName = val.name; } }, rowSave(row, done, loading) { - if(row.productIdent != ''&&row.certificateId == ''){ + if (row.productIdent != '' && row.certificateId == '') { loading(); - return this.$message.error('请选择证书类型') + return this.$message.error('请选择证书类型'); } addPersonAbility(row).then( () => { @@ -335,10 +366,13 @@ export default { ); }, rowUpdate(row, index, done, loading) { - console.log(row,row.productIdent != ''&&(row.certificateId == ''||row.certificateId == undefined)); - if(row.productIdent != ''&&(row.certificateId == ''||row.certificateId == undefined)){ + console.log( + row, + row.productIdent != '' && (row.certificateId == '' || row.certificateId == undefined) + ); + if (row.productIdent != '' && (row.certificateId == '' || row.certificateId == undefined)) { loading(); - return this.$message.error('请选择证书类型') + return this.$message.error('请选择证书类型'); } updatePersonAbility(row).then( () => { @@ -407,7 +441,11 @@ export default { this.data = res.data.data.records; this.loading = false; this.page.total = res.data.data.total; - this.selectionClear(); + this.data.forEach(item => { + if (item.partType != 0) { + item.abilityList = JSON.parse(item.standardTime); + } + }); } ); }, diff --git a/src/views/productionSchedulingPlan/basic/principalProducer.vue b/src/views/productionSchedulingPlan/basic/principalProducer.vue index a192cf2..d609e02 100644 --- a/src/views/productionSchedulingPlan/basic/principalProducer.vue +++ b/src/views/productionSchedulingPlan/basic/principalProducer.vue @@ -120,7 +120,6 @@ export default { search: true, sortable: true, span: 12, - hide: true, display: false, }, {