新增公告中心功能

## 功能概述
在钱包旁边新增公告中心,用户可以查看平台通知、教程、规则和常见问题。

## 主要变更

### 后端
- 新增 announcement 模块(handler/service/repository)
- 新增 announcements 数据库表
- 添加公告相关 API 端点(用户端和管理端)
- 扩展 response 包,新增 NotFound 和 InternalServerError 方法

### 前端
- 新增公告功能模块(/features/announcement)
- 实现公告列表页和详情页
- 在顶部导航添加公告入口(钱包旁边)
- 支持按分类筛选(通知、教程、规则、FAQ)
- 支持置顶和重要标记显示

### 数据库
- 迁移文件:000005_add_announcements.sql
- 示例数据:000006_insert_sample_announcements.sql
- 包含6条示例公告

## 技术特点
- 遵循项目现有架构模式
- 响应式设计,支持移动端
- 自动统计浏览次数
- 支持富文本内容展示

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
yml
2026-06-05 20:40:20 +08:00
co-authored by Claude Opus 4.6
parent 46c5df86ac
commit 28b6e326e8
16 changed files with 1560 additions and 0 deletions
@@ -0,0 +1,22 @@
-- ============================================
-- 公告系统表
-- ============================================
-- 公告表
CREATE TABLE IF NOT EXISTS announcements (
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL COMMENT '公告标题',
content TEXT NOT NULL COMMENT '公告内容(支持富文本/Markdown)',
category VARCHAR(32) NOT NULL DEFAULT 'notice' COMMENT '分类: notice(通知), tutorial(教程), rule(规则), faq(常见问题)',
priority INT NOT NULL DEFAULT 0 COMMENT '优先级,数值越大越靠前',
is_pinned TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否置顶',
is_important TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否重要(重要的会有特殊标记)',
view_count INT NOT NULL DEFAULT 0 COMMENT '查看次数',
status VARCHAR(32) NOT NULL DEFAULT 'draft' COMMENT '状态: draft(草稿), published(已发布), archived(已归档)',
published_at DATETIME NULL COMMENT '发布时间',
created_by BIGINT UNSIGNED NULL COMMENT '创建者ID(管理员)',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
KEY idx_announcements_status (status, is_pinned, priority, published_at),
KEY idx_announcements_category (category, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公告表';
@@ -0,0 +1,98 @@
-- 插入示例公告数据
INSERT INTO announcements (title, content, category, priority, is_pinned, is_important, status, published_at) VALUES
('号主须知(重要!)', '## 平台担保交易,拒绝私下转账!
平台提供交易担保机制,用户支付的押金与租金全部冻结在平台账户中,租号结束后根据账号状态自动结算给号主或退款给租客。
**警告:**
- 账号被非本人,请看到此消息后主动下架账号!
- 不要随意更改账号密码或绑定信息
- 请勿诱导买家进行私下交易
- 违规将会被冻结账户并承担相应损失
有任何问题请联系客服处理。', 'notice', 100, 1, 1, 'published', NOW()),
('租客须知(重要!)', '## 账号使用规范
1. **禁止修改账号信息** - 不得修改账号密码、绑定手机、实名信息等
2. **禁止充值** - 租用期间请勿对账号进行任何形式的充值
3. **禁止违规操作** - 不得使用外挂、辅助工具,不得进行恶意行为
4. **按时归还** - 租用到期后请及时归还账号,逾期将扣除押金
**温馨提示:**
- 交接账号后请第一时间登录验证
- 发现账号异常请立即联系客服
- 使用过程中遇到问题随时咨询客服
祝您游戏愉快!', 'notice', 99, 1, 1, 'published', NOW()),
('人脸验证教程', '## 如何完成实名认证
为了保障交易安全,平台要求所有用户完成实名认证后才能发布商品和下单。
### 认证步骤:
1. 进入"个人资料"页面
2. 点击"实名认证"按钮
3. 按照提示填写真实姓名和身份证号
4. 进行人脸识别验证
5. 等待系统审核(通常1-3分钟)
### 注意事项:
- 请确保光线充足,面部清晰
- 摘下眼镜、帽子等遮挡物
- 一个身份证只能认证一个账号
- 认证信息仅用于交易安全,平台严格保密
认证失败请联系客服协助处理。', 'tutorial', 90, 0, 0, 'published', NOW()),
('除纯市外其他高级物资默认从收费表', '## 出租开始须必开启备锁!
号主在出租账号前,务必确保账号已开启"账号保护"功能(即备锁)。
### 为什么要开启备锁?
- 防止租客恶意修改账号信息
- 保护账号安全,降低被盗风险
- 发生纠纷时便于平台介入处理
- 租用结束后方便号主快速收回账号
### 如何开启?
具体开启方式请参考游戏官方设置,不同平台操作略有差异。如不清楚如何设置,请咨询客服。
**重要提醒:未开启备锁导致的账号安全问题,平台不承担责任!**', 'rule', 80, 0, 0, 'published', NOW()),
('出租完成后如何结算?', '## 租金结算流程
租用期满后,系统会根据账号状态自动进行结算:
### 正常归还
- 租客按时归还账号
- 号主确认账号无异常
- 系统自动将租金结算到号主钱包
- 押金退还给租客
### 异常情况
- 账号信息被修改 → 押金赔付给号主
- 账号被找回 → 租金退还给租客
- 产生纠纷 → 平台客服介入仲裁
### 提现说明
目前提现功能暂未开放,敬请期待后续更新。', 'faq', 70, 0, 0, 'published', NOW()),
('如何联系客服?', '## 客服联系方式
遇到问题可以通过以下方式联系客服:
1. **在线客服** - 点击页面右上角"客服"按钮,即可在线咨询
2. **订单页面** - 每个订单详情页都有专属客服入口
3. **消息中心** - 查看历史咨询记录
### 客服工作时间
- 工作日:09:00 - 22:00
- 节假日:10:00 - 20:00
非工作时间留言,客服上线后会第一时间回复。', 'faq', 60, 0, 0, 'published', NOW());