144 lines
4.8 KiB
Python
144 lines
4.8 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
|
|||
|
|
import json
|
|||
|
|
|
|||
|
|
def update_project_units_mapping():
|
|||
|
|
"""
|
|||
|
|
更新projectUnitsMapping.js文件,使用能源项目案例的单元数据
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
# 读取能源项目案例数据
|
|||
|
|
with open("网页未导入数据/能源产业/能源项目案例.json", 'r', encoding='utf-8') as f:
|
|||
|
|
energy_projects = json.load(f)
|
|||
|
|
|
|||
|
|
print("🔍 开始生成能源项目单元映射数据...")
|
|||
|
|
|
|||
|
|
# 构建新的映射数据
|
|||
|
|
mapping_content = """// 项目案例对应单元映射数据 - 能源产业
|
|||
|
|
// 基于 网页未导入数据/能源产业/能源项目案例.json
|
|||
|
|
|
|||
|
|
export const projectUnitsMapping = {
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
# 统计信息
|
|||
|
|
total_projects = 0
|
|||
|
|
projects_with_compound = 0
|
|||
|
|
projects_with_vertical = 0
|
|||
|
|
|
|||
|
|
# 遍历每个项目,生成映射数据
|
|||
|
|
for project in energy_projects:
|
|||
|
|
project_name = project["案例名称"]
|
|||
|
|
compound_units_str = project.get("对应单元名称(复合能力课)", "")
|
|||
|
|
vertical_units_str = project.get("对应单元名称(垂直能力课)", "")
|
|||
|
|
|
|||
|
|
# 解析单元名称(逗号分隔)
|
|||
|
|
compound_units = [unit.strip() for unit in compound_units_str.split(",") if unit.strip()]
|
|||
|
|
vertical_units = [unit.strip() for unit in vertical_units_str.split(",") if unit.strip()]
|
|||
|
|
|
|||
|
|
# 添加映射条目
|
|||
|
|
mapping_content += f' "{project_name}": {{\n'
|
|||
|
|
|
|||
|
|
# 复合能力课
|
|||
|
|
mapping_content += ' "compoundUnits": [\n'
|
|||
|
|
for unit in compound_units:
|
|||
|
|
mapping_content += f' "{unit}",\n'
|
|||
|
|
if compound_units:
|
|||
|
|
mapping_content = mapping_content.rstrip(',\n') + '\n'
|
|||
|
|
projects_with_compound += 1
|
|||
|
|
mapping_content += ' ],\n'
|
|||
|
|
|
|||
|
|
# 垂直能力课
|
|||
|
|
mapping_content += ' "verticalUnits": [\n'
|
|||
|
|
for unit in vertical_units:
|
|||
|
|
mapping_content += f' "{unit}",\n'
|
|||
|
|
if vertical_units:
|
|||
|
|
mapping_content = mapping_content.rstrip(',\n') + '\n'
|
|||
|
|
projects_with_vertical += 1
|
|||
|
|
mapping_content += ' ]\n'
|
|||
|
|
mapping_content += ' },\n'
|
|||
|
|
|
|||
|
|
total_projects += 1
|
|||
|
|
|
|||
|
|
# 去除最后的逗号
|
|||
|
|
mapping_content = mapping_content.rstrip(',\n') + '\n'
|
|||
|
|
mapping_content += '};\n\n'
|
|||
|
|
|
|||
|
|
# 添加辅助函数
|
|||
|
|
mapping_content += """// 获取项目的复合能力课程
|
|||
|
|
export const getCompoundUnits = (projectTitle) => {
|
|||
|
|
if (!projectTitle) return [];
|
|||
|
|
|
|||
|
|
// 直接匹配
|
|||
|
|
if (projectUnitsMapping[projectTitle]) {
|
|||
|
|
return projectUnitsMapping[projectTitle].compoundUnits || [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 尝试去除后缀后匹配(如"详情")
|
|||
|
|
const cleanTitle = projectTitle.replace(/详情$/, '');
|
|||
|
|
if (projectUnitsMapping[cleanTitle]) {
|
|||
|
|
return projectUnitsMapping[cleanTitle].compoundUnits || [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return [];
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 获取项目的垂直能力课程
|
|||
|
|
export const getVerticalUnits = (projectTitle) => {
|
|||
|
|
if (!projectTitle) return [];
|
|||
|
|
|
|||
|
|
// 直接匹配
|
|||
|
|
if (projectUnitsMapping[projectTitle]) {
|
|||
|
|
return projectUnitsMapping[projectTitle].verticalUnits || [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 尝试去除后缀后匹配(如"详情")
|
|||
|
|
const cleanTitle = projectTitle.replace(/详情$/, '');
|
|||
|
|
if (projectUnitsMapping[cleanTitle]) {
|
|||
|
|
return projectUnitsMapping[cleanTitle].verticalUnits || [];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return [];
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 获取项目的所有对应单元
|
|||
|
|
export const getProjectUnits = (projectTitle) => {
|
|||
|
|
const mapping = projectUnitsMapping[projectTitle];
|
|||
|
|
if (!mapping) return [];
|
|||
|
|
|
|||
|
|
return [...mapping.compoundUnits, ...mapping.verticalUnits];
|
|||
|
|
};
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
# 备份原文件
|
|||
|
|
import shutil
|
|||
|
|
import datetime
|
|||
|
|
backup_file = f"src/data/projectUnitsMapping.js.backup_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}"
|
|||
|
|
shutil.copy("src/data/projectUnitsMapping.js", backup_file)
|
|||
|
|
print(f"✅ 已备份原文件到:{backup_file}")
|
|||
|
|
|
|||
|
|
# 写入新文件
|
|||
|
|
with open("src/data/projectUnitsMapping.js", 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(mapping_content)
|
|||
|
|
|
|||
|
|
print(f"\n✅ 成功更新projectUnitsMapping.js文件!")
|
|||
|
|
print(f"📊 统计信息:")
|
|||
|
|
print(f" - 总项目数:{total_projects}")
|
|||
|
|
print(f" - 包含复合能力课的项目:{projects_with_compound}")
|
|||
|
|
print(f" - 包含垂直能力课的项目:{projects_with_vertical}")
|
|||
|
|
|
|||
|
|
# 显示几个示例
|
|||
|
|
print("\n📋 前3个项目的单元映射示例:")
|
|||
|
|
for i, project in enumerate(energy_projects[:3], 1):
|
|||
|
|
project_name = project["案例名称"]
|
|||
|
|
compound_units_str = project.get("对应单元名称(复合能力课)", "")
|
|||
|
|
vertical_units_str = project.get("对应单元名称(垂直能力课)", "")
|
|||
|
|
|
|||
|
|
print(f"\n{i}. {project_name}")
|
|||
|
|
if compound_units_str:
|
|||
|
|
print(f" 复合能力课:{compound_units_str}")
|
|||
|
|
if vertical_units_str:
|
|||
|
|
print(f" 垂直能力课:{vertical_units_str}")
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
update_project_units_mapping()
|