press-next
Version:
Vue3 组件库,支持 Composition API
107 lines (95 loc) • 2.28 kB
text/typescript
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);
}
});
});
}