产品分类
+{category.name}
+ {category.description ?{category.description}
: null} +- 系统总控制台 -
-- 集成式基础设施管理中心 · 实时监控系统运行状态与核心资产分发 -
-- {module.title} -
-- {module.description} -
-System Health
-Live Logs
-当前账号不能管理主题
+请使用超级管理员账号操作主题。
+主题配置
+暂无主题配置
- -- {theme.name} -
- {theme.isDefault && ( -暂无主题配置
+ +{theme.name}
+ {theme.isDefault && ( +{theme.description}
: null} + {(theme.startDate || theme.endDate) && ( ++ {theme.startDate && `开始: ${new Date(theme.startDate).toLocaleString('zh-CN')}`} + {theme.startDate && theme.endDate && ' | '} + {theme.endDate && `结束: ${new Date(theme.endDate).toLocaleString('zh-CN')}`} +
)}- {theme.description} -
- )} - {(theme.startDate || theme.endDate) && ( -- {theme.startDate && `开始: ${new Date(theme.startDate).toLocaleString('zh-CN')}`} - {theme.startDate && theme.endDate && ' | '} - {theme.endDate && `结束: ${new Date(theme.endDate).toLocaleString('zh-CN')}`} -
- )} -
+
定时发布(可选)
@@ -421,7 +448,7 @@ export default function ThemeManagementClient() {
{/* 首页背景 */}
-
+
首页背景
@@ -457,7 +484,7 @@ export default function ThemeManagementClient() {
{/* 登录页面板 */}
-
+
登录页右侧面板
@@ -488,7 +515,7 @@ export default function ThemeManagementClient() {
{/* 操作按钮 */}
-
+
取消
@@ -498,6 +525,6 @@ export default function ThemeManagementClient() {
-
+
)
}
diff --git a/furniture-3d-system/src/app/admin/themes/page.tsx b/furniture-3d-system/src/app/admin/themes/page.tsx
index aee1d181..758734aa 100644
--- a/furniture-3d-system/src/app/admin/themes/page.tsx
+++ b/furniture-3d-system/src/app/admin/themes/page.tsx
@@ -7,13 +7,21 @@
*/
import { Metadata } from 'next'
+import { AuthProvider } from '@/hooks/useAuth'
+import { RequireAuth } from '@/components/auth/RequireAuth'
import ThemeManagementClient from './ThemeManagementClient'
export const metadata: Metadata = {
- title: '主题管理 - 3D 家具系统',
+ title: '主题视觉管理 | White Obsidian Atelier',
description: '管理系统主题和背景配置',
}
export default function ThemeManagementPage() {
- return
+ return (
+
+
+
+
+
+ )
}
diff --git a/furniture-3d-system/src/app/asset-center/material-library/MaterialLibraryClient.tsx b/furniture-3d-system/src/app/asset-center/material-library/MaterialLibraryClient.tsx
index 74a02444..b4027a19 100644
--- a/furniture-3d-system/src/app/asset-center/material-library/MaterialLibraryClient.tsx
+++ b/furniture-3d-system/src/app/asset-center/material-library/MaterialLibraryClient.tsx
@@ -2,7 +2,7 @@
/**
* 基础资料库 (Material Library)
- * Obsidian Atelier - 元组件资料工作台
+ * White Obsidian Atelier - 元组件资料工作台
* 布局标准:资料索引 - 材质/基材工作台 - 实体 Inspector
*/
diff --git a/furniture-3d-system/src/app/debug-theme/page.tsx b/furniture-3d-system/src/app/debug-theme/page.tsx
index eeff1038..df7fdcc7 100644
--- a/furniture-3d-system/src/app/debug-theme/page.tsx
+++ b/furniture-3d-system/src/app/debug-theme/page.tsx
@@ -2,7 +2,6 @@
import { useEffect, useState } from 'react'
import Button from '@/components/ui/Button'
-import ThemeToggle from '@/components/ui/ThemeToggle'
export default function DebugThemePage() {
const [themeInfo, setThemeInfo] = useState({
@@ -45,12 +44,8 @@ export default function DebugThemePage() {
attributeFilter: ['data-theme', 'class'],
})
- // 监听自定义事件
- window.addEventListener('theme-change', updateInfo)
-
return () => {
observer.disconnect()
- window.removeEventListener('theme-change', updateInfo)
}
}, [])
@@ -59,9 +54,8 @@ export default function DebugThemePage() {
- 主题系统调试页面
+ 浅色主题调试页面
-
{/* 调试信息卡片 */}
@@ -174,8 +168,8 @@ export default function DebugThemePage() {
1. 打开浏览器开发者工具(F12)
2. 查看 Console 标签页,应该能看到详细的主题信息
- 3. 切换主题后,信息会自动更新
- 4. 检查 Elements 标签页,查看 <html> 标签的 data-theme 属性
+ 3. 当前系统固定为浅色主题,不再提供深浅色切换
+ 4. 检查 Elements 标签页,查看 <html> 标签的 data-theme 属性应为 light
diff --git a/furniture-3d-system/src/app/globals.css b/furniture-3d-system/src/app/globals.css
index 9834931c..a25222e7 100644
--- a/furniture-3d-system/src/app/globals.css
+++ b/furniture-3d-system/src/app/globals.css
@@ -514,8 +514,8 @@
}
}
-/* ===== Obsidian Material Library Theme Bridge =====
- 基础资料库使用黑曜石工作台结构,但必须跟随全局 light/dark 主题。 */
+/* ===== White Obsidian Material Library Theme Bridge =====
+ 基础资料库使用白曜石工作台结构;全局产品主题固定浅色。 */
@layer components {
:root,
[data-theme='light'] {
@@ -630,6 +630,288 @@
border-color: var(--ml-border) !important;
}
+ :root,
+ [data-theme='light'] {
+ --obs-shell-bg: #eef2f3;
+ --obs-shell-text: #263033;
+ --obs-shell-panel-bg: #ffffff;
+ --obs-shell-content-bg: #f4f7f7;
+ --obs-shell-header-bg: #f8faf9;
+ --obs-shell-surface-bg: #ffffff;
+ --obs-shell-muted-bg: #edf2f2;
+ --obs-shell-rail-bg: #e5ebeb;
+ --obs-shell-border: rgba(17, 23, 25, 0.12);
+ --obs-shell-title: #101719;
+ --obs-shell-muted: #5f6d70;
+ --obs-shell-subtle: #7a878a;
+ --obs-shell-hover-bg: rgba(17, 23, 25, 0.045);
+ --obs-shell-control-bg: rgba(17, 23, 25, 0.045);
+ --obs-shell-control-hover-bg: rgba(17, 23, 25, 0.08);
+ --obs-shell-control-text: #4f5c5f;
+ --obs-shell-control-hover-text: #101719;
+ --obs-shell-icon-bg: rgba(17, 23, 25, 0.06);
+ --obs-shell-icon-text: #2d393c;
+ --obs-shell-rail-title: #687477;
+ --obs-shell-rail-text: #3f4a4d;
+ --obs-shell-rail-hover-bg: rgba(17, 23, 25, 0.06);
+ --obs-shell-rail-hover-text: #101719;
+ --obs-shell-rail-active-bg: #101719;
+ --obs-shell-rail-active-text: #f7f9f9;
+ --obs-shell-status-text: #566265;
+ --obs-shell-status-muted: #6d787b;
+ --obs-shell-status-strong: #101719;
+ --obs-shell-status-pill-bg: rgba(17, 23, 25, 0.055);
+ --obs-shell-action-bg: #101719;
+ --obs-shell-action-text: #f7f9f9;
+ --obs-shell-action-border: rgba(17, 23, 25, 0.16);
+ --obs-shell-action-hover-bg: #263033;
+ --obs-shell-rail-card-bg: rgba(17, 23, 25, 0.045);
+ --obs-shell-rail-card-text: #101719;
+ --obs-shell-rail-card-muted: #687477;
+ --obs-shell-success: #1f7a56;
+ --obs-shell-warning: #9a6a16;
+ --obs-shell-danger: #b3453d;
+ }
+
+ [data-theme='dark'] {
+ --obs-shell-bg: #111719;
+ --obs-shell-text: #e8edef;
+ --obs-shell-panel-bg: #111719;
+ --obs-shell-content-bg: #0f1416;
+ --obs-shell-header-bg: #101719;
+ --obs-shell-surface-bg: #151d1f;
+ --obs-shell-muted-bg: #202a2d;
+ --obs-shell-rail-bg: #111719;
+ --obs-shell-border: rgba(255, 255, 255, 0.10);
+ --obs-shell-title: #f4f7f6;
+ --obs-shell-muted: #aeb8bb;
+ --obs-shell-subtle: #8f9a9d;
+ --obs-shell-hover-bg: rgba(255, 255, 255, 0.055);
+ --obs-shell-control-bg: rgba(255, 255, 255, 0.04);
+ --obs-shell-control-hover-bg: rgba(255, 255, 255, 0.08);
+ --obs-shell-control-text: #aeb8bb;
+ --obs-shell-control-hover-text: #ffffff;
+ --obs-shell-icon-bg: rgba(255, 255, 255, 0.06);
+ --obs-shell-icon-text: #dfe6e8;
+ --obs-shell-rail-bg: #171d1f;
+ --obs-shell-rail-title: #748083;
+ --obs-shell-rail-text: #c4cccf;
+ --obs-shell-rail-hover-bg: rgba(255, 255, 255, 0.06);
+ --obs-shell-rail-hover-text: #ffffff;
+ --obs-shell-rail-active-bg: #ffffff;
+ --obs-shell-rail-active-text: #111719;
+ --obs-shell-status-text: #aeb8bb;
+ --obs-shell-status-muted: #748083;
+ --obs-shell-status-strong: #ffffff;
+ --obs-shell-status-pill-bg: rgba(255, 255, 255, 0.04);
+ --obs-shell-action-bg: #ffffff;
+ --obs-shell-action-text: #111719;
+ --obs-shell-action-border: rgba(255, 255, 255, 0.10);
+ --obs-shell-action-hover-bg: #e8edef;
+ --obs-shell-rail-card-bg: rgba(255, 255, 255, 0.04);
+ --obs-shell-rail-card-text: #ffffff;
+ --obs-shell-rail-card-muted: #748083;
+ --obs-shell-success: #9bdcc5;
+ --obs-shell-warning: #e5bd72;
+ --obs-shell-danger: #f3a29c;
+ }
+
+ .obsidian-control-grid {
+ background-image: var(--obs-shell-grid);
+ background-size: 28px 28px;
+ opacity: var(--obs-shell-grid-opacity);
+ }
+
+ .obsidian-control-vignette {
+ background: var(--obs-shell-vignette);
+ }
+
+ .obsidian-control-action {
+ border-color: var(--obs-shell-action-border) !important;
+ background: var(--obs-shell-action-bg) !important;
+ color: var(--obs-shell-action-text) !important;
+ }
+
+ .obsidian-control-action:hover {
+ background: var(--obs-shell-action-hover-bg) !important;
+ }
+
+ .obsidian-control-rail-card {
+ border-color: var(--obs-shell-border);
+ background: var(--obs-shell-rail-card-bg);
+ color: var(--obs-shell-rail-card-text);
+ }
+
+ .obsidian-control-rail-card-muted {
+ color: var(--obs-shell-rail-card-muted);
+ }
+
+ .obsidian-control-shell {
+ background: var(--obs-shell-bg) !important;
+ color: var(--obs-shell-text) !important;
+ }
+
+ .obsidian-control-shell > div > aside:first-of-type {
+ background: var(--obs-shell-rail-bg) !important;
+ border-color: var(--obs-shell-border) !important;
+ }
+
+ .obsidian-control-shell > div > section {
+ background: var(--obs-shell-panel-bg) !important;
+ border-color: var(--obs-shell-border) !important;
+ }
+
+ .obsidian-control-shell > div > aside:last-child {
+ background: var(--obs-shell-panel-bg) !important;
+ border-color: var(--obs-shell-border) !important;
+ }
+
+ .obsidian-control-shell > div > section > header,
+ .obsidian-control-shell > div > aside > div:first-child,
+ .obsidian-control-shell [class*="bg-[#101719]"] {
+ background: var(--obs-shell-header-bg) !important;
+ border-color: var(--obs-shell-border) !important;
+ }
+
+ .obsidian-control-shell [class*="bg-[#0d1113]"],
+ .obsidian-control-shell [class*="bg-[#0f1416]"],
+ .obsidian-control-shell [class*="bg-[#101517]"] {
+ background-color: var(--obs-shell-content-bg) !important;
+ }
+
+ .obsidian-control-shell [class*="bg-[#111719]"] {
+ background-color: var(--obs-shell-panel-bg) !important;
+ }
+
+ .obsidian-control-shell [class*="bg-[#151d1f]"] {
+ background-color: var(--obs-shell-surface-bg) !important;
+ }
+
+ .obsidian-control-shell [class*="bg-[#202a2d]"],
+ .obsidian-control-shell [class*="bg-white/[0.03]"],
+ .obsidian-control-shell [class*="bg-white/[0.04]"],
+ .obsidian-control-shell [class*="bg-white/[0.06]"] {
+ background-color: var(--obs-shell-muted-bg) !important;
+ }
+
+ .obsidian-control-shell [class*="bg-[#e7eeec]"] {
+ background-color: var(--obs-shell-rail-active-bg) !important;
+ }
+
+ .obsidian-control-shell [class*="border-white/10"],
+ .obsidian-control-shell [class*="border-red-400/25"],
+ .obsidian-control-shell [class*="border-amber-400/30"] {
+ border-color: var(--obs-shell-border) !important;
+ }
+
+ .obsidian-control-shell [class*="divide-white/10"] > :not([hidden]) ~ :not([hidden]) {
+ border-color: var(--obs-shell-border) !important;
+ }
+
+ .obsidian-control-shell [class*="text-[#f4f7f6]"],
+ .obsidian-control-shell [class*="text-[#edf4f2]"],
+ .obsidian-control-shell [class*="text-[#e7eeec]"],
+ .obsidian-control-shell [class*="text-[#dce7e4]"],
+ .obsidian-control-shell [class*="text-[#cbd8d5]"] {
+ color: var(--obs-shell-title) !important;
+ }
+
+ .obsidian-control-shell [class*="text-[#aeb8bb]"],
+ .obsidian-control-shell [class*="text-[#c0ccca]"],
+ .obsidian-control-shell [class*="text-[#9ba8a8]"],
+ .obsidian-control-shell [class*="text-[#8f9c9d]"],
+ .obsidian-control-shell [class*="text-[#7f8d8e]"],
+ .obsidian-control-shell [class*="text-[#788586]"],
+ .obsidian-control-shell [class*="text-[#748083]"] {
+ color: var(--obs-shell-muted) !important;
+ }
+
+ .obsidian-control-shell [class*="text-[#101517]"],
+ .obsidian-control-shell [class*="text-[#101719]"] {
+ color: var(--obs-shell-rail-active-text) !important;
+ }
+
+ .obsidian-control-shell [class*="text-white"] {
+ color: var(--obs-shell-title) !important;
+ }
+
+ .obsidian-control-shell [class*="hover:text-white"]:hover {
+ color: var(--obs-shell-rail-hover-text) !important;
+ }
+
+ .obsidian-control-shell [class*="text-emerald-200"],
+ .obsidian-control-shell [class*="text-[#9bdcc5]"] {
+ color: var(--obs-shell-success) !important;
+ }
+
+ .obsidian-control-shell [class*="text-amber-200"],
+ .obsidian-control-shell [class*="text-[#e5bd72]"] {
+ color: var(--obs-shell-warning) !important;
+ }
+
+ .obsidian-control-shell [class*="text-red-200"] {
+ color: var(--obs-shell-danger) !important;
+ }
+
+ .obsidian-control-shell [class*="hover:bg-white/[0.04]"]:hover,
+ .obsidian-control-shell [class*="hover:bg-white/[0.06]"]:hover,
+ .obsidian-control-shell [class*="hover:bg-red-400/10"]:hover,
+ .obsidian-control-shell [class*="hover:bg-amber-400/10"]:hover {
+ background-color: var(--obs-shell-hover-bg) !important;
+ }
+
+ .obsidian-modal-panel label,
+ .obsidian-modal-panel .text-apple-label-primary,
+ .obsidian-modal-panel .text-apple-label-secondary,
+ .obsidian-modal-panel .text-apple-label-tertiary {
+ color: var(--obs-shell-muted) !important;
+ }
+
+ .obsidian-modal-panel input,
+ .obsidian-modal-panel textarea,
+ .obsidian-modal-panel select {
+ border-color: var(--obs-shell-border) !important;
+ background: var(--obs-shell-surface-bg) !important;
+ color: var(--obs-shell-title) !important;
+ }
+
+ .obsidian-modal-panel input:focus,
+ .obsidian-modal-panel textarea:focus,
+ .obsidian-modal-panel select:focus {
+ border-color: var(--obs-shell-title) !important;
+ background: var(--obs-shell-surface-bg) !important;
+ }
+
+ .obsidian-modal-panel input::placeholder,
+ .obsidian-modal-panel textarea::placeholder {
+ color: var(--obs-shell-subtle) !important;
+ }
+
+ .obsidian-modal-panel [class*="bg-white"],
+ .obsidian-modal-panel [class*="bg-[#fbfcfc]"],
+ .obsidian-modal-panel [class*="bg-[#f7f8f8]"],
+ .obsidian-modal-panel [class*="bg-apple-bg-secondary"],
+ .obsidian-modal-panel [class*="bg-apple-bg-tertiary"] {
+ background-color: var(--obs-shell-surface-bg) !important;
+ }
+
+ .obsidian-modal-panel [class*="border-[#dde3e5]"],
+ .obsidian-modal-panel [class*="border-apple-separator"] {
+ border-color: var(--obs-shell-border) !important;
+ }
+
+ .obsidian-modal-panel [class*="text-[#2d3335]"],
+ .obsidian-modal-panel [class*="text-apple-label-primary"] {
+ color: var(--obs-shell-title) !important;
+ }
+
+ .obsidian-modal-panel [class*="text-[#6b7679]"],
+ .obsidian-modal-panel [class*="text-[#7a8588]"],
+ .obsidian-modal-panel [class*="text-apple-label-secondary"],
+ .obsidian-modal-panel [class*="text-apple-label-tertiary"] {
+ color: var(--obs-shell-muted) !important;
+ }
+
.material-library-obsidian [class*="ring-white/10"],
.material-library-obsidian [class*="ring-[#8fb6b0]"],
.material-library-obsidian [class*="ring-[#48686b]"] {
diff --git a/furniture-3d-system/src/app/layout.tsx b/furniture-3d-system/src/app/layout.tsx
index b898b54d..7f8fc0d9 100644
--- a/furniture-3d-system/src/app/layout.tsx
+++ b/furniture-3d-system/src/app/layout.tsx
@@ -46,16 +46,10 @@ export default function RootLayout({
return (
- {/* 防止主题闪烁 - 必须在页面渲染前执行 */}
+ {/* 固定浅色主题,避免旧本地偏好把工作台切回深色 */}
@@ -64,7 +58,7 @@ export default function RootLayout({
{/* 移动端优化 */}
-
+
diff --git a/furniture-3d-system/src/app/login/page.tsx b/furniture-3d-system/src/app/login/page.tsx
index 58fb06ff..a341a7ae 100644
--- a/furniture-3d-system/src/app/login/page.tsx
+++ b/furniture-3d-system/src/app/login/page.tsx
@@ -17,7 +17,6 @@ import { useRouter } from 'next/navigation';
import { Button } from '@/components/ui/Button';
import { Input } from '@/components/ui/Input';
import { LargeTitle, Body, Footnote, Caption2 } from '@/components/ui/Typography';
-import ThemeToggle from '@/components/ui/ThemeToggle';
import { useToast, ToastContainer } from '@/components/ui/Toast';
import { getApiErrorMessage } from '@/lib/utils';
import type { ApiResponse } from '@/lib/api';
@@ -177,11 +176,6 @@ export default function LoginPage() {
{/* Toast 容器 - 居中显示,类似系统通知 */}
- {/* 主题切换按钮 - 移到右侧面板内或悬浮在顶层 */}
-
-
-
-
{/* 左侧:极简居中品牌卡片 */}
{/* 居中容器 - 响应式宽度 */}
diff --git a/furniture-3d-system/src/app/profile/page.tsx b/furniture-3d-system/src/app/profile/page.tsx
new file mode 100644
index 00000000..bfa007de
--- /dev/null
+++ b/furniture-3d-system/src/app/profile/page.tsx
@@ -0,0 +1,178 @@
+'use client'
+
+import Link from 'next/link'
+import { Activity, Building2, CalendarClock, Fingerprint, KeyRound, LogOut, ShieldCheck, UserRound, Users } from 'lucide-react'
+import { AuthProvider, useAuth } from '@/hooks/useAuth'
+import { RequireAuth } from '@/components/auth/RequireAuth'
+import Button from '@/components/ui/Button'
+import {
+ ObsidianControlShell,
+ ObsidianDataRow,
+ ObsidianInspectorSection,
+ ObsidianPanel,
+ ObsidianRailButton,
+ ObsidianRailGroup,
+} from '@/components/platform/ObsidianControlShell'
+
+const roleLabels: Record = {
+ SUPER_ADMIN: '超级管理员',
+ ADMIN: '管理员',
+ SUPERVISOR: '主管',
+ SUPERVISOR_DEPARTMENT: '部门主管',
+ SUPERVISOR_TEAM: '小组主管',
+ DESIGNER: '设计师',
+ USER: '普通用户',
+}
+
+const statusLabels: Record = {
+ ACTIVE: '运行中',
+ PENDING: '待激活',
+ INACTIVE: '已离职',
+ SUSPENDED: '已锁定',
+}
+
+export default function ProfilePage() {
+ return (
+
+
+
+
+
+ )
+}
+
+function ProfileContent() {
+ const { user, logout } = useAuth()
+ const canManageUsers = Boolean(user && ['SUPER_ADMIN', 'ADMIN', 'SUPERVISOR_DEPARTMENT', 'SUPERVISOR_TEAM'].includes(user.role))
+ const canAccessAdmin = Boolean(user && ['SUPER_ADMIN', 'ADMIN'].includes(user.role))
+ const roleLabel = user ? roleLabels[user.role] ?? user.role : '-'
+ const statusLabel = user ? statusLabels[user.status] ?? user.status : '-'
+ const lastLoginText = user?.lastLoginAt ? new Date(user.lastLoginAt).toLocaleString('zh-CN') : '暂无记录'
+
+ return (
+ void logout()}
+ className="obsidian-control-action rounded-md border px-4"
+ >
+
+ 退出登录
+
+ }
+ rail={
+
+
+
+ {canManageUsers ? : null}
+ {canAccessAdmin ? : null}
+
+
+
+ 会话
+ {statusLabel}
+
+
+ }
+ inspector={
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+ >
+
+
+
+
+ {user?.name || '当前用户'}
+ {user?.email}
+
+
+ 角色
+ {roleLabel}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {canManageUsers ? (
+
+ ) : null}
+ {canAccessAdmin ? (
+
+ ) : null}
+
+
+
+
+
+ )
+}
+
+function ProfileMetric({ icon: Icon, label, value }: { icon: typeof Fingerprint; label: string; value: string }) {
+ return (
+
+
+ {label}
+ {value}
+
+ )
+}
+
+function ProfileLine({ icon: Icon, label, value }: { icon: typeof Building2; label: string; value: string }) {
+ return (
+
+
+
+ {label}
+ {value}
+
+
+ )
+}
+
+function ProfileAction({ href, title }: { href: string; title: string }) {
+ return (
+
+ {title}
+
+ )
+}
diff --git a/furniture-3d-system/src/app/register/page.tsx b/furniture-3d-system/src/app/register/page.tsx
index ded023fd..ad1b2c37 100644
--- a/furniture-3d-system/src/app/register/page.tsx
+++ b/furniture-3d-system/src/app/register/page.tsx
@@ -6,7 +6,6 @@ import { useRouter } from 'next/navigation';
import { Button } from '@/components/ui/Button';
import { Input } from '@/components/ui/Input';
import { LargeTitle, Body, Footnote, Caption2 } from '@/components/ui/Typography';
-import ThemeToggle from '@/components/ui/ThemeToggle';
import { useToast, ToastContainer } from '@/components/ui/Toast';
import { getApiErrorMessage } from '@/lib/utils';
import type { ApiResponse } from '@/lib/api';
@@ -92,10 +91,6 @@ export default function RegisterPage() {
-
-
-
-
diff --git a/furniture-3d-system/src/app/ui-preview/page.tsx b/furniture-3d-system/src/app/ui-preview/page.tsx
index c5949ad9..89e586fc 100644
--- a/furniture-3d-system/src/app/ui-preview/page.tsx
+++ b/furniture-3d-system/src/app/ui-preview/page.tsx
@@ -5,7 +5,7 @@
* 用于测试和验证设计系统的实现
*
* @created 2025-12-11
- * @updated 2025-12-12 - 完善深浅色主题适配
+ * @updated 2026-04-28 - 固定浅色主题
*/
'use client'
@@ -42,7 +42,6 @@ import Spinner from '@/components/ui/Spinner'
import { SlideInUp } from '@/components/ui/AnimatedEntry'
import { SuccessAlert, ErrorAlert, WarningAlert, InfoAlert } from '@/components/ui/Alert'
import { AccessibilityPanel, PreferencesProvider } from '@/lib/preferences'
-import ThemeToggle from '@/components/ui/ThemeToggle'
export default function UIPreviewPage() {
const [progress, setProgress] = React.useState(45)
@@ -77,7 +76,6 @@ export default function UIPreviewPage() {
基于苹果 Human Interface Guidelines 2025 的设计系统实现
-
+
首页背景
@@ -457,7 +484,7 @@ export default function ThemeManagementClient() {
{/* 登录页面板 */}
-
+
登录页右侧面板
@@ -488,7 +515,7 @@ export default function ThemeManagementClient() {
{/* 操作按钮 */}
-
+
取消
@@ -498,6 +525,6 @@ export default function ThemeManagementClient() {
-
+
登录页右侧面板
@@ -488,7 +515,7 @@ export default function ThemeManagementClient() {
- 主题系统调试页面 + 浅色主题调试页面
-1. 打开浏览器开发者工具(F12)
2. 查看 Console 标签页,应该能看到详细的主题信息
-3. 切换主题后,信息会自动更新
-4. 检查 Elements 标签页,查看 <html> 标签的 data-theme 属性
+3. 当前系统固定为浅色主题,不再提供深浅色切换
+4. 检查 Elements 标签页,查看 <html> 标签的 data-theme 属性应为 light
会话
+{statusLabel}
+{user?.name || '当前用户'}
+{user?.email}
+角色
+{roleLabel}
+{label}
+{value}
+{label}
+{value}
+{title}
+ + ) +} diff --git a/furniture-3d-system/src/app/register/page.tsx b/furniture-3d-system/src/app/register/page.tsx index ded023fd..ad1b2c37 100644 --- a/furniture-3d-system/src/app/register/page.tsx +++ b/furniture-3d-system/src/app/register/page.tsx @@ -6,7 +6,6 @@ import { useRouter } from 'next/navigation'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { LargeTitle, Body, Footnote, Caption2 } from '@/components/ui/Typography'; -import ThemeToggle from '@/components/ui/ThemeToggle'; import { useToast, ToastContainer } from '@/components/ui/Toast'; import { getApiErrorMessage } from '@/lib/utils'; import type { ApiResponse } from '@/lib/api'; @@ -92,10 +91,6 @@ export default function RegisterPage() {Quick Filters
-{selectedUser.name}
-{selectedUser.role}
-Identity Inspector
-- 该账户已绑定硬件指纹令牌,最近一次成功登录发生在 2 小时前。 -
-Identity Inspector
-等待选择用户
-- 从左侧列表中选择一名员工,即可在此处查看详细的权限矩阵与安全审计报告。 +
{selectedUser.name}
++ {roleLabels[selectedUser.role] ?? selectedUser.role}
-未选择账号
+点击中间列表中的人员后查看权限和组织信息
+{label}
+{value}
+{title}
-{eyebrow}
+{title}
+{eyebrow}
+ ) : null} + {title ?