Commit Graph

69 Commits

Author SHA1 Message Date
yuliang_guo
20905b72cc feat: 成长路径管理添加拖拽排序功能
All checks were successful
continuous-integration/drone/push Build is passing
- 已选课程支持拖拽调整顺序
- 支持跨阶段拖拽移动课程
- 拖拽时显示视觉反馈(高亮线条)
- 拖拽到空阶段时显示占位提示
- 自动更新课程排序编号

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 14:34:37 +08:00
yuliang_guo
2f47193059 feat: 集成MinIO对象存储服务
All checks were successful
continuous-integration/drone/push Build is passing
- 新增storage_service.py封装MinIO操作
- 修改upload.py使用storage_service上传文件
- 修改course_service.py使用storage_service删除文件
- 适配preview.py支持从MinIO获取文件
- 适配knowledge_analysis_v2.py支持MinIO存储
- 在config.py添加MinIO配置项
- 添加minio依赖到requirements.txt

支持特性:
- 自动降级到本地存储(MinIO不可用时)
- 保持URL格式兼容(/static/uploads/)
- 文件自动缓存到本地(用于预览和分析)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 14:06:22 +08:00
yuliang_guo
fca82e2d44 fix: 优化路由加载失败的错误处理
All checks were successful
continuous-integration/drone/push Build is passing
- 检测chunk加载失败(部署后旧文件被清理)
- 自动刷新页面加载最新资源
- 改进错误提示,告知用户正在刷新

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 13:42:42 +08:00
yuliang_guo
99ded54616 style: 优化错题卡片操作按钮UI
All checks were successful
continuous-integration/drone/push Build is passing
- 操作按钮改为实心渐变样式,更加醒目
- 添加View和Check图标增强辨识度
- 按钮hover时上浮+阴影效果
- 查看解析:蓝色渐变,hover变深蓝
- 标记已掌握:绿色渐变,hover变深绿
- 表格视图按钮同步优化

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 13:19:43 +08:00
yuliang_guo
c66b355a5a style: 优化错题分析筛选框UI设计
All checks were successful
continuous-integration/drone/push Build is passing
- 重新设计筛选工具栏布局,采用flex横向排列
- 搜索框改为圆角胶囊形状,添加hover聚焦效果
- 下拉选择框使用统一的圆角灰底设计
- 添加emoji图标前缀增加辨识度
- 筛选标签改为胶囊形状
- 重置按钮仅在有筛选条件时显示
- 整体视觉更加现代简洁

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 11:16:46 +08:00
yuliang_guo
078117807d style: 优化错题分析页面的答案选项显示格式
All checks were successful
continuous-integration/drone/push Build is passing
1. 重新设计答案对比区域UI:
   - 添加渐变色背景和圆角边框
   - 添加图标徽章(✓/✗)区分正确和错误答案
   - 添加hover悬浮效果增强交互感
   - 响应式布局适配移动端

2. 优化错题详情弹窗:
   - 重新设计弹窗头部为渐变色
   - 答案对比采用卡片式布局
   - 知识点使用标签样式展示
   - 整体视觉更加专业美观

3. 新增formatAnswer函数:
   - 支持JSON数组格式解析
   - 多选答案用顿号分隔显示
   - 空值友好显示"未作答"

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 10:49:32 +08:00
yuliang_guo
ac686c27e7 feat: 优化登录策略 - 延长token有效期并支持自动刷新
Some checks failed
continuous-integration/drone/push Build is failing
1. 后端配置 (.env.ex):
   - ACCESS_TOKEN_EXPIRE_MINUTES: 30 -> 480 (8小时)

2. 前端 (request.ts):
   - 401错误时先尝试使用refresh_token刷新
   - 刷新成功后自动重试原请求
   - 支持并发请求时的token刷新队列
   - 刷新失败才清除状态并跳转登录页
2026-02-02 17:35:29 +08:00
yuliang_guo
7857b4fb22 fix: 修复仪表盘用户数统计和岗位筛选问题
All checks were successful
continuous-integration/drone/push Build is passing
1. 后端 admin.py:
   - 用户总数统计添加 is_deleted=False, is_active=True 过滤
   - 现在只统计有效的活跃用户数

2. 前端 user-management.vue:
   - 岗位筛选从硬编码改为动态加载 positionOptions
   - 岗位列表从API获取,而不是写死的4个选项
2026-02-02 16:27:35 +08:00
yuliang_guo
616bb7185e fix: 任务中心标签页显示真实任务数量
Some checks failed
continuous-integration/drone/push Build is failing
- 移除硬编码的任务数量(12/5/28/3)
- 加载所有任务后统计各状态数量
- 后端任务API page_size限制调整为500
2026-01-31 18:48:26 +08:00
yuliang_guo
e942a9de2c fix: 任务列表优先级显示英文转中文
Some checks failed
continuous-integration/drone/push Build is failing
API返回英文优先级(high/medium/low),前端显示转换为中文(高/中/低)
2026-01-31 18:42:14 +08:00
yuliang_guo
eca0ed8c9d fix: 修复创建任务时优先级转换错误
Some checks failed
continuous-integration/drone/push Build is failing
前端优先级使用中文(高/中/低),需要转换为英文(high/medium/low)
.toLowerCase() 无法转换中文字符
2026-01-31 18:19:19 +08:00
yuliang_guo
506e9ea2e2 feat: 员工同步增加离职处理功能
Some checks failed
continuous-integration/drone/push Build is failing
- 全量同步 (sync_employees) 现在会检测并软删除离职员工
- 增量同步改为软删除而非物理删除,更安全
- 离职处理:设置 is_active=False, is_deleted=True
- 前端显示离职处理数量统计
2026-01-31 18:10:45 +08:00
yuliang_guo
e5dd6f3acb fix: 修复员工同步统计错误
Some checks failed
continuous-integration/drone/push Build is failing
- create_user 现在返回 (user, status) 元组,区分 created/existing/restored/skipped
- sync_employees 正确统计新增、已存在、恢复、跳过的用户数
- 前端显示更准确的同步结果信息
2026-01-31 18:04:27 +08:00
yuliang_guo
6b7b828854 feat: 添加员工同步立即执行按钮
All checks were successful
continuous-integration/drone/push Build is passing
在系统设置页面的员工同步配置中增加"立即同步"按钮,
允许管理员手动触发钉钉员工数据同步
2026-01-31 17:51:41 +08:00
yuliang_guo
18d6d5aff3 refactor: 员工同步复用钉钉免密登录配置
Some checks failed
continuous-integration/drone/push Build is failing
- 移除员工同步独立的 API 凭证配置
- 复用 dingtalk 配置组的 CorpId、AppKey、AppSecret
- 简化前端界面,只保留开关和测试连接
2026-01-31 17:29:10 +08:00
yuliang_guo
7be1ac1787 feat: 员工同步改为钉钉开放API方式
All checks were successful
continuous-integration/drone/push Build is passing
- 新增 dingtalk_service.py 调用钉钉开放API
- 支持获取 Access Token、部门列表、员工列表
- employee_sync_service 改为从钉钉API获取员工
- 前端配置界面支持配置 CorpId、ClientId、ClientSecret
- 移除外部数据库表依赖
2026-01-31 17:25:44 +08:00
yuliang_guo
07638152fc refactor: 员工同步数据库配置改为环境变量
All checks were successful
continuous-integration/drone/push Build is passing
- 前端隐藏数据库连接配置输入
- 只保留"启用开关"和"表名"配置
- 数据库连接从 EMPLOYEE_SYNC_DB_URL 环境变量读取
- 显示数据源配置状态
- 保留默认值用于向后兼容
2026-01-31 17:07:55 +08:00
yuliang_guo
78e1bb3dc3 feat: 员工同步配置支持多租户
All checks were successful
continuous-integration/drone/push Build is passing
- 后端新增员工同步配置API(获取/保存/测试连接)
- employee_sync_service 从数据库读取配置
- 前端系统设置页面添加"员工同步"Tab
- 支持配置:数据库主机、端口、库名、用户名、密码、表名
- 保留默认配置用于向后兼容
2026-01-31 17:01:30 +08:00
yuliang_guo
8500308919 feat: 添加功能开关机制
All checks were successful
continuous-integration/drone/push Build is passing
- 添加环境变量配置 VITE_FEATURE_DUO_PRACTICE 等
- env.ts 新增 isFeatureEnabled 方法
- 菜单根据功能开关动态显示/隐藏
- 路由守卫拦截未启用功能的直接访问
- 开发环境默认开启双人对练,生产环境默认关闭
2026-01-31 14:26:52 +08:00
yuliang_guo
d2e6abfc80 feat: 完善任务中心全部功能
All checks were successful
continuous-integration/drone/push Build is passing
1. 动态加载选项数据
   - 从API获取团队、成员、课程列表
   - 替换硬编码选项为动态渲染

2. 编辑任务功能
   - 复用创建对话框,添加编辑模式
   - 填充表单数据并调用updateTask API

3. 查看详情弹窗
   - 展示任务基本信息、进度、课程、要求
   - 调用getTaskDetail API获取详情

4. 结束任务功能
   - 确认后调用updateTask API更新状态为completed
   - 刷新列表和统计数据

5. 复制任务功能
   - 复制任务内容到表单(标题添加"副本"后缀)
   - 打开创建对话框

6. 发送提醒功能
   - 后端新增 /tasks/{id}/remind API
   - 前端调用API并显示结果
2026-01-31 14:05:55 +08:00
yuliang_guo
0b8f8aa6ca fix: 前端上传组件支持PPT/PPTX文件
All checks were successful
continuous-integration/drone/push Build is passing
- edit-course.vue: 更新accept属性添加.ppt和.pptx
- 更新提示文字显示支持PPT格式
2026-01-31 11:54:16 +08:00
yuliang_guo
0b7c07eb7f feat: 添加请求验证错误详细日志
All checks were successful
continuous-integration/drone/push Build is passing
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-01-31 10:03:54 +08:00
yuliang_guo
fadeaadd65 fix: 修复学员端成长路径数据解析,兼容直接返回数据格式
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-30 18:32:51 +08:00
yuliang_guo
3dcaaaaa35 feat: 成长路径页面增加岗位全选按钮,调整下方区域高度
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-30 18:12:08 +08:00
yuliang_guo
ceb0ae966b fix: 修复模板结构错误
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-30 17:56:12 +08:00
yuliang_guo
52236ff2a8 feat: 重构成长路径编辑页面布局 - 上方基本信息/阶段/统计,下方左右分栏课程配置
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-30 17:55:06 +08:00
yuliang_guo
ebcc0da4c7 fix: 修复课程加载 size 参数超过后端限制的问题
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-30 17:47:55 +08:00
yuliang_guo
a6a87e2d41 fix: 修复课程列表API路径和数据结构
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-30 17:39:40 +08:00
yuliang_guo
14e2e948f5 feat: 优化课程列表显示,双列布局展示更多课程
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-30 16:34:40 +08:00
yuliang_guo
b2e1ed02d1 feat: 增强课程搜索功能,添加分类筛选
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-30 16:27:34 +08:00
yuliang_guo
920c6a64c8 feat: 成长路径支持多岗位关联 + 增强拖拽功能
All checks were successful
continuous-integration/drone/push Build is passing
前端:
- 岗位选择改为多选模式
- 增强拖拽视觉反馈(高亮、动画提示)
- 列表显示多个岗位标签

后端:
- 添加 position_ids 字段支持多岗位
- 兼容旧版 position_id 单选数据
- 返回 position_names 数组
2026-01-30 16:19:40 +08:00
yuliang_guo
a92bfa2b0f fix: 修复考试题目分数显示为小数的问题
All checks were successful
continuous-integration/drone/push Build is passing
- 使用 distributeScores 智能整数分配题目分数
- 格式化分数显示,避免显示长小数
- 总分100分,根据题目数量智能分配整数分数

例如:11道题 = [10,10,10,10,10,10,10,10,10,5,5] 而不是 [9.09...,9.09...]
2026-01-30 16:09:14 +08:00
yuliang_guo
925576d38e feat: 重构成长路径管理页面
All checks were successful
continuous-integration/drone/push Build is passing
- 改为列表+编辑双视图模式
- 岗位列表从后端 API 动态获取
- 课程库从后端 API 动态获取
- 支持按岗位/状态筛选路径
- 支持动态添加/删除学习阶段
- 支持拖拽或点击添加课程节点
2026-01-30 15:53:47 +08:00
yuliang_guo
b4906c543b feat: 实现成长路径功能
All checks were successful
continuous-integration/drone/push Build is passing
- 新增数据库表: growth_path_nodes, user_growth_path_progress, user_node_completions
- 新增 Model: GrowthPathNode, UserGrowthPathProgress, UserNodeCompletion
- 新增 Service: GrowthPathService(管理端CRUD、学员端进度追踪)
- 新增 API: 学员端获取成长路径、管理端CRUD
- 前端学员端从API动态加载成长路径数据
- 更新管理端API接口定义
2026-01-30 15:37:14 +08:00
yuliang_guo
d44111e712 fix: 修复 duo-practice-report.vue 语法错误
All checks were successful
continuous-integration/drone/push Build is passing
移除多余的 try-catch 块
2026-01-30 15:20:18 +08:00
yuliang_guo
c0d0331422 fix: 修复多选题提交后页面崩溃
All checks were successful
continuous-integration/drone/push Build is passing
- formatCorrectAnswer: 增加空值保护和 try-catch
- checkObjectiveAnswer: 增加 options 数组校验
- recordWrongAnswer: 使用 dialogQuestion 快照,增加错误处理
2026-01-30 15:16:12 +08:00
yuliang_guo
e3b7bdcfd8 feat: 实现考试分数智能分配
All checks were successful
continuous-integration/drone/push Build is passing
解决题目数量无法整除总分时出现无限小数的问题

后端:
- 新增 ScoreDistributor 分数分配工具类
- 支持整数分配和小数分配两种模式
- 更新 exam_service.py 使用智能分配
- 考试总分固定100分,按题目数量智能分配

前端:
- 新增 scoreFormatter.ts 分数格式化工具
- 提供分数显示、等级判断等辅助函数

示例:100分/6题 = [17,17,17,17,16,16] 总和=100
2026-01-30 14:50:41 +08:00
yuliang_guo
64f5d567fa feat: 实现 KPL 系统功能改进计划
Some checks failed
continuous-integration/drone/push Build is failing
1. 课程学习进度追踪
   - 新增 UserCourseProgress 和 UserMaterialProgress 模型
   - 新增 /api/v1/progress/* 进度追踪 API
   - 更新 admin.py 使用真实课程完成率数据

2. 路由权限检查完善
   - 新增前端 permissionChecker.ts 权限检查工具
   - 更新 router/guard.ts 实现团队和课程权限验证
   - 新增后端 permission_service.py

3. AI 陪练音频转文本
   - 新增 speech_recognition.py 语音识别服务
   - 新增 /api/v1/speech/* API
   - 更新 ai-practice-coze.vue 支持语音输入

4. 双人对练报告生成
   - 更新 practice_room_service.py 添加报告生成功能
   - 新增 /rooms/{room_code}/report API
   - 更新 duo-practice-report.vue 调用真实 API

5. 学习提醒推送
   - 新增 notification_service.py 通知服务
   - 新增 scheduler_service.py 定时任务服务
   - 支持钉钉、企微、站内消息推送

6. 智能学习推荐
   - 新增 recommendation_service.py 推荐服务
   - 新增 /api/v1/recommendations/* API
   - 支持错题、能力、进度、热门多维度推荐

7. 安全问题修复
   - DEBUG 默认值改为 False
   - 添加 SECRET_KEY 安全警告
   - 新增 check_security_settings() 检查函数

8. 证书 PDF 生成
   - 更新 certificate_service.py 添加 PDF 生成
   - 添加 weasyprint、Pillow、qrcode 依赖
   - 更新下载 API 支持 PDF 和 PNG 格式
2026-01-30 14:22:35 +08:00
yuliang_guo
9793013a56 chore: 添加前端环境配置文件
Some checks failed
continuous-integration/drone/push Build is failing
- 添加 frontend/.env.production (VITE_APP_ENV=production)
- 修改 .gitignore 允许提交环境配置
- 修复生产环境显示"开发环境"标识的问题
2026-01-29 18:55:25 +08:00
yuliang_guo
37b8d6be1a feat: 新增Excel内容提取支持 & 修复成绩查询课程筛选
Some checks failed
continuous-integration/drone/push Build is failing
- 后端 knowledge_analysis_v2.py: 新增 _extract_excel_content 方法支持xlsx/xls文件
- 前端 student-scores.vue: 课程筛选改为动态加载,修复筛选参数传递
2026-01-29 18:06:38 +08:00
yuliang_guo
16ffdfc114 fix: 登录后跳转前检查目标页面权限
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-29 17:29:42 +08:00
yuliang_guo
34789e582e debug: 钉钉环境自动启用 vConsole
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-29 17:22:45 +08:00
yuliang_guo
ad969e39d4 debug: 添加钉钉免密登录调试日志
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-29 17:18:40 +08:00
yuliang_guo
696b48e97a fix: 优化资源重复的错误提示
Some checks failed
continuous-integration/drone/push Build is failing
1. 后端 course_service.py:
   - 课程名重复时返回 existing_id 和 existing_name
   - 成长路径名重复时返回详细信息

2. 前端 edit-course.vue:
   - 处理409冲突错误,提供跳转到已存在课程的选项

3. 前端 errorHandler.ts:
   - 添加409错误的处理逻辑
   - 添加冲突错误工具函数

4. 前端 position-management.vue, user-management.vue:
   - 改进错误消息提取,显示更详细的错误信息
2026-01-29 17:04:15 +08:00
yuliang_guo
7998b32080 fix: 保留首页需要的 getUserStatistics 和 getRecentExams 函数
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-29 16:56:55 +08:00
yuliang_guo
e419e7fad0 fix: 修复 API 文件的 request 导入路径
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-29 16:55:32 +08:00
yuliang_guo
598be1078d fix: 修复 data-dashboard.vue 多余的 template 标签
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-29 16:54:24 +08:00
yuliang_guo
f118cebca1 fix: 修复 my-certificates.vue 多余的 template 标签
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-29 16:53:48 +08:00
yuliang_guo
6f0f2e6363 feat: KPL v1.5.0 功能迭代
Some checks failed
continuous-integration/drone/push Build is failing
1. 奖章条件优化
- 修复统计查询 SQL 语法
- 添加按类别检查奖章方法

2. 移动端适配
- 登录页、课程中心、课程详情
- 考试页面、成长路径、排行榜

3. 证书系统
- 数据库模型和迁移脚本
- 证书颁发/列表/下载/验证 API
- 前端证书列表页面

4. 数据大屏
- 企业级/团队级数据 API
- ECharts 可视化大屏页面
2026-01-29 16:51:17 +08:00
yuliang_guo
ce8ded26f1 fix: 移除不存在的 Crown 图标
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-29 16:21:03 +08:00