Refactor outdoor fair management:
- Remove .DS_Store file. - Update .gitignore to include .DS_Store. - Modify proxy configuration to use environment variable for backend URL. - Correct component paths in routes. - Implement outdoor fair detail fetching with improved API call. - Enhance EditModal for outdoor fair with dynamic dictionary options. - Add functionality to upload outdoor fair photos. - Update service layer to handle outdoor fair dictionary options.
This commit is contained in:
@@ -36,6 +36,7 @@ export interface OutdoorFairListParams {
|
||||
title?: string;
|
||||
hostUnit?: string;
|
||||
fairType?: string;
|
||||
region?: string;
|
||||
current?: number;
|
||||
pageSize?: number;
|
||||
}
|
||||
@@ -70,177 +71,54 @@ export interface OutdoorFairCommonResult {
|
||||
code: number;
|
||||
msg?: string;
|
||||
data?: any;
|
||||
url?: string;
|
||||
fileName?: string;
|
||||
newFileName?: string;
|
||||
originalFilename?: string;
|
||||
}
|
||||
|
||||
// ==================== 静态假数据 ====================
|
||||
|
||||
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 接口(使用假数据) ====================
|
||||
/** 户外招聘会字典新增表单 */
|
||||
export interface OutdoorFairDictForm {
|
||||
dictType: 'outdoor_fair_type' | 'outdoor_fair_region';
|
||||
dictLabel: string;
|
||||
}
|
||||
|
||||
const CMS_OUTDOOR_FAIR_BASE = '/api/cms/outdoor-fair';
|
||||
|
||||
const formatDateTime = (value: any) => {
|
||||
if (value && typeof value.format === 'function') {
|
||||
return value.format('YYYY-MM-DD HH:mm:ss');
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
||||
const toApiPayload = (data: OutdoorFairForm) => ({
|
||||
...data,
|
||||
holdTime: formatDateTime(data.holdTime),
|
||||
endTime: formatDateTime(data.endTime),
|
||||
applyStartTime: formatDateTime(data.applyStartTime),
|
||||
applyEndTime: formatDateTime(data.applyEndTime),
|
||||
});
|
||||
|
||||
/**
|
||||
* 获取户外招聘会管理列表
|
||||
* GET /api/cms/outdoor-fair/list
|
||||
*/
|
||||
export async function getOutdoorFairList(params?: OutdoorFairListParams) {
|
||||
let filtered = [...MOCK_DATA];
|
||||
return request<OutdoorFairListResult>(`${CMS_OUTDOOR_FAIR_BASE}/list`, {
|
||||
method: 'GET',
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
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,
|
||||
};
|
||||
/**
|
||||
* 获取户外招聘会详情
|
||||
* GET /api/cms/outdoor-fair/{id}
|
||||
*/
|
||||
export async function getOutdoorFairInfo(id: number) {
|
||||
return request<OutdoorFairCommonResult>(`${CMS_OUTDOOR_FAIR_BASE}/${id}`, {
|
||||
method: 'GET',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -248,13 +126,10 @@ export async function getOutdoorFairList(params?: OutdoorFairListParams) {
|
||||
* 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 };
|
||||
return request<OutdoorFairCommonResult>(CMS_OUTDOOR_FAIR_BASE, {
|
||||
method: 'POST',
|
||||
data: toApiPayload(data),
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -262,16 +137,10 @@ export async function addOutdoorFair(data: OutdoorFairForm) {
|
||||
* 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: '未找到该记录' };
|
||||
return request<OutdoorFairCommonResult>(CMS_OUTDOOR_FAIR_BASE, {
|
||||
method: 'PUT',
|
||||
data: toApiPayload(data),
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -279,10 +148,31 @@ export async function updateOutdoorFair(data: OutdoorFairForm) {
|
||||
* 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: '未找到该记录' };
|
||||
return request<OutdoorFairCommonResult>(`${CMS_OUTDOOR_FAIR_BASE}/${id}`, {
|
||||
method: 'DELETE',
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增户外招聘会页面使用的字典项
|
||||
* POST /api/cms/outdoor-fair/dict-data
|
||||
*/
|
||||
export async function addOutdoorFairDictOption(data: OutdoorFairDictForm) {
|
||||
return request<OutdoorFairCommonResult>(`${CMS_OUTDOOR_FAIR_BASE}/dict-data`, {
|
||||
method: 'POST',
|
||||
data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传户外招聘会照片
|
||||
* POST /api/common/upload
|
||||
*/
|
||||
export async function uploadOutdoorFairPhoto(file: File) {
|
||||
const formData = new FormData();
|
||||
formData.append('file', file);
|
||||
return request<OutdoorFairCommonResult>('/api/common/upload', {
|
||||
method: 'POST',
|
||||
data: formData,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user