张延森 il y a 4 ans
Parent
révision
1dd2d4b7a5

+ 4
- 2
src/store/models/room.js Voir le fichier

@@ -25,7 +25,8 @@ export default () => {
25 25
       .then((res) => {
26 26
         const { result, ...pageInfo } = res || {}
27 27
         Object.assign(page, pageInfo)
28
-        list.value = pageInfo.pageNo <= 1 ? result : list.value.concat(list.value)
28
+        list.value =
29
+          pageInfo.pageNo <= 1 ? result : list.value.concat(list.value)
29 30
         loading.value = false
30 31
         return res
31 32
       })
@@ -156,10 +157,11 @@ export default () => {
156 157
   }
157 158
 
158 159
   // 房源编辑
159
-  const houseEdit = (data) => {
160
+  const houseEdit = (data, params) => {
160 161
     return request({
161 162
       url: '/room/save',
162 163
       data,
164
+      params,
163 165
       toast: '请稍候...',
164 166
     })
165 167
   }

+ 2
- 2
src/view/addhouse/addrenting/components/BuildingSelector.vue Voir le fichier

@@ -90,8 +90,8 @@ export default {
90 90
         .then((res) => {
91 91
           params.pageNo += 1
92 92
           loading.value = false
93
-          finished.value = res.currentPage >= res.totalPages
94
-          if (res.currentPage === 1) {
93
+          finished.value = res.pageNo >= res.totalPages
94
+          if (res.pageNo === 1) {
95 95
             list.value = res.result || []
96 96
           } else {
97 97
             list.value = list.value.concat(res.result || [])

+ 9
- 9
src/view/addhouse/addsecondhand/components/BuildingSelector.vue Voir le fichier

@@ -37,9 +37,9 @@
37 37
 </template>
38 38
 
39 39
 <script>
40
-import { reactive, ref } from "vue"
41
-import { Button, Search, List, Cell, Icon } from "vant"
42
-import { useModel } from "@zjxpcyc/vue-tiny-store"
40
+import { reactive, ref } from 'vue'
41
+import { Button, Search, List, Cell, Icon } from 'vant'
42
+import { useModel } from '@zjxpcyc/vue-tiny-store'
43 43
 
44 44
 export default {
45 45
   components: {
@@ -50,7 +50,7 @@ export default {
50 50
     [Icon.name]: Icon,
51 51
   },
52 52
 
53
-  emits: ["change", "cancel"],
53
+  emits: ['change', 'cancel'],
54 54
 
55 55
   setup(props, { emit }) {
56 56
     const loading = ref(false)
@@ -64,7 +64,7 @@ export default {
64 64
       pageSize: 20,
65 65
     })
66 66
 
67
-    const { dicts, getBuilding } = useModel("dicts")
67
+    const { dicts, getBuilding } = useModel('dicts')
68 68
     const list = ref(dicts.building || [])
69 69
 
70 70
     const handleSearch = () => {
@@ -90,8 +90,8 @@ export default {
90 90
         .then((res) => {
91 91
           params.pageNo += 1
92 92
           loading.value = false
93
-          finished.value = res.currentPage >= res.totalPages
94
-          if (res.currentPage === 1) {
93
+          finished.value = res.pageNo >= res.totalPages
94
+          if (res.pageNo === 1) {
95 95
             list.value = res.result || []
96 96
           } else {
97 97
             list.value = list.value.concat(res.result || [])
@@ -109,11 +109,11 @@ export default {
109 109
     }
110 110
 
111 111
     const handleSubmit = () => {
112
-      emit("change", { id: selectedId.value, item: selectedItem.value })
112
+      emit('change', { id: selectedId.value, item: selectedItem.value })
113 113
     }
114 114
 
115 115
     const handleCancel = () => {
116
-      emit("cancel")
116
+      emit('cancel')
117 117
     }
118 118
 
119 119
     return {

+ 28
- 28
src/view/secondhand/components/secondhandscreen.vue Voir le fichier

@@ -25,11 +25,11 @@
25 25
 </template>
26 26
 
27 27
 <script>
28
-import { computed, onMounted, reactive } from "vue"
29
-import { DropdownMenu, DropdownItem, row, col, cell } from "vant"
30
-import { useModel } from "@zjxpcyc/vue-tiny-store"
28
+import { computed, onMounted, reactive } from 'vue'
29
+import { DropdownMenu, DropdownItem, row, col, cell } from 'vant'
30
+import { useModel } from '@zjxpcyc/vue-tiny-store'
31 31
 export default {
32
-  name: "secondhandscreen",
32
+  name: 'secondhandscreen',
33 33
   components: {
34 34
     [cell.name]: cell,
35 35
     // [popup.name]: popup,
@@ -44,14 +44,14 @@ export default {
44 44
   data() {
45 45
     return {
46 46
       overlayStyle: {
47
-        top: "88px",
48
-        position: "absolute",
47
+        top: '88px',
48
+        position: 'absolute',
49 49
       },
50 50
       popupStyle: {
51
-        top: "88px",
52
-        minHeight: "200px",
51
+        top: '88px',
52
+        minHeight: '200px',
53 53
       },
54
-      value: "0",
54
+      value: '0',
55 55
       //   options: [
56 56
       //     {
57 57
       //       id: 0,
@@ -90,7 +90,7 @@ export default {
90 90
   mounted() {},
91 91
 
92 92
   setup(props, cex) {
93
-    const { dicts, getDict, getBusinessCity } = useModel("dicts")
93
+    const { dicts, getDict, getBusinessCity } = useModel('dicts')
94 94
     console.log(dicts.roomType, getDict, getBusinessCity)
95 95
 
96 96
     // const roomDistrict = dicts.roomDistrict;
@@ -110,8 +110,8 @@ export default {
110 110
     const options = computed(() => [
111 111
       {
112 112
         id: 0,
113
-        value: "districtCode",
114
-        title: "区域",
113
+        value: 'districtCode',
114
+        title: '区域',
115 115
         option: (dicts.roomDistrict || []).map((x) => {
116 116
           return {
117 117
             text: x.label,
@@ -121,37 +121,37 @@ export default {
121 121
       },
122 122
       {
123 123
         id: 2,
124
-        value: "price",
125
-        title: "价格(万)",
124
+        value: 'price',
125
+        title: '价格(万)',
126 126
         option: [
127
-          { text: "0-100", value: "0-100" },
128
-          { text: "101-200", value: "101-200" },
129
-          { text: "201-300", value: "201-300" },
130
-          { text: "301-400", value: "301-400" },
131
-          { text: "400以上", value: "400" },
127
+          { text: '0-100', value: '0-100' },
128
+          { text: '101-200', value: '101-200' },
129
+          { text: '201-300', value: '201-300' },
130
+          { text: '301-400', value: '301-400' },
131
+          { text: '400以上', value: '400' },
132 132
         ],
133 133
       },
134 134
       {
135 135
         id: 3,
136
-        value: "roomType",
137
-        title: "户型",
136
+        value: 'roomType',
137
+        title: '户型',
138 138
         option: dicts.roomType,
139 139
       },
140 140
     ])
141 141
 
142 142
     const onMore = () => {
143
-      console.log(props, cex, "3332")
144
-      cex.emit("onShowMore", 333)
143
+      console.log(props, cex, '3332')
144
+      cex.emit('onShowMore', 333)
145 145
     }
146 146
 
147 147
     const onChange = (e) => {
148
-      console.log(state, e, "3ss332333")
148
+      console.log(state, e, '3ss332333')
149 149
       if (state.price) {
150
-        const price = state.price.split("-")
150
+        const price = state.price.split('-')
151 151
         state.pirceMin = Number(price[0])
152 152
         state.priceMax = Number(price[1])
153 153
       }
154
-      cex.emit("onChange", state)
154
+      cex.emit('onChange', state)
155 155
     }
156 156
     return {
157 157
       onMore,
@@ -164,7 +164,7 @@ export default {
164 164
 </script>
165 165
 
166 166
 <!-- Add "scoped" attribute to limit CSS to this component only -->
167
-<style lang="less" scoped>
167
+<style lang="less">
168 168
 .more {
169 169
   height: 48px;
170 170
   display: flex;
@@ -181,7 +181,7 @@ export default {
181 181
     max-width: 100%;
182 182
     padding: 0 8px;
183 183
     color: #323233;
184
-    font-size: 15px;
184
+    font-size: 15px !important;
185 185
     line-height: 22px;
186 186
   }
187 187
 }

+ 22
- 16
src/view/secondhand/edithouse/components/Basic.vue Voir le fichier

@@ -10,25 +10,27 @@
10 10
       <x-field label="楼盘地址">
11 11
         {{ building.address }}
12 12
       </x-field>
13
-      <x-field label="栋号">
14
-        {{ roomInfo.roomBuild }}
15
-      </x-field>
16
-      <x-field label="单元">
17
-        {{ roomInfo.roomUnit }}
18
-      </x-field>
19
-      <x-field label="楼层">
20
-        {{ floor }}
21
-      </x-field>
22
-      <x-field label="房号">
23
-        {{ roomInfo.roomNum }}
24
-      </x-field>
13
+      <template v-if="showDong">
14
+        <x-field label="栋号">
15
+          {{ roomInfo.roomBuild }}
16
+        </x-field>
17
+        <x-field label="单元">
18
+          {{ roomInfo.roomUnit }}
19
+        </x-field>
20
+        <x-field label="楼层">
21
+          {{ floor }}
22
+        </x-field>
23
+        <x-field label="房号">
24
+          {{ roomInfo.roomNum }}
25
+        </x-field>
26
+      </template>
25 27
     </van-collapse-item>
26 28
   </van-collapse>
27 29
 </template>
28 30
 
29 31
 <script>
30
-import { computed, ref } from "vue"
31
-import { Collapse, CollapseItem } from "vant"
32
+import { computed, ref } from 'vue'
33
+import { Collapse, CollapseItem } from 'vant'
32 34
 
33 35
 export default {
34 36
   components: {
@@ -44,12 +46,16 @@ export default {
44 46
       type: Object,
45 47
       default: () => ({}),
46 48
     },
49
+    showDong: {
50
+      type: Boolean,
51
+      default: true,
52
+    },
47 53
   },
48 54
   setup(props) {
49
-    const activeName = ref("1")
55
+    const activeName = ref('1')
50 56
 
51 57
     const floor = computed(() => {
52
-      const roomFloor = (props.roomInfo.roomFloor || "").split(",")
58
+      const roomFloor = (props.roomInfo.roomFloor || '').split(',')
53 59
       return `${roomFloor[0]}/${roomFloor[1]}(${roomFloor[2]})`
54 60
     })
55 61
 

+ 171
- 16
src/view/secondhand/edithouse/components/Form.vue Voir le fichier

@@ -5,9 +5,77 @@
5 5
       name="title"
6 6
       label="标题"
7 7
       placeholder="请输入"
8
+      required
8 9
       :rules="[{ required: true, message: '请填写标题' }]"
9 10
     />
10 11
 
12
+    <template v-if="editDong">
13
+      <van-field
14
+        v-model="formData.roomBuild"
15
+        name="roomBuild"
16
+        label="栋号"
17
+        required
18
+        :rules="[{ required: true, message: '请选择栋号' }]"
19
+      >
20
+        <template #input>
21
+          <Picker
22
+            :options="lockBuilding.dong"
23
+            v-model="formData.roomBuild"
24
+            placeholder="请选择"
25
+          />
26
+        </template>
27
+      </van-field>
28
+
29
+      <van-field
30
+        v-model="formData.roomUnit"
31
+        name="roomUnit"
32
+        label="单元"
33
+        required
34
+        :rules="[{ required: true, message: '请选择单元' }]"
35
+      >
36
+        <template #input>
37
+          <Picker
38
+            :options="lockBuilding.unit"
39
+            v-model="formData.roomUnit"
40
+            placeholder="请选择"
41
+          />
42
+        </template>
43
+      </van-field>
44
+
45
+      <van-field
46
+        v-model="formData.roomFloor"
47
+        name="roomFloor"
48
+        label="楼层"
49
+        required
50
+        :rules="[{ required: true, message: '请选择楼层' }]"
51
+      >
52
+        <template #input>
53
+          <Picker
54
+            :options="lockBuilding.floor"
55
+            v-model="formData.roomFloor"
56
+            placeholder="请选择"
57
+          />
58
+        </template>
59
+      </van-field>
60
+
61
+      <van-field
62
+        v-model="formData.roomNum"
63
+        name="roomNum"
64
+        label="房号"
65
+        required
66
+        :rules="[{ required: true, message: '请选择房号' }]"
67
+      >
68
+        <template #input>
69
+          <Picker
70
+            :options="lockBuilding.room"
71
+            v-model="formData.roomNum"
72
+            placeholder="请选择"
73
+            @change="(x) => (lockRoomNo = x.text)"
74
+          />
75
+        </template>
76
+      </van-field>
77
+    </template>
78
+
11 79
     <van-field
12 80
       v-model="formData.acreage"
13 81
       name="acreage"
@@ -155,13 +223,14 @@
155 223
 </template>
156 224
 
157 225
 <script>
158
-import { reactive, watch } from "vue"
159
-import { Form, Field, Button } from "vant"
160
-import { useModel } from "@zjxpcyc/vue-tiny-store"
161
-import Picker from "@/components/Picker"
162
-import { showWarn } from "@/utils"
163
-import RoomType from "./RoomType"
164
-import Proportion from "./Proportion"
226
+import { reactive, watch, ref } from 'vue'
227
+import { Form, Field, Button } from 'vant'
228
+import { useModel } from '@zjxpcyc/vue-tiny-store'
229
+import Picker from '@/components/Picker'
230
+import { showWarn } from '@/utils'
231
+import request from '@/utils/request'
232
+import RoomType from './RoomType'
233
+import Proportion from './Proportion'
165 234
 
166 235
 export default {
167 236
   components: {
@@ -172,30 +241,45 @@ export default {
172 241
     Proportion,
173 242
     Picker,
174 243
   },
175
-  emits: ["submit"],
244
+  emits: ['submit'],
245
+  props: {
246
+    editDong: Boolean,
247
+  },
176 248
   setup(props, { emit }) {
177 249
     const formData = reactive({})
178
-    const { namedDicts } = useModel("dicts")
179
-    const { detail } = useModel("room")
250
+    const { namedDicts } = useModel('dicts')
251
+    const { detail } = useModel('room')
252
+
253
+    const lockRoomNo = ref()
254
+    const lockBuilding = reactive({
255
+      // 栋
256
+      dong: [],
257
+      // 单元
258
+      unit: [],
259
+      // 层
260
+      floor: [],
261
+      // 房
262
+      room: [],
263
+    })
180 264
 
181 265
     const validManually = () => {
182 266
       if (
183 267
         !formData.roomType ||
184
-        formData.roomType.split(",").filter(Boolean).length != 5
268
+        formData.roomType.split(',').filter(Boolean).length != 5
185 269
       ) {
186
-        showWarn("请正确设置户型")
270
+        showWarn('请正确设置户型')
187 271
         return false
188 272
       }
189 273
       if (!formData.decoration) {
190
-        showWarn("请选择装修")
274
+        showWarn('请选择装修')
191 275
         return false
192 276
       }
193 277
       if (!formData.aspect) {
194
-        showWarn("请选择朝向")
278
+        showWarn('请选择朝向')
195 279
         return false
196 280
       }
197 281
       if (!formData.sourceFrom) {
198
-        showWarn("请选择房源来源")
282
+        showWarn('请选择房源来源')
199 283
         return false
200 284
       }
201 285
 
@@ -208,7 +292,10 @@ export default {
208 292
         return
209 293
       }
210 294
 
211
-      emit("submit", formData)
295
+      emit('submit', {
296
+        data: formData,
297
+        params: { lockRoomNo: lockRoomNo.value || '' },
298
+      })
212 299
     }
213 300
 
214 301
     //
@@ -222,10 +309,78 @@ export default {
222 309
       { immediate: true }
223 310
     )
224 311
 
312
+    // 锁盘的情况下监控楼栋的选择
313
+    // 生成单元字典
314
+    watch(
315
+      () => formData.roomBuild,
316
+      (nw) => {
317
+        if (props.editDong) {
318
+          request({
319
+            url: '/lock/unit',
320
+            params: { buildingId: formData.estateId, dong: nw },
321
+          }).then((res) => {
322
+            lockBuilding.unit = (res || []).map((x) => ({
323
+              text: x.name,
324
+              value: x.code,
325
+            }))
326
+          })
327
+        }
328
+      }
329
+    )
330
+
331
+    // 锁盘的情况下监控单元的选择
332
+    // 生成楼层字典
333
+    watch(
334
+      () => formData.roomUnit,
335
+      (nw) => {
336
+        if (props.editDong) {
337
+          request({
338
+            url: '/lock/floor',
339
+            params: {
340
+              buildingId: formData.estateId,
341
+              dong: formData.roomBuild,
342
+              unit: nw,
343
+            },
344
+          }).then((res) => {
345
+            lockBuilding.floor = (res || []).map((x) => ({
346
+              text: x.name,
347
+              value: x.code,
348
+            }))
349
+          })
350
+        }
351
+      }
352
+    )
353
+
354
+    // 锁盘的情况下监控楼层的选择
355
+    // 生成楼栋-房号字典
356
+    watch(
357
+      () => formData.roomFloor,
358
+      (nw) => {
359
+        if (props.editDong) {
360
+          request({
361
+            url: '/lock/room',
362
+            params: {
363
+              buildingId: formData.estateId,
364
+              dong: formData.roomBuild,
365
+              unit: formData.roomUnit,
366
+              floor: nw,
367
+            },
368
+          }).then((res) => {
369
+            lockBuilding.room = (res || []).map((x) => ({
370
+              text: x.name,
371
+              value: x.code,
372
+            }))
373
+          })
374
+        }
375
+      }
376
+    )
377
+
225 378
     return {
226 379
       formData,
380
+      lockRoomNo,
227 381
       handleSumbit,
228 382
       namedDicts,
383
+      lockBuilding,
229 384
     }
230 385
   },
231 386
 }

+ 14
- 5
src/view/secondhand/edithouse/index.vue Voir le fichier

@@ -1,17 +1,21 @@
1 1
 <template>
2 2
   <x-loading x-id="room.view">
3 3
     <div class="secondhanddetail">
4
-      <RoomBasic :room-info="detail.roomInfo" :building="detail.building" />
4
+      <RoomBasic
5
+        :room-info="detail.roomInfo"
6
+        :building="detail.building"
7
+        :show-dong="!mustEdit"
8
+      />
5 9
 
6 10
       <div style="margin-top: 1em">
7
-        <RoomForm @submit="handleSumbit" />
11
+        <RoomForm @submit="handleSumbit" :edit-dong="mustEdit" />
8 12
       </div>
9 13
     </div>
10 14
   </x-loading>
11 15
 </template>
12 16
 
13 17
 <script>
14
-import { onMounted } from 'vue'
18
+import { computed, onMounted } from 'vue'
15 19
 import { useModel } from '@zjxpcyc/vue-tiny-store'
16 20
 import { useRoute, useRouter } from 'vue-router'
17 21
 import { alert, showDanger } from '@/utils'
@@ -30,8 +34,12 @@ export default {
30 34
     const router = useRouter()
31 35
     const { detail, getDetail, houseEdit } = useModel('room')
32 36
 
33
-    const handleSumbit = (values) => {
34
-      houseEdit(values)
37
+    const mustEdit = computed(() => {
38
+      return detail.mustEdit === '1'
39
+    })
40
+
41
+    const handleSumbit = ({ data, params }) => {
42
+      houseEdit(data, params)
35 43
         .then(() => {
36 44
           alert('编辑成功').then(() => {
37 45
             router.go(-1)
@@ -49,6 +57,7 @@ export default {
49 57
     return {
50 58
       handleSumbit,
51 59
       detail,
60
+      mustEdit,
52 61
     }
53 62
   },
54 63
 }

+ 2
- 2
src/view/secondhand/index.vue Voir le fichier

@@ -67,10 +67,10 @@ export default {
67 67
     const searchParams = ref({})
68 68
 
69 69
     const finished = computed(() => {
70
-      return page.currentPage ? page.currentPage >= page.totalPages : true
70
+      return page.pageNo ? page.pageNo >= page.totalPages : true
71 71
     })
72 72
     const percent = computed(() =>
73
-      page.currentPage ? (page.currentPage * 100) / page.totalPages : 100
73
+      page.pageNo ? (page.pageNo * 100) / page.totalPages : 100
74 74
     )
75 75
 
76 76
     const onShowMore = () => {