From 22c73c11450b4745878105b07419b9f7eb5bf350 Mon Sep 17 00:00:00 2001 From: CNWei Date: Fri, 30 Oct 2026 20:05:33 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=90=8C=E6=AD=A5=E5=AD=90=E5=88=86?= =?UTF-8?q?=E7=BB=84=E5=BC=80=E5=85=B3=E4=B8=8E=20v18=20=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HANDOFF.md | 15 ++++++++------- README.md | 2 +- docs/ADMIN-PLAN.md | 11 ++++++----- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/HANDOFF.md b/HANDOFF.md index e9b55ff..4f77589 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -10,7 +10,7 @@ Stash 已从「只读本地导航站」升级为**可登录、可配置、可编 - `/admin` 设置页(页头滚动信息 / 首页卡片 / 归类 / 侧栏 / 资料 / 系统); - 条目就地编辑(Drawer + 乐观锁); - 分区新增/删除、**条目新增/删除(可选分区与分组)**、分组(子分类)新建/改名/删除、侧栏子分类配置、浏览/点赞/分享/跳转; -- 数据库自动迁移到 **v17**; +- 数据库自动迁移到 **v18**; - 前端 100% 使用组件库 `@stash/ui`(v0.3.1,42 个组件)。 当前数据库**已设置管理员密码**(2026-10-30 由使用者设置);忘记密码按 §6 删除 `admin` 行即可回到首次设置。 @@ -99,9 +99,9 @@ README.md 运行、路由、库结构、登录说明 | --- | --- | | 页头滚动信息 | 启用开关、速度 8–120、条目增删/排序、标签与色调、占位符 `{count}` `{project}` `{status}` | | 首页卡片 | 显示/隐藏、标题覆盖、预览条数、顺序、**新增分类**、**删除分类**(不可删的显示灰色按钮) | -| 内容 | 弹窗新增应用/海报/图文条目(选分区;应用类可选分组或「直属分区」);列表逐条编辑(含换分区/分组)与删除 | -| 分区 | 分区类型(应用/海报/图文)、标题、图标、色条、预览条数;**应用类**可管理分组与首页卡片预览分组,海报/图文保持平铺 | -| 侧栏导航 | 分类显示/隐藏、顺序、删除/新增;**应用类**的子分组单独显隐与排序,并可直接新建;空分组不在侧栏出现 | +| 内容 | 弹窗新增应用/海报/图文条目(选分区;开启子分组的分区可选分组或「直属分区」);列表逐条编辑(含换分区/分组)与删除 | +| 分区 | 分区类型(应用/海报/图文)、标题、图标、色条、预览条数、**「子分组」开关**;开关打开时管理分组与首页卡片预览 | +| 侧栏导航 | 分类显示/隐藏、顺序、删除/新增;开启子分组的分区可显隐/排序/新建分组;空分组不出现在侧栏 | | 资料 | 头像 URL、名称、角色、简介、位置(应用到侧栏资料卡) | | 系统 | 修改密码(清空所有会话)、下载备份(VACUUM INTO 快照) | @@ -143,7 +143,7 @@ POST /api/items/{key}/view POST /api/items/{key}/like {liked} POST /api/categories {id,title,kind} 需登录 -PATCH /api/categories/{id} {title,icon,barColor,kind,previewLimit,emptyText,blockNodeKey} 需登录 +PATCH /api/categories/{id} {title,icon,barColor,kind,previewLimit,emptyText,blockNodeKey,allowGroups} 需登录 POST /api/categories/{id}/groups {id,title} 需登录,仅应用分区 DELETE /api/categories/{id} 需登录,级联,local 不可删 PATCH /api/groups/{id} {title,showInSidebar} 需登录 @@ -155,7 +155,8 @@ GET /api/backup SQLite 快照附件 需登录 ## 5. 数据库与迁移 - 文件:开发态在 `target/debug/data/stash.db`;可用 `--root` / 数据目录覆盖(见 `config.rs`)。 -- 当前 `PRAGMA user_version = 17`;`schema::migrate` 逐级升级:0 建全量、15→16→17、更高版本拒绝启动。 +- 当前 `PRAGMA user_version = 18`;`schema::migrate` 逐级升级:0 建全量、15→16→17→18、更高版本拒绝启动。 +- `node.allow_groups` 是「允许子分组」开关(与类型无关);老库升级时应用类默认开启,其余默认关闭,已有分组的非应用分区自动开启。 - 主要表:`node`、`entry`、`entry_tag`、`section_block`、`admin`、`session`、`setting`、`audit`。 - `entry.updated_at` 用于编辑乐观锁;`setting` 表 `key='site'` 存站点 JSON。 - **设置/内容都是 SQLite**:备份用 `/api/backup`,恢复需停机替换文件。 @@ -197,7 +198,7 @@ GET /api/backup SQLite 快照附件 需登录 | 多用户/角色 | 未做,当前单管理员 | | 分区编辑 UI | 已支持标题/图标/色条/类型/预览条数(`PATCH /api/categories/{id}`);改类型会自动迁移条目 | | 条目移动 | 编辑弹窗里可直接换分区 / 分组(`PATCH /api/items/{key}` 的 `nodeKey`) | -| 分组管理 | 只有**应用类**分区可建组/改名/显隐/删除(删除级联组内条目);海报/图文平铺;分组拖拽排序未做 | +| 分组管理 | 由分区的「子分组」开关控制(与类型无关);关闭时条目平铺、分组内容不丢;分组拖拽排序未做 | | 登录限流 | 进程内计数,重启清空 | ## 10. 约定与坑 diff --git a/README.md b/README.md index 32f9f28..492444a 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ cargo run -- --root ./sites --host 0.0.0.0 --port 3000 ### 登录与设置(v0.1.1 起) - 登录是**页内弹窗**:点右上角用户图标;首次使用弹窗里是「设置密码 + 确认」(至少 8 位); -- 登录后点「站点设置」进入 `/admin`,可编辑页头滚动信息、首页卡片、内容(弹窗新增/编辑应用、海报、图文并选择分区/分组)、分区与分组(类型、标题、图标、色条、卡片预览分组;应用类支持分组,海报/图文平铺)以及侧栏顺序、显隐; +- 登录后点「站点设置」进入 `/admin`,可编辑页头滚动信息、首页卡片、内容(弹窗新增/编辑应用、海报、图文并选择分区/分组)、分区与分组(类型、标题、图标、色条、预览条数、**子分组开关**;三种类型共用模板,开关打开才分组)以及侧栏顺序、显隐; - 详情页的 `[编辑]` 只在登录后显示;保存后局部刷新,`updated_at` 乐观锁; - `/admin` 的「系统」页可以改密码、下载整库备份(`VACUUM INTO` 快照); - 密码用 argon2id 哈希存在 `data/stash.db` 的 `admin` 表,会话是 HttpOnly + SameSite=Strict 的 Cookie(7 天); diff --git a/docs/ADMIN-PLAN.md b/docs/ADMIN-PLAN.md index 2faf692..4cbf29a 100644 --- a/docs/ADMIN-PLAN.md +++ b/docs/ADMIN-PLAN.md @@ -147,12 +147,13 @@ DELETE /api/items/:id ## 11. 实施记录 -### P8(2026-10-30,按类型收口) +### P8(2026-10-30,子分组开关) -- **分组能力按类型区分**:只有应用类分区允许分组;海报 / 图文保持平铺(后台不再显示分组与卡片预览分组,接口也拒绝建组); -- **平铺兼容**:海报 / 图文读取时会把(历史)分组内的条目一并平铺,切换类型不丢内容;应用类切回时仍按分组渲染; -- **侧栏**:非应用类不出现子项;应用类里的空分组也不在侧栏显示(详情页早已隐藏空分组); -- 验证:类型 应用 ↔ 海报 切换时,分组管理入口与侧栏子项随类型出现/消失,`cargo test` 59 passed。 +- **与类型解耦**:分区新增 `allow_groups` 开关(迁移 v18);三种类型共用同一模板,开启后可建分组,关闭后平铺; +- **默认值**:老库升级时应用类开启、海报/图文关闭;已有分组的非应用分区自动开启;新建分区按类型给默认值,之后可随时改; +- **平铺兼容**:关闭开关时读取会把(历史)分组内条目一起平铺,内容不丢;首页卡片若指向分组会自动挪回分区; +- **后台**:「分区」每行新增「子分组」开关;「内容」弹窗的分组选择随开关出现;「侧栏导航」的建组入口同理;空分组不在侧栏显示; +- 验证:推荐电影(海报)开启开关 → 建组 → 加海报 → 详情按组显示;关闭 → 恢复平铺且条目仍在;`cargo test` 59 passed。 ### P7(2026-10-30,统一内容模型)