Skip to content

Commit 5dd059c

Browse files
committed
Refatorar a exibição de cartas na página inicial e adicionar componente Livewire para gerenciamento dinâmico
1 parent ea497a7 commit 5dd059c

File tree

4 files changed

+151
-100
lines changed

4 files changed

+151
-100
lines changed

app/Http/Controllers/HomeController.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,7 @@ public function index($idVendedor = 38)
2222

2323
$vendedor = $cadastro->TipoCadastro == 'Vendedor' ? $cadastro : Cadastro::find($cadastro->IDCadastroVendedorIndicado);
2424

25-
$cartas = Carta::with('TipoCarta')->orderBy('Prazo','DESC')->get();
26-
$tiposCartas = TipoCarta::all();
27-
28-
return view('home/index', compact('cadastro', 'cartas', 'tiposCartas', 'vendedor'));
25+
return view('home/index', compact('cadastro', 'vendedor'));
2926
}
3027

3128
public function cartasAVenda($idVendedor = 38)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace App\Http\Livewire;
4+
5+
use Livewire\Component;
6+
use App\Models\Carta;
7+
use App\Models\TipoCarta;
8+
9+
class CartasNovasCards extends Component
10+
{
11+
public $cartas;
12+
public $cadastro;
13+
public $tiposCartas;
14+
public $vendedor;
15+
16+
17+
public function mount($cadastro, $vendedor)
18+
{
19+
$this->cadastro = $cadastro;
20+
$this->vendedor = $vendedor;
21+
$this->cartas = Carta::with('TipoCarta')->orderBy('Prazo', 'DESC')->get();
22+
$this->tiposCartas = TipoCarta::all();
23+
}
24+
25+
public function placeholder()
26+
{
27+
return <<<'HTML'
28+
<div class="d-flex justify-content-center align-items-center" style="min-height: 85vh;">
29+
<div class="spinner-border text-primary" role="status">
30+
</div>
31+
</div>
32+
HTML;
33+
}
34+
35+
public function render()
36+
{
37+
return view('livewire.cartas-novas-cards');
38+
}
39+
}

resources/views/home/index.blade.php

Lines changed: 1 addition & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -3,103 +3,8 @@
33
@section('conteudo')
44
@include('components.navbarHome', ['cadastroId' => $cadastro->IDCadastro])
55

6-
<div class="section 3 mt-3" style="min-height: 85vh;">
7-
<div class="container">
8-
<div class="row">
9-
@foreach ($tiposCartas as $tipoCarta)
10-
@php
11-
$cartasPorTipo = $cartas->filter(function ($carta) use ($tipoCarta) {
12-
return $carta->IDTipoCarta == $tipoCarta->IDTipoCarta;
13-
});
14-
@endphp
15-
@if ($cartasPorTipo->count() > 0)
16-
<div class="col-md-4">
17-
<h2 class="card-title fs-4 text-center mb-1">Consórcio de <span style="color: #1e9ef3">{{ $tipoCarta->Descricao }}</span></h2>
18-
<div class="d-flex align-items-center justify-content-center">
19-
<img alt="imagem do produto" class="img-thumbnail " src="{{ asset('/images/tipoproduto/' . $tipoCarta->Imagem) }}">
20-
</div>
21-
<div class="row">
22-
<div class="items">
23-
@foreach ($cartasPorTipo as $carta)
24-
<div class="card">
25-
<div class="card-body">
26-
<span class="text-danger">Crédito</span>
27-
<p>R$ {{ number_format($carta->ValorCredito, 2, ',', '.') }}</p>
28-
<span class="text-danger">Parcela Flex</span>
29-
<p>R$ {{ number_format($carta->ParcelaFlex, 2, ',', '.') }}</p>
30-
<span class="text-danger">Prazo</span>
31-
<p>{{ $carta->Prazo }} Meses</p>
32-
<button class="btn btn-success" data-carta-categoria="{{ $carta->TipoCarta->Descricao }}"
33-
data-carta-valor="R$ {{ number_format($carta->ValorCredito, 2, ',', '.') }}"
34-
data-carta-flex="R$ {{ number_format($carta->ParcelaFlex, 2, ',', '.') }}" data-carta-prazo="{{ $carta->Prazo }}" onclick="comprarCarta(this)"><i
35-
class="fa fa-shopping-cart"></i> Comprar</button>
36-
<a class="btn btn-info fs-6 my-3" href="{{ url('/detalhesCartaNova/' . $carta->IDCarta . '/' . $cadastro->IDCadastro) }}">Detalhes</a>
37-
</div>
38-
</div>
39-
@endforeach
40-
</div>
41-
</div>
42-
</div>
43-
@endif
44-
@endforeach
45-
</div>
46-
</div>
47-
</div>
6+
<livewire:cartas-novas-cards :vendedor="$vendedor" :cadastro="$cadastro" lazy />
487

498
@include('components.floatMenu', ['cadastro' => $cadastro, 'vendedor' => $vendedor])
509

51-
<script>
52-
function comprarCarta(button) {
53-
var numeroVendedor = {{ $vendedor->Telefone }}
54-
var mensagemPadrao = "Olá, eu gostaria de comprar um Consórcio de " + button.dataset.cartaCategoria +
55-
"! Valor de crédito: " + button.dataset.cartaValor + ", Parcela Flex: " + button.dataset.cartaFlex +
56-
", Prazo: " + button.dataset.cartaPrazo + " meses";
57-
58-
mensagemPadrao = encodeURIComponent(mensagemPadrao);
59-
60-
window.location.href = 'https://api.whatsapp.com/send?phone=' + numeroVendedor + '&text=' +
61-
mensagemPadrao;
62-
}
63-
$(document).ready(function() {
64-
$('.items').slick({
65-
infinite: true,
66-
slidesToShow: 2,
67-
slidesToScroll: 1,
68-
autoplay: true,
69-
arrows: false,
70-
autoplaySpeed: 10000,
71-
});
72-
});
73-
</script>
74-
<script type="application/ld+json">
75-
{
76-
"@context": "https://schema.org",
77-
"@type": "ItemList",
78-
"itemListElement": [
79-
@foreach ($cartas as $index => $carta)
80-
{
81-
"@type": "ListItem",
82-
"position": {{ $index + 1 }},
83-
"item": {
84-
"@type": "Product",
85-
"name": "{{ $carta->TipoCarta->Descricao }} - Consórcio de R$ {{ number_format($carta->ValorCredito, 2, ',', '.') }}",
86-
"image": "{{ asset('/images/tipoproduto/' . $carta->TipoCarta->Imagem) }}",
87-
"description": "Consórcio para {{ $carta->TipoCarta->Descricao }}, com parcela flexível e vantagens incríveis.",
88-
"brand": {
89-
"@type": "Brand",
90-
"name": "Cartas Consórcios"
91-
},
92-
"offers": {
93-
"@type": "Offer",
94-
"priceCurrency": "BRL",
95-
"price": "{{ number_format($carta->ValorCredito, 2, '.', '') }}",
96-
"availability": "https://schema.org/InStock",
97-
"url": "{{ url('/detalhesCartaNova/' . $carta->IDCarta . '/' . $cadastro->IDCadastro) }}"
98-
}
99-
}
100-
} @if (!$loop->last), @endif {{-- Adiciona vírgula apenas se não for o último elemento --}}
101-
@endforeach
102-
]
103-
}
104-
</script>
10510
@endsection
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<div>
2+
<div class="section 3 mt-3" style="min-height: 85vh;">
3+
<div class="container">
4+
<div class="row">
5+
@foreach ($tiposCartas as $tipoCarta)
6+
@php
7+
$cartasPorTipo = $cartas->filter(function ($carta) use ($tipoCarta) {
8+
return $carta->IDTipoCarta == $tipoCarta->IDTipoCarta;
9+
});
10+
@endphp
11+
@if ($cartasPorTipo->count() > 0)
12+
<div class="col-md-4">
13+
<h2 class="card-title fs-4 text-center mb-1">Consórcio de <span
14+
style="color: #1e9ef3">{{ $tipoCarta->Descricao }}</span></h2>
15+
<div class="d-flex align-items-center justify-content-center">
16+
<img class="img-thumbnail " src="{{ asset('/images/tipoproduto/' . $tipoCarta->Imagem) }}"
17+
alt="imagem do produto">
18+
</div>
19+
<div class="row">
20+
<div class="items">
21+
@foreach ($cartasPorTipo as $carta)
22+
<div class="card">
23+
<div class="card-body">
24+
<span class="text-danger">Crédito</span>
25+
<p>R$ {{ number_format($carta->ValorCredito, 2, ',', '.') }}</p>
26+
<span class="text-danger">Parcela Flex</span>
27+
<p>R$ {{ number_format($carta->ParcelaFlex, 2, ',', '.') }}</p>
28+
<span class="text-danger">Prazo</span>
29+
<p>{{ $carta->Prazo }} Meses</p>
30+
<button class="btn btn-success comprar"
31+
data-carta-categoria="{{ $carta->TipoCarta->Descricao }}"
32+
data-carta-valor="R$ {{ number_format($carta->ValorCredito, 2, ',', '.') }}"
33+
data-carta-flex="R$ {{ number_format($carta->ParcelaFlex, 2, ',', '.') }}"
34+
data-carta-prazo="{{ $carta->Prazo }}"><i class="fa fa-shopping-cart"></i> Comprar</button>
35+
<a class="btn btn-info fs-6 my-3"
36+
href="{{ url('/detalhesCartaNova/' . $carta->IDCarta . '/' . $cadastro->IDCadastro) }}">Detalhes</a>
37+
</div>
38+
</div>
39+
@endforeach
40+
</div>
41+
</div>
42+
</div>
43+
@endif
44+
@endforeach
45+
</div>
46+
</div>
47+
</div>
48+
@script
49+
<script>
50+
$(document).ready(function() {
51+
$('.items').slick({
52+
infinite: true,
53+
slidesToShow: 2,
54+
slidesToScroll: 1,
55+
autoplay: true,
56+
arrows: false,
57+
autoplaySpeed: 10000,
58+
});
59+
60+
$('.comprar').click(function() {
61+
let button = $(this)[0];
62+
console.log(button);
63+
let numeroVendedor = {{ $vendedor->telefone }};
64+
let mensagemPadrao = "Olá, eu gostaria de comprar um Consórcio de " + button.dataset.cartaCategoria +
65+
"! Valor de crédito: " + button.dataset.cartaValor + ", Parcela Flex: " + button.dataset.cartaFlex +
66+
", Prazo: " + button.dataset.cartaPrazo + " meses";
67+
68+
mensagemPadrao = encodeURIComponent(mensagemPadrao);
69+
70+
window.location.href = 'https://api.whatsapp.com/send?phone=' + numeroVendedor + '&text=' +
71+
mensagemPadrao;
72+
});
73+
});
74+
</script>
75+
<script type="application/ld+json">
76+
{
77+
"@context": "https://schema.org",
78+
"@type": "ItemList",
79+
"itemListElement": [
80+
@foreach ($cartas as $index => $carta)
81+
{
82+
"@type": "ListItem",
83+
"position": {{ $index + 1 }},
84+
"item": {
85+
"@type": "Product",
86+
"name": "{{ $carta->TipoCarta->Descricao }}
87+
- Consórcio de R$ {{ number_format($carta->ValorCredito, 2, ',', '.') }}",
88+
"image": "{{ asset('/images/tipoproduto/' . $carta->TipoCarta->Imagem) }}",
89+
"description": "Consórcio para {{ $carta->TipoCarta->Descricao }}, com parcela flexível e vantagens incríveis.",
90+
"brand": {
91+
"@type": "Brand",
92+
"name": "Cartas Consórcios"
93+
},
94+
"offers": {
95+
"@type": "Offer",
96+
"priceCurrency": "BRL",
97+
"price": "{{ number_format($carta->ValorCredito, 2, '.', '') }}",
98+
"availability": "https://schema.org/InStock",
99+
"url": "{{ url('/detalhesCartaNova/' . $carta->IDCarta . '/' . $vendedor->idUsuario) }}"
100+
}
101+
}
102+
} @if (!$loop->last)
103+
,
104+
@endif {{-- Adiciona vírgula apenas se não for o último elemento --}}
105+
@endforeach
106+
]
107+
}
108+
</script>
109+
@endscript
110+
</div>

0 commit comments

Comments
 (0)