feat(redesign): Task 16 — KanbanView StatusPill + hover lift (motion #4)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-05-12 10:19:21 +03:00
parent 2f46a3e5ec
commit 22e6bdf8b8
3 changed files with 46 additions and 2 deletions
@@ -18,7 +18,12 @@ function formatCost(cost: number): string {
</script>
<template>
<v-card variant="outlined" class="kanban-card pa-3 mb-2" density="compact" @click="emit('open', deal.id)">
<v-card
variant="outlined"
class="kanban-card ld-hover-lift pa-3 mb-2"
density="compact"
@click="emit('open', deal.id)"
>
<div class="card-name">{{ deal.name }}</div>
<div class="card-phone text-caption text-medium-emphasis">{{ deal.phone }}</div>
<div class="card-meta mt-2">
@@ -54,7 +54,7 @@ function onDraggableChange(event: DraggableChangeEvent) {
<div class="kanban-column">
<header class="column-head" :style="{ '--accent': status.colorHex }">
<div class="column-head-row">
<span class="column-name">{{ status.nameRu }}</span>
<span class="column-name ld-label">{{ status.nameRu }}</span>
<span class="column-count">{{ deals.length }}</span>
</div>
<div class="column-total">{{ formatTotal(total) }}</div>
+39
View File
@@ -0,0 +1,39 @@
import { describe, it, expect, beforeEach } from 'vitest';
import { mount, flushPromises } from '@vue/test-utils';
import { createPinia, setActivePinia } from 'pinia';
import { createVuetify } from 'vuetify';
import { createMemoryHistory, createRouter } from 'vue-router';
import KanbanView from '../../resources/js/views/KanbanView.vue';
// KanbanView содержит DealDetailDrawer (VNavigationDrawer) — требует
// injected layout от v-app, недоступной в Vitest. Stub'им как в KanbanView.spec.ts.
function setup() {
setActivePinia(createPinia());
const router = createRouter({
history: createMemoryHistory(),
routes: [{ path: '/', component: KanbanView }],
});
router.push('/');
return mount(KanbanView, {
global: {
plugins: [router, createVuetify()],
stubs: { RouterLink: true, DealDetailDrawer: true, NewDealDialog: true },
},
});
}
describe('KanbanView — redesigned', () => {
beforeEach(() => setActivePinia(createPinia()));
it('card containers have ld-hover-lift class', async () => {
const w = setup();
await flushPromises();
expect(w.html()).toMatch(/ld-hover-lift/);
});
it('column headers use ld-label class', async () => {
const w = setup();
await flushPromises();
expect(w.html()).toMatch(/ld-label/);
});
});