更新日志
本项目遵循 Keep a Changelog 格式,版本号遵循 语义化版本。
[Unreleased]
[1.4.0] - 2026-04-05
Added
- 新增
CacheableRepositoryTrait,Repository 层声明式缓存抽象 - 新增 Redis 队列异步处理(操作日志、消息通知)
- 新增
log:archive命令,定期清理过期管理员日志 - 新增前端
useDebounceRequestHook,搜索请求防抖 - 新增前端 GET 请求去重机制
Changed
- 缓存驱动由 file 切换为 Redis
- 字典数据增加 7200s Redis 缓存
- 菜单树增加 3600s Redis 缓存
- SystemConfigRepository / Permission 缓存迁移到标签化管理
- 操作日志由同步写 DB 改为异步队列
- 消息通知由同步 API 调用改为异步队列
- 余额/积分日志改用 eager loading,消除 enrichListWithNames 额外查询
- AdminRepository.getDetailWithPermissions 改用 eager loading 消除 N+1
- 前端删除 Auth Guard 冗余 menuApi.getAdminRoutes() fallback 请求
Fixed
- 修复 admin_login_logs 缺少 (admin_id, login_time) 复合索引
[1.3.0] - 2026-04-01
Added
- API 文档支持后台管理 API / 前端应用 API 切换,C 端 11 个控制器添加 OpenAPI 注解
- UniApp 注册页新增手机短信验证码(与 PC 端注册流程统一)
Changed
- UniApp 微信快捷登录按钮改为圆形绿色微信图标
- UniApp 引入 iconify 图标系统(@iconify-json/ri + presetIcons)
- 重构 Controller/Service/Repository 分层,消除架构违规(Controller 不再直接调用 Model,Service 不再绕过 Repository)
- Menu/Permission Model 查询逻辑迁移至 Repository 层
- AdminLogMiddleware 改用 Repository 记录操作日志
- 统一 Repository 调用风格(
$this->getModel()::→$this->model->) RequestCodeEnum更新为与后端一致的 HTTP 状态码(200/400/401/403/500)- 超级管理员权限标识前后端对齐(后端注入
'*'通配符) - 事务 catch 类型统一为
\Throwable(RoleService、AdminService、DictionaryService) - MessageLog Model 改为继承
core\base\Model ConfigInfoTypeScript 类型定义与实际 API 响应字段对齐app.store.getConfig()返回值统一为 config 数据对象
Fixed
- 修复开放平台配置保存成功但刷新后值为空(
system_configs缺少wechat_open组初始数据) - 修复
batchUpdateConfigs()对不存在的配置键静默跳过,改为抛出异常提示具体键名 - 修复异常类在 PHP 8.4 下隐式 nullable 参数弃用警告(BusinessException、ApiException、PermissionException)
- 修复
server/public/static/fonts未纳入 git 版本控制 - 补充英文语言包缺失的
config_group_wechat_open翻译 - 修复 Upload 组件响应码检查(
code == 1→code == 200),错误消息字段(msg→message) - 修复上传路由重复定义(移除
common.php中多余的 upload 路由组) - 修复超级管理员
v-hasPerm指令不生效(后端未向前端发送'*'权限标识) - 修复 21 个 Model 缺少
$append声明导致访问器字段不出现在 API 响应 - 修复日志 Model 缺少
$updateTime = false(AdminLoginLog、AdminOperationLog) - 修复静默吞掉异常的 catch 块(FileService、CodeGeneratorService、UploadController),改为 Log::warning
- 修复
api-doc页面硬编码 localStorage key 获取 token - 修复
workbench页面v-for+v-if同元素(Vue 3 不允许) - 修复 Vite 开发模式新页面首次访问触发依赖重优化整页刷新(改用动态解析组件样式路径)
- 修复 Dashboard stats 接口报 "Undefined array key 'login_result'"(AdminLoginLog 访问器加 isset 防御)
- 修复多个 Model 访问器在字段缺省时抛出 "Undefined array key" 警告(Admin、Role、Menu、Dictionary、DictionaryItem、Permission、BalanceLog、PointsLog)
Removed
- 移除重复的消息模块视图(
views/message/,保留views/system/message/) - 移除未使用的路由 guard 文件(
router/guards/init.ts) - 移除死代码:
getWorkbench()、getGlobalConfigs()、ThemePicker/demo.vue - 注册 3 个孤立事件到
event.php(announcement.created、article.created、user.notification.created)
[1.2.1] - 2026-03-28
Added
- 新增系统版本配置文件
server/config/version.php - 新增数据库升级目录
server/database/updates/及通用升级指南 - 新增 v1.2.1 数据库升级脚本(权限系统修复)
Changed
CLAUDE.md新增发版数据规范章节
Fixed
- 修正菜单权限命名不一致(type=2 菜单添加
.list后缀) - 补充缺失的 type=3 按钮菜单权限
- 为超级管理员角色分配新增按钮权限
Removed
- 移除
server/public/install/data/fix_permissions.sql(内容已合并至 init.sql 和 updates/v1.2.1)
[1.2.0] - 2026-03-24
Added
- 仪表盘新增「最近活动」和「活跃用户排行」数据端点(
/adminapi/dashboard/recent-activities、/adminapi/dashboard/active-ranking) - DashboardRepository 新增用户统计、排行榜、最近活动查询方法
- DashboardService 新增用户注册/活跃统计、最近活动聚合、活跃排行逻辑
Changed
- 仪表盘前端整体重设计:渐变玻璃态风格(gradient glassmorphism)
- KPI 卡片调整为冷色系渐变配色(左亮右暗)
- 移除系统信息卡片,快捷导航扩展为 4×2 网格布局
- 简化仪表盘整体布局,放大关键数字排版
- 移除仪表盘区域背景色覆盖
- 更新仪表盘相关 TypeScript 类型定义与 API 函数
- 更新仪表盘 i18n 多语言翻译
Fixed
- 修复仪表盘中
appStore属性名引用错误
[1.1.0] - 2026-03-23
Added
- 微信支付多端适配:小程序 JSAPI、公众号 JSAPI、H5 MWEB、APP、PC Native 五种支付方式自动路由
- 客户端平台识别:
X-Client-Type请求头(miniapp/wechat_h5/h5/app/pc),后端白名单校验 - 多 AppID 支付配置:按平台自动选择小程序/公众号/开放平台/移动应用 AppID
- JSAPI/APP 支付参数二次签名:
buildJsapiParams()、buildAppParams()方法 - 微信平台证书自动下载与缓存(无需手动配置 cert_path)
- 小程序微信快捷登录 + 手机号绑定(
wechatQuickLogin、wechatBindPhone接口) - H5 公众号 OAuth 静默授权获取 oa_openid(
wechat-oauth.ts) - H5 微信浏览器 WeixinJSBridge 调起支付
- PC 端充值二维码展示 + 轮询支付状态(qrcode 库)
- 用户表新增
oa_openid字段,支付订单表新增client_type字段 - 注册成功后自动登录(token + userInfo 同步写入 store)
notify_url支持相对路径,运行时自动补全域名
Changed
PaymentManager::getWechatConfig()改为 public,新增多端 appid 配置加载WechatPayDriver::create()支持动态 appid 参数WechatPayDriver::query()使用 URI 模板避免订单号大写被 normalize 转义PaymentService::createOrder()存储 client_type 到订单记录UserController::recharge()根据客户端类型自动路由支付方式PaymentController::query()不再强制要求 channel 参数,自动从订单记录获取WechatController::oauthCallback()支持 SPA 重定向模式和 JSON 模式OfficialAccountService::getUserByCode()返回 unionid 字段
Fixed
- 修复微信支付未启用时返回 500 错误(改为友好提示)
- 修复微信支付 V3 SDK certs 参数为空导致初始化失败
- 修复微信 WXSS 编译错误(UnoCSS presetUno → presetWeapp)
- 修复发现页 tabs 四周边距不合理及多余 scroll-view
- 修复 H5 微信 OAuth 死循环(前端直接处理 code 参数)
- 修复 el-tree-select
value属性 TS 类型错误(改用node-key) - 修复 el-tag type 属性 TS 联合类型不匹配
- 修复微信支付查询订单号大写被转为 kebab-case(W → -w)
- 修复 ORDER_NOT_EXIST 轮询报错暴露给用户(静默返回 pending)
[1.0.0] - 2026-03-20
Added
Admin 后台管理
- 基于 Vue 3 + TypeScript + Element Plus + Vite + Pinia 的管理后台
- 动态路由系统,通过后端菜单数据自动生成
- 用户管理、角色权限、菜单管理
- 文章管理(分类、标签、封面、富文本编辑)
- 公告管理、反馈管理、协议管理
- 系统配置(站点设置、上传配置、支付配置等)
- 余额记录、积分记录管理
- 控制台仪表盘(统计卡片、登录趋势图表)
- 操作日志、登录日志
- 代码生成器(自动生成 CRUD 全栈代码)
Server 后端服务
- 基于 ThinkPHP 8 + PHP 8.0+ 的 RESTful API 服务
- 分层架构:Controller → Service → Repository → Model + Listener + Job
- 自动依赖注入(DI)
- JWT 认证与 RBAC 权限控制
- 支付系统(微信支付、支付宝)
- 余额/积分体系
- 消息通知系统(站内信、短信)
- 事件驱动的副作用处理(Listener 机制)
- 文件上传(本地、阿里云 OSS、腾讯云 COS、七牛云)
- 安装向导(含演示数据与动态 URL 替换)
- 开放平台(OAuth 第三方登录)
PC 前台网站
- 基于 Nuxt 3 (SPA) + Naive UI + UnoCSS 的前台网站
- 文章列表与详情(分类筛选、标签、阅读量)
- 用户中心(个人资料、密码修改、余额充值、积分明细)
- 登录注册(密码、短信、微信扫码)
- 全局错误页面(404/500)
UniApp 移动端
- 基于 uni-app + Vue 3 + wot-design-uni 的移动端应用
- 首页(轮播图、公告栏、功能入口、最新文章)
- 发现页(文章分类筛选、下拉刷新、上拉加载)
- 消息中心
- 个人中心(资料编辑、余额、积分)
- 文章详情(富文本渲染、标签展示)
- 反馈、公告、协议页面