feat(mini-user): v3.5.10 同城配送提示可配置并支持换行
承运商 HTML 按收货市下发;textarea 回车在 C 端转成换行。含门店去掉分享按钮与小程序企微客服。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
import Taro from '@tarojs/taro';
|
||||
|
||||
export type WecomCsSessionContext = {
|
||||
orderId?: string;
|
||||
orderNo?: string;
|
||||
from?: string;
|
||||
};
|
||||
|
||||
type OpenCsChatOption = {
|
||||
extInfo: { url: string };
|
||||
corpId: string;
|
||||
showMessageCard?: boolean;
|
||||
sendMessageTitle?: string;
|
||||
sendMessagePath?: string;
|
||||
};
|
||||
|
||||
type OpenCsChatFn = (option: OpenCsChatOption) => Promise<unknown>;
|
||||
|
||||
function getTaroOpenCsChat(): OpenCsChatFn | null {
|
||||
const api = (Taro as unknown as { openCustomerServiceChat?: OpenCsChatFn }).openCustomerServiceChat;
|
||||
return typeof api === 'function' ? api : null;
|
||||
}
|
||||
|
||||
function getWxOpenCsChat(): ((option: OpenCsChatOption & {
|
||||
success?: () => void;
|
||||
fail?: (err: { errMsg?: string }) => void;
|
||||
}) => void) | null {
|
||||
const wxApi = (
|
||||
globalThis as {
|
||||
wx?: {
|
||||
openCustomerServiceChat?: (option: OpenCsChatOption & {
|
||||
success?: () => void;
|
||||
fail?: (err: { errMsg?: string }) => void;
|
||||
}) => void;
|
||||
};
|
||||
}
|
||||
).wx?.openCustomerServiceChat;
|
||||
return typeof wxApi === 'function' ? wxApi : null;
|
||||
}
|
||||
|
||||
/** 小程序调起企业微信「微信客服」会话 */
|
||||
export async function openWecomCustomerServiceChat(params: {
|
||||
url: string;
|
||||
corpId: string;
|
||||
session?: WecomCsSessionContext;
|
||||
}): Promise<void> {
|
||||
const url = params.url.trim();
|
||||
const corpId = params.corpId.trim();
|
||||
if (!url || !corpId) {
|
||||
throw new Error('企微客服未配置');
|
||||
}
|
||||
|
||||
const option: OpenCsChatOption = {
|
||||
extInfo: { url },
|
||||
corpId,
|
||||
};
|
||||
if (params.session?.orderNo || params.session?.orderId) {
|
||||
option.showMessageCard = true;
|
||||
option.sendMessageTitle = params.session.orderNo
|
||||
? `订单 ${params.session.orderNo}`
|
||||
: '订单咨询';
|
||||
if (params.session.orderId) {
|
||||
option.sendMessagePath = `pages/order-detail/index?id=${params.session.orderId}`;
|
||||
}
|
||||
}
|
||||
|
||||
const taroApi = getTaroOpenCsChat();
|
||||
if (taroApi) {
|
||||
await taroApi(option);
|
||||
return;
|
||||
}
|
||||
|
||||
const wxApi = getWxOpenCsChat();
|
||||
if (!wxApi) {
|
||||
throw new Error('当前微信版本不支持企业微信客服');
|
||||
}
|
||||
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
wxApi({
|
||||
...option,
|
||||
success: () => resolve(),
|
||||
fail: (err) => reject(new Error(err?.errMsg || '无法打开企业微信客服')),
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user