From be84867c57d55112ade4cc45b9e7d7434054778e Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期二, 08 四月 2025 17:29:46 +0800
Subject: [PATCH] art: 设备管理-周保-我的待办 处理

---
 src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue                    |   49 ++++++
 src/views/flowable/workflow/FlowTodo.vue                                     |   25 ++
 src/views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal.vue |  330 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 396 insertions(+), 8 deletions(-)

diff --git a/src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue b/src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue
index bbd505c..39ccbf6 100644
--- a/src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue
+++ b/src/views/eam/maintenance/EamWeekMaintenanceOrderList.vue
@@ -22,7 +22,7 @@
           </a-col>
           <a-col :xl="4" :lg="7" :md="8" :sm="24">
             <a-form-item label="淇濆吇鐘舵��">
-              <j-dict-select-tag placeholder="璇烽�夋嫨淇濆吇鐘舵��" dict-code="maintenance_status" v-model="queryParam.maintenanceStatus" />
+              <j-dict-select-tag placeholder="璇烽�夋嫨淇濆吇鐘舵��" dict-code="week_maintenance_status" v-model="queryParam.maintenanceStatus" />
             </a-form-item>
           </a-col>
           <a-col :xl="4" :lg="7" :md="8" :sm="24">
@@ -44,6 +44,10 @@
           <a-menu-item key="1" @click="handlerBatchAbolish">
             <a-icon type="delete" />
             浣滃簾
+          </a-menu-item>
+          <a-menu-item key="1" @click="handlerBatchCollect">
+            <a-icon type="delete" />
+            棰嗗彇
           </a-menu-item>
         </a-menu>
         <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔
@@ -79,10 +83,18 @@
           <a-dropdown>
             <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
             <a-menu slot="overlay">
+               <a-menu-item v-if="record.maintenanceStatus === 'WAIT_MAINTENANCE'">
+                <a-popconfirm title="纭畾棰嗗彇鍚�?" @confirm="() => handlerCollect(record.id)">
+                  <a>棰嗗彇</a>
+                </a-popconfirm>
+              </a-menu-item>
               <a-menu-item v-if="record.maintenanceStatus === 'WAIT_MAINTENANCE'">
                 <a-popconfirm title="纭畾浣滃簾鍚�?" @confirm="() => handlerAbolish(record.id)">
                   <a>浣滃簾</a>
                 </a-popconfirm>
+              </a-menu-item>
+              <a-menu-item >
+                <a @click="handleDetail(record)">璇︽儏</a>
               </a-menu-item>
             </a-menu>
           </a-dropdown>
@@ -102,7 +114,7 @@
 import EamWeekMaintenanceOrderModal from './modules/EamWeekMaintenanceOrderModal'
 import { JeecgListMixin } from '@/mixins/JeecgListMixin'
 import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
-import { deleteAction } from '@api/manage'
+import { deleteAction, getAction } from '@api/manage'
 
 export default {
   name: 'EamWeekMaintenanceOrderList',
@@ -207,7 +219,8 @@
       url: {
         list: '/eam/weekMaintenanceOrder/list',
         abolish: '/eam/weekMaintenanceOrder/abolish',
-        abolishBatch: '/eam/weekMaintenanceOrder/abolishBatch'
+        abolishBatch: '/eam/weekMaintenanceOrder/abolishBatch',
+        collect: '/eam/weekMaintenanceOrder/collect',
       }
     }
   },
@@ -290,6 +303,36 @@
         });
       }
     },
+    //鍗曚釜棰嗗彇
+    handlerCollect(id) {
+      if(!this.url.collect){
+        this.$message.error("璇疯缃畊rl.collect灞炴��!")
+        return
+      }
+      var that = this;
+      getAction(that.url.collect, {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
+          });
+        }
+      });
+    },
+    //鎵归噺棰嗗彇
+    handlerBatchCollect(){
+
+    }
   }
 }
 </script>
diff --git a/src/views/flowable/workflow/FlowTodo.vue b/src/views/flowable/workflow/FlowTodo.vue
index 6ce720b..f46a3be 100644
--- a/src/views/flowable/workflow/FlowTodo.vue
+++ b/src/views/flowable/workflow/FlowTodo.vue
@@ -103,6 +103,7 @@
     <AssignFileStreamHandle ref="modalFormApproval" :selectShenpiData="selectShenpiData"></AssignFileStreamHandle>
     <DispatchFileHandle ref="modalFormDispatchFileXq"  :selectShenpiData="selectDispatchFileXqData" @searchReset="searchReset"></DispatchFileHandle>
     <DispatchFileBachHandleStyle ref="modalFormDispatchFileBatch" @searchReset="searchReset" @ok="modalFormOk"></DispatchFileBachHandleStyle>
+    <week-maintenance-approval-modal ref = "weekMaintenanceApprovalModal" :maintenanceId="dataId"></week-maintenance-approval-modal>
   </a-card>
 </template>
 
@@ -115,6 +116,8 @@
 import AssignFileStreamHandle from '@views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue'
 import DispatchFileHandle from '@views/flowable/workflow/dispatchFile/DispatchFileHandle.vue'
 import DispatchFileBachHandleStyle from '@views/flowable/workflow/dispatchFile/DispatchFileBachHandleStyle#Drawer.vue'
+import WeekMaintenanceApprovalModal from '@views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal';
+
 import { getAction } from '@api/manage'
 export default {
   name: 'NcDeviceCharactersList',
@@ -123,7 +126,8 @@
     AssignFileStreamHandle,
     JDictSelectTag,
     DispatchFileHandle,
-    DispatchFileBachHandleStyle
+    DispatchFileBachHandleStyle,
+    WeekMaintenanceApprovalModal
   },
   data () {
     return {
@@ -198,7 +202,9 @@
       dictOptions:{},
       selectShenpiData: {},
       selectDispatchFileXqData:{},
-      selectBachData:{}
+      selectBachData:{},
+      //涓氬姟淇℃伅ID
+      dataId: undefined,
     }
   },
   created() {
@@ -213,14 +219,17 @@
       console.log('鐐瑰嚮浜嗚鎯�')
       console.log('item----->', item)
       console.log('index----->', index)
-      let approcesstype = this.splitAprocessType(item.category_dictText)
+      let approcesstype = this.splitAprocessType(item.category)
       console.log('approcesstype--->', approcesstype)
       switch (approcesstype) {
-        case '鎸囨淳NC鏂囨。鍒拌澶囨祦绋�':
+        case 'drApproval':
           this.handDrDetial(item)
           break
-        case 'NC绋嬪簭绛炬淳':
+        case 'ggApproval':
           this.handDispatchFileDetial(item)
+          break
+        case 'WEEK_MAINTENANCE':
+          this.handleWeekMaintenance(item)
           break
         default:
           alert('娌℃壘鍒拌瀹℃壒')
@@ -274,6 +283,12 @@
           }
         })
       }
+    },
+    handleWeekMaintenance(item) {
+      this.dataId = item.dataId;
+      this.$refs.weekMaintenanceApprovalModal.add()
+      this.$refs.weekMaintenanceApprovalModal.title = item.preNode;
+      this.$refs.weekMaintenanceApprovalModal.disableSubmit = false;
     }
   }
 }
diff --git a/src/views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal.vue b/src/views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal.vue
new file mode 100644
index 0000000..220a1e6
--- /dev/null
+++ b/src/views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal.vue
@@ -0,0 +1,330 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="1200"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴">
+
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 璁惧鍩虹淇℃伅
+        </a-divider>
+        <a-row :gutter="24">
+          <a-col :span="8">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderNum" label="宸ュ崟鍙�">
+              <a-input placeholder="宸ュ崟鍙风郴缁熻嚜鍔ㄧ敓鎴�" v-model="model.orderNum" disabled />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧缂栫爜">
+              <maintenance-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" v-model="model.equipmentId"
+                                            :maintenanceCategory="maintenanceCategory"
+                                            @autocompleteForm="autocompleteForm" :disabled="editable"></maintenance-equipment-select>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="鏍囧噯鍚嶇О">
+              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.standardName" disabled />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="8">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenanceDate" label="淇濆吇鏃ユ湡">
+              <a-date-picker placeholder="璇烽�夋嫨璁″垝淇濆吇鏃ユ湡" v-model="model.maintenanceDate" format="YYYY-MM-DD"
+                             style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator" label="淇濆吇浜�">
+              <j-search-select-tag v-model="model.operator" placeholder="璇烽�夋嫨淇濆吇浜�"
+                                   :dictOptions="maintenanceOperatorOptions" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenancePeriod" label="淇濆吇鍛ㄦ湡">
+              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.maintenancePeriod" disabled />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="remark" label="澶囨敞">
+            <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" />
+          </a-form-model-item>
+        </a-row>
+        <a-row :gutter="24">
+          <j-vxe-table
+            ref="editableDetailTable"
+            :rowNumber="true"
+            :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-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+import { getAction, httpAction } from '@/api/manage'
+import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
+import { JVXETypes } from '@comp/jeecg/JVxeTable'
+import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect'
+
+export default {
+  name: 'EamWeekMaintenanceOrderModal',
+  mixins: [JVxeTableModelMixin],
+  props: {
+    maintenanceId: {
+      type: String,
+      default: '',
+      required: true,
+    }
+  },
+  components: {
+    MaintenanceEquipmentSelect
+  },
+  data() {
+    return {
+      title: '鎿嶄綔',
+      visible: false,
+      editable: false,
+      model: {},
+      maintenanceCategory: 'WEEK_MAINTENANCE',
+      maintenanceOperatorOptions: [],
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 6 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      },
+      labelColLong: {
+        xs: { span: 24 },
+        sm: { span: 2 }
+      },
+      wrapperColLong: {
+        xs: { span: 24 },
+        sm: { span: 21 }
+      },
+      confirmLoading: false,
+      validatorRules: {
+      },
+      url: {
+        add: '/eam/weekMaintenanceOrder/add',
+        edit: '/eam/weekMaintenanceOrder/edit',
+        standardDetail: '/eam/eamMaintenanceStandardDetail/queryList',
+        detail: '/eam/weekMaintenanceOrderDetail/queryList',
+        userSelect: '/eam/user_select/list',
+      },
+      detail: {
+        loading: false,
+        dataSource: [],
+        columns: [
+          {
+            title: 'ID',
+            key: 'id',
+            type: JVXETypes.hidden
+          },
+          {
+            title: 'orderId',
+            key: 'orderId',
+            type: JVXETypes.hidden
+          },
+          {
+            title: '搴忓彿',
+            key: 'itemCode',
+            type: JVXETypes.inputNumber,
+            width: '10%',
+            align: 'center',
+            validateRules: [
+              { required: true, unique: true, message: '搴忓彿涓嶈兘閲嶅' }
+            ]
+          },
+          {
+            title: '淇濆吇椤�',
+            key: 'itemName',
+            type: JVXETypes.textarea,
+            width: '20%',
+            align: 'center',
+            validateRules: [
+              { required: true, message: '淇濆吇椤逛笉鑳戒负绌猴紒' }
+            ]
+          },
+          {
+            title: '瀛愪繚鍏婚」',
+            key: 'subItemName',
+            type: JVXETypes.textarea,
+            width: '25%',
+            align: 'center'
+          },
+          {
+            title: '淇濆吇瑕佹眰',
+            key: 'itemDemand',
+            type: JVXETypes.textarea,
+            width: '30%',
+            align: 'center',
+            validateRules: [
+              { required: true, message: '淇濆吇瑕佹眰涓嶈兘涓虹┖锛�' }
+            ]
+          }
+        ],
+        toolbarConfig: {
+          // prefix 鍓嶇紑锛泂uffix 鍚庣紑
+          slot: ['prefix', 'suffix'],
+          // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
+          btn: ['add', 'remove', 'clearSelection']
+        }
+      }
+    }
+  },
+  created() {
+  },
+  methods: {
+    add() {
+      //鍒濆鍖栭粯璁ゅ��
+      this.model = {}
+      this.visible = true
+      this.editable = false
+      this.detail.dataSource = []
+      this.loadMaintenanceOperatorList();
+    },
+    edit(record) {
+      this.model = Object.assign({}, record)
+      this.visible = true
+      this.editable = true
+      this.detail.dataSource = []
+      this.loadDetail(record.id)
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+      this.$refs.form.clearValidate()
+    },
+    async handleOk() {
+      const that = this
+      let errMap = await that.$refs.editableDetailTable.validateTable()
+      if (errMap) {
+        this.$message.warning('鏁版嵁鏍¢獙澶辫触锛�')
+        return
+      }
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          let tableData = that.$refs.editableDetailTable.getTableData()
+          let removeData = that.$refs.editableDetailTable.getDeleteData()
+          that.model.tableDetailList = [...tableData]
+          that.model.removeDetailList = [...removeData]
+
+          that.confirmLoading = 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.$message.success(res.message)
+              that.$emit('ok')
+              that.close()
+            } else {
+              that.$message.warning(res.message)
+            }
+          }).finally(() => {
+            that.confirmLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    },
+    autocompleteForm(selectObj) {
+      //鏍囧噯鍚嶇О锛屼繚鍏诲懆鏈熶笉鍒锋柊瑙e喅鍔炴硶
+      //鍔炴硶涓�  validatorRules equipmentId 杩樻槸鏈夐棶棰�
+      // const newObj = {
+      //   standardName: selectObj.standardName,
+      //   maintenancePeriod: selectObj.maintenancePeriod,
+      //   standardId : selectObj.id,
+      //   equipmentId: selectObj.equipmentId,
+      // };
+      // this.model = Object.assign({}, newObj, this.model)
+      //鍔炴硶浜�
+      this.$set(this.model, 'standardName', selectObj.standardName)
+      this.$set(this.model, 'maintenancePeriod', selectObj.maintenancePeriod)
+      this.$set(this.model, 'standardId', selectObj.id)
+      this.$set(this.model, 'equipmentId', selectObj.equipmentId)
+      // console.log('model', this.model)
+      if (!this.model.id) {
+        this.loadStandardDetail(selectObj.id)
+      }
+      this.loadMaintenanceOperatorList(this.model.equipmentId);
+    },
+    //鍔犺浇璇︽儏鏁版嵁
+    loadStandardDetail(standardId) {
+      if (standardId) {
+        getAction(this.url.standardDetail, { standardId: standardId }).then(res => {
+          if (res.success) {
+            this.detail.dataSource = res.result.map(item => ({
+              itemCode: item.itemCode,
+              itemName: item.itemName,
+              subItemName: item.subItemName,
+              itemDemand: item.itemDemand
+            }))
+          }
+        })
+      }
+    },
+    //鏍囧噯閫夋嫨鍙樺寲
+    loadDetail(orderId) {
+      if (orderId) {
+        getAction(this.url.detail, { orderId: orderId }).then(res => {
+          if (res.success) {
+            this.detail.dataSource = [...res.result]
+          }
+        })
+      }
+    },
+    loadMaintenanceOperatorList(equipmentId) {
+      this.maintenanceOperatorOptions = []
+      let params = { positionCode: 'PCR0001' }
+      if (equipmentId) {
+        params.equipmentId = equipmentId
+      }
+      getAction(this.url.userSelect, params).then(res => {
+        if (res.success) {
+          this.maintenanceOperatorOptions = res.result.map(item => ({
+            key: item.id,
+            value: item.username,
+            text: item.realname
+          }))
+        }
+      })
+    }
+
+  }
+}
+</script>
+
+<style lang="less" scoped>
+
+</style>
\ No newline at end of file

--
Gitblit v1.9.3