teste / index.html
ocirema's picture
implementa vendas - Initial Deployment
960fa74 verified
<!DOCTYPE html>
<html lang="pt-PT">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gestão Comercial | Sistema de Vendas</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
.sidebar {
transition: all 0.3s ease;
}
.sidebar.collapsed {
width: 80px;
}
.sidebar.collapsed .menu-text {
display: none;
}
.sidebar.collapsed .logo-text {
display: none;
}
.sidebar.collapsed .menu-item {
justify-content: center;
}
.content-area {
transition: all 0.3s ease;
}
.content-area.expanded {
margin-left: 80px;
}
.chart-container {
height: 300px;
}
@media (max-width: 768px) {
.sidebar {
position: fixed;
z-index: 1000;
transform: translateX(-100%);
}
.sidebar.open {
transform: translateX(0);
}
.content-area {
margin-left: 0 !important;
}
.mobile-menu-btn {
display: block;
}
}
</style>
</head>
<body class="bg-gray-100">
<div class="flex h-screen overflow-hidden">
<!-- Sidebar -->
<div class="sidebar bg-blue-800 text-white w-64 flex flex-col flex-shrink-0">
<!-- Logo -->
<div class="p-4 flex items-center border-b border-blue-700">
<div class="bg-white p-2 rounded-lg mr-3">
<i class="fas fa-store text-blue-800 text-xl"></i>
</div>
<span class="logo-text font-bold text-xl">Gestão Comercial</span>
</div>
<!-- Menu -->
<div class="flex-grow overflow-y-auto">
<div class="p-4">
<div class="mb-6">
<div class="text-xs uppercase text-blue-300 mb-2 menu-text">Menu Principal</div>
<a href="#" class="menu-item flex items-center py-2 px-3 rounded-lg bg-blue-700 mb-2 text-white">
<i class="fas fa-tachometer-alt mr-3"></i>
<span class="menu-text">Painel</span>
</a>
<a href="vendas.html" class="menu-item flex items-center py-2 px-3 rounded-lg hover:bg-blue-700 mb-2 text-white">
<i class="fas fa-shopping-cart mr-3"></i>
<span class="menu-text">Vendas</span>
</a>
<a href="#" class="menu-item flex items-center py-2 px-3 rounded-lg hover:bg-blue-700 mb-2 text-white">
<i class="fas fa-boxes mr-3"></i>
<span class="menu-text">Produtos</span>
</a>
<a href="#" class="menu-item flex items-center py-2 px-3 rounded-lg hover:bg-blue-700 mb-2 text-white">
<i class="fas fa-users mr-3"></i>
<span class="menu-text">Clientes</span>
</a>
<a href="#" class="menu-item flex items-center py-2 px-3 rounded-lg hover:bg-blue-700 mb-2 text-white">
<i class="fas fa-file-invoice-dollar mr-3"></i>
<span class="menu-text">Faturas/Recibos</span>
</a>
</div>
<div class="mb-6">
<div class="text-xs uppercase text-blue-300 mb-2 menu-text">Relatórios</div>
<a href="#" class="menu-item flex items-center py-2 px-3 rounded-lg hover:bg-blue-700 mb-2 text-white">
<i class="fas fa-chart-line mr-3"></i>
<span class="menu-text">Vendas</span>
</a>
<a href="#" class="menu-item flex items-center py-2 px-3 rounded-lg hover:bg-blue-700 mb-2 text-white">
<i class="fas fa-chart-pie mr-3"></i>
<span class="menu-text">Inventário</span>
</a>
</div>
<div>
<div class="text-xs uppercase text-blue-300 mb-2 menu-text">Configurações</div>
<a href="#" class="menu-item flex items-center py-2 px-3 rounded-lg hover:bg-blue-700 mb-2 text-white">
<i class="fas fa-cog mr-3"></i>
<span class="menu-text">Sistema</span>
</a>
<a href="#" class="menu-item flex items-center py-2 px-3 rounded-lg hover:bg-blue-700 mb-2 text-white">
<i class="fas fa-user-shield mr-3"></i>
<span class="menu-text">Usuários</span>
</a>
</div>
</div>
</div>
<!-- User Profile -->
<div class="p-4 border-t border-blue-700 flex items-center">
<div class="w-10 h-10 rounded-full bg-blue-600 flex items-center justify-center mr-3">
<i class="fas fa-user"></i>
</div>
<div class="menu-text">
<div class="font-medium">Admin</div>
<div class="text-xs text-blue-300">Administrador</div>
</div>
<button class="ml-auto text-blue-300 hover:text-white" id="toggleSidebar">
<i class="fas fa-chevron-left"></i>
</button>
</div>
</div>
<!-- Main Content -->
<div class="content-area flex-grow overflow-auto">
<!-- Top Navigation -->
<div class="bg-white shadow-sm p-4 flex items-center justify-between">
<button class="mobile-menu-btn hidden text-gray-600 hover:text-blue-800 mr-4" id="mobileMenuBtn">
<i class="fas fa-bars text-xl"></i>
</button>
<div class="flex-grow">
<h1 class="text-2xl font-bold text-gray-800">Dashboard</h1>
</div>
<div class="flex items-center">
<div class="relative mr-4">
<input type="text" placeholder="Procurar..." class="pl-10 pr-4 py-2 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent">
<i class="fas fa-search absolute left-3 top-3 text-gray-400"></i>
</div>
<div class="relative mr-4">
<button class="text-gray-600 hover:text-blue-800">
<i class="fas fa-bell text-xl"></i>
<span class="absolute top-0 right-0 w-2 h-2 bg-red-500 rounded-full"></span>
</button>
</div>
<div class="relative">
<button class="text-gray-600 hover:text-blue-800">
<i class="fas fa-envelope text-xl"></i>
<span class="absolute top-0 right-0 w-2 h-2 bg-red-500 rounded-full"></span>
</button>
</div>
</div>
</div>
<!-- Content -->
<div class="p-6">
<!-- Stats Cards -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-6">
<div class="bg-white rounded-lg shadow p-6">
<div class="flex items-center">
<div class="p-3 rounded-full bg-blue-100 text-blue-800 mr-4">
<i class="fas fa-shopping-cart"></i>
</div>
<div>
<div class="text-gray-500 text-sm">Vendas de Hoje</div>
<div class="text-2xl font-bold">€ 2.245,00</div>
</div>
</div>
<div class="mt-4 text-sm text-green-600">
<i class="fas fa-arrow-up mr-1"></i> 12% em relação a ontem
</div>
</div>
<div class="bg-white rounded-lg shadow p-6">
<div class="flex items-center">
<div class="p-3 rounded-full bg-green-100 text-green-800 mr-4">
<i class="fas fa-users"></i>
</div>
<div>
<div class="text-gray-500 text-sm">Novos Clientes</div>
<div class="text-2xl font-bold">24</div>
</div>
</div>
<div class="mt-4 text-sm text-green-600">
<i class="fas fa-arrow-up mr-1"></i> 8% em relação ao mês passado
</div>
</div>
<div class="bg-white rounded-lg shadow p-6">
<div class="flex items-center">
<div class="p-3 rounded-full bg-orange-100 text-orange-800 mr-4">
<i class="fas fa-box-open"></i>
</div>
<div>
<div class="text-gray-500 text-sm">Produtos em Estoque</div>
<div class="text-2xl font-bold">1.245</div>
</div>
</div>
<div class="mt-4 text-sm text-red-600">
<i class="fas fa-arrow-down mr-1"></i> 5% em relação ao mês passado
</div>
</div>
<div class="bg-white rounded-lg shadow p-6">
<div class="flex items-center">
<div class="p-3 rounded-full bg-purple-100 text-purple-800 mr-4">
<i class="fas fa-file-invoice-dollar"></i>
</div>
<div>
<div class="text-gray-500 text-sm">Faturas Pendentes</div>
<div class="text-2xl font-bold">18</div>
</div>
</div>
<div class="mt-4 text-sm text-green-600">
<i class="fas fa-arrow-up mr-1"></i> 3% em relação ao mês passado
</div>
</div>
</div>
<!-- Charts -->
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
<div class="bg-white rounded-lg shadow p-6">
<div class="flex justify-between items-center mb-4">
<h2 class="text-lg font-semibold text-gray-800">Vendas Mensais</h2>
<select class="border border-gray-300 rounded-lg px-3 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500">
<option>Últimos 6 meses</option>
<option>Últimos 12 meses</option>
<option>Este ano</option>
</select>
</div>
<div class="chart-container">
<canvas id="salesChart"></canvas>
</div>
</div>
<div class="bg-white rounded-lg shadow p-6">
<div class="flex justify-between items-center mb-4">
<h2 class="text-lg font-semibold text-gray-800">Produtos Mais Vendidos</h2>
<select class="border border-gray-300 rounded-lg px-3 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500">
<option>Este mês</option>
<option>Mês passado</option>
<option>Este ano</option>
</select>
</div>
<div class="chart-container">
<canvas id="productsChart"></canvas>
</div>
</div>
</div>
<!-- Recent Orders -->
<div class="bg-white rounded-lg shadow overflow-hidden mb-6">
<div class="p-6 border-b border-gray-200">
<h2 class="text-lg font-semibold text-gray-800">Últimas Vendas</h2>
</div>
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Nº Pedido</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Cliente</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Data</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Valor</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Estado</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Ações</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">#12345</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Empresa A</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">15-06-2023</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">€ 2.450,00</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">Pago</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<button class="text-blue-600 hover:text-blue-900 mr-3"><i class="fas fa-eye"></i></button>
<button class="text-gray-600 hover:text-gray-900"><i class="fas fa-print"></i></button>
</td>
</tr>
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">#12344</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Empresa B</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">14/06/2023</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">R$ 1.890,00</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-yellow-100 text-yellow-800">Por pagar</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<button class="text-blue-600 hover:text-blue-900 mr-3"><i class="fas fa-eye"></i></button>
<button class="text-gray-600 hover:text-gray-900"><i class="fas fa-print"></i></button>
</td>
</tr>
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">#12343</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Empresa C</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">13/06/2023</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">R$ 3.210,00</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">Pago</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<button class="text-blue-600 hover:text-blue-900 mr-3"><i class="fas fa-eye"></i></button>
<button class="text-gray-600 hover:text-gray-900"><i class="fas fa-print"></i></button>
</td>
</tr>
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900">#12342</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">Empresa D</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">12/06/2023</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">R$ 980,00</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 text-red-800">Anulado</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
<button class="text-blue-600 hover:text-blue-900 mr-3"><i class="fas fa-eye"></i></button>
<button class="text-gray-600 hover:text-gray-900"><i class="fas fa-print"></i></button>
</td>
</tr>
</tbody>
</table>
</div>
<div class="bg-gray-50 px-6 py-3 flex items-center justify-between border-t border-gray-200">
<div class="text-sm text-gray-500">
A mostrar <span class="font-medium">1</span> a <span class="font-medium">4</span> de <span class="font-medium">24</span> resultados
</div>
<div class="flex space-x-2">
<button class="px-3 py-1 border border-gray-300 rounded-md text-sm font-medium text-gray-700 bg-white hover:bg-gray-50">Anterior</button>
<button class="px-3 py-1 border border-gray-300 rounded-md text-sm font-medium text-white bg-blue-600 hover:bg-blue-700">1</button>
<button class="px-3 py-1 border border-gray-300 rounded-md text-sm font-medium text-gray-700 bg-white hover:bg-gray-50">2</button>
<button class="px-3 py-1 border border-gray-300 rounded-md text-sm font-medium text-gray-700 bg-white hover:bg-gray-50">3</button>
<button class="px-3 py-1 border border-gray-300 rounded-md text-sm font-medium text-gray-700 bg-white hover:bg-gray-50">Próximo</button>
</div>
</div>
</div>
<!-- Quick Actions -->
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-6">
<button class="bg-white rounded-lg shadow p-4 flex flex-col items-center justify-center hover:bg-blue-50 transition-colors">
<div class="bg-blue-100 p-3 rounded-full mb-3">
<i class="fas fa-plus text-blue-800"></i>
</div>
<span class="text-sm font-medium text-gray-700">Nova Venda</span>
</button>
<button class="bg-white rounded-lg shadow p-4 flex flex-col items-center justify-center hover:bg-green-50 transition-colors">
<div class="bg-green-100 p-3 rounded-full mb-3">
<i class="fas fa-user-plus text-green-800"></i>
</div>
<span class="text-sm font-medium text-gray-700">Novo Cliente</span>
</button>
<button class="bg-white rounded-lg shadow p-4 flex flex-col items-center justify-center hover:bg-orange-50 transition-colors">
<div class="bg-orange-100 p-3 rounded-full mb-3">
<i class="fas fa-box text-orange-800"></i>
</div>
<span class="text-sm font-medium text-gray-700">Novo Produto</span>
</button>
<button class="bg-white rounded-lg shadow p-4 flex flex-col items-center justify-center hover:bg-purple-50 transition-colors">
<div class="bg-purple-100 p-3 rounded-full mb-3">
<i class="fas fa-file-invoice text-purple-800"></i>
</div>
<span class="text-sm font-medium text-gray-700">Nova Fatura</span>
</button>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<!-- Modal for New Sale -->
<div id="newSaleModal" class="fixed inset-0 bg-gray-600 bg-opacity-50 overflow-y-auto h-full w-full hidden">
<div class="relative top-20 mx-auto p-5 border w-11/12 md:w-1/2 lg:w-1/3 shadow-lg rounded-md bg-white">
<div class="flex justify-between items-center mb-4">
<h3 class="text-lg font-semibold">Nova Venda</h3>
<button onclick="document.getElementById('newSaleModal').classList.add('hidden')" class="text-gray-500 hover:text-gray-700">
<i class="fas fa-times"></i>
</button>
</div>
<form>
<div class="mb-4">
<label class="block text-gray-700 text-sm font-bold mb-2" for="client">
Cliente
</label>
<select id="client" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline">
<option>Selecione um cliente</option>
<option>Cliente A</option>
<option>Cliente B</option>
</select>
</div>
<div class="mb-4">
<label class="block text-gray-700 text-sm font-bold mb-2" for="product">
Produto
</label>
<select id="product" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline">
<option>Selecione um produto</option>
<option>Produto A - €10.00</option>
<option>Produto B - €15.00</option>
</select>
</div>
<div class="mb-4">
<label class="block text-gray-700 text-sm font-bold mb-2" for="quantity">
Quantidade
</label>
<input id="quantity" type="number" min="1" value="1" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline">
</div>
<div class="flex justify-end">
<button type="button" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline">
Adicionar
</button>
</div>
</form>
</div>
</div>
<script>
// Toggle sidebar
const toggleSidebar = document.getElementById('toggleSidebar');
const sidebar = document.querySelector('.sidebar');
const contentArea = document.querySelector('.content-area');
const mobileMenuBtn = document.getElementById('mobileMenuBtn');
toggleSidebar.addEventListener('click', () => {
sidebar.classList.toggle('collapsed');
contentArea.classList.toggle('expanded');
// Change icon direction
const icon = toggleSidebar.querySelector('i');
if (sidebar.classList.contains('collapsed')) {
icon.classList.remove('fa-chevron-left');
icon.classList.add('fa-chevron-right');
} else {
icon.classList.remove('fa-chevron-right');
icon.classList.add('fa-chevron-left');
}
});
// Mobile menu toggle
mobileMenuBtn.addEventListener('click', () => {
sidebar.classList.toggle('open');
});
// Close sidebar when clicking outside on mobile
document.addEventListener('click', (e) => {
if (window.innerWidth <= 768 && !sidebar.contains(e.target) && e.target !== mobileMenuBtn) {
sidebar.classList.remove('open');
}
});
// Sales Functions
function openNewSaleModal() {
document.getElementById('newSaleModal').classList.remove('hidden');
}
function addProductToSale() {
// Implementation for adding products to sale
alert('Produto adicionado à venda!');
}
function finalizeSale() {
// Implementation for finalizing sale
alert('Venda finalizada com sucesso!');
}
// Charts
const salesCtx = document.getElementById('salesChart').getContext('2d');
const salesChart = new Chart(salesCtx, {
type: 'line',
data: {
labels: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],
datasets: [{
label: 'Vendas em R$',
data: [2200, 1900, 2500, 1800, 2100, 2500, 2300, 2700, 2400, 2600, 2800, 3000],
backgroundColor: 'rgba(59, 130, 246, 0.2)',
borderColor: 'rgba(59, 130, 246, 1)',
borderWidth: 2,
tension: 0.4,
fill: true
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
display: false
}
},
scales: {
y: {
beginAtZero: true,
ticks: {
callback: function(value) {
return '€ ' + value.toLocaleString('pt-PT');
}
}
}
}
}
});
const productsCtx = document.getElementById('productsChart').getContext('2d');
const productsChart = new Chart(productsCtx, {
type: 'bar',
data: {
labels: ['Produto A', 'Produto B', 'Produto C', 'Produto D', 'Produto E'],
datasets: [{
label: 'Quantidade Vendida',
data: [120, 90, 150, 80, 110],
backgroundColor: [
'rgba(99, 102, 241, 0.7)',
'rgba(59, 130, 246, 0.7)',
'rgba(16, 185, 129, 0.7)',
'rgba(245, 158, 11, 0.7)',
'rgba(244, 63, 94, 0.7)'
],
borderColor: [
'rgba(99, 102, 241, 1)',
'rgba(59, 130, 246, 1)',
'rgba(16, 185, 129, 1)',
'rgba(245, 158, 11, 1)',
'rgba(244, 63, 94, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: {
display: false
}
},
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=ocirema/teste" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>