主要内容: - 包含12个产业的完整教务系统前端代码 - 智能启动脚本 (start-industry.sh) - 可视化产业导航页面 (index.html) - 项目文档 (README.md) 优化内容: - 删除所有node_modules和.yoyo文件夹,从7.5GB减少到2.7GB - 添加.gitignore文件避免上传不必要的文件 - 自动依赖管理和智能启动系统 产业列表: 1. 文旅产业 (5150) 2. 智能制造 (5151) 3. 智能开发 (5152) 4. 财经商贸 (5153) 5. 视觉设计 (5154) 6. 交通物流 (5155) 7. 大健康 (5156) 8. 土木水利 (5157) 9. 食品产业 (5158) 10. 化工产业 (5159) 11. 能源产业 (5160) 12. 环保产业 (5161) 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
169 lines
6.9 KiB
Python
169 lines
6.9 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
import json
|
||
import re
|
||
|
||
def fix_json_syntax_error():
|
||
"""修复JSON语法错误,正确处理换行符"""
|
||
|
||
# 读取原文件
|
||
with open('src/pages/ProjectLibraryPage/index.jsx', 'r', encoding='utf-8') as f:
|
||
content = f.read()
|
||
|
||
# 读取学生完成的项目数据
|
||
with open('网页未导入数据/学生完成的项目.json', 'r', encoding='utf-8') as f:
|
||
data = json.load(f)
|
||
|
||
# 提取化工项目数据
|
||
chemical_projects = []
|
||
for item in data:
|
||
if item.get('所属就业管家') == '化工':
|
||
unit_name = item.get('单元名称查询', '')
|
||
ai_projects = item.get('AI项目名称', [])
|
||
|
||
if unit_name and ai_projects:
|
||
cleaned_projects = []
|
||
for project in ai_projects:
|
||
cleaned_project = re.sub(r'^\d+\.', '', project).strip()
|
||
cleaned_projects.append(cleaned_project)
|
||
|
||
chemical_projects.append({
|
||
'unitName': unit_name,
|
||
'projects': cleaned_projects
|
||
})
|
||
|
||
# 读取markdown文件内容
|
||
try:
|
||
with open('网页未导入数据/化工产业/学生完成的项目/化工储罐液位自动补水与搅拌联锁控制.md', 'r', encoding='utf-8') as f:
|
||
md_content = f.read()
|
||
|
||
# 解析markdown内容为sections
|
||
sections = []
|
||
lines = md_content.split('\n')
|
||
current_section = None
|
||
current_content = []
|
||
|
||
for line in lines:
|
||
if line.startswith('# '):
|
||
if current_section:
|
||
# 正确处理换行符和引号
|
||
section_content = '\n'.join(current_content).strip()
|
||
# 转义引号和换行符
|
||
section_content = section_content.replace('"', '\\"').replace('\n', '\\n')
|
||
sections.append({
|
||
'title': current_section,
|
||
'content': section_content
|
||
})
|
||
current_section = line[2:].strip()
|
||
current_content = []
|
||
elif current_section:
|
||
current_content.append(line)
|
||
|
||
# 添加最后一个section
|
||
if current_section:
|
||
section_content = '\n'.join(current_content).strip()
|
||
section_content = section_content.replace('"', '\\"').replace('\n', '\\n')
|
||
sections.append({
|
||
'title': current_section,
|
||
'content': section_content
|
||
})
|
||
|
||
# 创建可点击项目数据,使用正确的JSON格式
|
||
clickable_project = {
|
||
"id": "clickable-1",
|
||
"name": "化工储罐液位自动补水与搅拌联锁控制项目",
|
||
"unitName": "化工PLC可编程逻辑控制系统",
|
||
"isClickable": True,
|
||
"content": {
|
||
"title": "化工储罐液位自动补水与搅拌联锁控制项目",
|
||
"description": "本项目基于PLC可编程逻辑控制器,实现化工储罐液位的自动监控、补水控制以及搅拌器的联锁保护功能。",
|
||
"images": [],
|
||
"sections": sections
|
||
}
|
||
}
|
||
|
||
except FileNotFoundError:
|
||
clickable_project = {
|
||
"id": "clickable-1",
|
||
"name": "化工储罐液位检测与泵组启停PLC控制项目",
|
||
"unitName": "化工PLC电气控制",
|
||
"isClickable": True,
|
||
"content": {
|
||
"title": "化工储罐液位检测与泵组启停PLC控制项目",
|
||
"description": "基于PLC实现化工储罐液位自动检测与泵组联动控制,确保生产过程安全稳定。",
|
||
"images": [],
|
||
"sections": [
|
||
{
|
||
"title": "项目概述",
|
||
"content": "本项目实现了化工储罐液位的自动检测与泵组启停的PLC控制系统,通过液位传感器实时监测储罐状态,自动控制进料泵和出料泵的运行,确保化工生产过程的安全性和稳定性。"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
|
||
# 生成myProjectsData JavaScript代码
|
||
my_projects_js = "const myProjectsData = [\n"
|
||
for i, project in enumerate(chemical_projects):
|
||
my_projects_js += " {\n"
|
||
my_projects_js += f' "unitName": "{project["unitName"]}",\n'
|
||
my_projects_js += ' "projects": [\n'
|
||
for j, proj_name in enumerate(project["projects"]):
|
||
# 转义引号
|
||
escaped_name = proj_name.replace('"', '\\"')
|
||
my_projects_js += f' "{escaped_name}"'
|
||
if j < len(project["projects"]) - 1:
|
||
my_projects_js += ","
|
||
my_projects_js += "\n"
|
||
my_projects_js += " ]\n"
|
||
my_projects_js += " }"
|
||
if i < len(chemical_projects) - 1:
|
||
my_projects_js += ","
|
||
my_projects_js += "\n"
|
||
my_projects_js += "];"
|
||
|
||
# 生成clickableProjects JavaScript代码
|
||
clickable_js = "const clickableProjects = [\n"
|
||
clickable_js += " {\n"
|
||
clickable_js += f' "id": "{clickable_project["id"]}",\n'
|
||
clickable_js += f' "name": "{clickable_project["name"]}",\n'
|
||
clickable_js += f' "unitName": "{clickable_project["unitName"]}",\n'
|
||
clickable_js += f' "isClickable": {str(clickable_project["isClickable"]).lower()},\n'
|
||
clickable_js += ' "content": {\n'
|
||
clickable_js += f' "title": "{clickable_project["content"]["title"]}",\n'
|
||
clickable_js += f' "description": "{clickable_project["content"]["description"]}",\n'
|
||
clickable_js += ' "images": [],\n'
|
||
clickable_js += ' "sections": [\n'
|
||
|
||
for i, section in enumerate(clickable_project["content"]["sections"]):
|
||
clickable_js += ' {\n'
|
||
clickable_js += f' "title": "{section["title"]}",\n'
|
||
clickable_js += f' "content": "{section["content"]}"\n'
|
||
clickable_js += ' }'
|
||
if i < len(clickable_project["content"]["sections"]) - 1:
|
||
clickable_js += ","
|
||
clickable_js += "\n"
|
||
|
||
clickable_js += ' ]\n'
|
||
clickable_js += ' }\n'
|
||
clickable_js += ' }\n'
|
||
clickable_js += "];"
|
||
|
||
# 替换内容
|
||
# 替换myProjectsData
|
||
pattern1 = r'const myProjectsData = \[[\s\S]*?\];'
|
||
content = re.sub(pattern1, my_projects_js, content)
|
||
|
||
# 替换clickableProjects
|
||
pattern2 = r'const clickableProjects = \[[\s\S]*?\];'
|
||
content = re.sub(pattern2, clickable_js, content)
|
||
|
||
# 写入文件
|
||
with open('src/pages/ProjectLibraryPage/index.jsx', 'w', encoding='utf-8') as f:
|
||
f.write(content)
|
||
|
||
print("✅ 已修复JSON语法错误")
|
||
print(f"✅ 更新了 {len(chemical_projects)} 个化工单元的数据")
|
||
print("✅ 修复了字符串转义问题")
|
||
|
||
if __name__ == "__main__":
|
||
fix_json_syntax_error() |