Files
zsw-jx-store/src/pages/message/index.ts
2025-12-08 11:23:42 +08:00

209 lines
7.3 KiB
TypeScript
Raw 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.
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) => {
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