48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
import type { WechatShareData } from '@dukang/weixin-sdk';
|
|
import { getWechatShareLink, toAppPath } from '@dukang/weixin-sdk';
|
|
import { isWechatEnv, weixinSdk } from './weixin';
|
|
|
|
export const DEFAULT_SHARE_TITLE = '你吃饭,杜康买单';
|
|
export const DEFAULT_SHARE_DESC = '杜康好客 · 买酒享权益,全城门店可用';
|
|
export const WECHAT_SHARE_HINT = '请点击右上角 ··· 分享给好友';
|
|
|
|
export function getDefaultShareImageUrl(): string {
|
|
if (typeof window === 'undefined') return toAppPath('/logo.png');
|
|
return new URL(toAppPath('/logo.png'), window.location.origin).href;
|
|
}
|
|
|
|
export function buildDefaultShareData(
|
|
overrides?: Partial<WechatShareData>,
|
|
): WechatShareData {
|
|
return {
|
|
title: overrides?.title ?? DEFAULT_SHARE_TITLE,
|
|
desc: overrides?.desc ?? DEFAULT_SHARE_DESC,
|
|
link: overrides?.link ?? getWechatShareLink(),
|
|
imgUrl: overrides?.imgUrl ?? getDefaultShareImageUrl(),
|
|
};
|
|
}
|
|
|
|
export async function applyDefaultWechatShare(
|
|
overrides?: Partial<WechatShareData>,
|
|
): Promise<void> {
|
|
if (!isWechatEnv()) return;
|
|
await weixinSdk.setShare(buildDefaultShareData(overrides));
|
|
}
|
|
|
|
export function handleShareButtonClick(onHint: (message: string) => void): void {
|
|
const showHint = (message: string) => {
|
|
onHint(message);
|
|
if (message) {
|
|
window.setTimeout(() => onHint(''), 2500);
|
|
}
|
|
};
|
|
|
|
if (!isWechatEnv()) {
|
|
showHint('请在微信内打开后分享');
|
|
return;
|
|
}
|
|
void applyDefaultWechatShare()
|
|
.then(() => showHint(WECHAT_SHARE_HINT))
|
|
.catch(() => showHint('分享配置失败,请刷新页面后重试'));
|
|
}
|