App.vue 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <script setup lang="ts">
  2. import { useUserStoreWithOut, UserInterface } from "@/stores/modules/user"
  3. import { getAuthCode } from 'dingtalk-jsapi';
  4. import reqest from "@/utils/request";
  5. const userStore = useUserStoreWithOut();
  6. const initUserInfoHandler = async () => {
  7. const code: string = await getDDAuthCode() as string
  8. const userIdResult = await getUserIdByDD({code})
  9. if (userIdResult && userIdResult?.data) {
  10. const userResult = await getUserInfoById(userIdResult?.data.accessToken)
  11. if (userResult && userResult?.data) {
  12. const userInfo: UserInterface = {
  13. id: userResult?.data.user.id,
  14. nickname: userResult?.data.user.nickname,
  15. accessToken: userIdResult?.data.accessToken,
  16. }
  17. userStore.setUser(userInfo)
  18. localStorage.setItem("ACCESS_TOKEN", userIdResult?.data.accessToken)
  19. localStorage.setItem("_userInfo", JSON.stringify(userInfo))
  20. console.log(localStorage.getItem("ACCESS_TOKEN"))
  21. }
  22. }
  23. }
  24. initUserInfoHandler()
  25. function getDDAuthCode() {
  26. return new Promise((resolve, reject) => {
  27. getAuthCode({
  28. corpId: 'ding65143abf9aeea2ec',
  29. success: (res: any) => {
  30. const { code } = res;
  31. if (code) {
  32. resolve(code);
  33. }
  34. },
  35. fail: (ex: any) => {
  36. reject(ex);
  37. },
  38. complete: () => {},
  39. });
  40. });
  41. }
  42. interface UserIdParam {
  43. code: string
  44. }
  45. const getUserIdByDD = async (data: Required<UserIdParam>) => {
  46. return reqest.post(`/app-api/system/auth/login-ding?code=${data.code}`, null)
  47. }
  48. //@ts-ignore
  49. const getUserInfoById = async (token: Required<string>) => {
  50. return reqest.get('/admin-api/system/auth/get-permission-info', {
  51. headers: { 'Authorization': 'Bearer ' + token }
  52. })
  53. }
  54. </script>
  55. <template>
  56. <div>
  57. <RouterView />
  58. </div>
  59. </template>
  60. <style scoped>
  61. </style>