fix(测试跟踪): 修改执行测试计划时报告里运行环境的查询方式

--bug=1021786 --user=宋天阳 【测试跟踪】历史数据运行环境显示不对
https://www.tapd.cn/55049933/s/1339992
This commit is contained in:
song-tianyang 2023-02-21 17:58:16 +08:00 committed by 建国
parent 6944ccba05
commit fe109ddda7
7 changed files with 298 additions and 156 deletions

View File

@ -41,6 +41,7 @@ import io.metersphere.service.plan.remote.TestPlanService;
import io.metersphere.service.scenario.ApiScenarioModuleService;
import io.metersphere.service.scenario.ApiScenarioReportService;
import io.metersphere.service.scenario.ApiScenarioService;
import jakarta.annotation.Resource;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
@ -52,7 +53,6 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import jakarta.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
@ -351,12 +351,11 @@ public class TestPlanScenarioCaseService {
map.put(s, envMap.get(s));
}
}
String envJsonStr = JSON.toJSONString(map);
if (!StringUtils.equals(envJsonStr, testPlanApiScenario.getEnvironment())) {
testPlanApiScenario.setEnvironmentType(EnvironmentType.JSON.toString());
testPlanApiScenario.setEnvironment(JSON.toJSONString(map));
mapper.updateByPrimaryKeyWithBLOBs(testPlanApiScenario);
}
testPlanApiScenario.setEnvironmentType(runModeConfig.getEnvironmentType());
testPlanApiScenario.setEnvironmentGroupId(runModeConfig.getEnvironmentGroupId());
testPlanApiScenario.setEnvironment(JSON.toJSONString(map));
mapper.updateByPrimaryKeyWithBLOBs(testPlanApiScenario);
}
sqlSession.flushStatements();
if (sqlSession != null && sqlSessionFactory != null) {

View File

@ -40,7 +40,7 @@
AND t.user_id = #{request.executor}
</if>
AND (t.integrated_report_id IS NULL OR t.integrated_report_id = 'null')
ORDER BY t.create_time DESC
ORDER BY t.create_time,t.end_time DESC
</select>
<select id="getScenarioTasks" resultType="io.metersphere.task.dto.TaskCenterDTO" parameterType="java.lang.String">
@ -70,7 +70,7 @@
<if test="request.executor != null and request.executor != ''">
AND t.user_id = #{request.executor}
</if>
ORDER BY t.create_time DESC
ORDER BY t.create_time,t.end_time DESC
</select>
<select id="getPerfTasks" resultType="io.metersphere.task.dto.TaskCenterDTO" parameterType="java.lang.String">

View File

@ -5,11 +5,13 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.metersphere.base.domain.*;
import io.metersphere.commons.constants.*;
import io.metersphere.commons.exception.MSException;
import io.metersphere.commons.utils.PageUtils;
import io.metersphere.commons.utils.Pager;
import io.metersphere.dto.ScheduleDTO;
import io.metersphere.dto.TestPlanDTOWithMetric;
import io.metersphere.dto.TestPlanRerunParametersDTO;
import io.metersphere.i18n.Translator;
import io.metersphere.log.annotation.MsAuditLog;
import io.metersphere.notice.annotation.SendNotice;
import io.metersphere.plan.dto.TestCaseReportStatusResultDTO;
@ -26,15 +28,15 @@ import io.metersphere.plan.request.function.TestCaseRelevanceRequest;
import io.metersphere.plan.service.TestPlanProjectService;
import io.metersphere.plan.service.TestPlanRerunService;
import io.metersphere.plan.service.TestPlanService;
import io.metersphere.plan.service.remote.api.PlanApiAutomationService;
import io.metersphere.request.ScheduleRequest;
import io.metersphere.service.BaseScheduleService;
import io.metersphere.service.BaseUserService;
import io.metersphere.service.wapper.CheckPermissionService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;
@ -53,7 +55,7 @@ public class TestPlanController {
@Resource
private BaseScheduleService baseScheduleService;
@Resource
private PlanApiAutomationService planApiAutomationService;
private BaseUserService baseUserService;
@Resource
private TestPlanRerunService testPlanRerunService;
@ -240,6 +242,9 @@ public class TestPlanController {
@PostMapping("/run")
public String run(@RequestBody TestPlanRunRequest testplanRunRequest) {
if (baseUserService.getUserDTO(testplanRunRequest.getUserId()) == null) {
MSException.throwException(Translator.get("user_not_exist"));
}
return testPlanService.runPlan(testplanRunRequest);
}

View File

@ -15,6 +15,8 @@ public class TestPlanReportRunInfoDTO {
private String envGroupId;
private String runMode;
private Map<String, String> requestEnvMap;
// <测试计划场景关联表ID, <项目ID环境ID>>
private Map<String, Map<String, List<String>>> scenarioRunInfo;
// <测试计划场景关联表ID, <项目ID环境ID>>
@ -47,7 +49,7 @@ public class TestPlanReportRunInfoDTO {
}});
}
}
public void putUiScenarioRunInfo(String scenarioResourceId, String projectId, String environmentId) {
if (uiScenarioRunInfo.containsKey(scenarioResourceId)) {
if (uiScenarioRunInfo.get(scenarioResourceId).containsKey(projectId)) {

View File

@ -10,7 +10,9 @@ import io.metersphere.commons.utils.*;
import io.metersphere.constants.RunModeConstants;
import io.metersphere.dto.*;
import io.metersphere.environment.service.BaseEnvGroupProjectService;
import io.metersphere.environment.service.BaseEnvironmentService;
import io.metersphere.excel.constants.TestPlanTestCaseStatus;
import io.metersphere.i18n.Translator;
import io.metersphere.log.vo.OperatingLogDetails;
import io.metersphere.plan.constant.ApiReportStatus;
import io.metersphere.plan.dto.*;
@ -24,6 +26,7 @@ import io.metersphere.plan.service.remote.ui.PlanTestPlanUiScenarioCaseService;
import io.metersphere.plan.utils.TestPlanRequestUtil;
import io.metersphere.plan.utils.TestPlanStatusCalculator;
import io.metersphere.request.report.QueryTestPlanReportRequest;
import io.metersphere.service.BaseProjectService;
import io.metersphere.service.BaseUserService;
import io.metersphere.service.ServiceUtils;
import io.metersphere.utils.DiscoveryUtil;
@ -105,6 +108,10 @@ public class TestPlanReportService {
private PlanTestPlanScenarioCaseService planTestPlanScenarioCaseService;
@Resource
private BaseUserService baseUserService;
@Resource
private BaseEnvironmentService apiTestEnvironmentService;
@Resource
private BaseProjectService baseProjectService;
private final String GROUP = "GROUP";
@ -264,6 +271,8 @@ public class TestPlanReportService {
List<TestPlanApiScenarioInfoDTO> scenarios) {
TestPlanReportRunInfoDTO runInfoDTO = new TestPlanReportRunInfoDTO();
runInfoDTO.setRequestEnvMap(config.getEnvMap());
final Map<String, String> runEnvMap = MapUtils.isNotEmpty(config.getEnvMap()) ? config.getEnvMap() : new HashMap<>();
runInfoDTO.setRunMode(config.getMode());
@ -1129,7 +1138,8 @@ public class TestPlanReportService {
}
TestPlanSimpleReportDTO testPlanReportDTO = new TestPlanSimpleReportDTO();
BeanUtils.copyBean(testPlanReportDTO, testPlanReportContent);
this.generateEnvironmentInfo(testPlanReportDTO, reportId);
TestPlanReport testPlanReport = testPlanReportMapper.selectByPrimaryKey(reportId);
this.initTestPlanReportEnv(testPlanReportDTO, testPlanReport);
testPlanReportDTO.setFunctionResult(
getReportContentResultObject(testPlanReportContent.getFunctionResult(), TestPlanFunctionResultReportDTO.class)
@ -1204,7 +1214,6 @@ public class TestPlanReportService {
);
testPlanReportDTO.setId(reportId);
TestPlanReport testPlanReport = testPlanReportMapper.selectByPrimaryKey(testPlanReportContent.getTestPlanReportId());
testPlanReportDTO.setName(testPlanReport.getName());
TestPlanService testPlanService = CommonBeanFactory.getBean(TestPlanService.class);
TestPlanExtReportDTO extReport = null;
@ -1253,6 +1262,46 @@ public class TestPlanReportService {
}
}
public void initTestPlanReportEnv(TestPlanSimpleReportDTO testPlanReportDTO, TestPlanReport testPlanReport) {
TestPlanReportRunInfoDTO runInfoDTO = null;
if (StringUtils.isNotEmpty(testPlanReport.getRunInfo())) {
try {
runInfoDTO = JSON.parseObject(testPlanReport.getRunInfo(), TestPlanReportRunInfoDTO.class);
} catch (Exception e) {
LogUtil.error("解析测试计划报告记录的运行环境信息[" + testPlanReport.getRunInfo() + "]时出错!", e);
}
}
if (runInfoDTO != null) {
if (StringUtils.isNotEmpty(runInfoDTO.getEnvGroupId())) {
EnvironmentGroup environmentGroup = apiTestEnvironmentService.selectById(runInfoDTO.getEnvGroupId());
if (StringUtils.isNotEmpty(environmentGroup.getName())) {
testPlanReportDTO.setEnvGroupName(environmentGroup.getName());
}
} else {
if (MapUtils.isNotEmpty(runInfoDTO.getRequestEnvMap())) {
Map<String, List<String>> projectEnvMap = new HashMap<>();
for (Map.Entry<String, String> entry : runInfoDTO.getRequestEnvMap().entrySet()) {
String projectId = entry.getKey();
String envId = entry.getValue();
Project project = baseProjectService.getProjectById(projectId);
String projectName = project == null ? null : project.getName();
String envNames = apiTestEnvironmentService.selectNameById(envId);
if (StringUtils.isNotEmpty(projectName) && StringUtils.isNotEmpty(envNames)) {
projectEnvMap.put(projectName, new ArrayList<>() {{
this.add(envNames);
}});
}
}
if (MapUtils.isNotEmpty(projectEnvMap)) {
testPlanReportDTO.setProjectEnvMap(projectEnvMap);
}
}
}
testPlanReportDTO.setRunMode(StringUtils.equalsIgnoreCase(runInfoDTO.getRunMode(), "serial") ? Translator.get("serial") : Translator.get("parallel"));
}
}
private boolean isDynamicallyGenerateReports(TestPlanReportContentWithBLOBs testPlanReportContent) {
return testPlanReportContent != null &&
(StringUtils.isNotEmpty(testPlanReportContent.getPlanApiCaseReportStruct()) || StringUtils.isNotEmpty(testPlanReportContent.getPlanScenarioReportStruct()) || StringUtils.isNotEmpty(testPlanReportContent.getPlanLoadCaseReportStruct()) || StringUtils.isNotEmpty(testPlanReportContent.getPlanUiScenarioReportStruct()));

View File

@ -1332,6 +1332,7 @@ public class TestPlanService {
config = JSON.parseMap(reportConfig);
}
TestPlanExecuteReportDTO testPlanExecuteReportDTO = testPlanReportService.genTestPlanExecuteReportDTOByTestPlanReportContent(testPlanReportContentWithBLOBs);
TestPlanSimpleReportDTO report = null;
boolean apiBaseInfoChanged = false;
if (StringUtils.isEmpty(testPlanReportContentWithBLOBs.getApiBaseCount())) {

View File

@ -1,66 +1,138 @@
<template>
<div>
<el-radio-group v-model="radio" style="width: 100%" @change="radioChange" class="radio-change">
<el-radio :label="ENV_TYPE.JSON">{{ $t('workspace.env_group.env_list') }}</el-radio>
<el-radio :label="ENV_TYPE.GROUP" v-if="showEnvGroup">{{ $t('workspace.env_group.name') }}<i class="el-icon-tickets mode-span" @click="viewGroup"></i></el-radio>
<el-radio-group
v-model="radio"
style="width: 100%"
@change="radioChange"
class="radio-change"
>
<el-radio :label="ENV_TYPE.JSON">{{
$t("workspace.env_group.env_list")
}}</el-radio>
<el-radio :label="ENV_TYPE.GROUP" v-if="showEnvGroup"
>{{ $t("workspace.env_group.name")
}}<i class="el-icon-tickets mode-span" @click="viewGroup"></i
></el-radio>
</el-radio-group>
<div v-for="(pe, pIndex) in eventData" :key="pe.id" v-show="radio === ENV_TYPE.JSON">
<el-card shadow="never" style="margin-top: 8px;background: #F5F6F7;border-radius: 4px;">
<i @click="expandCard(pIndex)" v-if="pe.expendStatus==='close'" class="el-icon-caret-right" style="color: var(--primary_color)"/>
<i @click="expandCard(pIndex)" v-else class="el-icon-caret-bottom" style="color: var(--primary_color)"/>
<div
v-for="(pe, pIndex) in eventData"
:key="pe.id"
v-show="radio === ENV_TYPE.JSON"
>
<el-card
shadow="never"
style="margin-top: 8px; background: #f5f6f7; border-radius: 4px"
>
<i
@click="expandCard(pIndex)"
v-if="pe.expendStatus === 'close'"
class="el-icon-caret-right"
style="color: var(--primary_color)"
/>
<i
@click="expandCard(pIndex)"
v-else
class="el-icon-caret-bottom"
style="color: var(--primary_color)"
/>
<span class="project-name" :title="getProjectName(pe.id)">
{{ getProjectName(pe.id) }}
</span><br/>
<div v-if="pe.expendStatus==='open'">
<el-radio-group v-model="pe.envRadio" style="width: 100%;" @change="envRadioChange(pe.envRadio,pIndex)" class="radio-change">
<el-radio label="DEFAULT_ENV" style="margin-top: 7px">{{$t('api_test.environment.default_environment') }}</el-radio>
<el-radio label="CUSTOMIZE_ENV" style="margin-top: 7px">{{$t('api_test.environment.choose_new_environment')}}</el-radio>
{{ getProjectName(pe.id) }} </span
><br />
<div v-if="pe.expendStatus === 'open'">
<el-radio-group
v-model="pe.envRadio"
style="width: 100%"
@change="envRadioChange(pe.envRadio, pIndex)"
class="radio-change"
>
<el-radio label="DEFAULT_ENV" style="margin-top: 7px">{{
$t("api_test.environment.default_environment")
}}</el-radio>
<el-radio label="CUSTOMIZE_ENV" style="margin-top: 7px">{{
$t("api_test.environment.choose_new_environment")
}}</el-radio>
</el-radio-group>
<el-tag v-show="!pe.showEnvSelect" v-for="(itemName,index) in selectedEnvName.get(pe.id)" :key="index" size="mini"
style="margin-left: 0; margin-right: 2px;margin-top: 8px">{{ itemName }}</el-tag>
<el-select v-show="pe.showEnvSelect" v-model="pe['selectEnv']" filterable
:placeholder="$t('api_test.environment.select_environment')"
style="margin-top: 8px;width: 100%;" size="small" @change="chooseEnv">
<el-option v-for="(environment, index) in pe.envs" :key="index"
:label="environment.name"
:value="environment.id"/>
<el-tag
v-show="!pe.showEnvSelect"
v-for="(itemName, index) in selectedEnvName.get(pe.id)"
:key="index"
size="mini"
style="margin-left: 0; margin-right: 2px; margin-top: 8px"
>{{ itemName }}</el-tag
>
<el-select
v-show="pe.showEnvSelect"
v-model="pe['selectEnv']"
filterable
:placeholder="$t('api_test.environment.select_environment')"
style="margin-top: 8px; width: 100%"
size="small"
@change="chooseEnv"
>
<el-option
v-for="(environment, index) in pe.envs"
:key="index"
:label="environment.name"
:value="environment.id"
/>
</el-select>
</div>
</el-card>
</div>
<div v-show="radio === ENV_TYPE.GROUP">
<div>
<el-select v-show="!hasOptionGroup" v-model="envGroupId" :placeholder="$t('workspace.env_group.select')" @change="chooseEnvGroup"
style="margin-top: 8px;width: 100%;" size="small">
<el-option v-for="(group, index) in groups" :key="index"
:label="group.name"
:value="group.id"/>
<el-select
v-show="!hasOptionGroup"
v-model="envGroupId"
:placeholder="$t('workspace.env_group.select')"
@change="chooseEnvGroup"
style="margin-top: 8px; width: 100%"
size="small"
>
<el-option
v-for="(group, index) in groups"
:key="index"
:label="group.name"
:value="group.id"
/>
</el-select>
<el-select v-show="hasOptionGroup" v-model="envGroupId" :placeholder="$t('workspace.env_group.select')"
style="margin-top: 8px;width: 100%;" @change="chooseEnvGroup" size="small" clearable>
<el-select
v-show="hasOptionGroup"
v-model="envGroupId"
:placeholder="$t('workspace.env_group.select')"
style="margin-top: 8px; width: 100%"
@change="chooseEnvGroup"
size="small"
clearable
>
<el-option-group
v-for="group in groups"
:key="group.label"
:label="group.label">
:label="group.label"
>
<el-option
v-for="item in group.options"
:key="item.name"
:label="item.name"
:disabled="item.disabled"
:value="item.id">
:value="item.id"
>
</el-option>
</el-option-group>
</el-select>
</div>
<el-dialog :visible="visible" append-to-body :title="$t('workspace.env_group.name')" @close="visible = false"
style="height: 800px;">
<el-dialog
:visible="visible"
append-to-body
:title="$t('workspace.env_group.name')"
@close="visible = false"
style="height: 800px"
>
<template>
<environment-group style="overflow-y: auto;"
:screen-height="'350px'"
:read-only="true"
<environment-group
style="overflow-y: auto"
:screen-height="'350px'"
:read-only="true"
></environment-group>
</template>
</el-dialog>
@ -68,33 +140,34 @@
</div>
</template>
<script>
import {ENV_TYPE} from "metersphere-frontend/src/utils/constants";
import {environmentGetALL,getEnvironmentOptions} from "metersphere-frontend/src/api/environment";
import { ENV_TYPE } from "metersphere-frontend/src/utils/constants";
import {
environmentGetALL,
getEnvironmentOptions,
} from "metersphere-frontend/src/api/environment";
import MsTag from "metersphere-frontend/src/components/MsTag";
import EnvironmentGroup from "@/business/plan/env/EnvironmentGroupList";
import {getEnvironmentByProjectId} from "@/api/remote/api/api-environment";
import {parseEnvironment} from "metersphere-frontend/src/model/EnvironmentModel";
import { getEnvironmentByProjectId } from "@/api/remote/api/api-environment";
import { parseEnvironment } from "metersphere-frontend/src/model/EnvironmentModel";
export default {
name: "EnvSelectPopover",
components: {MsTag,EnvironmentGroup},
data(){
components: { MsTag, EnvironmentGroup },
data() {
return {
radio: this.environmentType,
visible: false,
groups:[],
groups: [],
disabledGroups: [],
notDisabledGroups: [],
selectedEnvName:new Map(),
showEnvName:false,
eventData:[],
evnList:[],
selectEnvMap:new Map(),
selectedEnvName: new Map(),
showEnvName: false,
eventData: [],
evnList: [],
selectEnvMap: new Map(),
envGroupId: this.groupId,
}
};
},
watch: {
groupId(val) {
@ -102,150 +175,163 @@ export default {
},
environmentType(val) {
this.radio = val;
}
},
},
computed: {
ENV_TYPE() {
return ENV_TYPE;
}
},
},
props:{
props: {
showEnvGroup: {
type : Boolean,
default: true
type: Boolean,
default: true,
},
projectIds: Set,
projectList:Array,
projectEnvMap:Object,
projectList: Array,
projectEnvMap: Object,
envMap: Map,
environmentType: String,
groupId: {
type: String,
default() {
return "";
}
},
},
hasOptionGroup: {
type: Boolean,
default() {
return false;
}
},
},
},
methods: {
open(){
open() {
this.envGroupId = this.groupId;
this.initDefaultEnv();
this.getgroups();
},
radioChange(val){
radioChange(val) {
this.$emit("update:environmentType", val);
},
getProjectName(id) {
const project = this.projectList.find(p => p.id === id);
const project = this.projectList.find((p) => p.id === id);
return project ? project.name : "";
},
envRadioChange(val,index){
this.eventData[index].envRadio = val
this.eventData[index].showEnvSelect = this.eventData[index].envRadio === "CUSTOMIZE_ENV";
envRadioChange(val, index) {
this.eventData[index].envRadio = val;
this.eventData[index].showEnvSelect =
this.eventData[index].envRadio === "CUSTOMIZE_ENV";
},
viewGroup() {
this.visible = true;
},
getgroups(){
if (!this.hasOptionGroup){
environmentGetALL().then(res => {
getgroups() {
if (!this.hasOptionGroup) {
environmentGetALL().then((res) => {
let data = res.data;
this.groups = data ? data : [];
})
});
} else {
getEnvironmentOptions({projectIds: [...this.projectIds]}).then(res => {
let groups = res.data;
this.disabledGroups = groups.filter(group => group.disabled === true);
this.notDisabledGroups = groups.filter(group => group.disabled === false);
this.$set(this.groups, 0, {
label: this.$t('workspace.env_group.available_group'),
options: this.notDisabledGroups
});
this.$set(this.groups, 1, {
label: this.$t('workspace.env_group.not_available_group'),
options: this.disabledGroups
});
})
getEnvironmentOptions({ projectIds: [...this.projectIds] }).then(
(res) => {
let groups = res.data;
this.disabledGroups = groups.filter(
(group) => group.disabled === true
);
this.notDisabledGroups = groups.filter(
(group) => group.disabled === false
);
this.$set(this.groups, 0, {
label: this.$t("workspace.env_group.available_group"),
options: this.notDisabledGroups,
});
this.$set(this.groups, 1, {
label: this.$t("workspace.env_group.not_available_group"),
options: this.disabledGroups,
});
}
);
}
},
chooseEnv(val){
let filter = this.evnList.filter(e => e.id === val);
this.selectEnvMap.set(filter[0].projectId,val);
this.$emit('setProjectEnvMap', this.selectEnvMap);
chooseEnv(val) {
let filter = this.evnList.filter((e) => e.id === val);
this.selectEnvMap.set(filter[0].projectId, val);
this.$emit("setProjectEnvMap", this.selectEnvMap);
},
chooseEnvGroup(envGroupId){
chooseEnvGroup(envGroupId) {
this.$emit("setEnvGroup", envGroupId);
},
initDefaultEnv(){
initDefaultEnv() {
this.selectedEnvName = new Map();
this.evnList = [];
this.projectIds.forEach(d => {
let item = {id: d, envs: [], selectEnv: "",envRadio:"DEFAULT_ENV",showEnvSelect:false,expendStatus:"open"};
this.projectIds.forEach((d) => {
let item = {
id: d,
envs: [],
selectEnv: "",
envRadio: "DEFAULT_ENV",
showEnvSelect: false,
expendStatus: "open",
};
this.eventData.push(item);
getEnvironmentByProjectId(d)
.then(res => {
let envs = res.data;
envs.forEach(environment => {
parseEnvironment(environment);
});
//
let temp = this.eventData.find(dt => dt.id === d);
temp.envs = envs;
envs.forEach(t=>{
this.evnList.push(t);
})
if (this.envMap && this.envMap.size > 0) {
let envId = this.envMap.get(id);
//
temp.selectEnv = envs.filter(e => e.id === envId).length === 0 ? null : envId;
}
if (this.projectEnvMap && Object.keys(this.projectEnvMap).length > 0) {
let projectEnvMapElement = this.projectEnvMap[d];
if (projectEnvMapElement.length>0) {
projectEnvMapElement.forEach(envId => {
let filter = envs.filter(e => e.id === envId);
if (!this.selectedEnvName.has(d)) {
let name = [];
name.push(filter[0].name)
this.selectedEnvName.set(d,name);
} else {
this.selectedEnvName.get(d).push(filter[0].name);
}
});
}
}
getEnvironmentByProjectId(d).then((res) => {
let envs = res.data;
envs.forEach((environment) => {
parseEnvironment(environment);
});
})
//
let temp = this.eventData.find((dt) => dt.id === d);
temp.envs = envs;
envs.forEach((t) => {
this.evnList.push(t);
});
if (this.envMap && this.envMap.size > 0) {
let envId = this.envMap.get(id);
//
temp.selectEnv =
envs.filter((e) => e.id === envId).length === 0 ? null : envId;
}
if (
this.projectEnvMap &&
Object.keys(this.projectEnvMap).length > 0
) {
let projectEnvMapElement = this.projectEnvMap[d];
if (projectEnvMapElement.length > 0) {
projectEnvMapElement.forEach((envId) => {
let filter = envs.filter((e) => e.id === envId);
if (!this.selectedEnvName.has(d)) {
let name = [];
name.push(filter[0].name);
this.selectedEnvName.set(d, name);
} else {
this.selectedEnvName.get(d).push(filter[0].name);
}
this.chooseEnv(filter[0].id);
});
}
}
});
});
},
expandCard(index){
expandCard(index) {
if (this.eventData[index].expendStatus === "open") {
this.eventData[index].expendStatus = "close"
}else {
this.eventData[index].expendStatus = "open"
this.eventData[index].expendStatus = "close";
} else {
this.eventData[index].expendStatus = "open";
}
}
}
}
},
},
};
</script>
<style scoped>
.mode-span{
.mode-span {
margin-left: 6px;
}
</style>
<style lang="scss" scoped>
<style lang="scss" scoped>
.radio-change:deep(.el-radio__input.is-checked + .el-radio__label) {
color: #606266 !important;
}
</style>