feat: Kinetic Dark 设计语言 + Lucide 图标迁移 + 首页轻量个性化
- 建立 Lucide 子集 iconfont(49 字形),全站 emoji 替换为 fc-icon 组件 - 重塑 Design Token(冷中性近黑底 + Volt 荧光绿 #B6F24E),消除硬编码颜色 - 首页登录后个性化:我的计划 / 我的收藏 / 今日推荐(纯前端复用现有 API) - 后端 DEFAULT_EMOJI→Lucide 名,PALETTE 对齐 Kinetic Dark 语义色板 - 修复 person-standing 缺失字形;14 个官方组合 seed emoji 全部映射到现有字形
This commit is contained in:
@@ -11,8 +11,10 @@ import {
|
||||
labelOf,
|
||||
} from '../data/labels';
|
||||
|
||||
// 媒体根地址:默认指向本服务自托管的 /media 静态目录(走自家后端,不依赖公共图床)。
|
||||
// 生产/服务器部署时用环境变量覆盖,例如 MEDIA_BASE_URL=http://192.227.237.8:3001/media
|
||||
const MEDIA_BASE_URL = (
|
||||
process.env.MEDIA_BASE_URL || 'https://cdn.jsdelivr.net/gh/hasaneyldrm/exercises-dataset@main'
|
||||
process.env.MEDIA_BASE_URL || 'http://localhost:3000/media'
|
||||
).replace(/\/$/, '');
|
||||
|
||||
function toMediaUrl(path: string): string {
|
||||
|
||||
@@ -34,8 +34,9 @@ export interface PlanDetail extends PlanSummary {
|
||||
exercises: ExerciseSummary[];
|
||||
}
|
||||
|
||||
const DEFAULT_EMOJI = '📋';
|
||||
const PALETTE = ['#D9B36C', '#58C9B9', '#9B72FF', '#FF6B6B', '#4D96FF', '#6BCB77'];
|
||||
// 历史字段名仍叫 emoji,但值已是 Lucide 图标名(前端 iconName 兼容旧 emoji)
|
||||
const DEFAULT_EMOJI = 'clipboard-list';
|
||||
const PALETTE = ['#B6F24E', '#2BD9A6', '#4FA8FF', '#F2B53D', '#FF5C5C', '#9BA7A1'];
|
||||
|
||||
@Injectable()
|
||||
export class PlansService {
|
||||
|
||||
@@ -22,7 +22,7 @@ export class UsersService {
|
||||
const user: UserRecord = {
|
||||
openid: input.openid,
|
||||
nickname: input.nickname?.trim() || '健身学员',
|
||||
avatar: input.avatar || '🏃',
|
||||
avatar: input.avatar || 'user',
|
||||
createdAt: now,
|
||||
updatedAt: now,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user