From 3c6c92b68a1b113b5450554db750ebe1d8bd26bb Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期五, 20 九月 2024 15:16:14 +0800
Subject: [PATCH] 整合代码 action管理

---
 Source/plt-web/plt-web-ui/src/components/PLT-basic-component/transfer.vue                 |    1 
 Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/index.vue                  |  262 ++++
 Source/plt-web/plt-web-ui/src/util/func.js                                                |   26 
 Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/index.vue            |   11 
 Source/plt-web/plt-web-ui/src/api/UI/formDefine/api.js                                    |  122 ++
 Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/index.vue                      |  757 ++++++++++++++
 Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/option.js            |   37 
 Source/plt-web/plt-web-ui/src/views/systemModel/systemConfig/index.vue                    |   92 +
 /dev/null                                                                                 |   92 -
 Source/plt-web/plt-web-ui/src/api/UI/Action/api.js                                        |  120 ++
 Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/formDialog.vue  |  923 +++++++++++++----
 Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/attributePool/index.vue         |    2 
 Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/enumType/index.vue              |    2 
 Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/tableDialog.vue |  581 +++++++++-
 Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue          |    5 
 15 files changed, 2,522 insertions(+), 511 deletions(-)

diff --git a/Bin/tomcat/logs/host-manager.2024-03-04.log b/Bin/tomcat/logs/host-manager.2024-03-04.log
deleted file mode 100644
index e69de29..0000000
--- a/Bin/tomcat/logs/host-manager.2024-03-04.log
+++ /dev/null
diff --git a/Source/plt-web/plt-web-ui/src/api/UI/Action/api.js b/Source/plt-web/plt-web-ui/src/api/UI/Action/api.js
new file mode 100644
index 0000000..585655e
--- /dev/null
+++ b/Source/plt-web/plt-web-ui/src/api/UI/Action/api.js
@@ -0,0 +1,120 @@
+import request from '@/router/axios';
+
+// 琛ㄥ崟鍗曟潯鏌ヨ鎺ュ彛
+export function getActionTree(params) {
+  return request({
+    url: "/api/actionController/getActionTree",
+    method: "get",
+    params
+  });
+}
+
+// Action鏌ヨ鍒楄〃鎺ュ彛
+export function getActionTableData(params) {
+  return request({
+    url: "/api/actionController/getActionTableData",
+    method: "post",
+    data: params
+  });
+}
+
+// Action鍒楄〃鏂板缓鎺ュ彛
+export function saveAction(params) {
+  return request({
+    url: "/api/actionController/saveAction",
+    method: "post",
+    data: params
+  });
+}
+
+// Action鍒楄〃淇敼鎺ュ彛
+export function updateAction(params) {
+  return request({
+    url: "/api/actionController/updateAction",
+    method: "post",
+    data: params
+  });
+}
+
+// Action鍒楄〃瀵煎嚭
+export function exportAction(params) {
+  return request({
+    url: '/api/actionController/exportAction',
+    method: 'post',
+    headers: {'Content-Type': 'application/json;charset=UTF-8'},
+    responseType: 'blob',
+    data: params
+  })
+}
+
+// Action鍒楄〃鍒犻櫎鎺ュ彛
+export function deleteAction(params) {
+  return request({
+    url: "/api/actionController/deleteAction",
+    method: "delete",
+    data: params
+  });
+}
+
+// Action涓嬫柟鍙傛暟鍒楄〃鏌ヨ
+export function getPLActionParam(params) {
+  return request({
+    url: "/api/actionController/getPLActionParam",
+    method: "get",
+    params
+  });
+}
+
+// Action涓嬫柟鍙傛暟鍒楄〃淇濆瓨
+export function savePLActionParam(params) {
+  return request({
+    url: "/api/actionController/savePLActionParam",
+    method: "post",
+    data: params
+  });
+}
+
+// Action涓嬫柟鍙傛暟鍒楄〃缂栬緫
+export function updatePLActionParam(params) {
+  return request({
+    url: "/api/actionController/updatePLActionParam",
+    method: "post",
+    data: params
+  });
+}
+
+// Action涓嬫柟鍙傛暟鍒楄〃鍒犻櫎
+export function deletePLActionParam(params) {
+  return request({
+    url: "/api/actionController/deletePLActionParam",
+    method: "delete",
+    params
+  });
+}
+
+// Action鍒嗙被淇濆瓨
+export function saveActionCls(params) {
+  return request({
+    url: "/api/actionController/saveActionCls",
+    method: "post",
+    data: params
+  });
+}
+
+// Action鍒嗙被淇敼淇濆瓨
+export function updateActionCls(params) {
+  return request({
+    url: "/api/actionController/updateActionCls",
+    method: "post",
+    data: params
+  });
+}
+
+// Action鍒嗙被鍒犻櫎
+export function deleteActionCls(params) {
+  return request({
+    url: "/api/actionController/deleteActionCls",
+    method: "delete",
+    data:params
+  });
+}
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 6b3b930..8eb5d60 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
@@ -1,14 +1,132 @@
 import request from '@/router/axios';
 
 // 鍒楄〃鏌ヨ
-export function gridPortalVIDatas(page,limit,params) {
+export function gridPortalVIDatas(page, limit, params) {
   return request({
     url: "/api/portalVIController/gridPortalVIDatas",
     method: "get",
-    params:{
+    params: {
       page,
       limit,
       ...params
     }
   });
 }
+
+// 琛ㄥ崟鍗曟潯鏌ヨ鎺ュ彛
+export function getPortalVIById(params) {
+  return request({
+    url: "/api/portalVIController/getPortalVIById",
+    method: "get",
+    params
+  });
+}
+
+// 灞炴�ц秴閾炬帴绫诲瀷鎺ュ彛
+export function getItemDblList() {
+  return request({
+    url: "/api/portalVIController/getItemDblList",
+    method: "get",
+  });
+}
+
+// 琛ㄦ牸琛ㄥ崟淇濆瓨
+export function savePortalVI(params) {
+  return request({
+    url: "/api/portalVIController/savePortalVI",
+    method: "post",
+    data: params
+  });
+}
+
+// 灞炴�ф爲鐘舵帴鍙�
+export function getTreeAttributes(params) {
+  return request({
+    url: "/api/attributeController/getTreeAttributes",
+    method: "get",
+    params
+  })
+}
+
+// 閫氳繃id鍒犻櫎
+export function deleteByIds(params) {
+  return request({
+    url: "/api/portalVIController/deleteByIds",
+    method: "delete",
+    params
+  })
+}
+
+// 瀵煎嚭
+export function exportExcel (params) {
+  return request({
+    url: '/api/portalVIController/exportExcel',
+    method: 'post',
+    headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},
+    responseType: 'blob',
+    params
+  })
+}
+
+// 琛ㄥ崟鎺ュ彛娴嬭瘯鏁版嵁
+const obj = {
+  "itemAddFilter": "",
+  "itemBat": "",
+  "itemCols": "1",
+  "itemCtrlDisplyCol": "",
+  "itemCtrlDisplyCondition": "",
+  "itemCustomClass": "",
+  "itemCut": "",
+  "itemDateFormat": "",
+  "itemDbl": "",
+  "itemEQ": "",
+  "itemEditCondition": "",
+  "itemEditableProgram": "",
+  "itemField": "specialty",
+  "itemFieldWidth": "",
+  "itemFieldWidthList": [],
+  "itemHrefConf": "",
+  "itemHrefFields": "",
+  "itemHttpPathField": "",
+  "itemHttpVolumnPath": "",
+  "itemImgWH": "",
+  "itemInObj": "",
+  "itemIsEditable": "0",
+  "itemIsHidden": "1",
+  "itemIsHttpSave": "0",
+  "itemIsNavigatorExpand": "",
+  "itemIsRequired": "0",
+  "itemIsShowFolder": "",
+  "itemKeyFieldList": [],
+  "itemKeyFields": "",
+  "itemListTable": "",
+  "itemListTxt": "",
+  "itemListVal": "",
+  "itemName": "涓撲笟",
+  "itemOR": "",
+  "itemOutFieldList": [],
+  "itemOutFields": "",
+  "itemOutType": "",
+  "itemPageSize": "",
+  "itemParentFolderName": "",
+  "itemQtName": "",
+  "itemQueryRefFields": "",
+  "itemQuerySql": "",
+  "itemRight": "",
+  "itemRows": "",
+  "itemScript": "",
+  "itemSearchFieldList": [],
+  "itemSelectoutFieldList": [],
+  "itemSeniorQueryBOS": [],
+  "itemSeniorQueryCols": "",
+  "itemSeniorQueryColsCounts": "",
+  "itemShowExpression": "",
+  "itemStyle": "",
+  "itemTips": "",
+  "itemTrim": "",
+  "itemTxf": "",
+  "itemType": "text",
+  "itemTypeText": "鍗曡鏂囨湰妗�",
+  "itemValue": "",
+  "itemValueList": []
+}
diff --git a/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/transfer.vue b/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/transfer.vue
index e69bd83..bf99a6a 100644
--- a/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/transfer.vue
+++ b/Source/plt-web/plt-web-ui/src/components/PLT-basic-component/transfer.vue
@@ -73,6 +73,7 @@
   watch: {
     //娓叉煋绌挎妗�
     leftRoleData: {
+      // 闇�瑕佸湪鎵撳紑绌挎妗嗙粍浠剁殑鏃跺�欏leftRoleData杩涜璧嬪�硷紙鍙互鍙傝�僡ction绠$悊-action鍒楄〃 瀵煎嚭鍔熻兘锛� 濡傛灉鍦╠ata閲岄潰瀹氫箟鐨勬暟鎹紝缁勪欢鍐厀atch浼氱洃鍚笉鍒皀ewVal
       handler(newval) {
         if (newval) {
           // 娓呯┖data鏁扮粍
diff --git a/Source/plt-web/plt-web-ui/src/util/func.js b/Source/plt-web/plt-web-ui/src/util/func.js
index 03c02d3..e342467 100644
--- a/Source/plt-web/plt-web-ui/src/util/func.js
+++ b/Source/plt-web/plt-web-ui/src/util/func.js
@@ -4,6 +4,28 @@
 import CryptoJS from 'crypto-js'
 
 export default class func {
+  /**
+   * 鍗曢�夎〃鏍艰
+   * 鏃堕棿鎴虫牸寮忓寲
+   */
+  static formattedDate(val) {
+    // 鍒涘缓涓�涓� Date 瀵硅薄
+    const date = new Date(val);
+
+    // 鏍煎紡鍖栨椂闂寸殑杈呭姪鍑芥暟
+    const formatNumber = (number) => String(number).padStart(2, '0');
+
+    // 鎻愬彇骞舵牸寮忓寲骞淬�佹湀銆佹棩銆佸皬鏃躲�佸垎閽熷拰绉�
+    const year = date.getFullYear();
+    const month = formatNumber(date.getMonth() + 1); // 鏈堜唤浠�0寮�濮嬶紝闇�瑕�+1
+    const day = formatNumber(date.getDate());
+    const hours = formatNumber(date.getHours());
+    const minutes = formatNumber(date.getMinutes());
+    const seconds = formatNumber(date.getSeconds());
+
+    // 鏍煎紡鍖栦负 YYYY-MM-DD HH:MM:SS
+    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+  }
 
   /**
    * 鍗曢�夎〃鏍艰
@@ -223,7 +245,7 @@
       padding: CryptoJS.pad.Pkcs7
     });
     return encrypted.toString();
-}
+  }
 
   /**
    * HmacMD5鍔犲瘑
@@ -233,7 +255,7 @@
    * @constructor
    */
   static HmacMD5(message, key) {
-    const encrypted = CryptoJS.HmacMD5(message,key);
+    const encrypted = CryptoJS.HmacMD5(message, key);
     return encrypted.toString();
   }
 
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 ad7dfe9..0cd245d 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
@@ -18,7 +18,7 @@
           @current-change="currentChange"
         >
           <template slot="menuLeft" slot-scope="scope">
-            <el-button icon="el-icon-plus" size="small" type="primary" @click="rowSaveHandlerClick">鍒涘缓</el-button>
+            <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">涓嬭浇瀵煎叆妯℃澘
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue
index 00c4b4b..4a4fc6e 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue
@@ -908,7 +908,8 @@
         props: {
           label: 'TreeName',
           value: 'id',
-          children: 'children'
+          children: 'children',
+          name: 'name'
         }
       },
       treeData: [
@@ -927,7 +928,7 @@
         name: 'el-icon-tickets',
         desc: 'el-icon-chat-line-square'
       },
-      treeLoading:false
+      treeLoading: false
     }
   },
   created() {
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/enumType/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/enumType/index.vue
index 8ef3a18..16b6cb2 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/enumType/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/enumType/index.vue
@@ -16,7 +16,7 @@
         >
 
           <template slot="menuLeft" slot-scope="scope">
-            <el-button icon="el-icon-plus" size="small" type="primary" @click="rowSaveHandlerClick">鍒涘缓</el-button>
+            <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">涓嬭浇瀵煎叆妯℃澘
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/index.vue
index 276a7f3..5e6ad14 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/index.vue
@@ -18,7 +18,7 @@
                        @click="checkViewClickHandler">鏌ョ湅浣跨敤鑼冨洿
             </el-button>
           </div>
-          <!-- 宸︿晶鏍�         -->
+          <!-- 宸︿晶鏍� -->
           <div style="height:  calc(100vh - 260px);">
             <avue-tree :data="treeData" :option="treeOption" @node-click="nodeClick">
           <span slot-scope="{ node, data }" class="el-tree-node__label">
@@ -104,7 +104,7 @@
       </basic-container>
     </el-main>
 
-    <!-- 鏂板 淇敼   -->
+    <!-- 鏂板 淇敼 -->
     <el-dialog
       v-dialogDrag
       :title="dialogTitle === 'add' ? '鍒涘缓' : '淇敼'"
@@ -164,11 +164,11 @@
         </span>
     </el-dialog>
 
-    <!-- 瀵煎叆    -->
+    <!-- 瀵煎叆 -->
     <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" :tipList="tipList" title="瀵煎叆"
                  @updata="getTreeList"></upload-file>
 
-    <!-- 鏌ョ湅浣跨敤鑼冨洿    -->
+    <!-- 鏌ョ湅浣跨敤鑼冨洿 -->
     <el-dialog
       v-dialogDrag
       :visible.sync="checkViewVisible"
@@ -302,7 +302,7 @@
     this.getTreeList();
   },
   methods: {
-    //宸︿晶鏍戞煡璇�
+    // 宸︿晶鏍戞煡璇�
     getTreeList() {
       getVersionRuleAllList().then(res => {
         const data = res.data.data;
@@ -473,7 +473,6 @@
       width: 82px;
     }
   }
-
 }
 
 .headerCon {
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/option.js b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/option.js
new file mode 100644
index 0000000..5c37e9d
--- /dev/null
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/versioning/option.js
@@ -0,0 +1,37 @@
+export const column = [
+  {
+    label: '鍚嶇О',
+    prop: 'id',
+    sortable: true,
+  },
+  {
+    label: '鏍囩',
+    prop: 'name',
+    sortable: true,
+  },
+  {
+    label: '璺宠穬瀛楃',
+    prop: 'jumpCharacter',
+    sortable: true,
+  },
+  {
+    label: '鍒濆鍊�',
+    prop: 'initialValue',
+    sortable: true,
+  },
+  {
+    label: '鍓嶇紑',
+    prop: 'prefixion',
+    sortable: true,
+  },
+  {
+    label: '鍚庣紑',
+    prop: 'suffix',
+    sortable: true,
+  },
+  {
+    label: '鎻忚堪',
+    prop: 'description',
+    overHidden:true,
+  },
+];
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/index.vue
new file mode 100644
index 0000000..9c6c63e
--- /dev/null
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Aciton/index.vue
@@ -0,0 +1,757 @@
+<template>
+  <el-container>
+
+    <el-aside>
+      <basic-container>
+        <div ref="TreeBox" style="height: calc(100vh - 144px);!important;">
+          <div class="headerCon">
+            <el-button icon="el-icon-plus" plain size="small" type="primary" @click="addTreeClickHandler">鍒涘缓
+            </el-button>
+            <el-button icon="el-icon-edit" plain size="small" type="primary" @click="editTreeClickHandler">淇敼
+            </el-button>
+            <el-button icon="el-icon-delete" plain size="small" type="danger" @click="delTreeClickHandler">鍒犻櫎
+            </el-button>
+            <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">瀵煎嚭
+            </el-button>
+            <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="uploadClickHandler">瀵煎叆
+            </el-button>
+          </div>
+          <!-- 宸︿晶鏍� -->
+          <div style="height:  calc(100vh - 280px);">
+            <avue-tree
+              ref="tree"
+              v-model="treeForm"
+              :data="treeData"
+              :option="treeOption"
+              @save="rowTreeSaveHandler"
+              @update="rowTreeUpdataHandler"
+              @node-click="nodeClick">
+          <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>
+      </basic-container>
+    </el-aside>
+
+    <el-main>
+      <basic-container>
+        <div>
+          <avue-crud
+            ref="crud"
+            v-model="form"
+            :data="data"
+            :option="option"
+            :page.sync="page"
+            :table-loading="tableLoading"
+            @row-del="rowDelHandler"
+            @row-save="rowSaveHandler"
+            @row-update="rowUpdateHandler"
+            @search-change="handleSearch"
+            @search-reset="handleReset"
+            @refresh-change="handleRefresh"
+            @selection-change="selectChangeHandler"
+            @row-click="rowClickHandler">
+            <template slot="plTypeType" slot-scope="{row}">
+              <el-tag :type="row.plTypeType === 'business' ? '' : 'success'">
+                {{ row.plTypeType === 'business' ? '涓氬姟绫诲瀷' : '閾炬帴绫诲瀷' }}
+              </el-tag>
+            </template>
+            <template slot="menuLeft" slot-scope="scope">
+              <el-button v-if="treeNodeRow.id !== 'root'" icon="el-icon-plus" plain size="small" type="primary"
+                         @click="addClickHandler">澧炲姞
+              </el-button>
+              <el-button icon="el-icon-download" plain size="small" type="success" @click="downLoadHandler">瀵煎嚭
+              </el-button>
+            </template>
+          </avue-crud>
+        </div>
+
+        <div style="margin-top: 10px">
+          <avue-crud
+            ref="BottomCrud"
+            :data="bottomData"
+            :option="bottomOption"
+            :table-loading="bottomTableLoading"
+            @row-save="BottomRowSaveHandler"
+            @row-update="BottomRowUpdateHandler"
+            @row-del="BottomRowDelHandler"
+          >
+            <template slot="menuLeft" slot-scope="scope">
+              <el-button icon="el-icon-plus" plain size="small" type="primary" @click="bottomAddClickHandler">澧炲姞
+              </el-button>
+            </template>
+
+          </avue-crud>
+        </div>
+      </basic-container>
+    </el-main>
+
+    <transfer ref="transfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData"
+              :select-list="selectList" :top-methods-obj="topMethodsObj" :transferTitle="transferTitle" title="瀵煎嚭"
+              @transferSend="exportSendHandler">
+    </transfer>
+
+    <transfer ref="actionTransfer" :left-role-data="leftRoleData" :right-role-data="rightRoleData"
+              :select-list="selectList" :top-methods-obj="topMethodsObj" :transferTitle="transferTitle" title="瀵煎嚭"
+              @transferSend="exportSendHandler">
+    </transfer>
+
+  </el-container>
+</template>
+
+<script>
+import {
+  getActionTree,
+  getActionTableData,
+  saveAction,
+  updateAction,
+  exportAction,
+  deleteAction,
+  getPLActionParam,
+  savePLActionParam,
+  updatePLActionParam,
+  deletePLActionParam,
+  saveActionCls,
+  updateActionCls,
+  deleteActionCls
+} from '@/api/UI/Action/api'
+import func from "@/util/func";
+import basicOption from "@/util/basic-option";
+
+export default {
+  name: "index",
+  data() {
+    return {
+      currenRow: {}, // action褰撳墠琛屼俊鎭�
+      topMethodsObj: {
+        select: true,
+        all: true,
+        page: false
+      },
+      transferTitle: ['鏈�夋嫨', '宸查�夋嫨'],
+      leftRoleData: [],
+      rightRoleData: [],
+      form: {},
+      bottomTableLoading: false,
+      bottomData: [],
+      bottomOption: {
+        ...basicOption,
+        addBtn: false,
+        calcHeight: -30,
+        selection: false,
+        refreshBtn: false,
+        // height:'auto',
+        column: [
+          {
+            label: '鍙傛暟鍚嶇О',
+            prop: 'name',
+            rules: [
+              {
+                required: true,
+                message: '璇疯緭鍏ュ弬鏁板悕绉�',
+                trigger: 'blur'
+              }
+            ]
+          },
+          {
+            label: '榛樿鍊�',
+            prop: 'defaultValue',
+          },
+          {
+            label: '鎻愮ず淇℃伅',
+            prop: 'description',
+            span: 24,
+            type: 'textarea',
+            rows: 4
+          },
+        ],
+      },
+      tableLoading: false,
+      lastIndex: null,
+      selectList: [],
+      data: [],
+      option: {
+        ...basicOption,
+        addBtn: false,
+        height: 350,
+        highlightCurrentRow: true,
+        column: [
+          {
+            label: '缂栧彿',
+            prop: 'plCode',
+            search: true,
+            rules: [
+              {
+                required: true,
+                message: '璇疯緭鍏ョ紪鍙�',
+                trigger: 'blur'
+              }
+            ]
+          },
+          {
+            label: '鍚嶇О',
+            prop: 'plName',
+            search: true,
+            rules: [
+              {
+                required: true,
+                message: '璇疯緭鍏ュ悕绉�',
+                trigger: 'blur'
+              }
+            ]
+          },
+          {
+            label: '绫昏矾寰�',
+            prop: 'plCSClass',
+            search: true,
+            overHidden: true,
+          },
+          {
+            label: '鍒嗙被',
+            prop: 'plActionCls',
+            type: 'tree',
+            hide: true,
+            props: {
+              label: 'name',
+              value: 'id',
+              children: 'childs'
+            },
+            rules: [
+              {
+                required: true,
+                message: '璇烽�夋嫨鍒嗙被',
+                trigger: 'blur'
+              }
+            ],
+            dicData: []
+          },
+          {
+            label: '閾炬帴鍦板潃',
+            prop: 'plBSUrl',
+            search: true,
+          },
+          {
+            label: '绫诲瀷',
+            prop: 'plTypeType',
+            search: true,
+            type: 'select',
+            dicData: [{
+              label: '涓氬姟绫诲瀷',
+              value: 'business'
+            }, {
+              label: '閾炬帴绫诲瀷',
+              value: 'link'
+            }],
+            rules: [
+              {
+                required: true,
+                message: '璇烽�夋嫨绫诲瀷',
+                trigger: 'blur'
+              }
+            ]
+          },
+          {
+            label: '鎻忚堪',
+            prop: 'plDesc',
+            search: true,
+            overHidden: true,
+          },
+        ]
+      },
+      treeNodeRow: {},
+      treeForm: {},
+      treeOption: {
+        addBtn: false,
+        defaultExpandedKeys: ['root'],
+        props: {
+          label: 'name',
+          value: 'id',
+          children: 'childs'
+        },
+        formOption: {
+          column: [
+            {
+              label: '鍒嗙被鍚嶇О',
+              prop: 'name',
+              rules: [
+                {
+                  required: true,
+                  message: '璇疯緭鍏ュ垎绫诲悕绉�',
+                  trigger: 'blur'
+                }
+              ]
+            },
+            {
+              label: '鍒嗙被搴忓彿',
+              prop: 'serialno',
+              rules: [
+                {
+                  required: true,
+                  message: '璇疯緭鍏ュ垎绫诲簭鍙�',
+                  trigger: 'blur'
+                }
+              ]
+            },
+            {
+              label: '鍒涘缓鑰�',
+              prop: 'creator',
+              readonly: true,
+            },
+            {
+              label: '鍒涘缓鏃堕棿',
+              prop: 'createTime',
+              readonly: true,
+            },
+            {
+              label: '鐖朵富绫�',
+              prop: 'pidName',
+              readonly: true,
+            },
+            {
+              label: '澶囨敞',
+              prop: 'description'
+            },
+          ],
+        }
+      },
+      treeData: [],
+    }
+  },
+  created() {
+    this.getTreeList();
+  },
+  methods: {
+    // 宸︿晶鏍戣姹�
+    getTreeList(status) {
+      const params = {
+        isExp: status ? true : false
+      }
+      getActionTree(params).then(res => {
+        const data = res.data.obj;
+        this.treeData = [data];
+        const selectTreeData = this.option.column.find(item => item.prop === 'plActionCls'); // 鎵惧埌action娣诲姞鍒嗙被鏍�
+        selectTreeData.dicData = [data];
+      })
+    },
+
+    // 宸︿晶鏍戣鐐瑰嚮
+    nodeClick(row) {
+      this.treeNodeRow = row;
+      this.getRightTableList(row);
+      this.bottomData = [];
+    },
+
+    // 澶撮儴鍒锋柊鎸夐挳
+    handleRefresh() {
+      if (func.isEmptyObject(this.treeNodeRow)) {
+        return;
+      }
+      this.getRightTableList(this.treeNodeRow);
+    },
+
+    // 鍙充晶琛ㄦ牸淇℃伅
+    getRightTableList(row) {
+      this.tableLoading = true;
+      const params = {
+        plactioncls: row.id
+      }
+      getActionTableData(params).then(res => {
+        const data = res.data.data;
+        this.data = data;
+        this.tableLoading = false;
+      })
+    },
+
+    // 琛ㄦ牸澶氶��
+    selectChangeHandler(row) {
+      this.selectList = row;
+    },
+
+    // 琛岀偣鍑�
+    rowClickHandler(row) {
+      this.currenRow = row;
+      func.rowClickHandler(
+        row,
+        this.$refs.crud,
+        this.lastIndex,
+        (newIndex) => {
+          this.lastIndex = newIndex;
+        },
+        () => {
+          this.selectList = [];
+        }
+      );
+
+      // 璇锋眰action涓嬫柟鍙傛暟鍒楄〃鏁版嵁
+      this.getBottomList(row);
+    },
+
+    // 鎼滅储
+    handleSearch(params, done) {
+      if (func.isEmptyObject(this.treeNodeRow)) {
+        this.$message.error('璇峰厛鍦ㄥ乏渚ч�夋嫨鑺傜偣鍚庢搷浣�');
+        return done();
+      }
+      this.tableLoading = true;
+      const apiParams = {
+        plactioncls: this.treeNodeRow.id === 'root' ? '' : this.treeNodeRow.id,
+        ...params
+      }
+
+      getActionTableData(apiParams).then(res => {
+        const data = res.data.data;
+        this.data = data;
+        this.tableLoading = false;
+      })
+      done();
+    },
+
+    // 閲嶇疆鎼滅储鏉′欢
+    handleReset() {
+      if (func.isEmptyObject(this.treeNodeRow)) {
+        this.$message.error('璇峰厛鍦ㄥ乏渚ч�夋嫨鑺傜偣鍚庢搷浣�');
+        return;
+      }
+      this.getRightTableList(this.treeNodeRow);
+    },
+
+    // action鍒楄〃澧炲姞
+    addClickHandler() {
+      if (func.isEmptyObject(this.treeNodeRow)) {
+        this.$message.error('璇峰厛鍦ㄥ乏渚ч�夋嫨鑺傜偣鍚庢搷浣�');
+        return;
+      }
+      this.$refs.crud.rowAdd();
+      this.form.plActionCls = this.treeNodeRow.id;
+    },
+
+    // action鍒楄〃澧炲姞淇濆瓨
+    rowSaveHandler(form, done, loading) {
+      saveAction(form).then(res => {
+        if (res.data.code === 200) {
+          this.$message.success('娣诲姞鎴愬姛');
+          this.getRightTableList(this.treeNodeRow);
+        }
+        done();
+      })
+      loading();
+    },
+
+    // action鍒楄〃淇敼淇濆瓨
+    rowUpdateHandler(row, index, done, loading) {
+      updateAction(row).then(res => {
+        if (res.data.code === 200) {
+          this.$message.success('淇敼鎴愬姛');
+          this.getRightTableList(this.treeNodeRow);
+        }
+        done();
+      })
+      loading();
+    },
+
+    // 瀵煎嚭鎸夐挳
+    downLoadHandler() {
+      if (func.isEmptyObject(this.treeNodeRow)) {
+        this.$message.error('璇峰厛鍦ㄥ乏渚ч�夋嫨鑺傜偣鍚庢搷浣�');
+        return;
+      }
+
+      this.leftRoleData = [{
+        name: '缂栧彿',
+        oid: '缂栧彿'
+      },
+        {
+          name: '绫昏矾寰�',
+          oid: '绫昏矾寰�'
+        },
+        {
+          name: '閾炬帴鍦板潃',
+          oid: '閾炬帴鍦板潃'
+        },
+        {
+          name: '绫诲瀷',
+          oid: '绫诲瀷'
+        },
+        {
+          name: '鎻忚堪',
+          oid: '鎻忚堪'
+        },]
+      this.$refs.transfer.visible = true;
+    },
+
+    // 绌挎妗嗕繚瀛� index涓�0鏄�夋嫨 1鏄叏閮�
+    exportSendHandler(row, index) {
+      console.log(row, index);
+      const params = {
+        dataType: index,
+        chooseDataOid: index === 0 ? this.selectList.map(item => item.plOId) : [],
+        columnName: row,
+        fileName: 'Action鍒楄〃鏁版嵁'
+      }
+
+      exportAction(params).then(res => {
+        func.downloadFileByBlobHandler(res);
+        this.$message.success('瀵煎嚭鎴愬姛');
+      }).catch(err => {
+        this.$message.error(err);
+      })
+    },
+
+    // action鍒楄〃琛屽垹闄�
+    rowDelHandler(row, index) {
+      this.$confirm('鎮ㄧ‘瀹氳鍒犻櫎褰撳墠鏁版嵁鍚楋紵', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        deleteAction(row).then(res => {
+          if (res.data.code === 200) {
+            this.$message.success('鍒犻櫎鎴愬姛');
+            this.getRightTableList(this.treeNodeRow);
+          }
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+
+    // 鍙傛暟鍒楄〃鏌ヨ
+    getBottomList() {
+      this.bottomTableLoading = true;
+      getPLActionParam({actionOid: this.currenRow.plOId}).then(res => {
+        const data = res.data.data;
+        this.bottomData = data;
+        this.bottomTableLoading = false;
+      })
+    },
+
+    // 鍙傛暟鍒楄〃澧炲姞鎸夐挳
+    bottomAddClickHandler() {
+      if (this.selectList.length <= 0) {
+        this.$message.error('娓呭厛閫夋嫨action鍐嶈繘琛屽弬鏁板垱寤�');
+        return;
+      }
+      this.$refs.BottomCrud.rowAdd();
+    },
+
+    // 鍙傛暟鍒楄〃鏂板淇濆瓨
+    BottomRowSaveHandler(form, done, loading) {
+      savePLActionParam(form).then(res => {
+        if (res.data.code === 200) {
+          this.$message.success('娣诲姞鎴愬姛');
+          this.getBottomList();
+        }
+        done();
+      })
+      loading();
+    },
+
+    // 鍙傛暟鍒楄〃淇敼淇濆瓨
+    BottomRowUpdateHandler(row, index, done, loading) {
+      updatePLActionParam(row).then(res => {
+        if (res.data.code === 200) {
+          this.$message.success('淇敼鎴愬姛');
+          this.getBottomList();
+        }
+        done();
+      })
+      loading();
+    },
+
+    // 鍙傛暟鍒楄〃鍒犻櫎
+    BottomRowDelHandler(row, index) {
+      this.$confirm('鎮ㄧ‘瀹氳鍒犻櫎褰撳墠鏁版嵁鍚楋紵', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        deletePLActionParam({oid: row.oid}).then(res => {
+          if (res.data.code === 200) {
+            this.$message.success('鍒犻櫎鎴愬姛');
+            this.getBottomList();
+          }
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+
+    // 宸︿晶鏍戝垱寤�
+    addTreeClickHandler() {
+      if (func.isEmptyObject(this.treeNodeRow)) {
+        this.$message.error('璇烽�夋嫨涓�鏉″垎绫昏繘琛屾坊鍔�');
+        return;
+      }
+
+      const {createTime, creator, name, id, description} = this.treeNodeRow;
+      this.$set(this.treeForm, 'createTime', func.formattedDate(createTime));
+      this.$set(this.treeForm, 'creator', creator);
+      this.$set(this.treeForm, 'pid', id);
+      this.$set(this.treeForm, 'pidName', name);
+      this.$refs.tree.rowAdd();
+
+    },
+
+    // action鍒嗙被淇濆瓨
+    rowTreeSaveHandler(node, data, done, loading) {
+      saveActionCls(data).then(res => {
+        if (res.data.code === 200) {
+          this.$message.success('鍒嗙被鍒涘缓鎴愬姛');
+          this.getTreeList();
+        }
+        done();
+      })
+      loading();
+    },
+
+    // action鍒嗙被淇敼鎸夐挳
+    editTreeClickHandler() {
+      if (func.isEmptyObject(this.treeNodeRow)) {
+        this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛屼慨鏀�');
+        return;
+      }
+
+      if (this.treeNodeRow.id === 'root') {
+        this.$message.error('鏍硅妭鐐逛笉鑳戒慨鏀�');
+        return;
+      }
+      const {name, serialno, creator, createTime, pid, description, id} = this.treeNodeRow;
+      const pidName = this.findObjectNameById(this.treeData, pid);
+      this.$set(this.treeForm, 'name', name);
+      this.$set(this.treeForm, 'id', id);
+      this.$set(this.treeForm, 'serialno', serialno);
+      this.$set(this.treeForm, 'creator', creator);
+      this.$set(this.treeForm, 'createTime', func.formattedDate(createTime));
+      this.$set(this.treeForm, 'pid', pid);
+      this.$set(this.treeForm, 'pidName', pidName);
+      this.$set(this.treeForm, 'description', description);
+
+      this.$refs.tree.rowEdit();
+    },
+
+    // action鍒嗙被淇敼淇濆瓨
+    rowTreeUpdataHandler(node, data, done, loading) {
+      updateActionCls(data).then(res => {
+        if (res.data.code === 200) {
+          this.$message.success('淇敼鎴愬姛');
+          this.getBottomList();
+        }
+        done();
+      })
+      loading();
+    },
+
+    // 閫掑綊閫氳繃pid鏌ユ壘鐖朵富绫诲悕绉�
+    findObjectNameById(data, id) {
+      for (let item of data) {
+        if (item.id === id) {
+          return item.name;
+        }
+        if (item.childs && item.childs.length > 0) {
+          const result = this.findObjectNameById(item.childs, id);
+          if (result) {
+            return result;
+          }
+        }
+      }
+      return 'null';
+    },
+
+    // action鍒嗙被鍒犻櫎
+    delTreeClickHandler() {
+      if (func.isEmptyObject(this.treeNodeRow)) {
+        this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛屽垹闄�');
+        return;
+      }
+
+      if (this.treeNodeRow.id === 'root') {
+        this.$message.error('鏍硅妭鐐逛笉鑳藉垹闄�');
+        return;
+      }
+
+      this.$confirm('鎮ㄧ‘瀹氳鍒犻櫎褰撳墠鏁版嵁鍚楋紵', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        deleteActionCls(this.treeNodeRow).then(res => {
+          if (res.data.code === 200) {
+            this.$message.success('鍒嗙被鍒犻櫎鎴愬姛');
+            this.getTreeList();
+          }
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+
+    // action鍒嗙被瀵煎嚭
+    exportClickHandler() {
+
+    },
+
+    // action鍒嗙被瀵煎叆
+    uploadClickHandler() {
+
+    }
+
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep {
+  .el-scrollbar__wrap {
+    overflow: auto !important;
+  }
+
+  .headerCon {
+    .el-button {
+      width: 82px;
+    }
+  }
+}
+
+.headerCon {
+  display: flex;
+  flex-wrap: wrap;
+  margin-bottom: 5px;
+
+  .el-button + .el-button {
+    margin-left: 5px;
+  }
+
+  .el-button {
+    margin-top: 5px;
+  }
+}
+
+.headerCon > .el-button:nth-child(4) {
+  margin-left: 0;
+}
+
+.headerCon > .el-button:nth-child(7) {
+  margin-left: 0;
+}
+
+.smallBtn {
+  width: 82px;
+  text-align: center;
+  padding-left: 4.5px;
+}
+
+</style>
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Action/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Action/index.vue
deleted file mode 100644
index 308c333..0000000
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/Action/index.vue
+++ /dev/null
@@ -1,92 +0,0 @@
-<template>
-  <el-container>
-
-    <el-aside>
-      <basic-container>
-        <div ref="TreeBox" style="height: calc(100vh - 144px);!important;">
-          <div class="headerCon">
-            <el-button icon="el-icon-plus" plain size="small" type="primary" @click="addClickHandler">鍒涘缓
-            </el-button>
-            <el-button icon="el-icon-edit" plain size="small" type="primary" @click="editClickHandler">淇敼
-            </el-button>
-            <el-button icon="el-icon-delete" plain size="small" type="danger" @click="delClickHandler">鍒犻櫎
-            </el-button>
-            <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">瀵煎嚭
-            </el-button>
-            <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="uploadClickHandler">瀵煎叆
-            </el-button>
-            <el-button class="smallBtn" plain size="small" type="primary"
-                       @click="checkViewClickHandler">鏌ョ湅浣跨敤鑼冨洿
-            </el-button>
-          </div>
-          <!-- 宸︿晶鏍�         -->
-          <div style="height:  calc(100vh - 280px);">
-            <avue-tree :data="treeData" :option="treeOption" @node-click="nodeClick">
-          <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>
-      </basic-container>
-    </el-aside>
-
-    <el-main>
-      <basic-container>
-      </basic-container>
-    </el-main>
-
-  </el-container>
-</template>
-
-<script>
-export default {
-  name: "index"
-}
-</script>
-
-<style lang="scss" scoped>
-::v-deep {
-  .el-scrollbar__wrap {
-    overflow: auto !important;
-  }
-  .headerCon{
-    .el-button{
-      width: 82px;
-    }
-  }
-}
-
-.headerCon {
-  display: flex;
-  flex-wrap: wrap;
-  margin-bottom: 5px;
-
-  .el-button + .el-button {
-    margin-left: 5px;
-  }
-
-  .el-button {
-    margin-top: 5px;
-  }
-}
-
-.headerCon > .el-button:nth-child(4) {
-  margin-left: 0;
-}
-
-.headerCon > .el-button:nth-child(7) {
-  margin-left: 0;
-}
-
-
-.smallBtn {
-  width: 82px;
-  text-align: center;
-  padding-left: 4.5px;
-}
-
-</style>
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 36620ac..cd500be 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
@@ -11,12 +11,12 @@
   >
     <el-container>
       <div style="height: 79vh;display: flex;width: 100%;">
-
-        <el-aside width="15%">
+        <el-aside width="17%">
           <basic-container>
             <div style="height:650px;">
               <avue-tree
                 :data="treeData"
+                :loading="treeLoading"
                 :option="treeOption"
                 @node-drag-start="handleDragStart">
               </avue-tree>
@@ -26,48 +26,52 @@
 
         <el-main>
           <basic-container>
-            <div style="height: 645px" @drop="drop" @dragover.prevent>
+            <div style="height: 645px;overflow-y: auto;padding-right: 5px" @drop="drop" @dragover.prevent>
               <div style="display: flex;justify-content: center">
                 <span style="display: flex;align-items: center; margin-right: 5px;">
                  <p class="tableTopLabel">鍚嶇О锛�</p>
-                 <el-input v-model="name" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                 <el-input v-model="topForm.viName" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                 </span>
 
                 <span style="display: flex;align-items: center; margin-right: 5px;">
                  <p class="tableTopLabel">鏌ヨ妯℃澘鍚嶇О锛�</p>
-                 <el-input v-model="name" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                 <el-input v-model="form.itemQtName" placeholder="璇疯緭鍏ユ煡璇㈡ā鏉垮悕绉�" size="mini"></el-input>
                 </span>
 
                 <span style="display: flex;align-items: center; margin-right: 5px;">
                  <p class="tableTopLabel">鏄剧ず鍒楁暟锛�</p>
-                 <el-input v-model="name" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
-                  <el-button plain size="mini" style="margin-left: 3px" type="success">璁剧疆</el-button>
+                 <el-input v-model="topForm.showColumn" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                  <el-button plain size="mini" style="margin-left: 3px" type="success"
+                             @click="setColumnHandler">璁剧疆</el-button>
                 </span>
 
                 <span style="display: flex;align-items: center; margin-right: 5px;">
                  <p class="tableTopLabel">浣嶇疆锛�</p>
-                 <el-input v-model="name" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
-                  <el-button plain size="mini" style="margin-left: 3px" type="success">璋冩暣浣嶇疆</el-button>
+                 <el-input v-model="topForm.position" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                  <el-button plain size="mini" style="margin-left: 3px" type="success" @click="positionClickHandler">璋冩暣浣嶇疆</el-button>
                 </span>
               </div>
               <h3>椤甸潰瀹氫箟</h3>
               <el-form ref="form" :model="form" :rules="rules" label-width="100px">
                 <el-row>
-                  <el-col v-for="(item,index) in formList" :key="index" :span="columnNumber">
-                    <el-tooltip :content="item.name" placement="top">
-                      <el-form-item :label="item.name + '锛�'" class="hiddenLabel">
-                        <el-input v-model="item.value" :splaceholder="item.name" size="mini"></el-input>
-                      </el-form-item>
-                    </el-tooltip>
+                  <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.text + '锛�'"
+                                  style="padding-left: 5px" @click.native="formItemClick(item,index)">
+                      <el-input v-model="item.value" :placeholder="item.text" size="mini"></el-input>
+                    </el-form-item>
                   </el-col>
                 </el-row>
               </el-form>
             </div>
             <div style="display: flex;justify-content: center;margin-top: 15px">
-              <el-button icon="el-icon-check" size="small" type="primary">淇濆瓨</el-button>
-              <el-button icon="el-icon-delete" plain size="small" type="danger">娓呯┖</el-button>
-              <el-button icon="el-icon-el-icon-close" plain size="small" type="primary">鍒犻櫎缁勪欢</el-button>
-              <el-button icon="el-icon-plus" plain size="small" type="primary">娣诲姞鑷畾涔夌粍浠�</el-button>
+              <el-button icon="el-icon-check" size="small" type="primary" @click="saveClickHandler">淇濆瓨</el-button>
+              <el-button icon="el-icon-delete" plain size="small" type="danger" @click="emptyClickHandler">娓呯┖
+              </el-button>
+              <el-button icon="el-icon-close" plain size="small" type="primary" @click="delModuleClickHandler">鍒犻櫎缁勪欢
+              </el-button>
+              <el-button icon="el-icon-plus" plain size="small" type="primary" @click="addCustomClickHandler">娣诲姞鑷畾涔夌粍浠�
+              </el-button>
               <el-button icon="el-icon-zoom-in" plain size="small" type="primary">棰勮</el-button>
             </div>
           </basic-container>
@@ -82,24 +86,26 @@
                   <el-col :span="24">
                     <el-form-item label="浣跨敤瀛楁">
                       <div style="display: flex">
-                        <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
-                        <el-checkbox v-model="checked" style="margin-left: 5px; margin-right: 5px">鍙</el-checkbox>
-                        <el-checkbox v-model="checked" style="margin-left: 5px;margin-right: 0px">蹇呭~</el-checkbox>
+                        <el-input v-model="form.text" 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">蹇呭~
+                        </el-checkbox>
                       </div>
                     </el-form-item>
                   </el-col>
 
                   <el-col :span="12">
                     <el-form-item label="鏄剧ず鍚嶇О">
-                      <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                      <el-input v-model="form.itemName" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                     </el-form-item>
                   </el-col>
 
                   <el-col :span="12">
                     <el-form-item class="rightLabel" label="鏄剧ず绫诲瀷">
-                      <el-select v-model="form.region" placeholder="璇烽�夋嫨娲诲姩鍖哄煙" size="mini">
-                        <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-                        <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+                      <el-select v-model="form.itemType" placeholder="璇烽�夋嫨绫诲瀷" size="mini">
+                        <el-option v-for="(item,index) in showSelectList" :key="index" :label="item.label"
+                                   :value="item.value"></el-option>
                       </el-select>
                     </el-form-item>
                   </el-col>
@@ -107,38 +113,38 @@
                   <el-col :span="24">
                     <el-tooltip content="榛樿鍊艰〃杈惧紡" placement="top">
                       <el-form-item class="hiddenLabel" label="榛樿鍊艰〃杈惧紡">
-                        <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                        <el-input v-model="form.itemValue" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                       </el-form-item>
                     </el-tooltip>
                   </el-col>
 
                   <el-col :span="24">
-                    <!--                    <el-tooltip content="鏄剧ず琛ㄨ揪寮�" placement="top">-->
+                    <!-- <el-tooltip content="鏄剧ず琛ㄨ揪寮�" placement="top">-->
                     <el-form-item label="鏄剧ず琛ㄨ揪寮�">
-                      <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                      <el-input v-model="form.itemShowExpression" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                     </el-form-item>
-                    <!--                    </el-tooltip>-->
+                    <!-- </el-tooltip>-->
                   </el-col>
 
                   <el-col :span="24">
                     <el-tooltip content="鏃ユ湡鏍煎紡鍖栧瓧绗︿覆" placement="top">
                       <el-form-item class="hiddenLabel" label="鏃ユ湡鏍煎紡鍖栧瓧绗︿覆锛�">
-                        <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                        <el-input v-model="form.itemDateFormat" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                       </el-form-item>
                     </el-tooltip>
                   </el-col>
 
                   <el-col :span="24">
                     <el-form-item label="鍗犱綅鏂瑰紡">
-                      <el-radio v-model="treeRadio" label="0">鏄剧ず</el-radio>
-                      <el-radio v-model="treeRadio" label="1">涓嶆樉绀�</el-radio>
+                      <el-radio v-model="form.itemCols" label="1">鏄剧ず</el-radio>
+                      <el-radio v-model="form.itemCols" label="2">涓嶆樉绀�</el-radio>
                     </el-form-item>
                   </el-col>
 
                   <el-col :span="24" style="height: 90px">
                     <el-form-item label="瀛楁琛ㄨ揪寮�">
                       <el-input
-                        v-model="textarea2"
+                        v-model="form.itemAddFilter"
                         :rows="3"
                         placeholder="璇疯緭鍏ュ唴瀹�"
                         resize="none"
@@ -151,7 +157,7 @@
                     <el-tooltip content="鍙閫夋嫨鏉′欢" placement="top">
                       <el-form-item class="hiddenLabel" label="鍙閫夋嫨鏉′欢">
                         <el-input
-                          v-model="textarea2"
+                          v-model="form.itemEditableProgram"
                           :rows="3"
                           placeholder="璇疯緭鍏ュ唴瀹�"
                           resize="none"
@@ -163,20 +169,20 @@
 
                   <el-col :span="12">
                     <el-form-item label="鎺у埗鍒�">
-                      <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                      <el-input v-model="form.itemCtrlDisplyCol" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                     </el-form-item>
                   </el-col>
 
                   <el-col :span="12">
                     <el-form-item class="rightLabel" label="鏄剧ず鍒楁潯浠�" label-width="95px">
-                      <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                      <el-input v-model="form.itemCtrlDisplyCondition" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                     </el-form-item>
                   </el-col>
 
                   <el-col :span="24">
                     <el-form-item label="鏉冮檺鎺у埗">
                       <div style="display: flex;align-items: center">
-                        <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                        <el-input v-model="form.itemRight" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                         <el-button plain size="mini" style="margin-left: 3px" type="success">閫夋嫨</el-button>
                       </div>
                     </el-form-item>
@@ -187,7 +193,7 @@
                   <el-col :span="24" style="height: 90px">
                     <el-form-item label="鑴氭湰楠岃瘉">
                       <el-input
-                        v-model="textarea2"
+                        v-model="form.itemScript"
                         :rows="3"
                         placeholder="璇疯緭鍏ュ唴瀹�"
                         resize="none"
@@ -199,7 +205,7 @@
                   <el-col :span="24" style="height: 90px">
                     <el-form-item label="鎻愮ず鏂囧瓧">
                       <el-input
-                        v-model="textarea2"
+                        v-model="form.itemTips"
                         :rows="3"
                         placeholder="璇疯緭鍏ュ唴瀹�"
                         resize="none"
@@ -210,19 +216,19 @@
 
                   <el-col :span="24">
                     <el-form-item label="鏌ヨ鍏宠仈鍒�">
-                      <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                      <el-input v-model="form.itemQueryRefFields" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                     </el-form-item>
                   </el-col>
 
                   <el-col :span="24">
                     <el-form-item label="鑷畾涔夌被">
-                      <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                      <el-input v-model="form.itemCustomClass" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                     </el-form-item>
                   </el-col>
 
                   <el-col :span="24">
                     <el-form-item label="瀛樺偍璺緞">
-                      <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                      <el-input v-model="form.itemHttpVolumnPath" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                     </el-form-item>
                   </el-col>
 
@@ -230,8 +236,8 @@
                     <el-tooltip content="瀛樺偍璺緞瀛楁" placement="top">
                       <el-form-item class="hiddenLabel" label="瀛樺偍璺緞瀛楁">
                         <div style="display: flex">
-                          <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
-                          <el-checkbox v-model="checked" style="margin-left: 5px">http瀛樺偍</el-checkbox>
+                          <el-input v-model="form.itemHttpPathField" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                          <el-checkbox v-model="form.itemIsHttpSave" style="margin-left: 5px">http瀛樺偍</el-checkbox>
                         </div>
                       </el-form-item>
                     </el-tooltip>
@@ -239,17 +245,18 @@
 
                 </el-row>
 
-                <el-row style="margin-top: 10px;border-bottom: 1px solid #878585;padding-bottom: 10px">
+                <el-row v-if="form.itemType ? optionTypeStatus : true"
+                        style="margin-top: 10px;border-bottom: 1px solid #878585;padding-bottom: 10px">
                   <h4>閫夐」鍒楄〃</h4>
                   <el-col :span="12">
                     <el-form-item label="鍚嶇О">
-                      <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                      <el-input v-model="optionObj.optionName" placeholder="璇疯緭鍏ュ悕绉�" size="mini"></el-input>
                     </el-form-item>
                   </el-col>
 
                   <el-col :span="12">
                     <el-form-item class="rightLabel" label="鍊�" label-width="95px">
-                      <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                      <el-input v-model="optionObj.optionValue" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                     </el-form-item>
                   </el-col>
 
@@ -257,18 +264,19 @@
                     <el-form-item>
                       <div style="height: 150px; width: 100%; border: 1px solid #bdbbbb;overflow-y: auto">
                         <el-table
-                          :data="optionRightData"
+                          :data="form.itemValueList"
                           :highlight-current-row="true"
                           :show-header="false"
                           border
                           stripe
-                          style="width: 100%">
+                          style="width: 100%"
+                          @row-click="optionTableClick">
                           <el-table-column
                             align="center"
                             label="鍚嶇О"
-                            prop="name">
+                            prop="key">
                             <template slot-scope="scope">
-                              <el-tag size="medium">{{ scope.row.name }}</el-tag>
+                              <el-tag size="medium">{{ scope.row.key }}</el-tag>
                             </template>
                           </el-table-column>
                           <el-table-column
@@ -282,36 +290,39 @@
                         </el-table>
                       </div>
                       <div style="display: flex;align-items: center;justify-content: center;margin-top: 5px">
-                        <el-button plain size="mini" style="margin-right: 5px" type="success">娣诲姞</el-button>
-                        <el-button plain size="mini" style="margin-left: 5px" type="danger">鍒犻櫎</el-button>
+                        <el-button plain size="mini" style="margin-right: 5px" type="success"
+                                   @click="optionAddClickHandler">娣诲姞
+                        </el-button>
+                        <el-button plain size="mini" style="margin-left: 5px" type="danger"
+                                   @click="optionDeleteClickHandler">鍒犻櫎
+                        </el-button>
                       </div>
                     </el-form-item>
                   </el-col>
 
                   <el-col :span="24">
                     <el-form-item label="涓�绾у弬鐓�">
-                      <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                      <el-input v-model="form.itemListTable" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                     </el-form-item>
                   </el-col>
 
                   <el-col :span="24">
                     <el-form-item label="浜岀骇鍙傜収">
-                      <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                      <el-input v-model="form.itemListTxt" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                     </el-form-item>
                   </el-col>
 
                   <el-col :span="24">
                     <el-form-item label="鍙傜収鍊�">
-                      <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                      <el-input v-model="form.itemListVal" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
                     </el-form-item>
                   </el-col>
                 </el-row>
-
-                <el-row style="margin-top: 10px">
+                <el-row v-if="form.itemType ? itemStyleTypeStatus : true" style="margin-top: 10px">
                   <el-col :span="24" style="height: 90px">
                     <el-form-item label="闄勫姞灞炴��">
                       <el-input
-                        v-model="textarea2"
+                        v-model="form.itemStyle"
                         :rows="3"
                         placeholder="璇疯緭鍏ュ唴瀹�"
                         resize="none"
@@ -325,19 +336,392 @@
             </div>
           </basic-container>
         </el-aside>
-
       </div>
-
     </el-container>
+
+    <!-- 娣诲姞鑷畾涔夌粍浠� -->
+    <el-dialog
+      v-dialogDrag
+      v-loading="customLoading"
+      :visible.sync="customVisible"
+      append-to-body="true"
+      class="avue-dialog"
+      title="琛ㄥ崟"
+      width="40%"
+      @close="closeCustomDialog">
+      <el-form ref="form" :model="customForm" :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="customForm.text" placeholder="璇疯緭鍏ヤ娇鐢ㄥ瓧娈�" size="mini"></el-input>
+                <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">蹇呭~
+                </el-checkbox>
+              </div>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item label="鏄剧ず鍚嶇О">
+              <el-input v-model="customForm.itemName" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item class="rightLabel" label="鏄剧ず绫诲瀷">
+              <el-select v-model="customForm.itemType" placeholder="璇烽�夋嫨绫诲瀷" size="mini">
+                <el-option v-for="(item,index) in showSelectList" :key="index" :label="item.label"
+                           :value="item.value"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24">
+            <el-tooltip content="榛樿鍊艰〃杈惧紡" placement="top">
+              <el-form-item class="hiddenLabel" label="榛樿鍊艰〃杈惧紡">
+                <el-input v-model="customForm.itemValue" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+              </el-form-item>
+            </el-tooltip>
+          </el-col>
+
+          <el-col :span="24">
+            <!--                    <el-tooltip content="鏄剧ず琛ㄨ揪寮�" placement="top">-->
+            <el-form-item label="鏄剧ず琛ㄨ揪寮�">
+              <el-input v-model="customForm.itemShowExpression" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            </el-form-item>
+            <!--                    </el-tooltip>-->
+          </el-col>
+
+          <el-col :span="24">
+            <el-tooltip content="鏃ユ湡鏍煎紡鍖栧瓧绗︿覆" placement="top">
+              <el-form-item class="hiddenLabel" label="鏃ユ湡鏍煎紡鍖栧瓧绗︿覆锛�">
+                <el-input v-model="customForm.itemDateFormat" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+              </el-form-item>
+            </el-tooltip>
+          </el-col>
+
+          <el-col :span="24">
+            <el-form-item label="鍗犱綅鏂瑰紡">
+              <el-radio v-model="customForm.itemCols" label="1">鏄剧ず</el-radio>
+              <el-radio v-model="customForm.itemCols" label="2">涓嶆樉绀�</el-radio>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24" style="height: 90px">
+            <el-form-item label="瀛楁琛ㄨ揪寮�">
+              <el-input
+                v-model="customForm.itemAddFilter"
+                :rows="3"
+                placeholder="璇疯緭鍏ュ唴瀹�"
+                resize="none"
+                type="textarea">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24" style="height: 90px">
+            <el-tooltip content="鍙閫夋嫨鏉′欢" placement="top">
+              <el-form-item class="hiddenLabel" label="鍙閫夋嫨鏉′欢">
+                <el-input
+                  v-model="customForm.itemEditableProgram"
+                  :rows="3"
+                  placeholder="璇疯緭鍏ュ唴瀹�"
+                  resize="none"
+                  type="textarea">
+                </el-input>
+              </el-form-item>
+            </el-tooltip>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item label="鎺у埗鍒�">
+              <el-input v-model="customForm.itemCtrlDisplyCol" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item class="rightLabel" label="鏄剧ず鍒楁潯浠�" label-width="95px">
+              <el-input v-model="customForm.itemCtrlDisplyCondition" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24">
+            <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>
+              </div>
+            </el-form-item>
+          </el-col>
+
+        </el-row>
+        <el-row style="margin-top: 10px;border-bottom: 1px solid #878585;padding-bottom: 10px">
+          <el-col :span="24" style="height: 90px">
+            <el-form-item label="鑴氭湰楠岃瘉">
+              <el-input
+                v-model="customForm.itemScript"
+                :rows="3"
+                placeholder="璇疯緭鍏ュ唴瀹�"
+                resize="none"
+                type="textarea">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24" style="height: 90px">
+            <el-form-item label="鎻愮ず鏂囧瓧">
+              <el-input
+                v-model="customForm.itemTips"
+                :rows="3"
+                placeholder="璇疯緭鍏ュ唴瀹�"
+                resize="none"
+                type="textarea">
+              </el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24">
+            <el-form-item label="鏌ヨ鍏宠仈鍒�">
+              <el-input v-model="customForm.itemQueryRefFields" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24">
+            <el-form-item label="鑷畾涔夌被">
+              <el-input v-model="customForm.itemCustomClass" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24">
+            <el-form-item label="瀛樺偍璺緞">
+              <el-input v-model="customForm.itemHttpVolumnPath" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24">
+            <el-tooltip content="瀛樺偍璺緞瀛楁" placement="top">
+              <el-form-item class="hiddenLabel" label="瀛樺偍璺緞瀛楁">
+                <div style="display: flex">
+                  <el-input v-model="customForm.itemHttpPathField" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                  <el-checkbox v-model="customForm.itemIsHttpSave" style="margin-left: 5px">http瀛樺偍</el-checkbox>
+                </div>
+              </el-form-item>
+            </el-tooltip>
+          </el-col>
+
+        </el-row>
+
+        <el-row style="margin-top: 10px;border-bottom: 1px solid #878585;padding-bottom: 10px">
+          <h4>閫夐」鍒楄〃</h4>
+          <el-col :span="12">
+            <el-form-item label="鍚嶇О">
+              <el-input v-model="customOptionObj.optionName" placeholder="璇疯緭鍏ュ悕绉�" size="mini"></el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="12">
+            <el-form-item class="rightLabel" label="鍊�" label-width="95px">
+              <el-input v-model="customOptionObj.optionValue" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24" style="height: 190px">
+            <el-form-item>
+              <div style="height: 150px; width: 100%; border: 1px solid #bdbbbb;overflow-y: auto">
+                <el-table
+                  :data="customForm.itemValueList"
+                  :highlight-current-row="true"
+                  :show-header="false"
+                  border
+                  stripe
+                  style="width: 100%">
+                  <el-table-column
+                    align="center"
+                    label="鍚嶇О"
+                    prop="key">
+                    <template slot-scope="scope">
+                      <el-tag size="medium">{{ scope.row.key }}</el-tag>
+                    </template>
+                  </el-table-column>
+                  <el-table-column
+                    align="center"
+                    label="鍊�"
+                    prop="value">
+                    <template slot-scope="scope">
+                      <el-tag size="medium">{{ scope.row.value }}</el-tag>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </div>
+              <div style="display: flex;align-items: center;justify-content: center;margin-top: 5px">
+                <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>
+              </div>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24">
+            <el-form-item label="涓�绾у弬鐓�">
+              <el-input v-model="customForm.itemListTable" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24">
+            <el-form-item label="浜岀骇鍙傜収">
+              <el-input v-model="customForm.itemListTxt" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24">
+            <el-form-item label="鍙傜収鍊�">
+              <el-input v-model="customForm.itemListVal" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row style="margin-top: 10px">
+          <el-col :span="24" style="height: 90px">
+            <el-form-item label="闄勫姞灞炴��">
+              <el-input
+                v-model="customForm.itemStyle"
+                :rows="3"
+                placeholder="璇疯緭鍏ュ唴瀹�"
+                resize="none"
+                type="textarea">
+              </el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+         <el-button @click="customVisible = false">鍙� 娑�</el-button>
+         <el-button type="primary">纭� 瀹�</el-button>
+    </span>
+    </el-dialog>
   </el-dialog>
 </template>
 
 <script>
+import {getTreeAttributes} from "@/api/UI/formDefine/api";
+import func from "@/util/func";
 
 export default {
   name: "formDialog",
+  props: {
+    TreeNodeRow: {
+      type: Object,
+      default: () => {
+      }
+    },
+    treeRadio: {
+      type: String,
+      default: ""
+    }
+  },
   data() {
     return {
+      optionObj: {
+        optionName: '',
+        optionValue: ''
+      },
+      customOptionObj: {
+        optionName: '',
+        optionValue: ''
+      },
+      customForm: {
+        itemValueList: [],
+      },
+      customLoading: false,
+      customVisible: false,
+      treeLoading: false,
+      showSelectList: [
+        {
+          label: '鍗曡鏂囨湰妗�',
+          value: 'text'
+        },
+        {
+          label: '鏂囨湰鎸夐挳妗�',
+          value: 'textbtn'
+        },
+        {
+          label: '澶氳鏂囨湰妗�',
+          value: 'textarea'
+        },
+        {
+          label: '瀵屾枃鏈',
+          value: 'richtext'
+        },
+        {
+          label: '鏁板瓧杈撳叆妗�',
+          value: 'number'
+        },
+        {
+          label: '瀵嗙爜妗�',
+          value: 'password'
+        },
+        {
+          label: '鍗曢�夋寜閽�',
+          value: 'radio'
+        },
+        {
+          label: '澶氶�夋寜閽�',
+          value: 'checkbox'
+        },
+        {
+          label: '涓嬫媺鑿滃崟',
+          value: 'select'
+        },
+        {
+          label: '澶氶�変笅鎷夎彍鍗�',
+          value: 'multiselect'
+        },
+        {
+          label: '鏃ユ湡杈撳叆妗�',
+          value: 'date'
+        },
+        {
+          label: '鏃堕棿杈撳叆妗�',
+          value: 'time'
+        },
+        {
+          label: '鏃ユ湡鏃堕棿杈撳叆妗�',
+          value: 'datetime'
+        },
+        {
+          label: '鏂囦欢涓婁紶',
+          value: 'file'
+        },
+        {
+          label: '澶氭枃浠朵笂浼�',
+          value: 'multiFile'
+        },
+        {
+          label: '鑷畾涔�',
+          value: 'custom'
+        },
+        {
+          label: '鑷畾涔夎〃鍗�',
+          value: 'customform'
+        },
+        {
+          label: '闅愯棌鎴栨櫘閫氭枃瀛�',
+          value: 'hidden'
+        },
+        {
+          label: 'Web缂栬緫鍣�',
+          value: 'webeditor'
+        },
+        {
+          label: '鐗规畩瀛楃',
+          value: 'specialCharacter'
+        },
+      ],
+      activeItem: {}, // 鐢ㄤ簬瀛樺偍褰撳墠鐐瑰嚮鐨� item 鐨勮妭鐐逛俊鎭�
+      activeItemIndex: null, // 鐢ㄤ簬瀛樺偍褰撳墠鐐瑰嚮鑺傜偣鐨� index 涓嬫爣
       formList: [],
       optionRightData: [
         {
@@ -346,208 +730,71 @@
         }
       ],
       form: {},
+      topForm: {
+        columnNumber: 8,
+        showColumn: '',
+        viName: '',
+        position: ''
+      },
       rules: {},
-      columnNumber: 3,
       loading: false,
       visible: false,
       treeOption: {
+        height: 'auto',
         menu: false,
         addBtn: false,
         draggable: true,
+        defaultExpandedKeys: ['root'],
         allowDrop: () => {
           return false;
         },
         allowDrag: () => {
           return true;
         },
-        // props: {
-        //   label: 'name',
-        //   value: 'id',
-        //   children: 'children',
-        // },
+        props: {
+          label: 'text',
+          value: 'oid',
+          children: 'children',
+        },
       },
-      treeData: [
-        {
-          value: 0,
-          label: '涓�绾ч儴闂�',
-          children: [
-            {
-              value: 1,
-              label: '涓�绾ч儴闂�1',
-            }, {
-              value: 2,
-              label: '涓�绾ч儴闂�2',
-            }
-          ]
-        }, {
-          value: 3,
-          label: '浜岀骇閮ㄩ棬',
-          children: [
-            {
-              value: 4,
-              label: '浜岀骇閮ㄩ棬1',
-            }, {
-              value: 5,
-              label: '浜岀骇閮ㄩ棬2',
-            }
-          ]
-        },
-        {
-          value: 0,
-          label: '涓�绾ч儴闂�',
-          children: [
-            {
-              value: 1,
-              label: '涓�绾ч儴闂�1',
-            }, {
-              value: 2,
-              label: '涓�绾ч儴闂�2',
-            }
-          ]
-        }, {
-          value: 3,
-          label: '浜岀骇閮ㄩ棬',
-          children: [
-            {
-              value: 4,
-              label: '浜岀骇閮ㄩ棬1',
-            }, {
-              value: 5,
-              label: '浜岀骇閮ㄩ棬2',
-            }
-          ]
-        },
-        {
-          value: 0,
-          label: '涓�绾ч儴闂�',
-          children: [
-            {
-              value: 1,
-              label: '涓�绾ч儴闂�1',
-            }, {
-              value: 2,
-              label: '涓�绾ч儴闂�2',
-            }
-          ]
-        }, {
-          value: 3,
-          label: '浜岀骇閮ㄩ棬',
-          children: [
-            {
-              value: 4,
-              label: '浜岀骇閮ㄩ棬1',
-            }, {
-              value: 5,
-              label: '浜岀骇閮ㄩ棬2',
-            }
-          ]
-        },
-        {
-          value: 0,
-          label: '涓�绾ч儴闂�',
-          children: [
-            {
-              value: 1,
-              label: '涓�绾ч儴闂�1',
-            }, {
-              value: 2,
-              label: '涓�绾ч儴闂�2',
-            }
-          ]
-        }, {
-          value: 3,
-          label: '浜岀骇閮ㄩ棬',
-          children: [
-            {
-              value: 4,
-              label: '浜岀骇閮ㄩ棬1',
-            }, {
-              value: 5,
-              label: '浜岀骇閮ㄩ棬2',
-            }
-          ]
-        },
-        {
-          value: 0,
-          label: '涓�绾ч儴闂�',
-          children: [
-            {
-              value: 1,
-              label: '涓�绾ч儴闂�1',
-            }, {
-              value: 2,
-              label: '涓�绾ч儴闂�2',
-            }
-          ]
-        }, {
-          value: 3,
-          label: '浜岀骇閮ㄩ棬',
-          children: [
-            {
-              value: 4,
-              label: '浜岀骇閮ㄩ棬1',
-            }, {
-              value: 5,
-              label: '浜岀骇閮ㄩ棬2',
-            }
-          ]
-        },
-        {
-          value: 0,
-          label: '涓�绾ч儴闂�',
-          children: [
-            {
-              value: 1,
-              label: '涓�绾ч儴闂�1',
-            }, {
-              value: 2,
-              label: '涓�绾ч儴闂�2',
-            }
-          ]
-        }, {
-          value: 3,
-          label: '浜岀骇閮ㄩ棬',
-          children: [
-            {
-              value: 4,
-              label: '浜岀骇閮ㄩ棬1',
-            }, {
-              value: 5,
-              label: '浜岀骇閮ㄩ棬2',
-            }
-          ]
-        },
-        {
-          value: 0,
-          label: '涓�绾ч儴闂�',
-          children: [
-            {
-              value: 1,
-              label: '涓�绾ч儴闂�1',
-            }, {
-              value: 2,
-              label: '涓�绾ч儴闂�2',
-            }
-          ]
-        }, {
-          value: 3,
-          label: '浜岀骇閮ㄩ棬',
-          children: [
-            {
-              value: 4,
-              label: '浜岀骇閮ㄩ棬1',
-            }, {
-              value: 5,
-              label: '浜岀骇閮ㄩ棬2',
-            }
-          ]
-        }
-      ]
+      treeData: []
     }
+  },
+  computed: {
+    optionTypeStatus() {
+      const types = ['radio', 'checkbox', 'select'];
+      return types.includes(this.form.itemType); // 灞曠ず
+    },
+
+    itemStyleTypeStatus() {
+      const types = ['hidden', 'webeditor', 'radio', 'checkbox'];
+      return !types.includes(this.form.itemType); // 涓嶅睍绀�
+    }
+  },
+  created() {
+    // this.getTreeList();
   },
   methods: {
     // 鍏抽棴瀵硅瘽妗�
     closeDialog() {
+      this.formList = [];
+
+    },
+
+    getTreeList() {
+      this.treeLoading = true;
+      const params = {
+        'conditionMap[typeName]': this.treeRadio === '0' ? this.TreeNodeRow.id : this.TreeNodeRow.name,
+        'conditionMap[isDefault]': true,
+        'conditionMap[typeFlag]': this.treeRadio === '0' ? 'BtmType' : this.treeRadio === '1' ? 'LinkType' : '',
+      }
+      getTreeAttributes(params).then(res => {
+        if (res.data.code === 200) {
+          const data = res.data.data;
+          this.treeData = data;
+          this.treeLoading = false;
+        }
+      })
     },
 
     // 寮�濮嬫嫋鎷芥爲鑺傜偣浜嬩欢
@@ -560,13 +807,183 @@
     drop(event) {
       // 浣跨敤 getData 鏂规硶鑾峰彇鏁版嵁
       const data = JSON.parse(event.dataTransfer.getData('item'));
-      console.log('data', data);
       const params = {
-        name: data.label,
-        value: '',
-        type: ''
+        text: data.text,
+        oid: data.oid,
       }
-      this.formList.push(params)
+      const isDuplicate = this.formList.some(item => item.text === data.text);
+
+      if (isDuplicate) {
+        this.$message.error('璇锋鏌ユ槸鍚︽坊鍔犵浉鍚岄」锛�')
+      } else {
+        this.formList.push(params);
+      }
+    },
+
+    // 椤甸潰瀹氫箟閫夐」鐐瑰嚮
+    formItemClick(item, index) {
+      this.activeItem = item;
+      this.activeItemIndex = index;
+      this.form = {...item};
+    },
+
+    // 璁剧疆鏄剧ず琛屾暟
+    setColumnHandler() {
+      const number = /^[0-9]*\.?[0-9]+$/.test(this.topForm.showColumn);
+
+      if (!number) {
+        this.$message.error('鍊煎繀椤绘槸鏁板瓧瀛楃');
+        return;
+      }
+      this.topForm.columnNumber = this.getValueBasedOnInput(this.topForm.showColumn);
+    },
+
+    // 鏍规嵁浼犲叆姣忚鍒楁暟 鏉ュ垽鏂璭l-col :span鏄灏�
+    getValueBasedOnInput(val) {
+      const n = JSON.parse(val ? val : '3');
+      switch (n) {
+        case 1:
+          return 24;
+        case 2:
+          return 12;
+        case 3:
+          return 8;
+        case 4:
+          return 6;
+        case 5:
+          return 4;
+        case 6:
+          return 4;
+        case 7:
+        case 8:
+          return 3;
+        case 9:
+          return 2;
+        default:
+          return n > 10 ? 1 : 8; // 榛樿缁�8
+      }
+    },
+
+    // 娓呯┖椤甸潰瀹氫箟
+    emptyClickHandler() {
+      this.$confirm('鎮ㄧ‘瀹氳娓呯┖鎵�鏈夋暟鎹悧锛�', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.formList = [];
+        this.activeItem = {};
+        this.form = {};
+        this.$message({
+          type: 'success',
+          message: '鍒犻櫎鎴愬姛!'
+        });
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+
+    // 鍒犻櫎缁勪欢
+    delModuleClickHandler() {
+      if (func.isEmptyObject(this.activeItem)) {
+        this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛屽垹闄�');
+        return;
+      }
+      this.formList = this.formList.filter(item => item.text != this.activeItem.text);
+      this.activeItem = {};
+      this.form = {};
+    },
+
+    // 璋冩暣浣嶇疆
+    positionClickHandler() {
+      if (!this.topForm.position) {
+        this.$message.error('璇疯緭鍏ヨ皟鏁翠綅缃�');
+        return;
+      }
+
+      if (func.isEmptyObject(this.activeItem)) {
+        this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛岃皟鏁翠綅缃�');
+        return;
+      }
+
+      const number = /^[0-9]*\.?[0-9]+$/.test(this.topForm.position);
+
+      if (!number) {
+        this.$message.error('鍊煎繀椤绘槸鏁板瓧瀛楃');
+        return;
+      }
+
+      // 鍏堝皢瑕佹洿鎹綅缃殑椤归�氳繃 activeItemIndex 杩涜绉婚櫎
+      this.formList.splice(this.activeItemIndex, 1);
+      // 灏嗗綋鍓嶇偣鍑诲璞� activeItem 鎻掑叆鍒版暟缁勪腑瀵瑰簲浣嶇疆
+      this.formList.splice(JSON.parse(this.topForm.position) - 1, 0, this.activeItem);
+      this.activeItem = {};
+      this.activeItemIndex = null;
+    },
+
+    // 閫夐」琛ㄦ牸琛岀偣鍑�
+    optionTableClick(row) {
+      console.log(row);
+    },
+
+    // 閫夐」娣诲姞
+    optionAddClickHandler(val) {
+      let optionObj, itemValueList;
+
+      if (val === 'dialog') {
+        optionObj = this.customOptionObj;
+        itemValueList = this.customForm.itemValueList;
+      } else {
+        if (func.isEmptyObject(this.activeItem)) {
+          this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛屾坊鍔犻�夐」');
+          return;
+        }
+        optionObj = this.optionObj;
+        itemValueList = this.form.itemValueList;
+      }
+
+      if (!optionObj.optionName) {
+        this.$message.error('璇疯緭鍏ラ�夐」鍚嶇О');
+        return;
+      }
+
+      if (!optionObj.optionValue) {
+        this.$message.error('璇疯緭鍏ラ�夐」鍊�');
+        return;
+      }
+
+      const params = {
+        key: optionObj.optionName,
+        value: optionObj.optionValue
+      };
+
+      itemValueList.push(params);
+    },
+
+    // 閫夐」鍒犻櫎
+    optionDeleteClickHandler() {
+
+    },
+
+    // 娣诲姞鑷畾涔夌粍浠�
+    addCustomClickHandler() {
+      this.customVisible = true;
+    },
+
+    // 淇濆瓨鎸夐挳
+    saveClickHandler() {
+      if (!this.topForm.viName) {
+        this.$message.error('鍚嶇О涓嶈兘涓虹┖');
+        return;
+      }
+      if (this.formList.length <= 0) {
+        this.$message.error('椤甸潰涓嶈兘涓虹┖');
+        return;
+      }
+
     }
   }
 }
@@ -582,6 +999,12 @@
     }
   }
 
+  .active-border {
+    .el-form-item__label {
+      color: #f56c6c; /* 璁剧疆杈规鐨勬牱寮� */
+    }
+  }
+
   .el-col {
     margin-bottom: 0px;
     height: 40px;
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/tableDialog.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/tableDialog.vue
index 0805b0c..6350b43 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/tableDialog.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/components/tableDialog.vue
@@ -9,35 +9,35 @@
     width="60%"
     @close="closeDialog"
   >
-    <el-form :model="form" :rules="rules" label-position="right" label-width="100px">
+    <el-form v-loading="formLoading" :model="form" :rules="rules" label-position="right" label-width="100px">
       <el-row>
         <el-col :span="12">
           <el-form-item label="鍚嶇О">
-            <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            <el-input v-model="form.viName" placeholder="璇疯緭鍏ュ悕绉�" size="mini"></el-input>
           </el-form-item>
         </el-col>
 
-
         <el-col :span="12">
           <el-form-item label="姣忛〉琛屾暟">
-            <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            <el-input v-model="form.itemPageSize" placeholder="璇疯緭鍏ユ瘡椤佃鏁�" size="mini" type="number"></el-input>
           </el-form-item>
         </el-col>
 
         <el-col :span="24">
           <el-form-item label="闄勫姞鏌ヨ鏉′欢">
-            <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+            <el-input v-model="form.itemAddFilter" placeholder="璇疯緭鍏ユ煡璇㈡潯浠�" size="mini"></el-input>
           </el-form-item>
         </el-col>
 
         <el-col :span="12">
           <el-form-item label="缁戝畾琛ㄥ崟">
             <div style="display: flex;align-items: center;">
-              <el-select v-model="form.region" placeholder="璇烽�夋嫨娲诲姩鍖哄煙" size="mini">
-                <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-                <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+              <el-select v-model="form.itemInObj" clearable placeholder="璇烽�夋嫨缁戝畾琛ㄥ崟" size="mini">
+                <el-option v-for="(item,index) in selectList" :key="index" :label="item.viName"
+                           :value="item.id"></el-option>
               </el-select>
-              <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="formSelectClickHandler">閫夋嫨
+              </el-button>
             </div>
           </el-form-item>
         </el-col>
@@ -45,9 +45,11 @@
         <el-col :span="12">
           <el-form-item label="鐖跺悕绉�">
             <div style="display: flex;align-items: center;">
-              <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
-              <el-checkbox v-model="checked" style="margin-left: 5px; margin-right: 5px">鏄剧ず鏌ヨ鍖哄煙</el-checkbox>
-              <el-checkbox v-model="checked" style="margin-left: 5px;margin-right: 0px">鏄剧ず鏂囦欢澶�</el-checkbox>
+              <el-input v-model="form.itemParentFolderName" placeholder="璇疯緭鍏ョ埗鍚嶇О" size="mini"></el-input>
+              <el-checkbox v-model="form.itemIsNavigatorExpand" style="margin-left: 5px; margin-right: 5px">鏄剧ず鏌ヨ鍖哄煙
+              </el-checkbox>
+              <el-checkbox v-model="form.itemIsShowFolder" style="margin-left: 5px;margin-right: 0px">鏄剧ず鏂囦欢澶�
+              </el-checkbox>
             </div>
           </el-form-item>
         </el-col>
@@ -57,8 +59,10 @@
             <div style="display: flex; align-items: center">
               <div style="height: 260px; width: 160px; border: 1px solid #bdbbbb;overflow-y: auto">
                 <el-table
-                  :data="showLifeTable"
-                  style="width: 100%">
+                  :data="form.itemSelectOutFieldList"
+                  :highlight-current-row="true"
+                  style="width: 100%"
+                  @row-click="showLabelLeftRowClick">
                   <el-table-column
                     align="center"
                     label="鍙娇鐢ㄥ瓧娈�"
@@ -67,13 +71,16 @@
                 </el-table>
               </div>
               <div style="margin-left: 10px; margin-right: 10px">
-                <el-button circle icon="el-icon-back" style="margin-right: 10px"></el-button>
-                <el-button circle icon="el-icon-right"></el-button>
+                <el-button circle icon="el-icon-back" style="margin-right: 10px"
+                           @click="showLeftTransferClick"></el-button>
+                <el-button circle icon="el-icon-right" @click="showRightTransferClick"></el-button>
               </div>
               <div style="height: 260px; width: 160px; border: 1px solid #bdbbbb;overflow-y: auto">
                 <el-table
-                  :data="showRightTable"
-                  style="width: 100%">
+                  :data="form.itemOutFieldList"
+                  :highlight-current-row="true"
+                  style="width: 100%"
+                  @row-click="showLabelRightRowClick">
                   <el-table-column
                     align="center"
                     label="闇�瑕佷娇鐢ㄥ瓧娈�"
@@ -90,8 +97,10 @@
             <div style="display: flex; align-items: center">
               <div style="height: 260px; width: 160px; border: 1px solid #bdbbbb;overflow-y: auto">
                 <el-table
-                  :data="searchLifeTable"
-                  style="width: 100%">
+                  :data="form.itemSearchFieldList"
+                  :highlight-current-row="true"
+                  style="width: 100%"
+                  @row-click="searchLeftRowClick">
                   <el-table-column
                     align="center"
                     label="鍙緵鎼滅储瀛楁"
@@ -100,13 +109,16 @@
                 </el-table>
               </div>
               <div style="margin-left: 10px; margin-right: 10px">
-                <el-button circle icon="el-icon-back" style="margin-right: 10px"></el-button>
-                <el-button circle icon="el-icon-right"></el-button>
+                <el-button circle icon="el-icon-back" style="margin-right: 10px"
+                           @click="searchLeftTransferClick"></el-button>
+                <el-button circle icon="el-icon-right" @click="searchRightTransferClick"></el-button>
               </div>
               <div style="height: 260px; width: 160px; border: 1px solid #bdbbbb;overflow-y: auto">
                 <el-table
-                  :data="searchRightTable"
-                  style="width: 100%">
+                  :data="form.itemKeyFieldList"
+                  :highlight-current-row="true"
+                  style="width: 100%"
+                  @row-click="searchRightRowClick">
                   <el-table-column
                     align="center"
                     label="闇�鎼滅储瀛楁"
@@ -120,9 +132,9 @@
 
         <el-col :span="12">
           <el-form-item label="鍒�">
-            <el-select v-model="form.region" placeholder="璇烽�夋嫨鍒�" size="mini">
-              <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-              <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+            <el-select v-model="form.itemFileWidthSelect" placeholder="璇烽�夋嫨鍒�" size="mini" @change="itemFileWidthChange">
+              <el-option v-for="(item,index) in form.itemFieldWidthList" :key="index" :label="item.key"
+                         :value="item.key"></el-option>
             </el-select>
           </el-form-item>
         </el-col>
@@ -130,8 +142,10 @@
         <el-col :span="12">
           <el-form-item label="瀹藉害">
             <div style="display: flex;align-items: center;">
-              <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini" style="width: 193px"></el-input>
-              <el-button plain size="mini" style="margin-left: 3px" type="success">璁剧疆</el-button>
+              <el-input v-model="form.itemWidth" placeholder="璇疯緭鍏ュ搴�" size="mini" style="width: 193px"
+                        type="number"></el-input>
+              <el-button plain size="mini" style="margin-left: 3px" type="success" @click="widthSetUpClickHandler">璁剧疆
+              </el-button>
             </div>
           </el-form-item>
         </el-col>
@@ -141,25 +155,26 @@
         <el-form-item label="璁剧疆鍒楀">
           <div style="height: 150px; width: 100%; border: 1px solid #bdbbbb;overflow-y: auto">
             <el-table
-              :data="columnWidthData"
+              :data="form.itemFieldWidthList"
               :highlight-current-row="true"
               border
               stripe
-              style="width: 100%">
+              style="width: 100%"
+              @row-click="itemFileWidthRowClick">
               <el-table-column
                 align="center"
                 label="鍒楀悕"
-                prop="id">
+                prop="key">
                 <template slot-scope="scope">
-                  <el-tag size="medium">{{ scope.row.id }}</el-tag>
+                  <el-tag size="medium">{{ scope.row.key }}</el-tag>
                 </template>
               </el-table-column>
               <el-table-column
                 align="center"
                 label="鍒楀"
-                prop="width">
+                prop="value">
                 <template slot-scope="scope">
-                  <el-tag size="medium">{{ scope.row.width }}</el-tag>
+                  <el-tag size="medium">{{ scope.row.value }}</el-tag>
                 </template>
               </el-table-column>
             </el-table>
@@ -169,22 +184,24 @@
 
       <el-col :span="8">
         <el-form-item label="鏌ヨ瀛楁">
-          <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+          <el-input v-model="form.searchLabel" placeholder="璇疯緭鍏ユ煡璇㈠瓧娈�" size="mini"></el-input>
         </el-form-item>
       </el-col>
 
       <el-col :span="8">
         <el-form-item label="鏌ヨ娆℃暟">
-          <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+          <el-input v-model="form.searchNumber" placeholder="璇疯緭鍏ユ煡璇㈡鏁�" size="mini"></el-input>
         </el-form-item>
       </el-col>
 
       <el-col :span="8">
         <el-form-item label="鏌ヨsql">
           <div style="display: flex;align-items: center">
-            <el-input v-model="user" 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="danger">鍒犻櫎</el-button>
+            <el-input v-model="form.searchSql" placeholder="璇疯緭鍏ql" size="mini"></el-input>
+            <el-button plain size="mini" style="margin-left: 3px" type="success" @click="searchAddClickHandler">娣诲姞
+            </el-button>
+            <el-button plain size="mini" style="margin-left: 3px" type="danger" @click="searchDelClickHandler">鍒犻櫎
+            </el-button>
           </div>
         </el-form-item>
       </el-col>
@@ -193,33 +210,34 @@
         <el-form-item label="鏌ヨ瀛楁">
           <div style="height: 150px; width: 100%; border: 1px solid #bdbbbb;overflow-y: auto">
             <el-table
-              :data="columnSearchData"
+              :data="form.itemSeniorQueryBOS"
               :highlight-current-row="true"
               border
               stripe
-              style="width: 100%">
+              style="width: 100%"
+              @row-click="itemSeniorRowClick">
               <el-table-column
                 align="center"
                 label="鏌ヨ瀛楁"
-                prop="id">
+                prop="itemSeniorQueryCols">
                 <template slot-scope="scope">
-                  <el-tag size="medium">{{ scope.row.id }}</el-tag>
+                  <el-tag size="medium">{{ scope.row.itemSeniorQueryCols }}</el-tag>
                 </template>
               </el-table-column>
               <el-table-column
                 align="center"
                 label="鏌ヨ娆℃暟"
-                prop="name">
+                prop="itemSeniorQueryColsCounts">
                 <template slot-scope="scope">
-                  <el-tag size="medium">{{ scope.row.name }}</el-tag>
+                  <el-tag size="medium">{{ scope.row.itemSeniorQueryColsCounts }}</el-tag>
                 </template>
               </el-table-column>
               <el-table-column
                 align="center"
                 label="鏌ヨsql"
-                prop="sql">
+                prop="itemQuerySql">
                 <template slot-scope="scope">
-                  <el-tag size="medium">{{ scope.row.sql }}</el-tag>
+                  <el-tag size="medium">{{ scope.row.itemQuerySql }}</el-tag>
                 </template>
               </el-table-column>
             </el-table>
@@ -229,9 +247,9 @@
 
       <el-col :span="24">
         <el-form-item label="鍙屽嚮鎿嶄綔">
-          <el-select v-model="form.region" placeholder="璇烽�夋嫨鍙屽嚮鎿嶄綔" size="mini">
-            <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-            <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+          <el-select v-model="form.itemDbl" placeholder="璇烽�夋嫨鍙屽嚮鎿嶄綔" size="mini">
+            <el-option v-for="(item,index) in itemDblList" :key="index" :label="item.value"
+                       :value="item.key"></el-option>
           </el-select>
         </el-form-item>
       </el-col>
@@ -241,11 +259,11 @@
           <div style="display: flex;align-items: center">
             <div style="display: flex;align-items: center;width: 100%;">
               <span>闀匡細</span>
-              <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+              <el-input v-model="itemImgHeight" placeholder="璇疯緭鍏ラ暱搴�" size="mini"></el-input>
             </div>
             <div style="display: flex;align-items: center;width: 100%;margin-left: 30px">
               <span>瀹斤細</span>
-              <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+              <el-input v-model="itemImgWidth" placeholder="璇疯緭鍏ュ搴�" size="mini"></el-input>
             </div>
           </div>
         </el-form-item>
@@ -253,19 +271,19 @@
 
       <el-col :span="12">
         <el-form-item label="瀛楃涓叉埅鍙�">
-          <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+          <el-input v-model="form.itemCut" placeholder="璇疯緭鍏ュ瓧绗︿覆" size="mini"></el-input>
         </el-form-item>
       </el-col>
 
       <el-col :span="8">
         <el-form-item label="瓒呴摼鎺�">
-          <el-input v-model="user" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+          <el-input v-model="form.itemHrefConf" placeholder="璇疯緭鍏ヨ秴閾炬帴" size="mini"></el-input>
         </el-form-item>
       </el-col>
 
       <el-col :span="24">
         <el-form-item label="鏌ヨ妯℃澘">
-          <el-select v-model="form.region" placeholder="璇烽�夋嫨鏌ヨ妯℃澘" size="mini">
+          <el-select v-model="form.itemQtName" placeholder="璇烽�夋嫨鏌ヨ妯℃澘" size="mini">
             <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
             <el-option label="鍖哄煙浜�" value="beijing"></el-option>
           </el-select>
@@ -274,62 +292,432 @@
     </el-form>
 
     <span slot="footer" class="dialog-footer">
-         <el-button>鍙� 娑�</el-button>
-         <el-button type="primary">纭� 瀹�</el-button>
+         <el-button @click="closeDialog">鍙� 娑�</el-button>
+         <el-button type="primary" @click="dialogSaveClickHandler">纭� 瀹�</el-button>
     </span>
+
+    <el-dialog
+      v-dialogDrag
+      v-loading="selectFormLoading"
+      :visible.sync="selectFormVisible"
+      append-to-body="true"
+      class="avue-dialog"
+      title="琛ㄥ崟閫夋嫨"
+      width="50%">
+      <avue-crud
+        ref="crud"
+        :data="selectFormData"
+        :option="selectFormOption"
+        @selection-change="selectionChange"
+        @row-click="rowClick">
+
+      </avue-crud>
+
+      <span slot="footer" class="dialog-footer">
+         <el-button @click="selectFormVisible = false">鍙� 娑�</el-button>
+         <el-button type="primary" @click="selectFormAddClickHandler">纭� 瀹�</el-button>
+    </span>
+    </el-dialog>
   </el-dialog>
+
 </template>
 
 <script>
+import basicOption from "@/util/basic-option";
+import {gridPortalVIDatas, getPortalVIById, getItemDblList, savePortalVI} from "@/api/UI/formDefine/api";
+import func from "@/util/func";
+
 export default {
   name: "tableDialog",
+  props: {
+    TreeNodeRow: {
+      type: Object,
+      default: () => {
+      }
+    },
+    treeRadio: {
+      type: String,
+      default: ""
+    }
+  },
+  created() {
+    // this.getDbList();
+  },
   data() {
     return {
-      columnSearchData: [
-        {
-          id: 'test',
-          name: '3',
-          sql: 'xxxxx'
-        }
-      ],
-      columnWidthData: [
-        {
-          id: 'test',
-          width: '250'
-        }
-      ],
-      searchLifeTable: [],
-      searchRightTable: [],
-      showRightTable: [],
-      showLifeTable: [
-        {
-          id: 'test1'
-        },
-        {
-          id: 'test2'
-        },
-        {
-          id: 'test1'
-        },
-        {
-          id: 'test2'
-        },
-        {
-          id: 'test1'
-        },
-        {
-          id: 'test2'
-        }
-      ],
+      formLoading: false,
+      itemImgHeight: '',
+      itemImgWidth: '',
+      itemSeniorRow: {},
+      itemDblList: [],
+      selectFormOption: {
+        ...basicOption,
+        addBtn: false,
+        menu: false,
+        refreshBtn: false,
+        column: [
+          {
+            label: '涓氬姟鍚嶇О',
+            prop: 'typeName',
+
+          },
+          {
+            label: '鍚嶇О',
+            prop: 'viName',
+            sortable: true,
+          },
+          {
+            label: '绫诲瀷',
+            prop: 'viTypeText',
+          },
+        ]
+      },
+      selectFormData: [],
+      selectFormLoading: false,
+      selectFormVisible: false,
       rules: {},
-      form: {},
+      form: {
+        viName: '', // 鍚嶇О
+        itemPageSize: '', // 姣忛〉鍙樉绀鸿鏁�
+        itemAddFilter: '', // 闄勫姞鏌ヨ鏉′欢
+        itemInObj: '', // 缁戝畾琛ㄥ崟
+        itemParentFolderName: '', // 鐖跺悕绉�
+        itemIsShowFolder: false, // 鏄惁鏄剧ず鏂囦欢澶�
+        itemIsNavigatorExpand: false, // 鏄剧ず鏌ヨ鍖哄煙
+        itemSelectOutFieldList: [], // 鍙娇鐢ㄥ瓧娈�
+        itemOutFieldList: [], // 闇�瑕佷娇鐢ㄥ瓧娈� // 鍒椾笅鎷夋
+        itemSearchFieldList: [], // 鍙緵鎼滅储浣跨敤瀛楁
+        itemKeyFieldList: [], // 闇�瑕佹悳绱㈠瓧娈�
+        itemWidth: '250', // 瀹藉害
+        itemFieldWidthList: [], // 璁剧疆鍒楀鏁扮粍 涓� itemOutFieldList 鐩稿尮閰�
+        itemFileWidthSelect: '', // 鍒椾笅鎷夋
+        searchLabel: '', // 鏌ヨ瀛楁
+        searchNumber: '1', // 鏌ヨ娆℃暟
+        searchSql: '', // 鏌ヨsql
+        itemSeniorQueryBOS: [], // 鏌ヨ瀛楁鍒楄〃
+        itemDbl: [], // 鍙屽嚮鎿嶄綔
+        itemImgWH: '', // 鍥剧墖瀹介珮 w,h
+        itemCut: '', // 瀛楃涓叉埅鍙�
+        itemHrefConf: '', // 瓒呴摼鎺�
+        itemQtName: '', // 鏌ヨ妯℃澘
+      },
+      defaultForm: {
+        viName: '', // 鍚嶇О
+        itemPageSize: '', // 姣忛〉鍙樉绀鸿鏁�
+        itemAddFilter: '', // 闄勫姞鏌ヨ鏉′欢
+        itemInObj: '', // 缁戝畾琛ㄥ崟
+        itemParentFolderName: '', // 鐖跺悕绉�
+        itemIsShowFolder: false, // 鏄惁鏄剧ず鏂囦欢澶�
+        itemIsNavigatorExpand: false, // 鏄剧ず鏌ヨ鍖哄煙
+        itemSelectOutFieldList: [], // 鍙娇鐢ㄥ瓧娈�
+        itemOutFieldList: [], // 闇�瑕佷娇鐢ㄥ瓧娈� // 鍒椾笅鎷夋
+        itemSearchFieldList: [], // 鍙緵鎼滅储浣跨敤瀛楁
+        itemKeyFieldList: [], // 闇�瑕佹悳绱㈠瓧娈�
+        itemWidth: '250', // 瀹藉害
+        itemFieldWidthList: [], // 璁剧疆鍒楀鏁扮粍 涓� itemOutFieldList 鐩稿尮閰�
+        itemFileWidthSelect: '', // 鍒椾笅鎷夋
+        searchLabel: '', // 鏌ヨ瀛楁
+        searchNumber: '1', // 鏌ヨ娆℃暟
+        searchSql: '', // 鏌ヨsql
+        itemSeniorQueryBOS: [], // 鏌ヨ瀛楁鍒楄〃
+        itemDbl: [], // 鍙屽嚮鎿嶄綔
+        itemImgWH: '', // 鍥剧墖瀹介珮 w,h
+        itemCut: '', // 瀛楃涓叉埅鍙�
+        itemHrefConf: '', // 瓒呴摼鎺�
+        itemQtName: '', // 鏌ヨ妯℃澘
+      },
       loading: false,
-      visible: false
+      visible: false,
+      selectList: [],
+      lastIndex: null,
+      showLabelLeftRow: {},
+      showLabelRightRow: {},
+      searchLeftRow: {},
+      searchRightRow: {},
+      itemFileWidthRow: {},
+      itemFileWidthChangeVal: '',
     }
   },
   methods: {
+    // 鍏抽棴瀵硅瘽妗�
     closeDialog() {
+      this.visible = false;
+      this.form = {...this.defaultForm};
+    },
 
+    // 閫夋嫨琛ㄥ崟鍏抽棴瀵硅瘽妗�
+    closeSelectFormDialog() {
+
+    },
+
+    // 閫夋嫨缁戝畾琛ㄥ崟
+    formSelectClickHandler() {
+      this.selectFormVisible = true;
+      const params = {
+        'conditionMap[typeName]': this.TreeNodeRow.attributes.id,
+        'conditionMap[viType]': 'Form',
+        'conditionMap[viTypeFlag]': this.treeRadio === '0' ? 'BtmType' : this.treeRadio === '1' ? 'LinkType' : '',
+      }
+      gridPortalVIDatas(1, -1, params).then(res => {
+        if (res.data.code === 200) {
+          const data = res.data.data;
+          this.selectFormData = data;
+        }
+      });
+    },
+
+    // 鑾峰彇鍒濆鍖栬〃鏍奸噷闇�瑕佺殑榛樿鏁版嵁
+    getFormSelectList() {
+      this.formLoading = true;
+      const params = {
+        'conditionMap[typeName]': this.TreeNodeRow.id,
+        'conditionMap[viType]': 'Form',
+        'conditionMap[viTypeFlag]': this.treeRadio === '0' ? 'BtmType' : this.treeRadio === '1' ? 'LinkType' : '',
+      };
+
+      // 鍙戣捣绗竴涓姹�
+      gridPortalVIDatas(1, -1, params).then(res => {
+        if (res.data.code === 200) {
+          const data = res.data.data;
+          this.selectList = data;
+
+          // 纭繚 this.selectList 宸茬粡璧嬪�间笖涓嶄负绌�
+          if (this.selectList && this.selectList.length > 0) {
+            const param = {
+              id: this.selectList[0].id,
+              viType: '1'
+            };
+
+            // 鍙戣捣绗簩涓姹�
+            return getPortalVIById(param);
+          }
+        }
+      }).then(res => {
+        if (res.data.code === 200) {
+          const data = res.data.obj.prm.prmItemList.map(item => ({
+            id: item.itemField
+          }));
+          // 杩囨护鍑烘潵闇�瑕佷娇鐢ㄥ瓧娈� 璧嬪�肩粰 鍙娇鐢ㄥ瓧娈垫覆鏌� 锛堜娇鐢ㄥ瓧娈电敱缂栬緫鎺ュ彛浼犻�掞級
+          const list = data.filter(item =>
+            !this.form.itemOutFieldList.some(outItem => outItem.id === item.id)
+          );
+          this.$set(this.form, 'itemSelectOutFieldList', list);
+          this.formLoading = false;
+        }
+      })
+    },
+
+    // 琛ㄦ牸澶氶��
+    selectionChange(list) {
+      this.selectList = list;
+    },
+
+    // 琛岀偣鍑�
+    rowClick(row) {
+      func.rowClickHandler(
+        row,
+        this.$refs.crud,
+        this.lastIndex,
+        (newIndex) => {
+          this.lastIndex = newIndex;
+        },
+        () => {
+          this.selectList = [];
+        }
+      );
+    },
+
+    // 琛ㄥ崟閫夋嫨纭畾
+    selectFormAddClickHandler() {
+      if (this.selectList.length <= 0) {
+        this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+
+      if (this.selectList.length > 1) {
+        this.$message.error('鍙兘閫夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+      const params = {
+        id: this.selectList[0].id,
+        viType: '1'
+      }
+      getPortalVIById(params).then(res => {
+        if (res.data.code === 200) {
+          const data = res.data.obj.prm.prmItemList.map(item => {
+            return {
+              id: item.itemField
+            }
+          });
+          this.form.itemSelectOutFieldList = data;
+          this.selectFormVisible = false;
+        }
+      })
+      this.form.itemInObj = this.selectList[0].id;
+    },
+
+    // 鏄剧ず瀛楁宸︿晶琛ㄦ牸琛岀偣鍑�
+    showLabelLeftRowClick(row) {
+      this.showLabelLeftRow = row;
+    },
+
+    // 鏄剧ず瀛楁鍙充晶琛ㄦ牸琛岀偣鍑�
+    showLabelRightRowClick(row) {
+      this.showLabelRightRow = row;
+    },
+
+    // 鎼滅储瀛楁宸︿晶琛ㄦ牸琛岀偣鍑�
+    searchLeftRowClick(row) {
+      this.searchLeftRow = row;
+    },
+
+    // 鎼滅储瀛楁鍙充晶琛ㄦ牸琛岀偣鍑�
+    searchRightRowClick(row) {
+      this.searchRightRow = row;
+    },
+
+    // 鏄剧ず瀛楁绌挎妗嗗乏绉�
+    showLeftTransferClick() {
+      if (func.isEmptyObject(this.showLabelRightRow)) {
+        this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+      this.form.itemSelectOutFieldList.unshift(this.showLabelRightRow);
+      this.form.itemOutFieldList = this.form.itemOutFieldList.filter(item => item.id !== this.showLabelRightRow.id);
+      this.form.itemSearchFieldList = this.form.itemOutFieldList;
+      this.form.itemFieldWidthList = this.form.itemFieldWidthList.filter(item => item.key !== this.showLabelRightRow.id);
+      this.form.itemFileWidthSelect = this.form.itemFieldWidthList.length >= 1 ? this.form.itemFieldWidthList[0].key : '';
+      this.showLabelRightRow = {};
+    },
+
+    // 鏄剧ず瀛楁绌挎妗嗗彸绉�
+    showRightTransferClick() {
+      if (func.isEmptyObject(this.showLabelLeftRow)) {
+        this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+      this.form.itemOutFieldList.push(this.showLabelLeftRow);
+      this.form.itemSearchFieldList = this.form.itemOutFieldList;
+
+      // 杩囨护 itemSelectOutFieldList锛岀Щ闄� id 涓� showLabelLeftRow.id 鐩稿悓鐨勫璞�
+      this.form.itemSelectOutFieldList = this.form.itemSelectOutFieldList.filter(item => item.id !== this.showLabelLeftRow.id);
+      this.form.itemFieldWidthList.push({
+        key: this.showLabelLeftRow.id,
+        value: this.form.itemWidth
+      });
+      this.form.itemFileWidthSelect = this.form.itemFieldWidthList[0].key;
+      this.showLabelLeftRow = {};
+
+    },
+
+    // 鎼滅储瀛楁绌挎妗嗗乏绉�
+    searchLeftTransferClick() {
+      if (func.isEmptyObject(this.searchRightRow)) {
+        this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+      this.form.itemSearchFieldList.unshift(this.searchRightRow);
+      this.form.itemKeyFieldList = this.form.itemKeyFieldList.filter(item => item.id !== this.searchRightRow.id)
+      this.searchRightRow = {};
+    },
+
+    // 鎼滅储鑷姩绌挎妗嗗彸绉�
+    searchRightTransferClick() {
+      if (func.isEmptyObject(this.searchLeftRow)) {
+        this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+
+      this.form.itemKeyFieldList.push(this.searchLeftRow);
+
+      this.form.itemSearchFieldList = this.form.itemSearchFieldList.filter(item => item.id !== this.searchLeftRow.id);
+      this.searchLeftRow = {};
+    },
+
+    // 璁剧疆鍒楀琛岀偣鍑�
+    itemFileWidthRowClick(row) {
+      this.itemFileWidthRow = row;
+      this.form.itemFileWidthSelect = row.key;
+      this.form.itemWidth = row.value;
+    },
+
+    // 鍒椾笅鎷塩hange
+    itemFileWidthChange(val) {
+      this.itemFileWidthChangeVal = val;
+    },
+
+    // 璁剧疆瀹藉害
+    widthSetUpClickHandler() {
+      if (this.form.itemFileWidthSelect) {
+        const item = this.form.itemFieldWidthList.find(item => item.key === this.form.itemFileWidthSelect);
+        item.value = this.form.itemWidth;
+      }
+    },
+
+    // 鑾峰彇鍙屽嚮鎿嶄綔鏁版嵁
+    getDbList() {
+      getItemDblList().then(res => {
+        if (res.data.code === 200) {
+          const data = res.data.data;
+          this.itemDblList = data;
+        }
+      })
+    },
+
+    // 鏌ヨ妯℃澘琛ㄦ牸琛岀偣鍑�
+    itemSeniorRowClick(row) {
+      this.itemSeniorRow = row;
+    },
+
+    // 鏌ヨ妯℃澘娣诲姞
+    searchAddClickHandler() {
+      this.form.itemSeniorQueryBOS.push({
+        itemSeniorQueryCols: this.form.searchLabel,
+        itemSeniorQueryColsCounts: this.form.searchNumber,
+        itemQuerySql: this.form.searchSql
+      });
+    },
+
+    // 鏌ヨ妯℃澘鍒犻櫎
+    searchDelClickHandler() {
+      if (func.isEmptyObject(this.itemSeniorRow)) {
+        this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛屽垹闄�');
+        return;
+      }
+
+      this.form.itemSeniorQueryBOS = this.form.itemSeniorQueryBOS.filter(item => item.itemSeniorQueryCols != this.itemSeniorRow.id);
+      this.itemSeniorRow = {};
+    },
+
+    // 琛ㄦ牸瀵硅瘽妗嗕繚瀛�
+    dialogSaveClickHandler() {
+      this.form.itemSelectOutFieldList = this.form.itemSelectOutFieldList.map(item => item.id); // 鍙娇鐢ㄥ瓧娈�
+      this.form.itemOutFieldList = this.form.itemOutFieldList.map(item => item.id); // 闇�瑕佷娇鐢ㄥ瓧娈�
+      this.form.itemSearchFieldList = this.form.itemSearchFieldList.map(item => item.id); // 鍙緵鎼滅储瀛楁
+      this.form.itemKeyFieldList = this.form.itemKeyFieldList.map(item => item.id); // 闇�瑕佷娇鐢ㄥ瓧娈�
+      this.form.itemImgWH = `${this.itemImgHeight},${this.itemImgWidth}`;
+      const params = {
+        id: this.form.editNodeId,
+        prm: {
+          formQtName: '',
+          prmItemList: [
+            this.form
+          ],
+        },
+        typeFlag: this.treeRadio,
+        typeFlagText: this.treeRadio === '0' ? "涓氬姟绫诲瀷鐨勮〃鍗�" : '閾炬帴绫诲瀷鐨勮〃鍗�',
+        typeName: this.TreeNodeRow.attributes.id,
+        viName: this.form.viName,
+        viType: 0,
+        viTypeText: "琛ㄦ牸"
+      }
+      savePortalVI(params).then(res => {
+        if (res.data.code === 200) {
+          this.$message.success('淇濆瓨鎴愬姛');
+          this.closeDialog();
+          this.$emit('updataTable');
+        }
+      })
     }
   }
 }
@@ -342,3 +730,4 @@
   }
 }
 </style>
+
diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/index.vue
index 5509441..d6c1297 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/ui/formDefine/index.vue
@@ -27,11 +27,14 @@
       <basic-container>
         <avue-crud
           v-if="!tableStatus"
+          ref="crud"
           :data="data"
           :option="option"
           :page.sync="page"
           @size-change="sizeChange"
-          @current-change="currentChange">
+          @current-change="currentChange"
+          @selection-change="selectChangeHandler"
+          @row-click="rowClickHandler">
           <template slot="menuLeft">
             <div style="display: flex; align-items: center;">
                <span style="display: inline-block; margin-right: 10px;">
@@ -40,7 +43,8 @@
                </span>
               <span style="display: flex;align-items: center; margin-right: 10px;">
                 <p style="display: flex; flex-shrink: 0;font-size: 14px">鍚嶇О锛�</p>
-                <el-input v-model="input" placeholder="璇疯緭鍏ュ唴瀹�" size="mini"></el-input>
+                <el-input v-model="topName" placeholder="璇疯緭鍏ュ唴瀹�" size="mini" style="margin-right: 10px;"></el-input>
+                <el-button plain size="mini" type="success" @click="nameSearchHandler">鏌ヨ</el-button>
               </span>
               <span style="display: flex; align-items: center;">
                 <p
@@ -59,23 +63,28 @@
         </avue-crud>
         <div v-if="!tableStatus" style="display: flex;justify-content: center;margin-top: 15px">
           <el-button icon="el-icon-plus" plain size="small" type="primary" @click="addClickHandler">澧炲姞</el-button>
-          <el-button icon="el-icon-delete" plain size="small" type="danger">鍒犻櫎</el-button>
+          <el-button icon="el-icon-delete" plain size="small" type="danger" @click="deleteClickHandler">鍒犻櫎</el-button>
           <el-button icon="el-icon-document-add" plain size="small" type="primary">鍏嬮殕</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>
+          <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="upLoadClickHandler">瀵煎叆</el-button>
+          <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">瀵煎嚭
+          </el-button>
         </div>
       </basic-container>
     </el-main>
-    <form-dialog ref="formDialog"></form-dialog>
-    <table-dialog ref="tableDialog"></table-dialog>
+    <form-dialog ref="formDialog" :TreeNodeRow="this.nodeRow" :treeRadio="treeRadio"></form-dialog>
+    <table-dialog ref="tableDialog" :TreeNodeRow="this.nodeRow" :treeRadio="treeRadio"
+                  @updataTable="getRightPortalVIDatas"></table-dialog>
+    <!-- 瀵煎叆 -->
+    <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" :tipList="tipList" title="瀵煎叆"
+                 @updata="getRightPortalVIDatas"></upload-file>
   </el-container>
 </template>
 
 <script>
 import basicOption from "@/util/basic-option";
 import FormDialog from "@/views/modelingMenu/ui/formDefine/components/formDialog";
-import TableDialog from "@/views/modelingMenu/ui/formDefine/components/tableDialog"
-import {gridPortalVIDatas} from "@/api/UI/formDefine/api"
+import TableDialog from "@/views/modelingMenu/ui/formDefine/components/tableDialog";
+import {gridPortalVIDatas, getPortalVIById, deleteByIds, exportExcel} from "@/api/UI/formDefine/api";
 import {getBizTypes} from "@/api/modeling/businessType/api";
 import {gridLink} from "@/api/modeling/linkType/api";
 import func from "@/util/func";
@@ -85,6 +94,16 @@
   components: {FormDialog, TableDialog},
   data() {
     return {
+      tipList: [
+        "瀵煎叆涓氬姟绫诲瀷鍚嶇О涓嶅彲涓虹┖",
+        "瀵煎叆鍚嶇О涓嶅彲涓虹┖涓斿悕绉板彧鑳戒负鑻辨枃瀛楁瘝",
+        "涓婁紶鐨勬枃浠朵负鍘嬬缉鏂囦欢锛屼笖鍘嬬缉鏍煎紡浠呰兘涓簔ip鏍煎紡"
+      ],
+      upFileType: ['zip'],
+      fileUrl: 'api/portalVIController/importData',
+      lastIndex: null,
+      selectList: [],
+      topName: '',
       page: {
         currentPage: 1,
         pageSize: 10,
@@ -119,8 +138,15 @@
       treeRadio: "0",
       treeData: [],
       treeOption: {
-        addBtn: false
-      }
+        addBtn: false,
+        props: {
+          label: 'id',
+          value: 'id',
+          children: 'children'
+        }
+      },
+      dbClickList: [],
+      defaultData: [], // 鐢ㄤ簬鏌ヨ鎭㈠鍘熷鍊�
     }
   },
   created() {
@@ -128,7 +154,7 @@
   },
   computed: {
     tableStatus() {
-      return func.isEmptyObject(this.nodeRow)
+      return func.isEmptyObject(this.nodeRow);
     }
   },
   methods: {
@@ -138,8 +164,13 @@
         this.$message.error('璇峰湪琛ㄦ牸涓婃柟閫夋嫨鏂板绫诲瀷');
         return;
       }
-
-      this.tableRadio === "0" ? this.$refs.formDialog.visible = true : this.$refs.tableDialog.visible = true;
+      if (this.tableRadio === "0") {
+        this.$refs.formDialog.visible = true;
+        this.$refs.formDialog.getTreeList();
+      } else {
+        this.$refs.tableDialog.visible = true;
+        this.$refs.tableDialog.getDbList();
+      }
     },
 
     // 鍒濆鍖栨爲璇锋眰
@@ -147,12 +178,13 @@
       this.treeLoading = true;
       getBizTypes().then(res => {
         const data = res.data.data.map(item => {
-          item.label = item.attributes.id;
-          return item;
+          this.processChildren(item); // 澶勭悊姣忎釜鑺傜偣
+          item.attributes.id = item.attributes.id;
+          return item.attributes; // 杩斿洖澶勭悊鍚庣殑 attributes
         });
         this.treeData = data;
         this.treeLoading = false;
-      })
+      });
     },
 
     // 宸︿晶涓氬姟绫诲瀷鍒囨崲
@@ -162,12 +194,12 @@
       if (val === "0") {
         getBizTypes().then(res => {
           const data = res.data.data.map(item => {
-            item.label = item.attributes.id;
-            return item;
+            this.processChildren(item); // 澶勭悊姣忎釜鑺傜偣
+            item.attributes.id = item.attributes.id;
+            return item.attributes; // 杩斿洖澶勭悊鍚庣殑 attributes
           });
           this.treeData = data;
-          this.treeLoading = false;
-        })
+        });
       } else {
         gridLink().then(res => {
           const data = res.data.data.map(item => {
@@ -180,9 +212,19 @@
       }
     },
 
+    // 澶勭悊鏍戝舰缁撴瀯
+    processChildren(item) {
+      if (item.children && item.children.length > 0) {
+        item.attributes.children = item.children.map(child => {
+          child.attributes.id = child.attributes.id;
+          this.processChildren(child); // 閫掑綊澶勭悊姣忎釜瀛愯妭鐐�
+          return child.attributes; // 鍙繑鍥炲瓙鑺傜偣鐨� attributes
+        });
+      }
+    },
+
     // 宸︿晶鏍戠偣鍑�
     nodeClick(row) {
-      console.log(row);
       this.tableRadio = null;
       this.nodeRow = row;
       this.getRightPortalVIDatas(row);
@@ -197,15 +239,15 @@
     // 鍙充晶 琛ㄦ牸 琛ㄥ崟 淇℃伅鏌ヨ
     getRightPortalVIDatas() {
       const params = {
-        'conditionMap[typeName]': this.treeRadio === '0' ? this.nodeRow.attributes.id : this.nodeRow.name,
+        'conditionMap[typeName]': this.treeRadio === '0' ? this.nodeRow.id : this.nodeRow.name,
         'conditionMap[viType]': this.tableRadio === '0' ? 'Form' : this.tableRadio === '1' ? 'Table' : '',
         'conditionMap[viTypeFlag]': this.treeRadio === '0' ? 'BtmType' : this.treeRadio === '1' ? 'LinkType' : '',
       }
       gridPortalVIDatas(this.page.currentPage, this.page.pageSize, params).then(res => {
-        console.log(res);
         if (res.data.code === 200) {
           const data = res.data.data;
           this.data = data;
+          this.defaultData = data;
           this.page.total = res.data.total;
         }
       })
@@ -227,6 +269,177 @@
       this.getRightPortalVIDatas();
     },
 
+    // 缂栬緫鎸夐挳
+    editBtnClick(row) {
+      // 琛ㄦ牸
+      if (row.viType === 0) {
+        const params = {
+          id: row.id,
+          viType: row.viType
+        };
+
+        getPortalVIById(params).then(res => {
+          if (res.data.code === 200) {
+            const data = res.data.obj.prm;
+            const prmItem = data.prmItemList[0] || {}; // 鍙栧嚭绗竴涓厓绱犲苟鎻愪緵榛樿鍊�
+
+            // 鑾峰彇鍒濆鍖栬〃鏍奸噷闇�瑕佺殑榛樿鏁版嵁
+            this.$refs.tableDialog.getFormSelectList();
+
+            // 鏇存柊琛ㄥ崟
+            this.$refs.tableDialog.form = {
+              ...prmItem,
+              viName: res.data.obj.viName,
+              editNodeId: row.id,
+              itemOutFieldList: (prmItem.itemOutFieldList || []).map(item => ({id: item})),
+              itemSearchFieldList: (prmItem.itemSearchFieldList || []).map(item => ({id: item})),
+              itemKeyFieldList: (prmItem.itemKeyFieldList || []).map(item => ({id: item})),
+              searchLabel: prmItem.itemSeniorQueryCols || '',
+              searchNumber: prmItem.itemSeniorQueryColsCounts || '1',
+              searchSql: prmItem.itemQuerySql || '',
+              itemFileWidthSelect: (prmItem.itemFieldWidthList && prmItem.itemFieldWidthList.length > 0) ? prmItem.itemFieldWidthList[0].key : '',
+              itemWidth: (prmItem.itemFieldWidthList && prmItem.itemFieldWidthList.length > 0) ? prmItem.itemFieldWidthList[0].value : '250'
+            };
+
+            // 澶勭悊鍥剧墖瀹介珮
+            const [width = '0', height = '0'] = (prmItem.itemImgWH || '0,0').split(',');
+            this.$refs.tableDialog.itemImgWidth = width;
+            this.$refs.tableDialog.itemImgHeight = height;
+
+            // 鍙屽嚮鎿嶄綔鑾峰彇鏁版嵁鏂规硶
+            this.$refs.tableDialog.getDbList();
+
+            // 鏄剧ず瀵硅瘽妗�
+            this.$refs.tableDialog.visible = true;
+          }
+        });
+      } else {
+        const params = {
+          id: row.id,
+          viType: row.viType
+        };
+
+        getPortalVIById(params).then(res => {
+          if (res.data.code === 200) {
+            const data = res.data.obj.prm.prmItemList;
+
+            const updatedData = data.map(item => {
+              const {itemField, ...rest} = item;
+              return {
+                text: itemField,
+                ...rest
+              };
+            });
+            this.$refs.formDialog.formList = updatedData;
+            this.$refs.formDialog.getTreeList();
+            this.$refs.formDialog.topForm.viName = res.data.obj.viName;
+            this.$refs.formDialog.topForm.columnNumber = this.getValueBasedOnInput(res.data.obj.prm.showCols);
+
+            this.$refs.formDialog.visible = true;
+          }
+        })
+      }
+    },
+
+    // 鏍规嵁浼犲叆姣忚鍒楁暟 鏉ュ垽鏂璭l-col :span鏄灏�
+    getValueBasedOnInput(val) {
+      const n = JSON.parse(val ? val : '3');
+      switch (n) {
+        case 1:
+          return 24;
+        case 2:
+          return 12;
+        case 3:
+          return 8;
+        case 4:
+          return 6;
+        case 5:
+          return 4;
+        case 6:
+          return 4;
+        case 7:
+        case 8:
+          return 3;
+        case 9:
+          return 2;
+        default:
+          return n > 10 ? 1 : 8; // 榛樿缁�8
+      }
+    },
+
+    // 鍚嶇О鏌ヨ
+    nameSearchHandler() {
+      if (!this.topName) {
+        this.data = this.defaultData;
+        return;
+      }
+
+      const list = this.data.filter(item => item.viName.includes(this.topName.trim()));
+      this.data = list;
+    },
+
+    // 鍒犻櫎鎸夐挳
+    deleteClickHandler() {
+      if (this.selectList.length <= 0) {
+        this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+      console.log(this.selectList);
+      const params = {
+        ids: this.selectList.map(item => item.id).join(',')
+      }
+      deleteByIds(params).then(res => {
+        console.log(res);
+        if (res.data.code === 200) {
+          this.$message.success('鍒犻櫎鎴愬姛');
+          this.getRightPortalVIDatas();
+        }
+      })
+
+    },
+
+    // 澶氶��
+    selectChangeHandler(row) {
+      this.selectList = row;
+    },
+
+    // 琛岀偣鍑�
+    rowClickHandler(row) {
+      func.rowClickHandler(
+        row,
+        this.$refs.crud,
+        this.lastIndex,
+        (newIndex) => {
+          this.lastIndex = newIndex;
+        },
+        () => {
+          this.selectList = [];
+        }
+      );
+    },
+
+    // 瀵煎嚭
+    exportClickHandler() {
+      if (this.selectList.length <= 0) {
+        this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+
+      const params = {
+        ids: this.selectList.map(item => item.id).join(',')
+      }
+      exportExcel(params).then(res => {
+        func.downloadFileByBlobHandler(res);
+        this.$message.success('瀵煎嚭鎴愬姛');
+      }).catch(err => {
+        this.$message.error(err);
+      });
+    },
+
+    // 瀵煎叆
+    upLoadClickHandler() {
+      this.$refs.upload.visible = true;
+    }
   }
 }
 </script>
@@ -265,7 +478,6 @@
 .headerCon > .el-button:nth-child(7) {
   margin-left: 0;
 }
-
 
 .smallBtn {
   width: 82px;
diff --git a/Source/plt-web/plt-web-ui/src/views/systemModel/systemConfig/index.vue b/Source/plt-web/plt-web-ui/src/views/systemModel/systemConfig/index.vue
index 5a5c1e1..8761d82 100644
--- a/Source/plt-web/plt-web-ui/src/views/systemModel/systemConfig/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/systemModel/systemConfig/index.vue
@@ -306,24 +306,35 @@
         ids: row.id,
         isConfCategorys: this.nodeRow.id === 'firstNode' ? true : false
       }
-      getAppConfigCategoryInfo(params).then(res => {
-        console.log(res)
-        if (res.data.code === 200) {
-          this.$message.success('鍒犻櫎鎴愬姛');
-          if (this.nodeRow.id === 'firstNode') {
-            this.getTreeList('save');
-          } else {
-            this.configLoading = true;
-            getAppConfigDetailsByID({clsId: this.nodeRow.id}).then(res => {
-              if (res.data.code === 200) {
-                const data = res.data.data;
-                this.configData = data;
-                this.configLoading = false;
-              }
-            })
+      this.$confirm('鎮ㄧ‘瀹氳鍒犻櫎褰撳墠鏁版嵁鍚楋紵', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        getAppConfigCategoryInfo(params).then(res => {
+          console.log(res)
+          if (res.data.code === 200) {
+            this.$message.success('鍒犻櫎鎴愬姛');
+            if (this.nodeRow.id === 'firstNode') {
+              this.getTreeList('save');
+            } else {
+              this.configLoading = true;
+              getAppConfigDetailsByID({clsId: this.nodeRow.id}).then(res => {
+                if (res.data.code === 200) {
+                  const data = res.data.data;
+                  this.configData = data;
+                  this.configLoading = false;
+                }
+              })
+            }
           }
-        }
-      })
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
     },
 
     // 閫夋嫨妗�
@@ -352,30 +363,43 @@
         this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�');
         return;
       }
+
       const params = {
         ids: this.selectList.map(item => {
           return item.id
         }).join(','),
         isConfCategorys: this.nodeRow.id === 'firstNode' ? true : false
       }
-      getAppConfigCategoryInfo(params).then(res => {
-        console.log(res)
-        if (res.data.code === 200) {
-          this.$message.success('鍒犻櫎鎴愬姛');
-          if (this.nodeRow.id === 'firstNode') {
-            this.getTreeList('save');
-          } else {
-            this.configLoading = true;
-            getAppConfigDetailsByID({clsId: this.nodeRow.id}).then(res => {
-              if (res.data.code === 200) {
-                const data = res.data.data;
-                this.configData = data;
-                this.configLoading = false;
-              }
-            })
+
+      this.$confirm('鎮ㄧ‘瀹氳鍒犻櫎褰撳墠鏁版嵁鍚楋紵', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        getAppConfigCategoryInfo(params).then(res => {
+          console.log(res)
+          if (res.data.code === 200) {
+            this.$message.success('鍒犻櫎鎴愬姛');
+            if (this.nodeRow.id === 'firstNode') {
+              this.getTreeList('save');
+            } else {
+              this.configLoading = true;
+              getAppConfigDetailsByID({clsId: this.nodeRow.id}).then(res => {
+                if (res.data.code === 200) {
+                  const data = res.data.data;
+                  this.configData = data;
+                  this.configLoading = false;
+                }
+              })
+            }
           }
-        }
-      })
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
     },
 
     // 瀵煎嚭鎸夐挳

--
Gitblit v1.9.3