// aislop-ignore-file: duplicate-block -- 退宿/换房表单结构相似且字段不同,已共享 DateFormItem import React from 'react'; import { DatePicker, Form, Input, InputNumber, Modal, Select, Switch, Tag, } from 'antd'; import type { Dayjs } from 'dayjs'; import { maskIdNumber, maskPhone } from '../../utils/sensitive'; import type { OccupancyRow } from './OccupancyColumns'; export type FormRule = React.ComponentProps['rules']; export const DateFormItem: React.FC<{ name: string; label: string; placeholder: string; required?: boolean; dependencies?: string[]; extra?: string; rules?: FormRule; }> = ({ name, label, placeholder, required, dependencies, extra, rules }) => ( ); export const CheckInModal: React.FC<{ open: boolean; canCheckIn: boolean; saving: boolean; form: ReturnType[0]; students: any[]; activeOccupancyByStudentId: Map; rooms: any[]; roomOptionLabel: (room: any) => string; isRoomSelectable: (room: any) => boolean; onRoomChange: (roomId: number) => void; availableBeds: any[]; availableLockers: any[]; availableResourcesLoading: boolean; selectedCheckInRoomId?: number; dateNotBefore: (start: string | Dayjs | null | undefined, messageText: string) => unknown; onOk: () => void; onCancel: () => void; }> = ({ open, canCheckIn, saving, form, students, activeOccupancyByStudentId, rooms, roomOptionLabel, isRoomSelectable, onRoomChange, availableBeds, availableLockers, availableResourcesLoading, selectedCheckInRoomId, dateNotBefore, onOk, onCancel, }) => { return (
({ value: r.id, label: roomOptionLabel(r), disabled: !isRoomSelectable(r), }))} /> ({ validator: dateNotBefore( getFieldValue('checkInDate'), '计费起始日不能早于入住日期', ) as never, }), ]} /> ({ value: b.id, label: b.bedNumber, }))} notFoundContent={selectedCheckInRoomId ? '该房间暂无可用床位' : '请先选择房间'} /> {availableBeds.length > 0 && (
空闲 {availableBeds.length} 张床位
)}
); }; export const BatchCheckOutModal: React.FC<{ open: boolean; canCheckOut: boolean; selectedRowKeys: number[]; latestSelectedCheckInDate?: string; latestSelectedBillingStartDate?: string; data: any[]; form: ReturnType[0]; dateNotBefore: (start: string | Dayjs | null | undefined, messageText: string) => unknown; onOk: () => void; onCancel: () => void; }> = ({ open, canCheckOut, selectedRowKeys, latestSelectedCheckInDate, latestSelectedBillingStartDate, data, form, dateNotBefore, onOk, onCancel, }) => { return (
r.id !== record?.roomId) .map((r) => ({ value: r.id, label: roomOptionLabel(r), disabled: !isRoomSelectable(r), }))} /> !value || transferAvailableBeds.some((bed) => bed.id === value) ? Promise.resolve() : Promise.reject(new Error('请选择目标宿舍下的可用床位')), }, ]} > ({ value: locker.id, label: locker.lockerNumber, }))} notFoundContent="目标宿舍暂无可用柜子" /> ({ validator: dateNotBefore( record?.billingStartDate || record?.checkInDate || getFieldValue('transferDate'), '旧房计费截止日不能早于计费起始日', ) as never, }), ]} > ({ validator: dateNotBefore( getFieldValue('transferDate'), '新房计费起始日不能早于换房日期', ) as never, }), ]} >
); };