houzhongjian
2024-08-08 820397e43a0b64d35c6d31d2a55475061438593b
提交 | 用户 | 时间
820397 1 const selectRule = [
H 2   {
3     type: 'select',
4     field: 'selectType',
5     title: '选择器类型',
6     value: 'select',
7     options: [
8       { label: '下拉框', value: 'select' },
9       { label: '单选框', value: 'radio' },
10       { label: '多选框', value: 'checkbox' }
11     ],
12     // 参考 https://www.form-create.com/v3/guide/control 组件联动,单选框和多选框不需要多选属性
13     control: [
14       {
15         value: 'select',
16         condition: '==',
17         method: 'hidden',
18         rule: [
19           'multiple',
20           'clearable',
21           'collapseTags',
22           'multipleLimit',
23           'allowCreate',
24           'filterable',
25           'noMatchText',
26           'remote',
27           'remoteMethod',
28           'reserveKeyword',
29           'defaultFirstOption',
30           'automaticDropdown'
31         ]
32       }
33     ]
34   },
35   {
36     type: 'switch',
37     field: 'filterable',
38     title: '是否可搜索'
39   },
40   { type: 'switch', field: 'multiple', title: '是否多选' },
41   {
42     type: 'switch',
43     field: 'disabled',
44     title: '是否禁用'
45   },
46   { type: 'switch', field: 'clearable', title: '是否可以清空选项' },
47   {
48     type: 'switch',
49     field: 'collapseTags',
50     title: '多选时是否将选中值按文字的形式展示'
51   },
52   {
53     type: 'inputNumber',
54     field: 'multipleLimit',
55     title: '多选时用户最多可以选择的项目数,为 0 则不限制',
56     props: { min: 0 }
57   },
58   {
59     type: 'input',
60     field: 'autocomplete',
61     title: 'autocomplete 属性'
62   },
63   { type: 'input', field: 'placeholder', title: '占位符' },
64   { type: 'switch', field: 'allowCreate', title: '是否允许用户创建新条目' },
65   {
66     type: 'input',
67     field: 'noMatchText',
68     title: '搜索条件无匹配时显示的文字'
69   },
70   { type: 'input', field: 'noDataText', title: '选项为空时显示的文字' },
71   {
72     type: 'switch',
73     field: 'reserveKeyword',
74     title: '多选且可搜索时,是否在选中一个选项后保留当前的搜索关键词'
75   },
76   {
77     type: 'switch',
78     field: 'defaultFirstOption',
79     title: '在输入框按下回车,选择第一个匹配项'
80   },
81   {
82     type: 'switch',
83     field: 'popperAppendToBody',
84     title: '是否将弹出框插入至 body 元素',
85     value: true
86   },
87   {
88     type: 'switch',
89     field: 'automaticDropdown',
90     title: '对于不可搜索的 Select,是否在输入框获得焦点后自动弹出选项菜单'
91   }
92 ]
93
94 const apiSelectRule = [
95   {
96     type: 'input',
97     field: 'url',
98     title: 'url 地址',
99     props: {
100       placeholder: '/system/user/simple-list'
101     }
102   },
103   {
104     type: 'select',
105     field: 'method',
106     title: '请求类型',
107     value: 'GET',
108     options: [
109       { label: 'GET', value: 'GET' },
110       { label: 'POST', value: 'POST' }
111     ],
112     control: [
113       {
114         value: 'GET',
115         condition: '!=',
116         method: 'hidden',
117         rule: [
118           {
119             type: 'input',
120             field: 'data',
121             title: '请求参数 JSON 格式',
122             props: {
123               autosize: true,
124               type: 'textarea',
125               placeholder: '{"type": 1}'
126             }
127           }
128         ]
129       }
130     ]
131   },
132   {
133     type: 'input',
134     field: 'labelField',
135     title: 'label 属性',
136     info: '可以使用 el 表达式:${属性},来实现复杂数据组合。如:${nickname}-${id}',
137     props: {
138       placeholder: 'nickname'
139     }
140   },
141   {
142     type: 'input',
143     field: 'valueField',
144     title: 'value 属性',
145     info: '可以使用 el 表达式:${属性},来实现复杂数据组合。如:${nickname}-${id}',
146     props: {
147       placeholder: 'id'
148     }
149   },
150   {
151     type: 'input',
152     field: 'parseFunc',
153     title: '选项解析函数',
154     info: `data 为接口返回值,需要写一个匿名函数解析返回值为选择器 options 列表
155     (data: any)=>{ label: string; value: any }[]`,
156     props: {
157       autosize: true,
158       rows: { minRows: 2, maxRows: 6 },
159       type: 'textarea',
160       placeholder: `
161         function (data) {
162             console.log(data)
163             return data.list.map(item=> ({label: item.nickname,value: item.id}))
164         }`
165     }
166   },
167   {
168     type: 'switch',
169     field: 'remote',
170     info: '是否可搜索',
171     title: '其中的选项是否从服务器远程加载'
172   },
173   {
174     type: 'input',
175     field: 'remoteField',
176     title: '请求参数',
177     info: '远程请求时请求携带的参数名称,如:name'
178   }
179 ]
180
181 export { selectRule, apiSelectRule }