Selaa lähdekoodia

User log

Mytimeshare
master
Kobus 5 vuotta sitten
vanhempi
commit
cec6bb4e04

+ 54
- 0
README.md Näytä tiedosto

@@ -1,2 +1,56 @@
1 1
 # UnivateProperties
2 2
 
3
+## Project setup
4
+
5
+```
6
+npm install
7
+```
8
+
9
+### Compiles and hot-reloads for development
10
+
11
+```
12
+npm run serve
13
+```
14
+
15
+### Compiles and minifies for production
16
+
17
+```
18
+npm run build
19
+```
20
+
21
+### Run your tests
22
+
23
+```
24
+npm run test
25
+```
26
+
27
+### Lints and fixes files
28
+
29
+```
30
+npm run lint
31
+```
32
+
33
+### Customize configuration
34
+
35
+See [Configuration Reference](https://cli.vuejs.org/config/).
36
+
37
+### Structure
38
+
39
+├── index.html
40
+├── main.js
41
+├── assets
42
+│ └── staticData
43
+│ ├── alertTypes.js
44
+│ ├── itemsPerPage.js
45
+│ ├── maritalStatus.js
46
+│  
47
+├── components
48
+│ ├── App.vue
49
+│ └── ...
50
+└── store
51
+├── index.js # where we assemble modules and export the store
52
+├── actions.js # root actions
53
+├── mutations.js # root mutations
54
+└── modules
55
+├── cart.js # cart module
56
+└── products.js # products module

+ 6
- 0
package-lock.json Näytä tiedosto

@@ -817,6 +817,12 @@
817 817
         "to-fast-properties": "^2.0.0"
818 818
       }
819 819
     },
820
+    "@fortawesome/fontawesome-free": {
821
+      "version": "5.11.2",
822
+      "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.11.2.tgz",
823
+      "integrity": "sha512-XiUPoS79r1G7PcpnNtq85TJ7inJWe0v+b5oZJZKb0pGHNIV6+UiNeQWiFGmuQ0aj7GEhnD/v9iqxIsjuRKtEnQ==",
824
+      "dev": true
825
+    },
820 826
     "@hapi/address": {
821 827
       "version": "2.0.0",
822 828
       "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz",

+ 1
- 0
package.json Näytä tiedosto

@@ -32,6 +32,7 @@
32 32
     "vuex": "^3.1.1"
33 33
   },
34 34
   "devDependencies": {
35
+    "@fortawesome/fontawesome-free": "^5.11.2",
35 36
     "@vue/cli-plugin-babel": "^3.8.0",
36 37
     "@vue/cli-plugin-eslint": "^3.8.0",
37 38
     "@vue/cli-service": "^3.8.0",

+ 4
- 0
src/App.vue Näytä tiedosto

@@ -33,6 +33,9 @@ export default {
33 33
 </script>
34 34
 
35 35
 <style>
36
+hr {
37
+  background-color: #60cbeb;
38
+}
36 39
 .title-img {
37 40
   width: 800px;
38 41
   height: 400px;
@@ -45,6 +48,7 @@ export default {
45 48
 }
46 49
 .myFill {
47 50
   fill: #60cbeb;
51
+  color: #60cbeb;
48 52
 }
49 53
 a {
50 54
   cursor: pointer;

+ 47
- 2
src/assets/Log.js Näytä tiedosto

@@ -1,9 +1,54 @@
1 1
 const items = {
2
+  setValues(item) {
3
+    localStorage.setItem('user', JSON.stringify(item.user));
4
+    localStorage.setItem('token', JSON.stringify(item.token));
5
+    localStorage.setItem('person', JSON.stringify(item.person));
6
+    localStorage.setItem('agency', JSON.stringify(item.agency));
7
+  },
8
+  tokenExpired() {
9
+    const item = this.getJSONObject('token');
10
+    if (!item && !item.expires && item.expires !== null) {
11
+      const today = new Date();
12
+      const date = `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()}`;
13
+      const time = `${today.getHours()}:${today.getMinutes()}:${today.getSeconds()}`;
14
+      const dateTime = `${date} ${time}`;
15
+      return item.expires > dateTime;
16
+    }
17
+    return true;
18
+  },
19
+  updateTokenExpiry() {
20
+    const item = this.getJSONObject('token');
21
+    if (!item && !item.expires) {
22
+      item.expires = this.addMinutes();
23
+      localStorage.removeItem('token');
24
+      localStorage.setItem('token', JSON.stringify(item));
25
+    }
26
+  },
27
+  getJSONObject(itemString) {
28
+    const item = localStorage.getItem(itemString);
29
+    if (!item) {
30
+      return JSON.parse(item);
31
+    }
32
+    return item;
33
+  },
34
+  addMinutes() {
35
+    const today = new Date();
36
+    const date = `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()}`;
37
+    const time = `${today.getHours()}:${today.getMinutes()}:${today.getSeconds()}`;
38
+    const dateTime = `${date} ${time}`;
39
+    return new Date(dateTime + 15 * 60000);
40
+  },
41
+  clearValues() {
42
+    localStorage.removeItem('user');
43
+    localStorage.removeItem('token');
44
+    localStorage.removeItem('person');
45
+    localStorage.removeItem('agency');
46
+  },
2 47
   isLoggedIn() {
3
-    return localStorage.getItem('token') !== undefined;
48
+    return localStorage.getItem('token') !== undefined && localStorage.getItem('token') !== null;
4 49
   },
5 50
   getUser() {
6
-    return localStorage.getItem('User');
51
+    return localStorage.getItem('user');
7 52
   },
8 53
 };
9 54
 export default items;

+ 5
- 33
src/components/property/propertySearchFields.vue Näytä tiedosto

@@ -11,7 +11,6 @@
11 11
           </div>
12 12
           <select
13 13
             class="form-control"
14
-            id="forSelector"
15 14
             v-model="propertySearch.salesType"
16 15
             @change="salesTypeSelected"
17 16
           >
@@ -28,12 +27,7 @@
28 27
               <b>T</b>
29 28
             </span>
30 29
           </div>
31
-          <select
32
-            class="form-control"
33
-            id="forSelector"
34
-            v-model="resType"
35
-            @change="PropertyTypeSelected"
36
-          >
30
+          <select class="form-control" v-model="resType" @change="PropertyTypeSelected">
37 31
             <option>All</option>
38 32
             <option
39 33
               v-for="(propertyType, i) in propertyTypesRes"
@@ -55,12 +49,7 @@
55 49
               <b>T</b>
56 50
             </span>
57 51
           </div>
58
-          <select
59
-            class="form-control"
60
-            id="forSelector"
61
-            v-model="comType"
62
-            @change="PropertyTypeSelected"
63
-          >
52
+          <select class="form-control" v-model="comType" @change="PropertyTypeSelected">
64 53
             <option>All</option>
65 54
             <option
66 55
               v-for="(propertyType, i) in propertyTypesCom"
@@ -82,12 +71,7 @@
82 71
               <b>P</b>
83 72
             </span>
84 73
           </div>
85
-          <select
86
-            class="form-control"
87
-            id="provinceselector"
88
-            @change="ProvinceSelected"
89
-            v-model="propertySearch.province"
90
-          >
74
+          <select class="form-control" @change="ProvinceSelected" v-model="propertySearch.province">
91 75
             <option>All</option>
92 76
             <option v-for="(province, i) in provinces" :key="i">{{ province.description }}</option>
93 77
           </select>
@@ -108,12 +92,7 @@
108 92
               <b>C</b>
109 93
             </span>
110 94
           </div>
111
-          <select
112
-            class="form-control"
113
-            id="cityselector"
114
-            @change="CitySelected"
115
-            v-model="propertySearch.city"
116
-          >
95
+          <select class="form-control" @change="CitySelected" v-model="propertySearch.city">
117 96
             <option>All</option>
118 97
             <option v-for="(city, i) in cities" :key="i">{{ city.description }}</option>
119 98
           </select>
@@ -134,12 +113,7 @@
134 113
               <b>S</b>
135 114
             </span>
136 115
           </div>
137
-          <select
138
-            class="form-control"
139
-            id="suburbselector"
140
-            v-model="propertySearch.suburb"
141
-            @change="SuburbSeleted"
142
-          >
116
+          <select class="form-control" v-model="propertySearch.suburb" @change="SuburbSeleted">
143 117
             <option>All</option>
144 118
             <option v-for="(suburb, i) in suburbs" :key="i">{{ suburb.description }}</option>
145 119
           </select>
@@ -166,7 +140,6 @@
166 140
                 class="form-control"
167 141
                 type="number"
168 142
                 step="any"
169
-                id="minPrice"
170 143
                 name="minPrice"
171 144
                 v-model="propertySearch.minPrice"
172 145
               />
@@ -189,7 +162,6 @@
189 162
                 class="form-control"
190 163
                 type="number"
191 164
                 step="any"
192
-                id="maxPrice"
193 165
                 name="maxPrice"
194 166
                 v-model="propertySearch.maxPrice"
195 167
               />

+ 0
- 1
src/components/shared/footerSection.vue Näytä tiedosto

@@ -45,7 +45,6 @@
45 45
                       <eva-icon name="slash-outline" class="myFill"></eva-icon>
46 46
                       <router-link to="/privacypolicy">Privacy Policy</router-link>
47 47
                     </li>
48
-                    <br />
49 48
                     <li class="list-inline-item">
50 49
                       <a href="https://www.facebook.com/univateproperties/">
51 50
                         <eva-icon name="facebook-outline" class="myFill"></eva-icon>Facebook

+ 22
- 24
src/components/shared/navBar.vue Näytä tiedosto

@@ -61,7 +61,7 @@
61 61
                   @click="routerGoTo('/timeshare/sell')"
62 62
                 >To Sell</a>
63 63
                 <a
64
-                  v-if="showLogout"
64
+                  v-if="isLoggedIn"
65 65
                   class="dropdown-item cursor-pointer"
66 66
                   @click="routerGoTo('/timeshare/sell')"
67 67
                 >My Timeshare Weeks</a>
@@ -105,14 +105,14 @@
105 105
                   class="dropdown-item cursor-pointer"
106 106
                   @click="routerGoTo('/property/Residential/Rental')"
107 107
                 >To Rent Residential Properties</a>
108
-                <hr v-if="showLogout" />
108
+                <hr v-if="isLoggedIn" />
109 109
                 <a
110
-                  v-if="showLogout"
110
+                  v-if="isLoggedIn"
111 111
                   class="dropdown-item cursor-pointer"
112 112
                   @click="routerGoTo('/property/list/Commercial/MyListings')"
113 113
                 >My Commercial Properties</a>
114 114
                 <a
115
-                  v-if="showLogout"
115
+                  v-if="isLoggedIn"
116 116
                   class="dropdown-item cursor-pointer"
117 117
                   @click="routerGoTo('/property/list/Residential/MyListings')"
118 118
                 >My Residential Properties</a>
@@ -138,7 +138,7 @@
138 138
               </div>
139 139
             </li>
140 140
 
141
-            <li v-if="showLogout" class="nav-item dropdown">
141
+            <li v-if="isLoggedIn" class="nav-item dropdown">
142 142
               <a
143 143
                 class="nav-link dropdown-toggle"
144 144
                 href="#"
@@ -185,7 +185,7 @@
185 185
                 <a class="dropdown-item cursor-pointer" @click="routerGoTo('/Offers')">Offers</a>
186 186
               </div>
187 187
             </li>
188
-            <li class="nav-item dropdown" v-if="hideLogin">
188
+            <li class="nav-item dropdown" v-if="!isLoggedIn">
189 189
               <a
190 190
                 class="nav-link"
191 191
                 @click="routerGoTo('/user/login')"
@@ -196,18 +196,18 @@
196 196
                 aria-expanded="false"
197 197
               >Login</a>
198 198
             </li>
199
-            <li class="nav-item dropdown" v-if="showLogout">
199
+            <li class="nav-item dropdown" v-if="isLoggedIn">
200 200
               <span>
201 201
                 <a class="nav-link" @click="logout(routerGoTo('/user/login'))">Logout</a>
202 202
               </span>
203 203
               <!-- <span v-else></span> -->
204 204
             </li>
205 205
             <li>
206
-              <span v-if="showLogout">
206
+              <span v-if="isLoggedIn">
207 207
                 <a>
208 208
                   Welcome!
209 209
                   <br />
210
-                  {{ username }}
210
+                  {{ NAME }}
211 211
                 </a>
212 212
               </span>
213 213
               <span v-else></span>
@@ -231,31 +231,29 @@
231 231
 </template>
232 232
 
233 233
 <script>
234
-import { mapGetters, mapActions } from 'vuex';
234
+import { mapState, mapActions } from 'vuex';
235 235
 
236 236
 export default {
237
-  data() {
238
-    return {
239
-      username: sessionStorage.getItem('name'),
240
-    };
241
-  },
242 237
   computed: {
243
-    showLogout() {
244
-      // eslint-disable-next-line vue/no-side-effects-in-computed-properties
245
-      this.username = sessionStorage.getItem('name');
246
-      return this.$store.state.authentication.status === 'success';
238
+    ...mapState('authentication', [
239
+      'user',
240
+      'flag',
241
+      'status',
242
+      'person',
243
+      'token',
244
+    ]),
245
+    NAME() {
246
+      return JSON.parse(this.person).fullName;
247 247
     },
248
-    hideLogin() {
249
-      return this.$store.state.authentication.status !== 'success';
248
+    isLoggedIn() {
249
+      return this.token !== null && this.token !== undefined;
250 250
     },
251 251
     // eslint-disable-next-line vue/return-in-computed-property
252 252
     Logout() {
253
-      return this.$store.state.authentication.methods.logout;
253
+      return this.logout();
254 254
     },
255 255
   },
256
-
257 256
   methods: {
258
-    ...mapGetters('authentication', ['isLoggedIn']),
259 257
     ...mapActions('authentication', ['logout']),
260 258
 
261 259
     routerGoTo(goTo) {

+ 15
- 7
src/components/shared/searchTab.vue Näytä tiedosto

@@ -11,12 +11,19 @@
11 11
           <div class="col-md-12">
12 12
             <div class="form-group" style="text-align:left">
13 13
               <label for="Type">Keyword</label>
14
-              <input
15
-                type="text"
16
-                class="form-control"
17
-                placeholder="Keyword"
18
-                v-model="propertySearch.keyword"
19
-              />
14
+              <div class="input-group mb-3">
15
+                <div class="input-group-prepend">
16
+                  <span class="input-group-text myFill" style="font-size:75%;">
17
+                    <i class="fa fa-search"></i>
18
+                  </span>
19
+                </div>
20
+                <input type="text" class="form-control" placeholder="Keyword" v-model="keyword" />
21
+                <div class="input-group-append" @click="clearFilter('resort')">
22
+                  <span class="input-group-text cursor-pointer myFill">
23
+                    <b>X</b>
24
+                  </span>
25
+                </div>
26
+              </div>
20 27
             </div>
21 28
           </div>
22 29
           <div class="col-md-12">
@@ -65,7 +72,7 @@
65 72
                 role="tabpanel"
66 73
                 aria-labelledby="pills-video-tab"
67 74
               >
68
-                <timeshareSearch />
75
+                <timeshareSearch :keyword="keyword" />
69 76
               </div>
70 77
               <div
71 78
                 class="tab-pane fade"
@@ -107,6 +114,7 @@ export default {
107 114
   data() {
108 115
     return {
109 116
       selectedPropertyType: 'timeshare',
117
+      keyword: '',
110 118
       propertySearch: {
111 119
         keyword: '',
112 120
         userName: '',

+ 26
- 12
src/components/timeshare/buy/buyPage.vue Näytä tiedosto

@@ -12,7 +12,7 @@
12 12
           </div>
13 13
         </div>
14 14
         <div class="container col-md-10">
15
-          <br />
15
+          <hr />
16 16
           <div class="row">
17 17
             <div class="col-md-12 text-left">
18 18
               <p>
@@ -33,7 +33,7 @@
33 33
               </p>
34 34
             </div>
35 35
           </div>
36
-          <br />
36
+          <hr />
37 37
           <div class="row mb-4">
38 38
             <div class="container col-md-4">
39 39
               <div class="accordion" id="accordionExample">
@@ -54,20 +54,26 @@
54 54
                   </a>
55 55
                   <div
56 56
                     :id="'collapse' + region.regionCode"
57
-                    class="collapse"
57
+                    class="collapse secondary"
58 58
                     :aria-labelledby="'header' + region.regionCode"
59 59
                     data-parent="#accordionExample"
60
+                    style="background-color:#E3E3E3"
60 61
                   >
61 62
                     <div class="card-body">
62
-                      <p class="mb-0" v-for="(resort, i) in region.resorts" :key="i">
63
-                        <a
64
-                          class="cursor-pointer"
65
-                          href="#"
66
-                          @click="routerGoTo('/resort/' + resort.resortCode)"
67
-                          @mouseover="updateMap(resort)"
68
-                        >{{resort.resortName + ' (' + resort.available + ')'}}</a>
69
-                        <br />
70
-                      </p>
63
+                      <div
64
+                        v-for="(resort, i) in region.resorts"
65
+                        :key="i"
66
+                        @click="routerGoTo('/resort/' + resort.resortCode)"
67
+                        @mouseover="updateMap(resort)"
68
+                      >
69
+                        <p class="mb-0 card-item">
70
+                          <a
71
+                            class="cursor-pointer"
72
+                            href="#"
73
+                          >{{resort.resortName + ' (' + resort.available + ')'}}</a>
74
+                          <br />
75
+                        </p>
76
+                      </div>
71 77
                     </div>
72 78
                   </div>
73 79
                 </div>
@@ -153,4 +159,12 @@ export default {
153 159
   color: #60cbeb;
154 160
   text-align: left;
155 161
 }
162
+.card-item {
163
+  font-size: 100%;
164
+}
165
+.card-item:hover {
166
+  background-color: rgba(255, 255, 255, 0.75);
167
+  border-radius: 5px;
168
+  cursor: pointer;
169
+}
156 170
 </style>

+ 28
- 0
src/components/timeshare/myWeeksPage.vue Näytä tiedosto

@@ -0,0 +1,28 @@
1
+<template>
2
+  <div>
3
+    <br />
4
+    <br />
5
+    <br />
6
+    <br />
7
+    <img
8
+      src="http://www.provision-sa.com:3000/Provision/UnivateProperties/src/branch/master/public/img/logos/UVProp.png"
9
+      height="200"
10
+      width="200"
11
+    />
12
+    {{getUser}}
13
+    <br />
14
+  </div>
15
+</template>
16
+<script>
17
+import { mapState } from 'vuex';
18
+import log from '../../assets/Log';
19
+
20
+export default {
21
+  computed: {
22
+    ...mapState('myWeeks', ['test']),
23
+    getUser() {
24
+      return log.getUser();
25
+    },
26
+  },
27
+};
28
+</script>

+ 1
- 1
src/components/timeshare/resort/unitPage.vue Näytä tiedosto

@@ -220,6 +220,6 @@ export default {
220 220
 }
221 221
 .price-label {
222 222
   color: black;
223
-  font-size: 250%;
223
+  font-size: 225%;
224 224
 }
225 225
 </style>

+ 14
- 15
src/components/timeshare/searchTimeshare.vue Näytä tiedosto

@@ -11,15 +11,15 @@
11 11
         <label>Province</label>
12 12
         <div class="input-group mb-3">
13 13
           <div class="input-group-prepend">
14
-            <span class="input-group-text" style="color: #60CBEB">
15
-              <b>P</b>
14
+            <span class="input-group-text myFill">
15
+              <i class="fa fa-map"></i>
16 16
             </span>
17 17
           </div>
18 18
           <select class="form-control" name="region" id="region" v-model="filter.region">
19 19
             <option v-for="(item, i) in regions" :key="i" :value="item">{{item.regionName}}</option>
20 20
           </select>
21 21
           <div class="input-group-append" @click="clearFilter('region')">
22
-            <span class="input-group-text cursor-pointer" style="color: #60CBEB">
22
+            <span class="input-group-text cursor-pointer myFill">
23 23
               <b>X</b>
24 24
             </span>
25 25
           </div>
@@ -29,7 +29,7 @@
29 29
         <label>Resort Name</label>
30 30
         <div class="input-group mb-3">
31 31
           <div class="input-group-prepend">
32
-            <span class="input-group-text" style="color: #60CBEB">
32
+            <span class="input-group-text myFill" style="font-size:75%;">
33 33
               <b>RN</b>
34 34
             </span>
35 35
           </div>
@@ -37,7 +37,7 @@
37 37
             <option v-for="(item, i) in filteredResorts" :key="i" :value="item">{{item.resortName}}</option>
38 38
           </select>
39 39
           <div class="input-group-append" @click="clearFilter('resort')">
40
-            <span class="input-group-text cursor-pointer" style="color: #60CBEB">
40
+            <span class="input-group-text cursor-pointer myFill">
41 41
               <b>X</b>
42 42
             </span>
43 43
           </div>
@@ -47,45 +47,43 @@
47 47
         <label>Bedrooms</label>
48 48
         <div class="input-group mb-3">
49 49
           <div class="input-group-prepend">
50
-            <span class="input-group-text" style="color: #60CBEB">
51
-              <b>Bed</b>
50
+            <span class="input-group-text myFill">
51
+              <i class="fa fa-bed"></i>
52 52
             </span>
53 53
           </div>
54 54
           <select class="form-control" name="bedrooms" v-model="filter.bedrooms">
55 55
             <option v-for="(item, i) in resortBedrooms" :key="i">{{item}}</option>
56 56
           </select>
57 57
           <div class="input-group-append" @click="clearFilter('bedrooms')">
58
-            <span class="input-group-text cursor-pointer" style="color: #60CBEB">
58
+            <span class="input-group-text cursor-pointer myFill">
59 59
               <b>X</b>
60 60
             </span>
61 61
           </div>
62 62
         </div>
63 63
       </div>
64
-      <hr />
65 64
       <div class="form-group text-left">
66 65
         <label>Date</label>
67 66
         <div class="input-group mb-3">
68 67
           <div class="input-group-prepend">
69
-            <span class="input-group-text" style="color: #60CBEB">
70
-              <b>D</b>
68
+            <span class="input-group-text myFill">
69
+              <i class="fa fa-calendar"></i>
71 70
             </span>
72 71
           </div>
73 72
           <input type="date" class="form-control" name="arrivaldate" v-model="filter.date" />
74 73
           <div class="input-group-append" @click="clearFilter('date')">
75
-            <span class="input-group-text cursor-pointer" style="color: #60CBEB">
74
+            <span class="input-group-text cursor-pointer myFill">
76 75
               <b>X</b>
77 76
             </span>
78 77
           </div>
79 78
         </div>
80 79
       </div>
81
-      <hr />
82 80
       <div class="form-group">
83 81
         <div class="row">
84 82
           <div class="col-md-6 text-left">
85 83
             <label>Minimum Price</label>
86 84
             <div class="input-group mb-3">
87 85
               <div class="input-group-prepend">
88
-                <span class="input-group-text" style="color: #60CBEB">
86
+                <span class="input-group-text myFill">
89 87
                   <b>R</b>
90 88
                 </span>
91 89
               </div>
@@ -99,7 +97,7 @@
99 97
                 v-model="filter.minPrice"
100 98
               />
101 99
               <div class="input-group-append" @click="clearFilter('minPrice')">
102
-                <span class="input-group-text cursor-pointer" style="color: #60CBEB">
100
+                <span class="input-group-text cursor-pointer myFill">
103 101
                   <b>X</b>
104 102
                 </span>
105 103
               </div>
@@ -142,6 +140,7 @@ import _ from 'lodash';
142 140
 export default {
143 141
   props: {
144 142
     hideTop: undefined,
143
+    keyword: undefined,
145 144
   },
146 145
   created() {
147 146
     this.initTimeshare();

+ 5
- 10
src/components/user/loginPage.vue Näytä tiedosto

@@ -61,7 +61,6 @@
61 61
           </div>
62 62
           <div class="form-group row"></div>
63 63
           <button @click="Login()" class="btn btn-b-n" type="submit">Sign In</button>
64
-          <p v-if="user !== null">{{ user }}</p>
65 64
           <hr />
66 65
           <button
67 66
             @click="routerGoTo('/user/register')"
@@ -112,8 +111,6 @@ export default {
112 111
   },
113 112
   data() {
114 113
     return {
115
-      username: '',
116
-      user: null,
117 114
       isPasswordShown: 'password',
118 115
       selectItems: [{ text: 'password', value: 0 }],
119 116
       selectErrors: 'Some error with the field',
@@ -121,20 +118,18 @@ export default {
121 118
       textErrors: 'Some error with the field',
122 119
       text: '',
123 120
       showPassword: false,
124
-      password: '',
125 121
       email: '',
126 122
     };
127 123
   },
128 124
   computed: {
129
-    ...mapState('authentication', ['token', 'status']),
125
+    ...mapState('authentication', ['token', 'status', 'username', 'password']),
130 126
   },
131 127
   methods: {
132
-    ...mapActions('authentication', ['login']),
128
+    ...mapActions('authentication', ['login', 'init']),
133 129
     Login() {
134
-      this.login({ username: this.username, password: this.password })
135
-        .then(() => this.router.push('/'))
136
-        .catch(err => console.log(err));
137
-      this.$router.push('/about/us');
130
+      this.login()
131
+        .then(() => {})
132
+        .catch(() => {});
138 133
     },
139 134
     togglePassword() {
140 135
       this.showPassword = true;

+ 184
- 178
src/router/index.js Näytä tiedosto

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

+ 2
- 0
src/store/index.js Näytä tiedosto

@@ -15,6 +15,7 @@ import PropertyList from './modules/property/propertyLists';
15 15
 import PropertyTypes from './modules/property/propertyTypes';
16 16
 import Register from './modules/user/register';
17 17
 import WeekList from './modules/timeshare/weekList';
18
+import MyWeeks from './modules/timeshare/myWeeks';
18 19
 import Bid from './modules/processFlow/bid';
19 20
 import Authentication from './modules/user/authentication';
20 21
 import PropertySearch from './modules/property/propertySearch';
@@ -24,6 +25,7 @@ Vue.use(Vuex);
24 25
 /* eslint no-param-reassign: ["error", { "props": false }] */
25 26
 export default new Vuex.Store({
26 27
   modules: {
28
+    myWeeks: MyWeeks,
27 29
     timeshare: TimeshareModule,
28 30
     users: UsersModule,
29 31
     status: StatusModule,

+ 10
- 0
src/store/modules/timeshare/myWeeks.js Näytä tiedosto

@@ -0,0 +1,10 @@
1
+export default {
2
+  namespaced: true,
3
+  state: {
4
+    test: 'kobus',
5
+    items: [],
6
+  },
7
+  mutations: {},
8
+  getters: {},
9
+  actions: {},
10
+};

+ 4
- 30
src/store/modules/timeshare/weekList.js Näytä tiedosto

@@ -15,8 +15,10 @@ export default {
15 15
       date: undefined,
16 16
       minPrice: undefined,
17 17
       maxPrice: undefined,
18
-      keyword: null,
18
+      keyword: undefined,
19 19
     },
20
+    prevFilter: undefined,
21
+    difFilter: undefined,
20 22
   },
21 23
   mutations: {
22 24
     onClearFilter(state, filter) {
@@ -34,6 +36,7 @@ export default {
34 36
   },
35 37
   getters: {
36 38
     filteredWeeks: (state) => {
39
+      console.log(JSON.stringify(state.filter));
37 40
       let weekList = state.weeks;
38 41
       const {
39 42
         filter,
@@ -109,34 +112,5 @@ export default {
109 112
     }, filter) {
110 113
       commit('onClearFilter', filter);
111 114
     },
112
-    addDummyWeek({
113
-      commit,
114
-    }) {
115
-      commit('addWeek', {
116
-        id: 1,
117
-        unit: '359',
118
-        week: 'N18',
119
-        module: '359/N18 River View',
120
-        sellingPrice: 85000,
121
-        currentLevy: 5455,
122
-        arrivalDate: '2019/09/09',
123
-        departureDate: '2019/09/16',
124
-        region: {
125
-          regionCode: 'EC',
126
-          regionName: 'Eastern Cape',
127
-          id: 1,
128
-        },
129
-        resort: {
130
-          resortName: 'Ekuthuleni Hoedspruit',
131
-          resortCode: 'EKU',
132
-          town: 'Hoedspruit',
133
-          city: 'Hoedspruit',
134
-          id: 17,
135
-        },
136
-        bedrooms: '2',
137
-        unitNumber: '18',
138
-        weekNumber: '25',
139
-      });
140
-    },
141 115
   },
142 116
 };

+ 63
- 23
src/store/modules/user/authentication.js Näytä tiedosto

@@ -1,68 +1,108 @@
1 1
 import Vue from 'vue';
2 2
 import Vuex from 'vuex';
3 3
 import axios from 'axios';
4
+import log from '../../../assets/Log';
4 5
 
5 6
 Vue.use(Vuex);
6 7
 export default {
7 8
   namespaced: true,
8 9
   state: {
9
-    status: '',
10
-    token: sessionStorage.getItem('token') || '',
11
-    user: {},
12
-    individual: {},
10
+    username: 'UniVate2018',
11
+    password: 'UniVate2018',
12
+    isLoggedIn: log.isLoggedIn(),
13
+    flag: false,
14
+    status: undefined,
15
+    token: undefined,
16
+    user: undefined,
17
+    person: undefined,
18
+    agency: undefined,
13 19
   },
14 20
   mutations: {
15 21
     auth_request(state) {
16 22
       state.status = 'loading';
17 23
     },
18
-    auth_success(state, token, user) {
24
+    auth_success(state, user) {
19 25
       state.status = 'success';
20
-      state.token = token;
21
-      state.user = user;
26
+      state.token = user.token;
27
+      state.user = user.user;
28
+      state.person = user.person;
29
+      state.agency = user.agency;
22 30
     },
23 31
     auth_error(state) {
24 32
       state.status = 'error';
25 33
     },
26 34
     logout(state) {
27
-      state.status = '';
28
-      state.token = '';
35
+      state.status = undefined;
36
+      state.token = undefined;
37
+      state.person = undefined;
38
+      state.agency = undefined;
39
+      state.user = undefined;
40
+    },
41
+    runInit(state, item) {
42
+      state.flag = true;
43
+      state.user = item.user;
44
+      state.token = item.token;
45
+      state.person = item.person;
46
+      state.agency = item.agency;
47
+    },
48
+    updateFlag(state) {
49
+      state.flag = true;
29 50
     },
30 51
   },
31 52
   getters: {
32
-    isLoggedIn: state => !!state.token,
33 53
     authStatus: state => state.status,
34 54
   },
35 55
   actions: {
36
-    login({ commit }, user) {
56
+    init({
57
+      commit,
58
+    }) {
59
+      console.log('init');
60
+      if (!log.isLoggedIn() && log.tokenExpired) {
61
+        log.clearValues();
62
+      } else log.updateTokenExpiry();
63
+      commit('runInit', {
64
+        user: log.getJSONObject('user'),
65
+        token: log.getJSONObject('token'),
66
+        person: log.getJSONObject('person'),
67
+        agency: log.getJSONObject('agency'),
68
+      });
69
+    },
70
+    login({
71
+      commit,
72
+      state,
73
+    }) {
37 74
       return new Promise((reject) => {
75
+        console.log(state.username);
38 76
         commit('auth_request');
77
+        const user = {
78
+          username: state.username,
79
+          password: state.password,
80
+        };
39 81
         axios({
40 82
           url: '/api/register/authenticate',
41 83
           data: user,
42 84
           method: 'POST',
43 85
         })
44 86
           .then((resp) => {
45
-            console.log(resp.data);
46
-            sessionStorage.setItem('token', resp.data.token);
47
-            sessionStorage.setItem('username', resp.data.username);
48
-            sessionStorage.setItem('name', resp.data.name);
49
-            commit('auth_success', resp.data.token, resp.data);
87
+            console.log(resp);
88
+            log.clearValues();
89
+            log.setValues(resp.data);
90
+            commit('auth_success', resp.data);
50 91
           })
51 92
           .catch((err) => {
93
+            console.log(err);
52 94
             commit('auth_error');
53
-            sessionStorage.removeItem('token');
54
-            sessionStorage.removeItem('username');
55
-            sessionStorage.removeItem('name');
95
+            log.clearValues();
56 96
             reject(err);
57 97
           });
58 98
       });
59 99
     },
60
-    logout({ commit }) {
100
+    logout({
101
+      commit,
102
+    }) {
61 103
       return new Promise(() => {
62 104
         commit('logout');
63
-        sessionStorage.removeItem('token');
64
-        sessionStorage.removeItem('username');
65
-        sessionStorage.removeItem('name');
105
+        log.clearValues();
66 106
         delete axios.defaults.headers.common.Authorization;
67 107
       });
68 108
     },

Loading…
Peruuta
Tallenna