@MichaelPeterson

Как в коде vue.js реализовать редирект на другие домены?

Есть код с геотаргетированием. При заходе на сайт пользователь видит поп-ап с вопросом "Ваш город (например) Москва?". Нажимает да и остаётся на сайте. Нажимает "нет" и вылазит поп-ап со списком городом. Как дополнить этот код, чтобы города были ссылками на региональные субдомены?

// Generated by CoffeeScript 2.3.2
$(document).ready(function() {
  var city_address_map;
  city_address_map = {
    'Казань': 'ул. Петербургская 9, ТЦ Республика',
    'Волгоград': 'ул. Землячки 110Б, ТЦ Мармелад',
    'Смоленск': 'ул. 25 Сентября, 35а ТЦ Макси',
    'Ярославль': 'ул. Гоголя, 2 ТЦ Фараон',
    'Благовещенск': 'ул. Тенистая 160 ТЦ Флагман'
  };
  window.vue_header_city_block = new Vue({
    el: '#vue_header_city_block',
    data: function() {
      return {
        geolocation: {},
        geolocation_city: false,
        geolocation_confirmed: '',
        city_address_map: city_address_map
      };
    },
    mounted: function() {
      return this.$nextTick(function() {
        return $('#vue_header_city_block').show();
      });
    },
    methods: {
      confirm_geolocation: function() {
        Cookies.set('voytech_geolocation_confirmed', 'yes', {
          expires: 30,
          path: '/'
        });
        return this.geolocation_confirmed = 'yes';
      },
      dismis_geolocation: function() {
        Cookies.set('voytech_geolocation_confirmed', 'no', {
          expires: 30,
          path: '/'
        });
        return this.geolocation_confirmed = 'no';
      }
    }
  });
  window.vue_header_city_block_mobile = new Vue({
    el: '#vue_header_city_block_mobile',
    data: function() {
      return {
        geolocation: {},
        geolocation_city: false,
        geolocation_confirmed: '',
        city_address_map: city_address_map
      };
    },
    mounted: function() {
      return this.$nextTick(function() {
        return $('#vue_header_city_block_mobile').show();
      });
    },
    watch: {
      geolocation_city: function() {
        var self;
        self = this;
        console.log(self.geolocation_city);
        if (self.geolocation_city && self.city_address_map.hasOwnProperty(self.geolocation_city)) {
          if ($('#mobile_city_address_block').length === 0) {
            return $('[data-id="9ea2ea0"]').after(`<div id='mobile_city_address_block'>Адрес: ${self.city_address_map[self.geolocation_city]}</div>`);
          } else {
            // $('.elementor-element').each (i,c)->

            // 	if $(c).text().indexOf('Заказать звонок') isnt -1

            // 		if $('#mobile_city_address_block').length is 0
            // 			$(c).after "<div id='mobile_city_address_block'>Адрес: #{self.city_address_map[self.geolocation_city]}</div>"
            return $('#mobile_city_address_block').text(`Адрес: ${self.city_address_map[self.geolocation_city]}`);
          }
        } else {
          return $('#mobile_city_address_block').text('');
        }
      }
    },
    methods: {
      confirm_geolocation: function() {
        Cookies.set('voytech_geolocation_confirmed', 'yes', {
          expires: 30,
          path: '/'
        });
        return this.geolocation_confirmed = 'yes';
      },
      dismis_geolocation: function() {
        Cookies.set('voytech_geolocation_confirmed', 'no', {
          expires: 30,
          path: '/'
        });
        return this.geolocation_confirmed = 'no';
      }
    }
  });
  window.vue_city_select_popup = new Vue({
    el: '#vue_city_select_popup',
    data: function() {
      return {
        geolocation: {},
        geolocation_city: false,
        city_search_query: '',
        city_search_results: [],
        popular_cities: ['Казань', 'Ярославль', 'Благовещенск', 'Смоленск', 'Набережные Челны', 'Москва', 'Санкт-Петербург', 'Екатеринбург', 'Новосибирск', 'Пермь', 'Воронеж', 'Челябинск', 'Уфа', 'Владивосток', 'Волгоград', 'Красноярск', 'Нижний Новгород', 'Омск', 'Ростов-на-Дону', 'Самара', 'Саратов', 'Хабаровск']
      };
    },
    methods: {
      select_city: function(city_name, type) {
        console.log('select_city', city_name, type);
        if (type === 'popular') {
          window.vue_header_city_block.geolocation.city = city_name;
          window.vue_header_city_block.geolocation_city = city_name;
          window.vue_header_city_block.confirm_geolocation();
          window.vue_header_city_block_mobile.geolocation.city = city_name;
          window.vue_header_city_block_mobile.geolocation_city = city_name;
          window.vue_header_city_block_mobile.geolocation_city = city_name;
          window.vue_header_city_block_mobile.geolocation_city = city_name;
          window.vue_header_city_block_mobile.geolocation_city = city_name;
          window.vue_header_city_block_mobile.confirm_geolocation();
          Cookies.set('voytech_geolocation', JSON.stringify({
            city: city_name
          }), {
            expires: 30,
            path: '/'
          });
          window.location.hash = 'close';
        }
        if (type === 'search') {
          window.vue_header_city_block.geolocation.city = city_name;
          window.vue_header_city_block.geolocation_city = city_name;
          window.vue_header_city_block.confirm_geolocation();
          window.vue_header_city_block_mobile.geolocation.city = city_name;
          window.vue_header_city_block_mobile.geolocation_city = city_name;
          window.vue_header_city_block_mobile.confirm_geolocation();
          Cookies.set('voytech_geolocation', JSON.stringify({
            city: city_name
          }), {
            expires: 30,
            path: '/'
          });
          return window.location.hash = 'close';
        }
      }
    },
    watch: {
      city_search_query: function() {
        var api_url, payload, self;
        self = this;
        console.log(self.city_search_query);
        if (self.city_search_query !== '') {
          payload = {
            query: self.city_search_query,
            contentType: 'city',
            withParent: 1,
            typeCode: 7,
            limit: 10
          };
          api_url = '/wp-content/themes/oceanwp/voytech_geo.php';
          return $.getJSON(api_url, payload, function(res) {
            var i, item, len, ref, results;
            console.log(res);
            self.city_search_results = res.result;
            self.city_search_results = [];
            ref = res.result;
            results = [];
            for (i = 0, len = ref.length; i < len; i++) {
              item = ref[i];
              if (item.id.toLowerCase() !== 'free') {
                results.push(self.city_search_results.push(item));
              } else {
                results.push(void 0);
              }
            }
            return results;
          });
        } else {
          return self.city_search_results = [];
        }
      }
    }
  });
  if (Cookies.get('voytech_geolocation_confirmed') === 'yes') {
    window.vue_header_city_block.geolocation_confirmed = 'yes';
    window.vue_header_city_block_mobile.geolocation_confirmed = 'yes';
  } else {
    window.vue_header_city_block.geolocation_confirmed = 'no';
    window.vue_header_city_block_mobile.geolocation_confirmed = 'no';
  }
  if (Cookies.get('voytech_geolocation')) {
    window.vue_header_city_block.geolocation = JSON.parse(Cookies.get('voytech_geolocation'));
    window.vue_header_city_block.geolocation_city = JSON.parse(Cookies.get('voytech_geolocation')).city;
    window.vue_header_city_block_mobile.geolocation = JSON.parse(Cookies.get('voytech_geolocation'));
    window.vue_header_city_block_mobile.geolocation_city = JSON.parse(Cookies.get('voytech_geolocation')).city;
    window.vue_city_select_popup.geolocation = JSON.parse(Cookies.get('voytech_geolocation'));
    return window.vue_city_select_popup.geolocation_city = JSON.parse(Cookies.get('voytech_geolocation')).city;
  } else {
    return ymaps.ready(function() {
      window.vue_header_city_block.geolocation = ymaps.geolocation;
      window.vue_header_city_block.geolocation_city = ymaps.geolocation.city;
      window.vue_header_city_block_mobile.geolocation = ymaps.geolocation;
      window.vue_header_city_block_mobile.geolocation_city = ymaps.geolocation.city;
      window.vue_city_select_popup.geolocation = ymaps.geolocation;
      window.vue_city_select_popup.geolocation_city = ymaps.geolocation.city;
      return Cookies.set('voytech_geolocation', JSON.stringify(ymaps.geolocation), {
        expires: 30,
        path: '/'
      });
    });
  }
});

// setInterval(->
// 	console.log $('.prmn-cmngr__confirm .prmn-cmngr__popup .mobile')
// , 500)
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ответы на вопрос 1
Всё, что тебе нужно находится тут:
https://router.vuejs.org/ru/guide/essentials/redir...

const router = new VueRouter({
  routes: [
    { path: '/a', redirect: to => {
      // в функцию в качестве аргумента передаётся маршрут
      // возвращаемым значением должна быть строка или объект пути
    }}
  ]
})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы