From 02adeac5c14358c69e8a47c6dc29c41d63b09e3e Mon Sep 17 00:00:00 2001
From: huliyong <2783385703@qq.com>
Date: Fri, 31 Oct 2025 00:47:35 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E7=94=A8=E6=88=B7):=20=E6=B7=BB=E5=8A=A0?=
 =?UTF-8?q?=E5=85=8D=E8=B4=B9=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90=E5=A4=84?=
 =?UTF-8?q?=E7=90=86=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
在多个组件中添加免费用户权限检查,当用户标记为免费用户时跳过会员限制
在首页和用户页面添加自动获取用户信息的逻辑
重构用户信息存储方式,使用vuex管理全局状态
---
 mixins/config.js                |   6 +
 pages/index/home.vue            |   4 +
 pages/index/user.vue            | 874 ++++++++++++++++++++--------------------
 stores/index.js                 |   6 +
 subPages/home/AudioControls.vue |  10 +-
 subPages/home/book.vue          |  20 +-
 6 files changed, 479 insertions(+), 441 deletions(-)
diff --git a/mixins/config.js b/mixins/config.js
index dfcc980..0911345 100644
--- a/mixins/config.js
+++ b/mixins/config.js
@@ -1,3 +1,7 @@
+
+import { mapState } from 'vuex'
+
+
 export default {
   data() {
     return {
@@ -20,6 +24,8 @@ export default {
     },
   },
   computed: {
+    ...mapState(['userInfo']),
+
     // 获取全局配置的文本
     configParamInfo() {
       return key => this.$store.state.configList[key]?.info
diff --git a/pages/index/home.vue b/pages/index/home.vue
index 70fe2bc..c243cfd 100644
--- a/pages/index/home.vue
+++ b/pages/index/home.vue
@@ -418,6 +418,10 @@ export default {
         this.detectDevice()
 
         this.getArticleList()
+        
+        if (uni.getStorageSync('token')) {
+            this.$store.dispatch('getUserInfo');
+        }
 
         // 先获取基础数据
         await Promise.all([this.getBanner(), this.getSignup(), this.getCategory(), this.getLabel()])
diff --git a/pages/index/user.vue b/pages/index/user.vue
index 565db28..23ec1d4 100644
--- a/pages/index/user.vue
+++ b/pages/index/user.vue
@@ -1,475 +1,481 @@
 
-  
-    
-    
-      
-      
-      我的
-      
-      
-        
-          
+    
+        
+        
+            
+
+            我的
+            
+            
+                
+                    
+                
+                
+
+                    {{ isLogin ? userInfo.name : displayInfo.name }}
+                    手机号:{{ isLogin ? userInfo.phone || displayInfo.phone : displayInfo.phone }}
+                    
+                    
+                
+            
         
-        
 
-          {{ isLogin ? userInfo.name : displayInfo.name }}
-          手机号:{{ isLogin ? userInfo.phone || displayInfo.phone : displayInfo.phone }}
-          
+        
+        
+        
+        
-       
-    
-
-    
-    
-    
-    
-
-    
 
 
 
 
\ No newline at end of file
diff --git a/stores/index.js b/stores/index.js
index e3b1647..2400b57 100644
--- a/stores/index.js
+++ b/stores/index.js
@@ -136,6 +136,12 @@ const store = new Vuex.Store({
         updateUserInfo({ commit }, userInfo) {
             commit('setUserInfo', userInfo)
         },
+        async getUserInfo({ commit }) {
+            const res = await api.login.getUserInfo();
+            if (res.code === 200) {
+                commit('setUserInfo', res.result);
+            }
+        },
     }
 })
 
diff --git a/subPages/home/AudioControls.vue b/subPages/home/AudioControls.vue
index ec1a9b1..1dd242d 100644
--- a/subPages/home/AudioControls.vue
+++ b/subPages/home/AudioControls.vue
@@ -188,6 +188,10 @@ export default {
 
         // 判断音频功能是否应该被禁用(会员限制页面且用户非会员)
         isAudioDisabled() {
+            // 免费用户不受音频播放限制
+            if (this.userInfo && this.userInfo.freeUser === 'Y') {
+                return false;
+            }
             return this.currentPageRequiresMember && !this.isMember;
         },
 
@@ -2528,7 +2532,9 @@ export default {
 
                 // 检查页面是否需要会员且用户非会员,如果是则跳过
                 const pageRequiresMember = this.pagePay[i] === 'Y';
-                if (pageRequiresMember && !this.isMember) {
+                // 免费用户不受会员限制
+                const isFreeUser = this.userInfo && this.userInfo.freeUser === 'Y';
+                if (pageRequiresMember && !this.isMember && !isFreeUser) {
 
                     continue;
                 }
@@ -2822,8 +2828,6 @@ export default {
                 return;
             }
 
-
-
             // 重置播放状态
             this.currentAudioIndex = 0;
             this.currentTime = 0;
diff --git a/subPages/home/book.vue b/subPages/home/book.vue
index d46322c..f881e29 100644
--- a/subPages/home/book.vue
+++ b/subPages/home/book.vue
@@ -12,7 +12,6 @@
                     
                 
                 {{ currentPageTitle }}
-
             
         
         
@@ -26,7 +25,7 @@
                     
                         {{ currentPageTitle }}
                         
-                        
+                        
                             {{ pageTitles[index] }}
                             
                                 升级会员解锁
@@ -212,6 +211,11 @@ export default {
             pagePay: [],
         }
     },
+    onShow() {
+        if (uni.getStorageSync('token')) {
+            this.$store.dispatch('getUserInfo');
+        }
+    },
     computed: {
         displayCourseList() {
             return this.isReversed ? [...this.courseList].reverse() : this.courseList;
@@ -261,6 +265,10 @@ export default {
 
         // 当前页面是否需要会员
         currentPageRequiresMember() {
+            // 免费用户不受会员限制
+            if (this.userInfo && this.userInfo.freeUser === 'Y') {
+                return false;
+            }
             return this.pagePay[this.currentPage - 1] === 'Y';
         },
 
@@ -395,12 +403,16 @@ export default {
 
         // 獲取用戶會員信息 判斷是否和傳參傳過來的會員id相同
         async getMemberInfo() {
+            // 检查是否为免费用户
+            if (this.userInfo && this.userInfo.freeUser === 'Y') {
+                this.isMember = true; // 免费用户享有会员权限
+                return;
+            }
+
             const memberRes = await this.$api.member.getUserMemberInfo()
             if (memberRes.code === 200) {
                 this.isMember = memberRes.result.map(item => item.memberId).includes(this.memberId)
-
             }
-
         },
 
         // 处理AudioControls组件的事件