med-cms 1.0.0-beta.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +13 -0
- package/README.md +117 -0
- package/database/config/db-init.js +67 -53
- package/database/models/appointments.js +35 -20
- package/database/models/clinics.js +25 -13
- package/database/models/diseases.js +21 -13
- package/database/models/districts.js +55 -0
- package/database/models/news.js +25 -0
- package/database/models/user-addresses.js +21 -14
- package/database/models/users.js +69 -26
- package/database/services/admin/create-clinic.js +18 -6
- package/database/services/admin/db-analytics.js +42 -16
- package/database/services/admin/index.js +6 -6
- package/database/services/admin/manage-staff.js +47 -17
- package/database/services/doctor/conduct-exam.js +26 -20
- package/database/services/doctor/get-schedule.js +26 -18
- package/database/services/doctor/index.js +6 -6
- package/database/services/doctor/patient-access.js +34 -25
- package/database/services/patient/book-appointment.js +37 -17
- package/database/services/patient/calc-district.js +70 -21
- package/database/services/patient/get-profile.js +49 -21
- package/database/services/patient/index.js +5 -5
- package/env_init.js +55 -0
- package/index.d.ts +38 -24
- package/index.js +48 -25
- package/migrate-diseases.js +192 -120
- package/package.json +3 -3
- package/public/css/admin.css +80 -80
- package/public/css/auth.css +52 -44
- package/public/css/doctor.css +131 -125
- package/public/css/home.css +155 -0
- package/public/html/dashboard-admin.html +423 -101
- package/public/html/dashboard-doctor.html +155 -66
- package/public/html/dashboard-patient.html +199 -94
- package/public/html/home/about.html +0 -0
- package/public/html/home/contact.html +0 -0
- package/public/html/home/info.html +0 -0
- package/public/html/home.html +159 -0
- package/public/html/login.html +73 -43
- package/public/js/admin.js +329 -165
- package/public/js/auth.js +45 -41
- package/public/js/doctor.js +117 -103
- package/public/js/home.js +113 -0
- package/public/js/patient.js +130 -108
- package/server/midleware.js +33 -13
- package/server/permissions.js +105 -43
- package/server/server.js +517 -176
- package/README +0 -161
- package/test.js +0 -27
package/public/html/home.html
CHANGED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="ru">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Медицинский Портал | Клиника</title>
|
|
7
|
+
<!-- Подключаем внешние стили -->
|
|
8
|
+
<link rel="stylesheet" href="/med/css/auth.css" />
|
|
9
|
+
<link rel="stylesheet" href="/med/css/home.css" />
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<!-- Шапка сайта по вашему эскизу -->
|
|
13
|
+
<header class="main-header">
|
|
14
|
+
<div class="logo">MED-CMS</div>
|
|
15
|
+
<a href="/med/html/login.html" class="btn-login">ВОЙТИ</a>
|
|
16
|
+
</header>
|
|
17
|
+
|
|
18
|
+
<div class="content-wrapper">
|
|
19
|
+
<div class="nav-container">
|
|
20
|
+
<button class="nav-btn active" onclick="switchSection('news', this)">
|
|
21
|
+
Новости
|
|
22
|
+
</button>
|
|
23
|
+
<button class="nav-btn" onclick="switchSection('about', this)">
|
|
24
|
+
О нас
|
|
25
|
+
</button>
|
|
26
|
+
<button class="nav-btn" onclick="switchSection('info', this)">
|
|
27
|
+
Инфо-источник
|
|
28
|
+
</button>
|
|
29
|
+
<button class="nav-btn" onclick="switchSection('contact', this)">
|
|
30
|
+
Контакты
|
|
31
|
+
</button>
|
|
32
|
+
</div>
|
|
33
|
+
<main class="info-card">
|
|
34
|
+
<div id="news-box">
|
|
35
|
+
<p style="color: #64748b">Загрузка контента ленты...</p>
|
|
36
|
+
</div>
|
|
37
|
+
<div id="about-box" style="display: none">
|
|
38
|
+
<h2>MED-CMS — Медецинская система написаная на JavaScript</h2>
|
|
39
|
+
<p>
|
|
40
|
+
Модуль написан разработчиком
|
|
41
|
+
<a
|
|
42
|
+
href="https://github.com/RPM-programmer"
|
|
43
|
+
style="text-decoration: none; color: black"
|
|
44
|
+
title="gitgub.com"
|
|
45
|
+
>RPM-programmer</a
|
|
46
|
+
>
|
|
47
|
+
(<a
|
|
48
|
+
href="https://www.npmjs.com/~prm-programmer"
|
|
49
|
+
style="text-decoration: none; color: black"
|
|
50
|
+
title="www.npmjs.com"
|
|
51
|
+
>prm-programmer</a
|
|
52
|
+
>)
|
|
53
|
+
</p>
|
|
54
|
+
</div>
|
|
55
|
+
<div id="info-box" style="display: none">
|
|
56
|
+
<h2>Информационный источник</h2>
|
|
57
|
+
<p>
|
|
58
|
+
Полезные статьи о профилактике сезонных ОРВИ, контроле артериального
|
|
59
|
+
давления при гипертонии и правилах подготовки к плановым
|
|
60
|
+
диагностическим осмотрам в кабинетах поликлиники.
|
|
61
|
+
</p>
|
|
62
|
+
<hr />
|
|
63
|
+
<img
|
|
64
|
+
src="https://17gdp.by/files/00204/obj/140/4173/img/4.%20%D0%9B%D0%B8%D1%81%D1%82%D0%BE%D0%B2%D0%BA%D0%B0%20%D0%B1%D0%B5%D1%88%D0%B5%D0%BD%D1%81%D1%82%D0%B2%D0%BE%2024.03.2026%20%D0%A3%D0%B4%D0%BE%D1%82_page-0001.jpg"
|
|
65
|
+
/>
|
|
66
|
+
<img
|
|
67
|
+
src="https://17gdp.by/files/00204/obj/140/4173/img/9.%20%D0%9B%D0%B8%D1%81%D1%82%D0%BE%D0%B2%D0%BA%D0%B0%20%D0%B2%D0%B5%D1%82%D1%80%D1%8F%D0%BD%D0%B0%D1%8F%20%D0%BE%D1%81%D0%BF%D0%B0%2014.04.2026%20%D0%A3%D0%B4%D0%BE%D1%82_page-0001.jpg"
|
|
68
|
+
/>
|
|
69
|
+
<img
|
|
70
|
+
src="https://17gdp.by/files/00204/obj/140/4173/img/10.%20%D0%9F%D0%B0%D0%BC%D1%8F%D1%82%D0%BA%D0%B0%D0%9F%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B0%D0%9A%D0%BE%D1%80%D0%B814.04.2026%20%D0%93%D0%B0%D0%B2%D1%80%D0%B8%D0%BD%D0%B0_page-0001.jpg"
|
|
71
|
+
/>
|
|
72
|
+
<img
|
|
73
|
+
src="https://17gdp.by/files/00204/obj/140/4173/img/%D0%9F%D0%B0%D0%BC%D1%8F%D1%82%D0%BA%D0%B0%20%D0%A1%D1%82%D0%BE%D0%BB%D0%B1%D0%BD%D1%8F%D0%BA%20-%20%D1%8D%D1%82%D0%BE%20%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE!_page-0002.jpg"
|
|
74
|
+
/>
|
|
75
|
+
<img
|
|
76
|
+
src="https://17gdp.by/files/00204/obj/140/4173/img/%D0%9F%D0%B0%D0%BC%D1%8F%D1%82%D0%BA%D0%B0%20%D0%A1%D1%82%D0%BE%D0%BB%D0%B1%D0%BD%D1%8F%D0%BA%20-%20%D1%8D%D1%82%D0%BE%20%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE!_page-0001.jpg"
|
|
77
|
+
/>
|
|
78
|
+
<img
|
|
79
|
+
src="https://17gdp.by/files/00204/obj/140/4173/img/(4)-%D0%9A%D0%BB%D0%B5%D1%89%D0%B5%D0%B2%D1%8B%D1%85-%D0%B8%D0%BD%D1%84%D0%B5%D0%BA%D1%86%D0%B8%D0%B9-%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE-%D0%B8%D0%B7%D0%B1%D0%B5%D0%B6%D0%B0%D1%82%D1%8C.jpg"
|
|
80
|
+
/>
|
|
81
|
+
</div>
|
|
82
|
+
<div id="contacts-box" style="display: none">
|
|
83
|
+
<h2>Контакты</h2>
|
|
84
|
+
<hr />
|
|
85
|
+
<p id="login-contact">Хотите работать у нас? — Звоните по номеру</p>
|
|
86
|
+
<p>Нашли ошибку — пишите на promanenko214@gmail.com</p>
|
|
87
|
+
<script>
|
|
88
|
+
document.addEventListener("DOMContentLoaded", async () => {
|
|
89
|
+
const lc = document.getElementById("login-contact");
|
|
90
|
+
if (!lc) return;
|
|
91
|
+
try {
|
|
92
|
+
let text = lc.innerHTML;
|
|
93
|
+
const res = await fetch("/med/api/info/contact/", {
|
|
94
|
+
method: "GET",
|
|
95
|
+
});
|
|
96
|
+
const result = await res.json();
|
|
97
|
+
lc.innerHTML = text + " " + (result.phone || "номер не указан");
|
|
98
|
+
} catch (err) {
|
|
99
|
+
console.error("Ошибка при получении контактов:", err);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
</script>
|
|
103
|
+
</div>
|
|
104
|
+
</main>
|
|
105
|
+
|
|
106
|
+
<!-- Интерактивная зона проверки медицинских участков -->
|
|
107
|
+
<section class="interactive-zone">
|
|
108
|
+
<h3>Проверьте ваш лечебный участок онлайн</h3>
|
|
109
|
+
<p style="color: #64748b; font-size: 14px">
|
|
110
|
+
Введите ваш полный адрес проживания для точного определения кабинета:
|
|
111
|
+
</p>
|
|
112
|
+
|
|
113
|
+
<div
|
|
114
|
+
style="
|
|
115
|
+
display: flex;
|
|
116
|
+
justify-content: center;
|
|
117
|
+
gap: 10px;
|
|
118
|
+
max-width: 500px;
|
|
119
|
+
margin: 15px auto 0 auto;
|
|
120
|
+
"
|
|
121
|
+
>
|
|
122
|
+
<input
|
|
123
|
+
type="text"
|
|
124
|
+
id="checkCityInput"
|
|
125
|
+
placeholder="Город (Минск)"
|
|
126
|
+
style="width: 30%; margin-top: 0"
|
|
127
|
+
/>
|
|
128
|
+
<input
|
|
129
|
+
type="text"
|
|
130
|
+
id="checkStreetInput"
|
|
131
|
+
placeholder="Улица (Волоха)"
|
|
132
|
+
style="width: 50%; margin-top: 0"
|
|
133
|
+
/>
|
|
134
|
+
<input
|
|
135
|
+
type="text"
|
|
136
|
+
id="checkHouseInput"
|
|
137
|
+
placeholder="Дом (15)"
|
|
138
|
+
style="width: 20%; margin-top: 0"
|
|
139
|
+
/>
|
|
140
|
+
</div>
|
|
141
|
+
|
|
142
|
+
<br />
|
|
143
|
+
<button class="btn-ok" onclick="checkDistrictOnline()">ОК</button>
|
|
144
|
+
<div id="checkResultBox" class="result-box"></div>
|
|
145
|
+
</section>
|
|
146
|
+
</div>
|
|
147
|
+
|
|
148
|
+
<!-- Подвал сайта -->
|
|
149
|
+
<footer class="main-footer">
|
|
150
|
+
<p>
|
|
151
|
+
© 2026 Разработано на базе модульного движка MED-CMS. Все права
|
|
152
|
+
защищены. Минск, Республика Беларусь.
|
|
153
|
+
</p>
|
|
154
|
+
</footer>
|
|
155
|
+
|
|
156
|
+
<!-- Подключаем внешний JavaScript-файл логики -->
|
|
157
|
+
<script src="/med/js/home.js"></script>
|
|
158
|
+
</body>
|
|
159
|
+
</html>
|
package/public/html/login.html
CHANGED
|
@@ -1,48 +1,78 @@
|
|
|
1
|
-
<!
|
|
1
|
+
<!doctype html>
|
|
2
2
|
<html lang="ru">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8"
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0"
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Медицинская Платформа | Вход</title>
|
|
7
|
-
<link rel="stylesheet" href="/med/css/auth.css"
|
|
8
|
-
</head>
|
|
9
|
-
<body>
|
|
7
|
+
<link rel="stylesheet" href="/med/css/auth.css" />
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
10
|
<div class="auth-container">
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
<
|
|
44
|
-
|
|
11
|
+
<div class="auth-box" id="loginBox">
|
|
12
|
+
<h2>Вход в систему</h2>
|
|
13
|
+
<form id="loginForm">
|
|
14
|
+
<div class="form-group">
|
|
15
|
+
<label>Email</label>
|
|
16
|
+
<input
|
|
17
|
+
type="email"
|
|
18
|
+
id="loginEmail"
|
|
19
|
+
required
|
|
20
|
+
placeholder="doctor@clinic.com"
|
|
21
|
+
/>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="form-group">
|
|
24
|
+
<label>Пароль</label>
|
|
25
|
+
<input
|
|
26
|
+
type="password"
|
|
27
|
+
id="loginPassword"
|
|
28
|
+
required
|
|
29
|
+
placeholder="••••••••"
|
|
30
|
+
/>
|
|
31
|
+
</div>
|
|
32
|
+
<button type="submit" class="btn">Войти</button>
|
|
33
|
+
</form>
|
|
34
|
+
<p class="toggle-text">
|
|
35
|
+
Впервые у нас?
|
|
36
|
+
<span onclick="toggleAuth()">Зарегистрироваться как пациент</span>
|
|
37
|
+
</p>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="auth-box hidden" id="registerBox">
|
|
40
|
+
<h2>Регистрация пациента</h2>
|
|
41
|
+
<form id="registerForm">
|
|
42
|
+
<div class="form-group">
|
|
43
|
+
<label>ФИО полностью</label>
|
|
44
|
+
<input
|
|
45
|
+
type="text"
|
|
46
|
+
id="regName"
|
|
47
|
+
required
|
|
48
|
+
placeholder="Иванов Иван Иванович"
|
|
49
|
+
/>
|
|
50
|
+
</div>
|
|
51
|
+
<div class="form-group">
|
|
52
|
+
<label>Email</label>
|
|
53
|
+
<input
|
|
54
|
+
type="email"
|
|
55
|
+
id="regEmail"
|
|
56
|
+
required
|
|
57
|
+
placeholder="patient@mail.ru"
|
|
58
|
+
/>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="form-group">
|
|
61
|
+
<label>Пароль</label>
|
|
62
|
+
<input
|
|
63
|
+
type="password"
|
|
64
|
+
id="regPassword"
|
|
65
|
+
required
|
|
66
|
+
placeholder="Минимум 6 символов"
|
|
67
|
+
/>
|
|
68
|
+
</div>
|
|
69
|
+
<button type="submit" class="btn">Создать аккаунт</button>
|
|
70
|
+
</form>
|
|
71
|
+
<p class="toggle-text">
|
|
72
|
+
Уже есть аккаунт? <span onclick="toggleAuth()">Войти</span>
|
|
73
|
+
</p>
|
|
74
|
+
</div>
|
|
45
75
|
</div>
|
|
46
76
|
<script src="/med/js/auth.js"></script>
|
|
47
|
-
</body>
|
|
48
|
-
</html>
|
|
77
|
+
</body>
|
|
78
|
+
</html>
|