修复内容: 1. ✅ ESLint配置完善 - 添加浏览器全局变量:setTimeout, localStorage, getComputedStyle等 - 禁用保留组件名规则 (vue/no-reserved-component-names) 2. ✅ 清理未使用的导入(自动修复648个警告) - BigScreenPortrait.vue: 移除reactive, mockPortraitData, generateChartData等 - Evaluate.vue: 移除Search, Refresh, Download等未使用图标组件 - Portrait.vue: 移除Download, Refresh组件 - SubmissionDialog.vue: 移除Link组件 - ReportCenter.vue: 移除onMounted导入 3. ✅ 修复未使用的变量 - ReportAnalysis.vue: 移除未使用的index变量 - FileUpload.vue: 移除未使用的index变量 修复结果: - 修复前:779个问题(42错误,737警告) - 修复后:13个问题(0错误,13警告)✅ - 修复率:98.3% 剩余13个警告: - 未使用的error catch变量(4个) - 未使用的index/role/student参数(7个) - 未使用的导入DataAnalysis, getChartColors(2个) - 所有警告不影响代码运行 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
271 lines
9.3 KiB
Python
271 lines
9.3 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
生成mockReportData - 基于真实评分数据生成报告趋势数据
|
||
"""
|
||
|
||
import json
|
||
from datetime import datetime, timedelta
|
||
import random
|
||
|
||
# 读取已生成的评价数据
|
||
with open('分析报告/generated_evaluations.json', 'r', encoding='utf-8') as f:
|
||
evaluations = json.load(f)
|
||
|
||
# 读取画像数据(用于能力分析)
|
||
with open('分析报告/generated_portrait_data.json', 'r', encoding='utf-8') as f:
|
||
portrait_data = json.load(f)
|
||
|
||
# 6门课程对应的月份(2024年9月-2025年2月)
|
||
COURSE_MONTHS = [
|
||
'2024-09', # SQL金融数据处理
|
||
'2024-10', # Python金融分析
|
||
'2024-11', # Matlab金融建模
|
||
'2024-12', # 金融数据可视化
|
||
'2025-01', # 证券模拟投资竞赛实战
|
||
'2025-02', # 期货模拟交易大赛实战
|
||
]
|
||
|
||
COURSE_NAMES = [
|
||
'SQL金融数据处理',
|
||
'Python金融分析',
|
||
'Matlab金融建模',
|
||
'金融数据可视化',
|
||
'证券模拟投资竞赛实战',
|
||
'期货模拟交易大赛实战'
|
||
]
|
||
|
||
def calculate_overall_score(company_score, teacher_score, expert_score):
|
||
"""计算综合评分(统一百分制)"""
|
||
# 所有分数已经是百分制
|
||
# 加权平均:企业30%,教师40%,专家30%
|
||
overall = company_score * 0.3 + teacher_score * 0.4 + expert_score * 0.3
|
||
return round(overall, 1)
|
||
|
||
def generate_development_trends():
|
||
"""生成发展趋势数据"""
|
||
trends = {}
|
||
|
||
for student_id in range(1, 41):
|
||
student_id_str = str(student_id)
|
||
|
||
# 获取该学生的评价数据
|
||
company_eval = evaluations['company'].get(student_id_str, {})
|
||
teacher_eval = evaluations['teacher'].get(student_id_str, {})
|
||
expert_eval = evaluations['expert'].get(student_id_str, {})
|
||
|
||
# 基础评分(公司、教师、专家的平均分)
|
||
company_base = (company_eval.get('attitude', 3.5) +
|
||
company_eval.get('skills', 3.5) +
|
||
company_eval.get('communication', 3.5) +
|
||
company_eval.get('problemSolving', 3.5)) / 4 * 20 # 转为百分制
|
||
|
||
teacher_base = (teacher_eval.get('theory', 3.5) +
|
||
teacher_eval.get('practice', 3.5) +
|
||
teacher_eval.get('innovation', 3.5) +
|
||
teacher_eval.get('attitude', 3.5)) / 4 * 20
|
||
|
||
expert_base = (expert_eval.get('industryKnowledge', 3.5) +
|
||
expert_eval.get('technicalDepth', 3.5) +
|
||
expert_eval.get('applicationAbility', 3.5) +
|
||
expert_eval.get('potential', 3.5)) / 4 * 20
|
||
|
||
# 生成6个月的趋势数据(模拟学习进步曲线)
|
||
monthly_scores = []
|
||
for i, month in enumerate(COURSE_MONTHS):
|
||
# 初始分数基于基础评分,随着时间逐步提升
|
||
progress_factor = 1 + (i * 0.03) # 每月提升3%
|
||
|
||
company_score = round(company_base * progress_factor, 1)
|
||
teacher_score = round(teacher_base * progress_factor, 1)
|
||
expert_score = round(expert_base * progress_factor, 1)
|
||
|
||
# 计算综合分数(已经是百分制)
|
||
overall = calculate_overall_score(
|
||
company_score,
|
||
teacher_score,
|
||
expert_score
|
||
)
|
||
|
||
# 互评分数(基于综合分数±5分波动)
|
||
peer_score = round(overall + random.uniform(-5, 5), 1)
|
||
peer_score = max(60, min(100, peer_score)) # 限制在60-100范围
|
||
|
||
monthly_scores.append({
|
||
'month': month,
|
||
'overall': overall,
|
||
'company': company_score,
|
||
'teacher': teacher_score,
|
||
'expert': expert_score,
|
||
'peer': peer_score
|
||
})
|
||
|
||
trends[student_id] = {
|
||
'monthlyScores': monthly_scores
|
||
}
|
||
|
||
return trends
|
||
|
||
def generate_milestones():
|
||
"""生成里程碑数据"""
|
||
milestones = {}
|
||
|
||
# 里程碑事件模板(基于6门课程)
|
||
milestone_templates = [
|
||
{
|
||
'courses': [0, 1], # SQL和Python课程
|
||
'events': [
|
||
'完成{course}课程项目',
|
||
'{course}期末答辩优秀',
|
||
'{course}实践报告获得好评'
|
||
]
|
||
},
|
||
{
|
||
'courses': [2, 3], # Matlab和数据可视化
|
||
'events': [
|
||
'完成{course}课程设计',
|
||
'{course}作业获得满分',
|
||
'{course}小组项目表现突出'
|
||
]
|
||
},
|
||
{
|
||
'courses': [4, 5], # 两个竞赛
|
||
'events': [
|
||
'参与{course}并获得名次',
|
||
'{course}表现优异',
|
||
'{course}获得证书'
|
||
]
|
||
}
|
||
]
|
||
|
||
for student_id in range(1, 41):
|
||
student_milestones = []
|
||
|
||
# 为每个学生随机生成2-4个里程碑
|
||
num_milestones = random.randint(2, 4)
|
||
selected_indices = random.sample(range(6), num_milestones)
|
||
|
||
for idx in sorted(selected_indices):
|
||
month = COURSE_MONTHS[idx]
|
||
course_name = COURSE_NAMES[idx]
|
||
|
||
# 选择对应的事件模板
|
||
if idx in [0, 1]:
|
||
event_template = random.choice(milestone_templates[0]['events'])
|
||
elif idx in [2, 3]:
|
||
event_template = random.choice(milestone_templates[1]['events'])
|
||
else:
|
||
event_template = random.choice(milestone_templates[2]['events'])
|
||
|
||
event = event_template.format(course=course_name)
|
||
|
||
# 分数基于学生该课程的表现(从portrait数据获取)
|
||
portrait = portrait_data['abilityRadar'].get(str(student_id), {})
|
||
base_score = portrait.get('average', 75)
|
||
score = round(base_score + random.uniform(-5, 10), 1)
|
||
score = max(60, min(100, score))
|
||
|
||
student_milestones.append({
|
||
'date': month,
|
||
'event': event,
|
||
'score': score
|
||
})
|
||
|
||
milestones[student_id] = student_milestones
|
||
|
||
return milestones
|
||
|
||
def generate_development_suggestions():
|
||
"""生成发展建议数据"""
|
||
suggestions = {}
|
||
|
||
# 优势模板
|
||
strengths_templates = [
|
||
'金融理论基础扎实,数据分析能力强',
|
||
'学习态度认真,能够主动思考问题',
|
||
'团队协作意识好,沟通能力较强',
|
||
'实践能力突出,善于将理论应用于实际',
|
||
'创新思维活跃,勇于尝试新方法',
|
||
'代码能力扎实,熟练掌握金融工具',
|
||
'逻辑思维清晰,问题分析能力强',
|
||
'自学能力强,能够快速掌握新知识'
|
||
]
|
||
|
||
# 劣势模板
|
||
weaknesses_templates = [
|
||
'量化投资实践经验需要积累',
|
||
'创新思维有待提升',
|
||
'风险识别能力需要更多练习',
|
||
'金融工具使用熟练度需要提高',
|
||
'理论知识体系需要进一步完善',
|
||
'数据处理效率有待提升',
|
||
'复杂问题分析能力需要加强',
|
||
'金融市场敏感度需要培养'
|
||
]
|
||
|
||
# 建议模板
|
||
suggestions_templates = [
|
||
'建议加强量化投资模型的实践学习',
|
||
'多参与金融创新项目,培养创新思维',
|
||
'定期参加投资论坛,提升专业表达能力',
|
||
'深入学习金融科技前沿技术',
|
||
'加强金融市场实时跟踪和分析',
|
||
'参与更多实战项目,积累实践经验',
|
||
'系统学习风险管理理论和方法',
|
||
'提升编程能力,掌握更多金融工具'
|
||
]
|
||
|
||
for student_id in range(1, 41):
|
||
# 获取学生能力数据
|
||
portrait = portrait_data['abilityRadar'].get(str(student_id), {})
|
||
scores = portrait.get('scores', [75] * 5)
|
||
avg_score = portrait.get('average', 75)
|
||
|
||
# 根据平均分确定优劣势数量
|
||
if avg_score >= 85:
|
||
num_strengths = 4
|
||
num_weaknesses = 2
|
||
elif avg_score >= 75:
|
||
num_strengths = 3
|
||
num_weaknesses = 3
|
||
else:
|
||
num_strengths = 2
|
||
num_weaknesses = 4
|
||
|
||
suggestions[student_id] = {
|
||
'strengths': random.sample(strengths_templates, min(num_strengths, 3)),
|
||
'weaknesses': random.sample(weaknesses_templates, min(num_weaknesses, 3)),
|
||
'suggestions': random.sample(suggestions_templates, 3)
|
||
}
|
||
|
||
return suggestions
|
||
|
||
def main():
|
||
print("开始生成报告数据...")
|
||
|
||
# 生成三部分数据
|
||
development_trends = generate_development_trends()
|
||
milestones = generate_milestones()
|
||
development_suggestions = generate_development_suggestions()
|
||
|
||
# 组装完整数据
|
||
report_data = {
|
||
'developmentTrends': development_trends,
|
||
'milestones': milestones,
|
||
'developmentSuggestions': development_suggestions
|
||
}
|
||
|
||
# 保存到文件
|
||
output_file = '分析报告/generated_report_data.json'
|
||
with open(output_file, 'w', encoding='utf-8') as f:
|
||
json.dump(report_data, f, ensure_ascii=False, indent=2)
|
||
|
||
print(f"✅ 报告数据生成完成!")
|
||
print(f" - 发展趋势: 40名学生 × 6个月")
|
||
print(f" - 里程碑: 40名学生 × 2-4个事件")
|
||
print(f" - 发展建议: 40名学生")
|
||
print(f" - 输出文件: {output_file}")
|
||
|
||
if __name__ == '__main__':
|
||
main()
|