iter(g47): 新增 cascader 级联选择组件

This commit is contained in:
HIsheR
2026-10-26 12:10:21 +08:00
parent cdef6050d0
commit d81b724408
12 changed files with 468 additions and 10 deletions
+33
View File
@@ -15,6 +15,7 @@ import {
breadcrumb,
button,
card,
cascader,
checkbox,
dataTable,
transfer,
@@ -181,6 +182,7 @@ const tableLoading = signal(false);
const menuPick = signal('');
const listPick = signal(''); // 列表点击选中的条目标题
const slideIndex = signal(0); // 轮播当前下标(外部受控演示)
const cascaderPath = signal<string[]>(['east', 'sh']); // 级联选择路径(外部受控演示)
const treePick = signal('core'); // 树形选中节点 key
const transferKeys = signal<string[]>(['a11y']); // 穿梭框右侧集合(外部受控演示)
const cityPick = signal(''); // 可搜索下拉的选中城市
@@ -677,6 +679,37 @@ const content = h(
button({ label: '错误(可关)', variant: 'danger', onClick: () => notification({ title: '保存失败', description: '服务端返回 500,请稍后重试', variant: 'danger' }) }),
),
),
section(
'sec-cascader',
'级联选择',
'cascader:多列联动,悬停即下钻、点叶子提交;changeOnSelect 可停在中间层,Esc 收起,↑↓/→/←/Enter 全键盘可用。',
h(
'div',
{ class: 'row' },
cascader({
value: cascaderPath,
placeholder: '请选择所属区域',
changeOnSelect: true,
onChange: (p) => toast.success(`已选:${p.join(' / ')}`),
options: [
{ value: 'east', label: '华东', children: [
{ value: 'sh', label: '上海', children: [{ value: 'pd', label: '浦东新区' }, { value: 'xh', label: '徐汇区' }] },
{ value: 'hz', label: '杭州', children: [{ value: 'xh-hz', label: '西湖区' }, { value: 'yh', label: '余杭区' }] },
] },
{ value: 'south', label: '华南', children: [
{ value: 'gz', label: '广州', children: [{ value: 'th', label: '天河区' }] },
{ value: 'sz', label: '深圳', children: [{ value: 'nsh', label: '南山区' }] },
] },
{ value: 'overseas', label: '海外(暂不开放)', disabled: true },
],
}),
cascader({ separator: ' · ', placeholder: '必须选到末级', options: [
{ value: 'a', label: '研发中心', children: [{ value: 'a1', label: '前端组' }, { value: 'a2', label: '后端组' }] },
{ value: 'b', label: '设计中心', children: [{ value: 'b1', label: '交互组' }, { value: 'b2', label: '视觉组' }] },
] }),
h('span', { class: 'out' }, () => (cascaderPath().length ? `当前路径:${cascaderPath().join(' / ')}` : '未选择')),
),
),
section(
'sec-transfer',
'穿梭框',