From a28df26707eadba991edbedcbae9d0bc35fbd803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=A3=95=E8=B4=A2?= Date: Sat, 7 Oct 2023 01:04:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/mdp-ui/js/treeTool.js | 6 ++ src/views/mdp/form/formDef/Form.vue | 8 +-- src/views/mdp/form/formField/Field.vue | 43 +++++++++-- src/views/mdp/form/formField/FieldCfg.vue | 17 ++--- src/views/mdp/form/formField/Index.vue | 88 +++++++++++++++++------ 5 files changed, 121 insertions(+), 41 deletions(-) diff --git a/src/components/mdp-ui/js/treeTool.js b/src/components/mdp-ui/js/treeTool.js index 3f53b26..16b2f6c 100644 --- a/src/components/mdp-ui/js/treeTool.js +++ b/src/components/mdp-ui/js/treeTool.js @@ -85,6 +85,12 @@ export default { * @returns */ translateDataToTree: function(data2,pidName,idName,rowCallBack) { + if(!pidName){ + pidName='pid' + } + if(!idName){ + idName='id' + } var data=JSON.parse(JSON.stringify(data2)); let parents = data.filter(value =>{ //如果我的上级为空,则我是最上级 diff --git a/src/views/mdp/form/formDef/Form.vue b/src/views/mdp/form/formDef/Form.vue index a978816..0b0905c 100644 --- a/src/views/mdp/form/formDef/Form.vue +++ b/src/views/mdp/form/formDef/Form.vue @@ -181,14 +181,14 @@ export default { this.$notify({position:'bottom-left',showClose:true,message: '表单名称不能为空', type: 'error' }); return; } - var formFields=this.$refs.formFields.selectedFields; + var formFields=this.$refs.formFields.getFieldList(); if(formFields.length==0 ){ this.$notify({position:'bottom-left',showClose:true,message: '最少需要定义一个字段', type: 'error' }); return; } - - if(formFields.length>15){ - this.$notify({position:'bottom-left',showClose:true,message: '最多支持15个字段', type: 'error' }); + var max=this.$refs.formFields.getMaxFields(); + if(formFields.length>max){ + this.$notify({position:'bottom-left',showClose:true,message: '最多支持'+max+'个字段', type: 'error' }); return; } this.$confirm('确认提交吗?', '提示', {}).then(() => { diff --git a/src/views/mdp/form/formField/Field.vue b/src/views/mdp/form/formField/Field.vue index 4f10f3c..59ad7eb 100644 --- a/src/views/mdp/form/formField/Field.vue +++ b/src/views/mdp/form/formField/Field.vue @@ -3,12 +3,12 @@ - + - + @@ -152,6 +152,20 @@ sample:{ type:Boolean, default:false + }, + hasChild:{ + type:Function, + default:function(){ + return null; + } + }, + findNotInChild:{ + type:Function, + default:function(){ + return (excludeId)=>{ + return null; + }; + } } }, watch: { @@ -231,7 +245,28 @@ }else{ return this.span } - } + }, + + onAdd(evt){ + debugger; + let item=this.field.children[evt.newIndex]; + item.isNewAdd=true + var item2=JSON.parse(JSON.stringify(item)) + var noSelectFieldId=this.findNotInChild() + debugger; + if(!noSelectFieldId){ + this.field.children.splice(evt.newIndex,1) + this.$notify.error('当前组件已经超过最大数量,不能再添加'); + return; + } + item2.id=noSelectFieldId.id + item2.fieldId=noSelectFieldId.fieldId + item2.fieldIdCamel=noSelectFieldId.fieldIdCamel + delete item.isNewAdd + this.selectedFields[evt.newIndex]=item2; + this.addForm=item2; + + }, },//end method components: { diff --git a/src/views/mdp/form/formField/FieldCfg.vue b/src/views/mdp/form/formField/FieldCfg.vue index 22b5272..c31adb1 100644 --- a/src/views/mdp/form/formField/FieldCfg.vue +++ b/src/views/mdp/form/formField/FieldCfg.vue @@ -25,21 +25,16 @@ 是否必输 - + - + - - + + - + - - - - - - + diff --git a/src/views/mdp/form/formField/Index.vue b/src/views/mdp/form/formField/Index.vue index a4f56de..44d6b5e 100644 --- a/src/views/mdp/form/formField/Index.vue +++ b/src/views/mdp/form/formField/Index.vue @@ -29,10 +29,10 @@ - + - + @@ -142,6 +142,7 @@ import draggable from 'vuedraggable' import { mapGetters } from 'vuex' import MdpField from './Field.vue' import {listTableColumn} from '@/api/mdp/form/FormField.js' +import treeTool from '@/components/mdp-ui/js/treeTool.js' export default { computed: { ...mapGetters([ @@ -339,29 +340,23 @@ export default { } }); }, - onTplStart(evt){ - var item=evt.item - var item2=JSON.parse(JSON.stringify(item)) - var noSelectFieldId=this.fieldIds.find(i=>{ - return !this.selectedFields.some(k=>k.id==i.id && k.isNewAdd!='1'); - }) - item2.id=noSelectFieldId.id - item2.fieldId=noSelectFieldId.fieldId - item2.fieldIdCamel=noSelectFieldId.fieldIdCamel - item=item2 + onTplStart(evt){ }, - add(evt){ + onAdd(evt){ debugger; - let item=this.selectedFields[evt.newIndex]; - item.isNewAdd='1' + let item=this.selectedFields[evt.newIndex]; var item2=JSON.parse(JSON.stringify(item)) var noSelectFieldId=this.fieldIds.find(i=>{ - return !this.selectedFields.some(k=>k.id==i.id && k.isNewAdd!='1'); + return !this.hasChild(i.id); }) + if(!noSelectFieldId){ + this.selectedFields.splice(evt.newIndex,1) + this.$notify.error('当前组件已经超过最大数量,不能再添加'); + return; + } item2.id=noSelectFieldId.id item2.fieldId=noSelectFieldId.fieldId - item2.fieldIdCamel=noSelectFieldId.fieldIdCamel - item2.isNewAdd='0' + item2.fieldIdCamel=noSelectFieldId.fieldIdCamel this.selectedFields[evt.newIndex]=item2; this.addForm=item2; @@ -552,13 +547,62 @@ export default { } return axiosObj }, - doChildDelete(child,idx,children){ - debugger; + doChildDelete(child,idx,children){ children.splice(idx,1) this.$emit('delete',child,idx,children) }, - /**end 在上面加自定义方法**/ + hasChild(id){ + return this.hasMyChild(id,this.selectedFields) + }, + hasMyChild(id,children){ + debugger; + if(!children||children.length==0){ + return false; + }else{ + if(children.some(c=>c.id==id && c.isNewAdd!=true)){ + return true + }else{ + for(var i=0;i{ + return !this.hasChild(i.id); + }) + }, + getMyFieldList(list,children){ + if(children && children.length>0){ + children.forEach(k=>{ + if(k.children && k.children.length>0){ + var childs=k.children + delete k.children + list.push(k) + this.getMyFieldList(list,childs) + }else{ + list.push(k) + } + }) + } + }, + getFieldList(){ + var list=[] + this.getMyFieldList(list,this.selectedFields) + return list; + }, + getMaxFields(){ + return this.fieldIds.length + } },//end method components: { //在下面添加其它组件 'form-field-edit':FormFieldEdit @@ -568,7 +612,7 @@ export default { this.myFormDef=this.formDef if(this.formFields){ - this.selectedFields=JSON.parse(JSON.stringify(this.formFields)) + this.selectedFields=treeTool.translateDataToTree(this.formFields,'groupId','id') }else{ this.selectedFields=[] }