ソースを参照

楼盘类型,楼盘项目类型

魏熙美 5 年 前
コミット
e607c4978a
共有6 個のファイルを変更した352 個の追加9 個の削除を含む
  1. 22
    2
      src/config/api.js
  2. 55
    1
      src/store/modules/building.js
  3. 90
    5
      src/views/building/edit.vue
  4. 67
    0
      src/views/building/type/edi.vue
  5. 99
    0
      src/views/building/type/index.vue
  6. 19
    1
      src/views/index.js

+ 22
- 2
src/config/api.js ファイルの表示

@@ -1,5 +1,7 @@
1
-// const commPrefix = '/api/admin'
2
-const commPrefix = '/api-xs/admin'
1
+const commPrefix = '/api/admin'
2
+// const commPrefix = '/api-xs/admin'
3
+// const commPrefix = '/api-demo/admin'
4
+// const commPrefix = '/api-nj/admin'
3 5
 
4 6
 const apis = {
5 7
   system: {
@@ -69,6 +71,24 @@ const apis = {
69 71
     },
70 72
 
71 73
   },
74
+  buildingType: {
75
+    list: {
76
+      method: 'get',
77
+      url: `${commPrefix}/tdBuildingType`
78
+    },
79
+    add: {
80
+      method: 'post',
81
+      url: `${commPrefix}/tdBuildingType`
82
+    },
83
+    update: {
84
+      method: 'put',
85
+      url: `${commPrefix}/tdBuildingType`
86
+    },
87
+    delete: {
88
+      method: 'delete',
89
+      url: `${commPrefix}/tdBuildingType/:id`
90
+    }
91
+  },
72 92
   dynamic: {
73 93
     list: {
74 94
       method: 'get',

+ 55
- 1
src/store/modules/building.js ファイルの表示

@@ -7,7 +7,8 @@ export default {
7 7
     buildings: {},
8 8
     detail: {},
9 9
     cityNameList:[],
10
-    selectRackingBuildings: []
10
+    selectRackingBuildings: [],
11
+    buildingTypeList: []
11 12
   },
12 13
   mutations: {
13 14
     updateList (state, payload) {
@@ -22,6 +23,9 @@ export default {
22 23
     updateRackingBuildings (state, payload) {
23 24
       state.selectRackingBuildings = payload
24 25
     },
26
+    updateBuildingTypeList (state, payload) {
27
+      state.buildingTypeList = payload
28
+    }
25 29
 
26 30
   },
27 31
   actions: {
@@ -160,5 +164,55 @@ export default {
160 164
         })
161 165
       })
162 166
     },
167
+    getBuildingTypeList({ commit }, payload) { // 楼盘类型列表
168
+      return new Promise((resolve, reject) => {
169
+        request({
170
+          ...apis.buildingType.list,
171
+          params: payload
172
+        }).then((data) => {
173
+          commit('updateBuildingTypeList', data)
174
+          resolve(data)
175
+        }).catch((err) => {
176
+          reject(err)
177
+        })
178
+      })
179
+    },
180
+    addBuildingType({ commit }, payload) { // 楼盘类型添加
181
+      return new Promise((resolve, reject) => {
182
+        request({
183
+          ...apis.buildingType.add,
184
+          data: payload
185
+        }).then((data) => {
186
+          resolve(data)
187
+        }).catch((err) => {
188
+          reject(err)
189
+        })
190
+      })
191
+    },
192
+    updateBuildingType({ commit }, payload) { // 楼盘类型修改
193
+      return new Promise((resolve, reject) => {
194
+        request({
195
+          ...apis.buildingType.update,
196
+          data: payload
197
+        }).then((data) => {
198
+          resolve(data)
199
+        }).catch((err) => {
200
+          reject(err)
201
+        })
202
+      })
203
+    },
204
+    deleteBuildingType({ commit }, payload) { // 楼盘类型修改
205
+      return new Promise((resolve, reject) => {
206
+        request({
207
+          ...apis.buildingType.delete,
208
+          urlData: { id: payload.buildingTypeId }
209
+        }).then((data) => {
210
+          resolve(data)
211
+        }).catch((err) => {
212
+          reject(err)
213
+        })
214
+      })
215
+    }
216
+
163 217
   }
164 218
 }

+ 90
- 5
src/views/building/edit.vue ファイルの表示

@@ -11,6 +11,30 @@
11 11
         <el-form-item label="别名">
12 12
           <el-input v-model="building.name"></el-input>
13 13
         </el-form-item>
14
+        <el-form-item label="项目类型">
15
+          <el-button @click="showBuildingTag" icon="el-icon-circle-plus-outline" type="text"></el-button>
16
+          <el-row>
17
+            <el-col :span="12"  v-for="(item, index) in buildingProjectTypeData" :key="item.buildingTypeId">
18
+              <el-card shadow="never">
19
+                <div slot="header" class="clearfix">
20
+                  <span>{{ item.buildingTypeName }}</span>
21
+                  <el-button style="float: right; padding: 3px 0" icon="el-icon-close" type="text" @click="closeCard(index)"></el-button>
22
+                </div>
23
+                <el-form ref="form" label-width="80px">
24
+                  <el-form-item label="价格">
25
+                    <el-input v-model="item.price" placeholder="元/㎡"></el-input>
26
+                  </el-form-item>
27
+                  <el-form-item label="装修标准">
28
+                    <el-input v-model="item.decoration"></el-input>
29
+                  </el-form-item>
30
+                  <el-form-item label="产权年限">
31
+                    <el-input v-model="item.rightsYear"></el-input>
32
+                  </el-form-item>
33
+                </el-form>
34
+              </el-card>
35
+            </el-col>
36
+          </el-row>
37
+        </el-form-item>
14 38
         <el-form-item label="均价">
15 39
           <el-input v-model="building.price"></el-input>
16 40
         </el-form-item>
@@ -306,6 +330,15 @@
306 330
         </el-form>
307 331
       </el-dialog>
308 332
     </el-tab-pane>
333
+
334
+    <el-dialog
335
+            title="项目类型"
336
+            :visible.sync="showBuildingTagDialog"
337
+            width="30%"
338
+            :before-close="handleClose">
339
+      <el-checkbox v-for="(item, index) in buildingProjectTypeChecked" v-model="item.checked" :key="item.buildingTypeId" @change="appendProject(index)">{{ item.buildingTypeName }}</el-checkbox>
340
+    </el-dialog>
341
+
309 342
   </el-tabs>
310 343
 </template>
311 344
 
@@ -375,13 +408,19 @@ export default {
375 408
             coordinate: e.lnglat.lat + "," + e.lnglat.lng
376 409
           });
377 410
         }
378
-      }
411
+      },
412
+      showBuildingTagDialog: false, // 默认不显示项目类型tag
413
+      // 项目类型 多选框
414
+      buildingProjectTypeChecked: [],
415
+      // 项目类型 选中之后
416
+      buildingProjectTypeData: [] // 项目类型
379 417
     };
380 418
   },
381 419
   computed: {
382 420
     ...mapBuildingState({
383 421
       detail: x => x.detail,
384
-      cityNameList: x => x.cityNameList
422
+      cityNameList: x => x.cityNameList,
423
+      buildingType: state => state.buildingTypeList
385 424
     }),
386 425
     ...mapState({
387 426
       dicts: x => x.dicts
@@ -410,7 +449,9 @@ export default {
410 449
       "getDetail",
411 450
       "getCityName",
412 451
       "addBuilding",
413
-      "editBuilding"
452
+      "editBuilding",
453
+      'getBuildingTypeList',
454
+      'deleteBuildingType'
414 455
     ]),
415 456
     ...mapApartmentActions([
416 457
       "getApartments",
@@ -534,11 +575,14 @@ export default {
534 575
           tagName: x
535 576
         };
536 577
       });
578
+
579
+
537 580
       const building = {
538 581
         ...this.building,
539 582
         img: imgs,
540 583
         propertyType: this.buildingProperty.join(","),
541
-        tag
584
+        tag,
585
+        buildingProjectType: this.buildingProjectTypeData
542 586
       };
543 587
       if (!building.buildingId) {
544 588
         // 新增
@@ -654,12 +698,53 @@ export default {
654 698
             };
655 699
           });
656 700
           this.tags = data.buildingTag.map(x => x.tagName);
701
+
702
+          // 项目类型
703
+          this.buildingProjectTypeData = data.buildingProjectType
704
+          this.buildingProjectTypeData.forEach((item, index) => {
705
+            this.buildingProjectTypeChecked.forEach((checkItem, index) => {
706
+              if (item.buildingId === checkItem.buildingId) {
707
+                checkItem.checked = true
708
+              }
709
+            })
710
+          })
657 711
         });
658 712
       }
659
-    }
713
+    },
714
+    handleClose(done) { // 关闭项目类型的多选弹框
715
+      done()
716
+    },
717
+    showBuildingTag() { // 显示项目类型弹窗
718
+      this.showBuildingTagDialog = true
719
+    },
720
+    buildingTypeList() {
721
+      this.getBuildingTypeList({ pageNum: 1, pageSize: 999 }).then((res) => {
722
+        this.buildingProjectTypeChecked = res.records.map((item, index) => {
723
+         return { buildingTypeId: item.buildingTypeId, buildingTypeName: item.buildingTypeName,checked: false }
724
+        })
725
+      })
726
+    },
727
+    appendProject(index) { // 添加项目类型弹框
728
+      const _self = this
729
+      const current = this.buildingProjectTypeChecked[index]
730
+      this.buildingProjectTypeData.push({ // 住宅
731
+        buildingId: _self.building.buildingId,
732
+        buildingTypeId: current.buildingTypeId,
733
+        buildingTypeName: current.buildingTypeName,
734
+        status: 1,
735
+        price: '', // 价格
736
+        decoration: '', // 装修标准
737
+        rightsYear: '' // 产权年限
738
+      })
739
+    },
740
+    closeCard(index) { // 关闭项目类型的多选
741
+      delete this.buildingProjectTypeData[index]
742
+      this.buildingProjectTypeData = this.buildingProjectTypeData.filter(e => e !== undefined)
743
+    },
660 744
   },
661 745
   mounted() {
662 746
     this.initData();
747
+    this.buildingTypeList()
663 748
   }
664 749
 };
665 750
 </script>

+ 67
- 0
src/views/building/type/edi.vue ファイルの表示

@@ -0,0 +1,67 @@
1
+<template>
2
+    <div id="root">
3
+        <el-form ref="form" :model="form" label-width="80px" class="demo-ruleForm">
4
+            <el-form-item label="类型名称">
5
+                <el-input v-model="form.buildingTypeName"></el-input>
6
+            </el-form-item>
7
+            <el-form-item>
8
+                <el-button type="primary" @click="onSubmit">确定</el-button>
9
+                <el-button @click="$router.go(-1)">取消</el-button>
10
+            </el-form-item>
11
+        </el-form>
12
+    </div>
13
+</template>
14
+
15
+<script>
16
+    import { createNamespacedHelpers } from 'vuex'
17
+
18
+    const { mapState: mapBuildingState, mapActions: mapBuildingActions } = createNamespacedHelpers('building')
19
+
20
+    export default {
21
+        name: "buildingTypeEdi",
22
+        data() {
23
+            return {
24
+                form: {
25
+                    buildingTypeId: '',
26
+                    buildingTypeName: ''
27
+                }
28
+            }
29
+        },
30
+        methods: {
31
+            ...mapBuildingActions([
32
+               'addBuildingType',
33
+               'updateBuildingType'
34
+            ]),
35
+            onSubmit() {
36
+                // 添加
37
+               if (this.form.buildingTypeId === '' || this.form.buildingTypeId === undefined) {
38
+                   this.form.status = 1
39
+                   this.form.ccreateDate = new Date()
40
+                   this.addBuildingType(this.form).then((res) => {
41
+                       this.$message.success('操作成功')
42
+                       this.$router.go(-1)
43
+                   }).catch((err) => {
44
+                       this.$message.error(err)
45
+                   })
46
+
47
+                   return
48
+               }
49
+
50
+               // 修改
51
+                this.updateBuildingType(this.form).then((res) => {
52
+                    this.$message.success('操作成功')
53
+                    this.$router.go(-1)
54
+                }).catch((err) => {
55
+                    this.$message.error(err)
56
+                })
57
+            }
58
+        }
59
+    }
60
+</script>
61
+
62
+<style scoped>
63
+    .demo-ruleForm {
64
+        width: 500px;
65
+        margin: auto;
66
+    }
67
+</style>

+ 99
- 0
src/views/building/type/index.vue ファイルの表示

@@ -0,0 +1,99 @@
1
+<template>
2
+   <div id="root">
3
+       <el-button type="primary" @click="toEdi">新增类型</el-button>
4
+       <el-table
5
+               :data="buildingType.records"
6
+               border
7
+               style="width: 100%;margin-top: 10px;">
8
+           <el-table-column
9
+                   align="center"
10
+                   prop="buildingTypeId"
11
+                   label="编号">
12
+           </el-table-column>
13
+           <el-table-column
14
+                   align="center"
15
+                   prop="buildingTypeName"
16
+                   label="类型名称">
17
+           </el-table-column>
18
+           <el-table-column
19
+                   align="center"
20
+                   prop="createDate"
21
+                   label="创建时间">
22
+               <template slot-scope="scope">
23
+                   {{ formateDate(scope.row.createDate) }}
24
+               </template>
25
+           </el-table-column>
26
+           <el-table-column
27
+                   align="center"
28
+                   prop="id"
29
+                   label="操作">
30
+               <template slot-scope="scope">
31
+                   <el-link type="primary" @click="deleteBuilding(scope.row)">删除</el-link>
32
+               </template>
33
+           </el-table-column>
34
+       </el-table>
35
+
36
+       <el-pagination
37
+               small
38
+               layout="prev, pager, next"
39
+               :current-page="form.pageNum"
40
+               :page-size="form.pageSize"
41
+               :total="buildingType.total"
42
+               @current-change="handleCurrrent">
43
+       </el-pagination>
44
+   </div>
45
+</template>
46
+
47
+<script>
48
+    import { createNamespacedHelpers } from 'vuex'
49
+    import dayjs from 'dayjs'
50
+
51
+    const { mapActions: mapBuildingActions, mapState: mapBuildingState } = createNamespacedHelpers('building')
52
+
53
+    export default {
54
+        name: "buildingType",
55
+        data() {
56
+            return {
57
+                list: [], // 列表
58
+                form: {
59
+                    pageNum: 1,
60
+                    pageSize: 3
61
+                },
62
+                total: 0,
63
+            }
64
+        },
65
+        computed: {
66
+            ...mapBuildingState({
67
+                buildingType: state => state.buildingTypeList
68
+            })
69
+        },
70
+        methods: {
71
+            ...mapBuildingActions([
72
+                'getBuildingTypeList',
73
+                'deleteBuildingType'
74
+            ]),
75
+            formateDate(dt) {
76
+                return !dt ? '' : dayjs(dt).format('YYYY-MM-DD HH:mm')
77
+            },
78
+            handleCurrrent(val) { // 当前页发生改变的时候
79
+                this.form.pageNum = val
80
+                this.getBuildingTypeList(this.form)
81
+            },
82
+            deleteBuilding(row) { // 删除
83
+                this.deleteBuildingType(row)
84
+                this.$message.success('操作成功')
85
+                this.getBuildingTypeList(this.form)
86
+            },
87
+            toEdi() {
88
+                this.$router.push({ name: 'buildingTypeEdi' })
89
+            }
90
+        },
91
+        mounted() {
92
+            this.getBuildingTypeList(this.form)
93
+        }
94
+    }
95
+</script>
96
+
97
+<style scoped>
98
+
99
+</style>

+ 19
- 1
src/views/index.js ファイルの表示

@@ -159,7 +159,25 @@ const pages = [
159 159
         meta: {
160 160
           menuShow: false,
161 161
         },
162
-      }
162
+      },
163
+      {
164
+        path: 'buildingTypeList',
165
+        name: 'buildingTypeList',
166
+        component: () => import('./building/type/index.vue'),
167
+        meta: {
168
+          menuShow: true,
169
+          title: '楼盘类型',
170
+        },
171
+      },
172
+      {
173
+        path: 'buildingTypeEdi',
174
+        name: 'buildingTypeEdi',
175
+        component: () => import('./building/type/edi.vue'),
176
+        meta: {
177
+          menuShow: false,
178
+          title: '楼盘类型编辑',
179
+        },
180
+      },
163 181
     ]
164 182
   },
165 183
   {