feat: 初始化考培练系统项目

- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
111
2026-01-24 19:33:28 +08:00
commit 998211c483
1197 changed files with 228429 additions and 0 deletions

View File

@@ -0,0 +1,290 @@
-- 模拟数据脚本:考试成绩和错题记录
-- 创建时间2025-10-12
-- 说明:为成绩报告和错题本页面添加演示数据
-- 场景:轻医美连锁品牌员工培训考试
USE kaopeilian;
-- ========================================
-- 一、插入考试记录(包含三轮得分)
-- ========================================
-- 用户5consultant_001的考试记录
-- 考试1皮肤生理学基础完成三轮
INSERT INTO exams (
user_id, course_id, exam_name, question_count, total_score, pass_score,
start_time, end_time, duration_minutes,
round1_score, round2_score, round3_score, score, is_passed, status
) VALUES (
5, 1, '皮肤生理学基础 - 动态考试', 10, 100.0, 60.0,
'2025-10-05 09:00:00', '2025-10-05 10:30:00', 60,
70, 85, 100, 100, TRUE, 'submitted'
);
-- 考试2医美产品知识与应用完成三轮
INSERT INTO exams (
user_id, course_id, exam_name, question_count, total_score, pass_score,
start_time, end_time, duration_minutes,
round1_score, round2_score, round3_score, score, is_passed, status
) VALUES (
5, 2, '医美产品知识与应用 - 动态考试', 10, 100.0, 60.0,
'2025-10-06 14:00:00', '2025-10-06 15:20:00', 60,
65, 80, 90, 90, TRUE, 'submitted'
);
-- 考试3美容仪器操作与维护完成两轮
INSERT INTO exams (
user_id, course_id, exam_name, question_count, total_score, pass_score,
start_time, end_time, duration_minutes,
round1_score, round2_score, round3_score, score, is_passed, status
) VALUES (
5, 3, '美容仪器操作与维护 - 动态考试', 10, 100.0, 60.0,
'2025-10-07 10:00:00', '2025-10-07 11:15:00', 60,
80, 95, NULL, 95, TRUE, 'submitted'
);
-- 考试4医美项目介绍与咨询完成一轮
INSERT INTO exams (
user_id, course_id, exam_name, question_count, total_score, pass_score,
start_time, end_time, duration_minutes,
round1_score, round2_score, round3_score, score, is_passed, status
) VALUES (
5, 4, '医美项目介绍与咨询 - 动态考试', 10, 100.0, 60.0,
'2025-10-08 15:00:00', '2025-10-08 15:45:00', 60,
55, NULL, NULL, 55, FALSE, 'submitted'
);
-- 考试5轻医美销售技巧完成三轮
INSERT INTO exams (
user_id, course_id, exam_name, question_count, total_score, pass_score,
start_time, end_time, duration_minutes,
round1_score, round2_score, round3_score, score, is_passed, status
) VALUES (
5, 5, '轻医美销售技巧 - 动态考试', 10, 100.0, 60.0,
'2025-10-09 09:30:00', '2025-10-09 11:00:00', 60,
75, 90, 100, 100, TRUE, 'submitted'
);
-- 考试6客户服务与投诉处理完成三轮
INSERT INTO exams (
user_id, course_id, exam_name, question_count, total_score, pass_score,
start_time, end_time, duration_minutes,
round1_score, round2_score, round3_score, score, is_passed, status
) VALUES (
5, 6, '客户服务与投诉处理 - 动态考试', 10, 100.0, 60.0,
'2025-10-10 14:00:00', '2025-10-10 15:30:00', 60,
85, 95, 100, 100, TRUE, 'submitted'
);
-- 考试7社媒营销与私域运营完成两轮
INSERT INTO exams (
user_id, course_id, exam_name, question_count, total_score, pass_score,
start_time, end_time, duration_minutes,
round1_score, round2_score, round3_score, score, is_passed, status
) VALUES (
5, 7, '社媒营销与私域运营 - 动态考试', 10, 100.0, 60.0,
'2025-10-11 10:00:00', '2025-10-11 11:10:00', 60,
60, 75, NULL, 75, TRUE, 'submitted'
);
-- 考试8卫生消毒与感染控制完成三轮最近的考试
INSERT INTO exams (
user_id, course_id, exam_name, question_count, total_score, pass_score,
start_time, end_time, duration_minutes,
round1_score, round2_score, round3_score, score, is_passed, status
) VALUES (
5, 9, '卫生消毒与感染控制 - 动态考试', 10, 100.0, 60.0,
'2025-10-12 09:00:00', '2025-10-12 10:20:00', 60,
90, 100, 100, 100, TRUE, 'submitted'
);
-- ========================================
-- 二、插入错题记录
-- ========================================
-- 获取刚插入的考试ID使用最后8条记录
SET @exam1_id = (SELECT id FROM exams WHERE user_id=5 AND course_id=1 ORDER BY id DESC LIMIT 1);
SET @exam2_id = (SELECT id FROM exams WHERE user_id=5 AND course_id=2 ORDER BY id DESC LIMIT 1);
SET @exam4_id = (SELECT id FROM exams WHERE user_id=5 AND course_id=4 ORDER BY id DESC LIMIT 1);
SET @exam5_id = (SELECT id FROM exams WHERE user_id=5 AND course_id=5 ORDER BY id DESC LIMIT 1);
SET @exam7_id = (SELECT id FROM exams WHERE user_id=5 AND course_id=7 ORDER BY id DESC LIMIT 1);
-- 考试1的错题皮肤生理学基础 - 第一轮3道错题
INSERT INTO exam_mistakes (
user_id, exam_id, question_content, correct_answer, user_answer, question_type, created_at
) VALUES
(5, @exam1_id, '人体皮肤分为哪几层?', '表皮层、真皮层、皮下组织三层', '表皮和真皮两层', 'essay', '2025-10-05 09:15:00'),
(5, @exam1_id, '关于玻尿酸的作用,以下哪项描述是正确的?\nA. 只能用于填充\nB. 具有保湿和填充双重作用\nC. 不能用于面部\nD. 只适合年轻人使用', 'B', 'A', 'single', '2025-10-05 09:25:00'),
(5, @exam1_id, '敏感肌肤的客户可以使用含酒精的护肤品', '错误', '正确', 'judge', '2025-10-05 09:35:00');
-- 考试2的错题医美产品知识与应用 - 第一轮4道错题
INSERT INTO exam_mistakes (
user_id, exam_id, question_content, correct_answer, user_answer, question_type, created_at
) VALUES
(5, @exam2_id, '光子嫩肤的主要功效包括哪些?(多选)\nA. 美白淡斑\nB. 收缩毛孔\nC. 去除皱纹\nD. 改善红血丝', 'A,B,D', 'A,B,C', 'multiple', '2025-10-06 14:10:00'),
(5, @exam2_id, '水光针的主要成分是___', '透明质酸(玻尿酸)', '胶原蛋白', 'blank', '2025-10-06 14:20:00'),
(5, @exam2_id, '热玛吉适用于所有肤质', '正确', '错误', 'judge', '2025-10-06 14:30:00'),
(5, @exam2_id, '超声刀的作用原理是什么?', '通过高强度聚焦超声波能量作用于筋膜层,促进胶原蛋白再生,达到紧致提拉效果', '利用超声波震动按摩皮肤', 'essay', '2025-10-06 14:40:00');
-- 考试4的错题医美项目介绍与咨询 - 第一轮5道错题未通过
INSERT INTO exam_mistakes (
user_id, exam_id, question_content, correct_answer, user_answer, question_type, created_at
) VALUES
(5, @exam4_id, '面部提升项目适合的年龄段是?\nA. 25岁以下\nB. 25-35岁\nC. 35岁以上\nD. 所有年龄段', 'C', 'B', 'single', '2025-10-08 15:10:00'),
(5, @exam4_id, '皮秒激光可以治疗哪些皮肤问题?(多选)\nA. 色斑\nB. 痘印\nC. 毛孔粗大\nD. 皮肤松弛', 'A,B,C', 'A,B', 'multiple', '2025-10-08 15:15:00'),
(5, @exam4_id, '果酸焕肤后需要严格防晒', '正确', '错误', 'judge', '2025-10-08 15:20:00'),
(5, @exam4_id, '光子嫩肤一个疗程通常需要___次治疗间隔___周', '3-5次3-4周', '5-8次2周', 'blank', '2025-10-08 15:25:00'),
(5, @exam4_id, '请简述如何向客户介绍肉毒素除皱项目的优势和注意事项', '优势:快速见效、微创无痕、可逆性强、针对性强。注意事项:需选择正规品牌、术后避免按摩、孕妇和哺乳期禁用、过敏体质需提前告知', '肉毒素可以除皱,效果很好,没有副作用', 'essay', '2025-10-08 15:30:00');
-- 考试5的错题轻医美销售技巧 - 第一轮3道错题
INSERT INTO exam_mistakes (
user_id, exam_id, question_content, correct_answer, user_answer, question_type, created_at
) VALUES
(5, @exam5_id, '在销售咨询中FABE销售法则中的F代表\nA. Features特征\nB. Functions功能\nC. Facts事实\nD. Feelings感受', 'A', 'C', 'single', '2025-10-09 09:45:00'),
(5, @exam5_id, '有效的销售话术应该具备哪些特点?(多选)\nA. 专业准确\nB. 简单易懂\nC. 夸大效果\nD. 针对性强', 'A,B,D', 'A,B', 'multiple', '2025-10-09 09:55:00'),
(5, @exam5_id, '客户提出价格异议时第一步应该是___客户的关注点', '倾听和理解', '立即降价', 'blank', '2025-10-09 10:05:00');
-- 考试7的错题社媒营销与私域运营 - 第一轮4道错题
INSERT INTO exam_mistakes (
user_id, exam_id, question_content, correct_answer, user_answer, question_type, created_at
) VALUES
(5, @exam7_id, '私域流量运营的核心是?\nA. 大量加粉\nB. 建立信任关系\nC. 频繁推销\nD. 打折促销', 'B', 'A', 'single', '2025-10-11 10:15:00'),
(5, @exam7_id, '短视频内容策划应遵循哪些原则?(多选)\nA. 垂直专业\nB. 持续更新\nC. 互动性强\nD. 纯广告推广', 'A,B,C', 'A,B', 'multiple', '2025-10-11 10:25:00'),
(5, @exam7_id, '企业微信的客户标签管理可以提升运营效率', '正确', '错误', 'judge', '2025-10-11 10:35:00'),
(5, @exam7_id, '请简述如何设计一个有效的会员转化路径', '步骤1.引流获客(短视频/直播2.建立信任专业内容分享3.激活需求(案例展示/体验活动4.促成转化(限时优惠/专属福利5.持续运营(定期回访/会员权益)', '做活动、发优惠券', 'essay', '2025-10-11 10:45:00');
-- ========================================
-- 三、插入更多用户的考试数据(丰富数据)
-- ========================================
-- 用户6其他美容顾问的考试记录
INSERT INTO exams (
user_id, course_id, exam_name, question_count, total_score, pass_score,
start_time, end_time, duration_minutes,
round1_score, round2_score, round3_score, score, is_passed, status
) VALUES
(6, 1, '皮肤生理学基础 - 动态考试', 10, 100.0, 60.0,
'2025-10-03 10:00:00', '2025-10-03 11:20:00', 60,
88, 95, 100, 100, TRUE, 'submitted'),
(6, 2, '医美产品知识与应用 - 动态考试', 10, 100.0, 60.0,
'2025-10-04 14:30:00', '2025-10-04 15:40:00', 60,
92, 100, NULL, 100, TRUE, 'submitted'),
(6, 6, '客户服务与投诉处理 - 动态考试', 10, 100.0, 60.0,
'2025-10-07 09:00:00', '2025-10-07 10:15:00', 60,
78, 90, 95, 95, TRUE, 'submitted');
-- 用户7的考试记录
INSERT INTO exams (
user_id, course_id, exam_name, question_count, total_score, pass_score,
start_time, end_time, duration_minutes,
round1_score, round2_score, round3_score, score, is_passed, status
) VALUES
(7, 3, '美容仪器操作与维护 - 动态考试', 10, 100.0, 60.0,
'2025-10-05 11:00:00', '2025-10-05 12:10:00', 60,
82, 90, 100, 100, TRUE, 'submitted'),
(7, 5, '轻医美销售技巧 - 动态考试', 10, 100.0, 60.0,
'2025-10-09 15:00:00', '2025-10-09 16:15:00', 60,
70, 85, 90, 90, TRUE, 'submitted');
-- ========================================
-- 四、为新增考试添加对应的错题记录
-- ========================================
-- 用户6的错题皮肤生理学基础 - 第一轮1道错题
SET @exam6_1 = (SELECT id FROM exams WHERE user_id=6 AND course_id=1 ORDER BY id DESC LIMIT 1);
INSERT INTO exam_mistakes (
user_id, exam_id, question_content, correct_answer, user_answer, question_type, created_at
) VALUES
(6, @exam6_1, '皮肤的PH值正常范围是\nA. 3.5-4.5\nB. 4.5-6.5\nC. 6.5-7.5\nD. 7.5-8.5', 'B', 'C', 'single', '2025-10-03 10:20:00');
-- 用户6的错题医美产品知识与应用 - 第一轮1道错题
SET @exam6_2 = (SELECT id FROM exams WHERE user_id=6 AND course_id=2 ORDER BY id DESC LIMIT 1);
INSERT INTO exam_mistakes (
user_id, exam_id, question_content, correct_answer, user_answer, question_type, created_at
) VALUES
(6, @exam6_2, '玻尿酸注射后___小时内不能沾水', '24', '12', 'blank', '2025-10-04 14:50:00');
-- 用户6的错题客户服务与投诉处理 - 第一轮2道错题
SET @exam6_3 = (SELECT id FROM exams WHERE user_id=6 AND course_id=6 ORDER BY id DESC LIMIT 1);
INSERT INTO exam_mistakes (
user_id, exam_id, question_content, correct_answer, user_answer, question_type, created_at
) VALUES
(6, @exam6_3, '处理客户投诉的黄金原则是?(多选)\nA. 及时回应\nB. 真诚道歉\nC. 快速解决\nD. 推卸责任', 'A,B,C', 'A,B', 'multiple', '2025-10-07 09:20:00'),
(6, @exam6_3, '客户投诉时应该先___再___', '倾听,解决', '解释,辩解', 'blank', '2025-10-07 09:30:00');
-- 用户7的错题美容仪器操作与维护 - 第一轮2道错题
SET @exam7_1 = (SELECT id FROM exams WHERE user_id=7 AND course_id=3 ORDER BY id DESC LIMIT 1);
INSERT INTO exam_mistakes (
user_id, exam_id, question_content, correct_answer, user_answer, question_type, created_at
) VALUES
(7, @exam7_1, '射频仪器的工作原理是?\nA. 激光热效应\nB. 电磁波热效应\nC. 超声波振动\nD. 机械摩擦', 'B', 'A', 'single', '2025-10-05 11:20:00'),
(7, @exam7_1, '仪器消毒应该在每次使用___进行', '前后', '', 'blank', '2025-10-05 11:35:00');
-- 用户7的错题轻医美销售技巧 - 第一轮3道错题
SET @exam7_2 = (SELECT id FROM exams WHERE user_id=7 AND course_id=5 ORDER BY id DESC LIMIT 1);
INSERT INTO exam_mistakes (
user_id, exam_id, question_content, correct_answer, user_answer, question_type, created_at
) VALUES
(7, @exam7_2, '成交话术中,假设成交法的核心是?\nA. 直接要求客户付款\nB. 假设客户已经同意购买\nC. 给客户压力\nD. 降价促销', 'B', 'A', 'single', '2025-10-09 15:25:00'),
(7, @exam7_2, '顾客异议处理时应避免的做法包括?(多选)\nA. 打断顾客说话\nB. 否认顾客观点\nC. 耐心倾听\nD. 与顾客争辩', 'A,B,D', 'A,B', 'multiple', '2025-10-09 15:35:00'),
(7, @exam7_2, '请列举3种常用的促成交易的方法', '1.假设成交法 2.二选一法 3.优惠刺激法 4.紧迫感营造法任选3种', '降价、送礼品', 'essay', '2025-10-09 15:45:00');
-- ========================================
-- 五、验证插入结果
-- ========================================
-- 统计考试记录
SELECT
'考试记录统计' as category,
COUNT(*) as total,
COUNT(round1_score) as has_round1,
COUNT(round2_score) as has_round2,
COUNT(round3_score) as has_round3,
AVG(round1_score) as avg_round1_score
FROM exams
WHERE user_id IN (5, 6, 7);
-- 统计错题记录
SELECT
'错题记录统计' as category,
COUNT(*) as total,
COUNT(DISTINCT exam_id) as distinct_exams,
COUNT(DISTINCT question_type) as distinct_types
FROM exam_mistakes
WHERE user_id IN (5, 6, 7);
-- 按课程统计错题
SELECT
c.name as course_name,
COUNT(em.id) as mistake_count
FROM exam_mistakes em
JOIN exams e ON em.exam_id = e.id
JOIN courses c ON e.course_id = c.id
WHERE em.user_id IN (5, 6, 7)
GROUP BY c.id, c.name
ORDER BY mistake_count DESC;
-- 按题型统计错题
SELECT
question_type,
COUNT(*) as count
FROM exam_mistakes
WHERE user_id IN (5, 6, 7) AND question_type IS NOT NULL
GROUP BY question_type
ORDER BY count DESC;
-- 显示最近5条考试记录包含三轮得分
SELECT
id,
exam_name,
round1_score,
round2_score,
round3_score,
score,
is_passed,
DATE_FORMAT(start_time, '%Y-%m-%d %H:%i') as start_time
FROM exams
WHERE user_id = 5
ORDER BY start_time DESC
LIMIT 5;