From 5c404286280f462f195396d91c313f64bf9ded12 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期六, 05 七月 2025 17:12:05 +0800
Subject: [PATCH] 1、新增保养规范流程审批 2、新增保养项明细中保养项分类以及部位列随保养分类动态展示功能

---
 src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue |  380 ++++++++++++++
 src/config/router.config.js                                                          |  295 ----------
 src/views/eam/base/modules/EamMaintenanceStandardModal.vue                           |  104 +++
 src/views/flowable/workflow/FlowTodo.vue                                             |  739 ++++++++------------------
 src/views/eam/base/EamMaintenanceStandardList.vue                                    |   57 +
 src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue                      |    3 
 6 files changed, 755 insertions(+), 823 deletions(-)

diff --git a/src/config/router.config.js b/src/config/router.config.js
index 434e8f4..0396c22 100644
--- a/src/config/router.config.js
+++ b/src/config/router.config.js
@@ -12,276 +12,7 @@
     component: TabLayout,
     meta: { title: '棣栭〉' },
     redirect: '/dashboard/analysis',
-    children: [
-      // // dashboard
-      // {
-      //   path: '/dashboard',
-      //   name: 'dashboard',
-      //   redirect: '/dashboard/workplace',
-      //   component: RouteView,
-      //   meta: { title: '浠〃鐩�', icon: 'dashboard', permission: [ 'dashboard' ] },
-      //   children: [
-      //     {
-      //       path: '/dashboard/analysis',
-      //       name: 'Analysis',
-      //       component: () => import('@/views/dashboard/Analysis'),
-      //       meta: { title: '鍒嗘瀽椤�', permission: [ 'dashboard' ] }
-      //     },
-      //     {
-      //       path: '/dashboard/monitor',
-      //       name: 'Monitor',
-      //       hidden: true,
-      //       component: () => import('@/views/dashboard/Monitor'),
-      //       meta: { title: '鐩戞帶椤�', permission: [ 'dashboard' ] }
-      //     },
-      //     {
-      //       path: '/dashboard/workplace',
-      //       name: 'Workplace',
-      //       component: () => import('@/views/dashboard/Workplace'),
-      //       meta: { title: '宸ヤ綔鍙�', permission: [ 'dashboard' ] }
-      //     }
-      //   ]
-      // },
-      //
-      // // forms
-      // {
-      //   path: '/form',
-      //   redirect: '/form/basic-form',
-      //   component: PageView,
-      //   meta: { title: '琛ㄥ崟椤�', icon: 'form', permission: [ 'form' ] },
-      //   children: [
-      //     {
-      //       path: '/form/base-form',
-      //       name: 'BaseForm',
-      //       component: () => import('@/views/form/BasicForm'),
-      //       meta: { title: '鍩虹琛ㄥ崟', permission: [ 'form' ] }
-      //     },
-      //     {
-      //       path: '/form/step-form',
-      //       name: 'StepForm',
-      //       component: () => import('@/views/form/stepForm/StepForm'),
-      //       meta: { title: '鍒嗘琛ㄥ崟', permission: [ 'form' ] }
-      //     },
-      //     {
-      //       path: '/form/advanced-form',
-      //       name: 'AdvanceForm',
-      //       component: () => import('@/views/form/advancedForm/AdvancedForm'),
-      //       meta: { title: '楂樼骇琛ㄥ崟', permission: [ 'form' ] }
-      //     }
-      //   ]
-      // },
-      //
-      // // list
-      // {
-      //   path: '/list',
-      //   name: 'list',
-      //   component: PageView,
-      //   redirect: '/list/query-list',
-      //   meta: { title: '鍒楄〃椤�', icon: 'table', permission: [ 'table' ] },
-      //   children: [
-      //     {
-      //       path: '/list/query-list',
-      //       name: 'QueryList',
-      //       component: () => import('@/views/list/TableList'),
-      //       meta: { title: '鏌ヨ琛ㄦ牸', permission: [ 'table' ] }
-      //     },
-      //     {
-      //       path: '/list/edit-table',
-      //       name: 'EditList',
-      //       component: () => import('@/views/list/TableInnerEditList'),
-      //       meta: { title: '鍐呰仈缂栬緫琛ㄦ牸', permission: [ 'table' ] }
-      //     },
-      //     {
-      //       path: '/list/user-list',
-      //       name: 'UserList',
-      //       component: () => import('@/views/list/UserList'),
-      //       meta: { title: '鐢ㄦ埛鍒楄〃', permission: [ 'table' ] }
-      //     },
-      //     {
-      //       path: '/list/role-list',
-      //       name: 'RoleList',
-      //       component: () => import('@/views/list/RoleList'),
-      //       meta: { title: '瑙掕壊鍒楄〃', permission: [ 'table' ] }
-      //     },
-      //     {
-      //       path: '/list/permission-list',
-      //       name: 'PermissionList',
-      //       component: () => import('@/views/list/PermissionList'),
-      //       meta: { title: '鏉冮檺鍒楄〃', permission: [ 'table' ] }
-      //     },
-      //     {
-      //       path: '/list/basic-list',
-      //       name: 'BasicList',
-      //       component: () => import('@/views/list/StandardList'),
-      //       meta: { title: '鏍囧噯鍒楄〃', permission: [ 'table' ] }
-      //     },
-      //     {
-      //       path: '/list/card',
-      //       name: 'CardList',
-      //       component: () => import('@/views/list/CardList'),
-      //       meta: { title: '鍗$墖鍒楄〃', permission: [ 'table' ] }
-      //     },
-      //     {
-      //       path: '/list/search',
-      //       name: 'SearchList',
-      //       component: () => import('@/views/list/search/SearchLayout'),
-      //       redirect: '/list/search/article',
-      //       meta: { title: '鎼滅储鍒楄〃', permission: [ 'table' ] },
-      //       children: [
-      //         {
-      //           path: '/list/search/article',
-      //           name: 'SearchArticles',
-      //           component: () => import('../views/list/TableList'),
-      //           meta: { title: '鎼滅储鍒楄〃锛堟枃绔狅級', permission: [ 'table' ] }
-      //         },
-      //         {
-      //           path: '/list/search/project',
-      //           name: 'SearchProjects',
-      //           component: () => import('../views/list/TableList'),
-      //           meta: { title: '鎼滅储鍒楄〃锛堥」鐩級', permission: [ 'table' ] }
-      //         },
-      //         {
-      //           path: '/list/search/application',
-      //           name: 'SearchApplications',
-      //           component: () => import('../views/list/TableList'),
-      //           meta: { title: '鎼滅储鍒楄〃锛堝簲鐢級', permission: [ 'table' ] }
-      //         },
-      //       ]
-      //     },
-      //   ]
-      // },
-      //
-      // // profile
-      // {
-      //   path: '/profile',
-      //   name: 'profile',
-      //   component: RouteView,
-      //   redirect: '/profile/basic',
-      //   meta: { title: '璇︽儏椤�', icon: 'profile', permission: [ 'profile' ] },
-      //   children: [
-      //     {
-      //       path: '/profile/basic',
-      //       name: 'ProfileBasic',
-      //       component: () => import('@/views/profile/basic/Index'),
-      //       meta: { title: '鍩虹璇︽儏椤�', permission: [ 'profile' ] }
-      //     },
-      //     {
-      //       path: '/profile/advanced',
-      //       name: 'ProfileAdvanced',
-      //       component: () => import('@/views/profile/advanced/Advanced'),
-      //       meta: { title: '楂樼骇璇︽儏椤�', permission: [ 'profile' ] }
-      //     }
-      //   ]
-      // },
-      //
-      // // result
-      // {
-      //   path: '/result',
-      //   name: 'result',
-      //   component: PageView,
-      //   redirect: '/result/success',
-      //   meta: { title: '缁撴灉椤�', icon: 'check-circle-o', permission: [ 'result' ] },
-      //   children: [
-      //     {
-      //       path: '/result/success',
-      //       name: 'ResultSuccess',
-      //       component: () => import(/* webpackChunkName: "result" */ '@/views/result/Success'),
-      //       meta: { title: '鎴愬姛', hiddenHeaderContent: true, permission: [ 'result' ] }
-      //     },
-      //     {
-      //       path: '/result/fail',
-      //       name: 'ResultFail',
-      //       component: () => import(/* webpackChunkName: "result" */ '@/views/result/Error'),
-      //       meta: { title: '澶辫触', hiddenHeaderContent: true, permission: [ 'result' ] }
-      //     }
-      //   ]
-      // },
-      //
-      // // Exception
-      // {
-      //   path: '/exception',
-      //   name: 'exception',
-      //   component: RouteView,
-      //   redirect: '/exception/403',
-      //   meta: { title: '寮傚父椤�', icon: 'warning', permission: [ 'exception' ] },
-      //   children: [
-      //     {
-      //       path: '/exception/403',
-      //       name: 'Exception403',
-      //       component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/403'),
-      //       meta: { title: '403', permission: [ 'exception' ] }
-      //     },
-      //     {
-      //       path: '/exception/404',
-      //       name: 'Exception404',
-      //       component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404'),
-      //       meta: { title: '404', permission: [ 'exception' ] }
-      //     },
-      //     {
-      //       path: '/exception/500',
-      //       name: 'Exception500',
-      //       component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/500'),
-      //       meta: { title: '500', permission: [ 'exception' ] }
-      //     }
-      //   ]
-      // },
-      //
-      // // account
-      // {
-      //   path: '/account',
-      //   component: RouteView,
-      //   name: 'account',
-      //   meta: { title: '涓汉椤�', icon: 'user', keepAlive: true, permission: [ 'user' ] },
-      //   children: [
-      //     {
-      //       path: '/account/center',
-      //       name: 'center',
-      //       component: () => import('@/views/account/center/Index'),
-      //       meta: { title: '涓汉涓績', keepAlive: true, permission: [ 'user' ] }
-      //     },
-      //     {
-      //       path: '/account/settings',
-      //       name: 'settings',
-      //       component: () => import('@/views/account/settings/Index'),
-      //       meta: { title: '涓汉璁剧疆', hideHeader: true, keepAlive: true, permission: [ 'user' ]  },
-      //       redirect: '/account/settings/base',
-      //       alwaysShow: true,
-      //       children: [
-      //         {
-      //           path: '/account/settings/base',
-      //           name: 'BaseSettings',
-      //           component: () => import('@/views/account/settings/BaseSetting'),
-      //           meta: { title: '鍩烘湰璁剧疆', hidden: true, keepAlive: true, permission: [ 'user' ]  }
-      //         },
-      //         {
-      //           path: '/account/settings/security',
-      //           name: 'SecuritySettings',
-      //           component: () => import('@/views/account/settings/Security'),
-      //           meta: { title: '瀹夊叏璁剧疆', hidden: true, keepAlive: true, permission: [ 'user' ]  }
-      //         },
-      //         {
-      //           path: '/account/settings/custom',
-      //           name: 'CustomSettings',
-      //           component: () => import('@/views/account/settings/Custom'),
-      //           meta: { title: '涓�у寲璁剧疆', hidden: true, keepAlive: true, permission: [ 'user' ]  }
-      //         },
-      //         {
-      //           path: '/account/settings/binding',
-      //           name: 'BindingSettings',
-      //           component: () => import('@/views/account/settings/Binding'),
-      //           meta: { title: '璐︽埛缁戝畾', hidden: true, keepAlive: true, permission: [ 'user' ]  }
-      //         },
-      //         {
-      //           path: '/account/settings/notification',
-      //           name: 'NotificationSettings',
-      //           component: () => import('@/views/account/settings/Notification'),
-      //           meta: { title: '鏂版秷鎭�氱煡', hidden: true, keepAlive: true, permission: [ 'user' ]  }
-      //         },
-      //       ]
-      //     },
-      //   ]
-      // }
-    ]
+    children: []
   },
   {
     path: '*', redirect: '/404', hidden: true
@@ -321,30 +52,6 @@
       }
     ]
   },
-
-  // {
-  //   path: '/',
-  //   name: 'index',
-  //   component: TabLayout,
-  //   meta: {title: '棣栭〉'},
-  //   redirect: '/dashboard/workplace',
-  //   children: [
-  //     {
-  //       path: '/online',
-  //       name: 'online',
-  //       redirect: '/online',
-  //       component: RouteView,
-  //       meta: {title: '鍦ㄧ嚎寮�鍙�', icon: 'dashboard', permission: ['dashboard']},
-  //       children: [
-  //         {
-  //           path: '/online/auto/:code',
-  //           name: 'report',
-  //           component: () => import('@/views/modules/online/cgreport/OnlCgreportAutoList')
-  //         },
-  //       ]
-  //     },
-  //   ]
-  // },
 
   {
     // OAuth2 APP椤甸潰璺敱
diff --git a/src/views/eam/base/EamMaintenanceStandardList.vue b/src/views/eam/base/EamMaintenanceStandardList.vue
index 04196b6..440ec2e 100644
--- a/src/views/eam/base/EamMaintenanceStandardList.vue
+++ b/src/views/eam/base/EamMaintenanceStandardList.vue
@@ -104,19 +104,22 @@
         :customRow='clickThenSelect'
         @change="handleTableChange">
         <span slot="action" slot-scope="text, record">
-          <a v-if="record.standardStatus === 'WAIT_SUBMIT'" @click.stop="handleEdit(record)">缂栬緫</a>
-
-          <template v-if="record.standardStatus === 'START'">
-             <a-divider type="vertical"/>
-
-             <a @click.stop="handleUpgrade(record)">鍗囩増</a>
-          </template>
+          <a v-if="record.standardStatus === 'START'" @click.stop="handleUpgrade(record)">鍗囩増</a>
 
           <template v-if="record.standardStatus === 'WAIT_SUBMIT'">
-             <a-divider type="vertical"/>
+              <a @click.stop="handleEdit(record)">缂栬緫</a>
+
+              <a-divider type="vertical"/>
+
+              <a-popconfirm title="纭畾鍙戣捣娴佺▼鍚�?" @confirm="() => startProcess(record.id)">
+                  <a @click.stop="event=>event.stopPropagation()">鍙戣捣娴佺▼</a>
+              </a-popconfirm>
+
+
+              <a-divider type="vertical"/>
 
               <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
-                  <a @click="event=>event.stopPropagation()">鍒犻櫎</a>
+                  <a @click.stop="event=>event.stopPropagation()">鍒犻櫎</a>
               </a-popconfirm>
           </template>
         </span>
@@ -125,7 +128,8 @@
       <a-tabs defaultActiveKey="1">
         <a-tab-pane tab='淇濆吇鏍囧噯鏄庣粏椤�' key="1">
           <div class="table-operator" style="margin:-16px">
-            <eam-maintenance-standard-detail-list ref="standardDetailRef" :standardId="standardId"/>
+            <eam-maintenance-standard-detail-list ref="standardDetailRef" :standardId="standardId"
+                                                  :selectionRows="selectionRows"/>
           </div>
         </a-tab-pane>
 
@@ -143,7 +147,7 @@
   import EamMaintenanceStandardModal from './modules/EamMaintenanceStandardModal'
   import { JeecgListMixin } from '@/mixins/JeecgListMixin'
   import EamMaintenanceStandardDetailList from '@views/eam/base/modules/EamMaintenanceStandardDetailList'
-  import { deleteAction, templateXlsDownload } from '@api/manage'
+  import { deleteAction, getAction, templateXlsDownload } from '@api/manage'
   import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
 
 
@@ -233,6 +237,7 @@
           list: '/eam/maintenanceStandard/list',
           delete: '/eam/maintenanceStandard/delete',
           deleteBatch: '/eam/maintenanceStandard/deleteBatch',
+          startProcess: '/eam/maintenanceStandard/saveEamMaintenanceStandardProcess',
           exportXlsUrl: 'eam/maintenanceStandard/exportXls',
           inspectionImportExcel: 'eam/maintenanceStandard/inspectionImportExcel',
           weekMaintenanceImportExcel: 'eam/maintenanceStandard/weekMaintenanceImportExcel',
@@ -241,8 +246,7 @@
           inspectionXlsDownloadUrl: '瀵煎叆妯℃澘/鐐规鏍囧噯瀵煎叆妯℃澘_v1.0.xlsx',
           weekMaintenanceXlsDownloadUrl: '瀵煎叆妯℃澘/鍛ㄤ繚鏍囧噯瀵煎叆妯℃澘_v1.0.xlsx',
           secondMaintenanceXlsDownloadUrl: '瀵煎叆妯℃澘/浜屼繚鏍囧噯瀵煎叆妯℃澘_v1.0.xlsx',
-          thirdMaintenanceXlsDownloadUrl: '瀵煎叆妯℃澘/涓変繚鏍囧噯瀵煎叆妯℃澘_v1.0.xlsx',
-          abolish: '/eam/maintenanceStandard/abolish'
+          thirdMaintenanceXlsDownloadUrl: '瀵煎叆妯℃澘/涓変繚鏍囧噯瀵煎叆妯℃澘_v1.0.xlsx'
         },
         standardId: '-1'
       }
@@ -308,6 +312,33 @@
         templateXlsDownload(url)
       },
 
+      /**
+       * 鐐瑰嚮鍙戣捣娴佺▼瑙﹀彂
+       * @param id 鍒楄〃琛岃褰旾D
+       */
+      startProcess(id) {
+        this.loading = true
+        const that = this
+        getAction(this.url.startProcess, { id })
+          .then(res => {
+            if (res.success) {
+              that.$notification.success({
+                message: '娑堟伅',
+                description: res.message
+              })
+              that.loadData()
+            } else {
+              that.$notification.warning({
+                message: '娑堟伅',
+                description: res.message
+              })
+            }
+          })
+          .finally(() => {
+            that.loading = false
+          })
+      },
+
       handleUpgrade(record) {
         //鍗囩増
         this.$refs.modalForm.upgrade(record)
diff --git a/src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue b/src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue
index ea3c9f1..507d728 100644
--- a/src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue
+++ b/src/views/eam/base/modules/EamMaintenanceStandardDetailList.vue
@@ -33,7 +33,8 @@
         type: String,
         required: true,
         default: '-1'
-      }
+      },
+      selectionRows:{}
     },
     data() {
       return {
diff --git a/src/views/eam/base/modules/EamMaintenanceStandardModal.vue b/src/views/eam/base/modules/EamMaintenanceStandardModal.vue
index 0ece138..3ac6bc5 100644
--- a/src/views/eam/base/modules/EamMaintenanceStandardModal.vue
+++ b/src/views/eam/base/modules/EamMaintenanceStandardModal.vue
@@ -85,16 +85,16 @@
             :columns="detail.columns"
             style="margin-top: 8px;">
             <template v-slot:itemPart="props">
-              <a-textarea v-model="props.row.itemPart" allowClear @change="$refs.editableDetailTable.validateTable()"
-                          :placeholder="model.maintenanceCategory!='THIRD_MAINTENANCE'?'浠呬笁淇濋渶瑕佺淮鎶�':'璇疯緭鍏ラ儴浣�'" :rows="1"
-                          autoSize :disabled="model.maintenanceCategory!='THIRD_MAINTENANCE'"/>
+              <a-textarea v-model="props.row.itemPart" allowClear @blur="$refs.editableDetailTable.validateTable()"
+                          :placeholder="!Boolean(model.maintenanceCategory)?'璇烽�夋嫨淇濆吇鍒嗙被':'璇疯緭鍏ラ儴浣�'" :rows="1"
+                          autoSize :disabled="!Boolean(model.maintenanceCategory)"/>
             </template>
 
             <template v-slot:itemCategory="props">
               <j-dict-select-tag v-model="props.row.itemCategory" :dict-code="encodedDictCode"
                                  @change="$refs.editableDetailTable.validateTable()"
-                                 :placeholder="getItemCategoryPlaceholder"
-                                 :disabled="!Boolean(model.maintenanceCategory)||model.maintenanceCategory=='THIRD_MAINTENANCE'"/>
+                                 :placeholder="!Boolean(model.maintenanceCategory)?'璇烽�夋嫨淇濆吇鍒嗙被':'璇烽�夋嫨椤逛繚鍏诲垎绫�'"
+                                 :disabled="!Boolean(model.maintenanceCategory)"/>
             </template>
           </j-vxe-table>
         </a-row>
@@ -219,6 +219,67 @@
               ]
             }
           ],
+          defaultColumns: [
+            {
+              title: 'ID',
+              key: 'id',
+              type: JVXETypes.hidden
+            },
+            {
+              title: 'standardId',
+              key: 'standardId',
+              type: JVXETypes.hidden
+            },
+            {
+              title: '椤圭洰搴忓彿',
+              key: 'itemCode',
+              type: JVXETypes.inputNumber,
+              align: 'center',
+              placeholder: '璇疯緭鍏ラ」鐩簭鍙�',
+              width: 150,
+              validateRules: [
+                { required: true, message: '璇疯緭鍏ラ」鐩簭鍙�' },
+                { unique: true, message: '椤圭洰搴忓彿涓嶈兘閲嶅' }
+              ]
+            },
+            {
+              title: '閮ㄤ綅',
+              key: 'itemPart',
+              type: JVXETypes.slot,
+              slotName: 'itemPart',
+              placeholder: '璇疯緭鍏ラ儴浣�',
+              align: 'center',
+              validateRules: [{ handler: this.itemPartValidate }]
+            },
+            {
+              title: '淇濆吇椤瑰垎绫�',
+              key: 'itemCategory',
+              type: JVXETypes.slot,
+              slotName: 'itemCategory',
+              align: 'center',
+              validateRules: [{ handler: this.itemCategoryValidate }]
+            },
+            {
+              title: '淇濆吇椤圭洰',
+              key: 'itemName',
+              placeholder: '璇疯緭鍏ヤ繚鍏婚」鐩�',
+              type: JVXETypes.textarea,
+              align: 'center',
+              validateRules: [
+                { required: true, message: '璇疯緭鍏ヤ繚鍏婚」鐩�' }
+              ]
+            },
+            {
+              title: '淇濆吇瑙勮寖鎴栬姹�',
+              key: 'itemDemand',
+              placeholder: '璇疯緭鍏ヤ繚鍏昏鑼冩垨瑕佹眰',
+              type: JVXETypes.textarea,
+              align: 'center',
+              validateRules: [
+                { required: true, message: '璇疯緭鍏ヤ繚鍏昏鑼冩垨瑕佹眰' }
+              ]
+            }
+          ],
           toolbarConfig: {
             // prefix 鍓嶇紑锛泂uffix 鍚庣紑
             slot: ['prefix', 'suffix'],
@@ -228,15 +289,19 @@
         }
       }
     },
-    computed: {
-      getItemCategoryPlaceholder() {
-        if (!Boolean(this.model.maintenanceCategory)) return '璇烽�夋嫨淇濆吇鍒嗙被'
-        else {
-          if (this.model.maintenanceCategory != 'THIRD_MAINTENANCE') return '璇烽�夋嫨淇濆吇椤瑰垎绫�'
-          else return '涓変繚鏃犻渶缁存姢'
-        }
-      },
 
+    watch: {
+      'model.maintenanceCategory': {
+        handler(val) {
+          if (val) {
+            if (val != 'THIRD_MAINTENANCE') this.detail.columns = [...this.detail.defaultColumns.filter(item => item.key != 'itemPart')]
+            else this.detail.columns = [...this.detail.defaultColumns.filter(item => item.key != 'itemCategory')]
+          }
+          else this.detail.columns = [...this.detail.defaultColumns]
+        }
+      }
+    },
+    computed: {
       encodedDictCode() {
         let suffix
         if (!Boolean(this.model.maintenanceCategory) || this.model.maintenanceCategory === 'THIRD_MAINTENANCE') return
@@ -247,6 +312,7 @@
       }
     },
     methods: {
+      // 涓婚〉闈㈢偣鍑绘柊澧炲悗瑙﹀彂
       add() {
         this.model = {}
         this.visible = true
@@ -255,6 +321,10 @@
         this.detail.dataSource = []
       },
 
+      /**
+       * 涓婚〉闈㈢偣鍑荤紪杈戝悗瑙﹀彂
+       * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍
+       */
       edit(record) {
         this.model = Object.assign({}, record)
         this.visible = true
@@ -264,6 +334,10 @@
         this.loadDetail(record.id)
       },
 
+      /**
+       * 鐐瑰嚮鍗囩増鍚庤Е鍙�
+       * @param record 涓婚〉闈㈠垪琛ㄨ璁板綍
+       */
       upgrade(record) {
         this.model = Object.assign({}, record)
         this.visible = true
@@ -297,8 +371,9 @@
           if (value !== 'THIRD_MAINTENANCE') delete item.itemPart
           delete item.itemCategory
         })
+
         this.detail.dataSource = [...tableData]
-        console.log('tableData', tableData)
+        this.$refs.editableDetailTable.validateTable()
       },
 
       /**
@@ -419,5 +494,6 @@
 
   /deep/ textarea.ant-input {
     resize: none;
+    margin-bottom: 0;
   }
 </style>
\ No newline at end of file
diff --git a/src/views/flowable/workflow/FlowTodo.vue b/src/views/flowable/workflow/FlowTodo.vue
index 81fec72..e29eaf4 100644
--- a/src/views/flowable/workflow/FlowTodo.vue
+++ b/src/views/flowable/workflow/FlowTodo.vue
@@ -7,17 +7,9 @@
   <a-card :bordered='false'>
     <!-- 鏌ヨ鍖哄煙 -->
     <div class='table-page-search-wrapper'>
-      <a-form
-        layout='inline'
-        @keyup.enter.native='searchQuery'
-      >
+      <a-form layout='inline' @keyup.enter.native='searchQuery'>
         <a-row :gutter='24'>
-          <a-col
-            :lg='6'
-            :md='8'
-            :sm='24'
-            :xl='4'
-          >
+          <a-col :lg='6' :md='8' :sm='24' :xl='4'>
             <a-form-item label='娴佺▼鍒嗙被'>
               <j-dict-select-tag
                 v-model='queryParam.category'
@@ -26,17 +18,7 @@
               ></j-dict-select-tag>
             </a-form-item>
           </a-col>
-          <!--<a-col :xl="4" :lg="6" :md="8" :sm="24">-->
-          <!--<a-form-item label="娴佺▼鍚嶇О">-->
-          <!--<a-input placeholder="璇疯緭鍏ユ祦绋嬪悕绉�" v-model="queryParam.flowName"></a-input>-->
-          <!--</a-form-item>-->
-          <!--</a-col>-->
-          <a-col
-            :lg='6'
-            :md='8'
-            :sm='24'
-            :xl='4'
-          >
+          <a-col :lg='6' :md='8' :sm='24' :xl='4'>
             <a-form-item label='褰撳墠鑺傜偣'>
               <a-input
                 v-model='queryParam.name'
@@ -44,12 +26,7 @@
               ></a-input>
             </a-form-item>
           </a-col>
-          <a-col
-            :lg='6'
-            :md='8'
-            :sm='24'
-            :xl='4'
-          >
+          <a-col :lg='6' :md='8' :sm='24' :xl='4'>
             <a-form-item label='绠�瑕佹弿杩�'>
               <a-input
                 v-model='queryParam.title'
@@ -57,60 +34,20 @@
               ></a-input>
             </a-form-item>
           </a-col>
-          <template v-if='toggleSearchStatus'>
-            <a-col
-              :lg='8'
-              :md='12'
-              :sm='24'
-              :xl='8'
-            >
-              <a-form-item label='浠诲姟鏃堕棿鑼冨洿'>
-                <j-date
-                  v-model='queryParam.startTime'
-                  :show-time='false'
-                  class='query-group-cust'
-                  date-format='YYYY-MM-DD HH:mm:ss'
-                  placeholder='璇烽�夋嫨寮�濮嬫椂闂�'
-                ></j-date>
-                <span class='query-group-split-cust'></span>
-                <j-date
-                  v-model='queryParam.endTime'
-                  :show-time='false'
-                  class='query-group-cust'
-                  date-format='YYYY-MM-DD HH:mm:ss'
-                  placeholder='璇烽�夋嫨缁撴潫鏃堕棿'
-                ></j-date>
-              </a-form-item>
-            </a-col>
-          </template>
+          <a-col :lg='8' :md='12' :sm='24' :xl='8'>
+            <a-form-item label='浠诲姟鏃堕棿鑼冨洿'>
+              <j-date v-model='queryParam.startTime' :show-time='false' class='query-group-cust'
+                      date-format='YYYY-MM-DD HH:mm:ss' placeholder='璇烽�夋嫨寮�濮嬫椂闂�'></j-date>
+              <span class='query-group-split-cust'></span>
+              <j-date v-model='queryParam.endTime' :show-time='false' class='query-group-cust'
+                      date-format='YYYY-MM-DD HH:mm:ss' placeholder='璇烽�夋嫨缁撴潫鏃堕棿'></j-date>
+            </a-form-item>
+          </a-col>
 
-          <a-col
-            :lg='6'
-            :md='8'
-            :sm='24'
-            :xl='4'
-          >
-            <span
-              class='table-page-search-submitButtons'
-              style='float: left;overflow: hidden;'
-            >
-              <a-button
-                icon='search'
-                type='primary'
-                @click='searchQuery'
-              >鏌ヨ</a-button>
-              <a-button
-                icon='reload'
-                style='margin-left: 8px'
-                @click='searchReset'
-              >閲嶇疆</a-button>
-              <a
-                style='margin-left: 8px'
-                @click='handleToggleSearch'
-              >
-                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
-                <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
-              </a>
+          <a-col :lg='6' :md='8' :sm='24' :xl='4'>
+            <span class='table-page-search-submitButtons' style='float: left;overflow: hidden;'>
+              <a-button icon='search' type='primary' @click='searchQuery'>鏌ヨ</a-button>
+              <a-button icon='reload' style='margin-left: 8px' @click='searchReset'>閲嶇疆</a-button>
             </span>
           </a-col>
         </a-row>
@@ -122,462 +59,262 @@
     <div class='table-operator'>
       <a-dropdown v-if='selectedRowKeys.length > 0 '>
         <a-menu slot='overlay'>
-          <a-menu-item
-            key='1'
-            @click='batchHandle'
-          >
-            <a-icon type='delete' />
+          <a-menu-item key='1' @click='batchHandle'>
+            <a-icon type='delete'/>
             鎵归噺澶勭悊
           </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;'
-      >
+      <div class='ant-alert ant-alert-info' style='margin-bottom: 16px;'>
         <i class='anticon anticon-info-circle ant-alert-icon'></i>宸查�夋嫨&nbsp;<a style='font-weight: 600'>{{
-          selectedRowKeys.length }}</a>椤�&nbsp;&nbsp;
-        <a
-          style='margin-left: 24px'
-          @click='onClearSelected'
-        >娓呯┖</a>
+        selectedRowKeys.length }}</a>椤�&nbsp;&nbsp;
+        <a style='margin-left: 24px' @click='onClearSelected'>娓呯┖</a>
       </div>
 
-      <a-table
-        ref='table'
-        :columns='columns'
-        :dataSource='dataSource'
-        :loading='loading'
-        :pagination='ipagination'
-        :rowSelection='{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}'
-        :scroll='{x:getTableColumnsTotalWidth,y:465}'
-        bordered
-        rowKey='id'
-        size='middle'
-        @change='handleTableChange'
-      >
-
-        <span
-          slot='action'
-          slot-scope='text, record'
-        >
+      <a-table ref='table' :columns='columns' :dataSource='dataSource' :loading='loading' :pagination='ipagination'
+               :rowSelection='{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}'
+               :scroll='{x:getTableColumnsTotalWidth,y:465}' bordered rowKey='id' size='middle'
+               @change='handleTableChange'>
+        <span slot='action' slot-scope='text, record'>
           <a @click='handelDetail(record,text)'>鎵ц/瀹℃壒</a>
         </span>
-
       </a-table>
     </div>
+
+    <maintenance-standard-approval-modal ref="maintenanceStandardApprovalModal" @modalFormOk="modalFormOk"
+                                         :selectShenpiData="selectedRowData"/>
   </a-card>
 </template>
 
 <script>
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import { getAction } from '@api/manage'
+  import MaintenanceStandardApprovalModal from './MaintenanceStandard/MaintenanceStandardApprovalModal'
 
-import '@/assets/less/TableExpand.less'
-import { mixinDevice } from '@/utils/mixin'
-import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-import JDictSelectTag from '@/components/dict/JDictSelectTag.vue'
-import { getAction } from '@api/manage'
-export default {
-  name: 'NcDeviceCharactersList',
-  mixins: [JeecgListMixin, mixinDevice],
-  components: {
-    JDictSelectTag,
-  },
-  data() {
-    return {
-      description: '宸ヤ綔娴�-鎴戠殑寰呭姙',
-      // 琛ㄥご
-      columns: [
-        {
-          title: '搴忓彿',
-          dataIndex: '',
-          key: 'rowIndex',
-          width: 60,
-          align: 'center',
-          customRender: function (t, r, index) {
-            return parseInt(index) + 1
+  export default {
+    name: 'NcDeviceCharactersList',
+    mixins: [JeecgListMixin, mixinDevice],
+    components: { MaintenanceStandardApprovalModal },
+    data() {
+      return {
+        description: '宸ヤ綔娴�-鎴戠殑寰呭姙',
+        // 琛ㄥご
+        columns: [
+          {
+            title: '搴忓彿',
+            dataIndex: '',
+            key: 'rowIndex',
+            width: 60,
+            align: 'center',
+            customRender: function(t, r, index) {
+              return parseInt(index) + 1
+            }
+          },
+          {
+            title: '娴佺▼鍒嗙被',
+            align: 'center',
+            dataIndex: 'category_dictText',
+            width: 150
+          },
+          {
+            title: '娴佺▼鍚嶇О',
+            align: 'center',
+            dataIndex: 'flowName',
+            width: 200
+          },
+          {
+            title: '娴佺▼涓氬姟绠�瑕佹弿杩�',
+            align: 'center',
+            dataIndex: 'description',
+            ellipsis: true
+          },
+          {
+            title: '涓婁竴姝ュ鐞嗕汉',
+            align: 'center',
+            dataIndex: 'preNodeAssignee_dictText',
+            width: 150
+          },
+          {
+            title: '鍓嶉┍鑺傜偣',
+            align: 'center',
+            dataIndex: 'preNode',
+            width: 200
+          },
+          {
+            title: '褰撳墠鑺傜偣',
+            align: 'center',
+            dataIndex: 'name',
+            width: 200
+          },
+          {
+            title: '褰撳墠鑺傜偣寮�濮嬫椂闂�',
+            align: 'center',
+            dataIndex: 'createTime',
+            width: 150
+          },
+          {
+            title: '鎿嶄綔',
+            dataIndex: 'action',
+            scopedSlots: { customRender: 'action' },
+            align: 'center',
+            width: 150,
+            fixed: 'right'
           }
+        ],
+        url: {
+          list: '/assign/flow/toTaskBySelf'
         },
-        {
-          title: '娴佺▼鍒嗙被',
-          align: 'center',
-          dataIndex: 'category_dictText',
-          width: 100
-        },
-        {
-          title: '娴佺▼鍚嶇О',
-          align: 'center',
-          dataIndex: 'flowName',
-          width: 200
-        },
-        {
-          title: '娴佺▼涓氬姟绠�瑕佹弿杩�',
-          align: 'center',
-          dataIndex: 'description',
-          width: 350,
-          ellipsis: true
-
-        },
-        {
-          title: '涓婁竴姝ュ鐞嗕汉',
-          align: 'center',
-          dataIndex: 'preNodeAssignee_dictText',
-          width: 150
-        },
-        {
-          title: '鍓嶉┍鑺傜偣',
-          align: 'center',
-          dataIndex: 'preNode',
-          width: 200
-        },
-        {
-          title: '褰撳墠鑺傜偣',
-          align: 'center',
-          dataIndex: 'name',
-          width: 200
-        },
-        {
-          title: '褰撳墠鑺傜偣寮�濮嬫椂闂�',
-          align: 'center',
-          dataIndex: 'createTime',
-          width: 200
-        },
-        {
-          title: '鎿嶄綔',
-          dataIndex: 'action',
-          scopedSlots: { customRender: 'action' },
-          align: 'center',
-          width: 150,
-          fixed: 'right'
-        }
-      ],
-      url: {
-        list: '/assign/flow/toTaskBySelf',
-        isSameNode: '/assign/flow/isSameNode'
+        selectedRowData: {},
+        selectInspectionOrderData: {},
+        selectWeekMaintenanceData: {},
+        selectSecondMaintenanceData: {},
+        selectThirdMaintenanceData: {},
+        selectRepairOrderData: {}
+      }
+    },
+    computed: {
+      importExcelUrl: function() {
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
       },
-      dictOptions: {},
-      selectShenpiData: {},
-      selectDispatchFileXqData: {},
-      selectInspectionOrderData: {},
-      selectWeekMaintenanceData: {},
-      selectSecondMaintenanceData: {},
-      selectThirdMaintenanceData: {},
-      selectBachData: {},
-      selectRepairOrderData: {},
-      selectOutBoundOrderData: {},
-      selectLossBoundOrderData: {},
-      selectStocktakingBoundOrderData: {},
-      selectInboundOrderData: {},
-      selectSparePartApplyData: {},
-      selectGuideCardData:{},
-      selectEquipmentAssignProductData:{},
-      selectEquipmentSealUpData:{},
-      //涓氬姟淇℃伅ID
-      dataId: undefined
-    }
-  },
-  created() {
-  },
-  computed: {
-    importExcelUrl: function () {
-      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+      getTableColumnsTotalWidth() {
+        return this.columns.reduce((total, item) => total + item.width, 0)
+      }
     },
-    getTableColumnsTotalWidth() {
-      return this.columns.reduce((total, item) => total + item.width, 0)
-    }
-  },
-  methods: {
-    loadData(arg) {
-      if (!this.url.list) {
-        this.$message.error('璇疯缃畊rl.list灞炴��!')
-        return
-      }
-      //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
-      if (arg === 1) {
-        this.ipagination.current = 1
-      }
-      var params = this.getQueryParams()//鏌ヨ鏉′欢
-      if (!params) {
-        return false
-      }
-      this.loading = true
-      getAction(this.url.list, params).then((res) => {
-        if (res.success) {
-          // console.log(res)
-          //update-begin---author:zhangyafei    Date:20201118  for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------
-          this.dataSource = res.result.records || res.result
-          if (res.result.total) {
-            this.ipagination.total = res.result.total
-          } else {
-            this.ipagination.total = 0
-          }
-          if (this.selectedRowKeys.length > 0) this.selectedRowKeys = this.selectionRows = []
-          //update-end---author:zhangyafei    Date:20201118  for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------
-        } else {
-          this.$message.warning(res.message)
+    methods: {
+      handelDetail(item, index) {
+        let processType = this.splitProcessType(item.category)
+        console.log('processType', processType)
+        switch (processType) {
+          case 'maintenance_standard':
+            this.handleMaintenanceStandard(item)
+            break
+          case 'sbdjApproval':
+            this.handInspectionOrder(item)
+            break
+          case 'WEEK_MAINTENANCE':
+            this.handleWeekMaintenance(item)
+            break
+          case 'eam_repair':
+            this.handleRepairOrder(item)
+            break
+          case 'second_maintenance':
+            this.handleSecondMaintenance(item)
+            break
+          case 'third_maintenance':
+            this.handleThirdMaintenance(item)
+            break
+          case 'toolOutStorageApproval':
+            this.handleToolOutStorageApproval(item)
+            break
+          case 'toolsStocktakingBound':
+            this.handleToolStocktakingApproval(item)
+            break
+          case 'toolsLossApproval':
+            this.handleToolLossApproval(item)
+            break
+          default:
+            alert('娌℃壘鍒拌娴佺▼')
         }
-      }).finally(() => {
-        this.loading = false
-      })
-    },
+      },
 
-    handelDetail(item, index) {
-      console.log('鐐瑰嚮浜嗚鎯�')
-      console.log('item----->', item)
-      console.log('index----->', index)
-      let processType = this.splitAprocessType(item.category)
-      console.log('processType--->', processType)
-      switch (processType) {
-        case 'drApproval':
-          this.handDrDetial(item)
-          break
-        case 'ggApproval':
-          this.handDispatchFileDetial(item)
-          break
-        case 'ncFileSettingProcessApproval':
-          this.handStandardizedDetial(item)
-          break
-        case 'sbdjApproval':
-          this.handInspectionOrder(item)
-          break
-        case 'WEEK_MAINTENANCE':
-          this.handleWeekMaintenance(item)
-          break
-        case 'eam_repair':
-          this.handleRepairOrder(item)
-          break
-        case 'equipment_lean_out':
-          this.handleEquipmentLeanOut(item)
-          break
-        case 'second_maintenance':
-          this.handleSecondMaintenance(item)
-          break
-        case 'third_maintenance':
-          this.handleThirdMaintenance(item)
-          break
-        case 'toolOutStorageApproval':
-          this.handleToolOutStorageApproval(item)
-          break
-        case 'toolsStocktakingBound':
-          this.handleToolStocktakingApproval(item)
-          break
-        case 'toolsLossApproval':
-          this.handleToolLossApproval(item)
-          break
-        case 'equipment_seal_up':
-          this.handleEquipmentSealUp(item)
-          break
-        case 'toolInStorageApproval':
-          this.handleToolInStorage(item)
-          break
-        case 'equipment_transfer':
-          this.handleEquipmentTransfer(item)
-          break
-        case 'equipment_scrap':
-          this.handleEquipmentScrap(item)
-          break
-        case 'spare_part_apply':
-          this.handleSparePartApplyApproval(item)
-          break
-        case 'programConfirmApproval':
-          this.handleGuideCardApproval(item)
-          break
-        case 'equipmentAssignProductApproval':
-          this.handleEquipmentAssignProductApproval(item)
-          break
-        default:
-          alert('娌℃壘鍒拌娴佺▼')
-      }
-    },
+      handleMaintenanceStandard(record) {
+        console.log('this.$refs.maintenanceStandardApprovalModal.', this.$refs.maintenanceStandardApprovalModal)
+        this.selectedRowData = Object.assign({}, record)
+        this.$refs.maintenanceStandardApprovalModal.visible = true
+        this.$refs.maintenanceStandardApprovalModal.title = '淇濆吇瑙勮寖'
+        this.$refs.maintenanceStandardApprovalModal.getAllApproveData(record)
+        this.$refs.maintenanceStandardApprovalModal.getBasicInformation(record)
+      },
 
-    batchHandle() {
-      const categorySet = new Set(this.selectionRows.map(item => item.category))
-      const nameSet = new Set(this.selectionRows.map(item => item.name))
-      if (categorySet.size !== 1 || nameSet.size !== 1) {
-        this.$notification.info({
-          message: '娑堟伅',
-          description: '璇烽�夋嫨鍚屼竴娴佺▼鍒嗙被涓嬬殑鍚屼竴褰撳墠鑺傜偣'
-        })
-        return
-      }
+      batchHandle() {
+        const categorySet = new Set(this.selectionRows.map(item => item.category))
+        const nameSet = new Set(this.selectionRows.map(item => item.name))
+        if (categorySet.size !== 1 || nameSet.size !== 1) {
+          this.$notification.info({
+            message: '娑堟伅',
+            description: '璇烽�夋嫨鍚屼竴娴佺▼鍒嗙被涓嬬殑鍚屼竴褰撳墠鑺傜偣'
+          })
+          return
+        }
 
-      if (categorySet.has('eam_repair')) {
-        this.$notification.info({
-          message: '娑堟伅',
-          description: '璁惧缁翠慨娴佺▼鏃犳硶鎵归噺澶勭悊'
-        })
-        return
-      }
+        if (categorySet.has('eam_repair')) {
+          this.$notification.info({
+            message: '娑堟伅',
+            description: '璁惧缁翠慨娴佺▼鏃犳硶鎵归噺澶勭悊'
+          })
+          return
+        }
 
-      if (categorySet.has('sbdjApproval')) {
-        this.$refs.inspectionOrderBatchHandleRef.visible = true
-        this.$refs.inspectionOrderBatchHandleRef.title = this.selectionRows[0].name
-        this.$refs.inspectionOrderBatchHandleRef.getAllApproveData(this.selectionRows[0])
-        this.$refs.inspectionOrderBatchHandleRef.getBasicInformation(this.selectionRows[0])
-      } else if (categorySet.has('WEEK_MAINTENANCE')) {
-        this.$refs.weenMaintenanceBatchApprovalModalRef.handleDetail(this.selectionRows[0])
-        this.$refs.weenMaintenanceBatchApprovalModalRef.title = this.selectionRows[0].name
-      }
-    },
+        if (categorySet.has('sbdjApproval')) {
+          this.$refs.inspectionOrderBatchHandleRef.visible = true
+          this.$refs.inspectionOrderBatchHandleRef.title = this.selectionRows[0].name
+          this.$refs.inspectionOrderBatchHandleRef.getAllApproveData(this.selectionRows[0])
+          this.$refs.inspectionOrderBatchHandleRef.getBasicInformation(this.selectionRows[0])
+        } else if (categorySet.has('WEEK_MAINTENANCE')) {
+          this.$refs.weenMaintenanceBatchApprovalModalRef.handleDetail(this.selectionRows[0])
+          this.$refs.weenMaintenanceBatchApprovalModalRef.title = this.selectionRows[0].name
+        }
+      },
 
-    splitAprocessType(title) {
-      let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊
-      let result = parts[0]
-      return result
-    },
-    //DNC-鎸囨淳NC绋嬪簭鑷宠澶�
-    handDrDetial(item) {
-      this.selectShenpiData = item
-      this.$refs.modalFormApproval.clearTableSource()
-      this.$refs.modalFormApproval.getAllApproveData(item)
-    },
-    //DNC-NC绋嬪簭绛炬淳
-    handDispatchFileDetial(item) {
-      console.log('item----->', item)
-      this.selectDispatchFileXqData = item
-      this.$refs.modalFormDispatchFileXq.clearTableSource()
-      this.$refs.modalFormDispatchFileXq.getAllApproveData(item)
-    },
-    //DNC-瀹氬瀷瀹℃壒椤甸潰
-    handStandardizedDetial(item){
-      this.selectDispatchFileXqData = item
-      this.$refs.StandardizedProcessHandle.clearTableSource()
-      this.$refs.StandardizedProcessHandle.getAllApproveData(item)
-    },
+      splitProcessType(title) {
+        let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊
+        let result = parts[0]
+        return result
+      },
 
-    handInspectionOrder(record) {
-      console.log('record----->', record)
-      this.selectInspectionOrderData = Object.assign({}, record)
-      this.$refs.modalFormInspectionOrder.visible = true
-      this.$refs.modalFormInspectionOrder.title = record.name
-      this.$refs.modalFormInspectionOrder.getAllApproveData(record)
-      this.$refs.modalFormInspectionOrder.getBasicInformation(record)
-    },
+      handInspectionOrder(record) {
+        console.log('record----->', record)
+        this.selectInspectionOrderData = Object.assign({}, record)
+        this.$refs.modalFormInspectionOrder.visible = true
+        this.$refs.modalFormInspectionOrder.title = record.name
+        this.$refs.modalFormInspectionOrder.getAllApproveData(record)
+        this.$refs.modalFormInspectionOrder.getBasicInformation(record)
+      },
 
-    handleWeekMaintenance(item) {
-      if (item && item.dataId) {
-        this.selectWeekMaintenanceData = Object.assign({}, item)
-        this.$refs.weekMaintenanceApprovalModal.handleDetail(item)
-        this.$refs.weekMaintenanceApprovalModal.title = item.name
-        this.$refs.weekMaintenanceApprovalModal.disableSubmit = false
-      }
-    },
+      handleWeekMaintenance(item) {
+        if (item && item.dataId) {
+          this.selectWeekMaintenanceData = Object.assign({}, item)
+          this.$refs.weekMaintenanceApprovalModal.handleDetail(item)
+          this.$refs.weekMaintenanceApprovalModal.title = item.name
+          this.$refs.weekMaintenanceApprovalModal.disableSubmit = false
+        }
+      },
 
-    /**
-     * 鐐瑰嚮璁惧缁翠慨鍒嗙被娴佺▼璇︽儏鏃惰Е鍙�
-     * @param record
-     */
-    handleRepairOrder(record) {
-      this.selectRepairOrderData = Object.assign({}, record)
-      this.$refs.repairOrderApprovalModal.visible = true
-      this.$refs.repairOrderApprovalModal.title = record.name
-      this.$refs.repairOrderApprovalModal.getAllApproveData(record)
-      this.$refs.repairOrderApprovalModal.getBasicInformation(record)
-    },
-    handleEquipmentLeanOut(item) {
-      this.$refs.equipmentLeanOutApprovalModelRef.visible = true
-      this.$refs.equipmentLeanOutApprovalModelRef.title = item.name
-      this.$refs.equipmentLeanOutApprovalModelRef.handleDetail(item)
-      this.$refs.equipmentLeanOutApprovalModelRef.disableSubmit = false
-    },
-    handleSecondMaintenance(item) {
-      if (item && item.dataId) {
-        this.selectSecondMaintenanceData = Object.assign({}, item)
-        this.$refs.secondMaintenanceApprovalModal.handleDetail(item)
-        this.$refs.secondMaintenanceApprovalModal.title = item.name
-        this.$refs.secondMaintenanceApprovalModal.disableSubmit = false
+      /**
+       * 鐐瑰嚮璁惧缁翠慨鍒嗙被娴佺▼璇︽儏鏃惰Е鍙�
+       * @param record
+       */
+      handleRepairOrder(record) {
+        this.selectRepairOrderData = Object.assign({}, record)
+        this.$refs.repairOrderApprovalModal.visible = true
+        this.$refs.repairOrderApprovalModal.title = record.name
+        this.$refs.repairOrderApprovalModal.getAllApproveData(record)
+        this.$refs.repairOrderApprovalModal.getBasicInformation(record)
+      },
+      handleSecondMaintenance(item) {
+        if (item && item.dataId) {
+          this.selectSecondMaintenanceData = Object.assign({}, item)
+          this.$refs.secondMaintenanceApprovalModal.handleDetail(item)
+          this.$refs.secondMaintenanceApprovalModal.title = item.name
+          this.$refs.secondMaintenanceApprovalModal.disableSubmit = false
+        }
+      },
+      handleThirdMaintenance(item) {
+        if (item && item.dataId) {
+          this.selectThirdMaintenanceData = Object.assign({}, item)
+          this.$refs.thirdMaintenanceApprovalModal.handleDetail(item)
+          this.$refs.thirdMaintenanceApprovalModal.title = item.name
+          this.$refs.thirdMaintenanceApprovalModal.disableSubmit = false
+        }
       }
-    },
-    handleThirdMaintenance(item) {
-      if (item && item.dataId) {
-        this.selectThirdMaintenanceData = Object.assign({}, item)
-        this.$refs.thirdMaintenanceApprovalModal.handleDetail(item)
-        this.$refs.thirdMaintenanceApprovalModal.title = item.name
-        this.$refs.thirdMaintenanceApprovalModal.disableSubmit = false
-      }
-    },
-    handleToolOutStorageApproval(item) {
-      if (item && item.dataId) {
-        this.selectOutBoundOrderData = Object.assign({}, item)
-        this.$refs.outBoundOrderHandle.auditVisible = true
-        this.$refs.outBoundOrderHandle.clearTableSource()
-        this.$refs.outBoundOrderHandle.getAllApproveData(item)
-      }
-    },
-    handleToolStocktakingApproval(item) {
-      if (item && item.dataId) {
-        this.selectStocktakingBoundOrderData = Object.assign({}, item)
-        this.$refs.stocktakingBoundHandle.auditVisible = true
-        this.$refs.stocktakingBoundHandle.clearTableSource()
-        this.$refs.stocktakingBoundHandle.getAllApproveData(item)
-      }
-    },
-    handleToolLossApproval(item) {
-      if (item && item.dataId) {
-        this.selectLossBoundOrderData = Object.assign({}, item)
-        this.$refs.lossBoundHandle.auditVisible = true
-        this.$refs.lossBoundHandle.clearTableSource()
-        this.$refs.lossBoundHandle.getAllApproveData(item)
-      }
-    },
-
-    handleEquipmentSealUp(item) {
-      this.$refs.equipmentSealUpApprovalModelRef.visible = true
-      this.$refs.equipmentSealUpApprovalModelRef.title = item.name
-      this.$refs.equipmentSealUpApprovalModelRef.handleDetail(item)
-      this.$refs.equipmentSealUpApprovalModelRef.disableSubmit = false
-    },
-    handleToolInStorage(item) {
-      if (item && item.dataId) {
-        this.selectInboundOrderData = Object.assign({}, item)
-        this.$refs.inboundOrderApprovalModal.auditVisible = true
-        this.$refs.inboundOrderApprovalModal.clearTableSource()
-        this.$refs.inboundOrderApprovalModal.getAllApproveData(item)
-      }
-    },
-    handleEquipmentTransfer(item) {
-      this.$refs.equipmentTransferApprovalModelRef.visible = true
-      this.$refs.equipmentTransferApprovalModelRef.title = item.name
-      this.$refs.equipmentTransferApprovalModelRef.handleDetail(item)
-      this.$refs.equipmentTransferApprovalModelRef.disableSubmit = false
-    },
-    handleEquipmentScrap(item) {
-      this.$refs.equipmentScrapApprovalModelRef.visible = true
-      this.$refs.equipmentScrapApprovalModelRef.title = item.name
-      this.$refs.equipmentScrapApprovalModelRef.handleDetail(item)
-      this.$refs.equipmentScrapApprovalModelRef.disableSubmit = false
-    },
-    handleSparePartApplyApproval(item) {
-      if (item && item.dataId) {
-        this.selectSparePartApplyData = Object.assign({}, item)
-        this.$refs.sparePartApplyModal.auditVisible = true
-        this.$refs.sparePartApplyModal.clearTableSource()
-        this.$refs.sparePartApplyModal.getAllApproveData(item)
-      }
-    },
-    //DNC-绋嬪簭纭琛ㄦ祦绋�
-    handleGuideCardApproval(item) {
-      console.log('item----->', item)
-      this.selectGuideCardData = item
-      this.$refs.guideCardBatchHandle.clearTableSource()
-      this.$refs.guideCardBatchHandle.getAllApproveData(item)
-    },
-    //DNC-璁惧缁撴瀯鏍戞寚娲句骇鍝佺粨鏋勬爲
-    handleEquipmentAssignProductApproval(item){
-      console.log('item----->', item)
-      this.selectEquipmentSealUpData = item
-      this.$refs.assignEquipmentFileStreamHandle.clearTableSource()
-      this.$refs.assignEquipmentFileStreamHandle.getAllApproveData(item)
     }
   }
-}
-</script>
-<style scoped>
-@import '~@assets/less/common.less';
-</style>
\ No newline at end of file
+</script>
\ No newline at end of file
diff --git a/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue b/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue
new file mode 100644
index 0000000..b8e631e
--- /dev/null
+++ b/src/views/flowable/workflow/MaintenanceStandard/MaintenanceStandardApprovalModal.vue
@@ -0,0 +1,380 @@
+<template>
+  <j-modal :title="title" :visible="visible" fullscreen
+           :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" @ok="submitForm"
+           @cancel="handleCancel" :mask-closable="false" :confirmLoading="confirmLoading">
+    <a-spin :spinning="spinning">
+      <a-form-model ref='form' :model='tableRowRecord' :labelCol="labelCol" :wrapperCol="wrapperCol"
+                    :rules="validatorRules">
+        <a-row :gutter="48">
+          <a-col :span="10">
+            <a-tabs default-active-key="1">
+              <a-tab-pane tab="鍩虹淇℃伅" key="1">
+                <a-row>
+                  <a-col :span="span">
+                    <a-form-model-item prop="standardCode" label="瑙勮寖缂栫爜">
+                      <a-input v-model="tableRowRecord.standardCode" readOnly/>
+                    </a-form-model-item>
+                  </a-col>
+                  <a-col :span="span">
+                    <a-form-model-item prop="standardName" label="瑙勮寖鍚嶇О">
+                      <a-input v-model="tableRowRecord.standardName" readOnly/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+
+                <a-row>
+                  <a-col :span='span'>
+                    <a-form-model-item label="缁熶竴缂栫爜">
+                      <a-input v-model="tableRowRecord.equipmentCode" readOnly/>
+                    </a-form-model-item>
+                  </a-col>
+                  <a-col :span='span'>
+                    <a-form-model-item label="淇濆吇鍒嗙被">
+                      <a-input v-model="tableRowRecord.maintenanceCategory_dictText" readOnly/>
+                    </a-form-model-item>
+                  </a-col>
+
+                </a-row>
+
+                <a-row>
+                  <a-col :span='span'>
+                    <a-form-model-item label="淇濆吇鍛ㄦ湡鍗曚綅">
+                      <a-input v-model="tableRowRecord.periodUnit" readOnly/>
+                    </a-form-model-item>
+                  </a-col>
+                  <a-col :span='span'>
+                    <a-form-model-item label="淇濆吇鍛ㄦ湡">
+                      <a-input v-model="tableRowRecord.maintenancePeriod" readOnly/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+
+                <a-row>
+                  <a-col :span='span'>
+                    <a-form-model-item label="鍒濆鏃ユ湡">
+                      <a-input v-model="tableRowRecord.initialDate" readOnly/>
+                    </a-form-model-item>
+                  </a-col>
+                  <a-col :span='span'>
+                    <a-form-model-item label="瑙勮寖鐘舵��">
+                      <a-input v-model="tableRowRecord.standardStatus_dictText" readOnly/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+
+                <a-row>
+                  <a-col :span="span">
+                    <a-form-model-item label="瑙勮寖鐗堟湰">
+                      <a-input v-model="tableRowRecord.standardVersion" readOnly/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+              </a-tab-pane>
+
+              <a-tab-pane key="2" tab="淇濆吇椤规槑缁�" forceRender>
+                <j-vxe-table ref="editableDetailTable" :rowNumber="false" :bordered="true"
+                             :alwaysEdit="true" :toolbar="false" keep-source :loading="detail.loading"
+                             :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>
+          </a-col>
+
+          <a-col :span="8">
+            <a-tabs>
+              <template v-if="selectShenpiData.procInstId">
+                <a-tab-pane tab='娴佺▼鍥�'>
+                  <img :src="imageSrc" width="100%" v-if="imageSrc"/>
+                </a-tab-pane>
+              </template>
+            </a-tabs>
+          </a-col>
+
+          <a-col :span="6">
+            <a-tabs>
+              <a-tab-pane tab="缁翠慨涓讳换瀹℃壒">
+                <a-row :gutter="24">
+                  <a-col :span="24">
+                    <a-form-model-item prop="repairManagerApproveResult" label="澶勭悊绫诲瀷">
+                      <j-dict-select-tag type='radio' v-model='tableRowRecord.repairManagerApproveResult'
+                                         dictCode='approved_rejected'
+                                         :disabled="disableSubmit||tableRowRecord.standardStatus!=='WAIT_REPAIR_DIRECTOR'"/>
+                    </a-form-model-item>
+                  </a-col>
+
+                  <a-col :span="24">
+                    <a-form-model-item prop="repairManagerApproveComment" label="澶勭悊鎰忚">
+                      <a-textarea placeholder="璇疯緭鍏ュ鐞嗘剰瑙�"
+                                  :disabled="disableSubmit||tableRowRecord.standardStatus!=='WAIT_REPAIR_DIRECTOR'"
+                                  v-model="tableRowRecord.repairManagerApproveComment"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+              </a-tab-pane>
+            </a-tabs>
+
+            <a-tabs v-if="tableRowRecord.standardStatus&&tableRowRecord.standardStatus!=='WAIT_REPAIR_DIRECTOR'">
+              <a-tab-pane tab="鎶�鏈富绠″鎵�">
+                <a-row :gutter="24">
+                  <a-col :span="24">
+                    <a-form-model-item prop="technicalManagerApproveResult" label="澶勭悊绫诲瀷">
+                      <j-dict-select-tag type='radio' v-model='tableRowRecord.technicalManagerApproveResult'
+                                         dictCode='approved_rejected'/>
+                    </a-form-model-item>
+                  </a-col>
+
+                  <a-col :span="24">
+                    <a-form-model-item prop="technicalManagerApproveComment" label="澶勭悊鎰忚">
+                      <a-textarea placeholder="璇疯緭鍏ュ鐞嗘剰瑙�" v-model="tableRowRecord.technicalManagerApproveComment"/>
+                    </a-form-model-item>
+                  </a-col>
+                </a-row>
+              </a-tab-pane>
+            </a-tabs>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+  import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage'
+  import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue'
+  import { JVXETypes } from '@comp/jeecg/JVxeTable'
+  import moment from 'moment'
+
+  export default {
+    name: 'MaintenanceStandardApprovalModal',
+    components: { MaintenanceEquipmentSelect },
+    props: {
+      selectShenpiData: {
+        type: Object
+      }
+    },
+    data() {
+      return {
+        span: 12,
+        confirmLoading: false,
+        spinning: false,
+        tableRowRecord: {},
+        validatorRules: {
+          repairManagerApproveResult: [
+            { required: true, message: '璇烽�夋嫨澶勭悊绫诲瀷' }
+          ],
+          repairManagerApproveComment: [
+            { required: true, message: '璇疯緭鍏ュ鐞嗘剰瑙�' }
+          ],
+          technicalManagerApproveResult: [
+            { required: true, message: '璇烽�夋嫨澶勭悊绫诲瀷' }
+          ],
+          technicalManagerApproveComment: [
+            { required: true, message: '璇疯緭鍏ュ鐞嗘剰瑙�' }
+          ]
+        },
+        imageSrc: null,
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 8 }
+        },
+        wrapperCol: {
+          xs: { span: 30 },
+          sm: { span: 16 }
+        },
+        visible: false,
+        // 琛ㄥご
+        url: {
+          diagramView: '/assign/flow/diagramView',
+          queryHisTaskList: '/assign/flow/queryHisTaskList',
+          approve: '/eam/maintenanceStandard/audit',
+          queryById: '/eam/maintenanceStandard/list',
+          detailList: '/eam/eamMaintenanceStandardDetail/queryList'
+        },
+        detail: {
+          loading: false,
+          dataSource: [],
+          columns: [],
+          defaultColumns: [
+            {
+              title: 'ID',
+              key: 'id',
+              type: JVXETypes.hidden
+            },
+            {
+              title: 'standardId',
+              key: 'standardId',
+              type: JVXETypes.hidden
+            },
+            {
+              title: '椤圭洰搴忓彿',
+              key: 'itemCode',
+              type: JVXETypes.inputNumber,
+              align: 'center',
+              disabled: true
+            },
+            {
+              title: '閮ㄤ綅',
+              key: 'itemPart',
+              type: JVXETypes.textarea,
+              align: 'center',
+              disabled: true
+            },
+            {
+              title: '淇濆吇椤瑰垎绫�',
+              key: 'itemCategory',
+              type: JVXETypes.slot,
+              slotName: 'itemCategory',
+              align: 'center'
+            },
+            {
+              title: '淇濆吇椤圭洰',
+              key: 'itemName',
+              type: JVXETypes.textarea,
+              align: 'center',
+              disabled: true
+            },
+            {
+              title: '淇濆吇瑙勮寖鎴栬姹�',
+              key: 'itemDemand',
+              type: JVXETypes.textarea,
+              align: 'center',
+              disabled: true
+            }
+          ]
+        },
+        disableSubmit: false,
+        title: ''
+      }
+    },
+    watch: {
+      'tableRowRecord.maintenanceCategory': {
+        handler(val) {
+          if (val) {
+            if (val != 'THIRD_MAINTENANCE') this.detail.columns = [...this.detail.defaultColumns.filter(item => item.key != 'itemPart')]
+            else this.detail.columns = [...this.detail.defaultColumns.filter(item => item.key != 'itemCategory')]
+          }
+          else this.detail.columns = [...this.detail.defaultColumns]
+        }
+      }
+    },
+    computed: {
+      encodedDictCode() {
+        const dictCode = `sys_dict_item,item_text,item_value,dict_id='1940598438685134850'`
+        return encodeURIComponent(dictCode)
+      }
+    },
+    methods: {
+      /**
+       * 鑾峰彇娴佺▼鑺傜偣鍜屾祦绋嬪浘
+       * @param record 寰呭姙璁板綍淇℃伅
+       */
+      getAllApproveData(record) {
+        if (record.procInstId) {
+          const { processDefinitionId, processInstanceId, processDefinitionKey, procInstId } = record
+          const imageParam = { processDefinitionId, processInstanceId, TaskDefinitionKey: processDefinitionKey }
+          const that = this
+          this.imageSrc = null
+
+          downFile(this.url.diagramView, imageParam, 'get')
+            .then((res => {
+              const urlObject = window.URL.createObjectURL(new Blob([res]))
+              that.imageSrc = urlObject
+            }))
+            .finally(() => {
+              this.spinning = false
+            })
+        }
+      },
+
+      /**
+       * 鑾峰彇寰呭姙璁板綍鐨勫熀鏈俊鎭�
+       * @param record 寰呭姙璁板綍淇℃伅
+       */
+      async getBasicInformation(record) {
+        this.detail.dataSource = []
+        this.tableRowRecord = {}
+        this.spinning = true
+        const param = { id: record.dataId }
+        let res = await getAction(this.url.queryById, param)
+        this.tableRowRecord = Object.assign({}, res.result.records[0])
+        await this.loadDetail(record.dataId)
+      },
+
+      /**
+       * 鑾峰彇淇濆吇鏄庣粏
+       * @param dataId 涓氬姟ID
+       */
+      loadDetail(dataId) {
+        if (dataId) {
+          getAction(this.url.detailList, { standardId: dataId })
+            .then(res => {
+              if (res.success) {
+                this.detail.dataSource = [...res.result]
+              }
+            })
+        }
+      },
+
+      async submitForm() {
+        let errMap = await this.$refs.editableDetailTable.validateTable()
+        if (errMap) {
+          return
+        }
+
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            this.confirmLoading = this.spinning = true
+            const flowTaskVo = {}
+            flowTaskVo.dataId = this.selectShenpiData.dataId
+            flowTaskVo.taskId = this.selectShenpiData.id
+            flowTaskVo.userId = this.selectShenpiData.assignee
+            flowTaskVo.instanceId = this.selectShenpiData.procInstId
+            if (this.tableRowRecord.standardStatus == 'WAIT_REPAIR_DIRECTOR') {
+              flowTaskVo.repairManagerApproveResult = this.tableRowRecord.repairManagerApproveResult
+              flowTaskVo.repairManagerApproveComment = this.tableRowRecord.repairManagerApproveComment
+            } else {
+              flowTaskVo.technicalManagerApproveResult = this.tableRowRecord.technicalManagerApproveResult
+              flowTaskVo.technicalManagerApproveComment = this.tableRowRecord.technicalManagerApproveComment
+            }
+            const that = this
+            console.log('琛ㄥ崟鎻愪氦鏁版嵁', flowTaskVo)
+            httpAction(this.url.approve, flowTaskVo, 'post')
+              .then((res) => {
+                if (res.success) {
+                  that.$notification.success({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                  //鍒锋柊琛ㄦ牸
+                  that.$emit('modalFormOk')
+                  that.handleCancel()
+                } else {
+                  that.$notification.warning({
+                    message: '娑堟伅',
+                    description: res.message
+                  })
+                }
+              })
+              .finally(() => {
+                that.confirmLoading = this.spinning = false
+              })
+          } else {
+            return false
+          }
+        })
+      },
+
+      handleCancel() {
+        this.visible = false
+      }
+    }
+  }
+</script>
+<style scoped>
+  /deep/ .ant-select-dropdown-menu {
+    text-align: left;
+  }
+</style>
\ No newline at end of file

--
Gitblit v1.9.3