import { useState } from 'react' import { Table, Form, Modal, Button, Radio, Input, InputNumber, Checkbox, DatePicker, Space } from 'antd' import { useTranslation } from 'react-i18next' import dayjs from 'dayjs' import BatchImportPrice from './BatchImportPrice' import { useDatePresets } from '@/hooks/useDatePresets' import useProductsStore from '@/stores/Products/Index' const { RangePicker } = DatePicker const ProductInfoQuotation = ({ editable, ...props }) => { const { t } = useTranslation() const [isQuotationModalOpen, setQuotationModalOpen] = useState(false) const [quotationForm] = Form.useForm() const datePresets = useDatePresets() const [editingProduct] = useProductsStore((state) => [state.editingProduct]) const [batchImportPriceVisible, setBatchImportPriceVisible] = useState(false) const [quotationTableVisible, setQuotationTableVisible] = useState(false) const [quotation, setQuotation] = useState([]) const [batchImportData, setBatchImportData] = useState([]) const handleBatchImportData = (data) => { setBatchImportData(data) } const handleBatchImportOK = () => { const tempBatchImportData = batchImportData.map((item) => { const { tag, validPeriod, ...rest } = item return rest }) const newData = [...quotation, ...tempBatchImportData] const sortedData = [...newData].sort((a, b) => { if (a.group_size_min !== b.group_size_min) { return a.group_size_min - b.group_size_min } return a.group_size_max - b.group_size_max }) setQuotation(sortedData) setBatchImportPriceVisible(false) } const quotationTableVisibleOK = () => { const tempQuotation = [...quotation] const sortedData = [...tempQuotation].sort((a, b) => { const aValidPeriod = dayjs(a.use_dates_end).diff(dayjs(a.use_dates_start)) const bValidPeriod = dayjs(b.use_dates_end).diff(dayjs(b.use_dates_start)) if (aValidPeriod !== bValidPeriod) { return aValidPeriod - bValidPeriod } const aGroupSize = a.group_size_max - a.group_size_min const bGroupSize = b.group_size_max - b.group_size_min return aGroupSize - bGroupSize }) setQuotation(sortedData) setQuotationTableVisible(false) } const quotationTableVisibleCancel = () => { setQuotationTableVisible(false) } const handleDelete = (index) => { const newData = [...quotation] newData.splice(index, 1) const sortedData = [...newData].sort((a, b) => { const aValidPeriod = dayjs(a.use_dates_end).diff(dayjs(a.use_dates_start)) const bValidPeriod = dayjs(b.use_dates_end).diff(dayjs(b.use_dates_start)) if (aValidPeriod !== bValidPeriod) { return aValidPeriod - bValidPeriod } const aGroupSize = a.group_size_max - a.group_size_min const bGroupSize = b.group_size_max - b.group_size_min return aGroupSize - bGroupSize }) setQuotation(sortedData) } const onQuotationSeleted = async (quotation) => { // 转换为 RangePicker 赋值格式 quotation.use_dates = [dayjs(quotation.use_dates_start), dayjs(quotation.use_dates_end)] quotationForm.setFieldsValue(quotation) setQuotationModalOpen(true) } const onNewQuotation = () => { // const emptyQuotation = newEmptyQuotation() // quotationForm.setFieldsValue(emptyQuotation) // setQuotationModalOpen(true) } const onQuotationFinish = (values) => { console.info(values) // saveOrUpdateQuotation(values) // .then(() => { // setQuotationModalOpen(false) // }) // .catch(ex => { // notification.error({ // message: 'Notification', // description: ex.message, // placement: 'top', // duration: 4, // }) // }) } const onQuotationFailed = (error) => { console.log('Failed:', error) // form.resetFields() } const quotationColumns = [ { title: t('products:adultPrice'), dataIndex: 'adult_cost', width: '4rem' }, { title: t('products:childrenPrice'), dataIndex: 'child_cost', width: '4rem' }, { title: t('products:currency'), dataIndex: 'currency', width: '4rem' }, { title: t('products:Types'), dataIndex: 'unit_name', width: '4rem', render: (text) => (text === '0' ? '每人' : text === '1' ? '每团' : text), }, { title: t('products:number'), dataIndex: 'group_size', width: '4rem', render: (_, record) => `${record.group_size_min}-${record.group_size_max}`, }, { title: t('products:validityPeriod'), dataIndex: 'use_dates', width: '6rem', render: (_, record) => `${record.use_dates_start}-${record.use_dates_end}`, }, { title: t('products:Weekdays'), dataIndex: 'weekdays', width: '4rem' }, { title: t('products:operation'), dataIndex: 'operation', width: '3%', render: (_, quotation) => { return ( ) }, }, ] return ( <>

{t('products:EditComponents.Quotation')}

{ // editable && } { // editable && } setBatchImportPriceVisible(false)} width={'90%'}> setQuotationModalOpen(false)} destroyOnClose forceRender modalRender={(dom) => (
{dom} )} > RMB USD 每人 每团
) } export default ProductInfoQuotation