Files
RentWeAppFront/pages-assets/discharge/leaseCancelList.vue
2026-01-30 09:01:38 +08:00

264 lines
6.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view class="reserve-records">
<!-- 顶部导航栏 -->
<customNavbar title="退租申请" :is-transparent="navbarStyle.isTransparent" :bg-color="navbarStyle.bgColor"
:text-color="navbarStyle.textColor" :opacity="navbarStyle.opacity" :show-home="true" />
<!-- 内容部分 -->
<scroll-view scroll-y class="scroll-content" @scrolltolower="loadMore" @refresherrefresh="refresh"
:refresher-enabled="true" :refresher-triggered="isRefreshing">
<view v-if="flowList.length > 0" class="record-list">
<view v-for="item in flowList" :key="item.id" class="record-card" @click="goDetail(item)">
<!-- 合同名称和状态 -->
<view class="card-header">
<text class="contract-name">{{ item.contractName }}</text>
<text :class="['record-status', statusText(item.status)]">
{{ item.status||'未知' }}
</text>
</view>
<!-- 内容部分 -->
<view class="card-content">
<!-- 预约时间 -->
<view class="info-item">
<text class="info-label">申请时间</text>
<text class="info-value"> {{item.applyDate || ''}} </text>
</view>
<view class="info-item">
<text class="info-label">退租资产</text>
<text class="info-value"> {{item.dischargeItem || ''}} </text>
</view>
<view class="info-item">
<text class="info-label">审批意见</text>
<text class="info-value"> {{item.remark || ''}} </text>
</view>
</view>
</view>
<u-loadmore :status="loadStatus" />
</view>
<view v-else class="empty">
<u-empty mode="list" text="暂无退租申请记录" />
</view>
</scroll-view>
<!-- 底部新增留言按钮 -->
<!-- <view class="add-btn-container">
<button class="add-btn" @click="toApply()">新增退租申请</button>
</view> -->
</view>
</template>
<script>
export default {
data() {
return {
pageNo: 1,
pageSize: 10,
flowList: [],
loadStatus: 'loadmore',
isRefreshing: false
};
},
methods: {
statusText(status) {
switch (status) {
case '申请中':
case '已批准':
return 'pending';
case '退租完成':
return 'done';
case '已驳回':
return 'reject';
default:
return 'unknown';
}
},
formatDate(dateStr) {
// 格式化日期例如2025-11-10 周五 09:00
const date = new Date(dateStr);
const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const weekday = weekdays[date.getDay()];
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day} ${weekday} ${hours}:${minutes}`;
},
fetchApplys() {
if (this.loadStatus !== 'loadmore') return;
this.loadStatus = 'loading';
let url = '/discharge/queryPage'
this.$u.post(url, {
pageNo: this.pageNo,
pageSize: this.pageSize
}, {
WT: this.$getToken()
}).then(res => {
const rows = res.data.result || [];
if (this.pageNo === 1) this.flowList = [];
this.flowList = this.flowList.concat(rows);
if (rows.length < this.pageSize) {
this.loadStatus = 'nomore';
} else {
this.pageNo++;
this.loadStatus = 'loadmore';
}
}).catch(err => {
console.log("获取退租申请信息失败:", err)
this.loadStatus = 'loadmore';
})
},
toApply() {
this.$u.route({
url: '/pages-assets/discharge/leaseCancel'
})
},
viewLocation(item) {
uni.openLocation({
latitude: item.lat,
longitude: item.lng,
name: item.assetName,
address: item.assetAddress
});
},
callManager(phone) {
if (!phone) return;
uni.makePhoneCall({
phoneNumber: phone
});
},
loadMore() {
this.fetchApplys();
},
refresh() {
this.isRefreshing = true;
setTimeout(() => {
this.isRefreshing = false;
}, 1000);
}
},
onShow() {
this.$checkToken(this.$getToken())
this.refresh()
},
onLoad() {
this.fetchApplys()
}
};
</script>
<style lang="scss" scoped>
.reserve-records {
background: #f5f5f5;
min-height: 100vh;
padding-top: 175rpx;
/* 给导航栏留空间 */
}
.scroll-content {
height: calc(100vh - 120rpx);
}
.record-list {
padding: 30rpx 40rpx;
}
.record-card {
background: #fff;
border-radius: 12rpx;
padding: 32rpx;
margin-bottom: 30rpx;
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
}
.card-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24rpx;
}
.contract-name {
font-size: 32rpx;
font-weight: 500;
color: #2D2B2C;
}
.record-status {
font-size: 26rpx;
padding: 10rpx 15rpx;
border-radius: 4rpx;
&.done {
background: #FCE5E0; /* 保持原有浅橙色背景 */
color: #ED7748; /* 保持原有橙色文字 */
}
&.pending {
background: #F2F3F7;
color: #86868C;
}
&.reject {
background: #FFE4E1; /* 浅红色背景 */
color: #DC143C; /* 深红色文字 */
}
}
.card-content {
margin-bottom: 32rpx;
}
.info-item {
display: flex;
align-items: flex-start;
}
.info-item:last-child {
margin-bottom: 0;
}
.info-label {
font-size: 24rpx;
color: #666;
width: 120rpx;
flex-shrink: 0;
line-height: 44rpx;
}
.info-value {
font-size: 24rpx;
color: #333;
flex: 1;
line-height: 44rpx;
}
.add-btn-container {
position: fixed;
bottom: 0;
left: 0;
right: 0;
padding: 30rpx 40rpx;
background-color: #f5f5f5;
box-shadow: 0 -2rpx 12rpx rgba(0, 0, 0, 0.05);
}
.add-btn {
width: 100%;
height: 80rpx;
background: linear-gradient(90deg, #FF6F63 0%, #FB392A 100%);
border-radius: 10rpx;
color: #ffffff;
font-size: 32rpx;
border: none;
display: flex;
align-items: center;
justify-content: center;
}
.empty {
margin-top: 200rpx;
}
</style>