iter(g135): 表单支持多列布局

This commit is contained in:
HIsheR
2026-10-26 15:27:18 +08:00
parent 7b41630b96
commit 21950d9ddd
7 changed files with 35 additions and 7 deletions
+4 -1
View File
@@ -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) => {
+1
View File
@@ -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; // 全部字段校验通过后的提交回调