diff --git a/.ua/index.json b/.ua/index.json index d96ecc1..26b90b6 100644 --- a/.ua/index.json +++ b/.ua/index.json @@ -1,6 +1,6 @@ { "$schema": "ui-arch-registry-index/0.1", - "generatedAt": "2026-10-26T14:25:29.547Z", + "generatedAt": "2026-10-26T14:26:38.557Z", "repoRoot": ".", "packages": [ { @@ -2049,6 +2049,12 @@ "d": "分页条「每页条数」候选档;缺省 [5, 10, 20],当前 pageSize 不在候选里会自动补进去", "df": "[5, 10, 20]" }, + { + "n": "emptyText", + "t": "string", + "d": "无数据时的空状态文案;有筛选词时仍显示「没有符合「x」的行」并给一键清除(两种语义不混用)", + "df": "暂无数据" + }, { "n": "selectable", "t": "boolean", diff --git a/llms-full.txt b/llms-full.txt index 4fc25fc..e2fd5b7 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -1,6 +1,6 @@ # @ui-arch 组件库 Agent 文档(无图形版) -> 自动生成于 2026-10-26T14:25:29.547Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。 +> 自动生成于 2026-10-26T14:26:38.557Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。 > 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。 ## 快速上手 @@ -1014,6 +1014,7 @@ const name = signal(''); const f = form({ onSubmit: submit }, [formItem({ label: - filterKey:string —— 工具栏筛选的列;缺省取第一列 - pageSize(默认 5):number —— 每页行数;缺省 5 - pageSizes(默认 [5, 10, 20]):number[] —— 分页条「每页条数」候选档;缺省 [5, 10, 20],当前 pageSize 不在候选里会自动补进去 +- emptyText(默认 暂无数据):string —— 无数据时的空状态文案;有筛选词时仍显示「没有符合「x」的行」并给一键清除(两种语义不混用) - selectable(默认 false):boolean —— 启用行选择列:全选三态(含半选)、行 checkbox、已选计数;缺省 false - page:Signal —— 受控页码信号:与内核分页双向同步,传同一个信号给独立 pagination 组件即可联动 - loading:boolean | Signal —— 加载态:为真时数据行换成骨架行(行数随 pageSize),筛选输入与翻页按钮临时禁用,容器带 aria-busy diff --git a/packages/skin/ui/src/dataTable.ts b/packages/skin/ui/src/dataTable.ts index 6596023..b7d1aa7 100644 --- a/packages/skin/ui/src/dataTable.ts +++ b/packages/skin/ui/src/dataTable.ts @@ -140,7 +140,7 @@ export function dataTable(props: DataTableProps): H if (busy()) return skeletonRows(); // 加载态优先:不看数据,避免闪出旧行 const sel = state().selection; // 读入依赖:选择变化即整表重绘(行数 = pageSize,代价可控) const rows = visible().rows; - if (!rows.length) return [emptyRow(colspan, keyword, () => table.dispatch({ type: 'setFilter', key: filterKey, value: '' }))]; // 空状态:筛选词与内核筛选一起清 + if (!rows.length) return [emptyRow(colspan, keyword, () => table.dispatch({ type: 'setFilter', key: filterKey, value: '' }), props.emptyText)]; // 空状态:筛选词与内核筛选一起清 return rows.map((row, i) => { const key = visible().keys[i]; const selected = sel.includes(key); diff --git a/packages/skin/ui/src/tableEmpty.ts b/packages/skin/ui/src/tableEmpty.ts index 9ca634d..ba4e193 100644 --- a/packages/skin/ui/src/tableEmpty.ts +++ b/packages/skin/ui/src/tableEmpty.ts @@ -3,7 +3,7 @@ import type { Signal } from '@ui-arch/frame'; import { button } from './button.js'; /*** 表格空状态行:有筛选词说明是筛掉的并给一键清除,没有筛选词就是真没数据;两种语义不该混成一句话 ***/ -export function emptyRow(colspan: number, keyword: Signal, onClear: () => void): HTMLElement { +export function emptyRow(colspan: number, keyword: Signal, onClear: () => void, emptyText = '暂无数据'): HTMLElement { const q = keyword().trim(); // 读信号:筛选词变化时整表重绘会带上新文案 return h( 'tr', @@ -11,7 +11,7 @@ export function emptyRow(colspan: number, keyword: Signal, onClear: () = h( 'td', { colspan }, - h('span', { class: 'ua-empty-tip' }, q ? `没有符合「${q}」的行` : '暂无数据'), + h('span', { class: 'ua-empty-tip' }, q ? `没有符合「${q}」的行` : emptyText), // 无筛选词时用调用方文案,缺省「暂无数据」 q ? button({ label: '清除筛选', variant: 'ghost', onClick: () => { keyword(''); onClear(); } }) : null, // 清空信号与内核筛选 ), ); diff --git a/packages/skin/ui/src/types.ts b/packages/skin/ui/src/types.ts index 8ee13d7..d373af1 100644 --- a/packages/skin/ui/src/types.ts +++ b/packages/skin/ui/src/types.ts @@ -66,6 +66,7 @@ export interface DataTableProps { filterKey?: string; // 工具栏筛选的列;缺省取第一列 pageSize?: number; // 每页行数;缺省 5 pageSizes?: number[]; // 分页条「每页条数」候选;缺省 [5, 10, 20],当前 pageSize 不在候选里会自动补进去 + emptyText?: string; // 无数据时的空状态文案(有筛选词时仍显示「没有符合「x」的行」);缺省「暂无数据」 selectable?: boolean; // 是否启用行选择列(含全选三态与已选计数);缺省 false page?: Signal; // 受控页码信号:与内核分页双向同步,可接独立 pagination 组件联动 loading?: boolean | Signal; // 加载态:为真时数据行换成骨架行,筛选与翻页禁用 diff --git a/packages/skin/ui/ua.manifest.json b/packages/skin/ui/ua.manifest.json index 99897b3..c0f1d52 100644 --- a/packages/skin/ui/ua.manifest.json +++ b/packages/skin/ui/ua.manifest.json @@ -1920,6 +1920,12 @@ "d": "分页条「每页条数」候选档;缺省 [5, 10, 20],当前 pageSize 不在候选里会自动补进去", "df": "[5, 10, 20]" }, + { + "n": "emptyText", + "t": "string", + "d": "无数据时的空状态文案;有筛选词时仍显示「没有符合「x」的行」并给一键清除(两种语义不混用)", + "df": "暂无数据" + }, { "n": "selectable", "t": "boolean",