@slan-health/taro-vueuse
Version:
taro vue版本hooks
74 lines (73 loc) • 1.87 kB
JavaScript
import { getEnv, useDidShow, login, checkSession } from "@tarojs/taro";
import { ref } from "vue";
import { ENV_TYPE } from "../constant.js";
function useLogin() {
const env = getEnv();
const code = ref();
const checkSessionSync = () => {
return new Promise((resolve, reject) => {
if (env === ENV_TYPE.WEAPP) {
checkSession({
success: resolve,
fail: reject
}).catch(reject);
} else {
reject({ errMsg: "checkSession:fail" });
}
});
};
useDidShow(() => {
loginSync(false);
});
const loginSync = (needCheck) => {
return new Promise((resolve, reject) => {
if (env === ENV_TYPE.WEAPP) {
const loginAction = () => {
login({
success: (res) => {
code.value = res.code;
resolve(res.code);
},
fail: reject
}).catch(reject);
};
try {
if (needCheck) {
checkSessionSync().then(() => {
if (code.value) {
resolve(code.value);
} else {
loginAction();
}
}).catch(reject);
} else {
loginAction();
}
} catch (e) {
reject({ errMsg: "login:fail", data: e });
}
} else {
reject({ errMsg: "checkSession:fail" });
}
});
};
const getPhoneNumber = (e) => {
if (!e.detail.encryptedData) return Promise.reject({ errMsg: "login:fail" });
const info = e.detail;
return loginSync(true).then((code2) => Promise.resolve({
code: code2,
encryptedData: info.encryptedData,
iv: info.iv,
phoneNumberCode: info.code
}));
};
return {
checkSessionSync,
loginSync,
getPhoneNumber
};
}
export {
useLogin as default
};
//# sourceMappingURL=index.js.map