#!/usr/bin/env python3 import json import re # 读取源数据 with open('网页未导入数据/交通物流产业/交通物流项目案例.json', 'r', encoding='utf-8') as f: source_data = json.load(f) # 读取现有的mock文件来获取项目列表部分 with open('src/mocks/projectLibraryMock.js', 'r', encoding='utf-8') as f: content = f.read() # 提取getMockProjectsList函数 projects_list_match = re.search(r'(export const getMockProjectsList.*?)export const getMockProjectDetail', content, re.DOTALL) if not projects_list_match: print("无法找到getMockProjectsList函数") exit(1) projects_list_func = projects_list_match.group(1).rstrip() # 构建新的getMockProjectDetail函数 detail_func_parts = ['export const getMockProjectDetail = (id) => {'] detail_func_parts.append(' const projects = [') for idx, project in enumerate(source_data, 1): name = project['案例名称'] content_text = project['项目案例内容'] # 分割内容 overview_match = re.search(r'(.*?)(?=## 项目整体流程介绍|$)', content_text, re.DOTALL) overview = overview_match.group(1).strip() if overview_match else content_text[:1000] process_match = re.search(r'## 项目整体流程介绍(.*?)(?=## 项目案例关键技术点|$)', content_text, re.DOTALL) process = process_match.group(1).strip() if process_match else '' if not process: process = '项目流程内容待补充' keypoints_match = re.search(r'## 项目案例关键技术点(.*?)$', content_text, re.DOTALL) keypoints = keypoints_match.group(1).strip() if keypoints_match else '' if not keypoints: keypoints = '技术点内容待补充' # 重要:对模板字符串内容进行转义 # 1. 转义反斜杠 overview = overview.replace('\\', '\\\\') process = process.replace('\\', '\\\\') keypoints = keypoints.replace('\\', '\\\\') # 2. 转义模板字符串中的反引号 overview = overview.replace('`', '\\`') process = process.replace('`', '\\`') keypoints = keypoints.replace('`', '\\`') # 3. 转义${}模板表达式 overview = overview.replace('${', '\\${') process = process.replace('${', '\\${') keypoints = keypoints.replace('${', '\\${') # 获取岗位和附件 positions = [ 'WMS软件销售', '物流协调员', '仓储业务开发专员', 'AGV运维专员', 'AGV运维工程师', '物流审核员', '云物流调度负责人助理', '物流运营总监助理', '生产计划岗储备干部', '国际物流储备经理' ] attachments = [ {'name': f'{name}_项目方案.pdf', 'type': 'pdf'}, {'name': f'{name}_技术文档.docx', 'type': 'docx'} ] # 添加流程和技术点的标题(如果原文没有) if not process.startswith('##'): process = '## 项目整体流程介绍\\n\\n' + process if not keypoints.startswith('##'): keypoints = '## 项目案例关键技术点\\n\\n' + keypoints detail_func_parts.append(f''' {{ id: {idx}, name: "{name}", overview: `{overview}`, process: `{process}`, keyPoints: `{keypoints}`, applicablePositions: {json.dumps(positions, ensure_ascii=False)}, attachments: {json.dumps(attachments, ensure_ascii=False)} }}{',' if idx < len(source_data) else ''}''') detail_func_parts.append(' ];') detail_func_parts.append('') detail_func_parts.append(' const project = projects.find(p => p.id === parseInt(id));') detail_func_parts.append(' if (!project) {') detail_func_parts.append(' return {') detail_func_parts.append(' id: parseInt(id),') detail_func_parts.append(" name: '项目未找到',") detail_func_parts.append(" overview: '项目详情未找到',") detail_func_parts.append(" process: '项目流程未找到',") detail_func_parts.append(" keyPoints: '项目关键技术点未找到',") detail_func_parts.append(' applicablePositions: [],') detail_func_parts.append(' attachments: []') detail_func_parts.append(' };') detail_func_parts.append(' }') detail_func_parts.append('') detail_func_parts.append(' return project;') detail_func_parts.append('};') # 组合完整文件内容 new_content = projects_list_func + '\n\n' + '\n'.join(detail_func_parts) # 写入文件 with open('src/mocks/projectLibraryMock.js', 'w', encoding='utf-8') as f: f.write(new_content) print("✅ 成功修复 projectLibraryMock.js 文件")