feat(#17): CRUD de categorias — API Go + tela Vue + testes unitários
API REST /api/categories (GET/POST/PUT/DELETE) com regras de negócio: categorias padrão não podem ser excluídas; categorias com transações vinculadas também bloqueadas. Tela Vue com formulário inline de criação/edição, indicador visual de categorias padrão e botão de exclusão condicional. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
@@ -1,3 +1,34 @@
|
||||
<script setup lang="ts">
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<header class="app-header">
|
||||
<span class="app-title">💰 Financeiro Carvalho</span>
|
||||
<nav class="app-nav">
|
||||
<RouterLink to="/">Início</RouterLink>
|
||||
<RouterLink to="/categorias">Categorias</RouterLink>
|
||||
</nav>
|
||||
</header>
|
||||
<RouterView />
|
||||
</template>
|
||||
|
||||
<style>
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
body { margin: 0; font-family: system-ui, sans-serif; background: #f8fafc; color: #1e293b; }
|
||||
a { color: inherit; text-decoration: none; }
|
||||
</style>
|
||||
|
||||
<style scoped>
|
||||
.app-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 2rem;
|
||||
padding: 0.75rem 1.5rem;
|
||||
background: #1e293b;
|
||||
color: #f8fafc;
|
||||
}
|
||||
.app-title { font-weight: 700; font-size: 1rem; }
|
||||
.app-nav { display: flex; gap: 1.25rem; }
|
||||
.app-nav a { font-size: 0.875rem; opacity: 0.8; }
|
||||
.app-nav a.router-link-active { opacity: 1; text-decoration: underline; }
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user