@morningfast/platform 0.0.6

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 (87) hide show
  1. package/dist/assets/main/style.css +13 -0
  2. package/dist/assets/main.css +1 -0
  3. package/dist/assets/sub/style.css +1 -0
  4. package/dist/auth/index.d.ts +32 -0
  5. package/dist/auth.js +49 -0
  6. package/dist/chunks/Forbidden-gf6y5Zsh.js +30 -0
  7. package/dist/chunks/Login-rBkUOl6l.js +209 -0
  8. package/dist/chunks/MicroAppView-DqTrIZZa.js +249 -0
  9. package/dist/chunks/NotFound-D0ybyfbK.js +30 -0
  10. package/dist/chunks/SystemConfig-DxkDxCnC.js +194 -0
  11. package/dist/chunks/_plugin-vue_export-helper-DvRHjpsZ.js +8 -0
  12. package/dist/chunks/app-Cn5iHmfI.js +221 -0
  13. package/dist/chunks/application-config-0d6f-odq.js +287 -0
  14. package/dist/chunks/auth-C3RvRgcW.js +248 -0
  15. package/dist/chunks/config-DkMAgPn_.js +44 -0
  16. package/dist/chunks/main-CfTD1njJ.js +1798 -0
  17. package/dist/chunks/storage-DNllLr_D.js +18 -0
  18. package/dist/chunks/sub-DlD5e1ys.js +140 -0
  19. package/dist/chunks/system-BbMsTIBR.js +160 -0
  20. package/dist/index.d.ts +4 -0
  21. package/dist/index.js +8 -0
  22. package/dist/main/api/adapter.d.ts +25 -0
  23. package/dist/main/api/auth.d.ts +12 -0
  24. package/dist/main/api/client.d.ts +3 -0
  25. package/dist/main/api/types.d.ts +1 -0
  26. package/dist/main/app/create-app.d.ts +29 -0
  27. package/dist/main/app/runtime-config.d.ts +5 -0
  28. package/dist/main/auth/expired.d.ts +2 -0
  29. package/dist/main/composables/useSortable.d.ts +197 -0
  30. package/dist/main/directives/index.d.ts +2 -0
  31. package/dist/main/index.d.ts +11 -0
  32. package/dist/main/layouts/AppLayout.vue.d.ts +3 -0
  33. package/dist/main/layouts/components/AppContentView.vue.d.ts +6 -0
  34. package/dist/main/layouts/components/AppHeader.vue.d.ts +7 -0
  35. package/dist/main/layouts/components/AppHeaderMenuNode.vue.d.ts +7 -0
  36. package/dist/main/layouts/components/AppMenuSearch.vue.d.ts +10 -0
  37. package/dist/main/layouts/components/AppMenuSearchItem.vue.d.ts +17 -0
  38. package/dist/main/layouts/components/AppMenuSearchTrigger.vue.d.ts +11 -0
  39. package/dist/main/layouts/components/AppSidebar.vue.d.ts +3 -0
  40. package/dist/main/layouts/components/AppSidebarNode.vue.d.ts +8 -0
  41. package/dist/main/layouts/components/AppSidebarSearch.vue.d.ts +11 -0
  42. package/dist/main/layouts/components/AppTabs.vue.d.ts +7 -0
  43. package/dist/main/layouts/components/AppTabsContextMenu.vue.d.ts +38 -0
  44. package/dist/main/layouts/composables/useAppMenus.d.ts +23 -0
  45. package/dist/main/layouts/composables/useShortcutLabel.d.ts +4 -0
  46. package/dist/main/layouts/utils/menuIcons.d.ts +1 -0
  47. package/dist/main/layouts/utils/menuSearch.d.ts +3 -0
  48. package/dist/main/micro-apps/config.d.ts +25 -0
  49. package/dist/main/micro-apps/register.d.ts +1 -0
  50. package/dist/main/micro-apps/status.d.ts +39 -0
  51. package/dist/main/micro-apps/types.d.ts +39 -0
  52. package/dist/main/pages/auth/Login.vue.d.ts +3 -0
  53. package/dist/main/pages/error/Forbidden.vue.d.ts +3 -0
  54. package/dist/main/pages/error/NotFound.vue.d.ts +3 -0
  55. package/dist/main/pages/micro/MicroAppView.vue.d.ts +3 -0
  56. package/dist/main/pages/system/SystemConfig.vue.d.ts +3 -0
  57. package/dist/main/pages/system/application-config/index.vue.d.ts +3 -0
  58. package/dist/main/router/base-routes.d.ts +2 -0
  59. package/dist/main/router/guard.d.ts +2 -0
  60. package/dist/main/router/index.d.ts +8 -0
  61. package/dist/main/settings/components/SystemSettingsDrawer.vue.d.ts +3 -0
  62. package/dist/main/settings/components/ThemeToggleButton.vue.d.ts +3 -0
  63. package/dist/main/settings/components/ThemedSvgImage.vue.d.ts +10 -0
  64. package/dist/main/stores/app.d.ts +85 -0
  65. package/dist/main/stores/auth.d.ts +110 -0
  66. package/dist/main/stores/index.d.ts +4 -0
  67. package/dist/main/stores/system.d.ts +111 -0
  68. package/dist/main/stores/tabs.d.ts +83 -0
  69. package/dist/main/utils/auth.d.ts +1 -0
  70. package/dist/main/utils/persistence.d.ts +3 -0
  71. package/dist/main/utils/storage.d.ts +3 -0
  72. package/dist/main/utils/theme.d.ts +20 -0
  73. package/dist/main.js +5 -0
  74. package/dist/micro-contract/index.d.ts +13 -0
  75. package/dist/micro-contract.js +4 -0
  76. package/dist/request/index.d.ts +72 -0
  77. package/dist/request.js +153 -0
  78. package/dist/sub/app/mount.d.ts +7 -0
  79. package/dist/sub/composables/useRequestClient.d.ts +5 -0
  80. package/dist/sub/composables/useSubAppContext.d.ts +1 -0
  81. package/dist/sub/context/sub-app-context.d.ts +10 -0
  82. package/dist/sub/index.d.ts +8 -0
  83. package/dist/sub/qiankun/index.d.ts +38 -0
  84. package/dist/sub/router/index.d.ts +2 -0
  85. package/dist/sub/theme/index.d.ts +2 -0
  86. package/dist/sub.js +2 -0
  87. package/package.json +86 -0
@@ -0,0 +1,13 @@
1
+ :root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--app-bg:#f5f7fa;--app-surface:#ffffffeb;--app-surface-solid:#fff;--app-sidebar-bg:#fff;--app-sidebar-text:#3b4552;--app-shadow:0 18px 40px #0f172a14;--app-top-menu-active:#409eff1f;color:#1f2329;background:var(--app-bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:PingFang SC,Microsoft YaHei,sans-serif;font-weight:400;line-height:1.5}html.dark{--app-bg:#0f1115;--app-surface:#181b21eb;--app-surface-solid:#181b21;--app-sidebar-bg:#11141a;--app-sidebar-text:#d7dce4;--app-shadow:0 18px 40px #00000047;--app-top-menu-active:#409eff2e}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:99999}html.dark::view-transition-old(root){z-index:99999}html.dark::view-transition-new(root){z-index:1}*{box-sizing:border-box}html,body,#app{min-height:100%;margin:0}body{background:radial-gradient(circle at top left, #409eff14, transparent 28%), var(--app-bg);min-width:1280px}a{color:inherit;text-decoration:none}#nprogress .bar{background:var(--el-color-primary)}.app-layout{height:100vh;overflow:hidden}.app-layout>.el-container{min-height:0}.app-layout__aside{border-right:1px solid var(--el-border-color-lighter);background:var(--app-sidebar-bg);box-shadow:none;transition:width .2s;overflow:hidden}.app-layout__aside .el-scrollbar{height:100vh}.app-layout__aside.is-mix-mode .el-scrollbar{height:calc(100vh - 64px)}.app-layout__aside .el-menu{border-right:0}.app-layout__aside .el-menu--collapse{width:72px}.app-layout__brand{border-bottom:1px solid var(--el-border-color-lighter);align-items:center;gap:12px;height:64px;padding:0 16px;display:flex}.app-layout__brand-image{object-fit:contain;transition:width .24s,transform .24s,opacity .18s;display:block}.app-layout__brand-image--expanded{width:158px;transform:translate(0)}.app-layout__brand-image--collapsed{width:40px}.brand-fade-enter-active,.brand-fade-leave-active{transition:opacity .18s,transform .24s}.brand-fade-enter-from,.brand-fade-leave-to{opacity:0;transform:translate(12px)}.app-layout__header{--app-header-action-color:var(--el-text-color-regular);--app-header-action-hover-color:var(--el-color-primary);--app-header-action-hover-bg:color-mix(in srgb, var(--el-color-primary) 8%, transparent);--app-header-collapse-color:var(--el-text-color-primary);--app-header-collapse-hover-color:var(--el-text-color-primary);border-bottom:1px solid var(--el-border-color-lighter);background:var(--app-surface);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);justify-content:space-between;align-items:center;height:64px;padding:0 20px;display:flex}.app-layout__header-brand{cursor:pointer;flex:none;align-items:center;height:64px;display:flex}.app-layout__header-brand-image{object-fit:contain;-webkit-user-select:none;user-select:none;width:auto;height:40px;display:block}.app-layout__header-left,.app-layout__header-right{align-items:center;gap:16px;display:flex}.app-layout__header-left{flex:auto;align-items:center;min-width:0;display:flex}.app-layout__header-left .el-breadcrumb{white-space:nowrap;align-items:center;min-width:0;display:flex}.app-layout__header-left .el-breadcrumb__item{align-items:center;min-width:0;display:inline-flex}.app-layout__header-left .el-breadcrumb__inner{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-layout__header-search{flex:0 420px;justify-content:center;align-items:center;min-width:0;display:flex}.app-layout__header-search--top{flex-basis:320px;justify-content:flex-start;margin-left:12px}.app-layout__header-search--side{margin-left:18px}.app-layout__header-right{flex:none;gap:10px}.app-layout__header-tool-btn,.app-layout__header-tool-icon{transition:transform .18s,color .18s}.app-layout__header-tool-btn{appearance:none;width:36px;height:36px;color:var(--app-header-action-color);cursor:pointer;background:0 0;border:0;border-radius:999px;outline:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.app-layout__header-tool-btn--collapse{color:var(--app-header-collapse-color)}.app-layout__header-tool-btn:hover{color:var(--el-color-primary);transform:translateY(-1px)}.app-layout__header-tool-btn--collapse:hover{color:var(--app-header-collapse-hover-color);transform:translateY(-1px)}.app-layout__header-tool-btn:focus,.app-layout__header-tool-btn:active{background:0 0}.app-layout__header-tool-icon{transform:translateY(.5px)}.app-menu-search-trigger{border:1px solid var(--el-border-color-lighter);background:var(--el-fill-color-lighter);min-width:0;height:36px;color:var(--el-text-color-secondary);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;transition:background .18s,border-color .18s,color .18s,width .18s;display:inline-flex}.app-menu-search-trigger:hover{border-color:color-mix(in srgb, var(--el-color-primary) 40%, var(--el-border-color));background:color-mix(in srgb, var(--el-color-primary) 8%, var(--el-fill-color-lighter));color:var(--el-color-primary)}.app-menu-search-trigger--side{gap:8px;width:min(80%,560px);min-width:0;padding:0 10px}.app-menu-search-trigger--top{gap:10px;width:min(100%,320px);min-width:120px;padding:0 12px}.app-menu-search-trigger--mix{gap:10px;width:220px;padding:0 12px}.app-menu-search-trigger__text{text-align:left;text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;overflow:hidden}.app-menu-search-trigger__shortcut{background:var(--app-surface-solid);min-width:48px;height:22px;color:var(--el-text-color-placeholder);border-radius:6px;justify-content:center;align-items:center;padding:0 7px;font-size:12px;font-weight:600;line-height:1;display:inline-flex}.app-menu-search{z-index:4000;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0f172a33;position:fixed;inset:0;overflow:auto}.app-menu-search__panel{border:1px solid var(--el-border-color-light);background:var(--app-surface-solid);width:min(666px,100vw - 40px);box-shadow:var(--app-shadow);border-radius:8px;margin:7vh auto 0;overflow:hidden}.app-menu-search__control{padding:12px 12px 0}.app-menu-search__scroll{min-height:108px}.app-menu-search__section{flex-direction:column;gap:6px;padding:12px 12px 0;display:flex}.app-menu-search__list{flex-direction:column;gap:6px;display:flex;position:relative}.app-menu-search__section-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.app-menu-search__section-title{height:22px;color:var(--el-color-primary);font-size:13px;font-weight:700;line-height:22px}.app-menu-search__clear{color:var(--el-text-color-secondary);cursor:pointer;background:0 0;border:0;font-size:12px}.app-menu-search__clear:hover{color:var(--el-color-primary)}.app-menu-search-item{align-items:center;display:flex}.app-menu-search-item__main{background:var(--el-fill-color-lighter);width:100%;min-height:64px;color:var(--el-text-color-secondary);cursor:pointer;text-align:left;border:0;border-radius:6px;align-items:center;padding:10px 12px;transition:background .18s,color .18s;display:flex;position:relative}.app-menu-search-item:hover .app-menu-search-item__main,.app-menu-search-item.is-active .app-menu-search-item__main{background:var(--el-color-primary);color:#fff}.app-menu-search-item__icon{background:var(--app-surface-solid);width:34px;height:34px;color:var(--el-color-primary);border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;margin-right:12px;display:inline-flex}.app-menu-search-item.is-active .app-menu-search-item__icon,.app-menu-search-item:hover .app-menu-search-item__icon{color:#fff;background:#ffffff2e}.app-menu-search-item__body{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.app-menu-search-item__body strong,.app-menu-search-item__body span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-menu-search-item__body strong{color:var(--el-text-color-primary);font-size:15px;font-weight:700}.app-menu-search-item:hover .app-menu-search-item__body strong,.app-menu-search-item.is-active .app-menu-search-item__body strong{color:#fff}.app-menu-search-item__body span{font-size:12px}.app-menu-search-item__actions{flex-shrink:0;align-items:center;gap:4px;margin-left:10px;display:inline-flex}.app-menu-search-item__enter{color:currentColor;justify-content:center;align-items:center;display:inline-flex}.app-menu-search-item__enter img{width:18px;height:18px}.app-menu-search-item__remove{color:#ffffffd1;cursor:pointer;background:0 0;border:0;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:background .18s,color .18s;display:inline-flex}.app-menu-search-item__remove:hover{color:#fff;background:#ffffff3d}.app-menu-search__empty{height:108px;color:var(--el-text-color-secondary);justify-content:center;align-items:center;font-size:14px;display:flex}.app-menu-search__footer{border-top:1px solid var(--el-border-color-lighter);background:var(--el-fill-color-lighter);min-height:44px;color:var(--el-text-color-secondary);align-items:center;gap:14px;margin-top:12px;padding:0 12px;font-size:13px;display:flex}.app-menu-search__footer span{align-items:center;gap:4px;display:inline-flex}.app-menu-search__footer kbd{border:1px solid var(--el-border-color);background:var(--el-bg-color);height:20px;color:var(--el-text-color-regular);border-radius:4px;align-items:center;padding:0 7px;font-family:inherit;font-size:12px;line-height:1;display:inline-flex}.app-menu-search-fade-enter-active,.app-menu-search-fade-leave-active{transition:opacity .18s}.app-menu-search-fade-enter-active .app-menu-search__panel,.app-menu-search-fade-leave-active .app-menu-search__panel{transition:transform .18s,opacity .18s}.app-menu-search-fade-enter-from,.app-menu-search-fade-leave-to{opacity:0}.app-menu-search-fade-enter-from .app-menu-search__panel{opacity:0;transform:translateY(-10px)}.app-menu-search-fade-leave-to .app-menu-search__panel{opacity:0;transform:translateY(-8px)}.app-menu-search-list-enter-active,.app-menu-search-list-leave-active{transition:transform .3s cubic-bezier(.55,0,.1,1),opacity .3s cubic-bezier(.55,0,.1,1)}.app-menu-search-list-enter-from{opacity:0;transform:translateY(-10px)}.app-menu-search-list-leave-to{opacity:0;transform:translate(30px)}.app-menu-search-list-leave-active{width:100%;position:absolute}.app-menu-search-list-move{transition:transform .3s cubic-bezier(.55,0,.1,1)}.app-menu-search-actions-enter-active,.app-menu-search-actions-leave-active{transition:transform .2s,opacity .2s}.app-menu-search-actions-enter-from,.app-menu-search-actions-leave-to{opacity:0;transform:translate(10px)}body.app-menu-search-open{overflow:hidden}.app-layout__header-brand{align-items:center;margin-right:8px;display:flex}.app-layout__header-brand-image{object-fit:contain;width:158px}.app-layout__header-menu{flex:0 auto;min-width:0;display:flex;overflow:visible;background:0 0!important;border-bottom:0!important}.app-layout__header-menu.el-menu--horizontal{min-width:0;overflow:visible;width:auto!important}.app-layout__header-menu .el-sub-menu__icon-more,.app-layout__header-menu .el-sub-menu__title .el-sub-menu__icon-more{display:none!important}.app-layout__header-menu .el-menu-item,.app-layout__header-menu .el-sub-menu__title{font-weight:600;height:64px!important;color:var(--el-text-color-regular)!important;border-bottom:0!important}.app-layout__header-menu .el-menu-item,.app-layout__header-menu .el-sub-menu{flex-shrink:0}.app-layout__header-menu .el-menu-item.is-active,.app-layout__header-menu .el-sub-menu.is-active>.el-sub-menu__title{color:var(--el-color-primary)!important;background:color-mix(in srgb, var(--el-color-primary) 12%, transparent)!important}.app-layout__header-menu--mix{flex:1;min-width:0}.app-layout__tabs{background:var(--app-surface);padding:0 20px}.app-layout__tabs-bar{align-items:center;gap:4px;height:40px;display:flex}.app-layout__tabs-scroll{overscroll-behavior-x:contain;scrollbar-width:none;flex:1;align-items:flex-end;gap:6px;height:40px;padding:0;display:flex;position:relative;overflow:auto hidden}.app-layout__tabs-scroll::-webkit-scrollbar{display:none}.app-layout__tabs-scroll.dragging .app-layout__tab>*{pointer-events:none}.app-layout__tab{border:1px solid var(--el-border-color-lighter);background:linear-gradient(to bottom, var(--el-fill-color-light), color-mix(in srgb, var(--el-fill-color-light) 20%, var(--el-fill-color)));min-width:0;max-width:180px;height:32px;color:var(--el-text-color-regular);cursor:pointer;-webkit-user-select:none;user-select:none;will-change:transform;border-bottom:none;border-radius:8px 8px 0 0;flex:none;align-items:center;gap:8px;margin:0 3px -1px;padding:0 12px;font-size:13px;line-height:1;transition:background .18s,border-color .18s,color .18s,box-shadow .18s,opacity .18s;display:inline-flex;position:relative}.app-layout__tab-icon{flex:none;font-size:16px}.app-layout__tab.is-active{color:var(--el-color-primary);border-color:var(--el-border-color);background:linear-gradient(to bottom, color-mix(in srgb, var(--el-color-primary) 2%, var(--el-fill-color-dark)), color-mix(in srgb, var(--el-color-primary) 5%, var(--el-fill-color-dark)));z-index:2;font-weight:500;box-shadow:0 -2px 8px #0000001a}.app-layout__tab.is-active:before,.app-layout__tab.is-active:after{pointer-events:none;content:"";z-index:1;width:10px;height:10px;position:absolute;bottom:-1px}.app-layout__tab.is-active:before{background:radial-gradient(circle at 0 0, transparent 11px, var(--el-border-color) 11px, var(--el-border-color) 10px, transparent 10px), radial-gradient(circle at 0 0, transparent 10px, color-mix(in srgb, var(--el-color-primary) 5%, var(--el-fill-color-dark)) 10px);left:-10px}.app-layout__tab.is-active:after{background:radial-gradient(circle at 100% 0, transparent 11px, var(--el-border-color) 11px, var(--el-border-color) 10px, transparent 10px), radial-gradient(circle at 100% 0, transparent 10px, color-mix(in srgb, var(--el-color-primary) 5%, var(--el-fill-color-dark)) 10px);right:-10px}.app-layout__tab:not(.is-active):hover{border-color:var(--el-border-color);background:linear-gradient(to bottom, color-mix(in srgb, var(--el-color-primary) 0%, var(--el-fill-color-dark)), color-mix(in srgb, var(--el-color-primary) 0%, var(--el-fill-color-dark)));color:var(--el-color-primary)}.app-layout__tabs-scroll.dragging .app-layout__tab:not(.is-active):hover{border-color:var(--el-border-color-lighter);background:linear-gradient(to bottom, var(--el-fill-color-light), color-mix(in srgb, var(--el-fill-color-light) 20%, var(--el-fill-color)));color:var(--el-text-color-regular)}.app-layout__tab-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-layout__tab-close,.app-layout__tabs-action,.app-tabs-menu__item{cursor:pointer;background:0 0;border:0}.app-layout__tab-close{width:16px;height:16px;color:var(--el-text-color-secondary);border-radius:4px;justify-content:center;align-items:center;margin-right:-4px;font-size:13px;line-height:1;display:inline-flex}.app-layout__tab.is-active .app-layout__tab-close,.app-layout__tab-close:hover{color:var(--el-color-primary)}.app-layout__tab-close:hover{background:color-mix(in srgb, var(--el-color-primary) 10%, transparent);color:var(--el-color-danger)}.app-layout__tabs-action{width:32px;height:40px;color:var(--el-text-color-regular);border-radius:6px;flex:none;justify-content:center;align-items:center;transition:background .18s,color .18s;display:inline-flex}.app-layout__tabs-action:hover{background:var(--el-fill-color);color:var(--el-color-primary)}.app-layout__tabs-action .el-icon.is-rotating{animation:.6s linear app-tabs-refresh-rotate}.sortable-ghost{opacity:.4}.sortable-chosen{cursor:move}.sortable-drag{opacity:1;box-shadow:0 4px 12px #00000026}.app-tabs-menu{z-index:3000;border:1px solid var(--el-border-color-light);background:var(--el-bg-color-overlay);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:8px;min-width:168px;padding:6px;animation:.18s cubic-bezier(.4,0,.2,1) app-tabs-menu-in;position:fixed;box-shadow:0 6px 24px #0000001f,0 2px 8px #00000014}.app-tabs-menu__item{width:100%;min-height:32px;color:var(--el-text-color-regular);text-align:left;border-radius:6px;align-items:center;gap:8px;padding:6px 10px;font-size:13px;transition:background-color .16s,color .16s,opacity .16s;display:flex}.app-tabs-menu__item .el-icon{flex:none;font-size:14px}.app-tabs-menu__item:not(:disabled):hover{background:var(--el-fill-color-lighter);color:var(--el-color-primary)}.app-tabs-menu__item:disabled{cursor:not-allowed;opacity:.5}.app-tabs-menu__divider{background:var(--el-border-color-lighter);height:1px;margin:4px 0}@keyframes app-tabs-menu-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(4px)}}@keyframes app-tabs-refresh-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.app-layout__user{cursor:pointer;align-items:center;gap:10px;display:flex}.app-layout__user-copy{flex-direction:column;line-height:1.3;display:flex}.app-layout__user-copy strong{font-size:14px;font-weight:600}.app-layout__user-copy span{color:var(--el-text-color-secondary);font-size:12px}.settings-drawer .el-drawer{background:var(--app-surface-solid)}.settings-drawer .el-drawer__header{border-bottom:1px solid var(--el-border-color-lighter);margin-bottom:16px;padding-bottom:16px}.settings-drawer .el-drawer__body{padding:0}.settings-tabs{height:100%}.settings-tabs .el-tabs__header{background:color-mix(in srgb, var(--el-color-primary) 5%, var(--el-fill-color));border-radius:12px;margin:0 16px 20px;padding:4px}.settings-tabs .el-tabs__nav-wrap:after{display:none}.settings-tabs .el-tabs__nav{border:0;gap:4px;width:100%;display:flex}.settings-tabs .el-tabs__item{z-index:2;border-radius:8px;flex:1;font-size:14px;position:relative;color:var(--el-text-color-secondary)!important;border:0!important}.settings-tabs .el-tabs__item.is-active{font-weight:600;color:var(--el-text-color-primary)!important}.settings-tabs .el-tabs__active-bar{z-index:1;border-radius:8px;box-shadow:0 2px 8px #0f172a14;background:color-mix(in srgb, var(--el-color-primary) 8%, var(--app-surface-solid))!important;height:calc(100% - 2px)!important}.settings-tabs .el-tabs__content{height:calc(100% - 64px);padding:0 16px 24px;overflow-y:auto}.settings-section{margin-bottom:28px}.settings-section__header{margin-bottom:16px}.settings-section__title{margin-bottom:4px;font-size:14px;font-weight:700;display:block}.settings-section__desc{color:var(--el-text-color-secondary);font-size:13px}.settings-mode-grid,.settings-layout-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}.settings-menu-search-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.settings-mode-card,.settings-layout-card,.settings-color-card{border:1px solid var(--el-border-color);background:color-mix(in srgb, var(--app-surface-solid) 90%, transparent);cursor:pointer;transition:border-color .2s,box-shadow .2s,transform .2s}.settings-mode-card:hover,.settings-layout-card:hover,.settings-color-card:hover{transform:translateY(-1px)}.settings-mode-card.is-active,.settings-layout-card.is-active,.settings-color-card.is-active{border-color:var(--el-color-primary);box-shadow:0 0 0 2px color-mix(in srgb, var(--el-color-primary) 16%, transparent);background:color-mix(in srgb, var(--el-color-primary) 5%, var(--app-surface-solid))}.settings-mode-card{min-height:96px;color:var(--el-text-color-regular);text-align:center;border-radius:16px;flex-direction:column;justify-content:center;align-items:center;gap:10px;padding:12px;display:flex}.settings-color-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.settings-color-card{color:var(--el-text-color-regular);text-align:center;border-radius:18px;flex-direction:column;gap:8px;padding:8px 8px 10px;display:flex;position:relative}.settings-color-card__swatch{aspect-ratio:1/.92;border-radius:16px;width:100%;min-height:54px;display:block;box-shadow:inset 0 1px #ffffff47}.settings-color-card__label{font-size:12px;font-weight:600;line-height:1.3}.settings-color-card--custom{overflow:hidden}.settings-color-card__swatch--custom{background:var(--el-fill-color-light);color:var(--el-text-color-secondary);justify-content:center;align-items:center;display:flex}.settings-color-card--custom:hover .settings-color-card__swatch--custom{color:var(--el-color-primary);background:var(--el-fill-color)}.settings-color-card__picker{opacity:0;z-index:2;inset:0;width:100%!important;height:100%!important;position:absolute!important}.settings-color-card__picker .el-color-picker__trigger{border:0;width:100%;height:100%;padding:0}.settings-layout-card{color:var(--el-text-color-regular);border-radius:16px;flex-direction:column;gap:10px;padding:10px;display:flex}.settings-layout-card__preview{aspect-ratio:1.45;object-fit:fill;background:#f7f9fc;border:1px solid #d9dfeb;border-radius:12px;width:100%;display:block;overflow:hidden}.settings-layout-card__label{color:var(--el-text-color-regular);text-align:center;font-size:13px;font-weight:600}.settings-layout-card.is-active .settings-layout-card__label{color:var(--el-color-primary)}.settings-inline-setting{background:var(--el-fill-color-lighter);border-radius:16px;justify-content:space-between;align-items:center;gap:16px;padding:16px;display:flex}.settings-inline-setting strong{margin-bottom:4px;display:block}.settings-inline-setting p{color:var(--el-text-color-secondary);margin:0;font-size:13px}.settings-placeholder{padding:24px 0}.settings-position-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;display:grid}.settings-position-card{border:1px solid var(--el-border-color);background:var(--el-bg-color);cursor:pointer;border-radius:18px;flex-direction:column;gap:10px;padding:10px;transition:border-color .2s,box-shadow .2s,transform .2s;display:flex}.settings-position-card:hover{border-color:color-mix(in srgb, var(--el-color-primary) 45%, var(--el-border-color));transform:translateY(-1px)}.settings-position-card.is-active{border-color:var(--el-color-primary);box-shadow:0 0 0 3px color-mix(in srgb, var(--el-color-primary) 18%, transparent)}.settings-position-card__preview{aspect-ratio:1.45;object-fit:fill;background:#f7f9fc;border:1px solid #d9dfeb;border-radius:12px;width:100%;display:block;overflow:hidden}.settings-position-card__label{color:var(--el-text-color-regular);text-align:center;font-size:13px;font-weight:600}.settings-position-card.is-active .settings-position-card__label{color:var(--el-color-primary)}html:not(.dark)[data-theme-position=sidebar] .app-layout__aside{background:linear-gradient(180deg, var(--el-color-primary) 0%, color-mix(in srgb, var(--el-color-primary) 84%, #000) 100%)}html:not(.dark)[data-theme-position=sidebar] .app-layout__brand{border-bottom-color:#ffffff24}html:not(.dark)[data-theme-position=sidebar] .app-layout__aside .el-menu,html:not(.dark)[data-theme-position=sidebar] .app-layout__aside .el-sub-menu .el-menu{background:0 0!important}html:not(.dark)[data-theme-position=sidebar] .app-layout__aside .el-menu-item,html:not(.dark)[data-theme-position=sidebar] .app-layout__aside .el-sub-menu__title,html:not(.dark)[data-theme-position=sidebar] .app-layout__aside .el-menu-item .el-icon,html:not(.dark)[data-theme-position=sidebar] .app-layout__aside .el-sub-menu__title .el-icon{color:#ffffffe0!important}html:not(.dark)[data-theme-position=sidebar] .app-layout__aside .el-menu-item:hover,html:not(.dark)[data-theme-position=sidebar] .app-layout__aside .el-sub-menu__title:hover{color:#fff!important;background:#ffffff24!important}html:not(.dark)[data-theme-position=sidebar] .app-layout__aside .el-menu-item.is-active{color:#fff!important;background:#fff3!important}html:not(.dark)[data-theme-position=header] .app-layout__header{--app-header-action-color:#ffffffeb;--app-header-action-hover-color:#fff;--app-header-action-hover-bg:#ffffff29;--app-header-collapse-color:#ffffffeb;--app-header-collapse-hover-color:#fff;background:linear-gradient(90deg, var(--el-color-primary) 0%, color-mix(in srgb, var(--el-color-primary) 84%, #000) 100%);border-bottom-color:#0000}.app-sidebar-search{padding:14px 12px 4px}.app-sidebar-search .el-input__wrapper{border:1px solid color-mix(in srgb, var(--el-border-color) 92%, white);background:color-mix(in srgb, var(--el-fill-color-lighter) 88%, white);border-radius:10px;min-height:42px;transition:border-color .18s,background-color .18s,box-shadow .18s;box-shadow:none!important}.app-sidebar-search .el-input__wrapper:hover,.app-sidebar-search .el-input__wrapper.is-focus{border-color:color-mix(in srgb, var(--el-color-primary) 40%, var(--el-border-color));background:color-mix(in srgb, var(--el-color-primary) 4%, white)}.app-sidebar-search .el-input__prefix-inner{justify-content:center;align-items:center;display:inline-flex}.app-sidebar-search .el-input__prefix-inner .el-icon{color:var(--el-text-color-placeholder)}.app-sidebar-search .el-input__inner{font-size:14px}.app-sidebar-search .el-input__inner::placeholder{color:color-mix(in srgb, var(--el-text-color-secondary) 86%, white)}.app-menu-search-highlight{background:color-mix(in srgb, var(--el-color-warning) 40%, transparent);color:inherit;padding:0;font-weight:700}html:not(.dark)[data-theme-position=header] .app-layout__header,html:not(.dark)[data-theme-position=header] .app-layout__header .el-breadcrumb__inner,html:not(.dark)[data-theme-position=header] .app-layout__header .el-breadcrumb__separator,html:not(.dark)[data-theme-position=header] .app-layout__header .app-menu-search-trigger,html:not(.dark)[data-theme-position=header] .app-layout__header .app-layout__user,html:not(.dark)[data-theme-position=header] .app-layout__header .app-layout__user-copy span{color:#ffffffeb!important}html:not(.dark)[data-theme-position=header] .app-menu-search-trigger{background:#ffffff1f;border-color:#fff3}html:not(.dark)[data-theme-position=header] .app-menu-search-trigger:hover{background:#ffffff2e;border-color:#ffffff57}html:not(.dark)[data-theme-position=header] .app-menu-search-trigger__shortcut{color:#fffc;background:#ffffff2e}html:not(.dark)[data-theme-position=header] .app-layout__header-menu .el-menu-item,html:not(.dark)[data-theme-position=header] .app-layout__header-menu .el-sub-menu__title{color:#ffffffe0!important}html:not(.dark)[data-theme-position=header] .app-layout__header-menu .el-menu-item:hover,html:not(.dark)[data-theme-position=header] .app-layout__header-menu .el-sub-menu__title:hover{color:#fff!important;background:#ffffff1a!important}html:not(.dark)[data-theme-position=header] .app-layout__header-menu .el-menu-item.is-active,html:not(.dark)[data-theme-position=header] .app-layout__header-menu .el-sub-menu.is-active>.el-sub-menu__title{color:#fff!important;background:#ffffff2e!important}.app-layout__header-brand-image.is-fallback-inverted{filter:brightness(0)invert()}.app-layout__main{--el-main-padding:0;min-height:0;padding:0;overflow:hidden}.page{flex-direction:column;gap:16px;padding:20px;display:flex}.page__header{justify-content:space-between;align-items:center;display:flex}.page__title{margin:0 0 6px;font-size:24px}.page__subtitle{color:var(--el-text-color-secondary);margin:0}.page-section{margin-bottom:16px}.page-section__footer{justify-content:flex-end;margin-top:16px;display:flex}.block-header{justify-content:space-between;align-items:center;gap:16px;display:flex}.block-header span{color:var(--el-text-color-secondary);font-size:13px}.stat-grid{margin-bottom:8px}.stat-card{border:0}.stat-card__label{color:var(--el-text-color-secondary);margin-bottom:8px;font-size:13px;display:block}.stat-card__value{font-size:28px;font-weight:700}.shortcut-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.shortcut-item{border:1px dashed var(--el-border-color);background:var(--el-fill-color-lighter);border-radius:12px;place-items:center;min-height:96px;font-weight:500;display:grid}.micro-app-page{background:var(--app-bg);flex-direction:column;width:100%;height:100%;min-height:0;margin:0;padding:0;display:flex}.micro-app-page__container{flex:auto;width:100%;min-height:0;margin:0;padding:0;overflow:hidden}.micro-app-page__container>div,.micro-app-page__container #sub-app{width:100%;height:100%;min-height:0;margin:0;padding:0}.micro-app-page__container .mp-main-container-default{margin:0}.result-page{background:radial-gradient(circle at 18% 24%,#409eff14,#0000 28%),radial-gradient(circle at 85% 82%,#0f4c810f,#0000 26%);place-items:center;min-height:calc(100vh - 168px);padding:20px 0;display:grid}.result-page__panel{background:linear-gradient(#fffffffa,#f6fafff5);border:1px solid #0f4c8112;border-radius:28px;width:min(960px,100%);padding:32px;overflow:hidden;box-shadow:0 24px 60px #1f232914,inset 0 1px #ffffffb3}.result-page__hero{grid-template-columns:280px minmax(0,1fr);align-items:center;gap:36px;padding:12px 8px 28px;display:grid;position:relative}.result-page__hero:after{content:"";background:linear-gradient(90deg,#0000,#0f4c8114,#0000);height:1px;position:absolute;bottom:0;left:-32px;right:-32px}.result-page__visual{place-items:center;min-height:300px;display:grid;position:relative}.result-page__grid{opacity:.8;background-image:linear-gradient(#0f4c810d 1px,#0000 1px),linear-gradient(90deg,#0f4c810d 1px,#0000 1px);background-size:22px 22px;border-radius:32px;position:absolute;inset:28px 14px;-webkit-mask-image:radial-gradient(circle,#000 38%,#0000 78%);mask-image:radial-gradient(circle,#000 38%,#0000 78%)}.result-page__halo{filter:blur(8px);opacity:.95;border-radius:999px;width:220px;height:220px;animation:4.6s ease-in-out infinite result-halo-pulse;position:absolute;inset:50%;transform:translate(-50%,-50%)}.result-page__halo--blue{background:radial-gradient(circle,#409eff47 0%,#409eff14 42%,#0000 72%)}.result-page__halo--gold{background:radial-gradient(circle,#e6a23c4d 0%,#e6a23c14 42%,#0000 72%)}.result-page__orb{z-index:1;color:#fff;border-radius:38px;place-items:center;width:156px;height:156px;animation:3.8s ease-in-out infinite result-float;display:grid;position:relative;box-shadow:0 20px 40px #1f232924,inset 0 1px #ffffff47}.result-page__orb span{letter-spacing:.02em;font-size:46px;font-weight:700;line-height:1}.result-page__orb--blue{background:linear-gradient(145deg,#73b8ff,#2c7be5 58%,#0f62d6)}.result-page__orb--gold{background:linear-gradient(145deg,#f5cb7a,#e4a12d 58%,#ca7f0f)}.result-page__badge{z-index:2;color:#0f4c81;letter-spacing:.04em;background:#ffffffeb;border:1px solid #0f4c8114;border-radius:999px;padding:8px 16px;font-size:12px;font-weight:600;position:absolute;bottom:30px;box-shadow:0 10px 18px #1f23290f}.result-page__badge--warning{color:#a96a0b}.result-page__body h1{color:#1d2a38;max-width:640px;margin:10px 0 14px;font-size:42px;line-height:1.14}.result-page__eyebrow{color:#0f4c81;letter-spacing:.22em;font-size:12px;font-weight:700;display:inline-block}.result-page__desc{color:#5f6b7a;max-width:560px;margin:0;font-size:18px;line-height:1.8}.result-page__meta{flex-wrap:wrap;gap:10px;margin-top:18px;display:flex}.result-page__meta span{color:#496176;background:#ffffffb8;border:1px solid #0f4c8114;border-radius:999px;align-items:center;height:34px;padding:0 14px;font-size:13px;display:inline-flex}.result-page__actions{flex-wrap:wrap;justify-content:flex-start;gap:12px;margin-top:30px;display:flex}.result-page__tips{color:var(--el-text-color-regular);background:linear-gradient(#f1f7ffeb,#f8fbfff2);border:1px solid #409eff14;border-radius:20px;padding:20px 22px}.result-page__tips-label{color:#0f4c81;letter-spacing:.08em;margin-bottom:8px;font-size:12px;font-weight:700;display:inline-block}.result-page__tips p{color:var(--el-text-color-secondary);margin:0;line-height:1.7}@keyframes result-float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes result-halo-pulse{0%,to{opacity:.9;transform:translate(-50%,-50%)scale(1)}50%{opacity:1;transform:translate(-50%,-50%)scale(1.08)}}@media (width<=1100px){.result-page__hero{text-align:center;grid-template-columns:1fr;gap:12px}.result-page__visual{min-height:220px}.result-page__body h1{max-width:100%;font-size:34px}.result-page__desc{max-width:100%;font-size:16px}.result-page__meta,.result-page__actions{justify-content:center}}
2
+
3
+ /* Login.css */
4
+ .login-page[data-v-8e99a976]{background:#eef6ff;justify-content:center;align-items:stretch;min-height:100vh;padding:0;display:flex}.login-page__panel[data-v-8e99a976]{grid-template-columns:minmax(0,1fr) 480px;width:min(1500px,100%);min-height:100vh;display:grid}.login-page__hero[data-v-8e99a976]{color:#123c66;min-height:100vh;position:relative;overflow:hidden}.login-page__brand[data-v-8e99a976]{z-index:1;align-items:center;gap:12px;margin-bottom:0;display:flex;position:relative;top:34px;left:clamp(28px,4vw,56px)}.login-page__brand-logo[data-v-8e99a976]{object-fit:contain;flex:none;width:36px;height:36px}.login-page__brand span[data-v-8e99a976]{color:#3d536b;font-size:20px;font-weight:700}.login-page__visual[data-v-8e99a976]{object-fit:cover;object-position:center;width:100%;height:100%;display:block;position:absolute;inset:0}.login-page__account[data-v-8e99a976]{background:#f7fbff;flex-direction:column;justify-content:center;align-items:center;min-height:100vh;padding:56px 54px;display:flex}.login-page__card[data-v-8e99a976]{border:none;border-radius:8px;width:min(440px,100%);position:relative;overflow:hidden;box-shadow:0 22px 52px #2e55821f}.login-page__card[data-v-8e99a976] .el-card__body{padding:28px 34px 34px}.login-page__card[data-v-8e99a976] .el-card__header{z-index:2;border-bottom:0;padding:30px 34px 8px;position:relative}.login-page__card-header[data-v-8e99a976]{flex-direction:column;gap:8px;display:flex}.login-page__card-header strong[data-v-8e99a976]{color:var(--el-text-color-primary);font-size:20px}.login-page__card-header span[data-v-8e99a976]{color:var(--el-text-color-secondary);font-size:13px}.login-page__qr-corner[data-v-8e99a976]{z-index:4;cursor:pointer;background:0 0;border:0;width:72px;height:72px;padding:0;position:absolute;top:0;right:0}.login-page__qr-corner[data-v-8e99a976]:before{background:linear-gradient(135deg, transparent 0 49%, #0000001a 50%, transparent 52%), linear-gradient(135deg, transparent 0 50%, var(--el-color-primary) 51%);clip-path:polygon(100% 0,100% 100%,0 0);content:"";transform-origin:100% 0;transition:transform .28s,box-shadow .28s;position:absolute;inset:0;box-shadow:-8px 8px 16px #1224381f}.login-page__qr-corner[data-v-8e99a976]:hover:before,.login-page__qr-corner.is-open[data-v-8e99a976]:before{transform:rotate(-5deg)translate(-2px,2px);box-shadow:-12px 12px 22px #12243833}.login-page__qr-mini[data-v-8e99a976]{z-index:1;opacity:.96;background:linear-gradient(#fff 0 0) 0 0/7px 7px no-repeat,linear-gradient(#fff 0 0) 19px 0/7px 7px no-repeat,linear-gradient(#fff 0 0) 0 19px/7px 7px no-repeat,repeating-linear-gradient(90deg,#fff 0 3px,#0000 3px 6px),repeating-linear-gradient(0deg,#fffc 0 3px,#0000 3px 6px);width:24px;height:24px;position:absolute;top:9px;right:9px}.login-page__card-body[data-v-8e99a976]{perspective:1200px;min-height:278px;display:grid;position:relative}.login-page__form-sheet[data-v-8e99a976],.login-page__qr-sheet[data-v-8e99a976]{backface-visibility:hidden;transform-style:preserve-3d;grid-area:1/1;transition:opacity .28s,transform .42s cubic-bezier(.22,1,.36,1)}.login-page__form-sheet[data-v-8e99a976]{transform-origin:100% 0}.login-page__card-body.is-qr .login-page__form-sheet[data-v-8e99a976]{opacity:0;pointer-events:none;transform:rotateY(-22deg)translate(-18px)}.login-page__qr-sheet[data-v-8e99a976]{border:1px solid var(--el-border-color-lighter);background:linear-gradient(135deg, #409eff14, #67c23a14), var(--el-bg-color);opacity:0;pointer-events:none;transform-origin:100% 0;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;min-height:278px;display:flex;transform:rotateY(24deg)translate(28px)}.login-page__card-body.is-qr .login-page__qr-sheet[data-v-8e99a976]{opacity:1;pointer-events:auto;transform:rotateY(0)translate(0)}.login-page__qr-sheet strong[data-v-8e99a976]{color:var(--el-text-color-primary);margin-top:16px;font-size:16px}.login-page__qr-sheet p[data-v-8e99a976]{color:var(--el-text-color-secondary);margin:6px 0 12px;font-size:13px}.login-page__qr-box[data-v-8e99a976]{border:1px solid var(--el-border-color);min-width:132px;min-height:132px;box-shadow:var(--el-box-shadow-light);color:var(--el-text-color-secondary);background:#fff;border-radius:10px;place-items:center;padding:14px;font-size:14px;display:grid}.login-page__mode[data-v-8e99a976]{width:100%;margin-bottom:22px}.login-page__mode[data-v-8e99a976] .el-segmented__item{height:40px}.login-page__code-row[data-v-8e99a976]{grid-template-columns:minmax(0,1fr) 118px;gap:10px;width:100%;display:grid}.login-page__submit[data-v-8e99a976]{width:100%;height:42px;margin-top:12px;font-weight:700}@media (width<=1280px){.login-page__panel[data-v-8e99a976]{grid-template-columns:minmax(0,1fr) 430px}}@media (width<=960px){.login-page__panel[data-v-8e99a976]{grid-template-columns:1fr}.login-page__hero[data-v-8e99a976]{min-height:360px}.login-page__brand[data-v-8e99a976]{top:28px;left:32px}.login-page__account[data-v-8e99a976]{min-height:auto;padding:28px 24px 44px}}@media (width<=640px){.login-page[data-v-8e99a976]{display:block}.login-page__hero[data-v-8e99a976]{min-height:260px}.login-page__brand[data-v-8e99a976]{gap:10px;top:20px;left:18px}.login-page__brand-logo[data-v-8e99a976]{width:32px;height:32px}.login-page__account[data-v-8e99a976]{padding:18px 14px 32px}.login-page__card[data-v-8e99a976] .el-card__header{padding:26px 24px 6px}.login-page__card[data-v-8e99a976] .el-card__body{padding:24px}.login-page__code-row[data-v-8e99a976]{grid-template-columns:1fr}}
5
+
6
+ /* MicroAppView.css */
7
+ .micro-app-page[data-v-90c11f85]{background-color:var(--el-bg-color-page);min-height:100%;position:relative}.micro-app-page__container[data-v-90c11f85]{min-height:100%}.micro-app-page__state[data-v-90c11f85]{z-index:2;box-sizing:border-box;border:1px solid var(--el-border-color-lighter);background-color:var(--el-bg-color);width:min(560px,100% - 48px);box-shadow:var(--el-box-shadow-light);border-radius:8px;gap:16px;padding:22px 24px;display:flex;position:absolute;top:96px;left:50%;transform:translate(-50%)}.micro-app-page__state--error[data-v-90c11f85]{align-items:flex-start}.micro-app-page__icon[data-v-90c11f85]{color:var(--el-color-warning);margin-top:2px;font-size:24px}.micro-app-page__body[data-v-90c11f85]{flex:1;min-width:0}.micro-app-page__title[data-v-90c11f85]{color:var(--el-text-color-primary);margin:0;font-size:16px;font-weight:600;line-height:24px}.micro-app-page__desc[data-v-90c11f85]{color:var(--el-text-color-secondary);margin:6px 0 0;font-size:14px;line-height:22px}.micro-app-page__meta[data-v-90c11f85]{background-color:var(--el-fill-color-lighter);border-radius:6px;gap:8px;margin:16px 0 0;padding:12px 14px;display:grid}.micro-app-page__meta div[data-v-90c11f85]{grid-template-columns:56px minmax(0,1fr);gap:8px;font-size:13px;line-height:20px;display:grid}.micro-app-page__meta dt[data-v-90c11f85]{color:var(--el-text-color-secondary)}.micro-app-page__meta dd[data-v-90c11f85]{overflow-wrap:anywhere;min-width:0;color:var(--el-text-color-primary);margin:0}.micro-app-page__actions[data-v-90c11f85]{gap:10px;margin-top:18px;display:flex}
8
+
9
+ /* SystemConfig.css */
10
+ .config-center[data-v-5d22ada6]{height:100%;min-height:0}.config-center__content[data-v-5d22ada6]{background:var(--el-bg-color);border-radius:12px;align-content:start;gap:20px;min-height:100%;padding:20px 20px 32px;display:grid}.config-center__header[data-v-5d22ada6]{justify-content:flex-end;display:flex}.config-center__actions[data-v-5d22ada6]{gap:12px;display:inline-flex}.config-center__form[data-v-5d22ada6]{gap:18px;padding-top:6px;display:grid}.config-center__item[data-v-5d22ada6]{margin-bottom:0}.config-center__item--assets[data-v-5d22ada6] .el-form-item__content{display:block}.config-center__item[data-v-5d22ada6] .el-form-item__label{color:var(--el-text-color-primary);font-weight:600}.config-center__field[data-v-5d22ada6]{width:min(460px,100%)}.config-center__asset-row[data-v-5d22ada6]{flex-wrap:wrap;align-items:flex-end;gap:24px;width:100%;display:flex}.config-center__asset-list[data-v-5d22ada6]{border-top:1px solid var(--el-border-color-lighter);padding-top:18px}.config-center__asset-card[data-v-5d22ada6]{justify-items:center;gap:12px;display:grid}.config-center__asset-card span[data-v-5d22ada6]{color:var(--el-text-color-primary);font-weight:600}.config-center__asset-preview[data-v-5d22ada6]{border:1px solid var(--el-border-color-lighter);background:#fff;border-radius:10px;flex:none;justify-content:center;align-items:center;display:flex;overflow:hidden}.config-center__asset-preview--wide[data-v-5d22ada6]{width:180px;height:92px;padding:8px 10px}.config-center__asset-preview--login[data-v-5d22ada6]{width:240px;height:150px;padding:8px}.config-center__asset-preview--square[data-v-5d22ada6],.config-center__asset-preview--icon[data-v-5d22ada6]{width:92px;height:92px;padding:8px}.config-center__asset-image[data-v-5d22ada6]{object-fit:contain;max-width:100%;max-height:100%;display:block}.config-center__asset-image--icon[data-v-5d22ada6]{width:100%;height:100%}.config-center__file[data-v-5d22ada6]{display:none}
11
+
12
+ /* application-config.css */
13
+ .app-config-page[data-v-0066cec3]{box-sizing:border-box;grid-template-rows:minmax(0,1fr);gap:12px;height:100%;min-height:0;padding:16px;display:grid;overflow:hidden}.app-config-page__apps[data-v-0066cec3],.app-config-page__empty[data-v-0066cec3]{border:1px solid var(--el-border-color-lighter);background:var(--el-bg-color);border-radius:8px}.app-config-section__header h2[data-v-0066cec3]{color:var(--el-text-color-primary);margin:0;font-weight:600}.app-config-page__apps[data-v-0066cec3]{grid-template-rows:auto minmax(0,1fr);min-height:0;display:grid;overflow:hidden}.app-config-section__header[data-v-0066cec3]{border-bottom:1px solid var(--el-border-color-lighter);justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.app-config-section__title[data-v-0066cec3]{align-items:center;gap:8px;min-width:0;display:inline-flex}.app-config-section__header h2[data-v-0066cec3]{font-size:16px}.app-config-page__scroll[data-v-0066cec3]{min-height:0}.app-config-page__grid[data-v-0066cec3]{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px;padding:12px;display:grid}.app-config-card[data-v-0066cec3]{border:1px solid var(--el-border-color-lighter);background:var(--el-bg-color);cursor:pointer;border-radius:8px;gap:8px;min-height:124px;padding:12px;display:grid}.app-config-card.is-active[data-v-0066cec3]{border-color:var(--el-color-primary);box-shadow:0 8px 20px #409eff1f}.app-config-card__title-row[data-v-0066cec3]{align-items:center;gap:8px;display:flex}.app-config-card__title-row h2[data-v-0066cec3]{color:var(--el-text-color-primary);margin:0;font-size:15px;font-weight:600}.app-config-card__desc[data-v-0066cec3]{color:var(--el-text-color-secondary);margin:6px 0 0;font-size:13px}.app-config-card__path[data-v-0066cec3]{color:var(--el-text-color-secondary);margin-top:8px;font-size:13px}.app-config-card__entry[data-v-0066cec3]{color:var(--el-text-color-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.app-config-card__footer[data-v-0066cec3]{justify-content:space-between;align-items:center;gap:12px;display:flex}.app-config-card__mount[data-v-0066cec3]{color:var(--el-text-color-secondary);font-size:13px}.app-config-card__footer-actions[data-v-0066cec3]{gap:10px;display:inline-flex}.app-config-page__empty[data-v-0066cec3]{place-items:center;min-height:240px;padding:24px;display:grid}.app-config-empty__actions[data-v-0066cec3]{margin-top:12px}.app-config-dialog__footer[data-v-0066cec3]{justify-content:flex-end;gap:12px;display:flex}.app-config-remove__text[data-v-0066cec3]{color:var(--el-text-color-primary);margin:0}@media (width<=1400px){.app-config-page__grid[data-v-0066cec3]{grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}}@media (width<=1100px){.app-config-page[data-v-0066cec3]{height:auto;overflow:visible}.app-config-page__grid[data-v-0066cec3]{grid-template-columns:1fr}}
@@ -0,0 +1 @@
1
+ .theme-icon-btn[data-v-73aaf569] .el-icon{justify-content:center;align-items:center;display:inline-flex}
@@ -0,0 +1 @@
1
+ *{box-sizing:border-box}html,body{height:100%;min-height:0;color:var(--el-text-color-primary);background:var(--el-bg-color-page);margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}#sub-app{height:100%;min-height:0}
@@ -0,0 +1,32 @@
1
+ import { MicroAuthExpiredPayload } from '../micro-contract';
2
+ export interface AuthUser {
3
+ id?: string | number;
4
+ name: string;
5
+ avatar?: string;
6
+ role?: string;
7
+ roleLabel?: string;
8
+ }
9
+ export interface AuthRole {
10
+ id?: string | number;
11
+ code: string;
12
+ name: string;
13
+ }
14
+ export interface AuthProfile {
15
+ user: AuthUser;
16
+ roles: AuthRole[];
17
+ permissions: string[];
18
+ }
19
+ export declare function getAccessToken(): string;
20
+ export declare function setAccessToken(token: string): void;
21
+ export declare function clearAccessToken(): void;
22
+ export declare function hasAccessToken(): boolean;
23
+ export declare function getAuthProfile(): AuthProfile | null;
24
+ export declare function setAuthProfile(profile: AuthProfile | null): void;
25
+ export declare function clearAuthProfile(): void;
26
+ export declare function clearAuth(): void;
27
+ export declare function hasPermission(permission: string, profile?: AuthProfile | null): boolean;
28
+ export declare function hasAnyPermission(permissions: string[], profile?: AuthProfile | null): boolean;
29
+ export declare function hasRole(roleCode: string, profile?: AuthProfile | null): boolean;
30
+ export declare function emitAuthExpired(payload: MicroAuthExpiredPayload): void;
31
+ export declare function onAuthExpired(handler: (payload: MicroAuthExpiredPayload) => void): () => void;
32
+ export type { MicroAuthExpiredPayload };
package/dist/auth.js ADDED
@@ -0,0 +1,49 @@
1
+ import { MICRO_AUTH_EXPIRED_EVENT as e } from "./micro-contract.js";
2
+ //#region src/auth/index.ts
3
+ var t = "morningfast:access_token", n = null;
4
+ function r() {
5
+ return localStorage.getItem(t) || "";
6
+ }
7
+ function i(e) {
8
+ localStorage.setItem(t, e);
9
+ }
10
+ function a() {
11
+ localStorage.removeItem(t);
12
+ }
13
+ function o() {
14
+ return !!r();
15
+ }
16
+ function s() {
17
+ return n;
18
+ }
19
+ function c(e) {
20
+ n = e;
21
+ }
22
+ function l() {
23
+ n = null;
24
+ }
25
+ function u() {
26
+ a(), l();
27
+ }
28
+ function d(e, t = n) {
29
+ return e ? !!t?.permissions.includes(e) : !0;
30
+ }
31
+ function f(e, t = n) {
32
+ return e.length ? e.some((e) => d(e, t)) : !0;
33
+ }
34
+ function p(e, t = n) {
35
+ return e ? !!t?.roles.some((t) => t.code === e) : !0;
36
+ }
37
+ function m(t) {
38
+ window.dispatchEvent(new CustomEvent(e, { detail: t }));
39
+ }
40
+ function h(t) {
41
+ let n = (e) => {
42
+ t(e.detail);
43
+ };
44
+ return window.addEventListener(e, n), () => {
45
+ window.removeEventListener(e, n);
46
+ };
47
+ }
48
+ //#endregion
49
+ export { a as clearAccessToken, u as clearAuth, l as clearAuthProfile, m as emitAuthExpired, r as getAccessToken, s as getAuthProfile, o as hasAccessToken, f as hasAnyPermission, d as hasPermission, p as hasRole, h as onAuthExpired, i as setAccessToken, c as setAuthProfile };
@@ -0,0 +1,30 @@
1
+ import { useRouter as e } from "vue-router";
2
+ import { createElementBlock as t, createElementVNode as n, createStaticVNode as r, createTextVNode as i, createVNode as a, defineComponent as o, openBlock as s, resolveComponent as c, unref as l, withCtx as u } from "vue";
3
+ //#region src/main/pages/error/Forbidden.vue?vue&type=script&setup=true&lang.ts
4
+ var d = { class: "result-page" }, f = { class: "result-page__panel" }, p = { class: "result-page__hero result-page__hero--warning" }, m = { class: "result-page__body" }, h = { class: "result-page__actions" }, g = /* @__PURE__ */ o({
5
+ __name: "Forbidden",
6
+ setup(o) {
7
+ let g = e();
8
+ return (e, o) => {
9
+ let _ = c("el-button");
10
+ return s(), t("div", d, [n("div", f, [n("div", p, [o[8] ||= r("<div class=\"result-page__visual\"><div class=\"result-page__grid\"></div><div class=\"result-page__halo result-page__halo--gold\"></div><div class=\"result-page__orb result-page__orb--gold\"><span>403</span></div><div class=\"result-page__badge result-page__badge--warning\">权限受限</div></div>", 1), n("div", m, [
11
+ o[4] ||= n("span", { class: "result-page__eyebrow" }, "ACCESS CONTROL", -1),
12
+ o[5] ||= n("h1", null, "当前页面暂未向这个账号开放", -1),
13
+ o[6] ||= n("p", { class: "result-page__desc" }, " 登录状态正常,但当前角色还没有对应菜单或操作权限。你可以先返回工作台,或联系管理员核对账号所属组织与角色配置。 ", -1),
14
+ o[7] ||= n("div", { class: "result-page__meta" }, [n("span", null, "状态码 403"), n("span", null, "需要菜单或角色授权")], -1),
15
+ n("div", h, [a(_, { onClick: o[0] ||= (e) => l(g).back() }, {
16
+ default: u(() => [...o[2] ||= [i("返回上一页", -1)]]),
17
+ _: 1
18
+ }), a(_, {
19
+ type: "primary",
20
+ onClick: o[1] ||= (e) => l(g).push("/dashboard")
21
+ }, {
22
+ default: u(() => [...o[3] ||= [i("返回工作台", -1)]]),
23
+ _: 1
24
+ })])
25
+ ])]), o[9] ||= n("div", { class: "result-page__tips" }, [n("span", { class: "result-page__tips-label" }, "排查建议"), n("p", null, "确认当前账号是否属于正确组织、角色是否已分配、菜单权限与按钮权限是否已经同步开通。")], -1)])]);
26
+ };
27
+ }
28
+ });
29
+ //#endregion
30
+ export { g as default };
@@ -0,0 +1,209 @@
1
+ import { t as e } from "./auth-C3RvRgcW.js";
2
+ import { t } from "./system-BbMsTIBR.js";
3
+ import { t as n } from "./_plugin-vue_export-helper-DvRHjpsZ.js";
4
+ import { useRoute as r, useRouter as i } from "vue-router";
5
+ import { ElMessage as a } from "element-plus";
6
+ import { computed as o, createBlock as s, createElementBlock as c, createElementVNode as l, createTextVNode as u, createVNode as d, defineComponent as f, normalizeClass as p, onBeforeUnmount as m, openBlock as h, reactive as g, ref as _, resolveComponent as v, toDisplayString as y, unref as b, withCtx as x, withKeys as S, withModifiers as C } from "vue";
7
+ import { Iphone as w, Lock as T, Message as E, User as ee } from "@element-plus/icons-vue";
8
+ //#region src/main/pages/auth/Login.vue?vue&type=script&setup=true&lang.ts
9
+ var D = { class: "login-page" }, O = { class: "login-page__panel" }, k = { class: "login-page__hero" }, A = ["src", "alt"], j = { class: "login-page__brand" }, M = ["src", "alt"], N = { class: "login-page__account" }, P = ["aria-label"], F = { class: "login-page__card-header" }, I = { class: "login-page__form-sheet" }, L = { class: "login-page__code-row" }, R = { class: "login-page__qr-sheet" }, z = /* @__PURE__ */ n(/* @__PURE__ */ f({
10
+ __name: "Login",
11
+ setup(n) {
12
+ let f = r(), z = i(), B = e(), V = t(), H = _("password"), U = _(!1), W = _(!1), G = _(!1), K = _(0), q, J = g({
13
+ phone: "13800000000",
14
+ password: "123456"
15
+ }), Y = g({
16
+ phone: "13800000000",
17
+ code: "246810"
18
+ }), X = o(() => K.value > 0 ? `${K.value}s 后重试` : "获取验证码");
19
+ function Z(e) {
20
+ return /^1[3-9]\d{9}$/.test(e.trim()) ? !0 : (a.warning("请输入正确的手机号"), !1);
21
+ }
22
+ async function Q() {
23
+ G.value || K.value > 0 || Z(Y.phone) && (G.value = !0, await new Promise((e) => setTimeout(e, 600)), G.value = !1, K.value = 60, a.success("验证码已发送,演示验证码 246810"), q = window.setInterval(() => {
24
+ --K.value, K.value <= 0 && (window.clearInterval(q), q = void 0);
25
+ }, 1e3));
26
+ }
27
+ async function $() {
28
+ let e = H.value === "password" ? J.phone : Y.phone;
29
+ if (!Z(e)) return;
30
+ if (H.value === "password" && !J.password) {
31
+ a.warning("请输入密码");
32
+ return;
33
+ }
34
+ if (H.value === "sms" && Y.code.trim() !== "246810") {
35
+ a.warning("请输入正确的验证码");
36
+ return;
37
+ }
38
+ W.value = !0;
39
+ try {
40
+ await B.login({
41
+ username: e.trim(),
42
+ password: H.value === "password" ? J.password : Y.code
43
+ });
44
+ } finally {
45
+ W.value = !1;
46
+ }
47
+ a.success("登录成功,已进入平台骨架页");
48
+ let t = typeof f.query.redirect == "string" ? f.query.redirect : "/";
49
+ z.replace(t);
50
+ }
51
+ return m(() => {
52
+ q && window.clearInterval(q);
53
+ }), (e, t) => {
54
+ let n = v("el-segmented"), r = v("el-icon"), i = v("el-input"), a = v("el-form-item"), o = v("el-button"), f = v("el-form"), m = v("el-card");
55
+ return h(), c("div", D, [l("div", O, [l("div", k, [l("img", {
56
+ src: b(V).loginBackground,
57
+ alt: b(V).systemName,
58
+ class: "login-page__visual"
59
+ }, null, 8, A), l("div", j, [l("img", {
60
+ src: b(V).logoCollapsed,
61
+ alt: b(V).systemName,
62
+ class: "login-page__brand-logo"
63
+ }, null, 8, M), l("span", null, y(b(V).systemName), 1)])]), l("section", N, [d(m, {
64
+ shadow: "never",
65
+ class: "login-page__card"
66
+ }, {
67
+ header: x(() => [l("div", F, [l("strong", null, y(U.value ? "扫码登录" : "账号登录"), 1), l("span", null, y(U.value ? "使用企业移动端扫码确认" : "请选择登录方式完成身份验证"), 1)])]),
68
+ default: x(() => [l("button", {
69
+ class: p(["login-page__qr-corner", { "is-open": U.value }]),
70
+ type: "button",
71
+ "aria-label": U.value ? "切换到手机号登录" : "切换到扫码登录",
72
+ onClick: t[0] ||= (e) => U.value = !U.value
73
+ }, [...t[8] ||= [l("span", { class: "login-page__qr-mini" }, null, -1)]], 10, P), l("div", {
74
+ class: p(["login-page__card-body", { "is-qr": U.value }]),
75
+ onKeydown: t[7] ||= S((e) => U.value = !1, ["esc"])
76
+ }, [l("div", I, [d(n, {
77
+ modelValue: H.value,
78
+ "onUpdate:modelValue": t[1] ||= (e) => H.value = e,
79
+ class: "login-page__mode",
80
+ options: [{
81
+ label: "手机号登录",
82
+ value: "password"
83
+ }, {
84
+ label: "验证码登录",
85
+ value: "sms"
86
+ }]
87
+ }, null, 8, ["modelValue"]), H.value === "password" ? (h(), s(f, {
88
+ key: 0,
89
+ "label-position": "top",
90
+ onSubmit: C($, ["prevent"])
91
+ }, {
92
+ default: x(() => [
93
+ d(a, { label: "手机号" }, {
94
+ default: x(() => [d(i, {
95
+ modelValue: J.phone,
96
+ "onUpdate:modelValue": t[2] ||= (e) => J.phone = e,
97
+ maxlength: "11",
98
+ placeholder: "请输入手机号"
99
+ }, {
100
+ prefix: x(() => [d(r, null, {
101
+ default: x(() => [d(b(w))]),
102
+ _: 1
103
+ })]),
104
+ _: 1
105
+ }, 8, ["modelValue"])]),
106
+ _: 1
107
+ }),
108
+ d(a, { label: "密码" }, {
109
+ default: x(() => [d(i, {
110
+ modelValue: J.password,
111
+ "onUpdate:modelValue": t[3] ||= (e) => J.password = e,
112
+ "show-password": "",
113
+ placeholder: "请输入密码"
114
+ }, {
115
+ prefix: x(() => [d(r, null, {
116
+ default: x(() => [d(b(T))]),
117
+ _: 1
118
+ })]),
119
+ _: 1
120
+ }, 8, ["modelValue"])]),
121
+ _: 1
122
+ }),
123
+ d(o, {
124
+ type: "primary",
125
+ class: "login-page__submit",
126
+ loading: W.value,
127
+ onClick: $
128
+ }, {
129
+ default: x(() => [...t[9] ||= [u(" 登录系统 ", -1)]]),
130
+ _: 1
131
+ }, 8, ["loading"])
132
+ ]),
133
+ _: 1
134
+ })) : (h(), s(f, {
135
+ key: 1,
136
+ "label-position": "top",
137
+ onSubmit: C($, ["prevent"])
138
+ }, {
139
+ default: x(() => [
140
+ d(a, { label: "手机号" }, {
141
+ default: x(() => [d(i, {
142
+ modelValue: Y.phone,
143
+ "onUpdate:modelValue": t[4] ||= (e) => Y.phone = e,
144
+ maxlength: "11",
145
+ placeholder: "请输入手机号"
146
+ }, {
147
+ prefix: x(() => [d(r, null, {
148
+ default: x(() => [d(b(w))]),
149
+ _: 1
150
+ })]),
151
+ _: 1
152
+ }, 8, ["modelValue"])]),
153
+ _: 1
154
+ }),
155
+ d(a, { label: "验证码" }, {
156
+ default: x(() => [l("div", L, [d(i, {
157
+ modelValue: Y.code,
158
+ "onUpdate:modelValue": t[5] ||= (e) => Y.code = e,
159
+ maxlength: "6",
160
+ placeholder: "请输入验证码"
161
+ }, {
162
+ prefix: x(() => [d(r, null, {
163
+ default: x(() => [d(b(E))]),
164
+ _: 1
165
+ })]),
166
+ _: 1
167
+ }, 8, ["modelValue"]), d(o, {
168
+ disabled: K.value > 0,
169
+ loading: G.value,
170
+ onClick: Q
171
+ }, {
172
+ default: x(() => [u(y(X.value), 1)]),
173
+ _: 1
174
+ }, 8, ["disabled", "loading"])])]),
175
+ _: 1
176
+ }),
177
+ d(o, {
178
+ type: "primary",
179
+ class: "login-page__submit",
180
+ loading: W.value,
181
+ onClick: $
182
+ }, {
183
+ default: x(() => [...t[10] ||= [u(" 登录系统 ", -1)]]),
184
+ _: 1
185
+ }, 8, ["loading"])
186
+ ]),
187
+ _: 1
188
+ }))]), l("div", R, [
189
+ t[12] ||= l("div", { class: "login-page__qr-box" }, "二维码", -1),
190
+ t[13] ||= l("strong", null, "移动端扫码登录", -1),
191
+ t[14] ||= l("p", null, "二维码每 2 分钟自动刷新", -1),
192
+ d(o, {
193
+ text: "",
194
+ onClick: t[6] ||= (e) => U.value = !1
195
+ }, {
196
+ default: x(() => [d(r, null, {
197
+ default: x(() => [d(b(ee))]),
198
+ _: 1
199
+ }), t[11] ||= u(" 使用手机号登录 ", -1)]),
200
+ _: 1
201
+ })
202
+ ])], 34)]),
203
+ _: 1
204
+ })])])]);
205
+ };
206
+ }
207
+ }), [["__scopeId", "data-v-8e99a976"]]);
208
+ //#endregion
209
+ export { z as default };