# 表单字段显示优化

在前面的步骤中,我们只创建了表单,没有给表单添加字段。这种情况下,系统显示模型的全部字段,标题是字段名(例如 contactInfo),控件按字段类型选择默认控件,例如字符类型使用单行输入框,数字类型使用数字输入框。

本章为表单添加表单字段(DynamicFormField),设置中文显示名称,并对以下字段定制显示控件:

模型 字段 表单 显示控件(displayType)
Customers contactInfo 新建、编辑 长文本(text)
SalesOpportunities expectedAmount 列表、新建、编辑 货币(currency)

注意

一个表单只要定义了任意一个表单字段,就只显示已定义的字段,未定义的字段不再显示。所以为某个表单添加字段时,要把需要显示的字段都加上。

# 在界面上添加表单字段

打开「开发配置 > 表单 > 表单字段」,点击「创建」,为新建客户表单添加联系方式字段:

字段 值
所属表单 Create Customers
字段类型 Static field(模型中的字段;表单临时参数使用 Transient field)
字段名称 contactInfo
显示名称 联系方式
帮助信息 手机号、座机或邮箱,可填写多个
字段显示类型 text
是否可为空 关闭
显示顺序 20
创建表单字段

「字段显示类型」对应 displayType,留空时按字段类型使用默认控件。窗口中的「扩展信息」编辑框实际高度约为浏览器可视区域高度的 70%,上图为了便于阅读把它调矮了。「Decides」(联动刷新的字段)未翻译是当前版本的界面问题,本教程不需要填写。

# 用 CSV 批量添加表单字段

三个客户表单、三个销售机会表单一共有几十个字段,逐个在界面上添加比较繁琐,可以用 CSV 一次导入。在 codes/data/csv 下新建 DynamicFormField_crm.csv:

form.name(*),fieldName(*),displaySequence,label,helpText,fieldType,nullable,displayType
;; CRM 教程:客户表单字段
List of Customers,name,10,客户姓名,,STATIC_FIELD,N,
List of Customers,contactInfo,20,联系方式,,STATIC_FIELD,N,
List of Customers,companyName,30,公司名称,,STATIC_FIELD,Y,
List of Customers,position,40,职位,,STATIC_FIELD,Y,
List of Customers,group,50,客户分组,,STATIC_FIELD,Y,
List of Customers,birthday,60,生日,,STATIC_FIELD,Y,
Create Customers,name,10,客户姓名,,STATIC_FIELD,N,
Create Customers,contactInfo,20,联系方式,手机号、座机或邮箱,可填写多个,STATIC_FIELD,N,text
Create Customers,companyName,30,公司名称,,STATIC_FIELD,Y,
Create Customers,position,40,职位,,STATIC_FIELD,Y,
Create Customers,group,50,客户分组,,STATIC_FIELD,Y,
Create Customers,birthday,60,生日,,STATIC_FIELD,Y,
Update Customers,name,10,客户姓名,,STATIC_FIELD,N,
Update Customers,contactInfo,20,联系方式,手机号、座机或邮箱,可填写多个,STATIC_FIELD,N,text
Update Customers,companyName,30,公司名称,,STATIC_FIELD,Y,
Update Customers,position,40,职位,,STATIC_FIELD,Y,
Update Customers,group,50,客户分组,,STATIC_FIELD,Y,
Update Customers,birthday,60,生日,,STATIC_FIELD,Y,
;; CRM 教程:销售机会表单字段
List of SalesOpportunities,name,10,机会名称,,STATIC_FIELD,N,
List of SalesOpportunities,customer,20,客户,,STATIC_FIELD,N,
List of SalesOpportunities,stage,30,机会阶段,,STATIC_FIELD,N,
List of SalesOpportunities,expectedAmount,40,预期金额,,STATIC_FIELD,N,currency
List of SalesOpportunities,expectedCloseDate,50,预计关闭日期,,STATIC_FIELD,N,
List of SalesOpportunities,interactionRecords,60,互动记录,,STATIC_FIELD,Y,
List of SalesOpportunities,tasks,70,任务,,STATIC_FIELD,Y,
Create SalesOpportunities,name,10,机会名称,,STATIC_FIELD,N,
Create SalesOpportunities,customer,20,客户,,STATIC_FIELD,N,
Create SalesOpportunities,stage,30,机会阶段,,STATIC_FIELD,N,
Create SalesOpportunities,expectedAmount,40,预期金额,,STATIC_FIELD,N,currency
Create SalesOpportunities,expectedCloseDate,50,预计关闭日期,,STATIC_FIELD,N,
Create SalesOpportunities,interactionRecords,60,互动记录,,STATIC_FIELD,Y,
Create SalesOpportunities,tasks,70,任务,,STATIC_FIELD,Y,
Update SalesOpportunities,name,10,机会名称,,STATIC_FIELD,N,
Update SalesOpportunities,customer,20,客户,,STATIC_FIELD,N,
Update SalesOpportunities,stage,30,机会阶段,,STATIC_FIELD,N,
Update SalesOpportunities,expectedAmount,40,预期金额,,STATIC_FIELD,N,currency
Update SalesOpportunities,expectedCloseDate,50,预计关闭日期,,STATIC_FIELD,N,
Update SalesOpportunities,interactionRecords,60,互动记录,,STATIC_FIELD,Y,
Update SalesOpportunities,tasks,70,任务,,STATIC_FIELD,Y,
;; CRM 教程:子表(互动记录、任务)使用各自的 LIST 表单显示列
List of InteractionRecords,name,10,主题,,STATIC_FIELD,N,
List of InteractionRecords,interactionType,20,互动类型,,STATIC_FIELD,N,
List of InteractionRecords,interactionDate,30,互动日期,,STATIC_FIELD,N,
List of InteractionRecords,notes,40,备注,,STATIC_FIELD,Y,
List of Tasks,name,10,任务名称,,STATIC_FIELD,N,
List of Tasks,description,20,任务描述,,STATIC_FIELD,N,
List of Tasks,dueDate,30,截止日期,,STATIC_FIELD,N,
List of Tasks,status,40,状态,,STATIC_FIELD,N,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  • 表单字段按 form.name(*) 和 fieldName(*) 两列查找。上一节在界面上创建的「Create Customers / contactInfo」会被这一行更新,不会重复创建。
  • fieldType 为 STATIC_FIELD 表示模型中的字段。
  • 销售机会表单中的子表列标题取自子对象的 LIST 表单,所以最后为 List of InteractionRecords 和 List of Tasks 也设置了中文名称。

保存后重启后端服务。

# 效果

编辑客户时,联系方式变成了多行文本框,所有字段都显示中文名称:

优化后的编辑客户表单

销售机会列表中,预期金额按货币格式显示:

优化后的销售机会列表

编辑销售机会时,子表的列标题也变成了中文:

优化后的编辑销售机会表单

注意

1.0.0-beta18 中 currency 控件固定使用美元符号 $ 作为前缀,编辑状态下输入框较窄,金额较大时显示不全(例如上图中 1,280,000 只显示出 $ 1,280)。如果需要人民币显示,可以暂时使用默认的数字控件(displayType 留空)。

系统默认支持的 displayType 列表请参考下述列表:

key 控件
id 标识符
string 单行文本
text 多行文本
password 密码
integer、int、long 整数
decimal 小数
percentage 百分比
currency 货币
date 日期
dateRange 日期范围
datetime 日期时间
zonedDatetime 带时区的日期时间
boolean 开关
enum 枚举下拉
httpMethod HTTP 方法(枚举下拉)
valueSelect 值选择
link 链接,可用 extInfo 的 link 设置显示文字和打开方式
progress 进度条
icon 图标
treeSelect 树选择
roles 角色
code 代码编辑器
json JSON 编辑器
markdown Markdown 编辑器
stacktrace 堆栈信息
functionEditor 函数编辑器
file 单个文件
fileList 多个文件
image 图片
video 视频
object 单个对象选择
objects 多个对象选择
genericObject、genericObjects 任意类型对象的只读显示
array 一对多关联对象列表
subTable 子表,见 高级字段控件
relativeSubTable 按关联路径显示的子表,见 高级字段控件
authentication 用户信息(如创建人)的只读显示
popOverSteps 步骤状态
lineChart 折线图
tableChart 表格图

至此,一个包含客户、销售机会、互动记录和任务的简易 CRM 就搭建完成了。

如果要把这套 CRM 做成插件、在其他环境中一次性装好,还需要把在界面上创建的表单、菜单和动作绑定也写成 CSV(DynamicForm.csv 中补上 label、objectType.shortName(*)、type.name(*) 等列,以及 DynamicMenu.csv、DynamicActionDynamicForm.csv)。本教程中的 DynamicForm_crm.csv 只更新已有表单的访问权限,在没有这些表单的新环境中会导入失败。各文件的列说明见 CSV 导入模板。

# 进一步阅读

Last Updated: 2026/9/24 14:27:35