@done-coding/admin-core 0.17.1-alpha.0 → 0.18.1-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 (342) hide show
  1. package/README.md +77 -1
  2. package/es/_virtual/_plugin-vue_export-helper.mjs +7 -6
  3. package/es/bridge/config-hook.mjs +49 -37
  4. package/es/bridge/index.mjs +152 -109
  5. package/es/bridge/layout.mjs +45 -31
  6. package/es/bridge/plugin.mjs +22 -12
  7. package/es/bridge/route.mjs +59 -50
  8. package/es/bridge/state.mjs +54 -39
  9. package/es/bridge/storage.mjs +18 -8
  10. package/es/bridge/theme/index.mjs +200 -97
  11. package/es/bridge/theme/persist.mjs +11 -7
  12. package/es/bridge/theme/system-dark.mjs +13 -6
  13. package/es/components/app-layout/AppAside.vue.mjs +4 -4
  14. package/es/components/app-layout/AppAside.vue2.mjs +37 -30
  15. package/es/components/app-layout/AppBody.vue.mjs +4 -4
  16. package/es/components/app-layout/AppBody.vue2.mjs +97 -60
  17. package/es/components/app-layout/AppBreadcrumb.vue.mjs +4 -4
  18. package/es/components/app-layout/AppBreadcrumb.vue2.mjs +59 -38
  19. package/es/components/app-layout/AppCollapseToggle.vue.mjs +4 -4
  20. package/es/components/app-layout/AppCollapseToggle.vue2.mjs +51 -42
  21. package/es/components/app-layout/AppFooter.vue.mjs +4 -4
  22. package/es/components/app-layout/AppFooter.vue2.mjs +15 -12
  23. package/es/components/app-layout/AppHeader.vue.mjs +4 -4
  24. package/es/components/app-layout/AppHeader.vue2.mjs +81 -58
  25. package/es/components/app-layout/AppLayout.vue.mjs +4 -4
  26. package/es/components/app-layout/AppLayout.vue2.mjs +148 -112
  27. package/es/components/app-layout/AppPage.vue.mjs +4 -4
  28. package/es/components/app-layout/AppPage.vue2.mjs +254 -197
  29. package/es/components/app-layout/AppShell.vue.mjs +44 -42
  30. package/es/components/app-layout/AppShell.vue2.mjs +2 -2
  31. package/es/components/app-layout/AppSidebar.vue.mjs +4 -4
  32. package/es/components/app-layout/AppSidebar.vue2.mjs +76 -59
  33. package/es/components/app-layout/AppTheme.vue.mjs +4 -4
  34. package/es/components/app-layout/AppTheme.vue2.mjs +69 -57
  35. package/es/components/app-layout/app-page-geometry.mjs +44 -42
  36. package/es/components/app-layout/keep-alive.mjs +27 -19
  37. package/es/components/app-layout/viewport.mjs +4 -3
  38. package/es/components/data-view/DataListView.vue.mjs +4 -4
  39. package/es/components/data-view/DataListView.vue2.mjs +133 -93
  40. package/es/components/data-view/DataListViewItem.vue.mjs +4 -4
  41. package/es/components/data-view/DataListViewItem.vue2.mjs +11 -9
  42. package/es/components/data-view/utils.mjs +36 -34
  43. package/es/components/display/ActionBtn.vue.mjs +94 -71
  44. package/es/components/display/ActionBtn.vue2.mjs +2 -2
  45. package/es/components/display/ActionBtnGroup.vue.mjs +54 -48
  46. package/es/components/display/ActionBtnGroup.vue2.mjs +2 -2
  47. package/es/components/display/ActionConfirm.vue.mjs +4 -4
  48. package/es/components/display/ActionConfirm.vue2.mjs +116 -92
  49. package/es/components/display/BooleanTag.vue.mjs +24 -18
  50. package/es/components/display/BooleanTag.vue2.mjs +2 -2
  51. package/es/components/display/HeightProvider.vue.mjs +37 -27
  52. package/es/components/display/HeightProvider.vue2.mjs +2 -2
  53. package/es/components/display/TabsHeader.vue.mjs +4 -4
  54. package/es/components/display/TabsHeader.vue2.mjs +86 -57
  55. package/es/components/display/TabsMain.vue.mjs +156 -125
  56. package/es/components/display/TabsMain.vue2.mjs +2 -2
  57. package/es/components/display/TabsNaturalFlow.vue.mjs +15 -11
  58. package/es/components/display/TabsNaturalFlow.vue2.mjs +2 -2
  59. package/es/components/display/TabsRefineFlow.vue.mjs +55 -42
  60. package/es/components/display/TabsRefineFlow.vue2.mjs +2 -2
  61. package/es/components/display/TabsTile.vue.mjs +4 -4
  62. package/es/components/display/TabsTile.vue2.mjs +204 -146
  63. package/es/components/display/WatchSize.vue.mjs +50 -30
  64. package/es/components/display/WatchSize.vue2.mjs +2 -2
  65. package/es/components/display/use-tabs-query-sync.mjs +21 -17
  66. package/es/components/form/FormItem.vue.mjs +4 -4
  67. package/es/components/form/FormItem.vue2.mjs +183 -121
  68. package/es/components/form/FormItemNestForm.vue.mjs +4 -4
  69. package/es/components/form/FormItemNestForm.vue2.mjs +38 -34
  70. package/es/components/form/FormItemNestFormList.vue.mjs +4 -4
  71. package/es/components/form/FormItemNestFormList.vue2.mjs +135 -106
  72. package/es/components/form/FormMain.vue.mjs +4 -4
  73. package/es/components/form/FormMain.vue2.mjs +226 -139
  74. package/es/components/form/FormRadioGroup.vue.mjs +67 -52
  75. package/es/components/form/FormRadioGroup.vue2.mjs +2 -2
  76. package/es/components/form/FormSearch.vue.mjs +4 -4
  77. package/es/components/form/FormSearch.vue2.mjs +194 -156
  78. package/es/components/form/FormSelect.vue.mjs +69 -42
  79. package/es/components/form/FormSelect.vue2.mjs +2 -2
  80. package/es/components/form/FormSubmitBtn.vue.mjs +30 -25
  81. package/es/components/form/FormSubmitBtn.vue2.mjs +2 -2
  82. package/es/components/form/FormSubmitPanel.vue.mjs +4 -4
  83. package/es/components/form/FormSubmitPanel.vue2.mjs +129 -96
  84. package/es/components/form/FormTree.vue.mjs +19 -16
  85. package/es/components/form/FormTree.vue2.mjs +2 -2
  86. package/es/components/form/FormVerifyCode.vue.mjs +58 -41
  87. package/es/components/form/FormVerifyCode.vue2.mjs +2 -2
  88. package/es/components/form/FormVerifyImage.vue.mjs +4 -4
  89. package/es/components/form/FormVerifyImage.vue2.mjs +62 -40
  90. package/es/components/form/form-search-utils.mjs +83 -52
  91. package/es/components/form/nest-form-item-list.mjs +63 -55
  92. package/es/components/form/nest-form-item.mjs +30 -30
  93. package/es/components/form/nest-registry.mjs +4 -4
  94. package/es/components/form/use-form-submit.mjs +18 -15
  95. package/es/components/form/use-layout-by-container.mjs +23 -15
  96. package/es/components/form/use-nest-form-list.mjs +19 -16
  97. package/es/components/form/use-nest-form.mjs +37 -28
  98. package/es/components/form/use-nest-layout-scale.mjs +11 -10
  99. package/es/components/form/utils.mjs +233 -145
  100. package/es/components/list-page/ListPage.vue.mjs +4 -4
  101. package/es/components/list-page/ListPage.vue2.mjs +313 -207
  102. package/es/components/list-page/use-sticky.mjs +45 -33
  103. package/es/components/menu/MenuItemSub.vue.mjs +47 -43
  104. package/es/components/menu/MenuItemSub.vue2.mjs +2 -2
  105. package/es/components/menu/MenuTree.vue.mjs +84 -61
  106. package/es/components/menu/MenuTree.vue2.mjs +2 -2
  107. package/es/components/misc/AutoRefresh.vue.mjs +4 -4
  108. package/es/components/misc/AutoRefresh.vue2.mjs +78 -53
  109. package/es/components/misc/AutoRefreshGroup.vue.mjs +4 -4
  110. package/es/components/misc/AutoRefreshGroup.vue2.mjs +54 -51
  111. package/es/components/misc/SelectModule.vue.mjs +54 -45
  112. package/es/components/misc/SelectModule.vue2.mjs +2 -2
  113. package/es/components/misc/TriggerAutoImport.vue.mjs +7 -5
  114. package/es/components/misc/TriggerAutoImport.vue2.mjs +2 -2
  115. package/es/components/modal/ModalConfirm.vue.mjs +4 -4
  116. package/es/components/modal/ModalConfirm.vue2.mjs +160 -125
  117. package/es/components/modal/ModalDetail.vue.mjs +50 -39
  118. package/es/components/modal/ModalDetail.vue2.mjs +2 -2
  119. package/es/components/modal/ModalForm.vue.mjs +63 -52
  120. package/es/components/modal/ModalForm.vue2.mjs +2 -2
  121. package/es/components/modal/ModalPorter.vue.mjs +51 -36
  122. package/es/components/modal/ModalPorter.vue2.mjs +2 -2
  123. package/es/components/modal/ModalShelf.vue.mjs +38 -28
  124. package/es/components/modal/ModalShelf.vue2.mjs +2 -2
  125. package/es/components/modal/modal-shelf-core.mjs +52 -36
  126. package/es/components/modal/modal-shelf-hierarchy.mjs +11 -9
  127. package/es/components/panel/PanelEditSwitch.vue.mjs +4 -4
  128. package/es/components/panel/PanelEditSwitch.vue2.mjs +88 -66
  129. package/es/components/panel/PanelItem.vue.mjs +4 -4
  130. package/es/components/panel/PanelItem.vue2.mjs +103 -77
  131. package/es/components/panel/PanelItemNestForm.vue.mjs +4 -4
  132. package/es/components/panel/PanelItemNestForm.vue2.mjs +61 -52
  133. package/es/components/panel/PanelItemNestPanel.vue.mjs +22 -20
  134. package/es/components/panel/PanelItemNestPanel.vue2.mjs +2 -2
  135. package/es/components/panel/PanelMain.vue.mjs +4 -4
  136. package/es/components/panel/PanelMain.vue2.mjs +92 -74
  137. package/es/components/panel/nest-panel-form.mjs +44 -38
  138. package/es/components/panel/nest-panel-item.mjs +18 -17
  139. package/es/components/slot-layout/SlotLayoutFlowAside.vue.mjs +4 -4
  140. package/es/components/slot-layout/SlotLayoutFlowAside.vue2.mjs +55 -42
  141. package/es/components/slot-layout/SlotLayoutTemplate.vue.mjs +11 -9
  142. package/es/components/slot-layout/SlotLayoutTemplate.vue2.mjs +2 -2
  143. package/es/components/table/TableMain.vue.mjs +4 -4
  144. package/es/components/table/TableMain.vue2.mjs +378 -275
  145. package/es/components/table/TableSkeleton.vue.mjs +4 -4
  146. package/es/components/table/TableSkeleton.vue2.mjs +95 -74
  147. package/es/components/table/TableToolbar.vue.mjs +4 -4
  148. package/es/components/table/TableToolbar.vue2.mjs +170 -154
  149. package/es/components/table/ToolbarButtons.vue.mjs +12 -10
  150. package/es/components/table/ToolbarButtons.vue2.mjs +2 -2
  151. package/es/components/table/constants.mjs +4 -3
  152. package/es/components/table/use-fill-height.mjs +12 -10
  153. package/es/components/table/use-table-skeleton.mjs +19 -15
  154. package/es/config/list-model.mjs +2 -2
  155. package/es/config/route.mjs +4 -3
  156. package/es/helpers/form.mjs +35 -25
  157. package/es/helpers/list-helper.mjs +59 -44
  158. package/es/hooks/activated.mjs +49 -33
  159. package/es/hooks/feel-size.mjs +39 -23
  160. package/es/hooks/menus-dispatch.mjs +68 -35
  161. package/es/hooks/timeout.mjs +29 -14
  162. package/es/hooks/use-breakpoint.mjs +35 -23
  163. package/es/hooks/use-channel-viewport-height.mjs +30 -20
  164. package/es/hooks/use-custom-breakpoint.mjs +48 -31
  165. package/es/hooks/use-observe-size.mjs +37 -20
  166. package/es/hooks/use-theme-apply.mjs +175 -124
  167. package/es/hooks/use-viewport-apply.mjs +39 -27
  168. package/es/index.mjs +239 -239
  169. package/es/inject/key.mjs +52 -41
  170. package/es/injectInfo.json.mjs +2 -2
  171. package/es/router/group-redirect.mjs +22 -16
  172. package/es/router/guard/index.mjs +26 -21
  173. package/es/router/guard/login.mjs +4 -2
  174. package/es/router/guard/permission.mjs +4 -2
  175. package/es/store/app.mjs +163 -123
  176. package/es/store/router-permission.mjs +75 -46
  177. package/es/store/user.mjs +100 -71
  178. package/es/style.css +769 -1
  179. package/es/utils/dom.mjs +20 -16
  180. package/es/utils/export.mjs +34 -18
  181. package/es/utils/id.mjs +5 -3
  182. package/es/utils/router.mjs +21 -14
  183. package/es/utils/theme-scale.mjs +50 -35
  184. package/es/utils/time.mjs +20 -14
  185. package/package.json +4 -3
  186. package/src/bridge/README.md +5 -0
  187. package/src/bridge/docs/README.md +72 -0
  188. package/src/components/README.md +84 -0
  189. package/src/components/app-layout/README.md +46 -0
  190. package/src/components/app-layout/docs/README-AppAside.md +69 -0
  191. package/src/components/app-layout/docs/README-AppBody.md +81 -0
  192. package/src/components/app-layout/docs/README-AppBreadcrumb.md +71 -0
  193. package/src/components/app-layout/docs/README-AppFooter.md +41 -0
  194. package/src/components/app-layout/docs/README-AppHeader.md +73 -0
  195. package/src/components/app-layout/docs/README-AppLayout.md +83 -0
  196. package/src/components/app-layout/docs/README-AppPage.md +80 -0
  197. package/src/components/app-layout/docs/README-AppSidebar.md +70 -0
  198. package/src/components/app-layout/docs/README-AppTheme.md +66 -0
  199. package/src/components/data-view/README.md +19 -0
  200. package/src/components/data-view/docs/README-DataListView.md +114 -0
  201. package/src/components/display/README.md +23 -0
  202. package/src/components/display/docs/README-ActionBtn.md +84 -0
  203. package/src/components/display/docs/README-ActionBtnGroup.md +96 -0
  204. package/src/components/display/docs/README-ActionConfirm.md +77 -0
  205. package/src/components/display/docs/README-BooleanTag.md +76 -0
  206. package/src/components/display/docs/README-HeightProvider.md +74 -0
  207. package/src/components/display/docs/README-TabsMain.md +99 -0
  208. package/src/components/display/docs/README-WatchSize.md +70 -0
  209. package/src/components/form/README.md +24 -0
  210. package/src/components/form/docs/README-FormItemNestForm.md +86 -0
  211. package/src/components/form/docs/README-FormItemNestFormList.md +93 -0
  212. package/src/components/form/docs/README-FormMain.md +101 -0
  213. package/src/components/form/docs/README-FormSearch.md +89 -0
  214. package/src/components/form/docs/README-FormSubmitBtn.md +72 -0
  215. package/src/components/form/docs/README-FormSubmitPanel.md +97 -0
  216. package/src/components/list-page/README.md +16 -0
  217. package/src/components/list-page/docs/README-ListPage.md +136 -0
  218. package/src/components/menu/README.md +19 -0
  219. package/src/components/menu/docs/README-MenuItemSub.md +53 -0
  220. package/src/components/menu/docs/README-MenuTree.md +76 -0
  221. package/src/components/misc/README.md +21 -0
  222. package/src/components/misc/docs/README-AutoRefresh.md +74 -0
  223. package/src/components/misc/docs/README-AutoRefreshGroup.md +74 -0
  224. package/src/components/misc/docs/README-SelectModule.md +72 -0
  225. package/src/components/modal/README.md +21 -0
  226. package/src/components/modal/docs/README-ModalConfirm.md +105 -0
  227. package/src/components/modal/docs/README-ModalDetail.md +103 -0
  228. package/src/components/modal/docs/README-ModalForm.md +97 -0
  229. package/src/components/modal/docs/README-ModalPorter.md +92 -0
  230. package/src/components/modal/docs/README-ModalShelf.md +115 -0
  231. package/src/components/panel/README.md +19 -0
  232. package/src/components/panel/docs/README-PanelMain.md +149 -0
  233. package/src/components/slot-layout/README.md +17 -0
  234. package/src/components/slot-layout/docs/README-SlotLayoutFlowAside.md +83 -0
  235. package/src/components/slot-layout/docs/README-SlotLayoutTemplate.md +73 -0
  236. package/src/components/table/README.md +17 -0
  237. package/src/components/table/docs/README-TableMain.md +140 -0
  238. package/src/hooks/README.md +5 -0
  239. package/src/hooks/docs/README.md +49 -0
  240. package/types/bridge/config-hook.d.ts +68 -0
  241. package/types/bridge/index.d.ts +411 -0
  242. package/types/bridge/layout.d.ts +40 -0
  243. package/types/bridge/plugin.d.ts +18 -0
  244. package/types/bridge/route.d.ts +20 -1
  245. package/types/bridge/state.d.ts +14 -0
  246. package/types/bridge/storage.d.ts +9 -0
  247. package/types/bridge/theme/index.d.ts +7 -0
  248. package/types/bridge/theme/persist.d.ts +12 -0
  249. package/types/bridge/theme/system-dark.d.ts +12 -0
  250. package/types/bridge/theme/types.d.ts +238 -0
  251. package/types/components/app-layout/AppAside.vue.d.ts +1 -0
  252. package/types/components/app-layout/AppCollapseToggle.vue.d.ts +3 -0
  253. package/types/components/app-layout/AppHeader.vue.d.ts +3 -0
  254. package/types/components/app-layout/AppLayout.vue.d.ts +12 -0
  255. package/types/components/app-layout/AppPage.vue.d.ts +17 -0
  256. package/types/components/app-layout/AppSidebar.vue.d.ts +2 -0
  257. package/types/components/app-layout/app-page-geometry.d.ts +48 -0
  258. package/types/components/app-layout/keep-alive.d.ts +17 -0
  259. package/types/components/app-layout/types.d.ts +125 -0
  260. package/types/components/app-layout/viewport.d.ts +28 -0
  261. package/types/components/data-view/DataListViewItem.vue.d.ts +8 -0
  262. package/types/components/data-view/index.d.ts +4 -0
  263. package/types/components/data-view/types.d.ts +42 -0
  264. package/types/components/data-view/utils.d.ts +3 -0
  265. package/types/components/display/TabsHeader.vue.d.ts +2 -0
  266. package/types/components/display/TabsMain.vue.d.ts +2 -0
  267. package/types/components/display/TabsRefineFlow.vue.d.ts +1 -0
  268. package/types/components/display/TabsTile.vue.d.ts +247 -12
  269. package/types/components/display/WatchSize.vue.d.ts +9 -0
  270. package/types/components/display/index.d.ts +37 -1
  271. package/types/components/display/types.d.ts +163 -0
  272. package/types/components/display/use-tabs-query-sync.d.ts +29 -0
  273. package/types/components/form/FormItemNestForm.vue.d.ts +5 -0
  274. package/types/components/form/FormItemNestFormList.vue.d.ts +17 -0
  275. package/types/components/form/FormVerifyCode.vue.d.ts +9 -0
  276. package/types/components/form/FormVerifyImage.vue.d.ts +1 -0
  277. package/types/components/form/form-search-utils.d.ts +34 -0
  278. package/types/components/form/nest-form-item-list.d.ts +28 -0
  279. package/types/components/form/nest-form-item.d.ts +21 -0
  280. package/types/components/form/nest-registry.d.ts +14 -0
  281. package/types/components/form/types.d.ts +208 -8
  282. package/types/components/form/use-form-submit.d.ts +13 -0
  283. package/types/components/form/use-layout-by-container.d.ts +23 -0
  284. package/types/components/form/use-nest-form-list.d.ts +13 -0
  285. package/types/components/form/use-nest-form.d.ts +15 -0
  286. package/types/components/form/use-nest-layout-scale.d.ts +12 -0
  287. package/types/components/form/utils.d.ts +56 -1
  288. package/types/components/list-page/ListPage.vue.d.ts +6 -0
  289. package/types/components/list-page/types.d.ts +50 -2
  290. package/types/components/list-page/use-sticky.d.ts +23 -0
  291. package/types/components/misc/index.d.ts +6 -1
  292. package/types/components/misc/types.d.ts +7 -0
  293. package/types/components/modal/ModalConfirm.vue.d.ts +29 -0
  294. package/types/components/modal/index.d.ts +7 -1
  295. package/types/components/modal/modal-shelf-core.d.ts +3 -0
  296. package/types/components/modal/modal-shelf-hierarchy.d.ts +4 -0
  297. package/types/components/modal/modal-shelf-types.d.ts +34 -0
  298. package/types/components/modal/types.d.ts +63 -2
  299. package/types/components/panel/PanelItemNestForm.vue.d.ts +6 -0
  300. package/types/components/panel/PanelItemNestPanel.vue.d.ts +5 -0
  301. package/types/components/panel/nest-panel-form.d.ts +21 -0
  302. package/types/components/panel/nest-panel-item.d.ts +14 -0
  303. package/types/components/panel/types.d.ts +52 -1
  304. package/types/components/slot-layout/SlotLayoutTemplate.vue.d.ts +21 -0
  305. package/types/components/slot-layout/types.d.ts +4 -0
  306. package/types/components/table/constants.d.ts +8 -0
  307. package/types/components/table/types.d.ts +140 -9
  308. package/types/components/table/use-fill-height.d.ts +14 -0
  309. package/types/components/table/use-table-skeleton.d.ts +16 -0
  310. package/types/config/list-model.d.ts +29 -0
  311. package/types/config/route.d.ts +2 -0
  312. package/types/helpers/form.d.ts +5 -0
  313. package/types/helpers/list-helper.d.ts +26 -0
  314. package/types/helpers/types.d.ts +11 -0
  315. package/types/hooks/activated.d.ts +23 -0
  316. package/types/hooks/feel-size.d.ts +2 -0
  317. package/types/hooks/menus-dispatch.d.ts +4 -0
  318. package/types/hooks/timeout.d.ts +4 -0
  319. package/types/hooks/use-channel-viewport-height.d.ts +8 -0
  320. package/types/hooks/use-custom-breakpoint.d.ts +19 -0
  321. package/types/hooks/use-observe-size.d.ts +29 -0
  322. package/types/hooks/use-theme-apply.d.ts +23 -0
  323. package/types/hooks/use-viewport-apply.d.ts +12 -0
  324. package/types/inject/key.d.ts +163 -0
  325. package/types/injectInfo.json.d.ts +1 -1
  326. package/types/router/group-redirect.d.ts +9 -0
  327. package/types/router/guard/index.d.ts +13 -0
  328. package/types/router/guard/login.d.ts +1 -0
  329. package/types/router/guard/permission.d.ts +1 -0
  330. package/types/router/guard/types.d.ts +3 -0
  331. package/types/store/app.d.ts +27 -0
  332. package/types/store/router-permission.d.ts +53 -0
  333. package/types/store/user.d.ts +24 -0
  334. package/types/types/dot-path.d.ts +8 -0
  335. package/types/types/route.d.ts +45 -0
  336. package/types/types/utility-types.d.ts +7 -0
  337. package/types/utils/dom.d.ts +22 -0
  338. package/types/utils/export.d.ts +16 -1
  339. package/types/utils/id.d.ts +1 -0
  340. package/types/utils/router.d.ts +2 -0
  341. package/types/utils/theme-scale.d.ts +31 -0
  342. package/types/utils/time.d.ts +1 -0
@@ -0,0 +1,81 @@
1
+ # AppBody(内容主体·RouterView + KeepAlive + 面包屑 affix)
2
+
3
+ > 页面内容渲染体:内置 RouterView(depth-0 KeepAlive)+ 内容区顶部面包屑 affix + #footer 槽 + 视口高度链 provide。
4
+ > 范式页:`apps/reference/src/App.vue`(AppLayout 持 AppBody 塞进 shell 默认槽)、`apps/reference/src/pages/app-layout/layout/`(NoBreadcrumb/NoFooter/NoHeader/NoSidebar 显隐变体)
5
+
6
+ ## 定位
7
+
8
+ - AppLayout 内部持有(喂 menuFlatList 守高度链),经 shell 默认槽塞入——消费方通常不直接挂载
9
+ - 默认内容 = 内置 RouterView + KeepAlive(keepAliveMaxCount 读 `bridge.APP_ROUTER_CONFIG`)+ 面包屑 affix(showBreadcrumb 经 appStore 控制)
10
+ - 高度链源头:provide `BODY_CONTENT_VIEWPORT_HEIGHT` / `SCOPE_VIEWPORT_MAX_HEIGHT`(新老 key 并列同源)/ `BODY_CONTENT_VIEWPORT_RECT` / `BODY_CONTENT_VIEWPORT_INSET`——后代页面(AppPage 等)消费
11
+ - #footer 槽接 AppLayout 组装 shell 吐出的 Footer 组件(内置默认吐 AppFooter)
12
+
13
+ ## 快速上手(最小可用)
14
+
15
+ AppBody 由 AppLayout 自动装配,无需手动挂载——总装配见 AppLayout 文档:
16
+
17
+ ```vue
18
+ <AppLayout
19
+ :bridge="appCoreBridge"
20
+ :appStore="appStore"
21
+ :userStore="userStore"
22
+ :watermarkContent="watermarkContent"
23
+ >
24
+ <template #brand><AppBrand /></template>
25
+ <template #userEntry><UserHeaderAction /></template>
26
+ <template #aside><ChatAsidePanel /></template>
27
+ </AppLayout>
28
+ ```
29
+
30
+ **要点**:
31
+
32
+ - `menuFlatList` 扁平菜单:面包屑匹配(route.matched 逐项查 menuFlatList 出链)+ 子零件高度链
33
+ - 路由级 keepAlive:路由 meta.keepAlive 开 + 「真叶子」判定(matched 链最深 component-bearing 记录)才进 KeepAlive;缓存数上限 `bridge.APP_ROUTER_CONFIG.keepAliveMaxCount`
34
+ - 视口高重算:激活态绑 resize 监听重算(useActivated 绑解成对),KeepAlive 失活自动解绑
35
+ - 面包屑:showBreadcrumb(appStore)开时内容区顶部 ElAffix 吸附,affix 高度经 `bridge.APP_LAYOUT_BREADCRUMB_CONFIG` 驱动(bridge.update 后跟随)
36
+
37
+ ## 能力边界 / 按需使用
38
+
39
+ - **面包屑 affix 是自动行为,零配置**:AppBody 内嵌 ElAffix 面包屑——显隐由 `appStore.showBreadcrumb` 控制、高度经 `bridge.APP_LAYOUT_BREADCRUMB_CONFIG` 驱动,「有链时内容区自动让位 affix 高度」由内部承担。常规页面无需挂任何 prop。
40
+ - **KeepAlive 承接是自动行为,零配置**:开不开缓存由路由 `meta.keepAlive` + 真叶子判定声明(缓存上限读 bridge config)——本组件无开关,页面按需声明即可。
41
+ - `menuFlatList`:AppLayout 内部已喂入(守高度链)——消费方通常不需要自己传;仅直接挂载 AppBody(非经 AppLayout)时才需要。
42
+ - `#footer` 槽:默认已由 AppLayout 组装 shell 吐出的 Footer 组件填好(内置吐 AppFooter)——仅自供 shell 时才需要接管。
43
+ - **完整能力演示**(NoBreadcrumb/NoFooter/NoHeader/NoSidebar 显隐变体):`apps/reference/src/pages/app-layout/layout/`
44
+
45
+ ## API
46
+ > ⚠️ API 以 types.ts 与组件源码为真相源;与文档冲突时以源码为准。
47
+
48
+ ### Props
49
+
50
+ | name | type | 默认 | 语义 |
51
+ | --- | --- | --- | --- |
52
+ | `menuFlatList` | `RouteMetaResolveRaw[]` | `() => []` | 扁平菜单(面包屑匹配 + 子零件高度链) |
53
+
54
+ ### Emits
55
+
56
+
57
+
58
+ ### Slots
59
+
60
+ | 槽 | scope | 语义 |
61
+ | --- | --- | --- |
62
+ | `#footer` | 无 | AppLayout 组装 shell 吐出的 Footer 组件落点 |
63
+
64
+ 默认内容 = 内置 RouterView + KeepAlive(keepAliveMaxCount 读 bridge.APP_ROUTER_CONFIG)——不提供可替换的默认 slot。
65
+
66
+ ### Expose
67
+
68
+
69
+
70
+ ## 反模式 / 注意
71
+
72
+ - **勿手写 RouterView 双分支**:keepAlive 判据(真叶子 + meta.keepAlive 合并语义)与渲染 key 策略(叶子按 route.path 按 params 隔离、壳按壳 record path 稳定单实例)由 `keep-alive.ts` 内部工具承担,[MUST NOT] 自造
73
+ - 高度链几何真相由 AppBody 写、后代只读(readonly 包装)——裸 ref 下放后代一句 `.value=` 即反向污染(写只读视图 dev warn + no-op)
74
+ - 面包屑高度经 bridge.APP_LAYOUT_BREADCRUMB_CONFIG 追踪,勿静态快照
75
+
76
+ ## 关联
77
+
78
+ - 内部工具:`keep-alive.ts`(isKeepAliveRoute / keepAliveRouteKey,不导出)
79
+ - 面包屑:`AppBreadcrumb`(affix 内嵌 + `@show` 让位)
80
+ - 注入键:`APP_LAYOUT_APP_STORE_KEY` / `APP_LAYOUT_BRIDGE_KEY` / `BODY_CONTENT_VIEWPORT_HEIGHT` / `BODY_CONTENT_VIEWPORT_RECT` / `BODY_CONTENT_VIEWPORT_INSET` / `SCOPE_VIEWPORT_MAX_HEIGHT`
81
+ - 范式页:`apps/reference/src/App.vue`、`apps/reference/src/pages/app-layout/layout/`
@@ -0,0 +1,71 @@
1
+ # AppBreadcrumb(面包屑积木)
2
+
3
+ > 面包屑积木:menuFlatList 扁平菜单匹配 route.matched 出链,ElBreadcrumb 渲染;emit show 报有链/无链。
4
+ > 使用场景:内置 AppBody 已内嵌(ElAffix 顶部吸附);自供 shell/自定义内容区可按需直引。
5
+
6
+ ## 定位
7
+
8
+ - 链来源:route.matched 逐项在 menuFlatList 中按 path 命中 → 面包屑链(无链 = 空)
9
+ - 高度由 `height` 指定(px),链路渲染 ElBreadcrumbItem(to = item.path)
10
+ - `show` emit(immediate watch):有链 true / 无链 false——宿主(AppBody)据此让出内容区高度(affix 高度)
11
+
12
+ ## 快速上手(最小可用)
13
+
14
+ 常规页面无需直引(见能力边界);仅自供内容区直引时提供 `height` + `menuFlatList` 两必填 prop(形态同 AppBody 内嵌用法):
15
+
16
+ ```vue
17
+ <AppBreadcrumb
18
+ :height="24"
19
+ :menuFlatList="menuFlatList"
20
+ @show="onAffixShow"
21
+ />
22
+ ```
23
+
24
+ **要点**:
25
+
26
+ - 有链才渲染(v-show + show emit);无链时高度让位由宿主处理
27
+ - `show` emit 是 immediate watch——挂载即报当前状态
28
+ - 匹配是 path 精确命中(route.matched 逐项 find)
29
+
30
+ ## 能力边界 / 按需使用
31
+
32
+ - **常规页面零配置——勿重复直引**:AppBody 已内嵌 affix 面包屑(显隐 `appStore.showBreadcrumb`、高度 `bridge.APP_LAYOUT_BREADCRUMB_CONFIG`),常规页面 [MUST NOT] 再叠一层直引。
33
+ - **仅自供内容区/自定义 shell 才直引**——判据:宿主不是 AppBody。直引时提供 `height` + `menuFlatList` 两必填 prop,并自行处理 `@show` 高度让位(内容区减去 height)。
34
+ - 链路 = route.matched ∩ menuFlatList——中间页未登记进 menuFlatList 则不出现(可预期,无需处理)。
35
+ - **完整能力演示**(NoBreadcrumb 变体):`apps/reference/src/pages/app-layout/layout/`
36
+
37
+ ## API
38
+ > ⚠️ API 以 types.ts 与组件源码为真相源;与文档冲突时以源码为准。
39
+
40
+ ### Props
41
+
42
+ | name | type | 默认 | 语义 |
43
+ | --- | --- | --- | --- |
44
+ | `height` | `number`(必填) | — | 面包屑高度 px |
45
+ | `menuFlatList` | `RouteMetaResolveRaw[]`(必填) | — | 匹配 route.matched 出面包屑链 |
46
+
47
+ ### Emits
48
+
49
+ | 事件 | 载荷 | 语义 |
50
+ | --- | --- | --- |
51
+ | `show` | `status: boolean` | 有链 true / 无链 false(immediate watch) |
52
+
53
+ ### Slots
54
+
55
+
56
+
57
+ ### Expose
58
+
59
+
60
+
61
+ ## 反模式 / 注意
62
+
63
+ - 链路 = route.matched ∩ menuFlatList——未登记进 menuFlatList 的中间页不出现(可预期)
64
+ - 自身只报 show 状态,高度让位(内容区减去 height)由宿主(AppBody affix 逻辑)处理
65
+ - 内置 AppBody 已内嵌——常规页面 [MUST NOT] 再叠一层直引面包屑
66
+
67
+ ## 关联
68
+
69
+ - 宿主:`AppBody`(ElAffix 内嵌 + contentViewHeight 让位)
70
+ - 配置:bridge.APP_LAYOUT_BREADCRUMB_CONFIG(高度,bridge.update 后跟随)
71
+ - 范式页:`apps/reference/src/pages/app-layout/layout/`(NoBreadcrumb 变体)
@@ -0,0 +1,41 @@
1
+ # AppFooter(底部状态条积木)
2
+
3
+ > 底部状态条积木:零 props/emits/slots/expose——高度与样式完全由 `appStore.footerStyle` 驱动(inject APP_LAYOUT_APP_STORE_KEY 直取),随 store 变化 0.3s 过渡。
4
+ > 使用场景:AppLayout 组装 shell 吐出的 Footer 组件引用,经 AppBody #footer 槽落位(内置默认 AppShell 吐 AppFooter)。
5
+
6
+ ## 定位
7
+
8
+ AppFooter 是族内最薄的积木:自身无任何对外接口(无 props / emits / slots / expose),只做一件事——inject 应用 store 窄化实例(`APP_LAYOUT_APP_STORE_KEY`),把 `appStore.footerStyle` 绑到根盒 `:style` 上渲染底部状态条(高度/留白/阴影由 store 驱动,阴影走主题 var)。显隐与高度变化全部由 AppLayout/store 侧控制,消费方不直接挂载、也无可配置项。
9
+
10
+ ## 能力边界 / 按需使用
11
+
12
+ - **零配置、零 props——样式与显隐全由 `appStore.footerStyle` 驱动**(随 store 变化 0.3s 过渡):要改高度/显隐走 store(footerStyle),[MUST NOT] 给 AppFooter 加 props 透传;消费方不直接挂载(内置经典布局已经 shell → AppBody #footer 自动落位)。**完整能力演示**(NoFooter 变体):`apps/reference/src/pages/app-layout/layout/`
13
+
14
+ ## API
15
+
16
+ ### Props
17
+
18
+
19
+
20
+ ### Emits
21
+
22
+
23
+
24
+ ### Slots
25
+
26
+
27
+
28
+ ### Expose
29
+
30
+
31
+
32
+ ## 反模式 / 注意
33
+
34
+ - **勿给 AppFooter 加 props 透传**:其样式是 store 真相源(footerStyle),不是 prop 驱动——要改高度/显隐走 store
35
+ - 消费方不应直接挂载——内置经典布局已经 shell → AppBody #footer 自动落位
36
+
37
+ ## 关联
38
+
39
+ - 落位链:AppLayout → AppShell 默认 scoped slot(`AppShellDefaultSlotScope`:`{ Footer: Component }`)→ AppBody #footer
40
+ - store:`APP_LAYOUT_APP_STORE_KEY`(footerStyle 驱动)
41
+ - 范式页:`apps/reference/src/pages/app-layout/layout/`(NoFooter 变体)
@@ -0,0 +1,73 @@
1
+ # AppHeader(顶栏积木)
2
+
3
+ > 顶栏布局积木:#left 品牌/业务入口 + 路由大模块菜单 + #right 操作区(userEntry/settings/themeSwitcher 落位)。
4
+ > 范式页:`apps/reference/src/pages/app-layout/shell/`(自供 shell 积木直引)、`apps/reference/src/pages/app-layout/layout/`(NoHeader 显隐变体)
5
+
6
+ ## 定位
7
+
8
+ - **何时用**:内置 AppShell 经典布局已直引;自供 shell 时按需复用
9
+ - #left = 品牌/业务入口(AppLayout `#brand` 锚落位);#right = userEntry/settings/themeSwitcher 操作区
10
+ - 中间区 = 路由大模块菜单(menus 渲染,点击高亮 activeModulePath)
11
+ - 整体显隐由 AppLayout 间接控制(store headerStyle.height=0 视觉收起 + dom 保留)
12
+
13
+ ## 快速上手(最小可用)
14
+
15
+ 经 AppLayout 内容锚填充后由 shell 落位(App.vue 范式——#brand/#userEntry 即 Header #left/#right 的内容来源):
16
+
17
+ ```vue
18
+ <AppLayout :bridge="appCoreBridge" :appStore="appStore" :userStore="userStore">
19
+ <template #brand><AppBrand /></template>
20
+ <template #userEntry><UserHeaderAction /></template>
21
+ </AppLayout>
22
+ ```
23
+
24
+ **要点**:
25
+
26
+ - 自供 shell 直引积木时,把 AppLayout 内容锚转发到对应槽(见 AppSidebar 文档的 DemoCustomShell 槽转发范式)
27
+ - `menus` 渲染路由大模块(带 menuIcon 时图标 + 标题);`menuFlatList` 扁平菜单(必填)供内部匹配
28
+
29
+ ## 能力边界 / 按需使用
30
+
31
+ - **`show` 勿用于显隐**:声明必填但模板未消费(仅预留未来定位子元素 v-if 接口)——整体显隐由 AppLayout 经 store 间接控制(`headerStyle.height=0` 视觉收起 + dom 保留),默认即够用,[MUST NOT] 自行传值。
32
+ - **中间区模块菜单按需**:`menus` / `activeMenu` / `activeModuleMenu` 仅当需要「路由大模块菜单」时才填(默认空数组即无中间菜单区);`menuFlatList` 必填(内部匹配)。
33
+ - `#left` / `#right` 槽内容来自 AppLayout 内容锚转发(`#brand` → `#left`;`#userEntry` / `#settings` / `#themeSwitcher` → `#right`)——内置 shell 零配置;自供 shell 直引时按槽转发范式接住。
34
+ - **完整能力演示**(自供 shell 积木直引 + NoHeader 变体):`apps/reference/src/pages/app-layout/shell/`、`apps/reference/src/pages/app-layout/layout/`
35
+
36
+ ## API
37
+ > ⚠️ API 以 types.ts 与组件源码为真相源;与文档冲突时以源码为准。
38
+
39
+ ### Props
40
+
41
+ | name | type | 默认 | 语义 |
42
+ | --- | --- | --- | --- |
43
+ | `show` | `boolean`(必填) | — | ⚠️ 模板内实际未消费(仅预留未来定位子元素 v-if 接口,源码注释口径) |
44
+ | `menus` | `RouteMetaResolveRaw[]` | `() => []` | 模块菜单 |
45
+ | `activeMenu?` | `RouteMetaResolveRaw` | 无 | 聚焦的路由菜单 |
46
+ | `activeModuleMenu?` | `RouteMetaResolveRaw` | 无 | 聚焦的模块菜单 |
47
+ | `menuFlatList` | `RouteMetaResolveRaw[]`(必填) | — | 扁平菜单 |
48
+
49
+ ### Emits
50
+
51
+
52
+
53
+ ### Slots
54
+
55
+ | 槽 | scope | 语义 |
56
+ | --- | --- | --- |
57
+ | `#left` | 无 | 品牌/业务入口(AppLayout #brand 落位) |
58
+ | `#right` | 无 | userEntry/settings/themeSwitcher 操作区 |
59
+
60
+ ### Expose
61
+
62
+
63
+
64
+ ## 反模式 / 注意
65
+
66
+ - **`show` 勿用于显隐控制**:声明必填但模板未消费——整体显隐由 AppLayout 经 store 间接控制(headerStyle.height=0 视觉收起 + dom 保留)
67
+ - 主题切换器不属 Header 私有:已解耦为 `AppTheme`,经 shell #right 注入(默认内容仍是 AppTheme,经典布局 1:1 镜像)
68
+
69
+ ## 关联
70
+
71
+ - 内容锚:`#brand` → `#left`;`#userEntry` / `#settings` / `#themeSwitcher` → `#right`(落位见 AppLayout 文档)
72
+ - 主题切换:`AppTheme`(themeSwitcher 默认内容)
73
+ - 范式页:`apps/reference/src/pages/app-layout/shell/`、`apps/reference/src/pages/app-layout/layout/`
@@ -0,0 +1,83 @@
1
+ # AppLayout(应用布局总控·数据桥)
2
+
3
+ > 应用壳顶层组件:bridge/appStore/userStore 三注入 provide 子树 + 5 个内容锚(brand/userEntry/settings/themeSwitcher/aside)+ 内置默认经典布局 shell(布局插件可自供 shell 替换)。
4
+ > 范式页:`apps/reference/src/App.vue`(族总装配)、`apps/reference/src/pages/app-layout/shell/`(自供 shell)
5
+
6
+ ## 定位
7
+
8
+ - **何时用**:应用根组件——任何页面级应用的最外层骨架(App.vue 直接挂载)
9
+ - **何时不用**:布局形态深度定制时仍用它——通过布局插件自供 shell(AppShell 契约)替换内置默认,AppLayout 只承担数据桥/机制
10
+ - 职责边界:数据桥(三注入)+ 内容锚转发 + 水印;布局形态(sidebar/header 落位、折叠策略)归 shell(内置默认 AppShell = 经典布局 1:1 镜像)
11
+ - 页面内容**不经 AppLayout 默认 slot**——AppLayout 持 AppBody 塞进 shell 默认槽,AppBody 渲染 RouterView(见 AppBody 文档)
12
+
13
+ ## 快速上手(最小可用)
14
+
15
+ App.vue 总装配——三个必填注入 + 两个必填内容锚即完整可跑:
16
+
17
+ ```vue
18
+ <AppLayout :bridge="appCoreBridge" :appStore="appStore" :userStore="userStore">
19
+ <template #brand><AppBrand /></template>
20
+ <template #userEntry><UserHeaderAction /></template>
21
+ </AppLayout>
22
+ ```
23
+
24
+ **要点**:
25
+
26
+ - `bridge` / `appStore` / `userStore` 三实例经 props 注入后 provide 子组件(`APP_LAYOUT_BRIDGE_KEY` / `APP_LAYOUT_APP_STORE_KEY` / `USER_STORE_KEY`)——主题切换、布局配置等跨层能力靠它们直读直写(见 AppTheme 文档)
27
+ - 内容锚只填「业务语义」,**落位权归 shell**(经典布局落位:brand → Header #left;userEntry/settings/themeSwitcher → Header #right;aside → AppAside 默认槽)
28
+
29
+ ## 能力边界 / 按需使用
30
+
31
+ - **内容锚按需填**:`#brand` / `#userEntry` 是应用根必填(品牌 + 用户入口,缺则 Header 落位区空);`#settings` / `#themeSwitcher` / `#aside` 默认可缺省——没有对应能力(设置入口 / 主题切换 / 右侧面板)就不填,shell 对应落位区空渲染。
32
+ - `watermarkContent`:默认不展示水印;仅需要页面水印时填内容(空数组/空串/undefined 即关闭;显隐走 content 切换,无独立开关 prop)。
33
+ - `sidebarAboveHeader`:默认 `false` 即够用;仅当 sidebar 需要 z-index 盖住 header 悬浮时开。
34
+ - **布局形态深度定制**:内置默认经典布局 shell 已可用(行为基线 [MUST NOT] 借重构改);仅当落位/折叠策略不满足时才走布局插件自供 shell(AppShell 契约)——AppLayout 本身不动。
35
+ - **完整能力演示**(五锚全填 + 水印 + 自供 shell):`apps/reference/src/App.vue`、`apps/reference/src/pages/app-layout/shell/`——能力展示,非最小起点。
36
+
37
+ ## API
38
+ > ⚠️ API 以 types.ts 与组件源码为真相源;与文档冲突时以源码为准。
39
+
40
+ ### Props
41
+
42
+ | name | type | 默认 | 语义 |
43
+ | --- | --- | --- | --- |
44
+ | `bridge` | `AppLayoutBridgeSlice`(必填) | — | 布局桥窄化实例,注入后 provide 子组件(APP_LAYOUT_BRIDGE_KEY) |
45
+ | `appStore` | `AppLayoutAppStoreSlice<UserInfo>`(必填) | — | 应用 store 窄化实例(APP_LAYOUT_APP_STORE_KEY) |
46
+ | `userStore` | `AppLayoutUserStoreSlice<UserInfo>`(必填) | — | 用户 store 窄化实例(USER_STORE_KEY) |
47
+ | `watermarkContent` | `WatermarkProps["content"]` | 无默认 | 水印内容;空数组/空串/undefined 则关闭水印 |
48
+ | `sidebarAboveHeader` | `boolean` | `false` | sidebar z-index 高于 header |
49
+
50
+ ### Emits
51
+
52
+
53
+
54
+ ### Slots
55
+
56
+ | 槽 | scope | 语义 |
57
+ | --- | --- | --- |
58
+ | `#brand` | 无 | 品牌/应用名(经 shell 落位 Header #left) |
59
+ | `#userEntry` | 无 | 用户入口(登录态/用户下拉,经 shell 落位 Header #right) |
60
+ | `#settings` | 无 | 设置入口(经 shell 落位 Header #right,紧随 userEntry) |
61
+ | `#themeSwitcher` | `AppShellAnchorScope`(`{ Default?: Component }`,缺省 = 内置 AppTheme) | 主题切换(业务可覆盖默认内容) |
62
+ | `#aside` | 无 | 右侧补充区内容(经 shell 落位 AppAside 默认槽) |
63
+
64
+ **无默认 slot**——页面内容不经 AppLayout,而是经 shell 默认槽 → AppBody 渲染 RouterView。
65
+
66
+ ### Expose
67
+
68
+
69
+
70
+ ## 反模式 / 注意
71
+
72
+ - **别找 AppLayout 的默认 slot**:页面内容由 AppBody(内置 RouterView)渲染,AppLayout 只承接内容锚
73
+ - **内容锚只填内容、不决定落位**:落位权归 shell;自供 shell 时按 AppShell 契约接住整组内容锚(v-for 透传)
74
+ - **布局形态改动不动 AppLayout**:经典布局行为基线在内置 AppShell 模板([MUST NOT] 借重构改其行为),定制布局走布局插件自供 shell
75
+ - **水印显隐走 content 切换**,无独立开关 prop
76
+
77
+ ## 关联
78
+
79
+ - 布局插件自供 shell 契约:`AppShellProps` / `AppShellEmits`(空)/ `AppShellDefaultSlotScope`(`{ Footer: Component }`)/ `AppShellAnchorScope` / `AppShellSlots`(types.ts)
80
+ - 内部默认 shell:`AppShell`(经典布局 1:1 镜像,不导出)
81
+ - 内容主体:`AppBody`(AppLayout 持之喂 menuFlatList 守高度链);页面容器:`AppPage`
82
+ - 主题切换:`AppTheme`(themeSwitcher 锚默认内容)
83
+ - 范式页:`apps/reference/src/App.vue`、`apps/reference/src/pages/app-layout/shell/`
@@ -0,0 +1,80 @@
1
+ # AppPage(页面容器·撑满视口 + 四向悬浮插槽)
2
+
3
+ > 页面主体容器:默认 slot 按视口高变量撑满(min-height/height 双模式),#top/#bottom/#left/#right 四向 fixed 悬浮插槽(shim 呼吸 + gap 间距)。
4
+ > 范式页:`apps/reference/src/pages/app-layout/page-slots/`(四向悬浮槽 + ChainReadout 高度链互动面板)
5
+
6
+ ## 定位
7
+
8
+ - **何时用**:每个路由页面的内容根——ListPage/FormMain 等页面骨架的宿主(`<AppPage><ListPage .../></AppPage>`)
9
+ - **何时不用**:无需容器几何(纯组件局部)时直接用裸组件
10
+ - 默认 slot 内容经 ModalShelf page 层包裹(弹层挂载点)
11
+ - 四向悬浮插槽为 fixed 定位(z-index `APP_PAGE_SLOT_Z_INDEX`=1),top/bottom 通栏量高、left/right 量宽,尺寸几何由 `app-page-geometry` 纯函数计算
12
+
13
+ ## 快速上手(最小可用)
14
+
15
+ 常规页面零配置——默认即最佳(撑满 + 页面主体 + ModalShelf page 层):
16
+
17
+ ```vue
18
+ <AppPage>
19
+ <ListPage ... />
20
+ </AppPage>
21
+ ```
22
+
23
+ 需要视口高度硬撑满时(全屏页面/顶部自撑 tab 页):
24
+
25
+ ```vue
26
+ <AppPage fullViewport>
27
+ <ListPage ... />
28
+ </AppPage>
29
+ ```
30
+
31
+ ## 能力边界 / 按需使用
32
+
33
+ - **四向悬浮插槽(`#top`/`#bottom`/`#left`/`#right`):默认全关、常规页面不需要。** 仅当页面需要「悬浮于内容之上的固定补充区」(通栏操作条 / 侧边抽屉 / 浮动提示)才开对应槽——判据:内容必须 fixed 悬浮且不参与文档流(top/bottom 通栏量高 → padding 让位,left/right 量宽)。列表/表单/详情常规页一律不开。
34
+ - `topBg`/`bottomBg`/`leftBg`/`rightBg`:仅悬浮槽需要着色时设,默认无背景即够用。
35
+ - `*ObserveResize`:仅当槽内内容有 CSS 过渡折叠 / 异步撑开(不触发重渲染的尺寸变化)才开对应 RO;普通槽内容(v-if/v-show/静态)不开。
36
+ - `fullMode`:默认 `"min-height"` 即够用;`"height"` 仅当页面内子级依赖硬高撑满(如顶级自撑 TabsMain)时选。
37
+ - **完整能力演示**(四槽全开 + 背景 + RO 互动面板):`apps/reference/src/pages/app-layout/page-slots/`——能力展示,非推荐默认。
38
+
39
+ ## API
40
+ > ⚠️ API 以 types.ts 与组件源码为真相源;与文档冲突时以源码为准。
41
+
42
+ ### Props
43
+
44
+ | name | type | 默认 | 语义 |
45
+ | --- | --- | --- | --- |
46
+ | `fullViewport` | `boolean` | `false` | 撑满视口 |
47
+ | `fullMode` | `"min-height" \| "height"` | `"min-height"` | 撑满方式 |
48
+ | `nextViewportMaxHeight` | `string` | `var(--app-viewport-max-height)` | shim 内视口高变量覆写 |
49
+ | `background` | `string` | 无 | 根盒背景 |
50
+ | `gap` | `number` | `8` | 悬浮槽与内容间隔 px |
51
+ | `topBg` / `bottomBg` / `leftBg` / `rightBg` | `string` | 无 | 各槽 shim 背景 |
52
+ | `topObserveResize` / `bottomObserveResize` / `leftObserveResize` / `rightObserveResize` | `boolean` | 均 `false` | 逐槽 WatchSize RO 观测(CSS 过渡折叠等非重渲染尺寸变化时开) |
53
+
54
+ ### Emits
55
+
56
+
57
+
58
+ ### Slots
59
+
60
+ | 槽 | scope | 语义 |
61
+ | --- | --- | --- |
62
+ | `default` | 无 | 页面主体(ModalShelf page 层包裹) |
63
+ | `#top` / `#bottom` | 无 | 通栏悬浮槽(量高 → padding-top/bottom) |
64
+ | `#left` / `#right` | 无 | 侧向悬浮槽(量宽) |
65
+
66
+ ### Expose
67
+
68
+
69
+
70
+ ## 反模式 / 注意
71
+
72
+ - **悬浮槽尺寸变化来自 CSS 过渡/异步撑开 → 必须开对应 `observeResize`**(onUpdated 只读渲染后瞬时值,过渡动画读起点漏最终)
73
+ - 四向槽 fixed 定位——内容滚动时悬浮不动,属设计语义,勿误当普通 inline 槽
74
+ - 槽尺寸/inset 几何由 `app-page-geometry` 纯函数计算导出,[MUST NOT] 手写自造
75
+
76
+ ## 关联
77
+
78
+ - 几何纯函数:`app-page-geometry.ts`(computeAppPageReducedViewportHeight/Width、computeAppPageContentInset、computeAppPageSlotStyles、computeAppPageSlotShimStyles + `APP_PAGE_SLOT_Z_INDEX`=1)
79
+ - 高度链:AppBody provide 的 `BODY_CONTENT_VIEWPORT_HEIGHT` / `BODY_CONTENT_VIEWPORT_RECT` / `BODY_CONTENT_VIEWPORT_INSET` / `SCOPE_VIEWPORT_MAX_HEIGHT`
80
+ - 范式页:`apps/reference/src/pages/app-layout/page-slots/`(含 ChainReadout 高度链互动面板)
@@ -0,0 +1,70 @@
1
+ # AppSidebar(侧边栏积木)
2
+
3
+ > 左侧栏积木:折叠把手 + MenuTree 菜单渲染 + #top/#bottom 高度自撑插槽;可 aboveHeader 悬浮盖顶。
4
+ > 范式页:`apps/reference/src/pages/app-layout/shell/`(DemoCustomShell 自供 shell 积木直引)、`apps/reference/src/pages/app-layout/layout/`(NoSidebar 显隐变体)
5
+
6
+ ## 定位
7
+
8
+ - **何时用**:内置 AppShell 经典布局已直引;自供 shell 时按需复用(菜单/折叠把手/品牌位自由组合)
9
+ - `show` 控制显隐(含折叠把手渲染开关)——false 即不渲染整栏
10
+ - `aboveHeader` 时 z-index 2 盖 header(AppLayout 另有 `sidebarAboveHeader` prop 同源传递)
11
+ - #top/#bottom 高度自撑(WatchSize 反推 shim 边界)——品牌区/挂件放 #top,底部操作放 #bottom
12
+
13
+ ## 快速上手(最小可用)
14
+
15
+ 内置 AppShell 经典布局已直引——自供 shell 需要菜单侧栏时最小直引(三必填 prop):
16
+
17
+ ```vue
18
+ <AppSidebar :show="showSidebar" :menus="sidebarMenus" :menuFlatList="menuFlatList" />
19
+ ```
20
+
21
+ **要点**:
22
+
23
+ - `show` / `menus`(MenuTree 渲染)/ `menuFlatList`(内部匹配)三必填
24
+ - 折叠把手状态由族内共享(`AppCollapseToggle` 内部积木),折叠后仅把手占位——零配置
25
+
26
+ ## 能力边界 / 按需使用
27
+
28
+ - **`#top` / `#bottom` 高度自撑插槽按需**:默认零配置即菜单栏可用;仅当需要品牌区/挂件(`#top`)或底部操作区(`#bottom`)才填——高度自撑(WatchSize 反推 shim 边界),放多少内容撑多高。
29
+ - **`aboveHeader` 默认关**:仅当 sidebar 需要 z-index 2 盖住 header 悬浮时开(与 AppLayout `sidebarAboveHeader` 同源传递,自供 shell 时对齐)。
30
+ - `show=false` 整栏不渲染(含折叠把手)——「收起但保留把手」场景走折叠态而非 `show=false`。
31
+ - **完整能力演示**(DemoCustomShell 槽转发范式 + NoSidebar 变体):`apps/reference/src/pages/app-layout/shell/`、`apps/reference/src/pages/app-layout/layout/`
32
+
33
+ ## API
34
+ > ⚠️ API 以 types.ts 与组件源码为真相源;与文档冲突时以源码为准。
35
+
36
+ ### Props
37
+
38
+ | name | type | 默认 | 语义 |
39
+ | --- | --- | --- | --- |
40
+ | `show` | `boolean`(必填) | — | 显隐(含折叠把手渲染开关) |
41
+ | `aboveHeader` | `boolean` | `false` | z-index 2 盖 header |
42
+ | `menus` | `RouteMetaResolveRaw[]`(必填) | — | sidebar 区菜单(MenuTree 渲染) |
43
+ | `menuFlatList` | `RouteMetaResolveRaw[]`(必填) | — | 扁平菜单 |
44
+
45
+ ### Emits
46
+
47
+
48
+
49
+ ### Slots
50
+
51
+ | 槽 | scope | 语义 |
52
+ | --- | --- | --- |
53
+ | `#top` / `#bottom` | 无 | 高度自撑(WatchSize 反推 shim 边界)——品牌区/挂件 / 底部操作区 |
54
+
55
+ ### Expose
56
+
57
+
58
+
59
+ ## 反模式 / 注意
60
+
61
+ - `show=false` 时折叠把手也随整栏不渲染(把手渲染开关即 show)——「收起但保留把手」场景应走折叠态而非 show=false
62
+ - `aboveHeader` 与 AppLayout `sidebarAboveHeader` 语义一致,自供 shell 时两者对齐(DemoCustomShell 透传范式)
63
+ - 折叠/展开动画由族内积木承担,[MUST NOT] 自造折叠逻辑
64
+
65
+ ## 关联
66
+
67
+ - 折叠积木:`AppCollapseToggle`(族内共享,AppSidebar/AppAside 内部使用,未导出)
68
+ - 右侧对称积木:`AppAside`
69
+ - 内容锚:`#brand` 等(落位见 AppLayout 文档)
70
+ - 范式页:`apps/reference/src/pages/app-layout/shell/`、`apps/reference/src/pages/app-layout/layout/`
@@ -0,0 +1,66 @@
1
+ # AppTheme(主题切换器积木)
2
+
3
+ > 主题切换 UI:bridge.theme 直读直写(架构反转——真相源在 bridge,不经 app store)——亮/暗/系统三态恒显 + 风格下拉条件显示。
4
+ > 使用场景:AppLayout `#themeSwitcher` 内容锚默认内容;布局插件可复用作 scope.Default。
5
+
6
+ ## 定位
7
+
8
+ - 架构反转:主题能力在 bridge——AppTheme 经 `inject(APP_LAYOUT_BRIDGE_KEY)` 拿布局桥窄化实例,直读 bridge 主题态、直写 bridge.theme 动作;store 仅为 isDarkTheme 旧消费方转发兜底,新 UI 走 bridge 直连
9
+ - 亮/暗/系统三态 RadioGroup(icon + tooltip)**恒显**;风格下拉仅 `list.length > 1` 且 `bridge.showThemeStyleSwitcher !== false` 时显示——开关只管风格切换,不影响亮暗
10
+ - 零 props:无对外配置项,行为全由 bridge 态决定
11
+
12
+ ## 快速上手(最小可用)
13
+
14
+ 无 props 可配,挂载即用——经 `#themeSwitcher` 锚由 shell 落位(缺省内容即内置 AppTheme,无需显式引用):
15
+
16
+ - 三态切换:亮色 / 暗色 / 跟随系统(icon + tooltip,恒显)
17
+ - 风格切换:已注册风格 > 1 且 `showThemeStyleSwitcher !== false` 时显示下拉(`bridge.theme.labelOf(name)` 渲染显示名)
18
+
19
+ ## 能力边界 / 按需使用
20
+
21
+ - **亮/暗/系统三态恒显**:挂载即用、无任何开关——默认即够用(`#themeSwitcher` 锚缺省内容即内置 AppTheme,业务不填锚即获得)。
22
+ - **风格下拉条件显示**:仅当「已注册风格 > 1 且 `bridge.showThemeStyleSwitcher !== false`」才显示——只注册一种风格时自动隐藏,无需配置;`showThemeStyleSwitcher` 只管风格切换,不影响亮暗三态。
23
+ - **业务覆盖锚内容时需自供等效切换 UI**:自供 `#themeSwitcher` 锚内容即失去默认切换器——须自供等效 UI 且走 bridge 直读直写(真相源在 bridge,[MUST NOT] 自造主题状态)。
24
+ - **完整能力演示**(自供 shell):`apps/reference/src/pages/app-layout/shell/`
25
+
26
+ ## bridge 直读直写语义
27
+
28
+ | 方向 | 访问 | 语义 |
29
+ | --- | --- | --- |
30
+ | 读 | `bridge.themeMode.value` | 当前亮/暗/系统三态 |
31
+ | 读 | `bridge.themeStyle.value` | 当前风格名 |
32
+ | 读 | `bridge.theme.list.value` | 已注册风格名列表(length > 1 才显示风格下拉) |
33
+ | 读 | `bridge.showThemeStyleSwitcher` | 是否显示风格下拉(bridge init 静态选项,缺省 true;亮暗切换不受此控、恒显) |
34
+ | 读 | `bridge.theme.labelOf(name)` | 风格显示名 |
35
+ | 写 | `bridge.theme.setMode(mode)` | 切亮/暗/系统 |
36
+ | 写 | `bridge.theme.setStyle(name)` | 切风格 |
37
+
38
+ ## API
39
+
40
+ ### Props
41
+
42
+
43
+
44
+ ### Emits
45
+
46
+
47
+
48
+ ### Slots
49
+
50
+
51
+
52
+ ### Expose
53
+
54
+
55
+
56
+ ## 反模式 / 注意
57
+
58
+ - **勿绕过 bridge 自造主题状态**:真相源在 bridge,切换一律 `bridge.theme.setMode` / `bridge.theme.setStyle`,[MUST NOT] 手写类名/样式副作用造成双真相
59
+ - 业务无视 themeSwitcher 默认内容时须自供等效切换 UI(声明驱动测试纪律)
60
+ - 风格下拉显隐受 `showThemeStyleSwitcher` 控制;亮暗三态不受此控、恒显
61
+
62
+ ## 关联
63
+
64
+ - 主题能力:`bridge/theme.ts`(createBridgeThemeHook:风格 map + setStyle/setDark + 持久化)
65
+ - 落位:AppShell `#themeSwitcher` 锚(scope.Default = 内置 AppTheme;业务可覆盖),AppLayout 5 内容锚之一
66
+ - 范式页:`apps/reference/src/pages/app-layout/shell/`
@@ -0,0 +1,19 @@
1
+ # data-view 数据视图族
2
+
3
+ > `DataListView` / `DataListViewItem`:table 的内部衍生品——**仅供 TableMain 内部 import,[MUST NOT] 对外导出 / 全局注册 / 提供 install 插件**(不进 core 顶层 export)。
4
+ > 对外入口:经 `TableMain` 的 `customView` 模式消费(范式页 `apps/reference/src/pages/data-view/custom-view/`)。
5
+
6
+ ## 组件清单
7
+
8
+ | 组件 | 一句话 | 文档 |
9
+ | --- | --- | --- |
10
+ | `DataListView` | 数据视图列表(卡片/自定义渲染,el-table 形态替代),TableMain `customView` 模式渲染载体 | [README-DataListView](./docs/README-DataListView.md) |
11
+ | `DataListViewItem` | 列表项容器:仅承载选中态 class 钩子(`.is-selected`)+ 项内容插槽 | 并入 README-DataListView 小节 |
12
+
13
+ 族 index.ts 导出 `{ DataListView, DataListViewItem }` + `export * from "./types"`(5 个类型,含 `DataViewColumn<T>` / `DataListViewItemScope<T>`)。
14
+
15
+ ## 内部件边界
16
+
17
+ - **不进 core 顶层 export**:core 顶层 `index.ts` 无 data-view 导出行;两组件 [MUST NOT] 对外导出 / 全局注册 / 提供 install 插件
18
+ - **消费入口**:走 `TableMain` `customView` prop + `#custom-view-item` 插槽(TableMain `customView.value ? markRaw(DataListView) : markRaw(ElTable)` 择一渲染;ListPage 已转发该插槽,类型 `DataListViewItemScope<T>`)
19
+ - **DataListViewItem**:由 DataListView 内部 `v-for` 使用,消费方不直接使用;[MUST NOT] 写死视觉样式(卡片阴影/圆角归消费方)、[MUST NOT] 内置选中状态机