From 5a30e38f842907389500ad959e7f8fc07cee9709 Mon Sep 17 00:00:00 2001
From: xiejun <xiejun@vci-tech.com>
Date: 星期四, 22 八月 2024 16:29:25 +0800
Subject: [PATCH] 表单表格功能添加

---
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PRMDO.java                        |   45 
 Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java      |   56 
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/PortalVIType.java               |   85 +
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/UITools.java                       |  707 ++++++++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsPortalVIServiceI.java         |   79 +
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PRMItemDTO.java                     |  764 +++++++++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/PortalVITypeFlag.java           |   85 +
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PRMItemDO.java                    |  725 +++++++++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java   |   72 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PortalVIDO.java                   |  101 +
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PRMDTO.java                         |   50 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PortalVIDTO.java                    |   96 +
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBaseServiceI.java             |    4 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PRMItemVO.java                |  767 +++++++++
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java |  627 +++++++
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PortalVIVO.java               |   96 +
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/ItemDblEnum.java                |  125 +
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/ItemTypeEnum.java               |  144 +
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/bo/ItemSeniorQueryBO.java               |   61 
 Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PRMVO.java                    |   44 
 20 files changed, 4,732 insertions(+), 1 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/bo/ItemSeniorQueryBO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/bo/ItemSeniorQueryBO.java
new file mode 100644
index 0000000..c5d8765
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/bo/ItemSeniorQueryBO.java
@@ -0,0 +1,61 @@
+package com.vci.bo;
+
+public class ItemSeniorQueryBO implements java.io.Serializable{
+
+
+    private static final long serialVersionUID = 6935763791493916908L;
+
+    /**
+     * 楂樼骇鏌ヨ鍒�
+     */
+    private String itemSeniorQueryCols = "";
+    /**
+     * 楂樼骇鏌ヨ鍚勫垪浣跨敤娆℃暟
+     */
+    private String itemSeniorQueryColsCounts = "";
+
+    /**
+     *楂樼骇鏌ヨsql
+     */
+    private String itemQuerySql = "";
+
+    public ItemSeniorQueryBO(String itemSeniorQueryCols, String itemSeniorQueryColsCounts, String itemQuerySql) {
+        this.itemSeniorQueryCols = itemSeniorQueryCols;
+        this.itemSeniorQueryColsCounts = itemSeniorQueryColsCounts;
+        this.itemQuerySql = itemQuerySql;
+    }
+
+    public String getItemSeniorQueryCols() {
+        return itemSeniorQueryCols;
+    }
+
+    public void setItemSeniorQueryCols(String itemSeniorQueryCols) {
+        this.itemSeniorQueryCols = itemSeniorQueryCols;
+    }
+
+    public String getItemSeniorQueryColsCounts() {
+        return itemSeniorQueryColsCounts;
+    }
+
+    public void setItemSeniorQueryColsCounts(String itemSeniorQueryColsCounts) {
+        this.itemSeniorQueryColsCounts = itemSeniorQueryColsCounts;
+    }
+
+    public String getItemQuerySql() {
+        return itemQuerySql;
+    }
+
+    public void setItemQuerySql(String itemQuerySql) {
+        this.itemQuerySql = itemQuerySql;
+    }
+
+    @Override
+    public String
+    toString() {
+        return "ItemSeniorQueryBO{" +
+                "itemSeniorQueryCols='" + itemSeniorQueryCols + '\'' +
+                ", itemSeniorQueryColsCounts='" + itemSeniorQueryColsCounts + '\'' +
+                ", itemQuerySql='" + itemQuerySql + '\'' +
+                '}';
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PRMDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PRMDTO.java
new file mode 100644
index 0000000..edca04d
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PRMDTO.java
@@ -0,0 +1,50 @@
+package com.vci.dto;
+
+import java.util.List;
+
+public class PRMDTO implements   java.io.Serializable {
+
+    private static final long serialVersionUID = -9069714336905186990L;
+    /**
+     * 鏄剧ず澶氬皯鍒�,榛樿涓�3鍒�
+     */
+    private String showCols = "3";
+    /**
+     * 琛ㄥ崟鍚嶇О
+     */
+    private String formQtName = "";
+    private List<PRMItemDTO> prmItemList;
+
+    public String getShowCols() {
+        return showCols;
+    }
+
+    public void setShowCols(String showCols) {
+        this.showCols = showCols;
+    }
+
+    public String getFormQtName() {
+        return formQtName;
+    }
+
+    public void setFormQtName(String formQtName) {
+        this.formQtName = formQtName;
+    }
+
+    public List<PRMItemDTO> getPrmItemList() {
+        return prmItemList;
+    }
+
+    public void setPrmItemList(List<PRMItemDTO> prmItemList) {
+        this.prmItemList = prmItemList;
+    }
+
+    @Override
+    public String toString() {
+        return "PRMVO{" +
+                "showCols='" + showCols + '\'' +
+                ", formQtName='" + formQtName + '\'' +
+                ", prmItemList=" + prmItemList +
+                '}';
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PRMItemDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PRMItemDTO.java
new file mode 100644
index 0000000..4747ade
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PRMItemDTO.java
@@ -0,0 +1,764 @@
+package com.vci.dto;
+
+import com.vci.bo.ItemSeniorQueryBO;
+import com.vci.pagemodel.KeyValue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PRMItemDTO implements java.io.Serializable {
+    private static final long serialVersionUID = 2773419329512304674L;
+    /**
+     * 浣跨敤瀛楁
+     */
+    private String itemField = "";
+    //list
+    private String itemOR = "";
+    private String itemEQ = "";
+    private String itemTrim = "";
+    /**
+     * 蹇界暐
+     */
+    private String itemDbl = "";
+    /**
+     * 瀛楃涓叉埅鍙�
+     */
+    private String itemCut = "";
+    /**
+     *缁戝畾琛ㄥ崟
+     */
+    private String itemInObj = "";
+    /**
+     * form锛氬瓧娈佃〃杈惧紡  table锛氶檮鍔犳煡璇㈡潯浠�
+     */
+    private String itemAddFilter = "";
+    /**
+     *
+     */
+    private String itemOutType = "";
+    /**
+     * table 姣忛〉鍙樉绀鸿鏁�
+     */
+    private String itemPageSize = "";
+    /**
+     * 鍥剧墖瀹介珮锛�0,0
+     */
+    private String itemImgWH = "";
+    /**
+     * 闇�瑕佷娇鐢ㄧ殑瀛楁
+     */
+    private String itemOutFields = "";
+    /**
+     * 寰呴�夋嫨鐨勫睘鎬у瓧娈�
+     */
+    private List<String[]> itemSelectoutFields=new ArrayList<>();
+
+
+    /**
+     * 闇�瑕佷娇鐢ㄧ殑闆嗗悎
+     */
+    private List<String> itemOutFieldList=new ArrayList<>();
+    /**
+     * 闇�瑕佹悳绱㈢殑瀛楁
+     */
+    private String itemKeyFields = "";
+    /**
+     *寰呮悳绱㈠瓧娈�
+     */
+    private List<String> itemSearchFieldList=new ArrayList<>();
+    /**
+     * 闇�瑕佹悳绱㈢殑瀛楁
+     */
+    private List<String> itemKeyFieldList=new ArrayList<>();
+
+    private String itemBat = "";
+    /**
+     * 瀹藉害
+     */
+    private String itemFieldWidth = "";
+    /**
+     * 鍒楁樉绀哄娈� itemOutFieldList 鐩稿尮閰�
+     */
+    private List<KeyValue> itemFieldWidthList=new ArrayList<>();
+
+    //form
+    private String itemTxf = "";
+    /**
+     * 鏄剧ず鍚嶇О
+     */
+    private String itemName = "";
+    /**
+     * 灞炴�х被鍨�
+     *      text:鍗曡鏂囨湰妗�
+     * 		textbtn:鏂囨湰鎸夐挳妗�:
+     * 		textarea:澶氳鏂囨湰妗�:
+     * 		richtext:瀵屾枃鏈:
+     * 		number:鏁板瓧杈撳叆妗�:
+     * 		password:瀵嗙爜妗�:
+     * 		radio:鍗曢�夋寜閽�:
+     * 		checkbox:澶氶�夋寜閽�:
+     * 		select:涓嬫媺鑿滃崟:
+     * 		multiselect:澶氶�変笅鎷夎彍鍗�:
+     * 		date:鏃ユ湡杈撳叆妗�:
+     * 		time:鏃堕棿杈撳叆妗�:
+     * 		datetime:鏃ユ湡鏃堕棿杈撳叆妗�:
+     * 		file:鏂囦欢涓婁紶:
+     * 		multiFile:澶氭枃浠朵笂浼�:
+     * 		custom:鑷畾涔�:
+     * 		customform:鑷畾涔夎〃鍗�:
+     * 		hidden:闅愯棌鎴栨櫘閫氭枃瀛�:
+     * 		webeditor:Web缂栬緫鍣�:
+     * 		specialCharacter:鐗规畩瀛楃:
+     */
+    private String itemType = "";
+    /**
+     * 灞炴�х被鍨嬫樉绀哄��
+     */
+    private String itemTypeText = "";
+    /**
+     * 榛樿鍊�
+     */
+    private String itemValue = "";
+    /**
+     *鍗犱綅鏂瑰紡 1:鏄剧ず锛�2:涓嶆樉绀�
+     */
+    private String itemCols = "";
+    /**
+     *
+     */
+    private String itemRows = "";
+    /**
+     * 闄勫姞灞炴�э紙鏍峰紡锛�
+     */
+    private String itemStyle = "";
+    /**
+     *鑴氭湰楠岃瘉
+     */
+    private String itemScript = "";
+    /**
+     * 鎻愮ず鏂囧瓧
+     */
+    private String itemTips = "";
+    /**
+     * 鏋氫妇鍊�
+     */
+    private List<String> itemValueList = null;
+    /**
+     *涓�绾у弬鐓�
+     */
+    private String itemListTable = "";
+    /**
+     *浜岀骇鍙傜収
+     */
+    private String itemListTxt = "";
+    /**
+     *鍙傜収鍊�
+     */
+    private String itemListVal = "";
+    /**
+     * 鏄惁鍙互缂栬緫0:缂栬緫锛�1锛氬彧璇�
+     */
+    private String itemIsEditable = "";
+    /**
+     * 鍙閫夋嫨鏉′欢
+     */
+    private String itemEditableProgram = "";
+
+    /**
+     *
+     */
+    private String itemEditCondition = "";
+    /**
+     * 鏄惁鏄剧ず瀛楁 0锛涗笉鏄剧ず锛�1锛氭樉绀�
+     */
+    private String itemIsHidden = "";
+    /**
+     * 鏌ヨ妯℃澘鍚嶇О
+     */
+    private String itemQtName = "";
+    /**
+     * 鏄惁蹇呭~ 0:鍚︼紝1锛氭槸
+     */
+    private String itemIsRequired = "";
+    /**
+     *http瀛樺偍寮�鍏�  0锛氬惁锛�1锛氭槸
+     */
+    private String itemIsHttpSave = "";
+    /**
+     * 瀛樺偍璺緞
+     */
+    private String itemHttpVolumnPath = "";
+    /**
+     * 瀛樺偍璺緞瀛楁
+     */
+    private String itemHttpPathField = "";
+    /**
+     * 鏉冮檺鎺у埗
+     */
+    private String itemRight = "";
+    /**
+     * 楂樼骇鏌ヨ鍒�
+     */
+    private String itemSeniorQueryCols = "";
+    /**
+     * 楂樼骇鏌ヨ鍚勫垪浣跨敤娆℃暟
+     */
+    private String itemSeniorQueryColsCounts = "";
+
+    /**
+     *楂樼骇鏌ヨsql
+     */
+    private String itemQuerySql = "";
+    /***
+     * 楂樼骇鏌ヨ瀵硅薄
+     */
+    private  List<ItemSeniorQueryBO> itemSeniorQueryBOS=new ArrayList<>();
+
+    /**
+     * 瓒呴摼鎺ュ瓧娈�
+     */
+    private String itemHrefFields = "";
+    /**
+     * 瓒呴摼鎺ラ厤缃�
+     */
+    private String itemHrefConf = "";
+    /**
+     * 鏌ヨ鍏宠仈鍒�
+     */
+    private String itemQueryRefFields = "";
+    /***
+     * 鑷畾涔夌被璺緞
+     */
+    private String itemCustomClass = "";
+    /**
+     * 鎺у埗鏄剧ず鍒�
+     */
+    private String itemCtrlDisplyCol = "";
+    /**
+     * 鎺у埗鏄剧ず鏉′欢
+     */
+    private String itemCtrlDisplyCondition = "";
+    /**
+     * 鏌ヨ鍖哄煙鏄剧ず鎺у埗 true锛氭樉绀猴紝false 涓嶆樉绀�
+     */
+    private String itemIsNavigatorExpand = "";
+    /**
+     * 鏄惁鏄剧ず鏂囦欢澶� true锛氭樉绀猴紝false 涓嶆樉绀�
+     */
+    private String itemIsShowFolder = "";
+    /**
+     * 鐖舵枃浠跺す鍚嶇О
+     */
+    private String itemParentFolderName = "";
+    /**
+     *   鏄剧ず琛ㄨ揪寮� ${aa}-${bb}
+     */
+    private String itemShowExpression = "";
+    /**
+     * 鏁版嵁涓烘棩鏈熺被鍨嬫椂鐨勬牸寮忓寲瀛楃涓� 濡� yyyy-MM-dd HH:mm:ss
+     */
+    private String itemDateFormat = "";
+
+    public String getItemRight() {
+        return itemRight;
+    }
+    public void setItemRight(String itemRight) {
+        this.itemRight = itemRight;
+    }
+    public String getItemQuerySql() {
+        return itemQuerySql;
+    }
+    public void setItemQuerySql(String itemQuerySql) {
+        this.itemQuerySql = itemQuerySql;
+    }
+    public String getItemFieldWidth() {
+        return itemFieldWidth;
+    }
+    public void setItemFieldWidth(String itemFieldWidth) {
+        this.itemFieldWidth = itemFieldWidth;
+    }
+    public String getItemParentFolderName() {
+        return itemParentFolderName;
+    }
+    public void setItemParentFolderName(String itemParentFolderName) {
+        this.itemParentFolderName = itemParentFolderName;
+    }
+    public String getItemIsShowFolder() {
+        return itemIsShowFolder;
+    }
+    public void setItemIsShowFolder(String itemIsShowFolder) {
+        this.itemIsShowFolder = itemIsShowFolder;
+    }
+    public String getItemIsNavigatorExpand() {
+        return itemIsNavigatorExpand;
+    }
+    public void setItemIsNavigatorExpand(String itemIsNavigatorExpand) {
+        this.itemIsNavigatorExpand = itemIsNavigatorExpand;
+    }
+    public String getItemField() {
+        return itemField;
+    }
+    public void setItemField(String itemField) {
+        this.itemField = itemField;
+    }
+    public String getItemOR() {
+        return itemOR;
+    }
+    public void setItemOR(String itemOR) {
+        this.itemOR = itemOR;
+    }
+    public String getItemEQ() {
+        return itemEQ;
+    }
+    public void setItemEQ(String itemEQ) {
+        this.itemEQ = itemEQ;
+    }
+    public String getItemTrim() {
+        return itemTrim;
+    }
+    public void setItemTrim(String itemTrim) {
+        this.itemTrim = itemTrim;
+    }
+    public String getItemDbl() {
+        return itemDbl;
+    }
+    public void setItemDbl(String itemDbl) {
+        this.itemDbl = itemDbl;
+    }
+    public String getItemCut() {
+        return itemCut;
+    }
+    public void setItemCut(String itemCut) {
+        this.itemCut = itemCut;
+    }
+    public String getItemInObj() {
+        return itemInObj;
+    }
+    public void setItemInObj(String itemInObj) {
+        this.itemInObj = itemInObj;
+    }
+    public String getItemOutType() {
+        return itemOutType;
+    }
+    public void setItemOutType(String itemOutType) {
+        this.itemOutType = itemOutType;
+    }
+    public String getItemPageSize() {
+        return itemPageSize;
+    }
+    public void setItemPageSize(String itemPageSize) {
+        this.itemPageSize = itemPageSize;
+    }
+    public String getItemImgWH() {
+        return itemImgWH;
+    }
+    public void setItemImgWH(String itemImgWH) {
+        this.itemImgWH = itemImgWH;
+    }
+    public String getItemOutFields() {
+        return itemOutFields;
+    }
+    public void setItemOutFields(String itemOutFields) {
+        this.itemOutFields = itemOutFields;
+    }
+    public String getItemKeyFields() {
+        return itemKeyFields;
+    }
+    public void setItemKeyFields(String itemKeyFields) {
+        this.itemKeyFields = itemKeyFields;
+    }
+    public String getItemBat() {
+        return itemBat;
+    }
+    public void setItemBat(String itemBat) {
+        this.itemBat = itemBat;
+    }
+    public String getItemTxf() {
+        return itemTxf;
+    }
+    public void setItemTxf(String itemTxf) {
+        this.itemTxf = itemTxf;
+    }
+    public String getItemName() {
+        return itemName;
+    }
+    public void setItemName(String itemName) {
+        this.itemName = itemName;
+    }
+    public String getItemType() {
+        return itemType;
+    }
+    public void setItemType(String itemType) {
+        this.itemType = itemType;
+    }
+    public String getItemValue() {
+        return itemValue;
+    }
+    public void setItemValue(String itemValue) {
+        this.itemValue = itemValue;
+    }
+    public String getItemCols() {
+        return itemCols;
+    }
+    public void setItemCols(String itemCols) {
+        this.itemCols = itemCols;
+    }
+    public String getItemRows() {
+        return itemRows;
+    }
+    public void setItemRows(String itemRows) {
+        this.itemRows = itemRows;
+    }
+    public List<String> getItemValueList() {
+        return itemValueList;
+    }
+    public void setItemValueList(List<String> itemValueList) {
+        this.itemValueList = itemValueList;
+    }
+    public String getItemListTable() {
+        return itemListTable;
+    }
+    public void setItemListTable(String itemListTable) {
+        this.itemListTable = itemListTable;
+    }
+
+    public String getItemListTxt() {
+        return itemListTxt;
+    }
+    public void setItemListTxt(String itemListTxt) {
+        this.itemListTxt = itemListTxt;
+    }
+    public String getItemListVal() {
+        return itemListVal;
+    }
+    public void setItemListVal(String itemListVal) {
+        this.itemListVal = itemListVal;
+    }
+    public String getItemAddFilter() {
+        return itemAddFilter;
+    }
+    public void setItemAddFilter(String itemAddFilter) {
+        this.itemAddFilter = itemAddFilter;
+    }
+    public String getItemStyle() {
+        return itemStyle;
+    }
+    public void setItemStyle(String itemStyle) {
+        this.itemStyle = itemStyle;
+    }
+    public String getItemScript() {
+        return itemScript;
+    }
+    public void setItemScript(String itemScript) {
+        this.itemScript = itemScript;
+    }
+    public String getItemTips() {
+        return itemTips;
+    }
+    public void setItemTips(String itemTips) {
+        this.itemTips = itemTips;
+    }
+    public String getItemIsEditable() {
+        return itemIsEditable;
+    }
+    public void setItemIsEditable(String itemIsEditable) {
+        this.itemIsEditable = itemIsEditable;
+    }
+    public String getItemIsHidden() {
+        return itemIsHidden;
+    }
+    public void setItemIsHidden(String itemIsHidden) {
+        this.itemIsHidden = itemIsHidden;
+    }
+    public String getItemQtName() {
+        return itemQtName;
+    }
+    public void setItemQtName(String itemQtName) {
+        this.itemQtName = itemQtName;
+    }
+    public String getItemIsRequired() {
+        return itemIsRequired;
+    }
+    public void setItemIsRequired(String itemIsRequired) {
+        this.itemIsRequired = itemIsRequired;
+    }
+    public String getItemSeniorQueryCols() {
+        return itemSeniorQueryCols;
+    }
+    public void setItemSeniorQueryCols(String itemSeniorQueryCols) {
+        this.itemSeniorQueryCols = itemSeniorQueryCols;
+    }
+    public String getItemSeniorQueryColsCounts() {
+        return itemSeniorQueryColsCounts;
+    }
+    public void setItemSeniorQueryColsCounts(String itemSeniorQueryColsCounts) {
+        this.itemSeniorQueryColsCounts = itemSeniorQueryColsCounts;
+    }
+    public String getItemHrefFields() {
+        return itemHrefFields;
+    }
+    public void setItemHrefFields(String itemHrefFields) {
+        this.itemHrefFields = itemHrefFields;
+    }
+    public String getItemHrefConf() {
+        return itemHrefConf;
+    }
+    public void setItemHrefConf(String itemHrefConf) {
+        this.itemHrefConf = itemHrefConf;
+    }
+    public String getItemQueryRefFields() {
+        return itemQueryRefFields;
+    }
+    public void setItemQueryRefFields(String itemQueryRefFields) {
+        this.itemQueryRefFields = itemQueryRefFields;
+    }
+    public String getItemCustomClass() {
+        return itemCustomClass;
+    }
+    public void setItemCustomClass(String itemCustomClass) {
+        this.itemCustomClass = itemCustomClass;
+    }
+    public String getItemCtrlDisplyCol() {
+        return itemCtrlDisplyCol;
+    }
+    public void setItemCtrlDisplyCol(String itemCtrlDisplyCol) {
+        this.itemCtrlDisplyCol = itemCtrlDisplyCol;
+    }
+    public String getItemCtrlDisplyCondition() {
+        return itemCtrlDisplyCondition;
+    }
+    public void setItemCtrlDisplyCondition(String itemCtrlDisplyCondition) {
+        this.itemCtrlDisplyCondition = itemCtrlDisplyCondition;
+    }
+    public String getItemIsHttpSave() {
+        return itemIsHttpSave;
+    }
+    public void setItemIsHttpSave(String itemIsHttpSave) {
+        this.itemIsHttpSave = itemIsHttpSave;
+    }
+    public String getItemHttpVolumnPath() {
+        return itemHttpVolumnPath;
+    }
+    public void setItemHttpVolumnPath(String itemHttpVolumnPath) {
+        this.itemHttpVolumnPath = itemHttpVolumnPath;
+    }
+    public String getItemHttpPathField() {
+        return itemHttpPathField;
+    }
+    public void setItemHttpPathField(String itemHttpPathField) {
+        this.itemHttpPathField = itemHttpPathField;
+    }
+    public String getItemEditCondition() {
+        return itemEditCondition;
+    }
+    public void setItemEditCondition(String itemEditCondition) {
+        this.itemEditCondition = itemEditCondition;
+    }
+    public String getItemEditableProgram() {
+        return itemEditableProgram;
+    }
+    public void setItemEditableProgram(String itemEditableProgram) {
+        this.itemEditableProgram = itemEditableProgram;
+    }
+
+    public String getItemShowExpression() {
+        return itemShowExpression;
+    }
+    public void setItemShowExpression(String itemShowExpression) {
+        this.itemShowExpression = itemShowExpression;
+    }
+    public String getItemDateFormat() {
+        return itemDateFormat;
+    }
+    public void setItemDateFormat(String itemDateFormat) {
+        this.itemDateFormat = itemDateFormat;
+    }
+
+    public List<String> getItemOutFieldList() {
+        return itemOutFieldList;
+    }
+
+    public void setItemOutFieldList(List<String> itemOutFieldList) {
+        this.itemOutFieldList = itemOutFieldList;
+    }
+
+    public List<String> getItemKeyFieldList() {
+        return itemKeyFieldList;
+    }
+
+    public void setItemKeyFieldList(List<String> itemKeyFieldList) {
+        this.itemKeyFieldList = itemKeyFieldList;
+    }
+
+    public List<KeyValue> getItemFieldWidthList() {
+        return itemFieldWidthList;
+    }
+
+    public void setItemFieldWidthList(List<KeyValue> itemFieldWidthList) {
+        this.itemFieldWidthList = itemFieldWidthList;
+    }
+
+    public String getItemTypeText() {
+        return itemTypeText;
+    }
+
+    public void setItemTypeText(String itemTypeText) {
+        this.itemTypeText = itemTypeText;
+    }
+
+    public List<ItemSeniorQueryBO> getItemSeniorQueryBOS() {
+        return itemSeniorQueryBOS;
+    }
+
+    public void setItemSeniorQueryBOS(List<ItemSeniorQueryBO> itemSeniorQueryBOS) {
+        this.itemSeniorQueryBOS = itemSeniorQueryBOS;
+    }
+
+    public List<String[]> getItemSelectoutFields() {
+        return itemSelectoutFields;
+    }
+
+    public void setItemSelectoutFields(List<String[]> itemSelectoutFields) {
+        this.itemSelectoutFields = itemSelectoutFields;
+    }
+
+    public List<String> getItemSearchFieldList() {
+        return itemSearchFieldList;
+    }
+
+    public void setItemSearchFieldList(List<String> itemSearchFieldList) {
+        this.itemSearchFieldList = itemSearchFieldList;
+    }
+    //    /**
+//     * 楂樼骇鏌ヨ鍒椾笌浣跨敤娆℃暟
+//     */
+//    public Map<String, Integer> getColAndUseCountMap() {
+//        if(this.itemSeniorQueryCols == null || this.itemSeniorQueryColsCounts == null
+//                || this.itemSeniorQueryCols.equals("") || this.itemSeniorQueryColsCounts.equals("")){
+//            return null;
+//        }
+//        Map<String, Integer> map = new LinkedHashMap<String, Integer>();
+//        String[] cols = this.itemSeniorQueryCols.split(",");
+//        String[] counts = this.itemSeniorQueryColsCounts.split(",");
+//        for(int i = 0; i < cols.length; i++){
+//            int count = Integer.valueOf(counts[i]);
+//            map.put(cols[i], count);
+//        }
+//        return map;
+//    }
+//
+//    /**
+//     * 楂樼骇鏌ヨ鑷畾涔夊垪涓庢煡璇ql
+//     */
+//    public Map<String, String> getCustomerColAndSql() {
+//        if(this.itemSeniorQueryCols == null || this.itemQuerySql == null
+//                || this.itemSeniorQueryCols.equals("") || this.itemQuerySql.equals("")){
+//            return null;
+//        }
+//        Map<String, String> map = new LinkedHashMap<String, String>();
+//        String[] cols = this.itemSeniorQueryCols.split(",");
+//        String[] sqls = this.itemQuerySql.split(";");
+//        for(int i = 0; i < cols.length; i++){
+//            String sql = sqls[i];
+//            if(sql != null && !sql.equalsIgnoreCase("NULL")){
+//                map.put(cols[i], sql);
+//            }
+//        }
+//        return map;
+//    }
+//
+//    /**
+//     * 杩斿洖 PRMItem 瀵硅薄鏄惁鏄剧ず
+//     * @return 瀵硅薄鏄惁鏄剧ず  (瀵瑰簲琛ㄥ崟灞炴�у畾涔夌殑鍗犱綅鏂瑰紡鐨勬樉绀恒�佷笉鏄剧ず锛�<p>true:鏄剧ず false:涓嶆樉绀�</p>
+//     */
+//    public boolean isShow(){
+//        return ("1".equalsIgnoreCase(this.getItemCols().trim()));
+//    }
+//    /**
+//     * 杩斿洖 PRMItem 瀵硅薄鏄惁鏄繀濉」
+//     * @return 瀵硅薄鏄惁鏄繀濉�<p>true:鏄惧繀濉」 false:涓嶆槸蹇呭~椤�</p>
+//     */
+//    public boolean isRequired(){
+//        return ("1".equalsIgnoreCase(this.getItemIsRequired().trim()));
+//    }
+//    /**
+//     * 杩斿洖 PRMItem 瀵硅薄 鏄惁鍙互缂栬緫
+//     * @return 瀵硅薄鏄惁鍙紪杈� <p>true: 鍙紪杈�(闈炲彧璇�) false: 涓嶅彲缂栬緫(鍙)</p>
+//     */
+//    public boolean isEditable(){
+//        return ("0".equalsIgnoreCase(this.getItemIsEditable().trim()));
+//    }
+//    /**
+//     * 杩斿洖 PRMItem 瀵硅薄 鏄惁鍙槸鍙
+//     * @return 瀵硅薄鏄惁鍙紪杈� <p>true: 鍙(涓嶅彲缂栬緫) false: 闈炲彧璇�(鍙紪杈�)</p>
+//     */
+//    public boolean isReadonly(){
+//        return !(isEditable());
+//    }
+
+
+    @Override
+    public String toString() {
+        return "PRMItemDTO{" +
+                "itemField='" + itemField + '\'' +
+                ", itemOR='" + itemOR + '\'' +
+                ", itemEQ='" + itemEQ + '\'' +
+                ", itemTrim='" + itemTrim + '\'' +
+                ", itemDbl='" + itemDbl + '\'' +
+                ", itemCut='" + itemCut + '\'' +
+                ", itemInObj='" + itemInObj + '\'' +
+                ", itemAddFilter='" + itemAddFilter + '\'' +
+                ", itemOutType='" + itemOutType + '\'' +
+                ", itemPageSize='" + itemPageSize + '\'' +
+                ", itemImgWH='" + itemImgWH + '\'' +
+                ", itemOutFields='" + itemOutFields + '\'' +
+                ", itemSelectoutFields=" + itemSelectoutFields +
+                ", itemOutFieldList=" + itemOutFieldList +
+                ", itemKeyFields='" + itemKeyFields + '\'' +
+                ", itemSearchFieldList=" + itemSearchFieldList +
+                ", itemKeyFieldList=" + itemKeyFieldList +
+                ", itemBat='" + itemBat + '\'' +
+                ", itemFieldWidth='" + itemFieldWidth + '\'' +
+                ", itemFieldWidthList=" + itemFieldWidthList +
+                ", itemTxf='" + itemTxf + '\'' +
+                ", itemName='" + itemName + '\'' +
+                ", itemType='" + itemType + '\'' +
+                ", itemTypeText='" + itemTypeText + '\'' +
+                ", itemValue='" + itemValue + '\'' +
+                ", itemCols='" + itemCols + '\'' +
+                ", itemRows='" + itemRows + '\'' +
+                ", itemStyle='" + itemStyle + '\'' +
+                ", itemScript='" + itemScript + '\'' +
+                ", itemTips='" + itemTips + '\'' +
+                ", itemValueList=" + itemValueList +
+                ", itemListTable='" + itemListTable + '\'' +
+                ", itemListTxt='" + itemListTxt + '\'' +
+                ", itemListVal='" + itemListVal + '\'' +
+                ", itemIsEditable='" + itemIsEditable + '\'' +
+                ", itemEditableProgram='" + itemEditableProgram + '\'' +
+                ", itemEditCondition='" + itemEditCondition + '\'' +
+                ", itemIsHidden='" + itemIsHidden + '\'' +
+                ", itemQtName='" + itemQtName + '\'' +
+                ", itemIsRequired='" + itemIsRequired + '\'' +
+                ", itemIsHttpSave='" + itemIsHttpSave + '\'' +
+                ", itemHttpVolumnPath='" + itemHttpVolumnPath + '\'' +
+                ", itemHttpPathField='" + itemHttpPathField + '\'' +
+                ", itemRight='" + itemRight + '\'' +
+                ", itemSeniorQueryCols='" + itemSeniorQueryCols + '\'' +
+                ", itemSeniorQueryColsCounts='" + itemSeniorQueryColsCounts + '\'' +
+                ", itemQuerySql='" + itemQuerySql + '\'' +
+                ", itemSeniorQueryBOS=" + itemSeniorQueryBOS +
+                ", itemHrefFields='" + itemHrefFields + '\'' +
+                ", itemHrefConf='" + itemHrefConf + '\'' +
+                ", itemQueryRefFields='" + itemQueryRefFields + '\'' +
+                ", itemCustomClass='" + itemCustomClass + '\'' +
+                ", itemCtrlDisplyCol='" + itemCtrlDisplyCol + '\'' +
+                ", itemCtrlDisplyCondition='" + itemCtrlDisplyCondition + '\'' +
+                ", itemIsNavigatorExpand='" + itemIsNavigatorExpand + '\'' +
+                ", itemIsShowFolder='" + itemIsShowFolder + '\'' +
+                ", itemParentFolderName='" + itemParentFolderName + '\'' +
+                ", itemShowExpression='" + itemShowExpression + '\'' +
+                ", itemDateFormat='" + itemDateFormat + '\'' +
+                '}';
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PortalVIDTO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PortalVIDTO.java
new file mode 100644
index 0000000..be2d3bd
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PortalVIDTO.java
@@ -0,0 +1,96 @@
+package com.vci.dto;
+
+/**
+ *
+ * 琛ㄥ崟鏄剧ず瀵硅薄
+ * @author xiej
+ * @date 2024/08/14 6:04 PM
+ */
+public class PortalVIDTO implements  java.io.Serializable{
+
+    private static final long serialVersionUID = 3676954583670971638L;
+    /**
+     * 涓婚敭
+     */
+    private String id;
+    /**
+     * 0: 涓氬姟绫诲瀷; 1: 閾炬帴绫诲瀷. 榛樿0
+     */
+    private short typeFlag;
+    /**
+     * 绫诲瀷鍚�
+     */
+    private String typeName;
+    /**
+     * 瑙嗗浘鍚�
+     */
+    private String viName;
+    /**
+     * 瑙嗗浘绫诲瀷: 杈撳叆琛ㄥ崟鎴栧垎椤靛垪琛�
+     */
+    private short viType;
+    /**
+     * 瀹氫箟璇︽儏
+     */
+    private PRMDTO prm;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public short getTypeFlag() {
+        return typeFlag;
+    }
+
+    public void setTypeFlag(short typeFlag) {
+        this.typeFlag = typeFlag;
+    }
+
+    public String getTypeName() {
+        return typeName;
+    }
+
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+    public String getViName() {
+        return viName;
+    }
+
+    public void setViName(String viName) {
+        this.viName = viName;
+    }
+
+    public short getViType() {
+        return viType;
+    }
+
+    public void setViType(short viType) {
+        this.viType = viType;
+    }
+
+    public PRMDTO getPrm() {
+        return prm;
+    }
+
+    public void setPrm(PRMDTO prm) {
+        this.prm = prm;
+    }
+
+    @Override
+    public String toString() {
+        return "PortalVIVO{" +
+                "id='" + id + '\'' +
+                ", typeFlag=" + typeFlag +
+                ", typeName='" + typeName + '\'' +
+                ", viName='" + viName + '\'' +
+                ", viType=" + viType +
+                ", prm=" + prm +
+                '}';
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PRMDO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PRMDO.java
new file mode 100644
index 0000000..9da856f
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PRMDO.java
@@ -0,0 +1,45 @@
+package com.vci.model;
+
+import java.util.List;
+
+public class PRMDO implements   java.io.Serializable {
+
+
+    private static final long serialVersionUID = -5898872445810489324L;
+    private String showCols = "3";
+    private String formQtName = "";
+    private List<PRMItemDO> prmItemList;
+
+    public String getShowCols() {
+        return showCols;
+    }
+
+    public void setShowCols(String showCols) {
+        this.showCols = showCols;
+    }
+
+    public String getFormQtName() {
+        return formQtName;
+    }
+
+    public void setFormQtName(String formQtName) {
+        this.formQtName = formQtName;
+    }
+
+    public List<PRMItemDO> getPrmItemList() {
+        return prmItemList;
+    }
+
+    public void setPrmItemList(List<PRMItemDO> prmItemList) {
+        this.prmItemList = prmItemList;
+    }
+
+    @Override
+    public String toString() {
+        return "PRMVO{" +
+                "showCols='" + showCols + '\'' +
+                ", formQtName='" + formQtName + '\'' +
+                ", prmItemList=" + prmItemList +
+                '}';
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PRMItemDO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PRMItemDO.java
new file mode 100644
index 0000000..c758bb8
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PRMItemDO.java
@@ -0,0 +1,725 @@
+package com.vci.model;
+
+import com.vci.bo.ItemSeniorQueryBO;
+import com.vci.pagemodel.KeyValue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PRMItemDO implements java.io.Serializable {
+
+    private static final long serialVersionUID = 4168551730739914307L;
+    /**
+     * 浣跨敤瀛楁
+     */
+    private String itemField = "";
+    //list
+    private String itemOR = "";
+    private String itemEQ = "";
+    private String itemTrim = "";
+    /**
+     * 蹇界暐
+     */
+    private String itemDbl = "";
+    /**
+     * 瀛楃涓叉埅鍙�
+     */
+    private String itemCut = "";
+    /**
+     *缁戝畾琛ㄥ崟
+     */
+    private String itemInObj = "";
+    /**
+     * form锛氬瓧娈佃〃杈惧紡  table锛氶檮鍔犳煡璇㈡潯浠�
+     */
+    private String itemAddFilter = "";
+    /**
+     *
+     */
+    private String itemOutType = "";
+    /**
+     * table 姣忛〉鍙樉绀鸿鏁�
+     */
+    private String itemPageSize = "";
+    /**
+     * 鍥剧墖瀹介珮锛�0,0
+     */
+    private String itemImgWH = "";
+    /**
+     * 闇�瑕佷娇鐢ㄧ殑瀛楁
+     */
+    private String itemOutFields = "";
+
+
+
+
+    /**
+     * 闇�瑕佹悳绱㈢殑瀛楁
+     */
+    private String itemKeyFields = "";
+
+
+    private String itemBat = "";
+    /**
+     * 瀹藉害
+     */
+    private String itemFieldWidth = "";
+
+    //form
+    private String itemTxf = "";
+    /**
+     * 鏄剧ず鍚嶇О
+     */
+    private String itemName = "";
+    /**
+     * 灞炴�х被鍨�
+     *      text:鍗曡鏂囨湰妗�
+     * 		textbtn:鏂囨湰鎸夐挳妗�:
+     * 		textarea:澶氳鏂囨湰妗�:
+     * 		richtext:瀵屾枃鏈:
+     * 		number:鏁板瓧杈撳叆妗�:
+     * 		password:瀵嗙爜妗�:
+     * 		radio:鍗曢�夋寜閽�:
+     * 		checkbox:澶氶�夋寜閽�:
+     * 		select:涓嬫媺鑿滃崟:
+     * 		multiselect:澶氶�変笅鎷夎彍鍗�:
+     * 		date:鏃ユ湡杈撳叆妗�:
+     * 		time:鏃堕棿杈撳叆妗�:
+     * 		datetime:鏃ユ湡鏃堕棿杈撳叆妗�:
+     * 		file:鏂囦欢涓婁紶:
+     * 		multiFile:澶氭枃浠朵笂浼�:
+     * 		custom:鑷畾涔�:
+     * 		customform:鑷畾涔夎〃鍗�:
+     * 		hidden:闅愯棌鎴栨櫘閫氭枃瀛�:
+     * 		webeditor:Web缂栬緫鍣�:
+     * 		specialCharacter:鐗规畩瀛楃:
+     */
+    private String itemType = "";
+    /**
+     * 灞炴�х被鍨嬫樉绀哄��
+     */
+    private String itemTypeText = "";
+    /**
+     * 榛樿鍊�
+     */
+    private String itemValue = "";
+    /**
+     *鍗犱綅鏂瑰紡 1:鏄剧ず锛�2:涓嶆樉绀�
+     */
+    private String itemCols = "";
+    /**
+     *
+     */
+    private String itemRows = "";
+    /**
+     * 闄勫姞灞炴�э紙鏍峰紡锛�
+     */
+    private String itemStyle = "";
+    /**
+     *鑴氭湰楠岃瘉
+     */
+    private String itemScript = "";
+    /**
+     * 鎻愮ず鏂囧瓧
+     */
+    private String itemTips = "";
+    /**
+     * 鏋氫妇鍊�
+     */
+    private List<String> itemValueList = null;
+
+    /**
+     *涓�绾у弬鐓�
+     */
+    private String itemListTable = "";
+    /**
+     *浜岀骇鍙傜収
+     */
+    private String itemListTxt = "";
+    /**
+     *鍙傜収鍊�
+     */
+    private String itemListVal = "";
+    /**
+     * 鏄惁鍙互缂栬緫0:缂栬緫锛�1锛氬彧璇�
+     */
+    private String itemIsEditable = "";
+    /**
+     * 鍙閫夋嫨鏉′欢
+     */
+    private String itemEditableProgram = "";
+
+    /**
+     *
+     */
+    private String itemEditCondition = "";
+    /**
+     * 鏄惁鏄剧ず瀛楁 0锛涗笉鏄剧ず锛�1锛氭樉绀�
+     */
+    private String itemIsHidden = "";
+    /**
+     * 鏌ヨ妯℃澘鍚嶇О
+     */
+    private String itemQtName = "";
+    /**
+     * 鏄惁蹇呭~ 0:鍚︼紝1锛氭槸
+     */
+    private String itemIsRequired = "";
+    /**
+     *http瀛樺偍寮�鍏�  0锛氬惁锛�1锛氭槸
+     */
+    private String itemIsHttpSave = "";
+    /**
+     * 瀛樺偍璺緞
+     */
+    private String itemHttpVolumnPath = "";
+    /**
+     * 瀛樺偍璺緞瀛楁
+     */
+    private String itemHttpPathField = "";
+    /**
+     * 鏉冮檺鎺у埗
+     */
+    private String itemRight = "";
+    /**
+     * 楂樼骇鏌ヨ鍒�
+     */
+    private String itemSeniorQueryCols = "";
+    /**
+     * 楂樼骇鏌ヨ鍚勫垪浣跨敤娆℃暟
+     */
+    private String itemSeniorQueryColsCounts = "";
+
+    /**
+     *楂樼骇鏌ヨsql
+     */
+    private String itemQuerySql = "";
+
+    /**
+     * 瓒呴摼鎺ュ瓧娈�
+     */
+    private String itemHrefFields = "";
+    /**
+     * 瓒呴摼鎺ラ厤缃�
+     */
+    private String itemHrefConf = "";
+    /**
+     * 鏌ヨ鍏宠仈鍒�
+     */
+    private String itemQueryRefFields = "";
+    /***
+     * 鑷畾涔夌被璺緞
+     */
+    private String itemCustomClass = "";
+    /**
+     * 鎺у埗鏄剧ず鍒�
+     */
+    private String itemCtrlDisplyCol = "";
+    /**
+     * 鎺у埗鏄剧ず鏉′欢
+     */
+    private String itemCtrlDisplyCondition = "";
+    /**
+     * 鏌ヨ鍖哄煙鏄剧ず鎺у埗 true锛氭樉绀猴紝false 涓嶆樉绀�
+     */
+    private String itemIsNavigatorExpand = "";
+    /**
+     * 鏄惁鏄剧ず鏂囦欢澶� true锛氭樉绀猴紝false 涓嶆樉绀�
+     */
+    private String itemIsShowFolder = "";
+    /**
+     * 鐖舵枃浠跺す鍚嶇О
+     */
+    private String itemParentFolderName = "";
+    /**
+     *   鏄剧ず琛ㄨ揪寮� ${aa}-${bb}
+     */
+    private String itemShowExpression = "";
+    /**
+     * 鏁版嵁涓烘棩鏈熺被鍨嬫椂鐨勬牸寮忓寲瀛楃涓� 濡� yyyy-MM-dd HH:mm:ss
+     */
+    private String itemDateFormat = "";
+
+    public String getItemField() {
+        return itemField;
+    }
+
+    public void setItemField(String itemField) {
+        this.itemField = itemField;
+    }
+
+    public String getItemOR() {
+        return itemOR;
+    }
+
+    public void setItemOR(String itemOR) {
+        this.itemOR = itemOR;
+    }
+
+    public String getItemEQ() {
+        return itemEQ;
+    }
+
+    public void setItemEQ(String itemEQ) {
+        this.itemEQ = itemEQ;
+    }
+
+    public String getItemTrim() {
+        return itemTrim;
+    }
+
+    public void setItemTrim(String itemTrim) {
+        this.itemTrim = itemTrim;
+    }
+
+    public String getItemDbl() {
+        return itemDbl;
+    }
+
+    public void setItemDbl(String itemDbl) {
+        this.itemDbl = itemDbl;
+    }
+
+    public String getItemCut() {
+        return itemCut;
+    }
+
+    public void setItemCut(String itemCut) {
+        this.itemCut = itemCut;
+    }
+
+    public String getItemInObj() {
+        return itemInObj;
+    }
+
+    public void setItemInObj(String itemInObj) {
+        this.itemInObj = itemInObj;
+    }
+
+    public String getItemAddFilter() {
+        return itemAddFilter;
+    }
+
+    public void setItemAddFilter(String itemAddFilter) {
+        this.itemAddFilter = itemAddFilter;
+    }
+
+    public String getItemOutType() {
+        return itemOutType;
+    }
+
+    public void setItemOutType(String itemOutType) {
+        this.itemOutType = itemOutType;
+    }
+
+    public String getItemPageSize() {
+        return itemPageSize;
+    }
+
+    public void setItemPageSize(String itemPageSize) {
+        this.itemPageSize = itemPageSize;
+    }
+
+    public String getItemImgWH() {
+        return itemImgWH;
+    }
+
+    public void setItemImgWH(String itemImgWH) {
+        this.itemImgWH = itemImgWH;
+    }
+
+    public String getItemOutFields() {
+        return itemOutFields;
+    }
+
+    public void setItemOutFields(String itemOutFields) {
+        this.itemOutFields = itemOutFields;
+    }
+    public String getItemKeyFields() {
+        return itemKeyFields;
+    }
+
+    public void setItemKeyFields(String itemKeyFields) {
+        this.itemKeyFields = itemKeyFields;
+    }
+
+    public String getItemBat() {
+        return itemBat;
+    }
+
+    public void setItemBat(String itemBat) {
+        this.itemBat = itemBat;
+    }
+
+    public String getItemFieldWidth() {
+        return itemFieldWidth;
+    }
+
+    public void setItemFieldWidth(String itemFieldWidth) {
+        this.itemFieldWidth = itemFieldWidth;
+    }
+
+
+    public String getItemTxf() {
+        return itemTxf;
+    }
+
+    public void setItemTxf(String itemTxf) {
+        this.itemTxf = itemTxf;
+    }
+
+    public String getItemName() {
+        return itemName;
+    }
+
+    public void setItemName(String itemName) {
+        this.itemName = itemName;
+    }
+
+    public String getItemType() {
+        return itemType;
+    }
+
+    public void setItemType(String itemType) {
+        this.itemType = itemType;
+    }
+
+    public String getItemTypeText() {
+        return itemTypeText;
+    }
+
+    public void setItemTypeText(String itemTypeText) {
+        this.itemTypeText = itemTypeText;
+    }
+
+    public String getItemValue() {
+        return itemValue;
+    }
+
+    public void setItemValue(String itemValue) {
+        this.itemValue = itemValue;
+    }
+
+    public String getItemCols() {
+        return itemCols;
+    }
+
+    public void setItemCols(String itemCols) {
+        this.itemCols = itemCols;
+    }
+
+    public String getItemRows() {
+        return itemRows;
+    }
+
+    public void setItemRows(String itemRows) {
+        this.itemRows = itemRows;
+    }
+
+    public String getItemStyle() {
+        return itemStyle;
+    }
+
+    public void setItemStyle(String itemStyle) {
+        this.itemStyle = itemStyle;
+    }
+
+    public String getItemScript() {
+        return itemScript;
+    }
+
+    public void setItemScript(String itemScript) {
+        this.itemScript = itemScript;
+    }
+
+    public String getItemTips() {
+        return itemTips;
+    }
+
+    public void setItemTips(String itemTips) {
+        this.itemTips = itemTips;
+    }
+
+    public List<String> getItemValueList() {
+        return itemValueList;
+    }
+
+    public void setItemValueList(List<String> itemValueList) {
+        this.itemValueList = itemValueList;
+    }
+
+    public String getItemListTable() {
+        return itemListTable;
+    }
+
+    public void setItemListTable(String itemListTable) {
+        this.itemListTable = itemListTable;
+    }
+
+    public String getItemListTxt() {
+        return itemListTxt;
+    }
+
+    public void setItemListTxt(String itemListTxt) {
+        this.itemListTxt = itemListTxt;
+    }
+
+    public String getItemListVal() {
+        return itemListVal;
+    }
+
+    public void setItemListVal(String itemListVal) {
+        this.itemListVal = itemListVal;
+    }
+
+    public String getItemIsEditable() {
+        return itemIsEditable;
+    }
+
+    public void setItemIsEditable(String itemIsEditable) {
+        this.itemIsEditable = itemIsEditable;
+    }
+
+    public String getItemEditableProgram() {
+        return itemEditableProgram;
+    }
+
+    public void setItemEditableProgram(String itemEditableProgram) {
+        this.itemEditableProgram = itemEditableProgram;
+    }
+
+    public String getItemEditCondition() {
+        return itemEditCondition;
+    }
+
+    public void setItemEditCondition(String itemEditCondition) {
+        this.itemEditCondition = itemEditCondition;
+    }
+
+    public String getItemIsHidden() {
+        return itemIsHidden;
+    }
+
+    public void setItemIsHidden(String itemIsHidden) {
+        this.itemIsHidden = itemIsHidden;
+    }
+
+    public String getItemQtName() {
+        return itemQtName;
+    }
+
+    public void setItemQtName(String itemQtName) {
+        this.itemQtName = itemQtName;
+    }
+
+    public String getItemIsRequired() {
+        return itemIsRequired;
+    }
+
+    public void setItemIsRequired(String itemIsRequired) {
+        this.itemIsRequired = itemIsRequired;
+    }
+
+    public String getItemIsHttpSave() {
+        return itemIsHttpSave;
+    }
+
+    public void setItemIsHttpSave(String itemIsHttpSave) {
+        this.itemIsHttpSave = itemIsHttpSave;
+    }
+
+    public String getItemHttpVolumnPath() {
+        return itemHttpVolumnPath;
+    }
+
+    public void setItemHttpVolumnPath(String itemHttpVolumnPath) {
+        this.itemHttpVolumnPath = itemHttpVolumnPath;
+    }
+
+    public String getItemHttpPathField() {
+        return itemHttpPathField;
+    }
+
+    public void setItemHttpPathField(String itemHttpPathField) {
+        this.itemHttpPathField = itemHttpPathField;
+    }
+
+    public String getItemRight() {
+        return itemRight;
+    }
+
+    public void setItemRight(String itemRight) {
+        this.itemRight = itemRight;
+    }
+
+    public String getItemSeniorQueryCols() {
+        return itemSeniorQueryCols;
+    }
+
+    public void setItemSeniorQueryCols(String itemSeniorQueryCols) {
+        this.itemSeniorQueryCols = itemSeniorQueryCols;
+    }
+
+    public String getItemSeniorQueryColsCounts() {
+        return itemSeniorQueryColsCounts;
+    }
+
+    public void setItemSeniorQueryColsCounts(String itemSeniorQueryColsCounts) {
+        this.itemSeniorQueryColsCounts = itemSeniorQueryColsCounts;
+    }
+
+    public String getItemQuerySql() {
+        return itemQuerySql;
+    }
+
+    public void setItemQuerySql(String itemQuerySql) {
+        this.itemQuerySql = itemQuerySql;
+    }
+
+
+    public String getItemHrefFields() {
+        return itemHrefFields;
+    }
+
+    public void setItemHrefFields(String itemHrefFields) {
+        this.itemHrefFields = itemHrefFields;
+    }
+
+    public String getItemHrefConf() {
+        return itemHrefConf;
+    }
+
+    public void setItemHrefConf(String itemHrefConf) {
+        this.itemHrefConf = itemHrefConf;
+    }
+
+    public String getItemQueryRefFields() {
+        return itemQueryRefFields;
+    }
+
+    public void setItemQueryRefFields(String itemQueryRefFields) {
+        this.itemQueryRefFields = itemQueryRefFields;
+    }
+
+    public String getItemCustomClass() {
+        return itemCustomClass;
+    }
+
+    public void setItemCustomClass(String itemCustomClass) {
+        this.itemCustomClass = itemCustomClass;
+    }
+
+    public String getItemCtrlDisplyCol() {
+        return itemCtrlDisplyCol;
+    }
+
+    public void setItemCtrlDisplyCol(String itemCtrlDisplyCol) {
+        this.itemCtrlDisplyCol = itemCtrlDisplyCol;
+    }
+
+    public String getItemCtrlDisplyCondition() {
+        return itemCtrlDisplyCondition;
+    }
+
+    public void setItemCtrlDisplyCondition(String itemCtrlDisplyCondition) {
+        this.itemCtrlDisplyCondition = itemCtrlDisplyCondition;
+    }
+
+    public String getItemIsNavigatorExpand() {
+        return itemIsNavigatorExpand;
+    }
+
+    public void setItemIsNavigatorExpand(String itemIsNavigatorExpand) {
+        this.itemIsNavigatorExpand = itemIsNavigatorExpand;
+    }
+
+    public String getItemIsShowFolder() {
+        return itemIsShowFolder;
+    }
+
+    public void setItemIsShowFolder(String itemIsShowFolder) {
+        this.itemIsShowFolder = itemIsShowFolder;
+    }
+
+    public String getItemParentFolderName() {
+        return itemParentFolderName;
+    }
+
+    public void setItemParentFolderName(String itemParentFolderName) {
+        this.itemParentFolderName = itemParentFolderName;
+    }
+
+    public String getItemShowExpression() {
+        return itemShowExpression;
+    }
+
+    public void setItemShowExpression(String itemShowExpression) {
+        this.itemShowExpression = itemShowExpression;
+    }
+
+    public String getItemDateFormat() {
+        return itemDateFormat;
+    }
+
+    public void setItemDateFormat(String itemDateFormat) {
+        this.itemDateFormat = itemDateFormat;
+    }
+    @Override
+    public String toString() {
+        return "PRMItemDO{" +
+                "itemField='" + itemField + '\'' +
+                ", itemOR='" + itemOR + '\'' +
+                ", itemEQ='" + itemEQ + '\'' +
+                ", itemTrim='" + itemTrim + '\'' +
+                ", itemDbl='" + itemDbl + '\'' +
+                ", itemCut='" + itemCut + '\'' +
+                ", itemInObj='" + itemInObj + '\'' +
+                ", itemAddFilter='" + itemAddFilter + '\'' +
+                ", itemOutType='" + itemOutType + '\'' +
+                ", itemPageSize='" + itemPageSize + '\'' +
+                ", itemImgWH='" + itemImgWH + '\'' +
+                ", itemOutFields='" + itemOutFields + '\'' +
+                ", itemKeyFields='" + itemKeyFields + '\'' +
+                ", itemBat='" + itemBat + '\'' +
+                ", itemFieldWidth='" + itemFieldWidth + '\'' +
+                ", itemTxf='" + itemTxf + '\'' +
+                ", itemName='" + itemName + '\'' +
+                ", itemType='" + itemType + '\'' +
+                ", itemTypeText='" + itemTypeText + '\'' +
+                ", itemValue='" + itemValue + '\'' +
+                ", itemCols='" + itemCols + '\'' +
+                ", itemRows='" + itemRows + '\'' +
+                ", itemStyle='" + itemStyle + '\'' +
+                ", itemScript='" + itemScript + '\'' +
+                ", itemTips='" + itemTips + '\'' +
+                ", itemValueList=" + itemValueList +
+                ", itemListTable='" + itemListTable + '\'' +
+                ", itemListTxt='" + itemListTxt + '\'' +
+                ", itemListVal='" + itemListVal + '\'' +
+                ", itemIsEditable='" + itemIsEditable + '\'' +
+                ", itemEditableProgram='" + itemEditableProgram + '\'' +
+                ", itemEditCondition='" + itemEditCondition + '\'' +
+                ", itemIsHidden='" + itemIsHidden + '\'' +
+                ", itemQtName='" + itemQtName + '\'' +
+                ", itemIsRequired='" + itemIsRequired + '\'' +
+                ", itemIsHttpSave='" + itemIsHttpSave + '\'' +
+                ", itemHttpVolumnPath='" + itemHttpVolumnPath + '\'' +
+                ", itemHttpPathField='" + itemHttpPathField + '\'' +
+                ", itemRight='" + itemRight + '\'' +
+                ", itemSeniorQueryCols='" + itemSeniorQueryCols + '\'' +
+                ", itemSeniorQueryColsCounts='" + itemSeniorQueryColsCounts + '\'' +
+                ", itemQuerySql='" + itemQuerySql + '\'' +
+                ", itemHrefFields='" + itemHrefFields + '\'' +
+                ", itemHrefConf='" + itemHrefConf + '\'' +
+                ", itemQueryRefFields='" + itemQueryRefFields + '\'' +
+                ", itemCustomClass='" + itemCustomClass + '\'' +
+                ", itemCtrlDisplyCol='" + itemCtrlDisplyCol + '\'' +
+                ", itemCtrlDisplyCondition='" + itemCtrlDisplyCondition + '\'' +
+                ", itemIsNavigatorExpand='" + itemIsNavigatorExpand + '\'' +
+                ", itemIsShowFolder='" + itemIsShowFolder + '\'' +
+                ", itemParentFolderName='" + itemParentFolderName + '\'' +
+                ", itemShowExpression='" + itemShowExpression + '\'' +
+                ", itemDateFormat='" + itemDateFormat + '\'' +
+                '}';
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PortalVIDO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PortalVIDO.java
new file mode 100644
index 0000000..00e2b38
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PortalVIDO.java
@@ -0,0 +1,101 @@
+package com.vci.model;
+
+import com.vci.starter.web.annotation.Transient;
+import com.vci.starter.web.annotation.VciBtmType;
+import com.vci.starter.web.constant.FrameWorkLcStatusConstant;
+
+/**
+ * 鐘舵�佹睜
+ * @author weidy
+ * @date 2022-2-15
+ */
+@VciBtmType(name = "status",text = "琛ㄥ崟",tableName = "portal_vi",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
+@Transient
+public class PortalVIDO implements java.io.Serializable {
+
+    private static final long serialVersionUID = -8378041621144542492L;
+    /**
+     * 涓婚敭
+     */
+    private String id;
+    /**
+     * 0: 涓氬姟绫诲瀷; 1: 閾炬帴绫诲瀷. 榛樿0
+     */
+    private short typeFlag;
+    /**
+     * 绫诲瀷鍚�
+     */
+    private String typeName;
+    /**
+     * 瑙嗗浘鍚�
+     */
+    private String viName;
+    /**
+     * 瑙嗗浘绫诲瀷: 杈撳叆琛ㄥ崟鎴栧垎椤靛垪琛�
+     */
+    private short viType;
+    /**
+     * 瀹氫箟璇︽儏
+     */
+    private String prm;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public short getTypeFlag() {
+        return typeFlag;
+    }
+
+    public void setTypeFlag(short typeFlag) {
+        this.typeFlag = typeFlag;
+    }
+
+    public String getTypeName() {
+        return typeName;
+    }
+
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+    public String getViName() {
+        return viName;
+    }
+
+    public void setViName(String viName) {
+        this.viName = viName;
+    }
+
+    public short getViType() {
+        return viType;
+    }
+
+    public void setViType(short viType) {
+        this.viType = viType;
+    }
+
+    public String getPrm() {
+        return prm;
+    }
+
+    public void setPrm(String prm) {
+        this.prm = prm;
+    }
+
+    @Override
+    public String toString() {
+        return "PortalVIVO{" +
+                "id='" + id + '\'' +
+                ", typeFlag=" + typeFlag +
+                ", typeName='" + typeName + '\'' +
+                ", viName='" + viName + '\'' +
+                ", viType=" + viType +
+                ", prm='" + prm + '\'' +
+                '}';
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PRMItemVO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PRMItemVO.java
new file mode 100644
index 0000000..667ea91
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PRMItemVO.java
@@ -0,0 +1,767 @@
+package com.vci.pagemodel;
+
+import com.vci.bo.ItemSeniorQueryBO;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PRMItemVO implements java.io.Serializable {
+    private static final long serialVersionUID = 8300550928400559987L;
+    /**
+     * 浣跨敤瀛楁
+     */
+    private String itemField = "";
+    //list
+    private String itemOR = "";
+    private String itemEQ = "";
+    private String itemTrim = "";
+    /**
+     * 蹇界暐
+     */
+    private String itemDbl = "";
+    /**
+     * 瀛楃涓叉埅鍙�
+     */
+    private String itemCut = "";
+    /**
+     *缁戝畾琛ㄥ崟
+     */
+    private String itemInObj = "";
+    /**
+     * form锛氬瓧娈佃〃杈惧紡  table锛氶檮鍔犳煡璇㈡潯浠�
+     */
+    private String itemAddFilter = "";
+    /**
+     *
+     */
+    private String itemOutType = "";
+    /**
+     * table 姣忛〉鍙樉绀鸿鏁�
+     */
+    private String itemPageSize = "";
+    /**
+     * 鍥剧墖瀹介珮锛�0,0
+     */
+    private String itemImgWH = "";
+    /**
+     * 闇�瑕佷娇鐢ㄧ殑瀛楁
+     */
+    private String itemOutFields = "";
+    /**
+     * 寰呴�夋嫨鐨勫睘鎬у瓧娈�
+     */
+    private List<String> itemSelectoutFieldList=new ArrayList<>();
+
+
+    /**
+     * 闇�瑕佷娇鐢ㄧ殑闆嗗悎
+     */
+    private List<String> itemOutFieldList=new ArrayList<>();
+    /**
+     * 闇�瑕佹悳绱㈢殑瀛楁
+     */
+    private String itemKeyFields = "";
+
+
+    /**
+     *寰呮悳绱㈠瓧娈�
+     */
+    private List<String> itemSearchFieldList=new ArrayList<>();
+    /**
+     * 闇�瑕佹悳绱㈢殑瀛楁
+     */
+    private List<String> itemKeyFieldList=new ArrayList<>();
+
+    private String itemBat = "";
+    /**
+     * 瀹藉害
+     */
+    private String itemFieldWidth = "";
+    /**
+     * 鍒楁樉绀哄娈� itemOutFieldList 鐩稿尮閰�
+     */
+    private List<KeyValue> itemFieldWidthList=new ArrayList<>();
+
+    //form
+    private String itemTxf = "";
+    /**
+     * 鏄剧ず鍚嶇О
+     */
+    private String itemName = "";
+    /**
+     * 灞炴�х被鍨�
+     *      text:鍗曡鏂囨湰妗�
+     * 		textbtn:鏂囨湰鎸夐挳妗�:
+     * 		textarea:澶氳鏂囨湰妗�:
+     * 		richtext:瀵屾枃鏈:
+     * 		number:鏁板瓧杈撳叆妗�:
+     * 		password:瀵嗙爜妗�:
+     * 		radio:鍗曢�夋寜閽�:
+     * 		checkbox:澶氶�夋寜閽�:
+     * 		select:涓嬫媺鑿滃崟:
+     * 		multiselect:澶氶�変笅鎷夎彍鍗�:
+     * 		date:鏃ユ湡杈撳叆妗�:
+     * 		time:鏃堕棿杈撳叆妗�:
+     * 		datetime:鏃ユ湡鏃堕棿杈撳叆妗�:
+     * 		file:鏂囦欢涓婁紶:
+     * 		multiFile:澶氭枃浠朵笂浼�:
+     * 		custom:鑷畾涔�:
+     * 		customform:鑷畾涔夎〃鍗�:
+     * 		hidden:闅愯棌鎴栨櫘閫氭枃瀛�:
+     * 		webeditor:Web缂栬緫鍣�:
+     * 		specialCharacter:鐗规畩瀛楃:
+     */
+    private String itemType = "";
+    /**
+     * 灞炴�х被鍨嬫樉绀哄��
+     */
+    private String itemTypeText = "";
+    /**
+     * 榛樿鍊�
+     */
+    private String itemValue = "";
+    /**
+     *鍗犱綅鏂瑰紡 1:鏄剧ず锛�2:涓嶆樉绀�
+     */
+    private String itemCols = "";
+    /**
+     *
+     */
+    private String itemRows = "";
+    /**
+     * 闄勫姞灞炴�э紙鏍峰紡锛�
+     */
+    private String itemStyle = "";
+    /**
+     *鑴氭湰楠岃瘉
+     */
+    private String itemScript = "";
+    /**
+     * 鎻愮ず鏂囧瓧
+     */
+    private String itemTips = "";
+    /**
+     * 鏋氫妇鍊�
+     */
+    private List<String> itemValueList = null;
+
+
+    /**
+     *涓�绾у弬鐓�
+     */
+    private String itemListTable = "";
+    /**
+     *浜岀骇鍙傜収
+     */
+    private String itemListTxt = "";
+    /**
+     *鍙傜収鍊�
+     */
+    private String itemListVal = "";
+    /**
+     * 鏄惁鍙互缂栬緫0:缂栬緫锛�1锛氬彧璇�
+     */
+    private String itemIsEditable = "";
+    /**
+     * 鍙閫夋嫨鏉′欢
+     */
+    private String itemEditableProgram = "";
+
+    /**
+     *
+     */
+    private String itemEditCondition = "";
+    /**
+     * 鏄惁鏄剧ず瀛楁 0锛涗笉鏄剧ず锛�1锛氭樉绀�
+     */
+    private String itemIsHidden = "";
+    /**
+     * 鏌ヨ妯℃澘鍚嶇О
+     */
+    private String itemQtName = "";
+    /**
+     * 鏄惁蹇呭~ 0:鍚︼紝1锛氭槸
+     */
+    private String itemIsRequired = "";
+    /**
+     *http瀛樺偍寮�鍏�  0锛氬惁锛�1锛氭槸
+     */
+    private String itemIsHttpSave = "";
+    /**
+     * 瀛樺偍璺緞
+     */
+    private String itemHttpVolumnPath = "";
+    /**
+     * 瀛樺偍璺緞瀛楁
+     */
+    private String itemHttpPathField = "";
+    /**
+     * 鏉冮檺鎺у埗
+     */
+    private String itemRight = "";
+    /**
+     * 楂樼骇鏌ヨ鍒�
+     */
+    private String itemSeniorQueryCols = "";
+    /**
+     * 楂樼骇鏌ヨ鍚勫垪浣跨敤娆℃暟
+     */
+    private String itemSeniorQueryColsCounts = "";
+
+    /**
+     *楂樼骇鏌ヨsql
+     */
+    private String itemQuerySql = "";
+    /***
+     * 楂樼骇鏌ヨ瀵硅薄
+     */
+    private  List<ItemSeniorQueryBO> itemSeniorQueryBOS=new ArrayList<>();
+
+    /**
+     * 瓒呴摼鎺ュ瓧娈�
+     */
+    private String itemHrefFields = "";
+    /**
+     * 瓒呴摼鎺ラ厤缃�
+     */
+    private String itemHrefConf = "";
+    /**
+     * 鏌ヨ鍏宠仈鍒�
+     */
+    private String itemQueryRefFields = "";
+    /***
+     * 鑷畾涔夌被璺緞
+     */
+    private String itemCustomClass = "";
+    /**
+     * 鎺у埗鏄剧ず鍒�
+     */
+    private String itemCtrlDisplyCol = "";
+    /**
+     * 鎺у埗鏄剧ず鏉′欢
+     */
+    private String itemCtrlDisplyCondition = "";
+    /**
+     * 鏌ヨ鍖哄煙鏄剧ず鎺у埗 true锛氭樉绀猴紝false 涓嶆樉绀�
+     */
+    private String itemIsNavigatorExpand = "";
+    /**
+     * 鏄惁鏄剧ず鏂囦欢澶� true锛氭樉绀猴紝false 涓嶆樉绀�
+     */
+    private String itemIsShowFolder = "";
+    /**
+     * 鐖舵枃浠跺す鍚嶇О
+     */
+    private String itemParentFolderName = "";
+    /**
+     *   鏄剧ず琛ㄨ揪寮� ${aa}-${bb}
+     */
+    private String itemShowExpression = "";
+    /**
+     * 鏁版嵁涓烘棩鏈熺被鍨嬫椂鐨勬牸寮忓寲瀛楃涓� 濡� yyyy-MM-dd HH:mm:ss
+     */
+    private String itemDateFormat = "";
+
+    public String getItemRight() {
+        return itemRight;
+    }
+    public void setItemRight(String itemRight) {
+        this.itemRight = itemRight;
+    }
+    public String getItemQuerySql() {
+        return itemQuerySql;
+    }
+    public void setItemQuerySql(String itemQuerySql) {
+        this.itemQuerySql = itemQuerySql;
+    }
+    public String getItemFieldWidth() {
+        return itemFieldWidth;
+    }
+    public void setItemFieldWidth(String itemFieldWidth) {
+        this.itemFieldWidth = itemFieldWidth;
+    }
+    public String getItemParentFolderName() {
+        return itemParentFolderName;
+    }
+    public void setItemParentFolderName(String itemParentFolderName) {
+        this.itemParentFolderName = itemParentFolderName;
+    }
+    public String getItemIsShowFolder() {
+        return itemIsShowFolder;
+    }
+    public void setItemIsShowFolder(String itemIsShowFolder) {
+        this.itemIsShowFolder = itemIsShowFolder;
+    }
+    public String getItemIsNavigatorExpand() {
+        return itemIsNavigatorExpand;
+    }
+    public void setItemIsNavigatorExpand(String itemIsNavigatorExpand) {
+        this.itemIsNavigatorExpand = itemIsNavigatorExpand;
+    }
+    public String getItemField() {
+        return itemField;
+    }
+    public void setItemField(String itemField) {
+        this.itemField = itemField;
+    }
+    public String getItemOR() {
+        return itemOR;
+    }
+    public void setItemOR(String itemOR) {
+        this.itemOR = itemOR;
+    }
+    public String getItemEQ() {
+        return itemEQ;
+    }
+    public void setItemEQ(String itemEQ) {
+        this.itemEQ = itemEQ;
+    }
+    public String getItemTrim() {
+        return itemTrim;
+    }
+    public void setItemTrim(String itemTrim) {
+        this.itemTrim = itemTrim;
+    }
+    public String getItemDbl() {
+        return itemDbl;
+    }
+    public void setItemDbl(String itemDbl) {
+        this.itemDbl = itemDbl;
+    }
+    public String getItemCut() {
+        return itemCut;
+    }
+    public void setItemCut(String itemCut) {
+        this.itemCut = itemCut;
+    }
+    public String getItemInObj() {
+        return itemInObj;
+    }
+    public void setItemInObj(String itemInObj) {
+        this.itemInObj = itemInObj;
+    }
+    public String getItemOutType() {
+        return itemOutType;
+    }
+    public void setItemOutType(String itemOutType) {
+        this.itemOutType = itemOutType;
+    }
+    public String getItemPageSize() {
+        return itemPageSize;
+    }
+    public void setItemPageSize(String itemPageSize) {
+        this.itemPageSize = itemPageSize;
+    }
+    public String getItemImgWH() {
+        return itemImgWH;
+    }
+    public void setItemImgWH(String itemImgWH) {
+        this.itemImgWH = itemImgWH;
+    }
+    public String getItemOutFields() {
+        return itemOutFields;
+    }
+    public void setItemOutFields(String itemOutFields) {
+        this.itemOutFields = itemOutFields;
+    }
+    public String getItemKeyFields() {
+        return itemKeyFields;
+    }
+    public void setItemKeyFields(String itemKeyFields) {
+        this.itemKeyFields = itemKeyFields;
+    }
+    public String getItemBat() {
+        return itemBat;
+    }
+    public void setItemBat(String itemBat) {
+        this.itemBat = itemBat;
+    }
+    public String getItemTxf() {
+        return itemTxf;
+    }
+    public void setItemTxf(String itemTxf) {
+        this.itemTxf = itemTxf;
+    }
+    public String getItemName() {
+        return itemName;
+    }
+    public void setItemName(String itemName) {
+        this.itemName = itemName;
+    }
+    public String getItemType() {
+        return itemType;
+    }
+    public void setItemType(String itemType) {
+        this.itemType = itemType;
+    }
+    public String getItemValue() {
+        return itemValue;
+    }
+    public void setItemValue(String itemValue) {
+        this.itemValue = itemValue;
+    }
+    public String getItemCols() {
+        return itemCols;
+    }
+    public void setItemCols(String itemCols) {
+        this.itemCols = itemCols;
+    }
+    public String getItemRows() {
+        return itemRows;
+    }
+    public void setItemRows(String itemRows) {
+        this.itemRows = itemRows;
+    }
+    public List<String> getItemValueList() {
+        return itemValueList;
+    }
+    public void setItemValueList(List<String> itemValueList) {
+        this.itemValueList = itemValueList;
+    }
+    public String getItemListTable() {
+        return itemListTable;
+    }
+    public void setItemListTable(String itemListTable) {
+        this.itemListTable = itemListTable;
+    }
+
+    public String getItemListTxt() {
+        return itemListTxt;
+    }
+    public void setItemListTxt(String itemListTxt) {
+        this.itemListTxt = itemListTxt;
+    }
+    public String getItemListVal() {
+        return itemListVal;
+    }
+    public void setItemListVal(String itemListVal) {
+        this.itemListVal = itemListVal;
+    }
+    public String getItemAddFilter() {
+        return itemAddFilter;
+    }
+    public void setItemAddFilter(String itemAddFilter) {
+        this.itemAddFilter = itemAddFilter;
+    }
+    public String getItemStyle() {
+        return itemStyle;
+    }
+    public void setItemStyle(String itemStyle) {
+        this.itemStyle = itemStyle;
+    }
+    public String getItemScript() {
+        return itemScript;
+    }
+    public void setItemScript(String itemScript) {
+        this.itemScript = itemScript;
+    }
+    public String getItemTips() {
+        return itemTips;
+    }
+    public void setItemTips(String itemTips) {
+        this.itemTips = itemTips;
+    }
+    public String getItemIsEditable() {
+        return itemIsEditable;
+    }
+    public void setItemIsEditable(String itemIsEditable) {
+        this.itemIsEditable = itemIsEditable;
+    }
+    public String getItemIsHidden() {
+        return itemIsHidden;
+    }
+    public void setItemIsHidden(String itemIsHidden) {
+        this.itemIsHidden = itemIsHidden;
+    }
+    public String getItemQtName() {
+        return itemQtName;
+    }
+    public void setItemQtName(String itemQtName) {
+        this.itemQtName = itemQtName;
+    }
+    public String getItemIsRequired() {
+        return itemIsRequired;
+    }
+    public void setItemIsRequired(String itemIsRequired) {
+        this.itemIsRequired = itemIsRequired;
+    }
+    public String getItemSeniorQueryCols() {
+        return itemSeniorQueryCols;
+    }
+    public void setItemSeniorQueryCols(String itemSeniorQueryCols) {
+        this.itemSeniorQueryCols = itemSeniorQueryCols;
+    }
+    public String getItemSeniorQueryColsCounts() {
+        return itemSeniorQueryColsCounts;
+    }
+    public void setItemSeniorQueryColsCounts(String itemSeniorQueryColsCounts) {
+        this.itemSeniorQueryColsCounts = itemSeniorQueryColsCounts;
+    }
+    public String getItemHrefFields() {
+        return itemHrefFields;
+    }
+    public void setItemHrefFields(String itemHrefFields) {
+        this.itemHrefFields = itemHrefFields;
+    }
+    public String getItemHrefConf() {
+        return itemHrefConf;
+    }
+    public void setItemHrefConf(String itemHrefConf) {
+        this.itemHrefConf = itemHrefConf;
+    }
+    public String getItemQueryRefFields() {
+        return itemQueryRefFields;
+    }
+    public void setItemQueryRefFields(String itemQueryRefFields) {
+        this.itemQueryRefFields = itemQueryRefFields;
+    }
+    public String getItemCustomClass() {
+        return itemCustomClass;
+    }
+    public void setItemCustomClass(String itemCustomClass) {
+        this.itemCustomClass = itemCustomClass;
+    }
+    public String getItemCtrlDisplyCol() {
+        return itemCtrlDisplyCol;
+    }
+    public void setItemCtrlDisplyCol(String itemCtrlDisplyCol) {
+        this.itemCtrlDisplyCol = itemCtrlDisplyCol;
+    }
+    public String getItemCtrlDisplyCondition() {
+        return itemCtrlDisplyCondition;
+    }
+    public void setItemCtrlDisplyCondition(String itemCtrlDisplyCondition) {
+        this.itemCtrlDisplyCondition = itemCtrlDisplyCondition;
+    }
+    public String getItemIsHttpSave() {
+        return itemIsHttpSave;
+    }
+    public void setItemIsHttpSave(String itemIsHttpSave) {
+        this.itemIsHttpSave = itemIsHttpSave;
+    }
+    public String getItemHttpVolumnPath() {
+        return itemHttpVolumnPath;
+    }
+    public void setItemHttpVolumnPath(String itemHttpVolumnPath) {
+        this.itemHttpVolumnPath = itemHttpVolumnPath;
+    }
+    public String getItemHttpPathField() {
+        return itemHttpPathField;
+    }
+    public void setItemHttpPathField(String itemHttpPathField) {
+        this.itemHttpPathField = itemHttpPathField;
+    }
+    public String getItemEditCondition() {
+        return itemEditCondition;
+    }
+    public void setItemEditCondition(String itemEditCondition) {
+        this.itemEditCondition = itemEditCondition;
+    }
+    public String getItemEditableProgram() {
+        return itemEditableProgram;
+    }
+    public void setItemEditableProgram(String itemEditableProgram) {
+        this.itemEditableProgram = itemEditableProgram;
+    }
+
+    public String getItemShowExpression() {
+        return itemShowExpression;
+    }
+    public void setItemShowExpression(String itemShowExpression) {
+        this.itemShowExpression = itemShowExpression;
+    }
+    public String getItemDateFormat() {
+        return itemDateFormat;
+    }
+    public void setItemDateFormat(String itemDateFormat) {
+        this.itemDateFormat = itemDateFormat;
+    }
+
+    public List<String> getItemOutFieldList() {
+        return itemOutFieldList;
+    }
+
+    public void setItemOutFieldList(List<String> itemOutFieldList) {
+        this.itemOutFieldList = itemOutFieldList;
+    }
+
+    public List<String> getItemKeyFieldList() {
+        return itemKeyFieldList;
+    }
+
+    public void setItemKeyFieldList(List<String> itemKeyFieldList) {
+        this.itemKeyFieldList = itemKeyFieldList;
+    }
+
+    public List<KeyValue> getItemFieldWidthList() {
+        return itemFieldWidthList;
+    }
+
+    public void setItemFieldWidthList(List<KeyValue> itemFieldWidthList) {
+        this.itemFieldWidthList = itemFieldWidthList;
+    }
+
+    public String getItemTypeText() {
+        return itemTypeText;
+    }
+
+    public void setItemTypeText(String itemTypeText) {
+        this.itemTypeText = itemTypeText;
+    }
+
+    public List<ItemSeniorQueryBO> getItemSeniorQueryBOS() {
+        return itemSeniorQueryBOS;
+    }
+
+    public void setItemSeniorQueryBOS(List<ItemSeniorQueryBO> itemSeniorQueryBOS) {
+        this.itemSeniorQueryBOS = itemSeniorQueryBOS;
+    }
+
+    public List<String> getItemSelectoutFieldList() {
+        return itemSelectoutFieldList;
+    }
+
+    public void setItemSelectoutFieldList(List<String> itemSelectoutFieldList) {
+        this.itemSelectoutFieldList = itemSelectoutFieldList;
+    }
+
+    public List<String> getItemSearchFieldList() {
+        return itemSearchFieldList;
+    }
+
+    public void setItemSearchFieldList(List<String> itemSearchFieldList) {
+        this.itemSearchFieldList = itemSearchFieldList;
+    }
+
+    @Override
+    public String toString() {
+        return "PRMItemVO{" +
+                "itemField='" + itemField + '\'' +
+                ", itemOR='" + itemOR + '\'' +
+                ", itemEQ='" + itemEQ + '\'' +
+                ", itemTrim='" + itemTrim + '\'' +
+                ", itemDbl='" + itemDbl + '\'' +
+                ", itemCut='" + itemCut + '\'' +
+                ", itemInObj='" + itemInObj + '\'' +
+                ", itemAddFilter='" + itemAddFilter + '\'' +
+                ", itemOutType='" + itemOutType + '\'' +
+                ", itemPageSize='" + itemPageSize + '\'' +
+                ", itemImgWH='" + itemImgWH + '\'' +
+                ", itemOutFields='" + itemOutFields + '\'' +
+                ", itemSelectoutFieldList=" + itemSelectoutFieldList +
+                ", itemOutFieldList=" + itemOutFieldList +
+                ", itemKeyFields='" + itemKeyFields + '\'' +
+                ", itemSearchFieldList=" + itemSearchFieldList +
+                ", itemKeyFieldList=" + itemKeyFieldList +
+                ", itemBat='" + itemBat + '\'' +
+                ", itemFieldWidth='" + itemFieldWidth + '\'' +
+                ", itemFieldWidthList=" + itemFieldWidthList +
+                ", itemTxf='" + itemTxf + '\'' +
+                ", itemName='" + itemName + '\'' +
+                ", itemType='" + itemType + '\'' +
+                ", itemTypeText='" + itemTypeText + '\'' +
+                ", itemValue='" + itemValue + '\'' +
+                ", itemCols='" + itemCols + '\'' +
+                ", itemRows='" + itemRows + '\'' +
+                ", itemStyle='" + itemStyle + '\'' +
+                ", itemScript='" + itemScript + '\'' +
+                ", itemTips='" + itemTips + '\'' +
+                ", itemValueList=" + itemValueList +
+                ", itemListTable='" + itemListTable + '\'' +
+                ", itemListTxt='" + itemListTxt + '\'' +
+                ", itemListVal='" + itemListVal + '\'' +
+                ", itemIsEditable='" + itemIsEditable + '\'' +
+                ", itemEditableProgram='" + itemEditableProgram + '\'' +
+                ", itemEditCondition='" + itemEditCondition + '\'' +
+                ", itemIsHidden='" + itemIsHidden + '\'' +
+                ", itemQtName='" + itemQtName + '\'' +
+                ", itemIsRequired='" + itemIsRequired + '\'' +
+                ", itemIsHttpSave='" + itemIsHttpSave + '\'' +
+                ", itemHttpVolumnPath='" + itemHttpVolumnPath + '\'' +
+                ", itemHttpPathField='" + itemHttpPathField + '\'' +
+                ", itemRight='" + itemRight + '\'' +
+                ", itemSeniorQueryCols='" + itemSeniorQueryCols + '\'' +
+                ", itemSeniorQueryColsCounts='" + itemSeniorQueryColsCounts + '\'' +
+                ", itemQuerySql='" + itemQuerySql + '\'' +
+                ", itemSeniorQueryBOS=" + itemSeniorQueryBOS +
+                ", itemHrefFields='" + itemHrefFields + '\'' +
+                ", itemHrefConf='" + itemHrefConf + '\'' +
+                ", itemQueryRefFields='" + itemQueryRefFields + '\'' +
+                ", itemCustomClass='" + itemCustomClass + '\'' +
+                ", itemCtrlDisplyCol='" + itemCtrlDisplyCol + '\'' +
+                ", itemCtrlDisplyCondition='" + itemCtrlDisplyCondition + '\'' +
+                ", itemIsNavigatorExpand='" + itemIsNavigatorExpand + '\'' +
+                ", itemIsShowFolder='" + itemIsShowFolder + '\'' +
+                ", itemParentFolderName='" + itemParentFolderName + '\'' +
+                ", itemShowExpression='" + itemShowExpression + '\'' +
+                ", itemDateFormat='" + itemDateFormat + '\'' +
+                '}';
+    }
+    //    /**
+//     * 楂樼骇鏌ヨ鍒椾笌浣跨敤娆℃暟
+//     */
+//    public Map<String, Integer> getColAndUseCountMap() {
+//        if(this.itemSeniorQueryCols == null || this.itemSeniorQueryColsCounts == null
+//                || this.itemSeniorQueryCols.equals("") || this.itemSeniorQueryColsCounts.equals("")){
+//            return null;
+//        }
+//        Map<String, Integer> map = new LinkedHashMap<String, Integer>();
+//        String[] cols = this.itemSeniorQueryCols.split(",");
+//        String[] counts = this.itemSeniorQueryColsCounts.split(",");
+//        for(int i = 0; i < cols.length; i++){
+//            int count = Integer.valueOf(counts[i]);
+//            map.put(cols[i], count);
+//        }
+//        return map;
+//    }
+//
+//    /**
+//     * 楂樼骇鏌ヨ鑷畾涔夊垪涓庢煡璇ql
+//     */
+//    public Map<String, String> getCustomerColAndSql() {
+//        if(this.itemSeniorQueryCols == null || this.itemQuerySql == null
+//                || this.itemSeniorQueryCols.equals("") || this.itemQuerySql.equals("")){
+//            return null;
+//        }
+//        Map<String, String> map = new LinkedHashMap<String, String>();
+//        String[] cols = this.itemSeniorQueryCols.split(",");
+//        String[] sqls = this.itemQuerySql.split(";");
+//        for(int i = 0; i < cols.length; i++){
+//            String sql = sqls[i];
+//            if(sql != null && !sql.equalsIgnoreCase("NULL")){
+//                map.put(cols[i], sql);
+//            }
+//        }
+//        return map;
+//    }
+//
+//    /**
+//     * 杩斿洖 PRMItem 瀵硅薄鏄惁鏄剧ず
+//     * @return 瀵硅薄鏄惁鏄剧ず  (瀵瑰簲琛ㄥ崟灞炴�у畾涔夌殑鍗犱綅鏂瑰紡鐨勬樉绀恒�佷笉鏄剧ず锛�<p>true:鏄剧ず false:涓嶆樉绀�</p>
+//     */
+//    public boolean isShow(){
+//        return ("1".equalsIgnoreCase(this.getItemCols().trim()));
+//    }
+//    /**
+//     * 杩斿洖 PRMItem 瀵硅薄鏄惁鏄繀濉」
+//     * @return 瀵硅薄鏄惁鏄繀濉�<p>true:鏄惧繀濉」 false:涓嶆槸蹇呭~椤�</p>
+//     */
+//    public boolean isRequired(){
+//        return ("1".equalsIgnoreCase(this.getItemIsRequired().trim()));
+//    }
+//    /**
+//     * 杩斿洖 PRMItem 瀵硅薄 鏄惁鍙互缂栬緫
+//     * @return 瀵硅薄鏄惁鍙紪杈� <p>true: 鍙紪杈�(闈炲彧璇�) false: 涓嶅彲缂栬緫(鍙)</p>
+//     */
+//    public boolean isEditable(){
+//        return ("0".equalsIgnoreCase(this.getItemIsEditable().trim()));
+//    }
+//    /**
+//     * 杩斿洖 PRMItem 瀵硅薄 鏄惁鍙槸鍙
+//     * @return 瀵硅薄鏄惁鍙紪杈� <p>true: 鍙(涓嶅彲缂栬緫) false: 闈炲彧璇�(鍙紪杈�)</p>
+//     */
+//    public boolean isReadonly(){
+//        return !(isEditable());
+//    }
+
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PRMVO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PRMVO.java
new file mode 100644
index 0000000..a4b5091
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PRMVO.java
@@ -0,0 +1,44 @@
+package com.vci.pagemodel;
+
+import java.util.List;
+
+public class PRMVO implements   java.io.Serializable {
+
+    private static final long serialVersionUID = -7009693016048007945L;
+    private String showCols = "3";
+    private String formQtName = "";
+    private List<PRMItemVO> prmItemList;
+
+    public String getShowCols() {
+        return showCols;
+    }
+
+    public void setShowCols(String showCols) {
+        this.showCols = showCols;
+    }
+
+    public String getFormQtName() {
+        return formQtName;
+    }
+
+    public void setFormQtName(String formQtName) {
+        this.formQtName = formQtName;
+    }
+
+    public List<PRMItemVO> getPrmItemList() {
+        return prmItemList;
+    }
+
+    public void setPrmItemList(List<PRMItemVO> prmItemList) {
+        this.prmItemList = prmItemList;
+    }
+
+    @Override
+    public String toString() {
+        return "PRMVO{" +
+                "showCols='" + showCols + '\'' +
+                ", formQtName='" + formQtName + '\'' +
+                ", prmItemList=" + prmItemList +
+                '}';
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PortalVIVO.java b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PortalVIVO.java
new file mode 100644
index 0000000..2cfe1fb
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PortalVIVO.java
@@ -0,0 +1,96 @@
+package com.vci.pagemodel;
+
+/**
+ *
+ * 琛ㄥ崟鏄剧ず瀵硅薄
+ * @author xiej
+ * @date 2024/08/14 6:04 PM
+ */
+public class PortalVIVO implements  java.io.Serializable{
+
+    private static final long serialVersionUID = 8929303078545288873L;
+    /**
+     * 涓婚敭
+     */
+    private String id;
+    /**
+     * 0: 涓氬姟绫诲瀷; 1: 閾炬帴绫诲瀷. 榛樿0
+     */
+    private short typeFlag;
+    /**
+     * 绫诲瀷鍚�
+     */
+    private String typeName;
+    /**
+     * 瑙嗗浘鍚�
+     */
+    private String viName;
+    /**
+     * 瑙嗗浘绫诲瀷: 杈撳叆琛ㄥ崟鎴栧垎椤靛垪琛�
+     */
+    private short viType;
+    /**
+     * 瀹氫箟璇︽儏
+     */
+    private PRMVO   prm;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public short getTypeFlag() {
+        return typeFlag;
+    }
+
+    public void setTypeFlag(short typeFlag) {
+        this.typeFlag = typeFlag;
+    }
+
+    public String getTypeName() {
+        return typeName;
+    }
+
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+    public String getViName() {
+        return viName;
+    }
+
+    public void setViName(String viName) {
+        this.viName = viName;
+    }
+
+    public short getViType() {
+        return viType;
+    }
+
+    public void setViType(short viType) {
+        this.viType = viType;
+    }
+
+    public PRMVO getPrm() {
+        return prm;
+    }
+
+    public void setPrm(PRMVO prm) {
+        this.prm = prm;
+    }
+
+    @Override
+    public String toString() {
+        return "PortalVIVO{" +
+                "id='" + id + '\'' +
+                ", typeFlag=" + typeFlag +
+                ", typeName='" + typeName + '\'' +
+                ", viName='" + viName + '\'' +
+                ", viType=" + viType +
+                ", prm=" + prm +
+                '}';
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java
index 1b3525c..b13d963 100644
--- a/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java
+++ b/Source/plt-web/plt-web-parent/plt-web-base/src/main/java/com/vci/starter/web/util/VciBaseUtil.java
@@ -287,6 +287,28 @@
     }
 
     /**
+     * 鍘婚櫎鏈�鍓嶉潰鐨剆piltFilter锛屽幓闄ゅ悗闈㈢殑spiltFilter
+     * @param s 瀛楃涓�
+     * @param spiltFilter,鍒嗛殧绗�
+     * @return 鍘婚櫎鏈熬閫楀彿
+     */
+    public static String removeComma(String s,String spiltFilter){
+        if(s == null || s.trim().length() == 0) {
+            return s;
+        }
+        else{
+            if(s.startsWith(spiltFilter)) {
+                s = s.substring(spiltFilter.length(), s.length());
+            }
+            if(s.endsWith(spiltFilter)) {
+                s = s.substring(0, s.length() - spiltFilter.length());
+            }
+            return s;
+        }
+    }
+
+
+    /**
      * 涓簊ql涓娇鐢╥n鏃讹紝鎻愪緵杞崲锛屾敞鎰廼n閲岀殑鍊间笉鑳借秴杩�1000
      * @param s 瀛楃涓�
      * @return 杩斿洖sql璇彞
@@ -472,6 +494,21 @@
             charMap.put(String.valueOf(c), (!charMap.containsKey(String.valueOf(c))? 1 : charMap.get(String.valueOf(c)) + 1));
         }
         return charMap.get(String.valueOf(findC));
+    }
+
+    /**
+     * 甯﹂�楀彿鐨勫瓧绗︿覆杞负list
+     * @param s 瀛楃涓�
+     * @return 瀛楃涓插垪琛�
+     */
+    public static List<String> str2List(String s,String spilter){
+        if (isNull(s)) {
+            return null;
+        } else {
+            List<String> l = new ArrayList<String>();
+            Collections.addAll(l,removeComma(s,spilter).split(spilter));
+            return l;
+        }
     }
 
     /**
@@ -1333,6 +1370,25 @@
         }
     }
 
+
+    /**
+     * 鏁扮粍杞崲涓篠tring
+     * @param array 鏁扮粍瀵硅薄
+     * @param spiltFiter 鍒嗛殧绗�
+     * @return 閫楀彿閾炬帴鐨勫瓧绗︿覆
+     */
+    public static String array2String(String[] array,String spiltFiter) {
+        if(null == array || array.length == 0) {
+            return "";
+        } else{
+            String ss = "";
+            for(String s : array){
+                ss += s + spiltFiter;
+                //1.8鍙互
+            }
+            return removeComma(ss,spiltFiter);
+        }
+    }
     /**
      * 鏁扮粍杞崲涓篠tring
      * @param array 鏁扮粍瀵硅薄
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java
new file mode 100644
index 0000000..8e9cf64
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java
@@ -0,0 +1,72 @@
+package com.vci.web.controller;
+
+import com.vci.dto.PortalVIDTO;
+import com.vci.pagemodel.KeyValue;
+import com.vci.pagemodel.PortalVIVO;
+import com.vci.starter.web.annotation.log.VciBusinessLog;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.web.enumpck.ItemDblEnum;
+import com.vci.web.enumpck.ItemTypeEnum;
+import com.vci.web.service.OsPortalVIServiceI;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 鍏紡鎺у埗鍣�
+ * @author weidy
+ * @date 2022-2-11
+ */
+@RestController
+@RequestMapping("/portalVIController")
+public class WebPortalVIController {
+   private OsPortalVIServiceI portalVIServiceI;
+    /**
+     * 琛ㄥ崟鍒楄〃
+     * viType:琛ㄥ崟绫诲瀷;Form("Form", "琛ㄥ崟", (short)1), Table("Table", "琛ㄦ牸", (short)0);
+     * viTypeFlag:	LinkType("LinkType", "閾炬帴绫诲瀷鐨勮〃鍗�", (short)1), BtmType("BtmType", "涓氬姟绫诲瀷鐨勮〃鍗�", (short)0);
+     * @param baseQueryObject 鏌ヨ鏉′欢
+     * @return 鍒楄〃鐨勫唴瀹�
+     */
+    @GetMapping( "/referDataGrid")
+    @VciBusinessLog(operateName = "琛ㄥ崟/琛ㄦ牸鍒楄〃")
+    public DataGrid<PortalVIVO> referDataGrid(BaseQueryObject baseQueryObject){
+        return portalVIServiceI.gridPortalVIVOs(baseQueryObject);
+    }
+
+    /**
+     * 琛ㄥ崟/table淇濆瓨
+     * @param portalVIDTO
+     * @return
+     */
+    @PostMapping("/savePortalVI")
+    @VciBusinessLog(operateName = "娣诲姞琛ㄥ崟/琛ㄦ牸")
+    public BaseResult savePortalVI(@RequestBody PortalVIDTO portalVIDTO){
+        if(StringUtils.isNotBlank(portalVIDTO.getId())){
+            return portalVIServiceI.edit(portalVIDTO);
+        }else{
+            return portalVIServiceI.add(portalVIDTO);
+        }
+
+    }
+    /**
+     * 鑾峰彇灞炴�у瓧娈电被鍨�
+     */
+    @GetMapping("/getItemTypeList")
+    @VciBusinessLog(operateName = "灞炴�у瓧娈电被鍨�")
+    public BaseResult<List<KeyValue>> getItemTypeList(){
+        return  BaseResult.dataList(ItemTypeEnum.getEnumAll());
+    }
+    /**
+     * 鑾峰彇瓒呴摼鎺ュ脊鍑烘柟娉�
+     */
+    @GetMapping("/getItemDblList")
+    @VciBusinessLog(operateName = "灞炴�у瓧娈电被鍨�")
+    public BaseResult<List<KeyValue>> getItemDblList(){
+        return  BaseResult.dataList(ItemDblEnum.getEnumAll());
+    }
+
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/ItemDblEnum.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/ItemDblEnum.java
new file mode 100644
index 0000000..456ec30
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/ItemDblEnum.java
@@ -0,0 +1,125 @@
+package com.vci.web.enumpck;
+
+import com.vci.pagemodel.KeyValue;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public enum ItemDblEnum implements BaseEnum {
+    EDIT_PANEL("0","淇敼椤甸潰"),
+    CUSTOM_PANEL("1","鑷畾涔夐〉闈�"),
+    DIALOG("2","寮瑰嚭灏忕獥鍙�"),
+    OVERLOOK("3", "蹇界暐");
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+    ItemDblEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (ItemDblEnum wenum : ItemDblEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (ItemDblEnum wenum : ItemDblEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static ItemDblEnum forValue(String value) {
+        for (ItemDblEnum wenum : ItemDblEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @return 鍚嶇О
+     */
+    public static List<KeyValue> getEnumAll() {
+        List<KeyValue> enumDataList=new ArrayList<>();
+        for (ItemDblEnum wenum : ItemDblEnum.values()) {
+            KeyValue enumData=new KeyValue();
+            enumData.setKey(wenum.value);
+            enumData.setValue(wenum.text);
+            enumDataList.add(enumData);
+        }
+        return enumDataList;
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/ItemTypeEnum.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/ItemTypeEnum.java
new file mode 100644
index 0000000..c2ef060
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/ItemTypeEnum.java
@@ -0,0 +1,144 @@
+package com.vci.web.enumpck;
+
+import com.vci.pagemodel.KeyValue;
+import com.vci.starter.web.enumpck.BaseEnum;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public enum ItemTypeEnum implements BaseEnum {
+    TEXT("text","鍗曡鏂囨湰妗�"),
+    TEXTBTN("textbtn","鏂囨湰鎸夐挳妗�"),
+    TEXTAREA("textarea","澶氳鏂囨湰妗�"),
+    RICHTEXT("richtext","瀵屾枃鏈"),
+    NUMBER("number","鏁板瓧杈撳叆妗�"),
+    PASSWORD("password","瀵嗙爜妗�"),
+    RADIO("radio","鍗曢�夋寜閽�"),
+    CHECKBOX("checkbox","澶氶�夋寜閽�"),
+    SELECT("select","涓嬫媺鑿滃崟"),
+    MULTISELECT("multiselect","澶氶�変笅鎷夎彍鍗�"),
+    DATE("date","鏃ユ湡杈撳叆妗�"),
+    TIME("time","鏃堕棿杈撳叆妗�"),
+    DATETIME("datetime","鏃ユ湡鏃堕棿杈撳叆妗�"),
+    FILE("file","鏂囦欢涓婁紶"),
+    MULTIFILE("multiFile","澶氭枃浠朵笂浼�"),
+    CUSTOM("custom","鑷畾涔�"),
+    CUSTOMFORM("customform","鑷畾涔夎〃鍗�"),
+    HIDDEN("hidden","闅愯棌鎴栨櫘閫氭枃瀛�"),
+    WEBEDITOR("webeditor","Web缂栬緫鍣�"),
+    SPECIALCHARACTER("specialCharacter","鐗规畩瀛楃");
+
+
+
+    /**
+     * 鏋氫妇鐨勫��
+     */
+    private String value;
+
+    /**
+     * 鏋氫妇鏄剧ず鏂囨湰
+     */
+    private String text;
+
+    /**
+     * 鑾峰彇鏋氫妇鍊�
+     *
+     * @return 鏋氫妇鍊�
+     */
+    @Override
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * 璁剧疆鏋氫妇鍊�
+     *
+     * @param value 鏋氫妇鍊�
+     */
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    /**
+     * 鑾峰彇鏋氫妇鏄剧ず鏂囨湰
+     *
+     * @return 鏄剧ず鏂囨湰
+     */
+    @Override
+    public String getText() {
+        return text;
+    }
+
+    /**
+     * 璁剧疆鏄剧ず鏂囨湰
+     *
+     * @param text 鏄剧ず鏂囨湰
+     */
+    public void setText(String text) {
+        this.text = text;
+    }
+    ItemTypeEnum(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇瀵瑰簲鐨勬灇涓惧��
+     *
+     * @param text 鍚嶇О
+     * @return 鏋氫妇鍊�
+     */
+    public static String getValueByText(String text) {
+        for (ItemTypeEnum wenum : ItemTypeEnum.values()) {
+            if (wenum.getText().equalsIgnoreCase(text)) {
+                return wenum.getValue();
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鍚嶇О
+     */
+    public static String getTextByValue(String value) {
+        for (ItemTypeEnum wenum : ItemTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum.getText();
+            }
+        }
+        return "";
+    }
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栨灇涓惧璞�
+     *
+     * @param value 鏋氫妇鍊�
+     * @return 鏋氫妇瀵硅薄锛屼笉瀛樺湪鏃跺�欒繑鍥瀗ull
+     */
+    public static ItemTypeEnum forValue(String value) {
+        for (ItemTypeEnum wenum : ItemTypeEnum.values()) {
+            if (wenum.getValue().equalsIgnoreCase(value)) {
+                return wenum;
+            }
+        }
+        return null;
+    }
+    /**
+     * 鏍规嵁鏋氫妇鍊艰幏鍙栧悕绉�
+     *
+     * @return 鍚嶇О
+     */
+    public static List<KeyValue> getEnumAll() {
+        List<KeyValue> enumDataList=new ArrayList<>();
+        for (ItemTypeEnum wenum : ItemTypeEnum.values()) {
+            KeyValue enumData=new KeyValue();
+            enumData.setKey(wenum.value);
+            enumData.setValue(wenum.text);
+            enumDataList.add(enumData);
+        }
+        return enumDataList;
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/PortalVIType.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/PortalVIType.java
new file mode 100644
index 0000000..62b23ab
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/PortalVIType.java
@@ -0,0 +1,85 @@
+package com.vci.web.enumpck;
+
+import com.vci.common.portal.enums.GetByType;
+
+/**
+ * 琛ㄥ崟绫诲瀷
+ * @author xiej
+ *
+ */
+public enum PortalVIType {
+	Form("Form", "琛ㄥ崟", (short)1),
+	Table("Table", "琛ㄦ牸", (short)0);
+	
+	private String name = "";
+	private String label = "";
+	private short intVal = 1;
+	
+	private PortalVIType(String name, String label, short intVal){
+		this.name = name;
+		this.label = label;
+		this.intVal = intVal;
+	}
+	
+	public static PortalVIType getByName(String name){
+		PortalVIType res = getByType(GetByType.Name, name);
+		return res;
+	}
+	
+	public static PortalVIType getByLabel(String label){
+		PortalVIType res = getByType(GetByType.Label, label);
+		return res;
+	}
+	
+	public static PortalVIType getByIntVal(int intVal){
+		PortalVIType res = getByType(GetByType.IntVal, String.valueOf(intVal));
+		return res;
+	}
+	
+	public static PortalVIType getByType(GetByType type, String val){
+		PortalVIType[] alls = getAll();
+		PortalVIType res = null;
+		for(PortalVIType obj : alls){
+			if(type == GetByType.Name && obj.getName().equalsIgnoreCase(val)){
+				res = obj;
+				break;
+			} else if(type  == GetByType.Label && obj.getLabel().equalsIgnoreCase(val)){
+				res = obj;
+				break;
+			} else if(type  == GetByType.IntVal && String.valueOf(obj.getIntVal()).equalsIgnoreCase(val)){
+				res = obj;
+				break;
+			}
+		}
+		return res;
+	}
+	
+	public static PortalVIType[] getAll(){
+		return PortalVIType.values();
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getLabel() {
+		return label;
+	}
+
+	public void setLabel(String label) {
+		this.label = label;
+	}
+
+	public short getIntVal() {
+		return intVal;
+	}
+
+	public void setIntVal(short intVal) {
+		this.intVal = intVal;
+	}
+	
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/PortalVITypeFlag.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/PortalVITypeFlag.java
new file mode 100644
index 0000000..8051091
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/enumpck/PortalVITypeFlag.java
@@ -0,0 +1,85 @@
+package com.vci.web.enumpck;
+
+import com.vci.common.portal.enums.GetByType;
+
+/**
+ * 琛ㄥ崟鏍囪绫诲瀷
+ * @author xiej
+ *
+ */
+public enum PortalVITypeFlag {
+	LinkType("LinkType", "閾炬帴绫诲瀷鐨勮〃鍗�", (short)1),
+	BtmType("BtmType", "涓氬姟绫诲瀷鐨勮〃鍗�", (short)0);
+	
+	private String name = "";
+	private String label = "";
+	private short intVal = 1;
+	
+	private PortalVITypeFlag(String name, String label, short intVal){
+		this.name = name;
+		this.label = label;
+		this.intVal = intVal;
+	}
+	
+	public static PortalVITypeFlag getByName(String name){
+		PortalVITypeFlag res = getByType(GetByType.Name, name);
+		return res;
+	}
+	
+	public static PortalVITypeFlag getByLabel(String label){
+		PortalVITypeFlag res = getByType(GetByType.Label, label);
+		return res;
+	}
+	
+	public static PortalVITypeFlag getByIntVal(int intVal){
+		PortalVITypeFlag res = getByType(GetByType.IntVal, String.valueOf(intVal));
+		return res;
+	}
+	
+	public static PortalVITypeFlag getByType(GetByType type, String val){
+		PortalVITypeFlag[] alls = getAll();
+		PortalVITypeFlag res = null;
+		for(PortalVITypeFlag obj : alls){
+			if(type == GetByType.Name && obj.getName().equalsIgnoreCase(val)){
+				res = obj;
+				break;
+			} else if(type  == GetByType.Label && obj.getLabel().equalsIgnoreCase(val)){
+				res = obj;
+				break;
+			} else if(type  == GetByType.IntVal && String.valueOf(obj.getIntVal()).equalsIgnoreCase(val)){
+				res = obj;
+				break;
+			}
+		}
+		return res;
+	}
+	
+	public static PortalVITypeFlag[] getAll(){
+		return PortalVITypeFlag.values();
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getLabel() {
+		return label;
+	}
+
+	public void setLabel(String label) {
+		this.label = label;
+	}
+
+	public short getIntVal() {
+		return intVal;
+	}
+
+	public void setIntVal(short intVal) {
+		this.intVal = intVal;
+	}
+	
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBaseServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBaseServiceI.java
index 841f993..445cb70 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBaseServiceI.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsBaseServiceI.java
@@ -123,7 +123,9 @@
             pageHelper = new PageHelper(-1);
         }
         //鏈夐渶瑕佽浆鎹㈢殑灞炴��
-        pageHelper.addDefaultAsc("name");
+        if(StringUtils.isBlank(pageHelper.getSort()) && StringUtils.isBlank(pageHelper.getOrder())) {//濡傛灉娌℃湁璁剧疆鎺掑簭瀛楁锛屽垯榛樿涓�涓�
+            pageHelper.addDefaultAsc("name");
+        }
         VciQueryWrapperForDO queryWrapperForDO = new VciQueryWrapperForDO(baseQueryObject.getConditionMap(), tClass,pageHelper);
         queryWrapperForDO.setConditionMap(queryWrapperForDO.switchConditionMap());
         queryWrapperForDO.wrapperSql();
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsPortalVIServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsPortalVIServiceI.java
new file mode 100644
index 0000000..45125b2
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsPortalVIServiceI.java
@@ -0,0 +1,79 @@
+package com.vci.web.service;
+import com.vci.corba.portal.data.PortalVI;
+import com.vci.dto.PortalVIDTO;
+import com.vci.pagemodel.PortalVIVO;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 琛ㄥ崟/琛ㄦ牸鏈嶅姟
+ * @author weidy
+ * @date 2021-2-14
+ */
+public interface OsPortalVIServiceI extends OsBaseServiceI{
+
+    /**
+     * 琛ㄥ崟/琛ㄦ牸鐨勫垪琛�
+     * @param baseQueryObject 鏌ヨ瀵硅薄
+     * @return 閾炬帴绫诲瀷鐨勬樉绀哄璞�
+     */
+    DataGrid<PortalVIVO> gridPortalVIVOs(BaseQueryObject baseQueryObject);
+
+    /***
+     * 娣诲姞琛ㄥ崟/琛ㄦ牸
+     * @param portalVIDTO
+     * @return
+     * @throws VciBaseException
+     */
+    BaseResult add(PortalVIDTO portalVIDTO) throws VciBaseException;
+
+    /***
+     * 鏇存敼琛ㄥ崟/琛ㄦ牸
+     * @param portalVIDTO
+     * @return
+     * @throws VciBaseException
+     */
+    BaseResult edit(PortalVIDTO portalVIDTO) throws VciBaseException;
+
+    /**
+     *鏌ヨ鎵�鏈夎〃鍗曟垨鑰呰〃鏍�
+     * @return key 鏄敓鍛藉懆鏈熺殑缂栧彿鐨勮嫳鏂囧皬鍐�
+     * @throws VciBaseException 鏌ヨ鐨勬椂鍊欏嚭閿欎細鎶涘嚭寮傚父
+     */
+    Map<String, PortalVIVO> selectAllPortalVIMap() throws VciBaseException;
+
+
+
+    /**
+     * 琛ㄥ崟鐨勬暟鎹璞¤浆鎹负鏄剧ず瀵硅薄
+     * @param portalVIS 鏋氫妇鐨勫璞�
+     * @return 鏄剧ず瀵硅薄
+     */
+    List<PortalVIVO> portalVIDOO2VOS(Collection<PortalVI> portalVIS);
+
+    /**
+     * 琛ㄥ崟鐨勬暟鎹璞¤浆鎹负鏄剧ず瀵硅薄
+     * @param portalVI 鏁版嵁瀵硅薄
+     * @return 鏄剧ず瀵硅薄
+     */
+    PortalVIVO portalVIDOO2VO(PortalVI portalVI);
+
+    /***
+     * DTO杞垚PortalVI
+     * @param portalVIDTOS
+     * @return
+     */
+    public List<PortalVI> portalVIDTOO2VIS(Collection<PortalVIDTO> portalVIDTOS);
+    /***
+     * DTO杞垚PortalVI
+     * @param portalVIDTO
+     * @return
+     */
+    public   PortalVI portalVIDTOO2VI(PortalVIDTO portalVIDTO);
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java
new file mode 100644
index 0000000..4b51876
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java
@@ -0,0 +1,627 @@
+package com.vci.web.service.impl;
+
+import com.vci.bo.ItemSeniorQueryBO;
+import com.vci.common.utility.ObjectUtility;
+import com.vci.corba.common.PLException;
+import com.vci.corba.portal.PortalService.GetPagePortalVIArrayByPageInfoResult;
+import com.vci.corba.portal.data.PortalVI;
+import com.vci.dto.PRMDTO;
+import com.vci.dto.PRMItemDTO;
+import com.vci.dto.PortalVIDTO;
+import com.vci.model.*;
+import com.vci.pagemodel.*;
+import com.vci.starter.web.exception.VciBaseException;
+import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
+import com.vci.starter.web.pagemodel.DataGrid;
+import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.web.enumpck.ItemTypeEnum;
+import com.vci.web.enumpck.PortalVIType;
+import com.vci.web.enumpck.PortalVITypeFlag;
+import com.vci.web.service.OsPortalVIServiceI;
+import com.vci.web.util.PlatformClientUtil;
+import com.vci.web.util.UITools;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
+
+/*
+  * 閾炬帴绫诲瀷鏈嶅姟
+ * @author xiej
+ * @date 2024-08-14
+*/
+@Service
+public class OsPortalVIServiceImpl implements OsPortalVIServiceI  {
+    /**
+     * 鍔犺浇鑷韩
+     */
+    @Autowired(required = false)
+    @Lazy
+    private OsPortalVIServiceI self;
+
+    /**
+     * 骞冲彴鐨勮皟鐢ㄥ伐鍏风被
+     */
+    @Autowired
+    private PlatformClientUtil platformClientUtil;
+
+    @Override
+    public void clearCache() {
+
+    }
+    /**
+     * viType :Form("Form", "琛ㄥ崟", (short)1), Table("Table", "琛ㄦ牸", (short)0);
+     * viTypeFlag:	LinkType("LinkType", "閾炬帴绫诲瀷鐨勮〃鍗�", (short)1), BtmType("BtmType", "涓氬姟绫诲瀷鐨勮〃鍗�", (short)0);
+     * @param baseQueryObject 鏌ヨ瀵硅薄
+     * @return
+     */
+    @Override
+    public DataGrid<PortalVIVO> gridPortalVIVOs(BaseQueryObject baseQueryObject) {
+        Map<String, String> conditionMap=  baseQueryObject.getConditionMap();
+        if(conditionMap==null){
+            conditionMap=new HashMap<>();
+        }
+       String typeName=StringUtils.isBlank(conditionMap.get("typeName"))?"":conditionMap.get("typeName");
+        if(StringUtils.isBlank(typeName)){
+            return new DataGrid<>("娌℃湁閫夋嫨涓氬姟绫诲瀷");
+        }
+        String viName=StringUtils.isBlank(conditionMap.get("viName"))?"":conditionMap.get("viName");
+        String viTypeLabel=StringUtils.isBlank(conditionMap.get("viType"))?"":conditionMap.get("viType");
+        PortalVIType  portalVIType= PortalVIType.getByLabel(viTypeLabel);
+        Short viType=-1;
+        if(portalVIType!=null){
+            viType=portalVIType.getIntVal();
+        }
+        String viTypeFlagLabel=StringUtils.isBlank(conditionMap.get("viTypeFlag"))?"":conditionMap.get("viTypeFlag");
+        PortalVITypeFlag portalVITypeFlag= PortalVITypeFlag.getByLabel(viTypeFlagLabel);
+        Short viTypeFlag=-1;
+        if(portalVITypeFlag!=null){
+            viTypeFlag=portalVITypeFlag.getIntVal();
+        }
+        long pageIndex=baseQueryObject.getPage();
+        long pageSize=baseQueryObject.getLimit();
+        DataGrid<PortalVIVO> dataGrid = new DataGrid<>();
+        try {
+            GetPagePortalVIArrayByPageInfoResult pagePortalVIArrayByPageInfoResult= platformClientUtil.getPortalService().getPagePortalVIArrayByPageInfo(typeName,viName,viType,viTypeFlag,pageIndex,pageSize);
+            if(pagePortalVIArrayByPageInfoResult.total>0) {
+                PortalVI[] portalVIS = pagePortalVIArrayByPageInfoResult.returnValue;
+                List<PortalVIVO> portalVIVOS=  portalVIDOO2VOS(Arrays.asList(portalVIS));
+                dataGrid.setData(portalVIVOS);
+                dataGrid.setTotal(pagePortalVIArrayByPageInfoResult.total);
+            }else{
+                dataGrid = new DataGrid<>("娌掓湁鏌ヨ鍒版暟鎹�");
+            }
+        } catch (PLException e) {
+            e.printStackTrace();
+            dataGrid = new DataGrid<>("娌掓湁琛ㄥ崟鍑虹幇寮傚父:"+e.getMessage());
+        }
+        return dataGrid;
+    }
+
+    /***
+     * 琛ㄥ崟/琛ㄦ牸娣诲姞
+     * @param portalVIDTO
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public BaseResult add(PortalVIDTO portalVIDTO) throws VciBaseException {
+        return  savePortalVIDTO(portalVIDTO,false);
+    }
+    /***
+     * 琛ㄥ崟/琛ㄦ牸鏇存敼
+     * @param portalVIDTO
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public BaseResult edit(PortalVIDTO portalVIDTO) throws VciBaseException {
+        return  savePortalVIDTO(portalVIDTO,true);
+    }
+    private BaseResult savePortalVIDTO(PortalVIDTO portalVIDTO,boolean isEdit)  {
+
+        boolean _isBtm=false;
+        boolean flag = false;
+        String labelName=PortalVIType.Form.getName();
+        try {
+            VciBaseUtil.alertNotNull(portalVIDTO.getViName(),"鍚嶇О涓嶈兘涓虹┖锛�");
+            if(portalVIDTO.getPrm()==null||portalVIDTO.getPrm().getPrmItemList()==null||portalVIDTO.getPrm().getPrmItemList().size()==0){
+                throw  new Throwable(labelName+"锛屾湭璁剧疆");
+            }
+            if(PortalVIType.Table.getIntVal()==portalVIDTO.getViType()){//濡傛灉鏄〃鏍肩殑鐨勬牎楠�
+                labelName=PortalVIType.Table.getName();
+                PRMItemDTO prmItemDTO=  portalVIDTO.getPrm().getPrmItemList().get(0);
+                //姣忛〉鏄剧ず鏍¢獙
+                String rtnContent = isCorrectPageNums(prmItemDTO.getItemPageSize());
+                if (StringUtils.isNotBlank(rtnContent)) {
+                   throw new VciBaseException(rtnContent);
+                }
+            }else{
+
+            }
+            labelName= PortalVIType.getByIntVal(portalVIDTO.getViType()).getLabel();
+            if(!_isBtm){
+                PortalVI[] portalVIS=  platformClientUtil.getPortalService().getPortalVIArrayByTypeName(portalVIDTO.getTypeName());
+                for (int i = 0; i < portalVIS.length; i++) {
+                    PortalVI portalVI=  portalVIS[i];
+                   String viName= portalVI.viName;
+                   if(isEdit){//濡傛灉涓轰慨鏀�
+                       try {
+                           PortalVI oldPortalVI= platformClientUtil.getPortalService().getPortalVIById(portalVIDTO.getId());
+                           flag=platformClientUtil.getPortalService().judgeUpdateButton(oldPortalVI.typeFlag, oldPortalVI.viName, oldPortalVI.typeName);
+                           if (flag && (StringUtils.isNotBlank(portalVIDTO.getViName()))&&(!oldPortalVI.viName.equals(portalVIDTO.getViName()))) {
+                               throw  new Throwable("璇�"+labelName+"宸茬粡琚紩鐢紝涓嶈兘淇敼鍚嶇О!");
+                           }
+                       } catch (PLException e) {
+                           throw  new Throwable("鏌ヨ");
+                       }
+                       if (!portalVI.id.equals(portalVIDTO.getId())) {
+                           if (portalVI.viName.equals(portalVIDTO.getViName())) {
+                               throw  new Throwable("鍚嶇О宸茬粡瀛樺湪!");
+                           }
+                       }
+                   } else {
+                       portalVIDTO.setId(ObjectUtility.getNewObjectID36());
+                       if (portalVI.viName.equals(portalVIDTO.getViName())) {
+                           throw  new Throwable("鍚嶇О宸茬粡瀛樺湪!");
+                       }
+                   }
+                }
+            }else{
+                flag=platformClientUtil.getPortalService().judgeUpdateButton(portalVIDTO.getTypeFlag(), portalVIDTO.getViName(), portalVIDTO.getTypeName());
+            }
+            flag=  saveForm(portalVIDTO,isEdit);
+            if(flag){
+                return  BaseResult.success("淇濆瓨"+labelName+"鎴愬姛!");
+            }else{
+                new Throwable("淇濆瓨"+labelName+"澶辫触!");
+            }
+        } catch (Throwable e) {
+           // throw new VciBaseException("淇濆瓨琛ㄥ崟鍑虹幇寮傚父锛�"+e.getMessage());
+          return    BaseResult.fail("淇濆瓨"+labelName+"鍑虹幇寮傚父锛�"+e.getMessage());
+        }
+        return  BaseResult.success("淇濆瓨"+labelName+"鎴愬姛!");
+    }
+
+    /**
+     * 琛ㄥ崟/琛ㄦ牸
+     * @param portalVIDTO
+     * @param isEdit
+     * @return
+     */
+    private boolean saveForm(PortalVIDTO portalVIDTO,boolean isEdit) {
+        List<PRMItemDO> prmItemList = new ArrayList<PRMItemDO>();
+        try {
+            PortalVI pvi=portalVIDTOO2VI(portalVIDTO);
+            boolean res=false;
+            if (!isEdit) {
+                res= platformClientUtil.getPortalService().savePortalVI(pvi);
+            } else {
+                res= platformClientUtil.getPortalService().updatePortalVI(pvi);
+            }
+            return res;
+        } catch (Throwable e) {
+             e.printStackTrace();
+                return false;
+        }
+    }
+
+    @Override
+    public Map<String, PortalVIVO> selectAllPortalVIMap() throws VciBaseException {
+        return null;
+    }
+
+
+
+    /**
+     * 鍒ゆ柇姣忛〉琛屾暟瀹氫箟鏄惁姝g‘
+     * @Title		:isCorrectPageNums
+     * @Description	:
+     * @param pageText
+     * @return
+     */
+    protected String isCorrectPageNums(String pageText) {
+        if (pageText == null || pageText.trim().equals("")) {
+            return "";
+        }
+        //edit by guo褰撴瘡椤佃鏁颁腑涓嶆涓�涓�夐」鏃讹紝闇�瑕佸~鍐欓粯璁ょ殑鏄剧ず鏉℃暟锛屼笖榛樿鐨勫簲璇ュ瓨鍦ㄤ簬閫夐」涓��
+        if(pageText.indexOf(",")!=-1){
+            try {
+                String[] pages = pageText.split(",");
+                int index = pageText.indexOf("#");
+                String subpageText1 = pageText.substring(0, index);
+                String subpageText2 = pageText.substring(index+1);
+                if(subpageText1.contains(subpageText2)){
+                    for (String page : pages) {
+                        //if(!page.equalsIgnoreCase("all")){
+                        if(page.contains("#")){
+                            index = page.indexOf("#");
+                            page = page.substring(0, index);
+                        }
+                        Integer.parseInt(page);
+                        //}
+                    }
+                } else {
+                    return "杈撳叆椤垫暟涓嶇鍚堣鑼冿紝璇峰弬鐓ф枃鏈鎻愮ず鍐嶉噸鏂板~鍐欙紒";
+                }
+
+            }
+            catch (Exception e) {
+                return "杈撳叆椤垫暟涓嶇鍚堣鑼冿紝璇峰弬鐓ф枃鏈鎻愮ず鍐嶉噸鏂板~鍐欙紒";
+            }
+        }else {
+            try {
+                Integer.parseInt(pageText);
+            } catch (Exception e) {
+                return "杈撳叆椤垫暟涓嶇鍚堣鑼冿紝璇峰弬鐓ф枃鏈鎻愮ず閲嶆柊濉啓锛�";
+            }
+        }
+        return "";
+    }
+
+
+    /**
+     * 鏋氫妇鐨勬暟鎹璞¤浆鎹负鏄剧ず瀵硅薄
+     *
+     * @param portalVIS 鏋氫妇鐨勫璞�
+     * @return 鏄剧ず瀵硅薄
+     */
+    @Override
+    public List<PortalVIVO> portalVIDOO2VOS(Collection<PortalVI> portalVIS) {
+        List<PortalVIVO> portalVIVOS = new ArrayList<>();
+        Optional.ofNullable(portalVIS).orElseGet(()->new ArrayList<>()).stream().forEach(portalVI -> {
+            PortalVIVO portalVIVO = portalVIDOO2VO(portalVI);
+            portalVIVOS.add(portalVIVO);
+        });
+        return portalVIVOS;
+    }
+    /**
+     * 琛ㄥ崟鐨勬暟鎹璞¤浆鎹负鏄剧ず瀵硅薄
+     * @param portalVIDTOS 琛ㄥ崟鐨勫璞�
+     * @return 鏄剧ず瀵硅薄
+     */
+    @Override
+    public List<PortalVI> portalVIDTOO2VIS(Collection<PortalVIDTO> portalVIDTOS) {
+        List<PortalVI> portalVIS = new ArrayList<>();
+        Optional.ofNullable(portalVIDTOS).orElseGet(()->new ArrayList<>()).stream().forEach(portalVIDTO -> {
+            PortalVI portalVI = portalVIDTOO2VI(portalVIDTO);
+            portalVIS.add(portalVI);
+        });
+        return portalVIS;
+    }
+
+    /**
+     * 琛ㄥ崟鐨勬暟鎹璞¤浆鎹负鏄剧ず瀵硅薄
+     * @param portalVIDTO
+     * @return
+     */
+    @Override
+    public  PortalVI portalVIDTOO2VI(PortalVIDTO portalVIDTO) {
+        PortalVI portalVI=new PortalVI();
+        portalVI.id=portalVIDTO.getId();
+        portalVI.typeFlag= portalVIDTO.getTypeFlag();
+        portalVI.typeName=portalVIDTO.getTypeName();
+        portalVI.viName=portalVIDTO.getViName();
+        portalVI.viType=portalVIDTO.getViType();
+        short viType =portalVIDTO.getViType();
+        PRMDO prmdo = prmDOO2VIS(portalVIDTO.getPrm(),viType);
+        try {
+            portalVI.prm=UITools.getPRMText(prmdo);
+        } catch (Throwable e) {
+            e.printStackTrace();
+        }
+        return portalVI;
+    }
+
+    /**
+     * 琛ㄥ崟鏁版嵁瀵硅薄杞崲
+     * @param prmdto
+     * @param viType
+     * @return
+     */
+    private PRMDO prmDOO2VIS(PRMDTO prmdto, short viType) {
+        PRMDO prmdo=new PRMDO();
+        prmdo.setShowCols(prmdto.getShowCols());
+        prmdo.setFormQtName(prmdto.getFormQtName());
+        prmdo.setPrmItemList(pRMItemDTOO2DOS(prmdto.getPrmItemList(),viType));
+        return  prmdo;
+    }
+
+    @Override
+    public  PortalVIVO portalVIDOO2VO(PortalVI portalVI) {
+        PortalVIVO portalVIVO=new PortalVIVO();
+        portalVIVO.setId(portalVI.id);
+        portalVIVO.setTypeFlag(portalVI.typeFlag);
+        portalVIVO.setTypeName(portalVI.typeName);
+        portalVIVO.setViName(portalVI.viName);
+        portalVIVO.setViType(portalVI.viType);
+        String  prm= portalVI.prm;
+        PRMDO prmdo= UITools.getPRM(prm);
+        portalVIVO.setPrm(prmDOO2VOS(prmdo,portalVI.viType));
+        return portalVIVO;
+    }
+    private PRMVO prmDOO2VOS(PRMDO prmdo,short viType){
+        PRMVO prmvo=new PRMVO();
+        prmvo.setFormQtName(prmdo.getFormQtName());
+        prmvo.setShowCols(prmdo.getShowCols());
+        List<PRMItemDO> prmItemDOS= prmdo.getPrmItemList();
+        prmvo.setPrmItemList(pRMItemDOO2VOS(prmItemDOS,viType));
+        return prmvo;
+    }
+    public List<PRMItemVO> pRMItemDOO2VOS(Collection<PRMItemDO> prmItemDOS,short viType) {
+        List<PRMItemVO> portalVIVOS = new ArrayList<>();
+        Optional.ofNullable(prmItemDOS).orElseGet(()->new ArrayList<>()).stream().forEach(prmItemDO -> {
+            PRMItemVO prmItemVO = pRMItemDOO2VO(prmItemDO,viType);
+            portalVIVOS.add(prmItemVO);
+        });
+        return portalVIVOS;
+    }
+    public List<PRMItemDO> pRMItemDTOO2DOS(Collection<PRMItemDTO> prmItemDTOS,short viType) {
+        List<PRMItemDO> portalVIVOS = new ArrayList<>();
+        Optional.ofNullable(prmItemDTOS).orElseGet(()->new ArrayList<>()).stream().forEach(PRMItemDTO -> {
+            PRMItemDO PRMItemDO = pRMItemDTOO2DO(PRMItemDTO,viType);
+            portalVIVOS.add(PRMItemDO);
+        });
+        return portalVIVOS;
+    }
+
+    /**
+     * 鏁版嵁瀵硅薄杞崲
+     * @param prmItemDTO 鏁版嵁瀵硅薄
+     * @param viType 琛ㄥ崟绫诲瀷
+     * @return
+     */
+    private PRMItemDO pRMItemDTOO2DO(PRMItemDTO prmItemDTO,short viType) {
+        PRMItemDO prmItemDO=new PRMItemDO();
+        prmItemDO.setItemBat(prmItemDTO.getItemBat());
+        prmItemDO.setItemCols(prmItemDTO.getItemCols());
+        prmItemDO.setItemEQ(prmItemDTO.getItemEQ());
+        prmItemDO.setItemDbl(prmItemDTO.getItemDbl());
+        prmItemDO.setItemCut(prmItemDTO.getItemCut());
+        prmItemDO.setItemOR(prmItemDTO.getItemOR());
+        prmItemDO.setItemAddFilter(prmItemDTO.getItemAddFilter());
+        prmItemDO.setItemField(prmItemDTO.getItemField());
+        prmItemDO.setItemImgWH(prmItemDTO.getItemImgWH());
+        prmItemDO.setItemCtrlDisplyCol(prmItemDTO.getItemCtrlDisplyCol());//鎺у埗鏄剧ず鍒�
+        prmItemDO.setItemDateFormat(prmItemDTO.getItemDateFormat());// 鏁版嵁涓烘棩鏈熺被鍨嬫椂鐨勬牸寮忓寲瀛楃涓� 濡� yyyy-MM-dd HH:mm:ss
+        prmItemDO.setItemInObj(prmItemDTO.getItemInObj());
+        prmItemDO.setItemName(prmItemDTO.getItemName());
+        prmItemDO.setItemCustomClass(prmItemDTO.getItemCustomClass());//鑷畾涔夌被璺緞
+        prmItemDO.setItemIsHidden(prmItemDTO.getItemIsHidden());
+        prmItemDO.setItemIsEditable(prmItemDTO.getItemIsEditable());
+        prmItemDO.setItemIsRequired(prmItemDTO.getItemIsRequired());
+        prmItemDO.setItemFieldWidth(prmItemDTO.getItemFieldWidth());
+        prmItemDO.setItemTxf(prmItemDTO.getItemTxf());
+        prmItemDO.setItemRows(prmItemDTO.getItemRows());
+        prmItemDO.setItemHrefConf(prmItemDO.getItemHrefConf());//瓒呴摼鎺ラ厤缃�
+        prmItemDO.setItemTips(prmItemDTO.getItemTips());
+        prmItemDO.setItemTrim(prmItemDTO.getItemTrim());
+        prmItemDO.setItemDateFormat(prmItemDTO.getItemDateFormat());
+        prmItemDO.setItemCtrlDisplyCondition(prmItemDTO.getItemCtrlDisplyCondition());////鎺у埗鏄剧ず鏉′欢
+        prmItemDO.setItemEditableProgram(prmItemDTO.getItemEditableProgram());
+        prmItemDO.setItemEditCondition(prmItemDTO.getItemEditCondition());
+        prmItemDO.setItemHrefFields(prmItemDTO.getItemHrefFields());//瓒呴摼鎺ュ瓧娈�
+        prmItemDO.setItemValueList(prmItemDTO.getItemValueList());
+        prmItemDO.setItemValue(prmItemDTO.getItemValue());
+        prmItemDO.setItemStyle(prmItemDTO.getItemStyle());
+        prmItemDO.setItemShowExpression(prmItemDTO.getItemShowExpression());// 鏄剧ず琛ㄨ揪寮� ${aa}-${bb}
+        prmItemDO.setItemSeniorQueryColsCounts(prmItemDTO.getItemSeniorQueryColsCounts());//楂樼骇鏌ヨ鍚勫垪浣跨敤娆℃暟
+        prmItemDO.setItemType(prmItemDTO.getItemType());
+        prmItemDO.setItemScript(prmItemDTO.getItemScript());
+        prmItemDO.setItemRight(prmItemDTO.getItemRight());
+        prmItemDO.setItemQuerySql(prmItemDTO.getItemQuerySql());
+        prmItemDO.setItemQueryRefFields(prmItemDTO.getItemQueryRefFields());//鏌ヨ鍏宠仈鍒�
+        prmItemDO.setItemQtName(prmItemDTO.getItemQtName());//鏈彮鍚嶇О
+        prmItemDO.setItemParentFolderName(prmItemDTO.getItemParentFolderName());//鐖舵枃浠跺す鍚嶇О
+        prmItemDO.setItemPageSize(prmItemDTO.getItemPageSize());
+        prmItemDO.setItemOutType(prmItemDTO.getItemOutType());
+        prmItemDO.setItemOutFields(prmItemDTO.getItemOutFields());
+        prmItemDO.setItemListVal(prmItemDTO.getItemListVal());
+        prmItemDO.setItemListTxt(prmItemDTO.getItemListTxt());
+        prmItemDO.setItemListTable(prmItemDTO.getItemListTable());
+        prmItemDO.setItemKeyFields(prmItemDTO.getItemKeyFields());
+        prmItemDO.setItemIsShowFolder(prmItemDTO.getItemIsShowFolder());//鏄惁鏄剧ず鏂囦欢澶�
+        prmItemDO.setItemIsNavigatorExpand(prmItemDTO.getItemIsNavigatorExpand());////鏌ヨ鍖哄煙鏄剧ず鎺у埗
+        prmItemDO.setItemIsHttpSave(prmItemDTO.getItemIsHttpSave());
+        prmItemDO.setItemHttpVolumnPath(prmItemDTO.getItemHttpVolumnPath());
+        prmItemDO.setItemHttpPathField(prmItemDTO.getItemHttpPathField());
+        if(viType==PortalVIType.Table.getIntVal()) {//濡傛灉鏄〃鏍�
+            initTableConfigDTOO2DOData(prmItemDO,prmItemDTO);
+        }
+        return prmItemDO;
+    }
+    /**
+     * PRMItemDO 杞� PRMItemVO
+     * @param prmItemDO
+     * @param viType
+     * @return
+     */
+    private PRMItemVO pRMItemDOO2VO(PRMItemDO prmItemDO,short viType) {
+        PRMItemVO prmItemVO=new PRMItemVO();
+        prmItemVO.setItemBat(prmItemDO.getItemBat());
+        prmItemVO.setItemCols(prmItemDO.getItemCols());
+        prmItemVO.setItemEQ(prmItemDO.getItemEQ());
+        prmItemVO.setItemDbl(prmItemDO.getItemDbl());
+        prmItemVO.setItemCut(prmItemDO.getItemCut());
+        prmItemVO.setItemOR(prmItemDO.getItemOR());
+        prmItemVO.setItemAddFilter(prmItemDO.getItemAddFilter());
+        prmItemVO.setItemField(prmItemDO.getItemField());
+        prmItemVO.setItemImgWH(prmItemDO.getItemImgWH());
+        prmItemVO.setItemCtrlDisplyCol(prmItemDO.getItemCtrlDisplyCol());//鎺у埗鏄剧ず鍒�
+        prmItemVO.setItemDateFormat(prmItemDO.getItemDateFormat());// 鏁版嵁涓烘棩鏈熺被鍨嬫椂鐨勬牸寮忓寲瀛楃涓� 濡� yyyy-MM-dd HH:mm:ss
+        prmItemVO.setItemInObj(prmItemDO.getItemInObj());
+        prmItemVO.setItemName(prmItemDO.getItemName());
+        prmItemVO.setItemCustomClass(prmItemDO.getItemCustomClass());//鑷畾涔夌被璺緞
+        prmItemVO.setItemIsHidden(prmItemDO.getItemIsHidden());
+        prmItemVO.setItemIsEditable(prmItemDO.getItemIsEditable());
+        prmItemVO.setItemIsRequired(prmItemDO.getItemIsRequired());
+        prmItemVO.setItemFieldWidth(prmItemDO.getItemFieldWidth());
+        prmItemVO.setItemTxf(prmItemDO.getItemTxf());
+        prmItemVO.setItemRows(prmItemDO.getItemRows());
+        prmItemVO.setItemHrefConf(prmItemDO.getItemHrefConf());//瓒呴摼鎺ラ厤缃�
+        prmItemVO.setItemTips(prmItemDO.getItemTips());
+        prmItemVO.setItemTrim(prmItemDO.getItemTrim());
+        prmItemVO.setItemDateFormat(prmItemDO.getItemDateFormat());
+        prmItemVO.setItemCtrlDisplyCondition(prmItemDO.getItemCtrlDisplyCondition());////鎺у埗鏄剧ず鏉′欢
+        prmItemVO.setItemEditableProgram(prmItemDO.getItemEditableProgram());
+        prmItemVO.setItemEditCondition(prmItemDO.getItemEditCondition());
+        prmItemVO.setItemHrefFields(prmItemDO.getItemHrefFields());//瓒呴摼鎺ュ瓧娈�
+        prmItemVO.setItemValueList(prmItemDO.getItemValueList());
+        prmItemVO.setItemValue(prmItemDO.getItemValue());
+        prmItemVO.setItemStyle(prmItemDO.getItemStyle());
+        prmItemVO.setItemShowExpression(prmItemDO.getItemShowExpression());// 鏄剧ず琛ㄨ揪寮� ${aa}-${bb}
+        prmItemVO.setItemSeniorQueryColsCounts(prmItemDO.getItemSeniorQueryColsCounts());//楂樼骇鏌ヨ鍚勫垪浣跨敤娆℃暟
+        prmItemVO.setItemQuerySql(prmItemDO.getItemQuerySql());//楂樼骇鏌ヨsql
+        prmItemVO.setItemType(prmItemDO.getItemType());//灞炴�у熀鏈被鍨�
+        prmItemVO.setItemTypeText(ItemTypeEnum.getTextByValue(prmItemDO.getItemType()));//灞炴�у熀鏈被鍨嬫樉绀哄��
+        prmItemVO.setItemScript(prmItemDO.getItemScript());
+        prmItemVO.setItemRight(prmItemDO.getItemRight());
+        prmItemVO.setItemQueryRefFields(prmItemDO.getItemQueryRefFields());//鏌ヨ鍏宠仈鍒�
+        prmItemVO.setItemQtName(prmItemDO.getItemQtName());
+        prmItemVO.setItemParentFolderName(prmItemDO.getItemParentFolderName());//鐖舵枃浠跺す鍚嶇О
+        prmItemVO.setItemPageSize(prmItemDO.getItemPageSize());
+        prmItemVO.setItemOutType(prmItemDO.getItemOutType());
+        prmItemVO.setItemOutFields(prmItemDO.getItemOutFields());
+        prmItemVO.setItemListVal(prmItemDO.getItemListVal());//鍙傜収鍊�
+        prmItemVO.setItemListTxt(prmItemDO.getItemListTxt());
+        prmItemVO.setItemListTable(prmItemDO.getItemListTable());
+        prmItemVO.setItemKeyFields(prmItemDO.getItemKeyFields());
+        prmItemVO.setItemIsShowFolder(prmItemDO.getItemIsShowFolder());//鏄惁鏄剧ず鏂囦欢澶�
+        prmItemVO.setItemIsNavigatorExpand(prmItemDO.getItemIsNavigatorExpand());////鏌ヨ鍖哄煙鏄剧ず鎺у埗
+        prmItemVO.setItemIsHttpSave(prmItemDO.getItemIsHttpSave());
+        prmItemVO.setItemHttpVolumnPath(prmItemDO.getItemHttpVolumnPath());
+        prmItemVO.setItemHttpPathField(prmItemDO.getItemHttpPathField());
+        if(viType==PortalVIType.Table.getIntVal()) {//濡傛灉鏄〃鏍�
+            initTableConfigDOO2VOData(prmItemVO,prmItemDO);
+        }
+        return prmItemVO;
+    }
+
+    /**
+     * 鍒濆鍖栬〃鏍兼墍鐢ㄧ壒娈婂瓧娈甸厤缃�
+     * @param prmItemVO
+     * @param prmItemDO
+     */
+    private void initTableConfigDOO2VOData(PRMItemVO prmItemVO,PRMItemDO prmItemDO){
+        prmItemVO.setItemFieldWidthList(initItemFieldWidthList(prmItemDO.getItemOutFields(),prmItemDO.getItemFieldWidth()));//鍒楁樉绀哄娈� itemOutFieldList 鐩稿尮閰�
+        prmItemVO.setItemSeniorQueryBOS(initItemSeniorQueryBOData(prmItemDO.getItemSeniorQueryCols(),prmItemDO.getItemSeniorQueryColsCounts(),prmItemDO.getItemQuerySql()));//楂樼骇鏌ヨ瀵硅薄
+        List<String> allKeyList= getRefFormVIName(prmItemVO.getItemInObj());
+        List<String> itemOutFieldList =VciBaseUtil.str2List(prmItemVO.getItemOutFields());
+        List<String> itemKeyFieldList =VciBaseUtil.str2List(prmItemVO.getItemKeyFields());
+        List<String> itemSelectoutFieldList= allKeyList.stream().filter(s ->!itemOutFieldList.stream().map(s1 -> s1).collect(Collectors.toList()).contains(s) ).collect(Collectors.toList());
+        prmItemVO.setItemSelectoutFieldList(itemSelectoutFieldList);//寰呴�夋嫨鐨勫睘鎬у瓧娈�
+        prmItemVO.setItemOutFieldList(itemOutFieldList);//闇�瑕佷娇鐢ㄧ殑闆嗗悎
+        List<String> itemSearchFieldList= itemOutFieldList.stream().filter(s ->!itemKeyFieldList.stream().map(s1 -> s1).collect(Collectors.toList()).contains(s) ).collect(Collectors.toList());
+        prmItemVO.setItemSearchFieldList(itemSearchFieldList);//寰呮悳绱㈠瓧娈�
+        prmItemVO.setItemKeyFieldList(itemKeyFieldList);//鎼滅储瀛楁
+    }
+    /**
+     * 鍒濆鍖栬〃鏍兼墍鐢ㄧ壒娈婂瓧娈甸厤缃�
+     * @param prmItemDTO
+     * @param prmItemDO
+     */
+    private void initTableConfigDTOO2DOData(PRMItemDO prmItemDO,PRMItemDTO prmItemDTO){
+
+        prmItemDO.setItemOutFields(VciBaseUtil.array2String(prmItemDTO.getItemOutFieldList().toArray(new String[]{})));//闇�瑕佷娇鐢ㄧ殑瀛楁
+        prmItemDO.setItemKeyFields(VciBaseUtil.array2String(prmItemDTO.getItemKeyFieldList().toArray(new String[]{})));//闇�瑕佹悳绱㈢殑瀛楁
+       List<String> newItemFieldWidthList=prmItemDTO.getItemFieldWidthList().stream().map(KeyValue::getValue).distinct().collect(Collectors.toList());
+       prmItemDO.setItemFieldWidth(VciBaseUtil.array2String(newItemFieldWidthList.toArray(new String[]{}),":"));//瀛楁瀹藉害
+       List<ItemSeniorQueryBO> itemSeniorQueryBOS=  prmItemDTO.getItemSeniorQueryBOS();
+       List<String> itemSeniorQueryColsList=new ArrayList<>();
+       List<String> itemSeniorQueryColsCountsList=new ArrayList<>();
+       List<String> itemQuerySqlList=new ArrayList<>();
+       itemSeniorQueryBOS.stream().forEach(itemSeniorQueryBO -> {
+           String itemSeniorQueryCols= itemSeniorQueryBO.getItemSeniorQueryCols();
+           String itemSeniorQueryColsCounts=itemSeniorQueryBO.getItemSeniorQueryColsCounts();
+           String itemQuerySql=itemSeniorQueryBO.getItemQuerySql();
+           if(StringUtils.isNotBlank(itemSeniorQueryCols)) {
+               itemSeniorQueryColsList.add(itemSeniorQueryCols);
+           }
+            if(StringUtils.isNotBlank(itemSeniorQueryColsCounts)) {
+                itemSeniorQueryColsCountsList.add(itemSeniorQueryColsCounts);
+            }
+            if(StringUtils.isNotBlank(itemQuerySql)){
+                itemQuerySqlList.add(itemQuerySql);
+            }
+        });
+        prmItemDO.setItemSeniorQueryCols(VciBaseUtil.array2String(itemSeniorQueryColsList.toArray(new String[]{})));
+        prmItemDO.setItemSeniorQueryColsCounts(VciBaseUtil.array2String(itemSeniorQueryColsCountsList.toArray(new String[]{})));
+        prmItemDO.setItemQuerySql(VciBaseUtil.array2String(itemQuerySqlList.toArray(new String[]{}),";"));
+
+    }
+
+    /**
+     * 鍒濆鍖栬〃鏍煎垪瀹藉害闆嗗悎
+     */
+    private List<KeyValue>  initItemFieldWidthList(String itemOutFields,String itemFieldWidth){
+        List<KeyValue> keyValueList=new ArrayList<>();
+        List<String>itemOutFieldList=   VciBaseUtil.str2List(itemOutFields);
+        List<String>itemFieldWidthList=  VciBaseUtil.str2List(itemFieldWidth);
+        if(itemOutFieldList.size()>0) {
+            for (int i = 0; i < itemOutFieldList.size(); i++) {
+                KeyValue keyValue = new KeyValue();
+                String with = itemFieldWidthList.get(i);
+                keyValue.setKey(itemOutFieldList.get(i));
+                keyValue.setValue(StringUtils.isBlank(with) ? "250" : with);
+                keyValueList.add(keyValue);
+            }
+        }
+        return keyValueList;
+    }
+    /**
+     * 楂樼骇鏌ヨ閰嶇疆鍒濆鍖�
+     * @param itemSeniorQueryCols
+     * @param itemSeniorQueryColsCounts
+     * @param itemQuerySql
+     * @return
+     */
+    private List<ItemSeniorQueryBO>  initItemSeniorQueryBOData(String itemSeniorQueryCols,String itemSeniorQueryColsCounts,String itemQuerySql){
+        List<ItemSeniorQueryBO> itemSeniorQueryBOList=new ArrayList<>();
+        List<String> itemSeniorQueryColList= VciBaseUtil.str2List(itemSeniorQueryCols);
+        List<String> itemSeniorQueryColsCountList= VciBaseUtil.str2List(itemSeniorQueryColsCounts);
+        List<String> itemQuerySqlList= VciBaseUtil.str2List(itemQuerySql,";");
+        if (itemSeniorQueryColList!=null&&itemSeniorQueryColList.size()>0){
+            for (int i=0;i<itemSeniorQueryColList.size();i++){
+              String itemSeniorQueryCol=  itemSeniorQueryColList.get(i);
+                String itemSeniorQueryColsCount=  itemSeniorQueryColsCountList.get(i);
+                if(StringUtils.isNotBlank(itemSeniorQueryCol)){
+                    String querysql = "";
+                    if(itemQuerySqlList!=null){
+                        querysql = itemQuerySqlList.get(i);
+                    }
+                    ItemSeniorQueryBO itemSeniorQueryBO=null;
+                    if("null".equals(querysql) ){
+                        itemSeniorQueryBO=   new ItemSeniorQueryBO(itemSeniorQueryCol,itemSeniorQueryColsCount,"");
+                    }else{
+                        itemSeniorQueryBO= new ItemSeniorQueryBO(itemSeniorQueryCol,itemSeniorQueryColsCount,querysql);
+                    }
+                    itemSeniorQueryBOList.add(itemSeniorQueryBO);
+                }
+            }
+        }
+        return itemSeniorQueryBOList;
+    }
+    private List<String> getRefFormVIName(String refFormOid){
+        List<String> keyList=new ArrayList<>();
+        try {
+
+            PortalVI refFormVI = UITools.getService().getPortalVIById(refFormOid);
+            PortalVIVO portalVIVO= portalVIDOO2VO(refFormVI);
+            if(portalVIVO!=null&&portalVIVO.getPrm().getPrmItemList().size()>0){
+                 portalVIVO.getPrm().getPrmItemList().stream().forEach(k->{
+                     keyList.add(k.getItemField());
+                 });
+            }
+        } catch (PLException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            return keyList;
+        }
+        return keyList;
+    }
+}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/UITools.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/UITools.java
new file mode 100644
index 0000000..e6fa0e6
--- /dev/null
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/util/UITools.java
@@ -0,0 +1,707 @@
+package com.vci.web.util;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import com.vci.model.PRMDO;
+import com.vci.model.PRMItemDO;
+import org.apache.commons.lang3.StringUtils;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+
+import com.vci.client.common.providers.ClientServiceProvider;
+import com.vci.common.portal.constants.PLDefinationConstants;
+import com.vci.common.portal.constants.PRMConstants;
+import com.vci.corba.portal.PortalServicePrx;
+
+
+/**
+ * UIService 妯″潡 Util 宸ュ叿绫�
+ * <p>Title: </p>
+ * <p>Description: </p>
+ * <p>Copyright: Copyright (c) 2017</p>
+ * <p>Company: VCI</p>
+ * @author xiongchao
+ * @time 2017-12-21
+ * @version 1.0
+ */
+public class UITools {
+private static PortalServicePrx portalService = null;
+	
+	public static PortalServicePrx getService(){
+		if(portalService != null){
+			return portalService;
+		}
+		try {
+			portalService = ClientServiceProvider.getUIService();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return portalService;
+	}
+	
+	/**
+	 * 灏唜ml鏂囨湰杞寲鎴怭RM瀵硅薄
+	 * @param text
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public static PRMDO getPRM(String text){
+		
+		if (StringUtils.isEmpty(text))
+			return null;
+		
+		Document document = null;
+		try {
+			document = DocumentHelper.parseText(text);
+		} catch (DocumentException e) {
+			e.printStackTrace();
+		}
+		if(document == null){
+			return null;
+		}
+		PRMDO prm = new PRMDO();
+		try{
+			Element root = document.getRootElement();
+			String showCols = root.elementText(PRMConstants.JD_SHOWCOLS);
+			if(showCols == null || showCols.equals("")){
+				showCols = "3";
+			}
+			prm.setShowCols(showCols);
+			String formQtName = root.elementText(PRMConstants.JD_FORMQTNAME);
+			if(formQtName == null){
+				formQtName = "";
+			}
+			prm.setFormQtName(formQtName);
+			List<Element> items = root.elements(PRMConstants.JD_ITEM);
+			List<PRMItemDO> prmItemList = new ArrayList<PRMItemDO>();
+			prm.setPrmItemList(prmItemList);
+			for(Iterator<Element> i = items.iterator(); i.hasNext();){
+				Element item = i.next();
+				PRMItemDO prmItem = new PRMItemDO();
+				prmItemList.add(prmItem);
+				
+				String elementText = item.elementText(PRMConstants.JD_field);
+				prmItem.setItemField(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_or);
+				prmItem.setItemOR(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_eq);
+				prmItem.setItemEQ(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_trim);
+				prmItem.setItemTrim(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_dbl);
+				prmItem.setItemDbl(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_cut);
+				prmItem.setItemCut(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_inObj);
+				prmItem.setItemInObj(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_addFilter);
+				prmItem.setItemAddFilter(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_outType);
+				prmItem.setItemOutType(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_pageSize);
+				prmItem.setItemPageSize(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_imgWH);
+				prmItem.setItemImgWH(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_outFields);
+				prmItem.setItemOutFields(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_keyFields);
+				prmItem.setItemKeyFields(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_bat);
+				prmItem.setItemBat(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_txf);
+				prmItem.setItemTxf(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_name);
+				prmItem.setItemName(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_type);
+				prmItem.setItemType(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_value);
+				prmItem.setItemValue(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_cols);
+				prmItem.setItemCols(elementText == null ? "" : elementText);
+				// add by xchao 2017.11.23 begin
+				// prmItem 鐨� itemIsHidden 鍊肩瓑浜� itemCols 
+				// 璇ュ�兼帶鍒跺厓绱犳槸鍚︽樉绀� 1锛氭樉绀� 0锛氫笉鏄剧ず锛屽綋涓斾粎褰撶瓑浜�1鏃舵樉绀猴紝鍚﹀垯鎸変笉鏄剧ず
+				prmItem.setItemIsHidden(elementText == null ? "" : elementText);
+				// add by xchao 2017.11.23 end 
+				
+				elementText = item.elementText(PRMConstants.JD_rows);
+				prmItem.setItemRows(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_style);
+				prmItem.setItemStyle(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_script);
+				prmItem.setItemScript(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_tips);
+				prmItem.setItemTips(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_valuelist);
+				if(elementText == null || elementText.equals("")){
+					prmItem.setItemValueList(new ArrayList<String>());
+				}else{
+					prmItem.setItemValueList(arrayToList(elementText.split(";")));
+				}
+				
+				elementText = item.elementText(PRMConstants.JD_listTable);
+				prmItem.setItemListTable(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_listTxt);
+				prmItem.setItemListTxt(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_listVal);
+				prmItem.setItemListVal(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_showExpression);
+				prmItem.setItemShowExpression(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_dateFormat);
+				prmItem.setItemDateFormat(elementText == null ? "" : elementText);
+				
+				
+				elementText = item.elementText(PRMConstants.JD_isEditable);
+				prmItem.setItemIsEditable(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_EditableProgram);
+				prmItem.setItemEditableProgram(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_qtName);
+				prmItem.setItemQtName(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_isRequired);
+				prmItem.setItemIsRequired(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_seniorQueryCols);
+				prmItem.setItemSeniorQueryCols(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_seniorQueryColsCounts);
+				prmItem.setItemSeniorQueryColsCounts(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_hrefFields);
+				prmItem.setItemHrefFields(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_hrefConf);
+				prmItem.setItemHrefConf(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_queryRefFields);
+				prmItem.setItemQueryRefFields(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_customClass);
+				prmItem.setItemCustomClass(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_ctrlDisplyCol);
+				prmItem.setItemCtrlDisplyCol(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_ctrlDisplyCondition);
+				prmItem.setItemCtrlDisplyCondition(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_isHttpSave);
+				prmItem.setItemIsHttpSave(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_httpVolumnPath);
+				prmItem.setItemHttpVolumnPath(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_httpPathField);
+				prmItem.setItemHttpPathField(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_editCondition);
+				prmItem.setItemEditCondition(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_isNavigatorExpand);
+				prmItem.setItemIsNavigatorExpand(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_isShowFolder);
+				prmItem.setItemIsShowFolder(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_parentFolderName);
+				prmItem.setItemParentFolderName(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_filterColWidth);
+				prmItem.setItemFieldWidth(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_QuerySql);
+				prmItem.setItemQuerySql(elementText == null ? "" : elementText);
+				
+				elementText = item.elementText(PRMConstants.JD_right);
+				prmItem.setItemRight(elementText == null ? "" : elementText);
+				
+			}
+		}catch(Exception e){
+			e.printStackTrace();
+		}
+		return prm;
+	}
+	
+	/**
+	 * 灏哖RM瀵硅薄杞寲鎴恱ml鏂囨湰
+	 * @param prm
+	 * @return
+	 * @throws Throwable 
+	 */
+	public static String getPRMText(PRMDO prm) throws Throwable{
+		try {
+			if (prm == null) {
+				return "";
+			}
+			Document document = DocumentHelper.createDocument();
+			Element rootNode = document.addElement(PRMConstants.JD_DATASET);
+			Element showColsNode = rootNode.addElement(PRMConstants.JD_SHOWCOLS);
+			showColsNode.setText(prm.getShowCols());
+			Element formQtNameNode = rootNode.addElement(PRMConstants.JD_FORMQTNAME);
+			formQtNameNode.setText(prm.getFormQtName());
+			List<PRMItemDO> prmItemList = prm.getPrmItemList();
+			if (prmItemList != null && prmItemList.size() > 0) {
+				for (Iterator<PRMItemDO> i = prmItemList.iterator(); i.hasNext();) {
+					Element itemNode = rootNode.addElement(PRMConstants.JD_ITEM);
+					PRMItemDO item = i.next();
+
+					Element itemChildNode = itemNode.addElement(PRMConstants.JD_field);
+					itemChildNode.setText(item.getItemField());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_or);
+					itemChildNode.setText(item.getItemOR());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_eq);
+					itemChildNode.setText(item.getItemEQ());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_trim);
+					itemChildNode.setText(item.getItemTrim());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_dbl);
+					itemChildNode.setText(item.getItemDbl());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_cut);
+					itemChildNode.setText(item.getItemCut());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_inObj);
+					itemChildNode.setText(item.getItemInObj());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_addFilter);
+					itemChildNode.setText(item.getItemAddFilter());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_outType);
+					itemChildNode.setText(item.getItemOutType());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_pageSize);
+					itemChildNode.setText(item.getItemPageSize());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_imgWH);
+					itemChildNode.setText(item.getItemImgWH());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_outFields);
+					itemChildNode.setText(item.getItemOutFields());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_keyFields);
+					itemChildNode.setText(item.getItemKeyFields());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_bat);
+					itemChildNode.setText(item.getItemBat());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_txf);
+					itemChildNode.setText(item.getItemTxf());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_name);
+					itemChildNode.setText(item.getItemName());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_type);
+					itemChildNode.setText(item.getItemType());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_value);
+					itemChildNode.setText(item.getItemValue());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_showExpression);
+					itemChildNode.setText(item.getItemShowExpression());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_dateFormat);
+					itemChildNode.setText(item.getItemDateFormat());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_cols);
+					itemChildNode.setText(item.getItemCols());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_rows);
+					itemChildNode.setText(item.getItemRows());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_style);
+					itemChildNode.setText(item.getItemStyle());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_script);
+					itemChildNode.setText(item.getItemScript());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_tips);
+					itemChildNode.setText(item.getItemTips());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_valuelist);
+					itemChildNode.setText(listToString(item.getItemValueList()));
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_listTable);
+					itemChildNode.setText(item.getItemListTable());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_listTxt);
+					itemChildNode.setText(item.getItemListTxt());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_listVal);
+					itemChildNode.setText(item.getItemListVal());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_isEditable);
+					itemChildNode.setText(item.getItemIsEditable());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_EditableProgram);
+					itemChildNode.setText(item.getItemEditableProgram());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_qtName);
+					itemChildNode.setText(item.getItemQtName());
+
+					itemChildNode = itemNode.addElement(PRMConstants.JD_isRequired);
+					itemChildNode.setText(item.getItemIsRequired());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_seniorQueryCols);
+					itemChildNode.setText(item.getItemSeniorQueryCols());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_seniorQueryColsCounts);
+					itemChildNode.setText(item.getItemSeniorQueryColsCounts());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_hrefFields);
+					itemChildNode.setText(item.getItemHrefFields());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_hrefConf);
+					itemChildNode.setText(item.getItemHrefConf());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_queryRefFields);
+					itemChildNode.setText(item.getItemQueryRefFields());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_customClass);
+					itemChildNode.setText(item.getItemCustomClass());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_ctrlDisplyCol);
+					itemChildNode.setText(item.getItemCtrlDisplyCol());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_ctrlDisplyCondition);
+					itemChildNode.setText(item.getItemCtrlDisplyCondition());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_isHttpSave);
+					itemChildNode.setText(item.getItemIsHttpSave());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_httpVolumnPath);
+					itemChildNode.setText(item.getItemHttpVolumnPath());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_httpPathField);
+					itemChildNode.setText(item.getItemHttpPathField());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_editCondition);
+					itemChildNode.setText(item.getItemEditCondition());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_isNavigatorExpand);
+					itemChildNode.setText(item.getItemIsNavigatorExpand());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_isShowFolder);
+					itemChildNode.setText(item.getItemIsShowFolder());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_parentFolderName);
+					itemChildNode.setText(item.getItemParentFolderName());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_filterColWidth);
+					itemChildNode.setText(item.getItemFieldWidth());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_QuerySql);
+					itemChildNode.setText(item.getItemQuerySql());
+					
+					itemChildNode = itemNode.addElement(PRMConstants.JD_right);
+					itemChildNode.setText(item.getItemRight());
+				}
+			}
+			return document.asXML();
+		} catch (Throwable e) {
+			e.printStackTrace();
+			throw e;
+		}
+	}
+	
+//	/**
+//	 * 灏嗕粠鏁版嵁搴撲腑璇诲彇鐨剎ml鏂囨湰杞寲鎴愬搴旂殑PLDefination瀵硅薄
+//	 * @param text
+//	 * @return
+//	 * @throws Throwable
+//	 */
+//	public static PLDefination getPLDefination(String text) throws Throwable{
+//		try{
+//			Document document = null;
+//			document = DocumentHelper.parseText(text);
+//			if(document == null){
+//				return null;
+//			}
+//			PLDefination obj = new PLDefination();
+//			Element root = document.getRootElement();
+//			if(root != null){
+//				String elementText = root.elementText(PLDefinationConstants.TYPE);
+//				if(elementText == null || elementText.equals("")){
+//					elementText = "0";
+//				}
+//				obj.setType(Integer.parseInt(elementText));
+//
+//				elementText = root.elementText(PLDefinationConstants.SHOWABS);
+//				obj.setShowAbs(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.SEPARATOR);
+//				obj.setSeparator(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.SHOWLINKABS);
+//				obj.setShowLinkAbs(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.SEARCHTARGET);
+//				obj.setSearchTarger(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.TEMPLATETYPE);
+//				obj.setTemplateType(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.SHOWTYPE);
+//				obj.setShowType(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.TEMPLATEID);
+//				obj.setTemplateId(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.ORIENTATION);
+//				obj.setOrientation(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.VALIDITY);
+//				obj.setValidity(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.ORDERFIELD);
+//				obj.setOrderField(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.ORDERMODE);
+//				obj.setOrderMode(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.RETURNROWS);
+//				obj.setReturnRows(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.CONTROLPATH);
+//				obj.setControlPath(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.EXPANDMODE);
+//				obj.setExpandMode(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.LINKTYPE);
+//				obj.setLinkType(elementText == null ? "" : elementText);
+//
+//
+//				elementText = root.elementText(PLDefinationConstants.ISSHOWIMAGE);
+//				obj.setIsShowImage(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.EXPANDCOLS);
+//				obj.setExpandCols(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.SHOWCONTENT);
+//				obj.setShowContent(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.SHOWCONTENTTYPE);
+//				obj.setShowContentType(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.SHOWCONTENTRELATION);
+//				obj.setShowContentRelation(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.SHOWCONTENTTABLE);
+//				obj.setShowContentTable(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.NAVIGATORTYPE);
+//				obj.setNavigatorType(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.EVENTKEY);
+//				obj.setEventKey(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.EVENTVALUE);
+//				obj.setEventValue(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.ROOTCONTENT);
+//				obj.setRootContent(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.UIPARSER);
+//				obj.setUiParser(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.EXTATTR);
+//				obj.setExtAttr(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.QUERYTEMPLATENAME);
+//				obj.setQueryTemplateName(elementText == null ? "" : elementText);
+//
+//				elementText = root.elementText(PLDefinationConstants.SUBUILAYOUT);
+//				obj.setSubUILayout(elementText == null ? "" : elementText);
+//			}
+//			return obj;
+//		}catch(Throwable e){
+//			e.printStackTrace();
+//			throw e;
+//		}
+//	}
+//
+//	/**
+//	 * 灏哖LDefination瀵硅薄杞寲鎴恱ml鏂囨湰
+//	 * @param obj
+//	 * @return
+//	 * @throws Throwable
+//	 */
+//	public static String getPLDefinationText(PLDefination obj) throws Throwable{
+//		try{
+//			if(obj == null){
+//				return "";
+//			}
+//
+//			Document doc = DocumentHelper.createDocument();
+//			Element rootNode = doc.addElement(PLDefinationConstants.PLDEFINATION);
+//
+//			Element node = rootNode.addElement(PLDefinationConstants.TYPE);
+//			node.setText(String.valueOf(obj.getType()));
+//
+//			node = rootNode.addElement(PLDefinationConstants.SHOWABS);
+//			node.setText(obj.getShowAbs());
+//
+//			node = rootNode.addElement(PLDefinationConstants.SEPARATOR);
+//			node.setText(obj.getSeparator());
+//
+//			node = rootNode.addElement(PLDefinationConstants.SHOWLINKABS);
+//			node.setText(obj.getShowLinkAbs());
+//
+//			node = rootNode.addElement(PLDefinationConstants.SEARCHTARGET);
+//			node.setText(obj.getSearchTarger());
+//
+//			node = rootNode.addElement(PLDefinationConstants.TEMPLATETYPE);
+//			node.setText(obj.getTemplateType());
+//
+//			node = rootNode.addElement(PLDefinationConstants.SHOWTYPE);
+//			node.setText(obj.getShowType());
+//
+//			node = rootNode.addElement(PLDefinationConstants.TEMPLATEID);
+//			node.setText(obj.getTemplateId());
+//
+//			node = rootNode.addElement(PLDefinationConstants.ORIENTATION);
+//			node.setText(obj.getOrientation());
+//
+//			node = rootNode.addElement(PLDefinationConstants.VALIDITY);
+//			node.setText(obj.getValidity());
+//
+//			node = rootNode.addElement(PLDefinationConstants.ORDERFIELD);
+//			node.setText(obj.getOrderField());
+//
+//			node = rootNode.addElement(PLDefinationConstants.ORDERMODE);
+//			node.setText(obj.getOrderMode());
+//
+//			node = rootNode.addElement(PLDefinationConstants.RETURNROWS);
+//			node.setText(obj.getReturnRows());
+//
+//			node = rootNode.addElement(PLDefinationConstants.CONTROLPATH);
+//			node.setText(obj.getControlPath());
+//
+//			node = rootNode.addElement(PLDefinationConstants.EXPANDMODE);
+//			node.setText(obj.getExpandMode());
+//
+//			node = rootNode.addElement(PLDefinationConstants.LINKTYPE);
+//			node.setText(obj.getLinkType());
+//
+//			node = rootNode.addElement(PLDefinationConstants.ISSHOWIMAGE);
+//			node.setText(obj.getIsShowImage());
+//
+//			node = rootNode.addElement(PLDefinationConstants.EXPANDCOLS);
+//			node.setText(obj.getExpandCols());
+//
+//			node = rootNode.addElement(PLDefinationConstants.SHOWCONTENT);
+//			node.setText(obj.getShowContent());
+//
+//			node = rootNode.addElement(PLDefinationConstants.SHOWCONTENTTYPE);
+//			node.setText(obj.getShowContentType());
+//
+//			node = rootNode.addElement(PLDefinationConstants.SHOWCONTENTRELATION);
+//			node.setText(obj.getShowContentRelation());
+//
+//			node = rootNode.addElement(PLDefinationConstants.SHOWCONTENTTABLE);
+//			node.setText(obj.getShowContentTable());
+//
+//			node = rootNode.addElement(PLDefinationConstants.NAVIGATORTYPE);
+//			node.setText(obj.getNavigatorType());
+//
+//			node = rootNode.addElement(PLDefinationConstants.EVENTKEY);
+//			node.setText(obj.getEventKey());
+//
+//			node = rootNode.addElement(PLDefinationConstants.EVENTVALUE);
+//			node.setText(obj.getEventValue());
+//
+//			node = rootNode.addElement(PLDefinationConstants.ROOTCONTENT);
+//			node.setText(obj.getRootContent());
+//
+//			node = rootNode.addElement(PLDefinationConstants.UIPARSER);
+//			node.setText(obj.getUiParser());
+//
+//			node = rootNode.addElement(PLDefinationConstants.EXTATTR);
+//			node.setText(obj.getExtAttr());
+//
+//			node = rootNode.addElement(PLDefinationConstants.QUERYTEMPLATENAME);
+//			node.setText(obj.getQueryTemplateName());
+//
+//			node = rootNode.addElement(PLDefinationConstants.SUBUIOBJTYPE);
+//			node.setText(obj.getSubUiObjType());
+//
+//			node = rootNode.addElement(PLDefinationConstants.SUBUILAYOUT);
+//			node.setText(obj.getSubUILayout());
+//
+//			return doc.asXML();
+//		}catch(Throwable e){
+//			throw e;
+//		}
+//
+//	}
+	
+	/**
+	 * 灏咥RRAY杞寲鎴怢IST
+	 * @param array
+	 * @return
+	 */
+	public static List<String> arrayToList(String[] array){
+		if(array == null || array.length == 0){
+			return null;
+		}
+		List<String> list = new ArrayList<String>();
+		for(int i = 0; i < array.length; i++){
+			list.add(array[i]);
+		}
+		return list;
+	}
+	
+	/**
+	 * 灏哃IST鍔犱笂';'鎷兼垚瀛楃涓�
+	 * @param list
+	 * @return
+	 */
+	public static String listToString(List<String> list){
+		StringBuilder strb = new StringBuilder();
+		if(list != null && list.size() > 0){
+			for(int i = 0; i < list.size(); i++){
+				strb.append(list.get(i));
+				if(i < list.size() - 1){
+					strb.append(";");
+				}
+			}
+		}
+		return strb.toString();
+	}
+	
+}

--
Gitblit v1.9.3