招聘会三个模块开发
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:
@@ -36,17 +36,45 @@ const AttendeeTab: React.FC<Props> = ({ fairId }) => {
|
||||
const [interviewModalOpen, setInterviewModalOpen] = useState(false);
|
||||
|
||||
const columns: ProColumns<any>[] = [
|
||||
{ title: '姓名', dataIndex: 'name', width: 100 },
|
||||
{
|
||||
title: '姓名',
|
||||
dataIndex: 'name',
|
||||
width: 100,
|
||||
hideInTable: true,
|
||||
fieldProps: { placeholder: '请输入姓名' },
|
||||
},
|
||||
{
|
||||
title: '手机号',
|
||||
dataIndex: 'phone',
|
||||
width: 130,
|
||||
hideInTable: true,
|
||||
fieldProps: { placeholder: '请输入手机号' },
|
||||
},
|
||||
{
|
||||
title: '面试状态',
|
||||
dataIndex: 'interviewStatus',
|
||||
hideInTable: true,
|
||||
valueType: 'select',
|
||||
options: [
|
||||
{ label: '未面试', value: 'none' },
|
||||
{ label: '已预约', value: 'scheduled' },
|
||||
{ label: '面试中', value: 'in_progress' },
|
||||
{ label: '已完成', value: 'completed' },
|
||||
{ label: '已通过', value: 'passed' },
|
||||
{ label: '未通过', value: 'failed' },
|
||||
],
|
||||
},
|
||||
{ title: '姓名', dataIndex: 'name', width: 100, hideInSearch: true },
|
||||
{ title: '性别', dataIndex: 'gender', width: 60, hideInSearch: true },
|
||||
{ title: '手机号', dataIndex: 'phone', width: 130 },
|
||||
{ title: '手机号', dataIndex: 'phone', width: 130, hideInSearch: true },
|
||||
{ title: '身份证号', dataIndex: 'idCard', width: 180, hideInSearch: true },
|
||||
{ title: '学历', dataIndex: 'education', width: 80, hideInSearch: true },
|
||||
{ title: '毕业院校', dataIndex: 'graduationSchool', width: 150, hideInSearch: true, ellipsis: true },
|
||||
{ title: '入场时间', dataIndex: 'checkInTime', valueType: 'dateTime', width: 170, render: (_, r) => r.checkInTime || '未入场' },
|
||||
{ title: '入场时间', dataIndex: 'checkInTime', valueType: 'dateTime', width: 170, hideInSearch: true, render: (_, r) => r.checkInTime || '未入场' },
|
||||
{ title: '入场方式', dataIndex: 'checkInMethod', width: 100, hideInSearch: true,
|
||||
render: (_, r) => checkInMethodMap[r.checkInMethod] || r.checkInMethod },
|
||||
{ title: '意向企业', dataIndex: 'targetCompanies', width: 180, ellipsis: true, hideInSearch: true },
|
||||
{ title: '面试状态', dataIndex: 'interviewStatus', width: 100,
|
||||
{ title: '面试状态', dataIndex: 'interviewStatus', width: 100, hideInSearch: true,
|
||||
render: (_, r) => {
|
||||
const s = interviewStatusMap[r.interviewStatus] || { text: r.interviewStatus, color: 'default' };
|
||||
return <Tag color={s.color}>{s.text}</Tag>;
|
||||
@@ -97,14 +125,14 @@ const AttendeeTab: React.FC<Props> = ({ fairId }) => {
|
||||
toolBarRender={() => [
|
||||
<Button key="simulate" type="primary" icon={<ScanOutlined />}
|
||||
onClick={() => setScanModalOpen(true)}
|
||||
>模拟扫码入场</Button>,
|
||||
>扫码入场</Button>,
|
||||
<Button key="export" icon={<ExportOutlined />}>导出</Button>,
|
||||
]}
|
||||
/>
|
||||
|
||||
{/* 模拟扫码入场弹窗 */}
|
||||
{/* 扫码入场弹窗 */}
|
||||
<ModalForm
|
||||
title="模拟扫码入场"
|
||||
title="扫码入场"
|
||||
open={scanModalOpen}
|
||||
width={450}
|
||||
modalProps={{ destroyOnClose: true, onCancel: () => setScanModalOpen(false) }}
|
||||
|
||||
@@ -32,8 +32,27 @@ const BoothTab: React.FC<Props> = ({ fairId }) => {
|
||||
const [assigningBooth, setAssigningBooth] = useState<any>(null);
|
||||
|
||||
const columns: ProColumns<any>[] = [
|
||||
{ title: '展位号', dataIndex: 'boothNumber', width: 100 },
|
||||
{ title: '企业名称', dataIndex: 'companyName', ellipsis: true, render: (_, r) => r.companyName || '--' },
|
||||
{
|
||||
title: '展位号',
|
||||
dataIndex: 'boothNumber',
|
||||
width: 100,
|
||||
hideInTable: true,
|
||||
fieldProps: { placeholder: '请输入展位号' },
|
||||
},
|
||||
{
|
||||
title: '审核状态',
|
||||
dataIndex: 'reviewStatus',
|
||||
width: 100,
|
||||
hideInTable: true,
|
||||
valueType: 'select',
|
||||
options: [
|
||||
{ label: '待审核', value: 'pending' },
|
||||
{ label: '已通过', value: 'approved' },
|
||||
{ label: '已拒绝', value: 'rejected' },
|
||||
],
|
||||
},
|
||||
{ title: '展位号', dataIndex: 'boothNumber', width: 100, hideInSearch: true },
|
||||
{ title: '企业名称', dataIndex: 'companyName', ellipsis: true, hideInSearch: true, render: (_, r) => r.companyName || '--' },
|
||||
{ title: '岗位数', dataIndex: 'jobCount', width: 80, hideInSearch: true },
|
||||
{ title: '审核状态', dataIndex: 'reviewStatus', width: 100,
|
||||
render: (_, r) => {
|
||||
@@ -65,7 +84,7 @@ const BoothTab: React.FC<Props> = ({ fairId }) => {
|
||||
disabled: !record.companyName,
|
||||
onClick: () => {
|
||||
if (!record.companyName) { message.warning('该展位尚未分配企业'); return; }
|
||||
message.success(`已向「${record.companyName}」发送展位信息通知(模拟)`);
|
||||
message.success(`已向「${record.companyName}」发送展位信息通知`);
|
||||
},
|
||||
},
|
||||
{ type: 'divider' as const },
|
||||
|
||||
@@ -10,7 +10,7 @@ interface Props {
|
||||
onSuccess: () => void;
|
||||
}
|
||||
|
||||
/** 模拟可添加的企业列表 */
|
||||
/** 可添加的企业列表 */
|
||||
const MOCK_AVAILABLE_COMPANIES = [
|
||||
{ companyId: 1013, companyName: '石河子市天富集团', industry: '能源', scale: '1000人以上', contactPerson: '黄经理', contactPhone: '13309930001' },
|
||||
{ companyId: 1014, companyName: '新疆兵团勘察设计院', industry: '建筑/工程', scale: '200-500人', contactPerson: '曹院长', contactPhone: '13309930002' },
|
||||
|
||||
@@ -48,8 +48,8 @@ const CompanyReviewTab: React.FC<Props> = ({ fairId }) => {
|
||||
|
||||
const handleQrCheckIn = async (id: number) => {
|
||||
Modal.confirm({
|
||||
title: '模拟扫码签到',
|
||||
content: '确认该单位已完成现场扫码签到吗?(模拟操作)',
|
||||
title: '扫码签到',
|
||||
content: '确认该单位已完成现场扫码签到吗?',
|
||||
onOk: async () => {
|
||||
const res = await qrCheckIn(id);
|
||||
if (res.code === 200) { message.success(res.msg); actionRef.current?.reload(); }
|
||||
@@ -58,22 +58,40 @@ const CompanyReviewTab: React.FC<Props> = ({ fairId }) => {
|
||||
};
|
||||
|
||||
const handleNotify = (companyName: string, method: string) => {
|
||||
message.success(`已通过${method}向「${companyName}」发送审核结果通知(模拟)`);
|
||||
message.success(`已通过${method}向「${companyName}」发送审核结果通知`);
|
||||
};
|
||||
|
||||
const columns: ProColumns<any>[] = [
|
||||
{ title: '企业名称', dataIndex: 'companyName', ellipsis: true },
|
||||
{
|
||||
title: '企业名称',
|
||||
dataIndex: 'companyName',
|
||||
ellipsis: true,
|
||||
hideInTable: true,
|
||||
fieldProps: { placeholder: '请输入企业名称' },
|
||||
},
|
||||
{
|
||||
title: '审核状态',
|
||||
dataIndex: 'reviewStatus',
|
||||
hideInTable: true,
|
||||
valueType: 'select',
|
||||
options: [
|
||||
{ label: '待审核', value: 'pending' },
|
||||
{ label: '已通过', value: 'approved' },
|
||||
{ label: '已拒绝', value: 'rejected' },
|
||||
],
|
||||
},
|
||||
{ title: '企业名称', dataIndex: 'companyName', ellipsis: true, hideInSearch: true },
|
||||
{ title: '行业', dataIndex: 'industry', width: 80, hideInSearch: true, render: (_, r) => <Tag>{r.industry}</Tag> },
|
||||
{ title: '规模', dataIndex: 'scale', width: 100, hideInSearch: true },
|
||||
{ title: '联系人', dataIndex: 'contactPerson', width: 100, hideInSearch: true },
|
||||
{ title: '联系电话', dataIndex: 'contactPhone', width: 130, hideInSearch: true },
|
||||
{ title: '审核状态', dataIndex: 'reviewStatus', width: 100,
|
||||
{ title: '审核状态', dataIndex: 'reviewStatus', width: 100, hideInSearch: true,
|
||||
render: (_, r) => {
|
||||
const s = reviewStatusMap[r.reviewStatus] || { text: r.reviewStatus, color: 'default' };
|
||||
return <Tag color={s.color}>{s.text}</Tag>;
|
||||
},
|
||||
},
|
||||
{ title: '签到状态', dataIndex: 'qrCheckInStatus', width: 100,
|
||||
{ title: '签到状态', dataIndex: 'qrCheckInStatus', width: 100, hideInSearch: true,
|
||||
render: (_, r) => <Tag color={r.qrCheckInStatus === 'checked_in' ? 'green' : 'default'}>
|
||||
{r.qrCheckInStatus === 'checked_in' ? '已签到' : '未签到'}
|
||||
</Tag>,
|
||||
|
||||
@@ -86,7 +86,7 @@ const DeviceTab: React.FC<Props> = ({ fairId }) => {
|
||||
key: 'qrcode',
|
||||
icon: <QrcodeOutlined />,
|
||||
label: '重新生成二维码',
|
||||
onClick: () => message.success(`已为「${record.deviceName}」重新生成二维码(模拟)`),
|
||||
onClick: () => message.success(`已为「${record.deviceName}」重新生成二维码`),
|
||||
}] : []),
|
||||
{
|
||||
key: 'edit',
|
||||
@@ -173,8 +173,8 @@ const DeviceTab: React.FC<Props> = ({ fairId }) => {
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
{/* 模拟闸机 */}
|
||||
<Card title="模拟闸机" style={{ marginBottom: 16 }}>
|
||||
{/* 闸机管理 */}
|
||||
<Card title="闸机管理" style={{ marginBottom: 16 }}>
|
||||
<Row gutter={16} style={{ marginBottom: 16 }}>
|
||||
{gateStatuses.map((gate: any) => (
|
||||
<Col span={12} key={gate.id}>
|
||||
@@ -190,7 +190,7 @@ const DeviceTab: React.FC<Props> = ({ fairId }) => {
|
||||
<Button type="primary" size="small" icon={<ScanOutlined />}
|
||||
disabled={!gate.isOpen}
|
||||
onClick={() => { setScanGate(gate); setScanModalOpen(true); }}
|
||||
>模拟扫码</Button>
|
||||
>扫码</Button>
|
||||
</Space>
|
||||
</Card>
|
||||
</Col>
|
||||
@@ -265,9 +265,9 @@ const DeviceTab: React.FC<Props> = ({ fairId }) => {
|
||||
/>
|
||||
</ModalForm>
|
||||
|
||||
{/* 模拟闸机扫码 */}
|
||||
{/* 闸机扫码 */}
|
||||
<ModalForm
|
||||
title={`模拟闸机扫码 — ${scanGate?.gateName || ''}`}
|
||||
title={`闸机扫码 — ${scanGate?.gateName || ''}`}
|
||||
open={scanModalOpen}
|
||||
width={400}
|
||||
modalProps={{ destroyOnClose: true, onCancel: () => setScanModalOpen(false) }}
|
||||
|
||||
Reference in New Issue
Block a user