AdminLTE3
This commit is contained in:
@@ -29,6 +29,29 @@ const requireAuth = (req, res, next) => {
|
||||
next();
|
||||
};
|
||||
|
||||
// Add stats middleware
|
||||
const addStats = async (req, res, next) => {
|
||||
try {
|
||||
if (req.session.user) {
|
||||
const [portfolioCount, servicesCount, contactsCount] = await Promise.all([
|
||||
Portfolio.count({ where: { isPublished: true } }),
|
||||
Service.count({ where: { isActive: true } }),
|
||||
Contact.count()
|
||||
]);
|
||||
|
||||
res.locals.stats = {
|
||||
portfolioCount,
|
||||
servicesCount,
|
||||
contactsCount
|
||||
};
|
||||
}
|
||||
next();
|
||||
} catch (error) {
|
||||
console.error('Stats middleware error:', error);
|
||||
next();
|
||||
}
|
||||
};
|
||||
|
||||
// Admin login page
|
||||
router.get('/login', (req, res) => {
|
||||
if (req.session.user) {
|
||||
@@ -479,12 +502,12 @@ router.post('/banners/:id/click', async (req, res) => {
|
||||
});
|
||||
|
||||
// Banner Editor (legacy route)
|
||||
router.get('/banner-editor', requireAuth, async (req, res) => {
|
||||
router.get('/banner-editor', requireAuth, addStats, async (req, res) => {
|
||||
res.redirect('/admin/banners');
|
||||
});
|
||||
|
||||
// Portfolio management
|
||||
router.get('/portfolio', requireAuth, async (req, res) => {
|
||||
router.get('/portfolio', requireAuth, addStats, async (req, res) => {
|
||||
try {
|
||||
const page = parseInt(req.query.page) || 1;
|
||||
const limit = 20;
|
||||
@@ -504,6 +527,7 @@ router.get('/portfolio', requireAuth, async (req, res) => {
|
||||
res.render('admin/portfolio/list', {
|
||||
title: 'Portfolio Management - Admin Panel',
|
||||
layout: 'admin/layout',
|
||||
currentPage: 'portfolio',
|
||||
user: req.session.user,
|
||||
portfolio,
|
||||
pagination: {
|
||||
@@ -944,7 +968,7 @@ router.post('/portfolio/preview', requireAuth, upload.array('images', 10), async
|
||||
});
|
||||
|
||||
// Services management
|
||||
router.get('/services', requireAuth, async (req, res) => {
|
||||
router.get('/services', requireAuth, addStats, async (req, res) => {
|
||||
try {
|
||||
const page = parseInt(req.query.page) || 1;
|
||||
const limit = 20;
|
||||
@@ -964,6 +988,7 @@ router.get('/services', requireAuth, async (req, res) => {
|
||||
res.render('admin/services/list', {
|
||||
title: 'Services Management - Admin Panel',
|
||||
layout: 'admin/layout',
|
||||
currentPage: 'services',
|
||||
user: req.session.user,
|
||||
services,
|
||||
pagination: {
|
||||
@@ -1232,7 +1257,7 @@ router.patch('/services/:id/toggle-active', requireAuth, async (req, res) => {
|
||||
});
|
||||
|
||||
// Contacts management
|
||||
router.get('/contacts', requireAuth, async (req, res) => {
|
||||
router.get('/contacts', requireAuth, addStats, async (req, res) => {
|
||||
try {
|
||||
const page = parseInt(req.query.page) || 1;
|
||||
const limit = 20;
|
||||
@@ -1259,6 +1284,7 @@ router.get('/contacts', requireAuth, async (req, res) => {
|
||||
res.render('admin/contacts/list', {
|
||||
title: 'Contacts Management - Admin Panel',
|
||||
layout: 'admin/layout',
|
||||
currentPage: 'contacts',
|
||||
user: req.session.user,
|
||||
contacts,
|
||||
currentStatus: status || 'all',
|
||||
@@ -1315,13 +1341,14 @@ router.get('/contacts/:id', requireAuth, async (req, res) => {
|
||||
});
|
||||
|
||||
// Settings
|
||||
router.get('/settings', requireAuth, async (req, res) => {
|
||||
router.get('/settings', requireAuth, addStats, async (req, res) => {
|
||||
try {
|
||||
const settings = await SiteSettings.findOne() || await SiteSettings.create({});
|
||||
|
||||
res.render('admin/settings', {
|
||||
title: 'Site Settings - Admin Panel',
|
||||
layout: 'admin/layout',
|
||||
currentPage: 'settings',
|
||||
user: req.session.user,
|
||||
settings
|
||||
});
|
||||
@@ -1336,16 +1363,17 @@ router.get('/settings', requireAuth, async (req, res) => {
|
||||
});
|
||||
|
||||
// Media gallery
|
||||
router.get('/media', requireAuth, (req, res) => {
|
||||
router.get('/media', requireAuth, addStats, (req, res) => {
|
||||
res.render('admin/media', {
|
||||
title: 'Media Gallery - Admin Panel',
|
||||
layout: 'admin/layout',
|
||||
currentPage: 'media',
|
||||
user: req.session.user
|
||||
});
|
||||
});
|
||||
|
||||
// Telegram bot configuration and testing
|
||||
router.get('/telegram', requireAuth, async (req, res) => {
|
||||
router.get('/telegram', requireAuth, addStats, async (req, res) => {
|
||||
try {
|
||||
const telegramService = require('../services/telegram');
|
||||
|
||||
@@ -1364,6 +1392,7 @@ router.get('/telegram', requireAuth, async (req, res) => {
|
||||
res.render('admin/telegram', {
|
||||
title: 'Telegram Bot - Admin Panel',
|
||||
layout: 'admin/layout',
|
||||
currentPage: 'telegram',
|
||||
user: req.session.user,
|
||||
botConfigured: telegramService.isEnabled,
|
||||
botToken: telegramService.botToken || '',
|
||||
@@ -1608,4 +1637,23 @@ router.post('/telegram/send', requireAuth, [
|
||||
}
|
||||
});
|
||||
|
||||
// Settings page
|
||||
router.get('/settings', requireAuth, addStats, (req, res) => {
|
||||
res.render('admin/settings', {
|
||||
title: 'Site Settings - Admin Panel',
|
||||
layout: 'admin/layout',
|
||||
user: req.session.user
|
||||
});
|
||||
});
|
||||
|
||||
// Banner editor page
|
||||
router.get('/banner-editor', requireAuth, addStats, (req, res) => {
|
||||
res.render('admin/banner-editor', {
|
||||
title: 'Banner Editor - Admin Panel',
|
||||
layout: 'admin/layout',
|
||||
currentPage: 'banner-editor',
|
||||
user: req.session.user
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user