tmerclub-uniapp/src/pages/message-platform/message-platform.vue

283 lines
6.5 KiB
Vue
Raw Normal View History

2025-03-20 13:59:39 +08:00
<template>
<view class="Mall4j page-message-platform ">
<!-- tab -->
<view
v-if="showTab"
class="tab"
>
<view
class="tab-item"
:class="{active: currentTabType===0}"
@tap="onSwitchTab(0)"
>
系统通知
</view>
<view
class="tab-item"
:class="{active: currentTabType===1}"
@tap="onSwitchTab(1)"
>
平台公告
</view>
<view
class="tab-item"
:class="{active: currentTabType===2}"
@tap="onSwitchTab(2)"
>
客服消息
</view>
</view>
<!-- 系统通知 -->
<view
v-if="currentTabType===0"
class="notices-box"
>
<!-- status 是否阅读 1已读 0未读 -->
<view
v-for="(item, index) in msgList"
:key="index"
:class="['item', item.status === 0 ? 'unread' : '']"
>
<view class="time">
{{ item.updateTime }}
</view>
<view class="item-box">
<view class="tit">
系统通知
</view>
<view class="text-box">
{{ item.message }}
</view>
</view>
</view>
</view>
<!-- 平台公告 -->
<view
v-if="currentTabType===1"
class="platform notices-box"
>
<!-- isLearning 0未读 1已读 -->
<view
v-for="item in msgList"
:key="item.id"
:class="['item', item.isLearning === 0 ? 'unread' : '']"
@tap="onToMessageDetail(item.id)"
>
<view class="tit-box">
<!-- type 1平台公告 2店铺公告 -->
<view class="tit">
{{ item.title }}
</view>
<view class="time">
{{ item.publishTime }}
</view>
</view>
<view class="text-box">
<rich-text :nodes="item.content" />
</view>
<view class="text-arrow">
查看详情
</view>
</view>
</view>
<!-- 客服消息 -->
<view
v-if="currentTabType===2"
class="service-message"
>
<view
v-for="(item, index) in msgList"
:key="index"
class="item unread"
@tap="onToChat(item.shopId,item.chatType)"
>
<view class="logo">
<image
:src="item.pic?util.addDomain(item.pic):'../../static/images/chat/customer-service.png'"
@error="msgList[index].pic=''"
/>
</view>
<view class="text-box">
<view class="name">
{{ item.friendName }}
</view>
<view class="des">
{{ item.latestMsg }}
</view>
</view>
<view class="time-box">
<view class="time">
{{ item.timeStr }}
</view>
<view
v-if="item.unread"
class="unread-box"
>
<view class="number">
{{ item.unread }}
</view>
</view>
</view>
</view>
</view>
<!-- 空列表或加载全部提示 -->
<empty-all-tips
v-if="isLoaded"
:is-empty="!msgList.length"
:empty-tips="`暂无${ currentTabType===0? '通知':currentTabType===1? '公告': '消息' }记录`"
/>
</view>
</template>
<script setup>
import util from '@/utils/util'
/**
* 生命周期函数--监听页面加载
*/
const showTab = ref(true)
const currentTabType = ref(0)
onLoad((options) => {
// options = { ...$Route.query }
currentTabType.value = Number(options.tabType) || 0
showTab.value = !options.ishiddenTab
onSwitchTab(currentTabType.value)
})
onLoad(() => {
onLoadMsgList()
})
let pages = 0
let pageNum = 1
onReachBottom(() => {
if (pageNum < pages) {
pageNum = pageNum + 1
onLoadMsgList()
}
})
// 判断是否为JSON格式
const isJSON = (str) => {
if (typeof str === 'string') {
try {
JSON.parse(str)
return true
} catch (e) {
return false
}
}
}
/**
* 根据tabType类型 获取消息数据
*/
const isLoaded = ref(false) // 列表是否加载完毕
const pageSize = 10
let list = []
const shopId = 0 // 0平台公告
const msgList = ref([])
const onLoadMsgList = () => {
let reqData = {}
let url = ''
if (currentTabType.value === 0) {
2025-03-25 23:27:44 +08:00
url = '/tmerclub_biz/notify_log/unread_count_list'
2025-03-20 13:59:39 +08:00
reqData = {
pageNum,
pageSize
}
} else if (currentTabType.value === 1) {
2025-04-13 23:40:58 +08:00
url = '/tmerclub_admin/ma/notice'
2025-03-20 13:59:39 +08:00
reqData = {
shopId,
pageNum,
pageSize
}
} else if (currentTabType.value === 2) {
2025-03-25 23:27:44 +08:00
url = '/tmerclub_im/im/conversations?pageNum=' + pageNum + '&pageSize=' + pageSize
2025-03-20 13:59:39 +08:00
}
isLoaded.value = false
http.request({
url,
method: currentTabType.value === 2 ? 'POST' : 'GET',
data: reqData
}).then(res => {
isLoaded.value = true
if (currentTabType.value === 1) {
res.list.forEach(element => {
element.content = util.formatHtml(element.content)
})
}
if (pageNum === 1) {
list = res.list
} else {
list = msgList.value.concat(res.list)
}
msgList.value = list
pages = res.pages
if (currentTabType.value === 2) {
msgList.value = list.filter(item => {
const a = isJSON(item.latestMsg)
// 店铺状态 下线由0改为2 1营业
if (item.chatType === 1) {
item.friendName = $t('chat.PCS')
}
if (item.shopStatus === 2) {
return false
} else if (item.type === 1) {
item.latestMsg = '[' + $t('chat.imgs') + ']'
return true
} else if (a && JSON.parse(item.latestMsg) instanceof Object) {
item.latestMsg = '[' + $t('chat.productLinks') + ']' // 商品链接
return true
} else {
return true
}
})
}
})
}
// 去详情
const onToMessageDetail = (id) => {
uni.navigateTo({
url: '/package-activities/pages/message-detail/message-detail?id=' + id
})
}
// 去客服聊天
const onToChat = (shopId, chatType) => {
if (chatType === 1) {
shopId = 0
}
uni.navigateTo({
url: '/package-user/pages/my-chat/my-chat?shopid=' + shopId
})
}
/**
* 切换消息Tab
* @param {Number} tabType 当前展示的消息类型
*/
const onSwitchTab = (tabType) => {
currentTabType.value = tabType
msgList.value = []
uni.setNavigationBarTitle({
title: tabType === 1 ? '平台公告' : tabType === 2 ? '客服消息' : '系统通知'
})
pageNum = 1
pages = 0
onLoadMsgList()
}
</script>
<style lang="scss" scoped>
@use "./message-platform.scss";
</style>