import {Button, Col, Form, Row} from "@douyinfe/semi-ui"; import React, {useMemo} from "react"; import {Card} from "@/components/card"; import {useTranslation} from "react-i18next"; import {BillQueryParams} from "@/service/api/bill.ts"; import dayjs from "dayjs"; import useAuth from "@/hooks/useAuth.ts"; type SearchFormProps = { onSearch?: (params: BillQueryParams) => void; showApply?: boolean; loading?: boolean; searchHeader?: React.ReactNode; searchFooter?: React.ReactNode; } type SearchFormFields = { dateRange?: Date[]; student_number?: string; application_number?: string; bill_number?: string; payment_channel?: string; bill_status?: string; apply_status?: string; } const SearchForm: React.FC = (props) => { const {user} = useAuth(); const formSubmit = (value: SearchFormFields) => { const params: BillQueryParams = { department: user?.department == 'RO' ? 'RO' : 'FO', } if (value.dateRange && value.dateRange.length == 2) { params.start_date = dayjs(value.dateRange[0]).format('YYYY-MM-DD'); params.end_date = dayjs(value.dateRange[1]).format('YYYY-MM-DD'); } if (value.student_number) { params.student_number = value.student_number; } if (value.application_number) { params.application_number = value.application_number; } // 对账状态 if (value.apply_status) { params.apply_status = value.apply_status; } // 账单状态 if (value.bill_status) { params.status = value.bill_status; } // 支付方式 if (value.payment_channel) { params.payment_channel = value.payment_channel; } props.onSearch?.(params); } const {t, i18n} = useTranslation(); // 根据语言变化更新订单状态options const billStatusOptions = useMemo(() => { return [ {value: `PENDING`, label: t('bill.pay_status_pending')}, {value: 'PAID', label: t('bill.pay_status_paid')}, {value: 'CANCELLED', label: t('bill.pay_status_canceled')} ] }, [i18n.language]) // 根据语言变化更新对账状态options const applyStatusOptions = useMemo(() => { return [ {value: 'UNCHECKED', label: t('bill.reconciliation_status_pending')}, {value: 'CHECKED', label: t('bill.reconciliation_status_submitted')} ] }, [i18n.language]) return ( {props.searchHeader}
onSubmit={formSubmit}> ASIAPAY FLYWIRE PPS {billStatusOptions.map((item, index) => ( {item.label}))} {props.showApply && {applyStatusOptions.map((item, index) => ( {item.label}))} }
{props.searchFooter}
) } export default SearchForm;