简历优化和岗位简历

This commit is contained in:
2026-04-13 21:34:40 +08:00
parent a39835be01
commit 1c91818494
32 changed files with 3850 additions and 320 deletions
+184
View File
@@ -1,5 +1,7 @@
import request from '@/utils/request'
import aiService from '@/utils/aiRequest'
import type { ApiResult } from '@/api/auth'
import type { AiResult } from '@/utils/aiRequest'
// ==================== 简历列表相关 ====================
@@ -370,3 +372,185 @@ export interface SaveResumeCompetitionItem {
export function saveResumeCompetition(resumeId: string, data: SaveResumeCompetitionItem[]) {
return request.post<any, ApiResult>('/resume/competition', { resumeId, items: data })
}
/**
* 删除简历
* POST /resume/delete
*/
export function deleteResume(resumeId: string) {
return request.post<any, ApiResult>('/resume/delete', null, {
params: { resumeId },
})
}
// ==================== 简历诊断相关 ====================
/** 诊断报告数据 */
export interface DiagnosisReport {
/** 报告 ID */
id?: string
/** 简历 ID */
resumeId?: string
/** 评级 A/B/C/D */
grade?: string
/** AI 整体评价 */
summary?: string
/** 紧急修复总数 */
urgentTotal?: number
/** 重点优化总数 */
importantTotal?: number
/** 表达提升总数 */
expressionTotal?: number
/** 创建时间 */
createTime?: string
}
/** 诊断问题子类型计数 */
export interface IssueSubCounts {
[key: string]: number
}
/** 诊断问题项 */
export interface DiagnosisIssue {
/** 问题 ID */
id?: string
/** 模块类型: summary/education/work/internship/project/competition */
moduleType?: string
/** 模块记录 IDsummary 时为 resume_id */
moduleRecordId?: string
/** 诊断发现 */
finding?: string
/** 为什么重要 */
importance?: string
/** 改进建议 */
suggestion?: string
/** 紧急修复子类型计数 */
urgentIssues?: IssueSubCounts
/** 重点优化子类型计数 */
importantIssues?: IssueSubCounts
/** 表达提升子类型计数 */
expressionIssues?: IssueSubCounts
/** AI 改写后的内容 */
optimizedContent?: any
/** 0=待处理 1=已处理 */
status?: number
/** 0=未评价 1=符合 2=不符合 */
userFeedback?: number
}
/** 诊断接口返回的 data 结构 */
export interface DiagnosisData {
/** 诊断报告 */
report: DiagnosisReport
/** 诊断问题列表 */
issues: DiagnosisIssue[]
}
/**
* 查询简历诊断报告(AI 接口)
* GET /resume/diagnose/{resume_id}
*/
export function fetchResumeDiagnosis(resumeId: string) {
return aiService.get<AiResult<DiagnosisData | null>>(`/resume/diagnose/${resumeId}`, {
transformResponse: [(data: string) => {
try {
// 大整数安全解析
const processed = data.replace(/:\s*(\d{16,})/g, ':"$1"')
return JSON.parse(processed)
} catch {
return data
}
}],
}).then(res => res.data)
}
/** 触发诊断返回的 data 结构 */
export interface TriggerDiagnosisData {
/** 诊断报告 ID */
reportId?: string
}
/**
* 触发简历诊断(AI 接口)
* POST /resume/diagnose
*/
export function triggerResumeDiagnosis(resumeId: string) {
return aiService.post<AiResult<TriggerDiagnosisData>>('/resume/diagnose', { resumeId }, {
transformResponse: [(data: string) => {
try {
const processed = data.replace(/:\s*(\d{16,})/g, ':"$1"')
return JSON.parse(processed)
} catch {
return data
}
}],
}).then(res => res.data)
}
// ==================== 问题润色(AI 优化用户改写内容) ====================
/** 润色接口返回的 data 结构 */
export interface PolishIssueData {
/** AI 润色后的文本段落数组 */
content: string[]
}
/**
* 对诊断问题进行 AI 润色(AI 接口)
* POST /resume/diagnose/issue/{issue_id}/polish
* @param issueId 问题 ID
* @param content 用户编辑后的文本段落数组
*/
export function polishDiagnosisIssue(issueId: string, content: string[]) {
return aiService.post<AiResult<PolishIssueData>>(`/resume/diagnose/issue/${issueId}/polish`, { content }, {
transformResponse: [(data: string) => {
try {
const processed = data.replace(/:\s*(\d{16,})/g, ':"$1"')
return JSON.parse(processed)
} catch {
return data
}
}],
}).then(res => res.data)
}
// ==================== 问题用户评价 ====================
/**
* 提交诊断问题的用户评价(AI 接口)
* PUT /resume/diagnose/issue/{issue_id}/feedback
* @param issueId 问题 ID
* @param userFeedback 1=符合(有用) 2=不符合(无用)
*/
export function feedbackDiagnosisIssue(issueId: string, userFeedback: number) {
return aiService.put<AiResult<null>>(`/resume/diagnose/issue/${issueId}/feedback`, { userFeedback }, {
transformResponse: [(data: string) => {
try {
const processed = data.replace(/:\s*(\d{16,})/g, ':"$1"')
return JSON.parse(processed)
} catch {
return data
}
}],
}).then(res => res.data)
}
// ==================== 标记问题已处理 ====================
/**
* 标记诊断问题为已处理(AI 接口)
* PUT /resume/diagnose/issue/{issue_id}/resolve
* @param issueId 问题 ID
*/
export function resolveDiagnosisIssue(issueId: string) {
return aiService.put<AiResult<null>>(`/resume/diagnose/issue/${issueId}/resolve`, null, {
transformResponse: [(data: string) => {
try {
const processed = data.replace(/:\s*(\d{16,})/g, ':"$1"')
return JSON.parse(processed)
} catch {
return data
}
}],
}).then(res => res.data)
}