From 722b647891b3d4f120ffb492fea2159b54c20768 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期四, 17 七月 2025 16:43:17 +0800
Subject: [PATCH] 新增二保工单批量新增弹窗

---
 src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue      |    2 
 src/views/eam/maintenance/modules/EamThirdMaintenanceOrderModal.vue       |    3 
 src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderModal.vue |  156 ++++++++++++++++++++++++++
 src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue               |  142 +++++++++--------------
 4 files changed, 215 insertions(+), 88 deletions(-)

diff --git a/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue b/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue
index 3b9ed5c..b325d22 100644
--- a/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue
+++ b/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue
@@ -39,53 +39,36 @@
     <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
     <div class="table-operator" v-if="isDisplayOperation">
       <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
+      <a-button @click="handleBatchAdd" type="primary" icon="plus">鎵归噺鏂板</a-button>
       <a-dropdown v-if="selectedRowKeys.length > 0">
         <a-menu slot="overlay">
           <a-menu-item key="1" @click="handlerBatchAbolish">
-            <a-icon type="delete" />
+            <a-icon type="delete"/>
             浣滃簾
           </a-menu-item>
           <a-menu-item key="2" @click="handlerBatchCollect">
-            <a-icon type="form" />
+            <a-icon type="form"/>
             棰嗗彇
           </a-menu-item>
         </a-menu>
         <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔
-          <a-icon type="down" />
+          <a-icon type="down"/>
         </a-button>
       </a-dropdown>
     </div>
 
 
-
     <!-- table鍖哄煙-begin -->
     <div>
-      <div
-        class="ant-alert ant-alert-info"
-        style="margin-bottom: 16px;"
-        v-if="isDisplayOperation"
-      >
-        <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤�
-        <a
-          style="margin-left: 24px"
-          @click="onClearSelected"
-        >娓呯┖</a>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;" v-if="isDisplayOperation">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{selectedRowKeys.length
+        }}</a>椤�
+        <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>
       </div>
 
-      <a-table
-        ref="table"
-        size="middle"
-        bordered
-        rowKey="id"
-        :columns="columns"
-        :dataSource="dataSource"
-        :pagination="ipagination"
-        :loading="loading"
-        class="j-table-force-nowrap"
-        :scroll="{x:'max-content'}"
-        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
-        @change="handleTableChange"
-      >
+      <a-table ref="table" size="middle" bordered rowKey="id" :columns="columns" :dataSource="dataSource"
+               :pagination="ipagination" :loading="loading" class="j-table-force-nowrap" :scroll="{x:'max-content'}"
+               :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" @change="handleTableChange">
         <span slot="action" slot-scope="text, record">
           <template v-if="record.maintenanceStatus === 'WAIT_MAINTENANCE'">
             <a @click="handleEdit(record)">缂栬緫</a>
@@ -121,6 +104,8 @@
     <!-- 琛ㄥ崟鍖哄煙 -->
     <eamSecondMaintenanceOrder-modal ref="modalForm" @ok="modalFormOk"/>
 
+    <eam-second-maintenance-batch-order-modal ref="batchModalForm" @ok="modalFormOk"/>
+
     <second-maintenance-approval-modal ref="secondMaintenanceApprovalModal"
                                        :selectShenpiData="selectSecondMaintenanceData"/>
   </a-card>
@@ -133,11 +118,13 @@
   import SecondMaintenanceApprovalModal
     from '@views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue'
   import LxSearchEquipmentSelect from '../equipment/modules/LxSearchEquipmentSelect'
+  import EamSecondMaintenanceBatchOrderModal from './modules/EamSecondMaintenanceBatchOrderModal'
 
   export default {
     name: 'EamSecondMaintenanceOrderList',
     mixins: [JeecgListMixin],
     components: {
+      EamSecondMaintenanceBatchOrderModal,
       LxSearchEquipmentSelect,
       EamSecondMaintenanceOrderModal,
       SecondMaintenanceApprovalModal
@@ -280,10 +267,11 @@
       this.loadData(1)
     },
     methods: {
-      onMaintenanceDateChange: function(dataArray) {
-        this.queryParam.maintenanceDateBegin = dataArray[0]
-        this.queryParam.maintenanceDateEnd = dataArray[1]
+      handleBatchAdd() {
+        this.$refs.batchModalForm.title = '鎵归噺鏂板'
+        this.$refs.batchModalForm.visible = true
       },
+
       /**
        * 鐐瑰嚮棰嗗彇鏃惰Е鍙�
        * @param id 琛岃褰昳d
@@ -315,9 +303,10 @@
        */
       handleDetail(record) {
         this.selectSecondMaintenanceData = Object.assign({}, record)
-        this.$refs.secondMaintenanceApprovalModal.recordDetail(record)
         this.$refs.secondMaintenanceApprovalModal.title = '璇︽儏'
+        this.$refs.secondMaintenanceApprovalModal.visible = true
         this.$refs.secondMaintenanceApprovalModal.disableSubmit = true
+        this.$refs.secondMaintenanceApprovalModal.recordDetail(record)
       },
 
       /**
@@ -329,58 +318,37 @@
         window.open(href, '_blank')
       },
       handlerAbolish(id) {
-        if (!this.url.abolish) {
-          this.$message.error('璇疯缃畊rl.abolish灞炴��!')
-          return
-        }
         var that = this
-        deleteAction(that.url.abolish, { id: id }).then((res) => {
-          if (res.success) {
-            //閲嶆柊璁$畻鍒嗛〉闂
-            that.reCalculatePage(1)
-            // that.$message.success(res.message);
-            that.$notification.success({
-              message: '娑堟伅',
-              description: res.message
-            })
-            that.loadData()
-          } else {
-            // that.$message.warning(res.message);
-            that.$notification.warning({
-              message: '娑堟伅',
-              description: res.message
-            })
-          }
-        })
+        deleteAction(that.url.abolish, { id })
+          .then((res) => {
+            if (res.success) {
+              that.$notification.success({
+                message: '娑堟伅',
+                description: res.message
+              })
+              that.loadData()
+            } else {
+              that.$notification.warning({
+                message: '娑堟伅',
+                description: res.message
+              })
+            }
+          })
       },
       handlerBatchAbolish() {
-        if (!this.url.abolishBatch) {
-          this.$message.error('璇疯缃畊rl.abolishBatch灞炴��!')
-          return
+        var ids = ''
+        for (var a = 0; a < this.selectedRowKeys.length; a++) {
+          ids += this.selectedRowKeys[a] + ','
         }
-        if (this.selectedRowKeys.length <= 0) {
-          // this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒');
-          this.$notification.warning({
-            message: '娑堟伅',
-            description: '璇烽�夋嫨涓�鏉¤褰�'
-          })
-          return
-        } else {
-          var ids = ''
-          for (var a = 0; a < this.selectedRowKeys.length; a++) {
-            ids += this.selectedRowKeys[a] + ','
-          }
-          var that = this
-          this.$confirm({
-            title: '纭浣滃簾',
-            content: '鏄惁浣滃簾閫変腑鏁版嵁锛屽彧鏈夊緟淇濆吇鐘舵�佺殑鏁版嵁鎵嶅彲浣滃簾鎴愬姛?',
-            onOk: function () {
-              that.loading = true
-              deleteAction(that.url.abolishBatch, { ids: ids }).then((res) => {
+        var that = this
+        this.$confirm({
+          title: '纭浣滃簾',
+          content: '鏄惁浣滃簾閫変腑鏁版嵁锛屽彧鏈夊緟淇濆吇鐘舵�佺殑鏁版嵁鎵嶅彲浣滃簾鎴愬姛?',
+          onOk: function() {
+            that.loading = true
+            deleteAction(that.url.abolishBatch, { ids })
+              .then((res) => {
                 if (res.success) {
-                  //閲嶆柊璁$畻鍒嗛〉闂
-                  that.reCalculatePage(that.selectedRowKeys.length)
-                  // that.$message.success(res.message);
                   that.$notification.success({
                     message: '娑堟伅',
                     description: res.message
@@ -388,18 +356,17 @@
                   that.loadData()
                   that.onClearSelected()
                 } else {
-                  // that.$message.warning(res.message);
                   that.$notification.warning({
                     message: '娑堟伅',
                     description: res.message
                   })
                 }
-              }).finally(() => {
+              })
+              .finally(() => {
                 that.loading = false
               })
-            }
-          })
-        }
+          }
+        })
       },
       //鎵归噺棰嗗彇
       handlerBatchCollect() {
@@ -423,7 +390,7 @@
           this.$confirm({
             title: '纭棰嗗彇',
             content: '鏄惁棰嗗彇閫変腑鏁版嵁锛屽彧鏈夊緟淇濆吇鐘舵�佺殑鏁版嵁鎵嶅彲棰嗗彇鎴愬姛?',
-            onOk: function () {
+            onOk: function() {
               that.loading = true
               deleteAction(that.url.collectBatch, { ids: ids }).then((res) => {
                 if (res.success) {
@@ -450,6 +417,11 @@
           })
         }
       },
+
+      onMaintenanceDateChange: function(dataArray) {
+        this.queryParam.maintenanceDateBegin = dataArray[0]
+        this.queryParam.maintenanceDateEnd = dataArray[1]
+      }
     }
   }
 </script>
\ No newline at end of file
diff --git a/src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderModal.vue b/src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderModal.vue
new file mode 100644
index 0000000..7f78e9f
--- /dev/null
+++ b/src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderModal.vue
@@ -0,0 +1,156 @@
+<template>
+  <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"
+                   :toolbarConfig="detail.toolbarConfig" keep-source :height="500"
+                   :dataSource="detail.dataSource" :columns="detail.columns"/>
+    </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: 'EamSecondMaintenanceBatchOrderModal',
+    components: { MaintenanceEquipmentSelect },
+    data() {
+      return {
+        title: '鎿嶄綔',
+        visible: false,
+        confirmLoading: false,
+        spinning: false,
+        url: {
+          batchAdd: '/eam/secondMaintenanceOrder/batchAdd'
+        },
+        detail: {
+          dataSource: [],
+          columns: [
+            {
+              title: 'ID',
+              key: 'id',
+              type: JVXETypes.hidden
+            },
+            {
+              title: '宸ュ崟鍙�',
+              dataIndex: 'orderNum',
+              align: 'center',
+              type: JVXETypes.inputNumber,
+              disabled: true,
+              placeholder: '宸ュ崟鍙风郴缁熻嚜鍔ㄧ敓鎴�'
+            },
+            {
+              title: '缁熶竴缂栫爜',
+              dataIndex: 'equipmentId',
+              align: 'center',
+              type: JVXETypes.slot,
+              slotName: 'equipmentId'
+            },
+            {
+              title: '瑙勮寖鍚嶇О',
+              dataIndex: 'standardName',
+              align: 'center',
+              type: JVXETypes.input,
+              disabled: true,
+              placeholder: '閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�'
+            },
+            {
+              title: '淇濆吇鏃ユ湡',
+              dataIndex: 'maintenanceDate',
+              align: 'center',
+              type: JVXETypes.date
+            },
+            {
+              title: '淇濆吇鍛ㄦ湡',
+              dataIndex: 'maintenancePeriod',
+              align: 'center',
+              type: JVXETypes.inputNumber,
+              defaultValue: '6'
+            }
+          ],
+          toolbarConfig: {
+            // prefix 鍓嶇紑锛泂uffix 鍚庣紑
+            slot: ['prefix', 'suffix'],
+            // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
+            btn: ['add', 'remove', 'clearSelection']
+          }
+        }
+      }
+    },
+    methods: {
+      add() {
+        //鍒濆鍖栭粯璁ゅ��
+        this.model = { maintenancePeriod: 6 }
+        this.visible = true
+        this.editable = true
+        this.detail.operatorMaintenanceList = this.detail.repairerMaintenanceList = []
+      },
+
+      addNewRow({ row }) {
+        console.log('row', row)
+        row.maintenancePeriod = 6
+        this.$refs.editableDetailTable.updateData()
+      },
+
+      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)
+      },
+
+      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'
+            } else {
+              httpUrl += this.url.edit
+              method = 'put'
+            }
+            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
+          }
+        })
+      },
+
+      handleCancel() {
+        this.close()
+      },
+
+      close() {
+        this.$emit('close')
+        this.visible = false
+      }
+
+    }
+  }
+</script>
diff --git a/src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue b/src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue
index c0a5293..337e9c4 100644
--- a/src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue
+++ b/src/views/eam/maintenance/modules/EamSecondMaintenanceOrderModal.vue
@@ -1,5 +1,5 @@
 <template>
-  <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen
+  <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen centered
            :mask-closable="false" @ok="handleOk" @cancel="handleCancel" cancelText="鍏抽棴">
     <a-spin :spinning="spinning">
       <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
diff --git a/src/views/eam/maintenance/modules/EamThirdMaintenanceOrderModal.vue b/src/views/eam/maintenance/modules/EamThirdMaintenanceOrderModal.vue
index 144ba61..2ff8c43 100644
--- a/src/views/eam/maintenance/modules/EamThirdMaintenanceOrderModal.vue
+++ b/src/views/eam/maintenance/modules/EamThirdMaintenanceOrderModal.vue
@@ -13,8 +13,7 @@
           <a-col :span="8">
             <a-form-model-item prop="equipmentId" label="缁熶竴缂栫爜">
               <maintenance-equipment-select placeholder="璇疯緭鍏ョ粺涓�缂栫爜鎴栧悕绉版悳绱�" v-model="model.equipmentId"
-                                            maintenanceCategory="THIRD_MAINTENANCE" @autocompleteForm="autocompleteForm"
-                                            :disabled="editable"/>
+                                            maintenanceCategory="THIRD_MAINTENANCE" @autocompleteForm="autocompleteForm"/>
             </a-form-model-item>
           </a-col>
           <a-col :span="8">

--
Gitblit v1.9.3