Commit 2913e9a5 by 吴斌

update:自定义规则

parent 856382f9
......@@ -6,7 +6,6 @@ export var GO = go.GraphObject.make;
* 获取节点的所有连接,存储为一个Map。{key:{next:[], data:{}}}
*/
export function getMapData(myDiagram:any) {
let model = myDiagram.model
let nodeDataArray = model.nodeDataArray
let linkDataArray = model.linkDataArray
......@@ -26,6 +25,26 @@ export function getMapData(myDiagram:any) {
}
/**
* 不区分节点和连接
*/
export function getDeviceMapData(myDiagram:any){
let nodeDataArray = myDiagram.model.nodeDataArray
let linkDataArray = myDiagram.model.linkDataArray
let deviceMap: Record<any, any> = {}
nodeDataArray.forEach((item:any)=>{
deviceMap[item.key] = item
})
linkDataArray.forEach((item:any)=>{
let from = item.from?deviceMap[item.from]['name']:""
let to = item.to?deviceMap[item.to]['name']:""
item.name = from + " -> " + to
deviceMap[item.key] = item
})
return deviceMap
}
/**
* 获取所有选择的节点
* @param {go.Diagram} myDiagram
* @return [{},{}]
......
import * as math from 'mathjs'
/* DeviceType 类定义不同类型设备的常量。 */
export class DeviceType{
static CONTAINER = 'container';
static PUMP = 'pump';
......
import {uuid} from "vue3-uuid";
import {diagramModelData} from "../ModelData.ts";
export const rules :Record<string, any>[]= diagramModelData['ruleData']
/**
* 添加规则
* @param name 规则名称
* @param inputs 输入参数 [{key:-1 ,valueKey:'thick',testData:""}] key表示节点在diagram中的唯一id,valueKey表示节点的属性key
* @param func 规则函数
*/
export function addRule(name:string, inputs:any[], func:Function){
rules.push({
id: uuid.v4(),
name: name,
inputs: inputs,
func: func,
enable:false,
})
}
/**
* 更新规则
* @param id 规则id
* @param name 规则名称
* @param inputs 输入参数
* @param func 规则函数
*/
export function updateRule(id:string, name:string, inputs:[], func:Function){
let ruleIndex = rules.findIndex((item:any) => item.id == id)
if (ruleIndex !== -1){
rules[ruleIndex].name = name
rules[ruleIndex].inputs = inputs
rules[ruleIndex].func = func
}
}
/**
* 删除规则
* @param id
*/
export function deleteRuleById(id:string){
rules.splice(rules.findIndex((item:any) => item.id == id), 1)
}
/**
* 运行规则
* @param rule 规则
* @param deviceMap 设备数据
*/
export function runRule(rule:any, deviceMap:Record<string, any>){
let inputData = []
let runFunc = null
if (rule){
for (let input of rule.inputs){
inputData.push(deviceMap[input.key][input.valueKey])
}
runFunc = new Function( "return " + rule.func)
try {
runFunc()(...inputData)
}catch (e){
alert(e)
}
}
}
export function runAllEnableRule(deviceMap:Record<string, any>){
rules.forEach((item:any) => {
if(item['enabled']) runRule(item, deviceMap)
})
}
export function runRuleById(id:string, deviceMap:Record<string, any>){
let rule = rules.find((item:any) => item.id == id)
runRule(rule, deviceMap)
}
export function testRule(rule:any){
let inputData = []
let runFunc = null
if (rule){
for (let input of rule.inputs){
inputData.push(input['testData'])
}
runFunc = new Function( "return " + rule.func)
try {
runFunc()(...inputData)
}catch (e){
alert(e)
}
}
}
export function testRuleById(id:string){
let rule = rules.find((item:any) => item.id == id)
testRule(rule)
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment