Skip to content

Commit 8081b82

Browse files
committed
重命名control为formitem
1 parent 8da6fb9 commit 8081b82

File tree

10 files changed

+146
-99
lines changed

10 files changed

+146
-99
lines changed
Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
from pydantic import BaseModel
1515

1616
from .column import Column, SelectOption
17-
from .style import FormWidgetSize, ItemModel
17+
from .style import FormWidgetSize, Mode
1818

1919

20-
class ControlEnum(str, Enum):
20+
class FormItemEnum(str, Enum):
2121
form = "form" # 表单
2222
button_group_select = "button-group-select" # 按钮点选
2323
chained_select = "chained-select" # 链式下拉框
@@ -78,7 +78,7 @@ class AbstractControl(Column):
7878
pass
7979

8080

81-
class Control(AbstractControl):
81+
class FormItem(AbstractControl):
8282
"""
8383
用户form表单等写入
8484
"""
@@ -105,7 +105,7 @@ class Control(AbstractControl):
105105
className: Optional[str] # 表单最外层类名
106106
inputClassName: Optional[str] # 表单控制器类名
107107
labelClassName: Optional[str] # label 的类名
108-
mode: Optional[ItemModel]
108+
mode: Optional[Mode]
109109
size: Optional[FormWidgetSize]
110110

111111
class Config:
@@ -131,8 +131,8 @@ class ItemValidationError(BaseModel):
131131
pass
132132

133133

134-
class NumberItem(Control):
135-
type: ControlEnum = ControlEnum.input_number
134+
class NumberItem(FormItem):
135+
type: FormItemEnum = FormItemEnum.input_number
136136
min: Optional[int]
137137
max: Optional[int]
138138
precision: Optional[int] # 小数点后几位
@@ -142,12 +142,12 @@ class NumberItem(Control):
142142
big: Optional[bool]
143143

144144

145-
class NativeNumber(Control):
146-
type: ControlEnum = ControlEnum.native_number
145+
class NativeNumber(FormItem):
146+
type: FormItemEnum = FormItemEnum.native_number
147147

148148

149-
class SelectItem(Control):
150-
type: ControlEnum = ControlEnum.select
149+
class SelectItem(FormItem):
150+
type: FormItemEnum = FormItemEnum.select
151151
options: Optional[Union[List[str], List[int], List[SelectOption]]]
152152
source: Optional[str] # 通过数据源里面获取,也可以配置地址从远程获取,值格式为:options:[{label:..,value:...,}]
153153
# children: Optional[List[Union[SelectOption, str, int]]] # 这个在树结构在考虑
@@ -189,8 +189,8 @@ class SelectItemCanModifyItem(SelectItem):
189189
deleteApi: Optional[str] # 配置删除接口
190190

191191

192-
class ArrayItem(Control):
193-
type: ControlEnum = ControlEnum.array
192+
class ArrayItem(FormItem):
193+
type: FormItemEnum = FormItemEnum.array
194194
items: str = "text" # 这个到时候改为枚举
195195
addable: bool = True # 是否可新增
196196
removable: bool = True # 是否可删除
@@ -202,8 +202,8 @@ class ArrayItem(Control):
202202
maxLength: Optional[int] # 最长长度
203203

204204

205-
class DatetimeItem(Control):
206-
type: ControlEnum = ControlEnum.input_datetime
205+
class DatetimeItem(FormItem):
206+
type: FormItemEnum = FormItemEnum.input_datetime
207207
value: Optional[str]
208208
format: str = "YYYY-MM-DD HH:mm:ss" # 'X'为时间戳格式,参考文档:
209209
# https://baidu.gitee.io/amis/zh-CN/docs/components/form/datetime
@@ -219,8 +219,8 @@ class Config:
219219
orm_mode = True
220220

221221

222-
class DateItem(Control):
223-
type = ControlEnum.date
222+
class DateItem(FormItem):
223+
type = FormItemEnum.date
224224
value: Optional[str]
225225
format: str = "YYYY-MM-DD" # 格式请参考文档:https://baidu.gitee.io/amis/zh-CN/docs/components/form/date # 'X'为时间戳格式
226226
inputFormat: str = "YYYY-MM-DD" # 'X'为时间戳格式
@@ -232,44 +232,44 @@ class Config:
232232
orm_mode = True
233233

234234

235-
class SwitchItem(Control):
235+
class SwitchItem(FormItem):
236236
# Switch 开关
237-
type = ControlEnum.switch
237+
type = FormItemEnum.switch
238238
option: Optional[str]
239239
trueValue: Optional[int]
240240
falseValue: Optional[int]
241241
value: Optional[bool]
242242

243243

244-
class RichTextItem(Control):
244+
class RichTextItem(FormItem):
245245
# 目前富文本编辑器基于两个库:froala 和 tinymce,默认使用 tinymce。
246-
type = ControlEnum.input_rich_text
246+
type = FormItemEnum.input_rich_text
247247
body: Optional[Dict[str, Any]]
248248
options: Optional[Dict[str, Any]]
249249
receiver: Optional[str]
250250
videoReceiver: Optional[str]
251251
fileField: Optional[str]
252252

253253

254-
class TextItem(Control):
255-
type = ControlEnum.input_text
254+
class TextItem(FormItem):
255+
type = FormItemEnum.input_text
256256
body: Optional[Dict[str, Any]]
257257
trimContents: Optional[bool] # 是否去除首尾空白文本。
258258
# resetValue: str = "" # 清除后设置此配置项给定的值。
259259

260260

261-
class TextareaItem(Control):
261+
class TextareaItem(FormItem):
262262
# Textarea 多行文本输入框
263-
type = ControlEnum.textarea
263+
type = FormItemEnum.textarea
264264
body: Optional[Dict[str, Any]]
265265
minRows: Optional[int] # 最小行数
266266
maxRows: Optional[int] # 最大行数
267267
trimContents: Optional[bool] # 是否去除首尾空白文本。
268268

269269

270-
class TimeItem(Control):
270+
class TimeItem(FormItem):
271271
# Time 时间
272-
type = ControlEnum.time
272+
type = FormItemEnum.time
273273
body: Optional[Dict[str, Any]]
274274
value: Optional[datetime.time] # 默认值
275275
timeFormat: str = "HH:mm:ss" # 时间选择器值格式,更多格式类型请参考 moment
@@ -282,19 +282,19 @@ class Config:
282282
orm_mode = True
283283

284284

285-
class UUIDItem(Control):
285+
class UUIDItem(FormItem):
286286
# 随机生成一个 id,可以用于防止表单重复提交。
287-
type = ControlEnum.uuid
287+
type = FormItemEnum.uuid
288288
name: Optional[str] # type: ignore
289289
length: Optional[int]
290290

291291

292-
class CheckboxesItem(Control):
292+
class CheckboxesItem(FormItem):
293293
"""
294294
复选框
295295
"""
296296

297-
type = ControlEnum.checkboxes
297+
type = FormItemEnum.checkboxes
298298
optional: Optional[Union[List[Dict[str, str]]]] # 选项组
299299
source: str # 动态选项组
300300
delimeter: bool = False # 拼接符
@@ -323,9 +323,9 @@ class DynaticCheckboxesItem(CheckboxesItem):
323323
deleteApi: Optional[str] # 配置删除选项接口
324324

325325

326-
class TransferItem(Control):
326+
class TransferItem(FormItem):
327327
# Transfer 穿梭器
328-
type = ControlEnum.transfer
328+
type = FormItemEnum.transfer
329329
options: Optional[List[Union[dict, str]]] # 选项组
330330
source: Optional[str] # 动态选项组
331331
delimeter: Optional[str] # 拼接符
@@ -358,9 +358,9 @@ class PickerSchema(BaseModel):
358358
columns: Optional[List[Column]]
359359

360360

361-
class PickerItem(Control):
361+
class PickerItem(FormItem):
362362
# 列表选取,在功能上和 Select 类似,但它能显示更复杂的信息。默认和 Select 很像,但请看后面的 pickerSchema 设置。
363-
type = ControlEnum.picker
363+
type = FormItemEnum.picker
364364
options: Optional[List[Dict[str, str]]] # 动态选项组
365365
source: Optional[str]
366366
multiple: bool = False
@@ -375,14 +375,14 @@ class PickerItem(Control):
375375
embed: Optional[bool] # 是否使用内嵌模式
376376

377377

378-
class FileItem(Control):
379-
type = ControlEnum.input_file
378+
class FileItem(FormItem):
379+
type = FormItemEnum.input_file
380380
receiver: str
381381
asBase64: bool = True
382382

383383

384-
class ImageItem(Control):
385-
type = ControlEnum.input_image
384+
class ImageItem(FormItem):
385+
type = FormItemEnum.input_image
386386

387387
receiver: str
388388

fast_tmp/amis/forms/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import List, Optional
22

33
from fast_tmp.amis.base import BaseAmisModel
4-
from fast_tmp.amis.control import AbstractControl
4+
from fast_tmp.amis.formitem import AbstractControl
55

66

77
class Form(BaseAmisModel):

fast_tmp/amis/style.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class FormWidgetSize(
2121
xs = "xs" # 极小
2222

2323

24-
class ItemModel(str, Enum):
24+
class Mode(str, Enum):
2525
horizontal = "horizontal"
2626
inline = "inline"
2727
normal = "normal"

fast_tmp/amis/wizard.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from typing import List, Optional
2+
3+
from pydantic import BaseModel
4+
5+
from fast_tmp.amis.base import BaseAmisModel
6+
from fast_tmp.amis.formitem import FormItem
7+
8+
9+
class WizardStep(BaseModel):
10+
type: Optional[str] = None
11+
title: str # 步骤标题
12+
mode: Optional[str] # 展示默认,跟 Form 中的模式一样,选择: normal、horizontal或者inline。
13+
api: Optional[str] # 最后一步保存的接口。
14+
initApi: Optional[str] # 初始化数据接口
15+
initFetch: Optional[bool] # 初始是否拉取数据。
16+
initFetchOn: Optional[str] # 初始是否拉取数据,通过表达式来配置
17+
Body: List[FormItem] # 当前步骤的表单项集合,请参考 FormItem。
18+
19+
20+
class Wizard(BaseAmisModel):
21+
"""
22+
表单向导,能够配置多个步骤引导用户一步一步完成表单提交。
23+
https://aisuda.bce.baidu.com/amis/zh-CN/components/wizard
24+
"""
25+
26+
type = "wizard"
27+
mode: Optional[str] # horizontal 或者 vertical
28+
api: Optional[str] # 最后一步保存的接口。
29+
initApi: Optional[str] # 初始化数据接口
30+
initFetch: Optional[bool] # 初始是否拉取数据。
31+
initFetchOn: Optional[str] # 初始是否拉取数据,通过表达式来配置
32+
actionPrevLabel: Optional[str] # 上一步按钮文本
33+
actionNextLabel: Optional[str] # 下一步按钮文本
34+
actionNextSaveLabel: Optional[str] # 保存并下一步按钮文本
35+
actionFinishLabel: Optional[str] # 完成按钮文本
36+
className: Optional[str] # 外层 CSS 类名
37+
actionClassName: Optional[str] # 按钮 CSS 类名
38+
reload: Optional[str] # 操作完后刷新目标对象。请填写目标组件设置的 name 值,如果填写为 window 则让当前页面整体刷新。
39+
redirect: Optional[str] # 操作完后跳转。
40+
target: Optional[
41+
str
42+
] # 可以把数据提交给别的组件而不是自己保存。请填写目标组件设置的 name 值,如果填写为 window 则把数据同步到地址栏上,同时依赖这些数据的组件会自动重新刷新。
43+
steps: List[WizardStep] # Array < step > 数组,配置步骤信息
44+
startStep: Optional[
45+
int
46+
] # 起始默认值,从第几步开始。可支持模版,但是只有在组件创建时渲染模版并设置当前步数,在之后组件被刷新时,当前 step 不会根据 startStep 改变

fast_tmp/site/__init__.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,18 @@ def queryset_filter(self, request: Request, queryset: QuerySet):
8484
return queryset
8585

8686
def get_create_fields(self) -> Dict[str, BaseAdminControl]:
87-
return {i: self.get_control_field(i) for i in self.create_fields}
87+
return {i: self.get_formitem_field(i) for i in self.create_fields}
8888

8989
def get_update_fields(self) -> Dict[str, BaseAdminControl]:
90-
return {i: self.get_control_field(i) for i in self.update_fields}
90+
return {i: self.get_formitem_field(i) for i in self.update_fields}
9191

9292
def get_update_fields_with_pk(self) -> Dict[str, BaseAdminControl]:
9393
ret = self.get_update_fields()
94-
ret["pk"] = self.get_control_field("pk")
94+
ret["pk"] = self.get_formitem_field("pk")
9595
return ret
9696

9797
def get_create_dialogation_button(self, request: Request) -> List[_Action]:
98-
controls = self.get_create_fields()
98+
formitems = self.get_create_fields()
9999

100100
return [
101101
DialogAction(
@@ -106,7 +106,7 @@ def get_create_dialogation_button(self, request: Request) -> List[_Action]:
106106
name=f"新增{self.name}",
107107
title=f"新增{self.name}",
108108
# fixme 你的field字段传实例了吗?
109-
body=[(i.get_control(request)) for i in controls.values()],
109+
body=[(i.get_formItem(request)) for i in formitems.values()],
110110
api=f"post:{self.prefix}/create",
111111
),
112112
),
@@ -132,7 +132,7 @@ def get_del_one_button(self):
132132
)
133133

134134
def get_update_one_button(self, request: Request):
135-
body = [i.get_control(request) for i in self.get_update_fields().values()]
135+
body = [i.get_formItem(request) for i in self.get_update_fields().values()]
136136
return DialogAction(
137137
label="修改",
138138
level=ButtonLevelEnum.link,
@@ -188,14 +188,14 @@ def get_crud(self, request: Request, codenames: List[str]):
188188
return body
189189

190190
def get_list_distplay(self) -> Dict[str, BaseAdminControl]:
191-
return {i: self.get_control_field(i) for i in self.list_display}
191+
return {i: self.get_formitem_field(i) for i in self.list_display}
192192

193193
def get_list_display_with_pk(self) -> Dict[str, BaseAdminControl]:
194194
"""
195195
去除多对多字段
196196
"""
197197
ret = self.get_list_distplay()
198-
ret["pk"] = self.get_control_field("pk")
198+
ret["pk"] = self.get_formitem_field("pk")
199199
return ret
200200

201201
async def get_app_page(self, request: Request) -> Page:
@@ -206,7 +206,7 @@ async def update(self, request: Request, pk: str, data: Dict[str, Any]) -> Model
206206
obj = await self.get_instance(request, pk)
207207
err_fields = {}
208208
for field_name in self.update_fields:
209-
control = self.get_control_field(field_name)
209+
control = self.get_formitem_field(field_name)
210210
try:
211211
await control.set_value(request, obj, data[field_name])
212212
except ValidationError as e:
@@ -227,7 +227,7 @@ async def patch(self, request: Request, pk: str, data: Dict[str, Any]) -> Model:
227227
obj = await self.get_instance(request, pk)
228228
err_fields = {}
229229
for field_name in self.inline:
230-
control = self.get_control_field(field_name)
230+
control = self.get_formitem_field(field_name)
231231
try:
232232
await control.set_value(request, obj, data[field_name])
233233
except ValidationError as e:
@@ -360,7 +360,7 @@ def make_fields(self):
360360
continue
361361
self.fields[field] = field_(name=field, field=field_type, prefix=self.prefix)
362362

363-
def get_control_field(self, name: str) -> BaseAdminControl:
363+
def get_formitem_field(self, name: str) -> BaseAdminControl:
364364
ret = self.fields.get(name)
365365
if ret is None:
366366
raise NotFoundError("can not found field:" + name)

0 commit comments

Comments
 (0)