Kobus 5 lat temu
rodzic
commit
baaa6694ea
40 zmienionych plików z 2553 dodań i 1180 usunięć
  1. 951
    177
      package-lock.json
  2. 4
    0
      package.json
  3. 5
    2
      public/css/style.css
  4. 37
    0
      public/img/ligthbox/close.svg
  5. 49
    0
      public/img/ligthbox/next.svg
  6. 49
    0
      public/img/ligthbox/prev.svg
  7. BIN
      public/img/testimonial-1.jpg
  8. BIN
      public/img/testimonial-1.png
  9. BIN
      public/img/testimonial-2.jpg
  10. BIN
      public/img/testimonial-2.png
  11. BIN
      public/img/testimonial-3.2.jpg
  12. BIN
      public/img/testimonial-3.jpg
  13. BIN
      public/img/testimonial-4.png
  14. 36
    0
      src/components/admin/status/changeLogPage.vue
  15. 36
    0
      src/components/admin/status/tenderWeekAdminPage.vue
  16. 36
    0
      src/components/admin/status/timeshareAdminPage.vue
  17. 36
    0
      src/components/admin/status/userManagementPage.vue
  18. 0
    217
      src/components/home/agentSection.vue
  19. 0
    2
      src/components/home/homePage.vue
  20. 2
    4
      src/components/home/propertySection.vue
  21. 18
    27
      src/components/home/serviceSection.vue
  22. 81
    12
      src/components/home/testimonialSection.vue
  23. 10
    4
      src/components/misc/contactUs.vue
  24. 12
    3
      src/components/property/propertyCard.vue
  25. 11
    7
      src/components/property/propertyImage.vue
  26. 180
    282
      src/components/property/propertyPage.vue
  27. 148
    0
      src/components/property/propertySearchFields.vue
  28. 62
    37
      src/components/property/propertySearchPage.vue
  29. 27
    3
      src/components/property/propertyUserField.vue
  30. 94
    117
      src/components/property/propertyeditPage.vue
  31. 7
    7
      src/components/shared/footerSection.vue
  32. 201
    0
      src/components/shared/lightBoxGallery.vue
  33. 9
    13
      src/components/shared/navBar.vue
  34. 117
    92
      src/components/shared/searchTab.vue
  35. 135
    108
      src/components/timeshare/resort/unitPage.vue
  36. 59
    52
      src/components/user/loginPage.vue
  37. 25
    0
      src/router/index.js
  38. 2
    0
      src/store/index.js
  39. 107
    0
      src/store/modules/property/property.js
  40. 7
    14
      src/store/modules/searchTab.js

+ 951
- 177
package-lock.json
Plik diff jest za duży
Wyświetl plik


+ 4
- 0
package.json Wyświetl plik

13
     "animate.css": "^3.7.2",
13
     "animate.css": "^3.7.2",
14
     "axios": "^0.19.0",
14
     "axios": "^0.19.0",
15
     "core-js": "^2.6.5",
15
     "core-js": "^2.6.5",
16
+    "datatables.net": "^1.10.19",
16
     "lodash": "^4.17.15",
17
     "lodash": "^4.17.15",
17
     "material-design-icons-iconfont": "^3.0.3",
18
     "material-design-icons-iconfont": "^3.0.3",
19
+    "node-sass": "^4.12.0",
18
     "roboto-fontface": "*",
20
     "roboto-fontface": "*",
21
+    "sass-loader": "^7.3.1",
19
     "stylus-loader": "^3.0.2",
22
     "stylus-loader": "^3.0.2",
20
     "vue": "^2.6.10",
23
     "vue": "^2.6.10",
21
     "vue-eva-icons": "^1.1.1",
24
     "vue-eva-icons": "^1.1.1",
22
     "vue-router": "^3.0.7",
25
     "vue-router": "^3.0.7",
26
+    "vue-trix": "^1.0.0",
23
     "vuetify": "^1.5.5",
27
     "vuetify": "^1.5.5",
24
     "vuex": "^3.1.1"
28
     "vuex": "^3.1.1"
25
   },
29
   },

+ 5
- 2
public/css/style.css Wyświetl plik

1570
     font-size: 14px;
1570
     font-size: 14px;
1571
 }
1571
 }
1572
 
1572
 
1573
+.pt-3-half {
1574
+    padding-top: 1.4rem;
1575
+}
1573
 
1576
 
1574
 /*======================================
1577
 /*======================================
1575
 //--//-->   FORM INPUT
1578
 //--//-->   FORM INPUT
1589
 .form {
1592
 .form {
1590
     position: relative;
1593
     position: relative;
1591
     z-index: 1;
1594
     z-index: 1;
1592
-    background: rgb(236, 233, 233);
1595
+    background: #F8F9F9;
1593
     max-width: 360px;
1596
     max-width: 360px;
1594
     margin: 0 auto 100px;
1597
     margin: 0 auto 100px;
1595
     padding: 45px;
1598
     padding: 45px;
1600
 .regform {
1603
 .regform {
1601
     position: relative;
1604
     position: relative;
1602
     z-index: 1;
1605
     z-index: 1;
1603
-    background: rgb(236, 233, 233);
1606
+    background: #F8F9F9;
1604
     max-width: 600px;
1607
     max-width: 600px;
1605
     margin: 0 auto 100px;
1608
     margin: 0 auto 100px;
1606
     padding: 45px;
1609
     padding: 45px;

+ 37
- 0
public/img/ligthbox/close.svg Wyświetl plik

1
+<?xml version="1.0" encoding="iso-8859-1"?>
2
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
3
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 47.971 47.971" style="enable-background:new 0 0 47.971 47.971;" xml:space="preserve">
4
+<g>
5
+	<path d="M28.228,23.986L47.092,5.122c1.172-1.171,1.172-3.071,0-4.242c-1.172-1.172-3.07-1.172-4.242,0L23.986,19.744L5.121,0.88   c-1.172-1.172-3.07-1.172-4.242,0c-1.172,1.171-1.172,3.071,0,4.242l18.865,18.864L0.879,42.85c-1.172,1.171-1.172,3.071,0,4.242   C1.465,47.677,2.233,47.97,3,47.97s1.535-0.293,2.121-0.879l18.865-18.864L42.85,47.091c0.586,0.586,1.354,0.879,2.121,0.879   s1.535-0.293,2.121-0.879c1.172-1.171,1.172-3.071,0-4.242L28.228,23.986z" fill="#FFFFFF"/>
6
+</g>
7
+<g>
8
+</g>
9
+<g>
10
+</g>
11
+<g>
12
+</g>
13
+<g>
14
+</g>
15
+<g>
16
+</g>
17
+<g>
18
+</g>
19
+<g>
20
+</g>
21
+<g>
22
+</g>
23
+<g>
24
+</g>
25
+<g>
26
+</g>
27
+<g>
28
+</g>
29
+<g>
30
+</g>
31
+<g>
32
+</g>
33
+<g>
34
+</g>
35
+<g>
36
+</g>
37
+</svg>

+ 49
- 0
public/img/ligthbox/next.svg Wyświetl plik

1
+<?xml version="1.0" encoding="iso-8859-1"?>
2
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
3
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 240.823 240.823" style="enable-background:new 0 0 240.823 240.823;" xml:space="preserve">
4
+<g>
5
+	<path id="Chevron_Right_1_" d="M183.189,111.816L74.892,3.555c-4.752-4.74-12.451-4.74-17.215,0c-4.752,4.74-4.752,12.439,0,17.179   l99.707,99.671l-99.695,99.671c-4.752,4.74-4.752,12.439,0,17.191c4.752,4.74,12.463,4.74,17.215,0l108.297-108.261   C187.881,124.315,187.881,116.495,183.189,111.816z" fill="#FFFFFF"/>
6
+	<g>
7
+	</g>
8
+	<g>
9
+	</g>
10
+	<g>
11
+	</g>
12
+	<g>
13
+	</g>
14
+	<g>
15
+	</g>
16
+	<g>
17
+	</g>
18
+</g>
19
+<g>
20
+</g>
21
+<g>
22
+</g>
23
+<g>
24
+</g>
25
+<g>
26
+</g>
27
+<g>
28
+</g>
29
+<g>
30
+</g>
31
+<g>
32
+</g>
33
+<g>
34
+</g>
35
+<g>
36
+</g>
37
+<g>
38
+</g>
39
+<g>
40
+</g>
41
+<g>
42
+</g>
43
+<g>
44
+</g>
45
+<g>
46
+</g>
47
+<g>
48
+</g>
49
+</svg>

+ 49
- 0
public/img/ligthbox/prev.svg Wyświetl plik

1
+<?xml version="1.0" encoding="iso-8859-1"?>
2
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
3
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Capa_1" x="0px" y="0px" viewBox="0 0 240.823 240.823" style="enable-background:new 0 0 240.823 240.823;" xml:space="preserve">
4
+<g>
5
+	<path id="Chevron_Right" d="M57.633,129.007L165.93,237.268c4.752,4.74,12.451,4.74,17.215,0c4.752-4.74,4.752-12.439,0-17.179   l-99.707-99.671l99.695-99.671c4.752-4.74,4.752-12.439,0-17.191c-4.752-4.74-12.463-4.74-17.215,0L57.621,111.816   C52.942,116.507,52.942,124.327,57.633,129.007z" fill="#FFFFFF"/>
6
+	<g>
7
+	</g>
8
+	<g>
9
+	</g>
10
+	<g>
11
+	</g>
12
+	<g>
13
+	</g>
14
+	<g>
15
+	</g>
16
+	<g>
17
+	</g>
18
+</g>
19
+<g>
20
+</g>
21
+<g>
22
+</g>
23
+<g>
24
+</g>
25
+<g>
26
+</g>
27
+<g>
28
+</g>
29
+<g>
30
+</g>
31
+<g>
32
+</g>
33
+<g>
34
+</g>
35
+<g>
36
+</g>
37
+<g>
38
+</g>
39
+<g>
40
+</g>
41
+<g>
42
+</g>
43
+<g>
44
+</g>
45
+<g>
46
+</g>
47
+<g>
48
+</g>
49
+</svg>

BIN
public/img/testimonial-1.jpg Wyświetl plik


BIN
public/img/testimonial-1.png Wyświetl plik


BIN
public/img/testimonial-2.jpg Wyświetl plik


BIN
public/img/testimonial-2.png Wyświetl plik


BIN
public/img/testimonial-3.2.jpg Wyświetl plik


BIN
public/img/testimonial-3.jpg Wyświetl plik


BIN
public/img/testimonial-4.png Wyświetl plik


+ 36
- 0
src/components/admin/status/changeLogPage.vue Wyświetl plik

1
+<template>
2
+  <section class="intro-single">
3
+    <div class="container">
4
+      <div class="row">
5
+        <div class="col-md-12 col-lg-8">
6
+          <div class="title-single-box">
7
+            <h1 class="title-single" style="text-align:left;">Change Log</h1>
8
+          </div>
9
+        </div>
10
+      </div>
11
+    </div>
12
+    <div id="table" class="col-xs-12 table-responsive">
13
+      <datatable :columns="columns" :data="rows"></datatable>
14
+    </div>
15
+  </section>
16
+</template>
17
+<script>
18
+import { mapState, mapActions } from 'vuex';
19
+
20
+export default {
21
+  name: 'changeLogPage',
22
+  created() {
23
+    this.getchangeLogPage();
24
+  },
25
+  computed: {
26
+    ...mapState('status', ['changeLogPage']),
27
+  },
28
+  methods: {
29
+    ...mapActions('status', ['getchangeLogPage']),
30
+  },
31
+};
32
+</script>
33
+
34
+
35
+<style>
36
+</style>

+ 36
- 0
src/components/admin/status/tenderWeekAdminPage.vue Wyświetl plik

1
+<template>
2
+  <section class="intro-single">
3
+    <div class="container">
4
+      <div class="row">
5
+        <div class="col-md-12 col-lg-8">
6
+          <div class="title-single-box">
7
+            <h1 class="title-single" style="text-align:left;">Tender Week Admin</h1>
8
+          </div>
9
+        </div>
10
+      </div>
11
+    </div>
12
+    <div id="table" class="col-xs-12 table-responsive">
13
+      <datatable :columns="columns" :data="rows"></datatable>
14
+    </div>
15
+  </section>
16
+</template>
17
+<script>
18
+import { mapState, mapActions } from 'vuex';
19
+
20
+export default {
21
+  name: 'TenderWeekAdmin',
22
+  created() {
23
+    this.gettenderWeekdmin();
24
+  },
25
+  computed: {
26
+    ...mapState('status', ['tenderWeekAdmin']),
27
+  },
28
+  methods: {
29
+    ...mapActions('status', ['gettenderWeekAdmin']),
30
+  },
31
+};
32
+</script>
33
+
34
+
35
+<style>
36
+</style>

+ 36
- 0
src/components/admin/status/timeshareAdminPage.vue Wyświetl plik

1
+<template>
2
+  <section class="intro-single">
3
+    <div class="container">
4
+      <div class="row">
5
+        <div class="col-md-12 col-lg-8">
6
+          <div class="title-single-box">
7
+            <h1 class="title-single" style="text-align:left;">Timeshare Admin</h1>
8
+          </div>
9
+        </div>
10
+      </div>
11
+    </div>
12
+    <div id="table" class="col-xs-12 table-responsive">
13
+      <datatable :columns="columns" :data="rows"></datatable>
14
+    </div>
15
+  </section>
16
+</template>
17
+<script>
18
+import { mapState, mapActions } from 'vuex';
19
+
20
+export default {
21
+  name: 'TimeshareAdmin',
22
+  created() {
23
+    this.gettimeshareAdmin();
24
+  },
25
+  computed: {
26
+    ...mapState('status', ['timeshareAdmin']),
27
+  },
28
+  methods: {
29
+    ...mapActions('status', ['gettimeshareAdmin']),
30
+  },
31
+};
32
+</script>
33
+
34
+
35
+<style>
36
+</style>

+ 36
- 0
src/components/admin/status/userManagementPage.vue Wyświetl plik

1
+<template>
2
+  <section class="intro-single">
3
+    <div class="container">
4
+      <div class="row">
5
+        <div class="col-md-12 col-lg-8">
6
+          <div class="title-single-box">
7
+            <h1 class="title-single" style="text-align:left;">User Management</h1>
8
+          </div>
9
+        </div>
10
+      </div>
11
+    </div>
12
+    <div id="table" class="col-xs-12 table-responsive">
13
+      <datatable :columns="columns" :data="rows"></datatable>
14
+    </div>
15
+  </section>
16
+</template>
17
+<script>
18
+import { mapState, mapActions } from 'vuex';
19
+
20
+export default {
21
+  name: 'userManagementPage',
22
+  created() {
23
+    this.getuserManagementPage();
24
+  },
25
+  computed: {
26
+    ...mapState('status', ['userManagementPage']),
27
+  },
28
+  methods: {
29
+    ...mapActions('status', ['getuserManagementPage']),
30
+  },
31
+};
32
+</script>
33
+
34
+
35
+<style>
36
+</style>

+ 0
- 217
src/components/home/agentSection.vue Wyświetl plik

1
-<template>
2
-  <div>
3
-    <section class="section-agents section-t8">
4
-      <div class="container">
5
-        <div class="row">
6
-          <div class="col-md-12">
7
-            <div class="title-wrap d-flex justify-content-between">
8
-              <div class="title-box">
9
-                <h2 class="title-a">Best Agents</h2>
10
-              </div>
11
-              <div class="title-link">
12
-                <a href="agents-grid.html">
13
-                  All Agents
14
-                  <span class="ion-ios-arrow-forward"></span>
15
-                </a>
16
-              </div>
17
-            </div>
18
-          </div>
19
-        </div>
20
-        <div class="row">
21
-          <div class="col-md-4">
22
-            <div class="card-box-d">
23
-              <div class="card-img-d">
24
-                <img src="img/agent-4.jpg" alt class="img-d img-fluid" />
25
-              </div>
26
-              <div class="card-overlay card-overlay-hover">
27
-                <div class="card-header-d">
28
-                  <div class="card-title-d align-self-center">
29
-                    <h3 class="title-d">
30
-                      <a href="agent-single.html" class="link-two">
31
-                        Margaret Sotillo
32
-                        <br />Escala
33
-                      </a>
34
-                    </h3>
35
-                  </div>
36
-                </div>
37
-                <div class="card-body-d">
38
-                  <p
39
-                    class="content-d color-text-a"
40
-                  >Sed porttitor lectus nibh, Cras ultricies ligula sed magna dictum porta two.</p>
41
-                  <div class="info-agents color-a">
42
-                    <p>
43
-                      <strong>Phone:</strong> +54 356 945234
44
-                    </p>
45
-                    <p>
46
-                      <strong>Email:</strong> agents@example.com
47
-                    </p>
48
-                  </div>
49
-                </div>
50
-                <div class="card-footer-d">
51
-                  <div class="socials-footer d-flex justify-content-center">
52
-                    <ul class="list-inline">
53
-                      <li class="list-inline-item">
54
-                        <a href="#" class="link-one">
55
-                          <i class="fa fa-facebook" aria-hidden="true"></i>
56
-                        </a>
57
-                      </li>
58
-                      <li class="list-inline-item">
59
-                        <a href="#" class="link-one">
60
-                          <i class="fa fa-twitter" aria-hidden="true"></i>
61
-                        </a>
62
-                      </li>
63
-                      <li class="list-inline-item">
64
-                        <a href="#" class="link-one">
65
-                          <i class="fa fa-instagram" aria-hidden="true"></i>
66
-                        </a>
67
-                      </li>
68
-                      <li class="list-inline-item">
69
-                        <a href="#" class="link-one">
70
-                          <i class="fa fa-pinterest-p" aria-hidden="true"></i>
71
-                        </a>
72
-                      </li>
73
-                      <li class="list-inline-item">
74
-                        <a href="#" class="link-one">
75
-                          <i class="fa fa-dribbble" aria-hidden="true"></i>
76
-                        </a>
77
-                      </li>
78
-                    </ul>
79
-                  </div>
80
-                </div>
81
-              </div>
82
-            </div>
83
-          </div>
84
-          <div class="col-md-4">
85
-            <div class="card-box-d">
86
-              <div class="card-img-d">
87
-                <img src="img/agent-1.jpg" alt class="img-d img-fluid" />
88
-              </div>
89
-              <div class="card-overlay card-overlay-hover">
90
-                <div class="card-header-d">
91
-                  <div class="card-title-d align-self-center">
92
-                    <h3 class="title-d">
93
-                      <a href="agent-single.html" class="link-two">
94
-                        Stiven Spilver
95
-                        <br />Darw
96
-                      </a>
97
-                    </h3>
98
-                  </div>
99
-                </div>
100
-                <div class="card-body-d">
101
-                  <p
102
-                    class="content-d color-text-a"
103
-                  >Sed porttitor lectus nibh, Cras ultricies ligula sed magna dictum porta two.</p>
104
-                  <div class="info-agents color-a">
105
-                    <p>
106
-                      <strong>Phone:</strong> +54 356 945234
107
-                    </p>
108
-                    <p>
109
-                      <strong>Email:</strong> agents@example.com
110
-                    </p>
111
-                  </div>
112
-                </div>
113
-                <div class="card-footer-d">
114
-                  <div class="socials-footer d-flex justify-content-center">
115
-                    <ul class="list-inline">
116
-                      <li class="list-inline-item">
117
-                        <a href="#" class="link-one">
118
-                          <i class="fa fa-facebook" aria-hidden="true"></i>
119
-                        </a>
120
-                      </li>
121
-                      <li class="list-inline-item">
122
-                        <a href="#" class="link-one">
123
-                          <i class="fa fa-twitter" aria-hidden="true"></i>
124
-                        </a>
125
-                      </li>
126
-                      <li class="list-inline-item">
127
-                        <a href="#" class="link-one">
128
-                          <i class="fa fa-instagram" aria-hidden="true"></i>
129
-                        </a>
130
-                      </li>
131
-                      <li class="list-inline-item">
132
-                        <a href="#" class="link-one">
133
-                          <i class="fa fa-pinterest-p" aria-hidden="true"></i>
134
-                        </a>
135
-                      </li>
136
-                      <li class="list-inline-item">
137
-                        <a href="#" class="link-one">
138
-                          <i class="fa fa-dribbble" aria-hidden="true"></i>
139
-                        </a>
140
-                      </li>
141
-                    </ul>
142
-                  </div>
143
-                </div>
144
-              </div>
145
-            </div>
146
-          </div>
147
-          <div class="col-md-4">
148
-            <div class="card-box-d">
149
-              <div class="card-img-d">
150
-                <img src="img/agent-5.jpg" alt class="img-d img-fluid" />
151
-              </div>
152
-              <div class="card-overlay card-overlay-hover">
153
-                <div class="card-header-d">
154
-                  <div class="card-title-d align-self-center">
155
-                    <h3 class="title-d">
156
-                      <a href="agent-single.html" class="link-two">
157
-                        Emma Toledo
158
-                        <br />Cascada
159
-                      </a>
160
-                    </h3>
161
-                  </div>
162
-                </div>
163
-                <div class="card-body-d">
164
-                  <p
165
-                    class="content-d color-text-a"
166
-                  >Sed porttitor lectus nibh, Cras ultricies ligula sed magna dictum porta two.</p>
167
-                  <div class="info-agents color-a">
168
-                    <p>
169
-                      <strong>Phone:</strong> +54 356 945234
170
-                    </p>
171
-                    <p>
172
-                      <strong>Email:</strong> agents@example.com
173
-                    </p>
174
-                  </div>
175
-                </div>
176
-                <div class="card-footer-d">
177
-                  <div class="socials-footer d-flex justify-content-center">
178
-                    <ul class="list-inline">
179
-                      <li class="list-inline-item">
180
-                        <a href="#" class="link-one">
181
-                          <i class="fa fa-facebook" aria-hidden="true"></i>
182
-                        </a>
183
-                      </li>
184
-                      <li class="list-inline-item">
185
-                        <a href="#" class="link-one">
186
-                          <i class="fa fa-twitter" aria-hidden="true"></i>
187
-                        </a>
188
-                      </li>
189
-                      <li class="list-inline-item">
190
-                        <a href="#" class="link-one">
191
-                          <i class="fa fa-instagram" aria-hidden="true"></i>
192
-                        </a>
193
-                      </li>
194
-                      <li class="list-inline-item">
195
-                        <a href="#" class="link-one">
196
-                          <i class="fa fa-pinterest-p" aria-hidden="true"></i>
197
-                        </a>
198
-                      </li>
199
-                      <li class="list-inline-item">
200
-                        <a href="#" class="link-one">
201
-                          <i class="fa fa-dribbble" aria-hidden="true"></i>
202
-                        </a>
203
-                      </li>
204
-                    </ul>
205
-                  </div>
206
-                </div>
207
-              </div>
208
-            </div>
209
-          </div>
210
-        </div>
211
-      </div>
212
-    </section>
213
-  </div>
214
-</template>
215
-<script>
216
-export default {};
217
-</script>

+ 0
- 2
src/components/home/homePage.vue Wyświetl plik

16
 import CarouselSection from './carouselSection.vue';
16
 import CarouselSection from './carouselSection.vue';
17
 import ServiceSection from './serviceSection.vue';
17
 import ServiceSection from './serviceSection.vue';
18
 import PropertySection from './propertySection.vue';
18
 import PropertySection from './propertySection.vue';
19
-import AgentSection from './agentSection.vue';
20
 import NewsSection from './newsSection.vue';
19
 import NewsSection from './newsSection.vue';
21
 import TestimonialSection from './testimonialSection.vue';
20
 import TestimonialSection from './testimonialSection.vue';
22
 
21
 
25
     CarouselSection,
24
     CarouselSection,
26
     ServiceSection,
25
     ServiceSection,
27
     PropertySection,
26
     PropertySection,
28
-    AgentSection,
29
     NewsSection,
27
     NewsSection,
30
     TestimonialSection,
28
     TestimonialSection,
31
   },
29
   },

+ 2
- 4
src/components/home/propertySection.vue Wyświetl plik

9
                 <h2 class="title-a">Latest Properties</h2>
9
                 <h2 class="title-a">Latest Properties</h2>
10
               </div>
10
               </div>
11
               <div class="title-link">
11
               <div class="title-link">
12
-                <a href="property-grid.html">
13
-                  All Property
14
-                  <span class="ion-ios-arrow-forward"></span>
15
-                </a>
12
+                <router-link to="/timeshare/buy">All Properties</router-link>
13
+                <span class="ion-ios-arrow-forward"></span>
16
               </div>
14
               </div>
17
             </div>
15
             </div>
18
           </div>
16
           </div>

+ 18
- 27
src/components/home/serviceSection.vue Wyświetl plik

16
             <div class="card-box-c foo">
16
             <div class="card-box-c foo">
17
               <div class="card-header-c d-flex">
17
               <div class="card-header-c d-flex">
18
                 <div class="card-box-ico">
18
                 <div class="card-box-ico">
19
-                  <span class="fa fa-gamepad"></span>
19
+                  <span class="fa fa-umbrella"></span>
20
                 </div>
20
                 </div>
21
                 <div class="card-title-c align-self-center">
21
                 <div class="card-title-c align-self-center">
22
-                  <h2 class="title-c">Lifestyle</h2>
22
+                  <h2 class="title-c">Timeshare</h2>
23
                 </div>
23
                 </div>
24
               </div>
24
               </div>
25
               <div class="card-body-c">
25
               <div class="card-body-c">
26
                 <p class="content-c">
26
                 <p class="content-c">
27
-                  Sed porttitor lectus nibh. Cras ultricies ligula sed magna dictum porta. Praesent sapien massa,
28
-                  convallis a pellentesque
29
-                  nec, egestas non nisi.
27
+                  Need to sell your timeshare, or thinking of buying a holiday week?
28
+                  <br />Get in touch to meet the professionals that has made timeshare resales a pleasure...
30
                 </p>
29
                 </p>
31
               </div>
30
               </div>
32
               <div class="card-footer-c">
31
               <div class="card-footer-c">
33
-                <a href="#" class="link-c link-icon">
34
-                  Read more
35
-                  <span class="ion-ios-arrow-forward"></span>
36
-                </a>
32
+                <router-link to="/timeshare/buy">Read more</router-link>
33
+                <span class="ion-ios-arrow-forward"></span>
37
               </div>
34
               </div>
38
             </div>
35
             </div>
39
           </div>
36
           </div>
41
             <div class="card-box-c foo">
38
             <div class="card-box-c foo">
42
               <div class="card-header-c d-flex">
39
               <div class="card-header-c d-flex">
43
                 <div class="card-box-ico">
40
                 <div class="card-box-ico">
44
-                  <span class="fa fa-usd"></span>
41
+                  <span class="fa fa-home"></span>
45
                 </div>
42
                 </div>
46
                 <div class="card-title-c align-self-center">
43
                 <div class="card-title-c align-self-center">
47
-                  <h2 class="title-c">Loans</h2>
44
+                  <h2 class="title-c">Residential</h2>
48
                 </div>
45
                 </div>
49
               </div>
46
               </div>
50
               <div class="card-body-c">
47
               <div class="card-body-c">
51
                 <p class="content-c">
48
                 <p class="content-c">
52
-                  Nulla porttitor accumsan tincidunt. Curabitur aliquet quam id dui posuere blandit. Mauris blandit
53
-                  aliquet elit, eget tincidunt
54
-                  nibh pulvinar a.
49
+                  Find your dream home or looking to sell your residential property, instead?
50
+                  <br />We pride ourself on professionalism and the right expertise...
55
                 </p>
51
                 </p>
56
               </div>
52
               </div>
57
               <div class="card-footer-c">
53
               <div class="card-footer-c">
58
-                <a href="#" class="link-c link-icon">
59
-                  Read more
60
-                  <span class="ion-ios-arrow-forward"></span>
61
-                </a>
54
+                <router-link to="/property/Residential/Search">Read more</router-link>
55
+                <span class="ion-ios-arrow-forward"></span>
62
               </div>
56
               </div>
63
             </div>
57
             </div>
64
           </div>
58
           </div>
66
             <div class="card-box-c foo">
60
             <div class="card-box-c foo">
67
               <div class="card-header-c d-flex">
61
               <div class="card-header-c d-flex">
68
                 <div class="card-box-ico">
62
                 <div class="card-box-ico">
69
-                  <span class="fa fa-home"></span>
63
+                  <span class="fa fa-building-o"></span>
70
                 </div>
64
                 </div>
71
                 <div class="card-title-c align-self-center">
65
                 <div class="card-title-c align-self-center">
72
-                  <h2 class="title-c">Sell</h2>
66
+                  <h2 class="title-c">Commercial</h2>
73
                 </div>
67
                 </div>
74
               </div>
68
               </div>
75
               <div class="card-body-c">
69
               <div class="card-body-c">
76
                 <p class="content-c">
70
                 <p class="content-c">
77
-                  Sed porttitor lectus nibh. Cras ultricies ligula sed magna dictum porta. Praesent sapien massa,
78
-                  convallis a pellentesque
79
-                  nec, egestas non nisi.
71
+                  Want to generate profit through leasing or rental?
72
+                  <br />Allow us to act as the mediator between landlord and tenants...
80
                 </p>
73
                 </p>
81
               </div>
74
               </div>
82
               <div class="card-footer-c">
75
               <div class="card-footer-c">
83
-                <a href="#" class="link-c link-icon">
84
-                  Read more
85
-                  <span class="ion-ios-arrow-forward"></span>
86
-                </a>
76
+                <router-link to="/property/Commercial/Search">Read more</router-link>
77
+                <span class="ion-ios-arrow-forward"></span>
87
               </div>
78
               </div>
88
             </div>
79
             </div>
89
           </div>
80
           </div>

+ 81
- 12
src/components/home/testimonialSection.vue Wyświetl plik

1
 <template>
1
 <template>
2
+  <!-- eslint-disable max-len -->
2
   <div>
3
   <div>
3
     <section class="section-testimonials section-t8 nav-arrow-a">
4
     <section class="section-testimonials section-t8 nav-arrow-a">
4
       <div class="container">
5
       <div class="container">
17
               <div class="row">
18
               <div class="row">
18
                 <div class="col-sm-12 col-md-6">
19
                 <div class="col-sm-12 col-md-6">
19
                   <div class="testimonial-img">
20
                   <div class="testimonial-img">
20
-                    <img src="img/testimonial-1.jpg" alt class="img-fluid" />
21
+                    <router-link to="/resort/csp">
22
+                      <img src="img/testimonial-1.png" alt class="CrystalSprings" />
23
+                    </router-link>
21
                   </div>
24
                   </div>
22
                 </div>
25
                 </div>
23
                 <div class="col-sm-12 col-md-6">
26
                 <div class="col-sm-12 col-md-6">
26
                   </div>
29
                   </div>
27
                   <div class="testimonials-content">
30
                   <div class="testimonials-content">
28
                     <p class="testimonial-text">
31
                     <p class="testimonial-text">
29
-                      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Omnis, cupiditate ea nam praesentium
30
-                      debitis hic ber quibusdam
31
-                      voluptatibus officia expedita corpori.
32
+                      Loved my stay at Crystal Springs. Appreciated the proffesionalism and friendliness of the staff.
33
+                      Thoroughly enjoyed the hike, game drive, jaccuzzi, heated pool, steam room and even the trampolines. Our chalet was in stellar condition.
34
+                      The heaters, extra blankets and fire place ensured we kept warm and toasty during the cold evenings.
35
+                      The food at the restaurant was delicious, and the experience was made even better by the friendly waitress who served us. Arriving to find Ferreiro Roche and Champagne in our chalet was the cherry on top.
36
+                      I would wholeheartedly recommend this resort any day. Well done Crystal Springs!
32
                     </p>
37
                     </p>
33
                   </div>
38
                   </div>
34
                   <div class="testimonial-author-box">
39
                   <div class="testimonial-author-box">
35
-                    <img src="img/mini-testimonial-1.jpg" alt class="testimonial-avatar" />
36
-                    <h5 class="testimonial-author">Albert & Erika</h5>
40
+                    <eva-icon name="people-outline" fill="#60CBEB"></eva-icon>
41
+                    <h5 class="testimonial-author">Anati Bacela</h5>
42
+                    <p>- on visiting Crystal Springs</p>
37
                   </div>
43
                   </div>
38
                 </div>
44
                 </div>
39
               </div>
45
               </div>
44
               <div class="row">
50
               <div class="row">
45
                 <div class="col-sm-12 col-md-6">
51
                 <div class="col-sm-12 col-md-6">
46
                   <div class="testimonial-img">
52
                   <div class="testimonial-img">
47
-                    <img src="img/testimonial-2.jpg" alt class="img-fluid" />
53
+                    <router-link to="/resort/nl">
54
+                      <img src="img/testimonial-2.png" alt class="Ngwenya Lodge" />
55
+                    </router-link>
48
                   </div>
56
                   </div>
49
                 </div>
57
                 </div>
50
                 <div class="col-sm-12 col-md-6">
58
                 <div class="col-sm-12 col-md-6">
53
                   </div>
61
                   </div>
54
                   <div class="testimonials-content">
62
                   <div class="testimonials-content">
55
                     <p class="testimonial-text">
63
                     <p class="testimonial-text">
56
-                      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Omnis, cupiditate ea nam praesentium
57
-                      debitis hic ber quibusdam
58
-                      voluptatibus officia expedita corpori.
64
+                      We have been going to Ngwenya for 25 years or more. every year we have had wonderful sightings from our verandah. To me it is paradise on earth and we never grow tired of it.
65
+                      Wonderful play area for people of all ages, the gardens are well kept, the restaurant is good and the chalets are well maintained.
66
+                      Most of all what I love about Ngwenya is it's peaceful and tranquil atmosphere and the close proximity to our amazing wild life We will continue going for many more years
59
                     </p>
67
                     </p>
60
                   </div>
68
                   </div>
61
                   <div class="testimonial-author-box">
69
                   <div class="testimonial-author-box">
62
-                    <img src="img/mini-testimonial-2.jpg" alt class="testimonial-avatar" />
63
-                    <h5 class="testimonial-author">Pablo & Emma</h5>
70
+                    <eva-icon name="people-outline" fill="#60CBEB"></eva-icon>
71
+                    <h5 class="testimonial-author">Linda Lewis</h5>
72
+                    <p>- on visiting Ngwenya Lodge</p>
73
+                  </div>
74
+                </div>
75
+              </div>
76
+            </div>
77
+          </div>
78
+          <div class="carousel-item-a">
79
+            <div class="testimonials-box">
80
+              <div class="row">
81
+                <div class="col-sm-12 col-md-6">
82
+                  <div class="testimonial-img">
83
+                    <router-link to="/resort/mnr">
84
+                      <img src="img/testimonial-3.2.jpg" alt class="Mabalingwe Nature Reserve" />
85
+                    </router-link>
86
+                  </div>
87
+                </div>
88
+                <div class="col-sm-12 col-md-6">
89
+                  <div class="testimonial-ico">
90
+                    <span class="ion-ios-quote"></span>
91
+                  </div>
92
+                  <div class="testimonials-content">
93
+                    <p class="testimonial-text">
94
+                      Great experience, I loved the place, so amazing and we saw many more animals. Had different kinds of visitors everyday (Impala, wild pig, monkeys, birds and more).
95
+                      The nature was great with all mountains and valleys and lakes. Every corner had a new moment. The staff was very friendly and helpful at all times.
96
+                      Thanks to the restaurant staff for helping me organizing my Husband's birthday surprise dinner. Best memories ever. Looking forward to my next visit with friends and more family members.
97
+                    </p>
98
+                  </div>
99
+                  <div class="testimonial-author-box">
100
+                    <eva-icon name="people-outline" fill="#60CBEB"></eva-icon>
101
+                    <h5 class="testimonial-author">Sophie Adewale</h5>
102
+                    <p>- on visiting Mabalingwe Nature Reserve</p>
103
+                  </div>
104
+                </div>
105
+              </div>
106
+            </div>
107
+          </div>
108
+          <div class="carousel-item-a">
109
+            <div class="testimonials-box">
110
+              <div class="row">
111
+                <div class="col-sm-12 col-md-6">
112
+                  <div class="testimonial-img">
113
+                    <router-link to="/resort/le">
114
+                      <img src="img/testimonial-4.png" alt class="Little Eden" />
115
+                    </router-link>
116
+                  </div>
117
+                </div>
118
+                <div class="col-sm-12 col-md-6">
119
+                  <div class="testimonial-ico">
120
+                    <span class="ion-ios-quote"></span>
121
+                  </div>
122
+                  <div class="testimonials-content">
123
+                    <p class="testimonial-text">
124
+                      Everything!! Little Eden is like a secret jewel no one but yourself and your very best
125
+                      friends should now about but at the same time its like discovering something so
126
+                      awesome you can never keep it to yourslef. You have to tell the world!!!
127
+                    </p>
128
+                  </div>
129
+                  <div class="testimonial-author-box">
130
+                    <eva-icon name="people-outline" fill="#60CBEB"></eva-icon>
131
+                    <h5 class="testimonial-author">Sisna & Andries Venter</h5>
132
+                    <p>- on visiting Little Eden</p>
64
                   </div>
133
                   </div>
65
                 </div>
134
                 </div>
66
               </div>
135
               </div>

+ 10
- 4
src/components/misc/contactUs.vue Wyświetl plik

1
 <template>
1
 <template>
2
   <div class="container">
2
   <div class="container">
3
-    <div class="row">
4
-      <div class="col-md-12">
5
-        <h1 class="my-4">Contact Us</h1>
3
+    <section class="intro-single">
4
+      <div class="container">
5
+        <div class="row">
6
+          <div class="col-md-12 col-lg-8">
7
+            <div class="title-single-box">
8
+              <h1 class="title-single" style="text-align:left;">Contact Us</h1>
9
+            </div>
10
+          </div>
11
+        </div>
6
       </div>
12
       </div>
7
-    </div>
13
+    </section>
8
     <div class="map-wrapper">
14
     <div class="map-wrapper">
9
       <div class="map-canvas" id="map-canvas"></div>
15
       <div class="map-canvas" id="map-canvas"></div>
10
       <a
16
       <a

+ 12
- 3
src/components/property/propertyCard.vue Wyświetl plik

19
                   class="link-a"
19
                   class="link-a"
20
                 >{{ currentProperty.shortDescription }}</router-link>
20
                 >{{ currentProperty.shortDescription }}</router-link>
21
               </h4>
21
               </h4>
22
+              <h4 class="card-title-c">
23
+                <router-link :to="`/property/property/${currentProperty.id}`" class="link-a">
24
+                  {{ currentProperty.province }}
25
+                  <br />
26
+                  {{ currentProperty.city }}
27
+                  <br />
28
+                  {{ currentProperty.suburb }}
29
+                </router-link>
30
+              </h4>
22
             </div>
31
             </div>
23
             <div class="card-body-a">
32
             <div class="card-body-a">
24
               <div class="price-box d-flex">
33
               <div class="price-box d-flex">
67
 <script>
76
 <script>
68
 export default {
77
 export default {
69
   props: {
78
   props: {
70
-    properties: Object
71
-  }
79
+    properties: Object,
80
+  },
72
 };
81
 };
73
-</script>
82
+</script>

+ 11
- 7
src/components/property/propertyImage.vue Wyświetl plik

15
     </div>
15
     </div>
16
     <br />
16
     <br />
17
     <div class="form-group row">
17
     <div class="form-group row">
18
-      <div v-for="img in image" class="col-md-2">
18
+      <div v-for="(img, i) in image" class="col-md-2" :key="i">
19
         <img :src="img" style="height:200px; width:150px; object-fit: cover;" />
19
         <img :src="img" style="height:200px; width:150px; object-fit: cover;" />
20
         <br />
20
         <br />
21
         <a class="fa fa-times del" @click="removeImage(key)" />
21
         <a class="fa fa-times del" @click="removeImage(key)" />
27
 
27
 
28
 <script>
28
 <script>
29
 export default {
29
 export default {
30
+  props: {
31
+    loadedImages: Function,
32
+  },
30
   data() {
33
   data() {
31
     return {
34
     return {
32
       images: {},
35
       images: {},
33
-      image: []
36
+      image: [],
34
     };
37
     };
35
   },
38
   },
36
 
39
 
43
       if (!this.images.length) return;
46
       if (!this.images.length) return;
44
 
47
 
45
       this.createImage(this.images);
48
       this.createImage(this.images);
49
+      this.loadedImages(this.image);
46
     },
50
     },
47
 
51
 
48
     createImage(file) {
52
     createImage(file) {
50
         const reader = new FileReader();
54
         const reader = new FileReader();
51
         var vm = this;
55
         var vm = this;
52
 
56
 
53
-        reader.onload = e => {
57
+        reader.onload = (e) => {
54
           vm.image.push(e.target.result);
58
           vm.image.push(e.target.result);
55
           console.log(vm.image);
59
           console.log(vm.image);
56
         };
60
         };
63
       this.images.splice(key, 1);
67
       this.images.splice(key, 1);
64
 
68
 
65
       if (!this.image.length) {
69
       if (!this.image.length) {
66
-        this.$refs.im.value = "";
70
+        this.$refs.im.value = '';
67
       }
71
       }
68
-    }
69
-  }
72
+    },
73
+  },
70
 };
74
 };
71
-</script>
75
+</script>

+ 180
- 282
src/components/property/propertyPage.vue Wyświetl plik

1
 <template>
1
 <template>
2
-  <div>
2
+  <!-- eslint-disable max-len -->
3
+  <div v-if="property">
3
     <section class="intro-single">
4
     <section class="intro-single">
4
       <div class="container">
5
       <div class="container">
5
         <div class="row">
6
         <div class="row">
6
           <div class="col-md-12 col-lg-8">
7
           <div class="col-md-12 col-lg-8">
7
             <div class="title-single-box">
8
             <div class="title-single-box">
8
-              <h1 class="title-single">{{ Property.shortDescription }}</h1>
9
-              <span class="color-text-a">{{ Property.suburb }}</span>
9
+              <h1 class="title-single">{{ property.shortDescription }}</h1>
10
             </div>
10
             </div>
11
           </div>
11
           </div>
12
-          <!-- <div class="col-md-12 col-lg-4">
13
-            <nav aria-label="breadcrumb" class="breadcrumb-box d-flex justify-content-lg-end">
14
-              <ol class="breadcrumb">
15
-                <li class="breadcrumb-item">
16
-                  <a href="index.html">Home</a>
17
-                </li>
18
-                <li class="breadcrumb-item">
19
-                  <a href="property-grid.html">Properties</a>
20
-                </li>
21
-                <li class="breadcrumb-item active" aria-current="page">304 Blaster Up</li>
22
-              </ol>
23
-            </nav>
24
-          </div>-->
25
         </div>
12
         </div>
26
       </div>
13
       </div>
27
     </section>
14
     </section>
28
     <!--/ Intro Single End /-->
15
     <!--/ Intro Single End /-->
29
 
16
 
30
-    <!--/ Property Single Star /-->
17
+    <!--/ property Single Star /-->
31
     <section class="property-single nav-arrow-b">
18
     <section class="property-single nav-arrow-b">
32
       <div class="container">
19
       <div class="container">
20
+        <div class="row">
21
+          <lightBox
22
+            :thumbnails="propertyImages"
23
+            :largeImages="propertyImages"
24
+            :caption="false"
25
+            class="lightBox"
26
+          />
27
+        </div>
33
         <div class="row">
28
         <div class="row">
34
           <div class="col-sm-12">
29
           <div class="col-sm-12">
35
-            <div id="property-single-carousel" class="owl-carousel owl-arrow gallery-property">
36
-              <div class="carousel-item-b">
37
-                <img
38
-                  :src="propertyImages[0]"
39
-                  style="height:800px; width:1200px; object-fit: cover;"
40
-                />
41
-              </div>
42
-              <div class="carousel-item-b">
43
-                <img
44
-                  :src="propertyImages[1]"
45
-                  style="height:800px; width:1200px; object-fit: cover;"
46
-                />
47
-              </div>
48
-              <div class="carousel-item-b">
49
-                <img
50
-                  :src="propertyImages[2]"
51
-                  style="height:800px; width:1200px; object-fit: cover;"
52
-                />
53
-              </div>
54
-              <div class="carousel-item-b">
55
-                <img
56
-                  :src="propertyImages[3]"
57
-                  style="height:800px; width:1200px; object-fit: cover;"
58
-                />
59
-              </div>
60
-            </div>
61
             <div class="row justify-content-between">
30
             <div class="row justify-content-between">
62
               <div class="col-md-7 col-lg-7 section-md-t3">
31
               <div class="col-md-7 col-lg-7 section-md-t3">
63
                 <div class="row">
32
                 <div class="row">
67
                     </div>
36
                     </div>
68
                   </div>
37
                   </div>
69
                 </div>
38
                 </div>
70
-                <div class="property-description" v-html="Property.description" />
71
-                <div v-for="display in Property.displayData">
39
+                <div class="property-description" v-html="property.description" />
40
+                <div v-for="display in property.displayData" :key="display.id">
72
                   <div class="row section-t3">
41
                   <div class="row section-t3">
73
                     <div class="col-sm-12">
42
                     <div class="col-sm-12">
74
                       <div class="title-box-d">
43
                       <div class="title-box-d">
77
                     </div>
46
                     </div>
78
                   </div>
47
                   </div>
79
                   <div class="summary-list">
48
                   <div class="summary-list">
80
-                    <ul class="list" v-for="item in display.values">
49
+                    <ul class="list" v-for="item in display.values" :key="item.id">
81
                       <li class="d-flex justify-content-between">
50
                       <li class="d-flex justify-content-between">
82
                         <strong>{{ item.name }}:</strong>
51
                         <strong>{{ item.name }}:</strong>
83
                         <span v-html="item.value"></span>
52
                         <span v-html="item.value"></span>
93
                       <span class="ion-money">R</span>
62
                       <span class="ion-money">R</span>
94
                     </div>
63
                     </div>
95
                     <div class="card-title-c align-self-center">
64
                     <div class="card-title-c align-self-center">
96
-                      <h5 class="title-c">{{ Property.price }}</h5>
65
+                      <h5 class="title-c">{{ formatPrice(property.price) }}</h5>
97
                     </div>
66
                     </div>
98
                   </div>
67
                   </div>
99
                 </div>
68
                 </div>
100
                 <div class="property-summary">
69
                 <div class="property-summary">
101
-                  <!-- <div class="row">
70
+                  <div class="row">
102
                     <div class="col-sm-12">
71
                     <div class="col-sm-12">
103
                       <div class="title-box-d section-t4">
72
                       <div class="title-box-d section-t4">
104
-                        <h3 class="title-d">Quick Summary</h3>
73
+                        <h3 class="title-d">Summary</h3>
105
                       </div>
74
                       </div>
106
                     </div>
75
                     </div>
107
                   </div>
76
                   </div>
109
                     <ul class="list">
78
                     <ul class="list">
110
                       <li class="d-flex justify-content-between">
79
                       <li class="d-flex justify-content-between">
111
                         <strong>Property ID:</strong>
80
                         <strong>Property ID:</strong>
112
-                        <span>1134</span>
113
-                      </li>
114
-                      <li class="d-flex justify-content-between">
115
-                        <strong>Location:</strong>
116
-                        <span>Chicago, IL 606543</span>
117
-                      </li>
118
-                      <li class="d-flex justify-content-between">
119
-                        <strong>Property Type:</strong>
120
-                        <span>House</span>
81
+                        <span>{{ property.id }}</span>
121
                       </li>
82
                       </li>
122
                       <li class="d-flex justify-content-between">
83
                       <li class="d-flex justify-content-between">
123
                         <strong>Status:</strong>
84
                         <strong>Status:</strong>
124
-                        <span>Sale</span>
125
-                      </li>
126
-                      <li class="d-flex justify-content-between">
127
-                        <strong>Area:</strong>
128
-                        <span>
129
-                          340m
130
-                          <sup>2</sup>
131
-                        </span>
132
-                      </li>
133
-                      <li class="d-flex justify-content-between">
134
-                        <strong>Beds:</strong>
135
-                        <span>4</span>
85
+                        <span v-if="property.isSale">Sale</span>
86
+                        <span v-else>Rental</span>
136
                       </li>
87
                       </li>
137
                       <li class="d-flex justify-content-between">
88
                       <li class="d-flex justify-content-between">
138
-                        <strong>Baths:</strong>
139
-                        <span>2</span>
140
-                      </li>
141
-                      <li class="d-flex justify-content-between">
142
-                        <strong>Garage:</strong>
143
-                        <span>1</span>
144
-                      </li>
145
-                    </ul>
146
-                  </div>-->
147
-                </div>
148
-              </div>
149
-            </div>
150
-          </div>
151
-          <div class="col-md-10 offset-md-1">
152
-            <ul class="nav nav-pills-a nav-pills mb-3 section-t3" id="pills-tab" role="tablist">
153
-              <li class="nav-item">
154
-                <a
155
-                  class="nav-link active"
156
-                  id="pills-video-tab"
157
-                  data-toggle="pill"
158
-                  href="#pills-video"
159
-                  role="tab"
160
-                  aria-controls="pills-video"
161
-                  aria-selected="true"
162
-                >Video</a>
163
-              </li>
164
-              <li class="nav-item">
165
-                <a
166
-                  class="nav-link"
167
-                  id="pills-plans-tab"
168
-                  data-toggle="pill"
169
-                  href="#pills-plans"
170
-                  role="tab"
171
-                  aria-controls="pills-plans"
172
-                  aria-selected="false"
173
-                >Floor Plans</a>
174
-              </li>
175
-              <li class="nav-item">
176
-                <a
177
-                  class="nav-link"
178
-                  id="pills-map-tab"
179
-                  data-toggle="pill"
180
-                  href="#pills-map"
181
-                  role="tab"
182
-                  aria-controls="pills-map"
183
-                  aria-selected="false"
184
-                >Ubication</a>
185
-              </li>
186
-            </ul>
187
-            <div class="tab-content" id="pills-tabContent">
188
-              <div
189
-                class="tab-pane fade show active"
190
-                id="pills-video"
191
-                role="tabpanel"
192
-                aria-labelledby="pills-video-tab"
193
-              >
194
-                <iframe
195
-                  src="https://player.vimeo.com/video/73221098"
196
-                  width="100%"
197
-                  height="460"
198
-                  frameborder="0"
199
-                  webkitallowfullscreen
200
-                  mozallowfullscreen
201
-                  allowfullscreen
202
-                ></iframe>
203
-              </div>
204
-              <div
205
-                class="tab-pane fade"
206
-                id="pills-plans"
207
-                role="tabpanel"
208
-                aria-labelledby="pills-plans-tab"
209
-              >
210
-                <img src="img/plan2.jpg" alt class="img-fluid" />
211
-              </div>
212
-              <div
213
-                class="tab-pane fade"
214
-                id="pills-map"
215
-                role="tabpanel"
216
-                aria-labelledby="pills-map-tab"
217
-              >
218
-                <iframe
219
-                  src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3022.1422937950147!2d-73.98731968482413!3d40.75889497932681!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x89c25855c6480299%3A0x55194ec5a1ae072e!2sTimes+Square!5e0!3m2!1ses-419!2sve!4v1510329142834"
220
-                  width="100%"
221
-                  height="460"
222
-                  frameborder="0"
223
-                  style="border:0"
224
-                  allowfullscreen
225
-                ></iframe>
226
-              </div>
227
-            </div>
228
-          </div>
229
-          <div class="col-md-12">
230
-            <div class="row section-t3">
231
-              <div class="col-sm-12">
232
-                <div class="title-box-d">
233
-                  <h3 class="title-d">Contact Agent</h3>
234
-                </div>
235
-              </div>
236
-            </div>
237
-            <div class="row">
238
-              <div class="col-md-6 col-lg-4">
239
-                <img src="img/agent-4.jpg" alt class="img-fluid" />
240
-              </div>
241
-              <div class="col-md-6 col-lg-4">
242
-                <div class="property-agent">
243
-                  <h4 class="title-agent">Anabella Geller</h4>
244
-                  <p class="color-text-a">
245
-                    Nulla porttitor accumsan tincidunt. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet
246
-                    dui. Quisque velit nisi,
247
-                    pretium ut lacinia in, elementum id enim.
248
-                  </p>
249
-                  <ul class="list-unstyled">
250
-                    <li class="d-flex justify-content-between">
251
-                      <strong>Phone:</strong>
252
-                      <span class="color-text-a">(222) 4568932</span>
253
-                    </li>
254
-                    <li class="d-flex justify-content-between">
255
-                      <strong>Mobile:</strong>
256
-                      <span class="color-text-a">777 287 378 737</span>
257
-                    </li>
258
-                    <li class="d-flex justify-content-between">
259
-                      <strong>Email:</strong>
260
-                      <span class="color-text-a">annabella@example.com</span>
261
-                    </li>
262
-                    <li class="d-flex justify-content-between">
263
-                      <strong>Skype:</strong>
264
-                      <span class="color-text-a">Annabela.ge</span>
265
-                    </li>
266
-                  </ul>
267
-                  <div class="socials-a">
268
-                    <ul class="list-inline">
269
-                      <li class="list-inline-item">
270
-                        <a href="#">
271
-                          <i class="fa fa-facebook" aria-hidden="true"></i>
272
-                        </a>
273
-                      </li>
274
-                      <li class="list-inline-item">
275
-                        <a href="#">
276
-                          <i class="fa fa-twitter" aria-hidden="true"></i>
277
-                        </a>
278
-                      </li>
279
-                      <li class="list-inline-item">
280
-                        <a href="#">
281
-                          <i class="fa fa-instagram" aria-hidden="true"></i>
282
-                        </a>
283
-                      </li>
284
-                      <li class="list-inline-item">
285
-                        <a href="#">
286
-                          <i class="fa fa-pinterest-p" aria-hidden="true"></i>
287
-                        </a>
288
-                      </li>
289
-                      <li class="list-inline-item">
290
-                        <a href="#">
291
-                          <i class="fa fa-dribbble" aria-hidden="true"></i>
292
-                        </a>
89
+                        <strong>Address:</strong>
90
+                        <span
91
+                          v-html="formatAddress(property.addressLine1) + formatAddress(property.addressLine2) + formatAddress(property.addressLine3) + formatAddress(property.suburb.description) + formatAddress(property.city.description) + formatAddress(property.province.description) "
92
+                        ></span>
293
                       </li>
93
                       </li>
294
                     </ul>
94
                     </ul>
295
                   </div>
95
                   </div>
296
                 </div>
96
                 </div>
297
-              </div>
298
-              <div class="col-md-12 col-lg-4">
299
-                <div class="property-contact">
300
-                  <form class="form-a">
301
-                    <div class="row">
302
-                      <div class="col-md-12 mb-1">
303
-                        <div class="form-group">
304
-                          <input
305
-                            type="text"
306
-                            class="form-control form-control-lg form-control-a"
307
-                            id="inputName"
308
-                            placeholder="Name *"
309
-                            required
310
-                          />
311
-                        </div>
312
-                      </div>
313
-                      <div class="col-md-12 mb-1">
314
-                        <div class="form-group">
315
-                          <input
316
-                            type="email"
317
-                            class="form-control form-control-lg form-control-a"
318
-                            id="inputEmail1"
319
-                            placeholder="Email *"
320
-                            required
321
-                          />
322
-                        </div>
97
+                <div class="col-md-12">
98
+                  <div class="row section-t3">
99
+                    <div class="col-sm-12">
100
+                      <div class="title-box-d">
101
+                        <h3 class="title-d">Contact Agent</h3>
323
                       </div>
102
                       </div>
324
-                      <div class="col-md-12 mb-1">
325
-                        <div class="form-group">
326
-                          <textarea
327
-                            id="textMessage"
328
-                            class="form-control"
329
-                            placeholder="Comment *"
330
-                            name="message"
331
-                            cols="45"
332
-                            rows="8"
333
-                            required
334
-                          ></textarea>
103
+                    </div>
104
+                  </div>
105
+                  <div class="row">
106
+                    <div class="col-md-12">
107
+                      <img src="img/agent-4.jpg" alt class="img-fluid" />
108
+                    </div>
109
+                  </div>
110
+                  <div class="row">
111
+                    <div class="col-md-12">
112
+                      <div class="property-agent">
113
+                        <h4 class="title-agent">Anabella Geller</h4>
114
+                        <p class="color-text-a">
115
+                          Nulla porttitor accumsan tincidunt. Vestibulum ac diam sit amet quam vehicula elementum sed sit amet
116
+                          dui. Quisque velit nisi,
117
+                          pretium ut lacinia in, elementum id enim.
118
+                        </p>
119
+                        <ul class="list-unstyled">
120
+                          <li class="d-flex justify-content-between">
121
+                            <strong>Phone:</strong>
122
+                            <span class="color-text-a">(222) 4568932</span>
123
+                          </li>
124
+                          <li class="d-flex justify-content-between">
125
+                            <strong>Mobile:</strong>
126
+                            <span class="color-text-a">777 287 378 737</span>
127
+                          </li>
128
+                          <li class="d-flex justify-content-between">
129
+                            <strong>Email:</strong>
130
+                            <span class="color-text-a">annabella@example.com</span>
131
+                          </li>
132
+                          <li class="d-flex justify-content-between">
133
+                            <strong>Skype:</strong>
134
+                            <span class="color-text-a">Annabela.ge</span>
135
+                          </li>
136
+                        </ul>
137
+                        <div class="socials-a">
138
+                          <ul class="list-inline">
139
+                            <li class="list-inline-item">
140
+                              <a href="#">
141
+                                <i class="fa fa-facebook" aria-hidden="true"></i>
142
+                              </a>
143
+                            </li>
144
+                            <li class="list-inline-item">
145
+                              <a href="#">
146
+                                <i class="fa fa-twitter" aria-hidden="true"></i>
147
+                              </a>
148
+                            </li>
149
+                            <li class="list-inline-item">
150
+                              <a href="#">
151
+                                <i class="fa fa-instagram" aria-hidden="true"></i>
152
+                              </a>
153
+                            </li>
154
+                            <li class="list-inline-item">
155
+                              <a href="#">
156
+                                <i class="fa fa-pinterest-p" aria-hidden="true"></i>
157
+                              </a>
158
+                            </li>
159
+                            <li class="list-inline-item">
160
+                              <a href="#">
161
+                                <i class="fa fa-dribbble" aria-hidden="true"></i>
162
+                              </a>
163
+                            </li>
164
+                          </ul>
335
                         </div>
165
                         </div>
336
                       </div>
166
                       </div>
337
-                      <div class="col-md-12">
338
-                        <button type="submit" class="btn btn-a">Send Message</button>
167
+                    </div>
168
+                  </div>
169
+                  <div class="row">
170
+                    <div class="col-md-12">
171
+                      <div class="property-contact">
172
+                        <form class="form-a">
173
+                          <div class="row">
174
+                            <div class="col-md-12 mb-1">
175
+                              <div class="form-group">
176
+                                <input
177
+                                  type="text"
178
+                                  class="form-control form-control-lg form-control-a"
179
+                                  id="inputName"
180
+                                  placeholder="Name *"
181
+                                  required
182
+                                />
183
+                              </div>
184
+                            </div>
185
+                            <div class="col-md-12 mb-1">
186
+                              <div class="form-group">
187
+                                <input
188
+                                  type="email"
189
+                                  class="form-control form-control-lg form-control-a"
190
+                                  id="inputEmail1"
191
+                                  placeholder="Email *"
192
+                                  required
193
+                                />
194
+                              </div>
195
+                            </div>
196
+                            <div class="col-md-12 mb-1">
197
+                              <div class="form-group">
198
+                                <textarea
199
+                                  id="textMessage"
200
+                                  class="form-control"
201
+                                  placeholder="Comment *"
202
+                                  name="message"
203
+                                  cols="45"
204
+                                  rows="8"
205
+                                  required
206
+                                ></textarea>
207
+                              </div>
208
+                            </div>
209
+                            <div class="col-md-12">
210
+                              <button type="submit" class="btn btn-a">Send Message</button>
211
+                            </div>
212
+                          </div>
213
+                        </form>
339
                       </div>
214
                       </div>
340
                     </div>
215
                     </div>
341
-                  </form>
216
+                  </div>
342
                 </div>
217
                 </div>
343
               </div>
218
               </div>
344
             </div>
219
             </div>
350
 </template>
225
 </template>
351
 
226
 
352
 <script>
227
 <script>
228
+import { mapState, mapActions } from 'vuex';
229
+import lightBox from '../shared/lightBoxGallery.vue';
230
+
353
 export default {
231
 export default {
354
-  name: "Property",
232
+  name: 'property',
233
+  components: {
234
+    lightBox,
235
+  },
355
   data() {
236
   data() {
356
-    return {
357
-      Property: {},
358
-      propertyImages: []
359
-    };
237
+    return {};
238
+  },
239
+  mounted() {
240
+    this.getProperty(Object.assign({}, { id: this.$route.params.id }));
241
+    this.getPropertyImages(Object.assign({}, { id: this.$route.params.id }));
242
+  },
243
+  computed: {
244
+    ...mapState('property', ['property', 'propertyImages']),
245
+  },
246
+  methods: {
247
+    ...mapActions('property', ['getProperty', 'getPropertyImages']),
248
+    formatPrice(value) {
249
+      const val = (value / 1).toFixed(2);
250
+      return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
251
+    },
252
+    formatAddress(value) {
253
+      if (value !== '') {
254
+        return `${value}<br/>`;
255
+      }
256
+      return '';
257
+    },
360
   },
258
   },
361
-  created() {
362
-    const axios = require("axios");
363
-    axios
364
-      .get(`http://localhost:57260/Property/Property/${this.$route.params.id}`)
365
-      .then(response => (this.Property = response.data));
366
-
367
-    axios
368
-      .get(
369
-        `http://localhost:57260/property/PropertyImage/getpropertyimages/${this.$route.params.id}`
370
-      )
371
-      .then(response => (this.propertyImages = response.data));
372
-  }
373
 };
259
 };
374
 </script>
260
 </script>
261
+
262
+<style lang ="scss">
263
+.light-box {
264
+  &__thumbnail {
265
+    margin: 20px;
266
+    width: 200px;
267
+  }
268
+}
269
+img {
270
+  max-width: 100%;
271
+}
272
+</style>

+ 148
- 0
src/components/property/propertySearchFields.vue Wyświetl plik

1
+<template>
2
+  <div>
3
+    <div class="col-md-6 mb-2">
4
+      <div class="form-group">
5
+        <label for="city">For:</label>
6
+        <select
7
+          class="form-control form-control-lg form-control-a"
8
+          id="forSelector"
9
+          v-model="selectedType"
10
+          @change="TypeSelected"
11
+        >
12
+          <option value="Sale">Sale</option>
13
+          <option value="Rent">Rent</option>
14
+        </select>
15
+      </div>
16
+      <div class="form-group" v-if="propertyType === 'Residential'">
17
+        <label for="city">Property Type</label>
18
+        <select
19
+          class="form-control form-control-lg form-control-a"
20
+          id="forSelector"
21
+          v-model="selectedPropertyTypeRes"
22
+          @change="PropertyTypeSelected"
23
+        >
24
+          <option>All</option>
25
+          <option
26
+            v-for="(propertyType, i) in propertyTypesRes"
27
+            :key="i"
28
+          >{{ propertyType.description }}</option>
29
+        </select>
30
+      </div>
31
+      <div v-else class="form-group">
32
+        <label for="city">Property Type</label>
33
+        <select
34
+          class="form-control form-control-lg form-control-a"
35
+          id="forSelector"
36
+          v-model="selectedPropertyTypeCom"
37
+          @change="PropertyTypeSelected"
38
+        >
39
+          <option>All</option>
40
+          <option
41
+            v-for="(propertyType, i) in propertyTypesCom"
42
+            :key="i"
43
+          >{{ propertyType.description }}</option>
44
+        </select>
45
+      </div>
46
+      <div class="form-group">
47
+        <label for="city">Provice</label>
48
+        <select
49
+          class="form-control form-control-lg form-control-a"
50
+          id="provinceselector"
51
+          @change="ProvinceSelected"
52
+          v-model="selectedProvince"
53
+        >
54
+          <option>All</option>
55
+          <option v-for="(province, i) in provinces" :key="i">{{ province.description }}</option>
56
+        </select>
57
+      </div>
58
+    </div>
59
+    <div class="col-md-6 mb-2">
60
+      <div class="form-group">
61
+        <label for="city">City</label>
62
+        <select
63
+          class="form-control form-control-lg form-control-a"
64
+          id="cityselector"
65
+          @change="CitySelected"
66
+          v-model="selectedCity"
67
+        >
68
+          <option>All</option>
69
+          <option v-for="(city, i) in cities" :key="i">{{ city.description }}</option>
70
+        </select>
71
+      </div>
72
+    </div>
73
+    <div class="col-md-6 mb-2">
74
+      <div class="form-group">
75
+        <label for="city">Suburb</label>
76
+        <select
77
+          class="form-control form-control-lg form-control-a"
78
+          id="suburbselector"
79
+          v-model="selectedSuburb"
80
+          @change="SuburbSelected"
81
+        >
82
+          <option>All</option>
83
+          <option v-for="(suburb, i) in suburbs" :key="i">{{ suburb.description }}</option>
84
+        </select>
85
+      </div>
86
+    </div>
87
+  </div>
88
+</template>
89
+
90
+<script>
91
+import { mapState, mapActions } from 'vuex';
92
+
93
+export default {
94
+  props: {
95
+    propertyType: String,
96
+  },
97
+  data() {
98
+    return {
99
+      selectedType: 'Sale',
100
+      selectedProvince: 'All',
101
+      selectedCity: 'All',
102
+      selectedSuburb: 'All',
103
+      selectedPropertyTypeRes: 'All',
104
+      selectedPropertyTypeCom: 'All',
105
+    };
106
+  },
107
+  mounted() {
108
+    this.getProvince();
109
+    this.$emit('TypeSelectedUpdated', this.selectedType);
110
+    this.getPropertyTypesRes();
111
+    this.getPropertyTypesCom();
112
+  },
113
+  computed: {
114
+    ...mapState('searchTab', ['provinces', 'cities', 'suburbs']),
115
+    ...mapState('property', ['propertyTypesRes', 'propertyTypesCom']),
116
+  },
117
+  methods: {
118
+    ...mapActions('searchTab', ['getProvince', 'getCities', 'getSuburbs']),
119
+    ...mapActions('property', ['getPropertyTypesRes', 'getPropertyTypesCom']),
120
+    TypeSelected(item) {
121
+      this.$emit('TypeSelectedUpdated', item.target.value);
122
+    },
123
+    PropertyTypeSelected(item) {
124
+      this.$emit('PropertyTypeSelectedUpdated', item.target.value);
125
+    },
126
+    ProvinceSelected(item) {
127
+      if (item.target.value !== 'All') {
128
+        this.getCities(Object.assign({}, { province: this.selectedProvince }));
129
+      }
130
+      this.$emit('ProvinceSelectedUpdated', item.target.value);
131
+    },
132
+    CitySelected(item) {
133
+      if (item.target.value !== 'All') {
134
+        this.getSuburbs(
135
+          Object.assign(
136
+            {},
137
+            { province: this.selectedProvince, city: this.selectedCity },
138
+          ),
139
+        );
140
+      }
141
+      this.$emit('CitySelectedUpdated', item.target.value);
142
+    },
143
+    SuburbSelected(item) {
144
+      this.$emit('SuburbSelectedUpdated', item.target.value);
145
+    },
146
+  },
147
+};
148
+</script>

+ 62
- 37
src/components/property/propertySearchPage.vue Wyświetl plik

8
     <br />
8
     <br />
9
     <div>
9
     <div>
10
       <propertyCard
10
       <propertyCard
11
-        v-if="Properties.length > 0"
11
+        v-if="properties.length > 0"
12
         name="propertyholder"
12
         name="propertyholder"
13
-        :properties="Properties"
13
+        :properties="properties"
14
         :key="propertysearch"
14
         :key="propertysearch"
15
       />
15
       />
16
-      <div v-if="Properties.length === 0">
16
+      <div v-if="properties.length === 0">
17
         <img src="../../../public/img/no-homes.gif" />
17
         <img src="../../../public/img/no-homes.gif" />
18
         <br />
18
         <br />
19
         <br />
19
         <br />
96
   </div>
96
   </div>
97
 </template>
97
 </template>
98
 <script>
98
 <script>
99
-import propertyCard from "../property/propertyCard.vue";
100
-import { isNull } from "util";
99
+import { mkdir } from 'fs';
100
+import { mapState, mapActions } from 'vuex';
101
+import propertyCard from './propertyCard.vue';
101
 
102
 
102
 export default {
103
 export default {
103
-  name: "propertysearch",
104
+  name: 'propertysearch',
104
   components: {
105
   components: {
105
-    propertyCard
106
+    propertyCard,
106
   },
107
   },
107
   data() {
108
   data() {
108
     return {
109
     return {
109
-      Properties: [],
110
-      type: "",
111
-      propertyType: "",
112
-      propertyTypeparam: "",
113
-      province: "",
114
-      city: "",
115
-      suburb: ""
110
+      type: '',
111
+      propertyType: '',
112
+      propertyTypeparam: '',
113
+      province: '',
114
+      city: '',
115
+      suburb: '',
116
+      proptype: '',
117
+      keyword: '',
116
     };
118
     };
117
   },
119
   },
120
+  methods: {
121
+    ...mapActions('property', [
122
+      'searchPropertiesParams',
123
+      'searchPropertiesKeyword',
124
+    ]),
125
+  },
118
   computed: {
126
   computed: {
127
+    ...mapState('property', ['properties']),
119
     ParamsChanged() {
128
     ParamsChanged() {
120
       this.propertyTypeparam = this.$route.params.propertyType;
129
       this.propertyTypeparam = this.$route.params.propertyType;
121
       this.type = this.$route.query.type;
130
       this.type = this.$route.query.type;
123
       this.province = this.$route.query.province;
132
       this.province = this.$route.query.province;
124
       this.city = this.$route.query.city;
133
       this.city = this.$route.query.city;
125
       this.suburb = this.$route.query.suburb;
134
       this.suburb = this.$route.query.suburb;
135
+      this.proptype = this.$route.query.propType;
136
+      this.keyword = this.$route.query.keyword;
126
 
137
 
127
-      if (typeof this.propertyType === "undefined") {
138
+      if (typeof this.propertyType === 'undefined') {
128
         this.propertyType = this.propertyTypeparam;
139
         this.propertyType = this.propertyTypeparam;
129
       }
140
       }
130
 
141
 
131
-      let search = "";
132
-      if (this.type !== "") {
133
-        search = search + "type:" + this.type;
142
+      if (this.type === '') {
143
+        this.type = 'undefined';
134
       }
144
       }
135
-      if (this.propertyType !== "") {
136
-        search = search + "|propertyType:" + this.propertyType;
145
+      if (this.propertyType === '') {
146
+        this.propertyType = 'undefined';
137
       }
147
       }
138
-      if (this.province !== "") {
139
-        search = search + "|province:" + this.province;
148
+      if (this.province === '') {
149
+        this.province = 'undefined';
140
       }
150
       }
141
-      if (this.city !== "") {
142
-        search = search + "|city:" + this.city;
151
+      if (this.city === '') {
152
+        this.city = 'undefined';
143
       }
153
       }
144
-      if (this.suburb !== "") {
145
-        search = search + "|suburb:" + this.suburb;
154
+      if (this.suburb === '') {
155
+        this.suburb = 'undefined';
156
+      }
157
+      if (this.proptype === '') {
158
+        this.propType = 'undefined';
159
+      }
160
+      if (typeof this.keyword === 'undefined' || this.keyword === '') {
161
+        this.searchPropertiesParams(
162
+          Object.assign(
163
+            {},
164
+            {
165
+              type: this.type,
166
+              propertyType: this.propertyType,
167
+              province: this.province,
168
+              city: this.city,
169
+              suburb: this.suburb,
170
+              propType: this.proptype,
171
+            },
172
+          ),
173
+        );
174
+      } else {
175
+        this.searchPropertiesKeyword(
176
+          Object.assign({}, { keyword: this.keyword }),
177
+        );
146
       }
178
       }
147
 
179
 
148
-      console.log(search);
149
-
150
-      const axios = require("axios");
151
-      axios
152
-        .get(
153
-          `http://localhost:57260/Property/Property/Search/${this.type}/${this.propertyType}/${this.province}/${this.city}/${this.suburb}`
154
-        )
155
-        .then(response => (this.Properties = response.data));
156
-    }
180
+      return null;
181
+    },
157
   },
182
   },
158
   watch: {
183
   watch: {
159
     ParamsChanged() {
184
     ParamsChanged() {
160
       console.log(JSON.stringify(this.$route.query));
185
       console.log(JSON.stringify(this.$route.query));
161
-    }
162
-  }
186
+    },
187
+  },
163
 };
188
 };
164
 </script>
189
 </script>

+ 27
- 3
src/components/property/propertyUserField.vue Wyświetl plik

1
 <template>
1
 <template>
2
   <div class="form-group row">
2
   <div class="form-group row">
3
-    <div class="col-md-4 mb-2" v-for="currentField in fields">
3
+    <div class="col-md-4 mb-2" v-for="(currentField, i) in fields" :key="i">
4
       <label>{{ currentField.name }}</label>
4
       <label>{{ currentField.name }}</label>
5
       <input
5
       <input
6
         v-if="currentField.type === 'number'"
6
         v-if="currentField.type === 'number'"
8
         type="number"
8
         type="number"
9
         name="currentField.name"
9
         name="currentField.name"
10
         id="currentField.id"
10
         id="currentField.id"
11
+        v-model="setFields[i]"
12
+        @change="UpdateSetFields(currentField, i)"
11
       />
13
       />
12
       <input
14
       <input
13
         v-if="currentField.type === 'text'"
15
         v-if="currentField.type === 'text'"
15
         type="text"
17
         type="text"
16
         name="currentField.name"
18
         name="currentField.name"
17
         id="currentField.id"
19
         id="currentField.id"
20
+        v-model="setFields[i]"
21
+        @change="UpdateSetFields(currentField, i)"
18
       />
22
       />
19
       <div v-if="currentField.type === 'yesno'">
23
       <div v-if="currentField.type === 'yesno'">
20
-        <select class="form-control form-control-lg form-control-a" id="currentField.id">
21
-          <option>Please Select</option>
24
+        <select
25
+          class="form-control form-control-lg form-control-a"
26
+          id="currentField.id"
27
+          v-model="setFields[i]"
28
+          @change="UpdateSetFields(currentField, i)"
29
+        >
22
           <option value="yes">Yes</option>
30
           <option value="yes">Yes</option>
23
           <option value="no">No</option>
31
           <option value="no">No</option>
24
         </select>
32
         </select>
29
 
37
 
30
 <script>
38
 <script>
31
 export default {
39
 export default {
40
+  name: 'UserDefinedField',
32
   props: {
41
   props: {
33
     fields: [],
42
     fields: [],
43
+    SetFieldValue: Function,
44
+  },
45
+  data() {
46
+    return {
47
+      setFields: [],
48
+    };
49
+  },
50
+  methods: {
51
+    UpdateSetFields(field, index) {
52
+      const item = {
53
+        userDefinedFieldId: field.id,
54
+        value: this.setFields[index],
55
+      };
56
+      this.$emit('UpdateUserDefinedFields', item);
57
+    },
34
   },
58
   },
35
 };
59
 };
36
 </script>
60
 </script>

+ 94
- 117
src/components/property/propertyeditPage.vue Wyświetl plik

41
                 </select>
41
                 </select>
42
               </div>
42
               </div>
43
               <div v-if="propertyType === 'Commercial'" class="col-md-4">
43
               <div v-if="propertyType === 'Commercial'" class="col-md-4">
44
-                <label>Property Name</label>
44
+                <label for="Property Name"></label>
45
                 <input
45
                 <input
46
-                  class="form-control form-control-lg form-control-a"
46
+                  class="form-control"
47
                   type="text"
47
                   type="text"
48
+                  placeholder="Property Name"
48
                   name="propertyName"
49
                   name="propertyName"
49
                   id="propertyName"
50
                   id="propertyName"
50
                   v-model="property.propertyName"
51
                   v-model="property.propertyName"
51
                 />
52
                 />
52
               </div>
53
               </div>
53
               <div v-if="propertyType === 'Commercial'" class="col-md-4">
54
               <div v-if="propertyType === 'Commercial'" class="col-md-4">
54
-                <label>Unit</label>
55
+                <label for="Unit"></label>
55
                 <input
56
                 <input
56
-                  class="form-control form-control-lg form-control-a"
57
+                  class="form-control"
58
+                  placeholder="Unit"
57
                   type="text"
59
                   type="text"
58
                   name="unit"
60
                   name="unit"
59
                   id="unit"
61
                   id="unit"
178
             <div class="form-group row">
180
             <div class="form-group row">
179
               <div class="col-md-12">
181
               <div class="col-md-12">
180
                 <label for="Property Description"></label>
182
                 <label for="Property Description"></label>
181
-                <textarea
182
-                  class="form-control editor"
183
-                  placeholder="Property Description"
184
-                  name="description"
185
-                  v-model="property.description"
186
-                  id="description"
187
-                ></textarea>
183
+                <TextEditor name="description" v-model="property.description" id="description" />
188
                 <br />
184
                 <br />
189
                 <p>* A listing fee of R380 including VAT is payable to list your Property on the Uni-Vate website</p>
185
                 <p>* A listing fee of R380 including VAT is payable to list your Property on the Uni-Vate website</p>
190
               </div>
186
               </div>
191
             </div>
187
             </div>
192
             <div class="form-group row" />
188
             <div class="form-group row" />
193
             <UserField
189
             <UserField
194
-              v-if="ApiRunning & propertyType === 'Residential'"
195
-              :fields="propValuesProp[0].fields"
190
+              v-if="propertyType === 'Residential' & propertyOverviewFields.length > 0"
191
+              :fields="propertyOverviewFields[0].fields"
196
               :id="overviewProps"
192
               :id="overviewProps"
197
               @UpdateUserDefinedFields="UpdateUserDefinedFields"
193
               @UpdateUserDefinedFields="UpdateUserDefinedFields"
198
             ></UserField>
194
             ></UserField>
199
             <div class="form-group row" />
195
             <div class="form-group row" />
200
-            <div v-for="item in propertyValues" :key="item.id">
196
+            <div v-for="item in propertyFields" :key="item.id">
201
               <div class="row">
197
               <div class="row">
202
                 <div class="col-sm-12">
198
                 <div class="col-sm-12">
203
                   <div class="title-box-d">
199
                   <div class="title-box-d">
220
               </div>
216
               </div>
221
             </div>
217
             </div>
222
             <ImageLoad :loadedImages="loadedImages" />
218
             <ImageLoad :loadedImages="loadedImages" />
223
-            <button type="button" @click="SubmitData()" class="btn btn-a">Save</button>
224
-            <!-- <router-link
225
-              to="/property/search"
226
-              @click.stop.prevent="SubmitData()"
227
-              class="btn btn-b"
228
-              tag="button"
229
-            >Save</router-link>-->
219
+            <button
220
+              type="button"
221
+              @click="SubmitData()"
222
+              class="btn btn-b-n"
223
+              style="width: 85px; height:40px;"
224
+            >Save</button>
230
           </form>
225
           </form>
231
         </div>
226
         </div>
232
       </div>
227
       </div>
235
 </template>
230
 </template>
236
 
231
 
237
 <script>
232
 <script>
238
-import UserField from "./propertyUserField.vue";
239
-import ImageLoad from "./propertyImage.vue";
240
-// https://vuejsexamples.com/a-vue-wrapper-around-the-trix-rich-text-editor/
233
+import { mapState, mapActions } from 'vuex';
234
+import TextEditor from 'vue-trix';
235
+import UserField from './propertyUserField.vue';
236
+import ImageLoad from './propertyImage.vue';
237
+
241
 export default {
238
 export default {
242
-  name: "PropertyEdit",
239
+  name: 'PropertyEdit',
243
   components: {
240
   components: {
244
     UserField,
241
     UserField,
245
-    ImageLoad
242
+    ImageLoad,
243
+    TextEditor,
246
   },
244
   },
247
   data() {
245
   data() {
248
     return {
246
     return {
249
-      ApiRunning: true,
250
-      propertyType: "Residential",
251
-      salesType: "Rental",
252
-      imageFile: "",
253
-      provinces: [],
254
-      cities: [],
255
-      suburbs: [],
256
-      propertyValues: [],
257
-      propValuesProp: [],
258
-      propertyTypes: [],
259
-      selectedProvince: "",
260
-      selectedCity: "",
247
+      propertyType: 'Residential',
248
+      salesType: 'Rental',
249
+      selectedProvince: '',
250
+      selectedCity: '',
261
       property: {
251
       property: {
262
         propertyTypeId: 0,
252
         propertyTypeId: 0,
263
-        propertyName: "",
264
-        unit: "",
265
-        addressLine1: "",
266
-        addressLine2: "",
267
-        addressLine3: "",
253
+        propertyName: '',
254
+        unit: '',
255
+        addressLine1: '',
256
+        addressLine2: '',
257
+        addressLine3: '',
268
         suburbId: 0,
258
         suburbId: 0,
269
         cityId: 0,
259
         cityId: 0,
270
         provinceId: 0,
260
         provinceId: 0,
271
-        price: "",
272
-        per: "",
273
-        description: "",
261
+        price: '',
262
+        per: '',
263
+        description: '',
274
         isSale: false,
264
         isSale: false,
275
         propertyUserFields: [],
265
         propertyUserFields: [],
276
-        propertyImages: []
266
+        propertyImages: [],
277
       },
267
       },
278
       images: [],
268
       images: [],
279
-      propertyFieldValues: []
269
+      propertyFieldValues: [],
280
     };
270
     };
281
   },
271
   },
282
   methods: {
272
   methods: {
273
+    ...mapActions('searchTab', ['getProvince', 'getCities', 'getSuburbs']),
274
+    ...mapActions('property', [
275
+      'getPropertyTypes',
276
+      'getPropertyOverviewFields',
277
+      'getPropertyFields',
278
+      'saveProperty',
279
+    ]),
283
     SubmitData() {
280
     SubmitData() {
284
-      // let isDefault = true;
285
-      // this.images.forEach((imagedata) => {
286
-      //   this.property.propertyImages.push({
287
-      //     image: imagedata,
288
-      //     isDefault,
289
-      //   });
290
-      //   isDefault = false;
291
-      // });
292
-
293
-      // this.property.propertyUserFields = this.propertyFieldValues;
281
+      let isDefault = true;
282
+      this.images.forEach((imagedata) => {
283
+        this.property.propertyImages.push({
284
+          image: imagedata,
285
+          isDefault,
286
+        });
287
+        isDefault = false;
288
+      });
289
+      this.property.propertyUserFields = this.propertyFieldValues;
294
 
290
 
295
-      // const axios = require('axios');
296
-      // axios
297
-      //   .post('http://localhost:57260/Property/Property', this.property)
298
-      //   .then((response) => {})
299
-      //   .catch((e) => {
300
-      //     alert(e);
301
-      //   });
291
+      this.saveProperty(Object.assign({}, { newProperty: this.property }));
302
 
292
 
303
-      // this.$router.push("/property/search");
304
       this.$router.push({
293
       this.$router.push({
305
-        path: "/property/search",
306
-        query: { type: this.salesType, propertyType: this.propertyType }
294
+        path: '/property/search',
295
+        query: { type: this.salesType, propertyType: this.propertyType },
307
       });
296
       });
308
     },
297
     },
309
     ProvinceSelected(item) {
298
     ProvinceSelected(item) {
311
         this.selectedProvince = this.provinces[
300
         this.selectedProvince = this.provinces[
312
           item.target.options.selectedIndex - 1
301
           item.target.options.selectedIndex - 1
313
         ].description;
302
         ].description;
314
-        const axios = require("axios");
315
-        axios
316
-          .get(
317
-            `http://localhost:57260/region/city/getby/${this.selectedProvince}`
318
-          )
319
-          .then(response => (this.cities = response.data));
303
+        this.getCities(Object.assign({}, { province: this.selectedProvince }));
320
       }
304
       }
321
     },
305
     },
322
     CitySelected(item) {
306
     CitySelected(item) {
324
         this.selectedCity = this.cities[
308
         this.selectedCity = this.cities[
325
           item.target.options.selectedIndex - 1
309
           item.target.options.selectedIndex - 1
326
         ].description;
310
         ].description;
327
-        const axios = require("axios");
328
-        axios
329
-          .get(
330
-            `http://localhost:57260/region/Suburb/${this.selectedProvince}/${this.selectedCity}`
331
-          )
332
-          .then(response => (this.suburbs = response.data));
311
+        this.getSuburbs(
312
+          Object.assign(
313
+            {},
314
+            { province: this.selectedProvince, city: this.selectedCity },
315
+          ),
316
+        );
333
       }
317
       }
334
     },
318
     },
335
     loadedImages(values) {
319
     loadedImages(values) {
337
     },
321
     },
338
     UpdateUserDefinedFields(item) {
322
     UpdateUserDefinedFields(item) {
339
       let update = false;
323
       let update = false;
340
-      this.propertyFieldValues.forEach(element => {
324
+      this.propertyFieldValues.forEach((element) => {
341
         if (element.userDefinedFieldId === item.userDefinedFieldId) {
325
         if (element.userDefinedFieldId === item.userDefinedFieldId) {
342
           element.value = item.value;
326
           element.value = item.value;
343
           update = true;
327
           update = true;
346
       if (!update) {
330
       if (!update) {
347
         this.propertyFieldValues.push(item);
331
         this.propertyFieldValues.push(item);
348
       }
332
       }
349
-    }
333
+    },
350
   },
334
   },
351
   mounted() {
335
   mounted() {
352
     this.propertyType = this.$route.params.propType;
336
     this.propertyType = this.$route.params.propType;
353
     this.salesType = this.$route.params.saleType;
337
     this.salesType = this.$route.params.saleType;
354
 
338
 
355
-    const axios = require("axios");
356
-    axios
357
-      .get("http://localhost:57260/Property/PropertyFields/Property Overview")
358
-      .then(response => (this.propValuesProp = response.data));
359
-
360
-    axios
361
-      .get(
362
-        `http://localhost:57260/property/propertyfields/Propertytype/${this.propertyType}`
363
-      )
364
-      .then(response => (this.propertyValues = response.data));
365
-
366
-    axios
367
-      .get(
368
-        `http://localhost:57260/Property/PropertyType/type/${this.propertyType}`
369
-      )
370
-      .then(response => (this.propertyTypes = response.data));
371
-
372
-    axios
373
-      .get("http://localhost:57260/region/province")
374
-      .then(response => (this.provinces = response.data));
339
+    this.getProvince();
340
+    this.getPropertyTypes(
341
+      Object.assign({}, { propertyType: this.$route.params.propType }),
342
+    );
343
+    this.getPropertyOverviewFields();
344
+    this.getPropertyFields(
345
+      Object.assign({}, { propertyType: this.$route.params.propType }),
346
+    );
375
   },
347
   },
376
   computed: {
348
   computed: {
349
+    ...mapState('searchTab', ['provinces', 'cities', 'suburbs']),
350
+    ...mapState('property', [
351
+      'propertyTypes',
352
+      'propertyOverviewFields',
353
+      'propertyFields',
354
+    ]),
377
     SalesTypeChanged() {
355
     SalesTypeChanged() {
356
+      // eslint-disable-next-line vue/no-side-effects-in-computed-properties
378
       this.propertyType = this.$route.params.propType;
357
       this.propertyType = this.$route.params.propType;
358
+      // eslint-disable-next-line vue/no-side-effects-in-computed-properties
379
       this.salesType = this.$route.params.saleType;
359
       this.salesType = this.$route.params.saleType;
380
 
360
 
381
-      const axios = require("axios");
382
-      axios
383
-        .get(
384
-          `http://localhost:57260/Property/PropertyType/type/${this.propertyType}`
385
-        )
386
-        .then(response => (this.propertyTypes = response.data));
361
+      this.getPropertyTypes(
362
+        Object.assign({}, { propertyType: this.$route.params.propType }),
363
+      );
364
+
365
+      this.getPropertyFields(
366
+        Object.assign({}, { propertyType: this.$route.params.propType }),
367
+      );
387
 
368
 
388
-      axios
389
-        .get(
390
-          `http://localhost:57260/property/propertyfields/Propertytype/${this.propertyType}`
391
-        )
392
-        .then(response => (this.propertyValues = response.data));
393
-    }
369
+      return this.propertyType;
370
+    },
394
   },
371
   },
395
   watch: {
372
   watch: {
396
     SalesTypeChanged() {
373
     SalesTypeChanged() {
397
       console.log(this.salesType);
374
       console.log(this.salesType);
398
-    }
399
-  }
375
+    },
376
+  },
400
 };
377
 };
401
-</script>
378
+</script>

+ 7
- 7
src/components/shared/footerSection.vue Wyświetl plik

74
               </div>
74
               </div>
75
               <div class="w-body-a">
75
               <div class="w-body-a">
76
                 <ul class="list-unstyled">
76
                 <ul class="list-unstyled">
77
-                  <li class="item-list-a">
77
+                  <li class="item-list-a" style="margin-bottom: 1em">
78
                     <a href="https:\\www.daelive.com">
78
                     <a href="https:\\www.daelive.com">
79
                       <img
79
                       <img
80
                         class="img-fluid"
80
                         class="img-fluid"
84
                       />
84
                       />
85
                     </a>
85
                     </a>
86
                   </li>
86
                   </li>
87
-                  <br />
88
-                  <li class="item-list-a">
87
+
88
+                  <li class="item-list-a" style="margin-bottom: 1em">
89
                     <a href="https:\\www.gomelo.co.za">
89
                     <a href="https:\\www.gomelo.co.za">
90
                       <img
90
                       <img
91
                         class="img-fluid"
91
                         class="img-fluid"
95
                       />
95
                       />
96
                     </a>
96
                     </a>
97
                   </li>
97
                   </li>
98
-                  <br />
99
-                  <li class="item-list-a">
98
+
99
+                  <li class="item-list-a" style="margin-bottom: 1em">
100
                     <a href="https:\\www.rci.co.za">
100
                     <a href="https:\\www.rci.co.za">
101
                       <img
101
                       <img
102
                         class="img-fluid"
102
                         class="img-fluid"
106
                       />
106
                       />
107
                     </a>
107
                     </a>
108
                   </li>
108
                   </li>
109
-                  <br />
110
-                  <li class="item-list-a">
109
+
110
+                  <li class="item-list-a" style="margin-bottom: 1em">
111
                     <a href="https:\\www.voasa.co.za">
111
                     <a href="https:\\www.voasa.co.za">
112
                       <img
112
                       <img
113
                         class="img-fluid"
113
                         class="img-fluid"

+ 201
- 0
src/components/shared/lightBoxGallery.vue Wyświetl plik

1
+<template>
2
+  <div class="scrolling-wrapper">
3
+    <img
4
+      @click="lightboxEffect(index)"
5
+      v-for="(thumbnail, index) in thumbnails"
6
+      :key="thumbnail"
7
+      :src="thumbnail"
8
+      style="height:150px; width:150px; object-fit: cover;"
9
+      class="light-box__thumbnail"
10
+    />
11
+    <transition name="fade" mode="out-in">
12
+      <div @click.stop="bg = !bg" class="light-box__bg" v-if="bg"></div>
13
+    </transition>
14
+
15
+    <div v-if="bg">
16
+      <div class="light-box__close" @click.stop="bg = !bg"></div>
17
+      <p class="light-box__count" v-if="count">
18
+        {{currentImage + 1 }}/
19
+        <span>{{ thumbnails.length}}</span>
20
+      </p>
21
+      <div @click="prev" class="light-box__prev light-box__btn"></div>
22
+
23
+      <div v-if="bg" class="light-box__container">
24
+        <transition name="fade" mode="out-in">
25
+          <img
26
+            :key="currentImage"
27
+            :src="largeImages[currentImage]"
28
+            class="light-box__container__img"
29
+          />
30
+        </transition>
31
+      </div>
32
+
33
+      <div class="light-box__caption" v-if="caption">
34
+        <p v-if="captions[currentImage]">{{ captions[currentImage]}}</p>
35
+      </div>
36
+
37
+      <div @click="next" class="light-box__next light-box__btn"></div>
38
+    </div>
39
+  </div>
40
+</template>
41
+
42
+<script>
43
+export default {
44
+  data() {
45
+    return {
46
+      bg: false,
47
+      currentImage: 0,
48
+      count: true
49
+    };
50
+  },
51
+  props: {
52
+    thumbnails: {
53
+      type: Array,
54
+      required: true
55
+    },
56
+    largeImages: {
57
+      type: Array,
58
+      required: true
59
+    },
60
+    captions: {
61
+      type: Array,
62
+      required: true
63
+    },
64
+    thumbnailsPath: {
65
+      type: String,
66
+      required: true
67
+    },
68
+    largePath: {
69
+      type: String,
70
+      required: true
71
+    },
72
+    caption: true
73
+  },
74
+  methods: {
75
+    lightboxEffect(curr) {
76
+      this.currentImage = curr;
77
+      this.bg = !this.bg;
78
+    },
79
+    next() {
80
+      if (this.currentImage < this.largeImages.length - 1) {
81
+        // eslint-disable-next-line no-plusplus
82
+        this.currentImage++;
83
+      } else {
84
+        this.currentImage = 0;
85
+      }
86
+    },
87
+    prev() {
88
+      if (this.currentImage > 0) {
89
+        // eslint-disable-next-line no-plusplus
90
+        this.currentImage--;
91
+      } else {
92
+        this.currentImage = this.largeImages.length - 1;
93
+      }
94
+    }
95
+  }
96
+};
97
+</script>
98
+
99
+<style lang="scss">
100
+.fade-enter-active,
101
+.fade-leave-active {
102
+  transition: opacity 0.2s;
103
+}
104
+.fade-enter,
105
+.fade-leave-to {
106
+  opacity: 0;
107
+}
108
+.light-box {
109
+  &__bg {
110
+    position: fixed;
111
+    left: 0;
112
+    top: 0;
113
+    right: 0;
114
+    bottom: 0;
115
+    background-color: rgba(0, 0, 0, 0.89);
116
+    z-index: 1000;
117
+  }
118
+
119
+  &__thumbnail {
120
+    cursor: pointer;
121
+  }
122
+
123
+  &__close {
124
+    padding: 10px;
125
+    position: absolute;
126
+    right: 5px;
127
+    top: 10px;
128
+    background-image: url(../../../public/img/ligthbox/close.svg);
129
+    background-size: contain;
130
+    background-position: center;
131
+  }
132
+  &__container {
133
+    position: absolute;
134
+    z-index: 2000;
135
+    display: flex;
136
+    justify-content: center;
137
+    align-items: center;
138
+    max-width: 700px;
139
+    left: 50%;
140
+    top: 50%;
141
+    transform: translate(-50%, -50%);
142
+    min-height: 800px;
143
+    img {
144
+      align-self: center;
145
+    }
146
+  }
147
+  &__btn {
148
+    background-size: contain;
149
+    background-position: center;
150
+    align-self: center;
151
+    padding: 15px;
152
+  }
153
+
154
+  &__close,
155
+  &__btn {
156
+    cursor: pointer;
157
+  }
158
+
159
+  &__close,
160
+  &__btn,
161
+  &__caption,
162
+  &__count {
163
+    position: absolute;
164
+    z-index: 3000;
165
+  }
166
+
167
+  &__next {
168
+    background-image: url(../../../public/img/ligthbox/next.svg);
169
+    right: 20px;
170
+  }
171
+  &__prev {
172
+    background-image: url(../../../public/img/ligthbox/prev.svg);
173
+    left: 20px;
174
+  }
175
+  &__next,
176
+  &__prev {
177
+    top: 50%;
178
+    transform: translateY(-50%);
179
+  }
180
+
181
+  &__caption {
182
+    bottom: 0;
183
+    width: 100%;
184
+    height: 50px;
185
+    display: flex;
186
+    align-items: center;
187
+    color: #fff;
188
+    font-size: 20px;
189
+    justify-content: center;
190
+  }
191
+
192
+  &__count {
193
+    left: 20px;
194
+    font-size: 16px;
195
+    color: #fff;
196
+    top: 14px;
197
+    padding: 0;
198
+    margin: 0;
199
+  }
200
+}
201
+</style>

+ 9
- 13
src/components/shared/navBar.vue Wyświetl plik

151
               <a class="dropdown-item cursor-pointer" @click="routerGoTo('/status/list')">Status</a>
151
               <a class="dropdown-item cursor-pointer" @click="routerGoTo('/status/list')">Status</a>
152
               <a
152
               <a
153
                 class="dropdown-item cursor-pointer"
153
                 class="dropdown-item cursor-pointer"
154
-                @click="routerGoTo('/status/list')"
154
+                @click="routerGoTo('/status/timeshareAdmin')"
155
               >Timeshare Week Admin</a>
155
               >Timeshare Week Admin</a>
156
               <a
156
               <a
157
                 class="dropdown-item cursor-pointer"
157
                 class="dropdown-item cursor-pointer"
158
-                @click="routerGoTo('/status/list')"
159
-              >Changes Logs</a>
160
-              <a
161
-                class="dropdown-item cursor-pointer"
162
-                @click="routerGoTo('/status/list')"
163
-              >User Management & Access</a>
158
+                @click="routerGoTo('/status/tenderWeekAdmin')"
159
+              >Tender Week Management</a>
164
               <a
160
               <a
165
                 class="dropdown-item cursor-pointer"
161
                 class="dropdown-item cursor-pointer"
166
-                @click="routerGoTo('/status/list')"
167
-              >Tender Week Management</a>
162
+                @click="routerGoTo('/unitConfiguration/list')"
163
+              >Unit Configuration</a>
168
               <a
164
               <a
169
                 class="dropdown-item cursor-pointer"
165
                 class="dropdown-item cursor-pointer"
170
-                @click="routerGoTo('/status/list')"
171
-              >Timeshare Week Approval</a>
166
+                @click="routerGoTo('/status/userManagementPage')"
167
+              >User Management & Access</a>
172
               <a
168
               <a
173
                 class="dropdown-item cursor-pointer"
169
                 class="dropdown-item cursor-pointer"
174
-                @click="routerGoTo('/unitConfiguration/list')"
175
-              >Unit Configuration</a>
170
+                @click="routerGoTo('/status/changeLogPage')"
171
+              >Changes Logs</a>
176
             </div>
172
             </div>
177
           </li>
173
           </li>
178
           <li class="nav-item">
174
           <li class="nav-item">

+ 117
- 92
src/components/shared/searchTab.vue Wyświetl plik

5
       <h3 class="title-d">Search</h3>
5
       <h3 class="title-d">Search</h3>
6
     </div>
6
     </div>
7
     <span class="close-box-collapse right-boxed ion-ios-close"></span>
7
     <span class="close-box-collapse right-boxed ion-ios-close"></span>
8
-    <div class="box-collapse-wrap form">
8
+    <div class="box-collapse-wrap">
9
       <form class="form-a">
9
       <form class="form-a">
10
         <div class="row">
10
         <div class="row">
11
           <div class="col-md-12 mb-2">
11
           <div class="col-md-12 mb-2">
15
                 type="text"
15
                 type="text"
16
                 class="form-control form-control-lg form-control-a"
16
                 class="form-control form-control-lg form-control-a"
17
                 placeholder="Keyword"
17
                 placeholder="Keyword"
18
+                v-model="keyword"
18
               />
19
               />
19
             </div>
20
             </div>
20
           </div>
21
           </div>
21
-          <div class="col-md-4 mb-2">
22
-            <div class="form-group">
23
-              <input class="form-check-input" type="radio" name="paid" value="Yes" />
24
-              <label class="form-check-label" for="paid">Timeshare</label>
25
-            </div>
26
-          </div>
27
-          <div class="col-md-4 mb-2">
28
-            <div class="form-group">
29
-              <input class="form-check-input" type="radio" name="paid" value="Yes" />
30
-              <label class="form-check-label" for="paid">Residential</label>
31
-            </div>
32
-          </div>
33
-          <div class="col-md-4 mb-2">
34
-            <div class="form-group">
35
-              <input class="form-check-input" type="radio" name="paid" value="Yes" />
36
-              <label class="form-check-label" for="paid">Commercial</label>
37
-            </div>
38
-          </div>
39
-          <div class="col-md-6 mb-2">
40
-            <div class="form-group">
41
-              <input class="form-check-input" type="radio" name="paid" value="Yes" />
42
-              <label class="form-check-label" for="paid">Sale</label>
43
-            </div>
44
-          </div>
45
-          <div class="col-md-6 mb-2">
46
-            <div class="form-group">
47
-              <input class="form-check-input" type="radio" name="paid" value="Yes" />
48
-              <label class="form-check-label" for="paid">Rent</label>
49
-            </div>
50
-          </div>
51
-          <div class="col-md-6 mb-2">
52
-            <div class="form-group">
53
-              <label for="city">Provice</label>
54
-              <select
55
-                class="form-control form-control-lg form-control-a"
56
-                id="provinceselector"
57
-                @change="ProvinceSelected"
58
-                v-model="selectedProvince"
59
-              >
60
-                <option>All</option>
61
-                <option v-for="(province, i) in provinces" :key="i">{{ province.description }}</option>
62
-              </select>
63
-            </div>
64
-          </div>
65
-          <div class="col-md-6 mb-2">
66
-            <div class="form-group">
67
-              <label for="city">City</label>
68
-              <select
69
-                class="form-control form-control-lg form-control-a"
70
-                id="cityselector"
71
-                @change="CitySelected"
72
-                v-model="selectedCity"
22
+          <div class="col-md-12">
23
+            <ul class="nav nav-pills-a nav-pills mb-3 section-t3" id="pills-tab" role="tablist">
24
+              <li class="nav-item">
25
+                <a
26
+                  class="nav-link active"
27
+                  id="pills-video-tab"
28
+                  data-toggle="pill"
29
+                  href="#pills-video"
30
+                  role="tab"
31
+                  aria-controls="pills-video"
32
+                  aria-selected="true"
33
+                  v-on:click="updateType('Timeshare')"
34
+                >Timeshare</a>
35
+              </li>
36
+              <li class="nav-item">
37
+                <a
38
+                  class="nav-link"
39
+                  id="pills-plans-tab"
40
+                  data-toggle="pill"
41
+                  href="#pills-plans"
42
+                  role="tab"
43
+                  aria-controls="pills-plans"
44
+                  aria-selected="false"
45
+                  v-on:click="updateType('Residential')"
46
+                >Residential</a>
47
+              </li>
48
+              <li class="nav-item">
49
+                <a
50
+                  class="nav-link"
51
+                  id="pills-map-tab"
52
+                  data-toggle="pill"
53
+                  href="#pills-map"
54
+                  role="tab"
55
+                  aria-controls="pills-map"
56
+                  aria-selected="false"
57
+                  v-on:click="updateType('Commercial')"
58
+                >Commercial</a>
59
+              </li>
60
+            </ul>
61
+            <div class="tab-content" id="pills-tabContent">
62
+              <div
63
+                class="tab-pane fade show active"
64
+                id="pills-video"
65
+                role="tabpanel"
66
+                aria-labelledby="pills-video-tab"
67
+              >timeshare search</div>
68
+              <div
69
+                class="tab-pane fade"
70
+                id="pills-plans"
71
+                role="tabpanel"
72
+                aria-labelledby="pills-plans-tab"
73
               >
73
               >
74
-                <option>All</option>
75
-                <option v-for="(city, i) in cities" :key="i">{{ city.description }}</option>
76
-              </select>
77
-            </div>
78
-          </div>
79
-          <div class="col-md-6 mb-2">
80
-            <div class="form-group">
81
-              <label for="city">Suburb</label>
82
-              <select
83
-                class="form-control form-control-lg form-control-a"
84
-                id="suburbselector"
85
-                v-model="selectedSuburb"
74
+                <propertySearch
75
+                  propertyType="Residential"
76
+                  @TypeSelectedUpdated="TypeSelectedUpdated"
77
+                  @ProvinceSelectedUpdated="ProvinceSelectedUpdated"
78
+                  @CitySelectedUpdated="CitySelectedUpdated"
79
+                  @SuburbSelectedUpdated="SuburbSelectedUpdated"
80
+                  @PropertyTypeSelectedUpdated="PropertyTypeSelectedUpdated"
81
+                />
82
+              </div>
83
+              <div
84
+                class="tab-pane fade"
85
+                id="pills-map"
86
+                role="tabpanel"
87
+                aria-labelledby="pills-map-tab"
86
               >
88
               >
87
-                <option>All</option>
88
-                <option v-for="(suburb, i) in suburbs" :key="i">{{ suburb.description }}</option>
89
-              </select>
89
+                <propertySearch
90
+                  propertyType="Commercial"
91
+                  @TypeSelectedUpdated="TypeSelectedUpdated"
92
+                  @ProvinceSelectedUpdated="ProvinceSelectedUpdated"
93
+                  @CitySelectedUpdated="CitySelectedUpdated"
94
+                  @SuburbSelectedUpdated="SuburbSelectedUpdated"
95
+                  @PropertyTypeSelectedUpdated="PropertyTypeSelectedUpdated"
96
+                />
97
+              </div>
90
             </div>
98
             </div>
91
           </div>
99
           </div>
92
-
93
           <div class="col-md-12">
100
           <div class="col-md-12">
94
-            <!-- <button type="submit" class="btn btn-b">Search</button> -->
95
-            <router-link to="/property/search" class="btn btn-b" tag="button">Search</router-link>
101
+            <button type="submit" class="btn btn-b" @click="Search">Search</button>
96
           </div>
102
           </div>
97
         </div>
103
         </div>
98
       </form>
104
       </form>
99
     </div>
105
     </div>
100
   </div>
106
   </div>
101
 </template>
107
 </template>
108
+
102
 <script>
109
 <script>
103
-import { mapState, mapActions } from 'vuex';
110
+import propertySearch from '../property/propertySearchFields.vue';
104
 
111
 
105
 export default {
112
 export default {
113
+  components: {
114
+    propertySearch,
115
+  },
106
   data() {
116
   data() {
107
     return {
117
     return {
118
+      selectedPropertyType: 'timeshare',
119
+      selectedType: '',
108
       selectedProvince: '',
120
       selectedProvince: '',
109
       selectedCity: '',
121
       selectedCity: '',
110
       selectedSuburb: '',
122
       selectedSuburb: '',
123
+      selectedPropType: '',
124
+      keyword: '',
111
     };
125
     };
112
   },
126
   },
113
-  mounted() {
114
-    this.getProvince();
115
-  },
116
-  computed: {
117
-    ...mapState('searchTab', ['provinces', 'cities', 'suburbs']),
118
-  },
119
   methods: {
127
   methods: {
120
-    ...mapActions('searchTab', ['getProvince', 'getCities', 'getSuburbs']),
121
-    ProvinceSelected(item) {
122
-      if (item.target.value !== 'All') {
123
-        this.getCities(Object.assign({}, this.selectedProvince));
124
-      }
128
+    updateType(item) {
129
+      this.selectedPropertyType = item;
130
+    },
131
+    TypeSelectedUpdated(item) {
132
+      this.selectedType = item;
133
+    },
134
+    PropertyTypeSelectedUpdated(item) {
135
+      this.selectedPropType = item;
136
+    },
137
+    ProvinceSelectedUpdated(item) {
138
+      this.selectedProvince = item;
139
+    },
140
+    CitySelectedUpdated(item) {
141
+      this.selectedCity = item;
142
+    },
143
+    SuburbSelectedUpdated(item) {
144
+      this.selectedSuburb = item;
125
     },
145
     },
126
-    CitySelected(item) {
127
-      if (item.target.value !== 'All') {
128
-        this.getSuburbs(
129
-          Object.assign(
130
-            {},
131
-            { province: this.selectedProvince, city: this.city },
132
-          ),
133
-        );
134
-      }
146
+    Search() {
147
+      // need to see how to differenciate between properties and timeshare.
148
+      this.$router.push({
149
+        path: '/property/search',
150
+        query: {
151
+          type: this.selectedType,
152
+          propertyType: this.selectedPropertyType,
153
+          province: this.selectedProvince,
154
+          city: this.selectedCity,
155
+          suburb: this.selectedSuburb,
156
+          propType: this.propertyType,
157
+          keyword: this.keyword,
158
+        },
159
+      });
135
     },
160
     },
136
   },
161
   },
137
 };
162
 };

+ 135
- 108
src/components/timeshare/resort/unitPage.vue Wyświetl plik

1
 <template>
1
 <template>
2
-  <div class="container">
3
-    <div class="row mb-4">
4
-      <div class="col-md-12">
5
-        <h1 class="my-4">{{resort.prName}}</h1>
6
-      </div>
7
-      <div class="col-md-6">
8
-        <p>{{description}}</p>
9
-      </div>
10
-      <div class="col-md-6">
11
-        <form
12
-          id="mainForm"
13
-          method="POST"
14
-          action="/interested-timeshare/"
15
-          accept-charset="UTF-8"
16
-          enctype="multipart/form-data"
17
-        >
18
-          <div class="form-row">
19
-            <div class="col-md-6">
20
-              <label for="resortName">Unit</label>
21
-              <input
22
-                class="form-control"
23
-                type="text"
24
-                id="resort"
25
-                name="resortName"
26
-                :value="week.unit"
27
-                disabled
28
-              />
29
-            </div>
30
-            <div class="col-md-6">
31
-              <label for="resortWeek">Week</label>
32
-              <input
33
-                class="form-control"
34
-                type="text"
35
-                id="week"
36
-                name="resortWeek"
37
-                :value="week.week"
38
-                disabled
39
-              />
2
+  <section>
3
+    <section class="intro-single">
4
+      <div class="container">
5
+        <div class="row">
6
+          <div class="col-md-12 col-lg-8">
7
+            <div class="title-single-box">
8
+              <h1 class="title-single" style="text-align:left;">{{resort.prName}}</h1>
40
             </div>
9
             </div>
41
           </div>
10
           </div>
42
-          <div class="form-row">
43
-            <div class="col-md-6">
44
-              <label for="resortModule">Module</label>
45
-              <input
46
-                class="form-control"
47
-                type="text"
48
-                id="module"
49
-                name="resortModule"
50
-                :value="week.module"
51
-                disabled
52
-              />
11
+        </div>
12
+      </div>
13
+    </section>
14
+    <div class="container">
15
+      <div class="row mb-4">
16
+        <div class="col-md-6">
17
+          <p>{{description}}</p>
18
+        </div>
19
+        <div class="col-md-6">
20
+          <form
21
+            id="mainForm"
22
+            method="POST"
23
+            action="/interested-timeshare/"
24
+            accept-charset="UTF-8"
25
+            enctype="multipart/form-data"
26
+          >
27
+            <div class="form-row">
28
+              <div class="col-md-6">
29
+                <label for="resortunit">Unit</label>
30
+                <input
31
+                  class="form-control"
32
+                  type="text"
33
+                  id="resort"
34
+                  name="resortunit"
35
+                  :value="week.unit"
36
+                  disabled
37
+                />
38
+              </div>
39
+              <div class="col-md-6">
40
+                <label for="resortWeek">Week</label>
41
+                <input
42
+                  class="form-control"
43
+                  type="text"
44
+                  id="week"
45
+                  name="resortWeek"
46
+                  :value="week.week"
47
+                  disabled
48
+                />
49
+              </div>
53
             </div>
50
             </div>
54
-            <div class="col-md-6">
55
-              <label for="price">Price</label>
56
-              <input
57
-                class="form-control"
58
-                type="text"
59
-                name="price"
60
-                id="price"
61
-                :value="'R ' + week.price"
62
-                disabled
63
-              />
51
+            <br />
52
+            <div class="form-row">
53
+              <div class="col-md-6">
54
+                <label for="resortModule">Module</label>
55
+                <input
56
+                  class="form-control"
57
+                  type="text"
58
+                  id="module"
59
+                  name="resortModule"
60
+                  :value="week.module"
61
+                  disabled
62
+                />
63
+              </div>
64
+              <div class="col-md-6">
65
+                <label for="price">Price</label>
66
+                <input
67
+                  class="form-control"
68
+                  type="text"
69
+                  name="price"
70
+                  id="price"
71
+                  :value="'R ' + week.price"
72
+                  disabled
73
+                />
74
+              </div>
64
             </div>
75
             </div>
65
-          </div>
66
-          <div class="form-row">
67
-            <div class="col-md-6">
68
-              <label for="resortModule">Current Year Levy</label>
69
-              <input
70
-                class="form-control"
71
-                type="text"
72
-                id="levy"
73
-                name="levy"
74
-                :value="'R ' + week.currentLevy"
75
-                disabled
76
-              />
76
+            <br />
77
+            <div class="form-row">
78
+              <div class="col-md-6">
79
+                <label for="resortModule">Current Year Levy</label>
80
+                <input
81
+                  class="form-control"
82
+                  type="text"
83
+                  id="levy"
84
+                  name="levy"
85
+                  :value="'R ' + week.currentLevy"
86
+                  disabled
87
+                />
88
+              </div>
77
             </div>
89
             </div>
78
-          </div>
79
-          <div class="form-row">
80
-            <div class="col-md-12">
81
-              <input class="form-control" type="text" name="name" placeholder="Name" />
90
+            <br />
91
+            <div class="form-row">
92
+              <div class="col-md-12">
93
+                <input class="form-control" type="text" name="name" placeholder="Name" />
94
+              </div>
82
             </div>
95
             </div>
83
-          </div>
84
-          <div class="form-row">
85
-            <div class="col-md-12">
86
-              <input class="form-control" type="text" name="mobile" placeholder="Contact Number" />
96
+            <br />
97
+            <div class="form-row">
98
+              <div class="col-md-12">
99
+                <input
100
+                  class="form-control"
101
+                  type="number"
102
+                  name="mobile"
103
+                  placeholder="Contact Number"
104
+                />
105
+              </div>
87
             </div>
106
             </div>
88
-          </div>
89
-          <div class="form-row">
90
-            <div class="col-md-12">
91
-              <input class="form-control" type="email" name="email" placeholder="Email" />
107
+            <br />
108
+            <div class="form-row">
109
+              <div class="col-md-12">
110
+                <input class="form-control" type="email" name="email" placeholder="Email" />
111
+              </div>
92
             </div>
112
             </div>
93
-          </div>
113
+            <br />
94
 
114
 
95
-          <button class="btn btn-blue even-width mr-auto" type="submit">ENQUIRE NOW</button>
115
+            <button class="btn btn-b-c even-width mr-auto" type="submit">Enquire Now</button>
96
 
116
 
97
-          <a
98
-            class="btn btn-blue even-width mr-auto"
99
-            href="/share-transfer-initiation-for-purchaser/"
100
-          >MAKE AN OFFER</a>
101
-          <a
102
-            class="btn btn-blue even-width mr-auto"
103
-            href="#"
104
-            data-toggle="modal"
105
-            data-target="#loginOrRegister"
106
-          >MAKE AN OFFER</a>
117
+            <a
118
+              class="btn btn-b-n even-width mr-auto"
119
+              href="/share-transfer-initiation-for-purchaser/"
120
+            >Make an Offer</a>
107
 
121
 
108
-          <a class="btn btn-blue even-width mr-auto" href="javascript:history.back()">BACK</a>
109
-        </form>
110
-      </div>
111
-    </div>
112
-    <div class="row mb-4">
113
-      <div class="col-md-4">
114
-        <img class="img-fluid" :src="image1" alt="Resort Image" />
115
-      </div>
116
-      <div class="col-md-4">
117
-        <img class="img-fluid" :src="image2" alt="Resort Image" />
122
+            <a class="btn btn-b-c even-width mr-auto" href="javascript:history.back()">Back</a>
123
+          </form>
124
+        </div>
118
       </div>
125
       </div>
119
-      <div class="col-md-4">
120
-        <img class="img-fluid" :src="image3" alt="Resort Image" />
126
+      <div class="row mb-4">
127
+        <div class="col-md-4">
128
+          <img class="img-fluid" :src="image1" alt="Resort Image" />
129
+        </div>
130
+        <div class="col-md-4">
131
+          <img class="img-fluid" :src="image2" alt="Resort Image" />
132
+        </div>
133
+        <div class="col-md-4">
134
+          <img class="img-fluid" :src="image3" alt="Resort Image" />
135
+        </div>
121
       </div>
136
       </div>
122
     </div>
137
     </div>
123
-  </div>
138
+  </section>
124
 </template>
139
 </template>
125
 
140
 
126
 <script>
141
 <script>
151
   },
166
   },
152
 };
167
 };
153
 </script>
168
 </script>
169
+<style scoped>
170
+.btn.btn-b-c {
171
+  background-color: #ffffff;
172
+  color: #60cbeb;
173
+  border-radius: 0;
174
+}
175
+
176
+.btn.btn-b-c:hover {
177
+  background-color: #089bf0;
178
+  color: #ffffff;
179
+}
180
+</style>

+ 59
- 52
src/components/user/loginPage.vue Wyświetl plik

1
 <template>
1
 <template>
2
-  <!-- eslint-disable max-len -->
3
-  <div class="login-page">
4
-    <form id="signIn">
5
-      <div class="form">
6
-        <div>
7
-          <h4>Login</h4>
8
-        </div>
9
-        <div class="row">
10
-          <div>
11
-            <eva-icon name="lock-outline" fill="#60CBEB"></eva-icon>
12
-          </div>
13
-          <div class="col-md-11">
14
-            <input
15
-              class="form-control"
16
-              v-model="username"
17
-              placeholder="Username"
18
-              type="text"
19
-              name="username"
20
-              value
21
-            />
22
-          </div>
2
+  <div class="container">
3
+    <!-- eslint-disable max-len -->
4
+    <div class="login-page">
5
+      <form id="signIn">
6
+        <div class="form">
23
           <div>
7
           <div>
24
-            <eva-icon v-if="!showPassword" name="eye-off" fill="#60CBEB" @click="togglePassword()"></eva-icon>
25
-            <eva-icon v-else name="eye" fill="#60CBEB" @click="passwordToggled()"></eva-icon>
8
+            <h4>Login</h4>
26
           </div>
9
           </div>
27
-          <div class="col-md-11">
28
-            <input
29
-              class="form-control"
30
-              :type="isPasswordShown"
31
-              v-model="password"
32
-              id="password"
33
-              placeholder="Password"
34
-              name="password"
35
-              value
36
-            />
10
+          <div class="row">
11
+            <div>
12
+              <eva-icon name="lock-outline" fill="#60CBEB"></eva-icon>
13
+            </div>
14
+            <div class="col-md-11">
15
+              <input
16
+                class="form-control"
17
+                v-model="username"
18
+                placeholder="Username"
19
+                type="text"
20
+                name="username"
21
+                value
22
+              />
23
+            </div>
24
+            <div>
25
+              <eva-icon
26
+                v-if="!showPassword"
27
+                name="eye-off"
28
+                fill="#60CBEB"
29
+                @click="togglePassword()"
30
+              ></eva-icon>
31
+              <eva-icon v-else name="eye" fill="#60CBEB" @click="passwordToggled()"></eva-icon>
32
+            </div>
33
+            <div class="col-md-11">
34
+              <input
35
+                class="form-control"
36
+                :type="isPasswordShown"
37
+                v-model="password"
38
+                id="password"
39
+                placeholder="Password"
40
+                name="password"
41
+                value
42
+              />
43
+            </div>
37
           </div>
44
           </div>
45
+          <div class="form-group row"></div>
46
+          <button @click="Login" class="btn btn-b-n" type="submit">Sign In</button>
47
+          <p v-if="user !== null">{{ user }}</p>
38
         </div>
48
         </div>
39
-        <div class="form-group row"></div>
40
-        <button @click="Login" class="btn btn-b-n" type="submit">Sign In</button>
41
-        <p v-if="user !== null">{{ user }}</p>
42
-      </div>
43
-    </form>
49
+      </form>
44
 
50
 
45
-    <form id="forgot">
46
-      <div class="form">
47
-        <h5>Trouble signing in?</h5>
48
-        <div>
49
-          <div class="row">
50
-            <eva-icon name="email" fill="#60CBEB"></eva-icon>
51
+      <form id="forgot">
52
+        <div class="form">
53
+          <h5>Trouble signing in?</h5>
54
+          <div>
55
+            <div class="row">
56
+              <eva-icon name="email" fill="#60CBEB"></eva-icon>
51
 
57
 
52
-            <div class="col-md-11">
53
-              <input class="form-control" placeholder="Your Email" type="text" name="email" value />
58
+              <div class="col-md-11">
59
+                <input class="form-control" placeholder="Your Email" type="text" name="email" value />
60
+              </div>
54
             </div>
61
             </div>
55
           </div>
62
           </div>
63
+          <div class="form-group row"></div>
64
+          <div class="offset-md-3 col-md-5">
65
+            <button class="btn btn-b-n" type="submit">Get Help</button>
66
+          </div>
56
         </div>
67
         </div>
57
-        <div class="form-group row"></div>
58
-        <div class="offset-md-3 col-md-5">
59
-          <button class="btn btn-b-n" type="submit">Get Help</button>
60
-        </div>
61
-      </div>
62
-    </form>
68
+      </form>
69
+    </div>
63
   </div>
70
   </div>
64
 </template>
71
 </template>
65
 
72
 

+ 25
- 0
src/router/index.js Wyświetl plik

19
 import AboutTimeshare from '../components/about/aboutTimeshare.vue';
19
 import AboutTimeshare from '../components/about/aboutTimeshare.vue';
20
 
20
 
21
 import Status from '../components/admin/status/statusPage.vue';
21
 import Status from '../components/admin/status/statusPage.vue';
22
+import timeshareAdminPage from '../components/admin/status/timeshareAdminPage.vue';
23
+import tenderWeekAdminPage from '../components/admin/status/tenderWeekAdminPage.vue';
24
+import userManagementPage from '../components/admin/status/userManagementPage.vue';
25
+import changeLogPage from '../components/admin/status/changeLogPage.vue';
22
 import UnitConfiguration from '../components/admin/unitConfiguration/unitConfigurationPage.vue';
26
 import UnitConfiguration from '../components/admin/unitConfiguration/unitConfigurationPage.vue';
23
 
27
 
24
 import ResortPage from '../components/timeshare/resort/resortPage.vue';
28
 import ResortPage from '../components/timeshare/resort/resortPage.vue';
26
 
30
 
27
 import ContactUs from '../components/misc/contactUs.vue';
31
 import ContactUs from '../components/misc/contactUs.vue';
28
 
32
 
33
+
29
 Vue.use(Router);
34
 Vue.use(Router);
30
 
35
 
31
 export default new Router({
36
 export default new Router({
99
     name: 'StatusList',
104
     name: 'StatusList',
100
     component: Status,
105
     component: Status,
101
   },
106
   },
107
+  {
108
+    path: '/status/timeshareAdmin',
109
+    name: 'TimeshareAdmin',
110
+    component: timeshareAdminPage,
111
+  },
112
+  {
113
+    path: '/status/tenderWeekAdmin',
114
+    name: 'TenderWeekAdmin',
115
+    component: tenderWeekAdminPage,
116
+  },
117
+  {
118
+    path: '/status/userManagementPage',
119
+    name: 'userManagementPage',
120
+    component: userManagementPage,
121
+  },
122
+  {
123
+    path: '/status/changeLogPage',
124
+    name: 'changeLogPage',
125
+    component: changeLogPage,
126
+  },
102
   {
127
   {
103
     path: '/unitConfiguration/list',
128
     path: '/unitConfiguration/list',
104
     name: 'UnitConfiguration',
129
     name: 'UnitConfiguration',

+ 2
- 0
src/store/index.js Wyświetl plik

8
 import TimeshareBuyModule from './modules/timeshare/buyPage';
8
 import TimeshareBuyModule from './modules/timeshare/buyPage';
9
 import SearchTabModule from './modules/searchTab';
9
 import SearchTabModule from './modules/searchTab';
10
 import ResortModule from './modules/timeshare/resort';
10
 import ResortModule from './modules/timeshare/resort';
11
+import PropertyModule from './modules/property/property';
11
 import WeekModule from './modules/timeshare/week';
12
 import WeekModule from './modules/timeshare/week';
12
 
13
 
13
 Vue.use(Vuex);
14
 Vue.use(Vuex);
21
     timeshareBuy: TimeshareBuyModule,
22
     timeshareBuy: TimeshareBuyModule,
22
     searchTab: SearchTabModule,
23
     searchTab: SearchTabModule,
23
     resort: ResortModule,
24
     resort: ResortModule,
25
+    property: PropertyModule,
24
     week: WeekModule,
26
     week: WeekModule,
25
   },
27
   },
26
 });
28
 });

+ 107
- 0
src/store/modules/property/property.js Wyświetl plik

1
+import axios from 'axios';
2
+
3
+export default {
4
+  namespaced: true,
5
+  state: {
6
+    property: null,
7
+    propertyImages: [],
8
+    propertyTypes: [],
9
+    propertyTypesRes: [],
10
+    propertyTypesCom: [],
11
+    propertyOverviewFields: [],
12
+    propertyFields: [],
13
+    properties: [],
14
+  },
15
+  mutations: {
16
+    setProperty(state, property) {
17
+      state.property = property;
18
+    },
19
+    setPropertyImages(state, images) {
20
+      state.propertyImages = images;
21
+    },
22
+    setPropertyTypes(state, types) {
23
+      state.propertyTypes = types;
24
+    },
25
+    setPropertyTypesRes(state, types) {
26
+      state.propertyTypesRes = types;
27
+    },
28
+    setPropertyTypesCom(state, types) {
29
+      state.propertyTypesCom = types;
30
+    },
31
+    setPropertyOverviewFields(state, fields) {
32
+      state.propertyOverviewFields = fields;
33
+    },
34
+    setPropertyFields(state, fields) {
35
+      state.propertyFields = fields;
36
+    },
37
+    updateCurrentProperty(state, property) {
38
+      state.property = property;
39
+    },
40
+    updateSearch(state, propertySearch) {
41
+      state.properties = propertySearch;
42
+    },
43
+  },
44
+  getters: {},
45
+  actions: {
46
+    getProperty({ commit }, item) {
47
+      axios
48
+        .get(`http://localhost:57260/Property/Property/${item.id}`)
49
+        .then(result => commit('setProperty', result.data))
50
+        .catch(console.error);
51
+    },
52
+    getPropertyImages({ commit }, item) {
53
+      axios
54
+        .get(`http://localhost:57260/property/PropertyImage/getpropertyimages/${item.id}`)
55
+        .then(result => commit('setPropertyImages', result.data))
56
+        .catch(console.error);
57
+    },
58
+    getPropertyTypes({ commit }, item) {
59
+      axios
60
+        .get(`http://localhost:57260/Property/PropertyType/type/${item.propertyType}`)
61
+        .then(result => commit('setPropertyTypes', result.data))
62
+        .catch(console.error);
63
+    },
64
+    getPropertyTypesRes({ commit }) {
65
+      axios
66
+        .get('http://localhost:57260/Property/PropertyType/type/Residential')
67
+        .then(result => commit('setPropertyTypesRes', result.data))
68
+        .catch(console.error);
69
+    },
70
+    getPropertyTypesCom({ commit }) {
71
+      axios
72
+        .get('http://localhost:57260/Property/PropertyType/type/Commercial')
73
+        .then(result => commit('setPropertyTypesCom', result.data))
74
+        .catch(console.error);
75
+    },
76
+    getPropertyOverviewFields({ commit }) {
77
+      axios
78
+        .get('http://localhost:57260/Property/PropertyFields/Property Overview')
79
+        .then(response => commit('setPropertyOverviewFields', response.data));
80
+    },
81
+    getPropertyFields({ commit }, item) {
82
+      axios
83
+        .get(`http://localhost:57260/property/propertyfields/Propertytype/${item.propertyType}`)
84
+        .then(response => commit('setPropertyFields', response.data));
85
+    },
86
+    saveProperty({ commit }, item) {
87
+      axios
88
+        .post('http://localhost:57260/Property/Property', item.newProperty)
89
+        .then(result => commit('updateCurrentProperty', result.data))
90
+        .catch(console.error);
91
+    },
92
+    searchPropertiesParams({ commit }, item) {
93
+      axios
94
+        .get(
95
+          `http://localhost:57260/Property/Property/Search/${item.type}/${item.propertyType}/${item.province}/${item.city}/${item.suburb}/${item.propType}`,
96
+        )
97
+        .then(response => commit('updateSearch', response.data))
98
+        .catch(console.error);
99
+    },
100
+    searchPropertiesKeyword({ commit }, item) {
101
+      axios
102
+        .get(`http://localhost:57260/Property/Property/Search/Keyword/${item.keyword}`)
103
+        .then(response => commit('updateSearch', response.data))
104
+        .catch(console.error);
105
+    },
106
+  },
107
+};

+ 7
- 14
src/store/modules/searchTab.js Wyświetl plik

20
   },
20
   },
21
   getters: {},
21
   getters: {},
22
   actions: {
22
   actions: {
23
-    getProvince({
24
-      commit,
25
-    }) {
26
-      axios.get('http://localhost:57260/region/province')
23
+    getProvince({ commit }) {
24
+      axios
25
+        .get('http://localhost:57260/region/province')
27
         .then(result => commit('setProvince', result.data))
26
         .then(result => commit('setProvince', result.data))
28
         .catch(console.error);
27
         .catch(console.error);
29
     },
28
     },
30
-    getCities({
31
-      commit,
32
-    }, province) {
29
+    getCities({ commit }, item) {
33
       axios
30
       axios
34
-        .get(`http://localhost:57260/region/city/getby/${province}`)
31
+        .get(`http://localhost:57260/region/city/getby/${item.province}`)
35
         .then(result => commit('setCities', result.data));
32
         .then(result => commit('setCities', result.data));
36
     },
33
     },
37
-    getSuburbs({
38
-      commit,
39
-    }, item) {
34
+    getSuburbs({ commit }, item) {
40
       axios
35
       axios
41
-        .get(
42
-          `http://localhost:57260/region/Suburb/${item.province}/${item.city}`,
43
-        )
36
+        .get(`http://localhost:57260/region/Suburb/${item.province}/${item.city}`)
44
         .then(result => commit('setSuburbs', result.data));
37
         .then(result => commit('setSuburbs', result.data));
45
     },
38
     },
46
   },
39
   },

Ładowanie…
Anuluj
Zapisz