2025-12-27 17:22:45 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<view class="page-view">
|
|
|
|
|
|
<!-- 顶部导航栏 -->
|
|
|
|
|
|
<customNavbar title="留言详情" :is-transparent="navbarStyle.isTransparent" :bg-color="navbarStyle.bgColor"
|
|
|
|
|
|
:text-color="navbarStyle.textColor" :opacity="navbarStyle.opacity" :extra-icons="navbarStyle.extraIcons"
|
|
|
|
|
|
:show-home="false" />
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 留言详情内容 -->
|
|
|
|
|
|
<view class="detail-container">
|
|
|
|
|
|
<view class="detail-card">
|
|
|
|
|
|
<!-- 反馈内容标题 -->
|
2026-01-15 17:18:24 +08:00
|
|
|
|
<view class="content-title">{{messageDetail.title}}</view>
|
2025-12-27 17:22:45 +08:00
|
|
|
|
|
|
|
|
|
|
<!-- 反馈内容文本 -->
|
|
|
|
|
|
<view class="content-text">
|
2026-01-15 17:18:24 +08:00
|
|
|
|
{{messageDetail.content}}
|
2025-12-27 17:22:45 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 底部信息:时间和状态 -->
|
|
|
|
|
|
<view class="bottom-info">
|
|
|
|
|
|
<text class="detail-time">2023年10-26 14:30</text>
|
|
|
|
|
|
<view class="status-tag">
|
|
|
|
|
|
<text class="status-dot"></text>
|
|
|
|
|
|
<text class="status-text">待处理</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
export default {
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
// 导航栏样式控制
|
2026-01-15 17:18:24 +08:00
|
|
|
|
id: null,
|
2025-12-27 17:22:45 +08:00
|
|
|
|
navbarStyle: {
|
|
|
|
|
|
isTransparent: true,
|
|
|
|
|
|
bgColor: '#ffffff',
|
|
|
|
|
|
textColor: '#000000',
|
|
|
|
|
|
opacity: 0,
|
|
|
|
|
|
extraIcons: ['ellipsis', 'eye'] // 右侧额外图标
|
|
|
|
|
|
},
|
|
|
|
|
|
// 滚动距离
|
|
|
|
|
|
scrollTop: 0,
|
|
|
|
|
|
// 留言详情数据
|
2026-01-15 17:18:24 +08:00
|
|
|
|
messageDetail: null
|
2025-12-27 17:22:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onPageScroll(e) {
|
|
|
|
|
|
this.scrollTop = e.scrollTop;
|
|
|
|
|
|
// 计算导航栏透明度和样式
|
|
|
|
|
|
this.updateNavbarStyle(e.scrollTop);
|
|
|
|
|
|
},
|
2026-01-15 17:18:24 +08:00
|
|
|
|
onShow(){
|
|
|
|
|
|
this.$checkToken(this.$getToken())
|
|
|
|
|
|
},
|
2025-12-27 17:22:45 +08:00
|
|
|
|
onLoad(options) {
|
|
|
|
|
|
// 从路由参数中获取留言ID
|
2026-01-15 17:18:24 +08:00
|
|
|
|
this.id = options.id;
|
2025-12-27 17:22:45 +08:00
|
|
|
|
// 调用接口获取留言详情
|
2026-01-15 17:18:24 +08:00
|
|
|
|
this.getFallbackDetail();
|
2025-12-27 17:22:45 +08:00
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
2026-01-15 17:18:24 +08:00
|
|
|
|
getFallbackDetail() {
|
|
|
|
|
|
let token = this.$getToken();
|
|
|
|
|
|
let url = `/fallback/detail?id=${this.id}`
|
|
|
|
|
|
this.$u.get(url,{}, {
|
|
|
|
|
|
WT: token
|
|
|
|
|
|
}).then(result => {
|
|
|
|
|
|
this.messageDetail = result.data;
|
|
|
|
|
|
}).catch(err => {
|
|
|
|
|
|
console.log("获取留言详情信息失败:", err)
|
|
|
|
|
|
})
|
2025-12-27 17:22:45 +08:00
|
|
|
|
},
|
|
|
|
|
|
// 根据滚动距离更新导航栏样式
|
|
|
|
|
|
updateNavbarStyle(scrollTop) {
|
|
|
|
|
|
// 定义滚动阈值,超过此值导航栏变为不透明
|
|
|
|
|
|
const threshold = 200;
|
|
|
|
|
|
|
|
|
|
|
|
// 计算透明度
|
|
|
|
|
|
let opacity = scrollTop / threshold;
|
|
|
|
|
|
opacity = Math.min(opacity, 1);
|
|
|
|
|
|
opacity = Math.max(opacity, 0);
|
|
|
|
|
|
|
|
|
|
|
|
// 更新导航栏样式
|
|
|
|
|
|
this.navbarStyle.opacity = opacity;
|
|
|
|
|
|
|
|
|
|
|
|
if (opacity > 0.5) {
|
|
|
|
|
|
this.navbarStyle.isTransparent = false;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.navbarStyle.isTransparent = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
|
|
.page-view {
|
|
|
|
|
|
/* 给导航栏留空间 */
|
2026-01-15 17:18:24 +08:00
|
|
|
|
padding-top: 175rpx;
|
2025-12-27 17:22:45 +08:00
|
|
|
|
min-height: 100vh;
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
background: linear-gradient(0deg, #F3F1ED 43%, #F5E9DB 100%);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.detail-container {
|
|
|
|
|
|
padding: 30rpx 40rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.detail-card {
|
|
|
|
|
|
background-color: #ffffff;
|
|
|
|
|
|
border-radius: 12rpx;
|
|
|
|
|
|
padding: 32rpx;
|
|
|
|
|
|
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.content-title {
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
color: #2D2B2C;
|
|
|
|
|
|
margin-bottom: 24rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.content-text {
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #585858;
|
|
|
|
|
|
line-height: 44rpx;
|
|
|
|
|
|
padding: 24rpx;
|
|
|
|
|
|
background-color: #f9f9f9;
|
|
|
|
|
|
border-radius: 8rpx;
|
|
|
|
|
|
margin-bottom: 24rpx;
|
|
|
|
|
|
word-break: break-all;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.bottom-info {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
padding-top: 20rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.detail-time {
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #86868C;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.status-tag {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.status-dot {
|
|
|
|
|
|
display: inline-block;
|
|
|
|
|
|
width: 31rpx;
|
|
|
|
|
|
height: 31rpx;
|
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
|
background-color: #fff;
|
|
|
|
|
|
border: 10rpx solid #6688FC;
|
|
|
|
|
|
margin-right: 10rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.status-text {
|
|
|
|
|
|
font-size: 30rpx;
|
|
|
|
|
|
color: #6688FC;
|
|
|
|
|
|
margin-top: -5rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|