QrRapido/Views/Account/History.cshtml
Ricardo Carneiro a8faf0ef2f
Some checks failed
Deploy QR Rapido / test (push) Successful in 3m45s
Deploy QR Rapido / build-and-push (push) Failing after 7s
Deploy QR Rapido / deploy-staging (push) Has been skipped
Deploy QR Rapido / deploy-production (push) Has been skipped
feat: tema claro ou escuro
2025-07-29 22:42:39 -03:00

158 lines
7.3 KiB
Plaintext

@model List<QRRapidoApp.Models.QRCodeHistory>
@using Microsoft.Extensions.Localization
@inject IStringLocalizer<QRRapidoApp.Resources.SharedResource> Localizer
@{
ViewData["Title"] = "Histórico de QR Codes";
Layout = "~/Views/Shared/_Layout.cshtml";
var userId = User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;
}
<div class="container mt-4">
<div class="row">
<div class="col-12">
<div class="d-flex justify-content-between align-items-center mb-4">
<div>
<h2><i class="fas fa-history text-primary"></i> @Localizer["QRCodeHistory"]</h2>
<p class="text-muted">@Localizer["QRCodesSavedHere"]</p>
</div>
<div>
<a href="/" class="btn btn-primary">
<i class="fas fa-plus"></i> @Localizer["GenerateNewQRCode"]
</a>
</div>
</div>
@if (Model != null && Model.Any())
{
<div class="row">
@foreach (var qr in Model)
{
<div class="col-12 col-md-6 col-lg-4 mb-4">
<div class="card h-100 shadow-sm">
<div class="card-body">
<div class="text-center mb-3">
<img src="data:image/png;base64,@qr.QRCodeBase64"
alt="QR Code"
class="img-fluid border"
style="max-width: 150px; max-height: 150px;">
</div>
<div class="mb-2">
<small class="text-muted">@Localizer["Type"]</small>
<span class="badge bg-secondary">@qr.Type</span>
</div>
<div class="mb-2">
<small class="text-muted">@Localizer["Content"]</small>
<p class="small mb-0" style="word-break: break-all;">
@if (qr.Content.Length > 50)
{
@(qr.Content.Substring(0, 50) + "...")
}
else
{
@qr.Content
}
</p>
</div>
<div class="mb-3">
<small class="text-muted">@Localizer["CreatedOn"]</small>
<br>
<small>@qr.CreatedAt.ToString("dd/MM/yyyy HH:mm")</small>
</div>
</div>
<div class="card-footer bg-light">
<div class="btn-group w-100" role="group">
<a href="/api/QR/Download/@qr.Id?format=png"
class="btn btn-sm btn-outline-primary"
title="Download PNG">
<i class="fas fa-download"></i> PNG
</a>
<a href="/api/QR/Download/@qr.Id?format=svg"
class="btn btn-sm btn-outline-primary"
title="Download SVG">
<i class="fas fa-download"></i> SVG
</a>
<a href="/api/QR/Download/@qr.Id?format=pdf"
class="btn btn-sm btn-outline-primary"
title="Download PDF">
<i class="fas fa-download"></i> PDF
</a>
<button type="button"
class="btn btn-sm btn-outline-secondary"
onclick="regenerateQR('@qr.Id')"
title="Regenerar">
<i class="fas fa-redo"></i>
</button>
</div>
</div>
</div>
</div>
}
</div>
@if (Model.Count == 50)
{
<div class="alert alert-info text-center">
<i class="fas fa-info-circle"></i>
@Localizer["ShowingRecent50QRCodes"]
</div>
}
}
else
{
<div class="text-center py-5">
<i class="fas fa-qrcode fa-4x text-muted mb-3"></i>
<h4 class="text-muted">@Localizer["NoQRCodeFound"]</h4>
<p class="text-muted">
@Localizer["QRCodesWillAppearHere"]
</p>
<a href="/" class="btn btn-primary">
<i class="fas fa-plus"></i> @Localizer["GenerateFirstQRCode"]
</a>
</div>
}
</div>
</div>
</div>
@section Scripts {
<script>
function regenerateQR(qrId) {
// Get QR data from history and regenerate
fetch(`/api/QR/History`)
.then(response => response.json())
.then(data => {
const qrData = data.find(q => q.id === qrId);
if (qrData) {
// Parse customization settings and redirect to home with parameters
const settings = JSON.parse(qrData.customizationSettings || '{}');
const params = new URLSearchParams({
content: qrData.content,
type: qrData.type,
size: settings.size || 300,
primaryColor: settings.primaryColor || '#000000',
backgroundColor: settings.backgroundColor || '#FFFFFF'
});
window.location.href = `/?${params.toString()}`;
}
})
.catch(error => {
console.error('Error regenerating QR:', error);
alert('@Localizer["ErrorRegeneratingQR"]');
});
}
// Auto-refresh the page periodically to show new QR codes
setInterval(() => {
// Only refresh if user is still on this page and there are QR codes
if (document.visibilityState === 'visible' && document.querySelector('.card')) {
location.reload();
}
}, 300000); // Refresh every 5 minutes
</script>
}