Browse Source

first commit

master
Ilya_Chis 2 months ago
commit
7ab166fd23
  1. 13
      botforclinic-436512-0c117dd103a8.json
  2. 16
      config.ini
  3. 3
      config/__init__.py
  4. BIN
      config/__pycache__/__init__.cpython-38.pyc
  5. 6
      run.bat
  6. 26
      webApp/__init__.py
  7. BIN
      webApp/__pycache__/__init__.cpython-38.pyc
  8. BIN
      webApp/helper/__pycache__/jinjaHelper.cpython-38.pyc
  9. 17
      webApp/helper/jinjaHelper.py
  10. 2
      webApp/interfaces/__init__.py
  11. BIN
      webApp/interfaces/__pycache__/__init__.cpython-38.pyc
  12. BIN
      webApp/interfaces/__pycache__/dependencies.cpython-38.pyc
  13. BIN
      webApp/interfaces/__pycache__/pagesController.cpython-38.pyc
  14. 16
      webApp/interfaces/dependencies.py
  15. 54
      webApp/interfaces/pagesController.py
  16. 22
      webApp/templates/2.0/application.pug
  17. 52
      webApp/templates/2.0/main_page.pug
  18. 669
      webApp/templates/static/css/1_model_app.css
  19. 12
      webApp/templates/static/css/1_model_icons.css
  20. BIN
      webApp/templates/static/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw0aXpsog.woff2
  21. BIN
      webApp/templates/static/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw2aXpsog.woff2
  22. BIN
      webApp/templates/static/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw3aXpsog.woff2
  23. BIN
      webApp/templates/static/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2
  24. BIN
      webApp/templates/static/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw9aXpsog.woff2
  25. 40
      webApp/templates/static/css/fonts/montserrat.css
  26. 6
      webApp/templates/static/css/third_part/bootstrap.min.css
  27. 6
      webApp/templates/static/css/third_part/fontawesome_all.css
  28. 3
      webApp/templates/static/css/third_part/select2-bootstrap-5-theme.min.css
  29. 1
      webApp/templates/static/css/third_part/select2.min.css
  30. BIN
      webApp/templates/static/css/webfonts/fa-brands-400.ttf
  31. BIN
      webApp/templates/static/css/webfonts/fa-brands-400.woff2
  32. BIN
      webApp/templates/static/css/webfonts/fa-regular-400.ttf
  33. BIN
      webApp/templates/static/css/webfonts/fa-regular-400.woff2
  34. BIN
      webApp/templates/static/css/webfonts/fa-solid-900.ttf
  35. BIN
      webApp/templates/static/css/webfonts/fa-solid-900.woff2
  36. BIN
      webApp/templates/static/css/webfonts/fa-v4compatibility.ttf
  37. BIN
      webApp/templates/static/css/webfonts/fa-v4compatibility.woff2
  38. 67
      webApp/templates/static/js/2.0.dashboard.js
  39. 7
      webApp/templates/static/js/third_part/bootstrap.bundle.min.js
  40. 6
      webApp/templates/static/js/third_part/fontawesome_all.js
  41. 2
      webApp/templates/static/js/third_part/jquery-3.3.1.min.js
  42. 60
      webApp/templates/static/js/third_part/jquery.scroll-spy.js
  43. 1
      webApp/templates/static/js/third_part/jquery.scroll-spy.min.js
  44. 5
      webApp/templates/static/js/third_part/popper.min.js
  45. 225
      webApp/templates/static/js/third_part/scrollspy.js
  46. 2
      webApp/templates/static/js/third_part/select2.min.js
  47. 3
      webApp/templates/static/js/third_part/showdown.min.js
  48. 382
      webApp/templates/static/js/third_part/tour.js
  49. 73
      webApp/templates/static/js/third_part/videojs.zoomrotate.js
  50. BIN
      webApp/templates/static/pics/free-icon-gynecology.png
  51. BIN
      webApp/templates/static/pics/free-icon-sore-throat.png
  52. BIN
      webApp/templates/static/pics/free-icon-varicose-veins.png
  53. BIN
      webApp/templates/static/pics/logo.jpg
  54. BIN
      webApp/templates/static/pics/logo.png
  55. BIN
      webApp/templates/static/pics/mail_logo.png
  56. BIN
      webApp/templates/static/pics/none.png
  57. BIN
      webApp/templates/static/pics/pirogov_cloud_icn.png
  58. BIN
      webApp/templates/static/pics/pointer.png
  59. BIN
      webApp/templates/static/pics/premium-icon-skin-disease.png
  60. BIN
      webApp/templates/static/pics/tg_logo.png
  61. BIN
      webApp/templates/static/pics/video.png
  62. 136
      webApp/templates/static/remove/2.0.monitor.js
  63. 110
      webApp/templates/static/remove/2.0.nikio.js
  64. 55
      webApp/templates/static/remove/2.0.projects_monitor.js
  65. 82
      webApp/templates/static/remove/add_patient.js
  66. 51
      webApp/templates/static/remove/adm_monitoring.js
  67. 136
      webApp/templates/static/remove/all_directions.js
  68. 88
      webApp/templates/static/remove/back_form.js
  69. 265
      webApp/templates/static/remove/ca_add_user.js
  70. 277
      webApp/templates/static/remove/control.js
  71. 146
      webApp/templates/static/remove/device_test.js
  72. 207
      webApp/templates/static/remove/direction.js
  73. 653
      webApp/templates/static/remove/flebo_visit.js
  74. 67
      webApp/templates/static/remove/internal_routing.js
  75. 37
      webApp/templates/static/remove/lang.js
  76. 664
      webApp/templates/static/remove/med_exam.js
  77. 603
      webApp/templates/static/remove/med_exam_skinive.js
  78. 318
      webApp/templates/static/remove/new_images_control.js
  79. 160
      webApp/templates/static/remove/news.js
  80. 68
      webApp/templates/static/remove/pdf_report.js
  81. 85
      webApp/templates/static/remove/routing.js
  82. 552
      webApp/templates/static/remove/routing_rules.js
  83. 113
      webApp/templates/static/remove/save_patient_props.js
  84. 31
      webApp/templates/static/remove/server_status.js
  85. 900
      webApp/templates/static/remove/skinive_visit.js
  86. 12
      webApp/templates/static/remove/skt.js
  87. 25
      webApp/templates/static/remove/sort_directions.js
  88. 32
      webApp/templates/static/remove/sort_patients.js
  89. 43
      webApp/templates/static/remove/sort_visits.js
  90. 392
      webApp/templates/static/remove/stats.js
  91. 120
      webApp/templates/static/remove/style.js
  92. 289
      webApp/templates/static/remove/su_add_clinic.js
  93. 186
      webApp/templates/static/remove/su_add_tags[dev].js
  94. 122
      webApp/templates/static/remove/su_clinic_control.js
  95. 94
      webApp/templates/static/remove/su_clinic_users.js
  96. 18
      webApp/templates/static/remove/test.js
  97. 44
      webApp/templates/static/remove/video_play.js
  98. 838
      webApp/templates/static/remove/visit.js
  99. 155
      webApp/templates/static/remove/visit_camera.js
  100. 137
      webApp/templates/static/remove/visit_control.js
  101. Some files were not shown because too many files have changed in this diff Show More

13
botforclinic-436512-0c117dd103a8.json

@ -0,0 +1,13 @@
{
"type": "service_account",
"project_id": "botforclinic-436512",
"private_key_id": "0c117dd103a890d20705d9e66bbfde56f9d65a05",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC4XOtHBzxPR4lb\nqiX8grd2XBfBxXZLgLKTkz4WRcncgBpACXKms5AtKF707uKCvgUD8SwTpzvfY3oz\nvzLQs0uZoM9RALw5ui9dlimdoYQGsuH5LAUX68w0oPyour36XeBqacxNoEeO5C2F\nbb4+ql4gC2qJT86aBt2kwKpTxnTPZxvYoKZ0TwsmN8gj9vNckONbSSZteMKpQA50\nRqpoLM0EpsB64HRSiu8mH+bkdLK9ZMEZGmOG7pNDijctGkgAy9rK9vurH4PRgIMt\n7j+q/EeBQDuZX2SSVIaMkiFkDhHVGd84CFzcodBIYOSiCDer7aIcv8SrcYGZ0QJD\nnIzTqZMrAgMBAAECggEAW3HHR2dI3D/s2xkVl15U1nHOXM/vIXsX2EgH2y9JdUPb\nAVlOU24sPKHSG6YjltrejPqCNMtV0LM8SU90Sn0sKerP+esl8XIujTpusN+Mp2/x\n0tApRJiyJIaXW6+ojHck2VNZwUUXSUJXa9+npdiGMFnJQYtivBZcuJvRwBTnGnm/\ntuwQUcQREPy8IaaX5j+xPf390KeXqNOopULW7FtItkHthM18fr6706X1GQ77ua23\nzz1DT2PfIxOu2e3uPJ1O1CsQ8UiTIAm3J0nNgbpau1nP2+ea62vCrjmuqcyn5dfb\nhpgGD7Qe8uRvU+EICr67sOW47ikjAqkM38lZFgufuQKBgQDmypfFTYke7oDTZ8GE\nZFHZKn+ri5s94pDzjeeb8HxmeEC85cA6+jOr6f1QncwHON+tD2FRO7HHp/yVVyZY\nU2RSxaLaFleRL4CwlQkiMoqynLFWbqQthqdeJx2onNyGoO8uBDqfMJVBhOjwb8jI\n3SZt1Z6BJ076CMMOiLI7moZsWQKBgQDMgBdWND+uTR0SHXWqF1hj/+UgwHBqQKio\nyWbnIO28uFyMscfBAgh7JJbqcJIh6A+M9NdD4TveqZWoYBaUHkMBg5VGcmWrCH+L\nJOlAVJmhy4GgpE2nkYE0ZgDd0qlViYeTOKaLSKchPrLxRKNI9eeWkKqrk/a7wBHh\nsGJbt8p7IwKBgQCvFYaqAbZCpwFIX/ApNcn6DAmq5FAzVIxOmJrabEiTnCrQoyOA\nGovUocCwxeUgnX7i1UYo0DaAlupBiUnnu+vh91kiRczMsdLZI1c4gEtEUScfwPQA\nLaUPAnG3lrid0b1hlYe7eKnieKgWr1cNOuiKboK+zElX2gnQHtfH6+SKkQKBgDYW\nsxVz4FwDvWqrLBH+9rwMVNgizhjsXS+3hWYgiYDe6mu0IfdkyEV52gjMGXqqXGKV\n59HmYuVzyUetkos+rc5atULawxVHvCRbcO448iGfJ/wLORbXH2tyh0wkifE73QYN\nd89jOgFLCh1SYDXOBKEIRnv3OM1T8ebVtk44AHAtAoGAfOprlkWEDyVnfHQjGxxx\nTrxhEAjw3+ikM+wQJj7vumnpg91eAFNcwRUa/ykbVOmj6z/fBnStAbsG7mMQwa1M\nyIVPTvUogrsTHvf9GaG0IaAVJn/Su2DVNqQeL/ZpDmu2+wC959g8z665BKLzm3S8\nFc0eV1a7FN4GOpKNvXuDMBc=\n-----END PRIVATE KEY-----\n",
"client_email": "clinic-chats-bot@botforclinic-436512.iam.gserviceaccount.com",
"client_id": "105253150604049743778",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/clinic-chats-bot%40botforclinic-436512.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}

16
config.ini

@ -0,0 +1,16 @@
[WEB_APP]
PORT = 8084
template_folder = C:\TgBotPage\webApp\templates
environment = test
[GOOGLE]
type = service_account
project_id = botforclinic-436512
private_key_id = 0c117dd103a890d20705d9e66bbfde56f9d65a05
private_key = -----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC4XOtHBzxPR4lb\nqiX8grd2XBfBxXZLgLKTkz4WRcncgBpACXKms5AtKF707uKCvgUD8SwTpzvfY3oz\nvzLQs0uZoM9RALw5ui9dlimdoYQGsuH5LAUX68w0oPyour36XeBqacxNoEeO5C2F\nbb4+ql4gC2qJT86aBt2kwKpTxnTPZxvYoKZ0TwsmN8gj9vNckONbSSZteMKpQA50\nRqpoLM0EpsB64HRSiu8mH+bkdLK9ZMEZGmOG7pNDijctGkgAy9rK9vurH4PRgIMt\n7j+q/EeBQDuZX2SSVIaMkiFkDhHVGd84CFzcodBIYOSiCDer7aIcv8SrcYGZ0QJD\nnIzTqZMrAgMBAAECggEAW3HHR2dI3D/s2xkVl15U1nHOXM/vIXsX2EgH2y9JdUPb\nAVlOU24sPKHSG6YjltrejPqCNMtV0LM8SU90Sn0sKerP+esl8XIujTpusN+Mp2/x\n0tApRJiyJIaXW6+ojHck2VNZwUUXSUJXa9+npdiGMFnJQYtivBZcuJvRwBTnGnm/\ntuwQUcQREPy8IaaX5j+xPf390KeXqNOopULW7FtItkHthM18fr6706X1GQ77ua23\nzz1DT2PfIxOu2e3uPJ1O1CsQ8UiTIAm3J0nNgbpau1nP2+ea62vCrjmuqcyn5dfb\nhpgGD7Qe8uRvU+EICr67sOW47ikjAqkM38lZFgufuQKBgQDmypfFTYke7oDTZ8GE\nZFHZKn+ri5s94pDzjeeb8HxmeEC85cA6+jOr6f1QncwHON+tD2FRO7HHp/yVVyZY\nU2RSxaLaFleRL4CwlQkiMoqynLFWbqQthqdeJx2onNyGoO8uBDqfMJVBhOjwb8jI\n3SZt1Z6BJ076CMMOiLI7moZsWQKBgQDMgBdWND+uTR0SHXWqF1hj/+UgwHBqQKio\nyWbnIO28uFyMscfBAgh7JJbqcJIh6A+M9NdD4TveqZWoYBaUHkMBg5VGcmWrCH+L\nJOlAVJmhy4GgpE2nkYE0ZgDd0qlViYeTOKaLSKchPrLxRKNI9eeWkKqrk/a7wBHh\nsGJbt8p7IwKBgQCvFYaqAbZCpwFIX/ApNcn6DAmq5FAzVIxOmJrabEiTnCrQoyOA\nGovUocCwxeUgnX7i1UYo0DaAlupBiUnnu+vh91kiRczMsdLZI1c4gEtEUScfwPQA\nLaUPAnG3lrid0b1hlYe7eKnieKgWr1cNOuiKboK+zElX2gnQHtfH6+SKkQKBgDYW\nsxVz4FwDvWqrLBH+9rwMVNgizhjsXS+3hWYgiYDe6mu0IfdkyEV52gjMGXqqXGKV\n59HmYuVzyUetkos+rc5atULawxVHvCRbcO448iGfJ/wLORbXH2tyh0wkifE73QYN\nd89jOgFLCh1SYDXOBKEIRnv3OM1T8ebVtk44AHAtAoGAfOprlkWEDyVnfHQjGxxx\nTrxhEAjw3+ikM+wQJj7vumnpg91eAFNcwRUa/ykbVOmj6z/fBnStAbsG7mMQwa1M\nyIVPTvUogrsTHvf9GaG0IaAVJn/Su2DVNqQeL/ZpDmu2+wC959g8z665BKLzm3S8\nFc0eV1a7FN4GOpKNvXuDMBc=\n-----END PRIVATE KEY-----\n
client_email = clinic-chats-bot@botforclinic-436512.iam.gserviceaccount.com
client_id = 105253150604049743778
auth_uri = https://accounts.google.com/o/oauth2/auth
token_uri = https://oauth2.googleapis.com/token
auth_provider_x509_cert_url = https://www.googleapis.com/oauth2/v1/certs
client_x509_cert_url = https://www.googleapis.com/robot/v1/metadata/x509/clinic-chats-bot%40botforclinic-436512.iam.gserviceaccount.com
universe_domain = googleapis.com

3
config/__init__.py

@ -0,0 +1,3 @@
import configparser
config = configparser.ConfigParser()
config.read('config.ini')

BIN
config/__pycache__/__init__.cpython-38.pyc

Binary file not shown.

6
run.bat

@ -0,0 +1,6 @@
@echo off
Title TgBotUGN
cd C:\TgBotPage
CALL venv\Scripts\activate
python web_run.py
pause

26
webApp/__init__.py

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
import datetime
from flask import Flask
import logging
from config import config
import sys, os
import sys, asyncio
webApp = Flask(__name__, instance_relative_config=True, template_folder=config['WEB_APP']['template_folder'])
__version__ = '1.0.1.0'
webApp.config['SECRET_KEY'] = '2qwtq2'
webApp.config['INTERNAL_API_KEY'] = 'lGR9g09RW5cE07rKivRNIH9f'
webApp.config['REMOTE_LOGIN_KEY'] = 'oRTiLTHeNTraZEsI'
webApp.config['SESSION_COOKIE_SAMESITE'] = "None"
webApp.config['SESSION_COOKIE_SECURE'] = True
webApp.jinja_env.add_extension('pypugjs.ext.jinja.PyPugJSExtension')
logging.basicConfig(level = logging.INFO)
from webApp.helper import jinjaHelper
from webApp.interfaces import *

BIN
webApp/__pycache__/__init__.cpython-38.pyc

Binary file not shown.

BIN
webApp/helper/__pycache__/jinjaHelper.cpython-38.pyc

Binary file not shown.

17
webApp/helper/jinjaHelper.py

@ -0,0 +1,17 @@
import config
from webApp import webApp
import random, string
import datetime
DICT = {}
@webApp.context_processor
def example():
def randomString(stringLength=10):
if config.config['WEB_APP']['environment'] == 'test':
letters = string.ascii_lowercase
return ''.join(random.choice(letters) for i in range(stringLength))
else:
return config.config['WEB_APP']['FRONTEND_VERSION']
return dict(randomString = randomString)

2
webApp/interfaces/__init__.py

@ -0,0 +1,2 @@
from webApp.interfaces.dependencies import *
from webApp.interfaces.pagesController import *

BIN
webApp/interfaces/__pycache__/__init__.cpython-38.pyc

Binary file not shown.

BIN
webApp/interfaces/__pycache__/dependencies.cpython-38.pyc

Binary file not shown.

BIN
webApp/interfaces/__pycache__/pagesController.cpython-38.pyc

Binary file not shown.

16
webApp/interfaces/dependencies.py

@ -0,0 +1,16 @@
from flask import send_from_directory, send_file, redirect, jsonify, make_response
from webApp import webApp
from config import config
import os
@webApp.route('/css/<path:path>')
def send_css(path):
resp = make_response(send_from_directory(os.path.join(config['WEB_APP']['template_folder'], 'static/css'), path), 200)
resp.headers['Cache-Control'] = 'public, max-age=31536000'
return resp
@webApp.route('/js/<path:path>')
def send_js(path):
resp = make_response(send_from_directory(os.path.join(config['WEB_APP']['template_folder'], 'static/js'), path), 200)
resp.headers['Cache-Control'] = 'public, max-age=31536000'
return resp

54
webApp/interfaces/pagesController.py

@ -0,0 +1,54 @@
from flask import abort, request, render_template, url_for, jsonify
from webApp import *
from webApp import webApp
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import json
import datetime
from config import config
# Авторизация Google API
def authorize_google():
# google_json = {}
# for key in config["GOOGLE"].keys():
# google_json[key] = config["GOOGLE"][key]
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("botforclinic-436512-0c117dd103a8.json", scope)
# creds = ServiceAccountCredentials.from_json_keyfile_dict(google_json, scope)
client = gspread.authorize(creds)
return client
# Обработка формы
@webApp.route('/form_submit', methods=['POST'])
def form_submit():
data = json.loads(request.data)
# {'fio': '', 'tel': '', 'email': '', 'passport': '', 'passport_date': '', 'postal_code': '', 'address': '', 'snils': '', 'inn': '', 'dob': ''}
data['current_time'] = datetime.datetime.now().strftime("%d.%m.%Y, %H:%M")
print(data)
# Авторизация и добавление данных в Google Sheets
sheet = authorize_google().open("Информация о сотрудниках").sheet1
sheet.append_row([
data['fio'],
data['tel'],
data['email'],
data['passport'][:4],
data['passport'][4:],
data['passport_issued_by'],
data['passport_date'],
data['postal_code'],
data['address'],
data['snils'],
data['inn'],
data['dob'],
data['user_id'], # Записываем Telegram ID пользователя
data['current_time'] # Записываем время отправки данных
])
return jsonify({'success':True})
@webApp.route('/')
def main_page_2_0():
return render_template('2.0/main_page.pug', user_id=request.args.get('user_id', None))

22
webApp/templates/2.0/application.pug

@ -0,0 +1,22 @@
doctype html
html.custom-font(lang="ru", style="font-family: Montserrat;")
head
meta(charset="utf-8")
meta(name="viewport" content="width=device-width, initial-scale=1.0")
meta(name="yandex-verification" content="e7a14bc685ede8b8")
title="Клиника \"Ухо, Горло, Нос\""
link(rel="stylesheet" href="/css/third_part/bootstrap.min.css?q="~randomString())
script(type="text/javascript", src="/js/third_part/jquery-3.3.1.min.js")
script(type="text/javascript", src="/js/third_part/popper.min.js")
script(type="text/javascript", src="/js/third_part/bootstrap.bundle.min.js?q="~randomString())
script(type="text/javascript", src="/js/third_part/select2.min.js")
link(rel="stylesheet" href="/css/third_part/select2.min.css")
link(rel="stylesheet" href="/css/third_part/select2-bootstrap-5-theme.min.css")
link(rel="stylesheet" href="/css/third_part/fontawesome_all.css")
body

52
webApp/templates/2.0/main_page.pug

@ -0,0 +1,52 @@
include 2.0/application
link(rel="stylesheet" href="/css/1_model_app.css")
link(rel="stylesheet" href="/css/1_model_icons.css")
script(type="text/javascript", src="/js/2.0.dashboard.js?q="~randomString())
.enterblock.custom-font
.row.mx-auto.h-100(style='max-width: 448px; vertical-align: middle;')
.col-12.my-md-auto.p-0.card.shadow.rounded-3(style='min-height: 500px; height: auto;')
.card-body.px-0.pb-0
h5.mx-4.fw-bold="Заполните форму"
input.tg_input#user_id(hidden, value=user_id)
.my-3.mx-4
label.form-label.m-0(for="fio")='ФИО'
input.form-control.tg_input#fio
.my-3.mx-4
label.form-label.m-0(for="tel")='Телефон'
input.form-control.tg_input#tel
.my-3.mx-4
label.form-label.m-0(for="email")='Электронная почта'
input.form-control.tg_input#email
.my-3.mx-4
label.form-label.m-0(for="passport")='Серия и номер паспорта'
input.form-control.tg_input#passport
.my-3.mx-4
label.form-label.m-0(for="passport_date")='Дата выдачи паспорта'
input.form-control.tg_input#passport_date(type="date")
.my-3.mx-4
label.form-label.m-0(for="postal_code")='Кем выдан'
input.form-control.tg_input#passport_issued_by
.my-3.mx-4
label.form-label.m-0(for="postal_code")='Код подразделения'
input.form-control.tg_input#postal_code
.my-3.mx-4
label.form-label.m-0(for="address")='Место жительства'
input.form-control.tg_input#address
.my-3.mx-4
label.form-label.m-0(for="snils")='СНИЛС'
input.form-control.tg_input#snils
.my-3.mx-4
label.form-label.m-0(for="inn")='ИНН'
input.form-control.tg_input#inn
.my-3.mx-4
label.form-label.m-0(for="dob")='Дата рождения'
input.form-control.tg_input#dob(type="date")
.my-3.mx-4
button.btn.btn-success.float-end.mb-3#form_submit
span.spinner-border.spinner-border-sm.me-1.d-none(role="status" aria-hidden="true")
span="Подтвердить"

669
webApp/templates/static/css/1_model_app.css

@ -0,0 +1,669 @@
/*
DEMO STYLE
*/
@import "/css/fonts/montserrat.css";
@import url("https://use.fontawesome.com/releases/v6.1.0/js/all.js");
html, body {
font-family: 'Montserrat', serif;
height: 100%;
z-index:1;
}
.enterblock {
width: 100%;
max-width: 500px;
height: 100%;
margin: auto;
position: absolute;
top: 0; left: 0; bottom: 0; right: 0;
}
.custom-font{
font-family: Montserrat, serif;
}
.obst_place {
cursor: pointer;
}
.obst_place:hover {
cursor: pointer;
background-color: #ebd0f7 !important;
color: #6e3288 !important;
}
.template_list_visit {
color: #999
}
.template_list_visit.active {
color: #000
}
.obst_place.active {
background-color: #AF80C3 !important;
color: #fff !important;
}
.absolute-bottom{
position: fixed;
bottom: 3rem!important;
right: 3rem!important;
padding-top: 2px;
padding-bottom: 2px;
z-index: 999;
background-color: rgba(255,255,255,0.0);
}
.box-ai {
border-bottom: 1px solid #E8F0FE !important;
border-right: 1px solid #E8F0FE !important;
background-color: #eaf2ff6e;
border-bottom-right-radius: 2rem !important;
position: relative;
top: -30px;
}
.page-title{
color: #6e3288;
font-weight: 400;
}
/*
VERTICAL NAVBAR
TODO: Добавить всем элементам класс-указатель, что они относятся к sidebar
*/
.cont{
background-color: #fff;
}
#logout_btn{
text-decoration: none;
color: #6e3288;
}
@media (max-width: 992px) {
#app_navigation .sidebar-toggler
{
display: none !important;
}
.cont{
margin-left: 0px !important;
}
.sidebar.navbar-brand {
color: #6e3288 !important;
background-color: white;
margin-left: 10px;
}
.sidebar.navbar {
width: 100% !important;
box-shadow: 0 .1rem .2rem rgba(0,0,0,.1)!important;
}
.sidebar.navbar-nav{
display: grid;
grid-template-columns: repeat(3, auto);
grid-gap: 10px;
grid-auto-flow: row;
padding-left: 5px;
padding-right: 5px;
}
.sidebar.nav-item
{
width: 80%;
text-align: center;
position: relative;
display: flex;
}
.sidebar.nav-item-text{
opacity: 100% !important;
}
.currentuser-span{
opacity: 100% !important;
}
.navbar-brand{
font-size: 1.25rem !important;
padding-top: 0px !important;
}
.sidebar.nav-link
{
color: #AF80C3 !important;
margin: auto;
display: flex;
flex-direction: column-reverse;
}
.sidebar.nav-item.active .sidebar.nav-link
{
color: white !important;
z-index: 2;
font-weight: bold;
font-weight: bold;
}
.sidebar.nav-item.active{
background-color: #50398C;
border-radius: 20px 20px 20px 20px;
height: 70px;
}
}
@media (min-width: 992px) {
.cont{
margin-left: 250px;
}
.sidebar.navbar,
.sidebar.navbar-collapse {
flex-direction: column;
}
.sidebar.navbar-expand-lg .navbar-nav {
flex-direction: column;
}
.sidebar.navbar-nav{
flex-direction: column !important;
text-align: end;
align-items: flex-end;
grid-template-columns: repeat(3, auto);
grid-gap: 10px;
grid-auto-flow: row;
padding-left: 5px;
padding-right: 0px;
}
.sidebar.navbar {
width: 250px;
height: 100vh;
min-height: 100%;
align-items: flex-start;
position: fixed !important;
}
.sidebar.navbar-brand {
color: #6e3288 !important;
font-weight: 500 !important;
text-align: center;
height: 70px;
padding-top: 30px !important;
background-color: white;
width: 100%!important;
}
.sidebar.navbar-collapse{
align-items: start !important;
width: 100%;
}
.sidebar.nav-item
{
width: 80%;
text-align: end;
position: relative;
display: flex;
}
.sidebar.nav-link
{
color: #AF80C3 !important;
margin-left: 20px;
}
.sidebar.nav-item.active .sidebar.nav-link
{
color: white !important;
z-index: 2;
margin-left: 30px;
margin-top: auto;
margin-bottom: auto;
font-weight: bold;
font-weight: bold;
}
.sidebar.nav-item.active{
background-color: #50398C;
border-radius: 20px 0 0 20px;
height: 70px;
}
.sidebar.nav-item:not(.active):hover{
font-weight: bold;
color: #6e3288 !important;
}
.sidebar.nav-item:not(.active):hover .icon-item{
color: #6e3288;
}
.sidebar.nav-item:not(.active):hover .sidebar.nav-link{
color: #6e3288 !important;
}
.sidebar.nav-item-text{
white-space: nowrap !important;
}
.icon-item{
color: #A83971;
line-height: 40px;
width: 50px;
left: -25px;
position: absolute;
display: flex;
top: 0px;
}
.sidebar.nav-item.active.active .icon-item{
height: 50px;
width: 50px;
background: #A83971;
z-index: 2;
top: 10px;
left: -25px;
position: absolute;
border-radius: 15px 15px 0px 15px;
display: flex;
align-items: center;
color: #C6CB45;
}
.sidebar-toggler
{
position: absolute;
right: 10px;
bottom: 10px;
}
/* #logout_btn{
display: none;
}*/
}
/*
PAGE NAVIGATION
*/
.p-link{
color: black;
font-weight: 500;
}
.p-link.active{
color: #50398C;
border-bottom: 3px solid #50398C;
font-weight: 500;
}
/*
PLUS DROPDOWN
*/
.plus-item{
height: 50px;
width: 50px;
background: #866EC6;
border-radius: 15px 15px 0px 15px;
align-items: center;
color: #FFF;
align-items: center;
display: flex;
}
.plus-item-dashboard {
height: 37px;
width: 37px;
background: #fff;
border-radius: 50%;
align-items: center;
color: #6E3288;
align-items: center;
display: flex;
/* padding-left: 3px;
padding-top: 3px; */
}
.plus-item-sm{
height: 40px !important;
width: 40px !important;
border-radius: 10px 10px 0px 10px;
}
.plus-dropdown{
background-color: rgba(255, 255, 255, .50) !important;
backdrop-filter: blur(5px) !important;
}
.plus-dd-item:hover{
background-color: white !important;
color: #6e3288 !important;
font-weight: 500;
}
.plus-dd-item{
color: #6e3288 !important;
}
/*
Notifications_menu
*/
.notifications-menu{
display: flex;
height: 50px;
width: 50px;
background: #C6CB45;
border-radius: 15px 15px 15px 0px;
align-items: center;
color: #FFF;
align-items: center;
}
/*
GLASS MODAl
*/
/*
.glass-modal .modal-dialog .modal-content{
background-color: rgba(255, 255, 255, .5);
backdrop-filter: blur(5px) !important;
}
.modal-backdrop {
background-color: rgba(255, 255, 255, 0.15) !important;
backdrop-filter: blur(5px) !important;
opacity: 95% !important;
}
*/
.camera-item{
width: 100%;
position: fixed;
bottom: 0px;
z-index: 1;
left: 0px;
height: 80px;
background-color: rgba(150, 150, 150, 0.15) !important;
backdrop-filter: blur(5px) !important;
}
.camera-plus{
height: 60px;
width: 60px;
background: #fff;
border: 2px solid #6E3288;
border-radius: 30px 30px 30px 30px;
left: calc(50% - 30px);
position: relative;
top: calc(40px - 30px);
}
.preview_img{
max-width: 100%;
max-height: 100%;
}
.control_card.hidden_info:hover{
background-color: #daf;
cursor: pointer;
}
.breadcrumb-select:focus{
border-color: inherit !important;
-webkit-box-shadow: none !important;
box-shadow: none !important;
}
.breadcrumb-select{
border: none !important;
outline:0px !important;
}
.user_row{
cursor: pointer;
}
.overflow-auto::-webkit-scrollbar {
width: 8px;
}
.overflow-auto::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.1);
border-radius: 10px;
}
.overflow-auto::-webkit-scrollbar-thumb {
border-radius: 10px;
background-color: #AF80C4;
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0);
}
@media (min-width: 1200px) {
.control_visits_overflow{
height:90vh;
}
}
@media (max-width: 1199px) {
.control_visits_overflow{
height:90vh;
}
}
@media (max-width: 991px) {
.control_visits_overflow{
height:85vh;
}
}
@media (max-width: 767px) {
.control_visits_overflow{
height:80vh;
margin-bottom: 20px;
}
}
@media (max-width: 479px) {
.control_visits_overflow{
height:70vh;
}
}
.exams-check:checked {
background-color: #198754 !important;
border-color: #198754 !important;
}
.exams-check:disabled{
opacity: 1 !important;
}
.exams-check:disabled~.form-check-label, .exams-check[disabled]~.form-check-label {
opacity: 1 !important;
}
.btn-arrow {
background-color: #fff !important;
color: #777 !important;
}
.btn-arrow:hover {
color: #000 !important;
}
.visit_diagnos:first-child {
.row > .col-3 > .diag_up{
pointer-events:none;
color: #eee !important;
}
}
.visit_diagnos:last-child {
.row > .col-3 > .diag_down{
pointer-events:none;
color: #eee !important;
}
}
#conclusion_box{
display:inline-block;
position:relative;
width: 100%;
}
#conclusion_buttons_box{
display: none;
}
#conclusion_box:hover{
#conclusion_buttons_box{
display: block;
position:absolute;
top: 4px;
left: 5px;
}
#conclusion_buttons_box > .btn-sm{
padding: 0px 3px;
}
}
#conclusion_box:hover > textarea{
padding-top: 28px;
}
.btn-plus{
box-sizing: content-box;
width: 1em;
height: 1em;
padding: 0.25em 0.25em;
color: #000;
border: 0;
border-radius: 0.25rem;
background: transparent;
}
.tag-span{
background: rgba(255,255,255, .6);
}
.change_probe:hover{
opacity: 50%;
}
.form-control-sm{
height: 29px;
}
.visit-navs .active{
border-bottom: 4px solid #6e3288 !important;
color: #6e3288 !important;
}
.visit-navs .nav-link{
text-decoration: none;
color: #777;
}
/*
Waiting spinner
*/
.lds-ripple {
/* change color here */
color: #6e3288
}
.lds-ripple,
.lds-ripple div {
box-sizing: border-box;
}
.lds-ripple {
display: inline-block;
position: relative;
width: 80px;
height: 80px;
}
.lds-ripple div {
position: absolute;
border: 4px solid currentColor;
opacity: 1;
border-radius: 50%;
animation: lds-ripple 1s cubic-bezier(0, 0.2, 0.8, 1) infinite;
}
.lds-ripple div:nth-child(2) {
animation-delay: -0.5s;
}
@keyframes lds-ripple {
0% {
top: 36px;
left: 36px;
width: 8px;
height: 8px;
opacity: 0;
}
4.9% {
top: 36px;
left: 36px;
width: 8px;
height: 8px;
opacity: 0;
}
5% {
top: 36px;
left: 36px;
width: 8px;
height: 8px;
opacity: 1;
}
100% {
top: 0;
left: 0;
width: 80px;
height: 80px;
opacity: 0;
}
}
/*Кнопки эндоскопа*/
.modern_button{
position: relative;
border-radius: 50%;
outline: none;
border: 0px;
background: rgba(0, 0, 0, 0.2);
backdrop-filter: blur(10.3px);
-webkit-backdrop-filter: blur(10.3px);
color: #fff;
}
.modern_button.modb_lg{
width: 5em;
height: 5em;
}
.modern_button.modb_md{
width: 3em;
height: 3em;
}
.modern_button.modb_lg span{
font-size: 22px;
}
.modern_button.modb_md span{
font-size: 16px;
}
.red.modern_button:hover{
color: rgba(255, 0, 0, 1);
}
.red.modern_button.checked{
background: rgba(255, 0, 0, 1);
}
.red.modern_button.checked:hover{
color: rgba(255, 255, 255, 1) !important;
}
.green.modern_button:hover{
color: rgba(0, 255, 0, 1);
}
.green.modern_button.checked{
background: rgba(0, 255, 0, 1);
}
.green.modern_button.checked:hover{
color: rgba(255, 255, 255, 1) !important;
}
.orange.modern_button:hover{
color: rgba(255, 156, 0, 1);
}
.orange.modern_button.checked{
background: rgba(255, 156, 0, 1);
}
.orange.modern_button.checked:hover{
color: rgba(255, 255, 255, 1) !important;
}
.modern_button:disabled {
background-color: dimgrey !important;
color: linen !important;
opacity: 1;
}
.modern-card{
border-radius: inherit;
box-shadow: 5px 5px 10px #141414, -5px -5px 10px #525252;
}
/*HotKeys*/
.hotkey-card:focus{
border: 1px solid blue !important;
}

12
webApp/templates/static/css/1_model_icons.css

@ -0,0 +1,12 @@
@import url("https://use.fontawesome.com/releases/v6.1.0/js/all.js");
.server-icn::before {
font-family: 'Font Awesome\ 5 Free';
content: "\f233";
font-weight: 900;
margin-right: 3px;
}
.m-off::before{
margin: 0px !important;
}

BIN
webApp/templates/static/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw0aXpsog.woff2

Binary file not shown.

BIN
webApp/templates/static/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw2aXpsog.woff2

Binary file not shown.

BIN
webApp/templates/static/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw3aXpsog.woff2

Binary file not shown.

BIN
webApp/templates/static/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2

Binary file not shown.

BIN
webApp/templates/static/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw9aXpsog.woff2

Binary file not shown.

40
webApp/templates/static/css/fonts/montserrat.css

@ -0,0 +1,40 @@
/* cyrillic-ext */
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 400;
src: url(/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw0aXpsog.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
/* cyrillic */
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 400;
src: url(/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw9aXpsog.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* vietnamese */
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 400;
src: url(/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw2aXpsog.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 400;
src: url(/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw3aXpsog.woff2) format('woff2');
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 400;
src: url(/css/fonts/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Hw5aXo.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

6
webApp/templates/static/css/third_part/bootstrap.min.css vendored

File diff suppressed because one or more lines are too long

6
webApp/templates/static/css/third_part/fontawesome_all.css

File diff suppressed because one or more lines are too long

3
webApp/templates/static/css/third_part/select2-bootstrap-5-theme.min.css vendored

File diff suppressed because one or more lines are too long

1
webApp/templates/static/css/third_part/select2.min.css vendored

File diff suppressed because one or more lines are too long

BIN
webApp/templates/static/css/webfonts/fa-brands-400.ttf

Binary file not shown.

BIN
webApp/templates/static/css/webfonts/fa-brands-400.woff2

Binary file not shown.

BIN
webApp/templates/static/css/webfonts/fa-regular-400.ttf

Binary file not shown.

BIN
webApp/templates/static/css/webfonts/fa-regular-400.woff2

Binary file not shown.

BIN
webApp/templates/static/css/webfonts/fa-solid-900.ttf

Binary file not shown.

BIN
webApp/templates/static/css/webfonts/fa-solid-900.woff2

Binary file not shown.

BIN
webApp/templates/static/css/webfonts/fa-v4compatibility.ttf

Binary file not shown.

BIN
webApp/templates/static/css/webfonts/fa-v4compatibility.woff2

Binary file not shown.

67
webApp/templates/static/js/2.0.dashboard.js

@ -0,0 +1,67 @@
function show_error(message){
$('#error_alert').slideDown(500);
$('#error_alert').delay(2000).slideUp();
if (message)
$('#alert_error_text').text(message)
}
function show_success(message){
$('#success_alert').slideDown(500);
$('#success_alert').delay(2000).slideUp();
if (message)
$('#alert_success_text').text(message)
}
function validate_length(val, dest_len){
if(val.length < dest_len){
return false;
}
return true;
}
$(document).ready(function(){
$('body').append('<div id="error_alert" class="alert alert-danger" role="alert" style="position: fixed; top: 50px; left: 10%; right: 10%; z-index: 9999; display: none;">Ошибка<br><small id="alert_error_text"></small></div>');
$('body').append('<div id="success_alert" class="alert alert-success" role="alert" style="position: fixed; top: 50px; left: 10%; right: 10%; z-index: 9999; display: none;">Успех<br><small id="alert_success_text"></small></div>');
$('#fio').on("input", function(){
console.log($('#fio').val());
});
$("#form_submit").click(function(){
$(this).children(".spinner-border").removeClass('d-none');
$(this).attr("disabled", true);
message = {}
if(!(validate_length($('#fio').val(), 3)))
{
show_error('Введите ФИО', false);
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
return;
}
$.each($('.tg_input'), function(e) {
message[$(this).prop("id")] = $(this).val();
});
console.log(message);
$.ajax({
type: "post",
url: "/form_submit",
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
async: true,
data: JSON.stringify(message),
success: (data) => {
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
console.log(data);
show_success("Данные сохранены!")
},
error:function (jqXHR, exception) {
$(this).children(".spinner-border").addClass('d-none');
$(this).removeAttr("disabled");
show_error('Что-то пошло не так', false)
}
});
});
});

7
webApp/templates/static/js/third_part/bootstrap.bundle.min.js vendored

File diff suppressed because one or more lines are too long

6
webApp/templates/static/js/third_part/fontawesome_all.js

File diff suppressed because one or more lines are too long

2
webApp/templates/static/js/third_part/jquery-3.3.1.min.js vendored

File diff suppressed because one or more lines are too long

60
webApp/templates/static/js/third_part/jquery.scroll-spy.js

@ -0,0 +1,60 @@
(function ($) {
'use strict';
let defaults = {
activeClass: 'active',
fixed: true
};
let container,
target,
activeClass,
fixed,
collection = [];
let init = function (params) {
let options = $.extend({}, defaults, params);
container = this;
target = options.target;
activeClass = options.activeClass;
fixed = options.fixed;
let hash = null, element = null;
$.each(target, function () {
(hash = this.href.split('#')[1]) !== undefined
? (element = container.find(`[id="${hash}"]`)).length > 0 ? collection.push({
link: $(this),
element: element
}) : null : null;
});
this.unbind('scroll', eventListener).bind('scroll', eventListener);
return this;
};
let eventListener = function () {
let relativeOffsetTop = collection.length > 0 ? collection[0].element.offset().top + container.scrollTop() : 0;
$.each(collection, function () {
let _ot = Math.floor(this.element.offset().top + container.scrollTop() - relativeOffsetTop);
let _st = Math.ceil(container.scrollTop());
if (_ot <= _st && _st < _ot + Math.floor(this.element.outerHeight())) {
if (!this.link.hasClass(activeClass)) {
target.removeClass(activeClass);
this.link.addClass(activeClass);
}
return false;
} else if (fixed) {
this.link.removeClass('active');
}
});
};
$.fn.scrollSpy = function (options) {
if (typeof options === 'object' && typeof options.target != "undefined") {
return init.apply(this, arguments);
} else {
$.error('You should use plugin with required options...');
}
};
})(jQuery);

1
webApp/templates/static/js/third_part/jquery.scroll-spy.min.js vendored

@ -0,0 +1 @@
!function(t){"use strict";let e,l,i,s,n={activeClass:"active",fixed:!0},o=[],r=function(){let n=o.length>0?o[0].element.offset().top+e.scrollTop():0;t.each(o,function(){let t=Math.floor(this.element.offset().top+e.scrollTop()-n),o=Math.ceil(e.scrollTop());if(t<=o&&o<t+Math.floor(this.element.outerHeight()))return this.link.hasClass(i)||(l.removeClass(i),this.link.addClass(i)),!1;s&&this.link.removeClass("active")})};t.fn.scrollSpy=function(h){if("object"==typeof h&&void 0!==h.target)return function(h){let c=t.extend({},n,h);e=this,l=c.target,i=c.activeClass,s=c.fixed;let u=null,a=null;return t.each(l,function(){void 0!==(u=this.href.split("#")[1])&&(a=e.find(`[id="${u}"]`)).length>0&&o.push({link:t(this),element:a})}),this.unbind("scroll",r).bind("scroll",r),this}.apply(this,arguments);t.error("You should use plugin with required options...")}}(jQuery);

5
webApp/templates/static/js/third_part/popper.min.js vendored

File diff suppressed because one or more lines are too long

225
webApp/templates/static/js/third_part/scrollspy.js

@ -0,0 +1,225 @@
/**
* Extend jquery with a scrollspy plugin.
* This watches the window scroll and fires events when elements are scrolled into viewport.
*
* throttle() and getTime() taken from Underscore.js
* https://github.com/jashkenas/underscore
*
* @author Copyright 2013 John Smart
* @license https://raw.github.com/thesmart/jquery-scrollspy/master/LICENSE
* @see https://github.com/thesmart
* @version 0.1.2
*/
(function($) {
var jWindow = $(window);
var elements = [];
var elementsInView = [];
var isSpying = false;
var ticks = 0;
var offset = {
top : 0,
right : 0,
bottom : 0,
left : 0,
}
/**
* Find elements that are within the boundary
* @param {number} top
* @param {number} right
* @param {number} bottom
* @param {number} left
* @return {jQuery} A collection of elements
*/
function findElements(top, right, bottom, left) {
var hits = $();
$.each(elements, function(i, element) {
var elTop = element.offset().top,
elLeft = element.offset().left,
elRight = elLeft + element.width(),
elBottom = elTop + element.height();
var isIntersect = !(elLeft > right ||
elRight < left ||
elTop > bottom ||
elBottom < top);
if (isIntersect) {
hits.push(element);
}
});
return hits;
}
/**
* Called when the user scrolls the window
*/
function onScroll() {
// unique tick id
++ticks;
// viewport rectangle
var top = jWindow.scrollTop(),
left = jWindow.scrollLeft(),
right = left + jWindow.width(),
bottom = top + jWindow.height();
// determine which elements are in view
var intersections = findElements(top+offset.top, right+offset.right, bottom+offset.bottom, left+offset.left);
$.each(intersections, function(i, element) {
var lastTick = element.data('scrollSpy:ticks');
if (typeof lastTick != 'number') {
// entered into view
element.triggerHandler('scrollSpy:enter');
}
// update tick id
element.data('scrollSpy:ticks', ticks);
});
// determine which elements are no longer in view
$.each(elementsInView, function(i, element) {
var lastTick = element.data('scrollSpy:ticks');
if (typeof lastTick == 'number' && lastTick !== ticks) {
// exited from view
element.triggerHandler('scrollSpy:exit');
element.data('scrollSpy:ticks', null);
}
});
// remember elements in view for next tick
elementsInView = intersections;
}
/**
* Called when window is resized
*/
function onWinSize() {
jWindow.trigger('scrollSpy:winSize');
}
/**
* Get time in ms
* @license https://raw.github.com/jashkenas/underscore/master/LICENSE
* @type {function}
* @return {number}
*/
var getTime = (Date.now || function () {
return new Date().getTime();
});
/**
* Returns a function, that, when invoked, will only be triggered at most once
* during a given window of time. Normally, the throttled function will run
* as much as it can, without ever going more than once per `wait` duration;
* but if you'd like to disable the execution on the leading edge, pass
* `{leading: false}`. To disable execution on the trailing edge, ditto.
* @license https://raw.github.com/jashkenas/underscore/master/LICENSE
* @param {function} func
* @param {number} wait
* @param {Object=} options
* @returns {Function}
*/
function throttle(func, wait, options) {
var context, args, result;
var timeout = null;
var previous = 0;
options || (options = {});
var later = function () {
previous = options.leading === false ? 0 : getTime();
timeout = null;
result = func.apply(context, args);
context = args = null;
};
return function () {
var now = getTime();
if (!previous && options.leading === false) previous = now;
var remaining = wait - (now - previous);
context = this;
args = arguments;
if (remaining <= 0) {
clearTimeout(timeout);
timeout = null;
previous = now;
result = func.apply(context, args);
context = args = null;
} else if (!timeout && options.trailing !== false) {
timeout = setTimeout(later, remaining);
}
return result;
};
};
/**
* Enables ScrollSpy using a selector
* @param {jQuery|string} selector The elements collection, or a selector
* @param {Object=} options Optional.
throttle : number -> scrollspy throttling. Default: 100 ms
offsetTop : number -> offset from top. Default: 0
offsetRight : number -> offset from right. Default: 0
offsetBottom : number -> offset from bottom. Default: 0
offsetLeft : number -> offset from left. Default: 0
* @returns {jQuery}
*/
$.scrollSpy = function(selector, options) {
selector = $(selector);
selector.each(function(i, element) {
elements.push($(element));
});
options = options || {
throttle: 100
};
offset.top = options.offsetTop || 0;
offset.right = options.offsetRight || 0;
offset.bottom = options.offsetBottom || 0;
offset.left = options.offsetLeft || 0;
var throttledScroll = throttle(onScroll, options.throttle || 100);
var readyScroll = function(){
$(document).ready(throttledScroll);
};
if (!isSpying) {
jWindow.on('scroll', readyScroll);
jWindow.on('resize', readyScroll);
isSpying = true;
}
// perform a scan once, after current execution context, and after dom is ready
setTimeout(readyScroll, 0);
return selector;
};
/**
* Listen for window resize events
* @param {Object=} options Optional. Set { throttle: number } to change throttling. Default: 100 ms
* @returns {jQuery} $(window)
*/
$.winSizeSpy = function(options) {
$.winSizeSpy = function() { return jWindow; }; // lock from multiple calls
options = options || {
throttle: 100
};
return jWindow.on('resize', throttle(onWinSize, options.throttle || 100));
};
/**
* Enables ScrollSpy on a collection of elements
* e.g. $('.scrollSpy').scrollSpy()
* @param {Object=} options Optional.
throttle : number -> scrollspy throttling. Default: 100 ms
offsetTop : number -> offset from top. Default: 0
offsetRight : number -> offset from right. Default: 0
offsetBottom : number -> offset from bottom. Default: 0
offsetLeft : number -> offset from left. Default: 0
* @returns {jQuery}
*/
$.fn.scrollSpy = function(options) {
return $.scrollSpy($(this), options);
};
})(jQuery);

2
webApp/templates/static/js/third_part/select2.min.js vendored

File diff suppressed because one or more lines are too long

3
webApp/templates/static/js/third_part/showdown.min.js vendored

File diff suppressed because one or more lines are too long

382
webApp/templates/static/js/third_part/tour.js

@ -0,0 +1,382 @@
var Tour = (function() {
var t = [],
o, cur
T = {
step: {
pl: "krok",
en: "step",
be: "крок",
ca: "pas",
cs: "krok",
da: "trin",
de: "Schritt",
el: "βήμα",
es: "paso",
et: "samm",
fi: "vaihe",
fr: "étape",
hu: "lépés",
it: "passo",
lt: "žingsnis",
lv: "solis",
mk: "чекор",
nl: "stap",
no: "trinn",
pt: "passo",
ru: "шаг",
sk: "krok",
sl: "korak",
sq: "hapi",
sv: "steg",
tr: "adım",
uk: "крок"
},
Next: {
pl: "Następny",
en: "Next",
be: "Далей",
ca: "Següent",
cs: "Další",
da: "Næste",
de: "Weiter",
el: "Την επόμενη",
es: "Siguiente",
et: "Järgmine",
fi: "Seuraava",
fr: "Prochaine",
hu: "Következő",
it: "Accanto",
lt: "Kitas",
lv: "Nākamā",
mk: "Следна",
nl: "Volgende",
no: "Neste",
pt: "Próximo",
ru: "Далее",
sk: "Ďalej",
sl: "Naprej",
sq: "Tjetër",
sv: "Nästa",
tr: "Gelecek",
uk: "Далі"
},
Previous: {
pl: "Poprzedni",
en: "Previous",
be: "Папярэдні",
ca: "Anteriors",
cs: "Předchozí",
da: "Tidligere",
de: "Vorherige",
el: "Προηγούμενο",
es: "Anterior",
et: "Eelmine",
fi: "Edellinen",
fr: "Précédente",
hu: "Előző",
it: "Precedente",
lt: "Ankstesnis",
lv: "Iepriekšējā",
mk: "Претходна",
nl: "Vorige",
no: "Tidligere",
pt: "Anterior",
ru: "Предыдущий",
sk: "Predchádzajúce",
sl: "Prejšnji",
sq: "E mëparshme",
sv: "Föregående",
tr: "Önceki",
uk: "Попередній"
},
Finish: {
pl: "Zakończ",
en: "Finish",
be: "Аздабленне",
ca: "Acabat",
cs: "Dokončit",
da: "Finish",
de: "Finish",
el: "Τελειώνει",
es: "Acabado",
et: "Lõpeta",
fi: "Loppuun",
fr: "Finition",
hu: "Befejezés",
it: "Finitura",
lt: "Apdaila",
lv: "Apdare",
mk: "Заврши",
nl: "Afwerking",
no: "Ferdig",
pt: "Acabamento",
ru: "Отделка",
sk: "Povrch",
sl: "Zaključek",
sq: "Finish",
sv: "Avsluta",
tr: "Bitir",
uk: "Оздоблення"
}
};
function _t(s) {
return T[s][t[cur].language] || T[s]['en'];
}
function step(n) {
cur = n;
$('.tourStep, .tourBg').remove();
if (!t[n]) {
return;
}
$('body').append([
'<div class="tourStep popover" step="' + n + '">',
'<div class="arrow"></div>',
'<div class="card">',
'<div class="card-header">',
!t[n].close ? '' : '<button class="tourClose btn-close float-end">&times;&nbsp;</button>',
'</div>',
'<div class="card-body">',
t[n].content,
'</div>',
'<div class="card-footer">',
'<div class="pull-right">',
'<div class="tourPrev btn btn-default btn-sm">' + _t('Previous') + '</div> ',
'<div class="tourNext btn btn-primary btn-sm">' + _t('Next') + '</div>',
'</div>',
'</div>',
'</div>',
'</div>'
].join(''));
var el = $('.tourStep')
.addClass(t[n].position)
.css({
minWidth: 250
}),
x = 0,
y = 0;
if (t[n].element && !!t[n].element.length) {
var x1 = 1e6,
y1 = 1e6,
x2 = 0,
y2 = 0;
t[n].element.each(function(k, v) {
var ofs = $(v).offset();
x1 = Math.min(x1, ofs.left + t[n].forceCorrectionLeft);
y1 = Math.min(y1, ofs.top + t[n].forceCorrectionTop);
x2 = Math.max(x2, ofs.left + t[n].forceCorrectionLeft + t[n].forceCorrectionWidth
+ parseInt($(v).css('border-left-width'))
+ parseInt($(v).css('padding-left'))
+ $(v).width()
+ parseInt($(v).css('padding-right'))
+ parseInt($(v).css('border-right-width'))
);
y2 = Math.max(y2, ofs.top + t[n].forceCorrectionTop + t[n].forceCorrectionHeight
+ parseInt($(v).css('border-top-width'))
+ parseInt($(v).css('padding-top'))
+ $(v).height()
+ parseInt($(v).css('padding-bottom'))
+ parseInt($(v).css('border-bottom-width'))
);
});
switch (t[n].position) {
case 'top':
y = y1 - el.height();
x = ((x1 + x2) >> 1) - (el.width() >> 1);
break;
case 'right':
y = ((y1 + y2) >> 1) - (el.height()>> 1);
x = x2;
break;
case 'left':
y = ((y1 + y2) >> 1) - (el.height()>> 1);
x = x1 - el.width();
break;
case 'bottom':
y = y2;
x = ((x1 + x2) >> 1) - (el.width() >> 1);
break;
};
};
el
.css({
position: 'absolute',
left: x,
top: y
})
.show();
if (t[n].spotlight) {
var p = t[n].padding;
$('body').append(Array(5).join('<div class="tourBg"></div>'));
var pos = [
{
bottom: 'auto',
height: y1 - p
},
{
top: y2 + p,
height: $(document).height() - y2 - p
},
{
right: 'auto',
bottom: 'auto',
top: y1 - p,
width: x1 - p,
height: 2 * p + y2 - y1
},
{
left: x2 + p,
bottom: 'auto',
top: y1 - p,
height: 2 * p + y2 - y1
}
];
$('.tourBg')
.css({
position: 'absolute',
zIndex: 1000,
top: 0,
bottom: 0,
right: 0,
left: 0,
background: '#000',
opacity: 0.3
}).each(function(k, v){
$(v).css(pos[k]);
});
}
if (!!t[n].scroll) {
var my = ((Math.min(y, y1) + Math.max(y + el.height(), y2)) >> 1) - ($(window).height() >> 1),
mx = ((Math.min(x, x1) + Math.max(x + el.width(), x2)) >> 1) - ($(window).width() >> 1);
$('html, body').animate({
scrollTop: Math.max(0, Math.min(y, y1, my)),
scrollLeft: Math.max(0, Math.min(x, x1, mx))
});
}
if (!n) {
$('.tourPrev').remove();
}
if (n > t.length - 2) {
$('.tourNext').text(_t('Finish'));
}
$('.tourStep')
.on('click', '.tourNext:not([disabled])', Tour.next)
.on('click', '.tourPrev:not([disabled])', Tour.prev)
.on('click', '.tourClose:not([disabled])', Tour.close);
(t[n].onstep || Tour.onstep || function(){})(t[n]);
}
$(window).on('resize', function() {
if (!!Tour.onresize) {
Tour.onresize();
}
});
return {
run: function(tour, options) {
try {
t = [];
cur = 0;
o = {
close: true,
content: '',
language: 'en',
padding: 5,
position: 'right',
scroll: true,
spotlight: true,
forceCorrectionLeft: 0,
forceCorrectionTop: 0,
forceCorrectionWidth: 0,
forceCorrectionHeight: 0,
onstep: null,
};
for (var k in options) {
o[k] = options[k];
}
$(tour).each(function(k, v) {
for (var kk in o) {
v[kk] = v[kk] || o[kk];
};
if (v.element && !!v.element.length) {
t.push(v);
}
});
step(cur);
if (!!Tour.onstart) {
Tour.onstart();
}
} catch(e) {}
},
next: function() {
step(cur + 1);
if (cur == t.length) {
if (!!Tour.onfinish) {
Tour.onfinish();
}
}
},
prev: function(){
step(cur - 1);
},
current: function(){
return cur;
},
close: function(){
step(-1);
if (!!Tour.onclose) {
Tour.onclose();
}
},
onstart: null,
onfinish: null,
onclose: null,
onstep: null,
onresize: function() {
var n = cur - 1;
step(-1);
cur = n;
setTimeout(function() {
Tour.next();
}, 20);
}
};
})();

73
webApp/templates/static/js/third_part/videojs.zoomrotate.js

@ -0,0 +1,73 @@
console.log('zoomrotate: Start');
(function(){
var defaults, extend;
console.log('zoomrotate: Init defaults');
defaults = {
zoom: 1,
rotate: 0,
debug: true
};
extend = function() {
var args, target, i, object, property;
args = Array.prototype.slice.call(arguments);
target = args.shift() || {};
for (i in args) {
object = args[i];
for (property in object) {
if (object.hasOwnProperty(property)) {
if (typeof object[property] === 'object') {
target[property] = extend(target[property], object[property]);
} else {
target[property] = object[property];
}
}
}
}
return target;
};
/**
* register the zoomrotate plugin
*/
videojs.plugin('zoomrotate', function(settings){
if (defaults.debug) console.log('zoomrotate: Register init');
var options, player, video, poster;
options = extend(defaults, settings);
/* Grab the necessary DOM elements */
player = this.el();
video = this.el().getElementsByTagName('video')[0];
poster = this.el().getElementsByTagName('div')[1]; // div vjs-poster
if (options.debug) console.log('zoomrotate: '+video.style);
if (options.debug) console.log('zoomrotate: '+poster.style);
if (options.debug) console.log('zoomrotate: '+options.rotate);
if (options.debug) console.log('zoomrotate: '+options.zoom);
/* Array of possible browser specific settings for transformation */
var properties = ['transform', 'WebkitTransform', 'MozTransform',
'msTransform', 'OTransform'],
prop = properties[0];
/* Iterators */
var i,j;
/* Find out which CSS transform the browser supports */
for(i=0,j=properties.length;i<j;i++){
if(typeof player.style[properties[i]] !== 'undefined'){
prop = properties[i];
break;
}
}
/* Let's do it */
player.style.overflow = 'hidden';
video.style[prop]='scale('+options.zoom+') rotate('+options.rotate+'deg)';
poster.style[prop]='scale('+options.zoom+') rotate('+options.rotate+'deg)';
if (options.debug) console.log('zoomrotate: Register end');
});
})();
console.log('zoomrotate: End');

BIN
webApp/templates/static/pics/free-icon-gynecology.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
webApp/templates/static/pics/free-icon-sore-throat.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
webApp/templates/static/pics/free-icon-varicose-veins.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
webApp/templates/static/pics/logo.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
webApp/templates/static/pics/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
webApp/templates/static/pics/mail_logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
webApp/templates/static/pics/none.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
webApp/templates/static/pics/pirogov_cloud_icn.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
webApp/templates/static/pics/pointer.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
webApp/templates/static/pics/premium-icon-skin-disease.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
webApp/templates/static/pics/tg_logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

BIN
webApp/templates/static/pics/video.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

136
webApp/templates/static/remove/2.0.monitor.js

@ -0,0 +1,136 @@
$(document).ready(function () {
function get_file_info(image_id, reload){
$.ajax({
type: "GET",
url: '/2_0/get_file_info/'+image_id,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
async: true,
success: (data) => {
console.log(data)
tag_id = null;
if (reload == true)
$('#diagnoses_select').data('img', data['data']['hash_name']);
if (data['data']['user'] == 'Neural Network')
$('#nn_diagnos').text(data['data']['tag']);
else
{
if(data['data']['tag_id'])
{
if (reload == true){
$('#diagnoses_select').val(data['data']['tag_id']);
$('#diagnoses_select').trigger('change');
}
}
if (data['data']['nn'])
$('#nn_diagnos').text(data['data']['nn']['tag']);
}
}
});
}
function save_select(element){
if(element.value == 0)
return;
var message = {
diagnos_id: element.value,
pic_name: $(element).data('img'),
}
$.ajax({
type:'POST',
url: '/2.0/save_pic_diagnos',
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
console.log(data);
show_success('Данные сохранены', false);
},
error:function (jqXHR, exception) {
show_error('Не удалось сохранить данные', false);
}
});
}
function select_fill(){
lang = getUrlParameter('lang');
$('#diagnoses_select').empty();
$.ajax({
type:'GET',
url: '/get_diagnos_tags/'+$('#profarea').val()+'?lang='+lang,
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#diagnoses_select').append('<option value="0" disabled selected>Диагноз</option>');
for(tag_num in data)
{
var tag = data[tag_num]
if(tag['category_id'] == null && tag['diagnos'] == true)
{
var icd = ''
if (tag['icd'])
{
icd = tag['icd'] + ' '
}
$('#diagnoses_select').append('<option value="'+tag['id']+'">'+icd+tag['standart_name']+'</option>');
}
}
},
error:function (jqXHR, exception) {
}
});
}
function get_pics(){
$.ajax({
type:'GET',
url: '/get_new_files',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
let last_group = data['result']['groups'][0]
let last_file = data['result'][last_group][data['result'][last_group].length-1]
console.log(data['result'][last_group])
let path = last_file['hash_name']
if (last_file['id'] != $('#last_file').val()){
$("#exam_time").text(' от '+last_file['index_date'])
$('#nn_diagnos').text('');
$('#diagnoses_select').val(0);
$('#diagnoses_select').trigger('change');
$('#last_file').val(last_file['id']);
$('#video_play_file').hide();
$('#video_controls').hide();
$('#current_img').show();
$('#current_img').attr('src', '/img/'+path);
get_file_info(last_file['id'], true);
select_fill();
$('#diagnoses_select').on('change', function() {
save_select(this);
});
}
else
{
if ($('#nn_diagnos').text() == '')
{
get_file_info(last_file['id'], false)
}
console.log('Nothing new')
}
},
error:function (jqXHR, exception) {
}
});
}
$('#diagnoses_select').select2();
get_pics();
setInterval(() => get_pics(), 5000);
});

110
webApp/templates/static/remove/2.0.nikio.js

@ -0,0 +1,110 @@
$(document).ready(function () {
function update_pics(){
$.ajax({
type: "GET",
url: '/nikio/pics_list',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
async: !1,
success: (data) => {
$('#report_table').empty();
$('#total_pics').text(data['desc']['total_pics']);
$('#nn_true').text(data['desc']['nn_true']);
$('#nn_err').text(data['desc']['nn_err']);
$('#accuracy').text(Math.round(100/(data['desc']['nn_true']+data['desc']['nn_err'])*data['desc']['nn_true']));
for(num in data['data'])
{
let btn = ''
if (data['data'][num]['included'] == true){
btn = '<div class="btn btn-danger x-icn exclude" data-pic_id="'+data['data'][num]['pic_id']+'"></div>'
}
else
{
btn = '<div class="btn btn-success check-icn include" data-pic_id="'+data['data'][num]['pic_id']+'"></div>'
}
let html_text = '<tr style="background-color:'+data['data'][num]['color']+'">'//
html_text += '<td>'+data['data'][num]['init_user']+'</td><td><img src=/img/'+data['data'][num]['pic_src']+' style="max-width:256px;"></img></td>'+
'<td>'+data['data'][num]['doctor_dianosis']+'</td>'+'<td>'+data['data'][num]['expert_dianosis']+'</td>'+
'<td class="recalc" data-pic_id="'+data['data'][num]['pic_id']+'">'+data['data'][num]['nn_diagnosis']+'</td>'+
'<td>'+btn+'</td>'
html_text += '</tr>'
$('#report_table').append(html_text);
}
exclude_pic();
include_pic();
}
});
}
update_pics();
$('#recalculate').click(function(){
$.each($('.recalc'), function(e) {
console.log($(this).data('pic_id'));
var message = {
pic_id: $(this).data('pic_id')
}
$.ajax({
type:'POST',
url: '/nikio/recalculate',
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
console.log(data);
$(this).text(data['data']['nn_diagnosis']);
},
error:function (jqXHR, exception) {
}
});
});
})
function exclude_pic(){
$('.exclude').click(function(){
console.log($(this).data('pic_id'));
var message = {
pic_id: $(this).data('pic_id')
}
$.ajax({
type:'POST',
url: '/nikio/exclude',
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
update_pics()
},
error:function (jqXHR, exception) {
}
});
});
}
function include_pic(){
$('.include').click(function(){
console.log($(this).data('pic_id'));
var message = {
pic_id: $(this).data('pic_id')
}
$.ajax({
type:'POST',
url: '/nikio/include',
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
console.log('OK')
update_pics()
},
error:function (jqXHR, exception) {
}
});
});
}
});

55
webApp/templates/static/remove/2.0.projects_monitor.js

@ -0,0 +1,55 @@
$(document).ready(function () {
$('#clinic_select').on('change', function(){
console.log('change')
$('#answ_cards').append('<div class="col-xl-3 col-lg-4 col-md-6 clinic-card" data-clinic_id='+$(this).val()+'>' +
'<div class="card mb-2">' +
'<div class="modal-header px-3 py-2">' +
'<p class="my-auto fw-bold">'+$("#clinic_select option:selected").text()+'</p>' +
'<button type="button" data-bs-dismiss="modal" aria-label="Close" class="btn-close"></button>' +
'</div>' +
'<div class="card-body">' +
'<p>Снимков за период: <span class="total fw-bold"></span></p>' +
'<p>Изображения: <span class="images fw-bold"></span></p>' +
'<p>Видео: <span class="videos fw-bold"></span></p>' +
'<p>Другие: <span class="others fw-bold"></span></p>' +
'<button class="btn btn-sm btn-primary" data-clinic_id='+$(this).val()+'>Просмотр</button>' +
'</div>' +
'</div>' +
'</div>')
$('.btn-close').click(function(){
$(this).parent().parent().parent().remove()
})
update();
}
)
function update(time_param){
$.each($('.clinic-card'), function(e) {
var start_date = $('#start_date').val();
var end_date = $('#end_date').val();
$.ajax({
type: "GET",
url: '/project_report/' + $(this).attr('data-clinic_id') + '?time_param='+time_param +'&start_date='+start_date +'&end_date='+end_date,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
console.log(data)
$(this).find('.total').text(data['total']);
$(this).find('.images').text(data['images']);
$(this).find('.videos').text(data['videos']);
$(this).find('.others').text(data['others']);
},
error: function (jqXHR, exception) {
show_error('Не удалось загрузить данные',0);
}
})
});
}
$('#today').on('click', function() {update('today')});
$('#7days').on('click', function() {update('7days')});
$('#30days').on('click', function() {update('30days')});
$('#start_date').on('change', function() {update(null)});
$('#end_date').on('change', function() {update(null)});
// setInterval(() => update(), 1000);
});

82
webApp/templates/static/remove/add_patient.js

@ -0,0 +1,82 @@
$(document).ready(function () {
$('#add_patient').on('click', function(){add_patient(false)});
$('#add_and_start_visit').on('click', function(){add_patient(true)});
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
function add_patient(redirect){
fio = $('#fio').val();
dob = $('#dob').val();
med_card = $('#med_card').val();
sex = $('#sex').val();
telephone = $('#telephone').val();
email = $('#email').val();
false_form = false
lang = getUrlParameter('lang');
if(false_form==false)
{
var message = {
fio: fio,
dob:dob,
med_card:med_card,
sex:sex,
telephone:telephone,
email:email
}
$.ajax({
type:'POST',
url: '/add_patient',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
if(redirect == true){
if(lang == 'en')
window.location.href = '/visit/new_visit?patient_id='+data['id']+'?lang=en';
else
window.location.href = '/visit/new_visit?patient_id='+data['id'];
}
else
{
fio = $('#fio').val('');
dob = $('#dob').val('');
med_card = $('#med_card').val('');
sex = $('#sex').val('');
telephone = $('#telephone').val('');
email = $('#email').val('');
// show_success('Пациент добавлен', false);
}
}
else
{
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
}
});
}
}
});

51
webApp/templates/static/remove/adm_monitoring.js

@ -0,0 +1,51 @@
$(document).ready(function () {
$('.toast').toast({autohide:false});
var cookie_life = new Date();
cookie_life.setTime(cookie_life.getTime() + (20 * 60 * 1000));
// $.cookie('adm_msg_timestamp', 2, { expires: cookie_life });
// console.log($.cookie('adm_msg_timestamp'));
check_cookies();
setInterval(() => check_cookies(), 5000);
function check_cookies()
{
var url = '/adm_monitoring'
if ($.cookie('adm_msg_timestamp'))
url = '/adm_monitoring?timestamp='+$.cookie('adm_msg_timestamp')
$.ajax({
type:'GET',
url: url,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
for (msg_num in data['result'])
{
if (data['result'][msg_num]['msg_timestamp'] > $.cookie('adm_msg_timestamp')){
$('#msg_toast').toast('show');
$('#toast_message').append('<span style="display: block; height: 50px;">'+data['result'][msg_num]['msg']+'</span>')
}
}
$.cookie('adm_msg_timestamp', data['timestamp'], { expires: cookie_life });
},
error:function (jqXHR, exception) {
after_error();
}
});
}
$('.toast').on('show.bs.toast', function () {
this.hidden = false;
}).on('hidden.bs.toast', function () {
this.hidden = true;
});
$('.close_toast').on('click', function () {
this.hidden = false;
$('#toast_message').empty()
});
});

136
webApp/templates/static/remove/all_directions.js

@ -0,0 +1,136 @@
$(document).ready(function () {
function update_table(patient_id){
$('#patient_routings').empty();
$.ajax({
type: "GET",
url: '/routing/get_patient_routings/' + patient_id,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
for(i in data['result'])
{
$('#patient_routings').append('<div class="col-4"><p>' +data['result'][i][1]+ '</p></div><div class="col-8"><p>' +data['result'][i][0]+ '</p></div>')
}
}
})
}
$('#complete').click(function(){
$.ajax({
type: "GET",
url: '/route/' + $('#visit_id').val(),
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
console.log(data);
if(data['success'] == true)
{
$.each($('.direction-modal'), function(e) {
if($(this).data('visit_id') == $('#visit_id').val())
{
$(this).children('.complete_status').empty();
$(this).children('.complete_status').append('<span style="color: #530FAD;" class="v-icn"></span>');
$(this).data('completed', true);
}
});
update_table($('#patient_id').val());
$('#completed').show();
$('#complete').hide();
}
else
{
show_error('Не удалось завершить визит',0);
}
},
error: function (jqXHR, exception) {
show_error('Не удалось завершить визит',0);
}
})
});
$('.direction-modal').click(function(){
$('#patient_routings').empty();
$('#direction_info').modal('toggle');
let visit_id = $(this).data('visit_id');
let patient_id = $(this).data('patient_id');
let completed = $(this).data('completed');
$('#add_reception').data('visit_id', visit_id);
$('#add_reception').data('patient_id', patient_id);
lang = getUrlParameter('lang');
if(visit_id)
{
$('#user_report').show();
$('#user_report').attr('href', '/medical_report/'+visit_id+'?nn_diagnos=true&lang='+lang);
$('#visit_id').val(visit_id);
}
else
{
$('#user_report').hide();
$('#visit_id').val('');
}
console.log('completed', completed)
if(completed != undefined)
{
$('#completed').show();
$('#complete').hide();
}
else
{
$('#complete').show();
$('#completed').hide();
}
if(patient_id)
{
$('#patient_info').show();
$('#patient_info').attr('href', '/patient/'+patient_id+'?lang='+lang);
$('#patient_id').val(patient_id);
}
else
{
$('#patient_info').hide();
$('#patient_id').val('');
}
$('#patient_full_name').text('');
$('#patient_dob').text('');
$('#patient_telephone').text('');
$('#patient_email').text('');
$('#patient_visit_date').text('');
$.ajax({
type: "GET",
url: '/get_patient_info/' + patient_id,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#patient_full_name').text(data['full_name']);
$('#patient_dob').text(data['dob']);
$('#patient_telephone').text(data['telephone']);
$('#patient_email').text(data['email']);
}
})
update_table(patient_id);
})
$('#add_reception').click(function(){
patient_id = $(this).data('patient_id');
clinic_rt_id = $('#reception_pat').val();
var message = {
patient_id: patient_id,
clinic_rt_id: clinic_rt_id,
}
$.ajax({
type: "POST",
url: '/internal_route_patient',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType\
data: JSON.stringify(message),
success: (data) => {
update_table(patient_id);
$('#reception_pat').prop('selectedIndex',0);
}
})
}
)
});

88
webApp/templates/static/remove/back_form.js

@ -0,0 +1,88 @@
$(document).ready(function () {
$('#submit_form').on("click", function()
{
var name = $('#form_name').val();
var company = $('#form_company').val();
var tel = $('#form_tel').val();
var email = $('#form_email').val();
var text = $('#form_text').val();
$('#successAlert').hide(1000);
$('#failAlert').hide(1000);
var success = true;
if(name.length == 0)
{
$('#form_name').css("background-color", "#ffaaaa");
success = false;
}
else
{
$('#form_name').css("background-color", "#fff");
}
if(company.length == 0)
{
$('#form_company').css("background-color", "#ffaaaa");
success = false;
}
else
{
$('#form_company').css("background-color", "#fff");
}
if(tel.length == 0)
{
$('#form_tel').css("background-color", "#ffaaaa");
success = false;
}
else
{
$('#form_tel').css("background-color", "#fff");
}
if(email.length == 0)
{
$('#form_email').css("background-color", "#ffaaaa");
success = false;
}
else
{
$('#form_email').css("background-color", "#fff");
}
if(text.length == 0)
{
$('#form_text').css("background-color", "#ffaaaa");
success = false;
}
else
{
$('#form_text').css("background-color", "#fff");
}
if(success==true)
{
console.log('sending');
var message = {
name: name,
company:company,
tel:tel,
email:email,
text:text
}
$.ajax({
type:'POST',
url: '/api/mail/send',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data=='True'){
$('#successAlert').show(1000);
}
else
{
$('#failAlert').show(1000);
}
}
});
$('#callback_form')[0].reset();
}
});
});

265
webApp/templates/static/remove/ca_add_user.js

@ -0,0 +1,265 @@
$(document).ready(function () {
$("#gen_pass").click(function () {
$("#password").val(makePassword(8));
return false;
});
function makePassword(length) {
var result = '';
var characters_g = 'AEIOUYaeiouy';
var characters_s = 'BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz';
var characters_g_Length = characters_g.length;
var characters_s_Length = characters_s.length;
for (var i = 0; i < length; i++) {
if (i % 2 == 0) {
result += characters_g.charAt(Math.floor(Math.random() * characters_g_Length));
} else {
result += characters_s.charAt(Math.floor(Math.random() * characters_s_Length));
}
}
return result;
}
$('#add_user').on('click', function(){
$('#username').css('background-color', '#fff');
$('#password').css('background-color', '#fff');
$('#full_name').css('background-color', '#fff');
clinic_manager = $('#clinic_manager').prop("checked");
examiner = $('#examiner').prop("checked");
doctor = $('#doctor').prop("checked");
directions = $('#directions').prop("checked");
prof_doctor = $('#prof_doctor').prop("checked");
username = $('#username').val();
password = $('#password').val();
notification_email = $('#notification_email').val();
full_name = $('#full_name').val();
false_form = false;
if(!(directions))
{
directions = false;
}
if(!(prof_doctor))
{
prof_doctor = false;
}
if(!(full_name))
{
$('#full_name').css('background-color', '#f55');
full_name = true;
}
if(!(username))
{
$('#username').css('background-color', '#f55');
false_form = true;
}
if(!(password))
{
$('#password').css('background-color', '#f55');
false_form = true;
}
if(false_form==false)
{
var message = {
clinic_manager: clinic_manager,
examiner: examiner,
username:username,
password:password,
full_name:full_name,
directions:directions,
doctor:doctor,
prof_doctor:prof_doctor,
notification_email:notification_email
}
$.each($('.area_check'), function(e) {
if($(this).prop('checked') == true)
message['area'] = $(this).data('area_id');
});
$.ajax({
type:'POST',
url: '/ca_add_user',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#username').val('');
$('#password').val('');
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
}
else
{
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
$('#username').css('background-color', '#f55');
if(data.hasOwnProperty('message'))
{
show_error(data.message,0);
}
}
},
error:function (jqXHR, exception) {
if(data.hasOwnProperty('message'))
{
show_error('Ошибка при добавлении пользователя',0);
}
}
});
}
else
{
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
});
$('#edit_user').on('click', function(){
$('#username').css('background-color', '#fff');
$('#password').css('background-color', '#fff');
$('#full_name').css('background-color', '#fff');
manager_role = $('#manager_role').prop("checked");
admin_role = $('#admin_role').prop("checked");
examiner = $('#examiner').prop("checked");
doctor = $('#doctor').prop("checked");
directions = $('#directions').prop("checked");
prof_doctor = $('#prof_doctor').prop("checked");
password = $('#password').val();
full_name = $('#full_name').val();
notification_email = $('#notification_email').val();
user_id = $('#user_id').val();
false_form = false;
if(!directions)
directions = false
if(!(prof_doctor))
{
prof_doctor = false;
}
if(false_form==false)
{
var message = {
password:password,
full_name:full_name,
examiner:examiner,
manager:manager_role,
admin: admin_role,
user_id:user_id,
directions:directions,
doctor:doctor,
prof_doctor:prof_doctor,
notification_email:notification_email
}
console.log(message)
$.each($('.area_check'), function(e) {
if($(this).prop('checked') == true)
message['area'] = $(this).data('area_id');
});
$.ajax({
type:'POST',
url: '/ca_update_user',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#username').val('');
$('#password').val('');
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
}
else
{
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
$('#username').css('background-color', '#f55');
}
}
});
}
else
{
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
});
$('#recover_user').click(function(){
user_id = $('#user_id').val()
var message = {
user_id: user_id,
}
$.ajax({
type:'POST',
url: '/ca_recover_user',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#recover_user').hide();
$('#delete_user').show();
}
else
{
console.log('Saving error')
if(data['self_delete'] == true)
$('#exception').html('Ошибка, действие не применимо к своему пользователю');
else
$('#exception').html('Ошибка, не удалось обновить информацию');
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
}
});
});
$('#delete_user').click(function(){
user_id = $('#user_id').val()
var message = {
user_id: user_id,
}
$.ajax({
type:'POST',
url: '/ca_delete_user',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#recover_user').show();
$('#delete_user').hide();
}
else
{
console.log('Saving error')
if(data['self_delete'] == true)
$('#exception').html('Ошибка, действие не применимо к своему пользователю');
else
$('#exception').html('Ошибка, не удалось обновить информацию');
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
}
});
});
});

277
webApp/templates/static/remove/control.js

@ -0,0 +1,277 @@
$(document).ready(function () {
$('#new_only').on('change', function() {
view_new();
});
function view_new(){
if($('#new_only').prop('checked') == true)
{
$.each($('.accordion-item'), function(e) {
if($(this).attr('data-answer') == 1)
$(this).hide();
});
}
else{
$('.accordion-item').show();
}
}
function reload(){
$('.diagnoses_select').on('change', function() {
save_select(this);
});
function save_select(element){
var visit_id = $(element).data('visit_id');
var message = {
diagnos_id: element.value,
pic_id: $(element).data('pic_id'),
}
$.ajax({
type:'POST',
url: '/save_pic_control_diagnos',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
console.log($('#uncf'+visit_id).text())
$('#uncf'+visit_id).text($('#uncf'+visit_id).text()-1);
if ($('#uncf'+visit_id).text() == 0)
$('#uncf'+visit_id).hide()
}
else
{
after_error();
}
},
error:function (jqXHR, exception) {
after_error();
}
});
}
$('.diagnoses_select').select2();
$('.close-modal').on('click', function(){
$('#img_modal').modal('toggle');
})
$('.zoom-img').on('click', function(){
$('#img_modal').modal('toggle');
$('#zoomed_img').attr('src', $(this).attr('src'));
})
}
$('#accordion_visits').on('hide.bs.collapse', function () {
// console.log('hide');
});
$('#accordion_visits').on('show.bs.collapse', function () {
// console.log('show');
});
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
$('.accordion-collapse').on('show.bs.collapse', function () {
var visit_id = $(this).data("visit_id");
var tab_id = '#collapse_body_'+visit_id;
var lang = getUrlParameter('lang');
$.ajax({
type: "GET",
url: "/get_clinic_select/"+visit_id,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
var select = $("#select_diagnos")
console.log(select.attr('id', "#select_diagnos"+visit_id))
for (cln in data['clinic']) {
select.append('<option value='+data['clinic'][cln]['id']+'>'+data['clinic'][cln]['clinic_name']+'</option>')
}
}
})
$(tab_id).empty();
$.ajax({
type:'GET',
url: '/get_control_visit_info/'+visit_id+'?lang=' + lang,
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
var row = $('<div class="row"></div>').appendTo($(tab_id));
var col2 = $('<div class="col-2"></div>').appendTo(row);
var col10 = $('<div class="col-10"></div>').appendTo(row);
col2.append('<h5>'+data['dict']['complaints']+'</h5>');
col10.append('<p>'+data['complaints']+'</p>')
var col2 = $('<div class="col-2"></div>').appendTo(row);
var col10 = $('<div class="col-10"></div>').appendTo(row);
col2.append('<h5>'+data['dict']['anamnesis']+'</h5>')
col10.append('<p>'+data['anamnesis']+'</p>')
var col2 = $('<div class="col-2"></div>').appendTo(row);
var col10 = $('<div class="col-10"></div>').appendTo(row);
col2.append('<h5>'+data['dict']['telephone']+'</h5>')
col10.append('<p>'+data['telephone']+'</p>')
var col2 = $('<div class="col-2"></div>').appendTo(row);
var col10 = $('<div class="col-10"></div>').appendTo(row);
col2.append('<h5>Email</h5>')
col10.append('<p>'+data['email']+'</p>')
var col2 = $('<div class="col-2"></div>').appendTo(row);
var col10 = $('<div class="col-10"></div>').appendTo(row);
col2.append('<h5>'+data['dict']['dob']+'</h5>')
col10.append('<p>'+data['dob']+'</p>')
if (data['pics'].length > 0){
var col4_1 = $('<div class="col-4"></div>').appendTo(row);
var col4_2 = $('<div class="col-4"></div>').appendTo(row);
var col4_3 = $('<div class="col-4"></div>').appendTo(row);
col4_1.append('<p>'+data['dict']['snapshot']+'</p>')
col4_2.append('<p>'+data['dict']['doctors_diagnosis']+'</p>')
col4_3.append('<p>'+data['dict']['expert_diagnosis']+'</p>')
}
for(pic in data['pics'])
{
var col4_1 = $('<div class="col-4"></div>').appendTo(row);
var col4_2 = $('<div class="col-4"></div>').appendTo(row);
var col4_3 = $('<div class="col-4"></div>').appendTo(row);
let path = data['pics'][pic]['src']
let type = 'image'
parts = path.split('.')
if (['avi', 'mp4', 'webm', 'mkv', 'flv', 'wmv', 'mpeg'].includes(parts[parts.length - 1])) {
type = 'video'
}
col4_1.append('<img src=/img/' + path + ' class="preview_img" style="padding: 10px;" data-type_file=' + type + ' data-path_file=' + path + '></img>')
col4_2.append('<p>'+data['pics'][pic]['doctors_diagnosis']+'</p>')
select = $('<select class="diagnoses_select form-control", id='+data['pics'][pic]['id']+' data-pic_id='+data['pics'][pic]['id']+' data-visit_id='+visit_id+'></select>').appendTo(col4_3);
select.css('width','100%')
select.append('<option value=0, selected, disabled>'+data['dict']['diagnosis']+'</option>')
for(tag in data['tags'])
{
if(data['tags'][tag]['id'] == data['pics'][pic]['expert_diagnosis_id'])
{
select.append('<option selected, value='+data['tags'][tag]['id']+'>'+data['tags'][tag]['icd']+" "+data['tags'][tag]['name']+'</option>');
}
else
{
select.append('<option value='+data['tags'][tag]['id']+'>'+data['tags'][tag]['icd']+" "+data['tags'][tag]['name']+'</option>');
}
}
select.val(data['pics'][pic]['expert_diagnosis_id']).trigger('change');
}
if(data['pirogov_answer'] == false)
{
var col12 = $('<div class="row"></div>').appendTo(row);
var button_route = $('<button class="btn btn-primary mt-5 col-3 offset-5" id="verify_routing_btn" data-visit_id="'+visit_id+'"data-patient_id='+ data.patient_id +'">'+data['dict']['verify_routing']+'</button>').appendTo(col12);
button_route.on('click', function() {
$('#direct_modal').modal('toggle');
$('#dm_patinet').html(data['patient']);
$('#send_direction').data('visit_id', visit_id);
});
var button = $('<button class="btn btn-success mt-5 col-3 offset-1" id="verify_control_btn" data-visit_id="'+visit_id+'">'+data['dict']['verify_control']+'</button>').appendTo(col12);
button.on('click', function(){
$('#conclusion_modal_visit_id').val($(this).data('visit_id'));
$('#conclusion_modal').modal('show');
});
var row_s = $('<div class="row row_s"></div>').appendTo(row);
}
reload();
},
error:function (jqXHR, exception) {
}
});
});
$('#conclusion_modal_verify_control_btn').click(function(){
var visit_id = $('#conclusion_modal_visit_id').val();
message = {
confirm_control: true,
next_visit: $('#next_visit').val(),
conclusion: $('#conclusion').val()
}
$.ajax({
type:'POST',
url: '/2_0/visit_conclusion/'+visit_id,
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
$("#verify_routing_btn").hide();
$("#verify_control_btn").hide();
$('#badge'+visit_id).hide();
$('#item_'+visit_id).attr('data-answer', 1);
$('#conclusion_modal').modal('hide');
view_new();
},
error:function (jqXHR, exception) {
}
});
})
$('#send_direction').on('click', function() {
var params = {
visit_id: $(this).data('visit_id'),
clinic_id: $('.direct_patient').val()
};
console.log(params);
if (params['clinic_id'] == null) {
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
} else {
$.ajax({
type: "POST",
url: '/verify_route',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(params),
success: (data) => {
if (data['success'] == true) {
$("#direct_modal").modal('hide');
var smaul = $('<p class=" col-3 offset-5 text-success" id="dir_patient">Пациент перенаправлен в клинику "'+ $('.direct_patient option:selected').text() +'"<p>').appendTo($('.row_s'));
smaul.slideDown(500);
smaul.delay(2000).slideUp();
$("#verify_routing_btn").delay(5000).hide()
$("#verify_control_btn").delay(5000).hide()
}
},
error: function (jqXHR, exception) {
after_error();
}
})
}
});
});

146
webApp/templates/static/remove/device_test.js

@ -0,0 +1,146 @@
$(document).ready(function () {
//https://medium.com/swlh/how-to-access-webcam-and-take-picture-with-javascript-b9116a983d78
const webcamElement = document.getElementById('webcam');
const canvasElement = document.getElementById('canvas');
const snapSoundElement = document.getElementById('snapSound');
const webcam = new Webcam(webcamElement, 'user', canvasElement, snapSoundElement);
webcam.start()
.then(result =>{
console.log("webcam started");
$('#take_picture').focus();
})
.catch(err => {
console.log(err);
});
$('#live_endocscopy_link').on('click', function(){
if ($('#live_endocscopy_link').hasClass('active'))
{
webcam.start()
.then(result =>{
console.log("webcam started");
$('#take_picture').focus();
})
.catch(err => {
console.log(err);
});
}
});
$(document).keypress(function(event){
take_picture();
});
$('#take_picture').on('click', function(){
take_picture();
})
$('.nav-link').on('click', function(){
if ($(this).attr('id') != 'live_endocscopy_link')
webcam.stop()
});
function makeblob(dataURL) {
var BASE64_MARKER = ';base64,';
if (dataURL.indexOf(BASE64_MARKER) == -1) {
var parts = dataURL.split(',');
var contentType = parts[0].split(':')[1];
var raw = decodeURIComponent(parts[1]);
return new Blob([raw], { type: contentType });
}
var parts = dataURL.split(BASE64_MARKER);
var contentType = parts[0].split(':')[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;
var uInt8Array = new Uint8Array(rawLength);
for (var i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], { type: contentType });
}
function loadWOrec(from, blob){
$('#start_rec').attr("disabled", true);
$('#save_picture').attr("disabled", true);
$('#request_waiting').show();
$('#progress_text').html('Загрузка снимков');
var organ = 0
if($('#btnradio_ear').is(":checked"))
organ = 1
if($('#btnradio_throat').is(":checked"))
organ = 2
if($('#btnradio_nose').is(":checked"))
organ = 3
var formData = new FormData();
var poll = null;
var i = 0
if (from == 'webcam')
// $.each($('.endo_image'), function(e) {
formData.append("files", makeblob(blob));
i += 1;
// });
if (i > 0)
{
$.ajax({
type:'POST',
data: formData,
url: '/device_test_img_upload',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
// $('#photos').empty();
// $('#imgs_preview').empty();
// $('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
for(fnum in data['files'])
$('#photos').append('<div class="col-3 my-2"><button type="button" aria-label="Close" class="btn-close remove-picture" style="background-color: #0d6efd; display: block; position: absolute; margin: 5px;"></button><img class="endo_image" data-type="saved" data-name=' + data['files'][fnum] + ' id="rrr" src="/img/'+data['files'][fnum]+'" style="width: 100%;"></div>')
},
error:function (jqXHR, exception) {
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
// after_error();
}
});
}
else
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
// after_error();
}
}
function take_picture(){
let picture = webcam.snap();
// $('#download-photo').attr('src', picture);
// $('#download').attr('href', picture);
if($('#eleps').is(':checked'))
loadWOrec('webcam', picture);
else
$('#photos').append('<div class="col-3 my-2"><button type="button" aria-label="Close" class="btn-close remove-picture" style="background-color: #0d6efd; display: block; position: absolute; margin: 5px;"></button><img class="endo_image" data-type="blob" id="rrr" src="'+picture+'" style="width: 100%;"></div>')
$('.remove-picture').on('click', function(){
$(this).parent().remove();
})
}
$('.remove-picture').on('click', function(){
$(this).parent.remove();
})
});

207
webApp/templates/static/remove/direction.js

@ -0,0 +1,207 @@
$(document).ready(function () {
function clear_form(){
$('#telephone').val('');
$('#fio').val('');
$('#dob').val('');
$('#sex').val('');
$('#complaints_input').val('');
$('#anamnesis_input').val('');
$('#short_endo_history').empty();
$('#email').val('');
$('#file_input').val(null);
$('#imgs_preview').empty();
}
function previewIMG(input, preview) {
var reader = new FileReader();
reader.onload = function(e) {
$(preview).attr('src', e.target.result);
}
reader.readAsDataURL(input);
}
$('#add_direction').click(
function(){startLoad(null)}
);
$("#file_input").change(function(){
$('#imgs_preview').empty();
$('#file-input-greenspan').html('');
if ($(this)[0].files[0]) {
$('#pre_load').hide();
$('#file-input-greenspan').html('Загружено снимков: ' + $(this)[0].files.length);
for(i=0;i<$(this)[0].files.length;i++)
{
if (($(this)[0].files[i].type.includes('image')))
{
div = document.createElement('div');
div.setAttribute('class', 'col-3 p-1 m-0');
img = document.createElement('img');
img.setAttribute('class', 'preview_img');
previewIMG($(this)[0].files[i], $(img));
div.appendChild(img);
document.getElementById("imgs_preview").appendChild(div);
}
}
}
});
function update_select(profarea_update)
{
var lang = getUrlParameter('lang');
var params = {
clinic_id:$("#clinic_id").val(),
profarea_id:$('#profarea_id').val(),
lang:lang
};
var str_params = jQuery.param( params );
$.ajax({
type:'GET',
url: '/get_doctors_profiles?' + str_params,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#user_id').empty();
if(profarea_update==false)
{
$('#profarea_id').empty();
if(lang=='en')
$('#profarea_id').append('<option value="0">Profile</option>');
else
$('#profarea_id').append('<option value="0">Профиль</option>');
for(pa_i in data['profareas'])
$('#profarea_id').append('<option value="'+data['profareas'][pa_i]['id']+'">'+data['profareas'][pa_i]['name']+'</option>');
}
for(pa_i in data['users'])
$('#user_id').append('<option value="'+data['users'][pa_i]['id']+'">'+data['users'][pa_i]['name']+'</option>');
},
error:function (jqXHR, exception) {
after_error();
}
});
}
$("#clinic_id").change(function(){
update_select(false);
});
$("#profarea_id").change(function(){
update_select(true);
});
function getId(str)
{
return(str.replaceAll(' ','').replaceAll(',','').replaceAll('.','').replaceAll(';','').replaceAll(':','').replaceAll('(','').replaceAll(')','').replaceAll('-','').replaceAll('/','').replaceAll('\\',''))
}
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
function startLoad(nic_src){
$('#start_rec').attr("disabled", true);
$('#save_picture').attr("disabled", true);
$('#request_waiting').show();
$('#progress_text').html('Сохранение');
var lang = getUrlParameter('lang');
var fileList = document.getElementById('file_input').files;
var formData = new FormData();
var poll = null;
var i = 0
console.log($('#clinic_id').val())
if ($('#clinic_id').val() == 0 || $('#clinic_id').val() == null){
$('#exception').html('Укажите клинику для направления');
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
return
}
if ($('#profarea_id').val() == 0 || $('#clinic_id').val() == null){
$('#exception').html('Укажите профиль направления');
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
return
}
if ($('#telephone').val() == '' && $('#fio').val() == '' && $('#email').val() == ''){
$('#exception').html('Укажите данные пациента');
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
return
}
for(i=0;i<fileList.length;i++)
{
if (fileList[i].type.includes('image'))
{
formData.append("files", fileList[i]);
i += 1;
}
}
var params = {
telephone:$('#telephone').val(),
fio:$('#fio').val(),
email:$('#email').val(),
dob:$('#dob').val(),
sex:$('#sex').val(),
complaints:$('#complaints_input').val(),
anamnesis:$('#anamnesis_input').val(),
lang:lang,
clinic_id:$('#clinic_id').val(),
profarea_id:$('#profarea_id').val(),
user_id:$('#user_id').val()
};
if (nic_src){
params['src'] = nic_src;
}
var str_params = jQuery.param( params );
$.ajax({
type:'POST',
data: formData,
url: '/save_direction?' + str_params,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
async: true,
success: (data) => {
$('#success').html('Направление отправлено');
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
clear_form();
},
error:function (jqXHR, exception) {
// after_error();
$('#exception').html('Не удалось отправить направление');
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
});
}
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
function makeid(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for ( var i = 0; i < length; i++ ) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
});

653
webApp/templates/static/remove/flebo_visit.js

@ -0,0 +1,653 @@
$(document).ready(function () {
$('.close-modal').on('click', function(){
$('#standart_modal').modal('toggle');
});
$('#short_std').on('click', function(){
standart_load($('#cur_modal_std').val(), false, $('#cur_modal_tag_id').val());
$('#short_std').hide();
$('#long_std').show();
});
$('#long_std').on('click', function(){
standart_load($('#cur_modal_std').val(), true, $('#cur_modal_tag_id').val());
$('#short_std').show();
$('#long_std').hide();
});
$('.custom-input').on('focus focusout', function(){
if($(this).val() == null || $(this).val() == '')
{
$($(this).parent()).removeClass('hastext');
}
else
{
$($(this).parent()).addClass('hastext');
}
});
function previewIMG(input, preview) {
var reader = new FileReader();
reader.onload = function(e) {
$(preview).attr('src', e.target.result);
}
reader.readAsDataURL(input);
}
$("#file_input").change(function(){
$('#imgs_preview').empty();
$('#file-input-greenspan').html('');
if ($(this)[0].files[0]) {
$('#pre_load').hide();
$('#file-input-greenspan').html('Загружено снимков: ' + $(this)[0].files.length);
for(i=0;i<$(this)[0].files.length;i++)
{
if (($(this)[0].files[i].type.includes('image')))
{
div = document.createElement('div');
div.setAttribute('class', 'col-3 p-1 m-0');
img = document.createElement('img');
img.setAttribute('class', 'preview_img');
previewIMG($(this)[0].files[i], $(img));
div.appendChild(img);
document.getElementById("imgs_preview").appendChild(div);
}
}
}
});
$('#endo_tab_link').on('click', function()
{
load__endo_history(true);
});
$('#nn_tab_link').on('click', function()
{
load__endo_history(true);
});
function reload_visit_info(){
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/reload_visit_info/' + $('#visit_id').val() + '?task=off'+'&lang='+lang,
processData: false,
contentType: false,
success: (data) => {
load__endo_history(false);
}
});
}
function load__endo_history(rvn){
$('#endo_history').empty();
if(rvn)
{
reload_visit_info();
return;
}
$.ajax({
type:'GET',
url: '/get_visit_info_alt/'+$('#visit_id').val(),
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentTypestatus
success: (data) => {
$('#endo_history').empty();
var label_id = 0
console.log(data['pics'])
for (pic_num in data['pics'])
{
pic = data['pics'][pic_num]
organ = ''
if (pic['organ'])
{
organ = pic['organ']
}
type = 'image'
parts = pic['hash_name'].split('.')
if (['avi', 'mp4', 'webm', 'mkv', 'flv', 'wmv', 'mpeg'].includes(parts[parts.length - 1])) {
type = 'video'
}
if(pic.hasOwnProperty('nn_tag'))
{
//Нейросеть
if($('#language').val() == 'ru')
$('#endo_history').append('<tr><td scope="col" id="click"><img src=/img/'+pic['hash_name']+' class="preview_img" data-path_file=' + pic['hash_name'] + ' data-type_file=' + type + '></td><td scope="col"><span class="expert_diagnos" data-img='+pic['hash_name']+'>'+pic['nn_icd']+' '+pic['nn_tag']+'</span><span class="standart_modal btn btn-primary btn-sm" data-code="'+pic['nn_icd']+'">Стандарт</span></td><td scope="col"><select data-img='+pic['hash_name']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт<span></td></tr>');
else
$('#endo_history').append('<tr><td scope="col" id="click"><img src=/img/'+pic['hash_name']+' class="preview_img" data-path_file=' + pic['hash_name'] + ' data-type_file=' + type + '></td><td scope="col"><span class="expert_diagnos" data-img='+pic['hash_name']+'>'+pic['nn_icd']+' '+pic['nn_tag']+'</span><span class="standart_modal btn btn-primary btn-sm" data-code="'+pic['nn_icd']+'">Standart</span></td><td scope="col"><select data-img='+pic['hash_name']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart<span></td></tr>');
}
else
{
//Без описания
if($('#language').val() == 'ru')
$('#endo_history').append('<tr><td scope="col"><img src=/img/'+pic['hash_name']+' class="preview_img" data-path_file=' + pic['hash_name'] + ' data-type_file=' + type + '></td><td scope="col"><span class="expert_diagnos" data-img='+pic['hash_name']+'></span><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт</span></td><td scope="col"><select data-img='+pic['hash_name']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт</span></td></tr>');
else
$('#endo_history').append('<tr><td scope="col"><img src=/img/'+pic['hash_name']+' class="preview_img" data-path_file=' + pic['hash_name'] + ' data-type_file=' + type + '></td><td scope="col"><span class="expert_diagnos" data-img='+pic['hash_name']+'></span><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart</span></td><td scope="col"><select data-img='+pic['hash_name']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart</span></td></tr>');
}
label_id = label_id + 1
}
select_fill();
for (pic_num in data['pics'])
{
pic = data['pics'][pic_num]
if(pic.hasOwnProperty('confirmed')){
if(pic['confirmed'] == true)
{
$.each($('.expert_diagnos'), function(e) {
if($(this).data('img') == pic[0]['hash_name'])
{
console.log(pic[0]['icd']);
$(this).html(pic[0]['icd']+' '+pic[0]['tag'])
$(this).parent().children('.standart_modal').data('tag_id', pic[0]['tag_id']);
$(this).parent().children('.standart_modal').data('code', pic[0]['icd']);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
}
})
}
else{
$.each($('.diagnoses_select'), function(e) {
if($(this).data('img') == pic['hash_name'])
{
$(this).val(pic['tag_id']);
$(this).parent().children('.standart_modal').data('code', pic['icd']);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
}
})
}
}
}
$('.standart_modal').on('click', function(){
$('#standart_modal').modal('toggle');
standart_load($(this).data('code'), false, $(this).data('tag_id'));
})
$('.diagnoses_select').on('change', function() {
save_select(this);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
});
$('.diagnoses_select').select2();
},
error:function (jqXHR, exception) {
}
});
}
//saving on select change OK FOR MULTIPROFILE
function save_select(element){
// console.log(element.value);
// console.log($(element).data('img'));
var message = {
diagnos_id: element.value,
pic_name: $(element).data('img'),
visit_id: $('#visit_id').val(),
}
$.ajax({
type:'POST',
url: '/save_pic_diagnos',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$(element).parent().children('.standart_modal').data('code', data['icd']);
$(element).parent().children('.standart_modal').data('tag_id', data['tag_id']);
$('#success').html('Диагноз сохранен');
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
}
else
{
after_error();
}
},
error:function (jqXHR, exception) {
after_error();
}
});
}
function getId(str)
{
return(str.replaceAll(' ','').replaceAll(',','').replaceAll('.','').replaceAll(';','').replaceAll(':','').replaceAll('(','').replaceAll(')','').replaceAll('-','').replaceAll('/','').replaceAll('\\',''))
}
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
function standart_load(code, full, tag_id){
$('#cur_modal_std').val(code);
$('#cur_modal_tag_id').val(tag_id);
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/get_diagnos_standart?icd='+code+'&tag_id='+tag_id+'&lang='+lang,
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#standart_body').empty();
$('#standart_name').html(data['standart_name']);
if(lang == 'en'){
$('#standart_diagnos').html('Diagnosis: <b>' + data['name']+'</b>');
$('#standart_type').html('Type of standard: <b>'+data['standart_type']+'</b>');
$('#standart_icd_code').html('ICD-10 code: <b>'+data['icd']+'</b>');
$('#standart_time').html('Treatment time (days): <b>'+data['days_min']+' - '+data['days_max']+'</b>');
try{
if(data['standart_text_en'] != undefined){
$('#standart_body').append('<hr>');
$('#standart_body').append('<p class="mt-3">'+data['standart_text_en']+'</p>');
}
}
catch(e)
{
console.log('error_standart_text_en')
}
}
else
{
$('#standart_diagnos').html('Диагноз: <b>' + data['name']+'</b>');
$('#standart_type').html('Вид стандарта: <b>'+data['standart_type']+'</b>');
$('#standart_icd_code').html('Код по МКБ-10: <b>'+data['icd']+'</b>');
$('#standart_time').html('Сроки лечения (дней): <b>'+data['days_min']+' - '+data['days_max']+'</b>');
try{
if(data['standart_text'] != undefined)
{
$('#standart_body').append('<hr>');
$('#standart_body').append('<p class="mt-3">'+data['standart_text']+'</p>');
}
}
catch(e)
{
console.log('error_standart_text')
}
}
var groups = [];
for (std_num in data['standart'])
{
var std = data['standart'][std_num]
if (!(groups.includes(std['service_type'])))
{
groups.push(std['service_type'])
$('#standart_body').append('<h5>'+std['service_type']+'</h5><div id="group'+getId(std['service_type'])+'"></div>');
}
}
var sub_groups = [];
for (std_num in data['standart'])
{
var std = data['standart'][std_num]
for (group in groups){
if(!($('#group'+getId(std['service_type'])).data('dt'+getId(std['service_subtype'])) == true))
{
$('#group'+getId(std['service_type'])).data('dt'+getId(std['service_subtype']), true);
$('#group'+getId(std['service_type'])).append('<p>'+std['service_subtype']+'</p>');
if(lang == 'en')
$('#group'+getId(std['service_type'])).append('<table style="width: 100%;" class="table table-striped table-bordered custom-font"><thead><tr><th scope="col">Medical Service Code</th><th scope="col">Name</th><th scope="col">Approximate frequency of presentation</th></tr></thead><tbody id="table'+ getId(std['service_subtype']) + getId(std['service_type'])+'"></tbody></table>');
else
$('#group'+getId(std['service_type'])).append('<table style="width: 100%;" class="table table-striped table-bordered custom-font"><thead><tr><th scope="col">Код медицинской услуги</th><th scope="col">Наименование</th><th scope="col">Примерная частота представления</th></tr></thead><tbody id="table'+ getId(std['service_subtype']) + getId(std['service_type'])+'"></tbody></table>');
}
}
}
for (std_num in data['standart'])
{
if(full == true){
var std = data['standart'][std_num]
service_code = ''
if (!(std['service_code'] == 'NULL'))
service_code = std['service_code']
$('#table'+ getId(std['service_subtype']) + getId(std['service_type'])).append(
'<tr><td>'+service_code+'</td><td>'+std['standart_name']+'</td><td>'+std['periodicity']+'</td></td>'
);
}
else
{
var std = data['standart'][std_num]
if(std['periodicity'] == '1'){
service_code = ''
if (!(std['service_code'] == 'NULL'))
service_code = std['service_code']
$('#table'+ getId(std['service_subtype']) + getId(std['service_type'])).append(
'<tr><td>'+service_code+'</td><td>'+std['standart_name']+'</td><td>'+std['periodicity']+'</td></td>'
);
}
}
}
$('#copy_text').data('text', data['for_copy'])
},
error:function (jqXHR, exception) {
$('#standart_body').empty();
$('#standart_name').html('');
$('#standart_diagnos').html('');
$('#standart_type').html('');
$('#standart_icd_code').html('');
$('#standart_time').html('');
}
});
}
$('#copy_text').on("click", function(){
$('#text_to_copy').html($('#copy_text').data('text'));
function listener(e) {
str = document.getElementById('text_to_copy').innerHTML
e.clipboardData.setData("text/html", str);
e.clipboardData.setData("text/plain", str);
e.preventDefault();
}
document.addEventListener("copy", listener);
document.execCommand("copy");
document.removeEventListener("copy", listener);
$('#copy_text').addClass('check-icn');
setTimeout(function() {
$('#copy_text').removeClass('check-icn');
}, 2000);
});
$('#start_rec').on("click", function()
{
if($('#btnradio_ear').is(":checked"))
startRec('source');
else
loadWOrec('source');
});
$('#save_picture').on("click", function()
{
if($('#btnradio_ear').is(":checked"))
startRec('webcam');
else
loadWOrec('webcam');
});
function makeblob(dataURL) {
var BASE64_MARKER = ';base64,';
if (dataURL.indexOf(BASE64_MARKER) == -1) {
var parts = dataURL.split(',');
var contentType = parts[0].split(':')[1];
var raw = decodeURIComponent(parts[1]);
return new Blob([raw], { type: contentType });
}
var parts = dataURL.split(BASE64_MARKER);
var contentType = parts[0].split(':')[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;
var uInt8Array = new Uint8Array(rawLength);
for (var i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], { type: contentType });
}
function loadWOrec(from){
$('#start_rec').attr("disabled", true);
$('#save_picture').attr("disabled", true);
$('#request_waiting').show();
$('#progress_text').html('Загрузка снимков');
var organ = 0
var fileList = document.getElementById('file_input').files;
var formData = new FormData();
var poll = null;
var i = 0
if (from == 'source')
for(i=0;i<fileList.length;i++)
{
if (fileList[i].type.includes('image'))
{
formData.append("files", fileList[i]);
i += 1;
}
}
if (from == 'webcam')
$.each($('.endo_image'), function(e) {
formData.append("files", makeblob($(this).attr('src')));
i += 1;
});
if (i > 0)
{
$.ajax({
type:'POST',
data: formData,
url: '/save_images?patient_id='+$('#patient_id').val()+'&organ='+organ+'&visit_id='+$('#visit_id').val()+'&profarea_id='+'2',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#photos').empty();
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
},
error:function (jqXHR, exception) {
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
});
}
else
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
}
function startRec(from){
$('#start_rec').attr("disabled", true);
$('#save_picture').attr("disabled", true);
$('#request_waiting').show();
$('#progress_text').html('Загрузка снимков');
var lang = getUrlParameter('lang');
var fileList = document.getElementById('file_input').files;
var formData = new FormData();
var poll = null;
var i = 0
var img_in_params = ''
if (from == 'source')
for(i=0;i<fileList.length;i++)
{
if (fileList[i].type.includes('image'))
{
formData.append("files", fileList[i]);
i += 1;
}
}
if (from == 'webcam')
$.each($('.endo_image'), function(e) {
if($(this).data('type') == "blob")
formData.append("files", makeblob($(this).attr('src')));
else
{
formData.append("files", $(this).attr('src'));
img_in_params = img_in_params + $(this).data('name') + ','
}
i += 1;
});
let searchParams = new URLSearchParams(window.location.search)
force_ear = searchParams.has('force_ear');
if (i > 0)
{
$.ajax({
type:'POST',
data: formData,
url: '/start_flebo_image_diagnostics?patient_id='+$('#patient_id').val()+'&visit_id='+$('#visit_id').val() + '&imgs='+img_in_params + '&force_ear='+force_ear+'&lang=' + lang,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#photos').empty();
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#progress_text').html('Распознание диагноза');
if(data['status_id'] == 0)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 1)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 2)
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
$('#success').html('Загрузка завершена, снимок доступен в истории')
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
load__endo_history(true);
}
if(data['status_id'] == 3)
after_error();
},
error:function (jqXHR, exception) {
$('#photos').empty();
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
});
}
else
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
}
function check_image_output(task_id)
{
$.ajax({
type:'GET',
url: '/flebo_status/'+task_id,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
// console.log(data);
if('status_id' in data){
if(data['status_id'] == 0)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 1)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 2)
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
$('#success').html('Загрузка завершена, снимок доступен в истории')
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
load__endo_history(true);
}
if(data['status_id'] == 3)
{
after_error();
}
}
else
{
after_error();
}
},
error:function (jqXHR, exception) {
after_error();
}
});
}
function select_fill(){
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/get_diagnos_tags/2'+'?lang='+lang,
async: false,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$.each($('.diagnoses_select'), function(e) {
// console.log(data);
for(tag_num in data)
{
var tag = data[tag_num]
// console.log(tag);
if(tag['category_id'] == null && tag['diagnos'] == true)
{
var icd = ''
if (tag['icd'])
{
icd = tag['icd'] + ' '
}
// console.log(icd);
$(this).append('<option value="'+tag['id']+'">'+icd+tag['standart_name']+'</option>');
// $('#diagnoses_tags').append('<div class="custom-control custom-checkbox my-1 mr-sm-2 checktag"><input type="checkbox" id="tag'+tag['id']
// +'" data-name="'+tag['name']+'" class="custom-control-input checkitem"><label for="tag'+tag['id']+'" class="custom-control-label">'+icd+tag['name']+'</label></div>');
}
}
});
},
error:function (jqXHR, exception) {
}
});
}
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
function makeid(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for ( var i = 0; i < length; i++ ) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
});

67
webApp/templates/static/remove/internal_routing.js

@ -0,0 +1,67 @@
$(document).ready(function () {
$('#receptions').select2({tags: true});
function update_table()
{
$('#receptions_table').empty();
$.ajax({
type: "GET",
url: '/get_clinic_receptions/' + $('#clinic').val(),
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
for(i in data['receptions'])
{
console.log(data['receptions'][i])
$('#receptions_table').append('<tr><td>'+data['receptions'][i]['name']+'</td><td><input class="reception-price" data-rt_id='+data['receptions'][i]['id']+' type="number", value=' +data['receptions'][i]['price']+ '></input></td><tr>')
$('.reception-price').change(function(){
update_price($(this).data('rt_id'), $(this).val())
})
}
}
})
}
function update_price(rt_id, price){
var message = {
rt_id: rt_id,
price: price
}
console.log(message)
$.ajax({
type: "POST",
url: '/internal_route/update_price',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType\
data: JSON.stringify(message),
success: (data) => {
}
})
}
$('#clinic').change(function(){
update_table();
})
$('#add_reception').click(function(){
$('#receptions_table').empty();
var message = {
reception: $('#receptions').val(),
price: $('#price').val(),
clinic_id: $('#clinic').val(),
}
$.ajax({
type: "POST",
url: '/internal_route/add',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType\
data: JSON.stringify(message),
success: (data) => {
update_table();
}
})
})
});

37
webApp/templates/static/remove/lang.js

@ -0,0 +1,37 @@
$(document).ready(function () {
function set_lang(lang){
var cookie_life = new Date();
cookie_life.setTime(cookie_life.getTime() + (20 * 60 * 1000));
$.cookie('lang', lang, { expires: cookie_life });
}
$('#to_ru_lang').click(function(){
set_lang('ru');
window.location.href = window.location.origin + window.location.pathname;
})
$('#to_en_lang').click(function(){
set_lang('en');
window.location.href = window.location.origin + window.location.pathname;
})
//Для DEMO
$('#demo_modal').modal('show');
if($('#demo_password').length == 0)
setTimeout(function() { $('#demo_modal').modal('hide'); }, 3000);
$('.close_modal').click(function(){
$('#'+$(this).data('dismiss')).modal('hide');
})
$('#full_vers').click(function () {
$('#feedbackModal').modal('show');
});
});

664
webApp/templates/static/remove/med_exam.js

@ -0,0 +1,664 @@
$(document).ready(function () {
$("#fio").select2({
tags: true
});
$("#fio").on("change", function() {
id = this.value;
text = $( "#fio option:selected" ).text();
if (id == text)
{
console.log('New Patient');
}
else{
$.ajax({
type: "GET",
url: '/get_patient_clinic/' + id,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$("#med_card").val(data['card_number']);
$("#telephone").val(data['telephone']);
$("#dob").val(data['dob']);
$("#sex").val(data['sex']);
$("#email").val(data['email']);
updateInfo();
}
})
}
})
load__endo_history(true);
function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
$('.close-modal').on('click', function(){
$('#standart_modal').modal('toggle');
});
$('#short_std').on('click', function(){
standart_load($('#cur_modal_std').val(), false, $('#cur_modal_tag_id').val());
$('#short_std').hide();
$('#long_std').show();
});
$('#long_std').on('click', function(){
standart_load($('#cur_modal_std').val(), true, $('#cur_modal_tag_id').val());
$('#short_std').show();
$('#long_std').hide();
});
$('#med_card').on('change', function(){updateInfo()});
$('#telephone').on('change', function(){updateInfo()});
// $('#fio').on('change', function(){updateInfo()});
$('#dob').on('change', function(){updateInfo()});
$('#sex').on('change', function(){updateInfo()});
$('#complaints_input').on('change', function(){updateInfo()});
$('#anamnesis_input').on('change', function(){updateInfo()});
function complete_med_exam(visit_id){
var message = {
visit_id : visit_id
}
$.ajax({
type:'POST',
url: '/complete_med_exam',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
show_success('Профосмотр сохранён', false);
}
else
{
show_error('Не удалось завершить профосмотр' ,0);
}
},
error:function (jqXHR, exception) {
show_error('Не удалось завершить профосмотр' ,0);
}
});
}
$('.clear_med_exam').click(function(){
if($( "#fio option:selected" ).text() == '')
{
show_error('none_patient', 0)
return;
}
$('#med_card').val('');
$('#telephone').val('');
$("#fio").val('0').prop('selected', true);
$('#fio').select2({tags: true});
$('#dob').val('');
$('#sex').val('');
$('#complaints_input').val('');
$('#anamnesis_input').val('');
$('#short_endo_history').empty();
let visit_id = $('#visit_id').val();
complete_med_exam(visit_id);
updateStatus();
location.reload();
// $.ajax({
// type:'GET',
// url: '/get_new_visit_id',
// processData: false, // tell jQuery not to process the data
// contentType: false, // tell jQuery not to set contentType
// success: (data) => {
// $('#visit_id').val(data['visit_id']);
// },
// error:function (jqXHR, exception) {
// after_error();
// }
// });
})
function updateInfo(){
updateStatus();
if ($('#visit_id').val())
startLoad(null)
else
console.log('no visit')
}
function previewIMG(input, preview) {
var reader = new FileReader();
reader.onload = function(e) {
$(preview).attr('src', e.target.result);
}
reader.readAsDataURL(input);
}
$("#file_input").change(function(){
$('#imgs_preview').empty();
$('#file-input-greenspan').html('');
if ($(this)[0].files[0]) {
$('#pre_load').hide();
$('#file-input-greenspan').html('Загружено снимков: ' + $(this)[0].files.length);
for(i=0;i<$(this)[0].files.length;i++)
{
if (($(this)[0].files[i].type.includes('image')))
{
div = document.createElement('div');
div.setAttribute('class', 'col-3 p-1 m-0');
img = document.createElement('img');
img.setAttribute('class', 'preview_img');
previewIMG($(this)[0].files[i], $(img));
div.appendChild(img);
document.getElementById("imgs_preview").appendChild(div);
startLoad(null);
}
}
}
});
function reload_visit_info(){
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/reload_visit_info/' + $('#visit_id').val() + '?task=off'+'&lang='+lang,
processData: false,
contentType: false,
success: (data) => {
//load__endo_history(false);
}
});
}
function load__endo_history(rvn){
$('#short_endo_history').empty();
if(rvn)
reload_visit_info();
$.ajax({
type:'GET',
url: '/get_visit_info/' + $('#visit_id').val() + '?task=off',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentTypestatus
success: (data) => {
$('#short_endo_history').empty();
var label_id = 0
for (untask_num in data['untask_pics'])
{
pic = data['untask_pics'][untask_num]
organ = ''
if (pic['organ'])
{
organ = pic['organ']
}
if($('#language').val() == 'ru')
$('#short_endo_history').append('<tr><td scope="col"><img src=/img/'+pic['file']+'?va'+getRandomInt(100)+' class="preview_img"></td><td scope="col"><select data-img='+pic['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select w-100"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт</span></td></tr>');
else
$('#short_endo_history').append('<tr><td scope="col"><img src=/img/'+pic['file']+'?va'+getRandomInt(100)+' class="preview_img"></td><td scope="col"><select data-img='+pic['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select w-100"><option value="" disabled="" selected="">Diagnosis</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart</span></td></tr>');
label_id = label_id + 1
}
for (task_num in data['tasks'])
{
task = data['tasks'][task_num]
if ('task' in task)
if (task['task'])
if ('result' in task['task'])
for (result_num in task['task']['result'])
{
result = task['task']['result'][result_num]
var code = ''
var name = ''
var probability = 0
if ('diseases' in result)
for (d_num in result['diseases'])
{
disease = result['diseases'][d_num]
if(disease['probability'] > probability)
{
probability = disease['probability']
code = disease['code']
name = disease['name']
}
}
var organ = result['organ']
if (organ == undefined)
organ = 'Ошибка - '+task['task']['status']
if (probability > 0)
if($('#language').val() == 'ru')
$('#short_endo_history').append('<tr><td scope="col"><img src=/img/'+result['file']+'?va'+getRandomInt(100)+' class="preview_img"></td><td scope="col"><select data-img='+result['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select w-100"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт<span></td></tr>');
else
$('#short_endo_history').append('<tr><td scope="col"><img src=/img/'+result['file']+'?va'+getRandomInt(100)+' class="preview_img"></td><td scope="col"><select data-img='+result['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select w-100"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart<span></td></tr>');
else
if($('#language').val() == 'ru')
$('#short_endo_history').append('<tr><td scope="col"><img src=/img/'+result['file']+'?va'+getRandomInt(100)+' class="preview_img"></td><td scope="col"><select data-img='+result['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select w-100"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт<span></td></tr>');
else
$('#short_endo_history').append('<tr><td scope="col"><img src=/img/'+result['file']+'?va'+getRandomInt(100)+' class="preview_img"></td><td scope="col"><select data-img='+result['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select w-100" ><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart<span></td></tr>');
label_id = label_id + 1
}
}
select_fill();
for (pic_num in data['pics'])
{
pic = data['pics'][pic_num]
if (pic.length > 0){
if(pic.length > 1)
{
console.log('Обнаружены снимки с дублирующимся описанием')
}
$.each($('.diagnoses_select'), function(e) {
if($(this).data('img') == pic[0]['hash_name'])
{
$(this).val(pic[0]['tag_id']);
$(this).parent().children('.standart_modal').data('code', pic[0]['icd']);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
}
})
}
}
for (pic_num in data['expert_pics'])
{
pic = data['expert_pics'][pic_num]
if (pic.length > 0){
if(pic.length > 1)
{
console.log('Обнаружены снимки с дублирующимся экспертым описанием')
}
$.each($('.expert_diagnos'), function(e) {
if($(this).data('img') == pic[0]['hash_name'])
{
$(this).html(pic[0]['icd']+' '+pic[0]['tag'])
$(this).parent().children('.standart_modal').data('tag_id', pic[0]['tag_id']);
$(this).parent().children('.standart_modal').data('code', pic[0]['icd']);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
}
})
}
}
$('.standart_modal').on('click', function(){
$('#standart_modal').modal('toggle');
standart_load($(this).data('code'), false, $(this).data('tag_id'));
})
$('.preview_img').click(function(){
$(this).attr('src', $(this).attr('src')+getRandomInt(99));
})
$('.diagnoses_select').on('change', function() {
save_select(this);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
});
$('.diagnoses_select').select2();
},
error:function (jqXHR, exception) {
}
});
}
//saving on select change
function save_select(element){
var message = {
diagnos_id: element.value,
pic_name: $(element).data('img'),
visit_id: $('#visit_id').val(),
}
$.ajax({
type:'POST',
url: '/save_pic_diagnos',
async: false,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$(element).parent().children('.standart_modal').data('code', data['icd']);
$(element).parent().children('.standart_modal').data('tag_id', data['tag_id']);
$('#success').html('Диагноз сохранен');
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
}
else
{
after_error();
}
},
error:function (jqXHR, exception) {
after_error();
}
});
}
function getId(str)
{
return(str.replaceAll(' ','').replaceAll(',','').replaceAll('.','').replaceAll(';','').replaceAll(':','').replaceAll('(','').replaceAll(')','').replaceAll('-','').replaceAll('/','').replaceAll('\\',''))
}
function standart_load(code, full, tag_id){
$('#cur_modal_std').val(code);
$('#cur_modal_tag_id').val(tag_id);
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/get_diagnos_standart?icd='+code+'&tag_id='+tag_id+'&lang='+lang,
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#standart_body').empty();
$('#standart_name').html(data['standart_name']);
if(lang == 'en'){
$('#standart_diagnos').html('Diagnosis: <b>' + data['name']+'</b>');
$('#standart_type').html('Type of standard: <b>'+data['standart_type']+'</b>');
$('#standart_icd_code').html('ICD-10 code: <b>'+data['icd']+'</b>');
$('#standart_time').html('Treatment time (days): <b>'+data['days_min']+' - '+data['days_max']+'</b>');
}
else
{
$('#standart_diagnos').html('Диагноз: <b>' + data['name']+'</b>');
$('#standart_type').html('Вид стандарта: <b>'+data['standart_type']+'</b>');
$('#standart_icd_code').html('Код по МКБ-10: <b>'+data['icd']+'</b>');
$('#standart_time').html('Сроки лечения (дней): <b>'+data['days_min']+' - '+data['days_max']+'</b>');
}
var groups = [];
for (std_num in data['standart'])
{
var std = data['standart'][std_num]
if (!(groups.includes(std['service_type'])))
{
groups.push(std['service_type'])
$('#standart_body').append('<h5>'+std['service_type']+'</h5><div id="group'+getId(std['service_type'])+'"></div>');
}
}
var sub_groups = [];
for (std_num in data['standart'])
{
var std = data['standart'][std_num]
for (group in groups){
if(!($('#group'+getId(std['service_type'])).data('dt'+getId(std['service_subtype'])) == true))
{
$('#group'+getId(std['service_type'])).data('dt'+getId(std['service_subtype']), true);
$('#group'+getId(std['service_type'])).append('<p>'+std['service_subtype']+'</p>');
if(lang == 'en')
$('#group'+getId(std['service_type'])).append('<table style="width: 100%;" class="table table-striped table-bordered custom-font"><thead><tr><th scope="col">Medical Service Code</th><th scope="col">Name</th><th scope="col">Approximate frequency of presentation</th></tr></thead><tbody id="table'+ getId(std['service_subtype']) + getId(std['service_type'])+'"></tbody></table>');
else
$('#group'+getId(std['service_type'])).append('<table style="width: 100%;" class="table table-striped table-bordered custom-font"><thead><tr><th scope="col">Код медицинской услуги</th><th scope="col">Наименование</th><th scope="col">Примерная частота представления</th></tr></thead><tbody id="table'+ getId(std['service_subtype']) + getId(std['service_type'])+'"></tbody></table>');
}
}
}
for (std_num in data['standart'])
{
if(full == true){
var std = data['standart'][std_num]
service_code = ''
if (!(std['service_code'] == 'NULL'))
service_code = std['service_code']
$('#table'+ getId(std['service_subtype']) + getId(std['service_type'])).append(
'<tr><td>'+service_code+'</td><td>'+std['standart_name']+'</td><td>'+std['periodicity']+'</td></td>'
);
}
else
{
var std = data['standart'][std_num]
if(std['periodicity'] == '1'){
service_code = ''
if (!(std['service_code'] == 'NULL'))
service_code = std['service_code']
$('#table'+ getId(std['service_subtype']) + getId(std['service_type'])).append(
'<tr><td>'+service_code+'</td><td>'+std['standart_name']+'</td><td>'+std['periodicity']+'</td></td>'
);
}
}
}
$('#copy_text').data('text', data['for_copy'])
},
error:function (jqXHR, exception) {
$('#standart_body').empty();
$('#standart_name').html('');
$('#standart_diagnos').html('');
$('#standart_type').html('');
$('#standart_icd_code').html('');
$('#standart_time').html('');
}
});
}
$('#copy_text').on("click", function(){
$('#text_to_copy').html($('#copy_text').data('text'));
function listener(e) {
str = document.getElementById('text_to_copy').innerHTML
e.clipboardData.setData("text/html", str);
e.clipboardData.setData("text/plain", str);
e.preventDefault();
}
document.addEventListener("copy", listener);
document.execCommand("copy");
document.removeEventListener("copy", listener);
$('#copy_text').addClass('check-icn');
setTimeout(function() {
$('#copy_text').removeClass('check-icn');
}, 2000);
});
//Мониторинг новых снимков
if ($('#visit_profarea').val() == 1){
var cookie_life = new Date();
cookie_life.setTime(cookie_life.getTime() + (20 * 60 * 1000));
check_cookies();
setInterval(() => check_cookies(), 5000);
function check_cookies()
{
if (!document.hidden) {
var url = '/new_images_monitoring'
if ($.cookie('images_timestamp'))
url = '/new_images_monitoring?timestamp='+$.cookie('images_timestamp')
$.ajax({
type:'GET',
url: url,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
for (msg_num in data['result'])
{
if (data['result'][msg_num]['timestamp'] > $.cookie('images_timestamp'))
{
if ($('#nic_saving').length > 0)
{
$('#request_waiting').show();
startLoad(data['result'][msg_num]['src']);
}
// $('#request_waiting').hide();
}
}
$.cookie('images_timestamp', data['timestamp'], { expires: cookie_life });
},
error:function (jqXHR, exception) {
after_error();
}
});
}
}
}
function updateStatus(){
var piece = 100/8;
var width = 0;
if ($('#med_card').val())
width = width + piece;
if ($('#telephone').val())
width = width + piece;
if ($('#fio').val())
width = width + piece;
if ($('#dob').val())
width = width + piece;
if ($('#sex').val())
width = width + piece;
if ($('#email').val())
width = width + piece;
// if ($('#visit_id').val())
// width = width + piece;
if ($('#complaints_input').val())
width = width + piece;
if ($('#anamnesis_input').val())
width = width + piece;
$('#exam_progress').css('width', width+'%');
}
function startLoad(nic_src){
$('#start_rec').attr("disabled", true);
$('#save_picture').attr("disabled", true);
$('#request_waiting').show();
$('#progress_text').html('Сохранение');
var lang = getUrlParameter('lang');
var fileList = document.getElementById('file_input').files;
var formData = new FormData();
var poll = null;
var i = 0
for(i=0;i<fileList.length;i++)
{
if (fileList[i].type.includes('image'))
{
formData.append("files", fileList[i]);
i += 1;
}
}
var params = {
profarea:$('#visit_profarea').val(),
med_card:$('#med_card').val(),
telephone:$('#telephone').val(),
fio:$('#fio').val(),
dob:$('#dob').val(),
sex:$('#sex').val(),
email:$('#email').val(),
visit_id:$('#visit_id').val(),
complaints:$('#complaints_input').val(),
anamnesis:$('#anamnesis_input').val(),
lang:lang
};
fio_id = $("#fio").val();
fio_text = $( "#fio option:selected" ).text();
if (fio_id == fio_text)
{
params['fio'] = fio_text;
}
else
{
params['patient_id'] = fio_id;
}
if (nic_src){
params['src'] = nic_src;
}
var str_params = jQuery.param( params );
$.ajax({
type:'POST',
data: formData,
url: '/save_med_exam?' + str_params,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
async: true,
success: (data) => {
$('#visit_id').val(data['visit_id']);
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
updateStatus();
if(i > 0)
load__endo_history(true);
if(nic_src)
load__endo_history(true);
},
error:function (jqXHR, exception) {
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
});
}
function select_fill(){
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/get_diagnos_tags/'+$('#visit_profarea').val()+'?lang='+lang,
async: false,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$.each($('.diagnoses_select'), function(e) {
for(tag_num in data) {
var tag = data[tag_num]
if(tag['category_id'] == null && tag['diagnos'] == true)
{
var icd = ''
if (tag['icd'])
{
icd = tag['icd'] + ' '
}
$(this).append('<option value="'+tag['id']+'">'+icd+tag['standart_name']+'</option>');
}
}
});
},
error:function (jqXHR, exception) {
}
});
}
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
function makeid(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for ( var i = 0; i < length; i++ ) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
});

603
webApp/templates/static/remove/med_exam_skinive.js

@ -0,0 +1,603 @@
$(document).ready(function () {
$("#fio").select2({
tags: true
});
$("#fio").on("change", function() {
id = this.value;
text = $( "#fio option:selected" ).text();
if (id == text)
{
console.log('New Patient');
}
else{
$.ajax({
type: "GET",
url: '/get_patient_clinic/' + id,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$("#med_card").val(data['card_number']);
$("#telephone").val(data['telephone']);
$("#dob").val(data['dob']);
$("#sex").val(data['sex']);
updateInfo();
}
})
}
})
load__endo_history(true);
function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
$('.close-modal').on('click', function(){
$('#standart_modal').modal('toggle');
});
$('#short_std').on('click', function(){
standart_load($('#cur_modal_std').val(), false, $('#cur_modal_tag_id').val());
$('#short_std').hide();
$('#long_std').show();
});
$('#long_std').on('click', function(){
standart_load($('#cur_modal_std').val(), true, $('#cur_modal_tag_id').val());
$('#short_std').show();
$('#long_std').hide();
});
$('#med_card').on('change', function(){updateInfo()});
$('#telephone').on('change', function(){updateInfo()});
// $('#fio').on('change', function(){updateInfo()});
$('#dob').on('change', function(){updateInfo()});
$('#sex').on('change', function(){updateInfo()});
$('#complaints_input').on('change', function(){updateInfo()});
$('#anamnesis_input').on('change', function(){updateInfo()});
function complete_med_exam(visit_id){
var message = {
visit_id : visit_id
}
$.ajax({
type:'POST',
url: '/complete_med_exam',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
show_success('Профосмотр сохранён', false);
}
else
{
show_error('Не удалось завершить профосмотр' ,0);
}
},
error:function (jqXHR, exception) {
show_error('Не удалось завершить профосмотр' ,0);
}
});
}
$('#clear_med_exam').click(function(){
$('#med_card').val('');
$('#telephone').val('');
$('#fio').val('');
$('#dob').val('');
$('#sex').val('');
$('#complaints_input').val('');
$('#anamnesis_input').val('');
$('#short_endo_history').empty();
let visit_id = $('#visit_id').val();
complete_med_exam(visit_id);
updateStatus();
$.ajax({
type:'GET',
url: '/get_new_visit_id',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#visit_id').val(data['visit_id']);
console.log('New visit ID');
console.log($('#visit_id').val());
},
error:function (jqXHR, exception) {
after_error();
}
});
})
function updateInfo(){
updateStatus();
if ($('#visit_id').val())
startLoad(null)
else
console.log('no visit')
}
function previewIMG(input, preview) {
var reader = new FileReader();
reader.onload = function(e) {
$(preview).attr('src', e.target.result);
}
reader.readAsDataURL(input);
}
$("#file_input").change(function(){
$('#imgs_preview').empty();
$('#file-input-greenspan').html('');
if ($(this)[0].files[0]) {
$('#pre_load').hide();
$('#file-input-greenspan').html('Загружено снимков: ' + $(this)[0].files.length);
for(i=0;i<$(this)[0].files.length;i++)
{
if (($(this)[0].files[i].type.includes('image')))
{
div = document.createElement('div');
div.setAttribute('class', 'col-3 p-1 m-0');
img = document.createElement('img');
img.setAttribute('class', 'preview_img');
previewIMG($(this)[0].files[i], $(img));
div.appendChild(img);
document.getElementById("imgs_preview").appendChild(div);
startLoad(null);
}
}
}
});
function reload_visit_info(){
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/reload_visit_info/' + $('#visit_id').val() + '?task=off'+'&lang='+lang,
processData: false,
contentType: false,
success: (data) => {
//load__endo_history(false);
}
});
}
function load__endo_history(rvn){
$('#short_endo_history').empty();
if(rvn)
reload_visit_info();
$.ajax({
type:'GET',
url: '/get_visit_info/' + $('#visit_id').val() + '?task=off',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentTypestatus
success: (data) => {
var label_id = 0
for (untask_num in data['untask_pics'])
{
pic = data['untask_pics'][untask_num]
organ = ''
if (pic['organ'])
{
organ = pic['organ']
}
if($('#language').val() == 'ru')
$('#short_endo_history').append('<tr><td scope="col"><img src=/img/'+pic['file']+'?va'+getRandomInt(100)+' class="preview_img"></td><td scope="col"><select data-img='+pic['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select w-100"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт</span></td></tr>');
else
$('#short_endo_history').append('<tr><td scope="col"><img src=/img/'+pic['file']+'?va'+getRandomInt(100)+' class="preview_img"></td><td scope="col"><select data-img='+pic['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select w-100"><option value="" disabled="" selected="">Diagnosis</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart</span></td></tr>');
label_id = label_id + 1
}
for (task_num in data['tasks'])
{
task = data['tasks'][task_num]
if ('task' in task)
if (task['task'])
if ('result' in task['task'])
for (result_num in task['task']['result'])
{
result = task['task']['result'][result_num]
var code = ''
var name = ''
var probability = 0
if ('diseases' in result)
for (d_num in result['diseases'])
{
disease = result['diseases'][d_num]
if(disease['probability'] > probability)
{
probability = disease['probability']
code = disease['code']
name = disease['name']
}
}
var organ = result['organ']
if (organ == undefined)
organ = 'Ошибка - '+task['task']['status']
if (probability > 0)
if($('#language').val() == 'ru')
$('#short_endo_history').append('<tr><td scope="col"><img src=/img/'+result['file']+'?va'+getRandomInt(100)+' class="preview_img"></td><td scope="col"><select data-img='+result['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select w-100"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт<span></td></tr>');
else
$('#short_endo_history').append('<tr><td scope="col"><img src=/img/'+result['file']+'?va'+getRandomInt(100)+' class="preview_img"></td><td scope="col"><select data-img='+result['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select w-100"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart<span></td></tr>');
else
if($('#language').val() == 'ru')
$('#short_endo_history').append('<tr><td scope="col"><img src=/img/'+result['file']+'?va'+getRandomInt(100)+' class="preview_img"></td><td scope="col"><select data-img='+result['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select w-100"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт<span></td></tr>');
else
$('#short_endo_history').append('<tr><td scope="col"><img src=/img/'+result['file']+'?va'+getRandomInt(100)+' class="preview_img"></td><td scope="col"><select data-img='+result['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select w-100" ><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart<span></td></tr>');
label_id = label_id + 1
}
}
select_fill();
for (pic_num in data['pics'])
{
pic = data['pics'][pic_num]
if (pic.length > 0){
if(pic.length > 1)
{
console.log('Обнаружены снимки с дублирующимся описанием')
}
$.each($('.diagnoses_select'), function(e) {
if($(this).data('img') == pic[0]['hash_name'])
{
$(this).val(pic[0]['tag_id']);
$(this).parent().children('.standart_modal').data('code', pic[0]['icd']);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
}
})
}
}
for (pic_num in data['expert_pics'])
{
pic = data['expert_pics'][pic_num]
if (pic.length > 0){
if(pic.length > 1)
{
console.log('Обнаружены снимки с дублирующимся экспертым описанием')
}
$.each($('.expert_diagnos'), function(e) {
if($(this).data('img') == pic[0]['hash_name'])
{
$(this).html(pic[0]['icd']+' '+pic[0]['tag'])
$(this).parent().children('.standart_modal').data('tag_id', pic[0]['tag_id']);
$(this).parent().children('.standart_modal').data('code', pic[0]['icd']);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
}
})
}
}
$('.standart_modal').on('click', function(){
$('#standart_modal').modal('toggle');
standart_load($(this).data('code'), false, $(this).data('tag_id'));
})
$('.preview_img').click(function(){
$(this).attr('src', $(this).attr('src')+getRandomInt(99));
})
$('.diagnoses_select').on('change', function() {
save_select(this);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
});
$('.diagnoses_select').select2();
},
error:function (jqXHR, exception) {
}
});
}
//saving on select change
function save_select(element){
var message = {
diagnos_id: element.value,
pic_name: $(element).data('img'),
visit_id: $('#visit_id').val(),
}
$.ajax({
type:'POST',
url: '/save_pic_diagnos',
async: false ,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$(element).parent().children('.standart_modal').data('code', data['icd']);
$(element).parent().children('.standart_modal').data('tag_id', data['tag_id']);
$('#success').html('Диагноз сохранен');
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
}
else
{
after_error();
}
},
error:function (jqXHR, exception) {
after_error();
}
});
}
function getId(str)
{
return(str.replaceAll(' ','').replaceAll(',','').replaceAll('.','').replaceAll(';','').replaceAll(':','').replaceAll('(','').replaceAll(')','').replaceAll('-','').replaceAll('/','').replaceAll('\\',''))
}
function standart_load(code, full, tag_id){
$('#cur_modal_std').val(code);
$('#cur_modal_tag_id').val(tag_id);
lang = getUrlParameter('lang');
console.log('lang - '+lang);
$.ajax({
type:'GET',
url: '/get_diagnos_standart?icd='+code+'&tag_id='+tag_id+'&lang='+lang,
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#standart_body').empty();
$('#standart_name').html(data['standart_name']);
if(lang == 'en'){
$('#standart_diagnos').html('Diagnosis: <b>' + data['name']+'</b>');
$('#standart_type').html('Type of standard: <b>'+data['standart_type']+'</b>');
$('#standart_icd_code').html('ICD-10 code: <b>'+data['icd']+'</b>');
$('#standart_time').html('Treatment time (days): <b>'+data['days_min']+' - '+data['days_max']+'</b>');
}
else
{
$('#standart_diagnos').html('Диагноз: <b>' + data['name']+'</b>');
$('#standart_type').html('Вид стандарта: <b>'+data['standart_type']+'</b>');
$('#standart_icd_code').html('Код по МКБ-10: <b>'+data['icd']+'</b>');
$('#standart_time').html('Сроки лечения (дней): <b>'+data['days_min']+' - '+data['days_max']+'</b>');
}
var groups = [];
for (std_num in data['standart'])
{
var std = data['standart'][std_num]
if (!(groups.includes(std['service_type'])))
{
groups.push(std['service_type'])
$('#standart_body').append('<h5>'+std['service_type']+'</h5><div id="group'+getId(std['service_type'])+'"></div>');
}
}
var sub_groups = [];
for (std_num in data['standart'])
{
var std = data['standart'][std_num]
for (group in groups){
if(!($('#group'+getId(std['service_type'])).data('dt'+getId(std['service_subtype'])) == true))
{
$('#group'+getId(std['service_type'])).data('dt'+getId(std['service_subtype']), true);
$('#group'+getId(std['service_type'])).append('<p>'+std['service_subtype']+'</p>');
if(lang == 'en')
$('#group'+getId(std['service_type'])).append('<table style="width: 100%;" class="table table-striped table-bordered custom-font"><thead><tr><th scope="col">Medical Service Code</th><th scope="col">Name</th><th scope="col">Approximate frequency of presentation</th></tr></thead><tbody id="table'+ getId(std['service_subtype']) + getId(std['service_type'])+'"></tbody></table>');
else
$('#group'+getId(std['service_type'])).append('<table style="width: 100%;" class="table table-striped table-bordered custom-font"><thead><tr><th scope="col">Код медицинской услуги</th><th scope="col">Наименование</th><th scope="col">Примерная частота представления</th></tr></thead><tbody id="table'+ getId(std['service_subtype']) + getId(std['service_type'])+'"></tbody></table>');
}
}
}
for (std_num in data['standart'])
{
if(full == true){
var std = data['standart'][std_num]
service_code = ''
if (!(std['service_code'] == 'NULL'))
service_code = std['service_code']
$('#table'+ getId(std['service_subtype']) + getId(std['service_type'])).append(
'<tr><td>'+service_code+'</td><td>'+std['standart_name']+'</td><td>'+std['periodicity']+'</td></td>'
);
}
else
{
var std = data['standart'][std_num]
if(std['periodicity'] == '1'){
service_code = ''
if (!(std['service_code'] == 'NULL'))
service_code = std['service_code']
$('#table'+ getId(std['service_subtype']) + getId(std['service_type'])).append(
'<tr><td>'+service_code+'</td><td>'+std['standart_name']+'</td><td>'+std['periodicity']+'</td></td>'
);
}
}
}
$('#copy_text').data('text', data['for_copy'])
},
error:function (jqXHR, exception) {
$('#standart_body').empty();
$('#standart_name').html('');
$('#standart_diagnos').html('');
$('#standart_type').html('');
$('#standart_icd_code').html('');
$('#standart_time').html('');
}
});
}
$('#copy_text').on("click", function(){
$('#text_to_copy').html($('#copy_text').data('text'));
function listener(e) {
str = document.getElementById('text_to_copy').innerHTML
e.clipboardData.setData("text/html", str);
e.clipboardData.setData("text/plain", str);
e.preventDefault();
}
document.addEventListener("copy", listener);
document.execCommand("copy");
document.removeEventListener("copy", listener);
$('#copy_text').addClass('check-icn');
setTimeout(function() {
$('#copy_text').removeClass('check-icn');
}, 2000);
});
function updateStatus(){
var piece = 100/7;
var width = 0;
if ($('#med_card').val())
width = width + piece;
if ($('#telephone').val())
width = width + piece;
if ($('#fio').val())
width = width + piece;
if ($('#dob').val())
width = width + piece;
if ($('#sex').val())
width = width + piece;
// if ($('#visit_id').val())
// width = width + piece;
if ($('#complaints_input').val())
width = width + piece;
if ($('#anamnesis_input').val())
width = width + piece;
$('#exam_progress').css('width', width+'%');
}
function startLoad(nic_src){
$('#start_rec').attr("disabled", true);
$('#save_picture').attr("disabled", true);
$('#request_waiting').show();
$('#progress_text').html('Сохранение');
var lang = getUrlParameter('lang');
var fileList = document.getElementById('file_input').files;
var formData = new FormData();
var poll = null;
var i = 0
for(i=0;i<fileList.length;i++)
{
if (fileList[i].type.includes('image'))
{
formData.append("files", fileList[i]);
i += 1;
}
}
var params = {
profarea:$('#visit_profarea').val(),
med_card:$('#med_card').val(),
telephone:$('#telephone').val(),
fio:$('#fio').val(),
dob:$('#dob').val(),
sex:$('#sex').val(),
visit_id:$('#visit_id').val(),
complaints:$('#complaints_input').val(),
anamnesis:$('#anamnesis_input').val(),
lang:lang
};
if (nic_src){
params['src'] = nic_src;
}
var str_params = jQuery.param( params );
$.ajax({
type:'POST',
data: formData,
url: '/save_med_exam?' + str_params,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
async: true,
success: (data) => {
$('#visit_id').val(data['visit_id']);
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
updateStatus();
if(i > 0)
load__endo_history(true);
if(nic_src)
load__endo_history(true);
},
error:function (jqXHR, exception) {
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
});
}
function select_fill(){
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/get_diagnos_tags/'+$('#visit_profarea').val()+'?lang='+lang,
async: false,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$.each($('.diagnoses_select'), function(e) {
for(tag_num in data)
{
var tag = data[tag_num]
if(tag['category_id'] == null && tag['diagnos'] == true)
{
var icd = ''
if (tag['icd'])
{
icd = tag['icd'] + ' '
}
$(this).append('<option value="'+tag['id']+'">'+icd+tag['standart_name']+'</option>');
}
}
});
},
error:function (jqXHR, exception) {
}
});
}
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
function makeid(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for ( var i = 0; i < length; i++ ) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
});

318
webApp/templates/static/remove/new_images_control.js

@ -0,0 +1,318 @@
$(document).ready(function () {
$('#nic_new_img_btn').click(function(){
$('#nic_new_img_modal').modal('show');
get_new_db_images();
$('#nic_images_to_visit').attr("disabled", false);
$('#nic_images_to_exam').attr("disabled", false);
});
$('.close').click(function(){
$('#' + $(this).data('target')).hide();
});
var cookie_life = new Date();
cookie_life.setTime(cookie_life.getTime() + (20 * 60 * 1000));
$.cookie('images_timestamp', null, { expires: 0 });
check_cookies();
setInterval(() => check_cookies(), 5000);
function check_cookies()
{
if (!document.hidden) {
if ($('#nic_saving').length == 0)
{
var url = '/new_images_monitoring'
if ($.cookie('images_timestamp'))
url = '/new_images_monitoring?timestamp='+$.cookie('images_timestamp')
$.ajax({
type:'GET',
url: url,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
for (msg_num in data['result'])
{
if (data['result'][msg_num]['timestamp'] > $.cookie('images_timestamp'))
{
startRemoteUnvRec(data['result'][msg_num]['src']);
}
if($.cookie('images_timestamp') == null)
{
startRemoteUnvRec(data['result'][msg_num]['src']);
}
}
$.cookie('images_timestamp', data['timestamp'], { expires: cookie_life });
if (data['length'] > 0)
{
$('#nic_new_img_btn').show();
}
else
{
$('#nic_new_img_btn').hide();
}
},
error:function (jqXHR, exception) {
after_error();
}
});
}
}
}
function startRemoteUnvRec(src){
// console.log('start_remote_unvisit_image_diagnostics');
var message = {
src: src
}
lang = getUrlParameter('lang');
$.ajax({
type:'POST',
data: JSON.stringify(message),
url: '/start_remote_unvisit_image_diagnostics'+'?lang='+lang,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
//Если модалка активна
if($('#nic_new_img_modal').hasClass('show'))
{
get_new_db_images();
}
},
error:function (jqXHR, exception) {
}
});
}
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
$('#nic_images_to_exam').click(function(){
$('#nic_images_to_exam').attr("disabled", true);
var image_ids = [];
$.each($('.img-checkbox'), function(e) {
if($(this).is(':checked'))
image_ids.push($(this).data('id'));
});
var message = {
'image_ids': image_ids
}
lang = getUrlParameter('lang');
$.ajax({
type:'POST',
data: JSON.stringify(message),
url: '/nic_images_to_exam'+'?lang='+lang,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
if(data['success'] == true)
{
if(lang == 'en')
window.location.href = '/med_exam?visit_id='+data['visit_id']+'&lang=en';
else
window.location.href = '/med_exam?visit_id='+data['visit_id']+'&lang=ru';
}
else
$('#nic_images_to_exam').attr("disabled", false);
},
error:function (jqXHR, exception) {
$('#nic_images_to_exam').attr("disabled", false);
}
});
});
$('#nic_images_to_visit').click(function(){
$('#nic_images_to_visit').attr("disabled", true);
var image_ids = [];
$.each($('.img-checkbox'), function(e) {
if($(this).is(':checked'))
image_ids.push($(this).data('id'));
});
var message = {
'image_ids': image_ids
}
lang = getUrlParameter('lang');
$.ajax({
type:'POST',
data: JSON.stringify(message),
url: '/nic_images_to_visit'+'?lang='+lang,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
if(data['success'] == true)
{
// if(lang == 'en')
// window.location.href = '/visit/'+data['patient_id']+'?lang=en&nic_visit=true';
// else
// window.location.href = '/visit/'+data['patient_id']+'?nic_visit=true';
if(lang == 'en')
window.location.href = '/visit/new_visit'+'?lang=en&nic_visit=true&visit_id='+data['visit_id'];
else
window.location.href = '/visit/new_visit'+'?nic_visit=true&visit_id='+data['visit_id'];
}
else
$('#nic_images_to_visit').attr("disabled", false);
},
error:function (jqXHR, exception) {
$('#nic_images_to_visit').attr("disabled", false);
}
});
});
$('#nic_remove_images').click(function(){
var image_ids = [];
$.each($('.img-checkbox'), function(e) {
if($(this).is(':checked'))
image_ids.push($(this).data('id'));
});
var message = {
'image_ids': image_ids
}
$.ajax({
type:'POST',
data: JSON.stringify(message),
url: '/remove_nic_images',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
get_new_db_images();
},
error:function (jqXHR, exception) {
}
});
});
function get_new_db_images(){
// Доделать чекбоксы для
$('#new_images_selector').empty();
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/get_new_db_images'+'?lang='+lang,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#new_images_selector').empty();
for(i in data['result']['groups'])
{
form_check = document.createElement('div');
form_check.setAttribute('class', 'form_check');
checkbox = document.createElement('input');
checkbox.setAttribute('type', 'checkbox');
checkbox.setAttribute('class', 'form-check-input check-group me-2');
checkbox.setAttribute('data-id', 'group_' + data['result']['groups'][i]);
checkbox.setAttribute('data-group', data['result']['groups'][i]);
label = document.createElement('label');
label.setAttribute('for', 'group_' + data['result']['groups'][i]);
label.setAttribute('class', 'form-check-label');
h3 = document.createElement('h3');
h3.innerHTML = data['result']['groups'][i]
label.appendChild(h3);
form_check.appendChild(checkbox);
form_check.appendChild(label);
document.getElementById("new_images_selector").appendChild(form_check);
pics = data['result'][data['result']['groups'][i]];
for(j in pics){
var pic = pics[j];
div = document.createElement('div');
div.setAttribute('class', 'col-xs-4 col-md-3 col-lg-2 col-4 p-1 m-0');
custom_control = document.createElement('div');
custom_control.setAttribute('class', 'custom-control custom-checkbox image-checkbox');
checkbox = document.createElement('input');
checkbox.setAttribute('type', 'checkbox');
checkbox.setAttribute('class', 'custom-control-input img-checkbox');
checkbox.setAttribute('id', 'chk' + pic['id']);
checkbox.setAttribute('data-id', pic['id']);
checkbox.setAttribute('data-group', data['result']['groups'][i]);
label = document.createElement('label');
label.setAttribute('for', 'chk' + pic['id']);
label.setAttribute('class', 'custom-control-label image-checkbox-label');
img = document.createElement('img');
img.setAttribute('class', 'img-fluid');
img.setAttribute('alt', '#');
img.setAttribute('src', '/img/'+pic['hash_name']);
label.appendChild(img);
custom_control.appendChild(checkbox);
custom_control.appendChild(label);
div.appendChild(custom_control);
document.getElementById("new_images_selector").appendChild(div);
}
$('#new_images_selector').append('<hr>');
}
$('.check-group').click(function(){
var group = $(this).data('group');
if($(this).is(':checked'))
$.each($('.img-checkbox'), function(e) {
if($(this).data('group') == group)
$(this).prop('checked', true);
});
else
$.each($('.img-checkbox'), function(e) {
if($(this).data('group') == group)
$(this).prop('checked', false);
});
});
$('.img-checkbox').click(function(){
var group = $(this).data('group');
var all_checked = true;
if($(this).is(':checked'))
$.each($('.img-checkbox'), function(e) {
if($(this).data('group') == group)
if($(this).is(':checked') == false)
{
all_checked = false
}
});
else
{
$.each($('.check-group'), function(e) {
if($(this).data('group') == group)
$(this).prop('checked', false);
});
all_checked = false
}
if (all_checked == true)
{
$.each($('.check-group'), function(e) {
if($(this).data('group') == group)
$(this).prop('checked', true);
});
}
})
},
error:function (jqXHR, exception) {
}
});
}
});

160
webApp/templates/static/remove/news.js

@ -0,0 +1,160 @@
$(document).ready(function () {
$("#modal_create_news").on('click', function() {
$("#create_news_modal").modal('toggle')
});
$("#create_news").on("click", function() {
let news = {
title: $("#title_news").val(),
text: $("#text_news").val(),
image: '',
file: ''
}
//img = $('#image_news_file')[0].files[0]
//if (img) {
//
// var reader = new FileReader();
// reader.readAsDataURL(img);
// reader.onload = function() {
// let url=this.result.substring(this.result.indexOf(',')+1);
// news.file = 'data:image/png;base64,' + url
// console.log(news)
// }
//}
var stav = true
if ($("#image_news").val() != '') {
var RegExp = /^((ftp|http|https):\/\/)?(www\.)?([A-Za-zА-Яа-я0-9]{1}[A-Za-zА-Яа-я0-9\-]*\.?)*\.{1}[A-Za-zА-Яа-я0-9-]{2,8}(\/([\w#!:.?+=&%@!\-\/])*)?/;
if(RegExp.test($("#image_news").val())){
news.image = $("#image_news").val()
stav = true
} else {
stav = false
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
} else {
stav = true
}
if (news.title != '' && news.text != '') {
if (stav == true) {
$.ajax({
type: 'POST',
url: '/add_news',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(news),
success: (data ) => {
if (data['success'] == true) {
$("#create_news_modal").modal('hide');
location.reload();
}
}
})
}
} else {
$('#exception_data').slideDown(500);
$('#exception_data').delay(2000).slideUp();
}
});
$('.remove_news').on('click', function() {
//console.log($(this)[0].attributes);
//console.log($(this)[0].attributes['id-data_news']['value']);
var ind = $(this)[0].attributes['id-data_news']['value'];
data = {
'ind': ind
}
$.ajax({
type: "POST",
url: "/delete_news",
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(data),
success: (data ) => {
if (data['success'] == true) {
location.reload()
}
}
})
});
$(".edit_news").on('click', function() {
var ind = $(this)[0].attributes['id-data_news']['value'];
$.ajax({
type: 'GET',
url: '/get_news/'+ind,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#title_news_edit').val(data['title'])
$('#text_news_edit').val(data['text'])
$('#image_news_edit').val(data['url'])
$('#save_edit_news').attr("id-data_card", data['id'])
}
})
$("#edit_news_modal").modal('toggle')
});
$('#save_edit_news').on('click', function() {
let news = {
title: $("#title_news_edit").val(),
text: $("#text_news_edit").val(),
image: '',
file: ''
}
//img = $('#image_news_file')[0].files[0]
//if (img) {
//
// var reader = new FileReader();
// reader.readAsDataURL(img);
// reader.onload = function() {
// let url=this.result.substring(this.result.indexOf(',')+1);
// news.file = 'data:image/png;base64,' + url
// console.log(news)
// }
//}
var stav = true
if ($("#image_news_edit").val() != '') {
var RegExp = /^((ftp|http|https):\/\/)?(www\.)?([A-Za-zА-Яа-я0-9]{1}[A-Za-zА-Яа-я0-9\-]*\.?)*\.{1}[A-Za-zА-Яа-я0-9-]{2,8}(\/([\w#!:.?+=&%@!\-\/])*)?/;
if(RegExp.test($("#image_news_edit").val())){
news.image = $("#image_news_edit").val()
stav = true
} else {
stav = false
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
} else {
stav = true
}
var ind = $(this)[0].attributes[2]['value'];
console.log( $(this)[0].attributes[2]['value'])
if (news.title != '' && news.text != '') {
if (stav == true) {
$.ajax({
type: 'POST',
url: '/edit_news/' + ind,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(news),
success: (data ) => {
if (data['success'] == true) {
$("#edit_news_modal").modal('hide');
location.reload();
}
}
})
}
} else {
$('#exception_data').slideDown(500);
$('#exception_data').delay(2000).slideUp();
}
})
})

68
webApp/templates/static/remove/pdf_report.js

@ -0,0 +1,68 @@
$(document).ready(function() {
$('#pdf_download').click(function()
{
wait_button(this);
$.ajax({
type:'GET',
url: '/pdf_report/'+$('#visit_id').val(),
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
var a = document.createElement('a');
a.href = '/pdf/'+ data;
filename = $('#patient_full_name').html()
a.download = filename + '.pdf';
document.body.append(a);
a.click();
a.remove();
window.URL.revokeObjectURL('/pdf/'+ data);
resume_button(this);
$('#pdf_download').attr("disabled", false);
},
error:function (jqXHR, exception) {
show_error('Не сформировать PDF файл',0);
console.log('resume button')
resume_button(this);
$('#pdf_download').attr("disabled", false);
}
});
})
$('#send_patient_pdf').click(function()
{
wait_button(this);
var message = {
visit_id : $('#visit_id').val()
}
$.ajax({
type:'POST',
url: '/send_pdf_report',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
show_success('PDF успешно отправлена', false);
}
else
{
if(data.hasOwnProperty('message'))
{
show_error(data.message,0);
}
else
{
show_error('Не удалось отправить PDF файл',0);
}
}
resume_button(this);
},
error:function (jqXHR, exception) {
show_error('Ошибка сервера. Не удалось отправить PDF файл',0);
resume_button(this);
}
});
})
});

85
webApp/templates/static/remove/routing.js

@ -0,0 +1,85 @@
$(document).ready(function () {
$('.check-filter').click(function(){
if($(this).is(':checked'))
$('.'+$(this).attr('id')).show();
else
$('.'+$(this).attr('id')).hide();
});
$('.direct_patient').on('change', function(){
$('#direct_modal').modal('toggle');
$('#send_direction').data('routing_id', $(this).data('routing_id'));
$('#send_direction').data('clinic_id', $(this).val());
$('#dm_patinet').html($(this).data('patient_name'));
$('#dm_clinic').html($(this).children(':selected').text());
});
$('#send_direction').on('click', function(){
var params = {
routing_id : $(this).data('routing_id'),
clinic_id : $(this).data('clinic_id')
};
$.ajax({
type:'POST',
url: '/route_patient',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(params),
success: (data) => {
console.log('data')
if(data['success'] == true)
{
$('#direct_modal').modal('hide');
}
},
error:function (jqXHR, exception) {
after_error();
}
});
});
$('.patient-sort').click(function(){
$('.check-filter').prop('checked', true);
if($(this).attr('selected')){
$(this).removeAttr('selected');
$('.routing-card').show();
return;
}
else{
$(this).attr('selected', '1');
var patient_id = $(this).data('patient_id');
$.each($('.routing-card'), function(e) {
if($(this).data('patient_id') == patient_id)
{
$(this).show();
}
else
{
$(this).hide();
}
})
}
});
$('.excl_dwnld').on('click', function() {
$.ajax({
type: 'GET',
url: '/dwnld_excl',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
var a = document.createElement('a');
a.href = '/excel/'+ data['file'];
filename = $('#clinic_name').val()+'_report'
a.download = filename + '.xlsx';
document.body.append(a);
a.click();
a.remove();
window.URL.revokeObjectURL('/excel/'+ data['file']);
},
})
})
});

552
webApp/templates/static/remove/routing_rules.js

@ -0,0 +1,552 @@
$(document).ready(function () {
var codition = {}
open_filter();
remove_script_btn();
function remove_script_btn(){
$('.remove-script').click(function(){
console.log($(this).data('id'));
if($(this).data('id') == 'main_filter')
{
$('#' + $(this).data('id')).data('filters', '');
$('#' + $(this).data('id')).data('filter_type', '');
$('#' + $(this).data('id')).parent().children("small").remove();
$('#' + $(this).data('id')).val('0').prop('selected', true);
$('#' + $(this).data('id')).parent().children(".small").remove();
$('#' + $(this).data('id')).select2({
tags: true
});
}
else
{
$('#' + $(this).data('id')).parent().remove();
$(this).parent().remove();
}
})
}
function open_filter() {
$('.filter').change(function() {
if($(this).val() == 'by_nn_diagnos'){
$('#routing_modal_by_diagnos').modal('toggle');
$("#routing_modal_dignosis_submit").attr('filter_type', $(this).val());
$("#routing_modal_dignosis_submit").attr('filter_num', $(this).attr('id'));
$(this).data('filter_type', $(this).val());
//$('#area1').attr('class', 'tab-pane active')
//$('#arealink1').attr('class', 'nav-link active')
//Открывается модалка с 4 вкладками, в них чекбоксы с перечисленными диагнозами,
//при закрытии модалки в data- от селекта записывается набор tag.id добавленых в фильтр
//Под SELECT пишется набор tag.name в small
}
if($(this).val() == 'by_expert_diagnos'){
$('#routing_modal_by_diagnos').modal('toggle');
$("#routing_modal_dignosis_submit").attr('filter_type', $(this).val());
$("#routing_modal_dignosis_submit").attr('filter_num', $(this).attr('id'));
$(this).data('filter_type', $(this).val());
//$('#area1').attr('class', 'tab-pane active')
//$('#arealink1').attr('class', 'nav-link active')
//Открывается модалка с 4 вкладками, в них чекбоксы с перечисленными диагнозами,
//при закрытии модалки в data- от селекта записывается набор tag.id добавленых в фильтр
//Под SELECT пишется набор tag.name в small
}
if($(this).val() == 'by_doctor_diagnos'){
$('#routing_modal_by_diagnos').modal('toggle');
$("#routing_modal_dignosis_submit").attr('filter_type', $(this).val());
$("#routing_modal_dignosis_submit").attr('filter_num', $(this).attr('id'));
$(this).data('filter_type', $(this).val());
//$('#area1').attr('class', 'tab-pane active')
//$('#arealink1').attr('class', 'nav-link active')
//Открывается модалка с 4 вкладками, в них чекбоксы с перечисленными диагнозами,
//при закрытии модалки в data- от селекта записывается набор tag.id добавленых в фильтр
//Под SELECT пишется набор tag.name в small
}
if($(this).val() == 'by_script'){
$('#routing_modal_by_script').modal('toggle');
$("#routing_modal_scripts_submit").attr('filter_type', 'by_script');
$(this).data('filter_type', 'by_script');
$("#routing_modal_scripts_submit").attr('filter_num', $(this).attr('id'));
//Открывается модалка с чекбоксами возможных первичных сценариев,
//[Визит, Профосмотр, Направление, Внешние источники, Виджет на сайте]
//при закрытии модалки в data- от селекта записывается набор имен сценариев добавленых в фильтр
//Под SELECT пишется набор сценариев в small
}
if($(this).val() == 'by_user'){
var ind = $('#source_clinic').val()
if (!ind) {
$('#exception').innerHTML = "Выберите клинику";
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
} else {
$('#routing_modal_by_user').modal('toggle');
$.ajax({
type:'GET',
url: '/routing/get_user_by_clinic/' + ind,
processData: false,
contentType: false,
success: (data) => {
var users_list = document.getElementById('users');
$(users_list).empty();
for (var i = 0; i < data.length; i++) {
var div = document.createElement('div');
div.setAttribute('class', 'form-check.mb-2')
var checkbox = document.createElement('input');
checkbox.setAttribute('class', 'form-check-input user');
checkbox.setAttribute('id', 'user_id'+data[i]['id']);
checkbox.setAttribute('value', data[i]['id']);
checkbox.setAttribute('type', 'checkbox');
var label = document.createElement('label');
label.setAttribute('class', 'form-check-label');
label.setAttribute('for', 'user_id'+data[i]['id']);
label.innerHTML = data[i]['name']
div.appendChild(checkbox);
div.appendChild(label);
users_list.appendChild(div);
}
$("#routing_modal_users_submit").attr('filter_type', 'by_user');
$(this).data('filter_type', $(this).val());
$("#routing_modal_users_submit").attr('filter_num', $(this).attr('id'));
}
})
}
//Открывается модалка с чекбоксами возможных пользователей клиники-инициатора
//при закрытии модалки в data- от селекта записывается набор user.id добавленых в фильтр
//Под SELECT пишется набор user.name в small
}
if($(this).val() == 'by_profarea'){
var id = $('#source_clinic').val();
if (!id) {
$('#exception').innerHTML = "Выберите клинику";
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
} else {
$('#routing_modal_by_profarea').modal('toggle');
$.ajax({
url: '/routing/get_profarea_by_clinic/' + id,
processData: false,
contentType: false,
success: (data) => {
var profarea_list = document.getElementById('profarea_list');
$(profarea_list).empty();
for (var i = 0; i < data.length; i++) {
var div = document.createElement('div');
div.setAttribute('class', 'form-check.mb-2')
var checkbox = document.createElement('input');
checkbox.setAttribute('class', 'form-check-input area');
checkbox.setAttribute('id', 'area_id'+data[i]['id'])
checkbox.setAttribute('value', data[i]['id'])
checkbox.setAttribute('type', 'checkbox');
var label = document.createElement('label');
label.setAttribute('class', 'form-check-label');
label.setAttribute('for', 'area_id'+data[i]['id']);
label.innerHTML = data[i]['name']
div.appendChild(checkbox);
div.appendChild(label);
profarea_list.appendChild(div);
}
$("#routing_modal_profarea_submit").attr('filter_type', 'by_profarea');
$(this).data('filter_type', $(this).val());
$("#routing_modal_profarea_submit").attr('filter_num', $(this).attr('id'));
}
})
}
//Открывается модалка с чекбоксами возможных профобластей клиники-инициатора
//при закрытии модалки в data- от селекта записывается набор profarea.id добавленых в фильтр
//Под SELECT пишется набор profarea.area_name в small
}
if($(this).val() == 'by_city'){
$('#routing_modal_by_city').modal('toggle');
$.ajax({
url: '/routing/get_city',
processData: false,
contentType: false,
success: (data) => {
for (var i = 0; i < data.length; i++) {
var option = document.createElement('option');
option.setAttribute('value', data[i]['id']);
option.innerHTML = data[i]['name'];
$('#city_patient').append(option);
}
$("#routing_modal_city_submit").attr('filter_type', 'by_city');
$(this).data('filter_type', $(this).val());
$("#routing_modal_city_submit").attr('filter_num', $(this).attr('id'));
$(".routing_select2").select2({
tags: true
});
}
})
//Открывается модалка с SELECT2 с кастомным вводом, на модалке кнопка добавить выбранный
//При нажатии кнопки город добавляется в список под селектом, рядом с каждым должен быть крестик для удаления
//при закрытии модалки в data- от селекта записывается набор городов добавленых в фильтр
//Под SELECT пишется набор городов в small
}
});
//TODO: если фильтр поменяли на другой, то удалять значнения из filters() сделать кнопку удаления фильтра справа от селекта
}
$("#city_patient").change(function() {
$('#city').show();
var city = this.options[this.selectedIndex].text
var id = $(this).val()
var div = document.createElement('div');
div.setAttribute('class', 'form-check.mb-2')
var checkbox = document.createElement('input');
checkbox.setAttribute('class', 'form-check-input city');
checkbox.setAttribute('id', 'city_id'+id);
checkbox.setAttribute('value', city);
checkbox.setAttribute('type', 'checkbox');
checkbox.setAttribute('checked', '')
var label = document.createElement('label');
label.setAttribute('class', 'form-check-label');
label.setAttribute('for', 'user_id'+id);
label.innerHTML = city
div.appendChild(checkbox);
div.appendChild(label);
$('#city_list').append(div);
});
$('.nav-link').on('click', function() {
this.setAttribute('class', 'nav-link active');
});
$('.choise_all').on('click', function() {
var checkboxes = document.querySelectorAll('input[area_id="' + this.getAttribute('id_area') + '"]')
for (var checkbox of checkboxes) {
checkbox.checked = true;
}
});
$('.cancel_all_choise').on('click', function() {
var checkboxes = document.querySelectorAll('input[area_id="' + this.getAttribute('id_area') + '"]')
for (var checkbox of checkboxes) {
checkbox.checked = false;
}
});
$('.choise_all_scripts').on('click', function() {
var checkboxes = document.querySelectorAll('input[class="form-check-input script"]')
for (var checkbox of checkboxes) {
checkbox.checked = true;
}
});
$('.cancel_all_choise_scipts').on('click', function() {
var checkboxes = document.querySelectorAll('input[class="form-check-input script"]')
for (var checkbox of checkboxes) {
checkbox.checked = false;
}
});
$('.choise_all_users').on('click', function() {
var checkboxes = document.querySelectorAll('input[class="form-check-input user"]')
for (var checkbox of checkboxes) {
checkbox.checked = true;
}
});
$('.cancel_all_choise_users').on('click', function() {
var checkboxes = document.querySelectorAll('input[class="form-check-input user"]')
for (var checkbox of checkboxes) {
checkbox.checked = false;
}
});
$('.choise_all_area').on('click', function() {
var checkboxes = document.querySelectorAll('input[class="form-check-input area"]')
for (var checkbox of checkboxes) {
checkbox.checked = true;
}
});
$('.cancel_all_choise_area').on('click', function() {
var checkboxes = document.querySelectorAll('input[class="form-check-input area"]')
for (var checkbox of checkboxes) {
checkbox.checked = false;
}
});
$('#routing_modal_users_submit').on('click', function() {
var users = []
var users_text = []
var checkboxes = document.querySelectorAll('input[class="form-check-input user"]');
for (var checkbox of checkboxes) {
if (checkbox.checked == true) {
users.push(checkbox.getAttribute('value'))
users_text.push($(checkbox).parent().children("label").html())
}
}
$('#' + $(this).attr('filter_num')).parent().children(".small").remove();
$('#' + $(this).attr('filter_num')).data('filters', users);
$('#' + $(this).attr('filter_num')).data('filter_type', 'by_user');
$('#' + $(this).attr('filter_num')).parent().append('<div class="col-12 small"><small class="text-success">'+users_text.join(", ")+'</small></div>');
$("#routing_modal_by_user").modal('hide')
})
$('#routing_modal_profarea_submit').on('click', function() {
var profarea = []
var profarea_text = []
var checkboxes = document.querySelectorAll('input[class="form-check-input area"]');
for (var checkbox of checkboxes) {
if (checkbox.checked == true) {
profarea.push(checkbox.getAttribute('value'));
profarea_text.push($(checkbox).parent().children("label").html());
}
}
$('#' + $(this).attr('filter_num')).parent().children(".small").remove();
$('#' + $(this).attr('filter_num')).data('filters', profarea);
$('#' + $(this).attr('filter_num')).data('filter_type', 'by_profarea');
$('#' + $(this).attr('filter_num')).parent().append('<div class="col-12 small"><small class="text-success">'+profarea_text.join(", ")+'</small></div>');
$("#routing_modal_by_profarea").modal('hide')
})
$('#routing_modal_scripts_submit').on('click', function() {
var scripts = []
var scripts_text = []
var checkboxes = document.querySelectorAll('input[class="form-check-input script"]');
for (var checkbox of checkboxes) {
if (checkbox.checked == true) {
scripts.push(checkbox.getAttribute('value'));
scripts_text.push($(checkbox).parent().children("label").html())
}
}
$('#' + $(this).attr('filter_num')).parent().children(".small").remove();
$('#' + $(this).attr('filter_num')).data('filter_type', 'by_script');
$('#' + $(this).attr('filter_num')).data('filters', scripts);
$('#' + $(this).attr('filter_num')).parent().append('<div class="col-12 small"><small class="text-success">'+scripts_text.join(", ")+'</small></div>');
$("#routing_modal_by_script").modal('hide')
});
$('#routing_modal_city_submit').on('click', function() {
var cities = []
var cities_text = []
var checkboxes = document.querySelectorAll('input[class="form-check-input city"]');
for (var checkbox of checkboxes) {
if (checkbox.checked == true) {
cities.push(checkbox.getAttribute('value'))
cities_text.push($(checkbox).parent().children("label").html())
}
}
$('#' + $(this).attr('filter_num')).parent().children(".small").remove();
$('#' + $(this).attr('filter_num')).data('filter_type', 'by_city');
$('#' + $(this).attr('filter_num')).data('filters', cities);
$('#' + $(this).attr('filter_num')).parent().append('<div class="col-12 small"><small class="text-success">'+cities_text.join(", ")+'</small></div>');
$("#routing_modal_by_city").modal('hide');
})
$('#routing_modal_dignosis_submit').on('click', function() {
var diagonosis = {}
var checkboxes = document.querySelectorAll('input[class="form-check-input tag_name"]')
var all_tags = []
var tags_text = []
for (var tn of checkboxes) {
if (tn.checked == true) {
all_tags.push(tn.getAttribute('value'));
tags_text.push($(tn).parent().children("label").html())
}
}
$('#' + $(this).attr('filter_num')).parent().children(".small").remove();
$('#' + $(this).attr('filter_num')).data('filter_type', $(this).attr('filter_type'));
$('#' + $(this).attr('filter_num')).data('filters', all_tags);
$('#' + $(this).attr('filter_num')).parent().append('<div class="col-12 small"><small class="text-success">'+tags_text.join(", ")+'</small></div>');
for (tn of checkboxes) {
tn.checked = false
}
$("#routing_modal_by_diagnos").modal('hide')
})
function checked_condition() {
$('.or_check').on('click', function() {
codition[this.getAttribute('name')] = this.getAttribute('value')
})
$('.and_check').on('click', function() {
codition[this.getAttribute('name')] = this.getAttribute('value')
})
}
$("#btn_add_filter").on('click', function() {
var ind = this.getAttribute('ind-filter');
this.setAttribute('ind-filter', parseInt(ind)+1);
var script = document.createElement('div');
script.setAttribute('class', 'mt-2 col-md-11')
var remove_script = document.createElement('div');
remove_script.setAttribute('class', 'col-md-1')
var btn = document.createElement('button')
btn.setAttribute('class', 'remove-script btn btn-danger btn-sm mt-2')
btn.setAttribute('data-id', 'main_filter'+ind)
btn.innerHTML = 'Удалить'
remove_script.appendChild(btn)
var select = document.createElement('select')
select.setAttribute('class', 'form-select form-control custom-input routing_select2 filter me-0')
select.setAttribute('style', 'width: 100%;')
select.setAttribute('id', 'main_filter'+ind)
var option = document.createElement('option');
option.setAttribute('value', 0)
option.setAttribute('selected', '')
option.setAttribute('disabled', '')
option.innerHTML = 'Правила'
select.appendChild(option)
var option = document.createElement('option');
option.setAttribute("value", 'by_nn_diagnos')
option.innerHTML = 'По диагнозу от нейросети'
select.appendChild(option)
var option = document.createElement('option');
option.setAttribute("value", 'by_expert_diagnos')
option.innerHTML = 'По диагнозу эксперта'
select.appendChild(option)
var option = document.createElement('option');
option.setAttribute("value", 'by_doctor_diagnos')
option.innerHTML = 'По диагнозу первичного врача'
select.appendChild(option)
var option = document.createElement('option');
option.setAttribute("value", 'by_script')
option.innerHTML = 'По сценарию'
select.appendChild(option)
var option = document.createElement('option');
option.setAttribute("value", 'by_user')
option.innerHTML = 'По пользователю клиники'
select.appendChild(option)
var option = document.createElement('option');
option.setAttribute("value", 'by_profarea')
option.innerHTML = 'По профобласти'
select.appendChild(option)
var option = document.createElement('option');
option.setAttribute("value", 'by_city')
option.innerHTML = 'По городу пациента'
select.appendChild(option)
script.appendChild(select)
$('#all_scripts').append(script)
$('#all_scripts').append(remove_script)
$('.routing_select2').select2({tags: true});
open_filter();
checked_condition();
remove_script_btn();
});
function clear_form() {
//console.log($('#source_clinic').val())
$('#source_action').val(0)
$('#source_clinic').val('')
$('#price_source').val('')
$('#emails').val('')
$('#all_scripts').val(0)
$('#dest_action').val(0)
$('#dest_clinic').val(0)
$('#price_terget').val('')
$('#emails2').val('')
}
$('#add_routing_rule').click(function(){
filters = {}
$.each($('.filter'), function(e) {
if($(this).data('filter_type') == undefined || $(this).data('filters') == undefined)
{
console.log('und');
}
else{
if (filters.hasOwnProperty($(this).data('filter_type')))
{
filters[$(this).data('filter_type')] = $.merge(filters[$(this).data('filter_type')], $(this).data('filters'));
}
else
{
filters[$(this).data('filter_type')] = $(this).data('filters');
}
}
})
//TODO: Маршрутизация
//Собираем получившиеся данные и записываем в message
var message = {'rules' : {}}
message['rule_name'] = $('#rule_name').val()
message['source_action'] = $('#source_action').val()
message['source_clinic_id'] = $('#source_clinic').val()
message['source_price'] = $('#price_source').val()
message['source_emails'] = $('#emails').val()
message['rules'] = filters;
message['dest_action'] = $('#dest_action').val()
message['dest_clinic_id'] = $('#dest_clinic').val()
message['dest_price'] = $('#price_target').val()
message['dest_emails'] = $('#emails2').val()
console.log(message)
$.ajax({
type:'POST',
url: '/routing/add_rule',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true){
show_success('Правило успешно добавлено', 0);
clear_form()
}
else
{
show_error(data['message'] ,0);
}
},
error:function (jqXHR, exception) {
show_error('System error' ,0);
}
});
})
$('.disable_rule').click(function(){
let rule_id = $(this).data('rule_id');
$.ajax({
type:'POST',
url: '/routing/' + rule_id + '/disable',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
if(data['success'] == true){
$('#enable_rule_'+rule_id).show();
$('#disable_rule_'+rule_id).hide();
}
else
{
show_error('Disable error' ,0);
}
},
error:function (jqXHR, exception) {
show_error('System error' ,0);
}
});
});
$('.enable_rule').click(function(){
let rule_id = $(this).data('rule_id');
$.ajax({
type:'POST',
url: '/routing/' + rule_id + '/enable',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
if(data['success'] == true){
$('#enable_rule_'+rule_id).hide();
$('#disable_rule_'+rule_id).show();
}
else
{
show_error('Enable error' ,0);
}
},
error:function (jqXHR, exception) {
show_error('System error' ,0);
}
});
});
});

113
webApp/templates/static/remove/save_patient_props.js

@ -0,0 +1,113 @@
$(document).ready(function () {
$('#save_patient_props').on('click', function(){save_patient_props(false)});
if ($('#nic_visit').length > 0){
$('#patient_props_modal').modal('show');
}
$("#fio_select2").select2({
tags: true,
width: '100%'
});
$("#fio_select2").on("change", function() {
id = this.value;
text = $( "#fio_select2 option:selected" ).text();
if (id == text)
{
console.log('New Patient');
}
else{
$.ajax({
type: "GET",
url: '/get_patient_clinic/' + id,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$("#med_card").val(data['card_number']);
$("#telephone").val(data['telephone']);
$("#dob").val(data['dob']);
$("#sex").val(data['sex']);
$("#email").val(data['email']);
}
})
}
})
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
function save_patient_props(redirect){
fio = $('#fio').val();
dob = $('#dob').val();
med_card = $('#med_card').val();
sex = $('#sex').val();
telephone = $('#telephone').val();
email = $('#email').val();
false_form = false
lang = getUrlParameter('lang');
if(false_form==false)
{
var message = {
fio: fio,
dob:dob,
med_card:med_card,
sex:sex,
telephone:telephone,
email:email
}
$.ajax({
type:'POST',
url: '/update_patient/' + $('#patient_id').val(),
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
if (lang == 'en')
$('#success').html('Parameters updated')
else
$('#success').html('Информация обновлена')
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
$('#patient_full_name').html(fio);
if ($('#nic_visit').length > 0){
$('#fio_info').html(fio);
$('#dob_info').html(dob);
$('#med_card_info').html(med_card);
$('#sex_info').html(sex);
$('#patient_props_modal').modal('hide');
}
}
else
{
if (lang == 'en')
$('#exception').html('Failed to update parameters')
else
$('#exception').html('Не удалось обновить')
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
}
});
}
}
});

31
webApp/templates/static/remove/server_status.js

@ -0,0 +1,31 @@
$(document).ready(function () {
check_status();
setInterval(() => check_status(), 25000);
function check_status()
{
$.each($('.server_status'), function(e) {
var message = {
url: $(this).data('url'),
}
$.ajax({
type:'POST',
url: '/server_status',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
$(this).html(data['status']+' '+data['ssl_status']);
$(this).css( "color", data['status_color'] );
},
error:function (jqXHR, exception) {
}
});
})
}
});

900
webApp/templates/static/remove/skinive_visit.js

@ -0,0 +1,900 @@
$(document).ready(function () {
$('.close-modal').on('click', function(){
$('#standart_modal').modal('toggle');
});
$('#short_std').on('click', function(){
standart_load($('#cur_modal_std').val(), false, $('#cur_modal_tag_id').val());
$('#short_std').hide();
$('#long_std').show();
});
$('#long_std').on('click', function(){
standart_load($('#cur_modal_std').val(), true, $('#cur_modal_tag_id').val());
$('#short_std').show();
$('#long_std').hide();
});
$('.custom-input').on('focus focusout', function(){
if($(this).val() == null || $(this).val() == '')
{
$($(this).parent()).removeClass('hastext');
}
else
{
$($(this).parent()).addClass('hastext');
}
});
function previewIMG(input, preview) {
var reader = new FileReader();
reader.onload = function(e) {
$(preview).attr('src', e.target.result);
}
reader.readAsDataURL(input);
}
$("#file_input").change(function(){
$('#imgs_preview').empty();
$('#file-input-greenspan').html('');
if ($(this)[0].files[0]) {
$('#pre_load').hide();
$('#file-input-greenspan').html('Загружено снимков: ' + $(this)[0].files.length);
for(i=0;i<$(this)[0].files.length;i++)
{
if (($(this)[0].files[i].type.includes('image')))
{
div = document.createElement('div');
div.setAttribute('class', 'col-3 p-1 m-0');
img = document.createElement('img');
img.setAttribute('class', 'preview_img');
previewIMG($(this)[0].files[i], $(img));
div.appendChild(img);
document.getElementById("imgs_preview").appendChild(div);
}
}
}
});
$('#endo_tab_link').on('click', function()
{
load__endo_history(true);
});
$('#nn_tab_link').on('click', function()
{
load__endo_history(true);
});
function reload_visit_info(){
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/reload_visit_info/' + $('#visit_id').val() + '?task=off'+'&lang='+lang,
processData: false,
contentType: false,
success: (data) => {
load__endo_history(false);
}
});
}
function load__endo_history(rvn){
$('#endo_history').empty();
if(rvn)
reload_visit_info();
$.ajax({
type:'GET',
url: '/get_visit_info/'+$('#visit_id').val(),
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentTypestatus
success: (data) => {
$('#endo_history').empty();
var label_id = 0
// Восстановил старый код (как у меня было)
for (untask_num in data['untask_pics'])
{
pic = data['untask_pics'][untask_num]
organ = ''
if (pic['organ'])
{
organ = pic['organ']
}
if($('#language').val() == 'ru')
$('#endo_history').append('<tr><td scope="col"><img src=/img/'+pic['file']+' class="preview_img"></td><td scope="col">'+organ+'</td><td scope="col"><span class="expert_diagnos" data-img='+pic['file']+'></span><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт</span></td><td scope="col"><select data-img='+pic['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт</span></td></tr>');
else
$('#endo_history').append('<tr><td scope="col"><img src=/img/'+pic['file']+' class="preview_img"></td><td scope="col">'+organ+'</td><td scope="col"><span class="expert_diagnos" data-img='+pic['file']+'></span><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart</span></td><td scope="col"><select data-img='+pic['file']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart</span></td></tr>');
label_id = label_id + 1
}
for (untask_num in data['tasks'])
{
pic = data['tasks'][untask_num]
console.log(pic)
organ = ''
if (pic['organ'])
{
organ = pic['organ']
}
if (pic["task"]['error']==null) {
tr = document.createElement('tr');
td1 = document.createElement('td');
td1.setAttribute('scope', 'col');
img = document.createElement('img');
img.setAttribute('src', '/img/'+pic['pictures'][0]['hash_name']);
//
img.setAttribute('class', 'preview_img');
td1.appendChild(img);
tr.appendChild(td1);
//
td2 = document.createElement('td');
td2.setAttribute('scope', 'col');
td2.innerHTML = organ;
tr.appendChild(td2);
//
//
td3 = document.createElement('td');
td3.setAttribute('scope', 'col');
//
span = document.createElement('span');
span.setAttribute('class', 'expert_diagnos');
span.setAttribute('data-img', pic['file']);
span.innerHTML = data['tasks'][untask_num]['task']['class'];
td3.appendChild(span);
//
span = document.createElement('span');
span.setAttribute('class', 'standart_modal btn btn-secondary btn-sm')
span.setAttribute('data-code', '');
if($('#language').val() == 'ru') {
span.innerHTML = 'Стандарт';
} else {
span.innerHTML = "Standart"
}
td3.appendChild(span);
tr.appendChild(td3);
//
td4 = document.createElement('td');
td4.setAttribute('scope', 'col');
//
select = document.createElement('select');
select.setAttribute('data-img', pic['pictures'][0]['hash_name']);
select.setAttribute('id', 'ds'+label_id);
select.setAttribute('type', 'select');
select.setAttribute('class', 'form-control diagnoses_select')
//
option = document.createElement('option');
option.setAttribute('value', '');
option.setAttribute('disabled', '');
option.setAttribute('selected', '');
if ($('#language').val() == 'ru') {
option.innerHTML = 'Диагноз';
} else {
option.innerHTML = 'Diagnos';
}
select.appendChild(option);
td4.appendChild(select);
//
span = document.createElement('span');
span.setAttribute('class', 'standart_modal btn btn-secondary btn-sm')
span.setAttribute('data-code', '');
if($('#language').val() == 'ru') {
span.innerHTML = 'Стандарт';
} else {
span.innerHTML = "Standart"
}
td4.appendChild(span);
tr.appendChild(td4)
//
$('#endo_history').append(tr);
}
// else {
//
// tr = document.createElement('tr');
// td1 = document.createElement('td');
// td1.setAttribute('scope', 'col');
// img = document.createElement('img');
// img.setAttribute('src', '/img/'+data['untask_pics'][untask_num]['file']);
// //
// img.setAttribute('class', 'preview_img');
// td1.appendChild(img);
// tr.appendChild(td1);
// //
// td2 = document.createElement('td');
// td2.setAttribute('scope', 'col');
// td2.innerHTML = organ;
// tr.appendChild(td2);
// //
// //
// td3 = document.createElement('td');
// td3.setAttribute('scope', 'col');
// //
// span = document.createElement('span');
// span.setAttribute('class', 'expert_diagnos');
// span.setAttribute('data-img', pic['file']);
// span.innerHTML = data['tasks'][untask_num]['task']['class'];
// td3.appendChild(span);
// //
// span = document.createElement('span');
// span.setAttribute('class', 'standart_modal btn btn-secondary btn-sm')
// span.setAttribute('data-code', '');
// if($('#language').val() == 'ru') {
// span.innerHTML = 'Стандарт';
// } else {
// span.innerHTML = "Standart"
// }
// td3.appendChild(span);
// tr.appendChild(td3);
// //
// td4 = document.createElement('td');
// td4.setAttribute('scope', 'col');
// //
// select = document.createElement('select');
// select.setAttribute('data-img', pic['file']);
// select.setAttribute('id', 'ds'+label_id);
// select.setAttribute('type', 'select');
// select.setAttribute('class', 'form-control diagnoses_select')
// //
// option = document.createElement('option');
// option.setAttribute('value', '');
// option.setAttribute('disabled', '');
// option.setAttribute('selected', '');
// if ($('#language').val() == 'ru') {
// option.innerHTML = 'Диагноз';
// } else {
// option.innerHTML = 'Diagnos';
// }
//
// select.appendChild(option);
// td4.appendChild(select);
// //
// span = document.createElement('span');
// span.setAttribute('class', 'standart_modal btn btn-secondary btn-sm')
// span.setAttribute('data-code', '');
// if($('#language').val() == 'ru') {
// span.innerHTML = 'Стандарт';
// } else {
// span.innerHTML = "Standart"
// }
// td4.appendChild(span);
// tr.appendChild(td4)
// //
// $('#endo_history').append(tr);
// }
label_id = label_id + 1
}
//Если не прошел запрос к API
//for (untask_num in data['tasks']){
// pic = data['tasks'][untask_num]
// organ = ''
// if (pic['organ'])
// {
// organ = pic['organ']
// }
// console.log(pic)
// tr = document.createElement('tr');
// td1 = document.createElement('td');
// td1.setAttribute('scope', 'col');
// img = document.createElement('img');
// img.setAttribute('src', '/img/'+data['untask_pics'][untask_num]['file']);
// //
// img.setAttribute('class', 'preview_img');
// td1.appendChild(img);
// tr.appendChild(td1);
// //
// td2 = document.createElement('td');
// td2.setAttribute('scope', 'col');
// td2.innerHTML = organ;
// tr.appendChild(td2);
// //
// //
// td3 = document.createElement('td');
// td3.setAttribute('scope', 'col');
// //
// span = document.createElement('span');
// span.setAttribute('class', 'expert_diagnos');
// span.setAttribute('data-img', pic['file']);
// span.innerHTML = data['tasks'][untask_num]['task']['class'];
// td3.appendChild(span);
// //
// span = document.createElement('span');
// span.setAttribute('class', 'standart_modal btn btn-secondary btn-sm')
// span.setAttribute('data-code', '');
// if($('#language').val() == 'ru') {
// span.innerHTML = 'Стандарт';
// } else {
// span.innerHTML = "Standart"
// }
// td3.appendChild(span);
// tr.appendChild(td3);
// //
// td4 = document.createElement('td');
// td4.setAttribute('scope', 'col');
// //
// select = document.createElement('select');
// select.setAttribute('data-img', pic['file']);
// select.setAttribute('id', 'ds'+label_id);
// select.setAttribute('type', 'select');
// select.setAttribute('class', 'form-control diagnoses_select')
// //
// option = document.createElement('option');
// option.setAttribute('value', '');
// option.setAttribute('disabled', '');
// option.setAttribute('selected', '');
// if ($('#language').val() == 'ru') {
// option.innerHTML = 'Диагноз';
// } else {
// option.innerHTML = 'Diagnos';
// }
//
// select.appendChild(option);
// td4.appendChild(select);
// //
// span = document.createElement('span');
// span.setAttribute('class', 'standart_modal btn btn-secondary btn-sm')
// span.setAttribute('data-code', '');
// if($('#language').val() == 'ru') {
// span.innerHTML = 'Стандарт';
// } else {
// span.innerHTML = "Standart"
// }
// td4.appendChild(span);
// tr.appendChild(td4)
// //
// $('#endo_history').append(tr);
// label_id = label_id + 1
//}
select_fill();
for (pic_num in data['pics'])
{
pic = data['pics'][pic_num]
if (pic.length > 0){
if(pic.length > 1)
{
// $('#exception').html('Обнаружены снимки с дублирующимся описанием, перейдите в подробный отчет');
// $('#exception').slideDown(500);
// $('#exception').delay(2000).slideUp();
console.log('Обнаружены снимки с дублирующимся описанием')
}
$.each($('.diagnoses_select'), function(e) {
if($(this).data('img') == pic[0]['hash_name'])
{
// console.log(pic[0]['tag_id'])
$(this).val(pic[0]['tag_id']);
$(this).parent().children('.standart_modal').data('code', pic[0]['icd']);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
// $(this).select2('data', {id: pic[0]['tag_id'], text: 'Lorem Ipsum'});
}
})
}
}
for (pic_num in data['expert_pics'])
{
pic = data['expert_pics'][pic_num]
if (pic.length > 0){
if(pic.length > 1)
{
// $('#exception').html('Обнаружены снимки с дублирующимся описанием, перейдите в подробный отчет');
// $('#exception').slideDown(500);
console.log('Обнаружены снимки с дублирующимся экспертым описанием')
}
$.each($('.expert_diagnos'), function(e) {
if($(this).data('img') == pic[0]['hash_name'])
{
console.log(pic[0]['icd']);
$(this).html(pic[0]['icd']+' '+pic[0]['tag'])
$(this).parent().children('.standart_modal').data('tag_id', pic[0]['tag_id']);
$(this).parent().children('.standart_modal').data('code', pic[0]['icd']);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
// $(this).select2('data', {id: pic[0]['tag_id'], text: 'Lorem Ipsum'});
}
})
}
}
$('.standart_modal').on('click', function(){
$('#standart_modal').modal('toggle');
// console.log($(this).data('code'))
standart_load($(this).data('code'), false, $(this).data('tag_id'));
})
$('.diagnoses_select').on('change', function() {
// console.log( this.value );
save_select(this);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
});
$('.diagnoses_select').select2();
},
error:function (jqXHR, exception) {
}
});
}
//saving on select change OK FOR MULTIPROFILE
function save_select(element){
// console.log(element.value);
// console.log($(element).data('img'));
var message = {
diagnos_id: element.value,
pic_name: $(element).data('img'),
visit_id: $('#visit_id').val(),
}
$.ajax({
type:'POST',
url: '/save_pic_diagnos',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$(element).parent().children('.standart_modal').data('code', data['icd']);
$(element).parent().children('.standart_modal').data('tag_id', data['tag_id']);
$('#success').html('Диагноз сохранен');
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
}
else
{
after_error();
$('#request_waiting').hide();
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
}
},
error:function (jqXHR, exception) {
after_error();
$('#request_waiting').hide();
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
}
});
}
function getId(str)
{
return(str.replaceAll(' ','').replaceAll(',','').replaceAll('.','').replaceAll(';','').replaceAll(':','').replaceAll('(','').replaceAll(')','').replaceAll('-','').replaceAll('/','').replaceAll('\\',''))
}
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
function standart_load(code, full, tag_id){
$('#cur_modal_std').val(code);
$('#cur_modal_tag_id').val(tag_id);
lang = getUrlParameter('lang');
console.log('lang - '+lang);
$.ajax({
type:'GET',
url: '/get_diagnos_standart?icd='+code+'&tag_id='+tag_id+'&lang='+lang,
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#standart_body').empty();
$('#standart_name').html(data['standart_name']);
if(lang == 'en'){
$('#standart_diagnos').html('Diagnosis: <b>' + data['name']+'</b>');
$('#standart_type').html('Type of standard: <b>'+data['standart_type']+'</b>');
$('#standart_icd_code').html('ICD-10 code: <b>'+data['icd']+'</b>');
$('#standart_time').html('Treatment time (days): <b>'+data['days_min']+' - '+data['days_max']+'</b>');
}
else
{
$('#standart_diagnos').html('Диагноз: <b>' + data['name']+'</b>');
$('#standart_type').html('Вид стандарта: <b>'+data['standart_type']+'</b>');
$('#standart_icd_code').html('Код по МКБ-10: <b>'+data['icd']+'</b>');
$('#standart_time').html('Сроки лечения (дней): <b>'+data['days_min']+' - '+data['days_max']+'</b>');
}
var groups = [];
for (std_num in data['standart'])
{
var std = data['standart'][std_num]
if (!(groups.includes(std['service_type'])))
{
groups.push(std['service_type'])
$('#standart_body').append('<h5>'+std['service_type']+'</h5><div id="group'+getId(std['service_type'])+'"></div>');
}
}
var sub_groups = [];
for (std_num in data['standart'])
{
var std = data['standart'][std_num]
for (group in groups){
if(!($('#group'+getId(std['service_type'])).data('dt'+getId(std['service_subtype'])) == true))
{
$('#group'+getId(std['service_type'])).data('dt'+getId(std['service_subtype']), true);
$('#group'+getId(std['service_type'])).append('<p>'+std['service_subtype']+'</p>');
if(lang == 'en')
$('#group'+getId(std['service_type'])).append('<table style="width: 100%;" class="table table-striped table-bordered custom-font"><thead><tr><th scope="col">Medical Service Code</th><th scope="col">Name</th><th scope="col">Approximate frequency of presentation</th></tr></thead><tbody id="table'+ getId(std['service_subtype']) + getId(std['service_type'])+'"></tbody></table>');
else
$('#group'+getId(std['service_type'])).append('<table style="width: 100%;" class="table table-striped table-bordered custom-font"><thead><tr><th scope="col">Код медицинской услуги</th><th scope="col">Наименование</th><th scope="col">Примерная частота представления</th></tr></thead><tbody id="table'+ getId(std['service_subtype']) + getId(std['service_type'])+'"></tbody></table>');
}
}
}
for (std_num in data['standart'])
{
if(full == true){
var std = data['standart'][std_num]
service_code = ''
if (!(std['service_code'] == 'NULL'))
service_code = std['service_code']
$('#table'+ getId(std['service_subtype']) + getId(std['service_type'])).append(
'<tr><td>'+service_code+'</td><td>'+std['standart_name']+'</td><td>'+std['periodicity']+'</td></td>'
);
}
else
{
var std = data['standart'][std_num]
if(std['periodicity'] == '1'){
service_code = ''
if (!(std['service_code'] == 'NULL'))
service_code = std['service_code']
$('#table'+ getId(std['service_subtype']) + getId(std['service_type'])).append(
'<tr><td>'+service_code+'</td><td>'+std['standart_name']+'</td><td>'+std['periodicity']+'</td></td>'
);
}
}
}
$('#copy_text').data('text', data['for_copy'])
},
error:function (jqXHR, exception) {
$('#standart_body').empty();
$('#standart_name').html('');
$('#standart_diagnos').html('');
$('#standart_type').html('');
$('#standart_icd_code').html('');
$('#standart_time').html('');
}
});
}
$('#copy_text').on("click", function(){
$('#text_to_copy').html($('#copy_text').data('text'));
function listener(e) {
str = document.getElementById('text_to_copy').innerHTML
e.clipboardData.setData("text/html", str);
e.clipboardData.setData("text/plain", str);
e.preventDefault();
}
document.addEventListener("copy", listener);
document.execCommand("copy");
document.removeEventListener("copy", listener);
$('#copy_text').addClass('check-icn');
setTimeout(function() {
$('#copy_text').removeClass('check-icn');
}, 2000);
});
$('#start_rec').on("click", function()
{
if($('#btnradio_ear').is(":checked"))
startRec('source');
else
loadWOrec('source');
});
$('#save_picture').on("click", function()
{
if($('#btnradio_ear').is(":checked"))
startRec('webcam');
else
loadWOrec('webcam');
});
function makeblob(dataURL) {
var BASE64_MARKER = ';base64,';
if (dataURL.indexOf(BASE64_MARKER) == -1) {
var parts = dataURL.split(',');
var contentType = parts[0].split(':')[1];
var raw = decodeURIComponent(parts[1]);
return new Blob([raw], { type: contentType });
}
var parts = dataURL.split(BASE64_MARKER);
var contentType = parts[0].split(':')[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;
var uInt8Array = new Uint8Array(rawLength);
for (var i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], { type: contentType });
}
function loadWOrec(from){
$('#start_rec').attr("disabled", true);
$('#save_picture').attr("disabled", true);
$('#request_waiting').show();
$('#progress_text').html('Загрузка снимков');
var organ = 0
var fileList = document.getElementById('file_input').files;
var formData = new FormData();
var poll = null;
var i = 0
if (from == 'source')
for(i=0;i<fileList.length;i++)
{
if (fileList[i].type.includes('image'))
{
formData.append("files", fileList[i]);
i += 1;
}
}
if (from == 'webcam')
$.each($('.endo_image'), function(e) {
formData.append("files", makeblob($(this).attr('src')));
i += 1;
});
if (i > 0)
{
$.ajax({
type:'POST',
data: formData,
url: '/save_images?patient_id='+$('#patient_id').val()+'&organ='+organ+'&visit_id='+$('#visit_id').val()+'&profarea_id='+'3',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#photos').empty();
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
},
error:function (jqXHR, exception) {
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
});
}
else
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
}
function startRec(from){
$('#start_rec').attr("disabled", true);
$('#save_picture').attr("disabled", true);
$('#request_waiting').show();
$('#progress_text').html('Загрузка снимков');
var lang = getUrlParameter('lang');
var fileList = document.getElementById('file_input').files;
var formData = new FormData();
var poll = null;
var i = 0
var img_in_params = ''
if (from == 'source')
for(i=0;i<fileList.length;i++)
{
if (fileList[i].type.includes('image'))
{
formData.append("files", fileList[i]);
i += 1;
}
}
if (from == 'webcam')
$.each($('.endo_image'), function(e) {
if($(this).data('type') == "blob")
formData.append("files", makeblob($(this).attr('src')));
else
{
formData.append("files", $(this).attr('src'));
img_in_params = img_in_params + $(this).data('name') + ','
}
i += 1;
});
let searchParams = new URLSearchParams(window.location.search)
force_ear = searchParams.has('force_ear');
if (i > 0)
{
console.log('ajax sending')
$.ajax({
type:'POST',
data: formData,
url: '/start_skinive_image_diagnostics?patient_id='+$('#patient_id').val()+'&visit_id='+$('#visit_id').val() + '&imgs='+img_in_params + '&force_ear='+force_ear+'&lang=' + lang,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#photos').empty();
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#progress_text').html('Распознание диагноза');
if(data['status_id'] == 0)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 1)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 2)
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
$('#success').html('Загрузка завершена, снимок доступен в истории')
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
load__endo_history(true);
}
if(data['status_id'] == 3) {
after_error();
$('#request_waiting').hide();
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
};
if (data['status_id'] == 4) {
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
$('#exception').html('Плохое качество снимка')
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
load__endo_history(true);
}
},
error:function (jqXHR, exception) {
console.log('ajax error')
$('#photos').empty();
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
});
}
else
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
}
function check_image_output(task_id)
{
$.ajax({
type:'GET',
url: '/flebo_status/'+task_id,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
// console.log(data);
if('status_id' in data){
if(data['status_id'] == 0)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 1)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 2)
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
$('#success').html('Загрузка завершена, снимок доступен в истории')
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
load__endo_history(true);
}
if(data['status_id'] == 3)
{
$('#request_waiting').hide();
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
after_error();
}
}
else
{
$('#request_waiting').hide();
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
after_error();
}
},
error:function (jqXHR, exception) {
$('#request_waiting').hide();
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
after_error();
}
});
}
function select_fill(){
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/get_diagnos_tags/3'+'?lang='+lang,
async: false,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$.each($('.diagnoses_select.diagnoses_select'), function(e) {
console.log($(this).data('img'));
for(tag_num in data)
{
var tag = data[tag_num]
if(tag['category_id'] == null && tag['diagnos'] == true)
{
var icd = ''
if (tag['icd'])
{
icd = tag['icd'] + ' '
}
$(this).append('<option value="'+tag['id']+'">'+icd+tag['standart_name']+'</option>');
// $('#diagnoses_tags').append('<div class="custom-control custom-checkbox my-1 mr-sm-2 checktag"><input type="checkbox" id="tag'+tag['id']
// +'" data-name="'+tag['name']+'" class="custom-control-input checkitem"><label for="tag'+tag['id']+'" class="custom-control-label">'+icd+tag['name']+'</label></div>');
}
}
});
},
error:function (jqXHR, exception) {
}
});
}
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
function makeid(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for ( var i = 0; i < length; i++ ) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
});

12
webApp/templates/static/remove/skt.js

@ -0,0 +1,12 @@
$(document).ready(function () {
console.log('try connection');
var socket = io();//.connect('http://' + document.domain + ':' + location.port);
socket.on('connect', function() {
console.log('connected');
socket.emit('message', {data: 'I\'m connected!'});
});
socket.on('message', function(data) {
});
});

25
webApp/templates/static/remove/sort_directions.js

@ -0,0 +1,25 @@
$(document).ready(function () {
//Custom ordering tables
jQuery.fn.dataTableExt.oSort["customNumber-pre"] = function(num) {
let splt = num.split('.')
text = splt[2]+splt[1]+splt[0]
return parseInt(text)
}
var dt = $("#dir_datatable").DataTable({
"scrollX": true,
"aoColumnDefs": [{
"sType": "customNumber",
"bSortable": true,
"aTargets": [5]
}, {
"searchable": false,
"targets": [0, 1]
}]
});
$('#dir_datatable').DataTable().order([[5, 'pre'], [6, 'asc']]).draw();
$('#dir_datatable').DataTable().column(6).visible(false);
$('#dir_datatable').DataTable().column(0).visible(false);
});

32
webApp/templates/static/remove/sort_patients.js

@ -0,0 +1,32 @@
$(document).ready(function () {
//Custom ordering tables
jQuery.fn.dataTableExt.oSort["byDate-pre"] = function(num) {
let splt = num.split('.')
text = splt[2]+splt[1]+splt[0]
return parseInt(text)
}
jQuery.fn.dataTableExt.oSort["byDate-asc"] = function(num) {
let splt = num.split('.')
text = splt[2]+splt[1]+splt[0]
return parseInt(text)
}
jQuery.fn.dataTableExt.oSort["byDate-desc"] = function(num) {
let splt = num.split('.')
text = splt[2]+splt[1]+splt[0]
return parseInt(text)
}
var dt = $("#pats_datatable").DataTable({
"scrollX": true,
"aoColumnDefs": [{
"sType": "byDate",
"bSortable": true,
"aTargets": [2]
}
]
});
$('#pats_datatable').DataTable().order([[2, 'pre']]).draw();
$('#pats_datatable').DataTable().column(0).visible(false);
});

43
webApp/templates/static/remove/sort_visits.js

@ -0,0 +1,43 @@
$(document).ready(function () {
//Custom ordering tables
jQuery.fn.dataTableExt.oSort["byDate-pre"] = function(num) {
let splt = num.split('.')
text = splt[2]+splt[1]+splt[0]
return parseInt(text)
}
jQuery.fn.dataTableExt.oSort["byDate-asc"] = function(num) {
let splt = num.split('.')
text = splt[2]+splt[1]+splt[0]
return parseInt(text)
}
jQuery.fn.dataTableExt.oSort["byDate-desc"] = function(num) {
let splt = num.split('.')
text = splt[2]+splt[1]+splt[0]
return parseInt(text)
}
jQuery.fn.dataTableExt.oSort["byUser-pre"] = function(num) {
if(num == $('#cur_username').val())
return Infinity;
else
return 0;
}
var dt = $("#visit_datatable").DataTable({
"scrollX": true,
"aoColumnDefs": [{
"sType": "byUser",
"bSortable": true,
"aTargets": [4]
},
{
"sType": "byDate",
"bSortable": true,
"aTargets": [2]
}
]
});
$('#visit_datatable').DataTable().order([[4, 'pre'],[2, 'pre']]).draw();
$('#visit_datatable').DataTable().column(0).visible(false);
});

392
webApp/templates/static/remove/stats.js

@ -0,0 +1,392 @@
$(document).ready(function () {
$(function () {
$('[data-toggle="tooltip"]').tooltip()
})
mapTags();
get_stats();
update_dates();
function update_dates()
{
chData = $('#visits_chart').data('data');
if (chData.length < 2)
return;
chLabels = JSON.parse($('#visits_chart').data('labels').replaceAll('\'', '\"'));
area_Labels = JSON.parse($('#visits_chart').data('areas').replaceAll('\'', '\"'));
console.log(chLabels);
var canvas = document.createElement('canvas');
canvas.setAttribute('id', 'canvas_vc');
$('#visits_chart').empty();
$('#visits_chart').append(canvas);
colors = [
'rgba(250, 100, 100, 1)',
'rgba(100, 250, 100, 1)',
'rgba(100, 100, 250, 1)',
'rgba(100, 250, 250, 1)',
]
datasets = []
for(i in chData)
{
datasets.push({
label: area_Labels[i],
data: chData[i],
backgroundColor: colors[i],
lineTension: 0.4
})
}
var chartData = {
labels: chLabels,
datasets: datasets
};
if (canvas) {
var chart = new Chart(canvas, {
type: 'line',
data: chartData,
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
datalabels: {
textAlign: 'center',
maintainAspectRatio: false,
font: {
lineHeight: 1.6
}
},
legend: {
display: false,
},
title: {
display: false,
}
},
tooltips: {
enabled: false
}
}
});
}
}
$('.nav-link').click(function(){
$('.select_div').hide();
$('#select_div'+$(this).data('profarea_id')).show();
get_stats();
});
$('.show_visits').click(function(){
getVisits($(this).data('visit_ids'));
});
function mapTags(){
var lang = getUrlParameter('lang');
$.each($('.diagnoses_select'), function(e) {
var profarea_id = $(this).data('profarea_id');
console.log(profarea_id);
if(lang == 'en')
$(this).append('<option value=0 selected style="color: #888;">Diagnos</option>');
else
$(this).append('<option value=0 selected style="color: #888;">Диагноз</option>');
$.ajax({
type:'GET',
url: '/get_diagnos_tags/'+profarea_id+'?lang='+lang,
async: false,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
for(tag_num in data)
{
var tag = data[tag_num]
if(tag['category_id'] == null && tag['diagnos'] == true)
{
var icd = ''
if (tag['icd'])
{
icd = tag['icd'] + ' '
}
$(this).append('<option value="'+tag['id']+'">'+icd+tag['standart_name']+'</option>');
console.log('appended');
}
}
},
error:function (jqXHR, exception) {
}
});
});
}
$('.diagnoses_select').on('change', function() {get_stats(null)});
$('#pirogov_confirmed').on('change', function() {get_stats(null)});
$('#doctor_select').on('change', function() {get_stats(null)});
$('#start_date').on('change', function() {get_stats(null)});
$('#end_date').on('change', function() {get_stats(null)});
$('#med_visit').on('change', function() {get_stats(null)});
$('#med_exam').on('change', function() {get_stats(null)});
$('#dest_direct').on('change', function() {get_stats(null)});
$('#source_direct').on('change', function() {get_stats(null)});
$('#today').on('click', function() {get_stats('today')});
$('#7days').on('click', function() {get_stats('7days')});
$('#30days').on('click', function() {get_stats('30days')});
function get_stats(time_param)
{
lang = getUrlParameter('lang');
var start_date = $('#start_date').val();
var end_date = $('#end_date').val();
var user_id = $('#doctor_select').val();
var pirogov_confirmed = $('#pirogov_confirmed').is(':checked');
var med_exam = $('#med_exam').is(':checked');
var med_visit = $('#med_visit').is(':checked');
var dest_direct = $('#dest_direct').is(':checked');
var source_direct = $('#source_direct').is(':checked');
var profarea_id = $('.tab-pane.active').data('profarea_id');
var diagnos_id = $('#diagnos'+profarea_id).val();
var clinic_id = $('#clinic_id').val();
var url = '/get_stats?lang='+lang+'&start_date='+start_date+'&time_param='+time_param+'&dest_direct='+dest_direct+'&source_direct='+source_direct+'&med_exam='+med_exam+'&med_visit='+med_visit+'&end_date='+end_date+'&user_id='+user_id+'&pirogov_confirmed='+pirogov_confirmed+'&diagnos_id='+diagnos_id+'&profarea_id='+profarea_id+'&clinic_id='+clinic_id;
$.ajax({
type:'GET',
url: url,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#num_surgical'+profarea_id).html(data['surgical']);
$('#num_surgical'+profarea_id).parent().data('visit_ids', data['visits']['surgical']);
$('#num_therapeutic'+profarea_id).html(data['therapeutic']);
$('#num_therapeutic'+profarea_id).parent().data('visit_ids', data['visits']['therapeutic']);
$('#num_waiting'+profarea_id).html(data['waiting']);
$('#num_norma'+profarea_id).html(data['norma']);
$('#num_waiting'+profarea_id).parent().data('visit_ids', data['visits']['waiting']);
$('#num_unsatisfactory'+profarea_id).html(data['unsatisfactory']);
$('#num_unsatisfactory'+profarea_id).parent().data('visit_ids', data['visits']['unsatisfactory']);
var chLabels = [data['translate']['surgical'],data['translate']['therapeutic'],data['translate']['norma'],data['translate']['waiting'],data['translate']['unsatisfactory']];
var chNames = ['surgical','therapeutic','norma','waiting','unsatisfactory'];
var chData = [data['surgical'], data['therapeutic'], data['norma'], data['waiting'], data['unsatisfactory']];
var canvas = document.createElement('canvas');
canvas.setAttribute('id', 'canvas'+profarea_id);
$('#chart'+profarea_id).empty();
$('#chart'+profarea_id).append(canvas);
var chartData = {
labels: chLabels,
datasets: [{
data: chData,
backgroundColor: [
'rgba(250, 100, 100, 1)',
'rgba(100, 190, 100, 1)',
'rgba(0, 250, 0, 1)',
'rgba(200, 200, 200, 1)',
'rgba(100, 100, 200, 1)',
]
}]
};
if (canvas) {
var chart = new Chart(canvas, {
type: 'doughnut',
data: chartData,
options: {
responsive: true,
plugins: {
datalabels: {
color: '#111',
textAlign: 'center',
font: {
lineHeight: 1.6
},
formatter: function(value, ctx) {
return ctx.chart.data.labels[ctx.dataIndex] + '\n' + value + '%';
}
},
legend: {
position: 'top',
},
title: {
display: true,
}
},
tooltips: {
enabled: false
},
onClick: (evt, activeEls, chart) => {
if (activeEls.length === 0 || chart.getElementsAtEventForMode(evt, 'nearest', {
intersect: true
}, true).length === 0) {
return;
}
console.log('Function param: ', activeEls[0].index);
getVisits(data['visits'][chNames[activeEls[0].index]])
// console.log('lookup with the event: ', chart.getElementsAtEventForMode(evt, 'nearest', {
// intersect: true
// }, true)[0].index);
// activeEls.forEach(point => {
// console.log('val: ', chart.data.datasets[point.datasetIndex].data[point.index])
// })
}
}
});
}
},
error:function (jqXHR, exception) {
after_error();
}
});
}
$('.excl_dwnld').on('click', function() {getExcel()});
$('.excl_dwnld2_0').on('click', function() {getExcel2_0()});
function getExcel2_0(){
lang = getUrlParameter('lang');
var start_date = $('#start_date').val();
var end_date = $('#end_date').val();
var clinic_id = $('#clinic_id').val();
var url = '/routing/report/'+clinic_id+'?lang='+lang+'&start_date='+start_date+'&end_date='+end_date+'&reload='+$('#reload').is(':checked');
$.ajax({
type:'GET',
url: url,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
var a = document.createElement('a');
a.href = '/excel/'+ data['file'];
filename = $('#clinic_name').val()+'_report'
a.download = filename + '.xlsx';
document.body.append(a);
a.click();
a.remove();
window.URL.revokeObjectURL('/excel/'+ data['file']);
},
error:function (jqXHR, exception) {
after_error();
}
});
}
function getExcel(){
lang = getUrlParameter('lang');
var start_date = $('#start_date').val();
var end_date = $('#end_date').val();
var user_id = $('#doctor_select').val();
var pirogov_confirmed = $('#pirogov_confirmed').is(':checked');
var med_exam = $('#med_exam').is(':checked');
var med_visit = $('#med_visit').is(':checked');
var dest_direct = $('#dest_direct').is(':checked');
var source_direct = $('#source_direct').is(':checked');
var profarea_id = $('.tab-pane.active').data('profarea_id');
var diagnos_id = $('#diagnos'+profarea_id).val();
var clinic_id = $('#clinic_id').val();
var url = '/get_excel_stats?lang='+lang+'&start_date='+start_date+'&dest_direct='+dest_direct+'&source_direct='+source_direct+'&med_exam='+med_exam+'&med_visit='+med_visit+'&end_date='+end_date+'&user_id='+user_id+'&pirogov_confirmed='+pirogov_confirmed+'&diagnos_id='+diagnos_id+'&profarea_id='+profarea_id+'&clinic_id='+clinic_id;
$.ajax({
type:'GET',
url: url,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
var a = document.createElement('a');
a.href = '/excel/'+ data['file'];
filename = $('#clinic_name').val()+'_report'
a.download = filename + '.xlsx';
document.body.append(a);
a.click();
a.remove();
window.URL.revokeObjectURL('/excel/'+ data['file']);
},
error:function (jqXHR, exception) {
after_error();
}
});
}
function getVisits(ids){
var message = {
visit_ids: ids,
clinic_id: $('#clinic_id').val()
}
$.ajax({
type:'POST',
url: '/prepare_stats_visits',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
$('#visits_table').empty();
$('#visits_modal').modal('toggle');
$('#datatable').DataTable().clear().destroy();
for (visit_num in data)
{
visit = data[visit_num]
if($('#language').val() == 'ru')
$('#visits_table').append('<tr '+getTooltip(visit['confirmed_tags'])+'><td><a href="/medical_report/'+visit['id']+'">'+visit['patient']+'</a></td><td><a href="/medical_report/'+visit['id']+'">'+visit['date']+'</a></td><td><a href="/medical_report/'+visit['id']+'">'+visit['telephone']+'</a></td><td><a href="/medical_report/'+visit['id']+'">'+visit['doctor']+'</a></td><td style="display: none;">'+visit['department']+'</td><td><a href="/medical_report/'+visit['id']+'">'+getDiagnosesText(visit['confirmed_tags'])+'</a></td></tr>');
else
$('#visits_table').append('<tr '+getTooltip(visit['confirmed_tags'])+'><td><a href="/medical_report/'+visit['id']+'?lang=en">'+visit['patient']+'</a></td><td><a href="/medical_report/'+visit['id']+'">'+visit['date']+'</a></td><td><a href="/medical_report/'+visit['id']+'">'+visit['telephone']+'</a></td><td><a href="/medical_report/'+visit['id']+'">'+visit['doctor']+'</a></td><td style="display: none;">'+visit['department']+'</td><td><a href="/medical_report/'+visit['id']+'">'+getDiagnosesText(visit['confirmed_tags'])+'</a></td></tr>');
}
$('tr[data-bs-toggle="tooltip"]').tooltip({
html: true,
});
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
// $('#datatable').DataTable({
// "scrollX": true
// });
}
});
}
function getDiagnosesText(tags)
{
var diagnoses = '';
for(tag in tags)
diagnoses += tags[tag] + '<br>'
return diagnoses
}
function getTooltip(tags)
{
var diagnoses = '';
for(tag in tags)
diagnoses += tags[tag] + '<br>'
return ''
// return 'data-bs-toggle="tooltip" data-bs-placement="bottom" title="'+diagnoses+'"'
}
$('#visits_modal').on('shown.bs.modal', function () {
// $('#datatable_wrapper').hide();
$('#datatable').DataTable( {
"language": {
"url": "https://cdn.datatables.net/plug-ins/1.10.19/i18n/Russian.json"
},
"scrollX": true
});
});
function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
});

120
webApp/templates/static/remove/style.js

@ -0,0 +1,120 @@
function wait_button(btn)
{
$(btn).attr("disabled", true);
}
function resume_button(btn)
{
$(btn).attr("disabled", false);
}
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
$(document).ready(function () {
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl)
});
$.each($('.fa'), function(e) {
console.log('fa found' + $(this).data('src'));
$(this).css('font-family', "\'Font Awesome\\ 5 Free\'");
$(this).css('font-weight', 900);
$(this).css('font-size', '20px');
$(this).css('content', $(this).data('src'));
});
$('.diagnoses_select').select2();
$('.routing_select2').select2();
$('.close').click(function(){
$('#' + $(this).data('target')).hide();
})
$('.kill').click(function(){
$('#' + $(this).data('target')).remove();
})
$('.change-color-mode').on('click', function(){
change_color_mode($('body'));
change_color_mode($('.navbar'));
change_color_mode($('.custom-nav-item'));
change_color_mode($('.card'));
});
function change_color_mode(e){
if (e.attr('data-theme')) {
e.removeAttr('data-theme');
} else {
e.attr('data-theme', 'dark');
}
}
//Язык для datatable
var url = document.location.search;
var searchParam = new URLSearchParams(url);
var lang = searchParam.get('lang');
if (lang == 'ru') {
$('#datatable').DataTable({
"language": {
"url": "https://cdn.datatables.net/plug-ins/1.10.19/i18n/Russian.json"
},
"scrollX": true
});
} else {
$('#datatable').DataTable({
"language": {
"url": "https://cdn.datatables.net/plug-ins/1.10.19/i18n/English.json"
},
"scrollX": true
});
}
$('#header_tabs li a').on('click', function (e) {
e.preventDefault()
$(this).tab('show');
$('#organs_group').hide();
if ($(this).attr('id') == 'endocscopy_link')
{
$('#organs_group').show();
}
if ($(this).attr('id') == 'live_endocscopy_link')
{
$('#organs_group').show();
}
})
$('#diagnoses_tabs li a').on('click', function (e) {
e.preventDefault()
$(this).tab('show');
});
$('#hide_deleted').click(function(){
$('.sql_deleted').hide();
$('#hide_deleted').hide();
$('#show_deleted').show();
});
$('#show_deleted').click(function(){
$('.sql_deleted').show();
$('#hide_deleted').show();
$('#show_deleted').hide();
});
});

289
webApp/templates/static/remove/su_add_clinic.js

@ -0,0 +1,289 @@
$(document).ready(function () {
$("#gen_pass").click(function () {
$("#password").val(makePassword(8));
return false;
});
function makePassword(length) {
var result = '';
var characters_g = 'AEIOUYaeiouy';
var characters_s = 'BCDFGHJKLMNPQRSTVWXZbcdfghjklmnpqrstvwxz';
var characters_g_Length = characters_g.length;
var characters_s_Length = characters_s.length;
for (var i = 0; i < length; i++) {
if (i % 2 == 0) {
result += characters_g.charAt(Math.floor(Math.random() * characters_g_Length));
} else {
result += characters_s.charAt(Math.floor(Math.random() * characters_s_Length));
}
}
return result;
}
$('#add_clinic').on('click', function () {
$('#clinic_name').css('background-color', '#fff');
$('#username').css('background-color', '#fff');
$('#password').css('background-color', '#fff');
$('#full_name').css('background-color', '#fff');
demo = $("#create_demo").prop("checked");
clinic_name = $('#clinic_name').val();
username = $('#username').val();
password = $('#password').val();
full_name = $('#full_name').val();
email = $('#email').val();
profarea = $('#profarea').val();
send_directions = $('#send_directions').prop("checked");
accept_direction = $('#accept_direction').prop("checked");
partner_clinic = $('#partner_clinic').prop("checked");
add_pirogov = $('#add_pirogov').prop("checked");
balance = $('#rec_balance').val();
false_form = false
if (!(clinic_name)) {
$('#clinic_name').css('background-color', '#f55');
false_form = true;
}
if (!(username)) {
$('#username').css('background-color', '#f55');
false_form = true;
}
if (!(password)) {
$('#password').css('background-color', '#f55');
false_form = true;
}
if (!(full_name)) {
$('#full_name').css('background-color', '#f55');
full_name = true;
}
if (false_form == false) {
var message = {
demo: demo,
clinic_name: clinic_name,
username: username,
password: password,
full_name: full_name,
profarea: profarea,
email: email,
send_directions: send_directions,
accept_direction: accept_direction,
partner_clinic: partner_clinic,
add_pirogov: add_pirogov,
balance: balance
}
$.ajax({
type: 'POST',
url: '/su_add_clinic',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if (data['success'] == true) {
$('#clinic_name').val('');
$('#username').val('');
$('#password').val('');
$('#full_name').val('');
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
} else {
//$('#username').css('background-color', '#f55');
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
}
});
}
});
$('#su_add_user').on('click', function () {
$('#username').css('background-color', '#fff');
$('#password').css('background-color', '#fff');
$('#full_name').css('background-color', '#fff');
username = $('#username').val();
password = $('#password').val();
full_name = $('#full_name').val();
super_admin = $('#super_admin').prop("checked");
false_form = false
if (!(username)) {
$('#username').css('background-color', '#f55');
false_form = true;
}
if (!(password)) {
$('#password').css('background-color', '#f55');
false_form = true;
}
if (!(full_name)) {
$('#full_name').css('background-color', '#f55');
full_name = true;
}
if (false_form == false) {
var message = {
username: username,
password: password,
full_name: full_name,
super_admin: super_admin
}
$.ajax({
type: 'POST',
url: '/su_add_user',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if (data['success'] == true) {
$('#clinic_name').val('');
$('#username').val('');
$('#password').val('');
$('#full_name').val('');
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
} else {
$('#username').css('background-color', '#f55');
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
}
});
}
});
$('#su_add_clinic_user').on('click', function () {
$('#username').css('background-color', '#fff');
$('#username').css('background-color', '#fff');
$('#password').css('background-color', '#fff');
$('#full_name').css('background-color', '#fff');
clinic_manager = $('#clinic_manager').prop("checked");
examiner = $('#examiner').prop("checked");
doctor = $('#doctor').prop("checked");
directions = $('#directions').prop("checked");
prof_doctor = $('#prof_doctor').prop("checked");
username = $('#username').val();
password = $('#password').val();
clinic_id = $('#clinic_id').val();
notification_email = $('#notification_email').val();
full_name = $('#full_name').val();
false_form = false;
if(!(directions))
{
directions = false;
}
if(!(prof_doctor))
{
prof_doctor = false;
}
if(!(full_name))
{
$('#full_name').css('background-color', '#f55');
full_name = true;
}
if(!(username))
{
$('#username').css('background-color', '#f55');
false_form = true;
}
if(!(password))
{
$('#password').css('background-color', '#f55');
false_form = true;
}
if(false_form==false)
{
var message = {
clinic_manager: clinic_manager,
examiner: examiner,
username:username,
password:password,
full_name:full_name,
directions:directions,
doctor:doctor,
prof_doctor:prof_doctor,
notification_email:notification_email,
clinic_id:clinic_id
}
$.each($('.area_check'), function(e) {
if($(this).prop('checked') == true)
message['area'] = $(this).data('area_id');
});
$.ajax({
type:'POST',
url: '/su_add_clinic_user',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#username').val('');
$('#password').val('');
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
}
else
{
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
$('#username').css('background-color', '#f55');
if(data.hasOwnProperty('message'))
{
show_error(data.message,0);
}
}
},
error:function (jqXHR, exception) {
if(data.hasOwnProperty('message'))
{
show_error('Ошибка при добавлении пользователя',0);
}
}
});
}
else
{
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
});
$("#create_demo").on('click', function () {
let send_directions = $("#send_directions");
let accept_direction = $("#accept_direction");
let partner_clinic = $("#partner_clinic");
if ($("#create_demo")[0].checked == true) {
partner_clinic[0].checked = false
send_directions[0].checked = false
accept_direction[0].checked = false
partner_clinic[0].disabled = true
send_directions[0].disabled = true
accept_direction[0].disabled = true
$('#remaining').attr("style", "display: block")
} else {
partner_clinic[0].disabled = false
send_directions[0].disabled = false
accept_direction[0].disabled = false
$('#remaining').attr("style", "display: none")
}
})
});

186
webApp/templates/static/remove/su_add_tags[dev].js

@ -0,0 +1,186 @@
$(document).ready(function() {
reloadCategories();
mapTags();
$('#add_tag_diagnos').click(function(){
if($(this).is(':checked'))
{
$('#category_block').hide();
$('#icd_block').show();
}
else
{
$('#category_block').show();
$('#icd_block').hide();
}
});
$('#add_group').click(function(){
var message = {
name: $('#add_group_name').val()
}
$.ajax({
type:'POST',
url: '/add_category',
async: false,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#add_group_name').val('');
$('#add_group_name').css('background-color', 'lightgreen');
$('#add_tag_category').empty();
$('#add_tag_category').append('<option value="" disabled="" selected="">Категория</option>');
reloadCategories();
mapTags();
}
else
{
$('#add_group_name').css('background-color', 'lightcora');
}
}
});
});
$('#check_diagnoses').click(function(){
$.ajax({
type:'POST',
url: '/check_diagnoses',
async: false,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
if(data['success'] == true)
{
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
}
else
{
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
}
});
});
$('#add_tag').click(function(){
$('#add_tag_name').css('background-color', 'white');
var message = {
name: $('#add_tag_name').val(),
icd: $('#add_icd_code').val(),
diagnos: $('#add_tag_diagnos').is(':checked'),
category: $('#add_tag_category').val()
}
$.ajax({
type:'POST',
url: '/add_tag',
async: false,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#add_tag_name').css('background-color', 'lightgreen');
$('#add_tag_name').val('');
$('#add_icd_code').val('');
}
else
{
$('#add_tag_name').css('background-color', 'lightcora');
}
mapTags();
}
});
});
function reloadCategories(){
$.ajax({
type:'GET',
url: '/get_categories',
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
for(category in data)
{
$('#add_tag_category').append('<option value=' + data[category]['id'] + '> ' + data[category]['name'] + ' </option>');
}
},
error:function (jqXHR, exception) {
}
});
}
//Функция отрисовки формы!
function mapTags(){
$('#categorized_tags_header').empty();
$('#categorized_tags_body').empty();
$('#diagnoses_tags').empty();
$.ajax({
type:'GET',
url: '/get_categories',
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
var show = 'show';
for(category in data)
{
$('#categorized_tags_header').append('<a data-toggle="collapse" href="#cat'+data[category]['id']
+'" aria-expanded="true" aria-controls="#cat'+data[category]['id']
+'" class="btn btn-link">'+data[category]['name']+'</a>')
$('#categorized_tags_body').append('<div id="cat'+data[category]['id']
+'" class="collapse '+show+'">');
show = ''
for(tag_num in data[category]['tags'])
{
var tag = data[category]['tags'][tag_num]
$('#cat'+data[category]['id']).append('<div class="custom-control custom-checkbox my-1 mr-sm-2 checktag"><input type="checkbox" id="tag'+tag['id']
+'" data-name="'+tag['name']+'" class="custom-control-input checkitem"><label for="tag'+tag['id']+'" class="custom-control-label">'+tag['name']+'</label></div>');
}
}
$('.collapse').on('show.bs.collapse', function (e) {
$('.collapse').collapse("hide")
})
},
error:function (jqXHR, exception) {
}
});
$.ajax({
type:'GET',
url: '/get_tags',
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
for(tag_num in data)
{
var tag = data[tag_num]
if(tag['category_id'] == null && tag['diagnos'] == true)
{
var icd = ''
if (tag['icd'])
{
icd = tag['icd'] + ' '
}
$('#diagnoses_tags').append('<div class="custom-control custom-checkbox my-1 mr-sm-2 checktag"><input type="checkbox" id="tag'+tag['id']
+'" data-name="'+tag['name']+'" class="custom-control-input checkitem"><label for="tag'+tag['id']+'" class="custom-control-label">'+icd+tag['name']+'</label></div>');
}
}
},
error:function (jqXHR, exception) {
}
});
$('.collapse').addClass('show');
}
});

122
webApp/templates/static/remove/su_clinic_control.js

@ -0,0 +1,122 @@
$(document).ready(function () {
$('#su_save_clinic_control').on('click', function(){
api_password = $('#api_password').val();
api_username = $('#api_username').val();
rec_balance = $('#rec_balance').val();
clinic_id = $('#clinic_id').val();
demo_clinic = $('#demo_clinic').prop("checked");
email = $('#email').val();
inn = $('#inn').val();
site = $('#site').val();
telephone = $('#telephone').val();
logo = $('#logo').val();
send_directions = $('#send_directions').prop("checked");
accept_direction = $('#accept_direction').prop("checked");
partner_clinic = $('#partner_clinic').prop("checked");
var message = {
api_password:api_password,
api_username:api_username,
rec_balance:rec_balance,
demo_clinic: demo_clinic,
clinic_id: clinic_id,
email: email,
send_directions:send_directions,
accept_direction:accept_direction,
partner_clinic:partner_clinic,
inn:inn,
site:site,
telephone:telephone,
logo:logo,
areas: []
}
$.each($('.area_check'), function(e) {
if($(this).prop('checked') == true)
message['areas'].push({'id': $(this).data('area_id'), 'enabled': true})
else
message['areas'].push({'id': $(this).data('area_id'), 'enabled': false})
});
$.ajax({
type:'POST',
url: '/su_save_clinic_control',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
}
else
{
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
}
});
});
$('#su_delete_clinic').on('click', function(){
clinic_id = $('#clinic_id').val();
var message = {
clinic_id: clinic_id
}
$.ajax({
type:'POST',
url: '/su_delete_clinic',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
}
else
{
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
}
});
});
$('#su_restore_clinic').on('click', function(){
clinic_id = $('#clinic_id').val();
var message = {
clinic_id: clinic_id
}
$.ajax({
type:'POST',
url: '/su_restore_clinic',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
}
else
{
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
}
});
});
});

94
webApp/templates/static/remove/su_clinic_users.js

@ -0,0 +1,94 @@
$(document).ready(function () {
$('.userpassword').click(function(){
$('#password-modal').modal('toggle');
$('#target_user_id').val($(this).data('id'));
$('#returned_username').html('Имя пользователя: ' + $(this).data('username'));
$('#get_password').prop('disabled', false);
});
$('#password-modal').on('hidden.bs.modal', function () {
$('#returned_password').html();
$('#password-input-redspan').hide();
$('#selfpasswordinput').show();
$('#returned_password').hide();
$('#returned_username').hide();
$('#new_pwd_form').hide();
$('#change_password').hide();
});
$('#change_password').click(function(){
$('#password-input-redspan').hide();
var message = {
id: $('#target_user_id').val(),
password: $('#selfpassword').val(),
new_password: $('#new_password').val()
}
$.ajax({
type:'POST',
url: '/change_userpassword',
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['password'])
{
$('#selfpasswordinput').hide();
$('#returned_password').show();
$('#returned_username').show();
$('#new_pwd_form').show();
$('#change_password').show();
$('#returned_password').html('Пароль: ' + data['password']);
$('#get_password').prop('disabled', true);
}
else
{
$('#password-input-redspan').show();
$('#password-input-redspan').html('Ошибка доступа, проверьте правильность ввода');
}
},
error:function (jqXHR, exception) {
}
});
});
$('#get_password').click(function(){
$('#password-input-redspan').hide();
var message = {
id: $('#target_user_id').val(),
password: $('#selfpassword').val()
}
$.ajax({
type:'POST',
url: '/get_userpassword',
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['password'])
{
$('#selfpasswordinput').hide();
$('#returned_password').show();
$('#returned_username').show();
$('#new_pwd_form').show();
$('#change_password').show();
$('#returned_password').html('Пароль: ' + data['password']);
$('#get_password').prop('disabled', true);
}
else
{
$('#password-input-redspan').show();
$('#password-input-redspan').html('Ошибка доступа, проверьте правильность ввода');
}
},
error:function (jqXHR, exception) {
}
});
});
});

18
webApp/templates/static/remove/test.js

@ -0,0 +1,18 @@
$(document).ready(function () {
$('.alert-placeholder').mouseenter(function(){
var popOverSettings = {
placement: 'bottom',
content: $(this).data('content'),
trigger: 'hover',
container: this,
offset: '0'
}
$(this).popover(popOverSettings);
$(this).popover('show');
$('.popover').addClass('alert-popover');
});
$('.alert-placeholder').mouseleave(function(){
$('.alert-popover').remove()
});
});

44
webApp/templates/static/remove/video_play.js

@ -0,0 +1,44 @@
$(document).ready(function () {
$('body').on('click', '.preview_img', openVideo)
function openVideo() {
let type = 'image'
let path = this.getAttribute('data-path_file');
parts = path.split('.')
if (['avi', 'mp4', 'webm', 'mkv', 'flv', 'wmv'].includes(parts[parts.length - 1])) {
type = 'video'
}
if (type == 'video') {
$('#video_play').modal('toggle')
var my_video_id = videojs('video_play_file');
my_video_id.fluid(true);
path = path.replace('avi', 'mp4');
my_video_id.src('/video/' + path);
$('#rotate_video').click(function(){
rotation = $('#rotate_video').data('rotation');
if(rotation == undefined)
rotation = 0
rotation = rotation + 90;
if(rotation == 360)
rotation = 0;
console.log(rotation);
my_video_id.zoomrotate({
rotate: rotation,
});
$('#rotate_video').data('rotation', rotation);
});
}
else {
$("#image_open").modal('toggle')
$('#image_file').empty()
let image_file = document.getElementById('image_file');
let image = document.createElement('img')
image.setAttribute('src', '/img/' + path)
image.setAttribute('width', '100%')
image.setAttribute('height', '100%')
image_file.appendChild(image)
}
}
});

838
webApp/templates/static/remove/visit.js

@ -0,0 +1,838 @@
$(document).ready(function () {
$('.close-modal').on('click', function(){
$('#standart_modal').modal('toggle');
});
$('#short_std').on('click', function(){
standart_load($('#cur_modal_std').val(), false, $('#cur_modal_tag_id').val());
$('#short_std').hide();
$('#long_std').show();
});
$('#long_std').on('click', function(){
standart_load($('#cur_modal_std').val(), true, $('#cur_modal_tag_id').val());
$('#short_std').show();
$('#long_std').hide();
});
$('.custom-input').on('focus focusout', function(){
if($(this).val() == null || $(this).val() == '')
{
$($(this).parent()).removeClass('hastext');
}
else
{
$($(this).parent()).addClass('hastext');
}
});
// if ($('#nic_visit').length > 0){
// load__endo_history();
// console.log('nic visit')
// }
// else
// {
// console.log('NOT nic visit')
// }
// let dropzone = document.getElementById("dropzone");
// let listing = document.getElementById("listing");
//// var folder_items = null;
//
// function scanFiles(item, container) {
// console.log(item)
// let elem = document.createElement("li");
// elem.textContent = item.name;
// container.appendChild(elem);
//
// if (item.isDirectory) {
// let directoryReader = item.createReader();
// let directoryContainer = document.createElement("ul");
// container.appendChild(directoryContainer);
// directoryReader.readEntries(function(entries) {
// entries.forEach(function(entry) {
// scanFiles(entry, directoryContainer);
// });
// });
// }
// }
//
// function get_files(folder_items, a){
// console.log('listing');
// console.log(folder_items.length)
// console.log(folder_items)
// console.log(a)
// listing.textContent = "";
// for (let i=0; i<folder_items.length; i++) {
// let item = folder_items[i].webkitGetAsEntry();
// if (item) {
// scanFiles(item, listing)
// }
// }
// }
//
// dropzone.addEventListener("dragover", function(event) {
// event.preventDefault();
// }, false);
//
// dropzone.addEventListener("drop", function(event) {
// var folder_items = event.dataTransfer.items;
//
// event.preventDefault();
//// get_files()
// a = [1,4,5,6]
// console.log(folder_items)
// console.log(folder_items.length)
// var t=setInterval(function(){get_files(folder_items, a);},1000);
//// start_monitoring(items)
//
// }, false);
//
// function optimed_monitor(){
//
// }
function previewIMG(input, preview) {
var reader = new FileReader();
reader.onload = function(e) {
$(preview).attr('src', e.target.result);
}
reader.readAsDataURL(input);
}
$("#file_input").change(function(){
$('#imgs_preview').empty();
$('#file-input-greenspan').html('');
if ($(this)[0].files[0]) {
$('#pre_load').hide();
$('#file-input-greenspan').html('Загружено снимков: ' + $(this)[0].files.length);
for(i=0;i<$(this)[0].files.length;i++)
{
if (($(this)[0].files[i].type.includes('image')))
{
div = document.createElement('div');
div.setAttribute('class', 'col-3 p-1 m-0');
img = document.createElement('img');
img.setAttribute('class', 'preview_img');
previewIMG($(this)[0].files[i], $(img));
div.appendChild(img);
document.getElementById("imgs_preview").appendChild(div);
}
if (($(this)[0].files[i].type.includes('video'))) {
console.log('Загрузка видео')
}
}
}
});
$('#endo_tab_link').on('click', function()
{
load__endo_history(true);
});
$('#nn_tab_link').on('click', function()
{
load__endo_history(true);
});
function reload_visit_info(){
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/reload_visit_info/' + $('#visit_id').val() + '?task=off'+'&lang='+lang,
processData: false,
contentType: false,
success: (data) => {
load__endo_history(false)
}
});
};
function load__endo_history(rvn){
$('#endo_history').empty();
if(rvn)
{
reload_visit_info();
return;
}
$.ajax({
type:'GET',
url: '/get_visit_info_alt/'+$('#visit_id').val(),
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentTypestatus
success: (data) => {
$('#endo_history').empty();
var label_id = 0
console.log(data['pics'])
for (pic_num in data['pics'])
{
pic = data['pics'][pic_num]
organ = ''
if (pic['organ'])
{
organ = pic['organ']
}
type = 'image'
parts = pic['hash_name'].split('.')
if (['avi', 'mp4', 'webm', 'mkv', 'flv', 'wmv', 'mpeg'].includes(parts[parts.length - 1])) {
type = 'video'
}
if(pic.hasOwnProperty('nn_tag'))
{
//Нейросеть
if($('#language').val() == 'ru')
$('#endo_history').append('<tr><td scope="col" id="click"><img src=/img/'+pic['hash_name']+' class="preview_img" data-path_file=' + pic['hash_name'] + ' data-type_file=' + type + '></td><td scope="col"><span class="expert_diagnos" data-img='+pic['hash_name']+'>'+pic['nn_icd']+' '+pic['nn_tag']+'</span><span class="standart_modal btn btn-primary btn-sm" data-code="'+pic['nn_icd']+'">Стандарт</span></td><td scope="col"><select data-img='+pic['hash_name']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт<span></td></tr>');
else
$('#endo_history').append('<tr><td scope="col" id="click"><img src=/img/'+pic['hash_name']+' class="preview_img" data-path_file=' + pic['hash_name'] + ' data-type_file=' + type + '></td><td scope="col"><span class="expert_diagnos" data-img='+pic['hash_name']+'>'+pic['nn_icd']+' '+pic['nn_tag']+'</span><span class="standart_modal btn btn-primary btn-sm" data-code="'+pic['nn_icd']+'">Standart</span></td><td scope="col"><select data-img='+pic['hash_name']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart<span></td></tr>');
}
else
{
//Без описания
if($('#language').val() == 'ru')
$('#endo_history').append('<tr><td scope="col"><img src=/img/'+pic['hash_name']+' class="preview_img" data-path_file=' + pic['hash_name'] + ' data-type_file=' + type + '></td><td scope="col"><span class="expert_diagnos" data-img='+pic['hash_name']+'></span><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт</span></td><td scope="col"><select data-img='+pic['hash_name']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Стандарт</span></td></tr>');
else
$('#endo_history').append('<tr><td scope="col"><img src=/img/'+pic['hash_name']+' class="preview_img" data-path_file=' + pic['hash_name'] + ' data-type_file=' + type + '></td><td scope="col"><span class="expert_diagnos" data-img='+pic['hash_name']+'></span><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart</span></td><td scope="col"><select data-img='+pic['hash_name']+' id="ds'+label_id+'" type="select" class="form-control diagnoses_select"><option value="" disabled="" selected="">Диагноз</option></select><span class="standart_modal btn btn-secondary btn-sm" data-code="">Standart</span></td></tr>');
}
label_id = label_id + 1
}
select_fill();
for (pic_num in data['pics'])
{
pic = data['pics'][pic_num]
if(pic.hasOwnProperty('confirmed')){
if(pic['confirmed'] == true)
{
$.each($('.expert_diagnos'), function(e) {
if($(this).data('img') == pic[0]['hash_name'])
{
console.log(pic[0]['icd']);
$(this).html(pic[0]['icd']+' '+pic[0]['tag'])
$(this).parent().children('.standart_modal').data('tag_id', pic[0]['tag_id']);
$(this).parent().children('.standart_modal').data('code', pic[0]['icd']);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
}
})
}
else{
$.each($('.diagnoses_select'), function(e) {
if($(this).data('img') == pic['hash_name'])
{
$(this).val(pic['tag_id']);
$(this).parent().children('.standart_modal').data('code', pic['icd']);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
}
})
}
}
}
$('.standart_modal').on('click', function(){
$('#standart_modal').modal('toggle');
standart_load($(this).data('code'), false, $(this).data('tag_id'));
})
$('.diagnoses_select').on('change', function() {
save_select(this);
$(this).parent().children('.standart_modal').removeClass('btn-secondary');
$(this).parent().children('.standart_modal').addClass('btn-primary');
});
$('.diagnoses_select').select2();
},
error:function (jqXHR, exception) {
}
});
}
//saving on select change
function save_select(element){
// console.log(element.value);
// console.log($(element).data('img'));
var message = {
diagnos_id: element.value,
pic_name: $(element).data('img'),
visit_id: $('#visit_id').val(),
}
$.ajax({
type:'POST',
url: '/save_pic_diagnos',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$(element).parent().children('.standart_modal').data('code', data['icd']);
$(element).parent().children('.standart_modal').data('tag_id', data['tag_id']);
$('#success').html('Диагноз сохранен');
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
}
else
{
after_error();
}
},
error:function (jqXHR, exception) {
after_error();
}
});
}
function getId(str)
{
return(str.replaceAll(' ','').replaceAll(',','').replaceAll('.','').replaceAll(';','').replaceAll(':','').replaceAll('(','').replaceAll(')','').replaceAll('-','').replaceAll('/','').replaceAll('\\',''))
}
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
function standart_load(code, full, tag_id){
$('#cur_modal_std').val(code);
$('#cur_modal_tag_id').val(tag_id);
lang = getUrlParameter('lang');
console.log('lang - '+lang);
$.ajax({
type:'GET',
url: '/get_diagnos_standart?icd='+code+'&tag_id='+tag_id+'&lang='+lang,
async: true,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#standart_body').empty();
$('#standart_name').html(data['standart_name']);
if(lang == 'en'){
$('#standart_diagnos').html('Diagnosis: <b>' + data['name']+'</b>');
$('#standart_type').html('Type of standard: <b>'+data['standart_type']+'</b>');
$('#standart_icd_code').html('ICD-10 code: <b>'+data['icd']+'</b>');
$('#standart_time').html('Treatment time (days): <b>'+data['days_min']+' - '+data['days_max']+'</b>');
}
else
{
$('#standart_diagnos').html('Диагноз: <b>' + data['name']+'</b>');
$('#standart_type').html('Вид стандарта: <b>'+data['standart_type']+'</b>');
$('#standart_icd_code').html('Код по МКБ-10: <b>'+data['icd']+'</b>');
$('#standart_time').html('Сроки лечения (дней): <b>'+data['days_min']+' - '+data['days_max']+'</b>');
}
var groups = [];
for (std_num in data['standart'])
{
var std = data['standart'][std_num]
if (!(groups.includes(std['service_type'])))
{
groups.push(std['service_type'])
$('#standart_body').append('<h5>'+std['service_type']+'</h5><div id="group'+getId(std['service_type'])+'"></div>');
}
}
var sub_groups = [];
for (std_num in data['standart'])
{
var std = data['standart'][std_num]
for (group in groups){
if(!($('#group'+getId(std['service_type'])).data('dt'+getId(std['service_subtype'])) == true))
{
$('#group'+getId(std['service_type'])).data('dt'+getId(std['service_subtype']), true);
$('#group'+getId(std['service_type'])).append('<p>'+std['service_subtype']+'</p>');
if(lang == 'en')
$('#group'+getId(std['service_type'])).append('<table style="width: 100%;" class="table table-striped table-bordered custom-font"><thead><tr><th scope="col">Medical Service Code</th><th scope="col">Name</th><th scope="col">Approximate frequency of presentation</th></tr></thead><tbody id="table'+ getId(std['service_subtype']) + getId(std['service_type'])+'"></tbody></table>');
else
$('#group'+getId(std['service_type'])).append('<table style="width: 100%;" class="table table-striped table-bordered custom-font"><thead><tr><th scope="col">Код медицинской услуги</th><th scope="col">Наименование</th><th scope="col">Примерная частота представления</th></tr></thead><tbody id="table'+ getId(std['service_subtype']) + getId(std['service_type'])+'"></tbody></table>');
}
}
}
for (std_num in data['standart'])
{
if(full == true){
var std = data['standart'][std_num]
service_code = ''
if (!(std['service_code'] == 'NULL'))
service_code = std['service_code']
$('#table'+ getId(std['service_subtype']) + getId(std['service_type'])).append(
'<tr><td>'+service_code+'</td><td>'+std['standart_name']+'</td><td>'+std['periodicity']+'</td></td>'
);
}
else
{
var std = data['standart'][std_num]
if(std['periodicity'] == '1'){
service_code = ''
if (!(std['service_code'] == 'NULL'))
service_code = std['service_code']
$('#table'+ getId(std['service_subtype']) + getId(std['service_type'])).append(
'<tr><td>'+service_code+'</td><td>'+std['standart_name']+'</td><td>'+std['periodicity']+'</td></td>'
);
}
}
}
// console.log(groups)
$('#copy_text').data('text', data['for_copy'])
},
error:function (jqXHR, exception) {
$('#standart_body').empty();
$('#standart_name').html('');
$('#standart_diagnos').html('');
$('#standart_type').html('');
$('#standart_icd_code').html('');
$('#standart_time').html('');
}
});
}
// $('#copy_text').data('text', data['for_copy'])
// function fallbackCopyTextToClipboard(text) {
// var textArea = document.createElement("textarea");
// textArea.value = text;
//
// // Avoid scrolling to bottom
// textArea.style.top = "0";
// textArea.style.left = "0";
// textArea.style.position = "fixed";
//
// document.body.appendChild(textArea);
// textArea.focus();
// textArea.select();
//
// try {
// var successful = document.execCommand('copy');
// var msg = successful ? 'successful' : 'unsuccessful';
// console.log('Fallback: Copying text command was ' + msg);
// } catch (err) {
// console.error('Fallback: Oops, unable to copy', err);
// }
//
// document.body.removeChild(textArea);
// }
// function copyTextToClipboard(text) {
// if (!navigator.clipboard) {
// fallbackCopyTextToClipboard(text);
// return;
// }
// navigator.clipboard.writeText(text).then(function() {
// console.log('Async: Copying to clipboard was successful!');
// }, function(err) {
// console.error('Async: Could not copy text: ', err);
// });
// }
$('#copy_text').on("click", function(){
// navigator.clipboard.writeText($('#copy_text').data('text'))
$('#text_to_copy').html($('#copy_text').data('text'));
function listener(e) {
str = document.getElementById('text_to_copy').innerHTML
e.clipboardData.setData("text/html", str);
e.clipboardData.setData("text/plain", str);
e.preventDefault();
}
document.addEventListener("copy", listener);
document.execCommand("copy");
document.removeEventListener("copy", listener);
$('#copy_text').addClass('check-icn');
setTimeout(function() {
$('#copy_text').removeClass('check-icn');
}, 2000);
});
$('#start_rec').on("click", function()
{
if($('#btnradio_ear').is(":checked"))
startRec('source');
else
loadWOrec('source');
});
$('#save_picture').on("click", function()
{
if($('#btnradio_ear').is(":checked"))
startRec('webcam');
else
loadWOrec('webcam');
});
function makeblob(dataURL) {
var BASE64_MARKER = ';base64,';
if (dataURL.indexOf(BASE64_MARKER) == -1) {
var parts = dataURL.split(',');
var contentType = parts[0].split(':')[1];
var raw = decodeURIComponent(parts[1]);
return new Blob([raw], { type: contentType });
}
var parts = dataURL.split(BASE64_MARKER);
var contentType = parts[0].split(':')[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;
var uInt8Array = new Uint8Array(rawLength);
for (var i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], { type: contentType });
}
function loadWOrec(from){
$('#start_rec').attr("disabled", true);
$('#save_picture').attr("disabled", true);
$('#request_waiting').show();
$('#progress_text').html('Загрузка снимков');
var organ = 0
if($('#btnradio_ear').is(":checked"))
organ = 1
if($('#btnradio_throat').is(":checked"))
organ = 2
if($('#btnradio_nose').is(":checked"))
organ = 3
var fileList = document.getElementById('file_input').files;
var formData = new FormData();
var poll = null;
var i = 0
if (from == 'source')
for(i=0;i<fileList.length;i++)
{
if (fileList[i].type.includes('image') || fileList[i].type.includes('video'))
{
formData.append("files", fileList[i]);
i += 1;
}
}
if (from == 'webcam')
$.each($('.endo_image'), function(e) {
formData.append("files", makeblob($(this).attr('src')));
i += 1;
});
if (i > 0)
{
$.ajax({
type:'POST',
data: formData,
url: '/save_images?patient_id='+$('#patient_id').val()+'&organ='+organ+'&visit_id='+$('#visit_id').val()+'&profarea_id='+'1',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#photos').empty();
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
},
error:function (jqXHR, exception) {
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
});
}
else
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
}
var cookie_life = new Date();
cookie_life.setTime(cookie_life.getTime() + (20 * 60 * 1000));
check_cookies();
setInterval(() => check_cookies(), 5000);
function check_cookies()
{
if (!document.hidden) {
var url = '/new_images_monitoring'
if ($.cookie('images_timestamp'))
url = '/new_images_monitoring?timestamp='+$.cookie('images_timestamp')
$.ajax({
type:'GET',
url: url,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
for (msg_num in data['result'])
{
if (data['result'][msg_num]['timestamp'] > $.cookie('images_timestamp'))
{
if ($('#nic_saving').length > 0)
startRemoteRec(data['result'][msg_num]['src']);
}
}
$.cookie('images_timestamp', data['timestamp'], { expires: cookie_life });
},
error:function (jqXHR, exception) {
after_error();
}
});
}
}
function startRemoteRec(src){
$('#start_rec').attr("disabled", true);
$('#save_picture').attr("disabled", true);
$('#request_waiting').show();
$('#progress_text').html('Загрузка снимков');
var lang = getUrlParameter('lang');
var poll = null;
var message = {
src: src
}
$.ajax({
type:'POST',
data: JSON.stringify(message),
url: '/start_remote_image_diagnostics?patient_id='+$('#patient_id').val()+'&visit_id='+$('#visit_id').val()+'&lang=' + lang,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#photos').empty();
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#progress_text').html('Распознание диагноза');
if(data['status_id'] == 0)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 1)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 2)
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
$('#success').html('Загрузка завершена, снимок доступен в истории')
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
load__endo_history(true);
}
if(data['status_id'] == 3)
after_error();
},
error:function (jqXHR, exception) {
$('#photos').empty();
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
});
}
function startRec(from){
$('#start_rec').attr("disabled", true);
$('#save_picture').attr("disabled", true);
$('#request_waiting').show();
$('#progress_text').html('Загрузка снимков');
var lang = getUrlParameter('lang');
var fileList = document.getElementById('file_input').files;
var formData = new FormData();
var poll = null;
var i = 0
var img_in_params = ''
if (from == 'source')
for(i=0;i<fileList.length;i++)
{
if (fileList[i].type.includes('image') || fileList[i].type.includes('video'))
{
formData.append("files", fileList[i]);
i += 1;
}
}
if (from == 'webcam')
$.each($('.endo_image'), function(e) {
if($(this).data('type') == "blob")
formData.append("files", makeblob($(this).attr('src')));
else
{
formData.append("files", $(this).attr('src'));
img_in_params = img_in_params + $(this).data('name') + ','
}
i += 1;
});
let searchParams = new URLSearchParams(window.location.search)
force_ear = searchParams.has('force_ear');
if (i > 0)
{
$.ajax({
type:'POST',
data: formData,
url: '/start_image_diagnostics?patient_id='+$('#patient_id').val()+'&visit_id='+$('#visit_id').val() + '&imgs='+img_in_params + '&force_ear='+force_ear+'&lang=' + lang,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$('#photos').empty();
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#progress_text').html('Распознание диагноза');
if(data['status_id'] == 0)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 1)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 2)
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
$('#success').html('Загрузка завершена, снимок доступен в истории')
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
load__endo_history(true);
}
if(data['status_id'] == 3)
after_error();
},
error:function (jqXHR, exception) {
$('#photos').empty();
$('#imgs_preview').empty();
$('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
});
}
else
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
after_error();
}
}
function check_image_output(task_id)
{
$.ajax({
type:'GET',
url: '/status/'+task_id,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
// console.log(data);
if('status_id' in data){
if(data['status_id'] == 0)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 1)
poll = setTimeout(function() { check_image_output(data['id']); }, 2500);
if(data['status_id'] == 2)
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
$('#success').html('Загрузка завершена, снимок доступен в истории')
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
load__endo_history(true);
}
if(data['status_id'] == 3)
{
after_error();
}
}
else
{
after_error();
}
},
error:function (jqXHR, exception) {
after_error();
}
});
}
function select_fill(){
lang = getUrlParameter('lang');
console.log(lang)
$.ajax({
type:'GET',
url: '/get_diagnos_tags/1'+'?lang='+lang,
async: false,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
$.each($('.diagnoses_select'), function(e) {
// console.log(data);
for(tag_num in data)
{
var tag = data[tag_num]
// console.log(tag);
if(tag['category_id'] == null && tag['diagnos'] == true)
{
var icd = ''
if (tag['icd'])
{
icd = tag['icd'] + ' '
}
// console.log(icd);
$(this).append('<option value="'+tag['id']+'">'+icd+tag['standart_name']+'</option>');
// $('#diagnoses_tags').append('<div class="custom-control custom-checkbox my-1 mr-sm-2 checktag"><input type="checkbox" id="tag'+tag['id']
// +'" data-name="'+tag['name']+'" class="custom-control-input checkitem"><label for="tag'+tag['id']+'" class="custom-control-label">'+icd+tag['name']+'</label></div>');
}
}
});
},
error:function (jqXHR, exception) {
}
});
}
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
function makeid(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for ( var i = 0; i < length; i++ ) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
});

155
webApp/templates/static/remove/visit_camera.js

@ -0,0 +1,155 @@
$(document).ready(function () {
//https://medium.com/swlh/how-to-access-webcam-and-take-picture-with-javascript-b9116a983d78
const webcamElement = document.getElementById('webcam');
const canvasElement = document.getElementById('canvas');
const snapSoundElement = document.getElementById('snapSound');
const webcam = new Webcam(webcamElement, 'user', canvasElement, snapSoundElement);
$('#live_endocscopy_link').on('click', function(){
if ($('#live_endocscopy_link').hasClass('active'))
{
webcam.start()
.then(result =>{
console.log("webcam started");
$('#take_picture').focus();
})
.catch(err => {
console.log(err);
});
}
});
$(document).keypress(function(event){
if ($('#live_endocscopy_link').hasClass('active'))
{
take_picture();
}
});
$('#take_picture').on('click', function(){
take_picture();
})
$('.nav-link').on('click', function(){
if ($(this).attr('id') != 'live_endocscopy_link')
webcam.stop()
});
function makeblob(dataURL) {
var BASE64_MARKER = ';base64,';
if (dataURL.indexOf(BASE64_MARKER) == -1) {
var parts = dataURL.split(',');
var contentType = parts[0].split(':')[1];
var raw = decodeURIComponent(parts[1]);
return new Blob([raw], { type: contentType });
}
var parts = dataURL.split(BASE64_MARKER);
var contentType = parts[0].split(':')[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;
var uInt8Array = new Uint8Array(rawLength);
for (var i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], { type: contentType });
}
function loadWOrec(from, blob){
$('#start_rec').attr("disabled", true);
$('#save_picture').attr("disabled", true);
$('#request_waiting').show();
$('#progress_text').html('Загрузка снимков');
var organ = 0
if($('#btnradio_ear').is(":checked"))
organ = 1
if($('#btnradio_throat').is(":checked"))
organ = 2
if($('#btnradio_nose').is(":checked"))
organ = 3
var fileList = document.getElementById('file_input').files;
var formData = new FormData();
var poll = null;
var i = 0
if (from == 'source')
for(i=0;i<fileList.length;i++)
{
if (fileList[i].type.includes('image'))
{
formData.append("files", fileList[i]);
i += 1;
}
}
if (from == 'webcam')
// $.each($('.endo_image'), function(e) {
formData.append("files", makeblob(blob));
i += 1;
// });
if (i > 0)
{
$.ajax({
type:'POST',
data: formData,
url: '/upload_images',
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
// $('#photos').empty();
// $('#imgs_preview').empty();
// $('#file_input').val(null);
$('#pre_load').show();
$('#file-input-greenspan').html('');
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
for(fnum in data['files'])
$('#photos').append('<div class="col-3 my-2"><button type="button" aria-label="Close" class="btn-close remove-picture" style="background-color: #0d6efd; display: block; position: absolute; margin: 5px;"></button><img class="endo_image" data-type="saved" data-name=' + data['files'][fnum] + ' id="rrr" src="/img/'+data['files'][fnum]+'" style="width: 100%;"></div>')
},
error:function (jqXHR, exception) {
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
// after_error();
}
});
}
else
{
$('#start_rec').attr("disabled", false);
$('#save_picture').attr("disabled", false);
$('#request_waiting').hide();
// after_error();
}
}
function take_picture(){
let picture = webcam.snap();
// $('#download-photo').attr('src', picture);
// $('#download').attr('href', picture);
if($('#eleps').is(':checked'))
loadWOrec('webcam', picture);
else
$('#photos').append('<div class="col-3 my-2"><button type="button" aria-label="Close" class="btn-close remove-picture" style="background-color: #0d6efd; display: block; position: absolute; margin: 5px;"></button><img class="endo_image" data-type="blob" id="rrr" src="'+picture+'" style="width: 100%;"></div>')
$('.remove-picture').on('click', function(){
$(this).parent().remove();
})
}
$('.remove-picture').on('click', function(){
$(this).parent.remove();
})
});

137
webApp/templates/static/remove/visit_control.js

@ -0,0 +1,137 @@
$(document).ready(function () {
lastVisits();
reload_visit_info();
function reload_visit_info(){
if($('#visit_id').val()){
lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/reload_visit_info/' + $('#visit_id').val() + '?task=off'+'&lang='+lang,
processData: false,
contentType: false,
success: (data) => {
//load__endo_history(false);
}
});
}
}
$('#visits_link').click(function(){
lastVisits();
})
$('#recover_visit').click(function(){
visit_id = $('#visit_id').val()
var message = {
visit_id: visit_id,
}
$.ajax({
type:'POST',
url: '/ca_recover_visit',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#recover_visit').hide();
$('#delete_visit').show();
}
else
{
console.log('Saving error')
$('#exception').html('Ошибка, не удалось обновить информацию');
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
}
});
});
$('#delete_visit').click(function(){
visit_id = $('#visit_id').val()
var message = {
visit_id: visit_id,
}
$.ajax({
type:'POST',
url: '/ca_delete_visit',
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
data: JSON.stringify(message),
success: (data) => {
if(data['success'] == true)
{
$('#recover_visit').show();
$('#delete_visit').hide();
}
else
{
console.log('Saving error')
if(notify == true)
{
$('#exception').html('Ошибка, не удалось обновить информацию');
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
}
}
});
});
function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
return false;
};
function lastVisits(){
$('#last_visits').empty();
var lang = getUrlParameter('lang');
$.ajax({
type:'GET',
url: '/last_visits/'+$('#patient_id').val()+'?lang=' + lang,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: (data) => {
// console.log(data)
for (visit_num in data['visits'])
{
visit = data['visits'][visit_num]
if (data['full_name'])
var full_name = data['full_name'];
else
var full_name = 'N/D';
if($('#language').val() == 'ru')
$('#last_visits').append('<tr><td><a href="/medical_report/'+visit['id']+'?nn_diagnos=true">'+full_name+'</a></td><td>'+visit['date']+'</td><td>'+visit['clinic']+'</td><td>'+visit['doctor']+'</td><td>'+visit['profarea']+'</td></tr>');
else
$('#last_visits').append('<tr><td><a href="/medical_report/'+visit['id']+'?lang=en&nn_diagnos=true">'+full_name+'</a></td><td>'+visit['date']+'</td><td>'+visit['clinic']+'</td><td>'+visit['doctor']+'</td><td>'+visit['profarea']+'</td></tr>');
}
},
error:function (jqXHR, exception) {
}
});
}
});

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save