Browse Source

逻辑显示基本完成

old
wangqing 4 years ago
parent
commit
d8990c1fa7
  1. 24
      src/components/parser/Parser.vue
  2. 42
      src/utils/expression.js
  3. 4
      src/views/form/ProjectForm.vue

24
src/components/parser/Parser.vue

@ -34,11 +34,11 @@ const layouts = {
if (formConfCopy.showNumber) {
label = scheme.serialNumber + ': ' + label
}
this.$set(this[this.formConf.formModel], scheme.__vModel__, [])
let colStyle = scheme.logicShow ? '' : 'display:none'
let cidAttr = config.formId
return (
<el-col span={config.span} style={colStyle}>
<el-col span={config.span} style={colStyle} cid={cidAttr}>
<el-form-item label-width={labelWidth} prop={scheme.__vModel__}
label={config.showLabel ? label : ''}>
<render conf={scheme} {...{on: listeners}} />
@ -159,15 +159,23 @@ function deleteUpload(config, scheme, file, fileList) {
}
function setValue(event, config, scheme) {
console.log(event)
console.log(config)
console.log(scheme)
console.log(this[this.formConf.formModel])
this.$set(config, 'defaultValue', event)
this.$set(this[this.formConf.formModel], scheme.__vModel__, event)
setValueLabel.call(this, event, config, scheme)
const {formConfCopy} = this
let logicShowRule = this.formConfCopy.logicShowRule
//
let rules = _.get(logicShowRule, config.formId)
if (rules && Array.isArray(rules)) {
rules.forEach(r => {
//
let flag = evalExpression(this[this.formConf.formModel], r.logicExpression)
if (flag) {
document.querySelector(`div[cid="${r.triggerFormItemId}"]`).style.display = ''
}else{
document.querySelector(`div[cid="${r.triggerFormItemId}"]`).style.display = 'none'
}
})
}
}
/**

42
src/utils/expression.js

@ -4,11 +4,13 @@ import _ from 'lodash'
* 自定义表达式
*/
const expressionOperator = {
'eq': function(v1, v2) {
return _.isEqual(v1, v2)
eq: function(v1, v2) {
console.log(v1)
console.log(v2)
return v1 == v2
},
'ne': function(v1, v2) {
return !_.isEqual(v1, v2)
ne: function(v1, v2) {
return v1 != v2
}
}
@ -28,7 +30,7 @@ const LogicConnector = {
*/
export function getExpression(conditionList, connector) {
let exList = conditionList.map(item => {
return `#id${item.formItemId} ${item.expression} ${item.optionValue}`
return `field${item.formItemId} ${item.expression} ${item.optionValue}`
})
return _.join(exList, LogicConnector[connector])
}
@ -38,13 +40,33 @@ export function getExpression(conditionList, connector) {
*/
export function evalExpression(context, expression) {
let exArray = expression.split(/[|][&]/)
exArray.forEach(item => {
let itemExpArr = item.split(' ')
let varName = itemExpArr[0].replace('#id')
//获取是& 还是|
let and = exArray.indexOf('|') ? false : true
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]
let flag = expressionOperator[sp](context[varName], value)
})
//比较是否成立
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
}

4
src/views/form/ProjectForm.vue

@ -166,9 +166,9 @@ export default {
logicItem.conditionList.forEach(item => {
let rules = this.logicShowTriggerRule[item.formItemId]
if (!rules) {
rules = new Set()
rules = new Array()
}
rules.add({
rules.push({
//
triggerFormItemId: logicItem.formItemId,
logicExpression: getExpression(logicItem.conditionList, logicItem.expression)

Loading…
Cancel
Save