机器学习生成CRM表单 - 4.生成前端代码
Contents
上文我们已经识别出了组件,组件文案。接下来就可以通过这些数据生成前端代码了。
这里沿用阿里DSL的格式,先将识别内容生成通用scheme,再把scheme根据不同的DSL转换为相应语言、框架的代码。这样做一方面提高通用性,另一方面,可以把scheme复制到编辑器中进行可视化编辑。
编辑器demo:
以这个图片为例
表单项 自动生成 英文驼峰命名
根据元素前面的文字,调用有道翻译的api,翻译出英语,然后再转为驼峰法命名。
1 | # 翻译 获取英文驼峰命名 |
结果打印如下
1 | 表单项: 活动名称 ———— 驼峰命名:theNameOfTheEvent |
python数据导出
1 | # 将预测结果传入之前的数组 |
结果1
[[[[663,170],[200,170],[200,123],[663,123]],"请输入活动名称","* 活动名称 :","Input"],[[[197,497],[197,449],[666,449],[666,497]],"必填","*图片跳转链接","Input"],[[[201,79],[201,31],[660,31],[660,79]],"请输入基金代码","* 基金代码 :","Input"],[[[197,427],[197,380],[665,380],[665,427]],"非必填,不配置不展示","可配置标题","Input"],[[[197,358],[197,307],[666,307],[666,358]],"","位置","Select"],[[[663,266],[200,266],[200,219],[663,219]],"请输入图片链接","* 图片链接 :","Input"]]
每个数组代表一个组件,里面有组件的位置,文案等
后续都放在js中处理,方便些。
生成schema
按照schema格式生成
1 | const path = require('path'); |
生成的scheme如下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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114{
"componentName": "Page",
"props": {},
"children": [
{
"componentName": "Form",
"props": {},
"children": [
{
"componentName": "FormItem",
"props": {
"label": "* 基金代码 :",
"name": "",
"style": {}
},
"children": [
{
"componentName": "Input",
"props": {
"placeholder": "请输入基金代码",
"hasBorder": true
}
}
]
},
{
"componentName": "FormItem",
"props": {
"label": "* 活动名称 :",
"name": "",
"style": {}
},
"children": [
{
"componentName": "Input",
"props": {
"placeholder": "请输入活动名称",
"hasBorder": true
}
}
]
},
{
"componentName": "FormItem",
"props": {
"label": "* 图片链接 :",
"name": "",
"style": {}
},
"children": [
{
"componentName": "Input",
"props": {
"placeholder": "请输入图片链接",
"hasBorder": true
}
}
]
},
{
"componentName": "FormItem",
"props": {
"label": "位置",
"name": "",
"style": {}
},
"children": [
{
"componentName": "Select",
"props": {
"placeholder": "",
"hasBorder": true
}
}
]
},
{
"componentName": "FormItem",
"props": {
"label": "可配置标题",
"name": "",
"style": {}
},
"children": [
{
"componentName": "Input",
"props": {
"placeholder": "非必填,不配置不展示",
"hasBorder": true
}
}
]
},
{
"componentName": "FormItem",
"props": {
"label": "*图片跳转链接",
"name": "",
"style": {}
},
"children": [
{
"componentName": "Input",
"props": {
"placeholder": "必填",
"hasBorder": true
}
}
]
}
]
}
]
}
随后调用scheme转前端代码的DSL,我们使用的是antd
, 目前还没有好用的DSL,所以在Fusion Design上二次开发,最后生成代码如下
1 | ; |
原始原型图如下
智能生成页面渲染如下