瀏覽代碼

User log

Mytimeshare
master
Kobus 5 年之前
父節點
當前提交
cec6bb4e04

+ 54
- 0
README.md 查看文件

1
 # UnivateProperties
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 查看文件

817
         "to-fast-properties": "^2.0.0"
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
     "@hapi/address": {
826
     "@hapi/address": {
821
       "version": "2.0.0",
827
       "version": "2.0.0",
822
       "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz",
828
       "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz",

+ 1
- 0
package.json 查看文件

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

+ 4
- 0
src/App.vue 查看文件

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

+ 47
- 2
src/assets/Log.js 查看文件

1
 const items = {
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
   isLoggedIn() {
47
   isLoggedIn() {
3
-    return localStorage.getItem('token') !== undefined;
48
+    return localStorage.getItem('token') !== undefined && localStorage.getItem('token') !== null;
4
   },
49
   },
5
   getUser() {
50
   getUser() {
6
-    return localStorage.getItem('User');
51
+    return localStorage.getItem('user');
7
   },
52
   },
8
 };
53
 };
9
 export default items;
54
 export default items;

+ 5
- 33
src/components/property/propertySearchFields.vue 查看文件

11
           </div>
11
           </div>
12
           <select
12
           <select
13
             class="form-control"
13
             class="form-control"
14
-            id="forSelector"
15
             v-model="propertySearch.salesType"
14
             v-model="propertySearch.salesType"
16
             @change="salesTypeSelected"
15
             @change="salesTypeSelected"
17
           >
16
           >
28
               <b>T</b>
27
               <b>T</b>
29
             </span>
28
             </span>
30
           </div>
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
             <option>All</option>
31
             <option>All</option>
38
             <option
32
             <option
39
               v-for="(propertyType, i) in propertyTypesRes"
33
               v-for="(propertyType, i) in propertyTypesRes"
55
               <b>T</b>
49
               <b>T</b>
56
             </span>
50
             </span>
57
           </div>
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
             <option>All</option>
53
             <option>All</option>
65
             <option
54
             <option
66
               v-for="(propertyType, i) in propertyTypesCom"
55
               v-for="(propertyType, i) in propertyTypesCom"
82
               <b>P</b>
71
               <b>P</b>
83
             </span>
72
             </span>
84
           </div>
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
             <option>All</option>
75
             <option>All</option>
92
             <option v-for="(province, i) in provinces" :key="i">{{ province.description }}</option>
76
             <option v-for="(province, i) in provinces" :key="i">{{ province.description }}</option>
93
           </select>
77
           </select>
108
               <b>C</b>
92
               <b>C</b>
109
             </span>
93
             </span>
110
           </div>
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
             <option>All</option>
96
             <option>All</option>
118
             <option v-for="(city, i) in cities" :key="i">{{ city.description }}</option>
97
             <option v-for="(city, i) in cities" :key="i">{{ city.description }}</option>
119
           </select>
98
           </select>
134
               <b>S</b>
113
               <b>S</b>
135
             </span>
114
             </span>
136
           </div>
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
             <option>All</option>
117
             <option>All</option>
144
             <option v-for="(suburb, i) in suburbs" :key="i">{{ suburb.description }}</option>
118
             <option v-for="(suburb, i) in suburbs" :key="i">{{ suburb.description }}</option>
145
           </select>
119
           </select>
166
                 class="form-control"
140
                 class="form-control"
167
                 type="number"
141
                 type="number"
168
                 step="any"
142
                 step="any"
169
-                id="minPrice"
170
                 name="minPrice"
143
                 name="minPrice"
171
                 v-model="propertySearch.minPrice"
144
                 v-model="propertySearch.minPrice"
172
               />
145
               />
189
                 class="form-control"
162
                 class="form-control"
190
                 type="number"
163
                 type="number"
191
                 step="any"
164
                 step="any"
192
-                id="maxPrice"
193
                 name="maxPrice"
165
                 name="maxPrice"
194
                 v-model="propertySearch.maxPrice"
166
                 v-model="propertySearch.maxPrice"
195
               />
167
               />

+ 0
- 1
src/components/shared/footerSection.vue 查看文件

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

+ 22
- 24
src/components/shared/navBar.vue 查看文件

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

+ 15
- 7
src/components/shared/searchTab.vue 查看文件

11
           <div class="col-md-12">
11
           <div class="col-md-12">
12
             <div class="form-group" style="text-align:left">
12
             <div class="form-group" style="text-align:left">
13
               <label for="Type">Keyword</label>
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
             </div>
27
             </div>
21
           </div>
28
           </div>
22
           <div class="col-md-12">
29
           <div class="col-md-12">
65
                 role="tabpanel"
72
                 role="tabpanel"
66
                 aria-labelledby="pills-video-tab"
73
                 aria-labelledby="pills-video-tab"
67
               >
74
               >
68
-                <timeshareSearch />
75
+                <timeshareSearch :keyword="keyword" />
69
               </div>
76
               </div>
70
               <div
77
               <div
71
                 class="tab-pane fade"
78
                 class="tab-pane fade"
107
   data() {
114
   data() {
108
     return {
115
     return {
109
       selectedPropertyType: 'timeshare',
116
       selectedPropertyType: 'timeshare',
117
+      keyword: '',
110
       propertySearch: {
118
       propertySearch: {
111
         keyword: '',
119
         keyword: '',
112
         userName: '',
120
         userName: '',

+ 26
- 12
src/components/timeshare/buy/buyPage.vue 查看文件

12
           </div>
12
           </div>
13
         </div>
13
         </div>
14
         <div class="container col-md-10">
14
         <div class="container col-md-10">
15
-          <br />
15
+          <hr />
16
           <div class="row">
16
           <div class="row">
17
             <div class="col-md-12 text-left">
17
             <div class="col-md-12 text-left">
18
               <p>
18
               <p>
33
               </p>
33
               </p>
34
             </div>
34
             </div>
35
           </div>
35
           </div>
36
-          <br />
36
+          <hr />
37
           <div class="row mb-4">
37
           <div class="row mb-4">
38
             <div class="container col-md-4">
38
             <div class="container col-md-4">
39
               <div class="accordion" id="accordionExample">
39
               <div class="accordion" id="accordionExample">
54
                   </a>
54
                   </a>
55
                   <div
55
                   <div
56
                     :id="'collapse' + region.regionCode"
56
                     :id="'collapse' + region.regionCode"
57
-                    class="collapse"
57
+                    class="collapse secondary"
58
                     :aria-labelledby="'header' + region.regionCode"
58
                     :aria-labelledby="'header' + region.regionCode"
59
                     data-parent="#accordionExample"
59
                     data-parent="#accordionExample"
60
+                    style="background-color:#E3E3E3"
60
                   >
61
                   >
61
                     <div class="card-body">
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
                     </div>
77
                     </div>
72
                   </div>
78
                   </div>
73
                 </div>
79
                 </div>
153
   color: #60cbeb;
159
   color: #60cbeb;
154
   text-align: left;
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
 </style>
170
 </style>

+ 28
- 0
src/components/timeshare/myWeeksPage.vue 查看文件

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 查看文件

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

+ 14
- 15
src/components/timeshare/searchTimeshare.vue 查看文件

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

+ 5
- 10
src/components/user/loginPage.vue 查看文件

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

+ 184
- 178
src/router/index.js 查看文件

8
 import TimeshareSell from '../components/timeshare/sell/sellPage.vue';
8
 import TimeshareSell from '../components/timeshare/sell/sellPage.vue';
9
 import TimeshareFAQ from '../components/timeshare/faqPage.vue';
9
 import TimeshareFAQ from '../components/timeshare/faqPage.vue';
10
 import TimeshareSearch from '../components/timeshare/buy/weekListPage.vue';
10
 import TimeshareSearch from '../components/timeshare/buy/weekListPage.vue';
11
+import MyWeeksPage from '../components/timeshare/myWeeksPage.vue';
11
 
12
 
12
 import Login from '../components/user/loginPage.vue';
13
 import Login from '../components/user/loginPage.vue';
13
 import PrivateIndividual from '../components/user/registerPage.vue';
14
 import PrivateIndividual from '../components/user/registerPage.vue';
45
 
46
 
46
 Vue.use(Router);
47
 Vue.use(Router);
47
 
48
 
49
+
48
 export default new Router({
50
 export default new Router({
49
   scrollBehavior(to, from, savedPosition) {
51
   scrollBehavior(to, from, savedPosition) {
50
     return {
52
     return {
52
       y: 0,
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 查看文件

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

+ 10
- 0
src/store/modules/timeshare/myWeeks.js 查看文件

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 查看文件

15
       date: undefined,
15
       date: undefined,
16
       minPrice: undefined,
16
       minPrice: undefined,
17
       maxPrice: undefined,
17
       maxPrice: undefined,
18
-      keyword: null,
18
+      keyword: undefined,
19
     },
19
     },
20
+    prevFilter: undefined,
21
+    difFilter: undefined,
20
   },
22
   },
21
   mutations: {
23
   mutations: {
22
     onClearFilter(state, filter) {
24
     onClearFilter(state, filter) {
34
   },
36
   },
35
   getters: {
37
   getters: {
36
     filteredWeeks: (state) => {
38
     filteredWeeks: (state) => {
39
+      console.log(JSON.stringify(state.filter));
37
       let weekList = state.weeks;
40
       let weekList = state.weeks;
38
       const {
41
       const {
39
         filter,
42
         filter,
109
     }, filter) {
112
     }, filter) {
110
       commit('onClearFilter', filter);
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 查看文件

1
 import Vue from 'vue';
1
 import Vue from 'vue';
2
 import Vuex from 'vuex';
2
 import Vuex from 'vuex';
3
 import axios from 'axios';
3
 import axios from 'axios';
4
+import log from '../../../assets/Log';
4
 
5
 
5
 Vue.use(Vuex);
6
 Vue.use(Vuex);
6
 export default {
7
 export default {
7
   namespaced: true,
8
   namespaced: true,
8
   state: {
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
   mutations: {
20
   mutations: {
15
     auth_request(state) {
21
     auth_request(state) {
16
       state.status = 'loading';
22
       state.status = 'loading';
17
     },
23
     },
18
-    auth_success(state, token, user) {
24
+    auth_success(state, user) {
19
       state.status = 'success';
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
     auth_error(state) {
31
     auth_error(state) {
24
       state.status = 'error';
32
       state.status = 'error';
25
     },
33
     },
26
     logout(state) {
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
   getters: {
52
   getters: {
32
-    isLoggedIn: state => !!state.token,
33
     authStatus: state => state.status,
53
     authStatus: state => state.status,
34
   },
54
   },
35
   actions: {
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
       return new Promise((reject) => {
74
       return new Promise((reject) => {
75
+        console.log(state.username);
38
         commit('auth_request');
76
         commit('auth_request');
77
+        const user = {
78
+          username: state.username,
79
+          password: state.password,
80
+        };
39
         axios({
81
         axios({
40
           url: '/api/register/authenticate',
82
           url: '/api/register/authenticate',
41
           data: user,
83
           data: user,
42
           method: 'POST',
84
           method: 'POST',
43
         })
85
         })
44
           .then((resp) => {
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
           .catch((err) => {
92
           .catch((err) => {
93
+            console.log(err);
52
             commit('auth_error');
94
             commit('auth_error');
53
-            sessionStorage.removeItem('token');
54
-            sessionStorage.removeItem('username');
55
-            sessionStorage.removeItem('name');
95
+            log.clearValues();
56
             reject(err);
96
             reject(err);
57
           });
97
           });
58
       });
98
       });
59
     },
99
     },
60
-    logout({ commit }) {
100
+    logout({
101
+      commit,
102
+    }) {
61
       return new Promise(() => {
103
       return new Promise(() => {
62
         commit('logout');
104
         commit('logout');
63
-        sessionStorage.removeItem('token');
64
-        sessionStorage.removeItem('username');
65
-        sessionStorage.removeItem('name');
105
+        log.clearValues();
66
         delete axios.defaults.headers.common.Authorization;
106
         delete axios.defaults.headers.common.Authorization;
67
       });
107
       });
68
     },
108
     },

Loading…
取消
儲存