It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: http://armed.ru/bitrix/redirect.php?goto=http%3A//codey.live/product-category/subscriptions/xbox/

  1. <!DOCTYPE html>
  2. <html xml:lang="ru" lang="ru">
  3.  
  4. <head>
  5.    <title>
  6.        Профессиональное оборудование для медицинских учреждений - Армед    </title>
  7.    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  8.    <meta name="yandex-verification" content="d1101867d7b980cb" />
  9.    <link rel="icon" href="/favicon.svg" type=" image/svg+xml">
  10.    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  11. <meta name="robots" content="index, follow" />
  12. <meta name="description" content="Сертифицированное оборудование высочайшего качества для лабораторий, клиник, стоматологий и прочих частных и государственных медицинских учреждений" />
  13. <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>
  14.  
  15.  
  16. <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" />
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24. <link href="https://cdn.jsdelivr.net/npm/suggestions-jquery@21.6.0/dist/css/suggestions.min.css" rel="stylesheet" />
  25. <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&amp;subset=cyrillic"rel="stylesheet">
  26. <link href="https://fonts.googleapis.com/icon?family=Material+Icons"rel="stylesheet">
  27. <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=device-width">
  28.  
  29.  
  30.  
  31. </head>
  32.  
  33. <body>
  34.    
  35.        
  36. <div id="product_card_modal_vue"></div>
  37.  
  38. <template id="product_card_modal_vue_template">
  39.    <section class="auth_modal">
  40.        <div class="overlay">
  41.            <div class="modal modal_variation" :class="modal_name">
  42.                <div class="modal__close-mobile"><span @click.prevent="closeCurrentModal"></span></div>
  43.                <div class="modal__header">
  44.                    <h3 class="modal__title" v-html="product_data.parent_info.PROPS.TITLE_FOR_SITE_BASE"></h3>
  45.                    <div class="modal__content-desc" v-if="!only_mp">Выберите варианты товара</div>
  46.                    <div class="modal__content-desc" v-else>Товар доступен только на маркетплейсах</div>
  47.                    <a class="modal__close" href="#" @click.prevent="closeCurrentModal">
  48.                        <svg class="modal__close-img">
  49.                            <use xlink:href="/images/sprite.svg#modalclose"></use>
  50.                        </svg>
  51.                    </a>
  52.                </div>
  53.                <form class="modal__content" action="" v-if="product_data.variations.DATA">
  54.                    <div class="modal__row">
  55.                        <div class="modal__product">
  56.                            <div class="modal__product-img mp">
  57.                                <div class="product__labels" v-if="only_mp">
  58.                                    <svg class="dealers__table-info"><use xlink:href="/images/sprite.svg#info"></use></svg>
  59.                                </div>
  60.                                <img class="modal__product-pic" style="pointerEvents: none;" :src="photo_for_show" @error="onImageSrcBroken">
  61.                            </div>
  62.                        </div>
  63.  
  64.                        <div class="buy-card__form">
  65.                            <div class="product__variation">
  66.                                <div class="product__variation-row" v-for="(parent_prop, k2) in product_data.variations.PROPS" :key="k2">
  67.                                    <div class="product__variation-subtitle">
  68.                                        <span>{{ parent_prop.NAME }}</span>
  69.                                    </div>
  70.                                    <ul class="product__variation-list" >
  71.                                        <li class="product__variation-item" v-for="(child_prop, k) in parent_prop.VALUE" :key="k">
  72.                                            <label class="variation-label">
  73.                                                <input type="radio" class="variation-input" :disabled="checkDisabledProps(child_prop)" @click="onSelectProp(parent_prop, child_prop)" :name="child_prop.CODE">
  74.                                                <div class="variation-text variation-text_big" v-if="parent_prop.ID != 4742">{{ child_prop.VALUE }}</div>
  75.                                                <div class="variation-image" v-if="parent_prop.ID == 4742 && !~child_prop.VALUE_XML_ID.indexOf(',')">
  76.                                                    <div class="variation-image__left"
  77.                                                        :style="{'background-color': '#' + child_prop.VALUE_XML_ID}">
  78.                                                    </div>
  79.                                                    <div class="variation-image__right"
  80.                                                        :style="{'background-color': '#' + child_prop.VALUE_XML_ID}">
  81.                                                    </div>
  82.                                                </div>
  83.                                                <div class="variation-image" v-if="parent_prop.ID == 4742 && ~child_prop.VALUE_XML_ID.indexOf(',')">
  84.                                                    <div class="variation-image__left"
  85.                                                        :style="{'background-color': '#' + child_prop.VALUE_XML_ID.split(',')[0]}">
  86.                                                    </div>
  87.                                                    <div class="variation-image__right"
  88.                                                        :style="{'background-color': '#' + child_prop.VALUE_XML_ID.split(',')[1]}">
  89.                                                    </div>
  90.                                                </div>
  91.                                                <div class="tooltip-lite" v-if="parent_prop.ID == 4742">
  92.                                                    {{ child_prop.VALUE }}
  93.                                                    <span></span>
  94.                                                </div>
  95.                                            </label>
  96.                                        </li>
  97.                                    </ul>
  98.                                </div>
  99.                            </div>
  100.                        </div>
  101.                    </div>
  102.                    <div class="product__buttons" style="justify-content: center;" v-if="!only_mp">
  103.                        <div class="product-card__price" v-if="quantity > 0">
  104.                            <span>{{ priceSet(product_data.price.price * quantity) }}</span>
  105.                            <del v-if="product_data.price.pricePrev > product_data.price.price">{{ priceSet(product_data.price.pricePrev * quantity) }}</del>
  106.                        </div>
  107.                        <div class="product-card__price" v-else>
  108.                            <span>{{ priceSet(product_data.price.price) }}</span>
  109.                            <del v-if="product_data.price.pricePrev > product_data.price.price">{{ priceSet(product_data.price.pricePrev) }}</del>
  110.                        </div>
  111.                        <a class="modal__button button button_raised_accent product__button" disabled v-if="selectedVariationID == 0">
  112.                            <div class="button__text">Выберите вариацию</div>
  113.                        </a>
  114.                        <div :id="'product__buttons_vue_' + selectedVariationID" v-else>
  115.                            
  116.                        </div>
  117.                    </div>
  118.                    <div class="marketplace__list" style="justify-content: center;" v-else>
  119.                        <a href="#" target="_blank" class="marketplace__link marketplace__link_ozon">
  120.                            <img src="/images/product/market/ozon.jpg" alt="" class="marketplace__img"></a>
  121.                        <a href="#" target="_blank" class="marketplace__link marketplace__link_sber">
  122.                            <img src="/images/product/market/sber-i.jpg" alt="" class="marketplace__icon">
  123.                            <img src="/images/product/market/sber.jpg" alt="" class="marketplace__img"></a>
  124.                        <a href="#" target="_blank" class="marketplace__link marketplace__link_wild">
  125.                            <img src="/images/product/market/wild-i.jpg" alt="" class="marketplace__icon">
  126.                            <img src="/images/product/market/wild.jpg" alt="" class="marketplace__img"></a>
  127.                        <a href="#" target="_blank" class="marketplace__link marketplace__link_yandex">
  128.                            <img src="/images/product/market/yandex-i.jpg" alt="" class="marketplace__icon">
  129.                            <img src="/images/product/market/yandex.jpg" alt="" class="marketplace__img"></a>
  130.                    </div>
  131.                </form>
  132.                <div class="modal__content" v-else>
  133.                    <img src="/images/modal/preloader.gif" alt="">
  134.                </div>
  135.            </div>
  136.        </div>
  137.    </section>
  138. </template>
  139.  
  140.    <div class="workarea">
  141.        <div id="app" class="wrapper">
  142.                                                    
  143. <div id="auth_vue"></div>
  144.  
  145. <template id="auth_vue_template">
  146.    <section class="auth_modal">
  147.        <div class="overlay">
  148.            <div class="modal active js-modal-auth" :class="isRegistration ? 'modal_auth-registration' : (loginByPhone) ? 'modal_auth-login-phone' : 'modal_auth-login-email'" v-if="!isModalSucess">
  149.                <div class="modal__close-mobile"><span onclick="modalClose('.js-modal-auth'); return false;"></span></div>
  150.                <div class="modal__header">
  151.                    <h3 class="modal__title" v-if="!loginForgotPassword">{{ isRegistration ? 'Стань нашим партнером!' : 'Авторизация' }}</h3>
  152.                    <h3 class="modal__title" v-else>Забыли пароль?</h3>          
  153.                    <a class="modal__close" href="#" onclick="modalClose('.js-modal-auth'); return false;">
  154.                        <svg class="modal__close-img">
  155.                            <use xlink:href="/images/sprite.svg#clear"></use>
  156.                        </svg>
  157.                    </a>
  158.                </div>
  159.                <div class="modal__content">
  160.                    <div class="login__tabs" v-if="!isRegistration && !loginForgotPassword">
  161.                        <div class="login__tabs-controls" v-show="authByPhoneStep != 2">
  162.                            <div class="login__tabs-controls-item" :class="{active : loginByPhone}" @click.prevent="loginByPhone = true">
  163.                                <svg class="login__tabs-controls-icon">
  164.                                    <use xlink:href="/images/sprite.svg#smartphone"></use>
  165.                                </svg>
  166.                                <div class="login__tabs-controls-text">Телефон</div>
  167.                            </div>
  168.                            <div class="login__tabs-controls-item" :class="{active : !loginByPhone}" @click.prevent="loginByPhone = !loginByPhone">
  169.                                <svg class="login__tabs-controls-icon">
  170.                                    <use xlink:href="/images/sprite.svg#email"></use>
  171.                                </svg>
  172.                                <div class="login__tabs-controls-text">Email</div>
  173.                            </div>
  174.                        </div>
  175.                        <div class="modal__desc" v-show="authByPhoneStep == 2 && !isRegistration">Введите код подтверждения из СМС сообщения,<br/> отправленного на номер {{ formatphone(loginData.phone)}}</div>
  176.                        <div class="login__tabs-content">
  177.                            <div class="login__tabs-content-item" :class="{active : loginByPhone}" v-show="authByPhoneStep != 2">
  178.                                <div class="login__phone">
  179.                                    <div class="form-group">
  180.                                        <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)">
  181.                                        <span class="help-block" v-show="loginDataErrors.phone && loginDataErrors.phone.length">
  182.                                            {{loginDataErrors.phone}}
  183.                                        </span>
  184.                                    </div>
  185.                                </div>
  186.                                <div class="login__form-buttons">
  187.  
  188.                                    <a class="button button_raised_accent" href="#" @click.prevent="authByPhone" v-show="authByPhoneStep == 1">
  189.                                        Прислать смс
  190.                                    </a>
  191.  
  192.                                    <!-- <a href="#" class="login__form-link link" @click.prevent="isRegistration = true">Зарегистрироваться</a> -->
  193.                                    <a href="#" class="cart__button button button_transparent" @click.prevent="isRegistration = true">
  194.                                        <div class="button__text">Зарегистрироваться</div>
  195.                                    </a>
  196.                                </div>
  197.                            </div>
  198.                            <div class="login__tabs-content-item" :class="{active : loginByPhone}" v-show="authByPhoneStep == 2">
  199.                                <div class="login__phone">
  200.                                    <div class="form-group sms codev form__pincode">
  201.                                        <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}">
  202.                                        <span class="help-block" v-show="loginDataErrors.phone && loginDataErrors.phone.length">
  203.                                            {{loginDataErrors.phone}}
  204.                                        </span>
  205.                                    </div>
  206.                                </div>
  207.                                <div class="login__form-buttons">                        
  208.                                        <a class="button button_raised_accent" href="#" @click.prevent="authByPhone">
  209.                                            Авторизоваться
  210.                                        </a>
  211.                                        <a class="button button_raised_secondary" href="#" @click.prevent="resetPhone">
  212.                                            Изменить номер
  213.                                        </a>        
  214.                                </div>
  215.                            </div>
  216.                            <div class="login__tabs-content-item" :class="{active : !loginByPhone}">
  217.                                <div class="login__inputs">
  218.                                    <div class="form-group">
  219.                                        <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)">
  220.                                        <span class="help-block" v-show="loginDataErrors.email && loginDataErrors.email.length">
  221.                                            {{loginDataErrors.email}}
  222.                                        </span>
  223.                                    </div>
  224.                                    <div class="form-group">
  225.                                        <input type="password" v-model="loginData.password" @blur="validateInput('password', $event)" class="form-input" :class="{'error': loginDataErrors.password && loginDataErrors.password.length > 0}" placeholder="Пароль">
  226.                                        <span class="help-block" v-show="loginDataErrors.password && loginDataErrors.password.length">
  227.                                            {{loginDataErrors.password}}
  228.                                        </span>
  229.                                    </div>
  230.                                </div>
  231.                                <div class="login__form-buttons">
  232.                                    <button class="button button_raised_accent" @click.prevent="loginAuth" data-method="auth">Войти</button>
  233.                                    <a href="#" class="cart__button button button_transparent" @click.prevent="isRegistration = true">
  234.                                        <div class="button__text">Зарегистрироваться</div>
  235.                                    </a>
  236.                                    <!-- <a href="#" class="login__form-link link" @click.prevent="isRegistration = true">Зарегистрироваться</a> -->
  237.                                    <a href="#" class="login__form-link link" @click.prevent="loginForgotPassword = true">Забыли пароль?</a>
  238.                                </div>
  239.  
  240.                            </div>
  241.                        </div>
  242.                    </div>
  243.                    <div class="login__form" v-if="isRegistration" style="padding: unset; width: unset; height: unset;">
  244.                        <h3 class="login__form-text" style="font-family: 'Roboto'; font-style: normal; font-weight: 400; width: 260px; font-size: 14px; line-height: 120%;">
  245.                            Узнать о преимуществах регистрации вы можете <span>
  246.                                <a class="link login__form-link" style="text-decoration-color: #ba4046;" href="/personal/login/">здесь</a>
  247.                            </span>
  248.                        </h3>
  249.    
  250.                            <div class="login__inputs">
  251.                                <div class="form-group">
  252.                                    <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}">
  253.                                    <span class="help-block" v-show="innData.name && !loginDataErrors.inn">
  254.                                        {{innData.name}}
  255.                                    </span>
  256.                                    <span class="help-block" v-show="loginDataErrors.inn && loginDataErrors.inn.length">
  257.                                        {{loginDataErrors.inn}}
  258.                                    </span>
  259.                                </div>
  260.                                <div class="form-group">
  261.                                    <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">
  262.                                    <span class="help-block" v-show="loginDataErrors.regEmail && loginDataErrors.regEmail.length">
  263.                                        {{loginDataErrors.regEmail}}
  264.                                    </span>
  265.                                </div>
  266.                                <div class="login__phone">
  267.                                    <div class="form-group">
  268.                                        <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 (___) ___-__-__">
  269.                                        <span class="help-block" v-show="loginDataErrors.regPhone && loginDataErrors.regPhone.length">
  270.                                            {{loginDataErrors.regPhone}}
  271.                                        </span>
  272.                                    </div>
  273.                                    <div class="form-group sms" v-show="registrationStep == 2">
  274.                                        <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">
  275.                                        <span class="help-block" style="padding-left: unset;" v-show="loginDataErrors.registrationCode && loginDataErrors.registrationCode.length">
  276.                                            {{loginDataErrors.registrationCode}}
  277.                                        </span>
  278.                                    </div>
  279.                                </div>
  280.                            </div>
  281.                  
  282.                        <div class="login__form-buttons">
  283.                            <label class="checkbox js-privacy-policy">
  284.                                <input type="checkbox" class="checkbox__input" @click="policy = !policy">
  285.                                <div class="checkbox__img">
  286.                                    <svg class="checkbox__img-pic">
  287.                                        <use xlink:href="/images/sprite.svg#check_box_outline_blank"></use>
  288.                                    </svg>
  289.                                    <svg class="checkbox__img-pic">
  290.                                        <use xlink:href="/images/sprite.svg#check_box"></use>
  291.                                    </svg>
  292.                                </div>
  293.                                <div class="checkbox__text">
  294.                                    Я прочитал <span @click.prevent="openPolicy">Политику безопасности</span> и согласен с условиями безопасности и обработки данных
  295.                                </div>
  296.                            </label>
  297.                            <button class="generate__button button button_raised_accent" type="submit" @click.prevent="registration" v-show="!isCodeSendedNow">
  298.                                <div class="button__text">Зарегистрироваться</div>
  299.                            </button>
  300.                            <button class="generate__button button button_outlined_white progress-btn" type="button" v-show="isCodeSendedNow">
  301.                                <svg viewBox="0 0 240 38" preserveAspectRatio="none" style="width: 311px;">
  302.                                    <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>
  303.                                </svg>
  304.                                <div class="button__text">Подождите...</div>
  305.                            </button>
  306.                            <a href="#" class="login__form-link link" @click.prevent="isRegistration = false">Вход на сайт</a>
  307.                        </div>
  308.                    </div>
  309.                    <div class="login__form" v-if="loginForgotPassword" style="padding: unset; width: unset; height: unset;">
  310.                        <div class="login__form-text">Если Вы по какой-то причине забыли пароль, не спешите
  311.                            огорчаться! Введите свой email и мы поможем Вам в восстановлении доступа.
  312.                        </div>
  313.                        <div class="login__inputs">
  314.                            <div class="form-group">
  315.                                <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">
  316.                                <span class="help-block" v-show="loginDataErrors.forgotPassword && loginDataErrors.forgotPassword.length">
  317.                                    {{loginDataErrors.forgotPassword}}
  318.                                </span>
  319.                            </div>
  320.                        </div>
  321.                        <div class="login__form-buttons">
  322.                            <button class="button button_raised_accent" @click.prevent="forgotPassword">
  323.                                Выслать пароль
  324.                            </button>
  325.                            <a href="#" class="login__form-link link" @click.prevent="loginForgotPassword = false">Назад</a>
  326.                        </div>
  327.                    </div>
  328.                </div>
  329.            </div>
  330.            <div class="modal modal__success active js-modal-auth" v-if="isModalSucess">
  331.                <div class="modal__close-mobile"><span @click.prevent="modalCloseNew('js-modal-auth')"></span></div>
  332.                <div class="modal__header">
  333.                    <a class="modal__close" href="#" @click.prevent="modalCloseNew('js-modal-auth')">
  334.                        <svg class="modal__close-img">
  335.                            <use xlink:href="/images/sprite.svg#clear"></use>
  336.                        </svg>
  337.                    </a>
  338.                </div>
  339.                <div class="modal__content">
  340.                    <img class="modal__content-pict" src="/images/modal/success.png" />
  341.                    <div class="modal__content-details">
  342.                        <div class="modal__content-title">
  343.                            {{modalSuccessData.title}}
  344.                        </div>
  345.                        <div class="modal__content-desc">
  346.                            {{modalSuccessData.desc}}
  347.                        </div>
  348.                    </div>
  349.                </div>
  350.            </div>
  351.        </div>
  352.    </section>
  353. </template>
  354.  
  355.            
  356. <div id="disc_label"></div>
  357.  
  358. <template id="disc_label_template">
  359.    <section class="discount_label">
  360.        <div class="overlay">
  361.            <div class="modal js-modal-discountLabel">
  362.            <div class="modal__close-mobile"><span onclick="modalClose('.js-modal-discountLabel'); return false;"></span></div>
  363.                <div class="modal__header">
  364.                                            <div class="modal__header-bg">
  365.                            <img src="/images/modal/disc_bg_3.png"/>
  366.                        </div>
  367.                                        <a class="modal__close" href="#" onclick="modalClose('.js-modal-discountLabel'); return false;">
  368.                        <svg class="modal__close-img">
  369.                            <use xlink:href="/images/sprite.svg#clear"></use>
  370.                        </svg>
  371.                    </a>
  372.                </div>
  373.                <div class="modal__content">
  374.                    <div class="modal__content-details">
  375.                        <div class="modal__content-title">
  376.                            Вы новый покупатель?
  377.                        </div>
  378.                        <div class="modal__content-desc">
  379.                                                            Мы рады вам и дарим скидку 3% на все ваши покупки в течение месяца!<br> Оформляйте заказы в личном кабинете на сайте Армед. *
  380.                                                    </div>
  381.                    </div>
  382.                    <div class="login__form" style="padding: 30px; width: unset; height: unset;">
  383.                        <div class="login__inputs">
  384.                            <div class="form-group">
  385.                                <input
  386.                                    type="number"
  387.                                    class="form-input"
  388.                                    placeholder="ИНН юридическго лица"
  389.                                    :disabled="registrationStep == 2"
  390.                                    v-model="loginData.inn"
  391.                                    @blur="validateInput('inn', $event)"
  392.                                    :class="{'error': loginDataErrors.inn && loginDataErrors.inn.length > 0, 'valid': loginData.inn && !loginDataErrors.inn}"
  393.                                >
  394.                                <span class="help-block" v-show="innData.name && !loginDataErrors.inn">
  395.                                    {{innData.name}}
  396.                                </span>
  397.                                <span class="help-block" v-show="loginDataErrors.inn && loginDataErrors.inn.length">
  398.                                    {{loginDataErrors.inn}}
  399.                                </span>
  400.                            </div>
  401.                            <div class="form-group">
  402.                                <input
  403.                                    type="email"
  404.                                    v-model="loginData.regEmail"
  405.                                    @blur="validateInput('regEmail', $event)"
  406.                                    class="form-input"
  407.                                    :disabled="registrationStep == 2 && !loginDataErrors.regEmail"
  408.                                    :class="{'error': loginDataErrors.regEmail && loginDataErrors.regEmail.length > 0}"
  409.                                    placeholder="E-Mail"
  410.                                >
  411.                                <span class="help-block" v-show="loginDataErrors.regEmail && loginDataErrors.regEmail.length">
  412.                                    {{loginDataErrors.regEmail}}
  413.                                </span>
  414.                            </div>
  415.                            <div class="login__phone" >
  416.                                                                    <div class="form-group">
  417.                                                                    <input
  418.                                        type="tel"
  419.                                        v-model="loginData.regPhone"
  420.                                        @blur="validateInput('regPhone', $event)"
  421.                                        :class="{'error': loginDataErrors.regPhone && loginDataErrors.regPhone.length > 0}"
  422.                                        :disabled="registrationStep == 2 && !loginDataErrors.regPhone"
  423.                                        class="form-input"
  424.                                        name="phone_m"
  425.                                        placeholder="+7 (___) ___-__-__"
  426.                                    >
  427.                                    <span class="help-block" v-show="loginDataErrors.regPhone && loginDataErrors.regPhone.length">
  428.                                        {{loginDataErrors.regPhone}}
  429.                                    </span>
  430.                                </div>
  431.                                <div class="form-group sms" v-show="registrationStep == 2">
  432.                                    <input
  433.                                        type="number"
  434.                                        v-model="loginData.registrationCode"
  435.                                        @blur="validateInput('registrationCode', $event)"
  436.                                        :class="{'error': loginDataErrors.registrationCode && loginDataErrors.registrationCode.length > 0}"
  437.                                        class="form-input"
  438.                                        placeholder="0000"
  439.                                        autocomplete="one-time-code"
  440.                                    >
  441.                                    <span class="help-block" style="padding-left: unset;" v-show="loginDataErrors.registrationCode && loginDataErrors.registrationCode.length">
  442.                                        {{loginDataErrors.registrationCode}}
  443.                                    </span>
  444.                                </div>
  445.                            </div>
  446.                        </div>
  447.                                                <div class="login__form-buttons" style="flex-direction: column;">
  448.                            <label class="checkbox js-privacy-policy">
  449.                                <input type="checkbox" class="checkbox__input" @click="policy = !policy">
  450.                                <div class="checkbox__img">
  451.                                    <svg class="checkbox__img-pic">
  452.                                        <use xlink:href="/images/sprite.svg#check_box_outline_blank"></use>
  453.                                    </svg>
  454.                                    <svg class="checkbox__img-pic">
  455.                                        <use xlink:href="/images/sprite.svg#check_box"></use>
  456.                                    </svg>
  457.                                </div>
  458.                                <div class="checkbox__text">
  459.                                    Я прочитал <span @click.prevent="openPolicy">Политику безопасности</span> и согласен с условиями безопасности и обработки данных
  460.                                </div>
  461.                            </label>
  462.                            <button class="generate__button button button_raised_accent" style="width: 309px;" type="submit" @click.prevent="registration" v-show="!isCodeSendedNow">
  463.                                <div class="button__text">Зарегистрироваться</div>
  464.                            </button>
  465.                            <button class="generate__button button button_outlined_white progress-btn" style="width: 309px;" type="button" v-show="isCodeSendedNow">
  466.                                <svg viewBox="0 0 240 38" preserveAspectRatio="none" style="width: 311px;">
  467.                                    <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>
  468.                                </svg>
  469.                                <div class="button__text">Подождите...</div>
  470.                            </button>
  471.                        </div>
  472.                    </div>
  473.                                            <div class="modal__content-tags">
  474.                            <span>* Только для юрлиц.</span>
  475.                        </div>
  476.                                    </div>
  477.            </div>
  478.        </div>
  479.    </section>
  480. </template>
  481.  
  482.            <header class="header ">
  483.                                    <div class="container container_header">
  484.                        <div class="header__row header__row_top">
  485.                            <div class="header__contacts">
  486.                                <a href="tel:84956362825" class="header__contacts-number">
  487.                                    8 (495) 636-28-25                                </a>
  488.                                <div class="header__contacts-text">только для юр.лиц</div>
  489.                            </div>
  490.                            <a class="header__logo" href="/">
  491.                                <img src="/images/restyle/common/logo.svg"
  492.                                    alt="ARMED" class="header__logo-img">
  493.                            </a>
  494.                            <nav class="header__navigation">
  495.                                <ul class="header__navigation-list">
  496.                                    
  497.                                                                        <li class="header__navigation-item">
  498.                                        <a class="header__navigation-link" href="/delivery/">Доставка</a>
  499.                                    </li>
  500.                                    <li class="header__navigation-item">
  501.                                        <a class="header__navigation-link" href="/service/">Сервис</a>
  502.                                    </li>
  503.                                    <li class="header__navigation-item">
  504.                                        <a class="header__navigation-link" href="/contacts/">Контакты</a>
  505.                                    </li>
  506.                                </ul>
  507.                            </nav>
  508.                        </div>
  509.                        <div class="header__row header__row_bottom">
  510.                            <div class="header__catalog js-catalog">
  511.                                <svg class="header__catalog-icon">
  512.                                    <use xlink:href="/images/sprite.svg#menu"></use>
  513.                                </svg>
  514.                                <div class="header__catalog-text">Каталог продукции</div>
  515.                                
  516. <div id="lazy_load_catalog">
  517. <ul class="catalog-popup" style="width:265px;" >
  518.                      
  519.  
  520. <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">
  521.       <a class="catalog-popup__link" href="/category/medicinskoe-oborudovanie/">Медицинское оборудование</a>
  522.                                  <div class="subcatalog-popup">
  523.                                    <div class="subcatalog-popup__title">Медицинское оборудование</div>
  524.                                    <div class="subcatalog-popup__row">
  525.                                        <ul class="subcatalog-popup__list"
  526.  
  527. >
  528. <li class="subcatalog-popup__item">
  529. <a class="catalog-card" href="/category/kislorodnoe-oborudovanie/">
  530. <div class="catalog-card__img">
  531. <img
  532. class="catalog-card__pic"
  533. 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"
  534. />
  535. </div>
  536. <div class="catalog-card_text">Кислородное оборудование</div>
  537. </a>
  538. <ul class="subcatalog-popup__list__subitem"  >
  539. <li class="subcatalog-popup__item__subitem">
  540. <a class="catalog-card__subitem" href="/category/koncentratory-kisloroda/">
  541. <div class="catalog-card_text">Концентраторы кислорода</div>
  542. </a>
  543. </li>
  544. <li class="subcatalog-popup__item__subitem">
  545. <a class="catalog-card__subitem" href="/category/koktejlery/">
  546. <div class="catalog-card_text">Коктейлеры</div>
  547. </a>
  548. </li>
  549. <li class="subcatalog-popup__item__subitem">
  550. <a class="catalog-card__subitem" href="/category/soputstvuyushhie-tovary/">
  551. <div class="catalog-card_text">Сопутствующие товары для концентраторов кислорода</div>
  552. </a>
  553. </li>
  554. <li class="subcatalog-popup__item__subitem">
  555. <a class="catalog-card__subitem" href="/category/soputstvuyushchie_tovary_dlya_prigotovleniya_kislorodnykh_kokteyley/">
  556. <div class="catalog-card_text">Сопутствующие товары для приготовления кислородных коктейлей</div>
  557. </a>
  558. </li>
  559.  
  560. </ul>
  561.  
  562. </li>
  563. <li class="subcatalog-popup__item">
  564. <a class="catalog-card" href="/category/recirkulyatory-obluchateli/">
  565. <div class="catalog-card__img">
  566. <img
  567. class="catalog-card__pic"
  568. src="/upload/iblock/c00/fe8fvubvd1tpp5t98bxwluehvlcnjmvg/Mask-Group-_4_.png"
  569. />
  570. </div>
  571. <div class="catalog-card_text">Рециркуляторы-облучатели</div>
  572. </a>
  573. <ul class="subcatalog-popup__list__subitem"  >
  574. <li class="subcatalog-popup__item__subitem">
  575. <a class="catalog-card__subitem" href="/category/podstavki-dlya-recirkulyatorov/">
  576. <div class="catalog-card_text">Подставки для рециркуляторов</div>
  577. </a>
  578. </li>
  579. <li class="subcatalog-popup__item__subitem">
  580. <a class="catalog-card__subitem" href="/category/retsirkulyatory/">
  581. <div class="catalog-card_text">Рециркуляторы</div>
  582. </a>
  583. </li>
  584.  
  585. </ul>
  586.  
  587. </li>
  588. <li class="subcatalog-popup__item">
  589. <a class="catalog-card" href="/category/ingalyator_nebulayzer/">
  590. <div class="catalog-card__img">
  591. <img
  592. class="catalog-card__pic"
  593. src="/upload/iblock/ef6/j4eszbm5ggklt5uevqy223kbuh6s51td/Mask%20Group%20%282%29.png"
  594. />
  595. </div>
  596. <div class="catalog-card_text">Ингалятор-небулайзер</div>
  597. </a>
  598.  
  599. </li>
  600. <li class="subcatalog-popup__item">
  601. <a class="catalog-card" href="/category/pulsoksimetry/">
  602. <div class="catalog-card__img">
  603. <img
  604. class="catalog-card__pic"
  605. src="/upload/iblock/a1d/yji7iz052nxyjq2xvqnuvzbt5ze03cs6/Pulsoksimetry.png"
  606. />
  607. </div>
  608. <div class="catalog-card_text">Пульсоксиметры</div>
  609. </a>
  610.  
  611. </li>
  612. <li class="subcatalog-popup__item">
  613. <a class="catalog-card" href="/category/uvlazhniteli-kisloroda/">
  614. <div class="catalog-card__img">
  615. <img
  616. class="catalog-card__pic"
  617. 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"
  618. />
  619. </div>
  620. <div class="catalog-card_text">Увлажнители кислорода</div>
  621. </a>
  622.  
  623. </li>
  624. <li class="subcatalog-popup__item">
  625. <a class="catalog-card" href="/category/lampy-ultrafioletovye/">
  626. <div class="catalog-card__img">
  627. <img
  628. class="catalog-card__pic"
  629. 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"
  630. />
  631. </div>
  632. <div class="catalog-card_text">Лампы ультрафиолетовые бактерицидные</div>
  633. </a>
  634.  
  635. </li>
  636. <li class="subcatalog-popup__item">
  637. <a class="catalog-card" href="/category/otsasyvateli-xirurgicheskie/">
  638. <div class="catalog-card__img">
  639. <img
  640. class="catalog-card__pic"
  641. 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"
  642. />
  643. </div>
  644. <div class="catalog-card_text">Отсасыватели хирургические медицинские</div>
  645. </a>
  646.  
  647. </li>
  648. <li class="subcatalog-popup__item">
  649. <a class="catalog-card" href="/category/dozatory-shpricevye-i-nasosy-infuzionnye/">
  650. <div class="catalog-card__img">
  651. <img
  652. class="catalog-card__pic"
  653. src="/upload/iblock/db1/4e9tvaj158v03gz4pe58l7b1fcvsm1gi/Dozatory_shpritsevye_i_nasosy_infuzionnye.png"
  654. />
  655. </div>
  656. <div class="catalog-card_text">Дозаторы шприцевые и насосы инфузионные</div>
  657. </a>
  658.  
  659. </li>
  660. <li class="subcatalog-popup__item">
  661. <a class="catalog-card" href="/category/monitory/">
  662. <div class="catalog-card__img">
  663. <img
  664. class="catalog-card__pic"
  665. src="/upload/iblock/086/c66j41b1qa9trcahtci7t3ogpa8wo3ag/Monitory_prikrovatnye.png"
  666. />
  667. </div>
  668. <div class="catalog-card_text">Мониторы прикроватные</div>
  669. </a>
  670.  
  671. </li>
  672. <li class="subcatalog-popup__item">
  673. <a class="catalog-card" href="/category/negatoskopy/">
  674. <div class="catalog-card__img">
  675. <img
  676. class="catalog-card__pic"
  677. 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"
  678. />
  679. </div>
  680. <div class="catalog-card_text">Негатоскопы</div>
  681. </a>
  682.  
  683. </li>
  684. <li class="subcatalog-popup__item">
  685. <a class="catalog-card" href="/category/svetilniki-xirurgicheskie/">
  686. <div class="catalog-card__img">
  687. <img
  688. class="catalog-card__pic"
  689. 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"
  690. />
  691. </div>
  692. <div class="catalog-card_text">Светильники хирургические</div>
  693. </a>
  694.  
  695. </li>
  696. <li class="subcatalog-popup__item">
  697. <a class="catalog-card" href="/category/operacionnye-stoly/">
  698. <div class="catalog-card__img">
  699. <img
  700. class="catalog-card__pic"
  701. 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"
  702. />
  703. </div>
  704. <div class="catalog-card_text">Операционные столы</div>
  705. </a>
  706.  
  707. </li>
  708. <li class="subcatalog-popup__item">
  709. <a class="catalog-card" href="/category/oftalmologicheskoe-oborudovanie/">
  710. <div class="catalog-card__img">
  711. <img
  712. class="catalog-card__pic"
  713. 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"
  714. />
  715. </div>
  716. <div class="catalog-card_text">Офтальмологическое оборудование</div>
  717. </a>
  718.  
  719. </li>
  720. <li class="subcatalog-popup__item">
  721. <a class="catalog-card" href="/category/termometry/">
  722. <div class="catalog-card__img">
  723. <img
  724. class="catalog-card__pic"
  725. 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"
  726. />
  727. </div>
  728. <div class="catalog-card_text">Термометры</div>
  729. </a>
  730.  
  731. </li>
  732. <li class="subcatalog-popup__item">
  733. <a class="catalog-card" href="/category/apparaty_dlya_normalizatsii_sna/">
  734. <div class="catalog-card__img">
  735. <img
  736. class="catalog-card__pic"
  737. src="/upload/iblock/1a6/ai7ilj1xmy2l018e2m6ctxwuhs2gounu/Mask-Group-_3_.png"
  738. />
  739. </div>
  740. <div class="catalog-card_text">Аппараты для нормализации сна</div>
  741. </a>
  742.  
  743. </li>
  744. <li class="subcatalog-popup__item">
  745. <a class="catalog-card" href="/category/dozimetr_radiatsii/">
  746. <div class="catalog-card__img">
  747. <img
  748. class="catalog-card__pic"
  749. src="/upload/iblock/4fb/mml2kfcgif2dr7bsmrdb4ylh4yfkh4vz/Dozimetr_radiatsii.png"
  750. />
  751. </div>
  752. <div class="catalog-card_text">Дозиметр радиации</div>
  753. </a>
  754.  
  755. </li>
  756. <li class="subcatalog-popup__item">
  757. <a class="catalog-card" href="/category/parovye_sterilizatory/">
  758. <div class="catalog-card__img">
  759. <img
  760. class="catalog-card__pic"
  761. src="/upload/iblock/1f0/wzt3l0rqq04itjnv3rsq9e026mhj4ffw/Mask-Group-_1_.png"
  762. />
  763. </div>
  764. <div class="catalog-card_text">Паровые стерилизаторы</div>
  765. </a>
  766.  
  767. </li>
  768. <li class="subcatalog-popup__item">
  769. <a class="catalog-card" href="/category/tonometry/">
  770. <div class="catalog-card__img">
  771. <img
  772. class="catalog-card__pic"
  773. src="/upload/iblock/ea0/1u3txq1ivj5gp5pjs8peafntkb4tbhr9/Mask_Group-_1_.png"
  774. />
  775. </div>
  776. <div class="catalog-card_text">Тонометры</div>
  777. </a>
  778.  
  779. </li>
  780.  
  781. </ul>
  782.                                    </div>
  783.                                </div>
  784.                            </li>
  785.  <li class="catalog-popup__item">
  786.       <a class="catalog-popup__link" href="/category/laboratornoe-oborudovanie/">Лабораторное оборудование</a>
  787.                                  <div class="subcatalog-popup">
  788.                                    <div class="subcatalog-popup__title">Лабораторное оборудование</div>
  789.                                    <div class="subcatalog-popup__row">
  790.                                        <ul class="subcatalog-popup__list"
  791. style="width:320px"
  792.  
  793. >
  794. <li class="subcatalog-popup__item">
  795. <a class="catalog-card" href="/category/akvadistillyatory/">
  796. <div class="catalog-card__img">
  797. <img
  798. class="catalog-card__pic"
  799. src="/upload/iblock/427/qytp8x2xblmxc4fwm93toa0cz4cd4p1g/1.png"
  800. />
  801. </div>
  802. <div class="catalog-card_text">Аквадистилляторы</div>
  803. </a>
  804.  
  805. </li>
  806. <li class="subcatalog-popup__item">
  807. <a class="catalog-card" href="/category/tsentrifugi/">
  808. <div class="catalog-card__img">
  809. <img
  810. class="catalog-card__pic"
  811. src="/upload/iblock/db8/h2non8x7f4ku0hwjse1w9r8m2j18vzhq/TSentrifugi.png"
  812. />
  813. </div>
  814. <div class="catalog-card_text">Центрифуги</div>
  815. </a>
  816.  
  817. </li>
  818.  
  819. </ul>
  820.                                    </div>
  821.                                </div>
  822.                            </li>
  823.  <li class="catalog-popup__item">
  824.       <a class="catalog-popup__link" href="/category/medicinskaya-mebel/">Медицинская мебель</a>
  825.                                  <div class="subcatalog-popup">
  826.                                    <div class="subcatalog-popup__title">Медицинская мебель</div>
  827.                                    <div class="subcatalog-popup__row">
  828.                                        <ul class="subcatalog-popup__list"
  829. style="width:320px"
  830.  
  831. >
  832. <li class="subcatalog-popup__item">
  833. <a class="catalog-card" href="/category/krovati-medicinskie-funkcionalnye/">
  834. <div class="catalog-card__img">
  835. <img
  836. class="catalog-card__pic"
  837. src="/upload/iblock/470/dsk2e8jnj0jhxbpndecy9154nr8qpgzx/1.png"
  838. />
  839. </div>
  840. <div class="catalog-card_text">Кровати механические </div>
  841. </a>
  842.  
  843. </li>
  844. <li class="subcatalog-popup__item">
  845. <a class="catalog-card" href="/category/krovati-medicinskie-funkcionalnye-elektricheskie/">
  846. <div class="catalog-card__img">
  847. <img
  848. class="catalog-card__pic"
  849. src="/upload/iblock/52b/0n4euqyowcfj1batxul0zfpkeokepm9k/2.png"
  850. />
  851. </div>
  852. <div class="catalog-card_text">Кровати электрические</div>
  853. </a>
  854.  
  855. </li>
  856. <li class="subcatalog-popup__item">
  857. <a class="catalog-card" href="/category/matrasy-dlya-funkcionalnyx-krovatej/">
  858. <div class="catalog-card__img">
  859. <img
  860. class="catalog-card__pic"
  861. src="/upload/iblock/52b/nkic7ee15kowmrs9duf435td07nqtieg/3.png"
  862. />
  863. </div>
  864. <div class="catalog-card_text">Матрасы для функциональных кроватей</div>
  865. </a>
  866.  
  867. </li>
  868. <li class="subcatalog-popup__item">
  869. <a class="catalog-card" href="/category/soputstvuyushhie-tovary-medicinskaya-mebel/">
  870. <div class="catalog-card__img">
  871. <img
  872. class="catalog-card__pic"
  873. src="/upload/iblock/205/2szolcds7cv64xm3tb8as6exne9m37u8/4.png"
  874. />
  875. </div>
  876. <div class="catalog-card_text">Сопутствующие товары для кроватей</div>
  877. </a>
  878.  
  879. </li>
  880.  
  881. </ul>
  882.                                    </div>
  883.                                </div>
  884.                            </li>
  885.  <li class="catalog-popup__item">
  886.       <a class="catalog-popup__link" href="/category/texnicheskie-sredstva-reabilitacii/">Технические средства реабилитации</a>
  887.                                  <div class="subcatalog-popup">
  888.                                    <div class="subcatalog-popup__title">Технические средства реабилитации</div>
  889.                                    <div class="subcatalog-popup__row">
  890.                                        <ul class="subcatalog-popup__list"
  891.  
  892. >
  893. <li class="subcatalog-popup__item">
  894. <a class="catalog-card" href="/category/kresla-kolyaski-s-sanitarnym-osnashheniem/">
  895. <div class="catalog-card__img">
  896. <img
  897. class="catalog-card__pic"
  898. src="/upload/iblock/dc7/mladbomvg1fxsgoe4qx4a60pbzqsksn7/Kresla_s_sanitarnym_osnashcheniem.png"
  899. />
  900. </div>
  901. <div class="catalog-card_text">Кресла с санитарным оснащением</div>
  902. </a>
  903. <ul class="subcatalog-popup__list__subitem"  >
  904. <li class="subcatalog-popup__item__subitem">
  905. <a class="catalog-card__subitem" href="/category/kresla_stulya_s_sanitarnym_osnashcheniem_s_kolesami/">
  906. <div class="catalog-card_text">Кресла с санитарным оснащением (с колесами)</div>
  907. </a>
  908. </li>
  909. <li class="subcatalog-popup__item__subitem">
  910. <a class="catalog-card__subitem" href="/category/kresla_stulya_s_sanitarnym_osnashcheniem_bez_koles/">
  911. <div class="catalog-card_text">Кресла с санитарным оснащением (без колес)</div>
  912. </a>
  913. </li>
  914.  
  915. </ul>
  916.  
  917. </li>
  918. <li class="subcatalog-popup__item">
  919. <a class="catalog-card" href="/category/xodunki/">
  920. <div class="catalog-card__img">
  921. <img
  922. class="catalog-card__pic"
  923. src="/upload/iblock/594/vufb401fpzcr7mmv6srlppo57wzfopy3/Group%20959x2.png"
  924. />
  925. </div>
  926. <div class="catalog-card_text">Ходунки</div>
  927. </a>
  928.  
  929. </li>
  930. <li class="subcatalog-popup__item">
  931. <a class="catalog-card" href="/category/kresla-invalidnye-detskie/">
  932. <div class="catalog-card__img">
  933. <img
  934. class="catalog-card__pic"
  935. src="/upload/iblock/19b/spqgouowtecw65mv2tnexbpva2ma3b7f/8.png"
  936. />
  937. </div>
  938. <div class="catalog-card_text">Товары для детей с ДЦП</div>
  939. </a>
  940. <ul class="subcatalog-popup__list__subitem"  >
  941. <li class="subcatalog-popup__item__subitem">
  942. <a class="catalog-card__subitem" href="/category/kresla_kolyaski_dlya_detey_s_dtsp/">
  943. <div class="catalog-card_text">Кресла-коляски для детей с дцп</div>
  944. </a>
  945. </li>
  946.  
  947. </ul>
  948.  
  949. </li>
  950. <li class="subcatalog-popup__item">
  951. <a class="catalog-card" href="/category/matracy-i-podushki-protivoprolezhnevye/">
  952. <div class="catalog-card__img">
  953. <img
  954. class="catalog-card__pic"
  955. src="/upload/iblock/f34/cep5tj9zggqfo2gjw3zjyxfz0wt38o1u/2.png"
  956. />
  957. </div>
  958. <div class="catalog-card_text">Противопролежневые системы</div>
  959. </a>
  960. <ul class="subcatalog-popup__list__subitem"  >
  961. <li class="subcatalog-popup__item__subitem">
  962. <a class="catalog-card__subitem" href="/category/matracy-protivoproleznevye-aceistye-s-kompressorom/">
  963. <div class="catalog-card_text">Матрацы противопролежневые ячеистые</div>
  964. </a>
  965. </li>
  966. <li class="subcatalog-popup__item__subitem">
  967. <a class="catalog-card__subitem" href="/category/matracy-protivoproleznevye-trubcatye-s-kompressorom/">
  968. <div class="catalog-card_text">Матрацы противопролежневые трубчатые</div>
  969. </a>
  970. </li>
  971. <li class="subcatalog-popup__item__subitem">
  972. <a class="catalog-card__subitem" href="/category/protivoprolezhnevye_podushki/">
  973. <div class="catalog-card_text">Противопролежневые подушки</div>
  974. </a>
  975. </li>
  976.  
  977. </ul>
  978.  
  979. </li>
  980. <li class="subcatalog-popup__item">
  981. <a class="catalog-card" href="/category/kresla-kolyaski-mexanicheskie/">
  982. <div class="catalog-card__img">
  983. <img
  984. class="catalog-card__pic"
  985. src="/upload/iblock/3a3/ocnyjerf5jakf9m4uwrt82zukplgnfy6/Kresla_kolyaski_mekhanicheskie.png"
  986. />
  987. </div>
  988. <div class="catalog-card_text">Кресла-коляски механические</div>
  989. </a>
  990.  
  991. </li>
  992. <li class="subcatalog-popup__item">
  993. <a class="catalog-card" href="/category/kresla-invalidnye-elektricheskie/">
  994. <div class="catalog-card__img">
  995. <img
  996. class="catalog-card__pic"
  997. src="/upload/iblock/def/wieit6v7g7u2h9gj6qn6y5yzzqbk3n5m/Kresla_kolyaski_elektricheskie.png"
  998. />
  999. </div>
  1000. <div class="catalog-card_text">Кресла-коляски электрические</div>
  1001. </a>
  1002.  
  1003. </li>
  1004. <li class="subcatalog-popup__item">
  1005. <a class="catalog-card" href="/category/trosti-i-kostili/">
  1006. <div class="catalog-card__img">
  1007. <img
  1008. class="catalog-card__pic"
  1009. src="/upload/iblock/634/yveino49eehaekx6qexbeqhgvtis5q4v/6.png"
  1010. />
  1011. </div>
  1012. <div class="catalog-card_text">Трости</div>
  1013. </a>
  1014.  
  1015. </li>
  1016. <li class="subcatalog-popup__item">
  1017. <a class="catalog-card" href="/category/tovary_dlya_ukhoda_i_gigieny/">
  1018. <div class="catalog-card__img">
  1019. <img
  1020. class="catalog-card__pic"
  1021. src="/upload/iblock/821/orlsc9h16w13zfko30j8anyswivn59wz/10.png"
  1022. />
  1023. </div>
  1024. <div class="catalog-card_text">Товары для ухода и гигиены</div>
  1025. </a>
  1026. <ul class="subcatalog-popup__list__subitem"  >
  1027. <li class="subcatalog-popup__item__subitem">
  1028. <a class="catalog-card__subitem" href="/category/naduvnye_vanny/">
  1029. <div class="catalog-card_text">Надувные ванны</div>
  1030. </a>
  1031. </li>
  1032.  
  1033. </ul>
  1034.  
  1035. </li>
  1036. <li class="subcatalog-popup__item">
  1037. <a class="catalog-card" href="/category/aksessuary_dlya_kresel_kolyasok/">
  1038. <div class="catalog-card__img">
  1039. <img
  1040. class="catalog-card__pic"
  1041. src="/upload/iblock/197/1j4bpc57frx8szrfkw8b3r2q40e5umaw/9.png"
  1042. />
  1043. </div>
  1044. <div class="catalog-card_text">Аксессуары для кресел-колясок</div>
  1045. </a>
  1046.  
  1047. </li>
  1048. <li class="subcatalog-popup__item">
  1049. <a class="catalog-card" href="/category/skutery_elektricheskie_chetyrekhkolesnye/">
  1050. <div class="catalog-card__img">
  1051. <img
  1052. class="catalog-card__pic"
  1053. src="/upload/iblock/8f0/fxck3kaxcgn46z9zjp0rkole240d0kxd/Skutery_elektricheskie_chetyrekhkolesnye.png"
  1054. />
  1055. </div>
  1056. <div class="catalog-card_text">Скутеры электрические четырехколесные</div>
  1057. </a>
  1058.  
  1059. </li>
  1060. <li class="subcatalog-popup__item">
  1061. <a class="catalog-card" href="/category/kostyli/">
  1062. <div class="catalog-card__img">
  1063. <img
  1064. class="catalog-card__pic"
  1065. src="/upload/iblock/b21/55asbqi4kuirge8zjg7w0b25zsz86olu/Group%20959%20%281%29.png"
  1066. />
  1067. </div>
  1068. <div class="catalog-card_text">Костыли</div>
  1069. </a>
  1070.  
  1071. </li>
  1072.  
  1073. </ul>
  1074.                                    </div>
  1075.                                </div>
  1076.                            </li>
  1077.  <li class="catalog-popup__item">
  1078.       <a class="catalog-popup__link" href="/category/tovary-dlya-sporta-i-otdyxa/">Товары для спорта и отдыха</a>
  1079.                                  <div class="subcatalog-popup">
  1080.                                    <div class="subcatalog-popup__title">Товары для спорта и отдыха</div>
  1081.                                    <div class="subcatalog-popup__row">
  1082.                                        <ul class="subcatalog-popup__list"
  1083. style="width:320px"
  1084.  
  1085. >
  1086. <li class="subcatalog-popup__item">
  1087. <a class="catalog-card" href="/category/trenazhery/">
  1088. <div class="catalog-card__img">
  1089. <img
  1090. class="catalog-card__pic"
  1091. src="/upload/iblock/be7/v9lff8jyolyijmz8ras2d22o9f2ueh77/1.png"
  1092. />
  1093. </div>
  1094. <div class="catalog-card_text">Велотренажеры для реабилитации</div>
  1095. </a>
  1096.  
  1097. </li>
  1098.  
  1099. </ul>
  1100.                                    </div>
  1101.                                </div>
  1102.                            </li>
  1103.  <li class="catalog-popup__item">
  1104.       <a class="catalog-popup__link" href="/category/zapchasti/">Запчасти</a>
  1105.                                  <div class="subcatalog-popup">
  1106.                                    <div class="subcatalog-popup__title">Запчасти</div>
  1107.                                    <div class="subcatalog-popup__row">
  1108.                                        <ul class="subcatalog-popup__list"
  1109. style="width:320px"
  1110.  
  1111. >
  1112. <li class="subcatalog-popup__item">
  1113. <a class="catalog-card" href="/category/zapchasti_dlya_obluchateley_retsirkulyatorov_meditsinskikh/">
  1114. <div class="catalog-card__img">
  1115. <img
  1116. class="catalog-card__pic"
  1117. src="/upload/iblock/d8a/825hsbt4mshva4xjafml9e0z1091i6d9/1.png"
  1118. />
  1119. </div>
  1120. <div class="catalog-card_text">Запчасти для облучателей-рециркуляторов медицинских</div>
  1121. </a>
  1122.  
  1123. </li>
  1124. <li class="subcatalog-popup__item">
  1125. <a class="catalog-card" href="/category/zapchasti_dlya_kislorodnogo_oborudovaniya/">
  1126. <div class="catalog-card__img">
  1127. <img
  1128. class="catalog-card__pic"
  1129. src="/upload/iblock/489/a68azk7w71khn9uezbt7v8kyxx265sbv/1.png"
  1130. />
  1131. </div>
  1132. <div class="catalog-card_text">Запчасти для кислородного оборудования</div>
  1133. </a>
  1134.  
  1135. </li>
  1136. <li class="subcatalog-popup__item">
  1137. <a class="catalog-card" href="/category/zapchasti_dlya_otsasyvateley/">
  1138. <div class="catalog-card__img">
  1139. <img
  1140. class="catalog-card__pic"
  1141. src="/upload/iblock/210/ahogpjrmg1aw6214lp451in01ta41lpt/6.png"
  1142. />
  1143. </div>
  1144. <div class="catalog-card_text">Запчасти для отсасывателей</div>
  1145. </a>
  1146.  
  1147. </li>
  1148.  
  1149. </ul>
  1150.                                    </div>
  1151.                                </div>
  1152.                            </li>
  1153. </ul>
  1154. </div>
  1155. <br>
  1156.                            </div>
  1157.                            <a href="/" class="header__logo-minified">
  1158.                                <img src="/images/restyle/common/logo.svg"
  1159.                                    class="header__logo-minified-img" alt="ARMED">
  1160.                            </a>
  1161.                            <form class="header__search search js-headersearch" action="">
  1162.                                <input class="search__input js-headersearch-input" type="search" name="headersearch"
  1163.                                    autocomplete="off">
  1164.                                                                    <div class="search__placeholder js-search-placeholder">
  1165.                                        Что Вы ищете? Например Рециркулятор
  1166.                                        <!-- <a href="/category/retsirkulyatory/">Рециркулятор</a>, <a href="/category/koncentratory-kisloroda/">Концентратор кислорода</a> -->
  1167.                                    </div>
  1168.                                                                <svg class="search__icon">
  1169.                                    <use xlink:href="/images/sprite.svg#search"></use>
  1170.                                </svg>
  1171.                                <svg class="search__icon-clear">
  1172.                                    <use xlink:href="/images/sprite.svg#clear"></use>
  1173.                                </svg>
  1174.  
  1175.                                <ul class="search__helper" id="search__list_helper">
  1176.                                </ul>
  1177.                            </form>
  1178.                            <div class="header__profile">
  1179.                                <ul class="header__profile-list">
  1180.                                    <li class="header__profile-item">
  1181.                                                                                    <a class="header__profile-link header__profile-link_auth js-profile-user" href="#"
  1182.                                                onclick="modalOpen('.js-modal-auth'); return false;">
  1183.                                                <svg class="header__profile-icon">
  1184.                                                    <use xlink:href="/images/sprite.svg#account_circle"></use>
  1185.                                                </svg>
  1186.                                                <div class="header__profile-text">Вход/Регистрация</div>
  1187.                                            </a>
  1188.                                                                            </li>
  1189.                                    <li class="header__profile-item">
  1190.                                        <a class="header__profile-link" href="/compare/">
  1191.                                            <svg class="header__profile-icon">
  1192.                                                <use xlink:href="/images/sprite.svg#outline-compare"></use>
  1193.                                            </svg>
  1194.                                            <div class="header__profile-counter" id="comparecount">0</div>
  1195.                                            <div class="tooltip tooltip_bottom tooltip_compare">Сравнение</div>
  1196.                                        </a>
  1197.                                    </li>
  1198.                                    
  1199.  
  1200.    <div id="basket_header_vue">
  1201.        <li class="header__profile-item">
  1202.            <a class="header__profile-link" href="/personal/">
  1203.                <svg class="header__profile-icon">
  1204.                    <use xlink:href="/images/sprite.svg#outline-shopping_cart"></use>
  1205.                </svg>
  1206.                <div class="header__profile-counter">0</div>
  1207.                <div class="tooltip tooltip_bottom tooltip_basket">Корзина</div>
  1208.            </a>
  1209.        </li>
  1210.    </div>
  1211.  
  1212.    <template id="basket_header_vue_template">
  1213.        <div>
  1214.            <li class="header__profile-item" v-if="userCart.basketData">
  1215.                <a class="header__profile-link" href="/personal/">
  1216.                    <svg class="header__profile-icon">
  1217.                        <use xlink:href="/images/sprite.svg#outline-shopping_cart"></use>
  1218.                    </svg>
  1219.                    <div class="header__profile-counter" v-if="userCart.basketData.basketCount">{{ userCart.basketData.basketCount }}</div>
  1220.                    <div class="header__profile-counter" v-else>0</div>
  1221.                    <div class="tooltip tooltip_bottom tooltip_basket">Корзина</div>
  1222.                </a>
  1223.                <div class="header__popup header__popup_card" v-if="userCart.basketData.basketItems && userCart.basketData.basketItems.length > 0">
  1224.                    <div class="header__popup-list">
  1225.                        <div class="header__popup-card" v-for="item in userCart.basketData.basketItems" :key="item.ID">
  1226.                            <img :src="item.DETAIL_PICTURE" alt="" class="header__popup-card-img">
  1227.                            <div class="header__popup-card-content">
  1228.                                <div class="header__popup-card-title">
  1229.                                    {{ item.NAME }}
  1230.                                </div>
  1231.                                <div class="header__popup-card-price">
  1232.                                    <span>{{ item.TOTAL_PRICE }} ₽</span>
  1233.                                </div>
  1234.                                <svg class="header__popup-card-close" @click.prevent="deleteProductFromBasket(item.ID)">
  1235.                                    <use xlink:href="/images/sprite.svg#clear"></use>
  1236.                                </svg>
  1237.                            </div>
  1238.                        </div>
  1239.                    </div>
  1240.                    <div class="header__popup__total">
  1241.                        <div class="header__popup__total-text">Итого</div>
  1242.                        <div class="header__popup__total-price">{{ userCart.basketData.basketPrice.toLocaleString('ru-RU') }} ₽</div>
  1243.                    </div>
  1244.                </div>
  1245.            </li>
  1246.            <li class="header__profile-item" v-else>
  1247.                <a class="header__profile-link" href="/personal/">
  1248.                    <svg class="header__profile-icon">
  1249.                        <use xlink:href="/images/sprite.svg#outline-shopping_cart"></use>
  1250.                    </svg>
  1251.                    <div class="header__profile-counter">0</div>
  1252.                    <div class="tooltip tooltip_bottom tooltip_basket">Корзина</div>
  1253.                </a>
  1254.            </li>
  1255.        </div>
  1256.    </template>
  1257.                                </ul>
  1258.                            </div>
  1259.                        </div>
  1260.                                                    <div class="message message_for_kp_nonauth" hidden>
  1261.                                <div class="message__content">
  1262.                                    Покупка товара <b>на сайте</b> возможна только
  1263.                                    для юридических лиц
  1264.                                </div>
  1265.                                <a href="/contacts#mp/" class="message__link link">Я физ. лицо</a>
  1266.                                <div class="message__box"></div>
  1267.                            </div>
  1268.                                            </div>
  1269.                                            <a class="discountLabel" href="#" onclick="modalOpen('.js-modal-discountLabel'); return false;">
  1270.                            <svg class="header__catalog-icon">
  1271.                                <use xlink:href="/images/sprite.svg#percent"></use>
  1272.                            </svg>
  1273.                            <span>Пссс, тут скидки</span>
  1274.                        </a>
  1275.                                    
  1276.                            </header>
  1277.            
  1278.            
  1279.                <div class="wrapper-main">
  1280.    <section class="statuscode">
  1281.        <div class="container container_statuscode">
  1282.            <div class="statuscode__left">
  1283.                <div class="statuscode__img">
  1284.                    <img class="statuscode__img-pic" src="/images/new-armed/404/recirc.png">
  1285.                </div>
  1286.            </div>
  1287.            <div class="statuscode__right">
  1288.                <div class="statuscode__title">
  1289.                        <img class="statuscode__title-img" src="/images/new-armed/404/404.png">
  1290.                </div>
  1291.                <div class="statuscode__content">
  1292.                        <p>Возможно, запрашиваемая страница была удалена, перенесена или был указан неправильный адрес.</p>
  1293.                        <p>Пожалуйста, воспользуйтесь формой поиска, чтобы найти интересующую вас информацию. Или переходите на главную страницу – там много интересного.</p>
  1294.                    <ul>
  1295.                        <li>Вернуться на <a href="/">главную</a></li>
  1296.                    </ul>
  1297.                </div>
  1298.            </div>
  1299.        </div>
  1300.    </section>
  1301. </div>
  1302.  
  1303.  
  1304.  
  1305. </div><!--end row-->
  1306.                    <footer class="footer">
  1307.            <div class="footer__top">
  1308.                <div class="container">
  1309.                    <div class="footer__row">
  1310.                        <div class="footer__col"> <a href="/" class="footer__logo">
  1311.                                <img src="/images/restyle/common/logo.svg" alt="" class="footer__logo-img">
  1312.                            </a>
  1313.                            <div class="footer__copyright">Copyright 2004-2024 © Армед</div>
  1314.                        
  1315.                            <div class="footer__copyright">ОБРАЩАЕМ ВАШЕ ВНИМАНИЕ, что данный интернет-сайт и материалы,<br> размещенные на нем, носят исключительно информационный характер и <br>ни при каких условиях не являются публичной офертой, определяемой<br> положениями статьи 437 Гражданского кодекса РФ.</div>
  1316.                        </div>
  1317.                        <div class="footer__col">                          
  1318.                            <ul class="footer__list">
  1319.                                    <li class="footer__item">
  1320.                                        <a href="/vacancy/" class="footer__link">Вакансии</a>
  1321.                                    </li>
  1322.                                    <li class="footer__item">
  1323.                                        <a href="/news/" class="footer__link">Новости</a>
  1324.                                    </li>
  1325.                                    <li class="footer__item">
  1326.                                        <a href="/payment-info/" class="footer__link">Информация об оплате</a>
  1327.                                    </li>
  1328.                                    <li class="footer__item">
  1329.                                        <a href="/novelty/" class="footer__link">Новинки</a>
  1330.                                    </li>
  1331.                                    <li class="footer__item">
  1332.                                        <a href="/legal-info/" class="footer__link">Правовая информация</a>
  1333.                                    </li>
  1334.                                    <li class="footer__item">
  1335.                                        <a href="/edo/" class="footer__link">ЭДО</a>
  1336.                                    </li>
  1337.                                
  1338.                            </ul>
  1339.                        </div>
  1340.                        <div class="footer__col">
  1341.                        <ul class="footer__socials">
  1342.                                <li class="footer__socials-item"><a class="footer__socials-link" href="https://vk.com/armed_ru"
  1343.                                                                    target="_blank" rel="nofollow noopener noreferrer">
  1344.                                        <svg class="footer__socials-icon">
  1345.                                            <use xlink:href="/images/sprite.svg#vk"></use>
  1346.                                        </svg>
  1347.                                    </a></li>
  1348.                                <li class="footer__socials-item"><a class="footer__socials-link" href="https://ok.ru/armed"
  1349.                                                                    target="_blank" rel="nofollow noopener noreferrer">
  1350.                                        <svg class="footer__socials-icon">
  1351.                                            <use xlink:href="/images/sprite.svg#ok"></use>
  1352.                                        </svg>
  1353.                                    </a></li>
  1354.                                <li class="footer__socials-item"><a class="footer__socials-link"
  1355.                                                                    href="https://www.youtube.com/channel/UCxAJGUeZlYF-u_79COMs6Rw"
  1356.                                                                    target="_blank" rel="nofollow noopener noreferrer">
  1357.                                        <svg class="footer__socials-icon">
  1358.                                            <use xlink:href="/images/sprite.svg#yt"></use>
  1359.                                        </svg>
  1360.                                    </a></li>
  1361.                                    <li class="footer__socials-item"><a class="footer__socials-link"
  1362.                                                                    href="https://t.me/+SRW3s7FAyvQwMjcy"
  1363.                                                                    target="_blank" rel="nofollow noopener noreferrer">
  1364.                                        <svg class="footer__socials-icon">
  1365.                                            <use xlink:href="/images/sprite.svg#tg"></use>
  1366.                                        </svg>
  1367.                                    </a></li>
  1368.                            </ul>
  1369.                            <div class="footer__contacts">
  1370.                                <a class="footer__contacts-number" href="tel:84956362825">8 (495) 636-28-25</a>
  1371.                                <a class="footer__contacts-number" href="mailto:sales@armed.ru">sales@armed.ru</a>
  1372.                                <div class="footer__contacts-text">только для юр.лиц</div>
  1373.                            </div>                            
  1374.                        </div>
  1375.                    </div>
  1376.                </div>    
  1377.            </div>
  1378.            <div class="footer__bottom">
  1379.                <div class="container">
  1380.                    <div class="footer__alarm">ИМЕЮТСЯ ПРОТИВОПОКАЗАНИЯ, ПЕРЕД ИСПОЛЬЗОВАНИЕМ НЕОБХОДИМО ОЗНАКОМИТЬСЯ С
  1381.                        ИНСТРУКЦИЕЙ И ПРОКОНСУЛЬТИРОВАТЬСЯ С ВРАЧОМ
  1382.                    </div>
  1383.                </div>
  1384.            </div>
  1385.        </footer>
  1386. </div><!--end .container.bx-content-section-->
  1387. </div><!--end .workarea-->
  1388. </div> <!-- //bx-wrapper -->
  1389.    
  1390. <div id="popup-kp_vue"></div>
  1391.  
  1392. <template id="popup-kp_vue_template">
  1393.    <transition name="fade">
  1394.        <div>
  1395.            <div
  1396.                class="popup-kp"
  1397.                @click.prevent="openPopup"
  1398.                v-show="userCart.basketData?.basketCount > 0"
  1399.            >
  1400.                <div class="popup-content">
  1401.                    <a
  1402.                        href="#"
  1403.                        class="popup-close"
  1404.                        @click.prevent="closePopup"
  1405.                    >
  1406.                        <svg>
  1407.                            <use xlink:href="/images/sprite.svg#clear"></use>
  1408.                        </svg>
  1409.                    </a>
  1410.                    <div class="popup-title">Ваше КП уже готово!</div>
  1411.                    <div class="popup-desc">Нажмите, чтобы скачать коммерческое предложение прямо сейчас</div>
  1412.                    <div class="popup-button button" @click.prevent="downloadKP">
  1413.                        <div class="button-text">Скачать</div>
  1414.                    </div>
  1415.                </div>
  1416.            </div>
  1417.            <div class="overlay" id="stub__overlay_telegram">
  1418.                <div class="modal modal_kp-feedback js-modal-stub">
  1419.                    <div class="modal__close-mobile"><span onclick="modalClose('.js-modal-stub'); return false;"></span></div>
  1420.                    <div class="modal__header">
  1421.                        <h3 class="modal__title">Оставьте контактные данные</h3>
  1422.                        <a class="modal__close" href="#" onclick="modalClose('.js-modal-stub'); return false;">
  1423.                            <svg class="modal__close-img">
  1424.                                <use xlink:href="/images/sprite.svg#clear"></use>
  1425.                            </svg>
  1426.                        </a>
  1427.                    </div>
  1428.                    <div class="modal__content">
  1429.                        <div class="modal__row">
  1430.                            <div class="modal__content">
  1431.                                <div class="modal__content-title">
  1432.                                    <span>Никакого спама!</span><br>
  1433.                                    Только один звонок - нам интересно Ваше мнение!
  1434.                                </div>
  1435.  
  1436.                                <div class="modal__content-inputs">
  1437.                                    <div class="form-group modal__content-input">
  1438.                                        <input
  1439.                                            type="text"
  1440.                                            class="form-input"
  1441.                                            :class="{'error': formErrors.fio && formErrors.fio.length > 0}"
  1442.                                            v-model="fio"
  1443.                                            @blur="validateInput('fio', $event)"
  1444.                                            placeholder="Фамилия Имя Отчество"
  1445.                                        >
  1446.                                        <span class="help-block" v-show="formErrors.fio && formErrors.fio.length">
  1447.                                            {{formErrors.fio}}
  1448.                                        </span>
  1449.                                    </div>
  1450.                                    <div class="form-group modal__content-input">
  1451.                                        <input
  1452.                                            type="tel"
  1453.                                            name="phone"
  1454.                                            class="form-input"
  1455.                                            :class="{'error': formErrors.phone && formErrors.phone.length > 0}"
  1456.                                            @blur="validateInput('phone', $event)"
  1457.                                            v-model="phone"
  1458.                                            placeholder="+7 (___) ___-__-__"
  1459.                                        >
  1460.                                        <span class="help-block" v-show="formErrors.phone && formErrors.phone.length">
  1461.                                            {{formErrors.phone}}
  1462.                                        </span>
  1463.                                    </div>
  1464.                                    <label class="checkbox js-privacy-policy"  style="margin-bottom: 34px">
  1465.                                        <input type="checkbox" class="checkbox__input" @click="policy = !policy">
  1466.                                        <div class="checkbox__img">
  1467.                                            <svg class="checkbox__img-pic">
  1468.                                                <use xlink:href="/images/sprite.svg#check_box_outline_blank"></use>
  1469.                                            </svg>
  1470.                                            <svg class="checkbox__img-pic">
  1471.                                                <use xlink:href="/images/sprite.svg#check_box"></use>
  1472.                                            </svg>
  1473.                                        </div>
  1474.                                        <div class="checkbox__text">
  1475.                                            Я прочитал <span @click.prevent="openPolicy">Политику безопасности</span> и согласен с условиями безопасности и обработки данных
  1476.                                        </div>
  1477.                                    </label>
  1478.                                </div>
  1479.                            </div>
  1480.                        </div>
  1481.                        <div class="button button_raised_accent" @click.prevent="createFromModal">
  1482.                            <div class="button__text">Получить КП</div>
  1483.                        </div>
  1484.                    </div>
  1485.                </div>
  1486.            </div>
  1487.        </div>
  1488.    </transition>
  1489. </template>
  1490.  
  1491. <!-- <font color="#FF0000">'danya:confirm_changes' is not a component</font> -->
  1492.  
  1493.    <a
  1494.        href="#"
  1495.        class="go_to_top"
  1496.        style="
  1497.            position: fixed;
  1498.            right: 100px;
  1499.            bottom: 100px;
  1500.            z-index: 100;
  1501.            width: 60px;
  1502.            height: 60px;
  1503.            background: rgba(141, 141, 141, 0.5);
  1504.            border: 1.52588px solid rgba(241, 241, 244, 0.5);
  1505.            border-radius: 50px;
  1506.        "  
  1507.        onclick= "$('body, html').animate({scrollTop:0}, '800', function() { console.log('Finished animating'); });"
  1508.    >
  1509.        <svg class="arrow__img">
  1510.            <use xlink:href="/images/sprite.svg#chevron_up" style="fill: #fff;"></use>
  1511.        </svg>
  1512.    </a>
  1513.  
  1514. <!-- Yandex.Metrika counter -->
  1515.    <noscript><div><img src="https://mc.yandex.ru/watch/9638098" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
  1516.  <!-- /Yandex.Metrika counter -->
  1517.    <!-- Google Tag Manager (noscript) -->
  1518.                <!-- End Google Tag Manager (noscript) -->
  1519. <!-- Google Analytics -->
  1520.         <!-- End Google Analytics -->
  1521.  
  1522.  
  1523.      
  1524. <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>
  1525. <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>
  1526. <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>
  1527. <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']);
  1528. </script>
  1529. <script>BX.Runtime.registerExtension({'name':'ls','namespace':'window','loaded':true});</script>
  1530. <script>BX.Runtime.registerExtension({'name':'ui.vue','namespace':'BX','loaded':true});</script>
  1531. <script>BX.Runtime.registerExtension({'name':'ui.dexie','namespace':'BX.Dexie3','loaded':true});</script>
  1532. <script>BX.Runtime.registerExtension({'name':'main.md5','namespace':'BX','loaded':true});</script>
  1533. <script>BX.Runtime.registerExtension({'name':'ui.vue.vuex','namespace':'BX','loaded':true});</script>
  1534. <script>BX.Runtime.registerExtension({'name':'local.vuex','namespace':'BX','loaded':true});</script>
  1535. <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>
  1536. <script src="/bitrix/js/pull/protobuf/protobuf.min.js?163152768176433"></script>
  1537. <script src="/bitrix/js/pull/protobuf/model.min.js?163152768114190"></script>
  1538. <script src="/bitrix/js/main/core/core_promise.min.js?16470918432490"></script>
  1539. <script src="/bitrix/js/rest/client/rest.client.min.js?17061267829240"></script>
  1540. <script src="/bitrix/js/pull/client/pull.client.min.js?170610845749554"></script>
  1541. <script src="/bitrix/js/main/core/core_ls.min.js?16470918437365"></script>
  1542. <script src="/bitrix/js/ui/vue/vue2/prod/dist/vue.bundle.min.js?1683138906113213"></script>
  1543. <script src="/bitrix/js/ui/dexie/dist/dexie3.bundle.min.js?170610849988274"></script>
  1544. <script src="/bitrix/js/main/md5/dist/md5.bundle.min.js?164709184310569"></script>
  1545. <script src="/bitrix/js/ui/vue/vuex/dist/vuex.bundle.min.js?170610849836862"></script>
  1546. <script src="https://cdn.jsdelivr.net/npm/suggestions-jquery@21.6.0/dist/js/jquery.suggestions.min.js"></script>
  1547. <script src="https://api-maps.yandex.ru/2.1/?apikey=218d4dd8-1a11-4e20-a56b-c9b624f4d03a&lang=ru_RU"></script>
  1548. <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js"></script>
  1549. <script src="https://cdn.jsdelivr.net/gh/TSedlar/pseudo-styler@1.0.8/pseudostyler.js"></script>
  1550. <script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script>
  1551. <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>
  1552. <script>BX.setCSSList(['/local/js/local/vuex/dist/application.bundle.css','/local/dist/css/app.css']);</script>
  1553. <script type="text/javascript">
  1554. (function () {
  1555. "use strict";
  1556.  
  1557. var counter = function ()
  1558. {
  1559. var cookie = (function (name) {
  1560. var parts = ("; " + document.cookie).split("; " + name + "=");
  1561. if (parts.length == 2) {
  1562. try {return JSON.parse(decodeURIComponent(parts.pop().split(";").shift()));}
  1563. catch (e) {}
  1564. }
  1565. })("BITRIX_CONVERSION_CONTEXT_s1");
  1566.  
  1567. if (cookie && cookie.EXPIRE >= BX.message("SERVER_TIME"))
  1568. return;
  1569.  
  1570. var request = new XMLHttpRequest();
  1571. request.open("POST", "/bitrix/tools/conversion/ajax_counter.php", true);
  1572. request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  1573. request.send(
  1574. "SITE_ID="+encodeURIComponent("s1")+
  1575. "&sessid="+encodeURIComponent(BX.bitrix_sessid())+
  1576. "&HTTP_REFERER="+encodeURIComponent(document.referrer)
  1577. );
  1578. };
  1579.  
  1580. if (window.frameRequestStart === true)
  1581. BX.addCustomEvent("onFrameDataReceived", counter);
  1582. else
  1583. BX.ready(counter);
  1584. })();
  1585. </script>
  1586. <script  src="/bitrix/cache/js/s1/eshop_bootstrap_v4/template_6b38db523d48df1b8923d70381c7d85f/template_6b38db523d48df1b8923d70381c7d85f_v1.js?17137839991545220"></script>
  1587. <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>
  1588.  
  1589.  
  1590. <script>
  1591.        const application = new BX.VuexDemo();
  1592.        const store = application.getStore();
  1593.  
  1594.        window.addEventListener('load', () => {
  1595.            store.dispatch('userCart/getUserCart');
  1596.        });
  1597.    </script>
  1598. <script>
  1599.    BX.ready(function() {
  1600.        function initialState() {
  1601.            return {
  1602.                modal_name: 'js-modal-variation',
  1603.                product_data: {
  1604.                    parent_photo: '',
  1605.                    parent_info: {
  1606.                        PROPS: {
  1607.                            TITLE_FOR_SITE: ''
  1608.                        }
  1609.                    },
  1610.                    price: {
  1611.                        price: 0,
  1612.                        pricePrev: 0
  1613.                    },
  1614.                    variations: [],
  1615.                },
  1616.                selectedProps: {},
  1617.                disabledProps: {
  1618.                    ids: [],
  1619.                    data: []
  1620.                },
  1621.                photo_for_show: '',
  1622.                max_quantity: 1,
  1623.                quantity: 1,
  1624.                button_text: 'В корзину',
  1625.                selectedVariationID: 0,
  1626.                only_mp: false,
  1627.                is_logged: false            }
  1628.        }
  1629.        
  1630.        BX.Vue.createApp({
  1631.            el: '#product_card_modal_vue',
  1632.            template: '#product_card_modal_vue_template',
  1633.            store,
  1634.            components: {
  1635.  
  1636.            },
  1637.            data() {
  1638.                return initialState();
  1639.            },
  1640.            mounted() {
  1641.  
  1642.            },
  1643.            computed: {
  1644.                ...BX.Vuex.mapGetters({
  1645.                    variationID: 'variationModal/variationIDGetter'
  1646.                }),
  1647.            },
  1648.            created() {
  1649.  
  1650.            },
  1651.            watch: {
  1652.                variationID(id) {
  1653.                    this.resetVariation();
  1654.                    
  1655.                    this.modal_name = 'js-modal-variation-' + id;
  1656.  
  1657.                    setTimeout(() => {
  1658.                        this.openCurrentModal();
  1659.                    }, 1);
  1660.  
  1661.                    this.getProductData();
  1662.                },
  1663.                selectedVariationID(id) {
  1664.                    this.getProductButtonsAction(id);
  1665.                },
  1666.            },
  1667.            methods: {
  1668.                getProductButtonsAction(id) {
  1669.                    BX.ajax.runComponentAction('danya.product_card:product_buttons', 'getProductButtons', {
  1670.                        mode: 'class',
  1671.                        data: {
  1672.                            PRODUCT: this.variationID,
  1673.                            selectedVariationID: id,
  1674.                            NEED_COMPARE: false
  1675.                        }
  1676.                    }).then((response) => {
  1677.                        $('#product__buttons_vue_' + id).html('');
  1678.                        $('#product__buttons_vue_' + id).append(response.data);
  1679.                    }, (err) => {
  1680.                        console.log('error, ' + err);
  1681.                    });
  1682.                },
  1683.                resetVariation() {
  1684.                    Object.assign(this.$data, initialState());
  1685.                },
  1686.                getProductData() {
  1687.                    BX.ajax({
  1688.                        url: '/local/api/getProductData.php',
  1689.                        data: {
  1690.                            product_id: this.variationID
  1691.                        },
  1692.                        method: 'POST',
  1693.                        dataType: 'json',
  1694.                        onsuccess: (data) => {
  1695.                            this.product_data = data;
  1696.                            this.photo_for_show = data.parent_photo;
  1697.                        },
  1698.                        onfailure: function(){
  1699.                            
  1700.                        }
  1701.                    });
  1702.                },
  1703.                onSelectProp(parent_prop, child_prop) {
  1704.                    this.selectedProps[parent_prop.ID] = child_prop;
  1705.  
  1706.                    let all_props_length = Object.keys(this.product_data.variations.PROPS).length;
  1707.                    let selected_props_length = Object.keys(this.selectedProps).length;
  1708.  
  1709.                    let props_s = structuredClone(this.product_data.variations.PROPS);
  1710.  
  1711.                    if (Object.keys(this.selectedProps).length == 1) {
  1712.                        delete props_s[child_prop.ID];
  1713.                    } else {
  1714.                        Object.entries(this.selectedProps).forEach(([key, value]) => {
  1715.                            if (key != child_prop.ID && (selected_props_length != all_props_length)) {
  1716.                                delete props_s[key];
  1717.                            }
  1718.                        })
  1719.                    }
  1720.  
  1721.                    Object.entries(this.product_data.variations.DATA).forEach(([p_key, product]) => {
  1722.                        let coincidences = [];
  1723.  
  1724.                        Object.entries(this.selectedProps).forEach(([key, value]) => {
  1725.                            let path = this.getKeys(product.PROPS_TREE, value.VALUE_ENUM_ID);
  1726.  
  1727.                            if (path[0]) {
  1728.                                coincidences.push(path);
  1729.                            }
  1730.                        })
  1731.  
  1732.                        if (coincidences.length > 0) { // todo && coincidences.length != all_props_length
  1733.                            Object.entries(props_s).forEach(([key, value]) => {
  1734.                                let enum_id = product.PROPS[key].VALUE_ENUM_ID;
  1735.                                let path_s = this.getKeys(value.VALUE, enum_id);
  1736.  
  1737.                                if (path_s[0]) {
  1738.                                    delete value.VALUE[path_s[0].path[0]];
  1739.                                }
  1740.                            })
  1741.                        }
  1742.  
  1743.                        if (coincidences.length == all_props_length) {
  1744.                            let selected_variation = product;
  1745.  
  1746.                            this.max_quantity = selected_variation.QUANTITY;
  1747.  
  1748.                            if (this.max_quantity > 0) {
  1749.                                this.button_text = 'В корзину';
  1750.  
  1751.                                this.quantity = 1;
  1752.                            } else {
  1753.                                this.button_text = 'Нет в наличии';
  1754.  
  1755.                                this.quantity = 0;
  1756.                            }
  1757.  
  1758.                            if (selected_variation.PHOTO[0]) {
  1759.                                this.photo_for_show = selected_variation.PHOTO[0];
  1760.                            }
  1761.  
  1762.                            this.product_data.price.price = selected_variation.PRODUCT_PRICE;
  1763.                            this.product_data.price.pricePrev = selected_variation.PRODUCT_PRICE_OLD;
  1764.                            this.selectedVariationID = selected_variation.ID;
  1765.                            this.only_mp = selected_variation.IS_ONLY_ON_MP;
  1766.  
  1767.                            window.updateCardButtonState();
  1768.  
  1769.                            this.$forceUpdate();
  1770.                        }
  1771.                    })
  1772.  
  1773.                    let temp_ids = [];
  1774.                    let temp_data = {};
  1775.  
  1776.                    Object.entries(props_s).forEach(([key, value]) => {
  1777.                        Object.entries(value.VALUE).forEach(([key2, value2]) => {
  1778.                            temp_ids.push(value2.VALUE_ENUM_ID);
  1779.                            temp_data[key] = value;
  1780.                        })
  1781.                    })
  1782.  
  1783.                    this.disabledProps = {
  1784.                        ids: temp_ids,
  1785.                        data: temp_data
  1786.                    };
  1787.                },
  1788.                onImageSrcBroken(e) {
  1789.                    this.photo_for_show = this.product_data.parent_photo;
  1790.                },
  1791.                priceSet (num){
  1792.                    return num ? `${(+num).toLocaleString()} ${'₽'}` : '';
  1793.                },
  1794.                checkDisabledProps(val) {
  1795.                    return this.disabledProps.ids.includes(val.VALUE_ENUM_ID);
  1796.                },
  1797.                closeCurrentModal() {
  1798.                    modalClose('.' + this.modal_name);
  1799.                },
  1800.                openCurrentModal() {
  1801.                    modalOpen('.' + this.modal_name);
  1802.                },
  1803.                getKeys(obj, val, path = []) {
  1804.                    var objects = [];
  1805.  
  1806.                    for (var i in obj) {
  1807.                        // clone the path
  1808.                        var newPath = path.slice();
  1809.                        if (!obj.hasOwnProperty(i)) {
  1810.                        continue;
  1811.                        }
  1812.                        if (typeof obj[i] === "object") {
  1813.                        newPath.push(i);
  1814.                        objects = objects.concat(this.getKeys(obj[i], val, newPath));
  1815.                        } else if (obj[i] === val) {
  1816.                        objects.push({ key: i, path: newPath });
  1817.                        }
  1818.                    }
  1819.                    
  1820.                    return objects;
  1821.                },
  1822.                changedQuantity(e) {
  1823.                    let new_quantity = e.target.value;
  1824.  
  1825.                    if (new_quantity > this.max_quantity) {
  1826.                        this.quantity = this.max_quantity;
  1827.                    } else {
  1828.                        if (new_quantity < 1) {
  1829.                            new_quantity = 1;
  1830.                        }
  1831.  
  1832.                        this.quantity = new_quantity;
  1833.                    }
  1834.  
  1835.                    console.log(new_quantity);
  1836.  
  1837.                    this.$forceUpdate();
  1838.                },
  1839.                changeQuantityInBasket(action) {
  1840.                    if (action == 'plus') {
  1841.                        this.quantity++;
  1842.  
  1843.                        if (this.quantity > this.max_quantity) {
  1844.                            this.quantity = this.max_quantity;
  1845.                        }
  1846.                    }
  1847.  
  1848.                    if (action == 'minus') {
  1849.                        if (this.quantity <= 1) {
  1850.                            return;
  1851.                        }
  1852.  
  1853.                        this.quantity--;
  1854.                    }
  1855.  
  1856.                    this.$forceUpdate();
  1857.                },
  1858.            },
  1859.        });
  1860.    })
  1861.  
  1862. </script>
  1863. <script>
  1864.    BX.ready(function() {
  1865.        BX.Vue.createApp({
  1866.            el: '#auth_vue',
  1867.            template: '#auth_vue_template',
  1868.            components: {
  1869.  
  1870.            },
  1871.            data() {
  1872.                return {
  1873.                    isModalSucess: false,
  1874.                    modalSuccessData: {
  1875.                        title: 'Успешно!',
  1876.                        desc: ''
  1877.                    },
  1878.                    isRegistration: false,
  1879.                    loginByPhone: true,
  1880.                    loginForgotPassword: false,
  1881.                    authByPhoneStep: 1,
  1882.                    authByPhoneCode: '',
  1883.                    registrationCode: false,
  1884.                    registrationStep: 1,
  1885.                    isCodeSendedNow: false,
  1886.                    policy: false,
  1887.                    sms_code: '',
  1888.                    logFromReg: false,
  1889.                    loginData: {},
  1890.                    innData: {},
  1891.                    loginDataErrors: {},
  1892.                    loginDataValidation: {
  1893.                        password: {
  1894.                            required: true
  1895.                        },
  1896.                        inn: {
  1897.                            validator: (val) => {
  1898.                                if (!this.checkInnShort(val)) {
  1899.                                    this.innData = {};
  1900.  
  1901.                                    return 'Введите корректный ИНН.';
  1902.                                }
  1903.  
  1904.                                let url = "https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/party";
  1905.                                let token = "0199725dd4e04841993816a84804bf7ad193887c";
  1906.                                let query = val;
  1907.  
  1908.                                let options = {
  1909.                                    method: "POST",
  1910.                                    mode: "cors",
  1911.                                    headers: {
  1912.                                        "Content-Type": "application/json",
  1913.                                        "Accept": "application/json",
  1914.                                        "Authorization": "Token " + token
  1915.                                    },
  1916.                                    body: JSON.stringify({
  1917.                                        query: query,
  1918.                                        count: 1
  1919.                                    })
  1920.                                }
  1921.  
  1922.                                fetch(url, options)
  1923.                                    .then(response => response.text())
  1924.                                    .then(result => {
  1925.                                        if (JSON.parse(result)['suggestions'].length < 1) {
  1926.                                            this.loginDataErrors.inn = 'Введенный ИНН не был найден.';
  1927.  
  1928.                                            this.$forceUpdate();
  1929.                                        } else {
  1930.                                            this.loginDataErrors.inn = '';
  1931.  
  1932.                                            let data = JSON.parse(result)['suggestions'][0]['data'];
  1933.                                            if (data['state']['status']=='LIQUIDATED'){
  1934.                                                this.loginDataErrors.inn = 'Данное юр лицо ликвидировано.';
  1935.                                                this.$forceUpdate();
  1936.                                            }
  1937.                                            let name = (data['name']['short_with_opf']) ? data['name']['short_with_opf'] : data['name']['full'];
  1938.  
  1939.                                            this.innData.name = name;
  1940.  
  1941.                                            this.innData['inn'] = val;
  1942.                                            this.innData['name'] = name;
  1943.                                            this.innData['ogrn'] = data['ogrn'];
  1944.                                            this.innData['kpp'] = data['kpp'];
  1945.                                            this.innData['okved'] = data['okved'];
  1946.                                            this.innData['address'] = data.address?.value;
  1947.  
  1948.                                            this.$forceUpdate();
  1949.                                        }
  1950.                                    })
  1951.                                    .catch(error => console.log("error", error));
  1952.                            }
  1953.                        },
  1954.                        fio: {
  1955.                            validator: function(val) {
  1956.                                const l = val.split(' ').length;
  1957.                                if (l < 2) {
  1958.                                    return 'ФИО должно состоять минимум из 2 слов';
  1959.                                }
  1960.                                if (l > 3) {
  1961.                                    return 'ФИО должно состоять максимум из 3 слов';
  1962.                                }
  1963.                            },
  1964.                        },
  1965.                        registrationCode: {
  1966.                            validator: function(val) {
  1967.                                if (val.length != 4) {
  1968.                                    return 'Код должен состоять из 4 цифр.';
  1969.                                }
  1970.                            },
  1971.                        },
  1972.                        phone: {
  1973.                            validator: function(val) {
  1974.                                const re = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
  1975.  
  1976.                                if (!re.test(String(val).toLowerCase())) {
  1977.                                    return 'Заполните форматом +7 (___) ___-__-__';
  1978.                                }
  1979.                            },
  1980.                            max: 18,
  1981.                        },
  1982.                        regPhone: {
  1983.                            validator: function(val) {
  1984.                                const re = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
  1985.  
  1986.                                if (!re.test(String(val).toLowerCase())) {
  1987.                                    return 'Заполните форматом +7 (___) ___-__-__';
  1988.                                }
  1989.                            },
  1990.                        },
  1991.                        email: {
  1992.                            validator: function(val) {
  1993.                                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,}))$/;
  1994.  
  1995.                                if (!re.test(String(val).toLowerCase())) {
  1996.                                    return 'Email введён не правильно';
  1997.                                }
  1998.                            },
  1999.                        },
  2000.                        forgotPassword: {
  2001.                            validator: function(val) {
  2002.                                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,}))$/;
  2003.  
  2004.                                if (!re.test(String(val).toLowerCase())) {
  2005.                                    return 'Email введён не правильно';
  2006.                                }
  2007.                            },
  2008.                        },
  2009.                        regEmail: {
  2010.                            validator: function(val) {
  2011.                                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,}))$/;
  2012.  
  2013.                                if (!re.test(String(val).toLowerCase())) {
  2014.                                    return 'Email введён не правильно';
  2015.                                }
  2016.                            },
  2017.                        },
  2018.                        passport: {
  2019.                            validator: function(val) {
  2020.                                if (val.length !== 10) {
  2021.                                    return 'Нужно ввести 10 цифр серии и номера паспорта без пробела';
  2022.                                }
  2023.                            },
  2024.                            max: 10,
  2025.                        },
  2026.                    }
  2027.                };
  2028.            },
  2029.            mounted() {
  2030.                this.maskPhone('input[name="phone_m"]');
  2031.  
  2032.                this.$Bitrix.eventEmitter.subscribe('m_action', this.changeIsRegistration);
  2033.            },
  2034.            created() {
  2035.  
  2036.            },
  2037.            watch: {
  2038.                isRegistration(val) {
  2039.                    setTimeout(() => {
  2040.                        this.maskPhone('input[name="phone_m"]');
  2041.                    }, 1);
  2042.                },
  2043.                sms_code(val) {
  2044.                    if (this.loginDataErrors.phone) {
  2045.                        if (val) {
  2046.                            this.loginDataErrors.phone = '';
  2047.                        }
  2048.                    }
  2049.  
  2050.                    if (val.length == 4) {
  2051.                        const inputs = document.querySelectorAll(".form__pincode > input");
  2052.  
  2053.                        inputs[0].blur();
  2054.  
  2055.                        this.authByPhone();
  2056.                    }
  2057.                }
  2058.            },
  2059.            methods: {
  2060.                resetPhone() {
  2061.                    this.authByPhoneStep = 1;
  2062.                    this.loginData.phone = '';
  2063.                    this.loginDataErrors.phone = '';
  2064.                    this.sms_code = '';
  2065.                },
  2066.                openPolicy() {
  2067.                    window.open('/legal-info/', '_blank');
  2068.                },
  2069.                changeIsRegistration(event) {
  2070.                    let isRegistrationData = event.getData().isRegistration;
  2071.  
  2072.                    this.isRegistration = (isRegistrationData == 'registration') ? true : false;
  2073.  
  2074.                    this.$forceUpdate();
  2075.                },
  2076.                modalCloseNew(modalName) {
  2077.                    modalClose('.' + modalName);
  2078.  
  2079.                    setTimeout(() => {
  2080.                        this.isModalSucess = false;
  2081.                    }, 1000);
  2082.                },
  2083.                loginAuth() {
  2084.                    if (this.loginDataErrors['email'] || !this.loginData['email']) {
  2085.                        alertify.notify('Укажите корректный E-Mail.', 'error');
  2086.  
  2087.                        return false;
  2088.                    }
  2089.  
  2090.                    if (!this.loginData['password']) {
  2091.                        alertify.notify('Укажите пароль.', 'error');
  2092.  
  2093.                        return false;
  2094.                    }
  2095.  
  2096.                    let dataAuth = {
  2097.                        email: this.loginData['email'],
  2098.                        pass: this.loginData['password']
  2099.                    }
  2100.  
  2101.                    BX.ajax({
  2102.                        url: '/personal/ajax.php',
  2103.                        data: {
  2104.                            method: 'auth',
  2105.                            data: dataAuth
  2106.                        },
  2107.                        method: 'POST',
  2108.                        dataType: 'json',
  2109.                        onsuccess: (data) => {
  2110.                            if (data['TYPE'] == "ERROR") {
  2111.                                alertify.notify(data['MESSAGE'], 'error');
  2112.  
  2113.                                return false;
  2114.                            }
  2115.  
  2116.                            ym(9638098, 'reachGoal', 'login');
  2117.                            window.location.reload();
  2118.                        },
  2119.                        onfailure: function() {
  2120.  
  2121.                        }
  2122.                    });
  2123.                },
  2124.                onlyNumbers(v) {
  2125.                    const val = v.target.value.replace(/[^0-9]/g, "");
  2126.                    this.sms_code = val;
  2127.                },
  2128.                forgotPassword() {
  2129.                    if (this.loginDataErrors['forgotPassword'] || !this.loginData['forgotPassword']) {
  2130.                        alertify.notify('Укажите корректный E-Mail.', 'error');
  2131.  
  2132.                        return false;
  2133.                    }
  2134.  
  2135.                    BX.ajax({
  2136.                        url: '/personal/ajax.php',
  2137.                        data: {
  2138.                            method: 'forgot_pass',
  2139.                            data: this.loginData['forgotPassword']
  2140.                        },
  2141.                        method: 'POST',
  2142.                        dataType: 'json',
  2143.                        onsuccess: (data) => {
  2144.                            if (data['STATUS'] == 200) {
  2145.                                this.modalSuccessData.desc = data['MESSAGE']
  2146.                                this.isModalSucess = true;
  2147.  
  2148.                                return false;
  2149.                            } else {
  2150.                                this.loginDataErrors['forgotPassword'] = data['MESSAGE'];
  2151.                            }
  2152.  
  2153.                            this.$forceUpdate();
  2154.                        },
  2155.                        onfailure: function() {
  2156.  
  2157.                        }
  2158.                    });
  2159.                },
  2160.                authByPhone() {
  2161.                    if ((this.loginDataErrors['phone'] || !this.loginData['phone']) && this.authByPhoneStep == 1) {
  2162.                        this.loginDataErrors.phone = 'Укажите корректный телефон.';
  2163.  
  2164.                        return false;
  2165.                    }
  2166.  
  2167.                    if (this.authByPhoneStep == 1) {
  2168.                        BX.ajax({
  2169.                            url: '/personal/ajax.php',
  2170.                            data: {
  2171.                                method: 'checkphone_auth',
  2172.                                phone: this.loginData['phone']
  2173.                            },
  2174.                            method: 'POST',
  2175.                            dataType: 'json',
  2176.                            onsuccess: (data) => {
  2177.                                if (data['STATUS'] == 200) {
  2178.                                    alertify.notify('Укажите код который пришёл Вам на телефон.', 'success');
  2179.  
  2180.                                    setTimeout(() => {
  2181.                                        const inputs = document.querySelectorAll(".form__pincode > input");
  2182.  
  2183.                                        inputs[0].focus()
  2184.                                    }, 1);
  2185.  
  2186.                                    this.authByPhoneStep = 2;
  2187.                                } else {
  2188.                                    this.loginDataErrors.phone = data['MESSAGE'];
  2189.                                }
  2190.  
  2191.                                this.$forceUpdate();
  2192.                            },
  2193.                            onfailure: function() {
  2194.  
  2195.                            }
  2196.                        });
  2197.                    }
  2198.  
  2199.                    if (this.authByPhoneStep == 2) {
  2200.                        let code = this.sms_code;
  2201.  
  2202.                        BX.ajax({
  2203.                            url: '/personal/ajax.php',
  2204.                            data: {
  2205.                                method: 'checkphone_auth',
  2206.                                phone: this.loginData['phone'],
  2207.                                code: code
  2208.                            },
  2209.                            method: 'POST',
  2210.                            dataType: 'json',
  2211.                            onsuccess: (data) => {
  2212.                                if (data['STATUS'] == 200) {
  2213.                                    window.location.reload();
  2214.                                } else if (data['STATUS'] == 2000) {
  2215.                                    this.loginData['regPhone'] = this.loginData['phone'];
  2216.                                    this.loginData['registrationCode'] = code;
  2217.                                    this.isRegistration = true;
  2218.                                    this.logFromReg = true;
  2219.                                } else {
  2220.                                    this.loginDataErrors.phone = data['MESSAGE'];
  2221.  
  2222.                                    this.sms_code = '';
  2223.                                }
  2224.  
  2225.                                this.$forceUpdate();
  2226.                            },
  2227.                            onfailure: function() {
  2228.  
  2229.                            }
  2230.                        });
  2231.                    }
  2232.                },
  2233.                registration() {
  2234.                    if (this.loginDataErrors['inn'] || !this.loginData['inn']) {
  2235.                        alertify.notify('Укажите корректный ИНН.', 'error');
  2236.  
  2237.                        return false;
  2238.                    }
  2239.  
  2240.                    if (!this.loginData['regPhone'] || !this.loginData['regEmail']) {
  2241.                        alertify.notify('Заполните данные.', 'error');
  2242.  
  2243.                        return false;
  2244.                    }
  2245.  
  2246.                    if (!this.policy) {
  2247.                        alertify.notify('Подтвердите пользовательское соглашением.', 'error');
  2248.  
  2249.                        return false;
  2250.                    }
  2251.  
  2252.                    let data = {
  2253.                        inn: this.innData,
  2254.                        phone: this.loginData['regPhone'],
  2255.                        email: this.loginData['regEmail'],
  2256.                        phone_register_sms: this.loginData['registrationCode']
  2257.                    };
  2258.  
  2259.                    if (this.registrationStep == 1 && !this.logFromReg) {
  2260.                        this.isCodeSendedNow = true;
  2261.  
  2262.                        BX.ajax({
  2263.                            url: '/personal/ajax.php',
  2264.                            data: {
  2265.                                method: 'phone_verification',
  2266.                                data: data
  2267.                            },
  2268.                            method: 'POST',
  2269.                            dataType: 'json',
  2270.                            onsuccess: (data) => {
  2271.                                if (data['MESSAGE']) {
  2272.                                    alertify.notify(data['MESSAGE'], 'success', 5);
  2273.  
  2274.                                    this.registrationStep = 2;
  2275.                                    this.isCodeSendedNow = false;
  2276.                                }
  2277.                            },
  2278.                            onfailure: function() {
  2279.  
  2280.                            }
  2281.                        });
  2282.                    }
  2283.  
  2284.                    if (this.registrationStep == 2 || this.logFromReg) {
  2285.                        BX.ajax({
  2286.                            url: '/personal/ajax.php',
  2287.                            data: {
  2288.                                method: 'registration',
  2289.                                data: data
  2290.                            },
  2291.                            method: 'POST',
  2292.                            dataType: 'json',
  2293.                            onsuccess: (data) => {
  2294.                                if (data['MESSAGE']) {
  2295.                                    document.location.href = "/personal/#profil";
  2296.  
  2297.                                    ym(9638098, 'reachGoal', 'registration');
  2298.                                }
  2299.                                if (data['ERROR']) {
  2300.                                    if (data['ERROR']['PHONE']['STATUS'] == 401) {
  2301.                                        this.loginDataErrors['regPhone'] = 'Данный телефон уже используется.'
  2302.                                    }
  2303.                                    if (data['ERROR']['EMAIL']['STATUS'] == 401) {
  2304.                                        this.loginDataErrors['regEmail'] = 'Данный E-Mail уже используется.'
  2305.                                    }
  2306.                                    if (data['ERROR']['SMS']['STATUS'] == 401) {
  2307.                                        this.loginDataErrors['registrationCode'] = data['ERROR']['SMS']['MESSAGE']
  2308.                                    }
  2309.  
  2310.                                    this.registrationStep = 1;
  2311.                                }
  2312.  
  2313.                                this.$forceUpdate();
  2314.                            },
  2315.                            onfailure: function() {
  2316.  
  2317.                            }
  2318.                        });
  2319.                    }
  2320.                },
  2321.                validateInput(field, event) {
  2322.                    const validationConfig = this.loginDataValidation[field];
  2323.                    const value = (this.loginData[field] || '').trim();
  2324.  
  2325.                    this.loginDataErrors[field] = '';
  2326.  
  2327.                    if (validationConfig) {
  2328.                        if (validationConfig.required && value.length === 0) {
  2329.                            this.loginDataErrors[field] = 'Поле обязательно для заполнения';
  2330.                        }
  2331.  
  2332.                        if (validationConfig.max && value.length > validationConfig.max) {
  2333.                            this.loginDataErrors[field] = 'Длинна введённой информации не должна превышать ' + validationConfig.max +
  2334.                                'символов';
  2335.                        }
  2336.  
  2337.                        if (validationConfig.validator !== undefined) {
  2338.                            this.loginDataErrors[field] = validationConfig.validator(value);
  2339.                        }
  2340.                    }
  2341.  
  2342.                    this.$forceUpdate();
  2343.  
  2344.                },
  2345.                checkMax(field, event) {
  2346.                    const validationConfig = this.loginDataValidation[field];
  2347.                    const value = this.loginData[field];
  2348.  
  2349.                    if (validationConfig.max && value && value.length > validationConfig.max) {
  2350.                        this.loginData[field] = this.loginData[field].substring(0, validationConfig.max);
  2351.                        this.$forceUpdate();
  2352.                    }
  2353.                },
  2354.                maskPhone(selector, masked = '+7 (___) ___-__-__') {
  2355.                    const elems = document.querySelectorAll(selector);
  2356.  
  2357.                    function mask(event) {
  2358.                        const keyCode = event.keyCode;
  2359.                        const template = masked,
  2360.                            def = template.replace(/\D/g, ""),
  2361.                            val = this.value.replace(/\D/g, "");
  2362.  
  2363.                        let i = 0,
  2364.                            newValue = template.replace(/[_\d]/g, function(a) {
  2365.                                return i < val.length ? val.charAt(i++) || def.charAt(i) : a;
  2366.                            });
  2367.                        i = newValue.indexOf("_");
  2368.                        if (i !== -1) {
  2369.                            newValue = newValue.slice(0, i);
  2370.                        }
  2371.                        let reg = template.substr(0, this.value.length).replace(/_+/g,
  2372.                            function(a) {
  2373.                                return "\\d{1," + a.length + "}";
  2374.                            }).replace(/[+()]/g, "\\$&");
  2375.                        reg = new RegExp("^" + reg + "$");
  2376.                        if (!reg.test(this.value) || this.value.length < 5 || keyCode > 47 && keyCode < 58) {
  2377.                            this.value = newValue;
  2378.                        }
  2379.                        if (event.type === "blur" && this.value.length < 5) {
  2380.                            this.value = "";
  2381.                        }
  2382.                    }
  2383.  
  2384.                    for (const elem of elems) {
  2385.                        elem.addEventListener("input", mask);
  2386.                        elem.addEventListener("focus", mask);
  2387.                        elem.addEventListener("blur", mask);
  2388.                    }
  2389.  
  2390.                },
  2391.                checkInnShort(value) {
  2392.                    if (typeof value !== 'string' ||
  2393.                        (value.length !== 10 && value.length !== 12) ||
  2394.                        value.split('').some((symbol) => isNaN(Number(symbol)))
  2395.                    ) return false;
  2396.  
  2397.                    if (value.length === 10) {
  2398.                        return Number(value[9]) === (value.split('').slice(0, -1)
  2399.                            .reduce(
  2400.                                (summ, symbol, index) => [2, 4, 10, 3, 5, 9, 4, 6, 8][index] * Number(symbol) + summ,
  2401.                                0) %
  2402.                            11) % 10;
  2403.  
  2404.                    } else if (value.length === 12) {
  2405.                        let checkSumOne = (value.split('').slice(0, -2)
  2406.                            .reduce(
  2407.                                (summ, symbol, index) => [7, 2, 4, 10, 3, 5, 9, 4, 6, 8][index] * Number(symbol) + summ,
  2408.                                0) %
  2409.                            11) % 10;
  2410.  
  2411.                        let checkSumTwo = (value.split('').slice(0, -1)
  2412.                            .reduce(
  2413.                                (summ, symbol, index) => [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8][index] * Number(symbol) + summ,
  2414.                                0) %
  2415.                            11) % 10;
  2416.  
  2417.                        return (checkSumOne === Number(value[10]) && checkSumTwo === Number(value[11]));
  2418.                    }
  2419.                },
  2420.                formatphone(val){
  2421.                    if (typeof val == 'string'){
  2422.                    return val.replace(/(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})/g, `$1 ($2) $3-$4-$5`);
  2423.                    }
  2424.                },
  2425.            },
  2426.        });
  2427.    })
  2428. </script><script>
  2429.    BX.ready(function() {
  2430.        BX.Vue.createApp({
  2431.            el: '#disc_label',
  2432.            template: '#disc_label_template',
  2433.            components: {
  2434.  
  2435.            },
  2436.            data() {
  2437.                return {
  2438.                    registrationStep: 1,
  2439.                    isCodeSendedNow: false,
  2440.                    policy: false,
  2441.                    loginData: {},
  2442.                    innData: {},
  2443.                    loginDataErrors: {},
  2444.                    loginDataValidation: {
  2445.                        password: {
  2446.                            required: true
  2447.                        },
  2448.                        inn: {
  2449.                            validator: (val) => {
  2450.                                if (!this.checkInnShort(val)) {
  2451.                                    this.innData = {};
  2452.  
  2453.                                    return 'Введите корректный ИНН.';
  2454.                                }
  2455.  
  2456.                                let url = "https://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/party";
  2457.                                let token = "0199725dd4e04841993816a84804bf7ad193887c";
  2458.                                let query = val;
  2459.  
  2460.                                let options = {
  2461.                                    method: "POST",
  2462.                                    mode: "cors",
  2463.                                    headers: {
  2464.                                        "Content-Type": "application/json",
  2465.                                        "Accept": "application/json",
  2466.                                        "Authorization": "Token " + token
  2467.                                    },
  2468.                                    body: JSON.stringify({query: query, count: 1})
  2469.                                }
  2470.  
  2471.                                fetch(url, options)
  2472.                                .then(response => response.text())
  2473.                                .then(result => {
  2474.                                    if (JSON.parse(result)['suggestions'].length < 1) {
  2475.                                        this.loginDataErrors.inn = 'Введенный ИНН не был найден.';
  2476.  
  2477.                                        this.$forceUpdate();
  2478.                                    } else {
  2479.                                        this.loginDataErrors.inn = '';
  2480.                                        
  2481.                                        let data = JSON.parse(result)['suggestions'][0]['data'];
  2482.                                        if (data['state']['status']=='LIQUIDATED'){
  2483.                                                this.loginDataErrors.inn = 'Данное юр лицо ликвидировано.';
  2484.                                                this.$forceUpdate();
  2485.                                            }
  2486.                                        let name = (data['name']['short_with_opf']) ? data['name']['short_with_opf'] : data['name']['full'];
  2487.  
  2488.                                        this.innData.name = name;
  2489.  
  2490.                                        this.innData['inn'] = val;
  2491.                                        this.innData['name'] = name;
  2492.                                        this.innData['ogrn'] = data['ogrn'];
  2493.                                        this.innData['kpp'] = data['kpp'];
  2494.                                        this.innData['okved'] = data['okved'];
  2495.                                        this.innData['address'] = data.address?.value;
  2496.  
  2497.                                        this.$forceUpdate();
  2498.                                    }
  2499.                                })
  2500.                                .catch(error => console.log("error", error));
  2501.  
  2502.                            }
  2503.                        },
  2504.                        fio: {
  2505.                            validator: function(val) {
  2506.                                const l = val.split(' ').length;
  2507.                                if (l < 2) {
  2508.                                    return 'ФИО должно состоять минимум из 2 слов';
  2509.                                }
  2510.                                if (l > 3) {
  2511.                                    return 'ФИО должно состоять максимум из 3 слов';
  2512.                                }
  2513.                            },
  2514.                        },
  2515.                        registrationCode: {
  2516.                            validator: function(val) {
  2517.                                if (val.length != 4) {
  2518.                                    return 'Код должен состоять из 4 цифр.';
  2519.                                }
  2520.                            },
  2521.                        },
  2522.                        phone: {
  2523.                            validator: function(val) {
  2524.                                const re = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
  2525.                                
  2526.                                if (!re.test(String(val).toLowerCase())) {
  2527.                                    return 'Заполните форматом +7 (___) ___-__-__';
  2528.                                }
  2529.                            },
  2530.                            max: 18,
  2531.                        },
  2532.                        regPhone: {
  2533.                            validator: function(val) {
  2534.                                const re = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
  2535.                                
  2536.                                if (!re.test(String(val).toLowerCase())) {
  2537.                                    return 'Заполните форматом +7 (___) ___-__-__';
  2538.                                }
  2539.                            },
  2540.                        },
  2541.                        email: {
  2542.                            validator: function(val) {
  2543.                                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,}))$/;
  2544.  
  2545.                                if (!re.test(String(val).toLowerCase())) {
  2546.                                    return 'Email введён не правильно';
  2547.                                }
  2548.                            },
  2549.                        },
  2550.                        forgotPassword: {
  2551.                            validator: function(val) {
  2552.                                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,}))$/;
  2553.  
  2554.                                if (!re.test(String(val).toLowerCase())) {
  2555.                                    return 'Email введён не правильно';
  2556.                                }
  2557.                            },
  2558.                        },
  2559.                        regEmail: {
  2560.                            validator: function(val) {
  2561.                                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,}))$/;
  2562.  
  2563.                                if (!re.test(String(val).toLowerCase())) {
  2564.                                    return 'Email введён не правильно';
  2565.                                }
  2566.                            },
  2567.                        },
  2568.                        passport: {
  2569.                            validator: function(val) {
  2570.                                if (val.length !== 10) {
  2571.                                    return 'Нужно ввести 10 цифр серии и номера паспорта без пробела';
  2572.                                }
  2573.                            },
  2574.                            max: 10,
  2575.                        },
  2576.                    }
  2577.                }
  2578.            },
  2579.            mounted() {
  2580.                this.maskPhone('input[name="phone_m"]');
  2581.            },
  2582.            created() {
  2583.  
  2584.            },
  2585.            watch: {
  2586.            },
  2587.            methods: {
  2588.                openPolicy() {
  2589.                    window.open('/legal-info/', '_blank');
  2590.                },
  2591.                registration() {
  2592.                    if (this.loginDataErrors['inn'] || !this.loginData['inn']) {
  2593.                        alertify.notify('Укажите корректный ИНН.', 'error');
  2594.  
  2595.                        return false;
  2596.                    }
  2597.  
  2598.                    if (!this.loginData['regPhone'] || !this.loginData['regEmail']) {
  2599.                        alertify.notify('Заполните данные.', 'error');
  2600.  
  2601.                        return false;
  2602.                    }
  2603.  
  2604.                    if (!this.policy) {
  2605.                        alertify.notify('Подтвердите пользовательское соглашением.', 'error');
  2606.  
  2607.                        return false;
  2608.                    }
  2609.  
  2610.                    let data = {
  2611.                        inn: this.innData,
  2612.                        phone: this.loginData['regPhone'],
  2613.                        email: this.loginData['regEmail'],
  2614.                        phone_register_sms: this.loginData['registrationCode']
  2615.                    };
  2616.  
  2617.                    if (this.registrationStep == 1) {
  2618.                        this.isCodeSendedNow = true;
  2619.  
  2620.                        BX.ajax({
  2621.                            url: '/personal/ajax.php',
  2622.                            data: {
  2623.                                method: 'phone_verification',
  2624.                                data: data
  2625.                            },
  2626.                            method: 'POST',
  2627.                            dataType: 'json',
  2628.                            onsuccess: (data) => {
  2629.                                if (data['STATUS'] == 401) {
  2630.                                    this.loginDataErrors['regPhone'] = 'Данный телефон уже используется.'
  2631.  
  2632.                                    this.registrationStep = 1;
  2633.                                    this.isCodeSendedNow = false;
  2634.  
  2635.                                    this.$forceUpdate();
  2636.  
  2637.                                    return false;
  2638.                                }
  2639.  
  2640.                                if (data['MESSAGE']) {
  2641.                                    alertify.notify(data['MESSAGE'], 'success', 5);
  2642.                                    
  2643.                                    this.registrationStep = 2;
  2644.                                    this.isCodeSendedNow = false;
  2645.                                }
  2646.                            },
  2647.                            onfailure: function(){
  2648.                                
  2649.                            }
  2650.                        });
  2651.                    }
  2652.  
  2653.                    if (this.registrationStep == 2) {
  2654.                        BX.ajax({
  2655.                            url: '/personal/ajax.php',
  2656.                            data: {
  2657.                                method: 'registration',
  2658.                                data: data
  2659.                            },
  2660.                            method: 'POST',
  2661.                            dataType: 'json',
  2662.                            onsuccess: (data) => {
  2663.                                if (data['MESSAGE']) {
  2664.                                    document.location.href = "/personal/#profil";
  2665.  
  2666.                                    ym(9638098,'reachGoal','registration');
  2667.                                }
  2668.                                if (data['ERROR']) {
  2669.                                    if (data['ERROR']['PHONE']['STATUS'] == 401) {
  2670.                                        this.loginDataErrors['regPhone'] = 'Данный телефон уже используется.'
  2671.                                    }
  2672.                                    if (data['ERROR']['EMAIL']['STATUS'] == 401) {
  2673.                                        this.loginDataErrors['regEmail'] = 'Данный E-Mail уже используется.'
  2674.                                    }
  2675.                                    if (data['ERROR']['SMS']['STATUS'] == 401) {
  2676.                                        this.loginDataErrors['registrationCode'] = data['ERROR']['SMS']['MESSAGE']
  2677.                                    }
  2678.  
  2679.                                    this.registrationStep = 1;
  2680.                                }
  2681.  
  2682.                                this.$forceUpdate();
  2683.                            },
  2684.                            onfailure: function(){
  2685.                                
  2686.                            }
  2687.                        });
  2688.                    }
  2689.                },
  2690.                validateInput(field, event) {
  2691.                    const validationConfig = this.loginDataValidation[field];
  2692.                    const value = (this.loginData[field] || '').trim();
  2693.  
  2694.                    this.loginDataErrors[field] = '';
  2695.  
  2696.                    if (validationConfig) {
  2697.                        if (validationConfig.required && value.length === 0) {
  2698.                            this.loginDataErrors[field] = 'Поле обязательно для заполнения';
  2699.                        }
  2700.  
  2701.                        if (validationConfig.max && value.length > validationConfig.max) {
  2702.                            this.loginDataErrors[field] = 'Длинна введённой информации не должна превышать ' + validationConfig.max +
  2703.                            'символов';
  2704.                        }
  2705.  
  2706.                        if (validationConfig.validator !== undefined) {
  2707.                            this.loginDataErrors[field] = validationConfig.validator(value);
  2708.                        }
  2709.                    }
  2710.  
  2711.                    this.$forceUpdate();
  2712.  
  2713.                },
  2714.                checkMax(field, event) {
  2715.                    const validationConfig = this.loginDataValidation[field];
  2716.                    const value = this.loginData[field];
  2717.  
  2718.                    if (validationConfig.max && value && value.length > validationConfig.max) {
  2719.                        this.loginData[field] = this.loginData[field].substring(0, validationConfig.max);
  2720.                        this.$forceUpdate();
  2721.                    }
  2722.                },
  2723.                maskPhone(selector, masked = '+7 (___) ___-__-__') {
  2724.                    const elems = document.querySelectorAll(selector);
  2725.  
  2726.                    function mask(event) {
  2727.                        const keyCode = event.keyCode;
  2728.                        const template = masked,
  2729.                            def = template.replace(/\D/g, ""),
  2730.                            val = this.value.replace(/\D/g, "");
  2731.                            
  2732.                        let i = 0,
  2733.                            newValue = template.replace(/[_\d]/g, function (a) {
  2734.                                return i < val.length ? val.charAt(i++) || def.charAt(i) : a;
  2735.                            });
  2736.                        i = newValue.indexOf("_");
  2737.                        if (i !== -1) {
  2738.                            newValue = newValue.slice(0, i);
  2739.                        }
  2740.                        let reg = template.substr(0, this.value.length).replace(/_+/g,
  2741.                            function (a) {
  2742.                                return "\\d{1," + a.length + "}";
  2743.                            }).replace(/[+()]/g, "\\$&");
  2744.                        reg = new RegExp("^" + reg + "$");
  2745.                        if (!reg.test(this.value) || this.value.length < 5 || keyCode > 47 && keyCode < 58) {
  2746.                            this.value = newValue;
  2747.                        }
  2748.                        if (event.type === "blur" && this.value.length < 5) {
  2749.                            this.value = "";
  2750.                        }
  2751.                    }
  2752.  
  2753.                    for (const elem of elems) {
  2754.                        elem.addEventListener("input", mask);
  2755.                        elem.addEventListener("focus", mask);
  2756.                        elem.addEventListener("blur", mask);
  2757.                    }
  2758.                    
  2759.                },
  2760.                checkInnShort (value) {
  2761.                    if(typeof value !== 'string' ||
  2762.                        (value.length !== 10 && value.length !== 12) ||
  2763.                        value.split('').some((symbol) => isNaN(Number(symbol)))
  2764.                    ) return false;
  2765.  
  2766.                    if(value.length === 10){
  2767.                        return Number(value[9]) === (value.split('').slice(0, -1)
  2768.                            .reduce(
  2769.                                (summ, symbol, index) =>
  2770.                                    [2, 4, 10, 3, 5, 9, 4, 6, 8][index] * Number(symbol) + summ,
  2771.                                0)
  2772.                            % 11) % 10;
  2773.                        
  2774.                    }else if(value.length === 12){
  2775.                        let checkSumOne = (value.split('').slice(0, -2)
  2776.                            .reduce(
  2777.                                (summ, symbol, index) =>
  2778.                                    [7, 2, 4, 10, 3, 5, 9, 4, 6, 8][index] * Number(symbol) + summ,
  2779.                                0)
  2780.                            % 11 ) % 10;
  2781.                        
  2782.                        let checkSumTwo = (value.split('').slice(0, -1)
  2783.                                .reduce(
  2784.                                    (summ, symbol, index) =>
  2785.                                        [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8][index] * Number(symbol) + summ,
  2786.                                    0)
  2787.                            % 11 ) % 10;
  2788.                        
  2789.                        return (checkSumOne === Number(value[10]) && checkSumTwo === Number(value[11]));
  2790.                    }
  2791.                },
  2792.            },
  2793.        });
  2794.    })
  2795.  
  2796. </script>
  2797. <script>
  2798. BX.Vue.createApp({
  2799. el: '#lazy_load_catalog'  
  2800. });
  2801. </script><script>
  2802.    const app = BX.Vue.createApp({
  2803.        template: '#basket_header_vue_template',
  2804.        store,
  2805.        mounted() {
  2806.            store.dispatch('userCart/getUserCart');
  2807.        },
  2808.        computed: {
  2809.            ...BX.Vuex.mapGetters({
  2810.                userCart: 'userCart/userCartGetter'
  2811.            }),
  2812.        },
  2813.        watch: {
  2814.            userCart() {
  2815.                window.updateCardButtonState();
  2816.            }
  2817.        },
  2818.        methods: {
  2819.            ...BX.Vuex.mapActions({
  2820.                getUserCart: 'userCart/getUserCart'
  2821.            }),
  2822.            deleteProductFromBasket(id) {
  2823.                BX.ajax({
  2824.                    url: '/personal/ajax.php',
  2825.                    data: {
  2826.                        method: 'delete',
  2827.                        id: id
  2828.                    },
  2829.                    method: 'POST',
  2830.                    dataType: 'json',
  2831.                    onsuccess: function(data) {
  2832.                        store.dispatch('userCart/getUserCart');
  2833.  
  2834.                        alertify.notify('Товар был убран из корзины.', 'success');
  2835.                    },
  2836.  
  2837.                    onfailure: function() {
  2838.  
  2839.                    }
  2840.                });
  2841.            }
  2842.        },
  2843.    });
  2844.  
  2845.    app.mount('#basket_header_vue');
  2846. </script><script>
  2847.                    BX.ready(function () {
  2848.                        var is_mob = '';
  2849.  
  2850.                        $('input[name="headersearch"]').keydown(function (e) {
  2851.                            if (e.keyCode == 13) {
  2852.                                e.preventDefault();
  2853.  
  2854.                                if (index_keydown != -1) {
  2855.                                    if ($('.search__helper-item').eq(index_keydown).hasClass('insert__header')) {
  2856.                                        return false;
  2857.                                    }
  2858.  
  2859.                                    let link = $('.search__helper-item').eq(index_keydown).children().attr('href');
  2860.  
  2861.                                    if (link) {
  2862.                                        location.href = link;
  2863.                                    }
  2864.  
  2865.                                    return false;
  2866.                                }
  2867.  
  2868.                                let val = $('input[type="search"]').val();
  2869.  
  2870.                                addLastSearch(val);
  2871.  
  2872.                                $(location).attr('href', '/search/?query=' + val);
  2873.                            }
  2874.                        })
  2875.  
  2876.                        setTimeout(() => {
  2877.                            if (is_mob) {
  2878.                                $('#search__list_helper').addClass('active');
  2879.                            }
  2880.  
  2881.                            $('#search__list_helper').load('/search/components/popularsections.php', {
  2882.                                first_init: true
  2883.                            }, function () {
  2884.                                if (!is_mob) {
  2885.                                    $('.js-headersearch-input').on('click', function (e) {
  2886.                                        $('#search__list_helper').addClass('active');
  2887.                                    })
  2888.                                }
  2889.                            });
  2890.                        }, 200);
  2891.  
  2892.                        $('.search__icon-clear').on('click', function (e) {
  2893.                            $('input[type="search"]').val('');
  2894.                            $('input[type="search"]').focus();
  2895.  
  2896.                            $('#search__list_helper').load('/search/components/popularsections.php', {
  2897.                                first_init: true
  2898.                            }, function () {
  2899.  
  2900.                            });
  2901.  
  2902.                        })
  2903.  
  2904.                        if (!is_mob) {
  2905.                            initKeydown();
  2906.                        }
  2907.  
  2908.                        var is_init_keydown = false;
  2909.                        var index_keydown = -1;
  2910.  
  2911.                        function initKeydown() {
  2912.                            is_init_keydown = true;
  2913.  
  2914.                            var ul = document.getElementById('search__list_helper');
  2915.                            var liSelected;
  2916.                            var index_keydown = -1;
  2917.  
  2918.                            document.addEventListener('keydown', function (event) {
  2919.                                var len = ul.getElementsByTagName('li').length - 1;
  2920.                                if (event.which === 40) {
  2921.                                    index_keydown++;
  2922.                                    //down
  2923.                                    if (liSelected) {
  2924.                                        removeClass(liSelected, 'selected');
  2925.                                        next = ul.getElementsByTagName('li')[index_keydown];
  2926.                                        if (typeof next !== undefined && index_keydown <= len) {
  2927.  
  2928.                                            liSelected = next;
  2929.                                        } else {
  2930.                                            index_keydown = 0;
  2931.                                            liSelected = ul.getElementsByTagName('li')[0];
  2932.                                        }
  2933.                                        addClass(liSelected, 'selected');
  2934.                                        console.log(index_keydown);
  2935.                                    }
  2936.                                    else {
  2937.                                        index_keydown = 0;
  2938.  
  2939.                                        liSelected = ul.getElementsByTagName('li')[0];
  2940.                                        addClass(liSelected, 'selected');
  2941.                                    }
  2942.                                }
  2943.                                else if (event.which === 38) {
  2944.  
  2945.                                    //up
  2946.                                    if (liSelected) {
  2947.                                        removeClass(liSelected, 'selected');
  2948.                                        index_keydown--;
  2949.                                        console.log(index_keydown);
  2950.                                        next = ul.getElementsByTagName('li')[index_keydown];
  2951.                                        if (typeof next !== undefined && index_keydown >= 0) {
  2952.                                            liSelected = next;
  2953.                                        } else {
  2954.                                            index_keydown = len;
  2955.                                            liSelected = ul.getElementsByTagName('li')[len];
  2956.                                        }
  2957.                                        addClass(liSelected, 'selected');
  2958.                                    }
  2959.                                    else {
  2960.                                        index_keydown = 0;
  2961.                                        liSelected = ul.getElementsByTagName('li')[len];
  2962.                                        addClass(liSelected, 'selected');
  2963.                                    }
  2964.                                }
  2965.                            }, false);
  2966.                        }
  2967.  
  2968.                        function removeClass(el, className) {
  2969.                            (async () => {
  2970.                                let styler = new PseudoStyler();
  2971.                                await styler.loadDocumentStyles();
  2972.                                styler.toggleStyle(el, ':hover');
  2973.                            })();
  2974.  
  2975.                        };
  2976.  
  2977.                        function addClass(el, className) {
  2978.                            (async () => {
  2979.                                let styler = new PseudoStyler();
  2980.                                await styler.loadDocumentStyles();
  2981.                                styler.toggleStyle(el, ':hover');
  2982.                            })();
  2983.                        };
  2984.  
  2985.                        function addLastSearch(val) {
  2986.                            let data = BX.localStorage.get('LAST_SEARCH');
  2987.  
  2988.                            if (data) {
  2989.                                if (data.indexOf(val) === -1) {
  2990.                                    if (data.length >= 3) {
  2991.                                        data.push(val);
  2992.                                        data.shift(0);
  2993.                                    } else {
  2994.                                        data.push(val);
  2995.                                    }
  2996.                                }
  2997.                            } else {
  2998.                                data = [];
  2999.                                data.push(val);
  3000.                            }
  3001.  
  3002.                            BX.localStorage.set('LAST_SEARCH', data, 12800);
  3003.                        }
  3004.  
  3005.                        function getLastSearch() {
  3006.                            return BX.localStorage.get('LAST_SEARCH');
  3007.                        }
  3008.  
  3009.                        $('.plashka__close').on('click', function (e) {
  3010.                            let id = $('.plashka').data('plashka');
  3011.  
  3012.                            $('.plashka').remove();
  3013.  
  3014.                            let plashkaList = JSON.parse((BX.getCookie('BITRIX_SM_PLASHKA') ? BX.getCookie('BITRIX_SM_PLASHKA') : false));
  3015.  
  3016.                            if (!plashkaList) {
  3017.                                plashkaList = [];
  3018.  
  3019.                                plashkaList.push(id);
  3020.                            } else {
  3021.                                plashkaList.push(id);
  3022.                            }
  3023.  
  3024.                            BX.setCookie('BITRIX_SM_PLASHKA', JSON.stringify(plashkaList), {
  3025.                                expires: 3600,
  3026.                                path: '/'
  3027.                            });
  3028.                        })
  3029.  
  3030.                        let compare_items = BX.localStorage.get('COMPARE_ITEMS');
  3031.  
  3032.                        if (compare_items) {
  3033.                            $('#comparecount').text(compare_items.length);
  3034.                        } else {
  3035.                            $('#comparecount').text(0);
  3036.                        }
  3037.  
  3038.                        $('.header__popup-item').on('click', function (e) {
  3039.                            let method = $(this).data('method');
  3040.  
  3041.                            if (method == 'logout') {
  3042.                                BX.ajax({
  3043.                                    url: '/personal/ajax.php',
  3044.                                    data: {
  3045.                                        method: 'logout'
  3046.                                    },
  3047.                                    method: 'POST',
  3048.                                    dataType: 'json',
  3049.                                    onsuccess: function (data) {
  3050.                                        window.location.href = "/";
  3051.                                    },
  3052.                                    onfailure: function () {
  3053.  
  3054.                                    }
  3055.                                });
  3056.                            }
  3057.                        })
  3058.  
  3059.                        $('.header__popup-card-close').on('click', function (e) {
  3060.                            let id = $(this).parent().parent().data('id');
  3061.                            let parent = $(this).parent().parent();
  3062.  
  3063.                            if (id) {
  3064.                                BX.ajax({
  3065.                                    url: '/personal/ajax.php',
  3066.                                    data: {
  3067.                                        method: 'delete',
  3068.                                        id: id
  3069.                                    },
  3070.                                    method: 'POST',
  3071.                                    dataType: 'json',
  3072.                                    onsuccess: function (data) {
  3073.                                        $('#basketcount').text(data['COUNT']);
  3074.                                        $('.header__popup__total-price').text(priceSet(data['PRICE']));
  3075.                                        $(parent).remove();
  3076.                                        alertify.notify('Товар был убран из корзины.', 'success');
  3077.                                    },
  3078.  
  3079.                                    onfailure: function () {
  3080.  
  3081.                                    }
  3082.                                });
  3083.                            }
  3084.                        })
  3085.  
  3086.                        // $('.search__icon').on('click', function(e) {
  3087.                        //     let val = $('input[type="search"]').val();
  3088.  
  3089.                        //     addLastSearch(val);
  3090.  
  3091.                        //     $(location).attr('href', '/search/?query=' + val);
  3092.                        // })
  3093.  
  3094.                        $('input[name="headersearch"]').on('input', function (e) {
  3095.                            let q = $(this).val();
  3096.                            let ls = getLastSearch();
  3097.  
  3098.                            if (ls) {
  3099.                                ls.reverse();
  3100.                            }
  3101.  
  3102.                            if (q.length > 2) {
  3103.                                q = $('input[name="headersearch"]').val();
  3104.                                $('#search__list_helper').load('/search/search.php', {
  3105.                                    q: q,
  3106.                                    ls: ls,
  3107.                                    is_mob: is_mob
  3108.                                }, function () {
  3109.                                    Newjs.default.search();
  3110.                                    Newjs.default.quantityCounter();
  3111.  
  3112.                                    if (is_init_keydown) {
  3113.                                        ul = document.getElementById('search__list_helper');
  3114.                                        liSelected;
  3115.                                        index_keydown = -1;
  3116.                                    }
  3117.                                });
  3118.                            } else {
  3119.                                $('.js-headersearch').addClass('active');
  3120.  
  3121.                                $('#search__list_helper').load('/search/components/popularsections.php', {
  3122.                                }, function () {
  3123.  
  3124.                                });
  3125.                            }
  3126.  
  3127.                        })
  3128.  
  3129.                        function priceSet(num) {
  3130.                            return num ? `${(+num).toLocaleString()} ${'₽'}` : '';
  3131.                        };
  3132.  
  3133.                    })
  3134.                </script>
  3135.  
  3136. <script>
  3137.    BX.ready(function() {
  3138.        BX.Vue.createApp({
  3139.            el: '#popup-kp_vue',
  3140.            template: '#popup-kp_vue_template',
  3141.            store,
  3142.            components: {
  3143.  
  3144.            },
  3145.            data() {
  3146.                return {
  3147.                    order_limit: 100000,
  3148.                    fio: '',
  3149.                    phone: '',
  3150.                    fuser: -1,
  3151.                    formErrors: {},
  3152.                    lastCount: false,
  3153.                    policy: false,
  3154.                    formValidation: {
  3155.                        fio: {
  3156.                            validator: function(val) {
  3157.                                const l = val.split(' ').length;
  3158.                                if (l < 2) {
  3159.                                    return 'ФИО должно состоять минимум из 2 слов';
  3160.                                }
  3161.                                if (l > 3) {
  3162.                                    return 'ФИО должно состоять максимум из 3 слов';
  3163.                                }
  3164.                            },
  3165.                        },
  3166.                        phone: {
  3167.                            validator: function(val) {
  3168.                                const re = /^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$/;
  3169.                                
  3170.                                if (!re.test(String(val).toLowerCase())) {
  3171.                                    return 'Заполните форматом +7 (___) ___-__-__';
  3172.                                }
  3173.                            },
  3174.                            max: 18,
  3175.                        },
  3176.                    }
  3177.                }
  3178.            },
  3179.            mounted() {
  3180.                this.maskPhone('input[name="phone"]');
  3181.  
  3182.                this.getOrderLimit();
  3183.            },
  3184.            created() {
  3185.  
  3186.            },
  3187.            watch: {
  3188.                userCart() {
  3189.                    let count = this.userCart.basketData.basketCount;
  3190.  
  3191.                    if (this.lastCount) {
  3192.                        this.openPopup();
  3193.  
  3194.                        this.lastCount = false;
  3195.                    }
  3196.  
  3197.                    if (count == 0) {
  3198.                        this.lastCount = true;
  3199.                    }
  3200.                }
  3201.            },
  3202.            computed: {
  3203.                ...BX.Vuex.mapGetters({
  3204.                    userCart: 'userCart/userCartGetter'
  3205.                }),
  3206.            },
  3207.            methods: {
  3208.                downloadKP() {
  3209.                    let cart = this.userCart.basketData;
  3210.                    let price = cart.basketPriceWODisc;
  3211.  
  3212.                    if (cart.basketCount < 1) {
  3213.                        alertify.notify('Добавьте как минимум один товар в КП.', 'error');
  3214.  
  3215.                        return false;
  3216.                    }
  3217.  
  3218.                    if (price < 5000) {
  3219.                        alertify.notify('Минимальная сумма КП - 5000 руб.', 'error');
  3220.  
  3221.                        return false;
  3222.                    }
  3223.  
  3224.                    if (price > this.order_limit) {
  3225.                        modalOpen('.js-modal-stub');
  3226.                    } else {
  3227.                        this.createKP();
  3228.                    }
  3229.                },
  3230.                openPolicy() {
  3231.                    window.open('/legal-info/', '_blank');
  3232.                },
  3233.                createFromModal() {
  3234.                    this.validateInput('phone');
  3235.                    this.validateInput('fio');
  3236.  
  3237.                    let has_errors = JSON.parse(JSON.stringify(this.formErrors));
  3238.        
  3239.                    if (Object.keys(has_errors).length > 0) return;
  3240.  
  3241.                    if (!this.policy) {
  3242.                        alertify.notify('Подтвердите пользовательское соглашением.', 'error');
  3243.  
  3244.                        return false;
  3245.                    }
  3246.  
  3247.                    this.createKP();
  3248.                },
  3249.                createKP() {
  3250.                    BX.ajax({
  3251.                            url: '/personal/ajax.php',
  3252.                            data: {
  3253.                                method: 'createkp',
  3254.                                url: location.protocol + '//' + location.host + '/personal/kp.php?userID=' + this.fuser,
  3255.                                dataReg: {
  3256.                                    fio: this.fio,
  3257.                                    phone: this.phone
  3258.                                },
  3259.                            },
  3260.                            method: 'POST',
  3261.                            dataType: 'json',
  3262.                            onsuccess: (data) => {
  3263.                                let uid = data['uid'];
  3264.                                var url = '/upload/pdf/' + uid + '.pdf';
  3265.  
  3266.                                ym(9638098,'reachGoal','createkp');
  3267.  
  3268.                                window.open(url);
  3269.  
  3270.                                modalClose('.js-modal-stub');
  3271.  
  3272.                                store.dispatch('userCart/getUserCart');
  3273.                            },
  3274.                            onfailure: function(){
  3275.                                
  3276.                            }
  3277.                        });
  3278.                },
  3279.                getOrderLimit() {
  3280.                    BX.ajax({
  3281.                    url: '/local/api/getUserBasketPrice.php',
  3282.                    method: 'GET',
  3283.                    dataType: 'json',
  3284.                    onsuccess: (data) => {
  3285.                        this.order_limit = parseInt(data.orderLimit);
  3286.                        this.fuser = parseInt(data.fuser);
  3287.                    },
  3288.                    onfailure: function(){
  3289.  
  3290.                    }
  3291.                });
  3292.                },
  3293.                openPopup() {
  3294.                    let popup = document.querySelector('.popup-kp');
  3295.  
  3296.                    if (!popup) return;
  3297.  
  3298.                    if (popup.classList.contains('reverse')) return;
  3299.  
  3300.                    popup.classList.add('active');
  3301.                },
  3302.                closePopup() {
  3303.                    let popup = document.querySelector('.popup-kp');
  3304.  
  3305.                    if (!popup) return;
  3306.  
  3307.                    if (popup.classList.contains('active')) {
  3308.                        popup.classList.remove('active');
  3309.                        popup.classList.add('reverse');
  3310.  
  3311.                        setTimeout(() => {
  3312.                            popup.classList.remove('reverse');
  3313.                        }, 300);
  3314.                    }
  3315.                },
  3316.                validateInput(field, event) {
  3317.                    const validationConfig = this.formValidation[field];
  3318.                    const value = (this[field] || '').trim();
  3319.  
  3320.                    this.formErrors[field] = '';
  3321.  
  3322.                    if (validationConfig) {
  3323.                        if (validationConfig.required && value.length === 0) {
  3324.                            this.formErrors[field] = 'Поле обязательно для заполнения';
  3325.                        }
  3326.  
  3327.                        if (validationConfig.max && value.length > validationConfig.max) {
  3328.                            this.formErrors[field] = 'Длинна введённой информации не должна превышать ' + validationConfig.max +
  3329.                            'символов';
  3330.                        }
  3331.  
  3332.                        if (validationConfig.validator !== undefined) {
  3333.                            this.formErrors[field] = validationConfig.validator(value);
  3334.                        }
  3335.                    }
  3336.  
  3337.                    this.$forceUpdate();
  3338.  
  3339.                },
  3340.                maskPhone(selector, masked = '+7 (___) ___-__-__') {
  3341.                    const elems = document.querySelectorAll(selector);
  3342.  
  3343.                    function mask(event) {
  3344.                        const keyCode = event.keyCode;
  3345.                        const template = masked,
  3346.                            def = template.replace(/\D/g, ""),
  3347.                            val = this.value.replace(/\D/g, "");
  3348.                            
  3349.                        let i = 0,
  3350.                            newValue = template.replace(/[_\d]/g, function (a) {
  3351.                                return i < val.length ? val.charAt(i++) || def.charAt(i) : a;
  3352.                            });
  3353.                        i = newValue.indexOf("_");
  3354.                        if (i !== -1) {
  3355.                            newValue = newValue.slice(0, i);
  3356.                        }
  3357.                        let reg = template.substr(0, this.value.length).replace(/_+/g,
  3358.                            function (a) {
  3359.                                return "\\d{1," + a.length + "}";
  3360.                            }).replace(/[+()]/g, "\\$&");
  3361.                        reg = new RegExp("^" + reg + "$");
  3362.                        if (!reg.test(this.value) || this.value.length < 5 || keyCode > 47 && keyCode < 58) {
  3363.                            this.value = newValue;
  3364.                        }
  3365.                        if (event.type === "blur" && this.value.length < 5) {
  3366.                            this.value = "";
  3367.                        }
  3368.                    }
  3369.  
  3370.                    for (const elem of elems) {
  3371.                        elem.addEventListener("input", mask);
  3372.                        elem.addEventListener("focus", mask);
  3373.                        elem.addEventListener("blur", mask);
  3374.                    }
  3375.                    
  3376.                },
  3377.            },
  3378.        });
  3379.    })
  3380.  
  3381. </script>
  3382. <script>
  3383. BX.ready(function(){
  3384. var upButton = document.querySelector('[data-role="eshopUpButton"]');
  3385. BX.bind(upButton, "click", function(){
  3386. var windowScroll = BX.GetWindowScrollPos();
  3387. (new BX.easing({
  3388. duration : 500,
  3389. start : { scroll : windowScroll.scrollTop },
  3390. finish : { scroll : 0 },
  3391. transition : BX.easing.makeEaseOut(BX.easing.transitions.quart),
  3392. step : function(state){
  3393. window.scrollTo(0, state.scroll);
  3394. },
  3395. complete: function() {
  3396. }
  3397. })).animate();
  3398. })
  3399. });
  3400. </script>
  3401. <script type="text/javascript" >
  3402.    (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
  3403.      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)})
  3404.    (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
  3405.  
  3406.    ym(9638098, "init", {
  3407.      clickmap:true,
  3408.      trackLinks:true,
  3409.      accurateTrackBounce:true,
  3410.      webvisor:true,
  3411.      ecommerce:"dataLayer"
  3412.    });
  3413.  </script>
  3414. <script>
  3415.            (function (w, d, s, l, i) {
  3416.                w[l] = w[l] || [];
  3417.                w[l].push({
  3418.                    'gtm.start':
  3419.                        new Date().getTime(), event: 'gtm.js'
  3420.                });
  3421.                var f = d.getElementsByTagName(s)[0],
  3422.                    j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : '';
  3423.                j.async = true;
  3424.                j.src =
  3425.                    'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
  3426.                f.parentNode.insertBefore(j, f);
  3427.            })(window, document, 'script', 'dataLayer', 'GTM-WVCDCNW');
  3428.        </script>
  3429. <script>
  3430.            window['GoogleAnalyticsObject'] = 'ga';
  3431.            window['ga'] = window['ga'] || function() {
  3432.            (window['ga'].q = window['ga'].q || []).push(arguments)
  3433.            };
  3434.        </script>
  3435. </body>
  3436. </html>
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda