Merge remote-tracking branch 'origin/master'
# Conflicts: # frontend/src/business/components/api/definition/components/list/ApiList.vue
This commit is contained in:
commit
1f2ffba0d4
|
@ -41,7 +41,6 @@ import org.apache.jmeter.config.Arguments;
|
||||||
import org.apache.jmeter.config.CSVDataSet;
|
import org.apache.jmeter.config.CSVDataSet;
|
||||||
import org.apache.jmeter.config.RandomVariableConfig;
|
import org.apache.jmeter.config.RandomVariableConfig;
|
||||||
import org.apache.jmeter.modifiers.CounterConfig;
|
import org.apache.jmeter.modifiers.CounterConfig;
|
||||||
import org.apache.jmeter.protocol.http.control.AuthManager;
|
|
||||||
import org.apache.jmeter.save.SaveService;
|
import org.apache.jmeter.save.SaveService;
|
||||||
import org.apache.jmeter.testelement.TestElement;
|
import org.apache.jmeter.testelement.TestElement;
|
||||||
import org.apache.jorphan.collections.HashTree;
|
import org.apache.jorphan.collections.HashTree;
|
||||||
|
@ -75,7 +74,7 @@ import java.util.stream.Collectors;
|
||||||
|
|
||||||
})
|
})
|
||||||
@JSONType(seeAlso = {MsHTTPSamplerProxy.class, MsHeaderManager.class, MsJSR223Processor.class, MsJSR223PostProcessor.class,
|
@JSONType(seeAlso = {MsHTTPSamplerProxy.class, MsHeaderManager.class, MsJSR223Processor.class, MsJSR223PostProcessor.class,
|
||||||
MsJSR223PreProcessor.class, MsTestPlan.class, MsThreadGroup.class, AuthManager.class, MsAssertions.class,
|
MsJSR223PreProcessor.class, MsTestPlan.class, MsThreadGroup.class, MsAuthManager.class, MsAssertions.class,
|
||||||
MsExtract.class, MsTCPSampler.class, MsDubboSampler.class, MsJDBCSampler.class, MsConstantTimer.class, MsIfController.class, MsScenario.class, MsLoopController.class, MsJmeterElement.class}, typeKey = "type")
|
MsExtract.class, MsTCPSampler.class, MsDubboSampler.class, MsJDBCSampler.class, MsConstantTimer.class, MsIfController.class, MsScenario.class, MsLoopController.class, MsJmeterElement.class}, typeKey = "type")
|
||||||
@Data
|
@Data
|
||||||
public abstract class MsTestElement {
|
public abstract class MsTestElement {
|
||||||
|
|
|
@ -25,6 +25,7 @@ public class ShiroUtils {
|
||||||
filterChainDefinitionMap.put("/favicon.ico", "anon");
|
filterChainDefinitionMap.put("/favicon.ico", "anon");
|
||||||
filterChainDefinitionMap.put("/display/file/**", "anon");
|
filterChainDefinitionMap.put("/display/file/**", "anon");
|
||||||
filterChainDefinitionMap.put("/jmeter/download/**", "anon");
|
filterChainDefinitionMap.put("/jmeter/download/**", "anon");
|
||||||
|
filterChainDefinitionMap.put("/jmeter/ping", "anon");
|
||||||
filterChainDefinitionMap.put("/authsource/list/allenable", "anon");
|
filterChainDefinitionMap.put("/authsource/list/allenable", "anon");
|
||||||
filterChainDefinitionMap.put("/sso/signin", "anon");
|
filterChainDefinitionMap.put("/sso/signin", "anon");
|
||||||
filterChainDefinitionMap.put("/sso/callback", "anon");
|
filterChainDefinitionMap.put("/sso/callback", "anon");
|
||||||
|
|
|
@ -18,6 +18,11 @@ public class JmeterFileController {
|
||||||
@Resource
|
@Resource
|
||||||
private JmeterFileService jmeterFileService;
|
private JmeterFileService jmeterFileService;
|
||||||
|
|
||||||
|
@GetMapping("ping")
|
||||||
|
public String checkStatus() {
|
||||||
|
return "PONG";
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("download")
|
@GetMapping("download")
|
||||||
public ResponseEntity<byte[]> downloadJmeterFiles(@RequestParam("testId") String testId, @RequestParam("resourceId") String resourceId,
|
public ResponseEntity<byte[]> downloadJmeterFiles(@RequestParam("testId") String testId, @RequestParam("resourceId") String resourceId,
|
||||||
@RequestParam("ratio") double ratio, @RequestParam("startTime") long startTime,
|
@RequestParam("ratio") double ratio, @RequestParam("startTime") long startTime,
|
||||||
|
|
|
@ -74,14 +74,14 @@ public class DockerTestEngine extends AbstractEngine {
|
||||||
BaseSystemConfigDTO baseInfo = CommonBeanFactory.getBean(SystemParameterService.class).getBaseInfo();
|
BaseSystemConfigDTO baseInfo = CommonBeanFactory.getBean(SystemParameterService.class).getBaseInfo();
|
||||||
KafkaProperties kafkaProperties = CommonBeanFactory.getBean(KafkaProperties.class);
|
KafkaProperties kafkaProperties = CommonBeanFactory.getBean(KafkaProperties.class);
|
||||||
JmeterProperties jmeterProperties = CommonBeanFactory.getBean(JmeterProperties.class);
|
JmeterProperties jmeterProperties = CommonBeanFactory.getBean(JmeterProperties.class);
|
||||||
String metersphereUrl = "http://localhost:8081";
|
String metersphereUrl = "http://localhost:8081"; // 占位符
|
||||||
if (baseInfo != null) {
|
if (baseInfo != null) {
|
||||||
metersphereUrl = baseInfo.getUrl();
|
metersphereUrl = baseInfo.getUrl();
|
||||||
}
|
}
|
||||||
|
String jmeterPingUrl = metersphereUrl + "/jmeter/ping"; // 检查下载地址是否正确
|
||||||
// docker 不能从 localhost 中下载文件
|
// docker 不能从 localhost 中下载文件
|
||||||
if (StringUtils.contains(metersphereUrl, "http://localhost")
|
if (StringUtils.contains(metersphereUrl, "http://localhost")
|
||||||
|| !UrlTestUtils.testUrlWithTimeOut(metersphereUrl, 1000)) {
|
|| !UrlTestUtils.testUrlWithTimeOut(jmeterPingUrl, 1000)) {
|
||||||
MSException.throwException(Translator.get("run_load_test_file_init_error"));
|
MSException.throwException(Translator.get("run_load_test_file_init_error"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,6 @@ public class JmeterDocumentParser implements DocumentParser {
|
||||||
parseHashTree(ele);
|
parseHashTree(ele);
|
||||||
} else if (nodeNameEquals(ele, TEST_PLAN)) {
|
} else if (nodeNameEquals(ele, TEST_PLAN)) {
|
||||||
processSetupTestPlan(ele);
|
processSetupTestPlan(ele);
|
||||||
processTearDownTestPlan(ele);
|
|
||||||
processCheckoutConfigTestElement(ele);
|
processCheckoutConfigTestElement(ele);
|
||||||
processCheckoutDnsCacheManager(ele);
|
processCheckoutDnsCacheManager(ele);
|
||||||
processCheckoutArguments(ele);
|
processCheckoutArguments(ele);
|
||||||
|
@ -566,105 +565,18 @@ public class JmeterDocumentParser implements DocumentParser {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processTearDownTestPlan(Element ele) {
|
|
||||||
/*<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>*/
|
|
||||||
Document document = ele.getOwnerDocument();
|
|
||||||
Element tearDownSwitch = createBoolProp(document, "TestPlan.tearDown_on_shutdown", true);
|
|
||||||
ele.appendChild(tearDownSwitch);
|
|
||||||
|
|
||||||
Node hashTree = ele.getNextSibling();
|
|
||||||
while (!(hashTree instanceof Element)) {
|
|
||||||
hashTree = hashTree.getNextSibling();
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
<PostThreadGroup guiclass="PostThreadGroupGui" testclass="PostThreadGroup" testname="tearDown Thread Group" enabled="true">
|
|
||||||
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
|
|
||||||
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
|
|
||||||
<boolProp name="LoopController.continue_forever">false</boolProp>
|
|
||||||
<stringProp name="LoopController.loops">1</stringProp>
|
|
||||||
</elementProp>
|
|
||||||
<stringProp name="ThreadGroup.num_threads">1</stringProp>
|
|
||||||
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
|
|
||||||
<boolProp name="ThreadGroup.scheduler">false</boolProp>
|
|
||||||
<stringProp name="ThreadGroup.duration"></stringProp>
|
|
||||||
<stringProp name="ThreadGroup.delay"></stringProp>
|
|
||||||
<boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
|
|
||||||
</PostThreadGroup>
|
|
||||||
*/
|
|
||||||
Element tearDownElement = document.createElement("PostThreadGroup");
|
|
||||||
tearDownElement.setAttribute("guiclass", "PostThreadGroupGui");
|
|
||||||
tearDownElement.setAttribute("testclass", "PostThreadGroup");
|
|
||||||
tearDownElement.setAttribute("testname", "tearDown Thread Group");
|
|
||||||
tearDownElement.setAttribute("enabled", "true");
|
|
||||||
tearDownElement.appendChild(createStringProp(document, "ThreadGroup.on_sample_error", "continue"));
|
|
||||||
tearDownElement.appendChild(createStringProp(document, "ThreadGroup.num_threads", "1"));
|
|
||||||
tearDownElement.appendChild(createStringProp(document, "ThreadGroup.ramp_time", "1"));
|
|
||||||
tearDownElement.appendChild(createStringProp(document, "ThreadGroup.duration", ""));
|
|
||||||
tearDownElement.appendChild(createStringProp(document, "ThreadGroup.delay", ""));
|
|
||||||
tearDownElement.appendChild(createBoolProp(document, "ThreadGroup.scheduler", false));
|
|
||||||
tearDownElement.appendChild(createBoolProp(document, "ThreadGroup.same_user_on_next_iteration", true));
|
|
||||||
Element elementProp = document.createElement("elementProp");
|
|
||||||
elementProp.setAttribute("name", "ThreadGroup.main_controller");
|
|
||||||
elementProp.setAttribute("elementType", "LoopController");
|
|
||||||
elementProp.setAttribute("guiclass", "LoopControlPanel");
|
|
||||||
elementProp.setAttribute("testclass", "LoopController");
|
|
||||||
elementProp.setAttribute("testname", "Loop Controller");
|
|
||||||
elementProp.setAttribute("enabled", "true");
|
|
||||||
elementProp.appendChild(createBoolProp(document, "LoopController.continue_forever", false));
|
|
||||||
elementProp.appendChild(createStringProp(document, "LoopController.loops", "1"));
|
|
||||||
tearDownElement.appendChild(elementProp);
|
|
||||||
hashTree.appendChild(tearDownElement);
|
|
||||||
|
|
||||||
Element tearDownHashTree = document.createElement(HASH_TREE_ELEMENT);
|
|
||||||
/*
|
|
||||||
<OnceOnlyController guiclass="OnceOnlyControllerGui" testclass="OnceOnlyController" testname="Once Only Controller" enabled="true"/>
|
|
||||||
*/
|
|
||||||
Element onceOnlyController = document.createElement("OnceOnlyController");
|
|
||||||
onceOnlyController.setAttribute("guiclass", "OnceOnlyControllerGui");
|
|
||||||
onceOnlyController.setAttribute("testclass", "OnceOnlyController");
|
|
||||||
onceOnlyController.setAttribute("testname", "Once Only Controller");
|
|
||||||
onceOnlyController.setAttribute("enabled", "true");
|
|
||||||
tearDownHashTree.appendChild(onceOnlyController);
|
|
||||||
/*
|
|
||||||
<hashTree>
|
|
||||||
<DebugSampler guiclass="TestBeanGUI" testclass="DebugSampler" testname="Debug Sampler" enabled="true">
|
|
||||||
<boolProp name="displayJMeterProperties">false</boolProp>
|
|
||||||
<boolProp name="displayJMeterVariables">true</boolProp>
|
|
||||||
<boolProp name="displaySystemProperties">false</boolProp>
|
|
||||||
</DebugSampler>
|
|
||||||
<hashTree/>
|
|
||||||
</hashTree>
|
|
||||||
*/
|
|
||||||
Element onceOnlyHashTree = document.createElement(HASH_TREE_ELEMENT);
|
|
||||||
Element debugSampler = document.createElement("DebugSampler");
|
|
||||||
debugSampler.setAttribute("guiclass", "TestBeanGUI");
|
|
||||||
debugSampler.setAttribute("testclass", "DebugSampler");
|
|
||||||
debugSampler.setAttribute("testname", "Debug Sampler");
|
|
||||||
debugSampler.setAttribute("enabled", "true");
|
|
||||||
debugSampler.appendChild(createBoolProp(document, "displayJMeterProperties", false));
|
|
||||||
debugSampler.appendChild(createBoolProp(document, "displayJMeterVariables", true));
|
|
||||||
debugSampler.appendChild(createBoolProp(document, "displaySystemProperties", false));
|
|
||||||
onceOnlyHashTree.appendChild(debugSampler);
|
|
||||||
// 添加空的 hashTree
|
|
||||||
onceOnlyHashTree.appendChild(document.createElement(HASH_TREE_ELEMENT));
|
|
||||||
tearDownHashTree.appendChild(onceOnlyHashTree);
|
|
||||||
hashTree.appendChild(tearDownHashTree);
|
|
||||||
// 添加backend listener
|
|
||||||
processCheckoutBackendListener(tearDownElement);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Element createBoolProp(Document document, String name, boolean value) {
|
private Element createBoolProp(Document document, String name, boolean value) {
|
||||||
Element tearDownSwitch = document.createElement("boolProp");
|
Element boolProp = document.createElement("boolProp");
|
||||||
tearDownSwitch.setAttribute("name", name);
|
boolProp.setAttribute("name", name);
|
||||||
tearDownSwitch.appendChild(document.createTextNode(String.valueOf(value)));
|
boolProp.appendChild(document.createTextNode(String.valueOf(value)));
|
||||||
return tearDownSwitch;
|
return boolProp;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Element createIntProp(Document document, String name, int value) {
|
private Element createIntProp(Document document, String name, int value) {
|
||||||
Element tearDownSwitch = document.createElement("intProp");
|
Element intProp = document.createElement("intProp");
|
||||||
tearDownSwitch.setAttribute("name", name);
|
intProp.setAttribute("name", name);
|
||||||
tearDownSwitch.appendChild(document.createTextNode(String.valueOf(value)));
|
intProp.appendChild(document.createTextNode(String.valueOf(value)));
|
||||||
return tearDownSwitch;
|
return intProp;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processBackendListener(Element backendListener) {
|
private void processBackendListener(Element backendListener) {
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit b9042074b780205e275c674f64417799110519fd
|
Subproject commit 611c38a8b0db7180ea4d4c8ace749ac25499672d
|
|
@ -68,9 +68,7 @@
|
||||||
<el-table-column v-if="item.id == 'tags'" prop="tags" min-width="120px"
|
<el-table-column v-if="item.id == 'tags'" prop="tags" min-width="120px"
|
||||||
:label="$t('api_test.automation.tag')" :key="index">
|
:label="$t('api_test.automation.tag')" :key="index">
|
||||||
<template v-slot:default="scope">
|
<template v-slot:default="scope">
|
||||||
<div v-for="(itemName,index) in scope.row.tags" :key="index">
|
<ms-tag v-for="(itemName,index) in scope.row.tags" :key="index" type="success" effect="plain" :content="itemName" style="margin-left: 5px"/>
|
||||||
<ms-tag type="success" effect="plain" :content="itemName"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="item.id == 'userId'" prop="userId" min-width="120px"
|
<el-table-column v-if="item.id == 'userId'" prop="userId" min-width="120px"
|
||||||
|
|
|
@ -72,9 +72,7 @@
|
||||||
<el-table-column v-if="item.id=='tags'" prop="tags" min-width="120px" :label="$t('commons.tag')"
|
<el-table-column v-if="item.id=='tags'" prop="tags" min-width="120px" :label="$t('commons.tag')"
|
||||||
:key="index">
|
:key="index">
|
||||||
<template v-slot:default="scope">
|
<template v-slot:default="scope">
|
||||||
<div v-for="(itemName,index) in scope.row.tags" :key="index">
|
<ms-tag v-for="(itemName,index) in scope.row.tags" :key="index" type="success" effect="plain" :content="itemName" style="margin-left: 5px"/>
|
||||||
<ms-tag type="success" effect="plain" :content="itemName"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
|
|
@ -114,13 +114,10 @@
|
||||||
v-if="item.id == 'tags'"
|
v-if="item.id == 'tags'"
|
||||||
prop="tags"
|
prop="tags"
|
||||||
:label="$t('commons.tag')"
|
:label="$t('commons.tag')"
|
||||||
min-width="80px"
|
min-width="120px"
|
||||||
:key="index"
|
:key="index">
|
||||||
>
|
|
||||||
<template v-slot:default="scope">
|
<template v-slot:default="scope">
|
||||||
<div v-for="(itemName,index) in scope.row.tags" :key="index">
|
<ms-tag v-for="(itemName,index) in scope.row.tags" :key="index" type="success" effect="plain" :content="itemName" style="margin-left: 5px"/>
|
||||||
<ms-tag type="success" effect="plain" :content="itemName"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
@ -225,7 +222,7 @@ import MsBottomContainer from "../BottomContainer";
|
||||||
import ShowMoreBtn from "../../../../track/case/components/ShowMoreBtn";
|
import ShowMoreBtn from "../../../../track/case/components/ShowMoreBtn";
|
||||||
import MsBatchEdit from "../basis/BatchEdit";
|
import MsBatchEdit from "../basis/BatchEdit";
|
||||||
import {API_METHOD_COLOUR, API_STATUS, DUBBO_METHOD, REQ_METHOD, SQL_METHOD, TCP_METHOD} from "../../model/JsonData";
|
import {API_METHOD_COLOUR, API_STATUS, DUBBO_METHOD, REQ_METHOD, SQL_METHOD, TCP_METHOD} from "../../model/JsonData";
|
||||||
import {downloadFile, getUUID} from "@/common/js/utils";
|
import {downloadFile} from "@/common/js/utils";
|
||||||
import {PROJECT_NAME} from '@/common/js/constants';
|
import {PROJECT_NAME} from '@/common/js/constants';
|
||||||
import {getCurrentProjectID, getCurrentUser} from "@/common/js/utils";
|
import {getCurrentProjectID, getCurrentUser} from "@/common/js/utils";
|
||||||
import {API_LIST, TEST_CASE_LIST, WORKSPACE_ID} from '@/common/js/constants';
|
import {API_LIST, TEST_CASE_LIST, WORKSPACE_ID} from '@/common/js/constants';
|
||||||
|
@ -246,7 +243,6 @@ import {
|
||||||
import {_filter, _sort} from "@/common/js/tableUtils";
|
import {_filter, _sort} from "@/common/js/tableUtils";
|
||||||
import {Api_List, Track_Test_Case} from "@/business/components/common/model/JsonData";
|
import {Api_List, Track_Test_Case} from "@/business/components/common/model/JsonData";
|
||||||
import HeaderCustom from "@/business/components/common/head/HeaderCustom";
|
import HeaderCustom from "@/business/components/common/head/HeaderCustom";
|
||||||
import {createComponent} from "@/business/components/api/definition/components/jmeter/components";
|
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -273,7 +269,6 @@ export default {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
basisData: {},
|
|
||||||
type: API_LIST,
|
type: API_LIST,
|
||||||
headerItems: Api_List,
|
headerItems: Api_List,
|
||||||
tableLabel: Api_List,
|
tableLabel: Api_List,
|
||||||
|
@ -739,36 +734,36 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.operate-button > div {
|
.operate-button > div {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.request-method {
|
.request-method {
|
||||||
padding: 0 5px;
|
padding: 0 5px;
|
||||||
color: #1E90FF;
|
color: #1E90FF;
|
||||||
}
|
}
|
||||||
|
|
||||||
.api-el-tag {
|
.api-el-tag {
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-input {
|
.search-input {
|
||||||
float: right;
|
float: right;
|
||||||
width: 300px;
|
width: 300px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-tag {
|
.el-tag {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ms-select-all >>> th:first-child {
|
.ms-select-all >>> th:first-child {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ms-select-all >>> th:nth-child(2) .el-icon-arrow-down {
|
.ms-select-all >>> th:nth-child(2) .el-icon-arrow-down {
|
||||||
top: -2px;
|
top: -2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -135,9 +135,7 @@
|
||||||
|
|
||||||
<el-table-column v-if="item.id=='tags'" prop="tags" :label="$t('commons.tag')" :key="index">
|
<el-table-column v-if="item.id=='tags'" prop="tags" :label="$t('commons.tag')" :key="index">
|
||||||
<template v-slot:default="scope">
|
<template v-slot:default="scope">
|
||||||
<div v-for="(itemName,index) in scope.row.tags" :key="index">
|
<ms-tag v-for="(itemName,index) in scope.row.tags" :key="index" type="success" effect="plain" :content="itemName" style="margin-left: 5px"/>
|
||||||
<ms-tag type="success" effect="plain" :content="itemName"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,9 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="tagNames" :label="$t('api_test.automation.tag')" width="200px">
|
<el-table-column prop="tagNames" :label="$t('api_test.automation.tag')" min-width="120">
|
||||||
<template v-slot:default="scope">
|
<template v-slot:default="scope">
|
||||||
<div v-for="itemName in scope.row.tags" :key="itemName">
|
<ms-tag v-for="itemName in scope.row.tags" :key="itemName" type="success" effect="plain" :content="itemName" style="margin-left: 5px"/>
|
||||||
<ms-tag type="success" effect="plain" :content="itemName"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="userId" :label="$t('api_test.automation.creator')" show-overflow-tooltip/>
|
<el-table-column prop="userId" :label="$t('api_test.automation.creator')" show-overflow-tooltip/>
|
||||||
|
|
|
@ -80,9 +80,7 @@
|
||||||
:label="$t('commons.tag')"
|
:label="$t('commons.tag')"
|
||||||
:key="index">
|
:key="index">
|
||||||
<template v-slot:default="scope">
|
<template v-slot:default="scope">
|
||||||
<div v-for="(itemName,index) in scope.row.tags" :key="index">
|
<ms-tag v-for="(itemName,index) in scope.row.tags" :key="index" type="success" effect="plain" :content="itemName" style="margin-left: 5px"/>
|
||||||
<ms-tag type="success" effect="plain" :content="itemName"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
|
|
@ -37,9 +37,7 @@
|
||||||
<el-table-column v-if="item.id == 'tagNames'" prop="tagNames" :label="$t('api_test.automation.tag')"
|
<el-table-column v-if="item.id == 'tagNames'" prop="tagNames" :label="$t('api_test.automation.tag')"
|
||||||
width="200px" :key="index">
|
width="200px" :key="index">
|
||||||
<template v-slot:default="scope">
|
<template v-slot:default="scope">
|
||||||
<div v-for="(itemName,index) in scope.row.tags" :key="index">
|
<ms-tag v-for="(itemName,index) in scope.row.tags" :key="index" type="success" effect="plain" :content="itemName" style="margin-left: 5px"/>
|
||||||
<ms-tag type="success" effect="plain" :content="itemName"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column v-if="item.id == 'userId'" prop="userId" :label="$t('api_test.automation.creator')"
|
<el-table-column v-if="item.id == 'userId'" prop="userId" :label="$t('api_test.automation.creator')"
|
||||||
|
|
|
@ -94,9 +94,7 @@
|
||||||
:key="index"
|
:key="index"
|
||||||
>
|
>
|
||||||
<template v-slot:default="scope">
|
<template v-slot:default="scope">
|
||||||
<div v-for="(tag, index) in scope.row.showTags" :key="tag + '_' + index">
|
<ms-tag v-for="(tag, index) in scope.row.showTags" :key="tag + '_' + index" type="success" effect="plain" :content="tag" style="margin-left: 5px"/>
|
||||||
<ms-tag type="success" effect="plain" :content="tag"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
|
|
@ -20,9 +20,7 @@
|
||||||
|
|
||||||
<el-table-column prop="tags" :label="$t('api_test.automation.tag')" width="200px">
|
<el-table-column prop="tags" :label="$t('api_test.automation.tag')" width="200px">
|
||||||
<template v-slot:default="scope">
|
<template v-slot:default="scope">
|
||||||
<div v-for="(itemName,index) in scope.row.tags" :key="index">
|
<ms-tag v-for="(itemName,index) in scope.row.tags" :key="index" type="success" effect="plain" :content="itemName" style="margin-left: 5px"/>
|
||||||
<ms-tag type="success" effect="plain" :content="itemName"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue