index.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <script setup lang="ts">
  2. import { computed, onMounted, ref, watch } from 'vue';
  3. import { useAccessStore, useUserStore } from '@vben/stores';
  4. import { Col, Row } from 'antdv-next';
  5. import { getAllMenusApi, getUserInfoApi } from '#/api';
  6. import ApplicationManagement from './application-management.vue';
  7. import DeliveryPartners from './delivery-partners.vue';
  8. import EnterpriseCustomers from './enterprise-customers.vue';
  9. import ProductList from './product-list.vue';
  10. import SalesPartners from './sales-partners.vue';
  11. import UserInfo from './user-info.vue';
  12. const userStore = useUserStore();
  13. const accessStore = useAccessStore();
  14. const isLogin = computed(() => !!userStore.userInfo);
  15. const menus = ref<any[]>([]);
  16. const salesPartnersShow = ref(true);
  17. const enterpriseCustomersShow = ref(true);
  18. const applicationManagementShow = ref(true);
  19. const deliveryPartnersShow = ref(true);
  20. async function checkTokenAndGetUserInfo() {
  21. try {
  22. const token = localStorage.getItem('token_a');
  23. if (token) {
  24. accessStore.setAccessToken(token);
  25. const userInfoRes = await getUserInfoApi();
  26. if (userInfoRes && userInfoRes.isSuccess) {
  27. const userInfo = {
  28. account:
  29. userInfoRes.result?.account ||
  30. userInfoRes.result?.englishName ||
  31. '',
  32. avatar: userInfoRes.result?.avatarFileId || '',
  33. cellPhone: userInfoRes.result?.cellPhone || '',
  34. realName:
  35. userInfoRes.result?.chineseName || userInfoRes.result?.name || '',
  36. email: userInfoRes.result?.emailAddress || '',
  37. roles: [],
  38. userId: userInfoRes.result?.id || '',
  39. username: userInfoRes.result?.name || '',
  40. };
  41. userStore.setUserInfo(userInfo);
  42. }
  43. }
  44. } catch (error) {
  45. console.error('检查token并获取用户信息失败:', error);
  46. }
  47. }
  48. async function fetchMenus() {
  49. try {
  50. const result = await getAllMenusApi();
  51. menus.value = result.result.children;
  52. const menuCodes = new Set(menus.value.map((menu) => menu.code));
  53. salesPartnersShow.value = menuCodes.has('Sys_Menu_Partner');
  54. enterpriseCustomersShow.value = menuCodes.has('Sys_Menu_EnterClient');
  55. applicationManagementShow.value = menuCodes.has('Sys_Menu_Project');
  56. deliveryPartnersShow.value = menuCodes.has('Sys_Menu_User');
  57. } catch (error) {
  58. console.error('获取菜单失败:', error);
  59. }
  60. }
  61. watch(
  62. () => isLogin.value,
  63. (newValue) => {
  64. if (newValue) {
  65. fetchMenus();
  66. }
  67. },
  68. { immediate: true },
  69. );
  70. onMounted(() => {
  71. checkTokenAndGetUserInfo();
  72. });
  73. </script>
  74. <template>
  75. <div>
  76. <Row :gutter="[30, 25]">
  77. <Col :span="9">
  78. <SalesPartners :jurisdiction="salesPartnersShow" />
  79. </Col>
  80. <Col :span="9">
  81. <EnterpriseCustomers :jurisdiction="enterpriseCustomersShow" />
  82. </Col>
  83. <Col :span="6">
  84. <UserInfo />
  85. </Col>
  86. <Col :span="18">
  87. <ApplicationManagement :jurisdiction="applicationManagementShow" />
  88. </Col>
  89. <Col :span="6">
  90. <DeliveryPartners :jurisdiction="deliveryPartnersShow" />
  91. </Col>
  92. </Row>
  93. <ProductList />
  94. </div>
  95. </template>
  96. <style scoped></style>