Browse Source

退房提醒 退房办理 接口联调

wyx
wangyx 3 months ago
parent
commit
667e0e7092
  1. 2
      .env.production
  2. 2
      src/api/residence/checkout.js
  3. 64
      src/views/components/CheckOutDialog.vue
  4. 4
      src/views/index.vue
  5. 550
      src/views/residence/checkOut/index.vue

2
.env.production

@ -6,4 +6,4 @@ VUE_APP_TITLE = 青岛免租金住房服务平台
ENV = 'production' ENV = 'production'
# 青岛市免租金住宿保障平台/生产环境 # 青岛市免租金住宿保障平台/生产环境
VUE_APP_BASE_API = 'http://219.146.91.110:30801/mz-ap' VUE_APP_BASE_API = 'http://219.146.91.110:30801/mz-api'

2
src/api/residence/checkout.js

@ -42,7 +42,7 @@ export function releaseRoom(data) {
data: data, data: data,
}); });
} }
// 待退房 // 【退房提醒】待退房列表
export function listCheckoutAlert(query) { export function listCheckoutAlert(query) {
return request({ return request({
url: "/apartment/manager/listCheckoutAlert", url: "/apartment/manager/listCheckoutAlert",

64
src/views/components/CheckOutDialog.vue

@ -70,7 +70,7 @@
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
prop="telephone" prop="telephone"
label="手机号" label="手机号"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
align="center" align="center"
></el-table-column> ></el-table-column>
@ -80,27 +80,8 @@
align="center" align="center"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
></el-table-column> ></el-table-column>
<el-table-column
prop=""
label="资格核验"
align="center"
:show-overflow-tooltip="true"
></el-table-column>
<el-table-column prop="status" label="状态" align="center"> <el-table-column prop="status" label="状态" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 办理完成(待释放房源) -->
<el-button
type="text"
v-if="scope.row.status === '办理完成'"
style="color: #83d098"
>
办理完成
</el-button>
<!-- 办理中(待退还保证金) -->
<el-button type="text" v-if="scope.row.status === '办理中'">
办理中
</el-button>
<!-- 待办理(3) --> <!-- 待办理(3) -->
<el-button <el-button
type="text" type="text"
@ -124,7 +105,7 @@
<el-button <el-button
type="primary" type="primary"
size="mini" size="mini"
@click="handleAction(action, scope.row)" @click="handleAction('checkout', scope.row)"
> >
退房办理 退房办理
</el-button> </el-button>
@ -133,7 +114,7 @@
type="primary" type="primary"
size="mini" size="mini"
v-if="scope.row.status === '办理完成'" v-if="scope.row.status === '办理完成'"
@click="handleAction(action, scope.row)" @click="handleAction('release', scope.row)"
> >
释放房源 释放房源
</el-button> </el-button>
@ -178,18 +159,47 @@ export default {
try { try {
const response = await listCheckoutAlert(this.queryParams); const response = await listCheckoutAlert(this.queryParams);
if (response.code === 200) { if (response.code === 200) {
this.tableData = response.rows; const currentDate = new Date();
const processedData = response.rows.map((item) => {
const checkOutDate = new Date(item.checkOutDate);
if (checkOutDate > currentDate) {
item.status = "待办理";
} else {
item.status = "已超期";
}
return item;
});
this.tableData = processedData;
this.total = response.total; this.total = response.total;
} }
} catch (error) { } catch (error) {}
console.error("Error fetching data:", error);
}
}, },
handleQuery() { handleQuery() {
this.getList(); this.getList();
}, },
// //
handleAction(action, row) {}, handleAction(action, row) {
console.log(action, row);
this.$emit("close");
if (action === "release") {
this.$router.push({
path: "/residence/check_out",
query: { showReleaseStep: true },
});
} else {
// this.$router.push({
// path: "/residence/check_out",
// query: { showReleaseStep: true,roomId:5,userInfo: row },
// });
this.$router.push({
path: "/residence/check_out",
query: {
userInfo: row,
roomId:row.roomId,
},
});
}
},
}, },
}; };
</script> </script>

4
src/views/index.vue

@ -214,7 +214,7 @@
top="5vh" top="5vh"
append-to-body append-to-body
> >
<CheckOutDialog /> <CheckOutDialog @close="visible = !visible" />
</el-dialog> </el-dialog>
<!-- <CommonReminder <!-- <CommonReminder
:dialogTitle="'退房提醒'" :dialogTitle="'退房提醒'"
@ -251,7 +251,7 @@ export default {
components: { components: {
CommonTitle, CommonTitle,
CommonReminder, CommonReminder,
CheckOutDialog CheckOutDialog,
}, },
data() { data() {
return { return {

550
src/views/residence/checkOut/index.vue

@ -14,32 +14,38 @@
v-for="(item, index) in dataList" v-for="(item, index) in dataList"
:key="index" :key="index"
> >
<div <div class="el-flex el-flex-y-center" v-if="item.isShow">
class="tit el-flex el-flex-y-center model" <div
:style="{ backgroundColor: item.bgColor }" class="tit el-flex el-flex-y-center model"
> :style="{ backgroundColor: item.bgColor }"
<el-image >
style="height: 28px; margin-right: 13px" <el-image
:src="item.imageSrc" style="height: 28px; margin-right: 13px"
></el-image :src="item.imageSrc"
><span>{{ item.title }}</span> ></el-image
<div class="checkout-process-container"> ><span>{{ item.title }}</span>
<div class="checkout-process-container">
<el-image
class="el-flex el-flex-y-center el-flex-center checkout-process"
style="height: 26px"
:src="susIcon"
v-if="stepCompleted[index]"
></el-image>
</div>
</div>
<div class="arrow-container">
<el-image <el-image
class="el-flex el-flex-y-center el-flex-center checkout-process" class="el-flex el-flex-y-center el-flex-center"
style="height: 26px" style="height: 28px; margin-left: 13px"
:src="susIcon" :src="stepCompleted[index] ? arrowActive : arrow"
v-if="stepCompleted[index]" v-if="
index < dataList.length - 1 &&
(index !== dataList.length - 2 ||
dataList[dataList.length - 1].isShow)
"
></el-image> ></el-image>
</div> </div>
</div> </div>
<div class="arrow-container">
<el-image
class="el-flex el-flex-y-center el-flex-center"
style="height: 28px; margin-left: 13px"
:src="stepCompleted[index] ? arrowActive : arrow"
v-if="index < dataList.length - 1"
></el-image>
</div>
</div> </div>
</div> </div>
<!-- 信息确认 --> <!-- 信息确认 -->
@ -89,9 +95,9 @@
</el-col> </el-col>
</el-row> </el-row>
<el-form-item> <el-form-item v-if="Object.keys(baseInfo).length > 0">
<el-row :gutter="30"> <el-row :gutter="30">
<el-col :span="6"> 姓名{{ baseInfo.graduateName }} </el-col> <el-col :span="6"> 姓名 {{ baseInfo.graduateName }} </el-col>
<el-col :span="6"> <el-col :span="6">
性别{{ 性别{{
baseInfo.gender === 1 baseInfo.gender === 1
@ -124,7 +130,7 @@
</el-row> </el-row>
</el-form-item> </el-form-item>
<el-row> <el-row v-if="Object.keys(baseInfo).length > 0">
<el-col :span="24"> <el-col :span="24">
<el-form-item class="el-ml-3" label="退房类型"> <el-form-item class="el-ml-3" label="退房类型">
<el-radio-group v-model="queryParams.checkOutType"> <el-radio-group v-model="queryParams.checkOutType">
@ -157,7 +163,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24" v-if="queryParams.checkOutType === 1"> <el-col :span="24" v-if="queryParams.checkOutType === 1">
<el-form-item label="备注"> <el-form-item label="备注" prop="forceCheckoutDesc">
<el-input <el-input
type="textarea" type="textarea"
v-model="queryParams.forceCheckoutDesc" v-model="queryParams.forceCheckoutDesc"
@ -172,33 +178,53 @@
</div> </div>
<!-- 房间检查 --> <!-- 房间检查 -->
<el-form size="small" label-width="80px"> <el-form
<div v-if="currentStep === 2 || currentStep === 3 || currentStep === 4"> size="small"
label-width="80px"
ref="checkForm"
:model="form"
:rules="checkrules"
>
<div v-if="currentStep != 1">
<div class="el-my-3"> <div class="el-my-3">
<CommonTitle>退房信息</CommonTitle> <CommonTitle>退房信息</CommonTitle>
</div> </div>
<el-form-item> <el-form-item>
<el-row :gutter="30"> <el-row :gutter="30" style="margin-bottom: 52px">
<el-col :span="8"> <el-col :span="7">
入住房间{{ 入住房间{{
(baseInfo.apartmentName || "") + (baseInfo.apartmentName || "") +
(baseInfo.buildingName || "") + (baseInfo.buildingName || "") +
(baseInfo.unit_name || "") + (baseInfo.unit_name || "") +
(baseInfo.houseName || "") + (baseInfo.houseName || "") +
(baseInfo.roomTypeName || "") (baseInfo.roomTypeName || "") ||
$route.query.userInfo.roomNamePath
}} }}
</el-col> </el-col>
<el-col :span="3"> 姓名{{ baseInfo.graduateName }} </el-col>
<el-col :span="3"> <el-col :span="3">
姓名{{
baseInfo.graduateName || $route.query.userInfo.graduateName
}}
</el-col>
<el-col :span="2">
性别{{ 性别{{
baseInfo.gender === 1 baseInfo.gender === 1 || $route.query.userInfo.gender == 1
? "男" ? "男"
: baseInfo.gender === 2 : baseInfo.gender === 2
? "女" ? "女"
: "" : ""
}} }}
</el-col> </el-col>
<el-col :span="6"> 手机号{{ baseInfo.telephone }}</el-col> <el-col :span="6">
手机号{{
baseInfo.telephone || $route.query.userInfo.telephone
}}</el-col
>
<el-col :span="6"
>身份证号{{
baseInfo.idCard || $route.query.userInfo.idCard
}}</el-col
>
</el-row> </el-row>
</el-form-item> </el-form-item>
</div> </div>
@ -247,6 +273,9 @@
:before-remove="beforeRemove" :before-remove="beforeRemove"
> >
<i slot="default" class="el-icon-plus"></i> <i slot="default" class="el-icon-plus"></i>
<div slot="tip" class="el-upload__tip">
最多上传10个附件支持上传图片和视频
</div>
<div slot="file" slot-scope="{ file }"> <div slot="file" slot-scope="{ file }">
<img <img
class="el-upload-list__item-thumbnail" class="el-upload-list__item-thumbnail"
@ -337,104 +366,11 @@
></video> ></video>
</el-dialog> </el-dialog>
</el-form-item> </el-form-item>
<!-- 上传附件 --> <el-form-item prop="agree">
<!-- <el-form-item label="上传附件"> <el-checkbox v-model="form.agree"
<el-upload >确认以上信息无误生成房屋交割单由毕业生在微信小程序端签字确认</el-checkbox
:file-list="state.photoList"
:action="state.uploadUrl"
accept=".jpg,.png,.jpeg,.mp4,.mov,.avi"
list-type="picture-card"
:limit="10"
:on-success="handleUpload"
:class="state.photoList.length === 10 ? 'hideUpload' : ''"
> >
<i slot="default" class="el-icon-plus"></i> </el-form-item>
<!~~ <template #file="{ file }"> ~~>
<div slot="file" slot-scope="{file}">
<img
v-if="
file &&
file.name &&
typeof file.name === 'string' &&
(file.name.indexOf('.jpg') > -1 ||
file.name.indexOf('.png') > -1 ||
file.name.indexOf('.jpeg') > -1)
"
:src="file.url"
alt=""
class="el-upload-list__item-thumbnail"
/>
<video
v-else-if="
file &&
file.name &&
typeof file.name === 'string' &&
(file.name.indexOf('.mp4') > -1 ||
file.name.indexOf('.mov') > -1 ||
file.name.indexOf('.avi') > -1)
"
class="el-upload-list__item-thumbnail"
style="width: 100%; height: 100%"
autoplay
:src="file.url"
>
<source :src="file.url" type="video/mp4" />
<source :src="file.url" type="video/mov" />
<source :src="file.url" type="video/avi" />
</video>
<span class="el-upload-list__item-actions">
<span
class="el-upload-list__item-preview"
@click="handlePreview(file)"
>
<i class="el-icon-zoom-in"></i>
</span>
<span
v-if="!state.disabledBtn"
class="el-upload-list__item-delete"
@click="handleRemove(file)"
>
<i class="el-icon-delete"></i>
</span>
</span>
</div>
<!~~ </template> ~~>
</el-upload>
<el-dialog v-model="state.dialogVisible">
<img
w-full
:src="state.dialogImageFile.url"
alt=""
v-if="
state.dialogImageFile &&
state.dialogImageFile.name &&
typeof state.dialogImageFile.name === 'string' &&
(state.dialogImageFile.name.indexOf('.jpg') > -1 ||
state.dialogImageFile.name.indexOf('.png') > -1 ||
state.dialogImageFile.name.indexOf('.jpeg') > -1)
"
/>
<video
v-else-if="
state.dialogImageFile &&
state.dialogImageFile.name &&
typeof state.dialogImageFile.name === 'string' &&
(state.dialogImageFile.name.indexOf('.mp4') > -1 ||
state.dialogImageFile.name.indexOf('.mov') > -1 ||
state.dialogImageFile.name.indexOf('.avi') > -1)
"
w-full
style="width: 100%; height: 100%"
controls
autoplay
:src="state.dialogImageFile.url"
>
<source :src="state.dialogImageFile.url" type="video/mp4" />
<source :src="state.dialogImageFile.url" type="video/mov" />
<source :src="state.dialogImageFile.url" type="video/avi" />
</video>
</el-dialog>
</el-form-item>-->
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
@ -533,7 +469,12 @@
</el-row> </el-row>
</el-form> </el-form>
<!-- 释放房源 --> <!-- 释放房源 -->
<!-- <el-form size="small" label-width="120px" v-if="currentStep === 4"> <el-form
size="small"
label-width="120px"
ref="relaseForm"
v-if="currentStep === 5"
>
<div class="el-my-3 el-flex"> <div class="el-my-3 el-flex">
<CommonTitle>释放房源</CommonTitle> <CommonTitle>释放房源</CommonTitle>
<span style="color: red; font-size: 14px" <span style="color: red; font-size: 14px"
@ -541,48 +482,85 @@
> >
</div> </div>
<el-row> <el-row>
<el-col v-for="(item, index) in checkItems" :key="index" :span="6"> <el-col
<el-form-item :label="item"> v-for="(item, index) in relaseForm.facilitiesCheckResults"
:key="index"
:span="6"
>
<el-form-item :label="item.facilityId">
<el-select <el-select
v-model="checkStatus[`${item}Status`]" v-model="releaseCheckStatus[index]"
placeholder="请选择" placeholder="请选择"
> >
<el-option label="完好" value="intact"></el-option> <el-option label="完好" value="1"></el-option>
<el-option label="破损" value="damaged"></el-option> <el-option label="破损" value="2"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!~~ 其他说明 ~~> <!-- 其他说明 -->
<el-col :span="16"> <el-col :span="16">
<el-form-item label="其他说明"> <el-form-item label="其他说明">
<el-input <el-input
type="textarea" type="textarea"
v-model="form.remark" v-model="relaseForm.facilitiesCheckDesc"
placeholder="其他详细说明(不超过500字)" placeholder="其他详细说明(不超过500字)"
clearable clearable
disabled
style="width: 240px" style="width: 240px"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!~~ 查看附件 ~~> <!-- 查看附件 -->
<el-col :span="24"> <el-col :span="24">
<el-form-item label="查看附件"> <el-form-item label="查看附件">
<el-upload <el-upload
action="#" class="disable"
action="uploadUlr"
list-type="picture-card" list-type="picture-card"
:auto-upload="false" :auto-upload="false"
:disabled="true"
:headers="$getElUploadHeaders()"
:on-exceed="handleExceed" :on-exceed="handleExceed"
:limit="10" :limit="10"
:file-list="fileList" :file-list="relaseForm.facilitiesCheckImages"
accept="image/*,video/*" accept="image/*,video/*"
> >
<i slot="default" class="el-icon-plus"></i> <!-- <i slot="default" class="el-icon-plus"></i> -->
<template #default></template>
<div slot="file" slot-scope="{ file }"> <div slot="file" slot-scope="{ file }">
<img <img
class="el-upload-list__item-thumbnail" class="el-upload-list__item-thumbnail"
v-if="
file &&
file.name &&
typeof file.name === 'string' &&
(file.name.indexOf('.jpg') > -1 ||
file.name.indexOf('.png') > -1 ||
file.name.indexOf('.jpeg') > -1)
"
style="width: 100%; height: 100%"
:src="file.url" :src="file.url"
alt="" alt=""
/> />
<video
v-else-if="
file &&
file.name &&
typeof file.name === 'string' &&
(file.name.indexOf('.mp4') > -1 ||
file.name.indexOf('.mov') > -1 ||
file.name.indexOf('.avi') > -1)
"
class="el-upload-list__item-thumbnail"
style="width: 100%; height: 100%"
:autoplay="false"
:src="file.url"
controls="controls"
>
<source :src="file.url" type="video/mp4" />
<source :src="file.url" type="video/mov" />
<source :src="file.url" type="video/avi" />
</video>
<span class="el-upload-list__item-actions"> <span class="el-upload-list__item-actions">
<span <span
class="el-upload-list__item-preview" class="el-upload-list__item-preview"
@ -590,52 +568,81 @@
> >
<i class="el-icon-zoom-in"></i> <i class="el-icon-zoom-in"></i>
</span> </span>
<!~~ <span <!-- <span
v-if="!disabled" v-if="!disabled"
class="el-upload-list__item-delete" class="el-upload-list__item-delete"
@click="handleDownload(file)" @click="handleDownload(file)"
> >
<i class="el-icon-download"></i> <i class="el-icon-download"></i>
</span> ~~> </span> -->
<span <!-- <span
v-if="!disabled" v-if="!disabled"
class="el-upload-list__item-delete" class="el-upload-list__item-delete"
@click="handleRemove(file)" @click="handleRemoveA(file)"
> >
<i class="el-icon-delete"></i> <i class="el-icon-delete"></i>
</span> </span> -->
</span> </span>
</div> </div>
</el-upload> </el-upload>
<el-dialog :visible.sync="dialogVisible">
<img
v-if="
dialogImageUrl &&
dialogImageUrl.name &&
typeof dialogImageUrl.name === 'string' &&
(dialogImageUrl.name.indexOf('.jpg') > -1 ||
dialogImageUrl.name.indexOf('.png') > -1 ||
dialogImageUrl.name.indexOf('.jpeg') > -1)
"
width="50%"
height="50%"
:src="dialogImageUrl.url"
alt=""
/>
<video
v-if="
dialogImageUrl &&
dialogImageUrl.name &&
typeof dialogImageUrl.name === 'string' &&
(dialogImageUrl.name.indexOf('.mp4') > -1 ||
dialogImageUrl.name.indexOf('.mov') > -1 ||
dialogImageUrl.name.indexOf('.avi') > -1)
"
class="el-upload-list__item-thumbnail"
style="width: 50%; height: 50%"
autoplay
:src="dialogImageUrl.url"
controls="controls"
></video>
</el-dialog>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!~~ 房间卫生 选择器~~> <!-- 房间卫生 选择器-->
<el-col :span="24"> <el-col :span="24">
<el-form-item label="房间卫生"> <el-form-item label="房间卫生">
<el-select v-model="form.forceClearReason" placeholder="请选择"> <el-select v-model="relaseForm.cleaned" placeholder="请选择">
<el-option label="已打扫" value="1"></el-option> <el-option label="已打扫" value="1"></el-option>
<el-option label="未打扫" value="2"></el-option> <el-option label="未打扫" value="2"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form>--> </el-form>
</div> </div>
<!-- 添加按钮 --> <!-- 添加按钮 -->
<div class="button-group el-flex el-flex-end"> <div class="button-group el-flex el-flex-end">
<el-button @click="currentStep === 1 ? handleCancel() : handlePrevStep()"> <el-button @click="currentStep === 1 ? handleCancel() : handlePrevStep()">
{{ currentStep === 1 ? "取消" : "上一步" }} {{ currentStep === 1 ? "取消" : "上一步" }}
</el-button> </el-button>
{{ currentStep }}--{{ dataList.length }} {{ currentStep }}-{{ dataList.length }}
<el-button <el-button
type="primary" type="primary"
@click=" @click="
currentStep === dataList.length - 1 currentStep === dataList.length - 2 ? handleSuc() : handleNextStep()
? handleReleaseHouse()
: handleNextStep()
" "
> >
{{ currentStep === dataList.length - 1 ? "办理完成" : "下一步" }} {{ currentStep === dataList.length - 2 ? "办理完成" : "下一步" }}
</el-button> </el-button>
</div> </div>
</div> </div>
@ -647,6 +654,8 @@ import {
getResidentInfo, getResidentInfo,
submitCheckout, submitCheckout,
getRoomFacilities, getRoomFacilities,
getRoomCheckRecDetail,
releaseRoom,
} from "@/api/residence/checkout"; } from "@/api/residence/checkout";
export default { export default {
@ -663,38 +672,47 @@ export default {
title: "信息确认", title: "信息确认",
imageSrc: require("@/assets/images/address-card.png"), imageSrc: require("@/assets/images/address-card.png"),
bgColor: "#FBEDC8", bgColor: "#FBEDC8",
isShow: true,
}, },
{ {
title: "房间检查", title: "房间检查",
imageSrc: require("@/assets/images/home-smile.png"), imageSrc: require("@/assets/images/home-smile.png"),
bgColor: "#FBD5D5", bgColor: "#FBD5D5",
isShow: true,
}, },
{ {
title: "房屋交割单", title: "房屋交割单",
imageSrc: require("@/assets/images/md-beenhere.png"), imageSrc: require("@/assets/images/md-beenhere.png"),
bgColor: "#C4DEFB ", bgColor: "#C4DEFB ",
isShow: true,
}, },
{ {
title: "退还保证金", title: "退还保证金",
imageSrc: require("@/assets/images/pay-circle.png"), imageSrc: require("@/assets/images/pay-circle.png"),
bgColor: "#8BFDD3 ", bgColor: "#8BFDD3 ",
isShow: true,
}, },
{ {
title: "办理完成", title: "办理完成",
imageSrc: require("@/assets/images/check_circle.png"), imageSrc: require("@/assets/images/check_circle.png"),
bgColor: "#CFCDFB ", bgColor: "#CFCDFB ",
isShow: true,
},
{
title: "释放房源",
imageSrc: require("@/assets/images/md-beenhere.png"),
bgColor: "#C4DEFB ",
isShow: false,
}, },
], ],
susIcon: require("@/assets/images/check-circle-fas.png"), susIcon: require("@/assets/images/check-circle-fas.png"),
arrow: require("@/assets/images/arrow_forward.png"), arrow: require("@/assets/images/arrow_forward.png"),
arrowActive: require("@/assets/images/arrow_forward_a.png"), arrowActive: require("@/assets/images/arrow_forward_a.png"),
// //
baseInfo: { baseInfo: {},
houseId: "", // ID
},
// //
queryParams: { queryParams: {
idCard: "370222199101070707", idCard: "",
telphone: "", telphone: "",
checkOutType: 0, // 退 checkOutType: 0, // 退
}, },
@ -706,21 +724,22 @@ export default {
}, // }, //
// //
rules: { rules: {
forceClearReason: [ forceCheckoutReason: [
{ required: true, message: "请选择强制清退原因", trigger: "change" }, { required: true, message: "请选择强制清退原因", trigger: "change" },
], ],
}, },
checkrules: {
agree: [{ required: true, message: "请确认勾选", trigger: "change" }],
},
// //
showSearch: true, showSearch: true,
// 退: 1-退 2-退 // 退: 1-退 2-退
checkOutType: [ checkOutType: [
{ label: "正常退房", value:0 }, { label: "正常退房", value: 0 },
{ label: "强制退房", value: 1 }, { label: "强制退房", value: 1 },
], ],
// 退 // 退
forceClearReason: [ forceClearReason: [{ label: "违法居住条款,故意破坏房间设施", value: 1 }],
{ label: "违法居住条款,故意破坏房间设施", value: 1 },
],
currentStep: 1, // currentStep: 1, //
checkItems: [], checkItems: [],
checkStatus: [ checkStatus: [
@ -747,8 +766,27 @@ export default {
dialogImageUrl: "", // URL dialogImageUrl: "", // URL
disabled: false, // disabled: false, //
formDataList: [], // formDataList: [], //
relaseForm: [], //
releaseCheckStatus: [],
}; };
}, },
created() {
const { showReleaseStep, roomId, userInfo } = this.$route.query;
if (showReleaseStep) {
this.currentStep = this.dataList.length - 1;
this.dataList[this.dataList.length - 1].isShow = true;
this.stepCompleted = this.dataList.map(
(_, index) => index < this.currentStep - 1
);
this.getRoomCheckoutDetail(roomId);
}
console.log("userInfo::", userInfo);
if (userInfo) {
this.queryParams.idCard = userInfo.idCard;
this.handleQuery();
}
},
methods: { methods: {
goBack() { goBack() {
this.$router.push({ path: "/" }); this.$router.push({ path: "/" });
@ -760,7 +798,7 @@ export default {
getResidentInfo({ idCard, telphone }).then((res) => { getResidentInfo({ idCard, telphone }).then((res) => {
if (res.code === 200) { if (res.code === 200) {
this.baseInfo = res.data; this.baseInfo = res.data;
// this.baseInfo.houseId = res.data.houseId this.baseInfo.roomId = res.data.roomId;
this.ongetRoomFacilities(res.data.houseId); this.ongetRoomFacilities(res.data.houseId);
} }
console.log("查询结果:", res); console.log("查询结果:", res);
@ -790,49 +828,68 @@ export default {
// //
handleNextStep() { handleNextStep() {
if (this.currentStep < this.dataList.length) { if (this.currentStep < this.dataList.length) {
this.currentStep++;
let currentFormData = {}; let currentFormData = {};
console.log("当前步骤:", this.currentStep); console.log("当前步骤:", this.currentStep);
switch (this.currentStep) { if (this.currentStep === 1) {
case 1: if (Object.keys(this.baseInfo).length === 0) {
currentFormData = { ...this.queryParams }; this.$message.error("请输入身份证或手机号查询信息");
break; return;
}
case 2: if (this.queryParams.checkOutType === 1) {
const facilitiesCheckResults = this.checkItems.map( this.$refs["queryForm"].validate(async (valid) => {
(item, index) => ({ if (!valid) {
facilityId: item.id, this.$message.error("请选择强制清退原因");
checkResult: this.checkStatus[index], return;
}) } else {
); this.currentStep++;
currentFormData = { }
...this.form, });
facilitiesCheckResults, } else {
}; this.currentStep++;
}
break; currentFormData = { ...this.queryParams };
case 3: } else if (this.currentStep === 2) {
currentFormData = { ...this.form }; this.$refs["checkForm"].validate(async (valid) => {
break; console.log("valid::", valid);
case 4: if (!valid) {
currentFormData = { this.$message.error("请勾选同意");
...this.queryParams, return;
...this.form, } else {
}; const facilitiesCheckResults = this.checkItems.map(
break; (item, index) => ({
facilityId: item.id,
checkResult: this.checkStatus[index],
})
);
currentFormData = {
...this.queryParams,
...this.form,
facilitiesCheckResults,
};
console.log("currentFormData::", currentFormData);
this.submitCheckoutForm(currentFormData);
this.currentStep++;
}
});
} else if (this.currentStep === 3) {
this.currentStep++;
} else if (this.currentStep === 4) {
// this.currentStep++;
// currentFormData = {
// ...this.queryParams,
// ...this.form,
// };
} }
// console.log("currentFormData::", currentFormData);
console.log("currentFormData::", currentFormData); // this.formDataList[this.currentStep] = currentFormData;
this.formDataList[this.currentStep] = currentFormData;
console.log("formDataList::", this.formDataList); // console.log("formDataList::", this.formDataList);
const finalData = Object.assign({}, ...this.formDataList); // const finalData = Object.assign({}, ...this.formDataList);
console.log("finalData", finalData); // console.log("finalData", finalData);
if (this.currentStep > 1) { if (this.currentStep > 1) {
this.stepCompleted[this.currentStep - 2] = true; this.stepCompleted[this.currentStep - 2] = true;
// if (this.currentStep === 4) { // if (this.currentStep === 5) {
// this.stepCompleted[this.currentStep - 1] = true; // this.stepCompleted[this.currentStep - 1] = true;
// } // }
console.log("stepCompleted下::", this.stepCompleted); console.log("stepCompleted下::", this.stepCompleted);
@ -849,32 +906,46 @@ export default {
console.log("获取房间设施"); console.log("获取房间设施");
}, },
// //
submitCheckoutForm() { submitCheckoutForm(formData) {
console.log("this.formDataList", this.formDataList); console.log("formParams", formData);
const facilitiesCheckResults = this.checkItems.map((item, index) => ({ let formParams = {};
facilityId: item.id, if (!formData) {
checkResult: this.checkStatus[index], const facilitiesCheckResults = this.checkItems.map((item, index) => ({
})); facilityId: item.id,
const formData = { checkResult: this.checkStatus[index],
...this.queryParams, }));
facilitiesCheckResults, formParams = {
...this.form, ...this.queryParams,
}; facilitiesCheckResults,
console.log("formData", formData); ...this.form,
};
} else {
formParams = formData;
}
console.log("formParams::", formParams);
// const finalData = Object.assign({}, ...this.formDataList); // const finalData = Object.assign({}, ...this.formDataList);
// console.log("finalData", finalData); // console.log("finalData", finalData);
submitCheckout(formData).then((response) => { submitCheckout(formParams).then((response) => {
console.log("提交结果:", response); console.log("提交结果:", response);
if (response.code === 200) { if (response.code === 200) {
this.$message.success("提交成功"); this.$message.success("提交成功");
this.$router.push({ path: "/" }); // stepCompleted true
} const lastIndex = this.dataList.length - 1;
this.stepCompleted[lastIndex] = true;
this.$router.push({ path: "/" });
}
}); });
}, },
//
handleSuc() {
this.submitCheckoutForm();
},
// //
handleReleaseHouse() { handleReleaseHouse() {
this.submitCheckoutForm(); console.log(this.relaseForm);
releaseRoom(this.relaseForm).then((res) => {});
console.log("释放房源操作"); console.log("释放房源操作");
}, },
@ -952,6 +1023,24 @@ export default {
console.log("实际赔付金额变为:", value); console.log("实际赔付金额变为:", value);
this.form.marginActualCompensation = value; this.form.marginActualCompensation = value;
}, },
//
async getRoomCheckoutDetail(roomId) {
try {
const res = await getRoomCheckRecDetail({
roomId: roomId,
});
if (res.code === 200) {
this.relaseForm = res.data;
this.releaseCheckStatus = this.relaseForm.facilitiesCheckResults.map(
(item) => item.checkResult.toString()
);
console.log("房间检查结果:", res);
console.log("房间检查结果:", res);
}
} catch (error) {
console.log(error);
}
},
}, },
computed: { computed: {
// //
@ -984,7 +1073,7 @@ export default {
margin-top: 20px; margin-top: 20px;
.tit { .tit {
padding: 15px 24px; padding: 15px 22px;
border-radius: 4px; border-radius: 4px;
} }
.model { .model {
@ -1006,7 +1095,7 @@ export default {
.arrow-container { .arrow-container {
width: 42px; width: 42px;
height: 28px; height: 28px;
margin-left: 13px; //margin-left: 13px;
display: inline-flex; display: inline-flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
@ -1038,7 +1127,10 @@ export default {
justify-content: center; justify-content: center;
align-content: center; align-content: center;
} }
:v-deep el-textarea__inner { ::v-deep el-textarea__inner {
min-height: 200px !important; min-height: 200px !important;
} }
::v-deep .disable .el-upload--picture-card {
display: none;
}
</style> </style>

Loading…
Cancel
Save