@done-coding/admin-core 0.12.0 → 0.12.2-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +1 -48
  2. package/es/bridge/index.mjs +75 -72
  3. package/es/bridge/layout.mjs +51 -0
  4. package/es/bridge/theme/index.mjs +1 -1
  5. package/es/bridge/theme/persist.mjs +1 -1
  6. package/es/components/app-layout/AppAside.vue.mjs +2 -2
  7. package/es/components/app-layout/AppAside.vue2.mjs +27 -10
  8. package/es/components/app-layout/AppCollapseToggle.vue.mjs +7 -0
  9. package/es/components/app-layout/AppCollapseToggle.vue2.mjs +54 -0
  10. package/es/components/app-layout/AppFooter.vue.mjs +1 -1
  11. package/es/components/app-layout/AppHeader.vue.mjs +3 -3
  12. package/es/components/app-layout/AppHeader.vue2.mjs +1 -1
  13. package/es/components/app-layout/AppLayout.vue.mjs +2 -2
  14. package/es/components/app-layout/AppLayout.vue2.mjs +3 -3
  15. package/es/components/app-layout/AppSidebar.vue.mjs +2 -2
  16. package/es/components/app-layout/AppSidebar.vue2.mjs +41 -61
  17. package/es/components/app-layout/AppTheme.vue.mjs +3 -3
  18. package/es/components/app-layout/viewport.mjs +3 -3
  19. package/es/components/display/TabsHeader.vue.mjs +4 -4
  20. package/es/components/form/FormItemNestForm.vue.mjs +2 -2
  21. package/es/components/form/FormItemNestFormList.vue.mjs +2 -2
  22. package/es/components/form/FormSubmitPanel.vue.mjs +1 -1
  23. package/es/components/form/FormVerifyImage.vue.mjs +1 -1
  24. package/es/components/table/TableToolbar.vue.mjs +3 -3
  25. package/es/hooks/use-theme-apply.mjs +255 -0
  26. package/es/hooks/use-viewport-apply.mjs +39 -0
  27. package/es/index.mjs +92 -91
  28. package/es/inject/key.mjs +13 -13
  29. package/es/store/app.mjs +69 -62
  30. package/es/style.css +1 -1
  31. package/es/utils/theme-scale.mjs +1 -0
  32. package/package.json +6 -8
  33. package/types/bridge/config-hook.d.ts +0 -68
  34. package/types/bridge/index.d.ts +18 -417
  35. package/types/bridge/layout.d.ts +25 -0
  36. package/types/bridge/plugin.d.ts +12 -30
  37. package/types/bridge/route.d.ts +1 -20
  38. package/types/bridge/state.d.ts +0 -14
  39. package/types/bridge/storage.d.ts +0 -9
  40. package/types/bridge/theme/index.d.ts +1 -8
  41. package/types/bridge/theme/persist.d.ts +3 -15
  42. package/types/bridge/theme/system-dark.d.ts +0 -12
  43. package/types/bridge/theme/types.d.ts +27 -265
  44. package/types/components/app-layout/AppAside.vue.d.ts +0 -1
  45. package/types/components/app-layout/AppCollapseToggle.vue.d.ts +11 -0
  46. package/types/components/app-layout/AppHeader.vue.d.ts +0 -3
  47. package/types/components/app-layout/AppLayout.vue.d.ts +0 -12
  48. package/types/components/app-layout/AppPage.vue.d.ts +0 -2
  49. package/types/components/app-layout/AppSidebar.vue.d.ts +0 -2
  50. package/types/components/app-layout/types.d.ts +2 -127
  51. package/types/components/app-layout/viewport.d.ts +2 -30
  52. package/types/components/data-view/DataListViewItem.vue.d.ts +0 -8
  53. package/types/components/data-view/index.d.ts +0 -4
  54. package/types/components/data-view/types.d.ts +0 -41
  55. package/types/components/data-view/utils.d.ts +0 -3
  56. package/types/components/display/TabsHeader.vue.d.ts +0 -2
  57. package/types/components/display/TabsMain.vue.d.ts +0 -2
  58. package/types/components/display/TabsRefineFlow.vue.d.ts +0 -1
  59. package/types/components/display/index.d.ts +1 -37
  60. package/types/components/display/types.d.ts +0 -131
  61. package/types/components/form/FormItemNestForm.vue.d.ts +0 -5
  62. package/types/components/form/FormItemNestFormList.vue.d.ts +0 -17
  63. package/types/components/form/FormVerifyCode.vue.d.ts +0 -9
  64. package/types/components/form/FormVerifyImage.vue.d.ts +0 -1
  65. package/types/components/form/form-search-utils.d.ts +0 -14
  66. package/types/components/form/nest-form-item-list.d.ts +0 -28
  67. package/types/components/form/nest-form-item.d.ts +0 -21
  68. package/types/components/form/nest-registry.d.ts +0 -14
  69. package/types/components/form/types.d.ts +8 -185
  70. package/types/components/form/use-form-submit.d.ts +0 -12
  71. package/types/components/form/use-nest-form-list.d.ts +0 -13
  72. package/types/components/form/use-nest-form.d.ts +0 -15
  73. package/types/components/form/use-nest-layout-scale.d.ts +0 -12
  74. package/types/components/form/utils.d.ts +1 -56
  75. package/types/components/list-page/ListPage.vue.d.ts +0 -6
  76. package/types/components/list-page/types.d.ts +2 -19
  77. package/types/components/misc/index.d.ts +1 -6
  78. package/types/components/misc/types.d.ts +0 -6
  79. package/types/components/modal/ConfirmModal.vue.d.ts +0 -10
  80. package/types/components/modal/modal-shelf-core.d.ts +0 -3
  81. package/types/components/modal/modal-shelf-hierarchy.d.ts +0 -4
  82. package/types/components/modal/modal-shelf-types.d.ts +0 -34
  83. package/types/components/modal/types.d.ts +1 -20
  84. package/types/components/panel/PanelItemNestForm.vue.d.ts +0 -6
  85. package/types/components/panel/PanelItemNestPanel.vue.d.ts +0 -5
  86. package/types/components/panel/nest-panel-form.d.ts +0 -21
  87. package/types/components/panel/nest-panel-item.d.ts +0 -14
  88. package/types/components/panel/types.d.ts +1 -49
  89. package/types/components/table/types.d.ts +9 -124
  90. package/types/config/list-model.d.ts +0 -29
  91. package/types/config/route.d.ts +0 -2
  92. package/types/helpers/form.d.ts +0 -5
  93. package/types/helpers/list-helper.d.ts +0 -26
  94. package/types/helpers/types.d.ts +0 -11
  95. package/types/hooks/activated.d.ts +0 -10
  96. package/types/hooks/feel-size.d.ts +0 -2
  97. package/types/hooks/index.d.ts +2 -2
  98. package/types/hooks/menus-dispatch.d.ts +0 -4
  99. package/types/hooks/timeout.d.ts +0 -4
  100. package/types/hooks/use-channel-viewport-height.d.ts +0 -14
  101. package/types/hooks/use-theme-apply.d.ts +11 -0
  102. package/types/hooks/use-viewport-apply.d.ts +8 -0
  103. package/types/inject/key.d.ts +2 -87
  104. package/types/router/guard/index.d.ts +0 -13
  105. package/types/router/guard/login.d.ts +0 -1
  106. package/types/router/guard/permission.d.ts +0 -1
  107. package/types/router/guard/types.d.ts +2 -5
  108. package/types/store/app.d.ts +10 -31
  109. package/types/store/router-permission.d.ts +2 -55
  110. package/types/store/user.d.ts +2 -26
  111. package/types/types/dot-path.d.ts +0 -8
  112. package/types/types/route.d.ts +0 -45
  113. package/types/types/utility-types.d.ts +0 -7
  114. package/types/utils/export.d.ts +1 -16
  115. package/types/utils/id.d.ts +0 -1
  116. package/types/utils/router.d.ts +0 -2
  117. package/types/utils/theme-scale.d.ts +1 -30
  118. package/types/utils/time.d.ts +0 -1
  119. package/docs/TECH_SNAPSHOT.md +0 -146
  120. package/docs/nested-config-paradigm.md +0 -80
  121. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/RETROSPECTIVE.md +0 -63
  122. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/design.md +0 -575
  123. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/landing-authorizations/2026-05-09-080900-/346/234/2371-/345/205/245/345/256/236/346/226/275/346/216/210/346/235/203.md +0 -107
  124. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/project-orchestration.md +0 -58
  125. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/requirements.md +0 -238
  126. package/docs/specs/2026-05-09-055250-moderate-/345/210/227/350/241/250key/351/205/215/347/275/256/347/202/271/350/267/257/345/276/204/346/224/257/346/214/201/tasks.md +0 -290
  127. package/es/hooks/use-admin-theme-apply.mjs +0 -213
  128. package/es/hooks/use-admin-viewport-apply.mjs +0 -39
  129. package/types/hooks/use-admin-theme-apply.d.ts +0 -34
  130. package/types/hooks/use-admin-viewport-apply.d.ts +0 -20
@@ -1,8 +1,6 @@
1
1
  import { RouteMetaResolveRaw } from '../../types';
2
2
  type __VLS_Props = {
3
- /** 整体不用管 AppLayout 控制 用在定位出去的子元素的显隐 */
4
3
  show: boolean;
5
- /** 层级是否高于 header(#7.5 期;true 时 z-index 提升盖住 header) */
6
4
  aboveHeader?: boolean;
7
5
  menus: RouteMetaResolveRaw[];
8
6
  menuFlatList: RouteMetaResolveRaw[];
@@ -1,157 +1,32 @@
1
1
  import { Component, VNode } from 'vue';
2
2
  import { createAppStore, createUserStore } from '../../store';
3
- import { AdminBridge } from '../../bridge';
3
+ import { CoreBridge } from '../../bridge';
4
4
  import { RouteMetaResolveRaw } from '../../types';
5
- /**
6
- * AppLayout 族 app store 消费契约(props/inject 切面)。
7
- *
8
- * 调用方通过 props 注入 store 实例,AppLayout 集中 provide,子组件
9
- * (AppBody / AppHeader / AppSidebar / AppFooter)经 `APP_LAYOUT_APP_STORE_KEY`
10
- * inject 自取——废除原 AppLayout → 子组件 `:style` / `:showBreadcrumb` props 透传链。
11
- *
12
- * 类型由 `createAppStore` 工厂 ReturnType 推导(store 实例完整类型),自动跟随
13
- * 工厂演化、零手维护字段清单——放弃 narrow 换取 0 维护成本。`UserInfo` /
14
- * `LoginParams` 泛型未显式实例化时走工厂 default `Record<string, any>` /
15
- * `unknown`(D-a 原则——core 不锁 UserInfo 具体 shape)。
16
- *
17
- * app-layout 族下沉 core 后此 slice 仍是 props/inject 契约——core 端无法直接
18
- * `useAppStore()`,必须由业务侧通过 props 注入。
19
- */
20
5
  export type AppLayoutAppStoreSlice<UserInfo = Record<string, any>> = ReturnType<ReturnType<typeof createAppStore<UserInfo>>>;
21
- /**
22
- * AppLayout 族 user store 消费契约(props/inject 切面)。
23
- *
24
- * 调用方通过 props 注入,AppLayout 集中 provide,子组件(AppHeader)经
25
- * `APP_LAYOUT_USER_STORE_KEY` inject 自取。
26
- *
27
- * 类型由 `createUserStore` 工厂 ReturnType 推导。`UserInfo` 走工厂 default
28
- * `Record<string, any>`(D-a 原则——core 不锁 UserInfo 具体 shape),业务侧
29
- * (如 AppLayout watermark content / AppHeader user dropdown)按需 cast 为本应用
30
- * 具体 shape。
31
- */
32
6
  export type AppLayoutUserStoreSlice<UserInfo = Record<string, any>> = ReturnType<ReturnType<typeof createUserStore<UserInfo>>>;
33
- /**
34
- * AppLayout 族 admin bridge 消费契约(props/inject 切面,#7.6 期挂载)。
35
- *
36
- * AppLayout 通过 `props.adminBridge` 注入 + `provide(APP_LAYOUT_BRIDGE_KEY, ...)`,
37
- * 子组件(AppBody / AppHeader / AppSidebar / AppLayout 自身菜单派生)inject 自取——
38
- * 与 `AppLayoutAppStoreSlice` / `AppLayoutUserStoreSlice` 完全对称范式。
39
- *
40
- * 仅暴露 layout 子组件实际读取的字段:12 readonly 配置属性 + 2 派生方法
41
- * (getRoutes / generateRouteMetaRawTree)。loginApi / refreshToken 等 auth
42
- * 面不通过本 slice 暴露(业务侧通过 appAdminBridge 直读)。
43
- */
44
- export type AppLayoutBridgeSlice = Pick<AdminBridge, "APP_BASE_INFO" | "APP_ENV_INFO" | "APP_CACHE_CONFIG" | "APP_LAYOUT_HEADER_CONFIG" | "APP_LAYOUT_FOOTER_CONFIG" | "APP_LAYOUT_SIDEBAR_CONFIG" | "APP_LAYOUT_BREADCRUMB_CONFIG" | "APP_LAYOUT_BODY_CONFIG" | "APP_LAYOUT_VIEWPORT_CONFIG" | "APP_LAYOUT_GAP_CONFIG" | "APP_LAYOUT_CONFIG" | "APP_ROUTER_META_DEFAULT_CONFIG" | "APP_ROUTER_CONFIG" | "APP_ROUTER_PATHS_CONFIG" | "APP_THEME_CONFIG" | "theme" | "themeStyle" | "themeMode" | "themeIsDark" | "themeLayout" | "themeDensity" | "themeMotion" | "themeColors" | "showThemeStyleSwitcher" | "getRoutes" | "generateRouteMetaRawTree">;
45
- /**
46
- * 内容锚 slot 名集(焊缝契约 ③,纯功能语义;P1' 去布局化重做)。
47
- *
48
- * 业务 slot 为**内容锚**(描述「是什么功能」非「放哪」)——同一份业务原料,落位权归
49
- * AppShell:不同 AppShell 把同一内容锚渲染到不同区域 = 不同布局人格。AppLayout 用
50
- * `v-for` 整组动态透传给 AppShell([MUST NOT] 在 AppLayout 写死任一内容锚落位)。
51
- *
52
- * - `brand`:品牌 / logo / 应用名入口
53
- * - `userEntry`:用户下拉 / 登录按钮 / 用户态入口
54
- * - `settings`:设置 / 配置入口
55
- * - `themeSwitcher`:主题(风格 + 亮暗)切换器(scope 传内置 AppTheme 默认内容)
56
- * - `aside`(P4 加):右侧补充区内容中转锚 → 喂进 `AppAside` 默认 slot。
57
- * **与 sidebar 同构:全局单实例 + 应用层切入**——App.vue 填一次 `#aside`(同
58
- * `#brand` / `#userEntry` 范式),`showAside=true`(路由 `meta.layout.aside` 派生)
59
- * 的页面都显示这同一份;宽度 / 位置 / 容器归主题(`preset.layout.aside.width` +
60
- * AppAside 积木)。per-page 内容随页变化 = **业务页面开发自决**(如自往 `#aside` 塞
61
- * `<RouterView name="aside" />`),**不属本布局体系范围**,core 不建 per-route 投递机制。
62
- *
63
- * 去 `nav*` 位置锚:菜单走数据流(`menuFlatList`),渲染成何种导航由 AppShell 自由
64
- * (复用导出积木 `MenuTree` / `AppSidebar` 或自 DIY)。
65
- * 内置默认 AppShell 的落位映射(1:1 镜像经典布局)见 `AppShell.vue` 注释。
66
- */
7
+ export type AppLayoutBridgeSlice = Pick<CoreBridge, "APP_BASE_INFO" | "APP_ENV_INFO" | "APP_CACHE_CONFIG" | "APP_LAYOUT_HEADER_CONFIG" | "APP_LAYOUT_FOOTER_CONFIG" | "APP_LAYOUT_SIDEBAR_CONFIG" | "APP_LAYOUT_ASIDE_CONFIG" | "APP_LAYOUT_BREADCRUMB_CONFIG" | "APP_LAYOUT_BODY_CONFIG" | "APP_LAYOUT_VIEWPORT_CONFIG" | "APP_LAYOUT_GAP_CONFIG" | "APP_LAYOUT_CONFIG" | "APP_ROUTER_META_DEFAULT_CONFIG" | "APP_ROUTER_CONFIG" | "APP_ROUTER_PATHS_CONFIG" | "APP_THEME_CONFIG" | "theme" | "themeStyle" | "themeMode" | "themeIsDark" | "themeLayout" | "themeDensity" | "themeMotion" | "themeColors" | "showThemeStyleSwitcher" | "getRoutes" | "generateRouteMetaRawTree">;
67
8
  export type AppShellContentAnchor = "brand" | "userEntry" | "settings" | "themeSwitcher" | "aside";
68
- /**
69
- * AppShell 扁平注入面 props(焊缝契约 ①-props)。
70
- *
71
- * 原分喂 AppHeader / AppSidebar 的 props **扁平合并为一份**,三处零件由 AppShell
72
- * 内部自行分发。样式 / themeColors / 折叠态 / changeSidebarCollapseStatus 走
73
- * **inject**(`APP_LAYOUT_APP_STORE_KEY` / `APP_LAYOUT_BRIDGE_KEY`,AppLayout 已 provide),
74
- * 不进 props——AppShell setup 内自取(同内置 AppHeader/AppSidebar 既有范式)。
75
- */
76
9
  export interface AppShellProps {
77
- /** 完整菜单树(经权限 / menuShow 过滤、排序) */
78
10
  menus: RouteMetaResolveRaw[];
79
- /** 扁平菜单列表(喂 AppBody / 子零件高度链 + 路由匹配) */
80
11
  menuFlatList: RouteMetaResolveRaw[];
81
- /** sidebar 区菜单(分流后) */
82
12
  sidebarMenus: RouteMetaResolveRaw[];
83
- /** header 区菜单(分流后;extractLevel1ToHeader=true 时为 1 级模块) */
84
13
  headerMenus: RouteMetaResolveRaw[];
85
- /** 当前聚焦菜单 */
86
14
  activeMenu?: RouteMetaResolveRaw;
87
- /** 当前聚焦模块菜单(header 模块高亮) */
88
15
  activeModuleMenu?: RouteMetaResolveRaw;
89
- /**
90
- * 是否展示 header(路由 meta.layout 基线意图)。AppShell 自解读:决定喂给哪个区域的
91
- * `show`(内置默认 shell 喂 AppHeader)。
92
- */
93
16
  showHeader: boolean;
94
- /**
95
- * 是否展示 sidebar(路由 meta.layout 基线意图)。语义同 `showHeader`——
96
- * 内置默认 shell 喂 AppSidebar 的 `show`。
97
- */
98
17
  showSidebar: boolean;
99
- /**
100
- * 是否展示右侧 aside 补充区(路由 meta.layout 基线意图,additive,默认 false)。
101
- * 内置经典 shell 不渲染 aside(经典无右栏);自定义 shell 据此渲染右侧区。
102
- */
103
18
  showAside: boolean;
104
- /**
105
- * sidebar 层级是否高于 header(透传内置 AppSidebar.aboveHeader)。
106
- * 默认 false;自定义 shell 可忽略。
107
- */
108
19
  sidebarAboveHeader: boolean;
109
20
  }
110
- /**
111
- * AppShell emits(焊缝契约 ①-emits)。
112
- *
113
- * 当前空——作为统一预留通道。后续 AppShell 需向 AppLayout 反向通知(如布局态变更)
114
- * 时在此扩展,[MUST NOT] 自造平行回调 props。
115
- */
116
21
  export interface AppShellEmits {
117
22
  }
118
- /**
119
- * AppShell 默认 scoped slot 作用域参数(焊缝契约 ①-slots,default slot)。
120
- *
121
- * AppShell 在「主体该出现的位置」吐出本作用域 → AppLayout 接住后:
122
- * 用 `Footer` 组件引用组装进 `AppBody #footer`,并把 AppBody(持有 menuFlatList、
123
- * 守高度链)塞回该默认 slot 位置。这绕过「父传子 slot 是父作用域 vnode、子无法
124
- * 反向注入子 slot」的 Vue 约束(footer 走「AppShell 吐组件引用 → AppLayout 组装」)。
125
- */
126
23
  export interface AppShellDefaultSlotScope {
127
- /**
128
- * AppShell 选定的 footer 组件引用(默认 = `componentFallBack.AppFooter`;
129
- * 自定义 shell 可吐自定义 footer)。AppLayout 用 `<component :is="Footer" />`
130
- * 渲染进 `AppBody #footer`。
131
- */
132
24
  Footer: Component;
133
25
  }
134
- /**
135
- * 功能锚 scoped slot 作用域参数(焊缝契约 ①-slots,内容锚 scope)。
136
- *
137
- * AppShell 经各功能锚 slot 的 scope 传「内置默认内容组件引用」给布局,布局可用可无视:
138
- * - `themeSwitcher` 锚 `Default` = 内置 `AppTheme`(保证主题切换功能以某形式可达;布局
139
- * 无视默认内容时须自供等效切换 UI,否则违约——见声明驱动测试纪律)。
140
- * - `brand` / `userEntry` / `settings` / `aside` 锚 `Default` = `undefined`(不预设未遇到的需求,随时可扩)。
141
- */
142
26
  export interface AppShellAnchorScope {
143
- /** 该功能锚的内置默认内容组件引用(仅 themeSwitcher 提供,markRaw);其余 undefined */
144
27
  Default?: Component;
145
28
  }
146
- /**
147
- * AppShell slots 契约(焊缝契约 ①-slots 全集)。
148
- *
149
- * - `default`:作用域 = {@link AppShellDefaultSlotScope},AppLayout 在此塞 AppBody(持高度链)。
150
- * - 各内容锚({@link AppShellContentAnchor}):scoped slot(scope = {@link AppShellAnchorScope}),
151
- * AppLayout `v-for` 整组转发业务侧填的同名 slot;AppShell 自行决定每个内容锚落到哪个区域。
152
- */
153
29
  export type AppShellSlots = {
154
- /** 默认 slot:AppLayout 在此塞 AppBody(scoped,拿 Footer 组件引用组装 #footer) */
155
30
  default: (scope: AppShellDefaultSlotScope) => VNode[];
156
31
  } & {
157
32
  [K in AppShellContentAnchor]?: (scope: AppShellAnchorScope) => VNode[];
@@ -1,30 +1,2 @@
1
- /**
2
- * viewport 镂空 SVG 装饰边框基础设施常量(焊缝契约 ⑤,P1 冻结)。
3
- *
4
- * 把 viewport 那圈留白(`APP_LAYOUT_VIEWPORT_CONFIG` 四边 padding 让出的边距)
5
- * 从消极留白变积极画布:AppShell 可 teleport 一个铺满视口的大 SVG 到 body、
6
- * 镂空出内容区,在边框圈里画渐变 / 动画 / 填充色。
7
- *
8
- * - **叠加非替代**:现有 `useAdminViewportApply` 的 padding 留白机制保留;SVG 只在
9
- * 让出的那圈里画装饰。镂空矩形尺寸 = AppShell 经 inject 读 `APP_LAYOUT_VIEWPORT_CONFIG`
10
- * 四边算(响应式)。
11
- * - **teleport + pointer-events:none**:teleport 到 body(避开层叠上下文 / overflow
12
- * 裁切),`pointer-events: none` 绝不挡交互。
13
- *
14
- * z-index 双档(core 导出常量,AppShell / 主题资产按需选档):
15
- * 业务自造 z-index 字面量会与 el 弹窗(2000 起动态自增)打架——故 core 冻结两档安全值。
16
- */
17
- /**
18
- * viewport 装饰 z-index——**弹窗下档**(默认,绝对安全)。
19
- *
20
- * `800 < 2000`(el 弹窗 base z-index)→ 装饰永远在弹窗下,绝不盖住 dialog / message。
21
- * 大多数边框装饰用此档(装饰是背景氛围,不该盖业务弹窗)。
22
- */
23
- export declare const ADMIN_CORE_VIEWPORT_DECOR_ZINDEX_BELOW = 800;
24
- /**
25
- * viewport 装饰 z-index——**弹窗上档**(盖住弹窗,慎用)。
26
- *
27
- * el z-index 自 2000 动态自增(每开一层 +N),`10000` 实践绝对安全盖住弹窗档。
28
- * 仅当装饰需覆盖弹窗(如全屏切换动画遮罩 / 边框需压住一切)时用此档。
29
- */
30
- export declare const ADMIN_CORE_VIEWPORT_DECOR_ZINDEX_ABOVE = 10000;
1
+ export declare const CORE_VIEWPORT_DECOR_ZINDEX_BELOW = 800;
2
+ export declare const CORE_VIEWPORT_DECOR_ZINDEX_ABOVE = 10000;
@@ -1,12 +1,4 @@
1
- /**
2
- * DataListView 单项容器
3
- * ---
4
- * 仅承载选中态 class 钩子 + 项内容插槽,由 DataListView 内部 v-for 使用。
5
- * [MUST NOT] 写死视觉样式(卡片阴影/圆角等归消费方);
6
- * [MUST NOT] 内置选中状态机(状态机在 DataListView)。
7
- */
8
1
  type __VLS_Props = {
9
- /** 当前项是否选中(由 DataListView 传入) */
10
2
  selected: boolean;
11
3
  };
12
4
  declare function __VLS_template(): {
@@ -1,8 +1,4 @@
1
1
  import { default as DataListView } from './DataListView.vue';
2
2
  import { default as DataListViewItem } from './DataListViewItem.vue';
3
3
  export * from './types';
4
- /**
5
- * data-view 是 table 的内部衍生品:仅供 TableMain 内部 import,
6
- * [MUST NOT] 对外导出 / 全局注册 / 提供 install 插件(不进 core 顶层 export)。
7
- */
8
4
  export { DataListView, DataListViewItem };
@@ -1,64 +1,23 @@
1
1
  import { Component } from 'vue';
2
2
  import { ElTableColumnProps, TableColumnDefaultScope, TableInstance } from '../table';
3
- /**
4
- * DataListView 字段渲染作用域
5
- * ---
6
- * 喂给 FieldColumn.render 的作用域;布局无关,仅含行数据与索引。
7
- */
8
3
  export interface DataListViewRenderScope<T extends Record<string, any> = Record<string, any>> {
9
- /** 当前行数据 */
10
4
  row: T;
11
- /** 当前行索引 */
12
5
  index: number;
13
6
  }
14
- /**
15
- * DataListView 列配置(table 的内部衍生品:从 ElTableColumnProps Pick 复用子集,
16
- * ElTableColumnProps 零触碰;本类型不对外导出,仅 table 内部消费)
17
- */
18
7
  export type DataViewColumn<T extends Record<string, any> = Record<string, any>> = Partial<Pick<ElTableColumnProps<T, any>, "prop" | "label" | "type" | "render">>;
19
- /**
20
- * DataListView props
21
- * ---
22
- * 布局无关的数据项容器:分页数据由外部传入,一行几个由消费方在 #item
23
- * 外层用 CSS 决定,本组件不内置任何列数 / 布局。
24
- */
25
8
  export interface DataListViewProps<T extends Record<string, any>, F extends Record<string, any>> {
26
- /** 当前页数据(外部传入,组件不持有请求 / 分页逻辑) */
27
9
  data: T[];
28
- /** 行唯一键:行数据键名 或 取键函数(内部统一 String 化) */
29
10
  rowKey: Extract<keyof T, string> | ((row: T) => string);
30
- /** 列配置,内部归一为 fieldComponentMap 喂 #item */
31
11
  columns: DataViewColumn<T>[];
32
- /** 最大高度;传入时容器超出内容出现垂直滚动条,缺省不限高 */
33
12
  maxHeight?: number;
34
- /** 是否启用选中能力,缺省关闭 */
35
13
  selectable?: boolean;
36
- /** 获取column 列 上下文 render参数 */
37
14
  getRenderCtxParams: () => Pick<TableColumnDefaultScope<T, F>, "injectInfo" | "exposeInfo">;
38
15
  }
39
- /**
40
- * DataListView 对外实例方法 对齐 elTableInstance
41
- * -----
42
- * 未实现的会抛错
43
- */
44
16
  export type DataListViewInstance = TableInstance;
45
- /**
46
- * #item 作用域插槽 props
47
- * ---
48
- * fieldComponentMap:列 key(prop / $type_index / $type_selection)→ 稳定字段组件
49
- * (标识跨渲染稳定,对齐 FormItem 范式)。消费方:
50
- * `<component :is="fieldComponentMap['x']" :row="row" :index="index"
51
- * :selected="selected" :toggle-select="toggleSelect" />`(数据走 props)。
52
- */
53
17
  export interface DataListViewItemScope<T extends Record<string, any> = Record<string, any>> {
54
- /** 列 key → 稳定字段组件(props: row/index/selected/toggleSelect) */
55
18
  fieldComponentMap: Record<string, Component>;
56
- /** 当前行数据 */
57
19
  row: T;
58
- /** 当前行索引 */
59
20
  index: number;
60
- /** 当前行是否选中 */
61
21
  selected: boolean;
62
- /** 翻转当前行选中态 */
63
22
  toggleSelect: () => void;
64
23
  }
@@ -1,5 +1,2 @@
1
1
  import { DataListViewInstance } from './types';
2
- /**
3
- * 创建 DataListView 实例
4
- */
5
2
  export declare const createDataListViewInstance: (mainMethods: Pick<DataListViewInstance, "clearSelection" | "getSelectionRows" | "toggleRowSelection" | "toggleAllSelection" | "columns">) => DataListViewInstance;
@@ -1,9 +1,7 @@
1
1
  import { TabsHeaderVariant, TabsMainItem } from './types';
2
2
  type __VLS_Props = {
3
3
  tabs: TabsMainItem[];
4
- /** 视觉嵌套层级,只控字号(1=16 / 2=14 / 3=12 / 4+=12,超 4 钳到 4) */
5
4
  level?: number;
6
- /** 视觉风格变体;不传按 level 推导默认 */
7
5
  variant?: TabsHeaderVariant;
8
6
  };
9
7
  type __VLS_PublicProps = {
@@ -1,13 +1,11 @@
1
1
  import { VNode } from 'vue';
2
2
  import { TabsMainItem, TabsMainProps } from './types';
3
3
  type __VLS_Props = TabsMainProps;
4
- /** 内容插槽 #{key} 的 scope(TabPane 渲染时注入;key = tab.key) */
5
4
  interface TabsMainContentScope {
6
5
  tab?: TabsMainItem;
7
6
  active: boolean;
8
7
  viewportHeight?: number;
9
8
  }
10
- /** 标题插槽 #header-{key} 的 scope(中转 TabsHeader 的 #{key}) */
11
9
  interface TabsMainHeaderScope {
12
10
  tab: TabsMainItem;
13
11
  active: boolean;
@@ -5,7 +5,6 @@ interface TabsRefineFlowProps {
5
5
  channel?: string;
6
6
  parentChannel?: string;
7
7
  padding?: TabsMainPadding;
8
- /** 精细化预留高度(px),从 viewportHeightFinal 中预扣(在 padding 扣减与 HeightProvider header reserve 扣减之外) */
9
8
  refineReduceHeight?: number;
10
9
  }
11
10
  declare function __VLS_template(): {
@@ -5,41 +5,5 @@ import { default as ActionBtn } from './ActionBtn.vue';
5
5
  import { default as ActionConfirm } from './ActionConfirm.vue';
6
6
  import { default as ActionBtnGroup } from './ActionBtnGroup.vue';
7
7
  import { default as BooleanTag } from './BooleanTag.vue';
8
- export {
9
- /** 尺寸监听容器:debounce 测默认槽内容宽/高,`@height-change` / `@size-change` 上报 */
10
- WatchSize,
11
- /**
12
- * Tab 容器:手写 tab-bar + 滑动下划线 + 懒渲染 KeepAlive。
13
- * 嵌套联动用 `channel="x"` / `parentChannel="x"` 字符串显式配对([MUST NOT] 响应式)。
14
- */
15
- TabsMain,
16
- /**
17
- * 纯数值高度预算节点:`available = max(viewportHeight - reserve, minHeight ?? 0)`,
18
- * 默认槽 `{ height }` 暴露。Fragment 双根,不撑开自身,不 inject 不 provide。
19
- * 消费方 [MUST] 用 slot scope `:height` 自设容器高。
20
- */
21
- HeightProvider,
22
- /**
23
- * ElButton 超集按钮原语:透传全 ElButton props + 默认槽 label + `confirmConfig`
24
- * 确认闸门 + `beforeOpen` 异步预取 + onClick 返 Promise 自动 loading(内部接管)。
25
- */
26
- ActionBtn,
27
- /**
28
- * confirm 原语(扁平,可独立于 ActionBtn 消费):触发元素由默认 slot 提供,
29
- * 弹层可见性 `v-model:show` 声明式驱动;`submitFn` 返 Promise 时仅成功才关弹层。
30
- */
31
- ActionConfirm,
32
- /**
33
- * 配置式按钮组(泛型 Ctx 由消费方决定形状)。
34
- * - 二选一渲染:`actionBtnProps`(走 ActionBtn 带 confirm/beforeOpen)优先 / `props`(走 ElButton)。
35
- * - `render` 对标 FormItem.render 三态:string | Component | (props:{ctx})=>VNode。
36
- * - `show` 函数过滤;`defaultSize` 给基础 size,业务侧显式 size 优先。
37
- * - 典型消费:TableMain.toolbar 内置 / 表格 OPERATE 列(BL-5 推广)。
38
- */
39
- ActionBtnGroup,
40
- /**
41
- * boolean 只读展示为彩色标签(纯展示,无交互):`value` → active/inactive 文本 + ElTag 色彩。
42
- * 编辑布尔用 ElSwitch;[MUST NOT] 给展示标签挂 onClick toggle 改数据(展示≠编辑,详见 paradigm §9)。
43
- */
44
- BooleanTag, };
8
+ export { WatchSize, TabsMain, HeightProvider, ActionBtn, ActionConfirm, ActionBtnGroup, BooleanTag, };
45
9
  export * from './types';
@@ -1,206 +1,75 @@
1
1
  import { Component, ComputedRef, VNode } from 'vue';
2
2
  import { ButtonProps, TagProps } from 'element-plus';
3
- /** ActionConfirm 确认交互形态:弹层气泡 / 居中模态框 */
4
3
  export type ActionConfirmMode = "popconfirm" | "messageConfirm";
5
- /**
6
- * ActionConfirm 文案解析器。
7
- * - string:直接渲染
8
- * - 无参函数:返回字符串或 VNode 数组(富文本);动态数据由调用方闭包捕获
9
- */
10
4
  export type ActionConfirmTextResolver = string | (() => string | VNode[]);
11
- /**
12
- * ActionBtn 的确认配置(嵌套对象;无此配置则为普通按钮,不触发确认)。
13
- *
14
- * ⚠️ 瞬时用户激活限制:`confirmConfig` 与 `beforeOpen` 均会异步打断点击的瞬时
15
- * 用户激活窗口(transient user activation)——confirm 后 / beforeOpen 之后的
16
- * handler 与原始点击之间隔了一次异步等待,原始激活此时已过期(注意:事件对象
17
- * `isTrusted` 仍为 true,失效的是激活窗口而非事件本身)。故 confirm 后 /
18
- * beforeOpen 之后的 handler [MUST NOT] 调用依赖瞬时用户激活的 API——
19
- * `window.open`、`navigator.clipboard.*`、`requestFullscreen` 等会被浏览器
20
- * 拦截。需要这类操作时改用无 `confirmConfig` 且无 `beforeOpen` 的 ActionBtn /
21
- * 普通按钮。此为 confirm-gate / async-prefetch 模式固有代价,组件层无法绕过。
22
- */
23
5
  export interface ActionBtnConfirmConfig {
24
- /** 确认标题 */
25
6
  title?: ActionConfirmTextResolver;
26
- /** 确认正文内容 */
27
7
  content?: ActionConfirmTextResolver;
28
- /** 确认按钮文案,默认"确定" */
29
8
  confirmText?: string;
30
- /** 取消按钮文案,默认"取消" */
31
9
  cancelText?: string;
32
- /** 确认按钮 type */
33
10
  type?: ButtonProps["type"];
34
11
  }
35
- /**
36
- * ActionBtn 组件 props。
37
- * 完全兼容 ElButton(继承 ButtonProps),仅一处改写 + 三个增量:
38
- * - `loading` 被 Omit:有意的 ElButton 不兼容,唯一接管项——loading 由组件内部
39
- * 独占,对接异步 confirm / beforeOpen 的进行态(innerLoading),对外不可设置。
40
- * - `disabled` 原生透传,不改写不扩展。
41
- * - 增量:`confirmMode` / `confirmConfig` / `beforeOpen`。
42
- * - 泛型 `T`:由 `beforeOpen` 返回值反推,并透传给 `confirmConfig` 函数形态的
43
- * 入参;未传 `beforeOpen` 时默认 `T = void`,函数形态的 `data = undefined`。
44
- */
45
12
  export type ActionBtnProps<T = void> = Omit<ButtonProps, "loading"> & {
46
- /** 确认交互形态,仅在 confirmConfig 存在时生效,默认 "popconfirm" */
47
13
  confirmMode?: ActionConfirmMode;
48
- /**
49
- * 确认配置;存在时点击需经确认闸门,确认后才触发 click。
50
- * - 对象形态:静态确认配置(向后兼容)。
51
- * - 函数形态:`(data: T) => ActionBtnConfirmConfig`,`data` 来自 `beforeOpen`
52
- * 返回值;无 `beforeOpen` 时 `data = undefined`(T 默认 `void`)。
53
- */
54
14
  confirmConfig?: ActionBtnConfirmConfig | ((data: T) => ActionBtnConfirmConfig);
55
- /**
56
- * 点击后、弹层前的异步预取钩子。
57
- * - 返回值类型 `T` 反推给 `confirmConfig` 函数形态的入参。
58
- * - 失败时静默退出(不弹层、不触发 `@click` handler);调用方 [MUST] 在内部
59
- * 自行 catch 并显示反馈(如 `ElMessage.error`),忘记 catch 会"点了没反应"。
60
- * - 期间按钮显 loading 态(`innerLoading`);同 `confirmConfig` 一样消耗
61
- * 瞬时用户激活(详见 {@link ActionBtnConfirmConfig} 顶部注释)。
62
- */
63
15
  beforeOpen?: () => Promise<T>;
64
16
  };
65
- /**
66
- * ActionConfirm 组件 props(扁平,confirm 原语;可独立于 ActionBtn 消费)。
67
- * 触发元素由默认 slot 提供;弹层可见性由 `v-model:show` 声明式驱动。
68
- */
69
17
  export interface ActionConfirmProps {
70
- /** 确认交互形态 */
71
18
  mode: ActionConfirmMode;
72
- /** 确认标题 */
73
19
  title?: ActionConfirmTextResolver;
74
- /** 确认正文内容 */
75
20
  content?: ActionConfirmTextResolver;
76
- /** 确认按钮文案,默认"确定" */
77
21
  confirmText?: string;
78
- /** 取消按钮文案,默认"取消" */
79
22
  cancelText?: string;
80
- /** 确认按钮 type */
81
23
  type?: ButtonProps["type"];
82
- /**
83
- * 点击确认后调用。返回 Promise 时确认按钮 loading + 弹层保持不关,
84
- * **仅成功(fulfill)才关闭弹层**;失败(reject 或同步 throw)时清 loading、
85
- * 弹层保持打开,错误由 `submitFn` 内部自行 catch 反馈。
86
- */
87
24
  submitFn: () => void | Promise<void>;
88
25
  }
89
- /** ActionBtnGroup 按钮 size 枚举(对齐 element-plus ElButton size) */
90
26
  export type ActionBtnSize = "large" | "default" | "small";
91
- /**
92
- * ActionBtnGroup 单项配置
93
- * ---
94
- * 泛型 Ctx 由消费方决定形状(toolbar 传 ToolbarButtonContext / 表格 OPERATE 列传 row 上下文 / 等)。
95
- * 与 FormItem.render 三态对标:string(全局组件名)/ Component(对象/异步)/ functional((props) => VNode)。
96
- */
97
27
  export interface ActionBtnConfigItem<Ctx = void> {
98
- /** 唯一标识 */
99
28
  key: string;
100
- /** ActionBtn props 工厂(含 confirmConfig / beforeOpen / ElButton 全透传),与 props 二选一优先 */
101
29
  actionBtnProps?: (ctx: Ctx) => Record<string, any>;
102
- /** ElButton props 工厂,与 actionBtnProps 二选一 */
103
30
  props?: (ctx: Ctx) => Record<string, any>;
104
- /** 按钮文字;render 缺省时回退 */
105
31
  label?: string;
106
- /**
107
- * 按钮内容 render(对标 FormItem.render 三态);优先级高于 label。
108
- * - string:全局注册组件名
109
- * - Component:对象/异步组件
110
- * - functional:`(props: { ctx }) => VNode`——通过 `:ctx` prop 拿到上下文
111
- */
112
32
  render?: string | Component | ((props: {
113
33
  ctx: Ctx;
114
34
  }) => VNode);
115
- /** 显示条件,返回 false 跳过该项;缺省视为 true */
116
35
  show?: (ctx: Ctx) => boolean;
117
36
  }
118
- /** ActionBtnGroup props */
119
37
  export interface ActionBtnGroupProps<Ctx = void> {
120
- /** 按钮配置列表 */
121
38
  configs?: ActionBtnConfigItem<Ctx>[];
122
- /** 渲染上下文(透传给每项 actionBtnProps / props / render / show) */
123
39
  ctx: Ctx;
124
- /**
125
- * 默认按钮 size——未传时不强加 size(沿用 ElButton 自身默认);
126
- * 传入时作为基础 size 注入每项,业务侧 actionBtnProps / props 返回对象内显式 size 优先。
127
- */
128
40
  defaultSize?: ActionBtnSize;
129
41
  }
130
- /** HeightProvider props——见组件 JSDoc */
131
42
  export interface HeightProviderProps {
132
- /** px,视口可用高度(必填) */
133
43
  viewportHeight: number;
134
- /** px,默认槽可用高度兜底下限;超 viewportHeight 时会撑破父容器(有意设计) */
135
44
  minHeight?: number;
136
45
  }
137
- /** TabsMain 单个 tab 项配置 */
138
46
  export interface TabsMainItem {
139
- /** 唯一标识,v-model 值与槽名(#{key} / #header-{key})以此为准 */
140
47
  key: string;
141
- /** 标题文本,#header-{key} 槽缺省时回退 */
142
48
  title: string;
143
- /** 内容组件,#{key} 槽缺省时回退渲染 */
144
49
  component?: Component;
145
50
  }
146
- /** tabs 族跨节点高度联动 channel 的 inject payload */
147
51
  export interface TabsChannelPayload {
148
- /** 下一级 TabsMain 可消费的视口高度(响应式) */
149
52
  viewportHeight: ComputedRef<number>;
150
- /** 下一级嵌套深度(非响应式),顶层 = 1,每嵌套 +1;本期预埋不消费 */
151
53
  level: number;
152
54
  }
153
- /** [top, right, bottom, left] px——TabsMain 默认插槽容器内置 padding(top+bottom 同步从 channel viewportHeight 扣减) */
154
55
  export type TabsMainPadding = [number, number, number, number];
155
- /**
156
- * TabsHeader 视觉风格变体(与 level 字号解耦)。
157
- * - card:浏览器 tabs 风格(active 三面 border + 两侧 100vw separator,真打通)
158
- * - indicator:标准 2px 下划线
159
- * - indicator-compact:紧凑 1px 下划线
160
- * - plain:无装饰(active 加粗 + primary 字色)
161
- */
162
56
  export type TabsHeaderVariant = "card" | "indicator" | "indicator-compact" | "plain";
163
- /**
164
- * TabsMain props。
165
- *
166
- * 高度优先级:parentChannel inject > viewportHeight > inject `BODY_CONTENT_VIEWPORT_HEIGHT` > 0。
167
- * channel / parentChannel [MUST NOT] 响应式变更(setup 期快照,变更 console.error 忽略)。
168
- */
169
57
  export interface TabsMainProps {
170
- /** tab 配置列表 */
171
58
  tabs: TabsMainItem[];
172
- /** px,视口可用高度;未传时降级 BODY_CONTENT_VIEWPORT_HEIGHT 老链 */
173
59
  viewportHeight?: number;
174
- /** px,默认内容区高度兜底下限 */
175
60
  minHeight?: number;
176
- /** 作为父时的通道标识(字符串,内部 Symbol.for 跨包共享键) */
177
61
  channel?: string;
178
- /** 作为子时要消费的父通道标识 */
179
62
  parentChannel?: string;
180
- /** 默认插槽容器内置 padding [top,right,bottom,left],默认 [10,0,0,0];top+bottom 同步从 slot scope/channel viewportHeight 扣减 */
181
63
  padding?: TabsMainPadding;
182
- /** 精细化布局:false(默认) 不包 HeightProvider,默认槽 viewportHeight 直接给 viewportHeightFinal(不扣减),业务自然流;true 走 HeightProvider 精确扣 header reserve + padding 给 available */
183
64
  refine?: boolean;
184
- /** 精细化预留高度(px),从 viewportHeightFinal 中预扣,refine=false 时同样生效 */
185
65
  refineReduceHeight?: number;
186
- /** 显式指定 TabsHeader 视觉风格,不传则按 visualLevel 推导默认(L1=card / L2=indicator / L3=indicator-compact / L4=plain)。字号始终跟随 level,不受 variant 影响。 */
187
66
  variant?: TabsHeaderVariant;
188
67
  }
189
- /** BooleanTag 标签色彩类型(派生 ElTag type,不重定义) */
190
68
  export type BooleanTagType = NonNullable<TagProps["type"]>;
191
- /**
192
- * BooleanTag props——boolean 只读展示为彩色标签(纯展示,无交互 / 无 v-model)。
193
- * enum / number 状态在调用点一行映射为 boolean 传入(组件保持 boolean 纯粹)。
194
- */
195
69
  export interface BooleanTagProps {
196
- /** 待展示布尔值 */
197
70
  value: boolean;
198
- /** true 时标签文本,默认「是」 */
199
71
  activeText?: string;
200
- /** false 时标签文本,默认「否」 */
201
72
  inactiveText?: string;
202
- /** true 时标签色彩(派生 ElTag type),默认 success */
203
73
  activeTagType?: BooleanTagType;
204
- /** false 时标签色彩,默认 info */
205
74
  inactiveTagType?: BooleanTagType;
206
75
  }
@@ -1,17 +1,12 @@
1
1
  import { FormItemConfigList } from './types';
2
2
  import { ColProps } from 'element-plus';
3
3
  type __VLS_Props = {
4
- /** 所属父 item key(注册到父 FormMain exposeMap 的索引) */
5
4
  nestKey: string;
6
- /** 子表单配置列表 */
7
5
  list: FormItemConfigList;
8
6
  layout?: Partial<ColProps>;
9
7
  rowGutter?: number;
10
- /** 联结组件外环阴影颜色;缺省走 CSS 变量主题自适配(亮/暗),仅显式传时内联覆盖 */
11
8
  shadowColor?: string;
12
- /** 父 item 代表 span(P3 rebase 算因子用;helper 经 resolveLayoutSpan(layout) 传入) */
13
9
  parentSpan?: number;
14
- /** 是否叠本层嵌套布局 rebase(缺省 true;false = 逆向逃生口,layout 原样直透) */
15
10
  rebase?: boolean;
16
11
  };
17
12
  type __VLS_PublicProps = {
@@ -8,46 +8,29 @@ declare const _default: <T extends Record<string, any>>(__VLS_props: NonNullable
8
8
  } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, never>, "onUpdate:modelValue"> & ({
9
9
  modelValue?: T[];
10
10
  } & {
11
- /** 所属父 item key(注册到父 FormMain exposeMap 的索引) */
12
11
  nestKey: string;
13
- /** 每行子表单配置列表 */
14
12
  list: FormItemConfigList;
15
- /** 行稳定标识字段(指向 T 内稳定 id);缺省走内部自增 rowId */
16
13
  rowKey?: string;
17
- /** 新增行工厂;缺省 generateFormData(list) 产子默认对象 */
18
14
  itemFactory?: () => T;
19
- /** 最少行数(删到 min 禁删;硬约束走父 item rules 长度校验) */
20
15
  min?: number;
21
- /** 最多行数(达上限禁新增;硬约束走父 item rules 长度校验) */
22
16
  max?: number;
23
17
  layout?: Partial<ColProps>;
24
18
  rowGutter?: number;
25
19
  addText?: string;
26
20
  removeText?: string;
27
- /** 顶部自定义渲染(render-fn prop,替代 template slot;label 由父 FormItem 渲染) */
28
21
  headerRender?: (scope: {
29
22
  count: number;
30
23
  max: number;
31
24
  }) => VNodeChild;
32
- /** 底部自定义渲染;缺省 = 内置「新增」按钮 */
33
25
  footerRender?: (scope: {
34
26
  count: number;
35
27
  max: number;
36
28
  canAdd: boolean;
37
29
  add: () => void;
38
30
  }) => VNodeChild;
39
- /** 联结组件外环 + 每行分割阴影颜色 */
40
31
  shadowColor?: string;
41
- /** 父 item 代表 span(P3 rebase 算因子用;helper 经 resolveLayoutSpan(layout) 传入) */
42
32
  parentSpan?: number;
43
- /** 是否叠本层嵌套布局 rebase(缺省 true;false = 逆向逃生口,layout 原样直透) */
44
33
  rebase?: boolean;
45
- /**
46
- * 行删除二次确认(破坏性操作防误删):
47
- * - `true`(默认)→ 默认 popconfirm「确认删除该项?」(danger)
48
- * - `false` → 不弹确认,直删(回旧行为)
49
- * - 对象 → 自定义 ActionBtnConfirmConfig
50
- */
51
34
  removeConfirm?: boolean | ActionBtnConfirmConfig;
52
35
  }) & Partial<{}>> & import('vue').PublicProps;
53
36
  expose(exposed: import('vue').ShallowUnwrapRef<{}>): void;