[add] расписание + печать
This commit is contained in:
parent
c303e7526c
commit
70e6f304bb
@ -1,11 +1,11 @@
|
||||
<link rel="stylesheet" href="/admin/assets/css/bootstrap.css?1728913930">
|
||||
<link rel="stylesheet" href="/admin/assets/css/chosen.min.css?1728913930">
|
||||
<link rel="stylesheet" href="/admin/assets/css/fonts_full.css?1728913930">
|
||||
<link rel="stylesheet" href="/admin/assets/css/jquery-ui.css?1728913930">
|
||||
<link rel="stylesheet" href="/admin/assets/css/jquery-ui.structure.min.css?1728913930">
|
||||
<link rel="stylesheet" href="/admin/assets/css/jquery-ui.theme.min.css?1728913930">
|
||||
<link rel="stylesheet" href="/admin/assets/css/jquery.autocomplete.css?1728913930">
|
||||
<link rel="stylesheet" href="/admin/assets/css/jquery.fancybox.min.css?1728913930">
|
||||
<link rel="stylesheet" href="/admin/assets/css/jquery.periodpicker.min.css?1728913930">
|
||||
<link rel="stylesheet" href="/admin/assets/css/redactor.css?1728913930">
|
||||
<link rel="stylesheet" href="/admin/assets/css/custom.css?1728913930">
|
||||
<link rel="stylesheet" href="/admin/assets/css/bootstrap.css?1764002032">
|
||||
<link rel="stylesheet" href="/admin/assets/css/chosen.min.css?1764002032">
|
||||
<link rel="stylesheet" href="/admin/assets/css/fonts_full.css?1764002032">
|
||||
<link rel="stylesheet" href="/admin/assets/css/jquery-ui.css?1764002032">
|
||||
<link rel="stylesheet" href="/admin/assets/css/jquery-ui.structure.min.css?1764002032">
|
||||
<link rel="stylesheet" href="/admin/assets/css/jquery-ui.theme.min.css?1764002032">
|
||||
<link rel="stylesheet" href="/admin/assets/css/jquery.autocomplete.css?1764002032">
|
||||
<link rel="stylesheet" href="/admin/assets/css/jquery.fancybox.min.css?1764002032">
|
||||
<link rel="stylesheet" href="/admin/assets/css/jquery.periodpicker.min.css?1764002032">
|
||||
<link rel="stylesheet" href="/admin/assets/css/redactor.css?1764002032">
|
||||
<link rel="stylesheet" href="/admin/assets/css/custom.css?1764002032">
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
<script src="/admin/assets/js/jquery.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/bootstrap4.min.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/chosen.jquery.min.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/clipboard.min.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/jquery.fancybox.min.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/jquery-ui.min.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/jquery.autocomplete.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/jquery.form.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/jquery.input.counter.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/jquery.maskedinput-1.3.min.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/jquery.periodpicker.full.min.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/jquery.tablesorter.min.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/jquery.utils.min.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/redactor.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/bootstrap4.utils.js?1728913930"></script>
|
||||
<script src="/admin/assets/js/jquery.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/bootstrap4.min.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/chosen.jquery.min.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/clipboard.min.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/jquery.fancybox.min.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/jquery-ui.min.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/jquery.autocomplete.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/jquery.form.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/jquery.input.counter.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/jquery.maskedinput-1.3.min.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/jquery.periodpicker.full.min.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/jquery.tablesorter.min.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/jquery.utils.min.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/redactor.js?1764002032"></script>
|
||||
<script src="/admin/assets/js/bootstrap4.utils.js?1764002032"></script>
|
||||
|
||||
@ -97,18 +97,19 @@ foreach ($docs as $d) {
|
||||
$post = db_escape_string($d['post_name']);
|
||||
$spec = db_escape_string($d['speciality_name']);
|
||||
$office = db_escape_string($d['office']);
|
||||
|
||||
// zone_id = внешний ID участка
|
||||
$zoneId = (int)$d['orgStructure_id'];
|
||||
|
||||
// Получаем JSON расписания
|
||||
$scheduleJson = db_escape_string(getDoctorSchedule($src, $id));
|
||||
|
||||
echo "[TMP DOC] INSERT id={$id}, name={$name}\n";
|
||||
|
||||
if (!$DRY_RUN) {
|
||||
$dst->q("
|
||||
INSERT INTO pnd_doctors_tmp
|
||||
(id, name, post_name, speciality_name, office, zone_id)
|
||||
(id, name, post_name, speciality_name, office, zone_id, schedule)
|
||||
VALUES (
|
||||
{$id}, '{$name}', '{$post}', '{$spec}', '{$office}', {$zoneId}
|
||||
{$id}, '{$name}', '{$post}', '{$spec}', '{$office}', {$zoneId}, '{$scheduleJson}'
|
||||
)
|
||||
");
|
||||
}
|
||||
@ -144,4 +145,74 @@ function replaceTables($dst, $DRY_RUN)
|
||||
replaceTables($dst, $DRY_RUN);
|
||||
|
||||
|
||||
function getDoctorSchedule($src, $doctorId) {
|
||||
|
||||
// Генерируем диапазон дат: -3 дня назад и +4 вперёд
|
||||
$startDate = date('Y-m-d', strtotime('-3 days'));
|
||||
$endDate = date('Y-m-d', strtotime('+4 days'));
|
||||
|
||||
$sql = "
|
||||
SELECT
|
||||
DATE(e.execDate) AS day,
|
||||
MIN(apt.value) AS work_start,
|
||||
ADDTIME(MAX(apt.value), '00:20:00') AS work_end
|
||||
FROM Event e
|
||||
JOIN Action a ON e.id = a.event_id
|
||||
JOIN ActionType at ON a.actionType_id = at.id
|
||||
JOIN ActionPropertyType apT1
|
||||
ON a.actionType_id = apT1.actionType_id AND apT1.name LIKE '%times%'
|
||||
JOIN ActionProperty ap1
|
||||
ON a.id = ap1.action_id AND ap1.type_id = apT1.id
|
||||
JOIN ActionProperty_Time apt ON ap1.id = apt.id
|
||||
WHERE e.deleted = 0
|
||||
AND a.deleted = 0
|
||||
AND ap1.deleted = 0
|
||||
AND at.code = 'amb'
|
||||
AND e.eventType_id = 5
|
||||
AND e.execPerson_id = {$doctorId}
|
||||
AND DATE(e.execDate) BETWEEN '{$startDate}' AND '{$endDate}'
|
||||
GROUP BY DATE(e.execDate)
|
||||
";
|
||||
|
||||
$rows = $src->q($sql)->fetchAll();
|
||||
|
||||
// Подготовка недели: day1..day7 = Пн..Вс
|
||||
$week = [
|
||||
1 => 'day1',
|
||||
2 => 'day2',
|
||||
3 => 'day3',
|
||||
4 => 'day4',
|
||||
5 => 'day5',
|
||||
6 => 'day6',
|
||||
7 => 'day7',
|
||||
];
|
||||
|
||||
// Заполняем пустыми днями
|
||||
$result = [
|
||||
'day1' => null,
|
||||
'day2' => null,
|
||||
'day3' => null,
|
||||
'day4' => null,
|
||||
'day5' => null,
|
||||
'day6' => null,
|
||||
'day7' => null,
|
||||
];
|
||||
|
||||
foreach ($rows as $r) {
|
||||
|
||||
// 1 – воскресенье, нам нужно 1=Пн → 7=Вс
|
||||
$dayNum = date('N', strtotime($r['day']));
|
||||
|
||||
$key = $week[$dayNum];
|
||||
|
||||
$result[$key] = [
|
||||
'start' => $r['work_start'] ?: null,
|
||||
'end' => $r['work_end'] ?: null,
|
||||
];
|
||||
}
|
||||
|
||||
return json_encode($result, JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
|
||||
echo "\n--- DONE (DRY_RUN = " . ($DRY_RUN ? "YES" : "NO") . ") ---\n";
|
||||
|
||||
1
app/engine/migrations/20251124-1850-admin-cats.sql
Normal file
1
app/engine/migrations/20251124-1850-admin-cats.sql
Normal file
@ -0,0 +1 @@
|
||||
INSERT INTO `_sys_cat_admin` (`access_group`, `cat_id`, `cat_name`, `data`, `module`, `parent_cat`) VALUES ( "1,2", "core-edit-doctors", "Доктора", "$obj_name=pnd_doctors;", "object_admin.php", "index");
|
||||
4
app/engine/migrations/20251124-1910-pnd_doctors.sql
Normal file
4
app/engine/migrations/20251124-1910-pnd_doctors.sql
Normal file
@ -0,0 +1,4 @@
|
||||
-- [2025-11-24 19:10:57] Создание атрибута;
|
||||
CREATE TABLE IF NOT EXISTS `pnd_doctors` ( `id` INT(12) NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE = InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||
ALTER TABLE `pnd_doctors` ADD `resp` text NOT NULL;
|
||||
REPLACE INTO `_sys_datatypes` (`obj_name`, `attr_name`,`attr_type`,`attr_desc`,`attr_templ`,`attr_order`) VALUES ("pnd_doctors","resp","json","","","100");
|
||||
11
app/engine/migrations/20251124-1911-pnd_doctors.sql
Normal file
11
app/engine/migrations/20251124-1911-pnd_doctors.sql
Normal file
@ -0,0 +1,11 @@
|
||||
-- [2025-11-24 19:11:00] Удаление атрибута resp;
|
||||
DELETE FROM `_sys_datatypes` WHERE `obj_name` = 'pnd_doctors' AND `attr_name` = 'resp';
|
||||
ALTER TABLE `pnd_doctors` DROP `resp`;
|
||||
-- [2025-11-24 19:11:08] Создание атрибута;
|
||||
CREATE TABLE IF NOT EXISTS `pnd_doctors` ( `id` INT(12) NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE = InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||
ALTER TABLE `pnd_doctors` ADD `schedule` text NOT NULL;
|
||||
REPLACE INTO `_sys_datatypes` (`obj_name`, `attr_name`,`attr_type`,`attr_desc`,`attr_templ`,`attr_order`) VALUES ("pnd_doctors","schedule","json","","","100");
|
||||
-- [2025-11-24 19:11:13] Изменение атрибута schedule;
|
||||
REPLACE INTO `_sys_datatypes` (`attr_type`, `attr_templ`, `attr_desc`, `attr_hide`, `attr_mand`, `attr_order`, `_sys_deleted`, `obj_name`, `attr_name`) VALUES ("json" , "" , "" , "0" , "0" , "200" , "0" , "pnd_doctors" , "schedule");
|
||||
-- [2025-11-24 19:11:20] Изменение атрибута schedule;
|
||||
REPLACE INTO `_sys_datatypes` (`attr_type`, `attr_templ`, `attr_desc`, `attr_hide`, `attr_mand`, `attr_order`, `_sys_deleted`, `obj_name`, `attr_name`) VALUES ("json" , "" , "График работы" , "0" , "0" , "200" , "0" , "pnd_doctors" , "schedule");
|
||||
@ -3,37 +3,87 @@
|
||||
<h2 class="font-weight-bold"><?php echo \htmlentities($zone_name, ENT_QUOTES, 'UTF-8', false); ?></h2>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$today = date('N'); // 1..7
|
||||
?>
|
||||
|
||||
<?php $__currentLoopData = $doctors; $this->addLoop($__currentLoopData);$this->getFirstLoop();
|
||||
foreach($__currentLoopData as $doc): $loop = $this->incrementLoopIndices(); ?>
|
||||
<div class="card mb-4 shadow-sm" style="border-radius:14px;">
|
||||
<div class="card mb-4 shadow-sm" style="border-radius:18px;">
|
||||
<div class="card-body">
|
||||
|
||||
<h4 class="mb-3">
|
||||
<?php echo \htmlentities($doc['post_name'] ?: 'Врач', ENT_QUOTES, 'UTF-8', false); ?>
|
||||
|
||||
</h4>
|
||||
|
||||
<div class="d-flex align-items-start mb-3">
|
||||
<div class="mr-3" style="font-size:52px;line-height:52px;">
|
||||
<i class="fas fa-user-md text-primary"></i>
|
||||
</div>
|
||||
|
||||
<?php /* Левая колонка с аватаром-вставкой по дизайну */ ?>
|
||||
<div style="font-size:20px;">
|
||||
<strong><?php echo \htmlentities($doc['name'], ENT_QUOTES, 'UTF-8', false); ?></strong><br>
|
||||
|
||||
<?php if(!empty($doc['speciality_name'])): ?>
|
||||
<?php echo \htmlentities($doc['speciality_name'], ENT_QUOTES, 'UTF-8', false); ?><br>
|
||||
<div class="mt-1">
|
||||
<i class="fas fa-stethoscope text-secondary mr-1"></i>
|
||||
<?php echo \htmlentities($doc['post_name'] ?: 'Врач', ENT_QUOTES, 'UTF-8', false); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if(!empty($doc['office'])): ?>
|
||||
Кабинет: <strong><?php echo \htmlentities($doc['office'], ENT_QUOTES, 'UTF-8', false); ?></strong><br>
|
||||
<div class="mt-1">
|
||||
<i class="fas fa-door-closed text-secondary mr-1"></i>
|
||||
Кабинет: <strong><?php echo \htmlentities($doc['office'], ENT_QUOTES, 'UTF-8', false); ?></strong>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="mt-4 mb-3">Расписание приема</h5>
|
||||
<?php
|
||||
$daysMap = [
|
||||
'day1' => 'Понедельник',
|
||||
'day2' => 'Вторник',
|
||||
'day3' => 'Среда',
|
||||
'day4' => 'Четверг',
|
||||
'day5' => 'Пятница',
|
||||
'day6' => 'Суббота',
|
||||
'day7' => 'Воскресенье',
|
||||
];
|
||||
|
||||
$schedule = json_decode($doc['schedule'] ?? '', true);
|
||||
?>
|
||||
|
||||
<hr class="mt-3 mb-3" style="border-color:#e5e5e5;">
|
||||
|
||||
<h5 class="mb-3">Расписание приёма</h5>
|
||||
|
||||
<?php if(empty($schedule)): ?>
|
||||
<div class="text-muted">Расписание не указано</div>
|
||||
<?php else: ?>
|
||||
<ul class="list-unstyled mb-0">
|
||||
|
||||
<?php $__currentLoopData = $daysMap; $this->addLoop($__currentLoopData);$this->getFirstLoop();
|
||||
foreach($__currentLoopData as $dayKey => $dayTitle): $loop = $this->incrementLoopIndices(); ?>
|
||||
<?php
|
||||
$slot = $schedule[$dayKey] ?? null;
|
||||
?>
|
||||
|
||||
<li class="d-flex justify-content-between py-2 border-bottom"
|
||||
style="font-size:17px;">
|
||||
|
||||
<span><?php echo \htmlentities($dayTitle, ENT_QUOTES, 'UTF-8', false); ?></span>
|
||||
|
||||
<?php if($slot && !empty($slot['start']) && !empty($slot['end'])): ?>
|
||||
<span class="text-dark font-weight-bold">
|
||||
<?php echo \htmlentities(substr($slot['start'], 0, 5), ENT_QUOTES, 'UTF-8', false); ?> — <?php echo \htmlentities(substr($slot['end'], 0, 5), ENT_QUOTES, 'UTF-8', false); ?>
|
||||
|
||||
</span>
|
||||
<?php else: ?>
|
||||
<span class="text-muted font-italic">Нет приёма</span>
|
||||
<?php endif; ?>
|
||||
|
||||
</li>
|
||||
<?php endforeach; $this->popLoop(); $loop = $this->getFirstLoop(); ?>
|
||||
|
||||
</ul>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; $this->popLoop(); $loop = $this->getFirstLoop(); ?>
|
||||
|
||||
|
||||
@ -48,10 +48,10 @@
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<?php /* Модальное окно результата */ ?>
|
||||
<div id="result-modal"
|
||||
class="modal fade"
|
||||
@ -60,7 +60,10 @@
|
||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||
<div class="modal-content shadow-lg" style="border-radius:20px;">
|
||||
<div class="modal-body" id="modal-content-area" style="font-size:20px;"></div>
|
||||
<div class="modal-footer text-center">
|
||||
<div class="modal-footer text-center justify-content-between">
|
||||
<button class="btn btn-secondary btn-lg px-5" onclick="printModal()">
|
||||
<i class="fas fa-print mr-2"></i> Распечатать
|
||||
</button>
|
||||
<button class="btn btn-primary btn-lg px-5" data-dismiss="modal">
|
||||
Закрыть
|
||||
</button>
|
||||
@ -353,3 +356,32 @@
|
||||
font-size: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<script>
|
||||
function printModal() {
|
||||
let modalBody = document.querySelector("#modal-content-area");
|
||||
|
||||
if (!modalBody) return;
|
||||
|
||||
// Сохраняем оригинальный DOM
|
||||
let originalContent = document.body.innerHTML;
|
||||
|
||||
// Подменяем HTML на печатный
|
||||
document.body.innerHTML =
|
||||
'<div style="padding:20px;">' +
|
||||
modalBody.innerHTML +
|
||||
'</div>';
|
||||
|
||||
|
||||
window.print();
|
||||
|
||||
// Возвращаем оригинальный DOM
|
||||
document.body.innerHTML = originalContent;
|
||||
|
||||
// Восстанавливаем JS-обработчики (нужно переинициализировать Bootstrap)
|
||||
setTimeout(function () {
|
||||
location.reload(); // лёгкий способ всё вернуть без побочных эффектов
|
||||
}, 200);
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -3,35 +3,83 @@
|
||||
<h2 class="font-weight-bold">{{$zone_name}}</h2>
|
||||
</div>
|
||||
|
||||
@php
|
||||
$today = date('N'); // 1..7
|
||||
@endphp
|
||||
|
||||
@foreach($doctors as $doc)
|
||||
<div class="card mb-4 shadow-sm" style="border-radius:14px;">
|
||||
<div class="card mb-4 shadow-sm" style="border-radius:18px;">
|
||||
<div class="card-body">
|
||||
|
||||
<h4 class="mb-3">
|
||||
{{$doc['post_name'] ?: 'Врач'}}
|
||||
</h4>
|
||||
|
||||
<div class="d-flex align-items-start mb-3">
|
||||
<div class="mr-3" style="font-size:52px;line-height:52px;">
|
||||
<i class="fas fa-user-md text-primary"></i>
|
||||
</div>
|
||||
|
||||
{{-- Левая колонка с аватаром-вставкой по дизайну --}}
|
||||
<div style="font-size:20px;">
|
||||
<strong>{{$doc['name']}}</strong><br>
|
||||
|
||||
@if(!empty($doc['speciality_name']))
|
||||
{{$doc['speciality_name']}}<br>
|
||||
<div class="mt-1">
|
||||
<i class="fas fa-stethoscope text-secondary mr-1"></i>
|
||||
{{$doc['post_name'] ?: 'Врач'}}
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if(!empty($doc['office']))
|
||||
Кабинет: <strong>{{$doc['office']}}</strong><br>
|
||||
<div class="mt-1">
|
||||
<i class="fas fa-door-closed text-secondary mr-1"></i>
|
||||
Кабинет: <strong>{{$doc['office']}}</strong>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="mt-4 mb-3">Расписание приема</h5>
|
||||
@php
|
||||
$daysMap = [
|
||||
'day1' => 'Понедельник',
|
||||
'day2' => 'Вторник',
|
||||
'day3' => 'Среда',
|
||||
'day4' => 'Четверг',
|
||||
'day5' => 'Пятница',
|
||||
'day6' => 'Суббота',
|
||||
'day7' => 'Воскресенье',
|
||||
];
|
||||
|
||||
$schedule = json_decode($doc['schedule'] ?? '', true);
|
||||
@endphp
|
||||
|
||||
<hr class="mt-3 mb-3" style="border-color:#e5e5e5;">
|
||||
|
||||
<h5 class="mb-3">Расписание приёма</h5>
|
||||
|
||||
@if(empty($schedule))
|
||||
<div class="text-muted">Расписание не указано</div>
|
||||
@else
|
||||
<ul class="list-unstyled mb-0">
|
||||
|
||||
@foreach($daysMap as $dayKey => $dayTitle)
|
||||
@php
|
||||
$slot = $schedule[$dayKey] ?? null;
|
||||
@endphp
|
||||
|
||||
<li class="d-flex justify-content-between py-2 border-bottom"
|
||||
style="font-size:17px;">
|
||||
|
||||
<span>{{ $dayTitle }}</span>
|
||||
|
||||
@if($slot && !empty($slot['start']) && !empty($slot['end']))
|
||||
<span class="text-dark font-weight-bold">
|
||||
{{ substr($slot['start'], 0, 5) }} — {{ substr($slot['end'], 0, 5) }}
|
||||
</span>
|
||||
@else
|
||||
<span class="text-muted font-italic">Нет приёма</span>
|
||||
@endif
|
||||
|
||||
</li>
|
||||
@endforeach
|
||||
|
||||
</ul>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
|
||||
@ -48,10 +48,10 @@
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{{-- Модальное окно результата --}}
|
||||
<div id="result-modal"
|
||||
class="modal fade"
|
||||
@ -60,7 +60,10 @@
|
||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||
<div class="modal-content shadow-lg" style="border-radius:20px;">
|
||||
<div class="modal-body" id="modal-content-area" style="font-size:20px;"></div>
|
||||
<div class="modal-footer text-center">
|
||||
<div class="modal-footer text-center justify-content-between">
|
||||
<button class="btn btn-secondary btn-lg px-5" onclick="printModal()">
|
||||
<i class="fas fa-print mr-2"></i> Распечатать
|
||||
</button>
|
||||
<button class="btn btn-primary btn-lg px-5" data-dismiss="modal">
|
||||
Закрыть
|
||||
</button>
|
||||
@ -352,3 +355,32 @@
|
||||
font-size: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<script>
|
||||
function printModal() {
|
||||
let modalBody = document.querySelector("#modal-content-area");
|
||||
|
||||
if (!modalBody) return;
|
||||
|
||||
// Сохраняем оригинальный DOM
|
||||
let originalContent = document.body.innerHTML;
|
||||
|
||||
// Подменяем HTML на печатный
|
||||
document.body.innerHTML =
|
||||
'<div style="padding:20px;">' +
|
||||
modalBody.innerHTML +
|
||||
'</div>';
|
||||
|
||||
|
||||
window.print();
|
||||
|
||||
// Возвращаем оригинальный DOM
|
||||
document.body.innerHTML = originalContent;
|
||||
|
||||
// Восстанавливаем JS-обработчики (нужно переинициализировать Bootstrap)
|
||||
setTimeout(function () {
|
||||
location.reload(); // лёгкий способ всё вернуть без побочных эффектов
|
||||
}, 200);
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -1,16 +1,15 @@
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/custom.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/custom_xxs.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/custom_sm.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/custom_md.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/custom_lg.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/custom_xl.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/custom_xxl.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/animate.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/jquery.fancybox.min.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/jquery.scrollbar.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/slick.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/slick-theme.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/slide-menu.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/fonts_full.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/mmenu.css?1728913930">
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/custom.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/custom_xxs.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/custom_sm.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/custom_md.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/custom_lg.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/custom_xl.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/custom_xxl.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/animate.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/jquery.fancybox.min.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/jquery.scrollbar.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/slick.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/slick-theme.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/slide-menu.css?1764002031">
|
||||
<link rel="stylesheet" href="assets/css/fonts_full.css?1764002031">
|
||||
|
||||
@ -1,12 +1,11 @@
|
||||
<script src="assets/js/jquery-3.4.1.min.js?1728913930"></script>
|
||||
<script src="assets/js/bootstrap.bundle.min.js?1728913930"></script>
|
||||
<script src="assets/js/slick.js?1728913930"></script>
|
||||
<script src="assets/js/jquery.fancybox.min.js?1728913930"></script>
|
||||
<script src="assets/js/slide-menu.js?1728913930"></script>
|
||||
<script src="assets/js/lazy.js?1728913930"></script>
|
||||
<script src="assets/js/autocomplete.js?1728913930"></script>
|
||||
<script src="assets/js/jquery.scrollbar.min.js?1728913930"></script>
|
||||
<script src="assets/js/jquery.mask.js?1728913930"></script>
|
||||
<script src="assets/js/jquery.ajaxform.js?1728913930"></script>
|
||||
<script src="assets/js/core-engine.js?1728913930"></script>
|
||||
<script src="assets/js/mmenu/mmenu.js?1728913930"></script>
|
||||
<script src="assets/js/jquery-3.4.1.min.js?1764002031"></script>
|
||||
<script src="assets/js/bootstrap.bundle.min.js?1764002031"></script>
|
||||
<script src="assets/js/slick.js?1764002031"></script>
|
||||
<script src="assets/js/jquery.fancybox.min.js?1764002031"></script>
|
||||
<script src="assets/js/slide-menu.js?1764002031"></script>
|
||||
<script src="assets/js/lazy.js?1764002031"></script>
|
||||
<script src="assets/js/autocomplete.js?1764002031"></script>
|
||||
<script src="assets/js/jquery.scrollbar.min.js?1764002031"></script>
|
||||
<script src="assets/js/jquery.mask.js?1764002031"></script>
|
||||
<script src="assets/js/jquery.ajaxform.js?1764002031"></script>
|
||||
<script src="assets/js/core-engine.js?1764002031"></script>
|
||||
|
||||
@ -38,7 +38,6 @@ $css_files = [
|
||||
'slick-theme.css',
|
||||
'slide-menu.css',
|
||||
'fonts_full.css',
|
||||
'mmenu.css'
|
||||
];
|
||||
|
||||
$js_files = [
|
||||
@ -53,7 +52,6 @@ $js_files = [
|
||||
'jquery.mask.js',
|
||||
'jquery.ajaxform.js',
|
||||
'core-engine.js',
|
||||
'mmenu/mmenu.js'
|
||||
];
|
||||
|
||||
|
||||
|
||||
@ -66,7 +66,7 @@ services:
|
||||
- app_network
|
||||
|
||||
mariadb:
|
||||
image: mariadb:10.6
|
||||
image: mariadb:10.5
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user