fix(通用功能): 高级搜索
This commit is contained in:
parent
d48dd41231
commit
0c9f45bb00
|
@ -133,13 +133,30 @@
|
|||
</include>
|
||||
</if>
|
||||
|
||||
<if test="${condition}.status != null">
|
||||
<if test="${condition}.lastResult != null">
|
||||
and api_scenario.last_result
|
||||
<include refid="condition">
|
||||
<property name="object" value="${condition}.lastResult"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.status != null">
|
||||
and api_scenario.status
|
||||
<include refid="condition">
|
||||
<property name="object" value="${condition}.status"/>
|
||||
</include>
|
||||
</if>
|
||||
|
||||
<if test="${condition}.module != null">
|
||||
and api_scenario.module_path
|
||||
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||
<property name="object" value="${condition}.module"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.stepCount != null">
|
||||
and api_scenario.step_total
|
||||
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||
<property name="object" value="${condition}.stepCount"/>
|
||||
</include>
|
||||
</if>
|
||||
</sql>
|
||||
<select id="listModule" resultType="java.lang.Integer">
|
||||
select count(api_scenario.id) from api_scenario
|
||||
|
|
|
@ -22,6 +22,49 @@
|
|||
</select>
|
||||
|
||||
<sql id="combine">
|
||||
<if test='${condition}.name != null and (${name} == null or ${name} == "")'>
|
||||
and test_case_review.name
|
||||
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||
<property name="object" value="${condition}.name"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.createTime != null">
|
||||
and test_case_review.create_time
|
||||
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||
<property name="object" value="${condition}.createTime"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.updateTime != null">
|
||||
and test_case_review.update_time
|
||||
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||
<property name="object" value="${condition}.updateTime"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.endTime != null">
|
||||
and test_case_review.end_time
|
||||
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||
<property name="object" value="${condition}.endTime"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.status != null">
|
||||
and test_case_review.status
|
||||
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||
<property name="object" value="${condition}.status"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test='${condition}.tags != null and ${objectKey}.operator == "not like"'>
|
||||
and (test_case_review.tags is null or test_case_review.tags
|
||||
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||
<property name="object" value="${condition}.tags"/>
|
||||
</include>
|
||||
)
|
||||
</if>
|
||||
<if test='${condition}.tags != null and ${objectKey}.operator == "like"'>
|
||||
and test_case_review.tags
|
||||
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.condition">
|
||||
<property name="object" value="${condition}.tags"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.followPeople != null">
|
||||
and test_case_review.id in (
|
||||
select review_id from test_case_review_follow where follow_id
|
||||
|
|
|
@ -78,6 +78,30 @@
|
|||
<property name="object" value="${condition}.createTime"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.actualStartTime != null">
|
||||
and test_plan.actual_start_time
|
||||
<include refid="condition">
|
||||
<property name="object" value="${condition}.actualStartTime"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.actualEndTime != null">
|
||||
and test_plan.actual_end_time
|
||||
<include refid="condition">
|
||||
<property name="object" value="${condition}.actualEndTime"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.planStartTime != null">
|
||||
and test_plan.planned_start_time
|
||||
<include refid="condition">
|
||||
<property name="object" value="${condition}.planStartTime"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.planEndTime != null">
|
||||
and test_plan.planned_end_time
|
||||
<include refid="condition">
|
||||
<property name="object" value="${condition}.planEndTime"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.status != null">
|
||||
and test_plan.status
|
||||
<include refid="condition">
|
||||
|
@ -102,6 +126,19 @@
|
|||
<property name="object" value="${condition}.creator"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test='${condition}.tags != null and ${objectKey}.operator == "not like"'>
|
||||
and (test_plan.tags is null or test_plan.tags
|
||||
<include refid="condition">
|
||||
<property name="object" value="${condition}.tags"/>
|
||||
</include>
|
||||
)
|
||||
</if>
|
||||
<if test='${condition}.tags != null and ${objectKey}.operator == "like"'>
|
||||
and test_plan.tags
|
||||
<include refid="condition">
|
||||
<property name="object" value="${condition}.tags"/>
|
||||
</include>
|
||||
</if>
|
||||
<if test="${condition}.principal != null">
|
||||
and test_plan.id in (SELECT test_plan_id FROM test_plan_principal WHERE principal_id
|
||||
<include refid="condition">
|
||||
|
@ -128,6 +165,7 @@
|
|||
<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.name != null">
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
</el-row>
|
||||
</div>
|
||||
<el-link type="primary" icon="el-icon-plus" v-if="showAddFilterLink"
|
||||
class="add-filter-link" @click="addFilter">添加筛选条件</el-link>
|
||||
class="add-filter-link" @click="addFilter">{{ $t('commons.adv_search.add_filter_link') }}</el-link>
|
||||
</div>
|
||||
<template v-slot:footer>
|
||||
<div class="dialog-footer">
|
||||
|
@ -157,8 +157,8 @@ export default {
|
|||
}
|
||||
// 默认显示几个搜索条件
|
||||
this.optional.components = slice(this.optional.components, 0, this.showItemSize);
|
||||
const all = concat(this.config.components[0].child, this.config.components[1].child);
|
||||
let allComponent = this.condition.custom ? all : this.config.components;
|
||||
let allComponent = this.condition.custom ?
|
||||
concat(this.config.components[0].child, this.config.components[1].child) : this.config.components;
|
||||
for (let component of allComponent) {
|
||||
let co = _findByKey(this.optional.components, component.key);
|
||||
co ? this.$set(co, 'disable', true) : this.$set(component, 'disable', false);
|
||||
|
@ -174,7 +174,7 @@ export default {
|
|||
addFilter() {
|
||||
const index = _findIndexByKey(this.optional.components, this.nullFilterKey);
|
||||
if (index > -1) {
|
||||
this.$warning("有为空的查询条件,请先选择!")
|
||||
this.$warning(this.$t('commons.adv_search.add_filter_link'));
|
||||
return;
|
||||
}
|
||||
let data = {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-select class="search-label" v-model="selectKey" v-if="!custom"
|
||||
filterable placeholder="请选择" size="small">
|
||||
filterable :placeholder="$t('commons.please_select')" size="small">
|
||||
<el-option
|
||||
v-for="item in components"
|
||||
:disabled="item.disable !== undefined ? item.disable : true"
|
||||
|
@ -12,7 +12,7 @@
|
|||
</el-option>
|
||||
</el-select>
|
||||
<el-select class="search-label" v-model="selectKey" v-else
|
||||
filterable placeholder="请选择" size="small">
|
||||
filterable :placeholder="$t('commons.please_select')" size="small">
|
||||
<el-option-group
|
||||
v-for="group in components"
|
||||
:key="group.key"
|
||||
|
|
|
@ -27,5 +27,7 @@ export default {
|
|||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
/deep/ .el-input-number--small {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -198,7 +198,7 @@ export const API_CASE_RESULT = {
|
|||
}
|
||||
// 场景执行结果
|
||||
export const API_SCENARIO_RESULT = {
|
||||
key: "status",
|
||||
key: "lastResult",
|
||||
name: 'MsTableSearchSelect',
|
||||
label: 'test_track.plan_view.execute_result',
|
||||
operator: {
|
||||
|
@ -560,7 +560,64 @@ export const CASE_COUNT = {
|
|||
},
|
||||
}
|
||||
|
||||
export const TEST_CONFIGS = [NAME, UPDATE_TIME, CREATE_TIME, STATUS, CREATOR];
|
||||
export const STEP_COUNT = {
|
||||
key: "stepCount",
|
||||
name: 'MsTableSearchInputNumber',
|
||||
label: 'api_test.automation.step',
|
||||
operator: {
|
||||
options: [OPERATORS.GT, OPERATORS.GE, OPERATORS.LT, OPERATORS.LE, OPERATORS.EQ]
|
||||
},
|
||||
}
|
||||
|
||||
// 测试计划 实际开始时间
|
||||
export const ACTUAL_START_TIME = {
|
||||
key: "actualStartTime",
|
||||
name: 'MsTableSearchDateTimePicker',
|
||||
label: 'test_track.plan.actual_start_time',
|
||||
operator: {
|
||||
options: [OPERATORS.BETWEEN, OPERATORS.GT, OPERATORS.GE, OPERATORS.LT, OPERATORS.LE, OPERATORS.EQ]
|
||||
},
|
||||
}
|
||||
// 测试计划 实际结束时间
|
||||
export const ACTUAL_END_TIME = {
|
||||
key: "actualEndTime",
|
||||
name: 'MsTableSearchDateTimePicker',
|
||||
label: 'test_track.plan.actual_end_time',
|
||||
operator: {
|
||||
options: [OPERATORS.BETWEEN, OPERATORS.GT, OPERATORS.GE, OPERATORS.LT, OPERATORS.LE, OPERATORS.EQ]
|
||||
},
|
||||
}
|
||||
|
||||
// 测试计划 计划开始时间
|
||||
export const PLAN_START_TIME = {
|
||||
key: "planStartTime",
|
||||
name: 'MsTableSearchDateTimePicker',
|
||||
label: 'test_track.plan.planned_start_time',
|
||||
operator: {
|
||||
options: [OPERATORS.BETWEEN, OPERATORS.GT, OPERATORS.GE, OPERATORS.LT, OPERATORS.LE, OPERATORS.EQ]
|
||||
},
|
||||
}
|
||||
|
||||
// 测试计划 计划结束时间
|
||||
export const PLAN_END_TIME = {
|
||||
key: "planEndTime",
|
||||
name: 'MsTableSearchDateTimePicker',
|
||||
label: 'test_track.plan.planned_end_time',
|
||||
operator: {
|
||||
options: [OPERATORS.BETWEEN, OPERATORS.GT, OPERATORS.GE, OPERATORS.LT, OPERATORS.LE, OPERATORS.EQ]
|
||||
},
|
||||
}
|
||||
// 测试评审 截止时间
|
||||
export const END_TIME = {
|
||||
key: "endTime",
|
||||
name: 'MsTableSearchDateTimePicker',
|
||||
label: 'test_track.review.end_time',
|
||||
operator: {
|
||||
options: [OPERATORS.BETWEEN, OPERATORS.GT, OPERATORS.GE, OPERATORS.LT, OPERATORS.LE, OPERATORS.EQ]
|
||||
},
|
||||
}
|
||||
|
||||
export const TEST_CONFIGS = [NAME, UPDATE_TIME, CREATE_TIME, STATUS, CREATOR, FOLLOW_PEOPLE];
|
||||
|
||||
export const PROJECT_CONFIGS = [NAME, UPDATE_TIME, CREATE_TIME, CREATOR];
|
||||
|
||||
|
@ -573,13 +630,16 @@ export const UI_REPORT_CONFIGS = [NAME, TEST_NAME, CREATE_TIME, UI_REPORT_STATUS
|
|||
// 测试跟踪-测试用例 列表
|
||||
export const TEST_CASE_CONFIGS = [NAME, TAGS, MODULE, CREATE_TIME, UPDATE_TIME, CREATOR, CASE_REVIEW_STATUS, FOLLOW_PEOPLE];
|
||||
|
||||
export const TEST_PLAN_CONFIGS = [NAME, UPDATE_TIME, CREATE_TIME, PRINCIPAL, TEST_PLAN_STATUS, STAGE];
|
||||
export const TEST_PLAN_CONFIGS = [NAME, UPDATE_TIME, CREATE_TIME, PRINCIPAL, TEST_PLAN_STATUS, STAGE, TAGS, FOLLOW_PEOPLE, ACTUAL_START_TIME, ACTUAL_END_TIME, PLAN_START_TIME, PLAN_END_TIME];
|
||||
|
||||
// 测试跟踪 测试评审列表
|
||||
export const TEST_REVIEW = [NAME, CREATOR, TAGS, TEST_PLAN_STATUS, FOLLOW_PEOPLE, CREATE_TIME, UPDATE_TIME, END_TIME];
|
||||
|
||||
export const API_DEFINITION_CONFIGS = [NAME, API_METHOD, API_PATH, API_STATUS, TAGS, UPDATE_TIME, CREATE_TIME, API_PRINCIPAL, ISREFERENCE, MODULE, FOLLOW_PEOPLE, CASE_COUNT];
|
||||
|
||||
export const API_CASE_CONFIGS = [NAME, PRIORITY, TAGS, API_CASE_RESULT, UPDATE_TIME, CREATE_TIME, CREATOR, ISREFERENCE, FOLLOW_PEOPLE, API_PATH];
|
||||
|
||||
export const API_SCENARIO_CONFIGS = [NAME, PRIORITY, TAGS, API_SCENARIO_RESULT, UPDATE_TIME, CREATE_TIME, CREATOR];
|
||||
export const API_SCENARIO_CONFIGS = [NAME, PRIORITY, TAGS, API_SCENARIO_RESULT, UPDATE_TIME, CREATE_TIME, CREATOR, FOLLOW_PEOPLE, STEP_COUNT, MODULE, API_STATUS];
|
||||
|
||||
export const TEST_PLAN_REPORT_CONFIGS = [NAME, TEST_PLAN_NAME, CREATOR, CREATE_TIME, TEST_PLAN_TRIGGER_MODE, TEST_PLAN_REPORT_STATUS];
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ import TestCaseReviewEdit from "./components/TestCaseReviewEdit";
|
|||
import MsMainContainer from "../../common/components/MsMainContainer";
|
||||
import MsContainer from "../../common/components/MsContainer";
|
||||
import {getCurrentProjectID} from "@/common/js/utils";
|
||||
import {TEST_REVIEW} from "@/business/components/common/components/search/search-components";
|
||||
|
||||
export default {
|
||||
name: "TestCaseReview",
|
||||
|
@ -29,9 +30,7 @@ export default {
|
|||
TestCaseReviewEdit
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
}
|
||||
return {}
|
||||
},
|
||||
computed: {
|
||||
projectId() {
|
||||
|
@ -39,14 +38,14 @@ export default {
|
|||
},
|
||||
},
|
||||
mounted() {
|
||||
if (this.$route.path.indexOf("/track/review/create") >= 0){
|
||||
if (this.$route.path.indexOf("/track/review/create") >= 0) {
|
||||
this.openCaseReviewEditDialog();
|
||||
this.$router.push('/track/review/all');
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'$route'(to) {
|
||||
if (to.path.indexOf("/track/review/create") >= 0){
|
||||
if (to.path.indexOf("/track/review/create") >= 0) {
|
||||
if (!this.projectId) {
|
||||
this.$warning(this.$t('commons.check_project_tip'));
|
||||
return;
|
||||
|
@ -61,7 +60,7 @@ export default {
|
|||
this.$refs.caseReviewEditDialog.openCaseReviewEditDialog(data);
|
||||
},
|
||||
refreshCaseReviewList() {
|
||||
this.$refs.caseReviewList.condition = {};
|
||||
this.$refs.caseReviewList.condition = {TEST_REVIEW};
|
||||
this.$refs.caseReviewList.initTableData();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -146,6 +146,7 @@ import {TEST_CASE_REVIEW_LIST} from "@/common/js/constants";
|
|||
import HeaderCustom from "@/business/components/common/head/HeaderCustom";
|
||||
import HeaderLabelOperate from "@/business/components/common/head/HeaderLabelOperate";
|
||||
import MsTag from "@/business/components/common/components/MsTag";
|
||||
import {TEST_REVIEW} from "@/business/components/common/components/search/search-components";
|
||||
|
||||
export default {
|
||||
name: "TestCaseReviewList",
|
||||
|
@ -168,7 +169,9 @@ export default {
|
|||
tableLabel: [],
|
||||
tableHeaderKey:"TEST_CASE_REVIEW",
|
||||
result: {},
|
||||
condition: {},
|
||||
condition: {
|
||||
components: TEST_REVIEW
|
||||
},
|
||||
tableData: [],
|
||||
isTestManagerOrTestUser: false,
|
||||
currentPage: 1,
|
||||
|
|
|
@ -315,6 +315,8 @@ export default {
|
|||
reset: "Reset",
|
||||
and: 'All',
|
||||
or: 'any one',
|
||||
add_filter_link: 'Add filter',
|
||||
add_filter_link_tip: 'There are empty query conditions, please select first!',
|
||||
operators: {
|
||||
is_empty: "Is empty",
|
||||
is_not_empty: "Is not empty",
|
||||
|
|
|
@ -316,6 +316,8 @@ export default {
|
|||
reset: "重置",
|
||||
and: '所有',
|
||||
or: '任意一个',
|
||||
add_filter_link: '添加筛选条件',
|
||||
add_filter_link_tip: '有为空的查询条件,请先选择!',
|
||||
operators: {
|
||||
is_empty: "空",
|
||||
is_not_empty: "非空",
|
||||
|
|
|
@ -316,6 +316,8 @@ export default {
|
|||
reset: "重置",
|
||||
and: '所有',
|
||||
or: '任意一個',
|
||||
add_filter_link: '添加篩選條件',
|
||||
add_filter_link_tip: '有為空的查詢條件,請先選擇!',
|
||||
operators: {
|
||||
is_empty: "空",
|
||||
is_not_empty: "非空",
|
||||
|
|
Loading…
Reference in New Issue