import type { Dict, IComponentPrototype } from "@xirang/studio-helpers"; import { Cascader } from "./cascader"; import { Checkbox, CheckboxGroup } from "./checkbox"; import { DatePicker, DateRangePicker } from "./date-picker"; import { Input, Password, TextArea } from "./input"; import { InputNumber } from "./input-number"; import { RadioGroup } from "./radio"; import { Select } from "./select"; import { Switch } from "./switch"; import { TimePicker, TimeRangePicker } from "./time-picker"; import { TreeSelect } from "./tree-select"; import { Upload } from "./upload"; import { omitProps } from "../utils"; import { StylePrototypes } from "./common"; const componentMap: Dict = { Input, Password, TextArea, InputNumber, Switch, RadioGroup, Checkbox, CheckboxGroup, Select, Cascader, TreeSelect, DatePicker, DateRangePicker, RangePicker: DateRangePicker, TimePicker, TimeRangePicker, UploadImage: Upload, UploadFile: Upload, }; export const Form: IComponentPrototype = { name: "Form", title: "基本表单", exportType: "namedExport", icon: "icon-biaodan", type: "element", package: "@xirang/design-antd", help: "最基本的表单组件,可以创建一个轻量级表单。", hasChildren: true, initChildren: '', relatedImports: ["FormItem", "FormFooter", "Button"], childrenName: ["FormItem", "Fieldset", "FormFooter"], props: [ ...StylePrototypes, { name: "layout", title: "表单布局", setter: "choiceSetter", setterProps: { options: [ { label: "水平布局", value: "horizontal" }, { label: "垂直布局", value: "vertical" }, { label: "行内布局", value: "inline" }, ], }, }, { name: "labelCol", title: "标签占据格子个数", setter: "numberSetter", setterProps: { min: 0, max: 24, }, initValue: 4, }, { name: "wrapperCol", title: "控件占据格子个数", setter: "numberSetter", setterProps: { min: 0, max: 24, }, initValue: 16, }, { name: "colon", title: "是否显示标签后的冒号", setter: "boolSetter", }, { name: "labelAlign", title: "标签文本对齐", setter: "choiceSetter", setterProps: { options: [ { label: "左侧", value: "left" }, { label: "右侧", value: "right" }, ], }, }, { name: "labelWrap", title: "标签文本换行方式", setter: "boolSetter", }, { name: "initialValues", title: "表单默认值", setter: "expressionSetter", }, { name: "isPreview", title: "是否为预览态", setter: "boolSetter", }, { name: "onFinish", title: "提交表单成功回调", setter: "eventSetter", tip: "回调格式:(values) => void", }, { name: "onFinishFailed", title: "提交表单失败回调", setter: "eventSetter", tip: "回调格式:({ values, errorFields, outOfDate }) => void", }, { name: "onFieldsChange", title: "表单字段变化回调", setter: "eventSetter", tip: "回调格式:(changedFields, allFields) => void", }, { name: "onValuesChange", title: "表单字段值变化回调", setter: "eventSetter", tip: "回调格式:(changedValues, allValues) => void", }, ], }; export const Fieldset: IComponentPrototype = { name: "Fieldset", title: "表单组", exportType: "namedExport", icon: "icon-biaodan", type: "element", package: "@xirang/design-antd", hasChildren: true, initChildren: '', relatedImports: ["FormItem"], props: [ ...StylePrototypes, { name: "title", title: "分组标题", setter: "textSetter", }, { name: "columns", title: "列数配置", setter: "numberSetter", }, ], }; export const FormItem: IComponentPrototype = { name: "FormItem", title: "基本表单项", exportType: "namedExport", icon: "icon-biaodan", type: "element", package: "@xirang/design-antd", help: "一个基本的表单项", hasChildren: true, props: [ ...StylePrototypes, { name: "component", title: "控件类型", setter: "pickerSetter", initValue: "Input", options: [ { label: "文本输入", value: "Input" }, { label: "数字输入", value: "InputNumber" }, { label: "密码", value: "Password" }, { label: "多行文本", value: "TextArea" }, // { label: '带自动提示的输入框', value: 'AutoComplete' }, { label: "开关", value: "Switch" }, { label: "单选框", value: "RadioGroup" }, { label: "复选框", value: "Checkbox" }, { label: "复选框组", value: "CheckboxGroup" }, // { label: '颜色选择', value: 'ColorPicker' }, { label: "下拉选择", value: "Select" }, // { label: '级联选择', value: 'Cascader' }, { label: "树形选择", value: "TreeSelect" }, // { label: '穿梭选择', value: 'Transfer' }, { label: "日期选择", value: "DatePicker" }, { label: "时间选择", value: "TimePicker" }, // { label: '日期时间选择', value: 'DateTimePicker' }, { label: "日期范围选择", value: "RangePicker" }, { label: "时间范围选择", value: "TimeRangePicker" }, // { label: '月选择', value: 'MonthPicker' }, // { label: '周选择', value: 'WeekPicker' }, // { label: '星级评分', value: 'Rate' }, // { label: '区间选择', value: 'Slider' }, // { label: '图片上传', value: 'UploadImage' }, // { label: '文件上传', value: 'UploadFile' }, ], }, { name: "name", title: "标识名", setter: "textSetter", }, { name: "label", title: "标签", setter: "textSetter", initValue: "表单项", }, { name: "tip", title: "提示信息", setter: "textSetter", }, { name: "extra", title: "附加内容", setter: "jsxSetter", }, { name: "required", title: "必填", setter: "boolSetter", }, { name: "initialValue", title: "默认值", setter: "textSetter", tip: "设置子元素默认值,如果与 Form 的 initialValues 冲突则以 Form 为准", }, { name: "isPreview", title: "是否为预览态", setter: "boolSetter", }, { name: "rules", title: "校验规则", tip: "校验规则,设置字段的校验逻辑。", setter: "expressionSetter", }, { name: "options", title: "数据列表", setter: "optionSetter", getVisible: (form) => { const value = form.getValue("component"); return ["CheckboxGroup", "RadioGroup", "Select"].includes(value); }, }, { name: "componentProps", title: "子组件属性", getProp(form) { const type = form.getValue("component"); const proto = { ...componentMap[type] }; const props = omitProps(proto.props, [ "placeholder", "options", "onChange", "defaultValue", "value", ]); return { title: `${proto.title}属性`, props, }; }, disableVariableSetter: true, }, ], }; export const FormFooter: IComponentPrototype = { name: "FormFooter", title: "基本表单页脚", exportType: "namedExport", icon: "icon-biaodan", type: "element", package: "@xirang/design-antd", hasChildren: true, initChildren: '', relatedImports: ["Button"], props: [...StylePrototypes], };