修正了 pages 名为拼音的问题

This commit is contained in:
2026-06-13 10:44:02 +08:00
parent 76cc4ac55e
commit 296e41a8a7
249 changed files with 29660 additions and 29505 deletions

273
pages/orders/orders.js Normal file
View File

@@ -0,0 +1,273 @@
// pages/orders/orders.js
const app = getApp()
import request from '../../utils/request.js'
Page({
data: {
// 订单状态tab配置
dingdanZhuangtaiTabs: [
{ name: '全部', key: 'all', zhuangtaiList: [1, 2, 3, 4, 5, 6, 7, 8] },
{ name: '已下单', key: 'yixiadan', zhuangtaiList: [1, 7] },
{ name: '进行中', key: 'jinxingzhong', zhuangtaiList: [2] },
{ name: '争议订单', key: 'zhengyi', zhuangtaiList: [4, 5, 6] },
{ name: '已完成', key: 'yiwancheng', zhuangtaiList: [3] },
{ name: '结算中', key: 'jiesuanzhong', zhuangtaiList: [8] }
],
// 当前选中的tab索引
xuanzhongTabIndex: 0,
// 当前选中的tab的key
currentTabKey: 'all',
// 每个tab对应的订单数据
dingdanShuju: {
all: { list: [], page: 1, hasMore: true, isLoading: false },
yixiadan: { list: [], page: 1, hasMore: true, isLoading: false },
jinxingzhong: { list: [], page: 1, hasMore: true, isLoading: false },
zhengyi: { list: [], page: 1, hasMore: true, isLoading: false },
yiwancheng: { list: [], page: 1, hasMore: true, isLoading: false },
jiesuanzhong: { list: [], page: 1, hasMore: true, isLoading: false }
},
// 个人中心传递过来的type参数
gerenzhongxinType: '',
// 是否显示加载更多
xianshiJiazaigengduo: false,
// 页面加载状态
isLoading: true
},
onLoad(options) {
const type = options.type || ''
wx.setNavigationBarTitle({
title: '我的订单'
})
this.qingkongGerenzhongxinJishu(type)
const tabIndex = this.yingsheTypeToTabIndex(type)
const tabKey = this.data.dingdanZhuangtaiTabs[tabIndex].key
this.setData({
gerenzhongxinType: type,
xuanzhongTabIndex: tabIndex,
currentTabKey: tabKey,
isLoading: false
})
this.jiazaiDingdanShuju(tabIndex)
},
onShow() {
this.registerNotificationComponent();
},
registerNotificationComponent() {
const app = getApp();
const notificationComp = this.selectComponent('#global-notification');
if (notificationComp && notificationComp.showNotification) {
app.globalData.globalNotification = {
show: (data) => notificationComp.showNotification(data),
hide: () => notificationComp.hideNotification()
};
}
},
qingkongGerenzhongxinJishu(type) {
const jishuMap = {
'daifuwu': 'daifuwu',
'fuwuzhong': 'fuwuzhong',
'yiwancheng': 'yiwancheng',
'yituikuan': 'yituikuan'
}
const jishuKey = jishuMap[type]
if (jishuKey && app.globalData.dingdanTiaoshu) {
app.globalData.dingdanTiaoshu[jishuKey] = 0
}
},
yingsheTypeToTabIndex(type) {
const yingsheMap = {
'daifuwu': 1,
'fuwuzhong': 2,
'yiwancheng': 4,
'yituikuan': 3
}
return yingsheMap[type] || 0
},
switchDingdanTab(e) {
const tabIndex = e.currentTarget.dataset.index
if (tabIndex === this.data.xuanzhongTabIndex) return
const tabKey = this.data.dingdanZhuangtaiTabs[tabIndex].key
this.setData({
xuanzhongTabIndex: tabIndex,
currentTabKey: tabKey
})
this.jiazaiDingdanShuju(tabIndex)
},
async jiazaiDingdanShuju(tabIndex, isLoadMore = false) {
const tab = this.data.dingdanZhuangtaiTabs[tabIndex]
const tabKey = tab.key
const tabData = this.data.dingdanShuju[tabKey]
const page = isLoadMore ? tabData.page + 1 : 1
if (tabData.isLoading) return
// 重置逻辑:如果不是加载更多,清空已有数据
if (!isLoadMore) {
this.setData({
[`dingdanShuju.${tabKey}.list`]: [],
[`dingdanShuju.${tabKey}.page`]: 1
})
}
this.setData({
[`dingdanShuju.${tabKey}.isLoading`]: true
})
wx.showLoading({
title: isLoadMore ? '加载更多...' : '加载订单...',
mask: true
})
try {
const requestData = {
zhuangtai_list: tab.zhuangtaiList,
page: page,
page_size: 10
}
const res = await request({
url: '/dingdan/dingdanhuoqu',
method: 'POST',
data: requestData,
header: {
'content-type': 'application/json'
}
})
wx.hideLoading()
// 关键修正res是直接返回的数据对象
if (res && res.data.code === 0) {
const newDingdanList = res.data.data.list || []
const hasMore = res.data.data.has_more || false
// 处理图片URL拼接完整路径
const processedList = newDingdanList.map(item => {
let tupianUrl = item.tupian || ''
// 如果图片URL不是完整路径拼接ossImageUrl
if (tupianUrl && !tupianUrl.startsWith('http')) {
const ossImageUrl = app.globalData.ossImageUrl || ''
tupianUrl = ossImageUrl + tupianUrl
}
const zhuangtaiZh = this.getZhuangtaiZhongwen(item.zhuangtai)
return {
...item,
tupian: tupianUrl,
zhuangtaiZh: zhuangtaiZh
}
})
const currentList = this.data.dingdanShuju[tabKey].list
const updatedList = isLoadMore
? [...currentList, ...processedList]
: processedList
this.setData({
[`dingdanShuju.${tabKey}.list`]: updatedList,
[`dingdanShuju.${tabKey}.page`]: page,
[`dingdanShuju.${tabKey}.hasMore`]: hasMore,
[`dingdanShuju.${tabKey}.isLoading`]: false,
xianshiJiazaigengduo: hasMore
})
} else {
wx.showToast({
title: res ? (res.msg || '加载失败') : '请求失败',
icon: 'none',
duration: 2000
})
this.setData({
[`dingdanShuju.${tabKey}.isLoading`]: false
})
}
} catch (error) {
console.error('加载订单数据失败:', error)
wx.hideLoading()
wx.showToast({
title: '网络请求失败,请重试',
icon: 'none',
duration: 2000
})
this.setData({
[`dingdanShuju.${tabKey}.isLoading`]: false
})
}
},
getZhuangtaiZhongwen(zhuangtai) {
const zhuangtaiMap = {
1: '已下单',
2: '进行中',
3: '已完成',
4: '退款中',
5: '已退款',
6: '退款失败',
7: '指定中',
8: '结算中'
}
return zhuangtaiMap[zhuangtai] || '未知状态'
},
onReachBottom() {
const tabKey = this.data.currentTabKey
const tabData = this.data.dingdanShuju[tabKey]
if (tabData.hasMore && !tabData.isLoading) {
const tabIndex = this.data.xuanzhongTabIndex
this.jiazaiDingdanShuju(tabIndex, true)
}
},
goToDingdanXiangqing(e) {
const dingdanItem = e.currentTarget.dataset.item
if (!dingdanItem) return
const dingdanDataStr = encodeURIComponent(JSON.stringify(dingdanItem))
wx.navigateTo({
url: `/pages/order-detail/order-detail?dingdanData=${dingdanDataStr}`
})
},
onImageError(e) {
const index = e.currentTarget.dataset.index
const tabKey = this.data.currentTabKey
const defaultImage = app.globalData.lunbozhanwei || '/images/default.jpg'
this.setData({
[`dingdanShuju.${tabKey}.list[${index}].tupian`]: defaultImage
})
}
})

5
pages/orders/orders.json Normal file
View File

@@ -0,0 +1,5 @@
{
"usingComponents": {
"global-notification": "/components/global-notification/global-notification"
}
}

111
pages/orders/orders.wxml Normal file
View File

@@ -0,0 +1,111 @@
<!--pages/orders/orders.wxml-->
<view class="dingdan-page">
<!-- 订单状态tab区域 -->
<scroll-view
class="dingdan-tabs-scroll"
scroll-x="true"
scroll-with-animation="true"
>
<view class="dingdan-tabs-container">
<block wx:for="{{dingdanZhuangtaiTabs}}" wx:key="key">
<view
class="dingdan-tab-item {{index === xuanzhongTabIndex ? 'tab-active' : ''}}"
bindtap="switchDingdanTab"
data-index="{{index}}"
>
<text class="tab-text">{{item.name}}</text>
<view class="tab-active-line" wx:if="{{index === xuanzhongTabIndex}}"></view>
</view>
</block>
</view>
</scroll-view>
<!-- 订单列表区域 -->
<view class="dingdan-list-container">
<!-- 页面加载中 -->
<view class="loading-container" wx:if="{{isLoading}}">
<view class="loading-spinner"></view>
<text class="loading-text">加载中...</text>
</view>
<!-- 空状态 -->
<view
class="empty-container"
wx:if="{{!isLoading && dingdanShuju[currentTabKey].list.length === 0}}"
>
<image
class="empty-image"
src="/images/empty-order.png"
mode="aspectFit"
></image>
<text class="empty-text">暂无订单</text>
<text class="empty-subtext">快去下单体验服务吧</text>
</view>
<!-- 订单列表 -->
<block wx:if="{{!isLoading && dingdanShuju[currentTabKey].list.length > 0}}">
<block wx:for="{{dingdanShuju[currentTabKey].list}}" wx:key="dingdanId">
<view
class="dingdan-card"
bindtap="goToDingdanXiangqing"
data-item="{{item}}"
>
<!-- 商品图片 -->
<view class="dingdan-card-left">
<image
class="dingdan-image"
src="{{item.tupian}}"
mode="aspectFill"
binderror="onImageError"
data-index="{{index}}"
></image>
</view>
<!-- 订单信息 -->
<view class="dingdan-card-center">
<view class="dingdan-jieshao">
{{item.jieshao || '暂无描述'}}
</view>
</view>
<!-- 订单状态和价格 -->
<view class="dingdan-card-right">
<!-- 订单状态 -->
<view class="dingdan-zhuangtai">
{{item.zhuangtaiZh || '未知状态'}}
</view>
<!-- 订单价格 -->
<view class="dingdan-jine">
<text class="jine-symbol">¥</text>
<text class="jine-number">{{item.jine || '0.00'}}</text>
</view>
</view>
</view>
</block>
</block>
<!-- 加载更多提示 -->
<view
class="load-more-container"
wx:if="{{xianshiJiazaigengduo && !isLoading && dingdanShuju[currentTabKey].list.length > 0}}"
>
<view class="load-more-line"></view>
<text class="load-more-text">上拉加载更多</text>
<view class="load-more-line"></view>
</view>
<!-- 没有更多提示 -->
<view
class="no-more-container"
wx:if="{{!xianshiJiazaigengduo && !isLoading && dingdanShuju[currentTabKey].list.length > 0}}"
>
<text class="no-more-text">没有更多订单了</text>
</view>
</view>
</view>
<global-notification id="global-notification" />

190
pages/orders/orders.wxss Normal file
View File

@@ -0,0 +1,190 @@
/* pages/orders/orders.wxss */
.dingdan-page {
background-color: #f8f9fa;
padding-bottom: 20rpx;
}
.dingdan-tabs-scroll {
width: 100%;
height: 90rpx;
white-space: nowrap;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.03);
}
.dingdan-tabs-container {
display: flex;
align-items: center;
height: 100%;
padding: 0 20rpx;
}
.dingdan-tab-item {
position: relative;
}
.dingdan-tab-item:last-child {
margin-right: 0;
}
/* .dingdan-tab-item.tab-active 已由全局 .tab-capsule--active 覆盖 */
.tab-active-line {
width: 40rpx;
height: 4rpx;
background-color: #4caf50;
border-radius: 2rpx;
margin-top: 6rpx;
animation: fadeIn 0.3s ease;
}
@keyframes fadeIn {
from { opacity: 0; transform: scale(0.8); }
to { opacity: 1; transform: scale(1); }
}
.tab-text {
font-weight: 400;
}
.dingdan-list-container {
padding: 20rpx;
}
.loading-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 400rpx;
}
.loading-spinner {
border: 6rpx solid #e0e0e0;
border-top-color: #4caf50;
border-radius: 50%;
animation: spin 1s linear infinite;
margin-bottom: 20rpx;
}
.loading-text {
font-size: 28rpx;
color: #999999;
}
.empty-container {
height: 500rpx;
padding-top: 80rpx;
}
.empty-image {
opacity: 0.6;
}
.empty-text {
font-size: 32rpx;
color: #999999;
}
.dingdan-card {
display: flex;
align-items: center;
border-radius: 16rpx;
padding: 24rpx;
margin-bottom: 20rpx;
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.dingdan-card:active {
transform: translateY(-2rpx);
box-shadow: 0 6rpx 24rpx rgba(0, 0, 0, 0.08);
}
.dingdan-card-left {
flex-shrink: 0;
margin-right: 24rpx;
}
.dingdan-image {
width: 160rpx;
height: 160rpx;
border-radius: 12rpx;
background-color: #f5f5f5;
}
.dingdan-card-center {
flex: 1;
height: 160rpx;
display: flex;
align-items: flex-start;
}
.dingdan-jieshao {
font-size: 28rpx;
line-height: 40rpx;
color: #333333;
font-weight: 400;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
text-overflow: ellipsis;
}
.dingdan-card-right {
display: flex;
flex-direction: column;
align-items: flex-end;
justify-content: space-between;
height: 160rpx;
margin-left: 20rpx;
}
/* 价格样式 */
.dingdan-jine {
display: flex;
align-items: center; /* 垂直居中 */
}
.jine-symbol {
font-size: 28rpx;
color: #333333;
font-weight: 500;
margin-right: 4rpx; /* 添加右边距,让符号和数字有间隔 */
}
.jine-number {
font-size: 32rpx; /* 整数和小数一样大 */
color: #333333;
font-weight: 600;
}
.load-more-line {
width: 80rpx;
height: 1rpx;
background-color: #e0e0e0;
margin: 0 20rpx;
}
.load-more-text {
white-space: nowrap;
}
@media (max-width: 375px) {
.dingdan-image {
width: 140rpx;
height: 140rpx;
}
.dingdan-card-center {
height: 140rpx;
}
.dingdan-card-right {
height: 140rpx;
}
.jine-number {
font-size: 30rpx;
}
}