From b8fd394b8da06c07c077c6f018de9a1f6c62b98c Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期四, 17 四月 2025 14:30:38 +0800 Subject: [PATCH] art: 设备管理-点检工单-查询,列表修改 --- src/views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal.vue | 272 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 234 insertions(+), 38 deletions(-) diff --git a/src/views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal.vue b/src/views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal.vue index 75a4d27..5303ee7 100644 --- a/src/views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal.vue +++ b/src/views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal.vue @@ -4,6 +4,7 @@ :width="1200" :visible="visible" :confirmLoading="confirmLoading" + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" switchFullscreen @ok="handleOk" @cancel="handleCancel" @@ -63,38 +64,123 @@ <lx-upload :returnUrl="false" :isMultiple="true" file-type="image" - v-model="model.fileList" /> + :disabled="confirmDisable" + v-model="model.imageFilesResult" /> </a-form-model-item> </a-row> <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 淇濆吇椤逛俊鎭� </a-divider> <a-row :gutter="24"> - <j-vxe-table - ref="editableDetailTable" - :rowNumber="false" - :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;" /> + <a-tabs> + <a-tab-pane key="1" tab="淇濆吇椤规槑缁�"> + <j-vxe-table + ref="editableDetailTable" + :rowNumber="false" + :rowSelection="true" + :bordered="true" + :alwaysEdit="true" + :toolbar="false" + keep-source + :height="300" + :loading="detail.loading" + :dataSource="detail.dataSource" + :columns="detail.columns" + @selectRowChange="handleTableSelectRowChange" + > + <template v-slot:maintenanceResult="props"> + <j-dict-select-tag v-model="props.row.maintenanceResult" dictCode="eam_inspection_result" + placeholder="璇烽�夋嫨淇濆吇缁撴灉" + :disabled="disableSubmit || confirmDisable" + @change="handleInspectionResultSelectChange($event,props.row)" + style="width: 100%" /> + </template> + + <template v-slot:exceptionDescription="props"> + <a-textarea style="height: 32px" v-model="props.row.exceptionDescription" + :disabled="disableSubmit || confirmDisable || !props.row.maintenanceResult || props.row.maintenanceResult === '1'" /> + </template> + + <template v-slot:reportFlag="props"> + <j-dict-select-tag v-model="props.row.reportFlag" + :disabled="disableSubmit || confirmDisable || !props.row.maintenanceResult || props.row.maintenanceResult === '1'" + dictCode="yn" + style="width: 100%" /> + </template> + </j-vxe-table> + </a-tab-pane> + <a-tab-pane v-if="!disableSubmit" key='2' tab='娴佺▼鑺傜偣'> + <a-card :bordered="false"> + <a-timeline> + <a-timeline-item v-for="(item,index) in taskData" :key="index"> + <div> + <h3 style="font-weight: bold;">{{item.taskName}}</h3> + <div>澶勭悊浜猴細{{item.assignee_dictText}}</div> + <div v-if="index !==0">澶勭悊鏃堕暱锛歿{item.duration}}</div> + <div v-if="item.name !== '鎻愪氦鐢宠'">澶勭悊绫诲瀷锛歿{item.sequenceFlowName}}</div> + <div v-if="item.description">澶勭悊鎰忚锛歿{item.description}}</div> + </div> + </a-timeline-item> + </a-timeline> + </a-card> + </a-tab-pane> + <a-button v-if="!disableSubmit || selectedRowKeys.length > 0" slot="tabBarExtraContent" type="primary" + @click="handleSelectAllInspectionResult">淇濆吇姝e父 + </a-button> + </a-tabs> </a-row> - <div v-if="['WAIT_CONFIRM', 'WAIT_INITIAL_ACCEPTANCE', 'WAIT_FINAL_ACCEPTANCE', 'COMPLETE'].includes(model.maintenanceStatus)"> + <div v-if="confirmDisable"> <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 鐝粍闀跨‘璁や俊鎭� </a-divider> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmDealType" label="纭绫诲瀷"> + <j-dict-select-tag type='radio' v-model='model.confirmDealType' dictCode='approved_rejected' placeholder="璇烽�夋嫨澶勭悊绫诲瀷" :disabled="disableSubmit || initialAcceptanceDisable" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmComment" label="纭鎰忚"> + <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.confirmComment" :disabled="disableSubmit || initialAcceptanceDisable" /> + </a-form-model-item> + </a-col> + </a-row> </div> - <div v-if="['WAIT_INITIAL_ACCEPTANCE', 'WAIT_FINAL_ACCEPTANCE', 'COMPLETE'].includes(model.maintenanceStatus)"> + <div v-if="initialAcceptanceDisable"> <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 鍒濋獙鏀朵俊鎭� </a-divider> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="initialAcceptanceComment" label="鍒濋獙鏀舵剰瑙�"> + <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.initialAcceptanceComment" :disabled="disableSubmit || finalAcceptanceDisable" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="initialAcceptanceFilesResult" label="鍒濋獙鏀堕檮浠�"> + <lx-upload :returnUrl="false" + :isMultiple="true" + :disabled="disableSubmit || finalAcceptanceDisable" + v-model="model.initialAcceptanceFilesResult" /> + </a-form-model-item> + </a-col> + </a-row> </div> - <div v-if="['WAIT_FINAL_ACCEPTANCE', 'COMPLETE'].includes(model.maintenanceStatus)"> + <div v-if="finalAcceptanceDisable"> <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 缁堥獙鏀朵俊鎭� </a-divider> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="finalAcceptanceComment" label="缁堥獙鏀舵剰瑙�"> + <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.finalAcceptanceComment" :disabled="disableSubmit || completionDisable" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="finalAcceptanceFilesResult" label="缁堥獙鏀堕檮浠�"> + <lx-upload :returnUrl="false" + :isMultiple="true" + :disabled="disableSubmit || completionDisable" + v-model="model.finalAcceptanceFilesResult" /> + </a-form-model-item> + </a-col> + </a-row> </div> </a-form-model> </a-spin> @@ -119,10 +205,9 @@ visible: false, //鐘舵�佹帶鍒� //淇濆吇涓� 涓嶅彲缂栬緫 - underMaintenanceDisable: false, - confirmDisable: false, - initialAcceptanceDisable: false, - finalAcceptanceDisable: false, + // confirmDisable: false, + // initialAcceptanceDisable: false, + // finalAcceptanceDisable: false, editable: false, model: {}, maintenanceCategory: 'WEEK_MAINTENANCE', @@ -144,13 +229,32 @@ sm: { span: 21 } }, confirmLoading: false, - validatorRules: {}, + validatorRules: { + confirmDealType: [ + { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' } + ], + confirmComment: [ + { required: true, message: '璇疯緭鍏ョ‘璁ゆ剰瑙�!' } + ], + initialAcceptanceComment: [ + { required: true, message: '璇疯緭鍏ュ垵楠屾敹鎰忚!' } + ], + finalAcceptanceComment: [ + { required: true, message: '璇疯緭鍏ョ粓楠屾敹鎰忚!' } + ], + }, url: { queryById: '/eam/weekMaintenanceOrder/queryById', detail: '/eam/weekMaintenanceOrderDetail/queryList', approval: '/eam/weekMaintenanceOrder/approval', - userSelect: '/eam/user_select/list' + userSelect: '/eam/user_select/list', + queryHisTaskList: '/assign/flow/queryHisTaskList', }, + disableSubmit: false, + taskData: [], + isDisplayBmp: false, + showBmpButtonLoading: false, + selectedRowKeys: [], detail: { loading: false, dataSource: [], @@ -196,10 +300,10 @@ { title: '淇濆吇缁撴灉', key: 'maintenanceResult', - type: JVXETypes.selectSearch, - dictCode: 'eam_inspection_result', + type: JVXETypes.slot, width: '10%', align: 'center', + slotName: 'maintenanceResult', validateRules: [ { required: true, message: '淇濆吇缁撴灉涓嶈兘涓虹┖锛�' } ] @@ -207,17 +311,18 @@ { title: '寮傚父鎻忚堪', key: 'exceptionDescription', - type: JVXETypes.textarea, + type: JVXETypes.slot, width: '20%', align: 'center', + slotName: 'exceptionDescription', }, { title: '鏄惁鎶ヤ慨', key: 'reportFlag', - type: JVXETypes.selectSearch, - dictCode: 'yn', + type: JVXETypes.slot, width: '10%', - align: 'center' + align: 'center', + slotName: 'reportFlag', } ], toolbarConfig: { @@ -231,17 +336,67 @@ }, created() { }, + computed: { + confirmDisable: function(){ + return ['WAIT_CONFIRM', 'WAIT_INITIAL_ACCEPTANCE', 'WAIT_FINAL_ACCEPTANCE', 'COMPLETE'].includes(this.model.maintenanceStatus); + }, + initialAcceptanceDisable: function() { + return ['WAIT_INITIAL_ACCEPTANCE', 'WAIT_FINAL_ACCEPTANCE', 'COMPLETE'].includes(this.model.maintenanceStatus); + }, + finalAcceptanceDisable: function() { + return ['WAIT_FINAL_ACCEPTANCE', 'COMPLETE'].includes(this.model.maintenanceStatus); + }, + completionDisable: function() { + return ['COMPLETE', 'ABOLISH'].includes(this.model.maintenanceStatus); + } + }, methods: { async handleDetail(item) { this.loading = true this.visible = true this.detail.dataSource = [] - let param = { - id: item.dataId + let taskDataList = await getAction(this.url.queryHisTaskList, { procInstId: item.procInstId }); + this.taskData = [...taskDataList.result]; + let res = await getAction(this.url.queryById, {id: item.dataId}) + this.model = Object.assign({}, res.result) + if(this.model.imageFiles) { + let obj = JSON.parse(this.model.imageFiles); + this.model.imageFilesResult = [...obj]; } - let res = await getAction(this.url.queryById, param) - this.model = Object.assign({}, res.result, item) + if(this.model.initialAcceptanceFiles) { + let obj = JSON.parse(this.model.initialAcceptanceFiles); + this.model.initialAcceptanceFilesResult = [...obj]; + } + if(this.model.finalAcceptanceFiles) { + let obj = JSON.parse(this.model.finalAcceptanceFiles); + this.model.finalAcceptanceFilesResult = [...obj]; + } + this.model.dataId = item.dataId + this.model.taskId = item.id + this.model.userId = item.assignee + this.model.instanceId = item.procInstId + this.model.values = item.variables await this.loadDetail(item.dataId) + this.loading = false + }, + recordDetail(record) { + this.loading = true + this.visible = true + this.detail.dataSource = [] + this.model = Object.assign({}, record) + if(this.model.imageFiles) { + let obj = JSON.parse(this.model.imageFiles); + this.model.imageFilesResult = [...obj]; + } + if(this.model.initialAcceptanceFiles) { + let obj = JSON.parse(this.model.initialAcceptanceFiles); + this.model.initialAcceptanceFilesResult = [...obj]; + } + if(this.model.finalAcceptanceFiles) { + let obj = JSON.parse(this.model.finalAcceptanceFiles); + this.model.finalAcceptanceFilesResult = [...obj]; + } + this.loadDetail(record.id) this.loading = false }, close() { @@ -259,7 +414,24 @@ // 瑙﹀彂琛ㄥ崟楠岃瘉 this.$refs.form.validate(valid => { if (valid) { - let tableData = that.$refs.editableDetailTable.getTableData() + let tableData = that.$refs.editableDetailTable.getTableData(); + + let checkMsg = null; + tableData.some(row => { + if(!row.maintenanceResult) { + checkMsg = '淇濆吇缁撴灉涓嶈兘涓虹┖锛�'; + return true; + } + if(row.maintenanceResult === '2' && (!row.exceptionDescription || !row.reportFlag)) { + checkMsg = '淇濆吇缁撴灉涓哄紓甯革紝闇�瑕佸~鍐欏紓甯稿師鍥犲強鏄惁鎶ヤ慨锛�'; + return true; + } + }) + if(checkMsg) { + that.$message.warning(checkMsg); + return; + } + that.model.tableDetailList = [...tableData] that.confirmLoading = true @@ -269,7 +441,7 @@ httpAction(httpurl, this.model, method).then((res) => { if (res.success) { that.$message.success(res.message) - that.$emit('ok') + that.$emit('searchReset') that.close() } else { that.$message.warning(res.message) @@ -321,8 +493,32 @@ })) } }) - } - + }, + handleInspectionResultSelectChange(value, record) { + if (record.exceptionDescription) delete record.exceptionDescription + if (record.reportFlag) delete record.reportFlag + }, + // 鎵归噺閫夋嫨鎵�鏈夌偣妫�缁撴灉 + handleSelectAllInspectionResult() { + this.selectedRowKeys.forEach(key => { + const dataItem = this.detail.dataSource.find(item => item.id === key) + if (dataItem && dataItem.maintenanceResult !== '1') { + console.log('dataItem', dataItem) + delete dataItem.exceptionDescription + delete dataItem.reportFlag + dataItem.maintenanceResult = '1' + } + }) + this.$refs.editableDetailTable.clearCheckboxRow() + this.selectedRowKeys = [] + }, + /** + * 琛ㄦ牸澶氶�夋鍙戠敓鏀瑰彉鏃惰Е鍙� + * @param {selectedRowIds} 琛ㄦ牸涓凡閫夋嫨鐨処D鍒楄〃 + */ + handleTableSelectRowChange({ selectedRowIds }) { + this.selectedRowKeys = selectedRowIds + }, } } </script> -- Gitblit v1.9.3