新增面试邀约功能。
Some checks failed
Node CI / build (14.x, macOS-latest) (push) Has been cancelled
Node CI / build (14.x, ubuntu-latest) (push) Has been cancelled
Node CI / build (14.x, windows-latest) (push) Has been cancelled
Node CI / build (16.x, macOS-latest) (push) Has been cancelled
Node CI / build (16.x, ubuntu-latest) (push) Has been cancelled
Node CI / build (16.x, windows-latest) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
coverage CI / build (push) Has been cancelled
Node pnpm CI / build (16.x, macOS-latest) (push) Has been cancelled
Node pnpm CI / build (16.x, ubuntu-latest) (push) Has been cancelled
Node pnpm CI / build (16.x, windows-latest) (push) Has been cancelled
Some checks failed
Node CI / build (14.x, macOS-latest) (push) Has been cancelled
Node CI / build (14.x, ubuntu-latest) (push) Has been cancelled
Node CI / build (14.x, windows-latest) (push) Has been cancelled
Node CI / build (16.x, macOS-latest) (push) Has been cancelled
Node CI / build (16.x, ubuntu-latest) (push) Has been cancelled
Node CI / build (16.x, windows-latest) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
coverage CI / build (push) Has been cancelled
Node pnpm CI / build (16.x, macOS-latest) (push) Has been cancelled
Node pnpm CI / build (16.x, ubuntu-latest) (push) Has been cancelled
Node pnpm CI / build (16.x, windows-latest) (push) Has been cancelled
This commit is contained in:
@@ -298,6 +298,7 @@ function ManagementList() {
|
||||
<ResumeView
|
||||
values={currentRow}
|
||||
open={resumeVisible}
|
||||
matching={{ jobId, companyId: (jobInfo as any)?.companyId, applyId: currentRow?.applyId }}
|
||||
onClose={() => {
|
||||
setResumeVisible(false);
|
||||
setCurrentRow(undefined);
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
import {Modal, Card, Descriptions, List, Button} from 'antd';
|
||||
import {Modal, Card, Descriptions, List, Button, Divider, Form, Select, Input, DatePicker, message} from 'antd';
|
||||
import React, { useEffect, useRef,useState } from 'react';
|
||||
import { ProDescriptions} from '@ant-design/pro-components';
|
||||
import {
|
||||
addCmsUserWorkExperiencesList
|
||||
addCmsUserWorkExperiencesList,
|
||||
addCmsInterview,
|
||||
} from '@/services/Management/list';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const { TextArea } = Input;
|
||||
const { Option } = Select;
|
||||
|
||||
export type ListFormProps = {
|
||||
onClose: (flag?: boolean, formVals?: unknown) => void;
|
||||
open: boolean;
|
||||
@@ -17,10 +23,18 @@ const listEdit: React.FC<ListFormProps> = (props) => {
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [contactInfoList, setContactInfoList] = useState<API.Management.WorkExperence[]>([]);
|
||||
|
||||
// 面试邀约相关状态
|
||||
const [interviewForm] = Form.useForm();
|
||||
const [interviewMethod, setInterviewMethod] = useState<string>('online');
|
||||
const [submitting, setSubmitting] = useState<boolean>(false);
|
||||
|
||||
useEffect(() => {
|
||||
if (props.open && props.values) {
|
||||
console.log(props.values);
|
||||
fetchResumeDetail();
|
||||
// 重置面试邀约表单
|
||||
interviewForm.resetFields();
|
||||
setInterviewMethod('online');
|
||||
}
|
||||
}, [props.values,props.open]);
|
||||
|
||||
@@ -41,6 +55,44 @@ const listEdit: React.FC<ListFormProps> = (props) => {
|
||||
}
|
||||
};
|
||||
|
||||
// 发送面试邀约
|
||||
const handleInterviewSubmit = async () => {
|
||||
try {
|
||||
const values = await interviewForm.validateFields();
|
||||
setSubmitting(true);
|
||||
|
||||
const payload: API.Management.InterviewInvitation = {
|
||||
companyId: props.matching?.companyId,
|
||||
jobId: Number(props.matching?.jobId),
|
||||
userId: props.values?.userId,
|
||||
applyId: props.values?.applyId ? Number(props.values.applyId) : undefined,
|
||||
interviewTime: values.interviewTime
|
||||
? dayjs(values.interviewTime).format('YYYY-MM-DD HH:mm:ss')
|
||||
: undefined,
|
||||
interviewMethod: values.interviewMethod,
|
||||
meetingLink: values.meetingLink,
|
||||
meetingPassword: values.meetingPassword,
|
||||
interviewLocation: values.interviewLocation,
|
||||
contactPhone: values.contactPhone,
|
||||
status: 'pending',
|
||||
remark: values.remark,
|
||||
};
|
||||
|
||||
const response = await addCmsInterview(payload);
|
||||
if (response.code === 200) {
|
||||
message.success('面试邀约已发送');
|
||||
interviewForm.resetFields();
|
||||
setInterviewMethod('online');
|
||||
} else {
|
||||
message.error(response.msg || '发送失败');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('发送面试邀约失败:', error);
|
||||
} finally {
|
||||
setSubmitting(false);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<Modal
|
||||
open={props.open}
|
||||
@@ -98,6 +150,91 @@ const listEdit: React.FC<ListFormProps> = (props) => {
|
||||
/>
|
||||
}
|
||||
</ProDescriptions>
|
||||
|
||||
<Divider />
|
||||
<Card title="面试邀约" bordered style={{ marginTop: 16 }}>
|
||||
<Form
|
||||
form={interviewForm}
|
||||
layout="vertical"
|
||||
initialValues={{ interviewMethod: 'online' }}
|
||||
>
|
||||
<Form.Item
|
||||
name="interviewMethod"
|
||||
label="面试方式"
|
||||
rules={[{ required: true, message: '请选择面试方式' }]}
|
||||
>
|
||||
<Select
|
||||
placeholder="请选择面试方式"
|
||||
onChange={(value) => setInterviewMethod(value)}
|
||||
>
|
||||
<Option value="online">线上</Option>
|
||||
<Option value="offline">线下</Option>
|
||||
</Select>
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item
|
||||
name="interviewTime"
|
||||
label="面试时间"
|
||||
rules={[{ required: true, message: '请选择面试时间' }]}
|
||||
>
|
||||
<DatePicker
|
||||
showTime
|
||||
style={{ width: '100%' }}
|
||||
placeholder="请选择面试时间"
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
{interviewMethod === 'online' && (
|
||||
<>
|
||||
<Form.Item
|
||||
name="meetingLink"
|
||||
label="腾讯会议链接"
|
||||
rules={[{ required: true, message: '请输入腾讯会议链接' }]}
|
||||
>
|
||||
<Input placeholder="请输入腾讯会议链接" />
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
name="meetingPassword"
|
||||
label="会议密码"
|
||||
rules={[{ required: true, message: '请输入会议密码' }]}
|
||||
>
|
||||
<Input placeholder="请输入会议密码" />
|
||||
</Form.Item>
|
||||
</>
|
||||
)}
|
||||
|
||||
{interviewMethod === 'offline' && (
|
||||
<Form.Item
|
||||
name="interviewLocation"
|
||||
label="面试地点"
|
||||
rules={[{ required: true, message: '请输入面试地点' }]}
|
||||
>
|
||||
<Input placeholder="请输入面试地点" />
|
||||
</Form.Item>
|
||||
)}
|
||||
|
||||
<Form.Item
|
||||
name="remark"
|
||||
label="备注"
|
||||
>
|
||||
<TextArea rows={3} placeholder="选填,如有其他注意事项可在此说明" />
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item
|
||||
name="contactPhone"
|
||||
label="面试官联系方式"
|
||||
rules={[{ required: true, message: '请输入面试官联系方式' }]}
|
||||
>
|
||||
<Input placeholder="请输入手机号或微信等联系方式" />
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item>
|
||||
<Button type="primary" loading={submitting} onClick={handleInterviewSubmit}>
|
||||
发送面试邀约
|
||||
</Button>
|
||||
</Form.Item>
|
||||
</Form>
|
||||
</Card>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user