first commit

This commit is contained in:
2024-11-07 18:38:48 +05:00
commit 7ab166fd23
102 changed files with 10284 additions and 0 deletions
+22
View File
@@ -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
View File
@@ -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
View File
@@ -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;
}
@@ -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;
}
@@ -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;
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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)
}
});
});
});
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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);
@@ -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);
File diff suppressed because one or more lines are too long
@@ -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);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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);
}
};
})();
@@ -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');
Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

@@ -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
View File
@@ -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) {
}
});
});
}
});
@@ -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);
});
@@ -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();
}
}
});
}
}
});
@@ -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()
});
});
@@ -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);
}
})
}
)
});
@@ -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();
}
});
});
@@ -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
View File
@@ -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();
}
})
}
});
});
@@ -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
View File
@@ -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;
}
});
@@ -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;
}
});
@@ -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
View File
@@ -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
View File
@@ -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;
}
});
@@ -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;
}
});
@@ -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
View File
@@ -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();
}
})
})
@@ -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
View File
@@ -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']);
},
})
})
});
@@ -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);
}
});
});
});
@@ -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();
}
}
});
}
}
});
@@ -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) {
}
});
})
}
});
@@ -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
View File
@@ -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) {
});
});
@@ -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);
});
@@ -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);
});
@@ -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
View File
@@ -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
View File
@@ -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();
});
});
@@ -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")
}
})
});
@@ -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');
}
});
@@ -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();
}
}
});
});
});
@@ -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
View File
@@ -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()
});
});
@@ -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
View File
@@ -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;
}
});
@@ -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();
})
});
@@ -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) {
}
});
}
});
@@ -0,0 +1,168 @@
$(document).ready(function() {
$('#next').on('click', function() {
false_form = false
if (!($('#fio').val())) {
$('#fio').css('border-color', '#f55');
false_form = true
} else {
false_form = false
}
if (!($('#telephone').val())) {
$('#telephone').css('border-color', '#f55');
false_form = true
} else {
false_form = false
}
if (!($('#email').val())) {
$('#email').css('border-color', '#f55');
false_form = true
} else {
false_form = false
}
if (!($('#city').val())) {
$('#city').css('border-color', '#f55');
false_form = true
} else {
false_form = false
}
if (false_form == false) {
let data = {
fio: $('#fio').val(),
telephone: $('#telephone').val(),
email: $('#email').val(),
city: $('#city').val()
}
$.ajax({
type: "POST",
data: JSON.stringify(data),
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
url: '/check_one_form',
success: (data) => {
if (data['email_uniqe'] && data['phone_uniqe']) {
let one_form = document.getElementById('one_form')
one_form.setAttribute('style', 'display: none')
let tho_form = document.getElementById('tho_form')
tho_form.setAttribute('style', 'display: block')
tho_form.setAttribute('data-id_user', data['id_user'])
tho_form.setAttribute('data-id_clinic', data['id_clinic'])
tho_form.setAttribute('data-id_profarea', 0)
} else {
if (!data['email_uniqe']) {
$('#email').css('border-color', '#f55');
$('#email_row').children("p").remove();
var smaul = $('<p class="col-12 text-danger">Пользователь с таким E-mail уже существует<p>').appendTo($('#email_row'));
smaul.slideDown(500);
}
if (!data['phone_uniqe']) {
$('#telephone').css('border-color', '#f55');
$('#phone_row').children("p").remove();
var smaul = $('<p class="col-12 text-danger">Пользователь с таким номером телефона уже существует<p>').appendTo($('#phone_row'));
smaul.slideDown(500);
}
}
}
})
} else {
$('#exception').html('Не все поля заполнены');
$('#exception').slideDown(500);
$('#exception').delay(2000).slideUp();
}
})
$('.profarea').on('click', function() {
let cards = document.getElementsByClassName('profarea')
for (let i=0; i < cards.length; i++) {
cards[i].setAttribute('style', 'background-color: none !important; color: black !important')
//cards[ind].setAttribute('style', 'background-color: none !important; color: black !important')
}
$(this).attr('style', 'background-color: #6e3288 !important; color: #fff !important')
let tho_form = document.getElementById('tho_form')
tho_form.setAttribute('data-id_profarea', $(this).attr('data-area_id'))
})
$('#registration').on('click', function() {
let false_form = false
if (!($('#login').val())) {
$('#login').css('border-color', '#f55');
false_form = true
} else {
false_form = false
}
if (!($('#clinic').val())) {
$('#clinic').css('border-color', '#f55');
false_form = true
} else {
false_form = false
}
if ($('#tho_form').attr('data-id_profarea') == 0) {
$('#profareas').attr('style', 'border-color: #f55 !important')
false_form = true
} else {
false_form = false
}
if (false_form == 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;
}
let data = {
id_user: $('#tho_form').attr('data-id_user'),
id_clinic: $('#tho_form').attr('data-id_clinic'),
id_profarea: $('#tho_form').attr('data-id_profarea'),
login: $('#login').val(),
clinic: $('#clinic').val(),
password: makePassword(8)
}
$.ajax({
type: "POST",
data: JSON.stringify(data),
async: !1,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
url: '/register_user_clinic',
success: (data) => {
if (data['clinic_uniqe']) {
$('#success').html(data['message']);
$('#success').slideDown(500);
$('#success').delay(2000).slideUp();
$('#final_email').text($('#final_email').text() + $('#email').val());
$('#tho_form').hide();
$('#final_form').show();
} else {
var smaul = $('<p class="col-12 text-danger">' + data['message'] + '<p>').appendTo($('#clinic_row'));
smaul.slideDown(500);
}
}
})
} else {
$('#exception2').html('Не все поля заполнены');
$('#exception2').slideDown(500);
$('#exception2').delay(2000).slideUp();
}
})
})