feat: OTP首次绑定 + 三端登录修复 + 管理端权限修复 (2026-07-08)

OTP首次绑定:
- 新增统一 OTP 路由 /auth/otp-* (otp.py + router.py)
- 坐席端 OTP 绑定面板 (OtpBindPanel.vue)
- 管理端 OTP 管理列表 (MfaManage.vue)
- agent_login 签发半认证 token 支持首次绑定流程

三端登录修复:
- 坐席/管理端去掉'返回扫码登录'按钮
- 管理端改为二维码始终可见+轮询扫码状态
- 员工端 /itdesk/ 改为 alias 直接服务 H5 (不再301重定向)
- docker-compose 添加 h5 volume 挂载

管理端权限修复:
- 扫码登录改用 get_user_roles() 替代写死 roles=['agent']
- get_user_roles() 增加 agents.role 回退
- 新增 GET /admin/roles/user-roles 端点
- 角色管理页加载用户角色分配数据

文档更新:
- OTP PRD + 系统设计文档
- 故障排查手册 v1.1 (新增6案例)
- nginx 生产基准配置
This commit is contained in:
Simon
2026-07-08 21:54:57 +08:00
parent 6f0fbbb066
commit 400ce3ddcb
27 changed files with 2822 additions and 312 deletions
+26 -4
View File
@@ -29,7 +29,10 @@ from app.api.admin_roles import router as admin_roles_router
from app.api.admin.security_comparison import router as security_comparison_router
from app.api.approval import router as approval_router
from app.api.wecom_jsapi import router as wecom_jsapi_router # v0.5.4 应急页 JS-SDK 签名
# from app.api.knowledge_iteration import router as knowledge_iteration_router # P2-13 知识库自动迭代 (暂未完成)
from app.api.knowledge_iteration import router as knowledge_iteration_router # Tier1 知识库自动迭代
from app.api.approval_queue import router as approval_queue_router # Tier1 独立审批队列
from app.api.vision import router as vision_router # Tier1 视觉理解
from app.api.ragflow_ingestion import router as ragflow_router # Tier1 RAGFlow文档摄入
# 创建 API 路由器
# 所有子路由都会挂载到这个路由器上
@@ -274,11 +277,30 @@ api_router.include_router(admin_users_router, tags=["管理员用户管理"])
from app.api.evaluations import router as evaluations_router
api_router.include_router(evaluations_router, tags=["满意度评价"])
# 知识库自动迭代 API (P2-13)
# 知识库自动迭代 API (Tier1 挂载)
# POST /api/admin/knowledge-iteration/analyze — 触发分析
# GET /api/admin/knowledge-iteration/suggestions — 获取建议列表
# GET /api/admin/knowledge-iteration/suggestions — 获取建议列表(支持audience/confidence筛选)
# GET /api/admin/knowledge-iteration/suggestions/{id} — 获取建议详情
# POST /api/admin/knowledge-iteration/suggestions/{id}/approve — 审核通过
# POST /api/admin/knowledge-iteration/suggestions/{id}/reject — 审核拒绝
# POST /api/admin/knowledge-iteration/suggestions/{id}/rewrite — 改写提案
# POST /api/admin/knowledge-iteration/suggestions/{id}/queue — 放入队列
# POST /api/admin/knowledge-iteration/suggestions/{id}/dequeue-approve — 队列中审批
# GET /api/admin/knowledge-iteration/stats — 获取统计
# api_router.include_router(knowledge_iteration_router, prefix="/admin/knowledge-iteration", tags=["知识库自动迭代"]) # 暂未完成
api_router.include_router(knowledge_iteration_router, prefix="/admin/knowledge-iteration", tags=["知识库自动迭代"])
# 独立审批队列 API (Tier1)
# GET /api/admin/approval-queue/queued — 队列列表
# GET /api/admin/approval-queue/queued/stats — 队列统计
# POST /api/admin/approval-queue/queued/{id}/dequeue-approve — 队列中审批通过
api_router.include_router(approval_queue_router, prefix="/admin/approval-queue", tags=["独立审批队列"])
# 视觉理解 API (Tier1)
# POST /api/vision/analyze — 分析截图(multipart: image + conversation_id
# GET /api/vision/models — 可用视觉模型列表
api_router.include_router(vision_router, prefix="/api/vision", tags=["视觉理解"])
# RAGFlow 文档摄入 API (Tier1)
# POST /api/ragflow/ingest — 上传文档触发RAGFlow处理
# GET /api/ragflow/tasks/{task_id} — 查询处理状态
api_router.include_router(ragflow_router, prefix="/api/ragflow", tags=["RAGFlow文档摄入"])