From 9fbbbe80e6b48a3bd9544a24295971b8da9bc337 Mon Sep 17 00:00:00 2001
From: zhaowei <zhaowei>
Date: 星期一, 21 七月 2025 19:07:02 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/system/modules/UserModal.vue |  744 ++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 450 insertions(+), 294 deletions(-)

diff --git a/src/views/system/modules/UserModal.vue b/src/views/system/modules/UserModal.vue
index d46bccf..8761b63 100644
--- a/src/views/system/modules/UserModal.vue
+++ b/src/views/system/modules/UserModal.vue
@@ -1,19 +1,15 @@
 <template>
-  <a-drawer
-    :title="title"
-    :maskClosable="true"
-    :width="drawerWidth"
-    placement="right"
-    :closable="true"
-    @close="handleCancel"
-    :visible="visible"
-    style="height: 100%;overflow: auto;padding-bottom: 53px;">
+  <a-drawer :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>
 
@@ -23,193 +19,232 @@
       <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-input placeholder="璇疯緭鍏ョ敤鎴疯处鍙�" v-model="model.username" :readOnly="!!model.id" autocomplete="off"/>
         </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" autocomplete="off"/>
           </a-form-model-item>
 
-          <a-form-model-item label="纭瀵嗙爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="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-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-input placeholder="璇疯緭鍏ュ伐鍙�" v-model="model.workNo"/>
         </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" >
-          <j-multi-select-tag
-            :disabled="disableSubmit"
-            v-model="model.selectedroles"
-            :options="rolesOptions"
-            placeholder="璇烽�夋嫨瑙掕壊">
+        <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="璇烽�夋嫨瑙掕壊">
           </j-multi-select-tag>
+        </a-form-model-item>
+
+        <a-form-model-item label="宀椾綅" :labelCol="labelCol" :wrapperCol="wrapperCol">
+          <!--          <j-select-position placeholder="璇烽�夋嫨宀椾綅" :multiple="false" v-model="model.post"/>-->
+          <j-dict-select-tag placeholder="璇烽�夋嫨宀椾綅" dict-code="sys_position, name, code" v-model="model.post" />
+        </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 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>
+          <j-select-depart v-model="model.selecteddeparts" :multi="true" @back="backDepartInfo" :backDepart="true" :treeOpera="true"/>
         </a-form-model-item>
 
-        <!--杞﹂棿鍒嗛厤-->
-        <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>
+        <!--MDC杞﹂棿鍒嗛厤-->
+        <a-form-model-item label="MDC杞﹂棿鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!productionDisabled">
+          <j-select-production v-model="model.selectedProduction" :multi="true" @back="backProductionInfo" :backProduction="true" :treeProductOpera="true"/>
         </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="璇烽�夋嫨璐熻矗閮ㄩ棬">
-          </j-multi-select-tag>
+        <a-form-model-item label="MDC璁惧鍒嗛厤" :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">
-          <j-image-upload class="avatar-uploader" text="涓婁紶" v-model="model.avatar" ></j-image-upload>
+        <a-form-model-item label="EAM涓績鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="eamFactoryIds">
+          <JSelectBaseFactory v-model="model.selectedBaseFactory" :multi="true" @back="backBaseFactoryInfo" :backProduction="true" :treeProductOpera="true"/>
         </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 label="EAM璁惧鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!productionDisabled">
+          <a-input-search :readOnly="true" v-model="model.eamEquipmentIds" @search="eamDeviceSearch" enter-button placeholder="璇烽�夋嫨EAM璁惧" :disabled="!model.selectedBaseFactory"/>
         </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 label="缁翠慨閮ㄩ棬/鐝粍鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!repairDepartDisabled">-->
+<!--          <j-select-repair-depart v-model="model.selectedRepairDeparts" :multi="true" @back="backRepairDepartInfo" :backRepairDepart="true" :treeRepairDepartOpera="true"/>-->
+<!--        </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="璇烽�夋嫨璐熻矗閮ㄩ棬"/>
         </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="phone">
-          <a-input placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" v-model="model.phone" />
-        </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">-->
-          <!--<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">
+    <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>
     </div>
+
+    <select-device-modal ref="selectDeviceModal" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/>
+
+    <select-eam-device-modal ref="selectEamDeviceModal" @selectFinished="selectEamOK" :title="'閫夋嫨EAM璁惧'"/>
+
   </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 JSelectRepairDepart from '../../../components/jeecgbiz/JSelectRepairDepart'
+  import { mapActions } from 'vuex'
+  import { ajaxGetDictItems, getDictItemsFromCache } from '@/api/api'
+  import SelectDeviceModal from './SelectDeviceModal'
+  import SelectEamDeviceModal from './SelectEamDeviceModal'
+  import JSelectBaseFactory from "@comp/jeecgbiz/JSelectBaseFactory.vue";
 
   export default {
-    name: "UserModal",
+    name: 'UserModal',
     components: {
-      JSelectProduction
+      JSelectBaseFactory,
+      SelectDeviceModal,
+      JSelectProduction,
+      // JSelectRepairDepart,
+      SelectEamDeviceModal
     },
-    data () {
+    data() {
       return {
         departDisabled: false, //鏄惁鏄垜鐨勯儴闂ㄨ皟鐢ㄨ椤甸潰
         productionDisabled: false, //鏄惁鏄垜鐨勮溅闂磋皟鐢ㄨ椤甸潰
         roleDisabled: false, //鏄惁鏄鑹茬淮鎶よ皟鐢ㄨ椤甸潰
-        modalWidth:800,
-        drawerWidth:700,
-        modaltoggleFlag:true,
+        // repairDepartDisabled: false, //鏄惁鏄垜鐨勭淮淇儴闂ㄧ彮缁勮皟鐢ㄨ椤甸潰
+        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: 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: '璇疯緭鍏ユ纭殑搴ф満鍙风爜' },]
+        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: '璇疯緭鍏ユ纭殑搴ф満鍙风爜' }],
+          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
+          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'
+          userId: '/sys/user/generateUserId', // 寮曞叆鐢熸垚娣诲姞鐢ㄦ埛鎯呭喌涓嬬殑url
+          syncUserByUserName: '/act/process/extActProcess/doSyncUserByUserName',//鍚屾鐢ㄦ埛鍒板伐浣滄祦
+          queryTenantList: '/sys/tenant/queryList',
+          userRepairDepartList: '/sys/user/userRepairDepartList',
+          userBaseFactoryList: '/sys/user/userBaseFactoryList',
+          repairDepartTreeList: '/eam/eamBaseRepairDepart/queryTreeList'
         },
         tenantsOptions: [],
-        rolesOptions:[],
-        nextDepartOptions:[],
-        nextProductionOptions:[],
-        isDepartType:'',
-
+        rolesOptions: [],
+        nextDepartOptions: [],
+        nextProductionOptions: [],
+        nextBaseFactoryOptions:[],
+        nextRepairDepartOptions: [],
+        isDepartType: '',
+        model: {
+          selectedProduction: '',
+          // selectedRepairDeparts: '',
+          selectedBaseFactory:'',
+        }
       }
     },
-    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 = ''
+        }
+      },
+      'model.selectedBaseFactory': {
+        handler(newVal, oldVal) {
+          if (newVal && this.$refs.selectEamDeviceModal) {
+            // 濡傛灉杞﹂棿閫夋嫨鍓嶅悗涓嶄竴鑷村垯閲嶇疆閫夋嫨璁惧
+            if ((oldVal && newVal !== oldVal)) this.model.eamEquipmentIds = ''
+            this.$refs.selectEamDeviceModal.queryTreeData(newVal)
+          }
+          // 濡傛灉娓呯┖杞﹂棿鍊煎垯閲嶇疆閫夋嫨璁惧
+          if (newVal === '') this.model.eamEquipmentIds = ''
+        }
+      }
+    },
+    created() {
+      const token = Vue.ls.get(ACCESS_TOKEN)
+      this.headers = { 'X-Access-Token': token }
       this.initRoleList()
       this.initTenantList()
       this.queryTreeData()
+      this.getRepairDepartTreeDataByApi()
     },
-    computed:{
-      uploadAction:function () {
-        return this.url.fileUpload;
+    computed: {
+      uploadAction: function() {
+        return this.url.fileUpload
       }
     },
     methods: {
@@ -221,101 +256,122 @@
           } else {
             // this.$message.warn(res.message)
             this.$notification.warning({
-              message:'娑堟伅',
-              description:res.message
-            });
+              message: '娑堟伅',
+              description: res.message
+            })
           }
-        }).finally(() =>{
+        }).finally(() => {
         })
       },
-      add () {
-        this.refresh();
-        this.edit({activitiSync:'1',userIdentity:1});
+      // 鑾峰彇缁翠慨鐝粍鏍�
+      getRepairDepartTreeDataByApi() {
+        getAction(this.url.repairDepartTreeList)
+          .then(res => {
+            if (res.success) {
+              this.repairDepartTreeData = res.result
+            } else {
+              this.$notification.warning({
+                message: '娑堟伅',
+                description: res.message
+              })
+            }
+          })
       },
-      edit (record) {
-        let that = this;
-        that.visible = true;
+      add() {
+        this.refresh()
+        this.edit({
+          activitiSync: '1',
+          userType: 0,
+          userIdentity: 1,
+          selectedroles: '',
+          selecteddeparts: '',
+          selectedProduction: '',
+          selectedBaseFactory:'',
+          // selectedRepairDeparts: ''
+        })
+      },
+      edit(record) {
+        let that = this
+        that.visible = true
         //鏍规嵁灞忓箷瀹藉害鑷�傚簲鎶藉眽瀹藉害
-        this.resetScreenSize();
-        that.userId = record.id;
-
-        that.model = Object.assign({},{selectedroles:'',selecteddeparts:''}, record);
-        that.model = Object.assign({},{selectedroles:'',selectedProduction:''}, 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)
+          that.getUserProductions(record.id)
+          that.getUserRepairDeparts(record.id)
+          this.getUserBaseFactorys(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;
-        //閮ㄩ棬鐨剈rl
-        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,
@@ -323,20 +379,20 @@
               })
             }
 
-            that.model.selecteddeparts = selectDepartKeys.join(",")
-            that.model.selectedProduction = 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=[]
+      },
+      getUserProductions(userid) {
+        let that = this
+        // 鑾峰彇杞﹂棿鍒嗛厤
+        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);
+              selectProductKeys.push(res.result[i].key)
               //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗�
               ProductionOptions.push({
                 value: res.result[i].key,
@@ -344,193 +400,292 @@
               })
             }
 
-            that.model.selectedProduction = selectProductKeys.join(",")
-
-            that.nextProductionOptions=ProductionOptions;
-            console.log('that.nextProductionOptions=',that.nextProductionOptions)
+            this.$set(this.model, 'selectedProduction', selectProductKeys.join(','))
+            that.nextProductionOptions = ProductionOptions
           }
         })
-      //杞﹂棿鐨剈rl
+      },
+      // getUserRepairDeparts(userid) {
+      //   let that = this
+      //   // 鑾峰彇缁翠慨閮ㄩ棬/鐝粍鍒嗛厤
+      //   getAction(that.url.userRepairDepartList, { userId: userid }).then((res) => {
+      //     if (res.success) {
+      //       let repairDepartOptions = []
+      //       let selectedRepairDepartKeys = []
+      //       for (let i = 0; i < res.result.length; i++) {
+      //         selectedRepairDepartKeys.push(res.result[i].key)
+      //         //鏂板璐熻矗缁翠慨閮ㄩ棬/鐝粍閫夋嫨涓嬫媺妗�
+      //         repairDepartOptions.push({
+      //           value: res.result[i].key,
+      //           label: res.result[i].title
+      //         })
+      //       }
+      //
+      //       this.$set(this.model, 'selectedRepairDeparts', selectedRepairDepartKeys.join(','))
+      //       that.nextRepairDepartOptions = repairDepartOptions
+      //     }
+      //   })
+      // },
+      getUserBaseFactorys(userid) {
+        let that = this
+        // 鑾峰彇EAM涓績/宸ュ尯/宸ユ鍒嗛厤
+        getAction(that.url.userBaseFactoryList, { userId: userid }).then((res) => {
+          if (res.success) {
+            let BaseFactoryOptions = []
+            let selectedBaseFactoryOptionsKeys = []
+            for (let i = 0; i < res.result.length; i++) {
+              selectedBaseFactoryOptionsKeys.push(res.result[i].key)
+              //鏂板璐熻矗缁翠慨閮ㄩ棬/鐝粍閫夋嫨涓嬫媺妗�
+              BaseFactoryOptions.push({
+                value: res.result[i].key,
+                label: res.result[i].title
+              })
+            }
+
+            this.$set(this.model, 'selectedBaseFactory', selectedBaseFactoryOptionsKeys.join(','))
+            that.nextBaseFactoryOptions = BaseFactoryOptions
+          }
+        })
       },
       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
         })
       },
       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;
+        this.model.productionIds = this.model.selectedProduction
+        this.nextProductionOptions = info.map((item, index, arr) => {
+          let c = { label: item.text, value: item.value + '' }
+          return c
         })
       },
-
-      refresh () {
-        this.userId=""
-        this.nextDepartOptions=[];
-        this.nextProductionOptions = [];
-        this.departIdShow=false;
+      backBaseFactoryInfo(info) {
+        this.model.eamFactoryIds = this.model.selectedBaseFactory
+        this.nextBaseFactoryOptions = 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=[];
+      // backRepairDepartInfo(info) {
+      //   this.model.repairDepartIds = this.model.selectedRepairDeparts
+      //   this.nextRepairDepartOptions = info.map((item, index, arr) => {
+      //     let c = { label: item.text, value: item.value + '' }
+      //     return c
+      //   })
+      // },
+
+      refresh() {
+        this.userId = ''
+        this.nextDepartOptions = []
         this.nextProductionOptions = []
-        this.departIdShow=false;
-        this.$refs.form.resetFields();
+        this.nextBaseFactoryOptions = []
+        this.nextRepairDepartOptions = []
+        this.departIdShow = false
+      },
+      close() {
+        this.$emit('close')
+        this.visible = false
+        this.disableSubmit = false
+        this.nextDepartOptions = []
+        this.nextProductionOptions = []
+        this.nextProductionOptions = []
+        this.nextRepairDepartOptions = []
+        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|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()
+          } else {
+            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(',') : []
+      },
+
+      eamDeviceSearch(){
+        this.$refs.selectEamDeviceModal.visible = true
+        this.$refs.selectEamDeviceModal.selectedRowKeys = []
+        this.$refs.selectEamDeviceModal.selectedRows = []
+        this.$refs.selectEamDeviceModal.checkedKeys = this.model.eamEquipmentIds ? this.model.eamEquipmentIds.split(',') : []
+      },
+
+      /**
+       * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂
+       * @param data 宸查�夋嫨鐨勮澶囨暟缁�
+       */
+      selectOK(data) {
+        console.log('data=', data)
+        this.$set(this.model, 'equipmentIds', data.join(','))
+      },
+      selectEamOK(data) {
+        console.log('data=', data)
+        this.$set(this.model, 'eamEquipmentIds', data.join(','))
       }
     }
   }
@@ -538,9 +693,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;
@@ -551,12 +707,12 @@
     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: -8px;
     width: 100%;

--
Gitblit v1.9.3