278 lines
6.8 KiB
Vue
Raw Permalink 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>
<div class="whole">
<div class="guanzhu" v-if="!is_subscribe && showTips">
<div :style="{color: Color}">订阅关注公众号查看及时消息</div>
<div class="anniu">
<text @click="followSubscribe()">订阅</text>&nbsp;
<up-icon name="close" size="14" @click="showTips = false" />
</div>
</div>
<view class="row" v-for="(item, index) in messageList" :key="index" @click="viewMsg(item.type)">
<view class="icon">
<view class="img">
<text v-if="item.type == 1" class="iconfont icon-notice"></text>
<text v-else-if="item.type == 2" class="iconfont icon-set"></text>
<text v-else-if="item.type == 3" class="iconfont icon-gongdan"></text>
<text v-else-if="item.type == 4" class="iconfont icon-warn"></text>
<text v-else-if="item.type == 5" class="iconfont icon-gongzuotai"></text>
<text v-else-if="item.type == 6" class="iconfont icon-gonggaolan"></text>
<text v-else class="iconfont icon-notice"></text>
</view>
<view class="num" v-if="item.un_read_count">{{item.un_read_count > 99 ? '99+' : item.un_read_count}}</view>
</view>
<view class="box">
<view class="title">
<view class="tit">{{titObj[item.type]}}</view>
<view class="time">{{item.last_message && item.last_message.created_at && item.last_message.created_at.slice(0, 16)}}</view>
</view>
<view class="txt">{{item.last_message && item.last_message.content && item.last_message.content.title}}</view>
</view>
</view>
<view class="row" @click="toJump('/pages/mine/other/grass')">
<view class="icon flex"><text class="iconfont icon-zhongcao3"></text></view>
<view class="box">
<view class="title">
<view class="tit">种草</view>
</view>
<view class="txt">好物分享</view>
</view>
</view>
<view class="row" @click="toComplaint" v-if="role == 0">
<view class="icon flex"><up-icon name="info-circle" color="#333" :size="26" /></view>
<view class="box">
<view class="title">
<view class="tit">投诉与反馈</view>
</view>
</view>
</view>
<view class="noMsg" v-if="!messageList.length && role !== 0">
<up-empty mode="message" icon="https://ct-upimg.yx090.com/g.ii090/images/sprite/empty/message.png" text="暂无消息"></up-empty>
</view>
<view v-if="messageList.length || role == 0" style="margin-top: 30rpx;">
<cf-cloud></cf-cloud>
</view>
</div>
<tabbar :chooseIndex="2" :num="cartNum" :msgNum="msgNum" />
</template>
<script>
import { get } from '@/api/request.js'
import { ref, reactive, toRefs } from 'vue'
import { userBind } from '@/components/common.js'
import tabbar from '@/components/tabbar/index.vue'
import { sp2 } from '@/components/img.js'
import { Style } from '@/utils/list.js'
import cfCloud from '@/components/cfCloud/index.vue'
export default {
components: {
tabbar,
cfCloud
},
setup() {
const data = reactive({
sp2: sp2,
cartNum: 0,
messageList: [],
msgNum: 0,
titObj: {
'1': '系统通知',
'2': '订单通知',
'3': '工单通知',
'4': '投诉通知',
'5': '平台通知',
'6': '公告栏'
},
is_subscribe: 0,
showTips: true,
Color: uni.getStorageSync('theme_color'),
bgColor: Style[uni.getStorageSync('theme_index') * 1].bgColor,
tagColor: Style[uni.getStorageSync('theme_index') * 1].tagColor,
qr_img: '',
role: uni.getStorageSync('role')
})
// 消息类型 1-系统通知 2-订单通知 3-工单通知 4-投诉通知
function getMsgNum() {
get('/api/v1/messages/count').then((res) => {
data.messageList = res.data.types || []
data.msgNum = res.data.total
uni.setStorageSync('msgNum', data.msgNum)
})
}
function viewMsg(type) {
let tit = data.titObj[type]
uni.navigateTo({
url: '/pages/mine/msg/list?tit=' + tit + '&type=' + type
})
}
const followSubscribe = () => {
uni.navigateTo({
url: '/pages/article/index'
})
}
function getUserInfo() {
get('/api/v1/shopScore/user').then((res) => {
data.is_subscribe = res.data.user && res.data.user.is_subscribe
uni.setStorageSync('subscribe', data.is_subscribe)
})
}
async function getQrCodeImg() {
await get('/api/v1/user/qrCode').then((res) => {
data.qr_img = res.data.qr_code
})
}
function toComplaint() {
uni.navigateTo({
url: '/pages/mine/msg/select'
})
}
function toJump(url) {
uni.navigateTo({
url: url
})
}
return {
...toRefs(data),
getMsgNum,
viewMsg,
followSubscribe,
getUserInfo,
getQrCodeImg,
toComplaint,
toJump
}
},
async onLoad() {
// await this.$onLaunched
},
onShow() {
this.cartNum = Number(uni.getStorageSync('cartNum')) || 0
this.getMsgNum()
this.getUserInfo()
if(this.role === 0) {
this.getQrCodeImg()
}
}
}
</script>
<style lang="scss" scoped>
.whole {
overflow: auto;
min-height: 100vh;
padding-bottom: 110rpx;
.row{
display: flex;
padding: 30rpx;
border-bottom: 1px solid #F2F2F2;
background-color: #fff;
justify-content: space-between;
.icon{
width: 48.5px;
height: 48.5px;
position: relative;
&.flex{
display: flex;
align-items: center;
justify-content: center;
background-color: #F2F2F2;
border-radius: 8rpx;
}
.img{
width: 100%;
height: 100%;
background-color: #F1F1F1;
display: flex;
align-items: center;
justify-content: center;
border-radius: 10rpx;
.iconfont{
font-size: 24px;
color: #373536;
}
}
.num{
border-radius: 20rpx 20rpx 20rpx 0;
border: 1px solid #fff;
background-color: v-bind('tagColor');
font-size: 22rpx;
color: #fff;
padding: 6rpx 10rpx;
position: absolute;
top: -26rpx;
left: 100%;
margin-left: -18rpx;
line-height: 1;
}
.iconfont{
font-size: 24px;
color: #373536;
}
}
.box{
width: calc(100% - 130rpx);
.title{
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16rpx;
.tit{
font-size: 32rpx;
color: #333;
width: calc(100% - 260rpx);
}
.time{
font-size: 24rpx;
color: #9D9D9D;
}
}
.txt{
font-size: 28rpx;
color: #9D9D9D;
}
}
}
.noMsg{
width: 100%;
height: calc(100vh - 64rpx);
padding-top: 20%;
box-sizing: border-box;
}
.guanzhu {
font-size: 26rpx;
display: flex;
justify-content: space-between;
align-items: center;
background: v-bind('bgColor');
padding: 15rpx 30rpx;
.anniu {
display: flex;
text{
background: v-bind('Color');
border-radius: 8rpx;
color: #fff;
font-size: 24rpx;
padding: 5rpx 25rpx;
}
}
}
}
</style>