跳转到主要内容

后台管理

后台各页面的功能与操作流程

后台入口位于 /admin/*,登录后通过右上角菜单进入。仪表盘汇总全站概况,内容编辑覆盖文章与独立页面,组织管理处理评论、分类、标签、友链、订阅和旅行地点,运维侧提供附件库、缓存清理和更新日志维护。本节按页面逐一介绍其功能与操作方式。

仪表盘

仪表盘(/admin)是登录后的默认页。四张主统计卡片展示文章总数、评论总数、分类标签合计与注册用户数;下方两张附加卡片补充页面数量与草稿数量;系统运行时间卡片附带内存占用显示。中部「最新文章」列出最近发布的若干篇,每条右侧带编辑与删除快捷按钮;下方并排展示「最新评论」与「热门文章」,前者可一键删除,后者按评论数排序。「系统信息」区域汇总 Node.js 版本与平台架构、PostgreSQL 版本、附件数量与总大小、构建哈希以及部署方式(Docker 容器或原生部署)。

文章管理

文章管理页(/admin/contents)以表格形式列出全部文章,每行展示标题、slug、分类徽章、状态(已发布或草稿)、点赞数、评论数与创建时间。筛选栏支持按分类、标签与状态三种条件组合过滤,条件变化时同步写入 URL query,刷新或分享链接能恢复同一视图;「清除筛选」按钮一次性重置三个条件。顶部「新建文章」入口与「删除选中」按钮分别处理新建与批量删除,批量删除走 /api/admin/contents/batch-delete 一次提交多 cid。已发布文章支持点击预览图标直接打开前台;草稿因未生成前台路由会被拦截并明确提示。点击点赞数会打开该文章的「点赞明细」弹窗(嵌套路由 /admin/likes/[cid]),按时间倒序列出该文章的全部点赞记录,每行展示 IP、User-Agent 摘要、指纹前 8 位与点赞时间,单条删除用于清理刷量。返回越界页(如删空最后一页)时前端会自动跳到最后一页,避免停留在空列表。

文章编辑器(/admin/contents/edit)提供四个标签,依次是富文本、Markdown、文章设置与附件管理,四个标签共享同一份内容,切换视图不会产生两份正文。「文章设置」标签内含基本信息、封面设置、地图地点三组:基本信息收集标题、描述与 slug,slug 留空时由系统自动生成;封面设置支持单封面或多封面,多封面以每行 图片地址 || 标题 的形式录入;地图地点支持从旅行地点库中关联若干条目作为坐标集合。基本字段之外,分类与标签以多选形式关联到现有列表,发布设置控制状态(草稿或已发布)与发布时间。文章未保存草稿时上传附件会被拦截(需要先有内容 ID)。保存携带 CSRF token;切换离开页面若有未保存改动会触发浏览器的原生离开确认。完整编辑器功能与富文本、Markdown 扩展语法详见 撰写文章。

独立页面

独立页面管理(/admin/pages)与文章管理共享列表筛选与批量操作 UI,但只展示 type 为页面的条目。编辑器(/admin/pages/edit)的表单结构与文章编辑器相似,区别在于多出「特殊页面」下拉:选择 messages 等内置值即直接使用该 slug(如「留言板」对应 /messages),选择 custom 后才出现自定义 slug 输入框。基本字段含标题、描述、自定义 slug、是否启用目录与封面设置,附件 Tab 用于上传页面专属的素材。独立页面与文章的差别在于没有分类与标签关联、也没有地图地点字段。

评论管理

评论管理页(/admin/comments)以列表展示全站评论,每行展示评论者头像、邮箱、内容、文章标题、状态徽章、相对时间与归属信息(IP 归属地、ISP、UA)。顶部按状态分 Tab 切换「全部 / 待审核 / 已通过 / 垃圾评论」,下方还可按文章 ID 过滤只看某篇文章的评论,URL 会带上 status 与 cid 参数。评论列表默认每页 20 条,分页按钮提供跳转。每条评论提供编辑、修改状态、查看前台位置和删除四项操作,其中状态可在三个值之间即时切换,切换会立刻写回数据库并刷新列表;批量勾选后可一次删除多条。IP 与 UA 解析由共用模块 parseUserAgent 完成。前台评论跳转在文章为草稿时会被拦截并提示。评论字段的含义与默认值详见 评论设置。

分类管理

分类管理页(/admin/categories)以列表形式展示全部分类,每项展示名称、slug、描述与关联文章数。「新建分类」打开弹窗输入名称、slug 与描述,「编辑」复用同一表单就地修改,提交后立即刷新列表。删除走二次确认;删除分类会断开与文章的 contentrelations 关联,不会级联删除文章本身。

标签管理

标签管理(/admin/tags)结构与分类管理一致:列表展示名称、slug、描述与关联文章数,弹窗形式新建与编辑,删除走二次确认。标签与分类共享同一张 metas 表,通过 type 字段区分,因此新建标签时不能与已有分类重名。

账户设置

账户设置页(/admin/users)展示当前登录账号的详情,提供用户名、显示名称、邮箱与头像四项可编辑字段;密码输入框留空则不修改。两步验证可在该页开启:首次开启时显示二维码与密钥,扫描并填写 6 位动态码即可启用;停用时同样需要一次性动态码。已信任设备列表显示当前账号登录过的设备,可逐条撤销或重命名。本系统为单用户模式,没有用户管理列表。

友情链接

友情链接页(/admin/links)维护前台展示的友链列表。新建弹窗输入网站名称、链接、描述与头像地址四项,编辑走相同表单。前台申请提交后在后台可一键通过或拒绝;后台开启「自动同意友情链接申请」(位于 其他设置)后,前台申请自动通过,无需人工审核。前台友链页的展示与申请流程详见 友情链接。

旅行地点

旅行地点页(/admin/travels)维护地图页使用的地点库。新建弹窗录入名称、经度、纬度、描述、封面与排序值,经纬度使用 step=0.000001 的小数输入。可关联若干文章作为该地点的来源列表,搜索框支持按标题或 ID 过滤现有文章。前台地图展示与地点排序详见 旅行地图。

附件管理

附件管理页(/admin/attachments)以列表展示全站上传的附件,按类型筛选「全部 / 图片 / 视频」并支持关键词搜索,每行展示缩略图、文件名、大小、上传时间和关联文章。列表上方有「上传图片」与「上传实况照片」两个入口,分别走普通附件上传与实况照片(仅 JPEG)上传通道。点击附件行进入详情页(/admin/attachments/[id]),可重命名、查看已关联的文章与页面,并将其关联到更多内容或解除关联。附件的上传策略、对象存储字段与实况照片细节详见 附件。

订阅管理

订阅管理页(/admin/subscribes)维护 RSS 订阅源列表,每项展示订阅名称、URL、头像、最后抓取时间与最近抓取错误。新建弹窗录入这三项,编辑走相同表单。系统按 其他设置 中的「订阅信息更新间隔」定时拉取订阅源;抓取错误显示在条目详情里,便于排查。

缓存管理

缓存管理页(/admin/cache)提供四种清空方式。「一键清空」清理全部 Redis 缓存键;「按类别清理」提供 13 个预设(文章详情、分类页、标签页、首页、归档、订阅、更新日志、协议、站点地图、关于、旅行地图、友链、留言板),每个对应一组 SCAN 关键词;「自定义缓存」输入任意关键词清理;「搜索缓存」单独清空搜索结果缓存。清理完成后会以 toast 显示清理条数或备注。缓存的来源、依赖与字段含义详见 缓存。

更新日志管理

更新日志管理页(/admin/changelogs)以列表展示全部更新条目,每条记录含若干「类型 + 内容」组合(类型可选「新增 / 改进 / 修复 / 移除」等预设),单条可同时归属多条类型。列表上方有「导入更新日志」按钮,支持从项目仓库 changelogs.json 一键导入;新建或编辑单条时输入类型与 Markdown 内容,保存后立即生效到前台更新日志页。批量勾选后可一次删除多条。前台更新日志的展示与提交规范详见 更新日志。