1import MapContainer from "./../MapContainer/index.js"; 2import OverlappingContent from "./../OverlappingContent/index.js"; 3import CarouselBody from "./../CarouselBody/index.js"; 4 5const mapGetters = Vuex.mapGetters; 6const mapActions = Vuex.mapActions; 7 8export default { 9 template: /* html */ ` 10 <overlapping-content modalKey="editer-address" class="modal --address" :show> 11 <div class="modal_title" v-if="!address_add">ÐдÑÐµÑ Ð´Ð¾ÑÑавки</div> 12 <div class="modal_title" v-else>ÐобавиÑÑ Ð°Ð´ÑеÑ</div> 13 <!--<div class="modal_section "> 14 <div class="input-block"> 15 <select name="city" :class="{'--is_selected':address.city}" v-model="address.city"> 16 <option disabled selected value="null">ÐÑбеÑеÑе гоÑод</option> 17 <option v-for="city in cities" :selected="$cfg.host == city.url" :value="city.name">{{ city.name }}</option> 18 </select> 19 </div> 20 <button class="button dark" type="button">ÐÑбÑаÑÑ</button> 21 </div>--> 22 <div class="modal_section" v-if="!address_add"> 23 <label type="button" class="tab m-tab-switch">ÐоÑÑавка <input type="radio" value="1" v-model="address.type_receipt"/></label> 24 <label type="button" class="tab m-tab-switch">СамовÑвоз <input type="radio" value="2" v-model="address.type_receipt"/></label> 25 </div> 26 <div class="modal_container" v-show="address.type_receipt == 1"> 27 28 <div class="modal_subtitle addres_add" v-if="!address_add">Ðои адÑеÑа 29 <button v-if="addresses.length != 0" class="addresses_title-add button-ico" :class="{'--showed':addressAdd}" @click="addressAdd = !addressAdd"> 30 <img :src="$cfg.templatePath+'/assets/images/icons/ui/plus.svg'" alt=""> 31 </button> 32 </div> 33 34 <div class="modal_section" v-show="addressAdd || addresses.length==0"> 35 <div class="input-block"> 36 <input type="text" v-model="address.street" placeholder="ÐведиÑе ÑлиÑÑ Ð¸ дом" autocomplete="false" id="street"> 37 </div> 38 <div class="input-block" v-if="address_add"> 39 <input type="text" v-model="address.flat" placeholder="ÐведиÑе Ð½Ð¾Ð¼ÐµÑ ÐºÐ²Ð°ÑÑиÑÑ" autocomplete="false" id="flat"> 40 </div> 41 <button class="button dark" type="button" @click="select_new_address();">{{address_add ? 'ÐобавиÑÑ' : 'ÐоÑÑавиÑÑ ÑÑда' }}</button> 42 </div> 43 44 <a v-if="false" href="javascript:" class="check-geo" v-show="addressAdd || addresses.length==0"> 45 <img :src="$cfg.templatePath + '/assets/images/icons/ui/map_point.svg'" alt=""> 46 <span>ÐпÑеделиÑÑ Ð¼ÐµÑÑоположение</span> 47 </a> 48 49 <div 50 v-if="addresses.length && !address_add" 51 class="adresses_carousel" 52 > 53 <carousel-body 54 base_class="adresses_carousel" 55 :buttons="false" 56 :addresses="addresses" 57 :swiper_options="{ 58 autoheight: true, 59 spaceBetween: 20, 60 slidesPerView: 'auto', 61 }" 62 @select_address = "select_old_address" 63 > 64 </carousel-body> 65 </div> 66 </div> 67 68 <div 69 v-if="user.address" 70 v-show="address.type_receipt == 2" 71 class="modal_section" 72 > 73 <div class="input-block"> 74 <select v-model="picupPoint" :class="{'--is_selected':picupPoint !== null}"> 75 <option value="null" disabled selected>ÐÑбеÑиÑе каÑе Ð´Ð»Ñ ÑамовÑвоза</option> 76 <option :value="pickup_point.id" v-for="(pickup_point, key) in user.address.pickup_point" :key v-html="getAddressName(pickup_point)"></option> 77 </select> 78 </div> 79 <button class="button dark" @click="select_pickup_point();" type="button">ÐабеÑÑ Ð¾ÑÑÑда</button> 80 </div> 81 82 83 <div class="modal_map map" id="address_map"> 84 85 <map-container 86 key="delivery" 87 v-show="address.type_receipt == 1" 88 :location="{ 89 center: address.coord, 90 zoom: address.zoom, 91 }" 92 @click-popup-button="select_new_address();" 93 v-model:dadata="address.dadata" 94 v-model:select-address="selectAddress" 95 :type_receipt="address.type_receipt" 96 > 97 </map-container> 98 99 100 <map-container 101 key="pickup" 102 v-show="address.type_receipt == 2" 103 :location="{ 104 center: address.coord, 105 zoom: address.zoom, 106 }" 107 @show-popup="(data)=>{picupPoint = data}" 108 @click-popup-button="(data)=>{picupPoint = data; select_pickup_point();}" 109 :markers="pickupMarkers" 110 :type_receipt="address.type_receipt" 111 > 112 </map-container> 113 114 </div> 115 </overlapping-content> 116 `, 117 components: { 118 OverlappingContent, 119 MapContainer, 120 CarouselBody, 121 }, 122 data() { 123 return { 124 dragStop: false, 125 picupPoint: null, 126 address: { 127 type_receipt: 1, 128 city: null, 129 street: "", 130 coord: [43.972108, 56.329068],
131 dadata: {}, 132 zoom: 9, 133 }, 134 addressAdd: this.address_add, 135 selectAddress: false, 136 pickupMarkers: [], 137 }; 138 }, 139 methods: { 140 getAddressName(point) { 141 if (point.is_user_city) { 142 return point.name; 143 } 144 else { 145 return `(${point.city.split(' ') 146 .map(word => word.slice(0, 4)) 147 .join('.')}.) ` + point.name; 148 } 149 }, 150 ...mapActions(["set_address", "closeAddressEditor"]), 151 get_location() { 152 var serviceUrl = 153 "https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address"; 154 var params = { 155 type: "GET", 156 contentType: "application/json", 157 headers: { 158 Authorization: "Token cf0c882f71fecd9fe05af580b7c5b988599b3d1b", 159 }, 160 }; 161 }, 162 initSuggestions() { 163 $("#street").suggestions({ 164 token: "fecc8692fbd4ee158bff27753e5fb86889188868", 165 // token: "d2b7072d3a32d944fcc153641dc1eadbee33dadb", 166 type: "ADDRESS", 167 count: 5, 168 bounds: "street-house", 169 autoSelectFirst: true, 170 location: { 171 country_iso_code: "RU", 172 }, 173 onSelect: (suggestion) => { 174 this.address.coord = [ 175 suggestion.data.geo_lon, 176 suggestion.data.geo_lat, 177 ]; 178 if (this.address.street != suggestion.value) { 179 this.address.street = suggestion.value; 180 } 181 this.address.city = suggestion.data.city; 182 this.address.dadata = suggestion; 183 this.address.zoom = 17; 184 this.selectAddress = { 185 coord: this.address.coord, 186 popup: false, 187 title: this.address.street, 188 updateField: false, 189 }; 190 }, 191 }); 192 }, 193 async select_pickup_point() { 194 let res = await this.set_address({ 195 address_data: this.picupPoint, 196 address_type: "pickup_point", 197 }); 198 if (res) { 199 this.closeAddressEditor(); 200 this.$emit("close"); 201 } 202 }, 203 async select_old_address(address) { 204 if (address.is_pickup == "1") { 205 let res = await this.set_address({ 206 address_data: address.pickup_point, 207 address_type: "pickup_point", 208 }); 209 if (res) { 210 this.closeAddressEditor(); 211 this.$emit("close"); 212 } 213 } else { 214 let res = await this.set_address({ address_data: address.hash }); 215 if (res) { 216 this.closeAddressEditor(); 217 this.$emit("close"); 218 } 219 } 220 }, 221 async select_new_address() { 222 let res = await this.set_address({ 223 address_data: this.address.dadata, 224 address_type: "delivery_new", 225 address_flat: this.address.flat, 226 }); 227 if (res) { 228 this.closeAddressEditor(); 229 this.$emit("close"); 230 } 231 }, 232 getCityDomain(city) { 233 let cityName = ''; 234 this.cities.forEach(function (checkCity) { 235 if (checkCity.name == city) { 236 cityName = checkCity.url; 237 } 238 }); 239 return cityName; 240 }, 241 }, 242 props: { 243 show: { //показаÑÑ Ð¼Ð¾Ð´Ð°Ð»ÐºÑ 244 type: Boolean, 245 required: false, 246 }, 247 address_add: { //ÑкÑÑÑие ÑлеменÑов вÑбоÑа, оÑÑавлÑÐµÑ ÑолÑко добавление (иÑполÑзÑеÑÑÑ Ð² лк) 248 type: Boolean, 249 default: false, 250 }, 251 }, 252 updated() { 253 this.initSuggestions(this.user.address.pickup_point); 254 }, 255 computed: { 256 ...mapGetters({ 257 user: "GET_USER", 258 basket: "GET_BASKET", 259 cities: "GET_CITIES", 260 addresses: "GET_ADDRESSES", 261 }), 262 }, 263 watch: { 264 picupPoint(newVal) { 265 this.pickupMarkers.forEach((point) => { 266 if (point.eventData == newVal) point.show = true; 267 else point.show = false; 268 }); 269 }, 270 "user.address"() { 271 if (this.user.address) { 272 this.user.address.pickup_point.forEach((pickup_point) => { 273 this.pickupMarkers.push({ 274 city_domain: this.getCityDomain(pickup_point.city), 275 is_user_city: pickup_point.is_user_city, 276 draggable: false, 277 popup_title: pickup_point.name, 278 eventData: pickup_point.id, 279 coord: pickup_point.coord.reverse(), 280 popup_button: "ÐабеÑÑ Ð¾ÑÑÑда", 281 popup: true, 282 show: false, 283 }); 284 }); 285 } 286 }, 287 selectAddress() { 288 if (this.selectAddress.updateField) { 289 this.address.zoom = 17; 290 this.address.coord = this.selectAddress.coord; 291 this.address.street = this.selectAddress.popup_title; 292 293 if (this.selectAddress.popup) { 294 this.selectAddress.show = false; 295 this.selectAddress.popup_button = this.address_add 296 ? false 297 : "ÐоÑÑавиÑÑ ÑÑда"; 298 this.selectAddress.show = true; 299 } 300 } 301 }, 302 }, 303};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.