From 79c0397ae8aedb6cc4f5db486e2d9b87a7410d04 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期五, 18 七月 2025 09:49:25 +0800 Subject: [PATCH] 二保工单批量新增 --- src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderDetailModal.vue | 97 +++++++++++++++++++ src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderModal.vue | 167 +++++++++++++++++++++------------ src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue | 21 ++- 3 files changed, 216 insertions(+), 69 deletions(-) diff --git a/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue b/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue index b325d22..53bbd7c 100644 --- a/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue +++ b/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue @@ -81,14 +81,19 @@ <a-divider type="vertical"/> - <a @click="handleDetail(record)">璇︽儏</a> - - <a-divider type="vertical"/> - - <a-popconfirm title="纭畾浣滃簾鍚�?" @confirm="() => handlerAbolish(record.id)"> - <a>浣滃簾</a> - </a-popconfirm> - + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down"/></a> + <a-menu slot="overlay"> + <a-menu-item> + <a-popconfirm title="纭畾浣滃簾鍚�?" @confirm="() => handleAbolish(record.id)"> + <a>浣滃簾</a> + </a-popconfirm> + </a-menu-item> + <a-menu-item> + <a @click="handleDetail(record)">璇︽儏</a> + </a-menu-item> + </a-menu> + </a-dropdown> </template> <template v-else> diff --git a/src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderDetailModal.vue b/src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderDetailModal.vue new file mode 100644 index 0000000..5beab92 --- /dev/null +++ b/src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderDetailModal.vue @@ -0,0 +1,97 @@ +<template> + <j-modal :title="title" :width="1200" :visible="visible" switchFullscreen centered + :okButtonProps="{ class:{'jee-hidden': true} }" @cancel="handleCancel" + cancelText="鍏抽棴"> + <a-spin :spinning="spinning"> + <a-tabs default-active-key="1"> + <a-tab-pane tab="鎿嶄綔宸�" key="1"> + <j-vxe-table rowNumber bordered keep-source :height="500" :dataSource="detail.operatorMaintenanceList" + :columns="detail.columns"/> + </a-tab-pane> + <a-tab-pane tab="缁翠慨宸�" key="2" forceRender> + <j-vxe-table rowNumber bordered keep-source :height="500" :dataSource="detail.repairerMaintenanceList" + :columns="detail.columns"/> + </a-tab-pane> + </a-tabs> + </a-spin> + </j-modal> +</template> + +<script> + import { getAction, httpAction } from '@/api/manage' + import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue' + import { JVXETypes } from '@comp/jeecg/JVxeTable' + + export default { + name: 'EamSecondMaintenanceBatchOrderDetailModal', + components: { MaintenanceEquipmentSelect }, + data() { + return { + title: '棰勮鏄庣粏', + visible: false, + spinning: false, + url: { + standardDetail: '/eam/eamMaintenanceStandardDetail/queryList' + }, + detail: { + operatorMaintenanceList: [], + repairerMaintenanceList: [], + columns: [ + { + title: 'ID', + key: 'id', + type: JVXETypes.hidden + }, + { + title: 'orderId', + key: 'orderId', + type: JVXETypes.hidden + }, + { + title: '搴忓彿', + key: 'itemCode', + type: JVXETypes.normal, + width: 60, + align: 'center' + }, + { + title: '淇濆吇椤�', + key: 'itemName', + type: JVXETypes.normal, + align: 'center' + } + ] + } + } + }, + methods: { + /** + * 鑾峰彇淇濆吇瑙勮寖鏁版嵁 + * @param standardId 瑙勮寖Id + */ + loadStandardDetail(standardId) { + this.spinning = true + getAction(this.url.standardDetail, { standardId }) + .then(res => { + if (res.success) { + this.detail.operatorMaintenanceList = res.result.filter(item => item.itemCategory == 'OPERATOR_MAINTENANCE') + this.detail.repairerMaintenanceList = res.result.filter(item => item.itemCategory == 'REPAIRER_MAINTENANCE') + } + }) + .finally(() => { + this.spinning = false + }) + }, + + handleCancel() { + this.close() + }, + + close() { + this.$emit('close') + this.visible = false + } + + } + } +</script> diff --git a/src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderModal.vue b/src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderModal.vue index 7f78e9f..71ba4f5 100644 --- a/src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderModal.vue +++ b/src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderModal.vue @@ -2,21 +2,41 @@ <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen centered :mask-closable="false" @ok="handleOk" @cancel="handleCancel" cancelText="鍏抽棴"> <a-spin :spinning="spinning"> - <j-vxe-table ref="editableDetailTable" rowNumber rowSelection bordered alwaysEdit toolbar @added="addNewRow" + <j-vxe-table ref="editableDetailTable" rowNumber rowSelection bordered alwaysEdit toolbar :toolbarConfig="detail.toolbarConfig" keep-source :height="500" - :dataSource="detail.dataSource" :columns="detail.columns"/> + :dataSource="detail.dataSource" :columns="detail.columns"> + <!--缁熶竴缂栫爜--> + <template v-slot:equipmentId="props"> + <maintenance-equipment-select placeholder="璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�" v-model="props.row.equipmentId" + maintenanceCategory="SECOND_MAINTENANCE" :allowClear="false" + @autocompleteForm="autocompleteForm($event,props.row)"/> + </template> + + <!-- 淇濆吇鏃ユ湡--> + <template v-slot:maintenanceDate="props"> + <a-date-picker v-model="props.row.maintenanceDate" value-format="YYYY-MM-DD"/> + </template> + + <!-- 鎿嶄綔--> + <template v-slot:action="props"> + <a :disabled="!props.row.equipmentId" @click="handlePreviewDetail(props.row.standardId)">棰勮鏄庣粏</a> + </template> + </j-vxe-table> </a-spin> + + <eam-second-maintenance-batch-order-detail-modal ref="detailModal"/> </j-modal> </template> <script> - import { getAction, httpAction } from '@/api/manage' + import { postAction } from '@/api/manage' import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue' import { JVXETypes } from '@comp/jeecg/JVxeTable' + import EamSecondMaintenanceBatchOrderDetailModal from './EamSecondMaintenanceBatchOrderDetailModal' export default { name: 'EamSecondMaintenanceBatchOrderModal', - components: { MaintenanceEquipmentSelect }, + components: { EamSecondMaintenanceBatchOrderDetailModal, MaintenanceEquipmentSelect }, data() { return { title: '鎿嶄綔', @@ -36,39 +56,63 @@ }, { title: '宸ュ崟鍙�', - dataIndex: 'orderNum', + key: 'orderNum', align: 'center', type: JVXETypes.inputNumber, disabled: true, - placeholder: '宸ュ崟鍙风郴缁熻嚜鍔ㄧ敓鎴�' + placeholder: '${title}绯荤粺鑷姩鐢熸垚', + width: 200 }, { title: '缁熶竴缂栫爜', - dataIndex: 'equipmentId', + key: 'equipmentId', align: 'center', type: JVXETypes.slot, - slotName: 'equipmentId' + slotName: 'equipmentId', + width: 300, + validateRules: [ + { required: true, message: '璇疯緭鍏�${title}鎴栧悕绉版悳绱�' }, + { unique: true, message: '${title}涓嶈兘閲嶅' } + ] }, { title: '瑙勮寖鍚嶇О', - dataIndex: 'standardName', + key: 'standardName', align: 'center', - type: JVXETypes.input, - disabled: true, - placeholder: '閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�' + type: JVXETypes.normal, + width: 200 }, { title: '淇濆吇鏃ユ湡', - dataIndex: 'maintenanceDate', + key: 'maintenanceDate', align: 'center', - type: JVXETypes.date + type: JVXETypes.slot, + width: 200, + slotName: 'maintenanceDate', + validateRules: [{ required: true, message: '璇烽�夋嫨${title}' }] }, { title: '淇濆吇鍛ㄦ湡', - dataIndex: 'maintenancePeriod', + key: 'maintenancePeriod', align: 'center', - type: JVXETypes.inputNumber, - defaultValue: '6' + type: JVXETypes.normal, + width: 150 + }, + { + title: '澶囨敞', + key: 'remark', + align: 'center', + type: JVXETypes.textarea, + placeholder: '璇疯緭鍏ュ娉�', + width: 300 + }, + { + title: '鎿嶄綔', + align: 'center', + type: JVXETypes.slot, + width: 150, + slotName: 'action', + fixed: 'right' } ], toolbarConfig: { @@ -89,57 +133,52 @@ this.detail.operatorMaintenanceList = this.detail.repairerMaintenanceList = [] }, - addNewRow({ row }) { - console.log('row', row) - row.maintenancePeriod = 6 - this.$refs.editableDetailTable.updateData() + handlePreviewDetail(standardId) { + this.$refs.detailModal.visible = true + this.$refs.detailModal.loadStandardDetail(standardId) }, - autocompleteForm(selectObj) { - this.$set(this.model, 'standardName', selectObj.standardName) - this.$set(this.model, 'standardId', selectObj.id) - this.$set(this.model, 'equipmentId', selectObj.equipmentId) - if (!this.model.id) this.loadStandardDetail(selectObj.id) + autocompleteForm(selectObj, record) { + this.$set(record, 'standardName', selectObj.standardName) + this.$set(record, 'standardId', selectObj.id) + this.$set(record, 'equipmentId', selectObj.equipmentId) + this.$set(record, 'maintenancePeriod', selectObj.maintenancePeriod) + this.$refs.editableDetailTable.validateTable() }, async handleOk() { - const that = this - // 瑙﹀彂琛ㄥ崟楠岃瘉 - this.$refs.form.validate(valid => { - if (valid) { - that.confirmLoading = that.spinning = true - let httpUrl = '' - let method = '' - if (!this.model.id) { - httpUrl += this.url.add - method = 'post' + const requests = this.$refs.editableDetailTable.getTableData() + if (requests.length == 0) { + this.$notification.warning({ + message: '娑堟伅', + description: '璇疯嚦灏戞柊澧炰竴鏉¤褰�' + }) + return + } + + const errMap = await this.$refs.editableDetailTable.validateTable() + if (errMap) return + + this.confirmLoading = this.spinning = true + postAction(this.url.batchAdd, requests) + .then((res) => { + if (res.success) { + this.$notification.success({ + message: '娑堟伅', + description: res.message + }) + this.$emit('ok') + this.close() } else { - httpUrl += this.url.edit - method = 'put' + this.$notification.warning({ + message: '娑堟伅', + description: res.message + }) } - httpAction(httpUrl, this.model, method) - .then((res) => { - if (res.success) { - that.$notification.success({ - message: '娑堟伅', - description: res.message - }) - that.$emit('ok') - that.close() - } else { - that.$notification.warning({ - message: '娑堟伅', - description: res.message - }) - } - }) - .finally(() => { - that.confirmLoading = that.spinning = false - }) - } else { - return false - } - }) + }) + .finally(() => { + this.confirmLoading = this.spinning = false + }) }, handleCancel() { @@ -154,3 +193,9 @@ } } </script> + +<style scoped lang="less"> + /deep/ .ant-select-dropdown-menu { + text-align: left; + } +</style> -- Gitblit v1.9.3