主要内容: - 包含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>
173 lines
7.4 KiB
Python
173 lines
7.4 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
为视觉设计岗位添加个人修改版简历数据
|
||
"""
|
||
|
||
import json
|
||
import os
|
||
import re
|
||
import shutil
|
||
from datetime import datetime
|
||
|
||
def read_markdown_file(file_path):
|
||
"""读取markdown文件内容"""
|
||
try:
|
||
with open(file_path, 'r', encoding='utf-8') as f:
|
||
return f.read()
|
||
except Exception as e:
|
||
print(f"读取文件失败 {file_path}: {e}")
|
||
return None
|
||
|
||
def add_modified_resume_data():
|
||
"""为指定岗位添加修改版简历数据"""
|
||
|
||
# 修改版简历文件映射
|
||
modified_resume_files = {
|
||
"UI设计师": "网页未导入数据/视觉设计产业/视觉设计修改版简历/UI设计师.md",
|
||
"包装设计师": "网页未导入数据/视觉设计产业/视觉设计修改版简历/包装设计师.md",
|
||
"摄影师": "网页未导入数据/视觉设计产业/视觉设计修改版简历/摄影师.md",
|
||
"角色原画师": "网页未导入数据/视觉设计产业/视觉设计修改版简历/角色原画师.md",
|
||
"影视灯光": "网页未导入数据/视觉设计产业/视觉设计修改版简历/影视灯光.md",
|
||
"摄影美术指导助理": "网页未导入数据/视觉设计产业/视觉设计修改版简历/摄影美术指导助理.md",
|
||
"品牌视觉内容策划": "网页未导入数据/视觉设计产业/视觉设计修改版简历/品牌视觉内容策划.md",
|
||
"影视摄像": "网页未导入数据/视觉设计产业/视觉设计修改版简历/影视摄像.md",
|
||
"AI绘画师": "网页未导入数据/视觉设计产业/视觉设计修改版简历/AI绘画师.md",
|
||
"CG总监助理": "网页未导入数据/视觉设计产业/视觉设计修改版简历/CG总监助理.md"
|
||
}
|
||
|
||
file_path = "src/mocks/resumeInterviewMock.js"
|
||
|
||
# 创建备份
|
||
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
||
backup_path = f"{file_path}.backup_add_modified_{timestamp}"
|
||
shutil.copy2(file_path, backup_path)
|
||
print(f"📦 已创建备份: {backup_path}")
|
||
|
||
try:
|
||
# 读取JS文件
|
||
with open(file_path, 'r', encoding='utf-8') as f:
|
||
js_content = f.read()
|
||
|
||
print(f"📊 开始处理 {len(modified_resume_files)} 个岗位的修改版简历...")
|
||
|
||
processed_count = 0
|
||
|
||
# 为每个岗位添加content字段
|
||
for position_title, md_file_path in modified_resume_files.items():
|
||
print(f"🔍 处理岗位: {position_title}")
|
||
|
||
# 读取修改版简历内容
|
||
modified_content = read_markdown_file(md_file_path)
|
||
if not modified_content:
|
||
print(f"⚠️ 跳过 {position_title}: 无法读取修改版简历")
|
||
continue
|
||
|
||
# 查找该岗位在JS文件中的位置
|
||
position_pattern = rf'"title":\s*"{re.escape(position_title)}"'
|
||
position_match = re.search(position_pattern, js_content)
|
||
|
||
if not position_match:
|
||
print(f"⚠️ 跳过 {position_title}: 在JS文件中未找到")
|
||
continue
|
||
|
||
# 找到该岗位对象的结束位置(下一个}之前)
|
||
start_pos = position_match.start()
|
||
|
||
# 向前找到这个岗位对象的开始位置(最近的{)
|
||
obj_start = js_content.rfind('{', 0, start_pos)
|
||
if obj_start == -1:
|
||
print(f"⚠️ 跳过 {position_title}: 无法找到对象开始位置")
|
||
continue
|
||
|
||
# 向后找到这个岗位对象的结束位置
|
||
brace_count = 0
|
||
obj_end = obj_start
|
||
for i in range(obj_start, len(js_content)):
|
||
if js_content[i] == '{':
|
||
brace_count += 1
|
||
elif js_content[i] == '}':
|
||
brace_count -= 1
|
||
if brace_count == 0:
|
||
obj_end = i
|
||
break
|
||
|
||
if obj_end == obj_start:
|
||
print(f"⚠️ 跳过 {position_title}: 无法找到对象结束位置")
|
||
continue
|
||
|
||
# 提取原始对象内容
|
||
original_obj = js_content[obj_start:obj_end+1]
|
||
|
||
# 检查是否已经有content字段
|
||
if '"content"' in original_obj:
|
||
print(f"⚠️ 跳过 {position_title}: 已存在content字段")
|
||
continue
|
||
|
||
# 构造content字段(假设原始版本来自现有简历数据)
|
||
# 这里我们需要从岗位简历数据中提取原始版本
|
||
original_resume = f"# 对应岗位:{position_title}\\n\\n# 一、项目经历\\n\\n待补充项目经历内容...\\n\\n# 二、专业技能\\n\\n待补充专业技能内容...\\n\\n# 三、个人总结\\n\\n待补充个人总结内容..."
|
||
|
||
# 转义修改版内容中的引号和换行符
|
||
escaped_modified = modified_content.replace('\\', '\\\\').replace('"', '\\"').replace('\n', '\\n')
|
||
escaped_original = original_resume.replace('\\', '\\\\').replace('"', '\\"').replace('\n', '\\n')
|
||
|
||
# 在对象结束前插入content字段
|
||
# 找到最后一个字段(通常是requirements)的结束位置
|
||
last_field_end = original_obj.rfind(']')
|
||
if last_field_end == -1:
|
||
last_field_end = original_obj.rfind('"')
|
||
|
||
if last_field_end == -1:
|
||
print(f"⚠️ 跳过 {position_title}: 无法找到插入位置")
|
||
continue
|
||
|
||
# 构造新的对象内容
|
||
content_field = f''',
|
||
"content": {{
|
||
"original": "{escaped_original}",
|
||
"modified": "{escaped_modified}"
|
||
}}'''
|
||
|
||
# 插入content字段
|
||
new_obj = original_obj[:last_field_end+1] + content_field + original_obj[last_field_end+1:-1] + original_obj[-1]
|
||
|
||
# 替换JS文件中的内容
|
||
js_content = js_content[:obj_start] + new_obj + js_content[obj_end+1:]
|
||
|
||
processed_count += 1
|
||
print(f"✅ 已处理 {position_title}")
|
||
|
||
# 写入更新后的JS文件
|
||
with open(file_path, 'w', encoding='utf-8') as f:
|
||
f.write(js_content)
|
||
|
||
print(f"📊 处理完成:")
|
||
print(f" - 总岗位数: {len(modified_resume_files)}")
|
||
print(f" - 成功处理: {processed_count}")
|
||
print(f"✅ 已更新 {file_path}")
|
||
|
||
# 验证JS语法
|
||
import subprocess
|
||
try:
|
||
result = subprocess.run(['node', '-c', file_path], capture_output=True, text=True)
|
||
if result.returncode == 0:
|
||
print("✅ JavaScript语法验证通过")
|
||
else:
|
||
print(f"❌ JavaScript语法验证失败: {result.stderr}")
|
||
# 恢复备份
|
||
shutil.copy2(backup_path, file_path)
|
||
print("🔄 已恢复原始文件")
|
||
except Exception as e:
|
||
print(f"⚠️ 无法验证JavaScript语法: {e}")
|
||
|
||
except Exception as e:
|
||
print(f"❌ 处理失败: {e}")
|
||
# 恢复备份
|
||
shutil.copy2(backup_path, file_path)
|
||
print("🔄 已恢复原始文件")
|
||
|
||
if __name__ == "__main__":
|
||
print("🚀 开始为视觉设计岗位添加修改版简历数据...")
|
||
add_modified_resume_data()
|
||
print("🎉 处理完成!") |