'!'
This commit is contained in:
209
src/pages/message/index.ts
Normal file
209
src/pages/message/index.ts
Normal file
@@ -0,0 +1,209 @@
|
||||
import toast from '@/utils/toast'
|
||||
import { onPullDownRefresh, onShow } from '@dcloudio/uni-app'
|
||||
import { computed, ref } from 'vue'
|
||||
import { store } from "@/store"
|
||||
import { Decrypt, timeFormatDHM } from '@/utils/tools'
|
||||
import message from '@/api/https/message'
|
||||
import order from '@/api/https/order'
|
||||
import useGlobalFunc from "@/composables/useGlobalFunc"
|
||||
// import { msgInfo } from '@/api/mockData/index'
|
||||
/*************************************************
|
||||
* IM消息
|
||||
*/
|
||||
const messageFn = function () {
|
||||
// vuex
|
||||
const { getMtStoreIMStatus } = useGlobalFunc()
|
||||
|
||||
// 用户列表
|
||||
const userListData = ref<Array<AnyObject>>([])
|
||||
|
||||
/*************************************************
|
||||
* 获取用户列表
|
||||
*/
|
||||
onShow(() => {
|
||||
if (isFirstLogin.value) return
|
||||
userListData.value = []
|
||||
getMTUserList()
|
||||
})
|
||||
const isFirstLogin = computed(() => {
|
||||
// 是否没有登陆的状态
|
||||
return store.state.serveInfo.isFirstLogin
|
||||
})
|
||||
|
||||
/**
|
||||
* 整理参数信息,避免请求出错
|
||||
*/
|
||||
async function dataParams() {
|
||||
let arr:any = []
|
||||
let brr = store.getters['storeInfo/platformInfo']
|
||||
if(brr && brr.length>0){
|
||||
let mtVendorIDInfo = brr.find((item:AnyObject) => item.vendorID === 1)
|
||||
let ebVendorIDInfo = brr.find((item:AnyObject) => item.vendorID === 3)
|
||||
if(mtVendorIDInfo){
|
||||
arr.push({
|
||||
vendorStoreID: mtVendorIDInfo.vendorStoreID,
|
||||
vendorID: "1",
|
||||
appID: mtVendorIDInfo.vendorOrgCode
|
||||
})
|
||||
}
|
||||
|
||||
if(ebVendorIDInfo){
|
||||
arr.push({
|
||||
vendorStoreID: ebVendorIDInfo.vendorStoreID,
|
||||
vendorID: "3",
|
||||
appID: ebVendorIDInfo.vendorOrgCode
|
||||
})
|
||||
}
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// 获取美团IM
|
||||
async function getMTUserList(time?:number) {
|
||||
let arr = await dataParams()
|
||||
if(!(arr && arr.length>0)) return
|
||||
let data = {
|
||||
payLoad:JSON.stringify(arr)
|
||||
}
|
||||
let venderIDInfo = arr.find((item:AnyObject) => item.vendorID === '1')
|
||||
let ebStore = arr.find((item:AnyObject) => item.vendorID === '3')
|
||||
|
||||
let res = await message.get_IM_user_list(data)
|
||||
// res = msgInfo.userList // 模拟数据
|
||||
// console.log('获取用户列表', res)
|
||||
if (res.code == 0) {
|
||||
if (JSON.stringify(res.data) === '{}') return
|
||||
let platformID = venderIDInfo.appID // 美团账号
|
||||
let newArr: any = []
|
||||
// let fmtUserList = res.data[`${venderIDInfo.appID}:${venderIDInfo.vendorStoreID}:1`] || [] // 美团
|
||||
let fmtUserList = venderIDInfo ? res.data[`${venderIDInfo.appID}:${venderIDInfo.vendorStoreID}:1`] || [] : [] // 美团
|
||||
let febUserList = ebStore && JSON.stringify(ebStore) !== '{}' ? res.data[`${ebStore.appID}:${ebStore.vendorStoreID}:3`] || [] : [] // 饿百
|
||||
|
||||
let reverseList = fmtUserList && fmtUserList.length > 0 ? fmtUserList.reverse() : []
|
||||
let reverseListEb = febUserList && febUserList.length > 0 ? febUserList.reverse() : []
|
||||
reverseList.map((element: any) => {
|
||||
let resData = JSON.parse(element)
|
||||
|
||||
// 判断是否需要显示列表
|
||||
if (Decrypt(resData.latestMsg, platformID).indexOf('[自动回复]') == -1) {
|
||||
let latestMsgHandler = ''
|
||||
try {
|
||||
JSON.parse(Decrypt(resData.latestMsg, platformID))
|
||||
latestMsgHandler = typeof JSON.parse(Decrypt(resData.latestMsg, platformID)) === 'number' ? Decrypt(resData.latestMsg, platformID) : '【订单】'
|
||||
} catch (error) {
|
||||
let msg = Decrypt(resData.latestMsg, platformID)
|
||||
if (msg == '') latestMsgHandler = '【商品】'
|
||||
else {
|
||||
if (!(msg.includes('https') || msg.includes('http'))) latestMsgHandler = msg
|
||||
else latestMsgHandler = msg.indexOf('.amr') == -1 ? '【图片】' : '【语音】'
|
||||
}
|
||||
}
|
||||
|
||||
// if (resData.userID != 0) {
|
||||
// 只展示6个小时以内的消息
|
||||
let userList = {
|
||||
...resData,
|
||||
latestMsg: latestMsgHandler,
|
||||
latestTime: timeFormatDHM(+new Date(resData.latestTime * 1000)),
|
||||
orderInfo: {},
|
||||
orderDesc: ''
|
||||
}
|
||||
newArr.push(userList)
|
||||
|
||||
// 获取订单信息
|
||||
// if (userList.orderID) getOrderInfo(userList.orderID, index)
|
||||
if (userList.orderID) getOrderInfo(userList.orderID, newArr.length - 1)
|
||||
|
||||
// }
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
// 饿百
|
||||
reverseListEb.map((element: any, index: number) => {
|
||||
let resData = JSON.parse(element)
|
||||
let latestMsgHandler = JSON.parse(resData.latestMsg).text ? JSON.parse(resData.latestMsg).text : JSON.parse(resData.latestMsg).duration ? '【语音】' : '【图片】'
|
||||
// let isAddUserLiset = JSON.parse(resData.latestMsg).data && JSON.parse(JSON.parse(resData.latestMsg).data).title.includes('本次服务已经完成,会话暂停') ? false : true
|
||||
if (JSON.parse(resData.latestMsg).elements && JSON.parse(resData.latestMsg).elements.length > 0) {
|
||||
let findItem = JSON.parse(resData.latestMsg).elements.filter((item: { elementType: number }) => item.elementType === 1)
|
||||
latestMsgHandler = findItem && findItem.length > 0 ? JSON.parse(findItem[0].elementContent).text.replace('@商家', '') : latestMsgHandler
|
||||
}
|
||||
// 饿百参考文档:https://open-retail.ele.me/#/apidoc/me.ele.retail:im.message.send-3?aopApiCategory=IM_all&type=api_menu resData.userID != 0 && isAddUserLiset
|
||||
if ((new Date().getTime() - resData.latestTime * 1000) <= (3600 * 1000 * 12 * 1) ) {
|
||||
let userList = {
|
||||
...resData,
|
||||
latestMsg: latestMsgHandler,
|
||||
latestTime: timeFormatDHM(+new Date(resData.latestTime * 1000)),
|
||||
orderInfo: {},
|
||||
orderDesc: ''
|
||||
}
|
||||
newArr.push(userList)
|
||||
|
||||
// 获取订单信息
|
||||
// if (userList.orderID) getOrderInfo(userList.orderID, index)
|
||||
if (userList.orderID) getOrderInfo(userList.orderID, newArr.length - 1 )
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
userListData.value = newArr
|
||||
} else {
|
||||
toast('获取信息异常')
|
||||
userListData.value.length == 0
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单信息
|
||||
*/
|
||||
async function getOrderInfo(orderId: string, index: number) {
|
||||
let res = await order.get_orders({ vendorOrderID: orderId })
|
||||
if (res.code === '0') {
|
||||
userListData.value[index].orderInfo = res.data.data[0]
|
||||
userListData.value[index].orderDesc = ` #${res.data.data[0].orderSeq}`
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 下拉刷新
|
||||
*/
|
||||
let onPullDownRefreshTimer: any = null
|
||||
onPullDownRefresh(() => {
|
||||
clearTimeout(onPullDownRefreshTimer)
|
||||
onPullDownRefreshTimer = setTimeout(async () => {
|
||||
getMtStoreIMStatus() // 刷新美团门店IM单聊状态
|
||||
// 获取用户列表
|
||||
getMTUserList()
|
||||
clearTimeout(onPullDownRefreshTimer)
|
||||
}, 500)
|
||||
})
|
||||
|
||||
|
||||
/*************************************************
|
||||
* 进入聊天页面
|
||||
*/
|
||||
function charItem(item: AnyObject) {
|
||||
item.latestMsg = ""
|
||||
uni.navigateTo({
|
||||
url: `/subPages/messageChild/msgChat/msgChat?data=${JSON.stringify(item)}`,
|
||||
})
|
||||
}
|
||||
|
||||
/*************************************************
|
||||
* 进入设置页面
|
||||
*/
|
||||
function jumpToSetUp() {
|
||||
uni.navigateTo({
|
||||
url: `/subPages/merchantChild/setUp/setUp`,
|
||||
})
|
||||
}
|
||||
|
||||
return {
|
||||
charItem, // 进入聊天页面
|
||||
userListData, // 用户列表
|
||||
jumpToSetUp, // 跳到设置页面
|
||||
store
|
||||
}
|
||||
}
|
||||
|
||||
export default messageFn
|
||||
76
src/pages/message/index.vue
Normal file
76
src/pages/message/index.vue
Normal file
@@ -0,0 +1,76 @@
|
||||
<template>
|
||||
<!-- 美团授权已过期 -->
|
||||
<!-- <jx-empty v-if="imOnlineStatus === -1" title="美团授权已过期" /> -->
|
||||
|
||||
<!-- IM状态 -->
|
||||
<view v-if="store.getters['storeInfo/imStatus']" style="position:absolute;bottom:0;width:100%">
|
||||
<view class="notice" @tap="jumpToSetUp">
|
||||
<text>{{store.getters['storeInfo/imStatus']}}IM单聊状态未设置</text>
|
||||
<jx-icon icon="gengduo" color="red"></jx-icon>
|
||||
</view>
|
||||
</view>
|
||||
<!-- v-else -->
|
||||
<!-- <template > -->
|
||||
<!-- 用户列表 -->
|
||||
<template v-if="userListData.length > 0">
|
||||
<uni-list :border="false">
|
||||
<view class="chat-border" v-for="item in userListData" :key="item.userID">
|
||||
<uni-list-chat
|
||||
:clickable="true"
|
||||
@click="charItem(item)"
|
||||
:avatar-circle="true"
|
||||
:title="
|
||||
item.vendorID == 1
|
||||
? `【美团${item.orderDesc}】${item.userID === '0' ? '群发消息' : item.userID}`
|
||||
: `【饿了么】${item.userID}`
|
||||
"
|
||||
:avatar="
|
||||
item.vendorID == 1
|
||||
? 'https://image.jxc4.com/image/75654ab606494a0efdb0cf7d7ad060d9.png'
|
||||
: 'https://image.jxc4.com/image/6c2f1dfd95890df8ef5e27bde15c4e7f.png'
|
||||
"
|
||||
:note="item.latestMsg"
|
||||
:time="item.latestTime"
|
||||
badge-positon="left"
|
||||
:badge-text="item.NewMessageNum"
|
||||
/>
|
||||
</view>
|
||||
</uni-list>
|
||||
</template>
|
||||
|
||||
<jx-empty v-else title="暂无消息" />
|
||||
<!-- </template> -->
|
||||
|
||||
<!-- 公共组件 -->
|
||||
<jx-login-empty title="马上登录,查看消息" />
|
||||
<jx-loading />
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup >
|
||||
import messageFn from './index'
|
||||
const {
|
||||
charItem, // 聊天详情
|
||||
userListData, // 用户列表
|
||||
jumpToSetUp, // 跳到设置页面
|
||||
store
|
||||
} = messageFn()
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.chat-border:nth-child(1) {
|
||||
border-top: 2rpx solid rgb(230, 230, 230);
|
||||
}
|
||||
.chat-border {
|
||||
border-bottom: 2rpx solid rgb(230, 230, 230);
|
||||
}
|
||||
.notice {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
padding: 20rpx;
|
||||
background-color: #fef5f6;
|
||||
color: #e91d37;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user