diff --git a/src/components/parser/Parser.vue b/src/components/parser/Parser.vue index 508dea3..ec426e9 100644 --- a/src/components/parser/Parser.vue +++ b/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 ( - + @@ -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' + } + }) + } } /** diff --git a/src/utils/expression.js b/src/utils/expression.js index 5b4dde3..9486085 100644 --- a/src/utils/expression.js +++ b/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 } diff --git a/src/views/form/ProjectForm.vue b/src/views/form/ProjectForm.vue index 4dfa0dd..99317c3 100644 --- a/src/views/form/ProjectForm.vue +++ b/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)