diff --git a/src/stores/Products/Index.js b/src/stores/Products/Index.js index fffa4d2..e868754 100644 --- a/src/stores/Products/Index.js +++ b/src/stores/Products/Index.js @@ -147,7 +147,8 @@ export const useProductsStore = create( quotationList: (product?.quotation??[]).map(q => { return { ...q, - key: generateId() + key: generateId(), + fresh: false } }) })) @@ -183,21 +184,41 @@ export const useProductsStore = create( dayjs().startOf('M'), dayjs().endOf('M') ], - weekdays: '5, 6' + weekdayList: ['5', '6'], + fresh: true // 标识是否是新记录,新记录才用添加列表 }), - appendQuotationList: (newList) => { + appendQuotationList: (defList) => { const { activeAgency, editingProduct, quotationList } = get() + const generatedList = [] - const mapList = newList.map(q => { - return { - ...q, - WPI_SN: editingProduct.info.id, - WPP_VEI_SN: activeAgency.travel_agency_id - } + defList.forEach(definition => { + const mappedPriceList = definition?.priceList.map(price => { + return { + id: null, + adult_cost: price.priceInput.audultPrice, + child_cost: price.priceInput.childrenPrice, + group_size_min: price.priceInput.numberStart, + group_size_max: price.priceInput.numberEnd, + + currency: definition.currency, + unit_id: definition.unitId, + // 保持和 API 返回格式一致,日期要转换为字符串 + use_dates_start: definition.useDate[0].format('YYYY-MM-DD'), + use_dates_end: definition.useDate[1].format('YYYY-MM-DD'), + weekdays: definition.weekend.join(','), + WPI_SN: editingProduct.info.id, + WPP_VEI_SN: activeAgency.travel_agency_id, + lastedit_changed: '', + audit_state_id: -1, + key: generateId(), + fresh: false + } + }) + generatedList.push(...mappedPriceList) }) - const mergedList = [...quotationList,...mapList] + const mergedList = [...quotationList,...generatedList] set(() => ({ quotationList: mergedList })) @@ -214,19 +235,20 @@ export const useProductsStore = create( formValues.WPP_VEI_SN = activeAgency.travel_agency_id formValues.use_dates_start = formValues.use_dates[0].format('YYYY-MM-DD') formValues.use_dates_end = formValues.use_dates[1].format('YYYY-MM-DD') - formValues.weekdays = formValues.weekdays.join(',') + formValues.weekdays = formValues.weekdayList.join(',') - if (isEmpty(formValues.id)) { + if (formValues.fresh) { + formValues.key = generateId() formValues.lastedit_changed = '' - formValues.audit_state_id = -1 // 新增 + formValues.audit_state_id = -1 // 新增, + formValues.fresh = false // 添加到列表后就不是新纪录,保存要修改原来记录 mergedList = [...quotationList,...[formValues]] } else { - mergedList = quotationList.map(prevQuotation => { - if (prevQuotation.id === formValues.id) { + if (prevQuotation.key === formValues.key) { const changedList = [] for (const [key, value] of Object.entries(formValues)) { - if (key === 'use_dates' || key === 'id') continue + if (key === 'use_dates' || key === 'id' || key === 'key') continue const preValue = prevQuotation[key] const hasChanged = preValue !== value @@ -271,6 +293,7 @@ export const useProductsStore = create( }) deleteQuotationAction(quotaionId) set(() => ({ + // 还要设置回 product.quotaion 对象 quotationList: newList })) }, diff --git a/src/views/products/Detail/ProductInfoQuotation.jsx b/src/views/products/Detail/ProductInfoQuotation.jsx index 1233d7f..bf59a0a 100644 --- a/src/views/products/Detail/ProductInfoQuotation.jsx +++ b/src/views/products/Detail/ProductInfoQuotation.jsx @@ -5,6 +5,7 @@ import { CloseOutlined, StarTwoTone, PlusOutlined, ExclamationCircleFilled } fro import { useDatePresets } from '@/hooks/useDatePresets' import dayjs from 'dayjs' import useProductsStore from '@/stores/Products/Index' +import { generateId } from '@/utils/commons' const { RangePicker } = DatePicker @@ -121,7 +122,7 @@ const batchSetupInitialValues = { dayjs().add(1, 'year').startOf('y'), dayjs().add(1, 'year').endOf('y') ], 'unitId': '0', - 'currency': 'CNY', + 'currency': 'RMB', 'weekend': [ '5', '6' @@ -167,7 +168,7 @@ const batchSetupInitialValues = { dayjs().add(1, 'year').subtract(2, 'M').startOf('M'), dayjs().add(1, 'year').endOf('M') ], 'unitId': '0', - 'currency': 'CNY', + 'currency': 'RMB', 'weekend': [ '5', '6' @@ -224,7 +225,7 @@ const defaultDefinitionValue = { dayjs().add(1, 'year').subtract(2, 'M').startOf('M'), dayjs().add(1, 'year').endOf('M') ], 'unitId': '0', - 'currency': 'CNY', + 'currency': 'RMB', 'weekend': [ '5', '6' @@ -260,6 +261,7 @@ const ProductInfoQuotation = ({ editable, ...props }) => { const onQuotationSeleted = async (quotation) => { // 把 start, end 转换为 RangePicker 数组格式 quotation.use_dates = [dayjs(quotation.use_dates_start), dayjs(quotation.use_dates_end)] + quotation.weekdayList = quotation.weekdays.split(',') quotationForm.setFieldsValue(quotation) setQuotationModalOpen(true) } @@ -277,30 +279,8 @@ const ProductInfoQuotation = ({ editable, ...props }) => { } const onBatchSetupFinish = () => { - let priceList = [] const defList = batchSetupForm.getFieldsValue().defList - - defList.forEach(definition => { - const mappedPriceList = definition?.priceList.map(price => { - return { - id: null, - adult_cost: price.priceInput.audultPrice, - child_cost: price.priceInput.childrenPrice, - group_size_min: price.priceInput.numberStart, - group_size_max: price.priceInput.numberEnd, - - currency: definition.currency, - unit_id: definition.unitId, - // 保持和 API 返回格式一致,日期要转换为字符串 - use_dates_start: definition.useDate[0].format('YYYY-MM-DD'), - use_dates_end: definition.useDate[1].format('YYYY-MM-DD'), - weekdays: definition.weekend.join(','), - } - }) - priceList.push(...mappedPriceList) - }) - - const newList = appendQuotationList(priceList) + const newList = appendQuotationList(defList) triggerChange(newList) setBatchSetupModalOpen(false) } @@ -406,7 +386,7 @@ const ProductInfoQuotation = ({ editable, ...props }) => { > @@ -479,6 +459,8 @@ const ProductInfoQuotation = ({ editable, ...props }) => { )} > + + {