logic-helper
Version:
This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
140 lines (126 loc) • 3.59 kB
JavaScript
import {
store
} from '@/common/js/app.js'
import objectPath from 'object-path'
import {toRaw} from 'vue'
export function formateId(id) {
if (typeof id ?.id == 'string') {
id = id.id;
}
if (typeof id === 'string') {
id = id.trim();
id = store.storage.nodeMap[id] || id
if (id.indexOf('>') > -1) {
id = id
.split('>')
.map((str) => {
let k = str.trim()
return store.storage.nodeMap[k] || k;
})
.join('>');
}
}
return id;
}
export const removeNodeId = (topo, id) => {
topo.topo.node = topo.topo.node.filter((item) => item !== id);
topo.topo.link = topo.topo.link.filter((item) => !item.split('>').includes(id));
for (let l in topo.config.link) {
let newl = l
.split('>')
.map((item) => (item == id ? newId : item))
.join('>');
if (newl != l) {
delete topo.config.link[l];
}
}
for (let l in topo.config.node) {
if (l == id) {
delete topo.config.node[l];
}
}
};
export function getEleInfo(topo, id) {
id = formateId(id);
return {
id,
el: store.model.getElementById(id),
config: topo.config.node[id] || topo.config.link[id] || {},
}
}
export function setEleInfo(topo, id, info) {
id = formateId(id);
objectPath(topo).set(`config.node.${id}`, {
...objectPath(topo).get(`config.node.${id}`,{}),
...info.config
})
}
export function getSymbolInfo(type){
switch (type) {
case 'Conditional':
return {
value:'Conditional',
label:'判断',
icon:'icon-suit_diamond',
ins_limit: Infinity,
outs_limit: Infinity,
};
case 'Repeat':
return {
value:'Repeat',
label:'循环',
icon:'icon-repeat',
ins_limit: 0,
outs_limit: 1,
};
case 'Start':
return {
value:'Start',
label:'开始',
icon:'icon-play-circle-line',
ins_limit: 0,
outs_limit: 1,
};
case 'End':
return {
value:'End',
label:'结束',
icon:'icon-OA-end-process',
ins_limit: 1,
outs_limit: 0,
};
case 'Comment':
return {
value:'Comment',
label:'结束',
icon:'icon-OA-end-process',
ins_limit: 0,
outs_limit: 0,
};
case 'Input':
return {
value:'Input',
label:'输入',
icon:'icon-tx-pinghangsibianxing',
ins_limit: 1,
outs_limit: 1,
};
case 'Subroutine':
return {
value:'Subroutine',
label:'子流程',
icon:'icon-tx-pinghangsibianxing',
ins_limit: 1,
outs_limit: 1,
};
default:
return {
value: 'process',
label: '进程',
icon:'icon-rectangle',
ins_limit: Infinity,
outs_limit: 1,
};
}
}
export const allSymbols = ()=>['Conditional','Start','End','Comment','Step','Input'].map(getSymbolInfo)