Browse Source

fix bug

old
wangqing 4 years ago
parent
commit
3fbc7770eb
  1. 24
      src/components/parser/Parser.vue
  2. 24
      src/utils/expression.js
  3. 6
      src/views/form/logic/index.vue
  4. 12
      src/views/form/preview/ProjectForm.vue
  5. 2
      src/views/form/preview/index.vue
  6. 2
      src/views/form/statistics/chart.vue

24
src/components/parser/Parser.vue

@ -39,8 +39,9 @@ const layouts = {
if (value) {
config.defaultValue = value
}
//
let colStyle = scheme.logicShow ? '' : 'display:none'
//
let triggerShow = _.indexOf(this.logicTriggerItemList, config.formId) > -1
let colStyle = scheme.logicShow || triggerShow ? '' : 'display:none'
let cidAttr = config.formId
return (
<el-col span={config.span} style={colStyle} cid={cidAttr}>
@ -143,8 +144,7 @@ function renderChildren(h, scheme) {
return renderFormItem.call(this, h, config.children)
}
function setUpload(config, scheme, response, file, fileList) {
console.log(fileList)
function setUpload(config, scheme, response, file) {
let newValue = JSON.parse(this[this.formConf.formModel][scheme.__vModel__])
if (!newValue) {
newValue = []
@ -180,8 +180,14 @@ function setValue(event, config, scheme) {
//
let flag = evalExpression(this[this.formConf.formModel], r.logicExpression)
if (flag) {
// display
this.logicTriggerItemList.push(r.triggerFormItemId)
console.log(this.logicTriggerItemList)
document.querySelector(`div[cid="${r.triggerFormItemId}"]`).style.display = ''
} else {
_.remove(this.logicTriggerItemList, function(n) {
return n == r.triggerFormItemId
})
document.querySelector(`div[cid="${r.triggerFormItemId}"]`).style.display = 'none'
}
})
@ -333,7 +339,9 @@ export default {
formConfCopy: deepClone(this.formConf),
[this.formConf.formModel]: deepClone(this.formModel),
[this.formConf.labelFormModel]: deepClone(this.labelFormModel),
[this.formConf.formRules]: {}
[this.formConf.formRules]: {},
//
logicTriggerItemList: []
}
this.initFormData(data.formConfCopy.fields, data[this.formConf.formModel])
this.initLabelFormData(data.formConfCopy.fields, data[this.formConf.labelFormModel])
@ -380,6 +388,12 @@ export default {
},
buildRules(componentList, rules) {
componentList.forEach(cur => {
//
let triggerShow = _.indexOf(this.logicTriggerItemList, cur.formItemId) > -1
let flag = cur.logicShow || triggerShow ? '' : 'display:none'
if (flag) {
return
}
const config = cur.__config__
if (cur.tag === 'el-upload') {
config.regList.push({

24
src/utils/expression.js

@ -5,11 +5,15 @@ import _ from 'lodash'
*/
const expressionOperator = {
eq: function(v1, v2) {
console.log(v1)
console.log(v2)
if (!v1) {
return false
}
return v1 == v2
},
ne: function(v1, v2) {
if (!v1) {
return false
}
return v1 != v2
}
}
@ -19,8 +23,8 @@ const expressionOperator = {
* @type {{'1': string, '2': string}}
*/
const LogicConnector = {
1: '||',
2: '&&'
1: 'and',
2: 'or'
}
/**
@ -29,8 +33,10 @@ const LogicConnector = {
* @connector 连接符 ||或者 &&
*/
export function getExpression(conditionList, connector) {
let exList = conditionList.map(item => {
return `field${item.formItemId} ${item.expression} ${item.optionValue}`
let exList = conditionList.filter(item => {
return (Object.keys(item).length != 0)
}).map(item => {
return `field${item.formItemId} ${item.expression} ${item.optionValue} `
})
return _.join(exList, LogicConnector[connector])
}
@ -39,9 +45,9 @@ export function getExpression(conditionList, connector) {
* 执行表达式是否成立
*/
export function evalExpression(context, expression) {
let exArray = expression.split(/[|][&]/)
let exArray = expression.split(/and|or/)
// 获取是& 还是|
let and = !exArray.indexOf('|')
let and = expression.indexOf('and') > -1
let flag = false
console.log(exArray)
for (let i = 0; i < exArray.length; i++) {
@ -59,7 +65,7 @@ export function evalExpression(context, expression) {
console.log(fieldValue)
flag = expressionOperator[sp](fieldValue, value)
console.log(flag)
// & 一个不成立直接调出循环 返回成功
// & 一个不成立直接调出循环 返回失败
if (and && !flag) {
break
// | 一个成立直接调出循环 返回成功

6
src/views/form/logic/index.vue

@ -40,7 +40,7 @@
:key="index"
>
<el-row align="middle" justify="center" type="flex">
<el-col :offset="1" :span="6">
<el-col :offset="1" :span="7">
<span class="mr-10">{{ index + 1 }}.</span>
<el-select
v-model="logicItem.formItemId"
@ -67,7 +67,7 @@
/>
</el-select>
</el-col>
<el-col :offset="1" :span="10">
<el-col :offset="1" :span="9">
<span>条件时显示此问题</span>
</el-col>
</el-row>
@ -183,9 +183,9 @@ export default {
}
return false
})
console.log(updateVal)
if (updateVal && updateVal[0] && updateVal[0].conditionList.length) {
let updateData = updateVal[0]
updateData.projectKey = this.projectKey
if (updateData.formItemId) {
this.saveProjectLogic(updateData)

12
src/views/form/preview/ProjectForm.vue

@ -61,6 +61,14 @@ export default {
projectKind: 1
}
},
metaInfo: {
meta: [
{
name: 'viewport',
content: 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no'
}
]
},
data() {
return {
logicShowTriggerRule: {},
@ -106,7 +114,6 @@ export default {
beforeCreate() {
document.querySelector('body').className = 'project-body'
},
created() {
if (this.projectConfig && this.projectConfig.projectKey) {
this.formConf.projectKey = this.projectConfig.projectKey
@ -225,6 +232,9 @@ export default {
}
//
logicItem.conditionList.forEach(item => {
if (Object.keys(item).length === 0) {
return
}
let rules = this.logicShowTriggerRule[item.formItemId]
if (!rules) {
rules = new Array()

2
src/views/form/preview/index.vue

@ -64,7 +64,7 @@ export default {
mounted() {
this.projectKey = this.$route.query.key
let url = window.location.protocol + '//' + window.location.host
this.mobilePreviewUrl = `${url}/s/${this.projectKey}`
this.mobilePreviewUrl = `${url}/project/view?key=${this.projectKey}`
this.$set(this.projectConfig, 'projectKey', this.projectKey)
}
}

2
src/views/form/statistics/chart.vue

@ -28,7 +28,7 @@
</div>
</div>
<div class="line-chat">
<line-chart :width="'100vw'" :chart-option="lineChartOptionData" />
<line-chart :width="'95vw'" :chart-option="lineChartOptionData" />
</div>
<p class="tag-title">表单提交地域分布图</p>
<div style="width: 90%">

Loading…
Cancel
Save