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:
2026-07-22 21:38:56 +08:00
parent ca0af6f7d2
commit b94eb706ff
64 changed files with 1572 additions and 173 deletions

View File

@@ -1,8 +1,12 @@
const app = getApp();
const planSvc = require('../../services/plan');
const EMOJIS = ['📋', '💪', '🔥', '🏋️', '🏃', '🧘', '🤸', '🥊', '🚴', '⚡', '🌟', '🎯'];
const COLORS = ['#D9B36C', '#58C9B9', '#9B8CFF', '#F08A5D', '#3FBF7F', '#5B9DF9'];
// UGC 计划图标选择器Lucide 运动子集(非 emoji
const ICONS = ['clipboard-list', 'dumbbell', 'flame', 'accessibility', 'person-standing',
'bike', 'heart', 'target', 'trophy', 'medal', 'star', 'activity',
'sparkles', 'zap', 'trending-up', 'folder-open'];
// 计划主题色:对齐 Kinetic Dark 语义色板
const COLORS = ['#B6F24E', '#2BD9A6', '#4FA8FF', '#F2B53D', '#FF5C5C', '#9BA7A1'];
Page({
data: {
@@ -11,9 +15,9 @@ Page({
id: '',
name: '',
description: '',
emoji: '📋',
color: '#D9B36C',
emojis: EMOJIS,
emoji: 'clipboard-list',
color: '#B6F24E',
emojis: ICONS,
colors: COLORS,
loading: false,
dirty: false // 是否有未保存的修改
@@ -29,8 +33,8 @@ Page({
this.setData({
name: p.name || '',
description: p.description || '',
emoji: p.emoji || '📋',
color: p.color || '#D9B36C',
emoji: p.emoji || 'clipboard-list',
color: p.color || '#B6F24E',
loading: false
});
}).catch(() => {

View File

@@ -1,6 +1,7 @@
{
"navigationStyle": "custom",
"usingComponents": {
"navbar": "/components/navbar/index"
"navbar": "/components/navbar/index",
"fc-icon": "/components/fc-icon/index"
}
}

View File

@@ -3,7 +3,7 @@
<view class="section">
<view class="preview" style="background: linear-gradient(135deg, {{color}}26, var(--surface));">
<view class="preview__emoji" style="background: {{color}}22; color: {{color}};">{{emoji}}</view>
<view class="preview__emoji" style="background: {{color}}22; color: {{color}};"><fc-icon name="{{emoji}}" size="48" color="{{color}}" /></view>
<view class="preview__name" style="color: {{color}};">{{name || '计划名称'}}</view>
<view class="preview__desc">{{description || '计划描述(选填)'}}</view>
</view>
@@ -40,7 +40,9 @@
class="emoji {{emoji === item ? 'emoji--active' : ''}}"
style="{{emoji === item ? 'border-color:' + color + '; background:' + color + '22;' : ''}}"
data-emoji="{{item}}"
bindtap="onPickEmoji">{{item}}</view>
bindtap="onPickEmoji">
<fc-icon name="{{item}}" size="44" color="{{emoji === item ? color : 'var(--text)'}}" />
</view>
</scroll-view>
</view>

View File

@@ -41,7 +41,7 @@
.savebar {
position: fixed; left: 0; right: 0; bottom: 0;
padding: 20rpx 32rpx;
background: rgba(14,17,16,0.92);
background: var(--bar-bg);
backdrop-filter: blur(12px);
border-top: 1rpx solid var(--line);
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
@@ -49,6 +49,6 @@
.savebar__btn {
display: flex; align-items: center; justify-content: center;
background: linear-gradient(135deg, var(--gold) 0%, var(--gold-2) 100%);
color: #0E1110; font-weight: 700; font-size: 32rpx;
color: var(--accent-on); font-weight: 700; font-size: 32rpx;
border-radius: 999rpx; padding: 26rpx;
}