瀏覽代碼

Auto stash before merge of "master" and "origin/master"

User Fields and property changes
master
George Williams 5 年之前
父節點
當前提交
a44e5789d7

+ 0
- 1
src/components/admin/property/propertyTypeEdit.vue 查看文件

36
                 >
36
                 >
37
                   <option value="0">Residential</option>
37
                   <option value="0">Residential</option>
38
                   <option value="1">Commercial</option>
38
                   <option value="1">Commercial</option>
39
-                  <option value="2">Both</option>
40
                 </select>
39
                 </select>
41
               </div>
40
               </div>
42
             </div>
41
             </div>

+ 4
- 3
src/components/admin/property/propertyTypeList.vue 查看文件

24
             <th>Description</th>
24
             <th>Description</th>
25
             <th>Property Type</th>
25
             <th>Property Type</th>
26
             <th></th>
26
             <th></th>
27
+            <th></th>
27
           </tr>
28
           </tr>
28
         </thead>
29
         </thead>
29
         <tbody>
30
         <tbody>
30
           <tr v-for="(item, i) in propertyTypes" :key="i">
31
           <tr v-for="(item, i) in propertyTypes" :key="i">
31
             <td>{{ item.description }}</td>
32
             <td>{{ item.description }}</td>
32
             <td v-if="item.usageType === 0">Residential</td>
33
             <td v-if="item.usageType === 0">Residential</td>
33
-            <td v-else-if="item.usageType === 1">Commercial</td>
34
-            <td v-else>Both</td>
34
+            <td v-else>Commercial</td>
35
             <td>
35
             <td>
36
               <button
36
               <button
37
                 type="button"
37
                 type="button"
39
                 class="btn btn-b-n"
39
                 class="btn btn-b-n"
40
                 style="width: 85px; height:40px;"
40
                 style="width: 85px; height:40px;"
41
               >Edit</button>
41
               >Edit</button>
42
-              |
42
+            </td>
43
+            <td>
43
               <button
44
               <button
44
                 type="button"
45
                 type="button"
45
                 @click="Delete(item.id)"
46
                 @click="Delete(item.id)"

src/components/admin/property/userDefinedFieldPage.vue → src/components/admin/property/userDefinedField.vue 查看文件

66
 <script>
66
 <script>
67
 export default {
67
 export default {
68
   name: 'UserField',
68
   name: 'UserField',
69
+  props: {
70
+    field: {},
71
+  },
69
   data() {
72
   data() {
70
     return {
73
     return {
71
-      userField: {
72
-        fieldName: '',
73
-        fieldType: '',
74
-        rank: 0,
75
-      },
74
+      userField: {},
76
     };
75
     };
77
   },
76
   },
78
   mounted() {
77
   mounted() {
79
-    this.userField = this.$route.query.field;
78
+    if (this.field) {
79
+      this.userField = this.field;
80
+    }
80
   },
81
   },
81
   methods: {
82
   methods: {
82
     SubmitData() {
83
     SubmitData() {
83
-      //this.$emit();
84
+      this.$emit('UpdateUserField', this.userField);
84
     },
85
     },
85
   },
86
   },
86
 };
87
 };

+ 210
- 136
src/components/admin/property/userDefinedGroupPage.vue 查看文件

1
 <template>
1
 <template>
2
+  <!-- eslint-disable max-len -->
2
   <div>
3
   <div>
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
-              <h2 class="title-single">User Defined Group</h2>
4
+    <div v-if="showField === false">
5
+      <section class="intro-single">
6
+        <div class="container">
7
+          <div class="row">
8
+            <div class="col-md-12 col-lg-8">
9
+              <div class="title-single-box">
10
+                <h2 class="title-single">User Defined Group</h2>
11
+              </div>
9
             </div>
12
             </div>
10
           </div>
13
           </div>
11
         </div>
14
         </div>
12
-      </div>
13
-    </section>
14
-    <div class="container">
15
-      <div class="row mb-3">
16
-        <div class="col-md-12">
17
-          <form id="mainForm">
18
-            <div v-if="userDefinedGroup" class="form-group row">
19
-              <div class="col-md-4">
20
-                <label>Description</label>
21
-                <input
22
-                  class="form-control"
23
-                  type="text"
24
-                  name="description"
25
-                  id="description"
26
-                  v-model="userDefinedGroup.description"
27
-                />
28
-              </div>
29
-              <div class="col-md-4">
30
-                <label>Property Type</label>
31
-                <select
32
-                  class="form-control"
33
-                  name="UsageType"
34
-                  id="UsageType"
35
-                  v-model="userDefinedGroup.usageType"
36
-                >
37
-                  <option value="0">Residential</option>
38
-                  <option value="1">Commercial</option>
39
-                  <option value="2">Both</option>
40
-                </select>
41
-              </div>
42
-              <div class="col-md-4">
43
-                <label>Order</label>
44
-                <input
45
-                  class="form-control"
46
-                  type="number"
47
-                  name="rank"
48
-                  id="rank"
49
-                  v-model="userDefinedGroup.rank"
50
-                />
51
-              </div>
52
-            </div>
53
-            <div v-if="!userDefinedGroup" class="form-group row">
54
-              <div class="col-md-4">
55
-                <label>Description</label>
56
-                <input
57
-                  class="form-control"
58
-                  type="text"
59
-                  name="description"
60
-                  id="description"
61
-                  v-model="group.description"
62
-                />
63
-              </div>
64
-              <div class="col-md-4">
65
-                <label>Property Type</label>
66
-                <select
67
-                  class="form-control"
68
-                  name="UsageType"
69
-                  id="UsageType"
70
-                  v-model="group.usageType"
71
-                >
72
-                  <option value="0">Residential</option>
73
-                  <option value="1">Commercial</option>
74
-                  <option value="2">Both</option>
75
-                </select>
15
+      </section>
16
+      <div class="container">
17
+        <div class="row mb-3">
18
+          <div class="col-md-12">
19
+            <form id="mainForm">
20
+              <div v-if="userDefinedGroup" class="form-group row">
21
+                <div class="col-md-4">
22
+                  <label>Description</label>
23
+                  <input
24
+                    class="form-control"
25
+                    type="text"
26
+                    name="description"
27
+                    id="description"
28
+                    v-model="userDefinedGroup.description"
29
+                  />
30
+                </div>
31
+                <div class="col-md-4">
32
+                  <label>Property Type</label>
33
+                  <select
34
+                    class="form-control"
35
+                    name="UsageType"
36
+                    id="UsageType"
37
+                    v-model="userDefinedGroup.usageType"
38
+                  >
39
+                    <option value="0">Residential</option>
40
+                    <option value="1">Commercial</option>
41
+                    <option value="2">Both</option>
42
+                  </select>
43
+                </div>
44
+                <div class="col-md-4">
45
+                  <label>Order</label>
46
+                  <input
47
+                    class="form-control"
48
+                    type="number"
49
+                    name="rank"
50
+                    id="rank"
51
+                    v-model="userDefinedGroup.rank"
52
+                  />
53
+                </div>
76
               </div>
54
               </div>
77
-              <div class="col-md-4">
78
-                <label>Order</label>
79
-                <input
80
-                  class="form-control"
81
-                  type="number"
82
-                  name="rank"
83
-                  id="rank"
84
-                  v-model="group.rank"
85
-                />
55
+              <div v-if="!userDefinedGroup" class="form-group row">
56
+                <div class="col-md-4">
57
+                  <label>Description</label>
58
+                  <input
59
+                    class="form-control"
60
+                    type="text"
61
+                    name="description"
62
+                    id="description"
63
+                    v-model="group.description"
64
+                  />
65
+                </div>
66
+                <div class="col-md-4">
67
+                  <label>Property Type</label>
68
+                  <select
69
+                    class="form-control"
70
+                    name="UsageType"
71
+                    id="UsageType"
72
+                    v-model="group.usageType"
73
+                  >
74
+                    <option value="0">Residential</option>
75
+                    <option value="1">Commercial</option>
76
+                    <option value="2">Both</option>
77
+                  </select>
78
+                </div>
79
+                <div class="col-md-4">
80
+                  <label>Order</label>
81
+                  <input
82
+                    class="form-control"
83
+                    type="number"
84
+                    name="rank"
85
+                    id="rank"
86
+                    v-model="group.rank"
87
+                  />
88
+                </div>
86
               </div>
89
               </div>
87
-            </div>
88
-          </form>
90
+            </form>
91
+          </div>
89
         </div>
92
         </div>
90
       </div>
93
       </div>
91
-    </div>
92
-    <div class="container">
94
+      <div class="container">
95
+        <button
96
+          type="button"
97
+          @click="newItem()"
98
+          class="btn btn-b-n"
99
+          style="width: 85px; height:40px;"
100
+        >New</button>
101
+        <br />
102
+        <table class="table table-bordered">
103
+          <thead>
104
+            <tr>
105
+              <th>Field Name</th>
106
+              <th>Field Type</th>
107
+              <th>Order</th>
108
+              <th></th>
109
+              <th></th>
110
+            </tr>
111
+          </thead>
112
+          <tbody>
113
+            <tr v-for="(item, i) in userFields" :key="i">
114
+              <td>{{item.fieldName}}</td>
115
+              <td v-if="item.fieldType === 'text'">Text</td>
116
+              <td v-else-if="item.fieldType === 'number'">Number</td>
117
+              <td v-else>Yes / No</td>
118
+              <td>{{item.rank}}</td>
119
+              <td>
120
+                <button
121
+                  type="button"
122
+                  @click="Edit(item)"
123
+                  class="btn btn-b-n"
124
+                  style="width: 85px; height:40px;"
125
+                >Edit</button>
126
+              </td>
127
+              <td>
128
+                <button
129
+                  type="button"
130
+                  @click="Delete(item)"
131
+                  class="btn btn-b-n"
132
+                  style="width: 85px; height:40px;"
133
+                >Delete</button>
134
+              </td>
135
+            </tr>
136
+          </tbody>
137
+        </table>
138
+      </div>
139
+      <button
140
+        type="button"
141
+        @click="SubmitData()"
142
+        class="btn btn-b-n"
143
+        style="width: 85px; height:40px;"
144
+      >Save</button>
93
       <button
145
       <button
94
         type="button"
146
         type="button"
95
-        @click="newItem()"
147
+        @click="Close()"
96
         class="btn btn-b-n"
148
         class="btn btn-b-n"
97
         style="width: 85px; height:40px;"
149
         style="width: 85px; height:40px;"
98
-      >New</button>
99
-      <br />
100
-      <table class="table table-bordered">
101
-        <thead>
102
-          <tr>
103
-            <th>Field Name</th>
104
-            <th>Field Type</th>
105
-            <th>Order</th>
106
-            <th></th>
107
-          </tr>
108
-        </thead>
109
-        <tbody>
110
-          <tr v-for="(item, i) in userFields" :key="i">
111
-            <td>{{item.fieldName}}</td>
112
-            <td>{{item.fieldType}}</td>
113
-            <td>{{item.rank}}</td>
114
-            <td>
115
-              <router-link :to="{ name: 'UserDefinedField', query: { field: item }}">Edit</router-link>
116
-              <!-- <router-link :to="`/userField`">Edit</router-link>| Delete -->
117
-            </td>
118
-          </tr>
119
-        </tbody>
120
-      </table>
150
+      >Close</button>
151
+    </div>
152
+    <div v-else>
153
+      <userFields @UpdateUserField="UpdateUserField" :field="item" />
121
     </div>
154
     </div>
122
-    <button
123
-      type="button"
124
-      @click="SubmitData()"
125
-      class="btn btn-b-n"
126
-      style="width: 85px; height:40px;"
127
-    >Save</button>
128
   </div>
155
   </div>
129
 </template>
156
 </template>
130
 
157
 
131
 <script>
158
 <script>
132
 import { mapState, mapActions } from 'vuex';
159
 import { mapState, mapActions } from 'vuex';
160
+import userFields from './userDefinedField.vue';
133
 
161
 
134
 export default {
162
 export default {
135
   name: 'UserDefinedGroup',
163
   name: 'UserDefinedGroup',
164
+  components: {
165
+    userFields,
166
+  },
136
   data() {
167
   data() {
137
     return {
168
     return {
138
-      group: {
139
-        description: '',
140
-        usageType: 0,
141
-        rank: 0,
142
-      },
169
+      item: {},
170
+      showField: false,
143
     };
171
     };
144
   },
172
   },
145
   mounted() {
173
   mounted() {
174
+    this.clearUserFields();
175
+    this.clearUserGroup();
176
+
146
     if (this.$route.params.id > 0) {
177
     if (this.$route.params.id > 0) {
147
-      this.getUserDefinedGroup(
148
-        Object.assign({}, { id: this.$route.params.id }),
149
-      );
150
-      this.getUserFields(Object.assign({}, { groupId: this.$route.params.id }));
178
+      this.getUserDefinedGroup(this.$route.params.id);
179
+      this.getUserFields(this.$route.params.id);
151
     }
180
     }
152
   },
181
   },
153
   computed: {
182
   computed: {
154
-    ...mapState('propertyAdmin', ['userDefinedGroup', 'userFields']),
183
+    ...mapState('propertyAdmin', [
184
+      'userDefinedGroup',
185
+      'userFields',
186
+      'userField',
187
+    ]),
155
   },
188
   },
156
   methods: {
189
   methods: {
157
     ...mapActions('propertyAdmin', [
190
     ...mapActions('propertyAdmin', [
159
       'getUserFields',
192
       'getUserFields',
160
       'saveUserDefinedGroup',
193
       'saveUserDefinedGroup',
161
       'updateUserDefinedGroup',
194
       'updateUserDefinedGroup',
195
+      'clearUserGroup',
196
+      'clearUserFields',
197
+      'clearUserField',
198
+      'saveUserField',
199
+      'updateUserField',
200
+      'deleteUserField',
162
     ]),
201
     ]),
163
     SubmitData() {
202
     SubmitData() {
203
+      this.userDefinedGroup.fields = [];
204
+      let reload = false;
164
       if (this.$route.params.id > 0) {
205
       if (this.$route.params.id > 0) {
165
-        this.updateUserDefinedGroup(
166
-          Object.assign({}, { group: this.userDefinedGroup }),
167
-        );
206
+        this.updateUserDefinedGroup(this.userDefinedGroup);
207
+        this.userFields.forEach((fieldData) => {
208
+          if (fieldData.id === 0) {
209
+            fieldData.groupId = this.userDefinedGroup.id;
210
+            this.saveUserField(fieldData);
211
+          } else {
212
+            this.updateUserField(fieldData);
213
+          }
214
+        });
168
       } else {
215
       } else {
169
-        this.saveUserDefinedGroup(Object.assign({}, { group: this.group }));
216
+        reload = true;
217
+        this.userFields.forEach((fieldData) => {
218
+          this.userDefinedGroup.fields.push({
219
+            fieldName: fieldData.fieldName,
220
+            fieldType: fieldData.fieldType,
221
+            rank: fieldData.rank,
222
+          });
223
+        });
224
+        this.saveUserDefinedGroup(this.userDefinedGroup);
170
       }
225
       }
171
       this.$router.push('/userDefinedGroups/list');
226
       this.$router.push('/userDefinedGroups/list');
227
+      // this.$router.push({
228
+      //   path: '/userDefinedGroups/list',
229
+      //   query: { reload },
230
+      // });
172
     },
231
     },
173
     newItem() {
232
     newItem() {
174
-      const newField = {
175
-        fieldName: '',
176
-        fieldType: 'Text',
177
-        rank: 0,
178
-      };
179
-      this.$router.push({
180
-        path: '/userField',
181
-        query: { field: newField },
182
-      });
233
+      this.clearUserField();
234
+      this.item = this.userField;
235
+      this.item.groupId = this.userDefinedGroup.id;
236
+      this.showField = true;
237
+    },
238
+    Edit(item) {
239
+      this.item = item;
240
+      this.showField = true;
241
+    },
242
+    Close() {
243
+      this.$router.push('/userDefinedGroups/list');
244
+    },
245
+    UpdateUserField(item) {
246
+      if (item.id === 0) {
247
+        this.userFields.push(item);
248
+      }
249
+      this.showField = false;
250
+    },
251
+    Delete(item) {
252
+      if (item.id === 0) {
253
+        this.userFields.pop(this.userFields.find(p => p.id === item.id));
254
+      } else {
255
+        this.deleteUserField(item.id);
256
+      }
183
     },
257
     },
184
   },
258
   },
185
 };
259
 };

+ 31
- 7
src/components/admin/property/userDefinedGroupsPage.vue 查看文件

1
 <template>
1
 <template>
2
+  <!-- eslint-disable max-len -->
2
   <div>
3
   <div>
3
     <section class="intro-single">
4
     <section class="intro-single">
4
       <div class="container">
5
       <div class="container">
12
       </div>
13
       </div>
13
     </section>
14
     </section>
14
     <div class="container">
15
     <div class="container">
15
-      <router-link :to="`/userDefinedGroups/userDefinedGroup`">New</router-link>
16
+      <button type="button" @click="New()" class="btn btn-b-n" style="width: 85px; height:40px;">New</button>
16
       <table class="table table-bordered">
17
       <table class="table table-bordered">
17
         <thead>
18
         <thead>
18
           <tr>
19
           <tr>
31
             <td v-else>Both</td>
32
             <td v-else>Both</td>
32
             <td>{{item.rank}}</td>
33
             <td>{{item.rank}}</td>
33
             <td>
34
             <td>
34
-              <router-link :to="`/userDefinedGroups/userDefinedGroup/${item.id}`">Edit</router-link>
35
+              <button
36
+                type="button"
37
+                @click="Edit(item.id)"
38
+                class="btn btn-b-n"
39
+                style="width: 85px; height:40px;"
40
+              >Edit</button>
35
             </td>
41
             </td>
36
             <td>
42
             <td>
37
-              <button>Delete</button>
43
+              <button
44
+                type="button"
45
+                @click="Delete(item)"
46
+                class="btn btn-b-n"
47
+                style="width: 85px; height:40px;"
48
+              >Delete</button>
38
             </td>
49
             </td>
39
           </tr>
50
           </tr>
40
         </tbody>
51
         </tbody>
47
 
58
 
48
 export default {
59
 export default {
49
   name: 'UserDefinedGroup',
60
   name: 'UserDefinedGroup',
50
-  created() {
61
+  mounted() {
51
     this.getUserDefinedGroups();
62
     this.getUserDefinedGroups();
52
   },
63
   },
53
   computed: {
64
   computed: {
54
     ...mapState('propertyAdmin', ['userDefinedGroups']),
65
     ...mapState('propertyAdmin', ['userDefinedGroups']),
55
   },
66
   },
56
   methods: {
67
   methods: {
57
-    ...mapActions('propertyAdmin', ['getUserDefinedGroups']),
68
+    ...mapActions('propertyAdmin', [
69
+      'getUserDefinedGroups',
70
+      'deleteUserDefinedGroup',
71
+    ]),
72
+    New() {
73
+      this.$router.push('/userDefinedGroups/userDefinedGroup');
74
+    },
75
+    Edit(id) {
76
+      this.$router.push(`/userDefinedGroups/userDefinedGroup/${id}`);
77
+    },
78
+    Delete(item) {
79
+      if (item.id === 0) {
80
+        this.userDefinedGroups.pop(item);
81
+      }
82
+      this.deleteUserDefinedGroup(item.id);
83
+    },
58
   },
84
   },
59
 };
85
 };
60
 </script>
86
 </script>
61
-<style>
62
-</style>

+ 12
- 1
src/components/property/propertyImage.vue 查看文件

16
     <br />
16
     <br />
17
     <div class="form-group row">
17
     <div class="form-group row">
18
       <div v-for="(img, i) in image" class="col-md-2" :key="i">
18
       <div v-for="(img, i) in image" class="col-md-2" :key="i">
19
+        <input type="checkbox" id="checkbox" v-model="imagesDefault[i]" @change="updateList(i)" />
20
+        <label for="checkbox" style="margin: 10px;">Main Image</label>
19
         <img :src="img" style="height:200px; width:150px; object-fit: cover;" />
21
         <img :src="img" style="height:200px; width:150px; object-fit: cover;" />
20
         <br />
22
         <br />
21
         <a class="fa fa-times del" @click="removeImage(key)" />
23
         <a class="fa fa-times del" @click="removeImage(key)" />
35
     return {
37
     return {
36
       images: {},
38
       images: {},
37
       image: [],
39
       image: [],
40
+      imagesDefault: [],
38
     };
41
     };
39
   },
42
   },
40
   mounted() {
43
   mounted() {
61
 
64
 
62
         reader.onload = (e) => {
65
         reader.onload = (e) => {
63
           vm.image.push(e.target.result);
66
           vm.image.push(e.target.result);
64
-          console.log(vm.image);
65
         };
67
         };
66
         reader.readAsDataURL(file[i]);
68
         reader.readAsDataURL(file[i]);
67
       }
69
       }
75
         this.$refs.im.value = '';
77
         this.$refs.im.value = '';
76
       }
78
       }
77
     },
79
     },
80
+
81
+    updateList(index) {
82
+      for (let i = 0; i < this.imagesDefault.length; i++) {
83
+        if (i !== index) {
84
+          this.imagesDefault[i] = false;
85
+        }
86
+      }
87
+      this.$emit('DefaultImage', index);
88
+    },
78
   },
89
   },
79
 };
90
 };
80
 </script>
91
 </script>

+ 8
- 1
src/components/property/propertyPage.vue 查看文件

245
     ...mapState('property', ['property', 'propertyImages']),
245
     ...mapState('property', ['property', 'propertyImages']),
246
   },
246
   },
247
   methods: {
247
   methods: {
248
-    ...mapActions('property', ['getProperty', 'getPropertyImages']),
248
+    ...mapActions('property', [
249
+      'getProperty',
250
+      'getPropertyImages',
251
+      'clearPropertyImages',
252
+    ]),
249
     formatPrice(value) {
253
     formatPrice(value) {
250
       const val = (value / 1).toFixed(2);
254
       const val = (value / 1).toFixed(2);
251
       return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
255
       return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
257
       return '';
261
       return '';
258
     },
262
     },
259
   },
263
   },
264
+  beforeDestroy() {
265
+    this.clearPropertyImages();
266
+  },
260
 };
267
 };
261
 </script>
268
 </script>
262
 
269
 

+ 5
- 0
src/components/property/propertyUserField.vue 查看文件

56
       this.$emit('UpdateUserDefinedFields', item);
56
       this.$emit('UpdateUserDefinedFields', item);
57
     },
57
     },
58
   },
58
   },
59
+  // mounted() {
60
+  //   for (let i = 0; i < this.fields.length; i++) {
61
+  //     console.log(`${this.fields[i].name  } ${  this.fields[i].value}`);
62
+  //   }
63
+  // },
59
 };
64
 };
60
 </script>
65
 </script>

+ 47
- 23
src/components/property/propertyeditPage.vue 查看文件

220
                 </div>
220
                 </div>
221
               </div>
221
               </div>
222
             </div>
222
             </div>
223
-            <ImageLoad :loadedImages="loadedImages" :savedImages="propertyImages" />
223
+            <ImageLoad
224
+              :loadedImages="loadedImages"
225
+              :savedImages="propertyImages"
226
+              @DefaultImage="UpdateDefaultImage"
227
+            />
224
             <button
228
             <button
225
               type="button"
229
               type="button"
226
               @click="SubmitData()"
230
               @click="SubmitData()"
255
       selectedCity: '',
259
       selectedCity: '',
256
       images: [],
260
       images: [],
257
       propertyFieldValues: [],
261
       propertyFieldValues: [],
262
+      defaultImage: 0,
258
     };
263
     };
259
   },
264
   },
260
   methods: {
265
   methods: {
266
       'saveProperty',
271
       'saveProperty',
267
       'getProperty',
272
       'getProperty',
268
       'getPropertyImages',
273
       'getPropertyImages',
274
+      'clearProperty',
275
+      'clearPropertyImages',
276
+      'getPropertyEditDisplay',
277
+      'getPropertySavedOverviewFields',
278
+      'getPropertySavedFields',
269
     ]),
279
     ]),
270
     SubmitData() {
280
     SubmitData() {
271
-      let isDefault = true;
272
-      this.images.forEach((imagedata) => {
281
+      for (let i = 0; i < this.images.length; i++) {
282
+        let setAsDefault = false;
283
+        if (i === this.defaultImage) {
284
+          setAsDefault = true;
285
+        }
273
         this.property.propertyImages.push({
286
         this.property.propertyImages.push({
274
-          image: imagedata,
275
-          isDefault,
287
+          image: this.images[i],
288
+          isDefault: setAsDefault,
276
         });
289
         });
277
-        isDefault = false;
278
-      });
279
-      this.property.propertyUserFields = this.propertyFieldValues;
290
+      }
280
 
291
 
281
       this.saveProperty(this.property);
292
       this.saveProperty(this.property);
282
 
293
 
321
         this.propertyFieldValues.push(item);
332
         this.propertyFieldValues.push(item);
322
       }
333
       }
323
     },
334
     },
335
+    UpdateDefaultImage(item) {
336
+      this.defaultImage = item;
337
+    },
324
   },
338
   },
325
   mounted() {
339
   mounted() {
340
+    this.clearProperty();
341
+    this.clearPropertyImages();
342
+    this.images = [];
343
+    this.defaultImage = 0;
344
+    // if (this.$route.params.id) {
345
+    //   this.getPropertyEditDisplay(4); // (this.$route.params.id);
346
+    //   this.propertyType = 'Residential'; // this.propertyEditDisplay.propertyType;
347
+    //   this.salesType = 'Rental'; // this.propertyEditDisplay.saleType;
348
+
349
+    //   this.getProvince();
350
+    //   this.getPropertyTypes('Residential');
351
+    //   this.getPropertySavedOverviewFields(4);
352
+    //   this.getPropertySavedFields(
353
+    //     Object.assign(
354
+    //       {},
355
+    //       {
356
+    //         type: 'Residential',
357
+    //         id: 4,
358
+    //       },
359
+    //     ),
360
+    //   );
361
+
362
+    //   this.getProperty(this.$route.params.id);
363
+    // } else {
326
     this.propertyType = this.$route.params.propType;
364
     this.propertyType = this.$route.params.propType;
327
     this.salesType = this.$route.params.saleType;
365
     this.salesType = this.$route.params.saleType;
328
 
366
 
330
     this.getPropertyTypes(this.$route.params.propType);
368
     this.getPropertyTypes(this.$route.params.propType);
331
     this.getPropertyOverviewFields();
369
     this.getPropertyOverviewFields();
332
     this.getPropertyFields(this.$route.params.propType);
370
     this.getPropertyFields(this.$route.params.propType);
333
-
334
-    // if (this.$route.params.id) {
335
-    //   this.getProperty(this.$route.params.id);
336
-    //   this.getPropertyImages(this.$route.params.id);
337
     // }
371
     // }
338
-    /*
339
-    if (this.$route.params.id) {
340
-      this.getProperty(this.$route.params.id);
341
-      this.getPropertyImages(this.$route.params.id);
342
-      if (this.property.propertyType.usageType === 0) {
343
-        this.propertyType = 'Residential';
344
-      } else {
345
-        this.propertyType = 'Commercial';
346
-      }
347
-      this.salesType = this.property.isSale ? 'Sale' : 'Rental';
348
-    } */
349
   },
372
   },
350
   computed: {
373
   computed: {
351
     ...mapState('searchTab', ['provinces', 'cities', 'suburbs']),
374
     ...mapState('searchTab', ['provinces', 'cities', 'suburbs']),
355
       'propertyFields',
378
       'propertyFields',
356
       'property',
379
       'property',
357
       'propertyImages',
380
       'propertyImages',
381
+      'propertyEditDisplay',
358
     ]),
382
     ]),
359
     SalesTypeChanged() {
383
     SalesTypeChanged() {
360
       // eslint-disable-next-line vue/no-side-effects-in-computed-properties
384
       // eslint-disable-next-line vue/no-side-effects-in-computed-properties

+ 0
- 206
src/router/index.js 查看文件

1
-import Vue from 'vue';
2
-import Router from 'vue-router';
3
-
4
-import HomePage from '../components/home/homePage.vue';
5
-
6
-import TimeshareBuy from '../components/timeshare/buy/buyPage.vue';
7
-import TimeshareSell from '../components/timeshare/sell/sellPage.vue';
8
-import TimeshareFAQ from '../components/timeshare/faqPage.vue';
9
-
10
-import Login from '../components/user/loginPage.vue';
11
-import PrivateIndividual from '../components/user/registerPage.vue';
12
-import Agency from '../components/user/registerAgencySection.vue';
13
-
14
-import PropertySearch from '../components/property/propertySearchPage.vue';
15
-import PropertyPage from '../components/property/propertyPage.vue';
16
-import PropertyEdit from '../components/property/propertyeditPage.vue';
17
-import PropertyList from '../components/property/propertyList.vue';
18
-import PropertyTypeList from '../components/admin/property/propertyTypeList.vue';
19
-import PropertyType from '../components/admin/property/propertyTypeEdit.vue';
20
-import UserDefinedGroups from '../components/admin/property/userDefinedGroupsPage.vue';
21
-import UserDefinedGroup from '../components/admin/property/userDefinedGroupPage.vue';
22
-import UserField from '../components/admin/property/userDefinedFieldPage.vue';
23
-
24
-import AboutUs from '../components/about/aboutUsPage.vue';
25
-import AboutTimeshare from '../components/about/aboutTimeshare.vue';
26
-
27
-import Status from '../components/admin/status/statusPage.vue';
28
-import timeshareAdminPage from '../components/admin/status/timeshareAdminPage.vue';
29
-import tenderWeekAdminPage from '../components/admin/status/tenderWeekAdminPage.vue';
30
-import userManagementPage from '../components/admin/status/userManagementPage.vue';
31
-import changeLogPage from '../components/admin/status/changeLogPage.vue';
32
-import UnitConfiguration from '../components/admin/unitConfiguration/unitConfigurationPage.vue';
33
-
34
-import ResortPage from '../components/timeshare/resort/resortPage.vue';
35
-import UnitPage from '../components/timeshare/resort/unitPage.vue';
36
-
37
-import ContactUs from '../components/misc/contactUs.vue';
38
-import PrivacyPolicy from '../components/misc/privacyPolicyPage.vue';
39
-
40
-Vue.use(Router);
41
-
42
-export default new Router({
43
-  routes: [{
44
-    path: '/',
45
-    name: 'Home',
46
-    component: HomePage,
47
-  },
48
-  {
49
-    path: '/about/us',
50
-    name: 'aboutus',
51
-    component: AboutUs,
52
-  },
53
-  {
54
-    path: '/about/timeshare',
55
-    name: 'abouttimeshare',
56
-    component: AboutTimeshare,
57
-  },
58
-  {
59
-    path: '/timeshare/sell',
60
-    name: 'TimeshareSell',
61
-    component: TimeshareSell,
62
-  },
63
-  {
64
-    path: '/timeshare/buy',
65
-    name: 'TimeshareBuy',
66
-    component: TimeshareBuy,
67
-  },
68
-  {
69
-    path: '/timeshare/faq',
70
-    name: 'TimeshareFAQ',
71
-    component: TimeshareFAQ,
72
-  },
73
-  {
74
-    path: '/user/login',
75
-    name: 'Login',
76
-    component: Login,
77
-  },
78
-  {
79
-    path: '/user/register',
80
-    name: 'PrivateIndividual',
81
-    component: PrivateIndividual,
82
-  },
83
-  {
84
-    path: '/user/registeragency',
85
-    name: 'Agency',
86
-    component: Agency,
87
-  },
88
-  {
89
-    path: '/property/property/:id',
90
-    name: 'PropertyPage',
91
-    component: PropertyPage,
92
-  },
93
-  {
94
-    path: '/property/:propertyType/search',
95
-    name: 'PropertySearch',
96
-    component: PropertySearch,
97
-  },
98
-  {
99
-    path: '/property/search',
100
-    name: 'PropertySearchTab',
101
-    component: PropertySearch,
102
-  },
103
-  {
104
-    path: '/property/:propType/:saleType',
105
-    name: 'PropertyNew',
106
-    component: PropertyEdit,
107
-  },
108
-  {
109
-    path: '/property/:id',
110
-    name: 'PropertyEdit',
111
-    component: PropertyEdit,
112
-  },
113
-  {
114
-    path: '/property/list/:propertyType/:user',
115
-    name: 'PropertyList',
116
-    component: PropertyList,
117
-  },
118
-  {
119
-    path: '/propertyTypes/list',
120
-    name: 'PropertyTypeList',
121
-    component: PropertyTypeList,
122
-  },
123
-  {
124
-    path: '/propertyType/new',
125
-    name: 'PropertyTypeNew',
126
-    component: PropertyType,
127
-  },
128
-  {
129
-    path: '/propertyType/:id',
130
-    name: 'PropertyTypeEdit',
131
-    component: PropertyType,
132
-  },
133
-  {
134
-    path: '/userDefinedGroups/list',
135
-    name: 'UserDefinedGroupsList',
136
-    component: UserDefinedGroups,
137
-  },
138
-  {
139
-    path: '/userDefinedGroups/userDefinedGroup/:id',
140
-    name: 'UserDefinedGroupEdit',
141
-    component: UserDefinedGroup,
142
-  },
143
-  {
144
-    path: '/userDefinedGroups/userDefinedGroup',
145
-    name: 'UserDefinedGroupNew',
146
-    component: UserDefinedGroup,
147
-  },
148
-  {
149
-    path: '/userField',
150
-    name: 'UserDefinedField',
151
-    component: UserField,
152
-  },
153
-  {
154
-    path: '/status/list',
155
-    name: 'StatusList',
156
-    component: Status,
157
-  },
158
-  {
159
-    path: '/status/timeshareAdmin',
160
-    name: 'TimeshareAdmin',
161
-    component: timeshareAdminPage,
162
-  },
163
-  {
164
-    path: '/status/tenderWeekAdmin',
165
-    name: 'TenderWeekAdmin',
166
-    component: tenderWeekAdminPage,
167
-  },
168
-  {
169
-    path: '/status/userManagementPage',
170
-    name: 'userManagementPage',
171
-    component: userManagementPage,
172
-  },
173
-  {
174
-    path: '/status/changeLogPage',
175
-    name: 'changeLogPage',
176
-    component: changeLogPage,
177
-  },
178
-  {
179
-    path: '/unitConfiguration/list',
180
-    name: 'UnitConfiguration',
181
-    component: UnitConfiguration,
182
-  },
183
-  {
184
-    path: '/contactus',
185
-    name: 'ContactUs',
186
-    component: ContactUs,
187
-  },
188
-  {
189
-    path: '/privacypolicy',
190
-    name: 'PrivacyPolicy',
191
-    component: PrivacyPolicy,
192
-  },
193
-  {
194
-    path: '/resort/:resortCode',
195
-    name: 'ResortPage',
196
-    component: ResortPage,
197
-    props: true,
198
-  },
199
-  {
200
-    path: '/resort/:resortCode/:weekId',
201
-    name: 'UnitPage',
202
-    component: UnitPage,
203
-    props: true,
204
-  },
205
-  ],
206
-});

+ 109
- 6
src/store/modules/property/property.js 查看文件

4
   namespaced: true,
4
   namespaced: true,
5
   state: {
5
   state: {
6
     property: {
6
     property: {
7
-      id: 0,
7
+      createdBy: '',
8
       propertyTypeId: 0,
8
       propertyTypeId: 0,
9
       propertyName: '',
9
       propertyName: '',
10
       unit: '',
10
       unit: '',
11
+      operationalCosts: 0.0,
12
+      price: 0,
13
+      pricePer: '',
14
+      isSale: false,
15
+      description: '',
16
+      shortDescription: '',
11
       addressLine1: '',
17
       addressLine1: '',
12
       addressLine2: '',
18
       addressLine2: '',
13
       addressLine3: '',
19
       addressLine3: '',
14
       suburbId: 0,
20
       suburbId: 0,
15
       cityId: 0,
21
       cityId: 0,
16
       provinceId: 0,
22
       provinceId: 0,
17
-      price: '',
18
-      per: '',
19
-      description: '',
20
-      isSale: false,
23
+      published: false,
24
+      propertyType: {
25
+        description: '',
26
+        usageType: 0,
27
+        id: 2,
28
+      },
29
+      province: {
30
+        description: '',
31
+        code: '',
32
+        id: 0,
33
+      },
34
+      city: {
35
+        provinceId: 0,
36
+        description: '',
37
+        code: '',
38
+      },
39
+      suburb: {
40
+        cityId: 0,
41
+        description: '',
42
+      },
21
       propertyUserFields: [],
43
       propertyUserFields: [],
22
       propertyImages: [],
44
       propertyImages: [],
45
+      id: 0,
23
     },
46
     },
24
     propertyImages: [],
47
     propertyImages: [],
25
     propertyTypes: [],
48
     propertyTypes: [],
29
     propertyFields: [],
52
     propertyFields: [],
30
     properties: [],
53
     properties: [],
31
     latestProperties: [],
54
     latestProperties: [],
55
+    propertyEditDisplay: {
56
+      propertyType: '',
57
+      saleType: '',
58
+    },
32
   },
59
   },
33
   mutations: {
60
   mutations: {
34
     setProperty(state, property) {
61
     setProperty(state, property) {
61
     setLatestProperties(state, properties) {
88
     setLatestProperties(state, properties) {
62
       state.latestProperties = properties;
89
       state.latestProperties = properties;
63
     },
90
     },
91
+    clearProperty(state) {
92
+      state.property = {
93
+        createdBy: '',
94
+        propertyTypeId: 0,
95
+        propertyName: '',
96
+        unit: '',
97
+        operationalCosts: 0.0,
98
+        price: 0,
99
+        pricePer: '',
100
+        isSale: false,
101
+        description: '',
102
+        shortDescription: '',
103
+        addressLine1: '',
104
+        addressLine2: '',
105
+        addressLine3: '',
106
+        suburbId: 0,
107
+        cityId: 0,
108
+        provinceId: 0,
109
+        published: false,
110
+        propertyType: {
111
+          description: '',
112
+          usageType: 0,
113
+          id: 2,
114
+        },
115
+        province: {
116
+          description: '',
117
+          code: '',
118
+          id: 0,
119
+        },
120
+        city: {
121
+          provinceId: 0,
122
+          description: '',
123
+          code: '',
124
+        },
125
+        suburb: {
126
+          cityId: 0,
127
+          description: '',
128
+        },
129
+        propertyUserFields: [],
130
+        propertyImages: [],
131
+        id: 0,
132
+      };
133
+    },
134
+    clearPropertyImages(state) {
135
+      state.propertyImages = [];
136
+    },
137
+    setPropertyEditDisplay(state, item) {
138
+      state.propertyEditDisplay = item;
139
+    },
64
   },
140
   },
65
   getters: {},
141
   getters: {},
66
   actions: {
142
   actions: {
67
     getProperty({ commit }, id) {
143
     getProperty({ commit }, id) {
68
-      console.log(id);
69
       axios
144
       axios
70
         .get(`http://localhost:57260/Property/Property/${id}`)
145
         .get(`http://localhost:57260/Property/Property/${id}`)
71
         .then(result => commit('setProperty', result.data))
146
         .then(result => commit('setProperty', result.data))
105
         .get(`http://localhost:57260/property/propertyfields/Propertytype/${propertyType}`)
180
         .get(`http://localhost:57260/property/propertyfields/Propertytype/${propertyType}`)
106
         .then(response => commit('setPropertyFields', response.data));
181
         .then(response => commit('setPropertyFields', response.data));
107
     },
182
     },
183
+    getPropertySavedOverviewFields({ commit }, id) {
184
+      axios
185
+        .get(
186
+          `http://localhost:57260/Property/PropertyFields/GetSavedValues/Residential/Property Overview/${id}`,
187
+        )
188
+        .then(response => commit('setPropertyOverviewFields', response.data))
189
+        .catch(console.error);
190
+    },
191
+    getPropertySavedFields({ commit }, item) {
192
+      axios
193
+        .get(
194
+          `http://localhost:57260/Property/PropertyFields/GetSavedValues/${item.type}/All/${item.id}`,
195
+        )
196
+        .then(response => commit('setPropertyFields', response.data))
197
+        .catch(console.error);
198
+    },
108
     saveProperty({ commit }, item) {
199
     saveProperty({ commit }, item) {
109
       axios
200
       axios
110
         .post('http://localhost:57260/Property/Property', item)
201
         .post('http://localhost:57260/Property/Property', item)
131
         .then(response => commit('setLatestProperties', response.data))
222
         .then(response => commit('setLatestProperties', response.data))
132
         .catch(console.error);
223
         .catch(console.error);
133
     },
224
     },
225
+    clearProperty({ commit }) {
226
+      commit('clearProperty');
227
+    },
228
+    clearPropertyImages({ commit }) {
229
+      commit('clearPropertyImages');
230
+    },
231
+    getPropertyEditDisplay({ commit }, id) {
232
+      axios
233
+        .get(`http://localhost:57260/Property/Property/GetEditDisplay/${id}`)
234
+        .then(response => commit('setPropertyEditDisplay', response.data))
235
+        .catch(console.error);
236
+    },
134
   },
237
   },
135
 };
238
 };

+ 95
- 18
src/store/modules/property/propertyAdmin.js 查看文件

4
   namespaced: true,
4
   namespaced: true,
5
   state: {
5
   state: {
6
     userDefinedGroups: [],
6
     userDefinedGroups: [],
7
-    userDefinedGroup: null,
7
+    userDefinedGroup: {
8
+      id: 0,
9
+      description: '',
10
+      usageType: 0,
11
+      rank: 0,
12
+      fields: [],
13
+    },
8
     userFields: [],
14
     userFields: [],
9
-    userField: null,
15
+    userField: {
16
+      id: 0,
17
+      groupId: 0,
18
+      fieldName: '',
19
+      fieldType: '',
20
+      rank: 0,
21
+    },
10
   },
22
   },
11
   mutations: {
23
   mutations: {
12
     setUserDefinedGroups(state, groups) {
24
     setUserDefinedGroups(state, groups) {
21
     setUserField(state, field) {
33
     setUserField(state, field) {
22
       state.userField = field;
34
       state.userField = field;
23
     },
35
     },
24
-    updateUserDefinedGroups(state, field) {
36
+    addUserDefinedGroups(state, field) {
25
       state.userDefinedGroups.push(field);
37
       state.userDefinedGroups.push(field);
26
     },
38
     },
39
+    updateUserDefinedGroups(state, field) {
40
+      state.userDefinedGroups.find(item => item.id === field.id).description = field.description;
41
+      state.userDefinedGroups.find(item => item.id === field.id).usageType = field.usageType;
42
+      state.userDefinedGroups.find(item => item.id === field.id).rank = field.rank;
43
+    },
44
+    addUserField(state, field) {
45
+      state.userFields.push(field);
46
+    },
47
+    updateUserFields(state, field) {
48
+      state.userFields.find(item => item.id === field.id).fieldName = field.fieldName;
49
+      state.userFields.find(item => item.id === field.id).fieldType = field.fieldType;
50
+      state.userFields.find(item => item.id === field.id).rank = field.rank;
51
+    },
52
+    removeUserDefinedGroup(state, id) {
53
+      state.userDefinedGroups.pop(state.userDefinedGroups.find(p => p.id === id));
54
+    },
55
+    removeUserField(state, id) {
56
+      state.userFields.pop(state.userFields.find(p => p.id === id));
57
+    },
58
+    clearUserGroup(state) {
59
+      state.userDefinedGroup = {
60
+        id: 0,
61
+        description: '',
62
+        usageType: 0,
63
+        rank: 0,
64
+      };
65
+    },
66
+    clearUserField(state) {
67
+      state.userField = {
68
+        id: 0,
69
+        fieldName: '',
70
+        fieldType: '',
71
+        rank: 0,
72
+      };
73
+    },
74
+    clearUserFields(state) {
75
+      state.userFields = [];
76
+    },
27
   },
77
   },
28
   getters: {},
78
   getters: {},
29
   actions: {
79
   actions: {
33
         .then(result => commit('setUserDefinedGroups', result.data))
83
         .then(result => commit('setUserDefinedGroups', result.data))
34
         .catch(console.error);
84
         .catch(console.error);
35
     },
85
     },
36
-    getUserDefinedGroup({ commit }, item) {
86
+    getUserDefinedGroup({ commit }, id) {
37
       axios
87
       axios
38
-        .get(`http://localhost:57260/Property/UserDefinedGroup/${item.id}`)
88
+        .get(`http://localhost:57260/Property/UserDefinedGroup/${id}`)
39
         .then(result => commit('setUserDefinedGroup', result.data))
89
         .then(result => commit('setUserDefinedGroup', result.data))
40
         .catch(console.error);
90
         .catch(console.error);
41
     },
91
     },
42
-    getUserFields({ commit }, item) {
92
+    getUserFields({ commit }, groupId) {
43
       axios
93
       axios
44
-        .get(`http://localhost:57260/Property/UserDefinedField/group/${item.groupId}`)
94
+        .get(`http://localhost:57260/Property/UserDefinedField/group/${groupId}`)
45
         .then(result => commit('setUserFields', result.data))
95
         .then(result => commit('setUserFields', result.data))
46
         .catch(console.error);
96
         .catch(console.error);
47
     },
97
     },
48
-    getUserField({ commit }, item) {
98
+    getUserField({ commit }, id) {
49
       axios
99
       axios
50
-        .get(`http://localhost:57260/Property/UserDefinedField/${item.id}`)
100
+        .get(`http://localhost:57260/Property/UserDefinedField/${id}`)
51
         .then(result => commit('setUserField', result.data))
101
         .then(result => commit('setUserField', result.data))
52
         .catch(console.error);
102
         .catch(console.error);
53
     },
103
     },
54
     saveUserDefinedGroup({ commit }, item) {
104
     saveUserDefinedGroup({ commit }, item) {
55
       axios
105
       axios
56
-        .post('http://localhost:57260/Property/UserDefinedGroup', item.group)
57
-        .then(response => commit('updateUserDefinedGroups', response.data))
106
+        .post('http://localhost:57260/Property/UserDefinedGroup', item)
107
+        .then(response => commit('addUserDefinedGroups', response.data))
58
         .catch(console.error);
108
         .catch(console.error);
59
     },
109
     },
60
     updateUserDefinedGroup({ commit }, item) {
110
     updateUserDefinedGroup({ commit }, item) {
61
       axios
111
       axios
62
-        .put('http://localhost:57260/Property/UserDefinedGroup', item.group)
112
+        .put('http://localhost:57260/Property/UserDefinedGroup', item)
63
         .then(response => commit('updateUserDefinedGroups', response.data))
113
         .then(response => commit('updateUserDefinedGroups', response.data))
64
         .catch(console.error);
114
         .catch(console.error);
65
     },
115
     },
66
-    // deleteUserDefinedGroup(item) {
67
-    //   axios
68
-    //     .delete(`http://localhost:57260/Property/UserDefinedField/${item.id}`)
69
-    //     .then((response) => {})
70
-    //     .catch(console.error);
71
-    // },
116
+    saveUserField({ commit }, item) {
117
+      axios
118
+        .post('http://localhost:57260/Property/UserDefinedField', item)
119
+        .then(response => commit('addUserField', response.data))
120
+        .catch(console.error);
121
+    },
122
+    updateUserField({ commit }, item) {
123
+      axios
124
+        .put('http://localhost:57260/Property/UserDefinedField', item)
125
+        .then(response => commit('updateUserFields', response.data))
126
+        .catch(console.error);
127
+    },
128
+    deleteUserDefinedGroup({ commit }, id) {
129
+      axios
130
+        .delete(`http://localhost:57260/Property/UserDefinedGroup/${id}`)
131
+        .then(result => commit('removeUserDefinedGroup', id))
132
+        .catch(console.error);
133
+    },
134
+    deleteUserField({ commit }, id) {
135
+      axios
136
+        .delete(`http://localhost:57260/Property/UserDefinedField/${id}`)
137
+        .then(result => commit('removeUserField', id))
138
+        .catch(console.error);
139
+    },
140
+    clearUserGroup({ commit }) {
141
+      commit('clearUserGroup');
142
+    },
143
+    clearUserField({ commit }) {
144
+      commit('clearUserField');
145
+    },
146
+    clearUserFields({ commit }) {
147
+      commit('clearUserFields');
148
+    },
72
   },
149
   },
73
 };
150
 };

Loading…
取消
儲存