feat: improved sidebar UI with larger icons and user info in footer

- Increased all sidebar navigation icons from text-sm to text-xl for better visibility
- Moved user information and logout button from header to sidebar footer
- Added user avatar with name and email in expanded sidebar state
- Collapsed sidebar shows avatar icon and logout icon button stacked vertically
- Simplified header by removing user badge and logout button
- Added version info (v1.0.0) in sidebar footer
- Improved responsive design for both collapsed and expanded states
This commit is contained in:
2026-02-19 12:08:56 -06:00
parent 7e7773578d
commit 5fa97105c9
33 changed files with 6160 additions and 912 deletions

View File

@@ -0,0 +1,18 @@
// Script para generar hash de contraseña para el usuario admin
import bcrypt from 'bcrypt';
const password = 'Admin123!'; // Cambiar esta contraseña
const saltRounds = 10;
bcrypt.hash(password, saltRounds, (err, hash) => {
if (err) {
console.error('Error generando hash:', err);
process.exit(1);
}
console.log('\n=== Hash de Contraseña Generado ===');
console.log('Contraseña:', password);
console.log('Hash:', hash);
console.log('\nUsa este hash en el archivo database/schema.sql');
console.log('para actualizar la contraseña del usuario admin.\n');
});

108
scripts/init-database.js Normal file
View File

@@ -0,0 +1,108 @@
// Script para inicializar la base de datos PostgreSQL
import { Pool } from 'pg';
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// Configuración de PostgreSQL (Docker local)
const pool = new Pool({
host: 'localhost',
port: 5432,
database: 'CONTROLDESK',
user: 'postgres',
password: 'Control.',
max: 1
});
async function initDatabase() {
console.log('=================================');
console.log('Inicializando Base de Datos');
console.log('=================================\n');
try {
// Leer el archivo SQL
const schemaPath = path.join(__dirname, '..', 'database', 'schema.sql');
console.log('1. Leyendo schema.sql...');
const sql = fs.readFileSync(schemaPath, 'utf8');
// Conectar a PostgreSQL
console.log('2. Conectando a PostgreSQL...');
const client = await pool.connect();
console.log(' ✓ Conectado exitosamente\n');
// Ejecutar el script SQL
console.log('3. Ejecutando script SQL...');
await client.query(sql);
console.log(' ✓ Tablas creadas exitosamente\n');
// Verificar las tablas creadas
console.log('4. Verificando tablas creadas...');
const result = await client.query(`
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name IN ('usuarios', 'usuario_base_datos', 'sesiones')
ORDER BY table_name;
`);
if (result.rows.length === 3) {
console.log(' ✓ Tablas verificadas:');
result.rows.forEach(row => {
console.log(` - ${row.table_name}`);
});
} else {
console.log(' ⚠ No todas las tablas fueron creadas');
}
// Verificar usuario admin
console.log('\n5. Verificando usuario admin...');
const userResult = await client.query('SELECT username, email, es_admin FROM usuarios WHERE username = $1', ['admin']);
if (userResult.rows.length > 0) {
console.log(' ✓ Usuario admin creado:');
console.log(` - Username: ${userResult.rows[0].username}`);
console.log(` - Email: ${userResult.rows[0].email}`);
console.log(` - Es Admin: ${userResult.rows[0].es_admin}`);
} else {
console.log(' ⚠ Usuario admin no encontrado');
}
client.release();
console.log('\n=================================');
console.log('✓ Inicialización Completa');
console.log('=================================\n');
console.log('IMPORTANTE: Ahora debes actualizar la contraseña del admin:');
console.log('1. Ejecuta: node scripts/generate-password-hash.js');
console.log('2. Copia el hash generado');
console.log('3. Ejecuta este SQL en PostgreSQL:');
console.log(' UPDATE usuarios SET password_hash = \'TU_HASH_AQUI\' WHERE username = \'admin\';');
console.log('\n4. Luego inicia el servidor: npm run dev');
console.log('5. Ve a: http://localhost:5173/login');
console.log(' Usuario: admin');
console.log(' Contraseña: Admin123!\n');
} catch (error) {
console.error('\n❌ Error durante la inicialización:');
console.error(error.message);
if (error.code === 'ECONNREFUSED' || error.code === 'ETIMEDOUT') {
console.error('\n⚠ No se pudo conectar a PostgreSQL.');
console.error('Verifica que:');
console.error('1. PostgreSQL esté corriendo en Docker:');
console.error(' docker-compose -f docker-compose.postgres.yml up -d');
console.error('2. Verifica el estado: docker ps');
console.error('3. Ve los logs: docker-compose -f docker-compose.postgres.yml logs postgres');
}
process.exit(1);
} finally {
await pool.end();
}
}
// Ejecutar
initDatabase();

47
scripts/init-users.sh Normal file
View File

@@ -0,0 +1,47 @@
#!/bin/bash
# Script de inicialización del sistema de usuarios
echo "==================================="
echo "Inicialización del Sistema de Usuarios"
echo "==================================="
echo ""
# 1. Verificar si PostgreSQL está disponible
echo "1. Verificando conexión a PostgreSQL..."
if command -v psql &> /dev/null; then
echo " ✓ PostgreSQL CLI encontrado"
else
echo " ✗ PostgreSQL CLI no encontrado"
echo " Por favor, ejecuta el script SQL manualmente"
exit 1
fi
# 2. Generar hash de contraseña
echo ""
echo "2. Generando hash de contraseña para admin..."
node scripts/generate-password-hash.js
# 3. Instrucciones
echo ""
echo "==================================="
echo "Pasos siguientes:"
echo "==================================="
echo ""
echo "1. Copia el hash generado arriba"
echo ""
echo "2. Edita el archivo database/schema.sql y reemplaza el hash temporal"
echo ""
echo "3. Ejecuta el script SQL en PostgreSQL:"
echo " psql -h 10.0.20.152 -U postgres -d CONTROLDESK -f database/schema.sql"
echo ""
echo "4. O ejecuta el SQL manualmente desde pgAdmin/DBeaver"
echo ""
echo "5. Copia .env.example a .env y configura las variables"
echo ""
echo "6. Inicia el servidor: npm run dev"
echo ""
echo "7. Ve a http://localhost:5173/login"
echo " Usuario: admin"
echo " Contraseña: Admin123! (o la que configuraste)"
echo ""
echo "==================================="