From a4674a75bfffc500a049beafb74daaec50c8f87f Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期四, 17 七月 2025 17:46:06 +0800 Subject: [PATCH] 三保工单审批流程 --- src/views/eam/base/modules/EamMaintenanceStandardModal.vue | 368 ++++++++++++++++++++++++++++++++-------------------- 1 files changed, 226 insertions(+), 142 deletions(-) diff --git a/src/views/eam/base/modules/EamMaintenanceStandardModal.vue b/src/views/eam/base/modules/EamMaintenanceStandardModal.vue index 0ece138..2504bf7 100644 --- a/src/views/eam/base/modules/EamMaintenanceStandardModal.vue +++ b/src/views/eam/base/modules/EamMaintenanceStandardModal.vue @@ -1,13 +1,6 @@ <template> - <j-modal - :title="title" - :width="1200" - :visible="visible" - :confirmLoading="confirmLoading" - switchFullscreen - @ok="handleOk" - @cancel="handleCancel" - cancelText="鍏抽棴"> + <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen centered + @ok="handleOk" @cancel="handleCancel" cancelText="鍏抽棴"> <a-spin :spinning="spinning"> <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-row :gutter="24"> @@ -44,6 +37,7 @@ <a-col :span="8"> <a-form-model-item prop="maintenancePeriod" label="淇濆吇鍛ㄦ湡"> <a-input-number v-model="model.maintenancePeriod" placeholder="璇疯緭鍏ヤ繚鍏诲懆鏈�" :min="1" :precision="0" + :disabled="model.maintenanceCategory=='POINT_INSPECTION'||model.maintenanceCategory=='SECOND_MAINTENANCE'" style="width: 100%"/> </a-form-model-item> </a-col> @@ -70,33 +64,44 @@ </a-row> <a-row :gutter="24"> - <j-vxe-table - ref="editableDetailTable" - :rowNumber="true" - :rowSelection="true" - :bordered="true" - :alwaysEdit="true" - :toolbar="true" - :toolbarConfig="detail.toolbarConfig" - keep-source - :height="300" - :loading="detail.loading" - :dataSource="detail.dataSource" - :columns="detail.columns" - style="margin-top: 8px;"> - <template v-slot:itemPart="props"> - <a-textarea v-model="props.row.itemPart" allowClear @change="$refs.editableDetailTable.validateTable()" - :placeholder="model.maintenanceCategory!='THIRD_MAINTENANCE'?'浠呬笁淇濋渶瑕佺淮鎶�':'璇疯緭鍏ラ儴浣�'" :rows="1" - autoSize :disabled="model.maintenanceCategory!='THIRD_MAINTENANCE'"/> + <a-tabs :active-key="activeTabKey" v-if="model.maintenanceCategory" @change="handleTabChange"> + <!--鐐规--> + <template v-if="model.maintenanceCategory=='POINT_INSPECTION'"> + <a-tab-pane tab="鏃ョ偣妫�" key="1" forceRender> + <j-vxe-table ref="editableDetailTable1" rowNumber rowSelection bordered alwaysEdit toolbar + :toolbarConfig="detail.toolbarConfig" keep-source :height="300" + :dataSource="detail.dayInspectionList" :columns="detail.inspectionColumns"/> + </a-tab-pane> + <a-tab-pane tab="鍛ㄧ偣妫�" key="2" forceRender> + <j-vxe-table ref="editableDetailTable2" rowNumber rowSelection bordered alwaysEdit toolbar + :toolbarConfig="detail.toolbarConfig" keep-source :height="300" + :dataSource="detail.weekInspectionList" :columns="detail.inspectionColumns"/> + </a-tab-pane> </template> - <template v-slot:itemCategory="props"> - <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" - @change="$refs.editableDetailTable.validateTable()" - :placeholder="getItemCategoryPlaceholder" - :disabled="!Boolean(model.maintenanceCategory)||model.maintenanceCategory=='THIRD_MAINTENANCE'"/> + <!--浜屼繚--> + <template v-if="model.maintenanceCategory=='SECOND_MAINTENANCE'"> + <a-tab-pane tab="鎿嶄綔宸�" key="1" forceRender> + <j-vxe-table ref="editableDetailTable1" rowNumber rowSelection bordered alwaysEdit toolbar + :toolbarConfig="detail.toolbarConfig" keep-source :height="300" + :dataSource="detail.operatorMaintenanceList" :columns="detail.secondMaintenanceColumns"/> + </a-tab-pane> + <a-tab-pane tab="缁翠慨宸�" key="2" forceRender> + <j-vxe-table ref="editableDetailTable2" rowNumber rowSelection bordered alwaysEdit toolbar + :toolbarConfig="detail.toolbarConfig" keep-source :height="300" + :dataSource="detail.repairerMaintenanceList" :columns="detail.secondMaintenanceColumns"/> + </a-tab-pane> </template> - </j-vxe-table> + + <!--涓変繚--> + <template v-if="model.maintenanceCategory=='THIRD_MAINTENANCE'"> + <a-tab-pane tab="涓変繚" key="1"> + <j-vxe-table ref="editableDetailTable1" rowNumber rowSelection bordered alwaysEdit toolbar + :toolbarConfig="detail.toolbarConfig" keep-source :height="300" + :dataSource="detail.thirdMaintenanceList" :columns="detail.thirdMaintenanceColumns"/> + </a-tab-pane> + </template> + </a-tabs> </a-row> </a-form-model> </a-spin> @@ -132,6 +137,7 @@ }, confirmLoading: false, spinning: false, + activeTabKey: '1', validatorRules: { standardName: [ { required: true, message: '璇疯緭鍏ヨ鑼冨悕绉�', trigger: 'change' } @@ -156,9 +162,12 @@ upgrade: '/eam/maintenanceStandard/upgrade' }, detail: { - loading: false, - dataSource: [], - columns: [ + dayInspectionList: [], + weekInspectionList: [], + operatorMaintenanceList: [], + repairerMaintenanceList: [], + thirdMaintenanceList: [], + inspectionColumns: [ { title: 'ID', key: 'id', @@ -176,27 +185,7 @@ align: 'center', placeholder: '璇疯緭鍏ラ」鐩簭鍙�', width: 150, - validateRules: [ - { required: true, message: '璇疯緭鍏ラ」鐩簭鍙�' }, - { unique: true, message: '椤圭洰搴忓彿涓嶈兘閲嶅' } - ] - }, - { - title: '閮ㄤ綅', - key: 'itemPart', - type: JVXETypes.slot, - slotName: 'itemPart', - placeholder: '璇疯緭鍏ラ儴浣�', - align: 'center', - validateRules: [{ handler: this.itemPartValidate }] - }, - { - title: '淇濆吇椤瑰垎绫�', - key: 'itemCategory', - type: JVXETypes.slot, - slotName: 'itemCategory', - align: 'center', - validateRules: [{ handler: this.itemCategoryValidate }] + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] }, { title: '淇濆吇椤圭洰', @@ -204,9 +193,7 @@ placeholder: '璇疯緭鍏ヤ繚鍏婚」鐩�', type: JVXETypes.textarea, align: 'center', - validateRules: [ - { required: true, message: '璇疯緭鍏ヤ繚鍏婚」鐩�' } - ] + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] }, { title: '淇濆吇瑙勮寖鎴栬姹�', @@ -214,9 +201,72 @@ placeholder: '璇疯緭鍏ヤ繚鍏昏鑼冩垨瑕佹眰', type: JVXETypes.textarea, align: 'center', - validateRules: [ - { required: true, message: '璇疯緭鍏ヤ繚鍏昏鑼冩垨瑕佹眰' } - ] + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] + } + ], + secondMaintenanceColumns: [ + { + title: 'ID', + key: 'id', + type: JVXETypes.hidden + }, + { + title: 'standardId', + key: 'standardId', + type: JVXETypes.hidden + }, + { + title: '椤圭洰搴忓彿', + key: 'itemCode', + type: JVXETypes.inputNumber, + align: 'center', + placeholder: '璇疯緭鍏ラ」鐩簭鍙�', + width: 150, + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] + }, + { + title: '淇濆吇椤圭洰', + key: 'itemName', + placeholder: '璇疯緭鍏ヤ繚鍏婚」鐩�', + type: JVXETypes.textarea, + align: 'center', + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] + } + ], + thirdMaintenanceColumns: [ + { + title: 'ID', + key: 'id', + type: JVXETypes.hidden + }, + { + title: 'standardId', + key: 'standardId', + type: JVXETypes.hidden + }, + { + title: '淇濆吇閮ㄤ綅', + key: 'itemPart', + type: JVXETypes.textarea, + slotName: 'itemPart', + align: 'center', + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] + }, + { + title: '淇濆吇鍐呭', + key: 'itemName', + placeholder: '璇疯緭鍏�${title}', + type: JVXETypes.textarea, + align: 'center', + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] + }, + { + title: '楠屾敹鏍囧噯', + key: 'itemDemand', + placeholder: '璇疯緭鍏�${title}', + type: JVXETypes.textarea, + align: 'center', + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] } ], toolbarConfig: { @@ -228,49 +278,67 @@ } } }, - computed: { - getItemCategoryPlaceholder() { - if (!Boolean(this.model.maintenanceCategory)) return '璇烽�夋嫨淇濆吇鍒嗙被' - else { - if (this.model.maintenanceCategory != 'THIRD_MAINTENANCE') return '璇烽�夋嫨淇濆吇椤瑰垎绫�' - else return '涓変繚鏃犻渶缁存姢' - } - }, - - encodedDictCode() { - let suffix - if (!Boolean(this.model.maintenanceCategory) || this.model.maintenanceCategory === 'THIRD_MAINTENANCE') return - else suffix = this.model.maintenanceCategory.split('_')[1] - - const dictCode = `sys_dict_item,item_text,item_value,item_value like '%${suffix}' and dict_id='1940598438685134850'` - return encodeURIComponent(dictCode) - } - }, methods: { + // 涓婚〉闈㈢偣鍑绘柊澧炲悗瑙﹀彂 add() { + this.resetData() this.model = {} this.visible = true this.editable = true this.upgradeFlag = false - this.detail.dataSource = [] }, + /** + * 涓婚〉闈㈢偣鍑荤紪杈戝悗瑙﹀彂 + * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍 + */ edit(record) { + this.resetData() this.model = Object.assign({}, record) this.visible = true this.editable = false this.upgradeFlag = false - this.detail.dataSource = [] this.loadDetail(record.id) }, + /** + * 鐐瑰嚮鍗囩増鍚庤Е鍙� + * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍 + */ upgrade(record) { + this.resetData() this.model = Object.assign({}, record) this.visible = true this.editable = false this.upgradeFlag = true - this.detail.dataSource = [] this.loadDetail(record.id) + }, + + //鍔犺浇璇︽儏鏁版嵁 + loadDetail(standardId) { + this.spinning = true + getAction(this.url.detail, { standardId }) + .then(res => { + if (res.success) { + switch (this.model.maintenanceCategory) { + case 'POINT_INSPECTION': + this.detail.dayInspectionList = res.result.filter(item => item.itemCategory == 'DAY_INSPECTION') + this.detail.weekInspectionList = res.result.filter(item => item.itemCategory == 'WEEK_INSPECTION') + break + case 'SECOND_MAINTENANCE': + this.detail.operatorMaintenanceList = res.result.filter(item => item.itemCategory == 'OPERATOR_MAINTENANCE') + this.detail.repairerMaintenanceList = res.result.filter(item => item.itemCategory == 'REPAIRER_MAINTENANCE') + break + case 'THIRD_MAINTENANCE': + this.detail.thirdMaintenanceList = res.result.filter(item => !Boolean(item.itemCategory)) + break + default: + } + } + }) + .finally(() => { + this.spinning = false + }) }, /** @@ -278,70 +346,93 @@ * @param value 淇濆吇鍒嗙被鍊� */ handleMaintenanceCategoryChange(value) { + delete this.model.maintenancePeriod switch (value) { case 'THIRD_MAINTENANCE': this.model.periodUnit = '骞�' + if (this.activeTabKey != '1') this.activeTabKey = '1' break case 'SECOND_MAINTENANCE': this.model.periodUnit = '鏈�' + this.model.maintenancePeriod = 6 break case 'POINT_INSPECTION': this.model.periodUnit = '澶�' + this.model.maintenancePeriod = 1 break default: delete this.model.periodUnit } - - const tableData = this.$refs.editableDetailTable.getTableData() - tableData.forEach(item => { - if (value !== 'THIRD_MAINTENANCE') delete item.itemPart - delete item.itemCategory - }) - this.detail.dataSource = [...tableData] - console.log('tableData', tableData) + if (this.model.maintenancePeriod) this.$refs.form.clearValidate('maintenancePeriod') }, - /** - * 淇濆吇閮ㄤ綅鏍¢獙 - * @param cellValue 杈撳叆鍊� - * @param callback 鍥炶皟鍑芥暟 - */ - itemPartValidate({ cellValue }, callback) { - if (this.model.maintenanceCategory === 'THIRD_MAINTENANCE') { - if (cellValue) callback(true) - else callback(false, '璇烽�夋嫨${title}') - } else { - callback(true) - } - }, - - /** - * 淇濆吇椤瑰垎绫绘牎楠� - * @param cellValue 杈撳叆鍊� - * @param callback 鍥炶皟鍑芥暟 - */ - itemCategoryValidate({ cellValue }, callback) { - if (this.model.maintenanceCategory === 'THIRD_MAINTENANCE') { - callback(true) - } else { - if (cellValue) callback(true) - else callback(false, '璇烽�夋嫨${title}') - } + async handleTabChange(tabKey) { + let errMap = await this.$refs['editableDetailTable' + this.activeTabKey].validateTable() + if (errMap) return + this.activeTabKey = tabKey }, // 鎻愪氦浜嬩欢 async handleOk() { + // 淇濆吇鍒嗙被涓虹┖鏃朵笉鏍¢獙鏄庣粏 + if (this.model.maintenanceCategory) { + // 鏍¢獙褰撲笅tab涓嬬殑琛ㄦ牸鏄惁涓虹┖ + let tableData = this.$refs['editableDetailTable' + this.activeTabKey].getTableData() + if (tableData.length == 0) { + this.$notification.warning({ + message: '娑堟伅', + description: '褰撳墠淇濆吇鏄庣粏涓嶈兘涓虹┖' + }) + return + } + + // 鏍¢獙褰撳墠tab涓嬬殑琛ㄦ牸鏍¢獙瑙勫垯 + let errMap = await this.$refs['editableDetailTable' + this.activeTabKey].validateTable() + if (errMap) return false + + // 鏍¢獙鍙︿竴tab淇濆吇鏄庣粏琛ㄦ牸鏄惁涓虹┖(涓変繚鏃犻渶) + if (this.model.maintenanceCategory != 'THIRD_MAINTENANCE') { + if (this.activeTabKey == '1') tableData = this.$refs.editableDetailTable2.getTableData() + else tableData = this.$refs.editableDetailTable1.getTableData() + + if (tableData.length == 0) { + this.activeTabKey = this.activeTabKey == '1' ? '2' : '1' + this.$notification.warning({ + message: '娑堟伅', + description: '褰撳墠淇濆吇鏄庣粏涓嶈兘涓虹┖' + }) + return + } + } + } + const that = this - let errMap = await that.$refs.editableDetailTable.validateTable() - if (errMap) return false // 瑙﹀彂琛ㄥ崟楠岃瘉 this.$refs.form.validate(valid => { if (valid) { - let tableData = that.$refs.editableDetailTable.getTableData() - let removeData = that.$refs.editableDetailTable.getDeleteData() - that.model.tableDetailList = [...tableData] - that.model.removeDetailList = [...removeData] - + let tableData1 = that.$refs.editableDetailTable1.getTableData() + let tableData2 = [] + let currentTabItemMaintenanceList = [] + if (this.model.maintenanceCategory != 'THIRD_MAINTENANCE') { + tableData2 = that.$refs.editableDetailTable2.getTableData() + if (this.model.maintenanceCategory == 'POINT_INSPECTION') currentTabItemMaintenanceList = ['DAY_INSPECTION', 'WEEK_INSPECTION'] + else currentTabItemMaintenanceList = ['OPERATOR_MAINTENANCE', 'REPAIRER_MAINTENANCE'] + } + if (currentTabItemMaintenanceList.length != 0) { + tableData1 = tableData1.map(item => { + return { + ...item, + itemCategory: currentTabItemMaintenanceList[0] + } + }) + tableData2 = tableData2.map(item => { + return { + ...item, + itemCategory: currentTabItemMaintenanceList[1] + } + }) + } + that.model.tableDetailList = [...tableData1, ...tableData2] that.confirmLoading = that.spinning = true let httpUrl = '' let method = '' @@ -381,6 +472,15 @@ }) }, + resetData() { + this.activeTabKey = '1' + this.detail.dayInspectionList = [] + this.detail.weekInspectionList = [] + this.detail.operatorMaintenanceList = [] + this.detail.repairerMaintenanceList = [] + this.detail.thirdMaintenanceList = [] + }, + handleCancel() { this.close() }, @@ -389,23 +489,6 @@ this.$emit('close') this.visible = false this.$refs.form.clearValidate() - }, - - //鍔犺浇璇︽儏鏁版嵁 - loadDetail(standardId) { - this.spinning = true - this.detail.dataSource = [] - if (standardId) { - getAction(this.url.detail, { standardId }) - .then(res => { - if (res.success) { - this.detail.dataSource = [...res.result] - } - }) - .finally(() => { - this.spinning = false - }) - } } } @@ -419,5 +502,6 @@ /deep/ textarea.ant-input { resize: none; + margin-bottom: 0; } </style> \ No newline at end of file -- Gitblit v1.9.3