1、需求背景
在日常开发中经常会遇到一类需求,比如要记录学生的信息,通常的做法是在数据库创建一张学生表,根据需求确定好表的字段,然后开发增、删、改、查的功能,包括前端和后台。但系统使用的过程中有时需要记录多一些信息,这时就得在表里增加字段,前端后台也得进行开发、测试、发布。更常见的是,当系统开发完成,给不同的客户部署的时候,每家客户需要记录的信息都是不同的,因此就要针对客户的需求,再修改数据库的表设计,前端后台也得跟着修改,不够灵活。
因此,我们设计了一个可伸缩表适配功能flexible table adapter,针对任意表,可无限字段扩展,支持主流字段类型,所有字段支持任意组合查询、排序;查询支持多种操作符,如大于、小于、等于、不等于、区间、包括、包含等;支持记录增删改查、导入导出Excel,导出修改再导入更新;前后端组件化、分层模块化;单表维护、多表复杂查询可实现无代码化,配置即可不需开发,可显著有效提高开发效率。
技术栈:PostgreSQL、Java、React Antd
2、功能介绍
2.1 数据表
首先,在数据库创建表,如:t_student。
create table t_student ( sid int8 primary key, --主键 name varchar(100), my_number numeric(12,2), my_timestamp timestamp(6), my_date date, my_time time(6), my_bool bool, my_varchar varchar(255), my_sex varchar(30), my_int int4, my_text text, my_jsonb jsonb, my_add varchar(255), my_long int8, --外键 constraint fkey_user_id foreign key (my_long) sys_user (user_id) );
2.2 维护表
其次,在系统创建该表。
属性 |
描述 |
表格编码 |
数据库中的表名。 |
表格名称 |
表的中文描述名称。导出excel时,文件名为表格名称+日期。 |
表格类型 |
数据字典:TABLE_TYPE,取值包括[表格]和[存储过程]。 |
表格状态 |
启用或禁用,如果禁用相当该表没有在系统定义。 |
值表 |
扩展字段(非数据库表字段)的值存储的值表,不填默认sys_table_field_value |
SQL |
存储过程/复杂查询的SQL。 |
注:flexible table adapter除了支持单表的无代码维护,还支持复杂查询,只需写一条SQL。
2.3 维护字段分类
字段分类的用途主要是对表的字段进行归类和分类显示,体现在查询组件和新增、修改表单。
属性 |
描述 |
类型编码 |
字段分类的编码。 |
类型名称 |
字段分类的名称。 |
类型状态 |
字段分类的状态。禁用则相当于该类型下的所有字段在系统中没有定义,字段在前端的查询组件、数据表格以及新增、修改表单中均不显示。 |
类型排序 |
字段分类的排序。 |
备注 |
备注。 |
2.4 维护字段数据
维护表字段的数据,定义字段的特性。
属性 |
描述 |
字段编码 |
数据库表中的字段名。 |
字段名称 |
字段的中文描述名称。 |
字段分类 |
上述维护的字段分类。 |
输入类型 |
前端该字段输入组件的类型。数据字典:INPUT_TYPE,int整数|numeric浮点数|text文本|textarea文本域|bool布尔|radio单选|multiple多选|dict数据字典|datetime日期时间|date日期|time时间|jsonJSON|file文件|pic图片 |
字段状态 |
启用/禁用。禁用则相当于该字段在系统中没有定义,字段在前端的查询组件、数据表格以及新增、修改表单中均不显示,接口也不返回该字段。 |
主外键 |
主键/外键。如果字段是主键或外键必须维护。 |
外键描述 |
用于生成新增、修改表单中外键的下拉选项。维护成如下格式: 外键表名,主键字段,描述字段,如:sys_user,user_id,username |
数据类型 |
数据库表中该字段的数据类型,数据字典:DATA_TYPE。仅作记录,可不维护,系统目前不依赖此字段作任何逻辑处理。 |
默认值 |
字段在新增表单中的默认值。 |
顺序 |
字段的排序顺序。体现中前端的查询组件、表格和表单中。 |
取值范围 |
字段的取值范围。单选或多选的枚举值,英文逗号间隔;如果是字典,填字典编码;如果是外键,填sql,如:select user_id,username from sys_user where status=''1''',用于外键字段的文本翻译。 |
查询设置 |
字段的查询设置。数据字典:QUERY_SETTING,快捷可查、组件可查、全部可查、全不可查。 |
显示设置 |
字段的显示设置。数据字典:DISPLAY_SETTING,表格可见、表单可见、全部可见、全不可见。 |
可否排序 |
可否排序,是则前端查询列表表格,支持按该字段升序或降序排序 |
是否必填 |
在表单中该字段是否必填。必填/非必填。 |
值字段 |
暂未用到,可不维护。 |
备注 |
字段备注。导出Excel时,用于生成提示信息。 |
注:
1、除了定义数据库表中存在的字段(基础字段)之外,还可以定义t_student表中不存在的字段(扩展字段),扩展字段的值实际上以行的方式存在【值表】当中,查询时以行转列的方式拼接到了数据库表字段的末尾。
2、在功能使用的过程中,如有需要,可随时增加字段,包括基础字段和扩展字段,不需进行任何开发。值得注意的时候,定义的字段一旦使用,原则上不应再删除。系统上也做了限制,如果是数据库表字段,删除字段定义不会删除数据库表中的字段;如果是扩展字段,字段一旦存值,外键约束会限制删除不了,除非先删除使用了该字段的所有记录。
2.5 创建菜单
表和字段定义完成之后,创建菜单,如下:URL路径固定维护成:/sys/commonPage/表名。
打开菜单,该学生表t_student的增、删、改、查,导入导出Excel,导出修改再导入更新的功能即可直接使用了。
3、功能组件
现在我们来看,生成的菜单的功能及其组件。
3.1 表格组件
1、显示设置:当字段定义时显示设置为表格可见或全部可见时,在表格中会出现该字段。
2、可否排序:当字段定义时可否排序开关打开时,点表头 可按该字段升序或降序排序。并且支持多个排序条件,如先按性别升序,再按性别降序。
3、字典字段、外键字段在表中存的是字典编码和外键表的主键ID,表格实现了文本的翻译。
比如:性别是数据字典,表中存的是F和M,表格显示时自动翻译了字典项目的文本。
用户是外键字段,表中存的用户ID,表格显示时根据外键配置自动翻译成了文本。
3.2 查询组件
查询组件包含两部分:快捷查询和组合查询。
1、快捷查询
当字段的查询设置配置为[快捷可查]或[全部可查],并且字段类型是整形或字符型时,输入字段值, ,系统会搜查所有的可快捷查询的字段,任意字段的值符合条件即返回该条记录,字符型字段支持模糊查询。
2、组合查询
当字段的查询设置配置为[组件可查]或[全部可查]时,字段会出现在查询组件的字段名下拉列表中,支持字段的任意组合查询。操作符,根据字段的输入类型和数据类型支持不同的操作符;字段值,根据字段的输入类型自动切换不同的输入组件,如文本框、数值框、日期选择框或下拉框等。字段查询条件之间支持用[与]及[或]连接,以及用括号进行组合。
字段名:
操作符:
字段值:
当操作符为包括、不包括时,字段值可以以英语逗号为间隔,输入多个值进行批量查询,如下图所示。
查询组件支持的所有操作符:
操作符 |
SQL运算符 |
含义 |
eq |
= |
等于 |
ne |
<> |
不等于 |
gt |
> |
大于 |
lt |
< |
小于 |
ge |
>= |
大于等于 |
le |
<= |
小于等于 |
like |
like |
包含 |
not like |
not like |
不包含 |
in |
in |
包括 |
not in |
not in |
不包括 |
start |
like 'value%' |
开始以 |
end |
like '%value' |
结束以 |
value |
is not null and <>'' |
有值 |
no value |
is null or ='' |
无值 |
输入类型与操作符的对应关系:
输入类型InputType |
输入类型描述 |
推荐DataType |
操作符 |
int |
整数 |
int4 |
eq, ne, gt, lt, ge, le in, not_in |
numeric |
浮点数 |
numeric |
eq, ne, gt, lt, ge, le |
text |
文本 |
varchar |
eq, ne like, not_like in, not_in start, end, value, no_value |
textarea |
文本域 |
text |
like, not_like start, end, value, no_value |
bool |
布尔 |
bool |
eq, ne |
radio |
单选 |
varchar |
eq, ne in, not_in |
multiple |
多选 |
varchar |
like, not_like |
dict |
数据字典 |
varchar(30) |
eq, ne in, not_in |
datetime |
日期时间 |
timestamp |
eq, ne, gt, lt, ge, le |
date |
日期 |
date |
eq, ne, gt, lt, ge, le |
time |
时间 |
time |
eq, ne, gt, lt, ge, le |
json |
JSON |
jsonb |
不能查询 |
file |
文件 |
varchar |
暂不支持 |
pic |
图片 |
varchar |
暂不支持 |
3.3 表单组件
表单组件根据字段分类和字段定义生成表单,字段的输入类型就体现 在表单和查询组件中。
新建表单:
编辑表单:
3.4 Excel操作
Excel操作支持导出模板、导出数据和导入数据。
1、导出数据到Excel;
2、支持导出模板填充数据后导入(无主键列,新增记录);
3、导出表格数据修改然后再导入(有主键列,更新记录)。
在导出的Excel文件中:
如果是必填字段,表头红色显示,提示是必填项;
如果是数值字段,在Excel限制了只能输入数值;
如果是日期时间、日期、时间,均提示格式。
如果是单选、多选、字典、布尔类型或是外键字段,均做成了下拉选择:
导入Excel
导入Excel时,系统会校验必填字段必须有值,校验数值、日期、时间、JSON字段的数据合法性。报错时,会明确指明是哪一行哪一列的单格的数据有问题。
今天的文章 通用可扩展表分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/83702.html