ludc
2024-09-06 7b3d5fb08fdbd2ce574c3b9ab666c8c7082be728
Merge remote-tracking branch 'origin/master'

# Conflicts:
# Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/UIManagerController.java
# Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java
# Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
已修改24个文件
已添加12个文件
4098 ■■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ConditionDTO.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ConditionItemDTO.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LeafInfoDTO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LeafValueDto.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PRMItemDTO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/QTInfoDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/QueryTemplateDTO.java 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/RoleRightDTO.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/UIAuthorDTO.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PRMItemDO.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/RoleRightDO.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/MenuVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PRMItemVO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/RoleRightVO.java 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmFunctionQueryServicePlatformImpl.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsQueryTemplateController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/UIManagerController.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsQuereyTemplateServiceI.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsQueryTemplateImpl.java 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java 336 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/tt.xml 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/resources/application-dev.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/App.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/queryTemplate/linkTypeQuery.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/queryTemplate/queryDefine.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/PLT-basic-component/upload-file.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/formDialog.vue 514 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/formQueryDialog.vue 677 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/index.vue 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formQueryDialog.vue 740 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/index.vue 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ConditionDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.vci.dto;
import com.vci.common.qt.object.ConditionItem;
import lombok.Data;
import java.util.Iterator;
import java.util.Map;
/**
 * æ¡ä»¶ä¼ è¾“对象
 * @author yuxc
 * @date 2024/9/4
 */
@Data
public class ConditionDTO {
    private String rootCIName;
    private Map<String, ConditionItemDTO> ciMap;
    public ConditionDTO() {
    }
    public String getRootCIName() {
        return this.rootCIName;
    }
    public void setRootCIName(String rootCIName) {
        this.rootCIName = rootCIName;
    }
    public String getRootCINameByCIMap(Map<String, ConditionItem> ciMap) {
        String rootCIName = "";
        if (ciMap != null) {
            Iterator<String> i = ciMap.keySet().iterator();
            while(i.hasNext()) {
                String ciName = (String)i.next();
                if (rootCIName.equals("")) {
                    rootCIName = ciName;
                } else {
                    int rootInt = Integer.valueOf(rootCIName.substring(2));
                    int ciInt = Integer.valueOf(ciName.substring(2));
                    if (ciInt > rootInt) {
                        rootCIName = ciName;
                    }
                }
            }
        }
        return rootCIName;
    }
    public Map<String, ConditionItemDTO> getCIMap() {
        return this.ciMap;
    }
    public void setCIMap(Map<String, ConditionItemDTO> cIMap) {
        this.ciMap = cIMap;
    }
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ConditionItemDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
package com.vci.dto;
import com.vci.common.qt.object.ChildrenInfo;
import com.vci.common.qt.object.ConditionItem;
import com.vci.common.qt.object.LeafInfo;
import lombok.Data;
import java.util.Iterator;
import java.util.Map;
/**
 * æ¡ä»¶åˆ—表传输对象
 * @author yuxc
 * @date 2024/9/4
 */
@Data
public class ConditionItemDTO {
    private String id;
    private LeafInfoDTO leafInfo;
    private ChildrenInfo childrenInfo;
    private boolean leafFlag;
    public ConditionItemDTO() {
    }
    public String getId() {
        return this.id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public LeafInfoDTO getLeafInfo() {
        return this.leafInfo;
    }
    public void setLeafInfo(LeafInfoDTO leafInfo) {
        this.leafInfo = leafInfo;
    }
    public ChildrenInfo getChildrenInfo() {
        return this.childrenInfo;
    }
    public void setChildrenInfo(ChildrenInfo childrenInfo) {
        this.childrenInfo = childrenInfo;
    }
    public boolean isLeaf() {
        return this.leafFlag;
    }
    public void setLeafFlag(boolean leafFlag) {
        this.leafFlag = leafFlag;
    }
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LeafInfoDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.vci.dto;
import com.vci.common.qt.object.ConditionItem;
import com.vci.common.qt.object.LeafValue;
import lombok.Data;
import java.util.Iterator;
import java.util.Map;
/**
 * å¶å­æ¡ä»¶ä¼ è¾“对象
 * @author yuxc
 * @date 2024/9/4
 */
@Data
public class LeafInfoDTO {
    private String clause;
    private String operator;
    private String type;
    private LeafValueDto value;
    public LeafInfoDTO() {
    }
    public String getClause() {
        return this.clause;
    }
    public void setClause(String clause) {
        this.clause = clause;
    }
    public String getOperator() {
        return this.operator;
    }
    public void setOperator(String operator) {
        this.operator = operator;
    }
    public LeafValueDto getValue() {
        return this.value;
    }
    public void setValue(LeafValueDto value) {
        this.value = value;
    }
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/LeafValueDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.vci.dto;
import lombok.Data;
/**
 * å¶å­å€¼ä¼ è¾“对象
 * @author yuxc
 * @date 2024/9/4
 */
@Data
public class LeafValueDto {
    private String ordinaryValue;
    private QueryTemplateDTO queryTemplate;
    public LeafValueDto() {
    }
    public String getOrdinaryValue() {
        return this.ordinaryValue;
    }
    public void setOrdinaryValue(String ordinaryValue) {
        this.ordinaryValue = ordinaryValue;
    }
    public QueryTemplateDTO getQueryTemplate() {
        return this.queryTemplate;
    }
    public void setQueryTemplate(QueryTemplateDTO queryTemplate) {
        this.queryTemplate = queryTemplate;
    }
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PRMItemDTO.java
@@ -141,6 +141,11 @@
     * æžšä¸¾å€¼
     */
    private List<String> itemValueList = null;
    /***
     * æžšä¸¾å€¼é›†åˆ
     */
    private List<KeyValue> itemKeyValueList=new ArrayList<>();
    /**
     *一级参照
     */
@@ -695,6 +700,14 @@
//    }
    public List<KeyValue> getItemKeyValueList() {
        return itemKeyValueList;
    }
    public void setItemKeyValueList(List<KeyValue> itemKeyValueList) {
        this.itemKeyValueList = itemKeyValueList;
    }
    @Override
    public String toString() {
        return "PRMItemDTO{" +
@@ -729,6 +742,7 @@
                ", itemScript='" + itemScript + '\'' +
                ", itemTips='" + itemTips + '\'' +
                ", itemValueList=" + itemValueList +
                ", itemKeyValueList=" + itemKeyValueList +
                ", itemListTable='" + itemListTable + '\'' +
                ", itemListTxt='" + itemListTxt + '\'' +
                ", itemListVal='" + itemListVal + '\'' +
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/QTInfoDTO.java
@@ -31,7 +31,7 @@
    //查询模板名
    private String qtText;
    //查询模板信息
    private QueryTemplate queryTemplate;
    private QueryTemplateDTO queryTemplate;
    //查询条件,后端进行相关解析
    private List<HashMap<String,String>> condition;
    private HashMap<String,Object> tree = new HashMap<>();
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/QueryTemplateDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,164 @@
package com.vci.dto;
import com.vci.common.qt.object.Condition;
import com.vci.common.qt.object.OrderInfo;
import com.vci.common.qt.object.PageInfo;
import lombok.Data;
import java.util.List;
/**
 * æŸ¥è¯¢æ¨¡æ¿ä¼ è¾“对象
 * @author yuxc
 * @date 2024/8/7
 */
@Data
public class QueryTemplateDTO {
    private String id;
    private String type;
    private List<String> clauseList;
    private String linkType;
    private String btmType;
    private boolean queryChildrenFlag = false;
    private boolean queryISLeaf = false;
    private boolean rightFlag = true;
    private boolean secretFlag = true;
    private String direction = "positive";
    private ConditionDTO condition;
    private int version = 0;
    private PageInfo pageInfo;
    private List<OrderInfo> orderInfoList;
    private int level = 1;
    private int recReturnMode = 1;
    public QueryTemplateDTO() {
    }
    public String getLinkType() {
        return this.linkType;
    }
    public void setLinkType(String linkType) {
        this.linkType = linkType;
    }
    public String getBtmType() {
        return this.btmType;
    }
    public void setBtmType(String btmType) {
        this.btmType = btmType;
    }
    public boolean isQueryChildren() {
        return this.queryChildrenFlag;
    }
    public void setQueryChildrenFlag(boolean queryChildrenFlag) {
        this.queryChildrenFlag = queryChildrenFlag;
    }
    public String getId() {
        return this.id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getType() {
        return this.type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public List<String> getClauseList() {
        return this.clauseList;
    }
    public void setClauseList(List<String> clauseList) {
        this.clauseList = clauseList;
    }
    public ConditionDTO getCondition() {
        return this.condition;
    }
    public void setCondition(ConditionDTO condition) {
        this.condition = condition;
    }
    public int getVersion() {
        return this.version;
    }
    public void setVersion(int version) {
        this.version = version;
    }
    public String getDirection() {
        return this.direction;
    }
    public void setDirection(String direction) {
        this.direction = direction;
    }
    public PageInfo getPageInfo() {
        return this.pageInfo;
    }
    public void setPageInfo(PageInfo pageInfo) {
        this.pageInfo = pageInfo;
    }
    public List<OrderInfo> getOrderInfoList() {
        return this.orderInfoList;
    }
    public void setOrderInfoList(List<OrderInfo> orderInfoList) {
        this.orderInfoList = orderInfoList;
    }
    public int getLevel() {
        return this.level;
    }
    public void setLevel(int level) {
        this.level = level;
    }
    public int getRecReturnMode() {
        return this.recReturnMode;
    }
    public void setRecReturnMode(int recReturnMode) {
        this.recReturnMode = recReturnMode;
    }
    public boolean isQueryISLeaf() {
        return this.queryISLeaf;
    }
    public void setQueryISLeaf(boolean queryISLeaf) {
        this.queryISLeaf = queryISLeaf;
    }
    public boolean isRightFlag() {
        return this.rightFlag;
    }
    public void setRightFlag(boolean rightFlag) {
        this.rightFlag = rightFlag;
    }
    public boolean isSecretFlag() {
        return this.secretFlag;
    }
    public void setSecretFlag(boolean secretFlag) {
        this.secretFlag = secretFlag;
    }
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/RoleRightDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,123 @@
package com.vci.dto;
import java.io.Serializable;
import java.util.Date;
/**
 * UI权限
 * @author xiej
 * @date 2024-09-05
 */
public class RoleRightDTO implements Serializable {
    private static final long serialVersionUID = 2956142041726150499L;
    /**
     * ID
     */
    private String id = "";
    /**
     *角色ID
     */
    private String roleId = "";
    /**
     * æ¨¡å—ID
     */
    private String funcId = "";
    /**
     * æƒé™å€¼
     */
    private long rightValue = -1;
    /**
     * æƒé™ç±»åž‹ï¼Œè¶…级管理员给管理员授权为1,管理员给普通用户授权为2
     */
    private short rightType = -1;
    /**新增数据创建者,修改者,创建时间,修改时间,授权者***/
    private String createUser = "";
    private Date createTime = new Date();
    private String licensor = "";
    private String modifyUser = "";
    private Date modifyTime = new Date();
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getRoleId() {
        return roleId;
    }
    public void setRoleId(String roleId) {
        this.roleId = roleId;
    }
    public String getFuncId() {
        return funcId;
    }
    public void setFuncId(String funcId) {
        this.funcId = funcId;
    }
    public long getRightValue() {
        return rightValue;
    }
    public void setRightValue(long rightValue) {
        this.rightValue = rightValue;
    }
    public short getRightType() {
        return rightType;
    }
    public void setRightType(short rightType) {
        this.rightType = rightType;
    }
    public String getCreateUser() {
        return createUser;
    }
    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getLicensor() {
        return licensor;
    }
    public void setLicensor(String licensor) {
        this.licensor = licensor;
    }
    public String getModifyUser() {
        return modifyUser;
    }
    public void setModifyUser(String modifyUser) {
        this.modifyUser = modifyUser;
    }
    public Date getModifyTime() {
        return modifyTime;
    }
    public void setModifyTime(Date modifyTime) {
        this.modifyTime = modifyTime;
    }
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/UIAuthorDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
package com.vci.dto;
import com.vci.starter.web.pagemodel.Tree;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
 * æŽˆæƒå¯¹è±¡
 * @author xiej
 * @date 2024-09-05
 */
public class UIAuthorDTO implements Serializable {
    private static final long serialVersionUID = -1996329568646378902L;
    /**
     *角色ID
     */
    private String roleId;
    /**
     *业务类型
     */
    private String type;
    /**
     *上下文
     */
    private String context;
    /**
     * æŽˆæƒçš„节点
     */
    List<Tree> selectTreeList;
    public String getRoleId() {
        return roleId;
    }
    public void setRoleId(String roleId) {
        this.roleId = roleId;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getContext() {
        return context;
    }
    public void setContext(String context) {
        this.context = context;
    }
    public List<Tree> getSelectTreeList() {
        return selectTreeList;
    }
    public void setSelectTreeList(List<Tree> selectTreeList) {
        this.selectTreeList = selectTreeList;
    }
    @Override
    public String toString() {
        return "UIAuthorDTO{" +
                "roleId='" + roleId + '\'' +
                ", type='" + type + '\'' +
                ", context='" + context + '\'' +
                ", selectTreeList=" + selectTreeList +
                '}';
    }
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/PRMItemDO.java
@@ -127,7 +127,10 @@
     * æžšä¸¾å€¼
     */
    private List<String> itemValueList = null;
    /***
     * æžšä¸¾å€¼é›†åˆ
     */
    private List<KeyValue> itemKeyValueList=new ArrayList<>();
    /**
     *一级参照
     */
@@ -664,6 +667,15 @@
    public void setItemDateFormat(String itemDateFormat) {
        this.itemDateFormat = itemDateFormat;
    }
    public List<KeyValue> getItemKeyValueList() {
        return itemKeyValueList;
    }
    public void setItemKeyValueList(List<KeyValue> itemKeyValueList) {
        this.itemKeyValueList = itemKeyValueList;
    }
    @Override
    public String toString() {
        return "PRMItemDO{" +
@@ -693,6 +705,7 @@
                ", itemScript='" + itemScript + '\'' +
                ", itemTips='" + itemTips + '\'' +
                ", itemValueList=" + itemValueList +
                ", itemKeyValueList=" + itemKeyValueList +
                ", itemListTable='" + itemListTable + '\'' +
                ", itemListTxt='" + itemListTxt + '\'' +
                ", itemListVal='" + itemListVal + '\'' +
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/model/RoleRightDO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,142 @@
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;
import java.io.Serializable;
import java.util.Date;
/**
 * UI权限
 * @author xiej
 * @date 2024-09-05
 */
@VciBtmType(name = "UIAuthor",text = "UI权限",tableName = "PLROLERIGHT",lifeCycle = FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE)
@Transient
public class RoleRightDO implements Serializable {
    private static final long serialVersionUID = -5073244242126466800L;
    /**
     * ID
     */
    private String id = "";
    /**
     *角色ID
     */
    private String roleId = "";
    /**
     * æ¨¡å—ID
     */
    private String funcId = "";
    /**
     * æƒé™å€¼
     */
    private long rightValue = -1;
    /**
     * æƒé™ç±»åž‹ï¼Œè¶…级管理员给管理员授权为1,管理员给普通用户授权为2
     */
    private short rightType = -1;
    /**新增数据创建者,修改者,创建时间,修改时间,授权者***/
    private String createUser = "";
    private Date createTime = new Date();
    private String licensor = "";
    private String modifyUser = "";
    private Date modifyTime = new Date();
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getRoleId() {
        return roleId;
    }
    public void setRoleId(String roleId) {
        this.roleId = roleId;
    }
    public String getFuncId() {
        return funcId;
    }
    public void setFuncId(String funcId) {
        this.funcId = funcId;
    }
    public long getRightValue() {
        return rightValue;
    }
    public void setRightValue(long rightValue) {
        this.rightValue = rightValue;
    }
    public short getRightType() {
        return rightType;
    }
    public void setRightType(short rightType) {
        this.rightType = rightType;
    }
    public String getCreateUser() {
        return createUser;
    }
    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getLicensor() {
        return licensor;
    }
    public void setLicensor(String licensor) {
        this.licensor = licensor;
    }
    public String getModifyUser() {
        return modifyUser;
    }
    public void setModifyUser(String modifyUser) {
        this.modifyUser = modifyUser;
    }
    public Date getModifyTime() {
        return modifyTime;
    }
    public void setModifyTime(Date modifyTime) {
        this.modifyTime = modifyTime;
    }
    @Override
    public String toString() {
        return "RoleRightDTO{" +
                "id='" + id + '\'' +
                ", roleId='" + roleId + '\'' +
                ", funcId='" + funcId + '\'' +
                ", rightValue=" + rightValue +
                ", rightType=" + rightType +
                ", createUser='" + createUser + '\'' +
                ", createTime=" + createTime +
                ", licensor='" + licensor + '\'' +
                ", modifyUser='" + modifyUser + '\'' +
                ", modifyTime=" + modifyTime +
                '}';
    }
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/MenuVO.java
@@ -3,6 +3,7 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -27,7 +28,7 @@
    /**
     * å­å­™èŠ‚ç‚¹
     */
    private List<MenuVO> children;
    private List<MenuVO> children = new ArrayList<>();
    /**
     * æ˜¯å¦æœ‰å­å­™èŠ‚ç‚¹
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/PRMItemVO.java
@@ -144,7 +144,10 @@
     * æžšä¸¾å€¼
     */
    private List<String> itemValueList = null;
    /***
     * æžšä¸¾å€¼é›†åˆ
     */
    private List<KeyValue> itemKeyValueList=new ArrayList<>();
    /**
     *一级参照
@@ -633,6 +636,14 @@
        this.itemSearchFieldList = itemSearchFieldList;
    }
    public List<KeyValue> getItemKeyValueList() {
        return itemKeyValueList;
    }
    public void setItemKeyValueList(List<KeyValue> itemKeyValueList) {
        this.itemKeyValueList = itemKeyValueList;
    }
    @Override
    public String toString() {
        return "PRMItemVO{" +
@@ -667,6 +678,7 @@
                ", itemScript='" + itemScript + '\'' +
                ", itemTips='" + itemTips + '\'' +
                ", itemValueList=" + itemValueList +
                ", itemKeyValueList=" + itemKeyValueList +
                ", itemListTable='" + itemListTable + '\'' +
                ", itemListTxt='" + itemListTxt + '\'' +
                ", itemListVal='" + itemListVal + '\'' +
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/RoleRightVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,137 @@
package com.vci.pagemodel;
import java.io.Serializable;
import java.util.Date;
public class RoleRightVO implements Serializable {
    private static final long serialVersionUID = 2030418807220108229L;
    /**
     * ID
     */
    private String id = "";
    /**
     *角色ID
     */
    private String roleId = "";
    /**
     * æ¨¡å—ID
     */
    private String funcId = "";
    /**
     * æƒé™å€¼
     */
    private long rightValue = -1;
    /**
     * æƒé™ç±»åž‹ï¼Œè¶…级管理员给管理员授权为1,管理员给普通用户授权为2
     */
    private short rightType = -1;
    /**
     * æƒé™ç±»åž‹
     */
    private String rigthTypeText="";
    /**新增数据创建者,修改者,创建时间,修改时间,授权者***/
    private String createUser = "";
    private String createTime = "";
    private String licensor = "";
    private String modifyUser = "";
    private String modifyTime ="";
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getRoleId() {
        return roleId;
    }
    public void setRoleId(String roleId) {
        this.roleId = roleId;
    }
    public String getFuncId() {
        return funcId;
    }
    public void setFuncId(String funcId) {
        this.funcId = funcId;
    }
    public long getRightValue() {
        return rightValue;
    }
    public void setRightValue(long rightValue) {
        this.rightValue = rightValue;
    }
    public short getRightType() {
        return rightType;
    }
    public void setRightType(short rightType) {
        this.rightType = rightType;
    }
    public String getCreateUser() {
        return createUser;
    }
    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }
    public String getCreateTime() {
        return createTime;
    }
    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }
    public String getLicensor() {
        return licensor;
    }
    public void setLicensor(String licensor) {
        this.licensor = licensor;
    }
    public String getModifyUser() {
        return modifyUser;
    }
    public void setModifyUser(String modifyUser) {
        this.modifyUser = modifyUser;
    }
    public String getModifyTime() {
        return modifyTime;
    }
    public void setModifyTime(String modifyTime) {
        this.modifyTime = modifyTime;
    }
    @Override
    public String toString() {
        return "RoleRightVO{" +
                "id='" + id + '\'' +
                ", roleId='" + roleId + '\'' +
                ", funcId='" + funcId + '\'' +
                ", rightValue=" + rightValue +
                ", rightType=" + rightType +
                ", createUser='" + createUser + '\'' +
                ", createTime=" + createTime +
                ", licensor='" + licensor + '\'' +
                ", modifyUser='" + modifyUser + '\'' +
                ", modifyTime=" + modifyTime +
                '}';
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmFunctionQueryServicePlatformImpl.java
@@ -508,78 +508,47 @@
        return functionVOList.stream().sorted(Comparator.comparing(s -> s.getSort())).collect(Collectors.toList());
    }
    public List<MenuVO> findChildAuthFunctionVO(String parentId,MenuVO functionVO) throws PLException {
//        List<FunctionInfo> menus = map.get(parentOid);
    public void findChildAuthFunctionVO(MenuVO functionVO, boolean isAll) throws PLException {
        //0表示没有模块也没有操作,1表示有模块,2表示有操作
        long l = platformClientUtil.getFrameworkService().checkChildObject(parentId);
//        funcObj.setFuncType(funcType);
//
//        if(funcType == 1){
//            FunctionObject[] funcObjs = new FunctionClientDelegate().getModuleListByParentId(funcObj.getId(),false);
//            for(int i=0;i<funcObjs.length;i++){
//                VCIBaseTreeNode curNode  = new VCIBaseTreeNode(funcObjs[i].getName(), funcObjs[i]);
//                treeModel.insertNodeInto(curNode, node,node.getChildCount());
//                setChildNode(curNode,funcObjs[i]);
//            }
//        }else if(funcType == 2){
//            FuncOperationObject[] funcOperateObjs = new FuncOperationClientDelegate().getFuncOperationByModuleId(funcObj.getId(), "", true);
//            for (int j = 0; j < funcOperateObjs.length; j++) {
//                VCIBaseTreeNode childNode = new VCIBaseTreeNode(funcOperateObjs[j].getOperAlias(),funcOperateObjs[j]);
//                UserObject user = rightManagementClient.fetchUserInfoByName(PLTApplication.getUserEntityObject().getUserName());
////                    if(user.getUserType() == 0 || childNode.toString().equals("查看")){
////                        treeModel.insertNodeInto(childNode, node,node.getChildCount());
////                        childNode.setLeaf(true);
////                    }else{
////                        boolean res = initRoleRightByType(childNode);
////                        if(res){
//                treeModel.insertNodeInto(childNode, node,node.getChildCount());
//                childNode.setLeaf(true);
////                        }
////                    }
//            }
//        }else{
//            functionVO.setHasChildren(false);
//        }
//
//
//
//
//
//        int funcType = funcDel.checkChildObject(funcObj.getId());
//        funcObj.setFuncType(funcType);
//
//
        List<MenuVO> functionVOList = new ArrayList<>();
//        if(menus == null){
//            return functionVOList;
//        }
//        for (FunctionInfo menu : menus) {
//            if(!menu.isValid){
//                continue;
//            }
//            MenuVO functionVO = new MenuVO();
//            functionVO.setId(menu.id);
//            functionVO.setSource(menu.image);
////            if(StringUtils.isBlank(menu.resourceB) ){
////                continue;
////            }
//            functionVO.setPath(menu.resourceB);
//            functionVO.setCode(menu.aliasName);
//            functionVO.setAlias(menu.aliasName);
//            functionVO.setParentId(menu.parentId);
//            functionVO.setName(menu.name);
//            functionVO.getMeta().put("keepAlive",false);
//            functionVO.setSort((int) menu.seq);
//            functionVO.setChildren(findChildAuthFunctionVO(menu.id,functionVO));
//            if(functionVO.getChildren().size() > 0){
//                functionVO.setHasChildren(true);
//            }else {
//                functionVO.setHasChildren(false);
//            }
//            functionVOList.add(functionVO);
//        }
        return functionVOList.stream().sorted(Comparator.comparing(s -> s.getSort())).collect(Collectors.toList());
        long type = platformClientUtil.getFrameworkService().checkChildObject(functionVO.getId());
        if(type == 1){
            FunctionInfo[] funcObjs = platformClientUtil.getFrameworkService().getModuleListByParentId(functionVO.getId(), isAll);
            for (FunctionInfo funcObj : funcObjs) {
                MenuVO menuVO = new MenuVO();
                menuVO.setId(funcObj.id);
                menuVO.setSource(funcObj.image);
                menuVO.setPath(funcObj.resourceB);
                menuVO.setCode(funcObj.aliasName);
                menuVO.setAlias(funcObj.aliasName);
                menuVO.setParentId(funcObj.parentId);
                menuVO.setChildType((int) type);
                menuVO.setName(funcObj.name);
                menuVO.getMeta().put("keepAlive",false);
                menuVO.setSort((int) funcObj.seq);
                findChildAuthFunctionVO(menuVO, isAll);
                functionVO.getChildren().add(menuVO);
            }
        }else if(type == 2){
            FuncOperationInfo[] infos = platformClientUtil.getFrameworkService().getFuncOperationByModule(functionVO.getId(), "", true);
            for (FuncOperationInfo info : infos) {
                MenuVO menuVO = new MenuVO();
                menuVO.setChildType((int) type);
                menuVO.setId(info.id);
                menuVO.setFuncId(info.funcId);
                menuVO.setCode(info.operIndentify);
                menuVO.setOperId(info.operId);
                menuVO.setName(info.operName);
                menuVO.setAlias(info.operAlias);
                menuVO.setRemark(info.operDesc);
                menuVO.setSort((int) info.number);
                menuVO.setModeType("FunctionObject");
                menuVO.setIsValid(info.isValid);
                menuVO.setHasChildren(false);
                functionVO.getChildren().add(menuVO);
            }
        }else{
            functionVO.setHasChildren(false);
        }
    }
    @Override
@@ -943,9 +912,9 @@
    @Override
    public List<MenuVO> getSysModelAuthTreeMenuByPID(String parentId,String modeType,boolean isAll) throws VciBaseException, PLException {
        List<MenuVO> menuVOList = new ArrayList<>();
        if(Func.isBlank(parentId)){
            return menuVOList;
        }
//        if(Func.isBlank(parentId)){
//            return menuVOList;
//        }
        SessionInfo sessionInfo = WebUtil.getCurrentUserSessionInfoNotException();
        boolean adminOrDeveloperOrRoot = rightControlUtil.isAdminOrDeveloperOrRoot(sessionInfo.getUserId());
        if (adminOrDeveloperOrRoot) {
@@ -974,6 +943,7 @@
            functionVO.setName(menu.name);
            functionVO.getMeta().put("keepAlive",false);
            functionVO.setSort((int) menu.seq);
            findChildAuthFunctionVO(functionVO, isAll);
//            try {
//                functionVO.setChildren(findChildAuthFunctionVO(menu.id));
//            } catch (PLException e) {
@@ -989,58 +959,58 @@
            }
            functionVOList.add(functionVO);
        }
        return functionVOList;
        RoleRightInfo[] userRoleRights = rightControlUtil.getRoleRightByUserName(sessionInfo.getUserId());
        Map<String, List<FunctionInfo>> map = rightControlUtil.getAllChildrenFunctionsByUserName(
                parentId, sessionInfo.getUserId(), userRoleRights);
        if(Func.isEmpty(map.get(parentId))) {
            return functionVOList;
        }
        for (FunctionInfo menu : map.get(parentId)) {
            if(!menu.isValid){
                continue;
            }
            MenuVO functionVO = new MenuVO();
            functionVO.setId(menu.id);
            functionVO.setSource(menu.image);
            //if(StringUtils.isBlank(menu.resourceB)){
            //    continue;
            //}
            functionVO.setPath(menu.resourceB);
            functionVO.setParentId(menu.parentId);
            functionVO.setCode(menu.aliasName);
            functionVO.setAlias(menu.aliasName);
            functionVO.setName(menu.name);
            functionVO.getMeta().put("keepAlive",false);
            functionVO.setSort((int) menu.seq);
//            try {
//                functionVO.setChildren(findChildAuthFunctionVO(menu.id, map));
//            } catch (PLException e) {
//                e.printStackTrace();
//                String errorMsg = "菜单查询时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
//                logger.error(errorMsg);
//                throw new VciBaseException(errorMsg);
//        RoleRightInfo[] userRoleRights = rightControlUtil.getRoleRightByUserName(sessionInfo.getUserId());
//        Map<String, List<FunctionInfo>> map = rightControlUtil.getAllChildrenFunctionsByUserName(
//                parentId, sessionInfo.getUserId(), userRoleRights);
//
//        if(Func.isEmpty(map.get(parentId))) {
//            return functionVOList;
//        }
//        for (FunctionInfo menu : map.get(parentId)) {
//            if(!menu.isValid){
//                continue;
//            }
            if(functionVO.getChildren().size() > 0){
                functionVO.setHasChildren(true);
            }else {
                functionVO.setHasChildren(false);
            }
            functionVOList.add(functionVO);
        }
        //如果是开发或者测试用户,需哟获取系统模块配置菜单
        if(adminOrDeveloperOrRoot){
            //获取首页系统模块配置菜单
            MenuVO menuVO = JsonConfigReader.getSysModuleConf().getSysModuleNode();
            if(Func.isNotEmpty(menuVO)){
                functionVOList.add(menuVO);
            }
        }
        return functionVOList.stream().sorted(Comparator.comparing(s -> s.getSort())).collect(Collectors.toList());
//            MenuVO functionVO = new MenuVO();
//            functionVO.setId(menu.id);
//            functionVO.setSource(menu.image);
//            //if(StringUtils.isBlank(menu.resourceB)){
//            //    continue;
//            //}
//            functionVO.setPath(menu.resourceB);
//            functionVO.setParentId(menu.parentId);
//            functionVO.setCode(menu.aliasName);
//            functionVO.setAlias(menu.aliasName);
//            functionVO.setName(menu.name);
//            functionVO.getMeta().put("keepAlive",false);
//            functionVO.setSort((int) menu.seq);
////            try {
////                functionVO.setChildren(findChildAuthFunctionVO(menu.id, map));
////            } catch (PLException e) {
////                e.printStackTrace();
////                String errorMsg = "菜单查询时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
////                logger.error(errorMsg);
////                throw new VciBaseException(errorMsg);
////            }
//            if(functionVO.getChildren().size() > 0){
//                functionVO.setHasChildren(true);
//            }else {
//                functionVO.setHasChildren(false);
//            }
//            functionVOList.add(functionVO);
//        }
//        //如果是开发或者测试用户,需哟获取系统模块配置菜单
//        if(adminOrDeveloperOrRoot){
//            //获取首页系统模块配置菜单
//            MenuVO menuVO = JsonConfigReader.getSysModuleConf().getSysModuleNode();
//            if(Func.isNotEmpty(menuVO)){
//                functionVOList.add(menuVO);
//            }
//        }
//        return functionVOList.stream().sorted(Comparator.comparing(s -> s.getSort())).collect(Collectors.toList());
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/HMSysModConfigController.java
@@ -72,6 +72,25 @@
        }
    }
    /**
     * èŽ·å–å½“å‰æ¨¡å—ä¸‹çš„å­æ¨¡å—
     * @param parentId
     * @param modeType
     * @return
     */
    @GetMapping("/getSysModelAuthTreeMenuByPID")
    public BaseResult<List<MenuVO>> getSysModelAuthTreeMenuByPID(String parentId, String modeType) {
        try {
            return BaseResult.dataList(functionQueryService.getSysModelAuthTreeMenuByPID(parentId,modeType,true));
        }catch (Exception e){
            e.printStackTrace();
            String errorMsg = "查询子模块时出现错误,原因:"+ VciBaseUtil.getExceptionMessage(e);
            logger.error(errorMsg);
            throw new VciBaseException(errorMsg);
        }
    }
    /**
     * æ·»åŠ æ¨¡å—
     * @param menuVO
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsQueryTemplateController.java
@@ -62,6 +62,7 @@
     * æŸ¥è¯¢æ¨¡æ¿çš„列表添加了字段的相关属性
     * @param btmName ç±»åž‹
     * @param linkFlag æ˜¯å¦é“¾æŽ¥ç±»åž‹ ï¼štrue é“¾æŽ¥ç±»åž‹ ï¼Œfalse ä¸šåŠ¡ç±»åž‹
     * @param direction æ­£åæ–¹å‘
     * @return æŸ¥è¯¢æ¨¡æ¿çš„列表
     */
    @GetMapping("/queryTemplateListByAttr")
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/UIManagerController.java
@@ -3,9 +3,10 @@
import com.vci.corba.common.PLException;
import com.vci.corba.portal.data.PLTabPage;
import com.vci.corba.portal.data.PLUILayout;
import com.vci.dto.OsBtmTypeDTO;
import com.vci.dto.RoleRightDTO;
import com.vci.dto.UIAuthorDTO;
import com.vci.starter.web.pagemodel.Tree;
import com.vci.pagemodel.PLUILayoutCloneVO;
import com.vci.starter.web.annotation.controller.VciUnCheckRight;
import com.vci.starter.web.annotation.log.VciBusinessLog;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.BaseQueryObject;
@@ -21,7 +22,6 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
/**
@@ -266,4 +266,39 @@
        }
    }
    /**
     * æ ¹æ®è§’色获取UI/表单/按钮的权限.
     * @param baseQueryObject
     * @return
     */
    @GetMapping( "/getUIAuthor")
    @VciBusinessLog(operateName = "UI授权(树形结构)")
    public BaseResult getUIAuthor(BaseQueryObject baseQueryObject){
        try {
            return BaseResult.dataList( uiManagerService.getUIAuthor(baseQueryObject));
        }catch (Throwable e) {
            e.printStackTrace();
            String exceptionMessage = "UI授权加载出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
            logger.error(exceptionMessage);
            return BaseResult.fail(exceptionMessage);
        }
    }
    /***
     * @param selectTreeList å‹¾é€‰çš„需要保存的数据对象
     * @return
     */
    @PostMapping( "/authorizedUI")
    @VciBusinessLog(operateName = "UI授权")
    public BaseResult authorizedUI(UIAuthorDTO uiAuthorDTO){
        try {
            return uiManagerService.authorizedUI(uiAuthorDTO)?BaseResult.success("授权成功!"):BaseResult.fail("授权失败!");
        }catch (Throwable e) {
            e.printStackTrace();
            String exceptionMessage = "UI授权出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
            logger.error(exceptionMessage);
            return BaseResult.fail(exceptionMessage);
        }
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java
@@ -32,10 +32,11 @@
import java.util.List;
/**
 * å…¬å¼æŽ§åˆ¶å™¨
 * è¡¨å•/表格控制器
 * @author weidy
 * @date 2022-2-11
 */
@VciBusinessLog(modelName="表单/表格控制器",notStore=true)
@RestController
@RequestMapping("/portalVIController")
public class WebPortalVIController {
@@ -95,7 +96,7 @@
    }
    /**
     * ä¸šåŠ¡ç±»åž‹åˆ é™¤
     * è¡¨å•/table删除
     * btmTypeDTO ä¸šåŠ¡ç±»åž‹å¯¹è±¡
     * @return åˆ é™¤ç»“æžœ
     */
@@ -112,7 +113,7 @@
        }
    }
    /**
     * ä¸šåŠ¡ç±»åž‹åˆ é™¤
     * è¡¨å•/table删除
     * btmTypeDTO ä¸šåŠ¡ç±»åž‹å¯¹è±¡
     * @return åˆ é™¤ç»“æžœ
     */
@@ -128,8 +129,11 @@
            return BaseResult.fail(exceptionMessage);
        }
    }
    /**
     *
     * è¡¨å•/table克隆
     * @param portalVIDTOList clong对象
     * @return
     */
    @PostMapping("/clone")
    @VciBusinessLog(operateName = "克隆表单/表格")
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsQuereyTemplateServiceI.java
@@ -157,6 +157,7 @@
     * æŸ¥è¯¢æ¨¡æ¿çš„列表添加了字段的相关属性
     * @param btmName ç±»åž‹
     * @param linkFlag æ˜¯å¦é“¾æŽ¥ç±»åž‹ ï¼štrue é“¾æŽ¥ç±»åž‹ ï¼Œfalse ä¸šåŠ¡ç±»åž‹
     * @param direction æ­£åæ–¹å‘
     * @return æŸ¥è¯¢æ¨¡æ¿çš„列表
     */
    BaseResult queryTemplateListByAttr(String btmName, Boolean linkFlag, String direction) throws PLException;
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/UIManagerServiceI.java
@@ -1,17 +1,20 @@
package com.vci.web.service;
import com.vci.corba.common.PLException;
import com.vci.corba.portal.data.PLUILayout;
import com.vci.corba.portal.data.PLPageDefination;
import com.vci.corba.portal.data.PLTabPage;
import com.vci.corba.portal.data.PLUILayout;
import com.vci.model.PLDefination;
import com.vci.pagemodel.PLDefinationVO;
import com.vci.pagemodel.PLUILayoutCloneVO;
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.dto.RoleRightDTO;
import com.vci.dto.UIAuthorDTO;
import com.vci.starter.web.pagemodel.Tree;
import com.vci.model.PLDefination;
import com.vci.pagemodel.PLDefinationVO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@@ -139,4 +142,22 @@
    //配置按钮相关接口
    /**
     * èŽ·å–UI权限树
     * @param baseQueryObject
     * @return
     * @throws VciBaseException
     */
    List<Tree> getUIAuthor(BaseQueryObject baseQueryObject)throws Exception;
    /***
     * UI授权
     * @param uiAuthorDTO
     * @return
     * @throws Exception
     */
    public boolean authorizedUI(UIAuthorDTO uiAuthorDTO)throws Exception;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java
@@ -168,6 +168,9 @@
        }
        PortalVIVO portalVIVO=new PortalVIVO();
        PortalVI portalVI=  platformClientUtil.getPortalService().getPortalVIById(id);
        if(portalVI==null||StringUtils.isBlank(portalVI.id)){
            throw new VciBaseException("根据主键未查询到数据");
        }
        portalVIVO=portalVIDOO2VO(portalVI);
        return portalVIVO;
    }
@@ -640,7 +643,7 @@
        boolean flag = false;
        String labelName=PortalVIType.Form.getName();
        try {
            VciBaseUtil.alertNotNull(portalVIDTO.getViName(),"名称不能为空!");
            VciBaseUtil.alertNotNull(portalVIDTO.getViName(),"名称");
            if(portalVIDTO.getPrm()==null||portalVIDTO.getPrm().getPrmItemList()==null||portalVIDTO.getPrm().getPrmItemList().size()==0){
                throw  new Throwable(labelName+",未设置");
            }
@@ -985,6 +988,15 @@
        prmItemDO.setItemHttpPathField(prmItemDTO.getItemHttpPathField());
        if(viType==PortalVIType.Table.getIntVal()) {//如果是表格
            initTableConfigDTOO2DOData(prmItemDO,prmItemDTO);
        }else{
            List<String> itemValueList=new ArrayList<>();
            List<KeyValue> keyValueList=prmItemDTO.getItemKeyValueList();
            Optional.ofNullable(keyValueList).orElseGet(()->new ArrayList<>()).stream().forEach(keyValue -> {
              String value=  keyValue.getValue()+"{"+keyValue.getKey()+"}";
                itemValueList.add(value);
            });
            prmItemDO.setItemValueList(itemValueList);
        }
        return prmItemDO;
    }
@@ -1049,8 +1061,20 @@
        prmItemVO.setItemIsHttpSave(prmItemDO.getItemIsHttpSave());
        prmItemVO.setItemHttpVolumnPath(prmItemDO.getItemHttpVolumnPath());
        prmItemVO.setItemHttpPathField(prmItemDO.getItemHttpPathField());
        if(viType==PortalVIType.Table.getIntVal()) {//如果是表格
            initTableConfigDOO2VOData(prmItemVO,prmItemDO);
        }else{
          List<String> enumList=  prmItemDO.getItemValueList();
          List<KeyValue>itemKeyValueList=new ArrayList<>();
            Optional.ofNullable(enumList).orElseGet(()->new ArrayList<>()).stream().forEach(enumValue->{
             List<String> keyValueList=  VciBaseUtil.str2List(VciBaseUtil.removeComma(enumValue,"}"),"\\{");
                KeyValue keyValue=new KeyValue();
                keyValue.setKey(keyValueList.get(1));
                keyValue.setValue(keyValueList.get(0));
                itemKeyValueList.add(keyValue);
            });
            prmItemVO.setItemKeyValueList(itemKeyValueList);
        }
        return prmItemVO;
    }
@@ -1117,6 +1141,17 @@
        prmItemDTO.setItemHttpPathField(prmItemDO.getItemHttpPathField());
        if(viType==PortalVIType.Table.getIntVal()) {//如果是表格
            initTableConfigDOO2VOData(prmItemDTO,prmItemDO);
        }else{
            List<String> enumList=  prmItemDO.getItemValueList();
            List<KeyValue>itemKeyValueList=new ArrayList<>();
            Optional.ofNullable(enumList).orElseGet(()->new ArrayList<>()).stream().forEach(enumValue->{
                List<String> keyValueList=  VciBaseUtil.str2List(VciBaseUtil.removeComma(enumValue,"}"),"\\{");
                KeyValue keyValue=new KeyValue();
                keyValue.setKey(keyValueList.get(1));
                keyValue.setValue(keyValueList.get(0));
                itemKeyValueList.add(keyValue);
            });
            prmItemDTO.setItemKeyValueList(itemKeyValueList);
        }
        return prmItemDTO;
    }
@@ -1258,7 +1293,6 @@
    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){
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsQueryTemplateImpl.java
@@ -16,9 +16,7 @@
import com.vci.corba.omd.ltm.LinkType;
import com.vci.corba.omd.qtm.QTD;
import com.vci.corba.omd.qtm.QTInfo;
import com.vci.dto.AttributeDefDTO;
import com.vci.dto.QTDDTO;
import com.vci.dto.QTInfoDTO;
import com.vci.dto.*;
import com.vci.omd.constants.SystemAttribute;
import com.vci.omd.objects.OtherInfo;
import com.vci.po.OsLinkTypePO;
@@ -196,6 +194,9 @@
        VciBaseUtil.alertNotNull(btName,"类型名");
        QTInfo[] objTypeQTs = platformClientUtil.getQTDService().getObjTypeQTs(btName);
        List<QTInfoDTO> dtos = new ArrayList<>();
        Map<String, AttributeDef> allSysAttr = Arrays.stream(platformClientUtil.getBtmService().getSysAttributeDefs()).collect(Collectors.toMap(e -> e.name, e -> e));
        allSysAttr.putAll(Arrays.stream(platformClientUtil.getLinkTypeService().getSysAttributeDefs()).collect(Collectors.toMap(e -> e.name, e -> e)));
        for (QTInfo obj : objTypeQTs) {
            QTInfoDTO qtInfoDTO = new QTInfoDTO();
            qtInfoDTO.setCreator(obj.creator);
@@ -206,13 +207,84 @@
            qtInfoDTO.setQtUIText(obj.qtUIText);
            if(StringUtils.isNotBlank(obj.qtUIText)){
                //将给定的String文本解析为XML文档并返回新创建的document
                qtInfoDTO.setTree(analysisXml(obj));
                qtInfoDTO.setTree(analysisXml(obj, allSysAttr));
            }
            qtInfoDTO.setQueryTemplate(OQTool.getQTByDoc(DocumentHelper.parseText(obj.qtText), obj.qtName));
            QueryTemplate qtByDoc = OQTool.getQTByDoc(DocumentHelper.parseText(obj.qtText), obj.qtName);
            qtInfoDTO.setQueryTemplate(queryTemplateToDto(qtByDoc, allSysAttr));
            qtInfoDTO.setCreateTimeText(DateFormatUtils.format(new Date(obj.createTime), DateUtil.PATTERN_DATETIME));
            dtos.add(qtInfoDTO);
        }
        return BaseResult.dataList(dtos);
    }
    /**
     * å¯¹è±¡è½¬æ¢
     * @param qtByDoc æ¨¡æ¿å¯¹è±¡
     * @param allSysAttr æ‰€æœ‰ç³»ç»Ÿå±žæ€§
     * @return æ¨¡æ¿ä¼ è¾“对象
     * @throws PLException
     */
    private QueryTemplateDTO queryTemplateToDto(QueryTemplate qtByDoc, Map<String, AttributeDef> allSysAttr) throws PLException {
        QueryTemplateDTO dto = new QueryTemplateDTO();
        dto.setId(qtByDoc.getId());
        dto.setBtmType(qtByDoc.getBtmType());
        dto.setDirection(qtByDoc.getDirection());
        dto.setLevel(qtByDoc.getLevel());
        dto.setQueryChildrenFlag(qtByDoc.isQueryChildren());
        dto.setQueryISLeaf(qtByDoc.isQueryISLeaf());
        dto.setClauseList(qtByDoc.getClauseList());
        dto.setPageInfo(qtByDoc.getPageInfo());
        dto.setLinkType(qtByDoc.getLinkType());
        dto.setVersion(qtByDoc.getVersion());
        dto.setType(qtByDoc.getType());
        dto.setSecretFlag(qtByDoc.isSecretFlag());
        dto.setRightFlag(qtByDoc.isRightFlag());
        dto.setOrderInfoList(qtByDoc.getOrderInfoList());
        dto.setRecReturnMode(qtByDoc.getRecReturnMode());
        Condition con = qtByDoc.getCondition();
        if(con != null){
            ConditionDTO conDto = new ConditionDTO();
            conDto.setRootCIName(con.getRootCIName());
            Map<String, ConditionItem> ciMap = con.getCIMap();
            Map<String, ConditionItemDTO> ciMapDto = new HashMap<>();
            for (String key : ciMap.keySet()) {
                ConditionItem item = ciMap.get(key);
                LeafInfo leafInfo = item.getLeafInfo();
                ConditionItemDTO itemDTO = new ConditionItemDTO();
                itemDTO.setChildrenInfo(item.getChildrenInfo());
                itemDTO.setId(item.getId());
                itemDTO.setLeafFlag(item.isLeaf());
                ciMapDto.put(key, itemDTO);
                if(leafInfo == null){
                    continue;
                }
                LeafInfoDTO leafInfoDTO = new LeafInfoDTO();
                itemDTO.setLeafInfo(leafInfoDTO);
                //处理查询字段类型
                String column = leafInfo.getClause();
                if(column.contains(".")){
                    column = StringUtils.substringAfterLast(column, ".");
                }
                AttributeDef att = platformClientUtil.getAttributeService().getAttributeDefByName(column);
                if(att == null || "".equals(att.oid)){
                    att = allSysAttr.get(column.toLowerCase());
                }
                leafInfoDTO.setClause(leafInfo.getClause());
                leafInfoDTO.setOperator(leafInfo.getOperator());
                leafInfoDTO.setType(att.vtDataType);
                if(leafInfo.getValue() != null ){
                    LeafValueDto valueDto = new LeafValueDto();
                    valueDto.setOrdinaryValue(leafInfo.getValue().getOrdinaryValue());
                    valueDto.setQueryTemplate(leafInfo.getValue().getQueryTemplate() != null ? queryTemplateToDto(leafInfo.getValue().getQueryTemplate(),allSysAttr) : null);
                    leafInfoDTO.setValue(valueDto);
                }
            }
            conDto.setCIMap(ciMapDto);
            dto.setCondition(conDto);
        }
        return dto;
    }
    /**
@@ -221,14 +293,13 @@
     * @return
     * @throws DocumentException
     */
    private HashMap<String,Object> analysisXml(QTInfo obj) throws DocumentException {
    private HashMap<String,Object> analysisXml(QTInfo obj, Map<String, AttributeDef> allSysAttr) throws DocumentException, PLException {
        org.dom4j.Document document = DocumentHelper.parseText(obj.qtUIText);
        if(document == null){
            return null;
        }
        //获取根节点,在例子中就是responsedata节点
        Element root = document.getRootElement();
        List<HashMap<String,Object>> treeList = new ArrayList<>();
        HashMap<String,Object> treeMap = new HashMap<>();
        treeMap.put("connector",root.getText());
        List<Element> children = root.elements();
@@ -236,9 +307,20 @@
        for(Iterator<Element> i = children.iterator(); i.hasNext();){
            Element child = i.next();
            if(AND.equals(child.getText()) || OR.equals(child.getText())){
                childList.add(addDefaultMutableTree(child));
                childList.add(addDefaultMutableTree(child, allSysAttr));
            }else {
                childList.add(child.getText().trim());
                String column = StringUtils.substringBefore(child.getText().trim(), " ");
                if(column.contains(".")){
                    column = StringUtils.substringAfterLast(column, ".");
                }
                AttributeDef att = platformClientUtil.getAttributeService().getAttributeDefByName(column);
                if(att == null || "".equals(att.oid)){
                    att = allSysAttr.get(column.toLowerCase());
                }
                HashMap<String, String> data = new HashMap<>();
                data.put("column",child.getText().trim());
                data.put("type",att.vtDataType);
            }
        }
        treeMap.put("child",childList);
@@ -249,7 +331,7 @@
     * å°†å­èŠ‚ç‚¹è½¬ä¸ºmap结构
     * @param element
     */
    public Map<String, Object> addDefaultMutableTree(Element element){
    public Map<String, Object> addDefaultMutableTree(Element element, Map<String, AttributeDef> allSysAttr) throws PLException {
        List<Object> childList = new ArrayList<>();
        List<Element> children = element.elements();
        HashMap<String,Object> treeMap = new HashMap<>();
@@ -257,9 +339,21 @@
        for(Iterator<Element> i = children.iterator(); i.hasNext();){
            Element child = i.next();
            if(AND.equals(child.getText()) || OR.equals(child.getText())){
                childList.add(addDefaultMutableTree(child));
                childList.add(addDefaultMutableTree(child, allSysAttr));
            }else {
                childList.add(child.getText().trim());
                String column = StringUtils.substringBefore(child.getText().trim(), " ");
                if(column.contains(".")){
                    column = StringUtils.substringAfterLast(column, ".");
                }
                AttributeDef att = platformClientUtil.getAttributeService().getAttributeDefByName(column);
                if(att == null || "".equals(att.oid)){
                    att = allSysAttr.get(column.toLowerCase());
                }
                HashMap<String, String> data = new HashMap<>();
                data.put("column",child.getText().trim());
                data.put("type",att.vtDataType);
                childList.add(data);
            }
        }
        treeMap.put("child",childList);
@@ -1571,51 +1665,27 @@
        tree.put("children", childList);
        return BaseResult.success(tree);
    }
    /**
     * æŸ¥è¯¢æ¨¡æ¿çš„列表添加了字段的相关属性
     * @param btmName ç±»åž‹
     * @param linkFlag æ˜¯å¦é“¾æŽ¥ç±»åž‹ ï¼štrue é“¾æŽ¥ç±»åž‹ ï¼Œfalse ä¸šåŠ¡ç±»åž‹
     * @param direction æ­£åæ–¹å‘
     * @return æŸ¥è¯¢æ¨¡æ¿çš„列表
     */
    @Override
    public BaseResult queryTemplateListByAttr(String btmName, Boolean linkFlag, String direction) throws PLException {
        //返回的界面下拉框显示树
        List<QTDDTO> qtddtos = new ArrayList<>();
        //将链接类型与业务类型的所有默认字段查询出来放到map里面方便后续调用
        Map<String, AttributeDef> allSysAttr = Arrays.stream(platformClientUtil.getBtmService().getSysAttributeDefs()).collect(Collectors.toMap(e -> e.name, e -> e));
//        if(linkFlag){
//            QTD[] qtdArray = platformClientUtil.getQTDService().getLinkTypeQTDs(btmName);
//            for (QTD qtd : qtdArray) {
//                QTDDTO qtddto = new QTDDTO();
//                qtddto.setName(qtd.name);
//                qtddto.setCreateTime(qtd.createTime);
//                qtddto.setLinkTypeName(qtd.linkTypeName);
//                qtddto.setBtmName(qtd.btmName);
//                qtddto.setCreator(qtd.creator);
//                for (String abName : qtd.abNames) {
//                    AttributeDef att = platformClientUtil.getAttributeService().getAttributeDefByName(abName);
//                    AttributeDefDTO attrDto = new AttributeDefDTO();
//                    attrDto.setDescription(att.description);
//                    attrDto.setLabel(att.label);
//                    attrDto.setOid(att.oid);
//                    attrDto.setCreator(att.creator);
//                    attrDto.setName(att.name);
//                    attrDto.setDefValue(att.defValue);
//                    attrDto.setRage(att.rage);
//                    attrDto.setVtDataType(att.vtDataType);
//                    attrDto.setOther(att.other);
//                    qtddto.getAttrs().add(attrDto);
//                }
//                qtddtos.add(qtddto);
//            }
//
//        }else {
//            Map<String, AttributeDef> lSysAttr = Arrays.stream(platformClientUtil.getLinkTypeService().getSysAttributeDefs()).collect(Collectors.toMap(e -> e.name, e -> e));
        allSysAttr.putAll(Arrays.stream(platformClientUtil.getLinkTypeService().getSysAttributeDefs()).collect(Collectors.toMap(e -> e.name, e -> e)));
        QTD[] qtdArray = null;
        //查询相关类型的查询模板进行处理
        if(linkFlag){
            qtdArray = platformClientUtil.getQTDService().getLinkTypeQTDs(btmName);
        }else {
            qtdArray = platformClientUtil.getQTDService().getBizTypeQTDs(btmName);
        }
//        QTD[]
        for (QTD qtd : qtdArray) {
            QTDDTO qtddto = new QTDDTO();
            qtddto.setName(qtd.name);
@@ -1625,13 +1695,20 @@
            qtddto.setCreator(qtd.creator);
            for (String abName : qtd.abNames) {
                AttributeDef att = platformClientUtil.getAttributeService().getAttributeDefByName(abName);
                //如果在属性接口中没有查到相关字段应该就在默认字段中
                if(att == null || "".equals(att.oid)){
                    att = allSysAttr.get(abName.toLowerCase());
                }
                if(direction != null) {
                    if (direction.equals(QTConstants.DIRECTION_POSITIVE)) {
                        if(att == null ){
                            throw new PLException("500",new String[]{"属性字段:"+ abName +"未查询到,请确认!"});
                        }
                        att.name = "T_OID." + abName;
                    } else if (direction.equals(QTConstants.DIRECTION_OPPOSITE)) {
                        if(att == null ){
                            throw new PLException("500",new String[]{"属性字段:"+ abName +"未查询到,请确认!"});
                        }
                        att.name = "F_OID." + abName;
                    }
                }else{
@@ -1653,9 +1730,14 @@
            }
            qtddtos.add(qtddto);
        }
//        }
        return BaseResult.dataList(Arrays.asList(qtddtos));
        return BaseResult.dataList(qtddtos);
    }
    /**
     * å­èŠ‚ç‚¹å¤„ç†
     * @param attributeDefByName çˆ¶èŠ‚ç‚¹çš„å±žæ€§ä¿¡æ¯
     * @param allSysAttr æ‰€æœ‰é»˜è®¤å­—段
     */
    private void addNode(AttributeDefDTO attributeDefByName, Map<String, AttributeDef> allSysAttr){
        if(attributeDefByName.getLayersNum() >= 3){
@@ -1666,7 +1748,6 @@
        if(abName.contains(".")){
            abName = abName.substring(abName.lastIndexOf(".") + 1);
        }
//        qtddto.getAttrs().add(attributeDefByName);
        if(SystemAttribute.sysAttList().contains(abName.toUpperCase())){
            return;
        }
@@ -1706,10 +1787,7 @@
                        addNode(attrDto, allSysAttr);
                    }
                    //系统属性ID,NAME,DESCRIPTION
//                    AttributeDef[] sysAttributeDefs = platformClientUtil.getBtmService().getSysAttributeDefs();
//                    for (int i = 0; i < sysAttributeDefs.length; i++) {
                    for (int i = 0; i < SystemAttribute.bosysAttList().size(); i++) {
//                        addNode(node,  new DefaultMutableTreeNode(pName + SystemAttribute.bosysAttList().get(i)));
                        AttributeDef attributeDef = allSysAttr.get(SystemAttribute.bosysAttList().get(i).toLowerCase());
                        AttributeDefDTO attrDto = new AttributeDefDTO();
                        attrDto.setDescription(attributeDef.description);
@@ -1743,7 +1821,6 @@
                        String[] abNames = link.attributes;
                        for(int i = 0; i < abNames.length; i++){
                            String abName_ = abNames[i];
//                            DefaultMutableTreeNode node_ = new DefaultMutableTreeNode(pName + abName_);
                            AttributeDef att = platformClientUtil.getAttributeService().getAttributeDefByName(abName_);
                            if(att == null || att.oid.equals("")){
                                att = allSysAttr.get(abName_.toLowerCase());
@@ -1764,11 +1841,6 @@
                        }
                        //系统属性ID,NAME,DESCRIPTION
                        for (int i = 0; i < SystemAttribute.losysAttList().size(); i++) {
//                            addNode(node,  new DefaultMutableTreeNode(pName + SystemAttribute.losysAttList().get(i)));
//                        }
//                        AttributeDef[] sysAttributeDefs = platformClientUtil.getLinkTypeService().getSysAttributeDefs();
//                        for (int i = 0; i < sysAttributeDefs.length; i++) {
//                        addNode(node,  new DefaultMutableTreeNode(pName + SystemAttribute.bosysAttList().get(i)));
                            AttributeDef sysAttributeDefs = allSysAttr.get(SystemAttribute.losysAttList().get(i).toLowerCase());
                            AttributeDefDTO attrDto = new AttributeDefDTO();
                            attrDto.setDescription(sysAttributeDefs.description);
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
@@ -1,22 +1,36 @@
package com.vci.web.service.impl;
import com.sun.jnlp.ApiDialog;
import com.vci.client.mw.ClientContextVariable;
import com.vci.common.qt.object.QTConstants;
import com.vci.common.utility.ObjectUtility;
import com.vci.corba.common.PLException;
import com.vci.corba.framework.data.RoleRightInfo;
import com.vci.corba.omd.btm.BizType;
import com.vci.corba.portal.PortalService;
import com.vci.corba.portal.data.*;
import com.vci.dto.RoleRightDTO;
import com.vci.dto.UIAuthorDTO;
import com.vci.frameworkcore.compatibility.SmRoleQueryServiceI;
import com.vci.pagemodel.OsBtmTypeVO;
import com.vci.model.PLDefination;
import com.vci.pagemodel.PLDefinationVO;
import com.vci.pagemodel.PLUILayoutCloneVO;
import com.vci.pagemodel.RoleRightVO;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.*;
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.pagemodel.SessionInfo;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.starter.web.util.VciDateUtil;
import com.vci.starter.web.util.WebThreadLocalUtil;
import com.vci.web.service.OsBtmServiceI;
import com.vci.web.service.UIManagerServiceI;
import com.vci.web.util.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import com.vci.web.util.Func;
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.UITools;
@@ -32,6 +46,9 @@
import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -49,6 +66,18 @@
     */
    @Resource
    private PlatformClientUtil platformClientUtil;
    /**
     * è§’色
     */
    @Resource
    private SmRoleQueryServiceI smRoleQueryServiceI;
    /**
     * ä¸šåŠ¡ç±»åž‹
     */
    @Resource
    private OsBtmServiceI osBtmServiceI;
    /**
     * æ—¥å¿—
@@ -95,6 +124,37 @@
        List<PLUILayout> pluiLayouts = Arrays.asList(res);
        dataGrid.setData(pluiLayouts);
        return dataGrid;
    }
    /**
     * ton通过业务类型和名称查询
     * @param btemName
     * @param context
     * @return
     * @throws PLException
     */
    public List<PLUILayout> getUIContextDataByBtName(String btemName,String context) throws PLException {
        VciBaseUtil.alertNotNull(btemName,"业务类型");
        List<PLUILayout> pluiLayoutList=new ArrayList<>();
        List<String> contextList= VciBaseUtil.str2List(context);
        if(StringUtils.isNotBlank(context)){
            contextList=VciBaseUtil.str2List(context);
        }else{
            contextList.add("");
        }
        contextList.stream().forEach(code->{
            PLUILayout[]  pluiLayouts= new PLUILayout[0];
            try {
                pluiLayouts = platformClientUtil.getUIService().getPLUILayoutEntityByTypeAndCode(btemName,code);
            } catch (PLException e) {
                e.printStackTrace();
            }
            if(pluiLayouts!=null&&pluiLayouts.length>0) {
                pluiLayoutList.addAll(Arrays.stream(pluiLayouts).collect(Collectors.toList()));
            }
        });
        return pluiLayoutList;
    }
    /**
@@ -726,6 +786,282 @@
    }
    /**
     * èŽ·å–UI授权树
     * @param treeQueryObject
     * @return
     * @throws Exception
     */
    @Override
    public List<Tree> getUIAuthor(BaseQueryObject treeQueryObject) throws Exception {
        Map<String, String> conditionMap = treeQueryObject.getConditionMap();
        if (conditionMap == null) {
            conditionMap = new HashMap<>();
        }
        String roleId = StringUtils.isBlank(conditionMap.get("roleId")) ? "" : conditionMap.get("roleId");
        String type = StringUtils.isBlank(conditionMap.get("type")) ? "" : conditionMap.get("type");
        String context = StringUtils.isBlank(conditionMap.get("context")) ? "" : conditionMap.get("context");
        boolean showCheckBox = Boolean.parseBoolean(conditionMap.get("showCheckBox"));
       Map<String,RoleRightVO> roleRightVOMap=new HashMap<>();
        if(StringUtils.isNotBlank(roleId)){
          String userName= WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
            RoleRightInfo[] rightInfos= platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName);
            List<RoleRightVO>  roleRightVOList=roleRightDOO2VOS(Arrays.asList(rightInfos));
            roleRightVOMap=roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVO));
        }
        BizType[] bizTypes=osBtmServiceI.getBizTypes(type);
        List<Tree> treeList=new ArrayList<>();
        Tree   rootNode =new Tree("root","功能模块","root");
        rootNode.setLevel(0);
        rootNode.setShowCheckbox(true);
        rootNode.setExpanded(true);
        List<Tree> childList=new ArrayList<>();
        for (int i = 0; i < bizTypes.length; i++) {
            Tree bizTypeTree = new Tree(bizTypes[i].oid,bizTypes[i].name,bizTypes[i]);//(btmItems[i].label+" ["+ btmItems[i].name+"]", btmItems[i]);
            bizTypeTree.setLevel(1);
            bizTypeTree.setShowCheckbox(true);
            bizTypeTree.setParentId(rootNode.getOid());
            bizTypeTree.setParentName(rootNode.getText());
            bizTypeTree.setShowCheckbox(true);
            bizTypeTree.setParentBtmName(bizTypes[i].name);
            childList.add(bizTypeTree);
            if(roleRightVOMap.containsKey(bizTypes[i].oid)){
                List<PLUILayout>contextList=getUIContextDataByBtName(bizTypes[i].name,context);
                List<Tree> btmChildList=new ArrayList<>();
                btmChildList.add(bizTypeTree);
                setChildNode(btmChildList,contextList,roleRightVOMap,showCheckBox);
            }
        }
        rootNode.setChildren(childList);
        treeList.add(rootNode);
        return treeList;
    }
    @Override
    public boolean authorizedUI(UIAuthorDTO uiAuthorDTO) throws Exception {
        boolean res=false;
        if(uiAuthorDTO==null||CollectionUtil.isEmpty(uiAuthorDTO.getSelectTreeList())){
            throw  new VciBaseException("请选择节点进行授权!");
        }
        BaseQueryObject treeQueryObject=new BaseQueryObject();
        Map<String,String> conditionMap = new HashMap<>();
        conditionMap.put("roleId",uiAuthorDTO.getRoleId());
        conditionMap.put("type",uiAuthorDTO.getType());
        conditionMap.put("context",uiAuthorDTO.getContext());
        conditionMap.put("showCheckBox","true");
        treeQueryObject.setConditionMap(conditionMap);
        List<Tree> treeList=this.getUIAuthor(treeQueryObject);
        HashMap<String,Tree> allTreeMap=new HashMap<>();
        if(!CollectionUtil.isEmpty(treeList)){
            convertTreeDOO2Map(treeList,allTreeMap);
            List<RoleRightDTO> roleRightDTOList=new ArrayList<>();
            List<Tree>  selectTreeList= uiAuthorDTO.getSelectTreeList();
            getRoleRightDTOS(uiAuthorDTO.getRoleId(),selectTreeList,allTreeMap,roleRightDTOList);
        }
        return res;
    }
    private void getRoleRightDTOS(String roleOid,List<Tree>  selectTreeList,HashMap<String,Tree> allTreeMap,  List<RoleRightDTO> roleRightDTOList){
        selectTreeList.stream().forEach(tree -> {
            RoleRightDTO roleRightDTO=new RoleRightDTO();
            String id=ObjectUtility.getNewObjectID36();
            Object data=  tree.getData();
            if (data instanceof BizType) {//业务类型
                BizType bizType=(BizType)data;
                roleRightDTO.setId(id);//主键
                roleRightDTO.setCreateUser(null);//创建者
                roleRightDTO.setCreateTime(null);//创建时间
                roleRightDTO.setModifyUser(null);//修改者
                roleRightDTO.setModifyTime(null);//修改时间
                roleRightDTO.setRoleId(roleOid);//角色ID
                roleRightDTO.setRightValue(1);// æƒé™å€¼
                roleRightDTO.setRightType((short) -1);//权限类型 æƒé™ç±»åž‹ï¼Œè¶…级管理员给管理员授权为1,管理员给普通用户授权为2
                roleRightDTO.setFuncId(null);
                roleRightDTO.setLicensor(null);
            }else  if (data instanceof PLUILayout){//UI
            }else if (data instanceof PLTabPage) {//UI上下文
            }else if (data instanceof PLPageDefination) {//
            }else if (data instanceof PLTabButton) {//按钮
            }
        });
    }
    /**
     *
     * @param treeList æ ‘节点
     * @param allTreeMap,所有的节点
     */
    private void convertTreeDOO2Map(List<Tree> treeList,Map<String,Tree> allTreeMap){
        Optional.ofNullable(treeList).orElseGet(()->new ArrayList<Tree>()).stream().forEach(tree -> {
            List<Tree> childTreeList= tree.getChildren();
            allTreeMap.put(tree.getOid(),tree);
            if(!CollectionUtil.isEmpty(childTreeList)){
                convertTreeDOO2Map(childTreeList,allTreeMap);
            }
        });
    }
    private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String,RoleRightVO> roleRightVOMap,boolean isShowCheckBox){
        Optional.ofNullable(parentTree).orElseGet(()->new ArrayList<Tree>()).stream().forEach(pTree -> {
            Object funcObj=  pTree.getData();
            List<Tree> chiledTreeList=new ArrayList<>();
            if (funcObj instanceof BizType) {//业务类型
                BizType bizType = (BizType) funcObj;
                if(!CollectionUtil.isEmpty(contextList)) {
                    contextList.stream().forEach(context->{
                        Tree childTree=new Tree(context.plOId,context.plName+"("+context.plCode+")",context);
                        childTree.setParentName(pTree.getText());
                        childTree.setParentBtmName(pTree.getParentBtmName());
                        childTree.setParentId(pTree.getOid());
                        childTree.setLevel(pTree.getLevel()+1);
                        childTree.setShowCheckbox(isShowCheckBox);
                        chiledTreeList.add(childTree);
                    });
                    pTree.setChildren(chiledTreeList);
                }
                if(!CollectionUtil.isEmpty(chiledTreeList)) {
                    setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox);
                }
            }else  if (funcObj instanceof PLUILayout){//UI
                PLUILayout context = (PLUILayout) funcObj;
                PLTabPage[] pages = new PLTabPage[0];
                try {
                    pages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(context.plOId);
                } catch (PLException e) {
                    e.printStackTrace();
                }
                if(pages!=null&&pages.length>0){
                    List<PLTabPage> plTabPageList= Arrays.stream(pages).collect(Collectors.toList());
                    plTabPageList.stream().forEach(plTabPage -> {
                        Tree childTree=new Tree(plTabPage.plOId,plTabPage.plName,plTabPage);
                        childTree.setParentName(pTree.getText());
                        childTree.setParentId(pTree.getOid());
                        childTree.setParentBtmName(pTree.getParentBtmName());
                        childTree.setLevel(pTree.getLevel()+1);
                        childTree.setShowCheckbox(isShowCheckBox);
                        chiledTreeList.add(childTree);
                    });
                    pTree.setChildren(chiledTreeList);
                }
                if(!CollectionUtil.isEmpty(chiledTreeList)) {
                    setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox);
                }
            }else if (funcObj instanceof PLTabPage) {//上下文
                PLTabPage plTabPage = (PLTabPage) funcObj;
                List<PLPageDefination>plPageDefinationList=new ArrayList<>();
                try {
                    PLPageDefination[] pLPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(plTabPage.plOId);
                    if(pLPageDefinations!=null&&pLPageDefinations.length>0){
                        plPageDefinationList= Arrays.stream(pLPageDefinations).collect(Collectors.toList());
                        plPageDefinationList.stream().forEach(plPageDefination -> {
                            Tree childTree=new Tree(plPageDefination.plOId,plPageDefination.name,plPageDefination);
                            childTree.setParentName(pTree.getText());
                            childTree.setParentId(pTree.getOid());
                            childTree.setParentBtmName(pTree.getParentBtmName());
                            childTree.setLevel(pTree.getLevel()+1);
                            childTree.setShowCheckbox(isShowCheckBox);
                            chiledTreeList.add(childTree);
                        });
                        pTree.setChildren(chiledTreeList);
                    }
                    if(!CollectionUtil.isEmpty(chiledTreeList)) {
                        setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox);
                    }
                } catch (PLException e) {
                    e.printStackTrace();
                }
            }else if (funcObj instanceof PLPageDefination) {//
                PLPageDefination plPageDefination = (PLPageDefination) funcObj;
                try {
                    List<PLTabButton>plTabButtonList=new ArrayList<>();
                    PLTabButton[] pLTabButtons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(plPageDefination.plOId);
                    if(pLTabButtons!=null&&pLTabButtons.length>0){
                        plTabButtonList= Arrays.stream(pLTabButtons).collect(Collectors.toList());
                        plTabButtonList.stream().forEach(plTabButton -> {
                            Tree childTree=new Tree(plTabButton.plOId,plTabButton.plLabel,plTabButton);
                            childTree.setParentName(pTree.getText());
                            childTree.setParentId(pTree.getOid());
                            childTree.setParentBtmName(pTree.getParentBtmName());
                            childTree.setLevel(pTree.getLevel()+1);
                            childTree.setShowCheckbox(isShowCheckBox);
                            childTree.setLeaf(true);
                            chiledTreeList.add(childTree);
                        });
                        pTree.setChildren(chiledTreeList);
                    }
                    if(!CollectionUtil.isEmpty(chiledTreeList)) {
                        setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox);
                    }
                } catch (PLException e) {
                    e.printStackTrace();
                }
            }else if (funcObj instanceof PLTabButton) {//按钮
                PLTabButton plTabButton= (PLTabButton) funcObj;
                String id =plTabButton.plTableOId;
                if(roleRightVOMap.containsKey(id)){
                    RoleRightVO roleRightVO = roleRightVOMap.get(id);
                    Long rightValue =  roleRightVO.getRightValue();
                    int nodeValue = plTabButton.plSeq;
                    if (nodeValue >= 0 && nodeValue <= 63) {
                        long preValue = (rightValue >> nodeValue) & 1;
                        if (preValue == 1) {
                            pTree.setChecked(true);
                        }
                    }
                }else{
                    pTree.setChecked(false);
                }
            }
        });
    }
    /**
     * UI角色对象转换
     * @param infos
     * @return
     */
    private List<RoleRightVO> roleRightDOO2VOS(List<RoleRightInfo> infos){
        List<RoleRightVO> roleRightVOS=new ArrayList<>();
        Optional.ofNullable(infos).orElseGet(()->new ArrayList<>()).stream().forEach(info -> {
            RoleRightVO vo=roleRightDOO2VO(info);
            roleRightVOS.add(vo);
        });
        return roleRightVOS;
    }
    /**
     * UI角色对象转换
     * @param info
     * @return
     */
    private RoleRightVO roleRightDOO2VO(RoleRightInfo info){
        RoleRightVO vo=new RoleRightVO();
        vo.setId(info.id);
        vo.setCreateTime(VciDateUtil.date2Str(VciDateUtil.long2Date(info.createTime),""));
        vo.setCreateUser(info.createUser);
        vo.setRoleId(info.roleId);
        vo.setRightType(info.rightType);
        vo.setLicensor(info.licensor);
        vo.setRightValue(info.rightValue);
        vo.setFuncId(info.funcId);
        vo.setModifyTime(VciDateUtil.date2Str(VciDateUtil.long2Date(info.modifyTime),""));
        vo.setModifyUser(info.modifyUser);
        return vo;
    }
    /**
     * æŽ§åˆ¶åŒºèŠ‚ç‚¹åŠå…¶å­èŠ‚ç‚¹çš„å…‹éš†
     * @param obj
     */
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/tt.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<JD_DATASET>
    <JD_SHOWCOLS>3</JD_SHOWCOLS>
    <JD_FORMQTNAME></JD_FORMQTNAME>
    <JD_ITEM>
        <JD_field></JD_field>
        <JD_or></JD_or>
        <JD_eq></JD_eq>
        <JD_trim></JD_trim>
        <JD_dbl>0</JD_dbl>
        <JD_cut></JD_cut>
        <JD_inObj>assignedpartform</JD_inObj>
        <JD_addFilter>test附加查询条件</JD_addFilter>
        <JD_outType></JD_outType>
        <JD_pageSize>10</JD_pageSize>
        <JD_imgWH>60,</JD_imgWH>
        <JD_outFields>workcontextoid.productnumber,isexpire,partoid.name</JD_outFields>
        <JD_keyFields></JD_keyFields>
        <JD_bat></JD_bat>
        <JD_txf></JD_txf>
        <JD_name></JD_name>
        <JD_type></JD_type>
        <JD_value></JD_value>
        <JD_showExpression></JD_showExpression>
        <JD_dateFormat></JD_dateFormat>
        <JD_cols></JD_cols>
        <JD_rows></JD_rows>
        <JD_style></JD_style>
        <JD_script></JD_script>
        <JD_tips></JD_tips>
        <JD_valuelist></JD_valuelist>
        <JD_listTable></JD_listTable>
        <JD_listTxt></JD_listTxt>
        <JD_listVal></JD_listVal>
        <JD_isEditable></JD_isEditable>
        <JD_EditableProgram></JD_EditableProgram>
        <JD_qtName></JD_qtName>
        <JD_isRequired></JD_isRequired>
        <JD_seniorQueryCols></JD_seniorQueryCols>
        <JD_seniorQueryColsCounts></JD_seniorQueryColsCounts>
        <JD_hrefFields></JD_hrefFields>
        <JD_hrefConf></JD_hrefConf>
        <JD_queryRefFields></JD_queryRefFields>
        <JD_customClass></JD_customClass>
        <JD_ctrlDisplyCol></JD_ctrlDisplyCol>
        <JD_ctrlDisplyCondition></JD_ctrlDisplyCondition>
        <JD_isHttpSave></JD_isHttpSave>
        <JD_httpVolumnPath></JD_httpVolumnPath>
        <JD_httpPathField></JD_httpPathField>
        <JD_editCondition></JD_editCondition>
        <JD_isNavigatorExpand>true</JD_isNavigatorExpand>
        <JD_isShowFolder>true</JD_isShowFolder>
        <JD_parentFolderName>father</JD_parentFolderName>
        <JD_filterColWidth>250</JD_filterColWidth>
        <JD_QuerySql></JD_QuerySql>
        <JD_right></JD_right>
    </JD_ITEM>
</JD_DATASET>
Source/plt-web/plt-web-parent/plt-web/src/main/resources/application-dev.yml
@@ -6,7 +6,7 @@
  private-token-key: vciweb20210212
###tomcat相关的配置
server:
  port: 12000
  port: 12005
  servlet:
    context-path: /web
  tomcat:
@@ -42,7 +42,7 @@
    host: localhost  # ip地址
    database: 2  # redis数据库  0-15
    port: 6379  # ç«¯å£å·
    password: 123456 # æ— å¯†ç ä¸å¡«
    password: foobared # æ— å¯†ç ä¸å¡«
    timeout: 30000s   # è¿žæŽ¥è¶…æ—¶æ—¶é—´ ï¼ˆé»˜è®¤1天)
    lettuce:
      shutdown-timeout: 100ms # å…³é—­è¶…æ—¶æ—¶é—´ é»˜è®¤ 100ms
Source/plt-web/plt-web-ui/src/App.vue
@@ -50,6 +50,7 @@
}
.dialog-footer{
  background-color: #ffffff;
  z-index: 10000;
}
.avue-crud .avue-form {
  margin: 0px auto !important; // è¡¨æ ¼å†…的表单(比如:搜索栏) å–消下边距
Source/plt-web/plt-web-ui/src/api/queryTemplate/linkTypeQuery.js
@@ -26,3 +26,33 @@
    params:params
  });
}
// æŸ¥è¯¢æ¡ä»¶çš„æŸ¥è¯¢æŽ¥å£ï¼ŒæŽ¥å£æ–¹å¼POST,参数与保存接口传参一致
export function getCriteria(params) {
  return request({
    url: "/api/templateController/getCriteria",
    method: "post",
    data:params
  });
}
// å¯¼å‡º
export function expLinkTemplate  (params) {
  return request({
    url: '/api/templateController/expLinkTemplate',
    method: 'get',
    //headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},
    responseType: 'blob',
    params
  })
}
// å¯¼å…¥
export function impLinkTemplate  (params) {
  return request({
    url: '/api/templateController/impLinkTemplate',
    method: 'get',
    headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},
    responseType: 'blob',
    params
  })
}
Source/plt-web/plt-web-ui/src/api/queryTemplate/queryDefine.js
@@ -1,6 +1,7 @@
import request from '@/router/axios';
//查询模板定义
// æ¨¡æ¿åˆ—表定义下拉框查询
//btmName: ç±»åž‹å, linkFlag: æ˜¯å¦é“¾æŽ¥ç±»åž‹
export function gridTemplate(params) {
  return request({
    url: "/api/templateController/queryTemplateList",
@@ -11,6 +12,27 @@
  });
}
//链接类型查询模板候选条件
//btmName: é“¾æŽ¥ç±»åž‹å, linkFlag: æ˜¯å¦é“¾æŽ¥ç±»åž‹
//btmName: ä¸šåŠ¡ç±»åž‹å, linkFlag: æ˜¯å¦é“¾æŽ¥ç±»åž‹ï¼Œdirection:正向反向
export function queryTemplateListByAttr(params) {
  return request({
    url: "/api/templateController/queryTemplateListByAttr",
    method: "get",
    params:{
      ...params
    }
  });
}
//获取所有查询模板
export function getAllQTs(page,limit) {
  return request({
    url: "/api/templateController/getAllQTs",
    method: "get"
  });
}
// ä¿®æ”¹
export function updateTemplate(params) {
  return request({
Source/plt-web/plt-web-ui/src/components/PLT-basic-component/upload-file.vue
@@ -125,11 +125,10 @@
    },
    // æ–‡ä»¶ä¸Šä¼ æˆåŠŸ
    onSuccess(resbonse) {
      console.log(resbonse);
      if (resbonse.code === 200) {
        this.$message.success("导入成功!");
        this.visible = false;
        this.$emit('updata');
        this.$emit('updata',resbonse);
      } else {
        this.$message.error(resbonse.msg);
      }
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/formDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,514 @@
<template>
  <el-dialog v-dialogDrag
             :title="dialog.title"
             :visible.sync="dialog.showDialog"
             width="1620px"
             :append-to-body="true"
             class="avue-dialog"
             :destroy-on-close="true"
             :close-on-click-modal="false"
             @close="cancelDialog">
    <div style="min-height: 665px;max-height: 85vh;padding-bottom: 50px;">
      <basic-form key="linkQueryForm" style="margin-bottom: 0"
                  ref="form"
                  :span="4"
                  :formItems="formItems"
                  :formData="form"
                  @getFormData="getFormData">
      </basic-form>
      <avue-crud  ref="crud" title="设置排序"
                  :data="orderInfoList" :option="crudOption">
        <template slot="menuLeft" slot-scope="scope">
          <el-button icon="el-icon-plus" size="small" type="primary" @click="addRow">创建</el-button>
        </template>
        <template slot="menu" slot-scope="scope">
          <el-button icon="el-icon-delete" size="small" type="text" @click="rowDeleteHandler(scope)">删除
          </el-button>
        </template>
      </avue-crud>
      <el-dialog v-dialogDrag
                 title="创建"
                 :visible.sync="crudDialog.showDialog"
                 width="500px"
                 :append-to-body="true"
                 class="avue-dialog"
                 :destroy-on-close="true"
                 :close-on-click-modal="false"
                 @close="crudDialog.showDialog=false">
        <avue-form ref="tableForm" :option="tableFormOption" v-model="tableForm"></avue-form>
        <div class="dialog-footer avue-dialog__footer">
          <el-button type="primary" plain size="small" @click="rowSave" >保 å­˜</el-button>
        </div>
      </el-dialog>
      <el-container style="margin-top: 10px;">
        <el-aside style="width:350px">
          <fieldset>
            <legend>&nbsp;链接类型候选条件&nbsp;</legend>
            <div>
              æŸ¥è¯¢æ¨¡æ¿å®šä¹‰
              <avue-select @change="linkQueryDefineChange" class="el-input--small" v-model="linkQueryDefineForm" placeholder="请选择内容" type="tree" :dic="linkQueryDefineDic" style="width:240px"></avue-select>
              <avue-tree style="height: 265px" :data="linkTreeData" :option="treeOption"  @node-drag-start="handleDragStart">
              </avue-tree>
            </div>
          </fieldset>
        </el-aside>
        <el-main>
          <fieldset style="margin: 0 10px">
            <legend>&nbsp;查询条件&nbsp;</legend>
            <form-query-dialog ref="formQuery"
                               style="height: 300px;"
                               :queryCondition="queryCondition"
                               :queryTree="queryTree"
                               :levelFlag.sync="form.levelFlag"
            ></form-query-dialog>
          </fieldset>
        </el-main>
        <el-aside style="width:350px">
          <fieldset>
            <legend>&nbsp;业务类型候选条件&nbsp;</legend>
            <div>
              æŸ¥è¯¢æ¨¡æ¿å®šä¹‰
              <avue-select @change="businessQueryDefineChange" class="el-input--small" v-model="businessQueryDefineForm" placeholder="请选择内容" type="tree" :dic="businessQueryDefineDic" style="width: 240px;"></avue-select>
              <avue-tree style="height: 265px" :data="businessTreeData" :option="treeOption"  @node-drag-start="handleDragStart">
              </avue-tree>
            </div>
          </fieldset>
        </el-aside>
      </el-container>
    </div>
    <div class="dialog-footer avue-dialog__footer">
      <el-button type="primary" plain size="small" @click="submitDialog" >保 å­˜</el-button>
      <el-button size="small" @click="cancelDialog">取 æ¶ˆ</el-button>
    </div>
  </el-dialog>
</template>
<script>
import {getAllOrderbyAttributeByLink} from "@/api/modeling/linkType/api";
import {linkSave} from "@/api/queryTemplate/linkTypeQuery";
import basicOption from "@/util/basic-option";
import {queryTemplateListByAttr} from "@/api/queryTemplate/queryDefine";
import formQueryDialog from "./formQueryDialog.vue";
export default {
  name: "formDialog",
  components:{formQueryDialog},
  data(){
    return {
      dialog: {
        showDialog: false,
        title: "创建",
        submitTxt: "保存",
        submitIcon: "el-icon-check",
        loading: false,
        type: "add",
      },
      crudDialog: {
        showDialog: false,
        submitTxt: "保存",
        submitIcon: "el-icon-check",
      },
      formItems:[{
        label: '查询模板名称',
        prop: 'qtName',
        type: 'input',
        span:5,
        rules: [{
          required: true,
          message: "请输入查询模板名称",
          trigger: "blur"
        }]
      }],
      form:{
        btmName:'',
        qtName: '',
        levelFlag:0,//0:普通查询模板; 1:高级查询模板"
        queryTemplate:{}
      },
      //已有排序列表配置
      crudOption: {
        ...basicOption,
        addBtn: false,
        editBtn: false,
        delBtn: false,
        selection: false,
        height: "220",
        tip: false,
        column: [{
          label: '排序字段',
          prop: 'orderField'
        }, {
          label: '排序方式',
          prop: 'orderMode'
        }, {
          label: '优先级',
          prop: 'level'
        }]
      },
      //已有排序
      orderInfoList:[],
      //设置排序弹窗表单数据
      tableForm:{
        orderField:'',
        orderMode:'ASC',
        level:''
      },
      //设置排序弹窗所有可排序字段
      orderFieldList:[],
      //设置排序弹窗表单配置
      tableFormOption: {
        menuBtn: false,
        submitBtn: false,
        emptyBtn: false,
        span:24,
        column: [{
          label: '排序字段',
          prop: 'orderField',
          type:'select',
          props: {
            label: 'id',
            value: 'id'
          },
          rules: [{
            required: true,
            message: "请选择排序字段",
            trigger: "blur"
          }]
        }, {
          label: '排序方式',
          prop: 'orderMode',
          type: 'select',
          dicData: [{
            label: '升序',
            value: 'ASC'
          }, {
            label: '降序',
            value: 'DESC'
          }],
          value: 'ASC'
        }, {
          label: '优先级',
          prop: 'level',
          type: 'number',
          min:1,
          rules: [{
            required: true,
            message: "请输入优先级",
            trigger: "blur"
          }]
        }]
      },
      treeOption:{
        defaultExpandAll:true,
        menu: false,
        addBtn: false,
        filter:false,
        draggable: true,
        allowDrop: () => {
          return false;
        },
        allowDrag: () => {
          return true;
        },
      },
      linkQueryDefineForm:'',//链接类型查询模板定义选中值
      linkQueryDefineDic:[],//链接类型查询模板定义下拉数据
      //链接类型查询模板定义选中项属性
      linkTreeData: [],
      businessQueryDefineForm:'',//业务类型查询模板定义选中值
      businessQueryDefineDic:[],//业务类型查询模板定义下拉数据
      //业务类型查询模板定义选中项属性
      businessTreeData: [],
      //高级查询条件
      queryTree:{},
      //普通查询条件
      queryCondition:[],
    };
  },
  watch: {
    //方向
    'form.direction': {
      handler(val) {
        if(val=='positive'){
          //正向
          const dicData=this.treeData.btmItemsTo.map(item=>{
            return {
              label: item,
              value: item
            }
          })
          dicData.push({
            label: '所有类型',
            value: '*'
          })
          this.$refs.form.updateDic('btmType', dicData);
          this.form.btmType=dicData[0].value
          this.getAllAttr();
        }else if(val=='opposite'){
          //反向
          const dicData=this.treeData.btmItemsFrom.map(item=>{
            return {
              label: item,
              value: item
            }
          })
          dicData.push({
            label: '所有类型',
            value: '*'
          })
          this.$refs.form.updateDic('btmType', dicData);
          this.form.btmType=dicData[0].value
          this.getAllAttr();
        }
      },
      immediate: true,
    },
    //业务类型
    'form.btmType': {
      handler(val) {
        if(val && val!='*'){
          this.getTemp(val,false);
        }
      },
      immediate: true,
    }
  },
  methods: {
    openDialog(btmName, title, mode, data) {
      this.dialog.title = title;
      this.dialog.type = mode;
      this.form.btmName = btmName;
      this.treeData = data.treeData;
      if (data.selectData) {
        this.selectData = data.selectData;
        this.form.qtName = this.selectData.qtName;
        if (data.selectData.queryTemplate.orderInfoList && data.selectData.queryTemplate.orderInfoList.length > 0) {
          this.orderInfoList = JSON.parse(JSON.stringify(data.selectData.queryTemplate.orderInfoList));//已有排序
        }
        this.queryCondition=this.selectData.queryTemplate.condition;
        this.queryTree=this.selectData.tree;
        this.form.levelFlag=this.selectData.levelFlag;
      } else {
        this.selectData = {};
        this.orderInfoList = [];
        this.queryCondition=[];
        this.queryTree={
          connector:'并且',
          child:[]
        };
      }
      this.dialog.showDialog = true;
      this.getTemp(data.treeData.label, true)
    },
    cancelDialog() {
      this.dialog.loading = false;
      this.dialog.showDialog = false;
      this.$nextTick(() => {
        this.form = {
          btmName: '',
          qtName: '',
          levelFlag:0,
          queryTemplate: {}
        };
        this.orderInfoList =[];
        this.businessQueryDefineForm='';
        this.linkQueryDefineForm='';
        this.$refs.form.clearValidate();
      });
    },
    submitDialog() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          const formData=this.initFormData();
          console.log(formData)
          linkSave(formData).then(res => {
            if (res.data.success) {
              this.$message.success("保存成功");
              this.cancelDialog();
              this.$emit("refresh");
            }
          });
        } else {
          return false;
        }
      });
    },
    initFormData() {
      let formData = {
        btmName: this.form.btmName,
        qtName: this.form.qtName,
        levelFlag: this.form.levelFlag,
        queryTemplate: {
          btmType: this.form.btmType,
          clauseList: ['*'],
          id: this.form.qtName,
          level: this.form.level,
          linkType: this.form.btmName,
          orderInfoList: this.orderInfoList,
          recReturnMode: 1,//递归返回数据模式:1:RECRETURNMODE_FLAT, 2:RECRETURNMODE_FILTER
          rightFlag: true,
          secretFlag: true,
          type: 'link',
          version: this.form.version
        }
      }
      if (formData.levelFlag == 1) {
        //高级
        let that = this;
        function initValue(nodeChild) {
          let children = [];
          if (nodeChild) {
            nodeChild.forEach((item, index) => {
              if (item.label != '并且' && item.label != '或者') {
                children.push(item.label);
              } else {
                children.push({
                  connector: item.label,
                  child: initValue(item.children)
                })
              }
            })
          }
          return children;
        }
        let treeData = {
          connector: this.$refs.formQuery.treeData[0].label
        };
        if (this.$refs.formQuery.treeData[0].children) {
          treeData.child = initValue(this.$refs.formQuery.treeData[0].children);
        }
        formData.tree = treeData
      }
      formData.condition = this.$refs.formQuery.conditionList;
      return formData;
    },
    getFormData(form) {
      this.form = form;
    },
    addRow() {
      this.crudDialog.showDialog = true;
    },
    // è¡Œåˆ é™¤
    rowDeleteHandler(data) {
      this.orderInfoList.splice(data.index,1);
      this.orderFieldList.unshift({
        id: data.row.orderField
      });
      this.tableFormOption.column[0].dicData= this.orderFieldList
    },
    //获取排序设置中所有排序字段
    getAllAttr() {
      getAllOrderbyAttributeByLink({
        name: this.treeData.label,
        btmType: this.form.btmType,
        direction: this.form.direction
      }).then(res => {
        const orderInfoStr = JSON.stringify(this.orderInfoList);
        const dicData = [];
        res.data.data.forEach(item => {
          if (orderInfoStr.indexOf('"orderField":"' + item + '"') == -1) {
            dicData.push({id: item});
          }
        })
        this.tableFormOption.column[0].dicData=dicData;
        this.orderFieldList=dicData;
      })
    },
    //排序设置保存
    rowSave() {
      this.$refs.tableForm.validate((valid) => {
        if(valid){
          this.orderInfoList.push(JSON.parse(JSON.stringify(this.tableForm)));
          this.crudDialog.showDialog=false;
          const orderInfoStr = JSON.stringify(this.orderInfoList);
          const dicData = [];
          this.orderFieldList.forEach(item => {
            if (orderInfoStr.indexOf('"orderField":"' + item.id + '"') == -1) {
              dicData.push(item);
            }
          })
          this.tableFormOption.column[0].dicData=dicData;
          this.orderFieldList=dicData;
          this.tableForm= {
            orderField: '',
            orderMode: 'ASC',
            level: ''
          }
        }
      })
    },
    //获取查询模板定义下拉
    getTemp(btmName,linkFlag) {
      if (btmName) {
        queryTemplateListByAttr({btmName: btmName, linkFlag: linkFlag,direction:this.form.direction}).then(res => {
          const data = res.data.data.map(item => {
            item.label = item.name + '-' + (item.linkTypeName || item.btmName);
            item.value = item.name;
            return item;
          });
          if(linkFlag){
            this.linkQueryDefineDic=data
            data.length>0 && (this.linkQueryDefineForm=data[0].value);
          }else {
            this.businessQueryDefineDic=data;
            data.length>0 && (this.businessQueryDefineForm= data[0].value);
          }
        })
      }
    },
    linkQueryDefineChange(data) {
      if (data.value) {
        const childData = data.item.attrs.map(item => {
          return {
            label: item.name,
            value: item.name,
            atttributes:item
          };
        });
        this.linkTreeData = [{
          label: data.value,
          value: data.value,
          children: childData
        }]
      }
    },
    businessQueryDefineChange(data) {
      if (data.value) {
        const childData = data.item.attrs.map(item => {
          return {
            label: item.name,
            value: item.name,
            atttributes:item
          };
        });
        this.businessTreeData = [{
          label: data.value,
          value: data.value,
          children: childData
        }]
      }
    },
    // å¼€å§‹æ‹–拽树节点事件
    handleDragStart(node, ev) {
      // ä½¿ç”¨ setData æ–¹æ³•设置数据
      ev.dataTransfer.setData('item', JSON.stringify(node.data));
    },
  },
}
</script>
<style scoped>
fieldset {
  border-radius: 5px;
  -webkit-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
  padding: 10px 6px;
  box-sizing: border-box;
  margin: 0;
  border: 1px solid #EBEEF5;
}
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/formQueryDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,677 @@
<template>
  <div style="padding: 0 10px">
    <div style="text-align: center;margin-bottom: 10px">
      <avue-radio v-model="radioForm"  :dic="radioDic" style="margin: 0 20px 0 0;display: inline-block"></avue-radio>
      <el-button  plain size="mini" type="primary" @click="clearValue">清空值</el-button>
      <el-button  plain size="mini" type="primary" @click="delAll">删除全部条件</el-button>
    </div>
    <div v-if="radioForm==0" @drop="drop" @dragover.prevent style="height: 220px;text-align: center;">
      <div v-for="(condition,index) in conditionList" :key="index" class="el-input--small" style="margin-bottom: 5px; text-align:left">
        <span style="width: 200px;display: inline-block;text-align: right" :title="condition.clause">{{condition.clause}}</span>
        <avue-select v-model="condition.operator" type="tree" :dic="condition.operatorDic" :clearable="false" style="width: 80px;margin: 0 5px;"></avue-select>
        <el-date-picker v-if="condition.type=='VTDate'" v-model="condition.ordinaryValue" style="width:300px;margin-right: 5px;display: inline-block;" value-format="YYYY-MM-DD"
                        type="date">
        </el-date-picker>
        <el-date-picker v-else-if="condition.type=='VTDateTime'" v-model="condition.ordinaryValue" style="width:300px;margin-right: 5px;display: inline-block;"
                        type="datetime">
        </el-date-picker>
        <el-time-select v-else-if="condition.type=='VTTime'" v-model="condition.ordinaryValue" value-format="HH:mm:ss" style="width:300px;margin-right: 5px;display: inline-block;">
        </el-time-select>
        <avue-input-number v-else-if="condition.type=='VTInteger'" precision="0" v-model="condition.ordinaryValue" style="width:300px;margin-right: 5px;display: inline-block;"></avue-input-number>
        <avue-input-number v-else-if="condition.type=='VTLong' || condition.type=='VTDouble'" v-model="condition.ordinaryValue" style="width:300px;margin-right: 5px;display: inline-block;"></avue-input-number>
        <avue-input v-else v-model="condition.ordinaryValue" placeholder="" style="width: 300px;margin-right: 5px;"></avue-input>
        <el-button  plain size="mini" type="primary" @click="checkTemp(index)">选择查询模板</el-button>
        <el-button  size="mini" type="danger" icon="el-icon-delete" @click="delCondition(index)" style="padding: 7px 8px"></el-button>
      </div>
    </div>
    <div v-else style="height: 220px;text-align: left">
      <avue-tree ref="tree" @node-drop="handleDrop" style="height: 220px" :data="treeData" :option="treeOption"  @node-click="nodeClick" node-key="value"></avue-tree>
    </div>
    <div style="text-align: right;margin-top: 10px;">
      <el-button v-if="radioForm==1"  plain size="mini" type="primary" @click="addHandler">增加逻辑</el-button>
      <el-button v-if="radioForm==1"  plain size="mini" type="primary" @click="editHandler">修改条件</el-button>
      <el-button v-if="radioForm==1"  plain size="mini" type="primary" @click="delHandler">删除</el-button>
      <el-button  plain size="mini" type="primary" @click="queryHandler">查询</el-button>
      <el-button  plain size="mini" type="primary" @click="">取消</el-button>
    </div>
    <el-dialog v-dialogDrag
               :title="dialog.title"
               :visible.sync="dialog.showDialog"
               width="550px"
               :append-to-body="true"
               class="avue-dialog"
               :destroy-on-close="true"
               :close-on-click-modal="false"
               @close="dialog.showDialog=false">
      <div style="height: 200px;">
        {{clickNode.showLabel}}
        <avue-select v-if="['VTInteger','VTDouble','VTLong'].includes(clickNode.type)" v-model="clickNode.operator" type="tree" :dic="operatorIntDic" :clearable="false" style="width: 80px;margin: 0 5px;"></avue-select>
        <avue-select v-else-if="['VTDateTime','VTDate','VTTime'].includes(clickNode.type)" v-model="clickNode.operator" type="tree" :dic="operatorDateDic" :clearable="false" style="width: 80px;margin: 0 5px;"></avue-select>
        <avue-select v-else v-model="clickNode.operator" type="tree" :dic="operatorDic" :clearable="false" style="width: 80px;margin: 0 5px;"></avue-select>
        <el-date-picker v-if="clickNode.type=='VTDate'" v-model="clickNode.inputValue" style="width:300px;display: inline-block;" value-format="YYYY-MM-DD"
          type="date">
        </el-date-picker>
        <el-date-picker v-else-if="clickNode.type=='VTDateTime'" v-model="clickNode.inputValue" style="width:350px;display: inline-block;"
          type="datetime">
        </el-date-picker>
        <el-time-select v-else-if="clickNode.type=='VTTime'" v-model="clickNode.inputValue" value-format="HH:mm:ss" style="width:300px;display: inline-block;">
        </el-time-select>
        <avue-input-number v-else-if="clickNode.type=='VTInteger'" precision="0" v-model="clickNode.inputValue" style="width:300px;display: inline-block;"></avue-input-number>
        <avue-input-number v-else-if="clickNode.type=='VTLong' || clickNode.type=='VTDouble'" v-model="clickNode.inputValue" style="width:300px;display: inline-block;"></avue-input-number>
        <avue-input v-else v-model="clickNode.inputValue" type="textarea" style="width: 300px;margin-right: 5px;vertical-align: top;"></avue-input>
      </div>
      <div class="dialog-footer avue-dialog__footer">
        <el-button size="small" @click="checkTemp" v-if="!['VTInteger','VTDouble','VTLong','VTDateTime','VTDate','VTTime'].includes(clickNode.type)">选择查询模板</el-button>
        <el-button type="primary" plain size="small" @click="submitDialog" >保 å­˜</el-button>
        <el-button size="small" @click="dialog.showDialog=false">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
    <el-dialog v-dialogDrag
               :title="queryDialog.title"
               :visible.sync="queryDialog.showDialog"
               width="800px"
               :append-to-body="true"
               class="avue-dialog"
               :destroy-on-close="true"
               :close-on-click-modal="false"
               @close="cancleQueryDialog">
      <div class="el-input--small">
        è¾“入查询字段:<avue-input v-model="queryField" style="width: 500px;margin-bottom: 10px"></avue-input>
        <avue-crud  ref="crud" :data="crudData" :option="crudOption"
                    :page.sync="page"
                    :table-loading="tableLoading"
                    @selection-change="selectionChange"
                    @row-click="rowClick"
                    @size-change="sizeChange"
                    @current-change="currentChange">
        </avue-crud>
      </div>
      <div class="dialog-footer avue-dialog__footer">
        <el-button type="primary" plain size="small" @click="submitQueryDialog" >ç¡® å®š</el-button>
        <el-button size="small" @click="cancleQueryDialog">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
    <el-dialog v-dialogDrag
               :title="queryResultDialog.title"
               :visible.sync="queryResultDialog.showDialog"
               width="900px"
               :append-to-body="true"
               class="avue-dialog"
               :destroy-on-close="true"
               :close-on-click-modal="false"
               @close="queryResultDialog.showDialog='false'">
      <div class="el-input--small">
        <avue-crud  ref="crud" :data="resultData" :option="resultOption"
                    :table-loading="queryResultDialog.loading">
        </avue-crud>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import basicOption from "@/util/basic-option";
import {getAllQTs} from "@/api/queryTemplate/queryDefine";
import {getCriteria} from "@/api/queryTemplate/linkTypeQuery";
export default {
name: "formQueryDialog",
  props: {
    queryCondition: {
      type: Array,
      default: []
    },
    queryTree: {
      type: Object,
      default: {}
    },
    levelFlag:{
      type: Number,
      default: 0
    }
  },
  data() {
    return {
      dialog: {
        showDialog: false,
        title: "查询条件设置框",
        loading: false
      },
      queryDialog: {
        showDialog: false,
        title: "选择查询模板",
        loading: false
      },
      queryResultDialog: {
        showDialog: false,
        title: "查询结果",
        loading: false
      },
      radioDic: [{
        label: '普通',
        value: 0
      }, {
        label: '高级',
        value: 1
      }],
      conditionList:[],
      treeData:[],
      treeOption:{
        defaultExpandAll:true,
        menu: false,
        addBtn: false,
        filter:false,
        draggable: true,
        allowDrop: (draggingNode, dropNode, type) => {
          debugger;
          if (dropNode.data.label === '并且' || dropNode.data.label === '或者') {
            return true;
          } else {
            this.$message.error('请选中逻辑条件添加查询项');
            return false;
          }
        },
        allowDrag: (draggingNode) => {
          return false;
        },
      },
      page: {
        currentPage: 1,
        pageSize: 10,
        total: 0,
        pageSizes: [10, 30, 50, 100],
      },
      crudData:[],
      crudOption: {
        ...basicOption,
        addBtn: false,
        editBtn: false,
        delBtn: false,
        tip: false,
        header: false,
        height: window.innerHeight-220,
        menu: false,
        column: [{
          label: '查询模板名称',
          prop: 'qtName',
          sortable: true,
        }, {
          label: '链接类型或业务类型',
          prop: 'btmName',
          sortable: true,
        }]
      },
      tableLoading: false,
      selectionRow:[],
      queryField:'',
      resultData:[],
      resultOption: {
        ...basicOption,
        addBtn: false,
        editBtn: false,
        delBtn: false,
        tip: false,
        header: false,
        height: window.innerHeight-220,
        menu: false,
        column: [{
          label: 'OID',
          prop: 'OID',
        }, {
          label: 'CREATOR',
          prop: 'CREATOR'
        }, {
          label: 'CREATETIME',
          prop: 'CREATETIME'
        }]
      },
      clickNode:{},
      operatorIntDic:[{
        label: '=',
        value: '='
      }, {
        label: '!=',
        value: '!='
      }, {
        label: '包含',
        value: '包含'
      }, {
        label: 'in',
        value: 'in'
      }, {
        label: 'not in',
        value: 'not in'
      }, {
        label: '>=',
        value: '>='
      }, {
        label: '>',
        value: '>'
      }, {
        label: '<=',
        value: '<='
      }, {
        label: '<',
        value: '<'
      }],
      operatorDateDic : [{
        label: '=',
        value: '='
      }, {
        label: '!=',
        value: '!='
      }, {
        label: 'in',
        value: 'in'
      }, {
        label: 'not in',
        value: 'not in'
      }, {
        label: '>=',
        value: '>='
      }, {
        label: '<=',
        value: '<='
      }],
      operatorDic : [{
        label: '=',
        value: '='
      }, {
        label: '!=',
        value: '!='
      }, {
        label: '包含',
        value: '包含'
      }, {
        label: 'in',
        value: 'in'
      }, {
        label: 'not in',
        value: 'not in'
      }]
    }
  },
  computed: {
    radioForm:{
      get() {
        return this.levelFlag;
      },
      set(value) {
        this.$emit('update:levelFlag', value);
      }
    }
  },
  watch: {
    queryCondition:{
      handler(val) {
        if(val && val.cIMap){
          let list=[];
          let that=this;
          let getValue =function(queryTemplate,item) {
            for (let key in queryTemplate.condition.cIMap) {
              if (queryTemplate.condition.cIMap[key].leaf) {
                item.clause += '.' + queryTemplate.condition.cIMap[key].leafInfo.clause;
                if (queryTemplate.condition.cIMap[key].leafInfo.value.queryTemplate) {
                  getValue(queryTemplate.condition.cIMap[key].leafInfo.value.queryTemplate, item)
                } else {
                  item.ordinaryValue = queryTemplate.condition.cIMap[key].leafInfo.value.ordinaryValue;
                  item.type=queryTemplate.condition.cIMap[key].leafInfo.type;
                  if(['VTInteger','VTDouble','VTLong'].includes(item.type)){
                    item.operatorDic=that.operatorIntDic;
                  }else if(['VTDateTime','VTDate','VTTime'].includes(item.type)){
                    item.operatorDic=that.operatorDateDic;
                  }else{
                    item.operatorDic=that.operatorDic;
                  }
                }
              }
            }
          }
          for (let key in val.cIMap) {
            if (this.queryCondition.cIMap[key].leaf) {
              let clause=this.queryCondition.cIMap[key].leafInfo.clause;
              let operator= this.queryCondition.cIMap[key].leafInfo.operator;
              let item={
                clause: clause,
                operator: operator,
                ordinaryValue: '',
                operatorDic :[]
              }
              if(this.queryCondition.cIMap[key].leafInfo.value.queryTemplate) {
                getValue(this.queryCondition.cIMap[key].leafInfo.value.queryTemplate, item)
              }else {
                item.ordinaryValue=this.queryCondition.cIMap[key].leafInfo.value.ordinaryValue;
                item.type=this.queryCondition.cIMap[key].leafInfo.type;
                if(['VTInteger','VTDouble','VTLong'].includes(item.type)){
                  item.operatorDic=that.operatorIntDic;
                }else if(['VTDateTime','VTDate','VTTime'].includes(item.type)){
                  item.operatorDic=that.operatorDateDic;
                }else{
                  item.operatorDic=that.operatorDic;
                }
              }
              list.push(item)
            }
          }
          this.conditionList= list;
        }else{
          this.conditionList=[]
        }
      },
      immediate: true,
      deep:true
    },
    queryTree:{
      handler(val) {
        this.treeIndex=0;
        if(val && Object.keys(val).length>0){
          let treeData = [];
          let that=this;
          function initValue(nodeChild) {
            let children=[];
            if(nodeChild){
              nodeChild.forEach((item,index)=>{
                that.treeIndex++;
                if(item.column !=null && item.column != undefined){
                  children.push({
                    label:item.column,
                    value:item.column+that.treeIndex,
                    type:item.type,
                    valueIndex:'v'+that.treeIndex
                  })
                }else {
                  children.push({
                    label:item.connector,
                    value:item.connector+that.treeIndex,
                    valueIndex:'v'+that.treeIndex,
                    children:initValue(item.child)
                  })
                }
              })
            }
            return children;
          }
          const node={
            label:val.connector,
            value:val.connector+this.treeIndex,
            valueIndex:'v'+this.treeIndex,
            children:initValue(val.child)
          }
          treeData.push(node)
          this.treeData = treeData;
        }else {
          this.treeData=[{
            label: '并且',
            value: '并且' + this.treeIndex,
            valueIndex: 'v' + this.treeIndex,
            connector: '并且',
            children: []
          }]
        }
      },
      immediate: true,
      deep:true
    }
  },
  created() {
    this.getTemp();
  },
  methods: {
    // æ‹–拽到时
    drop(event) {
      // ä½¿ç”¨ getData æ–¹æ³•获取数据
      const data = JSON.parse(event.dataTransfer.getData('item'));
      if (this.radioForm == 0) {
        const params = {
          clause: data.value,
          operator: '=',
          ordinaryValue: ''
        }
        if (data.atttributes.vtDataType == 'VTInteger' || data.atttributes.vtDataType == 'VTDouble' || data.atttributes.vtDataType == 'VTLong') {
          params.operatorDic =JSON.parse(JSON.stringify(this.operatorIntDic)) ;
        } else if (data.atttributes.vtDataType == 'VTDateTime' || data.atttributes.vtDataType == 'VTDate' || data.atttributes.vtDataType == 'VTTime') {
          params.operatorDic = JSON.parse(JSON.stringify(this.operatorDateDic))
        } else {
          params.operatorDic = JSON.parse(JSON.stringify(this.operatorDic))
        }
        params.type=data.atttributes.vtDataType;
        this.conditionList.push(params)
      }else {debugger;
        if (this.clickNode.label != '并且' && this.clickNode.label != '或者') {
          this.$message.error('请选中逻辑条件添加查询项');
          return;
        }
        this.treeIndex++;
        this.$refs.tree.append({
          label: data.value,
          value: data.value + this.treeIndex,
          valueIndex: 'v' + this.treeIndex,
          children: []
        }, this.clickNode);
      }
    },
    handleDrop(draggingNode, dropNode, dropType, ev) {
      debugger;
      console.log('tree drop: ', dropNode.label, dropType);
    },
    //删除普通查询条件
    delCondition(index) {
      this.conditionList.splice(index, 1);
    },
    //清空值
    clearValue() {
      if (this.radioForm == 0) {
        this.conditionList.map(item => {
          item.ordinaryValue = '';
          return item;
        })
        this.conditionList = this.conditionList
      } else {
        if(this.treeData[0] && this.treeData[0].children) {
          this.clearTreeValue(this.treeData[0].children)
        }
      }
    },
    clearTreeValue(nodes){
      nodes.forEach((node,index)=>{
        if(node.children){
          this.clearTreeValue(node.children)
        }else {
          let values=node.label.split(' ');
          if(values.length>2){
            node.label=values[0]+' '+values[1];
          }
        }
      })
    },
    //删除全部条件
    delAll() {
      if (this.radioForm == 0) {
        this.conditionList = [];
      } else {
        this.treeIndex = 0;
        this.treeData = [];
        this.clickNode={};
      }
    },
    nodeClick(data) {
      this.clickNode = data
    },
    //树 å¢žåŠ é€»è¾‘æ¡ä»¶
    addHandler() {
      if (Object.keys(this.clickNode).length>0) {
        if (this.clickNode.label == '并且' || this.clickNode.label == '或者') {
          this.treeIndex++;
          this.$refs.tree.append({
            label: '并且',
            value: '并且' + this.treeIndex,
            valueIndex: 'v' + this.treeIndex,
            children: []
          }, this.$refs.tree.getCurrentNode());
        } else {
          this.$message.error("只能对逻辑条件增加逻辑条件");
        }
      } else {
        if(this.treeData.length==0){
          this.treeIndex = 0;
          this.treeData = [{
            label: '并且',
            value: '并且' + this.treeIndex,
            valueIndex: 'v' + this.treeIndex,
            connector: '并且',
            children: []
          }]
        }else {
          this.$message.warning("请选择查询条件");
        }
      }
    },
    //树 ä¿®æ”¹æ¡ä»¶
    editHandler() {
      if (Object.keys(this.clickNode).length>0) {
        if (this.clickNode.label == '并且') {
          this.clickNode.label = '或者'
        } else if (this.clickNode.label == '或者') {
          this.clickNode.label = '并且'
        } else {
          const values= this.clickNode.label.split(' ');
          this.clickNode.inputValue='';
          if(values.length>1){
            this.clickNode.operator=values[1];
            if(values.length>2){
              if(['VTDateTime','VTDate','VTTime'].includes(this.clickNode.type)){
                this.clickNode.inputValue=new Date(values[2]);
              }else {
                this.clickNode.inputValue=values[2];
              }
            }
          }
          if(values[0].indexOf('.')!=-1){
            const labels=values[0].split('.')
            this.clickNode.showLabel=labels[labels.length-1];
          }else {
            this.clickNode.showLabel=values[0];
          }
          this.dialog.showDialog = true;
        }
      } else {
        this.$message.warning("请选择查询条件");
      }
    },
    //树 åˆ é™¤æ¡ä»¶
    delHandler() {
      if (Object.keys(this.clickNode).length>0) {
        this.$confirm('您确定要删除所选择的条件吗?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          this.$refs.tree.remove(this.clickNode);
          this.clickNode = {};
        })
      } else {
        this.$message.warning("请选择查询条件");
      }
    },
    //查询
    queryHandler(){
      this.$parent.$parent.$parent.$parent.$refs.form.validate((valid) => {
        if (valid) {
          this.queryResultDialog.loading=true;
          const formData=this.$parent.$parent.$parent.$parent.initFormData();
          getCriteria(formData).then(res => {
            if (res.data.success) {
              this.resultData=res.data.data;
              this.queryResultDialog.showDialog=true;
              this.queryResultDialog.loading=false;
            }
          });
        } else {
          return false;
        }
      });
    },
    //选择查询模板
    checkTemp(index) {
      if(index>=0){
        if(['VTInteger','VTDouble','VTLong','VTDateTime','VTDate','VTTime'].includes(this.conditionList[index].type)){
          return false;
        }
      }
      this.queryIndex=index;
      this.queryDialog.showDialog=true;
      this.$nextTick(()=>{
        this.$refs.crud.doLayout();
      });
    },
    //查询条件保存
    submitDialog() {
      const values= this.clickNode.label.split(' ');
      this.clickNode.label = values[0]+' '+this.clickNode.operator+' '+this.clickNode.inputValue;
      this.dialog.showDialog = false;
    },
    //获取查询模板列表
    getTemp() {
      getAllQTs(this.page.currentPage, this.page.pageSize).then(res => {
        this.crudData = res.data.data;
        this.tableLoading = false;
      })
    },
    rowClick(row) {
      this.$refs.crud.toggleSelection();
      this.$refs.crud.toggleRowSelection(row); //选中当前行
      this.selectionRow = [row];
    },
    selectionChange(list) {
      this.selectionRow = list;
    },
    selectionClear() {
      this.selectionRow = [];
      this.$refs.crud.toggleSelection();
    },
    //选择查询模板
    submitQueryDialog() {
      if (this.selectionRow.length == 0) {
        this.$message.error('请选择查询模板再进行操作');
        return;
      }
      if (this.queryField == '') {
        this.$message.error('请填写输入查询字段');
        return;
      }
      const value = this.selectionRow[0].qtName + ';' + this.queryField
      if (this.radioForm == 0) {
        //普通
        this.conditionList[this.queryIndex].ordinaryValue = value;
      } else {
        this.clickNode.inputValue = value;
      }
      this.cancleQueryDialog();
    },
    cancleQueryDialog(){
      this.queryDialog.showDialog = false;
      this.selectionClear();
      this.queryField='';
      this.queryIndex=null;
    },
    sizeChange(val) {
      this.page.pageSize = val;
      this.getTemp();
    },
    // é¡µç 
    currentChange(val) {
      this.page.currentPage = val;
      this.getTemp();
    },
  }
}
</script>
<style scoped>
::v-deep .el-input--small .el-input__inner{
  height: 28px;
  line-height: 28px;
}
</style>
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/businessTypeQuery/index.vue
@@ -21,16 +21,19 @@
    <el-main>
      <basic-container>
        <div v-if="this.nodeRow && this.nodeRow.label">
          <el-button icon="el-icon-plus" size="small" type="primary" @click="addHandler">创建</el-button>
          <el-button icon="el-icon-edit" plain size="small" type="primary" @click="editHandler">修改</el-button>
          <el-button icon="el-icon-delete" plain size="small" type="danger" @click="delHandler">删除</el-button>
          <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">导出</el-button>
          <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="upLoadClickHandler">导入</el-button>
        </div>
        <avue-crud  ref="crud"
                    @selection-change="selectionChange"
                    @row-click="rowClick"
                    :data="crudData" :option="crudOption" :table-loading="tableLoading" style="margin-top: 10px">
          <template slot="menuLeft" slot-scope="scope">
            <el-button icon="el-icon-plus" size="small" type="primary" @click="addHandler">创建</el-button>
            <el-button icon="el-icon-edit" plain size="small" type="primary" @click="editHandler">修改</el-button>
            <el-button icon="el-icon-delete" plain size="small" type="danger" @click="delHandler">删除</el-button>
            <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">导出</el-button>
            <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="upLoadClickHandler">导入</el-button>
          </template>
        </avue-crud>
        <form-dialog ref="formRef" @refresh="getTemp"></form-dialog>
      </basic-container>
    </el-main>
@@ -43,8 +46,11 @@
import basicOption from "@/util/basic-option";
import func from "@/util/func";
import {dateFormat} from "@/util/date";
import FormDialog from "./formDialog.vue"
import {deleteLinkTemplate} from "@/api/queryTemplate/linkTypeQuery";
export default {
  name: "index",
  components: {FormDialog},
  data() {
    return {
      treeOption: {
@@ -134,66 +140,41 @@
        this.tableLoading = false;
      })
    },
    selectHandler(selection, row) {
    rowClick(row) {
      this.$refs.crud.toggleSelection();
      this.$refs.crud.toggleRowSelection(row); //选中当前行
      this.selectionRow = [row];
    },
    changeTemp(data) {
      this.$refs.queryCrud.clearSelection();
      if (data.value != '') {
        let abNames = data.item.abNames.join(',').toLowerCase().split(',')
      }
    selectionChange(list) {
      this.selectionRow = list;
    },
    selectionClear() {
      this.selectionRow = [];
      this.$refs.crud.toggleSelection();
    },
    //创建
    addHandler() {
      if (func.isEmptyObject(this.nodeRow)) {
        this.$message.error('请选择要添加的节点');
        return;
      }
      this.title = 'add';
      this.visible = true;
      this.$nextTick(() => {
      this.$refs.formRef.openDialog(this.nodeRow.label,'创建','add',{treeData:this.nodeRow});
      this.$nextTick(()=>{
        this.$refs.formRef.formItems[0].disabled = false;
        this.$refs.formRef.$refs.form.getInit(this.$refs.formRef.formItems)
      });
    },
    //修改
    editHandler() {
      if (func.isEmptyObject(this.nodeRow)) {
        this.$message.error('请至少选择一条数据');
      if (this.selectionRow.length!=1) {
        this.$message.error('请选择一条数据');
        return;
      }
      this.form.name = this.templateForm;
      this.title = 'edit';
      this.visible = true;
      this.$nextTick(() => {
      this.$refs.formRef.openDialog(this.nodeRow.label,'修改','edit',{treeData:this.nodeRow,selectData:this.selectionRow[0]});
      this.$nextTick(()=>{
        this.$refs.formRef.formItems[0].disabled = true;
        this.$refs.formRef.$refs.form.getInit(this.$refs.formRef.formItems)
      });
    },
    // æ–°å¢žç¼–辑保存
    addDialogSavaHandler() {
      this.$refs.form.validate((valid) => {
        const saveFunction = this.title === 'add' ? saveTemplate : updateTemplate;
        if (valid) {
          saveFunction(this.form).then(res => {
            if (res.data.code === 200) {
              this.$message.success(res.data.obj);
              this.addDialogClose();
            }
          })
        } else {
          return false;
        }
      });
    },
    // æ–°å¢žç¼–辑对话框取消
    addDialogClose() {
      this.form = {
        name: ''
      };
      this.$refs.form.clearValidate();
      this.visible = false;
    },
    //删除
    delHandler() {
      if (func.isEmptyObject(this.nodeRow)) {
      if (this.selectionRow.length==0) {
        this.$message.error('请选择数据');
        return;
      }
@@ -202,13 +183,13 @@
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteTemplate({
          name: this.templateForm,
          btmName: this.nodeRow.label,
          linkFlag: false
        }).then(res => {
        let names=this.selectionRow.map(item=>{
          return item.qtName
        })
        deleteLinkTemplate({names:names.join(',')}).then(res => {
          if (res.data.code === 200) {
            this.$message.success(res.data.obj);
            this.getTemp();
          }
        })
      }).catch(() => {
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue
@@ -2,7 +2,7 @@
  <el-dialog v-dialogDrag
             :title="dialog.title"
             :visible.sync="dialog.showDialog"
             width="1600px"
             width="1620px"
             :append-to-body="true"
             class="avue-dialog"
             :destroy-on-close="true"
@@ -47,7 +47,7 @@
            <div>
              æŸ¥è¯¢æ¨¡æ¿å®šä¹‰
              <avue-select @change="linkQueryDefineChange" class="el-input--small" v-model="linkQueryDefineForm" placeholder="请选择内容" type="tree" :dic="linkQueryDefineDic" style="width:240px"></avue-select>
              <avue-tree style="height: 265px" :data="linkTreeData" :option="treeOption"  @node-drag-start="handleDragStart">
              <avue-tree style="height: 265px" :data="linkTreeData" :option="treeOption"  @node-drag-start="handleDragStart" @node-drag-end="handleDragEnd">
              </avue-tree>
            </div>
          </fieldset>
@@ -55,7 +55,12 @@
        <el-main>
          <fieldset style="margin: 0 10px">
            <legend>&nbsp;查询条件&nbsp;</legend>
            <form-query-dialog style="height: 300px;" :queryCondition="queryCondition" :queryTree="queryTree"></form-query-dialog>
            <form-query-dialog ref="formQuery"
                               style="height: 300px;"
                               :queryCondition="queryCondition"
                               :queryTree="queryTree"
                               :levelFlag.sync="form.levelFlag"
            ></form-query-dialog>
          </fieldset>
        </el-main>
        <el-aside style="width:350px">
@@ -64,7 +69,7 @@
            <div>
              æŸ¥è¯¢æ¨¡æ¿å®šä¹‰
              <avue-select @change="businessQueryDefineChange" class="el-input--small" v-model="businessQueryDefineForm" placeholder="请选择内容" type="tree" :dic="businessQueryDefineDic" style="width: 240px;"></avue-select>
              <avue-tree style="height: 265px" :data="businessTreeData" :option="treeOption"  @node-drag-start="handleDragStart">
              <avue-tree style="height: 265px" :data="businessTreeData" :option="treeOption"  @node-drag-start="handleDragStart" @node-drag-end="handleDragEnd">
              </avue-tree>
            </div>
          </fieldset>
@@ -82,7 +87,7 @@
import {getAllOrderbyAttributeByLink} from "@/api/modeling/linkType/api";
import {linkSave} from "@/api/queryTemplate/linkTypeQuery";
import basicOption from "@/util/basic-option";
import {gridTemplate} from "@/api/queryTemplate/queryDefine";
import {queryTemplateListByAttr} from "@/api/queryTemplate/queryDefine";
import formQueryDialog from "./formQueryDialog.vue";
export default {
  name: "formDialog",
@@ -174,6 +179,7 @@
      form:{
        btmName:'',
        qtName: '',
        levelFlag:0,//0:普通查询模板; 1:高级查询模板"
        queryTemplate:{}
      },
      //已有排序列表配置
@@ -273,7 +279,8 @@
      //高级查询条件
      queryTree:{},
      //普通查询条件
      queryCondition:[]
      queryCondition:[],
    };
  },
  watch: {
@@ -322,14 +329,7 @@
        }
      },
      immediate: true,
    },
    'dialog.type': {
      handler(val) {
        if(val=='edit'){
        }
      },
      immediate: true,
    },
    }
  },
  methods: {
    openDialog(btmName, title, mode, data) {
@@ -350,12 +350,16 @@
          this.orderInfoList = JSON.parse(JSON.stringify(data.selectData.queryTemplate.orderInfoList));//已有排序
        }
        this.queryCondition=this.selectData.queryTemplate.condition;
        this.queryTree=this.selectData.queryTemplate.tree;
        this.queryTree=this.selectData.tree;
        this.form.levelFlag=this.selectData.levelFlag;
      } else {
        this.selectData = {};
        this.orderInfoList = [];
        this.queryCondition=[];
        this.queryTree={};
        this.queryTree={
          connector:'并且',
          child:[]
        };
      }
      this.dialog.showDialog = true;
      this.getTemp(data.treeData.label, true)
@@ -367,6 +371,7 @@
        this.form = {
          btmName: '',
          qtName: '',
          levelFlag:0,
          queryTemplate: {}
        };
        this.orderInfoList =[];
@@ -378,26 +383,8 @@
    submitDialog() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          let formData={
            btmName:this.form.btmName,
            qtName:this.form.qtName,
            queryTemplate:{
              btmType:this.form.btmType,
              clauseList:['*'],
              direction:this.form.direction,
              id:this.form.qtName,
              level:this.form.level,
              linkType:this.form.btmName,
              orderInfoList:this.orderInfoList,
              queryISLeaf:this.form.queryISLeaf,
              recReturnMode:1,//递归返回数据模式:1:RECRETURNMODE_FLAT, 2:RECRETURNMODE_FILTER
              rightFlag:true,
              secretFlag:true,
              type:'link',
              version:this.form.version
            }
          }
          formData.condition=[]
          const formData=this.initFormData();
          console.log(formData)
          linkSave(formData).then(res => {
            if (res.data.success) {
              this.$message.success("保存成功");
@@ -409,6 +396,60 @@
          return false;
        }
      });
    },
    initFormData() {
      let formData = {
        btmName: this.form.btmName,
        qtName: this.form.qtName,
        levelFlag: this.form.levelFlag,
        queryTemplate: {
          btmType: this.form.btmType,
          clauseList: ['*'],
          direction: this.form.direction,
          id: this.form.qtName,
          level: this.form.level,
          linkType: this.form.btmName,
          orderInfoList: this.orderInfoList,
          queryISLeaf: this.form.queryISLeaf,
          recReturnMode: 1,//递归返回数据模式:1:RECRETURNMODE_FLAT, 2:RECRETURNMODE_FILTER
          rightFlag: true,
          secretFlag: true,
          type: 'link',
          version: this.form.version
        }
      }
      if (formData.levelFlag == 1) {
        //高级
        let that = this;
        function initValue(nodeChild) {
          let children = [];
          if (nodeChild) {
            nodeChild.forEach((item, index) => {
              if (item.label != '并且' && item.label != '或者') {
                children.push(item.label);
              } else {
                children.push({
                  connector: item.label,
                  child: initValue(item.children)
                })
              }
            })
          }
          return children;
        }
        let treeData = {
          connector: this.$refs.formQuery.treeData[0].label
        };
        if (this.$refs.formQuery.treeData[0].children) {
          treeData.child = initValue(this.$refs.formQuery.treeData[0].children);
        }
        formData.tree = treeData
      }
      formData.condition = this.$refs.formQuery.conditionList;
      return formData;
    },
    getFormData(form) {
      this.form = form;
@@ -468,7 +509,7 @@
    //获取查询模板定义下拉
    getTemp(btmName,linkFlag) {
      if (btmName) {
        gridTemplate({btmName: btmName, linkFlag: linkFlag}).then(res => {
        queryTemplateListByAttr({btmName: btmName, linkFlag: linkFlag,direction:this.form.direction}).then(res => {
          const data = res.data.data.map(item => {
            item.label = item.name + '-' + (item.linkTypeName || item.btmName);
            item.value = item.name;
@@ -486,10 +527,11 @@
    },
    linkQueryDefineChange(data) {
      if (data.value) {
        const childData = data.item.abNames.map(item => {
        const childData = data.item.attrs.map(item => {
          return {
            label: item,
            value: item
            label: item.name,
            value: item.name,
            atttributes:item
          };
        });
        this.linkTreeData = [{
@@ -501,10 +543,11 @@
    },
    businessQueryDefineChange(data) {
      if (data.value) {
        const childData = data.item.abNames.map(item => {
        const childData = data.item.attrs.map(item => {
          return {
            label: item,
            value: item
            label: item.name,
            value: item.name,
            atttributes:item
          };
        });
        this.businessTreeData = [{
@@ -518,7 +561,15 @@
    handleDragStart(node, ev) {
      // ä½¿ç”¨ setData æ–¹æ³•设置数据
      ev.dataTransfer.setData('item', JSON.stringify(node.data));
      if(this.form.levelFlag==1){
        this.$refs.formQuery.$refs.tree.$emit('tree-node-drag-start', ev,{node:this.$refs.formQuery.initItem(node)});
      }
    },
    handleDragEnd(draggingNode,endNode,position,ev){
      if(this.form.levelFlag==1) {
        this.$refs.formQuery.$refs.tree.$emit('tree-node-drag-end', ev);
      }
    }
  },
}
</script>
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formQueryDialog.vue
@@ -6,27 +6,116 @@
      <el-button  plain size="mini" type="primary" @click="delAll">删除全部条件</el-button>
    </div>
    <div v-if="radioForm==0" @drop="drop" @dragover.prevent style="height: 220px;text-align: center;">
      <div v-for="condition in conditionList" class="el-input--small" style="margin-bottom: 5px;">
        <span style="width: 150px;display: inline-block;text-align: right" :title="condition.clause">{{condition.clause}}</span>
        <avue-select v-model="condition.operator" type="tree" :dic="operatorDic" :clearable="false" style="width: 80px;margin: 0 5px;"></avue-select>
        <avue-input v-model="condition.ordinaryValue" placeholder="" style="width: 300px;margin-right: 5px;"></avue-input>
        <el-button  plain size="mini" type="primary" @click="delAll">选择查询模板</el-button>
      <div v-for="(condition,index) in conditionList" :key="index" class="el-input--small" style="margin-bottom: 5px; text-align:left">
        <span style="width: 200px;display: inline-block;text-align: right" :title="condition.clause">{{condition.clause}}</span>
        <avue-select v-model="condition.operator" type="tree" :dic="condition.operatorDic" :clearable="false" style="width: 80px;margin: 0 5px;"></avue-select>
        <el-date-picker v-if="condition.type=='VTDate'" v-model="condition.ordinaryValue" style="width:300px;margin-right: 5px;display: inline-block;" value-format="YYYY-MM-DD"
                        type="date">
        </el-date-picker>
        <el-date-picker v-else-if="condition.type=='VTDateTime'" v-model="condition.ordinaryValue" style="width:300px;margin-right: 5px;display: inline-block;"
                        type="datetime">
        </el-date-picker>
        <el-time-select v-else-if="condition.type=='VTTime'" v-model="condition.ordinaryValue" value-format="HH:mm:ss" style="width:300px;margin-right: 5px;display: inline-block;">
        </el-time-select>
        <avue-input-number v-else-if="condition.type=='VTInteger'" precision="0" v-model="condition.ordinaryValue" style="width:300px;margin-right: 5px;display: inline-block;"></avue-input-number>
        <avue-input-number v-else-if="condition.type=='VTLong' || condition.type=='VTDouble'" v-model="condition.ordinaryValue" style="width:300px;margin-right: 5px;display: inline-block;"></avue-input-number>
        <avue-input v-else v-model="condition.ordinaryValue" placeholder="" style="width: 300px;margin-right: 5px;"></avue-input>
        <el-button  plain size="mini" type="primary" @click="checkTemp(index)">选择查询模板</el-button>
        <el-button  size="mini" type="danger" icon="el-icon-delete" @click="delCondition(index)" style="padding: 7px 8px"></el-button>
      </div>
    </div>
    <div v-else style="height: 220px;text-align: left">
      <avue-tree style="height: 220px" :data="treeData" :option="treeOption"></avue-tree>
    <div v-else @drop="drop" @dragover.prevent style="height: 220px;text-align: left">
      <avue-tree ref="tree" @node-drop="handleDrop" @node-drag-end="handleDragEnd" style="height: 220px" :data="treeData" :option="treeOption"  @node-click="nodeClick" node-key="value"></avue-tree>
    </div>
    <div style="text-align: right;margin-top: 10px;">
      <el-button v-if="radioForm==1"  plain size="mini" type="primary" @click="addHandler">增加逻辑</el-button>
      <el-button v-if="radioForm==1"  plain size="mini" type="primary" @click="del">修改条件</el-button>
      <el-button v-if="radioForm==1"  plain size="mini" type="primary" @click="del">删除</el-button>
      <el-button  plain size="mini" type="primary" @click="del">查询</el-button>
      <el-button  plain size="mini" type="primary" @click="del">取消</el-button>
      <el-button v-if="radioForm==1"  plain size="mini" type="primary" @click="editHandler">修改条件</el-button>
      <el-button v-if="radioForm==1"  plain size="mini" type="primary" @click="delHandler">删除</el-button>
      <el-button  plain size="mini" type="primary" @click="queryHandler">查询</el-button>
      <el-button  plain size="mini" type="primary" @click="">取消</el-button>
    </div>
    <!--修改条件-->
    <el-dialog v-dialogDrag
               :title="dialog.title"
               :visible.sync="dialog.showDialog"
               width="550px"
               :append-to-body="true"
               class="avue-dialog"
               :destroy-on-close="true"
               :close-on-click-modal="false"
               @close="dialog.showDialog=false">
      <div style="height: 200px;">
        {{clickNode.showLabel}}
        <avue-select v-if="['VTInteger','VTDouble','VTLong'].includes(clickNode.type)" v-model="clickNode.operator" type="tree" :dic="operatorIntDic" :clearable="false" style="width: 80px;margin: 0 5px;"></avue-select>
        <avue-select v-else-if="['VTDateTime','VTDate','VTTime'].includes(clickNode.type)" v-model="clickNode.operator" type="tree" :dic="operatorDateDic" :clearable="false" style="width: 80px;margin: 0 5px;"></avue-select>
        <avue-select v-else v-model="clickNode.operator" type="tree" :dic="operatorDic" :clearable="false" style="width: 80px;margin: 0 5px;"></avue-select>
        <el-date-picker v-if="clickNode.type=='VTDate'" v-model="clickNode.inputValue" style="width:300px;display: inline-block;" value-format="YYYY-MM-DD"
          type="date">
        </el-date-picker>
        <el-date-picker v-else-if="clickNode.type=='VTDateTime'" v-model="clickNode.inputValue" style="width:350px;display: inline-block;"
          type="datetime">
        </el-date-picker>
        <el-time-select v-else-if="clickNode.type=='VTTime'" v-model="clickNode.inputValue" value-format="HH:mm:ss" style="width:300px;display: inline-block;">
        </el-time-select>
        <avue-input-number v-else-if="clickNode.type=='VTInteger'" precision="0" v-model="clickNode.inputValue" style="width:300px;display: inline-block;"></avue-input-number>
        <avue-input-number v-else-if="clickNode.type=='VTLong' || clickNode.type=='VTDouble'" v-model="clickNode.inputValue" style="width:300px;display: inline-block;"></avue-input-number>
        <avue-input v-else v-model="clickNode.inputValue" type="textarea" style="width: 300px;margin-right: 5px;vertical-align: top;"></avue-input>
      </div>
      <div class="dialog-footer avue-dialog__footer">
        <el-button size="small" @click="checkTemp" v-if="!['VTInteger','VTDouble','VTLong','VTDateTime','VTDate','VTTime'].includes(clickNode.type)">选择查询模板</el-button>
        <el-button type="primary" plain size="small" @click="submitDialog" >保 å­˜</el-button>
        <el-button size="small" @click="dialog.showDialog=false">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
    <el-dialog v-dialogDrag
               :title="queryDialog.title"
               :visible.sync="queryDialog.showDialog"
               width="800px"
               :append-to-body="true"
               class="avue-dialog"
               :destroy-on-close="true"
               :close-on-click-modal="false"
               @close="cancleQueryDialog">
      <div class="el-input--small">
        è¾“入查询字段:<avue-input v-model="queryField" style="width: 500px;margin-bottom: 10px"></avue-input>
        <avue-crud  ref="crud" :data="crudData" :option="crudOption"
                    :page.sync="page"
                    :table-loading="tableLoading"
                    @selection-change="selectionChange"
                    @row-click="rowClick"
                    @size-change="sizeChange"
                    @current-change="currentChange">
        </avue-crud>
      </div>
      <div class="dialog-footer avue-dialog__footer">
        <el-button type="primary" plain size="small" @click="submitQueryDialog" >ç¡® å®š</el-button>
        <el-button size="small" @click="cancleQueryDialog">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
    <el-dialog v-dialogDrag
               :title="queryResultDialog.title"
               :visible.sync="queryResultDialog.showDialog"
               width="900px"
               :append-to-body="true"
               class="avue-dialog"
               :destroy-on-close="true"
               :close-on-click-modal="false"
               @close="queryResultDialog.showDialog='false'">
      <div class="el-input--small">
        <avue-crud  ref="crud" :data="resultData" :option="resultOption"
                    :table-loading="queryResultDialog.loading">
        </avue-crud>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import basicOption from "@/util/basic-option";
import {getAllQTs} from "@/api/queryTemplate/queryDefine";
import {getCriteria} from "@/api/queryTemplate/linkTypeQuery";
import {dateFormat} from "@/util/date"
export default {
name: "formQueryDialog",
  props: {
@@ -38,10 +127,28 @@
      type: Object,
      default: {}
    },
    levelFlag:{
      type: Number,
      default: 0
    }
  },
  data() {
    return {
      radioForm: 0,
      dialog: {
        showDialog: false,
        title: "查询条件设置框",
        loading: false
      },
      queryDialog: {
        showDialog: false,
        title: "选择查询模板",
        loading: false
      },
      queryResultDialog: {
        showDialog: false,
        title: "查询结果",
        loading: false
      },
      radioDic: [{
        label: '普通',
        value: 0
@@ -49,94 +156,561 @@
        label: '高级',
        value: 1
      }],
      conditionList:this.queryCondition,
      conditionList:[],
      treeData:[],
      treeOption:{
        defaultExpandAll:true,
        menu: false,
        addBtn: false,
        filter:false,
        draggable: true,
        allowDrop: (draggingNode, dropNode, type) => {
          debugger;
          if (dropNode.data.label === '并且' || dropNode.data.label === '或者') {
            return true;
          } else {
            this.$message.error('请选中逻辑条件添加查询项');
            return false;
          }
        },
        allowDrag: (draggingNode) => {
          return false;
        },
      },
      treeData:this.queryTree,
      //VTInteger、VTDouble、VTLong
      page: {
        currentPage: 1,
        pageSize: 10,
        total: 0,
        pageSizes: [10, 30, 50, 100],
      },
      crudData:[],
      crudOption: {
        ...basicOption,
        addBtn: false,
        editBtn: false,
        delBtn: false,
        tip: false,
        header: false,
        height: window.innerHeight-220,
        menu: false,
        column: [{
          label: '查询模板名称',
          prop: 'qtName',
          sortable: true,
        }, {
          label: '链接类型或业务类型',
          prop: 'btmName',
          sortable: true,
        }]
      },
      tableLoading: false,
      selectionRow:[],
      queryField:'',
      resultData:[],
      resultOption: {
        ...basicOption,
        addBtn: false,
        editBtn: false,
        delBtn: false,
        tip: false,
        header: false,
        height: window.innerHeight-220,
        menu: false,
        column: [{
          label: 'OID',
          prop: 'OID',
        }, {
          label: 'CREATOR',
          prop: 'CREATOR'
        }, {
          label: 'CREATETIME',
          prop: 'CREATETIME'
        }]
      },
      clickNode:{},
      operatorIntDic:[{
        label:'=',
        value:'='
      },{
        label:'!=',
        value:'!='
      },{
        label:'包含',
        value:'包含'
      },{
        label:'in',
        value:'in'
      },{
        label:'not in',
        value:'not in'
      },{
        label:'>=',
        value:'>='
      },{
        label:'>',
        value:'>'
      },{
        label:'<=',
        value:'<='
      },{
        label:'<',
        value:'<'
        label: '=',
        value: '='
      }, {
        label: '!=',
        value: '!='
      }, {
        label: '包含',
        value: '包含'
      }, {
        label: 'in',
        value: 'in'
      }, {
        label: 'not in',
        value: 'not in'
      }, {
        label: '>=',
        value: '>='
      }, {
        label: '>',
        value: '>'
      }, {
        label: '<=',
        value: '<='
      }, {
        label: '<',
        value: '<'
      }],
      //VTDateTime、VTDate、VTTime
      operatorTimeDic:[{
        label:'=',
        value:'='
      },{
        label:'!=',
        value:'!='
      },{
        label:'in',
        value:'in'
      },{
        label:'not in',
        value:'not in'
      },{
        label:'>=',
        value:'>='
      },{
        label:'<=',
        value:'<='
      operatorDateDic : [{
        label: '=',
        value: '='
      }, {
        label: '!=',
        value: '!='
      }, {
        label: 'in',
        value: 'in'
      }, {
        label: 'not in',
        value: 'not in'
      }, {
        label: '>=',
        value: '>='
      }, {
        label: '<=',
        value: '<='
      }],
      //其它
      operatorDic:[{
        label:'=',
        value:'='
      },{
        label:'!=',
        value:'!='
      },{
        label:'包含',
        value:'包含'
      },{
        label:'in',
        value:'in'
      },{
        label:'not in',
        value:'not in'
      operatorDic : [{
        label: '=',
        value: '='
      }, {
        label: '!=',
        value: '!='
      }, {
        label: '包含',
        value: '包含'
      }, {
        label: 'in',
        value: 'in'
      }, {
        label: 'not in',
        value: 'not in'
      }]
    }
  },
  methods:{
  computed: {
    radioForm:{
      get() {
        return this.levelFlag;
      },
      set(value) {
        this.$emit('update:levelFlag', value);
      }
    }
  },
  watch: {
    queryCondition:{
      handler(val) {
        if(val && val.cIMap){
          let list=[];
          let that=this;
          let getValue =function(queryTemplate,item) {
            for (let key in queryTemplate.condition.cIMap) {
              if (queryTemplate.condition.cIMap[key].leaf) {
                item.clause += '.' + queryTemplate.condition.cIMap[key].leafInfo.clause;
                if (queryTemplate.condition.cIMap[key].leafInfo.value.queryTemplate) {
                  getValue(queryTemplate.condition.cIMap[key].leafInfo.value.queryTemplate, item)
                } else {
                  item.ordinaryValue = queryTemplate.condition.cIMap[key].leafInfo.value.ordinaryValue;
                  item.type=queryTemplate.condition.cIMap[key].leafInfo.type;
                  if(['VTInteger','VTDouble','VTLong'].includes(item.type)){
                    item.operatorDic=that.operatorIntDic;
                  }else if(['VTDateTime','VTDate','VTTime'].includes(item.type)){
                    item.operatorDic=that.operatorDateDic;
                  }else{
                    item.operatorDic=that.operatorDic;
                  }
                }
              }
            }
          }
          for (let key in val.cIMap) {
            if (this.queryCondition.cIMap[key].leaf) {
              let clause=this.queryCondition.cIMap[key].leafInfo.clause;
              let operator= this.queryCondition.cIMap[key].leafInfo.operator;
              let item={
                clause: clause,
                operator: operator,
                ordinaryValue: '',
                operatorDic :[]
              }
              if(this.queryCondition.cIMap[key].leafInfo.value.queryTemplate) {
                getValue(this.queryCondition.cIMap[key].leafInfo.value.queryTemplate, item)
              }else {
                item.ordinaryValue=this.queryCondition.cIMap[key].leafInfo.value.ordinaryValue;
                item.type=this.queryCondition.cIMap[key].leafInfo.type;
                if(['VTInteger','VTDouble','VTLong'].includes(item.type)){
                  item.operatorDic=that.operatorIntDic;
                }else if(['VTDateTime','VTDate','VTTime'].includes(item.type)){
                  item.operatorDic=that.operatorDateDic;
                }else{
                  item.operatorDic=that.operatorDic;
                }
              }
              list.push(item)
            }
          }
          this.conditionList= list;
        }else{
          this.conditionList=[]
        }
      },
      immediate: true,
      deep:true
    },
    queryTree:{
      handler(val) {
        this.treeIndex=0;
        if(val && Object.keys(val).length>0){
          let treeData = [];
          let that=this;
          function initValue(nodeChild) {
            let children=[];
            if(nodeChild){
              nodeChild.forEach((item,index)=>{
                that.treeIndex++;
                if(item.column !=null && item.column != undefined){
                  const values= item.column.split(' ');
                  let inputValue='';
                  let operator='';
                  let showLabel=''
                  if(item.column.indexOf('not in')!=-1){
                    operator='not in';
                    if(values.length>3){
                      inputValue=values[3];
                    }
                  }else{
                    if(values.length>1){
                      operator=values[1];
                      if(values.length>2){
                        inputValue=values[2];
                      }
                    }
                  }
                  if(values[0].indexOf('.')!=-1){
                    const labels=values[0].split('.')
                    showLabel=labels[labels.length-1];
                  }else {
                    showLabel=values[0];
                  }
                  children.push({
                    label:item.column,
                    value:item.column+that.treeIndex,
                    type:item.type,
                    valueIndex:'v'+that.treeIndex,
                    inputValue:inputValue,
                    operator:operator,
                    showLabel:showLabel
                  })
                }else {
                  children.push({
                    label:item.connector,
                    value:item.connector+that.treeIndex,
                    valueIndex:'v'+that.treeIndex,
                    children:initValue(item.child)
                  })
                }
              })
            }
            return children;
          }
          const node={
            label:val.connector,
            value:val.connector+this.treeIndex,
            valueIndex:'v'+this.treeIndex,
            children:initValue(val.child)
          }
          treeData.push(node)
          this.treeData = treeData;
        }else {
          this.treeData=[{
            label: '并且',
            value: '并且' + this.treeIndex,
            valueIndex: 'v' + this.treeIndex,
            connector: '并且',
            children: []
          }]
        }
      },
      immediate: true,
      deep:true
    }
  },
  created() {
    this.getTemp();
  },
  methods: {
    // æ‹–拽到时
    drop(event) {
      // ä½¿ç”¨ getData æ–¹æ³•获取数据
      const data = JSON.parse(event.dataTransfer.getData('item'));
      const params = {
        clause: data.value,
        operator: '=',
        ordinaryValue: ''
      if (this.radioForm == 0) {
        const params = {
          clause: data.value,
          operator: '=',
          ordinaryValue: ''
        }
        if (data.atttributes.vtDataType == 'VTInteger' || data.atttributes.vtDataType == 'VTDouble' || data.atttributes.vtDataType == 'VTLong') {
          params.operatorDic =JSON.parse(JSON.stringify(this.operatorIntDic)) ;
        } else if (data.atttributes.vtDataType == 'VTDateTime' || data.atttributes.vtDataType == 'VTDate' || data.atttributes.vtDataType == 'VTTime') {
          params.operatorDic = JSON.parse(JSON.stringify(this.operatorDateDic))
        } else {
          params.operatorDic = JSON.parse(JSON.stringify(this.operatorDic))
        }
        params.type=data.atttributes.vtDataType;
        this.conditionList.push(params)
      }else {
        if (this.clickNode.label != '并且' && this.clickNode.label != '或者') {
          this.$message.error('请选中逻辑条件添加查询项');
          return;
        }
        this.$refs.tree.append(this.initItem(data), this.clickNode);
      }
      this.conditionList.push(params)
    }
    },
    initItem(data){
      this.treeIndex++;
      let item={
        label: data.value,
        value: data.value + this.treeIndex,
        valueIndex: 'v' + this.treeIndex,
        type:data.vtDataType,
        children: [],
        inputValue:data.value,
        operator:'=',
        showLabel:data.value
      };
      let showLabel='';
      if(data.value.indexOf('.')!=-1){
        const labels=data.value.split('.')
        showLabel=labels[labels.length-1];
      }else {
        showLabel=data.value;
      }
      item.showLabel=showLabel;
      return item
    },
    handleDrop(draggingNode, dropNode, dropType, ev) {
      debugger;
      console.log('tree drop: ', dropNode.label, dropType);
    },
    handleDragEnd(draggingNode, dropNode, dropType, ev) {
      debugger;
      console.log('tree drag end: ', dropNode && dropNode.label, dropType);
    },
    //删除普通查询条件
    delCondition(index) {
      this.conditionList.splice(index, 1);
    },
    //清空值
    clearValue() {
      if (this.radioForm == 0) {
        this.conditionList.map(item => {
          item.ordinaryValue = '';
          return item;
        })
        this.conditionList = this.conditionList
      } else {
        if(this.treeData[0] && this.treeData[0].children) {
          this.clearTreeValue(this.treeData[0].children)
        }
      }
    },
    clearTreeValue(nodes){
      nodes.forEach((node,index)=>{
        if(node.children){
          this.clearTreeValue(node.children)
        }else {
          if(node.label.indexOf('not in')!=-1){
            node.label=node.label.split(' ')[0]+' not in'
          }else {
            let values = node.label.split(' ');
            if (values.length > 2) {
              node.label = values[0] + ' ' + values[1];
            }
          }
        }
      })
    },
    //删除全部条件
    delAll() {
      if (this.radioForm == 0) {
        this.conditionList = [];
      } else {
        this.treeIndex = 0;
        this.treeData = [];
        this.clickNode={};
      }
    },
    nodeClick(data) {
      this.clickNode = data
    },
    //树 å¢žåŠ é€»è¾‘æ¡ä»¶
    addHandler() {
      if (Object.keys(this.clickNode).length>0) {
        if (this.clickNode.label == '并且' || this.clickNode.label == '或者') {
          this.treeIndex++;
          this.$refs.tree.append({
            label: '并且',
            value: '并且' + this.treeIndex,
            valueIndex: 'v' + this.treeIndex,
            children: []
          }, this.$refs.tree.getCurrentNode());
        } else {
          this.$message.error("只能对逻辑条件增加逻辑条件");
        }
      } else {
        if(this.treeData.length==0){
          this.treeIndex = 0;
          this.treeData = [{
            label: '并且',
            value: '并且' + this.treeIndex,
            valueIndex: 'v' + this.treeIndex,
            connector: '并且',
            children: []
          }]
        }else {
          this.$message.warning("请选择查询条件");
        }
      }
    },
    //树 ä¿®æ”¹æ¡ä»¶
    editHandler() {
      if (Object.keys(this.clickNode).length>0) {
        if (this.clickNode.label == '并且') {
          this.clickNode.label = '或者'
        } else if (this.clickNode.label == '或者') {
          this.clickNode.label = '并且'
        } else {
          this.dialog.showDialog = true;
        }
      } else {
        this.$message.warning("请选择查询条件");
      }
    },
    //树 åˆ é™¤æ¡ä»¶
    delHandler() {
      if (Object.keys(this.clickNode).length>0) {
        this.$confirm('您确定要删除所选择的条件吗?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          this.$refs.tree.remove(this.clickNode);
          this.clickNode = {};
        })
      } else {
        this.$message.warning("请选择查询条件");
      }
    },
    //查询
    queryHandler(){
      this.$parent.$parent.$parent.$parent.$refs.form.validate((valid) => {
        if (valid) {
          this.queryResultDialog.loading=true;
          const formData=this.$parent.$parent.$parent.$parent.initFormData();
          getCriteria(formData).then(res => {
            if (res.data.success) {
              this.resultData=res.data.data;
              this.queryResultDialog.showDialog=true;
              this.queryResultDialog.loading=false;
            }
          });
        } else {
          return false;
        }
      });
    },
    //选择查询模板
    checkTemp(index) {
      if(index>=0){
        if(['VTInteger','VTDouble','VTLong','VTDateTime','VTDate','VTTime'].includes(this.conditionList[index].type)){
          return false;
        }
      }
      this.queryIndex=index;
      this.queryDialog.showDialog=true;
      this.$nextTick(()=>{
        this.$refs.crud.doLayout();
      });
    },
    //查询条件保存
    submitDialog() {
      const values= this.clickNode.label.split(' ');
      this.clickNode.label = values[0]+' '+this.clickNode.operator+' '+this.clickNode.inputValue;
      try{
        if(['VTDateTime'].includes(this.clickNode.type)){
          this.clickNode.label = values[0]+' '+this.clickNode.operator+' '+dateFormat(this.clickNode.inputValue);
        }else  if(['VTDate'].includes(this.clickNode.type)){
          this.clickNode.label = values[0]+' '+this.clickNode.operator+' '+dateFormat(this.clickNode.inputValue ,'yyyy-MM-dd');
        }else  if(['VTTime'].includes(this.clickNode.type)){
          this.clickNode.label = values[0]+' '+this.clickNode.operator+' '+dateFormat(this.clickNode.inputValue ,'hh:mm:ss');
        }
      }catch (e) {
      }
      this.dialog.showDialog = false;
    },
    //获取查询模板列表
    getTemp() {
      getAllQTs(this.page.currentPage, this.page.pageSize).then(res => {
        this.crudData = res.data.data;
        this.tableLoading = false;
      })
    },
    rowClick(row) {
      this.$refs.crud.toggleSelection();
      this.$refs.crud.toggleRowSelection(row); //选中当前行
      this.selectionRow = [row];
    },
    selectionChange(list) {
      this.selectionRow = list;
    },
    selectionClear() {
      this.selectionRow = [];
      this.$refs.crud.toggleSelection();
    },
    //选择查询模板
    submitQueryDialog() {
      if (this.selectionRow.length == 0) {
        this.$message.error('请选择查询模板再进行操作');
        return;
      }
      if (this.queryField == '') {
        this.$message.error('请填写输入查询字段');
        return;
      }
      const value = this.selectionRow[0].qtName + ';' + this.queryField
      if (this.radioForm == 0) {
        //普通
        this.conditionList[this.queryIndex].ordinaryValue = value;
      } else {
        this.clickNode.inputValue = value;
      }
      this.cancleQueryDialog();
    },
    cancleQueryDialog(){
      this.queryDialog.showDialog = false;
      this.selectionClear();
      this.queryField='';
      this.queryIndex=null;
    },
    sizeChange(val) {
      this.page.pageSize = val;
      this.getTemp();
    },
    // é¡µç 
    currentChange(val) {
      this.page.currentPage = val;
      this.getTemp();
    },
  }
}
</script>
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/index.vue
@@ -33,6 +33,9 @@
                    :data="crudData" :option="crudOption" :table-loading="tableLoading" style="margin-top: 10px">
        </avue-crud>
        <form-dialog ref="formRef" @refresh="getTemp"></form-dialog>
        <!--导入    -->
        <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" :tipList="tipList" title="导入"
                     @updata="uploadCallBack"></upload-file>
      </basic-container>
    </el-main>
  </el-container>
@@ -40,9 +43,10 @@
<script>
import {gridLink} from "@/api/modeling/linkType/api";
import {getObjTypeQTs,deleteLinkTemplate} from "@/api/queryTemplate/linkTypeQuery";
import {getObjTypeQTs,deleteLinkTemplate,expLinkTemplate,impLinkTemplate} from "@/api/queryTemplate/linkTypeQuery";
import basicOption from "@/util/basic-option";
import FormDialog from "./formDialog.vue"
import func from "@/util/func";
export default {
  name: "index",
@@ -103,6 +107,7 @@
        }, {
          label: '方向',
          prop: 'direction',
          width:80,
          formatter:function (row, value) {
            if (row.queryTemplate.direction == 'positive') {
              return '正向'
@@ -113,6 +118,7 @@
        }, {
          label: '业务类型',
          prop: 'btmType',
          width: 130,
          formatter:function (row, value) {
            return row.queryTemplate.btmType;
          }
@@ -135,18 +141,25 @@
        }, {
          label: '查询是否有下级',
          prop: 'queryISLeaf',
          width: 120,
          formatter:function (row, value) {
            return row.queryTemplate.queryISLeaf
          }
        }, {
          label: '子节点层次数',
          prop: 'level',
          width: 100,
          formatter:function (row, value) {
            return row.queryTemplate.level;
          }
        }]
      },
      selectionRow: [],
      tipList: [
        "导入仅能上传.vciqtf格式文件"
      ],
      upFileType: ['vciqtf'],
      fileUrl: 'api/templateController/impLinkTemplate',
    }
  },
  created() {
@@ -208,7 +221,6 @@
      }
      this.$refs.formRef.openDialog(this.nodeRow.label,'修改','edit',{treeData:this.nodeRow,selectData:this.selectionRow[0]});
      this.$nextTick(()=>{
        debugger;
        this.$refs.formRef.formItems[0].disabled = true;
        this.$refs.formRef.$refs.form.getInit(this.$refs.formRef.formItems)
      });
@@ -239,6 +251,42 @@
          message: '已取消删除'
        });
      });
    },
    //导出
    exportClickHandler(){
      if (this.selectionRow.length <= 0) {
        this.$message.warning('请至少选择一条数据进行导出');
        return;
      }
      let qtNames = this.selectionRow.map(item => item.qtName).join(',');
      expLinkTemplate({qtNames: qtNames}).then(res => {
        func.downloadFileByBlobHandler(res);
        this.$message.success('导出成功');
      })
    },
    upLoadClickHandler(){
      this.$refs.upload.visible = true;
    },
    uploadCallBack(res){
      function getText(child){
        let text=''
        if(child[0].children && child[0].children.length>0){
          text=getText(child[0].children)
        }else{
          text=child[0].text ||child[0];
        }
        return text
      }
      if(res.obj) {
        if (res.obj.children) {
          this.$message.info(getText(res.obj.children));
        }
      }
      if(res.data){
        this.crudData = res.data;
      }
      //this.getTemp();
    }
  }
}