Преглед изворни кода

Filtering of timeshare

master
Kobus пре 5 година
родитељ
комит
eddbb05ff7

+ 1
- 0
package.json Прегледај датотеку

@@ -14,6 +14,7 @@
14 14
     "axios": "^0.19.0",
15 15
     "core-js": "^2.6.5",
16 16
     "datatables.net": "^1.10.19",
17
+    "jquery": "^3.4.1",
17 18
     "lodash": "^4.17.15",
18 19
     "material-design-icons-iconfont": "^3.0.3",
19 20
     "node-sass": "^4.12.0",

+ 136
- 122
public/js/main.js Прегледај датотеку

@@ -1,150 +1,164 @@
1 1
 (function ($) {
2
-  "use strict";
3 2
   
3
+
4 4
   // Preloader
5
-  $(window).on('load', function () {
6
-    if ($('#preloader').length) {
7
-      $('#preloader').delay(100).fadeOut('slow', function () {
5
+  $(window).on('load', () => {
6
+    if ($('#preloader')) {
7
+      $('#preloader').fadeOut('slow', function () {
8 8
         $(this).remove();
9 9
       });
10 10
     }
11 11
   });
12 12
 
13 13
   // Back to top button
14
-  $(window).scroll(function() {
14
+  $(window).scroll(function () {
15 15
     if ($(this).scrollTop() > 100) {
16 16
       $('.back-to-top').fadeIn('slow');
17 17
     } else {
18 18
       $('.back-to-top').fadeOut('slow');
19 19
     }
20 20
   });
21
-  $('.back-to-top').click(function(){
22
-    $('html, body').animate({scrollTop : 0},1500, 'easeInOutExpo');
21
+  $('.back-to-top').click(() => {
22
+    $('html, body').animate({
23
+      scrollTop: 0,
24
+    }, 1500, 'easeInOutExpo');
23 25
     return false;
24 26
   });
25
-  
26
-	var nav = $('nav');
27
-	var navHeight = nav.outerHeight();
28 27
 
29
-	/*--/ ScrollReveal /Easy scroll animations for web and mobile browsers /--*/
30
-	window.sr = ScrollReveal();
31
-	sr.reveal('.foo', { duration: 1000, delay: 15 });
28
+  const nav = $('nav');
29
+  const navHeight = nav.outerHeight();
32 30
 
33
-	/*--/ Carousel owl /--*/
34
-	$('#carousel').owlCarousel({
35
-		loop: true,
36
-		margin: -1,
37
-		items: 1,
38
-		nav: true,
39
-		navText: ['<i class="ion-ios-arrow-back" aria-hidden="true"></i>', '<i class="ion-ios-arrow-forward" aria-hidden="true"></i>'],
40
-		autoplay: true,
41
-		autoplayTimeout: 3000,
42
-		autoplayHoverPause: true
43
-	});
31
+  /* --/ ScrollReveal /Easy scroll animations for web and mobile browsers /--*/
32
+  window.sr = ScrollReveal();
33
+  sr.reveal('.foo', {
34
+    duration: 1000,
35
+    delay: 15,
36
+  });
44 37
 
45
-	/*--/ Animate Carousel /--*/
46
-	$('.intro-carousel').on('translate.owl.carousel', function () {
47
-		$('.intro-content .intro-title').removeClass('zoomIn animated').hide();
48
-		$('.intro-content .intro-price').removeClass('fadeInUp animated').hide();
49
-		$('.intro-content .intro-title-top, .intro-content .spacial').removeClass('fadeIn animated').hide();
50
-	});
38
+  /* --/ Carousel owl /--*/
39
+  $('#carousel').owlCarousel({
40
+    loop: true,
41
+    margin: -1,
42
+    items: 1,
43
+    nav: true,
44
+    navText: ['<i class="ion-ios-arrow-back" aria-hidden="true"></i>',
45
+      '<i class="ion-ios-arrow-forward" aria-hidden="true"></i>',
46
+    ],
47
+    autoplay: true,
48
+    autoplayTimeout: 3000,
49
+    autoplayHoverPause: true,
50
+  });
51 51
 
52
-	$('.intro-carousel').on('translated.owl.carousel', function () {
53
-		$('.intro-content .intro-title').addClass('zoomIn animated').show();
54
-		$('.intro-content .intro-price').addClass('fadeInUp animated').show();
55
-		$('.intro-content .intro-title-top, .intro-content .spacial').addClass('fadeIn animated').show();
56
-	});
52
+  /* --/ Animate Carousel /--*/
53
+  $('.intro-carousel').on('translate.owl.carousel', () => {
54
+    $('.intro-content .intro-title').removeClass('zoomIn animated').hide();
55
+    $('.intro-content .intro-price').removeClass('fadeInUp animated').hide();
56
+    $('.intro-content .intro-title-top, .intro-content .spacial').removeClass(
57
+      'fadeIn animated'
58
+)
59
+      .hide();
60
+  });
57 61
 
58
-	/*--/ Navbar Collapse /--*/
59
-	$('.navbar-toggle-box-collapse').on('click', function () {
60
-		$('body').removeClass('box-collapse-closed').addClass('box-collapse-open');
61
-	});
62
-	$('.close-box-collapse, .click-closed').on('click', function () {
63
-		$('body').removeClass('box-collapse-open').addClass('box-collapse-closed');
64
-		$('.menu-list ul').slideUp(700);
65
-	});
62
+  $('.intro-carousel').on('translated.owl.carousel', () => {
63
+    $('.intro-content .intro-title').addClass('zoomIn animated').show();
64
+    $('.intro-content .intro-price').addClass('fadeInUp animated').show();
65
+    $('.intro-content .intro-title-top, .intro-content .spacial').addClass('fadeIn animated')
66
+      .show();
67
+  });
66 68
 
67
-	/*--/ Navbar Menu Reduce /--*/
68
-	$(window).trigger('scroll');
69
-	$(window).bind('scroll', function () {
70
-		var pixels = 50;
71
-		var top = 1200;
72
-		if ($(window).scrollTop() > pixels) {
73
-			$('.navbar-default').addClass('navbar-reduce');
74
-			$('.navbar-default').removeClass('navbar-trans');
75
-		} else {
76
-			$('.navbar-default').addClass('navbar-trans');
77
-			$('.navbar-default').removeClass('navbar-reduce');
78
-		}
79
-		if ($(window).scrollTop() > top) {
80
-			$('.scrolltop-mf').fadeIn(1000, "easeInOutExpo");
81
-		} else {
82
-			$('.scrolltop-mf').fadeOut(1000, "easeInOutExpo");
83
-		}
84
-	});
69
+  /* --/ Navbar Collapse /--*/
70
+  $('.navbar-toggle-box-collapse').on('click', () => {
71
+    $('body').removeClass('box-collapse-closed').addClass('box-collapse-open');
72
+  });
73
+  $('.close-box-collapse, .click-closed').on('click', () => {
74
+    $('body').removeClass('box-collapse-open').addClass('box-collapse-closed');
75
+    $('.menu-list ul').slideUp(700);
76
+  });
85 77
 
86
-	/*--/ Property owl /--*/
87
-	$('#property-carousel').owlCarousel({
88
-		loop: true,
89
-		margin: 30,
90
-		responsive: {
91
-			0: {
92
-				items: 1,
93
-			},
94
-			769: {
95
-				items: 2,
96
-			},
97
-			992: {
98
-				items: 3,
99
-			}
100
-		}
101
-	});
78
+  /* --/ Navbar Menu Reduce /--*/
79
+  $(window).trigger('scroll');
80
+  $(window).bind('scroll', () => {
81
+    let pixels = 50;
82
+    let top = 1200;
83
+    if ($(window).scrollTop() > pixels) {
84
+      $('.navbar-default').addClass('navbar-reduce');
85
+      $('.navbar-default').removeClass('navbar-trans');
86
+    } else {
87
+      $('.navbar-default').addClass('navbar-trans');
88
+      $('.navbar-default').removeClass('navbar-reduce');
89
+    }
90
+    if ($(window).scrollTop() > top) {
91
+      $('.scrolltop-mf').fadeIn(1000, 'easeInOutExpo');
92
+    } else {
93
+      $('.scrolltop-mf').fadeOut(1000, 'easeInOutExpo');
94
+    }
95
+  });
102 96
 
103
-	/*--/ Property owl owl /--*/
104
-	$('#property-single-carousel').owlCarousel({
105
-		loop: true,
106
-		margin: 0,  
107
-		nav: true,
108
-		navText: ['<i class="ion-ios-arrow-back" aria-hidden="true"></i>', '<i class="ion-ios-arrow-forward" aria-hidden="true"></i>'],
109
-		responsive: {
110
-			0: {
111
-				items: 1,
112
-			}
113
-		}
114
-	});
97
+  /* --/ Property owl /--*/
98
+  $('#property-carousel').owlCarousel({
99
+    loop: true,
100
+    margin: 30,
101
+    responsive: {
102
+      0: {
103
+        items: 1,
104
+      },
105
+      769: {
106
+        items: 2,
107
+      },
108
+      992: {
109
+        items: 3,
110
+      },
111
+    },
112
+  });
115 113
 
116
-	/*--/ News owl /--*/
117
-	$('#new-carousel').owlCarousel({
118
-		loop: true,
119
-		margin: 30,
120
-		responsive: {
121
-			0: {  
122
-				items: 1,
123
-			},
124
-			769: {
125
-				items: 2,
126
-			},
127
-			992: {
128
-				items: 3,
129
-			}
130
-		}
131
-	});
114
+  /* --/ Property owl owl /--*/
115
+  $('#property-single-carousel').owlCarousel({
116
+    loop: true,
117
+    margin: 0,
118
+    nav: true,
119
+    navText: ['<i class="ion-ios-arrow-back" aria-hidden="true"></i>',
120
+      '<i class="ion-ios-arrow-forward" aria-hidden="true"></i>',
121
+    ],
122
+    responsive: {
123
+      0: {
124
+        items: 1,
125
+      },
126
+    },
127
+  });
132 128
 
133
-	/*--/ Testimonials owl /--*/
134
-	$('#testimonial-carousel').owlCarousel({
135
-		margin: 0,
136
-		autoplay: true,
137
-		nav: true,
138
-		animateOut: 'fadeOut',
139
-		animateIn: 'fadeInUp',
140
-		navText: ['<i class="ion-ios-arrow-back" aria-hidden="true"></i>', '<i class="ion-ios-arrow-forward" aria-hidden="true"></i>'],
141
-		autoplayTimeout: 4000,
142
-		autoplayHoverPause: true,
143
-		responsive: {
144
-			0: {
145
-				items: 1,
146
-			}
147
-		}
148
-	});
129
+  /* --/ News owl /--*/
130
+  $('#new-carousel').owlCarousel({
131
+    loop: true,
132
+    margin: 30,
133
+    responsive: {
134
+      0: {
135
+        items: 1,
136
+      },
137
+      769: {
138
+        items: 2,
139
+      },
140
+      992: {
141
+        items: 3,
142
+      },
143
+    },
144
+  });
149 145
 
150
-})(jQuery);
146
+  /* --/ Testimonials owl /--*/
147
+  $('#testimonial-carousel').owlCarousel({
148
+    margin: 0,
149
+    autoplay: true,
150
+    nav: true,
151
+    animateOut: 'fadeOut',
152
+    animateIn: 'fadeInUp',
153
+    navText: ['<i class="ion-ios-arrow-back" aria-hidden="true"></i>',
154
+      '<i class="ion-ios-arrow-forward" aria-hidden="true"></i>',
155
+    ],
156
+    autoplayTimeout: 4000,
157
+    autoplayHoverPause: true,
158
+    responsive: {
159
+      0: {
160
+        items: 1,
161
+      },
162
+    },
163
+  });
164
+}(jQuery));

+ 17
- 13
src/components/shared/searchTab.vue Прегледај датотеку

@@ -99,6 +99,7 @@
99 99
               </div>
100 100
             </div>
101 101
           </div>
102
+          {{selectedPropertyType}}
102 103
           <div class="col-md-12">
103 104
             <button type="submit" class="btn btn-b" @click="Search">Search</button>
104 105
           </div>
@@ -148,19 +149,22 @@ export default {
148 149
       this.selectedSuburb = item;
149 150
     },
150 151
     Search() {
151
-      // need to see how to differenciate between properties and timeshare.
152
-      this.$router.push({
153
-        path: '/property/search',
154
-        query: {
155
-          type: this.selectedType,
156
-          propertyType: this.selectedPropertyType,
157
-          province: this.selectedProvince,
158
-          city: this.selectedCity,
159
-          suburb: this.selectedSuburb,
160
-          propType: this.selectedPropType,
161
-          keyword: this.keyword,
162
-        },
163
-      });
152
+      if (this.selectedPropertyType === 'timeshare') {
153
+        this.$router.push('/timeshare/search/');
154
+      } else {
155
+        this.$router.push({
156
+          path: '/property/search',
157
+          query: {
158
+            type: this.selectedType,
159
+            propertyType: this.selectedPropertyType,
160
+            province: this.selectedProvince,
161
+            city: this.selectedCity,
162
+            suburb: this.selectedSuburb,
163
+            propType: this.selectedPropType,
164
+            keyword: this.keyword,
165
+          },
166
+        });
167
+      }
164 168
     },
165 169
   },
166 170
 };

+ 19
- 18
src/components/timeshare/buy/weekListComponent.vue Прегледај датотеку

@@ -1,5 +1,6 @@
1 1
 <template>
2 2
   <div>
3
+    <button @click="addDummyWeek" class="btn btn-primary">Add Dummy</button>
3 4
     <table class="table table-bordered">
4 5
       <thead>
5 6
         <tr>
@@ -15,36 +16,36 @@
15 16
         </tr>
16 17
       </thead>
17 18
       <tbody>
18
-        <tr v-for="(item, i) in weeks" :key="i">
19
-          <td>{{item.id}}</td>
20
-          <td>{{item.code}}</td>
21
-          <td>{{item.description}}</td>
22
-          <td>{{item.id}}</td>
23
-          <td>{{item.code}}</td>
24
-          <td>{{item.description}}</td>
25
-          <td>{{item.id}}</td>
26
-          <td>{{item.code}}</td>
27
-          <td>{{item.description}}</td>
19
+        <tr v-for="(item, i) in filteredWeeks" :key="i">
20
+          <td>{{item.resort.resortName}}</td>
21
+          <td>{{item.unitNumber}}</td>
22
+          <td>{{item.weekNumber}}</td>
23
+          <td>{{item.module}}</td>
24
+          <td>{{item.bedrooms}}</td>
25
+          <td>{{item.season}}</td>
26
+          <td>{{item.sellPrice}}</td>
27
+          <td>{{item.status ? item.status.description : ''}}</td>
28
+          <td></td>
28 29
         </tr>
29 30
       </tbody>
30 31
     </table>
31 32
   </div>
32 33
 </template>
33 34
 <script>
34
-import { mapState, mapActions } from 'vuex';
35
+import { mapState, mapActions, mapGetters } from 'vuex';
35 36
 
36 37
 export default {
37
-  props: {
38
-    resortCode: undefined,
39
-  },
40
-  mounted() {
41
-    this.getWeeks(this.resortCode);
42
-  },
43 38
   computed: {
44 39
     ...mapState('weekList', ['weeks']),
40
+    ...mapGetters({
41
+      filteredWeeks: 'weekList/filteredWeeks',
42
+    }),
43
+  },
44
+  mounted() {
45
+    this.addDummyWeek();
45 46
   },
46 47
   methods: {
47
-    ...mapActions('weekList', ['getWeeks']),
48
+    ...mapActions('weekList', ['getWeeks', 'addDummyWeek']),
48 49
   },
49 50
 };
50 51
 </script>

+ 10
- 6
src/components/timeshare/buy/weekListPage.vue Прегледај датотеку

@@ -7,15 +7,19 @@
7 7
     <br />
8 8
     <br />
9 9
     <br />
10
-    <br />123
11
-    <br />
12
-    <br />
13
-    <br />
14
-    <br />123
10
+    {{filter}}
11
+    <WeekListComponent />
15 12
   </div>
16 13
 </template>
17 14
 <script>
18
-export default {};
15
+import WeekListComponent from './weekListComponent.vue';
16
+
17
+export default {
18
+  components: {
19
+    WeekListComponent,
20
+  },
21
+  computed: {},
22
+};
19 23
 </script>
20 24
 <style>
21 25
 </style>

+ 17
- 31
src/components/timeshare/searchTimeshare.vue Прегледај датотеку

@@ -7,25 +7,31 @@
7 7
       accept-charset="UTF-8"
8 8
       enctype="multipart/form-data"
9 9
     >
10
+      {{filter}}
10 11
       <div class="form-group text-left">
11 12
         <label>Region</label>
12
-        <select class="form-control" name="region" id="region" v-model="selectedRegion">
13
-          <option v-for="(item, i) in regions" :key="i">{{item.regionName}}</option>
13
+        <select class="form-control" name="region" id="region" v-model="filter.region">
14
+          <option v-for="(item, i) in regions" :key="i" :value="item">{{item.regionName}}</option>
14 15
         </select>
15 16
       </div>
16 17
       <div class="form-group text-left">
17 18
         <label>Resort Name</label>
18
-        <select class="form-control" name="resort" id="resort" v-model="selectedResort">
19
-          <option v-for="(item, i) in filteredResorts" :key="i">{{item.resortName}}</option>
19
+        <select class="form-control" name="resort" id="resort" v-model="filter.resort">
20
+          <option v-for="(item, i) in filteredResorts" :key="i" :value="item">{{item.resortName}}</option>
20 21
         </select>
21 22
       </div>
22 23
       <div class="form-group text-left">
23 24
         <label>Bedrooms</label>
24
-        <select class="form-control" name="bedrooms" v-model="sellItem.bedrooms">
25
+        <select class="form-control" name="bedrooms" v-model="filter.bedrooms">
25 26
           <option v-for="(item, i) in resortBedrooms" :key="i">{{item}}</option>
26 27
         </select>
27 28
       </div>
28 29
       <hr />
30
+      <div class="form-group text-left">
31
+        <label>Date</label>
32
+        <input type="date" class="form-control" name="arrivaldate" v-model="filter.date" />
33
+      </div>
34
+      <hr />
29 35
       <div class="form-group">
30 36
         <div class="row">
31 37
           <div class="col-md-6 text-left">
@@ -41,6 +47,7 @@
41 47
                 id="minPrice"
42 48
                 name="minPrice"
43 49
                 placeholder="Minimum Price"
50
+                v-model="filter.minPrice"
44 51
               />
45 52
             </div>
46 53
           </div>
@@ -57,24 +64,13 @@
57 64
                 id="maxPrice"
58 65
                 name="maxPrice"
59 66
                 placeholder="Maximum Price"
67
+                v-model="filter.maxPrice"
60 68
               />
61 69
             </div>
62 70
           </div>
63 71
         </div>
64 72
       </div>
65
-      <hr />
66
-      <div class="form-group">
67
-        <div class="row">
68
-          <div class="col-md-6 text-left">
69
-            <label>Filter Arrival Date From</label>
70
-            <input type="date" class="form-control" name="arrivaldate" value />
71
-          </div>
72
-          <div class="col-md-6 text-left">
73
-            <label>Filter Arrival Date To</label>
74
-            <input type="date" class="form-control" name="arrivaldate" value />
75
-          </div>
76
-        </div>
77
-      </div>
73
+      {{filter}}
78 74
     </form>
79 75
   </div>
80 76
 </template>
@@ -84,11 +80,8 @@ import { mapState, mapActions } from 'vuex';
84 80
 import _ from 'lodash';
85 81
 
86 82
 export default {
87
-  data() {
88
-    return {
89
-      selectedRegion: undefined,
90
-      selectedResort: undefined,
91
-    };
83
+  props: {
84
+    filter: undefined,
92 85
   },
93 86
   created() {
94 87
     this.initTimeshare();
@@ -98,14 +91,10 @@ export default {
98 91
       'resorts',
99 92
       'regions',
100 93
       'detailedRegion',
101
-      'seasons',
102 94
       'resortBedrooms',
103 95
       'maxSleep',
104
-      'bankedEntities',
105
-      'sellItem',
106
-      'agencies',
107
-      'agents',
108 96
     ]),
97
+    ...mapState('weekList', ['filter']),
109 98
     filteredResorts() {
110 99
       if (this.selectedRegion) {
111 100
         const list = _.find(
@@ -119,9 +108,6 @@ export default {
119 108
   },
120 109
   methods: {
121 110
     ...mapActions('timeshare', ['initTimeshare']),
122
-    addResort(item) {
123
-      this.myResort.push(item);
124
-    },
125 111
   },
126 112
 };
127 113
 </script>

+ 1
- 1
src/components/timeshare/sell/sellPage.vue Прегледај датотеку

@@ -216,8 +216,8 @@
216 216
               <br />
217 217
               <br />
218 218
               <br />
219
-              <DetailIndividual />
220 219
             </div>
220
+            <DetailIndividual />
221 221
           </div>
222 222
           <hr />
223 223
           <br />

+ 164
- 158
src/router/index.js Прегледај датотеку

@@ -6,6 +6,7 @@ import HomePage from '../components/home/homePage.vue';
6 6
 import TimeshareBuy from '../components/timeshare/buy/buyPage.vue';
7 7
 import TimeshareSell from '../components/timeshare/sell/sellPage.vue';
8 8
 import TimeshareFAQ from '../components/timeshare/faqPage.vue';
9
+import TimeshareSearch from '../components/timeshare/buy/weekListPage.vue';
9 10
 
10 11
 import Login from '../components/user/loginPage.vue';
11 12
 import PrivateIndividual from '../components/user/registerPage.vue';
@@ -39,163 +40,168 @@ import PrivacyPolicy from '../components/misc/privacyPolicyPage.vue';
39 40
 Vue.use(Router);
40 41
 
41 42
 export default new Router({
42
-  routes: [
43
-    {
44
-      path: '/',
45
-      name: 'Home',
46
-      component: HomePage,
47
-    },
48
-    {
49
-      path: '/about/us',
50
-      name: 'aboutus',
51
-      component: AboutUs,
52
-    },
53
-    {
54
-      path: '/about/timeshare',
55
-      name: 'abouttimeshare',
56
-      component: AboutTimeshare,
57
-    },
58
-    {
59
-      path: '/timeshare/sell',
60
-      name: 'TimeshareSell',
61
-      component: TimeshareSell,
62
-    },
63
-    {
64
-      path: '/timeshare/buy',
65
-      name: 'TimeshareBuy',
66
-      component: TimeshareBuy,
67
-    },
68
-    {
69
-      path: '/timeshare/faq',
70
-      name: 'TimeshareFAQ',
71
-      component: TimeshareFAQ,
72
-    },
73
-    {
74
-      path: '/user/login',
75
-      name: 'Login',
76
-      component: Login,
77
-    },
78
-    {
79
-      path: '/user/register',
80
-      name: 'PrivateIndividual',
81
-      component: PrivateIndividual,
82
-    },
83
-    {
84
-      path: '/user/registeragency',
85
-      name: 'Agency',
86
-      component: Agency,
87
-    },
88
-    {
89
-      path: '/property/property/:id',
90
-      name: 'PropertyPage',
91
-      component: PropertyPage,
92
-    },
93
-    {
94
-      path: '/property/:propertyType/search',
95
-      name: 'PropertySearch',
96
-      component: PropertySearch,
97
-    },
98
-    {
99
-      path: '/property/search',
100
-      name: 'PropertySearchTab',
101
-      component: PropertySearch,
102
-    },
103
-    {
104
-      path: '/property/:propType/:saleType',
105
-      name: 'PropertyNew',
106
-      component: PropertyEdit,
107
-    },
108
-    {
109
-      path: '/property/edit/:id/:propType/:saleType',
110
-      name: 'PropertyEdit',
111
-      component: PropertyEdit,
112
-    },
113
-    {
114
-      path: '/property/list/:propertyType/:user',
115
-      name: 'PropertyList',
116
-      component: PropertyList,
117
-    },
118
-    {
119
-      path: '/propertyTypes/list',
120
-      name: 'PropertyTypeList',
121
-      component: PropertyTypeList,
122
-    },
123
-    {
124
-      path: '/propertyType/new',
125
-      name: 'PropertyTypeNew',
126
-      component: PropertyType,
127
-    },
128
-    {
129
-      path: '/propertyType/:id',
130
-      name: 'PropertyTypeEdit',
131
-      component: PropertyType,
132
-    },
133
-    {
134
-      path: '/userDefinedGroups/list',
135
-      name: 'UserDefinedGroupsList',
136
-      component: UserDefinedGroups,
137
-    },
138
-    {
139
-      path: '/userDefinedGroups/userDefinedGroup/:id',
140
-      name: 'UserDefinedGroupEdit',
141
-      component: UserDefinedGroup,
142
-    },
143
-    {
144
-      path: '/userDefinedGroups/userDefinedGroup',
145
-      name: 'UserDefinedGroupNew',
146
-      component: UserDefinedGroup,
147
-    },
148
-    {
149
-      path: '/status/list',
150
-      name: 'StatusList',
151
-      component: Status,
152
-    },
153
-    {
154
-      path: '/status/timeshareAdmin',
155
-      name: 'TimeshareAdmin',
156
-      component: timeshareAdminPage,
157
-    },
158
-    {
159
-      path: '/status/tenderWeekAdmin',
160
-      name: 'TenderWeekAdmin',
161
-      component: tenderWeekAdminPage,
162
-    },
163
-    {
164
-      path: '/status/userManagementPage',
165
-      name: 'userManagementPage',
166
-      component: userManagementPage,
167
-    },
168
-    {
169
-      path: '/status/changeLogPage',
170
-      name: 'changeLogPage',
171
-      component: changeLogPage,
172
-    },
173
-    {
174
-      path: '/unitConfiguration/list',
175
-      name: 'UnitConfiguration',
176
-      component: UnitConfiguration,
177
-    },
178
-    {
179
-      path: '/contactus',
180
-      name: 'ContactUs',
181
-      component: ContactUs,
182
-    },
183
-    {
184
-      path: '/privacypolicy',
185
-      name: 'PrivacyPolicy',
186
-      component: PrivacyPolicy,
187
-    },
188
-    {
189
-      path: '/resort/:resortCode',
190
-      name: 'ResortPage',
191
-      component: ResortPage,
192
-      props: true,
193
-    },
194
-    {
195
-      path: '/resort/:resortCode/:weekId',
196
-      name: 'UnitPage',
197
-      component: UnitPage,
198
-      props: true,
199
-    },
43
+  routes: [{
44
+    path: '/',
45
+    name: 'Home',
46
+    component: HomePage,
47
+  },
48
+  {
49
+    path: '/about/us',
50
+    name: 'aboutus',
51
+    component: AboutUs,
52
+  },
53
+  {
54
+    path: '/about/timeshare',
55
+    name: 'abouttimeshare',
56
+    component: AboutTimeshare,
57
+  },
58
+  {
59
+    path: '/timeshare/sell',
60
+    name: 'TimeshareSell',
61
+    component: TimeshareSell,
62
+  },
63
+  {
64
+    path: '/timeshare/buy',
65
+    name: 'TimeshareBuy',
66
+    component: TimeshareBuy,
67
+  },
68
+  {
69
+    path: '/timeshare/faq',
70
+    name: 'TimeshareFAQ',
71
+    component: TimeshareFAQ,
72
+  },
73
+  {
74
+    path: '/user/login',
75
+    name: 'Login',
76
+    component: Login,
77
+  },
78
+  {
79
+    path: '/user/register',
80
+    name: 'PrivateIndividual',
81
+    component: PrivateIndividual,
82
+  },
83
+  {
84
+    path: '/user/registeragency',
85
+    name: 'Agency',
86
+    component: Agency,
87
+  },
88
+  {
89
+    path: '/property/property/:id',
90
+    name: 'PropertyPage',
91
+    component: PropertyPage,
92
+  },
93
+  {
94
+    path: '/property/:propertyType/search',
95
+    name: 'PropertySearch',
96
+    component: PropertySearch,
97
+  },
98
+  {
99
+    path: '/property/search',
100
+    name: 'PropertySearchTab',
101
+    component: PropertySearch,
102
+  },
103
+  {
104
+    path: '/property/:propType/:saleType',
105
+    name: 'PropertyNew',
106
+    component: PropertyEdit,
107
+  },
108
+  {
109
+    path: '/property/edit/:id/:propType/:saleType',
110
+    name: 'PropertyEdit',
111
+    component: PropertyEdit,
112
+  },
113
+  {
114
+    path: '/property/list/:propertyType/:user',
115
+    name: 'PropertyList',
116
+    component: PropertyList,
117
+  },
118
+  {
119
+    path: '/propertyTypes/list',
120
+    name: 'PropertyTypeList',
121
+    component: PropertyTypeList,
122
+  },
123
+  {
124
+    path: '/propertyType/new',
125
+    name: 'PropertyTypeNew',
126
+    component: PropertyType,
127
+  },
128
+  {
129
+    path: '/propertyType/:id',
130
+    name: 'PropertyTypeEdit',
131
+    component: PropertyType,
132
+  },
133
+  {
134
+    path: '/userDefinedGroups/list',
135
+    name: 'UserDefinedGroupsList',
136
+    component: UserDefinedGroups,
137
+  },
138
+  {
139
+    path: '/userDefinedGroups/userDefinedGroup/:id',
140
+    name: 'UserDefinedGroupEdit',
141
+    component: UserDefinedGroup,
142
+  },
143
+  {
144
+    path: '/userDefinedGroups/userDefinedGroup',
145
+    name: 'UserDefinedGroupNew',
146
+    component: UserDefinedGroup,
147
+  },
148
+  {
149
+    path: '/status/list',
150
+    name: 'StatusList',
151
+    component: Status,
152
+  },
153
+  {
154
+    path: '/status/timeshareAdmin',
155
+    name: 'TimeshareAdmin',
156
+    component: timeshareAdminPage,
157
+  },
158
+  {
159
+    path: '/status/tenderWeekAdmin',
160
+    name: 'TenderWeekAdmin',
161
+    component: tenderWeekAdminPage,
162
+  },
163
+  {
164
+    path: '/status/userManagementPage',
165
+    name: 'userManagementPage',
166
+    component: userManagementPage,
167
+  },
168
+  {
169
+    path: '/status/changeLogPage',
170
+    name: 'changeLogPage',
171
+    component: changeLogPage,
172
+  },
173
+  {
174
+    path: '/unitConfiguration/list',
175
+    name: 'UnitConfiguration',
176
+    component: UnitConfiguration,
177
+  },
178
+  {
179
+    path: '/contactus',
180
+    name: 'ContactUs',
181
+    component: ContactUs,
182
+  },
183
+  {
184
+    path: '/privacypolicy',
185
+    name: 'PrivacyPolicy',
186
+    component: PrivacyPolicy,
187
+  },
188
+  {
189
+    path: '/resort/:resortCode',
190
+    name: 'ResortPage',
191
+    component: ResortPage,
192
+    props: true,
193
+  },
194
+  {
195
+    path: '/resort/:resortCode/:weekId',
196
+    name: 'UnitPage',
197
+    component: UnitPage,
198
+    props: true,
199
+  },
200
+  {
201
+    path: '/timeshare/search',
202
+    name: 'TimeshareSearch',
203
+    component: TimeshareSearch,
204
+    props: true,
205
+  },
200 206
   ],
201 207
 });

+ 85
- 3
src/store/modules/timeshare/weekList.js Прегледај датотеку

@@ -1,26 +1,108 @@
1 1
 /* eslint-disable no-restricted-syntax */
2 2
 /* eslint-disable guard-for-in */
3 3
 import axios from 'axios';
4
+import _ from 'lodash';
4 5
 
5 6
 export default {
6 7
   namespaced: true,
7 8
   state: {
8 9
     weeks: [],
10
+    filter: {
11
+      region: undefined,
12
+      resort: undefined,
13
+      bedrooms: undefined,
14
+      date: undefined,
15
+      minPrice: undefined,
16
+      maxPrice: undefined,
17
+    },
9 18
   },
10 19
   mutations: {
11 20
     setWeeks(state, weeks) {
12 21
       state.weeks = weeks;
13 22
     },
23
+    addWeek(state, week) {
24
+      state.weeks.push(week);
25
+    },
26
+  },
27
+  getters: {
28
+    filteredWeeks: (state) => {
29
+      let weekList = state.weeks;
30
+      const {
31
+        filter,
32
+      } = state;
33
+      if (filter) {
34
+        if (filter.region) {
35
+          weekList = _.filter(weekList, x => x.region
36
+            && x.region.regionCode === filter.region.regionCode);
37
+        }
38
+        if (filter.resort) {
39
+          weekList = _.filter(weekList, x => x.resort
40
+            && x.resort.resortCode === filter.resort.resortCode);
41
+        }
42
+        if (filter.bedrooms) {
43
+          weekList = _.filter(weekList, x => x.bedrooms
44
+            && x.bedrooms === filter.bedrooms);
45
+        }
46
+        if (filter.date) {
47
+          const minDate = new Date(filter.date);
48
+          minDate.setDate(minDate.getDate() - 7);
49
+          const maxDate = new Date(filter.date);
50
+          maxDate.setDate(maxDate.getDate() + 7);
51
+          weekList = _.filter(weekList, x => new Date(x.arrivalDate)
52
+            && new Date(x.departureDate)
53
+            && new Date(x.arrivalDate) >= minDate
54
+            && new Date(x.arrivalDate) <= maxDate);
55
+        }
56
+        if (filter.minPrice && filter.minPrice !== 0) {
57
+          weekList = _.filter(weekList, x => x.sellingPrice
58
+            && x.sellingPrice >= filter.minPrice);
59
+        }
60
+        if (filter.maxPrice && filter.maxPrice !== 0) {
61
+          weekList = _.filter(weekList, x => x.sellingPrice
62
+            && x.sellingPrice <= filter.maxPrice);
63
+        }
64
+      }
65
+
66
+      return weekList;
67
+    },
14 68
   },
15
-  getters: {},
16 69
   actions: {
17 70
     getWeeks({
18 71
       commit,
19
-    }, resortCode) {
72
+    }) {
20 73
       axios
21
-        .get(`/api/timeshare/GetByResortCode/${resortCode}`)
74
+        .get('/api/timeshareweek')
22 75
         .then(result => commit('setStatusList', result.data))
23 76
         .catch(console.error);
24 77
     },
78
+    addDummyWeek({
79
+      commit,
80
+    }) {
81
+      commit('addWeek', {
82
+        id: 1,
83
+        unit: '359',
84
+        week: 'N18',
85
+        module: '359/N18 River View',
86
+        sellingPrice: 85000,
87
+        currentLevy: 5455,
88
+        arrivalDate: '2019/09/09',
89
+        departureDate: '2019/09/16',
90
+        region: {
91
+          regionCode: 'EC',
92
+          regionName: 'Eastern Cape',
93
+          id: 1,
94
+        },
95
+        resort: {
96
+          resortName: 'Ekuthuleni Hoedspruit',
97
+          resortCode: 'EKU',
98
+          town: 'Hoedspruit',
99
+          city: 'Hoedspruit',
100
+          id: 17,
101
+        },
102
+        bedrooms: '2',
103
+        unitNumber: '18',
104
+        weekNumber: '25',
105
+      });
106
+    },
25 107
   },
26 108
 };

Loading…
Откажи
Сачувај