XY BLOG

XY的BLOG

fastadmin 后台通知插件

Published on in Posts
Updated on
Short link: https://b.xyzt07.cn/s/5
Share this post
A ⇄ 文

消息通知插件 (addons/notify)

使用说明

给管理员

  1. 安装:后台 → 插件管理 → 本地插件 → 安装 notify → 启用
  2. 看通知:登录后台后,顶栏右侧铃铛图标显示未读数;点击下拉查看最近消息,点「查看全部」进入列表
  3. 发通知:菜单「消息通知」→「发送」
    • 单发:填写「接收者 ID」(fa_admin 表的管理员 id)
    • 群发:填写「用户组 ID」(fa_auth_group 的 id),组内正常状态管理员各收一条
    • 定时:填写「定时发送」时间,需服务器运行 php think queue:work
  4. 管通知:「查看」列表可筛选未读/已读;pending 状态可撤回;可删除整条通知
  5. 权限:普通管理员只能看自己的通知;超级管理员可看全部

给开发者

在业务代码中调用($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_prefixextra.url 允许的路径前缀/addons/ 等

配置页顶部有完整图文说明(__tips__)。


功能概览

  • 单用户 / 用户组发送、定时发送、撤回、删除
  • 已读 / 未读、顶栏铃铛、持久化列表
  • PHP API + Admin 铃铛接口(后台会话鉴权)
  • 普通管理员仅看自己;超管看全部

安装与卸载

方式一:ZIP 包安装(推荐,用于其它项目)

  1. 使用发布包 notify-1.0.0.zip(或执行 php think addon -a notify -c package 在 runtime/addons/ 生成)
  2. 将 zip 解压到目标项目的 addons/notify/(或后台 插件管理 → 本地插件 上传 zip)
  3. 后台安装并启用插件
  4. 确认 application/extra/addons.php 的 config_init 含 notify(启用后会自动写入)
  5. 确认 public/assets/addons/notify/ 下有 JS/CSS(启用时从 assets/ 自动发布)

方式二:源码目录

  1. 将 addons/notify 放入项目 addons/ 目录
  2. 后台插件管理安装并启用(会自动合并 bootstrap.js 到 public/assets/js/addons.js)
  3. 确认 application/extra/addons.php 的 config_init 含 notify
  4. 确认 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.php
  • application/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 铃铛接口

相对后台入口,需已登录后台:

方法路径说明
GETnotify/unreadCount未读数
GETnotify/bellList最近通知
POSTnotify/read标记已读,参数 notification_id
POSTnotify/readAll全部已读

队列

定时通知依赖 think-queue,执行:php think queue:work。已撤回的任务不会重复发送。

License

Apache-2.0

notify-1.0.0.zip