289 lines
8.3 KiB
TypeScript
289 lines
8.3 KiB
TypeScript
|
|
import { request } from '@umijs/max';
|
||
|
|
|
||
|
|
/** 户外招聘会列表项 */
|
||
|
|
export interface OutdoorFairItem {
|
||
|
|
id: number;
|
||
|
|
/** 招聘会标题 */
|
||
|
|
title: string;
|
||
|
|
/** 举办单位 */
|
||
|
|
hostUnit: string;
|
||
|
|
/** 招聘会类型 */
|
||
|
|
fairType: string;
|
||
|
|
/** 举办区域 */
|
||
|
|
region: string;
|
||
|
|
/** 举办地址 */
|
||
|
|
address: string;
|
||
|
|
/** 展位数量 */
|
||
|
|
boothCount: number;
|
||
|
|
/** 举办时间 */
|
||
|
|
holdTime: string;
|
||
|
|
/** 截止时间 */
|
||
|
|
endTime: string;
|
||
|
|
/** 开放申请 */
|
||
|
|
applyStartTime: string;
|
||
|
|
/** 截止申请 */
|
||
|
|
applyEndTime: string;
|
||
|
|
/** 是否开启线上申请 */
|
||
|
|
onlineApply: boolean;
|
||
|
|
/** 招聘会照片 */
|
||
|
|
photoUrl: string;
|
||
|
|
createTime?: string;
|
||
|
|
updateTime?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 户外招聘会查询参数 */
|
||
|
|
export interface OutdoorFairListParams {
|
||
|
|
title?: string;
|
||
|
|
hostUnit?: string;
|
||
|
|
fairType?: string;
|
||
|
|
current?: number;
|
||
|
|
pageSize?: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 户外招聘会列表响应 */
|
||
|
|
export interface OutdoorFairListResult {
|
||
|
|
code: number;
|
||
|
|
msg?: string;
|
||
|
|
total: number;
|
||
|
|
rows: OutdoorFairItem[];
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 户外招聘会新增/编辑表单 */
|
||
|
|
export interface OutdoorFairForm {
|
||
|
|
id?: number;
|
||
|
|
title: string;
|
||
|
|
hostUnit: string;
|
||
|
|
fairType: string;
|
||
|
|
region: string;
|
||
|
|
address: string;
|
||
|
|
boothCount: number;
|
||
|
|
holdTime: string;
|
||
|
|
endTime: string;
|
||
|
|
applyStartTime: string;
|
||
|
|
applyEndTime: string;
|
||
|
|
onlineApply: boolean;
|
||
|
|
photoUrl: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 通用响应 */
|
||
|
|
export interface OutdoorFairCommonResult {
|
||
|
|
code: number;
|
||
|
|
msg?: string;
|
||
|
|
data?: any;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ==================== 静态假数据 ====================
|
||
|
|
|
||
|
|
const MOCK_DATA: OutdoorFairItem[] = [
|
||
|
|
{
|
||
|
|
id: 1,
|
||
|
|
title: '2026年石河子市春季户外招聘会',
|
||
|
|
hostUnit: '第八师石河子市人力资源和社会保障局',
|
||
|
|
fairType: '综合类',
|
||
|
|
region: '第八师(石河子市)',
|
||
|
|
address: '石河子市北三路石河子大学中区图书馆前广场',
|
||
|
|
boothCount: 80,
|
||
|
|
holdTime: '2026-03-15 09:00:00',
|
||
|
|
endTime: '2026-03-15 17:00:00',
|
||
|
|
applyStartTime: '2026-03-01 00:00:00',
|
||
|
|
applyEndTime: '2026-03-10 23:59:59',
|
||
|
|
onlineApply: true,
|
||
|
|
photoUrl: 'https://picsum.photos/seed/outdoor1/400/300',
|
||
|
|
createTime: '2026-02-20 10:30:00',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 2,
|
||
|
|
title: '2026年阿拉尔市高校户外专场招聘会',
|
||
|
|
hostUnit: '第一师阿拉尔市人力资源和社会保障局',
|
||
|
|
fairType: '校园招聘',
|
||
|
|
region: '第一师(阿拉尔市)',
|
||
|
|
address: '阿拉尔市塔里木大道塔里木大学综合教学楼前广场',
|
||
|
|
boothCount: 60,
|
||
|
|
holdTime: '2026-04-20 09:00:00',
|
||
|
|
endTime: '2026-04-20 16:00:00',
|
||
|
|
applyStartTime: '2026-04-01 00:00:00',
|
||
|
|
applyEndTime: '2026-04-15 23:59:59',
|
||
|
|
onlineApply: true,
|
||
|
|
photoUrl: 'https://picsum.photos/seed/outdoor2/400/300',
|
||
|
|
createTime: '2026-03-01 14:00:00',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 3,
|
||
|
|
title: '2026年图木舒克市制造业户外招聘会',
|
||
|
|
hostUnit: '第三师图木舒克市人力资源和社会保障局',
|
||
|
|
fairType: '行业专场',
|
||
|
|
region: '第三师(图木舒克市)',
|
||
|
|
address: '图木舒克市迎宾大道市政广场',
|
||
|
|
boothCount: 120,
|
||
|
|
holdTime: '2026-05-10 08:30:00',
|
||
|
|
endTime: '2026-05-10 17:30:00',
|
||
|
|
applyStartTime: '2026-04-25 00:00:00',
|
||
|
|
applyEndTime: '2026-05-05 23:59:59',
|
||
|
|
onlineApply: false,
|
||
|
|
photoUrl: 'https://picsum.photos/seed/outdoor3/400/300',
|
||
|
|
createTime: '2026-03-10 09:00:00',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 4,
|
||
|
|
title: '2026年可克达拉市高新技术户外招聘会',
|
||
|
|
hostUnit: '第四师可克达拉市人力资源和社会保障局',
|
||
|
|
fairType: '高新技术专场',
|
||
|
|
region: '第四师(可克达拉市)',
|
||
|
|
address: '可克达拉市镇江路市民服务中心广场',
|
||
|
|
boothCount: 50,
|
||
|
|
holdTime: '2026-06-18 09:00:00',
|
||
|
|
endTime: '2026-06-18 16:30:00',
|
||
|
|
applyStartTime: '2026-06-01 00:00:00',
|
||
|
|
applyEndTime: '2026-06-12 23:59:59',
|
||
|
|
onlineApply: true,
|
||
|
|
photoUrl: 'https://picsum.photos/seed/outdoor4/400/300',
|
||
|
|
createTime: '2026-03-20 11:00:00',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 5,
|
||
|
|
title: '2026年双河市农业行业户外招聘会',
|
||
|
|
hostUnit: '第五师双河市人力资源和社会保障局',
|
||
|
|
fairType: '行业专场',
|
||
|
|
region: '第五师(双河市)',
|
||
|
|
address: '双河市人民路双河市文化广场',
|
||
|
|
boothCount: 40,
|
||
|
|
holdTime: '2026-07-08 09:00:00',
|
||
|
|
endTime: '2026-07-08 17:00:00',
|
||
|
|
applyStartTime: '2026-06-20 00:00:00',
|
||
|
|
applyEndTime: '2026-07-03 23:59:59',
|
||
|
|
onlineApply: false,
|
||
|
|
photoUrl: 'https://picsum.photos/seed/outdoor5/400/300',
|
||
|
|
createTime: '2026-04-01 08:30:00',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 6,
|
||
|
|
title: '2026年五家渠市电子产业户外招聘会',
|
||
|
|
hostUnit: '第六师五家渠市人力资源和社会保障局',
|
||
|
|
fairType: '行业专场',
|
||
|
|
region: '第六师(五家渠市)',
|
||
|
|
address: '五家渠市长安东街五家渠市人民广场',
|
||
|
|
boothCount: 70,
|
||
|
|
holdTime: '2026-08-15 08:30:00',
|
||
|
|
endTime: '2026-08-15 17:30:00',
|
||
|
|
applyStartTime: '2026-08-01 00:00:00',
|
||
|
|
applyEndTime: '2026-08-10 23:59:59',
|
||
|
|
onlineApply: true,
|
||
|
|
photoUrl: 'https://picsum.photos/seed/outdoor6/400/300',
|
||
|
|
createTime: '2026-04-15 10:00:00',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 7,
|
||
|
|
title: '2026年胡杨河市智能制造户外招聘会',
|
||
|
|
hostUnit: '第七师胡杨河市人力资源和社会保障局',
|
||
|
|
fairType: '智能制造专场',
|
||
|
|
region: '第七师(胡杨河市)',
|
||
|
|
address: '胡杨河市团结路胡杨河市创业广场',
|
||
|
|
boothCount: 55,
|
||
|
|
holdTime: '2026-09-12 09:00:00',
|
||
|
|
endTime: '2026-09-12 16:00:00',
|
||
|
|
applyStartTime: '2026-08-25 00:00:00',
|
||
|
|
applyEndTime: '2026-09-05 23:59:59',
|
||
|
|
onlineApply: true,
|
||
|
|
photoUrl: 'https://picsum.photos/seed/outdoor7/400/300',
|
||
|
|
createTime: '2026-05-01 09:30:00',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 8,
|
||
|
|
title: '2026年北屯市文旅行业户外招聘会',
|
||
|
|
hostUnit: '第十师北屯市人力资源和社会保障局',
|
||
|
|
fairType: '文旅专场',
|
||
|
|
region: '第十师(北屯市)',
|
||
|
|
address: '北屯市博望路北屯市文化广场',
|
||
|
|
boothCount: 35,
|
||
|
|
holdTime: '2026-10-20 09:00:00',
|
||
|
|
endTime: '2026-10-20 17:00:00',
|
||
|
|
applyStartTime: '2026-10-01 00:00:00',
|
||
|
|
applyEndTime: '2026-10-15 23:59:59',
|
||
|
|
onlineApply: false,
|
||
|
|
photoUrl: 'https://picsum.photos/seed/outdoor8/400/300',
|
||
|
|
createTime: '2026-05-10 16:00:00',
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
// 模拟自增 ID
|
||
|
|
let nextId = MOCK_DATA.length + 1;
|
||
|
|
|
||
|
|
// ==================== API 接口(使用假数据) ====================
|
||
|
|
|
||
|
|
const CMS_OUTDOOR_FAIR_BASE = '/api/cms/outdoor-fair';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 获取户外招聘会管理列表
|
||
|
|
* GET /api/cms/outdoor-fair/list
|
||
|
|
*/
|
||
|
|
export async function getOutdoorFairList(params?: OutdoorFairListParams) {
|
||
|
|
let filtered = [...MOCK_DATA];
|
||
|
|
|
||
|
|
if (params?.title) {
|
||
|
|
filtered = filtered.filter((item) => item.title.includes(params.title!));
|
||
|
|
}
|
||
|
|
if (params?.hostUnit) {
|
||
|
|
filtered = filtered.filter((item) => item.hostUnit.includes(params.hostUnit!));
|
||
|
|
}
|
||
|
|
if (params?.fairType) {
|
||
|
|
filtered = filtered.filter((item) => item.fairType.includes(params.fairType!));
|
||
|
|
}
|
||
|
|
|
||
|
|
const total = filtered.length;
|
||
|
|
const current = params?.current || 1;
|
||
|
|
const pageSize = params?.pageSize || 10;
|
||
|
|
const start = (current - 1) * pageSize;
|
||
|
|
const rows = filtered.slice(start, start + pageSize);
|
||
|
|
|
||
|
|
return {
|
||
|
|
code: 200,
|
||
|
|
msg: '操作成功',
|
||
|
|
total,
|
||
|
|
rows,
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 新增户外招聘会
|
||
|
|
* POST /api/cms/outdoor-fair
|
||
|
|
*/
|
||
|
|
export async function addOutdoorFair(data: OutdoorFairForm) {
|
||
|
|
const newItem: OutdoorFairItem = {
|
||
|
|
...data,
|
||
|
|
id: nextId++,
|
||
|
|
createTime: new Date().toISOString().replace('T', ' ').substring(0, 19),
|
||
|
|
};
|
||
|
|
MOCK_DATA.unshift(newItem);
|
||
|
|
return { code: 200, msg: '新增成功', data: newItem };
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 修改户外招聘会
|
||
|
|
* PUT /api/cms/outdoor-fair
|
||
|
|
*/
|
||
|
|
export async function updateOutdoorFair(data: OutdoorFairForm) {
|
||
|
|
const index = MOCK_DATA.findIndex((item) => item.id === data.id);
|
||
|
|
if (index !== -1) {
|
||
|
|
MOCK_DATA[index] = {
|
||
|
|
...MOCK_DATA[index],
|
||
|
|
...data,
|
||
|
|
updateTime: new Date().toISOString().replace('T', ' ').substring(0, 19),
|
||
|
|
};
|
||
|
|
return { code: 200, msg: '修改成功', data: MOCK_DATA[index] };
|
||
|
|
}
|
||
|
|
return { code: 404, msg: '未找到该记录' };
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 删除户外招聘会
|
||
|
|
* DELETE /api/cms/outdoor-fair/{id}
|
||
|
|
*/
|
||
|
|
export async function deleteOutdoorFair(id: number) {
|
||
|
|
const index = MOCK_DATA.findIndex((item) => item.id === id);
|
||
|
|
if (index !== -1) {
|
||
|
|
MOCK_DATA.splice(index, 1);
|
||
|
|
return { code: 200, msg: '删除成功' };
|
||
|
|
}
|
||
|
|
return { code: 404, msg: '未找到该记录' };
|
||
|
|
}
|