From a15371182ee7511ffdaa6f53d96b2103df0406a5 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期五, 18 十月 2024 15:00:08 +0800
Subject: [PATCH] 功能权限 ui授权 表单定义联调

---
 Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue |  224 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 202 insertions(+), 22 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 de71674..017da53 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
@@ -58,7 +58,64 @@
                     <el-form-item :class="['hiddenLabel', { 'active-border': activeItem.text === item.text }]"
                                   :label="item.text + '锛�'"
                                   style="padding-left: 5px" @click.native="formItemClick(item,index)">
-                      <el-input v-model="item.value" :placeholder="item.text" size="mini"></el-input>
+                      <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>
+
+                      <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-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-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>
+
                     </el-form-item>
                   </el-col>
                 </el-row>
@@ -79,14 +136,14 @@
 
         <el-aside width="25%">
           <basic-container>
-            <div style="height: 700px; overflow-y: auto;padding-right: 10px">
+            <div style="height: 660px; overflow-y: auto;padding-right: 10px">
               <h3>璁剧疆</h3>
               <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">
-                        <el-input v-model="form.text" placeholder="璇疯緭鍏ヤ娇鐢ㄥ瓧娈�" size="mini"></el-input>
+                        <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>
                         <el-checkbox v-model="form.itemIsRequired" style="margin-left: 5px;margin-right: 0px">蹇呭~
@@ -103,7 +160,7 @@
 
                   <el-col :span="12">
                     <el-form-item class="rightLabel" label="鏄剧ず绫诲瀷">
-                      <el-select v-model="form.itemType" placeholder="璇烽�夋嫨绫诲瀷" size="mini">
+                      <el-select v-model="form.itemType" placeholder="璇烽�夋嫨绫诲瀷" size="mini" @change="itemTypeChange">
                         <el-option v-for="(item,index) in showSelectList" :key="index" :label="item.label"
                                    :value="item.value"></el-option>
                       </el-select>
@@ -264,7 +321,7 @@
                     <el-form-item>
                       <div style="height: 150px; width: 100%; border: 1px solid #bdbbbb;overflow-y: auto">
                         <el-table
-                          :data="form.itemValueList"
+                          :data="form.itemKeyValueList"
                           :highlight-current-row="true"
                           :show-header="false"
                           border
@@ -334,6 +391,10 @@
 
               </el-form>
             </div>
+            <div style="display: flex;justify-content: right">
+              <el-button plain size="mini" style="margin-top: 10px" type="success" @click="asideFormHandler">搴旂敤
+              </el-button>
+            </div>
           </basic-container>
         </el-aside>
       </div>
@@ -353,8 +414,12 @@
         <el-row style="border-bottom: 1px solid #878585;padding-bottom: 10px">
           <el-col :span="24">
             <el-form-item label="浣跨敤瀛楁">
-              <div style="display: flex">
-                <el-input v-model="customForm.text" placeholder="璇疯緭鍏ヤ娇鐢ㄥ瓧娈�" size="mini"></el-input>
+              <div style="display: flex;align-items: center">
+                <div style="display: flex;align-items: center">
+                  <el-input v-model="customForm.text" placeholder="璇疯緭鍏ヤ娇鐢ㄥ瓧娈�" size="mini"></el-input>
+                  <el-button plain size="mini" style="margin-left: 3px" type="success" @click="customTextHandler">閫夋嫨
+                  </el-button>
+                </div>
                 <el-checkbox v-model="customForm.itemIsEditable" style="margin-left: 5px; margin-right: 5px">鍙
                 </el-checkbox>
                 <el-checkbox v-model="customForm.itemIsRequired" style="margin-left: 5px;margin-right: 0px">蹇呭~
@@ -513,7 +578,8 @@
 
         </el-row>
 
-        <el-row style="margin-top: 10px;border-bottom: 1px solid #878585;padding-bottom: 10px">
+        <el-row v-if="customForm.itemType ? customOptionTypeStatus : true"
+                style="margin-top: 10px;border-bottom: 1px solid #878585;padding-bottom: 10px">
           <h4>閫夐」鍒楄〃</h4>
           <el-col :span="12">
             <el-form-item label="鍚嶇О">
@@ -531,7 +597,7 @@
             <el-form-item>
               <div style="height: 150px; width: 100%; border: 1px solid #bdbbbb;overflow-y: auto">
                 <el-table
-                  :data="customForm.itemValueList"
+                  :data="customForm.itemKeyValueList"
                   :highlight-current-row="true"
                   :show-header="false"
                   border
@@ -582,7 +648,7 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row style="margin-top: 10px">
+        <el-row v-if="customForm.itemType ? customItemStyleTypeStatus : true" style="margin-top: 10px">
           <el-col :span="24" style="height: 90px">
             <el-form-item label="闄勫姞灞炴��">
               <el-input
@@ -599,14 +665,14 @@
       </el-form>
       <span slot="footer" class="dialog-footer">
          <el-button @click="customVisible = false">鍙� 娑�</el-button>
-         <el-button type="primary">纭� 瀹�</el-button>
+         <el-button type="primary" @click="customSaveHandler">纭� 瀹�</el-button>
     </span>
     </el-dialog>
   </el-dialog>
 </template>
 
 <script>
-import {getTreeAttributes} from "@/api/UI/formDefine/api";
+import {getTreeAttributes, savePortalVI} from "@/api/UI/formDefine/api";
 import func from "@/util/func";
 
 export default {
@@ -620,6 +686,11 @@
     treeRadio: {
       type: String,
       default: ""
+    },
+    editRow: {
+      type: Object,
+      default: () => {
+      }
     }
   },
   data() {
@@ -633,7 +704,8 @@
         optionValue: ''
       },
       customForm: {
-        itemValueList: [],
+        itemKeyValueList: [],
+        itemCols: '1'
       },
       customLoading: false,
       customVisible: false,
@@ -732,7 +804,7 @@
       form: {},
       topForm: {
         columnNumber: 8,
-        showColumn: '',
+        showColumn: '3',
         viName: '',
         position: ''
       },
@@ -769,7 +841,15 @@
     itemStyleTypeStatus() {
       const types = ['hidden', 'webeditor', 'radio', 'checkbox'];
       return !types.includes(this.form.itemType); // 涓嶅睍绀�
-    }
+    },
+    customOptionTypeStatus() {
+      const types = ['radio', 'checkbox', 'select'];
+      return types.includes(this.customForm.itemType); // 灞曠ず
+    },
+    customItemStyleTypeStatus() {
+      const types = ['hidden', 'webeditor', 'radio', 'checkbox'];
+      return !types.includes(this.customForm.itemType); // 涓嶅睍绀�
+    },
   },
   created() {
     // this.getTreeList();
@@ -778,7 +858,9 @@
     // 鍏抽棴瀵硅瘽妗�
     closeDialog() {
       this.formList = [];
-
+      this.form = {};
+      this.activeItem = {};
+      this.topForm.viName = "";
     },
 
     getTreeList() {
@@ -810,6 +892,7 @@
       const params = {
         text: data.text,
         oid: data.oid,
+        itemType: 'text'
       }
       const isDuplicate = this.formList.some(item => item.text === data.text);
 
@@ -825,6 +908,8 @@
       this.activeItem = item;
       this.activeItemIndex = index;
       this.form = {...item};
+      // console.log(item,index);
+      this.topForm.position = index += 1;
     },
 
     // 璁剧疆鏄剧ず琛屾暟
@@ -931,18 +1016,18 @@
 
     // 閫夐」娣诲姞
     optionAddClickHandler(val) {
-      let optionObj, itemValueList;
+      let optionObj, itemKeyValueList;
 
       if (val === 'dialog') {
         optionObj = this.customOptionObj;
-        itemValueList = this.customForm.itemValueList;
+        itemKeyValueList = this.customForm.itemKeyValueList;
       } else {
         if (func.isEmptyObject(this.activeItem)) {
           this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛屾坊鍔犻�夐」');
           return;
         }
         optionObj = this.optionObj;
-        itemValueList = this.form.itemValueList;
+        itemKeyValueList = this.form.itemKeyValueList;
       }
 
       if (!optionObj.optionName) {
@@ -960,7 +1045,7 @@
         value: optionObj.optionValue
       };
 
-      itemValueList.push(params);
+      itemKeyValueList.push(params);
     },
 
     // 閫夐」鍒犻櫎
@@ -983,8 +1068,103 @@
         this.$message.error('椤甸潰涓嶈兘涓虹┖');
         return;
       }
-      this.visible = false;
-      this.$message.success('淇濆瓨鎴愬姛');
+      this.formList = this.formList.map(item => {
+        return {
+          ...item,
+          itemField: item.text // 灏唅temField璧嬪�间负text锛屽洜涓哄繕璁扮埗缁勪欢涓轰粈涔堝湪缂栬緫鍥炲~鏃舵妸itemField璧嬪�间负text浜�
+        };
+      });
+      const params = {
+        id: this.editRow.id,// 淇敼鏃跺�欏繀浼�
+        typeFlag: this.treeRadio, // 涓氬姟绫诲瀷0 or 閾炬帴绫诲瀷1
+        typeFlagText: this.treeRadio === '0' ? '涓氬姟绫诲瀷鐨勮〃鍗�' : '閾炬帴绫诲瀷鐨勮〃鍗�',// 涓氬姟绫诲瀷鏄剧ず鍊�
+        typeName: this.treeRadio === '0' ? this.TreeNodeRow.id : this.TreeNodeRow.name, // 涓氬姟绫诲瀷鍚� or 閾炬帴绫诲瀷鍚�
+        viName: this.topForm.viName, // 瑙嗗浘鍚嶇О
+        viType: 1, // 瑙嗗浘绫诲瀷
+        viTypeText: "琛ㄥ崟", // 瑙嗗浘涓枃鍚嶇О
+        prm: {
+          formQtName: '', // 鏌ヨ妯℃澘鍚嶇О
+          showCols: this.topForm.showColumn,
+          prmItemList: this.formList
+        },
+      }
+      console.log(params);
+      savePortalVI(params).then(res => {
+        console.log(res);
+        if(res.data.code === 200){
+          this.$message.success(res.data.obj);
+          this.visible = false;
+          this.closeDialog();
+        }
+      })
+      // this.visible = false;
+      // this.$message.success('淇濆瓨鎴愬姛');
+    },
+
+    // 淇敼鏄剧ず绫诲瀷
+    itemTypeChange(val) {
+      if (val) {
+        this.clearFormBottom();
+      }
+      if (!this.form.text) {
+        this.$message.error('璇峰湪鍙充晶閫夋嫨鏁版嵁鍚庤繘琛屾搷浣滐紒');
+        return;
+      }
+      const targetObject = this.formList.find(item => item.text === this.form.text);
+
+      if (targetObject) {
+        targetObject.itemType = val;
+      }
+      this.form.itemType = val;
+    },
+
+    // 鑷畾涔夌粍浠朵繚瀛�
+    customSaveHandler() {
+      if (!this.customForm.text) {
+        this.$message.error('璇烽�夋嫨浣跨敤瀛楁');
+        return;
+      }
+      if (!this.customForm.itemType) {
+        this.$message.error('璇烽�夋嫨鏄剧ず绫诲瀷');
+        return;
+      }
+      this.formList.push(this.customForm);
+      this.customVisible = false;
+    },
+
+    // 鑷畾涔夊璇濇鍏抽棴
+    closeCustomDialog() {
+      this.customForm = {
+        itemKeyValueList: [],
+        itemType: 'text',
+        itemCols: '1'
+      };
+    },
+
+    // 娓呯┖涓嶅悓绫诲瀷琛ㄥ崟涓嬫柟缁戝畾鍊�
+    clearFormBottom() {
+      this.optionObj = {};
+      this.form.itemKeyValueList = [];
+      this.form.itemListTable = this.form.itemListTxt = this.form.itemListVal = this.form.itemStyle = "";
+    },
+
+    // 鑷畾涔夎〃鍗曚娇鐢ㄥ瓧娈甸�夋嫨
+    customTextHandler() {
+
+    },
+
+    // 鍙充晶琛ㄥ崟搴旂敤鎸夐挳
+    asideFormHandler() {
+
+    },
+
+    customClearFormBottom() {
+      this.optionObj = {};
+      this.form.itemKeyValueList = [];
+      this.form.itemListTable = "";
+      this.form.itemListTxt = "";
+      this.form.itemListVal = "";
+      this.form.itemStyle = "";
     }
   }
 }

--
Gitblit v1.9.3