田源
2024-08-30 9900d07ca84f9a1718f8b8781c567ecae9f232b6
Merge remote-tracking branch 'origin/master'
已修改19个文件
已添加3个文件
1095 ■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-poi/src/main/java/com/vci/starter/poi/util/ExcelUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/PortalVIPO.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/QTDPO.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsPortalVIServiceI.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/App.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/modeling/linkType/api.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/queryTemplate/linkTypeQuery.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/api/queryTemplate/queryDefine.js 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/PLT-basic-component/basicForm.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/refer/BasicClassifyRefer.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/refer/orgDeptRefer.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/refer/orgUserRefer.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/refer/vciWebRefer.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/refer/vciWebReferClassify.vue 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/refer/vciWebReferDefalut.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/refer/vciWebReferTable.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/components/refer/vciWebReferTree.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue 487 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/index.vue 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/queryDefine/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-poi/src/main/java/com/vci/starter/poi/util/ExcelUtil.java
@@ -997,6 +997,7 @@
        try {
            for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
                Sheet sheet = workbook.getSheetAt(sheetIndex);
                String sheetName=sheet.getSheetName();
                if(StringUtils.isNotBlank(excelOption.getSheetName())){
                    if(!sheet.getSheetName().equalsIgnoreCase(excelOption.getSheetName())){
                        continue;
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/PortalVIPO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
package com.vci.po;
import com.vci.starter.poi.annotation.ExcelColumn;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * è¡¨å•/表格导入转换对象
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PortalVIPO implements java.io.Serializable {
    private static final long serialVersionUID = -4958371880356252841L;
    /**
     * æ‰€åœ¨æ•°æ®è¡Œ
     */
    @ExcelColumn(rowIndexColumn = true,value = "")
    private String rowIndex;
    /**
     * ä¸šåŠ¡ç±»åž‹åç§°
     */
    @ExcelColumn(value="业务类型名称",nullable = false)
    private String typeName;
    /**
     * åç§°
     */
    @ExcelColumn(value="名称",nullable = false)
    private String viName;
    /**
     *业务类型
     */
    private short typeFlag;
    /**
     * ä¸šåŠ¡ç±»åž‹
     */
    @ExcelColumn(value="业务类型",nullable = false)
    private String typeFlagText;
    /***
     * è¡¨å•类型
     */
    private short viType;
    /***
     * è¡¨å•类型
     */
    @ExcelColumn(value="表单类型",nullable = false)
    private String viTypeText;
    /***
     * é…ç½®ä¿¡æ¯
     */
    private String prm;
    /**
     * é…ç½®æ–‡æœ¬
     */
    @ExcelColumn(value="配置文本")
    private String prmFileName;
    /***
     * å±žæ€§
     */
    @ExcelColumn(value="属性" ,nullable = false)
    private String attributeKey;
    /***
     * æŸ¥è¯¢æ¨¡æ¿åç§°
     */
    @ExcelColumn(value="查询模板名称" )
    private String qtName;
    /***
     * æŸ¥è¯¢æ¨¡æ¿é…ç½®æ–‡æœ¬
     */
    @ExcelColumn(value="查询模板配置文本" )
    private String qtNameFile;
    /***
     * æŸ¥è¯¢æ¨¡æ¿ä¸šåŠ¡ç±»åž‹
     */
    @ExcelColumn(value="查询模板业务类型" )
    private String qtNameType;
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/po/QTDPO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
package com.vci.po;
import com.vci.starter.poi.annotation.ExcelColumn;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * è¡¨å•/表格导入转换对象
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class QTDPO implements java.io.Serializable {
    private static final long serialVersionUID = 8774827411052362064L;
    /**
     * æ‰€åœ¨æ•°æ®è¡Œ
     */
    @ExcelColumn(rowIndexColumn = true,value = "")
    private String rowIndex;
    /**
     * ä¸šåŠ¡ç±»åž‹åç§°
     */
    @ExcelColumn(value="业务类型名称")
    private String typeName;
    /**
     * é“¾æŽ¥ç±»åž‹åç§°
     */
    @ExcelColumn(value="链接类型名称")
    private String linkType;
    /**
     *查询模板定义名称
     */
    @ExcelColumn(value="查询模板定义名称" )
    private String QtdName;
    /***
     * å±žæ€§
     */
    @ExcelColumn(value="属性" )
    private String attributeKey;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java
@@ -1,13 +1,12 @@
package com.vci.web.controller;
import com.vci.constant.FrameWorkLangCodeConstant;
import com.vci.corba.common.PLException;
import com.vci.dto.ClonePortalVIDTOList;
import com.vci.dto.DeletePortalVIDTOList;
import com.vci.dto.OsBtmTypeDTO;
import com.vci.dto.PortalVIDTO;
import com.vci.pagemodel.KeyValue;
import com.vci.pagemodel.PortalVIVO;
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;
@@ -15,19 +14,19 @@
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.util.ControllerUtil;
import com.vci.starter.web.util.LangBaseUtil;
import com.vci.starter.web.util.LocalFileUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.web.enumpck.ItemDblEnum;
import com.vci.web.enumpck.ItemTypeEnum;
import com.vci.web.service.OsPortalVIServiceI;
import com.vci.web.service.WebBtmIOServiceI;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.FileNotFoundException;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
@@ -165,6 +164,30 @@
            }
        }
    }
    /**
     * å¯¼å‡ºæ•°æ®åº“的表信息到excel
     * @param file ä¸Šä¼ çš„æ–‡ä»¶
     */
    @PostMapping("/importData")
    @VciBusinessLog(operateName = "导入表单/表格")
    public BaseResult importData(MultipartFile file){
        String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + LocalFileUtil.getFileNameForIE(file.getOriginalFilename());
        File file1 = new File(excelFileName);
        try {
            file.transferTo(new File(excelFileName));
            if (file != null) {
                return portalVIServiceI.importData(file1);
            } else {
                return BaseResult.fail(FrameWorkLangCodeConstant.IMPORT_FAIL, new String[]{"无导入的文件"});
            }
        }catch (Throwable e) {
            throw new VciBaseException(VciBaseUtil.getExceptionMessage(e),new String[0],e);
        }finally {
            file1.delete();
        }
    }
    /**
     * èŽ·å–å±žæ€§å­—æ®µç±»åž‹
     */
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsPortalVIServiceI.java
@@ -9,7 +9,10 @@
import com.vci.starter.web.pagemodel.BaseQueryObject;
import com.vci.starter.web.pagemodel.BaseResult;
import com.vci.starter.web.pagemodel.DataGrid;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -82,6 +85,12 @@
    String exportToExcel(Collection<String> idList);
    /**
     * å¯¼å…¥è¡¨å•/表格数据
     * @param file ä¸Šä¼ çš„æ–‡ä»¶
     * @return
     */
    public BaseResult importData(File  file)throws Throwable;
    /**
     *查询所有表单或者表格
     * @return key æ˜¯ç”Ÿå‘½å‘¨æœŸçš„编号的英文小写
     * @throws VciBaseException æŸ¥è¯¢çš„æ—¶å€™å‡ºé”™ä¼šæŠ›å‡ºå¼‚常
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java
@@ -4,6 +4,7 @@
import cn.hutool.core.util.ZipUtil;
import com.vci.bo.ItemSeniorQueryBO;
import com.vci.common.utility.ObjectUtility;
import com.vci.constant.FrameWorkLangCodeConstant;
import com.vci.corba.common.PLException;
import com.vci.corba.omd.qtm.QTD;
import com.vci.corba.omd.qtm.QTInfo;
@@ -12,6 +13,9 @@
import com.vci.dto.*;
import com.vci.model.*;
import com.vci.pagemodel.*;
import com.vci.po.PortalVIPO;
import com.vci.po.QTDPO;
import com.vci.starter.poi.bo.ReadExcelOption;
import com.vci.starter.poi.bo.WriteExcelData;
import com.vci.starter.poi.bo.WriteExcelOption;
import com.vci.starter.poi.util.ExcelUtil;
@@ -26,6 +30,7 @@
import com.vci.web.enumpck.ItemTypeEnum;
import com.vci.web.enumpck.PortalVIType;
import com.vci.web.enumpck.PortalVITypeFlag;
import com.vci.web.other.BtmQTExportData;
import com.vci.web.service.OsAttributeServiceI;
import com.vci.web.service.OsPortalVIServiceI;
import com.vci.web.service.OsQuereyTemplateServiceI;
@@ -39,6 +44,7 @@
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.*;
@@ -126,7 +132,7 @@
                dataGrid.setData(portalVIVOS);
                dataGrid.setTotal(pagePortalVIArrayByPageInfoResult.total);
            }else{
                dataGrid = new DataGrid<>("沒有查询到数据");
                dataGrid = new DataGrid<>();
            }
        } catch (PLException e) {
            e.printStackTrace();
@@ -352,6 +358,21 @@
                    String prmText=UITools.getPRMText(prmDOO2VIS(portalVIDTO.getPrm(),portalVIDTO.getViType()));
                    String prmTextFileName=    ObjectUtility.getNewObjectID36() + ".txt";
                    String prmTextFileNameAllName = xfileName + "." + prmTextFileName;
                    if (portalVIDTO.getViType() == PortalVIType.Table.getIntVal()) {//如果导入的table,则需要校验表格关联的表单是否存在,如果不存在则在execl中是否存在
                        PortalVI[] pvs = platformClientUtil.getPortalService().getPortalVIArrayByTypeName(portalVIDTO.getTypeName());
                        PRMDTO prmdto=   portalVIDTO.getPrm();
                        List<PRMItemDTO> prmItemDTOS=   prmdto.getPrmItemList();
                        if (!CollectionUtils.isEmpty(Arrays.asList(pvs))) {
                            Optional.ofNullable(prmItemDTOS).orElseGet(()->new ArrayList<>()).stream().forEach(prmItemDTO -> {
                                Arrays.stream(pvs).forEach(pv -> {
                                    if (prmItemDTO.getItemInObj().equals(pv.typeName + ":" + pv.viName)) {
                                        prmItemDTO.setItemInObj(pv.id);
                                    }
                                });
                            });
                        }
                    }
                    writeDataToFile(defaultTempFolder,prmTextFileNameAllName,prmText);
                    rowDataList.add(new WriteExcelData(rowIndex[0], 4,prmTextFileName));//配置文本
@@ -420,6 +441,152 @@
        return zip.getAbsoluteFile().getAbsolutePath();
    }
    @Override
    public BaseResult importData(File file)throws Throwable{
        if (file == null) {
            return BaseResult.fail(FrameWorkLangCodeConstant.IMPORT_FAIL, new String[]{"无导入的文件"});
        }
        try {
            File unzip = ZipUtil.unzip(file);
            String filePath=unzip.getAbsolutePath() + File.separator + "export.xls";
            File btmExcel = new File(filePath);
            List<PortalVIPO> portalVIPOList=new ArrayList<>();
            List<QTDPO> QTDPOPOList=new ArrayList<>();
            try {
                ReadExcelOption PortalVIPOReadExcelOption=new ReadExcelOption();
                PortalVIPOReadExcelOption.setSheetName("portalvi");
                PortalVIPOReadExcelOption.setSheetIndex(0);
                portalVIPOList = ExcelUtil.readDataObjectFromExcel(btmExcel, PortalVIPO.class,PortalVIPOReadExcelOption);
                //从execl获取查询模板定义.
               /* ReadExcelOption QTDPOReadExcelOption=new ReadExcelOption();
                QTDPOReadExcelOption.setSheetName("QTD");
                QTDPOReadExcelOption.setSheetIndex(1);
                QTDPOPOList = ExcelUtil.readDataObjectFromExcel(btmExcel, QTDPO.class,QTDPOReadExcelOption);*/
            }catch (VciBaseException e){
                throw  new Throwable("读取execl数据出错:"+e.getMessage());
            }
            List<PortalVI> portalVIList=new ArrayList<>();
            if(!CollectionUtils.isEmpty(portalVIPOList)){
                Map<String,String>formNameMap=new HashMap<>();
                StringBuffer checkInObj=new StringBuffer();
                StringBuffer checkPortalVI=new StringBuffer();
                List<String> sjkExitsList=new ArrayList<>();
                portalVIPOList.stream().forEach(portalVIPO -> {
                    PortalVI portalVI=new PortalVI();
                    String ploid = ObjectUtility.getNewObjectID36();
                    portalVI.id=ploid;
                    portalVI.viName=portalVIPO.getViName();
                    portalVI.typeName=portalVIPO.getTypeName();
                    portalVI.viType=PortalVIType.getByLabel(portalVIPO.getViTypeText()).getIntVal();
                    portalVI.typeFlag=PortalVITypeFlag.getByLabel(portalVIPO.getTypeFlagText()).getIntVal();
                    String fileName= portalVIPO.getPrmFileName();
                    String prmStr = readLines(filePath+"."+fileName);
                    try {
                        PortalVI[] pvs = platformClientUtil.getPortalService().getPortalVIArrayByTypeName(portalVI.typeName);
                        if (portalVI.viType == PortalVIType.Table.getIntVal()) {//如果导入的table,则需要校验表格关联的表单是否存在,如果不存在则在execl中是否存在
                            formNameMap.put(portalVI.typeName + ":" + portalVI.viName, ploid);
                            PRMDO prmObj = UITools.getPRM(prmStr);
                            List<PRMItemDO> prmItemList = prmObj.getPrmItemList();
                            if (!CollectionUtils.isEmpty(prmItemList)) {
                                prmItemList.stream().forEach(prmItemDO -> {
                                    if (!CollectionUtils.isEmpty(Arrays.asList(pvs))) {
                                        Arrays.stream(pvs).forEach(pv -> {
                                            if (prmItemDO.getItemInObj().equals(portalVI.typeName + ":" + pv.viName)) {
                                                prmItemDO.setItemInObj(pv.id);
                                            }
                                        });
                                    } else {
                                        if (formNameMap.containsKey(prmItemDO.getItemInObj())) {
                                            prmItemDO.setItemInObj(formNameMap.get(prmItemDO.getItemInObj()));
                                        } else {
                                            if (!checkInObj.toString().contains(prmItemDO.getItemInObj())) {
                                                String[] split = prmItemDO.getItemInObj().split(":");
                                                checkInObj.append(split[1]).append(",");
                                            }
                                        }
                                    }
                                });
                            }
                            prmStr = UITools.getPRMText(prmObj);
                        }
                        portalVI.prm = prmStr.trim();
                        //校验表单是否存在
                        if (!CollectionUtils.isEmpty(Arrays.asList(pvs))) {
                            Arrays.stream(pvs).forEach(pv -> {
                                if (pv.viName.equals(portalVI.viName)) {
                                    checkPortalVI.append(portalVI.viName).append(",");
                                }
                            });
                        }
                        //校验属性是否正确
                        List<OsAttributeVO> osAttributeVOList = osAttributeService.getOsAttributeVOSByBtName(portalVI.typeName, portalVI.typeFlag);
                        if (!CollectionUtils.isEmpty(osAttributeVOList)) {
                            List<String> filedList = osAttributeVOList.stream().map(OsAttributeVO::getId).collect(Collectors.toList());
                            List<String> attributeList = VciBaseUtil.str2List(portalVIPO.getAttributeKey());
                            //数据库不存在
                            List<String> sjkExitsLists = Optional.ofNullable(attributeList).orElseGet(() -> new ArrayList<>()).stream().filter(s -> !attributeList.contains(s)).collect(Collectors.toList());
                            sjkExitsList.addAll(sjkExitsLists);
                        }
                    }catch (Throwable e){
                        e.printStackTrace();
                    }
                    portalVIList.add(portalVI);
                    if(StringUtils.isNotBlank(portalVIPO.getQtName())&&StringUtils.isNotBlank(portalVIPO.getQtNameFile())) {
                        QTInfo qt = new QTInfo();
                        String qtText = readLines(filePath + "." + portalVIPO.getQtNameFile());
                        qt.qtText=qtText;
                        qt.qtName = portalVIPO.getQtName();
                        qt.btmName=portalVIPO.getQtName();
                        QTInfo qt2 = null;
                        try {
                            qt2 = platformClientUtil.getQTDService().getQT(qt.qtName);
                            if (qt2 == null) {
                                platformClientUtil.getQTDService().saveQT(qt);
                            }
                        } catch (PLException e) {
                            e.printStackTrace();
                        }
                    }
                });
                if (checkInObj.length() > 0) {
                    throw  new Throwable( checkInObj.toString() + "表单不存在!");
                }
                if (checkPortalVI.length() > 0) {
                    throw  new Throwable( checkInObj.toString() + "名称已经存在!");
                }
                if(sjkExitsList.size()>0){
                    throw  new Throwable( checkInObj.toString() + "属性在类型中不存在!");
                }
                for (PortalVI pvi : portalVIList) {
                    platformClientUtil.getPortalService().savePortalVI(pvi);
                }
            }
        }catch (Throwable e){
          //  throw new Throwable("导入失败:"+e.getMessage());
           return BaseResult.fail("导入失败:"+e.getMessage());
        }
        return BaseResult.success("导入成功");
    }
    private String readLines(String filePath){
        StringBuffer sb=new StringBuffer();
        FileInputStream prmFile=null;
        try {
            prmFile = new FileInputStream(filePath);
            List<String>  prm= IOUtils.readLines(prmFile,"UTF-8");
            prm.stream().forEach(s -> {
                sb.append(s);
            });
        } catch (IOException e) {
            IOUtils.closeQuietly(prmFile);
            e.printStackTrace();
        }finally {
            IOUtils.closeQuietly(prmFile);
        }
        return sb.toString();
    }
    /**
     * æ‹·è´æ•°æ®åˆ°word模板中
     * @param fileName è¦å†™å…¥çš„æ•°æ®
Source/plt-web/plt-web-ui/src/App.vue
@@ -35,8 +35,8 @@
  margin: 50px auto;
}
.avue-dialog .el-dialog{
  top:47%;
  max-height: calc(100% - 100px);
  top:50%;
  max-height: calc(100% - 80px);
  -webkit-transform: translate(-50%, 0);
  transform: translate(-50%, -50%);
  margin-top: 0 !important;
Source/plt-web/plt-web-ui/src/api/modeling/linkType/api.js
@@ -89,3 +89,11 @@
  });
}
// é“¾æŽ¥ç±»åž‹æŸ¥è¯¢æ¨¡æ¿æŽ’序设置字段下拉,参数linkType=witoannotatelink&btmType=fileobject&direction=positive
export function getAllOrderbyAttributeByLink(params) {
  return request({
    url: "/api/linkTypeController/getAllOrderbyAttributeByLink",
    method: "get",
    params
  });
}
Source/plt-web/plt-web-ui/src/api/queryTemplate/linkTypeQuery.js
@@ -1,10 +1,28 @@
import request from '@/router/axios';
//链接类型查询模板
//列表
export function getObjTypeQTs(btName) {
  return request({
    url: "/api/templateController/getObjTypeQTs",
    method: "get",
    params:{
      btName
    }
  });
}
// åˆ›å»º
export function linkSave(params) {
  return request({
    url: "/api/templateController/linkSave",
    method: "post",
    data:params
  });
}
// åˆ é™¤
export function deleteLinkTemplate(params) {
  return request({
    url: "/api/templateController/deleteLinkTemplate",
    method: "delete",
    data:params
    params:params
  });
}
Source/plt-web/plt-web-ui/src/api/queryTemplate/queryDefine.js
@@ -11,16 +11,6 @@
  });
}
export function getObjTypeQTs(params) {
  return request({
    url: "/api/templateController/getObjTypeQTs",
    method: "get",
    params:{
      ...params
    }
  });
}
// ä¿®æ”¹
export function updateTemplate(params) {
  return request({
@@ -44,7 +34,9 @@
  return request({
    url: "/api/templateController/deleteTemplate",
    method: "delete",
    data:params
    params:{
      ...params
    }
  });
}
Source/plt-web/plt-web-ui/src/components/PLT-basic-component/basicForm.vue
@@ -184,8 +184,8 @@
    },
    initItem(item){
      const type=this.columnType[item.type] || item.type;
      item.text=item.text || item.label;
      const col= {
        ...item,
        label: item.text,
        prop: item.field,
        showProp:item.showField,
@@ -206,22 +206,23 @@
        valueFormat: item.dateFormate || "yyyy-MM-dd HH:mm:ss",
        format: item.dateFormate,
        rules: this.isEdit?(type=="select" || type=="refer" || type=="date" || type=="datetime"?[{
          required: item.required,
          required: item.required || false,
          message: `请选择${item.text}!`,
          trigger: "change"
        },{
          required: item.required,
          required: item.required|| false,
          message: `请选择${item.text}!`,
          trigger: "submit"
        }]:[{
          required: item.required,
          required: item.required|| false,
          message: `请输入${item.text}!`,
          trigger: "blur"
        },{
          required: item.required,
          required: item.required|| false,
          message: `请输入${item.text}!`,
          trigger: "submit"
        }]):[]
        }]):[],
        ...item
      };
      if(!this.isEdit){
        col.placeholder=col.label;
@@ -340,6 +341,9 @@
    },
    clearValidate(props){
      this.$refs.form.clearValidate(props)
    },
    updateDic(prop,data){
      this.$refs.form.updateDic(prop,data)
    }
  },
};
Source/plt-web/plt-web-ui/src/components/refer/BasicClassifyRefer.vue
@@ -47,7 +47,7 @@
      default:'70%'
    }, height: {
      type: String,
      default:'60%'
      default:(document.body.clientHeight-400)+'px'
    },
    reloadFormKey: {
      type: String,
Source/plt-web/plt-web-ui/src/components/refer/orgDeptRefer.vue
@@ -66,7 +66,7 @@
      default:'70%'
    }, height: {
      type: String,
      default:'60%'
      default:(document.body.clientHeight-400)+'px'
    },
    reloadFormKey: {
      type: String,
Source/plt-web/plt-web-ui/src/components/refer/orgUserRefer.vue
@@ -48,7 +48,7 @@
      default:'70%'
    }, height: {
      type: String,
      default:'60%'
      default:(document.body.clientHeight-400)+'px'
    },
    reloadFormKey: {
      type: String,
@@ -73,36 +73,32 @@
      rConfig.options.tableConfig={
        cols:[{
          prop: 'code',
          label: '用户名',
          label: (this.$project.user.code || "账号"),
          sortable: true,
          width: 150,
          search: true
        },{
          prop: 'name',
          label: '姓名',
          sortable: true,
          width: 150,
          search: true
        },  {
          prop: 'deptIdName',
          label: '所属部门',
          width: 260,
        },  {
          prop: 'sexText',
          label: '性别',
          width: 80
        }]
      };
      rConfig.options.classifys=[{
        title:'部门',
        treeUrl:'/org/deptController/referGrid', //分类的路径
        queryByClassifyUrl:'/permission/userQueryController/listUserByDeptId',  //'列表'
        queryByClassifyUrl:'/permission/userQueryController/gridUserByDeptIdGet',  //'列表'
        queryField:'deptId', //列表数据中分类的字段
        classifyValueField:'id',  //从树上获取的字段
      },{
        title:'角色',
        treeUrl:'/permission/roleController/referGrid', //分类的路径
        queryByClassifyUrl:'/permission/userQueryController/listUserByRoleId',  //'列表'
        queryByClassifyUrl:'/permission/userQueryController/gridUserInRoleIdGet',  //'列表'
        queryField:'roleId', //列表数据中分类的字段
        classifyValueField:'id',  //从树上获取的字段
      }];
Source/plt-web/plt-web-ui/src/components/refer/vciWebRefer.vue
@@ -178,10 +178,10 @@
  },
  data() {
    return {
      refertype: this.referConfig.type,
      refertype: this.referConfig.options.type,
      emitData: {},
      width:this.referConfig.width || '900px',
      height:this.referConfig.height || '500px'
      width:this.referConfig.options.width,
      height:this.referConfig.options.height
    };
  },
  computed: {
Source/plt-web/plt-web-ui/src/components/refer/vciWebReferClassify.vue
@@ -3,6 +3,7 @@
  <div>
    <el-dialog
      v-dialogDrag
      v-dialog-resize
      :title="title"
      :visible.sync="visible"
      :width="onlyTable?'60%': '80%'"
@@ -10,8 +11,8 @@
      class="avue-dialog avue-dialog--top"
      @close="dialogClose"
    >
      <el-container :style="{ 'height': height || '60vh' }">
        <el-aside width="300px" v-if="!onlyTable && classifys.length>0">
      <el-container :style="{ 'height': height }">
        <el-aside style="width:200px;height:100%" v-if="!onlyTable && classifys.length>0">
          <el-tabs type="border-card" style="height: 100%" @tab-click="tabClick"
                   v-model="tabName">
            <el-tab-pane
@@ -25,6 +26,7 @@
              <el-tree
                class="filter-tree"
                :style="'height: calc('+height+' - 100px);'"
                :data="treeItem.treeData"
                :lazy="lazy"
                :load="treeLoad"
@@ -37,7 +39,7 @@
            </el-tab-pane>
          </el-tabs>
        </el-aside>
        <el-main style="padding: 0 0 0 20px">
        <el-main style="padding: 0 0 0 20px;height:100%">
          <avue-crud
            ref="referCrud"
            v-model="formValue"
@@ -62,9 +64,9 @@
      </el-container>
      <div class="avue-dialog__footer">
        <div class="avue-dialog__footer--left valueInfo">{{ valueInfo }}</div>
        <el-button @click="escHandler">取 æ¶ˆ</el-button>
        <el-button @click="clearValue">清 ç©º</el-button>
        <el-button type="primary" @click="setValue">ç¡® å®š</el-button>
        <el-button @click="clearValue">清 ç©º</el-button>
        <el-button @click="escHandler">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
@@ -113,7 +115,7 @@
    },
    height: {
      type: String,
      default:'500px'
      default:(document.body.clientHeight-400)+'px'
    },
    reloadFormKey: {
      type: String,
@@ -153,10 +155,11 @@
      lazy: this.referConfig.options.loadType == 'node',
      loadType: { all: "all", node: "node" },
      url: this.referConfig.options.url || "referGrid",
      query: {},
      query: {},//列表的搜索条件
      where:{},//列表的查询条件
      loading: false,
      page: {
        layout: "sizes,prev,pager,next,jumper,total",
        layout: "sizes,prev,pager,next,jumper,sizes,total",
        pageSize: 10,
        currentPage: 1,
        total: this.referConfig.options.data
@@ -168,7 +171,6 @@
      option: {
        addBtn: false,
        columnBtn: false,
        calcHeight: 30,
        tip: false,
        menu: false,
        searchShow: true,
@@ -180,6 +182,7 @@
        reserveSelection: true,
        dialogClickModal: false,
        highlightCurrentRow: true,
        height:parseInt(this.height)-150,
        rowKey: "id",
        rowParentKey: "parentId",
        column: [],
@@ -273,6 +276,19 @@
    tabClick:function (tab){
      this.currentTreeIndex= tab.index;
      this.filterText=this.classifys[tab.index].filterText;
      this.option.column.forEach(item => {
        if (item.hideInClassify) {
          let queryField = this.classifys[this.currentTreeIndex].queryField;
          let inClassifyArray = item.hideInClassify.split(",");
          if (inClassifyArray.find((value => value === queryField))) {
            item.hide = true;
            item.showColumn = false;
          } else {
            item.hide = false;
            item.showColumn = true;
          }
        }
      });
    },
    handleFocus() {
      if (!this.disabled) {
@@ -476,13 +492,13 @@
      this.$refs.referCrud.toggleSelection();
    },
    refreshChange() {
      this.onLoad(this.page, this.query);
      this.onLoad(this.page);
    },
    onLoad(page, params = {}) {
      if (this.url) {
        this.loading = true;
        getList(
          Object.assign(params, this.params, this.query),
          Object.assign(params, this.params,this.where, this.query),
          page.currentPage,
          page.pageSize,
          this.url
@@ -558,13 +574,14 @@
      where[this.classifys[this.currentTreeIndex].queryField] = data.attributes[classifyValueField];
      this.url = this.classifys[this.currentTreeIndex].queryByClassifyUrl || this.options.url;
      this.page.currentPage=1;
      this.where = where;
      this.onLoad(this.page, where);
    },
  },
};
</script>
<style scoped>
<style lang="scss" scoped>
.valueInfo {
  float: left;
  border: 1px solid #e9e7e7;
@@ -573,4 +590,7 @@
  padding: 6px 15px;
  line-height: 1;
}
.filter-tree{
  overflow-y: auto;
}
</style>
Source/plt-web/plt-web-ui/src/components/refer/vciWebReferDefalut.vue
@@ -1,6 +1,7 @@
<template>
  <div>
    <el-dialog v-dialogDrag
               v-dialog-resize
               :title="title"
               :visible.sync="visible"
               :width="width|| '450'"
@@ -74,7 +75,7 @@
    },
    height: {
      type: String,
      default:'500px'
      default:(document.body.clientHeight-500)+'px'
    },
    reloadFormKey: {
      type: String,
@@ -99,7 +100,7 @@
      query: {},
      loading: false,
      page: {
        layout: "sizes,prev,pager,next,jumper,total",
        layout: "sizes,prev,pager,next,jumper,sizes,total",
        pageSize: 10,
        currentPage: 1,
        total: this.referConfig.options.data ? this.referConfig.options.data.length : 0
@@ -206,13 +207,11 @@
          prop: 'code',
          label: '编号',
          sortable: true,
          width: 150,
          search: true
        }, {
          prop: 'name',
          label: '名称',
          sortable: true,
          width: 260,
          search: true
        }, {
          prop: 'description',
@@ -220,7 +219,6 @@
        }, {
          prop: 'secretShow',
          label: '密级',
          width: 60,
          hide: (!this.controllerSecret)
        }];
      } else {
Source/plt-web/plt-web-ui/src/components/refer/vciWebReferTable.vue
@@ -1,10 +1,10 @@
<template>
  <div>
    <el-dialog v-dialogDrag
               v-dialog-resize
               :title="title"
               :visible.sync="visible"
               :width="width"
               :style="'height:'+height || 'auto'"
               :append-to-body="true"
               class="avue-dialog avue-dialog--top"
               @close="dialogClose">
@@ -78,7 +78,7 @@
    },
    height: {
      type: String,
      default:'500px'
      default:(document.body.clientHeight-500)+'px'
    },
    reloadFormKey: {
      type: String,
@@ -100,10 +100,10 @@
      },
      url: this.referConfig.options.url || 'referGrid',
      method: this.referConfig.options.method || 'get',
      query: {},
      query: this.referConfig.options.query || {orderBy: "createTime", orderMethod: "desc"},
      loading: false,
      page: {
        layout:  "sizes,prev,pager,next,jumper,total",
        layout:  "sizes,prev,pager,next,jumper,sizes,total",
        pageSize: 10,
        currentPage: 1,
        total: this.referConfig.options.data ? this.referConfig.options.data.length : 0
Source/plt-web/plt-web-ui/src/components/refer/vciWebReferTree.vue
@@ -44,7 +44,7 @@
      default:'70%'
    }, height: {
      type: String,
      default:'60%'
      default:(document.body.clientHeight-650)+'px'
    },
    reloadFormKey: {
      type: String,
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/linkTypeQuery/formDialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,487 @@
<template>
  <el-dialog v-dialogDrag
             :title="dialog.title"
             :visible.sync="dialog.showDialog"
             width="1600px"
             :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">
              </avue-tree>
            </div>
          </fieldset>
        </el-aside>
        <el-main>
          <fieldset style="margin: 0 10px">
            <legend>&nbsp;查询条件&nbsp;</legend>
            <div style="height: 300px;">
            </div>
          </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">
              </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 {gridTemplate} from "@/api/queryTemplate/queryDefine";
import {deleteAttributes} from "@/api/modeling/attributePool/api";
export default {
  name: "formDialog",
  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"
        }]
      },{
        label: '方向',
        prop: 'direction',
        type: 'radio',
        value:'positive',
        labelWidth:70,
        span: 3,
        dicData: [{
          label: '正向',
          value: 'positive'
        }, {
          label: '反向',
          value: 'opposite'
        }]
      },{
        label: '业务类型',
        prop: 'btmType',
        type: 'select',
        labelWidth:110,
        dicData: []
      }, {
        label: '版本版次',
        prop: 'version',
        type: 'select',
        span:5,
        dicData: [{
          label: '当前版本当前版次',
          value: 1
        }, {
          label: '当前版本最新版次',
          value: 2
        }, {
          label: '最新版本最新版次',
          value: 3
        }, {
          label: '已发布的最新版本',
          value: 7
        }],
        value: 1
      },{
        label: '查询是否有下级',
        prop: 'queryISLeaf',
        type: 'switch',
        labelWidth:140,
        dicData: [ {
          label: '否',
          value: false
        },{
          label: '是',
          value: true
        }],
        value:false
      }, {
        label: '子节点层次数',
        prop: 'level',
        type: 'number',
        span:3,
        value:1
      }],
      form:{
        btmName:'',
        qtName: '',
        queryTemplate:{
        }
      },
      formTemplate:{
        btmName:'',
        qtName: '',
        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,
      },
      linkQueryDefineForm:'',//链接类型查询模板定义选中值
      linkQueryDefineDic:[],//链接类型查询模板定义下拉数据
      //链接类型查询模板定义选中项属性
      linkTreeData: [],
      businessQueryDefineForm:'',//业务类型查询模板定义选中值
      businessQueryDefineDic:[],//业务类型查询模板定义下拉数据
      //业务类型查询模板定义选中项属性
      businessTreeData: [],
    };
  },
  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.showDialog = true;
      this.dialog.type = mode;
      this.form.btmName = btmName;
      this.treeData = data.treeData;
      if (data.selectData) {
        this.selectData = data.selectData;
        this.orderInfoList = JSON.parse(JSON.stringify(data.selectData.queryTemplate.orderInfoList));//已有排序
      } else {
        this.selectData = {};
        this.orderInfoList =[];
      }
      this.getTemp(data.treeData.label,true)
    },
    cancelDialog() {
      this.$nextTick(() => {
        this.form = this.formTemplate;
        this.orderInfoList =[];
        this.dialog.loading = false;
        this.dialog.showDialog = false;
        this.$refs.form.resetFields();
        this.businessQueryDefineForm='';
        this.linkQueryDefineForm='';
      });
    },
    submitDialog() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          linkSave(this.form).then(res => {
            if (res.success) {
              this.$message.success("保存成功");
              this.cancelDialog();
              this.$emit("refresh");
            }
          });
        } else {
          return false;
        }
      });
    },
    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) {
        gridTemplate({btmName: btmName, linkFlag: linkFlag}).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.abNames.map(item => {
          return {
            label: item,
            value: item
          };
        });
        this.linkTreeData = [{
          label: data.value,
          value: data.value,
          children: childData
        }]
      }
    },
    businessQueryDefineChange(data) {
      if (data.value) {
        const childData = data.item.abNames.map(item => {
          return {
            label: item,
            value: item
          };
        });
        this.businessTreeData = [{
          label: data.value,
          value: data.value,
          children: childData
        }]
      }
    }
  },
}
</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/linkTypeQuery/index.vue
@@ -1,6 +1,5 @@
<template>
  <el-container>
    <el-aside>
      <basic-container>
        <div ref="TreeBox" style="height: calc(100vh - 154px);!important;">
@@ -21,32 +20,37 @@
    <el-main>
      <basic-container>
        <avue-crud  ref="crud"
                    :data="crudData" :option="crudOption" :table-loading="tableLoading" style="margin-top: 10px">
          <template slot="menuLeft" slot-scope="scope">
        <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>
          </template>
        </div>
        <avue-crud  ref="crud"
                    @selection-change="selectionChange"
                    @row-click="rowClick"
                    :data="crudData" :option="crudOption" :table-loading="tableLoading" style="margin-top: 10px">
        </avue-crud>
        <form-dialog ref="formRef" @refresh="getTemp"></form-dialog>
      </basic-container>
    </el-main>
    <div style="width: 300px;">111</div>
  </el-container>
</template>
<script>
import {gridLink} from "@/api/modeling/linkType/api";
import { gridTemplate, saveTemplate, updateTemplate} from "@/api/queryTemplate/queryDefine";
import {deleteLinkTemplate} from "@/api/queryTemplate/linkTypeQuery";
import {getObjTypeQTs,deleteLinkTemplate} from "@/api/queryTemplate/linkTypeQuery";
import func from "@/util/func";
import {dateFormat} from "@/util/date";
import basicOption from "@/util/basic-option";
import FormDialog from "./formDialog.vue"
export default {
  name: "index",
  components: {FormDialog},
  data() {
    return {
      treeOption: {
@@ -90,17 +94,31 @@
        height: "auto",
        calcHeight: -40,
        tip: false,
        header:false,
        column: [{
          label: '查询模板名称',
          prop: 'name'
          prop: 'qtName'
        }, {
          label: '创建人',
          prop: 'creator'
        }, {
          label: '创建时间',
          prop: 'createTime',
          prop: 'createTimeText'
        }, {
          label: '方向',
          prop: 'direction',
          formatter:function (row, value) {
            return dateFormat(new Date(value))
            if (row.queryTemplate.direction == 'positive') {
              return '正向'
            }else{
              return '反向'
            }
          }
        }, {
          label: '业务类型',
          prop: 'btmType',
          formatter:function (row, value) {
            return row.queryTemplate.btmType;
          }
        }]
      },
@@ -130,72 +148,41 @@
      this.tableLoading = true;
      this.getTemp();
    },
    //获取查询模板列表
    getTemp() {
      gridTemplate({btmName: this.nodeRow.label, linkFlag: true}).then(res => {
      getObjTypeQTs(this.nodeRow.label).then(res => {
        this.crudData = res.data.data;
        this.tableLoading = false;
        this.selectionClear();
      })
    },
    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});
    },
    //修改
    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(() => {
      });
    },
    // æ–°å¢žç¼–辑保存
    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;
      this.$refs.formRef.openDialog(this.nodeRow.label,'修改','edit',{treeData:this.nodeRow,selectData:this.selectionRow[0]});
    },
    //删除
    delHandler() {
      if (func.isEmptyObject(this.nodeRow)) {
      if (this.selectionRow.length==0) {
        this.$message.error('请选择数据');
        return;
      }
@@ -204,11 +191,10 @@
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteLinkTemplate({
          name: this.templateForm,
          btmName: this.nodeRow.label,
          linkFlag: false
        }).then(res => {
        let names=this.selectionRow.map(item=>{
          return item.qtName
        })
        deleteLinkTemplate(names).then(res => {
          if (res.data.code === 200) {
            this.$message.success(res.data.obj);
          }
Source/plt-web/plt-web-ui/src/views/modelingMenu/queryTemplate/queryDefine/index.vue
@@ -335,7 +335,7 @@
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteTemplate({name:this.templateForm,btmName: this.nodeRow.label, linkFlag: this.radioForm == 1}).then(res => {
        deleteTemplate({name:this.templateForm}).then(res => {
          if (res.data.code === 200) {
            this.$message.success(res.data.obj);
            this.getTemp();