|
@@ -6,7 +6,7 @@ import {
|
|
HJNodeData,
|
|
HJNodeData,
|
|
} from "@/components/hjflow/src/types/comTypes";
|
|
} from "@/components/hjflow/src/types/comTypes";
|
|
import { Edge } from "@vue-flow/core";
|
|
import { Edge } from "@vue-flow/core";
|
|
-
|
|
|
|
|
|
+import { Delete } from "@element-plus/icons-vue";
|
|
import ProjectMessage from "./com/project-message.vue";
|
|
import ProjectMessage from "./com/project-message.vue";
|
|
import FunctionModule from "./com/function-col.vue";
|
|
import FunctionModule from "./com/function-col.vue";
|
|
import TitleHeader from "@/views/modules/project-config/com/titleHeader.vue";
|
|
import TitleHeader from "@/views/modules/project-config/com/titleHeader.vue";
|
|
@@ -28,7 +28,13 @@ const flowRef = ref<HJFlowInstance>();
|
|
const nodes = ref<HJNodeData[]>([]);
|
|
const nodes = ref<HJNodeData[]>([]);
|
|
const edges = ref<Edge[]>([]);
|
|
const edges = ref<Edge[]>([]);
|
|
// vue 的相关操作
|
|
// vue 的相关操作
|
|
-const onNodeOperation = (name: HJMethodName, node: HJNodeData): void => {
|
|
|
|
|
|
+const onNodeOperation = (name: HJMethodName, node?: HJNodeData): void => {
|
|
|
|
+ if (node == null) {
|
|
|
|
+ selectedNode.value = null;
|
|
|
|
+ infoVisible.value = false;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (name === HJMethodName.EditNode) {
|
|
if (name === HJMethodName.EditNode) {
|
|
selectedNode.value = null;
|
|
selectedNode.value = null;
|
|
selectedNode.value = JSON.parse(JSON.stringify(node));
|
|
selectedNode.value = JSON.parse(JSON.stringify(node));
|
|
@@ -55,14 +61,22 @@ const onNodeOperation = (name: HJMethodName, node: HJNodeData): void => {
|
|
nodes: nodes.value,
|
|
nodes: nodes.value,
|
|
edges: edges.value,
|
|
edges: edges.value,
|
|
};
|
|
};
|
|
- console.log("dddddd", nodes.value.length, edges.value.length, flowData);
|
|
|
|
|
|
+ console.log(
|
|
|
|
+ "SaveTemplate n-l e-l flowdata",
|
|
|
|
+ nodes.value.length,
|
|
|
|
+ edges.value.length,
|
|
|
|
+ flowData
|
|
|
|
+ );
|
|
let p = {
|
|
let p = {
|
|
id: currentTestItemId.value,
|
|
id: currentTestItemId.value,
|
|
routeData: JSON.stringify(flowData),
|
|
routeData: JSON.stringify(flowData),
|
|
};
|
|
};
|
|
updateTestModule(p).then(() => {
|
|
updateTestModule(p).then(() => {
|
|
ElMessage.success("保存模版成功");
|
|
ElMessage.success("保存模版成功");
|
|
|
|
+
|
|
flowRef.value && flowRef.value.clearStatus();
|
|
flowRef.value && flowRef.value.clearStatus();
|
|
|
|
+ selectedNode.value = null;
|
|
|
|
+ infoVisible.value = false;
|
|
});
|
|
});
|
|
}
|
|
}
|
|
};
|
|
};
|
|
@@ -86,13 +100,19 @@ const onSaveConfigs = () => {
|
|
watch(
|
|
watch(
|
|
selectedNode,
|
|
selectedNode,
|
|
(newVal) => {
|
|
(newVal) => {
|
|
- flowRef.value &&
|
|
|
|
- flowRef.value.updateNodeData(
|
|
|
|
- JSON.parse(JSON.stringify(selectedNode.value))
|
|
|
|
- );
|
|
|
|
|
|
+ if (selectedNode.value) {
|
|
|
|
+ flowRef.value &&
|
|
|
|
+ flowRef.value.updateNodeData(
|
|
|
|
+ JSON.parse(JSON.stringify(selectedNode.value))
|
|
|
|
+ );
|
|
|
|
+ }
|
|
},
|
|
},
|
|
{ deep: true }
|
|
{ deep: true }
|
|
);
|
|
);
|
|
|
|
+// 为触摸屏添加删除节点功能
|
|
|
|
+const deleteSelectedNodeOrEdge = () => {
|
|
|
|
+ flowRef.value && flowRef.value.deleteSelectedNodeOrEdge();
|
|
|
|
+};
|
|
|
|
|
|
onMounted(async () => {
|
|
onMounted(async () => {
|
|
// 如果选择的测试项目id有值,就获取数据
|
|
// 如果选择的测试项目id有值,就获取数据
|
|
@@ -137,7 +157,7 @@ const handleSearch = (_: string, prefix: string) => {
|
|
|
|
|
|
<template>
|
|
<template>
|
|
<div class="project-config-container">
|
|
<div class="project-config-container">
|
|
- <ProjectMessage @onClickItem="onSelectTestPro" />
|
|
|
|
|
|
+ <ProjectMessage @on-click-item="onSelectTestPro" />
|
|
<FunctionModule />
|
|
<FunctionModule />
|
|
<HJFlow
|
|
<HJFlow
|
|
class="hjflow-box"
|
|
class="hjflow-box"
|
|
@@ -146,7 +166,7 @@ const handleSearch = (_: string, prefix: string) => {
|
|
v-model:edges-data="edges"
|
|
v-model:edges-data="edges"
|
|
:show-panel="true"
|
|
:show-panel="true"
|
|
:panel-btns="['toSnake', 'layoutTB', 'saveTemplate']"
|
|
:panel-btns="['toSnake', 'layoutTB', 'saveTemplate']"
|
|
- @hjMethod="onNodeOperation"
|
|
|
|
|
|
+ @hj-method="onNodeOperation"
|
|
/>
|
|
/>
|
|
<div class="right-message-box">
|
|
<div class="right-message-box">
|
|
<TitleHeader>属性配置</TitleHeader>
|
|
<TitleHeader>属性配置</TitleHeader>
|
|
@@ -154,9 +174,7 @@ const handleSearch = (_: string, prefix: string) => {
|
|
<div class="form-box" v-if="infoVisible">
|
|
<div class="form-box" v-if="infoVisible">
|
|
<el-form rer="formRef" label-position="top">
|
|
<el-form rer="formRef" label-position="top">
|
|
<el-form-item label="节点标识名称">
|
|
<el-form-item label="节点标识名称">
|
|
- <el-input
|
|
|
|
- v-model="selectedNode!.data.information.nodeName"
|
|
|
|
- ></el-input>
|
|
|
|
|
|
+ <el-input v-model="selectedNode!.data.information.nodeName" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-form-item>
|
|
<el-text class="mx-1" type="warning">
|
|
<el-text class="mx-1" type="warning">
|
|
@@ -192,10 +210,16 @@ const handleSearch = (_: string, prefix: string) => {
|
|
</div>
|
|
</div>
|
|
</el-scrollbar>
|
|
</el-scrollbar>
|
|
<div class="bottom-box">
|
|
<div class="bottom-box">
|
|
- <!-- <div class="save-btn" @click="onSaveConfigs">-->
|
|
|
|
- <!-- <svg-icon icon-class="save" />-->
|
|
|
|
- <!-- 保存节点信息-->
|
|
|
|
- <!-- </div>-->
|
|
|
|
|
|
+ <el-button
|
|
|
|
+ type="danger"
|
|
|
|
+ :icon="Delete"
|
|
|
|
+ @click.stop="deleteSelectedNodeOrEdge"
|
|
|
|
+ >删除</el-button
|
|
|
|
+ >
|
|
|
|
+ <!-- <div class="save-btn" @click="onSaveConfigs">
|
|
|
|
+ <svg-icon icon-class="save" />
|
|
|
|
+ 保存节点信息
|
|
|
|
+ </div> -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -234,6 +258,7 @@ const handleSearch = (_: string, prefix: string) => {
|
|
//height: 80px;
|
|
//height: 80px;
|
|
padding: 10px 0;
|
|
padding: 10px 0;
|
|
background-color: $hj-black-2;
|
|
background-color: $hj-black-2;
|
|
|
|
+ padding: 0 10px;
|
|
|
|
|
|
.save-btn {
|
|
.save-btn {
|
|
width: 130px;
|
|
width: 130px;
|