press-next
Version:
Vue3 组件库,支持 Composition API
86 lines (74 loc) • 1.91 kB
text/typescript
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() {
const plugin = getQQWXMiniPlugin();
const isQQEnv = plugin.isQQEnv();
console.info('isQQEnv', 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;
}
wx.showActionSheet({
itemList: ['QQ账号登录', '微信账号登录'],
success(res: { tapIndex: number }) {
console.info('showActionSheet.res', res);
if (res.tapIndex == 0) {
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;
}
getWxCode(resolve, reject);
},
fail(err: any) {
reject(err);
},
});
});
}