From 83aa382fd3b88ec7a564f14d41a9c8e5d43beeb3 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期一, 09 十二月 2024 10:26:31 +0800
Subject: [PATCH] 修改表单定义样式&&修改ui上下文btmName&&添加登录密码即将过期进入首页并提醒

---
 Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue |  320 ++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 228 insertions(+), 92 deletions(-)

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..f67bc3d 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
@@ -35,7 +35,7 @@
 
                 <span style="display: flex;align-items: center; margin-right: 5px;">
                  <p class="tableTopLabel">鏌ヨ妯℃澘鍚嶇О锛�</p>
-                  <el-select v-model="form.itemQtName" placeholder="璇烽�夋嫨鏌ヨ妯℃澘" size="mini">
+                  <el-select v-model="topForm.itemQtName" placeholder="璇烽�夋嫨鏌ヨ妯℃澘" size="mini">
                     <el-option v-for="(item,index) in searchQtNameList" :key="index" :label="item.qtName"
                                :value="item.qtName"></el-option>
                   </el-select>
@@ -75,28 +75,25 @@
                         <el-button icon="el-icon-edit" plain size="mini" style="height: 28px;"
                                    type="primary"></el-button>
                       </div>
-
                       <el-input
                         v-if="item.itemType === 'textarea' || item.itemType === 'richtext' || item.itemType === 'webeditor'"
                         v-model="item.value"
-                        :placeholder="item.text"
-                        :rows="2"
-                        type="textarea">
+                        :placeholder="item.text">
                       </el-input>
-
-                      <el-input-number v-if="item.itemType === 'number'" v-model="item.value" :max="99999"
-                                       :min="1"></el-input-number>
+                      <el-input-number v-if="item.itemType === 'number'" v-model="item.value" :max="99999" :min="1"
+                                       size="mini"></el-input-number>
                       <el-input v-if="item.itemType === 'password'" v-model="input" placeholder="璇疯緭鍏ュ瘑鐮�"
                                 show-password></el-input>
                       <el-radio v-if="item.itemType === 'radio'" v-model="item.value"></el-radio>
                       <el-checkbox v-if="item.itemType === 'checkbox'" v-model="item.value"></el-checkbox>
                       <el-select v-if="item.itemType === 'select' || item.itemType === 'multiselect'"
-                                 v-model="item.value" :disabled="true" placeholder="璇烽�夋嫨" size="mini">
+                                 v-model="item.value" :disabled="false" placeholder="璇烽�夋嫨" size="mini">
                       </el-select>
                       <el-date-picker
                         v-if="item.itemType === 'date' || item.itemType === 'datetime'"
                         v-model="item.value"
                         :placeholder="item.itemType === 'date' ? '璇烽�夋嫨鏃ユ湡' : '璇烽�夋嫨鏃ユ湡鏃堕棿'"
+                        class="formItemMargin"
                         type="date">
                       </el-date-picker>
 
@@ -108,6 +105,7 @@
                          step: '00:15',
                          end: '18:30'
                          }"
+                        class="formItemMargin"
                         placeholder="閫夋嫨鏃堕棿">
                       </el-time-select>
                       <el-button v-if="item.itemType === 'file'"
@@ -142,15 +140,20 @@
           <basic-container>
             <div style="height: 660px; overflow-y: auto;padding-right: 10px">
               <h3>璁剧疆</h3>
+              <h4 style="color: red">灞炴�ц缃俊鎭悗闇�鍗曞嚮鍙充笅瑙掑簲鐢ㄦ寜閽繘琛屽簲鐢�</h4>
               <el-form ref="form" :model="form" :rules="rules" label-position="left" label-width="85px">
                 <el-row style="border-bottom: 1px solid #878585;padding-bottom: 10px">
                   <el-col :span="24">
                     <el-form-item label="浣跨敤瀛楁">
-                      <div style="display: flex">
+                      <div style="display: flex;align-items: center">
                         <el-input v-model="form.text" :readonly="true" placeholder="璇疯緭鍏ヤ娇鐢ㄥ瓧娈�" size="mini"></el-input>
-                        <el-checkbox v-model="form.itemIsEditable" style="margin-left: 5px; margin-right: 5px">鍙
+                        <el-checkbox v-model="form.itemIsEditable" false-label="0"
+                                     style="margin-left: 5px; margin-right: 5px"
+                                     true-label="1">鍙
                         </el-checkbox>
-                        <el-checkbox v-model="form.itemIsRequired" style="margin-left: 5px;margin-right: 0px">蹇呭~
+                        <el-checkbox v-model="form.itemIsRequired" false-label="0"
+                                     style="margin-left: 5px;margin-right: 0px"
+                                     true-label="1">蹇呭~
                         </el-checkbox>
                       </div>
                     </el-form-item>
@@ -244,7 +247,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 +522,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>
@@ -606,7 +613,8 @@
                   :show-header="false"
                   border
                   stripe
-                  style="width: 100%">
+                  style="width: 100%"
+                  @row-click="customOptionTableClick">
                   <el-table-column
                     align="center"
                     label="鍚嶇О"
@@ -629,7 +637,9 @@
                 <el-button plain size="mini" style="margin-right: 5px" type="success"
                            @click="optionAddClickHandler('dialog')">娣诲姞
                 </el-button>
-                <el-button plain size="mini" style="margin-left: 5px" type="danger">鍒犻櫎</el-button>
+                <el-button plain size="mini" style="margin-left: 5px" type="danger"
+                           @click="optionDeleteClickHandler('dialog')">鍒犻櫎
+                </el-button>
               </div>
             </el-form-item>
           </el-col>
@@ -701,84 +711,111 @@
       append-to-body="true"
       class="avue-dialog"
       title="棰勮"
-      width="80%">
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-row>
-          <el-col v-for="(item,index) in formList" :key="index" :span="topForm.columnNumber">
-            <el-form-item :class="['hiddenLabel', { 'active-border': activeItem.text === item.text }]"
-                          :label="item.itemName + '锛�'"
-                          style="padding-left: 5px" @click.native="formItemClick(item,index)">
-              <el-input
-                v-if="item.itemType === 'text' ||
+      width="60%">
+      <div style="height: 600px">
+        <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+          <el-row>
+            <el-col v-for="(item,index) in formList" :key="index" :span="topForm.columnNumber">
+              <el-form-item :label="item.itemName + '锛�'" style="padding-left: 5px">
+                <el-input
+                  v-if="item.itemType === 'text' ||
                          item.itemType === 'custom' ||
                          item.itemType === 'customform'||
                          item.itemType === 'hidden' ||
                          item.itemType === 'specialCharacter'"
-                v-model="item.value" :placeholder="item.text"
-                size="mini"></el-input>
+                  v-model="item.value" :placeholder="item.text"
+                  size="mini"></el-input>
 
-              <div v-if="item.itemType === 'textbtn'" style="display: flex;align-items: center">
-                <el-input v-model="item.value" :placeholder="item.text" size="mini"></el-input>
-                <el-button icon="el-icon-edit" plain size="mini" style="height: 28px;"
-                           type="primary"></el-button>
-              </div>
+                <div v-if="item.itemType === 'textbtn'" style="display: flex;align-items: center">
+                  <el-input v-model="item.value" :placeholder="item.text" size="mini"></el-input>
+                  <el-button icon="el-icon-edit" plain size="mini" style="height: 28px;"
+                             type="primary"></el-button>
+                </div>
 
-              <el-input
-                v-if="item.itemType === 'textarea' || item.itemType === 'richtext' || item.itemType === 'webeditor'"
-                v-model="item.value"
-                :placeholder="item.text"
-                :rows="2"
-                type="textarea">
-              </el-input>
+                <el-input
+                  v-if="item.itemType === 'textarea' || item.itemType === 'richtext' || item.itemType === 'webeditor'"
+                  v-model="item.value"
+                  :placeholder="item.text">
+                </el-input>
 
-              <el-input-number v-if="item.itemType === 'number'" v-model="item.value" :max="99999"
-                               :min="1"></el-input-number>
-              <el-input v-if="item.itemType === 'password'" v-model="input" placeholder="璇疯緭鍏ュ瘑鐮�"
-                        show-password></el-input>
-              <el-radio v-if="item.itemType === 'radio'" v-model="item.value"></el-radio>
-              <el-checkbox v-if="item.itemType === 'checkbox'" v-model="item.value"></el-checkbox>
-              <el-select v-if="item.itemType === 'select' || item.itemType === 'multiselect'"
-                         v-model="item.value" :disabled="true" placeholder="璇烽�夋嫨" size="mini">
-              </el-select>
-              <el-date-picker
-                v-if="item.itemType === 'date' || item.itemType === 'datetime'"
-                v-model="item.value"
-                :placeholder="item.itemType === 'date' ? '璇烽�夋嫨鏃ユ湡' : '璇烽�夋嫨鏃ユ湡鏃堕棿'"
-                type="date">
-              </el-date-picker>
+                <el-input-number v-if="item.itemType === 'number'" v-model="item.value" :max="99999" :min="1"
+                                 size="mini"></el-input-number>
+                <el-input v-if="item.itemType === 'password'" v-model="input" placeholder="璇疯緭鍏ュ瘑鐮�"
+                          show-password></el-input>
+                <el-radio v-if="item.itemType === 'radio'" v-model="item.value"></el-radio>
+                <el-checkbox v-if="item.itemType === 'checkbox'" v-model="item.value"></el-checkbox>
+                <el-select v-if="item.itemType === 'select' || item.itemType === 'multiselect'"
+                           v-model="item.value" placeholder="璇烽�夋嫨" size="mini">
+                  <el-option v-for="(i,k) in item.itemKeyValueList" :key="l" :label="i.value"
+                             :value="i.key"></el-option>
+                </el-select>
+                <el-date-picker
+                  v-if="item.itemType === 'date' || item.itemType === 'datetime'"
+                  v-model="item.value"
+                  :placeholder="item.itemType === 'date' ? '璇烽�夋嫨鏃ユ湡' : '璇烽�夋嫨鏃ユ湡鏃堕棿'"
+                  type="date">
+                </el-date-picker>
 
-              <el-time-select
-                v-if="item.itemType === 'time'"
-                v-model="item.value"
-                :picker-options="{
+                <el-time-select
+                  v-if="item.itemType === 'time'"
+                  v-model="item.value"
+                  :picker-options="{
                          start: '08:30',
                          step: '00:15',
                          end: '18:30'
                          }"
-                placeholder="閫夋嫨鏃堕棿">
-              </el-time-select>
-              <el-button v-if="item.itemType === 'file'"
-                         v-model="item.value" plain size="mini" type="primary">
-                涓婁紶鏂囦欢
-              </el-button>
-              <el-button v-if="item.itemType === 'multiFile'"
-                         v-model="item.value" plain size="mini" type="primary">
-                澶氭枃浠朵笂浼�
-              </el-button>
+                  placeholder="閫夋嫨鏃堕棿">
+                </el-time-select>
+                <el-button v-if="item.itemType === 'file'"
+                           v-model="item.value" plain size="mini" type="primary">
+                  涓婁紶鏂囦欢
+                </el-button>
+                <el-button v-if="item.itemType === 'multiFile'"
+                           v-model="item.value" plain size="mini" type="primary">
+                  澶氭枃浠朵笂浼�
+                </el-button>
 
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-form>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </div>
+    </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 {gridAttribute} from "@/api/modeling/attributePool/api";
 import func from "@/util/func";
 import basicOption from "@/util/basic-option";
-import {gridAttribute} from "@/api/modeling/attributePool/api";
 
 export default {
   name: "formDialog",
@@ -800,6 +837,41 @@
   },
   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) => {
+          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: {
@@ -980,7 +1052,11 @@
           children: 'children',
         },
       },
-      treeData: []
+      treeData: [],
+      optionRow: {},
+      customOptionRow: {},
+      optionCurrentIndex: 0,
+      customOptionCurrentIndex: 0
     }
   },
   computed: {
@@ -988,7 +1064,6 @@
       const types = ['radio', 'checkbox', 'select'];
       return types.includes(this.form.itemType); // 灞曠ず
     },
-
     itemStyleTypeStatus() {
       const types = ['hidden', 'webeditor', 'radio', 'checkbox'];
       return !types.includes(this.form.itemType); // 涓嶅睍绀�
@@ -1045,9 +1120,11 @@
         text: data.text,
         oid: data.oid,
         itemType: 'text',
-        itemName:data.data.name
+        itemName: data.data.name,
+        itemCols: "1",
+        itemIsEditable: "0",
+        itemIsRequired: "0",
       }
-      console.log(data);
       const isDuplicate = this.formList.some(item => item.text === data.text);
 
       if (isDuplicate) {
@@ -1062,10 +1139,8 @@
       this.activeItem = item;
       this.activeItemIndex = index;
       this.form = {...item};
-      console.log(item);
-
-      // console.log(item,index);
       this.topForm.position = index += 1;
+      // this.$forceUpdate();
     },
 
     // 璁剧疆鏄剧ず琛屾暟
@@ -1133,7 +1208,7 @@
         this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛屽垹闄�');
         return;
       }
-      this.formList = this.formList.filter(item => item.text != this.activeItem.text);
+      this.formList = this.formList.filter(item => item.text !== this.activeItem.text);
       this.activeItem = {};
       this.form = {};
     },
@@ -1167,7 +1242,11 @@
 
     // 閫夐」琛ㄦ牸琛岀偣鍑�
     optionTableClick(row) {
-      console.log(row);
+      this.optionRow = row;
+    },
+
+    customOptionTableClick(row) {
+      this.customOptionRow = row;
     },
 
     // 閫夐」娣诲姞
@@ -1198,15 +1277,20 @@
 
       const params = {
         key: optionObj.optionName,
-        value: optionObj.optionValue
+        value: optionObj.optionValue,
+        index: val === 'dialog' ? this.customOptionCurrentIndex++ : this.optionCurrentIndex++
       };
 
       itemKeyValueList.push(params);
     },
 
     // 閫夐」鍒犻櫎
-    optionDeleteClickHandler() {
-
+    optionDeleteClickHandler(val) {
+      if (val === 'dialog') {
+        this.customForm.itemKeyValueList.splice(this.customOptionRow.index,1);
+      } else {
+        this.form.itemKeyValueList.splice(this.optionRow.index,1);
+      }
     },
 
     // 娣诲姞鑷畾涔夌粍浠�
@@ -1227,7 +1311,7 @@
       this.formList = this.formList.map(item => {
         return {
           ...item,
-          itemField: item.text // 灏唅temField璧嬪�间负text锛屽洜涓哄繕璁扮埗缁勪欢涓轰粈涔堝湪缂栬緫鍥炲~鏃舵妸itemField璧嬪�间负text浜�
+          itemField: item.text // 灏唅temField閲嶆柊璧嬪�间负text锛屽洜涓哄繕璁板綋鏃跺湪鐖剁粍浠剁紪杈戝洖濉柟娉曢噷涓轰粈涔堟妸itemField璧嬪�间负text浜�
         };
       });
       const params = {
@@ -1239,7 +1323,7 @@
         viType: 1, // 瑙嗗浘绫诲瀷
         viTypeText: "琛ㄥ崟", // 瑙嗗浘涓枃鍚嶇О
         prm: {
-          formQtName: '', // 鏌ヨ妯℃澘鍚嶇О
+          formQtName: this.topForm.itemQtName, // 鏌ヨ妯℃澘鍚嶇О
           showCols: this.topForm.showColumn,
           prmItemList: this.formList
         },
@@ -1249,6 +1333,7 @@
           this.$message.success(res.data.obj);
           this.visible = false;
           this.closeDialog();
+          this.$emit('updataTable');
         }
       })
       // this.visible = false;
@@ -1262,9 +1347,7 @@
       }
       if (!this.form.text) {
         this.$message.error('璇峰湪鍙充晶閫夋嫨鏁版嵁鍚庤繘琛屾搷浣滐紒');
-        return;
       }
-
     },
 
     // 鑷畾涔夌粍浠朵慨鏀规樉绀虹被鍨�
@@ -1340,7 +1423,6 @@
         this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛屼繚瀛�');
         return;
       }
-      // console.log(this.customAttrRow)
       this.customForm.text = this.customAttrRow.id;
       this.customAttrVisible = false;
     },
@@ -1351,6 +1433,7 @@
         this.$message.error('璇锋坊鍔犱竴鏉℃暟鎹繘琛屼繚瀛橈紒');
         return;
       }
+
       this.formList = this.formList.map(item =>
         item.text === this.form.text ? this.form : item
       );
@@ -1369,6 +1452,55 @@
         this.searchQtNameList = res.data.data;
       })
     },
+
+    // 鏉冮檺閫夋嫨鎸夐挳
+    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('&&'); // 鏈�鍚庣敤 && 杩炴帴涓嶅悓绫诲瀷
+
+      if (this.authType === 'attr') {
+        this.customForm.itemRight = resultString;
+      } else {
+        this.form.itemRight = resultString;
+      }
+      this.authDialogClose();
+    }
 
   }
 }
@@ -1408,4 +1540,8 @@
   font-size: 14px
 }
 
+//.formItemMargin {
+//  margin: 10px 0 10px 0;
+//}
+
 </style>

--
Gitblit v1.9.3