feat(测试计划): 高级搜索中添加用例状态和需求过滤条件
--story=1010335 --user=李玉号 【测试计划】测试计划中关联测试用例时 高级筛选条件中增加用例状态过滤 https://www.tapd.cn/55049933/s/1289108
This commit is contained in:
parent
a66a70e7d8
commit
5dfcafd6d1
|
@ -223,6 +223,12 @@
|
||||||
<property name="object" value="${condition}.status"/>
|
<property name="object" value="${condition}.status"/>
|
||||||
</include>
|
</include>
|
||||||
</if>
|
</if>
|
||||||
|
<if test="${condition}.case_status != null">
|
||||||
|
and t1.case_status
|
||||||
|
<include refid="condition">
|
||||||
|
<property name="object" value="${condition}.case_status"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
<if test="${condition}.exec_result != null">
|
<if test="${condition}.exec_result != null">
|
||||||
and (t1.status
|
and (t1.status
|
||||||
<choose>
|
<choose>
|
||||||
|
|
|
@ -158,6 +158,13 @@
|
||||||
</if>
|
</if>
|
||||||
</foreach>
|
</foreach>
|
||||||
</if>
|
</if>
|
||||||
|
<if test="request.combine != null">
|
||||||
|
<include refid="combine">
|
||||||
|
<property name="condition" value="request.combine"/>
|
||||||
|
<property name="name" value="request.name"/>
|
||||||
|
<property name="objectKey" value="request.combine.tags"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
<include refid="queryVersionCondition">
|
<include refid="queryVersionCondition">
|
||||||
<property name="versionTable" value="a"/>
|
<property name="versionTable" value="a"/>
|
||||||
</include>
|
</include>
|
||||||
|
@ -179,6 +186,52 @@
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<sql id="combine">
|
||||||
|
<if test='${condition}.name != null and (${name} == null or ${name} == "")'>
|
||||||
|
and c.name
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="${condition}.name"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
|
<if test="${condition}.updateTime != null">
|
||||||
|
and t.update_time
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="${condition}.updateTime"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
|
<if test="${condition}.createTime != null">
|
||||||
|
and t.create_time
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="${condition}.createTime"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
|
<if test="${condition}.priority != null">
|
||||||
|
and c.priority
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="${condition}.priority"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
|
<if test="${condition}.path != null">
|
||||||
|
and c.path
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="${condition}.path"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
|
<if test="${condition}.status != null">
|
||||||
|
and c.status
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="${condition}.status"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
|
<if test="${condition}.case_status != null">
|
||||||
|
and c.case_status
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="${condition}.case_status"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
|
|
||||||
|
</sql>
|
||||||
<select id="selectIds" resultType="java.lang.String">
|
<select id="selectIds" resultType="java.lang.String">
|
||||||
select
|
select
|
||||||
t.id
|
t.id
|
||||||
|
|
|
@ -117,6 +117,13 @@
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
<include refid="filters"/>
|
<include refid="filters"/>
|
||||||
|
<if test="request.combine != null">
|
||||||
|
<include refid="combine">
|
||||||
|
<property name="condition" value="request.combine"/>
|
||||||
|
<property name="name" value="request.name"/>
|
||||||
|
<property name="objectKey" value="request.combine.tags"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
<if test="request.orders != null and request.orders.size() > 0">
|
<if test="request.orders != null and request.orders.size() > 0">
|
||||||
order by
|
order by
|
||||||
<foreach collection="request.orders" separator="," item="order">
|
<foreach collection="request.orders" separator="," item="order">
|
||||||
|
@ -131,7 +138,38 @@
|
||||||
</foreach>
|
</foreach>
|
||||||
</if>
|
</if>
|
||||||
</select>
|
</select>
|
||||||
|
<sql id="combine">
|
||||||
|
<if test='${condition}.name != null and (${name} == null or ${name} == "")'>
|
||||||
|
and c.name
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="${condition}.name"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
|
<if test="${condition}.updateTime != null">
|
||||||
|
and t.update_time
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="${condition}.updateTime"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
|
<if test="${condition}.createTime != null">
|
||||||
|
and t.create_time
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="${condition}.createTime"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
|
<if test="${condition}.priority != null">
|
||||||
|
and c.priority
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="${condition}.priority"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
|
<if test="${condition}.status != null">
|
||||||
|
and c.status
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="${condition}.status"/>
|
||||||
|
</include>
|
||||||
|
</if>
|
||||||
|
</sql>
|
||||||
<select id="selectByIds" resultType="io.metersphere.base.domain.TestPlanApiScenario">
|
<select id="selectByIds" resultType="io.metersphere.base.domain.TestPlanApiScenario">
|
||||||
select t.*
|
select t.*
|
||||||
from test_plan_api_scenario t
|
from test_plan_api_scenario t
|
||||||
|
|
|
@ -38,6 +38,7 @@ export default {
|
||||||
if (!projectId) {
|
if (!projectId) {
|
||||||
projectId = getCurrentUser().lastProjectId;
|
projectId = getCurrentUser().lastProjectId;
|
||||||
}
|
}
|
||||||
|
let originUrl = this.component.options.url;
|
||||||
this.component.options.url += '/' + projectId;
|
this.component.options.url += '/' + projectId;
|
||||||
this.loading = get(this.component.options.url).then(response => {
|
this.loading = get(this.component.options.url).then(response => {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
|
@ -48,6 +49,7 @@ export default {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
this.component.options.url = originUrl;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -218,6 +218,23 @@ export const API_STATUS = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const CASE_STATUS = {
|
||||||
|
key: "case_status",
|
||||||
|
name: 'MsTableSearchSelect',
|
||||||
|
label: 'commons.status',
|
||||||
|
operator: {
|
||||||
|
options: [OPERATORS.IN, OPERATORS.NOT_IN]
|
||||||
|
},
|
||||||
|
options: [
|
||||||
|
{value: 'Prepare', label: 'test_track.plan.plan_status_prepare'},
|
||||||
|
{value: 'Underway', label: 'test_track.plan.plan_status_running'},
|
||||||
|
{value: 'Completed', label: 'test_track.plan.plan_status_completed'}
|
||||||
|
],
|
||||||
|
props: { // 尾部控件的props,一般为element ui控件的props
|
||||||
|
multiple: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export const API_STATUS_TRASH = {
|
export const API_STATUS_TRASH = {
|
||||||
key: "status",
|
key: "status",
|
||||||
name: 'MsTableSearchSelect',
|
name: 'MsTableSearchSelect',
|
||||||
|
@ -869,13 +886,15 @@ export const API_SCENARIO_CONFIGS_TRASH = [ID, NAME, PRIORITY, TAGS, API_SCENARI
|
||||||
export const TEST_PLAN_REPORT_CONFIGS = [NAME, TEST_PLAN_NAME, CREATOR, CREATE_TIME, TEST_PLAN_TRIGGER_MODE, TEST_PLAN_REPORT_STATUS];
|
export const TEST_PLAN_REPORT_CONFIGS = [NAME, TEST_PLAN_NAME, CREATOR, CREATE_TIME, TEST_PLAN_TRIGGER_MODE, TEST_PLAN_REPORT_STATUS];
|
||||||
|
|
||||||
// 测试计划 功能用例
|
// 测试计划 功能用例
|
||||||
export const TEST_PLAN_TEST_CASE_CONFIGS = [NAME, TAGS, MODULE, PRIORITY, CREATE_TIME, UPDATE_TIME, EXECUTOR, CASE_REVIEW_STATUS, PLAN_CASE_STATUS, PRINCIPAL];
|
export const TEST_PLAN_TEST_CASE_CONFIGS = [NAME, TAGS, MODULE, PRIORITY, CREATE_TIME, UPDATE_TIME, EXECUTOR, CASE_REVIEW_STATUS, PLAN_CASE_STATUS, PRINCIPAL, CASE_DEMAND];
|
||||||
|
export const TEST_PLAN_API_CASE_CONFIGS = [NAME, CASE_STATUS, CREATE_TIME, UPDATE_TIME];
|
||||||
|
export const TEST_PLAN_API_SCENARIO_CONFIGS = [NAME, API_STATUS, CREATE_TIME, UPDATE_TIME];
|
||||||
|
|
||||||
// 测试计划关联页面
|
// 测试计划关联页面
|
||||||
export const TEST_PLAN_RELEVANCE_FUNC_CONFIGS = [NAME, TAGS, CREATE_TIME, UPDATE_TIME, CREATOR];
|
export const TEST_PLAN_RELEVANCE_FUNC_CONFIGS = [NAME, TAGS, CREATE_TIME, UPDATE_TIME, CREATOR];
|
||||||
export const TEST_PLAN_RELEVANCE_API_DEFINITION_CONFIGS = [NAME, API_METHOD, API_PATH, TAGS, UPDATE_TIME, CREATE_TIME, CREATOR];
|
export const TEST_PLAN_RELEVANCE_API_DEFINITION_CONFIGS = [NAME, API_METHOD, API_PATH, TAGS, UPDATE_TIME, CREATE_TIME, CREATOR, API_STATUS];
|
||||||
export const TEST_PLAN_RELEVANCE_API_CASE_CONFIGS = [NAME, PRIORITY, TAGS, UPDATE_TIME, CREATOR, API_PATH];
|
export const TEST_PLAN_RELEVANCE_API_CASE_CONFIGS = [NAME, PRIORITY, TAGS, UPDATE_TIME, CREATOR, API_PATH, CASE_STATUS];
|
||||||
export const TEST_PLAN_RELEVANCE_API_SCENARIO_CONFIGS = [NAME, PRIORITY, TAGS, API_SCENARIO_RESULT, CREATE_TIME, UPDATE_TIME, CREATOR];
|
export const TEST_PLAN_RELEVANCE_API_SCENARIO_CONFIGS = [NAME, PRIORITY, TAGS, API_SCENARIO_RESULT, CREATE_TIME, UPDATE_TIME, CREATOR, API_STATUS];
|
||||||
export const TEST_PLAN_RELEVANCE_UI_SCENARIO_CONFIGS = [NAME, PRIORITY, TAGS, UI_SCENARIO_RESULT, CREATE_TIME, UPDATE_TIME, CREATOR];
|
export const TEST_PLAN_RELEVANCE_UI_SCENARIO_CONFIGS = [NAME, PRIORITY, TAGS, UI_SCENARIO_RESULT, CREATE_TIME, UPDATE_TIME, CREATOR];
|
||||||
export const TEST_PLAN_RELEVANCE_LOAD_CASE = [NAME, STATUS, CREATE_TIME, UPDATE_TIME, CREATOR];
|
export const TEST_PLAN_RELEVANCE_LOAD_CASE = [NAME, STATUS, CREATE_TIME, UPDATE_TIME, CREATOR];
|
||||||
|
|
||||||
|
|
|
@ -132,6 +132,47 @@
|
||||||
<property name="object" value="${condition}.planCaseStatus"/>
|
<property name="object" value="${condition}.planCaseStatus"/>
|
||||||
</include>
|
</include>
|
||||||
</if>
|
</if>
|
||||||
|
<if test="${condition}.demand != null">
|
||||||
|
<if test="${condition}.demand.operator == 'third_platform'">
|
||||||
|
and test_case.demand_id in
|
||||||
|
<foreach collection="${condition}.demand.value" item="v" separator="," open="(" close=")">
|
||||||
|
#{v}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="${condition}.demand.operator == 'other_platform'">
|
||||||
|
and test_case.demand_name like CONCAT('%', #{${condition}.demand.value},'%')
|
||||||
|
</if>
|
||||||
|
</if>
|
||||||
|
<if test="${condition}.customs != null and ${condition}.customs.size() > 0">
|
||||||
|
<foreach collection="${condition}.customs" item="custom" separator="" open="" close="">
|
||||||
|
and test_case.id in (
|
||||||
|
select resource_id from custom_field_test_case where field_id = #{custom.id}
|
||||||
|
<choose>
|
||||||
|
<when test="custom.type == 'multipleMember' or custom.type == 'checkbox' or custom.type == 'multipleSelect'">
|
||||||
|
and ${custom.value}
|
||||||
|
</when>
|
||||||
|
<when test="custom.type == 'date' or custom.type == 'datetime'">
|
||||||
|
and left(replace(unix_timestamp(trim(both '"' from `value`)), '.', ''), 13)
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="custom"/>
|
||||||
|
</include>
|
||||||
|
</when>
|
||||||
|
<when test="custom.type == 'richText' or custom.type == 'textarea'">
|
||||||
|
and text_value
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="custom"/>
|
||||||
|
</include>
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
|
and trim(both '"' from value)
|
||||||
|
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||||
|
<property name="object" value="custom"/>
|
||||||
|
</include>
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
|
)
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
|
|
|
@ -30,4 +30,6 @@ public class TestPlanCaseDTO extends TestCaseWithBLOBs {
|
||||||
|
|
||||||
private List<io.metersphere.dto.TestCaseTestDTO> list;
|
private List<io.metersphere.dto.TestCaseTestDTO> list;
|
||||||
private List<IssuesDao> issueList;
|
private List<IssuesDao> issueList;
|
||||||
|
private List<CustomFieldDao> fields;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,10 +32,7 @@ import io.metersphere.plan.utils.TestPlanStatusCalculator;
|
||||||
import io.metersphere.request.OrderRequest;
|
import io.metersphere.request.OrderRequest;
|
||||||
import io.metersphere.request.ResetOrderRequest;
|
import io.metersphere.request.ResetOrderRequest;
|
||||||
import io.metersphere.request.member.QueryMemberRequest;
|
import io.metersphere.request.member.QueryMemberRequest;
|
||||||
import io.metersphere.service.BaseProjectApplicationService;
|
import io.metersphere.service.*;
|
||||||
import io.metersphere.service.BaseUserService;
|
|
||||||
import io.metersphere.service.FunctionCaseExecutionInfoService;
|
|
||||||
import io.metersphere.service.ServiceUtils;
|
|
||||||
import io.metersphere.dto.*;
|
import io.metersphere.dto.*;
|
||||||
import io.metersphere.request.testcase.TrackCount;
|
import io.metersphere.request.testcase.TrackCount;
|
||||||
import io.metersphere.request.testreview.SaveCommentRequest;
|
import io.metersphere.request.testreview.SaveCommentRequest;
|
||||||
|
@ -89,6 +86,8 @@ public class TestPlanTestCaseService {
|
||||||
private BaseProjectApplicationService baseProjectApplicationService;
|
private BaseProjectApplicationService baseProjectApplicationService;
|
||||||
@Resource
|
@Resource
|
||||||
private FunctionCaseExecutionInfoService functionCaseExecutionInfoService;
|
private FunctionCaseExecutionInfoService functionCaseExecutionInfoService;
|
||||||
|
@Resource
|
||||||
|
private CustomFieldTestCaseService customFieldTestCaseService;
|
||||||
|
|
||||||
private static final String CUSTOM_NUM = "custom_num";
|
private static final String CUSTOM_NUM = "custom_num";
|
||||||
private static final String NUM = "num";
|
private static final String NUM = "num";
|
||||||
|
@ -105,6 +104,9 @@ public class TestPlanTestCaseService {
|
||||||
|
|
||||||
public List<TestPlanCaseDTO> list(QueryTestPlanCaseRequest request) {
|
public List<TestPlanCaseDTO> list(QueryTestPlanCaseRequest request) {
|
||||||
List<TestPlanCaseDTO> list = extTestPlanTestCaseMapper.list(request);
|
List<TestPlanCaseDTO> list = extTestPlanTestCaseMapper.list(request);
|
||||||
|
Map<String, List<CustomFieldDao>> fieldMap =
|
||||||
|
customFieldTestCaseService.getMapByResourceIds(list.stream().map(TestPlanCaseDTO::getCaseId).collect(Collectors.toList()));
|
||||||
|
list.forEach(i -> i.setFields(fieldMap.get(i.getCaseId())));
|
||||||
if (CollectionUtils.isNotEmpty(list)) {
|
if (CollectionUtils.isNotEmpty(list)) {
|
||||||
// 设置版本信息
|
// 设置版本信息
|
||||||
ServiceUtils.buildVersionInfo(list);
|
ServiceUtils.buildVersionInfo(list);
|
||||||
|
|
|
@ -12,14 +12,14 @@
|
||||||
ref="envPopover" class="env-popover"/>
|
ref="envPopover" class="env-popover"/>
|
||||||
|
|
||||||
|
|
||||||
<el-input :placeholder="$t('api_test.definition.request.select_case')" @blur="filterSearch"
|
|
||||||
@keyup.enter.native="filterSearch" class="search-input" size="small" v-model="condition.name"/>
|
|
||||||
<ms-table-adv-search-bar :condition.sync="condition" class="adv-search-bar"
|
|
||||||
v-if="condition.components !== undefined && condition.components.length > 0"
|
|
||||||
@search="filterSearch"/>
|
|
||||||
<mx-version-select v-xpack :project-id="projectId" @changeVersion="changeVersion" style="float: left;"
|
<mx-version-select v-xpack :project-id="projectId" @changeVersion="changeVersion" style="float: left;"
|
||||||
class="search-input"/>
|
class="search-input"/>
|
||||||
|
<ms-search
|
||||||
|
:base-search-tip="$t('api_test.definition.request.select_case')"
|
||||||
|
:condition.sync="condition"
|
||||||
|
style="margin-top: 10px"
|
||||||
|
@search="filterSearch">
|
||||||
|
</ms-search>
|
||||||
<ms-table ref="scenarioTable"
|
<ms-table ref="scenarioTable"
|
||||||
v-loading="result.loading"
|
v-loading="result.loading"
|
||||||
:data="tableData"
|
:data="tableData"
|
||||||
|
@ -100,9 +100,10 @@ import MsTag from "metersphere-frontend/src/components/MsTag";
|
||||||
import TestPlanScenarioListHeader from "./TestPlanScenarioListHeader";
|
import TestPlanScenarioListHeader from "./TestPlanScenarioListHeader";
|
||||||
import PriorityTableItem from "@/business/common/tableItems/planview/PriorityTableItem";
|
import PriorityTableItem from "@/business/common/tableItems/planview/PriorityTableItem";
|
||||||
import MsTableAdvSearchBar from "metersphere-frontend/src/components/search/MsTableAdvSearchBar";
|
import MsTableAdvSearchBar from "metersphere-frontend/src/components/search/MsTableAdvSearchBar";
|
||||||
import TEST_PLAN_RELEVANCE_API_SCENARIO_CONFIGS from "metersphere-frontend/src/components/search/search-components";
|
import {TEST_PLAN_RELEVANCE_API_SCENARIO_CONFIGS} from "metersphere-frontend/src/components/search/search-components";
|
||||||
import {ENV_TYPE} from "metersphere-frontend/src/utils/constants";
|
import {ENV_TYPE} from "metersphere-frontend/src/utils/constants";
|
||||||
import MsTable from "metersphere-frontend/src/components/table/MsTable";
|
import MsTable from "metersphere-frontend/src/components/table/MsTable";
|
||||||
|
import MsSearch from "metersphere-frontend/src/components/search/MsSearch";
|
||||||
import {getOwnerProjects, getVersionFilters} from "@/business/utils/sdk-utils";
|
import {getOwnerProjects, getVersionFilters} from "@/business/utils/sdk-utils";
|
||||||
import MxVersionSelect from "metersphere-frontend/src/components/version/MxVersionSelect";
|
import MxVersionSelect from "metersphere-frontend/src/components/version/MxVersionSelect";
|
||||||
import {getProjectApplicationConfig} from "@/api/project-application";
|
import {getProjectApplicationConfig} from "@/api/project-application";
|
||||||
|
@ -122,7 +123,8 @@ export default {
|
||||||
MsTag,
|
MsTag,
|
||||||
// MsApiReportDetail,
|
// MsApiReportDetail,
|
||||||
MsTableAdvSearchBar,
|
MsTableAdvSearchBar,
|
||||||
MxVersionSelect
|
MxVersionSelect,
|
||||||
|
MsSearch
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
referenced: {
|
referenced: {
|
||||||
|
|
|
@ -220,6 +220,7 @@ import {
|
||||||
} from "@/api/remote/plan/test-plan-api-case";
|
} from "@/api/remote/plan/test-plan-api-case";
|
||||||
import MsTestPlanApiStatus from "@/business/plan/view/comonents/api/TestPlanApiStatus";
|
import MsTestPlanApiStatus from "@/business/plan/view/comonents/api/TestPlanApiStatus";
|
||||||
import {getProjectVersions} from "@/business/utils/sdk-utils";
|
import {getProjectVersions} from "@/business/utils/sdk-utils";
|
||||||
|
import {TEST_PLAN_API_CASE_CONFIGS} from "metersphere-frontend/src/components/search/search-components";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "TestPlanApiCaseList",
|
name: "TestPlanApiCaseList",
|
||||||
|
@ -252,7 +253,9 @@ export default {
|
||||||
fields: getCustomTableHeader('TEST_PLAN_API_CASE'),
|
fields: getCustomTableHeader('TEST_PLAN_API_CASE'),
|
||||||
fieldsWidth: getCustomTableWidth('TEST_PLAN_API_CASE'),
|
fieldsWidth: getCustomTableWidth('TEST_PLAN_API_CASE'),
|
||||||
tableLabel: [],
|
tableLabel: [],
|
||||||
condition: {},
|
condition: {
|
||||||
|
components: TEST_PLAN_API_CASE_CONFIGS
|
||||||
|
},
|
||||||
selectCase: {},
|
selectCase: {},
|
||||||
loading: false,
|
loading: false,
|
||||||
moduleId: "",
|
moduleId: "",
|
||||||
|
|
|
@ -241,6 +241,7 @@ import {apiAutomationReduction} from "@/api/remote/api/api-automation";
|
||||||
import MicroApp from "metersphere-frontend/src/components/MicroApp";
|
import MicroApp from "metersphere-frontend/src/components/MicroApp";
|
||||||
import MsTestPlanApiStatus from "@/business/plan/view/comonents/api/TestPlanApiStatus";
|
import MsTestPlanApiStatus from "@/business/plan/view/comonents/api/TestPlanApiStatus";
|
||||||
import {getVersionFilters} from "@/business/utils/sdk-utils";
|
import {getVersionFilters} from "@/business/utils/sdk-utils";
|
||||||
|
import {TEST_PLAN_API_SCENARIO_CONFIGS} from "metersphere-frontend/src/components/search/search-components";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "MsTestPlanApiScenarioList",
|
name: "MsTestPlanApiScenarioList",
|
||||||
|
@ -282,7 +283,9 @@ export default {
|
||||||
screenHeight: 'calc(100vh - 250px)',//屏幕高度
|
screenHeight: 'calc(100vh - 250px)',//屏幕高度
|
||||||
tableLabel: [],
|
tableLabel: [],
|
||||||
loading: false,
|
loading: false,
|
||||||
condition: {},
|
condition: {
|
||||||
|
components: TEST_PLAN_API_SCENARIO_CONFIGS
|
||||||
|
},
|
||||||
currentScenario: {},
|
currentScenario: {},
|
||||||
schedule: {},
|
schedule: {},
|
||||||
selectAll: false,
|
selectAll: false,
|
||||||
|
|
|
@ -121,7 +121,8 @@ import TestPlanCaseStatusTableItem from "@/business/common/tableItems/TestPlanCa
|
||||||
import {TEST_CASE_CONFIGS} from "metersphere-frontend/src/components/search/search-components";
|
import {TEST_CASE_CONFIGS} from "metersphere-frontend/src/components/search/search-components";
|
||||||
import MxVersionSelect from "metersphere-frontend/src/components/version/MxVersionSelect";
|
import MxVersionSelect from "metersphere-frontend/src/components/version/MxVersionSelect";
|
||||||
import {getProjectApplicationConfig} from "@/api/project-application";
|
import {getProjectApplicationConfig} from "@/api/project-application";
|
||||||
import {getVersionFilters} from "@/business/utils/sdk-utils";
|
import {getAdvSearchCustomField, getVersionFilters} from "@/business/utils/sdk-utils";
|
||||||
|
import {getTestTemplate} from "@/api/custom-field-template";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "FunctionalRelevance",
|
name: "FunctionalRelevance",
|
||||||
|
@ -167,7 +168,8 @@ export default {
|
||||||
{text: 'P2', value: 'P2'},
|
{text: 'P2', value: 'P2'},
|
||||||
{text: 'P3', value: 'P3'}
|
{text: 'P3', value: 'P3'}
|
||||||
],
|
],
|
||||||
versionFilters: null
|
versionFilters: null,
|
||||||
|
testCaseTemplate: {},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
|
@ -199,7 +201,8 @@ export default {
|
||||||
selectNodeIds() {
|
selectNodeIds() {
|
||||||
this.getTestCases();
|
this.getTestCases();
|
||||||
},
|
},
|
||||||
projectId() {
|
projectId(val) {
|
||||||
|
this.pushCustomFieldToCondition(val);
|
||||||
this.setConditionModuleIdParam();
|
this.setConditionModuleIdParam();
|
||||||
this.page.condition.projectId = this.projectId;
|
this.page.condition.projectId = this.projectId;
|
||||||
this.page.condition.versionId = null;
|
this.page.condition.versionId = null;
|
||||||
|
@ -211,7 +214,7 @@ export default {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
open() {
|
open() {
|
||||||
this.page.condition = {components: TEST_CASE_CONFIGS};
|
this.page.condition = {custom: false, components: TEST_CASE_CONFIGS};
|
||||||
this.isSaving = false;
|
this.isSaving = false;
|
||||||
this.$refs.baseRelevance.open();
|
this.$refs.baseRelevance.open();
|
||||||
if (this.$refs.table) {
|
if (this.$refs.table) {
|
||||||
|
@ -300,7 +303,23 @@ export default {
|
||||||
},
|
},
|
||||||
setSelectCounts(data) {
|
setSelectCounts(data) {
|
||||||
this.$refs.baseRelevance.selectCounts = data;
|
this.$refs.baseRelevance.selectCounts = data;
|
||||||
|
},
|
||||||
|
pushCustomFieldToCondition(projectId) {
|
||||||
|
getTestTemplate(projectId).then(data => {
|
||||||
|
this.testCaseTemplate = data;
|
||||||
|
let comp = getAdvSearchCustomField(this.page.condition, this.testCaseTemplate.customFields);
|
||||||
|
let caseStatus = comp.find(i => i.label === '用例状态');
|
||||||
|
if (caseStatus) {
|
||||||
|
caseStatus.label = this.$t('custom_field.case_status');
|
||||||
|
caseStatus.options.forEach(option => {
|
||||||
|
option.text = this.$t(option.text);
|
||||||
|
});
|
||||||
|
caseStatus.custom = false;
|
||||||
|
this.page.condition.custom = false;
|
||||||
|
this.page.condition.components.push(caseStatus);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
:row-order-group-id="planId"
|
:row-order-group-id="planId"
|
||||||
:row-order-func="editTestPlanTestCaseOrder"
|
:row-order-func="editTestPlanTestCaseOrder"
|
||||||
:enable-order-drag="enableOrderDrag"
|
:enable-order-drag="enableOrderDrag"
|
||||||
|
:custom-fields="testCaseTemplate.customFields"
|
||||||
@filter="search"
|
@filter="search"
|
||||||
@order="initTableData"
|
@order="initTableData"
|
||||||
@handlePageChange="initTableData"
|
@handlePageChange="initTableData"
|
||||||
|
@ -230,6 +231,9 @@
|
||||||
<priority-table-item
|
<priority-table-item
|
||||||
:value="getCustomFieldValue(scope.row, field) ? getCustomFieldValue(scope.row, field) : scope.row.priority"/>
|
:value="getCustomFieldValue(scope.row, field) ? getCustomFieldValue(scope.row, field) : scope.row.priority"/>
|
||||||
</span>
|
</span>
|
||||||
|
<span v-else-if="field.name === '用例状态'">
|
||||||
|
{{ getCustomFieldValue(scope.row, field, scope.row.status) }}
|
||||||
|
</span>
|
||||||
<span v-else>
|
<span v-else>
|
||||||
{{ getCustomFieldValue(scope.row, field) }}
|
{{ getCustomFieldValue(scope.row, field) }}
|
||||||
</span>
|
</span>
|
||||||
|
@ -290,7 +294,9 @@ import {
|
||||||
getLastTableSortField,
|
getLastTableSortField,
|
||||||
getTableHeaderWithCustomFields,
|
getTableHeaderWithCustomFields,
|
||||||
initCondition,
|
initCondition,
|
||||||
getCustomFieldFilter
|
getCustomFieldFilter,
|
||||||
|
parseCustomFilesForList,
|
||||||
|
getCustomFieldValue as _getCustomFieldValue,
|
||||||
} from "metersphere-frontend/src/utils/tableUtils";
|
} from "metersphere-frontend/src/utils/tableUtils";
|
||||||
import MsTable from "metersphere-frontend/src/components/table/MsTable";
|
import MsTable from "metersphere-frontend/src/components/table/MsTable";
|
||||||
import MsTableColumn from "metersphere-frontend/src/components/table/MsTableColumn";
|
import MsTableColumn from "metersphere-frontend/src/components/table/MsTableColumn";
|
||||||
|
@ -305,14 +311,18 @@ import {
|
||||||
import {SYSTEM_FIELD_NAME_MAP} from "metersphere-frontend/src/utils/table-constants";
|
import {SYSTEM_FIELD_NAME_MAP} from "metersphere-frontend/src/utils/table-constants";
|
||||||
import {getTestPlanTestCase} from "@/api/testCase";
|
import {getTestPlanTestCase} from "@/api/testCase";
|
||||||
import TestPlanCaseIssueItem from "@/business/plan/view/comonents/functional/TestPlanCaseIssueItem";
|
import TestPlanCaseIssueItem from "@/business/plan/view/comonents/functional/TestPlanCaseIssueItem";
|
||||||
import {getCustomFieldValueForTrack, getProjectMemberOption, getProjectVersions} from "@/business/utils/sdk-utils";
|
import {
|
||||||
|
getProjectMemberOption,
|
||||||
|
getProjectVersions,
|
||||||
|
getAdvSearchCustomField
|
||||||
|
} from "@/business/utils/sdk-utils";
|
||||||
import {
|
import {
|
||||||
testPlanTestCaseBatchDelete,
|
testPlanTestCaseBatchDelete,
|
||||||
testPlanTestCaseBatchEdit,
|
testPlanTestCaseBatchEdit,
|
||||||
testPlanTestCaseDelete,
|
testPlanTestCaseDelete,
|
||||||
testPlanTestCaseEdit
|
testPlanTestCaseEdit
|
||||||
} from "@/api/remote/plan/test-plan-test-case";
|
} from "@/api/remote/plan/test-plan-test-case";
|
||||||
import {getIssuesByCaseId, getOriginIssuesByCaseId} from "@/api/issue";
|
import {getOriginIssuesByCaseId} from "@/api/issue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "FunctionalTestCaseList",
|
name: "FunctionalTestCaseList",
|
||||||
|
@ -341,7 +351,8 @@ export default {
|
||||||
result: {},
|
result: {},
|
||||||
deletePath: "/test/case/delete",
|
deletePath: "/test/case/delete",
|
||||||
condition: {
|
condition: {
|
||||||
components: TEST_PLAN_TEST_CASE_CONFIGS
|
components: TEST_PLAN_TEST_CASE_CONFIGS,
|
||||||
|
custom: false
|
||||||
},
|
},
|
||||||
nextPageData: null,
|
nextPageData: null,
|
||||||
prePageData: null,
|
prePageData: null,
|
||||||
|
@ -551,7 +562,19 @@ export default {
|
||||||
Promise.all([p1, p2]).then((data) => {
|
Promise.all([p1, p2]).then((data) => {
|
||||||
let template = data[1];
|
let template = data[1];
|
||||||
this.testCaseTemplate = template;
|
this.testCaseTemplate = template;
|
||||||
|
this.testCaseTemplate.customFields = this.testCaseTemplate.customFields.filter(item => item.name === '用例状态' && item.system);
|
||||||
this.fields = getTableHeaderWithCustomFields(this.tableHeaderKey, this.testCaseTemplate.customFields);
|
this.fields = getTableHeaderWithCustomFields(this.tableHeaderKey, this.testCaseTemplate.customFields);
|
||||||
|
let comp = getAdvSearchCustomField(this.condition, this.testCaseTemplate.customFields);
|
||||||
|
let caseStatus = comp.find(i => i.label === '用例状态');
|
||||||
|
if (caseStatus) {
|
||||||
|
caseStatus.label = this.$t('custom_field.case_status');
|
||||||
|
caseStatus.options.forEach(option => {
|
||||||
|
option.text = this.$t(option.text);
|
||||||
|
});
|
||||||
|
caseStatus.custom = false;
|
||||||
|
this.condition.custom = false;
|
||||||
|
this.condition.components.push(caseStatus);
|
||||||
|
}
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
if (this.$refs.table) {
|
if (this.$refs.table) {
|
||||||
this.$refs.table.resetHeader();
|
this.$refs.table.resetHeader();
|
||||||
|
@ -562,23 +585,18 @@ export default {
|
||||||
},
|
},
|
||||||
getCustomFieldFilter(field) {
|
getCustomFieldFilter(field) {
|
||||||
if (field.name === '用例状态') {
|
if (field.name === '用例状态') {
|
||||||
let option = [];
|
return null;
|
||||||
field.options.forEach((item) => {
|
|
||||||
option.push({
|
|
||||||
text: this.$t(item.text),
|
|
||||||
value: item.value
|
|
||||||
})
|
|
||||||
});
|
|
||||||
return option;
|
|
||||||
}
|
}
|
||||||
return getCustomFieldFilter(field, this.userFilters);
|
return getCustomFieldFilter(field, this.userFilters);
|
||||||
},
|
},
|
||||||
getCustomFieldValue(row, field, defaultVal = '') {
|
getCustomFieldValue(row, field, defaultVal = '') {
|
||||||
let value = getCustomFieldValueForTrack(row, field, this.members);
|
let value = _getCustomFieldValue(row, field, this.members);
|
||||||
if (field.name === '用例等级') {
|
if (field.name === '用例等级') {
|
||||||
return row.priority;
|
return row.priority;
|
||||||
} else if (field.name === '责任人') {
|
} else if (field.name === '责任人') {
|
||||||
return row.maintainerName;
|
return row.maintainerName;
|
||||||
|
} else if (field.name === '用例状态') {
|
||||||
|
value = value === 'Trash' ? this.$t('test_track.plan.plan_status_trash') : value
|
||||||
}
|
}
|
||||||
return value ? value : defaultVal;
|
return value ? value : defaultVal;
|
||||||
},
|
},
|
||||||
|
@ -610,6 +628,7 @@ export default {
|
||||||
this.total = r.data.itemCount;
|
this.total = r.data.itemCount;
|
||||||
this.pageCount = Math.ceil(this.total / this.pageSize);
|
this.pageCount = Math.ceil(this.total / this.pageSize);
|
||||||
this.tableData = r.data.listObject;
|
this.tableData = r.data.listObject;
|
||||||
|
parseCustomFilesForList(this.tableData);
|
||||||
for (let i = 0; i < this.tableData.length; i++) {
|
for (let i = 0; i < this.tableData.length; i++) {
|
||||||
if (this.tableData[i]) {
|
if (this.tableData[i]) {
|
||||||
if (this.tableData[i].customFields) {
|
if (this.tableData[i].customFields) {
|
||||||
|
|
Loading…
Reference in New Issue