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

24
src/utils/expression.js

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

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

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

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

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

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

@ -64,7 +64,7 @@ export default {
mounted() { mounted() {
this.projectKey = this.$route.query.key this.projectKey = this.$route.query.key
let url = window.location.protocol + '//' + window.location.host 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) this.$set(this.projectConfig, 'projectKey', this.projectKey)
} }
} }

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

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

Loading…
Cancel
Save