Compare commits

..

No commits in common. "755aff742214a4108c3bfcc9bc0e72ae9f785dd4" and "4b25dc3b07cdcbed5dbd86563566fd657588427d" have entirely different histories.

4 changed files with 67 additions and 555 deletions

View File

@ -4,101 +4,58 @@
<view class="card-header"> <view class="card-header">
<view class="shop-info"> <view class="shop-info">
<view class="tag self-tag" v-if="item.shopType === 'self'">自营</view> <view class="tag self-tag" v-if="item.shopType === 'self'">自营</view>
<view class="tag waimai-tag" v-if="item.shopType === 'waimai'">外卖</view> <image class="jd-tag" v-if="item.shopType === 'jd'" src="/static/image/shopping/jingdong/JD.png">JD
<image class="jd-tag" v-if="item.shopType === 'jd'" src="/static/image/shopping/jingdong/JD.png">
</image> </image>
<text class="shop-name">{{ item.shopName }}</text> <text class="shop-name">{{ item.shopName }}</text>
<uni-icons class="right-icon" type="right" size="12" color="#1A1A1A"></uni-icons> <uni-icons class="right-icon" type="right" size="12" color="#1A1A1A"></uni-icons>
</view> </view>
<view class="order-status"> <view class="order-status">
<view v-if="item.status === '等待付款'" class="status-warning"> <view v-if="item.statusType === 'warning'" class="status-warning">
<image style="width: 116rpx;height: 30rpx;" src="/static/image/shopping/jingdong/dengdaifukuan.png"> <image style="width: 116rpx;height: 30rpx;" src="/static/image/shopping/jingdong/dengdaifukuan.png">
</image> </image>
<text class="status-desc" v-if="item.statusDesc">{{ item.statusDesc }}</text> <text class="status-desc" v-if="item.statusDesc">{{ item.statusDesc }}</text>
</view> </view>
<text v-else class="status-text" <text v-else class="status-text" :class="item.statusColor || 'gray'">{{ item.status }}</text>
:class="{ red: item.statusColor === 'red' || item.status === '正在出库' || item.status === '商家备餐中' || item.status === '骑手到店取餐中' || item.status === '骑手已到店' }">{{
item.status }}</text>
</view> </view>
</view> </view>
<!-- Tracking --> <!-- Tracking -->
<view class="tracking-box" :class="{ 'waimai-tracking': item.shopType === 'waimai' }" <view class="tracking-box" v-if="item.trackingTitle || item.trackingDesc">
v-if="item.trackingTitle || item.trackingDesc">
<view class="waimai-tracking-icon" v-if="item.shopType === 'waimai'">
<image style="width: 32rpx; height: 32rpx;" src="/static/image/shopping/jingdong/waimai-logo.png"
mode="aspectFit" v-if="!item.trackingIcon">
</image>
<!-- <image style="width: 28rpx; height: 28rpx;" :src="item.trackingIcon" mode="aspectFit" v-else></image> -->
</view>
<view class="tracking-content"> <view class="tracking-content">
<view class="tracking-header" v-if="item.shopType !== 'waimai'"> <view class="tracking-header">
<image class="truck-icon" v-if="!item.trackingIcon" <image class="truck-icon" v-if="!item.trackingIcon"
src="/static/image/shopping/jingdong/cangku.png"> src="/static/image/shopping/jingdong/cangku.png">
</image> </image>
<image class="truck-icon" :src="item.trackingIcon" mode="aspectFit" v-else></image> <image class="truck-icon" :src="item.trackingIcon" mode="aspectFit" v-else></image>
<text class="tracking-title">{{ item.trackingTitle }}</text> <text class="tracking-title">{{ item.trackingTitle }}</text>
</view> </view>
<view class="tracking-main-title" v-else>
<view class="rich-title">预计<span style="color:#E40C24">{{ item.trackingTitle }}</span> 可送达</view>
</view>
<text class="tracking-desc" v-if="item.trackingDesc">{{ item.trackingDesc }}</text> <text class="tracking-desc" v-if="item.trackingDesc">{{ item.trackingDesc }}</text>
<text class="tracking-time">{{ item.trackingTime }}</text> <text class="tracking-time">{{ item.trackingTime }}</text>
</view> </view>
<uni-icons v-if="item.shopType !== 'waimai'" class="right-icon" type="right" size="14" <uni-icons class="right-icon" type="right" size="14" color="#3D3D3D"></uni-icons>
color="#3D3D3D"></uni-icons>
</view> </view>
<!-- Product --> <!-- Product -->
<view class="product-box" <view class="product-box">
:class="{ multiple: (item.products && item.products.length > 1) || (item.images && item.images.length > 0) }"> <image class="product-img" :src="item.image" mode="aspectFill"></image>
<template v-if="item.products && item.products.length > 1"> <view class="product-info">
<scroll-view class="product-images-scroll" scroll-x :show-scrollbar="false"> <text class="product-title">{{ item.title }}</text>
<image class="product-img small" v-for="(prod, idx) in item.products" :key="idx" :src="prod.image" <text class="product-desc" v-if="item.desc">{{ item.desc }}</text>
mode="aspectFill"></image> <view class="product-tags" v-if="item.tags && item.tags.length">
</scroll-view> <text class="tag" v-for="(tag, index) in item.tags" :key="index">{{ tag }}</text>
</template>
<template v-else-if="item.products && item.products.length === 1">
<image class="product-img" :src="item.products[0].image" mode="aspectFill"></image>
<view class="product-info">
<text class="product-title">{{ item.products[0].title }}</text>
<text class="product-desc" v-if="item.products[0].desc">{{ item.products[0].desc }}</text>
<view class="product-tags" v-if="item.products[0].tags && item.products[0].tags.length">
<text class="tag" v-for="(tag, index) in item.products[0].tags" :key="index">{{ tag }}</text>
</view>
</view> </view>
</template> </view>
<template v-else-if="item.images && item.images.length > 0">
<scroll-view class="product-images-scroll" scroll-x :show-scrollbar="false">
<image class="product-img small" v-for="(img, idx) in item.images" :key="idx" :src="img"
mode="aspectFill"></image>
</scroll-view>
</template>
<template v-else>
<image class="product-img" :src="item.image" mode="aspectFill"></image>
<view class="product-info">
<text class="product-title">{{ item.title }}</text>
<text class="product-desc" v-if="item.desc">{{ item.desc }}</text>
<view class="product-tags" v-if="item.tags && item.tags.length">
<text class="tag" v-for="(tag, index) in item.tags" :key="index">{{ tag }}</text>
</view>
</view>
</template>
<view class="product-price-box"> <view class="product-price-box">
<view class="price-wrap wx-font-regular"> <view class="price-wrap wx-font-regular">
<text class="price-symbol"></text> <text class="price-symbol"></text>
<text class="price-num">{{ item.price || (item.products && item.products[0] && <text class="price-num">{{ item.price }}</text>
item.products[0].price) }}</text>
</view> </view>
<text class="product-count" <text class="product-count">{{ item.count }}</text>
v-if="item.count || (item.products && item.products[0] && item.products[0].count)">{{
item.count || (item.products && item.products[0] && item.products[0].count) }}</text>
</view> </view>
</view> </view>
<!-- Promo --> <!-- Promo -->
<view class="promo-box" <view class="promo-box" :class="{ 'plus-promo': item.promoType === 'plus' }"
:class="{ 'plus-promo': item.promoType === 'plus', 'cashback-promo': item.promoType === 'cashback', 'coupon-promo': item.promoType === 'coupon' }"
v-if="item.promoType || item.promoText || item.promoHighlight"> v-if="item.promoType || item.promoText || item.promoHighlight">
<template v-if="item.promoType === 'plus'"> <template v-if="item.promoType === 'plus'">
<view class="plus-row"> <view class="plus-row">
@ -107,38 +64,20 @@
</view> </view>
<text class="promo-action">解锁权益 <uni-icons type="right" size="10" color="#654629"></uni-icons> </text> <text class="promo-action">解锁权益 <uni-icons type="right" size="10" color="#654629"></uni-icons> </text>
</template> </template>
<template v-else-if="item.promoType === 'cashback'">
<text class="promo-text">{{ item.promoText }} <text class="highlight" v-if="item.promoHighlight">{{
item.promoHighlight }}</text></text>
<text class="promo-action red">{{ item.promoAction || '点击领取' }} <uni-icons type="right" size="10"
color="#ED1C04"></uni-icons></text>
</template>
<template v-else-if="item.promoType === 'coupon'">
<view class="coupon-row">
<view class="coupon-tag">购物券</view>
<text class="promo-text">{{ item.promoText }}</text>
</view>
<text class="promo-action red">{{ item.promoAction || '去领券' }} <uni-icons type="right" size="10"
color="#ED1C04"></uni-icons></text>
</template>
<template v-else-if="item.promoType === 'text'">
<text class="promo-text text-basic">本单可享 <text class="highlight">{{ item.promoHighlight
}}</text>快去支付吧~</text>
</template>
<template v-else> <template v-else>
<text class="promo-text text-basic">当笔订单返现成功到账<text style="color: #E31700;">点击领取</text></text> <text class="promo-text text-basic">本单可享 <text class="highlight">{{
item.promoHighlight }}</text>快去支付吧~</text>
</template> </template>
</view> </view>
<!-- Footer --> <!-- Footer -->
<view class="footer-actions"> <view class="footer-actions">
<view class="more-box" v-if="item.status == '完成' && item.shopType != 'waimai'"> <view class="more-box" v-if="item.hasMore">
<text class="more-text">更多</text> <text class="more-text">更多</text>
</view> </view>
<view class="empty-space" v-else></view> <view class="empty-space" v-else></view>
<view class="action-buttons"> <view class="action-buttons">
<view class="btn" :class="btn.type || 'default'" <view class="btn" :class="btn.type || 'default'" v-for="(btn, index) in item.buttons" :key="index"
v-for="(btn, index) in getButtons(item.shopType, item.status, item)" :key="index"
@click="$emit('btnClick', btn)"> @click="$emit('btnClick', btn)">
{{ btn.text }} {{ btn.text }}
<view class="btn-badge" v-if="btn.badge">{{ btn.badge }}</view> <view class="btn-badge" v-if="btn.badge">{{ btn.badge }}</view>
@ -149,7 +88,7 @@
</template> </template>
<script setup> <script setup>
import { defineProps, computed } from 'vue'; import { defineProps } from 'vue';
const props = defineProps({ const props = defineProps({
item: { item: {
@ -158,63 +97,6 @@ const props = defineProps({
default: () => ({}) default: () => ({})
} }
}); });
const getButtons = (shopType, status, item) => {
const buttons = [];
if (status == '等待付款') {
buttons.push({ text: '取消订单', type: 'default' });
buttons.push({ text: '查看发票', type: 'default' });
buttons.push({ text: '修改订单', type: 'default' });
buttons.push({ text: '去支付', type: 'primary' });
}
if (shopType == 'waimai') {
if (status == '骑手到店取餐中') {
buttons.push({ text: '申请退款', type: 'default' });
buttons.push({ text: '查看发票', type: 'default' });
}
if (status == '商家备餐中') {
buttons.push({ text: '申请退款', type: 'default' });
buttons.push({ text: '查看发票', type: 'default' });
}
if (status == '完成') {
buttons.push({ text: '删除订单', type: 'default' });
buttons.push({ text: '查看发票', type: 'default' });
buttons.push({ text: '退换/售后', type: 'default' });
buttons.push({ text: '再次购买', type: 'primary' });
}
if (status == '已取消') {
buttons.push({ text: '删除订单', type: 'default' });
buttons.push({ text: '钱款去向', type: 'default' });
buttons.push({ text: '再次购买', type: 'primary' });
}
} else if (shopType != 'waimai') {
if (status == '正在出库') {
buttons.push({ text: '查看发票', type: 'default' });
buttons.push({ text: '再次购买', type: 'default' });
buttons.push({ text: '申请退款', type: 'default' });
buttons.push({ text: '修改订单', type: 'default' });
}
if (status == '完成') {
if (item?.trackingTitle == '已签收') {
buttons.push({ text: '卖了换钱', type: 'default' });
buttons.push({ text: '退还/售后', type: 'default' });
buttons.push({ text: '再次购买', type: 'primary' });
} else {
buttons.push({ text: '再次购买', type: 'default' });
buttons.push({ text: '申请退款', type: 'default' });
buttons.push({ text: '修改订单', type: 'default' });
}
}
if (status == '已取消') {
buttons.push({ text: '再次购买', type: 'default' });
buttons.push({ text: '申请退款', type: 'default' });
buttons.push({ text: '修改订单', type: 'primary' });
}
}
console.log(shopType, status);
return buttons;
}
</script> </script>
<style> <style>
@import "/common/main.css"; @import "/common/main.css";
@ -252,11 +134,6 @@ const getButtons = (shopType, status, item) => {
&.self-tag { &.self-tag {
background-color: #FC3538; background-color: #FC3538;
} }
&.waimai-tag {
background-color: #FEE74B;
color: #1A1A1A;
}
} }
.jd-tag { .jd-tag {
@ -286,32 +163,6 @@ const getButtons = (shopType, status, item) => {
flex-shrink: 0; flex-shrink: 0;
font-size: 26rpx; font-size: 26rpx;
.waimai-status-warning {
display: flex;
align-items: center;
height: 32rpx;
border: 2rpx solid #ED1C04;
border-radius: 16rpx;
overflow: hidden;
.w-badge {
background-color: #ED1C04;
color: #FFFFFF;
font-size: 20rpx;
height: 100%;
line-height: 32rpx;
padding: 0 10rpx;
}
.w-time {
color: #ED1C04;
font-size: 20rpx;
line-height: 32rpx;
padding: 0 10rpx;
background-color: #FFFFFF;
}
}
.status-warning { .status-warning {
display: flex; display: flex;
align-items: center; align-items: center;
@ -341,7 +192,6 @@ const getButtons = (shopType, status, item) => {
.status-text { .status-text {
font-size: 22rpx; font-size: 22rpx;
color: #87868E;
&.red { &.red {
color: #ED1C04; color: #ED1C04;
@ -367,38 +217,6 @@ const getButtons = (shopType, status, item) => {
border-radius: 12rpx; border-radius: 12rpx;
margin-bottom: 24rpx; margin-bottom: 24rpx;
&.waimai-tracking {
align-items: flex-start;
background-color: #F7F8FC;
border-radius: 12rpx;
padding: 12rpx 20rpx 18rpx;
.waimai-tracking-icon {
margin-right: 10rpx;
margin-top: 2rpx;
}
.tracking-main-title {
font-size: 26rpx;
color: #1A1A1A;
font-weight: 700;
line-height: 36rpx;
margin-bottom: 8rpx;
}
.tracking-desc {
margin-top: 0;
font-size: 22rpx;
line-height: 22rpx;
color: #1A1A1A;
margin-left: -42rpx;
}
.tracking-time {
margin-left: -42rpx;
}
}
.tracking-content { .tracking-content {
flex: 1; flex: 1;
@ -434,7 +252,6 @@ const getButtons = (shopType, status, item) => {
font-size: 22rpx; font-size: 22rpx;
line-height: 22rpx; line-height: 22rpx;
color: #767676; color: #767676;
} }
} }
@ -446,29 +263,6 @@ const getButtons = (shopType, status, item) => {
margin-bottom: 24rpx; margin-bottom: 24rpx;
align-items: center; align-items: center;
&.multiple {
.product-images-scroll {
flex: 1;
width: 0;
white-space: nowrap;
.product-img {
display: inline-block;
width: 132rpx;
height: 132rpx;
margin-right: 14rpx;
border-radius: 12rpx;
background-color: #F5F5F5;
}
}
.product-price-box {
margin-left: 10rpx;
justify-content: center;
align-items: flex-end;
}
}
.product-img { .product-img {
width: 144rpx; width: 144rpx;
height: 144rpx; height: 144rpx;
@ -556,19 +350,14 @@ const getButtons = (shopType, status, item) => {
font-size: 22rpx; font-size: 22rpx;
line-height: 22rpx; line-height: 22rpx;
&.plus-promo, &.plus-promo {
&.cashback-promo,
&.coupon-promo {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
background-color: #FFEDDF;
height: 52rpx; height: 52rpx;
padding: 0 16rpx; padding: 0 16rpx;
border-radius: 8rpx; border-radius: 8rpx;
}
&.plus-promo {
background-color: #FFEDDF;
.plus-row { .plus-row {
display: flex; display: flex;
@ -593,47 +382,6 @@ const getButtons = (shopType, status, item) => {
} }
} }
&.cashback-promo,
&.coupon-promo {
background-color: #FCF5F5;
.promo-text {
font-size: 22rpx;
line-height: 22rpx;
color: #1A1A1A;
.highlight {
color: #ED1C04;
}
}
.promo-action {
font-size: 22rpx;
display: flex;
align-items: center;
&.red {
color: #ED1C04;
}
}
}
&.coupon-promo {
.coupon-row {
display: flex;
align-items: center;
.coupon-tag {
font-size: 20rpx;
background-color: #ED1C04;
color: #FFFFFF;
padding: 2rpx 8rpx;
border-radius: 4rpx;
margin-right: 8rpx;
}
}
}
.text-basic { .text-basic {
font-size: 22rpx; font-size: 22rpx;
line-height: 22rpx; line-height: 22rpx;
@ -658,9 +406,8 @@ const getButtons = (shopType, status, item) => {
align-items: center; align-items: center;
.more-text { .more-text {
white-space: nowrap; font-size: 24rpx;
font-size: 22rpx; color: #999999;
color: #87868E;
} }
} }
@ -676,11 +423,11 @@ const getButtons = (shopType, status, item) => {
.btn { .btn {
position: relative; position: relative;
height: 56rpx; height: 52rpx;
line-height: 56rpx; line-height: 52rpx;
padding: 0 24rpx; padding: 0 24rpx;
border-radius: 8rpx; border-radius: 8rpx;
font-size: 22rpx; font-size: 24rpx;
margin-left: 16rpx; margin-left: 16rpx;
border: 1rpx solid #C7C7C7; border: 1rpx solid #C7C7C7;
color: #1A1A1A; color: #1A1A1A;

View File

@ -151,12 +151,6 @@
</image> </image>
</view> </view>
</view> </view>
<view class="form-item">
<text class="require-dot">*</text>
<text class="label">转账金额</text>
<uni-easyinput class="input" v-model="tempEditData.amount" type="digit" :inputBorder="false"
placeholder="请输入转账金额" />
</view>
<view class="form-item"> <view class="form-item">
<text class="require-dot">*</text> <text class="require-dot">*</text>
<text class="label">收款方</text> <text class="label">收款方</text>
@ -259,7 +253,6 @@ const loadStorageData = () => {
loadStorageData(); loadStorageData();
const tempEditData = reactive({ const tempEditData = reactive({
amount: '',
recipient: '', recipient: '',
paymentMethod: '', paymentMethod: '',
avatar: '', avatar: '',
@ -276,7 +269,6 @@ const buttonGroup = [{
}] }]
const openEditPopup = () => { const openEditPopup = () => {
tempEditData.amount = transferData.amount;
tempEditData.recipient = transferData.recipient; tempEditData.recipient = transferData.recipient;
tempEditData.paymentMethod = transferData.paymentMethod; tempEditData.paymentMethod = transferData.paymentMethod;
tempEditData.avatar = transferData.avatar; tempEditData.avatar = transferData.avatar;
@ -344,13 +336,6 @@ const confirmEdit = async () => {
}); });
return; return;
} }
if (!tempEditData.amount || isNaN(Number(tempEditData.amount))) {
uni.showToast({
title: '请输入有效金额',
icon: 'none'
});
return;
}
if (!tempEditData.recipient.trim()) { if (!tempEditData.recipient.trim()) {
uni.showToast({ uni.showToast({
title: '请输入收款方', title: '请输入收款方',
@ -378,7 +363,6 @@ const confirmEdit = async () => {
} }
// #endif // #endif
transferData.amount = tempEditData.amount;
transferData.recipient = tempEditData.recipient; transferData.recipient = tempEditData.recipient;
transferData.paymentMethod = tempEditData.paymentMethod; transferData.paymentMethod = tempEditData.paymentMethod;
transferData.avatar = finalAvatarPath; transferData.avatar = finalAvatarPath;

View File

@ -29,8 +29,7 @@
<scroll-view class="filter-scroll" scroll-x="true" :show-scrollbar="false"> <scroll-view class="filter-scroll" scroll-x="true" :show-scrollbar="false">
<view class="filter-list"> <view class="filter-list">
<view class="filter-item" v-for="(item, index) in filterList" :key="index" <view class="filter-item" v-for="(item, index) in filterList" :key="index"
:class="{ active: currentFilter === index, disabled: item.disabled }" :class="{ active: currentFilter === index }" @click="switchFilter(index)">
@click="switchFilter(index)">
<text class="text">{{ item.name }}</text> <text class="text">{{ item.name }}</text>
<text class="close-icon" v-if="currentFilter === index">×</text> <text class="close-icon" v-if="currentFilter === index">×</text>
</view> </view>
@ -43,7 +42,7 @@
</view> </view>
</view> </view>
<view class="content" :style="{ paddingTop: contentPaddingTop }"> <view class="content" :style="{ paddingTop: contentPaddingTop }">
<shopping-card v-for="(item, index) in filteredOrderList" :key="index" :item="item"></shopping-card> <shopping-card v-for="(item, index) in mockOrderList" :key="index" :item="item"></shopping-card>
</view> </view>
<view class="bottom-fixed"> <view class="bottom-fixed">
<view class="bottom-item"> <view class="bottom-item">
@ -61,7 +60,7 @@
</template> </template>
<script setup> <script setup>
import { ref, computed, onMounted, getCurrentInstance } from 'vue'; import { ref, onMounted, getCurrentInstance } from 'vue';
import ShoppingCard from '@/components/shopping/jingdong/shopping-card.vue'; import ShoppingCard from '@/components/shopping/jingdong/shopping-card.vue';
const contentPaddingTop = ref('0px'); const contentPaddingTop = ref('0px');
@ -91,212 +90,32 @@ const switchTab = (index) => {
currentTab.value = index; currentTab.value = index;
}; };
const currentFilter = ref(-1); const currentFilter = ref(1);
const filterList = ref([ const filterList = ref([
{ name: '待付款' }, { name: '待付款' },
{ name: '待收货' }, { name: '待收货' },
{ name: '待使用', disabled: true }, { name: '待使用' },
{ name: '已完成' }, { name: '已完成' },
{ name: '待评价' }, { name: '待评价' },
{ name: '已取消' } { name: '已取消' }
]); ]);
const switchFilter = (index) => { const switchFilter = (index) => {
if (filterList.value[index].disabled) return; currentFilter.value = index;
if (currentFilter.value === index) {
currentFilter.value = -1;
} else {
currentFilter.value = index;
}
}; };
const filteredOrderList = computed(() => {
const tabName = tabList.value[currentTab.value].name;
let baseList = mockOrderList.value;
if (tabName === '购物') {
baseList = mockOrderList.value.filter(item => item.shopType !== 'waimai');
} else if (tabName === '秒送') {
baseList = mockOrderList.value.filter(item => item.shopType === 'waimai');
}
if (currentFilter.value === -1) {
return baseList;
}
const filterName = filterList.value[currentFilter.value].name;
return baseList.filter(item => {
if (filterName === '待付款') return item.status === '等待付款';
if (filterName === '待收货') return item.status === '正在出库' || item.status === '待收货' || item.status === '运输中' || item.status === '已发货' || item.status === '商家备餐中' || item.status === '骑手到店取餐中';
if (filterName === '待使用') return item.status === '待使用';
if (filterName === '已完成') return item.status === '完成' || item.status === '已完成' || item.status === '已签收';
if (filterName === '待评价') return item.status === '待评价' || item.status === '完成' || item.status === '已完成';
if (filterName === '已取消') return item.status === '已取消';
return true;
});
});
const mockOrderList = ref([ const mockOrderList = ref([
{
shopType: 'waimai',
shopName: '安野屋 (AARYE) 京...',
status: '等待付款',
statusDesc: '29分钟',
products: [
{
image: '/static/image/shopping/jingdong/product1.png',
title: '超值哈哈哈哈哈哈哈哈哈哈哈哈哈哈好一人份',
desc: '不支持7天无理由退货',
tags: [],
price: '69.00',
count: 1,
}
],
promoType: 'text',
promoHighlight: '近90天600+人回购',
buttons: [
{ text: '取消订单', type: 'default' },
{ text: '查看发票', type: 'default' },
{ text: '修改订单', type: 'default' },
{ text: '去支付', type: 'primary' }
]
},
{
shopType: 'waimai',
shopName: '安野屋 (AARYE) 京...',
status: '骑手到店取餐中',
trackingTitle: '10:22-10:55',
trackingDesc: '骑手已到店,大王',
trackingTime: '2026-03-10 15:14:30',
products: [
{
image: '/static/image/shopping/jingdong/product1.png',
title: '超值哈哈哈哈哈哈哈哈哈哈哈哈哈哈好热 少糖',
desc: '不支持7天无理由退货',
tags: [],
price: '69.00',
count: 1,
}
],
promoType: 'cashback',
promoText: '当笔订单返现成功到账,',
promoAction: '点击领取',
buttons: [
{ text: '申请退款', type: 'default' },
{ text: '查看发票', type: 'default' }
]
},
{
shopType: 'waimai',
shopName: '安野屋 (AARYE) 京...',
status: '商家备餐中',
trackingTitle: '10:22-10:55',
trackingDesc: '商家已接单,商品备餐中',
trackingTime: '2026-03-10 15:14:30',
products: [
{
image: '/static/image/shopping/jingdong/product1.png',
title: '超值哈哈哈哈哈哈哈哈哈哈哈哈哈哈好热 少糖',
desc: '不支持7天无理由退货',
tags: [],
price: '69.00',
count: 1,
}
],
promoType: 'cashback',
promoText: '当笔订单返现成功到账,',
promoAction: '点击领取',
buttons: [
{ text: '申请退款', type: 'default' },
{ text: '查看发票', type: 'default' }
]
},
{
shopType: 'waimai',
shopName: '瑞幸咖啡',
status: '完成',
statusColor: 'gray',
products: [
{
image: '/static/image/shopping/jingdong/product1.png',
title: '多肉桃桃哈哈哈哈哈哈哈哈哈哈好和和好',
desc: '不支持7天无理由退货',
tags: [],
price: '69.00',
count: 1,
}
],
promoType: 'coupon',
promoText: '恭喜您获得3元京东购物券',
promoAction: '去领券',
buttons: [
{ text: '删除订单', type: 'default' },
{ text: '查看发票', type: 'default' },
{ text: '退换/售后', type: 'default' },
{ text: '再次购买', type: 'primary' }
]
},
{
shopType: 'waimai',
shopName: '瑞幸咖啡',
status: '完成',
statusColor: 'gray',
products: [
{
image: '/static/image/shopping/jingdong/product1.png',
},
{
image: '/static/image/shopping/jingdong/product1.png',
},
{
image: '/static/image/shopping/jingdong/product1.png',
}
],
price: '17.00',
count: 2,
buttons: [
{ text: '删除订单', type: 'default' },
{ text: '查看发票', type: 'default' },
{ text: '退换/售后', type: 'default' },
{ text: '再次购买', type: 'primary' }
]
},
{
shopType: 'waimai',
shopName: '瑞幸咖啡',
status: '已取消',
statusColor: 'gray',
products: [
{
image: '/static/image/shopping/jingdong/product1.png',
title: '多肉桃桃哈哈哈哈哈哈哈哈哈哈好和和好',
desc: '不支持7天无理由退货',
tags: [],
price: '69.00',
count: 1,
}
],
buttons: [
{ text: '删除订单', type: 'default' },
{ text: '钱款去向', type: 'default' },
{ text: '再次购买', type: 'primary' }
]
},
{ {
shopType: 'self', shopType: 'self',
shopName: '安野屋 (AARYE) 京联名哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好梦', shopName: '安野屋 (AARYE) 京联名哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好梦',
status: '等待付款', statusType: 'warning',
statusDesc: '20小时11分钟', statusDesc: '20小时11分钟',
products: [ image: '/static/image/shopping/jingdong/product1.png',
{ title: '安野哈哈哈哈哈哈哈哈哈哈哈哈好好',
image: '/static/image/shopping/jingdong/product1.png', desc: '联名哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好梦',
title: '安野哈哈哈哈哈哈哈哈哈哈哈哈好好', tags: ['无理由退货政策'],
desc: '联名哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好梦', price: '69.00',
tags: ['无理由退货政策'], count: 1,
price: '69.00',
count: 1,
}
],
promoType: 'text', promoType: 'text',
promoHighlight: '白条支付券0.5元优惠券', promoHighlight: '白条支付券0.5元优惠券',
buttons: [ buttons: [
@ -310,19 +129,16 @@ const mockOrderList = ref([
shopType: 'none', shopType: 'none',
shopName: '甜小南旗舰店', shopName: '甜小南旗舰店',
status: '正在出库', status: '正在出库',
statusColor: 'red',
trackingTitle: '仓库处理中', trackingTitle: '仓库处理中',
trackingDesc: '预计 3月12日24:00 前发货3月15日 24:00 前送达', trackingDesc: '预计 3月12日24:00 前发货3月15日 24:00 前送达',
trackingTime: '2026-03-10 15:14:30', trackingTime: '2026-03-10 15:14:30',
products: [ image: '/static/image/shopping/jingdong/product1.png',
{ title: '安野哈哈哈哈哈哈哈哈哈哈哈哈好好',
image: '/static/image/shopping/jingdong/product1.png', desc: '联名哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好梦',
title: '安野哈哈哈哈哈哈哈哈哈哈哈哈好好', tags: ['无理由退货政策'],
desc: '联名哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好梦', price: '69.00',
tags: ['无理由退货政策'], count: 1,
price: '69.00',
count: 1,
}
],
promoType: 'plus', promoType: 'plus',
promoText: '告别凑单, 享免运优惠', promoText: '告别凑单, 享免运优惠',
buttons: [ buttons: [
@ -340,16 +156,12 @@ const mockOrderList = ref([
trackingTitle: '已签收', trackingTitle: '已签收',
trackingDesc: '您的订单已签收,可对快递员的服务进行评价或打赏哦~', trackingDesc: '您的订单已签收,可对快递员的服务进行评价或打赏哦~',
trackingTime: '2026-03-10 15:14:30', trackingTime: '2026-03-10 15:14:30',
products: [ image: '/static/image/shopping/jingdong/product1.png',
{ title: '安野哈哈哈哈哈哈哈哈哈哈哈哈好好',
image: '/static/image/shopping/jingdong/product1.png', desc: '联名哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好梦',
title: '安野哈哈哈哈哈哈哈哈哈哈哈哈好好', tags: ['无理由退货政策'],
desc: '联名哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好梦', price: '69.00',
tags: ['无理由退货政策'], count: 1,
price: '69.00',
count: 1,
}
],
promoType: 'plus', promoType: 'plus',
promoText: '告别凑单, 享免运优惠', promoText: '告别凑单, 享免运优惠',
hasMore: true, hasMore: true,
@ -364,16 +176,12 @@ const mockOrderList = ref([
shopName: '甜小南旗舰店', shopName: '甜小南旗舰店',
status: '完成', status: '完成',
statusColor: 'gray', statusColor: 'gray',
products: [ image: '/static/image/shopping/jingdong/product1.png',
{ title: '安野哈哈哈哈哈哈哈哈哈哈哈哈好好',
image: '/static/image/shopping/jingdong/product1.png', desc: '联名哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好梦',
title: '安野哈哈哈哈哈哈哈哈哈哈哈哈好好', tags: ['无理由退货政策'],
desc: '联名哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好梦', price: '1669.00',
tags: ['无理由退货政策'], count: 1,
price: '1669.00',
count: 1,
}
],
hasMore: true, hasMore: true,
buttons: [ buttons: [
{ text: '再次购买', type: 'default' }, { text: '再次购买', type: 'default' },
@ -386,16 +194,12 @@ const mockOrderList = ref([
shopName: '甜小南旗舰店', shopName: '甜小南旗舰店',
status: '已取消', status: '已取消',
statusColor: 'gray', statusColor: 'gray',
products: [ image: '/static/image/shopping/jingdong/product1.png',
{ title: '安野哈哈哈哈哈哈哈哈哈哈哈哈好好',
image: '/static/image/shopping/jingdong/product1.png', desc: '联名哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好梦',
title: '安野哈哈哈哈哈哈哈哈哈哈哈哈好好', tags: ['无理由退货政策'],
desc: '联名哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好梦', price: '1669.00',
tags: ['无理由退货政策'], count: 1,
price: '1669.00',
count: 1,
}
],
buttons: [ buttons: [
{ text: '再次购买', type: 'default' }, { text: '再次购买', type: 'default' },
{ text: '申请退款', type: 'default' }, { text: '申请退款', type: 'default' },
@ -561,15 +365,6 @@ const mockOrderList = ref([
color: #E40C24; color: #E40C24;
} }
} }
// &.disabled {
// background-color: #F8F8F8;
// border-color: transparent;
// .text {
// color: #CCCCCC;
// }
// }
} }
} }
@ -632,19 +427,5 @@ const mockOrderList = ref([
width: 92rpx; width: 92rpx;
height: 92rpx; height: 92rpx;
} }
.upload-screenshot-content {
display: flex;
align-items: center;
flex-direction: column;
justify-content: center;
.upload-screenshot-text {
font-size: 36rpx;
color: #1777FF;
line-height: 50rpx;
margin-top: 16rpx;
}
}
} }
</style> </style>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB