fix(портал-мобилка): деталь сделки на телефоне — на весь экран

Панель деталей сделки была фикс. ширины (inline 400px в «Сделках», drawer 480px
в Канбане) — на экране 390 она была шире экрана: в «Сделках» давала горизонтальный
скролл страницы и крошила карточки списка, в Канбане левый край уезжал за экран.
На телефоне:
- «Сделки» — inline-панель стала полноэкранным оверлеем (position:fixed inset:0).
- Канбан — ширина drawer = ширине экрана (useDisplay).
Десктоп/планшет — прежний master-detail 400px / drawer 480px, без изменений.
Тесты 103/103 зелёные.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-07-07 20:56:42 +03:00
parent cdd0237108
commit 56f06ac2c3
@@ -6,9 +6,14 @@
* Тело — общий DealDetailBody.vue.
*/
import { computed } from 'vue';
import { useDisplay } from 'vuetify';
import type { MockDeal } from '../../composables/mockDeals';
import DealDetailBody from './DealDetailBody.vue';
// Телефон: overlay-панель на весь экран (фикс. 480px был шире экрана).
const { width, xs } = useDisplay();
const drawerWidth = computed(() => (xs.value ? width.value : 480));
const props = withDefaults(
defineProps<{
open: boolean;
@@ -43,7 +48,7 @@ function close() {
@status-changed="(s: string) => emit('status-changed', s)"
/>
</aside>
<v-navigation-drawer v-else v-model="drawerOpen" location="right" temporary :width="480" class="deal-drawer">
<v-navigation-drawer v-else v-model="drawerOpen" location="right" temporary :width="drawerWidth" class="deal-drawer">
<DealDetailBody
:deal="deal"
:tenant-id="tenantId"
@@ -69,4 +74,18 @@ function close() {
position: sticky;
top: 16px;
}
/* Телефон: панель деталей — полноэкранный оверлей поверх списка
(фикс. 400px рядом со списком давал горизонтальный скролл и крошил карточки). */
@media (max-width: 599.98px) {
.deal-detail-inline {
position: fixed;
inset: 0;
z-index: 1200;
width: 100%;
max-height: none;
border: none;
border-radius: 0;
overflow-y: auto;
}
}
</style>