'!'
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
|
||||
Reference in New Issue
Block a user