George Williams 5年前
コミット
f101276591

+ 1
- 0
package.json ファイルの表示

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

+ 136
- 122
public/js/main.js ファイルの表示

1
 (function ($) {
1
 (function ($) {
2
-  "use strict";
3
   
2
   
3
+
4
   // Preloader
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
         $(this).remove();
8
         $(this).remove();
9
       });
9
       });
10
     }
10
     }
11
   });
11
   });
12
 
12
 
13
   // Back to top button
13
   // Back to top button
14
-  $(window).scroll(function() {
14
+  $(window).scroll(function () {
15
     if ($(this).scrollTop() > 100) {
15
     if ($(this).scrollTop() > 100) {
16
       $('.back-to-top').fadeIn('slow');
16
       $('.back-to-top').fadeIn('slow');
17
     } else {
17
     } else {
18
       $('.back-to-top').fadeOut('slow');
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
     return false;
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));

+ 24
- 14
src/components/property/propertyPage.vue ファイルの表示

1
 <template>
1
 <template>
2
   <!-- eslint-disable max-len -->
2
   <!-- eslint-disable max-len -->
3
   <div v-if="property">
3
   <div v-if="property">
4
-    <section class="intro-single">
5
-      <div class="container">
6
-        <div class="row">
7
-          <div class="col-md-12 col-lg-8">
8
-            <div class="title-single-box">
9
-              <h1 class="title-single">{{ property.shortDescription }}</h1>
10
-            </div>
4
+    <div class="container">
5
+      <br />
6
+      <br />
7
+      <br />
8
+      <br />
9
+      <div class="row">
10
+        <div class="col-md-12 col-lg-8">
11
+          <div class="title-box-d">
12
+            <h1
13
+              class="title-d"
14
+              style="text-align:left; font-size: 250%"
15
+            >{{ property.shortDescription }}</h1>
11
           </div>
16
           </div>
12
         </div>
17
         </div>
13
       </div>
18
       </div>
14
-    </section>
19
+    </div>
15
     <!--/ Intro Single End /-->
20
     <!--/ Intro Single End /-->
16
 
21
 
17
     <!--/ property Single Star /-->
22
     <!--/ property Single Star /-->
32
                 <div class="row">
37
                 <div class="row">
33
                   <div class="col-sm-12">
38
                   <div class="col-sm-12">
34
                     <div class="title-box-d">
39
                     <div class="title-box-d">
35
-                      <h3 class="title-d">Property Description</h3>
40
+                      <h3 class="title-d" style="text-align:left">Property Description</h3>
36
                     </div>
41
                     </div>
37
                   </div>
42
                   </div>
38
                 </div>
43
                 </div>
39
-                <div class="property-description" v-html="property.description" />
44
+                <div
45
+                  class="property-description"
46
+                  style="text-align:left"
47
+                  v-html="property.description"
48
+                />
40
                 <div v-for="display in property.displayData" :key="display.id">
49
                 <div v-for="display in property.displayData" :key="display.id">
41
-                  <div class="row section-t3">
50
+                  <div class="row section-t3" style="text-align:left">
42
                     <div class="col-sm-12">
51
                     <div class="col-sm-12">
43
                       <div class="title-box-d">
52
                       <div class="title-box-d">
44
                         <h3 class="title-d">{{ display.groupName }}</h3>
53
                         <h3 class="title-d">{{ display.groupName }}</h3>
71
                   <div class="row">
80
                   <div class="row">
72
                     <div class="col-sm-12">
81
                     <div class="col-sm-12">
73
                       <div class="title-box-d section-t4">
82
                       <div class="title-box-d section-t4">
74
-                        <h3 class="title-d">Summary</h3>
83
+                        <h3 class="title-d" style="text-align:left">Summary</h3>
75
                       </div>
84
                       </div>
76
                     </div>
85
                     </div>
77
                   </div>
86
                   </div>
126
                   <div class="row section-t3">
135
                   <div class="row section-t3">
127
                     <div class="col-sm-12">
136
                     <div class="col-sm-12">
128
                       <div class="title-box-d">
137
                       <div class="title-box-d">
129
-                        <h3 class="title-d">Contact Agent</h3>
138
+                        <h3 class="title-d" style="text-align:left">Contact Agent</h3>
130
                       </div>
139
                       </div>
131
                     </div>
140
                     </div>
132
                   </div>
141
                   </div>
235
                               </div>
244
                               </div>
236
                             </div>
245
                             </div>
237
                             <div class="col-md-12">
246
                             <div class="col-md-12">
238
-                              <button type="submit" class="btn btn-a">Send Message</button>
247
+                              <button type="submit" class="btn btn-b-n">Send Message</button>
239
                             </div>
248
                             </div>
240
                           </div>
249
                           </div>
241
                         </form>
250
                         </form>
251
+                        <br />
242
                       </div>
252
                       </div>
243
                     </div>
253
                     </div>
244
                   </div>
254
                   </div>

+ 1
- 1
src/components/property/propertyeditPage.vue ファイルの表示

22
       <div class="row">
22
       <div class="row">
23
         <div class="container col-md-10">
23
         <div class="container col-md-10">
24
           <div class="title-box-d">
24
           <div class="title-box-d">
25
-            <h5 class="title-d">Property Overview</h5>
25
+            <h5 class="title-d" style="text-align:left">Property Overview</h5>
26
           </div>
26
           </div>
27
         </div>
27
         </div>
28
       </div>
28
       </div>

+ 18
- 14
src/components/shared/searchTab.vue ファイルの表示

99
               </div>
99
               </div>
100
             </div>
100
             </div>
101
           </div>
101
           </div>
102
+          {{selectedPropertyType}}
102
           <div class="col-md-12">
103
           <div class="col-md-12">
103
-            <button type="submit" class="btn btn-b" @click="Search">Search</button>
104
+            <button type="submit" class="btn btn-b-n" @click="Search">Search</button>
104
           </div>
105
           </div>
105
         </div>
106
         </div>
106
       </form>
107
       </form>
148
       this.selectedSuburb = item;
149
       this.selectedSuburb = item;
149
     },
150
     },
150
     Search() {
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
 <template>
1
 <template>
2
   <div>
2
   <div>
3
+    <button @click="addDummyWeek" class="btn btn-primary">Add Dummy</button>
3
     <table class="table table-bordered">
4
     <table class="table table-bordered">
4
       <thead>
5
       <thead>
5
         <tr>
6
         <tr>
15
         </tr>
16
         </tr>
16
       </thead>
17
       </thead>
17
       <tbody>
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
         </tr>
29
         </tr>
29
       </tbody>
30
       </tbody>
30
     </table>
31
     </table>
31
   </div>
32
   </div>
32
 </template>
33
 </template>
33
 <script>
34
 <script>
34
-import { mapState, mapActions } from 'vuex';
35
+import { mapState, mapActions, mapGetters } from 'vuex';
35
 
36
 
36
 export default {
37
 export default {
37
-  props: {
38
-    resortCode: undefined,
39
-  },
40
-  mounted() {
41
-    this.getWeeks(this.resortCode);
42
-  },
43
   computed: {
38
   computed: {
44
     ...mapState('weekList', ['weeks']),
39
     ...mapState('weekList', ['weeks']),
40
+    ...mapGetters({
41
+      filteredWeeks: 'weekList/filteredWeeks',
42
+    }),
43
+  },
44
+  mounted() {
45
+    this.addDummyWeek();
45
   },
46
   },
46
   methods: {
47
   methods: {
47
-    ...mapActions('weekList', ['getWeeks']),
48
+    ...mapActions('weekList', ['getWeeks', 'addDummyWeek']),
48
   },
49
   },
49
 };
50
 };
50
 </script>
51
 </script>

+ 10
- 6
src/components/timeshare/buy/weekListPage.vue ファイルの表示

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

+ 8
- 4
src/components/timeshare/resort/resortPage.vue ファイルの表示

1
 <template>
1
 <template>
2
   <!-- eslint-disable max-len -->
2
   <!-- eslint-disable max-len -->
3
   <section>
3
   <section>
4
-    <div class="container intro-single">
4
+    <div class="container">
5
+      <br />
6
+      <br />
7
+      <br />
8
+      <br />
5
       <div class="row">
9
       <div class="row">
6
         <div class="col-md-12 col-lg-8">
10
         <div class="col-md-12 col-lg-8">
7
-          <div class="title-single-box">
8
-            <h1 class="title-single" style="text-align:left;">{{resort.prName}}</h1>
11
+          <div class="title-box-d">
12
+            <h1 class="title-d" style="text-align:left; font-size: 250%">{{resort.prName}}</h1>
9
           </div>
13
           </div>
10
           <br />
14
           <br />
11
         </div>
15
         </div>
25
     <div class="myMargin">
29
     <div class="myMargin">
26
       <div class="row">
30
       <div class="row">
27
         <div class="col-md-3">
31
         <div class="col-md-3">
28
-          <h3>Filter Resort</h3>
32
+          <h4>Filter Resort</h4>
29
           <form
33
           <form
30
             id="mainForm"
34
             id="mainForm"
31
             method="POST"
35
             method="POST"

+ 1
- 2
src/components/timeshare/resort/unitPage.vue ファイルの表示

5
     <br />
5
     <br />
6
     <br />
6
     <br />
7
     <br />
7
     <br />
8
-    <br />
9
     <div class="row">
8
     <div class="row">
10
       <div class="col-md-12 col-lg-8">
9
       <div class="col-md-12 col-lg-8">
11
         <div class="title-box-d">
10
         <div class="title-box-d">
12
-          <h1 class="title-d" style="text-align:left;">{{resort.prName}}</h1>
11
+          <h1 class="title-d" style="text-align:left; font-size: 250%">{{resort.prName}}</h1>
13
         </div>
12
         </div>
14
         <br />
13
         <br />
15
       </div>
14
       </div>

+ 56
- 38
src/components/timeshare/searchTimeshare.vue ファイルの表示

7
       accept-charset="UTF-8"
7
       accept-charset="UTF-8"
8
       enctype="multipart/form-data"
8
       enctype="multipart/form-data"
9
     >
9
     >
10
+      {{filter}}
10
       <div class="form-group text-left">
11
       <div class="form-group text-left">
11
-        <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>
14
-        </select>
12
+        <label>Province</label>
13
+        <div class="input-group mb-3">
14
+          <div class="input-group-prepend">
15
+            <span class="input-group-text" style="color: #60CBEB">
16
+              <b>P</b>
17
+            </span>
18
+          </div>
19
+          <select class="form-control" name="region" id="region" v-model="filter.region">
20
+            <option v-for="(item, i) in regions" :key="i" :value="item">{{item.regionName}}</option>
21
+          </select>
22
+        </div>
15
       </div>
23
       </div>
16
       <div class="form-group text-left">
24
       <div class="form-group text-left">
17
         <label>Resort Name</label>
25
         <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>
20
-        </select>
26
+        <div class="input-group mb-3">
27
+          <div class="input-group-prepend">
28
+            <span class="input-group-text" style="color: #60CBEB">
29
+              <b>RN</b>
30
+            </span>
31
+          </div>
32
+          <select class="form-control" name="resort" id="resort" v-model="filter.resort">
33
+            <option v-for="(item, i) in filteredResorts" :key="i" :value="item">{{item.resortName}}</option>
34
+          </select>
35
+        </div>
21
       </div>
36
       </div>
22
       <div class="form-group text-left">
37
       <div class="form-group text-left">
23
         <label>Bedrooms</label>
38
         <label>Bedrooms</label>
24
-        <select class="form-control" name="bedrooms" v-model="sellItem.bedrooms">
25
-          <option v-for="(item, i) in resortBedrooms" :key="i">{{item}}</option>
26
-        </select>
39
+        <div class="input-group mb-3">
40
+          <div class="input-group-prepend">
41
+            <span class="input-group-text" style="color: #60CBEB">
42
+              <b>Bed</b>
43
+            </span>
44
+          </div>
45
+          <select class="form-control" name="bedrooms" v-model="filter.bedrooms">
46
+            <option v-for="(item, i) in resortBedrooms" :key="i">{{item}}</option>
47
+          </select>
48
+        </div>
49
+      </div>
50
+      <hr />
51
+      <div class="form-group text-left">
52
+        <label>Date</label>
53
+        <div class="input-group mb-3">
54
+          <div class="input-group-prepend">
55
+            <span class="input-group-text" style="color: #60CBEB">
56
+              <b>D</b>
57
+            </span>
58
+          </div>
59
+          <input type="date" class="form-control" name="arrivaldate" v-model="filter.date" />
60
+        </div>
27
       </div>
61
       </div>
28
       <hr />
62
       <hr />
29
       <div class="form-group">
63
       <div class="form-group">
32
             <label>Minimum Price</label>
66
             <label>Minimum Price</label>
33
             <div class="input-group mb-3">
67
             <div class="input-group mb-3">
34
               <div class="input-group-prepend">
68
               <div class="input-group-prepend">
35
-                <span class="input-group-text">R</span>
69
+                <span class="input-group-text" style="color: #60CBEB">
70
+                  <b>R</b>
71
+                </span>
36
               </div>
72
               </div>
37
               <input
73
               <input
38
                 class="form-control"
74
                 class="form-control"
41
                 id="minPrice"
77
                 id="minPrice"
42
                 name="minPrice"
78
                 name="minPrice"
43
                 placeholder="Minimum Price"
79
                 placeholder="Minimum Price"
80
+                v-model="filter.minPrice"
44
               />
81
               />
45
             </div>
82
             </div>
46
           </div>
83
           </div>
48
             <label>Maximum Price</label>
85
             <label>Maximum Price</label>
49
             <div class="input-group mb-3">
86
             <div class="input-group mb-3">
50
               <div class="input-group-prepend">
87
               <div class="input-group-prepend">
51
-                <span class="input-group-text">R</span>
88
+                <span class="input-group-text" style="color: #60CBEB">
89
+                  <b>R</b>
90
+                </span>
52
               </div>
91
               </div>
53
               <input
92
               <input
54
                 class="form-control"
93
                 class="form-control"
57
                 id="maxPrice"
96
                 id="maxPrice"
58
                 name="maxPrice"
97
                 name="maxPrice"
59
                 placeholder="Maximum Price"
98
                 placeholder="Maximum Price"
99
+                v-model="filter.maxPrice"
60
               />
100
               />
61
             </div>
101
             </div>
62
           </div>
102
           </div>
63
         </div>
103
         </div>
64
       </div>
104
       </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>
105
+      {{filter}}
78
     </form>
106
     </form>
79
   </div>
107
   </div>
80
 </template>
108
 </template>
84
 import _ from 'lodash';
112
 import _ from 'lodash';
85
 
113
 
86
 export default {
114
 export default {
87
-  data() {
88
-    return {
89
-      selectedRegion: undefined,
90
-      selectedResort: undefined,
91
-    };
115
+  props: {
116
+    filter: undefined,
92
   },
117
   },
93
   created() {
118
   created() {
94
     this.initTimeshare();
119
     this.initTimeshare();
98
       'resorts',
123
       'resorts',
99
       'regions',
124
       'regions',
100
       'detailedRegion',
125
       'detailedRegion',
101
-      'seasons',
102
       'resortBedrooms',
126
       'resortBedrooms',
103
       'maxSleep',
127
       'maxSleep',
104
-      'bankedEntities',
105
-      'sellItem',
106
-      'agencies',
107
-      'agents',
108
     ]),
128
     ]),
129
+    ...mapState('weekList', ['filter']),
109
     filteredResorts() {
130
     filteredResorts() {
110
       if (this.selectedRegion) {
131
       if (this.selectedRegion) {
111
         const list = _.find(
132
         const list = _.find(
119
   },
140
   },
120
   methods: {
141
   methods: {
121
     ...mapActions('timeshare', ['initTimeshare']),
142
     ...mapActions('timeshare', ['initTimeshare']),
122
-    addResort(item) {
123
-      this.myResort.push(item);
124
-    },
125
   },
143
   },
126
 };
144
 };
127
 </script>
145
 </script>

+ 173
- 168
src/router/index.js ファイルの表示

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

+ 85
- 3
src/store/modules/timeshare/weekList.js ファイルの表示

1
 /* eslint-disable no-restricted-syntax */
1
 /* eslint-disable no-restricted-syntax */
2
 /* eslint-disable guard-for-in */
2
 /* eslint-disable guard-for-in */
3
 import axios from 'axios';
3
 import axios from 'axios';
4
+import _ from 'lodash';
4
 
5
 
5
 export default {
6
 export default {
6
   namespaced: true,
7
   namespaced: true,
7
   state: {
8
   state: {
8
     weeks: [],
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
   mutations: {
19
   mutations: {
11
     setWeeks(state, weeks) {
20
     setWeeks(state, weeks) {
12
       state.weeks = weeks;
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
   actions: {
69
   actions: {
17
     getWeeks({
70
     getWeeks({
18
       commit,
71
       commit,
19
-    }, resortCode) {
72
+    }) {
20
       axios
73
       axios
21
-        .get(`/api/timeshare/GetByResortCode/${resortCode}`)
74
+        .get('/api/timeshareweek')
22
         .then(result => commit('setStatusList', result.data))
75
         .then(result => commit('setStatusList', result.data))
23
         .catch(console.error);
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
 };

読み込み中…
キャンセル
保存