<template>
|
<view class="itinerary-page">
|
<view class="top-fixed">
|
<view class="top-gradient"></view>
|
<view class="top-inner">
|
<view :style="{ height: statusbarHeight + 'px' }"></view>
|
<view class="header-bar" :style="{ height: navHeight + 'px' }">
|
<text class="header-title">我的消息</text>
|
</view>
|
</view>
|
</view>
|
<view class="content">
|
<view class="message-item" v-for="item in noticeList" :key="item.id" @click="goDetail(item)">
|
<view class="message-item-image">
|
<view class="message-item-image-dian" v-if="item.status === 0"></view>
|
<image src="/static/icon/xiaoxi_ic_tongzhi3@2x.png" mode="widthFix"></image>
|
</view>
|
<view class="message-item-info">
|
<text>{{ item.title }}</text>
|
<text>{{ item.content }}</text>
|
<text>{{ item.createDate }}</text>
|
</view>
|
</view>
|
</view>
|
<custom-tabbar></custom-tabbar>
|
</view>
|
</template>
|
|
<script>
|
import { mapState } from 'vuex'
|
import CustomTabbar from '@/components/custom-tabbar/custom-tabbar.vue'
|
|
export default {
|
components: {
|
CustomTabbar
|
},
|
data() {
|
return {
|
noticeList: [],
|
pageNum: 1,
|
pageSize: 10,
|
total: 0
|
}
|
},
|
computed: {
|
...mapState(['navHeight', 'statusbarHeight', 'token'])
|
},
|
async onShow() {
|
await this.$onLaunched
|
if (!this.token) {
|
return
|
}
|
this.pageNum = 1
|
this.total = 0
|
this.noticeList = []
|
this.getNoticeList()
|
},
|
onReachBottom() {
|
if (this.noticeList.length < this.total) {
|
this.pageNum++
|
this.getNoticeList()
|
}
|
},
|
methods: {
|
goDetail(item){
|
uni.navigateTo({
|
url:'/shop/pages/order-details/order-details?userType=0&id='+item.objId
|
})
|
},
|
async getNoticeList() {
|
const res = await this.$u.api.shopNoticePage({
|
page: this.pageNum,
|
capacity: this.pageSize,
|
model: {
|
userType: 2
|
}
|
})
|
if (res.code === 200) {
|
if (this.pageNum === 1) {
|
this.noticeList = res.data.records || []
|
} else {
|
this.noticeList = [...this.noticeList, ...(res.data.records || [])]
|
}
|
this.total = res.data.total || 0
|
}
|
}
|
}
|
}
|
</script>
|
<style>
|
page {
|
background-color: #F8F9FB;
|
}
|
</style>
|
<style lang="scss" scoped>
|
.top-fixed {
|
position: sticky;
|
left: 0;
|
top: 0;
|
width: 100%;
|
z-index: 20;
|
}
|
|
.top-gradient {
|
position: absolute;
|
left: 0;
|
top: 0;
|
width: 100%;
|
height: 100%;
|
background: linear-gradient(90deg, #1ba8fa 0%, #73e5cf 100%);
|
}
|
|
.top-inner {
|
position: relative;
|
z-index: 1;
|
padding-bottom: 18rpx;
|
}
|
|
.header-bar {
|
padding: 0 30rpx;
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
box-sizing: border-box;
|
}
|
|
.header-title {
|
font-weight: 600;
|
font-size: 40rpx;
|
color: #FFFFFF;
|
}
|
|
.content {
|
width: 100%;
|
padding: 20rpx 30rpx;
|
box-sizing: border-box;
|
.message-item {
|
width: 100%;
|
padding: 30rpx;
|
box-sizing: border-box;
|
background: #FFFFFF;
|
border-radius: 16rpx;
|
display: flex;
|
align-items: flex-start;
|
margin-bottom: 20rpx;
|
.message-item-image {
|
flex-shrink: 0;
|
width: 64rpx;
|
height: 64rpx;
|
margin-right: 20rpx;
|
position: relative;
|
image {
|
width: 100%;
|
height: 100%;
|
}
|
.message-item-image-dian {
|
position: absolute;
|
right: 0;
|
top: 0;
|
width: 18rpx;
|
height: 18rpx;
|
background: #FF0000;
|
border-radius: 50%;
|
}
|
}
|
.message-item-info {
|
flex: 1;
|
display: flex;
|
flex-direction: column;
|
text {
|
&:nth-child(1) {
|
font-weight: 500;
|
font-size: 30rpx;
|
color: #222222;
|
}
|
&:nth-child(2) {
|
font-weight: 400;
|
font-size: 26rpx;
|
color: #666666;
|
margin-top: 16rpx;
|
}
|
&:nth-child(3) {
|
font-weight: 400;
|
font-size: 24rpx;
|
color: #999999;
|
margin-top: 16rpx;
|
}
|
}
|
}
|
}
|
}
|
</style>
|