针对个人主页与照片显示做了修改

This commit is contained in:
2026-07-27 21:47:14 +08:00
parent 4d086758e8
commit fa781cc6a6
60 changed files with 2770 additions and 683 deletions
+90 -75
View File
@@ -2,12 +2,14 @@ import { View, Text, ScrollView } from '@tarojs/components'
import Taro from '@tarojs/taro'
import { useState, useEffect, useCallback } from 'react'
import './index.scss'
import { getDesignList, getTheme, type DesignItem } from '../../utils/store'
import { getDesignList, getUserInfo, type DesignItem } from '../../utils/store'
import ThemeToggle from '../../components/ThemeToggle'
import { useThemeContext } from '../../context/ThemeContext'
import LoginGuard from '../../components/LoginGuard'
const STATUS_TABS = [
{ code: 'all', label: '全部' },
{ code: 'toDesign', label: '待设计' },
{ code: 'undesigned', label: '未设计' },
{ code: 'designing', label: '设计中' },
{ code: 'ordered', label: '已下单' }
@@ -28,23 +30,34 @@ export default function DesignListPage() {
setList(getDesignList())
}, [])
// 页面每次显示时刷新(保证加入清单后切回能看到最新数据)
useEffect(() => {
const onShow = () => load()
const page = Taro.getCurrentInstance().page
if (page) {
const orig = page.onShow
page.onShow = function () {
onShow()
if (orig) orig.apply(this)
}
// 自动读取外部传入的筛选状态
const init = useCallback(() => {
const filter = Taro.getStorageSync('designList:filter')
if (filter && STATUS_TABS.some(t => t.code === filter)) {
setActiveTab(filter)
Taro.removeStorageSync('designList:filter')
}
load()
}, [load])
// 页面每次显示时刷新
useEffect(() => {
const page = Taro.getCurrentInstance().page
if (page) {
const orig = page.onShow
page.onShow = function () {
init()
if (orig) orig.apply(this)
}
}
init()
}, [init])
const filtered = activeTab === 'all'
? list
: list.filter(d => d.status === activeTab)
: activeTab === 'toDesign'
? list.filter(d => d.status === 'undesigned' || d.status === 'designing')
: list.filter(d => d.status === activeTab)
const goDesign = (item: DesignItem) => {
if (item.status === 'ordered') {
@@ -58,78 +71,80 @@ export default function DesignListPage() {
return (
<View className={`theme-${theme}`}>
<View className='design-page'>
<ThemeToggle />
<LoginGuard>
<View className='design-page'>
<ThemeToggle />
<View className='page-header dashed-card mt-20'>
<View className='star-badge' />
<Text className='page-title'></Text>
</View>
<View className='page-header dashed-card mt-20'>
<View className='star-badge' />
<Text className='page-title'></Text>
</View>
{/* 状态筛选 */}
<View className='status-tabs'>
<ScrollView className='tabs-scroll' scrollX>
{STATUS_TABS.map(tab => (
<View
key={tab.code}
className={`tab-item ${activeTab === tab.code ? 'active' : ''}`}
onClick={() => setActiveTab(tab.code)}
>
<Text className='tab-label'>{tab.label}</Text>
{activeTab === tab.code && <View className='tab-underline' />}
</View>
))}
</ScrollView>
</View>
{/* 状态筛选 */}
<View className='status-tabs'>
<ScrollView className='tabs-scroll' scrollX>
{STATUS_TABS.map(tab => (
<View
key={tab.code}
className={`tab-item ${activeTab === tab.code ? 'active' : ''}`}
onClick={() => setActiveTab(tab.code)}
>
<Text className='tab-label'>{tab.label}</Text>
{activeTab === tab.code && <View className='tab-underline' />}
</View>
))}
</ScrollView>
</View>
{/* 列表 */}
<ScrollView className='design-list' scrollY>
{filtered.map(item => {
const style = STATUS_STYLE[item.status]
return (
<View key={item.id} className='design-card dashed-card'>
<View className='star-badge' />
<View className='design-body'>
<Text className='design-icon'>{item.productIcon}</Text>
<View className='design-info'>
<View className='design-title-row'>
<Text className='design-name'>{item.productName}</Text>
<Text className={`badge ${style.cls}`}>{style.label}</Text>
{/* 列表 */}
<ScrollView className='design-list' scrollY>
{filtered.map(item => {
const style = STATUS_STYLE[item.status]
return (
<View key={item.id} className='design-card dashed-card'>
<View className='star-badge' />
<View className='design-body'>
<Text className='design-icon'>{item.productIcon}</Text>
<View className='design-info'>
<View className='design-title-row'>
<Text className='design-name'>{item.productName}</Text>
<Text className={`badge ${style.cls}`}>{style.label}</Text>
</View>
<Text className='design-meta'>: {item.count} | : ¥{item.unitPrice}</Text>
<Text className='design-total'>: ¥{(item.unitPrice * item.count).toFixed(2)}</Text>
</View>
<Text className='design-meta'>: {item.count} | : ¥{item.unitPrice}</Text>
<Text className='design-total'>: ¥{(item.unitPrice * item.count).toFixed(2)}</Text>
</View>
<View className='design-actions'>
{item.status !== 'ordered' && (
<View className='btn-gradient design-btn' onClick={() => goDesign(item)}>
<Text>{item.status === 'undesigned' ? '开始设计' : '继续设计'}</Text>
</View>
)}
{item.status === 'ordered' && (
<View className='btn-outline design-btn' onClick={() => Taro.switchTab({ url: '/pages/orders/index' })}>
<Text></Text>
</View>
)}
</View>
</View>
<View className='design-actions'>
{item.status !== 'ordered' && (
<View className='btn-gradient design-btn' onClick={() => goDesign(item)}>
<Text>{item.status === 'undesigned' ? '开始设计' : '继续设计'}</Text>
</View>
)}
{item.status === 'ordered' && (
<View className='btn-outline design-btn' onClick={() => Taro.switchTab({ url: '/pages/orders/index' })}>
<Text></Text>
</View>
)}
)
})}
{filtered.length === 0 && (
<View className='empty-state'>
<Text className='empty-icon'>📐</Text>
<Text className='empty-text'></Text>
<Text className='empty-sub'></Text>
<View className='btn-gradient' onClick={() => Taro.switchTab({ url: '/pages/index/index' })}>
<Text></Text>
</View>
</View>
)
})}
)}
</ScrollView>
{filtered.length === 0 && (
<View className='empty-state'>
<Text className='empty-icon'>📐</Text>
<Text className='empty-text'></Text>
<Text className='empty-sub'></Text>
<View className='btn-gradient' onClick={() => Taro.switchTab({ url: '/pages/index/index' })}>
<Text></Text>
</View>
</View>
)}
</ScrollView>
<View style={{ height: '40px' }} />
</View>
<View style={{ height: '40px' }} />
</View>
</LoginGuard>
</View>
)
}