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 6ebfbf52205d56a2d4130e1ed07e055ea6d77cfc..b5c3e69d15de155f8f71b3e41558486d6fe26551 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 9c7daa2fdb2d196444583140670a9930605fe2e7..65fb9be3dd9a1a7b46caa9ac9aa5c3c4cc00f0d1 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 33b9af99cdaffa7a0d3f78637c3bdfc776dc9050..0474519ac0721ef2e31b7cc6889835fc7e16da5e 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 4458cdd58de1583a2e904ee6ceefff74598419a3..ff36804523a650b92beb7387d981798657215e3d 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 083c5e2c7cfe5c86e987be70a5f6a5c1c1bb5fab..b212edf62502aff220a82a22937d892428c57856 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 5210984f050258336531c5f0dcb270e4fc1d58d2..b247da426050d7166cf33216c0571840a4b9c024 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 c53ba4af610b474decbc033a6486d169803adcdf..5a9c8c4be256e1d5502f83f9d84caec496403337 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 c8988e273035ac5efc00dcaffea8de6854825147..4a4446e97ecf18177030f493ab83e1d29832484e 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 fb72055a3c368faa1d4b51d15654f1dff758b6cb..30179840539246186f7284a9220dcef9d27ef849 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 377f29e34e5557824f20f9206baa0a0cde4dc558..7d2863fd2538caf8aa77ec8cbb0a1229499ee15e 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 08b20eeb426769caafa9c5b558052e4d3ee4b02f..54ca3da989f2a224209fdefe7d5c814115e61541 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 5632451c47d5416086d1ae599aa0dd9f3a0b170c..3adaa614798e108c9faf1b4d85d1525d70eeb25e 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 8ca5fc683d98d3db2069623dcd688630a1e2b4ae..eb8979568f4da468ae77906d1457e9ef8ec0062c 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 0d3503b0fdc470635f9dbb118ab69e1913c4826b..71b6a9f3670a398d2b06f78ec4a9384e7bde23a4 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 @@