You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.vue 3.8 kB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <script setup>
  2. defineOptions({
  3. name: 'IndexPage',
  4. })
  5. let currentImgUrl = $ref('')
  6. const getPrimaryImg = async () => {
  7. const imgBase64 = (await window.pywebview.api.getPrimaryImg()) // 前端调用Python暴露的方法
  8. currentImgUrl = `data:image/jpg;base64,${imgBase64}`
  9. }
  10. const settings = reactive({
  11. toggleSetting: false,
  12. tipSetting: false,
  13. controlSetting: false,
  14. })
  15. const getIndexSetting = async () => {
  16. [settings.toggleSetting, settings.tipSetting, settings.controlSetting] = await window.pywebview.api.getIndexSetting()
  17. }
  18. let timer
  19. let isShowImgOnTime = $ref(false)
  20. let eyeOpen = $ref(false)
  21. let mouthOpen = $ref(false)
  22. const setImgShow = () => {
  23. timer = setInterval(async () => {
  24. const [time, result, imgBase64] = await window.pywebview.api.getDetectImg()
  25. currentImgUrl = `data:image/jpg;base64,${imgBase64}`
  26. isShowImgOnTime = true
  27. for (let i = 0; i < result.length; i++) {
  28. switch (result[i].classid) {
  29. case ('closed_eye'):
  30. eyeOpen = false
  31. break
  32. case ('open_eye'):
  33. eyeOpen = true
  34. break
  35. case ('closed_mouth'):
  36. mouthOpen = false
  37. break
  38. case ('open_mouth'):
  39. mouthOpen = true
  40. break
  41. }
  42. }
  43. }, 50)
  44. }
  45. watch(() => settings, async () => {
  46. await window.pywebview.api.changeSetting({
  47. toggle: settings.toggleSetting,
  48. tip: settings.tipSetting,
  49. control: settings.controlSetting,
  50. })
  51. },
  52. {
  53. deep: true,
  54. })
  55. const { t } = useI18n()
  56. onBeforeUnmount(() => {
  57. clearInterval(timer)
  58. })
  59. onBeforeMount(async () => {
  60. await getPrimaryImg()
  61. await getIndexSetting()
  62. })
  63. </script>
  64. <template>
  65. <div class="flex justify-center ">
  66. <div class="">
  67. <div class="pr-9">
  68. <div class="text-5xl bg-clip-text text-transparent bg-gradient-to-r from-cyan-500 to-sky-400 font-extrabold">
  69. EMC
  70. </div>
  71. <div class="text-gray-400">
  72. 眼控/嘴控小工具
  73. </div>
  74. <div class="bg-gray-100 p-3 rounded-md mt-4">
  75. <div>实时情况:</div>
  76. <d-toggle text="眼开" class="pt-2" :disabled="true" :checked="eyeOpen" />
  77. <d-toggle text="嘴张" class="pt-2" :disabled="true" :checked="mouthOpen" />
  78. </div>
  79. <d-toggle v-model:checked="settings.toggleSetting" text="启用" class="pt-4" />
  80. <d-toggle v-model:checked="settings.tipSetting" text="触发提醒" class="pt-4" />
  81. <d-select v-model:options="settings.controlSetting" class="select select-bordered select-primary mt-5" />
  82. </div>
  83. <div class="item-center flex flex-col pr-9 mt-5">
  84. <div>
  85. <router-link to="/AdvancedSettings" class="hover:underline hover:link-primary">
  86. {{ t('Settings.Advanced') }}
  87. </router-link>
  88. </div>
  89. <div>
  90. <router-link to="/Personalization" class="hover:underline mt-3 hover:link-primary">
  91. {{ t('Settings.Personalization') }}
  92. </router-link>
  93. </div>
  94. </div>
  95. </div>
  96. <div class="flex justify-center">
  97. <figure class="max-w-lg ">
  98. <div class="indicator max-w-lg ">
  99. <div class="indicator-item indicator-bottom">
  100. <button v-if="!isShowImgOnTime" class="btn btn-primary" @click="setImgShow">
  101. 实时显示
  102. </button>
  103. </div>
  104. <div class="card border">
  105. <img class="max-w-full h-auto rounded-lg bg-contain bg-clip-border" :src="currentImgUrl" alt="image description">
  106. </div>
  107. </div>
  108. <figcaption class="mt-2 text-sm text-center text-gray-500 dark:text-gray-400">
  109. {{ isShowImgOnTime ? '实时图像' : '当前图像' }}
  110. </figcaption>
  111. </figure>
  112. </div>
  113. </div>
  114. </template>
  115. <style scoped>
  116. </style>
  117. <route lang="yaml">
  118. meta:
  119. layout: home
  120. </route>