【项目实训(个人11)】

继续进行法律文书智能摘要系统的开发,加入了管理员的页面,并优化了一些功能

设计管理员页面

现有前端信息

数据模型 说明
users 用户账号信息,包括登录凭证、个人资料等
documents 文档基础信息,如标题、类型、上传者、存储路径等
annotations 文档内的批注/标注记录(如高亮、评论等)
annotation_threads 批注的讨论线程,支持多轮回复与协作
chat_sessions 对话会话,记录用户与AI助手的每一次连续对话
chat_messages 对话消息,每条会话中的具体问答内容
feedback 用户对系统功能或AI输出的反馈(评分、意见等)
batch_tasks 批量处理任务,如批量摘要、批量导入等异步作业
summary_feedback 用户对摘要生成结果的针对性反馈(准确性、完整性等)

现有后端 API (15 个模块)

/api/auth/* 、 /api/documents/* 、 /api/summary/* 、 /api/annotations/* 、 /api/chat/* 、 /api/storage/* 、 /api/feedback/* 、 /api/knowledge-graph/* 、 /api/batch-summary/* 、 /api/user-db/* 、 /api/similar-cases/* 、 /api/export/* 、 /api/keywords/* 、 /api/statistics/* 、 /api/law/*

核心数据模型

users 、 documents 、 annotations 、 annotation_threads 、 chat_sessions 、 chat_messages 、 feedback 、 batch_tasks 、 summary_feedback这一部分用表格的形式呈现

问题

系统里有两套用户体系 ,但都没有可以直接登录的管理员账号

  1. 批注系统的用户annotation_users 表)

    • 在代码中硬编码了三个用户:admineditorviewer

    • 但它们没有密码 ,只用于控制"批注功能"的权限,不能用来登录系统

  2. 主登录系统的用户users 表)

    • 只存了 usernameemailpassword

    • 没有角色字段 (如 role),所以所有普通账号在登录后都没有"管理员"身份。

  3. 前端管理路由/admin

    • 配置了 requiresAdmin: true 守卫,要求管理员才能访问

    • 后端没有任何判断用户是否为管理员的逻辑,所以这个守卫实际无效。

阶段1

新增文件 (4 个)

1.AdminLayout.vue

管理端基础布局:深色左侧导航栏 + 白色顶栏 + 内容区,可收缩侧边栏,用户头像下拉菜单

2.admin/DashboardView.vue

系统仪表盘:4 个统计卡片(用户/文书/AI对话/反馈)+ 活跃度柱状图 + 最新动态列表

3.admin/UsersView.vue

用户管理:搜索/筛选/分页表格,支持编辑角色、启用/禁用、重置密码、删除用户

4.admin/DocumentsView.vue

文档管理:搜索/类型/状态筛选表格,支持下载、删除、处理状态监控

修改文件 (2 个)

main.ts 新增管理端路由( /admin 嵌套路由 + 角色守卫),旧的 /admin/feedback 路由整合到管理端布局下

App.vue 管理端页面使用独立布局(不套用用户端侧边栏),用户面板新增"管理后台"入口

管理员账号信息

改动

后端 (3个文件) :

  1. db.py --- users 表增加 role 字段, init_db() 启动时自动创建默认管理员账号, create_user() 支持 role 参数

  2. main.py --- 登录/验证码登录接口返回用户完整信息(含角色),登录后自动同步到批注用户表

  3. connection.py --- 新增 sync_annotation_user() 函数,将主系统用户自动同步到 annotation_users 表

前端 (3个文件) :

  1. auth.ts --- 新增 setUserRole() / getUserRole() 函数, clearToken() 同时清除角色

  2. LoginView.vue --- 密码登录和验证码登录成功后保存用户角色

  3. main.ts --- 路由守卫改为基于 getUserRole() 判断是否为管理员(不再使用用户名模糊匹配)

登录方式

  1. 启动后端后, admin / admin123 默认账号会自动创建(如果数据库中不存在)

  2. 使用该账号登录即可访问 /admin 管理后台

  3. 普通用户通过注册页面创建,默认角色为 user ,无法访问管理后台

优化

1.管理员登录后直接进入的是后台管理页面而不是上传文档的主界面

2.管理员的管理后台界面的左侧栏需要跟用户界面的参数相同,统一参数

管理员也可以到用户界面,也可以从用户界面跳转

阶段2

1. 后端管理端鉴权中间件
  • 描述:当前所有 /api/admin/* 接口无认证校验,任何知道接口的人都能调用
  • 价值:防止未授权访问,保护用户数据和系统安全
  • 技术实现
    • 新增 admin_required 中间件/依赖注入
    • 验证请求携带的 token,查询用户 role = 'admin'
    • 所有 admin API 统一挂载此依赖
2. 操作审计日志
  • 描述:记录管理员的关键操作(修改角色、删除用户、删除文档)
  • 价值:追溯操作历史,满足合规要求
  • 技术实现
    • 新建 audit_logs 表(id, admin_id, action, target_type, target_id, detail, created_at)
    • 在更新角色、删除用户等操作时写入日志
    • 新增 /admin/audit-logs API 和前端页面
3. 反馈管理真实数据
  • 描述:反馈管理页面当前返回空数据 stub
  • 价值:让反馈收集功能真正可用
  • 技术实现
    • 在 app.db 或 legal_docs.db 中创建 feedbacks 表
    • 实现 get_feedback_stats_global、list_feedbacks 函数
    • 前端反馈页面替换 emoji 为线性 SVG 图标
  1. 后端管理端鉴权中间件
  • admin_auth.py --- 新增 get_admin_user 依赖注入函数,验证 X-Admin-Username 请求头对应的用户角色为 admin ,非管理员返回 403

  • admin_api.py --- 所有管理端 API( /stats 、 /users 、 /documents )统一挂载 admin=Depends(get_admin_user) ,非管理员无法调用

  • http.ts --- 前端请求 /admin/ 路径时自动携带 X-Admin-Username 、 X-Admin-Role 、 X-Admin-Token 请求头

  1. 操作审计日志
  • db.py --- 新增 audit_logs 表(管理员用户名、操作、目标类型、目标 ID、详情、时间戳)

  • admin_api.py --- 新增 GET /admin/audit-logs 分页接口

  • AuditLogsView.vue --- 新增审计日志页面,展示操作时间、管理员、操作类型、目标、详情

  • AdminLayout.vue --- 左侧导航新增"审计日志"入口(盾牌图标 SVG)

  • 审计自动记录 :修改用户角色、删除用户时自动写入日志

  1. 反馈管理真实数据
  • db.py --- 新增 feedbacks 表(文档 ID、角色、评分、评论、IP、状态、管理员备注等)

  • db.py --- 实现完整的反馈 CRUD 函数: save_summary_feedback 、 get_feedback_stats 、 get_user_feedback 、 get_feedback_stats_global 、 list_feedbacks

  • summary.py --- 恢复所有反馈 API 端点调用真实数据库函数

  • AdminFeedbackView.vue --- 全面重写:去除所有 emoji,改用线性 SVG 图标,对接真实统计数据,支持筛选、分页、状态展示

操作审计日志

操作审计日志用于 记录管理员在管理后台中的关键操作 ,实现对管理行为的追溯和审计。每次管理员执行敏感操作时,系统自动记录操作人、操作类型、目标对象和详细信息。

记录范围

当前自动记录以下操作:

记录内容 修改用户角色 在用户管理中编辑用户角色 用户名、被修改用户 ID、新角色(admin/user)

删除用户 在用户管理中删除用户 用户名、被删除用户 ID

未来可扩展记录的操作:删除文档、修改系统配置、导出数据等。

阶段3

1.仪表盘趋势图表
  • 描述:当前仅展示静态数字,缺少时间维度的趋势分析
  • 价值:帮助管理员快速了解系统增长情况
  • 技术实现
    • 后端新增 /admin/stats/history 接口,返回过去 7/30 天的日统计数据
    • 前端使用 Canvas 或 SVG 绘制折线图(不引入第三方图表库,保持轻量)
    • 展示文书上传量、对话量趋势
2. 用户管理增强
  • 描述:补充缺失的用户管理功能
  • 价值:提升管理效率,满足日常运维需求
  • 具体功能
    • 禁用/启用用户:不删除账号但禁止登录(增加 status 字段到 users 表)
    • 最后登录时间:登录时更新 last_login_at 字段
    • 批量操作:支持批量禁用/删除/修改角色
    • 用户详情页:查看该用户上传的文书、对话历史、反馈记录
3. 文档管理增强
  • 描述:补充文档管理的核心运维功能
  • 价值:减少异常文档处理工作量
  • 具体功能
    • 上传者关联:文档列表显示上传者用户名
    • 文档状态:展示处理中、已完成、处理失败状态
    • 重新处理:对处理失败的文档触发重新向量化
    • 批量下载/删除:支持多选操作
    • 存储统计:显示总存储占用、文档大小分布

1.仪表盘趋势图

  • 后端 --- admin_api.py GET /admin/stats/history?days=7|30 ,返回过去 N 天每日文书上传量和对话消息数

  • 前端 --- DashboardView.vue 使用纯 SVG 折线图展示趋势,支持 7 天/30 天切换,蓝色线=文书上传、紫色线=对话消息,带坐标轴和图例

  1. 用户管理增强
  • 数据库 --- db.py users 表新增 status (active/disabled)和 last_login_at 字段

  • 登录拦截 --- main.py 被禁用用户登录时返回 403

  • 最后登录 --- 登录成功后自动更新 last_login_at 时间戳

  • 禁用/启用 --- admin_api.py PUT /admin/users/{id}/status ,前端 UsersView.vue 增加禁用按钮(锁/勾选图标)和状态徽章

  • 批量操作 --- 复选框多选 + 批量启用/禁用/删除,确认弹窗二次确认

  • 审计 --- 所有状态修改和删除操作自动记录审计日志

  1. 文档管理增强
  • 上传者关联 --- db.py 新增 doc_uploaders 映射表,文档列表显示上传者用户名

  • 文档状态 --- admin_api.py 通过 chunks 表判断文档状态(有切片=已处理,否则=处理中)

  • 重新处理 --- admin_api.py POST /admin/documents/{doc_id}/reprocess ,触发重新向量化

  • 前端展示 --- DocumentsView.vue 新增状态列、上传者列、状态筛选、重新处理按钮

优化

1.加入批注时的具体角色的标注(之前为解决的批注的角色为管理员,解决这里的标记错误)

另外,补充批注的删除按钮,现在的问题是,标准为已解决的批注无法删除;

解决问题:打开右侧面板的批注页面的时候,用户如果点击添加批注,右侧面板要回滚到最上方添加批注的页面;

另外,在文本的标注版页面,AI要点编辑按钮无效,这里换成删除按钮;

2.知识图谱构建按钮,更加明显

  1. 强化视觉层级

    • 将按钮颜色改为品牌主色(如蓝色、绿色),使用高对比度背景。

    • 增加按钮的圆角轻微阴影,使其从白色/浅灰背景中浮出。

  2. 调整按钮尺寸与位置

    • 放大按钮的宽高(例如高度 40px → 48px),内边距更宽。

    • 如果"构建图谱"是核心操作,可将其固定在左上角右侧操作栏顶部,与普通筛选器(如案由聚类、中精度)分开区域。

  1. 优化周围布局

    • 把同类操作("重新聚类""导出CSV")归为一组,用分割线或背景色区块区分。

    • "构建图谱"按钮与这组操作之间留出更大间距,并置于最左或最上位置。

3.管理员界面加入退出的功能

管理员登录,然后管理界面和文书页面相互跳转的时候,加强了跳转按钮

4.管理员用户管理页面错误:操作中的修改密码与禁用的图标相同

5.管理员界面,打开文书返回时,返回的管理员的文书管理而不是用户的文书管理

小结

本次开发重点完成了法律文书智能摘要系统的管理员后台建设,并系统性地优化了多项核心功能。首先,新增了独立的管理端布局与四个管理页面(仪表盘、用户管理、文档管理、审计日志),通过数据库扩展和路由守卫实现了基于角色的访问控制,默认管理员账号可一键登录。同时,针对批注模块修复了角色标识错误、补充了删除功能并优化了交互体验;知识图谱构建按钮得到突出显示,管理界面与用户界面之间的跳转逻辑更加清晰,解决了返回路径错误和图标混淆等问题。

在系统安全与数据管理方面,引入了管理端鉴权中间件,所有 /api/admin/* 接口均需验证管理员身份,并新增操作审计日志表自动记录角色修改、用户删除等关键行为。反馈管理模块从空数据 stub 升级为真实数据库驱动,支持统计分析、筛选分页和 SVG 图标展示。仪表盘增加了基于 7/30 天的文书上传与对话消息趋势折线图;用户管理支持禁用/启用、最后登录时间记录、批量操作及用户详情页;文档管理完善了上传者关联、处理状态显示、重新处理失败文档以及批量下载/删除功能。整体而言,系统在功能性、安全性和运维效率上均得到显著提升。

相关推荐
zhangfeng11331 小时前
国家超算中心 htc 如果只有gpu资源 没有cpu资源 操作文件的时候会不会很卡呢
人工智能·pytorch·python·机器学习
jiayong231 小时前
01 检查 Python 版本与环境
开发语言·python
阿哟阿哟1 小时前
vna.3.1.9.cn.jar设置成中文界面
python·pycharm·jar
XZ-0700011 小时前
MySQL-综合应用(Python+Html)
python·mysql·html
噜噜噜阿鲁~1 小时前
python学习笔记 | 11.4、面向对象高级编程-定制类
笔记·python·学习
站大爷IP1 小时前
Python闭包变量作用域踩坑实录,原来我们都想错了
python
zzj_2626102 小时前
实验七 Python 文件操作与异常处理
开发语言·python
菜到离谱但坚持2 小时前
零门槛学LangChain:AI开发从入门到实战
python·langchain·prompt·rag
databook2 小时前
一次函数图像工厂:用 SymPy 自动生成 y=kx+b 对比动画
python·数学·动效