@melt-js/docs-bag 2026.11.7 → 2026.11.16

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 (125) hide show
  1. package/README.md +15 -3
  2. package/dist/404.html +5 -5
  3. package/dist/README.html +10 -10
  4. package/dist/assets/README.md.D8R8Eb23.js +9 -0
  5. package/dist/assets/README.md.D8R8Eb23.lean.js +1 -0
  6. package/dist/assets/{app.CPZ-gtYR.js → app.B2EI2o4q.js} +1 -1
  7. package/dist/assets/chunks/@localSearchIndexroot.Chqo2dFE.js +1 -0
  8. package/dist/assets/chunks/{VPLocalSearchBox.BVA3GWxn.js → VPLocalSearchBox.DY28kF4x.js} +5 -5
  9. package/dist/assets/chunks/{framework.B3lxS50j.js → framework.Olv9GB1A.js} +1 -1
  10. package/dist/assets/chunks/{theme.C4rSMcmz.js → theme.BJkR0Hu5.js} +2 -2
  11. package/dist/assets/{guide_complete-host-app.md.CDRzLz0E.js → guide_complete-host-app.md.CBuOgyl8.js} +1 -1
  12. package/dist/assets/{guide_complete-host-app.md.CDRzLz0E.lean.js → guide_complete-host-app.md.CBuOgyl8.lean.js} +1 -1
  13. package/dist/assets/{guide_create-project.md.LRNhDD9x.js → guide_create-project.md.B2KkXWnI.js} +1 -1
  14. package/dist/assets/{guide_create-project.md.LRNhDD9x.lean.js → guide_create-project.md.B2KkXWnI.lean.js} +1 -1
  15. package/dist/assets/{guide_deployment.md.B8aEUabm.js → guide_deployment.md.BrvgEFf0.js} +1 -1
  16. package/dist/assets/{guide_deployment.md.B8aEUabm.lean.js → guide_deployment.md.BrvgEFf0.lean.js} +1 -1
  17. package/dist/assets/{guide_dictionary-system.md.Dy0tQYMR.js → guide_dictionary-system.md.hS_2-jYz.js} +1 -1
  18. package/dist/assets/{guide_dictionary-system.md.Dy0tQYMR.lean.js → guide_dictionary-system.md.hS_2-jYz.lean.js} +1 -1
  19. package/dist/assets/{guide_getting-started.md.B-mobXxi.js → guide_getting-started.md.0nvT0khJ.js} +1 -1
  20. package/dist/assets/{guide_getting-started.md.B-mobXxi.lean.js → guide_getting-started.md.0nvT0khJ.lean.js} +1 -1
  21. package/dist/assets/{guide_host_auth-and-permissions.md.DWH3Vape.js → guide_host_auth-and-permissions.md.Pr66-VM-.js} +1 -1
  22. package/dist/assets/{guide_host_auth-and-permissions.md.DWH3Vape.lean.js → guide_host_auth-and-permissions.md.Pr66-VM-.lean.js} +1 -1
  23. package/dist/assets/{guide_host_bootstrap.md.DpbxPIZw.js → guide_host_bootstrap.md.DKFeJyTi.js} +1 -1
  24. package/dist/assets/{guide_host_bootstrap.md.DpbxPIZw.lean.js → guide_host_bootstrap.md.DKFeJyTi.lean.js} +1 -1
  25. package/dist/assets/{guide_host_routing-and-menu.md.BdCMIOxn.js → guide_host_routing-and-menu.md.CQaMO4vj.js} +1 -1
  26. package/dist/assets/{guide_host_routing-and-menu.md.BdCMIOxn.lean.js → guide_host_routing-and-menu.md.CQaMO4vj.lean.js} +1 -1
  27. package/dist/assets/{guide_introduction.md.1MiCcWyO.js → guide_introduction.md.tg6wBrpR.js} +1 -1
  28. package/dist/assets/{guide_introduction.md.1MiCcWyO.lean.js → guide_introduction.md.tg6wBrpR.lean.js} +1 -1
  29. package/dist/assets/{guide_local-debugging.md.CLJoKVb9.js → guide_local-debugging.md.DVHeXzws.js} +1 -1
  30. package/dist/assets/{guide_local-debugging.md.CLJoKVb9.lean.js → guide_local-debugging.md.DVHeXzws.lean.js} +1 -1
  31. package/dist/assets/{guide_network-request.md.DDlA8bc0.js → guide_network-request.md.BlxKmm59.js} +1 -1
  32. package/dist/assets/{guide_network-request.md.DDlA8bc0.lean.js → guide_network-request.md.BlxKmm59.lean.js} +1 -1
  33. package/dist/assets/{guide_official-plugins_index.md.DPwemCGy.js → guide_official-plugins_index.md.BF-gWYVU.js} +1 -1
  34. package/dist/assets/{guide_official-plugins_index.md.DPwemCGy.lean.js → guide_official-plugins_index.md.BF-gWYVU.lean.js} +1 -1
  35. package/dist/assets/{guide_official-plugins_install-and-toggle.md.Eq2hWjYn.js → guide_official-plugins_install-and-toggle.md.B35ne8VL.js} +1 -1
  36. package/dist/assets/{guide_official-plugins_install-and-toggle.md.Eq2hWjYn.lean.js → guide_official-plugins_install-and-toggle.md.B35ne8VL.lean.js} +1 -1
  37. package/dist/assets/{guide_official-plugins_shop.md.yBltEx-o.js → guide_official-plugins_shop.md.BGGP886L.js} +1 -1
  38. package/dist/assets/{guide_official-plugins_shop.md.yBltEx-o.lean.js → guide_official-plugins_shop.md.BGGP886L.lean.js} +1 -1
  39. package/dist/assets/{guide_official-plugins_sys-setting.md.BmkuOqGv.js → guide_official-plugins_sys-setting.md.BwiJzRiL.js} +1 -1
  40. package/dist/assets/{guide_official-plugins_sys-setting.md.BmkuOqGv.lean.js → guide_official-plugins_sys-setting.md.BwiJzRiL.lean.js} +1 -1
  41. package/dist/assets/{guide_package-core.md.-E29SYy8.js → guide_package-core.md.D1xrMRok.js} +1 -1
  42. package/dist/assets/{guide_package-core.md.-E29SYy8.lean.js → guide_package-core.md.D1xrMRok.lean.js} +1 -1
  43. package/dist/assets/{guide_package-ecosystem.md.Di3RcVpF.js → guide_package-ecosystem.md.Dl2r9NSa.js} +1 -1
  44. package/dist/assets/{guide_package-ecosystem.md.Di3RcVpF.lean.js → guide_package-ecosystem.md.Dl2r9NSa.lean.js} +1 -1
  45. package/dist/assets/{guide_package-plugin-shop.md.D-xXN7Yg.js → guide_package-plugin-shop.md.BaIhzPDV.js} +1 -1
  46. package/dist/assets/{guide_package-plugin-shop.md.D-xXN7Yg.lean.js → guide_package-plugin-shop.md.BaIhzPDV.lean.js} +1 -1
  47. package/dist/assets/{guide_package-plugin-sys-setting.md.Dx3nxHVF.js → guide_package-plugin-sys-setting.md.C0ROCk-O.js} +1 -1
  48. package/dist/assets/{guide_package-plugin-sys-setting.md.Dx3nxHVF.lean.js → guide_package-plugin-sys-setting.md.C0ROCk-O.lean.js} +1 -1
  49. package/dist/assets/{guide_package-publishing.md.B7hzTYDH.js → guide_package-publishing.md.De2Y0rte.js} +1 -1
  50. package/dist/assets/{guide_package-publishing.md.B7hzTYDH.lean.js → guide_package-publishing.md.De2Y0rte.lean.js} +1 -1
  51. package/dist/assets/{guide_package-request.md.DxaD65eM.js → guide_package-request.md.DugGGXSX.js} +1 -1
  52. package/dist/assets/{guide_package-request.md.DxaD65eM.lean.js → guide_package-request.md.DugGGXSX.lean.js} +1 -1
  53. package/dist/assets/{guide_package-ui.md.wBZ_iQLb.js → guide_package-ui.md.BPCpNCIF.js} +1 -1
  54. package/dist/assets/{guide_package-ui.md.wBZ_iQLb.lean.js → guide_package-ui.md.BPCpNCIF.lean.js} +1 -1
  55. package/dist/assets/{guide_permissions.md.B_5re4AR.js → guide_permissions.md.DHnKaha_.js} +1 -1
  56. package/dist/assets/{guide_permissions.md.B_5re4AR.lean.js → guide_permissions.md.DHnKaha_.lean.js} +1 -1
  57. package/dist/assets/{guide_plugin-development.md.BQzTwLRr.js → guide_plugin-development.md.DeFWVfLN.js} +1 -1
  58. package/dist/assets/{guide_plugin-development.md.BQzTwLRr.lean.js → guide_plugin-development.md.DeFWVfLN.lean.js} +1 -1
  59. package/dist/assets/{guide_plugins_admin-plugin.md.d_XC5U-4.js → guide_plugins_admin-plugin.md.XLffV1LB.js} +1 -1
  60. package/dist/assets/{guide_plugins_admin-plugin.md.d_XC5U-4.lean.js → guide_plugins_admin-plugin.md.XLffV1LB.lean.js} +1 -1
  61. package/dist/assets/{guide_plugins_create-plugin.md.C-wDq4Un.js → guide_plugins_create-plugin.md.Br3OIR1m.js} +1 -1
  62. package/dist/assets/{guide_plugins_create-plugin.md.C-wDq4Un.lean.js → guide_plugins_create-plugin.md.Br3OIR1m.lean.js} +1 -1
  63. package/dist/assets/{guide_plugins_debug-and-publish.md.CeTc01QN.js → guide_plugins_debug-and-publish.md.C5ZbCito.js} +1 -1
  64. package/dist/assets/{guide_plugins_debug-and-publish.md.CeTc01QN.lean.js → guide_plugins_debug-and-publish.md.C5ZbCito.lean.js} +1 -1
  65. package/dist/assets/{guide_plugins_lifecycle-and-dependencies.md.BtwKS5jY.js → guide_plugins_lifecycle-and-dependencies.md.CV7nFME-.js} +1 -1
  66. package/dist/assets/{guide_plugins_lifecycle-and-dependencies.md.BtwKS5jY.lean.js → guide_plugins_lifecycle-and-dependencies.md.CV7nFME-.lean.js} +1 -1
  67. package/dist/assets/{guide_plugins_permissions-and-settings.md.05CsB1I6.js → guide_plugins_permissions-and-settings.md.B_MrVXY_.js} +1 -1
  68. package/dist/assets/{guide_plugins_permissions-and-settings.md.05CsB1I6.lean.js → guide_plugins_permissions-and-settings.md.B_MrVXY_.lean.js} +1 -1
  69. package/dist/assets/{guide_plugins_routes-menus-locales.md.B2dzO2DN.js → guide_plugins_routes-menus-locales.md.heaL1_wi.js} +1 -1
  70. package/dist/assets/{guide_plugins_routes-menus-locales.md.B2dzO2DN.lean.js → guide_plugins_routes-menus-locales.md.heaL1_wi.lean.js} +1 -1
  71. package/dist/assets/{guide_pro-form.md.DbSHbrMu.js → guide_pro-form.md.L9CKqs5C.js} +1 -1
  72. package/dist/assets/{guide_pro-form.md.DbSHbrMu.lean.js → guide_pro-form.md.L9CKqs5C.lean.js} +1 -1
  73. package/dist/assets/{guide_pro-table.md.DBuYQYgG.js → guide_pro-table.md.DlhJG49R.js} +1 -1
  74. package/dist/assets/{guide_pro-table.md.DBuYQYgG.lean.js → guide_pro-table.md.DlhJG49R.lean.js} +1 -1
  75. package/dist/assets/{guide_request-and-components.md.BQXI_ZxY.js → guide_request-and-components.md.CeEnrOuY.js} +1 -1
  76. package/dist/assets/{guide_request-and-components.md.BQXI_ZxY.lean.js → guide_request-and-components.md.CeEnrOuY.lean.js} +1 -1
  77. package/dist/assets/{guide_routing-and-menu.md.-zrm3BV9.js → guide_routing-and-menu.md.09TL-ILh.js} +1 -1
  78. package/dist/assets/{guide_routing-and-menu.md.-zrm3BV9.lean.js → guide_routing-and-menu.md.09TL-ILh.lean.js} +1 -1
  79. package/dist/assets/{guide_theme-tokens.md.DXpbrOjS.js → guide_theme-tokens.md.Cfn7RM_2.js} +1 -1
  80. package/dist/assets/{guide_theme-tokens.md.DXpbrOjS.lean.js → guide_theme-tokens.md.Cfn7RM_2.lean.js} +1 -1
  81. package/dist/assets/{index.md.BUgI8r98.js → index.md.ClEmxxY1.js} +1 -1
  82. package/dist/assets/{index.md.BUgI8r98.lean.js → index.md.ClEmxxY1.lean.js} +1 -1
  83. package/dist/assets/style.IeUynjWL.css +1 -0
  84. package/dist/guide/complete-host-app.html +10 -10
  85. package/dist/guide/create-project.html +10 -10
  86. package/dist/guide/deployment.html +10 -10
  87. package/dist/guide/dictionary-system.html +10 -10
  88. package/dist/guide/getting-started.html +10 -10
  89. package/dist/guide/host/auth-and-permissions.html +10 -10
  90. package/dist/guide/host/bootstrap.html +10 -10
  91. package/dist/guide/host/routing-and-menu.html +10 -10
  92. package/dist/guide/introduction.html +10 -10
  93. package/dist/guide/local-debugging.html +10 -10
  94. package/dist/guide/network-request.html +10 -10
  95. package/dist/guide/official-plugins/index.html +10 -10
  96. package/dist/guide/official-plugins/install-and-toggle.html +10 -10
  97. package/dist/guide/official-plugins/shop.html +10 -10
  98. package/dist/guide/official-plugins/sys-setting.html +10 -10
  99. package/dist/guide/package-core.html +10 -10
  100. package/dist/guide/package-ecosystem.html +9 -9
  101. package/dist/guide/package-plugin-shop.html +10 -10
  102. package/dist/guide/package-plugin-sys-setting.html +10 -10
  103. package/dist/guide/package-publishing.html +10 -10
  104. package/dist/guide/package-request.html +10 -10
  105. package/dist/guide/package-ui.html +10 -10
  106. package/dist/guide/permissions.html +10 -10
  107. package/dist/guide/plugin-development.html +10 -10
  108. package/dist/guide/plugins/admin-plugin.html +10 -10
  109. package/dist/guide/plugins/create-plugin.html +10 -10
  110. package/dist/guide/plugins/debug-and-publish.html +10 -10
  111. package/dist/guide/plugins/lifecycle-and-dependencies.html +10 -10
  112. package/dist/guide/plugins/permissions-and-settings.html +10 -10
  113. package/dist/guide/plugins/routes-menus-locales.html +10 -10
  114. package/dist/guide/pro-form.html +10 -10
  115. package/dist/guide/pro-table.html +10 -10
  116. package/dist/guide/request-and-components.html +10 -10
  117. package/dist/guide/routing-and-menu.html +10 -10
  118. package/dist/guide/theme-tokens.html +10 -10
  119. package/dist/hashmap.json +1 -1
  120. package/dist/index.html +9 -9
  121. package/package.json +12 -9
  122. package/dist/assets/README.md.BEUJStMI.js +0 -9
  123. package/dist/assets/README.md.BEUJStMI.lean.js +0 -1
  124. package/dist/assets/chunks/@localSearchIndexroot.7ill5i5O.js +0 -1
  125. package/dist/assets/style.0snOvk0r.css +0 -1
@@ -6,19 +6,19 @@
6
6
  <title>@melt-js/libs-bag-ui | Vue-Bag-Admin</title>
7
7
  <meta name="description" content="基于 Vue3 + Vite6 + Naive UI + Pinia + Strapi5 的中后台系统框架">
8
8
  <meta name="generator" content="VitePress v1.6.4">
9
- <link rel="preload stylesheet" href="/@melt-js/docs-bag@2026.11.7/assets/style.0snOvk0r.css" as="style">
10
- <link rel="preload stylesheet" href="/@melt-js/docs-bag@2026.11.7/vp-icons.css" as="style">
9
+ <link rel="preload stylesheet" href="/@melt-js/docs-bag@2026.11.16/dist/assets/style.IeUynjWL.css" as="style">
10
+ <link rel="preload stylesheet" href="/@melt-js/docs-bag@2026.11.16/dist/vp-icons.css" as="style">
11
11
 
12
- <script type="module" src="/@melt-js/docs-bag@2026.11.7/assets/app.CPZ-gtYR.js"></script>
13
- <link rel="preload" href="/@melt-js/docs-bag@2026.11.7/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
- <link rel="modulepreload" href="/@melt-js/docs-bag@2026.11.7/assets/chunks/theme.C4rSMcmz.js">
15
- <link rel="modulepreload" href="/@melt-js/docs-bag@2026.11.7/assets/chunks/framework.B3lxS50j.js">
16
- <link rel="modulepreload" href="/@melt-js/docs-bag@2026.11.7/assets/guide_package-ui.md.wBZ_iQLb.lean.js">
12
+ <script type="module" src="/@melt-js/docs-bag@2026.11.16/dist/assets/app.B2EI2o4q.js"></script>
13
+ <link rel="preload" href="/@melt-js/docs-bag@2026.11.16/dist/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
+ <link rel="modulepreload" href="/@melt-js/docs-bag@2026.11.16/dist/assets/chunks/theme.BJkR0Hu5.js">
15
+ <link rel="modulepreload" href="/@melt-js/docs-bag@2026.11.16/dist/assets/chunks/framework.Olv9GB1A.js">
16
+ <link rel="modulepreload" href="/@melt-js/docs-bag@2026.11.16/dist/assets/guide_package-ui.md.BPCpNCIF.lean.js">
17
17
  <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"dark",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
18
18
  <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
19
19
  </head>
20
20
  <body>
21
- <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0b0ada53></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0b0ada53>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/@melt-js/docs-bag@2026.11.7/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/@melt-js/docs-bag@2026.11.7/logo.png" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vue-Bag-Admin</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/@melt-js/docs-bag@2026.11.7/" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>首页</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/@melt-js/docs-bag@2026.11.7/guide/introduction.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>指南</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://hangjob.github.io/vue-bag-admin/" target="_blank" rel="noreferrer" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>在线预览</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-dc692963 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><!----><span data-v-cf11d7a2>社区</span><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><div class="items" data-v-b98bc113><!--[--><!--[--><div class="VPMenuLink" data-v-b98bc113 data-v-35975db6><a class="VPLink link" href="/@melt-js/docs-bag@2026.11.7/#community" data-v-35975db6><!--[--><span data-v-35975db6>微信群</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b98bc113 data-v-35975db6><a class="VPLink link vp-external-link-icon" href="https://www.itnavs.com/" target="_blank" rel="noreferrer" data-v-35975db6><!--[--><span data-v-35975db6>知航驿站</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b98bc113 data-v-35975db6><a class="VPLink link vp-external-link-icon" href="https://yh.itnavs.com/contact" target="_blank" rel="noreferrer" data-v-35975db6><!--[--><span data-v-35975db6>合作机会</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://www.npmjs.com/package/@melt-js/libs-bag-entry" target="_blank" rel="noreferrer" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>v2026.11.7</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="true" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/hangjob/vue-bag-admin/tree/next" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><!----><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="true" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/hangjob/vue-bag-admin/tree/next" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-8a42e2b4><button data-v-8a42e2b4>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>开始使用</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/introduction.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>项目介绍</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/getting-started.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>快速上手</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/create-project.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>创建项目</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>核心开发</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/host/bootstrap.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>初始化宿主</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/host/routing-and-menu.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>路由与菜单</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/host/auth-and-permissions.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>登录与权限</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/request-and-components.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>请求与组件</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>官方插件</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/official-plugins/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>插件总览</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/official-plugins/install-and-toggle.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>安装与启停</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/official-plugins/shop.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>商城插件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/official-plugins/sys-setting.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>系统设置插件</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>插件开发</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/plugins/create-plugin.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>创建插件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/plugins/admin-plugin.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>AdminPlugin 配置</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/plugins/routes-menus-locales.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>路由、菜单与多语言</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/plugins/permissions-and-settings.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>权限与配置项</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/plugins/lifecycle-and-dependencies.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>生命周期与依赖</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/plugins/debug-and-publish.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>调试与发布</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _@melt-js_docs-bag@2026_11_7_guide_package-ui" data-v-39a288b8><div><h1 id="melt-js-libs-bag-ui" tabindex="-1">@melt-js/libs-bag-ui <a class="header-anchor" href="#melt-js-libs-bag-ui" aria-label="Permalink to &quot;@melt-js/libs-bag-ui&quot;">​</a></h1><p><code>@melt-js/libs-bag-ui</code> 是组件层,主要干两件事:把后台里最容易重复的列表页和表单页沉下来,然后直接吃 <code>@melt-js/libs-bag-core</code> 里定义的 Schema 和字典协议。</p><h2 id="现在有这些组件" tabindex="-1">现在有这些组件 <a class="header-anchor" href="#现在有这些组件" aria-label="Permalink to &quot;现在有这些组件&quot;">​</a></h2><ul><li><code>PmProTable</code></li><li><code>PmSchemaForm</code></li><li><code>PmProForm</code></li><li><code>PmDictTag</code></li><li><code>BagUiProvider</code></li></ul><h2 id="最常见的用法" tabindex="-1">最常见的用法 <a class="header-anchor" href="#最常见的用法" aria-label="Permalink to &quot;最常见的用法&quot;">​</a></h2><h3 id="用-pmproform-搭表单" tabindex="-1">用 <code>PmProForm</code> 搭表单 <a class="header-anchor" href="#用-pmproform-搭表单" aria-label="Permalink to &quot;用 `PmProForm` 搭表单&quot;">​</a></h3><div class="language-vue vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">vue</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">script</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> setup</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> lang</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;ts&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span>
21
+ <div id="app"><div class="Layout" data-v-0edfb049><!--[--><!--]--><!--[--><span tabindex="-1" data-v-7b519ef7></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-7b519ef7>Skip to content</a><!--]--><!----><header class="VPNav" data-v-0edfb049 data-v-cd38b33d><div class="VPNavBar" data-v-cd38b33d data-v-61f8f22d><div class="wrapper" data-v-61f8f22d><div class="container" data-v-61f8f22d><div class="title" data-v-61f8f22d><div class="VPNavBarTitle has-sidebar" data-v-61f8f22d data-v-df65655a><a class="title" href="/@melt-js/docs-bag@2026.11.16/dist/" data-v-df65655a><!--[--><!--]--><!--[--><img class="VPImage logo" src="/@melt-js/docs-bag@2026.11.16/dist/logo.png" alt data-v-0be788e2><!--]--><span data-v-df65655a>Vue-Bag-Admin</span><!--[--><!--]--></a></div></div><div class="content" data-v-61f8f22d><div class="content-body" data-v-61f8f22d><!--[--><!--]--><div class="VPNavBarSearch search" data-v-61f8f22d><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-61f8f22d data-v-52b0ba7e><span id="main-nav-aria-label" class="visually-hidden" data-v-52b0ba7e> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/@melt-js/docs-bag@2026.11.16/dist/" tabindex="0" data-v-52b0ba7e data-v-32d1898c><!--[--><span data-v-32d1898c>首页</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/@melt-js/docs-bag@2026.11.16/dist/guide/introduction.html" tabindex="0" data-v-52b0ba7e data-v-32d1898c><!--[--><span data-v-32d1898c>指南</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://hangjob.github.io/vue-bag-admin/" target="_blank" rel="noreferrer" tabindex="0" data-v-52b0ba7e data-v-32d1898c><!--[--><span data-v-32d1898c>在线预览</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-52b0ba7e data-v-af632b79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-af632b79><span class="text" data-v-af632b79><!----><span data-v-af632b79>社区</span><span class="vpi-chevron-down text-icon" data-v-af632b79></span></span></button><div class="menu" data-v-af632b79><div class="VPMenu" data-v-af632b79 data-v-91f581de><div class="items" data-v-91f581de><!--[--><!--[--><div class="VPMenuLink" data-v-91f581de data-v-0a7b9194><a class="VPLink link" href="/@melt-js/docs-bag@2026.11.16/dist/#community" data-v-0a7b9194><!--[--><span data-v-0a7b9194>微信群</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-91f581de data-v-0a7b9194><a class="VPLink link vp-external-link-icon" href="https://www.itnavs.com/" target="_blank" rel="noreferrer" data-v-0a7b9194><!--[--><span data-v-0a7b9194>知航驿站</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-91f581de data-v-0a7b9194><a class="VPLink link vp-external-link-icon" href="https://yh.itnavs.com/contact" target="_blank" rel="noreferrer" data-v-0a7b9194><!--[--><span data-v-0a7b9194>合作机会</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://www.npmjs.com/package/@melt-js/libs-bag-entry" target="_blank" rel="noreferrer" tabindex="0" data-v-52b0ba7e data-v-32d1898c><!--[--><span data-v-32d1898c>v2026.11.16</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-61f8f22d data-v-dc17aa45><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="true" data-v-dc17aa45 data-v-685f7c6e data-v-e5c4a645><span class="check" data-v-e5c4a645><span class="icon" data-v-e5c4a645><!--[--><span class="vpi-sun sun" data-v-685f7c6e></span><span class="vpi-moon moon" data-v-685f7c6e></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-61f8f22d data-v-6ba2cce0 data-v-95361356><!--[--><a class="VPSocialLink no-icon" href="https://github.com/hangjob/vue-bag-admin/tree/next" aria-label="github" target="_blank" rel="noopener" data-v-95361356 data-v-ff15611b><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-61f8f22d data-v-6bf73ff9 data-v-af632b79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-af632b79><span class="vpi-more-horizontal icon" data-v-af632b79></span></button><div class="menu" data-v-af632b79><div class="VPMenu" data-v-af632b79 data-v-91f581de><!----><!--[--><!--[--><!----><div class="group" data-v-6bf73ff9><div class="item appearance" data-v-6bf73ff9><p class="label" data-v-6bf73ff9>Appearance</p><div class="appearance-action" data-v-6bf73ff9><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="true" data-v-6bf73ff9 data-v-685f7c6e data-v-e5c4a645><span class="check" data-v-e5c4a645><span class="icon" data-v-e5c4a645><!--[--><span class="vpi-sun sun" data-v-685f7c6e></span><span class="vpi-moon moon" data-v-685f7c6e></span><!--]--></span></span></button></div></div></div><div class="group" data-v-6bf73ff9><div class="item social-links" data-v-6bf73ff9><div class="VPSocialLinks social-links-list" data-v-6bf73ff9 data-v-95361356><!--[--><a class="VPSocialLink no-icon" href="https://github.com/hangjob/vue-bag-admin/tree/next" aria-label="github" target="_blank" rel="noopener" data-v-95361356 data-v-ff15611b><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-61f8f22d data-v-633bcbbe><span class="container" data-v-633bcbbe><span class="top" data-v-633bcbbe></span><span class="middle" data-v-633bcbbe></span><span class="bottom" data-v-633bcbbe></span></span></button></div></div></div></div><div class="divider" data-v-61f8f22d><div class="divider-line" data-v-61f8f22d></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-0edfb049 data-v-a46b1e36><div class="container" data-v-a46b1e36><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a46b1e36><span class="vpi-align-left menu-icon" data-v-a46b1e36></span><span class="menu-text" data-v-a46b1e36>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a46b1e36 data-v-376aa372><button data-v-376aa372>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-0edfb049 data-v-4290678e><div class="curtain" data-v-4290678e></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-4290678e><span class="visually-hidden" id="sidebar-aria-label" data-v-4290678e> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-3a01ad27><section class="VPSidebarItem level-0" data-v-3a01ad27 data-v-e46237b3><div class="item" role="button" tabindex="0" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><h2 class="text" data-v-e46237b3>开始使用</h2><!----></div><div class="items" data-v-e46237b3><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/introduction.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>项目介绍</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/getting-started.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>快速上手</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/create-project.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>创建项目</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-3a01ad27><section class="VPSidebarItem level-0" data-v-3a01ad27 data-v-e46237b3><div class="item" role="button" tabindex="0" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><h2 class="text" data-v-e46237b3>核心开发</h2><!----></div><div class="items" data-v-e46237b3><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/host/bootstrap.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>初始化宿主</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/host/routing-and-menu.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>路由与菜单</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/host/auth-and-permissions.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>登录与权限</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/request-and-components.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>请求与组件</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-3a01ad27><section class="VPSidebarItem level-0" data-v-3a01ad27 data-v-e46237b3><div class="item" role="button" tabindex="0" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><h2 class="text" data-v-e46237b3>官方插件</h2><!----></div><div class="items" data-v-e46237b3><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/official-plugins/" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>插件总览</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/official-plugins/install-and-toggle.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>安装与启停</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/official-plugins/shop.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>商城插件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/official-plugins/sys-setting.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>系统设置插件</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-3a01ad27><section class="VPSidebarItem level-0" data-v-3a01ad27 data-v-e46237b3><div class="item" role="button" tabindex="0" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><h2 class="text" data-v-e46237b3>插件开发</h2><!----></div><div class="items" data-v-e46237b3><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/plugins/create-plugin.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>创建插件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/plugins/admin-plugin.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>AdminPlugin 配置</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/plugins/routes-menus-locales.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>路由、菜单与多语言</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/plugins/permissions-and-settings.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>权限与配置项</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/plugins/lifecycle-and-dependencies.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>生命周期与依赖</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/plugins/debug-and-publish.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>调试与发布</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-0edfb049 data-v-c786a43b><div class="VPDoc has-sidebar has-aside" data-v-c786a43b data-v-c1154bb5><!--[--><!--]--><div class="container" data-v-c1154bb5><div class="aside" data-v-c1154bb5><div class="aside-curtain" data-v-c1154bb5></div><div class="aside-container" data-v-c1154bb5><div class="aside-content" data-v-c1154bb5><div class="VPDocAside" data-v-c1154bb5 data-v-ac30bcc5><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-ac30bcc5 data-v-3870f070><div class="content" data-v-3870f070><div class="outline-marker" data-v-3870f070></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-3870f070>On this page</div><ul class="VPDocOutlineItem root" data-v-3870f070 data-v-d3fae412><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-ac30bcc5></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-c1154bb5><div class="content-container" data-v-c1154bb5><!--[--><!--]--><main class="main" data-v-c1154bb5><div style="position:relative;" class="vp-doc _@melt-js_docs-bag@2026_11_16_dist_guide_package-ui" data-v-c1154bb5><div><h1 id="melt-js-libs-bag-ui" tabindex="-1">@melt-js/libs-bag-ui <a class="header-anchor" href="#melt-js-libs-bag-ui" aria-label="Permalink to &quot;@melt-js/libs-bag-ui&quot;">​</a></h1><p><code>@melt-js/libs-bag-ui</code> 是组件层,主要干两件事:把后台里最容易重复的列表页和表单页沉下来,然后直接吃 <code>@melt-js/libs-bag-core</code> 里定义的 Schema 和字典协议。</p><h2 id="现在有这些组件" tabindex="-1">现在有这些组件 <a class="header-anchor" href="#现在有这些组件" aria-label="Permalink to &quot;现在有这些组件&quot;">​</a></h2><ul><li><code>PmProTable</code></li><li><code>PmSchemaForm</code></li><li><code>PmProForm</code></li><li><code>PmDictTag</code></li><li><code>BagUiProvider</code></li></ul><h2 id="最常见的用法" tabindex="-1">最常见的用法 <a class="header-anchor" href="#最常见的用法" aria-label="Permalink to &quot;最常见的用法&quot;">​</a></h2><h3 id="用-pmproform-搭表单" tabindex="-1">用 <code>PmProForm</code> 搭表单 <a class="header-anchor" href="#用-pmproform-搭表单" aria-label="Permalink to &quot;用 `PmProForm` 搭表单&quot;">​</a></h3><div class="language-vue vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">vue</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">script</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> setup</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> lang</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;ts&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span>
22
22
  <span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { ref } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;vue&#39;</span></span>
23
23
  <span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { PmProForm } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@melt-js/libs-bag-ui&#39;</span></span>
24
24
  <span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { ProFormSchema } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@melt-js/libs-bag-core&#39;</span></span>
@@ -67,8 +67,8 @@
67
67
  <span class="line"></span>
68
68
  <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">template</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span>
69
69
  <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &lt;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">PmProTable</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> :</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">columns</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">[]</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> :</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">request</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">request</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> /&gt;</span></span>
70
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">template</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span></code></pre></div><h2 id="它解决什么" tabindex="-1">它解决什么 <a class="header-anchor" href="#它解决什么" aria-label="Permalink to &quot;它解决什么&quot;">​</a></h2><ul><li>表单和列表页的重复代码会少很多</li><li>页面能直接吃 Schema 和字典协议</li><li>宿主和插件之间更容易共享页面搭建方式</li><li>基于 <code>naive-ui</code>,比较适合快速搭中后台</li></ul><h2 id="边界" tabindex="-1">边界 <a class="header-anchor" href="#边界" aria-label="Permalink to &quot;边界&quot;">​</a></h2><ul><li>它不负责插件挂载和宿主初始化</li><li>它不定义 Schema 协议本身,那部分来自 <code>@melt-js/libs-bag-core</code></li><li>它更偏通用积木层,复杂业务流程还是放在页面层自己组合</li></ul><h2 id="继续阅读" tabindex="-1">继续阅读 <a class="header-anchor" href="#继续阅读" aria-label="Permalink to &quot;继续阅读&quot;">​</a></h2><ul><li><a href="./pro-table.html">PmProTable</a></li><li><a href="./pro-form.html">PmProForm</a></li><li><a href="./dictionary-system.html">字典系统</a></li></ul></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><!----><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2026-11-07T09:53:20.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><!----></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/@melt-js/docs-bag@2026.11.7/guide/introduction.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>项目介绍</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-5d98c3a5 data-v-e315a0ad><div class="container" data-v-e315a0ad><p class="message" data-v-e315a0ad>Released under the MIT License.</p><p class="copyright" data-v-e315a0ad>Copyright © 2026-present Vue-Bag-Admin</p></div></footer><!--[--><!--]--></div></div>
71
- <script>window.__VP_HASH_MAP__=JSON.parse("{\"guide_complete-host-app.md\":\"CDRzLz0E\",\"guide_create-project.md\":\"LRNhDD9x\",\"guide_deployment.md\":\"B8aEUabm\",\"guide_dictionary-system.md\":\"Dy0tQYMR\",\"guide_getting-started.md\":\"B-mobXxi\",\"guide_host_auth-and-permissions.md\":\"DWH3Vape\",\"guide_host_bootstrap.md\":\"DpbxPIZw\",\"guide_host_routing-and-menu.md\":\"BdCMIOxn\",\"guide_introduction.md\":\"1MiCcWyO\",\"guide_local-debugging.md\":\"CLJoKVb9\",\"guide_network-request.md\":\"DDlA8bc0\",\"guide_official-plugins_index.md\":\"DPwemCGy\",\"guide_official-plugins_install-and-toggle.md\":\"Eq2hWjYn\",\"guide_official-plugins_shop.md\":\"yBltEx-o\",\"guide_official-plugins_sys-setting.md\":\"BmkuOqGv\",\"guide_package-core.md\":\"-E29SYy8\",\"guide_package-ecosystem.md\":\"Di3RcVpF\",\"guide_package-plugin-shop.md\":\"D-xXN7Yg\",\"guide_package-plugin-sys-setting.md\":\"Dx3nxHVF\",\"guide_package-publishing.md\":\"B7hzTYDH\",\"guide_package-request.md\":\"DxaD65eM\",\"guide_package-ui.md\":\"wBZ_iQLb\",\"guide_permissions.md\":\"B_5re4AR\",\"guide_plugin-development.md\":\"BQzTwLRr\",\"guide_plugins_admin-plugin.md\":\"d_XC5U-4\",\"guide_plugins_create-plugin.md\":\"C-wDq4Un\",\"guide_plugins_debug-and-publish.md\":\"CeTc01QN\",\"guide_plugins_lifecycle-and-dependencies.md\":\"BtwKS5jY\",\"guide_plugins_permissions-and-settings.md\":\"05CsB1I6\",\"guide_plugins_routes-menus-locales.md\":\"B2dzO2DN\",\"guide_pro-form.md\":\"DbSHbrMu\",\"guide_pro-table.md\":\"DBuYQYgG\",\"guide_request-and-components.md\":\"BQXI_ZxY\",\"guide_routing-and-menu.md\":\"-zrm3BV9\",\"guide_theme-tokens.md\":\"DXpbrOjS\",\"index.md\":\"BUgI8r98\",\"readme.md\":\"BEUJStMI\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Vue-Bag-Admin\",\"description\":\"基于 Vue3 + Vite6 + Naive UI + Pinia + Strapi5 的中后台系统框架\",\"base\":\"/@melt-js/docs-bag@2026.11.7/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":\"dark\",\"themeConfig\":{\"logo\":\"/logo.png\",\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"指南\",\"link\":\"/guide/introduction\"},{\"text\":\"在线预览\",\"link\":\"https://hangjob.github.io/vue-bag-admin/\"},{\"text\":\"社区\",\"items\":[{\"text\":\"微信群\",\"link\":\"/#community\"},{\"text\":\"知航驿站\",\"link\":\"https://www.itnavs.com/\"},{\"text\":\"合作机会\",\"link\":\"https://yh.itnavs.com/contact\"}]},{\"text\":\"v2026.11.7\",\"link\":\"https://www.npmjs.com/package/@melt-js/libs-bag-entry\"}],\"sidebar\":{\"/guide/\":[{\"text\":\"开始使用\",\"items\":[{\"text\":\"项目介绍\",\"link\":\"/guide/introduction\"},{\"text\":\"快速上手\",\"link\":\"/guide/getting-started\"},{\"text\":\"创建项目\",\"link\":\"/guide/create-project\"}]},{\"text\":\"核心开发\",\"items\":[{\"text\":\"初始化宿主\",\"link\":\"/guide/host/bootstrap\"},{\"text\":\"路由与菜单\",\"link\":\"/guide/host/routing-and-menu\"},{\"text\":\"登录与权限\",\"link\":\"/guide/host/auth-and-permissions\"},{\"text\":\"请求与组件\",\"link\":\"/guide/request-and-components\"}]},{\"text\":\"官方插件\",\"items\":[{\"text\":\"插件总览\",\"link\":\"/guide/official-plugins/\"},{\"text\":\"安装与启停\",\"link\":\"/guide/official-plugins/install-and-toggle\"},{\"text\":\"商城插件\",\"link\":\"/guide/official-plugins/shop\"},{\"text\":\"系统设置插件\",\"link\":\"/guide/official-plugins/sys-setting\"}]},{\"text\":\"插件开发\",\"items\":[{\"text\":\"创建插件\",\"link\":\"/guide/plugins/create-plugin\"},{\"text\":\"AdminPlugin 配置\",\"link\":\"/guide/plugins/admin-plugin\"},{\"text\":\"路由、菜单与多语言\",\"link\":\"/guide/plugins/routes-menus-locales\"},{\"text\":\"权限与配置项\",\"link\":\"/guide/plugins/permissions-and-settings\"},{\"text\":\"生命周期与依赖\",\"link\":\"/guide/plugins/lifecycle-and-dependencies\"},{\"text\":\"调试与发布\",\"link\":\"/guide/plugins/debug-and-publish\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/hangjob/vue-bag-admin/tree/next\"}],\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2026-present Vue-Bag-Admin\"},\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
70
+ <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&lt;/</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">template</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">&gt;</span></span></code></pre></div><h2 id="它解决什么" tabindex="-1">它解决什么 <a class="header-anchor" href="#它解决什么" aria-label="Permalink to &quot;它解决什么&quot;">​</a></h2><ul><li>表单和列表页的重复代码会少很多</li><li>页面能直接吃 Schema 和字典协议</li><li>宿主和插件之间更容易共享页面搭建方式</li><li>基于 <code>naive-ui</code>,比较适合快速搭中后台</li></ul><h2 id="边界" tabindex="-1">边界 <a class="header-anchor" href="#边界" aria-label="Permalink to &quot;边界&quot;">​</a></h2><ul><li>它不负责插件挂载和宿主初始化</li><li>它不定义 Schema 协议本身,那部分来自 <code>@melt-js/libs-bag-core</code></li><li>它更偏通用积木层,复杂业务流程还是放在页面层自己组合</li></ul><h2 id="继续阅读" tabindex="-1">继续阅读 <a class="header-anchor" href="#继续阅读" aria-label="Permalink to &quot;继续阅读&quot;">​</a></h2><ul><li><a href="./pro-table.html">PmProTable</a></li><li><a href="./pro-form.html">PmProForm</a></li><li><a href="./dictionary-system.html">字典系统</a></li></ul></div></div></main><footer class="VPDocFooter" data-v-c1154bb5 data-v-1803e81a><!--[--><!--]--><div class="edit-info" data-v-1803e81a><!----><div class="last-updated" data-v-1803e81a><p class="VPLastUpdated" data-v-1803e81a data-v-3993c1fc>Last updated: <time datetime="2026-11-07T09:53:20.000Z" data-v-3993c1fc></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-1803e81a><span class="visually-hidden" id="doc-footer-aria-label" data-v-1803e81a>Pager</span><div class="pager" data-v-1803e81a><!----></div><div class="pager" data-v-1803e81a><a class="VPLink link pager-link next" href="/@melt-js/docs-bag@2026.11.16/dist/guide/introduction.html" data-v-1803e81a><!--[--><span class="desc" data-v-1803e81a>Next page</span><span class="title" data-v-1803e81a>项目介绍</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-0edfb049 data-v-5db284cc><div class="container" data-v-5db284cc><p class="message" data-v-5db284cc>Released under the MIT License.</p><p class="copyright" data-v-5db284cc>Copyright © 2026-present Vue-Bag-Admin</p></div></footer><!--[--><!--]--></div></div>
71
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"guide_complete-host-app.md\":\"CBuOgyl8\",\"guide_create-project.md\":\"B2KkXWnI\",\"guide_deployment.md\":\"BrvgEFf0\",\"guide_dictionary-system.md\":\"hS_2-jYz\",\"guide_getting-started.md\":\"0nvT0khJ\",\"guide_host_auth-and-permissions.md\":\"Pr66-VM-\",\"guide_host_bootstrap.md\":\"DKFeJyTi\",\"guide_host_routing-and-menu.md\":\"CQaMO4vj\",\"guide_introduction.md\":\"tg6wBrpR\",\"guide_local-debugging.md\":\"DVHeXzws\",\"guide_network-request.md\":\"BlxKmm59\",\"guide_official-plugins_index.md\":\"BF-gWYVU\",\"guide_official-plugins_install-and-toggle.md\":\"B35ne8VL\",\"guide_official-plugins_shop.md\":\"BGGP886L\",\"guide_official-plugins_sys-setting.md\":\"BwiJzRiL\",\"guide_package-core.md\":\"D1xrMRok\",\"guide_package-ecosystem.md\":\"Dl2r9NSa\",\"guide_package-plugin-shop.md\":\"BaIhzPDV\",\"guide_package-plugin-sys-setting.md\":\"C0ROCk-O\",\"guide_package-publishing.md\":\"De2Y0rte\",\"guide_package-request.md\":\"DugGGXSX\",\"guide_package-ui.md\":\"BPCpNCIF\",\"guide_permissions.md\":\"DHnKaha_\",\"guide_plugin-development.md\":\"DeFWVfLN\",\"guide_plugins_admin-plugin.md\":\"XLffV1LB\",\"guide_plugins_create-plugin.md\":\"Br3OIR1m\",\"guide_plugins_debug-and-publish.md\":\"C5ZbCito\",\"guide_plugins_lifecycle-and-dependencies.md\":\"CV7nFME-\",\"guide_plugins_permissions-and-settings.md\":\"B_MrVXY_\",\"guide_plugins_routes-menus-locales.md\":\"heaL1_wi\",\"guide_pro-form.md\":\"L9CKqs5C\",\"guide_pro-table.md\":\"DlhJG49R\",\"guide_request-and-components.md\":\"CeEnrOuY\",\"guide_routing-and-menu.md\":\"09TL-ILh\",\"guide_theme-tokens.md\":\"Cfn7RM_2\",\"index.md\":\"ClEmxxY1\",\"readme.md\":\"D8R8Eb23\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Vue-Bag-Admin\",\"description\":\"基于 Vue3 + Vite6 + Naive UI + Pinia + Strapi5 的中后台系统框架\",\"base\":\"/@melt-js/docs-bag@2026.11.16/dist/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":\"dark\",\"themeConfig\":{\"logo\":\"/logo.png\",\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"指南\",\"link\":\"/guide/introduction\"},{\"text\":\"在线预览\",\"link\":\"https://hangjob.github.io/vue-bag-admin/\"},{\"text\":\"社区\",\"items\":[{\"text\":\"微信群\",\"link\":\"/#community\"},{\"text\":\"知航驿站\",\"link\":\"https://www.itnavs.com/\"},{\"text\":\"合作机会\",\"link\":\"https://yh.itnavs.com/contact\"}]},{\"text\":\"v2026.11.16\",\"link\":\"https://www.npmjs.com/package/@melt-js/libs-bag-entry\"}],\"sidebar\":{\"/guide/\":[{\"text\":\"开始使用\",\"items\":[{\"text\":\"项目介绍\",\"link\":\"/guide/introduction\"},{\"text\":\"快速上手\",\"link\":\"/guide/getting-started\"},{\"text\":\"创建项目\",\"link\":\"/guide/create-project\"}]},{\"text\":\"核心开发\",\"items\":[{\"text\":\"初始化宿主\",\"link\":\"/guide/host/bootstrap\"},{\"text\":\"路由与菜单\",\"link\":\"/guide/host/routing-and-menu\"},{\"text\":\"登录与权限\",\"link\":\"/guide/host/auth-and-permissions\"},{\"text\":\"请求与组件\",\"link\":\"/guide/request-and-components\"}]},{\"text\":\"官方插件\",\"items\":[{\"text\":\"插件总览\",\"link\":\"/guide/official-plugins/\"},{\"text\":\"安装与启停\",\"link\":\"/guide/official-plugins/install-and-toggle\"},{\"text\":\"商城插件\",\"link\":\"/guide/official-plugins/shop\"},{\"text\":\"系统设置插件\",\"link\":\"/guide/official-plugins/sys-setting\"}]},{\"text\":\"插件开发\",\"items\":[{\"text\":\"创建插件\",\"link\":\"/guide/plugins/create-plugin\"},{\"text\":\"AdminPlugin 配置\",\"link\":\"/guide/plugins/admin-plugin\"},{\"text\":\"路由、菜单与多语言\",\"link\":\"/guide/plugins/routes-menus-locales\"},{\"text\":\"权限与配置项\",\"link\":\"/guide/plugins/permissions-and-settings\"},{\"text\":\"生命周期与依赖\",\"link\":\"/guide/plugins/lifecycle-and-dependencies\"},{\"text\":\"调试与发布\",\"link\":\"/guide/plugins/debug-and-publish\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/hangjob/vue-bag-admin/tree/next\"}],\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2026-present Vue-Bag-Admin\"},\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
72
72
 
73
73
  </body>
74
74
  </html>
@@ -6,19 +6,19 @@
6
6
  <title>权限管理 | Vue-Bag-Admin</title>
7
7
  <meta name="description" content="基于 Vue3 + Vite6 + Naive UI + Pinia + Strapi5 的中后台系统框架">
8
8
  <meta name="generator" content="VitePress v1.6.4">
9
- <link rel="preload stylesheet" href="/@melt-js/docs-bag@2026.11.7/assets/style.0snOvk0r.css" as="style">
10
- <link rel="preload stylesheet" href="/@melt-js/docs-bag@2026.11.7/vp-icons.css" as="style">
9
+ <link rel="preload stylesheet" href="/@melt-js/docs-bag@2026.11.16/dist/assets/style.IeUynjWL.css" as="style">
10
+ <link rel="preload stylesheet" href="/@melt-js/docs-bag@2026.11.16/dist/vp-icons.css" as="style">
11
11
 
12
- <script type="module" src="/@melt-js/docs-bag@2026.11.7/assets/app.CPZ-gtYR.js"></script>
13
- <link rel="preload" href="/@melt-js/docs-bag@2026.11.7/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
- <link rel="modulepreload" href="/@melt-js/docs-bag@2026.11.7/assets/chunks/theme.C4rSMcmz.js">
15
- <link rel="modulepreload" href="/@melt-js/docs-bag@2026.11.7/assets/chunks/framework.B3lxS50j.js">
16
- <link rel="modulepreload" href="/@melt-js/docs-bag@2026.11.7/assets/guide_permissions.md.B_5re4AR.lean.js">
12
+ <script type="module" src="/@melt-js/docs-bag@2026.11.16/dist/assets/app.B2EI2o4q.js"></script>
13
+ <link rel="preload" href="/@melt-js/docs-bag@2026.11.16/dist/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
+ <link rel="modulepreload" href="/@melt-js/docs-bag@2026.11.16/dist/assets/chunks/theme.BJkR0Hu5.js">
15
+ <link rel="modulepreload" href="/@melt-js/docs-bag@2026.11.16/dist/assets/chunks/framework.Olv9GB1A.js">
16
+ <link rel="modulepreload" href="/@melt-js/docs-bag@2026.11.16/dist/assets/guide_permissions.md.DHnKaha_.lean.js">
17
17
  <script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"dark",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
18
18
  <script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
19
19
  </head>
20
20
  <body>
21
- <div id="app"><div class="Layout" data-v-5d98c3a5><!--[--><!--]--><!--[--><span tabindex="-1" data-v-0b0ada53></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-0b0ada53>Skip to content</a><!--]--><!----><header class="VPNav" data-v-5d98c3a5 data-v-ae24b3ad><div class="VPNavBar" data-v-ae24b3ad data-v-6aa21345><div class="wrapper" data-v-6aa21345><div class="container" data-v-6aa21345><div class="title" data-v-6aa21345><div class="VPNavBarTitle has-sidebar" data-v-6aa21345 data-v-1168a8e4><a class="title" href="/@melt-js/docs-bag@2026.11.7/" data-v-1168a8e4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/@melt-js/docs-bag@2026.11.7/logo.png" alt data-v-8426fc1a><!--]--><span data-v-1168a8e4>Vue-Bag-Admin</span><!--[--><!--]--></a></div></div><div class="content" data-v-6aa21345><div class="content-body" data-v-6aa21345><!--[--><!--]--><div class="VPNavBarSearch search" data-v-6aa21345><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-6aa21345 data-v-dc692963><span id="main-nav-aria-label" class="visually-hidden" data-v-dc692963> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/@melt-js/docs-bag@2026.11.7/" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>首页</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/@melt-js/docs-bag@2026.11.7/guide/introduction.html" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>指南</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://hangjob.github.io/vue-bag-admin/" target="_blank" rel="noreferrer" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>在线预览</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-dc692963 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-cf11d7a2><span class="text" data-v-cf11d7a2><!----><span data-v-cf11d7a2>社区</span><span class="vpi-chevron-down text-icon" data-v-cf11d7a2></span></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><div class="items" data-v-b98bc113><!--[--><!--[--><div class="VPMenuLink" data-v-b98bc113 data-v-35975db6><a class="VPLink link" href="/@melt-js/docs-bag@2026.11.7/#community" data-v-35975db6><!--[--><span data-v-35975db6>微信群</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b98bc113 data-v-35975db6><a class="VPLink link vp-external-link-icon" href="https://www.itnavs.com/" target="_blank" rel="noreferrer" data-v-35975db6><!--[--><span data-v-35975db6>知航驿站</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-b98bc113 data-v-35975db6><a class="VPLink link vp-external-link-icon" href="https://yh.itnavs.com/contact" target="_blank" rel="noreferrer" data-v-35975db6><!--[--><span data-v-35975db6>合作机会</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://www.npmjs.com/package/@melt-js/libs-bag-entry" target="_blank" rel="noreferrer" tabindex="0" data-v-dc692963 data-v-e56f3d57><!--[--><span data-v-e56f3d57>v2026.11.7</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-6aa21345 data-v-6c893767><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="true" data-v-6c893767 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-6aa21345 data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/hangjob/vue-bag-admin/tree/next" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-6aa21345 data-v-bb2aa2f0 data-v-cf11d7a2><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-cf11d7a2><span class="vpi-more-horizontal icon" data-v-cf11d7a2></span></button><div class="menu" data-v-cf11d7a2><div class="VPMenu" data-v-cf11d7a2 data-v-b98bc113><!----><!--[--><!--[--><!----><div class="group" data-v-bb2aa2f0><div class="item appearance" data-v-bb2aa2f0><p class="label" data-v-bb2aa2f0>Appearance</p><div class="appearance-action" data-v-bb2aa2f0><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="true" data-v-bb2aa2f0 data-v-5337faa4 data-v-1d5665e3><span class="check" data-v-1d5665e3><span class="icon" data-v-1d5665e3><!--[--><span class="vpi-sun sun" data-v-5337faa4></span><span class="vpi-moon moon" data-v-5337faa4></span><!--]--></span></span></button></div></div></div><div class="group" data-v-bb2aa2f0><div class="item social-links" data-v-bb2aa2f0><div class="VPSocialLinks social-links-list" data-v-bb2aa2f0 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/hangjob/vue-bag-admin/tree/next" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-bd121fe5><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-6aa21345 data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><div class="divider" data-v-6aa21345><div class="divider-line" data-v-6aa21345></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-5d98c3a5 data-v-a6f0e41e><div class="container" data-v-a6f0e41e><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a6f0e41e><span class="vpi-align-left menu-icon" data-v-a6f0e41e></span><span class="menu-text" data-v-a6f0e41e>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a6f0e41e data-v-8a42e2b4><button data-v-8a42e2b4>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-5d98c3a5 data-v-319d5ca6><div class="curtain" data-v-319d5ca6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-319d5ca6><span class="visually-hidden" id="sidebar-aria-label" data-v-319d5ca6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>开始使用</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/introduction.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>项目介绍</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/getting-started.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>快速上手</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/create-project.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>创建项目</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>核心开发</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/host/bootstrap.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>初始化宿主</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/host/routing-and-menu.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>路由与菜单</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/host/auth-and-permissions.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>登录与权限</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/request-and-components.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>请求与组件</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>官方插件</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/official-plugins/" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>插件总览</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/official-plugins/install-and-toggle.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>安装与启停</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/official-plugins/shop.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>商城插件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/official-plugins/sys-setting.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>系统设置插件</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-c40bc020><section class="VPSidebarItem level-0" data-v-c40bc020 data-v-b3fd67f8><div class="item" role="button" tabindex="0" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><h2 class="text" data-v-b3fd67f8>插件开发</h2><!----></div><div class="items" data-v-b3fd67f8><!--[--><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/plugins/create-plugin.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>创建插件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/plugins/admin-plugin.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>AdminPlugin 配置</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/plugins/routes-menus-locales.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>路由、菜单与多语言</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/plugins/permissions-and-settings.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>权限与配置项</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/plugins/lifecycle-and-dependencies.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>生命周期与依赖</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-b3fd67f8><div class="item" data-v-b3fd67f8><div class="indicator" data-v-b3fd67f8></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.7/guide/plugins/debug-and-publish.html" data-v-b3fd67f8><!--[--><p class="text" data-v-b3fd67f8>调试与发布</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-5d98c3a5 data-v-1428d186><div class="VPDoc has-sidebar has-aside" data-v-1428d186 data-v-39a288b8><!--[--><!--]--><div class="container" data-v-39a288b8><div class="aside" data-v-39a288b8><div class="aside-curtain" data-v-39a288b8></div><div class="aside-container" data-v-39a288b8><div class="aside-content" data-v-39a288b8><div class="VPDocAside" data-v-39a288b8 data-v-3f215769><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-3f215769 data-v-a5bbad30><div class="content" data-v-a5bbad30><div class="outline-marker" data-v-a5bbad30></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-a5bbad30>On this page</div><ul class="VPDocOutlineItem root" data-v-a5bbad30 data-v-b933a997><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-39a288b8><div class="content-container" data-v-39a288b8><!--[--><!--]--><main class="main" data-v-39a288b8><div style="position:relative;" class="vp-doc _@melt-js_docs-bag@2026_11_7_guide_permissions" data-v-39a288b8><div><h1 id="权限管理" tabindex="-1">权限管理 <a class="header-anchor" href="#权限管理" aria-label="Permalink to &quot;权限管理&quot;">​</a></h1><p>Vue-Bag-Admin 的权限模型基于 RBAC,覆盖这几块:</p><ul><li>页面级路由权限</li><li>菜单级权限过滤</li><li>按钮和组件级权限控制</li></ul><h2 id="权限数据流转" tabindex="-1">权限数据流转 <a class="header-anchor" href="#权限数据流转" aria-label="Permalink to &quot;权限数据流转&quot;">​</a></h2><p>前端鉴权主要看 <code>userStore</code> 里的两个状态:<code>roles</code>(角色列表)和 <code>permissions</code>(权限标识列表)。</p><p>不管后端怎么写,前端这边通常按这条链路走:</p><ol><li>用户登录成功后,前端请求获取当前用户信息(如 <code>/api/users/me</code> 接口)。</li><li>后端需要在返回信息中,带上该用户的所属角色(如 <code>[&#39;admin&#39;]</code>)以及具体的权限点(如 <code>[&#39;shop.read&#39;, &#39;shop.write&#39;]</code>)。</li><li>前端将这些角色和权限点数据格式化后,存储在 Pinia 的 <code>userStore</code> 中。</li></ol><p>如果你正在使用默认的 Strapi 5 后端,框架已经处理好了这一步的数据适配。</p><h2 id="页面级权限控制-路由鉴权" tabindex="-1">页面级权限控制 (路由鉴权) <a class="header-anchor" href="#页面级权限控制-路由鉴权" aria-label="Permalink to &quot;页面级权限控制 (路由鉴权)&quot;">​</a></h2><p>在路由里配置 <code>meta.roles</code> 或 <code>meta.permissions</code>,就能限制谁可以访问该页面。</p><h3 id="按角色拦截" tabindex="-1">按角色拦截 <a class="header-anchor" href="#按角色拦截" aria-label="Permalink to &quot;按角色拦截&quot;">​</a></h3><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
21
+ <div id="app"><div class="Layout" data-v-0edfb049><!--[--><!--]--><!--[--><span tabindex="-1" data-v-7b519ef7></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-7b519ef7>Skip to content</a><!--]--><!----><header class="VPNav" data-v-0edfb049 data-v-cd38b33d><div class="VPNavBar" data-v-cd38b33d data-v-61f8f22d><div class="wrapper" data-v-61f8f22d><div class="container" data-v-61f8f22d><div class="title" data-v-61f8f22d><div class="VPNavBarTitle has-sidebar" data-v-61f8f22d data-v-df65655a><a class="title" href="/@melt-js/docs-bag@2026.11.16/dist/" data-v-df65655a><!--[--><!--]--><!--[--><img class="VPImage logo" src="/@melt-js/docs-bag@2026.11.16/dist/logo.png" alt data-v-0be788e2><!--]--><span data-v-df65655a>Vue-Bag-Admin</span><!--[--><!--]--></a></div></div><div class="content" data-v-61f8f22d><div class="content-body" data-v-61f8f22d><!--[--><!--]--><div class="VPNavBarSearch search" data-v-61f8f22d><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-61f8f22d data-v-52b0ba7e><span id="main-nav-aria-label" class="visually-hidden" data-v-52b0ba7e> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/@melt-js/docs-bag@2026.11.16/dist/" tabindex="0" data-v-52b0ba7e data-v-32d1898c><!--[--><span data-v-32d1898c>首页</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/@melt-js/docs-bag@2026.11.16/dist/guide/introduction.html" tabindex="0" data-v-52b0ba7e data-v-32d1898c><!--[--><span data-v-32d1898c>指南</span><!--]--></a><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://hangjob.github.io/vue-bag-admin/" target="_blank" rel="noreferrer" tabindex="0" data-v-52b0ba7e data-v-32d1898c><!--[--><span data-v-32d1898c>在线预览</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-52b0ba7e data-v-af632b79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-af632b79><span class="text" data-v-af632b79><!----><span data-v-af632b79>社区</span><span class="vpi-chevron-down text-icon" data-v-af632b79></span></span></button><div class="menu" data-v-af632b79><div class="VPMenu" data-v-af632b79 data-v-91f581de><div class="items" data-v-91f581de><!--[--><!--[--><div class="VPMenuLink" data-v-91f581de data-v-0a7b9194><a class="VPLink link" href="/@melt-js/docs-bag@2026.11.16/dist/#community" data-v-0a7b9194><!--[--><span data-v-0a7b9194>微信群</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-91f581de data-v-0a7b9194><a class="VPLink link vp-external-link-icon" href="https://www.itnavs.com/" target="_blank" rel="noreferrer" data-v-0a7b9194><!--[--><span data-v-0a7b9194>知航驿站</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-91f581de data-v-0a7b9194><a class="VPLink link vp-external-link-icon" href="https://yh.itnavs.com/contact" target="_blank" rel="noreferrer" data-v-0a7b9194><!--[--><span data-v-0a7b9194>合作机会</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><a class="VPLink link vp-external-link-icon VPNavBarMenuLink" href="https://www.npmjs.com/package/@melt-js/libs-bag-entry" target="_blank" rel="noreferrer" tabindex="0" data-v-52b0ba7e data-v-32d1898c><!--[--><span data-v-32d1898c>v2026.11.16</span><!--]--></a><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-61f8f22d data-v-dc17aa45><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="true" data-v-dc17aa45 data-v-685f7c6e data-v-e5c4a645><span class="check" data-v-e5c4a645><span class="icon" data-v-e5c4a645><!--[--><span class="vpi-sun sun" data-v-685f7c6e></span><span class="vpi-moon moon" data-v-685f7c6e></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-61f8f22d data-v-6ba2cce0 data-v-95361356><!--[--><a class="VPSocialLink no-icon" href="https://github.com/hangjob/vue-bag-admin/tree/next" aria-label="github" target="_blank" rel="noopener" data-v-95361356 data-v-ff15611b><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-61f8f22d data-v-6bf73ff9 data-v-af632b79><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-af632b79><span class="vpi-more-horizontal icon" data-v-af632b79></span></button><div class="menu" data-v-af632b79><div class="VPMenu" data-v-af632b79 data-v-91f581de><!----><!--[--><!--[--><!----><div class="group" data-v-6bf73ff9><div class="item appearance" data-v-6bf73ff9><p class="label" data-v-6bf73ff9>Appearance</p><div class="appearance-action" data-v-6bf73ff9><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="true" data-v-6bf73ff9 data-v-685f7c6e data-v-e5c4a645><span class="check" data-v-e5c4a645><span class="icon" data-v-e5c4a645><!--[--><span class="vpi-sun sun" data-v-685f7c6e></span><span class="vpi-moon moon" data-v-685f7c6e></span><!--]--></span></span></button></div></div></div><div class="group" data-v-6bf73ff9><div class="item social-links" data-v-6bf73ff9><div class="VPSocialLinks social-links-list" data-v-6bf73ff9 data-v-95361356><!--[--><a class="VPSocialLink no-icon" href="https://github.com/hangjob/vue-bag-admin/tree/next" aria-label="github" target="_blank" rel="noopener" data-v-95361356 data-v-ff15611b><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-61f8f22d data-v-633bcbbe><span class="container" data-v-633bcbbe><span class="top" data-v-633bcbbe></span><span class="middle" data-v-633bcbbe></span><span class="bottom" data-v-633bcbbe></span></span></button></div></div></div></div><div class="divider" data-v-61f8f22d><div class="divider-line" data-v-61f8f22d></div></div></div><!----></header><div class="VPLocalNav has-sidebar empty" data-v-0edfb049 data-v-a46b1e36><div class="container" data-v-a46b1e36><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-a46b1e36><span class="vpi-align-left menu-icon" data-v-a46b1e36></span><span class="menu-text" data-v-a46b1e36>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-a46b1e36 data-v-376aa372><button data-v-376aa372>Return to top</button><!----></div></div></div><aside class="VPSidebar" data-v-0edfb049 data-v-4290678e><div class="curtain" data-v-4290678e></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-4290678e><span class="visually-hidden" id="sidebar-aria-label" data-v-4290678e> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="no-transition group" data-v-3a01ad27><section class="VPSidebarItem level-0" data-v-3a01ad27 data-v-e46237b3><div class="item" role="button" tabindex="0" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><h2 class="text" data-v-e46237b3>开始使用</h2><!----></div><div class="items" data-v-e46237b3><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/introduction.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>项目介绍</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/getting-started.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>快速上手</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/create-project.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>创建项目</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-3a01ad27><section class="VPSidebarItem level-0" data-v-3a01ad27 data-v-e46237b3><div class="item" role="button" tabindex="0" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><h2 class="text" data-v-e46237b3>核心开发</h2><!----></div><div class="items" data-v-e46237b3><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/host/bootstrap.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>初始化宿主</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/host/routing-and-menu.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>路由与菜单</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/host/auth-and-permissions.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>登录与权限</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/request-and-components.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>请求与组件</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-3a01ad27><section class="VPSidebarItem level-0" data-v-3a01ad27 data-v-e46237b3><div class="item" role="button" tabindex="0" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><h2 class="text" data-v-e46237b3>官方插件</h2><!----></div><div class="items" data-v-e46237b3><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/official-plugins/" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>插件总览</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/official-plugins/install-and-toggle.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>安装与启停</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/official-plugins/shop.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>商城插件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/official-plugins/sys-setting.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>系统设置插件</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="no-transition group" data-v-3a01ad27><section class="VPSidebarItem level-0" data-v-3a01ad27 data-v-e46237b3><div class="item" role="button" tabindex="0" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><h2 class="text" data-v-e46237b3>插件开发</h2><!----></div><div class="items" data-v-e46237b3><!--[--><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/plugins/create-plugin.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>创建插件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/plugins/admin-plugin.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>AdminPlugin 配置</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/plugins/routes-menus-locales.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>路由、菜单与多语言</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/plugins/permissions-and-settings.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>权限与配置项</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/plugins/lifecycle-and-dependencies.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>生命周期与依赖</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-e46237b3><div class="item" data-v-e46237b3><div class="indicator" data-v-e46237b3></div><a class="VPLink link link" href="/@melt-js/docs-bag@2026.11.16/dist/guide/plugins/debug-and-publish.html" data-v-e46237b3><!--[--><p class="text" data-v-e46237b3>调试与发布</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-0edfb049 data-v-c786a43b><div class="VPDoc has-sidebar has-aside" data-v-c786a43b data-v-c1154bb5><!--[--><!--]--><div class="container" data-v-c1154bb5><div class="aside" data-v-c1154bb5><div class="aside-curtain" data-v-c1154bb5></div><div class="aside-container" data-v-c1154bb5><div class="aside-content" data-v-c1154bb5><div class="VPDocAside" data-v-c1154bb5 data-v-ac30bcc5><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-ac30bcc5 data-v-3870f070><div class="content" data-v-3870f070><div class="outline-marker" data-v-3870f070></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-3870f070>On this page</div><ul class="VPDocOutlineItem root" data-v-3870f070 data-v-d3fae412><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-ac30bcc5></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-c1154bb5><div class="content-container" data-v-c1154bb5><!--[--><!--]--><main class="main" data-v-c1154bb5><div style="position:relative;" class="vp-doc _@melt-js_docs-bag@2026_11_16_dist_guide_permissions" data-v-c1154bb5><div><h1 id="权限管理" tabindex="-1">权限管理 <a class="header-anchor" href="#权限管理" aria-label="Permalink to &quot;权限管理&quot;">​</a></h1><p>Vue-Bag-Admin 的权限模型基于 RBAC,覆盖这几块:</p><ul><li>页面级路由权限</li><li>菜单级权限过滤</li><li>按钮和组件级权限控制</li></ul><h2 id="权限数据流转" tabindex="-1">权限数据流转 <a class="header-anchor" href="#权限数据流转" aria-label="Permalink to &quot;权限数据流转&quot;">​</a></h2><p>前端鉴权主要看 <code>userStore</code> 里的两个状态:<code>roles</code>(角色列表)和 <code>permissions</code>(权限标识列表)。</p><p>不管后端怎么写,前端这边通常按这条链路走:</p><ol><li>用户登录成功后,前端请求获取当前用户信息(如 <code>/api/users/me</code> 接口)。</li><li>后端需要在返回信息中,带上该用户的所属角色(如 <code>[&#39;admin&#39;]</code>)以及具体的权限点(如 <code>[&#39;shop.read&#39;, &#39;shop.write&#39;]</code>)。</li><li>前端将这些角色和权限点数据格式化后,存储在 Pinia 的 <code>userStore</code> 中。</li></ol><p>如果你正在使用默认的 Strapi 5 后端,框架已经处理好了这一步的数据适配。</p><h2 id="页面级权限控制-路由鉴权" tabindex="-1">页面级权限控制 (路由鉴权) <a class="header-anchor" href="#页面级权限控制-路由鉴权" aria-label="Permalink to &quot;页面级权限控制 (路由鉴权)&quot;">​</a></h2><p>在路由里配置 <code>meta.roles</code> 或 <code>meta.permissions</code>,就能限制谁可以访问该页面。</p><h3 id="按角色拦截" tabindex="-1">按角色拦截 <a class="header-anchor" href="#按角色拦截" aria-label="Permalink to &quot;按角色拦截&quot;">​</a></h3><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
22
22
  <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> path</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;/admin/settings&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
23
23
  <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> component</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: () </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=&gt;</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;./views/Settings.vue&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">),</span></span>
24
24
  <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> meta</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
@@ -100,8 +100,8 @@
100
100
  <span class="line"></span>
101
101
  <span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> canDelete</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> useAccess</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">({</span></span>
102
102
  <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> permissions: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;shop.product.delete&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span>
103
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span></code></pre></div><h2 id="方法说明" tabindex="-1">方法说明 <a class="header-anchor" href="#方法说明" aria-label="Permalink to &quot;方法说明&quot;">​</a></h2><ul><li><code>userStore.hasRole(roles?: string[], mode?: &#39;any&#39; | &#39;all&#39;)</code>: 判断当前用户是否拥有指定的角色。默认满足其一即返回 <code>true</code>。</li><li><code>userStore.hasPermission(perms?: string[], mode?: &#39;any&#39; | &#39;all&#39;)</code>: 判断当前用户是否拥有指定的权限。如果用户权限中包含 <code>*</code>(超级管理员标志),将始终返回 <code>true</code>。</li><li><code>canAccess(requirement)</code>: 权限判断方法,供路由、组件、指令复用。</li><li><code>useAccess(requirement)</code>: 响应式权限判断组合函数。</li></ul><h2 id="使用建议" tabindex="-1">使用建议 <a class="header-anchor" href="#使用建议" aria-label="Permalink to &quot;使用建议&quot;">​</a></h2><ul><li>页面路由:优先配置 <code>meta.roles</code> 或 <code>meta.permissions</code></li><li>菜单节点:和页面保持相同权限口径</li><li>单个按钮:优先使用 <code>v-permission</code></li><li>一整块区域:优先使用 <code>PermissionAccess</code></li><li>复杂组合逻辑:使用 <code>canAccess()</code> 或 <code>useAccess()</code></li></ul></div></div></main><footer class="VPDocFooter" data-v-39a288b8 data-v-e257564d><!--[--><!--]--><div class="edit-info" data-v-e257564d><!----><div class="last-updated" data-v-e257564d><p class="VPLastUpdated" data-v-e257564d data-v-e98dd255>Last updated: <time datetime="2026-11-07T09:53:20.000Z" data-v-e98dd255></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-e257564d><span class="visually-hidden" id="doc-footer-aria-label" data-v-e257564d>Pager</span><div class="pager" data-v-e257564d><!----></div><div class="pager" data-v-e257564d><a class="VPLink link pager-link next" href="/@melt-js/docs-bag@2026.11.7/guide/introduction.html" data-v-e257564d><!--[--><span class="desc" data-v-e257564d>Next page</span><span class="title" data-v-e257564d>项目介绍</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-5d98c3a5 data-v-e315a0ad><div class="container" data-v-e315a0ad><p class="message" data-v-e315a0ad>Released under the MIT License.</p><p class="copyright" data-v-e315a0ad>Copyright © 2026-present Vue-Bag-Admin</p></div></footer><!--[--><!--]--></div></div>
104
- <script>window.__VP_HASH_MAP__=JSON.parse("{\"guide_complete-host-app.md\":\"CDRzLz0E\",\"guide_create-project.md\":\"LRNhDD9x\",\"guide_deployment.md\":\"B8aEUabm\",\"guide_dictionary-system.md\":\"Dy0tQYMR\",\"guide_getting-started.md\":\"B-mobXxi\",\"guide_host_auth-and-permissions.md\":\"DWH3Vape\",\"guide_host_bootstrap.md\":\"DpbxPIZw\",\"guide_host_routing-and-menu.md\":\"BdCMIOxn\",\"guide_introduction.md\":\"1MiCcWyO\",\"guide_local-debugging.md\":\"CLJoKVb9\",\"guide_network-request.md\":\"DDlA8bc0\",\"guide_official-plugins_index.md\":\"DPwemCGy\",\"guide_official-plugins_install-and-toggle.md\":\"Eq2hWjYn\",\"guide_official-plugins_shop.md\":\"yBltEx-o\",\"guide_official-plugins_sys-setting.md\":\"BmkuOqGv\",\"guide_package-core.md\":\"-E29SYy8\",\"guide_package-ecosystem.md\":\"Di3RcVpF\",\"guide_package-plugin-shop.md\":\"D-xXN7Yg\",\"guide_package-plugin-sys-setting.md\":\"Dx3nxHVF\",\"guide_package-publishing.md\":\"B7hzTYDH\",\"guide_package-request.md\":\"DxaD65eM\",\"guide_package-ui.md\":\"wBZ_iQLb\",\"guide_permissions.md\":\"B_5re4AR\",\"guide_plugin-development.md\":\"BQzTwLRr\",\"guide_plugins_admin-plugin.md\":\"d_XC5U-4\",\"guide_plugins_create-plugin.md\":\"C-wDq4Un\",\"guide_plugins_debug-and-publish.md\":\"CeTc01QN\",\"guide_plugins_lifecycle-and-dependencies.md\":\"BtwKS5jY\",\"guide_plugins_permissions-and-settings.md\":\"05CsB1I6\",\"guide_plugins_routes-menus-locales.md\":\"B2dzO2DN\",\"guide_pro-form.md\":\"DbSHbrMu\",\"guide_pro-table.md\":\"DBuYQYgG\",\"guide_request-and-components.md\":\"BQXI_ZxY\",\"guide_routing-and-menu.md\":\"-zrm3BV9\",\"guide_theme-tokens.md\":\"DXpbrOjS\",\"index.md\":\"BUgI8r98\",\"readme.md\":\"BEUJStMI\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Vue-Bag-Admin\",\"description\":\"基于 Vue3 + Vite6 + Naive UI + Pinia + Strapi5 的中后台系统框架\",\"base\":\"/@melt-js/docs-bag@2026.11.7/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":\"dark\",\"themeConfig\":{\"logo\":\"/logo.png\",\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"指南\",\"link\":\"/guide/introduction\"},{\"text\":\"在线预览\",\"link\":\"https://hangjob.github.io/vue-bag-admin/\"},{\"text\":\"社区\",\"items\":[{\"text\":\"微信群\",\"link\":\"/#community\"},{\"text\":\"知航驿站\",\"link\":\"https://www.itnavs.com/\"},{\"text\":\"合作机会\",\"link\":\"https://yh.itnavs.com/contact\"}]},{\"text\":\"v2026.11.7\",\"link\":\"https://www.npmjs.com/package/@melt-js/libs-bag-entry\"}],\"sidebar\":{\"/guide/\":[{\"text\":\"开始使用\",\"items\":[{\"text\":\"项目介绍\",\"link\":\"/guide/introduction\"},{\"text\":\"快速上手\",\"link\":\"/guide/getting-started\"},{\"text\":\"创建项目\",\"link\":\"/guide/create-project\"}]},{\"text\":\"核心开发\",\"items\":[{\"text\":\"初始化宿主\",\"link\":\"/guide/host/bootstrap\"},{\"text\":\"路由与菜单\",\"link\":\"/guide/host/routing-and-menu\"},{\"text\":\"登录与权限\",\"link\":\"/guide/host/auth-and-permissions\"},{\"text\":\"请求与组件\",\"link\":\"/guide/request-and-components\"}]},{\"text\":\"官方插件\",\"items\":[{\"text\":\"插件总览\",\"link\":\"/guide/official-plugins/\"},{\"text\":\"安装与启停\",\"link\":\"/guide/official-plugins/install-and-toggle\"},{\"text\":\"商城插件\",\"link\":\"/guide/official-plugins/shop\"},{\"text\":\"系统设置插件\",\"link\":\"/guide/official-plugins/sys-setting\"}]},{\"text\":\"插件开发\",\"items\":[{\"text\":\"创建插件\",\"link\":\"/guide/plugins/create-plugin\"},{\"text\":\"AdminPlugin 配置\",\"link\":\"/guide/plugins/admin-plugin\"},{\"text\":\"路由、菜单与多语言\",\"link\":\"/guide/plugins/routes-menus-locales\"},{\"text\":\"权限与配置项\",\"link\":\"/guide/plugins/permissions-and-settings\"},{\"text\":\"生命周期与依赖\",\"link\":\"/guide/plugins/lifecycle-and-dependencies\"},{\"text\":\"调试与发布\",\"link\":\"/guide/plugins/debug-and-publish\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/hangjob/vue-bag-admin/tree/next\"}],\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2026-present Vue-Bag-Admin\"},\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
103
+ <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span></code></pre></div><h2 id="方法说明" tabindex="-1">方法说明 <a class="header-anchor" href="#方法说明" aria-label="Permalink to &quot;方法说明&quot;">​</a></h2><ul><li><code>userStore.hasRole(roles?: string[], mode?: &#39;any&#39; | &#39;all&#39;)</code>: 判断当前用户是否拥有指定的角色。默认满足其一即返回 <code>true</code>。</li><li><code>userStore.hasPermission(perms?: string[], mode?: &#39;any&#39; | &#39;all&#39;)</code>: 判断当前用户是否拥有指定的权限。如果用户权限中包含 <code>*</code>(超级管理员标志),将始终返回 <code>true</code>。</li><li><code>canAccess(requirement)</code>: 权限判断方法,供路由、组件、指令复用。</li><li><code>useAccess(requirement)</code>: 响应式权限判断组合函数。</li></ul><h2 id="使用建议" tabindex="-1">使用建议 <a class="header-anchor" href="#使用建议" aria-label="Permalink to &quot;使用建议&quot;">​</a></h2><ul><li>页面路由:优先配置 <code>meta.roles</code> 或 <code>meta.permissions</code></li><li>菜单节点:和页面保持相同权限口径</li><li>单个按钮:优先使用 <code>v-permission</code></li><li>一整块区域:优先使用 <code>PermissionAccess</code></li><li>复杂组合逻辑:使用 <code>canAccess()</code> 或 <code>useAccess()</code></li></ul></div></div></main><footer class="VPDocFooter" data-v-c1154bb5 data-v-1803e81a><!--[--><!--]--><div class="edit-info" data-v-1803e81a><!----><div class="last-updated" data-v-1803e81a><p class="VPLastUpdated" data-v-1803e81a data-v-3993c1fc>Last updated: <time datetime="2026-11-07T09:53:20.000Z" data-v-3993c1fc></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-1803e81a><span class="visually-hidden" id="doc-footer-aria-label" data-v-1803e81a>Pager</span><div class="pager" data-v-1803e81a><!----></div><div class="pager" data-v-1803e81a><a class="VPLink link pager-link next" href="/@melt-js/docs-bag@2026.11.16/dist/guide/introduction.html" data-v-1803e81a><!--[--><span class="desc" data-v-1803e81a>Next page</span><span class="title" data-v-1803e81a>项目介绍</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-0edfb049 data-v-5db284cc><div class="container" data-v-5db284cc><p class="message" data-v-5db284cc>Released under the MIT License.</p><p class="copyright" data-v-5db284cc>Copyright © 2026-present Vue-Bag-Admin</p></div></footer><!--[--><!--]--></div></div>
104
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"guide_complete-host-app.md\":\"CBuOgyl8\",\"guide_create-project.md\":\"B2KkXWnI\",\"guide_deployment.md\":\"BrvgEFf0\",\"guide_dictionary-system.md\":\"hS_2-jYz\",\"guide_getting-started.md\":\"0nvT0khJ\",\"guide_host_auth-and-permissions.md\":\"Pr66-VM-\",\"guide_host_bootstrap.md\":\"DKFeJyTi\",\"guide_host_routing-and-menu.md\":\"CQaMO4vj\",\"guide_introduction.md\":\"tg6wBrpR\",\"guide_local-debugging.md\":\"DVHeXzws\",\"guide_network-request.md\":\"BlxKmm59\",\"guide_official-plugins_index.md\":\"BF-gWYVU\",\"guide_official-plugins_install-and-toggle.md\":\"B35ne8VL\",\"guide_official-plugins_shop.md\":\"BGGP886L\",\"guide_official-plugins_sys-setting.md\":\"BwiJzRiL\",\"guide_package-core.md\":\"D1xrMRok\",\"guide_package-ecosystem.md\":\"Dl2r9NSa\",\"guide_package-plugin-shop.md\":\"BaIhzPDV\",\"guide_package-plugin-sys-setting.md\":\"C0ROCk-O\",\"guide_package-publishing.md\":\"De2Y0rte\",\"guide_package-request.md\":\"DugGGXSX\",\"guide_package-ui.md\":\"BPCpNCIF\",\"guide_permissions.md\":\"DHnKaha_\",\"guide_plugin-development.md\":\"DeFWVfLN\",\"guide_plugins_admin-plugin.md\":\"XLffV1LB\",\"guide_plugins_create-plugin.md\":\"Br3OIR1m\",\"guide_plugins_debug-and-publish.md\":\"C5ZbCito\",\"guide_plugins_lifecycle-and-dependencies.md\":\"CV7nFME-\",\"guide_plugins_permissions-and-settings.md\":\"B_MrVXY_\",\"guide_plugins_routes-menus-locales.md\":\"heaL1_wi\",\"guide_pro-form.md\":\"L9CKqs5C\",\"guide_pro-table.md\":\"DlhJG49R\",\"guide_request-and-components.md\":\"CeEnrOuY\",\"guide_routing-and-menu.md\":\"09TL-ILh\",\"guide_theme-tokens.md\":\"Cfn7RM_2\",\"index.md\":\"ClEmxxY1\",\"readme.md\":\"D8R8Eb23\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Vue-Bag-Admin\",\"description\":\"基于 Vue3 + Vite6 + Naive UI + Pinia + Strapi5 的中后台系统框架\",\"base\":\"/@melt-js/docs-bag@2026.11.16/dist/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":\"dark\",\"themeConfig\":{\"logo\":\"/logo.png\",\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"指南\",\"link\":\"/guide/introduction\"},{\"text\":\"在线预览\",\"link\":\"https://hangjob.github.io/vue-bag-admin/\"},{\"text\":\"社区\",\"items\":[{\"text\":\"微信群\",\"link\":\"/#community\"},{\"text\":\"知航驿站\",\"link\":\"https://www.itnavs.com/\"},{\"text\":\"合作机会\",\"link\":\"https://yh.itnavs.com/contact\"}]},{\"text\":\"v2026.11.16\",\"link\":\"https://www.npmjs.com/package/@melt-js/libs-bag-entry\"}],\"sidebar\":{\"/guide/\":[{\"text\":\"开始使用\",\"items\":[{\"text\":\"项目介绍\",\"link\":\"/guide/introduction\"},{\"text\":\"快速上手\",\"link\":\"/guide/getting-started\"},{\"text\":\"创建项目\",\"link\":\"/guide/create-project\"}]},{\"text\":\"核心开发\",\"items\":[{\"text\":\"初始化宿主\",\"link\":\"/guide/host/bootstrap\"},{\"text\":\"路由与菜单\",\"link\":\"/guide/host/routing-and-menu\"},{\"text\":\"登录与权限\",\"link\":\"/guide/host/auth-and-permissions\"},{\"text\":\"请求与组件\",\"link\":\"/guide/request-and-components\"}]},{\"text\":\"官方插件\",\"items\":[{\"text\":\"插件总览\",\"link\":\"/guide/official-plugins/\"},{\"text\":\"安装与启停\",\"link\":\"/guide/official-plugins/install-and-toggle\"},{\"text\":\"商城插件\",\"link\":\"/guide/official-plugins/shop\"},{\"text\":\"系统设置插件\",\"link\":\"/guide/official-plugins/sys-setting\"}]},{\"text\":\"插件开发\",\"items\":[{\"text\":\"创建插件\",\"link\":\"/guide/plugins/create-plugin\"},{\"text\":\"AdminPlugin 配置\",\"link\":\"/guide/plugins/admin-plugin\"},{\"text\":\"路由、菜单与多语言\",\"link\":\"/guide/plugins/routes-menus-locales\"},{\"text\":\"权限与配置项\",\"link\":\"/guide/plugins/permissions-and-settings\"},{\"text\":\"生命周期与依赖\",\"link\":\"/guide/plugins/lifecycle-and-dependencies\"},{\"text\":\"调试与发布\",\"link\":\"/guide/plugins/debug-and-publish\"}]}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/hangjob/vue-bag-admin/tree/next\"}],\"footer\":{\"message\":\"Released under the MIT License.\",\"copyright\":\"Copyright © 2026-present Vue-Bag-Admin\"},\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
105
105
 
106
106
  </body>
107
107
  </html>