You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.1 KiB

import _ from 'lodash'
/**
* 自定义表达式
*/
const expressionOperator = {
'eq': function(v1, v2) {
return _.isEqual(v1, v2)
},
'ne': function(v1, v2) {
return !_.isEqual(v1, v2)
}
}
/**
* 逻辑连接符
* @type {{'1': string, '2': string}}
*/
const LogicConnector = {
1: '||',
2: '&&'
}
/**
* 获取表达式
* @conditionList 条件列表
* @connector 连接符 ||或者 &&
*/
export function getExpression(conditionList, connector) {
let exList = conditionList.map(item => {
return `#id${item.formItemId} ${item.expression} ${item.optionValue}`
})
return _.join(exList, LogicConnector[connector])
}
/**
* 执行表达式是否成立
*/
export function evalExpression(context, expression) {
let exArray = expression.split(/[|][&]/)
exArray.forEach(item => {
let itemExpArr = item.split(' ')
let varName = itemExpArr[0].replace('#id')
let sp = itemExpArr[1]
let value = itemExpArr[2]
let flag = expressionOperator[sp](context[varName], value)
})
return flag
}