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
51 lines
1.1 KiB
4 years ago
|
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
|
||
|
}
|
||
|
|