简历优化和岗位简历
This commit is contained in:
@@ -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
|
||||
/** 模块记录 ID,summary 时为 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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user