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 bySeason = groupBy(pitem.quotation, (ele) => ele.quote_season);
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('@'));
// console.log('---- bySeasonValue', bySeasonValue);
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', _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 valRows = bySeasonValue[valKey];
@ -270,9 +308,8 @@ export const splitTable_Season = (chunkData) => {
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 };
});
// console.log('---- tablesQuote', tablesQuote);

@ -940,50 +940,87 @@ export default class AgencyContract {
size: 100,
type: WidthType.PERCENTAGE,
},
rows: (row?.PS || []).map(
(quoteItem, ii, _arr) =>
new TableRow({
borders: tableBorderInner,
children: [
new TableCell({
borders: ii !== _arr.length - 1 ? tableBorderInner : tableBorderInnerR,
width: { size: 2000, type: WidthType.DXA },
verticalAlign: AlignmentType.CENTER,
children: quoteItem.rows.map(
(d) =>
rows: (row?.PSData || []).reduce((accr, quoteItem0, ti, arrt) => {
const _header = new TableRow({
borders: tableBorderInnerB,
children: [
new TableCell({
borders: tableBorderInnerB,
width: { size: 2000, type: WidthType.DXA },
verticalAlign: AlignmentType.CENTER,
columnSpan: 3,
children: quoteItem0.headerDates
.map((d) => `${d.use_dates_start.replace(`${use_year}.`, '')}~${d.use_dates_end.replace(`${use_year}.`, '')}`)
.map(
(text) =>
new Paragraph({
alignment: AlignmentType.LEFT,
text: `${d.use_dates_start.replace(`${use_year}.`, '')}~${d.use_dates_end.replace(`${use_year}.`, '')}`,
text: text,
alignment: AlignmentType.CENTER,
})
),
}),
new TableCell({
borders: ii !== _arr.length - 1 ? tableBorderInnerB : tableBorderNone,
verticalAlign: AlignmentType.CENTER,
children: [
new Paragraph({
text: `${quoteItem.adult_cost}`,
alignment: AlignmentType.LEFT,
}),
],
}),
],
})
),
}),
],
});
const _rows = quoteItem0.rows.map(
(quoteItem, ii, _arr) =>
new TableRow({
borders: ti !== arrt.length - 1 ? tableBorderInnerB : tableBorderNone,
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({
borders: tableBorderOne,
verticalAlign: AlignmentType.LEFT,
children: (agencyExtras[row.info?.id] || []).map(extra => new Paragraph({
children: [
new TextRun({
text: `${extra.info.product_title}-${extra.info.product_type_name}`,
bold: true,
}),
],
})),
children: (agencyExtras[row.info?.id] || []).map(
(extra) =>
new Paragraph({
children: [
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'>
<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>
</div>
@ -593,21 +593,26 @@ const AgencyPreview = ({ params, ...props }) => {
key: 'PS',
width: '9rem',
align: 'center',
render: (_, { PS }) => (
<div>
{(PS || []).map((ele, pi) => (
<div key={pi}>
<div className='flex justify-between divide-x divide-y-0 divide-solid divide-stone-200'>
<div className='flex-0 text-center w-32'>
{ele.rows.map((d, di) => (
<div key={di}>
{d.use_dates_start.replace(`${use_year}.`, '')}~{d.use_dates_end.replace(`${use_year}.`, '')}
</div>
))}
</div>
<span className='flex-1 self-center'>{ele.adult_cost}</span>
<span className='flex-1 self-center'>{ele.child_cost}</span>
render: (_, { PSData }) => (
<div className='divide-x-0 divide-y divide-solid divide-stone-200'>
{(PSData || []).map((ele, pi) => (
<div key={pi} className='divide-x-0 divide-y divide-solid divide-stone-200'>
<div className='flex-0 text-center w-24-'>
{ele.headerDates.map((d, di) => (
<div key={di}>
{d.use_dates_start.replace(`${use_year}.`, '')}~{d.use_dates_end.replace(`${use_year}.`, '')}
</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>

Loading…
Cancel
Save