feat: 双主题系统 — 编辑风 + 极简亮色
前端: - 新增 Pinia theme store,localStorage 持久化,data-theme 切换 - App.vue: :root 新增 --font-*/--sidebar-* CSS 变量;新增 :root[data-theme=light] 完整配色(极简黑白金 + Noto Sans SC) - DesktopLayout: 侧边栏 15 个变量化 + 顶栏主题切换按钮 - MobileLayout: 装饰色变量化 - Settings: 新增「界面主题」卡片 - 21 个组件 font-family 统一替换为 var(--font-*) - 新增 utils/managerColor.ts — 12 色调色板 + 自适应文字色 + 后端自定义色优先 - WorkPlans/MiniBusiness/KeyVisits/CustomerManage: 客户经理标签色统一走共享工具 - UserManage: 编辑弹窗新增颜色选择器(仅 manager) - LightBoard: 去标题星标图标 - ManagerWorkspace/WorkPlans/MiniBusiness/KeyVisits: 删除按钮改为实心红底白字 后端: - User 模型新增 color 列 + lifespan 自动迁移 - users API 支持 color 字段读写 - UserOut schema 新增 color Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -210,7 +210,7 @@ function rowState(p: any): 'full' | 'catching' | 'missing' {
|
||||
.page-head { margin-bottom: 24px; }
|
||||
.page-title {
|
||||
margin: 0;
|
||||
font-family: 'ZCOOL XiaoWei', STSong, serif;
|
||||
font-family: var(--font-heading);
|
||||
font-size: 22px; font-weight: 400;
|
||||
color: var(--ink); letter-spacing: 0.06em;
|
||||
}
|
||||
@@ -218,7 +218,7 @@ function rowState(p: any): 'full' | 'catching' | 'missing' {
|
||||
.week-nav-btn { background: var(--surface); border: 1px solid var(--warm-border); padding: 4px 10px; cursor: pointer; color: var(--warm-gray); font-size: 12px; }
|
||||
.week-nav-btn:hover:not(:disabled) { color: var(--ink); border-color: var(--ink); }
|
||||
.week-nav-btn:disabled { opacity: 0.3; cursor: not-allowed; }
|
||||
.week-label { font-family: 'JetBrains Mono', 'SF Mono', monospace; font-size: 12px; color: var(--ink); letter-spacing: 0.04em; }
|
||||
.week-label { font-family: var(--font-mono); font-size: 12px; color: var(--ink); letter-spacing: 0.04em; }
|
||||
.week-nav-reset { background: none; border: 1px solid var(--gold); color: var(--gold); padding: 4px 10px; cursor: pointer; font-size: 12px; }
|
||||
.week-nav-reset:hover { background: var(--gold); color: #fff; }
|
||||
.page-rule { width: 32px; height: 3px; background: var(--gold); margin-top: 12px; }
|
||||
@@ -256,11 +256,11 @@ function rowState(p: any): 'full' | 'catching' | 'missing' {
|
||||
|
||||
.stat-body { display: flex; flex-direction: column; }
|
||||
.stat-num {
|
||||
font-family: 'ZCOOL XiaoWei', STSong, serif;
|
||||
font-family: var(--font-heading);
|
||||
font-size: 28px; color: var(--ink); line-height: 1.1; letter-spacing: 0.04em;
|
||||
}
|
||||
.stat-label {
|
||||
font-family: 'Noto Serif SC', STSong, serif;
|
||||
font-family: var(--font-body);
|
||||
font-size: 12px; color: var(--warm-gray); letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
@@ -271,7 +271,7 @@ function rowState(p: any): 'full' | 'catching' | 'missing' {
|
||||
.progress-card { margin-top: 4px; }
|
||||
.card-header-title {
|
||||
display: flex; align-items: center;
|
||||
font-family: 'ZCOOL XiaoWei', STSong, serif;
|
||||
font-family: var(--font-heading);
|
||||
font-size: 15px; color: var(--ink); letter-spacing: 0.05em;
|
||||
}
|
||||
|
||||
@@ -339,7 +339,7 @@ function rowState(p: any): 'full' | 'catching' | 'missing' {
|
||||
}
|
||||
|
||||
.seal-char {
|
||||
font-family: 'ZCOOL XiaoWei', STSong, serif;
|
||||
font-family: var(--font-heading);
|
||||
font-size: 20px;
|
||||
font-weight: 400;
|
||||
line-height: 1.1;
|
||||
@@ -356,7 +356,7 @@ function rowState(p: any): 'full' | 'catching' | 'missing' {
|
||||
|
||||
/* Inline status text (replaces el-tag) */
|
||||
.progress-status {
|
||||
font-family: 'Noto Serif SC', STSong, serif;
|
||||
font-family: var(--font-body);
|
||||
font-size: 12px;
|
||||
letter-spacing: 0.05em;
|
||||
}
|
||||
@@ -365,10 +365,10 @@ function rowState(p: any): 'full' | 'catching' | 'missing' {
|
||||
.progress-status--full { color: var(--sage); }
|
||||
|
||||
.progress-count {
|
||||
font-family: 'JetBrains Mono', 'SF Mono', monospace;
|
||||
font-family: var(--font-mono);
|
||||
font-size: 13px; color: var(--warm-gray); letter-spacing: 0.03em;
|
||||
position: relative; z-index: 1;
|
||||
}
|
||||
|
||||
.empty { text-align: center; color: var(--c-text-muted); padding: 40px 0; font-family: 'Noto Serif SC', STSong, serif; }
|
||||
.empty { text-align: center; color: var(--c-text-muted); padding: 40px 0; font-family: var(--font-body); }
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user