【自定义表单】自定义表单设计
1.后端设计1
diy_field_pool 字段池(我们定义好的字段类型)
diy_form 表单表(记录用户自定义的表单)
diy_form_field 表单字段表(记录某张表单中有哪些字段)
diy_form_entity 表单实例表(记录某张表单中的某条数据实例)
diy_form_data 表单数据表(记录某张表单在某条实例下,哪些字段对应的数据)
系统初始化字段池
我们提供一批预定义的字段类型,初始化数据到diy_field_pool表中,用户也能自己定义自己的字段池。用户创建自定义表单
用户通过选用字段池(diy_field_pool表)中提供的字段,创建一张自定义表单,表单的属性信息记录在diy_form表中,表单包含的字段(从字段池中选好的字段)记录在diy_form_field表中。这样用户就创建了一张自定义表单。用户填写表单
用户使用创建好的表单填写数据,每新增一条数据,在diy_form_entity表就会新增一条记录,该表单中有几个field,就会同时在diy_form_data表中新增几条 data 数据。数据结构关系如下图所示:
//1.
CREATE TABLE `diy_field_pool` (`id` bigint(20) NOT NULL COMMENT '主键id',`field_type` varchar(32) NOT NULL COMMENT '字段类型',`field_type_name` varchar(32) NOT NULL COMMENT '字段类型名称'PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='字段池';//2.
CREATE TABLE `diy_form` (`id` bigint(20) NOT NULL COMMENT '主键id',`form_code` varchar(32) NOT NULL COMMENT '表单code',`form_name` varchar(32) NOT NULL COMMENT '表单名称'PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='表单表';//3.
CREATE TABLE `diy_form_data` (`id` bigint(20) NOT NULL COMMENT '主键id',`form_id` bigint(20) NOT NULL COMMENT 'diy_form表id',`entity_id` bigint(20) NOT NULL COMMENT 'diy_form_entity表id',`field_id` bigint(20) NOT NULL COMMENT 'diy_form_field表id',`value` varchar(512) NOT NULL COMMENT '数据值'PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='表单数据表';//4.
CREATE TABLE `diy_form_entity` (`id` bigint(20) NOT NULL COMMENT '主键id',`form_id` bigint(20) NOT NULL COMMENT 'diy_form表id',`entity_code` varchar(32) NOT NULL COMMENT '实例code',`entity_name` varchar(32) NOT NULL COMMENT '实例名称'PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='表单实例表';//5.
CREATE TABLE `diy_form_field` (`id` bigint(20) NOT NULL COMMENT '主键id',`form_id` bigint(20) NOT NULL COMMENT 'diy_form表id',`field_pool_id` bigint(20) NOT NULL COMMENT 'diy_field_pool表id',`form_field_code` varchar(32) NOT NULL COMMENT '表单code',`form_field_name` varchar(32) NOT NULL COMMENT '表单名称'PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='表单字段表';
// 1.分页查询sql
SELECT li.id,dff.form_field_code,dff.form_field_name,dfd.`value` FROM
(SELECT dfe.id, dfe.entity_code FROM
diy_form df
LEFT JOIN diy_form_entity dfe ON dfe.form_id = df.id
WHERE df.form_code='product_info'
LIMIT 0,1) liLEFT JOIN diy_form_data dfd ON li.id = dfd.entity_id
LEFT JOIN diy_form_field dff ON dfd.field_id=dff.id
【自定义表单】自定义表单设计相关推荐
- 工作流表单自定义功能的误区
表单自定义功能看似非常方便,可以不用写代码即可完成表单的开发设计,表面上看的确是减少不少开发成本,但深入研究,发现是有不少误区的. 1. 对于整体成本来讲,当表单自定义功能能 ...
- 协同软件表单自定义平台
表单是工作流的"用户界面"的载体,协同软件厂商也常将其称为表单引擎,也是作为平台的界面开发基础.一个完善.优秀的工作流引擎应该有一个易于设计和操作的表单设计工具,对其的标准建议定义 ...
- 【FBA】SharePoint 2013自定义Providers在基于表单的身份验证(Forms-Based-Authentication)中的应用...
//http://www.cnblogs.com/OceanEyes/p/custom-provider-in-sharepoint-2013-fba-authentication.html 由于项目 ...
- html表单复选框样式,美化表单——自定义checkbox和radio样式
如果你对本站比较观注的话,应该很清楚,前面就有这方面的介绍.因为大家都知道表单中的部分元素如果单单使用CSS是没办法完成的,所以最近花全力在学习这方面的制作.在本站有关于这样制作有好几个教程了,比如说 ...
- element-ui的表单校验;el-form表单校验;el-form表单自定义校验;手机号校验;车牌号校验;车牌号正则校验;
示例:代码在末尾 可以直接复制使用 一.基本属性认知: 1. required: true 会有 * , 但仅是触发最后点击提交按钮时,校验某一项位必填:与输入事件或者选择或者失焦时候 怎么校验无关 ...
- vue 嵌套表格组件_使用form-create动态生成vue自定义组件和嵌套表单组件
使用form-create动态生成vue自定义组件和嵌套表单组件 maker.create 通过建立一个虚拟 DOM的方式生成自定义组件 生成 Maker let rule = [ formCreat ...
- Activiti,自定义表单,外置表单,工作流,微服务,子系统
百度,csdn找了半个月,没有一篇文章将 Activiti 外置表单 讲透彻的,无奈,自己亲手写了一套, 祭出这套大杀器,开放给广大网友. 点击极速体验 账号密码:admin admin123 系统功 ...
- 解放前端工程师——手把手教你开发自己的自定义列表和自定义表单系列之二接口
前言 阅读前请按照顺序参看系列文章,效果更佳! Vue中路由到一个公共组件,然后根据路径中是否存在文件动态加载组件 解放前端工程师--手把手教你开发自己的自定义列表和自定义表单系列之一缘起 据说系列文 ...
- layui单选框verify_layui lay-verify form表单自定义验证规则详解
虽然layui的官方文档已经是写的比较详细,但是初次使用的时候总会懵一下,这里纪录一下lay-verify自定义验证规则的时候到底放哪. html: 提交 js: form.verify({ //数组 ...
- element UI 表单自定义验证,css水平且垂直居中方法
element UI 表单自定义验证 element UI提供了一种内部的表单验证,但是这种方法不能够来进行复杂的验证,如邮箱,手机号等的验证需要用到自定义验证 首先是element UI 提供的基础 ...
最新文章
- Pyqt5_QWidget
- 使用jQuery卸载绑定的事件
- router vue 动态改变url_vue动态路由
- Opencv 中cv开头的函数和没有cv的区别,例如cvWaitkey()和waitKey()的区别
- java以32位运行,强制java applet以32位而不是64位JRE运行
- oracle----删除数据
- [Angular2 Animation] Control Undefined Angular 2 States with void State
- java流作为参数,java-8 – 将Java 8流映射函数作为参数传递
- java去除音频无声_java – 使用FFMPEG和silencedetect删除音频静音
- slf4j、log4j日志级别与配置
- 鼠标失灵,但鼠标和USB接口都是好的的情况。
- 永中office属于职称计算机吗,永中office
- Imagination和浙江大学信电学院签署合作协议,校企共创大学课程新篇章
- oracle8i误删除临时表空间后的恢复
- 云计算+,如何推动建筑行业智慧化升级?
- 智慧城市/园区三维GIS可视化平台
- CMS垃圾回收器详解
- miui怎么用第三方图标包_快来领取你的图标包~
- logAB = logA + logB; A,B0
- 【第114期】五大经典风控系统全面解读