ソースを参照

Individual

master
Kobus 5年前
コミット
04fdd3cf78

+ 11
- 7
src/components/misc/address.vue ファイルの表示

42
               name="propertyType"
42
               name="propertyType"
43
               id="propertyType"
43
               id="propertyType"
44
               @change="ProvinceSelected"
44
               @change="ProvinceSelected"
45
-              v-model="address.provinceId"
45
+              v-model="address.province"
46
             >
46
             >
47
               <option value="0">Please select province</option>
47
               <option value="0">Please select province</option>
48
               <option
48
               <option
49
                 v-for="province in provinces"
49
                 v-for="province in provinces"
50
                 :value="province.id"
50
                 :value="province.id"
51
-                :key="province.id"
51
+                :key="province.description"
52
               >{{ province.description }}</option>
52
               >{{ province.description }}</option>
53
             </select>
53
             </select>
54
           </div>
54
           </div>
65
               name="propertyType"
65
               name="propertyType"
66
               id="propertyType"
66
               id="propertyType"
67
               @change="CitySelected"
67
               @change="CitySelected"
68
-              v-model="address.cityId"
68
+              v-model="address.city"
69
             >
69
             >
70
               <option value="0">Please select city</option>
70
               <option value="0">Please select city</option>
71
-              <option v-for="city in cities" :value="city.id" :key="city.id">{{ city.description }}</option>
71
+              <option
72
+                v-for="city in cities"
73
+                :value="city.description"
74
+                :key="city.id"
75
+              >{{ city.description }}</option>
72
             </select>
76
             </select>
73
           </div>
77
           </div>
74
         </div>
78
         </div>
82
               class="form-control"
86
               class="form-control"
83
               name="propertyType"
87
               name="propertyType"
84
               id="suburbselector"
88
               id="suburbselector"
85
-              v-model="address.suburbId"
89
+              v-model="address.suburb"
86
               @change="getPostalCode"
90
               @change="getPostalCode"
87
             >
91
             >
88
               <option value="0">Please select suburb</option>
92
               <option value="0">Please select suburb</option>
89
               <option
93
               <option
90
                 v-for="suburb in suburbs"
94
                 v-for="suburb in suburbs"
91
-                :value="suburb.id"
92
-                :key="suburb.id"
95
+                :value="suburb.description"
96
+                :key="suburb.description"
93
               >{{ suburb.description }}</option>
97
               >{{ suburb.description }}</option>
94
             </select>
98
             </select>
95
           </div>
99
           </div>

+ 7
- 16
src/components/shared/bankAccount.vue ファイルの表示

14
             <span class="input-group-text">
14
             <span class="input-group-text">
15
               <eva-icon name="behance-outline" fill="#60CBEB"></eva-icon>
15
               <eva-icon name="behance-outline" fill="#60CBEB"></eva-icon>
16
             </span>
16
             </span>
17
-            <input class="form-control" type="text" name="bank" v-model="bankingDetails.bank" />
17
+            <input class="form-control" type="text" name="bank" v-model="bank.bank" />
18
           </div>
18
           </div>
19
         </div>
19
         </div>
20
         <div class="col-md-6" style="margin-bottom: 1em">
20
         <div class="col-md-6" style="margin-bottom: 1em">
23
             <span class="input-group-text">
23
             <span class="input-group-text">
24
               <eva-icon name="navigation-outline" fill="#60CBEB"></eva-icon>
24
               <eva-icon name="navigation-outline" fill="#60CBEB"></eva-icon>
25
             </span>
25
             </span>
26
-            <input
27
-              class="form-control"
28
-              type="text"
29
-              name="accountnumber"
30
-              v-model="bankingDetails.accountNumber"
31
-            />
26
+            <input class="form-control" type="text" name="accountnumber" v-model="bank.accNumber" />
32
           </div>
27
           </div>
33
         </div>
28
         </div>
34
         <div class="col-md-6" style="margin-bottom: 1em">
29
         <div class="col-md-6" style="margin-bottom: 1em">
37
             <span class="input-group-text">
32
             <span class="input-group-text">
38
               <eva-icon name="person-done-outline" fill="#60CBEB"></eva-icon>
33
               <eva-icon name="person-done-outline" fill="#60CBEB"></eva-icon>
39
             </span>
34
             </span>
40
-            <input
41
-              class="form-control"
42
-              type="text"
43
-              name="accountholder"
44
-              v-model="bankingDetails.accountHolder"
45
-            />
35
+            <input class="form-control" type="text" name="accountholder" v-model="bank.accHolder" />
46
           </div>
36
           </div>
47
         </div>
37
         </div>
48
       </div>
38
       </div>
52
 
42
 
53
 <script>
43
 <script>
54
 export default {
44
 export default {
45
+  name: 'BankAccount',
55
   props: {
46
   props: {
56
-    bankingDetails: {
47
+    bank: {
57
       bank: undefined,
48
       bank: undefined,
58
-      accountNumber: undefined,
59
-      accountHolder: undefined,
49
+      accNumber: undefined,
50
+      accHolder: undefined,
60
     },
51
     },
61
   },
52
   },
62
 };
53
 };

+ 58
- 51
src/components/shared/listView.vue ファイルの表示

7
         <input v-model="searchItem" class="form-control" placeholder="Search ..." />
7
         <input v-model="searchItem" class="form-control" placeholder="Search ..." />
8
       </div>
8
       </div>
9
     </div>
9
     </div>
10
-    <table id="table" class="table table-bordered table-hover">
11
-      <thead>
12
-        <tr class="dnd-moved">
13
-          <th v-for="(column, c) in Columns" :key="c">
14
-            <div @click="sortBy(column)">{{ column }}</div>
15
-          </th>
16
-          <th v-if="editable"></th>
17
-          <th v-if="deleteable"></th>
18
-        </tr>
19
-      </thead>
20
-      <tbody>
21
-        <tr
22
-          v-for="(item, i) in DisplayItems"
23
-          :key="i"
24
-          class="text-left dnd-moved"
25
-          @click="onRowClick(item)"
26
-        >
27
-          <td
28
-            v-for="(column, c) in Columns"
29
-            :key="c"
30
-          >{{ isObject(item[column]) ? item[column].display : item[column] }}</td>
31
-          <td v-if="editable" class="my-width">
32
-            <button type="button" class="btn my-btn" @click="onEdit(item)">Edit</button>
33
-          </td>
34
-          <td v-if="deleteable" class="my-width">
35
-            <button type="button" class="btn my-btn" @click="onDelete(item)">Delete</button>
36
-          </td>
37
-        </tr>
38
-      </tbody>
39
-    </table>
40
-    <div class="d-flex justify-content-between">
41
-      <div class="p-1">{{ currentPage + ' / ' + PageCount }}</div>
42
-      <div class="p-1">
43
-        <BasePagination
44
-          :currentPage="currentPage"
45
-          :pageCount="PageCount"
46
-          @nextPage="pageChangeHandle('next')"
47
-          @previousPage="pageChangeHandle('previous')"
48
-          @loadPage="pageChangeHandle"
49
-        />
50
-      </div>
51
-      <div class="p-2">
52
-        <div class="d-flex flex-row">
53
-          <div>
54
-            <select
55
-              class="form-control"
56
-              v-model="visibleItemsPerPageCount"
57
-              @change="onChangeItemsPerPage()"
58
-            >
59
-              <option v-for="(item, i) in itemsPerPageList" :key="i">{{ item }}</option>
60
-            </select>
10
+    <div v-if="items && items.length > 0">
11
+      <table id="table" class="table table-bordered table-hover">
12
+        <thead>
13
+          <tr class="dnd-moved">
14
+            <th v-for="(column, c) in Columns" :key="c">
15
+              <div @click="sortBy(column)">{{ column }}</div>
16
+            </th>
17
+            <th v-if="editable"></th>
18
+            <th v-if="deleteable"></th>
19
+          </tr>
20
+        </thead>
21
+        <tbody>
22
+          <tr
23
+            v-for="(item, i) in DisplayItems"
24
+            :key="i"
25
+            class="text-left dnd-moved"
26
+            @click="onRowClick(item)"
27
+          >
28
+            <td
29
+              v-for="(column, c) in Columns"
30
+              :key="c"
31
+            >{{ isObject(item[column]) ? item[column].display : item[column] }}</td>
32
+            <td v-if="editable" class="my-width">
33
+              <button type="button" class="btn my-btn" @click="onEdit(item)">Edit</button>
34
+            </td>
35
+            <td v-if="deleteable" class="my-width">
36
+              <button type="button" class="btn my-btn" @click="onDelete(item)">Delete</button>
37
+            </td>
38
+          </tr>
39
+        </tbody>
40
+      </table>
41
+      <div class="d-flex justify-content-between">
42
+        <div class="p-1">{{ currentPage + ' / ' + PageCount }}</div>
43
+        <div class="p-1">
44
+          <BasePagination
45
+            :currentPage="currentPage"
46
+            :pageCount="PageCount"
47
+            @nextPage="pageChangeHandle('next')"
48
+            @previousPage="pageChangeHandle('previous')"
49
+            @loadPage="pageChangeHandle"
50
+          />
51
+        </div>
52
+        <div class="p-2">
53
+          <div class="d-flex flex-row">
54
+            <div>
55
+              <select
56
+                class="form-control"
57
+                v-model="visibleItemsPerPageCount"
58
+                @change="onChangeItemsPerPage()"
59
+              >
60
+                <option v-for="(item, i) in itemsPerPageList" :key="i">{{ item }}</option>
61
+              </select>
62
+            </div>
61
           </div>
63
           </div>
62
         </div>
64
         </div>
63
       </div>
65
       </div>
64
     </div>
66
     </div>
67
+    <div v-else>
68
+      <Alert :text="'No items found ^-^'" :type="'INFO'" />
69
+    </div>
65
   </div>
70
   </div>
66
 </template>
71
 </template>
67
 
72
 
69
 import _ from 'lodash';
74
 import _ from 'lodash';
70
 import ItemsPerPageList from '../../assets/staticData/itemsPerPage';
75
 import ItemsPerPageList from '../../assets/staticData/itemsPerPage';
71
 import BasePagination from './basePagination.vue';
76
 import BasePagination from './basePagination.vue';
77
+import Alert from './alert.vue';
72
 
78
 
73
 export default {
79
 export default {
74
   components: {
80
   components: {
75
     BasePagination,
81
     BasePagination,
82
+    Alert,
76
   },
83
   },
77
   mounted() {
84
   mounted() {
78
     try {
85
     try {

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

14
 </template>
14
 </template>
15
 <script>
15
 <script>
16
 import { mapState, mapActions } from 'vuex';
16
 import { mapState, mapActions } from 'vuex';
17
-import log from '../../assets/Log';
17
+import Log from '../../assets/Log';
18
 import ListView from '../shared/listView.vue';
18
 import ListView from '../shared/listView.vue';
19
 
19
 
20
 export default {
20
 export default {
23
   },
23
   },
24
   data() {
24
   data() {
25
     return {
25
     return {
26
-      user: JSON.parse(log.getUser()),
26
+      user: Log.getUser(),
27
     };
27
     };
28
   },
28
   },
29
   mounted() {
29
   mounted() {

+ 10
- 10
src/components/timeshare/sell/sellPage.vue ファイルの表示

297
               </div>
297
               </div>
298
             </div>
298
             </div>
299
 
299
 
300
-            <DetailIndividual :owner="sellItem.owner" />
301
-            <hr />
302
-            <Address :address="sellItem.owner.address" />
303
-            <hr />
304
-            <BankDetails :bankingDetails="sellItem.owner.bankingDetails" />
300
+            <DetailIndividual :currentUser="sellItem.owner" :showBank="true" />
305
             <hr />
301
             <hr />
306
           </div>
302
           </div>
307
           <br />
303
           <br />
509
   </div>
505
   </div>
510
 </template>
506
 </template>
511
 <script>
507
 <script>
512
-import { mapState, mapActions } from 'vuex';
508
+import { mapState, mapActions, mapGetters } from 'vuex';
513
 import DetailIndividual from '../../user/timeshareIndividual.vue';
509
 import DetailIndividual from '../../user/timeshareIndividual.vue';
514
-import BankDetails from '../../shared/bankAccount.vue';
515
-import Address from '../../misc/address.vue';
510
+
516
 import Alert from '../../shared/alert.vue';
511
 import Alert from '../../shared/alert.vue';
517
 
512
 
518
 export default {
513
 export default {
524
   },
519
   },
525
   components: {
520
   components: {
526
     DetailIndividual,
521
     DetailIndividual,
527
-    BankDetails,
528
-    Address,
529
     Alert,
522
     Alert,
530
   },
523
   },
531
   created() {
524
   created() {
547
       'agents',
540
       'agents',
548
     ]),
541
     ]),
549
     ...mapState('authentication', ['isLoggedIn']),
542
     ...mapState('authentication', ['isLoggedIn']),
543
+    ...mapGetters({
544
+      user: 'authentication/getUser',
545
+      person: 'authentication/getPerson',
546
+    }),
550
     refAgent() {
547
     refAgent() {
551
       return this.sellItem && this.sellItem.referedByAgent;
548
       return this.sellItem && this.sellItem.referedByAgent;
552
     },
549
     },
568
       }
565
       }
569
       return _.sortBy(list, x => x.resortName);
566
       return _.sortBy(list, x => x.resortName);
570
     },
567
     },
568
+    isLoggedIn() {
569
+      return this.user && this.person;
570
+    },
571
   },
571
   },
572
   methods: {
572
   methods: {
573
     submitSale() {
573
     submitSale() {

+ 66
- 12
src/components/user/timeshareIndividual.vue ファイルの表示

7
       <div class="myWell">
7
       <div class="myWell">
8
         <h4>Detailed Individual Information</h4>
8
         <h4>Detailed Individual Information</h4>
9
       </div>
9
       </div>
10
-      <div class="form-group row"></div>
11
       <div class="row" style="text-align:left">
10
       <div class="row" style="text-align:left">
12
         <div class="col-md-6">
11
         <div class="col-md-6">
13
           <label>Name *</label>
12
           <label>Name *</label>
15
             <span class="input-group-text">
14
             <span class="input-group-text">
16
               <eva-icon name="person-outline" fill="#60CBEB"></eva-icon>
15
               <eva-icon name="person-outline" fill="#60CBEB"></eva-icon>
17
             </span>
16
             </span>
18
-            <input class="form-control" type="text" name="name" v-model="owner.name" />
17
+            <input class="form-control" type="text" name="name" v-model="currentUser.name" />
19
           </div>
18
           </div>
20
         </div>
19
         </div>
21
         <div class="col-md-6" style="margin-bottom: 1em">
20
         <div class="col-md-6" style="margin-bottom: 1em">
24
             <span class="input-group-text">
23
             <span class="input-group-text">
25
               <eva-icon name="book-outline" fill="#60CBEB"></eva-icon>
24
               <eva-icon name="book-outline" fill="#60CBEB"></eva-icon>
26
             </span>
25
             </span>
27
-            <input class="form-control" type="text" name="surname" v-model="owner.surname" />
26
+            <input class="form-control" type="text" name="surname" v-model="currentUser.surname" />
28
           </div>
27
           </div>
29
         </div>
28
         </div>
30
         <div class="col-md-6" style="margin-bottom: 1em">
29
         <div class="col-md-6" style="margin-bottom: 1em">
33
             <span class="input-group-text">
32
             <span class="input-group-text">
34
               <eva-icon name="archive" fill="#60CBEB"></eva-icon>
33
               <eva-icon name="archive" fill="#60CBEB"></eva-icon>
35
             </span>
34
             </span>
36
-            <input class="form-control" type="text" name="idnumber" v-model="owner.idNumber" />
35
+            <input class="form-control" type="text" name="idnumber" v-model="currentUser.idNumber" />
37
           </div>
36
           </div>
38
         </div>
37
         </div>
39
         <div class="col-md-6" style="margin-bottom: 1em">
38
         <div class="col-md-6" style="margin-bottom: 1em">
46
               class="form-control"
45
               class="form-control"
47
               type="text"
46
               type="text"
48
               name="companyregnumber"
47
               name="companyregnumber"
49
-              v-model="owner.companyRegNumber"
48
+              v-model="currentUser.companyRegNumber"
50
             />
49
             />
51
           </div>
50
           </div>
52
         </div>
51
         </div>
56
             <span class="input-group-text">
55
             <span class="input-group-text">
57
               <eva-icon name="people-outline" fill="#60CBEB"></eva-icon>
56
               <eva-icon name="people-outline" fill="#60CBEB"></eva-icon>
58
             </span>
57
             </span>
59
-            <select class="form-control" name="maritalstatus" v-model="owner.maritalstatus">
58
+            <select class="form-control" name="maritalstatus" v-model="currentUser.maritalStatus">
60
               <option v-for="(item, i) in maritalStatus" :key="i">{{item}}</option>
59
               <option v-for="(item, i) in maritalStatus" :key="i">{{item}}</option>
61
             </select>
60
             </select>
62
           </div>
61
           </div>
67
             <span class="input-group-text">
66
             <span class="input-group-text">
68
               <eva-icon name="email-outline" fill="#60CBEB"></eva-icon>
67
               <eva-icon name="email-outline" fill="#60CBEB"></eva-icon>
69
             </span>
68
             </span>
70
-            <input class="form-control" type="text" name="email" v-model="owner.email" />
69
+            <input class="form-control" type="text" name="email" v-model="currentUser.emailAddress" />
71
           </div>
70
           </div>
72
         </div>
71
         </div>
73
         <div class="col-md-6" style="margin-bottom: 1em">
72
         <div class="col-md-6" style="margin-bottom: 1em">
76
             <span class="input-group-text">
75
             <span class="input-group-text">
77
               <eva-icon name="smartphone-outline" fill="#60CBEB"></eva-icon>
76
               <eva-icon name="smartphone-outline" fill="#60CBEB"></eva-icon>
78
             </span>
77
             </span>
79
-            <input class="form-control" type="text" name="cellnumber" v-model="owner.cellNumber" />
78
+            <input
79
+              class="form-control"
80
+              type="text"
81
+              name="cellnumber"
82
+              v-model="currentUser.cellNumber"
83
+            />
80
           </div>
84
           </div>
81
         </div>
85
         </div>
82
         <div class="col-md-6" style="margin-bottom: 1em">
86
         <div class="col-md-6" style="margin-bottom: 1em">
85
             <span class="input-group-text">
89
             <span class="input-group-text">
86
               <eva-icon name="phone-outline" fill="#60CBEB"></eva-icon>
90
               <eva-icon name="phone-outline" fill="#60CBEB"></eva-icon>
87
             </span>
91
             </span>
88
-            <input class="form-control" type="text" name="landline" v-model="owner.telephone" />
92
+            <input
93
+              class="form-control"
94
+              type="text"
95
+              name="landline"
96
+              v-model="currentUser.landlineNumber"
97
+            />
89
           </div>
98
           </div>
90
         </div>
99
         </div>
91
       </div>
100
       </div>
92
     </div>
101
     </div>
102
+    <div v-if="showAddress">
103
+      <hr />
104
+      <Address :address="currentUser ? currentUser.address : {}" />
105
+    </div>
106
+    <div v-if="showBank">
107
+      <hr />
108
+      <BankAccount :bank="currentUser ? currentUser.bankingDetails : {}" />
109
+    </div>
93
   </div>
110
   </div>
94
 </template>
111
 </template>
95
 
112
 
96
 <script>
113
 <script>
97
-import { mapState } from 'vuex';
114
+import { mapState, mapGetters, mapActions } from 'vuex';
115
+import BankAccount from '../shared/bankAccount.vue';
116
+import Address from '../misc/address.vue';
98
 
117
 
99
 export default {
118
 export default {
100
-  component: {},
119
+  components: {
120
+    BankAccount,
121
+    Address,
122
+  },
101
   props: {
123
   props: {
102
-    owner: {},
124
+    currentUser: {
125
+      name: undefined,
126
+      surname: undefined,
127
+      idNumber: undefined,
128
+      companyRegNumber: undefined,
129
+      emailAddress: undefined,
130
+      cellNumber: undefined,
131
+      landlineNumber: undefined,
132
+      bankingDetails: {},
133
+      address: {},
134
+    },
135
+    showChangeCurrentUser: {
136
+      default: false,
137
+    },
138
+    showBank: {
139
+      default: false,
140
+    },
141
+    showAddress: {
142
+      default: false,
143
+    },
144
+  },
145
+  mounted() {
146
+    if (!this.currentUser) {
147
+      if (this.user) {
148
+        this.getIndividual(this.user.id);
149
+      }
150
+    }
103
   },
151
   },
104
   computed: {
152
   computed: {
105
     ...mapState('timeshare', ['maritalStatus']),
153
     ...mapState('timeshare', ['maritalStatus']),
154
+    ...mapGetters({
155
+      user: 'authentication/getUser',
156
+    }),
157
+  },
158
+  methods: {
159
+    ...mapActions('individual', ['getIndividual']),
106
   },
160
   },
107
 };
161
 };
108
 </script>
162
 </script>

+ 2
- 0
src/store/index.js ファイルの表示

24
 import Info from './modules/communication/info';
24
 import Info from './modules/communication/info';
25
 import PropertyEdit from './modules/property/propertyEdit';
25
 import PropertyEdit from './modules/property/propertyEdit';
26
 import Carousel from './modules/misc/carousel';
26
 import Carousel from './modules/misc/carousel';
27
+import Individual from './modules/user/individual';
27
 
28
 
28
 Vue.use(Vuex);
29
 Vue.use(Vuex);
29
 /* eslint no-param-reassign: ["error", { "props": false }] */
30
 /* eslint no-param-reassign: ["error", { "props": false }] */
52
     info: Info,
53
     info: Info,
53
     propertyEdit: PropertyEdit,
54
     propertyEdit: PropertyEdit,
54
     carousel: Carousel,
55
     carousel: Carousel,
56
+    individual: Individual,
55
   },
57
   },
56
 });
58
 });

+ 14
- 5
src/store/modules/user/authentication.js ファイルの表示

7
 export default {
7
 export default {
8
   namespaced: true,
8
   namespaced: true,
9
   state: {
9
   state: {
10
-    username: 'UniVate2018',
11
-    password: 'UniVate2018',
10
+    username: 'kobusb',
11
+    password: '123123',
12
     isLoggedIn: log.isLoggedIn(),
12
     isLoggedIn: log.isLoggedIn(),
13
     flag: false,
13
     flag: false,
14
     status: undefined,
14
     status: undefined,
51
   },
51
   },
52
   getters: {
52
   getters: {
53
     authStatus: state => state.status,
53
     authStatus: state => state.status,
54
+    getPerson: () => log.getPerson(),
55
+    getUser: () => log.getUser(),
54
   },
56
   },
55
   actions: {
57
   actions: {
56
-    init({ commit }) {
58
+    init({
59
+      commit,
60
+    }) {
57
       if (!log.isLoggedIn() && log.tokenExpired) {
61
       if (!log.isLoggedIn() && log.tokenExpired) {
58
         log.clearValues();
62
         log.clearValues();
59
       } else log.updateTokenExpiry();
63
       } else log.updateTokenExpiry();
64
         agency: log.getJSONObject('agency'),
68
         agency: log.getJSONObject('agency'),
65
       });
69
       });
66
     },
70
     },
67
-    login({ commit, state }) {
71
+    login({
72
+      commit,
73
+      state,
74
+    }) {
68
       axios({
75
       axios({
69
         url: '/api/register/authenticate',
76
         url: '/api/register/authenticate',
70
         data: {
77
         data: {
88
         });
95
         });
89
       /* }); */
96
       /* }); */
90
     },
97
     },
91
-    logout({ commit }) {
98
+    logout({
99
+      commit,
100
+    }) {
92
       return new Promise(() => {
101
       return new Promise(() => {
93
         commit('logout');
102
         commit('logout');
94
         log.clearValues();
103
         log.clearValues();

+ 32
- 0
src/store/modules/user/individual.js ファイルの表示

1
+/* eslint-disable no-restricted-syntax */
2
+/* eslint-disable guard-for-in */
3
+import axios from 'axios';
4
+
5
+export default {
6
+  namespaced: true,
7
+  state: {
8
+    items: [],
9
+    item: undefined,
10
+  },
11
+  mutations: {
12
+    addItem(state, item) {
13
+      state[item.name].push(item.value);
14
+    },
15
+    setItem(state, item) {
16
+      state[item.name] = item.value;
17
+    },
18
+  },
19
+  getters: {},
20
+  actions: {
21
+    getIndividual({
22
+      commit,
23
+    }, userId) {
24
+      axios
25
+        .get(`/api/individual/getIndividual/${userId}`)
26
+        .then(r => commit('setItem', {
27
+          name: 'item',
28
+          value: r.data,
29
+        })).catch(console.error);
30
+    },
31
+  },
32
+};

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