iter(g135): 表单支持多列布局
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { h } from '@ui-arch/frame';
|
||||
import { button } from './button.js';
|
||||
import { grid } from './grid.js';
|
||||
import type { FormItemHandle, FormItemProps, FormProps, FormRule } from './types.js';
|
||||
|
||||
/*** 执行规则的同步部分(required / min / max / pattern);null 通过,字符串为错误消息 ***/
|
||||
@@ -124,11 +125,13 @@ export function form(props: FormProps, items: FormItemHandle[]): HTMLElement {
|
||||
props.onSubmit?.();
|
||||
};
|
||||
|
||||
const fields = items.map((i) => i.el); // 字段节点:单列直接铺,多列交给栅格
|
||||
const board = props.columns && props.columns > 1 ? grid({ columns: props.columns, gutter: 'lg' }, ...fields) : fields; // 多列布局复用 grid
|
||||
const el = h(
|
||||
'form',
|
||||
{ class: props.layout === 'horizontal' ? 'ua-form ua-form-h' : 'ua-form' },
|
||||
props.errorSummary === false ? null : summary, // 汇总条:关掉时连节点都不插
|
||||
...items.map((i) => i.el),
|
||||
board, // 多列时是一层 grid,单列时是字段数组(h 自动扁平化)
|
||||
actions,
|
||||
);
|
||||
el.addEventListener('submit', (e) => {
|
||||
|
||||
@@ -400,6 +400,7 @@ export interface FormItemHandle {
|
||||
/*** 表单容器入参 ***/
|
||||
export interface FormProps {
|
||||
layout?: 'vertical' | 'horizontal'; // 布局方向;缺省 vertical
|
||||
columns?: 1 | 2 | 3; // 字段列数:>1 时字段走栅格铺列(窄屏自动单列);缺省 1
|
||||
submitText?: string; // 提交按钮文案;缺省「提交」
|
||||
resetText?: string; // 重置按钮文案;缺省不渲染重置按钮
|
||||
onSubmit?: () => void; // 全部字段校验通过后的提交回调
|
||||
|
||||
@@ -1643,6 +1643,12 @@
|
||||
"d": "布局方向;缺省 vertical(horizontal 为标签左置)",
|
||||
"df": "vertical"
|
||||
},
|
||||
{
|
||||
"n": "columns",
|
||||
"t": "1 | 2 | 3",
|
||||
"d": "字段列数:>1 时字段走栅格铺列(沿用 grid 的窄屏单列),按钮区始终整行;缺省 1",
|
||||
"df": "1"
|
||||
},
|
||||
{
|
||||
"n": "submitText",
|
||||
"t": "string",
|
||||
@@ -1722,7 +1728,8 @@
|
||||
"单行输入框内按 Enter 等同点击提交(textarea 内仍是换行);提交按钮为 type=\"submit\",不会与点击回调重复触发",
|
||||
"rules.validator 返回 Promise 即为异步规则(如「邀请码是否已被使用」远程校验):提交时逐项 await,校验期间提交按钮禁用,结论按轮次取舍避免乱序覆盖",
|
||||
"formItem 返回 { el, validate, validateAsync } 句柄:validate 只跑同步规则(供 blur/input 即时反馈),validateAsync 逐条 await 供 form 聚合提交",
|
||||
"需要给字段加格式说明就传 hint:平时显示在控件下方,校验失败时自动让位给错误文案,同一位置不堆两行"
|
||||
"需要给字段加格式说明就传 hint:平时显示在控件下方,校验失败时自动让位给错误文案,同一位置不堆两行",
|
||||
"字段多的编辑页传 columns: 2 或 3 走多列栅格:列间距与窄屏堆叠沿用 grid,按钮区始终整行;单列表单不要传(默认 1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user