wxLogin.vue 932 B

123456789101112131415161718192021222324252627282930313233343536
  1. <template>
  2. <div class="wx-login"></div>
  3. </template>
  4. <script name="WxLogin" setup>
  5. import { useRoute, useRouter } from "vue-router";
  6. import { useUserStore } from "@/store";
  7. import { wxLogin, fetchOpenId } from "@/api/user";
  8. const userStore = useUserStore();
  9. const route = useRoute();
  10. const router = useRouter();
  11. const code = route.query.code;
  12. async function _wxLogin() {
  13. showLoadingToast({
  14. forbidClick: true,
  15. loadingType: "spinner",
  16. duration: 0,
  17. });
  18. const openId = await fetchOpenId(code).catch(() => {});
  19. if (openId) {
  20. userStore.setOpenId(openId);
  21. let res = await wxLogin(openId);
  22. closeToast();
  23. if (res?.id) {
  24. userStore.setLoginInfo(res);
  25. router.replace("/index");
  26. } else {
  27. router.replace("/login");
  28. }
  29. } else {
  30. closeToast();
  31. router.replace("/login");
  32. }
  33. }
  34. code && _wxLogin();
  35. </script>
  36. <style lang="less" scoped></style>