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:
18
scripts/generate-password-hash.js
Normal file
18
scripts/generate-password-hash.js
Normal 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
108
scripts/init-database.js
Normal 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
47
scripts/init-users.sh
Normal 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 "==================================="
|
||||
Reference in New Issue
Block a user