Some checks failed
continuous-integration/drone/push Build is failing
1. 奖章条件优化 - 修复统计查询 SQL 语法 - 添加按类别检查奖章方法 2. 移动端适配 - 登录页、课程中心、课程详情 - 考试页面、成长路径、排行榜 3. 证书系统 - 数据库模型和迁移脚本 - 证书颁发/列表/下载/验证 API - 前端证书列表页面 4. 数据大屏 - 企业级/团队级数据 API - ECharts 可视化大屏页面
6.3 KiB
6.3 KiB
KPL 考培练系统 功能迭代更新日志
日期: 2026-01-29
版本: v1.5.0
一、奖章条件优化
修复内容
- 修复
badge_service.py中统计查询的 SQL 语法问题 - 将非标准
func.if_替换为 SQLAlchemy 标准case语句 - 优化考试统计逻辑:通过数、满分数、优秀数分开查询
- 添加
func.coalesce处理空值
新增功能
check_badges_by_category()- 按类别检查奖章check_exam_badges()- 考试后触发check_practice_badges()- 练习后触发check_streak_badges()- 签到后触发check_level_badges()- 等级变化后触发
文件变更
backend/app/services/badge_service.py
二、移动端适配
适配页面
| 页面 | 文件 | 适配要点 |
|---|---|---|
| 登录页 | views/login/index.vue |
表单全宽、背景动画隐藏、钉钉安全区域 |
| 课程中心 | views/trainee/course-center.vue |
单列卡片、分类横向滚动、操作按钮网格化 |
| 课程详情 | views/trainee/course-detail.vue |
侧边栏折叠、视频自适应、工具栏响应式 |
| 考试页面 | views/exam/practice.vue |
选项垂直排列、按钮放大、弹窗全屏 |
| 成长路径 | views/trainee/growth-path.vue |
雷达图缩放、卡片堆叠、统计区折叠 |
| 排行榜 | views/trainee/leaderboard.vue |
列表简化、签到按钮全宽 |
技术方案
- 使用
@media (max-width: 768px)和@media (max-width: 480px)断点 - 钉钉环境使用
env(safe-area-inset-*)适配安全区域
三、证书系统
数据库设计
-- 证书模板表
CREATE TABLE certificate_templates (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
type ENUM('course', 'exam', 'achievement') NOT NULL,
background_url VARCHAR(500),
template_html TEXT,
template_style TEXT,
is_active BOOLEAN DEFAULT TRUE,
...
);
-- 用户证书表
CREATE TABLE user_certificates (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
template_id INT NOT NULL,
certificate_no VARCHAR(50) UNIQUE NOT NULL,
title VARCHAR(200) NOT NULL,
...
);
后端实现
- 模型:
CertificateTemplate,UserCertificate,CertificateType - 服务:
CertificateServiceissue_course_certificate()- 颁发课程证书issue_exam_certificate()- 颁发考试证书issue_achievement_certificate()- 颁发成就证书generate_certificate_image()- 生成分享图片get_certificate_by_no()- 验证证书
API 端点
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /certificates/me |
我的证书列表 |
| GET | /certificates/{id} |
证书详情 |
| GET | /certificates/{id}/image |
获取分享图片 |
| GET | /certificates/{id}/download |
下载证书 |
| GET | /certificates/verify/{no} |
验证证书(无需登录) |
| POST | /certificates/issue/course |
颁发课程证书 |
| POST | /certificates/issue/exam |
颁发考试证书 |
前端实现
- API:
frontend/src/api/certificate.ts - 页面:
frontend/src/views/trainee/my-certificates.vue - 功能: 证书列表、分类筛选、预览、分享、下载
文件变更
backend/migrations/add_certificate_system.sql(新增)backend/app/models/certificate.py(新增)backend/app/services/certificate_service.py(新增)backend/app/api/v1/endpoints/certificate.py(新增)backend/app/models/__init__.py(修改)backend/app/api/v1/__init__.py(修改)frontend/src/api/certificate.ts(新增)frontend/src/views/trainee/my-certificates.vue(新增)frontend/src/router/index.ts(修改)
四、数据大屏
数据指标
| 类别 | 指标 |
|---|---|
| 概览 | 总学员数、今日活跃、周活跃、月活跃、总学习时长、签到率 |
| 考试 | 总次数、通过率、平均分、满分人数 |
| 部门 | 成员数、通过率、平均学习时长、平均等级 |
| 趋势 | 近7天活跃用户、学习时长、考试次数 |
| 分布 | 1-10级用户数量分布 |
| 动态 | 最新学习活动实时滚动 |
后端实现
- 服务:
DashboardServiceget_enterprise_overview()- 企业级概览get_department_comparison()- 部门对比get_learning_trend()- 学习趋势get_level_distribution()- 等级分布get_realtime_activities()- 实时动态get_team_dashboard()- 团队级数据get_course_ranking()- 课程热度排行
API 端点
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /dashboard/enterprise/overview |
企业概览 |
| GET | /dashboard/enterprise/departments |
部门对比 |
| GET | /dashboard/enterprise/trend |
学习趋势 |
| GET | /dashboard/enterprise/level-distribution |
等级分布 |
| GET | /dashboard/enterprise/activities |
实时动态 |
| GET | /dashboard/enterprise/course-ranking |
课程排行 |
| GET | /dashboard/team |
团队数据 |
| GET | /dashboard/all |
完整数据(一次性) |
前端实现
- API:
frontend/src/api/dashboard.ts - 页面:
frontend/src/views/admin/data-dashboard.vue - 图表: ECharts (横向柱状图、折线图、仪表盘、饼图)
- 功能: 全屏模式、5分钟自动刷新、响应式布局
文件变更
backend/app/services/dashboard_service.py(新增)backend/app/api/v1/endpoints/dashboard.py(新增)backend/app/api/v1/__init__.py(修改)frontend/src/api/dashboard.ts(新增)frontend/src/views/admin/data-dashboard.vue(新增)frontend/src/router/index.ts(修改)
部署说明
数据库迁移
需执行以下 SQL 脚本:
# 证书系统迁移
mysql -u root -p kaopeilian < backend/migrations/add_certificate_system.sql
依赖安装
后端新增依赖(用于证书图片生成):
pip install Pillow qrcode
路由变更
新增前端路由:
/trainee/my-certificates- 我的证书/manager/data-dashboard- 数据大屏
待办事项
- 证书 PDF 生成(需安装 weasyprint)
- 课程完成进度追踪(user_course_progress 表)
- 数据大屏数据缓存优化
- 钉钉环境下底部导航适配