fix(api): 替换所有接口请求的域名为 guilixu-api.websoft.top

- 将获取 STS Token 的接口地址由 paopao-api 改为 guilixu-api
- 更新图片上传接口地址为新的 guilixu-api 域名
- 修改用户推广页面中邀请码链接和二维码接口的域名
- 更改注册页微信登录接口请求的域名为 guilixu-api
This commit is contained in:
2026-06-16 17:15:59 +08:00
commit f3886664f7
617 changed files with 77059 additions and 0 deletions

187
src/pages/order/list.tsx Normal file
View File

@@ -0,0 +1,187 @@
import React, { useState, useEffect, useCallback, useRef } from 'react'
import { View, Text, ScrollView } from '@tarojs/components'
import Taro from '@tarojs/taro'
import { pageShopOrder } from '@/api/shop/shopOrder'
import type { ShopOrder, ShopOrderParam } from '@/api/shop/shopOrder/model'
import { OrderListStatus, OrderListTabText } from '@/types/order'
import OrderCard from '@/components/common/OrderCard'
import EmptyState from '@/components/common/EmptyState'
import LoadMore from '@/components/common/LoadMore'
definePageConfig({
navigationBarTitleText: '我的订单',
})
// Tab 配置(使用后端 statusFilter 字段)
const tabList = [
{ title: OrderListTabText[OrderListStatus.All], status: OrderListStatus.All },
{ title: OrderListTabText[OrderListStatus.Unpaid], status: OrderListStatus.Unpaid },
{ title: OrderListTabText[OrderListStatus.Unshipped], status: OrderListStatus.Unshipped },
{ title: OrderListTabText[OrderListStatus.Shipped], status: OrderListStatus.Shipped },
{ title: OrderListTabText[OrderListStatus.Completed], status: OrderListStatus.Completed },
]
interface TabState {
orders: ShopOrder[]
page: number
finished: boolean
loading: boolean
initialized: boolean
}
const OrderListPage: React.FC = () => {
const { tab: initTab } = Taro.getCurrentInstance().router?.params || {}
const [tabIndex, setTabIndex] = useState(Number(initTab) || 0)
// 每个 tab 独立维护状态
const [tabStates, setTabStates] = useState<TabState[]>(
tabList.map(() => ({
orders: [],
page: 1,
finished: false,
loading: false,
initialized: false,
}))
)
const currentState = tabStates[tabIndex]
// 用 ref 避免 loadOrders 闭包中捕获过期状态
const tabStatesRef = useRef(tabStates)
tabStatesRef.current = tabStates
const updateTabState = useCallback(
(index: number, partial: Partial<TabState>) => {
setTabStates(prev => {
const next = [...prev]
next[index] = { ...next[index], ...partial }
return next
})
},
[]
)
const loadOrders = useCallback(
async (targetIndex: number, p: number) => {
const state = tabStatesRef.current[targetIndex]
if (state.loading) return
updateTabState(targetIndex, { loading: true })
try {
const params: ShopOrderParam = { page: p, limit: 10 }
const status = tabList[targetIndex]?.status
// 使用后端 statusFilter 字段进行筛选
// -1=全部, 0=待支付, 1=待发货, 3=待收货, 5=已完成
if (status !== undefined && status !== OrderListStatus.All) {
params.statusFilter = status
}
const res = await pageShopOrder(params)
const list = res?.list || []
updateTabState(targetIndex, {
orders: p === 1 ? list : [...state.orders, ...list],
page: p,
finished: list.length < 10,
loading: false,
initialized: true,
})
} catch {
updateTabState(targetIndex, { loading: false, initialized: true })
}
},
[updateTabState]
)
// 切换 tab 时加载数据
useEffect(() => {
if (!tabStates[tabIndex].initialized) {
loadOrders(tabIndex, 1)
}
}, [tabIndex])
const handleLoadMore = () => {
if (!currentState.finished && !currentState.loading) {
loadOrders(tabIndex, currentState.page + 1)
}
}
const handleTabChange = (index: number) => {
if (index !== tabIndex) {
setTabIndex(index)
}
}
return (
<View className='min-h-screen bg-gray-50 flex flex-col'>
{/* 自定义 Tabs 标题栏 */}
<View className='bg-white flex flex-row items-center border-b border-gray-100'>
{tabList.map((tab, index) => (
<View
key={tab.title}
className='flex-1 flex flex-col items-center justify-center py-3'
onClick={() => handleTabChange(index)}
>
<Text
className='text-sm font-medium'
style={{
color: index === tabIndex ? '#ee0a24' : '#666',
}}
>
{tab.title}
</Text>
{index === tabIndex && (
<View
className='mt-1 rounded-full'
style={{
width: '20px',
height: '3px',
backgroundColor: '#ee0a24',
}}
/>
)}
</View>
))}
</View>
{/* 内容区域 - 每个 tab 独立渲染 */}
<View className='flex-1 relative'>
{tabList.map((tab, idx) => (
<View
key={tab.title}
className='absolute inset-0'
style={{
display: idx === tabIndex ? 'flex' : 'none',
flexDirection: 'column',
}}
>
<ScrollView
scrollY
className='flex-1'
onScrollToLower={handleLoadMore}
lowerThreshold={100}
>
<View className='p-3'>
{tabStates[idx].orders.length > 0 ? (
tabStates[idx].orders.map(order => (
<OrderCard key={order.orderId} order={order} />
))
) : tabStates[idx].initialized && !tabStates[idx].loading ? (
<EmptyState text='暂无订单' />
) : null}
<LoadMore
loading={tabStates[idx].loading}
finished={tabStates[idx].finished}
/>
</View>
</ScrollView>
</View>
))}
</View>
</View>
)
}
export default OrderListPage