fastadmin 后台通知插件
消息通知插件 (addons/notify)
使用说明
给管理员
- 安装:后台 → 插件管理 → 本地插件 → 安装
notify→ 启用 - 看通知:登录后台后,顶栏右侧铃铛图标显示未读数;点击下拉查看最近消息,点「查看全部」进入列表
- 发通知:菜单「消息通知」→「发送」
- 单发:填写「接收者 ID」(
fa_admin表的管理员 id) - 群发:填写「用户组 ID」(
fa_auth_group的 id),组内正常状态管理员各收一条 - 定时:填写「定时发送」时间,需服务器运行
php think queue:work
- 单发:填写「接收者 ID」(
- 管通知:「查看」列表可筛选未读/已读;
pending状态可撤回;可删除整条通知 - 权限:普通管理员只能看自己的通知;超级管理员可看全部
给开发者
在业务代码中调用($userId 均为 管理员 id,不是前台会员 id):
use app\common\service\NotificationService;
// 立即发送
$id = NotificationService::send(
$userId, // 接收者 admin.id
'order', // 类型
'新订单', // 标题
'您有一笔新订单', // 内容
['url' => '/order/detail?id=1'], // 可选跳转(须通过 URL 白名单)
null, // 定时时间戳,null=立即
$senderAdminId // 可选发送者 admin.id
);
// 用户组群发
$count = NotificationService::sendToGroup($groupId, 'system', '标题', '内容', [], null, $senderAdminId);
// 撤回(仅 pending)
NotificationService::cancel($notificationId, $operatorId, $isSuperAdmin);
// 已读 / 查询
NotificationService::markAsRead($notificationId, $userId);
NotificationService::getUnreadCount($userId);
NotificationService::getList($userId, $page, $pageSize, $isRead);
模板:后台「模板管理」维护模板后,代码中:
$text = NotificationService::renderTemplate('order_new', ['order_no' => 'O001']);
// 返回 ['title' => '...', 'content' => '...'] 或 null
插件配置(后台 → 插件配置)
| 配置项 | 说明 | 默认 |
|---|---|---|
| poll_interval | 铃铛轮询间隔(秒) | 30 |
| page_size | 列表每页条数 | 20 |
| recent_limit | 铃铛下拉条数 | 10 |
| url_whitelist_prefix | extra.url 允许的路径前缀 | /addons/ 等 |
配置页顶部有完整图文说明(__tips__)。
功能概览
- 单用户 / 用户组发送、定时发送、撤回、删除
- 已读 / 未读、顶栏铃铛、持久化列表
- PHP API + Admin 铃铛接口(后台会话鉴权)
- 普通管理员仅看自己;超管看全部
安装与卸载
方式一:ZIP 包安装(推荐,用于其它项目)
- 使用发布包
notify-1.0.0.zip(或执行php think addon -a notify -c package在runtime/addons/生成) - 将 zip 解压到目标项目的
addons/notify/(或后台 插件管理 → 本地插件 上传 zip) - 后台安装并启用插件
- 确认
application/extra/addons.php的config_init含notify(启用后会自动写入) - 确认
public/assets/addons/notify/下有 JS/CSS(启用时从assets/自动发布)
方式二:源码目录
- 将
addons/notify放入项目addons/目录 - 后台插件管理安装并启用(会自动合并
bootstrap.js到public/assets/js/addons.js) - 确认
application/extra/addons.php的config_init含notify - 确认
public/assets/addons/notify/下有 JS/CSS 静态资源
启用/禁用/刷新插件时会执行 Service::refresh(),将已启用插件的 bootstrap.js 合并进 addons.js(含 notify 模块注册与 Notify.init)。无需手改 addons.js。
卸载会删除表:fa_notification、fa_notification_target、fa_notification_template。
重要:本插件不得包含以下会与系统文件冲突的路径(启用/禁用/卸载时可能覆盖或删除系统文件):
application/common.php→ 请用application/common/library/NotifyHelper.phpapplication/admin/lang/zh-cn.php→ 请用application/admin/lang/zh-cn/notify.php(仅插件词条)
.addonrc 中也不应登记上述两个路径。
数据库表
| 表名 | 说明 |
|---|---|
| fa_notification | 通知主表 |
| fa_notification_target | 接收与已读状态(user_id = admin.id) |
| fa_notification_template | 模板 |
Admin 铃铛接口
相对后台入口,需已登录后台:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | notify/unreadCount | 未读数 |
| GET | notify/bellList | 最近通知 |
| POST | notify/read | 标记已读,参数 notification_id |
| POST | notify/readAll | 全部已读 |
队列
定时通知依赖 think-queue,执行:php think queue:work。已撤回的任务不会重复发送。
License
Apache-2.0