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.
108 lines (106 loc) • 2.78 kB
JavaScript
import {
defineStore
} from 'pinia';
import {
formateId,
removeNodeId,
setEleInfo,
getEleInfo
} from '@/utils/topo'
import {
deepMerge,
deepClone
} from '@/utils/util.js';
import {
store
} from '@/common/js/app.js'
import {markRaw} from 'vue'
export const useTopo = defineStore({
id: 'topo', // id必填,且需要唯一
state: () => {
return {
currentTopo: {},
selectedEle:null,
copyTopo: null,
};
},
actions: {
setCopyTopo(id){
if(!id){
this.copyTopo = null;
return;
}
this.copyTopo = deepClone(store.storage.logic[id]);
return this.copyTopo
},
pasteCopyTopo(data){
const copyTopo = this.copyTopo;
if(!copyTopo){
return;
}
const id = Date.now();
const newTopo = deepMerge({},copyTopo);
newTopo.config.id = id;
newTopo.config.group = data.group;
newTopo.config.name = data.name;
newTopo.config.introduce = data.introduce;
store.storage.logic[id] = newTopo;
store.storage.setData()
this.copyTopo = null;
return newTopo;
},
selectEle(ele){
this.selectedEle = ele
},
init(currentTopo) {
this.currentTopo = currentTopo;
return this;
},
create({
config: {
name,
group=['index'],
introduce
}
}) {
let id = `${Date.now()}`;
store.storage.logic[id] = {
config: {
id,
name,
group,
introduce,
data: {
nodeDataArray:[],
linkDataArray:[]
}
},
record:{},
topo:{
name:'',
link: [],
node: [],
topo:{
name,
group,
}
}
}
store.storage.setData()
},
update(id, newVal={}) {
for(let k in store.storage.logic[id]) {
store.storage.logic[id][k] = {
...store.storage.logic[id][k],
...newVal[k]
}
}
store.storage.forceUpdate()
store.storage.setData()
},
delete(id) {
delete store.storage.logic[id]
store.storage.setData()
},
}
});