dootask/app/Models/AppBadge.php
kuaifan 420d46d5cc feat(apps): 新增应用菜单角标(数字/红点,per-user 实时推送)
插件/微应用可在自己的菜单入口显示数字或红点角标,插件未打开也生效。

- 后端:新增 app_badges 表 + AppBadge 模型 + Module/Badge 业务编排 +
  AppsController(badge__set 应用密钥鉴权 / badge__clear 用户鉴权)
- 每应用独立密钥 APP_SECRET:按 appid 持久化于 appstore config.yml,鉴权校验
- 推送:复用 PushTask 下发 appBadge WS 消息;microapp_menu 附带初始角标
- 前端:appBadges Vuex module + WS 处理 + 三处菜单渲染(应用卡片/主菜单入口/
  父『应用』入口聚合)+ 移动端 Tabbar + 打开即清(badge_clear_on_open)
- 用户离职级联清理;同步 ai-kb 角标知识
2026-06-29 02:32:19 +00:00

49 lines
1.6 KiB
PHP

<?php
namespace App\Models;
/**
* App\Models\AppBadge
*
* 插件/微应用菜单角标(每个 (app_id, menu_key, userid) 一行,仅存非清除态)
*
* @property int $id
* @property string $app_id 应用ID
* @property string $menu_key 菜单稳定标识(空串=第一个菜单)
* @property int $userid 用户ID
* @property int $count 角标数字
* @property bool $dot 是否显示红点
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|AppBadge newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|AppBadge newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|AppBadge query()
* @method static \Illuminate\Database\Eloquent\Builder|AppBadge whereAppId($value)
* @method static \Illuminate\Database\Eloquent\Builder|AppBadge whereCount($value)
* @method static \Illuminate\Database\Eloquent\Builder|AppBadge whereDot($value)
* @method static \Illuminate\Database\Eloquent\Builder|AppBadge whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|AppBadge whereMenuKey($value)
* @method static \Illuminate\Database\Eloquent\Builder|AppBadge whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|AppBadge whereUserid($value)
* @mixin \Eloquent
*/
class AppBadge extends AbstractModel
{
protected $table = 'app_badges';
const CREATED_AT = null;
protected $fillable = [
'app_id',
'menu_key',
'userid',
'count',
'dot',
];
protected $casts = [
'userid' => 'integer',
'count' => 'integer',
'dot' => 'boolean',
];
}