UNPKG

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.

91 lines (88 loc) 2.69 kB
import dijkstra from 'dijkstrajs'; export default class { constructor(data) { this.data = data; this.graph = {}; const link = data.link; const nodes = {} const graph = {}; link.map((item) => { let arr = item.split('>'); nodes[arr[0]] = 1; graph[arr[0]] = graph[arr[0]] || {} if (arr.length == 3) { //条件节点 graph[arr[0]][arr[2]] = 1; nodes[arr[2]] = 1; } else { graph[arr[0]][arr[1]] = 1; nodes[arr[1]] = 1; } }) this.validNodes = nodes; this.graph = graph; } checkPath(start, end) { //整体检查 let path = this.findPath(start, end); if (!path.length) { return '无法从: ' + start.split(':')[0] + ' 到达: ' + end.split(':')[0]; } } findPath(from, to) { var find_path = dijkstra.find_path; var path = [] try { path = find_path(this.graph, from, to); } catch (e) { console.log(from, '>*>', to, '不存在') } return path } check() { const data = this.data; const node = data.node; const link = data.link; const sameNodes = new Set(); //同名点 let cacheBranch = {}; let nodeNameMap = {} let linkToMap = {}; let linkFromMap = {}; let start, end; link.map((item) => { let arr = item.split('>'); if (arr.length == 3) { //条件节点 let id = `${arr[0]}>${arr[1]}` linkToMap[arr[0]] = arr[2]; linkFromMap[arr[2]] = arr[0]; cacheBranch[id] = item; } else { linkToMap[arr[0]] = arr[1] linkFromMap[arr[1]] = arr[0]; } }) node.map((item) => { let name = item.split(':')[0]; if (nodeNameMap[name]) { sameNodes.add(nodeNameMap[name]); sameNodes.add(item); } nodeNameMap[name] = item; if (item.includes('Start')) { start = item; } }) const res = {}; sameNodes.forEach((item) => { if(item.indexOf('Start') > -1 || item.indexOf('End') > -1){ sameNodes.delete(item); } }) if (sameNodes.size) { res['同名节点'] = [...sameNodes]; } if (!start) { res['起点'] = new Error('没有起点'); } return Object.keys(res).length ? res : null; } }