zoukankan      html  css  js  c++  java
  • 动态高可配置表单设计

    demo:

    表单配置
    clipboard.png
    校验配置
    clipboard.png
    属性流flow配置
    clipboard.png
    生成表单交互 .gif
    图片描述

    技术栈:

    vue+elementui+springboot+mybatis+mysql

    特性:

    1. 支持自定义属性
    2. 支持基于async-validator的值校验
    3. 支持父子属性
    4. 支持属性流程设置
    5. 支持多值

    数据库设计:

    图片描述

    关键数据结构:

    属性对象

    public class EntityAttrInfoVO {
        private String id;
        private String parentId;
        /**
         * 中文名
         */
        private String cname;
        /**
         * 英文名
         */
        private String ename;
        /**
         * 短名
         */
        private String shortName;
        /**
         * 是否复合对象
         */
        private Boolean compounded;
        /**
         * 数据类型
         */
        private Integer dataType;
        /**
         * 描述
         */
        private String comment;
        /**
         * 排序
         */
        private int sort;
        /**
         * 是否有效
         */
        private Boolean valid;
        /**
         * 校验规则
         */
        private String rule;
        /**
         * 是否支持流属性
         */
        private Boolean flow;
        /**
         * 是否为流属性
         */
        private Boolean forFlow;
        /**
         * 是否支持多个
         */
        private Boolean multi;
        /**
         * 显示定位code
         */
        private String pointCode;
    
        private List<EntityAttrInfoVO> childrenAtrr;
        private List<RdEntityAttrFlowInfoVO> attrFlowList;
        /**
         * 枚举类型数据
         */
        private List<RdEnumDicInfoVO> enumOptions;
        // get set
    }

    属性流对象

    public class RdEntityAttrFlowInfoVO {
    
        private String id;
    
        private String attrId;
        /**
         * 触发类型
         */
        private Integer triggerType;
       /**
         * 监听值
         */
        private String checkKey;
        /**
         * 流属性ids
         */
        private Set<String> nextAttrIds;
        /**
         * 流属性对象集合
         */
        private List<EntityAttrInfoVO> nextAttrInfo;
        
        //get set
    }   

    期望:

    1. 校验支持flow属性
    2. 自动填表 表单项联动监听
    3. 减少递归函数
    4. 性能优化,懒加载可行性
    5. 移动端支持

    值得探讨的问题:

    1. 为什么子属性(childrenAttr)不和流程属性(flowAttr)合并?
      理论上childrenAttr属于元属性,作为主体的基本属性必须存在,即便值为空,而flowAttr是动态的,不一定会存在
    2. flowAttr为什么要通过json string 类型存储?
      前期的设想是想按照id->value的方式存储,但这样很难找到原有的对应关系,因为数据库读取是批量的,数据结构的构建都是在内存完成的
    3. 是否支持组件化?
      目前该模块在公司项目中尚未抽离出来,但这并不复杂.前端计划脱离elementui减少依赖,组件化和一些功能优化会在后期逐步完成
  • 相关阅读:
    javaEE_maven_struts2_tomcat_first
    企业框架-Spring
    MyBatis延迟加载及缓存
    MyBatis注解及动态Sql
    框架之MyBatis
    SQL中的一些关键字用法
    Mysql————基本sql语句
    表单验证
    java中的锁——列队同步器
    线程同步Lock锁
  • 原文地址:https://www.cnblogs.com/10manongit/p/12790265.html
Copyright © 2011-2022 走看看