160 lines
6.2 KiB
Python
160 lines
6.2 KiB
Python
|
|
#!/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()
|
||
|
|
|
||
|
|
# 定义岗位等级映射
|
||
|
|
position_levels = {
|
||
|
|
'WMS软件销售': '普通岗',
|
||
|
|
'物流协调员': '普通岗',
|
||
|
|
'仓储业务开发专员': '技术骨干岗',
|
||
|
|
'AGV运维专员': '技术骨干岗',
|
||
|
|
'AGV运维工程师': '高级管理岗',
|
||
|
|
'物流审核员': '普通岗',
|
||
|
|
'云物流调度负责人助理': '高级管理岗',
|
||
|
|
'物流运营总监助理': '高级管理岗',
|
||
|
|
'生产计划岗储备干部': '技术骨干岗',
|
||
|
|
'国际物流储备经理': '高级管理岗',
|
||
|
|
'供应链总监助理': '高级管理岗',
|
||
|
|
'TMS销售专员': '普通岗',
|
||
|
|
'海外运输经理助理': '高级管理岗',
|
||
|
|
'海外物流协调员': '技术骨干岗',
|
||
|
|
'海外仓设备运维工程师': '技术骨干岗',
|
||
|
|
'售后支持专员': '普通岗',
|
||
|
|
'采购专员': '普通岗',
|
||
|
|
'港口安全员': '技术骨干岗'
|
||
|
|
}
|
||
|
|
|
||
|
|
# 构建新的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['项目案例内容']
|
||
|
|
|
||
|
|
print(f"处理项目{idx}: {name}")
|
||
|
|
|
||
|
|
# 使用字符串分割而不是正则表达式
|
||
|
|
# 1. 按标题分割整个内容
|
||
|
|
sections = []
|
||
|
|
|
||
|
|
# 找到各个标题的位置
|
||
|
|
overview_start = content_text.find('# 一、项目概述')
|
||
|
|
process_start = content_text.find('# 二、项目整体流程介绍')
|
||
|
|
keypoints_start = content_text.find('# 三、项目案例关键技术点')
|
||
|
|
|
||
|
|
# 提取概述部分
|
||
|
|
if overview_start != -1 and process_start != -1:
|
||
|
|
overview = content_text[overview_start:process_start].strip()
|
||
|
|
elif overview_start != -1:
|
||
|
|
overview = content_text[overview_start:overview_start+1000].strip()
|
||
|
|
else:
|
||
|
|
overview = content_text[:1000].strip()
|
||
|
|
|
||
|
|
# 提取流程部分
|
||
|
|
if process_start != -1 and keypoints_start != -1:
|
||
|
|
process = content_text[process_start:keypoints_start].strip()
|
||
|
|
elif process_start != -1:
|
||
|
|
# 如果没有找到技术点开始,取从流程开始到一半的内容
|
||
|
|
remaining = content_text[process_start:]
|
||
|
|
mid_point = len(remaining) // 2
|
||
|
|
process = remaining[:mid_point].strip()
|
||
|
|
else:
|
||
|
|
process = "项目流程介绍待补充"
|
||
|
|
|
||
|
|
# 提取技术点部分
|
||
|
|
if keypoints_start != -1:
|
||
|
|
keypoints = content_text[keypoints_start:].strip()
|
||
|
|
elif process_start != -1:
|
||
|
|
# 如果没有找到技术点开始,取从流程结束到最后的内容
|
||
|
|
remaining = content_text[process_start:]
|
||
|
|
mid_point = len(remaining) // 2
|
||
|
|
keypoints = remaining[mid_point:].strip()
|
||
|
|
else:
|
||
|
|
keypoints = "技术要点待补充"
|
||
|
|
|
||
|
|
print(f" 概述长度: {len(overview)}")
|
||
|
|
print(f" 流程长度: {len(process)}")
|
||
|
|
print(f" 技术点长度: {len(keypoints)}")
|
||
|
|
|
||
|
|
# 重要:对模板字符串内容进行转义
|
||
|
|
overview = overview.replace('\\', '\\\\').replace('`', '\\`').replace('${', '\\${')
|
||
|
|
process = process.replace('\\', '\\\\').replace('`', '\\`').replace('${', '\\${')
|
||
|
|
keypoints = keypoints.replace('\\', '\\\\').replace('`', '\\`').replace('${', '\\${')
|
||
|
|
|
||
|
|
# 获取岗位列表并转换为对象数组
|
||
|
|
positions_list = [
|
||
|
|
'WMS软件销售', '物流协调员', '仓储业务开发专员', 'AGV运维专员',
|
||
|
|
'AGV运维工程师', '物流审核员', '云物流调度负责人助理',
|
||
|
|
'物流运营总监助理', '生产计划岗储备干部', '国际物流储备经理'
|
||
|
|
]
|
||
|
|
|
||
|
|
# 转换为对象数组格式
|
||
|
|
applicable_positions = []
|
||
|
|
for pos in positions_list[:5]: # 每个项目取5个岗位
|
||
|
|
applicable_positions.append({
|
||
|
|
'position': pos,
|
||
|
|
'level': position_levels.get(pos, '普通岗')
|
||
|
|
})
|
||
|
|
|
||
|
|
attachments = [
|
||
|
|
{'name': f'{name}_项目方案.pdf', 'type': 'pdf'},
|
||
|
|
{'name': f'{name}_技术文档.docx', 'type': 'docx'}
|
||
|
|
]
|
||
|
|
|
||
|
|
detail_func_parts.append(f''' {{
|
||
|
|
id: {idx},
|
||
|
|
name: "{name}",
|
||
|
|
title: "{name}",
|
||
|
|
overview: `{overview}`,
|
||
|
|
description: `{overview}`,
|
||
|
|
process: `{process}`,
|
||
|
|
keyPoints: `{keypoints}`,
|
||
|
|
applicablePositions: {json.dumps(applicable_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(" title: '项目未找到',")
|
||
|
|
detail_func_parts.append(" overview: '项目详情未找到',")
|
||
|
|
detail_func_parts.append(" description: '项目详情未找到',")
|
||
|
|
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("\n✅ 成功使用字符串分割方式重新处理所有项目内容")
|