forked from gxwebsoft/mp-10550
feat(home): 重构首页界面并更新API配置
- 移除底部导航栏中的"基地生活"选项卡 - 切换开发环境API地址为线上测试接口 - 添加完整的首页样式定义,包括英雄区域、商品卡片、快捷入口等 - 重构首页组件结构,集成商品列表、分类标签页和交互功能 - 更新主题管理逻辑,支持多种主题模式和用户ID兼容处理 - 添加商品数据获取和展示功能,实现首页内容动态加载
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { useState, useEffect } from 'react'
|
||||
import { gradientThemes, GradientTheme, gradientUtils } from '@/styles/gradients'
|
||||
import { useState, useEffect, useCallback } from 'react'
|
||||
import { gradientThemes, type GradientTheme, gradientUtils } from '@/styles/gradients'
|
||||
import Taro from '@tarojs/taro'
|
||||
|
||||
export interface UseThemeReturn {
|
||||
@@ -14,28 +14,42 @@ export interface UseThemeReturn {
|
||||
* 提供主题切换和状态管理功能
|
||||
*/
|
||||
export const useTheme = (): UseThemeReturn => {
|
||||
const [currentTheme, setCurrentTheme] = useState<GradientTheme>(gradientThemes[0])
|
||||
const [isAutoTheme, setIsAutoTheme] = useState<boolean>(true)
|
||||
|
||||
// 获取当前主题
|
||||
const getCurrentTheme = (): GradientTheme => {
|
||||
const savedTheme = Taro.getStorageSync('user_theme') || 'auto'
|
||||
|
||||
if (savedTheme === 'auto') {
|
||||
// 自动主题:根据用户ID生成
|
||||
const userId = Taro.getStorageSync('userId') || '1'
|
||||
return gradientUtils.getThemeByUserId(userId)
|
||||
} else {
|
||||
// 手动选择的主题
|
||||
return gradientThemes.find(t => t.name === savedTheme) || gradientThemes[0]
|
||||
const getSavedThemeName = useCallback((): string => {
|
||||
try {
|
||||
return Taro.getStorageSync('user_theme') || 'nature'
|
||||
} catch {
|
||||
return 'nature'
|
||||
}
|
||||
}
|
||||
}, [])
|
||||
|
||||
const getStoredUserId = useCallback((): number => {
|
||||
try {
|
||||
const raw = Taro.getStorageSync('UserId') ?? Taro.getStorageSync('userId')
|
||||
const asNumber = typeof raw === 'number' ? raw : parseInt(String(raw || '1'), 10)
|
||||
return Number.isFinite(asNumber) ? asNumber : 1
|
||||
} catch {
|
||||
return 1
|
||||
}
|
||||
}, [])
|
||||
|
||||
const resolveTheme = useCallback(
|
||||
(themeName: string): GradientTheme => {
|
||||
if (themeName === 'auto') {
|
||||
return gradientUtils.getThemeByUserId(getStoredUserId())
|
||||
}
|
||||
return gradientThemes.find(t => t.name === themeName) || gradientUtils.getThemeByName('nature') || gradientThemes[0]
|
||||
},
|
||||
[getStoredUserId]
|
||||
)
|
||||
|
||||
const [isAutoTheme, setIsAutoTheme] = useState<boolean>(() => getSavedThemeName() === 'auto')
|
||||
const [currentTheme, setCurrentTheme] = useState<GradientTheme>(() => resolveTheme(getSavedThemeName()))
|
||||
|
||||
// 初始化主题
|
||||
useEffect(() => {
|
||||
const savedTheme = Taro.getStorageSync('user_theme') || 'auto'
|
||||
const savedTheme = getSavedThemeName()
|
||||
setIsAutoTheme(savedTheme === 'auto')
|
||||
setCurrentTheme(getCurrentTheme())
|
||||
setCurrentTheme(resolveTheme(savedTheme))
|
||||
}, [])
|
||||
|
||||
// 设置主题
|
||||
@@ -43,7 +57,7 @@ export const useTheme = (): UseThemeReturn => {
|
||||
try {
|
||||
Taro.setStorageSync('user_theme', themeName)
|
||||
setIsAutoTheme(themeName === 'auto')
|
||||
setCurrentTheme(getCurrentTheme())
|
||||
setCurrentTheme(resolveTheme(themeName))
|
||||
} catch (error) {
|
||||
console.error('保存主题失败:', error)
|
||||
}
|
||||
@@ -51,7 +65,7 @@ export const useTheme = (): UseThemeReturn => {
|
||||
|
||||
// 刷新主题(用于自动主题模式下用户信息变更时)
|
||||
const refreshTheme = () => {
|
||||
setCurrentTheme(getCurrentTheme())
|
||||
setCurrentTheme(resolveTheme(getSavedThemeName()))
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user