diff --git a/src/components/deals/DealModal.vue b/src/components/deals/DealModal.vue index 53f0cb8..9f96d22 100644 --- a/src/components/deals/DealModal.vue +++ b/src/components/deals/DealModal.vue @@ -1040,15 +1040,15 @@ const handleCloseDealObject = (side) => { const openModalDealContract = async () => { if (!deal.value.id) { + console.log('[DealModal] deal до saveDeal.', deal); console.log('[DealModal] Сделка не сохранена, сохраняем перед открытием модального окна договора.'); try { - let currentDeal = deal.value - const savedDeal = await saveDeal(); - if (savedDeal?.id) { - if (!savedDeal?.id) return - deal.value = savedDeal - currentDeal = savedDeal - const plainDeal = JSON.parse(JSON.stringify(toRaw(currentDeal))) + //const savedDeal = await saveDeal(); + await saveDeal(); + console.log('[DealModal] saveDeal.', deal); + if (deal?.value.id) { + //if (!savedDeal?.id) return + //deal.value = savedDeal.value console.log('[DealModal] Сделка успешно сохранена, ID:', deal.value); console.log('InnerDocAddModal:', InnerDocAddModal); @@ -1058,7 +1058,7 @@ const openModalDealContract = async () => { modal: true, }, data: { - deal: plainDeal, + deal: deal.value, }, onClose: (options) => { console.log('InnerDocAddModal закрыт, options:', options) @@ -1180,11 +1180,29 @@ const saveDeal = async () => { }); // Обновляем локальное состояние сделки - // if (response.data.deal) { - // deal.value = response.data.deal; - // } - console.log('cat', response.data) - return response.data.deal; + if (response.data.deal) { + //deal.value = response.data.deal; + const rawDeal = response.data.deal; + + // Конвертируем строки в Date, чтобы избежать падений в computed + if (rawDeal.deal_date) { + rawDeal.deal_date = dayjs(rawDeal.deal_date, [ + 'YYYY-MM-DD HH:mm:ss', + 'DD.MM.YYYY HH:mm' + ], true).toDate(); + } + if (rawDeal.created_at) { + rawDeal.created_at = new Date(rawDeal.created_at); + } + if (rawDeal.updated_at) { + rawDeal.updated_at = new Date(rawDeal.updated_at); + } + + deal.value = rawDeal; + } + console.log('cat deal', response.data.deal) + //return response.data.deal; + return null; } else { new Error(response.data.message || 'Ошибка при сохранении сделки'); diff --git a/src/components/deals/addEdit/InnerDocCard.vue b/src/components/deals/addEdit/InnerDocCard.vue index 3bdd68d..e9a1304 100644 --- a/src/components/deals/addEdit/InnerDocCard.vue +++ b/src/components/deals/addEdit/InnerDocCard.vue @@ -77,6 +77,8 @@ import { computed } from 'vue'; import { useConfirm } from 'primevue/useconfirm'; import { useToast } from 'primevue/usetoast'; +import dayjs from 'dayjs'; +import 'dayjs/locale/ru'; console.log('Запуск InnerDocCard'); @@ -152,14 +154,29 @@ const handleRemoveDealDoc = (event) => { }); }; +// const formatDate = (dateString) => { +// return new Date(dateString).toLocaleDateString('ru-RU', { +// day: '2-digit', +// month: '2-digit', +// year: 'numeric', +// hour: '2-digit', +// minute: '2-digit' +// }); +// }; const formatDate = (dateString) => { - return new Date(dateString).toLocaleDateString('ru-RU', { - day: '2-digit', - month: '2-digit', - year: 'numeric', - hour: '2-digit', - minute: '2-digit' - }); + if (!dateString) return '—'; + // Поддерживаем разные форматы + const parsed = dayjs(dateString, [ + 'YYYY-MM-DD HH:mm:ss', + 'DD.MM.YYYY HH:mm:ss', + 'DD.MM.YY HH:mm', + 'DD.MM.YYYY', + 'YYYY-MM-DDTHH:mm:ssZ' + ], true); // strict parsing + + return parsed.isValid() + ? parsed.locale('ru').format('DD.MM.YYYY HH:mm') + : '—'; };