[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/bootstrap.css?1764002032">
|
||||||
<link rel="stylesheet" href="/admin/assets/css/chosen.min.css?1728913930">
|
<link rel="stylesheet" href="/admin/assets/css/chosen.min.css?1764002032">
|
||||||
<link rel="stylesheet" href="/admin/assets/css/fonts_full.css?1728913930">
|
<link rel="stylesheet" href="/admin/assets/css/fonts_full.css?1764002032">
|
||||||
<link rel="stylesheet" href="/admin/assets/css/jquery-ui.css?1728913930">
|
<link rel="stylesheet" href="/admin/assets/css/jquery-ui.css?1764002032">
|
||||||
<link rel="stylesheet" href="/admin/assets/css/jquery-ui.structure.min.css?1728913930">
|
<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?1728913930">
|
<link rel="stylesheet" href="/admin/assets/css/jquery-ui.theme.min.css?1764002032">
|
||||||
<link rel="stylesheet" href="/admin/assets/css/jquery.autocomplete.css?1728913930">
|
<link rel="stylesheet" href="/admin/assets/css/jquery.autocomplete.css?1764002032">
|
||||||
<link rel="stylesheet" href="/admin/assets/css/jquery.fancybox.min.css?1728913930">
|
<link rel="stylesheet" href="/admin/assets/css/jquery.fancybox.min.css?1764002032">
|
||||||
<link rel="stylesheet" href="/admin/assets/css/jquery.periodpicker.min.css?1728913930">
|
<link rel="stylesheet" href="/admin/assets/css/jquery.periodpicker.min.css?1764002032">
|
||||||
<link rel="stylesheet" href="/admin/assets/css/redactor.css?1728913930">
|
<link rel="stylesheet" href="/admin/assets/css/redactor.css?1764002032">
|
||||||
<link rel="stylesheet" href="/admin/assets/css/custom.css?1728913930">
|
<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/jquery.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/bootstrap4.min.js?1728913930"></script>
|
<script src="/admin/assets/js/bootstrap4.min.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/chosen.jquery.min.js?1728913930"></script>
|
<script src="/admin/assets/js/chosen.jquery.min.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/clipboard.min.js?1728913930"></script>
|
<script src="/admin/assets/js/clipboard.min.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/jquery.fancybox.min.js?1728913930"></script>
|
<script src="/admin/assets/js/jquery.fancybox.min.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/jquery-ui.min.js?1728913930"></script>
|
<script src="/admin/assets/js/jquery-ui.min.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/jquery.autocomplete.js?1728913930"></script>
|
<script src="/admin/assets/js/jquery.autocomplete.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/jquery.form.js?1728913930"></script>
|
<script src="/admin/assets/js/jquery.form.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/jquery.input.counter.js?1728913930"></script>
|
<script src="/admin/assets/js/jquery.input.counter.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/jquery.maskedinput-1.3.min.js?1728913930"></script>
|
<script src="/admin/assets/js/jquery.maskedinput-1.3.min.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/jquery.periodpicker.full.min.js?1728913930"></script>
|
<script src="/admin/assets/js/jquery.periodpicker.full.min.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/jquery.tablesorter.min.js?1728913930"></script>
|
<script src="/admin/assets/js/jquery.tablesorter.min.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/jquery.utils.min.js?1728913930"></script>
|
<script src="/admin/assets/js/jquery.utils.min.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/redactor.js?1728913930"></script>
|
<script src="/admin/assets/js/redactor.js?1764002032"></script>
|
||||||
<script src="/admin/assets/js/bootstrap4.utils.js?1728913930"></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']);
|
$post = db_escape_string($d['post_name']);
|
||||||
$spec = db_escape_string($d['speciality_name']);
|
$spec = db_escape_string($d['speciality_name']);
|
||||||
$office = db_escape_string($d['office']);
|
$office = db_escape_string($d['office']);
|
||||||
|
$zoneId = (int)$d['orgStructure_id'];
|
||||||
|
|
||||||
// zone_id = внешний ID участка
|
// Получаем JSON расписания
|
||||||
$zoneId = (int)$d['orgStructure_id'];
|
$scheduleJson = db_escape_string(getDoctorSchedule($src, $id));
|
||||||
|
|
||||||
echo "[TMP DOC] INSERT id={$id}, name={$name}\n";
|
echo "[TMP DOC] INSERT id={$id}, name={$name}\n";
|
||||||
|
|
||||||
if (!$DRY_RUN) {
|
if (!$DRY_RUN) {
|
||||||
$dst->q("
|
$dst->q("
|
||||||
INSERT INTO pnd_doctors_tmp
|
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 (
|
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);
|
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";
|
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>
|
<h2 class="font-weight-bold"><?php echo \htmlentities($zone_name, ENT_QUOTES, 'UTF-8', false); ?></h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$today = date('N'); // 1..7
|
||||||
|
?>
|
||||||
|
|
||||||
<?php $__currentLoopData = $doctors; $this->addLoop($__currentLoopData);$this->getFirstLoop();
|
<?php $__currentLoopData = $doctors; $this->addLoop($__currentLoopData);$this->getFirstLoop();
|
||||||
foreach($__currentLoopData as $doc): $loop = $this->incrementLoopIndices(); ?>
|
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">
|
<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="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;">
|
<div style="font-size:20px;">
|
||||||
<strong><?php echo \htmlentities($doc['name'], ENT_QUOTES, 'UTF-8', false); ?></strong><br>
|
<strong><?php echo \htmlentities($doc['name'], ENT_QUOTES, 'UTF-8', false); ?></strong><br>
|
||||||
|
|
||||||
<?php if(!empty($doc['speciality_name'])): ?>
|
<?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 endif; ?>
|
||||||
|
|
||||||
<?php if(!empty($doc['office'])): ?>
|
<?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; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
<?php endforeach; $this->popLoop(); $loop = $this->getFirstLoop(); ?>
|
<?php endforeach; $this->popLoop(); $loop = $this->getFirstLoop(); ?>
|
||||||
|
|
||||||
|
|||||||
@ -48,10 +48,10 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<?php /* Модальное окно результата */ ?>
|
<?php /* Модальное окно результата */ ?>
|
||||||
<div id="result-modal"
|
<div id="result-modal"
|
||||||
class="modal fade"
|
class="modal fade"
|
||||||
@ -60,7 +60,10 @@
|
|||||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||||
<div class="modal-content shadow-lg" style="border-radius:20px;">
|
<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-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 class="btn btn-primary btn-lg px-5" data-dismiss="modal">
|
||||||
Закрыть
|
Закрыть
|
||||||
</button>
|
</button>
|
||||||
@ -353,3 +356,32 @@
|
|||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
}
|
}
|
||||||
</style>
|
</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>
|
<h2 class="font-weight-bold">{{$zone_name}}</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@php
|
||||||
|
$today = date('N'); // 1..7
|
||||||
|
@endphp
|
||||||
|
|
||||||
@foreach($doctors as $doc)
|
@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">
|
<div class="card-body">
|
||||||
|
|
||||||
<h4 class="mb-3">
|
|
||||||
{{$doc['post_name'] ?: 'Врач'}}
|
|
||||||
</h4>
|
|
||||||
|
|
||||||
<div class="d-flex align-items-start mb-3">
|
<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;">
|
<div style="font-size:20px;">
|
||||||
<strong>{{$doc['name']}}</strong><br>
|
<strong>{{$doc['name']}}</strong><br>
|
||||||
|
|
||||||
@if(!empty($doc['speciality_name']))
|
@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
|
@endif
|
||||||
|
|
||||||
@if(!empty($doc['office']))
|
@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
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h5 class="mt-4 mb-3">Расписание приема</h5>
|
@php
|
||||||
<div class="text-muted">Расписание не указано</div>
|
$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>
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|
||||||
|
|||||||
@ -48,10 +48,10 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{{-- Модальное окно результата --}}
|
{{-- Модальное окно результата --}}
|
||||||
<div id="result-modal"
|
<div id="result-modal"
|
||||||
class="modal fade"
|
class="modal fade"
|
||||||
@ -60,7 +60,10 @@
|
|||||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||||
<div class="modal-content shadow-lg" style="border-radius:20px;">
|
<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-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 class="btn btn-primary btn-lg px-5" data-dismiss="modal">
|
||||||
Закрыть
|
Закрыть
|
||||||
</button>
|
</button>
|
||||||
@ -352,3 +355,32 @@
|
|||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
}
|
}
|
||||||
</style>
|
</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/bootstrap.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/custom.css?1728913930">
|
<link rel="stylesheet" href="assets/css/custom.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/custom_xxs.css?1728913930">
|
<link rel="stylesheet" href="assets/css/custom_xxs.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/custom_sm.css?1728913930">
|
<link rel="stylesheet" href="assets/css/custom_sm.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/custom_md.css?1728913930">
|
<link rel="stylesheet" href="assets/css/custom_md.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/custom_lg.css?1728913930">
|
<link rel="stylesheet" href="assets/css/custom_lg.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/custom_xl.css?1728913930">
|
<link rel="stylesheet" href="assets/css/custom_xl.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/custom_xxl.css?1728913930">
|
<link rel="stylesheet" href="assets/css/custom_xxl.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/animate.css?1728913930">
|
<link rel="stylesheet" href="assets/css/animate.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/jquery.fancybox.min.css?1728913930">
|
<link rel="stylesheet" href="assets/css/jquery.fancybox.min.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/jquery.scrollbar.css?1728913930">
|
<link rel="stylesheet" href="assets/css/jquery.scrollbar.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/slick.css?1728913930">
|
<link rel="stylesheet" href="assets/css/slick.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/slick-theme.css?1728913930">
|
<link rel="stylesheet" href="assets/css/slick-theme.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/slide-menu.css?1728913930">
|
<link rel="stylesheet" href="assets/css/slide-menu.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/fonts_full.css?1728913930">
|
<link rel="stylesheet" href="assets/css/fonts_full.css?1764002031">
|
||||||
<link rel="stylesheet" href="assets/css/mmenu.css?1728913930">
|
|
||||||
|
|||||||
@ -1,12 +1,11 @@
|
|||||||
<script src="assets/js/jquery-3.4.1.min.js?1728913930"></script>
|
<script src="assets/js/jquery-3.4.1.min.js?1764002031"></script>
|
||||||
<script src="assets/js/bootstrap.bundle.min.js?1728913930"></script>
|
<script src="assets/js/bootstrap.bundle.min.js?1764002031"></script>
|
||||||
<script src="assets/js/slick.js?1728913930"></script>
|
<script src="assets/js/slick.js?1764002031"></script>
|
||||||
<script src="assets/js/jquery.fancybox.min.js?1728913930"></script>
|
<script src="assets/js/jquery.fancybox.min.js?1764002031"></script>
|
||||||
<script src="assets/js/slide-menu.js?1728913930"></script>
|
<script src="assets/js/slide-menu.js?1764002031"></script>
|
||||||
<script src="assets/js/lazy.js?1728913930"></script>
|
<script src="assets/js/lazy.js?1764002031"></script>
|
||||||
<script src="assets/js/autocomplete.js?1728913930"></script>
|
<script src="assets/js/autocomplete.js?1764002031"></script>
|
||||||
<script src="assets/js/jquery.scrollbar.min.js?1728913930"></script>
|
<script src="assets/js/jquery.scrollbar.min.js?1764002031"></script>
|
||||||
<script src="assets/js/jquery.mask.js?1728913930"></script>
|
<script src="assets/js/jquery.mask.js?1764002031"></script>
|
||||||
<script src="assets/js/jquery.ajaxform.js?1728913930"></script>
|
<script src="assets/js/jquery.ajaxform.js?1764002031"></script>
|
||||||
<script src="assets/js/core-engine.js?1728913930"></script>
|
<script src="assets/js/core-engine.js?1764002031"></script>
|
||||||
<script src="assets/js/mmenu/mmenu.js?1728913930"></script>
|
|
||||||
|
|||||||
@ -38,7 +38,6 @@ $css_files = [
|
|||||||
'slick-theme.css',
|
'slick-theme.css',
|
||||||
'slide-menu.css',
|
'slide-menu.css',
|
||||||
'fonts_full.css',
|
'fonts_full.css',
|
||||||
'mmenu.css'
|
|
||||||
];
|
];
|
||||||
|
|
||||||
$js_files = [
|
$js_files = [
|
||||||
@ -53,7 +52,6 @@ $js_files = [
|
|||||||
'jquery.mask.js',
|
'jquery.mask.js',
|
||||||
'jquery.ajaxform.js',
|
'jquery.ajaxform.js',
|
||||||
'core-engine.js',
|
'core-engine.js',
|
||||||
'mmenu/mmenu.js'
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -66,7 +66,7 @@ services:
|
|||||||
- app_network
|
- app_network
|
||||||
|
|
||||||
mariadb:
|
mariadb:
|
||||||
image: mariadb:10.6
|
image: mariadb:10.5
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user