feat: v1.3.0 差异化重构——星图点亮体系

P0 修复:
- 详情页正文渲染(content 分段),71 条知识不再空白
- 问答页去登录墙:游客每日 3 次(IP 限流),登录后每日 5 次
- 修正问答配额为真正的每日重置语义

点亮闭环:
- KnowledgeLit 模型 + 服务端判题(POST /:id/quiz,答案不下发)
- /api/knowledge/stats 星域统计 + 点亮进度 + streak + litIds
- AI 批量生成 71 条读后检测题(scripts/generate-quiz.js)

设计系统 2.0:
- 70 个统一线性图标替换全部 emoji 图标
- 主题 token mixin 化,修复 H5 暗色级联 bug,MP 跟随系统(darkmode)
- 首页星域导航(进度环)、我的页学习者档案、星域列表页重写
- 硬编码色清理,误植 map 页移除

服务端加固:
- trust proxy 真实 IP、错误信息脱敏、ask 独立限流、无效 ObjectId 404
- seo.js ESM→CJS(修复容器启动)、AI 导师"维度精灵"人格化
This commit is contained in:
2026-09-12 23:39:05 +08:00
parent cbc1a587f2
commit 2a111d21c0
104 changed files with 2776 additions and 2109 deletions
+10 -2
View File
@@ -6,8 +6,8 @@
const BASE_URL = 'https://wdkj.yuzhiran.com.cn'
const DEV_URL = 'http://127.0.0.1:3001'
// 开发环境走本地后端,生产环境使用线上域名
const API_BASE = import.meta.env.DEV ? DEV_URL : BASE_URL
// 构建时可用 VITE_API_BASE 覆盖(本地 docker 验证等场景)
const API_BASE = import.meta.env.VITE_API_BASE || (import.meta.env.DEV ? DEV_URL : BASE_URL)
/**
* 通用请求封装
@@ -79,6 +79,14 @@ export const knowledgeApi = {
detail: (id) =>
request('GET', `/api/knowledge/${id}`),
/** 星域统计(公共计数 + 登录用户点亮进度) */
stats: (token) =>
request('GET', '/api/knowledge/stats', null, token || undefined),
/** 检测题作答(服务端判题,答对且登录则点亮) */
quiz: (id, optionIndex, token) =>
request('POST', `/api/knowledge/${id}/quiz`, { optionIndex }, token || undefined),
/** 收藏知识 */
collect: (id, token) =>
request('POST', `/api/knowledge/${id}/collect`, null, token),
+19 -24
View File
@@ -1,6 +1,7 @@
/**
* 维度配置 — 5 个 AI 维度的元数据
* 修改这里可以调整维度名称、颜色、图标等
* 星域配置 — 5 个 AI 知识星域的元数据
* 修改这里可以调整星域名称、颜色、图标等
* 真实计数由 /api/knowledge/stats 下发,本地不再硬编码
*/
export const DIMENSIONS = [
@@ -8,72 +9,66 @@ export const DIMENSIONS = [
id: 1,
key: 'origin',
name: 'AI 起源',
icon: '🌅',
icon: 'book',
tagline: '从图灵测试到深度学习革命',
desc: '人工智能的诞生——从图灵测试到第一代探索者',
color: 'var(--dim1-color)',
bg: 'var(--dim1-bg)',
iconBg: 'var(--dim1-icon-bg)',
border: 'var(--dim1-border)',
glow: 'var(--dim1-glow)',
articleCount: 12,
quizCount: 4
glow: 'var(--dim1-glow)'
},
{
id: 2,
key: 'development',
name: 'AI 发展',
icon: '📈',
icon: 'rocket',
tagline: 'Transformer、大模型与 Agent',
desc: '技术跃迁之路——深度学习、Transformer 和前沿突破',
color: 'var(--dim2-color)',
bg: 'var(--dim2-bg)',
iconBg: 'var(--dim2-icon-bg)',
border: 'var(--dim2-border)',
glow: 'var(--dim2-glow)',
articleCount: 18,
quizCount: 6
glow: 'var(--dim2-glow)'
},
{
id: 3,
key: 'current',
name: 'AI 当前',
icon: '🌐',
icon: 'planet',
tagline: '2026 行业全景与具身智能',
desc: '2026 年 AI 世界——大模型、Agent、人形机器人',
color: 'var(--dim3-color)',
bg: 'var(--dim3-bg)',
iconBg: 'var(--dim3-icon-bg)',
border: 'var(--dim3-border)',
glow: 'var(--dim3-glow)',
articleCount: 15,
quizCount: 5
glow: 'var(--dim3-glow)'
},
{
id: 4,
key: 'learning',
name: 'AI 学习',
icon: '🛠',
icon: 'bulb',
tagline: '提示词、RAG 与实用工具',
desc: '动手学 AI——提示词、微调、RAG 和实用工具',
color: 'var(--dim4-color)',
bg: 'var(--dim4-bg)',
iconBg: 'var(--dim4-icon-bg)',
border: 'var(--dim4-border)',
glow: 'var(--dim4-glow)',
articleCount: 20,
quizCount: 8
glow: 'var(--dim4-glow)'
},
{
id: 5,
key: 'trend',
name: 'AI 趋势',
icon: '🔥',
icon: 'sparkle',
tagline: '每日前沿动态速递',
desc: '前沿动态——每日 AI 新闻、产品和趋势洞察',
color: 'var(--dim5-color)',
bg: 'var(--dim5-bg)',
iconBg: 'var(--dim5-icon-bg)',
border: 'var(--dim5-border)',
glow: 'var(--dim5-glow)',
articleCount: 0,
quizCount: 0,
isFull: true // 跨列
glow: 'var(--dim5-glow)'
}
]
@@ -85,4 +80,4 @@ export function getDimension(id) {
/** 按维度 key 查找 */
export function getDimensionByKey(key) {
return DIMENSIONS.find(d => d.key === key)
}
}