App.vue 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <template>
  2. <el-config-provider :locale="zhCn">
  3. <router-view
  4. v-slot="{ Component }"
  5. @click="clearTimer"
  6. @touch="clearTimer"
  7. @touchmove="clearTimer"
  8. @mousemove="clearTimer"
  9. >
  10. <keep-alive>
  11. <component :is="Component" />
  12. </keep-alive>
  13. </router-view>
  14. <ScreenSavers
  15. v-if="showScreenSavers && screenList.length > 0 && store.getters.isOnline"
  16. :autoPlay="autoPlay"
  17. :list="screenList"
  18. @onClick="closeScreen"
  19. />
  20. </el-config-provider>
  21. </template>
  22. <script lang="ts" setup>
  23. import zhCn from "element-plus/dist/locale/zh-cn.mjs";
  24. import { onMounted, ref } from "vue";
  25. import { ScreenSavers } from "@/components";
  26. import { getScreenConfigApi } from "./api";
  27. import { GetScreenConfigApiResponse } from "./api/types";
  28. import { useStore } from "vuex";
  29. import { isOnlineFn } from "./utils";
  30. const store = useStore();
  31. const showScreenSavers = ref(false);
  32. const showScreenTime = ref(60 * 10);
  33. const autoPlay = ref(false);
  34. const screenList = ref<GetScreenConfigApiResponse["img"]>([]);
  35. onMounted(() => {
  36. getOnline().then((state) => {
  37. state && getScreenConfig();
  38. });
  39. setInterval(() => {
  40. getOnline().then((state) => {
  41. state && getScreenConfig();
  42. });
  43. }, 5000);
  44. setInterval(() => {
  45. store.commit("setTime", store.state.time + 1);
  46. if (store.state.time >= showScreenTime.value && !showScreenSavers.value) {
  47. showScreenSavers.value = true;
  48. }
  49. }, 1000);
  50. });
  51. const getOnline = async () => {
  52. const state = await isOnlineFn();
  53. console.log("当前接口状态:", state);
  54. store.commit("setIsOnline", state);
  55. return state;
  56. };
  57. const clearTimer = () => {
  58. store.dispatch("clearTime");
  59. };
  60. const closeScreen = () => {
  61. clearTimer();
  62. showScreenSavers.value = false;
  63. };
  64. const getScreenConfig = async () => {
  65. const { data } = await getScreenConfigApi();
  66. const c = JSON.parse(data.config.content);
  67. autoPlay.value = c.autoPlay === "true";
  68. showScreenTime.value = Number(c.time);
  69. screenList.value = data.img
  70. .filter((i) => i.display === 1)
  71. .map((i) => ({
  72. ...i,
  73. thumb: window.VUE_APP_BACKEND_URL + i.thumb,
  74. }));
  75. };
  76. </script>
  77. <style lang="scss">
  78. @import url("./App.scss");
  79. </style>