From 723fcd18efaa1ab78c20137270c71660d606b8cb Mon Sep 17 00:00:00 2001 From: Ekaterina Volkova Date: Tue, 11 Aug 2026 10:09:27 +0000 Subject: [PATCH 1/5] Select payment method default from order payments response --- common/types.ts | 1 - components/order/Payment.vue | 20 ++++++++++++++------ pages/contents/order.vue | 4 +++- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/common/types.ts b/common/types.ts index 78b824a2..43edd312 100644 --- a/common/types.ts +++ b/common/types.ts @@ -134,7 +134,6 @@ export interface OrderInfo { payerData: CustomerData; deliveryType: string; deliveryData: Record; - paymentType: string; basketData: Record; countries: Record; cdekCountries: number[]; diff --git a/components/order/Payment.vue b/components/order/Payment.vue index c56c2f3b..6410a097 100644 --- a/components/order/Payment.vue +++ b/components/order/Payment.vue @@ -5,24 +5,32 @@ const paymentType = defineModel('paymentType'); const { t } = useI18n(); const params = computed(() => ({ payerType: props.payerType, country: props.country })); -const { data: paymentMethods } = await useApi( +const { data: paymentsInfo } = await useApi<{ methods: string[]; default: string }>( '/order/payments/', params, { watch: [() => props.payerType, () => props.country] }, ); const paymentTypes = computed(() => - (paymentMethods.value!).map(method => ({ + (paymentsInfo.value?.methods ?? []).map(method => ({ id: method, title: t(method), comment: t(`${method}Comment`), })) ); -watch(paymentMethods, (methods) => { - if (!methods) return; - if (!methods.includes(paymentType.value ?? '')) { - paymentType.value = methods[0] ?? ''; +// Способ оплаты по умолчанию присылает бэк в поле default (зависит от типа +// плательщика: юрлицо — банковский перевод, физлицо — карта). Ручной выбор +// пользователя сохраняем, пока он доступен; при смене типа плательщика +// возвращаемся к дефолту нового типа. +const payerTypeChanged = ref(false); +watch(() => props.payerType, () => { payerTypeChanged.value = true; }); + +watch(paymentsInfo, (info) => { + if (!info) return; + if (payerTypeChanged.value || !paymentType.value || !info.methods.includes(paymentType.value)) { + payerTypeChanged.value = false; + paymentType.value = info.default; } }, { immediate: true }); diff --git a/pages/contents/order.vue b/pages/contents/order.vue index 466a9bc9..9288ecf2 100644 --- a/pages/contents/order.vue +++ b/pages/contents/order.vue @@ -48,7 +48,9 @@ const deliveryData = ref(orderInfo.value!.deliveryData); const deliveryType = ref(orderInfo.value!.deliveryType); const country = ref(Number(orderInfo.value!.deliveryData.country)); -const paymentType = ref(orderInfo.value!.paymentType); +// Способ оплаты из прошлого заказа не подставляем: начальное значение пустое, +// Payment.vue выберет дефолт из /order/payments/ по типу плательщика. +const paymentType = ref(''); useHead({ From bc452f94e32d2954be23add045ad15a70d8e99b8 Mon Sep 17 00:00:00 2001 From: Ekaterina Volkova Date: Tue, 11 Aug 2026 10:39:13 +0000 Subject: [PATCH 2/5] Fix payment default highlight lost to SSR hydration mismatch --- components/order/Payment.vue | 28 ++++------------------------ pages/contents/order.vue | 34 +++++++++++++++++++++++++++++----- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/components/order/Payment.vue b/components/order/Payment.vue index 6410a097..6108107f 100644 --- a/components/order/Payment.vue +++ b/components/order/Payment.vue @@ -1,38 +1,18 @@