/apiContent-Type: application/json
Authorization: Bearer {token}
{
"code": 2000,
"message": "操作成功",
"data": {},
"total": 0
}
/api/system/auth/login/请求体:
{
"username": "string",
"password": "string"
}
响应:
{
"code": 2000,
"data": {
"token": "string",
"refresh_token": "string",
"user_info": {}
}
}
/api/system/user/page: 页码limit: 每页数量username: 用户名(可选)dept_id: 部门ID(可选)/api/system/user/{id}//api/system/user/请求体:
{
"username": "string",
"password": "string",
"name": "string",
"email": "string",
"mobile": "string",
"dept_id": "integer",
"roles": ["integer"]
}
/api/system/user/{id}//api/system/user/{id}//api/position/list/page: 页码limit: 每页数量status: 状态(可选)keyword: 关键词(可选)/api/position/detail/{id}//api/position/create//api/position/update/{id}//api/position/config/{id}//api/position/competency/{id}//api/question_bank/list/page: 页码limit: 每页数量category_id: 分类ID(可选)tag_id: 标签ID(可选)difficulty: 难度(可选)type: 题型(可选)/api/question_bank/{id}//api/question_bank/create/请求体:
{
"type": "choice",
"title": "string",
"options": [],
"answer": "string",
"difficulty": "easy",
"score": 10,
"category_id": "integer",
"tags": ["integer"]
}
/api/question_bank/batch//api/question_bank/class//api/question_bank/tag//api/job_application/list/page: 页码limit: 每页数量position_id: 职位ID(可选)status: 状态(可选)/api/job_application/{id}//api/job_application/status/{id}/请求体:
{
"status": "interviewed",
"remark": "string"
}
/api/job_application/batch_status//api/talent/list//api/talent/{id}//api/talent/overseas//api/digital_human/list//api/digital_human/{id}//api/digital_human/interview/{id}//api/system/menu//api/system/role//api/system/dept//api/system/dict//api/system/area//api/system/file/file/api/system/file/list//api/system/log/operation//api/system/log/login/| 错误码 | 说明 |
|---|---|
| 2000 | 操作成功 |
| 4000 | 参数错误 |
| 4001 | 认证失败 |
| 4003 | 权限不足 |
| 4040 | 资源不存在 |
| 5000 | 服务器错误 |
import { request } from '@/utils/service'
// GET 请求
const getList = async () => {
const res = await request({
url: '/api/position/list/',
method: 'get',
params: {
page: 1,
limit: 20
}
})
return res.data
}
// POST 请求
const createItem = async (data: any) => {
const res = await request({
url: '/api/position/create/',
method: 'post',
data: data
})
return res.data
}
// PUT 请求
const updateItem = async (id: number, data: any) => {
const res = await request({
url: `/api/position/update/${id}/`,
method: 'put',
data: data
})
return res.data
}
// DELETE 请求
const deleteItem = async (id: number) => {
const res = await request({
url: `/api/position/delete/${id}/`,
method: 'delete'
})
return res.data
}
interface Position {
id: number
name: string // 职位名称
department: string // 部门
location: string // 地点
type: string // 类型(全职/兼职/实习)
status: 'published' | 'draft' // 状态
description: string // 职位描述
requirements: string // 职位要求
salary_min: number // 最低薪资
salary_max: number // 最高薪资
created_at: string // 创建时间
updated_at: string // 更新时间
}
interface Question {
id: number
type: 'choice' | 'blank' | 'essay' // 题型
title: string // 题目
options?: string[] // 选项(选择题)
answer: string // 答案
difficulty: 'easy' | 'medium' | 'hard' // 难度
score: number // 分值
category_id: number // 分类ID
tags: number[] // 标签ID数组
created_at: string
updated_at: string
}
interface JobApplication {
id: number
position_id: number
talent_id: number
status: 'pending' | 'reviewing' | 'interviewed' | 'rejected' | 'hired'
resume_url: string
interview_time?: string
interview_location?: string
remark?: string
created_at: string
updated_at: string
}
interface User {
id: number
username: string
name: string
email: string
mobile: string
avatar: string
dept_id: number
roles: number[]
is_active: boolean
created_at: string
updated_at: string
}
/api/position/create//api/position/{id}/ (status: published)/api/job_application//api/job_application/status/{id}//api/job_application/{id}//api/job_application/{id}//api/job_application/notify/{id}/// 连接 WebSocket
const ws = new WebSocket('wss://example.com/ws/')
// 监听消息
ws.onmessage = (event) => {
const data = JSON.parse(event.data)
console.log('收到通知:', data)
}
// 订阅频道
ws.send(JSON.stringify({
action: 'subscribe',
channel: 'job_application',
user_id: currentUserId
}))
import { ElMessage } from 'element-plus'
try {
const res = await request({
url: '/api/some-endpoint/',
method: 'post',
data: formData
})
if (res.code === 2000) {
ElMessage.success(res.message || '操作成功')
} else {
ElMessage.error(res.message || '操作失败')
}
} catch (error) {
console.error('请求错误:', error)
ElMessage.error('网络错误,请稍后重试')
}
function handleApiError(error: any) {
switch (error.response?.status) {
case 400:
ElMessage.error('参数错误')
break
case 401:
ElMessage.error('登录已过期,请重新登录')
// 跳转到登录页
router.push('/login')
break
case 403:
ElMessage.error('权限不足')
break
case 404:
ElMessage.error('资源不存在')
break
case 500:
ElMessage.error('服务器错误')
break
default:
ElMessage.error('未知错误')
}
}
注意:本接口文档基于当前项目结构编写,实际接口路径和数据格式可能因后端实现而有所不同。建议查看后端 API 文档获取准确信息。
API 测试工具推荐: