<!DOCTYPE html>
<html xml:lang="ru" lang="ru">
<head>
<title>
Профессиональное оборудование для медицинских учреждений - Армед </title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="yandex-verification" content="d1101867d7b980cb" />
<link rel="icon" href="/favicon.svg" type=" image/svg+xml">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="robots" content="index, follow" />
<meta name="description" content="Сертифицированное оборудование высочайшего качества для лабораторий, клиник, стоматологий и прочих частных и государственных медицинских учреждений" />
<script type="text/javascript" data-skip-moving="true">(function(w, d, n) {var cl = "bx-core";var ht = d.documentElement;var htc = ht ? ht.className : undefined;if (htc === undefined || htc.indexOf(cl) !== -1){return;}var ua = n.userAgent;if (/(iPad;)|(iPhone;)/i.test(ua)){cl += " bx-ios";}else if (/Windows/i.test(ua)){cl += ' bx-win';}else if (/Macintosh/i.test(ua)){cl += " bx-mac";}else if (/Linux/i.test(ua) && !/Android/i.test(ua)){cl += " bx-linux";}else if (/Android/i.test(ua)){cl += " bx-android";}cl += (/(ipad|iphone|android|mobile|touch)/i.test(ua) ? " bx-touch" : " bx-no-touch");cl += w.devicePixelRatio && w.devicePixelRatio >= 2? " bx-retina": " bx-no-retina";var ieVersion = -1;if (/AppleWebKit/.test(ua)){cl += " bx-chrome";}else if (/Opera/.test(ua)){cl += " bx-opera";}else if (/Firefox/.test(ua)){cl += " bx-firefox";}ht.className = htc ? htc + " " + cl : cl;})(window, document, navigator);</script>
<link href="/bitrix/cache/css/s1/eshop_bootstrap_v4/template_dd0c1090e39cfb6a63315dd5d123fa2e/template_dd0c1090e39cfb6a63315dd5d123fa2e_v1.css?1713784576527281" type="text/css" data-template-style="true" rel="stylesheet" />
<link href="https://cdn.jsdelivr.net/npm/suggestions-jquery@21.6.0/dist/css/suggestions.min.css" rel="stylesheet" />
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,500,700|Roboto+Condensed:ital,wght@1,100..900|Rubik:300,400,500,700,800&subset=cyrillic"rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"rel="stylesheet">
<meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=device-width">
</head>
<body>
<div id="product_card_modal_vue"></div>
<template id="product_card_modal_vue_template">
<section class="auth_modal">
<div class="overlay">
<div class="modal modal_variation" :class="modal_name">
<div class="modal__close-mobile"><span @click.prevent="closeCurrentModal"></span></div>
<div class="modal__header">
<h3 class="modal__title" v-html="product_data.parent_info.PROPS.TITLE_FOR_SITE_BASE"></h3>
<div class="modal__content-desc" v-if="!only_mp">Выберите варианты товара</div>
<div class="modal__content-desc" v-else>Товар доступен только на маркетплейсах</div>
<a class="modal__close" href="#" @click.prevent="closeCurrentModal">
<svg class="modal__close-img">
<use xlink:href="/images/sprite.svg#modalclose"></use>
</svg>
</a>
</div>
<form class="modal__content" action="" v-if="product_data.variations.DATA">
<div class="modal__row">
<div class="modal__product">
<div class="modal__product-img mp">
<div class="product__labels" v-if="only_mp">
<svg class="dealers__table-info"><use xlink:href="/images/sprite.svg#info"></use></svg>
</div>
<img class="modal__product-pic" style="pointerEvents: none;" :src="photo_for_show" @error="onImageSrcBroken">
</div>
</div>
<div class="buy-card__form">
<div class="product__variation">
<div class="product__variation-row" v-for="(parent_prop, k2) in product_data.variations.PROPS" :key="k2">
<div class="product__variation-subtitle">
<span>{{ parent_prop.NAME }}</span>
</div>
<ul class="product__variation-list" >
<li class="product__variation-item" v-for="(child_prop, k) in parent_prop.VALUE" :key="k">
<label class="variation-label">
<input type="radio" class="variation-input" :disabled="checkDisabledProps(child_prop)" @click="onSelectProp(parent_prop, child_prop)" :name="child_prop.CODE">
<div class="variation-text variation-text_big" v-if="parent_prop.ID != 4742">{{ child_prop.VALUE }}</div>
<div class="variation-image" v-if="parent_prop.ID == 4742 && !~child_prop.VALUE_XML_ID.indexOf(',')">
<div class="variation-image__left"
:style="{'background-color': '#' + child_prop.VALUE_XML_ID}">
</div>
<div class="variation-image__right"
:style="{'background-color': '#' + child_prop.VALUE_XML_ID}">
</div>
</div>
<div class="variation-image" v-if="parent_prop.ID == 4742 && ~child_prop.VALUE_XML_ID.indexOf(',')">
<div class="variation-image__left"
:style="{'background-color': '#' + child_prop.VALUE_XML_ID.split(',')[0]}">
</div>
<div class="variation-image__right"
:style="{'background-color': '#' + child_prop.VALUE_XML_ID.split(',')[1]}">
</div>
</div>
<div class="tooltip-lite" v-if="parent_prop.ID == 4742">
{{ child_prop.VALUE }}
<span></span>
</div>
</label>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="product__buttons" style="justify-content: center;" v-if="!only_mp">
<div class="product-card__price" v-if="quantity > 0">
<span>{{ priceSet(product_data.price.price * quantity) }}</span>
<del v-if="product_data.price.pricePrev > product_data.price.price">{{ priceSet(product_data.price.pricePrev * quantity) }}</del>
</div>
<div class="product-card__price" v-else>
<span>{{ priceSet(product_data.price.price) }}</span>
<del v-if="product_data.price.pricePrev > product_data.price.price">{{ priceSet(product_data.price.pricePrev) }}</del>
</div>
<a class="modal__button button button_raised_accent product__button" disabled v-if="selectedVariationID == 0">
<div class="button__text">Выберите вариацию</div>
</a>
<div :id="'product__buttons_vue_' + selectedVariationID" v-else>
</div>
</div>
<div class="marketplace__list" style="justify-content: center;" v-else>
<a href="#" target="_blank" class="marketplace__link marketplace__link_ozon">
<img src="/images/product/market/ozon.jpg" alt="" class="marketplace__img"></a>
<a href="#" target="_blank" class="marketplace__link marketplace__link_sber">
<img src="/images/product/market/sber-i.jpg" alt="" class="marketplace__icon">
<img src="/images/product/market/sber.jpg" alt="" class="marketplace__img"></a>
<a href="#" target="_blank" class="marketplace__link marketplace__link_wild">
<img src="/images/product/market/wild-i.jpg" alt="" class="marketplace__icon">
<img src="/images/product/market/wild.jpg" alt="" class="marketplace__img"></a>
<a href="#" target="_blank" class="marketplace__link marketplace__link_yandex">
<img src="/images/product/market/yandex-i.jpg" alt="" class="marketplace__icon">
<img src="/images/product/market/yandex.jpg" alt="" class="marketplace__img"></a>
</div>
</form>
<div class="modal__content" v-else>
<img src="/images/modal/preloader.gif" alt="">
</div>
</div>
</div>
</section>
</template>
<div class="workarea">
<div id="app" class="wrapper">
<div id="auth_vue"></div>
<template id="auth_vue_template">
<section class="auth_modal">
<div class="overlay">
<div class="modal active js-modal-auth" :class="isRegistration ? 'modal_auth-registration' : (loginByPhone) ? 'modal_auth-login-phone' : 'modal_auth-login-email'" v-if="!isModalSucess">
<div class="modal__close-mobile"><span onclick="modalClose('.js-modal-auth'); return false;"></span></div>
<div class="modal__header">
<h3 class="modal__title" v-if="!loginForgotPassword">{{ isRegistration ? 'Стань нашим партнером!' : 'Авторизация' }}</h3>
<h3 class="modal__title" v-else>Забыли пароль?</h3>
<a class="modal__close" href="#" onclick="modalClose('.js-modal-auth'); return false;">
<svg class="modal__close-img">
<use xlink:href="/images/sprite.svg#clear"></use>
</svg>
</a>
</div>
<div class="modal__content">
<div class="login__tabs" v-if="!isRegistration && !loginForgotPassword">
<div class="login__tabs-controls" v-show="authByPhoneStep != 2">
<div class="login__tabs-controls-item" :class="{active : loginByPhone}" @click.prevent="loginByPhone = true">
<svg class="login__tabs-controls-icon">
<use xlink:href="/images/sprite.svg#smartphone"></use>
</svg>
<div class="login__tabs-controls-text">Телефон</div>
</div>
<div class="login__tabs-controls-item" :class="{active : !loginByPhone}" @click.prevent="loginByPhone = !loginByPhone">
<svg class="login__tabs-controls-icon">
<use xlink:href="/images/sprite.svg#email"></use>
</svg>
<div class="login__tabs-controls-text">Email</div>
</div>
</div>
<div class="modal__desc" v-show="authByPhoneStep == 2 && !isRegistration">Введите код подтверждения из СМС сообщения,<br/> отправленного на номер {{ formatphone(loginData.phone)}}</div>
<div class="login__tabs-content">
<div class="login__tabs-content-item" :class="{active : loginByPhone}" v-show="authByPhoneStep != 2">
<div class="login__phone">
<div class="form-group">
<input type="tel" v-model="loginData.phone" class="form-input" :disabled="authByPhoneStep == 2" :class="{'error': loginDataErrors.phone && loginDataErrors.phone.length > 0}" placeholder="+7 (___) ___-__-__" name="phone_m" @blur="validateInput('phone', $event)" @keyup="checkMax('phone', $event)">
<span class="help-block" v-show="loginDataErrors.phone && loginDataErrors.phone.length">
{{loginDataErrors.phone}}
</span>
</div>
</div>
<div class="login__form-buttons">
<a class="button button_raised_accent" href="#" @click.prevent="authByPhone" v-show="authByPhoneStep == 1">
Прислать смс
</a>
<!-- <a href="#" class="login__form-link link" @click.prevent="isRegistration = true">Зарегистрироваться</a> -->
<a href="#" class="cart__button button button_transparent" @click.prevent="isRegistration = true">
<div class="button__text">Зарегистрироваться</div>
</a>
</div>
</div>
<div class="login__tabs-content-item" :class="{active : loginByPhone}" v-show="authByPhoneStep == 2">
<div class="login__phone">
<div class="form-group sms codev form__pincode">
<input type="tel" class="pin-input" name="pincode-4" @keyup="onlyNumbers" maxlength="4" pattern="[\d]*" v-model="sms_code" autocomplete="off" :class="{'error': loginDataErrors.phone && loginDataErrors.phone.length > 0}">
<span class="help-block" v-show="loginDataErrors.phone && loginDataErrors.phone.length">
{{loginDataErrors.phone}}
</span>
</div>
</div>
<div class="login__form-buttons">
<a class="button button_raised_accent" href="#" @click.prevent="authByPhone">
Авторизоваться
</a>
<a class="button button_raised_secondary" href="#" @click.prevent="resetPhone">
Изменить номер
</a>
</div>
</div>
<div class="login__tabs-content-item" :class="{active : !loginByPhone}">
<div class="login__inputs">
<div class="form-group">
<input type="email" v-model="loginData.email" class="form-input" :class="{'error': loginDataErrors.email && loginDataErrors.email.length > 0}" placeholder="E-Mail" @blur="validateInput('email', $event)">
<span class="help-block" v-show="loginDataErrors.email && loginDataErrors.email.length">
{{loginDataErrors.email}}
</span>
</div>
<div class="form-group">
<input type="password" v-model="loginData.password" @blur="validateInput('password', $event)" class="form-input" :class="{'error': loginDataErrors.password && loginDataErrors.password.length > 0}" placeholder="Пароль">
<span class="help-block" v-show="loginDataErrors.password && loginDataErrors.password.length">
{{loginDataErrors.password}}
</span>
</div>
</div>
<div class="login__form-buttons">
<button class="button button_raised_accent" @click.prevent="loginAuth" data-method="auth">Войти</button>
<a href="#" class="cart__button button button_transparent" @click.prevent="isRegistration = true">
<div class="button__text">Зарегистрироваться</div>
</a>
<!-- <a href="#" class="login__form-link link" @click.prevent="isRegistration = true">Зарегистрироваться</a> -->
<a href="#" class="login__form-link link" @click.prevent="loginForgotPassword = true">Забыли пароль?</a>
</div>
</div>
</div>
</div>
<div class="login__form" v-if="isRegistration" style="padding: unset; width: unset; height: unset;">
<h3 class="login__form-text" style="font-family: 'Roboto'; font-style: normal; font-weight: 400; width: 260px; font-size: 14px; line-height: 120%;">
Узнать о преимуществах регистрации вы можете <span>
<a class="link login__form-link" style="text-decoration-color: #ba4046;" href="/personal/login/">здесь</a>
</span>
</h3>
<div class="login__inputs">
<div class="form-group">
<input type="number" class="form-input" placeholder="ИНН юридическго лица" :disabled="registrationStep == 2" v-model="loginData.inn" @blur="validateInput('inn', $event)" :class="{'error': loginDataErrors.inn && loginDataErrors.inn.length > 0, 'valid': loginData.inn && !loginDataErrors.inn}">
<span class="help-block" v-show="innData.name && !loginDataErrors.inn">
{{innData.name}}
</span>
<span class="help-block" v-show="loginDataErrors.inn && loginDataErrors.inn.length">
{{loginDataErrors.inn}}
</span>
</div>
<div class="form-group">
<input type="email" v-model="loginData.regEmail" @blur="validateInput('regEmail', $event)" class="form-input" :disabled="registrationStep == 2 && !loginDataErrors.regEmail" :class="{'error': loginDataErrors.regEmail && loginDataErrors.regEmail.length > 0}" placeholder="E-Mail">
<span class="help-block" v-show="loginDataErrors.regEmail && loginDataErrors.regEmail.length">
{{loginDataErrors.regEmail}}
</span>
</div>
<div class="login__phone">
<div class="form-group">
<input type="tel" v-model="loginData.regPhone" @blur="validateInput('regPhone', $event)" :class="{'error': loginDataErrors.regPhone && loginDataErrors.regPhone.length > 0}" :disabled="registrationStep == 2 && !loginDataErrors.regPhone" class="form-input" name="phone_m" placeholder="+7 (___) ___-__-__">
<span class="help-block" v-show="loginDataErrors.regPhone && loginDataErrors.regPhone.length">
{{loginDataErrors.regPhone}}
</span>
</div>
<div class="form-group sms" v-show="registrationStep == 2">
<input type="number" v-model="loginData.registrationCode" @blur="validateInput('registrationCode', $event)" :class="{'error': loginDataErrors.registrationCode && loginDataErrors.registrationCode.length > 0}" class="form-input" placeholder="0000" autocomplete="one-time-code">
<span class="help-block" style="padding-left: unset;" v-show="loginDataErrors.registrationCode && loginDataErrors.registrationCode.length">
{{loginDataErrors.registrationCode}}
</span>
</div>
</div>
</div>
<div class="login__form-buttons">
<label class="checkbox js-privacy-policy">
<input type="checkbox" class="checkbox__input" @click="policy = !policy">
<div class="checkbox__img">
<svg class="checkbox__img-pic">
<use xlink:href="/images/sprite.svg#check_box_outline_blank"></use>
</svg>
<svg class="checkbox__img-pic">
<use xlink:href="/images/sprite.svg#check_box"></use>
</svg>
</div>
<div class="checkbox__text">
Я прочитал <span @click.prevent="openPolicy">Политику безопасности</span> и согласен с условиями безопасности и обработки данных
</div>
</label>
<button class="generate__button button button_raised_accent" type="submit" @click.prevent="registration" v-show="!isCodeSendedNow">
<div class="button__text">Зарегистрироваться</div>
</button>
<button class="generate__button button button_outlined_white progress-btn" type="button" v-show="isCodeSendedNow">
<svg viewBox="0 0 240 38" preserveAspectRatio="none" style="width: 311px;">
<path d="M120,2 h114 a4,4 0 0 1 4,4 v26 a4,4 0 0 1 -4,4 h-228 a4,4 0 0 1 -4,-4 v-26 a4,4 0 0 1 4,-4 h114z" fill="none"></path>
</svg>
<div class="button__text">Подождите...</div>
</button>
<a href="#" class="login__form-link link" @click.prevent="isRegistration = false">Вход на сайт</a>
</div>
</div>
<div class="login__form" v-if="loginForgotPassword" style="padding: unset; width: unset; height: unset;">
<div class="login__form-text">Если Вы по какой-то причине забыли пароль, не спешите
огорчаться! Введите свой email и мы поможем Вам в восстановлении доступа.
</div>
<div class="login__inputs">
<div class="form-group">
<input type="email" v-model="loginData.forgotPassword" @blur="validateInput('forgotPassword', $event)" class="form-input" :class="{'error': loginDataErrors.forgotPassword && loginDataErrors.forgotPassword.length > 0}" placeholder="Введите Ваш e-mail">
<span class="help-block" v-show="loginDataErrors.forgotPassword && loginDataErrors.forgotPassword.length">
{{loginDataErrors.forgotPassword}}
</span>
</div>
</div>
<div class="login__form-buttons">
<button class="button button_raised_accent" @click.prevent="forgotPassword">
Выслать пароль
</button>
<a href="#" class="login__form-link link" @click.prevent="loginForgotPassword = false">Назад</a>
</div>
</div>
</div>
</div>
<div class="modal modal__success active js-modal-auth" v-if="isModalSucess">
<div class="modal__close-mobile"><span @click.prevent="modalCloseNew('js-modal-auth')"></span></div>
<div class="modal__header">
<a class="modal__close" href="#" @click.prevent="modalCloseNew('js-modal-auth')">
<svg class="modal__close-img">
<use xlink:href="/images/sprite.svg#clear"></use>
</svg>
</a>
</div>
<div class="modal__content">
<img class="modal__content-pict" src="/images/modal/success.png" />
<div class="modal__content-details">
<div class="modal__content-title">
{{modalSuccessData.title}}
</div>
<div class="modal__content-desc">
{{modalSuccessData.desc}}
</div>
</div>
</div>
</div>
</div>
</section>
</template>
<div id="disc_label"></div>
<template id="disc_label_template">
<section class="discount_label">
<div class="overlay">
<div class="modal js-modal-discountLabel">
<div class="modal__close-mobile"><span onclick="modalClose('.js-modal-discountLabel'); return false;"></span></div>
<div class="modal__header">
<div class="modal__header-bg">
<img src="/images/modal/disc_bg_3.png"/>
</div>
<a class="modal__close" href="#" onclick="modalClose('.js-modal-discountLabel'); return false;">
<svg class="modal__close-img">
<use xlink:href="/images/sprite.svg#clear"></use>
</svg>
</a>
</div>
<div class="modal__content">
<div class="modal__content-details">
<div class="modal__content-title">
Вы новый покупатель?
</div>
<div class="modal__content-desc">
Мы рады вам и дарим скидку 3% на все ваши покупки в течение месяца!<br> Оформляйте заказы в личном кабинете на сайте Армед. *
</div>
</div>
<div class="login__form" style="padding: 30px; width: unset; height: unset;">
<div class="login__inputs">
<div class="form-group">
<input
type="number"
class="form-input"
placeholder="ИНН юридическго лица"
:disabled="registrationStep == 2"
v-model="loginData.inn"
@blur="validateInput('inn', $event)"
:class="{'error': loginDataErrors.inn && loginDataErrors.inn.length > 0, 'valid': loginData.inn && !loginDataErrors.inn}"
>
<span class="help-block" v-show="innData.name && !loginDataErrors.inn">
{{innData.name}}
</span>
<span class="help-block" v-show="loginDataErrors.inn && loginDataErrors.inn.length">
{{loginDataErrors.inn}}
</span>
</div>
<div class="form-group">
<input
type="email"
v-model="loginData.regEmail"
@blur="validateInput('regEmail', $event)"
class="form-input"
:disabled="registrationStep == 2 && !loginDataErrors.regEmail"
:class="{'error': loginDataErrors.regEmail && loginDataErrors.regEmail.length > 0}"
placeholder="E-Mail"
>
<span class="help-block" v-show="loginDataErrors.regEmail && loginDataErrors.regEmail.length">
{{loginDataErrors.regEmail}}
</span>
</div>
<div class="login__phone" >
<div class="form-group">
<input
type="tel"
v-model="loginData.regPhone"
@blur="validateInput('regPhone', $event)"
:class="{'error': loginDataErrors.regPhone && loginDataErrors.regPhone.length > 0}"
:disabled="registrationStep == 2 && !loginDataErrors.regPhone"
class="form-input"
name="phone_m"
placeholder="+7 (___) ___-__-__"
>
<span class="help-block" v-show="loginDataErrors.regPhone && loginDataErrors.regPhone.length">
{{loginDataErrors.regPhone}}
</span>
</div>
<div class="form-group sms" v-show="registrationStep == 2">
<input
type="number"
v-model="loginData.registrationCode"
@blur="validateInput('registrationCode', $event)"
:class="{'error': loginDataErrors.registrationCode && loginDataErrors.registrationCode.length > 0}"
class="form-input"
placeholder="0000"
autocomplete="one-time-code"
>
<span class="help-block" style="padding-left: unset;" v-show="loginDataErrors.registrationCode && loginDataErrors.registrationCode.length">
{{loginDataErrors.registrationCode}}
</span>
</div>
</div>
</div>
<div class="login__form-buttons" style="flex-direction: column;">
<label class="checkbox js-privacy-policy">
<input type="checkbox" class="checkbox__input" @click="policy = !policy">
<div class="checkbox__img">
<svg class="checkbox__img-pic">
<use xlink:href="/images/sprite.svg#check_box_outline_blank"></use>
</svg>
<svg class="checkbox__img-pic">
<use xlink:href="/images/sprite.svg#check_box"></use>
</svg>
</div>
<div class="checkbox__text">
Я прочитал <span @click.prevent="openPolicy">Политику безопасности</span> и согласен с условиями безопасности и обработки данных
</div>
</label>
<button class="generate__button button button_raised_accent" style="width: 309px;" type="submit" @click.prevent="registration" v-show="!isCodeSendedNow">
<div class="button__text">Зарегистрироваться</div>
</button>
<button class="generate__button button button_outlined_white progress-btn" style="width: 309px;" type="button" v-show="isCodeSendedNow">
<svg viewBox="0 0 240 38" preserveAspectRatio="none" style="width: 311px;">
<path d="M120,2 h114 a4,4 0 0 1 4,4 v26 a4,4 0 0 1 -4,4 h-228 a4,4 0 0 1 -4,-4 v-26 a4,4 0 0 1 4,-4 h114z" fill="none"></path>
</svg>
<div class="button__text">Подождите...</div>
</button>
</div>
</div>
<div class="modal__content-tags">
<span>* Только для юрлиц.</span>
</div>
</div>
</div>
</div>
</section>
</template>
<header class="header ">
<div class="container container_header">
<div class="header__row header__row_top">
<div class="header__contacts">
<a href="tel:84956362825" class="header__contacts-number">
8 (495) 636-28-25 </a>
<div class="header__contacts-text">только для юр.лиц</div>
</div>
<a class="header__logo" href="/">
<img src="/images/restyle/common/logo.svg"
alt="ARMED" class="header__logo-img">
</a>
<nav class="header__navigation">
<ul class="header__navigation-list">
<li class="header__navigation-item">
<a class="header__navigation-link" href="/delivery/">Доставка</a>
</li>
<li class="header__navigation-item">
<a class="header__navigation-link" href="/service/">Сервис</a>
</li>
<li class="header__navigation-item">
<a class="header__navigation-link" href="/contacts/">Контакты</a>
</li>
</ul>
</nav>
</div>
<div class="header__row header__row_bottom">
<div class="header__catalog js-catalog">
<svg class="header__catalog-icon">
<use xlink:href="/images/sprite.svg#menu"></use>
</svg>
<div class="header__catalog-text">Каталог продукции</div>
<div id="lazy_load_catalog">
<ul class="catalog-popup" style="width:265px;" >
<li class="catalog-popup__item"><a href="/sales/" class="catalog-popup__link catalog-popup__link_accent">Скидки</a></li><li class="catalog-popup__item"><a href="/novelty/" class="catalog-popup__link catalog-popup__link_accent">Новинки</a></li> <li class="catalog-popup__item">
<a class="catalog-popup__link" href="/category/medicinskoe-oborudovanie/">Медицинское оборудование</a>
<div class="subcatalog-popup">
<div class="subcatalog-popup__title">Медицинское оборудование</div>
<div class="subcatalog-popup__row">
<ul class="subcatalog-popup__list"
>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/kislorodnoe-oborudovanie/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/4c6/z7v3alb8tnz2hbexmapar11ewa76mq5o/%D0%9A%D0%BE%D0%BD%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B%20%D0%BA%D0%B8%D1%81%D0%BB%D0%BE%D1%80%D0%BE%D0%B4%D0%B0.png"
/>
</div>
<div class="catalog-card_text">Кислородное оборудование</div>
</a>
<ul class="subcatalog-popup__list__subitem" >
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/koncentratory-kisloroda/">
<div class="catalog-card_text">Концентраторы кислорода</div>
</a>
</li>
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/koktejlery/">
<div class="catalog-card_text">Коктейлеры</div>
</a>
</li>
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/soputstvuyushhie-tovary/">
<div class="catalog-card_text">Сопутствующие товары для концентраторов кислорода</div>
</a>
</li>
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/soputstvuyushchie_tovary_dlya_prigotovleniya_kislorodnykh_kokteyley/">
<div class="catalog-card_text">Сопутствующие товары для приготовления кислородных коктейлей</div>
</a>
</li>
</ul>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/recirkulyatory-obluchateli/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/c00/fe8fvubvd1tpp5t98bxwluehvlcnjmvg/Mask-Group-_4_.png"
/>
</div>
<div class="catalog-card_text">Рециркуляторы-облучатели</div>
</a>
<ul class="subcatalog-popup__list__subitem" >
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/podstavki-dlya-recirkulyatorov/">
<div class="catalog-card_text">Подставки для рециркуляторов</div>
</a>
</li>
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/retsirkulyatory/">
<div class="catalog-card_text">Рециркуляторы</div>
</a>
</li>
</ul>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/ingalyator_nebulayzer/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/ef6/j4eszbm5ggklt5uevqy223kbuh6s51td/Mask%20Group%20%282%29.png"
/>
</div>
<div class="catalog-card_text">Ингалятор-небулайзер</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/pulsoksimetry/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/a1d/yji7iz052nxyjq2xvqnuvzbt5ze03cs6/Pulsoksimetry.png"
/>
</div>
<div class="catalog-card_text">Пульсоксиметры</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/uvlazhniteli-kisloroda/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/f57/5yoxefgkg2dtx72g9780uzdd67foqnej/%D0%A3%D0%B2%D0%BB%D0%B0%D0%B6%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D0%B8%20%D0%BA%D0%B8%D1%81%D0%BB%D0%BE%D1%80%D0%BE%D0%B4%D0%B0.png"
/>
</div>
<div class="catalog-card_text">Увлажнители кислорода</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/lampy-ultrafioletovye/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/f58/z7pyfaci5cb2u74mfa9utmx8yqljti7p/%D0%9B%D0%B0%D0%BC%D0%BF%D1%8B%20%D1%83%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%84%D0%B8%D0%BE%D0%BB%D0%B5%D1%82%D0%BE%D0%B2%D1%8B%D0%B5.png"
/>
</div>
<div class="catalog-card_text">Лампы ультрафиолетовые бактерицидные</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/otsasyvateli-xirurgicheskie/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/332/9wx80z6l2mt7hdojzi2b8haob6zpftae/%D0%9E%D1%82%D1%81%D0%B0%D1%81%D1%8B%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B8.png"
/>
</div>
<div class="catalog-card_text">Отсасыватели хирургические медицинские</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/dozatory-shpricevye-i-nasosy-infuzionnye/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/db1/4e9tvaj158v03gz4pe58l7b1fcvsm1gi/Dozatory_shpritsevye_i_nasosy_infuzionnye.png"
/>
</div>
<div class="catalog-card_text">Дозаторы шприцевые и насосы инфузионные</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/monitory/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/086/c66j41b1qa9trcahtci7t3ogpa8wo3ag/Monitory_prikrovatnye.png"
/>
</div>
<div class="catalog-card_text">Мониторы прикроватные</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/negatoskopy/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/19f/po5nzdcxkbahjnesmkobvqnsogsjgg1c/%D0%9D%D0%B5%D0%B3%D0%B0%D1%82%D0%BE%D1%81%D0%BA%D0%BE%D0%BF%D1%8B.png"
/>
</div>
<div class="catalog-card_text">Негатоскопы</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/svetilniki-xirurgicheskie/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/749/ap6hnpur6g1moskru81lxmdwzk9apyyh/%D0%A1%D0%B2%D0%B5%D1%82%D0%B8%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%D0%B8%20%D1%85%D0%B8%D1%80%D1%83%D1%80%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5.png"
/>
</div>
<div class="catalog-card_text">Светильники хирургические</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/operacionnye-stoly/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/046/jhcmslrp2y757282h6zv3hijj3w4lby3/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5%20%D1%81%D1%82%D0%BE%D0%BB%D1%8B.png"
/>
</div>
<div class="catalog-card_text">Операционные столы</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/oftalmologicheskoe-oborudovanie/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/c7e/guszim740egynn43lbm22nos659yp640/%D0%9E%D1%84%D1%82%D0%B0%D0%BB%D1%8C%D0%BC%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5%20%D0%BE%D0%B1%D0%BE%D1%80%D1%83%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5.png"
/>
</div>
<div class="catalog-card_text">Офтальмологическое оборудование</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/termometry/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/357/30hnapanm75dstcg41xea350yume8ad6/%D0%A2%D0%B5%D1%80%D0%BC%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D1%8B.png"
/>
</div>
<div class="catalog-card_text">Термометры</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/apparaty_dlya_normalizatsii_sna/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/1a6/ai7ilj1xmy2l018e2m6ctxwuhs2gounu/Mask-Group-_3_.png"
/>
</div>
<div class="catalog-card_text">Аппараты для нормализации сна</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/dozimetr_radiatsii/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/4fb/mml2kfcgif2dr7bsmrdb4ylh4yfkh4vz/Dozimetr_radiatsii.png"
/>
</div>
<div class="catalog-card_text">Дозиметр радиации</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/parovye_sterilizatory/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/1f0/wzt3l0rqq04itjnv3rsq9e026mhj4ffw/Mask-Group-_1_.png"
/>
</div>
<div class="catalog-card_text">Паровые стерилизаторы</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/tonometry/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/ea0/1u3txq1ivj5gp5pjs8peafntkb4tbhr9/Mask_Group-_1_.png"
/>
</div>
<div class="catalog-card_text">Тонометры</div>
</a>
</li>
</ul>
</div>
</div>
</li>
<li class="catalog-popup__item">
<a class="catalog-popup__link" href="/category/laboratornoe-oborudovanie/">Лабораторное оборудование</a>
<div class="subcatalog-popup">
<div class="subcatalog-popup__title">Лабораторное оборудование</div>
<div class="subcatalog-popup__row">
<ul class="subcatalog-popup__list"
style="width:320px"
>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/akvadistillyatory/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/427/qytp8x2xblmxc4fwm93toa0cz4cd4p1g/1.png"
/>
</div>
<div class="catalog-card_text">Аквадистилляторы</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/tsentrifugi/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/db8/h2non8x7f4ku0hwjse1w9r8m2j18vzhq/TSentrifugi.png"
/>
</div>
<div class="catalog-card_text">Центрифуги</div>
</a>
</li>
</ul>
</div>
</div>
</li>
<li class="catalog-popup__item">
<a class="catalog-popup__link" href="/category/medicinskaya-mebel/">Медицинская мебель</a>
<div class="subcatalog-popup">
<div class="subcatalog-popup__title">Медицинская мебель</div>
<div class="subcatalog-popup__row">
<ul class="subcatalog-popup__list"
style="width:320px"
>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/krovati-medicinskie-funkcionalnye/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/470/dsk2e8jnj0jhxbpndecy9154nr8qpgzx/1.png"
/>
</div>
<div class="catalog-card_text">Кровати механические </div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/krovati-medicinskie-funkcionalnye-elektricheskie/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/52b/0n4euqyowcfj1batxul0zfpkeokepm9k/2.png"
/>
</div>
<div class="catalog-card_text">Кровати электрические</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/matrasy-dlya-funkcionalnyx-krovatej/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/52b/nkic7ee15kowmrs9duf435td07nqtieg/3.png"
/>
</div>
<div class="catalog-card_text">Матрасы для функциональных кроватей</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/soputstvuyushhie-tovary-medicinskaya-mebel/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/205/2szolcds7cv64xm3tb8as6exne9m37u8/4.png"
/>
</div>
<div class="catalog-card_text">Сопутствующие товары для кроватей</div>
</a>
</li>
</ul>
</div>
</div>
</li>
<li class="catalog-popup__item">
<a class="catalog-popup__link" href="/category/texnicheskie-sredstva-reabilitacii/">Технические средства реабилитации</a>
<div class="subcatalog-popup">
<div class="subcatalog-popup__title">Технические средства реабилитации</div>
<div class="subcatalog-popup__row">
<ul class="subcatalog-popup__list"
>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/kresla-kolyaski-s-sanitarnym-osnashheniem/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/dc7/mladbomvg1fxsgoe4qx4a60pbzqsksn7/Kresla_s_sanitarnym_osnashcheniem.png"
/>
</div>
<div class="catalog-card_text">Кресла с санитарным оснащением</div>
</a>
<ul class="subcatalog-popup__list__subitem" >
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/kresla_stulya_s_sanitarnym_osnashcheniem_s_kolesami/">
<div class="catalog-card_text">Кресла с санитарным оснащением (с колесами)</div>
</a>
</li>
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/kresla_stulya_s_sanitarnym_osnashcheniem_bez_koles/">
<div class="catalog-card_text">Кресла с санитарным оснащением (без колес)</div>
</a>
</li>
</ul>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/xodunki/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/594/vufb401fpzcr7mmv6srlppo57wzfopy3/Group%20959x2.png"
/>
</div>
<div class="catalog-card_text">Ходунки</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/kresla-invalidnye-detskie/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/19b/spqgouowtecw65mv2tnexbpva2ma3b7f/8.png"
/>
</div>
<div class="catalog-card_text">Товары для детей с ДЦП</div>
</a>
<ul class="subcatalog-popup__list__subitem" >
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/kresla_kolyaski_dlya_detey_s_dtsp/">
<div class="catalog-card_text">Кресла-коляски для детей с дцп</div>
</a>
</li>
</ul>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/matracy-i-podushki-protivoprolezhnevye/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/f34/cep5tj9zggqfo2gjw3zjyxfz0wt38o1u/2.png"
/>
</div>
<div class="catalog-card_text">Противопролежневые системы</div>
</a>
<ul class="subcatalog-popup__list__subitem" >
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/matracy-protivoproleznevye-aceistye-s-kompressorom/">
<div class="catalog-card_text">Матрацы противопролежневые ячеистые</div>
</a>
</li>
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/matracy-protivoproleznevye-trubcatye-s-kompressorom/">
<div class="catalog-card_text">Матрацы противопролежневые трубчатые</div>
</a>
</li>
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/protivoprolezhnevye_podushki/">
<div class="catalog-card_text">Противопролежневые подушки</div>
</a>
</li>
</ul>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/kresla-kolyaski-mexanicheskie/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/3a3/ocnyjerf5jakf9m4uwrt82zukplgnfy6/Kresla_kolyaski_mekhanicheskie.png"
/>
</div>
<div class="catalog-card_text">Кресла-коляски механические</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/kresla-invalidnye-elektricheskie/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/def/wieit6v7g7u2h9gj6qn6y5yzzqbk3n5m/Kresla_kolyaski_elektricheskie.png"
/>
</div>
<div class="catalog-card_text">Кресла-коляски электрические</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/trosti-i-kostili/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/634/yveino49eehaekx6qexbeqhgvtis5q4v/6.png"
/>
</div>
<div class="catalog-card_text">Трости</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/tovary_dlya_ukhoda_i_gigieny/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/821/orlsc9h16w13zfko30j8anyswivn59wz/10.png"
/>
</div>
<div class="catalog-card_text">Товары для ухода и гигиены</div>
</a>
<ul class="subcatalog-popup__list__subitem" >
<li class="subcatalog-popup__item__subitem">
<a class="catalog-card__subitem" href="/category/naduvnye_vanny/">
<div class="catalog-card_text">Надувные ванны</div>
</a>
</li>
</ul>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/aksessuary_dlya_kresel_kolyasok/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/197/1j4bpc57frx8szrfkw8b3r2q40e5umaw/9.png"
/>
</div>
<div class="catalog-card_text">Аксессуары для кресел-колясок</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/skutery_elektricheskie_chetyrekhkolesnye/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/8f0/fxck3kaxcgn46z9zjp0rkole240d0kxd/Skutery_elektricheskie_chetyrekhkolesnye.png"
/>
</div>
<div class="catalog-card_text">Скутеры электрические четырехколесные</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/kostyli/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/b21/55asbqi4kuirge8zjg7w0b25zsz86olu/Group%20959%20%281%29.png"
/>
</div>
<div class="catalog-card_text">Костыли</div>
</a>
</li>
</ul>
</div>
</div>
</li>
<li class="catalog-popup__item">
<a class="catalog-popup__link" href="/category/tovary-dlya-sporta-i-otdyxa/">Товары для спорта и отдыха</a>
<div class="subcatalog-popup">
<div class="subcatalog-popup__title">Товары для спорта и отдыха</div>
<div class="subcatalog-popup__row">
<ul class="subcatalog-popup__list"
style="width:320px"
>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/trenazhery/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/be7/v9lff8jyolyijmz8ras2d22o9f2ueh77/1.png"
/>
</div>
<div class="catalog-card_text">Велотренажеры для реабилитации</div>
</a>
</li>
</ul>
</div>
</div>
</li>
<li class="catalog-popup__item">
<a class="catalog-popup__link" href="/category/zapchasti/">Запчасти</a>
<div class="subcatalog-popup">
<div class="subcatalog-popup__title">Запчасти</div>
<div class="subcatalog-popup__row">
<ul class="subcatalog-popup__list"
style="width:320px"
>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/zapchasti_dlya_obluchateley_retsirkulyatorov_meditsinskikh/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/d8a/825hsbt4mshva4xjafml9e0z1091i6d9/1.png"
/>
</div>
<div class="catalog-card_text">Запчасти для облучателей-рециркуляторов медицинских</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/zapchasti_dlya_kislorodnogo_oborudovaniya/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/489/a68azk7w71khn9uezbt7v8kyxx265sbv/1.png"
/>
</div>
<div class="catalog-card_text">Запчасти для кислородного оборудования</div>
</a>
</li>
<li class="subcatalog-popup__item">
<a class="catalog-card" href="/category/zapchasti_dlya_otsasyvateley/">
<div class="catalog-card__img">
<img
class="catalog-card__pic"
src="/upload/iblock/210/ahogpjrmg1aw6214lp451in01ta41lpt/6.png"
/>
</div>
<div class="catalog-card_text">Запчасти для отсасывателей</div>
</a>
</li>
</ul>
</div>
</div>
</li>
</ul>
</div>
<br>
</div>
<a href="/" class="header__logo-minified">
<img src="/images/restyle/common/logo.svg"
class="header__logo-minified-img" alt="ARMED">
</a>
<form class="header__search search js-headersearch" action="">
<input class="search__input js-headersearch-input" type="search" name="headersearch"
autocomplete="off">
<div class="search__placeholder js-search-placeholder">
Что Вы ищете? Например Рециркулятор
<!-- <a href="/category/retsirkulyatory/">Рециркулятор</a>, <a href="/category/koncentratory-kisloroda/">Концентратор кислорода</a> -->
</div>
<svg class="search__icon">
<use xlink:href="/images/sprite.svg#search"></use>
</svg>
<svg class="search__icon-clear">
<use xlink:href="/images/sprite.svg#clear"></use>
</svg>
<ul class="search__helper" id="search__list_helper">
</ul>
</form>
<div class="header__profile">
<ul class="header__profile-list">
<li class="header__profile-item">
<a class="header__profile-link header__profile-link_auth js-profile-user" href="#"
onclick="modalOpen('.js-modal-auth'); return false;">
<svg class="header__profile-icon">
<use xlink:href="/images/sprite.svg#account_circle"></use>
</svg>
<div class="header__profile-text">Вход/Регистрация</div>
</a>
</li>
<li class="header__profile-item">
<a class="header__profile-link" href="/compare/">
<svg class="header__profile-icon">
<use xlink:href="/images/sprite.svg#outline-compare"></use>
</svg>
<div class="header__profile-counter" id="comparecount">0</div>
<div class="tooltip tooltip_bottom tooltip_compare">Сравнение</div>
</a>
</li>
<div id="basket_header_vue">
<li class="header__profile-item">
<a class="header__profile-link" href="/personal/">
<svg class="header__profile-icon">
<use xlink:href="/images/sprite.svg#outline-shopping_cart"></use>
</svg>
<div class="header__profile-counter">0</div>
<div class="tooltip tooltip_bottom tooltip_basket">Корзина</div>
</a>
</li>
</div>
<template id="basket_header_vue_template">
<div>
<li class="header__profile-item" v-if="userCart.basketData">
<a class="header__profile-link" href="/personal/">
<svg class="header__profile-icon">
<use xlink:href="/images/sprite.svg#outline-shopping_cart"></use>
</svg>
<div class="header__profile-counter" v-if="userCart.basketData.basketCount">{{ userCart.basketData.basketCount }}</div>
<div class="header__profile-counter" v-else>0</div>
<div class="tooltip tooltip_bottom tooltip_basket">Корзина</div>
</a>
<div class="header__popup header__popup_card" v-if="userCart.basketData.basketItems && userCart.basketData.basketItems.length > 0">
<div class="header__popup-list">
<div class="header__popup-card" v-for="item in userCart.basketData.basketItems" :key="item.ID">
<img :src="item.DETAIL_PICTURE" alt="" class="header__popup-card-img">
<div class="header__popup-card-content">
<div class="header__popup-card-title">
{{ item.NAME }}
</div>
<div class="header__popup-card-price">
<span>{{ item.TOTAL_PRICE }} ₽</span>
</div>
<svg class="header__popup-card-close" @click.prevent="deleteProductFromBasket(item.ID)">
<use xlink:href="/images/sprite.svg#clear"></use>
</svg>
</div>
</div>
</div>
<div class="header__popup__total">
<div class="header__popup__total-text">Итого</div>
<div class="header__popup__total-price">{{ userCart.basketData.basketPrice.toLocaleString('ru-RU') }} ₽</div>
</div>
</div>
</li>
<li class="header__profile-item" v-else>
<a class="header__profile-link" href="/personal/">
<svg class="header__profile-icon">
<use xlink:href="/images/sprite.svg#outline-shopping_cart"></use>
</svg>
<div class="header__profile-counter">0</div>
<div class="tooltip tooltip_bottom tooltip_basket">Корзина</div>
</a>
</li>
</div>
</template>
</ul>
</div>
</div>
<div class="message message_for_kp_nonauth" hidden>
<div class="message__content">
Покупка товара <b>на сайте</b> возможна только
для юридических лиц
</div>
<a href="/contacts#mp/" class="message__link link">Я физ. лицо</a>
<div class="message__box"></div>
</div>
</div>
<a class="discountLabel" href="#" onclick="modalOpen('.js-modal-discountLabel'); return false;">
<svg class="header__catalog-icon">
<use xlink:href="/images/sprite.svg#percent"></use>
</svg>
<span>Пссс, тут скидки</span>
</a>
</header>
<div class="wrapper-main">
<section class="statuscode">
<div class="container container_statuscode">
<div class="statuscode__left">
<div class="statuscode__img">
<img class="statuscode__img-pic" src="/images/new-armed/404/recirc.png">
</div>
</div>
<div class="statuscode__right">
<div class="statuscode__title">
<img class="statuscode__title-img" src="/images/new-armed/404/404.png">
</div>
<div class="statuscode__content">
<p>Возможно, запрашиваемая страница была удалена, перенесена или был указан неправильный адрес.</p>
<p>Пожалуйста, воспользуйтесь формой поиска, чтобы найти интересующую вас информацию. Или переходите на главную страницу – там много интересного.</p>
<ul>
<li>Вернуться на <a href="/">главную</a></li>
</ul>
</div>
</div>
</div>
</section>
</div>
</div><!--end row-->
<footer class="footer">
<div class="footer__top">
<div class="container">
<div class="footer__row">
<div class="footer__col"> <a href="/" class="footer__logo">
<img src="/images/restyle/common/logo.svg" alt="" class="footer__logo-img">
</a>
<div class="footer__copyright">Copyright 2004-2024 © Армед</div>
<div class="footer__copyright">ОБРАЩАЕМ ВАШЕ ВНИМАНИЕ, что данный интернет-сайт и материалы,<br> размещенные на нем, носят исключительно информационный характер и <br>ни при каких условиях не являются публичной офертой, определяемой<br> положениями статьи 437 Гражданского кодекса РФ.</div>
</div>
<div class="footer__col">
<ul class="footer__list">
<li class="footer__item">
<a href="/vacancy/" class="footer__link">Вакансии</a>
</li>
<li class="footer__item">
<a href="/news/" class="footer__link">Новости</a>
</li>
<li class="footer__item">
<a href="/payment-info/" class="footer__link">Информация об оплате</a>
</li>
<li class="footer__item">
<a href="/novelty/" class="footer__link">Новинки</a>
</li>
<li class="footer__item">
<a href="/legal-info/" class="footer__link">Правовая информация</a>
</li>
<li class="footer__item">
<a href="/edo/" class="footer__link">ЭДО</a>
</li>
</ul>
</div>
<div class="footer__col">
<ul class="footer__socials">
<li class="footer__socials-item"><a class="footer__socials-link" href="https://vk.com/armed_ru"
target="_blank" rel="nofollow noopener noreferrer">
<svg class="footer__socials-icon">
<use xlink:href="/images/sprite.svg#vk"></use>
</svg>
</a></li>
<li class="footer__socials-item"><a class="footer__socials-link" href="https://ok.ru/armed"
target="_blank" rel="nofollow noopener noreferrer">
<svg class="footer__socials-icon">
<use xlink:href="/images/sprite.svg#ok"></use>
</svg>
</a></li>
<li class="footer__socials-item"><a class="footer__socials-link"
href="https://www.youtube.com/channel/UCxAJGUeZlYF-u_79COMs6Rw"
target="_blank" rel="nofollow noopener noreferrer">
<svg class="footer__socials-icon">
<use xlink:href="/images/sprite.svg#yt"></use>
</svg>
</a></li>
<li class="footer__socials-item"><a class="footer__socials-link"
href="https://t.me/+SRW3s7FAyvQwMjcy"
target="_blank" rel="nofollow noopener noreferrer">
<svg class="footer__socials-icon">
<use xlink:href="/images/sprite.svg#tg"></use>
</svg>
</a></li>
</ul>
<div class="footer__contacts">
<a class="footer__contacts-number" href="tel:84956362825">8 (495) 636-28-25</a>
<a class="footer__contacts-number" href="mailto:sales@armed.ru">sales@armed.ru</a>
<div class="footer__contacts-text">только для юр.лиц</div>
</div>
</div>
</div>
</div>
</div>
<div class="footer__bottom">
<div class="container">
<div class="footer__alarm">ИМЕЮТСЯ ПРОТИВОПОКАЗАНИЯ, ПЕРЕД ИСПОЛЬЗОВАНИЕМ НЕОБХОДИМО ОЗНАКОМИТЬСЯ С
ИНСТРУКЦИЕЙ И ПРОКОНСУЛЬТИРОВАТЬСЯ С ВРАЧОМ
</div>
</div>
</div>
</footer>
</div><!--end .container.bx-content-section-->
</div><!--end .workarea-->
</div> <!-- //bx-wrapper -->
<div id="popup-kp_vue"></div>
<template id="popup-kp_vue_template">
<transition name="fade">
<div>
<div
class="popup-kp"
@click.prevent="openPopup"
v-show="userCart.basketData?.basketCount > 0"
>
<div class="popup-content">
<a
href="#"
class="popup-close"
@click.prevent="closePopup"
>
<svg>
<use xlink:href="/images/sprite.svg#clear"></use>
</svg>
</a>
<div class="popup-title">Ваше КП уже готово!</div>
<div class="popup-desc">Нажмите, чтобы скачать коммерческое предложение прямо сейчас</div>
<div class="popup-button button" @click.prevent="downloadKP">
<div class="button-text">Скачать</div>
</div>
</div>
</div>
<div class="overlay" id="stub__overlay_telegram">
<div class="modal modal_kp-feedback js-modal-stub">
<div class="modal__close-mobile"><span onclick="modalClose('.js-modal-stub'); return false;"></span></div>
<div class="modal__header">
<h3 class="modal__title">Оставьте контактные данные</h3>
<a class="modal__close" href="#" onclick="modalClose('.js-modal-stub'); return false;">
<svg class="modal__close-img">
<use xlink:href="/images/sprite.svg#clear"></use>
</svg>
</a>
</div>
<div class="modal__content">
<div class="modal__row">
<div class="modal__content">
<div class="modal__content-title">
<span>Никакого спама!</span><br>
Только один звонок - нам интересно Ваше мнение!
</div>
<div class="modal__content-inputs">
<div class="form-group modal__content-input">
<input
type="text"
class="form-input"
:class="{'error': formErrors.fio && formErrors.fio.length > 0}"
v-model="fio"
@blur="validateInput('fio', $event)"
placeholder="Фамилия Имя Отчество"
>
<span class="help-block" v-show="formErrors.fio && formErrors.fio.length">
{{formErrors.fio}}
</span>
</div>
<div class="form-group modal__content-input">
<input
type="tel"
name="phone"
class="form-input"
:class="{'error': formErrors.phone && formErrors.phone.length > 0}"
@blur="validateInput('phone', $event)"
v-model="phone"
placeholder="+7 (___) ___-__-__"
>
<span class="help-block" v-show="formErrors.phone && formErrors.phone.length">
{{formErrors.phone}}
</span>
</div>
<label class="checkbox js-privacy-policy" style="margin-bottom: 34px">
<input type="checkbox" class="checkbox__input" @click="policy = !policy">
<div class="checkbox__img">
<svg class="checkbox__img-pic">
<use xlink:href="/images/sprite.svg#check_box_outline_blank"></use>
</svg>
<svg class="checkbox__img-pic">
<use xlink:href="/images/sprite.svg#check_box"></use>
</svg>
</div>
<div class="checkbox__text">
Я прочитал <span @click.prevent="openPolicy">Политику безопасности</span> и согласен с условиями безопасности и обработки данных
</div>
</label>
</div>
</div>
</div>
<div class="button button_raised_accent" @click.prevent="createFromModal">
<div class="button__text">Получить КП</div>
</div>
</div>
</div>
</div>
</div>
</transition>
</template>
<!-- <font color="#FF0000">'danya:confirm_changes' is not a component</font> -->
<a
href="#"
class="go_to_top"
style="
position: fixed;
right: 100px;
bottom: 100px;
z-index: 100;
width: 60px;
height: 60px;
background: rgba(141, 141, 141, 0.5);
border: 1.52588px solid rgba(241, 241, 244, 0.5);
border-radius: 50px;
"
onclick= "$('body, html').animate({scrollTop:0}, '800', function() { console.log('Finished animating'); });"
>
<svg class="arrow__img">
<use xlink:href="/images/sprite.svg#chevron_up" style="fill: #fff;"></use>
</svg>
</a>
<!-- Yandex.Metrika counter -->
<noscript><div><img src="https://mc.yandex.ru/watch/9638098" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
<!-- Google Tag Manager (noscript) -->
<!-- End Google Tag Manager (noscript) -->
<!-- Google Analytics -->
<!-- End Google Analytics -->
<script>if(!window.BX)window.BX={};if(!window.BX.message)window.BX.message=function(mess){if(typeof mess==='object'){for(let i in mess) {BX.message[i]=mess[i];} return true;}};</script>
<script>(window.BX||top.BX).message({'pull_server_enabled':'Y','pull_config_timestamp':'1658318569','pull_guest_mode':'N','pull_guest_user_id':'0'});(window.BX||top.BX).message({'PULL_OLD_REVISION':'Для продолжения корректной работы с сайтом необходимо перезагрузить страницу.'});</script>
<script>(window.BX||top.BX).message({'JS_CORE_LOADING':'Загрузка...','JS_CORE_NO_DATA':'- Нет данных -','JS_CORE_WINDOW_CLOSE':'Закрыть','JS_CORE_WINDOW_EXPAND':'Развернуть','JS_CORE_WINDOW_NARROW':'Свернуть в окно','JS_CORE_WINDOW_SAVE':'Сохранить','JS_CORE_WINDOW_CANCEL':'Отменить','JS_CORE_WINDOW_CONTINUE':'Продолжить','JS_CORE_H':'ч','JS_CORE_M':'м','JS_CORE_S':'с','JSADM_AI_HIDE_EXTRA':'Скрыть лишние','JSADM_AI_ALL_NOTIF':'Показать все','JSADM_AUTH_REQ':'Требуется авторизация!','JS_CORE_WINDOW_AUTH':'Войти','JS_CORE_IMAGE_FULL':'Полный размер'});</script><script src="/bitrix/js/main/core/core.min.js?1706108554223197"></script><script>BX.Runtime.registerExtension({'name':'main.core','namespace':'BX','loaded':true});</script>
<script>BX.setJSList(['/bitrix/js/main/core/core_ajax.js','/bitrix/js/main/core/core_promise.js','/bitrix/js/main/polyfill/promise/js/promise.js','/bitrix/js/main/loadext/loadext.js','/bitrix/js/main/loadext/extension.js','/bitrix/js/main/polyfill/promise/js/promise.js','/bitrix/js/main/polyfill/find/js/find.js','/bitrix/js/main/polyfill/includes/js/includes.js','/bitrix/js/main/polyfill/matches/js/matches.js','/bitrix/js/ui/polyfill/closest/js/closest.js','/bitrix/js/main/polyfill/fill/main.polyfill.fill.js','/bitrix/js/main/polyfill/find/js/find.js','/bitrix/js/main/polyfill/matches/js/matches.js','/bitrix/js/main/polyfill/core/dist/polyfill.bundle.js','/bitrix/js/main/core/core.js','/bitrix/js/main/polyfill/intersectionobserver/js/intersectionobserver.js','/bitrix/js/main/lazyload/dist/lazyload.bundle.js','/bitrix/js/main/polyfill/core/dist/polyfill.bundle.js','/bitrix/js/main/parambag/dist/parambag.bundle.js']);
</script>
<script>BX.Runtime.registerExtension({'name':'ls','namespace':'window','loaded':true});</script>
<script>BX.Runtime.registerExtension({'name':'ui.vue','namespace':'BX','loaded':true});</script>
<script>BX.Runtime.registerExtension({'name':'ui.dexie','namespace':'BX.Dexie3','loaded':true});</script>
<script>BX.Runtime.registerExtension({'name':'main.md5','namespace':'BX','loaded':true});</script>
<script>BX.Runtime.registerExtension({'name':'ui.vue.vuex','namespace':'BX','loaded':true});</script>
<script>BX.Runtime.registerExtension({'name':'local.vuex','namespace':'BX','loaded':true});</script>
<script>(window.BX||top.BX).message({'LANGUAGE_ID':'ru','FORMAT_DATE':'DD.MM.YYYY','FORMAT_DATETIME':'DD.MM.YYYY HH:MI:SS','COOKIE_PREFIX':'BITRIX_SM_AR','SERVER_TZ_OFFSET':'10800','UTF_MODE':'Y','SITE_ID':'s1','SITE_DIR':'/','USER_ID':'','SERVER_TIME':'1714165390','USER_TZ_OFFSET':'0','USER_TZ_AUTO':'Y','bitrix_sessid':'c631f64eb5659119d1d65785f7631be7'});</script><script src="/bitrix/js/main/jquery/jquery-1.12.4.min.js?168313892997163"></script>
<script src="/bitrix/js/pull/protobuf/protobuf.min.js?163152768176433"></script>
<script src="/bitrix/js/pull/protobuf/model.min.js?163152768114190"></script>
<script src="/bitrix/js/main/core/core_promise.min.js?16470918432490"></script>
<script src="/bitrix/js/rest/client/rest.client.min.js?17061267829240"></script>
<script src="/bitrix/js/pull/client/pull.client.min.js?170610845749554"></script>
<script src="/bitrix/js/main/core/core_ls.min.js?16470918437365"></script>
<script src="/bitrix/js/ui/vue/vue2/prod/dist/vue.bundle.min.js?1683138906113213"></script>
<script src="/bitrix/js/ui/dexie/dist/dexie3.bundle.min.js?170610849988274"></script>
<script src="/bitrix/js/main/md5/dist/md5.bundle.min.js?164709184310569"></script>
<script src="/bitrix/js/ui/vue/vuex/dist/vuex.bundle.min.js?170610849836862"></script>
<script src="https://cdn.jsdelivr.net/npm/suggestions-jquery@21.6.0/dist/js/jquery.suggestions.min.js"></script>
<script src="https://api-maps.yandex.ru/2.1/?apikey=218d4dd8-1a11-4e20-a56b-c9b624f4d03a&lang=ru_RU"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/TSedlar/pseudo-styler@1.0.8/pseudostyler.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script>
<script>BX.setJSList(['/local/custom_admin/analogs_advantages/js/script.js','/local/js/local/vuex/dist/application.bundle.js','/local/dist/js/app.js']);</script>
<script>BX.setCSSList(['/local/js/local/vuex/dist/application.bundle.css','/local/dist/css/app.css']);</script>
<script type="text/javascript">
(function () {
"use strict";
var counter = function ()
{
var cookie = (function (name) {
var parts = ("; " + document.cookie).split("; " + name + "=");
if (parts.length == 2) {
try {return JSON.parse(decodeURIComponent(parts.pop().split(";").shift()));}
catch (e) {}
}
})("BITRIX_CONVERSION_CONTEXT_s1");
if (cookie && cookie.EXPIRE >= BX.message("SERVER_TIME"))
return;
var request = new XMLHttpRequest();
request.open("POST", "/bitrix/tools/conversion/ajax_counter.php", true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send(
"SITE_ID="+encodeURIComponent("s1")+
"&sessid="+encodeURIComponent(BX.bitrix_sessid())+
"&HTTP_REFERER="+encodeURIComponent(document.referrer)
);
};
if (window.frameRequestStart === true)
BX.addCustomEvent("onFrameDataReceived", counter);
else
BX.ready(counter);
})();
</script>
<script src="/bitrix/cache/js/s1/eshop_bootstrap_v4/template_6b38db523d48df1b8923d70381c7d85f/template_6b38db523d48df1b8923d70381c7d85f_v1.js?17137839991545220"></script>
<script type="text/javascript">var _ba = _ba || []; _ba.push(["aid", "dac8c30aceaad1f621c64be4eae8feee"]); _ba.push(["host", "armed.ru"]); (function() {var ba = document.createElement("script"); ba.type = "text/javascript"; ba.async = true;ba.src = (document.location.protocol == "https:" ? "https://" : "http://") + "bitrix.info/ba.js";var s = document.getElementsByTagName("script")[0];s.parentNode.insertBefore(ba, s);})();</script>
<script>
const application = new BX.VuexDemo();
const store = application.getStore();
window.addEventListener('load', () => {
store.dispatch('userCart/getUserCart');
});
</script>
<script>
BX.ready(function() {
function initialState() {
return {
modal_name: 'js-modal-variation',
product_data: {
parent_photo: '',
parent_info: {
PROPS: {
TITLE_FOR_SITE: ''
}
},
price: {
price: 0,
pricePrev: 0
},
variations: [],
},
selectedProps: {},
disabledProps: {
ids: [],
data: []
},
photo_for_show: '',
max_quantity: 1,
quantity: 1,
button_text: 'В корзину',
selectedVariationID: 0,
only_mp: false,
is_logged: false }
}
BX.Vue.createApp({
el: '#product_card_modal_vue',
template: '#product_card_modal_vue_template',
store,
components: {
},
data() {
return initialState();
},
mounted() {
},
computed: {
...BX.Vuex.mapGetters({
variationID: 'variationModal/variationIDGetter'
}),
},
created() {
},
watch: {
variationID(id) {
this.resetVariation();
this.modal_name = 'js-modal-variation-' + id;
setTimeout(() => {
this.openCurrentModal();
}, 1);
this.getProductData();
},
selectedVariationID(id) {
this.getProductButtonsAction(id);
},
},
methods: {
getProductButtonsAction(id) {
BX.ajax.runComponentAction('danya.product_card:product_buttons', 'getProductButtons', {
mode: 'class',
data: {
PRODUCT: this.variationID,
selectedVariationID: id,
NEED_COMPARE: false
}
}).then((response) => {
$('#product__buttons_vue_' + id).html('');
$('#product__buttons_vue_' + id).append(response.data);
}, (err) => {
console.log('error, ' + err);
});
},
resetVariation() {
Object.assign(this.$data, initialState());
},
getProductData() {
BX.ajax({
url: '/local/api/getProductData.php',
data: {
product_id: this.variationID
},
method: 'POST',
dataType: 'json',
onsuccess: (data) => {
this.product_data = data;
this.photo_for_show = data.parent_photo;
},
onfailure: function(){
}
});
},
onSelectProp(parent_prop, child_prop) {
this.selectedProps[parent_prop.ID] = child_prop;
let all_props_length = Object.keys(this.product_data.variations.PROPS).length;
let selected_props_length = Object.keys(this.selectedProps).length;
let props_s = structuredClone(this.product_data.variations.PROPS);
if (Object.keys(this.selectedProps).length == 1) {
delete props_s[child_prop.ID];
} else {
Object.entries(this.selectedProps).forEach(([key, value]) => {
if (key != child_prop.ID && (selected_props_length != all_props_length)) {
delete props_s[key];
}
})
}
Object.entries(this.product_data.variations.DATA).forEach(([p_key, product]) => {
let coincidences = [];
Object.entries(this.selectedProps).forEach(([key, value]) => {
let path = this.getKeys(product.PROPS_TREE, value.VALUE_ENUM_ID);
if (path[0]) {
coincidences.push(path);
}
})
if (coincidences.length > 0) { // todo && coincidences.length != all_props_length
Object.entries(props_s).forEach(([key, value]) => {
let enum_id = product.PROPS[key].VALUE_ENUM_ID;
let path_s = this.getKeys(value.VALUE, enum_id);
if (path_s[0]) {
delete value.VALUE[path_s[0].path[0]];
}
})
}
if (coincidences.length == all_props_length) {
let selected_variation = product;
this.max_quantity = selected_variation.QUANTITY;
if (this.max_quantity > 0) {
this.button_text = 'В корзину';
this.quantity = 1;
} else {
this.button_text = 'Нет в наличии';
this.quantity = 0;
}
if (selected_variation.PHOTO[0]) {
this.photo_for_show = selected_variation.PHOTO[0];
}
this.product_data.price.price = selected_variation.PRODUCT_PRICE;
this.product_data.price.pricePrev = selected_variation.PRODUCT_PRICE_OLD;
this.selectedVariationID = selected_variation.ID;
this.only_mp = selected_variation.IS_ONLY_ON_MP;
window.updateCardButtonState();
this.$forceUpdate();
}
})
let temp_ids = [];
let temp_data = {};
Object.entries(props_s).forEach(([key, value]) => {
Object.entries(value.VALUE).forEach(([key2, value2]) => {
temp_ids.push(value2.VALUE_ENUM_ID);
temp_data[key] = value;
})
})
this.disabledProps = {
ids: temp_ids,
data: temp_data
};
},
onImageSrcBroken(e) {
this.photo_for_show = this.product_data.parent_photo;
},
priceSet (num){
return num ? `${(+num).toLocaleString()} ${'₽'}` : '';
},
checkDisabledProps(val) {
return this.disabledProps.ids.includes(val.VALUE_ENUM_ID);
},
closeCurrentModal() {
modalClose('.' + this.modal_name);
},
openCurrentModal() {
modalOpen('.' + this.modal_name);
},
getKeys(obj, val, path = []) {
var objects = [];
for (var i in obj) {
// clone the path
var newPath = path.slice();
if (!obj.hasOwnProperty(i)) {
continue;
}
if (typeof obj[i] === "object") {
newPath.push(i);
objects = objects.concat(this.getKeys(obj[i], val, newPath));
} else if (obj[i] === val) {
objects.push({ key: i, path: newPath });
}
}
return objects;
},
changedQuantity(e) {
let new_quantity = e.target.value;
if (new_quantity > this.max_quantity) {
this.quantity = this.max_quantity;
} else {
if (new_quantity < 1) {
new_quantity = 1;
}
this.quantity = new_quantity;
}
console.log(new_quantity);
this.$forceUpdate();
},
changeQuantityInBasket(action) {
if (action == 'plus') {
this.quantity++;
if (this.quantity > this.max_quantity) {
this.quantity = this.max_quantity;
}
}
if (action == 'minus') {
if (this.quantity <= 1) {
return;
}
this.quantity--;
}
this.$forceUpdate();
},
},
});
})
</script>
<script>
BX.ready(function() {
BX.Vue.createApp({
el: '#auth_vue',
template: '#auth_vue_template',
components: {
},
data() {
return {
isModalSucess: false,
modalSuccessData: {
title: 'Успешно!',
desc: ''
},
isRegistration: false,
loginByPhone: true,
loginForgotPassword: false,
authByPhoneStep: 1,
authByPhoneCode: '',
registrationCode: false,
registrationStep: 1,
isCodeSendedNow: false,
policy: false,
sms_code: '',
logFromReg: false,
loginData: {},
innData: {},
loginDataErrors: {},
loginDataValidation: {
password: {
required: true
},
inn: {
validator: (val) => {
if (!this.checkInnShort(val)) {
this.innData = {};
return 'Введите корректный ИНН.';
}
let url = "https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/party";
let token = "0199725dd4e04841993816a84804bf7ad193887c";
let query = val;
let options = {
method: "POST",
mode: "cors",
headers: {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Token " + token
},
body: JSON.stringify({
query: query,
count: 1
})
}
fetch(url, options)
.then(response => response.text())
.then(result => {
if (JSON.parse(result)['suggestions'].length < 1) {
this.loginDataErrors.inn = 'Введенный ИНН не был найден.';
this.$forceUpdate();
} else {
this.loginDataErrors.inn = '';
let data = JSON.parse(result)['suggestions'][0]['data'];
if (data['state']['status']=='LIQUIDATED'){
this.loginDataErrors.inn = 'Данное юр лицо ликвидировано.';
this.$forceUpdate();
}
let name = (data['name']['short_with_opf']) ? data['name']['short_with_opf'] : data['name']['full'];
this.innData.name = name;
this.innData['inn'] = val;
this.innData['name'] = name;
this.innData['ogrn'] = data['ogrn'];
this.innData['kpp'] = data['kpp'];
this.innData['okved'] = data['okved'];
this.innData['address'] = data.address?.value;
this.$forceUpdate();
}
})
.catch(error => console.log("error", error));
}
},
fio: {
validator: function(val) {
const l = val.split(' ').length;
if (l < 2) {
return 'ФИО должно состоять минимум из 2 слов';
}
if (l > 3) {
return 'ФИО должно состоять максимум из 3 слов';
}
},
},
registrationCode: {
validator: function(val) {
if (val.length != 4) {
return 'Код должен состоять из 4 цифр.';
}
},
},
phone: {
validator: function(val) {
const re = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
if (!re.test(String(val).toLowerCase())) {
return 'Заполните форматом +7 (___) ___-__-__';
}
},
max: 18,
},
regPhone: {
validator: function(val) {
const re = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
if (!re.test(String(val).toLowerCase())) {
return 'Заполните форматом +7 (___) ___-__-__';
}
},
},
email: {
validator: function(val) {
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (!re.test(String(val).toLowerCase())) {
return 'Email введён не правильно';
}
},
},
forgotPassword: {
validator: function(val) {
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (!re.test(String(val).toLowerCase())) {
return 'Email введён не правильно';
}
},
},
regEmail: {
validator: function(val) {
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (!re.test(String(val).toLowerCase())) {
return 'Email введён не правильно';
}
},
},
passport: {
validator: function(val) {
if (val.length !== 10) {
return 'Нужно ввести 10 цифр серии и номера паспорта без пробела';
}
},
max: 10,
},
}
};
},
mounted() {
this.maskPhone('input[name="phone_m"]');
this.$Bitrix.eventEmitter.subscribe('m_action', this.changeIsRegistration);
},
created() {
},
watch: {
isRegistration(val) {
setTimeout(() => {
this.maskPhone('input[name="phone_m"]');
}, 1);
},
sms_code(val) {
if (this.loginDataErrors.phone) {
if (val) {
this.loginDataErrors.phone = '';
}
}
if (val.length == 4) {
const inputs = document.querySelectorAll(".form__pincode > input");
inputs[0].blur();
this.authByPhone();
}
}
},
methods: {
resetPhone() {
this.authByPhoneStep = 1;
this.loginData.phone = '';
this.loginDataErrors.phone = '';
this.sms_code = '';
},
openPolicy() {
window.open('/legal-info/', '_blank');
},
changeIsRegistration(event) {
let isRegistrationData = event.getData().isRegistration;
this.isRegistration = (isRegistrationData == 'registration') ? true : false;
this.$forceUpdate();
},
modalCloseNew(modalName) {
modalClose('.' + modalName);
setTimeout(() => {
this.isModalSucess = false;
}, 1000);
},
loginAuth() {
if (this.loginDataErrors['email'] || !this.loginData['email']) {
alertify.notify('Укажите корректный E-Mail.', 'error');
return false;
}
if (!this.loginData['password']) {
alertify.notify('Укажите пароль.', 'error');
return false;
}
let dataAuth = {
email: this.loginData['email'],
pass: this.loginData['password']
}
BX.ajax({
url: '/personal/ajax.php',
data: {
method: 'auth',
data: dataAuth
},
method: 'POST',
dataType: 'json',
onsuccess: (data) => {
if (data['TYPE'] == "ERROR") {
alertify.notify(data['MESSAGE'], 'error');
return false;
}
ym(9638098, 'reachGoal', 'login');
window.location.reload();
},
onfailure: function() {
}
});
},
onlyNumbers(v) {
const val = v.target.value.replace(/[^0-9]/g, "");
this.sms_code = val;
},
forgotPassword() {
if (this.loginDataErrors['forgotPassword'] || !this.loginData['forgotPassword']) {
alertify.notify('Укажите корректный E-Mail.', 'error');
return false;
}
BX.ajax({
url: '/personal/ajax.php',
data: {
method: 'forgot_pass',
data: this.loginData['forgotPassword']
},
method: 'POST',
dataType: 'json',
onsuccess: (data) => {
if (data['STATUS'] == 200) {
this.modalSuccessData.desc = data['MESSAGE']
this.isModalSucess = true;
return false;
} else {
this.loginDataErrors['forgotPassword'] = data['MESSAGE'];
}
this.$forceUpdate();
},
onfailure: function() {
}
});
},
authByPhone() {
if ((this.loginDataErrors['phone'] || !this.loginData['phone']) && this.authByPhoneStep == 1) {
this.loginDataErrors.phone = 'Укажите корректный телефон.';
return false;
}
if (this.authByPhoneStep == 1) {
BX.ajax({
url: '/personal/ajax.php',
data: {
method: 'checkphone_auth',
phone: this.loginData['phone']
},
method: 'POST',
dataType: 'json',
onsuccess: (data) => {
if (data['STATUS'] == 200) {
alertify.notify('Укажите код который пришёл Вам на телефон.', 'success');
setTimeout(() => {
const inputs = document.querySelectorAll(".form__pincode > input");
inputs[0].focus()
}, 1);
this.authByPhoneStep = 2;
} else {
this.loginDataErrors.phone = data['MESSAGE'];
}
this.$forceUpdate();
},
onfailure: function() {
}
});
}
if (this.authByPhoneStep == 2) {
let code = this.sms_code;
BX.ajax({
url: '/personal/ajax.php',
data: {
method: 'checkphone_auth',
phone: this.loginData['phone'],
code: code
},
method: 'POST',
dataType: 'json',
onsuccess: (data) => {
if (data['STATUS'] == 200) {
window.location.reload();
} else if (data['STATUS'] == 2000) {
this.loginData['regPhone'] = this.loginData['phone'];
this.loginData['registrationCode'] = code;
this.isRegistration = true;
this.logFromReg = true;
} else {
this.loginDataErrors.phone = data['MESSAGE'];
this.sms_code = '';
}
this.$forceUpdate();
},
onfailure: function() {
}
});
}
},
registration() {
if (this.loginDataErrors['inn'] || !this.loginData['inn']) {
alertify.notify('Укажите корректный ИНН.', 'error');
return false;
}
if (!this.loginData['regPhone'] || !this.loginData['regEmail']) {
alertify.notify('Заполните данные.', 'error');
return false;
}
if (!this.policy) {
alertify.notify('Подтвердите пользовательское соглашением.', 'error');
return false;
}
let data = {
inn: this.innData,
phone: this.loginData['regPhone'],
email: this.loginData['regEmail'],
phone_register_sms: this.loginData['registrationCode']
};
if (this.registrationStep == 1 && !this.logFromReg) {
this.isCodeSendedNow = true;
BX.ajax({
url: '/personal/ajax.php',
data: {
method: 'phone_verification',
data: data
},
method: 'POST',
dataType: 'json',
onsuccess: (data) => {
if (data['MESSAGE']) {
alertify.notify(data['MESSAGE'], 'success', 5);
this.registrationStep = 2;
this.isCodeSendedNow = false;
}
},
onfailure: function() {
}
});
}
if (this.registrationStep == 2 || this.logFromReg) {
BX.ajax({
url: '/personal/ajax.php',
data: {
method: 'registration',
data: data
},
method: 'POST',
dataType: 'json',
onsuccess: (data) => {
if (data['MESSAGE']) {
document.location.href = "/personal/#profil";
ym(9638098, 'reachGoal', 'registration');
}
if (data['ERROR']) {
if (data['ERROR']['PHONE']['STATUS'] == 401) {
this.loginDataErrors['regPhone'] = 'Данный телефон уже используется.'
}
if (data['ERROR']['EMAIL']['STATUS'] == 401) {
this.loginDataErrors['regEmail'] = 'Данный E-Mail уже используется.'
}
if (data['ERROR']['SMS']['STATUS'] == 401) {
this.loginDataErrors['registrationCode'] = data['ERROR']['SMS']['MESSAGE']
}
this.registrationStep = 1;
}
this.$forceUpdate();
},
onfailure: function() {
}
});
}
},
validateInput(field, event) {
const validationConfig = this.loginDataValidation[field];
const value = (this.loginData[field] || '').trim();
this.loginDataErrors[field] = '';
if (validationConfig) {
if (validationConfig.required && value.length === 0) {
this.loginDataErrors[field] = 'Поле обязательно для заполнения';
}
if (validationConfig.max && value.length > validationConfig.max) {
this.loginDataErrors[field] = 'Длинна введённой информации не должна превышать ' + validationConfig.max +
'символов';
}
if (validationConfig.validator !== undefined) {
this.loginDataErrors[field] = validationConfig.validator(value);
}
}
this.$forceUpdate();
},
checkMax(field, event) {
const validationConfig = this.loginDataValidation[field];
const value = this.loginData[field];
if (validationConfig.max && value && value.length > validationConfig.max) {
this.loginData[field] = this.loginData[field].substring(0, validationConfig.max);
this.$forceUpdate();
}
},
maskPhone(selector, masked = '+7 (___) ___-__-__') {
const elems = document.querySelectorAll(selector);
function mask(event) {
const keyCode = event.keyCode;
const template = masked,
def = template.replace(/\D/g, ""),
val = this.value.replace(/\D/g, "");
let i = 0,
newValue = template.replace(/[_\d]/g, function(a) {
return i < val.length ? val.charAt(i++) || def.charAt(i) : a;
});
i = newValue.indexOf("_");
if (i !== -1) {
newValue = newValue.slice(0, i);
}
let reg = template.substr(0, this.value.length).replace(/_+/g,
function(a) {
return "\\d{1," + a.length + "}";
}).replace(/[+()]/g, "\\$&");
reg = new RegExp("^" + reg + "$");
if (!reg.test(this.value) || this.value.length < 5 || keyCode > 47 && keyCode < 58) {
this.value = newValue;
}
if (event.type === "blur" && this.value.length < 5) {
this.value = "";
}
}
for (const elem of elems) {
elem.addEventListener("input", mask);
elem.addEventListener("focus", mask);
elem.addEventListener("blur", mask);
}
},
checkInnShort(value) {
if (typeof value !== 'string' ||
(value.length !== 10 && value.length !== 12) ||
value.split('').some((symbol) => isNaN(Number(symbol)))
) return false;
if (value.length === 10) {
return Number(value[9]) === (value.split('').slice(0, -1)
.reduce(
(summ, symbol, index) => [2, 4, 10, 3, 5, 9, 4, 6, 8][index] * Number(symbol) + summ,
0) %
11) % 10;
} else if (value.length === 12) {
let checkSumOne = (value.split('').slice(0, -2)
.reduce(
(summ, symbol, index) => [7, 2, 4, 10, 3, 5, 9, 4, 6, 8][index] * Number(symbol) + summ,
0) %
11) % 10;
let checkSumTwo = (value.split('').slice(0, -1)
.reduce(
(summ, symbol, index) => [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8][index] * Number(symbol) + summ,
0) %
11) % 10;
return (checkSumOne === Number(value[10]) && checkSumTwo === Number(value[11]));
}
},
formatphone(val){
if (typeof val == 'string'){
return val.replace(/(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})/g, `$1 ($2) $3-$4-$5`);
}
},
},
});
})
</script><script>
BX.ready(function() {
BX.Vue.createApp({
el: '#disc_label',
template: '#disc_label_template',
components: {
},
data() {
return {
registrationStep: 1,
isCodeSendedNow: false,
policy: false,
loginData: {},
innData: {},
loginDataErrors: {},
loginDataValidation: {
password: {
required: true
},
inn: {
validator: (val) => {
if (!this.checkInnShort(val)) {
this.innData = {};
return 'Введите корректный ИНН.';
}
let url = "https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/party";
let token = "0199725dd4e04841993816a84804bf7ad193887c";
let query = val;
let options = {
method: "POST",
mode: "cors",
headers: {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Token " + token
},
body: JSON.stringify({query: query, count: 1})
}
fetch(url, options)
.then(response => response.text())
.then(result => {
if (JSON.parse(result)['suggestions'].length < 1) {
this.loginDataErrors.inn = 'Введенный ИНН не был найден.';
this.$forceUpdate();
} else {
this.loginDataErrors.inn = '';
let data = JSON.parse(result)['suggestions'][0]['data'];
if (data['state']['status']=='LIQUIDATED'){
this.loginDataErrors.inn = 'Данное юр лицо ликвидировано.';
this.$forceUpdate();
}
let name = (data['name']['short_with_opf']) ? data['name']['short_with_opf'] : data['name']['full'];
this.innData.name = name;
this.innData['inn'] = val;
this.innData['name'] = name;
this.innData['ogrn'] = data['ogrn'];
this.innData['kpp'] = data['kpp'];
this.innData['okved'] = data['okved'];
this.innData['address'] = data.address?.value;
this.$forceUpdate();
}
})
.catch(error => console.log("error", error));
}
},
fio: {
validator: function(val) {
const l = val.split(' ').length;
if (l < 2) {
return 'ФИО должно состоять минимум из 2 слов';
}
if (l > 3) {
return 'ФИО должно состоять максимум из 3 слов';
}
},
},
registrationCode: {
validator: function(val) {
if (val.length != 4) {
return 'Код должен состоять из 4 цифр.';
}
},
},
phone: {
validator: function(val) {
const re = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
if (!re.test(String(val).toLowerCase())) {
return 'Заполните форматом +7 (___) ___-__-__';
}
},
max: 18,
},
regPhone: {
validator: function(val) {
const re = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
if (!re.test(String(val).toLowerCase())) {
return 'Заполните форматом +7 (___) ___-__-__';
}
},
},
email: {
validator: function(val) {
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (!re.test(String(val).toLowerCase())) {
return 'Email введён не правильно';
}
},
},
forgotPassword: {
validator: function(val) {
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (!re.test(String(val).toLowerCase())) {
return 'Email введён не правильно';
}
},
},
regEmail: {
validator: function(val) {
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (!re.test(String(val).toLowerCase())) {
return 'Email введён не правильно';
}
},
},
passport: {
validator: function(val) {
if (val.length !== 10) {
return 'Нужно ввести 10 цифр серии и номера паспорта без пробела';
}
},
max: 10,
},
}
}
},
mounted() {
this.maskPhone('input[name="phone_m"]');
},
created() {
},
watch: {
},
methods: {
openPolicy() {
window.open('/legal-info/', '_blank');
},
registration() {
if (this.loginDataErrors['inn'] || !this.loginData['inn']) {
alertify.notify('Укажите корректный ИНН.', 'error');
return false;
}
if (!this.loginData['regPhone'] || !this.loginData['regEmail']) {
alertify.notify('Заполните данные.', 'error');
return false;
}
if (!this.policy) {
alertify.notify('Подтвердите пользовательское соглашением.', 'error');
return false;
}
let data = {
inn: this.innData,
phone: this.loginData['regPhone'],
email: this.loginData['regEmail'],
phone_register_sms: this.loginData['registrationCode']
};
if (this.registrationStep == 1) {
this.isCodeSendedNow = true;
BX.ajax({
url: '/personal/ajax.php',
data: {
method: 'phone_verification',
data: data
},
method: 'POST',
dataType: 'json',
onsuccess: (data) => {
if (data['STATUS'] == 401) {
this.loginDataErrors['regPhone'] = 'Данный телефон уже используется.'
this.registrationStep = 1;
this.isCodeSendedNow = false;
this.$forceUpdate();
return false;
}
if (data['MESSAGE']) {
alertify.notify(data['MESSAGE'], 'success', 5);
this.registrationStep = 2;
this.isCodeSendedNow = false;
}
},
onfailure: function(){
}
});
}
if (this.registrationStep == 2) {
BX.ajax({
url: '/personal/ajax.php',
data: {
method: 'registration',
data: data
},
method: 'POST',
dataType: 'json',
onsuccess: (data) => {
if (data['MESSAGE']) {
document.location.href = "/personal/#profil";
ym(9638098,'reachGoal','registration');
}
if (data['ERROR']) {
if (data['ERROR']['PHONE']['STATUS'] == 401) {
this.loginDataErrors['regPhone'] = 'Данный телефон уже используется.'
}
if (data['ERROR']['EMAIL']['STATUS'] == 401) {
this.loginDataErrors['regEmail'] = 'Данный E-Mail уже используется.'
}
if (data['ERROR']['SMS']['STATUS'] == 401) {
this.loginDataErrors['registrationCode'] = data['ERROR']['SMS']['MESSAGE']
}
this.registrationStep = 1;
}
this.$forceUpdate();
},
onfailure: function(){
}
});
}
},
validateInput(field, event) {
const validationConfig = this.loginDataValidation[field];
const value = (this.loginData[field] || '').trim();
this.loginDataErrors[field] = '';
if (validationConfig) {
if (validationConfig.required && value.length === 0) {
this.loginDataErrors[field] = 'Поле обязательно для заполнения';
}
if (validationConfig.max && value.length > validationConfig.max) {
this.loginDataErrors[field] = 'Длинна введённой информации не должна превышать ' + validationConfig.max +
'символов';
}
if (validationConfig.validator !== undefined) {
this.loginDataErrors[field] = validationConfig.validator(value);
}
}
this.$forceUpdate();
},
checkMax(field, event) {
const validationConfig = this.loginDataValidation[field];
const value = this.loginData[field];
if (validationConfig.max && value && value.length > validationConfig.max) {
this.loginData[field] = this.loginData[field].substring(0, validationConfig.max);
this.$forceUpdate();
}
},
maskPhone(selector, masked = '+7 (___) ___-__-__') {
const elems = document.querySelectorAll(selector);
function mask(event) {
const keyCode = event.keyCode;
const template = masked,
def = template.replace(/\D/g, ""),
val = this.value.replace(/\D/g, "");
let i = 0,
newValue = template.replace(/[_\d]/g, function (a) {
return i < val.length ? val.charAt(i++) || def.charAt(i) : a;
});
i = newValue.indexOf("_");
if (i !== -1) {
newValue = newValue.slice(0, i);
}
let reg = template.substr(0, this.value.length).replace(/_+/g,
function (a) {
return "\\d{1," + a.length + "}";
}).replace(/[+()]/g, "\\$&");
reg = new RegExp("^" + reg + "$");
if (!reg.test(this.value) || this.value.length < 5 || keyCode > 47 && keyCode < 58) {
this.value = newValue;
}
if (event.type === "blur" && this.value.length < 5) {
this.value = "";
}
}
for (const elem of elems) {
elem.addEventListener("input", mask);
elem.addEventListener("focus", mask);
elem.addEventListener("blur", mask);
}
},
checkInnShort (value) {
if(typeof value !== 'string' ||
(value.length !== 10 && value.length !== 12) ||
value.split('').some((symbol) => isNaN(Number(symbol)))
) return false;
if(value.length === 10){
return Number(value[9]) === (value.split('').slice(0, -1)
.reduce(
(summ, symbol, index) =>
[2, 4, 10, 3, 5, 9, 4, 6, 8][index] * Number(symbol) + summ,
0)
% 11) % 10;
}else if(value.length === 12){
let checkSumOne = (value.split('').slice(0, -2)
.reduce(
(summ, symbol, index) =>
[7, 2, 4, 10, 3, 5, 9, 4, 6, 8][index] * Number(symbol) + summ,
0)
% 11 ) % 10;
let checkSumTwo = (value.split('').slice(0, -1)
.reduce(
(summ, symbol, index) =>
[3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8][index] * Number(symbol) + summ,
0)
% 11 ) % 10;
return (checkSumOne === Number(value[10]) && checkSumTwo === Number(value[11]));
}
},
},
});
})
</script>
<script>
BX.Vue.createApp({
el: '#lazy_load_catalog'
});
</script><script>
const app = BX.Vue.createApp({
template: '#basket_header_vue_template',
store,
mounted() {
store.dispatch('userCart/getUserCart');
},
computed: {
...BX.Vuex.mapGetters({
userCart: 'userCart/userCartGetter'
}),
},
watch: {
userCart() {
window.updateCardButtonState();
}
},
methods: {
...BX.Vuex.mapActions({
getUserCart: 'userCart/getUserCart'
}),
deleteProductFromBasket(id) {
BX.ajax({
url: '/personal/ajax.php',
data: {
method: 'delete',
id: id
},
method: 'POST',
dataType: 'json',
onsuccess: function(data) {
store.dispatch('userCart/getUserCart');
alertify.notify('Товар был убран из корзины.', 'success');
},
onfailure: function() {
}
});
}
},
});
app.mount('#basket_header_vue');
</script><script>
BX.ready(function () {
var is_mob = '';
$('input[name="headersearch"]').keydown(function (e) {
if (e.keyCode == 13) {
e.preventDefault();
if (index_keydown != -1) {
if ($('.search__helper-item').eq(index_keydown).hasClass('insert__header')) {
return false;
}
let link = $('.search__helper-item').eq(index_keydown).children().attr('href');
if (link) {
location.href = link;
}
return false;
}
let val = $('input[type="search"]').val();
addLastSearch(val);
$(location).attr('href', '/search/?query=' + val);
}
})
setTimeout(() => {
if (is_mob) {
$('#search__list_helper').addClass('active');
}
$('#search__list_helper').load('/search/components/popularsections.php', {
first_init: true
}, function () {
if (!is_mob) {
$('.js-headersearch-input').on('click', function (e) {
$('#search__list_helper').addClass('active');
})
}
});
}, 200);
$('.search__icon-clear').on('click', function (e) {
$('input[type="search"]').val('');
$('input[type="search"]').focus();
$('#search__list_helper').load('/search/components/popularsections.php', {
first_init: true
}, function () {
});
})
if (!is_mob) {
initKeydown();
}
var is_init_keydown = false;
var index_keydown = -1;
function initKeydown() {
is_init_keydown = true;
var ul = document.getElementById('search__list_helper');
var liSelected;
var index_keydown = -1;
document.addEventListener('keydown', function (event) {
var len = ul.getElementsByTagName('li').length - 1;
if (event.which === 40) {
index_keydown++;
//down
if (liSelected) {
removeClass(liSelected, 'selected');
next = ul.getElementsByTagName('li')[index_keydown];
if (typeof next !== undefined && index_keydown <= len) {
liSelected = next;
} else {
index_keydown = 0;
liSelected = ul.getElementsByTagName('li')[0];
}
addClass(liSelected, 'selected');
console.log(index_keydown);
}
else {
index_keydown = 0;
liSelected = ul.getElementsByTagName('li')[0];
addClass(liSelected, 'selected');
}
}
else if (event.which === 38) {
//up
if (liSelected) {
removeClass(liSelected, 'selected');
index_keydown--;
console.log(index_keydown);
next = ul.getElementsByTagName('li')[index_keydown];
if (typeof next !== undefined && index_keydown >= 0) {
liSelected = next;
} else {
index_keydown = len;
liSelected = ul.getElementsByTagName('li')[len];
}
addClass(liSelected, 'selected');
}
else {
index_keydown = 0;
liSelected = ul.getElementsByTagName('li')[len];
addClass(liSelected, 'selected');
}
}
}, false);
}
function removeClass(el, className) {
(async () => {
let styler = new PseudoStyler();
await styler.loadDocumentStyles();
styler.toggleStyle(el, ':hover');
})();
};
function addClass(el, className) {
(async () => {
let styler = new PseudoStyler();
await styler.loadDocumentStyles();
styler.toggleStyle(el, ':hover');
})();
};
function addLastSearch(val) {
let data = BX.localStorage.get('LAST_SEARCH');
if (data) {
if (data.indexOf(val) === -1) {
if (data.length >= 3) {
data.push(val);
data.shift(0);
} else {
data.push(val);
}
}
} else {
data = [];
data.push(val);
}
BX.localStorage.set('LAST_SEARCH', data, 12800);
}
function getLastSearch() {
return BX.localStorage.get('LAST_SEARCH');
}
$('.plashka__close').on('click', function (e) {
let id = $('.plashka').data('plashka');
$('.plashka').remove();
let plashkaList = JSON.parse((BX.getCookie('BITRIX_SM_PLASHKA') ? BX.getCookie('BITRIX_SM_PLASHKA') : false));
if (!plashkaList) {
plashkaList = [];
plashkaList.push(id);
} else {
plashkaList.push(id);
}
BX.setCookie('BITRIX_SM_PLASHKA', JSON.stringify(plashkaList), {
expires: 3600,
path: '/'
});
})
let compare_items = BX.localStorage.get('COMPARE_ITEMS');
if (compare_items) {
$('#comparecount').text(compare_items.length);
} else {
$('#comparecount').text(0);
}
$('.header__popup-item').on('click', function (e) {
let method = $(this).data('method');
if (method == 'logout') {
BX.ajax({
url: '/personal/ajax.php',
data: {
method: 'logout'
},
method: 'POST',
dataType: 'json',
onsuccess: function (data) {
window.location.href = "/";
},
onfailure: function () {
}
});
}
})
$('.header__popup-card-close').on('click', function (e) {
let id = $(this).parent().parent().data('id');
let parent = $(this).parent().parent();
if (id) {
BX.ajax({
url: '/personal/ajax.php',
data: {
method: 'delete',
id: id
},
method: 'POST',
dataType: 'json',
onsuccess: function (data) {
$('#basketcount').text(data['COUNT']);
$('.header__popup__total-price').text(priceSet(data['PRICE']));
$(parent).remove();
alertify.notify('Товар был убран из корзины.', 'success');
},
onfailure: function () {
}
});
}
})
// $('.search__icon').on('click', function(e) {
// let val = $('input[type="search"]').val();
// addLastSearch(val);
// $(location).attr('href', '/search/?query=' + val);
// })
$('input[name="headersearch"]').on('input', function (e) {
let q = $(this).val();
let ls = getLastSearch();
if (ls) {
ls.reverse();
}
if (q.length > 2) {
q = $('input[name="headersearch"]').val();
$('#search__list_helper').load('/search/search.php', {
q: q,
ls: ls,
is_mob: is_mob
}, function () {
Newjs.default.search();
Newjs.default.quantityCounter();
if (is_init_keydown) {
ul = document.getElementById('search__list_helper');
liSelected;
index_keydown = -1;
}
});
} else {
$('.js-headersearch').addClass('active');
$('#search__list_helper').load('/search/components/popularsections.php', {
}, function () {
});
}
})
function priceSet(num) {
return num ? `${(+num).toLocaleString()} ${'₽'}` : '';
};
})
</script>
<script>
BX.ready(function() {
BX.Vue.createApp({
el: '#popup-kp_vue',
template: '#popup-kp_vue_template',
store,
components: {
},
data() {
return {
order_limit: 100000,
fio: '',
phone: '',
fuser: -1,
formErrors: {},
lastCount: false,
policy: false,
formValidation: {
fio: {
validator: function(val) {
const l = val.split(' ').length;
if (l < 2) {
return 'ФИО должно состоять минимум из 2 слов';
}
if (l > 3) {
return 'ФИО должно состоять максимум из 3 слов';
}
},
},
phone: {
validator: function(val) {
const re = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
if (!re.test(String(val).toLowerCase())) {
return 'Заполните форматом +7 (___) ___-__-__';
}
},
max: 18,
},
}
}
},
mounted() {
this.maskPhone('input[name="phone"]');
this.getOrderLimit();
},
created() {
},
watch: {
userCart() {
let count = this.userCart.basketData.basketCount;
if (this.lastCount) {
this.openPopup();
this.lastCount = false;
}
if (count == 0) {
this.lastCount = true;
}
}
},
computed: {
...BX.Vuex.mapGetters({
userCart: 'userCart/userCartGetter'
}),
},
methods: {
downloadKP() {
let cart = this.userCart.basketData;
let price = cart.basketPriceWODisc;
if (cart.basketCount < 1) {
alertify.notify('Добавьте как минимум один товар в КП.', 'error');
return false;
}
if (price < 5000) {
alertify.notify('Минимальная сумма КП - 5000 руб.', 'error');
return false;
}
if (price > this.order_limit) {
modalOpen('.js-modal-stub');
} else {
this.createKP();
}
},
openPolicy() {
window.open('/legal-info/', '_blank');
},
createFromModal() {
this.validateInput('phone');
this.validateInput('fio');
let has_errors = JSON.parse(JSON.stringify(this.formErrors));
if (Object.keys(has_errors).length > 0) return;
if (!this.policy) {
alertify.notify('Подтвердите пользовательское соглашением.', 'error');
return false;
}
this.createKP();
},
createKP() {
BX.ajax({
url: '/personal/ajax.php',
data: {
method: 'createkp',
url: location.protocol + '//' + location.host + '/personal/kp.php?userID=' + this.fuser,
dataReg: {
fio: this.fio,
phone: this.phone
},
},
method: 'POST',
dataType: 'json',
onsuccess: (data) => {
let uid = data['uid'];
var url = '/upload/pdf/' + uid + '.pdf';
ym(9638098,'reachGoal','createkp');
window.open(url);
modalClose('.js-modal-stub');
store.dispatch('userCart/getUserCart');
},
onfailure: function(){
}
});
},
getOrderLimit() {
BX.ajax({
url: '/local/api/getUserBasketPrice.php',
method: 'GET',
dataType: 'json',
onsuccess: (data) => {
this.order_limit = parseInt(data.orderLimit);
this.fuser = parseInt(data.fuser);
},
onfailure: function(){
}
});
},
openPopup() {
let popup = document.querySelector('.popup-kp');
if (!popup) return;
if (popup.classList.contains('reverse')) return;
popup.classList.add('active');
},
closePopup() {
let popup = document.querySelector('.popup-kp');
if (!popup) return;
if (popup.classList.contains('active')) {
popup.classList.remove('active');
popup.classList.add('reverse');
setTimeout(() => {
popup.classList.remove('reverse');
}, 300);
}
},
validateInput(field, event) {
const validationConfig = this.formValidation[field];
const value = (this[field] || '').trim();
this.formErrors[field] = '';
if (validationConfig) {
if (validationConfig.required && value.length === 0) {
this.formErrors[field] = 'Поле обязательно для заполнения';
}
if (validationConfig.max && value.length > validationConfig.max) {
this.formErrors[field] = 'Длинна введённой информации не должна превышать ' + validationConfig.max +
'символов';
}
if (validationConfig.validator !== undefined) {
this.formErrors[field] = validationConfig.validator(value);
}
}
this.$forceUpdate();
},
maskPhone(selector, masked = '+7 (___) ___-__-__') {
const elems = document.querySelectorAll(selector);
function mask(event) {
const keyCode = event.keyCode;
const template = masked,
def = template.replace(/\D/g, ""),
val = this.value.replace(/\D/g, "");
let i = 0,
newValue = template.replace(/[_\d]/g, function (a) {
return i < val.length ? val.charAt(i++) || def.charAt(i) : a;
});
i = newValue.indexOf("_");
if (i !== -1) {
newValue = newValue.slice(0, i);
}
let reg = template.substr(0, this.value.length).replace(/_+/g,
function (a) {
return "\\d{1," + a.length + "}";
}).replace(/[+()]/g, "\\$&");
reg = new RegExp("^" + reg + "$");
if (!reg.test(this.value) || this.value.length < 5 || keyCode > 47 && keyCode < 58) {
this.value = newValue;
}
if (event.type === "blur" && this.value.length < 5) {
this.value = "";
}
}
for (const elem of elems) {
elem.addEventListener("input", mask);
elem.addEventListener("focus", mask);
elem.addEventListener("blur", mask);
}
},
},
});
})
</script>
<script>
BX.ready(function(){
var upButton = document.querySelector('[data-role="eshopUpButton"]');
BX.bind(upButton, "click", function(){
var windowScroll = BX.GetWindowScrollPos();
(new BX.easing({
duration : 500,
start : { scroll : windowScroll.scrollTop },
finish : { scroll : 0 },
transition : BX.easing.makeEaseOut(BX.easing.transitions.quart),
step : function(state){
window.scrollTo(0, state.scroll);
},
complete: function() {
}
})).animate();
})
});
</script>
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(9638098, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true,
ecommerce:"dataLayer"
});
</script>
<script>
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start':
new Date().getTime(), event: 'gtm.js'
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src =
'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-WVCDCNW');
</script>
<script>
window['GoogleAnalyticsObject'] = 'ga';
window['ga'] = window['ga'] || function() {
(window['ga'].q = window['ga'].q || []).push(arguments)
};
</script>
</body>
</html>