UNPKG

press-next

Version:

Vue3 组件库,支持 Composition API

107 lines (95 loc) 2.28 kB
function selectWXQQLoginType(): Promise<{ isQQ?: boolean; isWX?: boolean; }> { return new Promise((resolve, reject) => { wx.showActionSheet({ itemList: ['QQ账号登录', '微信账号登录'], success(res: { tapIndex: number }) { console.info('[selectWXQQLoginType] res: ', res); resolve({ isQQ: res.tapIndex == 0, isWX: res.tapIndex == 1, }); }, fail(err: any) { reject(err); }, }); }); } export function initQQMiniPlugin() { // #ifdef MP-WEIXIN const plugin = getQQWXMiniPlugin(); plugin.initPlugin(wx); return plugin; // #endif } export function getQQWXMiniPlugin() { const plugin = requirePlugin('qq-wxmini-plugin'); plugin.initPlugin(wx); return plugin; } export function checkIsQQEnv() { let isQQEnv = false; // #ifdef MP-WEIXIN const plugin = getQQWXMiniPlugin(); isQQEnv = plugin.isQQEnv(); // #endif console.info('[checkIsQQEnv]', isQQEnv); return isQQEnv; } const getWxCode = (resolve: any, reject: any) => { uni.login({ provider: 'weixin', success: (res) => { resolve({ selectWX: true, wxCode: res.code, }); }, fail: (err) => { reject(err); }, }); }; export function selectLoginTypeInWxMini(ignoreWxEnv = false): Promise<{ selectQQ?: boolean; selectWX?: boolean; qqCode?: string; wxCode?: string; }> { return new Promise((resolve, reject) => { const isQQEnv = checkIsQQEnv(); console.info('[selectLoginTypeInWxMini] isQQEnv:', isQQEnv); if (!ignoreWxEnv && !isQQEnv) { getWxCode(resolve, reject); return; } selectWXQQLoginType().then(({ isQQ, isWX, }) => { if (isQQ) { const plugin = getQQWXMiniPlugin(); plugin.login() .then((res: { code: string }) => { console.info('[plugin.login] res: ', res); resolve({ selectQQ: true, qqCode: res.code, }); }) .catch((err: any) => { console.info('[plugin.login] err: ', err); reject(err); // 异常处理 }); return; } if (isWX) { getWxCode(resolve, reject); } }); }); }