import request from '@/utils/request' import type { ApiResult } from '@/api/auth' // ==================== 求职助手配置相关 ==================== /** 语言能力项 */ export interface LanguageAbility { /** 语种,如英语、日语、法语等 */ language?: string /** 掌握程度,可选值:入门/日常会话/商务会话/无障碍沟通/母语 */ proficiency?: string } /** 求职助手配置数据(查询返回 + 保存请求共用) */ export interface AgentConfig { /** 工作类型 1=实习 2=全职 */ jobType?: number /** Agent模式 1=协作模式 2=托管模式 */ agentMode?: number /** 每周投递目标数量 1=少于20个 2=20到50个 3=多于50个 */ weeklyTarget?: number /** 投递时自动针对岗位优化简历 0=关闭 1=开启 */ autoOptimizeResume?: number /** 是否愿意接受部门调剂 */ acceptDeptTransfer?: string /** 是否接受地点调剂 */ acceptLocationTransfer?: string /** 可参加的面试方式 */ interviewType?: string[] /** 语言能力 */ languages?: LanguageAbility[] /** 预计到岗时间 */ availableDate?: string /** 每周可实习天数 */ internDaysPerWeek?: string /** 预计实习时长 */ internDuration?: string /** 状态 0=未启用 1=已启用(仅查询返回) */ status?: number } /** * 查询求职助手配置 * GET /job-agent/config */ export function fetchAgentConfig() { return request.get>('/job-agent/config') } /** * 保存求职助手配置 * POST /job-agent/config/save */ export function saveAgentConfig(data: AgentConfig) { return request.post('/job-agent/config/save', data) } // ==================== 求职助手岗位推荐 ==================== /** 匹配度详情 */ export interface AgentJobMatchDetail { /** 学历匹配分 */ educationScore: number /** 技能匹配分 */ skillScore: number /** 经验匹配分 */ experienceScore: number } /** 推荐岗位项 */ export interface AgentRecommendJob { /** 岗位 ID */ id: number /** 岗位名称 */ title: string /** 薪资描述 */ salary: string /** 公司名称 */ companyName: string /** 公司简称 */ companyShortName: string /** 公司类型 */ companyType: string /** 公司 Logo */ companyLogoUrl: string /** 地区名称 */ regionName: string /** 岗位类型名称 */ categoryName: string /** 岗位标签 */ tags: string[] /** 来源链接 */ sourceUrl: string /** 是否收藏 */ isFavorite: boolean /** 投递状态(null=未投递,-1=待投递,0=已投递 1=面试中 2=有Offer 3=未通过 4=已结束) */ applicationStatus: number | null /** 岗位状态(0=有效 1=已下架 2=已过期) */ status: number /** 匹配总分(0-90) */ matchScore: number /** 匹配度详情 */ matchDetail: AgentJobMatchDetail } /** 求职助手岗位推荐返回数据 */ export interface AgentRecommendResult { /** 推荐说明(20字以内) */ summary: string /** 推荐的岗位列表(8-10个) */ list: AgentRecommendJob[] } /** 求职助手岗位推荐请求参数 */ export interface AgentRecommendParams { /** 用户偏好描述 */ preference?: string /** 排除已推荐过的岗位 ID 列表(字符串避免大整数精度丢失) */ excludeJobIds?: (number | string)[] } /** * 求职助手岗位推荐 * POST /job/agent/recommend */ export function fetchAgentRecommend(params: AgentRecommendParams = {}) { return request.post>('/job/agent/recommend', params) } // ==================== 岗位投递状态变更 ==================== /** 岗位投递请求参数 */ export interface JobApplyParams { /** 岗位 ID(支持字符串避免大整数精度丢失) */ jobId: number | string /** 投递状态:-1=待投递 0=已投递 1=面试中 2=有Offer 3=未通过 4=已结束,null=取消 */ status: number | null } /** * 变更岗位投递状态(添加到待投递等) * POST /job/apply */ export function applyJob(params: JobApplyParams) { return request.post('/job/apply', params) } /** * 取消投递 / 从待投递移除 * DELETE /job/apply?jobId=xxx * @param jobId 岗位 ID(字符串,避免大整数精度丢失) */ export function cancelApplyJob(jobId: string | number) { return request.delete('/job/apply', { params: { jobId }, }) } // ==================== Agent 对话消息 ==================== /** 消息创建时间 */ export interface InstantTime { /** 距 1970-01-01T00:00:00Z 的秒数 */ seconds: number /** 纳秒偏移(0 ~ 999,999,999) */ nanos: number } /** Agent 对话消息项 */ export interface AgentChatMessage { /** 消息 ID */ id: number /** 消息类型:user / assistant / recommend / apply_progress */ type: string /** 文本内容 */ content: string /** 附加数据 JSON(如推荐岗位列表等) */ extra: string /** 创建时间 */ createTime: InstantTime } /** * 查询当前 Agent 对话消息列表 * GET /job-agent/chat/messages?limit=xxx * @param limit 查询条数 */ export function fetchAgentChatMessages(limit: number = 50) { return request.get>('/job-agent/chat/messages', { params: { limit }, }) } /** 添加对话消息请求参数 */ export interface AddChatMessageParams { /** 消息类型:user / assistant / recommend / apply_progress */ type: string /** 文本内容 */ content?: string /** 附加数据 JSON */ extra?: string } /** * 添加 Agent 对话消息 * POST /job-agent/chat/message */ export function addAgentChatMessage(params: AddChatMessageParams) { return request.post('/job-agent/chat/message', params) } // ==================== 批量查询岗位投递记录 ==================== /** 岗位投递记录项 */ export interface JobApplyRecord { /** 岗位 ID */ jobId: number /** 投递状态:-1=待投递 0=已投递 1=面试中 2=有Offer 3=未通过 4=已结束 */ status: number /** 投递时间 */ applyTime: InstantTime /** 创建时间 */ createTime: InstantTime } /** * 根据岗位 ID 批量查询投递记录 * POST /job/apply/listByJobIds * @param jobIds 岗位 ID 列表 */ export function fetchApplyByJobIds(jobIds: number[]) { return request.post>('/job/apply/listByJobIds', jobIds) } // ==================== Agent AI 对话(Python 后端) ==================== import aiService from '@/utils/aiRequest' import type { AiResult } from '@/utils/aiRequest' /** AI 对话历史消息项 */ export interface AgentChatHistoryItem { /** 角色:user / assistant */ role: string /** 消息内容 */ content: string } /** Agent AI 对话请求参数 */ export interface AgentChatParams { /** 用户输入的消息 */ message: string /** 简历 ID(字符串,避免大整数精度丢失) */ resumeId: string /** 对话历史 */ history?: AgentChatHistoryItem[] /** 意向岗位类型名称 */ jobCategories?: string[] /** 意向城市名称 */ regions?: string[] /** 意向行业名称 */ industries?: string[] } /** Agent AI 对话返回数据 */ export interface AgentChatResponse { /** AI 回复的消息内容 */ message: string /** 工具调用名称(null=普通回复,recommend=推荐岗位) */ tool: string | null /** 工具调用参数 */ toolParams: Record | null } /** * Agent AI 对话(Python 后端) * POST /job-agent/chat */ export function sendAgentChat(params: AgentChatParams) { return aiService.post }>('/job-agent/chat', params).then(res => res.data) } // ==================== 求职助手优化简历(Python 后端) ==================== /** 优化简历请求参数 */ export interface OptimizeResumeParams { /** 简历 ID */ resumeId: string | number /** 岗位 ID */ jobId: string | number } /** * 求职助手岗位优化简历 * POST /job-agent/optimize-resume */ export function optimizeAgentResume(params: OptimizeResumeParams) { return aiService.post('/job-agent/optimize-resume', params, { headers: { Token: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOjIwMzUyNTM4OTg5MTk4NzA0NjUsInV1SWQiOiI2MmQ5MDE2NTcyNzY0ZmNjODNjZTIyYjRjODA5ZmU5MiJ9.eE-Q5rio5J5kxkS-XPYdmk-1Tgvg6kj6NGoKWMFNU14', }, }).then(res => res.data) }