From 4cbed26f30f2a417685d0e886be272b5352ec6b4 Mon Sep 17 00:00:00 2001 From: chenjianxing Date: Tue, 19 May 2020 18:09:44 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E8=8A=82=E7=82=B9=E6=8B=96=E6=8B=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../track/service/TestCaseNodeService.java | 22 +++++++++---------- .../components/track/common/NodeTree.vue | 2 ++ frontend/src/common/js/ajax.js | 5 ++++- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/backend/src/main/java/io/metersphere/track/service/TestCaseNodeService.java b/backend/src/main/java/io/metersphere/track/service/TestCaseNodeService.java index 9faa743a84..2579a45046 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestCaseNodeService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestCaseNodeService.java @@ -8,6 +8,7 @@ import io.metersphere.base.mapper.TestPlanMapper; import io.metersphere.base.mapper.TestPlanTestCaseMapper; import io.metersphere.base.mapper.ext.ExtTestCaseMapper; import io.metersphere.commons.constants.TestCaseConstants; +import io.metersphere.commons.exception.MSException; import io.metersphere.commons.utils.BeanUtils; import io.metersphere.i18n.Translator; import io.metersphere.track.dto.TestCaseDTO; @@ -125,13 +126,7 @@ public class TestCaseNodeService { testCases.forEach(testCase -> { StringBuilder path = new StringBuilder(testCase.getNodePath()); List pathLists = Arrays.asList(path.toString().split("/")); - - if (request.getLevel() <= pathLists.size()) { - pathLists.set(request.getLevel(), request.getName()); - } else { - pathLists.add(request.getName()); - } - + pathLists.set(request.getLevel(), request.getName()); path.delete( 0, path.length()); for (int i = 1; i < pathLists.size(); i++) { path = path.append("/").append(pathLists.get(i)); @@ -379,7 +374,7 @@ public class TestCaseNodeService { public void dragNode(DragNodeRequest request) { - editNode(request); +// editNode(request); List nodeIds = request.getNodeIds(); @@ -389,7 +384,7 @@ public class TestCaseNodeService { List updateNodes = new ArrayList<>(); - buildUpdateTestCase(nodeTree, testCases, updateNodes, "/", 1); + buildUpdateTestCase(nodeTree, testCases, updateNodes, "/", null, 1); updateNodes = updateNodes.stream() .filter(item -> nodeIds.contains(item.getId())) @@ -425,13 +420,18 @@ public class TestCaseNodeService { } private void buildUpdateTestCase(TestCaseNodeDTO rootNode, List testCases, - List updateNodes, String rootPath, int level) { + List updateNodes, String rootPath, String pId, int level) { rootPath = rootPath + rootNode.getName(); + if (level > 5) { + MSException.throwException(Translator.get("node_deep_limit")); + } + TestCaseNode testCaseNode = new TestCaseNode(); testCaseNode.setId(rootNode.getId()); testCaseNode.setLevel(level); + testCaseNode.setParentId(pId); updateNodes.add(testCaseNode); for (TestCaseDTO item : testCases) { @@ -443,7 +443,7 @@ public class TestCaseNodeService { List children = rootNode.getChildren(); if (children != null && children.size() > 0){ for (int i = 0; i < children.size(); i++) { - buildUpdateTestCase(children.get(i), testCases, updateNodes, rootPath + '/', level + 1); + buildUpdateTestCase(children.get(i), testCases, updateNodes, rootPath + '/', rootNode.getId(), level + 1); } } } diff --git a/frontend/src/business/components/track/common/NodeTree.vue b/frontend/src/business/components/track/common/NodeTree.vue index c066e50663..6c2c07a687 100644 --- a/frontend/src/business/components/track/common/NodeTree.vue +++ b/frontend/src/business/components/track/common/NodeTree.vue @@ -124,6 +124,8 @@ export default { param.nodeIds = nodeIds; this.$post("/case/node/drag", param, () => { this.refreshTable(); + }, (error) => { + this.refreshNode(); }); }, refreshTable() { diff --git a/frontend/src/common/js/ajax.js b/frontend/src/common/js/ajax.js index 15f4e2ad47..58d44388be 100644 --- a/frontend/src/common/js/ajax.js +++ b/frontend/src/common/js/ajax.js @@ -73,7 +73,7 @@ export default { } }; - Vue.prototype.$post = function (url, data, success) { + Vue.prototype.$post = function (url, data, success, failure) { let result = {loading: true}; if (!success) { return axios.post(url, data); @@ -82,6 +82,9 @@ export default { then(success, response, result); }).catch(error => { exception(error, result); + if (failure) { + then(failure, error, result); + } }); return result; }