This commit is contained in:
liqiang-fit2cloud 2022-12-13 11:03:53 +08:00
commit 8cfb1c68f6
25 changed files with 663 additions and 425 deletions

View File

@ -0,0 +1,15 @@
package io.metersphere.api.dto;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class ApiReportEnvConfigUtil {
private String envName;
private String resourcePoolName;
}

View File

@ -41,4 +41,7 @@ public class ApiScenarioReportDTO {
//<项目名称<环境名称>>
private LinkedHashMap<String, List<String>> projectEnvMap;
private String mode;
private String poolName;
}

View File

@ -385,6 +385,7 @@ public class ApiScenarioExecuteService {
configDTO.setEnvMap(request.getEnvironmentMap());
request.setConfig(configDTO);
}
request.getConfig().setEnvMap(request.getEnvironmentMap());
// 生成调试结果
ApiScenarioReportResult report = apiScenarioReportService.initDebugResult(request);
ApiScenarioWithBLOBs scenario = apiScenarioMapper.selectByPrimaryKey(request.getScenarioId());

View File

@ -162,6 +162,8 @@ public class ApiDefinitionService {
private ApiScenarioMapper apiScenarioMapper;
@Resource
private JMeterService jMeterService;
@Resource
private BaseTestResourcePoolService baseTestResourcePoolService;
private final ThreadLocal<Long> currentApiOrder = new ThreadLocal<>();
private final ThreadLocal<Long> currentApiCaseOrder = new ThreadLocal<>();
@ -1573,7 +1575,11 @@ public class ApiDefinitionService {
if (StringUtils.isNotBlank(contentStr)) {
JSONObject content = JSONUtil.parseObject(contentStr);
if (StringUtils.isNotEmpty(result.getEnvConfig())) {
content.put("envName", this.getEnvNameByEnvConfig(result.getProjectId(), result.getEnvConfig()));
ApiReportEnvConfigUtil envNameByEnvConfig = this.getEnvNameByEnvConfig(result.getProjectId(), result.getEnvConfig());
if (envNameByEnvConfig != null) {
content.put("envName", envNameByEnvConfig.getEnvName());
content.put("poolName", envNameByEnvConfig.getResourcePoolName());
}
}
contentStr = content.toString();
reportResult.setContent(contentStr);
@ -1584,9 +1590,8 @@ public class ApiDefinitionService {
return reportResult;
}
public String getEnvNameByEnvConfig(String projectId, String envConfig) {
String envName = null;
public ApiReportEnvConfigUtil getEnvNameByEnvConfig(String projectId, String envConfig) {
ApiReportEnvConfigUtil apiReportEnvConfig = new ApiReportEnvConfigUtil();
RunModeConfigDTO runModeConfigDTO = null;
try {
runModeConfigDTO = JSON.parseObject(envConfig, RunModeConfigDTO.class);
@ -1595,9 +1600,17 @@ public class ApiDefinitionService {
}
if (StringUtils.isNotEmpty(projectId) && runModeConfigDTO != null && MapUtils.isNotEmpty(runModeConfigDTO.getEnvMap())) {
String envId = runModeConfigDTO.getEnvMap().get(projectId);
envName = apiTestEnvironmentService.selectNameById(envId);
apiReportEnvConfig.setEnvName(apiTestEnvironmentService.selectNameById(envId));
}
return envName;
if (runModeConfigDTO != null && StringUtils.isNotBlank(runModeConfigDTO.getResourcePoolId())) {
TestResourcePool resourcePool = baseTestResourcePoolService.getResourcePool(runModeConfigDTO.getResourcePoolId());
if (resourcePool != null) {
apiReportEnvConfig.setResourcePoolName(resourcePool.getName());
}
} else {
apiReportEnvConfig.setResourcePoolName("LOCAL");
}
return apiReportEnvConfig;
}
public ApiReportResult getDbResult(String testId, String type) {
@ -2785,8 +2798,10 @@ public class ApiDefinitionService {
runModeConfigDTO.setEnvMap(new HashMap<>() {{
this.put(request.getProjectId(), request.getEnvironmentId());
}});
runModeConfigDTO.setResourcePoolId(request.getConfig().getResourcePoolId());
result.setEnvConfig(JSON.toJSONString(runModeConfigDTO));
}
result.setActuator(request.getConfig().getResourcePoolId());
apiDefinitionExecResultMapper.insert(result);
}
if (request.isEditCaseRequest() && CollectionUtils.isNotEmpty(request.getTestElement().getHashTree()) && CollectionUtils.isNotEmpty(request.getTestElement().getHashTree().get(0).getHashTree())) {

View File

@ -764,6 +764,16 @@ public class TestPlanApiCaseService {
result.setName(reportName);
result.setProjectId(apiCase.getProjectId());
result.setTriggerMode(TriggerMode.MANUAL.name());
RunModeConfigDTO runModeConfigDTO = new RunModeConfigDTO();
jMeterService.verifyPool(result.getProjectId(), runModeConfigDTO);
if (StringUtils.isNotEmpty(testPlanApiCase.getEnvironmentId())) {
runModeConfigDTO.setEnvMap(new HashMap<>() {{
this.put(result.getProjectId(), testPlanApiCase.getEnvironmentId());
}});
runModeConfigDTO.setResourcePoolId(runModeConfigDTO.getResourcePoolId());
result.setEnvConfig(JSON.toJSONString(runModeConfigDTO));
}
result.setActuator(runModeConfigDTO.getResourcePoolId());
apiDefinitionExecResultMapper.insert(result);
apiCase.setId(testId);

View File

@ -129,6 +129,7 @@ public class ApiScenarioReportService {
reportResult.setTestId(reportId);
ApiScenarioReportDTO dto = apiScenarioReportStructureService.apiIntegratedReport(reportId);
apiScenarioReportStructureService.initProjectEnvironmentByEnvConfig(dto, result.getEnvConfig());
apiScenarioReportStructureService.getEnvConfig(dto, result.getEnvConfig());
reportResult.setContent(JSON.toJSONString(dto));
return reportResult;
}

View File

@ -13,6 +13,8 @@ import io.metersphere.commons.enums.ApiReportStatus;
import io.metersphere.commons.utils.*;
import io.metersphere.constants.RunModeConstants;
import io.metersphere.dto.RequestResult;
import io.metersphere.dto.RunModeConfigDTO;
import io.metersphere.service.BaseTestResourcePoolService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.BooleanUtils;
@ -70,6 +72,8 @@ public class ApiScenarioReportStructureService {
private ApiScenarioEnvService apiScenarioEnvService;
@Resource
private ApiScenarioReportMapper apiScenarioReportMapper;
@Resource
private BaseTestResourcePoolService baseTestResourcePoolService;
public void save(List<ApiScenarioWithBLOBs> apiScenarios, String reportId, String reportType) {
List<StepTreeDTO> dtoList = new LinkedList<>();
@ -500,6 +504,10 @@ public class ApiScenarioReportStructureService {
dto.setName(report.getName());
dto.setEnvConfig(report.getEnvConfig());
this.initProjectEnvironmentByEnvConfig(dto, report.getEnvConfig());
this.getEnvConfig(dto, report.getEnvConfig());
if (report != null && report.getReportType().equals(ReportTypeConstants.SCENARIO_INDEPENDENT.name())) {
dto.setMode(null);
}
return dto;
}
}
@ -692,4 +700,24 @@ public class ApiScenarioReportStructureService {
return (T) clazz.getInterfaces();
}
}
public void getEnvConfig(ApiScenarioReportDTO dto, String envConfig) {
RunModeConfigDTO runModeConfigDTO = null;
try {
runModeConfigDTO = JSON.parseObject(envConfig, RunModeConfigDTO.class);
} catch (Exception e) {
LogUtil.error("解析" + envConfig + "为RunModeConfigDTO时失败", e);
}
if (runModeConfigDTO != null && StringUtils.isNotBlank(runModeConfigDTO.getResourcePoolId())) {
TestResourcePool resourcePool = baseTestResourcePoolService.getResourcePool(runModeConfigDTO.getResourcePoolId());
if (resourcePool != null) {
dto.setPoolName(resourcePool.getName());
}
} else {
dto.setPoolName("LOCAL");
}
if (runModeConfigDTO != null && StringUtils.isNotBlank(runModeConfigDTO.getMode())) {
dto.setMode(runModeConfigDTO.getMode());
}
}
}

View File

@ -13,6 +13,8 @@
:debug="debug"
:report="report"
:project-env-map="projectEnvMap"
:mode="mode"
:pool-name="poolName"
@reportExport="handleExport"
@reportSave="handleSave" />
@ -99,6 +101,8 @@
:project-env-map="projectEnvMap"
:title="report.name"
:content="content"
:mode="mode"
:pool-name="poolName"
:report="report"
:total-time="totalTime" />
</div>
@ -163,6 +167,8 @@ export default {
tempResult: [],
projectEnvMap: {},
showCancel: false,
poolName: '',
mode: '',
};
},
activated() {
@ -489,6 +495,10 @@ export default {
if (report.projectEnvMap) {
this.projectEnvMap = report.projectEnvMap;
}
if (report.poolName) {
this.poolName = report.poolName;
}
this.mode = report.mode;
this.fullTreeNodes = report.steps;
this.content.console = report.console;
this.content.error = report.error;

View File

@ -3,6 +3,8 @@
:title="title"
:report="report"
:project-env-map="projectEnvMap"
:pool-name="poolName"
:mode="mode"
:type="$t('report.api_test_report')">
<ms-metric-chart :content="content" :is-export="true" :totalTime="totalTime" :report="report" />
<div class="scenario-result" v-for="(scenario, index) in content.scenarios" :key="index" :scenario="scenario">
@ -95,6 +97,8 @@ export default {
totalTime: Number,
projectEnvMap: {},
title: String,
poolName: String,
mode: String,
},
data() {
return {};

View File

@ -81,7 +81,26 @@
</div>
</el-col>
</el-row>
<el-row v-if="showProjectEnv" type="flex">
<el-row type="flex" style="margin-top: 5px">
<el-col v-if="this.mode">
<div style="float: left">
<span> {{ $t('report.run_model') + ':' }} </span>
</div>
<div style="color: #61c550; margin-left: 10px; float: left">
{{ getModeName(this.mode) }}
</div>
</el-col>
<el-col v-if="this.poolName">
<div style="float: left">
<span> {{ $t('load_test.select_resource_pool') + ':' }} </span>
</div>
<div style="color: #61c550; margin-left: 10px; float: left">
{{ this.poolName }}
</div>
</el-col>
<el-col></el-col>
</el-row>
<el-row v-if="showProjectEnv" type="flex" style="margin-top: 5px">
<span> {{ $t('commons.environment') + ':' }} </span>
<div v-for="(values, key) in projectEnvMap" :key="key" style="margin-right: 10px">
{{ key + ':' }}
@ -121,6 +140,8 @@ export default {
default: false,
},
isPlan: Boolean,
poolName: String,
mode: String,
},
computed: {
showProjectEnv() {
@ -235,6 +256,14 @@ export default {
}
});
},
getModeName(mode) {
switch (mode) {
case 'serial':
return this.$t('run_mode.serial');
case 'parallel':
return this.$t('run_mode.parallel');
}
},
},
};
</script>

View File

@ -1,5 +1,5 @@
<template>
<div class="scenario-div" v-loading="result">
<el-card class="scenario-div" v-loading="result">
<slot name="version"></slot>
<ms-search :condition.sync="condition" :base-search-tip="$t('commons.search_by_id_name_tag')" @search="search">
</ms-search>
@ -369,7 +369,7 @@
ref="apiDeleteConfirm" />
<!-- 引用场景弹窗 -->
<ms-show-reference ref="viewRef" @showCaseRef="showScenarioRef" @openScenario="openScenario" />
</div>
</el-card>
</template>
<script>
@ -522,7 +522,7 @@ export default {
type: API_SCENARIO_LIST,
fields: getCustomTableHeader('API_SCENARIO', undefined),
fieldsWidth: getCustomTableWidth('API_SCENARIO'),
screenHeight: 'calc(100vh - 180px)', //,
screenHeight: 'calc(100vh - 200px)', //,
condition: {
components: this.trashEnable ? API_SCENARIO_CONFIGS_TRASH : API_SCENARIO_CONFIGS,
},

View File

@ -81,6 +81,7 @@
<!-- 右侧部分 -->
<ms-main-container style="overflow: hidden" class="ms-scenario-main-container">
<el-card>
<!-- header 调试部分 -->
<div class="ms-debug-div" @click="showAll" ref="debugHeader">
<el-row style="margin: 5px">
@ -537,6 +538,7 @@
:old-user-name="oldUserName"
:type="type" />
</el-dialog>
</el-card>
</ms-main-container>
</ms-container>
</template>
@ -2544,7 +2546,7 @@ export default {
<style scoped>
.card-content {
height: calc(100vh - 160px);
height: calc(100vh - 170px);
overflow-y: auto;
}
@ -2569,7 +2571,7 @@ export default {
}
#fab {
right: 60px;
right: 70px;
bottom: 120px;
z-index: 5;
}

View File

@ -54,13 +54,24 @@
</div>
</el-col>
</el-row>
<el-row type="flex" v-if="response && response.envName">
<el-row type="flex" style="margin-top: 5px">
<el-col v-if="response && response.poolName">
<div style="font-size: 14px; color: #aaaaaa; float: left">
<span> {{ $t('load_test.select_resource_pool') + ':' }} </span>
</div>
<div style="font-size: 14px; color: #61c550; margin-left: 10px; float: left">
{{ response.poolName }}
</div>
</el-col>
<el-col type="flex" v-if="response && response.envName">
<div style="font-size: 14px; color: #aaaaaa; float: left">
<span> {{ $t('commons.environment') + ':' }} </span>
</div>
<div style="font-size: 14px; color: #61c550; margin-left: 10px; float: left">
{{ response.envName }}
</div>
</el-col>
<el-col></el-col>
</el-row>
</div>
</template>

View File

@ -1,6 +1,13 @@
<template>
<div class="report-export">
<ms-report-title :title="title" :type="type" :report="report" :project-env-map="projectEnvMap"/>
<ms-report-title
:title="title"
:type="type"
:report="report"
:project-env-map="projectEnvMap"
:mode="mode"
:pool-name="poolName"
/>
<slot></slot>
</div>
</template>
@ -11,12 +18,18 @@ import MsReportTitle from "./MsReportTitle";
export default {
name: "MsReportExportTemplate",
components: { MsReportTitle },
props: {title: String, type: String, report: Object, projectEnvMap: {}},
}
props: {
title: String,
type: String,
report: Object,
projectEnvMap: {},
mode: String,
poolName: String,
},
};
</script>
<style scoped>
.report-export {
padding: 30px;
}

View File

@ -5,23 +5,55 @@
<div class="title">
{{ type }}- {{ title }}
<span v-if="report && (report.endTime || report.createTime)">
<span style="margin-left: 10px">{{ $t('report.test_start_time') }}</span>
<span style="margin-left: 10px"
>{{ $t("report.test_start_time") }}</span
>
<span class="time"> {{ report.createTime | datetimeFormat }}</span>
<span style="margin-left: 10px">{{ $t('report.test_end_time') }}</span>
<span style="margin-left: 10px"
>{{ $t("report.test_end_time") }}</span
>
<span class="time"> {{ report.endTime | datetimeFormat }}</span>
</span>
</div>
</div>
<div class="report-right">
<img class="logo" src="/assets/logo-MeterSphere.png">
<img class="logo" src="/assets/logo-MeterSphere.png" />
</div>
</el-row>
<el-row v-if="showProjectEnv" type="flex">
<span> {{ $t('commons.environment') + ':' }} </span>
<div v-for="(values,key) in projectEnvMap" :key="key" style="margin-right: 10px">
<el-row type="flex" style="margin-top: 5px">
<el-col v-if="this.mode">
<div style="float: left">
<span> {{ $t("report.run_model") + ":" }} </span>
</div>
<div style="color: #61c550; margin-left: 10px; float: left">
{{ getModeName(this.mode) }}
</div>
</el-col>
<el-col v-if="this.poolName">
<div style="float: left">
<span> {{ $t("load_test.select_resource_pool") + ":" }} </span>
</div>
<div style="color: #61c550; margin-left: 10px; float: left">
{{ this.poolName }}
</div>
</el-col>
<el-col></el-col>
</el-row>
<el-row v-if="showProjectEnv" type="flex" style="margin-top: 5px">
<span> {{ $t("commons.environment") + ":" }} </span>
<div
v-for="(values, key) in projectEnvMap"
:key="key"
style="margin-right: 10px"
>
{{ key + ":" }}
<ms-tag v-for="(item,index) in values" :key="index" type="success" :content="item"
style="margin-left: 2px"/>
<ms-tag
v-for="(item, index) in values"
:key="index"
type="success"
:content="item"
style="margin-left: 2px"
/>
</div>
</el-row>
</div>
@ -33,20 +65,36 @@ import MsTag from "../MsTag";
export default {
name: "MsReportTitle",
components: { MsTag },
props: {title: String, type: String, report: Object, projectEnvMap: {}},
props: {
title: String,
type: String,
report: Object,
projectEnvMap: {},
mode: String,
poolName: String,
},
data() {
return {}
return {};
},
computed: {
showProjectEnv() {
return this.projectEnvMap && JSON.stringify(this.projectEnvMap) !== '{}';
return this.projectEnvMap && JSON.stringify(this.projectEnvMap) !== "{}";
},
},
methods: {
getModeName(mode) {
switch (mode) {
case "serial":
return this.$t("run_mode.serial");
case "parallel":
return this.$t("run_mode.parallel");
}
}
},
},
};
</script>
<style scoped>
.report-left {
float: left;
}
@ -58,10 +106,9 @@ export default {
.logo {
height: 30px;
line-height: 30px;
vertical-align: middle
vertical-align: middle;
}
.report-left {
font-size: 15px;
}
@ -73,6 +120,4 @@ export default {
.title {
margin-bottom: 5px;
}
</style>

View File

@ -63,6 +63,7 @@ const message = {
current_project: 'Current Project',
not_exist: "Not exist",
name: 'Name',
template_name: 'Template Name',
description: 'Description',
annotation: 'Annotation',
clear: 'Clear',

View File

@ -62,6 +62,7 @@ const message = {
current_project: '当前项目',
not_exist: "不存在",
name: '名称',
template_name: '模板名称',
description: '描述',
annotation: '注释',
clear: '清空',

View File

@ -62,6 +62,7 @@ const message = {
current_project: '當前項目',
not_exist: "不存在",
name: '名稱',
template_name: '模版名稱',
description: '描述',
annotation: '註釋',
clear: '清空',

View File

@ -23,7 +23,7 @@
<spring-cloud.version>2021.0.5</spring-cloud.version>
<spring-security.version>5.7.5</spring-security.version>
<dubbo.version>2.7.18</dubbo.version>
<platform-plugin-sdk.version>1.1.0</platform-plugin-sdk.version>
<platform-plugin-sdk.version>1.2.0</platform-plugin-sdk.version>
<flyway.version>7.15.0</flyway.version>
<shiro.version>1.10.1</shiro.version>
<mssql-jdbc.version>7.4.1.jre8</mssql-jdbc.version>

View File

@ -18,7 +18,7 @@
<ms-form-divider :title="$t('test_track.plan_view.base_info')"/>
<el-form :model="form" :rules="rules" label-position="right" label-width="80px" size="small" ref="form">
<el-form-item :label="$t('commons.name')" prop="name" :label-width="labelWidth">
<el-form-item :label="$t('commons.template_name')" prop="name" :label-width="labelWidth">
<el-input :disabled="isSystem" v-model="form.name" autocomplete="off"></el-input>
</el-form-item>

View File

@ -210,6 +210,11 @@ public class IssuesController {
return issuesService.getPlatformTransitions(request);
}
@PostMapping("/platform/status")
public List<PlatformStatusDTO> getPlatformStatus(@RequestBody PlatformIssueTypeRequest request) {
return issuesService.getPlatformStatus(request);
}
@GetMapping("/platform/option")
public List<SelectOption> getPlatformOptions() {
return platformPluginService.getPlatformOptions();

View File

@ -1449,16 +1449,45 @@ public class IssuesService {
return extIssuesMapper.getIssues(request);
}
public List<PlatformStatusDTO> getPlatformStatus(PlatformIssueTypeRequest request) {
List<PlatformStatusDTO> platformStatusDTOS = new ArrayList<>();
Project project = baseProjectService.getProjectById(request.getProjectId());
String projectConfig = PlatformPluginService.getCompatibleProjectConfig(project);
String platform = project.getPlatform();
if (PlatformPluginService.isPluginPlatform(platform)) {
return platformPluginService.getPlatform(platform)
.getStatusList(projectConfig)
.stream().map(item -> {
// 全部插件化后简化
PlatformStatusDTO platformStatusDTO = new PlatformStatusDTO();
platformStatusDTO.setLabel(item.getLabel());
platformStatusDTO.setValue(item.getValue());
return platformStatusDTO;
})
.collect(Collectors.toList());
} else {
List<String> platforms = getPlatforms(project);
if (CollectionUtils.isEmpty(platforms)) {
return platformStatusDTOS;
}
IssuesRequest issuesRequest = getDefaultIssueRequest(request.getProjectId(), request.getWorkspaceId());
return IssueFactory.createPlatform(platform, issuesRequest).getTransitions(request.getPlatformKey());
}
}
public List<PlatformStatusDTO> getPlatformTransitions(PlatformIssueTypeRequest request) {
List<PlatformStatusDTO> platformStatusDTOS = new ArrayList<>();
if (!StringUtils.isBlank(request.getPlatformKey())) {
Project project = baseProjectService.getProjectById(request.getProjectId());
String projectConfig = PlatformPluginService.getCompatibleProjectConfig(project);
String platform = project.getPlatform();
if (PlatformPluginService.isPluginPlatform(platform)) {
return platformPluginService.getPlatform(platform)
.getStatusList(request.getPlatformKey())
.getTransitions(projectConfig, request.getPlatformKey())
.stream().map(item -> {
// 全部插件化后简化
PlatformStatusDTO platformStatusDTO = new PlatformStatusDTO();
platformStatusDTO.setLabel(item.getLabel());
platformStatusDTO.setValue(item.getValue());

View File

@ -212,6 +212,10 @@ export function getPlatformStatus(param) {
return post('/issues/platform/status', param);
}
export function getPlatformTransitions(param) {
return post('/issues/platform/transitions', param);
}
export function enableThirdPartTemplate(projectId) {
return get(BASE_URL + 'third/part/template/enable/' + projectId);
}

View File

@ -200,13 +200,11 @@ import {hasLicense} from "metersphere-frontend/src/utils/permission";
import {
enableThirdPartTemplate,
getIssuePartTemplateWithProject,
getPlatformStatus,
getIssuesById,
saveOrUpdateIssue,
saveFollow,
getFollow,
getComments,
getTapdUser
getTapdUser, getPlatformTransitions
} from "@/api/issue";
import {
uploadIssueAttachment,
@ -433,7 +431,7 @@ export default {
projectId: getCurrentProjectID(),
workspaceId: getCurrentWorkspaceId()
}
getPlatformStatus(data).then(response => {
getPlatformTransitions(data).then(response => {
if (response.data.length > 0) {
this.platformTransitions = response.data;
}

View File

@ -65,15 +65,14 @@
<template v-slot="scope">
<span v-if="item.id === 'platformStatus'">
<span v-if="scope.row.platform ==='Zentao'">
{{
scope.row.platformStatus ? issueStatusMap[scope.row.platformStatus] : '--'
}}
<span v-if="scope.row.platform === 'Tapd'">
{{ scope.row.platformStatus ? tapdIssueStatusMap[scope.row.platformStatus] : '--' }}
</span>
<span
v-else-if="scope.row.platform ==='Tapd'">{{
scope.row.platformStatus ? tapdIssueStatusMap[scope.row.platformStatus] : '--'
}}
<span v-else-if="scope.row.platform ==='Local'">
{{ scope.row.platformStatus ? tapdIssueStatusMap[scope.row.platformStatus] : '--' }}
</span>
<span v-else-if="platformStatusMap && platformStatusMap.get(scope.row.platformStatus)">
{{ platformStatusMap.get(scope.row.platformStatus) }}
</span>
<span v-else>
{{ scope.row.platformStatus ? scope.row.platformStatus : '--' }}
@ -161,7 +160,7 @@ import {
getIssues,
syncIssues,
deleteIssue,
getIssuesById, batchDeleteIssue, getPlatformOption, syncAllIssues
getIssuesById, batchDeleteIssue, getPlatformOption, syncAllIssues, getPlatformStatus
} from "@/api/issue";
import {
getCustomFieldValue,
@ -240,6 +239,8 @@ export default {
loading: false,
dataSelectRange: "",
platformOptions: [],
platformStatus: [],
platformStatusMap: new Map(),
hasLicense: false,
columns: {
num: {
@ -303,6 +304,17 @@ export default {
});
this.hasLicense = hasLicense();
getPlatformStatus( {
projectId: getCurrentProjectID(),
workspaceId: getCurrentWorkspaceId()
}).then((r) => {
this.platformStatus = r.data;
this.platformStatusMap = new Map();
this.platformStatus.forEach(item => {
this.platformStatusMap.set(item.value, item.label);
});
});
},
computed: {
platformFilters() {