巴青农资商城

tabPanel.js 1.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { useUserStore } from '@/store/user'
  2. /**
  3. * Tab 页 onShow:刷新登录态后调用子面板 reload(子组件无 onShow 生命周期)
  4. * @param {import('vue').ComponentPublicInstance} vm 页面实例
  5. * @param {{ refreshRole: Function, refName: string, shouldReload?: () => boolean }} options
  6. */
  7. export function refreshTabPanelOnShow(vm, options) {
  8. const { refreshRole, refName, shouldReload = () => true } = options
  9. refreshRole.call(vm)
  10. const finish = () => {
  11. if (!shouldReload.call(vm)) {
  12. return
  13. }
  14. invokePanelReload(vm, refName)
  15. }
  16. const userStore = useUserStore()
  17. if (userStore.isLoggedIn() && !userStore.state.roles.length) {
  18. userStore
  19. .fetchUserInfo()
  20. .then(() => {
  21. refreshRole.call(vm)
  22. finish()
  23. })
  24. .catch(() => {})
  25. return
  26. }
  27. finish()
  28. }
  29. function invokePanelReload(vm, refName, retry = 0) {
  30. vm.$nextTick(() => {
  31. const panel = vm.$refs[refName]
  32. if (panel && typeof panel.reload === 'function') {
  33. panel.reload()
  34. return
  35. }
  36. if (retry < 8) {
  37. setTimeout(() => invokePanelReload(vm, refName, retry + 1), 50)
  38. }
  39. })
  40. }