From 9a5c02827b95f9c6416b597b094768cc776b754e Mon Sep 17 00:00:00 2001 From: "Captain.B" Date: Tue, 21 Jul 2020 14:53:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=94=A8=E4=BE=8B=E5=92=8C=E6=B5=8B=E8=AF=95=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E7=9A=84=E9=AB=98=E7=BA=A7=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/mapper/ext/ExtTestCaseMapper.xml | 17 ++- .../base/mapper/ext/ExtTestPlanMapper.xml | 105 +++++++++++++++++- .../testcase/QueryTestPlanRequest.java | 2 + .../components/search/search-components.js | 64 +++++++++++ .../track/case/components/TestCaseList.vue | 26 +++-- .../track/plan/components/TestPlanList.vue | 19 +++- 6 files changed, 217 insertions(+), 16 deletions(-) diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml index 0af1628e29..7d02963964 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml @@ -142,9 +142,20 @@ select test_plan.*, project.name as project_name from test_plan left join project on test_plan.project_id = project.id - - and test_plan.name like CONCAT('%', #{request.name},'%') - + + + + + + + + + + + and test_plan.name like CONCAT('%', #{request.name},'%') + + + AND project.workspace_id = #{request.workspaceId} diff --git a/backend/src/main/java/io/metersphere/track/request/testcase/QueryTestPlanRequest.java b/backend/src/main/java/io/metersphere/track/request/testcase/QueryTestPlanRequest.java index 875cae25d6..d03e3da703 100644 --- a/backend/src/main/java/io/metersphere/track/request/testcase/QueryTestPlanRequest.java +++ b/backend/src/main/java/io/metersphere/track/request/testcase/QueryTestPlanRequest.java @@ -19,4 +19,6 @@ public class QueryTestPlanRequest extends TestPlan { private List orders; private Map> filters; + + private Map combine; } diff --git a/frontend/src/business/components/common/components/search/search-components.js b/frontend/src/business/components/common/components/search/search-components.js index 4e30c4ec1b..96e06f9d46 100644 --- a/frontend/src/business/components/common/components/search/search-components.js +++ b/frontend/src/business/components/common/components/search/search-components.js @@ -220,8 +220,72 @@ export const MODULE = { }, } +export const PRINCIPAL = { + key: "principal", + name: 'MsTableSearchSelect', + label: 'test_track.plan.plan_principal', + operator: { + options: [OPERATORS.IN, OPERATORS.NOT_IN, OPERATORS.CURRENT_USER], + change: function (component, value) { // 运算符change事件 + if (value === OPERATORS.CURRENT_USER.value) { + component.value = value; + } + } + }, + options: { // 异步获取候选项 + url: "/user/list", + labelKey: "name", + valueKey: "id", + showLabel: option => { + return option.label + "(" + option.value + ")"; + } + }, + props: { + multiple: true + }, + isShow: operator => { + return operator !== OPERATORS.CURRENT_USER.value; + } +}; + +export const STAGE = { + key: "stage", + name: 'MsTableSearchSelect', + label: "test_track.plan.plan_stage", + operator: { + options: [OPERATORS.IN, OPERATORS.NOT_IN] + }, + options: [ + {label: 'test_track.plan.smoke_test', value: 'smoke'}, + {label: 'test_track.plan.regression_test', value: 'regression'}, + {label: 'test_track.plan.system_test', value: 'system'} + ], + props: { + multiple: true + } +}; + +export const TEST_PLAN_STATUS = { + key: "status", + name: 'MsTableSearchSelect', + label: "test_track.plan.plan_status", + operator: { + options: [OPERATORS.IN, OPERATORS.NOT_IN] + }, + options: [ + {label: 'test_track.plan.plan_status_prepare', value: 'Prepare'}, + {label: 'test_track.plan.plan_status_running', value: 'Underway'}, + {label: 'test_track.plan.plan_status_completed', value: 'Completed'} + ], + props: { + multiple: true + } +}; + export const TEST_CONFIGS = [NAME, UPDATE_TIME, PROJECT_NAME, CREATE_TIME, STATUS, CREATOR]; export const REPORT_CONFIGS = [NAME, TEST_NAME, PROJECT_NAME, CREATE_TIME, STATUS, CREATOR, TRIGGER_MODE]; export const TEST_CASE_CONFIGS = [NAME, MODULE, PRIORITY, CREATE_TIME, TYPE, UPDATE_TIME, METHOD, CREATOR]; + +export const TEST_PLAN_CONFIGS = [NAME, UPDATE_TIME, PROJECT_NAME, CREATE_TIME, PRINCIPAL, TEST_PLAN_STATUS, STAGE]; diff --git a/frontend/src/business/components/track/case/components/TestCaseList.vue b/frontend/src/business/components/track/case/components/TestCaseList.vue index 28955b9a68..5a29f6c351 100644 --- a/frontend/src/business/components/track/case/components/TestCaseList.vue +++ b/frontend/src/business/components/track/case/components/TestCaseList.vue @@ -130,7 +130,8 @@ import MsTableOperator from "../../../common/components/MsTableOperator"; import MsTableOperatorButton from "../../../common/components/MsTableOperatorButton"; import MsTableButton from "../../../common/components/MsTableButton"; - import {_filter, _sort, downloadFile, humpToLine} from "../../../../../common/js/utils"; + import {_filter, _sort} from "../../../../../common/js/utils"; + import {TEST_CASE_CONFIGS} from "../../../common/components/search/search-components"; export default { name: "TestCaseList", @@ -147,7 +148,9 @@ return { result: {}, deletePath: "/test/case/delete", - condition: {}, + condition: { + components: TEST_CASE_CONFIGS + }, tableData: [], currentPage: 1, pageSize: 10, @@ -193,11 +196,20 @@ } }, methods: { - initTableData() { - this.condition.nodeIds = this.selectNodeIds; + initTableData(combine) { + // 只有在点击高级搜索的查询按钮时combine才有值 + let condition = combine ? {combine: combine} : this.condition; + if (this.planId) { + // param.planId = this.planId; + condition.planId = this.planId; + } + if (this.selectNodeIds && this.selectNodeIds.length > 0) { + // param.nodeIds = this.selectNodeIds; + condition.nodeIds = this.selectNodeIds; + } if (this.currentProject) { - this.condition.projectId = this.currentProject.id; - this.result = this.$post(this.buildPagePath('/test/case/list'), this.condition, response => { + condition.projectId = this.currentProject.id; + this.result = this.$post(this.buildPagePath('/test/case/list'), condition, response => { let data = response.data; this.total = data.itemCount; this.tableData = data.listObject; @@ -252,7 +264,7 @@ }); }, refresh() { - this.condition = {}; + this.condition = {components: TEST_CASE_CONFIGS}; this.selectIds.clear(); this.$emit('refresh'); }, diff --git a/frontend/src/business/components/track/plan/components/TestPlanList.vue b/frontend/src/business/components/track/plan/components/TestPlanList.vue index 30ae8f7b6a..dfc17ad834 100644 --- a/frontend/src/business/components/track/plan/components/TestPlanList.vue +++ b/frontend/src/business/components/track/plan/components/TestPlanList.vue @@ -118,6 +118,7 @@ import TestReportTemplateList from "../view/comonents/TestReportTemplateList"; import TestCaseReportView from "../view/comonents/report/TestCaseReportView"; import MsDeleteConfirm from "../../../common/components/MsDeleteConfirm"; + import {TEST_PLAN_CONFIGS} from "../../../common/components/search/search-components"; export default { name: "TestPlanList", @@ -133,7 +134,9 @@ result: {}, queryPath: "/test/plan/list", deletePath: "/test/plan/delete", - condition: {}, + condition: { + components: TEST_PLAN_CONFIGS + }, currentPage: 1, pageSize: 10, isTestManagerOrTestUser: false, @@ -164,8 +167,18 @@ this.initTableData(); }, methods: { - initTableData() { - this.result = this.$post(this.buildPagePath(this.queryPath), this.condition, response => { + initTableData(combine) { + // 只有在点击高级搜索的查询按钮时combine才有值 + let condition = combine ? {combine: combine} : this.condition; + if (this.planId) { + // param.planId = this.planId; + condition.planId = this.planId; + } + if (this.selectNodeIds && this.selectNodeIds.length > 0) { + // param.nodeIds = this.selectNodeIds; + condition.nodeIds = this.selectNodeIds; + } + this.result = this.$post(this.buildPagePath(this.queryPath), condition, response => { let data = response.data; this.total = data.itemCount; this.tableData = data.listObject;