128 lines
3.0 KiB
JavaScript
128 lines
3.0 KiB
JavaScript
/**
|
||
* @name: useService
|
||
* @author: kahu4
|
||
* @date: 2024-01-24 17:35
|
||
* @description:客服
|
||
* @update: 2024-01-24 17:35
|
||
* */
|
||
import { useInterface } from "@/hooks/useInterface";
|
||
import { onLoad } from "@dcloudio/uni-app";
|
||
import { getServiceDetail } from "@/api/global";
|
||
|
||
|
||
const {toast, loading, hideLoading} = useInterface()
|
||
|
||
export const useService = () => {
|
||
let serviceData = {
|
||
corpId: '',
|
||
accountLink: ''
|
||
}
|
||
|
||
/**
|
||
* 获取客服数据
|
||
* @return {Promise<void>}
|
||
*/
|
||
async function getServiceData() {
|
||
try {
|
||
loading()
|
||
serviceData = await getServiceDetail();
|
||
} finally {
|
||
hideLoading()
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 区分环境打开客服
|
||
* @return {Promise<*>}
|
||
*/
|
||
async function openService() {
|
||
if (Reflect.ownKeys(serviceData).length <= 0) return toast({title: '暂无客服~', icon: 'error'})
|
||
if (!serviceData.corpId || !serviceData.accountLink) return toast({title: '暂无客服~', icon: 'error'})
|
||
// #ifdef MP-WEIXIN
|
||
return _miniProgramOpen(serviceData)
|
||
// #endif
|
||
// #ifdef APP-PLUS
|
||
return _appPlusOpen(serviceData)
|
||
// #endif
|
||
// #ifdef H5
|
||
return _h5Open(serviceData)
|
||
// #endif
|
||
}
|
||
|
||
|
||
|
||
return {
|
||
getServiceData,
|
||
openService
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 小程序环境打开客服
|
||
* @param serviceData
|
||
* @return {Promise<unknown>}
|
||
* @private
|
||
*/
|
||
function _miniProgramOpen(serviceData) {
|
||
return new Promise((resolve, reject) => {
|
||
wx.openCustomerServiceChat({
|
||
extInfo: {
|
||
url: serviceData.accountLink
|
||
},
|
||
corpId: serviceData.corpId,
|
||
success() {
|
||
resolve(true)
|
||
},
|
||
fail(err) {
|
||
reject(err)
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
|
||
/**
|
||
* app环境打开客服
|
||
* @param serviceData
|
||
* @return {Promise<unknown>}
|
||
* @private
|
||
*/
|
||
function _appPlusOpen(serviceData) {
|
||
return new Promise((resolve, reject) => {
|
||
plus.share.getServices(
|
||
res => {
|
||
const wechatServices = res.find(appItem => appItem.id === 'weixin')
|
||
if (!wechatServices) return reject('当前环境不支持微信操作')
|
||
wechatServices.openCustomerServiceChat(
|
||
{
|
||
corpid: serviceData.corpId,
|
||
url: serviceData.accountLink,
|
||
},
|
||
() => {
|
||
resolve(true)
|
||
},
|
||
err => {
|
||
reject(err)
|
||
})
|
||
},
|
||
err => {
|
||
reject(err)
|
||
}
|
||
)
|
||
})
|
||
}
|
||
|
||
|
||
/**
|
||
* h5环境打开客服
|
||
* @param serviceData
|
||
* @return {Promise<Awaited<boolean>>}
|
||
* @private
|
||
*/
|
||
function _h5Open(serviceData) {
|
||
// window.open(serviceURL) safari浏览器不支持window.open
|
||
window.location.href = serviceData.accountLink
|
||
return Promise.resolve(true)
|
||
}
|