Files
portal/app/resources/js/components/settings/security/ChangePasswordCard.vue
T
Дмитрий 849bc73290 refactor(frontend): Sprint 4 Phase B/2 — split 3 user views (audit O-refactor-04 хвост)
BillingView 416→114 (+ BalanceCard 155 + TransactionsTable 113 + InvoicesTable 90
+ billingFormatters 51 composable: formatPlain/formatCost/statusChipColor/
statusLabel/formatLabel/formatIcon/txAmountClass).
SecurityTab 354→39 (+ ChangePasswordCard 17 + TwoFactorCard 218 + RecoveryCodesCard 104
+ SessionsTable 66; auth-store читается напрямую в каждом sub-component).
RemindersView 345→183 (+ RemindersFilters 51 + RemindersList 173;
ReminderDialog уже отдельный с прошлой фазы — служит как ReminderForm).

State (`activeTab`, `editingReminder`, `deletingReminderId` в RemindersView)
остаётся в parent ради единого reload-flow + confirm-dialog'ов. Auth-store
читается напрямую в TwoFactorCard/RecoveryCodesCard через useAuthStore() —
без prop-drilling. Reminders-store читается напрямую в RemindersFilters/
RemindersList.

Все sub-components <250 строк (acceptance threshold). 3 view-shells: 114/39/183.

Регрессия: ESLint 0 + vue-tsc 0 + Vitest 416/416 + build OK 968 ms.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 04:46:14 +03:00

18 lines
820 B
Vue

<script setup lang="ts">
/**
* ChangePasswordCard — карточка смены пароля.
* Sprint 4 Phase B/2 — split SecurityTab (audit O-refactor-04 хвост).
*
* MVP: только статичный display + кнопка-заглушка. Реальный flow смены пароля
* (диалог old/new/new_confirm + POST /api/account/change-password) — отдельный коммит.
*/
</script>
<template>
<v-card variant="outlined" class="pa-4 mb-4">
<h3 class="text-subtitle-2 mb-3">Пароль</h3>
<p class="text-body-2 text-medium-emphasis mb-3">Последняя смена: 12.04.2026 (26 дней назад)</p>
<v-btn variant="outlined" size="small" prepend-icon="mdi-lock-reset"> Сменить пароль </v-btn>
</v-card>
</template>