index.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. switch (req.actionType) {
  101. case 'BG_LOGIN_SET_USERINFO_CB':
  102. if (!userInfo.value.accessToken) {
  103. setTimeout(() => {
  104. getUserInfo();
  105. }, 800)
  106. }
  107. break;
  108. case 'CONTENT_POPUP_PAGE_SHOW':
  109. init();
  110. break;
  111. }
  112. }
  113. const init = () => {
  114. nextTick(() => {
  115. onTabbarHandler(router.currentRoute.value);
  116. })
  117. getUserInfo();
  118. }
  119. onMounted(() => {
  120. onPageVisbile();
  121. onRuntimeMsg();
  122. init();
  123. });
  124. onBeforeUnmount(() => {
  125. chrome.runtime.onMessage.removeListener(msgListener);
  126. })
  127. </script>
  128. <style lang='scss'>
  129. .tabbar-page-wrapper {
  130. width: 100%;
  131. height: 100%;
  132. position: relative;
  133. .tabbar-content {
  134. width: 100%;
  135. height: calc(100% - 120px);
  136. }
  137. }
  138. </style>