From 85f1c073fea2da2fe037d149d42bcec4fe94152f Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期三, 23 七月 2025 16:50:01 +0800 Subject: [PATCH] 1、调整保养规范流程审批明细展示以及增加审批节点拒绝时的展示条件 2、保养规范页面增加详情展示(启用、待提交以及作废状态不展示) --- src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue | 299 ++++++++++++++++++++++++++++++++----------------- src/views/eam/base/modules/EamMaintenanceStandardModal.vue | 1 src/views/flowable/workflow/FlowTodo.vue | 5 src/views/eam/base/EamMaintenanceStandardList.vue | 32 +++++ 4 files changed, 227 insertions(+), 110 deletions(-) diff --git a/src/views/eam/base/EamMaintenanceStandardList.vue b/src/views/eam/base/EamMaintenanceStandardList.vue index e1e7223..7aac372 100644 --- a/src/views/eam/base/EamMaintenanceStandardList.vue +++ b/src/views/eam/base/EamMaintenanceStandardList.vue @@ -117,12 +117,18 @@ </a-popconfirm> </template> - <template v-if="record.standardStatus != 'WAIT_SUBMIT'"> + <template v-if="record.standardStatus !== 'WAIT_SUBMIT'"> <a-divider v-has="'standard:delete'" type="vertical" v-if="record.standardStatus=='START'"/> <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> <a v-has="'standard:delete'" @click.stop="event=>event.stopPropagation()">鍒犻櫎</a> </a-popconfirm> + </template> + + <template v-if="record.standardStatus !== 'WAIT_SUBMIT'&&record.standardStatus!=='ABOLISH'&&record.standardStatus!=='START'"> + <a-divider type="vertical"/> + + <a @click.stop="handleDetail(record)">璇︽儏</a> </template> </span> </a-table> @@ -160,6 +166,9 @@ <!-- 琛ㄥ崟鍖哄煙 --> <eamMaintenanceStandard-modal ref="modalForm" @ok="modalFormOk"/> + + <!--瀹℃壒绐楀彛--> + <maintenance-standard-approval-modal ref="maintenanceStandardApprovalModal" :selectShenpiData="selectedRowData"/> </a-card> </template> @@ -170,6 +179,8 @@ import EamMaintenanceStandardDetailList from '@views/eam/base/modules/EamMaintenanceStandardDetailList' import { deleteAction, getAction, templateXlsDownload } from '@api/manage' import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue' + import MaintenanceStandardApprovalModal + from '../../flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal' export default { @@ -182,6 +193,7 @@ } }, components: { + MaintenanceStandardApprovalModal, LxSearchEquipmentSelect, EamMaintenanceStandardModal, EamMaintenanceStandardDetailList @@ -190,6 +202,7 @@ return { description: '淇濆吇瑙勮寖椤甸潰', disableMixinCreated: true, + selectedRowData: {}, // 琛ㄥご columns: [ { @@ -357,13 +370,28 @@ }) }, + /** + * 鐐瑰嚮鍗囩増鏃惰Е鍙戞椂瑙﹀彂 + * @param record + */ handleUpgrade(record) { - //鍗囩増 this.$refs.modalForm.upgrade(record) this.$refs.modalForm.title = '鍗囩増' this.$refs.modalForm.disableSubmit = false }, + /** + * 鐐瑰嚮璇︽儏鏃惰Е鍙戞椂瑙﹀彂 + * @param record + */ + handleDetail(record) { + this.selectedRowData = Object.assign({}, record) + this.$refs.maintenanceStandardApprovalModal.title = '璇︽儏' + this.$refs.maintenanceStandardApprovalModal.disableSubmit = true + this.$refs.maintenanceStandardApprovalModal.visible = true + this.$refs.maintenanceStandardApprovalModal.handleDetail(record) + }, + batchDel() { var ids = '' for (var a = 0; a < this.selectedRowKeys.length; a++) { diff --git a/src/views/eam/base/modules/EamMaintenanceStandardModal.vue b/src/views/eam/base/modules/EamMaintenanceStandardModal.vue index 622596d..72ae064 100644 --- a/src/views/eam/base/modules/EamMaintenanceStandardModal.vue +++ b/src/views/eam/base/modules/EamMaintenanceStandardModal.vue @@ -248,6 +248,7 @@ title: '淇濆吇閮ㄤ綅', key: 'itemPart', type: JVXETypes.textarea, + placeholder: '璇疯緭鍏�${title}', slotName: 'itemPart', align: 'center', validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] diff --git a/src/views/flowable/workflow/FlowTodo.vue b/src/views/flowable/workflow/FlowTodo.vue index 9e17661..1ceba98 100644 --- a/src/views/flowable/workflow/FlowTodo.vue +++ b/src/views/flowable/workflow/FlowTodo.vue @@ -278,9 +278,8 @@ handleMaintenanceStandard(record) { this.selectedRowData = Object.assign({}, record) this.$refs.maintenanceStandardApprovalModal.visible = true - this.$refs.maintenanceStandardApprovalModal.title = '淇濆吇瑙勮寖' - this.$refs.maintenanceStandardApprovalModal.getAllApproveData(record) - this.$refs.maintenanceStandardApprovalModal.getBasicInformation(record) + this.$refs.maintenanceStandardApprovalModal.title = record.name + this.$refs.maintenanceStandardApprovalModal.handleApprove(record) }, /** diff --git a/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue b/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue index 95e580f..f3e18a9 100644 --- a/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue +++ b/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue @@ -3,7 +3,7 @@ :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" @ok="submitForm" @cancel="handleCancel" :mask-closable="false" :confirmLoading="confirmLoading"> <a-spin :spinning="spinning"> - <a-form-model ref='form' :model='tableRowRecord' :labelCol="labelCol" :wrapperCol="wrapperCol" + <a-form-model ref='form' :model='model' :labelCol="labelCol" :wrapperCol="wrapperCol" :rules="validatorRules"> <a-row :gutter="24" id="outer-row"> <a-col :span="8" class="scroll-col"> @@ -12,12 +12,12 @@ <a-row> <a-col :span="span"> <a-form-model-item prop="standardCode" label="瑙勮寖缂栫爜"> - <a-input v-model="tableRowRecord.standardCode" readOnly/> + <a-input v-model="model.standardCode" readOnly/> </a-form-model-item> </a-col> <a-col :span="span"> <a-form-model-item prop="standardName" label="瑙勮寖鍚嶇О"> - <a-input v-model="tableRowRecord.standardName" readOnly/> + <a-input v-model="model.standardName" readOnly/> </a-form-model-item> </a-col> </a-row> @@ -25,12 +25,12 @@ <a-row> <a-col :span='span'> <a-form-model-item label="缁熶竴缂栫爜"> - <a-input v-model="tableRowRecord.equipmentCode" readOnly/> + <a-input v-model="model.equipmentCode" readOnly/> </a-form-model-item> </a-col> <a-col :span='span'> <a-form-model-item label="淇濆吇鍒嗙被"> - <a-input v-model="tableRowRecord.maintenanceCategory_dictText" readOnly/> + <a-input v-model="model.maintenanceCategory_dictText" readOnly/> </a-form-model-item> </a-col> @@ -39,12 +39,12 @@ <a-row> <a-col :span='span'> <a-form-model-item label="淇濆吇鍛ㄦ湡鍗曚綅"> - <a-input v-model="tableRowRecord.periodUnit" readOnly/> + <a-input v-model="model.periodUnit" readOnly/> </a-form-model-item> </a-col> <a-col :span='span'> <a-form-model-item label="淇濆吇鍛ㄦ湡"> - <a-input v-model="tableRowRecord.maintenancePeriod" readOnly/> + <a-input v-model="model.maintenancePeriod" readOnly/> </a-form-model-item> </a-col> </a-row> @@ -52,12 +52,12 @@ <a-row> <a-col :span='span'> <a-form-model-item label="鍒濆鏃ユ湡"> - <a-input v-model="tableRowRecord.initialDate" readOnly/> + <a-input v-model="model.initialDate" readOnly/> </a-form-model-item> </a-col> <a-col :span='span'> <a-form-model-item label="瑙勮寖鐘舵��"> - <a-input v-model="tableRowRecord.standardStatus_dictText" readOnly/> + <a-input v-model="model.standardStatus_dictText" readOnly/> </a-form-model-item> </a-col> </a-row> @@ -65,7 +65,7 @@ <a-row> <a-col :span="span"> <a-form-model-item label="瑙勮寖鐗堟湰"> - <a-input v-model="tableRowRecord.standardVersion" readOnly/> + <a-input v-model="model.standardVersion" readOnly/> </a-form-model-item> </a-col> </a-row> @@ -76,9 +76,8 @@ <a-col :span="10" class="scroll-col"> <a-tabs default-active-key="1"> <a-tab-pane key="1" tab="淇濆吇椤规槑缁�"> - <j-vxe-table ref="editableDetailTable" :rowNumber="false" :bordered="true" - :alwaysEdit="true" :toolbar="false" keep-source :loading="detail.loading" - :dataSource="detail.dataSource" :columns="detail.columns"> + <j-vxe-table ref="editableDetailTable" bordered alwaysEdit keep-source :dataSource="detail.dataSource" + :columns="detail.columns"> <template v-slot:itemCategory="props"> <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/> </template> @@ -94,41 +93,43 @@ </a-col> <a-col :span="6" class="scroll-col"> - <a-tabs> + <a-tabs v-if="displayRepairLeaderFlag"> <a-tab-pane tab="缁翠慨涓讳换瀹℃壒"> <a-row :gutter="24"> <a-col :span="24"> - <a-form-model-item prop="repairManagerApproveResult" label="澶勭悊绫诲瀷"> - <j-dict-select-tag type='radio' v-model='tableRowRecord.repairManagerApproveResult' - dictCode='approved_rejected' - :disabled="disableSubmit||tableRowRecord.standardStatus!=='WAIT_REPAIR_DIRECTOR'"/> + <a-form-model-item prop="repairManagerApproveResult" label="纭绫诲瀷"> + <j-dict-select-tag type='radio' v-model='model.repairManagerApproveResult' + dictCode='approve_reject' + :disabled="disableSubmit||model.standardStatus!=='WAIT_REPAIR_DIRECTOR'"/> </a-form-model-item> </a-col> <a-col :span="24"> - <a-form-model-item label="澶勭悊鎰忚"> + <a-form-model-item label="纭鎰忚"> <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" - :disabled="disableSubmit||tableRowRecord.standardStatus!=='WAIT_REPAIR_DIRECTOR'" - v-model="tableRowRecord.repairManagerApproveComment"/> + :disabled="disableSubmit||model.standardStatus!=='WAIT_REPAIR_DIRECTOR'" + v-model="model.repairManagerApproveComment"/> </a-form-model-item> </a-col> </a-row> </a-tab-pane> </a-tabs> - <a-tabs v-if="tableRowRecord.standardStatus&&tableRowRecord.standardStatus!=='WAIT_REPAIR_DIRECTOR'"> + <a-tabs v-if="displayTechnicalDirectorFlag"> <a-tab-pane tab="鎶�鏈富绠″鎵�"> <a-row :gutter="24"> <a-col :span="24"> - <a-form-model-item prop="technicalManagerApproveResult" label="澶勭悊绫诲瀷"> - <j-dict-select-tag type='radio' v-model='tableRowRecord.technicalManagerApproveResult' - dictCode='approved_rejected'/> + <a-form-model-item prop="technicalManagerApproveResult" label="纭绫诲瀷"> + <j-dict-select-tag type='radio' v-model='model.technicalManagerApproveResult' + dictCode='approve_reject' + :disabled="disableSubmit||model.standardStatus!=='WAIT_TECHNICAL_DIRECTOR'"/> </a-form-model-item> </a-col> <a-col :span="24"> - <a-form-model-item label="澶勭悊鎰忚"> - <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="tableRowRecord.technicalManagerApproveComment"/> + <a-form-model-item label="纭鎰忚"> + <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.technicalManagerApproveComment" + :disabled="disableSubmit||model.standardStatus!=='WAIT_TECHNICAL_DIRECTOR'"/> </a-form-model-item> </a-col> </a-row> @@ -142,10 +143,9 @@ </template> <script> - import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage' + import { getAction, downFile, httpAction } from '@api/manage' import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue' import { JVXETypes } from '@comp/jeecg/JVxeTable' - import moment from 'moment' export default { name: 'MaintenanceStandardApprovalModal', @@ -160,14 +160,10 @@ span: 12, confirmLoading: false, spinning: false, - tableRowRecord: {}, + model: {}, validatorRules: { - repairManagerApproveResult: [ - { required: true, message: '璇烽�夋嫨澶勭悊绫诲瀷' } - ], - technicalManagerApproveResult: [ - { required: true, message: '璇烽�夋嫨澶勭悊绫诲瀷' } - ] + repairManagerApproveResult: [{ required: true, message: '璇烽�夋嫨纭绫诲瀷' }], + technicalManagerApproveResult: [{ required: true, message: '璇烽�夋嫨纭绫诲瀷' }] }, imageSrc: null, labelCol: { @@ -188,10 +184,9 @@ detailList: '/eam/eamMaintenanceStandardDetail/queryList' }, detail: { - loading: false, dataSource: [], columns: [], - defaultColumns: [ + inspectionColumns: [ { title: 'ID', key: 'id', @@ -205,37 +200,90 @@ { title: '椤圭洰搴忓彿', key: 'itemCode', - type: JVXETypes.inputNumber, - align: 'center', - disabled: true - }, - { - title: '閮ㄤ綅', - key: 'itemPart', - type: JVXETypes.textarea, - align: 'center', - disabled: true + type: JVXETypes.normal, + align: 'center' }, { title: '淇濆吇椤瑰垎绫�', key: 'itemCategory', type: JVXETypes.slot, slotName: 'itemCategory', - align: 'center' + align: 'center', + disabled: true }, { title: '淇濆吇椤圭洰', key: 'itemName', - type: JVXETypes.textarea, - align: 'center', - disabled: true + type: JVXETypes.normal, + align: 'center' }, { title: '淇濆吇瑙勮寖鎴栬姹�', key: 'itemDemand', - type: JVXETypes.textarea, + type: JVXETypes.normal, + align: 'center' + } + ], + secondMaintenanceColumns: [ + { + title: 'ID', + key: 'id', + type: JVXETypes.hidden + }, + { + title: 'standardId', + key: 'standardId', + type: JVXETypes.hidden + }, + { + title: '椤圭洰搴忓彿', + key: 'itemCode', + type: JVXETypes.normal, + align: 'center' + }, + { + title: '淇濆吇椤瑰垎绫�', + key: 'itemCategory', + type: JVXETypes.slot, + slotName: 'itemCategory', align: 'center', disabled: true + }, + { + title: '淇濆吇椤圭洰', + key: 'itemName', + type: JVXETypes.normal, + align: 'center' + } + ], + thirdMaintenanceColumns: [ + { + title: 'ID', + key: 'id', + type: JVXETypes.hidden + }, + { + title: 'standardId', + key: 'standardId', + type: JVXETypes.hidden + }, + { + title: '淇濆吇閮ㄤ綅', + key: 'itemPart', + type: JVXETypes.normal, + align: 'center' + }, + { + title: '淇濆吇鍐呭', + key: 'itemName', + type: JVXETypes.normal, + align: 'center' + }, + { + title: '楠屾敹鏍囧噯', + key: 'itemDemand', + type: JVXETypes.normal, + align: 'center' } ] }, @@ -244,17 +292,36 @@ } }, watch: { - 'tableRowRecord.maintenanceCategory': { + 'model.maintenanceCategory': { handler(val) { if (val) { - if (val != 'THIRD_MAINTENANCE') this.detail.columns = [...this.detail.defaultColumns.filter(item => item.key != 'itemPart')] - else this.detail.columns = [...this.detail.defaultColumns.filter(item => item.key != 'itemCategory')] + console.log('val', val) + switch (val) { + case 'POINT_INSPECTION': + this.detail.columns = this.detail.inspectionColumns + break + case 'SECOND_MAINTENANCE': + this.detail.columns = this.detail.secondMaintenanceColumns + break + case 'THIRD_MAINTENANCE': + this.detail.columns = this.detail.thirdMaintenanceColumns + break + default: + break + } } - else this.detail.columns = [...this.detail.defaultColumns] } } }, computed: { + displayRepairLeaderFlag() { + return this.model.standardStatus && ['WAIT_REPAIR_DIRECTOR', 'WAIT_TECHNICAL_DIRECTOR', 'REJECTED'].includes(this.model.standardStatus) + }, + + displayTechnicalDirectorFlag() { + return this.model.standardStatus && ['WAIT_TECHNICAL_DIRECTOR', 'REJECTED'].includes(this.model.standardStatus) && this.model.repairManagerApproveResult === '1' + }, + encodedDictCode() { const dictCode = `sys_dict_item,item_text,item_value,dict_id='1940598438685134850'` return encodeURIComponent(dictCode) @@ -262,39 +329,75 @@ }, methods: { /** - * 鑾峰彇娴佺▼鑺傜偣鍜屾祦绋嬪浘 - * @param record 寰呭姙璁板綍淇℃伅 + * 涓婚〉闈㈢偣鍑绘墽琛屽鎵规椂瑙﹀彂 + * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍 */ - getAllApproveData(record) { - if (record.procInstId) { - const { processDefinitionId, processInstanceId, processDefinitionKey, procInstId } = record - const imageParam = { processDefinitionId, processInstanceId, TaskDefinitionKey: processDefinitionKey } - const that = this - this.imageSrc = null - - downFile(this.url.diagramView, imageParam, 'get') - .then((res => { - const urlObject = window.URL.createObjectURL(new Blob([res])) - that.imageSrc = urlObject - })) - .finally(() => { - this.spinning = false - }) - } + handleApprove(record) { + this.getBasicInformationByApi(record) + this.getFlowChartImageByApi(record) }, /** - * 鑾峰彇寰呭姙璁板綍鐨勫熀鏈俊鎭� - * @param record 寰呭姙璁板綍淇℃伅 + * 涓婚〉闈㈢偣鍑昏鎯呮椂瑙﹀彂 + * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍 */ - async getBasicInformation(record) { + handleDetail(record) { this.detail.dataSource = [] - this.tableRowRecord = {} + this.model = Object.assign({}, record) + this.loadDetail(record.id) + }, + + /** + * 鑾峰彇鍩虹淇℃伅 + * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍 + */ + getBasicInformationByApi(record) { this.spinning = true - const param = { id: record.dataId } - let res = await getAction(this.url.queryById, param) - this.tableRowRecord = Object.assign({}, res.result.records[0]) - await this.loadDetail(record.dataId) + this.model = {} + this.detail.dataSource = [] + const that = this + getAction(this.url.queryById, { id: record.dataId }) + .then(res => { + if (res.success) { + that.model = Object.assign({}, res.result.records[0]) + that.model.dataId = record.dataId + that.model.taskId = record.id + that.model.userId = record.assignee + that.model.instanceId = record.procInstId + } + else { + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) + .finally(() => { + this.loadDetail(record.dataId) + }) + }, + + /** + * 鑾峰彇娴佺▼鍥� + * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍 + */ + getFlowChartImageByApi(record) { + const { processDefinitionId, processInstanceId, processDefinitionKey } = record + this.imageSrc = null + downFile(this.url.diagramView, { + processDefinitionId, + processInstanceId, + TaskDefinitionKey: processDefinitionKey + }, 'get') + .then((res => { + this.imageSrc = window.URL.createObjectURL(new Blob([res])) + })) + .catch(err => { + this.$notification.error({ + message: '娑堟伅', + description: err.message + }) + }) }, /** @@ -302,14 +405,13 @@ * @param dataId 涓氬姟ID */ loadDetail(dataId) { - if (dataId) { - getAction(this.url.detailList, { standardId: dataId }) - .then(res => { - if (res.success) { - this.detail.dataSource = [...res.result] - } - }) - } + getAction(this.url.detailList, { standardId: dataId }) + .then(res => { + if (res.success) this.detail.dataSource = res.result + }) + .finally(() => { + this.spinning = false + }) }, async submitForm() { @@ -321,21 +423,8 @@ this.$refs.form.validate(valid => { if (valid) { this.confirmLoading = this.spinning = true - const flowTaskVo = {} - flowTaskVo.dataId = this.selectShenpiData.dataId - flowTaskVo.taskId = this.selectShenpiData.id - flowTaskVo.userId = this.selectShenpiData.assignee - flowTaskVo.instanceId = this.selectShenpiData.procInstId - if (this.tableRowRecord.standardStatus == 'WAIT_REPAIR_DIRECTOR') { - flowTaskVo.repairManagerApproveResult = this.tableRowRecord.repairManagerApproveResult - flowTaskVo.repairManagerApproveComment = this.tableRowRecord.repairManagerApproveComment - } else { - flowTaskVo.technicalManagerApproveResult = this.tableRowRecord.technicalManagerApproveResult - flowTaskVo.technicalManagerApproveComment = this.tableRowRecord.technicalManagerApproveComment - } const that = this - console.log('琛ㄥ崟鎻愪氦鏁版嵁', flowTaskVo) - httpAction(this.url.approve, flowTaskVo, 'post') + httpAction(this.url.approve, that.model, 'post') .then((res) => { if (res.success) { that.$notification.success({ -- Gitblit v1.9.3