feat(dealer): 添加订单月份筛选和详情展示功能

- 更新开发环境API地址为本地调试地址
-为订单模型添加结算金额、支付金额和月份字段- 在订单查询中使用resourceId替代userId并支持按月份筛选
- 在订单列表中展示订单号、客户名称、结算月份、结算电量等详细信息
- 添加日期选择器组件用于选择查询月份- 升级@nutui/nutui-react-taro依赖版本以支持新组件- 调整订单状态展示逻辑,显示结算金额和实发金额
This commit is contained in:
2025-10-13 13:42:37 +08:00
parent e867537375
commit cb69033b7e
6 changed files with 73 additions and 25 deletions

View File

@@ -2,7 +2,7 @@
export const ENV_CONFIG = {
// 开发环境
development: {
API_BASE_URL: 'https://cms-api.websoft.top/api',
API_BASE_URL: 'http://127.0.0.1:9200/api',
APP_NAME: '开发环境',
DEBUG: 'true',
},

View File

@@ -41,7 +41,7 @@
"@nutui/icons-react-taro": "^2.0.1",
"@nutui/nutui-biz": "1.0.0-beta.2",
"@nutui/nutui-react": "^3.0.16",
"@nutui/nutui-react-taro": "^2.7.4",
"@nutui/nutui-react-taro": "^2.7.10",
"@react-native/metro-config": "^0.73.2",
"@tarojs/components": "4.0.8",
"@tarojs/components-rn": "^4.1.4",

29
pnpm-lock.yaml generated
View File

@@ -21,8 +21,8 @@ importers:
specifier: ^3.0.16
version: 3.0.16(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@nutui/nutui-react-taro':
specifier: ^2.7.4
version: 2.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
specifier: ^2.7.10
version: 2.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@react-native/metro-config':
specifier: ^0.73.2
version: 0.73.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))
@@ -1406,7 +1406,7 @@ packages:
deprecated: This functionality has been moved to @npmcli/fs
'@nutui/icons-react-taro@1.0.5':
resolution: {integrity: sha512-p7dCW29wASH/qQ1OaUGGKA6PRV33wDPb80+qrHnWtT40syIb0W+e92mpplbULWM01s+GYVGyUU3i8b7Iy7qfvw==, tarball: https://registry.npmmirror.com/@nutui/icons-react-taro/-/icons-react-taro-1.0.5.tgz}
resolution: {integrity: sha512-p7dCW29wASH/qQ1OaUGGKA6PRV33wDPb80+qrHnWtT40syIb0W+e92mpplbULWM01s+GYVGyUU3i8b7Iy7qfvw==}
'@nutui/icons-react-taro@2.0.1':
resolution: {integrity: sha512-/DYmt8Rfp0NGx37/67Nd+k85zB2sJMLjlJiLpLbKxXk75SY0inwka51HhgawFTUk53zeta0CH/sDscTZdN005w==, tarball: https://registry.npmmirror.com/@nutui/icons-react-taro/-/icons-react-taro-2.0.1.tgz}
@@ -1431,8 +1431,8 @@ packages:
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
'@nutui/nutui-react-taro@2.7.4':
resolution: {integrity: sha512-r47l2rkY5HbObyTHxt2ZCTMKolM+v9CxX7QwSQGyuVRCi5G5cwPbSEz3NucvWGyZ69NaD3XA4Oc2LumLhaHmGg==, tarball: https://registry.npmmirror.com/@nutui/nutui-react-taro/-/nutui-react-taro-2.7.4.tgz}
'@nutui/nutui-react-taro@2.7.14':
resolution: {integrity: sha512-BATiRezhEMdL/UyYZfwEq5EJMmHj4MbWcEZCVaHCod9ftGK+HPCyPZBiqoCRC2q7qVXXicYoDbJ98iPtvqMdzw==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -3664,7 +3664,7 @@ packages:
engines: {node: '>=0.10.0'}
classnames@2.5.1:
resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==, tarball: https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz}
resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
clean-css@4.2.4:
resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==, tarball: https://registry.npmmirror.com/clean-css/-/clean-css-4.2.4.tgz}
@@ -5151,7 +5151,7 @@ packages:
deprecated: This package is no longer supported.
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, tarball: https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz}
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
@@ -5274,7 +5274,7 @@ packages:
deprecated: Glob versions prior to v9 are no longer supported
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, tarball: https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz}
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
glob@8.1.0:
@@ -5703,7 +5703,7 @@ packages:
resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==}
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, tarball: https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz}
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
inherits@2.0.3:
@@ -6506,7 +6506,8 @@ packages:
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, tarball: https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz}
lodash.isequal@4.5.0:
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==, tarball: https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz}
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
lodash.kebabcase@4.1.1:
resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==, tarball: https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz}
@@ -7282,7 +7283,7 @@ packages:
engines: {node: '>= 0.8'}
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz}
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
onetime@2.0.1:
resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==}
@@ -7488,7 +7489,7 @@ packages:
engines: {node: '>=8'}
path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, tarball: https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz}
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
path-is-inside@1.0.2:
@@ -10052,7 +10053,7 @@ packages:
engines: {node: '>=12'}
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, tarball: https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz}
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
write-file-atomic@2.4.3:
resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
@@ -11798,7 +11799,7 @@ snapshots:
transitivePeerDependencies:
- react-dom
'@nutui/nutui-react-taro@2.7.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
'@nutui/nutui-react-taro@2.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@babel/runtime': 7.26.0
'@nutui/icons-react-taro': 1.0.5

View File

@@ -58,4 +58,5 @@ export interface PageParam {
lang?: string;
model?: string;
BaseUrl?: string;
sceneType?: string;
}

View File

@@ -24,12 +24,18 @@ export interface ShopDealerOrder {
secondMoney?: string;
// 分销佣金(三级)
thirdMoney?: string;
// 订单结算金额
settledPrice?: string;
// 订单支付金额
payPrice?: string;
// 订单是否失效(0未失效 1已失效)
isInvalid?: number;
// 佣金结算(0未结算 1已结算)
isSettled?: number;
// 分销佣金比例
rate?: number;
// 订单月份
month?: string;
// 结算时间
settleTime?: number;
// 订单备注
@@ -51,7 +57,9 @@ export interface ShopDealerOrderParam extends PageParam {
secondUserId?: number;
thirdUserId?: number;
userId?: number;
resourceId?: number;
isInvalid?: number;
isSettled?: number;
month?: string;
keywords?: string;
}

View File

@@ -1,6 +1,6 @@
import React, {useState, useEffect, useCallback} from 'react'
import {View, Text, ScrollView} from '@tarojs/components'
import {Empty, PullToRefresh, Loading} from '@nutui/nutui-react-taro'
import {Empty, PullToRefresh, Loading, Cell, DatePicker} from '@nutui/nutui-react-taro'
import Taro from '@tarojs/taro'
import {pageShopDealerOrder} from '@/api/shop/shopDealerOrder'
import {useDealerUser} from '@/hooks/useDealerUser'
@@ -14,6 +14,10 @@ interface OrderWithDetails extends ShopDealerOrder {
const DealerOrders: React.FC = () => {
const [loading, setLoading] = useState<boolean>(false)
const d = new Date()
const currDay = `${d.getFullYear()}${d.getMonth() + 1}`
const [date, setDate] = useState(currDay)
const [show1, setShow1] = useState(false)
const [refreshing, setRefreshing] = useState<boolean>(false)
const [loadingMore, setLoadingMore] = useState<boolean>(false)
const [orders, setOrders] = useState<OrderWithDetails[]>([])
@@ -37,7 +41,8 @@ const DealerOrders: React.FC = () => {
const result = await pageShopDealerOrder({
isInvalid: 0,
userId: Taro.getStorageSync('UserId'),
resourceId: Taro.getStorageSync('UserId'),
month: date,
page,
limit: 10
})
@@ -108,10 +113,7 @@ const DealerOrders: React.FC = () => {
<View key={order.id} className="bg-white rounded-lg p-4 mb-3 shadow-sm">
<View className="flex justify-between items-start mb-1">
<Text className="font-semibold text-gray-800">
</Text>
<Text className="text-lg text-orange-500 font-semibold">
¥{(Number(order.orderPrice) * 10).toFixed(2)}
{order.id}
</Text>
</View>
@@ -119,15 +121,30 @@ const DealerOrders: React.FC = () => {
<Text className="text-sm text-gray-400">
{order.comments}
</Text>
<Text className="text-sm text-gray-400">
{order.rate}
</Text>
</View>
<View className="flex justify-between items-center">
<Text className="text-sm text-gray-400">
{order.month}
</Text>
<Text className="text-sm text-gray-400">
{order.orderPrice || '0.00'}
</Text>
</View>
<View className="flex justify-between items-center mb-1">
<Text className="text-sm text-gray-400">
{order.settledPrice}
</Text>
<Text className="text-sm text-gray-400">
{order.payPrice}
</Text>
</View>
<View className="flex justify-between items-center mb-1">
<Text className="text-sm text-gray-400">
{order.rate}
</Text>
<Text className="text-sm text-gray-400">
{getStatusText(order.isSettled, order.isInvalid)}
</Text>
@@ -152,6 +169,27 @@ const DealerOrders: React.FC = () => {
refreshingText="刷新中..."
completeText="刷新完成"
>
<Cell
description={date ? `${date}` : '请选择'}
extra={'选择月份'}
onClick={() => setShow1(true)}
/>
<DatePicker
title="日期选择"
visible={show1}
pickerProps={{
popupProps: {zIndex: 1220},
}}
type={'year-month'}
defaultValue={new Date(`${date}`)}
showChinese
onCancel={() => setShow1(false)}
onConfirm={(_, values) => {
setShow1(false)
setDate(`${values[0]}${values[1]}`)
fetchOrders(1).then()
}}
/>
<ScrollView
scrollY
className="h-screen"