@oj-module/cli 0.1.21 → 0.2.1
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.
- package/devkit/README.md +1 -1
- package/devkit/SKILL.md +17 -3
- package/devkit/manual.md +77 -0
- package/package.json +2 -2
- package/shell-dist/assets/{index-BUyoDvUl.js → index-CLdhl3Qd.js} +61 -12
- package/shell-dist/assets/runtime.js +226 -89
- package/shell-dist/index.html +3 -3
- package/shell-dist/versions.json +3 -3
- package/src/build.ts +25 -0
- package/src/init.ts +3 -0
- package/templates/README.md +15 -0
- package/templates/api/config.yaml +14 -0
- package/templates/api/seed.mysql.sql +5 -0
- package/templates/api/seed.pg.sql +5 -0
- package/templates/api/src/_platform/_shared/respond.ts +18 -0
- package/templates/api/src/_platform/_shared/service/access.ts +99 -0
- package/templates/api/src/_platform/_shared/service/audit.ts +90 -0
- package/templates/api/src/_platform/_shared/service/contacts.ts +36 -0
- package/templates/api/src/_platform/_shared/service/guard.ts +30 -0
- package/templates/api/src/_platform/_shared/service/oplog.ts +47 -0
- package/templates/api/src/_platform/_shared/service/query.ts +53 -0
- package/templates/api/src/_platform/_shared/service/rate.ts +79 -0
- package/templates/api/src/_platform/_shared/service/roles.ts +137 -0
- package/templates/api/src/_platform/_shared/service/settings.ts +67 -0
- package/templates/api/src/_platform/_shared/service/solution-perms.ts +94 -0
- package/templates/api/src/_platform/_shared/service/users.ts +163 -0
- package/templates/api/src/_platform/contacts/api.ts +22 -0
- package/templates/api/src/_platform/contacts/detail/api.ts +18 -0
- package/templates/api/src/_platform/manifest.yaml +9 -1
- package/templates/api/src/_platform/migrations/0001__create_users.mysql.sql +9 -0
- package/templates/api/src/_platform/migrations/0001__create_users.pg.sql +9 -0
- package/templates/api/src/_platform/migrations/0002__add_users_avatar_base64.mysql.sql +3 -0
- package/templates/api/src/_platform/migrations/0003__users_source_display_name.mysql.sql +5 -0
- package/templates/api/src/_platform/migrations/0003__users_source_display_name.sql +5 -0
- package/templates/api/src/_platform/migrations/0004__sys_rbac.mysql.sql +70 -0
- package/templates/api/src/_platform/migrations/0004__sys_rbac.pg.sql +67 -0
- package/templates/api/src/_platform/migrations/0004__sys_rbac.sql +67 -0
- package/templates/api/src/_platform/migrations/0005__users_must_change.mysql.sql +3 -0
- package/templates/api/src/_platform/migrations/0005__users_must_change.sql +2 -0
- package/templates/api/src/_platform/migrations/0006__users_is_forbidden.mysql.sql +3 -0
- package/templates/api/src/_platform/migrations/0006__users_is_forbidden.sql +3 -0
- package/templates/api/src/_platform/migrations/0007__users_email.sql +3 -0
- package/templates/api/src/_platform/migrations/0008__sys_refresh_token.mysql.sql +10 -0
- package/templates/api/src/_platform/migrations/0008__sys_refresh_token.pg.sql +10 -0
- package/templates/api/src/_platform/migrations/0008__sys_refresh_token.sql +11 -0
- package/templates/api/src/_platform/migrations/0009__sys_throttle.mysql.sql +12 -0
- package/templates/api/src/_platform/migrations/0009__sys_throttle.pg.sql +12 -0
- package/templates/api/src/_platform/migrations/0009__sys_throttle.sql +13 -0
- package/templates/api/src/_platform/schema.yaml +76 -1
- package/templates/api/src/_platform/seed.mysql.sql +8 -0
- package/templates/api/src/_platform/seed.pg.sql +8 -0
- package/templates/api/src/_platform/seed.sql +19 -2
- package/templates/api/src/auth/_shared/ldap-login.ts +86 -0
- package/templates/api/src/auth/_shared/ldap.ts +14 -0
- package/templates/api/src/auth/_shared/login-throttle.ts +29 -0
- package/templates/api/src/auth/_shared/session.ts +163 -18
- package/templates/api/src/auth/api.ts +54 -44
- package/templates/api/src/auth/ldap-login/api.ts +29 -0
- package/templates/api/src/system/login-methods/api.ts +19 -0
- package/templates/api/src/system/manifest.yaml +5 -0
- package/templates/api/src/system/oplog/api.ts +53 -0
- package/templates/api/src/system/permissions/api.ts +26 -0
- package/templates/api/src/system/roles/api.ts +75 -0
- package/templates/api/src/system/roles/bindings/api.ts +29 -0
- package/templates/api/src/system/settings/api.ts +60 -0
- package/templates/api/src/system/users/api.ts +58 -0
- package/templates/api/src/system/users/forbidden/api.ts +26 -0
- package/templates/api/src/system/users/password/api.ts +26 -0
- package/templates/api/src/system/users/roles/api.ts +27 -0
- package/templates/api/src/web/user-info/api.ts +9 -18
- package/templates/api/tests/auth-ldap.spec.ts +173 -0
- package/templates/api/tests/auth-session.spec.ts +194 -0
- package/templates/api/tests/auth-throttle.spec.ts +74 -0
- package/templates/api/tests/fixture.ts +50 -0
- package/templates/api/tests/guard.spec.ts +62 -0
- package/templates/api/tests/query-utils.spec.ts +68 -0
- package/templates/api/tests/rbac-audit.spec.ts +105 -0
- package/templates/api/tests/rbac-contacts.spec.ts +85 -0
- package/templates/api/tests/rbac-guard.spec.ts +192 -0
- package/templates/api/tests/rbac-roles.spec.ts +159 -0
- package/templates/api/tests/rbac-seed.spec.ts +54 -0
- package/templates/api/tests/rbac-settings.spec.ts +79 -0
- package/templates/api/tests/rbac-solution-perms.spec.ts +168 -0
- package/templates/api/tests/rbac-tables.spec.ts +63 -0
- package/templates/api/tests/rbac-users.spec.ts +164 -0
- package/templates/api/vitest.config.ts +12 -0
- package/templates/openapi.json +1060 -31
- package/templates/pnpm-workspace.yaml +9 -0
- package/templates/web/src/auth/__client/api.schemas.ts +6 -1
- package/templates/web/src/auth/__client/api.ts +33 -1
- package/templates/web/src/login/entry.ts +17 -0
- package/templates/web/src/login/locales/en-US.json +12 -2
- package/templates/web/src/login/locales/zh-CN.json +12 -2
- package/templates/web/src/login/pages/change-password.tsx +74 -0
- package/templates/web/src/system/entry.ts +90 -0
- package/templates/web/src/system/locales/en-US.json +98 -0
- package/templates/web/src/system/locales/zh-CN.json +98 -0
- package/templates/web/src/system/pages/errors.ts +51 -0
- package/templates/web/src/system/pages/forbidden.tsx +35 -0
- package/templates/web/src/system/pages/login-methods/index.tsx +29 -0
- package/templates/web/src/system/pages/oplog/index.tsx +91 -0
- package/templates/web/src/system/pages/roles/index.tsx +91 -0
- package/templates/web/src/system/pages/settings/index.tsx +106 -0
- package/templates/web/src/system/pages/users/index.tsx +168 -0
- package/templates/web/src/system/pages/users/roles.tsx +68 -0
- package/templates/web.config.ts +8 -0
- package/vendor/host-versions.json +3 -3
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
if (typeof document !== "undefined" && !document.querySelector("style[data-ojm-runtime-css]")) {
|
|
3
3
|
const s = document.createElement("style");
|
|
4
4
|
s.setAttribute("data-ojm-runtime-css", "");
|
|
5
|
-
s.textContent = "\n@layer properties, reset, antd;\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer reset{\n/* stylelint-disable */\nhtml,\nbody {\n width: 100%;\n height: 100%;\n}\ninput::-ms-clear,\ninput::-ms-reveal {\n display: none;\n}\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n margin: 0;\n}\n[tabindex='-1']:focus {\n outline: none;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 0.5em;\n font-weight: 500;\n}\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\nabbr[title],\nabbr[data-original-title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n border-bottom: 0;\n cursor: help;\n}\naddress {\n margin-bottom: 1em;\n font-style: normal;\n line-height: inherit;\n}\ninput[type='text'],\ninput[type='password'],\ninput[type='number'],\ntextarea {\n -webkit-appearance: none;\n}\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1em;\n}\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\ndt {\n font-weight: 500;\n}\ndd {\n margin-bottom: 0.5em;\n margin-left: 0;\n}\nblockquote {\n margin: 0 0 1em;\n}\ndfn {\n font-style: italic;\n}\nb,\nstrong {\n font-weight: bolder;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\npre,\ncode,\nkbd,\nsamp {\n font-size: 1em;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\npre {\n margin-top: 0;\n margin-bottom: 1em;\n overflow: auto;\n}\nfigure {\n margin: 0 0 1em;\n}\nimg {\n vertical-align: middle;\n border-style: none;\n}\na,\narea,\nbutton,\n[role='button'],\ninput:not([type='range']),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\ntable {\n border-collapse: collapse;\n}\ncaption {\n padding-top: 0.75em;\n padding-bottom: 0.3em;\n text-align: left;\n caption-side: bottom;\n}\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n}\nbutton,\ninput {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml [type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button;\n}\nbutton::-moz-focus-inner,\n[type='button']::-moz-focus-inner,\n[type='reset']::-moz-focus-inner,\n[type='submit']::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\ninput[type='radio'],\ninput[type='checkbox'] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type='date'],\ninput[type='time'],\ninput[type='datetime-local'],\ninput[type='month'] {\n -webkit-appearance: listbox;\n}\ntextarea {\n overflow: auto;\n resize: vertical;\n}\nfieldset {\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: 0.5em;\n padding: 0;\n color: inherit;\n font-size: 1.5em;\n line-height: inherit;\n white-space: normal;\n}\nprogress {\n vertical-align: baseline;\n}\n[type='number']::-webkit-inner-spin-button,\n[type='number']::-webkit-outer-spin-button {\n height: auto;\n}\n[type='search'] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n[type='search']::-webkit-search-cancel-button,\n[type='search']::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\noutput {\n display: inline-block;\n}\nsummary {\n display: list-item;\n}\ntemplate {\n display: none;\n}\n[hidden] {\n display: none !important;\n}\n}\n@layer simplebar{\n[data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto!important;height:auto!important;z-index:0}.simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;max-width:100%;max-height:100%;overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{display:none;width:0;height:0}.simplebar-content:after,.simplebar-content:before{content:' ';display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging{pointer-events:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:'';background:#000;border-radius:7px;left:2px;right:2px;opacity:0;transition:opacity .2s .5s linear}.simplebar-scrollbar.simplebar-visible:before{opacity:.5;transition-delay:0s;transition-duration:0s}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-scrollbar:before{top:2px;bottom:2px;left:2px;right:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:0;bottom:0;min-height:0;min-width:10px;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.simplebar-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:scrollbar!important}.simplebar-dummy-scrollbar-size>div{width:200%;height:200%;margin:10px 0}.simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}\n}\n@layer simplebar {\n .simplebar-scrollbar:before {\n background-color: #909399;\n }\n\n .simplebar-content {\n height: 100%;\n }\n}\n\n#root {\n height: 100vh;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhtml.color-blind-mode {\n --tw-invert: invert(100%);\n filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );\n}\n\nhtml.gray-mode {\n --tw-grayscale: grayscale(100%);\n filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );\n}\n\n@layer theme {\n :root, :host {\n --font-sans: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", Arial,\n sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --spacing: .25rem;\n --container-md: 28rem;\n --text-xs: .75rem;\n --text-xs--line-height: calc(1 / .75);\n --text-sm: .875rem;\n --text-sm--line-height: calc(1.25 / .875);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --tracking-tight: -.025em;\n --radius-sm: .25rem;\n --radius-md: .375rem;\n --radius-xl: .75rem;\n --ease-in: cubic-bezier(.4, 0, 1, 1);\n --animate-spin: spin 1s linear infinite;\n --default-transition-duration: .15s;\n --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n --animate-wiggle: wiggle 1s both;\n --animate-bounce-in-down-out-up: bounce-in-down-out-up 4s ease-in-out 0s infinite;\n }\n}\n\n@layer base, components;\n\n@layer utilities {\n .visible {\n visibility: visible;\n }\n\n .absolute {\n position: absolute;\n }\n\n .fixed {\n position: fixed;\n }\n\n .relative {\n position: relative;\n }\n\n .static {\n position: static;\n }\n\n .top-0 {\n top: 0;\n }\n\n .top-1\\.5 {\n top: calc(var(--spacing) * 1.5);\n }\n\n .top-2 {\n top: calc(var(--spacing) * 2);\n }\n\n .top-3 {\n top: calc(var(--spacing) * 3);\n }\n\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n\n .right-3 {\n right: calc(var(--spacing) * 3);\n }\n\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n\n .bottom-0 {\n bottom: 0;\n }\n\n .bottom-3 {\n bottom: calc(var(--spacing) * 3);\n }\n\n .left-0 {\n left: 0;\n }\n\n .left-1\\/2 {\n left: 50%;\n }\n\n .left-3 {\n left: calc(var(--spacing) * 3);\n }\n\n .z-10 {\n z-index: 10;\n }\n\n .container {\n width: 100%;\n }\n\n @media (min-width: 480px) {\n .container {\n max-width: 480px;\n }\n }\n\n @media (min-width: 576px) {\n .container {\n max-width: 576px;\n }\n }\n\n @media (min-width: 768px) {\n .container {\n max-width: 768px;\n }\n }\n\n @media (min-width: 992px) {\n .container {\n max-width: 992px;\n }\n }\n\n @media (min-width: 1200px) {\n .container {\n max-width: 1200px;\n }\n }\n\n @media (min-width: 1600px) {\n .container {\n max-width: 1600px;\n }\n }\n\n .m-0 {\n margin: 0;\n }\n\n .m-152 {\n margin: calc(var(--spacing) * 152);\n }\n\n .mx-3 {\n margin-inline: calc(var(--spacing) * 3);\n }\n\n .mx-4 {\n margin-inline: calc(var(--spacing) * 4);\n }\n\n .mx-auto {\n margin-inline: auto;\n }\n\n .my-0 {\n margin-block: 0;\n }\n\n .my-1 {\n margin-block: var(--spacing);\n }\n\n .my-4 {\n margin-block: calc(var(--spacing) * 4);\n }\n\n .my-8 {\n margin-block: calc(var(--spacing) * 8);\n }\n\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n\n .mt-2\\.5 {\n margin-top: calc(var(--spacing) * 2.5);\n }\n\n .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n\n .mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n\n .mr-2 {\n margin-right: calc(var(--spacing) * 2);\n }\n\n .mr-3 {\n margin-right: calc(var(--spacing) * 3);\n }\n\n .mr-8 {\n margin-right: calc(var(--spacing) * 8);\n }\n\n .mr-17 {\n margin-right: calc(var(--spacing) * 17);\n }\n\n .mb-0 {\n margin-bottom: 0;\n }\n\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n\n .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\n }\n\n .ml-2 {\n margin-left: calc(var(--spacing) * 2);\n }\n\n .ml-4 {\n margin-left: calc(var(--spacing) * 4);\n }\n\n .box-border {\n box-sizing: border-box;\n }\n\n .line-clamp-2 {\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n overflow: hidden;\n }\n\n .block {\n display: block;\n }\n\n .flex {\n display: flex;\n }\n\n .hidden {\n display: none;\n }\n\n .inline {\n display: inline;\n }\n\n .inline-block {\n display: inline-block;\n }\n\n .table {\n display: table;\n }\n\n .aspect-square {\n aspect-ratio: 1;\n }\n\n .size-5 {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n }\n\n .h-2 {\n height: calc(var(--spacing) * 2);\n }\n\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n\n .h-64 {\n height: calc(var(--spacing) * 64);\n }\n\n .h-\\[0\\.63em\\] {\n height: .63em;\n }\n\n .h-full {\n height: 100%;\n }\n\n .h-screen {\n height: 100vh;\n }\n\n .w-1\\/3 {\n width: 33.3333%;\n }\n\n .w-2 {\n width: calc(var(--spacing) * 2);\n }\n\n .w-2\\/5 {\n width: 40%;\n }\n\n .w-7\\/12 {\n width: 58.3333%;\n }\n\n .w-10 {\n width: calc(var(--spacing) * 10);\n }\n\n .w-11 {\n width: calc(var(--spacing) * 11);\n }\n\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n\n .w-40 {\n width: calc(var(--spacing) * 40);\n }\n\n .w-72 {\n width: calc(var(--spacing) * 72);\n }\n\n .w-full {\n width: 100%;\n }\n\n .max-w-90 {\n max-width: calc(var(--spacing) * 90);\n }\n\n .min-w-0 {\n min-width: 0;\n }\n\n .flex-1 {\n flex: 1;\n }\n\n .flex-auto {\n flex: auto;\n }\n\n .flex-shrink-0, .shrink-0 {\n flex-shrink: 0;\n }\n\n .grow {\n flex-grow: 1;\n }\n\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n\n .scale-75 {\n --tw-scale-x: 75%;\n --tw-scale-y: 75%;\n --tw-scale-z: 75%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n\n .transform {\n transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, );\n }\n\n .animate-spin {\n animation: var(--animate-spin);\n }\n\n .cursor-help {\n cursor: help;\n }\n\n .cursor-pointer {\n cursor: pointer;\n }\n\n .list-none {\n list-style-type: none;\n }\n\n .flex-col {\n flex-direction: column;\n }\n\n .flex-row-reverse {\n flex-direction: row-reverse;\n }\n\n .flex-wrap {\n flex-wrap: wrap;\n }\n\n .items-center {\n align-items: center;\n }\n\n .justify-between {\n justify-content: space-between;\n }\n\n .justify-center {\n justify-content: center;\n }\n\n .justify-start {\n justify-content: flex-start;\n }\n\n .gap-1 {\n gap: var(--spacing);\n }\n\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n\n .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n\n .gap-x-3 {\n column-gap: calc(var(--spacing) * 3);\n }\n\n .gap-y-5 {\n row-gap: calc(var(--spacing) * 5);\n }\n\n .overflow-hidden {\n overflow: hidden;\n }\n\n .overflow-x-hidden {\n overflow-x: hidden;\n }\n\n .overflow-y-auto {\n overflow-y: auto;\n }\n\n .rounded {\n border-radius: .25rem;\n }\n\n .rounded-full {\n border-radius: 3.40282e38px;\n }\n\n .rounded-md {\n border-radius: var(--radius-md);\n }\n\n .rounded-none {\n border-radius: 0;\n }\n\n .rounded-sm {\n border-radius: var(--radius-sm);\n }\n\n .rounded-r-xl {\n border-top-right-radius: var(--radius-xl);\n border-bottom-right-radius: var(--radius-xl);\n }\n\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n\n .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n\n .border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n\n .\\!border-none {\n --tw-border-style: none !important;\n border-style: none !important;\n }\n\n .border-t-\\[\\#303030\\] {\n border-top-color: #303030;\n }\n\n .border-t-colorBorderSecondary {\n border-top-color: var(--oo-colorBorderSecondary);\n }\n\n .border-r-\\[\\#303030\\] {\n border-right-color: #303030;\n }\n\n .border-r-colorBorderSecondary {\n border-right-color: var(--oo-colorBorderSecondary);\n }\n\n .border-l-colorBorderSecondary {\n border-left-color: var(--oo-colorBorderSecondary);\n }\n\n .bg-\\[\\#F3F4F5\\] {\n background-color: #f3f4f5;\n }\n\n .bg-blue-500\\/20 {\n background-color: rgb(var(--oo-blue-5));\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .bg-blue-500\\/20 {\n background-color: color-mix(in oklab, rgb(var(--oo-blue-5)) 20%, transparent);\n }\n }\n\n .bg-blue-600 {\n background-color: rgb(var(--oo-blue-6));\n }\n\n .bg-colorBgContainer {\n background-color: var(--oo-colorBgContainer);\n }\n\n .bg-colorBgLayout {\n background-color: var(--oo-colorBgLayout);\n }\n\n .bg-gray-100 {\n background-color: #f5f5f5;\n }\n\n .bg-primary {\n background-color: rgb(var(--oo-colorPrimary));\n }\n\n .bg-primaryActive {\n background-color: rgb(var(--oo-colorPrimaryActive));\n }\n\n .object-cover {\n object-fit: cover;\n }\n\n .p-0 {\n padding: 0;\n }\n\n .p-1 {\n padding: var(--spacing);\n }\n\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n\n .px-0 {\n padding-inline: 0;\n }\n\n .px-1 {\n padding-inline: var(--spacing);\n }\n\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n\n .px-2\\.75 {\n padding-inline: calc(var(--spacing) * 2.75);\n }\n\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n\n .px-9 {\n padding-inline: calc(var(--spacing) * 9);\n }\n\n .px-10 {\n padding-inline: calc(var(--spacing) * 10);\n }\n\n .px-\\[11px\\] {\n padding-inline: 11px;\n }\n\n .py-1 {\n padding-block: var(--spacing);\n }\n\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n\n .py-2\\.5 {\n padding-block: calc(var(--spacing) * 2.5);\n }\n\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n\n .py-10 {\n padding-block: calc(var(--spacing) * 10);\n }\n\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n\n .text-center {\n text-align: center;\n }\n\n .font-sans {\n font-family: var(--font-sans);\n }\n\n .text-3xl {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n\n .text-\\[4rem\\] {\n font-size: 4rem;\n }\n\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n\n .tracking-tight {\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n\n .text-colorBgContainer {\n color: var(--oo-colorBgContainer);\n }\n\n .text-colorBgContainer\\! {\n color: var(--oo-colorBgContainer) !important;\n }\n\n .text-colorText {\n color: var(--oo-colorText);\n }\n\n .text-colorText\\! {\n color: var(--oo-colorText) !important;\n }\n\n .text-colorTextSecondary {\n color: var(--oo-colorTextSecondary);\n }\n\n .text-colorTextTertiary {\n color: var(--oo-colorTextTertiary);\n }\n\n .opacity-50 {\n opacity: .5;\n }\n\n .opacity-90 {\n opacity: .9;\n }\n\n .outline, .outline-1 {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n\n .outline-2 {\n outline-style: var(--tw-outline-style);\n outline-width: 2px;\n }\n\n .outline-blue-600 {\n outline-color: rgb(var(--oo-blue-6));\n }\n\n .outline-gray-300 {\n outline-color: #d9d9d9;\n }\n\n .filter {\n filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );\n }\n\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .duration-300 {\n --tw-duration: .3s;\n transition-duration: .3s;\n }\n\n .ease-in {\n --tw-ease: var(--ease-in);\n transition-timing-function: var(--ease-in);\n }\n\n @media (hover: hover) {\n .group-hover\\:animate-wiggle:is(:where(.group):hover *) {\n animation: var(--animate-wiggle);\n }\n\n .group-hover\\:opacity-100:is(:where(.group):hover *) {\n opacity: 1;\n }\n }\n\n .before\\:absolute:before {\n content: var(--tw-content);\n position: absolute;\n }\n\n .before\\:top-1\\/2:before {\n content: var(--tw-content);\n top: 50%;\n }\n\n .before\\:left-1\\/2:before {\n content: var(--tw-content);\n left: 50%;\n }\n\n .before\\:h-0:before {\n content: var(--tw-content);\n height: 0;\n }\n\n .before\\:w-0:before {\n content: var(--tw-content);\n width: 0;\n }\n\n .before\\:rounded-sm:before {\n content: var(--tw-content);\n border-radius: var(--radius-sm);\n }\n\n .before\\:opacity-0:before {\n content: var(--tw-content);\n opacity: 0;\n }\n\n .before\\:outline:before {\n content: var(--tw-content);\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n\n .before\\:outline-2:before {\n content: var(--tw-content);\n outline-style: var(--tw-outline-style);\n outline-width: 2px;\n }\n\n .before\\:outline-transparent:before {\n content: var(--tw-content);\n outline-color: #0000;\n }\n\n .before\\:transition-all:before {\n content: var(--tw-content);\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .before\\:duration-300:before {\n content: var(--tw-content);\n --tw-duration: .3s;\n transition-duration: .3s;\n }\n\n .before\\:content-\\[\\'\\'\\]:before {\n --tw-content: \"\";\n content: var(--tw-content);\n }\n\n .last\\:mr-auto:last-child {\n margin-right: auto;\n }\n\n @media (hover: hover) {\n .hover\\:bg-gray-100:hover {\n background-color: #f5f5f5;\n }\n\n .hover\\:text-colorText:hover {\n color: var(--oo-colorText);\n }\n }\n\n .before\\:hover\\:top-0:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:top-0:before:hover {\n top: 0;\n }\n }\n\n .before\\:hover\\:left-0:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:left-0:before:hover {\n left: 0;\n }\n }\n\n .before\\:hover\\:h-full:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:h-full:before:hover {\n height: 100%;\n }\n }\n\n .before\\:hover\\:w-full:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:w-full:before:hover {\n width: 100%;\n }\n }\n\n .before\\:hover\\:p-1:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:p-1:before:hover {\n padding: var(--spacing);\n }\n }\n\n .before\\:hover\\:opacity-100:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:opacity-100:before:hover {\n opacity: 1;\n }\n }\n\n .before\\:hover\\:outline-blue-600:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:outline-blue-600:before:hover {\n outline-color: rgb(var(--oo-blue-6));\n }\n }\n\n @media (prefers-reduced-motion: no-preference) {\n .motion-safe\\:animate-bounce-in-down-out-up {\n animation: var(--animate-bounce-in-down-out-up);\n }\n }\n\n @media (min-width: 576px) {\n .sm\\:mx-auto {\n margin-inline: auto;\n }\n }\n\n @media (min-width: 768px) {\n .md\\:mr-2\\.5 {\n margin-right: calc(var(--spacing) * 2.5);\n }\n\n .md\\:block {\n display: block;\n }\n\n .md\\:w-3\\/12 {\n width: 25%;\n }\n\n .md\\:w-96 {\n width: calc(var(--spacing) * 96);\n }\n\n .md\\:max-w-md {\n max-width: var(--container-md);\n }\n\n .md\\:bg-colorBgLayout {\n background-color: var(--oo-colorBgLayout);\n }\n\n .md\\:px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n\n .md\\:pb-0 {\n padding-bottom: 0;\n }\n\n .md\\:text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n\n @media (min-width: 992px) {\n .lg\\:text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n }\n\n @media (min-width: 1200px) {\n .xl\\:w-2\\/12 {\n width: 16.6667%;\n }\n\n .xl\\:px-8 {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n\n .dark\\:bg-\\[\\#26313C\\]:where(.dark, .dark *) {\n background-color: #26313c;\n }\n\n .dark\\:bg-black:where(.dark, .dark *) {\n background-color: #000;\n }\n\n .dark\\:bg-gray-700:where(.dark, .dark *) {\n background-color: #434343;\n }\n\n .dark\\:outline-blue-700:where(.dark, .dark *) {\n outline-color: rgb(var(--oo-blue-7));\n }\n\n .dark\\:outline-gray-700:where(.dark, .dark *) {\n outline-color: #434343;\n }\n\n @media (hover: hover) {\n .dark\\:hover\\:bg-gray-700:where(.dark, .dark *):hover {\n background-color: #434343;\n }\n }\n\n .dark\\:before\\:hover\\:outline-blue-700:where(.dark, .dark *):before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .dark\\:before\\:hover\\:outline-blue-700:where(.dark, .dark *):before:hover {\n outline-color: rgb(var(--oo-blue-7));\n }\n }\n\n .en-US\\:gap-y-3:where(:lang(en-US)) {\n row-gap: calc(var(--spacing) * 3);\n }\n\n .en-US\\:text-\\[9rem\\]:where(:lang(en-US)) {\n font-size: 9rem;\n }\n\n .zh-CN\\:hidden:where(:lang(zh-CN)) {\n display: none;\n }\n}\n\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes fade-out {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n }\n}\n\n@keyframes slide-in {\n from {\n transform: translateX(-30px);\n }\n\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes slide-out {\n from {\n transform: translateX(0);\n }\n\n to {\n transform: translateX(30px);\n }\n}\n\n@keyframes slide-top-in {\n from {\n transform: translateY(-10%);\n }\n\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes slide-top-out {\n from {\n transform: translateY(0);\n }\n\n to {\n transform: translateY(-10%);\n }\n}\n\n@keyframes slide-bottom-in {\n from {\n transform: translateY(10%);\n }\n\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes slide-bottom-out {\n from {\n transform: translateY(0);\n }\n\n to {\n transform: translateY(10%);\n }\n}\n\n@keyframes fade-slide {\n 0% {\n opacity: 0;\n transform: translate(-30px);\n }\n\n 50% {\n opacity: 1;\n }\n\n 100% {\n opacity: 0;\n transform: translate(30px);\n }\n}\n\n@keyframes fade-up {\n 0% {\n opacity: 0;\n transform: translateY(10%);\n }\n\n 50% {\n opacity: 1;\n }\n\n 100% {\n opacity: 0;\n transform: translateY(-10%);\n }\n}\n\n@keyframes fade-down {\n 0% {\n opacity: 0;\n transform: translateY(-10%);\n }\n\n 50% {\n opacity: 1;\n }\n\n 100% {\n opacity: 0;\n transform: translateY(10%);\n }\n}\n\n.fade-slide {\n animation: 3s linear infinite fade-slide;\n}\n\n.fade {\n animation: 3s linear infinite alternate fade-in;\n}\n\n.fade-up {\n animation: 3s infinite fade-up;\n}\n\n.fade-down {\n animation: 3s infinite fade-down;\n}\n\n@keyframes zoom-in {\n 0% {\n transform: scale(.8);\n }\n\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n@keyframes zoom-out {\n 0% {\n transform: scale(1);\n }\n\n 100% {\n opacity: 1;\n transform: scale(1.25);\n }\n}\n\n@keyframes fade-zoom {\n 0% {\n opacity: 0;\n transform: scale(.8);\n }\n\n 50% {\n opacity: 1;\n transform: scale(1);\n }\n\n 100% {\n opacity: 0;\n transform: scale(1.25);\n }\n}\n\n.fade-zoom {\n animation: 3s infinite fade-zoom;\n}\n\n.keepalive-fade.active {\n animation: .3s ease-in-out fade-in;\n}\n\n.keepalive-fade.inactive {\n animation: .3s ease-in-out fade-out;\n}\n\n.keepalive-fade-slide.active {\n animation: .3s ease-in-out fade-in, .3s ease-in-out slide-in;\n}\n\n.keepalive-fade-slide.inactive {\n animation: .3s ease-in-out fade-out, .3s ease-in-out slide-out;\n}\n\n.keepalive-fade-up.active {\n animation: .3s ease-in-out fade-in, .3s ease-in-out slide-bottom-in;\n}\n\n.keepalive-fade-up.inactive {\n animation: .3s ease-in-out fade-out, .3s ease-in-out slide-top-out;\n}\n\n.keepalive-fade-down.active {\n animation: .3s ease-in-out fade-in, .3s ease-in-out slide-top-in;\n}\n\n.keepalive-fade-down.inactive {\n animation: .3s ease-in-out fade-out, .3s ease-in-out slide-bottom-out;\n}\n\n.keepalive-fade-zoom.active {\n animation: .3s ease-in-out zoom-in, .3s ease-in-out zoom-in;\n}\n\n.keepalive-fade-zoom.inactive {\n animation: .3s ease-in-out zoom-out, .3s ease-in-out fade-out;\n}\n\n@property --tw-blur {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-invert {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-drop-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-scale-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n\n@property --tw-scale-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n\n@property --tw-scale-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n\n@property --tw-leading {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n\n@property --tw-duration {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-ease {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-content {\n syntax: \"*\";\n inherits: false;\n initial-value: \"\";\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes wiggle {\n 0%, 100% {\n transform-origin: top;\n }\n\n 15% {\n transform: rotateZ(10deg);\n }\n\n 30% {\n transform: rotateZ(-10deg);\n }\n\n 45% {\n transform: rotateZ(5deg);\n }\n\n 60% {\n transform: rotateZ(-5deg);\n }\n\n 75% {\n transform: rotateZ(2deg);\n }\n}\n\n@keyframes bounce-in-down-out-up {\n 0% {\n transform: translateY(0);\n }\n\n 50% {\n transform: translateY(-20px);\n }\n\n 100% {\n transform: translateY(0);\n }\n}\n\n@layer properties {\n @supports (((-webkit-hyphens: none)) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) {\n *, :before, :after, ::backdrop {\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-outline-style: solid;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-content: \"\";\n }\n }\n}\n/*$vite$:1*/";
|
|
5
|
+
s.textContent = "\n@layer properties, reset, antd;\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n@layer reset{\n/* stylelint-disable */\nhtml,\nbody {\n width: 100%;\n height: 100%;\n}\ninput::-ms-clear,\ninput::-ms-reveal {\n display: none;\n}\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n margin: 0;\n}\n[tabindex='-1']:focus {\n outline: none;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 0.5em;\n font-weight: 500;\n}\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\nabbr[title],\nabbr[data-original-title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n border-bottom: 0;\n cursor: help;\n}\naddress {\n margin-bottom: 1em;\n font-style: normal;\n line-height: inherit;\n}\ninput[type='text'],\ninput[type='password'],\ninput[type='number'],\ntextarea {\n -webkit-appearance: none;\n}\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1em;\n}\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\ndt {\n font-weight: 500;\n}\ndd {\n margin-bottom: 0.5em;\n margin-left: 0;\n}\nblockquote {\n margin: 0 0 1em;\n}\ndfn {\n font-style: italic;\n}\nb,\nstrong {\n font-weight: bolder;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\npre,\ncode,\nkbd,\nsamp {\n font-size: 1em;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\npre {\n margin-top: 0;\n margin-bottom: 1em;\n overflow: auto;\n}\nfigure {\n margin: 0 0 1em;\n}\nimg {\n vertical-align: middle;\n border-style: none;\n}\na,\narea,\nbutton,\n[role='button'],\ninput:not([type='range']),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\ntable {\n border-collapse: collapse;\n}\ncaption {\n padding-top: 0.75em;\n padding-bottom: 0.3em;\n text-align: left;\n caption-side: bottom;\n}\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n}\nbutton,\ninput {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml [type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button;\n}\nbutton::-moz-focus-inner,\n[type='button']::-moz-focus-inner,\n[type='reset']::-moz-focus-inner,\n[type='submit']::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\ninput[type='radio'],\ninput[type='checkbox'] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type='date'],\ninput[type='time'],\ninput[type='datetime-local'],\ninput[type='month'] {\n -webkit-appearance: listbox;\n}\ntextarea {\n overflow: auto;\n resize: vertical;\n}\nfieldset {\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: 0.5em;\n padding: 0;\n color: inherit;\n font-size: 1.5em;\n line-height: inherit;\n white-space: normal;\n}\nprogress {\n vertical-align: baseline;\n}\n[type='number']::-webkit-inner-spin-button,\n[type='number']::-webkit-outer-spin-button {\n height: auto;\n}\n[type='search'] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n[type='search']::-webkit-search-cancel-button,\n[type='search']::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\noutput {\n display: inline-block;\n}\nsummary {\n display: list-item;\n}\ntemplate {\n display: none;\n}\n[hidden] {\n display: none !important;\n}\n}\n@layer simplebar{\n[data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto!important;height:auto!important;z-index:0}.simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;max-width:100%;max-height:100%;overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{display:none;width:0;height:0}.simplebar-content:after,.simplebar-content:before{content:' ';display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging{pointer-events:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:'';background:#000;border-radius:7px;left:2px;right:2px;opacity:0;transition:opacity .2s .5s linear}.simplebar-scrollbar.simplebar-visible:before{opacity:.5;transition-delay:0s;transition-duration:0s}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-scrollbar:before{top:2px;bottom:2px;left:2px;right:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:0;bottom:0;min-height:0;min-width:10px;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.simplebar-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:scrollbar!important}.simplebar-dummy-scrollbar-size>div{width:200%;height:200%;margin:10px 0}.simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}\n}\n@layer simplebar {\n .simplebar-scrollbar:before {\n background-color: #909399;\n }\n\n .simplebar-content {\n height: 100%;\n }\n}\n\n#root {\n height: 100vh;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhtml.color-blind-mode {\n --tw-invert: invert(100%);\n filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );\n}\n\nhtml.gray-mode {\n --tw-grayscale: grayscale(100%);\n filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );\n}\n\n@layer theme {\n :root, :host {\n --font-sans: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", Arial,\n sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --spacing: .25rem;\n --container-md: 28rem;\n --text-xs: .75rem;\n --text-xs--line-height: calc(1 / .75);\n --text-sm: .875rem;\n --text-sm--line-height: calc(1.25 / .875);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --tracking-tight: -.025em;\n --radius-sm: .25rem;\n --radius-md: .375rem;\n --radius-xl: .75rem;\n --ease-in: cubic-bezier(.4, 0, 1, 1);\n --animate-spin: spin 1s linear infinite;\n --default-transition-duration: .15s;\n --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n --animate-wiggle: wiggle 1s both;\n --animate-bounce-in-down-out-up: bounce-in-down-out-up 4s ease-in-out 0s infinite;\n }\n}\n\n@layer base, components;\n\n@layer utilities {\n .visible {\n visibility: visible;\n }\n\n .absolute {\n position: absolute;\n }\n\n .fixed {\n position: fixed;\n }\n\n .relative {\n position: relative;\n }\n\n .static {\n position: static;\n }\n\n .top-0 {\n top: 0;\n }\n\n .top-1\\.5 {\n top: calc(var(--spacing) * 1.5);\n }\n\n .top-2 {\n top: calc(var(--spacing) * 2);\n }\n\n .top-3 {\n top: calc(var(--spacing) * 3);\n }\n\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n\n .right-3 {\n right: calc(var(--spacing) * 3);\n }\n\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n\n .bottom-0 {\n bottom: 0;\n }\n\n .bottom-3 {\n bottom: calc(var(--spacing) * 3);\n }\n\n .left-0 {\n left: 0;\n }\n\n .left-1\\/2 {\n left: 50%;\n }\n\n .left-3 {\n left: calc(var(--spacing) * 3);\n }\n\n .z-10 {\n z-index: 10;\n }\n\n .container {\n width: 100%;\n }\n\n @media (min-width: 480px) {\n .container {\n max-width: 480px;\n }\n }\n\n @media (min-width: 576px) {\n .container {\n max-width: 576px;\n }\n }\n\n @media (min-width: 768px) {\n .container {\n max-width: 768px;\n }\n }\n\n @media (min-width: 992px) {\n .container {\n max-width: 992px;\n }\n }\n\n @media (min-width: 1200px) {\n .container {\n max-width: 1200px;\n }\n }\n\n @media (min-width: 1600px) {\n .container {\n max-width: 1600px;\n }\n }\n\n .m-0 {\n margin: 0;\n }\n\n .m-152 {\n margin: calc(var(--spacing) * 152);\n }\n\n .mx-3 {\n margin-inline: calc(var(--spacing) * 3);\n }\n\n .mx-4 {\n margin-inline: calc(var(--spacing) * 4);\n }\n\n .mx-auto {\n margin-inline: auto;\n }\n\n .my-0 {\n margin-block: 0;\n }\n\n .my-1 {\n margin-block: var(--spacing);\n }\n\n .my-4 {\n margin-block: calc(var(--spacing) * 4);\n }\n\n .my-8 {\n margin-block: calc(var(--spacing) * 8);\n }\n\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n\n .mt-2\\.5 {\n margin-top: calc(var(--spacing) * 2.5);\n }\n\n .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n\n .mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n\n .mr-2 {\n margin-right: calc(var(--spacing) * 2);\n }\n\n .mr-3 {\n margin-right: calc(var(--spacing) * 3);\n }\n\n .mr-8 {\n margin-right: calc(var(--spacing) * 8);\n }\n\n .mr-17 {\n margin-right: calc(var(--spacing) * 17);\n }\n\n .mb-0 {\n margin-bottom: 0;\n }\n\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n\n .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\n }\n\n .ml-2 {\n margin-left: calc(var(--spacing) * 2);\n }\n\n .ml-4 {\n margin-left: calc(var(--spacing) * 4);\n }\n\n .box-border {\n box-sizing: border-box;\n }\n\n .line-clamp-2 {\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n overflow: hidden;\n }\n\n .block {\n display: block;\n }\n\n .flex {\n display: flex;\n }\n\n .hidden {\n display: none;\n }\n\n .inline {\n display: inline;\n }\n\n .inline-block {\n display: inline-block;\n }\n\n .table {\n display: table;\n }\n\n .aspect-square {\n aspect-ratio: 1;\n }\n\n .size-5 {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n }\n\n .h-2 {\n height: calc(var(--spacing) * 2);\n }\n\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n\n .h-64 {\n height: calc(var(--spacing) * 64);\n }\n\n .h-\\[0\\.63em\\] {\n height: .63em;\n }\n\n .h-full {\n height: 100%;\n }\n\n .h-screen {\n height: 100vh;\n }\n\n .w-1\\/3 {\n width: 33.3333%;\n }\n\n .w-2 {\n width: calc(var(--spacing) * 2);\n }\n\n .w-2\\/5 {\n width: 40%;\n }\n\n .w-7\\/12 {\n width: 58.3333%;\n }\n\n .w-10 {\n width: calc(var(--spacing) * 10);\n }\n\n .w-11 {\n width: calc(var(--spacing) * 11);\n }\n\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n\n .w-40 {\n width: calc(var(--spacing) * 40);\n }\n\n .w-72 {\n width: calc(var(--spacing) * 72);\n }\n\n .w-full {\n width: 100%;\n }\n\n .max-w-90 {\n max-width: calc(var(--spacing) * 90);\n }\n\n .min-w-0 {\n min-width: 0;\n }\n\n .flex-1 {\n flex: 1;\n }\n\n .flex-auto {\n flex: auto;\n }\n\n .flex-shrink-0, .shrink-0 {\n flex-shrink: 0;\n }\n\n .grow {\n flex-grow: 1;\n }\n\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n\n .scale-75 {\n --tw-scale-x: 75%;\n --tw-scale-y: 75%;\n --tw-scale-z: 75%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n\n .transform {\n transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, );\n }\n\n .animate-spin {\n animation: var(--animate-spin);\n }\n\n .cursor-help {\n cursor: help;\n }\n\n .cursor-pointer {\n cursor: pointer;\n }\n\n .list-none {\n list-style-type: none;\n }\n\n .flex-col {\n flex-direction: column;\n }\n\n .flex-row-reverse {\n flex-direction: row-reverse;\n }\n\n .flex-wrap {\n flex-wrap: wrap;\n }\n\n .items-center {\n align-items: center;\n }\n\n .justify-between {\n justify-content: space-between;\n }\n\n .justify-center {\n justify-content: center;\n }\n\n .justify-start {\n justify-content: flex-start;\n }\n\n .gap-1 {\n gap: var(--spacing);\n }\n\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n\n .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n\n .gap-x-3 {\n column-gap: calc(var(--spacing) * 3);\n }\n\n .gap-y-5 {\n row-gap: calc(var(--spacing) * 5);\n }\n\n .overflow-hidden {\n overflow: hidden;\n }\n\n .overflow-x-auto {\n overflow-x: auto;\n }\n\n .overflow-x-hidden {\n overflow-x: hidden;\n }\n\n .overflow-y-auto {\n overflow-y: auto;\n }\n\n .rounded {\n border-radius: .25rem;\n }\n\n .rounded-full {\n border-radius: 3.40282e38px;\n }\n\n .rounded-md {\n border-radius: var(--radius-md);\n }\n\n .rounded-none {\n border-radius: 0;\n }\n\n .rounded-sm {\n border-radius: var(--radius-sm);\n }\n\n .rounded-r-xl {\n border-top-right-radius: var(--radius-xl);\n border-bottom-right-radius: var(--radius-xl);\n }\n\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n\n .border-r {\n border-right-style: var(--tw-border-style);\n border-right-width: 1px;\n }\n\n .border-l {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n\n .\\!border-none {\n --tw-border-style: none !important;\n border-style: none !important;\n }\n\n .border-t-\\[\\#303030\\] {\n border-top-color: #303030;\n }\n\n .border-t-colorBorderSecondary {\n border-top-color: var(--oo-colorBorderSecondary);\n }\n\n .border-r-\\[\\#303030\\] {\n border-right-color: #303030;\n }\n\n .border-r-colorBorderSecondary {\n border-right-color: var(--oo-colorBorderSecondary);\n }\n\n .border-l-colorBorderSecondary {\n border-left-color: var(--oo-colorBorderSecondary);\n }\n\n .bg-\\[\\#F3F4F5\\] {\n background-color: #f3f4f5;\n }\n\n .bg-blue-500\\/20 {\n background-color: rgb(var(--oo-blue-5));\n }\n\n @supports (color: color-mix(in lab, red, red)) {\n .bg-blue-500\\/20 {\n background-color: color-mix(in oklab, rgb(var(--oo-blue-5)) 20%, transparent);\n }\n }\n\n .bg-blue-600 {\n background-color: rgb(var(--oo-blue-6));\n }\n\n .bg-colorBgContainer {\n background-color: var(--oo-colorBgContainer);\n }\n\n .bg-colorBgLayout {\n background-color: var(--oo-colorBgLayout);\n }\n\n .bg-gray-100 {\n background-color: #f5f5f5;\n }\n\n .bg-primary {\n background-color: rgb(var(--oo-colorPrimary));\n }\n\n .bg-primaryActive {\n background-color: rgb(var(--oo-colorPrimaryActive));\n }\n\n .object-cover {\n object-fit: cover;\n }\n\n .p-0 {\n padding: 0;\n }\n\n .p-1 {\n padding: var(--spacing);\n }\n\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n\n .px-0 {\n padding-inline: 0;\n }\n\n .px-1 {\n padding-inline: var(--spacing);\n }\n\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n\n .px-2\\.75 {\n padding-inline: calc(var(--spacing) * 2.75);\n }\n\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n\n .px-9 {\n padding-inline: calc(var(--spacing) * 9);\n }\n\n .px-10 {\n padding-inline: calc(var(--spacing) * 10);\n }\n\n .px-\\[11px\\] {\n padding-inline: 11px;\n }\n\n .py-1 {\n padding-block: var(--spacing);\n }\n\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n\n .py-2\\.5 {\n padding-block: calc(var(--spacing) * 2.5);\n }\n\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n\n .py-10 {\n padding-block: calc(var(--spacing) * 10);\n }\n\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n\n .text-center {\n text-align: center;\n }\n\n .font-sans {\n font-family: var(--font-sans);\n }\n\n .text-3xl {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n\n .text-\\[4rem\\] {\n font-size: 4rem;\n }\n\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n\n .tracking-tight {\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n\n .text-colorBgContainer {\n color: var(--oo-colorBgContainer);\n }\n\n .text-colorBgContainer\\! {\n color: var(--oo-colorBgContainer) !important;\n }\n\n .text-colorText {\n color: var(--oo-colorText);\n }\n\n .text-colorText\\! {\n color: var(--oo-colorText) !important;\n }\n\n .text-colorTextSecondary {\n color: var(--oo-colorTextSecondary);\n }\n\n .text-colorTextTertiary {\n color: var(--oo-colorTextTertiary);\n }\n\n .opacity-50 {\n opacity: .5;\n }\n\n .opacity-90 {\n opacity: .9;\n }\n\n .outline, .outline-1 {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n\n .outline-2 {\n outline-style: var(--tw-outline-style);\n outline-width: 2px;\n }\n\n .outline-blue-600 {\n outline-color: rgb(var(--oo-blue-6));\n }\n\n .outline-gray-300 {\n outline-color: #d9d9d9;\n }\n\n .filter {\n filter: var(--tw-blur, ) var(--tw-brightness, ) var(--tw-contrast, ) var(--tw-grayscale, ) var(--tw-hue-rotate, ) var(--tw-invert, ) var(--tw-saturate, ) var(--tw-sepia, ) var(--tw-drop-shadow, );\n }\n\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .duration-300 {\n --tw-duration: .3s;\n transition-duration: .3s;\n }\n\n .ease-in {\n --tw-ease: var(--ease-in);\n transition-timing-function: var(--ease-in);\n }\n\n @media (hover: hover) {\n .group-hover\\:animate-wiggle:is(:where(.group):hover *) {\n animation: var(--animate-wiggle);\n }\n\n .group-hover\\:opacity-100:is(:where(.group):hover *) {\n opacity: 1;\n }\n }\n\n .before\\:absolute:before {\n content: var(--tw-content);\n position: absolute;\n }\n\n .before\\:top-1\\/2:before {\n content: var(--tw-content);\n top: 50%;\n }\n\n .before\\:left-1\\/2:before {\n content: var(--tw-content);\n left: 50%;\n }\n\n .before\\:h-0:before {\n content: var(--tw-content);\n height: 0;\n }\n\n .before\\:w-0:before {\n content: var(--tw-content);\n width: 0;\n }\n\n .before\\:rounded-sm:before {\n content: var(--tw-content);\n border-radius: var(--radius-sm);\n }\n\n .before\\:opacity-0:before {\n content: var(--tw-content);\n opacity: 0;\n }\n\n .before\\:outline:before {\n content: var(--tw-content);\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n\n .before\\:outline-2:before {\n content: var(--tw-content);\n outline-style: var(--tw-outline-style);\n outline-width: 2px;\n }\n\n .before\\:outline-transparent:before {\n content: var(--tw-content);\n outline-color: #0000;\n }\n\n .before\\:transition-all:before {\n content: var(--tw-content);\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n\n .before\\:duration-300:before {\n content: var(--tw-content);\n --tw-duration: .3s;\n transition-duration: .3s;\n }\n\n .before\\:content-\\[\\'\\'\\]:before {\n --tw-content: \"\";\n content: var(--tw-content);\n }\n\n .last\\:mr-auto:last-child {\n margin-right: auto;\n }\n\n @media (hover: hover) {\n .hover\\:bg-gray-100:hover {\n background-color: #f5f5f5;\n }\n\n .hover\\:text-colorText:hover {\n color: var(--oo-colorText);\n }\n }\n\n .before\\:hover\\:top-0:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:top-0:before:hover {\n top: 0;\n }\n }\n\n .before\\:hover\\:left-0:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:left-0:before:hover {\n left: 0;\n }\n }\n\n .before\\:hover\\:h-full:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:h-full:before:hover {\n height: 100%;\n }\n }\n\n .before\\:hover\\:w-full:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:w-full:before:hover {\n width: 100%;\n }\n }\n\n .before\\:hover\\:p-1:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:p-1:before:hover {\n padding: var(--spacing);\n }\n }\n\n .before\\:hover\\:opacity-100:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:opacity-100:before:hover {\n opacity: 1;\n }\n }\n\n .before\\:hover\\:outline-blue-600:before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .before\\:hover\\:outline-blue-600:before:hover {\n outline-color: rgb(var(--oo-blue-6));\n }\n }\n\n @media (prefers-reduced-motion: no-preference) {\n .motion-safe\\:animate-bounce-in-down-out-up {\n animation: var(--animate-bounce-in-down-out-up);\n }\n }\n\n @media (min-width: 576px) {\n .sm\\:mx-auto {\n margin-inline: auto;\n }\n }\n\n @media (min-width: 768px) {\n .md\\:mr-2\\.5 {\n margin-right: calc(var(--spacing) * 2.5);\n }\n\n .md\\:block {\n display: block;\n }\n\n .md\\:w-3\\/12 {\n width: 25%;\n }\n\n .md\\:w-96 {\n width: calc(var(--spacing) * 96);\n }\n\n .md\\:max-w-md {\n max-width: var(--container-md);\n }\n\n .md\\:bg-colorBgLayout {\n background-color: var(--oo-colorBgLayout);\n }\n\n .md\\:px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n\n .md\\:pb-0 {\n padding-bottom: 0;\n }\n\n .md\\:text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n\n @media (min-width: 992px) {\n .lg\\:text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n }\n\n @media (min-width: 1200px) {\n .xl\\:w-2\\/12 {\n width: 16.6667%;\n }\n\n .xl\\:px-8 {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n\n .dark\\:bg-\\[\\#26313C\\]:where(.dark, .dark *) {\n background-color: #26313c;\n }\n\n .dark\\:bg-black:where(.dark, .dark *) {\n background-color: #000;\n }\n\n .dark\\:bg-gray-700:where(.dark, .dark *) {\n background-color: #434343;\n }\n\n .dark\\:outline-blue-700:where(.dark, .dark *) {\n outline-color: rgb(var(--oo-blue-7));\n }\n\n .dark\\:outline-gray-700:where(.dark, .dark *) {\n outline-color: #434343;\n }\n\n @media (hover: hover) {\n .dark\\:hover\\:bg-gray-700:where(.dark, .dark *):hover {\n background-color: #434343;\n }\n }\n\n .dark\\:before\\:hover\\:outline-blue-700:where(.dark, .dark *):before {\n content: var(--tw-content);\n }\n\n @media (hover: hover) {\n .dark\\:before\\:hover\\:outline-blue-700:where(.dark, .dark *):before:hover {\n outline-color: rgb(var(--oo-blue-7));\n }\n }\n\n .en-US\\:gap-y-3:where(:lang(en-US)) {\n row-gap: calc(var(--spacing) * 3);\n }\n\n .en-US\\:text-\\[9rem\\]:where(:lang(en-US)) {\n font-size: 9rem;\n }\n\n .zh-CN\\:hidden:where(:lang(zh-CN)) {\n display: none;\n }\n}\n\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes fade-out {\n from {\n opacity: 1;\n }\n\n to {\n opacity: 0;\n }\n}\n\n@keyframes slide-in {\n from {\n transform: translateX(-30px);\n }\n\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes slide-out {\n from {\n transform: translateX(0);\n }\n\n to {\n transform: translateX(30px);\n }\n}\n\n@keyframes slide-top-in {\n from {\n transform: translateY(-10%);\n }\n\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes slide-top-out {\n from {\n transform: translateY(0);\n }\n\n to {\n transform: translateY(-10%);\n }\n}\n\n@keyframes slide-bottom-in {\n from {\n transform: translateY(10%);\n }\n\n to {\n transform: translateY(0);\n }\n}\n\n@keyframes slide-bottom-out {\n from {\n transform: translateY(0);\n }\n\n to {\n transform: translateY(10%);\n }\n}\n\n@keyframes fade-slide {\n 0% {\n opacity: 0;\n transform: translate(-30px);\n }\n\n 50% {\n opacity: 1;\n }\n\n 100% {\n opacity: 0;\n transform: translate(30px);\n }\n}\n\n@keyframes fade-up {\n 0% {\n opacity: 0;\n transform: translateY(10%);\n }\n\n 50% {\n opacity: 1;\n }\n\n 100% {\n opacity: 0;\n transform: translateY(-10%);\n }\n}\n\n@keyframes fade-down {\n 0% {\n opacity: 0;\n transform: translateY(-10%);\n }\n\n 50% {\n opacity: 1;\n }\n\n 100% {\n opacity: 0;\n transform: translateY(10%);\n }\n}\n\n.fade-slide {\n animation: 3s linear infinite fade-slide;\n}\n\n.fade {\n animation: 3s linear infinite alternate fade-in;\n}\n\n.fade-up {\n animation: 3s infinite fade-up;\n}\n\n.fade-down {\n animation: 3s infinite fade-down;\n}\n\n@keyframes zoom-in {\n 0% {\n transform: scale(.8);\n }\n\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n@keyframes zoom-out {\n 0% {\n transform: scale(1);\n }\n\n 100% {\n opacity: 1;\n transform: scale(1.25);\n }\n}\n\n@keyframes fade-zoom {\n 0% {\n opacity: 0;\n transform: scale(.8);\n }\n\n 50% {\n opacity: 1;\n transform: scale(1);\n }\n\n 100% {\n opacity: 0;\n transform: scale(1.25);\n }\n}\n\n.fade-zoom {\n animation: 3s infinite fade-zoom;\n}\n\n.keepalive-fade.active {\n animation: .3s ease-in-out fade-in;\n}\n\n.keepalive-fade.inactive {\n animation: .3s ease-in-out fade-out;\n}\n\n.keepalive-fade-slide.active {\n animation: .3s ease-in-out fade-in, .3s ease-in-out slide-in;\n}\n\n.keepalive-fade-slide.inactive {\n animation: .3s ease-in-out fade-out, .3s ease-in-out slide-out;\n}\n\n.keepalive-fade-up.active {\n animation: .3s ease-in-out fade-in, .3s ease-in-out slide-bottom-in;\n}\n\n.keepalive-fade-up.inactive {\n animation: .3s ease-in-out fade-out, .3s ease-in-out slide-top-out;\n}\n\n.keepalive-fade-down.active {\n animation: .3s ease-in-out fade-in, .3s ease-in-out slide-top-in;\n}\n\n.keepalive-fade-down.inactive {\n animation: .3s ease-in-out fade-out, .3s ease-in-out slide-bottom-out;\n}\n\n.keepalive-fade-zoom.active {\n animation: .3s ease-in-out zoom-in, .3s ease-in-out zoom-in;\n}\n\n.keepalive-fade-zoom.inactive {\n animation: .3s ease-in-out zoom-out, .3s ease-in-out fade-out;\n}\n\n@property --tw-blur {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-invert {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-drop-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n\n@property --tw-scale-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n\n@property --tw-scale-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n\n@property --tw-scale-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n\n@property --tw-leading {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n\n@property --tw-duration {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-ease {\n syntax: \"*\";\n inherits: false\n}\n\n@property --tw-content {\n syntax: \"*\";\n inherits: false;\n initial-value: \"\";\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes wiggle {\n 0%, 100% {\n transform-origin: top;\n }\n\n 15% {\n transform: rotateZ(10deg);\n }\n\n 30% {\n transform: rotateZ(-10deg);\n }\n\n 45% {\n transform: rotateZ(5deg);\n }\n\n 60% {\n transform: rotateZ(-5deg);\n }\n\n 75% {\n transform: rotateZ(2deg);\n }\n}\n\n@keyframes bounce-in-down-out-up {\n 0% {\n transform: translateY(0);\n }\n\n 50% {\n transform: translateY(-20px);\n }\n\n 100% {\n transform: translateY(0);\n }\n}\n\n@layer properties {\n @supports (((-webkit-hyphens: none)) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) {\n *, :before, :after, ::backdrop {\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-outline-style: solid;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-content: \"\";\n }\n }\n}\n/*$vite$:1*/";
|
|
6
6
|
document.head.appendChild(s);
|
|
7
7
|
}
|
|
8
8
|
import ky from "ky";
|
|
@@ -10,11 +10,11 @@ import { create } from "zustand";
|
|
|
10
10
|
import { persist } from "zustand/middleware";
|
|
11
11
|
import { Link, Navigate, Outlet, createBrowserRouter, matchRoutes, useLocation, useMatches, useNavigate, useOutlet, useSearchParams } from "react-router";
|
|
12
12
|
import { ErrorBoundary, ErrorBoundary as ErrorBoundary$1 } from "react-error-boundary";
|
|
13
|
-
import { AntDesignOutlined, ApartmentOutlined, AppstoreOutlined, ArrowDownOutlined, ArrowLeftOutlined, ArrowUpOutlined, BellOutlined, CloseOutlined, CloudOutlined, ContainerOutlined, CopyOutlined, CopyrightOutlined, DownOutlined, EnterOutlined, EyeOutlined, FileTextOutlined, FullscreenExitOutlined, FullscreenOutlined, HomeOutlined, LoadingOutlined, LockOutlined, LogoutOutlined, MenuFoldOutlined, MenuOutlined, MenuUnfoldOutlined, NodeExpandOutlined, QuestionCircleOutlined, RedoOutlined, ReloadOutlined, RocketOutlined, SafetyOutlined, SearchOutlined, SettingOutlined, SisternodeOutlined, SubnodeOutlined, SwapOutlined, TeamOutlined, TranslationOutlined, UploadOutlined, UserOutlined, VerticalAlignBottomOutlined, VerticalAlignMiddleOutlined, VerticalAlignTopOutlined } from "@ant-design/icons";
|
|
13
|
+
import { AntDesignOutlined, ApartmentOutlined, AppstoreOutlined, ArrowDownOutlined, ArrowLeftOutlined, ArrowUpOutlined, BellOutlined, CloseOutlined, CloudOutlined, ContainerOutlined, CopyOutlined, CopyrightOutlined, DownOutlined, EnterOutlined, ExclamationCircleFilled, EyeOutlined, FileTextOutlined, FullscreenExitOutlined, FullscreenOutlined, HomeOutlined, LoadingOutlined, LockOutlined, LogoutOutlined, MenuFoldOutlined, MenuOutlined, MenuUnfoldOutlined, NodeExpandOutlined, QuestionCircleOutlined, RedoOutlined, ReloadOutlined, RocketOutlined, SafetyOutlined, SearchOutlined, SettingOutlined, SisternodeOutlined, SubnodeOutlined, SwapOutlined, TeamOutlined, TranslationOutlined, UploadOutlined, UserOutlined, VerticalAlignBottomOutlined, VerticalAlignMiddleOutlined, VerticalAlignTopOutlined } from "@ant-design/icons";
|
|
14
14
|
import { App, Avatar, Badge, Breadcrumb, Button, Checkbox, Col, ColorPicker, ConfigProvider, Divider, Drawer, Dropdown, Empty, FloatButton, Form, Grid, Input, InputNumber, List, Menu, Modal, Popover, Result, Row, Select, Slider, Space, Spin, Switch, Tabs, Tooltip, Tree, Typography, Upload, Watermark, message, notification, theme } from "antd";
|
|
15
|
-
import {
|
|
15
|
+
import { Children, Suspense, cloneElement, createElement, forwardRef, isValidElement, lazy, use, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
16
16
|
import { initReactI18next, useTranslation } from "react-i18next";
|
|
17
|
-
import { Fragment
|
|
17
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
18
18
|
import "antd/locale/en_US";
|
|
19
19
|
import "antd/locale/zh_CN";
|
|
20
20
|
import i18next from "i18next";
|
|
@@ -255,10 +255,10 @@ function getAppInfo() {
|
|
|
255
255
|
return {
|
|
256
256
|
"pkg": {
|
|
257
257
|
"name": "@oj-module/runtime",
|
|
258
|
-
"version": "0.1
|
|
258
|
+
"version": "0.2.1",
|
|
259
259
|
"license": "MIT"
|
|
260
260
|
},
|
|
261
|
-
"lastBuildTime": "2026-10-
|
|
261
|
+
"lastBuildTime": "2026-10-16 20:19:27"
|
|
262
262
|
};
|
|
263
263
|
}
|
|
264
264
|
var init_get_app_info = __esmMin((() => {}));
|
|
@@ -548,7 +548,7 @@ var init_authority$1 = __esmMin((() => {
|
|
|
548
548
|
privacyPolicy: privacyPolicy$1,
|
|
549
549
|
termsOfService: termsOfService$1
|
|
550
550
|
};
|
|
551
|
-
})), appLoading$1, back$1, backHome$1, warning$1, confirm$1, fail$1, success$2, deleteSuccess$1, confirmDelete$1, view$1, edit$1, error$61, index$1, upload$1, noData$1, action$1, add$1, addSuccess$1, backToHome$1, batchDelete$1, cancel$1, close$1, check$2, expandColumn$1, columnSetting$1, config$2, keywordSearch$1, modify$1, modifySuccess$1, pleaseCheckValue$1, refresh$1, reset$1, search$3, tip$1, tipMessage$1, trigger$1, update$1, updateSuccess$1, userCenter$1, name$1, id$1, status$1, enabled$1, deactivated$1, activated$1, disabled$1, createTime$1, updateTime$1, remark$1, demoOnly$1, pagination$1, expandAll$1, collapseAll$1, checkAll$1, cancelAll$1, common_default$1;
|
|
551
|
+
})), appLoading$1, back$1, backHome$1, warning$1, confirm$1, fail$1, success$2, deleteSuccess$1, confirmDelete$1, view$1, edit$1, error$61, index$1, upload$1, noData$1, action$1, add$1, addSuccess$1, backToHome$1, batchDelete$1, cancel$1, close$1, check$2, expandColumn$1, columnSetting$1, config$2, keywordSearch$1, modify$1, modifySuccess$1, pleaseCheckValue$1, refresh$1, reset$1, search$3, tip$1, tipMessage$1, trigger$1, update$1, updateSuccess$1, userCenter$1, name$1, id$1, status$1, enabled$1, deactivated$1, activated$1, disabled$1, createTime$1, updateTime$1, remark$1, demoOnly$1, pagination$1, expandAll$1, collapseAll$1, checkAll$1, cancelAll$1, total$1, save$1, deleteFailed$1, common_default$1;
|
|
552
552
|
var init_common$1 = __esmMin((() => {
|
|
553
553
|
appLoading$1 = "资源正在加载中...";
|
|
554
554
|
back$1 = "返回";
|
|
@@ -605,6 +605,9 @@ var init_common$1 = __esmMin((() => {
|
|
|
605
605
|
collapseAll$1 = "折叠所有";
|
|
606
606
|
checkAll$1 = "选择所有";
|
|
607
607
|
cancelAll$1 = "取消所有";
|
|
608
|
+
total$1 = "共 {total} 条";
|
|
609
|
+
save$1 = "保存";
|
|
610
|
+
deleteFailed$1 = "删除失败";
|
|
608
611
|
common_default$1 = {
|
|
609
612
|
appLoading: appLoading$1,
|
|
610
613
|
back: back$1,
|
|
@@ -664,7 +667,10 @@ var init_common$1 = __esmMin((() => {
|
|
|
664
667
|
expandAll: expandAll$1,
|
|
665
668
|
collapseAll: collapseAll$1,
|
|
666
669
|
checkAll: checkAll$1,
|
|
667
|
-
cancelAll: cancelAll$1
|
|
670
|
+
cancelAll: cancelAll$1,
|
|
671
|
+
total: total$1,
|
|
672
|
+
save: save$1,
|
|
673
|
+
deleteFailed: deleteFailed$1
|
|
668
674
|
};
|
|
669
675
|
})), notFoundSubTitle$1, unknownComponentTitle$1, unknownComponentSubTitle$1, pageErrorTitle$1, exception_default$1;
|
|
670
676
|
var init_exception$2 = __esmMin((() => {
|
|
@@ -982,7 +988,7 @@ var init_authority = __esmMin((() => {
|
|
|
982
988
|
privacyPolicy,
|
|
983
989
|
termsOfService
|
|
984
990
|
};
|
|
985
|
-
})), appLoading, back, backHome, warning, confirm, fail, success$1, deleteSuccess, confirmDelete, view, edit, error$60, index, upload, noData, action, addSuccess, backToHome, batchDelete, cancel, close, check$1, expandColumn, columnSetting, config$1, keywordSearch, modify, modifySuccess, pleaseCheckValue, refresh, reset, search$1, tipMessage, trigger, update, updateSuccess, userCenter, name, status, enabled, deactivated, activated, disabled, createTime, updateTime, remark, demoOnly, pagination, expandAll, collapseAll, checkAll, cancelAll, common_default;
|
|
991
|
+
})), appLoading, back, backHome, warning, confirm, fail, success$1, deleteSuccess, confirmDelete, view, edit, error$60, index, upload, noData, action, addSuccess, backToHome, batchDelete, cancel, close, check$1, expandColumn, columnSetting, config$1, keywordSearch, modify, modifySuccess, pleaseCheckValue, refresh, reset, search$1, tipMessage, trigger, update, updateSuccess, userCenter, name, status, enabled, deactivated, activated, disabled, createTime, updateTime, remark, demoOnly, pagination, expandAll, collapseAll, checkAll, cancelAll, total, save, deleteFailed, common_default;
|
|
986
992
|
var init_common = __esmMin((() => {
|
|
987
993
|
appLoading = "Loading Resources...";
|
|
988
994
|
back = "Back";
|
|
@@ -1036,6 +1042,9 @@ var init_common = __esmMin((() => {
|
|
|
1036
1042
|
collapseAll = "Collapse All";
|
|
1037
1043
|
checkAll = "Check All";
|
|
1038
1044
|
cancelAll = "Cancel All";
|
|
1045
|
+
total = "Total {total}";
|
|
1046
|
+
save = "Save";
|
|
1047
|
+
deleteFailed = "Delete failed";
|
|
1039
1048
|
common_default = {
|
|
1040
1049
|
appLoading,
|
|
1041
1050
|
back,
|
|
@@ -1095,7 +1104,10 @@ var init_common = __esmMin((() => {
|
|
|
1095
1104
|
expandAll,
|
|
1096
1105
|
collapseAll,
|
|
1097
1106
|
checkAll,
|
|
1098
|
-
cancelAll
|
|
1107
|
+
cancelAll,
|
|
1108
|
+
total,
|
|
1109
|
+
save,
|
|
1110
|
+
deleteFailed
|
|
1099
1111
|
};
|
|
1100
1112
|
})), notFoundSubTitle, unknownComponentTitle, unknownComponentSubTitle, pageErrorTitle, exception_default;
|
|
1101
1113
|
var init_exception$1 = __esmMin((() => {
|
|
@@ -1470,7 +1482,7 @@ function TermsOfService$1() {
|
|
|
1470
1482
|
className: "p-4 dark:bg-black",
|
|
1471
1483
|
children: /* @__PURE__ */ jsx(Typography.Title, {
|
|
1472
1484
|
level: 1,
|
|
1473
|
-
children: /* @__PURE__ */ jsx(Fragment
|
|
1485
|
+
children: /* @__PURE__ */ jsx(Fragment, { children: t("authority.termsOfService") })
|
|
1474
1486
|
})
|
|
1475
1487
|
});
|
|
1476
1488
|
}
|
|
@@ -2703,7 +2715,7 @@ function LayoutFooter({ className }) {
|
|
|
2703
2715
|
}), "\xA0"] }) : null,
|
|
2704
2716
|
"Copyright ©\xA0",
|
|
2705
2717
|
copyrightDate,
|
|
2706
|
-
copyrightDate ? /* @__PURE__ */ jsx(Fragment
|
|
2718
|
+
copyrightDate ? /* @__PURE__ */ jsx(Fragment, { children: "\xA0" }) : "",
|
|
2707
2719
|
companyName ? /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsxs("a", {
|
|
2708
2720
|
href: companyWebsite,
|
|
2709
2721
|
rel: "noreferrer noopener",
|
|
@@ -3175,34 +3187,6 @@ function unregisterAuthProvider(moduleName) {
|
|
|
3175
3187
|
var current$1;
|
|
3176
3188
|
var init_auth_provider = __esmMin((() => {}));
|
|
3177
3189
|
//#endregion
|
|
3178
|
-
//#region src/store/user.ts
|
|
3179
|
-
var initialState$4, useUserStore;
|
|
3180
|
-
var init_user = __esmMin((() => {
|
|
3181
|
-
init_user$1();
|
|
3182
|
-
init_auth_provider();
|
|
3183
|
-
initialState$4 = {
|
|
3184
|
-
id: "",
|
|
3185
|
-
avatar: "",
|
|
3186
|
-
username: "",
|
|
3187
|
-
email: "",
|
|
3188
|
-
phoneNumber: "",
|
|
3189
|
-
description: "",
|
|
3190
|
-
roles: []
|
|
3191
|
-
};
|
|
3192
|
-
useUserStore = create()((set) => ({
|
|
3193
|
-
...initialState$4,
|
|
3194
|
-
getUserInfo: async () => {
|
|
3195
|
-
const provider = getAuthProvider();
|
|
3196
|
-
const result = provider ? await provider.getUserInfo() : await fetchUserInfo();
|
|
3197
|
-
set({ ...result });
|
|
3198
|
-
return result;
|
|
3199
|
-
},
|
|
3200
|
-
reset: () => {
|
|
3201
|
-
return set({ ...initialState$4 });
|
|
3202
|
-
}
|
|
3203
|
-
}));
|
|
3204
|
-
}));
|
|
3205
|
-
//#endregion
|
|
3206
3190
|
//#region src/utils/is/index.ts
|
|
3207
3191
|
/**
|
|
3208
3192
|
* 判断给定的值是否为有限数字
|
|
@@ -3246,6 +3230,95 @@ function isUndefined(value) {
|
|
|
3246
3230
|
}
|
|
3247
3231
|
var init_is = __esmMin((() => {}));
|
|
3248
3232
|
//#endregion
|
|
3233
|
+
//#region src/utils/static-antd/index.ts
|
|
3234
|
+
/**
|
|
3235
|
+
* @see https://ant.design/components/app
|
|
3236
|
+
* @see https://ant.design/docs/blog/why-not-static
|
|
3237
|
+
*/
|
|
3238
|
+
function StaticAntd() {
|
|
3239
|
+
const staticFunctions = App.useApp();
|
|
3240
|
+
message$1 = staticFunctions.message;
|
|
3241
|
+
notification$1 = staticFunctions.notification;
|
|
3242
|
+
modal = staticFunctions.modal;
|
|
3243
|
+
window.$message = message$1;
|
|
3244
|
+
window.$modal = modal;
|
|
3245
|
+
window.$notification = notification$1;
|
|
3246
|
+
return null;
|
|
3247
|
+
}
|
|
3248
|
+
var message$1, notification$1, resetFns, modal;
|
|
3249
|
+
var init_static_antd = __esmMin((() => {
|
|
3250
|
+
message$1 = message;
|
|
3251
|
+
notification$1 = notification;
|
|
3252
|
+
({...resetFns} = Modal);
|
|
3253
|
+
modal = resetFns;
|
|
3254
|
+
}));
|
|
3255
|
+
//#endregion
|
|
3256
|
+
//#region src/utils/request/must-change.tsx
|
|
3257
|
+
function isMustChange(data) {
|
|
3258
|
+
if (isObject$1(data)) {
|
|
3259
|
+
const json = data;
|
|
3260
|
+
if (json.code === "must_change") return true;
|
|
3261
|
+
return (json.msg ?? "").includes("password change required");
|
|
3262
|
+
}
|
|
3263
|
+
return false;
|
|
3264
|
+
}
|
|
3265
|
+
function openMustChangeModal() {
|
|
3266
|
+
if (mustChangeModalOpen) return;
|
|
3267
|
+
if (location.pathname.endsWith("/change-password")) return;
|
|
3268
|
+
mustChangeModalOpen = true;
|
|
3269
|
+
modal.confirm({
|
|
3270
|
+
title: "需要修改密码",
|
|
3271
|
+
icon: /* @__PURE__ */ jsx(ExclamationCircleFilled, {}),
|
|
3272
|
+
content: "出于安全策略,当前账号要求首次登录后修改密码。请先完成密码修改,再继续使用系统功能。",
|
|
3273
|
+
okText: "去修改密码",
|
|
3274
|
+
closable: false,
|
|
3275
|
+
maskClosable: false,
|
|
3276
|
+
cancelButtonProps: { style: { display: "none" } },
|
|
3277
|
+
onOk: () => {
|
|
3278
|
+
window.location.href = `/change-password`;
|
|
3279
|
+
},
|
|
3280
|
+
afterClose: () => {
|
|
3281
|
+
mustChangeModalOpen = false;
|
|
3282
|
+
}
|
|
3283
|
+
});
|
|
3284
|
+
}
|
|
3285
|
+
var mustChangeModalOpen;
|
|
3286
|
+
var init_must_change = __esmMin((() => {
|
|
3287
|
+
init_is();
|
|
3288
|
+
init_static_antd();
|
|
3289
|
+
mustChangeModalOpen = false;
|
|
3290
|
+
}));
|
|
3291
|
+
//#endregion
|
|
3292
|
+
//#region src/store/user.ts
|
|
3293
|
+
var initialState$4, useUserStore;
|
|
3294
|
+
var init_user = __esmMin((() => {
|
|
3295
|
+
init_user$1();
|
|
3296
|
+
init_auth_provider();
|
|
3297
|
+
init_must_change();
|
|
3298
|
+
initialState$4 = {
|
|
3299
|
+
id: "",
|
|
3300
|
+
avatar: "",
|
|
3301
|
+
username: "",
|
|
3302
|
+
email: "",
|
|
3303
|
+
phoneNumber: "",
|
|
3304
|
+
description: "",
|
|
3305
|
+
roles: []
|
|
3306
|
+
};
|
|
3307
|
+
useUserStore = create()((set) => ({
|
|
3308
|
+
...initialState$4,
|
|
3309
|
+
getUserInfo: async () => {
|
|
3310
|
+
const provider = getAuthProvider();
|
|
3311
|
+
const result = provider ? await provider.getUserInfo() : await fetchUserInfo();
|
|
3312
|
+
set({ ...result });
|
|
3313
|
+
if (result.must_change === true || result.mustChange === true) openMustChangeModal();
|
|
3314
|
+
return result;
|
|
3315
|
+
},
|
|
3316
|
+
reset: () => {
|
|
3317
|
+
return set({ ...initialState$4 });
|
|
3318
|
+
}
|
|
3319
|
+
}));
|
|
3320
|
+
}));
|
|
3321
|
+
//#endregion
|
|
3249
3322
|
//#region src/utils/progress/index.tsx
|
|
3250
3323
|
var init_progress = __esmMin((() => {
|
|
3251
3324
|
NProgress.configure({
|
|
@@ -4100,7 +4173,7 @@ var init_layout_content = __esmMin((() => {
|
|
|
4100
4173
|
//#region src/layout/widgets/global-search/components/search-footer.tsx
|
|
4101
4174
|
function SearchFooter({ searchItems }) {
|
|
4102
4175
|
const { t } = useTranslation();
|
|
4103
|
-
return /* @__PURE__ */ jsxs(Fragment
|
|
4176
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Divider, { className: "mt-2 my-0" }), /* @__PURE__ */ jsxs("div", {
|
|
4104
4177
|
className: "px-4 py-2 flex items-center justify-between text-xs",
|
|
4105
4178
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
4106
4179
|
className: "flex items-center",
|
|
@@ -4146,7 +4219,7 @@ function SearchPanel({ menuItem, active, enter, setActiveKey, showCloseButton, r
|
|
|
4146
4219
|
function handleMouseEnter(key) {
|
|
4147
4220
|
setActiveKey(key);
|
|
4148
4221
|
}
|
|
4149
|
-
return /* @__PURE__ */ jsx(Fragment
|
|
4222
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("li", {
|
|
4150
4223
|
"data-search-item": menuItem.key,
|
|
4151
4224
|
onMouseEnter: () => {
|
|
4152
4225
|
handleMouseEnter(menuItem.key);
|
|
@@ -4301,7 +4374,7 @@ function GlobalSearch() {
|
|
|
4301
4374
|
useEffect(() => {
|
|
4302
4375
|
if (!keyword.length && Array.isArray(searchHistory)) setResultOptions(searchMenuList.filter((item) => searchHistory?.includes(item.key)));
|
|
4303
4376
|
}, [keyword, searchHistory]);
|
|
4304
|
-
return /* @__PURE__ */ jsxs(Fragment
|
|
4377
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
|
|
4305
4378
|
onClick: () => setOpen((open) => !open),
|
|
4306
4379
|
className: "group flex justify-center items-center gap-2 md:bg-colorBgLayout px-3 py-1.5 rounded-full cursor-pointer text-colorTextSecondary hover:text-colorText md:mr-2.5",
|
|
4307
4380
|
children: [
|
|
@@ -4322,7 +4395,7 @@ function GlobalSearch() {
|
|
|
4322
4395
|
if (open) inputRef.current?.focus();
|
|
4323
4396
|
},
|
|
4324
4397
|
keyboard: true,
|
|
4325
|
-
title: /* @__PURE__ */ jsxs(Fragment
|
|
4398
|
+
title: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
4326
4399
|
className: "mr-17",
|
|
4327
4400
|
children: /* @__PURE__ */ jsx(Input, {
|
|
4328
4401
|
ref: inputRef,
|
|
@@ -4618,7 +4691,7 @@ function Animation() {
|
|
|
4618
4691
|
function handleClick(value) {
|
|
4619
4692
|
setPreferences("transitionName", value);
|
|
4620
4693
|
}
|
|
4621
|
-
return /* @__PURE__ */ jsxs(Fragment
|
|
4694
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4622
4695
|
/* @__PURE__ */ jsx(SwitchItem, {
|
|
4623
4696
|
name: "transitionProgress",
|
|
4624
4697
|
checked: transitionProgress,
|
|
@@ -4698,7 +4771,7 @@ var init_text_input = __esmMin((() => {}));
|
|
|
4698
4771
|
function PreferencesFooter() {
|
|
4699
4772
|
const { t } = useTranslation();
|
|
4700
4773
|
const { enableFooter, fixedFooter, companyName, companyWebsite, copyrightDate, ICPNumber, ICPLink, setPreferences } = usePreferencesStore();
|
|
4701
|
-
return /* @__PURE__ */ jsxs(Fragment
|
|
4774
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4702
4775
|
/* @__PURE__ */ jsx(SwitchItem, {
|
|
4703
4776
|
name: "enableFooter",
|
|
4704
4777
|
checked: enableFooter,
|
|
@@ -4774,7 +4847,7 @@ var init_select_item = __esmMin((() => {
|
|
|
4774
4847
|
function General() {
|
|
4775
4848
|
const { t } = useTranslation();
|
|
4776
4849
|
const { language, enableDynamicTitle, watermark, watermarkContent, enableCheckUpdates, enableBackTopButton, setPreferences } = usePreferencesStore();
|
|
4777
|
-
return /* @__PURE__ */ jsxs(Fragment
|
|
4850
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4778
4851
|
/* @__PURE__ */ jsx(SelectItem, {
|
|
4779
4852
|
name: "language",
|
|
4780
4853
|
value: language,
|
|
@@ -4856,7 +4929,7 @@ function PreferencesLayout() {
|
|
|
4856
4929
|
function handleClick(value) {
|
|
4857
4930
|
setPreferences("navigationStyle", value);
|
|
4858
4931
|
}
|
|
4859
|
-
return /* @__PURE__ */ jsx(Fragment
|
|
4932
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("ul", {
|
|
4860
4933
|
className: "w-full flex flex-wrap justify-between gap-1 en-US:gap-y-3 px-0 list-none",
|
|
4861
4934
|
children: navigationPreset.map((item) => /* @__PURE__ */ jsx("li", {
|
|
4862
4935
|
onClick: () => handleClick(item.type),
|
|
@@ -4941,7 +5014,7 @@ function Sidebar() {
|
|
|
4941
5014
|
const handleChange = (name, value) => {
|
|
4942
5015
|
setPreferences(name, value);
|
|
4943
5016
|
};
|
|
4944
|
-
return /* @__PURE__ */ jsxs(Fragment
|
|
5017
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4945
5018
|
sidebarPreset.map((item) => {
|
|
4946
5019
|
return /* @__PURE__ */ jsx(SwitchItem, {
|
|
4947
5020
|
name: item.name,
|
|
@@ -5015,7 +5088,7 @@ function Tabbar() {
|
|
|
5015
5088
|
value: "brisk"
|
|
5016
5089
|
}
|
|
5017
5090
|
];
|
|
5018
|
-
return /* @__PURE__ */ jsxs(Fragment
|
|
5091
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5019
5092
|
/* @__PURE__ */ jsx(SwitchItem, {
|
|
5020
5093
|
name: "tabbarEnable",
|
|
5021
5094
|
checked: tabbarEnable,
|
|
@@ -5119,7 +5192,7 @@ function BuiltinTheme() {
|
|
|
5119
5192
|
color: "#13c2c2"
|
|
5120
5193
|
},
|
|
5121
5194
|
{
|
|
5122
|
-
label: /* @__PURE__ */ jsxs(Fragment
|
|
5195
|
+
label: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5123
5196
|
/* @__PURE__ */ jsx("span", { children: t("preferences.theme.builtin.blue") }),
|
|
5124
5197
|
/* @__PURE__ */ jsx("br", { className: "zh-CN:hidden" }),
|
|
5125
5198
|
/* @__PURE__ */ jsxs("span", { children: [
|
|
@@ -5171,7 +5244,7 @@ function BuiltinTheme() {
|
|
|
5171
5244
|
themeColorPrimary: builtinThemePresets.find((item) => item.value === value)?.color
|
|
5172
5245
|
});
|
|
5173
5246
|
}
|
|
5174
|
-
return /* @__PURE__ */ jsx(Fragment
|
|
5247
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("ul", {
|
|
5175
5248
|
className: "flex justify-between flex-wrap w-full gap-3 p-0 m-0 list-none",
|
|
5176
5249
|
children: builtinThemePresets.map((item) => {
|
|
5177
5250
|
const innerBlock = /* @__PURE__ */ jsx("li", {
|
|
@@ -5241,7 +5314,7 @@ function SiteTheme() {
|
|
|
5241
5314
|
const handleChange = (newValue) => {
|
|
5242
5315
|
setPreferences("themeRadius", newValue);
|
|
5243
5316
|
};
|
|
5244
|
-
return /* @__PURE__ */ jsxs(Fragment
|
|
5317
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5245
5318
|
/* @__PURE__ */ jsx("ul", {
|
|
5246
5319
|
className: "flex justify-between w-full gap-3 p-0 m-0 list-none",
|
|
5247
5320
|
children: themePresets.map((item) => /* @__PURE__ */ jsx("li", {
|
|
@@ -5349,7 +5422,7 @@ function Preferences({ ...restProps }) {
|
|
|
5349
5422
|
content: t("preferences.copyPreferencesSuccess")
|
|
5350
5423
|
});
|
|
5351
5424
|
};
|
|
5352
|
-
return /* @__PURE__ */ jsxs(Fragment
|
|
5425
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(BasicButton, {
|
|
5353
5426
|
type: "text",
|
|
5354
5427
|
...restProps,
|
|
5355
5428
|
onClick: (e) => {
|
|
@@ -5592,10 +5665,17 @@ function LayoutHeader({ className, children }) {
|
|
|
5592
5665
|
const { isTopNav, isMixedNav } = useLayout();
|
|
5593
5666
|
const slotActions = useSlotNodes("header-actions");
|
|
5594
5667
|
const isFixedDarkTheme = isDark || sidebarTheme === "dark" && (isMixedNav || isTopNav);
|
|
5668
|
+
const buttonProps = isMobile ? {
|
|
5669
|
+
size: "middle",
|
|
5670
|
+
className: "px-2"
|
|
5671
|
+
} : {
|
|
5672
|
+
size: "large",
|
|
5673
|
+
className: "px-[11px]"
|
|
5674
|
+
};
|
|
5595
5675
|
return /* @__PURE__ */ jsx(ConfigProvider, {
|
|
5596
5676
|
theme: { algorithm: isFixedDarkTheme ? theme.darkAlgorithm : theme.defaultAlgorithm },
|
|
5597
5677
|
children: /* @__PURE__ */ jsxs("header", {
|
|
5598
|
-
className: cn("flex-shrink-0 flex
|
|
5678
|
+
className: cn("flex-shrink-0 flex justify-between items-center transition-all px-2 md:px-4", isMobile ? "gap-2" : "gap-5", { "overflow-hidden": isMaximize }, className),
|
|
5599
5679
|
style: {
|
|
5600
5680
|
background: isFixedDarkTheme ? Menu?.darkItemBg : Menu?.itemBg,
|
|
5601
5681
|
height: isMaximize ? 0 : 48
|
|
@@ -5612,9 +5692,9 @@ function LayoutHeader({ className, children }) {
|
|
|
5612
5692
|
children
|
|
5613
5693
|
}),
|
|
5614
5694
|
/* @__PURE__ */ jsxs("div", {
|
|
5615
|
-
className: "flex items-center",
|
|
5695
|
+
className: cn("flex items-center min-w-0", isMobile && "overflow-x-auto"),
|
|
5616
5696
|
children: [
|
|
5617
|
-
|
|
5697
|
+
Children.toArray(slotActions),
|
|
5618
5698
|
/* @__PURE__ */ jsx(GlobalSearch, {}),
|
|
5619
5699
|
/* @__PURE__ */ jsx(Preferences, { ...buttonProps }),
|
|
5620
5700
|
/* @__PURE__ */ jsx(ThemeButton, { ...buttonProps }),
|
|
@@ -5631,7 +5711,6 @@ function LayoutHeader({ className, children }) {
|
|
|
5631
5711
|
})
|
|
5632
5712
|
});
|
|
5633
5713
|
}
|
|
5634
|
-
var buttonProps;
|
|
5635
5714
|
var init_layout_header = __esmMin((() => {
|
|
5636
5715
|
init_use_device_type();
|
|
5637
5716
|
init_use_preferences();
|
|
@@ -5647,10 +5726,6 @@ var init_layout_header = __esmMin((() => {
|
|
|
5647
5726
|
init_language_button();
|
|
5648
5727
|
init_theme_button();
|
|
5649
5728
|
init_user_menu();
|
|
5650
|
-
buttonProps = {
|
|
5651
|
-
size: "large",
|
|
5652
|
-
className: "px-[11px]"
|
|
5653
|
-
};
|
|
5654
5729
|
}));
|
|
5655
5730
|
//#endregion
|
|
5656
5731
|
//#region src/router/utils/remove-trailing-slash.ts
|
|
@@ -6873,7 +6948,7 @@ function ContainerLayout() {
|
|
|
6873
6948
|
style: { paddingLeft: computedSidebarWidth },
|
|
6874
6949
|
className: cn("transition-all flex flex-col h-screen"),
|
|
6875
6950
|
children: [
|
|
6876
|
-
/* @__PURE__ */ jsx(LayoutHeader, { children: isTopNav || isMixedNav ? /* @__PURE__ */ jsxs(Fragment
|
|
6951
|
+
/* @__PURE__ */ jsx(LayoutHeader, { children: isTopNav || isMixedNav ? /* @__PURE__ */ jsxs(Fragment, { children: [isTopNav ? /* @__PURE__ */ jsx(Logo, {
|
|
6877
6952
|
sidebarCollapsed: false,
|
|
6878
6953
|
className: "mr-8"
|
|
6879
6954
|
}) : null, /* @__PURE__ */ jsx(LayoutMenu, {
|
|
@@ -8406,29 +8481,6 @@ var init_auth = __esmMin((() => {
|
|
|
8406
8481
|
}), { name: getAppNamespace("access-token") }));
|
|
8407
8482
|
}));
|
|
8408
8483
|
//#endregion
|
|
8409
|
-
//#region src/utils/static-antd/index.ts
|
|
8410
|
-
/**
|
|
8411
|
-
* @see https://ant.design/components/app
|
|
8412
|
-
* @see https://ant.design/docs/blog/why-not-static
|
|
8413
|
-
*/
|
|
8414
|
-
function StaticAntd() {
|
|
8415
|
-
const staticFunctions = App.useApp();
|
|
8416
|
-
message$1 = staticFunctions.message;
|
|
8417
|
-
notification$1 = staticFunctions.notification;
|
|
8418
|
-
modal = staticFunctions.modal;
|
|
8419
|
-
window.$message = message$1;
|
|
8420
|
-
window.$modal = modal;
|
|
8421
|
-
window.$notification = notification$1;
|
|
8422
|
-
return null;
|
|
8423
|
-
}
|
|
8424
|
-
var message$1, notification$1, resetFns, modal;
|
|
8425
|
-
var init_static_antd = __esmMin((() => {
|
|
8426
|
-
message$1 = message;
|
|
8427
|
-
notification$1 = notification;
|
|
8428
|
-
({...resetFns} = Modal);
|
|
8429
|
-
modal = resetFns;
|
|
8430
|
-
}));
|
|
8431
|
-
//#endregion
|
|
8432
8484
|
//#region src/utils/request/error-response.ts
|
|
8433
8485
|
/**
|
|
8434
8486
|
* 处理错误响应
|
|
@@ -8448,6 +8500,10 @@ async function handleErrorResponse(response) {
|
|
|
8448
8500
|
data = JSON.parse(text);
|
|
8449
8501
|
} catch {}
|
|
8450
8502
|
if (isObject$1(data)) {
|
|
8503
|
+
if (isMustChange(data)) {
|
|
8504
|
+
openMustChangeModal();
|
|
8505
|
+
return response;
|
|
8506
|
+
}
|
|
8451
8507
|
const json = data;
|
|
8452
8508
|
message$1.error(json.msg || response.statusText);
|
|
8453
8509
|
} else message$1.error(response.statusText);
|
|
@@ -8456,6 +8512,7 @@ async function handleErrorResponse(response) {
|
|
|
8456
8512
|
var init_error_response = __esmMin((() => {
|
|
8457
8513
|
init_is();
|
|
8458
8514
|
init_static_antd();
|
|
8515
|
+
init_must_change();
|
|
8459
8516
|
}));
|
|
8460
8517
|
//#endregion
|
|
8461
8518
|
//#region src/utils/request/global-progress.ts
|
|
@@ -8691,6 +8748,86 @@ var init_request = __esmMin((() => {
|
|
|
8691
8748
|
request = ky.create(defaultConfig);
|
|
8692
8749
|
}));
|
|
8693
8750
|
//#endregion
|
|
8751
|
+
//#region src/api/rbac/index.ts
|
|
8752
|
+
init_request();
|
|
8753
|
+
function get(url) {
|
|
8754
|
+
return request.get(url).json().then((env) => env.data);
|
|
8755
|
+
}
|
|
8756
|
+
function post(url, json) {
|
|
8757
|
+
return request.post(url, { json }).json().then((env) => env.data);
|
|
8758
|
+
}
|
|
8759
|
+
function put(url, json) {
|
|
8760
|
+
return request.put(url, { json }).json().then((env) => env.data);
|
|
8761
|
+
}
|
|
8762
|
+
function del(url) {
|
|
8763
|
+
return request.delete(url).json().then((env) => env.data);
|
|
8764
|
+
}
|
|
8765
|
+
var fetchRbacRoleList = () => get("system/roles");
|
|
8766
|
+
var fetchRbacPermissionList = () => get("system/permissions");
|
|
8767
|
+
var fetchRbacCreateRole = (body) => post("system/roles", body);
|
|
8768
|
+
var fetchRbacUpdateBindings = (name, permissions) => put(`system/roles/bindings?name=${encodeURIComponent(name)}`, { permissions });
|
|
8769
|
+
var fetchRbacDeleteRole = (name) => del(`system/roles?name=${encodeURIComponent(name)}`);
|
|
8770
|
+
var fetchRbacUserList = () => get("system/users");
|
|
8771
|
+
var fetchRbacCreateUser = (body) => post("system/users", body);
|
|
8772
|
+
var fetchRbacUpdateUserRoles = (uid, roles) => put(`system/users/roles?uid=${uid}`, { roles });
|
|
8773
|
+
var fetchRbacAdminResetPassword = (uid, password) => put(`system/users/password?uid=${uid}`, { password });
|
|
8774
|
+
var fetchRbacSetForbidden = (uid, forbidden) => put(`system/users/forbidden?uid=${uid}`, { forbidden });
|
|
8775
|
+
function fetchRbacOplog(query) {
|
|
8776
|
+
const sp = new URLSearchParams();
|
|
8777
|
+
for (const [k, v] of Object.entries(query)) if (v != null && v !== "") sp.set(k, String(v));
|
|
8778
|
+
return get(`system/oplog?${sp.toString()}`);
|
|
8779
|
+
}
|
|
8780
|
+
var fetchRbacSettings = () => get("system/settings");
|
|
8781
|
+
var fetchRbacUpdateSetting = (key, value) => put("system/settings", {
|
|
8782
|
+
key,
|
|
8783
|
+
value
|
|
8784
|
+
});
|
|
8785
|
+
function fetchRbacContacts(keyword, limit) {
|
|
8786
|
+
return get(`_platform/contacts?keyword=${encodeURIComponent(keyword)}${limit ? `&limit=${limit}` : ""}`);
|
|
8787
|
+
}
|
|
8788
|
+
var fetchRbacContactDetail = (id) => get(`_platform/contacts/detail?id=${id}`);
|
|
8789
|
+
var fetchLoginMethods = () => get("system/login-methods");
|
|
8790
|
+
var fetchChangePassword = (body) => put("auth/password", body);
|
|
8791
|
+
var fetchLdapLogin = (body) => post("auth/ldap-login", body);
|
|
8792
|
+
//#endregion
|
|
8793
|
+
//#region src/api/rbac/helpers.ts
|
|
8794
|
+
/** 展示名:title 缺省回落机器名。 */
|
|
8795
|
+
function roleLabel(role) {
|
|
8796
|
+
return role.title || role.name;
|
|
8797
|
+
}
|
|
8798
|
+
/** AC1-19:builtin 角色(superadmin/admin/editor/viewer)无绑定编辑入口。 */
|
|
8799
|
+
function canEditRoleBindings(role) {
|
|
8800
|
+
return !role.builtin;
|
|
8801
|
+
}
|
|
8802
|
+
/** AC1-19/20:删除入口——非 builtin 且当前无持有者(服务端 409 仍是权威判据)。 */
|
|
8803
|
+
function canDeleteRole(role) {
|
|
8804
|
+
return !role.builtin && role.holders === 0;
|
|
8805
|
+
}
|
|
8806
|
+
/** AC1-8:actor 能否把 roleName 分配给用户。 */
|
|
8807
|
+
function canAssignRole(actorRoles, roleName) {
|
|
8808
|
+
if (actorRoles.includes("superadmin")) return true;
|
|
8809
|
+
if (actorRoles.includes("admin")) return roleName !== "superadmin" && roleName !== "admin";
|
|
8810
|
+
return false;
|
|
8811
|
+
}
|
|
8812
|
+
/** 绑定编辑 diff(审计明细同款语义,AC1-28)。 */
|
|
8813
|
+
function bindingDiff(before, after) {
|
|
8814
|
+
const b = new Set(before);
|
|
8815
|
+
const a = new Set(after);
|
|
8816
|
+
return {
|
|
8817
|
+
added: after.filter((x) => !b.has(x)),
|
|
8818
|
+
removed: before.filter((x) => !a.has(x))
|
|
8819
|
+
};
|
|
8820
|
+
}
|
|
8821
|
+
/** 按 module 分组(角色下拉/权限勾选的分组展示)。 */
|
|
8822
|
+
function groupByModule(items) {
|
|
8823
|
+
const map = /* @__PURE__ */ new Map();
|
|
8824
|
+
for (const item of items) (map.get(item.module) ?? map.set(item.module, []).get(item.module)).push(item);
|
|
8825
|
+
return [...map.entries()].map(([module, items]) => ({
|
|
8826
|
+
module,
|
|
8827
|
+
items
|
|
8828
|
+
}));
|
|
8829
|
+
}
|
|
8830
|
+
//#endregion
|
|
8694
8831
|
//#region src/api/system/menu/index.ts
|
|
8695
8832
|
init_api_provider();
|
|
8696
8833
|
init_request();
|
|
@@ -9094,7 +9231,7 @@ function FormAvatarItem({ value, onChange }) {
|
|
|
9094
9231
|
const uploadProvider = getUploadApiProvider();
|
|
9095
9232
|
const uploadAction = uploadProvider?.action ?? `/api/upload`;
|
|
9096
9233
|
const uploadHeaders = uploadProvider?.headers() ?? { authorization: "authorization-text" };
|
|
9097
|
-
return /* @__PURE__ */ jsx(Fragment
|
|
9234
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", {
|
|
9098
9235
|
className: "flex items-center gap-5",
|
|
9099
9236
|
children: [/* @__PURE__ */ jsx(Avatar, {
|
|
9100
9237
|
size: 100,
|
|
@@ -9186,7 +9323,7 @@ function FormTreeItem({ treeData, value, onChange }) {
|
|
|
9186
9323
|
if (checkedOptions.includes("checkAll")) onChange?.(flattenTreeData.map((item) => item.id));
|
|
9187
9324
|
else onChange?.([]);
|
|
9188
9325
|
}, [checkedOptions, flattenTreeData]);
|
|
9189
|
-
return /* @__PURE__ */ jsxs(Fragment
|
|
9326
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
9190
9327
|
/* @__PURE__ */ jsx(Search, {
|
|
9191
9328
|
className: "mb-3",
|
|
9192
9329
|
placeholder: t("common.keywordSearch"),
|
|
@@ -27463,4 +27600,4 @@ init_ri();
|
|
|
27463
27600
|
init_menu_icons();
|
|
27464
27601
|
init_tree();
|
|
27465
27602
|
//#endregion
|
|
27466
|
-
export { AccessControl, AccessControlRoles, AntdApp, BasicButton, BasicContent, BasicTable, EmbeddedIcon, ErrorBoundary, ExternalIcon, FormAvatarItem, FormTreeItem, Iframe, LayoutCenterIcon, LayoutEffects, LayoutLeftIcon, LayoutRightIcon, MixedNavigationIcon, OutsidePageIcon, PageError, ProfileCardIcon, RiAccountCircleLine, RiContrastFill, RiFullscreenExitLine, RiFullscreenLine, RiMailCheckLine, RiMoonIcon, RiReactjsLine, RiSunIcon, RiUserSettingsLine, ServerErrorIcon, SideNavigationIcon, TopNavigationIcon, TwoColumnNavigationIcon, accessControlCodes, defineModule, fetchAddMenuItem, fetchAddRoleItem, fetchAsyncRoutes, fetchDeleteMenuItem, fetchDeleteRoleItem, fetchLogin, fetchLogout, fetchMenuByRoleId, fetchMenuList, fetchRefreshToken, fetchRoleList, fetchRoleMenu, fetchUpdateMenuItem, fetchUpdateRoleItem, fetchUserInfo, filterTree, getAllExpandedKeys, getAppInfo, getBooleanOptions, getModule, getModules, getRedirectPath, getRegisteredApiPrefix, getRegisteredStore, getRoutes, getYesNoOptions, handleTree, loadAll, mapTree, menuIcons, notify, permissionPrefix, setupI18n, traverseTreeValues, unloadModule, useAccess, useAuthStore, usePreferences, useSlotNodes, useTabKey, useTabsStore, useUserStore, external_exports as z };
|
|
27603
|
+
export { AccessControl, AccessControlRoles, AntdApp, BasicButton, BasicContent, BasicTable, EmbeddedIcon, ErrorBoundary, ExternalIcon, FormAvatarItem, FormTreeItem, Iframe, LayoutCenterIcon, LayoutEffects, LayoutLeftIcon, LayoutRightIcon, MixedNavigationIcon, OutsidePageIcon, PageError, ProfileCardIcon, RiAccountCircleLine, RiContrastFill, RiFullscreenExitLine, RiFullscreenLine, RiMailCheckLine, RiMoonIcon, RiReactjsLine, RiSunIcon, RiUserSettingsLine, ServerErrorIcon, SideNavigationIcon, TopNavigationIcon, TwoColumnNavigationIcon, accessControlCodes, bindingDiff, canAssignRole, canDeleteRole, canEditRoleBindings, defineModule, fetchAddMenuItem, fetchAddRoleItem, fetchAsyncRoutes, fetchChangePassword, fetchDeleteMenuItem, fetchDeleteRoleItem, fetchLdapLogin, fetchLogin, fetchLoginMethods, fetchLogout, fetchMenuByRoleId, fetchMenuList, fetchRbacAdminResetPassword, fetchRbacContactDetail, fetchRbacContacts, fetchRbacCreateRole, fetchRbacCreateUser, fetchRbacDeleteRole, fetchRbacOplog, fetchRbacPermissionList, fetchRbacRoleList, fetchRbacSetForbidden, fetchRbacSettings, fetchRbacUpdateBindings, fetchRbacUpdateSetting, fetchRbacUpdateUserRoles, fetchRbacUserList, fetchRefreshToken, fetchRoleList, fetchRoleMenu, fetchUpdateMenuItem, fetchUpdateRoleItem, fetchUserInfo, filterTree, getAllExpandedKeys, getAppInfo, getBooleanOptions, getModule, getModules, getRedirectPath, getRegisteredApiPrefix, getRegisteredStore, getRoutes, getYesNoOptions, groupByModule, handleTree, loadAll, mapTree, menuIcons, notify, permissionPrefix, roleLabel, setupI18n, traverseTreeValues, unloadModule, useAccess, useAuthStore, usePreferences, useSlotNodes, useTabKey, useTabsStore, useUserStore, external_exports as z };
|