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>([]) /************************************************* * 获取用户列表 */ 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