diff --git a/backend/src/features/auth/webAuthnService.ts b/backend/src/features/auth/webAuthnService.ts index b96aca6..a2deb9a 100644 --- a/backend/src/features/auth/webAuthnService.ts +++ b/backend/src/features/auth/webAuthnService.ts @@ -1,7 +1,7 @@ import { EnvBindings, AppError } from '@/app/config'; import { generateSecureJWT, generateDeviceKey } from '@/shared/utils/crypto'; import * as schema from '@/shared/db/schema'; -import { eq, desc, and } from 'drizzle-orm'; +import { eq, desc } from 'drizzle-orm'; import { generateRegistrationOptions, verifyRegistrationResponse, diff --git a/frontend/src/app/app.vue b/frontend/src/app/app.vue index c9a4dde..0c23112 100644 --- a/frontend/src/app/app.vue +++ b/frontend/src/app/app.vue @@ -1,9 +1,9 @@ + + diff --git a/frontend/src/app/layouts/mainLayout.vue b/frontend/src/app/layouts/mainLayout.vue new file mode 100644 index 0000000..f72f630 --- /dev/null +++ b/frontend/src/app/layouts/mainLayout.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/frontend/src/app/styles/modules/components/migration.css b/frontend/src/app/styles/modules/components/migration.css index fe60783..4c91191 100644 --- a/frontend/src/app/styles/modules/components/migration.css +++ b/frontend/src/app/styles/modules/components/migration.css @@ -125,48 +125,86 @@ margin-bottom: 20px; } -.migration-import-tips { +/* 生态支持矩阵 (Ecosystem Grid) */ +.migration-ecosystem { + margin-top: 30px; text-align: left; - margin-top: 25px; - background-color: var(--el-fill-color-lighter); - padding: 0px 20px 20px 20px; - border-radius: 8px; - border: 1px dashed var(--el-border-color); } -.migration-format-groups { - display: flex; - flex-direction: column; - gap: 15px; -} - -.migration-format-group h4 { - margin: 0 0 10px 0; +.ecosystem-title { + font-size: 16px; color: var(--el-text-color-primary); - font-size: 14px; + margin: 20px 0; font-weight: 600; } -.migration-tags { +.ecosystem-groups { + display: flex; + flex-direction: column; + gap: 25px; +} + +.ecosystem-group { + display: flex; + flex-direction: column; + gap: 12px; +} + +.group-title { + margin: 0; + font-size: 15px; + color: var(--el-text-color-regular); + font-weight: 600; +} + +.ecosystem-grid { display: flex; flex-wrap: wrap; - gap: 8px; - margin-bottom: 8px; + gap: 12px 24px; } -.migration-tags .el-tag { - padding: 4px 8px; - height: auto; - color: var(--el-text-color-regular); - cursor: default; - border-color: transparent; - background-color: var(--el-fill-color-light); -} - -.migration-tags .el-tag .el-icon { +.ecosystem-item { display: inline-flex; - flex-wrap: wrap; - margin-right: 4px; + align-items: center; + gap: 8px; + font-size: 14px; + color: var(--el-text-color-primary); + line-height: 1.2; +} + +.ecosystem-item .el-icon, +.ecosystem-item svg { + font-size: 18px; +} + +/* 疑难解答折叠面板 */ +/* 疑难解答折叠面板 */ +.ecosystem-collapse { + border: none; + background-color: transparent; +} + +.ecosystem-collapse :deep(.el-collapse), +.ecosystem-collapse :deep(.el-collapse-item__header), +.ecosystem-collapse :deep(.el-collapse-item__wrap) { + border: none; +} + +.ecosystem-collapse :deep(.el-collapse-item__header) { + background-color: transparent; + padding: 0; + font-size: 13px; + color: var(--el-text-color-regular); + height: 32px; + line-height: 32px; +} + +.ecosystem-collapse :deep(.el-collapse-item__wrap) { + background-color: transparent; +} + +.ecosystem-collapse :deep(.el-collapse-item__content) { + padding: 10px 0; } .migration-ga-tip { @@ -174,7 +212,7 @@ padding: 10px 12px; border-radius: 6px; border-left: 3px solid var(--el-color-primary); - margin-top: 10px; + margin-top: 5px; } .migration-ga-tip span { @@ -197,7 +235,7 @@ padding: 10px 12px; border-radius: 6px; border-left: 3px solid var(--el-color-success); - margin-top: 10px; + margin-top: 15px; } .migration-ms-tip span { diff --git a/frontend/src/app/styles/modules/layout/containers.css b/frontend/src/app/styles/modules/layout/containers.css index d78f65f..6f3c615 100644 --- a/frontend/src/app/styles/modules/layout/containers.css +++ b/frontend/src/app/styles/modules/layout/containers.css @@ -27,6 +27,47 @@ main { } } +/* App Shell (Global Loading Overlay) */ +.global-app-shell { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 9999; + background-color: var(--el-bg-color-page); + display: flex; + justify-content: center; + align-items: center; + transition: opacity 0.3s ease-in-out; +} + +.shell-content { + display: flex; + flex-direction: column; + align-items: center; + gap: 15px; +} + +.shell-spinner { + animation: loading-rotate 2s linear infinite; +} + +/* Layout Wrappers (Main / Blank) */ +.layout-main, +.layout-blank { + display: flex; + flex-direction: column; + min-height: 100vh; +} + +.layout-main-content, +.layout-blank-content { + flex: 1; + display: flex; + flex-direction: column; +} + /* Home.vue */ .home-container { height: 100%; diff --git a/frontend/src/app/styles/modules/layout/header.css b/frontend/src/app/styles/modules/layout/header.css index 5fdd46a..2749259 100644 --- a/frontend/src/app/styles/modules/layout/header.css +++ b/frontend/src/app/styles/modules/layout/header.css @@ -28,7 +28,28 @@ } .user-actions { - gap: 20px; + display: flex; + align-items: center; + gap: 12px; +} + +.guest-actions { + display: flex; + align-items: center; + gap: 5px; +} + +.header-action-btn.el-button.is-circle { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); + background: var(--el-bg-color); + border: 1px solid var(--el-border-color-lighter); + color: var(--el-text-color-regular); +} + +.header-action-btn.el-button.is-circle:hover { + color: var(--el-color-primary); + border-color: var(--el-color-primary-light-5); + background-color: var(--el-color-primary-light-9); } .user-profile { @@ -56,6 +77,10 @@ .logo h2 { font-size: 18px; } + + .guest-actions { + gap: 0px; + } } /* --- TheHeader Button & Link --- */ diff --git a/frontend/src/features/health/views/healthCheck.vue b/frontend/src/features/health/views/healthCheck.vue index 92e75f0..20736fc 100644 --- a/frontend/src/features/health/views/healthCheck.vue +++ b/frontend/src/features/health/views/healthCheck.vue @@ -1,5 +1,5 @@