项目整理
思路整理: 所有皆可以通过配置的形式来实现,
表单
formList = [
{
type: 'Input',
label: '标签',
prop: 'inputfdjif'
},
{
type: 'other',
label: 'ejfwi',
prop: 'ejfwi'
},
{
type: 'Autocomplete',
label: '自动填写',
prop: 'name',
hidden: () => {
return this.formData['select'] == '22'
},
list: [
{ name: '231', id: '1' },
{ name: '232', id: '2' },
{ name: '233', id: '3' },
{ name: '234', id: '4' }
],
bind: {
clearable: false,
onSelect: this.handleSelect
}
},
{
type: '自定义',
label: '级联选择',
prop: 'cascader',
list: [
{
value: 'guide',
label: 'Guide',
children: [
{
value: 'disciplines',
label: 'Disciplines',
children: [
{
value: 'consistency',
label: 'Consistency'
},
{
value: 'feedback',
label: 'Feedback'
},
{
value: 'efficiency',
label: 'Efficiency'
},
{
value: 'controllability',
label: 'Controllability'
}
]
}
]
}
],
bind: {
clearable: true,
onClose: this.handleSelect
}
},
{
type: 'Checkbox',
label: '复选框',
prop: 'fewf',
list: [
{ name: '21', id: '11', disabled: true },
{ name: '22', id: '22', disabled: false },
{ name: '23', id: '33', disabled: true },
{ name: '24', id: '44', disabled: false }
],
bind: {
clearable: true,
onChange: this.handleSelect
}
},
{
type: 'Select',
label: '单选框',
prop: 'select',
list: [
{ name: '21', id: '11', disabled: true },
{ name: '22', id: '22', disabled: false },
{ name: '23', id: '33', disabled: true },
{ name: '24', id: '44', disabled: false }
],
bind: {
clearable: true,
onChange: this.handleSelect
}
},
{
type: 'Button',
label: '按钮',
prop: 'btn',
bind: {
onClick: this.handleClick,
text: '111'
}
}
]
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
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
发请求
this.$http({
api: getSelectDictListBatch,
form: { c: 1111 },
beforeSubmit: (form) => {
form.zdl = true
form.test = []
},
handleAction: (res, form) => {}
})
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
创建页面规范
一个文件夹, 里面有 mixins 文件夹用于存放 mixin 数据, data 里面的文件在用作 mixin 的时候前缀带名称
列表
<base-list :listApi="listApi" :formList="dataFormList" :column="dataColumn"></base-list>
listApi: getListApi,
dataFormList: [
{
type: "Input",
label: "角色名称",
prop: "inputfdjif",
// span: 12,
},
{
type: "Input",
label: "权限字符",
prop: "inputfdji",
},
{
type: "Select",
label: "状态",
prop: "name",
list: [
{ name: "是", id: "1" },
{ name: "否", id: "2" },
],
},
],
dataColumn: [
{
prop: "a",
label: "A",
},
{
prop: "b",
label: "B",
childrenArr: [
{
prop: "111",
label: "111",
},
{
prop: "222",
label: "222",
},
],
},
{
prop: "c",
label: "c",
},
],
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
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
导航 nav
<base-nav>
<BaseForm ref="base-form" :formList="dataFormList" :formData="dataFormData"> </BaseForm>
</base-nav>
1
2
3
2
3
图标
;<base-icon id="财务管理_bread" width="40" height="40"></base-icon>
import '@/icons/财务管理_bread.svg'
1
2
3
2
3
vue3 搭建项目
把所有的配置全部抽离出来, 更加灵活 base-form 需要考虑的功能, 对于里面的
- 自定义 custom
- 插槽的方式 slot,
- 具体的 ui 组件 input
所需要的技术
vue3 + ts + pinia + elementui-plus + custom-css + sass + prettier
组件
- BaseForm 表单组件
- 对于不同的标签通过 component 进行渲染出来
- 对于标签里面的其他元素, 先预设起, 通过 vif 来控制
- 对于有嵌套的情况, 循环 children 进行渲染, 提交的时候要进行子组件的验证, children 里面的结构和外面的要保持一致
- 对于根据条件控制显示和隐藏的情况, 监听配置数组, 配置数组发生改变之后, 来重新渲染, 要注意 form-item 的 key 必须要保持唯一, 且不随数组的顺序发生改变
- BaseTable 表格组件
- BaseList 列表组件
- BaseIcon svg 图标组件