| | |
| | | fun loadCategories() { |
| | | viewModelScope.launch { |
| | | try { |
| | | // 先尝试从服务器获取配置 |
| | | // 先尝试从本地获取配置 |
| | | val localCategories = secureStorage.getCategories(currentUserId) |
| | | if (localCategories.isNotEmpty()) { |
| | | // 如果本地有配置,直接使用本地配置 |
| | | _categories.value = localCategories |
| | | // 同时尝试从服务器更新 |
| | | try { |
| | | val serverCategories = RetrofitClient.apiService.getUserCategories(currentUserId) |
| | | if (serverCategories.isNotEmpty()) { |
| | | _categories.value = serverCategories |
| | | secureStorage.saveCategories(currentUserId, serverCategories) |
| | | } |
| | | } catch (e: Exception) { |
| | | // 服务器获取失败,继续使用本地配置 |
| | | Log.e("HomeViewModel", "Failed to fetch server categories: ${e.message}") |
| | | } |
| | | } else { |
| | | // 如果本地没有配置,尝试从服务器获取 |
| | | try { |
| | | val serverCategories = RetrofitClient.apiService.getUserCategories(currentUserId) |
| | | if (serverCategories.isNotEmpty()) { |
| | | _categories.value = serverCategories |
| | | secureStorage.saveCategories(currentUserId, serverCategories) |
| | | } else { |
| | | // 如果服务器没有配置,尝试获取本地配置 |
| | | val localCategories = secureStorage.getCategories(currentUserId) |
| | | if (localCategories.isEmpty()) { |
| | | // 如果本地也没有配置,使用默认配置 |
| | | // 如果服务器也没有配置,使用默认配置 |
| | | val defaultCategories = listOf( |
| | | CategoryConfig(1, "快递", 0), |
| | | CategoryConfig(2, "还款", 1), |
| | |
| | | CategoryConfig(5, "火车票", 4) |
| | | ) |
| | | _categories.value = defaultCategories |
| | | syncCategoriesToServer(defaultCategories) |
| | | } else { |
| | | _categories.value = localCategories |
| | | syncCategoriesToServer(localCategories) |
| | | } |
| | | secureStorage.saveCategories(currentUserId, defaultCategories) |
| | | } |
| | | } catch (e: Exception) { |
| | | // 如果网络请求失败,使用本地数据 |
| | | val localCategories = secureStorage.getCategories(currentUserId) |
| | | _categories.value = localCategories.ifEmpty { |
| | | listOf( |
| | | // 如果服务器请求失败,使用默认配置 |
| | | val defaultCategories = listOf( |
| | | CategoryConfig(1, "快递", 0), |
| | | CategoryConfig(2, "还款", 1), |
| | | CategoryConfig(3, "收入", 2), |
| | | CategoryConfig(4, "航班", 3), |
| | | CategoryConfig(5, "火车票", 4) |
| | | ) |
| | | _categories.value = defaultCategories |
| | | secureStorage.saveCategories(currentUserId, defaultCategories) |
| | | } |
| | | } |
| | | // 更新可见分类 |
| | | _categories.value?.let { updateVisibleCategories(it) } |
| | | } catch (e: Exception) { |
| | | Log.e("HomeViewModel", "Failed to load categories: ${e.message}") |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | 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>) { |