mirror of
https://github.com/KingHWJ/WeReadBoard.git
synced 2026-11-03 18:24:58 +08:00
移除分类排序按钮,默认按分类排序展示
- 删除 index.html 中的 shelfSortBtn 按钮 - shelfSortMode 默认改为 category,始终按分类排序 - 删除 toggleShelfSort 函数和 .shelf-sort-btn CSS 样式 - 书架列表默认以分类分组渲染
This commit is contained in:
1 parent
e578a90543
commit
8b24052ab6
4 files changed
+44
-34
No files matched your search
@@ -36,3 +36,46 @@
|
|||||||
- **技术文档** docs/TECHNICAL_DOC.md:项目概述、系统架构图、数据流设计、15 个 API 接口详情、部署指南
|
- **技术文档** docs/TECHNICAL_DOC.md:项目概述、系统架构图、数据流设计、15 个 API 接口详情、部署指南
|
||||||
- **元数据文档** docs/METADATA_DOC.md:18 张表完整字段说明、索引设计、表关系 ER 图、数据类型规范
|
- **元数据文档** docs/METADATA_DOC.md:18 张表完整字段说明、索引设计、表关系 ER 图、数据类型规范
|
||||||
- Git 提交:dev 分支提交 → master 分支 --no-ff 合并
|
- Git 提交:dev 分支提交 → master 分支 --no-ff 合并
|
||||||
|
|
||||||
|
## 数据模型 v2.0 重构(第四批迭代)
|
||||||
|
- **官方 API 文档比对**:拉取 GitHub 上微信读书官方 8 份 API 文档(book.md, shelf.md, readdata.md, notes.md, discover.md, search.md, review.md, profile.md),逐字段对比发现 12 张缺失表、40+ 缺失字段
|
||||||
|
- **schema_mysql.sql 重写**:从 18 张表扩展到 31 张表,新增 shelf_albums, shelf_meta, prefer_publishers, prefer_cps, prefer_books, read_rank, medals, year_reports, book_best_bookmarks, book_underlines, public_reviews, similar_books, search_sessions
|
||||||
|
- **双列时间戳模式**:所有 INT UNSIGNED 时间戳字段均伴随 _dt TIMESTAMP 列(如 update_time ↔ update_time_dt)
|
||||||
|
- **审计列**:每张表统一维护 created_at + updated_at(MySQL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)
|
||||||
|
- **索引优化**:按实际查询模式设计复合索引、排序索引(如 idx_books_read_update_time DESC, uk_highlights_bookmark)
|
||||||
|
- **fetch_data.py 重写**:SKILL_VERSION 升级至 1.0.4,覆盖全部 31 张表数据采集,新增 ts_to_dt() 辅助函数
|
||||||
|
- **app.py 适配**:移除 ensure_tables(),新增 ts_to_dt_str(),所有 INSERT 语句适配新列名
|
||||||
|
- **migrate_to_mysql.py 重写**:支持 31 张表迁移
|
||||||
|
- **数据重建**:删除旧 weread.db + DROP MySQL 数据库,重建后采集 685 行数据(404 books, 32 notebooks, 20 publishers, 20 cps, 30 medals, 24 prefer_books 等)
|
||||||
|
- **文档更新**:TECHNICAL_DOC.md 版本升至 2.0.0,新增数据模型 v2.0 设计规范章节;METADATA_DOC.md 完整重写覆盖全部 31 张表
|
||||||
|
- **Git 历史**:dev 分支两次提交(refactor + docs),master 分支 --no-ff 合并(commit 9c32f69)
|
||||||
|
|
||||||
|
## 前端 UI 增强(第五批迭代)
|
||||||
|
- **封面图高清化**:新增 hdCover() 函数,将微信读书 CDN 封面 URL 从 t6_(低清~150px)升级到 t8_(高清~500px),7 处封面图片全部应用,三级回退机制(t8_→t6_→占位图)
|
||||||
|
- **阅读排行封面修复**:.top-book-cover 从固定 height:200px + object-fit:cover 改为 aspect-ratio:3/4,解决竖版书封面被裁切模糊问题
|
||||||
|
- **明亮/黑暗主题切换**:
|
||||||
|
- CSS 定义 [data-theme="dark"] 变量集(暖色深调,保持文学质感)
|
||||||
|
- 导航栏添加太阳/月亮图标切换按钮
|
||||||
|
- localStorage 持久化用户选择,首次访问跟随系统 prefers-color-scheme
|
||||||
|
- 防闪烁内联脚本在页面渲染前设置主题
|
||||||
|
- ECharts 图表通过 getChartColors() 读取 CSS 变量,主题切换时自动重绘
|
||||||
|
- 全局 0.3s 平滑过渡(背景、文字、边框、阴影)
|
||||||
|
- **整体样式优化**:
|
||||||
|
- Hero 渐变色从紫色改为暖棕/琥珀色,与全局 accent 色系统一
|
||||||
|
- 所有硬编码颜色替换为 CSS 变量(评分标签、徽章、排行标牌等)
|
||||||
|
- 推荐区封面改为 aspect-ratio:3/4 竖版展示
|
||||||
|
- 页脚数据存储标注从 SQLite 更新为 MySQL
|
||||||
|
- **Git 提交**:commit ae40ed9(master 分支)
|
||||||
|
- **Bug 修复:想法 star 值溢出**:红楼梦书评的 star 字段返回 100(微信读书 API 对书评返回的评分值,非 1-5 范围),导致 `"☆".repeat(5-100)` 抛出 RangeError: Invalid count value: -95。修复:用 `Math.max(0, Math.min(5, parseInt(r.star)||0))` 限制到 0-5 范围。commit 4d8cc2a
|
||||||
|
- **前端四大功能增强**(commit 7c91814):
|
||||||
|
1. 想法详情独立页面:从弹窗改为全页面视图,三类分类(划线/书评/想法),分类筛选标签,视觉标识(badge 颜色区分),章节分组,书评显示 abstract 原文引用
|
||||||
|
2. 标签页切换:总览/数据图表/读书排行/书架/笔记/推荐 从纵向滚动改为横向标签页切换,图表懒加载(首次切换到图表页时才初始化 ECharts)
|
||||||
|
3. 阅读排行竖向列表:从卡片网格改为横向排列列表,封面缩小至 48x64px 与书架一致,金/银/铜排名徽章
|
||||||
|
4. 回到顶部浮动按钮:滚动超过 400px 显示,平滑滚动回顶部
|
||||||
|
5. 书籍详情弹窗新增"查看想法"按钮,跳转到想法详情页
|
||||||
|
- **搜索封面修复 + 顶部搜索框 + 书架搜索优化**(commit 4c916ec):
|
||||||
|
1. hdCover() 升级:新增对 `s_` 前缀封面 URL 的高清升级(搜索结果用 s_ 前缀,比 t6_ 更模糊)
|
||||||
|
2. 顶部常驻搜索框:导航栏下方添加搜索输入框,回车自动切换到推荐页搜索子标签执行搜索
|
||||||
|
3. 书架搜索支持书名/作者:/api/shelf 新增 keyword 参数(title LIKE OR author LIKE),原 category 改为精确匹配
|
||||||
|
4. 分类标签栏:书架页显示所有分类的可点击标签(pill 样式),点击筛选对应分类
|
||||||
|
5. 微信读书 CDN 封面前缀:t6_=低清(~150px), s_=超低清(~90px,搜索结果用), t8_=高清(~500px)
|
||||||
@@ -447,31 +447,6 @@ body {
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 分类排序按钮 */
|
|
||||||
.shelf-sort-btn {
|
|
||||||
padding: 5px 14px;
|
|
||||||
border: 1px solid var(--border);
|
|
||||||
border-radius: 20px;
|
|
||||||
font-size: 13px;
|
|
||||||
color: var(--text-secondary);
|
|
||||||
background: var(--bg-card);
|
|
||||||
cursor: pointer;
|
|
||||||
transition: all 0.2s;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.shelf-sort-btn:hover {
|
|
||||||
border-color: var(--accent);
|
|
||||||
color: var(--accent);
|
|
||||||
}
|
|
||||||
|
|
||||||
.shelf-sort-btn.active {
|
|
||||||
border-color: var(--accent);
|
|
||||||
color: #fff;
|
|
||||||
background: var(--accent);
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 分类分组标题 */
|
/* 分类分组标题 */
|
||||||
.shelf-group-header {
|
.shelf-group-header {
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
|
|||||||
+1
-8
@@ -228,7 +228,7 @@ let shelfCategoryTree = {}; // { "历史": {count:114, subs:{"世界史":5,...
|
|||||||
let shelfActiveCategory = ""; // 完整分类名,如 "历史-中国古代"
|
let shelfActiveCategory = ""; // 完整分类名,如 "历史-中国古代"
|
||||||
let shelfActiveParent = ""; // 父分类名,如 "历史";空表示"全部"
|
let shelfActiveParent = ""; // 父分类名,如 "历史";空表示"全部"
|
||||||
let shelfExpandedParents = new Set(); // 当前展开的父分类
|
let shelfExpandedParents = new Set(); // 当前展开的父分类
|
||||||
let shelfSortMode = "default"; // "default" 或 "category"
|
let shelfSortMode = "category"; // 始终按分类排序,前端不显示切换按钮
|
||||||
|
|
||||||
async function loadShelfCategories() {
|
async function loadShelfCategories() {
|
||||||
try {
|
try {
|
||||||
@@ -318,13 +318,6 @@ function filterByCategory(fullCategory) {
|
|||||||
loadShelf(1);
|
loadShelf(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleShelfSort() {
|
|
||||||
shelfSortMode = shelfSortMode === "category" ? "default" : "category";
|
|
||||||
const btn = document.getElementById("shelfSortBtn");
|
|
||||||
btn.classList.toggle("active", shelfSortMode === "category");
|
|
||||||
loadShelf(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===== 初始化 =====
|
// ===== 初始化 =====
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", async () => {
|
document.addEventListener("DOMContentLoaded", async () => {
|
||||||
|
|||||||
@@ -125,7 +125,6 @@
|
|||||||
<label class="filter-checkbox">
|
<label class="filter-checkbox">
|
||||||
<input type="checkbox" id="finishedOnly"> 仅看已读完
|
<input type="checkbox" id="finishedOnly"> 仅看已读完
|
||||||
</label>
|
</label>
|
||||||
<button class="shelf-sort-btn" id="shelfSortBtn" onclick="toggleShelfSort()">分类排序</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="shelf-info" id="shelfInfo"></div>
|
<div class="shelf-info" id="shelfInfo"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in new issue
Block a user