v0.3.0
NodeLoc App 更新日志
v0.2.0 → v0.3.0
这一版核心是把权限判断的责任彻底交还给服务端:楼层能不能编辑、能不能点赞、举报菜单里有哪些选项、侧边栏该显示什么,过去大半是前端按"是不是本人帖子"这类猜测写的规则,这次逐项翻了 Discourse 官网真实前端源码和后端 guardian 定义,换成跟随服务端逐帖子/逐用户下发的字段。顺带修了一个能让主页直接崩溃的序列化死循环 bug。
发布日期:2026-08-28
更新规模:28 commits | 49 files changed | +4,077 / -624 lines
新功能
楼层操作菜单完全跟随服务端权限
新增"更多操作"弹层承载收藏、举报、编辑、删除、恢复。这些操作是否展示不再靠前端猜(比如原来"非本人帖子就能举报"),而是读服务端逐楼层下发的 yours/can_edit/can_delete/can_recover/bookmarked 字段。举报原因列表也做成动态的:联查该楼层 actions_summary 里 can_act=true 的操作类型,再去站点 post_action_types 取名称和是否需要补充说明——同一篇帖子在不同人视角下能举报的原因可能不一样。点赞按钮同理接上了 actions_summary,修正了"本人帖子能点赞自己"这个疏漏。
管理员/版主专属操作
逐一核对了 Discourse 后端 guardian 源码后加上:锁定/解锁编辑(仅 staff)、Wiki 化(不是站务独占,信任等级4或站点开放用户组也能对自己帖子操作,单独走 canWiki 字段)、重新渲染 HTML(staff 或信任等级4)、取消隐藏(仅 staff)、变更帖子所有者(服务端在会话接口里直接算好下发,不是前端猜角色)、永久删除(先查权限字段决定按钮是否展示,点击后再二次确认才真正执行)。
侧边栏改为服务端驱动
节点、标签区块跟随当前用户的 sidebar_category_ids/sidebar_tags 配置,新增"小程序"区块(recent_apps),不再是前端硬编码的固定分组。
阅读进度上报
对齐官网 screen-track 服务的触发规则(60秒累计、新楼层立即上报、失败重试),之前完全没有这块。
创建话题的节点选择器改为可搜索
从下拉列表换成带搜索框的底部弹层,节点多了以后不用再一直往下滑找。
支持编辑自己发过的帖子
复用现有 Markdown 编辑器,走 PUT /posts/{id}。
显示帖子翻译提示条
内容本地化场景下(cooked 是自动翻译结果)展示提示,点击可查看原文。
修复
主页加载崩溃(TagDto 序列化循环初始化)
@Serializable(with = TagDtoSerializer::class) 标在类声明上导致 TagDto.serializer() 和序列化器互相依赖,JVM 类初始化死循环直接抛异常。这是本次修复里唯一一个能让 App 完全打不开的问题。
节点标签图片占位
话题列表和详情页的节点标签改用官网真实上传的图标图片,之前是纯色圆点占位。
抽屉用户区信任等级文案
改用青铜/白银/黄金/钻石/王者中文称号,不再显示 TL0~TL4。
Chore
删除了早期设计探索目录 design/;.gitignore 补上 Playwright MCP 调研留下的本地快照/日志目录,避免误入库。
已知问题(本版遗留,下一轮修复)
- 部分操作按钮误用了 emoji 字符(如
⚡/❝/•≡)顶替矢量图标 - 主页偶发
read timeout - 详情页继续加载评论时报错:
Fields [topic, op_post] are required for type with serial name 'app.nodeloc.data.model.NestedTopicDto', but they were missing at path: $