113 lines
5.0 KiB
PHP
113 lines
5.0 KiB
PHP
</main>
|
|
|
|
<footer class="mt-auto py-6 px-6 lg:px-8 border-t border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900 transition-colors">
|
|
<div class="flex flex-col md:flex-row justify-between items-center text-sm text-slate-500 dark:text-slate-400">
|
|
<div class="mb-2 md:mb-0">
|
|
© <?= date('Y') + 543 ?> โรงพยาบาลเกาะสมุย (Samui Hospital). All rights reserved.
|
|
</div>
|
|
<div class="flex items-center space-x-4">
|
|
<span>ระบบจัดการข้อมูลเงินเดือนเจ้าหน้าที่</span>
|
|
<div class="mt-4 md:mt-0 flex items-center space-x-4">
|
|
<span class="text-sm font-medium text-slate-500 bg-white dark:bg-slate-800 px-3 py-1 rounded-full shadow-sm border border-slate-200 dark:border-slate-700">
|
|
v<?= htmlspecialchars((new \app\Models\SystemSettingModel())->getSetting('app_version', '1.0.0')) ?>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- SweetAlert2 -->
|
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
|
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
// Theme Toggle Logic
|
|
const themeToggle = document.getElementById('themeToggle');
|
|
const themeIcon = document.getElementById('themeIcon');
|
|
const html = document.documentElement;
|
|
|
|
function updateThemeIcon() {
|
|
if (html.classList.contains('dark')) {
|
|
themeIcon.innerHTML = '<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z" />';
|
|
} else {
|
|
themeIcon.innerHTML = '<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z" />';
|
|
}
|
|
}
|
|
|
|
updateThemeIcon();
|
|
|
|
if (themeToggle) {
|
|
themeToggle.addEventListener('click', () => {
|
|
html.classList.toggle('dark');
|
|
if (html.classList.contains('dark')) {
|
|
localStorage.theme = 'dark';
|
|
} else {
|
|
localStorage.theme = 'light';
|
|
}
|
|
updateThemeIcon();
|
|
});
|
|
}
|
|
|
|
// Sidebar Toggle Logic for Mobile
|
|
const sidebarToggle = document.getElementById('sidebarToggle');
|
|
const sidebar = document.getElementById('sidebar');
|
|
const sidebarOverlay = document.getElementById('sidebarOverlay');
|
|
|
|
function toggleSidebar() {
|
|
sidebar.classList.toggle('-translate-x-full');
|
|
if (sidebar.classList.contains('-translate-x-full')) {
|
|
sidebarOverlay.classList.remove('opacity-100');
|
|
setTimeout(() => sidebarOverlay.classList.add('hidden'), 300);
|
|
} else {
|
|
sidebarOverlay.classList.remove('hidden');
|
|
setTimeout(() => sidebarOverlay.classList.add('opacity-100'), 10);
|
|
}
|
|
}
|
|
|
|
if (sidebarToggle) sidebarToggle.addEventListener('click', toggleSidebar);
|
|
if (sidebarOverlay) sidebarOverlay.addEventListener('click', toggleSidebar);
|
|
|
|
// SweetAlert2 Alerts
|
|
const Toast = Swal.mixin({
|
|
toast: true,
|
|
position: 'top-end',
|
|
showConfirmButton: false,
|
|
timer: 3000,
|
|
timerProgressBar: true,
|
|
didOpen: (toast) => {
|
|
toast.addEventListener('mouseenter', Swal.stopTimer)
|
|
toast.addEventListener('mouseleave', Swal.resumeTimer)
|
|
}
|
|
});
|
|
|
|
<?php if (isset($_SESSION['error'])): ?>
|
|
Toast.fire({
|
|
icon: 'error',
|
|
title: '<?= htmlspecialchars($_SESSION['error'], ENT_QUOTES, 'UTF-8') ?>'
|
|
});
|
|
<?php unset($_SESSION['error']); ?>
|
|
<?php endif; ?>
|
|
|
|
<?php if (isset($_SESSION['success'])): ?>
|
|
Toast.fire({
|
|
icon: 'success',
|
|
title: '<?= htmlspecialchars($_SESSION['success'], ENT_QUOTES, 'UTF-8') ?>'
|
|
});
|
|
<?php unset($_SESSION['success']); ?>
|
|
<?php endif; ?>
|
|
|
|
// PWA Service Worker Registration
|
|
if ('serviceWorker' in navigator) {
|
|
window.addEventListener('load', () => {
|
|
navigator.serviceWorker.register('<?= BASE_URL ?>/public/sw.js')
|
|
.then(registration => console.log('SW registered'))
|
|
.catch(err => console.log('SW registration failed:', err));
|
|
});
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|