feat: 产品管理: 导出: `导游`, `景点`: 旺季

main
Lei OT 1 month ago
parent 4ba8751a77
commit b76ddef16f

@ -257,8 +257,46 @@ export const splitTable_Season = (chunkData) => {
const { quote_chunk } = pitem; const { quote_chunk } = pitem;
// const bySeason = groupBy(pitem.quotation, (ele) => ele.quote_season); // const bySeason = groupBy(pitem.quotation, (ele) => ele.quote_season);
const rowSeason = Object.keys(quote_chunk).reduce((accp, _s) => { const rowSeason = Object.keys(quote_chunk).reduce((accp, _s) => {
const bySeasonValue = groupBy(quote_chunk[_s], (ele) => ['adult_cost', 'child_cost'].map((k) => ele[k]).join('@')); const bySeasonValue = groupBy(quote_chunk[_s], (ele) => ['adult_cost', 'child_cost', 'group_size_min', 'group_size_max', 'unit_id'].map((k) => ele[k]).join('@'));
// console.log('---- bySeasonValue', bySeasonValue); // console.log('---- bySeasonValue', _s, bySeasonValue);
const byDate = groupBy(quote_chunk[_s], (ele) => `${ele.use_dates_start}~${ele.use_dates_end}`);
// console.log('---- byDate', _s, byDate);
const subHeader = Object.keys(bySeasonValue).length >= Object.keys(byDate).length ? 'dates' : 'priceValues';
// console.log('---- subHeader', _s, subHeader);
let valuesArr = [];
switch (subHeader) {
case 'priceValues':
valuesArr = Object.keys(bySeasonValue).reduce((accv, valKey) => {
const valRows = bySeasonValue[valKey];
const valRow = pick(valRows[0], ['adult_cost', 'child_cost', 'currency', 'unit_id', 'unit_name', 'group_size_min', 'group_size_max']);
// valRow.dates = valRows.map((v) => pick(v, ['id', 'use_dates_end', 'use_dates_start']));
valRow.rows = [valRows[0]];
valRow.originRows = valRows;
valRow.rowKey = valRows.map((v) => v.id).join(',');
valRow.headerDates = valRows.map((v) => pick(v, ['use_dates_end', 'use_dates_start']));
accv.push(valRow);
return accv;
}, []);
break;
case 'dates':
valuesArr = Object.keys(byDate).reduce((accv, dateKey) => {
const valRows = byDate[dateKey];
const valRow = pick(valRows[0], ['use_dates_end', 'use_dates_start']);
valRow.rows = valRows;
valRow.originRows = valRows;
valRow.rowKey = valRows.map((v) => v.id).join(',');
valRow.headerDates = [pick(valRows[0], ['use_dates_end', 'use_dates_start'])];
accv.push(valRow);
return accv;
}, []);
break;
default:
break;
}
const valUnderSeason = Object.keys(bySeasonValue).reduce((accv, valKey) => { const valUnderSeason = Object.keys(bySeasonValue).reduce((accv, valKey) => {
const valRows = bySeasonValue[valKey]; const valRows = bySeasonValue[valKey];
@ -270,9 +308,8 @@ export const splitTable_Season = (chunkData) => {
return accv; return accv;
}, []); }, []);
return { ...accp, [_s]: valUnderSeason }; return { ...accp, [_s]: valUnderSeason, [_s + 'Data']: valuesArr };
}, {}); }, {});
// console.log('---- rowSeason', rowSeason);
return { info: pitem.info, ...rowSeason, rowKey: pitem.info.id }; return { info: pitem.info, ...rowSeason, rowKey: pitem.info.id };
}); });
// console.log('---- tablesQuote', tablesQuote); // console.log('---- tablesQuote', tablesQuote);

@ -940,50 +940,87 @@ export default class AgencyContract {
size: 100, size: 100,
type: WidthType.PERCENTAGE, type: WidthType.PERCENTAGE,
}, },
rows: (row?.PS || []).map( rows: (row?.PSData || []).reduce((accr, quoteItem0, ti, arrt) => {
(quoteItem, ii, _arr) => const _header = new TableRow({
new TableRow({ borders: tableBorderInnerB,
borders: tableBorderInner, children: [
children: [ new TableCell({
new TableCell({ borders: tableBorderInnerB,
borders: ii !== _arr.length - 1 ? tableBorderInner : tableBorderInnerR, width: { size: 2000, type: WidthType.DXA },
width: { size: 2000, type: WidthType.DXA }, verticalAlign: AlignmentType.CENTER,
verticalAlign: AlignmentType.CENTER, columnSpan: 3,
children: quoteItem.rows.map( children: quoteItem0.headerDates
(d) => .map((d) => `${d.use_dates_start.replace(`${use_year}.`, '')}~${d.use_dates_end.replace(`${use_year}.`, '')}`)
.map(
(text) =>
new Paragraph({ new Paragraph({
alignment: AlignmentType.LEFT, text: text,
text: `${d.use_dates_start.replace(`${use_year}.`, '')}~${d.use_dates_end.replace(`${use_year}.`, '')}`, alignment: AlignmentType.CENTER,
}) })
), ),
}), }),
new TableCell({ ],
borders: ii !== _arr.length - 1 ? tableBorderInnerB : tableBorderNone, });
verticalAlign: AlignmentType.CENTER, const _rows = quoteItem0.rows.map(
children: [ (quoteItem, ii, _arr) =>
new Paragraph({ new TableRow({
text: `${quoteItem.adult_cost}`, borders: ti !== arrt.length - 1 ? tableBorderInnerB : tableBorderNone,
alignment: AlignmentType.LEFT, children: [
}), new TableCell({
], borders: ti !== arrt.length - 1 ? tableBorderInner : tableBorderInnerR,
}), width: { size: 2000, type: WidthType.DXA },
], verticalAlign: AlignmentType.CENTER,
}) children: [
), new Paragraph({
text: `${formatGroupSize(quoteItem.group_size_min, quoteItem.group_size_max, true)}`,
alignment: AlignmentType.LEFT,
}),
],
}),
new TableCell({
borders: ti !== arrt.length - 1 ? tableBorderInner : tableBorderInnerR,
width: { size: 1000, type: WidthType.DXA },
verticalAlign: AlignmentType.CENTER,
children: [
new Paragraph({
text: `${quoteItem.unit_name}`,
alignment: AlignmentType.LEFT,
}),
],
}),
new TableCell({
borders: ti !== arrt.length - 1 ? tableBorderInnerB : tableBorderNone,
width: { size: 2400, type: WidthType.DXA },
verticalAlign: AlignmentType.CENTER,
children: [
new Paragraph({
text: `${quoteItem.adult_cost}`,
alignment: AlignmentType.CENTER,
}),
],
}),
],
})
);
return accr.concat([_header, ..._rows]);
}, []),
}), }),
], ],
}), }),
new TableCell({ new TableCell({
borders: tableBorderOne, borders: tableBorderOne,
verticalAlign: AlignmentType.LEFT, verticalAlign: AlignmentType.LEFT,
children: (agencyExtras[row.info?.id] || []).map(extra => new Paragraph({ children: (agencyExtras[row.info?.id] || []).map(
children: [ (extra) =>
new TextRun({ new Paragraph({
text: `${extra.info.product_title}-${extra.info.product_type_name}`, children: [
bold: true, new TextRun({
}), text: `${extra.info.product_title}-${extra.info.product_type_name}`,
], bold: true,
})), }),
],
})
),
}), }),
], ],
}) })

@ -583,7 +583,7 @@ const AgencyPreview = ({ params, ...props }) => {
<> <>
旺季 旺季
<div className='flex justify-between divide-x divide-y-0 divide-solid divide-stone-200'> <div className='flex justify-between divide-x divide-y-0 divide-solid divide-stone-200'>
<span className='flex-0 text-center w-32'>-</span> <span className='flex-0 text-center w-24'>-</span>
<span className='flex-1'>成人</span> <span className='flex-1'>成人</span>
<span className='flex-1'>儿童</span> <span className='flex-1'>儿童</span>
</div> </div>
@ -593,21 +593,26 @@ const AgencyPreview = ({ params, ...props }) => {
key: 'PS', key: 'PS',
width: '9rem', width: '9rem',
align: 'center', align: 'center',
render: (_, { PS }) => ( render: (_, { PSData }) => (
<div> <div className='divide-x-0 divide-y divide-solid divide-stone-200'>
{(PS || []).map((ele, pi) => ( {(PSData || []).map((ele, pi) => (
<div key={pi}> <div key={pi} className='divide-x-0 divide-y divide-solid divide-stone-200'>
<div className='flex justify-between divide-x divide-y-0 divide-solid divide-stone-200'> <div className='flex-0 text-center w-24-'>
<div className='flex-0 text-center w-32'> {ele.headerDates.map((d, di) => (
{ele.rows.map((d, di) => ( <div key={di}>
<div key={di}> {d.use_dates_start.replace(`${use_year}.`, '')}~{d.use_dates_end.replace(`${use_year}.`, '')}
{d.use_dates_start.replace(`${use_year}.`, '')}~{d.use_dates_end.replace(`${use_year}.`, '')} </div>
</div> ))}
))}
</div>
<span className='flex-1 self-center'>{ele.adult_cost}</span>
<span className='flex-1 self-center'>{ele.child_cost}</span>
</div> </div>
{ele.rows.map((qrow, qri) => (
<div className='flex justify-between divide-x divide-y-0 divide-solid divide-stone-200' key={qrow.id}>
<span className='flex-0 w-16 text-start self-center'>{formatGroupSize(qrow.group_size_min, qrow.group_size_max, true)}</span>
<span className='flex-0 w-8 self-center'>{qrow.unit_name}</span>
<span className='flex-1 self-center'>{qrow.adult_cost}</span>
<span className='flex-1 self-center'>{qrow.child_cost}</span>
</div>
))}
<div></div>
</div> </div>
))} ))}
</div> </div>

Loading…
Cancel
Save