109 lines
3.5 KiB
PHP
109 lines
3.5 KiB
PHP
<!DOCTYPE html>
|
|
<html>
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
<meta name="description"
|
|
content="Thế Giới Số cung cấp dịch vụ thiết kế website, phát triển ứng dụng, phân tích dữ liệu, triển khai & quản lý server, VPS, dedicated, email hosting và hệ thống portal quản lý dịch vụ cho doanh nghiệp.">
|
|
|
|
<meta name="author" content="Thế Giới Số">
|
|
|
|
<meta name="keywords"
|
|
content="thế giới số, thiết kế website, phát triển ứng dụng, phân tích dữ liệu, vps, hosting, dedicated server, email hosting, quản trị server, portal dịch vụ, laravel, nextjs, cloud, hạ tầng CNTT">
|
|
|
|
<title>Thế Giới Số Admin | Service Management Portal</title>
|
|
|
|
<script>
|
|
(function() {
|
|
const theme = localStorage.getItem('theme') || (window.matchMedia('(prefers-color-scheme: dark)').matches ?
|
|
'dark' : 'light');
|
|
document.documentElement.setAttribute('data-bs-theme', theme);
|
|
})();
|
|
</script>
|
|
|
|
<!-- Fonts -->
|
|
|
|
<!-- End fonts -->
|
|
|
|
<!-- CSRF Token -->
|
|
<meta name="_token" content="{{ csrf_token() }}">
|
|
|
|
<link rel="shortcut icon" href="{{ asset('/favicon.ico') }}">
|
|
|
|
<!-- plugin css -->
|
|
@foreach (config('assets.static.css') as $css)
|
|
<link href="{{ asset($css) }}" rel="stylesheet" />
|
|
@endforeach
|
|
|
|
@stack('plugin-styles')
|
|
|
|
<!-- Vite Assets (CSS & JS) -->
|
|
@vite(array_merge(config('assets.vite.css'), config('assets.vite.js')))
|
|
|
|
@stack('style')
|
|
</head>
|
|
|
|
<body data-base-url="{{ url('/') }}">
|
|
<div class="main-wrapper" id="app">
|
|
@include('administrator.layout.partials.sidebar')
|
|
<div class="page-wrapper">
|
|
@include('administrator.layout.partials.header')
|
|
<div class="page-content">
|
|
<div class="card mb-4 bg-white shadow-sm">
|
|
<div class="card-body p-3">
|
|
@yield('breadcrumb')
|
|
@yield('tab')
|
|
</div>
|
|
</div>
|
|
@yield('content')
|
|
</div>
|
|
@include('administrator.layout.partials.footer')
|
|
</div>
|
|
</div>
|
|
|
|
<!-- base js (static) -->
|
|
@foreach (config('assets.static.js') as $js)
|
|
<script src="{{ asset($js) }}"></script>
|
|
@endforeach
|
|
<!-- end base js -->
|
|
|
|
<!-- plugin js -->
|
|
@stack('plugin-scripts')
|
|
<!-- end plugin js -->
|
|
|
|
<!-- Global Select2 initialization -->
|
|
<script>
|
|
window.initSelect2 = function() {
|
|
$(".select2.single__select").select2({
|
|
allowClear: true,
|
|
width: "100%",
|
|
height: "100%",
|
|
});
|
|
};
|
|
|
|
// Global ModalManager initialization
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
if (typeof ModalManager !== 'undefined') {
|
|
ModalManager.init();
|
|
console.log('ModalManager initialized globally');
|
|
} else {
|
|
console.warn('ModalManager not loaded');
|
|
}
|
|
});
|
|
</script>
|
|
|
|
@include('administrator.layout.partials.toast')
|
|
|
|
<x-modal-confirm-delete />
|
|
|
|
@stack('custom-scripts')
|
|
<script type="text/javascript">
|
|
var apiMedia = '{{ route('api.GetAllImage') }}';
|
|
var apiUpload = '{{ route('media.upload') }}';
|
|
</script>
|
|
</body>
|
|
|
|
</html>
|