Przeglądaj źródła

```
feat(App): 添加页面滚动状态监听功能

- 引入lodash库用于防抖处理
- 实现页面滚动监听,当页面滚动时添加isScroll类名
- 使用防抖优化滚动性能
- 在组件卸载时正确移除事件监听器
- 更新退出登录文案为"退出登录"

- 添加lodash依赖到package.json
- 修复qrcode包位置错误
- 升级lodash版本从4.17.21到4.17.23
```

zhangningning 1 tydzień temu
rodzic
commit
fccbdb5130
5 zmienionych plików z 35 dodań i 8 usunięć
  1. 4 3
      package-lock.json
  2. 2 1
      package.json
  3. 27 3
      src/App.vue
  4. 1 1
      src/locales/zh-CN.js
  5. 1 0
      src/pinia/appStore.js

+ 4 - 3
package-lock.json

@@ -14,6 +14,7 @@
         "@blocknote/xl-multi-column": "^0.44.0",
         "axios": "^1.13.2",
         "element-plus": "^2.11.9",
+        "lodash": "^4.17.23",
         "pinia": "^3.0.4",
         "qrcode": "^1.5.4",
         "react": "^18.3.1",
@@ -3388,9 +3389,9 @@
       }
     },
     "node_modules/lodash": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "version": "4.17.23",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
+      "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
       "license": "MIT"
     },
     "node_modules/lodash-es": {

+ 2 - 1
package.json

@@ -17,7 +17,9 @@
     "@blocknote/xl-multi-column": "^0.44.0",
     "axios": "^1.13.2",
     "element-plus": "^2.11.9",
+    "lodash": "^4.17.23",
     "pinia": "^3.0.4",
+    "qrcode": "^1.5.4",
     "react": "^18.3.1",
     "react-dom": "^18.3.1",
     "sass": "^1.94.2",
@@ -26,7 +28,6 @@
     "vue": "^3.5.24",
     "vue-i18n": "^9.14.5",
     "vue-react-wrapper": "^0.3.1",
-    "qrcode": "^1.5.4",
     "vue-router": "^4.6.3"
   },
   "devDependencies": {

+ 27 - 3
src/App.vue

@@ -1,5 +1,9 @@
 <template>
-  <div id="app" :class="{'isHomePage': $route.path === '/' || $route.path === '/index',vipHomePage: $route.path === '/member'}">
+  <div id="app" :class="{
+    'isHomePage': $route.path === '/' || $route.path === '/index',
+    vipHomePage: $route.path === '/member',
+    isScroll: appStore.isScroll,
+  }">
     <ElConfigProvider :locale="langStore.elLocale">
     <el-container style="min-height: 100vh;">
       <el-header class="box_shadow_card">
@@ -71,11 +75,12 @@
 <script setup>
 import { logout } from '@/api/auth.js'
 import LoginDialog from './components/LoginDialog.vue'
-import { computed,ref,onMounted, provide, watch, nextTick } from 'vue'
+import { computed,ref,onMounted, provide, watch, nextTick,onUnmounted } from 'vue'
 import LangSwitch from './components/LangSwitch.vue'
 import { ElConfigProvider, ElMessage } from 'element-plus'
 import { useRoute, useRouter } from 'vue-router'
 import { openNewTab, isLogin } from '@/utils/util.js'
+import { debounce } from 'lodash';
 // 在Pinia安装后再设置初始语言
 import { useLangStore } from '@/pinia/langStore'
 import { useAppStore } from '@/pinia/appStore'
@@ -164,6 +169,20 @@ const handleLogout = () => {
   })
 };
 
+//监听页面是否滚动
+// 使用防抖优化滚动监听
+const handleScroll = debounce(() => {
+  appStore.isScroll = window.scrollY > 0;
+}, 10);
+
+// 监听滚动事件
+window.addEventListener('scroll', handleScroll);
+
+// 组件卸载时移除事件监听
+onUnmounted(() => {
+  window.removeEventListener('scroll', handleScroll);
+});
+
 
 provide('openLoginDialog', openLoginDialog);
 </script>
@@ -189,10 +208,15 @@ provide('openLoginDialog', openLoginDialog);
   }
 }
 .vipHomePage {
- 
   .el-header {
     background: rgba(255,255,255,0.5);
   }
+  &.isScroll {
+    .el-header {
+      // background: url('@/assets/imgs/bg-header_2.png') no-repeat;
+      background: #FCEDDA;
+    }
+  }
 }
 
 .el-header {

+ 1 - 1
src/locales/zh-CN.js

@@ -7,7 +7,7 @@ export default {
   common: {
     home: '首页',
     title: '暴米Ai',
-    logout: '注销',
+    logout: '退出登录',
     login: '登录',
     qingshuruyaosousuodegongzuoliu: '请输入要搜索的工作流',
     shousuo: '搜索',

+ 1 - 0
src/pinia/appStore.js

@@ -10,6 +10,7 @@ export const useAppStore = defineStore('app', {
     token: localStorage.getItem('token') || null,
     avatarDefault: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
     showLoginDialog: false,
+    isScroll: false,
   }),
   getters: {
     avatar() {