Advertisement
Guest User

Untitled

a guest
May 24th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.  
  3. Vue.component('object-row', {
  4.   props: {
  5.     id: {},
  6.     pagetitle: {
  7.       type: String,
  8.       required: true
  9.     },
  10.     totalarea: {
  11.       type: String,
  12.       required: true
  13.     },
  14.     uri: {
  15.       /*type: String,
  16.       required: true*/
  17.     },
  18.     rooms: {
  19.       type: String,
  20.       required: true
  21.     },
  22.     raion: {
  23.         required: true
  24.     },
  25.     street: {
  26.         type: String
  27.     },
  28.     dom: {
  29.         type: String
  30.     },
  31.     allraion: {
  32.         type:Object,
  33.         required: true
  34.     },
  35.     floor: {
  36.         type: String,
  37.         required: true
  38.     },
  39.     floors: {
  40.         type: String,
  41.          required: true
  42.     },
  43.     description:
  44.     {
  45.       required: true
  46.     },
  47.     createdon: {
  48.       type: String,
  49.       required: true
  50.     },
  51.     image:{
  52.         type: Array
  53.     },
  54.     cost: {
  55.       type: String,
  56.       required: true
  57.     },
  58.     contact_name: {
  59.       type: String,
  60.       required: true
  61.     },
  62.       friends: {
  63.         type: Number,
  64.         required: true
  65.     }
  66.   },
  67.   template:
  68.         '<li class="accordion_item">'+
  69.          '<div class="share" >'+       
  70.             '<get-phone :id="id" :contact_name="contact_name"></get-phone>'+
  71.          '</div>'+
  72.          '<share :uri="uri"></share></div></div>'+
  73.          ' <div class="collapsible-header title_block">'+
  74.             '<div class="object flex" >'+
  75.                     '<div class="pre-icon">'+
  76.                         '<div class="preimg">'+
  77.                             '<span><img :src="getcover"></span>'+
  78.                             '<div v-if="friendsShow" class="friend-icon"></div>'+
  79.                             '<div class="lot">{{ id }}</div>'+
  80.                             '<div class="date">{{ date_c }} </div>'+   
  81.                         '</div>'+
  82.                         '<i class="material-icons togle-close" >&#xE5CD;</i>'+
  83.                     '</div>'+
  84.                     '<div class="pre-description ">'+
  85.                         '<div class="title">{{ pagetitle }}</div>'+
  86.                         '<div class="price-sq flex"><div class="sq">'+ 
  87.                             '{{ cost_b }} р., '+  
  88.                             '<span>{{ totalarea }} м<sup>2</sup></span></div> <span>'+
  89.                             '{{ getRaionName(raion) }}</span></div></div></div>'+
  90.          '</div>'+
  91.          ' <div class="collapsible-body info">'+
  92.                 '<div class="load-content" >'+
  93.                 '<div class="big-prew">'+
  94.                     '<div class="tabs_block">'+
  95.                         '<ul class="tabs">'+
  96.                             '<li class="active pict icon-prew"></li>'+
  97.                             '<li  class="ping icon-prew"></li>'+
  98.                         '</ul>'+                           
  99.                             '<div class="boxs visible">'+
  100.                                 '<div class="slidgallery">'+
  101.                                     '<div class="gallery-container">'+
  102.                                         '<div class="gals">'+
  103.                                             '<ul class="carousel carousel-slider" style="height: 362.078px;">'+
  104.                                                 '<li v-for="image in image"  class="carousel-item "><img :src=" image"  class="materialboxed responsive-img" /></li>'+ 
  105.                                             '</ul>'+
  106.                                         '</div>'+
  107.                                     '</div>'+
  108.                                 '</div>'+
  109.                             '</div>'+                  
  110.                             '<div class="boxs">'+
  111.                                 '<div class="map"></div>'+
  112.                             '</div>'+
  113.                         '</div>'+              
  114.                     '</div>'+
  115.                     '<div class="tabs_block">'+        
  116.                         '<ul class="tabs">'+
  117.                             '<li class="active">Детали</li>'+
  118.                             '<li>Описание</li>'+
  119.                             '<li v-if="friendsShow" @click="loadFriends" class="friend-tab">Покупатель</li>'+
  120.                         '</ul>'+                   
  121.                         '<div class="boxs visible params">'+
  122.                             '<div class="param">'+
  123.                                 '<div class="col s6">'+
  124.                                     '<p><span class="bold">Площадь:</span><span>{{ totalarea }} м<sup>2</sup></span></p>'+
  125.                                     '<p><span class="bold">Комнат:  </span><span>{{ rooms }}</span></p>'+
  126.                                     '<p><span class="bold">Этаж / Этажность:  </span><span>{{ floor }}/{{ floors }}</span></p>'+
  127.                                 '</div>'+
  128.                                 '<div class="col s6">'+
  129.                                     '<p><span class="bold">Район:</span><span>{{ getRaionName(raion) }}</span></p>'+
  130.                                     '<p><span class="bold">Улица: </span><span>{{ street }}</span></p>'+
  131.                                     '<p><span class="bold">Номер дома:</span><span>{{ dom }}</span></p>'+
  132.                                 '</div>'+
  133.                             '</div>'+
  134.                             '<div class="price-call">'+
  135.                                 '<div class="price">Цена:<strong>{{ cost_b }} р</strong></div>'+              
  136.                                 '<get-phone :id="id"  :contact_name="contact_name"></get-phone>'+
  137.                             '</div>'+
  138.                         '</div>'+
  139.                         '<div v-if="friendsShow" class="boxs desbox"><span v-html="description"></span></div>'+
  140.                         '<div v-if="friendsShow" class="boxs friendbox">' +
  141.                             '<p>У нижеследующих риелторов есть потенциальный покупатель на этот объект</p>'+
  142.                             '<get-friend v-for="friend in friendsList" :key="friend.id" :friend="friend"></get-friend>'+
  143.                         '</div>'+
  144.                     '</div>'+
  145.                 '</div>'+
  146.          '</div>'+
  147.         '</li>',
  148.  
  149. //------------------------
  150.                
  151.     computed: {
  152.          date_c : function () {
  153.           var date_arr = this.createdon.split(' ');
  154.           var date = date_arr[0];
  155.           date = date.split('-').reverse().join('.');
  156.           return date;
  157.         },
  158.         cost_b : function () {
  159.             var cost = this.cost;
  160.             var sepcost = thousandSeparator(cost);
  161.             return sepcost;
  162.         },
  163.         getcover: function () {
  164.             let base = 'https://aska-crm.ru/';
  165.             let cover = 'libraries/addobjs/images/no_card.jpg';
  166.  
  167.             if (this.image != undefined) {
  168.                 cover = this.image[0];
  169.             }
  170.  
  171.             return base + cover;
  172.         },
  173.         friendsShow: function() {
  174.             let show = false;
  175.             if (this.friends > 0) {
  176.                 show = true;
  177.             }
  178.  
  179.             return show;
  180.         },
  181.     },
  182.     methods: {
  183.         getRaionName : function (raion) {
  184.             var raion_arr = this.allraion[raion].split('.');
  185.             var raion = raion_arr[1];
  186.             return raion;
  187.         },
  188.         loadFriends : function () {
  189.             var params = {
  190.                 'module': 'Mobile',
  191.                 'view': 'Objects',
  192.                 'operation': 'getFriends',
  193.                 'lot': this.id
  194.             };
  195.  
  196.             HttpHelper.load(params).then(
  197.                 response => {
  198.                     this.friendsList = response;
  199.                 },
  200.                 error => {
  201.                     MaterializeHelper.errorToast(error);
  202.                 }
  203.             );
  204.  
  205.         }
  206.     },
  207.     data: function() {
  208.         return {
  209.             friendsList: []
  210.         };
  211.     },
  212.     mounted: function() {
  213.  
  214.        
  215.              $('.carousel.carousel-slider').carousel({
  216.                     fullWidth: true,
  217.                     indicators: true,
  218.                     noWrap: true,
  219.               });
  220.              
  221.             (function(i){
  222.               $(function(){
  223.                   var o, n;
  224.                   i(".title_block").on("click", function() {  
  225.                     o = i(this).parents(".accordion_item"),
  226.                     o.hasClass("active") ? (o.addClass("last").stop()) : (o.addClass("last_1").stop());                  
  227.                   });            
  228.               });
  229.             })(jQuery);
  230.            
  231.             (function(n){          
  232.             $(function(){
  233.               var b;
  234.               n(".openshare").on("click", function() {
  235.                 b = n(this).parents(".shareto"),
  236.                   b.hasClass("active") ? (b.removeClass("active")) : (b.addClass("active"),
  237.                     b.siblings(".active").removeClass("active"));        
  238.               });    
  239.             });
  240.         })(jQuery);
  241.            
  242.  
  243.         // --- Tabs
  244.         (function(s) {
  245.           $(function(){
  246.             var n;
  247.             s(".tabs").on("click", "li:not(.active)", function() {
  248.                 n = s(this).parents(".tabs_block"), s(this).dmtabs(n)
  249.             }), s.fn.dmtabs = function(n) {
  250.                 s(this).addClass("active").siblings().removeClass("active"), n.find(".boxs").eq(s(this).index()).show(1, function() {
  251.                     s(this).addClass("open_tab")
  252.                 }).siblings(".boxs").hide(1, function() {
  253.                     s(this).removeClass("open_tab")
  254.                 })
  255.             }
  256.               });
  257.         })(jQuery);
  258.         // --- Share
  259.        
  260.     }  
  261. });
  262.  
  263. $('.materialboxed').materialbox();
  264.  
  265. Vue.component('get-phone', {
  266.     template:'<div class="calling flex" v-on:click="showphone">' +
  267.                 '{{contact_name}}'+
  268.                 '<div  class="flex callto">'+
  269.                     '<i class="material-icons callicon">&#xE0CD;</i><a :href="getTelNum" v-if="show">{{ phone }}</a><span v-if="!show">Показать</span>' +
  270.                 '</div>' +
  271.             '</div>',
  272.     props: {
  273.         id: {
  274.             required: true
  275.         },
  276.         contact_name: {
  277.  
  278.         }
  279.     },
  280.     methods: {
  281.         showphone : function () {
  282.             if (!this.show) {
  283.                 this.loadPhone();
  284.             }
  285.  
  286.             this.show = true;
  287.         },
  288.         loadPhone : function () {
  289.             this.showMainPreloader = true;
  290.             Promise.all([
  291.                 this.$http.get('index.php?module=Mobile&view=Objects&operation=getObjectPhone&object_id='+this.id),
  292.             ]).then(results => {
  293.                     var objectPhone = results[0].body;
  294.                     this.phone = objectPhone.result.phone;
  295.                     this.clientname = objectPhone.result.name;
  296.                     this.showMainPreloader = false;
  297.                 },response => {
  298.                     this.showMainPreloader = false;
  299.                     MaterializeHelper.errorToast('Сервер временно недоступен, попытайтесь позднее!');
  300.                 }
  301.             );
  302.         }
  303.     },
  304.     computed: {
  305.         getTelNum: function() {
  306.             if(!this.phone) {
  307.                 return '#';
  308.             }
  309.             return 'tel:' + this.phone;
  310.         }
  311.     },
  312.     data: function() {
  313.         return {
  314.             //num: 'Показать',
  315.             //phone: [],
  316.             phone : '',
  317.             clientname : '',
  318.             show: false
  319.         };
  320.     }      
  321. });
  322.  
  323. Vue.component('preload', {
  324.     template:'<div id="fountainG"><div id="fountainG_1" ></div><div id="fountainG_2"></div><div id="fountainG_3"></div><div id="fountainG_4"></div></div>',
  325.     data: function() {
  326.         return {};
  327.     }
  328. });
  329.  
  330. Vue.component('get-friend', {
  331.     props: {
  332.         friend: {
  333.             type: Object,
  334.             required: true
  335.         }
  336.     },
  337.     template:'  <div class="friend-row">'+
  338.                                 '<div class="fr-klient">'+
  339.                                     '<div class="sup">Клиент </div>'+
  340.                                     '<div>{{ friend.event_id }}</div>'+
  341.                                     '<div><span>{{ friend.client_name }}</span></div>'+
  342.                                     '<div>до {{ friend.t_cost_do }}р</div>'+
  343.                                     '<div class="sq">от {{ friend.t_square_ot }} м<sup>2</sup></div>'+
  344.                                 '</div>'+
  345.                                 '<div class="fr-rieltor">'+
  346.                                     '<div class="sup">Риелтор </div>'+
  347.                                     '<div><span>{{ friend.user_name }}</span></div>'+
  348.                                     '<div>{{ friend.user_otdel }}</div>'+
  349.                                     '<a class="call" :href="getTelNum"><i class="material-icons callicon">&#xE0CD</i></a>'+
  350.                                 '</div>'+
  351.                             '</div>',
  352.     computed: {
  353.         getTelNum: function(ph) {
  354.             if(!this.friend.user_phone) {
  355.                 return '#';
  356.             }
  357.             return 'tel:' + this.friend.user_phone;
  358.         }
  359.     },
  360.     data: function() {
  361.         return {};
  362.     }
  363. });
  364.  
  365. Vue.component('object-filter', {
  366.     template : '<div class="filtr" id="filtr">' +
  367.                     '<form name="filtr"><div>' +
  368.                         '<a href="#" data-activates="filtr" class="hide-on-large-only">' +
  369.                             '<i class="material-icons" style="color:#6f89e5; line-height: 1.4;">close</i>' +
  370.                         '</a>' +
  371.                         '<div class="filtrow chek"> ' +
  372.                             '<div class="chekbox">' +
  373.                                 '<input name="kv" type="checkbox" @change="changeFilter">' +
  374.                                 '<label>Квартиры</label>' +
  375.                             '</div>' +
  376.                             '<div class="chekbox">' +
  377.                                 '<input name="dom" type="checkbox" @change="changeFilter">' +
  378.                                 '<label>Дома</label>' +
  379.                             '</div>' +
  380.                             '<div class="chekbox">' +
  381.                                 '<input name="arenda" type="checkbox" @change="changeFilter">' +
  382.                                 '<label>Аренда</label>' +
  383.                             '</div>' +
  384.                             '<div  class="chekbox">' +
  385.                                 '<input name="zem" type="checkbox" @change="changeFilter">' +
  386.                                 '<label>Земельные участки</label>' +
  387.                             '</div>' +
  388.                             '<div class="chekbox">' +
  389.                                 '<input name="commerc" type="checkbox" @change="changeFilter">' +
  390.                                 '<label>Коммерция</label>' +
  391.                             '</div>' +
  392.                         '</div>' +
  393.                         '<div class="filtrow" style="display:none;"> ' +
  394.                             '<label>Телефон:</label>' +
  395.                             '<input type="number" pattern="[0-9]*" inputmode="numeric" @change="changeFilter">' +
  396.                         '</div>' +
  397.                         '<div class="filtrow"> ' +
  398.                             '<label>№ лота:</label>' +
  399.                             '<input name="id" type="number" pattern="[0-9]*" inputmode="numeric" @change="changeFilter">' +
  400.                         '</div>' +
  401.                         '<div class="filtrow">' +
  402.                             '<label>Площадь:</label>' +
  403.                             '<input name="sq_ot" type="number" pattern="[0-9]*" inputmode="numeric"  placeholder="от" @change="changeFilter">' +
  404.                             '<input name="sq_do" type="number" pattern="[0-9]*" inputmode="numeric"  placeholder="до" @change="changeFilter">' +
  405.                         '</div>' +
  406.                         '<div class="filtrow"> ' +
  407.                             '<label>Цена:</label>' +
  408.                             '<input name="cost_ot" type="number" pattern="[0-9]*" inputmode="numeric" placeholder="от" @change="changeFilter">' +
  409.                             '<input name="cost_do" type="number" pattern="[0-9]*" inputmode="numeric"  placeholder="до" @change="changeFilter">' +
  410.                         '</div>' +
  411.                         '<div class="filtrow"> ' +
  412.                             '<label>Улица:</label>' +
  413.                             '<input name="street" type="text"  @change="changeFilter">' +
  414.                         '</div>' +
  415.                         '<div class="filtrow"> ' +
  416.                             '<label>Статус объекта:</label>' +
  417.                             '<select name="published" @change="changeFilter">' +
  418.                                 '<option value="">Все</option>' +
  419.                                 '<option value="1">Опубликован</option>' +
  420.                                 '<option value="0">Неопубликован</option>' +
  421.                             '</select>' +
  422.                         '</div>' +
  423.                         '<div class="filtrow" style="display:none">' +
  424.                             '<label>Поиск по содержимому:</label>' +
  425.                             '<input type="text" >' +
  426.                         '</div>' +
  427.                         '<div class="res">' +
  428.                             '<a @click.prevent="search" class="submit" data-activates="filtr">НАЙТИ</a>' +
  429.                             '<button @click.prevent="reset" class="del"><i class="material-icons" >delete</i></button>' +
  430.                         '</div></div>' +
  431.                     '</form>' +
  432.                 '</div>',
  433.     props: {
  434.  
  435.     },
  436.     methods: {
  437.         reset: function () {
  438.             window.location.href = "/index.php?module=Mobile&view=Objects";
  439.         },
  440.         search: function() {
  441.             eventBus.$emit('search', this.filter);
  442.         },
  443.         changeFilter: function(el) {
  444.             let data = el.target;
  445.             this.filter[data.name] = data.value;
  446.         }
  447.     },
  448.     computed: {
  449.  
  450.     },
  451.     data: function() {
  452.         return {
  453.             filter: {}
  454.         };
  455.     }
  456. });
  457.  
  458.  
  459.  
  460. Vue.component('share', {
  461.   template: '<div class="shareto">'+
  462.                 '<div class="openshare"><i class="material-icons open"  >&#xE80D;</i><i class="material-icons close">&#xE5CD;</i></div>'+
  463.                     '<div class="share-container" >'+
  464.                         '<ul class="flex">'+
  465.                             '<span> Поделиться объектом (ссылка на сайт) </span>'+
  466.                             '<li ><a :href="getWhatsapp" class="watsapp">watsapp</a></li>'+
  467.                             '<li><a :href="getViber" class="viber">Viber</a></li>'+
  468.                             '<li><a :href="getTel" class="telegram">Telegram</a></li>'+
  469.                         '</ul>'+
  470.                 '</div>'+
  471.             '</div>',
  472.     props: {
  473.         uri: {
  474.           /*type: String,
  475.           required: true*/
  476.         }      
  477.     },
  478.  
  479.     computed: {
  480.         getWhatsapp: function() {
  481.             return 'whatsapp://send?text=' + this.getFullUrl;
  482.         },
  483.         getViber: function() {
  484.             return 'viber://forward?text=' + this.getFullUrl;
  485.         },
  486.         getTel: function() {
  487.             return 'https://telegram.me/share/url?url=' + this.getFullUrl;
  488.         },
  489.         getFullUrl: function(){
  490.             return this.base + '/' +this.uri;
  491.         }
  492.     },
  493.   data: function() {
  494.         return {
  495.             base :'https://www.aska-realty.ru',
  496.         };
  497.     }
  498. });
  499.  
  500.  
  501.  
  502.  
  503. var app = new Vue({
  504.     el: '#root',
  505.     mounted: function() {
  506.         this.loadData();
  507.         this.scroll();
  508.         eventBus.$on('search', this.search);
  509.     },
  510.     methods: {
  511.         scroll: function(){
  512.             window.onscroll = () => {
  513.                 let bottomOfWindow = document.documentElement.scrollTop + window.innerHeight === document.documentElement.offsetHeight;
  514.                 if (bottomOfWindow) {
  515.                     if (this.page != 99999999 && this.objectsLoading == false) {
  516.                         this.objectsLoading = true;
  517.                         this.loadObjects(this.page + 1);
  518.                     }
  519.                 }
  520.             };
  521.         },
  522.         loadData: function() {
  523.             this.showMainPreloader = true;
  524.             Promise.all([
  525.                 this.$http.get('/index.php?module=Mobile&view=Objects&operation=getRaions')
  526.             ]).then(results => {
  527.                 var riaonsResponse = results[0].body;
  528.                 this.riaons = riaonsResponse.result;
  529.  
  530.                 app.loadObjects();
  531.  
  532.             }, response => {
  533.                 this.showMainPreloader = false;
  534.                 MaterializeHelper.errorToast('Сервер временно недоступен, попытайтесь позднее!');
  535.             });
  536.         },
  537.         loadObjects: function(page = 1, limit = 7) {
  538.             this.page = page;
  539.             this.limit = limit;
  540.  
  541.             let dop_q = '';
  542.  
  543.             if (Object.keys(this.filter).length > 0) {
  544.                 $.each(this.filter, function (ind, val) {
  545.                     if (val == 0 || val == '') {
  546.                         return;
  547.                     }
  548.                     dop_q += '&'+ind+'='+encodeURIComponent(val);
  549.                 });
  550.             }
  551.  
  552.             let link = "/index.php?module=Mobile&view=Objects&operation=getCurrentUserObjects&page="+this.page+"&limit="+this.limit+dop_q;
  553.  
  554.             console.log(link);
  555.  
  556.             Promise.all([
  557.                 this.$http.get(link)
  558.             ]).then(results => {
  559.                 var objectsResponse = results[0].body.result;
  560.  
  561.                 if (Object.keys(objectsResponse).length < this.limit) {
  562.                     app.page = 99999999;
  563.                 }
  564.  
  565.                 Object.keys(objectsResponse).map(function(objectKey, index) {
  566.                     app.objects.push(objectsResponse[objectKey]);
  567.                 });
  568.                 this.objectsLoading = false;
  569.                 this.showMainPreloader = false;
  570.             }, response => {
  571.                 this.showMainPreloader = false;
  572.                 MaterializeHelper.errorToast('Сервер временно недоступен, попытайтесь позднее!');
  573.             });
  574.         },
  575.         search: function(info) {
  576.             this.objects = [];
  577.  
  578.             let typeArr = [];
  579.             if (info.kv == 'on') {
  580.                 typeArr.push(12);
  581.                 delete info.kv;
  582.             }
  583.  
  584.             if (info.dom == 'on') {
  585.                 typeArr.push(13);
  586.                 delete info.dom;
  587.             }
  588.  
  589.             if (info.arenda == 'on') {
  590.                 typeArr.push(16);
  591.                 delete info.arenda;
  592.             }
  593.  
  594.             if (info.zem == 'on') {
  595.                 typeArr.push(14);
  596.                 delete info.zem;
  597.             }
  598.  
  599.             if (info.commerc == 'on') {
  600.                 typeArr.push(15);
  601.                 delete info.commerc;
  602.             }
  603.             if (typeArr.length) {
  604.                 info['type'] = typeArr;
  605.             }
  606.  
  607.             this.filter = info;
  608.             this.loadObjects();
  609.         },
  610.     },
  611.     data: {
  612.         showMainPreloader: false,
  613.         objects: [],
  614.         riaons: [],
  615.         images: [],
  616.         page : 1,
  617.         limit: 7,
  618.         filter: {},
  619.         objectsLoading: false
  620.     }
  621. });
  622.  
  623. var thousandSeparator = function(str) {
  624.     var parts = (str + '').split('.'),
  625.         main = parts[0],
  626.         len = main.length,
  627.         output = '',
  628.         i = len - 1;
  629.    
  630.     while(i >= 0) {
  631.         output = main.charAt(i) + output;
  632.         if ((len - i) % 3 === 0 && i > 0) {
  633.             output = ' ' + output;
  634.         }
  635.         --i;
  636.     }
  637.     if (parts.length > 1) {
  638.         output += '.' + parts[1];
  639.     }
  640.     return output;
  641. };
  642.  
  643.  
  644. (function($) {
  645.     $(function(){
  646.     var
  647.         speed = 500,
  648.         $scrollTop = $('<a href="#" title="Быстро вернуться наверх" class="scrollTop"><i class="fa fa-angle-double-up"></i></a>').appendTo('body');
  649.  
  650.         $scrollTop.click(function(e){
  651.             e.preventDefault();
  652.  
  653.             $( 'html:not(:animated),body:not(:animated)' ).animate({ scrollTop: 0}, speed );
  654.         });
  655.         function show_scrollTop(){
  656.             ( $(window).scrollTop() > 300 ) ? $scrollTop.fadeIn(600) : $scrollTop.fadeOut(600);
  657.         }
  658.         $(window).scroll( function(){ show_scrollTop(); } );
  659.         show_scrollTop();
  660.       });
  661. })(jQuery);
  662.     $('.collapsible').collapsible(
  663.                 {  
  664.                     topOffset: $('#menu-second').innerHeight()+50
  665.                 }
  666.             );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement