java项目自定义字段表单处理方式
参考开源
直接用中文字段建表,没有实体,查询出来使用map传给前端。
参考开源nocodb,
前端新建一个字段
后端执行打印:
缺点:没有实体映射,没有拓展,如果该字段放文件,就需要写对应的字段配置的表进行文件处理。
没有实体,不符合springboot的开发规范。
设计一,表头和表单数据存储json
前端json设计。
这是一个前端正常的table,json
理论上我们把表头和表数据存储后直接给前端使用就行。
但当字段扩展到人员,部门,选项时候。在返回数据时候,我们是需要处理的,由于字段是用户自定义的,名称不确定,在健值对取值时无法获取内容信息。
以后端能处理的表单表设计
其中表单的表头json设计如下:
"tableHeader": {
"tableSign": "123212341",
"tableName": "表单设计",
[
{
"rowName": "姓名",
"infoType": "text",
"selectSign": "",
"showFlag": "1",
"describe": "这是字段描述"
},
{
"rowName": "出生日期",
"infoType": "data",
"selectSign": "",
"showFlag": "1",
"describe": "这是字段描述"
},
{
"rowName": "毕业去向",
"infoType": "select",
"selectSign": "select_type",
"showFlag": "0",
"describe": "这是一个选项"
},
{
"rowName": "就业协议",
"infoType": "file",
"selectSign": "",
"showFlag": "0",
"describe": "这是字段描述"
},
{
"rowName": "处理人/部门",
"infoType": "json",
"selectSign": "",
"showFlag": "0",
"describe": "这是字段描述"
}
]
} ,
表单内容结构参考:
"tableInfo": [
{
"info": [
{
"rowName": "姓名",
"infoType": "text",
"selectSign": "",
"姓名": "测试阶段姓名",
"showFlag": "1",
"describe": "这是字段描述"
},
{
"rowName": "出生日期",
"infoType": "data",
"selectSign": "",
"rowInfo": "1996-06-07",
"showFlag": "1",
"describe": "这是字段描述"
},
{
"rowName": "毕业去向",
"tableSign": "123212341",
"infoType": "select",
"selectSign": "",
"rowInfo": "A",
"showFlag": "0",
"describe": "这是一个选项"
},
{
"rowName": "就业协议",
"infoType": "file",
"selectSign": "",
"rowInfo": {
"fileName": "文件名"
},
"showFlag": "0",
"describe": "这是字段描述",
"tableSign": "123212341",
},
{
"rowName": "处理人/部门",
"infoType": "json",
"rowInfo": {
"userName": "刘×",
"userId": "12345",
"deptId": "1908",
"deptName": "测试部门"
},
"selectSign": "",
"showFlag": "0",
"describe": "这是字段描述"
}],
"id":"9875730862563",
"keyWord":{
}
},
//这里是一条数据
{
"info": [
{
"rowName": "姓名",
"infoType": "text",
"selectSign": "",
"rowInfo": "测试阶段姓名1",
"showFlag": "1",
"describe": "这是字段描述"
},
{
"rowName": "出生日期",
"infoType": "data",
"selectSign": "",
"rowInfo": "1996-06-09",
"showFlag": "1",
"describe": "这是字段描述"
},
{
"rowName": "毕业去向",
"infoType": "select",
"selectSign": "",
"rowInfo": "B",
"showFlag": "0",
"describe": "这是一个选项"
},
{
"rowName": "就业协议",
"infoType": "file",
"selectSign": "",
"rowInfo": {
"fileName": "文件名1"
},
"showFlag": "0",
"describe": "这是字段描述"
},
{
"rowName": "处理人/部门",
"infoType": "json",
"rowInfo": {
"userName": "刘×X",
"userId": "12345",
"deptId": "1908",
"deptName": "测试部门"
},
"selectSign": "",
"showFlag": "0",
"describe": "这是字段描述"
}],
"id":"765354237634",
"tableSign": "123212341",
"keyWord":{
}
}
]
全局搜索
由于表头和表单都已json的数据存储,当设定表头的某一列不能显示内容,在这基础上做全局搜索不准确,会出现不必要的搜索结果,且很难排除不能显示的内容(不能显示意外着不能参与相关的全局搜索。)
像正常的数据库查询,eq,like,都只能大致的使用,某字段的in条件搜索就不能使用了。
搜索还附带一行数据的标签搜索,搜索后将又要做内容上的处理,以及前端展示的处理。存储json后,如果某个字段对于某人是不展示的,那搜索结果还需要做排除处理。
列引用
当一张表单的某一列引用另一张表单的数据,其中某一列的数据,当原表的数据改变,引用的数据也要改变。
引用后可修改,修改后将不再以引用内容改变而改变。以用户输入修改为准,后续也不会同原表同步。
难点,当我第一次引用后(10条)又添加了自己的数据(新的一条),等到第二次引用,是同样将原数据拷贝一份就好,还是找到对应的数据更新,同步后续的修改,是新增数据,是修改数据,还有不存在的数据是否删除。
前端没有现成的组
前端的table只支持字段明确的表格,换成上诉的json设计,前端的页面设计比较复杂。