diff --git a/client/src/App.vue b/client/src/App.vue index 91a03f3..f5e5729 100644 --- a/client/src/App.vue +++ b/client/src/App.vue @@ -8,39 +8,44 @@ import { onLaunch, onShow, onHide } from '@dcloudio/uni-app' onLaunch(() => { - console.log('[AI维度] App launched') initTheme() }) -onShow(() => { - console.log('[AI维度] App shown') -}) - -onHide(() => { - console.log('[AI维度] App hidden') -}) +onShow(() => {}) +onHide(() => {}) +// 主题:'auto'(默认,跟随系统)| 'light' | 'dark' function initTheme() { - const theme = uni.getStorageSync('theme') || 'light' + const theme = uni.getStorageSync('theme') || 'auto' applyTheme(theme) + // auto 模式下监听系统切换(H5) + if (theme === 'auto' && typeof window !== 'undefined' && window.matchMedia) { + const mq = window.matchMedia('(prefers-color-scheme: dark)') + const onChange = () => applyTheme('auto') + if (mq.addEventListener) mq.addEventListener('change', onChange) + else if (mq.addListener) mq.addListener(onChange) + } +} + +function resolveTheme(theme) { + if (theme !== 'auto') return theme + if (typeof window !== 'undefined' && window.matchMedia) { + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' + } + return 'light' } function applyTheme(theme) { + const resolved = resolveTheme(theme) try { // H5 环境:操作 document class const root = document.documentElement - if (theme === 'dark') { - root.classList.add('theme-dark') - root.classList.remove('theme-light') - } else { - root.classList.remove('theme-dark') - root.classList.add('theme-light') - } + root.classList.remove('theme-dark', 'theme-light') + root.classList.add(resolved === 'dark' ? 'theme-dark' : 'theme-light') } catch (e) { - // 小程序环境:document 不存在 + // 小程序环境:document 不存在,深色由 manifest darkmode + CSS 媒体查询接管 } - // 小程序 tabBar 原生组件同步切换 - applyTabBarTheme(theme) + applyTabBarTheme(resolved) } function applyTabBarTheme(theme) { @@ -48,202 +53,34 @@ function applyTabBarTheme(theme) { if (theme === 'dark') { uni.setTabBarStyle({ color: 'rgba(255,255,255,0.35)', - selectedColor: '#a78bfa', - backgroundColor: '#0d0d1a', + selectedColor: '#a2b2ff', + backgroundColor: '#181828', borderStyle: 'black' }) } else { uni.setTabBarStyle({ color: 'rgba(0,0,0,0.3)', - selectedColor: '#6366f1', + selectedColor: '#5b5ff8', backgroundColor: '#ffffff', borderStyle: 'white' }) } } catch (e) { - // H5 环境 setTabBarStyle 可能不支持 + // 非 tabBar 页面或不支持时忽略 } } - \ No newline at end of file + +/* 区块标题(统一) */ +.section-header { + display: flex; + align-items: center; + justify-content: space-between; + margin: 24px 0 12px; + + .section-title { + font-size: 16px; + font-weight: 700; + color: var(--text-primary); + display: flex; + align-items: center; + gap: 6px; + } + .section-more { + font-size: 12px; + color: var(--text-tertiary); + } +} + diff --git a/client/src/components/AppIcon.vue b/client/src/components/AppIcon.vue new file mode 100644 index 0000000..711d016 --- /dev/null +++ b/client/src/components/AppIcon.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/client/src/components/ProgressRing.vue b/client/src/components/ProgressRing.vue new file mode 100644 index 0000000..7bf0b75 --- /dev/null +++ b/client/src/components/ProgressRing.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/client/src/manifest.json b/client/src/manifest.json index afc376d..d5a6c89 100644 --- a/client/src/manifest.json +++ b/client/src/manifest.json @@ -17,6 +17,9 @@ }, "usingComponents": true, "permission": {}, - "requiredPrivateInfos": [] - } + "requiredPrivateInfos": [], + "darkmode": true, + "themeLocation": "theme.json" + }, + "app-plus": {} } \ No newline at end of file diff --git a/client/src/pages.json b/client/src/pages.json index 60619f4..39ed0e1 100644 --- a/client/src/pages.json +++ b/client/src/pages.json @@ -124,25 +124,13 @@ "navigationBarTitleText": "协议", "navigationStyle": "custom" } - }, - { - "path": "pages/map/map", - "style": { - "navigationBarTitleText": "AI 知识地图" - } - }, - { - "path": "pages/map/quiz", - "style": { - "navigationBarTitleText": "知识闯关" - } } ], "globalStyle": { - "navigationBarTextStyle": "black", + "navigationBarTextStyle": "@navTxt", "navigationBarTitleText": "宇之然AI维度", - "navigationBarBackgroundColor": "#f5f5f7", - "backgroundColor": "#f5f5f7", + "navigationBarBackgroundColor": "@navBg", + "backgroundColor": "@bg", "backgroundColorTop": "#f5f5f7", "backgroundColorBottom": "#f5f5f7", "app-plus": { @@ -150,10 +138,10 @@ } }, "tabBar": { - "color": "rgba(0,0,0,0.3)", - "selectedColor": "#6366f1", - "backgroundColor": "#ffffff", - "borderStyle": "white", + "color": "@tabTxt", + "selectedColor": "@tabSel", + "backgroundColor": "@tabBg", + "borderStyle": "@tabBorder", "list": [ { "pagePath": "pages/index/index", diff --git a/client/src/pages/achievements/achievements.vue b/client/src/pages/achievements/achievements.vue index 3d452df..edc270e 100644 --- a/client/src/pages/achievements/achievements.vue +++ b/client/src/pages/achievements/achievements.vue @@ -4,7 +4,7 @@ - 🏆 成就 + 成就 {{ unlockedCount }}/{{ totalCount }} @@ -62,7 +62,7 @@ - 🏆 + 暂无成就 还没有获得任何成就 继续学习,解锁属于你的成就吧 @@ -88,9 +88,9 @@ const loading = ref(true) // 成就分类的默认配置 const CATEGORY_CONFIG = [ - { name: '知识探索', icon: '📖', color: 'var(--dim1-color)' }, - { name: '收藏成就', icon: '⭐', color: 'var(--dim2-color)' }, - { name: 'AI 问答', icon: '🤖', color: 'var(--dim3-color)' }, + { name: '知识探索', icon: '星', color: 'var(--dim1-color)' }, + { name: '收藏成就', icon: '藏', color: 'var(--dim2-color)' }, + { name: 'AI 问答', icon: '问', color: 'var(--dim3-color)' }, { name: '社交成就', icon: '👥', color: 'var(--dim4-color)' } ] @@ -141,7 +141,7 @@ async function loadAchievements() { function catIcon(name) { const config = CATEGORY_CONFIG.find((c) => c.name === name) - return config ? config.icon : '🏆' + return config ? config.icon : '成' } function achColor(icon) { diff --git a/client/src/pages/chat/chat.vue b/client/src/pages/chat/chat.vue index 084ea86..3cd98af 100644 --- a/client/src/pages/chat/chat.vue +++ b/client/src/pages/chat/chat.vue @@ -2,28 +2,29 @@ - + - ∞ + - AI 助手 - 随时为你解答 + 维度精灵 + 你的 AI 知识探索向导 - - - {{ quotaDisplay }} - 🎁 + + + {{ quotaText }} - + - + - 💡 - 试试问我这些问题: + + + {{ welcomeText }} + {{ item }} @@ -32,7 +33,9 @@ - ∞ + + + @@ -40,7 +43,9 @@ - ∞ + + + @@ -49,40 +54,42 @@ + + - + - + + - - ➤ - - - - @@ -212,7 +238,7 @@ onShareAppMessage(() => ({ height: 100vh; display: flex; flex-direction: column; - padding: 0 20px; + padding: 0 16px; background: var(--bg-primary); } @@ -222,248 +248,230 @@ onShareAppMessage(() => ({ display: flex; align-items: center; gap: 12px; - padding: 10px 0 16px; + padding: 10px 0 14px; } .chat-avatar, .mini-avatar { - width: 42px; - height: 42px; border-radius: 14px; - background: linear-gradient(135deg, rgba(124, 77, 255, 0.3), rgba(0, 188, 212, 0.2)); - border: 1px solid rgba(124, 77, 255, 0.15); + background: linear-gradient(135deg, var(--color-brand), #8b5cf6); display: flex; align-items: center; justify-content: center; flex-shrink: 0; + box-shadow: 0 4px 14px var(--color-brand-glow); } - -.avatar-text { - font-size: 20px; - color: white; -} - -.mini-avatar { - width: 32px; - height: 32px; - border-radius: 10px; - font-size: 14px; -} +.chat-avatar { width: 42px; height: 42px; } +.mini-avatar { width: 28px; height: 28px; border-radius: 9px; } .chat-info { flex: 1; } - .chat-name { - font-size: 16px; - color: var(--text-primary); - font-weight: 600; display: block; + font-size: 16px; + font-weight: 700; + color: var(--text-primary); } - .chat-status { + display: block; font-size: 11px; color: var(--text-tertiary); - display: block; + margin-top: 2px; } -// 配额徽章 .quota-badge { display: flex; align-items: center; - gap: 4px; + gap: 5px; padding: 6px 12px; - background: rgba(124, 77, 255, 0.1); - border: 1px solid rgba(124, 77, 255, 0.2); - border-radius: 16px; + border-radius: var(--radius-full); + background: var(--color-brand-bg); + border: 1px solid var(--glass-border); + + .quota-text { + font-size: 12px; + font-weight: 700; + color: var(--color-brand); + } } -.quota-text { - font-size: 12px; - color: var(--dim1-color); - font-weight: 600; +.msg-list { + flex: 1; + min-height: 0; } -.quota-icon { font-size: 14px; } +.list-bottom { height: 16px; } -// 未登录输入区占位 -.login-input-placeholder { - display: flex; - align-items: center; - justify-content: space-between; - padding: 14px 18px; - background: var(--glass-bg); - border: 1px dashed var(--glass-border); - border-radius: 14px; - margin-bottom: 30px; - cursor: pointer; -} - -.login-input-text { - font-size: 14px; - color: var(--text-tertiary); -} - -.login-input-btn { - padding: 6px 16px; - background: var(--color-brand); - border-radius: 8px; -} - -.login-input-btn text { - font-size: 13px; - color: white; - font-weight: 600; -} - -// 欢迎卡片 .welcome-card { background: var(--glass-bg); border: 1px solid var(--glass-border); - border-radius: 14px; + border-radius: var(--radius-lg); padding: 16px; margin-bottom: 16px; + box-shadow: var(--card-shadow, none); } +.welcome-head { + display: flex; + align-items: center; + gap: 6px; + margin-bottom: 12px; -.welcome-icon { - font-size: 20px; - display: block; - margin-bottom: 6px; + .welcome-text { + font-size: 13px; + font-weight: 600; + color: var(--text-primary); + line-height: 1.5; + } } - -.welcome-text { - font-size: 13px; - color: var(--text-tertiary); - display: block; - margin-bottom: 10px; -} - .suggest-list { display: flex; flex-direction: column; - gap: 6px; + gap: 8px; } - .suggest-item { - padding: 8px 12px; - background: rgba(124, 77, 255, 0.08); - border-radius: 8px; - font-size: 12px; + padding: 11px 14px; + border-radius: var(--radius-md); + background: var(--bg-primary); + border: 1px solid var(--glass-border); + font-size: 13px; color: var(--text-secondary); + line-height: 1.5; + transition: all 0.2s ease; } - -// 消息列表 -.msg-list { - flex: 1; - overflow-y: auto; - padding-bottom: 10px; -} +.suggest-item:active { border-color: var(--color-brand); color: var(--color-brand); } .chat-msg { display: flex; - gap: 10px; + gap: 8px; margin-bottom: 14px; -} -.chat-msg.user { - flex-direction: row-reverse; -} + &.assistant .msg-content { align-items: flex-start; } -.chat-msg.assistant { - flex-direction: row; -} + .msg-content { + max-width: 82%; + display: flex; + flex-direction: column; + } -.msg-content { - max-width: 82%; + &.user { + justify-content: flex-end; + + .msg-content { align-items: flex-end; } + .bubble { + background: linear-gradient(135deg, var(--color-brand), var(--color-brand-light)); + color: #fff; + border-radius: 16px 16px 4px 16px; + } + } + + &.assistant .bubble { + background: var(--glass-bg); + border: 1px solid var(--glass-border); + color: var(--text-primary); + border-radius: 16px 16px 16px 4px; + } } .bubble { - padding: 12px 16px; - border-radius: 16px; + padding: 12px 14px; font-size: 14px; - line-height: 1.6; - white-space: pre-wrap; + line-height: 1.7; + word-break: break-word; } -.chat-msg.assistant .bubble { - background: var(--glass-bg); - border: 1px solid var(--glass-border); - color: var(--text-primary); - border-bottom-left-radius: 4px; -} - -.chat-msg.user .bubble { - background: linear-gradient(135deg, rgba(124, 77, 255, 0.3), rgba(124, 77, 255, 0.15)); - border: 1px solid rgba(124, 77, 255, 0.15); - color: white; - border-bottom-right-radius: 4px; -} - -// 加载动画 .loading-dots { display: flex; - gap: 4px; - padding: 14px 18px; + gap: 5px; + align-items: center; + padding: 16px 14px; + + .dot { + width: 7px; + height: 7px; + border-radius: 50%; + background: var(--color-brand); + animation: dotBounce 1.2s infinite ease-in-out; + + &:nth-child(2) { animation-delay: 0.15s; } + &:nth-child(3) { animation-delay: 0.3s; } + } } -.dot { - width: 6px; - height: 6px; - border-radius: 50%; - background: rgba(255, 255, 255, 0.4); - animation: blink 1.4s infinite; +@keyframes dotBounce { + 0%, 60%, 100% { transform: translateY(0); opacity: 0.4; } + 30% { transform: translateY(-5px); opacity: 1; } } -.dot:nth-child(2) { animation-delay: 0.2s; } -.dot:nth-child(3) { animation-delay: 0.4s; } - -@keyframes blink { - 0%, 20% { opacity: 0; transform: scale(0.6); } - 50% { opacity: 1; transform: scale(1); } - 100% { opacity: 0; transform: scale(0.6); } -} - -// 输入区 +/* 输入区 */ .chat-input-area { - padding: 12px 0 30px; - background: var(--bg-primary); + flex-shrink: 0; + padding: 10px 0 12px; +} + +.guest-hint { + display: block; + text-align: center; + font-size: 11px; + color: var(--text-muted); + margin-top: 8px; } .chat-input { - background: var(--glass-bg); - border: 1px solid var(--glass-border); - border-radius: 14px; - padding: 10px 14px; display: flex; align-items: center; gap: 10px; + background: var(--glass-bg); + border: 1px solid var(--glass-border); + border-radius: var(--radius-full); + padding: 6px 6px 6px 18px; } .input-field { flex: 1; - height: 24px; + height: 38px; font-size: 14px; color: var(--text-primary); - background: none; - border: none; - outline: none; -} - -.input-field::placeholder { - color: var(--text-muted); + background: transparent; } .send-btn { - width: 36px; - height: 36px; + width: 38px; + height: 38px; border-radius: 50%; - background: linear-gradient(135deg, #7c4dff, #b388ff); + background: linear-gradient(135deg, var(--color-brand), var(--color-brand-light)); display: flex; align-items: center; justify-content: center; - color: white; - box-shadow: 0 0 20px rgba(124, 77, 255, 0.2); + flex-shrink: 0; + transition: opacity 0.2s ease; + + &.disabled { opacity: 0.45; } } -.send-btn text { - font-size: 16px; +/* 用完额度引导 */ +.login-guide { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + padding: 14px 16px; + border-radius: var(--radius-lg); + background: linear-gradient(135deg, var(--color-brand-bg), rgba(139, 92, 246, 0.06)); + border: 1px solid var(--glass-hover-border); + + .guide-text { + flex: 1; + font-size: 12px; + color: var(--text-secondary); + line-height: 1.6; + } + .guide-btn { + padding: 8px 14px; + border-radius: var(--radius-full); + background: linear-gradient(135deg, var(--color-brand), var(--color-brand-light)); + color: #fff; + font-size: 12px; + font-weight: 600; + flex-shrink: 0; + } } diff --git a/client/src/pages/detail/detail.vue b/client/src/pages/detail/detail.vue index e821aae..f507536 100644 --- a/client/src/pages/detail/detail.vue +++ b/client/src/pages/detail/detail.vue @@ -1,29 +1,35 @@ diff --git a/client/src/pages/dimension/dimension.vue b/client/src/pages/dimension/dimension.vue index 26eeec3..aa9a842 100644 --- a/client/src/pages/dimension/dimension.vue +++ b/client/src/pages/dimension/dimension.vue @@ -2,72 +2,96 @@ - - ← 返回 + + + + 返回 + - + - {{ currentDim?.icon }} - {{ currentDim?.name }} - {{ bannerDesc }} - - + - 探索进度 {{ progress }}% · 已完成 {{ readCount }}/{{ totalCount }} 篇 + {{ litCount }}/{{ totalCount }} 颗星球已点亮 · {{ litPercent }}% - - - - {{ item.icon || '📄' }} + + + + - - {{ item.title }} - {{ item.desc }} - - 📖 {{ item.readTime || 5 }} 分钟 - ⭐ 已收藏 - 🔖 {{ item.collectCount || 0 }} 人收藏 - - {{ item.isPremium ? 'Pro' : '免费' }} - + + {{ item.title }} + {{ item.desc }} + + 已点亮 + {{ item.readTime }} 分钟 + 含检测题 + + + + + + + 这片星域还没有星球 + 内容正在扩充中,先去别的星域逛逛 - 加载中... + + @@ -185,107 +154,148 @@ onShareAppMessage(() => ({ .status-bar-placeholder { height: 44px; } +.nav-row { padding-bottom: 12px; } .back-btn { - color: rgba(255,255,255,0.4); - font-size: 14px; - display: flex; + display: inline-flex; align-items: center; - gap: 6px; - padding: 10px 0 14px; + gap: 4px; + padding: 8px 14px 8px 10px; + border-radius: var(--radius-full); + background: var(--glass-bg); + border: 1px solid var(--glass-border); + font-size: 13px; + color: var(--text-secondary); } .dim-banner { - border-radius: 18px; - padding: 24px 20px; - margin-bottom: 20px; - background: linear-gradient(135deg, rgba(124,77,255,0.1), rgba(0,0,0,0.3)); - border: 1px solid rgba(124,77,255,0.12); - position: relative; - overflow: hidden; -} -.dim-banner-icon { font-size: 28px; display: block; margin-bottom: 8px; } -.dim-banner-title { font-size: 22px; color: var(--text-primary); display: block; margin-bottom: 6px; } -.dim-banner-desc { - font-size: 12px; - color: rgba(255,255,255,0.4); - line-height: 1.6; - display: block; + border-radius: var(--radius-lg); + padding: 18px 16px; + margin-bottom: 16px; + background: var(--glass-bg); + border: 1.5px solid var(--glass-border); + box-shadow: var(--card-shadow, none); } -.progress-track { - height: 3px; - background: var(--glass-bg); - border-radius: 2px; - margin-top: 16px; - overflow: hidden; -} -.progress-fill { - height: 100%; - background: linear-gradient(90deg, #b388ff, #7c4dff); - border-radius: 2px; -} -.progress-label { - font-size: 11px; - color: rgba(255,255,255,0.2); - margin-top: 8px; - display: block; -} - -.knowledge-item { - border-radius: 14px; - padding: 16px; - margin-bottom: 10px; - background: var(--glass-bg); - border: 1px solid var(--glass-border); +.banner-top { display: flex; - gap: 14px; - align-items: flex-start; + align-items: center; + gap: 12px; + margin-bottom: 12px; } - -.k-icon { +.dim-icon { width: 44px; height: 44px; - border-radius: 12px; - flex-shrink: 0; + border-radius: 14px; display: flex; align-items: center; justify-content: center; - font-size: 18px; - border: 1px solid var(--glass-border); + flex-shrink: 0; } -.k-info { flex: 1; } -.k-title { - font-size: 14px; - color: rgba(255,255,255,0.85); - font-weight: 500; +.banner-info { flex: 1; min-width: 0; } +.dim-banner-title { display: block; - margin-bottom: 4px; + font-size: 20px; + font-weight: 700; + color: var(--text-primary); + margin-bottom: 3px; } -.k-desc { - font-size: 11px; - color: rgba(255,255,255,0.3); +.dim-banner-desc { + font-size: 12px; + color: var(--text-tertiary); line-height: 1.5; - margin-bottom: 8px; - display: block; } -.k-meta { +.progress-label { + font-size: 11px; + color: var(--text-tertiary); +} + +.planet-item { display: flex; + align-items: center; gap: 12px; + border-radius: var(--radius-lg); + padding: 14px; + margin-bottom: 10px; + background: var(--glass-bg); + border: 1px solid var(--glass-border); + box-shadow: var(--card-shadow, none); + transition: transform 0.2s ease; +} +.planet-item:active { transform: scale(0.98); } + +.p-icon { + width: 40px; height: 40px; + border-radius: 13px; + border: 1.5px dashed var(--glass-border); + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + + &.lit { border-style: solid; } +} + +.p-info { flex: 1; min-width: 0; } +.p-title { + display: block; + font-size: 14px; + color: var(--text-primary); + font-weight: 600; + line-height: 1.5; + margin-bottom: 3px; +} +.p-desc { + display: block; + font-size: 11px; + color: var(--text-tertiary); + line-height: 1.5; + margin-bottom: 6px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.p-meta { + display: flex; + gap: 8px; align-items: center; font-size: 10px; - color: rgba(255,255,255,0.15); + color: var(--text-muted); } -.k-badge { - font-size: 10px; - padding: 2px 10px; - border-radius: 6px; - font-weight: 500; +.p-lit { + font-weight: 600; + padding: 2px 8px; + border-radius: var(--radius-full); +} +.p-quiz { + padding: 2px 8px; + border-radius: var(--radius-full); + background: var(--bg-tertiary); +} + +.empty-state { + display: flex; + flex-direction: column; + align-items: center; + padding: 50px 0 30px; + gap: 8px; + + .empty-title { + font-size: 15px; + font-weight: 600; + color: var(--text-secondary); + margin-top: 8px; + } + .empty-desc { + font-size: 12px; + color: var(--text-muted); + } } -.k-badge.free { background: rgba(76,175,80,0.12); color: #66bb6a; } -.k-badge.pro { background: rgba(255,152,0,0.12); color: #ffa726; } .loading-state { text-align: center; padding: 40px 0; - color: rgba(255,255,255,0.2); + color: var(--text-muted); + font-size: 13px; } - \ No newline at end of file + +.bottom-spacer { height: 20px; } + diff --git a/client/src/pages/favorites/favorites.vue b/client/src/pages/favorites/favorites.vue index 715d337..1ed5876 100644 --- a/client/src/pages/favorites/favorites.vue +++ b/client/src/pages/favorites/favorites.vue @@ -34,7 +34,7 @@ - ⭐ + 还没有收藏 你还没有收藏任何内容 登录后可收藏喜欢的 AI 知识 去首页发现有趣的 AI 知识吧 diff --git a/client/src/pages/feedback/feedback.vue b/client/src/pages/feedback/feedback.vue index 835e293..b62a225 100644 --- a/client/src/pages/feedback/feedback.vue +++ b/client/src/pages/feedback/feedback.vue @@ -112,7 +112,7 @@ const userStore = useUserStore() // 反馈类型 const feedbackTypes = [ { value: 'bug', name: '问题报告', icon: '🐛' }, - { value: 'feature', name: '功能建议', icon: '💡' }, + { value: 'feature', name: '功能建议', icon: '★' }, { value: 'content', name: '内容纠错', icon: '📝' }, { value: 'other', name: '其他', icon: '💬' } ] @@ -147,7 +147,7 @@ function statusLabel(status) { function typeLabel(type) { const map = { bug: '🐛 问题报告', - feature: '💡 功能建议', + feature: '功能建议', content: '📝 内容纠错', other: '💬 其他' } diff --git a/client/src/pages/index/index.vue b/client/src/pages/index/index.vue index 05b8f68..a68936f 100644 --- a/client/src/pages/index/index.vue +++ b/client/src/pages/index/index.vue @@ -1,75 +1,93 @@ @@ -178,15 +236,13 @@ onShareAppMessage(() => ({ background: var(--bg-primary); } -.status-bar-placeholder { - height: 44px; -} +.status-bar-placeholder { height: 44px; } .header { display: flex; justify-content: space-between; align-items: center; - padding: 6px 0 20px; + padding: 6px 0 18px; } .brand { @@ -196,38 +252,32 @@ onShareAppMessage(() => ({ } .brand-icon { - width: 36px; - height: 36px; - border-radius: 10px; - background: linear-gradient(135deg, rgba(124,77,255,0.3), rgba(0,188,212,0.2)); - border: 1px solid rgba(124,77,255,0.2); + width: 38px; + height: 38px; + border-radius: 12px; + background: linear-gradient(135deg, var(--color-brand), #8b5cf6); display: flex; align-items: center; justify-content: center; - font-size: 18px; - box-shadow: 0 0 20px rgba(124,77,255,0.1); + box-shadow: 0 4px 14px var(--color-brand-glow); } -.brand-text { - display: flex; - flex-direction: column; -} +.brand-text { display: flex; flex-direction: column; } .brand-text .title { font-size: 20px; color: var(--text-primary); font-weight: 700; letter-spacing: 1px; + line-height: 1.2; } .brand-text .subtitle { font-size: 11px; - color: var(--text-muted); - letter-spacing: 2px; + color: var(--text-tertiary); + letter-spacing: 1.5px; + margin-top: 2px; } -.header-actions { - display: flex; - gap: 10px; -} +.header-actions { display: flex; gap: 10px; } .icon-btn { width: 36px; height: 36px; border-radius: 50%; @@ -236,167 +286,185 @@ onShareAppMessage(() => ({ display: flex; align-items: center; justify-content: center; - font-size: 15px; } -.greeting { - margin-bottom: 20px; - padding: 24px 20px; - border-radius: 18px; - background: linear-gradient(135deg, rgba(99,102,241,0.08), rgba(139,92,246,0.04)); - border: 1px solid rgba(99,102,241,0.1); +/* streak */ +.streak-bar { + display: flex; + align-items: center; + gap: 8px; + padding: 10px 14px; + border-radius: var(--radius-md); + background: linear-gradient(135deg, rgba(229, 28, 28, 0.08), rgba(223, 119, 0, 0.06)); + border: 1px solid rgba(229, 28, 28, 0.15); + margin-bottom: 12px; } -.greeting-title { - font-size: 26px; - color: var(--text-primary); - font-weight: 700; -} -.greeting-highlight { - font-size: 26px; - font-weight: 700; - background: linear-gradient(135deg, #b388ff, #7c4dff); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; -} -.greeting-desc { - display: block; +.streak-text { font-size: 13px; + font-weight: 700; + color: var(--dim5-color); +} +.streak-sub { + flex: 1; + font-size: 11px; color: var(--text-tertiary); - margin-top: 4px; +} +.streak-go { + width: 22px; height: 22px; + border-radius: 50%; + background: var(--dim5-color); + display: flex; + align-items: center; + justify-content: center; } -.search-bar { +/* 继续探索 */ +.resume-card { + display: flex; + align-items: center; + gap: 12px; + padding: 14px 16px; + border-radius: var(--radius-lg); background: var(--glass-bg); border: 1px solid var(--glass-border); - border-radius: 14px; - padding: 12px 16px; + box-shadow: var(--card-shadow, none); + margin-bottom: 12px; +} +.resume-icon { + width: 38px; height: 38px; + border-radius: 12px; + background: var(--color-brand-bg); + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} +.resume-info { flex: 1; min-width: 0; } +.resume-label { + font-size: 11px; + color: var(--text-tertiary); + display: block; + margin-bottom: 2px; +} +.resume-title { + font-size: 14px; + font-weight: 600; + color: var(--text-primary); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: block; +} + +/* 搜索 */ +.search-bar { display: flex; align-items: center; gap: 10px; - margin-bottom: 24px; - backdrop-filter: blur(10px); - -webkit-backdrop-filter: blur(10px); + padding: 12px 16px; + border-radius: var(--radius-full); + background: var(--glass-bg); + border: 1px solid var(--glass-border); + margin-bottom: 6px; } -.search-icon { color: var(--text-muted); } -.search-placeholder { color: var(--text-muted); font-size: 14px; } - -.section-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 14px; - padding: 8px 12px; - border-radius: 10px; - background: rgba(99,102,241,0.04); -} -.section-title { - font-size: 17px; - color: var(--text-primary); - font-weight: 600; - letter-spacing: 0.5px; -} -.section-more { - font-size: 12px; +.search-placeholder { + font-size: 13px; color: var(--text-muted); } +/* 星域网格 */ .dim-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; - margin-bottom: 28px; } - .dim-card { - border-radius: 18px; - padding: 20px 16px; + background: var(--glass-bg); border: 1px solid var(--glass-border); - backdrop-filter: blur(10px); - -webkit-backdrop-filter: blur(10px); -} -.dim-full { - grid-column: 1 / -1; + border-radius: var(--radius-lg); + padding: 14px; + box-shadow: var(--card-shadow, none); + transition: transform 0.2s ease; } +.dim-card:active { transform: scale(0.97); } +.dim-top { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 10px; +} .dim-icon { - width: 42px; height: 42px; - border-radius: 12px; + width: 34px; height: 34px; + border-radius: 11px; display: flex; align-items: center; justify-content: center; - font-size: 20px; - margin-bottom: 14px; } - .dim-name { - font-size: 15px; - font-weight: 600; - margin-bottom: 4px; - letter-spacing: 0.5px; display: block; + font-size: 15px; + font-weight: 700; + color: var(--text-primary); + margin-bottom: 3px; } .dim-desc { - font-size: 12px; + display: block; + font-size: 11px; color: var(--text-tertiary); line-height: 1.5; - display: block; + margin-bottom: 10px; +} +.dim-foot { + display: flex; + align-items: center; + justify-content: space-between; +} +.dim-lit { + font-size: 10px; + font-weight: 600; + padding: 3px 8px; + border-radius: var(--radius-full); } .dim-count { - font-size: 11px; + font-size: 10px; color: var(--text-muted); - margin-top: 10px; - display: block; } +/* 快讯 */ .news-card { - border-radius: 14px; - padding: 14px 16px; - margin-bottom: 10px; background: var(--glass-bg); border: 1px solid var(--glass-border); - backdrop-filter: blur(10px); - -webkit-backdrop-filter: blur(10px); + border-radius: var(--radius-md); + padding: 14px 16px; + margin-bottom: 10px; + box-shadow: var(--card-shadow, none); } - .news-tag { display: inline-block; font-size: 10px; - padding: 2px 10px; - border-radius: 6px; + font-weight: 600; + padding: 2px 8px; + border-radius: var(--radius-full); margin-bottom: 8px; - font-weight: 500; } -.news-tag.hot { - background: rgba(239,83,80,0.12); - color: #ef5350; -} -.news-tag.new { - background: rgba(0,188,212,0.12); - color: #4dd0e1; -} -.news-tag.pick { - background: rgba(124,77,255,0.12); - color: #b388ff; -} - +.news-tag.hot { background: var(--color-hot-bg); color: var(--color-hot); } +.news-tag.new { background: var(--color-new-bg); color: var(--color-new); } +.news-tag.pick { background: var(--color-pick-bg); color: var(--color-pick); } .news-title { + display: block; font-size: 14px; + font-weight: 600; color: var(--text-primary); line-height: 1.5; margin-bottom: 8px; - font-weight: 500; - display: block; } - .news-meta { display: flex; - gap: 16px; + justify-content: space-between; font-size: 11px; color: var(--text-muted); } -.bottom-spacer { - height: 40px; -} - \ No newline at end of file +.bottom-spacer { height: 30px; } + diff --git a/client/src/pages/map/map.vue b/client/src/pages/map/map.vue deleted file mode 100644 index d6c85fe..0000000 --- a/client/src/pages/map/map.vue +++ /dev/null @@ -1,106 +0,0 @@ - - - - - diff --git a/client/src/pages/map/quiz.vue b/client/src/pages/map/quiz.vue deleted file mode 100644 index 44e54bc..0000000 --- a/client/src/pages/map/quiz.vue +++ /dev/null @@ -1,89 +0,0 @@ - - - - - diff --git a/client/src/pages/news/news.vue b/client/src/pages/news/news.vue index 685f993..3c7dab4 100644 --- a/client/src/pages/news/news.vue +++ b/client/src/pages/news/news.vue @@ -39,7 +39,7 @@ {{ news.viewCount || 0 }} 次 - 🔥 + 热 {{ news.hotCount || 0 }} @@ -110,7 +110,8 @@ const heroBg = computed(() => { }) const heroEmoji = computed(() => { - return { product: '🚀', paper: '📄', tool: '🔧', company: '🏢' }[news.value.category || 'product'] || '📰' + const map = { product: '产品', paper: '论文', tool: '工具', company: '公司' } + return map[news.value.category || 'product'] || '资讯' }) const categoryLabel = computed(() => { diff --git a/client/src/pages/profile/profile.vue b/client/src/pages/profile/profile.vue index 4931238..7a59461 100644 --- a/client/src/pages/profile/profile.vue +++ b/client/src/pages/profile/profile.vue @@ -2,7 +2,7 @@ - + - - {{ (userStore.userInfo?.nickName || '用').charAt(0) }} - + + + + + + {{ userStore.userInfo?.nickName || '探索者' }} + {{ profileSubText }} + + + + {{ stats.streak }} 天 + + + + + + + {{ stats?.totalLit || 0 }} + 点亮星球 + + + {{ stats?.streak || 0 }} + 连续天数 + + + {{ collectedCount }} + 收藏知识 + + + + + + + + + + {{ dim.name }} + + + + {{ stats.litByDim?.[dim.id] || 0 }}/{{ byDim[dim.id] || 0 }} - {{ userStore.userInfo?.nickName || '游客' }} - - {{ subscriptionBadge }} · 已收藏 {{ collectedCount }} 篇 - @@ -26,14 +60,11 @@ {{ planTitle }} {{ planDesc }} - - - {{ planExpiryText }} - + {{ planExpiryText }} @@ -42,55 +73,52 @@ - - 🤖 AI 问答配额 + + + + AI 问答 · 今日 + - - {{ quotaUsed }} / {{ quotaTotal }} - 今日使用 - - 🎁 分享得次数 + + 剩余 {{ quotaInfo.remainingQuota }} 次 + 分享 +5 次 + - ⭐ + 我的收藏 {{ collectedCount }} - → + - 📊 + 学习进度 - → + - 🏆 + 成就 - → + - 🥇 + 排行榜 - → + - 💬 + 意见反馈 - → - - - ℹ️ - 关于 AI 维度 - → + - ⚙️ + 设置 - → + @@ -99,42 +127,98 @@ 微信一键登录 - 暂不登录,先体验 - 退出登录 + 退出登录 - 宇之然 AI 维度 v1.0.0 + 宇之然 AI 维度 v{{ versionText }} diff --git a/client/src/pages/search/search.vue b/client/src/pages/search/search.vue index 71b01ed..3627fdd 100644 --- a/client/src/pages/search/search.vue +++ b/client/src/pages/search/search.vue @@ -21,7 +21,7 @@ @confirm="doSearch" confirm-type="search" /> - 🔍 + ✕ @@ -33,7 +33,7 @@ - 🔍 + 没有找到相关知识 输入关键词搜索 AI 知识 支持按标题、摘要、标签搜索 diff --git a/client/src/pages/settings/settings.vue b/client/src/pages/settings/settings.vue index 655fcdb..5ec59eb 100644 --- a/client/src/pages/settings/settings.vue +++ b/client/src/pages/settings/settings.vue @@ -11,7 +11,7 @@ 偏好设置 - 🔔 + 铃 推送通知 接收每日 AI 趋势推送 diff --git a/client/src/pages/trend/trend.vue b/client/src/pages/trend/trend.vue index c50479c..f0e1da9 100644 --- a/client/src/pages/trend/trend.vue +++ b/client/src/pages/trend/trend.vue @@ -45,7 +45,7 @@ {{ formatDate(item.newsDate) }} - 🔥 {{ item.hotCount }} + {{ item.hotCount }} 人觉得热 👁️ {{ item.viewCount || 0 }} @@ -56,7 +56,7 @@ 加载中... - 📡 + 暂时没有快讯 暂无趋势资讯 稍后再来看最新 AI 动态 @@ -72,7 +72,7 @@ import { trendApi } from '@/utils/api' const filters = ref([ { icon: '📰', text: '全部' }, - { icon: '🚀', text: '产品' }, + { icon: 'rocket', text: '产品' }, { icon: '📄', text: '论文' }, { icon: '🔧', text: '工具' }, { icon: '🏢', text: '公司' } @@ -116,9 +116,9 @@ async function fetchTrends() { } function getTagText(item) { - if (item.hot) return '🔥 热门' - if (item.picked) return '📌 精选' - if (item.category === '产品') return '🚀 产品' + if (item.hot) return '热门' + if (item.picked) return '精选' + if (item.category === '产品') return '产品' if (item.category === '论文') return '📄 论文' if (item.category === '工具') return '🔧 工具' if (item.category === '公司') return '🏢 公司' @@ -311,7 +311,7 @@ onShareAppMessage(() => ({ .card-tag.pick { background: rgba(124, 77, 255, 0.12); - color: #b388ff; + color: var(--color-brand); } .card-tag.product { @@ -321,7 +321,7 @@ onShareAppMessage(() => ({ .card-tag.paper { background: rgba(179, 136, 255, 0.12); - color: #b388ff; + color: var(--color-brand); } .card-tag.tool { diff --git a/client/src/static/icons/arrow-gray.png b/client/src/static/icons/arrow-gray.png new file mode 100644 index 0000000..2c1ddff Binary files /dev/null and b/client/src/static/icons/arrow-gray.png differ diff --git a/client/src/static/icons/arrow-white.png b/client/src/static/icons/arrow-white.png new file mode 100644 index 0000000..8faeb60 Binary files /dev/null and b/client/src/static/icons/arrow-white.png differ diff --git a/client/src/static/icons/arrow.png b/client/src/static/icons/arrow.png new file mode 100644 index 0000000..4e28b52 Binary files /dev/null and b/client/src/static/icons/arrow.png differ diff --git a/client/src/static/icons/back-gray.png b/client/src/static/icons/back-gray.png new file mode 100644 index 0000000..8d046f3 Binary files /dev/null and b/client/src/static/icons/back-gray.png differ diff --git a/client/src/static/icons/back-white.png b/client/src/static/icons/back-white.png new file mode 100644 index 0000000..8ed9a5d Binary files /dev/null and b/client/src/static/icons/back-white.png differ diff --git a/client/src/static/icons/back.png b/client/src/static/icons/back.png new file mode 100644 index 0000000..934d3cf Binary files /dev/null and b/client/src/static/icons/back.png differ diff --git a/client/src/static/icons/book-gray.png b/client/src/static/icons/book-gray.png new file mode 100644 index 0000000..0638e53 Binary files /dev/null and b/client/src/static/icons/book-gray.png differ diff --git a/client/src/static/icons/book-white.png b/client/src/static/icons/book-white.png new file mode 100644 index 0000000..cf63098 Binary files /dev/null and b/client/src/static/icons/book-white.png differ diff --git a/client/src/static/icons/book.png b/client/src/static/icons/book.png new file mode 100644 index 0000000..3d36770 Binary files /dev/null and b/client/src/static/icons/book.png differ diff --git a/client/src/static/icons/bulb-gray.png b/client/src/static/icons/bulb-gray.png new file mode 100644 index 0000000..51882f0 Binary files /dev/null and b/client/src/static/icons/bulb-gray.png differ diff --git a/client/src/static/icons/bulb-white.png b/client/src/static/icons/bulb-white.png new file mode 100644 index 0000000..cee3a46 Binary files /dev/null and b/client/src/static/icons/bulb-white.png differ diff --git a/client/src/static/icons/bulb.png b/client/src/static/icons/bulb.png new file mode 100644 index 0000000..7d43858 Binary files /dev/null and b/client/src/static/icons/bulb.png differ diff --git a/client/src/static/icons/chat-gray.png b/client/src/static/icons/chat-gray.png new file mode 100644 index 0000000..03bda6a Binary files /dev/null and b/client/src/static/icons/chat-gray.png differ diff --git a/client/src/static/icons/chat-white.png b/client/src/static/icons/chat-white.png new file mode 100644 index 0000000..e68cfb9 Binary files /dev/null and b/client/src/static/icons/chat-white.png differ diff --git a/client/src/static/icons/chat.png b/client/src/static/icons/chat.png index 251a83e..8256c06 100644 Binary files a/client/src/static/icons/chat.png and b/client/src/static/icons/chat.png differ diff --git a/client/src/static/icons/check-gray.png b/client/src/static/icons/check-gray.png new file mode 100644 index 0000000..f93b9f5 Binary files /dev/null and b/client/src/static/icons/check-gray.png differ diff --git a/client/src/static/icons/check-green.png b/client/src/static/icons/check-green.png new file mode 100644 index 0000000..eb0e212 Binary files /dev/null and b/client/src/static/icons/check-green.png differ diff --git a/client/src/static/icons/check-white.png b/client/src/static/icons/check-white.png new file mode 100644 index 0000000..4a11af4 Binary files /dev/null and b/client/src/static/icons/check-white.png differ diff --git a/client/src/static/icons/check.png b/client/src/static/icons/check.png new file mode 100644 index 0000000..180d36f Binary files /dev/null and b/client/src/static/icons/check.png differ diff --git a/client/src/static/icons/clock-gray.png b/client/src/static/icons/clock-gray.png new file mode 100644 index 0000000..5caa9c3 Binary files /dev/null and b/client/src/static/icons/clock-gray.png differ diff --git a/client/src/static/icons/clock-white.png b/client/src/static/icons/clock-white.png new file mode 100644 index 0000000..9052d77 Binary files /dev/null and b/client/src/static/icons/clock-white.png differ diff --git a/client/src/static/icons/clock.png b/client/src/static/icons/clock.png new file mode 100644 index 0000000..21463ae Binary files /dev/null and b/client/src/static/icons/clock.png differ diff --git a/client/src/static/icons/feedback-gray.png b/client/src/static/icons/feedback-gray.png new file mode 100644 index 0000000..ca02855 Binary files /dev/null and b/client/src/static/icons/feedback-gray.png differ diff --git a/client/src/static/icons/feedback-white.png b/client/src/static/icons/feedback-white.png new file mode 100644 index 0000000..b840f6f Binary files /dev/null and b/client/src/static/icons/feedback-white.png differ diff --git a/client/src/static/icons/feedback.png b/client/src/static/icons/feedback.png new file mode 100644 index 0000000..7e3b1de Binary files /dev/null and b/client/src/static/icons/feedback.png differ diff --git a/client/src/static/icons/flame-gray.png b/client/src/static/icons/flame-gray.png new file mode 100644 index 0000000..0414fc3 Binary files /dev/null and b/client/src/static/icons/flame-gray.png differ diff --git a/client/src/static/icons/flame-white.png b/client/src/static/icons/flame-white.png new file mode 100644 index 0000000..529dabe Binary files /dev/null and b/client/src/static/icons/flame-white.png differ diff --git a/client/src/static/icons/flame.png b/client/src/static/icons/flame.png new file mode 100644 index 0000000..6f77b55 Binary files /dev/null and b/client/src/static/icons/flame.png differ diff --git a/client/src/static/icons/gift-gray.png b/client/src/static/icons/gift-gray.png new file mode 100644 index 0000000..4ccb65a Binary files /dev/null and b/client/src/static/icons/gift-gray.png differ diff --git a/client/src/static/icons/gift-white.png b/client/src/static/icons/gift-white.png new file mode 100644 index 0000000..406ee04 Binary files /dev/null and b/client/src/static/icons/gift-white.png differ diff --git a/client/src/static/icons/gift.png b/client/src/static/icons/gift.png new file mode 100644 index 0000000..8de8f3f Binary files /dev/null and b/client/src/static/icons/gift.png differ diff --git a/client/src/static/icons/lock-gray.png b/client/src/static/icons/lock-gray.png new file mode 100644 index 0000000..0caa94a Binary files /dev/null and b/client/src/static/icons/lock-gray.png differ diff --git a/client/src/static/icons/lock-white.png b/client/src/static/icons/lock-white.png new file mode 100644 index 0000000..2989880 Binary files /dev/null and b/client/src/static/icons/lock-white.png differ diff --git a/client/src/static/icons/lock.png b/client/src/static/icons/lock.png new file mode 100644 index 0000000..49e00c1 Binary files /dev/null and b/client/src/static/icons/lock.png differ diff --git a/client/src/static/icons/notice-gray.png b/client/src/static/icons/notice-gray.png new file mode 100644 index 0000000..d86bfa0 Binary files /dev/null and b/client/src/static/icons/notice-gray.png differ diff --git a/client/src/static/icons/notice-white.png b/client/src/static/icons/notice-white.png new file mode 100644 index 0000000..3be03d1 Binary files /dev/null and b/client/src/static/icons/notice-white.png differ diff --git a/client/src/static/icons/notice.png b/client/src/static/icons/notice.png new file mode 100644 index 0000000..743c9a7 Binary files /dev/null and b/client/src/static/icons/notice.png differ diff --git a/client/src/static/icons/planet-gray.png b/client/src/static/icons/planet-gray.png new file mode 100644 index 0000000..42310da Binary files /dev/null and b/client/src/static/icons/planet-gray.png differ diff --git a/client/src/static/icons/planet-white.png b/client/src/static/icons/planet-white.png new file mode 100644 index 0000000..210078e Binary files /dev/null and b/client/src/static/icons/planet-white.png differ diff --git a/client/src/static/icons/planet.png b/client/src/static/icons/planet.png new file mode 100644 index 0000000..42d9fca Binary files /dev/null and b/client/src/static/icons/planet.png differ diff --git a/client/src/static/icons/rocket-gray.png b/client/src/static/icons/rocket-gray.png new file mode 100644 index 0000000..b4604ce Binary files /dev/null and b/client/src/static/icons/rocket-gray.png differ diff --git a/client/src/static/icons/rocket-white.png b/client/src/static/icons/rocket-white.png new file mode 100644 index 0000000..d3973f8 Binary files /dev/null and b/client/src/static/icons/rocket-white.png differ diff --git a/client/src/static/icons/rocket.png b/client/src/static/icons/rocket.png new file mode 100644 index 0000000..e3acd64 Binary files /dev/null and b/client/src/static/icons/rocket.png differ diff --git a/client/src/static/icons/search-gray.png b/client/src/static/icons/search-gray.png new file mode 100644 index 0000000..c27c634 Binary files /dev/null and b/client/src/static/icons/search-gray.png differ diff --git a/client/src/static/icons/search-white.png b/client/src/static/icons/search-white.png new file mode 100644 index 0000000..fc72464 Binary files /dev/null and b/client/src/static/icons/search-white.png differ diff --git a/client/src/static/icons/search.png b/client/src/static/icons/search.png new file mode 100644 index 0000000..c1353ef Binary files /dev/null and b/client/src/static/icons/search.png differ diff --git a/client/src/static/icons/send-gray.png b/client/src/static/icons/send-gray.png new file mode 100644 index 0000000..36305e0 Binary files /dev/null and b/client/src/static/icons/send-gray.png differ diff --git a/client/src/static/icons/send-white.png b/client/src/static/icons/send-white.png new file mode 100644 index 0000000..b0ea1e9 Binary files /dev/null and b/client/src/static/icons/send-white.png differ diff --git a/client/src/static/icons/send.png b/client/src/static/icons/send.png new file mode 100644 index 0000000..ece04ac Binary files /dev/null and b/client/src/static/icons/send.png differ diff --git a/client/src/static/icons/settings-gray.png b/client/src/static/icons/settings-gray.png new file mode 100644 index 0000000..cab09a1 Binary files /dev/null and b/client/src/static/icons/settings-gray.png differ diff --git a/client/src/static/icons/settings-white.png b/client/src/static/icons/settings-white.png new file mode 100644 index 0000000..21199e3 Binary files /dev/null and b/client/src/static/icons/settings-white.png differ diff --git a/client/src/static/icons/settings.png b/client/src/static/icons/settings.png new file mode 100644 index 0000000..60e44a4 Binary files /dev/null and b/client/src/static/icons/settings.png differ diff --git a/client/src/static/icons/share-gray.png b/client/src/static/icons/share-gray.png new file mode 100644 index 0000000..3bb9e6e Binary files /dev/null and b/client/src/static/icons/share-gray.png differ diff --git a/client/src/static/icons/share-white.png b/client/src/static/icons/share-white.png new file mode 100644 index 0000000..79e474c Binary files /dev/null and b/client/src/static/icons/share-white.png differ diff --git a/client/src/static/icons/share.png b/client/src/static/icons/share.png new file mode 100644 index 0000000..f3c52e1 Binary files /dev/null and b/client/src/static/icons/share.png differ diff --git a/client/src/static/icons/sparkle-gray.png b/client/src/static/icons/sparkle-gray.png new file mode 100644 index 0000000..ac49239 Binary files /dev/null and b/client/src/static/icons/sparkle-gray.png differ diff --git a/client/src/static/icons/sparkle-white.png b/client/src/static/icons/sparkle-white.png new file mode 100644 index 0000000..97bf983 Binary files /dev/null and b/client/src/static/icons/sparkle-white.png differ diff --git a/client/src/static/icons/sparkle.png b/client/src/static/icons/sparkle.png new file mode 100644 index 0000000..cac2ad0 Binary files /dev/null and b/client/src/static/icons/sparkle.png differ diff --git a/client/src/static/icons/star-fill-gray.png b/client/src/static/icons/star-fill-gray.png new file mode 100644 index 0000000..0b38d10 Binary files /dev/null and b/client/src/static/icons/star-fill-gray.png differ diff --git a/client/src/static/icons/star-fill-white.png b/client/src/static/icons/star-fill-white.png new file mode 100644 index 0000000..00e32ae Binary files /dev/null and b/client/src/static/icons/star-fill-white.png differ diff --git a/client/src/static/icons/star-fill.png b/client/src/static/icons/star-fill.png new file mode 100644 index 0000000..e0e8c27 Binary files /dev/null and b/client/src/static/icons/star-fill.png differ diff --git a/client/src/static/icons/star-gray.png b/client/src/static/icons/star-gray.png new file mode 100644 index 0000000..c4bc37c Binary files /dev/null and b/client/src/static/icons/star-gray.png differ diff --git a/client/src/static/icons/star-white.png b/client/src/static/icons/star-white.png new file mode 100644 index 0000000..1e8a615 Binary files /dev/null and b/client/src/static/icons/star-white.png differ diff --git a/client/src/static/icons/star.png b/client/src/static/icons/star.png new file mode 100644 index 0000000..0caba4f Binary files /dev/null and b/client/src/static/icons/star.png differ diff --git a/client/src/static/icons/trophy-gray.png b/client/src/static/icons/trophy-gray.png new file mode 100644 index 0000000..43f0643 Binary files /dev/null and b/client/src/static/icons/trophy-gray.png differ diff --git a/client/src/static/icons/trophy-white.png b/client/src/static/icons/trophy-white.png new file mode 100644 index 0000000..5af257a Binary files /dev/null and b/client/src/static/icons/trophy-white.png differ diff --git a/client/src/static/icons/trophy.png b/client/src/static/icons/trophy.png new file mode 100644 index 0000000..c1391a8 Binary files /dev/null and b/client/src/static/icons/trophy.png differ diff --git a/client/src/static/icons/user-gray.png b/client/src/static/icons/user-gray.png new file mode 100644 index 0000000..71f239a Binary files /dev/null and b/client/src/static/icons/user-gray.png differ diff --git a/client/src/static/icons/user-white.png b/client/src/static/icons/user-white.png new file mode 100644 index 0000000..95fc8d9 Binary files /dev/null and b/client/src/static/icons/user-white.png differ diff --git a/client/src/static/icons/user.png b/client/src/static/icons/user.png new file mode 100644 index 0000000..fe0dc7b Binary files /dev/null and b/client/src/static/icons/user.png differ diff --git a/client/src/styles/theme.scss b/client/src/styles/theme.scss index 0463c70..79531d0 100644 --- a/client/src/styles/theme.scss +++ b/client/src/styles/theme.scss @@ -1,25 +1,164 @@ /* ============================================ - 宇之然AI维度 — 主题系统 v3 - 亮色默认 + CSS 自定义属性切换 + 宇之然AI维度 — 主题系统 v4 + 亮色默认 + CSS 自定义属性切换(mixin 化,防重复) ============================================ */ -/* - * 注意: 此文件通过 uni.scss 注入到每个组件 - * 但全局 CSS 变量定义在 App.vue 的非 scoped