flat:暂存

This commit is contained in:
Apcallover
2025-12-07 12:42:02 +08:00
parent 6007a69e8a
commit 16f456d2f2
5 changed files with 135 additions and 42 deletions

View File

@@ -218,12 +218,12 @@ export async function render(oldRender: () => void) {
const checkRegion = 5 * 60 * 1000; const checkRegion = 5 * 60 * 1000;
export const request = { export const request = {
...errorConfig, ...errorConfig,
baseURL: process.env.NODE_ENV === 'development' ? '' : 'https://qd.zhaopinzao8dian.com/api', // baseURL: process.env.NODE_ENV === 'development' ? '' : 'https://qd.zhaopinzao8dian.com/api',
// baseURL: 'http://39.98.44.136:8080', // baseURL: 'http://39.98.44.136:8080',
// baseURL: baseURL:
// process.env.NODE_ENV === 'development' process.env.NODE_ENV === 'development'
// ? 'http://10.213.6.207:19010' ? 'http://10.213.6.207:19010'
// : 'http://10.213.6.207:19010/api', : 'http://10.213.6.207:19010/api',
requestInterceptors: [ requestInterceptors: [
(url: any, options: { headers: any; data?: any; params?: any; method?: string }) => { (url: any, options: { headers: any; data?: any; params?: any; method?: string }) => {
const headers = options.headers ? options.headers : {}; const headers = options.headers ? options.headers : {};

View File

@@ -6,11 +6,14 @@ import {
ProFormText, ProFormText,
ProFormTextArea, ProFormTextArea,
ProDescriptions, ProDescriptions,
ProFormUploadButton,
ProFormRadio,
} from '@ant-design/pro-components'; } from '@ant-design/pro-components';
import { Form } from 'antd'; import { Form } from 'antd';
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import { DictValueEnumObj } from '@/components/DictTag'; import { DictValueEnumObj } from '@/components/DictTag';
import { getCmsCompanyList } from '@/services/company/list'; import { getCmsCompanyList } from '@/services/company/list';
import { cmsfileupload } from '@/services/Management/list';
export type ListFormProps = { export type ListFormProps = {
onCancel: (flag?: boolean, formVals?: unknown) => void; onCancel: (flag?: boolean, formVals?: unknown) => void;
@@ -23,29 +26,28 @@ export type ListFormProps = {
mode?: 'view' | 'edit' | 'create'; mode?: 'view' | 'edit' | 'create';
}; };
const waitTime = (time: number = 100) => {
return new Promise((resolve) => {
setTimeout(() => {
resolve(true);
}, time);
});
};
const listEdit: React.FC<ListFormProps> = (props) => { const listEdit: React.FC<ListFormProps> = (props) => {
const [form] = Form.useForm<API.ManagementList.Manage>(); const [form] = Form.useForm<API.ManagementList.Manage>();
const { educationEnum, experienceEnum, areaEnum } = props; const { educationEnum, experienceEnum, areaEnum } = props;
const { mode = props.values ? 'edit' : 'create' } = props; const { mode = props.values ? 'edit' : 'create' } = props;
useEffect(() => { useEffect(() => {
if(props.open){ if (props.open) {
form.resetFields(); form.resetFields();
if (props.values) { if (props.values) {
form.setFieldsValue({ console.log('Setting form values:', props.values);
...props.values, form.setFieldsValue({
jobLocationAreaCode: String(props.values.jobLocationAreaCode || ''), ...props.values,
}); jobLocationAreaCode: String(props.values.jobLocationAreaCode || ''),
isExplain: Number(props.values.isExplain ?? 0),
});
} else {
// console.log('Setting default form values');
// form.setFieldsValue({
// isExplain: 0,
// });
}
} }
} }, [form, props.values, props.open]);
}, [form, props.values?.jobId,props.open]);
const handleCancel = () => { const handleCancel = () => {
props.onCancel(); props.onCancel();
@@ -53,12 +55,58 @@ const listEdit: React.FC<ListFormProps> = (props) => {
}; };
const handleFinish = async (values: Record<string, any>) => { const handleFinish = async (values: Record<string, any>) => {
props.onSubmit(values as API.ManagementList.Manage); const submitValues = {
...values,
isExplain: values.isExplain ?? 0,
};
props.onSubmit(submitValues as API.ManagementList.Manage);
}; };
const handleChange = (_: string, value: any) => { const handleChange = (_: string, value: any) => {
form.setFieldValue('companyName', value.label); form.setFieldValue('companyName', value.label);
}; };
const customUpload = async (options: any) => {
const { file, onSuccess, onError } = options;
if (!file) {
onError(new Error('文件不能为空'));
return;
}
const formData = new FormData();
formData.append('file', file);
try {
const response = await cmsfileupload(formData);
// Validate response structure
if (!response || typeof response !== 'object') {
throw new Error('上传响应格式错误');
}
if (response.code === 200) {
const fileUrl = typeof response.msg === 'string' ? response.msg : '';
const coverUrl = typeof response.coverUrl === 'string' ? response.coverUrl : '';
if (fileUrl) {
(form as any).setFieldValue('explainUrl', fileUrl);
}
if (coverUrl) {
(form as any).setFieldValue('cover', coverUrl);
}
onSuccess(response);
} else {
const errorMessage = typeof response.message === 'string' ? response.message : '上传失败';
throw new Error(errorMessage);
}
} catch (error) {
console.error('File upload error:', error);
const errorMessage = error instanceof Error ? error.message : '上传过程中发生未知错误';
onError(new Error(errorMessage));
}
};
if (mode === 'view') { if (mode === 'view') {
return ( return (
<ModalForm <ModalForm
@@ -72,19 +120,12 @@ const listEdit: React.FC<ListFormProps> = (props) => {
}} }}
submitter={false} submitter={false}
> >
<ProDescriptions<API.ManagementList.Manage> <ProDescriptions<API.ManagementList.Manage> column={2} dataSource={props.values || {}}>
column={2}
dataSource={props.values || {}}
>
<ProDescriptions.Item dataIndex="jobTitle" label="岗位名称" /> <ProDescriptions.Item dataIndex="jobTitle" label="岗位名称" />
<ProDescriptions.Item dataIndex="companyName" label="招聘公司" /> <ProDescriptions.Item dataIndex="companyName" label="招聘公司" />
<ProDescriptions.Item dataIndex="minSalary" label="最低薪资(元/月)" /> <ProDescriptions.Item dataIndex="minSalary" label="最低薪资(元/月)" />
<ProDescriptions.Item dataIndex="maxSalary" label="最高薪资(元/月)" /> <ProDescriptions.Item dataIndex="maxSalary" label="最高薪资(元/月)" />
<ProDescriptions.Item <ProDescriptions.Item dataIndex="education" label="学历要求" valueEnum={educationEnum} />
dataIndex="education"
label="学历要求"
valueEnum={educationEnum}
/>
<ProDescriptions.Item <ProDescriptions.Item
dataIndex="experience" dataIndex="experience"
label="工作经验" label="工作经验"
@@ -97,10 +138,25 @@ const listEdit: React.FC<ListFormProps> = (props) => {
/> />
<ProDescriptions.Item dataIndex="vacancies" label="招聘人数" /> <ProDescriptions.Item dataIndex="vacancies" label="招聘人数" />
<ProDescriptions.Item dataIndex="jobLocation" label="工作地点" /> <ProDescriptions.Item dataIndex="jobLocation" label="工作地点" />
<ProDescriptions.Item dataIndex="explainUrl" label="视频" />
<ProDescriptions.Item dataIndex="cover" label="视频帧封面图" />
<ProDescriptions.Item
dataIndex="isExplain"
label="视频显示方式"
valueType="select"
valueEnum={{
0: '关闭显示',
1: '显示视频',
}}
/>
<ProDescriptions.Item dataIndex="jobId" label="岗位编号" />
<ProDescriptions.Item dataIndex="companyId" label="公司编号" />
<ProDescriptions.Item dataIndex="isHot" label="是否热门" />
<ProDescriptions.Item dataIndex="isPublish" label="是否发布" />
<ProDescriptions.Item <ProDescriptions.Item
dataIndex="description" dataIndex="description"
label="岗位描述" label="岗位描述"
span={2} // 跨两列显示 span={2} // 跨两列显示
/> />
</ProDescriptions> </ProDescriptions>
</ModalForm> </ModalForm>
@@ -108,7 +164,6 @@ const listEdit: React.FC<ListFormProps> = (props) => {
} }
return ( return (
<ModalForm<API.ManagementList.Manage> <ModalForm<API.ManagementList.Manage>
title={mode === 'edit' ? '编辑岗位' : '新建岗位'} title={mode === 'edit' ? '编辑岗位' : '新建岗位'}
form={form} form={form}
autoFocusFirstInput autoFocusFirstInput
@@ -119,8 +174,13 @@ const listEdit: React.FC<ListFormProps> = (props) => {
}} }}
submitTimeout={2000} submitTimeout={2000}
onFinish={handleFinish} onFinish={handleFinish}
initialValues={{
isExplain: 0,
}}
> >
<ProForm.Group> <ProForm.Group>
<ProFormText width="md" hidden name="explainUrl" />
<ProFormText width="md" hidden name="cover" />
<ProFormText width="md" hidden name="jobId" /> <ProFormText width="md" hidden name="jobId" />
<ProFormText width="md" hidden name="companyName" /> <ProFormText width="md" hidden name="companyName" />
<ProFormText width="md" name="jobTitle" label="岗位名称" placeholder="请输入岗位名称" /> <ProFormText width="md" name="jobTitle" label="岗位名称" placeholder="请输入岗位名称" />
@@ -200,6 +260,29 @@ const listEdit: React.FC<ListFormProps> = (props) => {
placeholder="请输入岗位描述" placeholder="请输入岗位描述"
/> />
</ProForm.Group> </ProForm.Group>
<ProForm.Group>
<ProFormRadio.Group
name="isExplain"
label={'视频显示方式'}
colProps={{ md: 24 }}
placeholder="请选择视频显示方式"
valueEnum={{
0: '关闭显示',
1: '显示视频',
}}
/>
</ProForm.Group>
<ProForm.Group>
<ProFormUploadButton
name="video"
label="视频上传"
max={1}
fieldProps={{
customRequest: customUpload,
accept: 'video/*',
}}
/>
</ProForm.Group>
</ModalForm> </ModalForm>
); );
}; };

View File

@@ -220,6 +220,7 @@ function ManagementList() {
onClick={() => { onClick={() => {
setModalVisible(true); setModalVisible(true);
setCurrentRow(record); setCurrentRow(record);
setMode('edit');
}} }}
> >

View File

@@ -57,3 +57,10 @@ export async function getJobTrend(params) {
params: params params: params
}); });
} }
export async function cmsfileupload(params) {
return request(`/api/cms/file/upload`, {
method: 'POST',
data: params
});
}

View File

@@ -7,6 +7,7 @@ declare namespace API.ManagementList {
experience?: string; experience?: string;
isApply?: number; isApply?: number;
isCollection?: number; isCollection?: number;
isExplain?: number;
isHot?: number; isHot?: number;
jobId?: number; jobId?: number;
jobLocation?: string; jobLocation?: string;
@@ -31,6 +32,7 @@ declare namespace API.ManagementList {
experience?: string; experience?: string;
isApply?: number; isApply?: number;
isCollection?: number; isCollection?: number;
isExplain?: number;
isHot?: number; isHot?: number;
jobId?: number; jobId?: number;
jobLocation?: string; jobLocation?: string;