1.怎加批量录入价格功能
parent
551b082168
commit
71c24be596
@ -1,243 +0,0 @@
|
||||
import React, { useState } from 'react';
|
||||
import { Table, Input, Button, DatePicker, Row, Col, Tag, Select } from 'antd';
|
||||
|
||||
const { RangePicker } = DatePicker;
|
||||
const { Option } = Select;
|
||||
const BatchImportPrice = () => {
|
||||
const [startDate, setStartDate] = useState(null);
|
||||
const [endDate, setEndDate] = useState(null);
|
||||
const [startPeople, setStartPeople] = useState(1);
|
||||
const [endPeople, setEndPeople] = useState(5);
|
||||
const [dateRanges, setDateRanges] = useState([]);
|
||||
const [peopleRanges, setPeopleRanges] = useState([]);
|
||||
const [tableData, setTableData] = useState([]);
|
||||
const [currency, setCurrency] = useState('RMB'); // 默认值为 RMB
|
||||
const [type, setType] = useState('每人'); // 默认值为 每人
|
||||
|
||||
const handleGenerateTable = () => {
|
||||
if (dateRanges.length === 0 || peopleRanges.length === 0) return;
|
||||
|
||||
const newData = dateRanges.flatMap(dateRange => {
|
||||
const { startDate, endDate } = dateRange;
|
||||
const dates = generateDateRange(startDate, endDate);
|
||||
const row = { dateRange: `${startDate.format('YYYY-MM-DD')} ~ ${endDate.format('YYYY-MM-DD')}` };
|
||||
|
||||
peopleRanges.forEach(peopleRangeString => {
|
||||
const [start, end] = peopleRangeString.split('-').map(Number);
|
||||
generatePeopleRange(start, end).forEach(person => {
|
||||
row[`${person}_adultPrice`] = '';
|
||||
row[`${person}_childPrice`] = '';
|
||||
});
|
||||
});
|
||||
|
||||
dates.forEach(date => {
|
||||
row[date] = '';
|
||||
});
|
||||
|
||||
return row;
|
||||
});
|
||||
|
||||
setTableData(newData);
|
||||
};
|
||||
|
||||
const generateDateRange = (start, end) => {
|
||||
const dates = [];
|
||||
let currentDate = start.clone();
|
||||
|
||||
while (currentDate <= end) {
|
||||
dates.push(currentDate.format('YYYY-MM-DD'));
|
||||
currentDate = currentDate.add(1, 'day');
|
||||
}
|
||||
|
||||
return dates;
|
||||
};
|
||||
|
||||
const generatePeopleRange = (start, end) => {
|
||||
const range = [];
|
||||
for (let i = start; i <= end; i++) {
|
||||
range.push(`人等${i}`);
|
||||
}
|
||||
return range;
|
||||
};
|
||||
|
||||
const handleCellChange = (value, dateRange, peopleRange, type) => {
|
||||
const newData = [...tableData];
|
||||
const rowIndex = newData.findIndex(row => row.dateRange === dateRange);
|
||||
newData[rowIndex][`${peopleRange}_${type}`] = value;
|
||||
setTableData(newData);
|
||||
};
|
||||
|
||||
const handleAddDateRange = () => {
|
||||
if (startDate && endDate) {
|
||||
const newDateRange = { startDate, endDate };
|
||||
// 检查是否已经存在相同的日期范围
|
||||
const isDateRangeExist = dateRanges.some(range => (
|
||||
range.startDate.isSame(startDate, 'day') && range.endDate.isSame(endDate, 'day')
|
||||
));
|
||||
if (!isDateRangeExist) {
|
||||
setDateRanges([...dateRanges, newDateRange]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const handleAddPeopleRange = () => {
|
||||
if (startPeople <= endPeople) {
|
||||
const newPeopleRange = `${startPeople}-${endPeople}`;
|
||||
// 检查是否已经存在相同的人员范围
|
||||
const isPeopleRangeExist = peopleRanges.includes(newPeopleRange);
|
||||
if (!isPeopleRangeExist) {
|
||||
setPeopleRanges([...peopleRanges, newPeopleRange]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const handleRemoveTag = (index, type) => {
|
||||
if (type === 'date') {
|
||||
setDateRanges(dateRanges.filter((_, i) => i !== index));
|
||||
} else {
|
||||
const removedPeopleRange = peopleRanges[index];
|
||||
setPeopleRanges(peopleRanges.filter(range => range !== removedPeopleRange));
|
||||
}
|
||||
setTableData([]);
|
||||
};
|
||||
|
||||
|
||||
const [adultPrice, setAdultPrice] = useState('');
|
||||
const [childPrice, setChildPrice] = useState('');
|
||||
|
||||
const handleAdultPriceChange = (value, dateRange) => {
|
||||
const newData = [...tableData];
|
||||
const rowIndex = newData.findIndex(row => row.dateRange === dateRange);
|
||||
newData[rowIndex]['成人价'] = value;
|
||||
setTableData(newData);
|
||||
};
|
||||
|
||||
const handleChildPriceChange = (value, dateRange) => {
|
||||
const newData = [...tableData];
|
||||
const rowIndex = newData.findIndex(row => row.dateRange === dateRange);
|
||||
newData[rowIndex]['儿童价'] = value;
|
||||
setTableData(newData);
|
||||
};
|
||||
|
||||
const columns = [
|
||||
{
|
||||
title: '日期\\人等',
|
||||
dataIndex: 'dateRange',
|
||||
key: 'dateRange',
|
||||
},
|
||||
...peopleRanges.flatMap(peopleRange => ([
|
||||
{
|
||||
title: peopleRange,
|
||||
dataIndex: `${peopleRange}_price`,
|
||||
key: `${peopleRange}_price`,
|
||||
render: (text, record) => (
|
||||
<div style={{ display: 'flex', justifyContent: 'space-between' }}>
|
||||
<Input
|
||||
value={record[`${peopleRange}_adultPrice`]}
|
||||
onChange={(e) => handleCellChange(e.target.value, record.dateRange, peopleRange, 'adultPrice')}
|
||||
placeholder="成人价"
|
||||
style={{ width: '45%' }}
|
||||
suffix={`${currency}/${type}`}
|
||||
/>
|
||||
<Input
|
||||
value={record[`${peopleRange}_childPrice`]}
|
||||
onChange={(e) => handleCellChange(e.target.value, record.dateRange, peopleRange, 'childPrice')}
|
||||
placeholder="儿童价"
|
||||
style={{ width: '45%' }}
|
||||
suffix={`${currency}/${type}`}
|
||||
/>
|
||||
</div>
|
||||
),
|
||||
}
|
||||
])),
|
||||
];
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
<Row>
|
||||
<Col span={4}>
|
||||
<Select value={currency} onChange={value => setCurrency(value)} style={{ width: '100%', marginTop: 10 }}>
|
||||
<Option value="RMB">RMB</Option>
|
||||
<Option value="MY">MY</Option>
|
||||
</Select>
|
||||
</Col>
|
||||
<Col span={4}>
|
||||
<Select value={type} onChange={value => setType(value)} style={{ width: '100%', marginTop: 10 }}>
|
||||
<Option value="每人">每人</Option>
|
||||
<Option value="美团">美团</Option>
|
||||
</Select>
|
||||
</Col>
|
||||
</Row>
|
||||
<Row gutter={16}>
|
||||
<Col span={8}>
|
||||
<RangePicker
|
||||
onChange={(dates) => {
|
||||
if (dates && dates.length === 2) {
|
||||
setStartDate(dates[0]);
|
||||
setEndDate(dates[1]);
|
||||
} else {
|
||||
setStartDate(null);
|
||||
setEndDate(null);
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</Col>
|
||||
<Button onClick={handleAddDateRange} type="primary">记录有效期</Button>
|
||||
</Row>
|
||||
<Row gutter={16}>
|
||||
<Col span={8}>
|
||||
<Input.Group compact style={{ marginTop: 10 }}>
|
||||
<Input
|
||||
style={{ width: 100, textAlign: 'center' }}
|
||||
placeholder="Start"
|
||||
value={startPeople}
|
||||
onChange={(e) => setStartPeople(parseInt(e.target.value, 10))}
|
||||
/>
|
||||
<Input
|
||||
style={{ width: 30, borderLeft: 0, pointerEvents: 'none', backgroundColor: '#fff' }}
|
||||
placeholder="~"
|
||||
disabled
|
||||
/>
|
||||
<Input
|
||||
style={{ width: 100, textAlign: 'center', borderLeft: 0 }}
|
||||
placeholder="End"
|
||||
value={endPeople}
|
||||
onChange={(e) => setEndPeople(parseInt(e.target.value, 10))}
|
||||
/>
|
||||
</Input.Group>
|
||||
</Col>
|
||||
<Button onClick={handleAddPeopleRange} type="primary" style={{ marginTop: 10 }}>记录人等</Button>
|
||||
</Row>
|
||||
<Button onClick={handleGenerateTable} type="primary" style={{ marginTop: 10 }}>生成表格</Button>
|
||||
|
||||
|
||||
<Row gutter={16} style={{ marginTop: '16px' }}>
|
||||
<Col span={24}>
|
||||
{dateRanges.map((dateRange, index) => (
|
||||
<Tag key={index} closable onClose={() => handleRemoveTag(index, 'date')}>
|
||||
{`${dateRange.startDate.format('YYYY-MM-DD')} ~ ${dateRange.endDate.format('YYYY-MM-DD')}`}
|
||||
</Tag>
|
||||
))}
|
||||
{peopleRanges.map((peopleRange, index) => (
|
||||
<Tag key={index} closable onClose={() => handleRemoveTag(index, 'people')}>
|
||||
{peopleRange}
|
||||
</Tag>
|
||||
))}
|
||||
</Col>
|
||||
</Row>
|
||||
<Table
|
||||
columns={columns}
|
||||
dataSource={tableData}
|
||||
bordered
|
||||
pagination={false}
|
||||
style={{ marginTop: '16px' }}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default BatchImportPrice;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue