|
@@ -12,6 +12,15 @@ import FunctionModule from "./com/function-col.vue";
|
|
|
import TitleHeader from "@/views/modules/project-config/com/titleHeader.vue";
|
|
|
import { AutoTestNodeData, InforPropertyModel } from "./configs/properites";
|
|
|
import type { FormInstance } from "element-plus";
|
|
|
+import {
|
|
|
+ getProjectGlobalConfig,
|
|
|
+ getTestProjectInfo,
|
|
|
+ updateTestModule,
|
|
|
+} from "@/api/project";
|
|
|
+
|
|
|
+import { useCommonStoreHook } from "@/store";
|
|
|
+
|
|
|
+const { currentTestItemId, currentProjectId } = toRefs(useCommonStoreHook());
|
|
|
|
|
|
const flowRef = ref<HJFlowInstance>();
|
|
|
const nodes = ref<HJNodeData[]>([]);
|
|
@@ -23,7 +32,35 @@ const onNodeOperation = (name: HJMethodName, node: HJNodeData): void => {
|
|
|
selectedNode.value = JSON.parse(JSON.stringify(node));
|
|
|
infoVisible.value = true;
|
|
|
} else if (name === HJMethodName.SaveTemplate) {
|
|
|
- console.log("保存模版数据");
|
|
|
+ // 如果没有选测试项目 给提示
|
|
|
+ if (!currentTestItemId.value) {
|
|
|
+ ElMessage.warning("请选择测试项目");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (nodes.value.length === 0) {
|
|
|
+ ElMessage.warning("请编辑功能");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (selectedNode.value) {
|
|
|
+ ElMessage.warning("请先保存节点信息");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存模版数据
|
|
|
+ let flowData = {
|
|
|
+ nodes: nodes.value,
|
|
|
+ edges: edges.value,
|
|
|
+ };
|
|
|
+ let p = {
|
|
|
+ id: currentTestItemId.value,
|
|
|
+ routeData: JSON.stringify(flowData),
|
|
|
+ };
|
|
|
+ updateTestModule(p).then(() => {
|
|
|
+ ElMessage.success("保存模版成功");
|
|
|
+ flowRef.value && flowRef.value.clearStatus();
|
|
|
+ });
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -33,6 +70,9 @@ const infoVisible = ref(false);
|
|
|
const selectedNode = ref<AutoTestNodeData | null>(null); //双击的节点数据
|
|
|
const onSaveConfigs = () => {
|
|
|
console.log("onSaveConfigs", selectedNode.value);
|
|
|
+ if (!selectedNode.value) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
flowRef.value &&
|
|
|
flowRef.value.updateNodeData(
|
|
|
JSON.parse(JSON.stringify(selectedNode.value))
|
|
@@ -41,15 +81,50 @@ const onSaveConfigs = () => {
|
|
|
selectedNode.value = null;
|
|
|
};
|
|
|
|
|
|
-onMounted(() => {
|
|
|
- // 接口调用完成要初始化 ,为的是保存一个最初的数据
|
|
|
- flowRef.value && flowRef.value.initFlow([], []);
|
|
|
+onMounted(async () => {
|
|
|
+ // 如果选择的测试项目id有值,就获取数据
|
|
|
+ if (currentTestItemId.value) {
|
|
|
+ getFlowData();
|
|
|
+ }
|
|
|
+
|
|
|
+ let res = await getProjectGlobalConfig(currentProjectId.value);
|
|
|
+ configData.value = res.data;
|
|
|
});
|
|
|
+
|
|
|
+const getFlowData = () => {
|
|
|
+ nodes.value = [];
|
|
|
+ edges.value = [];
|
|
|
+ getTestProjectInfo(currentTestItemId.value).then((result) => {
|
|
|
+ if (result.data.routeData) {
|
|
|
+ let data = JSON.parse(result.data.routeData);
|
|
|
+ nodes.value = data.nodes;
|
|
|
+ edges.value = data.edges;
|
|
|
+ // 接口调用完成要初始化 ,为的是保存一个最初的数据
|
|
|
+ flowRef.value && flowRef.value.initFlow([], []);
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+//选择测试项目相关 每次点击需要重新获取中间的流程的数据
|
|
|
+const onSelectTestPro = () => {
|
|
|
+ flowRef.value && flowRef.value.clearStatus();
|
|
|
+ selectedNode.value = null;
|
|
|
+ infoVisible.value = false;
|
|
|
+ getFlowData();
|
|
|
+};
|
|
|
+
|
|
|
+// 全局变量和仪器列表选择相关
|
|
|
+const configData: Record<string, any[]> = ref({});
|
|
|
+const configOptions = ref([]);
|
|
|
+
|
|
|
+const handleSearch = (_: string, prefix: string) => {
|
|
|
+ configOptions.value = configData.value[prefix] || [];
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
<div class="project-config-container">
|
|
|
- <ProjectMessage />
|
|
|
+ <ProjectMessage @onClickItem="onSelectTestPro" />
|
|
|
<FunctionModule />
|
|
|
<HJFlow
|
|
|
class="hjflow-box"
|
|
@@ -64,17 +139,40 @@ onMounted(() => {
|
|
|
<TitleHeader>属性配置</TitleHeader>
|
|
|
<div class="form-box" v-if="infoVisible">
|
|
|
<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-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-text class="mx-1" type="warning">
|
|
|
+ 输入@选择全局变量或#选择仪器
|
|
|
+ </el-text>
|
|
|
+ </el-form-item>
|
|
|
<el-form-item
|
|
|
v-for="property in selectedNode?.data?.information?.properties"
|
|
|
:label="property.proName"
|
|
|
:key="property.proName"
|
|
|
>
|
|
|
- <el-input v-model="property.bindValue"></el-input>
|
|
|
+ <el-mention
|
|
|
+ v-model="property.bindLabel"
|
|
|
+ :options="configOptions"
|
|
|
+ :prefix="['@', '#']"
|
|
|
+ whole
|
|
|
+ @search="handleSearch"
|
|
|
+ @select="
|
|
|
+ (opt) => {
|
|
|
+ property.bindCode = opt.code;
|
|
|
+ }
|
|
|
+ "
|
|
|
+ @blur="
|
|
|
+ () => {
|
|
|
+ if (property.bindLabel === '') {
|
|
|
+ property.bindCode = '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ "
|
|
|
+ />
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</div>
|
|
@@ -94,6 +192,7 @@ onMounted(() => {
|
|
|
width: 100%;
|
|
|
height: calc(100vh - $main-header-height);
|
|
|
}
|
|
|
+
|
|
|
.hjflow-box {
|
|
|
//width: 100%;
|
|
|
flex: 1;
|
|
@@ -143,4 +242,8 @@ onMounted(() => {
|
|
|
line-height: 16px;
|
|
|
text-align: left;
|
|
|
}
|
|
|
+
|
|
|
+:deep(.el-collapse-item__wrap) {
|
|
|
+ border: 0;
|
|
|
+}
|
|
|
</style>
|