App.vue 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <el-config-provider :locale="zhCn">
  3. <router-view
  4. v-slot="{ Component }"
  5. @click="clearTimer"
  6. @mousemove="clearTimer"
  7. @touchmove="clearTimer"
  8. >
  9. <keep-alive>
  10. <component :is="Component" />
  11. </keep-alive>
  12. </router-view>
  13. <ScreenSavers
  14. v-if="showScreenSavers"
  15. :autoPlay="autoPlay"
  16. :list="screenList"
  17. @onClick="closeScreen"
  18. />
  19. </el-config-provider>
  20. </template>
  21. <script lang="ts" setup>
  22. import zhCn from "element-plus/dist/locale/zh-cn.mjs";
  23. import { onMounted, ref } from "vue";
  24. import { ScreenSavers } from "@/components";
  25. import { getScreenConfigApi } from "./api";
  26. import { GetScreenConfigApiResponse } from "./api/types";
  27. const showScreenSavers = ref(false);
  28. const showScreenTime = ref(60 * 10);
  29. const autoPlay = ref(false);
  30. const screenList = ref<GetScreenConfigApiResponse["img"]>([]);
  31. let time = 0;
  32. onMounted(() => {
  33. getScreenConfig();
  34. });
  35. const clearTimer = () => {
  36. time = 0;
  37. };
  38. const closeScreen = () => {
  39. clearTimer();
  40. showScreenSavers.value = false;
  41. };
  42. const getScreenConfig = async () => {
  43. const { data } = await getScreenConfigApi();
  44. const c = JSON.parse(data.config.content);
  45. autoPlay.value = c.autoPlay === "true";
  46. showScreenTime.value = Number(c.time);
  47. screenList.value = data.img.map((i) => ({
  48. ...i,
  49. thumb: process.env.VUE_APP_BACKEND_URL + i.thumb,
  50. }));
  51. setInterval(() => {
  52. time++;
  53. if (time >= showScreenTime.value && !showScreenSavers.value) {
  54. showScreenSavers.value = true;
  55. }
  56. }, 1000);
  57. };
  58. </script>
  59. <style lang="scss">
  60. @import url("./App.scss");
  61. </style>