[add] главный экран
This commit is contained in:
parent
70e6f304bb
commit
6a1a0e001c
3
app/engine/cron/data_sync/run.sh
Normal file
3
app/engine/cron/data_sync/run.sh
Normal file
@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/html/engine/cron/data_sync || exit 1
|
||||
php sync_doctors_and_zones.php
|
||||
@ -10,6 +10,7 @@ $DRY_RUN = false; // ← поставить true для тестового за
|
||||
|
||||
// Источник (старая МИС)
|
||||
$src = new db();
|
||||
// $src->connect("192.168.111.234", "dbuser", "dbpassword", "pnd8");
|
||||
$src->connect("192.168.0.2", "root", "Xx29Pz33", "pnd8");
|
||||
|
||||
// Приёмник (новая база)
|
||||
@ -145,11 +146,11 @@ 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'));
|
||||
function getDoctorSchedule($src, $doctorId)
|
||||
{
|
||||
// диапазон на 10 дней включая сегодня
|
||||
$startDate = date('Y-m-d');
|
||||
$endDate = date('Y-m-d', strtotime('+9 days'));
|
||||
|
||||
$sql = "
|
||||
SELECT
|
||||
@ -174,45 +175,34 @@ function getDoctorSchedule($src, $doctorId) {
|
||||
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,
|
||||
];
|
||||
$result = [];
|
||||
|
||||
// 1. Сначала добавляем ВСЕ даты из SQL
|
||||
foreach ($rows as $r) {
|
||||
$day = trim($r['day']); // защита от пробелов
|
||||
|
||||
// 1 – воскресенье, нам нужно 1=Пн → 7=Вс
|
||||
$dayNum = date('N', strtotime($r['day']));
|
||||
|
||||
$key = $week[$dayNum];
|
||||
|
||||
$result[$key] = [
|
||||
$result[$day] = [
|
||||
'start' => $r['work_start'] ?: null,
|
||||
'end' => $r['work_end'] ?: null,
|
||||
];
|
||||
}
|
||||
|
||||
// 2. Потом добавляем пустые даты вперёд на 10 дней
|
||||
for ($i = 0; $i < 10; $i++) {
|
||||
$date = date('Y-m-d', strtotime("+{$i} days"));
|
||||
if (!array_key_exists($date, $result)) {
|
||||
$result[$date] = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return json_encode($result, JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
echo "\n--- DONE (DRY_RUN = " . ($DRY_RUN ? "YES" : "NO") . ") ---\n";
|
||||
|
||||
2
app/engine/migrations/20251126-1827-user-cats.sql
Normal file
2
app/engine/migrations/20251126-1827-user-cats.sql
Normal file
@ -0,0 +1,2 @@
|
||||
UPDATE `_sys_cat` SET `_sys_cat`.`module` = "site_screensaver.php" , `_sys_cat`.`data` = "" WHERE `_sys_cat`.`cat_id` = "index";
|
||||
UPDATE `_sys_cat` SET `_sys_cat`.`xml` = "index.xml" WHERE `_sys_cat`.`cat_id` = "--btns-";
|
||||
4
app/engine/migrations/20251126-1828-user-cats.sql
Normal file
4
app/engine/migrations/20251126-1828-user-cats.sql
Normal file
@ -0,0 +1,4 @@
|
||||
UPDATE `_sys_cat` SET `_sys_cat`.`xml` = "empty.xml" WHERE `_sys_cat`.`cat_id` = "index";
|
||||
UPDATE `_sys_cat` SET `_sys_cat`.`_sys_deleted` = "1" WHERE `_sys_cat`.`cat_id` = "core-menuconfig";
|
||||
UPDATE `_sys_cat` SET `_sys_cat`.`_sys_deleted` = "1" WHERE `_sys_cat`.`cat_id` = "-no-auth-links-";
|
||||
;
|
||||
@ -3,8 +3,8 @@
|
||||
</div>
|
||||
<div class="card-body text-center">
|
||||
<p class="mb-3">
|
||||
Не удалось определить участок. <br>
|
||||
Попробуйте ввести другой адрес.
|
||||
Попробуйте ввести другой адрес <br>
|
||||
или обратитесь в регистратуру
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
83
app/engine/www/bladetpl/cache/c2b731d85314321923ccc7e45f1793abe0d5773e.bladec
vendored
Normal file
83
app/engine/www/bladetpl/cache/c2b731d85314321923ccc7e45f1793abe0d5773e.bladec
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
<style>
|
||||
html, body { height:100%; }
|
||||
|
||||
/* Плавное появление контента */
|
||||
.fade-in {
|
||||
opacity: 0;
|
||||
animation: fadeIn 1s ease-in-out forwards;
|
||||
animation-delay: .4s;
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
to { opacity: 1; }
|
||||
}
|
||||
|
||||
/* Прелоадер */
|
||||
#loader {
|
||||
position: fixed;
|
||||
left: 0; top: 0;
|
||||
width: 100%; height: 100%;
|
||||
background: #d9e1f2;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.spinner {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
border: 6px solid #fff;
|
||||
border-top-color: #4a6ea9;
|
||||
border-radius: 50%;
|
||||
animation: spin 0.9s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- Прелоадер -->
|
||||
<div id="loader">
|
||||
<div class="spinner"></div>
|
||||
</div>
|
||||
|
||||
<!-- Основной экран -->
|
||||
<a href="?cat=main" style="text-decoration:none; color:inherit;">
|
||||
<div class="d-flex justify-content-center align-items-center fade-in"
|
||||
style="min-height:100vh; background:#d9e1f2; cursor:pointer;">
|
||||
|
||||
<div class="text-center px-3">
|
||||
|
||||
<!-- ЛОГОТИП -->
|
||||
<img src="/assets/img/logo.png" alt="Логотип" style="height:110px;" class="mb-4">
|
||||
|
||||
<!-- НАЗВАНИЕ УЧРЕЖДЕНИЯ -->
|
||||
<div style="font-size:32px; font-weight:700; line-height:1.2; color:#000;">
|
||||
Психоневрологический<br>
|
||||
диспансер №8
|
||||
</div>
|
||||
|
||||
<!-- Заголовок страницы -->
|
||||
<h1 class="mt-4" style="font-size:42px; font-weight:600; color:#000;">
|
||||
Расписание приема врачей<br>и участков
|
||||
</h1>
|
||||
|
||||
<div class="mt-3" style="font-size:20px; color:#333;">
|
||||
(поиск по адресу проживания)
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<script>
|
||||
// Скрываем прелоадер после загрузки страницы
|
||||
window.addEventListener('load', function() {
|
||||
document.getElementById('loader').style.opacity = '0';
|
||||
setTimeout(() => {
|
||||
document.getElementById('loader').style.display = 'none';
|
||||
}, 400);
|
||||
});
|
||||
</script>
|
||||
@ -1,18 +1,14 @@
|
||||
<div class="text-center mb-4">
|
||||
<h2>Ваш участок обслуживания</h2>
|
||||
<h2 class="font-weight-bold">Ваш участок обслуживания</h2>
|
||||
<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:18px;">
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-start mb-3">
|
||||
|
||||
<div class="d-flex align-items-start mb-3">
|
||||
<?php /* Левая колонка с аватаром-вставкой по дизайну */ ?>
|
||||
<div style="font-size:20px;">
|
||||
<strong><?php echo \htmlentities($doc['name'], ENT_QUOTES, 'UTF-8', false); ?></strong><br>
|
||||
@ -35,38 +31,64 @@
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$daysMap = [
|
||||
'day1' => 'Понедельник',
|
||||
'day2' => 'Вторник',
|
||||
'day3' => 'Среда',
|
||||
'day4' => 'Четверг',
|
||||
'day5' => 'Пятница',
|
||||
'day6' => 'Суббота',
|
||||
'day7' => 'Воскресенье',
|
||||
];
|
||||
// JSON формата: "2025-01-20" => {start:"", end:""} или null
|
||||
$schedule = json_decode($doc['schedule'] ?? '{}', true);
|
||||
|
||||
$schedule = json_decode($doc['schedule'] ?? '', true);
|
||||
$todayDate = date('Y-m-d');
|
||||
$filtered = [];
|
||||
|
||||
// Фильтруем только >= сегодня
|
||||
foreach ($schedule as $date => $slot) {
|
||||
if ($date >= $todayDate) {
|
||||
$filtered[$date] = $slot;
|
||||
}
|
||||
}
|
||||
|
||||
// Для отображения дня недели
|
||||
$ruDays = ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'];
|
||||
?>
|
||||
|
||||
<hr class="mt-3 mb-3" style="border-color:#e5e5e5;">
|
||||
|
||||
<h5 class="mb-3">Расписание приёма</h5>
|
||||
<h5 class="mb-3 font-weight-bold">Расписание приёма</h5>
|
||||
|
||||
<?php if(empty($schedule)): ?>
|
||||
<div class="text-muted">Расписание не указано</div>
|
||||
<?php if(empty($filtered)): ?>
|
||||
<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 $__currentLoopData = $filtered; $this->addLoop($__currentLoopData);$this->getFirstLoop();
|
||||
foreach($__currentLoopData as $date => $slot): $loop = $this->incrementLoopIndices(); ?>
|
||||
<?php
|
||||
$slot = $schedule[$dayKey] ?? null;
|
||||
$ts = strtotime($date);
|
||||
$weekday = $ruDays[date('w', $ts)];
|
||||
$months = [
|
||||
1 => 'января',
|
||||
2 => 'февраля',
|
||||
3 => 'марта',
|
||||
4 => 'апреля',
|
||||
5 => 'мая',
|
||||
6 => 'июня',
|
||||
7 => 'июля',
|
||||
8 => 'августа',
|
||||
9 => 'сентября',
|
||||
10 => 'октября',
|
||||
11 => 'ноября',
|
||||
12 => 'декабря',
|
||||
];
|
||||
|
||||
$dayNum = (int)date('j', $ts); // 1–31 (без ведущего нуля)
|
||||
$monthNum = (int)date('n', $ts); // 1–12
|
||||
$monthName = $months[$monthNum];
|
||||
|
||||
$label = "{$dayNum} {$monthName} ({$weekday})";
|
||||
|
||||
?>
|
||||
|
||||
<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>
|
||||
<span class="font-weight-bold"><?php echo \htmlentities($label, ENT_QUOTES, 'UTF-8', false); ?></span>
|
||||
|
||||
<?php if($slot && !empty($slot['start']) && !empty($slot['end'])): ?>
|
||||
<span class="text-dark font-weight-bold">
|
||||
@ -86,4 +108,3 @@
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; $this->popLoop(); $loop = $this->getFirstLoop(); ?>
|
||||
|
||||
|
||||
@ -369,7 +369,7 @@
|
||||
|
||||
// Подменяем HTML на печатный
|
||||
document.body.innerHTML =
|
||||
'<div style="padding:20px;">' +
|
||||
'<div style="width: 10cm; height: 10cm; page-break-after: always; font-weight: bold; font-size: 2em; ">' +
|
||||
modalBody.innerHTML +
|
||||
'</div>';
|
||||
|
||||
|
||||
@ -1,17 +1,13 @@
|
||||
<div class="text-center mb-4">
|
||||
<h2>Ваш участок обслуживания</h2>
|
||||
<h2 class="font-weight-bold">Ваш участок обслуживания</h2>
|
||||
<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:18px;">
|
||||
<div class="card-body">
|
||||
<div class="d-flex align-items-start mb-3">
|
||||
|
||||
<div class="d-flex align-items-start mb-3">
|
||||
{{-- Левая колонка с аватаром-вставкой по дизайну --}}
|
||||
<div style="font-size:20px;">
|
||||
<strong>{{$doc['name']}}</strong><br>
|
||||
@ -33,37 +29,63 @@
|
||||
</div>
|
||||
|
||||
@php
|
||||
$daysMap = [
|
||||
'day1' => 'Понедельник',
|
||||
'day2' => 'Вторник',
|
||||
'day3' => 'Среда',
|
||||
'day4' => 'Четверг',
|
||||
'day5' => 'Пятница',
|
||||
'day6' => 'Суббота',
|
||||
'day7' => 'Воскресенье',
|
||||
];
|
||||
// JSON формата: "2025-01-20" => {start:"", end:""} или null
|
||||
$schedule = json_decode($doc['schedule'] ?? '{}', true);
|
||||
|
||||
$schedule = json_decode($doc['schedule'] ?? '', true);
|
||||
$todayDate = date('Y-m-d');
|
||||
$filtered = [];
|
||||
|
||||
// Фильтруем только >= сегодня
|
||||
foreach ($schedule as $date => $slot) {
|
||||
if ($date >= $todayDate) {
|
||||
$filtered[$date] = $slot;
|
||||
}
|
||||
}
|
||||
|
||||
// Для отображения дня недели
|
||||
$ruDays = ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'];
|
||||
@endphp
|
||||
|
||||
<hr class="mt-3 mb-3" style="border-color:#e5e5e5;">
|
||||
|
||||
<h5 class="mb-3">Расписание приёма</h5>
|
||||
<h5 class="mb-3 font-weight-bold">Расписание приёма</h5>
|
||||
|
||||
@if(empty($schedule))
|
||||
<div class="text-muted">Расписание не указано</div>
|
||||
@if(empty($filtered))
|
||||
<div class="text-muted">Расписание отсутствует</div>
|
||||
@else
|
||||
<ul class="list-unstyled mb-0">
|
||||
|
||||
@foreach($daysMap as $dayKey => $dayTitle)
|
||||
@foreach($filtered as $date => $slot)
|
||||
@php
|
||||
$slot = $schedule[$dayKey] ?? null;
|
||||
$ts = strtotime($date);
|
||||
$weekday = $ruDays[date('w', $ts)];
|
||||
$months = [
|
||||
1 => 'января',
|
||||
2 => 'февраля',
|
||||
3 => 'марта',
|
||||
4 => 'апреля',
|
||||
5 => 'мая',
|
||||
6 => 'июня',
|
||||
7 => 'июля',
|
||||
8 => 'августа',
|
||||
9 => 'сентября',
|
||||
10 => 'октября',
|
||||
11 => 'ноября',
|
||||
12 => 'декабря',
|
||||
];
|
||||
|
||||
$dayNum = (int)date('j', $ts); // 1–31 (без ведущего нуля)
|
||||
$monthNum = (int)date('n', $ts); // 1–12
|
||||
$monthName = $months[$monthNum];
|
||||
|
||||
$label = "{$dayNum} {$monthName} ({$weekday})";
|
||||
|
||||
@endphp
|
||||
|
||||
<li class="d-flex justify-content-between py-2 border-bottom"
|
||||
style="font-size:17px;">
|
||||
|
||||
<span>{{ $dayTitle }}</span>
|
||||
<span class="font-weight-bold">{{ $label }}</span>
|
||||
|
||||
@if($slot && !empty($slot['start']) && !empty($slot['end']))
|
||||
<span class="text-dark font-weight-bold">
|
||||
@ -82,4 +104,3 @@
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
|
||||
@ -368,7 +368,7 @@
|
||||
|
||||
// Подменяем HTML на печатный
|
||||
document.body.innerHTML =
|
||||
'<div style="padding:20px;">' +
|
||||
'<div style="width: 10cm; height: 10cm; page-break-after: always; font-weight: bold; font-size: 2em; ">' +
|
||||
modalBody.innerHTML +
|
||||
'</div>';
|
||||
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
</div>
|
||||
<div class="card-body text-center">
|
||||
<p class="mb-3">
|
||||
Не удалось определить участок. <br>
|
||||
Попробуйте ввести другой адрес.
|
||||
Попробуйте ввести другой адрес <br>
|
||||
или обратитесь в регистратуру
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
83
app/engine/www/bladetpl/site_screensaver/main.blade.php
Normal file
83
app/engine/www/bladetpl/site_screensaver/main.blade.php
Normal file
@ -0,0 +1,83 @@
|
||||
<style>
|
||||
html, body { height:100%; }
|
||||
|
||||
/* Плавное появление контента */
|
||||
.fade-in {
|
||||
opacity: 0;
|
||||
animation: fadeIn 1s ease-in-out forwards;
|
||||
animation-delay: .4s;
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
to { opacity: 1; }
|
||||
}
|
||||
|
||||
/* Прелоадер */
|
||||
#loader {
|
||||
position: fixed;
|
||||
left: 0; top: 0;
|
||||
width: 100%; height: 100%;
|
||||
background: #d9e1f2;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.spinner {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
border: 6px solid #fff;
|
||||
border-top-color: #4a6ea9;
|
||||
border-radius: 50%;
|
||||
animation: spin 0.9s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- Прелоадер -->
|
||||
<div id="loader">
|
||||
<div class="spinner"></div>
|
||||
</div>
|
||||
|
||||
<!-- Основной экран -->
|
||||
<a href="?cat=main" style="text-decoration:none; color:inherit;">
|
||||
<div class="d-flex justify-content-center align-items-center fade-in"
|
||||
style="min-height:100vh; background:#d9e1f2; cursor:pointer;">
|
||||
|
||||
<div class="text-center px-3">
|
||||
|
||||
<!-- ЛОГОТИП -->
|
||||
<img src="/assets/img/logo.png" alt="Логотип" style="height:110px;" class="mb-4">
|
||||
|
||||
<!-- НАЗВАНИЕ УЧРЕЖДЕНИЯ -->
|
||||
<div style="font-size:32px; font-weight:700; line-height:1.2; color:#000;">
|
||||
Психоневрологический<br>
|
||||
диспансер №8
|
||||
</div>
|
||||
|
||||
<!-- Заголовок страницы -->
|
||||
<h1 class="mt-4" style="font-size:42px; font-weight:600; color:#000;">
|
||||
Расписание приема врачей<br>и участков
|
||||
</h1>
|
||||
|
||||
<div class="mt-3" style="font-size:20px; color:#333;">
|
||||
(поиск по адресу проживания)
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<script>
|
||||
// Скрываем прелоадер после загрузки страницы
|
||||
window.addEventListener('load', function() {
|
||||
document.getElementById('loader').style.opacity = '0';
|
||||
setTimeout(() => {
|
||||
document.getElementById('loader').style.display = 'none';
|
||||
}, 400);
|
||||
});
|
||||
</script>
|
||||
20
app/engine/www/modules/site_screensaver.php
Normal file
20
app/engine/www/modules/site_screensaver.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
class site_screensaver extends module {
|
||||
public $templBlade = 'site_screensaver';
|
||||
|
||||
|
||||
function _on_() {
|
||||
global $blade;
|
||||
return $blade->run($this->getBladeTempl('main'));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
?>
|
||||
@ -33,89 +33,47 @@
|
||||
<div class="col pl-4 ml-4 right-col position-relative pr-0">
|
||||
|
||||
<div id="bigcontent-wrapper" class="h-100 position-relative">
|
||||
<div id="bigcontent" class="h-100" style="overflow: hidden;">
|
||||
<div class="h-100" style="overflow: auto;">
|
||||
{body}
|
||||
</div>
|
||||
|
||||
<!-- Кнопки прокрутки -->
|
||||
<button id="scroll-up" class="scroll-btn">▲</button>
|
||||
<button id="scroll-down" class="scroll-btn">▼</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
$(function () {
|
||||
var $box = $('#bigcontent');
|
||||
var $btnUp = $('#scroll-up');
|
||||
var $btnDn = $('#scroll-down');
|
||||
(function () {
|
||||
var REDIRECT_TIMEOUT = 3 * 60 * 1000; // 3 минуты
|
||||
var timer = null;
|
||||
|
||||
var interval = null;
|
||||
var step = 250; // шаг скролла
|
||||
var delay = 60; // частота скролла (мс)
|
||||
|
||||
function checkOverflow() {
|
||||
var el = $box[0];
|
||||
if (!el) return;
|
||||
|
||||
// немного страховки на округления браузера
|
||||
if (el.scrollHeight - 2 > el.clientHeight) {
|
||||
$btnUp.show();
|
||||
$btnDn.show();
|
||||
} else {
|
||||
$btnUp.hide();
|
||||
$btnDn.hide();
|
||||
}
|
||||
function resetTimer() {
|
||||
clearTimeout(timer);
|
||||
timer = setTimeout(function () {
|
||||
window.location.href = "/";
|
||||
}, REDIRECT_TIMEOUT);
|
||||
}
|
||||
|
||||
function startScroll(dir) {
|
||||
stopScroll();
|
||||
interval = setInterval(function () {
|
||||
$box[0].scrollTop += dir * step;
|
||||
}, delay);
|
||||
// Сброс на любое действие пользователя
|
||||
var events = ['click', 'mousemove', 'keydown', 'scroll', 'touchstart'];
|
||||
|
||||
events.forEach(function (ev) {
|
||||
window.addEventListener(ev, resetTimer, true);
|
||||
});
|
||||
|
||||
// Сброс на прокрутку контентной области
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
var content = document.querySelector('#bigcontent-wrapper');
|
||||
if (content) {
|
||||
content.addEventListener('scroll', resetTimer, true);
|
||||
}
|
||||
|
||||
function stopScroll() {
|
||||
if (interval) {
|
||||
clearInterval(interval);
|
||||
interval = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Наверх
|
||||
$btnUp.on('mousedown touchstart', function (e) {
|
||||
e.preventDefault();
|
||||
startScroll(-1);
|
||||
});
|
||||
|
||||
// Вниз
|
||||
$btnDn.on('mousedown touchstart', function (e) {
|
||||
e.preventDefault();
|
||||
startScroll(1);
|
||||
});
|
||||
|
||||
// Остановка
|
||||
$(document).on('mouseup mouseleave touchend touchcancel', function () {
|
||||
stopScroll();
|
||||
});
|
||||
|
||||
// 1) Проверка при старте
|
||||
checkOverflow();
|
||||
|
||||
// 2) Периодический опрос — чтобы ловить любые изменения в runtime
|
||||
setInterval(checkOverflow, 500);
|
||||
|
||||
// 3) Если используешь Bootstrap collapse / модалки / табы — дергаем ещё раз
|
||||
$(document).on('shown.bs.collapse hidden.bs.collapse shown.bs.tab hidden.bs.tab', function () {
|
||||
checkOverflow();
|
||||
});
|
||||
});
|
||||
// Запуск при открытии страницы
|
||||
resetTimer();
|
||||
})();
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
21
app/engine/www/tpls/index_empty.htm
Normal file
21
app/engine/www/tpls/index_empty.htm
Normal file
@ -0,0 +1,21 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>{auto_title}</title>
|
||||
<meta name="keywords" content="{meta_keywords}">
|
||||
<meta name="description" content="{meta_description}">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<base href="{_SITE_ROOT_}">
|
||||
<link rel="icon" href="favicon.ico">
|
||||
{include:include/_static_css_headers.htm}
|
||||
{include:include/_static_js_headers.htm}
|
||||
{add_headers}
|
||||
</head>
|
||||
|
||||
<body class="w-100 h-100">
|
||||
{body}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
4
app/engine/www/xml/empty.xml
Normal file
4
app/engine/www/xml/empty.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf8"?>
|
||||
<templ filename="index_empty.htm">
|
||||
</templ>
|
||||
|
||||
@ -18,36 +18,6 @@ services:
|
||||
networks:
|
||||
- app_network
|
||||
|
||||
php-cron:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/dockerfile_cron
|
||||
image: angels-it/php-cron
|
||||
environment:
|
||||
APP_ENV: ${APP_ENV}
|
||||
DB_HOST: mariadb
|
||||
DB_DATABASE: ${MYSQL_DATABASE}
|
||||
DB_USERNAME: ${MYSQL_USER}
|
||||
DB_PASSWORD: ${MYSQL_PASSWORD}
|
||||
volumes:
|
||||
- ./app:/var/www/html
|
||||
- ./config/php:/usr/local/etc/php
|
||||
- ./config/cron:/etc/cron.d
|
||||
- ./logs/php-cron:/var/log
|
||||
command: >
|
||||
/bin/sh -c '
|
||||
if [ "$${APP_ENV}" = "prod" ]; then
|
||||
echo "[cron] production mode — starting cron";
|
||||
cron -f;
|
||||
else
|
||||
echo "[cron] dev mode — sleeping";
|
||||
tail -f /dev/null;
|
||||
fi
|
||||
'
|
||||
restart: always
|
||||
networks:
|
||||
- app_network
|
||||
|
||||
nginx:
|
||||
image: nginx:1.24.0
|
||||
ports:
|
||||
|
||||
1
sync_data.cmd
Normal file
1
sync_data.cmd
Normal file
@ -0,0 +1 @@
|
||||
docker exec -t pnd8_app-php-1 sh -c "/var/www/html/engine/cron/data_sync/run.sh"
|
||||
Loading…
x
Reference in New Issue
Block a user