提交 62252a87 编写于 作者: C chenjianxing

refacotr: 重构测试跟踪模块树

上级 f6d4f625
......@@ -2,23 +2,15 @@
<ms-container>
<ms-aside-container>
<node-tree
class="node-tree"
v-loading="result.loading"
<test-case-node-tree
@nodeSelectEvent="nodeChange"
@refresh="refresh"
:tree-nodes="treeNodes"
@refreshTable="refresh"
:type="'edit'"
:draggable="nodeTreeDraggable"
:select-node.sync="selectNode"
@refreshTable="refreshTable"
:current-project="{id:currentProject}"
ref="nodeTree"/>
</ms-aside-container>
<ms-main-container>
<test-case-list
:current-project="{id:currentProject}"
:select-node-ids="selectNodeIds"
:select-parent-nodes="selectParentNodes"
@testCaseEdit="editTestCase"
......@@ -36,7 +28,6 @@
:read-only="testCaseReadOnly"
:tree-nodes="treeNodes"
:select-node="selectNode"
:current-project="{id:currentProject}"
ref="testCaseEditDialog">
</test-case-edit>
......@@ -52,7 +43,6 @@
import NodeTree from '../common/NodeTree';
import TestCaseEdit from './components/TestCaseEdit';
import {PROJECT_ID, ROLE_TEST_MANAGER, ROLE_TEST_USER} from '../../../../common/js/constants';
import TestCaseList from "./components/TestCaseList";
import SelectMenu from "../common/SelectMenu";
import TestCaseMove from "./components/TestCaseMove";
......@@ -61,10 +51,12 @@ import MsAsideContainer from "../../common/components/MsAsideContainer";
import MsMainContainer from "../../common/components/MsMainContainer";
import {checkoutTestManagerOrTestUser, hasRoles} from "../../../../common/js/utils";
import BatchMove from "./components/BatchMove";
import TestCaseNodeTree from "../common/TestCaseNodeTree";
export default {
name: "TestCase",
components: {
TestCaseNodeTree,
MsMainContainer,
MsAsideContainer, MsContainer, TestCaseMove, TestCaseList, NodeTree, TestCaseEdit, SelectMenu, BatchMove
},
......@@ -76,35 +68,25 @@ export default {
pageSize: 5,
total: 0,
projects: [],
currentProject: null,
treeNodes: [],
selectNodeIds: [],
selectParentNodes: [],
testCaseReadOnly: true,
selectNode: {},
nodeTreeDraggable: true,
}
},
activated() {
this.currentProject = localStorage.getItem(PROJECT_ID);
},
mounted() {
this.init(this.$route);
},
watch: {
'$route'(to, from) {
// console.log(this.$route.params.projectId)
this.init(to);
},
currentProject() {
this.refresh();
}
},
methods: {
init(route) {
let path = route.path;
if (path.indexOf("/track/case/edit") >= 0 || path.indexOf("/track/case/create") >= 0) {
// this.getProjects();
this.testCaseReadOnly = false;
if (!checkoutTestManagerOrTestUser()) {
this.testCaseReadOnly = true;
......@@ -113,50 +95,10 @@ export default {
this.openRecentTestCaseEditDialog(caseId);
this.$router.push('/track/case/all');
}
// else if (route.params.projectId) {
// this.getProjects();
// this.getProjectById(route.params.projectId);
// }
},
// getProjects() {
// this.$get("/project/listAll", (response) => {
// this.projects = response.data;
// let lastProject = JSON.parse(localStorage.getItem(CURRENT_PROJECT));
// if (lastProject) {
// let hasCurrentProject = false;
// for (let i = 0; i < this.projects.length; i++) {
// if (this.projects[i].id == lastProject.id) {
// this.currentProject = lastProject;
// hasCurrentProject = true;
// break;
// }
// }
// if (!hasCurrentProject) {
// this.setCurrentProject(this.projects[0]);
// }
// } else {
// if (this.projects.length > 0) {
// this.setCurrentProject(this.projects[0]);
// }
// }
// // this.checkProject();
// });
// },
// checkProject() {
// if (this.currentProject === null) {
// this.$alert(this.$t('test_track.case.no_project'), {
// confirmButtonText: this.$t('project.create'),
// callback: action => {
// this.$router.push("/track/project/create");
// }
// });
// }
// },
// changeProject(project) {
// this.setCurrentProject(project);
// },
nodeChange(nodeIds, pNodes) {
nodeChange(node, nodeIds, pNodes) {
this.selectNodeIds = nodeIds;
this.selectNode = node;
this.selectParentNodes = pNodes;
},
refreshTable() {
......@@ -182,17 +124,11 @@ export default {
this.testCaseReadOnly = true;
this.$refs.testCaseEditDialog.open(testCase);
},
// getProjectByCaseId(caseId) {
// return this.$get('/test/case/project/' + caseId, async response => {
// this.setCurrentProject(response.data);
// });
// },
refresh() {
this.selectNodeIds = [];
this.selectParentNodes = [];
this.selectNode = {};
this.refreshTable();
this.getNodeTree();
},
openRecentTestCaseEditDialog(caseId) {
if (caseId) {
......@@ -206,35 +142,7 @@ export default {
this.$refs.testCaseEditDialog.open();
}
},
// getProjectById(id) {
// if (id && id != 'all') {
// this.$get('/project/get/' + id, response => {
// let project = response.data;
// this.setCurrentProject(project);
// // this.$router.push('/track/case/all');
// });
// }
// if (id === 'all') {
// this.refresh();
// }
// },
// setCurrentProject(project) {
// if (project) {
// this.currentProject = project;
// localStorage.setItem(CURRENT_PROJECT, JSON.stringify(project));
// }
// this.refresh();
// },
getNodeTree() {
if (!hasRoles(ROLE_TEST_USER, ROLE_TEST_MANAGER)) {
this.nodeTreeDraggable = false;
}
if (this.currentProject) {
this.result = this.$get("/case/node/list/" + this.currentProject, response => {
this.treeNodes = response.data;
});
}
},
moveToNode(selectIds) {
if (selectIds.size < 1) {
this.$warning(this.$t('test_track.plan_view.select_manipulate'));
......
......@@ -262,6 +262,7 @@ import {listenGoBack, removeGoBackListener} from "@/common/js/utils";
import {LIST_CHANGE, TrackEvent} from "@/business/components/common/head/ListEvent";
import {Message} from "element-ui";
import TestCaseAttachment from "@/business/components/track/case/components/TestCaseAttachment";
import {getCurrentProjectID} from "../../../../../common/js/utils";
export default {
name: "TestCaseEdit",
......@@ -269,6 +270,7 @@ export default {
data() {
return {
result: {},
projectId: "",
dialogFormVisible: false,
form: {
name: '',
......@@ -329,9 +331,6 @@ export default {
selectNode: {
type: Object
},
currentProject: {
type: Object
}
},
mounted() {
this.getSelectOptions();
......@@ -340,9 +339,6 @@ export default {
treeNodes() {
this.getModuleOptions();
},
currentProject() {
this.getTestOptions();
}
},
methods: {
reload() {
......@@ -351,7 +347,7 @@ export default {
},
open(testCase) {
this.resetForm();
this.projectId = getCurrentProjectID();
if (window.history && window.history.pushState) {
history.pushState(null, null, document.URL);
window.addEventListener('popstate', this.close);
......@@ -489,8 +485,8 @@ export default {
param.nodePath = item.path;
}
});
if (this.currentProject.id) {
param.projectId = this.currentProject.id;
if (this.projectId) {
param.projectId = this.projectId;
}
param.name = param.name.trim();
if (param.method != 'auto') {
......@@ -563,8 +559,8 @@ export default {
},
getTestOptions() {
this.testOptions = [];
if (this.currentProject.id && this.form.type != '' && this.form.type != 'functional') {
this.result = this.$get('/' + this.form.type + '/list/' + this.currentProject.id, response => {
if (this.projectId && this.form.type != '' && this.form.type != 'functional') {
this.result = this.$get('/' + this.form.type + '/list/' + this.projectId, response => {
this.testOptions = response.data;
this.testOptions.unshift({id: 'other', name: this.$t('test_track.case.other')})
});
......
......@@ -111,8 +111,8 @@
<script>
import ElUploadList from "element-ui/packages/upload/src/upload-list";
import MsTableButton from '../../../../components/common/components/MsTableButton';
import {listenGoBack, removeGoBackListener} from "../../../../../common/js/utils";
import {TokenKey, WORKSPACE_ID} from '../../../../../common/js/constants';
import {getCurrentProjectID, listenGoBack, removeGoBackListener} from "../../../../../common/js/utils";
import {TokenKey} from '../../../../../common/js/constants';
import axios from "axios";
export default {
......@@ -129,11 +129,6 @@
isLoading: false
}
},
props: {
projectId: {
type: String
}
},
methods: {
handleExceed(files, fileList) {
this.$warning(this.$t('test_track.case.import.upload_limit_count'));
......@@ -176,6 +171,7 @@
},
open() {
listenGoBack(this.close);
this.projectId = getCurrentProjectID();
this.dialogVisible = true;
},
close() {
......
......@@ -25,8 +25,7 @@
</template>
<test-case-import :projectId="currentProject == null? null : currentProject.id" @refresh="refresh"
ref="testCaseImport"/>
<test-case-import @refresh="refresh" ref="testCaseImport"/>
<el-table
border
......@@ -176,6 +175,7 @@ import {LIST_CHANGE, TrackEvent} from "@/business/components/common/head/ListEve
import StatusTableItem from "@/business/components/track/common/tableItems/planview/StatusTableItem";
import TestCaseDetail from "./TestCaseDetail";
import ReviewStatus from "@/business/components/track/case/components/ReviewStatus";
import {getCurrentProjectID} from "../../../../../common/js/utils";
export default {
name: "TestCaseList",
......@@ -264,13 +264,11 @@ export default {
],
maintainer: [],
},
currentCaseId: null
currentCaseId: null,
projectId: ""
}
},
props: {
currentProject: {
type: Object
},
selectNodeIds: {
type: Array
},
......@@ -282,9 +280,6 @@ export default {
this.initTableData();
},
watch: {
currentProject() {
this.initTableData();
},
selectNodeIds() {
this.currentPage = 1;
this.initTableData();
......@@ -292,6 +287,7 @@ export default {
},
methods: {
initTableData() {
this.projectId = getCurrentProjectID();
this.condition.planId = "";
this.condition.nodeIds = [];
if (this.planId) {
......@@ -302,13 +298,11 @@ export default {
// param.nodeIds = this.selectNodeIds;
this.condition.nodeIds = this.selectNodeIds;
}
if (this.currentProject.id) {
this.getData();
}
this.getData();
},
getData() {
if (this.currentProject) {
this.condition.projectId = this.currentProject.id;
if (this.projectId) {
this.condition.projectId = this.projectId;
this.result = this.$post(this.buildPagePath('/test/case/list'), this.condition, response => {
let data = response.data;
this.total = data.itemCount;
......@@ -416,7 +410,7 @@ export default {
method: 'post',
responseType: 'blob',
// data: {ids: [...this.selectIds]}
data: {ids: ids, projectId: this.currentProject.id}
data: {ids: ids, projectId: this.projectId}
};
this.result = this.$request(config).then(response => {
const filename = this.$t('test_track.case.test_case') + ".xlsx";
......
......@@ -41,6 +41,12 @@
},
filterData() {
this.data = this.nodes;
for (let index in this.data) {
if (this.data[index].id === 'root') {
this.data.splice(index, 1);
break;
}
}
if (this.data.length > 4) {
let lastData = this.data[this.data.length - 1];
this.data.splice(1, this.data.length);
......
<template>
<div v-loading="result.loading">
<el-input :placeholder="$t('test_track.module.search')" v-model="filterText" size="small">
<template v-if="type == 'edit'" v-slot:append>
<el-button :disabled="disabled" icon="el-icon-folder-add" @click="openEditNodeDialog('add')"></el-button>
</template>
</el-input>
<div>
<slot name="header">
<el-input :placeholder="$t('test_track.module.search')" v-model="filterText" size="small" :clearable="true"/>
</slot>
<el-tree
class="filter-tree node-tree"
:data="treeNodes"
:data="extendTreeNodes"
:default-expanded-keys="expandedNode"
node-key="id"
@node-drag-end="handleDragEnd"
......@@ -17,63 +15,70 @@
:filter-node-method="filterNode"
:expand-on-click-node="false"
highlight-current
:draggable="draggable"
:draggable="!disabled"
ref="tree">
<template v-slot:default="{node,data}">
<span class="custom-tree-node father" @click="handleNodeSelect(node)">
<span class="node-icon">
<i class="el-icon-folder"></i>
</span>
<span class="custom-tree-node father" @click="handleNodeSelect(node)">
<span class="node-title">{{node.label}}</span>
<span v-if="data.isEdit" @click.stop>
<el-input @blur.stop="save(node, data)" v-model="data.name" class="name-input" size="mini"/>
</span>
<span v-if="type == 'edit' && !disabled" class="node-operate child">
<el-tooltip
class="item"
effect="dark"
:open-delay="200"
:content="$t('test_track.module.rename')"
placement="top">
<i @click.stop="openEditNodeDialog('edit', data)" class="el-icon-edit"></i>
</el-tooltip>
<el-tooltip
class="item"
effect="dark"
:open-delay="200"
:content="$t('test_track.module.add_submodule')"
placement="top">
<i @click.stop="openEditNodeDialog('add', data)" class="el-icon-circle-plus-outline"></i>
</el-tooltip>
<el-tooltip class="item" effect="dark"
:open-delay="200" :content="$t('commons.delete')" placement="top">
<i @click.stop="remove(node, data)" class="el-icon-delete"></i>
</el-tooltip>
</span>
<span v-if="!data.isEdit" class="node-icon">
<i class="el-icon-folder"/>
</span>
<span v-if="!data.isEdit" class="node-title" v-text="data.name"/>
<span v-if="!disabled" class="node-operate child">
<el-tooltip
v-if="data.id != 'root'"
class="item"
effect="dark"
:open-delay="200"
:content="$t('test_track.module.rename')"
placement="top">
<i @click.stop="edit(node, data)" class="el-icon-edit"></i>
</el-tooltip>
<el-tooltip
class="item"
effect="dark"
:open-delay="200"
:content="$t('test_track.module.add_submodule')"
placement="top">
<i @click.stop="append(node, data)" class="el-icon-circle-plus-outline"></i>
</el-tooltip>
<el-tooltip
v-if="data.id != 'root'"
class="item" effect="dark"
:open-delay="200"
:content="$t('commons.delete')"
placement="top">
<i @click.stop="remove(node, data)" class="el-icon-delete"></i>
</el-tooltip>
</span>
</span>
</template>
</el-tree>
<node-edit ref="nodeEdit" :current-project="currentProject" :tree-nodes="treeNodes" @refresh="refreshNode" />
</div>
</template>
<script>
import NodeEdit from "./NodeEdit";
import {checkoutTestManagerOrTestUser, hasRoles} from "../../../../common/js/utils";
import {checkoutTestManagerOrTestUser} from "../../../../common/js/utils";
export default {
name: "NodeTree",
components: { NodeEdit },
name: "MsNodeTree",
components: {},
data() {
return {
result: {},
expandedNode: [],
filterText: "",
expandedNode: [],
defaultProps: {
children: "children",
label: "label"
},
disabled: false,
list: []
extendTreeNodes: []
};
},
props: {
......@@ -84,43 +89,144 @@ export default {
treeNodes: {
type: Array
},
selectNode: {
type: Object
},
draggable: {
type: Boolean,
default: true
allLabel: {
type: String,
default() {
return this.$t("commons.all_label.case");
}
},
currentProject: {
type: Object
}
},
watch: {
treeNodes() {
this.init();
},
filterText(val) {
this.$refs.tree.filter(val);
this.filter(val);
}
},
mounted() {
if (!checkoutTestManagerOrTestUser()) {
this.disabled = true;
computed: {
disabled() {
return this.type != 'edit' || !checkoutTestManagerOrTestUser();
}
},
methods: {
init() {
this.extendTreeNodes = [];
this.extendTreeNodes.unshift({
"id": "root",
"name": this.allLabel,
"level": 0,
"children": this.treeNodes,
});
if (this.expandedNode.length === 0) {
this.expandedNode.push("root");
}
},
handleNodeSelect(node) {
let nodeIds = [];
let pNodes = [];
this.getChildNodeId(node.data, nodeIds);
this.getParentNodes(node, pNodes);
this.$emit("nodeSelectEvent", node, nodeIds, pNodes);
},
filterNode(value, data) {
if (!value) return true;
if (data.label) {
return data.label.indexOf(value) !== -1;
}
return false;
},
filter(val) {
this.$refs.tree.filter(val);
},
nodeExpand(data) {
if (data.id) {
this.expandedNode.push(data.id);
}
},
nodeCollapse(data) {
if (data.id) {
this.expandedNode.splice(this.expandedNode.indexOf(data.id), 1);
}
},
edit(node, data) {
this.$set(data, 'isEdit', true);
},
append(node, data) {
const newChild = {
id: undefined,
isEdit: false,
name: "",
children: []
};
if (!data.children) {
this.$set(data, 'children', [])
}
data.children.push(newChild);
this.edit(node, newChild);
this.$nextTick(() => {
this.$refs.tree.setCurrentKey(data.id);
});
},
save(node, data) {
if (data.name.trim() === '') {
this.$warning(this.$t('test_track.case.input_name'));
return;
}
let param = {};
this.buildSaveParam(param, node.parent.data, data);
if (param.type === 'edit') {
this.$emit('edit', param);
} else {
this.$emit('add', param);
}
this.$set(data, 'isEdit', false);
},
remove(node, data) {
let tip = '确定删除节点 ' + data.label + ' 及其子节点下所有资源' + '';
// let info = this.$t("test_track.module.delete_confirm") + data.label + "," + this.$t("test_track.module.delete_all_resource") + "?";
this.$alert(tip, "", {
confirmButtonText: this.$t("commons.confirm"),
callback: action => {
if (action === "confirm") {
let nodeIds = [];
this.getChildNodeId(node.data, nodeIds);
this.$emit('remove', nodeIds);
}
}
}
);
},
handleDragEnd(draggingNode, dropNode, dropType, ev) {
if (dropType === "none" || dropType === undefined) {
return;
}
let param = this.buildParam(draggingNode, dropNode, dropType);
this.list = [];
this.getNodeTree(this.treeNodes,draggingNode.data.id, this.list);
this.$post("/case/node/drag", param, () => {
draggingNode.data.level = param.level;
this.$post("/case/node/pos", this.list);
this.refreshTable();
}, (error) => {
this.refreshNode();
});
let list = [];
this.getNodeTree(this.treeNodes, draggingNode.data.id, list);
if (param.parentId === 'root') {
param.parentId = undefined;
}
this.$emit('drag', param, list);
},
buildSaveParam(param, parentData, data) {
if (data.id) {
param.nodeIds = [];
param.type = 'edit';
param.id = data.id;
param.level = data.level;
this.getChildNodeId(data, param.nodeIds);
} else {
param.level = 1;
param.type = 'add';
if (parentData.id != 'root') {
// 非根节点
param.parentId = parentData.id;
param.level = parentData.level + 1;
}
}
param.name = data.name.trim();
param.label = data.name;
},
buildParam(draggingNode, dropNode, dropType) {
let param = {};
......@@ -141,7 +247,8 @@ export default {
}
let nodeIds = [];
this.getChildNodeId(draggingNode.data, nodeIds);
if (dropNode.level == 1 && dropType != "inner") {
if (dropNode.data.level == 1 && dropType != "inner") {
// nodeTree 为需要修改的子节点
param.nodeTree = draggingNode.data;
} else {
for (let i = 0; i < this.treeNodes.length; i++) {
......@@ -151,7 +258,6 @@ export default {
}
}
}
param.nodeIds = nodeIds;
return param;
},
......@@ -171,9 +277,6 @@ export default {
}
}
},
refreshTable() {
this.$emit('refreshTable');
},
findTreeByNodeId(rootNode, nodeId) {
if (rootNode.id == nodeId) {
return rootNode;
......@@ -186,41 +289,6 @@ export default {
}
}
},
remove(node, data) {
this.$alert(
this.$t("test_track.module.delete_confirm") +
data.label +
"" +
this.$t("test_track.module.delete_all_resource") +
"",
"",
{
confirmButtonText: this.$t("commons.confirm"),
callback: action => {
if (action === "confirm") {
let nodeIds = [];
this.getChildNodeId(node.data, nodeIds);
this.$post("/case/node/delete", nodeIds, () => {
const parent = node.parent;
const children = parent.data.children || parent.data;
const index = children.findIndex(d => d.id === data.id);
children.splice(index, 1);
this.$success(this.$t("commons.delete_success"));
this.$emit("refresh");
});
}
}
}
);
},
handleNodeSelect(node) {
let nodeIds = [];
let pNodes = [];
this.getChildNodeId(node.data, nodeIds);
this.getParentNodes(node, pNodes);
this.$emit("nodeSelectEvent", nodeIds, pNodes);
this.$emit("update:selectNode", node);
},
getChildNodeId(rootNode, nodeIds) {
//递归获取所有子节点ID
nodeIds.push(rootNode.id);
......@@ -238,30 +306,6 @@ export default {
pNodes.push(rootNode.data);
}
},
filterNode(value, data) {
if (!value) return true;
return data.label.indexOf(value) !== -1;
},
openEditNodeDialog(type, data) {
let nodeIds = [];
if (type == 'edit') {
this.getChildNodeId(data, nodeIds);
}
this.$refs.nodeEdit.open(type, data, nodeIds);
},
refreshNode() {
this.$emit("refresh");
},
nodeExpand(data) {
if (data.id) {
this.expandedNode.push(data.id);
}
},
nodeCollapse(data) {
if (data.id) {
this.expandedNode.splice(this.expandedNode.indexOf(data.id), 1);
}
}
}
};
</script>
......@@ -311,4 +355,14 @@ export default {
color: #409eff;
margin: 0px 5px;
}
.name-input {
height: 25px;
line-height: 25px;
}
.name-input >>> .el-input__inner {
height: 25px;
line-height: 25px;
}
</style>
<template>
<ms-node-tree
v-loading="result.loading"
:tree-nodes="treeNodes"
:type="'edit'"
@add="add"
@edit="edit"
@drag="drag"
@remove="remove"
@nodeSelectEvent="nodeChange"
ref="nodeTree"/>
</template>
<script>
import NodeEdit from "./NodeEdit";
import {getCurrentProjectID} from "../../../../common/js/utils";
import MsNodeTree from "./NodeTree";
export default {
name: "TestCaseNodeTree",
components: {MsNodeTree, NodeEdit },
data() {
return {
defaultProps: {
children: "children",
label: "label"
},
result: {},
treeNodes: [],
projectId: ""
};
},
props: {
type: {
type: String,
default: "view"
},
},
mounted() {
this.projectId = getCurrentProjectID();
this.list();
},
methods: {
list() {
if (this.projectId) {
this.result = this.$get("/case/node/list/" + this.projectId, response => {
this.treeNodes = response.data;
});
}
},
edit(param) {
param.projectId = this.projectId;
this.$post("/case/node/edit", param, () => {
this.$success(this.$t('commons.save_success'));
this.list();
this.$emit("refreshTable");
}, (error) => {
this.list();
});
},
add(param) {
param.projectId = this.projectId;
this.$post("/case/node/add", param, () => {
this.$success(this.$t('commons.save_success'));
this.list();
}, (error) => {
this.list();
});
},
remove(nodeIds) {
this.$post("/case/node/delete", nodeIds, () => {
this.list();
this.$emit("refreshTable")
}, (error) => {
this.list();
});
},
drag(param, list) {
this.$post("/case/node/drag", param, () => {
this.$post("/case/node/pos", list);
this.list();
}, (error) => {
this.list();
});
},
nodeChange(node, nodeIds, pNodes) {
this.$emit("nodeSelectEvent", node, nodeIds, pNodes);
},
}
};
</script>
<style scoped>
</style>
......@@ -8,8 +8,8 @@
<template v-slot:aside>
<node-tree class="node-tree"
v-loading="result.loading"
@nodeSelectEvent="nodeChange"
@refresh="refresh"
:tree-nodes="treeNodes"
ref="nodeTree"/>
</template>
......@@ -237,7 +237,7 @@
this.selectIds.add(row.id);
}
},
nodeChange(nodeIds, nodeNames) {
nodeChange(node, nodeIds, nodeNames) {
this.selectNodeIds = nodeIds;
this.selectNodeNames = nodeNames;
},
......
......@@ -5,9 +5,7 @@
<node-tree class="node-tree"
v-loading="result.loading"
@nodeSelectEvent="nodeChange"
@refresh="refresh"
:tree-nodes="treeNodes"
:draggable="false"
ref="nodeTree"/>
</template>
<template v-slot:main>
......@@ -81,7 +79,7 @@
openTestCaseRelevanceDialog() {
this.$refs.testCaseRelevance.open();
},
nodeChange(nodeIds, pNodes) {
nodeChange(node, nodeIds, pNodes) {
this.selectNodeIds = nodeIds;
this.selectParentNodes = pNodes;
// 切换node后,重置分页数
......
......@@ -32,7 +32,8 @@ export default {
.test-plan-header-bar {
height: 50px;
background-color: white;
background-color: #FFF;
border-bottom: 2px solid #E6E6E6;
}
.header-info {
......@@ -48,4 +49,8 @@ export default {
display: inline-block;
}
.menu-ul >>> .el-menu-item {
height: 51px !important;
}
</style>
......@@ -8,11 +8,10 @@
:title="$t('test_track.review_view.review')"
@dataChange="changeReview"/>
<node-tree class="node-tree"
:all-label="$t('commons.all_label.review')"
v-loading="result.loading"
@nodeSelectEvent="nodeChange"
@refresh="refresh"
:tree-nodes="treeNodes"
:draggable="false"
ref="nodeTree"/>
</ms-aside-container>
......@@ -108,7 +107,7 @@ export default {
});
});
},
nodeChange(nodeIds, pNodes) {
nodeChange(node, nodeIds, pNodes) {
this.selectNodeIds = nodeIds;
this.selectParentNodes = pNodes;
},
......
<template>
<div>
<el-dialog :title="$t('test_track.review_view.relevance_case')" :visible.sync="dialogFormVisible" @close="close"
width="60%" v-loading="result.loading"
width="60%"
:close-on-click-modal="false"
top="50px">
<el-container class="main-content">
<el-aside class="tree-aside" width="250px">
<el-link type="primary" class="project-link" @click="switchProject">{{projectName ? projectName :
$t('test_track.switch_project') }}
</el-link>
<node-tree class="node-tree" @nodeSelectEvent="nodeChange" @refresh="refresh" :tree-nodes="treeNodes"
<select-menu
:data="projects"
width="160px"
:current-data="currentProject"
:title="$t('test_track.switch_project')"
@dataChange="changeProject"/>
<node-tree class="node-tree"
:all-label="$t('commons.all_label.review')"
v-loading="result.loading"
@nodeSelectEvent="nodeChange"
:tree-nodes="treeNodes"
ref="nodeTree"/>
</el-aside>
......@@ -21,6 +28,7 @@
@filter-change="filter" row-key="id"
@select-all="handleSelectAll"
@select="handleSelectionChange"
v-loading="result.loading"
height="50vh"
ref="table">
......@@ -98,10 +106,12 @@
import {_filter} from "../../../../../../common/js/utils";
import ReviewStatus from "@/business/components/track/case/components/ReviewStatus";
import elTableInfiniteScroll from 'el-table-infinite-scroll';
import SelectMenu from "../../../common/SelectMenu";
export default {
name: "TestReviewRelevance",
components: {
SelectMenu,
NodeTree,
MsDialogFooter,
PriorityTableItem,
......@@ -119,6 +129,7 @@
data() {
return {
result: {},
currentProject: {},
dialogFormVisible: false,
isCheckAll: false,
testReviews: [],
......@@ -254,7 +265,7 @@
this.selectIds.add(row.id);
}
},
nodeChange(nodeIds, nodeNames) {
nodeChange(node, nodeIds, nodeNames) {
this.selectNodeIds = nodeIds;
this.selectNodeNames = nodeNames;
},
......@@ -297,6 +308,7 @@
this.$post("/test/case/review/projects", {reviewId: this.reviewId}, res => {
let data = res.data;
if (data) {
this.currentProject = data[0];
this.projects = data;
this.projectId = data[0].id;
this.projectName = data[0].name;
......@@ -318,11 +330,15 @@
this.testReviews = [];
this.getReviews(true);
},
changeProject(project) {
this.projectId = project.id;
},
getProjectNode(projectId) {
const index = this.projects.findIndex(project => project.id === projectId);
if (index !== -1) {
this.projectName = this.projects[index].name;
this.currentProject = this.projects[index];
}
if (projectId) {
this.projectId = projectId;
......
......@@ -165,7 +165,11 @@ export default {
current_user: "Current user"
}
},
monitor: "monitor"
monitor: "monitor",
all_label: {
case: "all",
review: "all"
}
},
license: {
title: 'Authorization management',
......
......@@ -165,7 +165,11 @@ export default {
current_user: "是当前用户"
}
},
monitor: "监控"
monitor: "监控",
all_label: {
case: "全部用例",
review: "全部评审"
}
},
license: {
title: '授权管理',
......
......@@ -165,7 +165,11 @@ export default {
current_user: "是當前用戶"
}
},
monitor:"監控"
monitor:"監控",
all_label: {
case: "全部用例",
review: "全部評審"
}
},
license: {
title: '授權管理',
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册