Parcourir la source

Merge files

master
Kobus il y a 5 ans
Parent
révision
ca362da419

+ 5
- 0
package-lock.json Voir le fichier

@@ -7793,6 +7793,11 @@
7793 7793
         }
7794 7794
       }
7795 7795
     },
7796
+    "moment": {
7797
+      "version": "2.24.0",
7798
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
7799
+      "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
7800
+    },
7796 7801
     "move-concurrently": {
7797 7802
       "version": "1.0.1",
7798 7803
       "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",

+ 1
- 0
package.json Voir le fichier

@@ -17,6 +17,7 @@
17 17
     "jquery": "^3.4.1",
18 18
     "lodash": "^4.17.15",
19 19
     "material-design-icons-iconfont": "^3.0.3",
20
+    "moment": "^2.24.0",
20 21
     "node-sass": "^4.12.0",
21 22
     "roboto-fontface": "*",
22 23
     "sass-loader": "^7.3.1",

BIN
public/img/Article.jpg Voir le fichier


BIN
public/img/Poll.png Voir le fichier


BIN
public/img/Purchasing.jpg Voir le fichier


BIN
public/img/Tenant.jpg Voir le fichier


BIN
public/img/TopTip.png Voir le fichier


+ 87
- 0
src/components/admin/logs/SearchLogs.vue Voir le fichier

@@ -0,0 +1,87 @@
1
+<template>
2
+  <!-- eslint-disable max-len -->
3
+  <div>
4
+    <div class="container">
5
+      <!-- <section class="intro-single"> -->
6
+      <div class="container">
7
+        <br />
8
+        <br />
9
+        <br />
10
+        <br />
11
+        <div class="row">
12
+          <div class="col-md-12 col-lg-8">
13
+            <div class="title-box-d">
14
+              <h1 class="title-d" style="text-align:left; font-size: 250%">Search Log</h1>
15
+            </div>
16
+          </div>
17
+        </div>
18
+      </div>
19
+      <!-- </section> -->
20
+    </div>
21
+    <div class="container">
22
+      <table class="table table-bordered">
23
+        <thead>
24
+          <tr>
25
+            <th>Date</th>
26
+            <th>Time</th>
27
+            <th>User</th>
28
+            <th>Keyword</th>
29
+            <th>Sales Type</th>
30
+            <th>Property Usage Type</th>
31
+            <th>Property Type</th>
32
+            <th>Province</th>
33
+            <th>City</th>
34
+            <th>Suburb</th>
35
+          </tr>
36
+        </thead>
37
+        <tbody>
38
+          <tr v-for="(item, i) in propertySearch" :key="i">
39
+            <td>{{ formatDate(item.date) }}</td>
40
+            <td>{{ formatTime(item.date) }}</td>
41
+            <td v-if="item.user">{{ item.user }}</td>
42
+            <td v-else>No User</td>
43
+            <td>{{ item.keyword === 'All' ? '' : item.keyword }}</td>
44
+            <td>{{ item.salesType === 'All' ? '' : item.salesType }}</td>
45
+            <td>{{ item.propertyUsageType === 'All' ? '' : item.propertyUsageType }}</td>
46
+            <td>{{ item.propertyType === 'All' ? '' : item.propertyType }}</td>
47
+            <td>{{ item.province === 'All' ? '' : item.province }}</td>
48
+            <td>{{ item.city === 'All' ? '' : item.city }}</td>
49
+            <td>{{ item.suburb === 'All' ? '' : item.suburb }}</td>
50
+          </tr>
51
+        </tbody>
52
+      </table>
53
+    </div>
54
+    <br />
55
+  </div>
56
+</template>
57
+
58
+<script>
59
+import { mapState, mapActions } from 'vuex';
60
+import moment from 'moment';
61
+import Vue from 'vue';
62
+import excel from 'vue-excel-export';
63
+
64
+Vue.use(excel);
65
+
66
+export default {
67
+  name: 'searchLog',
68
+  data() {
69
+    return {};
70
+  },
71
+  methods: {
72
+    ...mapActions('searchLog', ['getPropertySearchLogs']),
73
+    formatDate(value) {
74
+      return moment(String(value)).format('YYYY/MM/DD');
75
+    },
76
+    formatTime(value) {
77
+      return moment(String(value)).format('hh:mm');
78
+    },
79
+  },
80
+  mounted() {
81
+    this.getPropertySearchLogs();
82
+  },
83
+  computed: {
84
+    ...mapState('searchLog', ['propertySearch']),
85
+  },
86
+};
87
+</script>

+ 95
- 13
src/components/admin/status/userManagementPage.vue Voir le fichier

@@ -1,5 +1,5 @@
1 1
 <template>
2
-  <!-- <section class="intro-single"> -->
2
+  <!-- eslint-disable max-len -->
3 3
   <div class="container">
4 4
     <br />
5 5
     <br />
@@ -7,34 +7,116 @@
7 7
     <br />
8 8
     <div class="row">
9 9
       <div class="col-md-12 col-lg-8">
10
-        <!-- <div class="title-single-box"> -->
11
-        <!-- <h1 class="title-single" style="text-align:left;">User Management</h1> -->
12
-        <!-- </div> -->
13 10
         <div class="title-box-d">
14 11
           <h1 class="title-d" style="text-align:left; font-size: 250%">User Management</h1>
15 12
         </div>
16 13
         <br />
17 14
       </div>
18 15
     </div>
19
-    <div id="table" class="col-xs-12 table-responsive">
20
-      <datatable :columns="columns" :data="rows"></datatable>
16
+    <button @click="addNewAgent" type="button" class="btn btn-b-n">Add New Agent</button>
17
+    <br />
18
+    <br />
19
+    <div class="container">
20
+      <table class="table table-bordered">
21
+        <thead>
22
+          <tr>
23
+            <th>ID</th>
24
+            <th>Name</th>
25
+            <th>Surname</th>
26
+            <th>Cell Number</th>
27
+            <th>Telephone Number</th>
28
+            <th>Email</th>
29
+            <th>Role</th>
30
+            <th>Reset Password</th>
31
+            <th></th>
32
+            <th></th>
33
+          </tr>
34
+        </thead>
35
+        <tbody>
36
+          <tr>
37
+            <td colspan="10">
38
+              <h5>Private Users</h5>
39
+            </td>
40
+          </tr>
41
+          <tr v-for="(item, i) in individuals" :key="i">
42
+            <td>{{ item.id }}</td>
43
+            <td>{{ item.name }}</td>
44
+            <td>{{ item.surname }}</td>
45
+            <td>{{ item.cellNumber }}</td>
46
+            <td>{{ item.telephone }}</td>
47
+            <td>{{ item.email }}</td>
48
+            <td v-if="item.user">{{ item.user.role }}</td>
49
+            <td v-else></td>
50
+            <td></td>
51
+            <td>
52
+              <button
53
+                type="button"
54
+                @click="Edit(item)"
55
+                class="btn btn-b-n"
56
+                style="width: 85px; height:40px;"
57
+              >Edit</button>
58
+            </td>
59
+            <td>
60
+              <button type="button" class="btn btn-b-n" style="width: 85px; height:40px">Delete</button>
61
+            </td>
62
+          </tr>
63
+          <tr>
64
+            <td colspan="10">
65
+              <h5>Agents</h5>
66
+            </td>
67
+          </tr>
68
+          <tr v-for="(item, i) in agents" :key="i">
69
+            <td>{{ item.id }}</td>
70
+            <td>{{ item.name }}</td>
71
+            <td>{{ item.surname }}</td>
72
+            <td>{{ item.cellNumber }}</td>
73
+            <td>{{ item.telephone }}</td>
74
+            <td>{{ item.email }}</td>
75
+            <td v-if="item.user">{{ item.user.role }}</td>
76
+            <td v-else></td>
77
+            <td></td>
78
+            <td>
79
+              <button
80
+                type="button"
81
+                @click="Edit(item)"
82
+                class="btn btn-b-n"
83
+                style="width: 85px; height:40px;"
84
+              >Edit</button>
85
+            </td>
86
+            <td>
87
+              <button type="button" class="btn btn-b-n" style="width: 85px; height:40px">Delete</button>
88
+            </td>
89
+          </tr>
90
+        </tbody>
91
+      </table>
21 92
     </div>
93
+    <br />
22 94
   </div>
23
-  <!-- </section> -->
24 95
 </template>
25 96
 <script>
26 97
 import { mapState, mapActions } from 'vuex';
98
+import axios from 'axios';
27 99
 
28 100
 export default {
29 101
   name: 'userManagementPage',
30
-  created() {
31
-    this.getuserManagementPage();
32
-  },
33
-  computed: {
34
-    ...mapState('status', ['userManagementPage']),
102
+  data() {
103
+    return {};
35 104
   },
36 105
   methods: {
37
-    ...mapActions('status', ['getuserManagementPage']),
106
+    ...mapActions('registerIndividual', ['getIndividuals', 'getAgents']),
107
+    addNewAgent({ commit }) {
108
+      axios
109
+        .post('/api/agent')
110
+        .then(result => commit('saveAgent', result.data))
111
+        .catch(console.error);
112
+    },
113
+  },
114
+  mounted() {
115
+    this.getIndividuals();
116
+    this.getAgents();
117
+  },
118
+  computed: {
119
+    ...mapState('registerIndividual', ['individuals', 'agents']),
38 120
   },
39 121
 };
40 122
 </script>

+ 20
- 20
src/components/home/newsSection.vue Voir le fichier

@@ -21,23 +21,23 @@
21 21
           <div class="carousel-item-c">
22 22
             <div class="card-box-b card-shadow news-box">
23 23
               <div class="img-box-b">
24
-                <img src="img/post-2.jpg" alt class="img-b img-fluid" />
24
+                <img src="img/Tenant.jpg" alt class="img-b img-fluid" />
25 25
               </div>
26 26
               <div class="card-overlay">
27 27
                 <div class="card-header-b">
28 28
                   <div class="card-category-b">
29
-                    <a href="#" class="category-b">House</a>
29
+                    <a href="#" class="category-b">Article</a>
30 30
                   </div>
31 31
                   <div class="card-title-b">
32 32
                     <h2 class="title-2">
33 33
                       <a href="blog-single.html">
34
-                        House is comming
35
-                        <br />new
34
+                        Landlords, here’s how to spot a ‘bad’ tenant
35
+                        <br />
36 36
                       </a>
37 37
                     </h2>
38 38
                   </div>
39 39
                   <div class="card-date">
40
-                    <span class="date-b">18 Sep. 2017</span>
40
+                    <span class="date-b">31 Aug. 2019</span>
41 41
                   </div>
42 42
                 </div>
43 43
               </div>
@@ -46,23 +46,23 @@
46 46
           <div class="carousel-item-c">
47 47
             <div class="card-box-b card-shadow news-box">
48 48
               <div class="img-box-b">
49
-                <img src="img/post-5.jpg" alt class="img-b img-fluid" />
49
+                <img src="img/Poll.png" alt class="img-b img-fluid" />
50 50
               </div>
51 51
               <div class="card-overlay">
52 52
                 <div class="card-header-b">
53 53
                   <div class="card-category-b">
54
-                    <a href="#" class="category-b">Travel</a>
54
+                    <a href="#" class="category-b">Poll</a>
55 55
                   </div>
56 56
                   <div class="card-title-b">
57 57
                     <h2 class="title-2">
58 58
                       <a href="blog-single.html">
59
-                        Travel is comming
60
-                        <br />new
59
+                        Which would you rather?
60
+                        <br />
61 61
                       </a>
62 62
                     </h2>
63 63
                   </div>
64 64
                   <div class="card-date">
65
-                    <span class="date-b">18 Sep. 2017</span>
65
+                    <span class="date-b">23 Aug. 2019</span>
66 66
                   </div>
67 67
                 </div>
68 68
               </div>
@@ -71,23 +71,23 @@
71 71
           <div class="carousel-item-c">
72 72
             <div class="card-box-b card-shadow news-box">
73 73
               <div class="img-box-b">
74
-                <img src="img/post-7.jpg" alt class="img-b img-fluid" />
74
+                <img src="img/Purchasing.jpg" alt class="img-b img-fluid" />
75 75
               </div>
76 76
               <div class="card-overlay">
77 77
                 <div class="card-header-b">
78 78
                   <div class="card-category-b">
79
-                    <a href="#" class="category-b">Park</a>
79
+                    <a href="#" class="category-b">Article</a>
80 80
                   </div>
81 81
                   <div class="card-title-b">
82 82
                     <h2 class="title-2">
83 83
                       <a href="blog-single.html">
84
-                        Park is comming
85
-                        <br />new
84
+                        Six questions before purchasing
85
+                        <br />
86 86
                       </a>
87 87
                     </h2>
88 88
                   </div>
89 89
                   <div class="card-date">
90
-                    <span class="date-b">18 Sep. 2017</span>
90
+                    <span class="date-b">19 Aug. 2019</span>
91 91
                   </div>
92 92
                 </div>
93 93
               </div>
@@ -96,23 +96,23 @@
96 96
           <div class="carousel-item-c">
97 97
             <div class="card-box-b card-shadow news-box">
98 98
               <div class="img-box-b">
99
-                <img src="img/post-3.jpg" alt class="img-b img-fluid" />
99
+                <img src="img/Article.jpg" alt class="img-b img-fluid" />
100 100
               </div>
101 101
               <div class="card-overlay">
102 102
                 <div class="card-header-b">
103 103
                   <div class="card-category-b">
104
-                    <a href="#" class="category-b">Travel</a>
104
+                    <a href="#" class="category-b">Poll</a>
105 105
                   </div>
106 106
                   <div class="card-title-b">
107 107
                     <h2 class="title-2">
108 108
                       <a href="#">
109
-                        Travel is comming
110
-                        <br />new
109
+                        December holidays; a perfect family escape.
110
+                        <br />
111 111
                       </a>
112 112
                     </h2>
113 113
                   </div>
114 114
                   <div class="card-date">
115
-                    <span class="date-b">18 Sep. 2017</span>
115
+                    <span class="date-b">23 Aug. 2019</span>
116 116
                   </div>
117 117
                 </div>
118 118
               </div>

+ 83
- 12
src/components/misc/address.vue Voir le fichier

@@ -9,7 +9,7 @@
9 9
       <div class="form-group row"></div>
10 10
       <div class="row" style="text-align:left">
11 11
         <div class="col-md-6" style="margin-bottom: 1em">
12
-          <label>Street Number</label>
12
+          <label>Street Number *</label>
13 13
           <div class="input-group-prepend">
14 14
             <span class="input-group-text">
15 15
               <eva-icon name="home-outline" fill="#60CBEB"></eva-icon>
@@ -23,7 +23,7 @@
23 23
           </div>
24 24
         </div>
25 25
         <div class="col-md-6" style="margin-bottom: 1em">
26
-          <label>Street Name</label>
26
+          <label>Street Name *</label>
27 27
           <div class="input-group-prepend">
28 28
             <span class="input-group-text">
29 29
               <eva-icon name="home-outline" fill="#60CBEB"></eva-icon>
@@ -32,36 +32,70 @@
32 32
           </div>
33 33
         </div>
34 34
         <div class="col-md-6" style="margin-bottom: 1em">
35
-          <label>Suburb</label>
35
+          <label>Province *</label>
36 36
           <div class="input-group-prepend">
37 37
             <span class="input-group-text">
38 38
               <eva-icon name="home-outline" fill="#60CBEB"></eva-icon>
39 39
             </span>
40
-            <input class="form-control" type="text" name="suburb" v-model="address.suburb" />
40
+            <select
41
+              class="form-control"
42
+              name="propertyType"
43
+              id="propertyType"
44
+              @change="ProvinceSelected"
45
+              v-model="address.provinceId"
46
+            >
47
+              <option value="0">Please select province</option>
48
+              <option
49
+                v-for="province in provinces"
50
+                :value="province.id"
51
+                :key="province.id"
52
+              >{{ province.description }}</option>
53
+            </select>
41 54
           </div>
42 55
         </div>
56
+
43 57
         <div class="col-md-6" style="margin-bottom: 1em">
44
-          <label>City</label>
58
+          <label>City *</label>
45 59
           <div class="input-group-prepend">
46 60
             <span class="input-group-text">
47 61
               <eva-icon name="home-outline" fill="#60CBEB"></eva-icon>
48 62
             </span>
49
-            <input class="form-control" type="text" name="city" v-model="address.city" />
63
+            <select
64
+              class="form-control"
65
+              name="propertyType"
66
+              id="propertyType"
67
+              @change="CitySelected"
68
+              v-model="address.cityId"
69
+            >
70
+              <option value="0">Please select city</option>
71
+              <option v-for="city in cities" :value="city.id" :key="city.id">{{ city.description }}</option>
72
+            </select>
50 73
           </div>
51 74
         </div>
52 75
         <div class="col-md-6" style="margin-bottom: 1em">
53
-          <label>Province</label>
76
+          <label>Suburb *</label>
54 77
           <div class="input-group-prepend">
55 78
             <span class="input-group-text">
56 79
               <eva-icon name="home-outline" fill="#60CBEB"></eva-icon>
57 80
             </span>
58
-            <select class="form-control" name="region" id="region" v-model="address.province">
59
-              <option v-for="(region, r) in regions" :key="r">{{region.regionName}}</option>
81
+            <select
82
+              class="form-control"
83
+              name="propertyType"
84
+              id="suburbselector"
85
+              v-model="address.suburbId"
86
+              @change="getPostalCode"
87
+            >
88
+              <option value="0">Please select suburb</option>
89
+              <option
90
+                v-for="suburb in suburbs"
91
+                :value="suburb.id"
92
+                :key="suburb.id"
93
+              >{{ suburb.description }}</option>
60 94
             </select>
61 95
           </div>
62 96
         </div>
63 97
         <div class="col-md-6" style="margin-bottom: 1em">
64
-          <label>Postal Code</label>
98
+          <label>Postal Code *</label>
65 99
           <div class="input-group-prepend">
66 100
             <span class="input-group-text">
67 101
               <eva-icon name="home-outline" fill="#60CBEB"></eva-icon>
@@ -75,14 +109,51 @@
75 109
 </template>
76 110
 
77 111
 <script>
78
-import { mapState } from 'vuex';
112
+import { mapState, mapActions } from 'vuex';
79 113
 
80 114
 export default {
115
+  data() {
116
+    return {
117
+      propertyType: 'Residential',
118
+    };
119
+  },
81 120
   props: {
82 121
     address: {},
83 122
   },
84 123
   computed: {
85
-    ...mapState('timeshare', ['regions']),
124
+    ...mapState('searchTab', ['provinces', 'cities', 'suburbs']),
125
+  },
126
+  methods: {
127
+    ...mapActions('searchTab', ['getProvince', 'getCities', 'getSuburbs']),
128
+    ProvinceSelected(item) {
129
+      if (item.target.options.selectedIndex > 0) {
130
+        this.selectedProvince = this.provinces[
131
+          item.target.options.selectedIndex - 1
132
+        ].description;
133
+        this.getCities(Object.assign({}, { province: this.selectedProvince }));
134
+      }
135
+    },
136
+    CitySelected(item) {
137
+      if (item.target.options.selectedIndex > 0) {
138
+        this.selectedCity = this.cities[
139
+          item.target.options.selectedIndex - 1
140
+        ].description;
141
+        this.getSuburbs(
142
+          Object.assign(
143
+            {},
144
+            { province: this.selectedProvince, city: this.selectedCity },
145
+          ),
146
+        );
147
+      }
148
+    },
149
+    getPostalCode(item) {
150
+      this.address.postalCode = this.suburbs[
151
+        item.target.options.selectedIndex - 1
152
+      ].postalCode;
153
+    },
154
+  },
155
+  mounted() {
156
+    this.getProvince();
86 157
   },
87 158
 };
88 159
 </script>

+ 9
- 2
src/components/property/propertyList.vue Voir le fichier

@@ -49,7 +49,8 @@
49 49
             <td v-html="item.size" />
50 50
             <td>{{ item.price }}</td>
51 51
             <td>{{ item.type }}</td>
52
-            <td>{{ item.publish }}</td>
52
+            <!-- <td>{{ item.publish }}</td> -->
53
+            <td></td>
53 54
             <td>{{ item.status }}</td>
54 55
             <td>
55 56
               <button
@@ -57,10 +58,16 @@
57 58
                 @click="Edit(item)"
58 59
                 class="btn btn-b-n"
59 60
                 style="width: 85px; height:40px;"
61
+                disabled
60 62
               >Edit</button>
61 63
             </td>
62 64
             <td>
63
-              <button type="button" class="btn btn-b-n" style="width: 85px; height:40px;">Delete</button>
65
+              <button
66
+                type="button"
67
+                class="btn btn-b-n"
68
+                style="width: 85px; height:40px;"
69
+                disabled
70
+              >Delete</button>
64 71
             </td>
65 72
           </tr>
66 73
         </tbody>

+ 1
- 64
src/components/property/propertyPage.vue Voir le fichier

@@ -142,70 +142,7 @@
142 142
                       </div>
143 143
                     </div>
144 144
                   </div>
145
-                  <div class="row">
146
-                    <div class="col-md-12">
147
-                      <img src="img/agent-4.jpg" alt class="img-fluid" />
148
-                    </div>
149
-                  </div>
150
-                  <div class="row">
151
-                    <div class="col-md-12">
152
-                      <div class="property-agent">
153
-                        <h4 class="title-agent">Anabella Geller</h4>
154
-                        <p class="color-text-a">
155
-                          Nulla porttitor accumsan tincidunt. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet
156
-                          dui. Quisque velit nisi,
157
-                          pretium ut lacinia in, elementum id enim.
158
-                        </p>
159
-                        <ul class="list-unstyled">
160
-                          <li class="d-flex justify-content-between">
161
-                            <strong>Phone:</strong>
162
-                            <span class="color-text-a">(222) 4568932</span>
163
-                          </li>
164
-                          <li class="d-flex justify-content-between">
165
-                            <strong>Mobile:</strong>
166
-                            <span class="color-text-a">777 287 378 737</span>
167
-                          </li>
168
-                          <li class="d-flex justify-content-between">
169
-                            <strong>Email:</strong>
170
-                            <span class="color-text-a">annabella@example.com</span>
171
-                          </li>
172
-                          <li class="d-flex justify-content-between">
173
-                            <strong>Skype:</strong>
174
-                            <span class="color-text-a">Annabela.ge</span>
175
-                          </li>
176
-                        </ul>
177
-                        <div class="socials-a">
178
-                          <ul class="list-inline">
179
-                            <li class="list-inline-item">
180
-                              <a href="#">
181
-                                <i class="fa fa-facebook" aria-hidden="true"></i>
182
-                              </a>
183
-                            </li>
184
-                            <li class="list-inline-item">
185
-                              <a href="#">
186
-                                <i class="fa fa-twitter" aria-hidden="true"></i>
187
-                              </a>
188
-                            </li>
189
-                            <li class="list-inline-item">
190
-                              <a href="#">
191
-                                <i class="fa fa-instagram" aria-hidden="true"></i>
192
-                              </a>
193
-                            </li>
194
-                            <li class="list-inline-item">
195
-                              <a href="#">
196
-                                <i class="fa fa-pinterest-p" aria-hidden="true"></i>
197
-                              </a>
198
-                            </li>
199
-                            <li class="list-inline-item">
200
-                              <a href="#">
201
-                                <i class="fa fa-dribbble" aria-hidden="true"></i>
202
-                              </a>
203
-                            </li>
204
-                          </ul>
205
-                        </div>
206
-                      </div>
207
-                    </div>
208
-                  </div>
145
+
209 146
                   <div class="row">
210 147
                     <div class="col-md-12">
211 148
                       <div class="property-contact">

+ 29
- 56
src/components/property/propertySearchPage.vue Voir le fichier

@@ -47,7 +47,12 @@
47 47
         </div>
48 48
         <div class="col-md-4">
49 49
           <p>
50
-            <img class="img-fluid" src="./../../../public/img/residential.jpg" alt="About Resale" style="border-radius:10px"/>
50
+            <img
51
+              class="img-fluid"
52
+              src="./../../../public/img/residential.jpg"
53
+              alt="About Resale"
54
+              style="border-radius:10px"
55
+            />
51 56
           </p>
52 57
         </div>
53 58
       </div>
@@ -130,7 +135,6 @@
130 135
   </div>
131 136
 </template>
132 137
 <script>
133
-import { mkdir } from 'fs';
134 138
 import { mapState, mapActions } from 'vuex';
135 139
 import propertyCard from './propertyCard.vue';
136 140
 
@@ -179,64 +183,33 @@ export default {
179 183
         suburb: 'All',
180 184
       };
181 185
 
182
-      if (typeof this.$route.params.propertyType === 'undefined') {
183
-        // eslint-disable-next-line vue/no-side-effects-in-computed-properties
184
-        this.propertySearch = this.$route.query;
185
-      } else {
186
+      if (Object.keys(this.$route.params).length > 0) {
187
+        if (this.$route.params.propertyUsageType) {
188
+          // eslint-disable-next-line vue/no-side-effects-in-computed-properties
189
+          this.propertySearch.propertyUsageType = this.$route.params.propertyUsageType;
190
+        }
191
+      }
192
+      if (Object.keys(this.$route.query).length > 0) {
193
+        if (Object.keys(this.$route.query).length > 2) {
194
+          // eslint-disable-next-line vue/no-side-effects-in-computed-properties
195
+          this.propertySearch = this.$route.query;
196
+        } else {
197
+          if (this.$route.query.salesType) {
198
+            // eslint-disable-next-line vue/no-side-effects-in-computed-properties
199
+            this.propertySearch.salesType = this.$route.query.salesType;
200
+          }
201
+          if (this.$route.query.propertyUsageType) {
202
+            // eslint-disable-next-line vue/no-side-effects-in-computed-properties
203
+            this.propertySearch.propertyUsageType = this.$route.query.propertyUsageType;
204
+          }
205
+        }
206
+      }
207
+      if (this.propertySearch.keyword === '') {
186 208
         // eslint-disable-next-line vue/no-side-effects-in-computed-properties
187
-        this.propertySearch.propertyUsageType = this.$route.params.propertyType;
209
+        this.propertySearch.keyword = 'All';
188 210
       }
189 211
 
190
-      console.log(`PropertySearch = ${JSON.stringify(this.propertySearch)}`);
191
-
192 212
       this.searchProperties(this.propertySearch);
193
-      // this.type = this.$route.query.type;
194
-      // this.propertyType = this.$route.query.propertyType;
195
-      // this.province = this.$route.query.province;
196
-      // this.city = this.$route.query.city;
197
-      // this.suburb = this.$route.query.suburb;
198
-      // this.proptype = this.$route.query.propType;
199
-      // this.keyword = this.$route.query.keyword;
200
-      // if (typeof this.propertyType === 'undefined') {
201
-      //   this.propertyType = this.propertyTypeparam;
202
-      // }
203
-      // if (this.type === '') {
204
-      //   this.type = 'undefined';
205
-      // }
206
-      // if (this.propertyType === '') {
207
-      //   this.propertyType = 'undefined';
208
-      // }
209
-      // if (this.province === '') {
210
-      //   this.province = 'undefined';
211
-      // }
212
-      // if (this.city === '') {
213
-      //   this.city = 'undefined';
214
-      // }
215
-      // if (this.suburb === '') {
216
-      //   this.suburb = 'undefined';
217
-      // }
218
-      // if (this.proptype === '') {
219
-      //   this.propType = 'undefined';
220
-      // }
221
-      // if (typeof this.keyword === 'undefined' || this.keyword === '') {
222
-      //   this.searchPropertiesParams(
223
-      //     Object.assign(
224
-      //       {},
225
-      //       {
226
-      //         type: this.type,
227
-      //         propertyType: this.propertyType,
228
-      //         province: this.province,
229
-      //         city: this.city,
230
-      //         suburb: this.suburb,
231
-      //         propType: this.proptype,
232
-      //       },
233
-      //     ),
234
-      //   );
235
-      // } else {
236
-      //   this.searchPropertiesKeyword(
237
-      //     Object.assign({}, { keyword: this.keyword }),
238
-      //   );
239
-      // }
240 213
       return null;
241 214
     },
242 215
   },

+ 3
- 3
src/components/shared/bankAccount.vue Voir le fichier

@@ -9,7 +9,7 @@
9 9
       <div class="form-group row"></div>
10 10
       <div class="row" style="text-align:left">
11 11
         <div class="col-md-6" style="margin-bottom: 1em">
12
-          <label>Bank</label>
12
+          <label>Bank *</label>
13 13
           <div class="input-group-prepend">
14 14
             <span class="input-group-text">
15 15
               <eva-icon name="behance-outline" fill="#60CBEB"></eva-icon>
@@ -18,7 +18,7 @@
18 18
           </div>
19 19
         </div>
20 20
         <div class="col-md-6" style="margin-bottom: 1em">
21
-          <label>Account Number</label>
21
+          <label>Account Number *</label>
22 22
           <div class="input-group-prepend">
23 23
             <span class="input-group-text">
24 24
               <eva-icon name="navigation-outline" fill="#60CBEB"></eva-icon>
@@ -32,7 +32,7 @@
32 32
           </div>
33 33
         </div>
34 34
         <div class="col-md-6" style="margin-bottom: 1em">
35
-          <label>Account Holder</label>
35
+          <label>Account Holder *</label>
36 36
           <div class="input-group-prepend">
37 37
             <span class="input-group-text">
38 38
               <eva-icon name="person-done-outline" fill="#60CBEB"></eva-icon>

+ 6
- 1
src/components/shared/navBar.vue Voir le fichier

@@ -134,7 +134,7 @@
134 134
               </div>
135 135
             </li>
136 136
 
137
-            <li class="nav-item dropdown">
137
+            <li v-if="showLogout" class="nav-item dropdown">
138 138
               <a
139 139
                 class="nav-link dropdown-toggle"
140 140
                 href="#"
@@ -174,6 +174,11 @@
174 174
                   class="dropdown-item cursor-pointer"
175 175
                   @click="routerGoTo('/propertyTypes/list')"
176 176
                 >Property Types</a>
177
+                <a
178
+                  class="dropdown-item cursor-pointer"
179
+                  @click="routerGoTo('/searchLog')"
180
+                >Search Logs</a>
181
+                <a class="dropdown-item cursor-pointer" @click="routerGoTo('/Offers')">Offers</a>
177 182
               </div>
178 183
             </li>
179 184
             <li class="nav-item dropdown">

+ 8
- 8
src/components/timeshare/buy/weekListComponent.vue Voir le fichier

@@ -4,15 +4,15 @@
4 4
       <table class="table table-bordered">
5 5
         <thead>
6 6
           <tr>
7
-            <th>Region</th>
7
+            <th>Province</th>
8 8
             <th>Resort</th>
9
-            <th>Unit Number</th>
10
-            <th>Week Number</th>
11
-            <th>Arrival Date</th>
12
-            <th>Departure Date</th>
9
+            <th>Unit</th>
10
+            <th>Week</th>
11
+            <th>Arrival</th>
12
+            <th>Departure</th>
13 13
             <th>Bedrooms</th>
14
-            <th>Price</th>
15
-            <th>Status</th>
14
+            <th style="width:15%">Price</th>
15
+            <!-- <th>Status</th> -->
16 16
             <th>Interested</th>
17 17
           </tr>
18 18
         </thead>
@@ -26,7 +26,7 @@
26 26
             <td>{{item.departureDate | toDate}}</td>
27 27
             <td>{{item.bedrooms}}</td>
28 28
             <td>{{item.sellPrice | toCurrency}}</td>
29
-            <td>{{item.status ? item.status.description : ''}}</td>
29
+            <!-- <td>{{item.status ? item.status.description : ''}}</td> -->
30 30
             <td>
31 31
               <div class="col-md-12">
32 32
                 <button

+ 308
- 331
src/components/timeshare/faqPage.vue Voir le fichier

@@ -19,365 +19,342 @@
19 19
         <div class="container col-md-10">
20 20
           <br />
21 21
           <div id="accordion">
22
-            <div class="card">
23
-              <div class="card-header" id="heading1" style="text-align:left">
24
-                <h5 class="mb-0 color-text-a">
25
-                  <button
26
-                    class="btn btn-link font-weight-bold color-b"
27
-                    data-toggle="collapse"
28
-                    data-target="#collapse1"
29
-                    aria-expanded="true"
30
-                    aria-controls="collapse1"
31
-                  >What is timeshare vacation ownership?</button>
32
-                </h5>
33
-              </div>
34
-              <div
35
-                id="collapse1"
36
-                class="collapse show color-text-a"
37
-                aria-labelledby="heading1"
38
-                data-parent="#accordion"
39
-              >
40
-                <div class="card-body" style="text-align:left">
41
-                  Owning a timeshare means you own a portion of time in a specific unit in a resort. Most commonly the
42
-                  increments are sold per week and usually this means Friday to Friday depending on the specific resorts
43
-                  calendar. In specific resorts it could also mean midweek or weekend modules.
44
-                </div>
45
-              </div>
22
+            <!-- <div class="card"> -->
23
+            <div class="card" id="heading1">
24
+              <!-- <h5 class="mb-0 color-text-a"> -->
25
+              <button
26
+                class="btn btn-link font-weight-bold color-b text-left"
27
+                data-toggle="collapse"
28
+                data-target="#collapse1"
29
+                aria-expanded="true"
30
+                aria-controls="collapse1"
31
+              >What is timeshare vacation ownership?</button>
32
+              <!-- </h5> -->
46 33
             </div>
47
-            <div class="card">
48
-              <div class="card-header" id="heading2" style="text-align:left">
49
-                <h5 class="mb-0">
50
-                  <button
51
-                    class="btn btn-link font-weight-bold color-b"
52
-                    data-toggle="collapse"
53
-                    data-target="#collapse2"
54
-                    aria-expanded="false"
55
-                    aria-controls="collapse2"
56
-                  >What is included in my timeshare?</button>
57
-                </h5>
58
-              </div>
59
-              <div
60
-                id="collapse2"
61
-                class="collapse"
62
-                aria-labelledby="heading2"
63
-                data-parent="#accordion"
64
-              >
65
-                <div class="card-body" style="text-align:left">
66
-                  Most timeshare resorts are self-catering which means you have a ‘home away from home” holiday. You will
67
-                  not be required to pay for your accommodation week other than a maintenance levy which is charged by the
68
-                  resort. Some resorts do charge a key or breakage deposit but these are usually refundable.
69
-                </div>
34
+            <div
35
+              id="collapse1"
36
+              class="collapse show color-text-a"
37
+              aria-labelledby="heading1"
38
+              data-parent="#accordion"
39
+            >
40
+              <div class="card-body" style="text-align:left">
41
+                Owning a timeshare means you own a portion of time in a specific unit in a resort. Most commonly the
42
+                increments are sold per week and usually this means Friday to Friday depending on the specific resorts
43
+                calendar. In specific resorts it could also mean midweek or weekend modules.
70 44
               </div>
71 45
             </div>
72
-            <div class="card">
73
-              <div class="card-header" id="heading3" style="text-align:left">
74
-                <h5 class="mb-0">
75
-                  <button
76
-                    class="btn btn-link font-weight-bold color-b"
77
-                    data-toggle="collapse"
78
-                    data-target="#collapse3"
79
-                    aria-expanded="false"
80
-                    aria-controls="collapse3"
81
-                  >What is timeshare resale?</button>
82
-                </h5>
83
-              </div>
84
-              <div
85
-                id="collapse3"
86
-                class="collapse"
87
-                aria-labelledby="heading3"
88
-                data-parent="#accordion"
89
-              >
90
-                <div class="card-body" style="text-align:left">
91
-                  Should the needs or lifestyle change for the timeshare owner, he may decide to sell his week. As a proud
92
-                  member of VOASA, Uni-Vate Properties are accredited agents who facilitate this process for the seller and
93
-                  prospective buyer, ensuring sound and ethical business practice for all transactions.
94
-                </div>
95
-              </div>
46
+
47
+            <!-- <div class="card"> -->
48
+            <div class="card" id="heading2">
49
+              <!-- <h5 class="mb-0"> -->
50
+              <button
51
+                class="btn btn-link font-weight-bold color-b text-left"
52
+                data-toggle="collapse"
53
+                data-target="#collapse2"
54
+                aria-expanded="false"
55
+                aria-controls="collapse2"
56
+              >What is included in my timeshare?</button>
57
+              <!-- </h5> -->
96 58
             </div>
97
-            <div class="card">
98
-              <div class="card-header" id="heading4" style="text-align:left">
99
-                <h5 class="mb-0">
100
-                  <button
101
-                    class="btn btn-link font-weight-bold color-b"
102
-                    data-toggle="collapse"
103
-                    data-target="#collapse4"
104
-                    aria-expanded="false"
105
-                    aria-controls="collapse4"
106
-                  >Can Uni-Vate Properties sell my points?</button>
107
-                </h5>
108
-              </div>
109
-              <div
110
-                id="collapse4"
111
-                class="collapse"
112
-                aria-labelledby="heading4"
113
-                data-parent="#accordion"
114
-              >
115
-                <div class="card-body" style="text-align:left">
116
-                  Uni-Vate Properties specialise in fixed weeks or flexi week timeshare but are qualified to sell and/or
117
-                  advise on points sales.
118
-                </div>
59
+            <div
60
+              id="collapse2"
61
+              class="collapse"
62
+              aria-labelledby="heading2"
63
+              data-parent="#accordion"
64
+            >
65
+              <div class="card-body" style="text-align:left">
66
+                Most timeshare resorts are self-catering which means you have a ‘home away from home” holiday. You will
67
+                not be required to pay for your accommodation week other than a maintenance levy which is charged by the
68
+                resort. Some resorts do charge a key or breakage deposit but these are usually refundable.
119 69
               </div>
120 70
             </div>
121
-            <div class="card">
122
-              <div class="card-header" id="heading5" style="text-align:left">
123
-                <h5 class="mb-0">
124
-                  <button
125
-                    class="btn btn-link font-weight-bold color-b"
126
-                    data-toggle="collapse"
127
-                    data-target="#collapse5"
128
-                    aria-expanded="false"
129
-                    aria-controls="collapse5"
130
-                  >How do I list my week with Uni-Vate Properties?</button>
131
-                </h5>
132
-              </div>
133
-              <div
134
-                id="collapse5"
135
-                class="collapse"
136
-                aria-labelledby="heading5"
137
-                data-parent="#accordion"
138
-              >
139
-                <div class="card-body" style="text-align:left">
140
-                  You can complete the on-line details which you will find under the “To Sell” tab. There will be a listing
141
-                  fee payable of R380 including VAT. The details submitted will go through a verification process. Subject
142
-                  to there being no complications, the listing will be processed and published.
143
-                </div>
144
-              </div>
71
+            <!-- </div> -->
72
+            <div class="card" id="heading3">
73
+              <!-- <h5 class="mb-0"> -->
74
+              <button
75
+                class="btn btn-link font-weight-bold color-b text-left"
76
+                data-toggle="collapse"
77
+                data-target="#collapse3"
78
+                aria-expanded="false"
79
+                aria-controls="collapse3"
80
+              >What is timeshare resale?</button>
81
+              <!-- </h5> -->
145 82
             </div>
146
-            <div class="card">
147
-              <div class="card-header" id="heading6" style="text-align:left">
148
-                <h5 class="mb-0">
149
-                  <button
150
-                    class="btn btn-link font-weight-bold color-b"
151
-                    data-toggle="collapse"
152
-                    data-target="#collapse6"
153
-                    aria-expanded="false"
154
-                    aria-controls="collapse6"
155
-                  >Is timeshare an investment?</button>
156
-                </h5>
157
-              </div>
158
-              <div
159
-                id="collapse6"
160
-                class="collapse"
161
-                aria-labelledby="heading6"
162
-                data-parent="#accordion"
163
-              >
164
-                <div class="card-body" style="text-align:left">
165
-                  Timeshare is not an appreciating property investment but it is an investment into your vacation lifestyle.
166
-                  It will improve your lifestyle and the quality and variety of your family holidays both locally and
167
-                  internationally while saving you money. The memories gained and the time spent with loved ones is
168
-                  priceless.
169
-                </div>
83
+            <div
84
+              id="collapse3"
85
+              class="collapse"
86
+              aria-labelledby="heading3"
87
+              data-parent="#accordion"
88
+            >
89
+              <div class="card-body" style="text-align:left">
90
+                Should the needs or lifestyle change for the timeshare owner, he may decide to sell his week. As a proud
91
+                member of VOASA, Uni-Vate Properties are accredited agents who facilitate this process for the seller and
92
+                prospective buyer, ensuring sound and ethical business practice for all transactions.
170 93
               </div>
171 94
             </div>
172
-            <div class="card">
173
-              <div class="card-header" id="heading7" style="text-align:left">
174
-                <h5 class="mb-0">
175
-                  <button
176
-                    class="btn btn-link font-weight-bold color-b"
177
-                    data-toggle="collapse"
178
-                    data-target="#collapse7"
179
-                    aria-expanded="false"
180
-                    aria-controls="collapse7"
181
-                  >How is my week sold?</button>
182
-                </h5>
183
-              </div>
184
-              <div
185
-                id="collapse7"
186
-                class="collapse"
187
-                aria-labelledby="heading7"
188
-                data-parent="#accordion"
189
-              >
190
-                <div class="card-body" style="text-align:left">
191
-                  Through Uni-Vate Properties your week will be marketed extensively to all of their available channels.
192
-                  Uni-Vate will only charge a listing Fee of R380 including VAT which is due when listing.
193
-                </div>
194
-              </div>
95
+            <div class="card" id="heading4">
96
+              <!-- <h5 class="mb-0"> -->
97
+              <button
98
+                class="btn btn-link font-weight-bold color-b text-left"
99
+                data-toggle="collapse"
100
+                data-target="#collapse4"
101
+                aria-expanded="false"
102
+                aria-controls="collapse4"
103
+              >Can Uni-Vate Properties sell my points?</button>
104
+              <!-- </h5> -->
195 105
             </div>
196
-            <div class="card">
197
-              <div class="card-header" id="heading8" style="text-align:left">
198
-                <h5 class="mb-0">
199
-                  <button
200
-                    class="btn btn-link font-weight-bold color-b"
201
-                    data-toggle="collapse"
202
-                    data-target="#collapse8"
203
-                    aria-expanded="false"
204
-                    aria-controls="collapse8"
205
-                  >How do I buy a week?</button>
206
-                </h5>
207
-              </div>
208
-              <div
209
-                id="collapse8"
210
-                class="collapse"
211
-                aria-labelledby="heading8"
212
-                data-parent="#accordion"
213
-              >
214
-                <div class="card-body" style="text-align:left">
215
-                  All available and verified weeks will be listed on the website for prospective buyers. Once you identify a
216
-                  week that suits your holiday need and price, click on “Enquire Now” and complete your details to conclude
217
-                  the initiation of the transaction.
218
-                </div>
106
+            <div
107
+              id="collapse4"
108
+              class="collapse"
109
+              aria-labelledby="heading4"
110
+              data-parent="#accordion"
111
+            >
112
+              <div class="card-body" style="text-align:left">
113
+                Uni-Vate Properties specialise in fixed weeks or flexi week timeshare but are qualified to sell and/or
114
+                advise on points sales.
219 115
               </div>
220 116
             </div>
221
-            <div class="card">
222
-              <div class="card-header" id="heading9" style="text-align:left">
223
-                <h5 class="mb-0">
224
-                  <button
225
-                    class="btn btn-link font-weight-bold color-b"
226
-                    data-toggle="collapse"
227
-                    data-target="#collapse9"
228
-                    aria-expanded="false"
229
-                    aria-controls="collapse9"
230
-                  >Is my money safe?</button>
231
-                </h5>
232
-              </div>
233
-              <div
234
-                id="collapse9"
235
-                class="collapse"
236
-                aria-labelledby="heading9"
237
-                data-parent="#accordion"
238
-              >
239
-                <div class="card-body" style="text-align:left">
240
-                  By law, your money will be held in a trust account while the transfer is being processed. This trust
241
-                  account is a specification of any company registered as an estate agency with the EAAB.
242
-                </div>
243
-              </div>
117
+            <div class="card" id="heading5">
118
+              <!-- <h5 class="mb-0"> -->
119
+              <button
120
+                class="btn btn-link font-weight-bold color-b text-left"
121
+                data-toggle="collapse"
122
+                data-target="#collapse5"
123
+                aria-expanded="false"
124
+                aria-controls="collapse5"
125
+              >How do I list my week with Uni-Vate Properties?</button>
126
+              <!-- </h5> -->
244 127
             </div>
245
-            <div class="card">
246
-              <div class="card-header" id="heading10" style="text-align:left">
247
-                <h5 class="mb-0">
248
-                  <button
249
-                    class="btn btn-link font-weight-bold color-b"
250
-                    data-toggle="collapse"
251
-                    data-target="#collapse10"
252
-                    aria-expanded="false"
253
-                    aria-controls="collapse10"
254
-                  >Can I exchange my timeshare for other destinations?</button>
255
-                </h5>
128
+            <div
129
+              id="collapse5"
130
+              class="collapse"
131
+              aria-labelledby="heading5"
132
+              data-parent="#accordion"
133
+            >
134
+              <div class="card-body" style="text-align:left">
135
+                You can complete the on-line details which you will find under the “To Sell” tab. There will be a listing
136
+                fee payable of R380 including VAT. The details submitted will go through a verification process. Subject
137
+                to there being no complications, the listing will be processed and published.
256 138
               </div>
257
-              <div
258
-                id="collapse10"
259
-                class="collapse"
260
-                aria-labelledby="heading10"
261
-                data-parent="#accordion"
262
-              >
263
-                <div class="card-body" style="text-align:left">
264
-                  Most definitely! Once the week has been transferred to you, you have a choice of membership with RCI
265
-                  and/or DAE, two of the worlds largest exchange companies that will gladly exchange your week for you
266
-                  anywhere in the world with friendly and professional service. We will gladly put you in touch with them
267
-                  and the entire world will be available to you for holidays.
268
-                </div>
139
+            </div>
140
+            <div class="card" id="heading6">
141
+              <!-- <h5 class="mb-0"> -->
142
+              <button
143
+                class="btn btn-link font-weight-bold color-b text-left"
144
+                data-toggle="collapse"
145
+                data-target="#collapse6"
146
+                aria-expanded="false"
147
+                aria-controls="collapse6"
148
+              >Is timeshare an investment?</button>
149
+              <!-- </h5> -->
150
+            </div>
151
+            <div
152
+              id="collapse6"
153
+              class="collapse"
154
+              aria-labelledby="heading6"
155
+              data-parent="#accordion"
156
+            >
157
+              <div class="card-body" style="text-align:left">
158
+                Timeshare is not an appreciating property investment but it is an investment into your vacation lifestyle.
159
+                It will improve your lifestyle and the quality and variety of your family holidays both locally and
160
+                internationally while saving you money. The memories gained and the time spent with loved ones is
161
+                priceless.
269 162
               </div>
270 163
             </div>
271
-            <div class="card">
272
-              <div class="card-header" id="heading11" style="text-align:left">
273
-                <h5 class="mb-0">
274
-                  <button
275
-                    class="btn btn-link font-weight-bold color-b"
276
-                    data-toggle="collapse"
277
-                    data-target="#collapse11"
278
-                    aria-expanded="false"
279
-                    aria-controls="collapse11"
280
-                  >There are so many agents and scam artists out there. Why Uni-Vate Properties?</button>
281
-                </h5>
164
+            <div class="card" id="heading7">
165
+              <!-- <h5 class="mb-0"> -->
166
+              <button
167
+                class="btn btn-link font-weight-bold color-b text-left"
168
+                data-toggle="collapse"
169
+                data-target="#collapse7"
170
+                aria-expanded="false"
171
+                aria-controls="collapse7"
172
+              >How is my week sold?</button>
173
+              <!-- </h5> -->
174
+            </div>
175
+            <div
176
+              id="collapse7"
177
+              class="collapse"
178
+              aria-labelledby="heading7"
179
+              data-parent="#accordion"
180
+            >
181
+              <div class="card-body" style="text-align:left">
182
+                Through Uni-Vate Properties your week will be marketed extensively to all of their available channels.
183
+                Uni-Vate will only charge a listing Fee of R380 including VAT which is due when listing.
282 184
               </div>
283
-              <div
284
-                id="collapse11"
285
-                class="collapse"
286
-                aria-labelledby="heading"
287
-                data-parent="#accordion"
288
-              >
289
-                <div class="card-body" style="text-align:left">
290
-                  Uni-Vate Properties (Pty) Ltd is affiliated to the Estate Agents Board (EAAB) as well as the Institute of
291
-                  Estate Agents South Africa (IEASA) and are obliged to comply with the Estate Agents Code of Conduct. We
292
-                  are also proud members of Vacation Ownership Association South Africa (VOASA) and are obliged to comply
293
-                  with their code too. This assures our clients of professional, ethical and fair service at all times. We
294
-                  also have 25 years’ experience in the Timeshare industry in SA and to date the team have processed many
295
-                  sales in the residential, share block and commercial arenas within South Africa and are currently involved
296
-                  in the rental and management of 40 commercial and 15 residential properties. The Uni-Vate resale support
297
-                  team consists of three highly qualified and experienced staff, who have thirteen years’ joint experience
298
-                  in the timeshare resales industry.
299
-                </div>
185
+            </div>
186
+            <div class="card" id="heading8">
187
+              <!-- <h5 class="mb-0"> -->
188
+              <button
189
+                class="btn btn-link font-weight-bold color-b text-left"
190
+                data-toggle="collapse"
191
+                data-target="#collapse8"
192
+                aria-expanded="false"
193
+                aria-controls="collapse8"
194
+              >How do I buy a week?</button>
195
+              <!-- </h5> -->
196
+            </div>
197
+            <div
198
+              id="collapse8"
199
+              class="collapse"
200
+              aria-labelledby="heading8"
201
+              data-parent="#accordion"
202
+            >
203
+              <div class="card-body" style="text-align:left">
204
+                All available and verified weeks will be listed on the website for prospective buyers. Once you identify a
205
+                week that suits your holiday need and price, click on “Enquire Now” and complete your details to conclude
206
+                the initiation of the transaction.
300 207
               </div>
301 208
             </div>
302
-            <div class="card">
303
-              <div class="card-header" id="heading12" style="text-align:left">
304
-                <h5 class="mb-0">
305
-                  <button
306
-                    class="btn btn-link font-weight-bold color-b"
307
-                    data-toggle="collapse"
308
-                    data-target="#collapse12"
309
-                    aria-expanded="false"
310
-                    aria-controls="collapse12"
311
-                  >Why would I buy a resale week rather than a new week?</button>
312
-                </h5>
209
+            <div class="card" id="heading9">
210
+              <!-- <h5 class="mb-0"> -->
211
+              <button
212
+                class="btn btn-link font-weight-bold color-b text-left"
213
+                data-toggle="collapse"
214
+                data-target="#collapse9"
215
+                aria-expanded="false"
216
+                aria-controls="collapse9"
217
+              >Is my money safe?</button>
218
+              <!-- </h5> -->
219
+            </div>
220
+            <div
221
+              id="collapse9"
222
+              class="collapse"
223
+              aria-labelledby="heading9"
224
+              data-parent="#accordion"
225
+            >
226
+              <div class="card-body" style="text-align:left">
227
+                By law, your money will be held in a trust account while the transfer is being processed. This trust
228
+                account is a specification of any company registered as an estate agency with the EAAB.
313 229
               </div>
314
-              <div
315
-                id="collapse12"
316
-                class="collapse"
317
-                aria-labelledby="heading12"
318
-                data-parent="#accordion"
319
-              >
320
-                <div class="card-body" style="text-align:left">
321
-                  Both are equally viable. The difference is either the seller is the developer of a resort marketing
322
-                  directly to the public and offering finance options on the purchase, or an individual who wants to sell
323
-                  their week for a variety of reasons. Often when purchasing from an individual the price can be negotiated
324
-                  as it is a cash sale with no financing options.
325
-                  Its all about finding the resort and time of your choice that fits your pocket so that you can have many
326
-                  years of happy holidays. Uni-Vate Properties are highly qualified in offering sound advice and assisting
327
-                  you in what can be a tricky decision.
328
-                </div>
230
+            </div>
231
+            <div class="card" id="heading10">
232
+              <!-- <h5 class="mb-0"> -->
233
+              <button
234
+                class="btn btn-link font-weight-bold color-b text-left"
235
+                data-toggle="collapse"
236
+                data-target="#collapse10"
237
+                aria-expanded="false"
238
+                aria-controls="collapse10"
239
+              >Can I exchange my timeshare for other destinations?</button>
240
+              <!-- </h5> -->
241
+            </div>
242
+            <div
243
+              id="collapse10"
244
+              class="collapse"
245
+              aria-labelledby="heading10"
246
+              data-parent="#accordion"
247
+            >
248
+              <div class="card-body" style="text-align:left">
249
+                Most definitely! Once the week has been transferred to you, you have a choice of membership with RCI
250
+                and/or DAE, two of the worlds largest exchange companies that will gladly exchange your week for you
251
+                anywhere in the world with friendly and professional service. We will gladly put you in touch with them
252
+                and the entire world will be available to you for holidays.
329 253
               </div>
330 254
             </div>
331
-            <div class="card">
332
-              <div class="card-header" id="heading13" style="text-align:left">
333
-                <h5 class="mb-0">
334
-                  <button
335
-                    class="btn btn-link font-weight-bold color-b"
336
-                    data-toggle="collapse"
337
-                    data-target="#collapse13"
338
-                    aria-expanded="false"
339
-                    aria-controls="collapse13"
340
-                  >How is the price of the week determined?</button>
341
-                </h5>
255
+            <div class="card" id="heading11">
256
+              <!-- <h5 class="mb-0"> -->
257
+              <button
258
+                class="btn btn-link font-weight-bold color-b text-left"
259
+                data-toggle="collapse"
260
+                data-target="#collapse11"
261
+                aria-expanded="false"
262
+                aria-controls="collapse11"
263
+              >There are so many agents and scam artists out there. Why Uni-Vate Properties?</button>
264
+              <!-- </h5> -->
265
+            </div>
266
+            <div
267
+              id="collapse11"
268
+              class="collapse"
269
+              aria-labelledby="heading"
270
+              data-parent="#accordion"
271
+            >
272
+              <div class="card-body" style="text-align:left">
273
+                Uni-Vate Properties (Pty) Ltd is affiliated to the Estate Agents Board (EAAB) as well as the Institute of
274
+                Estate Agents South Africa (IEASA) and are obliged to comply with the Estate Agents Code of Conduct. We
275
+                are also proud members of Vacation Ownership Association South Africa (VOASA) and are obliged to comply
276
+                with their code too. This assures our clients of professional, ethical and fair service at all times. We
277
+                also have 25 years’ experience in the Timeshare industry in SA and to date the team have processed many
278
+                sales in the residential, share block and commercial arenas within South Africa and are currently involved
279
+                in the rental and management of 40 commercial and 15 residential properties. The Uni-Vate resale support
280
+                team consists of three highly qualified and experienced staff, who have thirteen years’ joint experience
281
+                in the timeshare resales industry.
342 282
               </div>
343
-              <div
344
-                id="collapse13"
345
-                class="collapse"
346
-                aria-labelledby="heading13"
347
-                data-parent="#accordion"
348
-              >
349
-                <div class="card-body" style="text-align:left">
350
-                  The selling price is always market related determined by five factors. Resort quality, season, sleeper
351
-                  size of the unit, location of the resort and lastly, supply and demand.
352
-                  Uni-Vate Properties offer transparent advice on all pricing ensuring that both buyer and seller receive
353
-                  the best value for their money.
354
-                </div>
283
+            </div>
284
+            <div class="card" id="heading12">
285
+              <!-- <h5 class="mb-0"> -->
286
+              <button
287
+                class="btn btn-link font-weight-bold color-b text-left"
288
+                data-toggle="collapse"
289
+                data-target="#collapse12"
290
+                aria-expanded="false"
291
+                aria-controls="collapse12"
292
+              >Why would I buy a resale week rather than a new week?</button>
293
+              <!-- </h5> -->
294
+            </div>
295
+            <div
296
+              id="collapse12"
297
+              class="collapse"
298
+              aria-labelledby="heading12"
299
+              data-parent="#accordion"
300
+            >
301
+              <div class="card-body" style="text-align:left">
302
+                Both are equally viable. The difference is either the seller is the developer of a resort marketing
303
+                directly to the public and offering finance options on the purchase, or an individual who wants to sell
304
+                their week for a variety of reasons. Often when purchasing from an individual the price can be negotiated
305
+                as it is a cash sale with no financing options.
306
+                Its all about finding the resort and time of your choice that fits your pocket so that you can have many
307
+                years of happy holidays. Uni-Vate Properties are highly qualified in offering sound advice and assisting
308
+                you in what can be a tricky decision.
355 309
               </div>
356 310
             </div>
357
-            <div class="card">
358
-              <div class="card-header" id="heading14" style="text-align:left">
359
-                <h5 class="mb-0">
360
-                  <button
361
-                    class="btn btn-link font-weight-bold color-b"
362
-                    data-toggle="collapse"
363
-                    data-target="#collapse14"
364
-                    aria-expanded="false"
365
-                    aria-controls="collapse14"
366
-                  >How are levies determined?</button>
367
-                </h5>
311
+            <div class="card" id="heading13">
312
+              <!-- <h5 class="mb-0"> -->
313
+              <button
314
+                class="btn btn-link font-weight-bold color-b text-left"
315
+                data-toggle="collapse"
316
+                data-target="#collapse13"
317
+                aria-expanded="false"
318
+                aria-controls="collapse13"
319
+              >How is the price of the week determined?</button>
320
+              <!-- </h5> -->
321
+            </div>
322
+            <div
323
+              id="collapse13"
324
+              class="collapse"
325
+              aria-labelledby="heading13"
326
+              data-parent="#accordion"
327
+            >
328
+              <div class="card-body" style="text-align:left">
329
+                The selling price is always market related determined by five factors. Resort quality, season, sleeper
330
+                size of the unit, location of the resort and lastly, supply and demand.
331
+                Uni-Vate Properties offer transparent advice on all pricing ensuring that both buyer and seller receive
332
+                the best value for their money.
368 333
               </div>
369
-              <div
370
-                id="collapse14"
371
-                class="collapse"
372
-                aria-labelledby="heading14"
373
-                data-parent="#accordion"
374
-              >
375
-                <div class="card-body" style="text-align:left">
376
-                  Levies are determined by the share block Board of Directors who are accountable to the shareholders. The
377
-                  managing agents of the resort are always available to assist with any queries that owners may have.
378
-                </div>
334
+            </div>
335
+            <div class="card" id="heading14">
336
+              <!-- <h5 class="mb-0"> -->
337
+              <button
338
+                class="btn btn-link font-weight-bold color-b text-left"
339
+                data-toggle="collapse"
340
+                data-target="#collapse14"
341
+                aria-expanded="false"
342
+                aria-controls="collapse14"
343
+              >How are levies determined?</button>
344
+              <!-- </h5> -->
345
+            </div>
346
+            <div
347
+              id="collapse14"
348
+              class="collapse"
349
+              aria-labelledby="heading14"
350
+              data-parent="#accordion"
351
+            >
352
+              <div class="card-body" style="text-align:left">
353
+                Levies are determined by the share block Board of Directors who are accountable to the shareholders. The
354
+                managing agents of the resort are always available to assist with any queries that owners may have.
379 355
               </div>
380 356
             </div>
357
+            <!-- </div> -->
381 358
           </div>
382 359
         </div>
383 360
       </div>

+ 1
- 4
src/components/timeshare/searchTimeshare.vue Voir le fichier

@@ -34,10 +34,7 @@
34 34
             </span>
35 35
           </div>
36 36
           <select class="form-control" name="resort" id="resort" v-model="filter.resort">
37
-            <option v-for="(item, i) in filteredResorts" :key="i" :value="item">
38
-              {
39
-              {item.resortName}}
40
-            </option>
37
+            <option v-for="(item, i) in filteredResorts" :key="i" :value="item">{{item.resortName}}</option>
41 38
           </select>
42 39
           <div class="input-group-append" @click="clearFilter('resort')">
43 40
             <span class="input-group-text cursor-pointer" style="color: #60CBEB">

+ 8
- 8
src/components/user/timeshareIndividual.vue Voir le fichier

@@ -10,7 +10,7 @@
10 10
       <div class="form-group row"></div>
11 11
       <div class="row" style="text-align:left">
12 12
         <div class="col-md-6">
13
-          <label>Name</label>
13
+          <label>Name *</label>
14 14
           <div class="input-group-prepend">
15 15
             <span class="input-group-text">
16 16
               <eva-icon name="person-outline" fill="#60CBEB"></eva-icon>
@@ -19,7 +19,7 @@
19 19
           </div>
20 20
         </div>
21 21
         <div class="col-md-6" style="margin-bottom: 1em">
22
-          <label>Surname</label>
22
+          <label>Surname *</label>
23 23
           <div class="input-group-prepend">
24 24
             <span class="input-group-text">
25 25
               <eva-icon name="book-outline" fill="#60CBEB"></eva-icon>
@@ -28,7 +28,7 @@
28 28
           </div>
29 29
         </div>
30 30
         <div class="col-md-6" style="margin-bottom: 1em">
31
-          <label>ID Number</label>
31
+          <label>ID Number *</label>
32 32
           <div class="input-group-prepend">
33 33
             <span class="input-group-text">
34 34
               <eva-icon name="archive" fill="#60CBEB"></eva-icon>
@@ -37,7 +37,7 @@
37 37
           </div>
38 38
         </div>
39 39
         <div class="col-md-6" style="margin-bottom: 1em">
40
-          <label>Company Reg Number</label>
40
+          <label>Company Reg Number *</label>
41 41
           <div class="input-group-prepend">
42 42
             <span class="input-group-text">
43 43
               <eva-icon name="npm-outline" fill="#60CBEB"></eva-icon>
@@ -51,7 +51,7 @@
51 51
           </div>
52 52
         </div>
53 53
         <div class="col-md-6" style="margin-bottom: 1em">
54
-          <label>Marital Status</label>
54
+          <label>Marital Status *</label>
55 55
           <div class="input-group-prepend">
56 56
             <span class="input-group-text">
57 57
               <eva-icon name="people-outline" fill="#60CBEB"></eva-icon>
@@ -62,7 +62,7 @@
62 62
           </div>
63 63
         </div>
64 64
         <div class="col-md-6" style="margin-bottom: 1em">
65
-          <label>Email Address</label>
65
+          <label>Email Address *</label>
66 66
           <div class="input-group-prepend">
67 67
             <span class="input-group-text">
68 68
               <eva-icon name="email-outline" fill="#60CBEB"></eva-icon>
@@ -71,7 +71,7 @@
71 71
           </div>
72 72
         </div>
73 73
         <div class="col-md-6" style="margin-bottom: 1em">
74
-          <label>Cell Number</label>
74
+          <label>Cell Number *</label>
75 75
           <div class="input-group-prepend">
76 76
             <span class="input-group-text">
77 77
               <eva-icon name="smartphone-outline" fill="#60CBEB"></eva-icon>
@@ -80,7 +80,7 @@
80 80
           </div>
81 81
         </div>
82 82
         <div class="col-md-6" style="margin-bottom: 1em">
83
-          <label>Landline Number</label>
83
+          <label>Landline Number *</label>
84 84
           <div class="input-group-prepend">
85 85
             <span class="input-group-text">
86 86
               <eva-icon name="phone-outline" fill="#60CBEB"></eva-icon>

+ 11
- 2
src/router/index.js Voir le fichier

@@ -40,13 +40,17 @@ import PrivacyPolicy from '../components/misc/privacyPolicyPage.vue';
40 40
 
41 41
 import MakeOffer from '../components/processFlow/makeOffer.vue';
42 42
 import Offer from '../components/processFlow/offers.vue';
43
+import searchLog from '../components/admin/logs/SearchLogs.vue';
43 44
 // import store from '../store';
44 45
 
45 46
 Vue.use(Router);
46 47
 
47 48
 export default new Router({
48 49
   scrollBehavior(to, from, savedPosition) {
49
-    return { x: 0, y: 0 };
50
+    return {
51
+      x: 0,
52
+      y: 0,
53
+    };
50 54
   },
51 55
   routes: [{
52 56
     path: '/',
@@ -99,7 +103,7 @@ export default new Router({
99 103
     component: PropertyPage,
100 104
   },
101 105
   {
102
-    path: '/property/:propertyType/search',
106
+    path: '/property/:propertyUsageType/search',
103 107
     name: 'PropertySearch',
104 108
     component: PropertySearch,
105 109
   },
@@ -220,5 +224,10 @@ export default new Router({
220 224
     name: 'TimeshareSearch',
221 225
     component: TimeshareSearch,
222 226
   },
227
+  {
228
+    path: '/searchLog',
229
+    name: 'SearchLog',
230
+    component: searchLog,
231
+  },
223 232
   ],
224 233
 });

+ 2
- 0
src/store/index.js Voir le fichier

@@ -18,6 +18,7 @@ import WeekList from './modules/timeshare/weekList';
18 18
 import Bid from './modules/processFlow/bid';
19 19
 import Authentication from './modules/user/authentication';
20 20
 import PropertySearch from './modules/property/propertySearch';
21
+import SearchLog from './modules/logs/searchLog';
21 22
 
22 23
 Vue.use(Vuex);
23 24
 /* eslint no-param-reassign: ["error", { "props": false }] */
@@ -41,5 +42,6 @@ export default new Vuex.Store({
41 42
     bid: Bid,
42 43
     authentication: Authentication,
43 44
     propertySearch: PropertySearch,
45
+    searchLog: SearchLog,
44 46
   },
45 47
 });

+ 24
- 0
src/store/modules/logs/searchLog.js Voir le fichier

@@ -0,0 +1,24 @@
1
+// api/searchLog/property
2
+import axios from 'axios';
3
+
4
+export default {
5
+  namespaced: true,
6
+  state: {
7
+    propertySearch: {},
8
+  },
9
+  mutations: {
10
+    updateSearch(state, data) {
11
+      state.propertySearch = [];
12
+      state.propertySearch = data;
13
+    },
14
+  },
15
+  getters: {},
16
+  actions: {
17
+    getPropertySearchLogs({ commit }) {
18
+      axios
19
+        .get('/api/searchLog/property')
20
+        .then(result => commit('updateSearch', result.data))
21
+        .catch(console.error);
22
+    },
23
+  },
24
+};

+ 3
- 1
src/store/modules/property/property.js Voir le fichier

@@ -55,7 +55,9 @@ export default {
55 55
       state.propertyFields = fields;
56 56
     },
57 57
     updateCurrentProperty(state, property) {
58
-      state.properties.push(property);
58
+      if (state.properties) {
59
+        state.properties.push(property);
60
+      }
59 61
     },
60 62
     clearProperty(state) {
61 63
       state.property = {

+ 1
- 1
src/store/modules/property/propertyLists.js Voir le fichier

@@ -14,7 +14,7 @@ export default {
14 14
   actions: {
15 15
     getProperties({ commit }, item) {
16 16
       axios
17
-        .get(`/api/property/${item.propertyType}/${item.user}`)
17
+        .get(`/api/property/${item.propertyType}/All`) // .get(`/api/property/${item.propertyType}/${item.user}`)
18 18
         .then(result => commit('setProperties', result.data))
19 19
         .catch(console.error);
20 20
     },

+ 7
- 2
src/store/modules/property/propertySearch.js Voir le fichier

@@ -39,7 +39,7 @@ export default {
39 39
     getPropertySearchObject({ commit }) {
40 40
       const search = {
41 41
         userID: 0,
42
-        keyword: '',
42
+        keyword: 'All',
43 43
         salesType: 'Sale',
44 44
         propertyUsageType: 'All',
45 45
         propertyType: 'All',
@@ -50,8 +50,13 @@ export default {
50 50
       commit('setPropertySearch', search);
51 51
     },
52 52
     searchProperties({ commit }, item) {
53
+      if (item.keyword === '') {
54
+        item.keyword = 'All';
55
+      }
53 56
       axios
54
-        .post('/api/Property/Search', item)
57
+        .get(
58
+          `/api/Property/Search/${item.userID}/${item.keyword}/${item.salesType}/${item.propertyUsageType}/${item.propertyType}/${item.province}/${item.city}/${item.suburb}`,
59
+        )
55 60
         .then(result => commit('updateSearch', result.data))
56 61
         .catch(console.error);
57 62
     },

+ 35
- 8
src/store/modules/user/register.js Voir le fichier

@@ -3,6 +3,8 @@ import axios from 'axios';
3 3
 export default {
4 4
   namespaced: true,
5 5
   state: {
6
+    individuals: [],
7
+    agents: [],
6 8
     registerIndividual: {
7 9
       name: '',
8 10
       surname: '',
@@ -29,6 +31,12 @@ export default {
29 31
     setIndividual(state, type) {
30 32
       state.registerIndividual = type;
31 33
     },
34
+    setIndividuals(state, type) {
35
+      state.individuals = type;
36
+    },
37
+    setAgents(state, type) {
38
+      state.agents = type;
39
+    },
32 40
     setAgency(state, type) {
33 41
       state.registerAgency = type;
34 42
     },
@@ -38,6 +46,9 @@ export default {
38 46
     addAgency(state, type) {
39 47
       state.registerAgency = type;
40 48
     },
49
+    addAgent(state, type) {
50
+      state.registerIndividual = type;
51
+    },
41 52
     updateIndividual(state, type) {
42 53
       state.registerIndividual.find(item => item.id === type.id).username = type.username;
43 54
       state.registerIndividual.find(item => item.id === type.id).password = type.password;
@@ -82,14 +93,22 @@ export default {
82 93
   },
83 94
   getters: {},
84 95
   actions: {
85
-    // getIndividual({
86
-    //   commit,
87
-    // }, id) {
88
-    //   axios
89
-    //     .get(`/api/user/${id}`)
90
-    //     .then(result => commit('setIndividual', result.data))
91
-    //     .catch(console.error);
92
-    // },
96
+    getIndividuals({
97
+      commit,
98
+    }) {
99
+      axios
100
+        .get('/api/individual')
101
+        .then(result => commit('setIndividuals', result.data))
102
+        .catch(console.error);
103
+    },
104
+    getAgents({
105
+      commit,
106
+    }) {
107
+      axios
108
+        .get('/api/agent')
109
+        .then(result => commit('setAgents', result.data))
110
+        .catch(console.error);
111
+    },
93 112
     // getAgency({
94 113
     //   commit,
95 114
     // }, id) {
@@ -115,6 +134,14 @@ export default {
115 134
         .then(result => commit('addAgency', result.data))
116 135
         .catch(console.error);
117 136
     },
137
+    saveAgent({
138
+      commit,
139
+    }, item) {
140
+      axios
141
+        .post('/api/agent', item)
142
+        .then(result => commit('addAgent', result.data))
143
+        .catch(console.error);
144
+    },
118 145
     // updateIndividual({
119 146
     //   commit,
120 147
     // }, item) {

Chargement…
Annuler
Enregistrer