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.
Files changed (49) hide show
  1. package/LICENSE.txt +13 -0
  2. package/README.md +117 -0
  3. package/database/config/db-init.js +67 -53
  4. package/database/models/appointments.js +35 -20
  5. package/database/models/clinics.js +25 -13
  6. package/database/models/diseases.js +21 -13
  7. package/database/models/districts.js +55 -0
  8. package/database/models/news.js +25 -0
  9. package/database/models/user-addresses.js +21 -14
  10. package/database/models/users.js +69 -26
  11. package/database/services/admin/create-clinic.js +18 -6
  12. package/database/services/admin/db-analytics.js +42 -16
  13. package/database/services/admin/index.js +6 -6
  14. package/database/services/admin/manage-staff.js +47 -17
  15. package/database/services/doctor/conduct-exam.js +26 -20
  16. package/database/services/doctor/get-schedule.js +26 -18
  17. package/database/services/doctor/index.js +6 -6
  18. package/database/services/doctor/patient-access.js +34 -25
  19. package/database/services/patient/book-appointment.js +37 -17
  20. package/database/services/patient/calc-district.js +70 -21
  21. package/database/services/patient/get-profile.js +49 -21
  22. package/database/services/patient/index.js +5 -5
  23. package/env_init.js +55 -0
  24. package/index.d.ts +38 -24
  25. package/index.js +48 -25
  26. package/migrate-diseases.js +192 -120
  27. package/package.json +3 -3
  28. package/public/css/admin.css +80 -80
  29. package/public/css/auth.css +52 -44
  30. package/public/css/doctor.css +131 -125
  31. package/public/css/home.css +155 -0
  32. package/public/html/dashboard-admin.html +423 -101
  33. package/public/html/dashboard-doctor.html +155 -66
  34. package/public/html/dashboard-patient.html +199 -94
  35. package/public/html/home/about.html +0 -0
  36. package/public/html/home/contact.html +0 -0
  37. package/public/html/home/info.html +0 -0
  38. package/public/html/home.html +159 -0
  39. package/public/html/login.html +73 -43
  40. package/public/js/admin.js +329 -165
  41. package/public/js/auth.js +45 -41
  42. package/public/js/doctor.js +117 -103
  43. package/public/js/home.js +113 -0
  44. package/public/js/patient.js +130 -108
  45. package/server/midleware.js +33 -13
  46. package/server/permissions.js +105 -43
  47. package/server/server.js +517 -176
  48. package/README +0 -161
  49. package/test.js +0 -27
@@ -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>
@@ -1,48 +1,78 @@
1
- <!DOCTYPE html>
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
- <div class="auth-box" id="loginBox">
12
- <h2>Вход в систему</h2>
13
- <form id="loginForm">
14
- <div class="form-group">
15
- <label>Email</label>
16
- <input type="email" id="loginEmail" required placeholder="doctor@clinic.com">
17
- </div>
18
- <div class="form-group">
19
- <label>Пароль</label>
20
- <input type="password" id="loginPassword" required placeholder="••••••••">
21
- </div>
22
- <button type="submit" class="btn">Войти</button>
23
- </form>
24
- <p class="toggle-text">Впервые у нас? <span onclick="toggleAuth()">Зарегистрироваться как пациент</span></p>
25
- </div>
26
- <div class="auth-box hidden" id="registerBox">
27
- <h2>Регистрация пациента</h2>
28
- <form id="registerForm">
29
- <div class="form-group">
30
- <label>ФИО полностью</label>
31
- <input type="text" id="regName" required placeholder="Иванов Иван Иванович">
32
- </div>
33
- <div class="form-group">
34
- <label>Email</label>
35
- <input type="email" id="regEmail" required placeholder="patient@mail.ru">
36
- </div>
37
- <div class="form-group">
38
- <label>Пароль</label>
39
- <input type="password" id="regPassword" required placeholder="Минимум 6 символов">
40
- </div>
41
- <button type="submit" class="btn">Создать аккаунт</button>
42
- </form>
43
- <p class="toggle-text">Уже есть аккаунт? <span onclick="toggleAuth()">Войти</span></p>
44
- </div>
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>