From 24e235a318ae5bf11f35c339ad9187ab896334b8 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期一, 29 七月 2024 15:16:31 +0800
Subject: [PATCH] 1、隐藏首页,进入系统后跳转至设备监控页面 2、调整用户管理编辑及显示字段 3、增加设备车间管理页面

---
 src/views/system/modules/SelectDeviceModal.vue                     |  231 ++++
 /dev/null                                                          |  372 -------
 src/views/system/UserList.vue                                      |  239 ++++
 src/views/system/modules/UserModal.vue                             |  848 +++++++++++-----
 public/index.html                                                  |    2 
 src/components/tools/Logo.vue                                      |    4 
 src/views/user/Login.vue                                           |    2 
 src/views/dashboard/Analysis.vue                                   |   20 
 src/views/system/ProductionManager.vue                             |  647 +++++++++++++
 src/views/system/modules/ProductionManager/ProductionEquipment.vue |  331 ++++++
 src/views/system/modules/ProductionManager/ProductionModal.vue     |  181 +++
 11 files changed, 2,177 insertions(+), 700 deletions(-)

diff --git a/public/index.html b/public/index.html
index a58c86b..f42bfe6 100644
--- a/public/index.html
+++ b/public/index.html
@@ -220,7 +220,7 @@
     }
     /* 婊氬姩鏉′紭鍖� start */
     ::-webkit-scrollbar{
-      width:8px;
+      width:0;
       height:8px;
     }
     ::-webkit-scrollbar-track{
diff --git a/src/components/tools/Logo.vue b/src/components/tools/Logo.vue
index 7808fba..d0fb089 100644
--- a/src/components/tools/Logo.vue
+++ b/src/components/tools/Logo.vue
@@ -32,8 +32,8 @@
       // 鐐瑰嚮Logo璺宠浆鍦板潃
       routerLinkTo: {
         type: Object,
-        default: () => ({name: 'dashboard'}),
-      },
+        default: () => ({ name: 'mdc-base-DeviceBaseInfo' })
+      }
     }
   }
 </script>
diff --git a/src/views/dashboard/Analysis.vue b/src/views/dashboard/Analysis.vue
index 2e16b22..1b9ab1c 100644
--- a/src/views/dashboard/Analysis.vue
+++ b/src/views/dashboard/Analysis.vue
@@ -1,30 +1,16 @@
 <template>
   <div>
-    <index-chart v-if="indexStyle==1"></index-chart>
-    <index-bdc v-if="indexStyle==2"></index-bdc>
-    <index-task v-if="indexStyle==3"></index-task>
-    <div style="width: 100%;text-align: right;margin-top: 20px">
-      璇烽�夋嫨棣栭〉鏍峰紡锛�
-      <a-radio-group v-model="indexStyle">
-        <a-radio :value="1">缁熻鍥捐〃</a-radio>
-        <a-radio :value="2">缁熻鍥捐〃2</a-radio>
-        <a-radio :value="3">浠诲姟琛ㄦ牸</a-radio>
-      </a-radio-group>
-    </div>
+
   </div>
 </template>
 
 <script>
-  import IndexChart from './IndexChart'
-  import IndexTask from "./IndexTask"
-  import IndexBdc from './IndexBdc'
+
 
   export default {
     name: "Analysis",
     components: {
-      IndexChart,
-      IndexTask,
-      IndexBdc
+
     },
     data() {
       return {
diff --git a/src/views/dashboard/IndexBdc.vue b/src/views/dashboard/IndexBdc.vue
deleted file mode 100644
index fa8edea..0000000
--- a/src/views/dashboard/IndexBdc.vue
+++ /dev/null
@@ -1,519 +0,0 @@
-<template>
-  <div class="page-header-index-wide">
-    <a-row :gutter="24">
-      <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
-        <chart-card :loading="loading" title="鍙楃悊閲�" :total="cardCount.sll | NumberFormat">
-          <a-tooltip title="鎸囨爣璇存槑" slot="action">
-            <a-icon type="info-circle-o" />
-          </a-tooltip>
-          <div>
-            <mini-area :data-source="chartData.sll" />
-          </div>
-          <template slot="footer">浠婃棩鍙楃悊閲忥細<span>{{ todaySll }}</span></template>
-        </chart-card>
-      </a-col>
-      <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
-        <chart-card :loading="loading" title="鍔炵粨閲�" :total="cardCount.bjl | NumberFormat">
-          <a-tooltip title="鎸囨爣璇存槑" slot="action">
-            <a-icon type="info-circle-o" />
-          </a-tooltip>
-          <div>
-            <mini-area :data-source="chartData.bjl"/>
-          </div>
-          <template slot="footer">浠婃棩鍔炵粨閲忥細<span>{{ todayBjl }}</span></template>
-        </chart-card>
-      </a-col>
-      <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
-        <chart-card :loading="loading" title="鐢ㄦ埛鍙楃悊閲�" :total="cardCount.isll | NumberFormat">
-          <a-tooltip title="鎸囨爣璇存槑" slot="action">
-            <a-icon type="info-circle-o" />
-          </a-tooltip>
-          <div>
-            <mini-bar :datasource="chartData.isll" :height="50"/>
-          </div>
-          <template slot="footer">鐢ㄦ埛浠婃棩鍙楃悊閲忥細<span>{{ todayISll }}</span></template>
-        </chart-card>
-      </a-col>
-      <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
-        <chart-card :loading="loading" title="鐢ㄦ埛鍔炵粨閲�" :total="cardCount.ibjl | NumberFormat">
-          <a-tooltip title="鎸囨爣璇存槑" slot="action">
-            <a-icon type="info-circle-o" />
-          </a-tooltip>
-          <div>
-            <mini-bar :datasource="chartData.ibjl" :height="50"/>
-          </div>
-          <template slot="footer">鐢ㄦ埛浠婃棩鍔炵粨閲忥細<span>{{ todayIBjl }}</span></template>
-        </chart-card>
-      </a-col>
-    </a-row>
-
-    <a-card :loading="loading" :bordered="false" :body-style="{padding: '0'}">
-      <div class="salesCard">
-        <a-tabs default-active-key="1" size="large" :tab-bar-style="{marginBottom: '24px', paddingLeft: '16px'}">
-          <div class="extra-wrapper" slot="tabBarExtraContent">
-            <div class="extra-item">
-              <a>浠婃棩</a>
-              <a>鏈懆</a>
-              <a>鏈湀</a>
-              <a>鏈勾</a>
-            </div>
-            <a-range-picker :style="{width: '256px'}" />
-          </div>
-
-          <a-tab-pane loading="true" tab="鍙楃悊鐩戠" key="1">
-            <a-row>
-              <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24">
-                <index-bar title="鍙楃悊閲忕粺璁�" />
-              </a-col>
-              <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
-
-                <a-card title="蹇�熷紑濮� / 渚挎嵎瀵艰埅" style="margin-bottom: 24px" :bordered="false" :body-style="{padding: 0}">
-                  <div class="item-group">
-                    <a-row>
-                      <a-col :class="'more-btn'" :span="12" v-for="(item,index) in registerTypeList" :key=" 'registerType'+index ">
-                        <a-button @click="goPage(index)" style="margin-bottom:10px" size="small" type="primary" ghost>{{ item.text }}</a-button>
-                      </a-col>
-                    </a-row>
-                  </div>
-                </a-card>
-
-              </a-col>
-            </a-row>
-          </a-tab-pane>
-
-          <a-tab-pane tab="浜や簰鐩戠" key="2">
-            <a-row>
-              <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24">
-                <bar-multid :sourceData="jhjgData" :fields="jhjgFields" title="骞冲彴涓庨儴闂ㄤ氦浜掗噺缁熻"></bar-multid>
-              </a-col>
-              <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
-
-                <a-card title="蹇�熷紑濮� / 渚挎嵎瀵艰埅" style="margin-bottom: 24px" :bordered="false" :body-style="{padding: 0}">
-                  <div class="item-group">
-                    <a-row>
-                      <a-col :class="'more-btn'" :span="12" v-for="(item,index) in registerTypeList" :key=" 'registerType'+index ">
-                        <a-button @click="goPage(index)" style="margin-bottom:10px" size="small" type="primary" ghost>{{ item.text }}</a-button>
-                      </a-col>
-                    </a-row>
-                  </div>
-                </a-card>
-
-              </a-col>
-            </a-row>
-          </a-tab-pane>
-
-          <a-tab-pane tab="瀛樺偍鐩戠" key="4">
-            <a-row>
-              <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24">
-                <a-row>
-                  <template v-if="diskInfo && diskInfo.length>0">
-                    <a-col :span="12" v-for="(item,index) in diskInfo" :key=" 'diskInfo'+index ">
-                      <dash-chart-demo :title="item.name" :datasource="item.restPPT"></dash-chart-demo>
-                    </a-col>
-                  </template>
-                </a-row>
-              </a-col>
-
-              <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
-
-                <a-card title="蹇�熷紑濮� / 渚挎嵎瀵艰埅" style="margin-bottom: 24px" :bordered="false" :body-style="{padding: 0}">
-                  <div class="item-group">
-                    <a-row>
-                      <a-col :class="'more-btn'" :span="10" v-for="(item,index) in registerTypeList" :key=" 'registerType'+index ">
-                        <a-button @click="goPage(index)" style="margin-bottom:10px" size="small" type="primary" ghost>{{ item.text }}</a-button>
-                      </a-col>
-                    </a-row>
-                  </div>
-                </a-card>
-
-              </a-col>
-            </a-row>
-          </a-tab-pane>
-
-        </a-tabs>
-
-      </div>
-    </a-card>
-
-    <a-row :gutter="12">
-      <a-card :loading="loading" :class="{ 'anty-list-cust':true }" :bordered="false" :style="{ marginTop: '24px' }">
-
-        <a-tabs v-model="indexBottomTab" size="large" :tab-bar-style="{marginBottom: '24px', paddingLeft: '16px'}">
-          <div class="extra-wrapper" slot="tabBarExtraContent">
-            <a-radio-group v-model="indexRegisterType" @change="changeRegisterType">
-              <a-radio-button value="杞Щ鐧昏">杞Щ鐧昏</a-radio-button>
-              <a-radio-button value="鎶垫娂鐧昏">鎶垫娂鐧昏</a-radio-button>
-              <a-radio-button value="">鎵�鏈�</a-radio-button>
-            </a-radio-group>
-          </div>
-
-          <a-tab-pane loading="true" tab="涓氬姟娴佺▼闄愭椂鐩戠" key="1">
-
-            <a-table :dataSource="dataSource1" size="default" rowKey="id" :columns="columns" :pagination="ipagination1" @change="tableChange1">
-              <template slot="flowRate" slot-scope="text, record, index">
-                <a-progress :strokeColor="getPercentColor(record.flowRate)" :format="getPercentFormat" :percent="getFlowRateNumber(record.flowRate)" style="width:80px" />
-              </template>
-            </a-table>
-          </a-tab-pane>
-
-          <a-tab-pane loading="true" tab="涓氬姟鑺傜偣闄愭椂鐩戠" key="2">
-            <a-table :dataSource="dataSource2" size="default" rowKey="id" :columns="columns2" :pagination="ipagination2" @change="tableChange2">
-              <template slot="flowRate" slot-scope="text, record, index">
-                <span style="color: red;">{{ record.flowRate }}灏忔椂</span>
-              </template>
-            </a-table>
-          </a-tab-pane>
-
-        </a-tabs>
-
-
-      </a-card>
-    </a-row>
-
-  </div>
-</template>
-
-<script>
-
-  import ACol from "ant-design-vue/es/grid/Col"
-  import ATooltip from "ant-design-vue/es/tooltip/Tooltip"
-  import ChartCard from '@/components/ChartCard'
-  import MiniBar from '@/components/chart/MiniBar'
-  import MiniArea from '@/components/chart/MiniArea'
-  import IndexBar from '@/components/chart/IndexBar'
-  import BarMultid from '@/components/chart/BarMultid'
-  import DashChartDemo from '@/components/chart/DashChartDemo'
-
-  const jhjgData = [
-    { type: '鎴跨', '1鏈�': 900, '2鏈�': 1120, '3鏈�': 1380, '4鏈�': 1480, '5鏈�': 1450, '6鏈�': 1100, '7鏈�':1300, '8鏈�':900,'9鏈�':1000 ,'10鏈�':1200 ,'11鏈�':600 ,'12鏈�':900 },
-    { type: '绋庡姟', '1鏈�':1200, '2鏈�': 1500, '3鏈�': 1980, '4鏈�': 2000, '5鏈�': 1000, '6鏈�': 600, '7鏈�':900, '8鏈�':1100,'9鏈�':1300 ,'10鏈�':2000 ,'11鏈�':900 ,'12鏈�':1100 },
-    { type: '涓嶅姩浜�', '1鏈�':2000, '2鏈�': 1430, '3鏈�': 1300, '4鏈�': 1400, '5鏈�': 900, '6鏈�': 500, '7鏈�':600, '8鏈�':1000,'9鏈�':600 ,'10鏈�':1000 ,'11鏈�':1500 ,'12鏈�':1200 }
-  ]
-
-  const jhjgFields=[
-    '1鏈�','2鏈�','3鏈�','4鏈�','5鏈�','6鏈�',
-    '7鏈�','8鏈�','9鏈�','10鏈�','11鏈�','12鏈�'
-  ]
-
-  const xljgData = [
-    {type:'涓�鏈�',"鎴跨":1.12,"绋庡姟":1.55,"涓嶅姩浜�":1.2},
-    {type:'浜屾湀',"鎴跨":1.65,"绋庡姟":1.32,"涓嶅姩浜�":1.42},
-    {type:'涓夋湀',"鎴跨":1.85,"绋庡姟":1.1,"涓嶅姩浜�":1.5},
-
-    {type:'鍥涙湀',"鎴跨":1.33,"绋庡姟":1.63,"涓嶅姩浜�":1.4},
-    {type:'浜旀湀',"鎴跨":1.63,"绋庡姟":1.8,"涓嶅姩浜�":1.7},
-    {type:'鍏湀',"鎴跨":1.85,"绋庡姟":1.98,"涓嶅姩浜�":1.8},
-
-    {type:'涓冩湀',"鎴跨":1.98,"绋庡姟":1.5,"涓嶅姩浜�":1.76},
-    {type:'鍏湀',"鎴跨":1.48,"绋庡姟":1.2,"涓嶅姩浜�":1.3},
-    {type:'涔濇湀',"鎴跨":1.41,"绋庡姟":1.9,"涓嶅姩浜�":1.6},
-
-    {type:'鍗佹湀',"鎴跨":1.1,"绋庡姟":1.1,"涓嶅姩浜�":1.4},
-    {type:'鍗佷竴鏈�',"鎴跨":1.85,"绋庡姟":1.6,"涓嶅姩浜�":1.5},
-    {type:'鍗佷簩鏈�',"鎴跨":1.5,"绋庡姟":1.4,"涓嶅姩浜�":1.3}
-  ]
-  const xljgFields=["鎴跨","绋庡姟","涓嶅姩浜�"]
-
-  const dataCol1 = [{
-    title: '涓氬姟鍙�',
-    align:"center",
-    dataIndex: 'reBizCode'
-  },{
-    title: '涓氬姟绫诲瀷',
-    align:"center",
-    dataIndex: 'type'
-  },{
-    title: '鍙楃悊浜�',
-    align:"center",
-    dataIndex: 'acceptBy'
-  },{
-    title: '鍙楃悊鏃堕棿',
-    align:"center",
-    dataIndex: 'acceptDate'
-  },{
-    title: '褰撳墠鑺傜偣',
-    align:"center",
-    dataIndex: 'curNode'
-  },{
-    title: '鍔炵悊鏃堕暱',
-    align:"center",
-    dataIndex: 'flowRate',
-    scopedSlots: { customRender: 'flowRate' }
-  }];
-  const dataSource1=[
-    {reBizCode:"1",type:"杞Щ鐧昏",acceptBy:'寮犱笁',acceptDate:"2019-01-22",curNode:"浠诲姟鍒嗘淳",flowRate:60},
-    {reBizCode:"2",type:"鎶垫娂鐧昏",acceptBy:'鏉庡洓',acceptDate:"2019-01-23",curNode:"棰嗗瀹℃牳",flowRate:30},
-    {reBizCode:"3",type:"杞Щ鐧昏",acceptBy:'鐜嬫',acceptDate:"2019-01-25",curNode:"浠诲姟澶勭悊",flowRate:20},
-    {reBizCode:"4",type:"杞Щ鐧昏",acceptBy:'璧垫ゼ',acceptDate:"2019-11-22",curNode:"閮ㄩ棬瀹℃牳",flowRate:80},
-    {reBizCode:"5",type:"杞Щ鐧昏",acceptBy:'閽卞氨',acceptDate:"2019-12-12",curNode:"浠诲姟鍒嗘淳",flowRate:90},
-    {reBizCode:"6",type:"杞Щ鐧昏",acceptBy:'瀛欏惂',acceptDate:"2019-03-06",curNode:"浠诲姟澶勭悊",flowRate:10},
-    {reBizCode:"7",type:"鎶垫娂鐧昏",acceptBy:'鍛ㄥぇ',acceptDate:"2019-04-13",curNode:"浠诲姟鍒嗘淳",flowRate:100},
-    {reBizCode:"8",type:"鎶垫娂鐧昏",acceptBy:'鍚翠簩',acceptDate:"2019-05-09",curNode:"浠诲姟涓婃姤",flowRate:50},
-    {reBizCode:"9",type:"鎶垫娂鐧昏",acceptBy:'閮戠埥',acceptDate:"2019-07-12",curNode:"浠诲姟澶勭悊",flowRate:63},
-    {reBizCode:"20",type:"鎶垫娂鐧昏",acceptBy:'鏋楁湁',acceptDate:"2019-12-12",curNode:"浠诲姟鎵撳洖",flowRate:59},
-    {reBizCode:"11",type:"杞Щ鐧昏",acceptBy:'鐮佷簯',acceptDate:"2019-09-10",curNode:"浠诲姟绛炬敹",flowRate:87},
-  ]
-
-  const dataCol2 = [{
-    title: '涓氬姟鍙�',
-    align:"center",
-    dataIndex: 'reBizCode'
-  },{
-    title: '鍙楃悊浜�',
-    align:"center",
-    dataIndex: 'acceptBy'
-  },{
-    title: '鍙戣捣鏃堕棿',
-    align:"center",
-    dataIndex: 'acceptDate'
-  },{
-    title: '褰撳墠鑺傜偣',
-    align:"center",
-    dataIndex: 'curNode'
-  },{
-    title: '瓒呮椂鏃堕棿',
-    align:"center",
-    dataIndex: 'flowRate',
-    scopedSlots: { customRender: 'flowRate' }
-  }];
-  const dataSource2=[
-    {reBizCode:"A001",type:"杞Щ鐧昏",acceptBy:'寮犲洓',acceptDate:"2019-01-22",curNode:"浠诲姟鍒嗘淳",flowRate:12},
-    {reBizCode:"A002",type:"鎶垫娂鐧昏",acceptBy:'鏉庡惂',acceptDate:"2019-01-23",curNode:"浠诲姟绛炬敹",flowRate:3},
-    {reBizCode:"A003",type:"杞Щ鐧昏",acceptBy:'鐜嬩笁',acceptDate:"2019-01-25",curNode:"浠诲姟澶勭悊",flowRate:24},
-    {reBizCode:"A004",type:"杞Щ鐧昏",acceptBy:'璧典簩',acceptDate:"2019-11-22",curNode:"閮ㄩ棬瀹℃牳",flowRate:10},
-    {reBizCode:"A005",type:"杞Щ鐧昏",acceptBy:'閽卞ぇ',acceptDate:"2019-12-12",curNode:"浠诲姟绛炬敹",flowRate:8},
-    {reBizCode:"A006",type:"杞Щ鐧昏",acceptBy:'瀛欏氨',acceptDate:"2019-03-06",curNode:"浠诲姟澶勭悊",flowRate:10},
-    {reBizCode:"A007",type:"鎶垫娂鐧昏",acceptBy:'鍛ㄦ檿',acceptDate:"2019-04-13",curNode:"閮ㄩ棬瀹℃牳",flowRate:24},
-    {reBizCode:"A008",type:"鎶垫娂鐧昏",acceptBy:'鍚存湁',acceptDate:"2019-05-09",curNode:"閮ㄩ棬瀹℃牳",flowRate:30},
-    {reBizCode:"A009",type:"鎶垫娂鐧昏",acceptBy:'閮戞',acceptDate:"2019-07-12",curNode:"浠诲姟鍒嗘淳",flowRate:1},
-    {reBizCode:"A0010",type:"鎶垫娂鐧昏",acceptBy:'鏋楃埥',acceptDate:"2019-12-12",curNode:"閮ㄩ棬瀹℃牳",flowRate:16},
-    {reBizCode:"A0011",type:"杞Щ鐧昏",acceptBy:'鐮佹ゼ',acceptDate:"2019-09-10",curNode:"閮ㄩ棬瀹℃牳",flowRate:7},
-  ]
-
-  export default {
-    name: "IndexBdc",
-    components: {
-      ATooltip,
-      ACol,
-      ChartCard,
-      MiniArea,
-      MiniBar,
-      DashChartDemo,
-      BarMultid,
-      IndexBar
-    },
-    data() {
-      return {
-        loading: true,
-        cardCount:{
-          sll:100,
-          bjl:87,
-          isll:15,
-          ibjl:9
-        },
-
-        todaySll:60,
-        todayBjl:54,
-        todayISll:13,
-        todayIBjl:7,
-
-        chartData:{
-          sll:[],
-          bjl:[],
-          isll:[],
-          ibjl:[]
-        },
-        jhjgFields,
-        jhjgData,
-
-        xljgData,
-        xljgFields,
-
-        diskInfo:[
-          {name:"C鐩�",restPPT:7},
-          {name:"D鐩�",restPPT:5}
-        ],
-
-        registerTypeList:[{
-          text:"涓氬姟鍙楃悊"
-        },{
-          text:"涓氬姟绠$悊"
-        },{
-          text:"鏂囦欢绠$悊"
-        },{
-          text:"淇℃伅鏌ヨ"
-        }],
-
-        dataSource1:[],
-        dataSource2:[],
-        columns:dataCol1,
-        columns2:dataCol2,
-        ipagination1:{
-          current: 1,
-          pageSize: 5,
-          pageSizeOptions: ['10', '20', '30'],
-          showTotal: (total, range) => {
-            return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
-          },
-          showQuickJumper: true,
-          showSizeChanger: true,
-          total: 0,
-
-        },
-        ipagination2:{
-          current: 1,
-          pageSize: 5,
-          pageSizeOptions: ['10', '20', '30'],
-          showTotal: (total, range) => {
-            return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�"
-          },
-          showQuickJumper: true,
-          showSizeChanger: true,
-          total: 0,
-        },
-        indexRegisterType:"杞Щ鐧昏",
-        indexBottomTab:"1"
-
-      }
-    },
-    methods:{
-      goPage(){
-        this.$message.success("鏍规嵁涓氬姟鑷澶勭悊璺宠浆椤甸潰!")
-      },
-      changeRegisterType(e){
-        this.indexRegisterType = e.target.value
-        if(this.indexBottomTab=="1"){
-          this.loadDataSource1()
-        }else{
-          this.loadDataSource2()
-        }
-      },
-      tableChange1(pagination){
-        this.ipagination1.current = pagination.current
-        this.ipagination1.pageSize = pagination.pageSize
-        this.queryTimeoutInfo()
-      },
-      tableChange2(pagination){
-        this.ipagination2.current = pagination.current
-        this.ipagination2.pageSize = pagination.pageSize
-        this.queryNodeTimeoutInfo()
-      },
-      getFlowRateNumber(value){
-        return Number(value)
-      },
-      getPercentFormat(value){
-        if(value==100){
-          return "瓒呮椂"
-        }else{
-          return value+"%"
-        }
-      },
-      getPercentColor(value){
-        let p = Number(value)
-        if(p>=90 && p<100){
-          return 'rgb(244, 240, 89)'
-        }else if(p>=100){
-          return 'red'
-        }else{
-          return 'rgb(16, 142, 233)'
-        }
-      },
-
-      loadDataSource1(){
-        this.dataSource1 = dataSource1.filter(item=>{
-          if(!this.indexRegisterType){
-            return true
-          }
-          return item.type==this.indexRegisterType
-        })
-      },
-      loadDataSource2(){
-        this.dataSource2 = dataSource2.filter(item=>{
-          if(!this.indexRegisterType){
-            return true
-          }
-          return item.type==this.indexRegisterType
-        })
-      }
-    },
-    created() {
-      this.loadDataSource1()
-      this.loadDataSource2()
-      setTimeout(() => {
-        this.loading = !this.loading
-      }, 1000)
-    }
-  }
-</script>
-
-<style lang="less" scoped>
-  .extra-wrapper {
-    line-height: 55px;
-    padding-right: 24px;
-
-    .extra-item {
-      display: inline-block;
-      margin-right: 24px;
-
-      a {
-        margin-left: 24px;
-      }
-    }
-  }
-
-  .item-group {
-    padding: 20px 0 8px 24px;
-    font-size: 0;
-    a {
-      color: rgba(0, 0, 0, 0.65);
-      display: inline-block;
-      font-size: 14px;
-      margin-bottom: 13px;
-      width: 25%;
-    }
-  }
-
-  .item-group {
-    .more-btn {
-      margin-bottom: 13px;
-      text-align: center;
-    }
-  }
-
-  .list-content-item {
-    color: rgba(0, 0, 0, .45);
-    display: inline-block;
-    vertical-align: middle;
-    font-size: 14px;
-    margin-left: 40px;
-  }
-
-  @media only screen and (min-width: 1600px) {
-    .list-content-item{
-      margin-left:60px;
-    }
-  }
-
-  @media only screen and (max-width: 1300px) {
-    .list-content-item{
-      margin-left:20px;
-    }
-    .width-hidden4{
-      display:none
-    }
-  }
-  .list-content-item{
-    span{line-height: 20px;}
-  }
-  .list-content-item{
-    p{margin-top: 4px;margin-bottom:0;line-height:22px;}
-  }
-  .anty-list-cust {
-    .ant-list-item-meta{flex: 0.3 !important;}
-  }
-  .anty-list-cust {
-    .ant-list-item-content{flex:1 !important; justify-content:flex-start !important;margin-left: 20px;}
-  }
-
-
-</style>
\ No newline at end of file
diff --git a/src/views/dashboard/IndexChart.vue b/src/views/dashboard/IndexChart.vue
deleted file mode 100644
index 60ac1f5..0000000
--- a/src/views/dashboard/IndexChart.vue
+++ /dev/null
@@ -1,268 +0,0 @@
-<template>
-  <div class="page-header-index-wide">
-    <a-row :gutter="24">
-      <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
-        <chart-card :loading="loading" title="鎬婚攢鍞" total="锟�126,560">
-          <a-tooltip title="鎸囨爣璇存槑" slot="action">
-            <a-icon type="info-circle-o" />
-          </a-tooltip>
-          <div>
-            <trend flag="up" style="margin-right: 16px;">
-              <span slot="term">鍛ㄥ悓姣�</span>
-              12%
-            </trend>
-            <trend flag="down">
-              <span slot="term">鏃ュ悓姣�</span>
-              11%
-            </trend>
-          </div>
-          <template slot="footer">鏃ュ潎閿�鍞<span>锟� 234.56</span></template>
-        </chart-card>
-      </a-col>
-      <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
-        <chart-card :loading="loading" title="璁㈠崟閲�" :total="8846 | NumberFormat">
-          <a-tooltip title="鎸囨爣璇存槑" slot="action">
-            <a-icon type="info-circle-o" />
-          </a-tooltip>
-          <div>
-            <mini-area />
-          </div>
-          <template slot="footer">鏃ヨ鍗曢噺<span> {{ '1234' | NumberFormat }}</span></template>
-        </chart-card>
-      </a-col>
-      <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
-        <chart-card :loading="loading" title="鏀粯绗旀暟" :total="6560 | NumberFormat">
-          <a-tooltip title="鎸囨爣璇存槑" slot="action">
-            <a-icon type="info-circle-o" />
-          </a-tooltip>
-          <div>
-            <mini-bar :height="40" />
-          </div>
-          <template slot="footer">杞寲鐜� <span>60%</span></template>
-        </chart-card>
-      </a-col>
-      <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }">
-        <chart-card :loading="loading" title="杩愯惀娲诲姩鏁堟灉" total="78%">
-          <a-tooltip title="鎸囨爣璇存槑" slot="action">
-            <a-icon type="info-circle-o" />
-          </a-tooltip>
-          <div>
-            <mini-progress color="rgb(19, 194, 194)" :target="80" :percentage="78" :height="8" />
-          </div>
-          <template slot="footer">
-            <trend flag="down" style="margin-right: 16px;">
-              <span slot="term">鍚屽懆姣�</span>
-              12%
-            </trend>
-            <trend flag="up">
-              <span slot="term">鏃ョ幆姣�</span>
-              80%
-            </trend>
-          </template>
-        </chart-card>
-      </a-col>
-    </a-row>
-
-    <a-card :loading="loading" :bordered="false" :body-style="{padding: '0'}">
-      <div class="salesCard">
-        <a-tabs default-active-key="1" size="large" :tab-bar-style="{marginBottom: '24px', paddingLeft: '16px'}">
-          <div class="extra-wrapper" slot="tabBarExtraContent">
-            <div class="extra-item">
-              <a>浠婃棩</a>
-              <a>鏈懆</a>
-              <a>鏈湀</a>
-              <a>鏈勾</a>
-            </div>
-            <a-range-picker :style="{width: '256px'}" />
-          </div>
-          <a-tab-pane loading="true" tab="閿�鍞" key="1">
-            <a-row>
-              <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24">
-                <bar title="閿�鍞鎺掕" :dataSource="barData"/>
-              </a-col>
-              <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
-                <rank-list title="闂ㄥ簵閿�鍞帓琛屾" :list="rankList"/>
-              </a-col>
-            </a-row>
-          </a-tab-pane>
-          <a-tab-pane tab="閿�鍞秼鍔�" key="2">
-            <a-row>
-              <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24">
-                <bar title="閿�鍞瓒嬪娍" :dataSource="barData"/>
-              </a-col>
-              <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24">
-                <rank-list title="闂ㄥ簵閿�鍞帓琛屾" :list="rankList"/>
-              </a-col>
-            </a-row>
-          </a-tab-pane>
-        </a-tabs>
-      </div>
-    </a-card>
-
-    <a-row>
-      <a-col :span="24">
-        <a-card :loading="loading" :bordered="false" title="鏈�杩戜竴鍛ㄨ闂噺缁熻" :style="{ marginTop: '24px' }">
-          <a-row>
-            <a-col :span="6">
-              <head-info title="浠婃棩IP" :content="loginfo.todayIp"></head-info>
-            </a-col>
-            <a-col :span="2">
-              <a-spin class='circle-cust'>
-                <a-icon slot="indicator" type="environment" style="font-size: 24px"  />
-              </a-spin>
-            </a-col>
-            <a-col :span="6">
-              <head-info title="浠婃棩璁块棶" :content="loginfo.todayVisitCount"></head-info>
-            </a-col>
-            <a-col :span="2">
-              <a-spin class='circle-cust'>
-                <a-icon slot="indicator" type="team" style="font-size: 24px"  />
-              </a-spin>
-            </a-col>
-            <a-col :span="6">
-              <head-info title="鎬昏闂噺" :content="loginfo.totalVisitCount"></head-info>
-            </a-col>
-            <a-col :span="2">
-              <a-spin class='circle-cust'>
-                <a-icon slot="indicator" type="rise" style="font-size: 24px"  />
-              </a-spin>
-            </a-col>
-          </a-row>
-          <line-chart-multid :fields="visitFields" :dataSource="visitInfo"></line-chart-multid>
-        </a-card>
-      </a-col>
-    </a-row>
-  </div>
-</template>
-
-<script>
-  import ChartCard from '@/components/ChartCard'
-  import ACol from "ant-design-vue/es/grid/Col"
-  import ATooltip from "ant-design-vue/es/tooltip/Tooltip"
-  import MiniArea from '@/components/chart/MiniArea'
-  import MiniBar from '@/components/chart/MiniBar'
-  import MiniProgress from '@/components/chart/MiniProgress'
-  import RankList from '@/components/chart/RankList'
-  import Bar from '@/components/chart/Bar'
-  import LineChartMultid from '@/components/chart/LineChartMultid'
-  import HeadInfo from '@/components/tools/HeadInfo.vue'
-
-  import Trend from '@/components/Trend'
-  import { getLoginfo,getVisitInfo } from '@/api/api'
-
-  const rankList = []
-  for (let i = 0; i < 7; i++) {
-    rankList.push({
-      name: '鐧介弓宀� ' + (i+1) + ' 鍙峰簵',
-      total: 1234.56 - i * 100
-    })
-  }
-  const barData = []
-  for (let i = 0; i < 12; i += 1) {
-    barData.push({
-      x: `${i + 1}鏈坄,
-      y: Math.floor(Math.random() * 1000) + 200
-    })
-  }
-  export default {
-    name: "IndexChart",
-    components: {
-      ATooltip,
-      ACol,
-      ChartCard,
-      MiniArea,
-      MiniBar,
-      MiniProgress,
-      RankList,
-      Bar,
-      Trend,
-      LineChartMultid,
-      HeadInfo
-    },
-    data() {
-      return {
-        loading: true,
-        center: null,
-        rankList,
-        barData,
-        loginfo:{},
-        visitFields:['ip','visit'],
-        visitInfo:[],
-        indicator: <a-icon type="loading" style="font-size: 24px" spin />
-      }
-    },
-    created() {
-      setTimeout(() => {
-        this.loading = !this.loading
-      }, 1000)
-      this.initLogInfo();
-    },
-    methods: {
-      initLogInfo () {
-        getLoginfo(null).then((res)=>{
-          if(res.success){
-            Object.keys(res.result).forEach(key=>{
-              res.result[key] =res.result[key]+""
-            })
-            this.loginfo = res.result;
-          }
-        })
-        getVisitInfo().then(res=>{
-          if(res.success){
-             this.visitInfo = res.result;
-           }
-         })
-      },
-    }
-  }
-</script>
-
-<style lang="less" scoped>
-  .circle-cust{
-    position: relative;
-    top: 28px;
-    left: -100%;
-  }
-  .extra-wrapper {
-    line-height: 55px;
-    padding-right: 24px;
-
-    .extra-item {
-      display: inline-block;
-      margin-right: 24px;
-
-      a {
-        margin-left: 24px;
-      }
-    }
-  }
-
-  /* 棣栭〉璁块棶閲忕粺璁� */
-  .head-info {
-    position: relative;
-    text-align: left;
-    padding: 0 32px 0 0;
-    min-width: 125px;
-
-    &.center {
-      text-align: center;
-      padding: 0 32px;
-    }
-
-    span {
-      color: rgba(0, 0, 0, .45);
-      display: inline-block;
-      font-size: .95rem;
-      line-height: 42px;
-      margin-bottom: 4px;
-    }
-    p {
-      line-height: 42px;
-      margin: 0;
-      a {
-        font-weight: 600;
-        font-size: 1rem;
-      }
-    }
-  }
-</style>
\ No newline at end of file
diff --git a/src/views/dashboard/IndexTask.vue b/src/views/dashboard/IndexTask.vue
deleted file mode 100644
index 8e9d84b..0000000
--- a/src/views/dashboard/IndexTask.vue
+++ /dev/null
@@ -1,372 +0,0 @@
-<template>
-  <div class="index-container-ty">
-    <a-spin :spinning="loading">
-      <a-row type="flex" justify="start" :gutter="3">
-        <a-col :sm="24" :lg="12">
-          <a-card>
-            <div slot="title" class="index-md-title">
-              <img src="../../assets/daiban.png"/>
-              鎴戠殑寰呭姙銆恵{ dataSource1.length }}銆�
-            </div>
-            <div slot="extra">
-              <a v-if="dataSource1 && dataSource1.length>0" slot="footer" @click="goPage">鏇村 <a-icon type="double-right" /></a>
-            </div>
-            <a-table
-              :class="'my-index-table tytable1'"
-              ref="table1"
-              size="small"
-              rowKey="id"
-              :columns="columns"
-              :dataSource="dataSource1"
-              :pagination="false">
-              <template slot="ellipsisText" slot-scope="text">
-                <j-ellipsis :value="text" :length="textMaxLength"></j-ellipsis>
-              </template>
-
-              <template slot="dayWarnning" slot-scope="text,record">
-                <a-icon type="bulb" theme="twoTone" style="font-size:22px" :twoToneColor="getTipColor(record)"/>
-              </template>
-
-              <span slot="action" slot-scope="text, record">
-                <a @click="handleData">鍔炵悊</a>
-              </span>
-
-            </a-table>
-          </a-card>
-        </a-col>
-
-        <a-col :sm="24" :lg="12">
-          <a-card>
-            <div slot="title" class="index-md-title">
-              <img src="../../assets/zaiban.png"/>
-              鎴戠殑鍦ㄥ姙銆恵{ dataSource2.length }}銆�
-            </div>
-            <div slot="extra">
-              <a v-if="dataSource2 && dataSource2.length>0" slot="footer" @click="goPage">鏇村 <a-icon type="double-right" /></a>
-            </div>
-            <a-table
-              :class="'my-index-table tytable2'"
-              ref="table2"
-              size="small"
-              rowKey="id"
-              :columns="columns"
-              :dataSource="dataSource2"
-              :pagination="false">
-              <template slot="ellipsisText" slot-scope="text">
-                <j-ellipsis :value="text" :length="textMaxLength"></j-ellipsis>
-              </template>
-
-              <template slot="dayWarnning" slot-scope="text,record">
-                <a-icon type="bulb" theme="twoTone" style="font-size:22px" :twoToneColor="getTipColor(record)"/>
-              </template>
-
-              <span slot="action" slot-scope="text, record">
-                <a @click="handleData">鍔炵悊</a>
-              </span>
-
-            </a-table>
-          </a-card>
-        </a-col>
-
-        <a-col :span="24">
-          <div style="height: 5px;"></div>
-        </a-col>
-
-        <a-col :sm="24" :lg="12">
-          <a-card>
-            <div slot="title" class="index-md-title">
-              <img src="../../assets/guaz.png"/>
-              鎴戠殑鎸傝处銆恵{ dataSource4.length }}銆�
-            </div>
-            <a-table
-              :class="'my-index-table tytable4'"
-              ref="table4"
-              size="small"
-              rowKey="id"
-              :columns="columns"
-              :dataSource="dataSource4"
-              :pagination="false">
-              <template slot="ellipsisText" slot-scope="text">
-                <j-ellipsis :value="text" :length="textMaxLength"></j-ellipsis>
-              </template>
-
-              <template slot="dayWarnning" slot-scope="text,record">
-                <a-icon type="bulb" theme="twoTone" style="font-size:22px" :twoToneColor="getTipColor(record)"/>
-              </template>
-
-              <span slot="action" slot-scope="text, record">
-                <a @click="handleData">鍔炵悊</a>
-              </span>
-
-            </a-table>
-          </a-card>
-        </a-col>
-
-        <a-col :sm="24" :lg="12">
-          <a-card>
-            <div slot="title" class="index-md-title">
-              <img src="../../assets/duban.png"/>
-              鎴戠殑鐫e姙銆恵{ dataSource3.length }}銆�
-            </div>
-            <a-table
-              :class="'my-index-table tytable3'"
-              ref="table3"
-              size="small"
-              rowKey="id"
-              :columns="columns"
-              :dataSource="dataSource3"
-              :pagination="false">
-              <template slot="ellipsisText" slot-scope="text">
-                <j-ellipsis :value="text" :length="textMaxLength"></j-ellipsis>
-              </template>
-
-              <template slot="dayWarnning" slot-scope="text,record">
-                <a-icon type="bulb" theme="twoTone" style="font-size:22px" :twoToneColor="getTipColor(record)"/>
-              </template>
-
-              <span slot="action" slot-scope="text, record">
-                <a @click="handleData">鍔炵悊</a>
-              </span>
-
-            </a-table>
-          </a-card>
-        </a-col>
-
-      </a-row>
-    </a-spin>
-
-  </div>
-</template>
-
-<script>
-  import noDataPng from '@/assets/nodata.png'
-  import JEllipsis from '@/components/jeecg/JEllipsis'
-
-  const tempSs1=[{
-    id:"001",
-    orderNo:"鐢礫1]1267102",
-    orderTitle:"鑽搧鍑洪棶棰樹簡",
-    restDay:1
-  },{
-    id:"002",
-    orderNo:"鐢礫4]5967102",
-    orderTitle:"鍚冧簡xxx鍖婚櫌鐨勮嵂锛岀梾鎯呰秺鏉ヨ秺涓ラ噸",
-    restDay:0
-  },{
-    id:"003",
-    orderNo:"鐢礫3]5988987",
-    orderTitle:"浠婂ぉ鍘昏秴甯備拱楦¤泲锛岄浮铔嬮兘鏄潖鐨�",
-    restDay:7
-  },{
-    id:"004",
-    orderNo:"鐢礫2]5213491",
-    orderTitle:"xx瀹濆疄浣撳簵楂樹环鍞崠xx",
-    restDay:5
-  },{
-    id:"005",
-    orderNo:"鐢礫1]1603491",
-    orderTitle:"浠ョ孩鍒╃浉璇憋紝绛斿簲閫�淇濆悗鎵d竴骞磋垂鐢�",
-    restDay:0
-  }]
-
-  const tempSs2=[{
-    id:"001",
-    orderTitle:"鎴戣鎶曡瘔杩欎釜澶ц秴甯�",
-    orderNo:"鐢礫1]10299456",
-    restDay:6
-  },{
-    id:"002",
-    orderTitle:"xxx鍖婚櫌涔卞紑鑽柟,鍞崠鍋囪嵂",
-    orderNo:"鐢礫2]20235691",
-    restDay:0
-  },{
-    id:"003",
-    orderTitle:"鎴戞兂闂棶杩欏搴楁槸骞插暐鐨�",
-    orderNo:"鐢礫3]495867322",
-    restDay:7
-  },{
-    id:"004",
-    orderTitle:"鎴戣涓炬姤鏈濋槼鍖哄ゥ妫叕鍥厭搴�",
-    orderNo:"鐢礫2]1193849",
-    restDay:3
-  },{
-    id:"005",
-    orderTitle:"鎴戜粖澶╁悆楗悆鍒颁竴涓煶澶村瓙",
-    orderNo:"鐢礫4]56782344",
-    restDay:9
-  }]
-
-  //4-7澶�
-  const tip_green = "rgba(0, 255, 0, 1)"
-  //1-3澶�
-  const tip_yellow = "rgba(255, 255, 0, 1)"
-  //瓒呮湡
-  const tip_red = "rgba(255, 0, 0, 1)"
-
-  export default {
-    name: "IndexTask",
-    components:{ JEllipsis },
-    data() {
-      return {
-        loading:false,
-        textMaxLength:8,
-        dataSource1:[],
-        dataSource2:[],
-        dataSource3:[],
-        dataSource4:[],
-        columns: [
-          {
-            title: '',
-            dataIndex: '',
-            key:'rowIndex',
-            width:50,
-            fixed:'left',
-            align:"center",
-            scopedSlots: {customRender: "dayWarnning"}
-          },
-          {
-            title:'鍓╀綑澶╂暟',
-            align:"center",
-            dataIndex: 'restDay',
-            width:80
-          },
-          {
-            title:'宸ュ崟鏍囬',
-            align:"center",
-            dataIndex: 'orderTitle',
-            scopedSlots: {customRender: "ellipsisText"}
-          },
-          {
-            title:'宸ュ崟缂栧彿',
-            align:"center",
-            dataIndex: 'orderNo',
-          },
-          {
-            title: '鎿嶄綔',
-            dataIndex: 'action',
-            align:"center",
-            scopedSlots: { customRender: 'action' }
-          }
-        ]
-
-      }
-    },
-    created() {
-      this.mock();
-    },
-    mounted(){
-
-    },
-    methods: {
-      getTipColor(rd){
-        let num = rd.restDay
-        if(num<=0){
-          return tip_red
-        }else if(num>=1 && num<4){
-          return tip_yellow
-        }else if(num>=4){
-          return tip_green
-        }
-      },
-      goPage(){
-        this.$message.success("璇锋牴鎹叿浣撲笟鍔¤烦杞〉闈�")
-        //this.$router.push({ path: '/comp/mytask' })
-      },
-      mock(){
-        this.dataSource1=tempSs1
-        this.dataSource2=tempSs2
-        this.dataSource3=tempSs1
-        this.dataSource4=[]
-        this.ifNullDataSource(this.dataSource4,'.tytable4')
-      },
-
-      ifNullDataSource(ds,tb){
-        this.$nextTick(()=>{
-          if(!ds || ds.length==0){
-            var tmp = document.createElement('img');
-            tmp.src=noDataPng
-            tmp.width=300
-            let tbclass=`${tb} .ant-table-placeholder`
-            document.querySelector(tbclass).innerHTML=""
-            document.querySelector(tbclass).appendChild(tmp)
-          }
-        })
-      },
-      handleData(){
-        this.$message.success("鍔炵悊瀹屾垚")
-      }
-
-
-
-
-    }
-  }
-</script>
-
-<style>
-  .my-index-table{height:270px}
-  .my-index-table table{font-size: 14px !important;}
-
-  .index-container-ty .ant-card-head-title{padding-top: 6px;padding-bottom: 6px;}
-  .index-container-ty .ant-card-extra{padding:0}
-  .index-container-ty .ant-card-extra a{color:#fff}
-  .index-container-ty .ant-card-extra a:hover{color:#152ede}
-  .index-container-ty .ant-card-head-wrapper,.index-container-ty .ant-card-head{
-    line-height:24px;
-    min-height:24px;
-    /*background: #90aeff;*/
-    background: #7196fb;
-  }
-  .index-container-ty .ant-card-body{padding: 10px 12px 0px 12px}
-
-  /* .index-container-ty .ant-card-actions{background: #fff}
-   .index-container-ty .ant-card-actions li {margin:2px 0;}
-   .index-container-ty .ant-card-actions > li > span{width: 100%}*/
-
-
-  .index-container-ty .ant-table-footer{text-align: right;padding:6px 12px 6px 6px;background: #fff;border-top: 2px solid #f7f1f1;}
-
-  .index-md-title{
-    postion:relative;
-    padding-left:24px;
-    width: 100%;
-    color: #fff;
-    font-size: 21px;
-    font-family: cursive;
-  }
-  .index-md-title img{
-    position: absolute;
-    height:32px;
-    top: 2px;
-    left:14px;
-  }
-
-  .index-container-ty .ant-card-body{
-    /*border-left:1px solid #90aeff;
-    /*border-right:1px solid #90aeff;
-    border-bottom:1px solid #90aeff;*/
-  }
-
-
-  .index-container-ty .ant-table-thead > tr > th,
-  .index-container-ty .ant-table-tbody > tr > td{
-    border-bottom: 1px solid #90aeff;
-  }
-
-  .index-container-ty .ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th,
-  .index-container-ty .ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th{
-    border-bottom: 1px solid #90aeff;
-  }
-
-  .index-container-ty  .ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-body > table > .ant-table-thead > tr > th{
-    border-bottom: 1px solid #90aeff;
-  }
-
-  .index-container-ty .ant-table-small{
-    border: 1px solid #90aeff;
-  }
-
-  .index-container-ty .ant-table-placeholder {
-    padding: 0
-  }
-</style>
\ No newline at end of file
diff --git a/src/views/system/ProductionManager.vue b/src/views/system/ProductionManager.vue
new file mode 100644
index 0000000..de94956
--- /dev/null
+++ b/src/views/system/ProductionManager.vue
@@ -0,0 +1,647 @@
+<template xmlns:background-color="http://www.w3.org/1999/xhtml">
+  <a-row :gutter="10">
+    <a-col :md="12" :sm="24">
+      <a-card :bordered="false">
+
+        <!-- 鎸夐挳鎿嶄綔鍖哄煙 -->
+        <a-row style="margin-left: 14px">
+          <a-button @click="handleAdd(1)" type="primary">娣诲姞杞﹂棿</a-button>
+          <a-button @click="handleAdd(2)" type="primary">娣诲姞涓嬬骇</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-button @click="handleDelete" v-if="selectedKeys.length>0">鍒犻櫎</a-button>
+          <a-button title="鍒犻櫎澶氭潯鏁版嵁" @click="batchDel" v-if="checkedKeys.length>0">鎵归噺鍒犻櫎</a-button>
+          <!--<a-button @click="refresh" type="default" icon="reload" :loading="loading">鍒锋柊</a-button>-->
+        </a-row>
+        `
+        <div style="background: #fff;padding-left:16px;height: 100%; margin-top: 5px">
+          <a-alert type="info" :showIcon="true">
+            <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>
+          <a-input-search @search="onSearch" style="width:100%;margin-top: 10px" placeholder="璇疯緭鍏ヨ溅闂村悕绉�"/>
+          <!-- 鏍�-->
+          <a-col :md="10" :sm="24">
+            <!--<template>-->
+            <!--<a-dropdown :trigger="[this.dropTrigger]" @visibleChange="dropStatus">-->
+            <!--<span style="user-select: none">-->
+            <!--<a-tree-->
+            <!--checkable-->
+            <!--multiple-->
+            <!--@select="onSelect"-->
+            <!--@check="onCheck"-->
+            <!--@rightClick="rightHandle"-->
+            <!--:selectedKeys="selectedKeys"-->
+            <!--:checkedKeys="checkedKeys"-->
+            <!--:treeData="departTree"-->
+            <!--:checkStrictly="checkStrictly"-->
+            <!--:expandedKeys="iExpandedKeys"-->
+            <!--:autoExpandParent="autoExpandParent"-->
+            <!--@expand="onExpand"/>-->
+            <!--</span>-->
+            <!--&lt;!&ndash;鏂板鍙抽敭鐐瑰嚮浜嬩欢,鍜屽鍔犳坊鍔犲拰鍒犻櫎鍔熻兘&ndash;&gt;-->
+
+            <!--<a-menu slot="overlay">-->
+            <!--<a-menu-item @click="handleAdd(3)" key="1">娣诲姞</a-menu-item>-->
+            <!--<a-menu-item @click="handleDelete" key="2">鍒犻櫎</a-menu-item>-->
+            <!--<a-menu-item @click="closeDrop" key="3">鍙栨秷</a-menu-item>-->
+            <!--</a-menu>-->
+            <!--</a-dropdown>-->
+            <!--</template>-->
+            <a-tree
+              checkable
+              multiple
+              @select="onSelect"
+              @check="onCheck"
+              @rightClick="rightHandle"
+              :selectedKeys="selectedKeys"
+              :checkedKeys="checkedKeys"
+              :treeData="departTree"
+              :checkStrictly="checkStrictly"
+              :expandedKeys="iExpandedKeys"
+              :autoExpandParent="autoExpandParent"
+              @expand="onExpand"/>
+          </a-col>
+        </div>
+      </a-card>
+      <!---- author:os_chengtgen -- date:20190827 --  for:鍒囨崲鐖跺瓙鍕鹃�夋ā寮� =======------>
+      <div class="drawer-bottom-button">
+        <a-dropdown :trigger="['click']" placement="topCenter">
+          <a-menu slot="overlay">
+            <a-menu-item key="1" @click="switchCheckStrictly(1)">鐖跺瓙鍏宠仈</a-menu-item>
+            <a-menu-item key="2" @click="switchCheckStrictly(2)">鍙栨秷鍏宠仈</a-menu-item>
+            <a-menu-item key="3" @click="checkALL">鍏ㄩ儴鍕鹃��</a-menu-item>
+            <a-menu-item key="4" @click="cancelCheckALL">鍙栨秷鍏ㄩ��</a-menu-item>
+            <a-menu-item key="5" @click="expandAll">灞曞紑鎵�鏈�</a-menu-item>
+            <a-menu-item key="6" @click="closeAll">鍚堝苟鎵�鏈�</a-menu-item>
+          </a-menu>
+          <a-button>
+            鏍戞搷浣�
+            <a-icon type="up"/>
+          </a-button>
+        </a-dropdown>
+      </div>
+      <!---- author:os_chengtgen -- date:20190827 --  for:鍒囨崲鐖跺瓙鍕鹃�夋ā寮� =======------>
+    </a-col>
+    <a-col :md="12" :sm="24">
+      <a-tabs defaultActiveKey="1">
+        <a-tab-pane tab="鍩烘湰淇℃伅" key="1">
+          <a-card :bordered="false" v-if="selectedKeys.length>0">
+            <a-form-model ref="form" :model="model" :rules="validatorRules">
+              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="productionCode" label="杞﹂棿缂栧彿">
+                <a-input placeholder="璇疯緭鍏ヤ骇绾�/杞﹂棿缂栧彿" v-model="model.productionCode"/>
+              </a-form-model-item>
+              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="productionName" label="杞﹂棿鍚嶇О">
+                <a-input placeholder="璇疯緭鍏ヤ骇绾�/杞﹂棿鍚嶇О" v-model="model.productionName"/>
+              </a-form-model-item>
+              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="涓婄骇杞﹂棿">
+                <a-tree-select
+                  style="width:100%"
+                  :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
+                  :treeData="treeData"
+                  :disabled="disable"
+                  v-model="model.parentId"
+                  placeholder="鏃�">
+                </a-tree-select>
+              </a-form-model-item>
+              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="鎺掑簭">
+                <a-input-number v-model="model.productionOrder"/>
+              </a-form-model-item>
+              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="澶囨敞">
+                <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.memo"/>
+              </a-form-model-item>
+            </a-form-model>
+            <div class="anty-form-btn">
+              <a-button @click="emptyCurrForm" type="default" htmlType="button" icon="sync">閲嶇疆</a-button>
+              <a-button @click="submitCurrForm" type="primary" htmlType="button" icon="form">淇濆瓨</a-button>
+            </div>
+          </a-card>
+          <a-card v-else>
+            <a-empty>
+              <span slot="description"> 璇峰厛閫夋嫨涓�涓溅闂�! </span>
+            </a-empty>
+          </a-card>
+        </a-tab-pane>
+        <!--<a-tab-pane tab="閮ㄩ棬鏉冮檺" key="2" forceRender>-->
+        <!--<depart-auth-modal ref="departAuth"/>-->
+        <!--</a-tab-pane>-->
+        <a-tab-pane tab="璁惧鍒楄〃" key="2" forceRender>
+          <!--<depart-auth-modal/>-->
+          <production-equipment ref="departAuth"></production-equipment>
+        </a-tab-pane>
+      </a-tabs>
+
+    </a-col>
+    <production-modal ref="departModal" @ok="loadTree"></production-modal>
+  </a-row>
+</template>
+<script>
+  import ProductionEquipment from './modules/ProductionManager/ProductionEquipment'
+  import { queryProductionTreeList, searchByKeywords, deleteByProduction } from '@/api/api'
+  import { httpAction, deleteAction } from '@/api/manage'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import ProductionModal from './modules/ProductionManager/ProductionModal'
+
+  export default {
+    name: 'ProductionManager',
+    mixins: [JeecgListMixin],
+    components: {
+      ProductionEquipment,
+      ProductionModal
+    },
+    data() {
+      return {
+        iExpandedKeys: [],
+        loading: false,
+        autoExpandParent: true,
+        currFlowId: '',
+        currFlowName: '',
+        disable: true,
+        treeData: [],
+        visible: false,
+        departTree: [],
+        rightClickSelectedKey: '',
+        rightClickSelectedOrgCode: '',
+        hiding: true,
+        model: {},
+        dropTrigger: '',
+        depart: {},
+        disableSubmit: false,
+        checkedKeys: [],
+        selectedKeys: [],
+        autoIncr: 1,
+        currSelected: {},
+        allTreeKeys: [],
+        checkStrictly: true,
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 }
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 }
+        },
+        graphDatasource: {
+          nodes: [],
+          edges: []
+        },
+        validatorRules: {
+          productionName: [{ required: true, message: '璇疯緭鍏ヤ骇绾�/杞﹂棿鍚嶇О!' }]
+        },
+        url: {
+          delete: '/mdc/mdcProduction/delete',
+          edit: '/mdc/mdcProduction/edit',
+          deleteBatch: '/mdc/mdcProduction/deleteBatch',
+          exportXlsUrl: '/mdc/mdcProduction/exportXls',
+          importExcelUrl: '/mdc/mdcProduction/importExcel'
+        },
+        orgCategoryDisabled: false,
+        isIncludesNotLeaf: false
+      }
+    },
+    computed: {
+      importExcelUrl: function() {
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+      }
+    },
+    methods: {
+      loadData() {
+        this.refresh()
+      },
+      loadTree() {
+        var that = this
+        that.treeData = []
+        that.departTree = []
+        queryProductionTreeList().then((res) => {
+          if (res.success) {
+            //閮ㄩ棬鍏ㄩ�夊悗锛屽啀娣诲姞閮ㄩ棬锛岄�変腑鏁伴噺澧炲
+            this.allTreeKeys = []
+            for (let i = 0; i < res.result.length; i++) {
+              let temp = res.result[i]
+              that.treeData.push(temp)
+              that.departTree.push(temp)
+              that.setThisExpandedKeys(temp)
+              that.getAllKeys(temp)
+              // console.log(temp.id)
+            }
+            this.loading = false
+          }
+        })
+      },
+      setThisExpandedKeys(node) {
+        if (node.children && node.children.length > 0) {
+          this.iExpandedKeys.push(node.key)
+          for (let a = 0; a < node.children.length; a++) {
+            this.setThisExpandedKeys(node.children[a])
+          }
+        }
+      },
+      refresh() {
+        this.loading = true
+        this.loadTree()
+      },
+      // 鍙抽敭鎿嶄綔鏂规硶
+      rightHandle({ event, node }) {
+        this.dropTrigger = 'contextmenu'
+        const record = node.dataRef
+        this.rightClickSelectedKey = record.id
+        this.rightClickSelected = record
+        this.rightClickSelectedOrgCode = record.orgCode
+      },
+      onExpand(expandedKeys) {
+        console.log('onExpand', expandedKeys)
+        this.iExpandedKeys = expandedKeys
+        this.autoExpandParent = false
+      },
+      backFlowList() {
+        this.$router.back(-1)
+      },
+      // 鍙抽敭鐐瑰嚮涓嬫媺妗嗘敼鍙樹簨浠�
+      dropStatus(visible) {
+        if (visible == false) {
+          this.dropTrigger = ''
+        }
+      },
+      // 鍙抽敭涓嬫媺鍏抽棴涓嬫媺妗�
+      closeDrop() {
+        this.dropTrigger = ''
+      },
+      addRootNode() {
+        this.$refs.nodeModal.add(this.currFlowId, '')
+      },
+      batchDel: function() {
+        console.log(this.checkedKeys)
+        this.isIncludesNotLeaf = false
+        this.includesNotLeaf(this.departTree)
+        console.log('isIncludesNotLeaf', this.isIncludesNotLeaf)
+
+        // 涓簍rue鍒欒〃绀洪�変腑椤瑰寘鍚潪鍙跺瓙缁撶偣 false鍒欒〃绀洪�変腑椤瑰潎涓哄彾瀛愮粨鐐�
+        if (!this.isIncludesNotLeaf) {
+          if (this.checkedKeys.length <= 0) {
+            // this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒')
+            this.$notification.warning({
+              message: '娑堟伅',
+              description: '璇烽�夋嫨涓�鏉¤褰�'
+            })
+          } else {
+            var ids = ''
+            for (var a = 0; a < this.checkedKeys.length; a++) {
+              ids += this.checkedKeys[a] + ','
+            }
+            var that = this
+            this.$confirm({
+              title: '纭鍒犻櫎',
+              content: '纭畾瑕佸垹闄ゆ墍閫変腑鐨� ' + this.checkedKeys.length + ' 鏉℃暟鎹�?',
+              onOk: function() {
+                deleteAction(that.url.deleteBatch, { ids: ids }).then((res) => {
+                  if (res.success) {
+                    // that.$message.success(res.message)
+                    that.$notification.success({
+                      message: '娑堟伅',
+                      description: res.message
+                    })
+                    that.loadTree()
+                    that.onClearSelected()
+                  } else {
+                    // that.$message.warning(res.message)
+                    that.$notification.warning({
+                      message: '娑堟伅',
+                      description: res.message
+                    })
+                  }
+                })
+              }
+            })
+          }
+        } else {
+          this.$notification.warning({
+            message: '娑堟伅',
+            description: '閫変腑椤瑰寘鍚凡鎸傝浇瀛愯妭鐐硅溅闂�'
+          })
+        }
+      },
+      includesNotLeaf(treeData) {
+        for (let i = 0; i < treeData.length; i++) {
+          if (!treeData[i].leaf) {
+            this.includesNotLeaf(treeData[i].children)
+          }
+          if (this.checkedKeys.includes(treeData[i].id) && !treeData[i].leaf) {
+            this.isIncludesNotLeaf = true
+          }
+        }
+      },
+      onSearch(value) {
+        let that = this
+        if (value) {
+          searchByKeywords({ keyWord: value }).then((res) => {
+            if (res.success) {
+              that.departTree = []
+              for (let i = 0; i < res.result.length; i++) {
+                let temp = res.result[i]
+                that.departTree.push(temp)
+              }
+            } else {
+              // that.$message.warning(res.message)
+              that.$notification.warning({
+                message: '娑堟伅',
+                description: res.message
+              })
+            }
+          })
+        } else {
+          that.loadTree()
+        }
+
+      },
+      nodeModalOk() {
+        this.loadTree()
+      },
+      nodeModalClose() {
+      },
+      hide() {
+        console.log(111)
+        this.visible = false
+      },
+      onCheck(checkedKeys, info) {
+        console.log('onCheck', checkedKeys, info)
+        this.hiding = false
+        //---- author:os_chengtgen -- date:20190827 --  for:鍒囨崲鐖跺瓙鍕鹃�夋ā寮� =======------
+        if (this.checkStrictly) {
+          this.checkedKeys = checkedKeys.checked
+        } else {
+          this.checkedKeys = checkedKeys
+        }
+        //---- author:os_chengtgen -- date:20190827 --  for:鍒囨崲鐖跺瓙鍕鹃�夋ā寮� =======------
+      },
+      onSelect(selectedKeys, e) {
+        console.log('selected', selectedKeys, e)
+        this.hiding = false
+        this.deleteTrigger = 'leftClick'
+        let record = e.node.dataRef
+        console.log('onSelect-record', record)
+        this.currSelected = Object.assign({}, record)
+        this.model = this.currSelected
+        this.selectedKeys = [record.key]
+        this.model.parentId = record.parentId
+        this.setValuesToForm(record)
+        this.$refs.departAuth.show(record.id)
+      },
+      // 瑙﹀彂onSelect浜嬩欢鏃�,涓洪儴闂ㄦ爲鍙充晶鐨刦orm琛ㄥ崟璧嬪��
+      setValuesToForm(record) {
+        if (record.orgCategory == '1') {
+          this.orgCategoryDisabled = true
+        } else {
+          this.orgCategoryDisabled = false
+        }
+      },
+      getCurrSelectedTitle() {
+        return !this.currSelected.title ? '' : this.currSelected.title
+      },
+      onClearSelected() {
+        this.hiding = true
+        this.checkedKeys = []
+        this.currSelected = {}
+        this.selectedKeys = []
+        this.$refs.departAuth.departId = ''
+      },
+      handleNodeTypeChange(val) {
+        this.currSelected.nodeType = val
+      },
+      notifyTriggerTypeChange(value) {
+        this.currSelected.notifyTriggerType = value
+      },
+      receiptTriggerTypeChange(value) {
+        this.currSelected.receiptTriggerType = value
+      },
+      submitCurrForm() {
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            if (!this.currSelected.id) {
+              // this.$message.warning('璇风偣鍑婚�夋嫨瑕佷慨鏀硅溅闂�!')
+              this.$notification.warning({
+                message: '娑堟伅',
+                description: '璇风偣鍑婚�夋嫨瑕佷慨鏀硅溅闂达紒'
+              })
+              return
+            }
+
+            httpAction(this.url.edit, this.currSelected, 'put').then((res) => {
+              if (res.success) {
+                // this.$message.success('淇濆瓨鎴愬姛!')
+                this.$notification.success({
+                  message: '娑堟伅',
+                  description: '淇濆瓨鎴愬姛'
+                })
+                this.loadTree()
+              } else {
+                // this.$message.error(res.message)
+                this.$notification.warning({
+                  message: '娑堟伅',
+                  description: res.message
+                })
+              }
+            })
+          }
+        })
+      },
+      emptyCurrForm() {
+        this.$refs.form.resetFields()
+        this.model = {}
+      },
+      nodeSettingFormSubmit() {
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            console.log('Received values of form: ', this.model)
+          }
+        })
+      },
+      openSelect() {
+        this.$refs.sysDirectiveModal.show()
+      },
+      handleAdd(num) {
+        if (num == 1) {
+          this.$refs.departModal.add()
+          this.$refs.departModal.title = '鏂板'
+        } else if (num == 2) {
+          console.log(this.currSelected)
+          let key = this.currSelected.key
+          if (!key) {
+            // this.$message.warning('璇峰厛鐐瑰嚮閫変腑涓婄骇杞﹂棿锛�')
+            this.$notification.warning({
+              message: '娑堟伅',
+              description: '璇峰厛鐐瑰嚮閫変腑涓婄骇杞﹂棿锛�'
+            })
+            return false
+          }
+          this.$refs.departModal.add(this.selectedKeys)
+          this.$refs.departModal.title = '鏂板'
+        } else {
+          this.$refs.departModal.add(this.rightClickSelectedKey)
+          this.$refs.departModal.title = '鏂板'
+        }
+      },
+      handleDelete() {
+        var that = this
+        if (this.currSelected.leaf) {
+          this.$confirm({
+            title: '纭鍒犻櫎',
+            content: `纭畾瑕佸垹闄� ${that.currSelected.productionName} 鍚�?`,
+            onOk: function() {
+              deleteByProduction({ id: that.currSelected.id }).then((resp) => {
+                if (resp.success) {
+                  //鍒犻櫎鎴愬姛鍚庯紝鍘婚櫎宸查�変腑涓殑鏁版嵁
+                  // that.checkedKeys.splice(that.checkedKeys.findIndex(key => key === that.rightClickSelectedKey), 1)
+                  // that.$message.success('鍒犻櫎鎴愬姛!')
+                  that.$notification.success({
+                    message: '娑堟伅',
+                    description: '鍒犻櫎鎴愬姛'
+                  })
+                  that.loadTree()
+                  //鍒犻櫎鍚庡悓姝ユ竻绌哄彸渚у熀鏈俊鎭唴瀹�
+                  // let orgCode=that.model.orgCode;
+                  // if(orgCode && orgCode === that.rightClickSelectedOrgCode){
+                  that.onClearSelected()
+                  // }
+                } else {
+                  // that.$message.warning('鍒犻櫎澶辫触!')
+                  that.$notification.warning({
+                    message: '娑堟伅',
+                    description: '鍒犻櫎澶辫触'
+                  })
+                }
+              })
+            }
+          })
+        } else {
+          this.$notification.warning({
+            message: '娑堟伅',
+            description: '姝よ溅闂村凡鎸傝浇瀛愯妭鐐�'
+          })
+        }
+        console.log('deletedRecord', deletedRecord)
+      },
+      selectDirectiveOk(record) {
+        console.log('閫変腑鎸囦护鏁版嵁', record)
+        this.nodeSettingForm.setFieldsValue({ directiveCode: record.directiveCode })
+        this.currSelected.sysCode = record.sysCode
+      },
+      getFlowGraphData(node) {
+        this.graphDatasource.nodes.push({
+          id: node.id,
+          text: node.flowNodeName
+        })
+        if (node.children.length > 0) {
+          for (let a = 0; a < node.children.length; a++) {
+            let temp = node.children[a]
+            this.graphDatasource.edges.push({
+              source: node.id,
+              target: temp.id
+            })
+            this.getFlowGraphData(temp)
+          }
+        }
+      },
+      //---- author:os_chengtgen -- date:20190827 --  for:鍒囨崲鐖跺瓙鍕鹃�夋ā寮� =======------
+      expandAll() {
+        this.iExpandedKeys = this.allTreeKeys
+      },
+      closeAll() {
+        this.iExpandedKeys = []
+      },
+      checkALL() {
+        this.checkStriccheckStrictlytly = false
+        this.checkedKeys = this.allTreeKeys
+      },
+      cancelCheckALL() {
+        //this.checkedKeys = this.defaultCheckedKeys
+        this.checkedKeys = []
+      },
+      switchCheckStrictly(v) {
+        if (v == 1) {
+          this.checkStrictly = false
+        } else if (v == 2) {
+          this.checkStrictly = true
+        }
+      },
+      getAllKeys(node) {
+        // console.log('node',node);
+        this.allTreeKeys.push(node.key)
+        if (node.children && node.children.length > 0) {
+          for (let a = 0; a < node.children.length; a++) {
+            this.getAllKeys(node.children[a])
+          }
+        }
+      }
+      //---- author:os_chengtgen -- date:20190827 --  for:鍒囨崲鐖跺瓙鍕鹃�夋ā寮� =======------
+
+    },
+    created() {
+      this.currFlowId = this.$route.params.id
+      this.currFlowName = this.$route.params.name
+      // this.loadTree()
+    }
+
+  }
+</script>
+<style scoped>
+  .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
+  }
+
+  /** Button鎸夐挳闂磋窛 */
+  .ant-btn {
+    margin-left: 3px
+  }
+
+  .drawer-bottom-button {
+    /*position: absolute;*/
+    bottom: 0;
+    width: 100%;
+    border-top: 1px solid #e8e8e8;
+    padding: 10px 16px;
+    text-align: left;
+    left: 0;
+    background: #fff;
+    border-radius: 0 0 2px 2px;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/system/UserList.vue b/src/views/system/UserList.vue
index 73dceb5..5a29723 100644
--- a/src/views/system/UserList.vue
+++ b/src/views/system/UserList.vue
@@ -114,7 +114,7 @@
         :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
         @change="handleTableChange">
 
-        <template slot="avatarslot" slot-scope="text, record, index">
+        <template slot="avatarslot" slot-scope="text, record">
           <div class="anty-img-wrap">
             <a-avatar shape="square" :src="getAvatarView(record.avatar)" icon="user"/>
           </div>
@@ -178,6 +178,7 @@
 </template>
 
 <script>
+
   import UserModal from './modules/UserModal'
   import PasswordModal from './modules/PasswordModal'
   import {putAction,getFileAccessHttpUrl} from '@/api/manage';
@@ -188,6 +189,7 @@
   import UserRecycleBinModal from './modules/UserRecycleBinModal'
   import JSuperQuery from '@/components/jeecg/JSuperQuery'
   import JThirdAppButton from '@/components/jeecgbiz/thirdApp/JThirdAppButton'
+  import {mapActions} from 'vuex'
 
   export default {
     name: "UserList",
@@ -233,41 +235,42 @@
           {
             title: '澶村儚',
             align: "center",
-            width: 120,
+            width: 80,
             dataIndex: 'avatar',
             scopedSlots: {customRender: "avatarslot"}
           },
 
-          {
-            title: '鎬у埆',
-            align: "center",
-            width: 80,
-            dataIndex: 'sex_dictText',
-            sorter: true
-          },
-          {
-            title: '鐢熸棩',
-            align: "center",
-            width: 100,
-            dataIndex: 'birthday'
-          },
-          {
-            title: '鎵嬫満鍙风爜',
-            align: "center",
-            width: 100,
-            dataIndex: 'phone'
-          },
+          // {
+          //   title: '鎬у埆',
+          //   align: "center",
+          //   width: 80,
+          //   dataIndex: 'sex_dictText',
+          //   sorter: true
+          // },
+          // {
+          //   title: '鐢熸棩',
+          //   align: "center",
+          //   width: 100,
+          //   dataIndex: 'birthday'
+          // },
+          // {
+          //   title: '鎵嬫満鍙风爜',
+          //   align: "center",
+          //   width: 100,
+          //   dataIndex: 'phone'
+          // },
           {
             title: '閮ㄩ棬',
             align: "center",
-            width: 180,
+            width: 240,
             dataIndex: 'orgCodeTxt'
           },
           {
-            title: '璐熻矗閮ㄩ棬',
+            title: '杞﹂棿',
             align: "center",
-            width: 180,
-            dataIndex: 'departIds_dictText'
+            width: 240,
+            dataIndex: 'productionName',
+            ellipsis: true,
           },
           {
             title: '鐘舵��',
@@ -278,12 +281,14 @@
           {
             title: '鎿嶄綔',
             dataIndex: 'action',
-            scopedSlots: {customRender: 'action'},
+            scopedSlots: { customRender: 'action' },
             align: "center",
-            width: 170
-          }
+            width: 80
+          },
+
 
         ],
+        isDepartType:'',
         superQueryFieldList: [
           { type: 'input', value: 'username', text: '鐢ㄦ埛璐﹀彿', },
           { type: 'input', value: 'realname', text: '鐢ㄦ埛濮撳悕', },
@@ -304,14 +309,180 @@
         return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
       }
     },
+    created() {
+      this.queryTreeData()
+    },
     methods: {
+      ...mapActions(['QueryDepartTree']),
+      queryTreeData() {
+        this.QueryDepartTree().then(res => {
+          if (res.success) {
+            this.isDepartType = res.result[0].value
+            if(this.isDepartType == -1){
+              this.columns=[
+                {
+                  title: '鐢ㄦ埛璐﹀彿',
+                  align: "center",
+                  dataIndex: 'username',
+                  width: 120,
+                  sorter: true
+                },
+                {
+                  title: '鐢ㄦ埛濮撳悕',
+                  align: "center",
+                  width: 100,
+                  dataIndex: 'realname',
+                },
+                {
+                  title: '澶村儚',
+                  align: "center",
+                  width: 80,
+                  dataIndex: 'avatar',
+                  scopedSlots: {customRender: "avatarslot"}
+                },
+
+                // {
+                //   title: '鎬у埆',
+                //   align: "center",
+                //   width: 80,
+                //   dataIndex: 'sex_dictText',
+                //   sorter: true
+                // },
+                // {
+                //   title: '鐢熸棩',
+                //   align: "center",
+                //   width: 100,
+                //   dataIndex: 'birthday'
+                // },
+                // {
+                //   title: '鎵嬫満鍙风爜',
+                //   align: "center",
+                //   width: 100,
+                //   dataIndex: 'phone'
+                // },
+                {
+                  title: '杞﹂棿',
+                  align: "center",
+                  width: 240,
+                  dataIndex: 'productionName',
+                  ellipsis: true,
+                },
+                {
+                  title: '鐘舵��',
+                  align: "center",
+                  width: 80,
+                  dataIndex: 'status_dictText'
+                },
+                {
+                  title: '鎿嶄綔',
+                  dataIndex: 'action',
+                  scopedSlots: { customRender: 'action' },
+                  align: "center",
+                  width: 80
+                },
+
+
+              ]
+            }else{
+              this.columns= [
+                {
+                  title: '鐢ㄦ埛璐﹀彿',
+                  align: "center",
+                  dataIndex: 'username',
+                  width: 120,
+                  sorter: true
+                },
+                {
+                  title: '鐢ㄦ埛濮撳悕',
+                  align: "center",
+                  width: 100,
+                  dataIndex: 'realname',
+                },
+                {
+                  title: '澶村儚',
+                  align: "center",
+                  width: 80,
+                  dataIndex: 'avatar',
+                  scopedSlots: {customRender: "avatarslot"}
+                },
+
+                // {
+                //   title: '鎬у埆',
+                //   align: "center",
+                //   width: 80,
+                //   dataIndex: 'sex_dictText',
+                //   sorter: true
+                // },
+                // {
+                //   title: '鐢熸棩',
+                //   align: "center",
+                //   width: 100,
+                //   dataIndex: 'birthday'
+                // },
+                // {
+                //   title: '鎵嬫満鍙风爜',
+                //   align: "center",
+                //   width: 100,
+                //   dataIndex: 'phone'
+                // },
+                {
+                  title: '閮ㄩ棬',
+                  align: "center",
+                  width: 240,
+                  dataIndex: 'orgCodeTxt'
+                },
+                {
+                  title: '杞﹂棿',
+                  align: "center",
+                  width: 240,
+                  dataIndex: 'productionName',
+                  ellipsis: true,
+                },
+                {
+                  title: '鐝粍',
+                  align: "center",
+                  width: 240,
+                  dataIndex: 'teamId_dictText'
+                },
+                {
+                  title: '鐘舵��',
+                  align: "center",
+                  width: 80,
+                  dataIndex: 'status_dictText'
+                },
+                {
+                  title: '鎿嶄綔',
+                  dataIndex: 'action',
+                  scopedSlots: { customRender: 'action' },
+                  align: "center",
+                  width: 80
+                }
+
+
+              ]
+            }
+
+          } else {
+            // this.$message.warn(res.message)
+            this.$notification.warning({
+              message:'娑堟伅',
+              description:res.message
+            });
+          }
+        }).finally(() =>{
+        })
+      },
       getAvatarView: function (avatar) {
         return getFileAccessHttpUrl(avatar)
       },
 
       batchFrozen: function (status) {
         if (this.selectedRowKeys.length <= 0) {
-          this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒');
+          // this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒');
+          this.$notification.warning({
+            message:'娑堟伅',
+            description:"璇烽�夋嫨涓�鏉¤褰�"
+          });
           return false;
         } else {
           let ids = "";
@@ -364,10 +535,16 @@
         }
         frozenBatch({ids: id, status: status}).then((res) => {
           if (res.success) {
-            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/system/modules/ProductionManager/ProductionEquipment.vue b/src/views/system/modules/ProductionManager/ProductionEquipment.vue
new file mode 100644
index 0000000..6227bb9
--- /dev/null
+++ b/src/views/system/modules/ProductionManager/ProductionEquipment.vue
@@ -0,0 +1,331 @@
+<template>
+  <a-card :bordered="false">
+    <template v-if="this.productionId">
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="searchQuery">
+          <a-row :gutter="24">
+
+            <a-col :md="6" :sm="12">
+              <a-form-item label="璁惧缂栧彿">
+                <a-input placeholder="璇疯緭鍏ヨ澶囩紪鍙�" v-model="queryParam.equipmentId"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="8">
+              <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-col>
+          </a-row>
+        </a-form>
+      </div>
+      <div class="table-operator" style="border-top: 5px">
+        <a-dropdown v-if="selectedRowKeys.length > 0">
+          <a-menu slot="overlay"  @click="handleMenuClick">
+            <a-menu-item key="1">
+              <a-icon type="delete" @click="batchDel"/>
+              鎵归噺绉婚櫎
+            </a-menu-item>
+          </a-menu>
+          <a-button style="margin-left: 8px">
+            鎵归噺鎿嶄綔
+            <a-icon type="down"/>
+          </a-button>
+        </a-dropdown>
+      </div>
+      <a-table
+        ref="table"
+        bordered
+        size="middle"
+        rowKey="id"
+        :scroll="{x: 500}"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <!--<template slot="avatarslot" slot-scope="text, record, index">-->
+        <!--<div class="anty-img-wrap">-->
+        <!--<a-avatar shape="square" :src="getAvatarView(record.avatar)" icon="user"/>-->
+        <!--</div>-->
+        <!--</template>-->
+
+        <span slot="action" slot-scope="text, record">
+        <a-popconfirm title="纭畾绉婚櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                  <a>绉婚櫎</a>
+        </a-popconfirm>
+        </span>
+      </a-table>
+    </template>
+    <a-card v-else :bordered="false" style="height:200px">
+      <a-empty>
+        <span slot="description"> 璇峰厛閫夋嫨涓�涓儴闂�! </span>
+      </a-empty>
+    </a-card>
+  </a-card>
+</template>
+
+<script>
+  import { filterObj } from '@/utils/util';
+  import {queryTreeListForRole,queryDepartPermission,saveDepartPermission} from '@/api/api'
+  import {JeecgListMixin} from '@/mixins/JeecgListMixin'
+  import { getAction,postAction } from '@/api/manage'
+  import qs from 'qs'
+  export default {
+    name: 'ProductionEquipment',
+    mixins: [JeecgListMixin],
+    data(){
+      return {
+        queryParam:{},
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title: '璁惧缂栧彿',
+            align: "center",
+            dataIndex: 'equipmentId',
+            width: 120,
+            // sorter: true
+          },
+          {
+            title: '璁惧鍚嶇О',
+            align: "center",
+            width: 150,
+            dataIndex: 'equipmentName',
+          },
+          {
+            title: '璁惧绫诲瀷',
+            align: "center",
+            width: 120,
+            dataIndex: 'equipmentType',
+            // scopedSlots: {customRender: "avatarslot"}
+          },
+
+          {
+            title: '椹卞姩绫诲瀷',
+            align: "center",
+            width: 80,
+            dataIndex: 'driveType',
+            // sorter: true
+          },
+
+          {
+            title: '鎿嶄綔',
+            dataIndex: 'action',
+            scopedSlots: {customRender: 'action'},
+            align: "center",
+            width: 120
+          }
+
+        ],
+        disableMixinCreated:true,
+        productionId:"",
+        title:"閮ㄩ棬鏉冮檺閰嶇疆",
+        visible: false,
+        loading: false,
+        url:{
+          list:'/mdc/mdcEquipment/equipmentListByProduction',
+          removeEquipmentForDepart:'/mdc/mdcEquipment/removeEquipmentForProduction',
+          serachEquipment:'/mdc/mdcEquipment/equipmentListByProduction',
+          removeEquipmentsForProduction:"/mdc/mdcEquipment/removeEquipmentsForProduction"
+        }
+      }
+    },
+    methods: {
+
+      show(productionId){
+        this.productionId=productionId
+        this.loadData();
+      },
+      close () {
+        this.reset()
+        this.$emit('close');
+        this.visible = false;
+      },
+      searchReset() {
+        this.queryParam = {}
+        this.loadData();
+      },
+      searchQuery() {
+        var id = this.queryParam.equipmentId
+        this.loading = true;
+        var params = this.getQueryParams();//鏌ヨ鏉′欢
+
+        params.pageNo = this.ipagination.current;
+        params.pageSize = this.ipagination.pageSize;
+        getAction(this.url.serachEquipment,{equipmentId:this.queryParam.equipmentId,productionId:this.productionId,pageNo:params.pageNo,pageSize:params.pageSize}).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;
+            }
+            //update-end---author:zhangyafei    Date:20201118  for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------
+          }else{
+            // this.$message.warning(res.message)
+            this.$notification.warning({
+              message:'娑堟伅',
+              description:res.message
+            });
+          }
+        }).finally(() => {
+          this.loading = false
+        })
+      },
+      handleTableChange(pagination, filters, sorter) {
+        //鍒嗛〉銆佹帓搴忋�佺瓫閫夊彉鍖栨椂瑙﹀彂
+        //TODO 绛涢��
+        // console.log(pagination)
+        if (Object.keys(sorter).length > 0) {
+          this.isorter.column = sorter.field;
+          this.isorter.order = "ascend" == sorter.order ? "asc" : "desc"
+        }
+        this.ipagination = pagination;
+        this.loadData();
+      },
+      loadData(){
+        //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
+        // if (arg === 1) {
+        //   this.ipagination.current = 1;
+        // }
+        var params = this.getQueryParams();//鏌ヨ鏉′欢
+
+        params.pageNo = this.ipagination.current;
+        params.pageSize = this.ipagination.pageSize;
+        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;
+            }
+            //update-end---author:zhangyafei    Date:20201118  for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------
+          }else{
+            // this.$message.warning(res.message)
+            this.$notification.warning({
+              message:'娑堟伅',
+              description:res.message
+            });
+          }
+        }).finally(() => {
+          this.loading = false
+        })
+      },
+      getQueryParams() {
+        //鑾峰彇鏌ヨ鏉′欢
+        let sqp = {}
+        if(this.superQueryParams){
+          sqp['superQueryParams']=encodeURI(this.superQueryParams)
+          sqp['superQueryMatchType'] = this.superQueryMatchType
+        }
+        var param = Object.assign(sqp, this.queryParam, this.isorter ,this.filters);
+        param.field = this.getQueryField();
+        param.pageNo = this.ipagination.current;
+        param.pageSize = this.ipagination.pageSize;
+        param.productionId = this.productionId;
+        //鑾峰彇鐢ㄦ埛瀹氬埗鐨勫弬鏁板睘鎬�
+        if (this.getCustomQueryParams) {
+          param = this.getCustomQueryParams(param);
+          if(!param){
+            return false;
+          }
+        }
+
+        return filterObj(param);
+      },
+      handleDelete(equipmentId){
+
+        postAction(this.url.removeEquipmentForDepart,qs.stringify({productionId:this.productionId,equipmentId:equipmentId})).then((res)=>{
+          if (res.success) {
+            this.$notification.success({
+              message:'娑堟伅',
+              description:res.message
+            });
+            this.loadData(this.productionId);
+          }else{
+            this.$notification.warning({
+              message:'娑堟伅',
+              description:res.message
+            });
+          }
+        }).finally(() => {
+
+        })
+      },
+      handleMenuClick(e) {
+        if (e.key == 1) {
+          this.batchDel();
+        }
+      },
+      batchDel: function () {
+        if(!this.url.removeEquipmentsForProduction){
+          this.$message.error("璇疯缃畊rl.removeEquipmentsForProduction灞炴��!")
+          return
+        }
+        if (this.selectedRowKeys.length <= 0) {
+          // this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒');
+          this.$notification.warning({
+            message:'娑堟伅',
+            description:"璇烽�夋嫨涓�鏉¤褰�"
+          });
+          return;
+        } else {
+          var ids = "";
+          for (var a = 0; a < this.selectedRowKeys.length; a++) {
+            ids += this.selectedRowKeys[a] + ",";
+          }
+          var that = this;
+          this.$confirm({
+            title: "纭鍒犻櫎",
+            content: "鏄惁鍒犻櫎閫変腑鏁版嵁?",
+            onOk: function () {
+              that.loading = true;
+              postAction(that.url.removeEquipmentsForProduction,qs.stringify({productionId:that.productionId,equipmentIds:ids})).then((res) => {
+                if (res.success) {
+                  //閲嶆柊璁$畻鍒嗛〉闂
+                  that.reCalculatePage(that.selectedRowKeys.length)
+                  // that.$message.success(res.message);
+                  this.$notification.success({
+                    message:'娑堟伅',
+                    description:res.message
+                  });
+                  that.loadData(that.productionId);
+                  that.onClearSelected();
+                } else {
+                  // that.$message.warning(res.message);
+                  this.$notification.warning({
+                    message:'娑堟伅',
+                    description:res.message
+                  });
+                }
+              }).finally(() => {
+                that.loading = false;
+              });
+            }
+          });
+        }
+      },
+    },
+  }
+</script>
+
+<style scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/views/system/modules/ProductionManager/ProductionModal.vue b/src/views/system/modules/ProductionManager/ProductionModal.vue
new file mode 100644
index 0000000..c300b70
--- /dev/null
+++ b/src/views/system/modules/ProductionManager/ProductionModal.vue
@@ -0,0 +1,181 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :ok=false
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    :okButtonProps="{ props: {disabled: disableSubmit} }"
+    @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"
+          label="杞﹂棿缂栫爜"
+          prop="productionCode"
+          :hidden="false"
+          hasFeedback >
+          <a-input id="productionCode" placeholder="璇疯緭鍏ヤ骇绾�/杞﹂棿缂栧彿" v-model="model.productionCode"/>
+        </a-form-model-item>
+        <a-form-model-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="杞﹂棿鍚嶇О"
+          prop="productionName"
+          :hidden="false"
+          hasFeedback >
+          <a-input id="departName" placeholder="璇疯緭鍏ヤ骇绾�/杞﹂棿鍚嶇О" v-model="model.productionName"/>
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" :hidden="seen" label="涓婄骇杞﹂棿" hasFeedback>
+          <a-tree-select
+            style="width:100%"
+            :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
+            :treeData="departTree"
+            v-model="model.parentId"
+            placeholder="璇烽�夋嫨涓婄骇杞﹂棿"
+            :disabled="condition">
+          </a-tree-select>
+        </a-form-model-item>
+        <a-form-model-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="鎺掑簭">
+          <a-input-number v-model="model.productionOrder"/>
+        </a-form-model-item>
+        <a-form-model-item
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          label="澶囨敞">
+          <a-textarea placeholder="璇疯緭鍏ュ娉�" v-model="model.memo"/>
+        </a-form-model-item>
+
+      </a-form-model>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import { queryById } from '@/api/api'
+  import pick from 'lodash.pick'
+  import ATextarea from 'ant-design-vue/es/input/TextArea'
+  export default {
+    name: "ProductionModal",
+    components: { ATextarea },
+    data () {
+      return {
+        departTree:[],
+        orgTypeData:[],
+        phoneWarning:'',
+        departName:"",
+        title:"鎿嶄綔",
+        seen:false,
+        visible: false,
+        condition:true,
+        disableSubmit:false,
+        model: {},
+        menuhidden:false,
+        menuusing:true,
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        validatorRules:{
+          productionName:[{ required: true, message: '璇疯緭鍏ヤ骇绾�/杞﹂棿鍚嶇О!' }],
+        },
+        url: {
+          add: "/mdc/mdcProduction/add",
+        },
+        dictDisabled:true,
+      }
+    },
+    created () {
+    },
+    methods: {
+      loadTreeData(){
+        var that = this;
+        queryById().then((res)=>{
+          if(res.success){
+            that.departTree = [];
+            for (let i = 0; i < res.result.length; i++) {
+              let temp = res.result[i];
+              that.departTree.push(temp);
+            }
+          }
+
+        })
+      },
+      add (depart) {
+        if(depart){
+          this.seen = false;
+          this.dictDisabled = false;
+        }else{
+          this.seen = true;
+          this.dictDisabled = true;
+        }
+        this.edit(depart);
+      },
+      edit (record) {
+        this.visible = true;
+        this.model = Object.assign({}, this.defaultModel, record)
+        this.loadTreeData();
+        this.model.parentId = record!=null?record.toString():null;
+      },
+      close () {
+        this.$emit('close');
+        this.disableSubmit = false;
+        this.visible = false;
+        this.$refs.form.resetFields();
+      },
+      handleOk () {
+        const that = this;
+        // 瑙﹀彂琛ㄥ崟楠岃瘉
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            httpAction(this.url.add,this.model,"post").then((res)=>{
+              if(res.success){
+                // that.$message.success(res.message);
+                that.$notification.success({
+                  message:'娑堟伅',
+                  description:res.message
+                });
+                that.loadTreeData();
+                that.$emit('ok');
+              }else{
+                // that.$message.warning(res.message);
+                that.$notification.warning({
+                  message:'娑堟伅',
+                  description:res.message
+                });
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+          }else{
+            return false;
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/views/system/modules/SelectDeviceModal.vue b/src/views/system/modules/SelectDeviceModal.vue
new file mode 100644
index 0000000..599de84
--- /dev/null
+++ b/src/views/system/modules/SelectDeviceModal.vue
@@ -0,0 +1,231 @@
+<template>
+  <a-modal
+    :title="title"
+    :visible="visible"
+    @ok="handleOk"
+    @cancel="handleCancel"
+  >
+
+    <a-spin :spinning="loading">
+      <!-- showLine -->
+      <a-form>
+        <a-form-item label="杞﹂棿灞傜骇锛�">
+          <a-tree showLine ref="tree" :expandedKeys.sync="expandedKeys"
+                  :treeData="treeDataSource" checkable @check="onCheck" v-model="checkedKeys"
+                  @expand="onExpand">
+          </a-tree>
+        </a-form-item>
+      </a-form>
+
+    </a-spin>
+
+    <template slot="footer">
+      <div>
+        <a-dropdown
+          style="float: left"
+          :trigger="['click']"
+          placement="topCenter"
+        >
+          <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="up"/>
+          </a-button>
+        </a-dropdown>
+        <a-popconfirm title="纭畾鏀惧純缂栬緫锛�" @confirm="handleCancel" okText="纭畾" cancelText="鍙栨秷">
+          <a-button style="margin-right: .8rem">鍏抽棴</a-button>
+        </a-popconfirm>
+        <a-button
+          @click="handleOk"
+          type="primary"
+        >纭畾
+        </a-button>
+      </div>
+    </template>
+
+  </a-modal>
+</template>
+
+<script>
+  import {
+    getAction,
+    postAction,
+    deleteAction
+  } from '@/api/manage'
+  import BaseTree from '@/views/mdc/common/BaseTree'
+  import DepartTree from '@/views/mdc/base/modules/DepartList/DepartListTree/DepartTree'
+
+  export default {
+    name: 'SelectDeviceModal',
+    components: {
+      BaseTree, DepartTree
+    },
+    props: {
+      editDisable: {
+        type: Boolean,
+        default() {
+          return true
+        }
+      },
+      title: {
+        type: String
+      },
+      selectedProduction: {
+        type: String
+      }
+    },
+    data() {
+      return {
+        loading: false,
+        treeDataSource: [],
+        expandedKeys: [],
+        checkedKeys: [],
+        url: {
+          getDeviceTree: '/mdc/mdcEquipment/loadTreeListByProductionIds'
+        },
+        selectedWorkshopIds: '',
+        dataList: [],
+        allTreeKeys: [],
+        visible: false,
+        dataSource: []
+      }
+    },
+    created() {
+      this.closeAll()
+    },
+    methods: {
+      onExpand(expandedKeys) {
+        this.expandedKeys = expandedKeys
+        this.autoExpandParent = false
+      },
+      queryTreeData(value) {
+        this.loading = true
+        this.selectedWorkshopIds = value
+        getAction(this.url.getDeviceTree, { ids: value })
+          .then(res => {
+            if (res.success) {
+              this.dataList = []
+              this.allTreeKeys = []
+              this.getTreeDataSouce(res.result)
+              this.treeDataSource = res.result
+              this.generateList(this.treeDataSource)
+              this.expandedKeys = this.allTreeKeys
+            } else {
+              this.$notification.warning({
+                message: '娑堟伅',
+                description: res.message
+              })
+            }
+          })
+          .catch(err => {
+            this.$notification.error({
+              message: '娑堟伅',
+              description: err.message
+            })
+          })
+          .finally(() => {
+            this.loading = false
+          })
+      },
+
+      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)
+          }
+        }
+      },
+
+      getTreeDataSouce(data) {
+        data.forEach(item => {
+          if (item.children && item.children.length > 0) {
+            this.getTreeDataSouce(item.children)
+          }
+          item.key = item.equipmentId ? item.equipmentId : item.key
+          item.value = item.equipmentId ? item.equipmentId : item.value
+        })
+      },
+      expandAll() {
+        this.expandedKeys = this.allTreeKeys
+      },
+      closeAll() {
+        this.expandedKeys = ['-1']
+      },
+      refreshTree() {
+        this.queryTreeData(this.selectedWorkshopIds)
+      },
+      onCheck(value, obj) {
+        this.checkedKeys = value
+        this.deviceNodes = obj.checkedNodes.filter(item => item.data.props.equipmentId).map(item => item.data.props.equipmentId)
+      },
+      handleCancel() {
+        this.visible = false
+      },
+      handleOk() {
+        this.$emit('selectFinished', this.deviceNodes)
+        this.visible = false
+      }
+
+    }
+  }
+</script>
+<style lang="less" scoped>
+  /deep/ .ant-modal {
+    /*transform-origin: 337px 50px;*/
+  }
+
+  .ant-card-body .table-operator {
+    margin-bottom: 18px;
+  }
+
+  .ant-table-tbody .ant-table-row td {
+    padding-top: 15px;
+    padding-bottom: 15px;
+  }
+
+  .anty-row-operator button {
+    margin: 0 5px
+  }
+
+  .ant-btn-danger {
+    background-color: #ffffff
+  }
+
+  .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
+  }
+
+  .drawer-bottom-button {
+    position: absolute;
+    bottom: 0;
+    width: 100%;
+    border-top: 1px solid #e8e8e8;
+    padding: 10px 16px;
+    text-align: right;
+    left: 0;
+    background: #fff;
+    border-radius: 0 0 2px 2px;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/system/modules/UserModal.vue b/src/views/system/modules/UserModal.vue
index cc7c1f0..cc451b0 100644
--- a/src/views/system/modules/UserModal.vue
+++ b/src/views/system/modules/UserModal.vue
@@ -1,485 +1,786 @@
 <template>
   <a-drawer
-          :title="title"
-          :maskClosable="true"
-          :width="drawerWidth"
-          placement="right"
-          :closable="true"
-          @close="handleCancel"
-          :visible="visible"
-          style="height: 100%;">
+    :title="title"
+    :maskClosable="true"
+    :width="drawerWidth"
+    placement="right"
+    :closable="true"
+    @close="handleCancel"
+    :visible="visible"
+    style="height: 100%;overflow: auto;padding-bottom: 53px;"
+  >
 
     <template slot="title">
       <div style="width: 100%;">
         <span>{{ title }}</span>
         <span style="display:inline-block;width:calc(100% - 51px);padding-right:10px;text-align: right">
-          <a-button @click="toggleScreen" icon="appstore" style="height:20px;width:20px;border:0px"></a-button>
+          <a-button
+            @click="toggleScreen"
+            icon="appstore"
+            style="height:20px;width:20px;border:0px"
+          ></a-button>
         </span>
       </div>
 
     </template>
 
     <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :model="model" :rules="validatorRules">
+      <a-form-model
+        ref="form"
+        :model="model"
+        :rules="validatorRules"
+      >
 
-        <a-form-model-item label="鐢ㄦ埛璐﹀彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="username">
-          <a-input placeholder="璇疯緭鍏ョ敤鎴疯处鍙�" v-model="model.username" :readOnly="!!model.id"/>
+        <a-form-model-item
+          label="鐢ㄦ埛璐﹀彿"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          prop="username"
+        >
+          <a-input
+            placeholder="璇疯緭鍏ョ敤鎴疯处鍙�"
+            v-model="model.username"
+            :readOnly="!!model.id"
+          />
         </a-form-model-item>
 
         <template v-if="!model.id">
-          <a-form-model-item label="鐧诲綍瀵嗙爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="password" >
-            <a-input type="password" placeholder="璇疯緭鍏ョ櫥褰曞瘑鐮�" v-model="model.password" />
+          <a-form-model-item
+            label="鐧诲綍瀵嗙爜"
+            :labelCol="labelCol"
+            :wrapperCol="wrapperCol"
+            prop="password"
+          >
+            <a-input
+              type="password"
+              placeholder="璇疯緭鍏ョ櫥褰曞瘑鐮�"
+              v-model="model.password"
+            />
           </a-form-model-item>
 
-          <a-form-model-item label="纭瀵嗙爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmpassword" >
-            <a-input type="password" @blur="handleConfirmBlur" placeholder="璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�" v-model="model.confirmpassword"/>
+          <a-form-model-item
+            label="纭瀵嗙爜"
+            :labelCol="labelCol"
+            :wrapperCol="wrapperCol"
+            prop="confirmpassword"
+          >
+            <a-input
+              type="password"
+              @blur="handleConfirmBlur"
+              placeholder="璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�"
+              v-model="model.confirmpassword"
+            />
           </a-form-model-item>
         </template>
 
-        <a-form-model-item label="鐢ㄦ埛濮撳悕" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="realname">
-          <a-input placeholder="璇疯緭鍏ョ敤鎴峰鍚�" v-model="model.realname" />
+        <a-form-model-item
+          label="鐢ㄦ埛濮撳悕"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          prop="realname"
+        >
+          <a-input
+            placeholder="璇疯緭鍏ョ敤鎴峰鍚�"
+            v-model="model.realname"
+          />
         </a-form-model-item>
 
-        <a-form-model-item label="宸ュ彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workNo">
-          <a-input placeholder="璇疯緭鍏ュ伐鍙�" v-model="model.workNo" />
+        <a-form-model-item
+          label="宸ュ彿"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          prop="workNo"
+        >
+          <a-input
+            placeholder="璇疯緭鍏ュ伐鍙�"
+            v-model="model.workNo"
+          />
         </a-form-model-item>
 
-        <a-form-model-item label="鎵嬫満鍙风爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="phone">
-          <a-input placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" v-model="model.phone" />
-        </a-form-model-item>
+        <!--<a-form-model-item label="鑱屽姟" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
+        <!--<j-select-position placeholder="璇烽�夋嫨鑱屽姟" :multiple="false" v-model="model.post"/>-->
+        <!--</a-form-model-item>-->
 
-        <a-form-model-item label="鑱屽姟" :labelCol="labelCol" :wrapperCol="wrapperCol">
-          <j-select-position placeholder="璇烽�夋嫨鑱屽姟" :multiple="false" v-model="model.post"/>
-        </a-form-model-item>
-
-        <a-form-model-item label="瑙掕壊鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!roleDisabled" >
+        <a-form-model-item
+          label="瑙掕壊鍒嗛厤"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          v-show="!roleDisabled"
+        >
           <j-multi-select-tag
-                  :disabled="disableSubmit"
-                  v-model="model.selectedroles"
-                  :options="rolesOptions"
-                  placeholder="璇烽�夋嫨瑙掕壊">
+            :disabled="disableSubmit"
+            v-model="model.selectedroles"
+            :options="rolesOptions"
+            placeholder="璇烽�夋嫨瑙掕壊"
+          >
           </j-multi-select-tag>
         </a-form-model-item>
 
         <!--閮ㄩ棬鍒嗛厤-->
-        <a-form-model-item label="閮ㄩ棬鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled">
-          <j-select-depart v-model="model.selecteddeparts" :multi="true" @back="backDepartInfo" :backDepart="true" :treeOpera="true">></j-select-depart>
+        <a-form-model-item
+          v-if="isDepartType== 0"
+          label="閮ㄩ棬鍒嗛厤"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          v-show="!departDisabled"
+        >
+          <j-select-depart
+            v-model="model.selecteddeparts"
+            :multi="true"
+            @back="backDepartInfo"
+            :backDepart="true"
+            :treeOpera="true"
+          >>
+          </j-select-depart>
         </a-form-model-item>
 
-        <!--绉熸埛鍒嗛厤-->
-        <a-form-model-item label="绉熸埛鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled">
-          <j-multi-select-tag
-                  :disabled="disableSubmit"
-                  v-model="model.relTenantIds"
-                  :options="tenantsOptions"
-                  placeholder="璇烽�夋嫨绉熸埛">
-          </j-multi-select-tag>
+        <!--杞﹂棿鍒嗛厤-->
+        <a-form-model-item
+          label="杞﹂棿鍒嗛厤"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          v-show="!productionDisabled"
+        >
+          <j-select-production
+            v-model="model.selectedProduction"
+            :multi="true"
+            @back="backProductionInfo"
+            :backProduction="true"
+            :treeProductOpera="true"
+          ></j-select-production>
         </a-form-model-item>
 
-        <a-form-model-item label="韬唤" :labelCol="labelCol" :wrapperCol="wrapperCol">
-          <a-radio-group  v-model="model.userIdentity"  @change="identityChange">
-            <a-radio :value="1">鏅�氱敤鎴�</a-radio>
-            <a-radio :value="2">涓婄骇</a-radio>
+        <a-form-model-item
+          label="閫夋嫨璁惧"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          v-show="!productionDisabled"
+        >
+          <a-input-search :readOnly="true" v-model="model.equipmentIds" @search="deviceSearch" enter-button
+                          placeholder="璇烽�夋嫨璁惧" :disabled="!model.selectedProduction"/>
+        </a-form-model-item>
+
+        <a-form-model-item label="棣栭〉鏉冮檺" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <a-radio-group v-model="model.userType" :defaultValue="0">
+            <a-radio :value="4">鍏徃绾�</a-radio>
+            <a-radio :value="3">杞﹂棿绾�</a-radio>
+            <a-radio :value="2">宸ユ绾�</a-radio>
+            <a-radio :value="1">鎿嶄綔宸�</a-radio>
+            <a-radio :value="0">鏃�</a-radio>
           </a-radio-group>
         </a-form-model-item>
-        <a-form-model-item label="璐熻矗閮ㄩ棬" :labelCol="labelCol" :wrapperCol="wrapperCol"  v-show="departIdShow==true">
+
+        <a-form-model-item
+          label="鐝粍鍒嗛厤"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          prop="teamId"
+        >
+          <j-dict-select-tag
+            v-model="model.teamId"
+            :triggerChange="true"
+            dictCode="mom_base_team,name,id,del_flag = 0"
+            placeholder="璇风淮鎶ょ彮缁�"
+          ></j-dict-select-tag>
+        </a-form-model-item>
+        <a-form-model-item
+          label="涓績鍒嗛厤"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          prop="areaId"
+        >
+          <j-dict-select-tag
+            v-model="model.areaId"
+            :triggerChange="true"
+            dictCode="mom_base_area,name,id,del_flag = 0"
+            placeholder="璇风淮鎶や腑蹇�"
+          ></j-dict-select-tag>
+        </a-form-model-item>
+        <a-form-model-item
+          label="璐熻矗閮ㄩ棬"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          v-if="departIdShow==true"
+        >
           <j-multi-select-tag
-                  :disabled="disableSubmit"
-                  v-model="model.departIds"
-                  :options="nextDepartOptions"
-                  placeholder="璇烽�夋嫨璐熻矗閮ㄩ棬">
+            :disabled="disableSubmit"
+            v-model="model.departIds"
+            :options="nextDepartOptions"
+            placeholder="璇烽�夋嫨璐熻矗閮ㄩ棬"
+          >
           </j-multi-select-tag>
         </a-form-model-item>
 
-        <a-form-model-item label="澶村儚" :labelCol="labelCol" :wrapperCol="wrapperCol">
-          <j-image-upload class="avatar-uploader" text="涓婁紶" v-model="model.avatar" ></j-image-upload>
-        </a-form-model-item>
+        <!--<a-form-model-item-->
+        <!--label="澶村儚"-->
+        <!--:labelCol="labelCol"-->
+        <!--:wrapperCol="wrapperCol"-->
+        <!--&gt;-->
+        <!--<j-image-upload-->
+        <!--class="avatar-uploader"-->
+        <!--text="涓婁紶"-->
+        <!--v-model="model.avatar"-->
+        <!--&gt;</j-image-upload>-->
+        <!--</a-form-model-item>-->
 
-        <a-form-model-item label="鐢熸棩" :labelCol="labelCol" :wrapperCol="wrapperCol">
-          <a-date-picker
-                  style="width: 100%"
-                  placeholder="璇烽�夋嫨鐢熸棩"
-                  v-model="model.birthday"
-                  :format="dateFormat"
-                  :getCalendarContainer="node => node.parentNode"/>
-        </a-form-model-item>
+        <!--<a-form-model-item-->
+        <!--label="鐢熸棩"-->
+        <!--:labelCol="labelCol"-->
+        <!--:wrapperCol="wrapperCol"-->
+        <!--&gt;-->
+        <!--<a-date-picker-->
+        <!--style="width: 100%"-->
+        <!--placeholder="璇烽�夋嫨鐢熸棩"-->
+        <!--v-model="model.birthday"-->
+        <!--:format="dateFormat"-->
+        <!--:getCalendarContainer="node => node.parentNode"-->
+        <!--/>-->
+        <!--</a-form-model-item>-->
 
-        <a-form-model-item label="鎬у埆" :labelCol="labelCol" :wrapperCol="wrapperCol">
-          <a-select  v-model="model.sex"  placeholder="璇烽�夋嫨鎬у埆" :getPopupContainer= "(target) => target.parentNode">
-            <a-select-option :value="1">鐢�</a-select-option>
-            <a-select-option :value="2">濂�</a-select-option>
-          </a-select>
-        </a-form-model-item>
+        <!--<a-form-model-item-->
+        <!--label="鎬у埆"-->
+        <!--:labelCol="labelCol"-->
+        <!--:wrapperCol="wrapperCol"-->
+        <!--&gt;-->
+        <!--<a-select-->
+        <!--v-model="model.sex"-->
+        <!--placeholder="璇烽�夋嫨鎬у埆"-->
+        <!--:getPopupContainer="(target) => target.parentNode"-->
+        <!--&gt;-->
+        <!--<a-select-option :value="1">鐢�</a-select-option>-->
+        <!--<a-select-option :value="2">濂�</a-select-option>-->
+        <!--</a-select>-->
+        <!--</a-form-model-item>-->
 
-        <a-form-model-item label="閭" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="email">
-          <a-input placeholder="璇疯緭鍏ラ偖绠�" v-model="model.email" />
-        </a-form-model-item>
+        <!--<a-form-model-item-->
+        <!--label="閭"-->
+        <!--:labelCol="labelCol"-->
+        <!--:wrapperCol="wrapperCol"-->
+        <!--prop="email"-->
+        <!--&gt;-->
+        <!--<a-input-->
+        <!--placeholder="璇疯緭鍏ラ偖绠�"-->
+        <!--v-model="model.email"-->
+        <!--/>-->
+        <!--</a-form-model-item>-->
 
-        <a-form-model-item label="搴ф満" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="telephone">
-          <a-input placeholder="璇疯緭鍏ュ骇鏈�" v-model="model.telephone" />
-        </a-form-model-item>
+        <!--<a-form-model-item-->
+        <!--label="鎵嬫満鍙风爜"-->
+        <!--:labelCol="labelCol"-->
+        <!--:wrapperCol="wrapperCol"-->
+        <!--prop="phone"-->
+        <!--&gt;-->
+        <!--<a-input-->
+        <!--placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�"-->
+        <!--v-model="model.phone"-->
+        <!--/>-->
+        <!--</a-form-model-item>-->
 
-        <a-form-model-item label="宸ヤ綔娴佸紩鎿�" :labelCol="labelCol" :wrapperCol="wrapperCol">
-          <j-dict-select-tag  v-model="model.activitiSync"  placeholder="璇烽�夋嫨鏄惁鍚屾宸ヤ綔娴佸紩鎿�" :type="'radio'" dictCode="activiti_sync"/>
-        </a-form-model-item>
+        <!--<a-form-model-item-->
+        <!--label="搴ф満"-->
+        <!--:labelCol="labelCol"-->
+        <!--:wrapperCol="wrapperCol"-->
+        <!--prop="telephone"-->
+        <!--&gt;-->
+        <!--<a-input-->
+        <!--placeholder="璇疯緭鍏ュ骇鏈�"-->
+        <!--v-model="model.telephone"-->
+        <!--/>-->
+        <!--</a-form-model-item>-->
+        <!--<a-form-model-item label="宸ヤ綔娴佸紩鎿�" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
+        <!--<j-dict-select-tag  v-model="model.activitiSync"  placeholder="璇烽�夋嫨鏄惁鍚屾宸ヤ綔娴佸紩鎿�" :type="'radio'" dictCode="activiti_sync"/>-->
+        <!--</a-form-model-item>-->
 
       </a-form-model>
     </a-spin>
 
-
-    <div class="drawer-bootom-button" v-show="!disableSubmit">
-      <a-popconfirm title="纭畾鏀惧純缂栬緫锛�" @confirm="handleCancel" okText="纭畾" cancelText="鍙栨秷">
+    <div
+      class="drawer-bottom-button"
+      v-show="!disableSubmit"
+    >
+      <a-popconfirm
+        title="纭畾鏀惧純缂栬緫锛�"
+        @confirm="handleCancel"
+        okText="纭畾"
+        cancelText="鍙栨秷"
+      >
         <a-button style="margin-right: .8rem">鍙栨秷</a-button>
       </a-popconfirm>
-      <a-button @click="handleSubmit" type="primary" :loading="confirmLoading">鎻愪氦</a-button>
+      <a-button
+        @click="handleSubmit"
+        type="primary"
+        :loading="confirmLoading"
+      >鎻愪氦
+      </a-button>
     </div>
+
+    <select-device-modal ref="selectDeviceModal" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/>
   </a-drawer>
 </template>
 
 <script>
   import moment from 'moment'
   import Vue from 'vue'
-  import { ACCESS_TOKEN } from "@/store/mutation-types"
+  import { ACCESS_TOKEN } from '@/store/mutation-types'
   import { getAction } from '@/api/manage'
-  import { addUser,editUser,queryUserRole,queryall } from '@/api/api'
-  import { disabledAuthFilter } from "@/utils/authFilter"
+  import { addUser, editUser, queryUserRole, queryall } from '@/api/api'
+  import { disabledAuthFilter } from '@/utils/authFilter'
   import { duplicateCheck } from '@/api/api'
+  import JSelectProduction from '../../../components/jeecgbiz/JSelectProduction'
+  import { mapActions } from 'vuex'
+  import { ajaxGetDictItems, getDictItemsFromCache } from '@/api/api'
+  import SelectDeviceModal from './SelectDeviceModal'
 
   export default {
-    name: "UserModal",
+    name: 'UserModal',
     components: {
+      SelectDeviceModal,
+      JSelectProduction
     },
-    data () {
+    data() {
       return {
         departDisabled: false, //鏄惁鏄垜鐨勯儴闂ㄨ皟鐢ㄨ椤甸潰
+        productionDisabled: false, //鏄惁鏄垜鐨勮溅闂磋皟鐢ㄨ椤甸潰
         roleDisabled: false, //鏄惁鏄鑹茬淮鎶よ皟鐢ㄨ椤甸潰
-        modalWidth:800,
-        drawerWidth:700,
-        modaltoggleFlag:true,
+        modalWidth: 800,
+        drawerWidth: 700,
+        modaltoggleFlag: true,
         confirmDirty: false,
-        userId:"", //淇濆瓨鐢ㄦ埛id
-        disableSubmit:false,
-        dateFormat:"YYYY-MM-DD",
-        validatorRules:{
-          username:[{required: true, message: '璇疯緭鍏ョ敤鎴疯处鍙�!'},
-            {validator: this.validateUsername,}],
-          password: [{required: true,pattern:/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/,message: '瀵嗙爜鐢�8浣嶆暟瀛椼�佸ぇ灏忓啓瀛楁瘝鍜岀壒娈婄鍙风粍鎴�!'},
-            {validator: this.validateToNextPassword,trigger: 'change'}],
-          confirmpassword: [{required: true, message: '璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�!',},
-            { validator: this.compareToFirstPassword,}],
-          realname:[{ required: true, message: '璇疯緭鍏ョ敤鎴峰悕绉�!' }],
-          phone: [{required: true, message: '璇疯緭鍏ユ墜鏈哄彿!'}, {validator: this.validatePhone}],
-          email: [{validator: this.validateEmail}],
-          roles:{},
-          workNo:[ { required: true, message: '璇疯緭鍏ュ伐鍙�' },
+        userId: '', //淇濆瓨鐢ㄦ埛id
+        disableSubmit: false,
+        dateFormat: 'YYYY-MM-DD',
+        validatorRules: {
+          username: [{ required: true, message: '璇疯緭鍏ョ敤鎴疯处鍙�!' },
+            { validator: this.validateUsername }],
+          password: [{
+            required: true,
+            pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/,
+            message: '瀵嗙爜鐢�8浣嶆暟瀛椼�佸ぇ灏忓啓瀛楁瘝鍜岀壒娈婄鍙风粍鎴�!'
+          },
+            { validator: this.validateToNextPassword, trigger: 'change' }],
+          confirmpassword: [{ required: true, message: '璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�!' },
+            { validator: this.compareToFirstPassword }],
+          realname: [{ required: true, message: '璇疯緭鍏ョ敤鎴峰悕绉�!' }],
+          phone: [{ required: false, message: '璇疯緭鍏ユ墜鏈哄彿!' }, { validator: this.validatePhone }],
+          email: [{ validator: this.validateEmail }],
+          roles: {},
+          workNo: [{ required: true, message: '璇疯緭鍏ュ伐鍙�' },
             { validator: this.validateWorkNo }],
-          telephone: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '璇疯緭鍏ユ纭殑搴ф満鍙风爜' },]
+          telephone: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '璇疯緭鍏ユ纭殑搴ф満鍙风爜' }],
+          teamId: [{ required: false, message: '璇风淮鎶ょ彮缁�' }]
         },
-        departIdShow:false,
-        title:"鎿嶄綔",
+        departIdShow: false,
+        title: '鎿嶄綔',
         visible: false,
         model: {},
         labelCol: {
           xs: { span: 24 },
-          sm: { span: 5 },
+          sm: { span: 5 }
         },
         wrapperCol: {
           xs: { span: 24 },
-          sm: { span: 16 },
+          sm: { span: 16 }
         },
-        uploadLoading:false,
+        uploadLoading: false,
         confirmLoading: false,
-        headers:{},
+        headers: {},
         url: {
-          fileUpload: window._CONFIG['domianURL']+"/sys/common/upload",
-          userWithDepart: "/sys/user/userDepartList", // 寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬮儴闂ㄤ俊鎭渶瑕佺殑url
-          userId:"/sys/user/generateUserId", // 寮曞叆鐢熸垚娣诲姞鐢ㄦ埛鎯呭喌涓嬬殑url
-          syncUserByUserName:"/act/process/extActProcess/doSyncUserByUserName",//鍚屾鐢ㄦ埛鍒板伐浣滄祦
+          fileUpload: window._CONFIG['domianURL'] + 'sys/common/upload',
+          userWithDepart: '/sys/user/userDepartList', // 寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬮儴闂ㄤ俊鎭渶瑕佺殑url
+          //寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬭溅闂翠俊鎭渶瑕佺殑url
+          userProductionList: '/sys/user/userProductionList',
+          userId: '/sys/user/generateUserId', // 寮曞叆鐢熸垚娣诲姞鐢ㄦ埛鎯呭喌涓嬬殑url
+          syncUserByUserName: '/act/process/extActProcess/doSyncUserByUserName',//鍚屾鐢ㄦ埛鍒板伐浣滄祦
           queryTenantList: '/sys/tenant/queryList'
         },
         tenantsOptions: [],
-        rolesOptions:[],
-        nextDepartOptions:[],
+        rolesOptions: [],
+        nextDepartOptions: [],
+        nextProductionOptions: [],
+        isDepartType: '',
+        model: {
+          selectedProduction: ''
+        }
       }
     },
-    created () {
-      const token = Vue.ls.get(ACCESS_TOKEN);
-      this.headers = {"X-Access-Token":token}
+    watch: {
+      visible: {
+        handler(value) {
+          if (value) this.initDictData('password_length')
+        }
+      },
+      'model.selectedProduction': {
+        handler(newVal, oldVal) {
+          if (newVal && this.$refs.selectDeviceModal) {
+            // 濡傛灉杞﹂棿閫夋嫨鍓嶅悗涓嶄竴鑷村垯閲嶇疆閫夋嫨璁惧
+            if ((oldVal && newVal !== oldVal)) this.model.equipmentIds = ''
+            this.$refs.selectDeviceModal.queryTreeData(newVal)
+          }
+          // 濡傛灉娓呯┖杞﹂棿鍊煎垯閲嶇疆閫夋嫨璁惧
+          if (newVal === '') this.model.equipmentIds = ''
+        }
+      }
+    },
+    created() {
+      const token = Vue.ls.get(ACCESS_TOKEN)
+      this.headers = { 'X-Access-Token': token }
       this.initRoleList()
       this.initTenantList()
+      this.queryTreeData()
     },
-    computed:{
-      uploadAction:function () {
-        return this.url.fileUpload;
+    computed: {
+      uploadAction: function() {
+        return this.url.fileUpload
       }
     },
     methods: {
-      add () {
-        this.refresh();
-        this.edit({activitiSync:'1',userIdentity:1});
+      ...mapActions(['QueryDepartTree']),
+      queryTreeData() {
+        this.QueryDepartTree().then(res => {
+          if (res.success) {
+            this.isDepartType = res.result[0].value
+          } else {
+            // this.$message.warn(res.message)
+            this.$notification.warning({
+              message: '娑堟伅',
+              description: res.message
+            })
+          }
+        }).finally(() => {
+        })
       },
-      edit (record) {
-        let that = this;
-        that.visible = true;
+      add() {
+        this.refresh()
+        this.edit({
+          activitiSync: '1',
+          userType: 0,
+          userIdentity: 1,
+          selectedroles: '',
+          selecteddeparts: '',
+          selectedProduction: ''
+        })
+      },
+      edit(record) {
+        let that = this
+        that.visible = true
         //鏍规嵁灞忓箷瀹藉害鑷�傚簲鎶藉眽瀹藉害
-        this.resetScreenSize();
-        that.userId = record.id;
-        that.model = Object.assign({},{selectedroles:'',selecteddeparts:''}, record);
+        this.resetScreenSize()
+        that.userId = record.id
+        console.log('record', record)
+        that.model = Object.assign({}, record)
         //韬唤涓轰笂绾ф樉绀鸿礋璐i儴闂紝鍚﹀垯涓嶆樉绀�
-        if(this.model.userIdentity==2){
-          this.departIdShow=true;
-        }else{
-          this.departIdShow=false;
+        if (this.model.userIdentity == 2) {
+          this.departIdShow = true
+        } else {
+          this.departIdShow = false
         }
 
-        if(record.hasOwnProperty("id")){
-          that.getUserRoles(record.id);
-          that.getUserDeparts(record.id);
+        if (record.hasOwnProperty('id')) {
+          that.getUserRoles(record.id)
+          that.getUserDeparts(record.id)
         }
-        console.log('that.model=',that.model)
       },
-      isDisabledAuth(code){
-        return disabledAuthFilter(code);
+      isDisabledAuth(code) {
+        return disabledAuthFilter(code)
       },
       //绐楀彛鏈�澶у寲鍒囨崲
-      toggleScreen(){
-        if(this.modaltoggleFlag){
-          this.modalWidth = window.innerWidth;
-        }else{
-          this.modalWidth = 800;
+      toggleScreen() {
+        if (this.modaltoggleFlag) {
+          this.modalWidth = window.innerWidth
+        } else {
+          this.modalWidth = 800
         }
-        this.modaltoggleFlag = !this.modaltoggleFlag;
+        this.modaltoggleFlag = !this.modaltoggleFlag
       },
       // 鏍规嵁灞忓箷鍙樺寲,璁剧疆鎶藉眽灏哄
-      resetScreenSize(){
-        let screenWidth = document.body.clientWidth;
-        if(screenWidth < 500){
-          this.drawerWidth = screenWidth;
-        }else{
-          this.drawerWidth = 700;
+      resetScreenSize() {
+        let screenWidth = document.body.clientWidth
+        if (screenWidth < 500) {
+          this.drawerWidth = screenWidth
+        } else {
+          this.drawerWidth = 700
         }
       },
       //鍒濆鍖栫鎴峰瓧鍏�
-      initTenantList(){
-        getAction(this.url.queryTenantList).then(res=>{
-          if(res.success){
-            this.tenantsOptions = res.result.map((item,index,arr)=>{
-              let c = {label:item.name, value: item.id+""}
-              return c;
+      initTenantList() {
+        getAction(this.url.queryTenantList).then(res => {
+          if (res.success) {
+            this.tenantsOptions = res.result.map((item, index, arr) => {
+              let c = { label: item.name, value: item.id + '' }
+              return c
             })
-            console.log('this.tenantsOptions: ',this.tenantsOptions)
           }
         })
       },
       //鍒濆鍖栬鑹插瓧鍏�
-      initRoleList(){
-        queryall().then((res)=>{
-          if(res.success){
-            this.rolesOptions = res.result.map((item,index,arr)=>{
-              let c = {label:item.roleName, value:item.id}
-              return c;
+      initRoleList() {
+        queryall().then((res) => {
+          if (res.success) {
+            this.rolesOptions = res.result.map((item, index, arr) => {
+              let c = { label: item.roleName, value: item.id }
+              return c
             })
-            console.log('this.rolesOptions: ',this.rolesOptions)
           }
-        });
+        })
       },
-      getUserRoles(userid){
-        queryUserRole({userid:userid}).then((res)=>{
-          if(res.success){
-            this.model.selectedroles = res.result.join(",");
-            console.log('that.model.selectedroles=',this.model.selectedroles)
+      getUserRoles(userid) {
+        queryUserRole({ userid: userid }).then((res) => {
+          if (res.success) {
+            this.$set(this.model, 'selectedroles', res.result.join(','))
           }
-        });
+        })
       },
-      getUserDeparts(userid){
-        let that = this;
-        getAction(that.url.userWithDepart,{userId:userid}).then((res)=>{
-          if(res.success){
-            let departOptions=[];
-            let selectDepartKeys=[]
+      getUserDeparts(userid) {
+        let that = this
+        //閮ㄩ棬鐨剈rl 鑾峰彇閮ㄩ棬鍒嗛厤
+        getAction(that.url.userWithDepart, { userId: userid }).then((res) => {
+          if (res.success) {
+            let departOptions = []
+            let selectDepartKeys = []
             for (let i = 0; i < res.result.length; i++) {
-              selectDepartKeys.push(res.result[i].key);
+              selectDepartKeys.push(res.result[i].key)
               //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗�
               departOptions.push({
                 value: res.result[i].key,
                 label: res.result[i].title
               })
             }
-            that.model.selecteddeparts = selectDepartKeys.join(",")
-            that.nextDepartOptions=departOptions;
-            console.log('that.nextDepartOptions=',that.nextDepartOptions)
+
+            this.$set(this.model, 'selecteddeparts', selectDepartKeys.join(','))
+            that.nextDepartOptions = departOptions
           }
         })
+
+        // 鑾峰彇杞﹂棿鍒嗛厤
+        getAction(that.url.userProductionList, { userId: userid }).then((res) => {
+          if (res.success) {
+            let ProductionOptions = []
+            let selectProductKeys = []
+            for (let i = 0; i < res.result.length; i++) {
+              selectProductKeys.push(res.result[i].key)
+              //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗�
+              ProductionOptions.push({
+                value: res.result[i].key,
+                label: res.result[i].title
+              })
+            }
+
+            this.$set(this.model, 'selectedProduction', selectProductKeys.join(','))
+            that.nextProductionOptions = ProductionOptions
+          }
+        })
+        //杞﹂棿鐨剈rl
       },
       backDepartInfo(info) {
-        this.model.departIds = this.model.selecteddeparts;
-        this.nextDepartOptions = info.map((item,index,arr)=>{
-          let c = {label:item.text, value: item.value+""}
-          return c;
+        this.model.departIds = this.model.selecteddeparts
+        this.nextDepartOptions = info.map((item, index, arr) => {
+          let c = { label: item.text, value: item.value + '' }
+          return c
         })
       },
-      refresh () {
-        this.userId=""
-        this.nextDepartOptions=[];
-        this.departIdShow=false;
+      backProductionInfo(info) {
+        this.model.productionIds = this.model.selectedProduction
+        this.nextProductionOptions = info.map((item, index, arr) => {
+          let c = { label: item.text, value: item.value + '' }
+          return c
+        })
       },
-      close () {
-        this.$emit('close');
-        this.visible = false;
-        this.disableSubmit = false;
-        this.nextDepartOptions=[];
-        this.departIdShow=false;
-        this.$refs.form.resetFields();
+
+      refresh() {
+        this.userId = ''
+        this.nextDepartOptions = []
+        this.nextProductionOptions = []
+        this.departIdShow = false
+      },
+      close() {
+        this.$emit('close')
+        this.visible = false
+        this.disableSubmit = false
+        this.nextDepartOptions = []
+        this.nextProductionOptions = []
+        this.departIdShow = false
+        this.$refs.form.resetFields()
       },
       moment,
-      handleSubmit () {
-        const that = this;
+      handleSubmit() {
+        const that = this
         // 瑙﹀彂琛ㄥ崟楠岃瘉
         this.$refs.form.validate(valid => {
           if (valid) {
-            that.confirmLoading = true;
+            that.confirmLoading = true
             //濡傛灉鏄笂绾ф嫨浼犲叆departIds,鍚﹀垯涓虹┖
-            if(this.model.userIdentity!==2){
-              this.model.departIds="";
+            if (this.model.userIdentity !== 2) {
+              this.model.departIds = ''
             }
-            let obj;
-            if(!this.model.id){
-              this.model.id = this.userId;
-              obj=addUser(this.model);
-            }else{
-              obj=editUser(this.model);
+            let obj
+            if (!this.model.id) {
+              this.model.id = this.userId
+              obj = addUser(this.model)
+            } else {
+              obj = editUser(this.model)
             }
-            obj.then((res)=>{
-              if(res.success){
-                that.$message.success(res.message);
-                that.$emit('ok');
-              }else{
-                that.$message.warning(res.message);
+            obj.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();
+              that.confirmLoading = false
+              that.close()
             })
-          }else{
-            return false;
+          } else {
+            return false
           }
         })
       },
-      handleCancel () {
+      handleCancel() {
         this.close()
       },
-      validateToNextPassword (rule, value, callback) {
-        const confirmpassword=this.model.confirmpassword;
+      validateToNextPassword(rule, value, callback) {
+        const confirmpassword = this.model.confirmpassword
         if (value && confirmpassword && value !== confirmpassword) {
-          callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒');
+          callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒')
         }
         if (value && this.confirmDirty) {
-          this.$refs.form.validateField(['confirmpassword']);
+          this.$refs.form.validateField(['confirmpassword'])
         }
-        callback();
+        callback()
       },
-      compareToFirstPassword (rule, value, callback) {
+      compareToFirstPassword(rule, value, callback) {
         if (value && value !== this.model.password) {
-          callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒');
+          callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒')
         } else {
           callback()
         }
       },
-      validatePhone(rule, value, callback){
-        if(!value){
+      validatePhone(rule, value, callback) {
+        if (!value) {
           callback()
-        }else{
-          if(new RegExp(/^1[3|4|5|6|7|8|9][0-9]\d{8}$/).test(value)){
+        } else {
+          if (new RegExp(/^1[3|4|5|7|8|9][0-9]\d{8}$/).test(value)) {
             var params = {
               tableName: 'sys_user',
               fieldName: 'phone',
               fieldVal: value,
               dataId: this.userId
-            };
+            }
             duplicateCheck(params).then((res) => {
               if (res.success) {
                 callback()
               } else {
-                callback("鎵嬫満鍙峰凡瀛樺湪!")
+                callback('鎵嬫満鍙峰凡瀛樺湪!')
               }
             })
-          }else{
-            callback("璇疯緭鍏ユ纭牸寮忕殑鎵嬫満鍙风爜!");
+          } else {
+            callback('璇疯緭鍏ユ纭牸寮忕殑鎵嬫満鍙风爜!')
           }
         }
       },
-      validateEmail(rule, value, callback){
-        if(!value){
+      validateEmail(rule, value, callback) {
+        if (!value) {
           callback()
-        }else{
-          if(new RegExp(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/).test(value)){
+        } else {
+          if (new RegExp(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/).test(value)) {
             var params = {
               tableName: 'sys_user',
               fieldName: 'email',
               fieldVal: value,
               dataId: this.userId
-            };
+            }
             duplicateCheck(params).then((res) => {
               console.log(res)
               if (res.success) {
                 callback()
               } else {
-                callback("閭宸插瓨鍦�!")
+                callback('閭宸插瓨鍦�!')
               }
             })
-          }else{
-            callback("璇疯緭鍏ユ纭牸寮忕殑閭!")
+          } else {
+            callback('璇疯緭鍏ユ纭牸寮忕殑閭!')
           }
         }
       },
-      validateUsername(rule, value, callback){
+      validateUsername(rule, value, callback) {
         var params = {
           tableName: 'sys_user',
           fieldName: 'username',
           fieldVal: value,
           dataId: this.userId
-        };
+        }
         duplicateCheck(params).then((res) => {
           if (res.success) {
             callback()
           } else {
-            callback("鐢ㄦ埛鍚嶅凡瀛樺湪!")
+            callback('鐢ㄦ埛鍚嶅凡瀛樺湪!')
           }
         })
       },
-      validateWorkNo(rule, value, callback){
+      validateWorkNo(rule, value, callback) {
         var params = {
           tableName: 'sys_user',
           fieldName: 'work_no',
           fieldVal: value,
           dataId: this.userId
-        };
+        }
         duplicateCheck(params).then((res) => {
           if (res.success) {
             callback()
           } else {
-            callback("宸ュ彿宸插瓨鍦�!")
+            callback('宸ュ彿宸插瓨鍦�!')
           }
         })
       },
       handleConfirmBlur(e) {
-        const value = e.target.value;
+        const value = e.target.value
         this.confirmDirty = this.confirmDirty || !!value
       },
-      beforeUpload: function(file){
-        var fileType = file.type;
-        if(fileType.indexOf('image')<0){
-          this.$message.warning('璇蜂笂浼犲浘鐗�');
-          return false;
+      beforeUpload: function(file) {
+        var fileType = file.type
+        if (fileType.indexOf('image') < 0) {
+          this.$message.warning('璇蜂笂浼犲浘鐗�')
+          return false
         }
         //TODO 楠岃瘉鏂囦欢澶у皬
       },
-      identityChange(e){
-        if(e.target.value===1){
-          this.departIdShow=false;
-        }else{
-          this.departIdShow=true;
+      identityChange(e) {
+        if (e.target.value === 1) {
+          this.departIdShow = false
+        } else {
+          this.departIdShow = true
         }
+      },
+      initDictData(dictCode) {
+        //鏍规嵁瀛楀吀Code, 鍒濆鍖栧瓧鍏告暟缁�
+        ajaxGetDictItems(dictCode, null).then((res) => {
+          if (res.success) {
+            const regExp = new RegExp('^(?=.*[a-zA-Z])(?=.*\\\d)(?=.*[~!@#$%^&*()_+`\\-={}:";\'<>?,./]).{' + Number(res.result[0].value) + ',}$')
+
+            this.validatorRules.password[0] = {
+              required: true,
+              pattern: regExp,
+              message: `瀵嗙爜鐢�${res.result[0].value}浣嶆暟瀛椼�佸ぇ灏忓啓瀛楁瘝鍜岀壒娈婄鍙风粍鎴�!`
+            }
+
+          }
+        })
+      },
+
+      deviceSearch() {
+        this.$refs.selectDeviceModal.visible = true
+        this.$refs.selectDeviceModal.selectedRowKeys = []
+        this.$refs.selectDeviceModal.selectedRows = []
+        this.$refs.selectDeviceModal.checkedKeys = this.model.equipmentIds ? this.model.equipmentIds.split(',') : []
+      },
+
+      /**
+       * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂
+       * @param data 宸查�夋嫨鐨勮澶囨暟缁�
+       */
+      selectOK(data) {
+        console.log('data=', data)
+        this.$set(this.model, 'equipmentIds', data.join(','))
       }
     }
   }
@@ -487,9 +788,10 @@
 
 <style scoped>
   .avatar-uploader > .ant-upload {
-    width:104px;
-    height:104px;
+    width: 104px;
+    height: 104px;
   }
+
   .ant-upload-select-picture-card i {
     font-size: 49px;
     color: #999;
@@ -500,14 +802,14 @@
     color: #666;
   }
 
-  .ant-table-tbody .ant-table-row td{
-    padding-top:10px;
-    padding-bottom:10px;
+  .ant-table-tbody .ant-table-row td {
+    padding-top: 10px;
+    padding-bottom: 10px;
   }
 
-  .drawer-bootom-button {
+  .drawer-bottom-button {
     position: absolute;
-    bottom: 0;
+    bottom: -8px;
     width: 100%;
     border-top: 1px solid #e8e8e8;
     padding: 10px 16px;
@@ -516,10 +818,4 @@
     background: #fff;
     border-radius: 0 0 2px 2px;
   }
-
-  /*銆怞TC-502銆� 娣诲姞鐢ㄦ埛涓や釜婊氬姩鏉�*/
-  /deep/ .ant-drawer-body {
-    padding-bottom: 53px;
-  }
-
-</style>
+</style>
\ No newline at end of file
diff --git a/src/views/user/Login.vue b/src/views/user/Login.vue
index e7d4f86..6eb8ab0 100644
--- a/src/views/user/Login.vue
+++ b/src/views/user/Login.vue
@@ -163,7 +163,7 @@
         // this.$router.push({ path: "/isps/userAnnouncement" }).catch(() => {
         //   console.log('鐧诲綍璺宠浆棣栭〉鍑洪敊,杩欎釜閿欒浠庡摢閲屾潵鐨�')
         // })
-        this.$router.push({ path: '/dashboard/analysis' }).catch(() => {
+        this.$router.push({ path: '/mdc/base/DeviceBaseInfo' }).catch(() => {
           console.log('鐧诲綍璺宠浆棣栭〉鍑洪敊,杩欎釜閿欒浠庡摢閲屾潵鐨�')
         })
         this.$notification.success({

--
Gitblit v1.9.3