From e14ed882d12df3b48e59390eba364442cdff70bd Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期三, 28 五月 2025 15:46:32 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/tms/requirement/ToolSharpeningList .vue                                        |  249 
 src/views/flowable/workflow/inboundOrder/InboundOrderHandle.vue                          |  445 +
 src/views/tms/modules/baseTools/BaseToolsListLeft.vue                                    |    9 
 src/views/tms/requirement/modules/ToolsModal.vue                                         |  221 
 src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningModal.vue                  |   60 
 src/views/system/modules/UserModal.vue                                                   |    1 
 src/views/tms/modules/inbound/InboundListLeft.vue                                        |  323 +
 src/views/tms/modules/outBound/OutboundModal.vue                                         |  312 +
 src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningForm.vue                   |  221 
 src/views/tms/modules/toolsClassify/ToolsClassifyListRight.vue                           |   14 
 src/views/tms/lossBound/LossboundDetailList.vue                                          |  180 
 src/views/tms/modules/toolsClassify/ToolsClassifyForm.vue                                |    2 
 src/views/dnc/base/TerminalIndex.vue                                                     |  109 
 src/views/eam/dispose/EamEquipmentSealUpList.vue                                         |   37 
 src/views/flowable/workflow/lossBound/lossBoundHandle.vue                                |  505 +
 src/views/tms/modules/inboundOrder/InboundOrderModel.vue                                 |  600 ++
 src/permission.js                                                                        |   90 
 src/views/eam/dispose/EamEquipmentLeanOutList.vue                                        |    2 
 src/views/flowable/workflow/scrap/EquipmentScrapApprovalModal.vue                        |  223 
 src/views/tms/InboundList.vue                                                            |   39 
 src/views/tms/modules/outBound/OutboundDetailSelectList.vue                              |  215 
 src/views/tms/lossBound/modules/LossboundModal.vue                                       |  434 +
 src/views/tms/modules/inbound/InboundListRight.vue                                       |  515 +
 src/views/tms/lossBound/modules/LossboundDetailModal.vue                                 |  141 
 src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue           |  156 
 src/views/tms/stocktakingBound/ToolsStocktakingBoundList.vue                             |  322 +
 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue                        |   66 
 src/views/tms/modules/inboundOrder/JSelectToolingModal.vue                               |  254 
 src/views/eam/dispose/modules/EamEquipmentTransferModal.vue                              |   93 
 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue  |   68 
 src/views/tms/modules/baseTools/BaseToolsListRight.vue                                   |   30 
 src/views/tms/modules/inboundOrder/JSelectReturnListModal.vue                            |  290 +
 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue |  121 
 src/views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue                  |  524 +
 src/views/tms/modules/outBound/OutboundListRight.vue                                     |  430 +
 src/views/eam/dispose/modules/EamEquipmentScrapModal.vue                                 |  243 
 src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue                          |  128 
 src/views/tms/stocktakingBound/ToolsStocktaKingBoundDetail.vue                           |  224 
 src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue                        |  175 
 src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue                              |   14 
 src/components/layouts/TerminalLayout.vue                                                |  126 
 src/views/user/Login.vue                                                                 |    5 
 src/views/eam/spare/EamSparePartRequisitionList.vue                                      |  932 ++-
 src/views/eam/dispose/EamEquipmentScrapList.vue                                          |  379 
 src/views/eam/maintenance/EamThirdMaintenanceOrderList.vue                               |   14 
 src/views/tms/storeEarlyWarning/ToolsStoreEarlyWarningList.vue                           |  315 +
 src/views/eam/dispose/modules/EamEquipmentLeanOutModal.vue                               |   11 
 src/views/tms/OutboundList.vue                                                           |   39 
 src/views/eam/equipment/EamEquipmentList.vue                                             |   28 
 src/views/tms/lossBound/LossboundList.vue                                                |  317 +
 src/views/tms/InboundOrderList.vue                                                       |  241 
 src/views/dnc/base/modules/ProductStructure/Document/NcComponentBorrowModal.vue          |   31 
 src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue                          |  169 
 src/config/router.config.js                                                              |   45 
 src/views/tms/modules/outBound/OutboundOrderModal.vue                                    |   16 
 src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue                            |  221 
 src/views/flowable/workflow/FlowTodo.vue                                                 |  844 +-
 src/views/tms/stocktakingBound/modules/ToolsStocktakingBoundModal.vue                    |  515 +
 src/views/tms/stocktakingBound/modules/ToolSelectorModal.vue                             |  216 
 src/components/layouts/index.js                                                          |    3 
 src/views/dnc/base/OperatorLogin.vue                                                     |  268 +
 src/views/tms/modules/inboundOrder/JSelectSharpenListModal.vue                           |  273 +
 src/views/eam/dispose/EamEquipmentTransferList.vue                                       |  387 
 src/views/tms/modules/inbound/InboundModel.vue                                           |  535 ++
 src/views/tms/requirement/modules/ToolsSharpeningModal.vue                               |  286 +
 src/views/tms/modules/outBound/JSelectOutboundToolModal.vue                              |   12 
 src/assets/operator-login-bg.png                                                         |    0 
 /dev/null                                                                                |  124 
 src/views/flowable/workflow/transfer/EquipmentTransferApprovalModal.vue                  |  235 
 src/views/tms/modules/outBound/OutboundListLeft.vue                                      |  322 +
 src/views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchModal.vue           |   10 
 src/views/tms/modules/outBound/OutboundOrderSelectList.vue                               |  330 +
 src/views/tms/modules/inboundOrder/InboundDetailList.vue                                 |   88 
 src/views/eam/dispose/modules/EamEquipmentSealUpModal.vue                                |    7 
 src/views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue                      |   59 
 src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue                       |    2 
 src/views/flowable/workflow/FlowCompleted.vue                                            |  466 
 src/views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue                        |    3 
 78 files changed, 14,209 insertions(+), 1,750 deletions(-)

diff --git a/src/assets/operator-login-bg.png b/src/assets/operator-login-bg.png
new file mode 100644
index 0000000..55de0cf
--- /dev/null
+++ b/src/assets/operator-login-bg.png
Binary files differ
diff --git a/src/components/layouts/TerminalLayout.vue b/src/components/layouts/TerminalLayout.vue
new file mode 100644
index 0000000..01ef462
--- /dev/null
+++ b/src/components/layouts/TerminalLayout.vue
@@ -0,0 +1,126 @@
+<template>
+  <div class="full-screen-container">
+    <router-view class="router-view">
+      <template v-slot:function>
+        <a-space>
+          <button class="button" @click="handleLogout">鍒囨崲鐢ㄦ埛</button>
+          <button class="button" @click="backToIndex">杩斿洖涓婚〉</button>
+          <button class="button">璁剧疆</button>
+        </a-space>
+      </template>
+    </router-view>
+
+    <div class="footer" v-if="$route.path!=='/terminal/login'">
+      <div>濮撳悕锛歿{nickname()}}</div>
+      <div>褰撳墠鏃堕棿锛歿{currentDateAndTime}}</div>
+    </div>
+  </div>
+</template>
+
+<script>
+  import { mapActions, mapGetters } from 'vuex'
+
+  import moment from 'moment'
+
+  export default {
+    name: 'TerminalLayout',
+    data() {
+      return {
+        currentDateAndTime: null,
+        getDateAndTimeInterval: null
+      }
+    },
+    watch: {
+      '$route.path': {
+        handler(val) {
+          if (val === '/terminal/index' || val === '/terminal/login') document.title = 'MDC鏅烘収杞﹂棿'
+        }
+      }
+    },
+    created() {
+      this.getCurrentDateAndTime()
+
+    },
+    beforeDestroy() {
+      if (this.getDateAndTimeInterval) {
+        clearInterval(this.getDateAndTimeInterval)
+        this.getDateAndTimeInterval = null
+      }
+    },
+    methods: {
+      ...mapActions(['Logout']),
+
+      ...mapGetters(['nickname']),
+
+      handleLogout() {
+        const that = this
+
+        this.$confirm({
+          title: '鎻愮ず',
+          content: '纭畾瑕佸垏鎹㈢敤鎴峰悧 ?',
+          onOk() {
+            return that.Logout({}).then(() => {
+              window.location.reload()
+            }).catch(err => {
+              that.$message.error({
+                title: '閿欒',
+                description: err.message
+              })
+            })
+          },
+          onCancel() {
+          }
+        })
+      },
+
+      backToIndex() {
+        if (this.$route.path !== '/terminal/index') this.$router.push('/terminal/index')
+      },
+
+      // 鑾峰彇褰撳墠鏃ユ湡鍜屾椂闂达紙1绉掓洿鏂�1娆★級
+      getCurrentDateAndTime() {
+        this.getDateAndTimeInterval = setInterval(() => this.currentDateAndTime = moment().format('YYYY-MM-DD HH:mm:ss'), 1000)
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .full-screen-container {
+    display: flex;
+    flex-direction: column;
+    height: 100vh;
+
+    .router-view {
+      flex: 1;
+      padding: 24px;
+      display: flex;
+      flex-direction: column;
+    }
+  }
+
+  .button {
+    font-weight: bold;
+    padding: 15px 15px;
+    border: 1px solid rgba(0, 0, 0, .2);
+    border-radius: 5px;
+    cursor: pointer;
+    box-shadow: 6px 6px 16px rgba(0, 0, 0, 0.2),
+      -6px -6px 16px rgba(255, 255, 255, 0.8),
+    inset 0 0 0 transparent;
+
+    &:hover {
+      box-shadow: 0 0 0 transparent,
+      inset 6px 6px 12px rgba(0, 0, 0, 0.2),
+        inset -6px -6px 12px rgba(255, 255, 255, 0.8);
+    }
+  }
+
+  .footer {
+    font-size: 16px;
+    padding: 12px 24px;
+    color: #000;
+    display: flex;
+    justify-content: space-between;
+  }
+</style>
\ No newline at end of file
diff --git a/src/components/layouts/index.js b/src/components/layouts/index.js
index 7cf0f77..644c25b 100644
--- a/src/components/layouts/index.js
+++ b/src/components/layouts/index.js
@@ -4,5 +4,6 @@
 import RouteView from '@/components/layouts/RouteView'
 import PageView from '@/components/layouts/PageView'
 import TabLayout from '@/components/layouts/TabLayout'
+import TerminalLayout from '@/components/layouts/TerminalLayout'
 
-export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView, TabLayout }
\ No newline at end of file
+export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView, TabLayout, TerminalLayout }
\ No newline at end of file
diff --git a/src/config/router.config.js b/src/config/router.config.js
index 2154e1f..9f2dac3 100644
--- a/src/config/router.config.js
+++ b/src/config/router.config.js
@@ -1,4 +1,4 @@
-import { UserLayout, TabLayout, RouteView, BlankLayout, PageView } from '@/components/layouts'
+import { UserLayout, TabLayout, RouteView, BlankLayout, PageView, TerminalLayout } from '@/components/layouts'
 
 /**
  * 璧拌彍鍗曪紝璧版潈闄愭帶鍒�
@@ -49,7 +49,7 @@
         path: 'alteration',
         name: 'alteration',
         component: () => import(/* webpackChunkName: "user" */ '@/views/user/alteration/Alteration')
-      },
+      }
     ]
   },
   {
@@ -63,7 +63,7 @@
         path: 'login',
         name: 'oauth2-app-login',
         component: () => import(/* webpackChunkName: "oauth2-app.login" */ '@/views/user/oauth2/OAuth2Login')
-      },
+      }
     ]
   },
 
@@ -84,8 +84,45 @@
     component: () => import('@/views/mdc/base/MdcWorkshopSignage.vue')
   },
   {
+    path: '/terminal',
+    redirect: '/terminal/login',
+    component: TerminalLayout,
+    children: [
+      {
+        path: 'login',
+        name: 'operatorLogin',
+        component: () => import('@/views/dnc/base/OperatorLogin.vue')
+      },
+      {
+        path: 'index',
+        name: 'terminalIndex',
+        component: () => import('@/views/dnc/base/TerminalIndex.vue')
+      },
+      {
+        path: 'work',
+        name: 'equipmentStartWork',
+        component: () => import('@/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue')
+      },
+      {
+        path: 'fault',
+        name: 'reportEquipmentFault',
+        component: () => import('@/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue')
+      },
+      {
+        path: 'close',
+        name: 'reportEquipmentClose',
+        component: () => import('@/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue')
+      },
+      {
+        path: 'spotCheck',
+        name: 'equipmentSpotCheck',
+        component: () => import('@/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue')
+      }
+    ]
+  },
+  {
     path: '/404',
     component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404')
-  },
+  }
 
 ]
diff --git a/src/permission.js b/src/permission.js
index fe8d825..ddd93e2 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -4,12 +4,12 @@
 import NProgress from 'nprogress' // progress bar
 import 'nprogress/nprogress.css' // progress bar style
 import notification from 'ant-design-vue/es/notification'
-import { ACCESS_TOKEN,INDEX_MAIN_PAGE_PATH, OAUTH2_LOGIN_PAGE_PATH } from '@/store/mutation-types'
+import { ACCESS_TOKEN, INDEX_MAIN_PAGE_PATH, OAUTH2_LOGIN_PAGE_PATH } from '@/store/mutation-types'
 import { generateIndexRouter, isOAuth2AppEnv } from '@/utils/util'
 
 NProgress.configure({ showSpinner: false }) // NProgress Configuration
 
-const whiteList = ['/user/login', '/user/register', '/user/register-result','/user/alteration'] // no redirect whitelist
+const whiteList = ['/user/login', '/user/register', '/user/register-result', '/user/alteration', '/terminal/login'] // no redirect whitelist
 whiteList.push(OAUTH2_LOGIN_PAGE_PATH)
 
 router.beforeEach((to, from, next) => {
@@ -21,8 +21,8 @@
     to.matched.splice(2, to.matched.length - 3)
   }
   //update-end---author:scott ---date::2022-10-13  for锛歔jeecg-boot/issues/4091]澶氱骇璺敱缂撳瓨闂 #4091--------------
-  
-  
+
+
   NProgress.start() // start progress bar
 
   if (Vue.ls.get(ACCESS_TOKEN)) {
@@ -30,57 +30,75 @@
     if (to.path === '/user/login' || to.path === OAUTH2_LOGIN_PAGE_PATH) {
       next({ path: INDEX_MAIN_PAGE_PATH })
       NProgress.done()
-    } else {
+    }
+    else {
       if (store.getters.permissionList.length === 0) {
         store.dispatch('GetPermissionList').then(res => {
-              const menuData = res.result.menu;
-              //console.log(res.message)
-              if (menuData === null || menuData === "" || menuData === undefined) {
-                return;
+          const menuData = res.result.menu
+          //console.log(res.message)
+          if (menuData === null || menuData === '' || menuData === undefined) {
+            return
+          }
+          let constRoutes = []
+          constRoutes = generateIndexRouter(menuData)
+          // 娣诲姞涓荤晫闈㈣矾鐢�
+          store.dispatch('UpdateAppRouter', { constRoutes }).then(() => {
+            // 鏍规嵁roles鏉冮檺鐢熸垚鍙闂殑璺敱琛�
+            // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛�
+            router.addRoutes(store.getters.addRouters)
+            const redirect = decodeURIComponent(from.query.redirect || to.path)
+            if (to.path === redirect) {
+              // hack鏂规硶 纭繚addRoutes宸插畬鎴� ,set the replace: true so the navigation will not leave a history record
+              next({ ...to, replace: true })
+            } else {
+              // 璺宠浆鍒扮洰鐨勮矾鐢�
+              if (to.path !== '/terminal/login' && from.path !== '/terminal/login' && redirect.split('/')[1] === 'terminal') {
+                next({ path: '/terminal/login' })
+              } else {
+                next({ path: redirect })
               }
-              let constRoutes = [];
-              constRoutes = generateIndexRouter(menuData);
-              // 娣诲姞涓荤晫闈㈣矾鐢�
-              store.dispatch('UpdateAppRouter',  { constRoutes }).then(() => {
-                // 鏍规嵁roles鏉冮檺鐢熸垚鍙闂殑璺敱琛�
-                // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛�
-                router.addRoutes(store.getters.addRouters)
-                const redirect = decodeURIComponent(from.query.redirect || to.path)
-                if (to.path === redirect) {
-                  // hack鏂规硶 纭繚addRoutes宸插畬鎴� ,set the replace: true so the navigation will not leave a history record
-                  next({ ...to, replace: true })
-                } else {
-                  // 璺宠浆鍒扮洰鐨勮矾鐢�
-                  next({ path: redirect })
-                }
-              })
-            })
+            }
+          })
+        })
           .catch(() => {
-           /* notification.error({
-              message: '绯荤粺鎻愮ず',
-              description: '璇锋眰鐢ㄦ埛淇℃伅澶辫触锛岃閲嶈瘯锛�'
-            })*/
+            /* notification.error({
+               message: '绯荤粺鎻愮ず',
+               description: '璇锋眰鐢ㄦ埛淇℃伅澶辫触锛岃閲嶈瘯锛�'
+             })*/
             store.dispatch('Logout').then(() => {
               next({ path: '/user/login', query: { redirect: to.fullPath } })
             })
           })
-      } else {
-        next()
+      }
+      else {
+        // 璺宠浆鍒扮洰鐨勮矾鐢�
+        if (to.path !== '/terminal/login' && from.path !== '/' && from.path.split('/') [1] !== 'terminal' && to.path.split('/')[1] === 'terminal') {
+          next({ path: '/terminal/login' })
+        } else {
+          next()
+        }
       }
     }
-  } else {
+  }
+  else {
     if (whiteList.indexOf(to.path) !== -1) {
       // 鍦ㄥ厤鐧诲綍鐧藉悕鍗曪紝濡傛灉杩涘叆鐨勯〉闈㈡槸login椤甸潰骞朵笖褰撳墠鏄疧Auth2app鐜锛屽氨杩涘叆OAuth2鐧诲綍椤甸潰
       if (to.path === '/user/login' && isOAuth2AppEnv()) {
-        next({path: OAUTH2_LOGIN_PAGE_PATH})
+        next({ path: OAUTH2_LOGIN_PAGE_PATH })
       } else {
         // 鍦ㄥ厤鐧诲綍鐧藉悕鍗曪紝鐩存帴杩涘叆
         next()
       }
       NProgress.done()
-    } else {
+    }
+    else {
       // 濡傛灉褰撳墠鏄湪OAuth2APP鐜锛屽氨璺宠浆鍒癘Auth2鐧诲綍椤甸潰
-      let path = isOAuth2AppEnv() ? OAUTH2_LOGIN_PAGE_PATH : '/user/login'
+      let path
+      if (isOAuth2AppEnv()) path = OAUTH2_LOGIN_PAGE_PATH
+      else {
+        if (to.path.split('/')[1] !== 'terminal') path = '/user/login'
+        else path = '/terminal/login'
+      }
       next({ path: path, query: { redirect: to.fullPath } })
       NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it
     }
diff --git a/src/views/dnc/base/OperatorLogin.vue b/src/views/dnc/base/OperatorLogin.vue
new file mode 100644
index 0000000..1f57fad
--- /dev/null
+++ b/src/views/dnc/base/OperatorLogin.vue
@@ -0,0 +1,268 @@
+<template>
+  <div class="login-bg">
+    <div class="login-container">
+      <a-card class="login-card">
+        <h2 class="title">鐧诲綍</h2>
+
+        <a-form-model :model="model" ref="form" :rules="validateRules" @keyup.enter.native="handleLogin">
+          <!-- 鍒峰崱鐧诲綍杈撳叆妗� -->
+          <a-form-model-item prop="workNo" :has-feedback="feedbackConfig.workNoFeedback">
+            <a-input v-model="model.workNo" placeholder="璇峰埛鍗℃垨杈撳叆鍗″彿" size="large" autocomplete="off"
+                     @change="clearAnotherLoginInfo('workNo')">
+              <a-icon slot="prefix" type="credit-card"/>
+            </a-input>
+          </a-form-model-item>
+
+          <div class="divider">
+            <span class="line"></span>
+            <span class="text">鎴�</span>
+            <span class="line"></span>
+          </div>
+
+          <!-- 甯歌鐧诲綍琛ㄥ崟 -->
+          <a-form-model-item prop="username" :has-feedback="feedbackConfig.usernameFeedback">
+            <a-input
+              v-model="model.username"
+              placeholder="鐢ㄦ埛鍚�"
+              size="large"
+              @change="clearAnotherLoginInfo('username')"
+              autocomplete="off"
+            >
+              <a-icon slot="prefix" type="user"/>
+            </a-input>
+          </a-form-model-item>
+
+          <a-form-model-item prop="password" :has-feedback="feedbackConfig.passwordFeedback">
+            <a-input-password
+              v-model="model.password"
+              placeholder="瀵嗙爜"
+              size="large"
+              @change="clearAnotherLoginInfo('password')"
+              autocomplete="off"
+            >
+              <a-icon slot="prefix" type="lock"/>
+            </a-input-password>
+          </a-form-model-item>
+
+          <a-button type="primary" size="large" block :loading="loading" @click="handleLogin">鐧诲綍</a-button>
+        </a-form-model>
+        <!--<div class="footer">-->
+        <!--<a @click="handleRegister">娉ㄥ唽璐﹀彿</a>-->
+        <!--<a @click="handleForget">蹇樿瀵嗙爜</a>-->
+        <!--</div>-->
+      </a-card>
+    </div>
+  </div>
+</template>
+
+<script>
+  import { mapActions } from 'vuex'
+  import { timeFix } from '@/utils/util'
+
+  export default {
+    name: 'OperatorLogin',
+    data() {
+      return {
+        model: {
+          isOperator: true // 鍒ゆ柇鏄摢涓櫥褰曢〉鐧诲綍
+        },
+        feedbackConfig: {
+          workNoFeedback: true,
+          usernameFeedback: true,
+          passwordFeedback: true
+        },
+        loading: false,
+        validateRules: {
+          workNo: [
+            { validator: this.checkWorkNo, trigger: 'blur' }
+          ],
+          username: [
+            { validator: this.checkUsername, trigger: 'blur' }
+          ],
+          password: [
+            { validator: this.checkPassword, trigger: 'blur' }
+          ]
+        }
+      }
+    },
+    methods: {
+      ...mapActions(['Login']),
+
+      handleLogin() {
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            this.loading = true
+
+            if (this.model.workNo) this.$refs.form.clearValidate(['username', 'password'])
+            else this.$refs.form.clearValidate('workNo')
+
+            console.log('鐧诲綍淇℃伅:', this.model)
+
+            this.Login(this.model)
+              .then((res) => {
+                this.loginSuccess(res.result)
+              })
+              .catch((err) => {
+                this.loginFailed(err, this.model.username)
+              })
+          } else {
+            return false
+          }
+        })
+      },
+
+      loginSuccess() {
+        this.$router.push({ path: '/terminal/index' }).catch(() => {
+        })
+
+        this.$notification.success({
+          message: '娆㈣繋',
+          description: `${timeFix()}锛屾杩庡洖鏉
+        })
+        this.loading = false
+      },
+
+      //鐧诲綍鍚庡彴澶辫触
+      loginFailed(err, username) {
+        let description = ((err.response || {}).data || {}).message || err.message || '璇锋眰鍑虹幇閿欒锛岃绋嶅悗鍐嶈瘯'
+
+        this.$notification.error({
+          message: '鐧诲綍澶辫触',
+          description: description
+        })
+        this.loading = false
+      },
+
+      /**
+       * 杈撳叆妗嗗�兼敼鍙樻椂瑙﹀彂
+       * @param inputProp 杈撳叆妗嗗搴斿睘鎬�
+       */
+      clearAnotherLoginInfo(inputProp) {
+        this.feedbackConfig[inputProp + 'Feedback'] = true
+
+        if (inputProp === 'workNo') {
+          delete this.model.username
+          delete this.model.password
+          this.$refs.form.clearValidate(['username', 'password'])
+        } else {
+          delete this.model.workNo
+          this.$refs.form.clearValidate('workNo')
+        }
+      },
+
+      checkWorkNo(rule, value, callback) {
+        if (!this.model.username && !this.model.password) {
+          if (!value) {
+            callback(new Error('璇峰埛鍗℃垨杈撳叆鍗″彿锛�'))
+            this.feedbackConfig.usernameFeedback = this.feedbackConfig.passwordFeedback = true
+          } else {
+            callback()
+          }
+        } else {
+          this.feedbackConfig.workNoFeedback = false
+          callback()
+        }
+      },
+
+      checkUsername(rule, value, callback) {
+        if (!this.model.workNo) {
+          if (!value) {
+            callback(new Error('璇疯緭鍏ョ敤鎴峰悕锛�'))
+            if (!this.model.password) this.feedbackConfig.workNoFeedback = true
+          } else {
+            callback()
+          }
+        } else {
+          this.feedbackConfig.usernameFeedback = false
+          callback()
+        }
+      },
+
+      checkPassword(rule, value, callback) {
+        if (!this.model.workNo) {
+          if (!value) {
+            callback(new Error('璇疯緭鍏ュ瘑鐮侊紒'))
+            if (!this.model.username) this.feedbackConfig.workNoFeedback = true
+          } else {
+            callback()
+          }
+        } else {
+          this.feedbackConfig.passwordFeedback = false
+          callback()
+        }
+      }
+
+      // handleRegister() {
+      //   this.$router.push('/register')
+      // },
+      // handleForget() {
+      //   this.$message.info('璇疯仈绯荤鐞嗗憳閲嶇疆瀵嗙爜')
+      // }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+  .login-bg {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    min-height: 100vh;
+    background: linear-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7)),
+    url('../../../assets/operator-login-bg.png') no-repeat center;
+    background-size: cover;
+
+    .login-container {
+      width: 100%;
+      max-width: 420px;
+      padding: 0 20px;
+
+      .login-card {
+        border-radius: 8px;
+        box-shadow: 0 6px 16px rgba(0, 0, 0, 0.3);
+        background: rgba(255, 255, 255, 0.95);
+
+        .title {
+          margin-bottom: 24px;
+          text-align: center;
+          color: #1890ff;
+          font-size: 24px;
+          font-weight: 500;
+        }
+
+        .divider {
+          display: flex;
+          align-items: center;
+          margin: 20px 0;
+
+          .line {
+            flex: 1;
+            height: 1px;
+            background: rgba(0, 0, 0, 0.15);
+          }
+
+          .text {
+            padding: 0 16px;
+            color: rgba(0, 0, 0, 0.45);
+          }
+        }
+
+        .footer {
+          display: flex;
+          justify-content: space-between;
+          margin-top: 16px;
+
+          a {
+            color: #1890ff;
+            cursor: pointer;
+
+            &:hover {
+              text-decoration: underline;
+            }
+          }
+        }
+      }
+    }
+
+  }
+</style>
diff --git a/src/views/dnc/base/TerminalIndex.vue b/src/views/dnc/base/TerminalIndex.vue
new file mode 100644
index 0000000..0289c4e
--- /dev/null
+++ b/src/views/dnc/base/TerminalIndex.vue
@@ -0,0 +1,109 @@
+<template>
+  <div class="page-view-container">
+    <slot name="function"/>
+    <div class="header-container">鐜板満鎯呭喌涓婃姤骞冲彴</div>
+    <div class="content-container">
+      <a-row>
+        <a-col :span="8">
+          <div class="button" @click="navigateTo('work','涓婄彮')">涓婄彮</div>
+        </a-col>
+        <a-col :span="8">
+          <div class="button">涓嬬彮</div>
+        </a-col>
+        <a-col :span="8">
+          <div class="button" @click="navigateTo('fault','璁惧鏁呴殰')">璁惧鏁呴殰</div>
+        </a-col>
+      </a-row>
+      <a-row>
+        <a-col :span="8">
+          <div class="button" @click="navigateTo('close','鍋滄満涓婃姤')">鍋滄満涓婃姤</div>
+        </a-col>
+        <a-col :span="8">
+          <div class="button" @click="navigateTo('spotCheck','鐐规')">鐐规</div>
+        </a-col>
+        <a-col :span="8">
+          <div class="button">鍚堟牸鐜�</div>
+        </a-col>
+      </a-row>
+      <a-row>
+        <a-col :span="8">
+          <div class="button">绋嬪簭鍛煎彨</div>
+        </a-col>
+        <a-col :span="8">
+          <div class="button">寮�宸ュ畬宸�</div>
+        </a-col>
+        <a-col :span="8">
+          <div class="button">绋嬪簭鍥炰紶</div>
+        </a-col>
+      </a-row>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'TerminalIndex',
+    methods: {
+      navigateTo(url, projectTitle) {
+        this.$router.push('/terminal/' + url)
+        document.title = 'MDC鏅烘収杞﹂棿-' + projectTitle
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .page-view-container {
+    background: linear-gradient(to bottom, #fff -15%, #000 55%,);
+
+    .header-container {
+      font-size: 50px;
+      color: #eee;
+      text-align: center;
+      height: 15%;
+      display: flex;
+      justify-content: center;
+      align-items: flex-end;
+      -webkit-align-items: flex-end;
+    }
+
+    .content-container {
+      flex: 1;
+      display: flex;
+      flex-direction: column;
+      padding: 3% 10%;
+
+      .ant-row {
+        flex: 1;
+
+        .ant-col {
+          height: 100%;
+          display: flex;
+          justify-content: center;
+          align-items: center;
+
+          .button {
+            width: 250px;
+            height: 125px;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            background-color: #E3F2D9;
+            font-size: 45px;
+            border: 2px solid #33579D;
+            box-shadow: inset -5px 5px 12px rgba(0, 0, 0, 0.6);
+            cursor: pointer;
+            transition: all .1s ease-in-out;
+
+            &:hover {
+              transform: scale(1.05);
+            }
+          }
+        }
+        /*display: flex;*/
+        /*flex-direction: column;*/
+      }
+    }
+  }
+
+</style>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue
index 3003661..41d4ac9 100644
--- a/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue
+++ b/src/views/dnc/base/modules/DeviceStructure/DeviceStructureTree.vue
@@ -242,7 +242,7 @@
      * @param treeNode
      */
     setTreeNodeIcon(treeNode) {
-      if (!treeNode.equipmentId) {
+      if (+treeNode.type === 1) {
         treeNode.slots = { icon: 'workshop' }
       } else {
         treeNode.slots = { icon: 'device' }
diff --git a/src/views/dnc/base/modules/ProductStructure/Document/NcComponentBorrowModal.vue b/src/views/dnc/base/modules/ProductStructure/Document/NcComponentBorrowModal.vue
index 95d5ab0..8dd02fc 100644
--- a/src/views/dnc/base/modules/ProductStructure/Document/NcComponentBorrowModal.vue
+++ b/src/views/dnc/base/modules/ProductStructure/Document/NcComponentBorrowModal.vue
@@ -12,44 +12,43 @@
             <div class="table-page-search-wrapper">
               <a-form layout="inline" @keyup.enter.native="searchQuery">
                 <a-row :gutter="24">
-                  <a-col :md="7" :sm="7">
+                  <a-col :md="5" :sm="5">
                     <a-form-item label="閮ㄤ欢鍚嶇О">
                       <a-input placeholder="璇疯緭鍏ラ儴浠跺悕绉�" v-model="queryParam.componentName" allow-clear></a-input>
                     </a-form-item>
                   </a-col>
 
-                  <a-col :md="7" :sm="7">
+                  <a-col :md="5" :sm="5">
                     <a-form-item label="閮ㄤ欢浠e彿">
                       <a-input placeholder="璇疯緭鍏ラ儴浠朵唬鍙�" v-model="queryParam.componentCode" allow-clear></a-input>
                     </a-form-item>
                   </a-col>
 
-                  <a-col :md="7" :sm="7">
+                  <a-col :md="5" :sm="5">
                     <a-form-item label="閮ㄤ欢鍨嬪彿">
                       <a-input placeholder="璇疯緭鍏ラ儴浠跺瀷鍙�" v-model="queryParam.componentModel" allow-clear></a-input>
                     </a-form-item>
                   </a-col>
 
-                  <a-col :md="7" :sm="7">
+                  <a-col :md="4" :sm="4">
                     <a-form-item label="瑙勬牸">
                       <a-input placeholder="璇疯緭鍏ヨ鏍�" v-model="queryParam.componentScale" allow-clear></a-input>
                     </a-form-item>
                   </a-col>
 
-                  <a-col :md="7" :sm="7">
+                  <a-col :md="4" :sm="4">
                     <a-form-item label="鏉愯川">
                       <a-input placeholder="璇疯緭鍏ユ潗璐�" v-model="queryParam.structureType" allow-clear></a-input>
                     </a-form-item>
                   </a-col>
-
-                  <a-col :md="4" :sm="4">
-                    <a-space>
-                      <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
-                      <a-button type="primary" @click="searchReset" icon="reload">閲嶇疆</a-button>
-                    </a-space>
-                  </a-col>
                 </a-row>
               </a-form>
+            </div>
+
+            <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+            <div class="table-operator">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload">閲嶇疆</a-button>
             </div>
 
             <a-table :columns="columns" :data-source="dataSource" bordered :pagination="ipagination" :loading="loading"
@@ -137,13 +136,13 @@
           title: '鍒涘缓鏃堕棿',
           dataIndex: 'createTime',
           align: 'center',
-          width: 150,
+          width: 100,
         },
         {
           title: '鍒涘缓浜�',
           dataIndex: 'createBy_dictText',
           align: 'center',
-          width: 100,
+          width: 60,
         }
       ],
       searchValue: '',
@@ -305,6 +304,10 @@
 
 <style scoped lang="less">
 /deep/ .ant-modal {
+  .ant-modal-body{
+      padding: 0 24px 12px;
+  }
+
   .tabs-container {
     display: flex;
     justify-content: space-between;
diff --git a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchModal.vue b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchModal.vue
index 29b0cb7..cba2b4a 100644
--- a/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchModal.vue
+++ b/src/views/dnc/base/modules/ProductStructure/Document/NcDocumentSearchModal.vue
@@ -44,7 +44,7 @@
                     </a-form-item>
                   </a-col>
 
-                  <a-col :md="4" :sm="4">
+                  <a-col :md="2" :sm="2">
                     <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
                   </a-col>
                 </a-row>
@@ -173,11 +173,11 @@
           ]
         },
         {
-          title: '鐘�  鎬�',
+          title: '鐘� 鎬�',
           dataIndex: 'docDispatchStatus_dictText',
           key: 'docDispatchStatus',
           align: 'center',
-          width: 60,
+          width: 80,
           filters: [
             { text: '缂栧埗', value: 1 },
             { text: '鏍″', value: 2 },
@@ -498,6 +498,10 @@
 
 <style scoped lang="less">
 /deep/ .ant-modal {
+  .ant-modal-body{
+    padding: 0 24px 12px;
+  }
+
   .tabs-container {
     display: flex;
     justify-content: space-between;
diff --git a/src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue b/src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue
new file mode 100644
index 0000000..a1503d1
--- /dev/null
+++ b/src/views/dnc/base/modules/TerminalIndex/EquipmentSpotCheck.vue
@@ -0,0 +1,169 @@
+<template>
+  <div>
+    <slot name="function"/>
+
+    <div class="content-container">
+      <!-- 鏌ヨ鍖哄煙 -->
+      <div class="table-page-search-wrapper" style="width: 100%">
+        <a-form-model ref="form" :model="model" layout="inline" :rules="validateRules">
+          <a-row :gutter="64" type="flex" justify="center">
+            <a-col :span="5">
+              <a-form-model-item label="璁惧" prop="equipmentId">
+                <a-select placeholder="璇烽�夋嫨璁惧" v-model="model.equipmentId">
+                  <a-select-option v-for="item in equipmentList" :key="item.key">
+                    {{item.label}}
+                  </a-select-option>
+                </a-select>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="5">
+              <a-form-model-item label="鐐规鏃ユ湡" prop="checkDate">
+                <a-date-picker style="width: 100%" placeholder="璇烽�夋嫨寮�濮嬫椂闂�" v-model="model.checkDate"/>
+              </a-form-model-item>
+            </a-col>
+          </a-row>
+        </a-form-model>
+      </div>
+
+      <div class="check-content-container">
+        <div v-for="item in checkList" :key="item.id">
+          <div>{{item.content}}</div>
+          <div>
+            <a-radio-group v-model="item.status">
+              <a-radio :value="1">姝e父</a-radio>
+              <a-radio :value="2">寮傚父</a-radio>
+              <a-radio :value="3">宸茬淮淇�</a-radio>
+            </a-radio-group>
+          </div>
+        </div>
+      </div>
+
+      <div class="button-container">
+        <a-button @click="handleSubmit" icon="check" :loading="loading">淇濆瓨</a-button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'EquipmentSpotCheck',
+    data() {
+      return {
+        model: {},
+        validateRules: {
+          equipmentId: [{ required: true, message: '璇烽�夋嫨璁惧锛�', trigger: 'change' }],
+          checkDate: [{ required: true, message: '璇烽�夋嫨鐐规鏃ユ湡锛�', trigger: 'change' }]
+        },
+        equipmentList: [
+          {
+            key: '3140221',
+            label: '3140221'
+          },
+          {
+            key: '3121542',
+            label: '3121542'
+          },
+          {
+            key: '3150324',
+            label: '3150324'
+          }
+        ],
+        checkList: [
+          {
+            content: '妫�鏌ヨ澶囧懆鍥存绾便�佸伐鍏枫�侀浂浠躲�佸伐浣嶅櫒鍏风瓑鏄惁鎸夎瀹氬畾缃憜鏀�',
+            status: 1
+          },
+          {
+            content: '妫�鏌ヨ澶嘝E绾挎帴鍦版槸鍚﹀畬濂芥棤鐮存崯',
+            status: 1
+          },
+          {
+            content: '妫�鏌ヨ澶囧悇寮�鍏虫槸鍚︾伒娲伙紝鍙潬',
+            status: 1
+          },
+          {
+            content: '妫�鏌ユ补绠辨补闈㈡槸鍚﹀湪鍒诲害绾夸笂銆佹补鏄惁鍙樿川銆佽繃婊ょ綉鏄惁鍫靛銆佹补姘旂璺槸鍚︽紡娌规紡姘�',
+            status: 1
+          },
+          {
+            content: '淇濇寔璁惧琛ㄩ潰娓呮磥锛屾鏌ユ満鍣ㄤ笂鏈夋棤娌规薄涓庡紓鐗╋紝鑻ユ湁椤诲強鏃舵竻鐞�',
+            status: 1
+          },
+          {
+            content: '妫�鏌ヨ澶囧悇绫昏绋嬮檺浣嶏紝鑱旈攣淇濇姢瑁呯疆銆侀槻鎶ょ僵鍙婂叾浠栦繚鎶よ缃畬濂斤紝鍙潬',
+            status: 1
+          },
+          {
+            content: '妫�鏌ヨ澶囦华鍣ㄤ华琛ㄨ澶囩姸鎬佹爣绀烘槸鍚﹀湪鏈夋晥鏈熷唴',
+            status: 1
+          },
+          {
+            content: '妫�鏌ヨ澶囧惎鍔ㄥ悗鍚勫杩愯(杞�)鏄惁鏈夊紓鍝嶅紓瑁�',
+            status: 1
+          }
+        ],
+        loading: false
+      }
+    },
+    methods: {
+      handleSubmit() {
+        const that = this
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.loading = true
+
+            setTimeout(() => {
+              that.loading = false
+            }, 2000)
+          } else {
+            return false
+          }
+        })
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .content-container {
+    flex: 1;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+
+    .check-content-container {
+      display: flex;
+      flex-direction: column;
+      margin: 40px auto;
+      width: 70%;
+
+      > div {
+        display: flex;
+        justify-content: center;
+        border-bottom: 1px dashed #bbb;
+        margin-bottom: 20px;
+        padding-bottom: 5px;
+
+        > div:first-child {
+          flex: 0.5;
+          text-align: right;
+          margin-right: 30px;
+        }
+
+        > div:last-child {
+          flex: 0.5;
+
+          /deep/ .ant-radio-wrapper {
+            margin-right: 30px;
+          }
+        }
+      }
+    }
+
+    .button-container {
+      text-align: center;
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue b/src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue
new file mode 100644
index 0000000..9ca8f85
--- /dev/null
+++ b/src/views/dnc/base/modules/TerminalIndex/EquipmentStartWork.vue
@@ -0,0 +1,128 @@
+<template>
+  <div class="full-screen-container">
+    <slot name="function"/>
+
+    <a-tabs default-active-key="1">
+      <a-tab-pane tab="鎵撳崱涓婁笅鐝�" key="1" dataset="first">
+        <a-space>
+          <div>璁惧鍚嶇О锛�</div>
+          <a-select style="width: 250px">
+
+          </a-select>
+        </a-space>
+
+
+        <div class="button">涓婄彮</div>
+      </a-tab-pane>
+
+      <a-tab-pane tab="褰撳墠璁惧鐘舵��" key="2">
+        <a-table :dataSource="dataSource" :columns="columns" rowKey="id" bordered :pagination="false"/>
+      </a-tab-pane>
+    </a-tabs>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'EquipmentStartWork',
+    data() {
+      return {
+        columns: [
+          {
+            title: '鐢ㄦ埛缂栧彿',
+            align: 'center',
+            dataIndex: 'userId'
+          },
+          {
+            title: '鐢ㄦ埛鍚嶇О',
+            align: 'center',
+            dataIndex: 'username'
+          },
+          {
+            title: '璁惧缂栧彿',
+            align: 'center',
+            dataIndex: 'equipmentId'
+          },
+          {
+            title: '涓婄彮鎵撳崱鏃堕棿',
+            align: 'center',
+            dataIndex: 'startWorkTime'
+          },
+          {
+            title: '涓嬬彮鎵撳崱鏃堕棿',
+            align: 'center',
+            dataIndex: 'finishWorkTime'
+          }
+        ],
+        dataSource: [
+          {
+            id: 1,
+            equipmentId: '3140132',
+            userId: '140016',
+            username: '鏉庨獮',
+            startWorkTime: '2023/11/13 9:29',
+            finishWorkTime: ''
+          },
+          {
+            id: 2,
+            equipmentId: '3140130',
+            userId: '140016',
+            username: '鏉庨獮',
+            startWorkTime: '2023/11/13 9:29',
+            finishWorkTime: ''
+          }
+        ],
+        url: {
+          list: ''
+        }
+      }
+    },
+    created() {
+
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .full-screen-container {
+    padding: 24px;
+    display: flex;
+    flex-direction: column;
+
+    /deep/ .ant-tabs {
+      flex: 1;
+      display: flex;
+      flex-direction: column;
+
+      .ant-tabs-content {
+        width: 100%;
+        flex: 1;
+
+        .ant-tabs-tabpane[dataset='first'] {
+          display: flex;
+          flex-direction: column;
+          justify-content: center;
+          align-items: center;
+
+          .button {
+            font-weight: bold;
+            padding: 40px 80px;
+            border: 1px solid rgba(0, 0, 0, .2);
+            border-radius: 10px;
+            margin-top: 200px;
+            cursor: pointer;
+            box-shadow: 6px 6px 16px rgba(0, 0, 0, 0.2),
+              -6px -6px 16px rgba(255, 255, 255, 0.8),
+            inset 0 0 0 transparent;
+
+            &:hover {
+              box-shadow: 0 0 0 transparent,
+              inset 6px 6px 12px rgba(0, 0, 0, 0.2),
+                inset -6px -6px 12px rgba(255, 255, 255, 0.8);
+            }
+          }
+        }
+      }
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue
new file mode 100644
index 0000000..0f5f685
--- /dev/null
+++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose.vue
@@ -0,0 +1,175 @@
+<template>
+  <div class="page-view-container">
+    <slot name="function"/>
+
+    <a-card :bordered="false">
+      <!-- 鏌ヨ鍖哄煙 -->
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline">
+          <a-row :gutter="24">
+            <a-col :span="4">
+              <a-form-item label="璁惧">
+                <a-select placeholder="璇烽�夋嫨璁惧" v-model="queryParam.equipmentId"></a-select>
+              </a-form-item>
+            </a-col>
+
+            <a-col :span="4">
+              <a-form-item label="寮�濮嬫椂闂�">
+                <a-date-picker style="width: 100%" show-time placeholder="璇烽�夋嫨寮�濮嬫椂闂�" v-model="queryParam.startTime"/>
+              </a-form-item>
+            </a-col>
+
+            <a-col :span="4">
+              <a-form-item label="缁撴潫鏃堕棿">
+                <a-date-picker style="width: 100%" show-time placeholder="璇烽�夋嫨缁撴潫鏃堕棿" v-model="queryParam.endTime"/>
+              </a-form-item>
+            </a-col>
+
+            <a-col :span="4">
+              <a-form-item label="鍋滄満鍘熷洜">
+                <a-select placeholder="璇烽�夋嫨鍋滄満鍘熷洜" v-model="queryParam.closeReason"></a-select>
+              </a-form-item>
+            </a-col>
+
+            <a-col :span="4">
+              <a-form-item label="鍋滄満鏃堕棿">
+                <a-date-picker style="width: 100%" placeholder="璇烽�夋嫨鍋滄満鏃堕棿" v-model="queryParam.closeTime"/>
+              </a-form-item>
+            </a-col>
+
+            <a-col :span="4">
+              <a-space>
+                <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+                <a-button @click="searchReset" icon="reload">閲嶇疆</a-button>
+              </a-space>
+            </a-col>
+          </a-row>
+
+
+        </a-form>
+      </div>
+
+      <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+      <div class="table-operator">
+        <a-button type="primary" @click="handleMaintainShutdown">缁存姢鍋滄満</a-button>
+        <a-button type="primary" @click="handleSplitShutdownInfo">鎷嗗垎鍋滄満淇℃伅</a-button>
+      </div>
+
+      <a-table :dataSource="dataSource" :columns="columns" rowKey="id" bordered :pagination="false"
+               :rowSelection="{selectedRowKeys, onChange: onSelectChange}"/>
+    </a-card>
+
+    <maintain-shutdown-modal ref="maintainShutdownModal"/>
+
+    <split-shutdown-info-modal ref="splitShutdownInfoModal"/>
+  </div>
+</template>
+
+<script>
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import MaintainShutdownModal from './ReportEquipmentClose/MaintainShutdownModal'
+  import SplitShutdownInfoModal from './ReportEquipmentClose/SplitShutdownInfoModal'
+
+  export default {
+    name: 'ReportEquipmentClose',
+    components: { SplitShutdownInfoModal, MaintainShutdownModal },
+    mixins: [JeecgListMixin],
+    data() {
+      return {
+        columns: [
+          {
+            title: '璁惧缂栧彿',
+            align: 'center',
+            dataIndex: 'equipmentId',
+            width: 150
+          },
+          {
+            title: '璁惧鍚嶇О',
+            align: 'center',
+            dataIndex: 'equipmentName'
+          },
+          {
+            title: '鍋滄満缂栧彿',
+            align: 'center',
+            dataIndex: 'shutdownId'
+          },
+          {
+            title: '鍋滄満绫诲瀷',
+            align: 'center',
+            dataIndex: 'shutdownType'
+          },
+          {
+            title: '鍋滄満鏃堕棿',
+            align: 'center',
+            width: 150,
+            dataIndex: 'shutdownDuration'
+          },
+          {
+            title: '寮�濮嬫椂闂�',
+            align: 'center',
+            width: 200,
+            dataIndex: 'startTime'
+          },
+          {
+            title: '缁撴潫鏃堕棿',
+            align: 'center',
+            width: 200,
+            dataIndex: 'endTime'
+          },
+          {
+            title: '褰曞叆绫诲瀷',
+            align: 'center',
+            width: 100,
+            dataIndex: 'recordType'
+          }
+        ],
+        dataSource: [
+          {
+            id: 1,
+            equipmentId: '3140221',
+            equipmentName: '鏁版帶鏈哄簥',
+            shutdownDuration: 360,
+            startTime: '2025-05-20 02:21:49',
+            endTime: '2525-05-20 08:21:59',
+            recordType: '鑷姩涓婃姤'
+          },
+          {
+            id: 2,
+            equipmentId: '3140221',
+            equipmentName: '鏁版帶鏈哄簥',
+            shutdownDuration: 360,
+            startTime: '2025-05-20 02:21:49',
+            endTime: '2525-05-20 08:21:59',
+            recordType: '鑷姩涓婃姤'
+          },
+          {
+            id: 3,
+            equipmentId: '3140221',
+            equipmentName: '鏁版帶鏈哄簥',
+            shutdownDuration: 360,
+            startTime: '2025-05-20 02:21:49',
+            endTime: '2525-05-20 08:21:59',
+            recordType: '鑷姩涓婃姤'
+          }
+        ],
+        url: {
+          list: ''
+        }
+      }
+    },
+    methods: {
+      handleMaintainShutdown() {
+        this.$refs.maintainShutdownModal.visible = true
+        this.$refs.maintainShutdownModal.model = {}
+      },
+
+      handleSplitShutdownInfo() {
+        this.$refs.splitShutdownInfoModal.visible = true
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+
+</style>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue
new file mode 100644
index 0000000..36053ea
--- /dev/null
+++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/MaintainShutdownModal.vue
@@ -0,0 +1,68 @@
+<template>
+  <a-modal :visible="visible" title="缁存姢鍋滄満" @ok="handleSubmit" @cancel="handleCancel">
+    <a-form-model ref="form" :model="model" :rules="validateRules" :labelCol="{span:5}" :wrapperCol="{span:18}">
+      <a-form-model-item prop="closeReason" label="鍋滄満鍘熷洜">
+        <a-select v-model="model.closeReason" placeholder="璇烽�夋嫨鍋滄満鍘熷洜">
+          <a-select-option v-for="item in closeReasonList" :key="item.id">
+            {{item.label}}
+          </a-select-option>
+        </a-select>
+      </a-form-model-item>
+    </a-form-model>
+  </a-modal>
+</template>
+
+<script>
+  export default {
+    name: 'MaintainShutdownModal',
+    data() {
+      return {
+        visible: false,
+        model: {},
+        validateRules: {
+          closeReason: [{ required: true, message: '璇烽�夋嫨鍋滄満鍘熷洜锛�' }]
+        },
+        closeReasonList: [
+          {
+            id: 1,
+            label: '鍚冮キ鏃堕棿浼戞伅'
+          },
+          {
+            id: 2,
+            label: '宸ヤ綔鏃堕棿浼戞伅'
+          },
+          {
+            id: 3,
+            label: '璁″垝鎬у仠鐢�'
+          },
+          {
+            id: 4,
+            label: '寰呮枡鍋滄満'
+          },
+          {
+            id: 5,
+            label: '棣栦欢璋冭瘯'
+          },
+          {
+            id: 6,
+            label: '鍒�閲忓叿鍑嗗'
+          }
+        ]
+      }
+    },
+    methods: {
+      handleSubmit() {
+
+      },
+
+      handleCancel() {
+        this.$refs.form.clearValidate()
+        this.visible = false
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue
new file mode 100644
index 0000000..967c357
--- /dev/null
+++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentClose/SplitShutdownInfoModal.vue
@@ -0,0 +1,121 @@
+<template>
+  <a-modal :visible="visible" :width="800" title="鎷嗗垎鍋滄満淇℃伅" @ok="handleSubmit" @cancel="handleCancel">
+    <a-form-model ref="form" :model="model" :rules="validateRules" :labelCol="{span:8}" :wrapperCol="{span:12}">
+      <a-row>
+        <a-col :span="10">
+          <a-form-model-item prop="startTime" label="寮�濮嬫椂闂�">
+            <a-date-picker show-time value-format="YYYY-MM-DD HH:mm:ss" v-model="model.startTime"/>
+          </a-form-model-item>
+        </a-col>
+      </a-row>
+
+      <div v-for="item in splitList" :key="item.title">
+        <a-divider orientation="left">{{item.title}}</a-divider>
+
+        <a-row>
+          <a-col :span="10">
+            <a-form-model-item prop="endTime" label="缁撴潫鏃ユ湡">
+              <a-date-picker show-time value-format="YYYY-MM-DD HH:mm:ss" v-model="item.splitParams.endTime"/>
+            </a-form-model-item>
+          </a-col>
+
+          <a-col :span="10">
+            <a-form-model-item prop="closeReason" label="鍋滄満鍘熷洜">
+              <a-select v-model="item.splitParams.closeReason" placeholder="璇烽�夋嫨鍋滄満鍘熷洜">
+                <a-select-option v-for="item in closeReasonList" :key="item.id">
+                  {{item.label}}
+                </a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+
+          <a-col :span="4">
+            <a-form-model-item label="閫夋嫨">
+              <a-checkbox @change="handleCheckboxChange(item,$event)"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </div>
+    </a-form-model>
+  </a-modal>
+</template>
+
+<script>
+  export default {
+    name: 'SplitShutdownInfoModal',
+    data() {
+      return {
+        visible: false,
+        model: {},
+        validateRules: {
+          startTime: [{ required: true, message: '璇烽�夋嫨寮�濮嬫椂闂达紒', trigger: 'change' }]
+        },
+        closeReasonList: [
+          {
+            id: 1,
+            label: '鍚冮キ鏃堕棿浼戞伅'
+          },
+          {
+            id: 2,
+            label: '宸ヤ綔鏃堕棿浼戞伅'
+          },
+          {
+            id: 3,
+            label: '璁″垝鎬у仠鐢�'
+          },
+          {
+            id: 4,
+            label: '寰呮枡鍋滄満'
+          },
+          {
+            id: 5,
+            label: '棣栦欢璋冭瘯'
+          },
+          {
+            id: 6,
+            label: '鍒�閲忓叿鍑嗗'
+          }
+        ],
+        splitList: [
+          {
+            title: '鎷嗗垎涓�娈�',
+            splitParams: {}
+          },
+          {
+            title: '鎷嗗垎浜屾',
+            splitParams: {}
+          },
+          {
+            title: '鎷嗗垎涓夋',
+            splitParams: {}
+          }
+        ]
+      }
+    },
+    methods: {
+      handleCheckboxChange(record, event) {
+        console.log('record', record)
+        record.splitParams.checked = event.target.checked
+      },
+
+      handleSubmit() {
+        this.$refs.form.validate(valid => {
+          if (valid) {
+
+          } else {
+            return false
+          }
+        })
+      },
+
+      handleCancel() {
+        this.$refs.form.clearValidate()
+        this.visible = false
+      }
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue
new file mode 100644
index 0000000..8514266
--- /dev/null
+++ b/src/views/dnc/base/modules/TerminalIndex/ReportEquipmentFault.vue
@@ -0,0 +1,66 @@
+<template>
+  <div>
+    <slot name="function"/>
+
+    <div class="content-container">
+      <a-form-model ref="form" :model="model" :rules="validateRules" :labelCol="{span:10}" :wrapperCol="{span:6}">
+        <a-form-model-item label="璁惧鍚嶇О" prop="equipmentId">
+          <a-select placeholder="璇烽�夋嫨璁惧" v-model="model.equipmentId"></a-select>
+        </a-form-model-item>
+        <a-form-model-item label="鏁呴殰鍘熷洜" prop="faultReasonId">
+          <a-select placeholder="璇烽�夋嫨鏁呴殰鍘熷洜" v-model="model.faultReasonId"></a-select>
+        </a-form-model-item>
+        <a-form-model-item label="鏁呴殰鎻忚堪" prop="faultDescription">
+          <a-textarea placeholder="璇疯緭鍏ユ晠闅滄弿杩�" v-model="model.faultDescription"/>
+        </a-form-model-item>
+
+        <div style="text-align: center">
+          <a-space>
+            <a-button @click="handleReportFault">鏁呴殰涓婃姤</a-button>
+            <a-button>鏁呴殰瑙i櫎</a-button>
+          </a-space>
+        </div>
+      </a-form-model>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'ReportEquipmentFault',
+    data() {
+      return {
+        model: {},
+        validateRules: {
+          equipmentId: [{ required: true, message: '璇烽�夋嫨璁惧锛�' }],
+          faultReasonId: [{ required: true, message: '璇烽�夋嫨鏁呴殰鍘熷洜锛�' }],
+          faultDescription: [{ required: true, message: '璇疯緭鍏ユ晠闅滄弿杩帮紒' }]
+        }
+      }
+    },
+    methods: {
+      handleReportFault() {
+        this.$refs.form.validate(valid => {
+          if (valid) {
+
+          } else {
+            return false
+          }
+        })
+      }
+    }
+  }
+</script>
+
+<style scoped lang="less">
+  .content-container {
+    flex: 1;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+
+    /deep/ .ant-form {
+      width: 100%;
+    }
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/eam/dispose/EamEquipmentLeanOutList.vue b/src/views/eam/dispose/EamEquipmentLeanOutList.vue
index afab556..ec649a4 100644
--- a/src/views/eam/dispose/EamEquipmentLeanOutList.vue
+++ b/src/views/eam/dispose/EamEquipmentLeanOutList.vue
@@ -86,7 +86,7 @@
             </a-dropdown>
           </template>
            <template v-else>
-              <a @click="handleDetail(record)">璇︽儏</a>
+             <a href="javascript:;" @click="handleDetail(record)">璇︽儏</a>
           </template>
         </span>
 
diff --git a/src/views/eam/dispose/EamEquipmentScrapList.vue b/src/views/eam/dispose/EamEquipmentScrapList.vue
index 61fbecf..d9986e6 100644
--- a/src/views/eam/dispose/EamEquipmentScrapList.vue
+++ b/src/views/eam/dispose/EamEquipmentScrapList.vue
@@ -1,46 +1,47 @@
 <template>
-  <a-card :bordered="false">
+  <a-card :bordered='false'>
 
     <!-- 鏌ヨ鍖哄煙 -->
-    <div class="table-page-search-wrapper">
-      <a-form layout="inline" @keyup.enter.native="searchQuery">
-        <a-row :gutter="24">
+    <div class='table-page-search-wrapper'>
+      <a-form layout='inline' @keyup.enter.native='searchQuery'>
+        <a-row :gutter='24'>
 
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="鍒犻櫎鏍囪">
-              <a-input placeholder="璇疯緭鍏ュ垹闄ゆ爣璁�" v-model="queryParam.delFlag"></a-input>
+          <a-col :lg='7' :md='8' :sm='24' :xl='6'>
+            <a-form-item label='璁惧缂栧彿'>
+              <lx-search-equipment-select v-model='queryParam.equipmentId'
+                                          placeholder='璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储'></lx-search-equipment-select>
             </a-form-item>
           </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="鍗曟嵁鍙�">
-              <a-input placeholder="璇疯緭鍏ュ崟鎹彿" v-model="queryParam.code"></a-input>
+          <a-col :lg='7' :md='8' :sm='24' :xl='6'>
+            <a-form-item label='鍗曟嵁鍙�'>
+              <a-input v-model='queryParam.code' placeholder='璇疯緭鍏ュ崟鎹彿'></a-input>
             </a-form-item>
           </a-col>
-        <template v-if="toggleSearchStatus">
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="璁惧ID">
-              <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="queryParam.equipmentId"></a-input>
-            </a-form-item>
-          </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="杞/鎶ュ簾">
-              <a-input placeholder="璇疯緭鍏ヨ浆璁�/鎶ュ簾" v-model="queryParam.scrapType"></a-input>
-            </a-form-item>
-          </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="鐢宠浜�">
-              <a-input placeholder="璇疯緭鍏ョ敵璇蜂汉" v-model="queryParam.reportUser"></a-input>
-            </a-form-item>
-          </a-col>
+          <template v-if='toggleSearchStatus'>
+            <a-col :lg='7' :md='8' :sm='24' :xl='6'>
+              <a-form-item label='璁惧ID'>
+                <a-input v-model='queryParam.equipmentId' placeholder='璇疯緭鍏ヨ澶嘔D'></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg='7' :md='8' :sm='24' :xl='6'>
+              <a-form-item label='杞/鎶ュ簾'>
+                <a-input v-model='queryParam.scrapType' placeholder='璇疯緭鍏ヨ浆璁�/鎶ュ簾'></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg='7' :md='8' :sm='24' :xl='6'>
+              <a-form-item label='鐢宠浜�'>
+                <a-input v-model='queryParam.reportUser' placeholder='璇疯緭鍏ョ敵璇蜂汉'></a-input>
+              </a-form-item>
+            </a-col>
           </template>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
-              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
-              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
-              <a @click="handleToggleSearch" style="margin-left: 8px">
-                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
-                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
-              </a>
+          <a-col :lg='7' :md='8' :sm='24' :xl='6'>
+            <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' type='primary' @click='searchReset'>閲嶇疆</a-button>
+              <!--              <a @click="handleToggleSearch" style="margin-left: 8px">-->
+              <!--                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}-->
+              <!--                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>-->
+              <!--              </a>-->
             </span>
           </a-col>
 
@@ -49,54 +50,66 @@
     </div>
 
     <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
-    <div class="table-operator">
-      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
-      <a-button type="primary" icon="download" @click="handleExportXls('璁惧鎶ュ簾(杞)')">瀵煎嚭</a-button>
-      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
-        <a-button type="primary" icon="import">瀵煎叆</a-button>
-      </a-upload>
-      <a-dropdown v-if="selectedRowKeys.length > 0">
-        <a-menu slot="overlay">
-          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item>
+    <div class='table-operator'>
+      <a-button icon='plus' type='primary' @click='handleAdd'>鏂板</a-button>
+      <a-dropdown v-if='selectedRowKeys.length > 0'>
+        <a-menu slot='overlay'>
+          <a-menu-item key='1' @click='batchDel'>
+            <a-icon type='delete' />
+            鍒犻櫎
+          </a-menu-item>
         </a-menu>
-        <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button>
+        <a-button style='margin-left: 8px'> 鎵归噺鎿嶄綔
+          <a-icon type='down' />
+        </a-button>
       </a-dropdown>
     </div>
 
     <!-- table鍖哄煙-begin -->
     <div>
-      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
-        <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;'>
+        <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"
+        ref='table'
+        :columns='columns'
+        :dataSource='dataSource'
+        :loading='loading'
+        :pagination='ipagination'
+        :rowSelection='{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}'
         bordered
-        rowKey="id"
-        :columns="columns"
-        :dataSource="dataSource"
-        :pagination="ipagination"
-        :loading="loading"
-        class="j-table-force-nowrap"
-        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
-        @change="handleTableChange">
+        class='j-table-force-nowrap'
+        rowKey='id'
+        size='middle'
+        @change='handleTableChange'>
 
-        <span slot="action" slot-scope="text, record">
-          <a @click="handleEdit(record)">缂栬緫</a>
+         <span slot='action' slot-scope='text, record'>
+          <template v-if="record.scrapStatus === 'WAIT_SUBMIT'">
+              <a-popconfirm title='纭畾鎻愪氦鍚�?' @confirm='() => handleSubmit(record.id)'>
+              <a>鎻愪氦</a>
+            </a-popconfirm>
+              <a-divider type='vertical' />
 
-          <a-divider type="vertical" />
           <a-dropdown>
-            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
-            <a-menu slot="overlay">
+            <a class='ant-dropdown-link'>鏇村 <a-icon type='down' /></a>
+            <a-menu slot='overlay'>
+               <a-menu-item>
+                 <a @click='handleEdit(record)'>缂栬緫</a>
+              </a-menu-item>
               <a-menu-item>
-                <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                <a-popconfirm title='纭畾鍒犻櫎鍚�?' @confirm='() => handleDelete(record.id)'>
                   <a>鍒犻櫎</a>
                 </a-popconfirm>
               </a-menu-item>
             </a-menu>
           </a-dropdown>
+            </template>
+          <template v-else>
+            <a href='javascript:;' @click='handleDetail(record)'>璇︽儏</a>
+          </template>
         </span>
 
       </a-table>
@@ -104,122 +117,156 @@
     <!-- table鍖哄煙-end -->
 
     <!-- 琛ㄥ崟鍖哄煙 -->
-    <eamEquipmentScrap-modal ref="modalForm" @ok="modalFormOk"></eamEquipmentScrap-modal>
+    <eamEquipmentScrap-modal ref='modalForm' @ok='modalFormOk'></eamEquipmentScrap-modal>
   </a-card>
 </template>
 
 <script>
-  import '@/assets/less/TableExpand.less'
-  import EamEquipmentScrapModal from './modules/EamEquipmentScrapModal'
-  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import '@/assets/less/TableExpand.less'
+import EamEquipmentScrapModal from './modules/EamEquipmentScrapModal'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
+import { getAction } from '@api/manage'
 
-  export default {
-    name: "EamEquipmentScrapList",
-    mixins:[JeecgListMixin],
-    components: {
-      EamEquipmentScrapModal
-    },
-    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: 'delFlag'
-           },
-		   {
-            title: '鍗曟嵁鍙�',
-            align:"center",
-            dataIndex: 'code'
-           },
-		   {
-            title: '璁惧ID',
-            align:"center",
-            dataIndex: 'equipmentId'
-           },
-		   {
-            title: '杞/鎶ュ簾',
-            align:"center",
-            dataIndex: 'scrapType'
-           },
-		   {
-            title: '鐢宠浜�',
-            align:"center",
-            dataIndex: 'reportUser'
-           },
-		   {
-            title: '澶勭疆鏃堕棿',
-            align:"center",
-            dataIndex: 'scrapTime'
-           },
-		   {
-            title: '澶勭疆鐞嗙敱',
-            align:"center",
-            dataIndex: 'scrapReason'
-           },
-		   {
-            title: '澶勭疆閲戦',
-            align:"center",
-            dataIndex: 'scrapAmount'
-           },
-		   {
-            title: '瀹℃牳浜�',
-            align:"center",
-            dataIndex: 'approvalUser'
-           },
-		   {
-            title: '瀹℃牳鎰忚',
-            align:"center",
-            dataIndex: 'approvalComment'
-           },
-		   {
-            title: '瀹℃牳鏃堕棿',
-            align:"center",
-            dataIndex: 'approvalTime'
-           },
-		   {
-            title: '澶囨敞',
-            align:"center",
-            dataIndex: 'remark'
-           },
-          {
-            title: '鎿嶄綔',
-            dataIndex: 'action',
-            align:"center",
-            scopedSlots: { customRender: 'action' },
+
+export default {
+  name: 'EamEquipmentScrapList',
+  mixins: [JeecgListMixin],
+  components: {
+    EamEquipmentScrapModal,
+    LxSearchEquipmentSelect
+  },
+  data() {
+    return {
+      description: '璁惧鎶ュ簾(杞)绠$悊椤甸潰',
+      // 琛ㄥご
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
           }
-        ],
-		url: {
-          list: "/eam/eamEquipmentScrap/list",
-          delete: "/eam/eamEquipmentScrap/delete",
-          deleteBatch: "/eam/eamEquipmentScrap/deleteBatch",
-          exportXlsUrl: "eam/eamEquipmentScrap/exportXls",
-          importExcelUrl: "eam/eamEquipmentScrap/importExcel",
-       },
+        },
+        {
+          title: '鍗曟嵁鍙�',
+          align: 'center',
+          dataIndex: 'code'
+        },
+        {
+          title: '璁惧缂栧彿',
+          align: 'center',
+          dataIndex: 'equipmentCode'
+        },
+        {
+          title: '璁惧鍚嶇О',
+          align: 'center',
+          dataIndex: 'equipmentName'
+        },
+        {
+          title: '杞/鎶ュ簾',
+          align: 'center',
+          dataIndex: 'scrapType_dictText'
+        },
+        {
+          title: '鐢宠浜�',
+          align: 'center',
+          dataIndex: 'reportUser_dictText'
+        },
+        {
+          title: '澶勭疆鏃堕棿',
+          align: 'center',
+          dataIndex: 'scrapTime'
+        },
+        {
+          title: '澶勭疆鐞嗙敱',
+          align: 'center',
+          dataIndex: 'scrapReason'
+        },
+        {
+          title: '澶勭疆閲戦',
+          align: 'center',
+          dataIndex: 'scrapAmount'
+        },
+        {
+          title: '澶勭疆鐘舵��',
+          align: 'center',
+          dataIndex: 'scrapStatus_dictText'
+        },
+        {
+          title: '瀹℃牳浜�',
+          align: 'center',
+          dataIndex: 'approvalUser_dictText'
+        },
+        {
+          title: '瀹℃牳鎰忚',
+          align: 'center',
+          dataIndex: 'approvalComment'
+        },
+        {
+          title: '瀹℃牳鏃堕棿',
+          align: 'center',
+          dataIndex: 'approvalTime'
+        },
+        {
+          title: '澶囨敞',
+          align: 'center',
+          dataIndex: 'remark'
+        },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: 'center',
+          fixed: 'right',
+          width: 150,
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/eam/eamEquipmentScrap/list',
+        delete: '/eam/eamEquipmentScrap/delete',
+        deleteBatch: '/eam/eamEquipmentScrap/deleteBatch',
+        submit: '/eam/eamEquipmentScrap/submit'
+      }
     }
   },
   computed: {
-    importExcelUrl: function(){
-      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    importExcelUrl: function() {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
     }
   },
-    methods: {
-     
+  methods: {
+    handleSubmit(id) {
+      if (!this.url.submit) {
+        this.$message.error('璇疯缃畊rl.submit灞炴��!')
+        return
+      }
+      let that = this
+      getAction(that.url.submit, { 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
+          })
+        }
+      })
     }
   }
+}
 </script>
 <style scoped>
-  @import '~@assets/less/common.less';
+@import '~@assets/less/common.less';
 </style>
\ No newline at end of file
diff --git a/src/views/eam/dispose/EamEquipmentSealUpList.vue b/src/views/eam/dispose/EamEquipmentSealUpList.vue
index de6c055..c26873b 100644
--- a/src/views/eam/dispose/EamEquipmentSealUpList.vue
+++ b/src/views/eam/dispose/EamEquipmentSealUpList.vue
@@ -79,7 +79,14 @@
                   <a>鍒犻櫎</a>
                 </a-popconfirm>
            </template>
-          <template v-else>
+          <template v-if="record.sealStatus === 'SEALED'">
+             <a-popconfirm title='纭畾鍚皝鍚�?' @confirm='() => handleUnseal(record.id)'>
+              <a>鍚皝</a>
+            </a-popconfirm>
+             <a-divider type='vertical' />
+              <a @click='handleDetail(record)'>璇︽儏</a>
+          </template>
+          <template v-if="record.sealStatus === 'COMPLETE'|| record.sealStatus === 'WAIT_UNSEALING_AUDIT' ">
               <a @click='handleDetail(record)'>璇︽儏</a>
           </template>
         </span>
@@ -188,7 +195,8 @@
         list: '/eam/eamEquipmentSealUp/list',
         delete: '/eam/eamEquipmentSealUp/delete',
         deleteBatch: '/eam/eamEquipmentSealUp/deleteBatch',
-        submit: '/eam/eamEquipmentSealUp/submit'
+        submit: '/eam/eamEquipmentSealUp/submit',
+        unseal: '/eam/eamEquipmentSealUp/unseal'
       }
     }
   },
@@ -222,6 +230,31 @@
           })
         }
       })
+    },
+    handleUnseal(id) {
+      if (!this.url.unseal) {
+        this.$message.error('璇疯缃畊rl.submit灞炴��!')
+        return
+      }
+      let that = this
+      getAction(that.url.unseal, { 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
+          })
+        }
+      })
     }
   }
 }
diff --git a/src/views/eam/dispose/EamEquipmentTransferList.vue b/src/views/eam/dispose/EamEquipmentTransferList.vue
index 345a008..c49a02a 100644
--- a/src/views/eam/dispose/EamEquipmentTransferList.vue
+++ b/src/views/eam/dispose/EamEquipmentTransferList.vue
@@ -1,46 +1,43 @@
 <template>
-  <a-card :bordered="false">
+  <a-card :bordered='false'>
 
     <!-- 鏌ヨ鍖哄煙 -->
-    <div class="table-page-search-wrapper">
-      <a-form layout="inline" @keyup.enter.native="searchQuery">
-        <a-row :gutter="24">
+    <div class='table-page-search-wrapper'>
+      <a-form layout='inline' @keyup.enter.native='searchQuery'>
+        <a-row :gutter='24'>
 
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="鍒犻櫎鏍囪">
-              <a-input placeholder="璇疯緭鍏ュ垹闄ゆ爣璁�" v-model="queryParam.delFlag"></a-input>
+          <a-col :lg='7' :md='8' :sm='24' :xl='6'>
+            <a-form-item label='璁惧缂栧彿'>
+              <lx-search-equipment-select v-model='queryParam.equipmentId'
+                                          placeholder='璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储'></lx-search-equipment-select>
+            </a-form-item>
+
+          </a-col>
+          <a-col :lg='7' :md='8' :sm='24' :xl='6'>
+            <a-form-item label='鍗曟嵁鍙�'>
+              <a-input v-model='queryParam.code' placeholder='璇疯緭鍏ュ崟鎹彿'></a-input>
             </a-form-item>
           </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="鍗曟嵁鍙�">
-              <a-input placeholder="璇疯緭鍏ュ崟鎹彿" v-model="queryParam.code"></a-input>
-            </a-form-item>
-          </a-col>
-        <template v-if="toggleSearchStatus">
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="璁惧ID">
-              <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="queryParam.equipmentId"></a-input>
-            </a-form-item>
-          </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="璋冨嚭閮ㄩ棬">
-              <a-input placeholder="璇疯緭鍏ヨ皟鍑洪儴闂�" v-model="queryParam.oldDepartId"></a-input>
-            </a-form-item>
-          </a-col>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="璋冨叆閮ㄩ棬">
-              <a-input placeholder="璇疯緭鍏ヨ皟鍏ラ儴闂�" v-model="queryParam.newDepartId"></a-input>
-            </a-form-item>
-          </a-col>
+          <template v-if='toggleSearchStatus'>
+            <a-col :lg='7' :md='8' :sm='24' :xl='6'>
+              <a-form-item label='璋冨嚭閮ㄩ棬'>
+                <a-input v-model='queryParam.oldDepartId' placeholder='璇疯緭鍏ヨ皟鍑洪儴闂�'></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :lg='7' :md='8' :sm='24' :xl='6'>
+              <a-form-item label='璋冨叆閮ㄩ棬'>
+                <a-input v-model='queryParam.newDepartId' placeholder='璇疯緭鍏ヨ皟鍏ラ儴闂�'></a-input>
+              </a-form-item>
+            </a-col>
           </template>
-          <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
-              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
-              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
-              <a @click="handleToggleSearch" style="margin-left: 8px">
-                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
-                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
-              </a>
+          <a-col :lg='7' :md='8' :sm='24' :xl='6'>
+            <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' type='primary' @click='searchReset'>閲嶇疆</a-button>
+<!--              <a style='margin-left: 8px' @click='handleToggleSearch'>-->
+<!--                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}-->
+<!--                <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />-->
+<!--              </a>-->
             </span>
           </a-col>
 
@@ -49,54 +46,67 @@
     </div>
 
     <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
-    <div class="table-operator">
-      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
-      <a-button type="primary" icon="download" @click="handleExportXls('璁惧褰掑睘鍙樺姩')">瀵煎嚭</a-button>
-      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
-        <a-button type="primary" icon="import">瀵煎叆</a-button>
-      </a-upload>
-      <a-dropdown v-if="selectedRowKeys.length > 0">
-        <a-menu slot="overlay">
-          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item>
+    <div class='table-operator'>
+      <a-button icon='plus' type='primary' @click='handleAdd'>鏂板</a-button>
+      <a-dropdown v-if='selectedRowKeys.length > 0'>
+        <a-menu slot='overlay'>
+          <a-menu-item key='1' @click='batchDel'>
+            <a-icon type='delete' />
+            鍒犻櫎
+          </a-menu-item>
         </a-menu>
-        <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button>
+        <a-button style='margin-left: 8px'> 鎵归噺鎿嶄綔
+          <a-icon type='down' />
+        </a-button>
       </a-dropdown>
     </div>
 
     <!-- table鍖哄煙-begin -->
     <div>
-      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
-        <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;'>
+        <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"
+        ref='table'
+        :columns='columns'
+        :dataSource='dataSource'
+        :loading='loading'
+        :pagination='ipagination'
+        :rowSelection='{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}'
+        :scroll="{ x: 'max-content' }"
         bordered
-        rowKey="id"
-        :columns="columns"
-        :dataSource="dataSource"
-        :pagination="ipagination"
-        :loading="loading"
-        class="j-table-force-nowrap"
-        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
-        @change="handleTableChange">
+        class='j-table-force-nowrap'
+        rowKey='id'
+        size='middle'
+        @change='handleTableChange'>
 
-        <span slot="action" slot-scope="text, record">
-          <a @click="handleEdit(record)">缂栬緫</a>
+        <span slot='action' slot-scope='text, record'>
+          <template v-if="record.transferStatus === 'WAIT_SUBMIT'">
+              <a-popconfirm title='纭畾鎻愪氦鍚�?' @confirm='() => handleSubmit(record.id)'>
+              <a>鎻愪氦</a>
+            </a-popconfirm>
+              <a-divider type='vertical' />
 
-          <a-divider type="vertical" />
           <a-dropdown>
-            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
-            <a-menu slot="overlay">
+            <a class='ant-dropdown-link'>鏇村 <a-icon type='down' /></a>
+            <a-menu slot='overlay'>
+               <a-menu-item>
+                 <a @click='handleEdit(record)'>缂栬緫</a>
+              </a-menu-item>
               <a-menu-item>
-                <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                <a-popconfirm title='纭畾鍒犻櫎鍚�?' @confirm='() => handleDelete(record.id)'>
                   <a>鍒犻櫎</a>
                 </a-popconfirm>
               </a-menu-item>
             </a-menu>
           </a-dropdown>
+            </template>
+          <template v-else>
+            <a href='javascript:;' @click='handleDetail(record)'>璇︽儏</a>
+          </template>
         </span>
 
       </a-table>
@@ -104,122 +114,163 @@
     <!-- table鍖哄煙-end -->
 
     <!-- 琛ㄥ崟鍖哄煙 -->
-    <eamEquipmentTransfer-modal ref="modalForm" @ok="modalFormOk"></eamEquipmentTransfer-modal>
+    <eamEquipmentTransfer-modal ref='modalForm' @ok='modalFormOk'></eamEquipmentTransfer-modal>
   </a-card>
 </template>
 
 <script>
-  import '@/assets/less/TableExpand.less'
-  import EamEquipmentTransferModal from './modules/EamEquipmentTransferModal'
-  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import '@/assets/less/TableExpand.less'
+import EamEquipmentTransferModal from './modules/EamEquipmentTransferModal'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { getAction } from '@api/manage'
+import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
 
-  export default {
-    name: "EamEquipmentTransferList",
-    mixins:[JeecgListMixin],
-    components: {
-      EamEquipmentTransferModal
-    },
-    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: 'delFlag'
-           },
-		   {
-            title: '鍗曟嵁鍙�',
-            align:"center",
-            dataIndex: 'code'
-           },
-		   {
-            title: '璁惧ID',
-            align:"center",
-            dataIndex: 'equipmentId'
-           },
-		   {
-            title: '璋冨嚭閮ㄩ棬',
-            align:"center",
-            dataIndex: 'oldDepartId'
-           },
-		   {
-            title: '璋冨叆閮ㄩ棬',
-            align:"center",
-            dataIndex: 'newDepartId'
-           },
-		   {
-            title: '鐢宠浜�',
-            align:"center",
-            dataIndex: 'reportUser'
-           },
-		   {
-            title: '鍙樺姩鍘熷洜',
-            align:"center",
-            dataIndex: 'transferReason'
-           },
-		   {
-            title: '鍙樺姩鐘舵��',
-            align:"center",
-            dataIndex: 'transferStatus'
-           },
-		   {
-            title: '鍙樺姩鏃ユ湡',
-            align:"center",
-            dataIndex: 'transferTime'
-           },
-		   {
-            title: '瀹℃牳浜�',
-            align:"center",
-            dataIndex: 'approvalUser'
-           },
-		   {
-            title: '瀹℃牳鏃堕棿',
-            align:"center",
-            dataIndex: 'approvalTime'
-           },
-		   {
-            title: '澶囨敞',
-            align:"center",
-            dataIndex: 'remark'
-           },
-          {
-            title: '鎿嶄綔',
-            dataIndex: 'action',
-            align:"center",
-            scopedSlots: { customRender: 'action' },
+
+export default {
+  name: 'EamEquipmentTransferList',
+  mixins: [JeecgListMixin],
+  components: {
+    EamEquipmentTransferModal,
+    LxSearchEquipmentSelect
+  },
+  data() {
+    return {
+      description: '璁惧褰掑睘鍙樺姩绠$悊椤甸潰',
+      // 琛ㄥご
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          fixed: 'left',
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
           }
-        ],
-		url: {
-          list: "/eam/eamEquipmentTransfer/list",
-          delete: "/eam/eamEquipmentTransfer/delete",
-          deleteBatch: "/eam/eamEquipmentTransfer/deleteBatch",
-          exportXlsUrl: "eam/eamEquipmentTransfer/exportXls",
-          importExcelUrl: "eam/eamEquipmentTransfer/importExcel",
-       },
+        },
+        {
+          title: '鍗曟嵁鍙�',
+          align: 'center',
+          fixed: 'left',
+          dataIndex: 'code'
+        },
+        {
+          title: '璁惧缂栧彿',
+          align: 'center',
+          fixed: 'left',
+          dataIndex: 'equipmentCode'
+        },
+        {
+          title: '璁惧鍚嶇О',
+          align: 'center',
+          fixed: 'left',
+          dataIndex: 'equipmentName'
+        },
+        {
+          title: '璋冨嚭閮ㄩ棬',
+          align: 'center',
+          dataIndex: 'oldDepartId_dictText'
+        },
+        {
+          title: '璋冨叆閮ㄩ棬',
+          align: 'center',
+          dataIndex: 'newDepartId_dictText'
+        },
+        {
+          title: '鐢宠浜�',
+          align: 'center',
+          dataIndex: 'reportUser_dictText'
+        },
+        {
+          title: '鍙樺姩鍘熷洜',
+          align: 'center',
+          dataIndex: 'transferReason'
+        },
+        {
+          title: '鍙樺姩鐘舵��',
+          align: 'center',
+          dataIndex: 'transferStatus_dictText'
+        },
+        {
+          title: '鍙樺姩鏃ユ湡',
+          align: 'center',
+          dataIndex: 'transferTime'
+        },
+        {
+          title: '瀹℃牳浜�',
+          align: 'center',
+          dataIndex: 'approvalUser_dictText'
+        },
+        {
+          title: '瀹℃牳鎰忚',
+          align: 'center',
+          dataIndex: 'approvalComment'
+        },
+        {
+          title: '瀹℃牳鏃堕棿',
+          align: 'center',
+          dataIndex: 'approvalTime'
+        },
+        {
+          title: '澶囨敞',
+          align: 'center',
+          dataIndex: 'remark'
+        },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: 'center',
+          fixed: 'right',
+          width: 150,
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/eam/eamEquipmentTransfer/list',
+        delete: '/eam/eamEquipmentTransfer/delete',
+        deleteBatch: '/eam/eamEquipmentTransfer/deleteBatch',
+        submit: '/eam/eamEquipmentTransfer/submit'
+      }
     }
   },
   computed: {
-    importExcelUrl: function(){
-      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    importExcelUrl: function() {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
     }
   },
-    methods: {
-     
+  methods: {
+    handleSubmit(id) {
+      if (!this.url.submit) {
+        this.$message.error('璇疯缃畊rl.submit灞炴��!')
+        return
+      }
+      let that = this
+      this.loading = true
+      getAction(that.url.submit, { 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
+          })
+        }
+      }).finally(()=>{
+        this.loading = false
+      })
     }
   }
+}
 </script>
 <style scoped>
-  @import '~@assets/less/common.less';
+@import '~@assets/less/common.less';
 </style>
\ No newline at end of file
diff --git a/src/views/eam/dispose/modules/EamEquipmentLeanOutModal.vue b/src/views/eam/dispose/modules/EamEquipmentLeanOutModal.vue
index 920acdd..59f6ec8 100644
--- a/src/views/eam/dispose/modules/EamEquipmentLeanOutModal.vue
+++ b/src/views/eam/dispose/modules/EamEquipmentLeanOutModal.vue
@@ -3,6 +3,7 @@
     :title="title"
     :width="800"
     :visible="visible"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
     :confirmLoading="confirmLoading"
     switchFullscreen
     @ok="handleOk"
@@ -15,12 +16,13 @@
           <a-input placeholder="缂栫爜绯荤粺鑷姩鐢熸垚" v-model="model.code" disabled />
         </a-form-model-item>
         <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧缂栧彿">
-          <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储"
+          <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" :disabled="disableSubmit"
                                       v-model="model.equipmentId"></lx-search-equipment-select>
         </a-form-model-item>
 
         <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leanDepartId" label="鍊熷叆杞﹂棿">
           <a-tree-select v-model="model.leanDepartId"
+                         :disabled="disableSubmit"
                          style="width: 100%"
                          :tree-data="treeData"
                          :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
@@ -31,10 +33,10 @@
           </a-tree-select>
         </a-form-model-item>
         <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leanReason" label="鍊熺敤鍘熷洜">
-          <a-textarea placeholder="璇疯緭鍏ュ�熺敤鍘熷洜" v-model="model.leanReason" />
+          <a-textarea placeholder="璇疯緭鍏ュ�熺敤鍘熷洜" :disabled="disableSubmit" v-model="model.leanReason" />
         </a-form-model-item>
         <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞">
-          <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" />
+          <a-textarea placeholder="璇疯緭鍏ュ娉�" :disabled="disableSubmit" v-model="model.remark" />
         </a-form-model-item>
       </a-form-model>
     </a-spin>
@@ -98,8 +100,9 @@
         this.model = Object.assign({}, record)
         this.visible = true
         this.editable = true
-        this.loadDetail(record.id)
+        // this.loadDetail(record.id)
       },
+
       close () {
         this.$emit('close');
         this.visible = false;
diff --git a/src/views/eam/dispose/modules/EamEquipmentScrapModal.vue b/src/views/eam/dispose/modules/EamEquipmentScrapModal.vue
index a7d63d0..53dcfa5 100644
--- a/src/views/eam/dispose/modules/EamEquipmentScrapModal.vue
+++ b/src/views/eam/dispose/modules/EamEquipmentScrapModal.vue
@@ -1,144 +1,145 @@
 <template>
   <j-modal
-    :title="title"
-    :width="800"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
+    :confirmLoading='confirmLoading'
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    :title='title'
+    :visible='visible'
+    :width='800'
+    cancelText='鍏抽棴'
     switchFullscreen
-    @ok="handleOk"
-    @cancel="handleCancel"
-    cancelText="鍏抽棴">
-    
-    <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :model="model" :rules="validatorRules">
-      
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪">
-          <a-input-number v-model="model.delFlag"/>
+    @cancel='handleCancel'
+    @ok='handleOk'>
+
+    <a-spin :spinning='confirmLoading'>
+      <a-form-model ref='form' :model='model' :rules='validatorRules'>
+        <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='鍗曟嵁鍙�' prop='code'>
+          <a-input v-model='model.code' disabled placeholder='缂栫爜绯荤粺鑷姩鐢熸垚' />
         </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="code" label="鍗曟嵁鍙�">
-          <a-input placeholder="璇疯緭鍏ュ崟鎹彿" v-model="model.code" />
+        <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='璋冨嚭璁惧' prop='equipmentId'>
+          <lx-search-equipment-select v-model='model.equipmentId'
+                                      :disabled='disableSubmit'
+                                      placeholder='璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储'></lx-search-equipment-select>
         </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧ID">
-          <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="model.equipmentId" />
+        <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='澶勭悊绫诲瀷' prop='scrapType'>
+          <j-dict-select-tag v-model='model.scrapType' :disabled='disableSubmit || initialAcceptanceDisable' dictCode='scrap_sell'
+                             placeholder='璇烽�夋嫨澶勭悊绫诲瀷' type='radio' />
         </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="scrapType" label="杞/鎶ュ簾">
-          <a-input placeholder="璇疯緭鍏ヨ浆璁�/鎶ュ簾" v-model="model.scrapType" />
+        <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='澶勭疆鐞嗙敱' prop='scrapReason'>
+          <a-input v-model='model.scrapReason' placeholder='璇疯緭鍏ュ缃悊鐢�' />
         </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reportUser" label="鐢宠浜�">
-          <a-input placeholder="璇疯緭鍏ョ敵璇蜂汉" v-model="model.reportUser" />
+        <div v-if='model.scrapType == 2'>
+          <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='澶勭疆閲戦' prop='scrapAmount'>
+            <a-input v-model='model.scrapAmount' placeholder='璇疯緭鍏ュ缃噾棰�' />
+          </a-form-model-item>
+        </div>
+        <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='澶囨敞' prop='remark'>
+          <a-textarea v-model='model.remark' :disabled='disableSubmit' placeholder='璇疯緭鍏ュ娉�' />
         </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="scrapTime" label="澶勭疆鏃堕棿">
-          <a-input placeholder="璇疯緭鍏ュ缃椂闂�" v-model="model.scrapTime" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="scrapReason" label="澶勭疆鐞嗙敱">
-          <a-input placeholder="璇疯緭鍏ュ缃悊鐢�" v-model="model.scrapReason" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="scrapAmount" label="澶勭疆閲戦">
-          <a-input placeholder="璇疯緭鍏ュ缃噾棰�" v-model="model.scrapAmount" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalUser" label="瀹℃牳浜�">
-          <a-input placeholder="璇疯緭鍏ュ鏍镐汉" v-model="model.approvalUser" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalComment" label="瀹℃牳鎰忚">
-          <a-input placeholder="璇疯緭鍏ュ鏍告剰瑙�" v-model="model.approvalComment" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalTime" label="瀹℃牳鏃堕棿">
-          <a-input placeholder="璇疯緭鍏ュ鏍告椂闂�" v-model="model.approvalTime" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞">
-          <a-input placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" />
-        </a-form-model-item>
-		
+
       </a-form-model>
     </a-spin>
   </j-modal>
 </template>
 
 <script>
-  import { httpAction } from '@/api/manage'
-  import moment from "moment"
+import { httpAction } from '@/api/manage'
+import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
 
-  export default {
-    name: "EamEquipmentScrapModal",
-    data () {
-      return {
-        title:"鎿嶄綔",
-        visible: false,
-        model: {},
-        labelCol: {
-          xs: { span: 24 },
-          sm: { span: 5 },
-        },
-        wrapperCol: {
-          xs: { span: 24 },
-          sm: { span: 16 },
-        },
 
-        confirmLoading: false,
-        validatorRules:{
-        },
-        url: {
-          add: "/eam/eamEquipmentScrap/add",
-          edit: "/eam/eamEquipmentScrap/edit",
-        },
+export default {
+  name: 'EamEquipmentScrapModal',
+  components: { LxSearchEquipmentSelect },
+  data() {
+    return {
+      title: '鎿嶄綔',
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      },
+
+      confirmLoading: false,
+      validatorRules: {
+        scrapReason: [
+          { required: true, message: '璇疯緭鍏ュ缃師鍥狅紒' }
+        ],
+        equipmentId: [
+          { required: true, message: '璇烽�夋嫨璁惧锛�' }
+        ],
+        transferReason: [
+          { required: true, message: '璇疯緭鍏ュ彉鍔ㄥ師鍥狅紒' }
+        ],
+        scrapType: [
+          { required: true, message: '璇烽�夋嫨绫诲瀷锛�' }
+        ]
+      },
+      url: {
+        add: '/eam/eamEquipmentScrap/add',
+        edit: '/eam/eamEquipmentScrap/edit'
       }
-    },
-    created () {
-    },
-    methods: {
-      add () {
-        //鍒濆鍖栭粯璁ゅ��
-        this.edit({});
-      },
-      edit (record) {
-        this.model = Object.assign({}, record);
-        this.visible = true;
-      },
-      close () {
-        this.$emit('close');
-        this.visible = false;
-        this.$refs.form.clearValidate();
-      },
-      handleOk () {
-        const that = this;
-        // 瑙﹀彂琛ㄥ崟楠岃瘉
-         this.$refs.form.validate(valid => {
-          if (valid) {
-            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');
-              }else{
-                that.$message.warning(res.message);
-              }
-            }).finally(() => {
-              that.confirmLoading = false;
-              that.close();
-            })
-          }else{
-             return false;
-          }
-        })
-      },
-      handleCancel () {
-        this.close()
-      },
-
-
     }
+  },
+  created() {
+  },
+  methods: {
+    add() {
+      //鍒濆鍖栭粯璁ゅ��
+      this.edit({})
+    },
+    edit(record) {
+      this.model = Object.assign({}, record)
+      this.visible = true
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+      this.$refs.form.clearValidate()
+    },
+    handleOk() {
+      const that = this
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          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')
+            } else {
+              that.$message.warning(res.message)
+            }
+          }).finally(() => {
+            that.confirmLoading = false
+            that.close()
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    }
+
+
   }
+}
 </script>
 
-<style lang="less" scoped>
+<style lang='less' scoped>
 
 </style>
\ No newline at end of file
diff --git a/src/views/eam/dispose/modules/EamEquipmentSealUpModal.vue b/src/views/eam/dispose/modules/EamEquipmentSealUpModal.vue
index 9e552ea..f836dc9 100644
--- a/src/views/eam/dispose/modules/EamEquipmentSealUpModal.vue
+++ b/src/views/eam/dispose/modules/EamEquipmentSealUpModal.vue
@@ -3,6 +3,7 @@
     :title="title"
     :width="800"
     :visible="visible"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
     :confirmLoading="confirmLoading"
     switchFullscreen
     @ok="handleOk"
@@ -15,14 +16,14 @@
           <a-input placeholder="缂栫爜绯荤粺鑷姩鐢熸垚" v-model="model.code" disabled />
         </a-form-model-item>
         <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧缂栧彿">
-          <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储"
+          <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储" :disabled="disableSubmit"
                                       v-model="model.equipmentId"></lx-search-equipment-select>
         </a-form-model-item>
         <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sealUpReason" label="灏佸瓨鍘熷洜">
-          <a-input placeholder="璇疯緭鍏ュ皝瀛樺師鍥�" v-model="model.sealUpReason" />
+          <a-input placeholder="璇疯緭鍏ュ皝瀛樺師鍥�" :disabled="disableSubmit" v-model="model.sealUpReason" />
         </a-form-model-item>
         <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞">
-          <a-input placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" />
+          <a-input placeholder="璇疯緭鍏ュ娉�" :disabled="disableSubmit" v-model="model.remark" />
         </a-form-model-item>
 
       </a-form-model>
diff --git a/src/views/eam/dispose/modules/EamEquipmentTransferModal.vue b/src/views/eam/dispose/modules/EamEquipmentTransferModal.vue
index 6bd5226..515711c 100644
--- a/src/views/eam/dispose/modules/EamEquipmentTransferModal.vue
+++ b/src/views/eam/dispose/modules/EamEquipmentTransferModal.vue
@@ -3,63 +3,56 @@
     :title="title"
     :width="800"
     :visible="visible"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
     :confirmLoading="confirmLoading"
     switchFullscreen
     @ok="handleOk"
     @cancel="handleCancel"
     cancelText="鍏抽棴">
-    
+
     <a-spin :spinning="confirmLoading">
       <a-form-model ref="form" :model="model" :rules="validatorRules">
-      
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪">
-          <a-input-number v-model="model.delFlag"/>
-        </a-form-model-item>
         <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="code" label="鍗曟嵁鍙�">
-          <a-input placeholder="璇疯緭鍏ュ崟鎹彿" v-model="model.code" />
+          <a-input placeholder="缂栫爜绯荤粺鑷姩鐢熸垚" v-model="model.code"  disabled/>
         </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧ID">
-          <a-input placeholder="璇疯緭鍏ヨ澶嘔D" v-model="model.equipmentId" />
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璋冨嚭璁惧">
+          <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储"
+                                      v-model="model.equipmentId"  :disabled="disableSubmit"></lx-search-equipment-select>
         </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="oldDepartId" label="璋冨嚭閮ㄩ棬">
-          <a-input placeholder="璇疯緭鍏ヨ皟鍑洪儴闂�" v-model="model.oldDepartId" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="newDepartId" label="璋冨叆閮ㄩ棬">
-          <a-input placeholder="璇疯緭鍏ヨ皟鍏ラ儴闂�" v-model="model.newDepartId" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reportUser" label="鐢宠浜�">
-          <a-input placeholder="璇疯緭鍏ョ敵璇蜂汉" v-model="model.reportUser" />
-        </a-form-model-item>
+<!--        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="oldDepartId" label="璋冨嚭閮ㄩ棬">-->
+<!--          <a-input placeholder="璇疯緭鍏ヨ皟鍑洪儴闂�" v-model="model.oldDepartId" />-->
+<!--        </a-form-model-item>-->
+          <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="newDepartId" label="璋冨叆杞﹂棿">
+            <a-tree-select v-model="model.newDepartId"
+                           style="width: 100%"
+                           :tree-data="treeData"
+                           :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
+                           placeholder="璇烽�夋嫨璋冨叆杞﹂棿"
+                           allow-clear
+                           tree-default-expand-all
+                           :disabled="editable || disableSubmit"
+            >
+            </a-tree-select>
+          </a-form-model-item>
         <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="transferReason" label="鍙樺姩鍘熷洜">
-          <a-input placeholder="璇疯緭鍏ュ彉鍔ㄥ師鍥�" v-model="model.transferReason" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="transferStatus" label="鍙樺姩鐘舵��">
-          <a-input placeholder="璇疯緭鍏ュ彉鍔ㄧ姸鎬�" v-model="model.transferStatus" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="transferTime" label="鍙樺姩鏃ユ湡">
-          <a-input placeholder="璇疯緭鍏ュ彉鍔ㄦ棩鏈�" v-model="model.transferTime" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalUser" label="瀹℃牳浜�">
-          <a-input placeholder="璇疯緭鍏ュ鏍镐汉" v-model="model.approvalUser" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalTime" label="瀹℃牳鏃堕棿">
-          <a-input placeholder="璇疯緭鍏ュ鏍告椂闂�" v-model="model.approvalTime" />
+          <a-input placeholder="璇疯緭鍏ュ彉鍔ㄥ師鍥�" v-model="model.transferReason"  :disabled="disableSubmit"/>
         </a-form-model-item>
         <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞">
-          <a-input placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" />
+          <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark"  :disabled="disableSubmit"/>
         </a-form-model-item>
-		
+
       </a-form-model>
     </a-spin>
   </j-modal>
 </template>
 
 <script>
-  import { httpAction } from '@/api/manage'
-  import moment from "moment"
+  import { httpAction,getAction } from '@/api/manage'
+  import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
 
   export default {
     name: "EamEquipmentTransferModal",
+    components: { LxSearchEquipmentSelect },
     data () {
       return {
         title:"鎿嶄綔",
@@ -73,22 +66,52 @@
           xs: { span: 24 },
           sm: { span: 16 },
         },
-
+        labelColLong: {
+          xs: { span: 24 },
+          sm: { span: 4 }
+        },
+        wrapperColLong: {
+          xs: { span: 24 },
+          sm: { span: 18 }
+        },
+        treeData: [],
         confirmLoading: false,
         validatorRules:{
+          newDepartId: [
+            { required: true, message: '璇烽�夋嫨璋冨叆杞﹂棿' }
+          ],
+          equipmentId: [
+            { required: true, message: '璇烽�夋嫨璁惧锛�' }
+          ],
+          transferReason: [
+            { required: true, message: '璇疯緭鍏ュ彉鍔ㄥ師鍥狅紒' }
+          ],
         },
         url: {
           add: "/eam/eamEquipmentTransfer/add",
           edit: "/eam/eamEquipmentTransfer/edit",
+          loadProductionOptions:'/mdc/mdcProduction/loadProductionTreeOptions',
         },
       }
     },
     created () {
+      this.loadAllProductionTree();
     },
     methods: {
+      loadAllProductionTree() {
+        //鍔犺浇杞﹂棿閫夋嫨鏍�
+        getAction(this.url.loadProductionOptions).then(res => {
+          if (res.success) {
+            this.treeData = [...res.result]
+          }else {
+            that.$message.warning(res.message)
+          }
+        })
+      },
       add () {
         //鍒濆鍖栭粯璁ゅ��
         this.edit({});
+        this.visible = true;
       },
       edit (record) {
         this.model = Object.assign({}, record);
diff --git a/src/views/eam/equipment/EamEquipmentList.vue b/src/views/eam/equipment/EamEquipmentList.vue
index c5b9af1..517d4c7 100644
--- a/src/views/eam/equipment/EamEquipmentList.vue
+++ b/src/views/eam/equipment/EamEquipmentList.vue
@@ -156,17 +156,23 @@
 <!--      <a-tab-pane tab="鍛ㄤ繚宸ュ崟" :key="3">
         <eam-week-maintenance-order-list ref="tabPaneTableListRef3" :isDisplayOperation="false"/>
       </a-tab-pane>-->
-      <a-tab-pane tab="缁翠慨宸ュ崟" :key="4">
-        <eam-repair-order-list ref="tabPaneTableListRef4" :isDisplayOperation="false"/>
+      <a-tab-pane tab="浜屼繚宸ュ崟" :key="3">
+        <eam-second-maintenance-order-list ref="tabPaneTableListRef3"  :isDisplayOperation="false" />
       </a-tab-pane>
-      <a-tab-pane tab="淇濆吇鏍囧噯" :key="5">
-        <eam-maintenance-standard-list ref="tabPaneTableListRef5" :isDisplayOperation="false"/>
+      <a-tab-pane tab="涓変繚宸ュ崟" :key="4">
+        <eam-third-maintenance-order-list ref="tabPaneTableListRef4"  :isDisplayOperation="false" />
       </a-tab-pane>
-      <a-tab-pane tab="宸ヨ壓鍙傛暟" :key="6" v-if="isOpenProcess">
-        <eam-equipment-process-list ref="tabPaneTableListRef6" :isDisplayOperation="false"/>
+      <a-tab-pane tab="缁翠慨宸ュ崟" :key="5">
+        <eam-repair-order-list ref="tabPaneTableListRef5" :isDisplayOperation="false"/>
       </a-tab-pane>
-      <a-tab-pane tab="璁惧绮惧害" :key="7" v-if="isOpenPrecision">
-        <eam-equipment-precision-list ref="tabPaneTableListRef7" :isDisplayOperation="false"/>
+      <a-tab-pane tab="淇濆吇鏍囧噯" :key="6">
+        <eam-maintenance-standard-list ref="tabPaneTableListRef6" :isDisplayOperation="false"/>
+      </a-tab-pane>
+      <a-tab-pane tab="宸ヨ壓鍙傛暟" :key="7" v-if="isOpenProcess">
+        <eam-equipment-process-list ref="tabPaneTableListRef7" :isDisplayOperation="false"/>
+      </a-tab-pane>
+      <a-tab-pane tab="璁惧绮惧害" :key="8" v-if="isOpenPrecision">
+        <eam-equipment-precision-list ref="tabPaneTableListRef8" :isDisplayOperation="false"/>
       </a-tab-pane>
     </a-tabs>
 
@@ -194,6 +200,8 @@
   // import EamWeekMaintenanceOrderList from '@views/eam/maintenance/EamWeekMaintenanceOrderList.vue'
   import EamEquipmentProcessList from '@views/eam/equipment/modules/EamEquipmentProcessList.vue'
   import EamEquipmentPrecisionList from '@views/eam/equipment/modules/EamEquipmentPrecisionList.vue'
+  import EamSecondMaintenanceOrderList from '@views/eam/maintenance/EamSecondMaintenanceOrderList.vue'
+  import EamThirdMaintenanceOrderList from '@views/eam/maintenance/EamThirdMaintenanceOrderList.vue'
 
   export default {
     name: 'EamEquipmentList',
@@ -208,7 +216,9 @@
       EamEquipmentAttachmentList,
       // EamWeekMaintenanceOrderList,
       EamEquipmentProcessList,
-      EamEquipmentPrecisionList
+      EamEquipmentPrecisionList,
+      EamSecondMaintenanceOrderList,
+      EamThirdMaintenanceOrderList
     },
     data() {
       return {
diff --git a/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue b/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue
index 294a261..84f1970 100644
--- a/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue
+++ b/src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue
@@ -120,6 +120,8 @@
 
     <!-- 琛ㄥ崟鍖哄煙 -->
     <eamSecondMaintenanceOrder-modal ref="modalForm" @ok="modalFormOk"></eamSecondMaintenanceOrder-modal>
+
+    <second-maintenance-approval-modal ref="secondMaintenanceApprovalModal" :selectShenpiData="selectSecondMaintenanceData" />
   </a-card>
 </template>
 
@@ -129,13 +131,15 @@
 import { JeecgListMixin } from '@/mixins/JeecgListMixin'
 import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
 import { deleteAction, getAction } from '@api/manage'
+import SecondMaintenanceApprovalModal from '@views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue'
 
 export default {
   name: 'EamSecondMaintenanceOrderList',
   mixins: [JeecgListMixin],
   components: {
     LxSearchEquipmentSelect,
-    EamSecondMaintenanceOrderModal
+    EamSecondMaintenanceOrderModal,
+    SecondMaintenanceApprovalModal
   },
   props: {
     isDisplayOperation: {
@@ -146,6 +150,8 @@
   data() {
     return {
       description: '璁惧浜岀骇淇濆吇绠$悊椤甸潰',
+      disableMixinCreated: true,
+      selectSecondMaintenanceData: {},
       // 琛ㄥご
       columns: [
         {
@@ -439,6 +445,12 @@
           }
         })
       }
+    },
+    handleDetail(record) {
+      this.selectSecondMaintenanceData = Object.assign({}, record)
+      this.$refs.secondMaintenanceApprovalModal.recordDetail(record)
+      this.$refs.secondMaintenanceApprovalModal.title = '璇︽儏'
+      this.$refs.secondMaintenanceApprovalModal.disableSubmit = true
     }
   }
 }
diff --git a/src/views/eam/maintenance/EamThirdMaintenanceOrderList.vue b/src/views/eam/maintenance/EamThirdMaintenanceOrderList.vue
index 8c99c2a..e3cd159 100644
--- a/src/views/eam/maintenance/EamThirdMaintenanceOrderList.vue
+++ b/src/views/eam/maintenance/EamThirdMaintenanceOrderList.vue
@@ -120,6 +120,8 @@
 
     <!-- 琛ㄥ崟鍖哄煙 -->
     <eamThirdMaintenanceOrder-modal ref="modalForm" @ok="modalFormOk"></eamThirdMaintenanceOrder-modal>
+
+    <third-maintenance-approval-modal ref="thirdMaintenanceApprovalModal" :selectShenpiData="selectThirdMaintenanceData" />
   </a-card>
 </template>
 
@@ -129,13 +131,15 @@
 import { JeecgListMixin } from '@/mixins/JeecgListMixin'
 import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
 import { deleteAction, getAction } from '@api/manage'
+import ThirdMaintenanceApprovalModal from '@views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue'
 
 export default {
   name: 'EamThirdMaintenanceOrderList',
   mixins: [JeecgListMixin],
   components: {
     LxSearchEquipmentSelect,
-    EamThirdMaintenanceOrderModal
+    EamThirdMaintenanceOrderModal,
+    ThirdMaintenanceApprovalModal
   },
   props: {
     isDisplayOperation: {
@@ -146,6 +150,8 @@
   data() {
     return {
       description: '璁惧涓夌骇淇濆吇绠$悊椤甸潰',
+      disableMixinCreated: true,
+      selectThirdMaintenanceData: {},
       // 琛ㄥご
       columns: [
         {
@@ -449,6 +455,12 @@
           }
         })
       }
+    },
+    handleDetail(record) {
+      this.selectThirdMaintenanceData = Object.assign({}, record)
+      this.$refs.thirdMaintenanceApprovalModal.recordDetail(record)
+      this.$refs.thirdMaintenanceApprovalModal.title = '璇︽儏'
+      this.$refs.thirdMaintenanceApprovalModal.disableSubmit = true
     }
   }
 }
diff --git a/src/views/eam/spare/EamSparePartRequisitionList.vue b/src/views/eam/spare/EamSparePartRequisitionList.vue
index cdeeee5..6f72a2d 100644
--- a/src/views/eam/spare/EamSparePartRequisitionList.vue
+++ b/src/views/eam/spare/EamSparePartRequisitionList.vue
@@ -1,38 +1,91 @@
 <template>
   <a-row :gutter="10">
-    <a-col :md="leftColMd" :sm="24" style="margin-bottom: 20px">
+    <a-col
+      :md="leftColMd"
+      :sm="24"
+      style="margin-bottom: 20px"
+    >
       <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 :md="12" :sm="8">
+              <a-col
+                :md="12"
+                :sm="8"
+              >
                 <a-form-item label="璇疯喘鍗曞彿">
-                  <j-input placeholder="璇疯緭鍏ヨ璐崟鍙�" v-model="queryParam.requisitionCode"></j-input>
+                  <j-input
+                    placeholder="璇疯緭鍏ヨ璐崟鍙�"
+                    v-model="queryParam.requisitionCode"
+                  ></j-input>
                 </a-form-item>
               </a-col>
               <template v-if="toggleSearchStatus">
-                <a-col :xl="6" :lg="7" :md="8" :sm="24">
+                <a-col
+                  :xl="6"
+                  :lg="7"
+                  :md="8"
+                  :sm="24"
+                >
                   <a-form-item label="鐢宠浜�">
-                    <a-input placeholder="璇疯緭鍏ョ敵璇蜂汉" v-model="queryParam.reportUser"></a-input>
+                    <a-input
+                      placeholder="璇疯緭鍏ョ敵璇蜂汉"
+                      v-model="queryParam.reportUser"
+                    ></a-input>
                   </a-form-item>
                 </a-col>
-                <a-col :xl="6" :lg="7" :md="8" :sm="24">
+                <a-col
+                  :xl="6"
+                  :lg="7"
+                  :md="8"
+                  :sm="24"
+                >
                   <a-form-item label="璇疯喘鐘舵��">
-                    <a-input placeholder="璇疯緭鍏ヨ璐姸鎬�" v-model="queryParam.requisitionStatus"></a-input>
+                    <a-input
+                      placeholder="璇疯緭鍏ヨ璐姸鎬�"
+                      v-model="queryParam.requisitionStatus"
+                    ></a-input>
                   </a-form-item>
                 </a-col>
-                <a-col :xl="6" :lg="7" :md="8" :sm="24">
+                <a-col
+                  :xl="6"
+                  :lg="7"
+                  :md="8"
+                  :sm="24"
+                >
                   <a-form-item label="瀹℃牳浜�">
-                    <a-input placeholder="璇疯緭鍏ュ鏍镐汉" v-model="queryParam.approvalUser"></a-input>
+                    <a-input
+                      placeholder="璇疯緭鍏ュ鏍镐汉"
+                      v-model="queryParam.approvalUser"
+                    ></a-input>
                   </a-form-item>
                 </a-col>
               </template>
-              <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
-                <a-col :md="12" :sm="24">
-                  <a-button type="primary" @click="searchQuery" icon="search" style="margin-left: 21px">鏌ヨ</a-button>
-                  <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+              <span
+                style="float: left;overflow: hidden;"
+                class="table-page-search-submitButtons"
+              >
+                <a-col
+                  :md="12"
+                  :sm="24"
+                >
+                  <a-button
+                    type="primary"
+                    @click="searchQuery"
+                    icon="search"
+                    style="margin-left: 21px"
+                  >鏌ヨ</a-button>
+                  <a-button
+                    type="primary"
+                    @click="searchReset"
+                    icon="reload"
+                    style="margin-left: 8px"
+                  >閲嶇疆</a-button>
                 </a-col>
               </span>
             </a-row>
@@ -41,18 +94,42 @@
 
         <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
         <div class="table-operator">
-          <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
-          <a-button type="primary" icon="download" @click="handleExportXls('澶囦欢璇疯喘鍗�')">瀵煎嚭</a-button>
-          <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
-            <a-button type="primary" icon="import">瀵煎叆</a-button>
+          <a-button
+            @click="handleAdd"
+            type="primary"
+            icon="plus"
+          >鏂板</a-button>
+          <a-button
+            type="primary"
+            icon="download"
+            @click="handleExportXls('澶囦欢璇疯喘鍗�')"
+          >瀵煎嚭</a-button>
+          <a-upload
+            name="file"
+            :showUploadList="false"
+            :multiple="false"
+            :headers="tokenHeader"
+            :action="importExcelUrl"
+            @change="handleImportExcel"
+          >
+            <a-button
+              type="primary"
+              icon="import"
+            >瀵煎叆</a-button>
           </a-upload>
         </div>
 
         <!-- table鍖哄煙-begin -->
-        <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> 宸查�夋嫨 <a><b>{{ selectedRowKeys1.length }}</b></a>椤�
-          <a style="margin-left: 24px" @click="onClearSelected1">娓呯┖</a>
+          <a
+            style="margin-left: 24px"
+            @click="onClearSelected1"
+          >娓呯┖</a>
         </div>
         <div style="margin-top: 15px">
           <a-table
@@ -67,55 +144,96 @@
             :loading="loading"
             :customRow="customRow"
             :rowSelection="{selectedRowKeys: selectedRowKeys1, onChange: onSelectChange1, type:'radio'}"
-            @change="handleTableChange">
+            @change="handleTableChange"
+          >
 
-          <span slot="action" slot-scope="text, record">
-            <a @click="handleOpen(record)">鏄庣粏</a>
-            <a-divider v-if="record.requisitionStatus !== '3' && record.requisitionStatus !== '5'" type="vertical" />
-            <a-dropdown v-if="record.requisitionStatus === '1' || record.requisitionStatus === '4'">
-              <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
-              <a-menu slot="overlay">
-                <a-menu-item>
-                  <a @click="handleConfirm(record)">鎻愪氦</a>
-                </a-menu-item>
-                <a-menu-item>
-                  <a @click="handleEdit(record)">缂栬緫</a>
-                </a-menu-item>
-                <a-menu-item>
-                  <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
-                    <a>鍒犻櫎</a>
-                  </a-popconfirm>
-                </a-menu-item>
-              </a-menu>
-            </a-dropdown>
-            <a v-if="record.requisitionStatus === '2'" @click="handleExamine(record)">瀹℃牳</a>
-          </span>
+            <span
+              slot="action"
+              slot-scope="text, record"
+            >
+              <a @click="handleOpen(record)">鏄庣粏</a>
+              <a-divider
+                v-if="record.requisitionStatus !== '3' && record.requisitionStatus !== '5'"
+                type="vertical"
+              />
+              <a-dropdown v-if="record.requisitionStatus === '1' || record.requisitionStatus === '4'">
+                <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
+                <a-menu slot="overlay">
+                  <a-menu-item>
+                    <a @click="handleConfirm(record)">鎻愪氦</a>
+                  </a-menu-item>
+                  <a-menu-item>
+                    <a @click="handleEdit(record)">缂栬緫</a>
+                  </a-menu-item>
+                  <a-menu-item>
+                    <a-popconfirm
+                      title="纭畾鍒犻櫎鍚�?"
+                      @confirm="() => handleDelete(record.id)"
+                    >
+                      <a>鍒犻櫎</a>
+                    </a-popconfirm>
+                  </a-menu-item>
+                </a-menu>
+              </a-dropdown>
+              <a
+                v-if="record.requisitionStatus === '2'"
+                @click="handleExamine(record)"
+              >瀹℃牳</a>
+            </span>
 
           </a-table>
         </div>
         <!-- table鍖哄煙-end -->
 
         <!-- 琛ㄥ崟鍖哄煙 -->
-        <eamSparePartRequisition-modal ref="modalForm" @ok="modalFormOk"></eamSparePartRequisition-modal>
+        <eamSparePartRequisition-modal
+          ref="modalForm"
+          @ok="modalFormOk"
+        ></eamSparePartRequisition-modal>
 
-        <eamSparePartRequisitionExamine-modal ref="modalExamine" @ok="modalFormOk2"></eamSparePartRequisitionExamine-modal>
+        <eamSparePartRequisitionExamine-modal
+          ref="modalExamine"
+          @ok="modalFormOk2"
+        ></eamSparePartRequisitionExamine-modal>
 
       </a-card>
     </a-col>
-    <a-col :md="rightColMd" :sm="24" v-if="this.rightColVal === 1">
+    <a-col
+      :md="rightColMd"
+      :sm="24"
+      v-if="this.rightColVal === 1"
+    >
       <a-card :bordered="false">
         <div style="text-align: right;">
-          <a-icon type="close-circle" @click="hideSpareDetailList" />
+          <a-icon
+            type="close-circle"
+            @click="hideSpareDetailList"
+          />
         </div>
         <!-- 鏌ヨ鍖哄煙 -->
         <div class="table-page-search-wrapper">
           <a-form layout="inline">
             <a-row :gutter="24">
-              <a-col :md="9" :sm="24">
-              <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
-                <a-button type="primary" @click="searchQuery2" icon="search">鏌ヨ</a-button>
-                <a-button type="primary" @click="searchReset2" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
-              </span>
+              <a-col
+                :md="9"
+                :sm="24"
+              >
+                <span
+                  style="float: left;overflow: hidden;"
+                  class="table-page-search-submitButtons"
+                >
+                  <a-button
+                    type="primary"
+                    @click="searchQuery2"
+                    icon="search"
+                  >鏌ヨ</a-button>
+                  <a-button
+                    type="primary"
+                    @click="searchReset2"
+                    icon="reload"
+                    style="margin-left: 8px"
+                  >閲嶇疆</a-button>
+                </span>
               </a-col>
 
             </a-row>
@@ -123,30 +241,61 @@
         </div>
 
         <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
-        <div class="table-operator" :md="24" :sm="24">
-          <a-button @click="handleAdd2" type="primary" icon="plus">鏂板</a-button>
-          <a-button type="primary" icon="download" @click="handleExportXls('澶囦欢娓呰喘鍗曟槑缁�')">瀵煎嚭</a-button>
-          <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
-            <a-button type="primary" icon="import">瀵煎叆</a-button>
+        <div
+          class="table-operator"
+          :md="24"
+          :sm="24"
+        >
+          <a-button
+            @click="handleAdd2"
+            type="primary"
+            icon="plus"
+          >鏂板</a-button>
+          <a-button
+            type="primary"
+            icon="download"
+            @click="handleExportXls('澶囦欢娓呰喘鍗曟槑缁�')"
+          >瀵煎嚭</a-button>
+          <a-upload
+            name="file"
+            :showUploadList="false"
+            :multiple="false"
+            :headers="tokenHeader"
+            :action="importExcelUrl"
+            @change="handleImportExcel"
+          >
+            <a-button
+              type="primary"
+              icon="import"
+            >瀵煎叆</a-button>
           </a-upload>
           <a-dropdown v-if="selectedRowKeys2.length > 0">
             <a-menu slot="overlay">
-              <a-menu-item key="1" @click="batchDel2">
-                <a-icon type="delete"/>
+              <a-menu-item
+                key="1"
+                @click="batchDel2"
+              >
+                <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> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys2.length }}</a>椤�
-            <a style="margin-left: 24px" @click="onClearSelected2">娓呯┖</a>
+            <a
+              style="margin-left: 24px"
+              @click="onClearSelected2"
+            >娓呯┖</a>
           </div>
 
           <a-table
@@ -161,23 +310,30 @@
             :loading="loading2"
             class="j-table-force-nowrap"
             :rowSelection="{selectedRowKeys: selectedRowKeys2, onChange: onSelectChange2}"
-            @change="handleTableChange2">
+            @change="handleTableChange2"
+          >
 
-          <span slot="action" slot-scope="text, record">
-            <a-dropdown>
-              <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
-              <a-menu slot="overlay">
-                <a-menu-item>
-                  <a-popconfirm @click="handleEdit2(record)">
-                    <a>缂栬緫</a>
-                  </a-popconfirm>
-                  <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete2(record.id)">
-                    <a>鍒犻櫎</a>
-                  </a-popconfirm>
-                </a-menu-item>
-              </a-menu>
-            </a-dropdown>
-          </span>
+            <span
+              slot="action"
+              slot-scope="text, record"
+            >
+              <a-dropdown>
+                <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
+                <a-menu slot="overlay">
+                  <a-menu-item>
+                    <a-popconfirm @click="handleEdit2(record)">
+                      <a>缂栬緫</a>
+                    </a-popconfirm>
+                    <a-popconfirm
+                      title="纭畾鍒犻櫎鍚�?"
+                      @confirm="() => handleDelete2(record.id)"
+                    >
+                      <a>鍒犻櫎</a>
+                    </a-popconfirm>
+                  </a-menu-item>
+                </a-menu>
+              </a-dropdown>
+            </span>
 
           </a-table>
         </div>
@@ -189,148 +345,148 @@
 </template>
 
 <script>
-  import '@assets/less/TableExpand.less'
-  import EamSparePartRequisitionModal from './modules/EamSparePartRequisitionModal.vue'
-  import EamSparePartRequisitionExamineModal from './modules/EamSparePartRequisitionExamineModal.vue'
-  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-  import { deleteAction, getAction, postAction } from '@api/manage'
-  import { filterObj } from '@/utils/util'
+import '@assets/less/TableExpand.less'
+import EamSparePartRequisitionModal from './modules/EamSparePartRequisition/EamSparePartRequisitionModal.vue'
+import EamSparePartRequisitionExamineModal from './modules/EamSparePartRequisition/EamSparePartRequisitionExamineModal.vue'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { deleteAction, getAction, postAction } from '@api/manage'
+import { filterObj } from '@/utils/util'
 
-  export default {
-    name: "EamSparePartRequisitionList",
-    mixins:[JeecgListMixin],
-    components: {
-      EamSparePartRequisitionModal,
-      EamSparePartRequisitionExamineModal
-    },
-    data () {
-      return {
-        description: '澶囦欢璇疯喘鍗曠鐞嗛〉闈�',
-        model1: {},
-        model2: {},
-        queryParam1: {},
-        queryParam2: {},
-        dataSource: [],
-        dataSource2: [],
-        spareRequisitionId: '',
-        iPagination: {
-          current: 1,
-          pageSize: 10,
-          pageSizeOptions: ['10', '20', '30'],
-          showTotal: (total, range) => {
-            return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
-          },
-          showQuickJumper: true,
-          showSizeChanger: true,
-          total: 0,
+export default {
+  name: "EamSparePartRequisitionList",
+  mixins: [JeecgListMixin],
+  components: {
+    EamSparePartRequisitionModal,
+    EamSparePartRequisitionExamineModal
+  },
+  data() {
+    return {
+      description: '澶囦欢璇疯喘鍗曠鐞嗛〉闈�',
+      model1: {},
+      model2: {},
+      queryParam1: {},
+      queryParam2: {},
+      dataSource: [],
+      dataSource2: [],
+      spareRequisitionId: '',
+      iPagination: {
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10', '20', '30'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
         },
-        iPagination2: {
-          current: 1,
-          pageSize: 10,
-          pageSizeOptions: ['10', '20', '30'],
-          showTotal: (total, range) => {
-            return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
-          },
-          showQuickJumper: true,
-          showSizeChanger: true,
-          total: 0,
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0,
+      },
+      iPagination2: {
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10', '20', '30'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
         },
-        iSorter1: {
-          column: 'createTime',
-          order: 'desc',
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0,
+      },
+      iSorter1: {
+        column: 'createTime',
+        order: 'desc',
+      },
+      iSorter2: {
+        column: 'createTime',
+        order: 'desc',
+      },
+      filters1: {},
+      filters2: {},
+      loading: false,
+      loading2: false,
+      selectedRowKeys1: [],
+      selectedRowKeys2: [],
+      selectionRows1: [],
+      selectionRows2: [],
+      rightColVal: 0,
+      // 楂樼骇鏌ヨ鍙傛暟
+      superQueryParams2: '',
+      // 楂樼骇鏌ヨ鎷兼帴鏉′欢
+      superQueryMatchType2: 'and',
+      // 琛ㄥご
+      columns: [
+        {
+          title: '璇疯喘鍗曞彿',
+          align: "center",
+          dataIndex: 'requisitionCode'
         },
-        iSorter2: {
-          column: 'createTime',
-          order: 'desc',
+        {
+          title: '鐘舵��',
+          align: "center",
+          dataIndex: 'requisitionStatus_dictText'
         },
-        filters1: {},
-        filters2: {},
-        loading: false,
-        loading2: false,
-        selectedRowKeys1: [],
-        selectedRowKeys2: [],
-        selectionRows1: [],
-        selectionRows2: [],
-        rightColVal: 0,
-        // 楂樼骇鏌ヨ鍙傛暟
-        superQueryParams2: '',
-        // 楂樼骇鏌ヨ鎷兼帴鏉′欢
-        superQueryMatchType2: 'and',
-        // 琛ㄥご
-        columns: [
-		   {
-            title: '璇疯喘鍗曞彿',
-            align:"center",
-            dataIndex: 'requisitionCode'
-           },
-          {
-            title: '鐘舵��',
-            align:"center",
-            dataIndex: 'requisitionStatus_dictText'
-          },
-		   {
-            title: '璇疯喘浜�',
-            align:"center",
-            dataIndex: 'reportUser'
-           },
-          {
-            title: '璇疯喘鏃堕棿',
-            align:"center",
-            dataIndex: 'createTime'
-          },
-		   {
-            title: '瀹℃牳浜�',
-            align:"center",
-            dataIndex: 'approvalUser'
-           },
-		   {
-            title: '瀹℃牳鏃堕棿',
-            align:"center",
-            dataIndex: 'approvalTime'
-           },
-          {
-            title: '鎿嶄綔',
-            dataIndex: 'action',
-            align:"center",
-            scopedSlots: { customRender: 'action' },
-          }
-        ],
-        // 瀛愯〃琛ㄥご
-        columns2: [
-          {
-            title: '澶囧搧澶囦欢ID',
-            align:"center",
-            dataIndex: 'partId'
-          },
-          {
-            title: '璇疯喘鏁伴噺',
-            align:"center",
-            dataIndex: 'requisitionNum'
-          },
-          {
-            title: '鎿嶄綔',
-            dataIndex: 'action',
-            align:"center",
-            scopedSlots: { customRender: 'action' },
-          }
-        ],
-		url: {
-          list: "/eam/eamSparePartRequisition/list",
-          list2: "/eam/eamSparePartRequisitionDetail/list",
-          delete: "/eam/eamSparePartRequisition/delete",
-          delete2: "/eam/eamSparePartRequisitionDetail/delete",
-          deleteBatch: "/eam/eamSparePartRequisition/deleteBatch",
-          deleteBatch2: "/eam/eamSparePartRequisitionDetail/deleteBatch",
-          exportXlsUrl: "eam/eamSparePartRequisition/exportXls",
-          exportXlsUrl2: "eam/eamSparePartRequisitionDetail/exportXls",
-          importExcelUrl: "eam/eamSparePartRequisition/importExcel",
-          importExcelUrl2: "eam/eamSparePartRequisitionDetail/importExcel",
-          submit: "eam/eamSparePartRequisition/submitSpareRequisition"
-       },
+        {
+          title: '璇疯喘浜�',
+          align: "center",
+          dataIndex: 'reportUser'
+        },
+        {
+          title: '璇疯喘鏃堕棿',
+          align: "center",
+          dataIndex: 'createTime'
+        },
+        {
+          title: '瀹℃牳浜�',
+          align: "center",
+          dataIndex: 'approvalUser'
+        },
+        {
+          title: '瀹℃牳鏃堕棿',
+          align: "center",
+          dataIndex: 'approvalTime'
+        },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: "center",
+          scopedSlots: { customRender: 'action' },
+        }
+      ],
+      // 瀛愯〃琛ㄥご
+      columns2: [
+        {
+          title: '澶囧搧澶囦欢ID',
+          align: "center",
+          dataIndex: 'partId'
+        },
+        {
+          title: '璇疯喘鏁伴噺',
+          align: "center",
+          dataIndex: 'requisitionNum'
+        },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: "center",
+          scopedSlots: { customRender: 'action' },
+        }
+      ],
+      url: {
+        list: "/eam/eamSparePartRequisition/list",
+        list2: "/eam/eamSparePartRequisitionDetail/list",
+        delete: "/eam/eamSparePartRequisition/delete",
+        delete2: "/eam/eamSparePartRequisitionDetail/delete",
+        deleteBatch: "/eam/eamSparePartRequisition/deleteBatch",
+        deleteBatch2: "/eam/eamSparePartRequisitionDetail/deleteBatch",
+        exportXlsUrl: "eam/eamSparePartRequisition/exportXls",
+        exportXlsUrl2: "eam/eamSparePartRequisitionDetail/exportXls",
+        importExcelUrl: "eam/eamSparePartRequisition/importExcel",
+        importExcelUrl2: "eam/eamSparePartRequisitionDetail/importExcel",
+        submit: "eam/eamSparePartRequisition/submitSpareRequisition"
+      },
     }
   },
   computed: {
-    importExcelUrl: function(){
+    importExcelUrl: function () {
       return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
     },
     leftColMd() {
@@ -340,203 +496,203 @@
       return this.selectedRowKeys1.length === 0 ? 0 : 12
     }
   },
-    methods: {
-      customRow(record) {
-        return {
-          on: {
-            dblclick:() => {
-              this.handleOpen(record)
-            }
+  methods: {
+    customRow(record) {
+      return {
+        on: {
+          dblclick: () => {
+            this.handleOpen(record)
           }
         }
-      },
-      onSelectChange1(selectedRowKeys, selectionRows) {
-        this.rightColVal = 1
-        this.selectedRowKeys1 = selectedRowKeys
-        this.selectionRows1 = selectionRows
-        this.model1 = Object.assign({}, selectionRows[0])
-        this.spareRequisitionId = selectedRowKeys[0]
-        this.loadData2()
-      },
-      onSelectChange2(selectedRowKeys, selectionRows) {
-        this.selectedRowKeys2 = selectedRowKeys
-        this.selectionRows2 = selectionRows
-      },
-      /**
-       * 鐐瑰嚮褰撳墠琛岃溅闂撮�夐」鍚庤Е鍙戜簨浠�
-       * @param record 褰撳墠琛屾暟鎹�
-       */
-      handleOpen: function (record) {
-        this.rightColVal = 1
-        this.selectedRowKeys1 = [record.id]
-        this.model1 = Object.assign({}, record)
-        this.spareRequisitionId = record.id
-        this.onClearSelected2()
-        this.loadData2()
-      },
-      searchQuery2: function () {
-        this.loadData2(1)
-      },
-      searchReset2: function () {
-        this.queryParam2 = {}
-        this.loadData2(1)
-      },
-      handleTableChange2: function (pagination, filters, sorter) {
-        //鍒嗛〉銆佹帓搴忋�佺瓫閫夊彉鍖栨椂瑙﹀彂
-        if (Object.keys(sorter).length > 0) {
-          this.iSorter2.column = sorter.field
-          this.iSorter2.order = 'ascend' == sorter.order ? 'asc' : 'desc'
+      }
+    },
+    onSelectChange1(selectedRowKeys, selectionRows) {
+      this.rightColVal = 1
+      this.selectedRowKeys1 = selectedRowKeys
+      this.selectionRows1 = selectionRows
+      this.model1 = Object.assign({}, selectionRows[0])
+      this.spareRequisitionId = selectedRowKeys[0]
+      this.loadData2()
+    },
+    onSelectChange2(selectedRowKeys, selectionRows) {
+      this.selectedRowKeys2 = selectedRowKeys
+      this.selectionRows2 = selectionRows
+    },
+    /**
+     * 鐐瑰嚮褰撳墠琛岃溅闂撮�夐」鍚庤Е鍙戜簨浠�
+     * @param record 褰撳墠琛屾暟鎹�
+     */
+    handleOpen: function (record) {
+      this.rightColVal = 1
+      this.selectedRowKeys1 = [record.id]
+      this.model1 = Object.assign({}, record)
+      this.spareRequisitionId = record.id
+      this.onClearSelected2()
+      this.loadData2()
+    },
+    searchQuery2: function () {
+      this.loadData2(1)
+    },
+    searchReset2: function () {
+      this.queryParam2 = {}
+      this.loadData2(1)
+    },
+    handleTableChange2: function (pagination, filters, sorter) {
+      //鍒嗛〉銆佹帓搴忋�佺瓫閫夊彉鍖栨椂瑙﹀彂
+      if (Object.keys(sorter).length > 0) {
+        this.iSorter2.column = sorter.field
+        this.iSorter2.order = 'ascend' == sorter.order ? 'asc' : 'desc'
+      }
+      this.iPagination2 = pagination
+      this.loadData2()
+    },
+    onClearSelected2: function () {
+      this.selectedRowKeys2 = []
+      this.selectionRows2 = []
+    },
+    loadData2: function (arg) {
+      if (!this.url.list2) {
+        this.$message.error('璇疯缃畊rl.list2灞炴��!')
+        return
+      }
+      //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
+      if (arg === 1) {
+        this.iPagination2.current = 1
+      }
+      if (this.currentWorkshopId === '') return
+      let params = this.getQueryParams2() //鏌ヨ鏉′欢
+      params.spareRequisitionId = this.spareRequisitionId
+      this.loading2 = true
+      getAction(this.url.list2, params).then((res) => {
+        if (res.success) {
+          this.dataSource2 = res.result.records
+          this.iPagination2.total = res.result.total
+        } else {
+          this.dataSource2 = []
         }
-        this.iPagination2 = pagination
-        this.loadData2()
-      },
-      onClearSelected2: function () {
-        this.selectedRowKeys2 = []
-        this.selectionRows2 = []
-      },
-      loadData2: function (arg) {
-        if (!this.url.list2) {
-          this.$message.error('璇疯缃畊rl.list2灞炴��!')
-          return
-        }
-        //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
-        if (arg === 1) {
-          this.iPagination2.current = 1
-        }
-        if (this.currentWorkshopId === '') return
-        let params = this.getQueryParams2() //鏌ヨ鏉′欢
-        params.spareRequisitionId = this.spareRequisitionId
-        this.loading2 = true
-        getAction(this.url.list2, params).then((res) => {
-          if (res.success) {
-            this.dataSource2 = res.result.records
-            this.iPagination2.total = res.result.total
-          }else{
-            this.dataSource2=[]
-          }
-          this.loading2 = false
-        })
-      },
-      getQueryParams2() {
-        //鑾峰彇鏌ヨ鏉′欢
-        let sqp = {}
-        if (this.superQueryParams2) {
-          sqp['superQueryParams'] = encodeURI(this.superQueryParams2)
-          sqp['superQueryMatchType'] = this.superQueryMatchType2
-        }
-        var param = Object.assign(sqp, this.queryParam2, this.iSorter2, this.filters2)
-        param.field = this.getQueryField2()
-        param.pageNo = this.iPagination2.current
-        param.pageSize = this.iPagination2.pageSize
-        return filterObj(param)
-      },
-      getQueryField2() {
-        var str = 'id,'
-        this.columns2.forEach(function(value) {
-          str += ',' + value.dataIndex
-        })
-        return str
-      },
-      hideSpareDetailList: function () {
-        this.selectedRowKeys1 = []
-      },
-      handleEdit2: function(record) {
-        this.$refs.modalForm2.title = '缂栬緫'
+        this.loading2 = false
+      })
+    },
+    getQueryParams2() {
+      //鑾峰彇鏌ヨ鏉′欢
+      let sqp = {}
+      if (this.superQueryParams2) {
+        sqp['superQueryParams'] = encodeURI(this.superQueryParams2)
+        sqp['superQueryMatchType'] = this.superQueryMatchType2
+      }
+      var param = Object.assign(sqp, this.queryParam2, this.iSorter2, this.filters2)
+      param.field = this.getQueryField2()
+      param.pageNo = this.iPagination2.current
+      param.pageSize = this.iPagination2.pageSize
+      return filterObj(param)
+    },
+    getQueryField2() {
+      var str = 'id,'
+      this.columns2.forEach(function (value) {
+        str += ',' + value.dataIndex
+      })
+      return str
+    },
+    hideSpareDetailList: function () {
+      this.selectedRowKeys1 = []
+    },
+    handleEdit2: function (record) {
+      this.$refs.modalForm2.title = '缂栬緫'
+      // this.$refs.modalForm2.roleDisabled = true
+      this.$refs.modalForm2.edit(record)
+    },
+    handleAdd2: function () {
+      if (this.spareRequisitionId === '') {
+        this.$message.error('璇烽�夋嫨涓�涓璐崟!')
+      } else {
         // this.$refs.modalForm2.roleDisabled = true
-        this.$refs.modalForm2.edit(record)
-      },
-      handleAdd2: function () {
-        if (this.spareRequisitionId === '') {
-          this.$message.error('璇烽�夋嫨涓�涓璐崟!')
+        this.$refs.modalForm2.title = '鏂板'
+        this.$refs.modalForm2.edit({ selectedSpareRequisitions: this.spareRequisitionId })
+      }
+    },
+    handleDelete2: function (id) {
+      if (!this.url.delete2) {
+        this.$message.error('璇疯缃畊rl.delete2灞炴��!')
+        return
+      }
+      var that = this
+      deleteAction(that.url.delete2, { spareRequisitionId: this.spareRequisitionId, spareRequisitionDetailId: id }).then((res) => {
+        if (res.success) {
+          that.$message.success(res.message)
+          that.loadData2()
         } else {
-          // this.$refs.modalForm2.roleDisabled = true
-          this.$refs.modalForm2.title = '鏂板'
-          this.$refs.modalForm2.edit({selectedSpareRequisitions:this.spareRequisitionId})
+          that.$message.warning(res.message)
         }
-      },
-      handleDelete2: function (id) {
-        if (!this.url.delete2) {
-          this.$message.error('璇疯缃畊rl.delete2灞炴��!')
-          return
-        }
-        var that = this
-        deleteAction(that.url.delete2, { spareRequisitionId: this.spareRequisitionId, spareRequisitionDetailId: id }).then((res) => {
-          if (res.success) {
-            that.$message.success(res.message)
-            that.loadData2()
-          } else {
-            that.$message.warning(res.message)
-          }
-        })
-      },
-      batchDel2: function() {
-        if (!this.url.deleteBatch2) {
-          this.$message.error('璇疯缃畊rl.deleteBatch2灞炴��!')
-          return
-        }
-        if (this.selectedRowKeys2.length <= 0) {
-          this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒')
-          return
-        } else {
-          var ids = ''
-          for (var a = 0; a < this.selectedRowKeys2.length; a++) {
-            ids += this.selectedRowKeys2[a] + ','
-          }
-          var that = this
-          this.$confirm({
-            title: '纭鍒犻櫎',
-            content: '鏄惁鍒犻櫎閫変腑鏁版嵁?',
-            onOk: function() {
-              deleteAction(that.url.deleteBatch2, { spareRequisitionId: that.spareRequisitionId, spareRequisitionDetailIds: ids }).then((res) => {
-                if (res.success) {
-                  that.$message.success(res.message)
-                  that.loadData2()
-                  that.onClearSelected2()
-                } else {
-                  that.$message.warning(res.message)
-                }
-              })
-            }
-          })
-        }
-      },
-      onClearSelected1() {
-        this.selectedRowKeys1 = []
-        this.selectionRows1 = []
-      },
-      handleConfirm(record) {
-        if (!this.url.submit) {
-          this.$message.error('璇疯缃畊rl.submit灞炴��!')
-          return
+      })
+    },
+    batchDel2: function () {
+      if (!this.url.deleteBatch2) {
+        this.$message.error('璇疯缃畊rl.deleteBatch2灞炴��!')
+        return
+      }
+      if (this.selectedRowKeys2.length <= 0) {
+        this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒')
+        return
+      } else {
+        var ids = ''
+        for (var a = 0; a < this.selectedRowKeys2.length; a++) {
+          ids += this.selectedRowKeys2[a] + ','
         }
         var that = this
         this.$confirm({
-          title: '纭鎻愪氦',
-          content: '纭畾鎻愪氦鍚�?',
-          onOk: function() {
-            postAction(that.url.submit, record).then((res) => {
+          title: '纭鍒犻櫎',
+          content: '鏄惁鍒犻櫎閫変腑鏁版嵁?',
+          onOk: function () {
+            deleteAction(that.url.deleteBatch2, { spareRequisitionId: that.spareRequisitionId, spareRequisitionDetailIds: ids }).then((res) => {
               if (res.success) {
                 that.$message.success(res.message)
-                that.loadData()
-                // that.onClearSelected1()
+                that.loadData2()
+                that.onClearSelected2()
               } else {
                 that.$message.warning(res.message)
               }
             })
           }
         })
-      },
-      handleExamine: function (record) {
-        this.$refs.modalExamine.examine(record);
-        this.$refs.modalExamine.title = "瀹℃牳";
-        this.$refs.modalExamine.disableSubmit = false;
-      },
-      modalFormOk2: function () {
-        this.loadData()
       }
+    },
+    onClearSelected1() {
+      this.selectedRowKeys1 = []
+      this.selectionRows1 = []
+    },
+    handleConfirm(record) {
+      if (!this.url.submit) {
+        this.$message.error('璇疯缃畊rl.submit灞炴��!')
+        return
+      }
+      var that = this
+      this.$confirm({
+        title: '纭鎻愪氦',
+        content: '纭畾鎻愪氦鍚�?',
+        onOk: function () {
+          postAction(that.url.submit, record).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message)
+              that.loadData()
+              // that.onClearSelected1()
+            } else {
+              that.$message.warning(res.message)
+            }
+          })
+        }
+      })
+    },
+    handleExamine: function (record) {
+      this.$refs.modalExamine.examine(record);
+      this.$refs.modalExamine.title = "瀹℃牳";
+      this.$refs.modalExamine.disableSubmit = false;
+    },
+    modalFormOk2: function () {
+      this.loadData()
     }
   }
+}
 </script>
 <style scoped>
-  @import '~@assets/less/common.less';
+@import '~@assets/less/common.less';
 </style>
\ No newline at end of file
diff --git a/src/views/eam/spare/modules/EamSparePartRequisitionDetailModal.vue b/src/views/eam/spare/modules/EamSparePartRequisitionDetailModal.vue
deleted file mode 100644
index e7c17a2..0000000
--- a/src/views/eam/spare/modules/EamSparePartRequisitionDetailModal.vue
+++ /dev/null
@@ -1,117 +0,0 @@
-<template>
-  <j-modal
-    :title="title"
-    :width="800"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    switchFullscreen
-    @ok="handleOk"
-    @cancel="handleCancel"
-    cancelText="鍏抽棴">
-
-    <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :model="model" :rules="validatorRules">
-
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪">
-          <a-input-number v-model="model.delFlag"/>
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="partId" label="澶囧搧澶囦欢ID">
-          <a-input placeholder="璇疯緭鍏ュ鍝佸浠禝D" v-model="model.partId" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requisitionNum" label="璇疯喘鏁伴噺">
-          <a-input placeholder="璇疯緭鍏ヨ璐暟閲�" v-model="model.requisitionNum" />
-        </a-form-model-item>
-
-      </a-form-model>
-    </a-spin>
-  </j-modal>
-</template>
-
-<script>
-  import { httpAction } from '@api/manage'
-  import moment from "moment"
-
-  export default {
-    name: "EamSparePartRequisitionDetailModal",
-    data () {
-      return {
-        title:"鎿嶄綔",
-        visible: false,
-        model: {},
-        labelCol: {
-          xs: { span: 24 },
-          sm: { span: 5 },
-        },
-        wrapperCol: {
-          xs: { span: 24 },
-          sm: { span: 16 },
-        },
-
-        confirmLoading: false,
-        validatorRules:{
-        },
-        url: {
-          add: "/eam/eamSparePartRequisitionDetail/add",
-          edit: "/eam/eamSparePartRequisitionDetail/edit",
-        },
-      }
-    },
-    created () {
-    },
-    methods: {
-      add () {
-        //鍒濆鍖栭粯璁ゅ��
-        this.edit({});
-      },
-      edit (record) {
-        this.model = Object.assign({}, record);
-        this.visible = true;
-      },
-      close () {
-        this.$emit('close');
-        this.visible = false;
-        this.$refs.form.clearValidate();
-      },
-      handleOk () {
-        const that = this;
-        // 瑙﹀彂琛ㄥ崟楠岃瘉
-         this.$refs.form.validate(valid => {
-          if (valid) {
-            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');
-              }else{
-                that.$message.warning(res.message);
-              }
-            }).finally(() => {
-              that.confirmLoading = false;
-              that.close();
-            })
-          }else{
-             return false;
-          }
-        })
-      },
-      handleCancel () {
-        this.close()
-      },
-
-
-    }
-  }
-</script>
-
-<style lang="less" scoped>
-
-</style>
\ No newline at end of file
diff --git a/src/views/eam/spare/modules/EamSparePartRequisitionExamineModal.vue b/src/views/eam/spare/modules/EamSparePartRequisitionExamineModal.vue
deleted file mode 100644
index 4aee79f..0000000
--- a/src/views/eam/spare/modules/EamSparePartRequisitionExamineModal.vue
+++ /dev/null
@@ -1,96 +0,0 @@
-<template>
-  <j-modal
-    :title="title"
-    :width="800"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    switchFullscreen
-    :cancel="close">
-
-    <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :model="model" :rules="validatorRules">
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requisitionCode" label="璇疯喘鍗曠紪鐮�">
-          <a-input placeholder="璇疯喘鍗曠紪鐮佽嚜鍔ㄧ敓鎴�" v-model="model.requisitionCode" :disabled="true" />
-        </a-form-model-item>
-      </a-form-model>
-    </a-spin>
-
-    <template slot='footer'>
-      <a-popconfirm @confirm="handleReject" title="纭灏嗗綋鍓嶅浠惰璐崟椹冲洖锛�" >
-        <a-button :loading='confirmLoading' :style="{marginRight: '8px'}" >椹冲洖</a-button>
-      </a-popconfirm>
-      <a-popconfirm @confirm="handleOk" title="纭灏嗗綋鍓嶅浠惰璐崟瀹℃牳閫氳繃锛�" >
-        <a-button type='primary' :loading='confirmLoading' :style="{marginRight: '8px'}" >閫氳繃</a-button>
-      </a-popconfirm>
-    </template>
-  </j-modal>
-</template>
-
-<script>
-import { postAction } from '@api/manage'
-
-export default {
-  name: "EamSparePartRequisitionExamineModal",
-  data () {
-    return {
-      title:"瀹℃牳",
-      visible: false,
-      model: {},
-      labelCol: {
-        xs: { span: 24 },
-        sm: { span: 5 },
-      },
-      wrapperCol: {
-        xs: { span: 24 },
-        sm: { span: 16 },
-      },
-
-      confirmLoading: false,
-      validatorRules:{
-      },
-      url: {
-        examine: "eam/eamSparePartRequisition/examineSpareRequisition"
-      },
-    }
-  },
-  created () {
-  },
-  methods: {
-    examine (record) {
-      this.model = Object.assign({}, record);
-      this.visible = true;
-    },
-    close () {
-      this.$emit('close');
-      this.visible = false;
-    },
-    handleOk () {
-      this.handleSubmit("3");
-    },
-    handleReject () {
-      this.handleSubmit("4");
-    },
-    handleSubmit(status) {
-      const that = this;
-      that.model.requisitionStatus = status;
-      postAction(that.url.examine, that.model).then((res) => {
-        if (res.success) {
-          that.$message.success(res.message);
-          that.$emit('ok');
-        } else {
-          that.$message.warning(res.message);
-        }
-      }).catch(() => {
-        that.$message.error('鎿嶄綔澶辫触锛岃绋嶅悗閲嶈瘯');
-      }).finally(() => {
-        that.confirmLoading = false;
-        that.close();
-      });
-    }
-  }
-}
-</script>
-
-<style lang="less" scoped>
-
-</style>
\ No newline at end of file
diff --git a/src/views/eam/spare/modules/EamSparePartRequisitionModal.vue b/src/views/eam/spare/modules/EamSparePartRequisitionModal.vue
deleted file mode 100644
index a6898cf..0000000
--- a/src/views/eam/spare/modules/EamSparePartRequisitionModal.vue
+++ /dev/null
@@ -1,124 +0,0 @@
-<template>
-  <j-modal
-    :title="title"
-    :width="800"
-    :visible="visible"
-    :confirmLoading="confirmLoading"
-    switchFullscreen
-    @ok="handleOk"
-    @cancel="handleCancel"
-    cancelText="鍏抽棴">
-
-    <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :model="model" :rules="validatorRules">
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="requisitionCode" label="璇疯喘鍗曠紪鐮�">
-          <a-input placeholder="璇疯喘鍗曠紪鐮佽嚜鍔ㄧ敓鎴�" v-model="model.requisitionCode" :disabled="true" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞">
-          <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" />
-        </a-form-model-item>
-      </a-form-model>
-    </a-spin>
-  </j-modal>
-</template>
-
-<script>
-import { httpAction, getAction } from '@api/manage'
-import moment from "moment"
-
-export default {
-  name: "EamSparePartRequisitionModal",
-  data() {
-    return {
-      title: "鎿嶄綔",
-      visible: false,
-      model: {},
-      labelCol: {
-        xs: { span: 24 },
-        sm: { span: 5 },
-      },
-      wrapperCol: {
-        xs: { span: 24 },
-        sm: { span: 16 },
-      },
-
-      confirmLoading: false,
-      validatorRules: {},
-      url: {
-        add: "/eam/eamSparePartRequisition/add",
-        edit: "/eam/eamSparePartRequisition/edit",
-        generateRequisitionCode: "sys/sysBusinessCodeRule/generateBusinessCodeSeq"
-      },
-    }
-  },
-  created() {
-  },
-  methods: {
-    add() {
-      const that = this
-      let params = {
-        businessCode: "SpareRequisitionCodeRule"
-      }
-      getAction(that.url.generateRequisitionCode, params).then((res) => {
-        if (res.success) {
-          this.model = {
-            requisitionCode: res.result
-          }
-        } else {
-          that.$message.warning(res.message);
-        }
-      })
-      //鍒濆鍖栭粯璁ゅ��
-      that.edit(this.model);
-    },
-    edit(record) {
-      this.model = Object.assign({}, record);
-      this.visible = true;
-    },
-    close() {
-      this.$emit('close');
-      this.visible = false;
-      this.$refs.form.clearValidate();
-    },
-    handleOk() {
-      const that = this;
-      // 瑙﹀彂琛ㄥ崟楠岃瘉
-      this.$refs.form.validate(valid => {
-        if (valid) {
-          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');
-            } else {
-              that.$message.warning(res.message);
-            }
-          }).finally(() => {
-            that.confirmLoading = false;
-            that.close();
-          })
-        } else {
-          return false;
-        }
-      })
-    },
-    handleCancel() {
-      this.close()
-    },
-
-  }
-}
-</script>
-
-<style lang="less" scoped>
-
-</style>
\ No newline at end of file
diff --git a/src/views/flowable/workflow/FlowCompleted.vue b/src/views/flowable/workflow/FlowCompleted.vue
index 48bacaf..e592092 100644
--- a/src/views/flowable/workflow/FlowCompleted.vue
+++ b/src/views/flowable/workflow/FlowCompleted.vue
@@ -17,10 +17,12 @@
           </a-col>
           <a-col :xl="10" :lg="11" :md="12" :sm="24">
             <a-form-item label="鎿嶄綔鏃堕棿">
-              <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨寮�濮嬫椂闂�" class="query-group-cust"
+              <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨寮�濮嬫椂闂�"
+                      class="query-group-cust"
                       v-model="queryParam.startTime"></j-date>
               <span class="query-group-split-cust"></span>
-              <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨缁撴潫鏃堕棿" class="query-group-cust"
+              <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨缁撴潫鏃堕棿"
+                      class="query-group-cust"
                       v-model="queryParam.endTime"></j-date>
             </a-form-item>
           </a-col>
@@ -60,232 +62,274 @@
 
     <AssignFileStreamXq ref="modalFormApproval" :selectShenpiData="selectShenpiData"></AssignFileStreamXq>
 
-    <DispatchFileXq ref="modalFormDispatchFileXq"  :selectShenpiData="selectDispatchFileXqData"></DispatchFileXq>
+    <DispatchFileXq ref="modalFormDispatchFileXq" :selectShenpiData="selectDispatchFileXqData"></DispatchFileXq>
 
-    <inspection-order-handle ref="modalFormInspectionOrderXq" :selectShenpiData="selectInspectionOrderXqData"/>
+    <inspection-order-handle ref="modalFormInspectionOrderXq" :selectShenpiData="selectInspectionOrderXqData" />
 
-    <week-maintenance-approval-modal ref="weekMaintenanceApprovalModal" :selectShenpiData="selectWeekMaintenanceData"/>
+    <week-maintenance-approval-modal ref="weekMaintenanceApprovalModal" :selectShenpiData="selectWeekMaintenanceData" />
 
-    <repair-order-approval-modal ref="repairOrderApprovalModal" :selectShenpiData="selectRepairOrderData"/>
+    <repair-order-approval-modal ref="repairOrderApprovalModal" :selectShenpiData="selectRepairOrderData" />
 
-    <out-bound-order-handle ref="outBoundOrderHandle" :selectShenpiData="selectOutBoundOrderData"/>
+    <out-bound-order-handle ref="outBoundOrderHandle" :selectShenpiData="selectOutBoundOrderData" />
+    <stocktaking-bound-handle ref="stocktakingBoundHandle" :selectShenpiData="selectStocktakingBoundOrderData"
+                              @searchReset="searchReset"></stocktaking-bound-handle>
+
+
+    <loss-bound-handle ref="lossBoundHandle" :selectShenpiData="selectLossBoundOrderData"
+                       @searchReset="searchReset"></loss-bound-handle>
   </a-card>
 </template>
 
 <script>
 
-  import '@/assets/less/TableExpand.less'
-  import { mixinDevice } from '@/utils/mixin'
-  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-  import JDictSelectTag from '@/components/dict/JDictSelectTag.vue'
-  import AssignFileStreamXq from '@views/flowable/workflow/assignFileStream/AssignFileStreamXq.vue'
-  import DispatchFileXq from '@views/flowable/workflow/dispatchFile/DispatchFileXq.vue'
-  import InspectionOrderHandle from './InspectionOrder/InspectionOrderHandle'
-  import WeekMaintenanceApprovalModal from './weekMaintenance/WeekMaintenanceApprovalModal'
-  import RepairOrderApprovalModal from './repairOrder/RepairOrderApprovalModal'
-  import OutBoundOrderHandle from '@views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue'
+import '@/assets/less/TableExpand.less'
+import { mixinDevice } from '@/utils/mixin'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import JDictSelectTag from '@/components/dict/JDictSelectTag.vue'
+import AssignFileStreamXq from '@views/flowable/workflow/assignFileStream/AssignFileStreamXq.vue'
+import DispatchFileXq from '@views/flowable/workflow/dispatchFile/DispatchFileXq.vue'
+import InspectionOrderHandle from './InspectionOrder/InspectionOrderHandle'
+import WeekMaintenanceApprovalModal from './weekMaintenance/WeekMaintenanceApprovalModal'
+import RepairOrderApprovalModal from './repairOrder/RepairOrderApprovalModal'
+import OutBoundOrderHandle from '@views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue'
+import lossBoundHandle from '@views/flowable/workflow/lossBound/lossBoundHandle.vue'
+import stocktakingBoundHandle from '@views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue'
 
-  export default {
-    name: 'NcDeviceCharactersList',
-    mixins: [JeecgListMixin, mixinDevice],
-    components: {
-      DispatchFileXq,
-      AssignFileStreamXq: AssignFileStreamXq,
-      RepairOrderApprovalModal,
-      WeekMaintenanceApprovalModal,
-      InspectionOrderHandle,
-      JDictSelectTag,
-      OutBoundOrderHandle
-    },
-    data() {
-      return {
-        description: '宸ヤ綔娴�-宸插姙',
-        // 琛ㄥご
-        columns: [
-          {
-            title: '搴忓彿',
-            dataIndex: '',
-            key: 'rowIndex',
-            width: 200,
-            align: 'center',
-            customRender: function(t, r, index) {
-              return parseInt(index) + 1
-            }
-          },
-          {
-            title: '娴佺▼鍒嗙被',
-            align: 'center',
-            dataIndex: 'category_dictText',
-            width: 200
-          },
-          {
-            title: '娴佺▼鍚嶇О',
-            align: 'center',
-            dataIndex: 'procDefName',
-            width: 200
-          },
-          {
-            title: '娴佺▼涓氬姟绠�瑕佹弿杩�',
-            align: 'center',
-            dataIndex: 'description',
-            width: 300
-          },
-          {
-            title: '娴佺▼鍙戣捣浜哄悕绉�',
-            align: 'center',
-            dataIndex: 'startUserName',
-            width: 250
-          },
-          {
-            title: '浠诲姟鍚嶇О',
-            align: 'center',
-            dataIndex: 'taskName',
-            width: 250
-          },
-          {
-            title: '鎿嶄綔鏃堕棿',
-            align: 'center',
-            dataIndex: 'finishTime',
-            width: 300
-          },
-          {
-            title: '鎿嶄綔',
-            dataIndex: 'action',
-            scopedSlots: { customRender: 'action' },
-            align: 'center',
-            width: 200,
-            fixed: 'right'
+export default {
+  name: 'NcDeviceCharactersList',
+  mixins: [JeecgListMixin, mixinDevice],
+  components: {
+    stocktakingBoundHandle,
+    lossBoundHandle,
+    DispatchFileXq,
+    AssignFileStreamXq: AssignFileStreamXq,
+    RepairOrderApprovalModal,
+    WeekMaintenanceApprovalModal,
+    InspectionOrderHandle,
+    JDictSelectTag,
+    OutBoundOrderHandle
+  },
+  data() {
+    return {
+      description: '宸ヤ綔娴�-宸插姙',
+      // 琛ㄥご
+      columns: [
+        {
+          title: '搴忓彿',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 200,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
           }
-        ],
-        url: {
-          list: '/assign/flow/finishedList'
         },
-        dictOptions: {},
-        selectShenpiData: {},
-        selectDispatchFileXqData:{},
-        selectWeekMaintenanceData: {},
-        selectInspectionOrderXqData: {},
-        selectRepairOrderData: {},
-        selectOutBoundOrderData: {}
-      }
-    },
-    created() {
-    },
-    computed: {
-      importExcelUrl: function() {
-        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
-      }
-    },
-    methods: {
-      handelDetial(item, index) {
-        console.log('鐐瑰嚮浜嗚鎯�')
-        console.log('item----->', item)
-        console.log('index----->', index)
-        let approcesstype = this.splitAprocessType(item.category)
-        console.log('approcesstype--->', approcesstype)
-        switch (approcesstype) {
-          case 'drApproval':
-            this.handDrDetial(item)
-            break
-          case 'ggApproval':
-            this.handDispatchFileDetial(item)
-            break
-          case 'sbdjApproval':
-            this.handInspectionOrder(item)
-            break
-          case 'WEEK_MAINTENANCE':
-            this.handleWeekMaintenance(item)
-            break
-          case 'eam_repair':
-            this.handleRepairOrder(item)
-            break
-          case 'toolOutStorageApproval':
-            this.handleToolOutStorageApproval(item)
-            break
-          default:
-            alert('娌℃壘鍒拌娴佺▼')
+        {
+          title: '娴佺▼鍒嗙被',
+          align: 'center',
+          dataIndex: 'category_dictText',
+          width: 200
+        },
+        {
+          title: '娴佺▼鍚嶇О',
+          align: 'center',
+          dataIndex: 'procDefName',
+          width: 200
+        },
+        {
+          title: '娴佺▼涓氬姟绠�瑕佹弿杩�',
+          align: 'center',
+          dataIndex: 'description',
+          width: 300
+        },
+        {
+          title: '娴佺▼鍙戣捣浜哄悕绉�',
+          align: 'center',
+          dataIndex: 'startUserName',
+          width: 250
+        },
+        {
+          title: '浠诲姟鍚嶇О',
+          align: 'center',
+          dataIndex: 'taskName',
+          width: 250
+        },
+        {
+          title: '鎿嶄綔鏃堕棿',
+          align: 'center',
+          dataIndex: 'finishTime',
+          width: 300
+        },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          scopedSlots: { customRender: 'action' },
+          align: 'center',
+          width: 200,
+          fixed: 'right'
         }
+      ],
+      url: {
+        list: '/assign/flow/finishedList'
       },
-
-      splitAprocessType(title) {
-        let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊
-        let result = parts[0]
-        return result
-      },
-      handDrDetial(item) {
-        this.selectShenpiData = item
-        this.selectShenpiData.assignee_dictText=item.todoUsers_dictText
-        this.selectShenpiData.procInstId=item.procInsId
-        this.selectShenpiData.title=item.description
-        this.$refs.modalFormApproval.clearTableSource()
-        this.$refs.modalFormApproval.getAllApproveData(item)
-      },
-      handDispatchFileDetial(item){
-        console.log('item----->', item)
-        this.selectDispatchFileXqData = item
-        this.selectDispatchFileXqData.assignee_dictText=item.todoUsers_dictText
-        this.selectDispatchFileXqData.procInstId=item.procInsId
-        this.selectDispatchFileXqData.processInstanceId=item.procInsId
-        this.selectDispatchFileXqData.title=item.description
-        this.$refs.modalFormDispatchFileXq.clearTableSource()
-        this.$refs.modalFormDispatchFileXq.getAllApproveData(item)
-      },
-      handleWeekMaintenance(record) {
-        this.selectWeekMaintenanceData = Object.assign({}, record)
-        this.$refs.weekMaintenanceApprovalModal.handleDetail(record)
-        this.$refs.weekMaintenanceApprovalModal.title = '璇︽儏'
-        this.$refs.weekMaintenanceApprovalModal.disableSubmit = true
-      },
-
-      handInspectionOrder(record) {
-        console.log('record----->', record)
-        this.selectInspectionOrderXqData = Object.assign({}, record)
-        const { todoUsers_dictText, procInsId, description, taskName } = this.selectInspectionOrderXqData
-        this.selectInspectionOrderXqData.assignee_dictText = todoUsers_dictText
-        this.selectInspectionOrderXqData.procInstId = procInsId
-        this.selectInspectionOrderXqData.processInstanceId = procInsId
-        this.selectInspectionOrderXqData.title = description
-        this.$refs.modalFormInspectionOrderXq.visible = true
-        this.$refs.modalFormInspectionOrderXq.title = taskName
-        this.$refs.modalFormInspectionOrderXq.disableSubmit = true
-        this.$refs.modalFormInspectionOrderXq.getAllApproveData({
-          ...record,
-          procInstId: procInsId,
-          processInstanceId: procInsId
-        })
-        this.$refs.modalFormInspectionOrderXq.getBasicInformation(record)
-      },
-
-      /**
-       * 鐐瑰嚮璁惧缁翠慨鍒嗙被娴佺▼璇︽儏鏃惰Е鍙�
-       * @param record
-       */
-      handleRepairOrder(record) {
-        this.selectRepairOrderData = Object.assign({}, record)
-        const { procInsId, taskName } = this.selectRepairOrderData
-        this.$refs.repairOrderApprovalModal.visible = true
-        this.$refs.repairOrderApprovalModal.disableSubmit = true
-        this.$refs.repairOrderApprovalModal.title = taskName
-        this.$refs.modalFormInspectionOrderXq.getAllApproveData({
-          ...record,
-          procInstId: procInsId,
-          processInstanceId: procInsId
-        })
-        this.$refs.repairOrderApprovalModal.getBasicInformation(record)
-      },
-
-      handleToolOutStorageApproval(item) {
-        this.selectOutBoundOrderData = Object.assign({}, item)
-        item.procInstId = item.procInsId
-        item.processInstanceId = item.procInsId
-        this.selectOutBoundOrderData.assignee_dictText = item.todoUsers_dictText
-        this.$refs.outBoundOrderHandle.auditVisible = false
-        this.$refs.outBoundOrderHandle.clearTableSource()
-        this.$refs.outBoundOrderHandle.getAllApproveData(item)
+      dictOptions: {},
+      selectShenpiData: {},
+      selectDispatchFileXqData: {},
+      selectWeekMaintenanceData: {},
+      selectInspectionOrderXqData: {},
+      selectRepairOrderData: {},
+      selectOutBoundOrderData: {},
+      selectLossBoundOrderData: {},
+      selectStocktakingBoundOrderData: {}
+    }
+  },
+  created() {
+  },
+  computed: {
+    importExcelUrl: function() {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+    }
+  },
+  methods: {
+    handelDetial(item, index) {
+      console.log('鐐瑰嚮浜嗚鎯�')
+      console.log('item----->', item)
+      console.log('index----->', index)
+      let approcesstype = this.splitAprocessType(item.category)
+      console.log('approcesstype--->', approcesstype)
+      switch (approcesstype) {
+        case 'drApproval':
+          this.handDrDetial(item)
+          break
+        case 'ggApproval':
+          this.handDispatchFileDetial(item)
+          break
+        case 'sbdjApproval':
+          this.handInspectionOrder(item)
+          break
+        case 'WEEK_MAINTENANCE':
+          this.handleWeekMaintenance(item)
+          break
+        case 'eam_repair':
+          this.handleRepairOrder(item)
+          break
+        case 'toolOutStorageApproval':
+          this.handleToolOutStorageApproval(item)
+          break
+        case 'toolsStocktakingBound':
+          this.handleToolStocktakingApproval(item)
+          break
+        case 'toolsLossApproval':
+          this.handleToolLossApproval(item)
+          break
+        default:
+          alert('娌℃壘鍒拌娴佺▼')
       }
+    },
+
+    splitAprocessType(title) {
+      let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊
+      let result = parts[0]
+      return result
+    },
+    handDrDetial(item) {
+      this.selectShenpiData = item
+      this.selectShenpiData.assignee_dictText = item.todoUsers_dictText
+      this.selectShenpiData.procInstId = item.procInsId
+      this.selectShenpiData.title = item.description
+      this.$refs.modalFormApproval.clearTableSource()
+      this.$refs.modalFormApproval.getAllApproveData(item)
+    },
+    handDispatchFileDetial(item) {
+      console.log('item----->', item)
+      this.selectDispatchFileXqData = item
+      this.selectDispatchFileXqData.assignee_dictText = item.todoUsers_dictText
+      this.selectDispatchFileXqData.procInstId = item.procInsId
+      this.selectDispatchFileXqData.processInstanceId = item.procInsId
+      this.selectDispatchFileXqData.title = item.description
+      this.$refs.modalFormDispatchFileXq.clearTableSource()
+      this.$refs.modalFormDispatchFileXq.getAllApproveData(item)
+    },
+    handleWeekMaintenance(record) {
+      this.selectWeekMaintenanceData = Object.assign({}, record)
+      this.$refs.weekMaintenanceApprovalModal.handleDetail(record)
+      this.$refs.weekMaintenanceApprovalModal.title = '璇︽儏'
+      this.$refs.weekMaintenanceApprovalModal.disableSubmit = true
+    },
+
+    handInspectionOrder(record) {
+      console.log('record----->', record)
+      this.selectInspectionOrderXqData = Object.assign({}, record)
+      const { todoUsers_dictText, procInsId, description, taskName } = this.selectInspectionOrderXqData
+      this.selectInspectionOrderXqData.assignee_dictText = todoUsers_dictText
+      this.selectInspectionOrderXqData.procInstId = procInsId
+      this.selectInspectionOrderXqData.processInstanceId = procInsId
+      this.selectInspectionOrderXqData.title = description
+      this.$refs.modalFormInspectionOrderXq.visible = true
+      this.$refs.modalFormInspectionOrderXq.title = taskName
+      this.$refs.modalFormInspectionOrderXq.disableSubmit = true
+      this.$refs.modalFormInspectionOrderXq.getAllApproveData({
+        ...record,
+        procInstId: procInsId,
+        processInstanceId: procInsId
+      })
+      this.$refs.modalFormInspectionOrderXq.getBasicInformation(record)
+    },
+
+    /**
+     * 鐐瑰嚮璁惧缁翠慨鍒嗙被娴佺▼璇︽儏鏃惰Е鍙�
+     * @param record
+     */
+    handleRepairOrder(record) {
+      this.selectRepairOrderData = Object.assign({}, record)
+      const { procInsId, taskName } = this.selectRepairOrderData
+      this.$refs.repairOrderApprovalModal.visible = true
+      this.$refs.repairOrderApprovalModal.disableSubmit = true
+      this.$refs.repairOrderApprovalModal.title = taskName
+      this.$refs.modalFormInspectionOrderXq.getAllApproveData({
+        ...record,
+        procInstId: procInsId,
+        processInstanceId: procInsId
+      })
+      this.$refs.repairOrderApprovalModal.getBasicInformation(record)
+    },
+
+    handleToolOutStorageApproval(item) {
+      this.selectOutBoundOrderData = Object.assign({}, item)
+      item.procInstId = item.procInsId
+      item.processInstanceId = item.procInsId
+      this.selectOutBoundOrderData.assignee_dictText = item.todoUsers_dictText
+      this.$refs.outBoundOrderHandle.auditVisible = false
+      this.$refs.outBoundOrderHandle.clearTableSource()
+      this.$refs.outBoundOrderHandle.getAllApproveData(item)
+    },
+
+    handleToolStocktakingApproval(item) {
+
+      this.selectStocktakingBoundOrderData = Object.assign({}, item)
+      item.procInstId = item.procInsId
+      item.processInstanceId = item.procInsId
+      this.selectStocktakingBoundOrderData.assignee_dictText = item.todoUsers_dictText
+      this.$refs.stocktakingBoundHandle.auditVisible = false
+      this.$refs.stocktakingBoundHandle.disableSubmit = true
+      this.$refs.stocktakingBoundHandle.clearTableSource()
+      this.$refs.stocktakingBoundHandle.getAllApproveData(item)
+
+    },
+    handleToolLossApproval(item) {
+      this.selectLossBoundOrderData = Object.assign({}, item)
+      item.procInstId = item.procInsId
+      item.processInstanceId = item.procInsId
+      this.selectStocktakingBoundOrderData.assignee_dictText = item.todoUsers_dictText
+      this.$refs.lossBoundHandle.auditVisible = false
+      this.$refs.lossBoundHandle.disableSubmit = true
+      this.$refs.lossBoundHandle.clearTableSource()
+      this.$refs.lossBoundHandle.getAllApproveData(item)
+
     }
   }
+}
 </script>
 <style scoped>
-  @import '~@assets/less/common.less';
+@import '~@assets/less/common.less';
 </style>
\ No newline at end of file
diff --git a/src/views/flowable/workflow/FlowTodo.vue b/src/views/flowable/workflow/FlowTodo.vue
index c8f36b2..af6ba4b 100644
--- a/src/views/flowable/workflow/FlowTodo.vue
+++ b/src/views/flowable/workflow/FlowTodo.vue
@@ -4,15 +4,15 @@
  Date:   2025-02-27
 -->
 <template>
-  <a-card :bordered="false">
+  <a-card :bordered='false'>
     <!-- 鏌ヨ鍖哄煙 -->
-    <div class="table-page-search-wrapper">
-      <a-form layout="inline" @keyup.enter.native="searchQuery">
-        <a-row :gutter="24">
-          <a-col :xl="4" :lg="6" :md="8" :sm="24">
-            <a-form-item label="娴佺▼鍒嗙被">
-              <j-dict-select-tag placeholder="璇烽�夋嫨娴佺▼鍒嗙被" v-model="queryParam.category"
-                                 dictCode="flow_type"></j-dict-select-tag>
+    <div class='table-page-search-wrapper'>
+      <a-form layout='inline' @keyup.enter.native='searchQuery'>
+        <a-row :gutter='24'>
+          <a-col :lg='6' :md='8' :sm='24' :xl='4'>
+            <a-form-item label='娴佺▼鍒嗙被'>
+              <j-dict-select-tag v-model='queryParam.category' dictCode='flow_type'
+                                 placeholder='璇烽�夋嫨娴佺▼鍒嗙被'></j-dict-select-tag>
             </a-form-item>
           </a-col>
           <!--<a-col :xl="4" :lg="6" :md="8" :sm="24">-->
@@ -20,37 +20,37 @@
           <!--<a-input placeholder="璇疯緭鍏ユ祦绋嬪悕绉�" v-model="queryParam.flowName"></a-input>-->
           <!--</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.name"></a-input>
+          <a-col :lg='6' :md='8' :sm='24' :xl='4'>
+            <a-form-item label='褰撳墠鑺傜偣'>
+              <a-input v-model='queryParam.name' placeholder='璇疯緭鍏ュ綋鍓嶈妭鐐圭簿纭煡璇�'></a-input>
             </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.title"></a-input>
+          <a-col :lg='6' :md='8' :sm='24' :xl='4'>
+            <a-form-item label='绠�瑕佹弿杩�'>
+              <a-input v-model='queryParam.title' placeholder='璇疯緭鍏ョ畝瑕佹弿杩�'></a-input>
             </a-form-item>
           </a-col>
-          <template v-if="toggleSearchStatus">
-            <a-col :xl="8" :lg="8" :md="12" :sm="24">
-              <a-form-item label="浠诲姟鏃堕棿鑼冨洿">
-                <j-date :show-time="false" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨寮�濮嬫椂闂�"
-                        class="query-group-cust"
-                        v-model="queryParam.startTime"></j-date>
-                <span class="query-group-split-cust"></span>
-                <j-date :show-time="false" date-format="YYYY-MM-DD HH:mm:ss" placeholder="璇烽�夋嫨缁撴潫鏃堕棿"
-                        class="query-group-cust"
-                        v-model="queryParam.endTime"></j-date>
+          <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 :xl="4" :lg="6" :md="8" :sm="24">
-            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
-              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
-              <a-button @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
-               <a @click="handleToggleSearch" style="margin-left: 8px">
+          <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-icon :type="toggleSearchStatus ? 'up' : 'down'" />
               </a>
             </span>
           </a-col>
@@ -60,406 +60,486 @@
     <!-- 鏌ヨ鍖哄煙-END -->
 
     <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
-    <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"/>
+    <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>
         </a-menu>
-        <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔
-          <a-icon type="down"/>
+        <a-button style='margin-left: 8px'> 鎵归噺鎿嶄綔
+          <a-icon type='down' />
         </a-button>
       </a-dropdown>
     </div>
 
     <!-- table鍖哄煙-begin -->
     <div>
-      <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>
+      <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>
       </div>
 
       <a-table
-        ref="table"
+        ref='table'
+        :columns='columns'
+        :dataSource='dataSource'
+        :loading='loading'
+        :pagination='ipagination'
+        :rowSelection='{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}'
+        :scroll='{x:getTableColumnsTotalWidth,y:465}'
         bordered
-        size="middle"
-        rowKey="id"
-        :scroll="{x:getTableColumnsTotalWidth,y:465}"
-        :columns="columns"
-        :dataSource="dataSource"
-        :pagination="ipagination"
-        :loading="loading"
-        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
-        @change="handleTableChange">
+        rowKey='id'
+        size='middle'
+        @change='handleTableChange'>
 
-        <span slot="action" slot-scope="text, record">
-            <a @click="handelDetail(record,text)">鎵ц/瀹℃壒</a>
+        <span slot='action' slot-scope='text, record'>
+            <a @click='handelDetail(record,text)'>鎵ц/瀹℃壒</a>
         </span>
 
       </a-table>
     </div>
-    <AssignFileStreamHandle ref="modalFormApproval" :selectShenpiData="selectShenpiData" @searchReset="searchReset"></AssignFileStreamHandle>
-    <DispatchFileHandle ref="modalFormDispatchFileXq"  :selectShenpiData="selectDispatchFileXqData" @searchReset="searchReset"></DispatchFileHandle>
-    <DispatchFileBachHandleStyle ref="modalFormDispatchFileBatch" @searchReset="searchReset" @ok="modalFormOk"></DispatchFileBachHandleStyle>
+    <AssignFileStreamHandle ref='modalFormApproval' :selectShenpiData='selectShenpiData'
+                            @searchReset='searchReset'></AssignFileStreamHandle>
+    <DispatchFileHandle ref='modalFormDispatchFileXq' :selectShenpiData='selectDispatchFileXqData'
+                        @searchReset='searchReset'></DispatchFileHandle>
+    <DispatchFileBachHandleStyle ref='modalFormDispatchFileBatch' @ok='modalFormOk'
+                                 @searchReset='searchReset'></DispatchFileBachHandleStyle>
     <!--鍗曚釜娴佺▼澶勭悊-->
-    <InspectionOrderHandle ref="modalFormInspectionOrder" :selectShenpiData="selectInspectionOrderData"
-                           @searchReset="searchReset"></InspectionOrderHandle>
-    <week-maintenance-approval-modal ref="weekMaintenanceApprovalModal" :selectShenpiData="selectWeekMaintenanceData"
-                                     @searchReset="searchReset"></week-maintenance-approval-modal>
-    <repair-order-approval-modal ref="repairOrderApprovalModal" @searchReset="searchReset"
-                                 :selectShenpiData="selectRepairOrderData"></repair-order-approval-modal>
-    <out-bound-order-handle ref="outBoundOrderHandle" :selectShenpiData="selectOutBoundOrderData"
-                              @searchReset="searchReset"></out-bound-order-handle>
+    <InspectionOrderHandle ref='modalFormInspectionOrder' :selectShenpiData='selectInspectionOrderData'
+                           @searchReset='searchReset'></InspectionOrderHandle>
+    <week-maintenance-approval-modal ref='weekMaintenanceApprovalModal' :selectShenpiData='selectWeekMaintenanceData'
+                                     @searchReset='searchReset'></week-maintenance-approval-modal>
+    <repair-order-approval-modal ref='repairOrderApprovalModal' :selectShenpiData='selectRepairOrderData'
+                                 @searchReset='searchReset'></repair-order-approval-modal>
+    <out-bound-order-handle ref='outBoundOrderHandle' :selectShenpiData='selectOutBoundOrderData'
+                            @searchReset='searchReset'></out-bound-order-handle>
+    <stocktaking-bound-handle ref='stocktakingBoundHandle' :selectShenpiData='selectStocktakingBoundOrderData'
+                              @searchReset='searchReset'></stocktaking-bound-handle>
+
+
+    <loss-bound-handle ref='lossBoundHandle' :selectShenpiData='selectLossBoundOrderData'
+                       @searchReset='searchReset'></loss-bound-handle>
 
     <!--鎵归噺澶勭悊-->
-    <inspection-order-batch-handle ref="inspectionOrderBatchHandleRef" @searchReset="searchReset"
-                                   :taskList="selectionRows"/>
+    <inspection-order-batch-handle ref='inspectionOrderBatchHandleRef' :taskList='selectionRows'
+                                   @searchReset='searchReset' />
 
-    <week-maintenance-batch-approval-modal ref="weenMaintenanceBatchApprovalModalRef" @searchReset="searchReset"
-                                           :taskList="selectionRows"/>
-    <equipment-lean-out-approval-modal ref="equipmentLeanOutApprovalModelRef" @searchReset="searchReset"/>
+    <week-maintenance-batch-approval-modal ref='weenMaintenanceBatchApprovalModalRef' :taskList='selectionRows'
+                                           @searchReset='searchReset' />
+    <equipment-lean-out-approval-modal ref='equipmentLeanOutApprovalModelRef' @searchReset='searchReset' />
 
-    <second-maintenance-approval-modal ref="secondMaintenanceApprovalModal" :selectShenpiData="selectSecondMaintenanceData"
-                                     @searchReset="searchReset"></second-maintenance-approval-modal>
-    <third-maintenance-approval-modal ref="thirdMaintenanceApprovalModal" :selectShenpiData="selectThirdMaintenanceData"
-                                       @searchReset="searchReset"></third-maintenance-approval-modal>
-    <equipment-seal-up-approval-modal ref="equipmentSealUpApprovalModelRef" @searchReset="searchReset"/>
+    <second-maintenance-approval-modal ref='secondMaintenanceApprovalModal'
+                                       :selectShenpiData='selectSecondMaintenanceData'
+                                       @searchReset='searchReset'></second-maintenance-approval-modal>
+    <third-maintenance-approval-modal ref='thirdMaintenanceApprovalModal' :selectShenpiData='selectThirdMaintenanceData'
+                                      @searchReset='searchReset'></third-maintenance-approval-modal>
+    <equipment-seal-up-approval-modal ref='equipmentSealUpApprovalModelRef' @searchReset='searchReset' />
+    <inbound-order-handle ref='inboundOrderApprovalModal' :selectInboundOrderData='selectInboundOrderData'
+                          @searchReset='searchReset'></inbound-order-handle>
+    <equipment-transfer-approval-modal ref='equipmentTransferApprovalModelRef' @searchReset='searchReset' />
+    <equipment-scrap-approval-modal ref='equipmentScrapApprovalModelRef' @searchReset='searchReset' />
   </a-card>
 </template>
 
 <script>
 
-  import '@/assets/less/TableExpand.less'
-  import { mixinDevice } from '@/utils/mixin'
-  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-  import JDictSelectTag from '@/components/dict/JDictSelectTag.vue'
-  import WeekMaintenanceApprovalModal from '@views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal'
-  import RepairOrderApprovalModal from '@views/flowable/workflow/repairOrder/RepairOrderApprovalModal'
-  import InspectionOrderHandle from '@views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue'
+import '@/assets/less/TableExpand.less'
+import { mixinDevice } from '@/utils/mixin'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import JDictSelectTag from '@/components/dict/JDictSelectTag.vue'
+import WeekMaintenanceApprovalModal from '@views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal'
+import RepairOrderApprovalModal from '@views/flowable/workflow/repairOrder/RepairOrderApprovalModal'
+import InspectionOrderHandle from '@views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue'
 
-  import { getAction } from '@api/manage'
-  import InspectionOrderBatchHandle from './InspectionOrder/InspectionOrderBatchHandle'
-  import WeekMaintenanceBatchApprovalModal from './weekMaintenance/WeekMaintenanceBatchApprovalModal'
-  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 OutBoundOrderHandle from '@views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue'
-  import EquipmentLeanOutApprovalModal from '@views/flowable/workflow/leanOut/EquipmentLeanOutApprovalModal.vue'
-  import SecondMaintenanceApprovalModal from '@views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue'
-  import ThirdMaintenanceApprovalModal from '@views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue'
-  import EquipmentSealUpApprovalModal from '@views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue'
-  export default {
-    name: 'NcDeviceCharactersList',
-    mixins: [JeecgListMixin, mixinDevice],
-    components: {
-      AssignFileStreamHandle,
-      DispatchFileHandle,
-      DispatchFileBachHandleStyle,
-      WeekMaintenanceBatchApprovalModal,
-      InspectionOrderBatchHandle,
-      JDictSelectTag,
-      WeekMaintenanceApprovalModal,
-      RepairOrderApprovalModal,
-      InspectionOrderHandle,
-      EquipmentLeanOutApprovalModal,
-      SecondMaintenanceApprovalModal,
-      ThirdMaintenanceApprovalModal,
-      OutBoundOrderHandle,
-      EquipmentSealUpApprovalModal,
-    },
-    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'
-          },
-          {
-            title: '娴佺▼鍚嶇О',
-            align: 'center',
-            dataIndex: 'flowName',
-            width: 200
-          },
-          {
-            title: '娴佺▼涓氬姟绠�瑕佹弿杩�',
-            align: 'center',
-            dataIndex: 'description',
-            width: 350,
-            ellipsis: true
+import { getAction } from '@api/manage'
+import InspectionOrderBatchHandle from './InspectionOrder/InspectionOrderBatchHandle'
+import WeekMaintenanceBatchApprovalModal from './weekMaintenance/WeekMaintenanceBatchApprovalModal'
+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 OutBoundOrderHandle from '@views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue'
+import EquipmentLeanOutApprovalModal from '@views/flowable/workflow/leanOut/EquipmentLeanOutApprovalModal.vue'
+import SecondMaintenanceApprovalModal
+  from '@views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue'
+import ThirdMaintenanceApprovalModal from '@views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue'
+import EquipmentSealUpApprovalModal from '@views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue'
+import EquipmentTransferApprovalModal from '@views/flowable/workflow/transfer/EquipmentTransferApprovalModal.vue'
+import EquipmentScrapApprovalModal from '@views/flowable/workflow/scrap/EquipmentScrapApprovalModal.vue'
+import stocktakingBoundHandle from '@views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue'
+import lossBoundHandle from '@views/flowable/workflow/lossBound/lossBoundHandle.vue'
+import InboundOrderHandle from '@views/flowable/workflow/inboundOrder/InboundOrderHandle.vue'
 
-          },
-          {
-            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'
+export default {
+  name: 'NcDeviceCharactersList',
+  mixins: [JeecgListMixin, mixinDevice],
+  components: {
+    lossBoundHandle,
+    stocktakingBoundHandle,
+    AssignFileStreamHandle,
+    DispatchFileHandle,
+    DispatchFileBachHandleStyle,
+    WeekMaintenanceBatchApprovalModal,
+    InspectionOrderBatchHandle,
+    JDictSelectTag,
+    WeekMaintenanceApprovalModal,
+    RepairOrderApprovalModal,
+    InspectionOrderHandle,
+    EquipmentLeanOutApprovalModal,
+    SecondMaintenanceApprovalModal,
+    ThirdMaintenanceApprovalModal,
+    OutBoundOrderHandle,
+    EquipmentSealUpApprovalModal,
+    InboundOrderHandle,
+    EquipmentTransferApprovalModal,
+    EquipmentScrapApprovalModal
+  },
+  data() {
+    return {
+      description: '宸ヤ綔娴�-鎴戠殑寰呭姙',
+      // 琛ㄥご
+      columns: [
+        {
+          title: '搴忓彿',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
           }
-        ],
-        url: {
-          list: '/assign/flow/toTaskBySelf',
-          isSameNode: '/assign/flow/isSameNode'
         },
-        dictOptions: {},
-        selectShenpiData: {},
-        selectDispatchFileXqData:{},
-        selectInspectionOrderData: {},
-        selectWeekMaintenanceData: {},
-        selectSecondMaintenanceData: {},
-        selectThirdMaintenanceData: {},
-        selectBachData: {},
-        selectRepairOrderData: {},
-        selectOutBoundOrderData: {},
-        //涓氬姟淇℃伅ID
-        dataId: undefined
-      }
-    },
-    created() {
-    },
-    computed: {
-      importExcelUrl: function() {
-        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+        {
+          title: '娴佺▼鍒嗙被',
+          align: 'center',
+          dataIndex: 'category_dictText'
+        },
+        {
+          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'
       },
-      getTableColumnsTotalWidth() {
-        return this.columns.reduce((total, item) => total + item.width, 0)
-      }
+      dictOptions: {},
+      selectShenpiData: {},
+      selectDispatchFileXqData: {},
+      selectInspectionOrderData: {},
+      selectWeekMaintenanceData: {},
+      selectSecondMaintenanceData: {},
+      selectThirdMaintenanceData: {},
+      selectBachData: {},
+      selectRepairOrderData: {},
+      selectOutBoundOrderData: {},
+      selectLossBoundOrderData: {},
+      selectStocktakingBoundOrderData: {},
+      selectInboundOrderData: {},
+      //涓氬姟淇℃伅ID
+      dataId: undefined
+    }
+  },
+  created() {
+  },
+  computed: {
+    importExcelUrl: function() {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
     },
-    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锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------
+    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.$message.warning(res.message)
+            this.ipagination.total = 0
           }
-        }).finally(() => {
-          this.loading = false
+          if (this.selectedRowKeys.length > 0) this.selectedRowKeys = this.selectionRows = []
+          //update-end---author:zhangyafei    Date:20201118  for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------
+        } else {
+          this.$message.warning(res.message)
+        }
+      }).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 '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
+        default:
+          alert('娌℃壘鍒拌娴佺▼')
+      }
+    },
+
+    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
+      }
 
-      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 '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 'equipment_seal_up':
-            this.handleEquipmentSealUp(item)
-            break
-          default:
-            alert('娌℃壘鍒拌娴佺▼')
-        }
-      },
+      if (categorySet.has('eam_repair')) {
+        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('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('eam_repair')) {
-          this.$notification.info({
-            message: '娑堟伅',
-            description: '璁惧缁翠慨娴佺▼鏃犳硶鎵归噺澶勭悊'
-          })
-          return
-        }
+    splitAprocessType(title) {
+      let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊
+      let result = parts[0]
+      return result
+    },
 
-        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
-        }
-      },
+    handDrDetial(item) {
+      this.selectShenpiData = item
+      this.$refs.modalFormApproval.clearTableSource()
+      this.$refs.modalFormApproval.getAllApproveData(item)
+    },
 
-      splitAprocessType(title) {
-        let parts = title.split('锛�') // 娉ㄦ剰鍐掑彿鏄叏瑙掑瓧绗︼紝浣跨敤瀵瑰簲鐨勫瓧杩涜鍒嗗壊
-        let result = parts[0]
-        return result
-      },
+    handDispatchFileDetial(item) {
+      console.log('item----->', item)
+      this.selectDispatchFileXqData = item
+      this.$refs.modalFormDispatchFileXq.clearTableSource()
+      this.$refs.modalFormDispatchFileXq.getAllApproveData(item)
+    },
 
-      handDrDetial(item) {
-        this.selectShenpiData = item
-        this.$refs.modalFormApproval.clearTableSource()
-        this.$refs.modalFormApproval.getAllApproveData(item)
-      },
+    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)
+    },
 
-      handDispatchFileDetial(item){
-        console.log('item----->', item)
-        this.selectDispatchFileXqData = item
-        this.$refs.modalFormDispatchFileXq.clearTableSource()
-        this.$refs.modalFormDispatchFileXq.getAllApproveData(item)
-      },
+    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
+      }
+    },
 
-      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)
-      },
+    /**
+     * 鐐瑰嚮璁惧缁翠慨鍒嗙被娴佺▼璇︽儏鏃惰Е鍙�
+     * @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
+      }
+    },
+    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)
+      }
+    },
 
-
-      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
-        }
-      },
-      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)
-        }
-      },
-      handleEquipmentSealUp(item) {
-        this.$refs.equipmentSealUpApprovalModelRef.visible = true
-        this.$refs.equipmentSealUpApprovalModelRef.title = item.name
-        this.$refs.equipmentSealUpApprovalModelRef.handleDetail(item)
-        this.$refs.equipmentSealUpApprovalModelRef.disableSubmit = false
-      },
+    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
     }
   }
+}
 </script>
 <style scoped>
-  @import '~@assets/less/common.less';
+@import '~@assets/less/common.less';
 </style>
\ No newline at end of file
diff --git a/src/views/flowable/workflow/inboundOrder/InboundOrderHandle.vue b/src/views/flowable/workflow/inboundOrder/InboundOrderHandle.vue
new file mode 100644
index 0000000..e8af61a
--- /dev/null
+++ b/src/views/flowable/workflow/inboundOrder/InboundOrderHandle.vue
@@ -0,0 +1,445 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :footer="null"
+    @cancel="handCancel"
+  >
+    <a-card :bordered="false">
+      <div>
+        <b>{{ selectInboundOrderData.description }}</b>
+        <br>
+        <br>
+        <a-tag color="blue">
+          澶勭悊浜� {{ selectInboundOrderData.assignee_dictText }}
+        </a-tag>
+        <a-tag color="blue">
+          鍒涘缓鏃堕棿 {{ selectInboundOrderData.createTime }}
+        </a-tag>
+        <br>
+        <br>
+        <button @click="fetchAndShowBmp" class="btn-custom">鎵撳紑娴佺▼鍥�</button>
+        <div v-if="imageSrc">
+          <img :src="imageSrc" alt="Fetched Image" />
+        </div>
+        <hr class="shallow-hr">
+      </div>
+      <div>
+        <b>鐢宠鍗曡鎯�</b>
+        <br>
+        <a-form :form='form'>
+          <a-spin :spinning="spinning">
+            <a-tabs default-active-key='1' @change='callback'>
+              <a-tab-pane key='1' tab='鐢宠鍗曞熀鏈俊鎭�'>
+                <a-form-model ref='form' :model='tableRowRecord'>
+                  <a-row>
+                    <a-col :span='span'>
+                      <a-form-model-item label='鍏ュ簱鍗曠紪鍙�' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='inboundNum'>
+                        <a-input :disabled='coldisabled' v-model='tableRowRecord.inboundNum'></a-input>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col :span='span'>
+                      <a-form-model-item label='鍏ュ簱绫诲瀷' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='inStorehouseType'>
+                        <j-dict-select-tag :disabled="coldisabled" type="list" v-model="tableRowRecord.inStorehouseType" dictCode="in_storehouse_type" />
+                      </a-form-model-item>
+                    </a-col>
+                  </a-row>
+                  <a-row>
+                    <a-col :span='span'>
+                      <a-form-model-item label='鍏ュ簱鏃堕棿' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='inboundTime'>
+                        <j-date :disabled="coldisabled" v-model="tableRowRecord.inboundTime" :show-time="true" dateFormat="YYYY-MM-DD HH:mm" style="width: 100%"/>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col :span='span'>
+                      <a-form-model-item label='鐢宠鍘熷洜' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='applicationReason'>
+                        <a-input :disabled='coldisabled' v-model='tableRowRecord.applicationReason'></a-input>
+                      </a-form-model-item>
+                    </a-col>
+                  </a-row>
+                  <a-row>
+                    <a-col :span='span'>
+                      <a-form-model-item label='缁忔墜浜�' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='handler'>
+                        <a-input :disabled='coldisabled' v-model='tableRowRecord.handler_dictText'></a-input>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col :span='span'>
+                      <a-form-model-item label='澶囨敞' :labelCol='labelCol' :wrapperCol='wrapperCol' prop='remark'>
+                        <a-textarea :disabled="coldisabled" v-model="tableRowRecord.remark" rows="4" />
+                      </a-form-model-item>
+                    </a-col>
+                  </a-row>
+                </a-form-model>
+              </a-tab-pane>
+              <a-tab-pane key='2' tab='鐢宠鍗曟槑缁嗕俊鎭�'>
+                <a-table
+                  ref="table"
+                  size="middle"
+                  bordered
+                  rowKey="id"
+                  :scroll="{x:'max-content'}"
+                  :columns="columns"
+                  :dataSource="dataSource"
+                  :pagination="ipagination"
+                  :loading="loading"
+                  :rowSelection="null">
+                </a-table>
+              </a-tab-pane>
+              <a-tab-pane key='3' tab='娴佺▼鑺傜偣'>
+                <a-timeline>
+                  <a-timeline-item v-for="(item,index) in hitaskDataSource" :key="index">
+                    <div>
+                      <h3 style="font-weight: bold;">{{item.taskName}}</h3>
+                      <div>澶勭悊浜猴細{{item.assignee_dictText}}</div>
+                      <div v-if="index !==0">澶勭悊鏃堕暱锛歿{item.duration}}</div>
+                      <div v-if="item.name !== '鎻愪氦鐢宠'">澶勭悊绫诲瀷锛歿{item.sequenceFlowName}}</div>
+                      <div v-if="item.description">澶勭悊鎰忚锛歿{item.description}}</div>
+                    </div>
+                  </a-timeline-item>
+                </a-timeline>
+              </a-tab-pane>
+            </a-tabs>
+          </a-spin>
+        </a-form>
+      </div>
+      <div v-if="auditVisible">
+        <hr class="shallow-hr">
+        <br>
+        <b>瀹℃壒璇︽儏</b>
+        <br>
+        <a-form-model ref="form" :model="approveData" :rules="validatorRules" slot="detail">
+          <a-row>
+            <a-col ::span='span'>
+              <a-form-model-item  label="鐢宠浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop='handler_dictText'>
+                <a-input :disabled='coldisabled' v-model='tableRowRecord.handler_dictText'></a-input>
+              </a-form-model-item >
+            </a-col>
+            <a-col ::span='span'>
+              <a-form-model-item  label="鐢宠鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createTime">
+                <a-input :disabled='coldisabled' v-model='tableRowRecord.createTime'></a-input>
+              </a-form-model-item >
+            </a-col>
+            <a-col :span="24" class="btxx">
+              <a-form-item label="瀹℃壒鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol">
+                <a-select v-model='assignFileStream.status' placeholder="璇烽�夋嫨瀹℃壒缁撴灉">
+                  <a-select-option value="3">閫氳繃</a-select-option>
+                  <a-select-option value="4">椹冲洖</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24" class="btxx">
+              <a-form-model-item  label="瀹℃壒鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol">
+                <a-textarea v-model="assignFileStream.approvalOpinion" rows="4" placeholder="璇疯緭鍏ュ鎵规剰瑙�"/>
+              </a-form-model-item >
+            </a-col>
+          </a-row>
+          <div class="table-operator" style="text-align: right;">
+            <a-button  @click="handleQueXiaoTask" type="primary" icon="close">鍙栨秷</a-button>
+            <a-button @click="submitForm">鎻� 浜�</a-button>
+          </div>
+        </a-form-model>
+      </div>
+    </a-card>
+
+
+  </a-modal>
+</template>
+
+<script>
+
+import '@assets/less/TableExpand.less'
+import { mixinDevice } from '@/utils/mixin'
+import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage'
+export default {
+  name: 'FlowShenPi',
+  mixins: [mixinDevice],
+  props: {
+    selectInboundOrderData: {
+      type: Object,
+      required: true
+    }
+  },
+
+  data() {
+    return {
+      form: this.$form.createForm(this),
+      span: 12,
+      span1: 8,
+      coldisabled: true,
+      spinning: false,
+      tableRowRecord: {},
+      assignFileStream:{},
+      tableDataSource: [],
+      usageDataSource: [],
+      hitaskDataSource:[],
+      dataSource: [],
+      bomForm: {},
+      imageSrc: null,
+      drawerVisible: true,
+      auditVisible: true,
+      loading: false,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 30 },
+        sm: { span: 16 }
+      },
+      /* 鍒嗛〉鍙傛暟 */
+      ipagination:{
+        current: 1,
+        pageSize: 5,
+        pageSizeOptions: ['5', '10', '50'],
+        showTotal: (total, range) => {
+          return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key:'rowIndex',
+          width:60,
+          align:"center",
+          customRender:function (t,r,index) {
+            return parseInt(index)+1;
+          }
+        },
+        {
+          title:'宸ュ叿缂栫爜',
+          align:"center",
+          dataIndex: 'toolCode'
+        },
+        {
+          title:'宸ュ叿绫诲瀷',
+          align:"center",
+          dataIndex: 'applicationType'
+        },
+        {
+          title:'涓枃鍚嶇О',
+          align:"center",
+          dataIndex: 'chineseName'
+        },
+        {
+          title:'鍨嬪彿/鍥惧彿',
+          align:"center",
+          dataIndex: 'toolModel'
+        },
+        {
+          title:'鐢宠鍏ュ簱鏁伴噺',
+          align:"center",
+          dataIndex: 'inStorageQuantity'
+        },
+      ],
+      validatorRules: {
+        status: {
+          rules: [
+            { required: true, message: '璇烽�夋嫨瀹℃壒鐘舵��!'},
+          ]
+        },
+      },
+      approveData: {},
+      flowData: {},
+      title: '瀹℃壒椤甸潰',
+      width: 1200,
+      visible: false,
+      // 琛ㄥご
+      url: {
+        queryInboundOrder: '/tms/inboundOrder/list',
+        queryInboundDetailList: 'tms/inboundDetail/list',
+        diagramView: '/assign/flow/diagramView',
+        queryHisTaskList:'/assign/flow/queryHisTaskList',
+        approve:"/tms/inboundOrder/approval",
+      },
+      dictOptions: {},
+      superFieldList: [],
+      workflowSource: []
+    }
+  },
+  created() {
+  },
+  computed: {},
+  methods: {
+    callback() {
+    },
+    handCancel() {
+      this.visible = false
+    },
+    clearTableSource() {
+      this.tableDataSource = []
+      this.usageDataSource = []
+    },
+    fetchAndShowBmp() {
+      try {
+        let parm = {
+          processDefinitionId: this.flowData.processDefinitionId,
+          processInstanceId:this.flowData.processInstanceId,
+          TaskDefinitionKey:this.flowData.processDefinitionKey
+        }
+        downFile(this.url.diagramView,parm,'get').then((res=>{
+          const urlObject = window.URL.createObjectURL(new Blob([res]))
+          this.imageSrc = urlObject
+        }))
+      } catch (error) {
+        console.error('Error fetching image blob:', error)
+        alert('鏃犳硶鍔犺浇鍥剧墖锛岃绋嶅悗鍐嶈瘯銆�')
+      }
+    },
+    handleQueXiaoTask(){
+      this.visible = false
+      this.routeReload()
+    },
+    submitForm () {
+      const that = this;
+      if (!that.assignFileStream.status==null || that.assignFileStream.status===undefined){
+        this.$message.warning('璇烽�夋嫨瀹℃壒鐘舵�侊紒')
+        return false;
+      }
+      if (!that.assignFileStream.approvalOpinion==null || that.assignFileStream.approvalOpinion===undefined) {
+        this.$message.warning('璇疯緭鍏ュ鎵规剰瑙侊紒')
+        return false;
+      }
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true;
+          let url=this.url.approve
+          let method = 'post';
+          let flowTaskVo = {}
+          flowTaskVo.status=that.assignFileStream.status;
+          flowTaskVo.approvalOpinion =that.assignFileStream.approvalOpinion;
+          flowTaskVo.comment =that.assignFileStream.approvalOpinion;
+          flowTaskVo.dataId = this.selectInboundOrderData.dataId
+          flowTaskVo.taskId = this.selectInboundOrderData.id
+          flowTaskVo.userId = this.selectInboundOrderData.assignee
+          flowTaskVo.instanceId = this.selectInboundOrderData.procInstId
+          flowTaskVo.targetKey = this.selectInboundOrderData.taskDefKey
+          flowTaskVo.values = this.selectInboundOrderData.variables
+          flowTaskVo.assignee = this.selectInboundOrderData.assignee
+          console.log("琛ㄥ崟鎻愪氦鏁版嵁",flowTaskVo)
+          httpAction(url,flowTaskVo,method).then((res)=>{
+            if(res.success){
+              that.$message.success(res.message);
+              that.visible = false
+              //鍒锋柊琛ㄦ牸
+              that.$emit('searchReset')
+            }else{
+              that.$message.warning(res.message);
+            }
+          }).finally(() => {
+            that.confirmLoading = false;
+          })
+        }
+
+      })
+    },
+    getAllApproveData(item) {
+      this.visible = true
+      this.loading = true
+      this.flowData = item
+      getAction(this.url.queryHisTaskList, {procInstId: item.procInstId}).then(res=>{
+        if(res.success){
+          this.hitaskDataSource = res.result
+        }
+      })
+      getAction(this.url.queryInboundOrder, {id: item.dataId}).then((res => {
+        if (res.success) {
+          this.tableRowRecord = res.result.records[0]
+        }
+      }))
+      getAction(this.url.queryInboundDetailList, {inboundOrderId: item.dataId}).then(res => {
+        if (res.success) {
+          this.dataSource = res.result.records
+          if (res.result.total) {
+            this.ipagination.total = res.result.total
+          } else {
+            this.ipagination.total = 0
+          }
+        } else {
+          this.$message.warning(res.message)
+        }
+      }).finally(() => {
+        this.loading = false
+      })
+    }
+  }
+}
+</script>
+<style scoped>
+.shallow-hr {
+  border: 0;
+  height: 1px; /* 鍒嗙晫绾跨殑楂樺害 */
+  background-color: rgba(0, 0, 0, 0.1); /* 浣跨敤 RGBA 棰滆壊锛屽苟璁剧疆杈冧綆鐨勯�忔槑搴� */
+  margin: 20px 0; /* 鍒嗙晫绾夸笂涓嬬殑澶栬竟璺� */
+}
+.btn-custom {
+  background-color: #4CAF50; /* 缁胯壊鑳屾櫙 */
+  color: white; /* 鐧借壊鏂囧瓧 */
+  border: none; /* 鏃犺竟妗� */
+  padding: 5px 15px; /* 鍐呰竟璺� */
+  text-align: center; /* 鏂囧瓧灞呬腑 */
+  text-decoration: none; /* 鏃犱笅鍒掔嚎 */
+  display: inline-block; /* 琛屽唴鍧楀厓绱� */
+  font-size: 12px; /* 瀛椾綋澶у皬 */
+  margin: 4px 2px; /* 澶栬竟璺� */
+  cursor: pointer; /* 榧犳爣鎮仠鏃舵樉绀烘墜鍨� */
+  border-radius: 4px; /* 鍦嗚杈规 */
+}
+
+.bold-large-label {
+  font-weight: bold;
+  font-size: 20px; /* 鎴栦綘闇�瑕佺殑浠讳綍澶у皬 */
+}
+.left_qiu{
+  position: absolute;
+  left: -74px;
+  top: 0;
+  width:54px;
+  border-radius: 50%;
+  height:54px;
+  font-size: 13px;
+  margin: auto;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: center;
+  background: #0099ff;
+  transform: translate(0, 0);
+}
+/deep/ .ant-timeline-item-tail{
+  left: -29px !important;
+}
+.left_qiu span{
+  width: 3em;
+  display: block;
+  color: #fff;
+  text-align: center;
+}
+.img{
+  width: 75%;
+}
+
+.wrap{
+  clear: both;
+  width: 100%;
+  display: flex;
+  height: 50px;
+  border: 1px solid #ccc;
+  /* background-color: aqua; */
+}
+.box{
+  width:21%;
+  height:50px;
+  border-right: 1px solid #ccc;
+  line-height: 50px;
+  /* background: red; */
+  text-align:center;
+  margin: auto;
+}
+
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/flowable/workflow/lossBound/lossBoundHandle.vue b/src/views/flowable/workflow/lossBound/lossBoundHandle.vue
new file mode 100644
index 0000000..df462bd
--- /dev/null
+++ b/src/views/flowable/workflow/lossBound/lossBoundHandle.vue
@@ -0,0 +1,505 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :footer="null"
+    @cancel="handCancel"
+  >
+    <a-card :bordered="false">
+      <div>
+        <b>{{ selectShenpiData.description }}</b>
+        <br>
+        <br>
+        <a-tag color="blue">
+          澶勭悊浜� {{ selectShenpiData.assignee_dictText }}
+        </a-tag>
+        <a-tag color="blue">
+          鍒涘缓鏃堕棿 {{ selectShenpiData.createTime }}
+        </a-tag>
+        <br>
+        <br>
+        <button @click="fetchAndShowBmp" class="btn-custom">鎵撳紑娴佺▼鍥�</button>
+        <div v-if="imageSrc">
+          <img :src="imageSrc" alt="Fetched Image" />
+        </div>
+        <hr class="shallow-hr">
+      </div>
+      <div>
+        <b>鎶ユ崯璇︽儏</b>
+        <br>
+        <a-form :form="form">
+          <a-spin :spinning="spinning">
+            <a-tabs default-active-key="1" @change="callback">
+              <a-tab-pane key="1" tab="鎶ユ崯鍩烘湰淇℃伅">
+                <a-form-model ref="form" :model="tableRowRecord">
+                  <a-row>
+                    <a-col :span="span">
+                      <a-form-model-item label="鎶ユ崯鍗曞崟鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="outNum">
+                        <a-input disabled v-model="tableRowRecord.orderCode"></a-input>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col :span="span">
+                      <a-form-model-item label="鎶ユ崯浜�" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                                         prop="outStorehouseType">
+                        <j-dict-select-tag disabled
+                                           v-model="tableRowRecord.losser" dictCode="sys_user,realname,id"
+                                           placeholder="璇烽�夋嫨" />
+                      </a-form-model-item>
+                    </a-col>
+                  </a-row>
+                  <a-row>
+                    <a-col :span="span">
+                      <a-form-model-item label="鎶ユ崯鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                                         prop="outboundTime">
+                        <j-date disabled v-model="tableRowRecord.lossTime" :show-time="true"
+                                dateFormat="YYYY-MM-DD HH:mm" style="width: 100%" />
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col :span="span">
+                      <a-form-model-item label="鎶ユ崯鍘熷洜" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                                         prop="subjectMatter">
+                        <a-input disabled v-model="tableRowRecord.lossReason"></a-input>
+                      </a-form-model-item>
+                    </a-col>
+                  </a-row>
+                  <a-row>
+                    <a-col :span="span">
+                      <a-form-model-item label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="handler">
+                        <j-dict-select-tag disabled
+                                           v-model="tableRowRecord.handler" dictCode="sys_user,realname,id"
+                                           placeholder="璇烽�夋嫨" />
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col :span="span">
+                      <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
+                        <a-textarea disabled v-model="tableRowRecord.remark" rows="4" />
+                      </a-form-model-item>
+                    </a-col>
+                  </a-row>
+                </a-form-model>
+              </a-tab-pane>
+              <a-tab-pane key="2" tab="鎶ユ崯鏄庣粏淇℃伅">
+                <a-table
+                  ref="table"
+                  size="middle"
+                  bordered
+                  rowKey="id"
+                  :scroll="{x:'max-content'}"
+                  :columns="columns"
+                  :dataSource="dataSource"
+                  :pagination="ipagination"
+                  :loading="loading"
+                  :rowSelection="null">
+                </a-table>
+              </a-tab-pane>
+              <a-tab-pane key="3" tab="娴佺▼鑺傜偣">
+                <a-timeline>
+                  <a-timeline-item v-for="(item,index) in hitaskDataSource" :key="index">
+                    <div>
+                      <h3 style="font-weight: bold;">{{ item.taskName }}</h3>
+                      <div>澶勭悊浜猴細{{ item.assignee_dictText }}</div>
+                      <div v-if="index !==0">澶勭悊鏃堕暱锛歿{ item.duration }}</div>
+                      <div v-if="item.name !== '鎻愪氦鐢宠'">澶勭悊绫诲瀷锛歿{ item.sequenceFlowName }}</div>
+                      <div v-if="item.description">澶勭悊鎰忚锛歿{ item.description }}</div>
+                    </div>
+                  </a-timeline-item>
+                </a-timeline>
+              </a-tab-pane>
+            </a-tabs>
+          </a-spin>
+        </a-form>
+      </div>
+      <div v-if="auditVisible">
+        <hr class="shallow-hr">
+        <br>
+        <b>瀹℃壒璇︽儏</b>
+        <br>
+        <a-form-model ref="form" :model="approveData" :rules="validatorRules" slot="detail">
+          <a-row>
+            <a-col ::span="span">
+              <a-form-model-item label="鐢宠浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="handler_dictText">
+                <a-input :readOnly="inputReadOnly" v-model="tableRowRecord.handler_dictText"></a-input>
+              </a-form-model-item>
+            </a-col>
+            <a-col ::span="span">
+              <a-form-model-item label="鐢宠鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createTime">
+                <a-input :readOnly="inputReadOnly" v-model="tableRowRecord.createTime"></a-input>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="24" class="btxx">
+              <a-form-item label="瀹℃壒鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol">
+                <a-select :disabled="disableSubmit" v-model="assignFileStream.status" placeholder="璇烽�夋嫨瀹℃壒缁撴灉">
+                  <a-select-option value="3">閫氳繃</a-select-option>
+                  <a-select-option value="4">椹冲洖</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24" class="btxx">
+              <a-form-model-item label="瀹℃壒鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol">
+                <a-textarea :disabled="disableSubmit" v-model="assignFileStream.approvalOpinion" rows="4"
+                            placeholder="璇疯緭鍏ュ鎵规剰瑙�" />
+              </a-form-model-item>
+            </a-col>
+          </a-row>
+          <div class="table-operator" style="text-align: right;">
+            <a-button @click="handleQueXiaoTask" type="primary" icon="close">鍙栨秷</a-button>
+            <a-button :disabled="disableSubmit" @click="submitForm">鎻愪氦</a-button>
+          </div>
+        </a-form-model>
+      </div>
+    </a-card>
+
+
+  </a-modal>
+</template>
+
+<script>
+
+import '@assets/less/TableExpand.less'
+import { mixinDevice } from '@/utils/mixin'
+import { downFile, getAction, httpAction } from '@api/manage'
+
+export default {
+  name: 'lossBoundHandle',
+  mixins: [mixinDevice],
+  props: {
+    selectShenpiData: {
+      type: Object,
+      required: true
+    }
+  },
+
+  data() {
+    return {
+      form: this.$form.createForm(this),
+      span: 12,
+      span1: 8,
+      disableSubmit: false,
+      inputReadOnly: true,
+      spinning: false,
+      tableRowRecord: {},
+      assignFileStream: {},
+      tableDataSource: [],
+      usageDataSource: [],
+      hitaskDataSource: [],
+      dataSource: [],
+      bomForm: {},
+      imageSrc: null,
+      drawerVisible: true,
+      auditVisible: true,
+      loading: false,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 30 },
+        sm: { span: 16 }
+      },
+      /* 鍒嗛〉鍙傛暟 */
+      ipagination: {
+        current: 1,
+        pageSize: 5,
+        pageSizeOptions: ['5', '10', '50'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          }
+        },
+        {
+          title: '鍒�鍏风紪鍙�',
+          align: 'center',
+          dataIndex: 'toolCode'
+        },
+        {
+          title: '宸ュ叿绫诲瀷',
+          align: 'center',
+          dataIndex: 'applicationType_dictText'
+        },
+        {
+          title: '鎶ユ崯鍘熷洜',
+          align: 'center',
+          dataIndex: 'lossReason'
+        },
+        {
+          title: '鎶ユ崯鏁伴噺',
+          align: 'center',
+          dataIndex: 'lossNumber'
+        },
+        {
+          title: '涓枃鍚嶇О',
+          align: 'center',
+          dataIndex: 'chineseName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          align: 'center',
+          dataIndex: 'toolModel'
+        },
+        {
+          title: '鍒�鍏锋潗鏂�',
+          align: 'center',
+          dataIndex: 'toolMaterial'
+        },
+        {
+          title: '闆朵欢鏉愭枡',
+          align: 'center',
+          dataIndex: 'partMaterial'
+        },
+        {
+          title: '鍘傚',
+          align: 'center',
+          dataIndex: 'supplierId'
+        },
+        {
+          title: '瀛樺偍浣嶇疆(搴撲綅鍙�)',
+          align: 'center',
+          dataIndex: 'positionCode'
+        },
+
+        {
+          title: '鍒涘缓鏃堕棿',
+          align: 'center',
+          dataIndex: 'createTime'
+        },
+        {
+          title: '澶囨敞',
+          align: 'center',
+          dataIndex: 'remark'
+        }
+      ],
+      validatorRules: {
+        status: {
+          rules: [
+            { required: true, message: '璇烽�夋嫨瀹℃壒鐘舵��!' }
+          ]
+        }
+      },
+      approveData: {},
+      flowData: {},
+      title: '瀹℃壒椤甸潰',
+      width: 1200,
+      visible: false,
+      // 琛ㄥご
+      url: {
+        queryLossBoundOrder: '/tms/toolsLossBound/queryById',
+        queryLossBoundDetailList: '/tms/toolsLossBound/listlossboundDetailByMainId',
+        diagramView: '/assign/flow/diagramView',
+        queryHisTaskList: '/assign/flow/queryHisTaskList',
+        approve: '/tms/toolsLossBound/approval'
+      },
+      dictOptions: {},
+      superFieldList: [],
+      workflowSource: []
+    }
+  },
+  created() {
+  },
+  computed: {},
+  methods: {
+    callback() {
+    },
+    handCancel() {
+      this.visible = false
+    },
+    clearTableSource() {
+      this.tableDataSource = []
+      this.usageDataSource = []
+    },
+    fetchAndShowBmp() {
+      console.log('flowData----->', this.flowData)
+      try {
+        let parm = {
+          processDefinitionId: this.flowData.processDefinitionId,
+          processInstanceId: this.flowData.processInstanceId,
+          TaskDefinitionKey: this.flowData.processDefinitionKey
+        }
+        downFile(this.url.diagramView, parm, 'get').then((res => {
+          console.log('Pica------>', res)
+          const urlObject = window.URL.createObjectURL(new Blob([res]))
+          this.imageSrc = urlObject
+        }))
+      } catch (error) {
+        console.error('Error fetching image blob:', error)
+        alert('鏃犳硶鍔犺浇鍥剧墖锛岃绋嶅悗鍐嶈瘯銆�')
+      }
+    },
+    handleQueXiaoTask() {
+      this.visible = false
+      this.routeReload()
+    },
+    submitForm() {
+      const that = this
+      if (!that.assignFileStream.status == null || that.assignFileStream.status === undefined) {
+        this.$message.warning('璇烽�夋嫨瀹℃壒鐘舵�侊紒')
+        return false
+      }
+      if (!that.assignFileStream.approvalOpinion == null || that.assignFileStream.approvalOpinion === undefined) {
+        this.$message.warning('璇疯緭鍏ュ鎵规剰瑙侊紒')
+        return false
+      }
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true
+          let url = this.url.approve
+          let method = 'post'
+          let flowTaskVo = {}
+          flowTaskVo.status = that.assignFileStream.status
+          flowTaskVo.approvalOpinion = that.assignFileStream.approvalOpinion
+          flowTaskVo.comment = that.assignFileStream.approvalOpinion
+          flowTaskVo.dataId = this.selectShenpiData.dataId
+          flowTaskVo.taskId = this.selectShenpiData.id
+          flowTaskVo.userId = this.selectShenpiData.assignee
+          flowTaskVo.instanceId = this.selectShenpiData.procInstId
+          flowTaskVo.targetKey = this.selectShenpiData.taskDefKey
+          flowTaskVo.values = this.selectShenpiData.variables
+          flowTaskVo.assignee = this.selectShenpiData.assignee
+          console.log('琛ㄥ崟鎻愪氦鏁版嵁', flowTaskVo)
+          httpAction(url, flowTaskVo, method).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message)
+              that.visible = false
+              //鍒锋柊琛ㄦ牸
+              that.$emit('searchReset')
+            } else {
+              that.$message.warning(res.message)
+            }
+          }).finally(() => {
+            that.confirmLoading = false
+          })
+        }
+
+      })
+    },
+    /**
+     * 鑾峰彇娴佺▼鑺傜偣鍜屾祦绋嬪浘
+     * @param record 寰呭姙璁板綍淇℃伅
+     */
+    getAllApproveData(item) {
+      this.visible = true
+      this.loading = true
+      console.log('selectShenpiData----->', this.selectShenpiData)
+      this.flowData = item
+      getAction(this.url.queryHisTaskList, { procInstId: item.procInstId }).then(res => {
+        if (res.success) {
+          this.hitaskDataSource = res.result
+        }
+      })
+      getAction(this.url.queryLossBoundOrder, { id: item.dataId }).then((res => {
+        if (res.success) {
+          this.tableRowRecord = res.result
+        }
+      }))
+      getAction(this.url.queryLossBoundDetailList, { lossBoundId: item.dataId }).then(res => {
+        if (res.success) {
+          this.dataSource = res.result.records
+          if (res.result.total) {
+            this.ipagination.total = res.result.total
+          } else {
+            this.ipagination.total = 0
+          }
+        } else {
+          this.$message.warning(res.message)
+        }
+      }).finally(() => {
+        this.loading = false
+      })
+    }
+  }
+}
+</script>
+<style scoped>
+.shallow-hr {
+  border: 0;
+  height: 1px; /* 鍒嗙晫绾跨殑楂樺害 */
+  background-color: rgba(0, 0, 0, 0.1); /* 浣跨敤 RGBA 棰滆壊锛屽苟璁剧疆杈冧綆鐨勯�忔槑搴� */
+  margin: 20px 0; /* 鍒嗙晫绾夸笂涓嬬殑澶栬竟璺� */
+}
+
+.btn-custom {
+  background-color: #4CAF50; /* 缁胯壊鑳屾櫙 */
+  color: white; /* 鐧借壊鏂囧瓧 */
+  border: none; /* 鏃犺竟妗� */
+  padding: 5px 15px; /* 鍐呰竟璺� */
+  text-align: center; /* 鏂囧瓧灞呬腑 */
+  text-decoration: none; /* 鏃犱笅鍒掔嚎 */
+  display: inline-block; /* 琛屽唴鍧楀厓绱� */
+  font-size: 12px; /* 瀛椾綋澶у皬 */
+  margin: 4px 2px; /* 澶栬竟璺� */
+  cursor: pointer; /* 榧犳爣鎮仠鏃舵樉绀烘墜鍨� */
+  border-radius: 4px; /* 鍦嗚杈规 */
+}
+
+.bold-large-label {
+  font-weight: bold;
+  font-size: 20px; /* 鎴栦綘闇�瑕佺殑浠讳綍澶у皬 */
+}
+
+.left_qiu {
+  position: absolute;
+  left: -74px;
+  top: 0;
+  width: 54px;
+  border-radius: 50%;
+  height: 54px;
+  font-size: 13px;
+  margin: auto;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: center;
+  background: #0099ff;
+  transform: translate(0, 0);
+}
+
+/deep/ .ant-timeline-item-tail {
+  left: -29px !important;
+}
+
+.left_qiu span {
+  width: 3em;
+  display: block;
+  color: #fff;
+  text-align: center;
+}
+
+.img {
+  width: 75%;
+}
+
+.wrap {
+  clear: both;
+  width: 100%;
+  display: flex;
+  height: 50px;
+  border: 1px solid #ccc;
+  /* background-color: aqua; */
+}
+
+.box {
+  width: 21%;
+  height: 50px;
+  border-right: 1px solid #ccc;
+  line-height: 50px;
+  /* background: red; */
+  text-align: center;
+  margin: auto;
+}
+
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue b/src/views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue
index d84210a..99c918c 100644
--- a/src/views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue
+++ b/src/views/flowable/workflow/outBoundOrder/OutBoundOrderHandle.vue
@@ -312,6 +312,7 @@
     callback() {
     },
     handCancel() {
+      this.assignFileStream = {}
       this.visible = false
     },
     clearTableSource() {
@@ -371,7 +372,7 @@
           httpAction(url,flowTaskVo,method).then((res)=>{
             if(res.success){
               that.$message.success(res.message);
-              that.visible = false
+              this.handCancel()
               //鍒锋柊琛ㄦ牸
               that.$emit('searchReset')
             }else{
diff --git a/src/views/flowable/workflow/scrap/EquipmentScrapApprovalModal.vue b/src/views/flowable/workflow/scrap/EquipmentScrapApprovalModal.vue
new file mode 100644
index 0000000..9ec7e26
--- /dev/null
+++ b/src/views/flowable/workflow/scrap/EquipmentScrapApprovalModal.vue
@@ -0,0 +1,223 @@
+<template>
+  <j-modal
+    :confirmLoading='confirmLoading'
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    :title='title'
+    :visible='visible'
+    :width='800'
+    cancelText='鍏抽棴'
+    centered
+    switchFullscreen
+    @cancel='handleCancel'
+    @ok='handleOk'>
+
+    <a-spin :spinning='spinning'>
+      <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='12'>
+            <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='鍗曟嵁鍙�' prop='code'>
+              <a-input v-model='model.code' disabled />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span='12'>
+            <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='璁惧缂栫爜' prop='equipmentId'>
+              <lx-search-equipment-select v-model='model.equipmentId'
+                                          disabled placeholder='璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储'></lx-search-equipment-select>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter='24'>
+          <a-col :span='12'>
+            <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='鐢宠浜�' prop='reportUser_dictText'>
+              <a-input v-model='model.reportUser_dictText' disabled />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span='12'>
+            <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='澶勭疆鍘熷洜' prop='scrapReason'>
+              <a-input v-model='model.scrapReason' disabled />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter='24'>
+          <a-col :span='12'>
+            <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='澶囨敞' prop='remark'>
+              <a-textarea v-model='model.remark' disabled />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <div v-if='approvalDisable'>
+          <a-divider orientation='center' style='font-size: large;font-style: italic;color: #66aeed;'> 绠$悊鍛樻姤搴燂紙杞锛夊鏍�
+          </a-divider>
+          <a-row :gutter='24'>
+            <a-col :span='12'>
+              <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='瀹℃壒绫诲瀷' prop='approvalDealType'>
+                <j-dict-select-tag v-model='model.approvalDealType' :disabled='disableSubmit || initialAcceptanceDisable' dictCode='approved_rejected'
+                                   placeholder='璇烽�夋嫨澶勭悊绫诲瀷' type='radio' />
+              </a-form-model-item>
+            </a-col>
+            <a-col :span='12'>
+              <a-form-model-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='瀹℃壒鎰忚' prop='approvalComment'>
+                <a-textarea v-model='model.approvalComment' :disabled='disableSubmit || returnDisable'
+                            placeholder='璇疯緭鍏ユ剰瑙�' />
+              </a-form-model-item>
+            </a-col>
+          </a-row>
+        </div>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+import { getAction, httpAction } from '@/api/manage'
+import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
+
+export default {
+  name: 'EquipmentScrapApprovalModal',
+  components: {
+    LxSearchEquipmentSelect
+  },
+  props: {
+    selectShenpiData: {
+      type: Object
+    }
+  },
+  data() {
+    return {
+      title: '鎿嶄綔',
+      visible: false,
+      editable: false,
+      model: {},
+      treeData: [],
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 18 }
+      },
+      labelColLong: {
+        xs: { span: 24 },
+        sm: { span: 2 }
+      },
+      wrapperColLong: {
+        xs: { span: 24 },
+        sm: { span: 21 }
+      },
+      confirmLoading: false,
+      spinning: false,
+      imageSrc: null,
+      validatorRules: {
+        approvalDealType: [
+          { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' }
+        ],
+        unsealApprovalDealType: [
+          { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' }
+        ],
+        approvalComment: [
+          { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!' }
+        ],
+        unsealApprovalComment: [
+          { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!' }
+        ],
+        returnComment: [
+          { required: true, message: '璇疯緭鍏ュ綊杩樺娉�!' }
+        ],
+        confirmComment: [
+          { required: true, message: '璇疯緭鍏ョ‘璁ゆ剰瑙�!' }
+        ]
+      },
+      url: {
+        queryById: '/eam/eamEquipmentScrap/queryById',
+        approval: '/eam/eamEquipmentScrap/approval',
+        loadProductionOptions: '/mdc/mdcProduction/loadProductionTreeOptions'
+      },
+      disableSubmit: false
+    }
+  },
+  created() {
+    this.loadAllProductionTree()
+  },
+  computed: {
+    approvalDisable: function() {
+      return ['WAIT_CHECK'].includes(this.model.scrapStatus)
+    }
+  },
+  methods: {
+    async handleDetail(item) {
+      this.initParams()
+      this.model = {}
+      let res = await getAction(this.url.queryById, { id: item.dataId })
+      this.model = Object.assign({}, res.result)
+      this.model.dataId = item.dataId
+      this.model.taskId = item.id
+      this.model.userId = item.assignee
+      this.model.instanceId = item.procInstId
+      this.model.values = item.variables
+      this.spinning = false
+    },
+
+    recordDetail(record) {
+      console.log('record', record)
+      this.initParams()
+      this.model = Object.assign({}, record)
+    },
+
+    initParams() {
+      this.visible = true
+      this.spinning = true
+    },
+
+    async handleOk() {
+      const that = this
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          that.confirmLoading = that.spinning = true
+          let httpurl = this.url.approval
+          let method = 'put'
+          httpAction(httpurl, this.model, method).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message)
+              that.$emit('searchReset')
+              that.close()
+            } else {
+              that.$message.warning(res.message)
+            }
+          }).finally(() => {
+            that.confirmLoading = that.spinning = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    },
+
+    close() {
+      this.$emit('close')
+      this.visible = false
+      this.$refs.form.clearValidate()
+    },
+    loadAllProductionTree() {
+      //鍔犺浇杞﹂棿閫夋嫨鏍�
+      getAction(this.url.loadProductionOptions).then(res => {
+        if (res.success) {
+          this.treeData = [...res.result]
+        } else {
+          that.$message.warning(res.message)
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang='less' scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue b/src/views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue
index 282d290..ef2f20f 100644
--- a/src/views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue
+++ b/src/views/flowable/workflow/sealUp/EquipmentSealUpApprovalModal.vue
@@ -28,32 +28,27 @@
             </a-form-model-item>
           </a-col>
         </a-row>
-        <a-row :guitter="24">
+        <a-row :gutter="24">
           <a-col :span="12">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leanDepartId_dictText" label="鍊熷叆杞﹂棿">
-              <a-input v-model="model.leanDepartId_dictText" disabled />
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sealUpReason" label="灏佸瓨鍘熷洜">
+              <a-textarea v-model="model.sealUpReason" disabled />
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leanPerson_dictText" label="鍊熺敤浜�">
-              <a-input v-model="model.leanPerson_dictText" disabled />
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reportUser_dictText" label="鐢宠浜�">
+              <a-input v-model="model.reportUser_dictText" disabled />
             </a-form-model-item>
           </a-col>
         </a-row>
         <a-row :gutter="24">
-          <a-col :span="12">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leanReason" label="鍊熺敤鍘熷洜">
-              <a-textarea v-model="model.leanReason" disabled />
-            </a-form-model-item>
-          </a-col>
-          <a-col :span="12">
-            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞">
+          <a-col :span="24">
+            <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="remark" label="澶囨敞">
               <a-textarea v-model="model.remark" disabled />
             </a-form-model-item>
           </a-col>
         </a-row>
         <div v-if="approvalDisable">
-          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍛樺鎵�
+          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍛樺皝瀛樺鏍�
           </a-divider>
           <a-row :gutter="24">
             <a-col :span="12">
@@ -70,27 +65,19 @@
             </a-col>
           </a-row>
         </div>
-        <div v-if="returnDisable">
-          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 褰掕繕淇℃伅
+        <div v-if="confirmDisable">
+          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍛樺惎灏佸鏍�
           </a-divider>
           <a-row :gutter="24">
-            <a-col :span="24">
-              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="returnComment"
-                                 label="褰掕繕澶囨敞">
-                <a-textarea placeholder="璇疯緭鍏ュ綊杩樺娉�" v-model="model.returnComment"
-                            :disabled="disableSubmit || confirmDisable" />
+            <a-col :span="12">
+              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="unsealApprovalDealType" label="瀹℃壒绫诲瀷">
+                <j-dict-select-tag type="radio" v-model="model.unsealApprovalDealType" dictCode="approved_rejected"
+                                   placeholder="璇烽�夋嫨澶勭悊绫诲瀷" :disabled="disableSubmit || initialAcceptanceDisable" />
               </a-form-model-item>
             </a-col>
-          </a-row>
-        </div>
-        <div v-if="confirmDisable">
-          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍛樼‘璁�
-          </a-divider>
-          <a-row :gutter="24">
-            <a-col :span="24">
-              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmComment"
-                                 label="纭鎰忚">
-                <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.confirmComment"
+            <a-col :span="12">
+              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="unsealApprovalComment" label="瀹℃壒鎰忚">
+                <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.unsealApprovalComment"
                             :disabled="disableSubmit || completionDisable" />
               </a-form-model-item>
             </a-col>
@@ -145,7 +132,13 @@
         approvalDealType: [
           { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' }
         ],
+        unsealApprovalDealType: [
+          { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' }
+        ],
         approvalComment: [
+          { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!' }
+        ],
+        unsealApprovalComment: [
           { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!' }
         ],
         returnComment: [
@@ -168,13 +161,13 @@
   },
   computed: {
     approvalDisable: function() {
-      return ['WAIT_APPROVAL', 'WAIT_RETURN', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.model.leanStatus)
+      return ['WAIT_CHECK','SEALED', 'WAIT_UNSEALING_AUDIT', 'COMPLETE'].includes(this.model.sealStatus)
     },
     returnDisable: function() {
-      return ['WAIT_RETURN', 'WAIT_CONFIRM', 'COMPLETE'].includes(this.model.leanStatus)
+      return ['SEALED', 'WAIT_UNSEALING_AUDIT', 'COMPLETE'].includes(this.model.sealStatus)
     },
     confirmDisable: function() {
-      return ['WAIT_CONFIRM', 'COMPLETE'].includes(this.model.leanStatus)
+      return ['WAIT_UNSEALING_AUDIT', 'COMPLETE'].includes(this.model.sealStatus)
     },
     completionDisable: function() {
       return ['COMPLETE'].includes(this.model.leanStatus)
diff --git a/src/views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue b/src/views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue
new file mode 100644
index 0000000..b176483
--- /dev/null
+++ b/src/views/flowable/workflow/stocktakingBound/stocktakingBoundHandle.vue
@@ -0,0 +1,524 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :footer="null"
+    @cancel="handCancel"
+  >
+    <a-card :bordered="false">
+      <div>
+        <b>{{ selectShenpiData.description }}</b>
+        <br>
+        <br>
+        <a-tag color="blue">
+          澶勭悊浜� {{ selectShenpiData.assignee_dictText }}
+        </a-tag>
+        <a-tag color="blue">
+          鍒涘缓鏃堕棿 {{ selectShenpiData.createTime }}
+        </a-tag>
+        <br>
+        <br>
+        <button @click="fetchAndShowBmp" class="btn-custom">鎵撳紑娴佺▼鍥�</button>
+        <div v-if="imageSrc">
+          <img :src="imageSrc" alt="Fetched Image" />
+        </div>
+        <hr class="shallow-hr">
+      </div>
+      <div>
+        <b>鐩樼偣璇︽儏</b>
+        <br>
+        <a-form :form="form">
+          <a-spin :spinning="spinning">
+            <a-tabs default-active-key="1" @change="callback">
+              <a-tab-pane key="1" tab="鐢宠鍩烘湰淇℃伅">
+                <a-form-model ref="form" :model="tableRowRecord">
+                  <a-row>
+                    <a-col :span="span">
+                      <a-form-model-item label="鍑哄簱鍗曠紪鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="outNum">
+                        <a-input disabled v-model="tableRowRecord.outNum"></a-input>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col :span="span">
+                      <a-form-model-item label="鍑哄簱绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                                         prop="outStorehouseType">
+                        <j-dict-select-tag disabled type="list"
+                                           v-model="tableRowRecord.outStorehouseType" dictCode="out_storehouse_type" />
+                      </a-form-model-item>
+                    </a-col>
+                  </a-row>
+                  <a-row>
+                    <a-col :span="span">
+                      <a-form-model-item label="鍑哄簱鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                                         prop="outboundTime">
+                        <j-date disabled v-model="tableRowRecord.outboundTime" :show-time="true"
+                                dateFormat="YYYY-MM-DD HH:mm" style="width: 100%" />
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col :span="span">
+                      <a-form-model-item label="棰嗙敤浜嬬敱" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                                         prop="subjectMatter">
+                        <a-input disabled v-model="tableRowRecord.subjectMatter"></a-input>
+                      </a-form-model-item>
+                    </a-col>
+                  </a-row>
+                  <a-row>
+                    <a-col :span="span">
+                      <a-form-model-item label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="handler">
+                        <a-input disabled v-model="tableRowRecord.handler_dictText"></a-input>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col :span="span">
+                      <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
+                        <a-textarea disabled v-model="tableRowRecord.remark" rows="4" />
+                      </a-form-model-item>
+                    </a-col>
+                  </a-row>
+                </a-form-model>
+              </a-tab-pane>
+              <a-tab-pane key="2" tab="鐩樼偣鏄庣粏淇℃伅">
+                <a-table
+                  ref="table"
+                  size="middle"
+                  bordered
+                  rowKey="id"
+                  :scroll="{x:'max-content'}"
+                  :columns="columns"
+                  :dataSource="dataSource"
+                  :pagination="ipagination"
+                  :loading="loading"
+                  :rowSelection="null">
+                </a-table>
+              </a-tab-pane>
+              <a-tab-pane key="3" tab="娴佺▼鑺傜偣">
+                <a-timeline>
+                  <a-timeline-item v-for="(item,index) in hitaskDataSource" :key="index">
+                    <div>
+                      <h3 style="font-weight: bold;">{{ item.taskName }}</h3>
+                      <div>澶勭悊浜猴細{{ item.assignee_dictText }}</div>
+                      <div v-if="index !==0">澶勭悊鏃堕暱锛歿{ item.duration }}</div>
+                      <div v-if="item.name !== '鎻愪氦鐢宠'">澶勭悊绫诲瀷锛歿{ item.sequenceFlowName }}</div>
+                      <div v-if="item.description">澶勭悊鎰忚锛歿{ item.description }}</div>
+                    </div>
+                  </a-timeline-item>
+                </a-timeline>
+              </a-tab-pane>
+            </a-tabs>
+          </a-spin>
+        </a-form>
+      </div>
+      <div v-if="auditVisible">
+        <hr class="shallow-hr">
+        <br>
+        <b>瀹℃壒璇︽儏</b>
+        <br>
+        <a-form-model ref="form" :model="approveData" :rules="validatorRules" slot="detail">
+          <a-row>
+            <a-col ::span="span">
+              <a-form-model-item label="鐢宠浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="handler_dictText">
+                <a-input :readOnly="inputReadOnly" v-model="tableRowRecord.handler_dictText"></a-input>
+              </a-form-model-item>
+            </a-col>
+            <a-col ::span="span">
+              <a-form-model-item label="鐢宠鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createTime">
+                <a-input :readOnly="inputReadOnly" v-model="tableRowRecord.createTime"></a-input>
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="24" class="btxx">
+              <a-form-item label="瀹℃壒鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol">
+                <a-select :disabled="disableSubmit" v-model="assignFileStream.status" placeholder="璇烽�夋嫨瀹℃壒缁撴灉">
+                  <a-select-option value="3">閫氳繃</a-select-option>
+                  <a-select-option value="4">椹冲洖</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :span="24" class="btxx">
+              <a-form-model-item label="瀹℃壒鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol">
+                <a-textarea :disabled="disableSubmit" v-model="assignFileStream.approvalOpinion" rows="4"
+                            placeholder="璇疯緭鍏ュ鎵规剰瑙�" />
+              </a-form-model-item>
+            </a-col>
+          </a-row>
+          <div class="table-operator" style="text-align: right;">
+            <a-button @click="handleQueXiaoTask" type="primary" icon="close">鍙栨秷</a-button>
+            <a-button :disabled="disableSubmit" @click="submitForm">鎻� 浜�</a-button>
+          </div>
+        </a-form-model>
+      </div>
+    </a-card>
+
+
+  </a-modal>
+</template>
+
+<script>
+
+import '@assets/less/TableExpand.less'
+import { mixinDevice } from '@/utils/mixin'
+import { downFile, getAction, httpAction } from '@api/manage'
+
+export default {
+  name: 'stocktakingBoundHandle',
+  mixins: [mixinDevice],
+  props: {
+    selectShenpiData: {
+      type: Object,
+      required: true
+    }
+  },
+
+  data() {
+    return {
+      form: this.$form.createForm(this),
+      span: 12,
+      span1: 8,
+      inputReadOnly: true,
+      spinning: false,
+      tableRowRecord: {},
+      assignFileStream: {},
+      tableDataSource: [],
+      usageDataSource: [],
+      hitaskDataSource: [],
+      dataSource: [],
+      bomForm: {},
+      imageSrc: null,
+      drawerVisible: true,
+      auditVisible: true,
+      disableSubmit: false,
+      loading: false,
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 30 },
+        sm: { span: 16 }
+      },
+      /* 鍒嗛〉鍙傛暟 */
+      ipagination: {
+        current: 1,
+        pageSize: 5,
+        pageSizeOptions: ['5', '10', '50'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          }
+        },
+        {
+          title: '鍒�鍏风紪鍙�',
+          dataIndex: 'toolCode',
+          align: 'center'
+        },
+        {
+          title: '宸ュ叿绫诲瀷',
+          dataIndex: 'applicationType_dictText',
+          align: 'center'
+
+        },
+
+        {
+          title: '涓枃鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center'
+        },
+
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center'
+        },
+        {
+          title: '鍒�鍏锋潗鏂�',
+          dataIndex: 'toolMaterial',
+          align: 'center'
+
+        },
+        {
+          title: '闆朵欢鏉愭枡',
+          dataIndex: 'partMaterial',
+          align: 'center'
+        },
+        {
+          title: '鍘傚',
+          dataIndex: 'supplierId',
+          align: 'center'
+
+        },
+        {
+          title: '瀛樺偍浣嶇疆(搴撲綅鍙�)',
+          dataIndex: 'goodsShelvesId',
+          align: 'center'
+        },
+
+        {
+          title: '璐﹂潰鏁伴噺',
+          dataIndex: 'bookQuantity',
+          align: 'center'
+
+        },
+        {
+          title: '鍙敤鏁伴噺',
+          dataIndex: 'availableQuantity',
+          align: 'center'
+
+        },
+        {
+          title: '瀹炵洏鏁伴噺',
+          dataIndex: 'practicalQuantity',
+          align: 'center'
+        },
+        {
+          title: '宸紓鍊�',
+          dataIndex: 'differenceValue',
+          align: 'center'
+        },
+        {
+          title: '鐩樹簭鐩樼泩',
+          dataIndex: 'surplusDeficit_dictText',
+          align: 'center'
+        },
+        {
+          title: '鐩樺簱鏃堕棿',
+          dataIndex: 'stocktakingDate',
+          align: 'center'
+        },
+        {
+          title: '澶囨敞',
+          dataIndex: 'remark',
+          align: 'center'
+        }
+      ],
+      validatorRules: {
+        status: {
+          rules: [
+            { required: true, message: '璇烽�夋嫨瀹℃壒鐘舵��!' }
+          ]
+        }
+      },
+      approveData: {},
+      flowData: {},
+      title: '瀹℃壒椤甸潰',
+      width: 1200,
+      visible: false,
+      // 琛ㄥご
+      url: {
+        queryStocktakingBoundOrder: '/tms/toolsStocktakingBound/queryById',
+        queryStocktakingBoundDetailList: '/tms/toolsStocktakingBound/listToolsStocktakingBoundControllerDetailsByMainId',
+        diagramView: '/assign/flow/diagramView',
+        queryHisTaskList: '/assign/flow/queryHisTaskList',
+        approve: '/tms/toolsStocktakingBound/approval'
+      },
+      dictOptions: {},
+      superFieldList: [],
+      workflowSource: []
+    }
+  },
+  created() {
+  },
+  computed: {},
+  methods: {
+    callback() {
+    },
+    handCancel() {
+      this.visible = false
+    },
+    clearTableSource() {
+      this.tableDataSource = []
+      this.usageDataSource = []
+    },
+    fetchAndShowBmp() {
+      console.log('flowData----->', this.flowData)
+      try {
+        let parm = {
+          processDefinitionId: this.flowData.processDefinitionId,
+          processInstanceId: this.flowData.processInstanceId,
+          TaskDefinitionKey: this.flowData.processDefinitionKey
+        }
+        downFile(this.url.diagramView, parm, 'get').then((res => {
+          console.log('Pica------>', res)
+          const urlObject = window.URL.createObjectURL(new Blob([res]))
+          this.imageSrc = urlObject
+        }))
+      } catch (error) {
+        console.error('Error fetching image blob:', error)
+        alert('鏃犳硶鍔犺浇鍥剧墖锛岃绋嶅悗鍐嶈瘯銆�')
+      }
+    },
+    handleQueXiaoTask() {
+      this.visible = false
+      this.routeReload()
+    },
+    submitForm() {
+      const that = this
+      if (!that.assignFileStream.status == null || that.assignFileStream.status === undefined) {
+        this.$message.warning('璇烽�夋嫨瀹℃壒鐘舵�侊紒')
+        return false
+      }
+      if (!that.assignFileStream.approvalOpinion == null || that.assignFileStream.approvalOpinion === undefined) {
+        this.$message.warning('璇疯緭鍏ュ鎵规剰瑙侊紒')
+        return false
+      }
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true
+          let url = this.url.approve
+          let method = 'post'
+          let flowTaskVo = {}
+          flowTaskVo.status = that.assignFileStream.status
+          flowTaskVo.approvalOpinion = that.assignFileStream.approvalOpinion
+          flowTaskVo.comment = that.assignFileStream.approvalOpinion
+          flowTaskVo.dataId = this.selectShenpiData.dataId
+          flowTaskVo.taskId = this.selectShenpiData.id
+          flowTaskVo.userId = this.selectShenpiData.assignee
+          flowTaskVo.instanceId = this.selectShenpiData.procInstId
+          flowTaskVo.targetKey = this.selectShenpiData.taskDefKey
+          flowTaskVo.values = this.selectShenpiData.variables
+          flowTaskVo.assignee = this.selectShenpiData.assignee
+          console.log('琛ㄥ崟鎻愪氦鏁版嵁', flowTaskVo)
+          httpAction(url, flowTaskVo, method).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message)
+              that.visible = false
+              //鍒锋柊琛ㄦ牸
+              that.$emit('searchReset')
+            } else {
+              that.$message.warning(res.message)
+            }
+          }).finally(() => {
+            that.confirmLoading = false
+          })
+        }
+
+      })
+    },
+    /**
+     * 鑾峰彇娴佺▼鑺傜偣鍜屾祦绋嬪浘
+     * @param record 寰呭姙璁板綍淇℃伅
+     */
+    getAllApproveData(item) {
+      this.visible = true
+      this.loading = true
+      console.log('selectShenpiData----->', this.selectShenpiData)
+      this.flowData = item
+      getAction(this.url.queryHisTaskList, { procInstId: item.procInstId }).then(res => {
+        if (res.success) {
+          this.hitaskDataSource = res.result
+        }
+      })
+      getAction(this.url.queryStocktakingBoundOrder, { id: item.dataId }).then((res => {
+        if (res.success) {
+          this.tableRowRecord = res.result
+        }
+      }))
+      getAction(this.url.queryStocktakingBoundDetailList, { stocktakingBoundId: item.dataId }).then(res => {
+        if (res.success) {
+          this.dataSource = res.result.records
+          if (res.result.total) {
+            this.ipagination.total = res.result.total
+          } else {
+            this.ipagination.total = 0
+          }
+        } else {
+          this.$message.warning(res.message)
+        }
+      }).finally(() => {
+        this.loading = false
+      })
+    }
+  }
+}
+</script>
+<style scoped>
+.shallow-hr {
+  border: 0;
+  height: 1px; /* 鍒嗙晫绾跨殑楂樺害 */
+  background-color: rgba(0, 0, 0, 0.1); /* 浣跨敤 RGBA 棰滆壊锛屽苟璁剧疆杈冧綆鐨勯�忔槑搴� */
+  margin: 20px 0; /* 鍒嗙晫绾夸笂涓嬬殑澶栬竟璺� */
+}
+
+.btn-custom {
+  background-color: #4CAF50; /* 缁胯壊鑳屾櫙 */
+  color: white; /* 鐧借壊鏂囧瓧 */
+  border: none; /* 鏃犺竟妗� */
+  padding: 5px 15px; /* 鍐呰竟璺� */
+  text-align: center; /* 鏂囧瓧灞呬腑 */
+  text-decoration: none; /* 鏃犱笅鍒掔嚎 */
+  display: inline-block; /* 琛屽唴鍧楀厓绱� */
+  font-size: 12px; /* 瀛椾綋澶у皬 */
+  margin: 4px 2px; /* 澶栬竟璺� */
+  cursor: pointer; /* 榧犳爣鎮仠鏃舵樉绀烘墜鍨� */
+  border-radius: 4px; /* 鍦嗚杈规 */
+}
+
+.bold-large-label {
+  font-weight: bold;
+  font-size: 20px; /* 鎴栦綘闇�瑕佺殑浠讳綍澶у皬 */
+}
+
+.left_qiu {
+  position: absolute;
+  left: -74px;
+  top: 0;
+  width: 54px;
+  border-radius: 50%;
+  height: 54px;
+  font-size: 13px;
+  margin: auto;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: center;
+  background: #0099ff;
+  transform: translate(0, 0);
+}
+
+/deep/ .ant-timeline-item-tail {
+  left: -29px !important;
+}
+
+.left_qiu span {
+  width: 3em;
+  display: block;
+  color: #fff;
+  text-align: center;
+}
+
+.img {
+  width: 75%;
+}
+
+.wrap {
+  clear: both;
+  width: 100%;
+  display: flex;
+  height: 50px;
+  border: 1px solid #ccc;
+  /* background-color: aqua; */
+}
+
+.box {
+  width: 21%;
+  height: 50px;
+  border-right: 1px solid #ccc;
+  line-height: 50px;
+  /* background: red; */
+  text-align: center;
+  margin: auto;
+}
+
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue b/src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue
index 6c9d5fa..9b8b397 100644
--- a/src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue
+++ b/src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue
@@ -74,7 +74,7 @@
         </a-divider>
         <a-row :gutter="24">
           <a-tabs v-model="activeTabKey">
-            <a-tab-pane key="1" tab="淇濆吇椤规槑缁�">
+            <a-tab-pane key="1" tab="淇濆吇椤规槑缁�" v-if="!isPrecisionCheck">
               <j-vxe-table
                 ref="editableDetailTable"
                 :rowNumber="false"
@@ -110,6 +110,25 @@
                 </template>
               </j-vxe-table>
             </a-tab-pane>
+            <a-tab-pane key='4' tab='绮惧害妫�楠�' v-if="!isMaintenance">
+              <j-vxe-table
+                ref="editablePrecisionDetailTable"
+                :rowNumber="true"
+                :rowSelection="true"
+                :bordered="true"
+                :alwaysEdit="true"
+                :toolbar="false"
+                :toolbarConfig="precisionDetail.toolbarConfig"
+                keep-source
+                :height="300"
+                :dataSource="precisionDetail.dataSource"
+                :columns="precisionDetail.columns"
+                style="margin-top: 8px;" >
+                <template v-slot:actualValue="props">
+                  <a-input-number v-model="props.row.actualValue" :disabled="disableSubmit || confirmDisable" style="width: 100%" />
+                </template>
+              </j-vxe-table>
+            </a-tab-pane>
             <template v-if="selectShenpiData.procInstId">
               <a-tab-pane key='2' tab='娴佺▼鑺傜偣'>
                 <a-card :bordered="false">
@@ -139,14 +158,8 @@
           <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 鏈哄姩鍔炵‘璁や俊鎭�
           </a-divider>
           <a-row :gutter="24">
-            <a-col :span="12">
-              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmDealType" label="纭绫诲瀷">
-                <j-dict-select-tag type='radio' v-model='model.confirmDealType' dictCode='approved_rejected'
-                                   placeholder="璇烽�夋嫨澶勭悊绫诲瀷" :disabled="disableSubmit || leaderConfirmDisable"/>
-              </a-form-model-item>
-            </a-col>
-            <a-col :span="12">
-              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmComment" label="纭鎰忚">
+            <a-col :span="24">
+              <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="confirmComment" label="纭鎰忚">
                 <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.confirmComment"
                             :disabled="disableSubmit || leaderConfirmDisable"/>
               </a-form-model-item>
@@ -222,9 +235,6 @@
         imageSrc: null,
         activeTabKey: '1',
         validatorRules: {
-          confirmDealType: [
-            { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' }
-          ],
           confirmComment: [
             { required: true, message: '璇疯緭鍏ョ‘璁ゆ剰瑙�!' }
           ],
@@ -238,7 +248,8 @@
           approval: '/eam/thirdMaintenanceOrder/approval',
           userSelect: '/eam/user_select/list',
           queryHisTaskList: '/assign/flow/queryHisTaskList',
-          diagramView: '/assign/flow/diagramView'
+          diagramView: '/assign/flow/diagramView',
+          precisionCheckDetail: '/eam/precisionCheckDetail/queryList',
         },
         disableSubmit: false,
         taskData: [],
@@ -327,6 +338,70 @@
             // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
             btn: ['clearSelection']
           }
+        },
+        precisionDetail: {
+          loading: false,
+          dataSource: [],
+          columns: [
+            {
+              title: 'ID',
+              key: 'id',
+              type: JVXETypes.hidden
+            },
+            {
+              title: 'orderId',
+              key: 'orderId',
+              type: JVXETypes.hidden
+            },
+            {
+              title: 'equipmentId',
+              key: 'equipmentId',
+              type: JVXETypes.hidden
+            },
+            {
+              title: 'parameterId',
+              key: 'parameterId',
+              type: JVXETypes.hidden
+            },
+            {
+              title: '妫�娴嬮」鐩�',
+              key: 'parameterId_dictText',
+              type: JVXETypes.normal,
+              width: '25%',
+              align: 'center'
+            },
+            {
+              title: '鍙傛暟缂栫爜',
+              key: 'parameterCode_dictText',
+              type: JVXETypes.normal,
+              width: '20%',
+              align: 'center',
+            },
+            {
+              title: '鍏佸樊鍊�',
+              key: 'parameterValue',
+              type: JVXETypes.normal,
+              width: '15%',
+              align: 'center',
+            },
+            {
+              title: '瀹炴祴鍊�',
+              key: 'actualValue',
+              type: JVXETypes.slot,
+              width: '15%',
+              align: 'center',
+              slotName: 'actualValue',
+              validateRules: [
+                { required: true, message: '璇疯緭鍏ュ疄娴嬪�硷紒' }
+              ]
+            }
+          ],
+          toolbarConfig: {
+            // prefix 鍓嶇紑锛泂uffix 鍚庣紑
+            slot: ['prefix', 'suffix'],
+            // add 鏂板鎸夐挳锛況emove 鍒犻櫎鎸夐挳锛沜learSelection 娓呯┖閫夋嫨鎸夐挳
+            btn: ['add', 'remove', 'clearSelection']
+          }
         }
       }
     },
@@ -341,11 +416,21 @@
       },
       completionDisable: function() {
         return ['COMPLETE', 'ABOLISH'].includes(this.model.maintenanceStatus)
-      }
+      },
+      isMaintenance: function() {
+        return this.selectShenpiData && this.selectShenpiData.taskDefKey === 'maintenance_execution';
+      },
+      isPrecisionCheck: function() {
+        return this.selectShenpiData && this.selectShenpiData.taskDefKey === 'precision_check';
+      },
     },
     methods: {
       async handleDetail(item) {
         this.initParams()
+        //閲嶆柊璁$畻defaultKey
+        if(item && item.taskDefKey === 'precision_check') {
+          this.activeTabKey = '4';
+        }
         this.model = {}
         if (item.procInstId) {
           const { processDefinitionId, processInstanceId, processDefinitionKey, procInstId } = item
@@ -381,6 +466,7 @@
         this.model.instanceId = item.procInstId
         this.model.values = item.variables
         await this.loadDetail(item.dataId)
+        await this.loadPrecisionDetail(item.dataId);
       },
 
       recordDetail(record) {
@@ -392,28 +478,40 @@
           this.model.imageFilesResult = [...obj]
         }
         this.loadDetail(record.id)
+        this.loadPrecisionDetail(record.id);
       },
-
       initParams() {
         this.detail.dataSource = []
         this.visible = true
-        this.activeTabKey = '1'
+        this.activeTabKey = '1';
+        if(this.selectShenpiData &&  this.selectShenpiData.taskDefKey === 'precision_check') {
+          this.activeTabKey = '4';
+        }
         this.spinning = true
       },
-
       async handleOk() {
         const that = this
-        let errMap = await that.$refs.editableDetailTable.validateTable()
-        if (errMap) {
-          this.$message.warning('鏁版嵁鏍¢獙澶辫触锛�')
-          return
+        if(that.$refs.editableDetailTable) {
+          let errMap = await that.$refs.editableDetailTable.validateTable()
+          if (errMap) {
+            this.$message.warning('鏁版嵁鏍¢獙澶辫触锛�')
+            return
+          }
         }
         // 瑙﹀彂琛ㄥ崟楠岃瘉
         this.$refs.form.validate(valid => {
           if (valid) {
             that.confirmLoading = that.spinning = true
-            let tableData = that.$refs.editableDetailTable.getTableData()
+            let tableData = [];
+            let precisionTableData = [];
+            if(that.$refs.editableDetailTable) {
+              tableData = that.$refs.editableDetailTable.getTableData()
+            }
+            if(that.$refs.editablePrecisionDetailTable) {
+              precisionTableData = that.$refs.editablePrecisionDetailTable.getTableData()
+            }
             that.model.tableDetailList = [...tableData]
+            that.model.precisionDetailList = [...precisionTableData]
             let httpurl = this.url.approval
             let method = 'put'
 
@@ -433,7 +531,6 @@
           }
         })
       },
-
       autocompleteForm(selectObj) {
         this.$set(this.model, 'standardName', selectObj.standardName)
         this.$set(this.model, 'maintenancePeriod', selectObj.maintenancePeriod)
@@ -445,7 +542,6 @@
         }
         this.loadMaintenanceOperatorList(this.model.equipmentId)
       },
-
       //鏍囧噯閫夋嫨鍙樺寲
       loadDetail(orderId) {
         if (orderId) {
@@ -460,7 +556,15 @@
             })
         }
       },
-
+      loadPrecisionDetail(orderId) {
+        if (orderId) {
+          getAction(this.url.precisionCheckDetail, { orderId: orderId }).then(res => {
+            if (res.success) {
+              this.precisionDetail.dataSource = [...res.result]
+            }
+          })
+        }
+      },
       loadMaintenanceOperatorList(equipmentId) {
         this.maintenanceOperatorOptions = []
         let params = { positionCode: 'PCR0001' }
@@ -477,12 +581,10 @@
           }
         })
       },
-
       handleInspectionResultSelectChange(value, record) {
         if (record.exceptionDescription) delete record.exceptionDescription
         if (record.reportFlag) delete record.reportFlag
       },
-
       // 鎵归噺閫夋嫨鎵�鏈夌偣妫�缁撴灉
       handleSelectAllInspectionResult() {
         this.selectedRowKeys.forEach(key => {
diff --git a/src/views/flowable/workflow/transfer/EquipmentTransferApprovalModal.vue b/src/views/flowable/workflow/transfer/EquipmentTransferApprovalModal.vue
new file mode 100644
index 0000000..c0f5b68
--- /dev/null
+++ b/src/views/flowable/workflow/transfer/EquipmentTransferApprovalModal.vue
@@ -0,0 +1,235 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    centered
+    cancelText="鍏抽棴">
+
+    <a-spin :spinning="spinning">
+      <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="12">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="code" label="鍗曟嵁鍙�">
+              <a-input v-model="model.code" disabled />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="璁惧缂栫爜">
+              <lx-search-equipment-select placeholder="璇疯緭鍏ヨ澶囩紪鍙锋垨鍚嶇О鎼滅储"
+                                          v-model="model.equipmentId" disabled></lx-search-equipment-select>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="newDepartId_dictText" label="璋冨叆閮ㄩ棬">
+              <a-input v-model="model.newDepartId_dictText" disabled />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="oldDepartId_dictText" label="璋冨嚭閮ㄩ棬">
+              <a-input v-model="model.oldDepartId_dictText" disabled />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reportUser_dictText" label="鐢宠浜�">
+              <a-input v-model="model.reportUser_dictText" disabled />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="transferReason" label="鍙樺姩鍘熷洜">
+              <a-input v-model="model.transferReason" disabled />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="24">
+            <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="remark" label="澶囨敞">
+              <a-textarea v-model="model.remark" disabled />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <div v-if="approvalDisable">
+          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 绠$悊鍛樺皝瀛樺鏍�
+          </a-divider>
+          <a-row :gutter="24">
+            <a-col :span="12">
+              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalDealType" label="瀹℃壒绫诲瀷">
+                <j-dict-select-tag type="radio" v-model="model.approvalDealType" dictCode="approved_rejected"
+                                   placeholder="璇烽�夋嫨澶勭悊绫诲瀷" :disabled="disableSubmit || initialAcceptanceDisable" />
+              </a-form-model-item>
+            </a-col>
+            <a-col :span="12">
+              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalComment" label="瀹℃壒鎰忚">
+                <a-textarea placeholder="璇疯緭鍏ユ剰瑙�" v-model="model.approvalComment"
+                            :disabled="disableSubmit || returnDisable" />
+              </a-form-model-item>
+            </a-col>
+          </a-row>
+        </div>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+import { getAction, httpAction } from '@/api/manage'
+import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
+
+export default {
+  name: 'EquipmentTransferApprovalModal',
+  components: {
+    LxSearchEquipmentSelect
+  },
+  props: {
+    selectShenpiData: {
+      type: Object
+    }
+  },
+  data() {
+    return {
+      title: '鎿嶄綔',
+      visible: false,
+      editable: false,
+      model: {},
+      treeData: [],
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 18 }
+      },
+      labelColLong: {
+        xs: { span: 24 },
+        sm: { span: 2 }
+      },
+      wrapperColLong: {
+        xs: { span: 24 },
+        sm: { span: 21 }
+      },
+      confirmLoading: false,
+      spinning: false,
+      imageSrc: null,
+      validatorRules: {
+        approvalDealType: [
+          { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' }
+        ],
+        unsealApprovalDealType: [
+          { required: true, message: '璇烽�夋嫨閫氳繃鎴栭┏鍥�!' }
+        ],
+        approvalComment: [
+          { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!' }
+        ],
+        unsealApprovalComment: [
+          { required: true, message: '璇疯緭鍏ュ鎵规剰瑙�!' }
+        ],
+        returnComment: [
+          { required: true, message: '璇疯緭鍏ュ綊杩樺娉�!' }
+        ],
+        confirmComment: [
+          { required: true, message: '璇疯緭鍏ョ‘璁ゆ剰瑙�!' }
+        ]
+      },
+      url: {
+        queryById: '/eam/eamEquipmentTransfer/queryById',
+        approval: '/eam/eamEquipmentTransfer/approval',
+        loadProductionOptions: '/mdc/mdcProduction/loadProductionTreeOptions'
+      },
+      disableSubmit: false
+    }
+  },
+  created() {
+    this.loadAllProductionTree()
+  },
+  computed: {
+    approvalDisable: function() {
+      return ['WAIT_CHECK'].includes(this.model.transferStatus)
+    },
+  },
+  methods: {
+    async handleDetail(item) {
+      this.initParams()
+      this.model = {}
+      let res = await getAction(this.url.queryById, { id: item.dataId })
+      this.model = Object.assign({}, res.result)
+      this.model.dataId = item.dataId
+      this.model.taskId = item.id
+      this.model.userId = item.assignee
+      this.model.instanceId = item.procInstId
+      this.model.values = item.variables
+      this.spinning = false;
+    },
+
+    recordDetail(record) {
+      console.log('record', record)
+      this.initParams()
+      this.model = Object.assign({}, record)
+    },
+
+    initParams() {
+      this.visible = true
+      this.spinning = true
+    },
+
+    async handleOk() {
+      const that = this
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          that.confirmLoading = that.spinning = true
+          let httpurl = this.url.approval
+          let method = 'put'
+          httpAction(httpurl, this.model, method).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message)
+              that.$emit('searchReset')
+              that.close()
+            } else {
+              that.$message.warning(res.message)
+            }
+          }).finally(() => {
+            that.confirmLoading = that.spinning = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    },
+
+    close() {
+      this.$emit('close')
+      this.visible = false
+      this.$refs.form.clearValidate()
+    },
+    loadAllProductionTree() {
+      //鍔犺浇杞﹂棿閫夋嫨鏍�
+      getAction(this.url.loadProductionOptions).then(res => {
+        if (res.success) {
+          this.treeData = [...res.result]
+        } else {
+          that.$message.warning(res.message)
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/views/system/modules/UserModal.vue b/src/views/system/modules/UserModal.vue
index f8df9c9..32c2078 100644
--- a/src/views/system/modules/UserModal.vue
+++ b/src/views/system/modules/UserModal.vue
@@ -380,6 +380,7 @@
       disableSubmit: false,
       dateFormat: 'YYYY-MM-DD',
       validatorRules: {
+        workNo:[{ required: true, message: '璇疯緭鍏ュ伐鍙�!' }],
         username: [{ required: true, message: '璇疯緭鍏ョ敤鎴疯处鍙�!' },
           { validator: this.validateUsername }],
         password: [
diff --git a/src/views/tms/InboundList.vue b/src/views/tms/InboundList.vue
new file mode 100644
index 0000000..6147900
--- /dev/null
+++ b/src/views/tms/InboundList.vue
@@ -0,0 +1,39 @@
+<template>
+  <a-row
+    type="flex"
+    :gutter="16"
+  >
+    <a-col
+      :md="5"
+      :sm="24"
+    >
+      <inbound-list-left />
+    </a-col>
+    <a-col
+      :md="24-5"
+      :sm="24"
+    >
+      <inbound-list-right />
+    </a-col>
+  </a-row>
+</template>
+
+<script>
+import InboundListLeft from './modules/inbound/InboundListLeft'
+import InboundListRight from './modules/inbound/InboundListRight'
+export default {
+  name: 'InboundList',
+  components: { InboundListLeft, InboundListRight },
+  data() {
+    return {
+      description: '宸ュ叿鍏ュ簱',
+      currentOrgCode: ''
+    }
+  },
+  methods: {}
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/InboundOrderList.vue b/src/views/tms/InboundOrderList.vue
new file mode 100644
index 0000000..214521c
--- /dev/null
+++ b/src/views/tms/InboundOrderList.vue
@@ -0,0 +1,241 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col :md="6" :sm="8">
+            <a-form-item label="鍏ュ簱鐢宠鍗曠紪鍙�">
+              <a-input placeholder="璇疯緭鍏ュ叆搴撶敵璇峰崟缂栧彿" v-model="queryParam.inboundNum" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="8">
+              <a-form-item label="鍏ュ簱绫诲瀷">
+                <j-search-select-tag
+                  placeholder="璇烽�夋嫨鍏ュ簱绫诲瀷"
+                  v-model="queryParam.inStorehouseType"
+                  dict="in_storehouse_type"
+                />
+              </a-form-item>
+            </a-col>
+          <a-col :md="6" :sm="8">
+              <a-form-item label="缁忔墜浜�">
+                <j-search-select-tag
+                  placeholder="璇烽�夋嫨缁忔墜浜�"
+                  v-model="queryParam.handler"
+                  dict="sys_user,realname,id,del_flag!=1"
+                />
+              </a-form-item>
+            </a-col>
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+      <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+      <a-button type="primary" @click="searchReset" icon="reload">閲嶇疆</a-button>
+      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <a-table
+      ref="table"
+      size="middle"
+      bordered
+      rowKey="id"
+      :customRow="customRow"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+      <!--鐘舵�佹爮涓�у睍绀�-->
+      <span slot="action" slot-scope="text, record">
+        <a href="javascript:;" @click="handleEdit(record)" v-if="record.orderStatus == '1'">缂栬緫</a>
+        <a-divider type="vertical" v-if="record.orderStatus == '1'" />
+        <a href="javascript:;" @click="handleDetail(record)">璇︽儏</a>
+        <a-divider type="vertical"  v-if="record.orderStatus == '1'"/>
+        <a href="javascript:;" @click="handleSubmit(record)" v-if="record.orderStatus == '1'">鎻愪氦</a>
+      </span>
+    </a-table>
+    <a-tabs defaultActiveKey="1">
+      <a-tab-pane tab="宸ュ叿鍏ュ簱鏄庣粏" key="1">
+        <inbound-detail-list ref="inboundDetailList"></inbound-detail-list>
+      </a-tab-pane>
+    </a-tabs>
+    <!-- table鍖哄煙-end -->
+    <inbound-order-model ref="modalForm" @ok="modalFormOk"></inbound-order-model>
+  </a-card>
+</template>
+
+<script>
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import InboundOrderModel from './modules/inboundOrder/InboundOrderModel'
+import InboundDetailList from './modules/inboundOrder/InboundDetailList'
+import { requestPut } from '@/api/manage'
+import JDictSelectTag from '@/components/dict/JDictSelectTag'
+import JSearchSelectTag from '@/components/dict/JSearchSelectTag'
+import { postAction,getAction } from '../../api/manage'
+
+export default {
+  name: 'InboundOrderList',
+  mixins: [JeecgListMixin],
+  components: {
+    InboundOrderModel,
+    InboundDetailList,
+    JDictSelectTag,
+    JSearchSelectTag,
+  },
+  data() {
+    return {
+      description: '鍏ュ簱鐢宠鍗�',
+      url: {
+        list: '/tms/inboundOrder/list',
+        importExcelUrl: '/tms/inboundOrder/importExcel',
+        exportXlsUrl: '/tms/inboundOrder/exportXls',
+        edit:'/tms/inboundOrder/edit',
+        submit:'/tms/inboundOrder/submit'
+      },
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          align: 'center',
+          customRender: function (t, r, index) {
+            return parseInt(index) + 1
+          },
+        },
+        {
+          title: '鍏ュ簱鐢宠鍗曠紪鍙�',
+          align: 'center',
+          dataIndex: 'inboundNum',
+          sorter: true,
+        },
+        {
+          title: '鍏ュ簱鍗曠被鍨�',
+          align: 'center',
+          dataIndex: 'inStorehouseType_dictText',
+        },
+        {
+          title: '缁忔墜浜�',
+          align: 'center',
+          dataIndex: 'handler_dictText',
+        },
+        {
+          title: '鐢宠鍘熷洜',
+          align: 'center',
+          dataIndex: 'applicationReason',
+        },
+        {
+          title: '鍏ュ簱鏃堕棿',
+          align: 'center',
+          dataIndex: 'inboundTime',
+          sorter: true,
+        },
+        {
+          title: '瀹℃牳浜�',
+          align: 'center',
+          dataIndex: 'reviewer_dictText',
+        },
+        {
+          title: '瀹℃牳鏃堕棿',
+          align: 'center',
+          dataIndex: 'approvalDate',
+          sorter: true,
+        },
+        {
+          title: '瀹℃牳鐘舵��',
+          align: 'center',
+          dataIndex: 'orderStatus_dictText',
+        },
+         {
+          title: '鍊熺敤鍗曞彿',
+          align: 'center',
+          dataIndex: 'borrowNum',
+        },
+         {
+          title: '瀹℃壒鎰忚',
+          align: 'center',
+          dataIndex: 'approvalOpinion',
+        },
+        {
+          width: 150,
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' },
+        },
+      ],
+    }
+  },
+  computed: {
+    /* 瀵煎叆璺緞椤甸潰閲嶆柊璁$畻 */
+    importExcelUrl: function () {
+      //  return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;//寮�鍙戠幆澧冩寚鍚�
+      return `${window._CONFIG['hxFileURL']}/${this.url.importExcelUrl}`
+    },
+  },
+  methods: {
+    searchReset() {
+      this.queryParam = {}
+      this.$refs.inboundDetailList.dataSource = []
+      this.loadData(1);
+    },
+    customRow(record) {
+      return {
+        on: {
+          click: (e) => {
+            //灏嗗綋鍓嶉�変腑鐨勮褰曚紶鍒板瓙椤甸潰
+            this.$bus.$emit('getToolingStorageData', record)
+            //鐐瑰嚮褰撳墠琛屽彉鑹�
+            let oldList = document.querySelectorAll('.checked-td-of-add-table')
+            if (oldList) {
+              for (let j = 0; j < oldList.length; j++) {
+                oldList[j].classList.remove('checked-td-of-add-table')
+              }
+            }
+            let children = e.target.parentNode.children
+            for (let i = 0; i < children.length; i++) {
+              children[i].classList.add('checked-td-of-add-table')
+            }
+          },
+        },
+      }
+    },
+    handleEdit: function (record) {
+        this.$refs.modalForm.edit(record)
+        this.$refs.modalForm.title = '缂栬緫'
+        this.$refs.modalForm.disableSubmit = false
+    },
+    handleAdd() {
+      this.$refs.modalForm.add()
+      this.$refs.modalForm.title = '鏂板'
+      this.$refs.modalForm.disableSubmit = false
+    },
+    handleSubmit(record) {
+        let that = this;
+        getAction(that.url.submit, { id:record.id}).then((res) => {
+          if (res.success) {
+            that.$message.success(res.message);
+            that.loadData();
+          } else {
+            that.$message.warning(res.message);
+          }
+        })
+      },
+  },
+}
+</script>
+
+<style lang="less" scoped>
+@import '~@assets/less/common.less';
+/deep/ .notshow {
+  display: none;
+}
+/deep/ .checked-td-of-add-table {
+  background-color: rgba(220, 220, 220, 1);
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/OutboundList.vue b/src/views/tms/OutboundList.vue
new file mode 100644
index 0000000..642f1db
--- /dev/null
+++ b/src/views/tms/OutboundList.vue
@@ -0,0 +1,39 @@
+<template>
+  <a-row
+    type="flex"
+    :gutter="16"
+  >
+    <a-col
+      :md="5"
+      :sm="24"
+    >
+      <outbound-list-left/>
+    </a-col>
+    <a-col
+      :md="24-5"
+      :sm="24"
+    >
+      <outbound-list-right/>
+    </a-col>
+  </a-row>
+</template>
+
+<script>
+import OutboundListLeft from './modules/outBound/OutboundListLeft.vue'
+import OutboundListRight from './modules/outBound/OutboundListRight.vue'
+export default {
+  name: 'OutboundList',
+  components: { OutboundListLeft, OutboundListRight },
+  data() {
+    return {
+      description: '宸ュ叿鍑哄簱',
+      currentOrgCode: ''
+    }
+  },
+  methods: {}
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/lossBound/LossboundDetailList.vue b/src/views/tms/lossBound/LossboundDetailList.vue
new file mode 100644
index 0000000..bc54001
--- /dev/null
+++ b/src/views/tms/lossBound/LossboundDetailList.vue
@@ -0,0 +1,180 @@
+<template>
+  <a-card :bordered="false" :class="'cust-erp-sub-tab'">
+    <!-- 鏌ヨ鍖哄煙 -->
+
+    <!--    </div>-->
+    <!-- 鏌ヨ鍖哄煙-END -->
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator" v-if="mainId">
+
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :scroll="{x:true}"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="null"
+        @change="handleTableChange">
+
+      </a-table>
+    </div>
+
+<!--    <lossboundDetail-modal ref="modalForm" @ok="modalFormOk" :mainId="mainId"></lossboundDetail-modal>-->
+  </a-card>
+</template>
+
+<script>
+
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import LossboundDetailModal from './modules/LossboundDetailModal'
+
+export default {
+  name: 'LossboundDetailList',
+  mixins: [JeecgListMixin],
+  components: { LossboundDetailModal },
+  props: {
+    mainId: {
+      type: String,
+      default: '',
+      required: false
+    }
+  },
+  watch: {
+    mainId: {
+      immediate: true,
+      handler(val) {
+        if (!this.mainId) {
+          this.clearList()
+        } else {
+          this.queryParam['lossBoundId'] = val
+          this.loadData(1)
+        }
+      }
+    }
+  },
+  data() {
+    return {
+      description: '鎶ユ崯绠$悊椤甸潰',
+      disableMixinCreated: true,
+      // 琛ㄥご
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          }
+        },
+        {
+          title: '鍒�鍏风紪鍙�',
+          align: 'center',
+          dataIndex: 'toolCode'
+        },
+        {
+          title: '宸ュ叿绫诲瀷',
+          align: 'center',
+          dataIndex: 'applicationType_dictText'
+        },
+        {
+          title: '鎶ユ崯鍘熷洜',
+          align: 'center',
+          dataIndex: 'lossReason'
+        },
+        {
+          title: '鎶ユ崯鏁伴噺',
+          align: 'center',
+          dataIndex: 'lossNumber'
+        },
+        {
+          title: '涓枃鍚嶇О',
+          align: 'center',
+          dataIndex: 'chineseName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          align: 'center',
+          dataIndex: 'toolModel'
+        },
+        {
+          title: '鍒�鍏锋潗鏂�',
+          align: 'center',
+          dataIndex: 'toolMaterial'
+        },
+        {
+          title: '闆朵欢鏉愭枡',
+          align: 'center',
+          dataIndex: 'partMaterial'
+        },
+        {
+          title: '鍘傚',
+          align: 'center',
+          dataIndex: 'supplierId'
+        },
+        {
+          title: '瀛樺偍浣嶇疆(搴撲綅鍙�)',
+          align: 'center',
+          dataIndex: 'positionCode'
+        },
+
+        {
+          title: '鍒涘缓鏃堕棿',
+          align: 'center',
+          dataIndex: 'createTime'
+        },
+        {
+          title: '澶囨敞',
+          align: 'center',
+          dataIndex: 'remark'
+        }
+        // {
+        //   title: '鎿嶄綔',
+        //   dataIndex: 'action',
+        //   align:"center",
+        //   fixed:"right",
+        //   width:147,
+        //   scopedSlots: { customRender: 'action' },
+        // }
+      ],
+      url: {
+        list: '/tms/toolsLossBound/listlossboundDetailByMainId',
+        delete: '/tms/toolsLossBound/deleteLootboundDetail',
+        deleteBatch: '/tms/toolsLossBound/deleteBatchLossboundDetail',
+        exportXlsUrl: '/tms/toolsLossBound/exportLossboundDetail',
+        importUrl: '/tms/toolsLossBound/importLossboundDetail'
+      },
+    }
+  },
+  created() {
+  },
+  computed: {
+    importExcelUrl() {
+      return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}`
+    }
+  },
+  methods: {
+    clearList() {
+      this.dataSource = []
+      this.selectedRowKeys = []
+      this.ipagination.current = 1
+    }
+
+  }
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
diff --git a/src/views/tms/lossBound/LossboundList.vue b/src/views/tms/lossBound/LossboundList.vue
new file mode 100644
index 0000000..67bac90
--- /dev/null
+++ b/src/views/tms/lossBound/LossboundList.vue
@@ -0,0 +1,317 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鎶ユ崯鍗曞崟鍙�">
+              <j-input placeholder="璇疯緭鍏ユ姤鎹熷崟鍗曞彿"    v-model="queryParam.orderCode"></j-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="瀹℃牳鐘舵��">
+              <j-dict-select-tag placeholder="璇烽�夋嫨瀹℃牳鐘舵��" v-model="queryParam.orderStatus"
+                                 dictCode="approval_status"/>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+<!--              <a @click="handleToggleSearch" style="margin-left: 8px">-->
+<!--                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}-->
+<!--                <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />-->
+<!--              </a>-->
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 鏌ヨ鍖哄煙-END -->
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
+
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        class="j-table-force-nowrap"
+        :scroll="{x:true}"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'radio'}"
+        :customRow="clickThenSelect"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleDetail(record)">璇︽儏</a>
+          <span v-if="record.orderStatus === '1'">
+            <a-divider type="vertical" />
+            <a-popconfirm title="纭畾鎻愪氦鍚�?" @confirm="() => handleSubmit(record)">
+              <a>鎻愪氦</a>
+            </a-popconfirm>
+            <a-divider type="vertical" />
+            <a-dropdown>
+              <a class="ant-dropdown-link">鏇村<a-icon type="down" /></a>
+              <a-menu slot="overlay">
+                <a-menu-item>
+                  <a @click="handleEdit(record)">缂栬緫</a>
+                </a-menu-item>
+                <a-menu-item>
+                  <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                    <a>鍒犻櫎</a>
+                  </a-popconfirm>
+                </a-menu-item>
+              </a-menu>
+            </a-dropdown>
+          </span>
+        </span>
+
+      </a-table>
+    </div>
+
+    <a-tabs defaultActiveKey="1">
+      <a-tab-pane tab="鎶ユ崯鐢宠鍗曟槑缁�" key="1">
+        <LossboundDetailList ref="lossboundDetailList" :mainId="lossboundDetailMainId" />
+      </a-tab-pane>
+    </a-tabs>
+
+    <lossbound-modal ref="modalForm" @ok="modalFormOk"></lossbound-modal>
+  </a-card>
+</template>
+
+<script>
+
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import LossboundModal from './modules/LossboundModal'
+import { deleteAction, getAction } from '@/api/manage'
+import LossboundDetailList from './LossboundDetailList.vue'
+import '@/assets/less/TableExpand.less'
+
+export default {
+  name: 'LooboundList',
+  mixins: [JeecgListMixin],
+  components: {
+    LossboundDetailList,
+    LossboundModal
+  },
+  data() {
+    return {
+      description: 'tms_outbound_order绠$悊椤甸潰',
+      // 琛ㄥご
+      columns: [
+        {
+          title: '鎶ユ崯鍗曞崟鍙�',
+          align: 'center',
+          dataIndex: 'orderCode'
+        },
+        {
+          title: '瀹℃牳鐘舵��',
+          align: 'center',
+          dataIndex: 'orderStatus_dictText'
+        },
+        {
+          title: '缁忔墜浜�',
+          align: 'center',
+          dataIndex: 'handler_dictText'
+        },
+        {
+          title: '瀹℃牳浜�',
+          align: 'center',
+          dataIndex: 'reviewer_dictText'
+        },
+        {
+          title: '瀹℃牳鏃堕棿',
+          align: 'center',
+          dataIndex: 'auditDate'
+        },
+        {
+          title: '瀹℃牳鎰忚',
+          align: 'center',
+          dataIndex: 'approvalOpinion'
+        },
+        {
+          title: '澶囨敞',
+          align: 'center',
+          dataIndex: 'remark'
+        },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: 'center',
+          fixed: 'right',
+          width: 147,
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/tms/toolsLossBound/list',
+        delete: '/tms/toolsLossBound/delete',
+        submit: '/tms/toolsLossBound/submit',
+        deleteBatch: '/tms/toolsLossBound/deleteBatch',
+        exportXlsUrl: '/tms/toolsLossBound/exportXls',
+        importExcelUrl: 'tms/toolsLossBound/importExcel'
+      },
+      /* 鍒嗛〉鍙傛暟 */
+      ipagination: {
+        current: 1,
+        pageSize: 5,
+        pageSizeOptions: ['5', '10', '50'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+      selectedMainId: '',
+      superFieldList: [],
+      lossboundDetailMainId: ''
+    }
+  },
+  created() {
+    this.getSuperFieldList()
+  },
+  computed: {
+    importExcelUrl: function() {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+    }
+  },
+  methods: {
+    // handleEdit: function (record) {
+    //   this.$refs.modalForm.edit(record);
+    //   this.$refs.modalForm.title = "缂栬緫";
+    //   this.$refs.modalForm.disableSubmit = false;
+    // },
+    // handleAdd: function () {
+    //   this.$refs.modalForm.add();
+    //   this.$refs.modalForm.title = "鏂板";
+    //   this.$refs.modalForm.disableSubmit = false;
+    // },
+    modalFormOk() {
+      this.$refs.lossboundDetailList.clearList()
+      this.loadData()
+    },
+    searchReset() {
+      this.queryParam = {}
+      this.onClearSelected()
+      this.$refs.lossboundDetailList.clearList()
+      this.loadData(1)
+    },
+    initDictConfig() {
+    },
+    clickThenSelect(record) {
+      return {
+        on: {
+          click: () => {
+            this.onSelectChange(record.id.split(','), [record])
+          }
+        }
+      }
+    },
+    onClearSelected() {
+      this.selectedRowKeys = []
+      this.selectionRows = []
+      this.selectedMainId = ''
+      this.lossboundDetailMainId = ''
+    },
+    onSelectChange(selectedRowKeys, selectionRows) {
+      this.selectedMainId = selectedRowKeys[0]
+      this.selectedRowKeys = selectedRowKeys
+      this.selectionRows = selectionRows
+      this.lossboundDetailMainId = selectionRows[0]['id']
+    },
+    handleSubmit(record) {
+      getAction(this.url.submit, { id: record.id }).then((res) => {
+        if (res.success) {
+          this.$message.success(res.message)
+          this.loadData()
+          this.$refs.lossboundDetailList.clearList()
+        } else {
+          this.$message.warning(res.message)
+        }
+      })
+    },
+    handleDelete: function(id) {
+      if (!this.url.delete) {
+        this.$message.error('璇疯缃畊rl.delete灞炴��!')
+        return
+      }
+      var that = this
+      deleteAction(that.url.delete, { id: id }).then((res) => {
+        if (res.success) {
+          //閲嶆柊璁$畻鍒嗛〉闂
+          that.reCalculatePage(1)
+          // that.$message.success(res.message);
+          that.$notification.success({
+            message: '娑堟伅',
+            description: res.message
+          })
+          that.loadData()
+          this.$refs.lossboundDetailList.clearList()
+        } else {
+          // that.$message.warning(res.message);
+          that.$notification.warning({
+            message: '娑堟伅',
+            description: res.message
+          })
+        }
+      })
+    },
+    loadData(arg) {
+      if (!this.url.list) {
+        this.$message.error('璇疯缃畊rl.list灞炴��!')
+        return
+      }
+      //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
+      if (arg === 1) {
+        this.ipagination.current = 1
+      }
+      this.onClearSelected()
+      var params = this.getQueryParams()//鏌ヨ鏉′欢
+      this.loading = true
+      getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          this.dataSource = res.result.records
+          this.ipagination.total = res.result.total
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false
+      })
+    },
+    getSuperFieldList() {
+      let fieldList = []
+      fieldList.push({ type: 'string', value: 'orderCode', text: '鍑哄簱鍗曠紪鍙�', dictCode: '' })
+
+      fieldList.push({ type: 'string', value: 'handler', text: '缁忔墜浜�', dictCode: '' })
+      fieldList.push({ type: 'sel_user', value: 'reviewer', text: '瀹℃牳浜�' })
+      fieldList.push({ type: 'string', value: 'orderStatus', text: '瀹℃牳鐘舵��', dictCode: '' })
+      fieldList.push({ type: 'date', value: 'auditDate', text: '瀹℃牳鏃堕棿' })
+      fieldList.push({ type: 'string', value: 'approvalOpinion', text: '瀹℃牳鎰忚', dictCode: '' })
+      fieldList.push({ type: 'string', value: 'subjectMatter', text: '棰嗙敤浜嬬敱', dictCode: '' })
+      fieldList.push({ type: 'date', value: 'outboundTime', text: '鍑哄簱鏃堕棿' })
+      fieldList.push({ type: 'string', value: 'remark', text: '澶囨敞', dictCode: '' })
+      fieldList.push({ type: 'string', value: 'createBy', text: '鎿嶄綔鍛�', dictCode: '' })
+      fieldList.push({ type: 'date', value: 'createTime', text: '鍒涘缓鏃堕棿' })
+      this.superFieldList = fieldList
+    }
+  }
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue b/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue
new file mode 100644
index 0000000..ad06f5d
--- /dev/null
+++ b/src/views/tms/lossBound/modules/JSelectLossboundToolModal.vue
@@ -0,0 +1,221 @@
+<template>
+  <!--鏀寔鍏ㄥ睆缂╂斁-->
+  <j-modal
+    :visible="visible"
+    :width="1200"
+    :title="title"
+    switchFullscreen
+    @ok="handleSubmit"
+    @cancel="close"
+    style="top: 50px"
+    cancelText="鍏抽棴"
+  >
+    <a-card :bordered="false">
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="searchQuery">
+          <a-row :gutter="24">
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="宸ュ叿缂栫爜">
+                <a-input placeholder="璇疯緭鍏ュ伐鍏风紪鐮�,鏀寔妯$硦鏌ヨ" v-model="queryParam.toolCode"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+            <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+          </a-row>
+        </a-form>
+      </div>
+      <!--鍑哄簱鍗曞垪琛�-->
+      <a-table
+        ref="table"
+        size="middle"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :rowSelection="rowSelection"
+        :loading="loading"
+        @change="handleTableChange"
+      >
+      </a-table>
+    </a-card>
+  </j-modal>
+</template>
+
+<script>
+import { filterObj } from '@/utils/util'
+import { getAction } from '@api/manage'
+
+export default {
+  name: 'JSelectLossboundToolModal',
+  components: {},
+  props: {},
+  data() {
+    return {
+      title: '閫夋嫨鍑哄簱宸ュ叿',
+      queryParam: {},
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: (_, __, index) => parseInt(index) + 1
+        },
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode'
+        },
+        {
+          title: '涓枃鍚嶇О',
+          align: 'center',
+          dataIndex: 'chineseName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          align: 'center',
+          dataIndex: 'toolModel'
+        }
+      ],
+      selectedRowKeys: [],
+      oldSelectRow: [],
+      scrollTrigger: { x: 1500, y: 500 },
+      dataSource: [],
+      selectionRows: [],
+      ipagination: {
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['5', '10', '20'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0,
+      },
+      isorter: {
+        column: 'toolCode',
+        order: 'asc',
+      },
+      departTree: [],
+      visible: false,
+      loading: false,
+      prepareKnifeDetailList:[],
+      url: {
+        list: '/tms/baseTools/listWithLedgerAndConfig'
+      },
+    }
+  },
+  computed: {
+    rowSelection() {
+      return {
+        type: 'checkbox',
+        onChange: (selectedRowKeys, selectedRows) => {
+          this.selectedRowKeys = selectedRowKeys
+          this.onSelectChange(selectedRows)
+        },
+        getCheckboxProps: (record) => ({
+          props: {
+            disabled: record.disabled,
+          },
+        }),
+      }
+    },
+  },
+  watch: {
+  },
+  created() {
+  },
+  methods: {
+    async loadData(arg) {
+      if (arg === 1) {
+        this.ipagination.current = 1
+      }
+      this.loading = true
+      let params = this.getQueryParams() //鏌ヨ鏉′欢
+      console.log(params)
+      await getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          this.dataSource = res.result.records
+          this.ipagination.total = res.result.total
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false
+      })
+    },
+    showModal(oldSelectRow) {
+      this.oldSelectRow = oldSelectRow
+      this.visible = true
+      this.queryParam.status = '1'
+      this.queryParam.excludeIds = oldSelectRow
+      this.loadData(1)
+    },
+    getQueryParams() {
+      let param = Object.assign({}, this.queryParam, this.isorter)
+      param.field = this.getQueryField()
+      param.pageNo = this.ipagination.current
+      param.pageSize = this.ipagination.pageSize
+      return filterObj(param)
+    },
+    //鏌ヨ鏉′欢澶勭悊
+    getQueryField() {
+      let fields = ['id'];
+      for (let a = 0; a < this.columns.length; a++) {
+        fields.push(this.columns[a].dataIndex);
+      }
+      return fields.join(',');
+    },
+    searchReset() {
+      this.queryParam = {}
+      this.loadData(1)
+    },
+    close() {
+      this.queryParam = {}
+      // this.searchReset(0)
+      this.selectedRowKeys = []
+      this.selectionRows = []
+      this.visible = false
+    },
+    handleTableChange(pagination, filters, sorter) {
+      if (Object.keys(sorter).length > 0) {
+        this.isorter.column = sorter.field
+        this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc'
+      }
+      this.ipagination = pagination
+      this.loadData()
+    },
+    handleSubmit() {
+      if (this.selectionRows.length > 0) {
+        this.$bus.$emit('selectionRows', this.selectionRows)
+        // this.searchReset(0)
+        this.close()
+      } else {
+        this.$message.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�')
+      }
+    },
+    onSelectChange(selectionRows) {
+      this.selectionRows = selectionRows
+    },
+    searchQuery() {
+      this.loadData(1)
+    },
+  },
+}
+</script>
+
+<style scoped>
+.ant-table-tbody .ant-table-row td {
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+
+#components-layout-demo-custom-trigger .trigger {
+  font-size: 18px;
+  line-height: 64px;
+  padding: 0 24px;
+  cursor: pointer;
+  transition: color 0.3s;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/lossBound/modules/LossboundDetailModal.vue b/src/views/tms/lossBound/modules/LossboundDetailModal.vue
new file mode 100644
index 0000000..adaba74
--- /dev/null
+++ b/src/views/tms/lossBound/modules/LossboundDetailModal.vue
@@ -0,0 +1,141 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴">
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="鍒�鍏风紪鐮�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toolCode">
+              <a-input v-model="model.toolCode" placeholder="璇疯緭鍏ュ垁鍏风紪鐮�"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="鐢宠鍑哄簱鏁伴噺" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="outboundQuantity">
+              <a-input-number v-model="model.outboundQuantity" placeholder="璇疯緭鍏ョ敵璇峰嚭搴撴暟閲�" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="浠撳簱" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="storageLocation">
+              <a-input v-model="model.storageLocation" placeholder="璇疯緭鍏ヤ粨搴�"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="鍑哄簱搴撲綅" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="outboundLocation">
+              <a-input v-model="model.outboundLocation" placeholder="璇疯緭鍏ュ嚭搴撳簱浣�"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="鍑哄簱鐘舵��;1.鏈嚭搴擄紱2.閮ㄥ垎鍑哄簱锛�3.鍑哄簱瀹屾垚" :labelCol="labelCol"
+                               :wrapperCol="wrapperCol" prop="status">
+              <a-input-number v-model="model.status" placeholder="璇疯緭鍏ュ嚭搴撶姸鎬�;1.鏈嚭搴擄紱2.閮ㄥ垎鍑哄簱锛�3.鍑哄簱瀹屾垚"
+                              style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+
+import { httpAction } from '@/api/manage'
+
+export default {
+  name: 'LossboundDetailModal',
+  components: {},
+  props: {
+    mainId: {
+      type: String,
+      required: false,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      title: '鎿嶄綔',
+      width: 800,
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      },
+
+      confirmLoading: false,
+      validatorRules: {},
+      url: {
+        add: '/tms/toolsLossBound/add',
+        edit: '/tms/toolsLossBound/edit'
+      }
+
+    }
+  },
+  created() {
+    //澶囦唤model鍘熷鍊�
+    this.modelDefault = JSON.parse(JSON.stringify(this.model))
+  },
+  methods: {
+    add() {
+      this.edit(this.modelDefault)
+    },
+    edit(record) {
+      this.model = Object.assign({}, record)
+      this.visible = true
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+      this.$refs.form.clearValidate()
+    },
+    handleOk() {
+      const that = this
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          that.confirmLoading = true
+          let httpurl = ''
+          let method = ''
+          if (!this.model.id) {
+            httpurl += this.url.add
+            method = 'post'
+          } else {
+            httpurl += this.url.edit
+            method = 'put'
+          }
+          this.model['outStorehouseId'] = this.mainId
+          httpAction(httpurl, this.model, method).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message)
+              that.$emit('ok')
+            } else {
+              that.$message.warning(res.message)
+            }
+          }).finally(() => {
+            that.confirmLoading = false
+            that.close()
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    }
+
+  }
+}
+</script>
diff --git a/src/views/tms/lossBound/modules/LossboundModal.vue b/src/views/tms/lossBound/modules/LossboundModal.vue
new file mode 100644
index 0000000..2017454
--- /dev/null
+++ b/src/views/tms/lossBound/modules/LossboundModal.vue
@@ -0,0 +1,434 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴">
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-row>
+          <a-col :span="12">
+            <a-form-model-item label="鎶ユ崯鍗曞崟鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderCode">
+              <j-input v-model="model.orderCode" placeholder="绯荤粺鑷姩鐢熸垚" :disabled="true"></j-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="鎶ユ崯浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="losser">
+              <j-dict-select-tag :disabled="disableSubmit"
+                                 v-model="model.losser" dictCode="sys_user,realname,id"
+                                 placeholder="璇烽�夋嫨" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :span="12">
+            <a-form-model-item label="鎶ユ崯鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lossTime">
+
+              <j-date placeholder="璇烽�夋嫨鎶ユ崯鏃堕棿" :disabled="disableSubmit" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.lossTime"
+                      style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="瀹℃牳浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reviewer">
+              <!--              <j-dict-select-tag :disabled="disableSubmit"-->
+              <!--                                 v-model="model.reviewer" dictCode="sys_user,realname,id"-->
+              <!--                                 placeholder="璇烽�夋嫨" />-->
+              <j-select-user-by-dep :disabled="disableSubmit" v-model="model.reviewer" :store="'username'"
+                                    :text="'realname'" :multi="false" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row>
+
+          <a-col :span="12">
+            <a-form-model-item v-if="addShow" label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="handler">
+
+              <j-dict-select-tag :disabled="disableSubmit"
+                                 v-model="model.handler" dictCode="sys_user,realname,id"
+                                 placeholder="璇烽�夋嫨" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item v-if="addShow" label="瀹℃牳鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="orderStatus">
+              <j-dict-select-tag type="list" v-model="model.orderStatus" dictCode="out_bill_status"
+                                 placeholder="璇烽�夋嫨瀹℃牳鐘舵��" disabled />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :span="12">
+            <a-form-model-item v-if="addShow" label="瀹℃牳鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="approvalDate">
+
+              <j-date placeholder="璇烽�夋嫨瀹℃牳鏃堕棿"  :disabled="disableSubmit" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.approvalDate"
+                      style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :span="12">
+            <a-form-model-item v-if="addShow" label="瀹℃牳鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="approvalOpinion">
+              <a-input v-model="model.approvalOpinion" placeholder="璇疯緭鍏ュ鏍告剰瑙�" disabled></a-input>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :span="12">
+            <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
+              <a-textarea :disabled="disableSubmit" v-model="model.remark" rows="4" placeholder="璇疯緭鍏ュ娉�" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :span="12">
+            <a-form-model-item label="鎶ユ崯鍘熷洜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lossReason">
+              <a-textarea :disabled="disableSubmit" v-model="model.lossReason" rows="4" placeholder="璇疯緭鍏ュ娉�" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+
+    <a-button type="primary" :style="{ marginBottom: '8px' }"  :disabled="disableSubmit" @click="selectTools">
+      閫夋嫨宸ュ叿
+    </a-button>
+    <a-table
+      ref="table"
+      size="middle"
+      bordered
+      rowKey="id"
+      :scroll="{x:true}"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      :rowSelection="null"
+      @change="handleTableChange">
+
+      <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index">
+        <a-input-number :disabled="disableSubmit" :value="text" v-if="col.dataIndex == 'lossNumber'" :min="0"
+                        :max="99999"
+                        @change="(e) => handleChange(e, record.key, col, index)" style="width: 100%;" />
+        <a-textarea
+          v-if="col.dataIndex == 'lossReason'"
+          :disabled="disableSubmit"
+          style="margin: -5px 0"
+          :value="text"
+          @change="(e) => handleChange(e.target.value, record.key, col, index)"
+        />
+
+      </template>
+      <span slot="action" v-if="disableSubmit === false" slot-scope="text, record, index">
+        <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record, index)">
+          <a>鍒犻櫎</a>
+        </a-popconfirm>
+      </span>
+    </a-table>
+    <template slot="footer" v-if="disableSubmit === false">
+      <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button>
+      <a-button @click="handleOk" :disabled="isDisabled" type="primary">纭畾</a-button>
+    </template>
+
+    <j-select-lossbound-tool-modal ref="selectLossBoundToolModal"></j-select-lossbound-tool-modal>
+  </j-modal>
+
+</template>
+
+<script>
+
+import { httpAction } from '@/api/manage'
+import LossboundDetailList from '../LossboundDetailList.vue'
+import JSelectLossboundToolModal from './JSelectLossboundToolModal.vue'
+import { getAction } from '../../../../api/manage'
+
+export default {
+  name: 'LossboundModal',
+  components: {
+    LossboundDetailList,
+    JSelectLossboundToolModal
+  },
+  data() {
+    return {
+      title: '',
+      width: 1200,
+      visible: false,
+      disableSubmit: false,
+      isDisabled: false,
+      addShow: true,
+      selectBorrowTool: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      },
+      //琛ㄦ牸鍙傛暟
+      ipagination: {
+        current: 1,
+        pageSize: 10,
+        total: 0
+      },
+      dataSource: [],
+      loading: false,
+      // 琛ㄥご
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          },
+          width: 50
+        },
+        {
+          title: '鍒�鍏风紪鍙�',
+          dataIndex: 'toolCode',
+          align: 'center',
+          width: 150
+        },
+
+        {
+          title: '宸ュ叿绫诲瀷',
+          dataIndex: 'applicationType',
+          align: 'center',
+          width: 150
+        },
+        {
+          title: '鎶ユ崯鍘熷洜',
+          width: 150,
+          dataIndex: 'lossReason',
+          align: 'center',
+          scopedSlots: { customRender: 'lossReason' }
+        },
+
+        {
+          title: '鎶ユ崯鏁伴噺',
+          dataIndex: 'lossNumber',
+          align: 'center',
+          width: 150,
+          scopedSlots: { customRender: 'lossNumber' }
+        },
+        {
+          title: '涓枃鍚嶇О',
+          dataIndex: 'chineseName',
+          width: 150,
+          align: 'center'
+        },
+
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          width: 150,
+          align: 'center'
+        },
+
+        {
+          title: '鍒�鍏锋潗鏂�',
+          width: 150,
+          dataIndex: 'toolMaterial',
+          align: 'center'
+        },
+        {
+          title: '闆朵欢鏉愭枡',
+          width: 150,
+          dataIndex: 'partMaterial',
+          align: 'center'
+        },
+        {
+          title: '鍘傚',
+          width: 150,
+          dataIndex: 'supplierId',
+          align: 'center'
+
+        },
+        {
+          title: '瀛樺偍浣嶇疆',
+          width: 150,
+          dataIndex: 'goodsShelvesId',
+          align: 'center'
+        },
+
+
+        {
+          title: '澶囨敞',
+          width: 150,
+          dataIndex: 'remark',
+          align: 'center'
+        },
+        {
+          title: '鎿嶄綔',
+          width: 150,
+          dataIndex: 'action',
+          scopedSlots: { customRender: 'action' },
+          align: 'center'
+        }
+      ],
+      confirmLoading: false,
+      validatorRules: {
+        lossReason: [
+          { required: true, message: '璇疯緭鍏ユ姤鎹熷師鍥�' }
+        ],
+        lossTime: [
+          { required: true, message: '璇疯緭鍏ユ姤鎹熸椂闂�!' }
+        ],
+        losser: [
+          { required: true, message: '璇疯緭鍏ユ姤鎹熶汉!' }
+        ],
+
+      },
+      url: {
+        list: '/tms/toolsLossBound/listlossboundDetailByMainId',
+        add: '/tms/toolsLossBound/addTotal',
+        edit: '/tms/toolsLossBound/editTotal'
+      }
+
+    }
+  },
+  created() {
+    //澶囦唤model鍘熷鍊�
+    this.modelDefault = JSON.parse(JSON.stringify(this.model))
+  },
+  mounted() {
+    this.$bus.$on('selectionRows', (data) => {
+      for (let i = 0; i < data.length; i++) {
+        this.dataSource.push({
+          toolId: data[i].id,
+          toolCode: data[i].toolCode,
+          classifyId: data[i].classifyId,
+          applicationType: data[i].applicationType_dictText,
+          chineseName: data[i].chineseName,
+          toolModel: data[i].toolModel,
+          material: data[i].material,
+          supplierId: data[i].supplierId,
+          goodsShelvesId: data[i].positionCode,
+          toolMaterial: data[i].toolMaterial,
+          partMaterial: data[i].partMaterial
+
+        })
+      }
+      this.ipagination.total = this.dataSource.length
+    })
+  },
+  methods: {
+
+    handleDelete(record, index) {
+      this.dataSource.splice(index, 1)
+    },
+    handleChange(value, key, column, index) {
+      console.log(value, key, column, index)
+      const temp = [...this.dataSource]
+      const target = temp.filter(item => key === item.key)[index]
+      if (target) {
+        target[column.dataIndex] = value
+        this.dataSource = temp
+        if (column.dataIndex === 'lossNumber') {
+
+          target[column.dataIndex] = value
+        }
+        if (column.dataIndex === 'lossReason') {
+          target[column.dataIndex] = value
+        }
+        this.dataSource = temp
+      }
+    },
+
+    selectTools: function() {
+      let ids = []
+      for (let i = 0; i < this.dataSource.length; i++) {
+        ids.push(this.dataSource[i].id)
+      }
+      this.$refs.selectLossBoundToolModal.showModal(ids)
+      this.$refs.selectLossBoundToolModal.title = '閫夋嫨宸ュ叿淇℃伅'
+      this.$refs.selectLossBoundToolModal.disableSubmit = false
+    },
+    add() {
+      this.addShow = false
+      this.edit({}) // 浼犲叆绌哄璞′綔涓洪粯璁ゅ��
+      this.dataSource = []
+    },
+    edit(record) {
+      console.log(record)
+      if (record && record.id) {
+        this.model = Object.assign({}, record)
+        this.visible = true
+        getAction(this.url.list, {
+          lossBoundId: record.id,
+          pageNo: 1,
+          pageSize: 99999
+        }).then((res) => {
+          if (res.success) {
+            console.log(res.result.records)
+            this.dataSource = res.result.records
+          } else {
+            this.dataSource = null
+          }
+        })
+      } else {
+        this.model = {} // 濡傛灉鏄柊澧炴ā寮忥紝鍒欏垵濮嬪寲 model
+        this.visible = true
+        this.dataSource = [] // 娓呯┖鏁版嵁婧�
+      }
+    },
+
+
+    close() {
+      this.$emit('close')
+      this.addShow = true
+      this.selectBorrowTool = false
+      this.visible = false
+      this.$refs.form.clearValidate()
+    },
+    handleTableChange(pagination, filters, sorter) {
+      this.ipagination = pagination
+    },
+    handleOk() {
+      const that = this
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          this.model.toolsLossBoundDetailList = this.dataSource
+          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')
+            } else {
+              that.$message.warning(res.message)
+            }
+          }).finally(() => {
+            that.confirmLoading = false
+            that.close()
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    }
+
+  }
+}
+</script>
\ No newline at end of file
diff --git a/src/views/tms/modules/baseTools/BaseToolsListLeft.vue b/src/views/tms/modules/baseTools/BaseToolsListLeft.vue
index 14e6efa..f1ed47a 100644
--- a/src/views/tms/modules/baseTools/BaseToolsListLeft.vue
+++ b/src/views/tms/modules/baseTools/BaseToolsListLeft.vue
@@ -20,7 +20,7 @@
           >鍙栨秷</a>
         </div>
       </a-alert>
-      <div class="drawer-bootom-button">
+      <!-- <div class="drawer-bootom-button">
         <a-dropdown
           :trigger="['click']"
           placement="bottomCenter"
@@ -43,7 +43,7 @@
             <a-icon type="bars" />
           </a-button>
         </a-dropdown>
-      </div>
+      </div> -->
 
       <a-input-search
         @search="handleSearch"
@@ -57,11 +57,12 @@
       <!-- showLine -->
       <a-tree
         :checkStrictly="checkStrictly"
-        :expandedKeys.sync="expandedKeys"
+      
         :selectedKeys="selectedKeys"
         :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
         :treeData="treeDataSource"
-        :autoExpandParent="autoExpandParent"
+        
+        :defaultExpandAll="true"
         @select="onSelect"
         @expand="onExpand"
       >
diff --git a/src/views/tms/modules/baseTools/BaseToolsListRight.vue b/src/views/tms/modules/baseTools/BaseToolsListRight.vue
index 31a17e8..9672d5b 100644
--- a/src/views/tms/modules/baseTools/BaseToolsListRight.vue
+++ b/src/views/tms/modules/baseTools/BaseToolsListRight.vue
@@ -54,10 +54,10 @@
       >
           <a-button @click="handleAdd(nodeSelected)" type="primary" icon="plus" :disabled="!nodeSelected.key || nodeSelected.entity.leafFlag === '2'">鏂板</a-button>
       </Tooltip>
-      <a-button type="primary" icon="download" @click="handleExportXls('tms_tools_classify')">瀵煎嚭</a-button>
+      <!-- <a-button type="primary" icon="download" @click="handleExportXls('tms_tools_classify')">瀵煎嚭</a-button>
       <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
         <a-button type="primary" icon="import">瀵煎叆</a-button>
-      </a-upload>
+      </a-upload> -->
     </div>
 
     <!-- table鍖哄煙-begin -->
@@ -75,6 +75,7 @@
         :loading="loading"
         :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type:'radio'}"
         class="j-table-force-nowrap"
+        :customRow="customRow"
         @change="handleTableChange">
 
         <template slot="htmlSlot" slot-scope="text">
@@ -200,6 +201,18 @@
     data () {
       return {
         description: '宸ュ叿淇℃伅绠$悊椤甸潰',
+        /* 鍒嗛〉鍙傛暟 */
+      ipagination:{
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10', '20', '50'],
+        showTotal: (total, range) => {
+          return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
         // 琛ㄥご
         columns: [
           {
@@ -520,8 +533,10 @@
           .then((res) => {
             if (res.success) {
               this.dataSource = res.result.records; // 鏇存柊琛ㄦ牸鏁版嵁
+              this.ipagination.total = res.result.total
             } else {
               this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ");
+              this.ipagination.total = 0
             }
           })
           .finally(() => {
@@ -552,7 +567,16 @@
         this.$refs.paraTurningToolsList.visable = false
         this.$refs.paraBladeList.visable = false
         this.$refs.toolsConfigPropertyList.visable = false
-      }
+      },
+      customRow(record) {
+        return {
+          on: {
+            click: () => {
+              this.onSelectChange(record.id.split(","), [record]);
+            }
+          }
+        }
+      },
       
     },
   }
diff --git a/src/views/tms/modules/inbound/InboundListLeft.vue b/src/views/tms/modules/inbound/InboundListLeft.vue
new file mode 100644
index 0000000..7621396
--- /dev/null
+++ b/src/views/tms/modules/inbound/InboundListLeft.vue
@@ -0,0 +1,323 @@
+<template>
+  <a-card
+    :loading="cardLoading"
+    :bordered="false"
+    title="宸ュ叿鍒嗙被"
+    style="height: 100%;"
+  >
+    <a-spin :spinning="loading">
+      <a-alert
+        type="info"
+        :showIcon="true"
+        style="margin-right: 54px;"
+      >
+        <div slot="message">
+          褰撳墠锛�<span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span>
+          <a
+            v-if="this.currSelected.title"
+            style="margin-left: 10px"
+            @click="onClearSelected"
+          >鍙栨秷</a>
+        </div>
+      </a-alert>
+      <!-- <div class="drawer-bootom-button">
+        <a-dropdown
+          :trigger="['click']"
+          placement="bottomCenter"
+        >
+          <a-menu slot="overlay">
+            <a-menu-item
+              key="1"
+              @click="expandAll"
+            >灞曞紑鎵�鏈�</a-menu-item>
+            <a-menu-item
+              key="2"
+              @click="closeAll"
+            >鍚堝苟鎵�鏈�</a-menu-item>
+            <a-menu-item
+              key="3"
+              @click="refreshTree"
+            >鍒锋柊</a-menu-item>
+          </a-menu>
+          <a-button>
+            <a-icon type="bars" />
+          </a-button>
+        </a-dropdown>
+      </div> -->
+
+      <a-input-search
+        @search="handleSearch"
+        style="width:100%;margin-top: 10px"
+        placeholder="妫�绱㈠伐鍏峰垎绫�"
+        allowClear
+        v-model="searchInput"
+        @change="handleChange"
+      />
+
+      <!-- showLine -->
+      <a-tree
+        :checkStrictly="checkStrictly"
+      
+        :selectedKeys="selectedKeys"
+        :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
+        :treeData="treeDataSource"
+        
+        :defaultExpandAll="true"
+        @select="onSelect"
+        @expand="onExpand"
+      >
+        <template
+          slot="title"
+          slot-scope="{title, type, rfield1}"
+        >
+          <Tooltip
+            placement="top"
+            title="宸ュ叿鍒嗙被"
+          >
+            <i
+              v-if="type == 0"
+              class="action-jeecg actioncompany2"
+              style="font-size: 18px;"
+            />
+          </Tooltip>
+
+          <span v-if="title.indexOf(searchValue) > -1">
+            {{ title.substr(0, title.indexOf(searchValue)) }}
+            <span class="replaceSearch">{{ searchValue }}</span>
+            {{ title.substr(title.indexOf(searchValue) + searchValue.length) }}
+          </span>
+          <span v-else>{{ title }}</span>
+      
+        </template>
+      </a-tree>
+    </a-spin>
+  </a-card>
+</template>
+
+<script>
+import { getAction } from '@/api/manage'
+import Tooltip from 'ant-design-vue/es/tooltip'
+export default {
+  name: 'inboundListLeft',
+  components: {
+    Tooltip,
+  },
+  props: ['value'],
+  data() {
+    return {
+      searchInput: '',
+      cardLoading: false,
+      loading: false,
+      treeDataSource: [],
+      selectedKeys: [],
+      expandedKeys: [],
+      url: {
+        factoryTreeList: '/tms/toolsClassify/loadTree',
+      },
+      searchValue: '',
+      dataList: [],
+      autoExpandParent: true,
+      checkStrictly: true,
+      allTreeKeys: [],
+      currSelected: {},
+      hiding: false,
+    }
+  },
+  created() {
+    this.queryTreeData();
+    this.closeAll();
+  },
+  methods: {
+    getCurrSelectedTitle() {
+      return !this.currSelected.title ? '' : this.currSelected.title;
+    },
+    onClearSelected() {
+      this.hiding = true;
+      this.currSelected = {};
+      this.selectedKeys = [];
+    },
+    onSelect(selectedKeys, e) {
+      this.hiding = false;
+      let record = e.node.dataRef;
+      this.currSelected = Object.assign({}, record);
+      this.selectedKeys = [record.key];
+    },
+    onExpand(expandedKeys) {
+      this.expandedKeys = expandedKeys;
+      this.autoExpandParent = false;
+    },
+    queryTreeData() {
+      this.loading = true;
+      this.cardLoading = true;
+      getAction(this.url.factoryTreeList).then((res) => {
+        if (res.success) {
+          this.dataList = [];
+          this.allTreeKeys = [];
+          this.treeDataSource = res.result;
+          this.generateList(res.result);
+        } else {
+          this.$message.warn(res.message);
+        }
+      }).finally(() => {
+        this.loading = false;
+        this.cardLoading = false;
+      })
+    },
+
+    handleChange() {
+      let search = this.searchInput;
+      let expandedKeys = this.dataList
+        .map(item => {
+          if (item.title.indexOf(search) > -1) {
+            return this.getParentKey(item.key, this.treeDataSource);
+          }
+          return null;
+        })
+        .filter((item, i, self) => item && self.indexOf(item) === i);
+      Object.assign(this, {
+        expandedKeys,
+        searchValue: search,
+        autoExpandParent: true,
+      });
+    },
+    handleSearch(value) {
+      let search = value;
+      let expandedKeys = this.dataList
+        .map(item => {
+          if (item.title.indexOf(search) > -1) {
+            return this.getParentKey(item.key, this.treeDataSource);
+          }
+          return null;
+        })
+        .filter((item, i, self) => item && self.indexOf(item) === i);
+      Object.assign(this, {
+        expandedKeys,
+        searchValue: search,
+        autoExpandParent: true,
+      });
+    },
+    getParentKey(key, tree) {
+      let parentKey;
+      for (let i = 0; i < tree.length; i++) {
+        const node = tree[i];
+        if (node.children) {
+          if (node.children.some(item => item.key === key)) {
+            parentKey = node.key;
+          } else if (
+            this.getParentKey(key, node.children)) {
+            parentKey = this.getParentKey(key, node.children);
+          }
+        }
+      }
+      return parentKey;
+    },
+
+    generateList(data) {
+      for (let i = 0; i < data.length; i++) {
+        const node = data[i];
+        const key = node.key;
+        const title = node.title;
+        this.dataList.push({ key, title: title });
+        this.allTreeKeys.push(key);
+        if (node.children) {
+          this.generateList(node.children);
+        }
+      }
+    },
+    expandAll() {
+      this.expandedKeys = this.allTreeKeys;
+    },
+    closeAll() {
+      this.expandedKeys = this.allSiteIds;
+    },
+    refreshTree() {
+      this.queryTreeData();
+    }
+  },
+  mounted() {
+    this.$bus.$on('queryTreeData', this.queryTreeData);
+  },
+  //鐩戝惉
+  watch: {
+    currSelected(val) {//鐩戝惉currSelected 鍙樺寲锛屽皢鍙樺寲鍚庣殑鏁板�间紶閫掔粰 getCurrSelected 浜嬩欢
+      this.$bus.$emit('getCurrSelected', val)
+    },
+  }
+}
+</script>
+
+<style scoped>
+.replaceSearch {
+  color: #40a9ff;
+  font-weight: bold;
+  background-color: rgb(204, 204, 204);
+}
+/*闅愯棌鏍戠殑榛樿icon*/
+.ant-tree-switcher-noop {
+  display: none !important;
+}
+/*闅愯棌鏍戠殑榛樿绔栫嚎*/
+.ant-tree.ant-tree-show-line li:not(:last-child):before {
+  border-left: 0px;
+}
+
+.ant-card-body .table-operator {
+  margin: 15px;
+}
+
+.anty-form-btn {
+  width: 100%;
+  text-align: center;
+}
+
+.anty-form-btn button {
+  margin: 0 5px;
+}
+
+.anty-node-layout .ant-layout-header {
+  padding-right: 0;
+}
+
+.header {
+  padding: 0 8px;
+}
+
+.header button {
+  margin: 0 3px;
+}
+
+.ant-modal-cust-warp {
+  height: 100%;
+}
+
+.ant-modal-cust-warp .ant-modal-body {
+  height: calc(100% - 110px) !important;
+  overflow-y: auto;
+}
+
+.ant-modal-cust-warp .ant-modal-content {
+  height: 90% !important;
+  overflow-y: hidden;
+}
+
+#app .desktop {
+  height: auto !important;
+}
+
+/** Button鎸夐挳闂磋窛 */
+.ant-btn {
+  margin-left: 3px;
+}
+.ant-alert {
+  padding: 5px 15px 5px 37px;
+}
+.drawer-bootom-button {
+  position: absolute;
+  top: 1px;
+  /* padding: 10px 16px; */
+  text-align: left;
+  right: 0;
+  background: #fff;
+  border-radius: 0 0 2px 2px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/inbound/InboundListRight.vue b/src/views/tms/modules/inbound/InboundListRight.vue
new file mode 100644
index 0000000..d8c422b
--- /dev/null
+++ b/src/views/tms/modules/inbound/InboundListRight.vue
@@ -0,0 +1,515 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+           <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item
+              label="宸ュ叿缂栧彿"
+              :labelCol="{span: 5}"
+              :wrapperCol="{span: 18, offset: 1}"
+            >
+              <a-input
+                placeholder="璇疯緭鍏ュ伐鍏风紪鍙锋绱�"
+                v-model="queryParam.toolCode"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item
+              label="鍨嬪彿/鍥惧彿"
+              :labelCol="{span: 5}"
+              :wrapperCol="{span: 18, offset: 1}"
+            >
+              <a-input
+                placeholder="璇疯緭鍏ュ瀷鍙�/鍥惧彿妫�绱�"
+                v-model="queryParam.toolModel"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 鏌ヨ鍖哄煙-END -->
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+       <Tooltip
+        placement="top"
+        title="閫夋嫨鍙跺瓙鑺傜偣鍚庡啀鎵ц鏂板"
+      >
+          <a-button @click="handleAdd(nodeSelected)" type="primary" icon="plus" :disabled="!nodeSelected.key || nodeSelected.entity.leafFlag === '2'">鏂板</a-button>
+      </Tooltip>
+      <!-- <a-button type="primary" icon="download" @click="handleExportXls('tms_tools_classify')">瀵煎嚭</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">瀵煎叆</a-button>
+      </a-upload> -->
+      <a-button @click="handleInbound(nodeSelected)" type="primary" icon="plus">鐢宠鍗曞叆搴�</a-button>
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        :scroll="{x:true}"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type:'radio'}"
+        class="j-table-force-nowrap"
+        @change="handleTableChange">
+
+        <template slot="htmlSlot" slot-scope="text">
+          <div v-html="text"></div>
+        </template>
+        <template slot="imgSlot" slot-scope="text,record">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span>
+          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span>
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)">
+            涓嬭浇
+          </a-button>
+        </template>
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">缂栬緫</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a @click="handleDetail(record)">璇︽儏</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                  <a>鍒犻櫎</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+
+     <a-tabs defaultActiveKey="1">
+      <a-tab-pane key="1">
+        <span slot="tab">
+          <a-badge>鍙傛暟&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <para-hole-tools-list ref="paraHoleToolsList"></para-hole-tools-list>
+        <para-threading-tool-list ref="paraThreadingToolList"></para-threading-tool-list>
+        <para-mill-tool-list ref="paraMillToolList"></para-mill-tool-list>
+        <para-turning-tools-list ref="paraTurningToolsList"></para-turning-tools-list>
+        <para-blade-list ref="paraBladeList"></para-blade-list>
+        <para-common-tool-list ref="paraCommonToolList"></para-common-tool-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="2"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>绠$悊鍙傛暟&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <tools-config-property-list ref="toolsConfigPropertyList"></tools-config-property-list>
+      </a-tab-pane>
+    </a-tabs>
+
+    <inbound-model ref="modalForm" @ok="modalFormOk" :nodeSelected="nodeSelected"></inbound-model>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import Tooltip from 'ant-design-vue/es/tooltip'
+  import { getAction, postAction, deleteAction, requestPut } from '@api/manage'
+  import ParaHoleToolsList from '.././baseTools/ParaHoleToolsList'
+  import ToolsConfigPropertyList from '.././baseTools/ToolsConfigPropertyList'
+  import ParaMillToolList from '.././baseTools/ParaMillToolList'
+  import ParaThreadingToolList from '.././baseTools/ParaThreadingToolList'
+  import ParaTurningToolsList from '.././baseTools/ParaTurningToolsList'
+  import ParaCommonToolList from '.././baseTools/ParaCommonToolList'
+  import ParaBladeList from '.././baseTools/ParaBladeList'
+  import InboundModel from './InboundModel'
+
+  export default {
+    name: 'InboundListRight',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      Tooltip,
+      ParaHoleToolsList,
+      ToolsConfigPropertyList,
+      ParaMillToolList,
+      ParaThreadingToolList,
+      ParaTurningToolsList,
+      ParaCommonToolList,
+      ParaBladeList,
+      InboundModel
+    },
+    data () {
+      return {
+        description: '宸ュ叿鍏ュ簱绠$悊椤甸潰',
+        /* 鍒嗛〉鍙傛暟 */
+      ipagination:{
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10', '20', '50'],
+        showTotal: (total, range) => {
+          return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+        // 琛ㄥご
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'宸ュ叿缂栫爜',
+            align:"center",
+            dataIndex: 'toolCode'
+          },
+          {
+            title:'鍏ュ簱绫诲瀷',
+            align:"center",
+            dataIndex: 'inStorehouseType'
+          },
+          {
+            title:'鍨嬪彿/鍥惧彿',
+            align:"center",
+            dataIndex: 'toolModel'
+          },
+          {
+            title:'涓枃鍚嶇О',
+            align:"center",
+            dataIndex: 'chineseName'
+          },
+          
+          {
+            title:'鍏ュ簱鏁伴噺',
+            align:"center",
+            dataIndex: 'inStorageQuantity'
+          },
+          // {
+          //   title:'澶囨敞',
+          //   align:"center",
+          //   dataIndex: 'remark'
+          // },
+          {
+            title:'鍒涘缓浜�',
+            align:"center",
+            dataIndex: 'createBy'
+          },
+          {
+            title:'鍒涘缓鏃堕棿',
+            align:"center",
+            dataIndex: 'createTime',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title: '鎿嶄綔',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/tms/inboundDetail/list",
+          paraHolesToolsList:"/tms/baseTools/paraHolesToolsList",
+          paraCommonToolList:"/tms/baseTools/paraCommonToolList",
+          paraThreadingToolList:"/tms/baseTools/paraThreadingToolList",
+          paraMillToolList:"/tms/baseTools/paraMillToolList",
+          paraTurningToolsList:"/tms/baseTools/paraTurningToolsList",
+          paraBladeList:"/tms/baseTools/paraBladeList",
+          delete: "/tms/baseTools/delete",
+          deleteBatch: "/tms/baseTools/deleteBatch",
+          edit: '/tms/baseTools/edit',
+          exportXlsUrl: "/tms/baseTools/exportXls",
+          importExcelUrl: "tms/baseTools/importExcel",
+          queryParaByToolCode:"/tms/baseTools/queryByToolCode",
+          queryByToolCode:"/tms/toolsConfigProperty/queryByToolCode"
+        },
+        dictOptions:{},
+        superFieldList:[],
+        nodeSelected: {}, // 褰撳墠閫変腑鐨勮妭鐐规暟鎹�
+        paraTypeFlag:'',
+        disableMixinCreated:true
+      }
+    },
+    created() {
+      this.$bus.$on('getCurrSelected', (data) => {
+      //getCurrSelected 浜嬩欢 鎺ユ敹缁勪欢浼犻�掔殑鍙傛暟
+      this.nodeType = (data.type == undefined ? 0 : data.type);
+      this.paraTypeFlag = (data.entity == undefined ? 0 : data.entity.paraTypeFlag)
+      this.nodeSelected = data;
+      this.loadData()
+      this.clearPara()
+    })
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+
+      handleAdd(entity) {
+        if (!this.nodeSelected ) {
+          this.$message.warning('璇峰厛閫夋嫨涓�涓伐鍏峰垎绫�');
+          return;
+        }
+        // 鎵撳紑鏂板妯℃�佹锛屽苟浼犻�掑綋鍓嶉�変腑鐨勮妭鐐�
+          this.$refs.modalForm.add(this.nodeSelected);
+          this.$refs.modalForm.title = "鏂板閫氱敤鍙傛暟绫诲瀷宸ュ叿";
+          this.$refs.modalForm.disableSubmit = false;
+      },
+      handleDelete(id) {
+        deleteAction(this.url.delete, {id: id}).then((res) => {
+                if (res.success) {
+                  //閲嶆柊璁$畻鍒嗛〉闂
+                  this.loadData()
+                  this.$message.success(res.message);
+                  this.$bus.$emit('queryTreeData')
+                  this.clearPara()
+                } else {
+                  this.$message.warning(res.message);
+                }
+              });
+      },
+      modalFormOk() {
+        this.loadData(); // 鍒锋柊琛ㄦ牸鏁版嵁
+        this.$bus.$emit('queryTreeData') //鍒锋柊宸︿晶鏍�
+      },
+
+      onSelectChange(selectedRowKeys) {
+        this.selectedRowKeys = selectedRowKeys;
+        //閫氳繃id鏌ヨ绠$悊鍙傛暟鍜屽弬鏁版暟鎹�
+        getAction(this.url.queryParaByToolCode, { toolCode: this.selectedRowKeys[0],paraTypeFlag:this.paraTypeFlag}).then((res) => {
+          if (res.success) {
+            if(this.paraTypeFlag === "1"){
+              this.$refs.paraCommonToolList.getPara(res.result);
+            }else if(this.paraTypeFlag === "2"){
+              this.$refs.paraHoleToolsList.getPara(res.result);
+            }else if(this.paraTypeFlag === "3"){
+              this.$refs.paraThreadingToolList.getPara(res.result);
+            }else if(this.paraTypeFlag === "4"){
+              this.$refs.paraMillToolList.getPara(res.result);
+            }else if(this.paraTypeFlag === "5"){
+              this.$refs.paraTurningToolsList.getPara(res.result);
+            }else if(this.paraTypeFlag === "6"){
+              this.$refs.paraBladeList.getPara(res.result);
+            }
+          } else {
+            this.$message.warning(res.message);
+          }
+        })
+        getAction(this.url.queryByToolCode, { toolCode: this.selectedRowKeys[0]}).then((res) => {
+          if (res.success) {
+            this.$refs.toolsConfigPropertyList.getPara(res.result);
+          } else {
+            this.$message.warning(res.message);
+          }
+        })
+
+      },
+      // 澶勭悊缂栬緫鎸夐挳鐐瑰嚮浜嬩欢
+      handleEditSelected() {
+        if (this.selectedRowKeys.length === 0) {
+          this.$message.warning('璇烽�夋嫨涓�鏉¤褰曡繘琛岀紪杈�');
+          return;
+        }
+        const selectedRecord = this.dataSource.find(item => item.id === this.selectedRowKeys[0]);
+        if (selectedRecord) {
+          this.handleEdit(selectedRecord);
+        }
+      },
+      //缂栬緫
+      handleEdit(record) {
+        if(record.paramaTableName === "1"){
+              this.$refs.paraCommonToolModal.edit(record);
+              this.$refs.paraCommonToolModal.title = "缂栬緫";
+              this.$refs.paraCommonToolModal.disableSubmit = false;
+            }else if(record.paramaTableName === "2"){
+              this.$refs.paraHoleToolsModal.edit(record);
+              this.$refs.paraHoleToolsModal.title = "缂栬緫";
+              this.$refs.paraHoleToolsModal.disableSubmit = false;
+            }else if(record.paramaTableName === "3"){
+              this.$refs.paraThreadingToolModal.edit(record);
+              this.$refs.paraThreadingToolModal.title = "缂栬緫";
+              this.$refs.paraThreadingToolModal.disableSubmit = false;
+            }else if(record.paramaTableName === "4"){
+              this.$refs.paraMillToolModal.edit(record);
+              this.$refs.paraMillToolModal.title = "缂栬緫";
+              this.$refs.paraMillToolModal.disableSubmit = false;
+            }else if(record.paramaTableName === "5"){
+              this.$refs.paraTurningToolsModal.edit(record);
+              this.$refs.paraTurningToolsModal.title = "缂栬緫";
+              this.$refs.paraTurningToolsModal.disableSubmit = false;
+            }else if(record.paramaTableName === "6"){
+              this.$refs.paraBladeModal.edit(record);
+              this.$refs.paraBladeModal.title = "缂栬緫";
+              this.$refs.paraBladeModal.disableSubmit = false;
+            }
+      },
+      //璇︽儏
+      handleDetail:function(record){
+        if(record.paramaTableName === "1"){
+              this.$refs.paraCommonToolModal.edit(record);
+              this.$refs.paraCommonToolModal.title="璇︽儏";
+              this.$refs.paraCommonToolModal.disableSubmit = true;
+              this.$refs.paraCommonToolModal.disSeach = true;
+              if(this.$refs.paraCommonToolModal.removeValidate) {
+                this.$refs.paraCommonToolModal.removeValidate()
+              }
+            }else if(record.paramaTableName === "2"){
+              this.$refs.paraHoleToolsModal.edit(record);
+              this.$refs.paraHoleToolsModal.title="璇︽儏";
+              this.$refs.paraHoleToolsModal.disableSubmit = true;
+              this.$refs.paraHoleToolsModal.disSeach = true;
+              if(this.$refs.paraHoleToolsModal.removeValidate) {
+                this.$refs.paraHoleToolsModal.removeValidate()
+              }
+            }else if(record.paramaTableName === "3"){
+               this.$refs.paraThreadingToolModal.edit(record);
+              this.$refs.paraThreadingToolModal.title="璇︽儏";
+              this.$refs.paraThreadingToolModal.disableSubmit = true;
+              this.$refs.paraThreadingToolModal.disSeach = true;
+              if(this.$refs.paraThreadingToolModal.removeValidate) {
+                this.$refs.paraThreadingToolModal.removeValidate()
+              }
+            }else if(record.paramaTableName === "4"){
+               this.$refs.paraMillToolModal.edit(record);
+              this.$refs.paraMillToolModal.title="璇︽儏";
+              this.$refs.paraMillToolModal.disableSubmit = true;
+              this.$refs.paraMillToolModal.disSeach = true;
+              if(this.$refs.paraMillToolModal.removeValidate) {
+                this.$refs.paraMillToolModal.removeValidate()
+              }
+            }else if(record.paramaTableName === "5"){
+               this.$refs.paraTurningToolsModal.edit(record);
+              this.$refs.paraTurningToolsModal.title="璇︽儏";
+              this.$refs.paraTurningToolsModal.disableSubmit = true;
+              this.$refs.paraTurningToolsModal.disSeach = true;
+              if(this.$refs.paraTurningToolsModal.removeValidate) {
+                this.$refs.paraTurningToolsModal.removeValidate()
+              }
+            }else if(record.paramaTableName === "6"){
+               this.$refs.paraBladeModal.edit(record);
+              this.$refs.paraBladeModal.title="璇︽儏";
+              this.$refs.paraBladeModal.disableSubmit = true;
+              this.$refs.paraBladeModal.disSeach = true;
+              if(this.$refs.paraBladeModal.removeValidate) {
+                this.$refs.paraBladeModal.removeValidate()
+              }
+            }
+    },
+      //绂佺敤鐘舵�佹牱寮�
+      tableRowClass(record, index) {
+        if (record.status != "1") {
+          return "frozenRowClass";
+        }
+        return "";
+      },
+      loadData() {
+        let params = this.getQueryParams();
+        if (this.nodeSelected && this.nodeSelected.key !== '-1') {
+          // 鍔犺浇閫変腑鑺傜偣鐨勫瓙绫�
+          params.classifyId = this.nodeSelected.key;
+          this.loading = true;       
+        getAction(this.url.list, params)
+          .then((res) => {
+            if (res.success) {
+              this.dataSource = res.result.records; // 鏇存柊琛ㄦ牸鏁版嵁
+              this.ipagination.total = res.result.total
+            } else {
+              this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ");
+              this.ipagination.total = 0
+            }
+          })
+          .finally(() => {
+            this.loading = false;
+          });
+        } else {
+          this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ");
+        }
+      },
+      onClearSelected() {
+        this.selectedKeys = [];
+        this.nodeSelected = {}; // 娓呯┖閫変腑鐨勮妭鐐�
+        this.dataSource = []; // 娓呯┖琛ㄦ牸鏁版嵁
+      },
+      //閲嶇疆
+      searchReset() {
+        this.queryParam = {}
+        this.loadData(1);
+        this.clearPara()
+      },
+      //娓呯┖閫変腑鍙婂弬鏁�
+      clearPara(){
+        this.selectedRowKeys = []   
+        this.$refs.paraCommonToolList.visable = false
+        this.$refs.paraHoleToolsList.visable = false
+        this.$refs.paraThreadingToolList.visable = false   
+        this.$refs.paraMillToolList.visable = false    
+        this.$refs.paraTurningToolsList.visable = false
+        this.$refs.paraBladeList.visable = false
+        this.$refs.toolsConfigPropertyList.visable = false
+      }
+      
+    },
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+   .enable {
+    color: green;
+  }
+  .disable {
+    color: red;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/inbound/InboundModel.vue b/src/views/tms/modules/inbound/InboundModel.vue
new file mode 100644
index 0000000..006a1c1
--- /dev/null
+++ b/src/views/tms/modules/inbound/InboundModel.vue
@@ -0,0 +1,535 @@
+<template>
+  <a-modal
+    :title="title"
+    :visible="visible"
+    :fullScreen="true"
+    :width="1200"
+    @ok="handleOk"
+    @cancel="handleCancel"
+  >
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-row style="width: 100%">
+          <a-col :span="24 / 2">
+            <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱绫诲瀷">
+              <j-dict-select-tag
+                :disabled="disableSubmit"
+                type="list"
+                v-decorator="['inStorehouseType', validatorRules.inStorehouseType]"
+                :triggerChange="true"
+                dictCode="in_storehouse_type"
+                placeholder="璇烽�夋嫨鍏ュ簱绫诲瀷"
+                @change="handleTypeChange"
+              />
+            </a-form-item>
+          </a-col>
+           <a-col :span="24 / 2">
+            <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱鏃堕棿">
+              <a-date-picker
+                @change="onChange"
+                :disabled="disableSubmit"
+                style="width: 100%"
+                v-decorator="['inboundTime', validatorRules.inboundTime]"
+              />
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-row style="width: 100%">  
+          <a-col :span="24 / 2">
+            <a-form-item label="鍏ュ簱鏁伴噺" :labelCol="labelCol" :wrapperCol="wrapperCol">
+             <a-input placeholder="璇疯緭鍏ュ叆搴撴暟閲�"  :disabled="disableSubmit" v-decorator="['in_number', validatorRules.applicationReason]" />
+            </a-form-item>
+          </a-col>
+        </a-row>
+       
+      </a-form>
+    </a-spin>
+    <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectReturnList()" v-show="returnShow && !disableSubmit">閫夋嫨鍊熺敤鍑哄簱鍗�</a-button>
+    <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectTooling()" v-show="toolingShow && !disableSubmit">閫夋嫨宸ュ叿</a-button>
+    <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectSharpenList()" v-show="sharpenShow && !disableSubmit">閫夋嫨鍒冪(鍑哄簱鍗�</a-button>
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+      <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index">
+        <div :key="col.dataIndex">
+          <a-input-number
+            v-if="col.dataIndex == 'inStorageQuantity'"
+            :disabled="quantityDisable"
+            :value="text"
+            @change="(e) => handleChange(e, record.key, col, index)"
+            :min="1"
+          />
+        </div>
+      </template>
+      <span slot="action" slot-scope="text, record, index">
+        <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record, index)" :disabled="disableSubmit">
+          <a>鍒犻櫎</a>
+        </a-popconfirm>
+      </span>
+    </a-table>
+    <template slot="footer" v-if="disableSubmit == false">
+      <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button>
+      <a-button @click="handleOk" :disabled="isDisabled" type="primary">鍏ュ簱</a-button>
+    </template>
+
+    <template slot="footer" v-if="disableSubmit == true">
+      <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button>
+    </template>
+    <j-select-tooling-modal ref="toolingModalForm" @ok="modalFormOk"></j-select-tooling-modal>
+    <j-select-return-list-modal ref="returnModalForm" @ok="modalFormOk"></j-select-return-list-modal>
+    <j-select-sharpen-list-modal ref="sharpenModalForm" @ok="modalFormOk"></j-select-sharpen-list-modal>
+  </a-modal>
+</template>
+
+<script>
+import pick from 'lodash.pick'
+import JSelectToolingModal from '.././inboundOrder/JSelectToolingModal'
+import { ajaxGetDictItems } from '@/api/api'
+import moment from 'moment'
+import { getAction, postAction, requestPut } from '@/api/manage'
+import JDictSelectTag from '@/components/dict/JDictSelectTag'
+import JSearchSelectTag from '@/components/dict/JSearchSelectTag'
+import JMultiSelectTag from '@/components/dict/JMultiSelectTag'
+import { filterObj } from '@/utils/util'
+import JSelectReturnListModal from '.././inboundOrder/JSelectReturnListModal'
+import JSelectSharpenListModal from '.././inboundOrder/JSelectSharpenListModal'
+
+export default {
+  name: 'InboundOrderModel',
+  components: {
+    JSelectToolingModal,
+    JMultiSelectTag,
+    JDictSelectTag,
+    JSelectReturnListModal,
+    JSearchSelectTag,
+    JSelectSharpenListModal,
+  },
+  data() {
+    return {
+     /* 鍒嗛〉鍙傛暟 */
+      ipagination: {
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10', '20', '30'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+      isDisabled: false,
+      selectedRowKeys: {},
+      state: {
+        show: false,
+        maintenanceValue: 1,
+        checkValue: 1,
+        maintenanceState: false,
+        checkState: false,
+      },
+      inboundDate: '',
+      applicationDate: '',
+      supplierShow: false,
+      disableSubmit: false,
+      numDisable:false,
+      quantityDisable:false,
+      onlyCodeDisable:true,
+      returnShow:false,
+      toolingShow:false,
+      sharpenShow:false,
+      addDisable:false,
+      toolinngOptions:[],
+      title: '鎿嶄綔',
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+      },
+      confirmLoading: false,
+      loading: false,
+      form: this.$form.createForm(this),
+      dataSource: [],
+      toolingTreeData:[],
+      warehouseOptions:[],
+      locationOptions:[],
+      allToolingList:[],
+      param: {},
+      barcodeCurrentType: false,
+      inboundOrderId:'',
+      validatorRules: {
+        type: {
+          rules: [
+            {
+              required: true,
+              message: '璇烽�夋嫨鍏ュ簱绫诲瀷!',
+            },
+          ],
+        },
+        inboundDate: {
+          rules: [
+            {
+              required: true,
+              message: '璇烽�夋嫨鐢宠鍏ュ簱鏃ユ湡!',
+            },
+          ],
+        },
+        applicant: {
+          rules: [
+            {
+              required: true,
+              message: '璇烽�夋嫨鐢宠浜�!',
+            },
+          ],
+        },
+      },
+      url: {
+        add: '/tms/inboundOrder/add',
+        edit: '/tms/inboundOrder/edit',
+        queryByUserName: '/sys/user/queryByUserName',
+        toolingList:'/tms/baseTools/list',
+        queryAccountList:'/tooling/storage/queryAccountList',
+        querySharpenList:'/sharpen/sharpenDetail/querySharpenList',
+        queryReturnList:'/returnInventory/queryReturnList',
+        detailList:'/tms/inboundDetail/list',
+      },
+      toolingOptions:[],
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+           width: 50,
+          align: 'center',
+          customRender: function (t, r, index) {
+            return parseInt(index) + 1
+          },
+        },
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+          width: 150,
+        },
+        {
+          title: '宸ュ叿绫诲瀷',
+          align: 'center',
+          dataIndex: 'applicationType'
+        },
+        {
+          title: '涓枃鍚嶇О',
+          align: 'center',
+          dataIndex: 'chineseName',
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          align: 'center',
+          dataIndex: 'toolModel'
+        },
+        {
+          title: '鍏ュ簱鏁伴噺',
+          align: 'center',
+          dataIndex: 'inStorageQuantity',
+          scopedSlots: { customRender: 'inStorageQuantity' },
+        },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' },
+        },
+      ],
+    }
+  },
+  created() {},
+  methods: {
+    modalFormOk() {
+    },
+    getQueryParams() {
+      this.param.pageNo = this.ipagination.current
+      this.param.pageSize = this.ipagination.pageSize
+      return filterObj(this.param)
+    },
+    add() {
+      this.edit({})
+    },
+    edit(record) {
+      let that = this
+      this.form.resetFields()
+      this.model = Object.assign({}, record)
+      this.visible = true
+      this.isDisabled = false
+      this.disableSubmit = false
+      if (record.id) {
+        if(record.inStorehouseType == "1"){
+          this.toolingShow = true
+        }else if(record.inStorehouseType == "2"){
+          this.returnShow = true
+        }else if(record.inStorehouseType == "5"){
+            this.sharpenShow = true
+        }
+        this.inboundOrderId = record.id
+        this.detailList(this.inboundOrderId)
+      }
+      this.initOptions()
+      this.$nextTick(() => {
+        this.form.setFieldsValue(
+          pick(this.model, 'inboundNum', 'inStorehouseType', 'inboundTime', 'applicationReason', 'handler','approvalDate','reviewer','approvalOpinion','remark')
+        )
+      })
+    },
+    handleChange(value, key, column, index) {
+      //let t = (this.ipaginationm.current - 1) * this.ipaginationm.pageSize + index
+      const temp = [...this.dataSource]
+      const target = temp.filter(item => key === item.key)[index];
+      if (target) {
+        target[column.dataIndex] = value
+        this.dataSource = temp
+      }
+    },
+    close() {
+      this.$emit('close')
+      this.dataSource = []
+      this.visible = false
+      this.supplierShow = false,
+       this.disableSubmit = false,
+       this.numDisable = false,
+      this.quantityDisable = false,
+       this.onlyCodeDisable = true,
+       this.returnShow = false,
+       this.toolingShow = false,
+       this.sharpenShow = false,
+       this.addDisable = false
+    },
+    handleTableChange(pagination, filters, sorter) {
+      this.ipagination = pagination
+      this.detailList(this.inboundOrderId);
+    },
+    handleOk() {
+      const that = this
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true
+          let formData = Object.assign(this.model, values)
+          formData.detailData = this.dataSource
+          let http = ''
+          if(this.model.id){
+            http = this.url.edit
+          }else{
+            http = this.url.add
+          }
+          postAction(http, formData)
+            .then((res) => {
+              if (res.success) {
+                that.$message.success(res.message)
+                that.$emit('ok', new Date())
+              } else {
+                that.$message.warning(res.message)
+              }
+            })
+            .finally(() => {
+              that.confirmLoading = false
+              that.close()
+            })
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    },
+    //閫夋嫨宸ュ叿
+    selectTooling: function () {
+      let ids = []
+      for (let i = 0; i < this.dataSource.length; i++) {
+        ids.push(this.dataSource[i].toolCodeId)
+      }
+      this.$refs.toolingModalForm.showModal(ids)
+      this.$refs.toolingModalForm.title = '閫夋嫨宸ュ叿'
+      this.$refs.toolingModalForm.disableSubmit = false
+    },
+    //閫夋嫨褰掕繕宸ュ叿
+    selectReturnList: function () {
+      let ids = []
+      for (let i = 0; i < this.dataSource.length; i++) {
+        ids.push(this.dataSource[i].id)
+      }
+      this.$refs.returnModalForm.showModal(ids)
+      this.$refs.returnModalForm.title = '閫夋嫨褰掕繕宸ュ叿'
+      this.$refs.returnModalForm.disableSubmit = false
+    },
+    //閫夋嫨鍒冪(宸ュ叿
+    selectSharpenList: function () {
+      let ids = []
+      for (let i = 0; i < this.dataSource.length; i++) {
+        ids.push(this.dataSource[i].id)
+      }
+      this.$refs.sharpenModalForm.showModal(ids)
+      this.$refs.sharpenModalForm.title = '閫夋嫨鍒冪(宸ュ叿'
+      this.$refs.sharpenModalForm.disableSubmit = false
+    },
+    handleDelete(record, index) {
+      this.dataSource.splice(index, 1)
+    },
+    onChange() {},
+    //鎺у埗鎵爜鎴栨墜閫�
+    selectCurrentUserType(e) {
+      if (e == '0') {
+        this.barcodeCurrentType = true
+      } else {
+        this.barcodeCurrentType = false
+      }
+    },
+    //鎵嬮�変汉鍛樺��
+    selectCurrentUserChange(e) {
+      console.log('褰撳墠鎵嬮��', e)
+      // this.form.setFieldsValue({
+      //   // userName: e,
+      //   userNameId: e,
+      // })
+    },
+    //鍏ュ簱绫诲瀷
+    handleTypeChange(value) {
+      this.dataSource = []
+      if(value == 1){
+        this.toolingShow = true
+        this.quantityDisable = false
+        this.addDisable = true
+        this.numDisable = false
+      }else{
+         this.toolingShow = false
+      }
+     if(value == 2){
+        this.numDisable = true
+        this.addDisable = false
+        this.returnShow = true
+        this.quantityDisable = true
+      }else{
+        this.returnShow = false
+      }
+      if (value == 5) {
+        this.numDisable = true
+        this.addDisable = false
+        this.sharpenShow = true
+        this.quantityDisable = true
+      } else {
+        this.sharpenShow = false
+      }
+      
+    },
+    //娣诲姞宸ュ叿鎸夐挳
+    addTooling() {
+      const temp = [...this.dataSource];
+      temp.push({ indexId: temp.length + 1 });
+      this.dataSource = temp;
+    },
+    detailList(inboundOrderId) {
+      this.param.inboundOrderId = inboundOrderId
+      getAction(this.url.detailList, this.getQueryParams()).then((res) => {
+        if (res.success) {
+          this.dataSource = res.result.records
+          this.ipagination.total = res.result.total;
+        }
+      })
+    },
+    initOptions() {
+      
+      ajaxGetDictItems("mes_base_warehouse,name,id,del_flag!='1' order by num asc", null).then((res) => {
+        if (res.success) {
+          if (res.result) {
+            for (let i = 0; i < res.result.length; i++) {
+              res.result[i].label = res.result[i].title;
+            }
+          }
+          this.warehouseOptions = res.result;
+        }
+      })
+      ajaxGetDictItems("mes_base_storage_area,name,id,del_flag!='1'", null).then((res) => {
+        if (res.success) {
+          if (res.result) {
+            for (let i = 0; i < res.result.length; i++) {
+              res.result[i].label = res.result[i].title;
+            }
+          }
+          this.locationOptions = res.result;
+        }
+      })
+       ajaxGetDictItems("mes_base_tooling,num,id,del_flag!='1'", null).then((res) => {
+        if (res.success) {
+          if (res.result) {
+            for (let i = 0; i < res.result.length; i++) {
+              res.result[i].label = res.result[i].title;
+              res.result[i].toolingName = res.result[i].name
+            }
+          }
+          this.toolingOptions = res.result;
+        }
+      })
+    },
+     filterOption(input, option) {
+      return (
+        option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      );
+    },
+  },
+  watch: {},
+  mounted() {
+    this.$bus.$on('selectionRows', (data) => {
+      //getCurrSelected 浜嬩欢 鎺ユ敹缁勪欢浼犻�掔殑鍙傛暟
+      for (let i = 0; i < data.length; i++) {
+        this.dataSource.push({
+          toolCodeId:data[i].id,
+          toolingId: data[i].toolingId || data[i].id,
+          toolCode: data[i].toolCode,
+          chineseName: data[i].chineseName,
+          toolModel: data[i].toolModel,
+          applicationType: data[i].applicationTypeName,
+          unitName: data[i].unitName || data[i].unitId_dictText,
+          onlyCode:data[i].onlyCode,
+          noAccountQuantity:data[i].noAccountQuantity,
+          inStorageQuantity:data[i].storageQuantity
+        })
+      }
+      //this.ipaginationm.total = this.dataSource.length
+    })
+  },
+}
+</script>
+
+
+<style  lang="less" scoped>
+.ant-btn {
+  padding: 0 10px;
+  margin-left: 3px;
+}
+
+.ant-form-item-control {
+  line-height: 0px;
+}
+
+/** 涓昏〃鍗曡闂磋窛 */
+.ant-form .ant-form-item {
+  margin-bottom: 10px;
+}
+
+/** Tab椤甸潰琛岄棿璺� */
+.ant-tabs-content .ant-form-item {
+  margin-bottom: 0px;
+}
+
+/deep/ .notshow {
+  display: none;
+}
+</style>
diff --git a/src/views/tms/modules/inboundOrder/InboundDetailList.vue b/src/views/tms/modules/inboundOrder/InboundDetailList.vue
new file mode 100644
index 0000000..a105e63
--- /dev/null
+++ b/src/views/tms/modules/inboundOrder/InboundDetailList.vue
@@ -0,0 +1,88 @@
+<template>
+  <a-card
+    :bordered="false"
+    class="card-area"
+  >
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      @change="handleTableChange"
+    >
+    </a-table>
+  </a-card>
+</template>
+
+<script>
+import { requestPut } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'InboundDetailList',
+  mixins: [JeecgListMixin],
+  components: {},
+  data() {
+    return {
+      url: {
+        list: '/tms/inboundDetail/list',
+      },
+      queryParam: {},
+      nodeType: 0,
+      dataSource: [],
+      disableMixinCreated:true,
+      columns: [
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+          width: '10%',
+          key: 'toolCode'
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center',
+          key: 'toolName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center',
+          key: 'toolModel'
+        },
+      
+        {
+          title: '宸ュ叿鍒嗙被',
+          dataIndex: 'applicationType',
+          align: 'center',
+        },
+         {
+          title: '鍏ュ簱鏁伴噺',
+          dataIndex: 'inStorageQuantity',
+          align: 'center',
+        }
+      ]
+    }
+  },
+
+  methods: {
+
+
+  },
+  mounted() {
+    this.$bus.$on('getToolingStorageData', (data) => {
+      this.queryParam.inboundOrderId = data.id;
+      this.searchQuery();
+    })
+  }
+}
+</script>
+
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/inboundOrder/InboundOrderModel.vue b/src/views/tms/modules/inboundOrder/InboundOrderModel.vue
new file mode 100644
index 0000000..3118a1e
--- /dev/null
+++ b/src/views/tms/modules/inboundOrder/InboundOrderModel.vue
@@ -0,0 +1,600 @@
+<template>
+  <a-modal
+    :title="title"
+    :visible="visible"
+    :fullScreen="true"
+    :width="1200"
+    @ok="handleOk"
+    @cancel="handleCancel"
+  >
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-row style="width: 100%">
+          <a-col :span="24 / 2">
+            <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱鐢宠鍗曠紪鍙�">
+              <a-input :disabled="true" placeholder="绯荤粺鑷姩鐢熸垚" v-decorator="['inboundNum', validatorRules.inboundNum]" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="24 / 2">
+            <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱绫诲瀷">
+              <j-dict-select-tag
+                :disabled="disableSubmit"
+                type="list"
+                v-decorator="['inStorehouseType', validatorRules.inStorehouseType]"
+                :triggerChange="true"
+                dictCode="in_storehouse_type"
+                placeholder="璇烽�夋嫨鍏ュ簱绫诲瀷"
+                @change="handleTypeChange"
+              />
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-row style="width: 100%">
+          <a-col :span="24 / 2">
+            <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鍏ュ簱鏃堕棿">
+              <a-date-picker
+                @change="onChange"
+                :disabled="disableSubmit"
+                style="width: 100%"
+                v-decorator="['inboundTime', validatorRules.inboundTime]"
+              />
+            </a-form-item>
+          </a-col>
+          <a-col :span="24 / 2">
+            <a-form-item label="鐢宠鍘熷洜" :labelCol="labelCol" :wrapperCol="wrapperCol">
+             <a-input placeholder="璇疯緭鍏ョ敵璇峰師鍥�"  :disabled="disableSubmit" v-decorator="['applicationReason', validatorRules.applicationReason]" />
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-row style="width: 100%">
+
+          <a-col :span="24 / 2">
+            <a-form-item label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <j-search-select-tag
+                :disabled="true"
+                v-if="!barcodeCurrentType"
+                placeholder="璇烽�夋嫨缁忔墜浜�"
+                v-decorator="['handler', { rules: [{ required: false, message: '璇烽�夋嫨缁忔墜浜�' }] }]"
+                dict="sys_user,realname,id,del_flag=0"
+                @change="selectCurrentUserChange"
+              />
+            </a-form-item>
+          </a-col>
+
+          <a-col :span="24 / 2">
+            <a-form-item label="瀹℃牳浜�" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <j-search-select-tag
+                :disabled="true"
+                placeholder="璇烽�夋嫨瀹℃牳浜�"
+                v-decorator="['reviewer', validatorRules.reviewer]"
+                dict="sys_user,realname,id,del_flag=0"
+                @change="selectCurrentUserChange"
+              />
+            </a-form-item>
+          </a-col>
+
+        </a-row>
+
+         <a-row style="width: 100%">
+
+           <a-col :span="24 / 2">
+            <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="瀹℃牳鏃堕棿">
+              <a-date-picker
+                @change="onChange"
+                :disabled="true"
+                style="width: 100%"
+                v-decorator="['approvalDate', validatorRules.approvalDate]"
+              />
+            </a-form-item>
+          </a-col>
+
+           <a-col :span="24 / 2">
+            <a-form-item label="瀹℃牳鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol">
+             <a-input placeholder="璇疯緭鍏ュ鏍告剰瑙�" :disabled="true" v-decorator="['approvalOpinion', validatorRules.approvalOpinion]" />
+            </a-form-item>
+          </a-col>
+        </a-row>
+
+        <a-row style="width: 100%">
+          <a-col :span="24">
+            <a-form-item :labelCol="{ span: 3 }" :wrapperCol="{ span: 21 }" label="澶囨敞">
+              <a-textarea
+                :disabled="disableSubmit"
+                :rows="2"
+                placeholder="..."
+                v-decorator="['remark', validatorRules.remark]"
+              />
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+    </a-spin>
+    <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectTooling()" v-show="returnShow && !disableSubmit">閫夋嫨鍊熺敤鍑哄簱鍗�</a-button>
+    <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectTooling()" v-show="toolingShow && !disableSubmit">閫夋嫨宸ュ叿</a-button>
+    <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectTooling()" v-show="sharpenShow && !disableSubmit">閫夋嫨鍒冪(鍑哄簱鍗�</a-button>
+    <a-table
+      ref="table"
+      bordered
+      size="middle"
+      rowKey="id"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+       @change="handleTableChange"
+    >
+      <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index">
+        <div :key="col.dataIndex">
+          <a-input-number
+            v-if="col.dataIndex == 'inStorageQuantity'"
+            :disabled="quantityDisable"
+            :value="text"
+            @change="(e) => handleChange(e, record.key, col, index)"
+            :min="1"
+          />
+        </div>
+      </template>
+      <span slot="action" slot-scope="text, record, index">
+        <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record, index)" :disabled="disableSubmit">
+          <a>鍒犻櫎</a>
+        </a-popconfirm>
+      </span>
+    </a-table>
+    <template slot="footer" v-if="disableSubmit == false">
+      <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button>
+      <a-button @click="handleOk" :disabled="isDisabled" type="primary">纭畾</a-button>
+    </template>
+
+    <template slot="footer" v-if="disableSubmit == true">
+      <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button>
+    </template>
+    <j-select-tooling-modal ref="toolingModalForm" @ok="modalFormOk"></j-select-tooling-modal>
+    <j-select-return-list-modal ref="returnModalForm" @ok="modalFormOk"></j-select-return-list-modal>
+    <j-select-sharpen-list-modal ref="sharpenModalForm" @ok="modalFormOk"></j-select-sharpen-list-modal>
+  </a-modal>
+</template>
+
+<script>
+import pick from 'lodash.pick'
+import JSelectToolingModal from './JSelectToolingModal'
+import { ajaxGetDictItems } from '@/api/api'
+import moment from 'moment'
+import { getAction, postAction, requestPut } from '@/api/manage'
+import JDictSelectTag from '@/components/dict/JDictSelectTag'
+import JSearchSelectTag from '@/components/dict/JSearchSelectTag'
+import JMultiSelectTag from '@/components/dict/JMultiSelectTag'
+import { filterObj } from '@/utils/util'
+import JSelectReturnListModal from './JSelectReturnListModal'
+import JSelectSharpenListModal from './JSelectSharpenListModal'
+
+export default {
+  name: 'InboundOrderModel',
+  components: {
+    JSelectToolingModal,
+    JMultiSelectTag,
+    JDictSelectTag,
+    JSelectReturnListModal,
+    JSearchSelectTag,
+    JSelectSharpenListModal,
+  },
+  data() {
+    return {
+     /* 鍒嗛〉鍙傛暟 */
+      ipagination: {
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10', '20', '30'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+      isDisabled: false,
+      selectedRowKeys: {},
+      state: {
+        show: false,
+        maintenanceValue: 1,
+        checkValue: 1,
+        maintenanceState: false,
+        checkState: false,
+      },
+      inboundDate: '',
+      applicationDate: '',
+      supplierShow: false,
+      disableSubmit: false,
+      numDisable:false,
+      quantityDisable:false,
+      onlyCodeDisable:true,
+      returnShow:false,
+      toolingShow:false,
+      sharpenShow:false,
+      addDisable:false,
+      toolinngOptions:[],
+      title: '鎿嶄綔',
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 6 },
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 18 },
+      },
+      confirmLoading: false,
+      loading: false,
+      form: this.$form.createForm(this),
+      dataSource: [],
+      toolingTreeData:[],
+      warehouseOptions:[],
+      locationOptions:[],
+      allToolingList:[],
+      param: {},
+      barcodeCurrentType: false,
+      inboundOrderId:'',
+      validatorRules: {
+        type: {
+          rules: [
+            {
+              required: true,
+              message: '璇烽�夋嫨鍏ュ簱绫诲瀷!',
+            },
+          ],
+        },
+        inboundDate: {
+          rules: [
+            {
+              required: true,
+              message: '璇烽�夋嫨鐢宠鍏ュ簱鏃ユ湡!',
+            },
+          ],
+        },
+        applicant: {
+          rules: [
+            {
+              required: true,
+              message: '璇烽�夋嫨鐢宠浜�!',
+            },
+          ],
+        },
+      },
+      url: {
+        add: '/tms/inboundOrder/add',
+        edit: '/tms/inboundOrder/edit',
+        queryByUserName: '/sys/user/queryByUserName',
+        toolingList:'/tms/baseTools/list',
+        queryAccountList:'/tms/baseTools/list',
+        querySharpenList:'/tms/baseTools/list',
+        queryReturnList:'/tms/baseTools/list',
+        detailList:'/tms/inboundDetail/list',
+      },
+      toolingOptions:[],
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+           width: 50,
+          align: 'center',
+          customRender: function (t, r, index) {
+            return parseInt(index) + 1
+          },
+        },
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+          width: 150,
+        },
+        {
+          title: '宸ュ叿绫诲瀷',
+          align: 'center',
+          dataIndex: 'applicationType'
+        },
+        {
+          title: '涓枃鍚嶇О',
+          align: 'center',
+          dataIndex: 'chineseName',
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          align: 'center',
+          dataIndex: 'toolModel'
+        },
+        {
+          title: '鍏ュ簱鏁伴噺',
+          align: 'center',
+          dataIndex: 'inStorageQuantity',
+          scopedSlots: { customRender: 'inStorageQuantity' },
+        },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' },
+        },
+      ],
+    }
+  },
+  created() {},
+  methods: {
+    modalFormOk() {
+    },
+    getQueryParams() {
+      this.param.pageNo = this.ipagination.current
+      this.param.pageSize = this.ipagination.pageSize
+      return filterObj(this.param)
+    },
+    add() {
+      this.edit({})
+    },
+    edit(record) {
+      let that = this
+      this.form.resetFields()
+      this.model = Object.assign({}, record)
+      this.visible = true
+      this.isDisabled = false
+      this.disableSubmit = false
+      if (record.id) {
+        if(record.inStorehouseType == "1"){
+          this.toolingShow = true
+        }else if(record.inStorehouseType == "2"){
+          this.returnShow = true
+        }else if(record.inStorehouseType == "5"){
+            this.sharpenShow = true
+        }
+        this.inboundOrderId = record.id
+        this.detailList(this.inboundOrderId)
+      }
+      this.initOptions()
+      this.$nextTick(() => {
+        this.form.setFieldsValue(
+          pick(this.model, 'inboundNum', 'inStorehouseType', 'inboundTime', 'applicationReason', 'handler','approvalDate','reviewer','approvalOpinion','remark')
+        )
+      })
+    },
+    handleChange(value, key, column, index) {
+      //let t = (this.ipaginationm.current - 1) * this.ipaginationm.pageSize + index
+      const temp = [...this.dataSource]
+      const target = temp.filter(item => key === item.key)[index];
+      if (target) {
+        target[column.dataIndex] = value
+        this.dataSource = temp
+      }
+    },
+    close() {
+      this.$emit('close')
+      this.dataSource = []
+      this.visible = false
+      this.supplierShow = false,
+       this.disableSubmit = false,
+       this.numDisable = false,
+      this.quantityDisable = false,
+       this.onlyCodeDisable = true,
+       this.returnShow = false,
+       this.toolingShow = false,
+       this.sharpenShow = false,
+       this.addDisable = false
+    },
+    handleTableChange(pagination, filters, sorter) {
+      this.ipagination = pagination
+      this.detailList(this.inboundOrderId);
+    },
+    handleOk() {
+      const that = this
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true
+          let formData = Object.assign(this.model, values)
+          formData.detailData = this.dataSource
+          let http = ''
+          if(this.model.id){
+            http = this.url.edit
+          }else{
+            http = this.url.add
+          }
+          postAction(http, formData)
+            .then((res) => {
+              if (res.success) {
+                that.$message.success(res.message)
+                that.$emit('ok', new Date())
+              } else {
+                that.$message.warning(res.message)
+              }
+            })
+            .finally(() => {
+              that.confirmLoading = false
+              that.close()
+            })
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    },
+    //閫夋嫨宸ュ叿
+    selectTooling: function () {
+      let ids = []
+      for (let i = 0; i < this.dataSource.length; i++) {
+        ids.push(this.dataSource[i].toolCodeId)
+      }
+      this.$refs.toolingModalForm.showModal(ids)
+      this.$refs.toolingModalForm.title = '閫夋嫨宸ュ叿'
+      this.$refs.toolingModalForm.disableSubmit = false
+    },
+    //閫夋嫨褰掕繕宸ュ叿
+    selectReturnList: function () {
+      let ids = []
+      for (let i = 0; i < this.dataSource.length; i++) {
+        ids.push(this.dataSource[i].id)
+      }
+      this.$refs.returnModalForm.showModal(ids)
+      this.$refs.returnModalForm.title = '閫夋嫨褰掕繕宸ュ叿'
+      this.$refs.returnModalForm.disableSubmit = false
+    },
+    //閫夋嫨鍒冪(宸ュ叿
+    selectSharpenList: function () {
+      let ids = []
+      for (let i = 0; i < this.dataSource.length; i++) {
+        ids.push(this.dataSource[i].id)
+      }
+      this.$refs.sharpenModalForm.showModal(ids)
+      this.$refs.sharpenModalForm.title = '閫夋嫨鍒冪(宸ュ叿'
+      this.$refs.sharpenModalForm.disableSubmit = false
+    },
+    handleDelete(record, index) {
+      this.dataSource.splice(index, 1)
+    },
+    onChange() {},
+    //鎺у埗鎵爜鎴栨墜閫�
+    selectCurrentUserType(e) {
+      if (e == '0') {
+        this.barcodeCurrentType = true
+      } else {
+        this.barcodeCurrentType = false
+      }
+    },
+    //鎵嬮�変汉鍛樺��
+    selectCurrentUserChange(e) {
+      console.log('褰撳墠鎵嬮��', e)
+      // this.form.setFieldsValue({
+      //   // userName: e,
+      //   userNameId: e,
+      // })
+    },
+    //鍏ュ簱绫诲瀷
+    handleTypeChange(value) {
+      this.dataSource = []
+      if(value == 1){
+        this.toolingShow = true
+        this.quantityDisable = false
+        this.addDisable = true
+        this.numDisable = false
+      }else{
+         this.toolingShow = false
+      }
+     if(value == 2){
+        this.numDisable = true
+        this.addDisable = false
+        this.returnShow = true
+        this.quantityDisable = true
+      }else{
+        this.returnShow = false
+      }
+      if (value == 5) {
+        this.numDisable = true
+        this.addDisable = false
+        this.sharpenShow = true
+        this.quantityDisable = true
+      } else {
+        this.sharpenShow = false
+      }
+      
+    },
+    //娣诲姞宸ュ叿鎸夐挳
+    addTooling() {
+      const temp = [...this.dataSource];
+      temp.push({ indexId: temp.length + 1 });
+      this.dataSource = temp;
+    },
+    detailList(inboundOrderId) {
+      this.param.inboundOrderId = inboundOrderId
+      getAction(this.url.detailList, this.getQueryParams()).then((res) => {
+        if (res.success) {
+          this.dataSource = res.result.records
+          this.ipagination.total = res.result.total;
+        }
+      })
+    },
+    initOptions() {
+      
+      ajaxGetDictItems("mes_base_warehouse,name,id,del_flag!='1' order by num asc", null).then((res) => {
+        if (res.success) {
+          if (res.result) {
+            for (let i = 0; i < res.result.length; i++) {
+              res.result[i].label = res.result[i].title;
+            }
+          }
+          this.warehouseOptions = res.result;
+        }
+      })
+      ajaxGetDictItems("mes_base_storage_area,name,id,del_flag!='1'", null).then((res) => {
+        if (res.success) {
+          if (res.result) {
+            for (let i = 0; i < res.result.length; i++) {
+              res.result[i].label = res.result[i].title;
+            }
+          }
+          this.locationOptions = res.result;
+        }
+      })
+       ajaxGetDictItems("mes_base_tooling,num,id,del_flag!='1'", null).then((res) => {
+        if (res.success) {
+          if (res.result) {
+            for (let i = 0; i < res.result.length; i++) {
+              res.result[i].label = res.result[i].title;
+              res.result[i].toolingName = res.result[i].name
+            }
+          }
+          this.toolingOptions = res.result;
+        }
+      })
+    },
+     filterOption(input, option) {
+      return (
+        option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      );
+    },
+  },
+  watch: {},
+  mounted() {
+    this.$bus.$on('selectionRows', (data) => {
+      //getCurrSelected 浜嬩欢 鎺ユ敹缁勪欢浼犻�掔殑鍙傛暟
+      for (let i = 0; i < data.length; i++) {
+        this.dataSource.push({
+          toolCodeId:data[i].id,
+          toolingId: data[i].toolingId || data[i].id,
+          toolCode: data[i].toolCode,
+          chineseName: data[i].chineseName,
+          toolModel: data[i].toolModel,
+          applicationType: data[i].applicationTypeName,
+          unitName: data[i].unitName || data[i].unitId_dictText,
+          onlyCode:data[i].onlyCode,
+          noAccountQuantity:data[i].noAccountQuantity,
+          inStorageQuantity:data[i].storageQuantity
+        })
+      }
+      //this.ipaginationm.total = this.dataSource.length
+    })
+  },
+}
+</script>
+
+
+<style  lang="less" scoped>
+.ant-btn {
+  padding: 0 10px;
+  margin-left: 3px;
+}
+
+.ant-form-item-control {
+  line-height: 0px;
+}
+
+/** 涓昏〃鍗曡闂磋窛 */
+.ant-form .ant-form-item {
+  margin-bottom: 10px;
+}
+
+/** Tab椤甸潰琛岄棿璺� */
+.ant-tabs-content .ant-form-item {
+  margin-bottom: 0px;
+}
+
+/deep/ .notshow {
+  display: none;
+}
+</style>
diff --git a/src/views/tms/modules/inboundOrder/JSelectReturnListModal.vue b/src/views/tms/modules/inboundOrder/JSelectReturnListModal.vue
new file mode 100644
index 0000000..369a4ec
--- /dev/null
+++ b/src/views/tms/modules/inboundOrder/JSelectReturnListModal.vue
@@ -0,0 +1,290 @@
+<template>
+  <!--鏀寔鍏ㄥ睆缂╂斁-->
+  <j-modal
+    :visible="visible"
+    :title="title"
+    switchFullscreen
+    :width="1200"
+    @ok="handleSubmit"
+    @cancel="close"
+    style="top: 50px"
+    cancelText="鍏抽棴"
+  >
+    <a-card :bordered="false">
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="searchQuery">
+          <a-row :gutter="24">
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="宸ュ叿缂栫爜">
+                <a-input placeholder="璇疯緭鍏ュ伐鍏风紪鐮�,鏀寔妯$硦鏌ヨ" v-model="queryParam.num"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="宸ュ叿鍚嶇О">
+                <a-input placeholder="璇疯緭鍏ュ伐鍏峰悕绉�,鏀寔妯$硦鏌ヨ" v-model="queryParam.name"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="瑙勬牸鍨嬪彿">
+                <a-input placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�,鏀寔妯$硦鏌ヨ" v-model="queryParam.model"></a-input>
+              </a-form-item>
+            </a-col>
+
+            <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+            <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+          </a-row>
+        </a-form>
+      </div>
+      <!--棰嗘枡鍗曞垪琛�-->
+      <a-table
+        ref="table"
+        :scroll="scrollTrigger"
+        size="middle"
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :rowSelection="rowSelection"
+        :loading="loading"
+        @change="handleTableChange"
+      >
+      </a-table>
+    </a-card>
+  </j-modal>
+</template>
+
+<script>
+import { filterObj } from '@/utils/util'
+import { getAction } from '@/api/manage'
+
+export default {
+  name: 'JSelectToolingModal',
+  components: {},
+  props: {},
+  data() {
+    return {
+      queryParam: {},
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 50,
+          align: 'center',
+          customRender: function (t, r, index) {
+            return parseInt(index) + 1
+          },
+        },
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolingNum',
+          sorter: true,
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          align: 'center',
+          dataIndex: 'toolingName',
+          sorter: true,
+        },
+         {
+          title: '鍞竴缂栫爜',
+          align: 'center',
+          dataIndex: 'onlyCode',
+          sorter: true,
+        },
+        {
+          title: '鍏ュ簱鏁伴噺',
+          align: 'center',
+          dataIndex: 'inStorageQuantity',
+          sorter: true,
+        },
+        {
+          title: '宸ュ叿鍒嗙被',
+          align: 'center',
+          dataIndex: 'toolingCategoryName',
+          sorter: true,
+        },
+        {
+          title: '瑙勬牸鍨嬪彿',
+          align: 'center',
+          dataIndex: 'model',
+          sorter: true,
+        },
+        {
+          title: '鍗曚綅',
+          align: 'center',
+          dataIndex: 'unitName',
+          sorter: true,
+        },
+      ],
+      selectedRowKeys: [],
+      oldSlelectRows: [],
+      scrollTrigger: {},
+      dataSource: [],
+      selectionRows: [],
+      title: '鏍规嵁鏌ヨ缁撴灉閫夋嫨宸ュ叿',
+      ipagination: {
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['5', '10', '20'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0,
+      },
+      isorter: {
+        column: 'num',
+        order: 'desc',
+      },
+      departTree: [],
+      visible: false,
+      loading: false,
+      url: {
+        // list: '/base/tooling/list',
+         list: '/tms/baseTools/list',
+         queryKnifeBom:'/toolingStorage/mesToolingOutbounds/queryKnifeBom'
+      },
+    }
+  },
+  computed: {
+    rowSelection() {
+      return {
+        type: 'checkbox',
+        onChange: (selectedRowKeys, selectedRows) => {
+          this.selectedRowKeys = selectedRowKeys
+          this.onSelectChange(selectedRows)
+        },
+        getCheckboxProps: (record) => ({
+          props: {
+            disabled: record.distable,
+          },
+        }),
+        selectedRowKeys: this.selectedRowKeys,
+      }
+    },
+  },
+  watch: {},
+  created() {},
+  methods: {
+    async loadData(arg) {
+      if (arg === 1) {
+        this.ipagination.current = 1
+      }
+      let that = this
+      this.loading = true
+      let params = this.getQueryParams() //鏌ヨ鏉′欢
+      await getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          for (let i = 0; i < res.result.records.length; i++) {
+            if (that.oldSlelectRows.indexOf(res.result.records[i].toolingId) > -1) {
+              res.result.records[i].distable = true
+            } else {
+              res.result.records[i].distable = false
+            }
+          }
+          this.dataSource = res.result.records
+          this.ipagination.total = res.result.total
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false
+      })
+    },
+    showModal(oldSlelectRows) {
+      this.oldSlelectRows = oldSlelectRows
+      this.visible = true
+      this.loadData(1)
+    },
+    getQueryParams() {
+      let param = Object.assign({}, this.queryParam, this.isorter)
+      param.field = this.getQueryField()
+      param.pageNo = this.ipagination.current
+      param.pageSize = this.ipagination.pageSize
+      return filterObj(param)
+    },
+    //鏌ヨ鏉′欢澶勭悊
+    getQueryField() {
+      let str = 'id,'
+      for (let a = 0; a < this.columns.length; a++) {
+        str += ',' + this.columns[a].dataIndex
+      }
+      return str
+    },
+    searchReset(num) {
+      let that = this
+      if (num !== 0) {
+        that.loadData(1)
+      }
+      that.selectborrowIds = []
+    },
+    close() {
+      this.searchReset(0)
+      this.selectedRowKeys = []
+      this.visible = false
+    },
+    handleTableChange(pagination, filters, sorter) {
+      //TODO 绛涢��
+      if (Object.keys(sorter).length > 0) {
+        this.isorter.column = sorter.field
+        this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc'
+      }
+      this.ipagination = pagination
+      this.loadData()
+    },
+    handleSubmit() {
+      if (this.selectionRows.length > 0) {
+         let params = this.getQueryParams() //鏌ヨ鏉′欢
+          params['onlyCode'] = this.selectionRows[0].onlyCode;
+        getAction(this.url.queryKnifeBom, params).then((res) => {
+        if (res.success) {
+          this.prepareKnifeDetailList = res.result
+          this.$bus.$emit('selectionRows', this.prepareKnifeDetailList)
+        }
+         
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false
+        
+      })
+        this.searchReset(0)
+        this.close()
+      } else {
+        this.$message.warning('璇烽�夋嫨涓�鏉℃暟鎹�')
+      }
+    },
+    onSelectChange(selectionRows) {
+      this.selectionRows = selectionRows
+    },
+    onSearch() {
+      this.loadData(1)
+    },
+     searchQuery() {
+      this.loadData(1);
+    },
+    searchReset() {
+      this.queryParam = {}
+      this.loadData(1)
+    },
+  },
+}
+</script>
+
+<style scoped>
+.ant-table-tbody .ant-table-row td {
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+
+#components-layout-demo-custom-trigger .trigger {
+  font-size: 18px;
+  line-height: 64px;
+  padding: 0 24px;
+  cursor: pointer;
+  transition: color 0.3s;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/inboundOrder/JSelectSharpenListModal.vue b/src/views/tms/modules/inboundOrder/JSelectSharpenListModal.vue
new file mode 100644
index 0000000..f83c694
--- /dev/null
+++ b/src/views/tms/modules/inboundOrder/JSelectSharpenListModal.vue
@@ -0,0 +1,273 @@
+<template>
+  <!--鏀寔鍏ㄥ睆缂╂斁-->
+  <j-modal
+    :visible="visible"
+    :title="title"
+    switchFullscreen
+    :width="1200"
+    @ok="handleSubmit"
+    @cancel="close"
+    style="top: 50px"
+    cancelText="鍏抽棴"
+  >
+    <a-card :bordered="false">
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="searchQuery">
+          <a-row :gutter="24">
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="宸ュ叿缂栫爜">
+                <a-input placeholder="璇疯緭鍏ュ伐鍏风紪鐮�,鏀寔妯$硦鏌ヨ" v-model="queryParam.num"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="宸ュ叿鍚嶇О">
+                <a-input placeholder="璇疯緭鍏ュ伐鍏峰悕绉�,鏀寔妯$硦鏌ヨ" v-model="queryParam.name"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="瑙勬牸鍨嬪彿">
+                <a-input placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�,鏀寔妯$硦鏌ヨ" v-model="queryParam.model"></a-input>
+              </a-form-item>
+            </a-col>
+
+            <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+            <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+          </a-row>
+        </a-form>
+      </div>
+      <!--棰嗘枡鍗曞垪琛�-->
+      <a-table
+        ref="table"
+        :scroll="scrollTrigger"
+        size="middle"
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :rowSelection="rowSelection"
+        :loading="loading"
+        @change="handleTableChange"
+      >
+      </a-table>
+    </a-card>
+  </j-modal>
+</template>
+
+<script>
+import { filterObj } from '@/utils/util'
+import { getAction } from '@/api/manage'
+
+export default {
+  name: 'JSelectToolingModal',
+  components: {},
+  props: {},
+  data() {
+    return {
+      queryParam: {},
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 50,
+          align: 'center',
+          customRender: function (t, r, index) {
+            return parseInt(index) + 1
+          },
+        },
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolingNum',
+          sorter: true,
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          align: 'center',
+          dataIndex: 'toolingName',
+          sorter: true,
+        },
+        {
+          title: '鍞竴缂栫爜',
+          align: 'center',
+          dataIndex: 'onlyCode',
+          sorter: true,
+        },
+        {
+          title: '鍏ュ簱鏁伴噺',
+          align: 'center',
+          dataIndex: 'inStorageQuantity',
+          sorter: true,
+        },
+        {
+          title: '宸ュ叿鍒嗙被',
+          align: 'center',
+          dataIndex: 'toolingCategoryName',
+          sorter: true,
+        },
+        {
+          title: '瑙勬牸鍨嬪彿',
+          align: 'center',
+          dataIndex: 'model',
+          sorter: true,
+        },
+        {
+          title: '鍗曚綅',
+          align: 'center',
+          dataIndex: 'unitName',
+          sorter: true,
+        },
+      ],
+      selectedRowKeys: [],
+      oldSlelectRows: [],
+      scrollTrigger: {},
+      dataSource: [],
+      selectionRows: [],
+      title: '鏍规嵁鏌ヨ缁撴灉閫夋嫨宸ュ叿',
+      ipagination: {
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['5', '10', '20'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0,
+      },
+      isorter: {
+        column: 'num',
+        order: 'desc',
+      },
+      departTree: [],
+      visible: false,
+      loading: false,
+      url: {
+        // list: '/base/tooling/list',
+         list: '/sharpen/sharpenDetail/querySharpenList',
+      },
+    }
+  },
+  computed: {
+    rowSelection() {
+      return {
+        type: 'checkbox',
+        onChange: (selectedRowKeys, selectedRows) => {
+          this.selectedRowKeys = selectedRowKeys
+          this.onSelectChange(selectedRows)
+        },
+        getCheckboxProps: (record) => ({
+          props: {
+            disabled: record.distable,
+          },
+        }),
+        selectedRowKeys: this.selectedRowKeys,
+      }
+    },
+  },
+  watch: {},
+  created() {},
+  methods: {
+    async loadData(arg) {
+      if (arg === 1) {
+        this.ipagination.current = 1
+      }
+      let that = this
+      this.loading = true
+      let params = this.getQueryParams() //鏌ヨ鏉′欢
+      params["sharpenStatus"] = 1
+      await getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          for (let i = 0; i < res.result.records.length; i++) {
+            if (that.oldSlelectRows.indexOf(res.result.records[i].toolingId) > -1) {
+              res.result.records[i].distable = true
+            } else {
+              res.result.records[i].distable = false
+            }
+          }
+          this.dataSource = res.result.records
+          this.ipagination.total = res.result.total
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false
+      })
+    },
+    showModal(oldSlelectRows) {
+      this.oldSlelectRows = oldSlelectRows
+      this.visible = true
+      this.loadData(1)
+    },
+    getQueryParams() {
+      let param = Object.assign({}, this.queryParam, this.isorter)
+      param.field = this.getQueryField()
+      param.pageNo = this.ipagination.current
+      param.pageSize = this.ipagination.pageSize
+      return filterObj(param)
+    },
+    //鏌ヨ鏉′欢澶勭悊
+    getQueryField() {
+      let str = 'id,'
+      for (let a = 0; a < this.columns.length; a++) {
+        str += ',' + this.columns[a].dataIndex
+      }
+      return str
+    },
+    searchReset(num) {
+      let that = this
+      if (num !== 0) {
+        that.loadData(1)
+      }
+      that.selectborrowIds = []
+    },
+    close() {
+      this.searchReset(0)
+      this.selectedRowKeys = []
+      this.visible = false
+    },
+    handleTableChange(pagination, filters, sorter) {
+      //TODO 绛涢��
+      if (Object.keys(sorter).length > 0) {
+        this.isorter.column = sorter.field
+        this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc'
+      }
+      this.ipagination = pagination
+      this.loadData()
+    },
+    handleSubmit() {
+      this.$bus.$emit('selectionRows', this.selectionRows)
+      this.searchReset(0)
+      this.close()
+    },
+    onSelectChange(selectionRows) {
+      this.selectionRows = selectionRows
+    },
+    onSearch() {
+      this.loadData(1)
+    },
+     searchQuery() {
+      this.loadData(1);
+    },
+    searchReset() {
+      this.queryParam = {}
+      this.loadData(1)
+    },
+  },
+}
+</script>
+
+<style scoped>
+.ant-table-tbody .ant-table-row td {
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+
+#components-layout-demo-custom-trigger .trigger {
+  font-size: 18px;
+  line-height: 64px;
+  padding: 0 24px;
+  cursor: pointer;
+  transition: color 0.3s;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/inboundOrder/JSelectToolingModal.vue b/src/views/tms/modules/inboundOrder/JSelectToolingModal.vue
new file mode 100644
index 0000000..0ccb752
--- /dev/null
+++ b/src/views/tms/modules/inboundOrder/JSelectToolingModal.vue
@@ -0,0 +1,254 @@
+<template>
+  <!--鏀寔鍏ㄥ睆缂╂斁-->
+  <j-modal
+    :visible="visible"
+    :title="title"
+    switchFullscreen
+    :width="1200"
+    @ok="handleSubmit"
+    @cancel="close"
+    style="top: 50px"
+    cancelText="鍏抽棴"
+  >
+    <a-card :bordered="false">
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="searchQuery">
+          <a-row :gutter="24">
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="宸ュ叿缂栫爜">
+                <a-input placeholder="璇疯緭鍏ュ伐鍏风紪鐮�,鏀寔妯$硦鏌ヨ" v-model="queryParam.toolCode"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="涓枃鍚嶇О">
+                <a-input placeholder="璇疯緭鍏ヤ腑鏂囧悕绉�,鏀寔妯$硦鏌ヨ" v-model="queryParam.chineseName"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="鍨嬪彿/鍥惧彿">
+                <a-input placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�,鏀寔妯$硦鏌ヨ" v-model="queryParam.toolModel"></a-input>
+              </a-form-item>
+            </a-col>
+
+            <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+            <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+          </a-row>
+        </a-form>
+      </div>
+      <!--宸ュ叿鍒楄〃-->
+      <a-table
+        ref="table"
+        :scroll="scrollTrigger"
+        size="middle"
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :rowSelection="rowSelection"
+        :loading="loading"
+        @change="handleTableChange"
+      >
+      </a-table>
+    </a-card>
+  </j-modal>
+</template>
+
+<script>
+import { filterObj } from '@/utils/util'
+import { getAction } from '@/api/manage'
+
+export default {
+  name: 'JSelectToolingModal',
+  components: {},
+  props: {},
+  data() {
+    return {
+      queryParam: {},
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 50,
+          align: 'center',
+          customRender: function (t, r, index) {
+            return parseInt(index) + 1
+          },
+        },
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode',
+          sorter: true,
+        },
+        {
+          title: '宸ュ叿鍚嶇О',
+          align: 'center',
+          dataIndex: 'chineseName',
+          sorter: true,
+        },
+        {
+          title: '宸ュ叿绫诲瀷',
+          align: 'center',
+          dataIndex: 'applicationTypeName',
+          sorter: true,
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          align: 'center',
+          dataIndex: 'toolModel',
+          sorter: true,
+        },
+      ],
+      selectedRowKeys: [],
+      oldSlelectRows: [],
+      scrollTrigger: {},
+      dataSource: [],
+      selectionRows: [],
+      title: '鏍规嵁鏌ヨ缁撴灉閫夋嫨宸ュ叿',
+      ipagination: {
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['5', '10', '20'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0,
+      },
+      isorter: {
+        column: 'toolCode',
+        order: 'desc',
+      },
+      departTree: [],
+      visible: false,
+      loading: false,
+      url: {
+        // list: '/base/tooling/list',
+         list: '/tms/baseTools/paraCommonToolList',
+      },
+    }
+  },
+  computed: {
+    rowSelection() {
+      return {
+        type: 'checkbox',
+        onChange: (selectedRowKeys, selectedRows) => {
+          this.selectedRowKeys = selectedRowKeys
+          this.onSelectChange(selectedRows)
+        },
+        getCheckboxProps: (record) => ({
+          props: {
+            disabled: record.distable,
+          },
+        }),
+        selectedRowKeys: this.selectedRowKeys,
+      }
+    },
+  },
+  watch: {},
+  created() {},
+  methods: {
+    async loadData(arg) {
+      if (arg === 1) {
+        this.ipagination.current = 1
+      }
+      let that = this
+      this.loading = true
+      let params = this.getQueryParams() //鏌ヨ鏉′欢
+      await getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          for (let i = 0; i < res.result.records.length; i++) {
+            if (that.oldSlelectRows.indexOf(res.result.records[i].id) > -1) {
+              res.result.records[i].distable = true
+            } else {
+              res.result.records[i].distable = false
+            }
+          }
+          this.dataSource = res.result.records
+          this.ipagination.total = res.result.total
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false
+      })
+    },
+    showModal(oldSlelectRows) {
+      this.oldSlelectRows = oldSlelectRows
+      this.visible = true
+      this.loadData(1)
+    },
+    getQueryParams() {
+      let param = Object.assign({}, this.queryParam, this.isorter)
+      param.field = this.getQueryField()
+      param.pageNo = this.ipagination.current
+      param.pageSize = this.ipagination.pageSize
+      return filterObj(param)
+    },
+    //鏌ヨ鏉′欢澶勭悊
+    getQueryField() {
+      let str = 'id,'
+      for (let a = 0; a < this.columns.length; a++) {
+        str += ',' + this.columns[a].dataIndex
+      }
+      return str
+    },
+    searchReset(num) {
+      let that = this
+      if (num !== 0) {
+        that.loadData(1)
+      }
+      that.selectborrowIds = []
+    },
+    close() {
+      this.searchReset(0)
+      this.selectedRowKeys = []
+      this.visible = false
+    },
+    handleTableChange(pagination, filters, sorter) {
+      //TODO 绛涢��
+      if (Object.keys(sorter).length > 0) {
+        this.isorter.column = sorter.field
+        this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc'
+      }
+      this.ipagination = pagination
+      this.loadData()
+    },
+    handleSubmit() {
+      this.$bus.$emit('selectionRows', this.selectionRows)
+      this.searchReset(0)
+      this.close()
+    },
+    onSelectChange(selectionRows) {
+      this.selectionRows = selectionRows
+    },
+    onSearch() {
+      this.loadData(1)
+    },
+     searchQuery() {
+      this.loadData(1);
+    },
+    searchReset() {
+      this.queryParam = {}
+      this.loadData(1)
+    },
+  },
+}
+</script>
+
+<style scoped>
+.ant-table-tbody .ant-table-row td {
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+
+#components-layout-demo-custom-trigger .trigger {
+  font-size: 18px;
+  line-height: 64px;
+  padding: 0 24px;
+  cursor: pointer;
+  transition: color 0.3s;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/outBound/JSelectOutboundToolModal.vue b/src/views/tms/modules/outBound/JSelectOutboundToolModal.vue
index 2ffd5b2..91b2cbb 100644
--- a/src/views/tms/modules/outBound/JSelectOutboundToolModal.vue
+++ b/src/views/tms/modules/outBound/JSelectOutboundToolModal.vue
@@ -170,10 +170,18 @@
         this.loading = false
       })
     },
-    showModal(oldSelectRow) {
+    showModal(oldSelectRow, classifyId) {
       this.oldSelectRow = oldSelectRow
       this.visible = true
-      this.queryParam.status = '1'
+      this.queryParam.quantity = 0
+      this.queryParam.classifyId = classifyId
+      this.queryParam.excludeIds = oldSelectRow
+      this.loadData(1)
+    },
+    showOrderModal(oldSelectRow) {
+      this.oldSelectRow = oldSelectRow
+      this.visible = true
+      this.queryParam.quantity = 0
       this.queryParam.excludeIds = oldSelectRow
       this.loadData(1)
     },
diff --git a/src/views/tms/modules/outBound/OutboundDetailSelectList.vue b/src/views/tms/modules/outBound/OutboundDetailSelectList.vue
new file mode 100644
index 0000000..2d7a3d3
--- /dev/null
+++ b/src/views/tms/modules/outBound/OutboundDetailSelectList.vue
@@ -0,0 +1,215 @@
+<template>
+  <a-card :bordered="false" :class="'cust-erp-sub-tab'">
+    <div class="table-operator" v-if="mainId">
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :scroll="{x:true}"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'checkbox'}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleOutbound(record)">鍑哄簱</a>
+        </span>
+      </a-table>
+    </div>
+
+  </a-card>
+</template>
+
+<script>
+
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import { postAction } from '../../../../api/manage'
+
+  export default {
+    name: "OutboundDetailList",
+    mixins:[JeecgListMixin],
+    components: {
+    },
+    props:{
+      mainId:{
+        type:String,
+        default:'',
+        required:false
+      }
+    },
+    watch:{
+      mainId:{
+        immediate: true,
+        handler(val) {
+          if(!this.mainId){
+            this.clearList()
+          }else{
+            console.log('mainId',val)
+            this.queryParam['outStorehouseId'] = val
+            this.queryParam.status = ['1','2'].join(',')
+            this.loadData(1);
+          }
+        }
+      }
+    },
+    data () {
+      return {
+        description: 'tms_outbound_order绠$悊椤甸潰',
+        disableMixinCreated:true,
+        // 琛ㄥご
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:30,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'宸ュ叿缂栫爜',
+            align:"left",
+            dataIndex: 'toolNum'
+          },
+          {
+            title:'宸ュ叿缂栧彿',
+            align:"left",
+            dataIndex: 'toolId'
+          },
+          {
+            title:'宸ュ叿绫诲瀷',
+            align:"center",
+            dataIndex: 'applicationType_dictText'
+          },
+          {
+            title:'涓枃鍚嶇О',
+            align:"center",
+            dataIndex: 'chineseName'
+          },
+          {
+            title:'鍨嬪彿/鍥惧彿',
+            align:"left",
+            dataIndex: 'toolModel'
+          },
+          {
+            title:'鐢宠鍑哄簱鏁伴噺',
+            align:"left",
+            dataIndex: 'outboundQuantity'
+          },
+          // {
+          //   title:'宸插嚭搴撴暟閲�',
+          //   align:"left",
+          //   dataIndex: 'outActualCount'
+          // },
+          {
+            title:'鍑哄簱鐘舵��',
+            align:"center",
+            dataIndex: 'status_dictText'
+          },
+          {
+            title:'鍒�鍏锋潗鏂�',
+            align:"center",
+            dataIndex: 'toolMaterial'
+          },
+          {
+            title:'闆朵欢鏉愭枡',
+            align:"center",
+            dataIndex: 'partMaterial'
+          },
+          {
+            title:'鍘傚',
+            align:"center",
+            dataIndex: 'supplierId'
+          },
+          {
+            title:'浠撳簱',
+            align:"center",
+            dataIndex: 'warehouseName'
+          },
+          {
+            title:'鍑哄簱搴撲綅',
+            align:"center",
+            dataIndex: 'outboundLocation'
+          },
+          // {
+          //   title:'鍙敤搴撳瓨鏁伴噺',
+          //   align:"left",
+          //   dataIndex: 'quantity'
+          // },
+          {
+            title:'鍒涘缓鏃堕棿',
+            align:"left",
+            dataIndex: 'createTime'
+          },
+          {
+            title: '鎿嶄綔',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:50,
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+        url: {
+          list: "/tms/outboundOrder/listOutboundDetailByMainId",
+          outbound: "/tms/outboundOrder/outBoundByApply",
+          delete: "/tms/outboundOrder/deleteOutboundDetail",
+          deleteBatch: "/tms/outboundOrder/deleteBatchOutboundDetail",
+          exportXlsUrl: "/tms/outboundOrder/exportOutboundDetail",
+          importUrl: "/tms/outboundOrder/importOutboundDetail",
+        },
+        dictOptions:{
+         outStorehouseType:[],
+        }
+      }
+    },
+    created() {
+    },
+    computed: {
+      importExcelUrl(){
+        return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}`;
+      }
+    },
+    methods: {
+      onSelectChange(selectedRowKeys, selectionRows) {
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectionRows = selectionRows;
+        this.$emit('select-change', selectedRowKeys, selectionRows)
+      },
+      clearList(){
+        this.dataSource=[]
+        this.selectedRowKeys=[]
+        this.ipagination.current = 1
+      },
+      handleOutbound(record) {
+        console.log(this.mainId)
+        console.log(record)
+        const params = [
+          {
+            outBoundOrderId: this.mainId,
+            outboundDetailId: record.id,
+            outboundQuantity: record.outboundQuantity
+          }
+        ]
+        postAction(this.url.outbound, params).then(res=>{
+          if(res.success){
+            this.loadData(1)
+            this.$emit("ok")
+            this.$message.success(res.message)
+          }else{
+            this.$message
+          }
+        })
+      }
+
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>
diff --git a/src/views/tms/modules/outBound/OutboundListLeft.vue b/src/views/tms/modules/outBound/OutboundListLeft.vue
new file mode 100644
index 0000000..61a2487
--- /dev/null
+++ b/src/views/tms/modules/outBound/OutboundListLeft.vue
@@ -0,0 +1,322 @@
+<template>
+  <a-card
+    :loading="cardLoading"
+    :bordered="false"
+    title="宸ュ叿淇℃伅"
+    style="height: 100%;"
+  >
+    <a-spin :spinning="loading">
+      <a-alert
+        type="info"
+        :showIcon="true"
+        style="margin-right: 54px;"
+      >
+        <div slot="message">
+          褰撳墠锛�<span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span>
+          <a
+            v-if="this.currSelected.title"
+            style="margin-left: 10px"
+            @click="onClearSelected"
+          >鍙栨秷</a>
+        </div>
+      </a-alert>
+      <div class="drawer-bootom-button">
+        <a-dropdown
+          :trigger="['click']"
+          placement="bottomCenter"
+        >
+          <a-menu slot="overlay">
+            <a-menu-item
+              key="1"
+              @click="expandAll"
+            >灞曞紑鎵�鏈�</a-menu-item>
+            <a-menu-item
+              key="2"
+              @click="closeAll"
+            >鍚堝苟鎵�鏈�</a-menu-item>
+            <a-menu-item
+              key="3"
+              @click="refreshTree"
+            >鍒锋柊</a-menu-item>
+          </a-menu>
+          <a-button>
+            <a-icon type="bars" />
+          </a-button>
+        </a-dropdown>
+      </div>
+
+      <a-input-search
+        @search="handleSearch"
+        style="width:100%;margin-top: 10px"
+        placeholder="妫�绱㈠伐鍏峰垎绫�"
+        allowClear
+        v-model="searchInput"
+        @change="handleChange"
+      />
+
+      <!-- showLine -->
+      <a-tree
+        :checkStrictly="checkStrictly"
+        :expandedKeys.sync="expandedKeys"
+        :selectedKeys="selectedKeys"
+        :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
+        :treeData="treeDataSource"
+        :autoExpandParent="autoExpandParent"
+        @select="onSelect"
+        @expand="onExpand"
+      >
+        <template
+          slot="title"
+          slot-scope="{title, type, rfield1}"
+        >
+          <Tooltip
+            placement="top"
+            title="宸ュ叿鍒嗙被"
+          >
+            <i
+              v-if="type == 0"
+              class="action-jeecg actioncompany2"
+              style="font-size: 18px;"
+            />
+          </Tooltip>
+
+          <span v-if="title.indexOf(searchValue) > -1">
+            {{ title.substr(0, title.indexOf(searchValue)) }}
+            <span class="replaceSearch">{{ searchValue }}</span>
+            {{ title.substr(title.indexOf(searchValue) + searchValue.length) }}
+          </span>
+          <span v-else>{{ title }}</span>
+
+        </template>
+      </a-tree>
+    </a-spin>
+  </a-card>
+</template>
+
+<script>
+import { getAction } from '@/api/manage'
+import Tooltip from 'ant-design-vue/es/tooltip'
+export default {
+  name: 'OutboundListLeft',
+  components: {
+    Tooltip,
+  },
+  props: ['value'],
+  data() {
+    return {
+      searchInput: '',
+      cardLoading: false,
+      loading: false,
+      treeDataSource: [],
+      selectedKeys: [],
+      expandedKeys: [],
+      url: {
+        factoryTreeList: '/tms/toolsClassify/loadTree',
+      },
+      searchValue: '',
+      dataList: [],
+      autoExpandParent: true,
+      checkStrictly: true,
+      allTreeKeys: [],
+      currSelected: {},
+      hiding: false,
+    }
+  },
+  created() {
+    this.queryTreeData();
+    this.closeAll();
+  },
+  methods: {
+    getCurrSelectedTitle() {
+      return !this.currSelected.title ? '' : this.currSelected.title;
+    },
+    onClearSelected() {
+      this.hiding = true;
+      this.currSelected = {};
+      this.selectedKeys = [];
+    },
+    onSelect(selectedKeys, e) {
+      this.hiding = false;
+      let record = e.node.dataRef;
+      this.currSelected = Object.assign({}, record);
+      this.selectedKeys = [record.key];
+    },
+    onExpand(expandedKeys) {
+      this.expandedKeys = expandedKeys;
+      this.autoExpandParent = false;
+    },
+    queryTreeData() {
+      this.loading = true;
+      this.cardLoading = true;
+      getAction(this.url.factoryTreeList).then((res) => {
+        if (res.success) {
+          this.dataList = [];
+          this.allTreeKeys = [];
+          this.treeDataSource = res.result;
+          this.generateList(res.result);
+        } else {
+          this.$message.warn(res.message);
+        }
+      }).finally(() => {
+        this.loading = false;
+        this.cardLoading = false;
+      })
+    },
+
+    handleChange() {
+      let search = this.searchInput;
+      let expandedKeys = this.dataList
+        .map(item => {
+          if (item.title.indexOf(search) > -1) {
+            return this.getParentKey(item.key, this.treeDataSource);
+          }
+          return null;
+        })
+        .filter((item, i, self) => item && self.indexOf(item) === i);
+      Object.assign(this, {
+        expandedKeys,
+        searchValue: search,
+        autoExpandParent: true,
+      });
+    },
+    handleSearch(value) {
+      let search = value;
+      let expandedKeys = this.dataList
+        .map(item => {
+          if (item.title.indexOf(search) > -1) {
+            return this.getParentKey(item.key, this.treeDataSource);
+          }
+          return null;
+        })
+        .filter((item, i, self) => item && self.indexOf(item) === i);
+      Object.assign(this, {
+        expandedKeys,
+        searchValue: search,
+        autoExpandParent: true,
+      });
+    },
+    getParentKey(key, tree) {
+      let parentKey;
+      for (let i = 0; i < tree.length; i++) {
+        const node = tree[i];
+        if (node.children) {
+          if (node.children.some(item => item.key === key)) {
+            parentKey = node.key;
+          } else if (
+            this.getParentKey(key, node.children)) {
+            parentKey = this.getParentKey(key, node.children);
+          }
+        }
+      }
+      return parentKey;
+    },
+
+    generateList(data) {
+      for (let i = 0; i < data.length; i++) {
+        const node = data[i];
+        const key = node.key;
+        const title = node.title;
+        this.dataList.push({ key, title: title });
+        this.allTreeKeys.push(key);
+        if (node.children) {
+          this.generateList(node.children);
+        }
+      }
+    },
+    expandAll() {
+      this.expandedKeys = this.allTreeKeys;
+    },
+    closeAll() {
+      this.expandedKeys = this.allSiteIds;
+    },
+    refreshTree() {
+      this.queryTreeData();
+    }
+  },
+  mounted() {
+    this.$bus.$on('queryTreeData', this.queryTreeData);
+  },
+  //鐩戝惉
+  watch: {
+    currSelected(val) {//鐩戝惉currSelected 鍙樺寲锛屽皢鍙樺寲鍚庣殑鏁板�间紶閫掔粰 getCurrSelected 浜嬩欢
+      this.$bus.$emit('getCurrSelected', val)
+    },
+  }
+}
+</script>
+
+<style scoped>
+.replaceSearch {
+  color: #40a9ff;
+  font-weight: bold;
+  background-color: rgb(204, 204, 204);
+}
+/*闅愯棌鏍戠殑榛樿icon*/
+.ant-tree-switcher-noop {
+  display: none !important;
+}
+/*闅愯棌鏍戠殑榛樿绔栫嚎*/
+.ant-tree.ant-tree-show-line li:not(:last-child):before {
+  border-left: 0px;
+}
+
+.ant-card-body .table-operator {
+  margin: 15px;
+}
+
+.anty-form-btn {
+  width: 100%;
+  text-align: center;
+}
+
+.anty-form-btn button {
+  margin: 0 5px;
+}
+
+.anty-node-layout .ant-layout-header {
+  padding-right: 0;
+}
+
+.header {
+  padding: 0 8px;
+}
+
+.header button {
+  margin: 0 3px;
+}
+
+.ant-modal-cust-warp {
+  height: 100%;
+}
+
+.ant-modal-cust-warp .ant-modal-body {
+  height: calc(100% - 110px) !important;
+  overflow-y: auto;
+}
+
+.ant-modal-cust-warp .ant-modal-content {
+  height: 90% !important;
+  overflow-y: hidden;
+}
+
+#app .desktop {
+  height: auto !important;
+}
+
+/** Button鎸夐挳闂磋窛 */
+.ant-btn {
+  margin-left: 3px;
+}
+.ant-alert {
+  padding: 5px 15px 5px 37px;
+}
+.drawer-bootom-button {
+  position: absolute;
+  top: 1px;
+  /* padding: 10px 16px; */
+  text-align: left;
+  right: 0;
+  background: #fff;
+  border-radius: 0 0 2px 2px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/outBound/OutboundListRight.vue b/src/views/tms/modules/outBound/OutboundListRight.vue
new file mode 100644
index 0000000..76e3f79
--- /dev/null
+++ b/src/views/tms/modules/outBound/OutboundListRight.vue
@@ -0,0 +1,430 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+           <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item
+              label="宸ュ叿缂栧彿"
+              :labelCol="{span: 5}"
+              :wrapperCol="{span: 18, offset: 1}"
+            >
+              <a-input
+                placeholder="璇疯緭鍏ュ伐鍏风紪鍙锋绱�"
+                v-model="queryParam.toolCode"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item
+              label="鍨嬪彿/鍥惧彿"
+              :labelCol="{span: 5}"
+              :wrapperCol="{span: 18, offset: 1}"
+            >
+              <a-input
+                placeholder="璇疯緭鍏ュ瀷鍙�/鍥惧彿妫�绱�"
+                v-model="queryParam.toolModel"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 鏌ヨ鍖哄煙-END -->
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+       <Tooltip
+        placement="top"
+        title="閫夋嫨宸ュ叿鍒嗙被鍚庡啀鎵ц鏂板"
+      >
+          <a-button @click="handleAdd(nodeSelected)" type="primary" icon="plus" :disabled="!nodeSelected.key || nodeSelected.entity.leafFlag === '2'">鏂板</a-button>
+      </Tooltip>
+      <a-button type="primary" @click="selectOutboundOrder">鐢宠鍗曞嚭搴�</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('tms_tools_classify')">瀵煎嚭</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">瀵煎叆</a-button>
+      </a-upload>
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        :scroll="{x:true}"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type:'radio'}"
+        :customRow="handleRowClick"
+        class="j-table-force-nowrap"
+        @change="handleTableChange">
+
+<!--        <template slot="htmlSlot" slot-scope="text">-->
+<!--          <div v-html="text"></div>-->
+<!--        </template>-->
+<!--        <template slot="imgSlot" slot-scope="text,record">-->
+<!--          <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span>-->
+<!--          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>-->
+<!--        </template>-->
+<!--        <template slot="fileSlot" slot-scope="text">-->
+<!--          <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span>-->
+<!--          <a-button-->
+<!--            v-else-->
+<!--            :ghost="true"-->
+<!--            type="primary"-->
+<!--            icon="download"-->
+<!--            size="small"-->
+<!--            @click="downloadFile(text)">-->
+<!--            涓嬭浇-->
+<!--          </a-button>-->
+<!--        </template>-->
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleDetail(record)">璇︽儏</a>
+        </span>
+
+      </a-table>
+    </div>
+
+     <a-tabs defaultActiveKey="1">
+      <a-tab-pane key="1">
+        <span slot="tab">
+          <a-badge>鍙傛暟&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <para-hole-tools-list ref="paraHoleToolsList"></para-hole-tools-list>
+        <para-threading-tool-list ref="paraThreadingToolList"></para-threading-tool-list>
+        <para-mill-tool-list ref="paraMillToolList"></para-mill-tool-list>
+        <para-turning-tools-list ref="paraTurningToolsList"></para-turning-tools-list>
+        <para-blade-list ref="paraBladeList"></para-blade-list>
+        <para-common-tool-list ref="paraCommonToolList"></para-common-tool-list>
+      </a-tab-pane>
+
+      <a-tab-pane
+        key="2"
+        forceRender
+      >
+        <span slot="tab">
+          <a-badge>绠$悊鍙傛暟&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a-badge>
+        </span>
+        <tools-config-property-list ref="toolsConfigPropertyList"></tools-config-property-list>
+      </a-tab-pane>
+    </a-tabs>
+
+    <outbound-modal ref="outboundModal" @ok="selectListOK"></outbound-modal>
+    <OutboundOrderSelectList ref="outboundOrderSelectList" @ok="selectListOK"></OutboundOrderSelectList>
+    <base-tools-modal ref="modalForm" @ok="modalFormOk" :nodeSelected="nodeSelected"></base-tools-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import BaseToolsModal from '../baseTools/BaseToolsModal'
+  import Tooltip from 'ant-design-vue/es/tooltip'
+  import { getAction, postAction, deleteAction, requestPut } from '@api/manage'
+  import OutboundModal from './OutboundModal'
+  import OutboundOrderSelectList from './OutboundOrderSelectList'
+  import ParaHoleToolsList from '../baseTools/ParaHoleToolsList'
+  import ToolsConfigPropertyList from '../baseTools/ToolsConfigPropertyList'
+  import ParaMillToolList from '../baseTools/ParaMillToolList'
+  import ParaThreadingToolList from '../baseTools/ParaThreadingToolList'
+  import ParaTurningToolsList from '../baseTools/ParaTurningToolsList'
+  import ParaCommonToolList from '../baseTools/ParaCommonToolList'
+  import ParaBladeList from '../baseTools/ParaBladeList'
+
+  export default {
+    name: 'OutboundListRight',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      OutboundModal,
+      OutboundOrderSelectList,
+      BaseToolsModal,
+      Tooltip,
+      ParaHoleToolsList,
+      ToolsConfigPropertyList,
+      ParaMillToolList,
+      ParaThreadingToolList,
+      ParaTurningToolsList,
+      ParaCommonToolList,
+      ParaBladeList
+    },
+    data () {
+      return {
+        description: '宸ュ叿鍑哄簱椤甸潰',
+        /* 鍒嗛〉鍙傛暟 */
+        ipagination:{
+          current: 1,
+          pageSize: 5,
+          pageSizeOptions: ['5', '10', '20', '30'],
+          showTotal: (total, range) => {
+            return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
+          },
+          showQuickJumper: true,
+          showSizeChanger: true,
+          total: 0
+        },
+        // 琛ㄥご
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'宸ュ叿缂栫爜',
+            align:"center",
+            dataIndex: 'toolCode'
+          },
+          {
+            title:'宸ュ叿缂栧彿',
+            align:"center",
+            dataIndex: 'toolId'
+          },
+          {
+            title:'宸ュ叿绫诲瀷',
+            align:"center",
+            dataIndex: 'signCode'
+          },
+          {
+            title:'涓枃鍚嶇О',
+            align:"center",
+            dataIndex: 'chineseName'
+          },
+          {
+            title:'鍨嬪彿/鍥惧彿',
+            align:"center",
+            dataIndex: 'toolModel'
+          },
+          {
+            title:'鍒�鍏锋潗鏂�',
+            align:"center",
+            dataIndex: 'toolMaterial'
+          },
+          {
+            title:'闆朵欢鏉愭枡',
+            align:"center",
+            dataIndex: 'partMaterial'
+          },
+          {
+            title:'鍑哄簱绫诲瀷',
+            align:"center",
+            dataIndex: 'outStorehouseType_dictText'
+          },
+          {
+            title:'搴撲綅鍙�',
+            align:"center",
+            dataIndex: 'goodsShelvesCode'
+          },
+          {
+            title:'鍑哄簱鏁伴噺',
+            align:"center",
+            dataIndex: 'outNumber'
+          },
+          {
+            title:'鍒涘缓浜�',
+            align:"center",
+            dataIndex: 'createBy'
+          },
+          {
+            title:'鍒涘缓鏃堕棿',
+            align:"center",
+            dataIndex: 'createTime'
+          },
+          // {
+          //   title: '鎿嶄綔',
+          //   dataIndex: 'action',
+          //   align:"center",
+          //   fixed:"right",
+          //   width:147,
+          //   scopedSlots: { customRender: 'action' }
+          // }
+        ],
+        url: {
+          list: "/tms/outStoreDetail/list",
+          paraHolesToolsList:"/tms/baseTools/paraHolesToolsList",
+          paraCommonToolList:"/tms/baseTools/paraCommonToolList",
+          paraThreadingToolList:"/tms/baseTools/paraThreadingToolList",
+          paraMillToolList:"/tms/baseTools/paraMillToolList",
+          paraTurningToolsList:"/tms/baseTools/paraTurningToolsList",
+          paraBladeList:"/tms/baseTools/paraBladeList",
+          delete: "/tms/baseTools/delete",
+          deleteBatch: "/tms/baseTools/deleteBatch",
+          edit: '/tms/baseTools/edit',
+          exportXlsUrl: "/tms/baseTools/exportXls",
+          importExcelUrl: "tms/baseTools/importExcel",
+          queryParaByToolCode:"/tms/baseTools/queryByToolCode",
+          queryByToolCode:"/tms/toolsConfigProperty/queryByToolCode"
+        },
+        dictOptions:{},
+        superFieldList:[],
+        nodeSelected: {}, // 褰撳墠閫変腑鐨勮妭鐐规暟鎹�
+        paraTypeFlag:''
+      }
+    },
+    created() {
+      this.$bus.$on('getCurrSelected', (data) => {
+        console.log(data)
+      //getCurrSelected 浜嬩欢 鎺ユ敹缁勪欢浼犻�掔殑鍙傛暟
+      this.nodeType = (data.type == undefined ? 0 : data.type);
+      this.paraTypeFlag = (data.entity == undefined ? 0 : data.entity.paraTypeFlag)
+      this.nodeSelected = data;
+      this.queryParam.classifyId = data.key
+      this.loadData()
+      this.clearPara()
+    })
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      selectOutboundOrder() {
+        this.$refs.outboundOrderSelectList.openSelect();
+      },
+      handleRowClick(record) {
+        return {
+          on: {
+            click: () => {
+              console.log(record)
+              this.onSelectChange(record.id.split(","), [record]);
+            }
+          }
+        }
+      },
+      handleAdd(entity) {
+        if (!this.nodeSelected ) {
+          this.$message.warning('璇峰厛閫夋嫨涓�涓伐鍏峰垎绫�');
+          return;
+        }
+        // 鎵撳紑鏂板妯℃�佹锛屽苟浼犻�掑綋鍓嶉�変腑鐨勮妭鐐�
+        this.$refs.outboundModal.add(this.nodeSelected);
+        this.$refs.outboundModal.title = "鏂板宸ュ叿鍑哄簱";
+        this.$refs.outboundModal.disableSubmit = false;
+      },
+      handleDelete(id) {
+        deleteAction(this.url.delete, {id: id}).then((res) => {
+                if (res.success) {
+                  //閲嶆柊璁$畻鍒嗛〉闂
+                  this.loadData()
+                  this.$message.success(res.message);
+                  this.$bus.$emit('queryTreeData')
+                  this.clearPara()
+                } else {
+                  this.$message.warning(res.message);
+                }
+              });
+      },
+      selectListOK() {
+        this.loadData()
+      },
+      modalFormOk() {
+        this.loadData(); // 鍒锋柊琛ㄦ牸鏁版嵁
+        this.$bus.$emit('queryTreeData') //鍒锋柊宸︿晶鏍�
+      },
+      onSelectChange(selectedRowKeys, selectionRows) {
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectionRows = selectionRows;
+        const toolCode = this.selectionRows[0].toolCode
+        //閫氳繃id鏌ヨ绠$悊鍙傛暟鍜屽弬鏁版暟鎹�
+        getAction(this.url.queryParaByToolCode, { toolCode: toolCode,paraTypeFlag:this.paraTypeFlag}).then((res) => {
+          if (res.success) {
+            if(this.paraTypeFlag === "1"){
+              this.$refs.paraCommonToolList.getPara(res.result);
+            }else if(this.paraTypeFlag === "2"){
+              this.$refs.paraHoleToolsList.getPara(res.result);
+            }else if(this.paraTypeFlag === "3"){
+              this.$refs.paraThreadingToolList.getPara(res.result);
+            }else if(this.paraTypeFlag === "4"){
+              this.$refs.paraMillToolList.getPara(res.result);
+            }else if(this.paraTypeFlag === "5"){
+              this.$refs.paraTurningToolsList.getPara(res.result);
+            }else if(this.paraTypeFlag === "6"){
+              this.$refs.paraBladeList.getPara(res.result);
+            }
+          } else {
+            this.$message.warning(res.message);
+          }
+        })
+        getAction(this.url.queryByToolCode, { toolCode: toolCode}).then((res) => {
+          if (res.success) {
+            this.$refs.toolsConfigPropertyList.getPara(res.result);
+          } else {
+            this.$message.warning(res.message);
+          }
+        })
+
+      },
+      // 澶勭悊缂栬緫鎸夐挳鐐瑰嚮浜嬩欢
+      handleEditSelected() {
+        if (this.selectedRowKeys.length === 0) {
+          this.$message.warning('璇烽�夋嫨涓�鏉¤褰曡繘琛岀紪杈�');
+          return;
+        }
+        const selectedRecord = this.dataSource.find(item => item.id === this.selectedRowKeys[0]);
+        if (selectedRecord) {
+          this.handleEdit(selectedRecord);
+        }
+      },
+      onClearSelected() {
+        this.selectedKeys = [];
+        this.nodeSelected = {}; // 娓呯┖閫変腑鐨勮妭鐐�
+        this.dataSource = []; // 娓呯┖琛ㄦ牸鏁版嵁
+      },
+      //閲嶇疆
+      searchReset() {
+        this.queryParam = {}
+        this.loadData(1);
+        this.clearPara()
+      },
+      //娓呯┖閫変腑鍙婂弬鏁�
+      clearPara(){
+        this.selectedRowKeys = []
+        this.$refs.paraCommonToolList.visable = false
+        this.$refs.paraHoleToolsList.visable = false
+        this.$refs.paraThreadingToolList.visable = false
+        this.$refs.paraMillToolList.visable = false
+        this.$refs.paraTurningToolsList.visable = false
+        this.$refs.paraBladeList.visable = false
+        this.$refs.toolsConfigPropertyList.visable = false
+      }
+
+    },
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+   .enable {
+    color: green;
+  }
+  .disable {
+    color: red;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/outBound/OutboundModal.vue b/src/views/tms/modules/outBound/OutboundModal.vue
new file mode 100644
index 0000000..7123333
--- /dev/null
+++ b/src/views/tms/modules/outBound/OutboundModal.vue
@@ -0,0 +1,312 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴">
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="classifyNum" label="宸ュ叿鍒嗙被缂栫爜">
+              <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫荤紪鐮�" v-model="model.classifyNum" :disabled="true" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="classifyName" label="宸ュ叿鍒嗙被鍚嶇О">
+              <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyName" :disabled="true" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-model-item label="鍑哄簱绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="outStorehouseType">
+              <j-dict-select-tag :disabled="disableSubmit" @change="handleTypeChange" type="list" v-model="model.outStorehouseType" dictCode="out_storehouse_type" placeholder="璇烽�夋嫨鍑哄簱绫诲瀷" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+
+    <a-button v-show="selectBorrowTool" type="primary" :style="{ marginBottom: '8px' }" @click="selectOutBoundTool">閫夋嫨鍑哄簱宸ュ叿</a-button>
+    <a-table
+      ref="table"
+      size="middle"
+      bordered
+      rowKey="id"
+      :scroll="{x:true}"
+      :columns="columns"
+      :dataSource="dataSource"
+      :pagination="ipagination"
+      :loading="loading"
+      :rowSelection="null"
+      @change="handleTableChange">
+
+      <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index">
+        <div :key="col.dataIndex">
+          <a-input-number
+            v-if="col.dataIndex === 'outboundQuantity'"
+            :disabled="record.quantity <= 1"
+            :value="text"
+            @change="(e) => handleChange(e, record.key, col, index)"
+            :min="1"
+          />
+        </div>
+      </template>
+      <span slot="action" v-if="disableSubmit === false" slot-scope="text, record, index">
+        <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record, index)">
+          <a>鍒犻櫎</a>
+        </a-popconfirm>
+      </span>
+    </a-table>
+    <template slot="footer" v-if="disableSubmit === false">
+      <a-button :style="{ marginRight: '8px' }" @click="handleCancel">鍏抽棴</a-button>
+      <a-button @click="handleOk" :disabled="isDisabled" type="primary">鍑哄簱</a-button>
+    </template>
+
+    <j-select-outbound-tool-modal ref="selectOutBoundToolModal"></j-select-outbound-tool-modal>
+  </j-modal>
+
+</template>
+
+<script>
+
+import { validateDuplicateValue } from '@/utils/util'
+import OutboundDetailList from '../../OutboundDetailList.vue'
+import JSelectOutboundToolModal from './JSelectOutboundToolModal.vue'
+import { postAction } from '../../../../api/manage'
+import title from 'ant-design-vue/lib/skeleton/Title'
+
+export default {
+  name: "OutboundOrderModal",
+  components: {
+    OutboundDetailList,
+    JSelectOutboundToolModal
+  },
+  data () {
+    return {
+      title: '',
+      width:1200,
+      visible: false,
+      disableSubmit: false,
+      isDisabled: false,
+      addShow: true,
+      selectBorrowTool: false,
+      model:{
+      },
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 },
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 },
+      },
+      //琛ㄦ牸鍙傛暟
+      ipagination: {
+        current: 1,
+        pageSize: 10,
+        total: 0,
+      },
+      dataSource: [],
+      loading: false,
+      // 琛ㄥご
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key:'rowIndex',
+          width:60,
+          align:"center",
+          customRender:function (t,r,index) {
+            return parseInt(index)+1;
+          }
+        },
+        {
+          title:'宸ュ叿缂栫爜',
+          align:"center",
+          dataIndex: 'toolNum'
+        },
+        {
+          title:'宸ュ叿缂栧彿',
+          align:"center",
+          dataIndex: 'toolId'
+        },
+        {
+          title:'鍙敤搴撳瓨',
+          align:"center",
+          dataIndex: 'quantity'
+        },
+        {
+          title:'鍑哄簱鏁伴噺',
+          align:"center",
+          dataIndex: 'outboundQuantity',
+          scopedSlots: { customRender: 'outboundQuantity' },
+        },
+        {
+          title:'鍑哄簱浠撳簱',
+          align:"center",
+          dataIndex: 'warehouseName'
+        },
+        {
+          title:'鍑哄簱搴撲綅',
+          align:"center",
+          dataIndex: 'outboundLocation'
+        },
+        // {
+        //   title:'鍑哄簱鐘舵��;1.鏈嚭搴擄紱2.閮ㄥ垎鍑哄簱锛�3.鍑哄簱瀹屾垚',
+        //   align:"center",
+        //   dataIndex: 'status'
+        // },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align:"center",
+          fixed:"right",
+          width:147,
+          scopedSlots: { customRender: 'action' },
+        }
+      ],
+      confirmLoading: false,
+      validatorRules: {
+        outStorehouseType: [
+          { required: true, message: '璇烽�夋嫨鍑哄簱绫诲瀷!'},
+        ]
+      },
+      url: {
+        outbound: "/tms/outboundOrder/outBoundByAdd",
+        list: "/tms/outboundOrder/listOutboundDetailByMainId",
+        add: "/tms/outboundOrder/addTotal",
+        edit: "/tms/outboundOrder/editTotal",
+      },
+      classifyId: ''
+    }
+  },
+  created () {
+    //澶囦唤model鍘熷鍊�
+    this.modelDefault = JSON.parse(JSON.stringify(this.model));
+  },
+  mounted() {
+    this.$bus.$on('selectionRows', (data) => {
+      for (let i = 0; i < data.length; i++) {
+        this.dataSource.push({
+          id: data[i].id,
+          toolCode:data[i].toolCode,
+          toolNum:data[i].toolNum,
+          toolId: data[i].toolId,
+          quantity: data[i].quantity,
+          outboundQuantity: data[i].quantity,
+          storageLocation: data[i].warehouseId,
+          warehouseName: data[i].warehouseName,
+          outboundLocation: data[i].positionCode
+        })
+      }
+      this.ipagination.total = this.dataSource.length
+    })
+  },
+  methods: {
+    handleTypeChange(value) {
+      if (value === '1') {
+        this.selectBorrowTool = true
+      }
+      if (value === '2') {
+        this.selectBorrowTool = false
+      }
+      if (value === '3') {
+        this.selectBorrowTool = false
+      }
+      if (value === '4') {
+        this.selectBorrowTool = false
+      }
+    },
+    handleDelete(record, index) {
+      this.dataSource.splice(index, 1)
+    },
+    handleChange(value, key, column, index) {
+      console.log(value, key, column, index)
+      const temp = [...this.dataSource]
+      const target = temp.filter(item => key === item.key)[index];
+      if (target) {
+        target[column.dataIndex] = value
+        this.dataSource = temp
+        if(column.dataIndex === 'outboundQuantity'){
+          if(target['quantity']<value){
+            this.$message.error('鍑哄簱鏁伴噺涓嶈兘澶т簬鍙敤搴撳瓨!')
+            this.isDisabled = true
+          }else{
+            this.isDisabled = false
+          }
+        }
+        this.dataSource = temp
+      }
+    },
+    selectOutBoundTool() {
+      console.log(this.dataSource)
+      let ids = this.dataSource.map(item => item.id).join(',')
+      this.$refs.selectOutBoundToolModal.showModal(ids, this.classifyId)
+    },
+    add (nodeSelected) {
+      this.addShow = false
+      this.classifyId = nodeSelected.key
+      this.model.classifyNum = nodeSelected.entity.classifyId
+      this.model.classifyName = nodeSelected.entity.typeName
+      this.dataSource = []
+      this.visible = true;
+    },
+    close () {
+      this.$emit('close');
+      this.addShow = true
+      this.visible = false;
+      this.$refs.form.clearValidate();
+    },
+    handleTableChange(pagination, filters, sorter) {
+      this.ipagination = pagination
+    },
+    handleOk () {
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          if (this.dataSource == null || this.dataSource.length === 0) {
+            this.$message.warning('璇烽�夋嫨鍑哄簱宸ュ叿!');
+            return
+          }
+          const params = this.dataSource.map(item => {
+            return {
+              toolLedgerDetailId: item.id,
+              toolCode: item.toolCode,
+              toolId: item.toolId,
+              outboundQuantity: item.outboundQuantity,
+              outStorehouseType: this.model.outStorehouseType,
+              storageLocation: item.storageLocation
+            }
+          })
+          console.log(params)
+          this.confirmLoading = true;
+          postAction(this.url.outbound, params).then((res)=>{
+            if(res.success){
+              this.$message.success(res.message)
+              this.$emit("ok")
+            } else {
+              this.$message.warning(res.message)
+            }
+          }).finally(() => {
+            this.confirmLoading = false;
+            this.close();
+          })
+        }else{
+          return false
+        }
+      })
+    },
+    handleCancel () {
+      this.close()
+    },
+
+
+  }
+}
+</script>
\ No newline at end of file
diff --git a/src/views/tms/modules/outBound/OutboundOrderModal.vue b/src/views/tms/modules/outBound/OutboundOrderModal.vue
index ec09ece..e098380 100644
--- a/src/views/tms/modules/outBound/OutboundOrderModal.vue
+++ b/src/views/tms/modules/outBound/OutboundOrderModal.vue
@@ -54,7 +54,7 @@
           </a-col>
           <a-col :span="12">
             <a-form-model-item v-if="addShow" label="瀹℃牳鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="auditDate">
-              <j-date placeholder="璇烽�夋嫨瀹℃牳鏃堕棿" v-model="model.auditDate" style="width: 100%" disabled/>
+              <j-date placeholder="璇烽�夋嫨瀹℃牳鏃堕棿" :show-time="true" dateFormat="YYYY-MM-DD HH:mm" v-model="model.auditDate" style="width: 100%" disabled/>
             </a-form-model-item>
           </a-col>
         </a-row>
@@ -218,10 +218,16 @@
         confirmLoading: false,
         validatorRules: {
            outStorehouseType: [
-              { required: true, message: '璇疯緭鍏ュ嚭搴撶被鍨�!'},
+              { required: true, message: '璇烽�夋嫨鍑哄簱绫诲瀷!'},
            ],
            subjectMatter: [
               { required: true, message: '璇疯緭鍏ラ鐢ㄤ簨鐢�!'},
+           ],
+          reviewer: [
+              { required: true, message: '璇烽�夋嫨瀹℃牳浜�!'},
+           ],
+          outboundTime: [
+              { required: true, message: '璇烽�夋嫨鍑哄簱鏃堕棿!'},
            ],
         },
         url: {
@@ -299,7 +305,7 @@
         if (this.title === '缂栬緫') {
          ids = this.dataSource.map(item => item.toolLedgerDetailId).join(',')
         }
-        this.$refs.selectOutBoundToolModal.showModal(ids)
+        this.$refs.selectOutBoundToolModal.showOrderModal(ids)
       },
       add () {
         this.addShow = false
@@ -349,6 +355,10 @@
         // 瑙﹀彂琛ㄥ崟楠岃瘉
         this.$refs.form.validate(valid => {
           if (valid) {
+            if (this.dataSource == null || this.dataSource.length === 0) {
+              this.$message.warning('璇烽�夋嫨鍑哄簱宸ュ叿!');
+              return
+            }
             this.model.outboundDetailList = this.dataSource
             that.confirmLoading = true;
             let httpurl = '';
diff --git a/src/views/tms/modules/outBound/OutboundOrderSelectList.vue b/src/views/tms/modules/outBound/OutboundOrderSelectList.vue
new file mode 100644
index 0000000..46b1eb2
--- /dev/null
+++ b/src/views/tms/modules/outBound/OutboundOrderSelectList.vue
@@ -0,0 +1,330 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @cancel="handleCancel"
+    cancelText="鍏抽棴"
+    :footer="null"
+  >
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鍑哄簱鍗曠紪鍙�">
+              <a-input placeholder="璇疯緭鍏ュ嚭搴撳崟缂栧彿" v-model="queryParam.outNum"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鍑哄簱绫诲瀷">
+              <j-dict-select-tag placeholder="璇烽�夋嫨鍑哄簱绫诲瀷" v-model="queryParam.outStorehouseType" dictCode="out_storehouse_type"/>
+            </a-form-item>
+          </a-col>
+          <template v-if="toggleSearchStatus">
+          </template>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+              <a-button type="primary" @click="handleOutbound" style="margin-left: 8px">鍑哄簱</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 鏌ヨ鍖哄煙-END -->
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+            <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+              <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"
+        class="j-table-force-nowrap"
+        :scroll="{x:true}"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="null"
+        :customRow="clickThenSelect"
+        @change="handleTableChange">
+
+      </a-table>
+    </div>
+
+    <a-tabs defaultActiveKey="1">
+      <a-tab-pane tab="鍑哄簱鐢宠鍗曟槑缁�" key="1" >
+        <OutboundDetailSelectList
+          ref="outboundDetailSelectList" :mainId="outboundDetailMainId" @ok="detailSelectListOK"
+          @select-change="handleDetailSelectChange"
+        />
+      </a-tab-pane>
+    </a-tabs>
+
+  </j-modal>
+</template>
+
+<script>
+
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import { getAction, deleteAction } from '@/api/manage'
+  import OutboundDetailSelectList from './OutboundDetailSelectList'
+  import {initDictOptions,filterMultiDictText} from '@/components/dict/JDictSelectUtil'
+  import '@/assets/less/TableExpand.less'
+  import { postAction } from '../../../../api/manage'
+
+  export default {
+    name: "OutboundOrderSelectList",
+    mixins:[JeecgListMixin],
+    components: {
+      OutboundDetailSelectList
+    },
+    data () {
+      return {
+        title: '閫夋嫨鍑哄簱鍗曠敵璇�',
+        width: 1200,
+        visible: false,
+        disableSubmit: false,
+        confirmLoading: false,
+        disableMixinCreated: true,
+        // 琛ㄥご
+        columns: [
+          {
+            title:'鍑哄簱绫诲瀷',
+            align:"center",
+            dataIndex: 'outStorehouseType_dictText',
+          },
+          {
+            title:'鍑哄簱鍗曠紪鍙�',
+            align:"left",
+            dataIndex: 'outNum'
+          },
+          {
+            title:'鍗曟嵁鐘舵��',
+            align:"center",
+            dataIndex: 'orderStatus_dictText'
+          },
+          {
+            title:'缁忔墜浜�',
+            align:"center",
+            dataIndex: 'handler_dictText'
+          },
+          {
+            title:'瀹℃牳浜�',
+            align:"center",
+            dataIndex: 'reviewer_dictText'
+          },
+          {
+            title:'瀹℃牳鏃堕棿',
+            align:"left",
+            dataIndex: 'auditDate'
+          },
+          {
+            title:'瀹℃牳鎰忚',
+            align:"center",
+            dataIndex: 'approvalOpinion'
+          },
+          {
+            title:'鐢宠鍑哄簱鏃堕棿',
+            align:"left",
+            dataIndex: 'outboundTime'
+          },
+          {
+            title:'鍑哄簱鐘舵��',
+            align:"center",
+            dataIndex: 'outStatus_dictText'
+          },
+          {
+            title:'棰嗙敤浜嬬敱',
+            align:"center",
+            dataIndex: 'subjectMatter'
+          },
+          {
+            title:'澶囨敞',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'鎿嶄綔鍛�',
+            align:"center",
+            dataIndex: 'createBy'
+          },
+          {
+            title:'鍒涘缓鏃堕棿',
+            align:"left",
+            dataIndex: 'createTime'
+          }
+        ],
+        url: {
+          list: "/tms/outboundOrder/list",
+          outbound: "/tms/outboundOrder/outBoundByApply",
+          delete: "/tms/outboundOrder/delete",
+          submit: "/tms/outboundOrder/submit",
+          deleteBatch: "/tms/outboundOrder/deleteBatch",
+          exportXlsUrl: "/tms/outboundOrder/exportXls",
+          importExcelUrl: "tms/outboundOrder/importExcel",
+        },
+        dictOptions:{
+         outStorehouseType:[],
+        },
+        /* 鍒嗛〉鍙傛暟 */
+        ipagination:{
+          current: 1,
+          pageSize: 5,
+          pageSizeOptions: ['5', '10', '50'],
+          showTotal: (total, range) => {
+            return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
+          },
+          showQuickJumper: true,
+          showSizeChanger: true,
+          total: 0
+        },
+        selectedMainId:'',
+        superFieldList:[],
+        outboundDetailMainId: '',
+      }
+    },
+    created() {
+      this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      }
+    },
+    methods: {
+      openSelect() {
+        this.loadData()
+        this.visible = true
+      },
+      modalFormOk() {
+        this.$refs.outboundDetailSelectList.clearList()
+        this.loadData();
+      },
+      detailSelectListOK() {
+        this.loadData()
+      },
+      searchReset() {
+        this.queryParam = {}
+        this.onClearSelected()
+        this.$refs.outboundDetailSelectList.clearList()
+        this.loadData(1);
+      },
+      clickThenSelect(record) {
+        return {
+          on: {
+            click: () => {
+              this.onSelectChange(record.id.split(","), [record]);
+            }
+          }
+        }
+      },
+      onClearSelected() {
+        this.selectedRowKeys = [];
+        this.selectionRows = [];
+        this.selectedMainId = ''
+        this.outboundDetailMainId = ''
+      },
+      onSelectChange(selectedRowKeys, selectionRows) {
+        this.selectedMainId=selectedRowKeys[0]
+        this.outboundDetailMainId = selectionRows[0]['id']
+      },
+      handleDetailSelectChange(selectedRowKeys, selectionRows) {
+        this.selectedRowKeys = selectedRowKeys;
+        this.selectionRows = selectionRows;
+      },
+      handleOutbound() {
+        if (this.selectionRows.length < 1) {
+          this.$message.warning("璇烽�夋嫨鏄庣粏鍚庡啀鍑哄簱锛�")
+          return
+        }
+        const params = this.selectionRows.map((item) => {
+          return {
+            outBoundOrderId: this.selectedMainId,
+            outboundDetailId: item.id,
+            outboundQuantity: item.outboundQuantity
+          }
+        })
+        postAction(this.url.outbound, params).then(res=>{
+          if (res.success) {
+            this.$message.success(res.message);
+            this.onClearSelected()
+            this.$refs.outboundDetailSelectList.clearList()
+            this.$emit("ok")
+            this.visible = false
+          } else {
+            this.$message.warning(res.message);
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+      close () {
+        this.$emit('close');
+        this.onClearSelected()
+        this.addShow = true
+        this.visible = false;
+        // this.$refs.form.clearValidate();
+      },
+      loadData(arg) {
+        if(!this.url.list){
+          this.$message.error("璇疯缃畊rl.list灞炴��!")
+          return
+        }
+        //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
+        if (arg === 1) {
+          this.ipagination.current = 1;
+        }
+        this.onClearSelected()
+        this.queryParam.orderStatus = '3'
+        this.queryParam.outStatus = '1'
+        var params = this.getQueryParams();//鏌ヨ鏉′欢
+        this.loading = true;
+        getAction(this.url.list, params).then((res) => {
+          if (res.success) {
+            this.dataSource = res.result.records;
+            this.ipagination.total = res.result.total;
+          }
+          if(res.code===510){
+            this.$message.warning(res.message)
+          }
+          this.loading = false;
+        })
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'string',value:'outNum',text:'鍑哄簱鍗曠紪鍙�',dictCode:''})
+        fieldList.push({type:'string',value:'outStorehouseType',text:'鍑哄簱绫诲瀷',dictCode:'out_storehouse_type'})
+        fieldList.push({type:'string',value:'handler',text:'缁忔墜浜�',dictCode:''})
+        fieldList.push({type:'sel_user',value:'reviewer',text:'瀹℃牳浜�'})
+        fieldList.push({type:'string',value:'orderStatus',text:'鍗曞瓙鐘舵��',dictCode:''})
+        fieldList.push({type:'date',value:'auditDate',text:'瀹℃牳鏃堕棿'})
+        fieldList.push({type:'string',value:'approvalOpinion',text:'瀹℃牳鎰忚',dictCode:''})
+        fieldList.push({type:'string',value:'subjectMatter',text:'棰嗙敤浜嬬敱',dictCode:''})
+        fieldList.push({type:'date',value:'outboundTime',text:'鍑哄簱鏃堕棿'})
+        fieldList.push({type:'string',value:'remark',text:'澶囨敞',dictCode:''})
+        fieldList.push({type:'string',value:'createBy',text:'鎿嶄綔鍛�',dictCode:''})
+        fieldList.push({type:'date',value:'createTime',text:'鍒涘缓鏃堕棿'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less'
+</style>
\ No newline at end of file
diff --git a/src/views/tms/modules/toolsClassify/ToolsClassifyForm.vue b/src/views/tms/modules/toolsClassify/ToolsClassifyForm.vue
index 0babff4..d442612 100644
--- a/src/views/tms/modules/toolsClassify/ToolsClassifyForm.vue
+++ b/src/views/tms/modules/toolsClassify/ToolsClassifyForm.vue
@@ -108,7 +108,7 @@
         leafFlagShow:true,
          validatorRules: {
            classifyId: [
-              { required: true, message: '璇疯緭鍏ュ伐鍏峰垎绫荤紪鍙�!'},
+              { required: false, message: '璇疯緭鍏ュ伐鍏峰垎绫荤紪鍙�!'},
               { validator: this.validateNum },
            ],
            typeName: [
diff --git a/src/views/tms/modules/toolsClassify/ToolsClassifyListRight.vue b/src/views/tms/modules/toolsClassify/ToolsClassifyListRight.vue
index 14b3ab0..fa65571 100644
--- a/src/views/tms/modules/toolsClassify/ToolsClassifyListRight.vue
+++ b/src/views/tms/modules/toolsClassify/ToolsClassifyListRight.vue
@@ -167,6 +167,18 @@
     data () {
       return {
         description: '宸ュ叿鍒嗙被绠$悊椤甸潰',
+         /* 鍒嗛〉鍙傛暟 */
+      ipagination:{
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['10', '20', '50'],
+        showTotal: (total, range) => {
+          return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
         // 琛ㄥご
         columns: [
           {
@@ -366,8 +378,10 @@
           .then((res) => {
             if (res.success) {
               this.dataSource = res.result.records; // 鏇存柊琛ㄦ牸鏁版嵁
+              this.ipagination.total = res.result.total
             } else {
               this.$message.warning(res.message);
+              this.ipagination.total = 0
             }
           })
           .finally(() => {
diff --git a/src/views/tms/requirement/ToolSharpeningList .vue b/src/views/tms/requirement/ToolSharpeningList .vue
new file mode 100644
index 0000000..cf8841a
--- /dev/null
+++ b/src/views/tms/requirement/ToolSharpeningList .vue
@@ -0,0 +1,249 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鍒�鍏风紪鍙�">
+              <a-input placeholder="璇疯緭鍏ュ垁鍏风紪鍙�" v-model="queryParam.toolId"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鍒冪(缁撴灉">
+              <a-input placeholder="璇疯緭鍏ュ垉纾ㄧ粨鏋�" v-model="queryParam.sharpeningResult"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鍒冪(鏃堕棿">
+              <a-range-picker v-model="queryParam.sharpeningTime" @change="onInspectionDateChange" format="YYYY-MM-DD" value-format="YYYY-MM-DD" />
+            </a-form-item>
+          </a-col>
+          <a-col :xl="4" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 鏌ヨ鍖哄煙-END -->
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+      <div class="table-operator">
+        <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
+      </div>
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+
+
+      <a-table
+        ref="table"
+        size="middle"
+        :scroll="{x:true}"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="null"
+        class="j-table-force-nowrap"
+        @change="handleTableChange">
+
+
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleDetail(record)">璇︽儏</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a @click="handleEdit(record)">缂栬緫</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                  <a>鍒犻櫎</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+
+    <tools-sharpening-modal ref="modalForm"  @ok="modalFormOk"></tools-sharpening-modal>
+  </a-card>
+</template>
+
+<script>
+
+import '@/assets/less/TableExpand.less'
+import { mixinDevice } from '@/utils/mixin'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import ToolsSharpeningModal from './modules/ToolsSharpeningModal'
+import { getAction, putAction, deleteAction } from '../../../api/manage'
+
+export default {
+  name: 'ToolSharpeningList ',
+  mixins:[JeecgListMixin, mixinDevice],
+  components: {
+    ToolsSharpeningModal
+  },
+  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: 'paramaTableName_dictText'
+        },
+        {
+          title:'鍒�鍏风紪鍙�',
+          align:"center",
+          dataIndex: 'toolId'
+        },
+        {
+          title:'鍒�鍏峰悕绉�',
+          align:"center",
+          dataIndex: 'typeName'
+        },
+
+        {
+          title:'鍘傚',
+          align:"center",
+          dataIndex: 'supplierId',
+        },
+        {
+          title:'鍒冪(鏃堕棿',
+          align:"center",
+          dataIndex: 'sharpeningTime'
+        },
+        {
+          title:'鍒冪(缁撴灉鍙婂缓璁�',
+          align:"center",
+          dataIndex: 'sharpeningResult'
+        },
+        {
+          title:'璐d换浜�',
+          align:"center",
+          dataIndex: 'responsiblePerson_dictText'
+        },
+
+        {
+          title:'鍒涘缓浜�',
+          align:"center",
+          dataIndex: 'createBy'
+        },
+
+        {
+          title:'鍒涘缓鏃堕棿',
+          align:"center",
+          dataIndex: 'createTime'
+        },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align:"center",
+          fixed:"right",
+          width:147,
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: "/tms/toolSharpening/listToolSharpening",
+        add: "/tms/toolSharpening/add",
+        delete: "/tms/toolSharpening/delete",
+        edit: "/tms/toolSharpening/edit",
+        deleteBatch: "/tms/toolSharpening/deleteBatch",
+        exportXlsUrl: "/tms/toolSharpening/exportXls",
+        importExcelUrl: "tms/toolSharpening/importExcel",
+      },
+      dictOptions:{},
+      superFieldList:[],
+
+    }
+  },
+  created() {},
+  computed: {
+    importExcelUrl: function(){
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    },
+  },
+
+  methods: {
+    onInspectionDateChange: function(value, dateString) {
+      this.queryParam.sharpeningTimeBegin = dateString[0]
+      this.queryParam.sharpeningTimeEnd = dateString[1]
+    },
+
+
+    handleEdit: function (record) {
+      console.log('record:', record)
+      this.$refs.modalForm.title = '缂栬緫'
+      this.$refs.modalForm.disableSubmit = false
+      this.$refs.modalForm.edit(record)
+
+    },
+    handleDetail:function(record){
+      this.$refs.modalForm.title="璇︽儏";
+      this.$refs.modalForm.disableSubmit = true;
+      this.$refs.modalForm.edit(record);
+    },
+
+
+    handleDelete: function (id) {
+      if (!this.url.delete) {
+        this.$message.error('璇疯缃畊rl.delete灞炴��!')
+        return
+      }
+      deleteAction(this.url.delete, { id: id }).then((res) => {
+        if (res.success) {
+          //閲嶆柊璁$畻鍒嗛〉闂
+          this.$message.success(res.message)
+          this.ipagination.current = 1
+          this.loadData() // 寮哄埗浠庣涓�椤靛姞杞�
+        } else {
+          this.$message.warning(res.message)
+        }
+      })
+    },
+    searchReset() {
+      this.loadData(1)
+    },
+    modalFormOk() {
+      this.loadData()
+    },
+
+
+  }
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+.enable {
+  color: green;
+}
+.disable {
+  color: red;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/requirement/modules/ToolsModal.vue b/src/views/tms/requirement/modules/ToolsModal.vue
new file mode 100644
index 0000000..8b6e337
--- /dev/null
+++ b/src/views/tms/requirement/modules/ToolsModal.vue
@@ -0,0 +1,221 @@
+<template>
+  <a-modal :title="title" :width="1000" :visible="visible" :maskClosable="false" @ok="handleOk" @cancel="handleCancel"
+           cancelText="鍏抽棴">
+    <a-card :bordered="false">
+      <!-- 鏌ヨ鍖哄煙 -->
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="searchQuery">
+          <a-row :gutter="24">
+            <a-col :md="7" :sm="7">
+              <a-form-item label="宸ュ叿缂栫爜">
+                <a-input placeholder="璇疯緭鍏ュ伐鍏风紪鐮佹绱�" v-model="queryParam.equipmentid"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :md="3" :sm="3">
+              <a-space>
+                <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+                <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+              </a-space>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+
+      <!-- table鍖哄煙-begin -->
+      <div>
+        <a-table ref="table" size="middle" bordered rowKey="id" :scroll="{聽 y: 300聽}" :columns="columns"
+                 :dataSource="dataSource" :pagination="ipagination" :loading="loading"
+                 :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type:'radio'}"
+                 @change="handleTableChange">
+        </a-table>
+      </div>
+      <!-- table鍖哄煙-end -->
+    </a-card>
+  </a-modal>
+</template>
+
+<script>
+import JDictSelectTag from '@/components/dict/JDictSelectTag'
+import { getAction } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import JInput from '@/components/jeecg/JInput'
+import JEllipsis from '@/components/jeecg/JEllipsis'
+import Tooltip from 'ant-design-vue/es/tooltip'
+import JDate from '@/components/jeecg/JDate'
+import { filterObj } from '@/utils/util'
+
+export default {
+  name: 'ToolsModal',
+  mixins: [JeecgListMixin],
+  components: {
+    JDictSelectTag,
+    JEllipsis,
+    JInput,
+    Tooltip,
+    JDate
+  },
+  props: {
+    status: {
+      type: Number,
+      default: 1
+    }
+  },
+  data() {
+    return {
+      disableSubmit:false,
+      title: '',
+      visible: false,
+      disableMixinCreated: true,
+      queryParam: {},
+      columns: [{
+        title: '宸ュ叿缂栫爜',
+        align: 'center',
+        dataIndex: 'toolCode'
+      },
+        {
+          title: '宸ュ叿绫诲瀷',
+          align: 'center',
+          dataIndex: 'applicationType_dictText'
+        },
+        // {
+        //   title: '宸ュ叿缂栧彿',
+        //   align: 'center',
+        //   dataIndex: 'toolId'
+        // },
+        {
+          title: '涓枃鍚嶇О',
+          align: 'center',
+          dataIndex: 'chineseName'
+        },
+        {
+          title: '宸ュ叿鍙傛暟鏍囪瘑',
+          align: 'center',
+          dataIndex: 'paramaTableName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          align: 'center',
+          dataIndex: 'toolModel'
+        },
+        {
+          title: '涓昏閲忓崟浣�',
+          align: 'center',
+          dataIndex: 'mainUnit'
+        }
+      ],
+      url: {
+        list: '/tms/baseTools/listWithSharpedAndConfig'
+      }
+
+    }
+  },
+  created() {
+
+  },
+  methods: {
+    showModals() {
+      this.selectedRowKeys = []
+      this.visible = true
+      this.loadData(1)
+    },
+    getQueryParams() {
+      //鑾峰彇鏌ヨ鏉′欢
+      let sqp = {}
+      if (this.superQueryParams) {
+        sqp['superQueryParams'] = encodeURI(this.superQueryParams)
+        sqp['superQueryMatchType'] = this.superQueryMatchType
+      }
+      var param = Object.assign(sqp, this.queryParam)
+      // param.field = this.getQueryField();
+      param.pageNo = this.ipagination.current
+      param.pageSize = this.ipagination.pageSize
+      return filterObj(param)
+    },
+    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) {
+
+          this.dataSource = res.result.records || res.result
+          if (res.result.total) {
+            this.ipagination.total = res.result.total
+          } else {
+            this.ipagination.total = 0
+          }
+
+        } else {
+          // this.$message.warning(res.message)
+          this.$notification.warning({
+            message: '娑堟伅',
+            description: res.message
+          })
+        }
+      }).finally(() => {
+        this.loading = false
+      })
+    },
+    getQueryField() {
+      //TODO 瀛楁鏉冮檺鎺у埗
+      // var str = "";
+      // this.columns.forEach(function (value) {
+      //   str +=  value.dataIndex +"," ;
+      // });
+      // return str;
+    },
+    modalFormOk(val) {
+      // 鏂板/淇敼 鎴愬姛鏃讹紝閲嶈浇鍒楄〃
+      this.loadData()
+      this.selectedRowKeys = [val.id]
+    },
+    searchQuery() {
+      this.loadData()
+      this.onClearSelected()
+    },
+    searchReset() {
+      this.queryParam = {}
+      this.loadData()
+      this.onClearSelected()
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+    },
+    handleCancel() {
+      this.close()
+    },
+    handleOk() {
+      this.$bus.$emit('selectionRows', this.selectionRows)
+      this.close()
+    },
+  }
+}
+</script>
+<style>
+@import '~@assets/less/common.less';
+
+.frozenRowClass {
+  color: #c9c9c9;
+}
+
+.success {
+  color: green;
+}
+
+.error {
+  color: red;
+}
+</style>
diff --git a/src/views/tms/requirement/modules/ToolsSharpeningModal.vue b/src/views/tms/requirement/modules/ToolsSharpeningModal.vue
new file mode 100644
index 0000000..9346322
--- /dev/null
+++ b/src/views/tms/requirement/modules/ToolsSharpeningModal.vue
@@ -0,0 +1,286 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="1200"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    centered
+    :visible="visible"
+    :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">
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-model-item prop="standardCode" label="宸ュ叿缂栧彿">
+              <a-input-search v-model="model.toolId" placeholder="璇烽�夋嫨宸ュ叿缂栧彿" :disabled="disableSubmit"
+                              @search="selectTools" enter-button
+              />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item prop="classify_id" label="宸ュ叿鍒嗙被缂栫爜">
+              <a-input placeholder="璇疯緭鍏ュ伐鍏峰垎绫诲悕绉�" v-model="model.classifyId" readOnly :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-model-item prop="paramaTableName" label="宸ュ叿鍙傛暟鏍囪瘑">
+              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" readOnly v-model="model.paramaTableName" readOnly
+                       :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="宸ュ叿绫诲瀷">
+              <a-input placeholder="閫夋嫨璁惧鍚庤嚜鍔ㄥ甫鍑�" v-model="model.applicationType" readOnly
+                       :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-model-item prop="responsiblePerson" label="璐d换浜�">
+              <j-dict-select-tag type="list" v-model="model.responsiblePerson" dictCode="sys_user,realname,id"
+                                 placeholder="璇烽�夋嫨璐d换浜�" :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="鍒冪(鏃堕棿" prop="sharpeningTime">
+              <j-date placeholder="璇烽�夋嫨鍒冪(鏃堕棿" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.sharpeningTime"
+                      style="width: 100%" :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-model-item label="鍒冪(缁撴灉鍙婂缓璁�" prop="sharpeningResult">
+              <a-textarea placeholder="閫夋嫨濉啓鍒冪(缁撴灉鍙婂缓璁�" v-model="model.sharpeningResult"
+                          :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="鍨嬪彿/鍥惧彿">
+              <a-input placeholder="閫夋嫨濉啓鍨嬪彿/鍥惧彿" v-model="model.toolModel" :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-model-item label="浠撳簱鍩庡競" prop="inspectionDate">
+              <a-input placeholder="閫夋嫨濉啓浠撳簱鐪佷唤鍩庡競" v-model="model.provinceCity" readOnly
+                       :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="搴撳尯/搴撳彿">
+              <a-input placeholder="閫夋嫨濉啓搴撳尯/搴撳彿" v-model="model.warehouseId" readOnly :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-model-item label="瀛樺偍浣嶇疆" prop="storageLocation">
+              <a-input placeholder="閫夋嫨濉啓瀛樺偍浣嶇疆" v-model="model.positionCode" readOnly
+                       :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="璁¢噺涓诲崟浣�">
+              <a-input placeholder="璇峰~鍐欒閲忎富鍗曚綅" v-model="model.mainUnit" readOnly :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-model-item label="瀛樺偍浣嶇疆" prop="storageLocation">
+              <a-input placeholder="閫夋嫨濉啓瀛樺偍浣嶇疆" v-model="model.positionCode" readOnly
+                       :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="澶囨敞">
+              <a-textarea v-model="model.remark" rows="3" placeholder="璇疯緭鍏ュ娉�" :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+    <template slot="footer">
+      <a-button :style="{ marginRight: '8px' }" @click="handleCancel()">
+        鍏抽棴
+      </a-button>
+
+      <a-button @click="handleOk()" :disabled="disableSubmit" type="primary" :loading="confirmLoading">纭畾</a-button>
+    </template>
+    <tools-modal ref="toolListModel"></tools-modal>
+
+
+  </j-modal>
+</template>
+
+<script>
+import { getAction, postAction, requestPut } from '@/api/manage'
+import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
+import ToolsModal from '@views/tms/requirement/modules/ToolsModal.vue'
+
+export default {
+  name: 'ToolsSharpeningModal',
+  mixins: [JVxeTableModelMixin],
+  components: {
+    ToolsModal
+  },
+  data() {
+    return {
+      title: '鎿嶄綔',
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 6 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 15 }
+      },
+      confirmLoading: false,
+      spinning: false,
+      disabled: false,
+      disableSubmit: false,
+      validatorRules: {
+
+        sharpeningTime: [
+          { required: true, message: '璇烽�夋嫨鍒冪(鏃ユ湡!' }
+        ],
+        responsiblePerson: [
+          { required: true, message: '璇烽�夋嫨璐d换浜�!' }
+        ],
+        sharpeningResult: [
+          { required: true, message: '璇疯緭鍏ュ垉纾ㄧ粨鏋滃強寤鸿!' }
+        ]
+      },
+      url: {
+        add: '/tms/toolSharpening/add',
+        edit: '/tms/toolSharpening/edit',
+        queryDetailList: '/tms/toolSharpening/listToolSharpening'
+      }
+    }
+  },
+  created() {
+  },
+  mounted() {
+    this.$bus.$on('selectionRows', (data) => {
+      console.log('selectionRows', data)
+      if (data && data.length > 0) {
+        const item = data[0]
+        // 浣跨敤 $set 纭繚 model 鐨勫睘鎬ф槸鍝嶅簲寮忕殑
+        this.$set(this.model, 'toolId', item.toolCode)
+        this.$set(this.model, 'toolCode', item.id)
+        this.$set(this.model, 'classifyId', item.classifyId)
+        this.$set(this.model, 'paramaTableName', item.paramaTableName_dictText)
+        this.$set(this.model, 'applicationType', item.applicationType_dictText)
+        this.$set(this.model, 'toolModel', item.toolModel)
+        this.$set(this.model, 'provinceCity', item.provinceCity)
+        this.$set(this.model, 'warehouseId', item.warehouseId)
+        this.$set(this.model, 'positionCode', item.positionCode)
+        this.$set(this.model, 'mainUnit', item.mainUnit)
+      }
+    })
+
+  },
+  methods: {
+
+    selectTools: function() {
+      this.$refs.toolListModel.showModals()
+      this.$refs.toolListModel.title = '閫夋嫨宸ュ叿淇℃伅'
+      this.$refs.toolListModel.disableSubmit = false
+    },
+
+    add() {
+      this.addShow = false
+      this.edit()
+    },
+
+    edit(record) {
+      console.log(record)
+      // this.model = Object.assign({}, record)
+      this.visible = true
+      getAction(this.url.queryDetailList, {
+        id: record.id,
+        pageNo: 1,
+        pageSize: 99999
+      }).then((res) => {
+        if (res.success) {
+          const readOnlyData = res.result.records[0] || {}
+          this.model = Object.assign({}, this.model, {
+            paramaTableName: readOnlyData.paramaTableName_dictText,
+            applicationType: readOnlyData.applicationType_dictText,
+            provinceCity: readOnlyData.provinceCity,
+            warehouseId: readOnlyData.warehouseId,
+            positionCode: readOnlyData.positionCode,
+            mainUnit: readOnlyData.mainUnit,
+            toolModel: readOnlyData.toolModel
+          })
+
+        } else {
+          this.dataSource = null
+        }
+      })
+    },
+    handleOk() {
+      const that = this
+      that.confirmLoading = true
+
+      // 鉁� 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          let formData = Object.assign(this.model)
+
+          let obj
+          if (!this.model.id) {
+            obj = postAction(this.url.add, formData)
+          } else {
+            obj = requestPut(this.url.edit, formData, { id: this.model.id })
+          }
+
+          obj.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 {
+          that.$message.warning('璇峰~鍐欏繀濉瓧娈�')
+          that.confirmLoading = false
+          return false
+        }
+      })
+    },
+
+    handleCancel() {
+      this.close()
+    },
+
+    close() {
+      this.$emit('close')
+      this.visible = false
+      this.$refs.form.clearValidate()
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/views/tms/stocktakingBound/ToolsStocktaKingBoundDetail.vue b/src/views/tms/stocktakingBound/ToolsStocktaKingBoundDetail.vue
new file mode 100644
index 0000000..b6acfa5
--- /dev/null
+++ b/src/views/tms/stocktakingBound/ToolsStocktaKingBoundDetail.vue
@@ -0,0 +1,224 @@
+<template>
+  <a-card :bordered="false">
+    <div>
+      <a-table ref="table" size="middle" bordered rowKey="id" :scroll="{ x: true }" :columns="columns"
+        :dataSource="dataSource" :pagination="ipagination" :loading="loading" @change="handleTableChange">
+        <span slot="num" slot-scope="text, record" class="fontweight">
+          {{ record.num }}
+        </span>
+
+         </a-table>
+      <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index">
+      </template>
+    </div>
+  </a-card>
+</template>
+
+<script>
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { getAction } from '@/api/manage'
+import Tooltip from 'ant-design-vue/es/tooltip'
+export default {
+  name: "ToolsStocktaKingBoundDetail",
+  components: {
+    Tooltip,
+  },
+  mixins: [JeecgListMixin],
+  props: {
+    mainId: {
+      type: String,
+      default: '',
+      required: false
+    }
+  },
+  watch: {
+    mainId: {
+      immediate: true,
+      handler(val) {
+        if (!this.mainId) {
+          this.clearList()
+        } else {
+          this.queryParam['stocktakingBoundId'] = val;
+          this.queryParam['delFlag'] = 0;
+          this.loadData(1);
+        }
+      }
+    }
+  },
+  data() {
+    return {
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          },
+          width: 50
+        },
+
+
+        {
+          title: '鍒�鍏风紪鍙�',
+          dataIndex: 'toolCode',
+          align: 'center'
+        },
+        {
+          title: '宸ュ叿绫诲瀷',
+          dataIndex: 'applicationType_dictText',
+          align: 'center',
+
+        },
+
+        {
+          title: '涓枃鍚嶇О',
+          dataIndex: 'chineseName',
+          align: 'center'
+        },
+
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          align: 'center'
+        },
+        {
+          title: '鍒�鍏锋潗鏂�',
+          dataIndex: 'toolMaterial',
+          align: 'center'
+
+        },
+        {
+          title: '闆朵欢鏉愭枡',
+          dataIndex: 'partMaterial',
+          align: 'center'
+        },
+        {
+          title: '鍘傚',
+          dataIndex: 'supplierId',
+          align: 'center'
+
+        },
+        {
+          title: '瀛樺偍浣嶇疆(搴撲綅鍙�)',
+          dataIndex: 'goodsShelvesId',
+          align: 'center'
+        },
+
+        {
+          title: '璐﹂潰鏁伴噺',
+          dataIndex: 'bookQuantity',
+          align: 'center'
+
+        },
+        {
+          title: '鍙敤鏁伴噺',
+          dataIndex: 'availableQuantity',
+          align: 'center'
+
+        },
+        {
+          title: '瀹炵洏鏁伴噺',
+          dataIndex: 'practicalQuantity',
+          align: 'center'
+        },
+        {
+          title: '宸紓鍊�',
+          dataIndex: 'differenceValue',
+          align: 'center'
+        },
+        {
+          title: '鐩樹簭鐩樼泩',
+          dataIndex: 'surplusDeficit_dictText',
+          align: 'center'
+        },
+        {
+          title: '鐩樺簱鏃堕棿',
+          dataIndex: 'stocktakingDate',
+          align: 'center'
+        },
+        {
+          title: '澶囨敞',
+          dataIndex: 'remark',
+          align: 'center'
+        }
+      ],
+      url: {
+        list: "/tms/toolsStocktakingBound/listToolsStocktakingBoundControllerDetailsByMainId",
+      },
+      /* 鍒嗛〉鍙傛暟 */
+      ipagination: {
+        current: 1,
+        pageSize: 20,
+        pageSizeOptions: ['5', '10', '20', '50'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+    }
+  },
+  created() {
+  },
+  computed: {
+  },
+  methods: {
+    clearList() {
+      this.dataSource = []
+      this.selectedRowKeys = []
+      this.ipagination.current = 1
+    },
+    loadData(arg) {
+      if (!this.url.list) {
+        this.$message.error("璇疯缃畊rl.list灞炴��!")
+        return
+      }
+      //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
+      if (arg === 1) {
+        this.ipagination.current = 1;
+      }
+      var params = this.getQueryParams();//鏌ヨ鏉′欢
+      this.loading = true;
+      getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          this.dataSource = res.result.records || res.result;
+          if (res.result.total) {
+            this.ipagination.total = res.result.total;
+          } else {
+            this.ipagination.total = 0;
+          }
+          //update-end---author:zhangyafei    Date:20201118  for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------
+        } else {
+          this.$message.warning(res.message)
+        }
+      }).finally(() => {
+        this.loading = false
+      })
+    },
+
+
+  }
+}
+</script>
+<style lang="less" scoped>
+@import '~@assets/less/common.less';
+
+.fontweight {
+  font-weight: bold;
+}
+
+/deep/ .frozenRowClass {
+  color: #c9c9c9;
+}
+
+.success {
+  color: green;
+}
+
+.error {
+  color: red;
+}
+</style>
diff --git a/src/views/tms/stocktakingBound/ToolsStocktakingBoundList.vue b/src/views/tms/stocktakingBound/ToolsStocktakingBoundList.vue
new file mode 100644
index 0000000..b4e6153
--- /dev/null
+++ b/src/views/tms/stocktakingBound/ToolsStocktakingBoundList.vue
@@ -0,0 +1,322 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鐩樼偣鍗曞彿">
+              <j-input placeholder="璇疯緭鍏ョ洏鐐瑰崟鍙�" v-model="queryParam.orderCode"></j-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="缁忔墜浜�">
+              <j-dict-select-tag dictCode="sys_user,realname,id" placeholder="璇烽�夋嫨缁忔墜浜�" v-model="queryParam.handler"
+                                  />
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 鏌ヨ鍖哄煙-END -->
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
+
+
+<!--      <a-dropdown v-if="selectedRowKeys.length > 0">-->
+<!--        <a-menu slot="overlay">-->
+<!--          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item>-->
+<!--        </a-menu>-->
+<!--        <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button>-->
+<!--      </a-dropdown>-->
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <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"
+        class="j-table-force-nowrap"
+        :scroll="{x:true}"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection='{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }' :customRow='clickThenSelect'
+        @change="handleTabChange">
+
+
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleDetail(record)">璇︽儏</a>
+          <span v-if="record.approvalStatus === '1'">
+            <a-divider type="vertical" />
+            <a-popconfirm title="纭畾鎻愪氦鍚�?" @confirm="() => handleSubmit(record)">
+              <a>鎻愪氦</a>
+            </a-popconfirm>
+            <a-divider type="vertical" />
+            <a-dropdown>
+              <a class="ant-dropdown-link">鏇村<a-icon type="down" /></a>
+              <a-menu slot="overlay">
+                <a-menu-item>
+                  <a @click="handleEdit(record)">缂栬緫</a>
+                </a-menu-item>
+                <a-menu-item>
+                  <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                    <a>鍒犻櫎</a>
+                  </a-popconfirm>
+                </a-menu-item>
+              </a-menu>
+            </a-dropdown>
+          </span>
+        </span>
+      </a-table>
+      <a-tabs defaultActiveKey="1">
+        <!-- type="card" -->
+        <a-tab-pane tab='鐩樼偣鍗曟槑缁�' key="1">
+          <div class="table-operator" style="margin:-16px">
+            <tools-stockta-king-bound-detail ref="toolStockingBoundDetail"  :mainId='mainId' />
+          </div>
+        </a-tab-pane>
+
+      </a-tabs>
+    </div>
+
+
+    <tools-stocktaking-bound-modal
+      ref="modalForm"
+      @ok="modalFormOk"
+    ></tools-stocktaking-bound-modal>
+  </a-card>
+</template>
+
+<script>
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import ToolsStocktaKingBoundDetail from './ToolsStocktaKingBoundDetail.vue'
+import ToolsStocktakingBoundModal from './modules/ToolsStocktakingBoundModal'
+import '@/assets/less/TableExpand.less'
+import { deleteAction, getAction } from '@api/manage'
+
+export default {
+    name: "ToolsStocktakingBoundList",
+    mixins:[JeecgListMixin],
+    components: {
+      ToolsStocktakingBoundModal,
+      ToolsStocktaKingBoundDetail
+    },
+    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: 'orderCode'
+          },
+          {
+            title:'缁忔墜浜�',
+            align:"center",
+            dataIndex: 'handler_dictText'
+          },
+          {
+            title:'瀹℃牳浜�',
+            align:"center",
+            dataIndex: 'reviewer_dictText'
+          },
+          {
+            title:'鐩樼偣鍚嶇О',
+            align:"center",
+            dataIndex: 'stocktakingName'
+          },
+          {
+            title:'澶囨敞',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'瀹℃牳鐘舵��',
+            align:"center",
+            dataIndex: 'approvalStatus_dictText'
+
+          },
+          {
+            title:'瀹℃牳鎰忚',
+            align:"center",
+            dataIndex: 'approvalOpinion'
+          },
+          {
+            title:'鐩樼偣鏃堕棿',
+            align:"center",
+            dataIndex: 'inventoryTime'
+          },
+          {
+            title: '鎿嶄綔',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+        url: {
+          list: "/tms/toolsStocktakingBound/list",
+          submit:"/tms/toolsStocktakingBound/submit",
+          delete: "/tms/toolsStocktakingBound/delete",
+          deleteBatch: "/tms/toolsStocktakingBound/deleteBatch",
+          exportXlsUrl: "/tms/toolsStocktakingBound/exportXls",
+          importExcelUrl: "tms/toolsStocktakingBound/importExcel",
+
+        },
+        dictOptions:{},
+        mainId: '',
+        superFieldList:[],
+        selectedMainId: '',
+      }
+    },
+    created() {
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      }
+    },
+    methods: {
+      clickThenSelect(record) {
+        return {
+          on: {
+            click: () => {
+              this.onSelectChange(record.id.split(','), [record])
+            }
+          }
+        }
+      },
+      onClearSelected() {
+        this.selectedRowKeys = []
+        this.selectionRows = []
+
+        this.selectedMainId = ''
+      },
+      onSelectChange(selectedRowKeys, selectionRows) {
+        if (selectedRowKeys.length == 1) {
+          this.mainId = selectionRows[0]['id']
+        } else {
+          this.mainId = ''
+        }
+        this.selectedRowKeys = selectedRowKeys
+        this.selectionRows = selectionRows
+      },
+      handleTabChange(pagination, filters, sorter) {
+        this.selectedRowKeys = []
+        this.$refs.toolStockingBoundDetail.dataSource = []
+        this.handleTableChange(pagination, filters, sorter)
+      },
+      handleDelete: function (id) {
+        if (!this.url.delete) {
+          this.$message.error('璇疯缃畊rl.delete灞炴��!')
+          return
+        }
+        deleteAction(this.url.delete, { id: id }).then((res) => {
+          if (res.success) {
+            //閲嶆柊璁$畻鍒嗛〉闂
+            this.reCalculatePage(1)
+            this.$message.success(res.message)
+            this.$refs.toolStockingBoundDetail.dataSource = []
+            this.loadData()
+          } else {
+            this.$message.warning(res.message)
+          }
+        })
+      },
+      handleSubmit(record) {
+        getAction(this.url.submit,{ id: record.id }).then((res)=>{
+          if (res.success) {
+
+            this.$message.success(res.message);
+            this.loadData();
+            this.$refs.toolStockingBoundDetail.clearList()
+          } else {
+            this.$message.warning(res.message);
+          }
+        })
+      },
+      searchQuery() {
+        this.selectedRowKeys = [];
+        this.$refs.toolStockingBoundDetail.loadData();
+        this.$refs.toolStockingBoundDetail.selectedRowKeys = [];
+        this.loadData();
+      },
+      searchReset() {
+        this.queryParam = {}
+        this.selectedRowKeys = []
+        this.$refs.toolStockingBoundDetail.dataSource = []
+        this.loadData();
+      },
+      modalFormOk() {
+        this.queryParam = {}
+        this.selectedRowKeys = []
+        this.$refs.toolStockingBoundDetail.dataSource = []
+        this.loadData();
+      },
+
+      handleEdit: function (record) {
+
+        console.log('record:', record)
+        this.$refs.modalForm.title = '缂栬緫'
+        this.$refs.modalForm.disableSubmit = false
+        this.$refs.modalForm.edit(record)
+
+      },
+      handleDetail:function(record){
+
+        this.$refs.modalForm.title="璇︽儏";
+        this.$refs.modalForm.disableSubmit = true;
+        this.$refs.modalForm.edit(record);
+      },
+      handleAdd: function () {
+        this.$refs.modalForm.disableSubmit = false
+        this.$refs.modalForm.title = "鏂板宸ュ叿鐢宠鍗�";
+        this.$refs.modalForm.add();
+
+        console.log(this.$refs.modalForm.title);
+
+      },
+
+
+      initDictConfig(){
+      },
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/stocktakingBound/modules/ToolSelectorModal.vue b/src/views/tms/stocktakingBound/modules/ToolSelectorModal.vue
new file mode 100644
index 0000000..eed4078
--- /dev/null
+++ b/src/views/tms/stocktakingBound/modules/ToolSelectorModal.vue
@@ -0,0 +1,216 @@
+<template>
+  <!--鏀寔鍏ㄥ睆缂╂斁-->
+  <a-modal :visible='visible' :title='title' switchFullscreen @ok='handleSubmit' @cancel='close' style='top:50px'
+           cancelText='鍏抽棴' :width='1500'>
+    <a-card :bordered='false'>
+      <div class='table-page-search-wrapper'>
+        <a-form layout='inline' @keyup.enter.native='searchQuery'>
+          <a-row :gutter='24'>
+            <a-col :md='8' :sm='6'>
+              <a-form-item label='宸ュ叿缂栫爜'>
+                <j-input placeholder='璇疯緭鍏ュ伐鍏风紪鐮�' v-model='queryParam.toolCode' />
+              </a-form-item>
+            </a-col>
+            <a-col :md='3'>
+              <span style='float: left;overflow: hidden;' class='table-page-search-submitButtons'>
+                <a-button type='primary' @click='searchQuery' icon='search'>鏌ヨ</a-button>
+                <a-button @click='searchReset' icon='reload' style='margin-left: 10px'>閲嶇疆</a-button>
+              </span>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <a-table ref='table' :scroll='scrollTrigger' size='middle' rowKey='id' bordered :columns='columns'
+               :dataSource='dataSource' :pagination='ipagination' :rowSelection='rowSelection' :loading='loading'
+               @change='handleTableChange'>
+
+      </a-table>
+    </a-card>
+  </a-modal>
+</template>
+
+<script>
+import { filterObj } from '@/utils/util'
+import { getAction } from '@/api/manage'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+export default {
+  name: 'ToolSelectorModal',
+  mixins: [JeecgListMixin],
+  components: {},
+  props: {},
+  data() {
+    return {
+      queryParam: {},
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: (_, __, index) => parseInt(index) + 1
+        },
+        {
+          title: '宸ュ叿缂栫爜',
+          align: 'center',
+          dataIndex: 'toolCode'
+        },
+        {
+          title: '涓枃鍚嶇О',
+          align: 'center',
+          dataIndex: 'chineseName'
+        },
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          align: 'center',
+          dataIndex: 'toolModel'
+        }
+      ],
+      selectedRowKeys: [],
+      oldSelectRows: [],
+      scrollTrigger: {},
+      dataSource: [],
+      selectionRows: [],
+      title: '鏍规嵁鏌ヨ缁撴灉閫夋嫨宸ュ叿',
+      ipagination: {
+        current: 1,
+        pageSize: 10,
+        pageSizeOptions: ['5', '10', '30', '50', '100'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+      isorter: {
+        column: 'createTime',
+        order: 'desc'
+      },
+      visible: false,
+      loading: false,
+      url: {
+        list: '/tms/baseTools/listWithLedgerAndConfig'
+      }
+    }
+  },
+  computed: {
+    rowSelection() {
+      return {
+        type: 'checkbox',
+        onChange: (selectedRowKeys, selectedRows) => {
+          this.selectedRowKeys = selectedRowKeys
+          this.onSelectChange(selectedRows)
+        },
+        getCheckboxProps: record => ({
+          props: {
+            disabled: record.distable
+          }
+        }),
+        selectedRowKeys: this.selectedRowKeys
+      }
+    }
+  },
+
+  methods: {
+
+    async loadData(arg) {
+      if (arg === 1) {
+        this.ipagination.current = 1
+      }
+      let that = this
+      this.loading = true
+      let params = this.getQueryParams()//鏌ヨ鏉′欢
+      await getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          for (let i = 0; i < res.result.records.length; i++) {
+            if (that.oldSelectRows.indexOf(res.result.records[i].id) > -1) {
+              res.result.records[i].distable = true
+            } else {
+              res.result.records[i].distable = false
+            }
+          }
+          this.dataSource = res.result.records
+          this.ipagination.total = res.result.total
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false
+      })
+    },
+
+    showModals(oldSelectRows) {
+      this.selectionRows = []
+      this.oldSelectRows = oldSelectRows
+      this.visible = true
+      this.loadData(1)
+    },
+    getQueryParams() {
+      let param = Object.assign({}, this.queryParam, this.isorter)
+      param.field = this.getQueryField()
+      param.pageNo = this.ipagination.current
+      param.pageSize = this.ipagination.pageSize
+      return filterObj(param)
+    },
+    //鏌ヨ鏉′欢澶勭悊
+    getQueryField() {
+      let str = 'id,'
+      for (let a = 0; a < this.columns.length; a++) {
+        str += ',' + this.columns[a].dataIndex
+      }
+      return str
+    },
+    searchReset(num) {
+      let that = this
+      this.queryParam = []
+      if (num !== 0) {
+        that.loadData(1)
+      }
+      that.selectborrowIds = []
+    },
+    close() {
+      this.searchReset(0)
+      this.selectedRowKeys = []
+      this.visible = false
+    },
+    handleTableChange(pagination, filters, sorter) {
+      //TODO 绛涢��
+
+      if (Object.keys(sorter).length > 0) {
+        this.isorter.column = sorter.field
+        this.isorter.order = 'ascend' === sorter.order ? 'asc' : 'desc'
+      }
+      this.ipagination = pagination
+      this.loadData()
+    },
+    handleSubmit() {
+      this.$bus.$emit('selectionRows', this.selectionRows)
+      // this.searchReset(0)
+      this.close()
+    },
+    onSelectChange(selectionRows) {
+      this.selectionRows = selectionRows
+    },
+    searchQuery() {
+      this.loadData(1)
+    }
+  }
+}
+</script>
+
+<style scoped>
+.ant-table-tbody .ant-table-row td {
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+
+#components-layout-demo-custom-trigger .trigger {
+  font-size: 18px;
+  line-height: 64px;
+  padding: 0 24px;
+  cursor: pointer;
+  transition: color 0.3s;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/stocktakingBound/modules/ToolsStocktakingBoundModal.vue b/src/views/tms/stocktakingBound/modules/ToolsStocktakingBoundModal.vue
new file mode 100644
index 0000000..d0d4230
--- /dev/null
+++ b/src/views/tms/stocktakingBound/modules/ToolsStocktakingBoundModal.vue
@@ -0,0 +1,515 @@
+<template>
+  <a-modal :title="title" :width="1500" :height="1500" :visible="visible" :maskClosable="false" @ok="handleOk"
+           cancelText="鍏抽棴"
+           @cancel="handleCancel" :confirmLoading="confirmLoading">
+
+    <a-spin :spinning="confirmLoading">
+      <a-form :form="form">
+        <a-row>
+          <a-col :span="12">
+            <a-form-model-item label="鐩樼偣鍗曞彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderCode">
+              <a-input :disabled="true" v-model="model.orderCode" placeholder="绯荤粺鑷姩鐢熸垚"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="鐩樼偣绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalStatus">
+              <j-dict-select-tag dictCode="stocktakingType" placeholder="璇烽�夋嫨鐩樼偣绫诲瀷" v-model="model.stocktakingType"
+                                 :disabled="disableSubmit"></j-dict-select-tag>
+            </a-form-model-item>
+          </a-col>
+
+
+          <a-col :span="12">
+            <a-form-model-item label="鐩樼偣鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="stocktakingName">
+              <a-input v-model="model.stocktakingName" placeholder="璇疯緭鍏ョ洏鐐瑰悕绉�"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="瀹℃牳浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="reviewer">
+              <j-select-user-by-dep :disabled="disableSubmit" v-model="model.reviewer" :store="'username'"
+                                    :text="'realname'" :multi="false" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="鐩樼偣鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inventoryTime">
+              <j-date placeholder="璇烽�夋嫨鐩樼偣鏃堕棿" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.inventoryTime"
+                      style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+
+          <a-col :span="12">
+            <a-form-model-item v-show="addShow" label="缁忔墜浜�" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="handler">
+              <j-dict-select-tag dictCode="sys_user,realname,id" placeholder="璇烽�夋嫨缁忔墜浜�" v-model="model.handler"
+                                 :disabled="disableSubmit" />
+            </a-form-model-item>
+          </a-col>
+
+          <a-col :span="12">
+            <a-form-model-item v-show="addShow" label="瀹℃牳鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="approvalStatus">
+              <j-dict-select-tag dictCode="approval_status" placeholder="璇烽�夋嫨瀹℃牳鐘舵��" v-model="model.approvalStatus"
+                                 :disabled="true"></j-dict-select-tag>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item v-show="addShow" label="瀹℃牳鎰忚" :labelCol="labelCol" :wrapperCol="wrapperCol"
+                               prop="approvalOpinion">
+              <a-input v-model="model.approvalOpinion" placeholder="璇疯緭鍏ュ鏍告剰瑙�" type="textarea"
+                       :disabled="model.approvalStatus==1"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item  v-show="addShow" label="瀹℃牳鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inventoryTime">
+              <j-date placeholder="璇烽�夋嫨瀹℃牳鏃堕棿" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.approvalDate"
+                      style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+
+          <a-col :span="12">
+            <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
+              <a-input v-model="model.remark" placeholder="璇疯緭鍏ュ娉�" type="textarea"></a-input>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form>
+    </a-spin>
+    <a-button type="primary" :style="{ marginRight: '8px', marginBottom: '8px' }" :loading="confirmLoading"
+              :disabled="disableSubmit" @click="selectTools()">宸ュ叿鏄庣粏
+    </a-button>
+    <a-table ref="table" bordered size="middle" rowKey="id" :columns="columns" :dataSource="dataSource"
+             :scroll="{x:true}">
+      <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index">
+        <a-input-number :disabled="disableSubmit" :value="text" v-if="col.dataIndex == 'practicalQuantity'" :min="0"
+                        :max="99999"
+                        @change="(e) => handleChange(e, record.key, col, index)" style="width: 100%;" />
+        <a-input-number :value="text" v-if="col.dataIndex == 'differenceValue'" :min="0" :max="99999"
+                        :disabled="true" @change="(e) => handleChange(e, record.key, col, index)"
+                        style="width: 100%;" />
+        <j-dict-select-tag :value="text" v-if="col.dataIndex == 'surplusDeficit'"
+                           dictCode="surplusDeficit"
+                           :disabled="true"
+                           style="width: 100%;"
+                           @change="(e) => handleChange(e, record.key, col, index)" />
+        <!--        <j-dict-select-tag :value="text" v-if="col.dataIndex == 'classifyId'"-->
+        <!--                           dictCode="tms_tools_classify,type_name,id"-->
+        <!--                           style="width: 100%;"-->
+        <!--                           :disabled="true"-->
+        <!--                           @change="(e) => handleChange(e, record.key, col, index)" />-->
+        <j-date
+          :value="text"
+          v-if="col.dataIndex == 'stocktakingDate'"
+          placeholder="閫夋嫨鐩樺簱鏃堕棿"
+          @change="(e) => handleChange(e, record.key, col, index)"
+          style="width: 100%;"
+        />
+
+        <a-textarea
+          v-if="col.dataIndex == 'remark'"
+          :disabled="disableSubmit"
+          style="margin: -5px 0"
+          :value="text"
+          @change="(e) => handleChange(e.target.value, record.key, col, index)"
+        />
+
+      </template>
+
+      <span slot="action" slot-scope="text, record, index">
+        <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(text, record, index)">
+          <a :disabled="disableSubmit">鍒犻櫎</a>
+        </a-popconfirm>
+      </span>
+    </a-table>
+    <template slot="footer">
+      <a-button :style="{ marginRight: '8px' }" @click="handleCancel()">
+        鍏抽棴
+      </a-button>
+
+      <a-button @click="handleOk()" :disabled="disableSubmit" type="primary" :loading="confirmLoading">纭畾</a-button>
+    </template>
+    <tool-selector-modal ref="toolsModalForm"></tool-selector-modal>
+  </a-modal>
+
+</template>
+
+<script>
+import { getAction, postAction, requestPut } from '@/api/manage'
+import JMultiSelectTag from '@/components/dict/JMultiSelectTag'
+import Tooltip from 'ant-design-vue/es/tooltip'
+import ToolSelectorModal from '@views/tms/stocktakingBound/modules/ToolSelectorModal.vue'
+
+export default {
+  name: 'ToolsStocktakingBoundModal',
+  components: {
+    ToolSelectorModal,
+    JMultiSelectTag,
+    Tooltip
+  },
+  data() {
+
+    return {
+      addShow: true,
+      model: {},
+      formDisabled: false,
+      pagination: {
+        current: 1,
+        pageSize: 10,
+        total: 0
+      },
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          },
+          width: 50
+        },
+        {
+          title: '鍒�鍏风紪鍙�',
+          dataIndex: 'toolCode',
+          align: 'center',
+          width: 150
+        },
+
+        {
+          title: '宸ュ叿绫诲瀷',
+          dataIndex: 'applicationType',
+          align: 'center',
+          width: 150
+        },
+        {
+          title: '璐﹂潰搴撳瓨',
+          width: 150,
+          dataIndex: 'bookQuantity',
+          align: 'center'
+
+        },
+        {
+          title: '鍙敤鏁伴噺',
+          width: 150,
+          dataIndex: 'availableQuantity',
+          align: 'center'
+
+        },
+        {
+          title: '瀹炵洏鏁伴噺',
+          dataIndex: 'practicalQuantity',
+          align: 'center',
+          width: 150,
+          scopedSlots: { customRender: 'practicalQuantity' }
+        },
+        {
+          title: '宸紓鍊�',
+          dataIndex: 'differenceValue',
+          align: 'center',
+          width: 150,
+          scopedSlots: { customRender: 'differenceValue' }
+        },
+
+        {
+          title: '鐩樹簭鐩樼泩',
+          width: 150,
+          dataIndex: 'surplusDeficit',
+          align: 'center',
+          scopedSlots: { customRender: 'surplusDeficit' }
+        },
+
+        {
+          title: '鐩樺簱鏃堕棿',
+          width: 150,
+          dataIndex: 'stocktakingDate',
+          align: 'center',
+          scopedSlots: { customRender: 'stocktakingDate' }
+        },
+        {
+          title: '澶囨敞',
+          width: 150,
+          dataIndex: 'remark',
+          align: 'center',
+          scopedSlots: { customRender: 'remark' }
+        },
+        {
+          title: '涓枃鍚嶇О',
+          dataIndex: 'chineseName',
+          width: 150,
+          align: 'center'
+        },
+
+        {
+          title: '鍨嬪彿/鍥惧彿',
+          dataIndex: 'toolModel',
+          width: 150,
+          align: 'center'
+        },
+
+        {
+          title: '鍒�鍏锋潗鏂�',
+          width: 150,
+          dataIndex: 'toolMaterial',
+          align: 'center'
+        },
+        {
+          title: '闆朵欢鏉愭枡',
+          width: 150,
+          dataIndex: 'partMaterial',
+          align: 'center'
+        },
+        {
+          title: '鍘傚',
+          width: 150,
+          dataIndex: 'supplierId',
+          align: 'center'
+
+        },
+        {
+          title: '瀛樺偍浣嶇疆',
+          width: 150,
+          dataIndex: 'goodsShelvesId',
+          align: 'center'
+
+        },
+
+
+        {
+          title: '鎿嶄綔',
+          width: 150,
+          dataIndex: 'action',
+          scopedSlots: { customRender: 'action' },
+          align: 'center'
+        }
+      ],
+      title: '鎿嶄綔',
+      visible: false,
+      disableSubmit: false,
+      codeDisable: true,
+
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 6 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 18 }
+      },
+      confirmLoading: false,
+      form: this.$form.createForm(this),
+      validatorRules: {
+        orderCode: [
+          { required: true, message: '璇疯緭鍏ョ洏鐐瑰崟鍙�!' }
+        ],
+        handler: [
+          { required: true, message: '璇疯緭鍏ョ粡鎵嬩汉!' }
+        ],
+        stocktakingName: [
+          { required: true, message: '璇疯緭鍏ョ洏鐐瑰悕绉�!' }
+        ],
+        approvalStatus: [
+          { required: true, message: '璇疯緭鍏ュ鏍哥姸鎬�!' }
+        ],
+        inventoryTime: [
+          { required: true, message: '璇疯緭鍏ョ洏鐐规椂闂�!' }
+        ]
+      },
+      url: {
+        add: '/tms/toolsStocktakingBound/add',
+        edit: '/tms/toolsStocktakingBound/edit',
+        queryDetailList: '/tms/toolsStocktakingBound/listToolsStocktakingBoundControllerDetailsByMainId'
+
+      },
+      dataSource: []
+    }
+  },
+
+  mounted() {
+    this.$bus.$on('selectionRows', (data) => {
+      for (let i = 0; i < data.length; i++) {
+        this.dataSource.push({
+          toolId: data[i].id,
+          toolCode: data[i].toolCode,
+          classifyId: data[i].classifyId,
+          applicationType: data[i].applicationType_dictText,
+          chineseName: data[i].chineseName,
+          toolModel: data[i].toolModel,
+          material: data[i].material,
+          toolMaterial: data[i].toolMaterial,
+          partMaterial: data[i].partMaterial,
+          bookQuantity: data[i].totalCount,
+          supplierId: data[i].supplierId,
+          goodsShelvesId: data[i].positionCode
+        })
+      }
+    })
+  },
+
+  methods: {
+    selectTools: function() {
+      let ids = []
+      for (let i = 0; i < this.dataSource.length; i++) {
+        ids.push(this.dataSource[i].partId)
+      }
+      this.$refs.toolsModalForm.showModals(ids)
+      this.$refs.toolsModalForm.title = '閫夋嫨宸ュ叿淇℃伅'
+      this.$refs.toolsModalForm.disableSubmit = false
+    },
+    add() {
+      this.addShow = false
+      this.edit()
+    },
+
+    edit(record) {
+      console.log(record)
+      console.log(this.auditFlag)
+      this.form.resetFields()
+      this.model = Object.assign({}, record)
+      this.visible = true
+      getAction(this.url.queryDetailList, {
+        stocktakingBoundId: record.id,
+        pageNo: 1,
+        pageSize: 99999
+      }).then((res) => {
+        if (res.success) {
+          console.log(res.result.records)
+          this.dataSource = res.result.records
+        } else {
+          this.dataSource = null
+        }
+      })
+    },
+
+
+
+    close() {
+      this.$emit('close')
+      this.visible = false
+    },
+
+    handleCancel() {
+      this.model = {}
+      this.dataSource = []
+      this.close()
+    },
+
+    handleOk() {
+      const that = this
+      let data = that.dataSource
+      for (let i = 0; i < data.length; i++) {
+        if (data[i].practicalQuantity == undefined || data[i].practicalQuantity == null || data[i].practicalQuantity == '') {
+          that.$message.warning('璇疯緭鍏ョ' + (i + 1) + '琛岀殑瀹炵洏鏁伴噺鏁版嵁锛�')
+          return false
+        }
+      }
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true
+          let formData = Object.assign(this.model, values)
+          if (that.dataSource.length === 0) {
+            that.$message.warning('璇烽�夋嫨宸ュ叿锛�')
+            that.confirmLoading = false
+            return
+          }
+          formData.toolsStocktakingBoundDetailList = that.dataSource
+          // formData.status = '0';
+          let obj
+          if (!this.model.id) {
+            obj = postAction(this.url.add, formData)
+          } else {
+            obj = requestPut(this.url.edit, formData, { id: this.model.id })
+          }
+          obj.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
+          })
+        }
+      })
+    },
+
+    handleDelete(text, record, index) {
+      this.dataSource.splice(index, 1)
+    },
+
+    handleChange(value, key, column, index) {
+      let that = this
+      const temp = [...that.dataSource]
+      const target = temp.filter(item => key === item.key)[index]
+      if (target) {
+        // if (column.dataIndex == 'practicalQuantity') {
+        //   target[column.dataIndex] = value
+        // }
+        if (column.dataIndex === 'practicalQuantity') {
+          target[column.dataIndex] = value
+
+          // 璁$畻宸紓鍊�
+          target.differenceValue = value - target.availableQuantity
+
+          // 鏍规嵁宸紓鍊煎垽鏂洏浜忕洏鐩�
+          if (target.differenceValue > 0) {
+            target.surplusDeficit = 1
+          } else if (target.differenceValue < 0) {
+            target.surplusDeficit = 2
+          } else {
+            target.surplusDeficit = 0
+          }
+        }
+        if (column.dataIndex == 'differenceValue') {
+          target[column.dataIndex] = value
+        }
+        if (column.dataIndex == 'classifyId') {
+          target[column.dataIndex] = value
+        }
+        if (column.dataIndex == 'surplusDeficit') {
+          target[column.dataIndex] = value  // 鍋囪 value 鏄瓧绗︿覆鏍煎紡鐨勬棩鏈�
+        }
+        if (column.dataIndex == 'stocktakingDate') {
+          target[column.dataIndex] = value  // 鍋囪 value 鏄瓧绗︿覆鏍煎紡鐨勬棩鏈�
+        }
+        if (column.dataIndex === 'remark') {
+          // 娉ㄦ剰杩欓噷浣跨敤鐨勬槸 e.target.value
+          target[column.dataIndex] = value
+        }
+
+        that.dataSource = temp
+      }
+    }
+  }
+
+}
+</script>
+
+<style lang="less" scoped>
+.frozenRowClass {
+  color: #c9c9c9;
+}
+
+.fontweight {
+  font-weight: bold;
+}
+
+.ant-btn {
+  padding: 0 10px;
+  margin-left: 3px;
+}
+
+.ant-form-item-control {
+  line-height: 0px;
+}
+
+/** 涓昏〃鍗曡闂磋窛 */
+.ant-form .ant-form-item {
+  margin-bottom: 10px;
+}
+
+/** Tab椤甸潰琛岄棿璺� */
+.ant-tabs-content .ant-form-item {
+  margin-bottom: 0px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/tms/storeEarlyWarning/ToolsStoreEarlyWarningList.vue b/src/views/tms/storeEarlyWarning/ToolsStoreEarlyWarningList.vue
new file mode 100644
index 0000000..189bab2
--- /dev/null
+++ b/src/views/tms/storeEarlyWarning/ToolsStoreEarlyWarningList.vue
@@ -0,0 +1,315 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item
+              label="宸ュ叿缂栧彿"
+              :labelCol="{span: 5}"
+              :wrapperCol="{span: 18, offset: 1}"
+            >
+              <a-input
+                placeholder="璇疯緭鍏ュ伐鍏风紪鐮佹绱�"
+                v-model="queryParam.toolCode"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item
+              label="鍘傚"
+              :labelCol="{span: 5}"
+              :wrapperCol="{span: 18, offset: 1}"
+            >
+              <a-input
+                placeholder="璇疯緭鍏ュ巶瀹舵绱�"
+                v-model="queryParam.supplierId"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item
+              label="鏉愯川"
+              :labelCol="{span: 5}"
+              :wrapperCol="{span: 18, offset: 1}"
+            >
+              <a-input
+                placeholder="璇疯緭鍏ユ潗璐ㄦ绱�"
+                v-model="queryParam.toolMaterial"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item
+              label="鍒�鍏疯鏍�"
+              :labelCol="{span: 5}"
+              :wrapperCol="{span: 18, offset: 1}"
+            >
+              <a-input
+                placeholder="璇疯緭鍏ュ垁鍏疯鏍兼绱�"
+                v-model="queryParam.toolModel"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 鏌ヨ鍖哄煙-END -->
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+<!--      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>-->
+<!--      <a-button type="primary" icon="download" @click="handleExportXls('tms_store_early warning')">瀵煎嚭</a-button>-->
+<!--      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">-->
+<!--        <a-button type="primary" icon="import">瀵煎叆</a-button>-->
+<!--      </a-upload>-->
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <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"
+        :scroll="{x:true}"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        :rowClassName="setRowClassName"
+        @change="handleTableChange">
+
+        <template slot="htmlSlot" slot-scope="text">
+          <div v-html="text"></div>
+        </template>
+        <template slot="imgSlot" slot-scope="text,record">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span>
+          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span>
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)">
+            涓嬭浇
+          </a-button>
+        </template>
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">缂栬緫</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a @click="handleDetail(record)">璇︽儏</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                  <a>鍒犻櫎</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+
+    <tools-store-early-warning-modal ref="modalForm" @ok="modalFormOk"></tools-store-early-warning-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import ToolsStoreEarlyWarningModal from './modules/ToolsStoreEarlyWarningModal.vue'
+
+  export default {
+    name: 'TmsStoreEarlyWarningList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      ToolsStoreEarlyWarningModal
+    },
+    data () {
+      return {
+        description: 'tms_store_early warning绠$悊椤甸潰',
+        // 琛ㄥご
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'缂栫爜',
+            align:"center",
+            dataIndex: 'classifyId'
+          },
+          {
+            title:'鍚嶇О',
+            align:"center",
+            dataIndex: 'toolName'
+          },
+          {
+            title:'宸ュ叿绫诲瀷',
+            align:"center",
+            dataIndex: 'toolType'
+          },
+          {
+            title:'瑙勬牸',
+            align:"center",
+            dataIndex: 'toolModel'
+          },
+          {
+            title:'鏉愯川',
+            align:"center",
+            dataIndex: 'materialName'
+          },
+          {
+            title:'瀛樺偍浣嶇疆',
+            align:"center",
+            dataIndex: 'goodsShelvesId'
+          },
+          {
+            title:'鍘傚',
+            align:"center",
+            dataIndex: 'supplierId'
+          },
+          {
+            title:'搴撳瓨涓婇檺',
+            align:"center",
+            dataIndex: 'highestInventory'
+          },
+          {
+            title:'搴撳瓨涓嬮檺',
+            align:"center",
+            dataIndex: 'lowerInventory'
+          },
+          {
+            title:'鎬诲簱瀛樻暟閲�',
+            align:"center",
+            dataIndex: 'totalCount'
+          },
+          {
+            title:'鍙敤搴撳瓨鏁伴噺',
+            align:"center",
+            dataIndex: 'availableQuantity'
+          },
+          {
+            title:'鐘舵��;',
+            align:"center",
+            dataIndex: 'status'
+          },
+          {
+            title:'澶囨敞',
+            align:"center",
+            dataIndex: 'remark'
+          },
+        ],
+        url: {
+          list: "tms/toolsStoreEarlyWarning/list",
+          delete: "tms/toolsStoreEarlyWarning/delete",
+          deleteBatch: "tools/tmsStoreEarlyWarning/deleteBatch",
+          exportXlsUrl: "tools/tmsStoreEarlyWarning/exportXls",
+          importExcelUrl: "toolsStoreEarlyWarning/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      setRowClassName(record,index){
+
+        //鍒ゆ柇骞惰繑鍥炶鐨勬牱寮忓悕绉�
+        if(record){
+          return "bg-blue"
+        }
+      },
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'string',value:'toolCode',text:'缂栫爜',dictCode:''})
+        fieldList.push({type:'string',value:'toolName',text:'鍚嶇О',dictCode:''})
+        fieldList.push({type:'string',value:'toolType',text:'宸ュ叿绫诲瀷',dictCode:''})
+        fieldList.push({type:'string',value:'toolModel',text:'瑙勬牸',dictCode:''})
+        fieldList.push({type:'string',value:'supplierId',text:'鏉愯川',dictCode:''})
+        fieldList.push({type:'string',value:'goodsShelvesId',text:'瀛樺偍浣嶇疆',dictCode:''})
+        fieldList.push({type:'string',value:'toolModel',text:'鍨嬪彿/鍥惧彿',dictCode:''})
+        fieldList.push({type:'string',value:'supplierId',text:'鍘傚',dictCode:''})
+        fieldList.push({type:'string',value:'toolMaterial',text:'鏉愯川',dictCode:''})
+        fieldList.push({type:'string',value:'totalCount',text:'鎬诲簱瀛樻暟閲�',dictCode:''})
+        fieldList.push({type:'string',value:'availableQuantity',text:'鍙敤搴撳瓨鏁伴噺',dictCode:''})
+        fieldList.push({type:'BigDecimal',value:'lowerInventory',text:'搴撳瓨涓嬮檺',dictCode:''})
+        fieldList.push({type:'string',value:'highestInventory',text:'搴撳瓨涓婇檺',dictCode:''})
+        fieldList.push({type:'string',value:'status',text:'鐘舵��;',dictCode:''})
+        fieldList.push({type:'string',value:'remark',text:'澶囨敞',dictCode:''})
+        fieldList.push({type:'string',value:'tenantId',text:'绉熸埛鍙�',dictCode:''})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+  ::v-deep .bg-blue{
+
+    background-color:#C1194E;
+
+  }
+</style>
diff --git a/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningForm.vue b/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningForm.vue
new file mode 100644
index 0000000..88ead07
--- /dev/null
+++ b/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningForm.vue
@@ -0,0 +1,221 @@
+<template>
+  <a-spin :spinning="confirmLoading">
+    <j-form-container :disabled="formDisabled">
+      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
+        <a-row>
+          <a-col :span="8">
+            <a-form-model-item label="鍒嗙被缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="classifyId">
+              <a-input v-model="model.classifyId" placeholder="璇疯緭鍏ュ垎绫荤紪鍙�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="涓枃鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="chineseName">
+              <a-input v-model="model.chineseName" placeholder="璇疯緭鍏ヤ腑鏂囧悕绉�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="鑻辨枃鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="foreignLanguageName">
+              <a-input v-model="model.foreignLanguageName" placeholder="璇疯緭鍏ヨ嫳鏂囧悕绉�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="宸ュ叿绫诲瀷;1.閫氱敤
+2.涓撶敤" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="applicationType">
+              <a-input v-model="model.applicationType" placeholder="璇疯緭鍏ュ伐鍏风被鍨�;1.閫氱敤
+2.涓撶敤"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="鏍囧噯绾у埆" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardLevel">
+              <a-input v-model="model.standardLevel" placeholder="璇疯緭鍏ユ爣鍑嗙骇鍒�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="鏍囧噯鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode">
+              <a-input v-model="model.standardCode" placeholder="璇疯緭鍏ユ爣鍑嗗彿"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="鍨嬪彿/鍥惧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toolModel">
+              <a-input v-model="model.toolModel" placeholder="璇疯緭鍏ュ瀷鍙�/鍥惧彿"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="鍘傚" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="supplierId">
+              <a-input v-model="model.supplierId" placeholder="璇疯緭鍏ュ巶瀹�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="浠撳簱鐪佷唤鍩庡競" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="provinceCity">
+              <a-input v-model="model.provinceCity" placeholder="璇疯緭鍏ヤ粨搴撶渷浠藉煄甯�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="搴撳尯/搴撳彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="warehouseId">
+              <a-input v-model="model.warehouseId" placeholder="璇疯緭鍏ュ簱鍖�/搴撳彿"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="搴撲綅鍙�;鐢卞簱鍖�+灞�+鎺�+鍒楃粍鎴愶紝鍙互鏄涓簱浣嶅彿浠ヨ嫳鏂囩偣鍙峰垎鍓茬殑瀛楃涓层��" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="positionCode">
+              <a-input v-model="model.positionCode" placeholder="璇疯緭鍏ュ簱浣嶅彿;鐢卞簱鍖�+灞�+鎺�+鍒楃粍鎴愶紝鍙互鏄涓簱浣嶅彿浠ヨ嫳鏂囩偣鍙峰垎鍓茬殑瀛楃涓层��"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="瀛樺偍浣嶇疆锛堝亸閭d釜鍘傚尯鐨勫簱锛�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="storageLocation">
+              <a-input v-model="model.storageLocation" placeholder="璇疯緭鍏ュ瓨鍌ㄤ綅缃紙鍋忛偅涓巶鍖虹殑搴擄級"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="璁¢噺涓诲崟浣�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="mainUnit">
+              <a-input v-model="model.mainUnit" placeholder="璇疯緭鍏ヨ閲忎富鍗曚綅"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="璁¢噺杈呭崟浣�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="auxiliaryUnit">
+              <a-input v-model="model.auxiliaryUnit" placeholder="璇疯緭鍏ヨ閲忚緟鍗曚綅"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="璁¢噺涓诲崟浣嶆暟閲�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="mainCount">
+              <a-input v-model="model.mainCount" placeholder="璇疯緭鍏ヨ閲忎富鍗曚綅鏁伴噺"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="璁¢噺杈呭崟浣嶆暟閲�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="auxiliaryCount">
+              <a-input v-model="model.auxiliaryCount" placeholder="璇疯緭鍏ヨ閲忚緟鍗曚綅鏁伴噺"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="鏄惁鏈夎閲忚緟鍗曚綅;1,鏈夎緟鍔╁崟浣�2.鏃犺緟鍔╁崟浣�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="auxiliaryUnitFlag">
+              <a-input v-model="model.auxiliaryUnitFlag" placeholder="璇疯緭鍏ユ槸鍚︽湁璁¢噺杈呭崟浣�;1,鏈夎緟鍔╁崟浣�2.鏃犺緟鍔╁崟浣�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="鍗曚环" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="price">
+              <a-input-number v-model="model.price" placeholder="璇疯緭鍏ュ崟浠�" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="鏈�浣庡簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lowerInventory">
+              <a-input-number v-model="model.lowerInventory" placeholder="璇疯緭鍏ユ渶浣庡簱瀛�" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="鏈�楂樺簱瀛�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="highestInventory">
+              <a-input v-model="model.highestInventory" placeholder="璇疯緭鍏ユ渶楂樺簱瀛�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="鐘舵��;1.鍚敤
+2.鏈惎鐢�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="status">
+              <a-input v-model="model.status" placeholder="璇疯緭鍏ョ姸鎬�;1.鍚敤
+2.鏈惎鐢�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
+              <a-input v-model="model.remark" placeholder="璇疯緭鍏ュ娉�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="8">
+            <a-form-model-item label="绉熸埛鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="tenantId">
+              <a-input v-model="model.tenantId" placeholder="璇疯緭鍏ョ鎴峰彿"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </j-form-container>
+  </a-spin>
+</template>
+
+<script>
+
+  import { httpAction, getAction } from '@/api/manage'
+  import { validateDuplicateValue } from '@/utils/util'
+
+  export default {
+    name: 'TmsStoreEarlyWarningForm',
+    components: {
+    },
+    props: {
+      //琛ㄥ崟绂佺敤
+      disabled: {
+        type: Boolean,
+        default: false,
+        required: false
+      }
+    },
+    data () {
+      return {
+        model:{
+         },
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+        confirmLoading: false,
+        validatorRules: {
+           classifyId: [
+              { required: true, message: '璇疯緭鍏ュ垎绫荤紪鍙�!'},
+           ],
+        },
+        url: {
+          add: "/org.jeecg.modules.tms/tmsStoreEarlyWarning/add",
+          edit: "/org.jeecg.modules.tms/tmsStoreEarlyWarning/edit",
+          queryById: "/org.jeecg.modules.tms/tmsStoreEarlyWarning/queryById"
+        }
+      }
+    },
+    computed: {
+      formDisabled(){
+        return this.disabled
+      },
+    },
+    created () {
+       //澶囦唤model鍘熷鍊�
+      this.modelDefault = JSON.parse(JSON.stringify(this.model));
+    },
+    methods: {
+      add () {
+        this.edit(this.modelDefault);
+      },
+      edit (record) {
+        this.model = Object.assign({}, record);
+        this.visible = true;
+      },
+      submitForm () {
+        const that = this;
+        // 瑙﹀彂琛ㄥ崟楠岃瘉
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            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');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+            })
+          }
+
+        })
+      },
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningModal.vue b/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningModal.vue
new file mode 100644
index 0000000..b92d194
--- /dev/null
+++ b/src/views/tms/storeEarlyWarning/modules/ToolsStoreEarlyWarningModal.vue
@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴">
+    <tms-store-early-warning-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></tms-store-early-warning-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import TmsStoreEarlyWarningForm from './ToolsStoreEarlyWarningForm.vue'
+  export default {
+    name: 'TmsStoreEarlyWarningModal',
+    components: {
+      TmsStoreEarlyWarningForm
+    },
+    data () {
+      return {
+        title:'',
+        width:1024,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        })
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/src/views/user/Login.vue b/src/views/user/Login.vue
index e7d4f86..13e478f 100644
--- a/src/views/user/Login.vue
+++ b/src/views/user/Login.vue
@@ -163,9 +163,13 @@
         // this.$router.push({ path: "/isps/userAnnouncement" }).catch(() => {
         //   console.log('鐧诲綍璺宠浆棣栭〉鍑洪敊,杩欎釜閿欒浠庡摢閲屾潵鐨�')
         // })
+
         this.$router.push({ path: '/dashboard/analysis' }).catch(() => {
           console.log('鐧诲綍璺宠浆棣栭〉鍑洪敊,杩欎釜閿欒浠庡摢閲屾潵鐨�')
         })
+
+        if(this.$route.query.redirect.split('/')[1] === 'terminal') return
+
         this.$notification.success({
           message: '娆㈣繋',
           description: `${timeFix()}锛屾杩庡洖鏉
@@ -181,7 +185,6 @@
                 duration: 60,
                 icon: <a-icon type = 'exclamation-circle'style = 'color:red' / >,
             })
-
             }
           }
         })

--
Gitblit v1.9.3