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
+8 -8
View File
@@ -45,7 +45,7 @@
<view class="card-footer">
<text class="card-date">{{ formatDate(item.newsDate) }}</text>
<view class="card-stats">
<text class="stat-item" v-if="item.hot">🔥 {{ item.hotCount }}</text>
<text class="stat-item" v-if="item.hot">{{ item.hotCount }} 人觉得热</text>
<text class="stat-item">👁️ {{ item.viewCount || 0 }}</text>
</view>
</view>
@@ -56,7 +56,7 @@
<text>加载中...</text>
</view>
<view v-else-if="displayItems.length === 0" class="empty-state">
<text class="empty-icon">📡</text>
<text class="empty-icon">暂时没有快讯</text>
<text class="empty-text">暂无趋势资讯</text>
<text class="empty-sub">稍后再来看最新 AI 动态</text>
</view>
@@ -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 {