317 lines
8.0 KiB
Vue
317 lines
8.0 KiB
Vue
<template>
|
||
<view class="page">
|
||
<u-navbar title="押金退还详情" :border-bottom="false" :background="bgc" back-icon-color="#262B37" title-color='#262B37'
|
||
title-size='36' height='36' id="navbar">
|
||
</u-navbar>
|
||
<view class="topbj"></view>
|
||
|
||
<scroll-view class="content" scroll-y>
|
||
<!-- 状态卡片 -->
|
||
<view class="status-card">
|
||
<view class="status-icon" :class="statusClass">
|
||
<u-icon :name="statusIcon" size="60" color="#fff"></u-icon>
|
||
</view>
|
||
<view class="status-text">{{statusText}}</view>
|
||
<view class="status-desc" v-if="detailInfo.status == 1">您的申请正在审核中,请耐心等待</view>
|
||
<view class="status-desc" v-if="detailInfo.status == 2">审核通过,退款处理中</view>
|
||
<view class="status-desc" v-if="detailInfo.status == 3">退款已成功到账</view>
|
||
<view class="status-desc" v-if="detailInfo.status == 4">申请已被驳回</view>
|
||
</view>
|
||
|
||
<!-- 申请信息 -->
|
||
<view class="info-card">
|
||
<view class="card-title">申请信息</view>
|
||
<view class="info-list">
|
||
<view class="info-item">
|
||
<text class="label">申请单号</text>
|
||
<text class="value">{{detailInfo.no || '--'}}</text>
|
||
</view>
|
||
<view class="info-item">
|
||
<text class="label">申请金额</text>
|
||
<text class="value price">¥{{detailInfo.amount ? parseFloat(detailInfo.amount).toFixed(2) : '0.00'}}</text>
|
||
</view>
|
||
<view class="info-item">
|
||
<text class="label">运营区</text>
|
||
<text class="value">{{detailInfo.areaName || '--'}}</text>
|
||
</view>
|
||
<view class="info-item">
|
||
<text class="label">申请时间</text>
|
||
<text class="value">{{detailInfo.createTime || '--'}}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 审核信息 -->
|
||
<view class="info-card" v-if="detailInfo.status >= 2">
|
||
<view class="card-title">审核信息</view>
|
||
<view class="info-list">
|
||
<view class="info-item" v-if="detailInfo.verifyTime">
|
||
<text class="label">审核时间</text>
|
||
<text class="value">{{detailInfo.verifyTime}}</text>
|
||
</view>
|
||
<view class="info-item" v-if="detailInfo.operatorName">
|
||
<text class="label">审核人</text>
|
||
<text class="value">{{detailInfo.operatorName}}</text>
|
||
</view>
|
||
<view class="info-item" v-if="detailInfo.remark">
|
||
<text class="label">审核备注</text>
|
||
<text class="value">{{detailInfo.remark}}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 退款信息 -->
|
||
<view class="info-card" v-if="detailInfo.status == 3">
|
||
<view class="card-title">退款信息</view>
|
||
<view class="info-list">
|
||
<view class="info-item" v-if="detailInfo.refundTime">
|
||
<text class="label">退款时间</text>
|
||
<text class="value">{{detailInfo.refundTime}}</text>
|
||
</view>
|
||
<view class="info-item">
|
||
<text class="label">退款金额</text>
|
||
<text class="value price">¥{{detailInfo.amount ? parseFloat(detailInfo.amount).toFixed(2) : '0.00'}}</text>
|
||
</view>
|
||
<view class="info-item" v-if="detailInfo.no">
|
||
<text class="label">退款单号</text>
|
||
<text class="value">{{detailInfo.no}}</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 驳回原因 -->
|
||
<view class="info-card" v-if="detailInfo.status == 4 && detailInfo.rejectReason">
|
||
<view class="card-title">驳回原因</view>
|
||
<view class="reject-reason">
|
||
{{detailInfo.rejectReason}}
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 其他信息 -->
|
||
<view class="info-card" v-if="detailInfo.remark">
|
||
<view class="card-title">备注信息</view>
|
||
<view class="remark-content">
|
||
{{detailInfo.remark}}
|
||
</view>
|
||
</view>
|
||
|
||
<view class="footer-spacer"></view>
|
||
</scroll-view>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
data() {
|
||
return {
|
||
bgc: {
|
||
backgroundColor: "#C4E1FF",
|
||
},
|
||
id: '',
|
||
detailInfo: {},
|
||
isMerchant: false
|
||
}
|
||
},
|
||
onLoad(options) {
|
||
if(options.id){
|
||
this.id = options.id
|
||
// 判断是否为商户端访问
|
||
this.isMerchant = options.isMerchant === 'true' || options.isMerchant === true
|
||
this.getDetail()
|
||
}
|
||
},
|
||
computed: {
|
||
// 状态样式类
|
||
statusClass(){
|
||
const status = this.detailInfo.status
|
||
const classMap = {
|
||
1: 'status-pending',
|
||
2: 'status-processing',
|
||
3: 'status-success',
|
||
4: 'status-rejected'
|
||
}
|
||
return classMap[status] || 'status-pending'
|
||
},
|
||
// 状态图标
|
||
statusIcon(){
|
||
const status = this.detailInfo.status
|
||
const iconMap = {
|
||
1: 'clock',
|
||
2: 'hourglass',
|
||
3: 'checkmark-circle',
|
||
4: 'close-circle'
|
||
}
|
||
return iconMap[status] || 'info-circle'
|
||
},
|
||
// 状态文本
|
||
statusText(){
|
||
const status = this.detailInfo.status
|
||
const statusMap = {
|
||
1: '待审核',
|
||
2: '待退款',
|
||
3: '退款成功',
|
||
4: '已驳回'
|
||
}
|
||
return statusMap[status] || '--'
|
||
}
|
||
},
|
||
methods: {
|
||
// 获取详情
|
||
getDetail(){
|
||
uni.showLoading({
|
||
title: '加载中...',
|
||
mask: true
|
||
})
|
||
// 判断是否为商户端(通过URL参数或接口路径判断)
|
||
const isMerchant = this.isMerchant || false
|
||
const apiUrl = isMerchant ? `/bst/depositRefund/${this.id}` : `/app/depositRefund/detail?id=${this.id}`
|
||
|
||
this.$u.get(apiUrl).then((res) => {
|
||
uni.hideLoading()
|
||
if (res.code == 200) {
|
||
// 商户端接口返回的数据结构可能不同,需要适配
|
||
this.detailInfo = isMerchant ? (res.data || res) : (res.data || {})
|
||
}else if(res.code == 401){
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '您当前未登录,是否前去登录?',
|
||
showCancel: true,
|
||
success: function (res) {
|
||
if (res.confirm) {
|
||
uni.reLaunch({
|
||
url:'/pages/login/login'
|
||
})
|
||
}
|
||
}
|
||
})
|
||
}else{
|
||
uni.showToast({
|
||
title: res.msg || '获取详情失败',
|
||
icon: 'none'
|
||
})
|
||
}
|
||
}).catch(err => {
|
||
uni.hideLoading()
|
||
uni.showToast({
|
||
title: '网络错误',
|
||
icon: 'none'
|
||
})
|
||
})
|
||
},
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
page {
|
||
background: #F7F7F7;
|
||
}
|
||
.topbj{
|
||
width: 100%;
|
||
height: 22rpx;
|
||
background-color: #C4E1FF;
|
||
}
|
||
.content{
|
||
height: calc(100vh - 88rpx);
|
||
padding: 20rpx;
|
||
box-sizing: border-box;
|
||
}
|
||
.status-card{
|
||
background: #FFFFFF;
|
||
border-radius: 20rpx;
|
||
padding: 60rpx 40rpx;
|
||
margin-bottom: 20rpx;
|
||
text-align: center;
|
||
.status-icon{
|
||
width: 120rpx;
|
||
height: 120rpx;
|
||
border-radius: 50%;
|
||
margin: 0 auto 30rpx;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
&.status-pending{
|
||
background: linear-gradient(135deg, #FFA726 0%, #FF8A65 100%);
|
||
}
|
||
&.status-processing{
|
||
background: linear-gradient(135deg, #42A5F5 0%, #1E88E5 100%);
|
||
}
|
||
&.status-success{
|
||
background: linear-gradient(135deg, #66BB6A 0%, #43A047 100%);
|
||
}
|
||
&.status-rejected{
|
||
background: linear-gradient(135deg, #EF5350 0%, #E53935 100%);
|
||
}
|
||
}
|
||
.status-text{
|
||
font-size: 40rpx;
|
||
font-weight: 600;
|
||
color: #3D3D3D;
|
||
margin-bottom: 20rpx;
|
||
}
|
||
.status-desc{
|
||
font-size: 28rpx;
|
||
color: #808080;
|
||
}
|
||
}
|
||
.info-card{
|
||
background: #FFFFFF;
|
||
border-radius: 20rpx;
|
||
padding: 30rpx;
|
||
margin-bottom: 20rpx;
|
||
.card-title{
|
||
font-size: 32rpx;
|
||
font-weight: 600;
|
||
color: #3D3D3D;
|
||
margin-bottom: 30rpx;
|
||
padding-left: 20rpx;
|
||
border-left: 6rpx solid #4297F3;
|
||
}
|
||
.info-list{
|
||
.info-item{
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
padding: 24rpx 0;
|
||
border-bottom: 1rpx solid #F0F0F0;
|
||
&:last-child{
|
||
border-bottom: none;
|
||
}
|
||
.label{
|
||
font-size: 28rpx;
|
||
color: #808080;
|
||
}
|
||
.value{
|
||
font-size: 28rpx;
|
||
color: #3D3D3D;
|
||
&.price{
|
||
font-weight: 600;
|
||
color: #4297F3;
|
||
font-size: 32rpx;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
.reject-reason{
|
||
font-size: 28rpx;
|
||
color: #3D3D3D;
|
||
line-height: 1.6;
|
||
padding: 20rpx;
|
||
background: #FFF5F5;
|
||
border-radius: 10rpx;
|
||
border-left: 4rpx solid #EF5350;
|
||
}
|
||
.remark-content{
|
||
font-size: 28rpx;
|
||
color: #3D3D3D;
|
||
line-height: 1.6;
|
||
padding: 20rpx;
|
||
background: #F8F9FA;
|
||
border-radius: 10rpx;
|
||
}
|
||
}
|
||
.footer-spacer{
|
||
height: 40rpx;
|
||
}
|
||
</style>
|