xiunobbs 重构记录(十四) 优化版块管理
贰先生 2小时前

# 优化版块管理 Spec

## Why
当前版块管理页面(forum_list.htm)在列表页直接内联编辑版块名称、类型、排序等,交互混乱且功能不完整。图标仅支持 Tabler Icon 选择,不支持上传图片。删除操作无确认提示,用户权限需手动启用。需要重构为展示列表+独立添加/编辑页面的模式,并增加发帖审核、回帖审核功能。

## What Changes
- 版块列表页(forum_list.htm)改为纯展示,去掉内联编辑表单,保留编辑/删除按钮,新增"添加版块"按钮
- 版块图标从 Tabler Icon 选择器改为图片上传(支持上传图片文件)
- 新增添加版块页面(forum_create.htm),包含:图标上传、版块类型、上级分区(版块类型为分区时隐藏)、排序、简介、公告
- 编辑版块页面(forum_update.htm)调整:图标改为图片上传、去掉权限启用按钮(默认启用)、增加发帖审核/回帖审核权限列
- 删除版块增加 Bootstrap Modal 确认弹窗,提示版块下帖子也会被删除
- 后端路由增加 forum-create 动作处理添加版块
- 数据库 bbs_forum_access 表增加 allowthreadaudit 和 allowpostaudit 字段
- 数据库 bbs_forum 表 icon 字段从 varchar(50) 改为 varchar(255) 存储图片路径
- forum_format 函数更新 icon_url 逻辑,支持图片路径
- 发帖/回帖流程增加审核判断逻辑
- UpgradeService 增加对应数据库升级步骤

## Impact
- Affected specs: 版块管理、用户权限、发帖/回帖审核
- Affected code:
  - `admin/view/htm/forum_list.htm` - 列表页重构
  - `admin/view/htm/forum_update.htm` - 编辑页调整
  - `admin/view/htm/forum_create.htm` - 新增添加页
  - `admin/route/forum.php` - 增加 create 路由、修改 delete 逻辑
  - `model/forum.func.php` - forum_format 更新 icon_url 逻辑
  - `model/forum_access.func.php` - 无需改动,字段自动通过 db 操作
  - `lib/UpgradeService.php` - 增加升级步骤
  - `lib/security/AuditService.php` - 增加回帖审核判断
  - `plugin/xn_security/hook/post_post_start.php` - 增加回帖审核钩子
  - 前台模板中引用 icon_url 的地方需适配图片路径

## ADDED Requirements

### Requirement: 版块列表页纯展示
系统 SHALL 将版块列表页改为纯展示模式,不再支持内联编辑。

#### Scenario: 查看版块列表
- **WHEN** 管理员访问版块管理页面
- **THEN** 显示分区和子版块的层级列表,每个版块展示图标(图片或默认图标)、名称、类型、上级分区、排序
- **AND** 每个版块右侧显示编辑(蓝色笔图标)和删除(红色垃圾桶图标)按钮
- **AND** 页面顶部或底部显示"添加版块"按钮

### Requirement: 版块图标改为上传图片
系统 SHALL 支持版块图标上传图片文件,替代当前的 Tabler Icon 选择器。

#### Scenario: 上传版块图标
- **WHEN** 管理员在添加或编辑版块页面上传图标图片
- **THEN** 系统将图片保存到 `upload/forum/` 目录,文件名格式为 `{fid}.{ext}`
- **AND** 数据库 icon 字段存储图片相对路径(如 `upload/forum/2.png`)
- **AND** 前台展示时通过 icon_url 显示图片,无图片时显示默认图标

#### Scenario: 图标图片规格
- **WHEN** 上传图标图片
- **THEN** 支持 jpg/png/gif/webp 格式,文件大小不超过 2MB
- **AND** 上传时自动生成缩略图(如需要)

### Requirement: 添加版块页面
系统 SHALL 提供独立的添加版块页面,通过"添加版块"按钮跳转访问。

#### Scenario: 访问添加版块页面
- **WHEN** 管理员点击"添加版块"按钮
- **THEN** 跳转到添加版块页面(forum-create.htm),包含以下字段:
  - 图标(图片上传)
  - 版块类型(分区/版块,默认版块)
  - 上级分区(下拉选择,版块类型为分区时隐藏)
  - 排序(数字输入,默认 0)
  - 简介(文本域)
  - 公告(文本域)

#### Scenario: 提交添加版块
- **WHEN** 管理员填写完表单并提交
- **THEN** 系统创建版块,保存图标图片,跳转回版块列表页并提示成功

### Requirement: 编辑版块页面调整
系统 SHALL 调整编辑版块页面,修改图标为图片上传,去掉权限启用按钮,增加审核权限。

#### Scenario: 编辑版块页面字段
- **WHEN** 管理员点击版块的编辑按钮
- **THEN** 显示编辑页面,包含以下字段:
  - 图标(图片上传,显示当前图标)
  - 版块类型(分区/版块)
  - 上级分区(版块类型为分区时隐藏)
  - 排序
  - 简介
  - 公告
  - 版主(仅版块类型显示)
  - 用户权限表格(默认启用,去掉启用按钮,直接显示权限表格)

#### Scenario: 用户权限表格增加审核列
- **WHEN** 显示用户权限表格
- **THEN** 在现有权限列(查看、发主题、回复、上传、下载)基础上,增加"发帖审核"和"回帖审核"两列
- **AND** 权限表格始终显示,无需启用按钮控制

### Requirement: 删除版块确认弹窗
系统 SHALL 在删除版块时显示确认弹窗。

#### Scenario: 点击删除按钮
- **WHEN** 管理员点击版块的删除按钮
- **THEN** 显示 Bootstrap Modal 确认弹窗,提示"确定要删除该版块吗?版块下的所有帖子也会被删除,此操作不可恢复。"
- **AND** 弹窗包含"取消"和"确认删除"按钮

#### Scenario: 确认删除版块
- **WHEN** 管理员在确认弹窗中点击"确认删除"
- **THEN** 系统删除版块及其所有帖子,关闭弹窗,刷新列表页

#### Scenario: 系统保留版块不可删除
- **WHEN** 管理员尝试删除 fid=1 的系统保留版块
- **THEN** 提示"系统保留版块,不可删除"

### Requirement: 发帖审核和回帖审核
系统 SHALL 在版块用户权限中增加发帖审核和回帖审核控制。

#### Scenario: 发帖审核
- **WHEN** 用户在版块发帖,且该用户组在该版块的 allowthreadaudit 权限为 1
- **THEN** 帖子进入待审核状态(audit_status=0),不直接显示
- **AND** 管理员在审核页面可审核通过或驳回

#### Scenario: 回帖审核
- **WHEN** 用户在版块回帖,且该用户组在该版块的 allowpostaudit 权限为 1
- **THEN** 回复进入待审核状态(audit_status=0),不直接显示
- **AND** 管理员在审核页面可审核通过或驳回

## MODIFIED Requirements

### Requirement: 版块图标字段
原 icon 字段存储 Tabler Icon 类名(varchar(50)),现改为存储图片相对路径(varchar(255))。forum_format 函数中的 icon_url 逻辑需更新:如果 icon 值是图片路径(包含 `.`),则直接使用;否则使用默认图标 `view/img/forum.png`。

### Requirement: 版块删除逻辑
原删除逻辑要求版块下无帖子才能删除,现改为确认后级联删除版块下所有帖子。删除分区时,其下子版块的 fup 改为 0(变为孤儿版块)。

## REMOVED Requirements

### Requirement: 列表页内联编辑
**Reason**: 改为纯展示+独立编辑页面模式,交互更清晰
**Migration**: 列表页去掉表单和内联编辑输入框,编辑操作跳转到 forum-update 页面

### Requirement: 权限启用按钮(accesson)
**Reason**: 用户权限默认启用,去掉启用开关简化操作
**Migration**: 编辑页面直接显示权限表格,accesson 字段保留但默认为 1
最新回复 (0)
全部楼主
返回