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.
|
|
|
import _ from 'lodash'
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 自定义表达式
|
|
|
|
*/
|
|
|
|
const expressionOperator = {
|
|
|
|
eq: function(v1, v2) {
|
|
|
|
console.log(v1)
|
|
|
|
console.log(v2)
|
|
|
|
return v1 == v2
|
|
|
|
},
|
|
|
|
ne: function(v1, v2) {
|
|
|
|
return v1 != v2
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 逻辑连接符
|
|
|
|
* @type {{'1': string, '2': string}}
|
|
|
|
*/
|
|
|
|
const LogicConnector = {
|
|
|
|
1: '||',
|
|
|
|
2: '&&'
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 获取表达式
|
|
|
|
* @conditionList 条件列表
|
|
|
|
* @connector 连接符 ||或者 &&
|
|
|
|
*/
|
|
|
|
export function getExpression(conditionList, connector) {
|
|
|
|
let exList = conditionList.map(item => {
|
|
|
|
return `field${item.formItemId} ${item.expression} ${item.optionValue}`
|
|
|
|
})
|
|
|
|
return _.join(exList, LogicConnector[connector])
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 执行表达式是否成立
|
|
|
|
*/
|
|
|
|
export function evalExpression(context, expression) {
|
|
|
|
let exArray = expression.split(/[|][&]/)
|
|
|
|
// 获取是& 还是|
|
|
|
|
let and = !exArray.indexOf('|')
|
|
|
|
let flag = false
|
|
|
|
console.log(exArray)
|
|
|
|
for (let i = 0; i < exArray.length; i++) {
|
|
|
|
let itemExpArr = exArray[i].split(' ')
|
|
|
|
console.log(itemExpArr)
|
|
|
|
// 截取字段名
|
|
|
|
let varName = itemExpArr[0]
|
|
|
|
// 条件 等于 不等于
|
|
|
|
let sp = itemExpArr[1]
|
|
|
|
// 值
|
|
|
|
let value = itemExpArr[2]
|
|
|
|
// 比较是否成立
|
|
|
|
console.log(varName)
|
|
|
|
let filedValue = _.get(context, varName)
|
|
|
|
console.log(filedValue)
|
|
|
|
flag = expressionOperator[sp](filedValue, value)
|
|
|
|
console.log(flag)
|
|
|
|
// & 一个不成立直接调出循环 返回成功
|
|
|
|
if (and && !flag) {
|
|
|
|
break
|
|
|
|
// | 一个成立直接调出循环 返回成功
|
|
|
|
} else if (!and && flag) {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return flag
|
|
|
|
}
|
|
|
|
|