feat: 添加客服在线状态和聊天粘贴图片功能
**客服在线状态:** - 后端:添加 admin_users.support_status 字段(online/offline/busy) - 接口:PUT /admin/me/support-status 更新状态 - 前端:管理员顶部导航显示状态切换器(仅客服权限可见) - 转接对话框显示客服在线状态和智能排序(在线优先) **聊天粘贴图片:** - 用户端、移动端、管理端聊天输入框支持 Ctrl+V/Cmd+V 直接粘贴图片 - 自动调用图片压缩和上传逻辑,与文件选择上传保持一致 - 最多支持粘贴9张图片 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -777,12 +777,13 @@ func (r *Repository) TransferConversation(principal Principal, conversationID ui
|
||||
func (r *Repository) GetAvailableSupportAdmins() ([]SupportAdminDTO, error) {
|
||||
// 查询所有有 chat:view 权限且状态为 active 的管理员
|
||||
type adminRow struct {
|
||||
ID uint64
|
||||
Nickname string
|
||||
ID uint64
|
||||
Nickname string
|
||||
SupportStatus string
|
||||
}
|
||||
var admins []adminRow
|
||||
err := r.db.Table("admin_users AS au").
|
||||
Select("DISTINCT au.id, COALESCE(NULLIF(au.nickname, ''), au.username) AS nickname").
|
||||
Select("DISTINCT au.id, COALESCE(NULLIF(au.nickname, ''), au.username) AS nickname, au.support_status").
|
||||
Joins("JOIN admin_user_roles AS aur ON aur.admin_user_id = au.id").
|
||||
Joins("JOIN role_permissions AS rp ON rp.role_id = aur.role_id").
|
||||
Joins("JOIN permissions AS p ON p.id = rp.permission_id").
|
||||
@@ -817,9 +818,10 @@ func (r *Repository) GetAvailableSupportAdmins() ([]SupportAdminDTO, error) {
|
||||
result := make([]SupportAdminDTO, len(admins))
|
||||
for i, a := range admins {
|
||||
result[i] = SupportAdminDTO{
|
||||
ID: a.ID,
|
||||
Nickname: a.Nickname,
|
||||
ChatCount: loadMap[a.ID],
|
||||
ID: a.ID,
|
||||
Nickname: a.Nickname,
|
||||
SupportStatus: a.SupportStatus,
|
||||
ChatCount: loadMap[a.ID],
|
||||
}
|
||||
}
|
||||
return result, nil
|
||||
|
||||
Reference in New Issue
Block a user