Browse Source

看房预约单

chenfan 3 weeks ago
parent
commit
772ad8fb01

+ 10 - 9
src/views/reservation/index.vue

@@ -41,21 +41,22 @@
           :header-cell-style="{ background:'#f2f2f2'}"
         >
           <el-table-column type="index" label="序号" width="60" />
-          <el-table-column label="楼盘/小区" prop="parkInfoName" />
-          <el-table-column label="分期" prop="parkFloorDiscName" />
-          <el-table-column label="单元/楼栋号" prop="mnpBuildingNo" />
+          <el-table-column label="楼盘/小区" prop="parkInfoName" min-width="100" />
+          <el-table-column label="分期" prop="parkFloorDiscName" min-width="100" />
+          <el-table-column label="单元/楼栋号" prop="mnpBuildingNo" min-width="120" />
           <!--          <el-table-column label="所在层" prop="parkRoomFloor" />-->
           <el-table-column label="户室号" prop="parkRoomNo" />
           <el-table-column label="申请人" prop="applicantName" />
-          <el-table-column label="申请人电话" prop="applicantPhone" />
+          <el-table-column label="申请人电话" prop="applicantPhone" min-width="120" />
           <el-table-column label="购房人" prop="buyerName" />
-          <el-table-column label="购房人电话" prop="buyerPhone" />
+          <el-table-column label="购房人电话" prop="buyerPhone" min-width="120" />
           <el-table-column label="状态" prop="reservationStatusStr" />
-          <el-table-column label="看房日期" prop="reservationDate" />
+          <el-table-column label="门锁" prop="doorStatus" />
+          <el-table-column label="看房日期" prop="reservationDate" min-width="100" />
           <el-table-column label="排队号" prop="reservationOrder" />
-          <el-table-column label="开门密码" prop="doorPassStatusStr" />
+          <el-table-column label="开门密码" prop="doorPassStatusStr" min-width="100" />
           <el-table-column label="创建人" prop="createUserName" />
-          <el-table-column label="创建日期" prop="createTime" />
+          <el-table-column label="创建日期" prop="createTime" min-width="180" />
           <el-table-column label="操作" width="300" fixed="right">
             <template scope="scope">
               <el-button size="small" type="primary" @click="handleEdit(scope.row)">编辑</el-button>
@@ -67,7 +68,7 @@
                 <el-dropdown-menu slot="dropdown">
                   <el-dropdown-item icon="el-icon-circle-plus-outline" @click.native="getPassword(scope.row)">获得密码</el-dropdown-item>
                   <el-dropdown-item icon="el-icon-circle-close" @click.native="handleCancel(scope.row)">取消</el-dropdown-item>
-                  <el-dropdown-item icon="el-icon-delete" style="color: red" @click.native="handleDelete(scope.row)">删除</el-dropdown-item>
+                  <el-dropdown-item v-show="scope.row.reservationStatus===1" icon="el-icon-delete" style="color: red" @click.native="handleDelete(scope.row)">删除</el-dropdown-item>
                 </el-dropdown-menu>
               </el-dropdown>
             </template>

+ 43 - 7
src/views/reservation/reservationEdit.vue

@@ -8,7 +8,7 @@
               <el-col v-show="!isDetail" :span="20">
                 <el-form-item prop="parkRoomId" label="看房地址">
                   <div style="display: ruby-text;">
-                    <el-input v-model="form.parkRoomId" placeholder="请选择" readonly @click.native="toSelectRoom" />
+                    <el-input v-model="form.showAddress" placeholder="请选择" readonly @click.native="toSelectRoom" />
                     <el-button type="primary" @click="toAddRoom">新增地址</el-button>
                   </div>
                 </el-form-item>
@@ -38,6 +38,11 @@
                   <span>{{ form.parkRoomNo }}</span>
                 </el-form-item>
               </el-col>
+              <el-col :span="24">
+                <el-form-item label="门锁匹配地址">
+                  {{ doorObj.houseName }}{{ doorObj.buildingName }}{{ doorObj.floorName }}{{ doorObj.roomName }}
+                </el-form-item>
+              </el-col>
               <el-col :span="24">
                 <el-divider />
               </el-col>
@@ -105,8 +110,8 @@
                   />
                 </el-form-item>
               </el-col>
-              <el-col :span="10">
-                <el-form-item prop="timeRange" label="看房段">
+              <el-col :span="16">
+                <el-form-item prop="timeRange" label="看房段">
                   <el-time-picker
                     v-model="form.timeRange"
                     is-range
@@ -119,9 +124,10 @@
                     :disabled="isDetail"
                     @change="timeChange"
                   />
+                  <span>门锁密码有效时段为:{{ timeStr ? timeStr : '' }}</span>
                 </el-form-item>
               </el-col>
-              <el-col :span="6">
+              <el-col :span="24">
                 <el-form-item label="排队号">
                   <span>{{ form.reservationOrder }}</span>
                 </el-form-item>
@@ -197,6 +203,7 @@ export default {
                 reservationTimeStart: '',
                 reservationTimeEnd: '',
                 reservationOrder: '',
+                showAddress: '',
                 timeRange: null
             },
             rules: {
@@ -208,7 +215,9 @@ export default {
             },
             addVisible: false,
             dialogVisible: false,
-            dialogTitle: '选择地址'
+            dialogTitle: '选择地址',
+            doorObj: {},
+            timeStr: ''
         }
     },
     methods: {
@@ -220,14 +229,18 @@ export default {
                 this.getData()
             }
         },
-        getData() {
+        async getData() {
             this.loading = true
-            this.baseRequest('getById', { id: this.id }).then(res => {
+            this.baseRequest('getById', { id: this.id }).then(async res => {
                 if (res.data) {
                     this.form = res.data
                     if (this.form.reservationTimeStart && this.form.reservationTimeEnd) {
                         this.$set(this.form, 'timeRange', [this.form.reservationTimeStart, this.form.reservationTimeEnd])
                     }
+                    this.form.showAddress = this.form.parkInfoName + this.form.parkFloorDiscName +
+                                              this.form.mnpBuildingNo + '号' + this.form.parkRoomNo + '室'
+                    this.timeStr = this.getHalfHourRange(this.form.reservationTimeStart)
+                    await this.getDoorDetail(this.form.parkRoomId)
                 }
                 this.loading = false
             })
@@ -249,6 +262,9 @@ export default {
             this.form.parkRoomId = data.id
             this.form.parkRoomFloor = data.floor
             this.form.parkRoomNo = data.roomNo
+            this.form.showAddress = this.form.parkInfoName + this.form.parkFloorDiscName + this.form.mnpBuildingNo +
+                                      '号' + this.form.parkRoomNo + '室'
+            this.getDoorDetail(this.form.parkRoomId)
         },
         toAddRoom() {
             this.addVisible = true
@@ -263,9 +279,11 @@ export default {
             if (val && val.length) {
                 this.form.reservationTimeStart = val[0]
                 this.form.reservationTimeEnd = val[1]
+                this.timeStr = this.getHalfHourRange(val[0])
             } else {
                 this.form.reservationTimeStart = ''
                 this.form.reservationTimeEnd = ''
+                this.timeStr = ''
             }
         },
         handleClose() {
@@ -291,6 +309,24 @@ export default {
                 }
             })
         },
+        getDoorDetail(roomId) {
+            this.baseRequest('getDoorDetailByRoomId', { roomId: roomId }).then(res => {
+                this.doorObj = res.data.data || {}
+            })
+        },
+        getHalfHourRange(timeStr) {
+            const [hours, minutes] = timeStr.split(':').map(Number)
+            const baseMinutes = Math.floor(minutes / 30) * 30
+            const startTime = `${String(hours).padStart(2, '0')}:${String(baseMinutes).padStart(2, '0')}`
+
+            // 计算结束时间(+30分钟)
+            const endTotalMinutes = hours * 60 + baseMinutes + 30
+            const endHours = Math.floor(endTotalMinutes / 60) % 24
+            const endMinutes = endTotalMinutes % 60
+            const endTime = `${String(endHours).padStart(2, '0')}:${String(endMinutes).padStart(2, '0')}`
+
+            return `${startTime}~${endTime}`
+        },
         baseRequest(opUrl, postData, isArr) {
             return this.$channel.globeRequest('ParkRoomReservationController', opUrl, postData, 'project', isArr)
         }

+ 31 - 5
src/views/reservation/roomBindDoor.vue

@@ -89,6 +89,7 @@ export default {
         return {
             loading: false,
             AllData: [],
+            selectList: [],
             total: 0,
             search: {
                 pageNum: 1,
@@ -174,13 +175,38 @@ export default {
                 doorId: this.selectList[0].roomId
             }
             this.loading = true
-            this.baseRequest('roomBindDoor', postData).then(res => {
+            this.baseRequest('checkBindDoor', postData).then(res => {
                 this.loading = false
-                if (res.data.key === 200) {
-                    this.$message.success('提交成功')
-                    this.$emit('handleClose', true)
+                if (res.data.data) {
+                    const data = res.data.data
+                    const str = data.groupName + data.discName + data.buildName + '号' + data.roomNo + '室'
+                    const msg = '当前门锁已经与' + str + '匹配,点击确定,将取消原匹配关系,重新与当前选择地址进行匹配。'
+                    this.$confirm(msg, '请注意', {
+                        confirmButtonText: '确定',
+                        cancelButtonText: '取消',
+                        type: 'warning'
+                    }).then(() => {
+                        this.loading = true
+                        this.baseRequest('roomBindDoor', postData).then(res => {
+                            this.loading = false
+                            if (res.data.key === 200) {
+                                this.$message.success('提交成功')
+                                this.$emit('handleClose', true)
+                            } else {
+                                this.$message.error(res.data.msg)
+                            }
+                        })
+                    })
                 } else {
-                    this.$message.error(res.data.msg)
+                    this.baseRequest('roomBindDoor', postData).then(res => {
+                        this.loading = false
+                        if (res.data.key === 200) {
+                            this.$message.success('提交成功')
+                            this.$emit('handleClose', true)
+                        } else {
+                            this.$message.error(res.data.msg)
+                        }
+                    })
                 }
             })
         },