index.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <div class="tabbar-page-wrapper">
  3. <global-tip :type="'3'"></global-tip>
  4. <!-- login -->
  5. <popup-login v-if="!loginStatus" @loginAction="loginAction" />
  6. <template v-else>
  7. <top-bar :userInfo="userInfo" :bgColor="bgColor" :color="color" :boxShadow="boxShadow"></top-bar>
  8. <div class="tabbar-content">
  9. <router-view></router-view>
  10. </div>
  11. <tabbar :userInfo="userInfo" @tabbarClick="onTabbarHandler"></tabbar>
  12. </template>
  13. </div>
  14. </template>
  15. <script setup>
  16. import { onMounted, onBeforeUnmount, ref, nextTick } from "vue";
  17. import { getChromeStorage } from "@/uilts/chromeExtension";
  18. import { setStorage, getStorage } from "@/uilts/help";
  19. import Report from "@/log-center/log";
  20. import router from "@/router/popup.js";
  21. import TopBar from "@/view/popup/components/top-bar.vue";
  22. import Tabbar from "@/view/popup/components/tabbar.vue";
  23. import GlobalTip from '@/view/components/global-tip.vue';
  24. import popupLogin from "@/view/popup/components/login.vue";
  25. let userInfo = ref({});
  26. let bgColor = ref('#1b92e2');
  27. let color = ref('#fff');
  28. let boxShadow = ref('none');
  29. let loginStatus = ref('default');
  30. const getUserInfo = (cb) => {
  31. getChromeStorage("userInfo", (res) => {
  32. if (res && res.accessToken) {
  33. userInfo.value = res;
  34. loginStatus.value = res;
  35. } else {
  36. loginStatus.value = '';
  37. userInfo.value = {};
  38. }
  39. cb && cb(res);
  40. });
  41. };
  42. const onTabbarHandler = (params) => {
  43. if (params.path == '/') {
  44. bgColor.value = '#1b92e2';
  45. boxShadow.value = 'none';
  46. color.value = '#fff'
  47. } else {
  48. bgColor.value = '#fff';
  49. color.value = '#000';
  50. if (params.path != '/more') {
  51. boxShadow.value = '0px 0.5px 0px 0px #D1D9DD';
  52. } else {
  53. boxShadow.value = 'none';
  54. }
  55. }
  56. }
  57. const loginAction = () => {
  58. Report.reportLog({
  59. pageSource: Report.pageSource.denetLogin,
  60. businessType: Report.businessType.buttonClick,
  61. objectType: Report.objectType.loginButton
  62. });
  63. login();
  64. };
  65. const login = () => {
  66. callEventPageMethod("POPUP_LOGIN", "", function (response) {
  67. console.log("res", response);
  68. });
  69. }
  70. /**
  71. * sendMessage
  72. */
  73. const callEventPageMethod = (actionType, data, callback) => {
  74. chrome.runtime.sendMessage(
  75. {
  76. actionType: actionType,
  77. data: data
  78. },
  79. function (response) {
  80. if (typeof callback === "function") callback(response);
  81. }
  82. );
  83. };
  84. const onPageVisbile = () => {
  85. document.addEventListener('visibilitychange', function () {
  86. let isHidden = document.hidden;
  87. if (!isHidden) {
  88. if (!userInfo.value.accessToken) {
  89. setTimeout(() => {
  90. getUserInfo();
  91. }, 500)
  92. }
  93. }
  94. });
  95. }
  96. const onRuntimeMsg = () => {
  97. chrome.runtime.onMessage.addListener(msgListener)
  98. }
  99. const msgListener = (req, sender, sendResponse) => {
  100. ;
  101. switch (req.actionType) {
  102. case 'BG_LOGIN_SET_USERINFO_CB':
  103. if (!userInfo.value.accessToken) {
  104. setTimeout(() => {
  105. getUserInfo();
  106. }, 800)
  107. }
  108. break;
  109. case 'CONTENT_POPUP_PAGE_SHOW':
  110. init();
  111. break;
  112. }
  113. }
  114. const init = () => {
  115. nextTick(() => {
  116. onTabbarHandler(router.currentRoute.value);
  117. })
  118. getUserInfo();
  119. }
  120. onMounted(() => {
  121. onPageVisbile();
  122. onRuntimeMsg();
  123. init();
  124. });
  125. onBeforeUnmount(() => {
  126. chrome.runtime.onMessage.removeListener(msgListener);
  127. })
  128. </script>
  129. <style lang='scss'>
  130. .tabbar-page-wrapper {
  131. width: 100%;
  132. height: 100%;
  133. position: relative;
  134. .tabbar-content {
  135. width: 100%;
  136. height: calc(100% - 120px);
  137. }
  138. }
  139. </style>