- 添加简历编辑功能,支持contentEditable直接编辑 - 保持原有页面样式不变,仅在编辑时显示虚线边框 - 支持保存为个人修改版,支持版本管理和删除 - 清理10个岗位修改版内容中的删除线和加粗符号 - 编辑按钮样式调整为白底蓝字带圆角 - 调整布局,编辑按钮与岗位名称在同一行 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
165 lines
4.6 KiB
JavaScript
165 lines
4.6 KiB
JavaScript
/**
|
|
* 简历管理服务
|
|
* 处理个人修改版简历的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格式' };
|
|
}
|
|
}; |