feat: 实现简历编辑功能并清理修改版内容

- 添加简历编辑功能,支持contentEditable直接编辑
- 保持原有页面样式不变,仅在编辑时显示虚线边框
- 支持保存为个人修改版,支持版本管理和删除
- 清理10个岗位修改版内容中的删除线和加粗符号
- 编辑按钮样式调整为白底蓝字带圆角
- 调整布局,编辑按钮与岗位名称在同一行

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
KQL
2025-09-12 11:16:35 +08:00
parent 228abc5f4a
commit a9dc0ba94e
3 changed files with 523 additions and 46 deletions

View File

@@ -0,0 +1,165 @@
/**
* 简历管理服务
* 处理个人修改版简历的CRUD操作
*/
const STORAGE_KEY = 'resume_custom_versions';
// 获取所有个人修改版
export const getCustomVersions = () => {
try {
const saved = localStorage.getItem(STORAGE_KEY);
return saved ? JSON.parse(saved) : [];
} catch (error) {
console.error('获取个人修改版失败:', error);
return [];
}
};
// 保存个人修改版列表
export const saveCustomVersions = (versions) => {
try {
localStorage.setItem(STORAGE_KEY, JSON.stringify(versions));
return { success: true };
} catch (error) {
console.error('保存个人修改版失败:', error);
return { success: false, error: error.message };
}
};
// 创建新的个人修改版
export const createCustomVersion = (data) => {
try {
const versions = getCustomVersions();
const newVersion = {
id: Date.now().toString(),
name: data.name,
content: data.content,
positionTitle: data.positionTitle,
originalVersion: data.originalVersion || 'default',
tags: data.tags || [],
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
};
const updatedVersions = [...versions, newVersion];
const result = saveCustomVersions(updatedVersions);
if (result.success) {
return { success: true, data: newVersion };
} else {
return result;
}
} catch (error) {
console.error('创建个人修改版失败:', error);
return { success: false, error: error.message };
}
};
// 更新个人修改版
export const updateCustomVersion = (id, data) => {
try {
const versions = getCustomVersions();
const index = versions.findIndex(v => v.id === id);
if (index === -1) {
return { success: false, error: '版本不存在' };
}
versions[index] = {
...versions[index],
...data,
updatedAt: new Date().toISOString()
};
const result = saveCustomVersions(versions);
if (result.success) {
return { success: true, data: versions[index] };
} else {
return result;
}
} catch (error) {
console.error('更新个人修改版失败:', error);
return { success: false, error: error.message };
}
};
// 删除个人修改版
export const deleteCustomVersion = (id) => {
try {
const versions = getCustomVersions();
const updatedVersions = versions.filter(v => v.id !== id);
const result = saveCustomVersions(updatedVersions);
return result;
} catch (error) {
console.error('删除个人修改版失败:', error);
return { success: false, error: error.message };
}
};
// 根据岗位获取版本
export const getVersionsByPosition = (positionTitle) => {
const versions = getCustomVersions();
return versions.filter(v => v.positionTitle === positionTitle);
};
// 根据ID获取单个版本
export const getVersionById = (id) => {
const versions = getCustomVersions();
return versions.find(v => v.id === id);
};
// 检查版本名称是否重复
export const isVersionNameExists = (name, positionTitle) => {
const versions = getCustomVersions();
return versions.some(v => v.name === name && v.positionTitle === positionTitle);
};
// 导出版本为JSON
export const exportVersion = (id) => {
const version = getVersionById(id);
if (!version) {
return { success: false, error: '版本不存在' };
}
try {
const dataStr = JSON.stringify(version, null, 2);
const dataUri = 'data:application/json;charset=utf-8,'+ encodeURIComponent(dataStr);
const exportFileDefaultName = `resume_${version.positionTitle}_${version.name}.json`;
const linkElement = document.createElement('a');
linkElement.setAttribute('href', dataUri);
linkElement.setAttribute('download', exportFileDefaultName);
linkElement.click();
return { success: true };
} catch (error) {
console.error('导出版本失败:', error);
return { success: false, error: error.message };
}
};
// 导入版本
export const importVersion = (jsonData) => {
try {
const version = JSON.parse(jsonData);
version.id = Date.now().toString(); // 生成新ID
version.importedAt = new Date().toISOString();
const versions = getCustomVersions();
const updatedVersions = [...versions, version];
const result = saveCustomVersions(updatedVersions);
if (result.success) {
return { success: true, data: version };
} else {
return result;
}
} catch (error) {
console.error('导入版本失败:', error);
return { success: false, error: '无效的JSON格式' };
}
};