Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLinkTypeController.java
@@ -18,8 +18,11 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** @@ -155,4 +158,74 @@ return objectBaseResult; } } /** * 龿¥ç±»åå é¤ * linkType 龿¥ç±»å对象 * @return å é¤ç»æ */ @DeleteMapping("/deleteLink") public BaseResult deleteLink(@RequestBody LinkType linkType){ try { return linkTypeService.deleteLink(linkType); } catch (PLException e) { BaseResult objectBaseResult = new BaseResult<>(); objectBaseResult.setCode(Integer.parseInt(e.code)); objectBaseResult.setMsg(Arrays.toString(e.messages)); return objectBaseResult; } } /** * ä¸è´æ§æ£æ¥ * @return å é¤ç»æ */ @GetMapping("/checkLinkType") public BaseResult checkLinkType(){ try { return linkTypeService.checkLinkType(); } catch (PLException e) { BaseResult objectBaseResult = new BaseResult<>(); objectBaseResult.setCode(Integer.parseInt(e.code)); objectBaseResult.setMsg(Arrays.toString(e.messages)); return objectBaseResult; } } /** * ä¸è´æ§æ£æ¥ä¿®å¤æ°æ®åºè¡¨ * repairData éè¦ä¿®å¤çæ°æ® * @return ä¿®å¤ç»æ */ @PostMapping("/repairTable") public BaseResult repairTable(@RequestBody String repairData){ try { return linkTypeService.repairTable(repairData); } catch (PLException e) { BaseResult objectBaseResult = new BaseResult<>(); objectBaseResult.setCode(Integer.parseInt(e.code)); objectBaseResult.setMsg(Arrays.toString(e.messages)); return objectBaseResult; } catch (IOException e) { BaseResult objectBaseResult = new BaseResult<>(); objectBaseResult.setCode(500); objectBaseResult.setMsg(e.getMessage()); return objectBaseResult; } } /** * å建è§å¾ * @return åå»ºç»æ */ @PostMapping("/createView") public BaseResult createView(){ try { return linkTypeService.createView(); } catch (PLException e) { BaseResult objectBaseResult = new BaseResult<>(); objectBaseResult.setCode(Integer.parseInt(e.code)); objectBaseResult.setMsg(Arrays.toString(e.messages)); return objectBaseResult; } } } Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLinkTypeServiceI.java
@@ -9,6 +9,7 @@ import com.vci.pagemodel.OsLinkTypeAttributeVO; import com.vci.pagemodel.OsLinkTypeVO; import java.io.IOException; import java.util.Collection; import java.util.List; import java.util.Map; @@ -122,4 +123,26 @@ * @return ä¿åç»æ */ BaseResult addAndEditLink(LinkType linkType, Boolean addFlag) throws PLException; /** * 龿¥ç±»åå é¤ * linkType 龿¥ç±»å对象 * @return å é¤ç»æ */ BaseResult deleteLink(LinkType linkType) throws PLException; /** * ä¸è´æ§æ£æ¥ * @return å é¤ç»æ */ BaseResult checkLinkType() throws PLException; /** * ä¸è´æ§æ£æ¥ä¿®å¤æ°æ®åºè¡¨ * repairData éè¦ä¿®å¤çæ°æ® * @return ä¿®å¤ç»æ */ BaseResult repairTable(String repairData) throws PLException, IOException; /** * å建è§å¾ * @return åå»ºç»æ */ BaseResult createView() throws PLException; } Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java
@@ -1,7 +1,10 @@ package com.vci.web.service.impl; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.vci.corba.common.PLException; import com.vci.corba.omd.atm.AttributeDef; import com.vci.corba.omd.btm.BizType; import com.vci.corba.omd.data.BusinessObject; import com.vci.corba.omd.ltm.LinkType; import com.vci.omd.utils.ObjectTool; @@ -26,6 +29,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @@ -369,6 +373,236 @@ platformClientUtil.getLinkTypeService().modifyLinkType(linkType); return BaseResult.success(null,"ä¿åæåï¼"); } /** * 龿¥ç±»åå é¤ * linkType 龿¥ç±»å对象 * @return å é¤ç»æ */ @Override public BaseResult deleteLink(LinkType linkType) throws PLException { if(platformClientUtil.getLinkTypeService().hasData(linkType.name)){ throw new PLException("500",new String[] {"ç±»åå·²æå®ä¾, ä¸è¿è¡å 餿ä½"}); } boolean flag = platformClientUtil.getLinkTypeService().deleteLinkType(linkType); if(!flag){ throw new PLException("500",new String[] {"å é¤å¤±è´¥"}); }else{ return BaseResult.success(); } } /** * ä¸è´æ§æ£æ¥ * @return å é¤ç»æ */ @Override public BaseResult checkLinkType() throws PLException { String[] result = platformClientUtil.getLinkTypeService().linkTypeConsistencyCheck(); Map<String, String> dbCheckMap = new HashMap<String, String>(); for(int i = 0; i < result.length; i++){ String info = result[i]; if(info.equals("")){ continue; } String[] infos = info.split("/DML"); String typeName = infos[0]; String dml = infos[1]; dbCheckMap.put(typeName, dml); } Map<String, List<String>> btmCheckMap = usedBtmCheck(); if(dbCheckMap.size() < 1 && (btmCheckMap == null || btmCheckMap.size() < 1)){ return BaseResult.successMsg("æ°æ®åºä¸çè¡¨ç»æä¸ç±»åä¸è´, 龿¥ç±»åå¼ç¨çä¸å¡ç±»åå ¨é¨æ£ç¡®åå¨,æ éä¿®å¤!!"); }else{ Map<String,Object> returnData = new HashMap<>(); returnData.put("dbCheckMap",dbCheckMap); returnData.put("btmCheckMap",btmCheckMap); List<Map> list = new ArrayList<>(); list.add(returnData); return BaseResult.dataList(500,list,"éè¦è¿è¡åçä¿®å¤ï¼ï¼"); } } /** * ä¸è´æ§æ£æ¥ä¿®å¤æ°æ®åºè¡¨ * repairData éè¦ä¿®å¤çæ°æ® * @return ä¿®å¤ç»æ */ @Override public BaseResult repairTable(String repairData) throws PLException, IOException { Map<String, Object> map = new ObjectMapper().readValue(repairData, new TypeReference<Map<String,Object>>(){}); HashMap<String,Object> dbCheckMap = (HashMap<String, Object>) map.get("dbCheckMap"); HashMap<String,List<String>> btmCheckMap = (HashMap<String, List<String>>) map.get("btmCheckMap"); List returnList = new ArrayList<>(); Map returnMap = new HashMap(); if(dbCheckMap.size() > 0){ List<String> list = getRepairDML(dbCheckMap); if(list.size() < 1){ return BaseResult.success(); } String[] result = platformClientUtil.getLinkTypeService().executeRepair(list.toArray(new String[0])); List<String> resultList = Arrays.asList(result); for (String typeName : resultList) { if(dbCheckMap.containsKey(typeName)){ dbCheckMap.remove(typeName); }else if(dbCheckMap.containsKey(typeName + "_ADD")){ String sql = String.valueOf(dbCheckMap.get(typeName)); sql = sql.substring(sql.indexOf(";") + 1, sql.length()); dbCheckMap.put(typeName, sql); }else if(dbCheckMap.containsKey(typeName + "_DROP")){ String sql = String.valueOf(dbCheckMap.get(typeName)); sql = sql.substring(0, sql.indexOf(";")); dbCheckMap.put(typeName, sql); } } if(!dbCheckMap.isEmpty()){ returnMap.put("dbCheckMap",dbCheckMap); } } if(btmCheckMap.size() > 0){ List<String> result = repairXml(btmCheckMap); for(int i = 0; i < result.size(); i++){ String typeName = result.get(i); if(btmCheckMap.containsKey(typeName)){ btmCheckMap.remove(typeName); } } if(!btmCheckMap.isEmpty()){ returnMap.put("btmCheckMap",btmCheckMap); } } returnList.add(returnMap); return BaseResult.success(returnList); } /** * å建è§å¾ * @return åå»ºç»æ */ @Override public BaseResult createView() throws PLException { boolean f = platformClientUtil.getLinkTypeService().createView(); if(f){ return BaseResult.success("å建è§å¾æå"); }else{ return BaseResult.success("å建è§å¾å¤±è´¥"); } } /** * ä¿®å¤é¾æ¥ç±»åçxmlæä»¶ * @return */ private List<String> repairXml(HashMap<String, List<String>> btmCheckMap){ List<String> result = new ArrayList<String>(); for(Iterator<String> ite = btmCheckMap.keySet().iterator(); ite.hasNext();){ String linkName = ite.next(); List<String> list = btmCheckMap.get(linkName); LinkType link = null; try { link = platformClientUtil.getLinkTypeService().getLinkType(linkName); } catch (PLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); continue; } //å°listä¸å å«çF_btmç§»é¤, éæ°è®¾ç½®btmItemsFrom String[] btms_ = link.btmItemsFrom; List<String> btms = new ArrayList<String>(); for(int i = 0; i < btms_.length; i++){ if(!list.contains("F_" + btms_[i])){ btms.add(btms_[i]); }else{ if(link.primitivesFrom.equals(btms_[i])){ link.primitivesFrom = ""; } } } link.btmItemsFrom = btms.toArray(new String[0]); //å°listä¸å å«çT_btmç§»é¤, éæ°è®¾ç½®btmItemsTo btms_ = link.btmItemsTo; btms = new ArrayList<String>(); for(int i = 0; i < btms_.length; i++){ if(!list.contains("T_" + btms_[i])){ btms.add(btms_[i]); }else{ if(link.primitivesTo.equals(btms_[i])){ link.primitivesTo = ""; } } } link.btmItemsTo = btms.toArray(new String[0]); link.id = link.name; try { if(platformClientUtil.getLinkTypeService().modifyLinkType(link)){ result.add(linkName); } } catch (PLException e) { e.printStackTrace(); } } return result; } /** * è·åéè¦ä¿®å¤ç伪sql * @return */ private List<String> getRepairDML(HashMap<String, Object> dbCheckMap) { List<String> list = new ArrayList<String>(); for(Iterator<String> ite = dbCheckMap.keySet().iterator(); ite.hasNext();){ String type = ite.next(); String dml = String.valueOf(dbCheckMap.get(type)); list.add(type + "/DML" + dml); } return list; } /** * æ£æ¥ææç龿¥ç±»å, å½é¾æ¥ç±»åä¸å¼ç¨çä¸å¡ç±»åå·²ç»ä¸å卿¶, å é¤è¯¥é¾æ¥ç±»åä¸å¯¹ä¸å¡ç±»åçå¼ç¨ * @return */ private Map<String, List<String>> usedBtmCheck(){ try { Map<String, List<String>> map = new HashMap<String, List<String>>(); LinkType[] links = platformClientUtil.getLinkTypeService().getLinkTypes(); for(int i = 0; i < links.length; i++){ LinkType link = links[i]; String[] btms = link.btmItemsFrom; for(int k = 0; k < btms.length; k++){ String btmName = btms[k]; BizType btm = platformClientUtil.getBtmService().getBizTypeByName(btmName); if(btm == null || btm.name.equals("")){ List<String> list = map.get(link.name); if(list == null){ list = new ArrayList<String>(); list.add("F_" + btmName); }else{ list.add("F_" + btmName); } map.put(link.name, list); } } btms = link.btmItemsTo; for(int k = 0; k < btms.length; k++){ String btmName = btms[k]; BizType btm = platformClientUtil.getBtmService().getBizTypeByName(btmName); if(btm == null || btm.name.equals("")){ List<String> list = map.get(link.name); if(list == null){ list = new ArrayList<String>(); list.add("T_" + btmName); }else{ list.add("T_" + btmName); } map.put(link.name, list); } } } return map; } catch (PLException e) { e.printStackTrace(); } return null; } /** Source/plt-web/plt-web-ui/src/api/modeling/attributePool/api.js
@@ -12,3 +12,39 @@ } }); } // // å建 // export function gridAttribute(params) { // return request({ // url: "/api/attributeController/gridAttribute", // method: "post", // params // }); // } // å é¤ export function deleteAttributes(params) { return request({ url: "/api/attributeController/deleteAttributes", method: "delete", data:params }); } // æ¥çåºç¨èå´ export function getUsedAttributeList(params) { return request({ url: "/api/attributeController/getUsedAttributeList", method: "get", params:params }); } // æä¸¾ç±»åéæ©æ¡æ¥è¯¢ export function getEnumMapByType(params) { return request({ url: "/api/webEnumController/getEnumMapByType", method: "get", params:params }); } Source/plt-web/plt-web-ui/src/api/modeling/linkType/api.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ import request from '@/router/axios'; // å表æ¥è¯¢ export function gridLink() { return request({ url: "/api/linkTypeController/gridLink", method: "get", }); } // éè¿å±æ§æ± è¿åç attributes è·å宿´çä¿¡æ¯ export function getByAttributeNames(params) { return request({ url: "/api/attributeController/getByAttributeNames", method: "get", params }); } Source/plt-web/plt-web-ui/src/util/basic-option.js
@@ -9,6 +9,7 @@ stripe:true, headerAlign: 'center', align: 'center', emptyText: 'ææ å 容', // selection æ¯å¦æéæ©æ¡ // indexFixed:true/left/right, åºå®å // menu:false, æ¯å¦ææä½æ Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/attributePool/index.vue
@@ -41,103 +41,364 @@ <template slot="label"> åç§° </template> åç§° {{ lastItem.id }} </el-descriptions-item> <el-descriptions-item> <template slot="label"> æ ç¾ </template> æ ç¾ {{ lastItem.name }} </el-descriptions-item> <el-descriptions-item> <template slot="label"> æè¿° </template> æè¿° {{ lastItem.description }} </el-descriptions-item> <el-descriptions-item> <template slot="label"> æä½ç±»å </template> æä½ç±»å {{ lastItem.attributeDataType }} </el-descriptions-item> </el-descriptions> <el-descriptions :column="1" border class="margin-top" size="medium" title="VTString"> <!-- å¼å --> <el-descriptions v-if="!isSpecialDataType" :column="1" :title="lastItem.attributeDataType" border class="margin-top" size="medium"> <el-descriptions-item> <template slot="label"> å 许为空 </template> <el-tag type="success">æ¯</el-tag> <el-tag :type="lastItem.nullableFlag ? 'success' : 'danger'"> {{ lastItem.nullableFlag ? 'æ¯' : 'å¦' }} </el-tag> </el-descriptions-item> <el-descriptions-item> <el-descriptions-item v-if="accuracy"> <template slot="label"> 精度 </template> 精度 </el-descriptions-item> <el-descriptions-item> <el-descriptions-item v-if="length"> <template slot="label"> é¿åº¦ </template> é¿åº¦ {{ lastItem.attrLength }} </el-descriptions-item> <el-descriptions-item> <template slot="label"> é»è®¤å¼ </template> é»è®¤å¼ {{ lastItem.defaultValue }} </el-descriptions-item> </el-descriptions> <el-descriptions :column="1" border class="margin-top" size="medium" title="å¼å"> <!-- VTString --> <el-descriptions v-if="lastItem.attributeDataType === 'VTString' || !lastItem.attributeDataType" :column="1" border class="margin-top" size="medium" title="å¼å"> <el-descriptions-item> <template slot="label"> å½åç±»å </template> ä¸å¡ç±»å {{ lastItem.version ? '龿¥ç±»å' : 'ä¸å¡ç±»å' }} </el-descriptions-item> <el-descriptions-item> <template slot="label"> å½åç±»åå¼ </template> {{ lastItem.version ? lastItem.linkTypeName : lastItem.btmTypeId }} </el-descriptions-item> <el-descriptions-item> <el-descriptions-item v-if="lastItem.version"> <template slot="label"> å½åçæ¬æ¬¡ </template> {{ lastItem.version }} </el-descriptions-item> <el-descriptions-item> <template slot="label"> ä½¿ç¨æä¸¾ </template> <el-tag type="success">æ¯</el-tag> <el-tag :type="lastItem.enumId ? 'success' : 'danger'"> {{ lastItem.enumId ? 'æ¯' : 'å¦' }} </el-tag> </el-descriptions-item> <el-descriptions-item> <template slot="label"> æä¸¾ç±»å </template> æä¸¾ç±»å {{ lastItem.enumId }} </el-descriptions-item> <el-descriptions-item> <template slot="label"> æä¸¾å¼ åå¼èå´ </template> <div style="width: 330px; height: 80px;overflow: auto"> <el-tag v-for="item in rangeList" plain style="margin: 5px">{{ item }}</el-tag> </div> </el-descriptions-item> </el-descriptions> <!-- VTInteger && VTInteger --> <el-descriptions v-if="lastItem.attributeDataType === 'VTInteger' || lastItem.attributeDataType === 'VTInteger'" :column="1" border class="margin-top" size="medium" title="å¼å"> <el-descriptions-item> <template slot="label"> ä½¿ç¨æä¸¾ </template> <el-tag :type="lastItem.enumId ? 'success' : 'danger'"> {{ lastItem.enumId ? 'æ¯' : 'å¦' }} </el-tag> </el-descriptions-item> <el-descriptions-item> <template slot="label"> æä¸¾ç±»å </template> {{ lastItem.enumId }} </el-descriptions-item> <el-descriptions-item> <template slot="label"> åå¼èå´ </template> <div style="width: 330px; height: 80px;overflow: auto"> <el-tag v-for="item in rangeList" plain style="margin: 5px">{{ item }}</el-tag> </div> </el-descriptions-item> </el-descriptions> <!-- VTDouble --> <el-descriptions v-if="lastItem.attributeDataType === 'VTDouble'" :column="1" border class="margin-top" size="medium" title="å¼å"> <el-descriptions-item> <template slot="label"> åå¼èå´ </template> <div style="width: 330px; height: 80px;overflow: auto"> <el-tag v-for="item in rangeList" plain style="margin: 5px">{{ item }}</el-tag> </div> </el-descriptions-item> </el-descriptions> <!-- VTDate VTTime VTDateTime VTNote VTFilePath VTClobå䏿¾ç¤º VTBoolean䏿¾ç¤ºå¼å åªæ¾ç¤ºç±»å --> </div> </basic-container> </el-aside> <!-- æ¥ç使ç¨èå´ --> <el-dialog v-dialogDrag v-loading="checkViewLoading" :visible.sync="checkViewVisible" append-to-body="true" class="avue-dialog" title="æ¥ç使ç¨èå´" width="70%" > <avue-crud ref="checkViewCrud" :data="checkViewData" :option="checkViewOption" @search-change="checkHandleSearch" @search-reset="checkHandleReset" > </avue-crud> </el-dialog> <!-- æ°å¢å¯¹è¯æ¡ --> <el-dialog v-dialogDrag v-loading="addLoading" :visible.sync="addVisible" append-to-body="true" class="avue-dialog" title="å建" width="65%" > <el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-row> <div class="addDialog"> <div> <h3>屿§é¡¹</h3> <el-col :span="12"> <el-form-item label="åç§°ï¼" prop="id"> <el-input v-model="form.id"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="æ ç¾ï¼"> <el-input v-model="form.name"></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="屿§ç±»åï¼"> <el-select v-model="form.attributeDataType" placeholder="è¯·éæ©å±æ§ç±»å" @change="attributeDataTypeChange"> <el-option v-for="item in typeSelectList" :label="item" :value="item"></el-option> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="æè¿°ï¼"> <el-input v-model="form.description" :rows="2" type="textarea"></el-input> </el-form-item> </el-col> </div> <div v-if="!hideType" class="addDialogBottom"> <div class="left"> <h3>{{ form.attributeDataType }}</h3> <el-form-item v-if="form.attributeDataType !== 'VTInteger' && form.attributeDataType !== 'VTLong' && form.attributeDataType !== 'VTDouble' && form.attributeDataType !== 'VTBoolean'" label="é¿åº¦ï¼"> <el-input v-model="form.attrLength"></el-input> </el-form-item> <el-form-item v-if="form.attributeDataType === 'VTDouble'" label="精度ï¼"> <el-input v-model="form.precisionLength"></el-input> </el-form-item> <el-form-item v-if="form.attributeDataType === 'VTDouble'" label="é¿åº¦ï¼"> <el-input v-model="form.scaleLength"></el-input> </el-form-item> <el-form-item v-if="form.attributeDataType !== 'VTBoolean'" label="é»è®¤å¼ï¼"> <el-input v-model="form.defaultValue"></el-input> </el-form-item> <el-form-item v-if="form.attributeDataType === 'VTBoolean'" label="é»è®¤å¼ï¼"> <el-select> <el-option label="false" value="false"></el-option> <el-option label="true" value="true"></el-option> </el-select> </el-form-item> <el-form-item label="å 许为空ï¼"> <el-switch v-model="form.nullableFlag"></el-switch> </el-form-item> </div> <el-divider direction="vertical"></el-divider> <!-- VTString --> <div v-if="form.attributeDataType === 'VTString'" class="right"> <h3>å¼å</h3> <el-form-item label="å½åå¼åç±»åï¼"> <el-select v-model="form.attributeSelectType" placeholder="è¯·éæ©å±æ§ç±»å" @change="attributeSelectTypeChange"> <el-option label="ä¸å¡ç±»å" value="business"></el-option> <el-option label="龿¥ç±»å" value="link"></el-option> </el-select> </el-form-item> <el-form-item label="éæ©åç §ç±»åï¼"> <el-input v-model="form.attrLength"></el-input> </el-form-item> <el-form-item label="ä½¿ç¨æä¸¾ï¼"> <el-switch v-model="form.enumSwitch" @change="switchEnumChange"></el-switch> </el-form-item> <el-form-item :label="form.enumSwitch ? 'æä¸¾éæ©ï¼' : 'æ·»å æä¸¾å¼ï¼'"> <el-select v-if="form.enumSwitch" v-model="form.attributeDataTypePick" placeholder="è¯·éæ©æä¸¾ç±»å" @change="enumSelectChange"> <el-option v-for="(item,index) in attributeDataTypePickList" :key="index" :label="item.key" :value="item.key"></el-option> </el-select> <el-input v-if="!form.enumSwitch" v-model="form.enumAddValue"> </el-input> </el-form-item> <el-form-item v-if="!form.enumSwitch" label="è¿ç®ç¬¦ï¼"> <div> <el-button size="mini" @click="enumAddHandler"> =</el-button> </div> </el-form-item> <el-form-item label="å½åæä¸¾å¼ï¼"> <textarea v-model="form.range" style="width: 330px; height: 80px; border: 1px solid #DCDFE6; overflow: auto; text-align: left;resize: none;"> </textarea> </el-form-item> </div> <!-- VTInteger VTLong --> <div v-if="form.attributeDataType === 'VTInteger' || form.attributeDataType === 'VTLong' " class="right"> <h3>å¼å</h3> <el-form-item label="ä½¿ç¨æä¸¾ï¼"> <el-switch v-model="form.enumSwitch" @change="switchEnumChange"></el-switch> </el-form-item> <el-form-item :label="form.enumSwitch ? 'æä¸¾éæ©ï¼' : 'æ·»å æä¸¾å¼ï¼'"> <el-select v-if="form.enumSwitch" v-model="form.attributeDataTypePick" placeholder="è¯·éæ©æä¸¾ç±»å" @change="enumSelectChange"> <el-option v-for="(item,index) in attributeDataTypePickList" :key="index" :label="item.key" :value="item.key"></el-option> </el-select> <el-input v-if="!form.enumSwitch" v-model="form.enumAddValue"> </el-input> </el-form-item> <el-form-item v-if="!form.enumSwitch" label="è¿ç®ç¬¦ï¼"> <div> <el-button size="mini"> ></el-button> <el-button size="mini"> <</el-button> <el-button size="mini"> >=</el-button> <el-button size="mini"> <=</el-button> <el-button size="mini"> =</el-button> <el-button size="mini"> !=</el-button> <el-button size="mini"> ( )</el-button> </div> </el-form-item> <el-form-item label="å½åæä¸¾å¼ï¼"> <textarea v-model="form.range" style="width: 330px; height: 80px; border: 1px solid #DCDFE6; overflow: auto; text-align: left;resize: none;"> </textarea> </el-form-item> </div> <!-- VTDouble --> <div v-if="form.attributeDataType === 'VTDouble'" class="right"> <h3>å¼å</h3> <el-form-item label="æ·»å æä¸¾å¼ï¼"> <el-input v-model="form.enumAddValue"> </el-input> </el-form-item> <el-form-item label="è¿ç®ç¬¦ï¼"> <div> <el-button size="mini"> ></el-button> <el-button size="mini"> <</el-button> <el-button size="mini"> >=</el-button> <el-button size="mini"> <=</el-button> <el-button size="mini"> =</el-button> <el-button size="mini"> !=</el-button> <el-button size="mini"> ( )</el-button> </div> </el-form-item> <el-form-item label="å½åæä¸¾å¼ï¼"> <textarea v-model="form.range" style="width: 330px; height: 80px; border: 1px solid #DCDFE6; overflow: auto; text-align: left;resize: none;"> </textarea> </el-form-item> </div> </div> </div> </el-row> </el-form> </el-dialog> </el-container> </template> <script> import {gridAttribute} from "@/api/modeling/attributePool/api"; import {gridAttribute, getUsedAttributeList, getEnumMapByType} from "@/api/modeling/attributePool/api"; import basicOption from '@/util/basic-option'; import {column} from "./option" @@ -163,7 +424,100 @@ pageSizes: [10, 30, 50, 100], }, searchParams: {}, selectList: [] selectList: [], checkViewData: [], checkViewDataSearch: [], checkViewVisible: false, checkViewLoading: false, checkViewOption: { ...basicOption, addBtn: false, menu: false, searchMenuSpan: 8, refreshBtn: false, selection: false, column: [ { label: 'åç§°', prop: 'attributeName', sortable: true, }, { label: 'æ¥æº', prop: 'source', sortable: true, search: true }, { label: '说æ', prop: 'desc', } ] }, addVisible: false, addLoading: false, form: { id: "", name: "", attributeDataType: "VTString", description: "", nullableFlag: true, attrLength: 50, enumId: false, enumSwitch: false, attributeDataTypePick: "", enumAddValue: '', range: '' }, defaultForm: { id: "", name: "", attributeDataType: "VTString", description: "", nullableFlag: true, attrLength: 50, enumId: false, enumSwitch: false, attributeDataTypePick: "", enumAddValue: '', range: '', attributeSelectType:'business' }, rules: [], typeSelectList: ['VTString', 'VTInteger', 'VTLong', 'VTDouble', 'VTBoolean', 'VTDate', 'VTTime', 'VTDateTime', 'VTNote', 'VTFilePath', 'VTClob'], attributeDataTypePickList: [], enumAddListChange: [] } }, computed: { lastItem() { return this.selectList.length > 0 ? this.selectList[this.selectList.length - 1] : {}; }, isSpecialDataType() { // å®ä¹ä¸ä¸ªå 嫿æéè¦æ¯è¾çç±»åçæ°ç» const specialTypes = ['VTDate', 'VTTime', 'VTDateTime', 'VTNote', 'VTFilePath', 'VTClob']; // 夿 lastItem.attributeDataType æ¯å¦å¨è¿ä¸ªæ°ç»ä¸ return specialTypes.includes(this.lastItem.attributeDataType); }, rangeList() { if (this.lastItem.range) { return this.lastItem.range.split(';'); } }, accuracy() { return this.lastItem.attributeDataType === 'VTDouble'; }, length() { return this.lastItem.attributeDataType === 'VTString' || this.lastItem.attributeDataType === 'VTDoubule'; }, // çäºå ¶ä¸ä»¥ä¸å¼ ä¸å±ç¤ºæä¸¾ hideType() { return this.form.attributeDataType === 'VTNote' || this.form.attributeDataType === 'VTDate' || this.form.attributeDataType === 'VTTime' || this.form.attributeDataType === 'VTClob' || this.form.attributeDataType === 'VTDateTime' || this.form.attributeDataType === 'VTFilePath'; } }, methods: { @@ -203,6 +557,7 @@ // ç¹å»è¡ rowClickHandler(row) { this.$refs.userCrud.toggleRowSelection(row); console.log(row); }, // æ¡æ° @@ -215,22 +570,132 @@ this.page.currentPage = val; }, // å建æå¼å¯¹è¯æ¡ rowSaveHandlerClick() { this.addVisible = true; this.form = this.defaultForm; this.getEnumMapByTypeHandler('VTString'); }, allDelHandler() { }, // æ¥ç使ç¨èå´ chekView() { if (this.selectList.length <= 0) { this.$message.warning('请è³å°éæ©ä¸æ¡æ°æ®'); return; } if (this.selectList.length > 1) { this.$message.warning('åªè½éæ©ä¸æ¡æ°æ®è¿è¡æ¥ç'); return; } getUsedAttributeList({attributeName: this.selectList[0].id}).then(res => { if (res.data.code === 200) { this.checkViewVisible = true; this.checkViewData = res.data.data; this.checkViewDataSearch = res.data.data; } }) }, // æ¥ç使ç¨èå´æ¥è¯¢ checkHandleSearch(params, done) { const {source} = params; if (!params.source) { this.checkViewData = this.checkViewDataSearch; return done(); } ; this.checkViewData = this.checkViewData.filter(item => { return item.source && item.source.includes(source); }); done(); }, // æ¥ç使ç¨èå´éç½® checkHandleReset() { this.checkViewData = this.checkViewDataSearch; }, editBtnClick() { }, rowDeleteHandler() { }, // 屿§ç±»å䏿æ¡change attributeDataTypeChange(val) { this.getEnumMapByTypeHandler(val); this.form.enumSwitch = false; }, // 屿§ç±»åä¸ææ¡æ°æ®å¤ç getEnumMapByTypeHandler(val) { const enumType = { VTString: 'String', VTInteger: 'Integer', VTLong: 'Integer', }; if (enumType[val]) { const string = enumType[val]; getEnumMapByType({enumType: string}).then(res => { const data = res.data.data; this.attributeDataTypePickList = data.flatMap(obj => Object.entries(obj).map(([key, values]) => ({ key: key, values: values })) ); }) } }, // ä½¿ç¨æä¸¾æ¶ æä¸¾éæ©ä¸ææ¡changeäºä»¶ enumSelectChange(val) { const list = this.attributeDataTypePickList.find(item => item.key === val).values; this.form.range = list.join('\n'); }, // ä½¿ç¨æä¸¾switchæ»åchangeäºä»¶ switchEnumChange(status) { if (status) { this.form.attributeDataTypePick = this.attributeDataTypePickList[0].key; const list = this.attributeDataTypePickList[0].values; this.form.range = list.join('\n'); } else { this.form.range = ""; } }, // ä¸ä½¿ç¨æä¸¾ æå¨æ·»å æä¸¾å¼ enumAddHandler() { // æ£æ¥åè½¬æ¢ this.form.range 为æ°ç»ï¼åæ¶æé¤ç©ºå¼ let currentRangeArray = this.form.range ? this.form.range.split('\n').filter(item => item.trim() !== '') : []; let newValue = this.form.enumAddValue.trim(); if (currentRangeArray.includes(newValue)) { this.$message.error('该å¼åè§åå·²ç»åå¨ï¼') return; } currentRangeArray.push(newValue); this.enumAddListChange = currentRangeArray; this.form.range = currentRangeArray.join('\n'); this.form.enumAddValue = ""; }, // å¼åç±»å忢 attributeSelectTypeChange(){ } } @@ -241,4 +706,31 @@ .margin-top{ margin-top: 25px; } .left { width: 45%; height: 100%; margin-right: 60px; } .right { height: 100%; width: auto; margin-left: 60px; } .addDialogBottom { width: 100%; display: flex; flex-direction: row; } .addDialogBottom > .el-divider--vertical { width: 2px; height: 78%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -10%); } </style> Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/linkType/index.vue
@@ -1,13 +1,290 @@ <template> <p>龿¥ç±»å</p> <el-container> <el-aside> <basic-container> <div ref="TreeBox" style="height: calc(100vh - 144px);!important;"> <div class="headerCon"> <el-button icon="el-icon-plus" plain size="small" type="primary">å建 </el-button> <el-button icon="el-icon-edit" plain size="small" type="primary">ä¿®æ¹ </el-button> <el-button icon="el-icon-delete" plain size="small" type="danger">å é¤ </el-button> <el-button icon="el-icon-view" plain size="small" type="primary">æ¥ç </el-button> <el-button icon="el-icon-download" plain size="small" type="primary">å¯¼åº </el-button> <el-button icon="el-icon-upload2" plain size="small" type="primary">å¯¼å ¥ </el-button> <el-button icon="el-icon-circle-plus-outline" plain size="small" type="primary">å建è§å¾ </el-button> <el-button icon="el-icon-menu" plain size="small" type="primary">ä¸è´æ§æ£æ¥ </el-button> </div> <!-- 左侧æ --> <div style="height: calc(100vh - 300px);"> <avue-tree :data="treeData" :option="treeOption" @node-click="nodeClick"> <span slot-scope="{ node, data }" class="el-tree-node__label"> <span> <i class="el-icon-s-promotion"></i> {{ (node || {}).label }} </span> </span> </avue-tree> </div> </div> </basic-container> </el-aside> <el-main> <basic-container> <div> <el-descriptions :column="2" border class="margin-top" size="medium"> <el-descriptions-item :contentStyle="descriptionOption.contentStyle" :labelStyle="descriptionOption.labelStyle"> <template slot="label"> <i :class="icons.id"></i> åç§° </template> {{ nodeRow.name }} </el-descriptions-item> <el-descriptions-item :contentStyle="descriptionOption.contentStyle" :labelStyle="descriptionOption.labelStyle"> <template slot="label"> <i :class="icons.name"></i> æ ç¾ </template> {{ nodeRow.tag }} </el-descriptions-item> <el-descriptions-item :contentStyle="descriptionOption.contentStyle" :labelStyle="descriptionOption.labelStyle"> <template slot="label"> <i :class="icons.tableName"></i> å®ç°ç±» </template> {{ nodeRow.implClass }} </el-descriptions-item> <el-descriptions-item :contentStyle="descriptionOption.contentStyle" :labelStyle="descriptionOption.labelStyle"> <template slot="label"> <i :class="icons.domain"></i> å½¢ç¶ </template> <el-tag v-if="nodeRow.shape" size="small"> {{ nodeRow.shape }} </el-tag> </el-descriptions-item> <el-descriptions-item :contentStyle="descriptionOption.contentStyle" :labelStyle="descriptionOption.labelStyle"> <template slot="label"> <i :class="icons.desc"></i> æè¿° </template> {{ nodeRow.description }} </el-descriptions-item> </el-descriptions> <el-descriptions :column="3" border class="margin-top" direction="vertical"> <el-descriptions-item :contentStyle="descriptionOption.contentStyle" :labelStyle="descriptionOption.labelStyle"> <template slot="label"> <i :class="icons.from"></i> From端类å </template> <span v-for="item in nodeRow.btmItemsFrom" style="margin-left:2px;"> <el-tag effect="plain" size="small" style="margin-top: 2px;"> {{ item }} </el-tag> </span> </el-descriptions-item> <el-descriptions-item :contentStyle="descriptionOption.contentStyle" :labelStyle="descriptionOption.labelStyle"> <template slot="label"> <i :class="icons.from"></i> Form端主类å </template> <el-tag v-if="nodeRow.primitivesFrom" effect="plain" size="small"> {{ nodeRow.primitivesFrom === 'è¯·éæ©' ? nodeRow.btmItemsFrom[0] : nodeRow.primitivesFrom }} </el-tag> </el-descriptions-item> <el-descriptions-item :contentStyle="descriptionOption.contentStyle" :labelStyle="descriptionOption.labelStyle"> <template slot="label"> <i :class="icons.from"></i> From端对åºå ³ç³» </template> <el-tag v-if="nodeRow.relationFrom" effect="plain" size="small">{{ nodeRow.relationFrom }}</el-tag> </el-descriptions-item> </el-descriptions> <el-descriptions :column="3" border class="margin-top" direction="vertical"> <el-descriptions-item :contentStyle="descriptionOption.contentStyle" :labelStyle="descriptionOption.labelStyle"> <template slot="label"> <i :class="icons.to"></i> To端类å </template> <span v-for="item in nodeRow.btmItemsTo" style="margin-left:2px;"> <el-tag effect="plain" size="small" style="margin-top: 2px;"> {{ item }} </el-tag> </span> </el-descriptions-item> <el-descriptions-item :contentStyle="descriptionOption.contentStyle" :labelStyle="descriptionOption.labelStyle"> <template slot="label"> <i :class="icons.to"></i> To端主类å </template> <el-tag v-if="nodeRow.primitivesTo" effect="plain" size="small"> {{ nodeRow.primitivesTo === 'è¯·éæ©' ? nodeRow.btmItemsTo[0] : nodeRow.primitivesTo }} </el-tag> </el-descriptions-item> <el-descriptions-item :contentStyle="descriptionOption.contentStyle" :labelStyle="descriptionOption.labelStyle"> <template slot="label"> <i :class="icons.to"></i> To端对åºå ³ç³» </template> <el-tag v-if="nodeRow.relationTo" effect="plain" size="small">{{ nodeRow.relationTo }}</el-tag> </el-descriptions-item> </el-descriptions> </div> <div style="margin-top: 20px"> <h3>屿§æ± å表</h3> <avue-crud :data="tableData" :option="tableOption" ></avue-crud> </div> </basic-container> </el-main> </el-container> </template> <script> import {gridLink} from "@/api/modeling/linkType/api"; import basicOption from '@/util/basic-option' export default { name: "index" name: "index", data() { return { treeOption: { height: 'auto', defaultExpandAll: false, menu: false, addBtn: false, props: { label: 'name', value: 'name', children: 'children' } }, treeData: [], tableData: [], tableOption: { ...basicOption, editBtn: false, refreshBtn: false, selection: false, // index:false, column: [ { label: '屿§å', prop: 'attributeName', sortable: true, }, { label: '屿§ç±»å', prop: 'source', sortable: true, }, { label: 'åå§å¼', prop: 'source', sortable: true, }, { label: '说æ', prop: 'desc', } ] }, nodeRow: {}, descriptionOption: { labelStyle: 'text-align:center;width:120px', contentStyle: 'width:240px;text-align:center;word-break;break-all;' }, icons: { id: 'el-icon-finished', name: 'el-icon-tickets', tableName: 'el-icon-date', domain: 'el-icon-connection', from: 'el-icon-sort-down', to: 'el-icon-sort-up', main: 'el-icon-warning-outline', desc: 'el-icon-chat-line-square' }, } }, created() { this.getTreeList(); }, mounted() { }, methods: { // æ onLoadè¯·æ± getTreeList() { gridLink().then(res => { const data = res.data.data; this.treeData = data; this.tableLoading = false; }).catch(err => { this.$message.error(err) }); }, // æ ç¹å»äºä»¶ nodeClick(row) { console.log(row); this.nodeRow = row; } } } </script> <style scoped> <style lang="scss" scoped> ::v-deep { .el-scrollbar__wrap { overflow: auto !important; } } .headerCon { display: flex; flex-wrap: wrap; margin-bottom: 5px; .el-button + .el-button { margin-left: 5px; } .el-button { margin-top: 5px; } } .headerCon > .el-button:nth-child(4) { margin-left: 0; } .headerCon > .el-button:nth-child(7) { margin-left: 0; } </style>