index.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <template>
  2. <headerBar title="首页">
  3. <template #title><div @click="handleSettingClick" v-log="{ describe: { action: '点击首页标题' } }">首页</div></template>
  4. </headerBar>
  5. <div class="home-container" v-loading="loading">
  6. <!-- 背景图片 -->
  7. <img src="@/assets/images/home/bg.png" alt="背景图片" class="background-image" />
  8. <!-- 左侧图片区域 -->
  9. <div class="image-container left-image" @click="goCheck" v-log="{ describe: { action: '点击拍照检查入口' } }">
  10. <img src="@/assets/images/home/left.jpg" alt="拍摄产品并处理图像" class="zoom-on-hover" />
  11. <div class="overlay-text">拍摄产品<br>并处理图像</div>
  12. </div>
  13. <!-- 右侧图片区域 -->
  14. <div class="image-container right-image" @click="goShot" v-log="{ describe: { action: '点击仅处理图像入口' } }">
  15. <img src="@/assets/images/home/right.jpg" alt="仅处理图像" class="zoom-on-hover" />
  16. <div class="overlay-text" style="line-height: 80px;">仅处理图像</div>
  17. </div>
  18. </div>
  19. </template>
  20. <script setup lang="ts">
  21. import headerBar from "@/components/header-bar/index.vue";
  22. import { useRouter } from "vue-router";
  23. import configInfo from '@/stores/modules/config';
  24. import { ref, onMounted } from 'vue';
  25. import axios from 'axios';
  26. import client from "@/stores/modules/client";
  27. import icpList from '@/utils/ipc';
  28. const configInfoStore = configInfo();
  29. const router = useRouter();
  30. const loading = ref(true);
  31. import socket from "@/stores/modules/socket";
  32. // 初始化 WebSocket 状态管理
  33. const socketStore = socket();
  34. function socketConnect(){
  35. socketStore.connectSocket();
  36. }
  37. const goCheck = () => {
  38. configInfoStore.updateAppModel(1);
  39. router.push({
  40. name: 'PhotographyCheck'
  41. });
  42. };
  43. const goShot = () => {
  44. socketConnect();
  45. configInfoStore.updateAppModel(2);
  46. router.push({
  47. name: 'PhotographyShot'
  48. });
  49. };
  50. // 健康检查函数
  51. const checkHealth = async () => {
  52. try {
  53. const response = await axios.get('http://127.0.0.1:7074');
  54. if (response.status === 200) {
  55. loading.value = false; // 健康检查成功,关闭 loading
  56. }
  57. } catch (error) {
  58. console.error('健康检查失败:', error);
  59. setTimeout(() => {
  60. checkHealth(); // 延迟检查
  61. }, 2000);
  62. // 可以在这里处理错误,例如显示错误提示
  63. }
  64. };
  65. const settingClickCount = ref(0);
  66. // 修改headerBar的点击处理函数
  67. function handleSettingClick() {
  68. console.log('handleSettingClickhandleSettingClick')
  69. settingClickCount.value++;
  70. if (settingClickCount.value >= 5) {
  71. openResourceDirectory()
  72. settingClickCount.value = 0;
  73. }
  74. setTimeout(() => {
  75. settingClickCount.value = 0;
  76. }, 3000); // 3秒内未再次点击则重置计数器
  77. }
  78. const clientStore = client();
  79. function openResourceDirectory() {
  80. clientStore.ipc.removeAllListeners(icpList.utils.shellFun);
  81. let params = {
  82. action: 'openPath',
  83. params: configInfoStore.appConfig.userDataPath.replaceAll('/', '\\')
  84. };
  85. clientStore.ipc.send(icpList.utils.shellFun, params);
  86. }
  87. // 在组件挂载时执行健康检查
  88. onMounted(() => {
  89. checkHealth();
  90. });
  91. </script>
  92. <style lang="scss" scoped>
  93. .home-container {
  94. position: relative;
  95. width: 100%;
  96. height: 100vh;
  97. overflow: hidden;
  98. }
  99. .background-image {
  100. position: absolute;
  101. top: 0;
  102. left: 0;
  103. width: 100%;
  104. height: 100%;
  105. object-fit: cover;
  106. z-index: -1;
  107. }
  108. .image-container {
  109. position: absolute;
  110. cursor: pointer;
  111. width: 400px; /* 设置宽度 */
  112. height: 400px; /* 设置高度 */
  113. overflow: hidden;
  114. box-shadow: 0 4px 10px rgba(0, 0, 0, 0.6); /* 添加阴影效果 */
  115. .zoom-on-hover {
  116. transition: transform 0.3s ease;
  117. width: 100%; /* 确保图片充满容器 */
  118. height: 100%; /* 确保图片充满容器 */
  119. object-fit: cover; /* 裁剪图片以适应容器 */
  120. }
  121. &:hover .zoom-on-hover {
  122. transform: scale(1.1);
  123. }
  124. }
  125. .left-image {
  126. top: 50%;
  127. right: 50%;
  128. transform: translateY(-50%);
  129. margin-right: 50px;
  130. }
  131. .right-image {
  132. top: 50%;
  133. left: 50%;
  134. transform: translateY(-50%);
  135. margin-left: 50px;
  136. }
  137. .overlay-text {
  138. position: absolute;
  139. top: 50%;
  140. left: 50%;
  141. transform: translate(-50%, -50%);
  142. color: white;
  143. font-size: 24px;
  144. text-align: center;
  145. z-index: 1;
  146. background-color: rgba(0, 0, 0, 0.5);
  147. padding: 10px 40px;
  148. line-height: 50px;
  149. min-height: 80px;
  150. min-width: 250px;
  151. }
  152. </style>