From fe04012057d024770e0180543483d393281a542f Mon Sep 17 00:00:00 2001
From: zhujie <leon.zhu@cloudroam.com.cn>
Date: 星期四, 03 四月 2025 09:18:16 +0800
Subject: [PATCH] Merge branch 'master' of http://47.96.225.205:8888/r/FirstApp2

---
 app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt |   86 ++++++++++++++++++++++++++----------------
 1 files changed, 53 insertions(+), 33 deletions(-)

diff --git a/app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt b/app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt
index 9699b1e..d40df61 100644
--- a/app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt
+++ b/app/src/main/java/com/example/firstapp/ui/home/HomeViewModel.kt
@@ -17,6 +17,7 @@
 import com.example.firstapp.model.IncomeGroup
 import com.example.firstapp.model.IncomePackage
 import com.example.firstapp.util.SecureStorage
+import com.example.firstapp.utils.PreferencesManager
 import kotlinx.coroutines.launch
 
 class HomeViewModel : ViewModel() {
@@ -143,45 +144,60 @@
         loadDataByType("火车票")
     }
 
-    fun loadCategories() {
+    private fun loadCategories() {
         viewModelScope.launch {
             try {
-                // 先尝试从服务器获取配置
-                val serverCategories = RetrofitClient.apiService.getUserCategories(currentUserId)
-                if (serverCategories.isNotEmpty()) {
-                    _categories.value = serverCategories
-                    secureStorage.saveCategories(currentUserId, serverCategories)
+                // 先尝试从本地获取配置
+                val localCategories = secureStorage.getCategories(currentUserId)
+                
+                // 默认完整分类列表
+                val fullCategories = listOf(
+                    CategoryConfig(1, "快递", 0, true),
+                    CategoryConfig(2, "还款", 1, true),
+                    CategoryConfig(3, "收入", 2, true),
+                    CategoryConfig(4, "航班", 3, true),
+                    CategoryConfig(5, "火车票", 4, true)
+                )
+                
+                // 基础分类(非会员可见)
+                val basicCategories = listOf(
+                    CategoryConfig(1, "快递", 0, true),
+                    CategoryConfig(2, "还款", 1, true)
+                )
+
+                if (localCategories.isNotEmpty()) {
+                    // 如果本地有配置,直接使用本地配置
+                    _categories.value = localCategories
                 } else {
-                    // 如果服务器没有配置,尝试获取本地配置
-                    val localCategories = secureStorage.getCategories(currentUserId)
-                    if (localCategories.isEmpty()) {
-                        // 如果本地也没有配置,使用默认配置
-                        val defaultCategories = listOf(
-                            CategoryConfig(1, "快递", 0),
-                            CategoryConfig(2, "还款", 1),
-                            CategoryConfig(3, "收入", 2),
-                            CategoryConfig(4, "航班", 3),
-                            CategoryConfig(5, "火车票", 4)
-                        )
+                    try {
+                        // 尝试从服务器获取用户信息判断是否是会员
+                        val savedPhone = PreferencesManager.getPhone()
+                        val response = RetrofitClient.apiService.getUserInfo(savedPhone ?: "")
+                        val isMember = response.code == "0" && response.data?.isMember == true
+
+                        // 根据会员状态设置默认分类
+                        val defaultCategories = if (isMember) fullCategories else basicCategories
                         _categories.value = defaultCategories
-                        syncCategoriesToServer(defaultCategories)
-                    } else {
-                        _categories.value = localCategories
-                        syncCategoriesToServer(localCategories)
+                        secureStorage.saveCategories(currentUserId, defaultCategories)
+                        
+                        // 同步到服务器
+                        try {
+                            syncCategoriesToServer(defaultCategories)
+                        } catch (e: Exception) {
+                            Log.e("HomeViewModel", "Failed to sync categories: ${e.message}")
+                        }
+                    } catch (e: Exception) {
+                        // 如果获取用户信息失败,使用基础分类
+                        _categories.value = basicCategories
+                        secureStorage.saveCategories(currentUserId, basicCategories)
                     }
                 }
+                
+                // 更新可见分类
+                _categories.value?.let { updateVisibleCategories(it) }
+                
             } catch (e: Exception) {
-                // 如果网络请求失败,使用本地数据
-                val localCategories = secureStorage.getCategories(currentUserId)
-                _categories.value = localCategories.ifEmpty {
-                    listOf(
-                        CategoryConfig(1, "快递", 0),
-                        CategoryConfig(2, "还款", 1),
-                        CategoryConfig(3, "收入", 2),
-                        CategoryConfig(4, "航班", 3),
-                        CategoryConfig(5, "火车票", 4)
-                    )
-                }
+                Log.e("HomeViewModel", "Failed to load categories: ${e.message}")
             }
         }
     }
@@ -201,8 +217,12 @@
 
     fun saveCategories(categories: List<CategoryConfig>) {
         _categories.value = categories
+        // 保存到本地存储
+        secureStorage.saveCategories(currentUserId, categories)
+        // 同步到服务器
+        syncCategoriesToServer(categories)
         // 更新可见分类
-        _visibleCategories.value = categories.filter { it.isEnabled }
+        updateVisibleCategories(categories)
     }
 
     private fun updateVisibleCategories(categories: List<CategoryConfig>) {

--
Gitblit v1.9.3