动态表单实现原理

目录

动态表单是什么

动态表单的关键

前后端职责

数据库与表结构

功能实现与改进建议


动态表单是什么

静态表单是很常见,也是常规做法,其表单的结构是固定的,通常情况下一个表单对应数据库的一张表,表单中一个数据项对应数据表的一个字段。虽然结构固定,但查询和统计方便。

而动态表单,特点是表单的内容项是动态可变的,可轻易的添加和减少表单的内容项,而不需要改动表结构和功能实现。结构灵活,但是不便于查询统计。

例如人员统计表单包含姓名、性别、籍贯、身份证号,对于静态表单,数据表有对应的四个字段,若想为表单增加或减少内容项,就需要修改数据表结构了,而且前后端功能实现也需要变化;对应动态表单,只需对表单的内容项进行配置,即可完成结构变更,不需要改动数据表和功能实现。

动态表单的关键

动态表单的关键,在于前后端达成共识的报文结构规范

前端根据用户的配置生成报文,达到表单动态配置目的;

前端解析报文并组织页面元素,达到表单动态显示的目的。

后台对回收采集的json数据进行解析和聚合,提供数据报表和数据统计功能。

tduck、卷王、erupt的动态表单,皆是如此。

前后端职责

由于已经制定了报文规范,所以服务端不做数据转换,而是直接写入数据库。前后端的职责很明确。

前端实现

  1. 前端通过scheme结构描述一个 表单组件,描述结构大概如下图。

  1. 通过拖拽表单组件到当前编辑区,表单组件样式渲染 也是通过 组件的scheme结构进行渲染的。
  2. 编辑表单组件属性,实际就是修改scheme属性字段。
  3. 保存到服务器接口 也是把当前表单的 scheme描述结构发送到接口进行保存。

数据库与表结构

数据库为MySQL

表单相关表结构

tduck和卷王在表结构方面的对比

tduck表单基础信息、表单组件信息、表单配置信息等分别放在不同的表中。

卷王是用一张表存储表单的所有信息,用不同字段存储组件信息、配置信息等。

功能实现与改进建议

回收数据列表

现有流程

举个例子

回收的用户填写数据 json形式

{"input1688020520318":"xxxxx"}

报表接口查询返回

前端根据表单配置信息,进行表格渲染

改进建议-数据筛选

现状:目前报表功能不支持数据筛选。基于现有数据模型,很难做数据筛选。

解决思路:需要借助其他存储方式,并进行二次开发

其他存储方式可选用:

MongoDB,支持json筛选的数据库

es,支持json存储和搜索

存储流程:

查询筛选流程:

数据统计仪表盘功能

现有流程

回收数据表有独立的几个字段记录了相关数据,如用户使用的设备、用户使用的浏览器、IP地址、填写表单用时。

对回收数据表进行group by查询,即可得到仪表盘的数据。

select 设备,count(1) from 回收表 group by 设备
接口返回分组统计数据,由H5进行渲染。

改进建议-改进

考虑数据量很大的情况,不影响数据库性能,功能支持高qps,可以考虑使用redis进行计数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/21957.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea创建webapp文件夹

结果的图片: 第一步: file-》project structure 第二步: 修改路径,点击右侧“Deloyment descriptors”下面的笔进行修改。 // 增加了src\main // web修改为了webapp C:\Users\www12\Desktop\huwantiku2\src\main\webapp\WEB-IN…

【Java】JVM执行流程、类加载过程和垃圾回收机制

JVM执行流程执行引擎本地方法接口运行时数据区方法区堆虚拟机栈(线程私有)本地方法栈(线程私有)程序计数器(线程私有) 堆溢出问题类加载类加载的过程加载连接验证准备解析 初始化 双亲委派机制 垃圾回收死亡对象的判断算法引用计数算法可达性分析算法 垃圾回收的过程标记-清除算…

Linux常用命令——emacs命令

在线Linux命令查询工具 emacs 功能强大的全屏文本编辑器 补充说明 emacs命令是由GNU组织的创始人Richard Stallman开发的一个功能强大的全屏文本编辑器,它支持多种编程语言,具有很多优良的特性。有众多的系统管理员和软件开发者使用emacs。 语法 e…

C语言动态获取设备的网络接口名称和状态以及对应的IP地址

一、目的 在实际项目中需要获取设备的IP地址然后通过广播的形式通知局域网内的其他设备。 二、介绍 方法一 通过ioctl方式获取SIOCGIFADDR信息 /** C Program to Get IP Address*/ #include <stdio.h> #include <string.h> #include <sys/types.h> #includ…

【数学建模】统计分析方法

文章目录 1.回归分析2. 逻辑回归3. 聚类分析4. 判别分析5. 主成分分析6. 因子分析7. 对应分析 1.回归分析 数据量要多&#xff0c;样本总量n越大越好——>保证拟合效果更好&#xff0c;预测效果越好 一般n>40/45较好 方法 建立回归模型 yiβ0β1i……βkxkiεi 所估计的…

Unity 编辑器-查找所有未被使用的Prefab

需求 接到一个需求&#xff0c;将Res里所有特效相关的prefab检查一下&#xff0c;没有使用的移除。 分析 先拆解一下需求&#xff0c;如下 #mermaid-svg-YiTzyE1BvQ0ZTgLj {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#merm…

【运维】 第02讲(上):企业 Nginx 高性能优化配置实战总结

本课时讲解关于 Nginx 配置优化的内容&#xff0c;相信对于 Nginx 你一定并不陌生&#xff0c;它是一款轻量级的开源 Web 服务及代理程序。在 Nginx 出现之前市场上主流两款 Web 服务&#xff0c;一款是 Windows 系统上的 IIS&#xff0c;另外一款是 Linux 系统上的 Apache。而…

新耀东方|安全狗亮相2023第二届上海网络安全博览会

7月5日至7日&#xff0c;“新耀东方-2023第二届上海网络安全博览会暨高峰论坛”在上海顺利举办。此次大会由上海市信息网络安全管理协会、国家计算机网络应急技术处理协调中心上海分中心、(ISC)2上海分会、上海市普陀区科学技术委员会、上海市网络安全产业示范园共同主办。 作为…

【前后缀GCD】ABC125 C

C - GCD on Blackboard (atcoder.jp) 题意&#xff1a; 思路&#xff1a; 这道题&#xff0c;多看看样例大概就出来了 由样例可知&#xff0c;换成的数可以是其他N-1个数的gcd&#xff0c;这样对答案的贡献也没有影响 所以直接去枚举换的是什么数就行 因此怎么去快速求其他…

webpack5性能优化

webpack构建速度 一、优化babel-loader 注意&#xff1a;开启缓存,配置后打包是就能缓存babel webpack.common.js文件命中缓存cacheDirectory {test: /\.js$/,use: [babel-loader?cacheDirectory],include: srcPath,exclude: /node_modules/ }, 测试&#xff1a; 打包后的…

开源堡垒机Guacamole二次开发记录之一

简介 项目中需要用到堡垒机功能&#xff0c;调研了一大圈&#xff0c;发现了Apache Guacamole这个开源项目。 Apache Guacamole 是一个无客户端的远程桌面网关&#xff0c;它支持众多标准管理协议&#xff0c;例如 VNC(RFB)&#xff0c;RDP&#xff0c;SSH 等等。该项目是Apa…

DuiLib中的list控件以及ListContainerElement控件

文章目录 前言1、创建list控件2、创建 ListContainerElement 元素&#xff0c;并添加到 List 控件中,这里的ListContainerElement用xml来表示3、在 ListContainerElement 元素中添加子控件 1、List控件2、ListContainerElement控件 前言 在 Duilib 中&#xff0c;List 控件用于…