From 7859c063db5effe91f2418056e70b848177a3628 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期四, 14 八月 2025 10:51:29 +0800 Subject: [PATCH] 1、保养规范审批流程根据规范分类区分展示保养项明细 2、调整二保批量新增功能 --- src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue | 288 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 249 insertions(+), 39 deletions(-) diff --git a/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue b/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue index f3e18a9..dc08948 100644 --- a/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue +++ b/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue @@ -74,21 +74,79 @@ </a-col> <a-col :span="10" class="scroll-col"> - <a-tabs default-active-key="1"> - <a-tab-pane key="1" tab="淇濆吇椤规槑缁�"> - <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> - </j-vxe-table> - </a-tab-pane> + <a-tabs v-model="activeTabKey"> + <template v-if="model.maintenanceCategory==='POINT_INSPECTION'"> + <a-tab-pane key="1" tab="鏃ョ偣妫�"> + <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource1" + :columns="detail.columns"> + <template v-slot:itemCategory="props"> + <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/> + </template> + </j-vxe-table> + </a-tab-pane> - <template v-if="selectShenpiData.procInstId"> - <a-tab-pane tab='娴佺▼鍥�' forceRender> - <img :src="imageSrc" width="100%" v-if="imageSrc"/> + <a-tab-pane key="2" tab="鍛ㄧ偣妫�"> + <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource2" + :columns="detail.columns"> + <template v-slot:itemCategory="props"> + <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/> + </template> + </j-vxe-table> </a-tab-pane> </template> + + <template v-if="model.maintenanceCategory==='SECOND_MAINTENANCE'"> + <a-tab-pane key="1" tab="鎿嶄綔宸�"> + <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource1" + :columns="detail.columns"> + <template v-slot:itemCategory="props"> + <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/> + </template> + </j-vxe-table> + </a-tab-pane> + + <a-tab-pane key="2" tab="缁翠慨宸�"> + <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource2" + :columns="detail.columns"> + <template v-slot:itemCategory="props"> + <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/> + </template> + </j-vxe-table> + </a-tab-pane> + </template> + + <template v-if="model.maintenanceCategory==='THIRD_MAINTENANCE'"> + <a-tab-pane key="1" tab="涓変繚"> + <j-vxe-table bordered alwaysEdit keep-source :dataSource="detail.dataSource1" + :columns="detail.columns"> + <template v-slot:itemCategory="props"> + <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode" disabled/> + </template> + </j-vxe-table> + </a-tab-pane> + </template> + + <template v-if="selectShenpiData.processDefinitionKey"> + <a-tab-pane key='3' tab='娴佺▼鍥�'> + <img :src="imageSrc" alt="Fetched Image"/> + </a-tab-pane> + </template> + + <a-tab-pane key='4' tab='娴佽浆鑺傜偣'> + <a-card> + <a-timeline style="padding:0 1% 0 12%"> + <a-timeline-item color='white' v-for="(item,index1) in hitaskDataSource" :key="index1"> + <div class="bottom"> + <p>澶勭悊浜猴細{{item.assignee_dictText}}</p> + <p v-if="index1 !==0">澶勭悊鏃堕暱锛歿{item.duration}}</p> + <p v-if="item.name !== '鎻愪氦鐢宠'">澶勭悊绫诲瀷锛歿{item.sequenceFlowName}}</p> + <p v-if="item.description != null">澶勭悊鎰忚锛歿{item.description}}</p> + <div class="left_qiu"><span>{{item.taskName}}</span></div> + </div> + </a-timeline-item> + </a-timeline> + </a-card> + </a-tab-pane> </a-tabs> </a-col> @@ -161,6 +219,7 @@ confirmLoading: false, spinning: false, model: {}, + hitaskDataSource: [], validatorRules: { repairManagerApproveResult: [{ required: true, message: '璇烽�夋嫨纭绫诲瀷' }], technicalManagerApproveResult: [{ required: true, message: '璇烽�夋嫨纭绫诲瀷' }] @@ -175,6 +234,7 @@ sm: { span: 16 } }, visible: false, + activeTabKey: '1', // 琛ㄥご url: { diagramView: '/assign/flow/diagramView', @@ -184,7 +244,8 @@ detailList: '/eam/eamMaintenanceStandardDetail/queryList' }, detail: { - dataSource: [], + dataSource1: [], + dataSource2: [], columns: [], inspectionColumns: [ { @@ -201,16 +262,17 @@ title: '椤圭洰搴忓彿', key: 'itemCode', type: JVXETypes.normal, - align: 'center' - }, - { - title: '淇濆吇椤瑰垎绫�', - key: 'itemCategory', - type: JVXETypes.slot, - slotName: 'itemCategory', align: 'center', - disabled: true + width: 100 }, + // { + // title: '淇濆吇椤瑰垎绫�', + // key: 'itemCategory', + // type: JVXETypes.slot, + // slotName: 'itemCategory', + // align: 'center', + // disabled: true + // }, { title: '淇濆吇椤圭洰', key: 'itemName', @@ -239,16 +301,17 @@ title: '椤圭洰搴忓彿', key: 'itemCode', type: JVXETypes.normal, - align: 'center' - }, - { - title: '淇濆吇椤瑰垎绫�', - key: 'itemCategory', - type: JVXETypes.slot, - slotName: 'itemCategory', align: 'center', - disabled: true + width: 100 }, + // { + // title: '淇濆吇椤瑰垎绫�', + // key: 'itemCategory', + // type: JVXETypes.slot, + // slotName: 'itemCategory', + // align: 'center', + // disabled: true + // }, { title: '淇濆吇椤圭洰', key: 'itemName', @@ -315,11 +378,11 @@ }, computed: { displayRepairLeaderFlag() { - return this.model.standardStatus && ['WAIT_REPAIR_DIRECTOR', 'WAIT_TECHNICAL_DIRECTOR', 'REJECTED'].includes(this.model.standardStatus) + return this.model.standardStatus && ['WAIT_REPAIR_DIRECTOR', 'WAIT_TECHNICAL_DIRECTOR', 'START', 'REJECTED'].includes(this.model.standardStatus) }, displayTechnicalDirectorFlag() { - return this.model.standardStatus && ['WAIT_TECHNICAL_DIRECTOR', 'REJECTED'].includes(this.model.standardStatus) && this.model.repairManagerApproveResult === '1' + return this.model.standardStatus && ['WAIT_TECHNICAL_DIRECTOR', 'START', 'REJECTED'].includes(this.model.standardStatus) && this.model.repairManagerApproveResult === '1' }, encodedDictCode() { @@ -333,8 +396,25 @@ * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍 */ handleApprove(record) { + this.activeTabKey = '1' this.getBasicInformationByApi(record) this.getFlowChartImageByApi(record) + this.getFlowTaskListByApi(record) + }, + + /** + * 鑾峰彇娴佽浆鑺傜偣 + * @param record + */ + getFlowTaskListByApi(record) { + let parmhis = { + 'procInstId': record.procInstId + } + getAction(this.url.queryHisTaskList, parmhis).then(res => { + this.hitaskDataSource = res.result + }).finally( + this.visible = true + ) }, /** @@ -342,8 +422,10 @@ * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍 */ handleDetail(record) { - this.detail.dataSource = [] + this.activeTabKey = '1' + this.detail.dataSource1 = this.detail.dataSource2 = [] this.model = Object.assign({}, record) + this.getFlowTaskListByApi(record) this.loadDetail(record.id) }, @@ -354,7 +436,7 @@ getBasicInformationByApi(record) { this.spinning = true this.model = {} - this.detail.dataSource = [] + this.detail.dataSource1 = this.detail.dataSource2 = [] const that = this getAction(this.url.queryById, { id: record.dataId }) .then(res => { @@ -405,9 +487,26 @@ * @param dataId 涓氬姟ID */ loadDetail(dataId) { + this.spinning = true getAction(this.url.detailList, { standardId: dataId }) .then(res => { - if (res.success) this.detail.dataSource = res.result + if (res.success) { + switch (this.model.maintenanceCategory) { + case 'POINT_INSPECTION': + this.detail.dataSource1 = res.result.filter(item => item.itemCategory === 'DAY_INSPECTION') + this.detail.dataSource2 = res.result.filter(item => item.itemCategory === 'WEEK_INSPECTION') + break + case 'SECOND_MAINTENANCE': + this.detail.dataSource1 = res.result.filter(item => item.itemCategory === 'OPERATOR_MAINTENANCE') + this.detail.dataSource2 = res.result.filter(item => item.itemCategory === 'REPAIRER_MAINTENANCE') + break + case 'THIRD_MAINTENANCE': + this.detail.dataSource1 = res.result + break + default: + break + } + } }) .finally(() => { this.spinning = false @@ -415,11 +514,6 @@ }, async submitForm() { - let errMap = await this.$refs.editableDetailTable.validateTable() - if (errMap) { - return - } - this.$refs.form.validate(valid => { if (valid) { this.confirmLoading = this.spinning = true @@ -481,4 +575,120 @@ } } } + + /* 鍏ㄥ眬绂侀�夋牱寮� - 浣滅敤浜庢暣涓〉闈� */ + html.submitting, + html.submitting body { + pointer-events: none !important; + cursor: wait !important; + } + + /* 钂欏眰鏁堟灉澧炲己 */ + html.submitting::before { + content: ''; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.5); + z-index: 9998; + } + + /* 鍔犺浇鎸囩ず鍣� - 鏇存槑鏄剧殑瑙嗚鍙嶉 */ + html.submitting::after { + content: '鎻愪氦涓�...'; + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: #1890ff; + color: white; + padding: 10px 20px; + border-radius: 4px; + z-index: 9999; + } + + /* 绂佺敤鐘舵�佹寜閽牱寮� */ + .disabled-btn { + opacity: 0.6; + cursor: not-allowed !important; + } + + .shallow-hr { + border: 0; + height: 1px; /* 鍒嗙晫绾跨殑楂樺害 */ + background-color: rgba(0, 0, 0, 0.1); /* 浣跨敤 RGBA 棰滆壊锛屽苟璁剧疆杈冧綆鐨勯�忔槑搴� */ + margin: 20px 0; /* 鍒嗙晫绾夸笂涓嬬殑澶栬竟璺� */ + } + + .btn-custom { + background-color: #4CAF50; /* 缁胯壊鑳屾櫙 */ + color: white; /* 鐧借壊鏂囧瓧 */ + border: none; /* 鏃犺竟妗� */ + padding: 5px 15px; /* 鍐呰竟璺� */ + text-align: center; /* 鏂囧瓧灞呬腑 */ + text-decoration: none; /* 鏃犱笅鍒掔嚎 */ + display: inline-block; /* 琛屽唴鍧楀厓绱� */ + font-size: 12px; /* 瀛椾綋澶у皬 */ + margin: 4px 2px; /* 澶栬竟璺� */ + cursor: pointer; /* 榧犳爣鎮仠鏃舵樉绀烘墜鍨� */ + border-radius: 4px; /* 鍦嗚杈规 */ + } + + .bold-large-label { + font-weight: bold; + font-size: 20px; /* 鎴栦綘闇�瑕佺殑浠讳綍澶у皬 */ + } + + .left_qiu { + position: absolute; + left: -74px; + top: 0; + width: 54px; + border-radius: 50%; + height: 54px; + font-size: 13px; + margin: auto; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + background: #0099ff; + transform: translate(0, 0); + } + + /deep/ .ant-timeline-item-tail { + left: -29px !important; + } + + .left_qiu span { + width: 3em; + display: block; + color: #fff; + text-align: center; + } + + .img { + width: 75%; + } + + .wrap { + clear: both; + width: 100%; + display: flex; + height: 50px; + border: 1px solid #ccc; + /* background-color: aqua; */ + } + + .box { + width: 21%; + height: 50px; + border-right: 1px solid #ccc; + line-height: 50px; + /* background: red; */ + text-align: center; + margin: auto; + } </style> \ No newline at end of file -- Gitblit v1.9.3