From 1d06acf2e07c87fb0163dad11dca04d2465412c8 Mon Sep 17 00:00:00 2001 From: Arsen Mirzaev Tatyano-Muradovich Date: Thu, 14 Oct 2021 16:20:10 +1000 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=B0=D1=80=D1=82=D1=8B=20yan?= =?UTF-8?q?dex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mirzaev/skillparts/system/assets/AppAsset.php | 17 +-- .../system/controllers/ProductController.php | 2 + .../system/controllers/TerminalController.php | 43 ++++++ .../system/views/partners/index.php | 42 +++--- .../system/web/css/pages/partners.css | 52 ++------ .../skillparts/system/web/js/yandex/map.js | 123 ++++++++++++++++++ .../system/web/js/yandex/provider.js | 96 -------------- .../skillparts/system/web/js/yandex/ymap.js | 77 ----------- 8 files changed, 202 insertions(+), 250 deletions(-) create mode 100644 mirzaev/skillparts/system/controllers/TerminalController.php create mode 100644 mirzaev/skillparts/system/web/js/yandex/map.js delete mode 100644 mirzaev/skillparts/system/web/js/yandex/provider.js delete mode 100644 mirzaev/skillparts/system/web/js/yandex/ymap.js diff --git a/mirzaev/skillparts/system/assets/AppAsset.php b/mirzaev/skillparts/system/assets/AppAsset.php index 55e1348..22c9a25 100644 --- a/mirzaev/skillparts/system/assets/AppAsset.php +++ b/mirzaev/skillparts/system/assets/AppAsset.php @@ -1,22 +1,10 @@ - * @since 2.0 - */ class AppAsset extends AssetBundle { public $basePath = '@webroot'; @@ -37,7 +25,7 @@ class AppAsset extends AssetBundle 'js/bootstrap/bootstrap.min.js', 'https://cdn.jsdelivr.net/bxslider/4.1.1/jquery.bxslider.min.js', 'https://unpkg.com/cookielib/src/cookie.min.js', - 'https://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=ru-RU', + 'https://api-maps.yandex.ru/2.1/?apikey=ff21ed7c-2d34-4f91-8d7f-2144ec3e4397&lang=ru_RU', 'js/moment.min.js', 'js/menu.js', 'js/main.js', @@ -45,7 +33,6 @@ class AppAsset extends AssetBundle 'js/search.js', 'js/notification.js', 'js/reinitialization.js', - 'https://api-maps.yandex.ru/2.1/?apikey=0c4ba9aa-c448-4bd0-9c8c-6181f21ede90&lang=ru_RU', 'js/yandex/metrika.js', 'js/yandex/geolocation.js', 'https://www.googletagmanager.com/gtag/js?id=G-6XYKBJJWR4', diff --git a/mirzaev/skillparts/system/controllers/ProductController.php b/mirzaev/skillparts/system/controllers/ProductController.php index 320a3c2..91538ca 100644 --- a/mirzaev/skillparts/system/controllers/ProductController.php +++ b/mirzaev/skillparts/system/controllers/ProductController.php @@ -286,6 +286,8 @@ class ProductController extends Controller $return['alert'] = "Товар удалён: $catn"; $return['location'] = '/'; } else { + // Не удалось удалить + // Запись кода ответа yii::$app->response->statusCode = 500; diff --git a/mirzaev/skillparts/system/controllers/TerminalController.php b/mirzaev/skillparts/system/controllers/TerminalController.php new file mode 100644 index 0000000..4c20b53 --- /dev/null +++ b/mirzaev/skillparts/system/controllers/TerminalController.php @@ -0,0 +1,43 @@ +request->post('amount') ?? yii::$app->request->get('amount'); + + if ($amount < 501) { + // Пройдена проверка + + if (yii::$app->request->isPost) { + // POST-запрос + + // Запись формата ответа + yii::$app->response->format = Response::FORMAT_JSON; + + return [ + 'terminals' => Terminal::read($amount), + '_csrf' => yii::$app->request->getCsrfToken() + ]; + } + } else { + // Не пройдена проверка + + // Запись кода ответа + yii::$app->response->statusCode = 500; + } + + return false; + } +} diff --git a/mirzaev/skillparts/system/views/partners/index.php b/mirzaev/skillparts/system/views/partners/index.php index b24d0c6..8caa109 100644 --- a/mirzaev/skillparts/system/views/partners/index.php +++ b/mirzaev/skillparts/system/views/partners/index.php @@ -1,34 +1,36 @@ -
- - - -
-
- - +
+
+
-
- -
-
- -
+
-
- + + + diff --git a/mirzaev/skillparts/system/web/css/pages/partners.css b/mirzaev/skillparts/system/web/css/pages/partners.css index e4a1e2e..08373cb 100644 --- a/mirzaev/skillparts/system/web/css/pages/partners.css +++ b/mirzaev/skillparts/system/web/css/pages/partners.css @@ -1,64 +1,32 @@ -.wrapper { - display: flex; - justify-content: space-between; -} - /* Выбор города */ -.label { - text-align: center; - font-weight: bold; - - max-width: 240px; - width: 100%; - padding: 4px 0; - - color: azure; +#page_partners>article label { background-color: #123EAB; - - position: fixed; } /* Блок городов */ -.cityShop { - width: 240px; +#page_partners>article .terminals { height: 400px; - - background-color: #fff; - overflow-y: scroll; - + scrollbar-width: none; + background-color: #fff; } -.cityShop::-webkit-scrollbar { - width: 5px; - } - - .cityShop::-webkit-scrollbar-thumb { - background-color: #123EAB; - border: 20px solid transparent; - } - - -.goto { +#page_partners>article .goto { display: block; - text-decoration: none; - margin-left: 25px; margin-top: 12px; margin-bottom: 5px; - color: black; - max-width: 190px; + text-decoration: none; + color: black; } -.goto:hover { +#page_partners>article .goto:hover { font-weight: bold; border-bottom: 2px solid #123EAB; } /* Карта */ -#map { - max-width: 850px; - width: 100%; +#page_partners>article #map { height: 400px; -} \ No newline at end of file +} diff --git a/mirzaev/skillparts/system/web/js/yandex/map.js b/mirzaev/skillparts/system/web/js/yandex/map.js new file mode 100644 index 0000000..ad33735 --- /dev/null +++ b/mirzaev/skillparts/system/web/js/yandex/map.js @@ -0,0 +1,123 @@ +function partners_yandex_map_init() { + // Функция ymaps.ready() будет вызвана, когда + // загрузятся все компоненты API, а также когда будет готово DOM-дерево. + let myMap; + let placemarkCollections = {}; + let placemarkList = {}; + + // Создаем карту + myMap = new ymaps.Map("map", { + center: [48.486518, 135.115512], + zoom: 15, + controls: [ + 'zoomControl' + ], + zoomMargin: [20] + }); + + + let terminals = partners_terminals_read(); + + for (let i = 0; i < shopList.length; i++) { + + // Добавляем название города в список + $('div#cities').append('' + shopList[i].cityName + '') + + // Создаём коллекцию меток для города + let cityCollection = new ymaps.GeoObjectCollection(); + + for (let c = 0; c < shopList[i].shops.length; c++) { + let shopInfo = shopList[i].shops[c]; + + let shopPlacemark = new ymaps.Placemark( + shopInfo.coordinates, + { + hintContent: shopInfo.name, + balloonContent: shopInfo.name, + }, + ); + + if (!placemarkList[i]) placemarkList[i] = {}; + placemarkList[i][c] = shopPlacemark; + + // Добавляем метку в коллекцию + cityCollection.add(shopPlacemark); + + } + + placemarkCollections[i] = cityCollection; + + // Добавляем коллекцию на карту + myMap.geoObjects.add(cityCollection); + + } +} + +function partners_terminals_read(amount = 300) { + let terminals; + + $.ajax({ + url: '/terminals/read', + type: 'post', + dataType: 'json', + data: { + '_csrf': yii.getCsrfToken(), + amount + }, + success: function (data, status, xhr) { + + if (data !== undefined) { + // Получены данные с сервера + + // Список терминалов + if (data.terminals !== undefined) { + + terminals = data.terminals; + } + } + + return yandex_map_response(data, status, xhr); + }, + error: yandex_map_response_error + }); + + return terminals; +} + +// Переключение города +$('div#cities').on('click', 'a#goto', function () { + let cityId = $(this).attr('data-goto'); + + // Масштабируем и выравниваем карту так, чтобы были видны метки для выбранного города + myMap.setBounds(placemarkCollections[cityId].getBounds(), { checkZoomRange: true }).then(function () { + if (myMap.getZoom() > 15) myMap.setZoom(15); // Если значение zoom превышает 15, то устанавливаем 15. + }); + + // Добавление списка филиалов определенного города + // $('#shops').html(''); + // for (let c = 0; c < shopList[cityId].shops.length; c++) { + // $('#shops').append('
  • ' + shopList[cityId].shops[c].name + '
  • '); + // } +}); + + +function yandex_map_response(data, status, xhr) { + // Обработка ответов + + main_response(data, status, xhr); +}; + +function yandex_map_response_success(data, status, xhr) { + // Обработка ответов от удавшихся запросов + + yandex_map_response(data, status, xhr); +}; + +function yandex_map_response_error(data, status, xhr) { + // Обработка ответов от неудавшихся запросов + + // Инициализация + data = data.responseJSON; + + yandex_map_response(data, status, xhr); +}; diff --git a/mirzaev/skillparts/system/web/js/yandex/provider.js b/mirzaev/skillparts/system/web/js/yandex/provider.js deleted file mode 100644 index d78b4c6..0000000 --- a/mirzaev/skillparts/system/web/js/yandex/provider.js +++ /dev/null @@ -1,96 +0,0 @@ - // Список городов и филиалов в них - var shopList = [ - { - 'cityName': 'Архангельск', - 'shops': [ - {'coordinates': [64.539304, 40.518735], 'name': 'Рязанский проспект, 6Ас21'}, - ] - }, - { - 'cityName': 'Владивосток', - 'shops': [ - {'coordinates': [43.134019, 131.928379], 'name': 'Рязанский проспект, 6Ас21'}, - ] - }, - { - 'cityName': 'Екатеринбург', - 'shops': [ - {'coordinates': [56.838002, 60.597295], 'name': 'Будапештская улица, 36к2'}, - ] - }, - { - 'cityName': 'Калининград', - 'shops': [ - {'coordinates': [55.916229, 37.854467], 'name': 'Будапештская улица, 36к2'}, - ] - }, - { - 'cityName': 'Краснодар', - 'shops': [ - {'coordinates': [59.99486277158917, 30.406505207030918], 'name': 'проспект Непокорённых'}, - ] - }, - { - 'cityName': 'Красноярск', - 'shops': [ - {'coordinates': [59.863210042666125, 30.37903938671841], 'name': 'Будапештская улица, 36к2'}, - {'coordinates': [59.99486277158917, 30.406505207030918], 'name': 'проспект Непокорённых'} - ] - }, - { - 'cityName': 'Комосомольск-на-Амуре', - 'shops': [ - {'coordinates': [50.54986, 137.007867], 'name': 'Будапештская улица, 36к2'}, - ] - }, - { - 'cityName': 'Москва', - 'shops': [ - {'coordinates': [55.72532368326033, 37.748675112058876], 'name': 'Рязанский проспект, 6Ас21'}, - ] - }, - { - 'cityName': 'Мурманск', - 'shops': [ - {'coordinates': [68.96956299999999, 33.07454], 'name': 'Будапештская улица, 36к2'}, - ] - }, - { - 'cityName': 'Находка', - 'shops': [ - {'coordinates': [59.863210042666125, 30.37903938671841], 'name': 'Будапештская улица, 36к2'}, - ] - }, - { - 'cityName': 'Новосибирск', - 'shops': [ - {'coordinates': [55.028739, 82.90692799999999], 'name': 'Будапештская улица, 36к2'}, - ] - }, - { - 'cityName': 'Омск', - 'shops': [ - {'coordinates': [54.989342, 73.368212], 'name': 'Будапештская улица, 36к2'}, - ] - }, - { - 'cityName': 'Санкт-Петербург', - 'shops': [ - {'coordinates': [59.863210042666125, 30.37903938671841], 'name': 'Будапештская улица, 36к2'}, - {'coordinates': [59.99486277158917, 30.406505207030918], 'name': 'проспект Непокорённых'} - ] - }, - { - 'cityName': 'Сочи', - 'shops': [ - {'coordinates': [59.863210042666125, 30.37903938671841], 'name': 'Будапештская улица, 36к2'}, - {'coordinates': [59.99486277158917, 30.406505207030918], 'name': 'проспект Непокорённых'} - ] - }, - { - 'cityName': 'Хабаровск', - 'shops': [ - {'coordinates': [48.486518, 135.115512], 'name': 'Промышленная, 3'}, - ] - }, - ]; \ No newline at end of file diff --git a/mirzaev/skillparts/system/web/js/yandex/ymap.js b/mirzaev/skillparts/system/web/js/yandex/ymap.js deleted file mode 100644 index aaacac6..0000000 --- a/mirzaev/skillparts/system/web/js/yandex/ymap.js +++ /dev/null @@ -1,77 +0,0 @@ -// Функция ymaps.ready() будет вызвана, когда - // загрузятся все компоненты API, а также когда будет готово DOM-дерево. - var myMap; - var placemarkCollections = {}; - var placemarkList = {}; - - - - ymaps.ready(init); - - function init() { - - // Создаем карту - myMap = new ymaps.Map("map", { - center: [48.486518, 135.115512], - zoom: 15, - controls: [ - 'zoomControl' - ], - zoomMargin: [20] - }); - - // var suggestView1 = new ymaps.SuggestView('suggest', { results: 3}); - - for (var i = 0; i < shopList.length; i++) { - - // Добавляем название города в список - $('div#cities').append('' + shopList[i].cityName + '') - - // Создаём коллекцию меток для города - var cityCollection = new ymaps.GeoObjectCollection(); - - for (var c = 0; c < shopList[i].shops.length; c++) { - var shopInfo = shopList[i].shops[c]; - - var shopPlacemark = new ymaps.Placemark( - shopInfo.coordinates, - { - hintContent: shopInfo.name, - balloonContent: shopInfo.name, - }, - ); - - if (!placemarkList[i]) placemarkList[i] = {}; - placemarkList[i][c] = shopPlacemark; - - // Добавляем метку в коллекцию - cityCollection.add(shopPlacemark); - - } - - placemarkCollections[i] = cityCollection; - - // Добавляем коллекцию на карту - myMap.geoObjects.add(cityCollection); - - } - - } - - // Переключение города - $('div#cities').on('click', 'a#goto', function () { - var cityId = $(this).attr('data-goto'); - - // Масштабируем и выравниваем карту так, чтобы были видны метки для выбранного города - myMap.setBounds(placemarkCollections[cityId].getBounds(), {checkZoomRange:true}).then(function(){ - if(myMap.getZoom() > 15) myMap.setZoom(15); // Если значение zoom превышает 15, то устанавливаем 15. - }); - - // Добавление списка филиалов определенного города - // $('#shops').html(''); - // for (var c = 0; c < shopList[cityId].shops.length; c++) { - // $('#shops').append('
  • ' + shopList[cityId].shops[c].name + '
  • '); - // } - - }); -