c8012896e3
- BillingView (/billing): page-head со stats (кошелёк/лиды/runway-дни) + pending banner v-alert info («1 платёж в обработке через ЮKassa, auto-cancel 30 мин») + 3 wallet-cards (Кошелёк ₽ primary card теало-нуар + LIVE; Баланс лидов ГЦК; Тариф «Команда» 990₽/мес + 3 фичи) + transactions panel (4 tabs + v-data-table 5 колонок: Дата/Операция/ID/Статус-chip/Сумма ± JBM tnum) + invoices list (PDF + 1С 8.3 XML). - composables/mockBilling.ts соответствует схеме v8.7 §4.4-4.5: 8 mock транзакций (types: topup/lead_charge/refund/tariff_charge; statuses: pending/completed/rejected) + 4 invoices (pdf/xml_1c83) + pending payment. - Маршрут /billing (meta.layout=app) в router + web.php. Format helpers: «+ N ₽» / «− N ₽» / «— 0 ₽» rejected; Intl.NumberFormat ru-RU. Vitest +11 (всего 90/90 за 7.96s): - заголовок + page-stats nbsp regex + pending banner + 3 wallet-cards + 3 фичи тарифа + 4 tabs + дефолт «Все» 8 строк + format «+/−» + rejected «— 0 ₽» + 4 invoice rows + PDF/1С 8.3 XML labels. Регресс: lint+type+format OK; vitest 90/90; vite build (BillingView lazy-chunk; VDataTable вынесен в общий chunk 79.84KB - shared с DealsView); story:build 16/23 за 32.16s; Pest 48/48 за 4.89s. CLAUDE.md v1.26->v1.27, реестр Открытых_вопросов v1.35->v1.36. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
23 lines
489 B
Vue
23 lines
489 B
Vue
<script setup lang="ts">
|
|
import BillingView from './BillingView.vue';
|
|
</script>
|
|
|
|
<template>
|
|
<Story title="Views / BillingView" :layout="{ type: 'single', iframe: true }">
|
|
<Variant title="default">
|
|
<v-app>
|
|
<v-main class="story-main">
|
|
<BillingView />
|
|
</v-main>
|
|
</v-app>
|
|
</Variant>
|
|
</Story>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.story-main {
|
|
background: #f6f3ec;
|
|
min-height: 100vh;
|
|
}
|
|
</style>
|