diff --git a/api-test/backend/src/main/java/io/metersphere/api/dto/definition/SaveApiTestCaseRequest.java b/api-test/backend/src/main/java/io/metersphere/api/dto/definition/SaveApiTestCaseRequest.java index e0fcca5384..87f248b689 100644 --- a/api-test/backend/src/main/java/io/metersphere/api/dto/definition/SaveApiTestCaseRequest.java +++ b/api-test/backend/src/main/java/io/metersphere/api/dto/definition/SaveApiTestCaseRequest.java @@ -24,4 +24,7 @@ public class SaveApiTestCaseRequest extends ApiTestCase { private List follows; private String versionId; + + //复制用例时的源ID。主要用于复制本地文件等操作。 + private String sourceIdByCopy; } diff --git a/api-test/backend/src/main/java/io/metersphere/service/definition/ApiTestCaseService.java b/api-test/backend/src/main/java/io/metersphere/service/definition/ApiTestCaseService.java index 6c8dcddb7c..0563e4c77c 100644 --- a/api-test/backend/src/main/java/io/metersphere/service/definition/ApiTestCaseService.java +++ b/api-test/backend/src/main/java/io/metersphere/service/definition/ApiTestCaseService.java @@ -438,7 +438,12 @@ public class ApiTestCaseService { checkNameExist(request); ApiFileUtil.createBodyFiles(request.getId(), bodyFiles); request.setRequest(tcpApiParamService.parseMsTestElement(request.getRequest())); - ApiFileUtil.copyBdyFile(request.getApiDefinitionId(), request.getId()); + if (StringUtils.isNotBlank(request.getSourceIdByCopy())) { + ApiFileUtil.copyBdyFile(request.getSourceIdByCopy(), request.getId()); + } else { + ApiFileUtil.copyBdyFile(request.getApiDefinitionId(), request.getId()); + } + final ApiTestCaseWithBLOBs test = new ApiTestCaseWithBLOBs(); test.setId(request.getId()); diff --git a/api-test/frontend/src/business/definition/components/ApiConfig.vue b/api-test/frontend/src/business/definition/components/ApiConfig.vue index f3ca8162ed..59c4355e75 100644 --- a/api-test/frontend/src/business/definition/components/ApiConfig.vue +++ b/api-test/frontend/src/business/definition/components/ApiConfig.vue @@ -403,7 +403,6 @@ export default { data.request.protocol = this.currentProtocol; } if (data.isCopy) { - data.sourceId = data.id; data.id = getUUID(); data.request.id = data.id; } else { diff --git a/api-test/frontend/src/business/definition/components/list/ApiCaseSimpleList.vue b/api-test/frontend/src/business/definition/components/list/ApiCaseSimpleList.vue index 4ad639b980..2de4fd59c5 100644 --- a/api-test/frontend/src/business/definition/components/list/ApiCaseSimpleList.vue +++ b/api-test/frontend/src/business/definition/components/list/ApiCaseSimpleList.vue @@ -992,7 +992,7 @@ export default { getDefinitionById(row.apiDefinitionId).then((response) => { let api = response.data; if (api) { - this.getCaseAndOpen(row.id, api.name, row.apiDefinitionId); + this.getCaseAndOpen(row.id, api.name, row.apiDefinitionId, true); } }); }, @@ -1004,7 +1004,7 @@ export default { } }); }, - getCaseAndOpen(id, apiName, apiId) { + getCaseAndOpen(id, apiName, apiId, isCopyCase) { getCaseById(id).then((response) => { let data = response.data; let uuid = getUUID(); @@ -1030,6 +1030,9 @@ export default { url: apiCaseRequest.path, uuid: uuid, }; + if (isCopyCase) { + obj.sourceIdByCopy = id; + } this.$refs.caseList.copy(obj); }); }, diff --git a/api-test/frontend/src/business/definition/components/list/ApiList.vue b/api-test/frontend/src/business/definition/components/list/ApiList.vue index cbd4dc8750..50413e6186 100644 --- a/api-test/frontend/src/business/definition/components/list/ApiList.vue +++ b/api-test/frontend/src/business/definition/components/list/ApiList.vue @@ -879,6 +879,7 @@ export default { handleCopy(row) { let obj = JSON.parse(JSON.stringify(row)); obj.isCopy = true; + obj.sourceId = row.id; delete obj.id; this.$emit('copyApi', obj); },