From 03c38da7555b69cb598e534c97fa25bd5385701c Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期二, 29 十月 2024 17:55:50 +0800
Subject: [PATCH] 表单定义权限控制和属性权限&&成员管理添加密级&&首页修改密码&&登录判断过期停用修改密码后跳转首页

---
 Source/plt-web/plt-web-ui/src/page/login/userlogin.vue                                   |  106 ++++++++++++++-
 Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue |  129 +++++++++++++++++
 Source/plt-web/plt-web-ui/src/store/modules/user.js                                      |   12 -
 Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/attributePool/index.vue        |   59 ++++---
 Source/plt-web/plt-web-ui/src/api/UI/formDefine/api.js                                   |    9 +
 Source/plt-web/plt-web-ui/src/views/system/user/option.js                                |   12 +
 Source/plt-web/plt-web-ui/src/page/index/top/index.vue                                   |   80 ++++++-----
 7 files changed, 318 insertions(+), 89 deletions(-)

diff --git a/Source/plt-web/plt-web-ui/src/api/UI/formDefine/api.js b/Source/plt-web/plt-web-ui/src/api/UI/formDefine/api.js
index 5d6e885..8476bc8 100644
--- a/Source/plt-web/plt-web-ui/src/api/UI/formDefine/api.js
+++ b/Source/plt-web/plt-web-ui/src/api/UI/formDefine/api.js
@@ -86,6 +86,15 @@
   })
 }
 
+// 琛ㄦ牸鏌ヨ妯℃澘涓嬫媺鏌ヨ
+export function refPersonOrgTree(params) {
+  return request({
+    url: "/api/userQueryController/refPersonOrgTree",
+    method: "get",
+    params
+  })
+}
+
 const cloneObj = {
   "clonePortalVIDTOList": [{
     "viName": "ppartProp",//--鍏嬮殕鐨勮〃鍗�/琛ㄦ牸鍚嶇О
diff --git a/Source/plt-web/plt-web-ui/src/page/index/top/index.vue b/Source/plt-web/plt-web-ui/src/page/index/top/index.vue
index ca8584f..4f38b79 100644
--- a/Source/plt-web/plt-web-ui/src/page/index/top/index.vue
+++ b/Source/plt-web/plt-web-ui/src/page/index/top/index.vue
@@ -27,15 +27,15 @@
           <top-color></top-color>
         </div>
       </el-tooltip>
-<!--      閿欒鏃ュ織-->
-<!--      <el-tooltip v-if="showDebug"-->
-<!--                  :content="logsFlag?$t('navbar.bug'):logsLen+$t('navbar.bugs')"-->
-<!--                  effect="dark"-->
-<!--                  placement="bottom">-->
-<!--        <div class="top-bar__item">-->
-<!--          <top-logs></top-logs>-->
-<!--        </div>-->
-<!--      </el-tooltip>-->
+      <!--      閿欒鏃ュ織-->
+      <!--      <el-tooltip v-if="showDebug"-->
+      <!--                  :content="logsFlag?$t('navbar.bug'):logsLen+$t('navbar.bugs')"-->
+      <!--                  effect="dark"-->
+      <!--                  placement="bottom">-->
+      <!--        <div class="top-bar__item">-->
+      <!--          <top-logs></top-logs>-->
+      <!--        </div>-->
+      <!--      </el-tooltip>-->
       <el-tooltip v-if="showLock"
                   :content="$t('navbar.lock')"
                   effect="dark"
@@ -52,14 +52,14 @@
           <top-theme></top-theme>
         </div>
       </el-tooltip>
-<!--      娑堟伅閫氱煡-->
-<!--      <el-tooltip :content="$t('navbar.notice')"-->
-<!--                  effect="dark"-->
-<!--                  placement="bottom">-->
-<!--        <div class="top-bar__item top-bar__item&#45;&#45;show">-->
-<!--          <top-notice></top-notice>-->
-<!--        </div>-->
-<!--      </el-tooltip>-->
+      <!--      娑堟伅閫氱煡-->
+      <!--      <el-tooltip :content="$t('navbar.notice')"-->
+      <!--                  effect="dark"-->
+      <!--                  placement="bottom">-->
+      <!--        <div class="top-bar__item top-bar__item&#45;&#45;show">-->
+      <!--          <top-notice></top-notice>-->
+      <!--        </div>-->
+      <!--      </el-tooltip>-->
       <el-tooltip :content="$t('navbar.language')"
                   effect="dark"
                   placement="bottom">
@@ -112,8 +112,10 @@
         :visible.sync="passwordVisible"
         append-to-body="true"
         class="avue-dialog"
+        style="margin-top: -15vh"
         title="淇敼瀵嗙爜"
-        width="50%">
+        width="50%"
+        @close="passwordClose">
         <avue-form ref="form" v-model="passwordForm" :option="passwordOption" @submit="submitSwitch"/>
       </el-dialog>
     </div>
@@ -151,14 +153,14 @@
       passwordVisible: false,
       passwordForm: {},
       passwordOption: {
-        submitText:'淇濆瓨',
+        submitText: '淇濆瓨',
         column: [
           {
             label: '鐧婚檰瀵嗙爜',
             prop: 'oldPassword',
             span: 24,
-            labelWidth:"15%",
-            type:'password',
+            labelWidth: "15%",
+            type: 'password',
             rules: [
               {
                 required: true,
@@ -171,8 +173,8 @@
             label: '鏂扮櫥闄嗗瘑鐮�',
             prop: 'password',
             span: 24,
-            labelWidth:"15%",
-            type:'password',
+            labelWidth: "15%",
+            type: 'password',
             rules: [
               {
                 required: true,
@@ -185,8 +187,8 @@
             label: '鏂板瘑鐮佺櫥闄嗙‘璁�',
             prop: 'confirmPassword',
             span: 24,
-            labelWidth:"15%",
-            type:'password',
+            labelWidth: "15%",
+            type: 'password',
             rules: [
               {
                 required: true,
@@ -300,28 +302,33 @@
     },
     submitSwitch(form, done) {
       let userInfo = JSON.parse(localStorage.getItem('saber-userInfo'));
-
       let params = {
-        userOid:userInfo.content.userOid,
-        oldPassword:func.encryptData(form.oldPassword,'daliantan0v0vcip'),
-        password:func.encryptData(form.password,'daliantan0v0vcip'),
-        confirmPassword:func.encryptData(form.confirmPassword,'daliantan0v0vcip'),
+        userName: userInfo.content.userId,
+        oldPassword: func.encryptData(form.oldPassword, 'daliantan0v0vcip'),
+        password: func.encryptData(form.password, 'daliantan0v0vcip'),
+        confirmPassword: func.encryptData(form.confirmPassword, 'daliantan0v0vcip'),
 
       }
-      changePassword(params).then(res =>{
-        if(res.data.code === 200){
+      changePassword(params).then(res => {
+        if (res.data.code === 200) {
           this.$message.success(res.data.msg);
           this.passwordVisible = false;
+          this.$store.dispatch("LogOut").then(() => {
+            resetRouter();
+            this.$router.push({path: "/login"});
+          });
         }
       }).catch(err => {
         console.log(err);
       })
-      // this.$store.dispatch("refreshToken", form).then(() => {
-      //   this.userBox = false;
-      //   this.$router.push({path: "/"});
-      // })
       done();
     },
+
+    // 鍏抽棴淇敼瀵嗙爜瀵硅瘽妗�
+    passwordClose() {
+      this.$refs.form.resetFields();
+    },
+
     logout() {
       this.$confirm(this.$t("logoutTip"), this.$t("tip"), {
         confirmButtonText: this.$t("submitText"),
@@ -329,7 +336,6 @@
         type: "warning"
       }).then(() => {
         this.$store.dispatch("LogOut").then(() => {
-          console.log('123');
           resetRouter();
           this.$router.push({path: "/login"});
         });
diff --git a/Source/plt-web/plt-web-ui/src/page/login/userlogin.vue b/Source/plt-web/plt-web-ui/src/page/login/userlogin.vue
index fad37a7..48701ab 100644
--- a/Source/plt-web/plt-web-ui/src/page/login/userlogin.vue
+++ b/Source/plt-web/plt-web-ui/src/page/login/userlogin.vue
@@ -46,7 +46,16 @@
                  @click.native.prevent="handleLogin">{{ $t('login.submit') }}
       </el-button>
     </el-form-item>
-
+    <el-dialog
+      v-dialogDrag
+      :visible.sync="passwordVisible"
+      append-to-body="true"
+      class="avue-dialog"
+      style="margin-top: -15vh"
+      title="淇敼瀵嗙爜"
+      width="50%">
+      <avue-form ref="changeForm" v-model="passwordForm" :option="passwordOption" @submit="submitSwitch"/>
+    </el-dialog>
 
   </el-form>
 </template>
@@ -55,11 +64,63 @@
 import {mapGetters} from "vuex";
 import {info} from "@/api/system/tenant";
 import {getTopUrl} from "@/util/util";
+import func from "@/util/func";
+import {changePassword} from "@/api/user";
 
 export default {
   name: "userlogin",
   data() {
     return {
+      userName:'',
+      passwordVisible: false,
+      passwordForm: {},
+      passwordOption: {
+        submitText: '淇濆瓨',
+        column: [
+          {
+            label: '鐧婚檰瀵嗙爜',
+            prop: 'oldPassword',
+            span: 24,
+            labelWidth: "15%",
+            type: 'password',
+            rules: [
+              {
+                required: true,
+                message: '璇疯緭鍏ョ櫥闄嗗瘑鐮�',
+                trigger: 'blur'
+              }
+            ]
+          },
+          {
+            label: '鏂扮櫥闄嗗瘑鐮�',
+            prop: 'password',
+            span: 24,
+            labelWidth: "15%",
+            type: 'password',
+            rules: [
+              {
+                required: true,
+                message: '璇疯緭鍏ユ柊鐧婚檰瀵嗙爜',
+                trigger: 'blur'
+              }
+            ]
+          },
+          {
+            label: '鏂板瘑鐮佺櫥闄嗙‘璁�',
+            prop: 'confirmPassword',
+            span: 24,
+            labelWidth: "15%",
+            type: 'password',
+            rules: [
+              {
+                required: true,
+                message: '璇风‘璁ょ櫥闄嗗瘑鐮�',
+                trigger: 'blur'
+              }
+            ]
+          }
+        ]
+      },
       tenantMode: this.website.tenantMode,
       ButtonList: [],
       loginForm: {
@@ -175,9 +236,14 @@
             spinner: "el-icon-loading"
           });
           this.$store.dispatch("LoginByUsername", this.loginForm).then((data) => {
-            if (data.obj.passwordInfo) {
-              this.$message.warning(data.obj.passwordInfo);
+            if (data.obj.failCode !== 'loginSuccess') {
+              // console.log('data', data);
+              this.$message.error(data.msg);
+              if (data.obj.mustChangePassword) {
+                this.passwordVisible = true;
+              }
             }
+
             if (this.website.switchMode) {
               const deptId = this.userInfo.deptOid;
               const roleId = this.userInfo.userOid;
@@ -190,14 +256,11 @@
                 });
                 return false;
               }
-            }
-            ;
+            };
             this.$router.push({path: this.tagWel.value});
             loading.close();
           }).catch((err) => {
-            console.log('err', err)
             loading.close();
-
           });
         }
       });
@@ -214,7 +277,34 @@
           this.$parent.$refs.login.style.backgroundImage = `url(${data.data.backgroundUrl})`;
         }
       })
-    }
+    },
+
+    submitSwitch(form, done) {
+      let userInfo = JSON.parse(localStorage.getItem('saber-userInfo'));
+
+      let params = {
+        userName: this.loginForm.username,
+        oldPassword: func.encryptData(form.oldPassword, 'daliantan0v0vcip'),
+        password: func.encryptData(form.password, 'daliantan0v0vcip'),
+        confirmPassword: func.encryptData(form.confirmPassword, 'daliantan0v0vcip'),
+      }
+      changePassword(params).then(res => {
+        if (res.data.code === 200) {
+          this.$message.success('淇敼鎴愬姛锛屽嵆灏嗚烦杞埌棣栭〉');
+          this.passwordVisible = false;
+          this.$refs.changeForm.resetFields();
+          this.$store.dispatch("LoginByUsername",{...this.loginForm,password:form.confirmPassword}).then(data => {
+            if (data.obj.failCode !== 'loginSuccess') {
+              this.$message.error(data.msg);
+            }
+            this.$router.push({path: this.tagWel.value});
+          })
+        }
+      }).catch(err => {
+        console.log(err);
+      })
+      done();
+    },
   }
 };
 </script>
diff --git a/Source/plt-web/plt-web-ui/src/store/modules/user.js b/Source/plt-web/plt-web-ui/src/store/modules/user.js
index 99a59e2..d4a78eb 100644
--- a/Source/plt-web/plt-web-ui/src/store/modules/user.js
+++ b/Source/plt-web/plt-web-ui/src/store/modules/user.js
@@ -66,10 +66,7 @@
         let passwordDes = func.encryptData(userInfo.password,'daliantan0v0vcip')
         loginByUsername(userInfo.deptId, userInfo.roleId, userInfo.username,passwordDes, userInfo.type, userInfo.key,).then(res => {
           const data = res.data;
-          if (data.code === 200) {
-            // commit('SET_TOKEN', data.obj.sessionInfo.token);
-            // commit('SET_REFRESH_TOKEN', data.obj.sessionInfo.token);
-
+          if (data.obj.failCode === 'loginSuccess') {
             commit('SET_TOKEN', data.obj.tokenVO.accessToken);
             commit('SET_REFRESH_TOKEN', data.obj.tokenVO.accessToken);
             commit('DEL_ALL_TAG');
@@ -81,15 +78,10 @@
             }).catch(err => {
               console.log(err)
             })
-
-          } else {
-            Message({
-              message: data.msg,
-              type: 'error'
-            })
           }
           resolve(data);
         }).catch(error => {
+          // console.log(error)
           reject(error);
         })
       })
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/attributePool/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/attributePool/index.vue
index befcded..b49b2bd 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/attributePool/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/attributePool/index.vue
@@ -21,7 +21,9 @@
             <el-button icon="el-icon-plus" plain size="small" type="primary" @click="rowSaveHandlerClick">鍒涘缓</el-button>
             <el-button icon="el-icon-delete" plain size="small" type="danger" @click="allDelHandler">鍒犻櫎</el-button>
             <el-button icon="el-icon-view" plain size="small" type="primary" @click="chekView">鏌ョ湅浣跨敤鑼冨洿</el-button>
-            <el-button icon="el-icon-download" plain size="small" type="primary" @click="downloadTemplateHandler">涓嬭浇瀵煎叆妯℃澘</el-button>
+            <el-button icon="el-icon-download" plain size="small" type="primary" @click="downloadTemplateHandler">
+              涓嬭浇瀵煎叆妯℃澘
+            </el-button>
             <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="upLoadHandler">瀵煎叆</el-button>
             <el-button icon="el-icon-download" plain size="small" type="primary" @click="downLoadHandler">瀵煎嚭</el-button>
           </template>
@@ -53,7 +55,7 @@
                 鏍囩
               </template>
               <div style="width: 330px">
-              {{ lastItem.name }}
+                {{ lastItem.name }}
               </div>
             </el-descriptions-item>
             <el-descriptions-item>
@@ -61,7 +63,7 @@
                 鎻忚堪
               </template>
               <div style="width: 330px">
-              {{ lastItem.description }}
+                {{ lastItem.description }}
               </div>
             </el-descriptions-item>
             <el-descriptions-item>
@@ -81,9 +83,9 @@
                 鍏佽涓虹┖
               </template>
               <div style="width: 330px">
-              <el-tag :type="lastItem.nullableFlag ? 'success' : 'danger'">
-                {{ lastItem.nullableFlag ? '鏄�' : '鍚�' }}
-              </el-tag>
+                <el-tag :type="lastItem.nullableFlag ? 'success' : 'danger'">
+                  {{ lastItem.nullableFlag ? '鏄�' : '鍚�' }}
+                </el-tag>
               </div>
             </el-descriptions-item>
             <el-descriptions-item v-if="accuracy">
@@ -97,7 +99,7 @@
                 闀垮害
               </template>
               <div style="width: 330px">
-              {{ lastItem.attrLength }}
+                {{ lastItem.attrLength }}
               </div>
             </el-descriptions-item>
             <el-descriptions-item>
@@ -105,7 +107,7 @@
                 榛樿鍊�
               </template>
               <div style="width: 330px">
-              {{ lastItem.defaultValue }}
+                {{ lastItem.defaultValue }}
               </div>
             </el-descriptions-item>
           </el-descriptions>
@@ -118,7 +120,7 @@
                 褰撳墠绫诲瀷
               </template>
               <div style="width: 345px">
-              {{ lastItem.version ? '閾炬帴绫诲瀷' : '涓氬姟绫诲瀷' }}
+                {{ lastItem.version ? '閾炬帴绫诲瀷' : '涓氬姟绫诲瀷' }}
               </div>
             </el-descriptions-item>
             <el-descriptions-item>
@@ -126,7 +128,7 @@
                 褰撳墠绫诲瀷鍊�
               </template>
               <div style="width: 345px">
-              {{ lastItem.version ? lastItem.linkTypeName : lastItem.btmTypeId }}
+                {{ lastItem.version ? lastItem.linkTypeName : lastItem.btmTypeId }}
               </div>
             </el-descriptions-item>
             <el-descriptions-item v-if="lastItem.version">
@@ -134,7 +136,7 @@
                 褰撳墠鐗堟湰娆�
               </template>
               <div style="width: 345px">
-              {{ lastItem.version }}
+                {{ lastItem.version }}
               </div>
             </el-descriptions-item>
             <el-descriptions-item>
@@ -142,9 +144,9 @@
                 浣跨敤鏋氫妇
               </template>
               <div style="width: 345px">
-              <el-tag :type="lastItem.enumId ? 'success' : 'danger'">
-                {{ lastItem.enumId ? '鏄�' : '鍚�' }}
-              </el-tag>
+                <el-tag :type="lastItem.enumId ? 'success' : 'danger'">
+                  {{ lastItem.enumId ? '鏄�' : '鍚�' }}
+                </el-tag>
               </div>
             </el-descriptions-item>
             <el-descriptions-item>
@@ -152,7 +154,7 @@
                 褰撳墠鏋氫妇绫诲瀷
               </template>
               <div style="width: 345px">
-              {{ lastItem.enumId }}
+                {{ lastItem.enumId }}
               </div>
             </el-descriptions-item>
             <el-descriptions-item>
@@ -175,9 +177,9 @@
                 浣跨敤鏋氫妇
               </template>
               <div style="width: 330px">
-              <el-tag :type="lastItem.enumFlag ? 'success' : 'danger'">
-                {{ lastItem.enumFlag ? '鏄�' : '鍚�' }}
-              </el-tag>
+                <el-tag :type="lastItem.enumFlag ? 'success' : 'danger'">
+                  {{ lastItem.enumFlag ? '鏄�' : '鍚�' }}
+                </el-tag>
               </div>
             </el-descriptions-item>
             <el-descriptions-item>
@@ -185,7 +187,7 @@
                 鏋氫妇绫诲瀷
               </template>
               <div style="width: 330px">
-              {{ lastItem.enumFlag }}
+                {{ lastItem.enumFlag }}
               </div>
             </el-descriptions-item>
             <el-descriptions-item>
@@ -376,7 +378,7 @@
                     <el-button size="mini" @click="operationHandler('<=')"> <=</el-button>
                     <el-button size="mini" @click="operationHandler('=')"> =</el-button>
                     <el-button size="mini" @click="operationHandler('!=')"> !=</el-button>
-                    <el-button size="mini" @click="operationHandler('()')"> ()</el-button>
+                    <el-button size="mini" @click="operationHandler('()')"> ([])</el-button>
                   </div>
                 </el-form-item>
                 <el-form-item :label="form.enumSwitch ? '褰撳墠鏋氫妇鍊硷細' : '褰撳墠鍊煎煙锛�'" prop="rangeValue">
@@ -400,7 +402,7 @@
                     <el-button size="mini" @click="operationHandler('<=')"> <=</el-button>
                     <el-button size="mini" @click="operationHandler('=')"> =</el-button>
                     <el-button size="mini" @click="operationHandler('!=')"> !=</el-button>
-                    <el-button size="mini" @click="operationHandler('()')"> ()</el-button>
+                    <el-button size="mini" @click="operationHandler('()')">([])</el-button>
                   </div>
                 </el-form-item>
                 <el-form-item :label="form.enumSwitch ? '褰撳墠鏋氫妇鍊硷細' : '褰撳墠鍊煎煙锛�'" prop="rangeValue">
@@ -599,7 +601,7 @@
         addBtn: false,
         editBtn: false,
         delBtn: false,
-        menuWidth:160,
+        menuWidth: 160,
         column
       },
       tableLoading: false,
@@ -991,8 +993,13 @@
 
       // 澶勭悊 '()' 杩愮畻绗︾殑鎯呭喌
       if (val === '()') {
+        let regex = /[,\[\]()]+/g;
+        let firstValue = this.form.enumAddValue[0];
+        let lastValue = this.form.enumAddValue[(this.form.enumAddValue.length - 1)];
         // 鍒囧壊 enumAddValue 鐨勯�楀彿
-        let values = this.form.enumAddValue.split(',').map(item => item.trim());
+        let values = this.form.enumAddValue.split(regex).map(item => item.trim()).filter(item => item !== "");
+        ;
+
 
         // 妫�鏌ユ槸鍚︽湁鏈夋晥鐨勫��
         if (values.length < 2 || values.some(item => item === '')) {
@@ -1015,7 +1022,7 @@
         }
 
         // 鏋勫缓 newValue 鐨勫舰寮� (鍊�1,鍊�2)
-        let newValue = `(${values.join(',')})`;
+        let newValue = `${firstValue}${values.join(',')}${lastValue}`;
 
         // 妫�鏌ユ柊鐨勫�兼槸鍚﹀凡瀛樺湪
         if (currentRangeArray.includes(newValue)) {
@@ -1244,7 +1251,7 @@
       this.$refs.form.validate((valid) => {
         if (valid) {
           if (this.dialogTitle === 'add') {
-            this.form.range = this.form.rangeValue.replace(/\n/g, ';');
+            this.form.range = this.form.rangeValue ? this.form.rangeValue.replace(/\n/g, ';') : '';
             if (this.form.attributeSelectType === 'business') {
               this.form.btmTypeId = this.form.referValue;
             } else {
@@ -1260,7 +1267,7 @@
             })
           }
           if (this.dialogTitle === 'edit') {
-            this.form.range = this.form.rangeValue.replace(/\n/g, ';');
+            this.form.range = this.form.rangeValue ? this.form.rangeValue.replace(/\n/g, ';') : '';
             if (this.form.attributeSelectType === 'business') {
               this.form.btmTypeId = this.form.referValue;
             } else {
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue
index db8d1af..0e8b0c5 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue
@@ -244,7 +244,9 @@
                     <el-form-item label="鏉冮檺鎺у埗">
                       <div style="display: flex;align-items: center">
                         <el-input v-model="form.itemRight" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
-                        <el-button plain size="mini" style="margin-left: 3px" type="success">閫夋嫨</el-button>
+                        <el-button plain size="mini" style="margin-left: 3px" type="success" @click="authClickHandler">
+                          閫夋嫨
+                        </el-button>
                       </div>
                     </el-form-item>
                   </el-col>
@@ -517,10 +519,12 @@
           </el-col>
 
           <el-col :span="24">
-            <el-form-item label="鏉冮檺鎺у埗">
+            <el-form-item label="灞炴�ф潈闄�">
               <div style="display: flex;align-items: center">
                 <el-input v-model="customForm.itemRight" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
-                <el-button plain size="mini" style="margin-left: 3px" type="success">閫夋嫨</el-button>
+                <el-button plain size="mini" style="margin-left: 3px" type="success" @click="customAuthClickHandler">
+                  閫夋嫨
+                </el-button>
               </div>
             </el-form-item>
           </el-col>
@@ -771,14 +775,42 @@
         </el-row>
       </el-form>
     </el-dialog>
+
+    <el-dialog
+      v-dialogDrag
+      :visible.sync="authVisible"
+      append-to-body="true"
+      class="avue-dialog"
+      title="鏉冮檺鎺у埗-浜哄憳鍒楄〃"
+      width="60%"
+      @close="authDialogClose">
+      <div style="height: 650px">
+        <div style="height: 600px;">
+          <avue-tree :key="refresh" ref="authTree" v-model="treeAuthForm" :data="treeAuthData" :option="treeAuthOption"
+                     @check-change="treeAuthCheckChange">
+              <span slot-scope="{ node, data }" class="el-tree-node__label">
+           <span style="font-size: 15px">
+              <i class="el-icon-s-promotion"></i>
+                {{ (node || {}).label }}
+            </span>
+          </span>
+          </avue-tree>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+         <el-button @click="authDialogClose">鍙� 娑�</el-button>
+         <el-button type="primary" @click="authDialogSaveHandler">纭� 瀹�</el-button>
+    </span>
+    </el-dialog>
   </el-dialog>
 </template>
 
 <script>
-import {getObjTypeQTs, getTreeAttributes, savePortalVI} from "@/api/UI/formDefine/api";
+import {getObjTypeQTs, getTreeAttributes, savePortalVI, refPersonOrgTree} from "@/api/UI/formDefine/api";
 import func from "@/util/func";
 import basicOption from "@/util/basic-option";
 import {gridAttribute} from "@/api/modeling/attributePool/api";
+import {getSysModelTreeMenuByPID} from "@/api/systemModel/mangeModel/api";
 
 export default {
   name: "formDialog",
@@ -800,6 +832,42 @@
   },
   data() {
     return {
+      authType: 'default',
+      refresh: Math.random(),
+      treeAuthOption: {
+        multiple: true,
+        height: 'auto',
+        menu: false,
+        addBtn: false,
+        defaultExpandAll: true,
+        lazy: true,
+        props: {
+          label: 'text',
+          value: 'oid',
+          children: 'childNodes',
+        },
+        treeLoad: (node, resolve) => {
+          // console.log(node);
+          const params = {
+            'conditionMap[dataType]': node.data.data,
+            'conditionMap[parentId]': node.data.data,
+            'conditionMap[orgType]': 'all'
+          }
+          refPersonOrgTree(node.level === 0 ? {} : params).then(res => {
+            resolve(res.data.treeData.map(item => {
+              return {
+                ...item,
+                id: item.id,
+                name: item.name,
+                leaf: item.leaf
+              }
+            }))
+          })
+        }
+      },
+      treeAuthData: [],
+      treeAuthForm: {},
+      authVisible: false,
       searchQtNameList: [],
       customAttrRow: {},
       customAttrOption: {
@@ -1045,7 +1113,7 @@
         text: data.text,
         oid: data.oid,
         itemType: 'text',
-        itemName:data.data.name
+        itemName: data.data.name
       }
       console.log(data);
       const isDuplicate = this.formList.some(item => item.text === data.text);
@@ -1370,6 +1438,57 @@
       })
     },
 
+    // 鏉冮檺閫夋嫨鎸夐挳
+    authClickHandler() {
+      this.authVisible = true;
+    },
+
+    // 鑷畾涔夎〃鍗曢�夋嫨鏉冮檺
+    customAuthClickHandler() {
+      this.authVisible = true;
+      this.authType = 'attr';
+    },
+
+    // 鏉冮檺鏍戝璇濇鍏抽棴
+    authDialogClose() {
+      this.authVisible = false;
+      this.refresh = Math.random(); // 鍒锋柊宸︿晶鏍�
+    },
+
+    // 鏉冮檺鎺у埗淇濆瓨
+    authDialogSaveHandler() {
+      const filterList = ['root', 'user', 'role', 'department']
+      const data = this.$refs.authTree.getCheckedNodes().filter(item => !filterList.includes(item.oid));
+      if (!data || data.length <= 0) {
+        this.$message.error('璇锋鏌ユ槸鍚﹀嬀閫夊瓙鑺傜偣');
+        return;
+      }
+
+      const resultMap = {};
+
+      data.forEach(item => {
+        const key = item.parentBtmName;
+        if (!resultMap[key]) {
+          resultMap[key] = []; // 鍒濆鍖栨暟缁�
+        }
+        resultMap[key].push(item.parentBtmName === 'user' ? item.data.userName : item.data.name);
+      });
+
+      // 缁勮瀛楃涓�
+      const resultString = Object.entries(resultMap).map(([key, oids]) => {
+        return `${key}=${oids.join(',')}`; // 鐢� , 杩炴帴鍚屼竴绫诲瀷鐨� oid
+      }).join('&&'); // 鏈�鍚庣敤 && 杩炴帴涓嶅悓绫诲瀷
+
+      // console.log(resultString);
+      if (this.authType === 'attr') {
+        this.customForm.itemRight = resultString;
+      } else {
+        this.form.itemRight = resultString;
+      }
+      // this.form.itemRight = resultString;
+      this.authDialogClose();
+    }
+
   }
 }
 </script>
diff --git a/Source/plt-web/plt-web-ui/src/views/system/user/option.js b/Source/plt-web/plt-web-ui/src/views/system/user/option.js
index 890f98b..0abfc0a 100644
--- a/Source/plt-web/plt-web-ui/src/views/system/user/option.js
+++ b/Source/plt-web/plt-web-ui/src/views/system/user/option.js
@@ -4,7 +4,6 @@
     prop: 'id',
     search:true,
     sortable:true,
-    editDisabled: true,
     rules: [
       {
         required: true,
@@ -137,7 +136,14 @@
   {
     label: '鎵�灞炲瘑绾�',
     prop: 'secretGradeText',
-    display:false,
-    width: 80
+    width: 80,
+    sortable: true,
+    type: 'select',
+    dicUrl: 'api/webEnumController/getEnum?comboxKey=usersecurityenum',
+    props: {
+      label: 'value',
+      value: 'key',
+      res: "obj",
+    },
   },
 ];

--
Gitblit v1.9.3