update:仿真执行参数导入导出功能实现

This commit is contained in:
2026-04-15 10:25:18 +08:00
parent de6410c710
commit a766439d58

View File

@@ -20,7 +20,9 @@
<template #leftOptions v-if="!hideButtons">
<el-button
type="primary"
v-if="flowNodeParamData.nodeTypeValue === '1'"
v-if="
flowNodeParamData.nodeTypeValue === '1' || flowNodeParamData.nodeTypeValue === '8'
"
@click="flowClickFun('justStartLocalAppFun')"
>启动</el-button
>
@@ -60,7 +62,20 @@
<el-dropdown-menu>
<el-dropdown-item @click="referenceParamFun">参数引用</el-dropdown-item>
<el-dropdown-item @click="paramToLibFun">参数入库</el-dropdown-item>
<el-dropdown-item @click="inputParamFun">参数导入</el-dropdown-item>
<el-upload
:show-file-list="false"
accept=".json"
:auto-upload="false"
:limit="1"
:on-change="inputParamFun"
>
<el-dropdown-item>参数导入</el-dropdown-item>
<!-- <el-button type="primary">参数导入</el-button> -->
</el-upload>
<!-- <el-dropdown-item @click="inputParamFun">参数导入</el-dropdown-item> -->
<el-dropdown-item @click="exportParamFun">参数导出</el-dropdown-item>
</el-dropdown-menu>
</template>
@@ -629,11 +644,11 @@ const handleCloseFun = () => {
showRunLog.value = false;
};
const inputParamFun = () => {};
const exportParamFun = () => {
const jsonData = tableData.value;
const fileName = props.flowNodeData?.nodeName + '参数.json';
const jsonData: any = cloneDeep(tableData.value);
formmatJsonFun(jsonData);
const fileName = props.flowNodeData?.nodeName + '.json';
// 将JSON对象转换为字符串
const jsonString = JSON.stringify(jsonData, null, 2); // 第二个参数是replacer第三个参数是空格用于美化输出
// 创建一个blob对象指定文本类型
@@ -650,6 +665,66 @@ const exportParamFun = () => {
URL.revokeObjectURL(url); // 释放URL对象
};
const keys = ref(['label', 'englishLabel', 'options', 'defaultValue', 'children']);
const formmatJsonFun = (list: any) => {
for (let i = 0; i < list.length; i++) {
for (const key in list[i]) {
if (!keys.value.includes(key)) {
delete list[i][key];
}
}
if (list[i]?.children?.length) {
formmatJsonFun(list[i]?.children);
}
}
};
// 上传文件解析赋值
const inputParamFun = (uploadFile: any) => {
const file = uploadFile.raw; // 获取文件信息
const fileReader = new FileReader();
fileReader.readAsText(file!); // 开始读取文件的内容为二进制
fileReader.onload = (ev) => {
// 读取完成,对数据进行自己的操作
const data = ev.target?.result; // 获取内容
const treeData = JSON.parse(data as string);
const list: any = [];
getTreeListData(treeData, list);
setValueToData(tableData.value, list);
};
};
// 递归赋值
const setValueToData = (data: any, list: any) => {
for (let i = 0; i < data.length; i++) {
for (let j = 0; j < list.length; j++) {
if (data[i].englishLabel === list[j].englishLabel) {
data[i].defaultValue = list[j].defaultValue;
}
}
if (data[i]?.children?.length) {
setValueToData(data[i]?.children, list);
}
}
};
// 获取树状图所有参数列表
const getTreeListData = (tree: any, list: any = []) => {
for (let i = 0; i < tree.length; i++) {
list.push(tree[i]);
if (tree[i]?.children?.length) {
getTreeListData(tree[i]?.children, list);
}
}
};
defineExpose({
saveNodeParamFun,
paramToLibFun,