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) { if (formConfCopy.showNumber) {
label = scheme.serialNumber + ': ' + label label = scheme.serialNumber + ': ' + label
} }
this.$set(this[this.formConf.formModel], scheme.__vModel__, []) this.$set(this[this.formConf.formModel], scheme.__vModel__, [])
let colStyle = scheme.logicShow ? '' : 'display:none' let colStyle = scheme.logicShow ? '' : 'display:none'
let cidAttr = config.formId
return ( 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__} <el-form-item label-width={labelWidth} prop={scheme.__vModel__}
label={config.showLabel ? label : ''}> label={config.showLabel ? label : ''}>
<render conf={scheme} {...{on: listeners}} /> <render conf={scheme} {...{on: listeners}} />
@ -159,15 +159,23 @@ function deleteUpload(config, scheme, file, fileList) {
} }
function setValue(event, config, scheme) { 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(config, 'defaultValue', event)
this.$set(this[this.formConf.formModel], scheme.__vModel__, event) this.$set(this[this.formConf.formModel], scheme.__vModel__, event)
setValueLabel.call(this, event, config, scheme) 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 = { const expressionOperator = {
'eq': function(v1, v2) { eq: function(v1, v2) {
return _.isEqual(v1, v2) console.log(v1)
console.log(v2)
return v1 == v2
}, },
'ne': function(v1, v2) { ne: function(v1, v2) {
return !_.isEqual(v1, v2) return v1 != v2
} }
} }
@ -28,7 +30,7 @@ const LogicConnector = {
*/ */
export function getExpression(conditionList, connector) { export function getExpression(conditionList, connector) {
let exList = conditionList.map(item => { 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]) return _.join(exList, LogicConnector[connector])
} }
@ -38,13 +40,33 @@ export function getExpression(conditionList, connector) {
*/ */
export function evalExpression(context, expression) { export function evalExpression(context, expression) {
let exArray = expression.split(/[|][&]/) let exArray = expression.split(/[|][&]/)
exArray.forEach(item => { //获取是& 还是|
let itemExpArr = item.split(' ') let and = exArray.indexOf('|') ? false : true
let varName = itemExpArr[0].replace('#id') 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 sp = itemExpArr[1]
// 值
let value = itemExpArr[2] 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 return flag
} }

4
src/views/form/ProjectForm.vue

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

Loading…
Cancel
Save