zoukankan      html  css  js  c++  java
  • vue 开发系列(八) 动态表单开发

    概要

    动态表单指的是我们的表单不是通过vue 组件一个个编写的,我们的表单是根据后端生成的vue模板,在前端通过vue构建出来的。主要的思路是,在后端生成vue的模板,前端通过ajax的方式加载后端的表单模板,权限数据和表单数据,在前端使用vue进行构建出来。

    表单渲染过程。

     

    实现步骤

    1.在前端开发表单组件,比如用户组件,文本输入组件。

     在平台中我们可以看到我们开发的组件。

    组件的开发在第三篇有介绍。

    我们定义的组件和后台配置的权限相关。

    我们每个组件都定义了:

    permission: 权限对象

    permissionkey:权限对应的key

    2.手机端模板代码

    手机端模板是通过表单BO元数据生成的,我们可以在后端编辑手机端模板,我们现在看一下简单的手机表单VUE的模板。

    <script>// 表单公式计算
    var formulas_2400000001371061={};
    // 表单日期计算
    var dateCalcs_2400000001371061={};
    //实体扩展JSON
    var extJson_2400000001371061={};
    //验证规则
    var validRule_2400000001371061={"main":{"age":{"vtype":"length:50"},"name":{"vtype":"length:50"},"mobile":{"vtype":"length:50"}}};</script>
    <yd-popup v-model="showUserDialog" position="center" width="100%">
        <rx-sysuser :single="singleUser" ref="sysUser" v-on:ok="selectUser" v-on:cancel="closeUserDialog()"></rx-sysuser>
    </yd-popup>
    <yd-popup v-model="showGroupDialog" position="center" width="100%">
        <rx-sysgroup :single="singleGroup" ref="sysGroup" v-on:ok="selectGroup" v-on:cancel="closeGroupDialog()"></rx-sysgroup>
    </yd-popup>
    <div class="div-form">
        
        <div class="caption">
            simpleform
        </div>
        
        <div class="form-container">
            
            <div class="form">
                
                <div class="form-title">
                    
                        name                
                </div>
                    
                <div class="form-input">
                    
                    <rx-input v-model="data.name" permissionkey="name" vtype="length:50" :readonly="readonly" :permission="permission.main"></rx-input>
                    
                </div>
                
            </div>
                
            <div class="form">
                
                    
                <div class="form-title">
                    
                        age                
                </div>
                    
                <div class="form-input">
                    
                    <rx-input v-model="data.age" permissionkey="age" vtype="length:50" :readonly="readonly" :permission="permission.main"></rx-input>
                    
                </div>
                
            </div>
                
            <div class="form">
                    
                <div class="form-title">
                    
                        mobile                
                </div>
                    
                <div class="form-input">
                   
                    <rx-input v-model="data.mobile" permissionkey="mobile" vtype="length:50" :readonly="readonly" :permission="permission.main"></rx-input>
                    
                </div>
                
            </div>
        
        </div>
    </div>
        

    这个表单中:

    我们可以看到我们自定义的组件,包括数据,权限部分,验证规则部分。

    3.后端提供的数据部分。

    我们可以看下后端提供的数据:

    [{
            "result": true,
            "msg": "",
            "type": "",
            "formKey": "simpleform",
            "content": "<script>// 表单公式计算
    var formulas_2400000001371061={};
    // 表单日期计算
    var dateCalcs_2400000001371061={};
    //实体扩展JSON
    var extJson_2400000001371061={};
    //验证规则
    var validRule_2400000001371061={"main":{"age":{"vtype":"length:50"},"name":{"vtype":"length:50"},"mobile":{"vtype":"length:50"}}};</script><yd-popup v-model="showUserDialog" position="center" width="100%"><rx-sysuser :single="singleUser" ref="sysUser" v-on:ok="selectUser" v-on:cancel="closeUserDialog()"></rx-sysuser></yd-popup><yd-popup v-model="showGroupDialog" position="center" width="100%"><rx-sysgroup :single="singleGroup" ref="sysGroup" v-on:ok="selectGroup" v-on:cancel="closeGroupDialog()"></rx-sysgroup></yd-popup><div class="div-form">
    	<div class="caption">simpleform</div>
    	<div class="form-container">
    			<div class="form">
    				<div class="form-title">
    					name				</div>
    				<div class="form-input">
    	
    				<rx-input v-model="data.name" permissionkey="name_form" vtype="length:50" :readonly="readonly" :permission="permission.main"></rx-input>
    				</div>
    			</div>
    			<div class="form">
    				<div class="form-title">
    					age				</div>
    				<div class="form-input">
    	
    				<rx-input v-model="data.age" permissionkey="age_form" vtype="length:50" :readonly="readonly" :permission="permission.main"></rx-input>
    				</div>
    			</div>
    			<div class="form">
    				<div class="form-title">
    					mobile				</div>
    				<div class="form-input">
    	
    				<rx-input v-model="data.mobile" permissionkey="mobile_form" vtype="length:50" :readonly="readonly" :permission="permission.main"></rx-input>
    				</div>
    			</div>
    	</div></div>
    	",
            "permission": "{"main":{"age":{"require":false,"right":"w"},"name":{"require":false,"right":"w"},"mobile":{"require":false,"right":"w"}}}",
            "jsonData": {
                "age": "",
                "name": "",
                "mobile": ""
            },
            "description": "simpleform",
            "viewId": "2400000001371078",
            "boDefId": "2400000001371061",
            "timeStamp": "1523799818000",
            "params": {}
        }]

    这里看到后端返回的数据主要包括:

    content :表单内容

    permission:表单权限

    jsonData:表单数据

    4.通过vue 将表单进行渲染

    步骤:

    1.将html放到容器中。

    2.使用vue 将数据和模版渲染到容器中。

  • 相关阅读:
    【转】 Ubuntu安装jdk报错:-bash /usr/.../java:No such file or directroy
    sudo 出现unable to resolve host 解决方法
    C99 布尔
    面向对象?
    高斯消元
    白皮 Chapter 2
    白皮 Chapter 1
    开启暑假新生活( •̀ ω •́ )
    [vijos P1040] 高精度乘法
    [SCOI2007] 修车
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/8849384.html
Copyright © 2011-2022 走看看