zhb 2 месяцев назад
Родитель
Сommit
2e87e7e59d
3 измененных файлов с 43 добавлено и 22 удалено
  1. 38 6
      components/cwg-page-wrapper.vue
  2. 4 1
      composables/useMenuSplit.ts
  3. 1 15
      windows/left-window.vue

+ 38 - 6
components/cwg-page-wrapper.vue

@@ -25,7 +25,7 @@
         <!--      完善信息提示,-->
         <PrefectInfo />
         <!--      申请成为ib,-->
-        <IbInfo />
+        <IbInfo ref="ibRef" />
 
         <view class="content-wrapper" :class="{ 'content-wrapper-padding': isContentPadding }">
           <!-- <cwg-header /> -->
@@ -45,7 +45,7 @@
 </template>
 
 <script setup lang="ts">
-import { ref, computed } from 'vue'
+import { ref, computed, onMounted, onUnmounted } from 'vue'
 import { onLoad, onShow } from '@dcloudio/uni-app'
 import useRoute, { updateRoute } from '@/hooks/useRoute'
 import useRouter from '@/hooks/useRouter'
@@ -88,12 +88,33 @@ const isTabBarPage = ref(false)
 
 const rightDrawerRef = ref<any>(null)
 const noticeDrawerRef = ref<any>(null)
-uni.$on('open-notice-drawer', (data) => {
-  console.log(121212)
+const ibRef = ref<any>(null)
+
+// 事件处理函数
+const handleOpenIb = () => {
+  if (ibRef.value) ibRef.value?.getInfo()
+}
+
+const handleOpenNoticeDrawer = () => {
   noticeDrawerRef.value?.open()
-})
-uni.$on('open-right-drawer', (data) => {
+}
+
+const handleOpenRightDrawer = () => {
   openRightDrawer()
+}
+
+onMounted(() => {
+  // 只在组件挂载时注册事件监听器
+  uni.$once('open-ib', handleOpenIb)
+  uni.$on('open-notice-drawer', handleOpenNoticeDrawer)
+  uni.$on('open-right-drawer', handleOpenRightDrawer)
+})
+
+onUnmounted(() => {
+  // 在组件销毁时移除事件监听器
+  uni.$off('open-ib', handleOpenIb)
+  uni.$off('open-notice-drawer', handleOpenNoticeDrawer)
+  uni.$off('open-right-drawer', handleOpenRightDrawer)
 })
 
 function openRightDrawer() {
@@ -130,6 +151,11 @@ onLoad(() => {
 onShow(() => {
   updateRoute()
 })
+onUnmounted(() => {
+  uni.$off('open-ib')
+  uni.$off('open-notice-drawer')
+  uni.$off('open-right-drawer')
+})
 
 </script>
 
@@ -208,6 +234,12 @@ onShow(() => {
   z-index: 9;
 }
 
+@media screen and (max-width: 1504px) {
+  .content-wrapper-padding {
+    padding: 0 px2rpx(16);
+  }
+}
+
 @media screen and (max-width: 991px) {
   .content-wrapper-padding {
     padding: 0 px2rpx(16);

+ 4 - 1
composables/useMenuSplit.ts

@@ -47,7 +47,10 @@ export function useMenuSplit() {
     function setMode(code: string) {
         globalStore.setMode(code);
         const homePath = mode.value === 'customer' ? '/pages/customer/index' : '/pages/ib/index'
-        router.push(homePath)
+        router.reLaunch(homePath)
+        if (code === 'ib') {
+            uni.$emit('open-ib')
+        }
         nextTick(() => {
             submenuRefs.value = [] // 重置,等待重新绑定
             menus.value.forEach((item, index) => {

+ 1 - 15
windows/left-window.vue

@@ -20,7 +20,7 @@
       </view>
     </view>
     <view class="menu fixed">
-      <view class="menu-item ib-box" @click="toIb" v-if="mode !== 'ib'">
+      <view class="menu-item ib-box" @click="setMode('ib')" v-if="mode !== 'ib'">
         <cwg-icon name="crm-ib" :size="20" color="#6c8595" />
         <view class="menu-label" v-t="'Home.msg.Ib'" />
       </view>
@@ -32,33 +32,19 @@
         <cwg-icon name="crm-zy" :size="20" color="#6c8595" />
       </view>
     </view>
-<!--    ib弹窗-->
-    <IbInfo ref="ibRef"/>
   </view>
 </template>
 
 <script lang="ts" setup>
 import { ref } from 'vue'
 import { useMenuSplit } from '@/composables/useMenuSplit'
-import IbInfo from '@/components/IbInfo.vue'
 const { menus, setSubmenuRef, setMode, handleClick, handleSubmenuClick, mode } = useMenuSplit()
-const ibRef = ref(null)
 // 固定菜单项点击事件
 function handleFixedMenuClick() {
   // 这里可以添加固定菜单的点击处理逻辑
   console.log('Fixed menu clicked')
 }
-const toIb = ()=>{
-  // 判断是否有注册过ib
-  console.log(ibRef.value)
-  if(ibRef.value){
-    ibRef.value.getInfo()
-  }
-  setMode('ib')
-}
-
 </script>
-
 <style scoped lang="scss">
 @import "@/uni.scss";