From c715a96cb7845ac77f6911c8baf0e8989534b4c8 Mon Sep 17 00:00:00 2001 From: q4speed Date: Mon, 13 Jul 2020 16:05:01 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AB=98=E7=BA=A7=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/dto/QueryAPIReportRequest.java | 1 + .../api/dto/QueryAPITestRequest.java | 2 +- .../api/service/APITestService.java | 13 ++- .../base/mapper/ext/ExtApiTestMapper.xml | 100 +++++++++++++++++- .../mapper/ext/ExtApiTestReportMapper.xml | 66 +++++++++++- .../base/mapper/ext/ExtLoadTestMapper.xml | 60 ++++++++++- .../mapper/ext/ExtLoadTestReportMapper.xml | 66 +++++++++++- .../commons/utils/SessionUtils.java | 5 + .../controller/request/ReportRequest.java | 1 + .../testplan/QueryTestPlanRequest.java | 1 + .../components/api/report/ApiReportList.vue | 18 ++-- .../components/api/test/ApiTestList.vue | 20 ++-- .../common/components/MsTableHeader.vue | 8 +- .../components/search/MsTableAdvSearchBar.vue | 24 +++-- .../search/MsTableSearchComponet.vue | 19 ++-- .../search/MsTableSearchDatePicker.vue | 2 +- .../search/MsTableSearchDateTimePicker.vue | 2 +- .../components/search/MsTableSearchInput.vue | 2 +- .../components/search/MsTableSearchSelect.vue | 11 +- .../components/search/search-components.js | 69 ++++++++---- .../report/PerformanceTestReport.vue | 33 +++--- .../performance/test/PerformanceTestPlan.vue | 19 ++-- 22 files changed, 431 insertions(+), 111 deletions(-) diff --git a/backend/src/main/java/io/metersphere/api/dto/QueryAPIReportRequest.java b/backend/src/main/java/io/metersphere/api/dto/QueryAPIReportRequest.java index 6ebfbf522..b5c3e69d1 100644 --- a/backend/src/main/java/io/metersphere/api/dto/QueryAPIReportRequest.java +++ b/backend/src/main/java/io/metersphere/api/dto/QueryAPIReportRequest.java @@ -18,4 +18,5 @@ public class QueryAPIReportRequest { private boolean recent = false; private List orders; private Map> filters; + private Map combine; } diff --git a/backend/src/main/java/io/metersphere/api/dto/QueryAPITestRequest.java b/backend/src/main/java/io/metersphere/api/dto/QueryAPITestRequest.java index 9c7daa2fd..65fb9be3d 100644 --- a/backend/src/main/java/io/metersphere/api/dto/QueryAPITestRequest.java +++ b/backend/src/main/java/io/metersphere/api/dto/QueryAPITestRequest.java @@ -18,5 +18,5 @@ public class QueryAPITestRequest { private boolean recent = false; private List orders; private Map> filters; - + private Map combine; } diff --git a/backend/src/main/java/io/metersphere/api/service/APITestService.java b/backend/src/main/java/io/metersphere/api/service/APITestService.java index 33b9af99c..0474519ac 100644 --- a/backend/src/main/java/io/metersphere/api/service/APITestService.java +++ b/backend/src/main/java/io/metersphere/api/service/APITestService.java @@ -33,11 +33,9 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; + import java.io.*; -import java.util.List; -import java.util.Objects; -import java.util.Random; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; @Service @@ -189,7 +187,7 @@ public class APITestService { ApiTestExample example = new ApiTestExample(); example.createCriteria().andNameEqualTo(request.getName()).andProjectIdEqualTo(request.getProjectId()).andIdNotEqualTo(request.getId()); if (apiTestMapper.countByExample(example) > 0) { - return true; + return true; } return false; } @@ -292,7 +290,7 @@ public class APITestService { } private SaveAPITestRequest getImportApiTest(MultipartFile file, ApiImport apiImport) { - SaveAPITestRequest request = new SaveAPITestRequest(); + SaveAPITestRequest request = new SaveAPITestRequest(); request.setName(file.getOriginalFilename()); request.setProjectId(""); request.setScenarioDefinition(apiImport.getScenarios()); @@ -304,7 +302,8 @@ public class APITestService { if (name.endsWith(suffix)) { request.setName(name.substring(0, name.length() - suffix.length())); } - }; + } + ; if (isNameExist(request)) { request.setName(request.getName() + "_" + request.getId().substring(0, 5)); } diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiTestMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiTestMapper.xml index 4458cdd58..ff3680452 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiTestMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiTestMapper.xml @@ -8,15 +8,109 @@ + + + + like CONCAT('%', #{${object}.value},'%') + + + not like CONCAT('%', #{${object}.value},'%') + + + in + + #{v} + + + + not in + + #{v} + + + + between #{${object}.value[0]} and #{${object}.value[1]} + + + > #{${object}.value} + + + < #{${object}.value} + + + >= #{${object}.value} + + + <= #{${object}.value} + + + = '${@io.metersphere.commons.utils.SessionUtils@getUserId()}' + + + = #{${object}.value} + + + + + + + and api_test.name + + + + + + and api_test.update_time + + + + + + and project.name + + + + + + and api_test.create_time + + + + + + and api_test.status + + + + + + and api_test.user_id + + + + + + SELECT t.name AS test_name, r.name, r.description, r.id, r.test_id, r.create_time, r.update_time, r.status, r.trigger_mode, @@ -17,9 +66,20 @@ LEFT JOIN project ON project.id = t.project_id LEFT JOIN user ON user.id = r.user_id - - AND r.name like CONCAT('%', #{request.name},'%') - + + + + + + + + + + + and r.name like CONCAT('%', #{request.name},'%') + + + AND project.id = #{request.projectId} diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestMapper.xml index 083c5e2c7..b212edf62 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestMapper.xml @@ -8,15 +8,69 @@ + + + + + + + and load_test.name + + + + + + and load_test.update_time + + + + + + and project.name + + + + + + and load_test.create_time + + + + + + and load_test.status + + + + + + and load_test.user_id + + + + + + select ltr.id, ltr.name, ltr.test_id as testId, ltr.description, user.name as userName, project.name as projectName, ltr.trigger_mode, @@ -26,9 +75,20 @@ JOIN project on project.id = lt.project_id - - AND ltr.name like CONCAT('%', #{reportRequest.name},'%') - + + + + + + + + + + + AND ltr.name like CONCAT('%', #{reportRequest.name},'%') + + + AND workspace_id = #{reportRequest.workspaceId,jdbcType=VARCHAR} diff --git a/backend/src/main/java/io/metersphere/commons/utils/SessionUtils.java b/backend/src/main/java/io/metersphere/commons/utils/SessionUtils.java index 5210984f0..b247da426 100644 --- a/backend/src/main/java/io/metersphere/commons/utils/SessionUtils.java +++ b/backend/src/main/java/io/metersphere/commons/utils/SessionUtils.java @@ -5,12 +5,17 @@ import org.apache.shiro.SecurityUtils; import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; +import java.util.Objects; import java.util.Optional; import static io.metersphere.commons.constants.SessionConstants.ATTR_USER; public class SessionUtils { + public static String getUserId() { + return Objects.requireNonNull(getUser()).getId(); + } + public static SessionUser getUser() { try { Subject subject = SecurityUtils.getSubject(); diff --git a/backend/src/main/java/io/metersphere/performance/controller/request/ReportRequest.java b/backend/src/main/java/io/metersphere/performance/controller/request/ReportRequest.java index c53ba4af6..5a9c8c4be 100644 --- a/backend/src/main/java/io/metersphere/performance/controller/request/ReportRequest.java +++ b/backend/src/main/java/io/metersphere/performance/controller/request/ReportRequest.java @@ -14,4 +14,5 @@ public class ReportRequest { private String workspaceId; private List orders; private Map> filters; + private Map combine; } diff --git a/backend/src/main/java/io/metersphere/track/request/testplan/QueryTestPlanRequest.java b/backend/src/main/java/io/metersphere/track/request/testplan/QueryTestPlanRequest.java index c8988e273..4a4446e97 100644 --- a/backend/src/main/java/io/metersphere/track/request/testplan/QueryTestPlanRequest.java +++ b/backend/src/main/java/io/metersphere/track/request/testplan/QueryTestPlanRequest.java @@ -13,4 +13,5 @@ public class QueryTestPlanRequest extends TestPlanRequest { private String workspaceId; private List orders; private Map> filters; + private Map combine; } diff --git a/frontend/src/business/components/api/report/ApiReportList.vue b/frontend/src/business/components/api/report/ApiReportList.vue index fb72055a3..301798405 100644 --- a/frontend/src/business/components/api/report/ApiReportList.vue +++ b/frontend/src/business/components/api/report/ApiReportList.vue @@ -4,7 +4,7 @@ { + this.result = this.$post(url, condition, response => { let data = response.data; this.total = data.itemCount; this.tableData = data.listObject; diff --git a/frontend/src/business/components/api/test/ApiTestList.vue b/frontend/src/business/components/api/test/ApiTestList.vue index 377f29e34..7d2863fd2 100644 --- a/frontend/src/business/components/api/test/ApiTestList.vue +++ b/frontend/src/business/components/api/test/ApiTestList.vue @@ -4,7 +4,7 @@ { + let url = "/api/list/" + this.currentPage + "/" + this.pageSize; + this.result = this.$post(url, condition, response => { let data = response.data; this.total = data.itemCount; this.tableData = data.listObject; diff --git a/frontend/src/business/components/common/components/MsTableHeader.vue b/frontend/src/business/components/common/components/MsTableHeader.vue index 08b20eeb4..54ca3da98 100644 --- a/frontend/src/business/components/common/components/MsTableHeader.vue +++ b/frontend/src/business/components/common/components/MsTableHeader.vue @@ -14,7 +14,7 @@ - + @@ -43,7 +43,6 @@ condition: { type: Object }, - advanced: Object, createTip: { type: String, default() { @@ -63,6 +62,11 @@ create() { this.$emit('create'); } + }, + computed: { + isCombine() { + return this.condition.components !== undefined && this.condition.components.length > 0; + } } } diff --git a/frontend/src/business/components/common/components/search/MsTableAdvSearchBar.vue b/frontend/src/business/components/common/components/search/MsTableAdvSearchBar.vue index 5632451c4..3adaa6147 100644 --- a/frontend/src/business/components/common/components/search/MsTableAdvSearchBar.vue +++ b/frontend/src/business/components/common/components/search/MsTableAdvSearchBar.vue @@ -3,10 +3,11 @@ {{$t('commons.adv_search.title')}}
-
{{$t('commons.adv_search.combine')}}:
- - - + + + + +
@@ -47,27 +48,30 @@ methods: { search() { let condition = { - logic: this.logic + // logic: this.logic // 如果有需求再加上 } this.condition.components.forEach(component => { + let operator = component.operator.value; + let value = component.value; if (Array.isArray(component.value)) { if (component.value.length > 0) { condition[component.key] = { - operator: component.operator, - value: component.value + operator: operator, + value: value } } } else { - if (component.value !== undefined && component.value !== null) { + if (component.value !== undefined && component.value !== null && component.value !== "") { condition[component.key] = { - operator: component.operator, - value: component.value + operator: operator, + value: value } } } }); this.$emit('search', condition); + this.visible = false; }, open() { this.visible = true; diff --git a/frontend/src/business/components/common/components/search/MsTableSearchComponet.vue b/frontend/src/business/components/common/components/search/MsTableSearchComponet.vue index 8ca5fc683..eb8979568 100644 --- a/frontend/src/business/components/common/components/search/MsTableSearchComponet.vue +++ b/frontend/src/business/components/common/components/search/MsTableSearchComponet.vue @@ -3,7 +3,7 @@
{{component.label}}:
+ @change="change" @input="input" v-bind="component.operator.props"> @@ -19,19 +19,22 @@ props: ['component'], data() { return { - operators: this.component.operators || [], + operators: this.component.operator.options || [], operator: (() => { - if (this.component.operator === undefined && this.component.operators.length > 0) { - this.$emit('input', this.component.operators[0].value); - return this.component.operators[0].value; + if (this.component.operator.value === undefined && this.component.operator.options.length > 0) { + this.$emit('input', this.component.operator.options[0].value); + return this.component.operator.options[0].value; } else { - this.component.operator + return this.component.operator.value } })() } }, methods: { change(value) { + if (this.component.operator.change) { + this.component.operator.change(this.component, value) + } this.$emit('change', value); }, input(value) { @@ -41,8 +44,8 @@ computed: { showContent() { return operator => { - if (this.component.showContent) { - return this.component.showContent(operator); + if (this.component.isShow) { + return this.component.isShow(operator); } return true; } diff --git a/frontend/src/business/components/common/components/search/MsTableSearchDatePicker.vue b/frontend/src/business/components/common/components/search/MsTableSearchDatePicker.vue index 0d3503b0f..71b6a9f36 100644 --- a/frontend/src/business/components/common/components/search/MsTableSearchDatePicker.vue +++ b/frontend/src/business/components/common/components/search/MsTableSearchDatePicker.vue @@ -1,5 +1,5 @@