From bf01bf6c572a169941fe9d018ff1d619a0584787 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期四, 24 七月 2025 19:02:11 +0800 Subject: [PATCH] 1、三保工单流程增加备件使用明细 2、事故登记表基础功能 --- src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue | 217 +++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 156 insertions(+), 61 deletions(-) diff --git a/src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue b/src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue index 99e165f..0f9dd12 100644 --- a/src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue +++ b/src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue @@ -59,17 +59,17 @@ </a-tabs> </a-col> - <a-col :span="model.maintenanceStatus&&model.maintenanceStatus!='WAIT_MAINTENANCE'?10:16" class="scroll-col"> - <a-tabs v-model="activeTabKey" @change="$refs.editableDetailTable.clearValidate()"> + <a-col :span="model.maintenanceStatus&&model.maintenanceStatus!=='WAIT_MAINTENANCE'?10:16" class="scroll-col"> + <a-tabs :active-key="activeTabKey" @change="handleTabChange"> <a-tab-pane key="1" tab="淇濆吇椤规槑缁�"> - <j-vxe-table ref="editableDetailTable" rowSelection bordered alwaysEdit keep-source - :dataSource="detail.dataSource" :columns="detail.columns" + <j-vxe-table ref="editableDetailTable1" rowSelection bordered alwaysEdit keep-source + :dataSource="detail.maintenanceDetailList" :columns="detail.maintenanceDetailColumns" @selectRowChange="handleTableSelectRowChange"> <!--淇濆吇缁撴灉--> <template v-slot:maintenanceResult="props"> <j-dict-select-tag v-model="props.row.maintenanceResult" dictCode="third_maintenance_result" placeholder="璇烽�夋嫨淇濆吇缁撴灉" - :disabled="disableSubmit || (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_MAINTENANCE')" + :disabled="disableSubmit || (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE')" @change="handleResultSelectChange($event,props.row,'exceptionDescription')" style="width: 100%"/> </template> @@ -78,9 +78,9 @@ <template v-slot:exceptionDescription="props"> <a-textarea :rows="1" :autoSize="false" v-model="props.row.exceptionDescription" :placeholder="props.row.maintenanceResult&&props.row.maintenanceResult!='NORMAL'?'璇疯緭鍏ュ紓甯告弿杩�':''" - @blur="$refs.editableDetailTable.validateTable" + @blur="$refs.editableDetailTable1.validateTable" :disabled="disableSubmit || - (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_MAINTENANCE') || + (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE') || !props.row.maintenanceResult || props.row.maintenanceResult === 'NORMAL'"/> </template> @@ -90,7 +90,7 @@ <j-dict-select-tag v-model="props.row.firstInspectResult" placeholder="璇烽�夋嫨楠屾敹缁撴灉" @change="handleResultSelectChange($event,props.row,'firstInspectException')" - :disabled="disableSubmit ||(model.maintenanceStatus&&model.maintenanceStatus!='UNDER_FIRST_ACCEPTANCE')" + :disabled="disableSubmit ||(model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_FIRST_ACCEPTANCE')" dictCode="check_status" style="width: 100%"/> </template> @@ -98,9 +98,9 @@ <template v-slot:firstInspectException="props"> <a-textarea :rows="1" v-model="props.row.firstInspectException" :placeholder="props.row.firstInspectResult&&props.row.firstInspectResult!='1'?'璇疯緭鍏ュ紓甯告弿杩�':''" - @blur="$refs.editableDetailTable.validateTable" + @blur="$refs.editableDetailTable1.validateTable" :disabled="disableSubmit || - (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_FIRST_ACCEPTANCE')|| + (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_FIRST_ACCEPTANCE')|| !props.row.firstInspectResult || props.row.firstInspectResult === '1'" dictCode="check_status" style="width: 100%;resize:none"/> @@ -117,18 +117,30 @@ <!--绗簩娆¢獙鏀跺紓甯告弿杩�--> <template v-slot:secondInspectException="props"> <a-textarea :rows="1" v-model="props.row.secondInspectException" - :placeholder="props.row.secondInspectResult&&props.row.secondInspectResult!='1'?'璇疯緭鍏ュ紓甯告弿杩�':''" - @blur="$refs.editableDetailTable.validateTable" + :placeholder="props.row.secondInspectResult&&props.row.secondInspectResult!=='1'?'璇疯緭鍏ュ紓甯告弿杩�':''" + @blur="$refs.editableDetailTable1.validateTable" :disabled="disableSubmit || - (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_SECOND_ACCEPTANCE')|| + (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_SECOND_ACCEPTANCE')|| !props.row.secondInspectResult || props.row.secondInspectResult === '1'" dictCode="check_status" style="width: 100%;resize:none"/> </template> </j-vxe-table> </a-tab-pane> + + <a-tab-pane key="2" tab="澶囦欢浣跨敤鏄庣粏" + v-if="model.maintenanceStatus&&model.maintenanceStatus!=='WAIT_CHECK'&&detail.sparePartsDetailList.length>0|| + (model.maintenanceStatus&&model.maintenanceStatus==='UNDER_MAINTENANCE')" + forceRender> + <j-vxe-table ref="editableDetailTable2" bordered alwaysEdit keep-source toolbar + :toolbar-config="detail.toolbarConfig" row-selection + :disabled="model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE'" + :dataSource="detail.sparePartsDetailList" :columns="detail.sparePartsDetailColumns"> + </j-vxe-table> + </a-tab-pane> + <template v-if="selectShenpiData.procInstId"> - <a-tab-pane key='2' tab='娴佺▼鍥�'> + <a-tab-pane key='3' tab='娴佺▼鍥�'> <img :src="imageSrc" alt="Fetched Image"/> </a-tab-pane> </template> @@ -136,13 +148,13 @@ <template slot="tabBarExtraContent"> <a-space> <a-button - v-if="activeTabKey=='1'" - :disabled="disableSubmit || (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_MAINTENANCE')||selectedRowKeys.length == 0" + v-if="activeTabKey==='1'" + :disabled="disableSubmit || (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_MAINTENANCE')||selectedRowKeys.length === 0" type="primary" @click="handleSelectAllMaintenanceResult">鎵归噺淇濆吇姝e父 </a-button> <a-button - v-if="activeTabKey=='1'" - :disabled="disableSubmit || (model.maintenanceStatus&&model.maintenanceStatus!='UNDER_FIRST_ACCEPTANCE')||selectedRowKeys.length == 0" + v-if="activeTabKey==='1'" + :disabled="disableSubmit || (model.maintenanceStatus&&model.maintenanceStatus!=='UNDER_FIRST_ACCEPTANCE')||selectedRowKeys.length === 0" type="primary" @click="handleSelectAllFirstAcceptanceResult">鎵归噺楠屾敹閫氳繃 </a-button> </a-space> @@ -150,7 +162,7 @@ </a-tabs> </a-col> - <a-col v-if="model.maintenanceStatus&&model.maintenanceStatus!='WAIT_MAINTENANCE'" :span="6" + <a-col v-if="model.maintenanceStatus&&model.maintenanceStatus!=='WAIT_MAINTENANCE'" :span="6" class="scroll-col"> <a-tabs v-if="displayEvaluationFlag"> <a-tab-pane tab="淇濆吇鍓嶆妧鏈姸鎬侀壌瀹�"> @@ -158,18 +170,18 @@ prop="fullyFunctional" label="璁惧鍔熻兘鏄惁榻愬叏"> <j-dict-select-tag type='radio' v-model='model.fullyFunctional' dictCode='yn' @change="handleCheckRadioChange" - :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!='WAIT_CHECK')"/> + :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!=='WAIT_CHECK')"/> </a-form-model-item> <a-form-model-item :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol" prop="runningNormally" label="璁惧鑳藉惁姝e父杩愯浆"> <j-dict-select-tag type='radio' v-model='model.runningNormally' dictCode='yn' @change="handleCheckRadioChange" - :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!='WAIT_CHECK')"/> + :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!=='WAIT_CHECK')"/> </a-form-model-item> - <a-form-model-item v-if="model.fullyFunctional=='0'||model.runningNormally=='0'" + <a-form-model-item v-if="model.fullyFunctional==='0'||model.runningNormally==='0'" :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol" label="闂鎻忚堪"> <a-textarea v-model='model.problemDescription' placeholder="璇锋弿杩伴棶棰�" - :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!='WAIT_CHECK')"/> + :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!=='WAIT_CHECK')"/> </a-form-model-item> </a-tab-pane> </a-tabs> @@ -181,7 +193,7 @@ </a-form-model-item> <a-form-model-item :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol" label="鍗忓姪鎿嶄綔浜�"> <a-input v-model="model.assistantOperator" - :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!='OPERATOR_SIGNATURE')" + :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!=='OPERATOR_SIGNATURE')" placeholder="璇疯緭鍏ュ崗鍔╂搷浣滀汉"/> </a-form-model-item> </a-tab-pane> @@ -194,7 +206,7 @@ </a-form-model-item> <a-form-model-item :labelCol="rightColLabelCol" :wrapperCol="rightColWrapperCol" label="鍗忓姪缁翠慨浜�"> <a-input v-model="model.assistantRepairman" - :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!='REPAIRMAN_SIGNATURE')" + :disabled="disableSubmit||(model.maintenanceStatus&&model.maintenanceStatus!=='REPAIRMAN_SIGNATURE')" placeholder="璇疯緭鍏ュ崗鍔╃淮淇汉"/> </a-form-model-item> </a-tab-pane> @@ -227,13 +239,11 @@ import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js' import { JVXETypes } from '@comp/jeecg/JVxeTable' import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect' - import ATextarea from 'ant-design-vue/es/input/TextArea' export default { name: 'ThirdMaintenanceApprovalModal', mixins: [JVxeTableModelMixin], components: { - ATextarea, MaintenanceEquipmentSelect }, props: { @@ -280,16 +290,18 @@ }, url: { queryById: '/eam/thirdMaintenanceOrder/queryById', - detail: '/eam/thirdMaintenanceOrderDetail/queryList', + maintenanceDetail: '/eam/thirdMaintenanceOrderDetail/queryList', + sparePartsDetail: '/eam/eamThirdMaintenanceSpare/queryList', approval: '/eam/thirdMaintenanceOrder/approval', diagramView: '/assign/flow/diagramView' }, disableSubmit: false, selectedRowKeys: [], detail: { - dataSource: [], - columns: [], - defaultColumns: [ + maintenanceDetailList: [], + sparePartsDetailList: [], + maintenanceDetailColumns: [], + defaultMaintenanceDetailColumns: [ { title: 'ID', key: 'id', @@ -350,7 +362,51 @@ { handler: this.maintenanceExceptionDescriptionValidator } ] } - ] + ], + sparePartsDetailColumns: [ + { + title: '澶囦欢搴忓彿', + key: 'spareCode', + type: JVXETypes.inputNumber, + placeholder: '璇疯緭鍏�${title}', + width: 150, + align: 'center', + validateRules: [ + { required: true, message: '璇疯緭鍏�${title}' }, + { unique: true, message: '${title}涓嶈兘閲嶅' } + ] + }, + { + title: '澶囦欢鍚嶇О', + key: 'spareName', + type: JVXETypes.input, + placeholder: '璇疯緭鍏�${title}', + align: 'center', + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] + }, + { + title: '澶囦欢鍨嬪彿', + key: ' spareModel', + type: JVXETypes.input, + placeholder: '璇疯緭鍏�${title}', + align: 'center', + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] + }, + { + title: '浣跨敤鏁伴噺', + key: 'spareQuantity', + type: JVXETypes.inputNumber, + placeholder: '璇疯緭鍏�${title}', + align: 'center', + validateRules: [{ required: true, message: '璇疯緭鍏�${title}' }] + } + ], + toolbarConfig: { + // prefix 鍓嶇紑锛泂uffix 鍚庣紑 + slot: ['prefix', 'suffix'], + // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳 + btn: ['add', 'remove', 'clearSelection'] + } } } }, @@ -384,7 +440,7 @@ */ async handleApprove(record) { this.model = {} - this.detail.dataSource = [] + this.detail.maintenanceDetailList = this.detail.sparePartsDetailList = [] this.getBasicInformationByApi(record) this.getFlowChartImageByApi(record) }, @@ -395,7 +451,7 @@ */ handleDetail(record) { this.spinning = true - this.detail.dataSource = [] + this.detail.maintenanceDetailList = this.detail.sparePartsDetailList = [] this.model = Object.assign({ operatorSignatureResult: '1', repairmanSignatureResult: '1', @@ -403,7 +459,8 @@ inspectorSignatureResult: '1' }, record) this.handleDynamicColumns() - this.loadDetail(record.id) + this.loadMaintenanceDetail(record.id) + this.loadSparePartsDetail(record.id) }, /** @@ -436,7 +493,8 @@ } }) .finally(() => { - this.loadDetail(record.dataId) + this.loadMaintenanceDetail(record.dataId) + this.loadSparePartsDetail(record.dataId) }) }, @@ -445,12 +503,12 @@ * 鑾峰彇淇濆吇鏄庣粏 * @param orderId 宸ュ崟鍙� */ - loadDetail(orderId) { - getAction(this.url.detail, { orderId }) + loadMaintenanceDetail(orderId) { + getAction(this.url.maintenanceDetail, { orderId }) .then(res => { if (res.success) { - if (this.model.maintenanceStatus && this.model.maintenanceStatus == 'UNDER_SECOND_ACCEPTANCE') { - this.detail.dataSource = res.result.map(item => { + if (this.model.maintenanceStatus && this.model.maintenanceStatus === 'UNDER_SECOND_ACCEPTANCE') { + this.detail.maintenanceDetailList = res.result.map(item => { return { ...item, secondInspectResult: '1' @@ -458,11 +516,24 @@ }) return } - this.detail.dataSource = res.result + this.detail.maintenanceDetailList = res.result } }) .finally(() => { this.spinning = false + }) + }, + + /** + * 鑾峰彇澶囦欢浣跨敤鏄庣粏 + * @param orderId 宸ュ崟鍙� + */ + loadSparePartsDetail(orderId) { + getAction(this.url.sparePartsDetail, { orderId }) + .then(res => { + if (res.success) { + this.detail.sparePartsDetailList = res.result + } }) }, @@ -492,27 +563,42 @@ async handleOk() { const that = this - if (this.model.maintenanceStatus == 'UNDER_MAINTENANCE' || this.model.maintenanceStatus == 'UNDER_FIRST_ACCEPTANCE' || this.model.maintenanceStatus == 'UNDER_SECOND_ACCEPTANCE') { - let errMap = await that.$refs.editableDetailTable.validateTable() - if (this.activeTabKey != '1') { + if (this.model.maintenanceStatus === 'UNDER_MAINTENANCE' || this.model.maintenanceStatus === 'UNDER_FIRST_ACCEPTANCE' || this.model.maintenanceStatus === 'UNDER_SECOND_ACCEPTANCE') { + let errMap = await that.$refs.editableDetailTable1.validateTable() + if (this.activeTabKey !== '1' && errMap) { + that.$refs.editableDetailTable1.clearValidate() this.activeTabKey = '1' - if (errMap) { - that.$refs.editableDetailTable.clearValidate() - that.$notification.warning({ - message: '娑堟伅', - description: '淇濆吇鎴栭獙鏀朵笉鑳戒负绌�' - }) - return - } + that.$notification.warning({ + message: '娑堟伅', + description: '淇濆吇鎴栭獙鏀朵笉鑳戒负绌�' + }) + return } if (errMap) return } + + if (this.$refs.editableDetailTable2 && this.model.maintenanceStatus === 'UNDER_MAINTENANCE') { + const errMap = await that.$refs.editableDetailTable2.validateTable() + if (this.activeTabKey !== '2' && errMap) { + this.activeTabKey = '2' + that.$refs.editableDetailTable2.clearValidate() + this.activeTabKey = '2' + that.$notification.warning({ + message: '娑堟伅', + description: '澶囦欢浣跨敤鏄庣粏璁板綍瀛楁闇�濉啓' + }) + return + } + if (errMap) return + } + // 瑙﹀彂琛ㄥ崟楠岃瘉 this.$refs.form.validate(valid => { if (valid) { that.confirmLoading = that.spinning = true - that.model.tableDetailList = that.$refs.editableDetailTable.getTableData() + that.model.tableDetailList = that.$refs.editableDetailTable1.getTableData() + if (that.$refs.editableDetailTable2) that.model.tableSpareList = that.$refs.editableDetailTable2.getTableData() httpAction(that.url.approval, that.model, 'put') .then((res) => { @@ -591,7 +677,7 @@ } ] } - this.detail.columns = [...this.detail.defaultColumns, ...columns] + this.detail.maintenanceDetailColumns = [...this.detail.defaultMaintenanceDetailColumns, ...columns] }, autocompleteForm(selectObj) { @@ -609,33 +695,33 @@ */ handleResultSelectChange(value, record, key) { if (record[key]) delete record[key] - this.$refs.editableDetailTable.validateTable() + this.$refs.editableDetailTable1.validateTable() }, // 鎵归噺閫夋嫨淇濆吇缁撴灉姝e父 handleSelectAllMaintenanceResult() { this.selectedRowKeys.forEach(key => { - const dataItem = this.detail.dataSource.find(item => item.id === key) + const dataItem = this.detail.maintenanceDetailList.find(item => item.id === key) if (dataItem && dataItem.maintenanceResult !== 'NORMAL') { delete dataItem.exceptionDescription dataItem.maintenanceResult = 'NORMAL' } }) - this.$refs.editableDetailTable.clearCheckboxRow() + this.$refs.editableDetailTable1.clearCheckboxRow() this.selectedRowKeys = [] }, // 鎵归噺閫夋嫨绗竴娆¢獙鏀剁粨鏋滈�氳繃 handleSelectAllFirstAcceptanceResult() { this.selectedRowKeys.forEach(key => { - const dataItem = this.detail.dataSource.find(item => item.id === key) + const dataItem = this.detail.maintenanceDetailList.find(item => item.id === key) if (dataItem && dataItem.firstInspectResult !== '1') { delete dataItem.firstInspectException dataItem.firstInspectResult = '1' } }) - this.$refs.editableDetailTable.clearCheckboxRow() - this.$refs.editableDetailTable.clearValidate() + this.$refs.editableDetailTable1.clearCheckboxRow() + this.$refs.editableDetailTable1.clearValidate() this.selectedRowKeys = [] }, @@ -649,7 +735,7 @@ // 淇濆吇鍓嶆妧鏈姸鎬佸崟閫夊彂鐢熸敼鍙樻椂瑙﹀彂 handleCheckRadioChange() { - if (this.model.fullyFunctional == '1' && this.model.runningNormally == '1') this.model.problemDescription = '' + if (this.model.fullyFunctional === '1' && this.model.runningNormally === '1') this.model.problemDescription = '' }, /** @@ -706,6 +792,15 @@ } }, + /** + * 鏍囩鏍忓垏鎹㈡椂瑙﹀彂 + * @param tabKey 鍒囨崲鍚庣殑tabKey + */ + handleTabChange(tabKey) { + if (this.activeTabKey !== '3') this.$refs['editableDetailTable' + this.activeTabKey].clearValidate() + this.activeTabKey = tabKey + }, + handleCancel() { this.close() }, -- Gitblit v1.9.3