662 lines
15 KiB
Plaintext
662 lines
15 KiB
Plaintext
<template>
|
||
<!-- 导航栏 -->
|
||
<view class=""
|
||
style="padding:50rpx 20rpx 18rpx; box-sizing: border-box; position: fixed;top: 0; left: 0; width: 100vw; background-color: #fff; display: flex; align-items: center; justify-content: space-between;">
|
||
<view class="" @click="Service.GoPageBack()">
|
||
<up-icon name="arrow-left" size="32rpx"></up-icon>
|
||
</view>
|
||
<view class="">
|
||
订单详情
|
||
</view>
|
||
<view class="" @click="Service.GoPage('/pages/my/myKF')" style="color: var(--nav-banbacor);">
|
||
<image :src="Service.GetIconImg('/static/index/order/message.png')" style="width: 32rpx; height: 32rpx; "
|
||
mode=""></image>
|
||
</view>
|
||
</view>
|
||
<view class="" style="width: 100%; height: 88rpx; ">
|
||
|
||
</view>
|
||
|
||
<!-- 骨架屏 -->
|
||
<view v-if="loading" class="skeleton-container">
|
||
<!-- 骨架屏订单状态 -->
|
||
<view class="skeleton-status"></view>
|
||
|
||
<!-- 骨架屏订单基本信息 -->
|
||
<view class="skeleton-basic-info">
|
||
<view class="skeleton-row">
|
||
<view class="skeleton-info-half"></view>
|
||
<view class="skeleton-info-half skeleton-right"></view>
|
||
</view>
|
||
<view class="skeleton-line"></view>
|
||
<view class="skeleton-line"></view>
|
||
<view class="skeleton-line"></view>
|
||
<view class="skeleton-row">
|
||
<view class="skeleton-info-third"></view>
|
||
<view class="skeleton-info-btn"></view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 骨架屏物品清单 -->
|
||
<view class="skeleton-basic-info">
|
||
<view class="skeleton-row">
|
||
<view class="" style="width: 45%;height: 40rpx;border-radius: 4rpx;animation: shimmer 1.5s infinite;" >
|
||
<view class="" style="background-color: #e6e6e6; width: 60%;height: 40rpx; " >
|
||
|
||
</view>
|
||
</view>
|
||
<view class="skeleton-info-half skeleton-right"></view>
|
||
<view class="skeleton-info-half skeleton-right"></view>
|
||
</view>
|
||
<view class="skeleton-row" v-for="(item,index) in 3" :key="index" >
|
||
<view class="" style="width: 45%;height: 40rpx;border-radius: 4rpx;animation: shimmer 1.5s infinite;" >
|
||
<view class="" style="background-color: #e6e6e6; width: 90%;height: 40rpx; " >
|
||
|
||
</view>
|
||
</view>
|
||
<view class="skeleton-info-half skeleton-right"></view>
|
||
<view class="skeleton-info-half skeleton-right"></view>
|
||
</view>
|
||
<view class="skeleton-list-status"></view>
|
||
</view>
|
||
|
||
<!-- 骨架屏地图区域 -->
|
||
<view class="skeleton-map"></view>
|
||
|
||
<!-- 骨架屏取餐地址 -->
|
||
<view class="skeleton-address">
|
||
<view class="skeleton-title"></view>
|
||
<view class="skeleton-store-name"></view>
|
||
<view class="skeleton-address-line"></view>
|
||
<view class="skeleton-btn"></view>
|
||
<view class="skeleton-code"></view>
|
||
</view>
|
||
|
||
<!-- 骨架屏送餐地址 -->
|
||
<view class="skeleton-address">
|
||
<view class="skeleton-title"></view>
|
||
<view class="skeleton-store-name"></view>
|
||
<view class="skeleton-address-line"></view>
|
||
<view class="skeleton-btn"></view>
|
||
<view class="skeleton-remark"></view>
|
||
</view>
|
||
|
||
<!-- 骨架屏底部按钮 -->
|
||
<view class="skeleton-bottom">
|
||
<view class="skeleton-bottom-btn"></view>
|
||
</view>
|
||
</view>
|
||
<!-- 实际内容 -->
|
||
<view v-else class="order-detail">
|
||
<!-- 订单状态 -->
|
||
<view class="order-status"
|
||
:style="{ 'background-color':orderStatus==0?'#E6F7FF':(orderStatus==1?'#FFFBE6':'#FFF2F0') }">
|
||
<text :style="{ 'color':orderStatus==0?'#1890FF':(orderStatus==1?'#FAAD14':'#FF4D4F') }"
|
||
style="font-size: 34rpx; font-weight: 600;">待取餐 · 请尽快到店取餐</text>
|
||
|
||
</view>
|
||
|
||
<!-- 订单基本信息 -->
|
||
<view class="order-basic-info">
|
||
<view class="" style="display: flex; align-items: center; justify-content: space-between;">
|
||
<view class="info-item">
|
||
<view class="label">剩余</view>
|
||
<view class="value highlight">10分钟</view>
|
||
<view class="label">(19:30前送达)</view>
|
||
</view>
|
||
<view class="info-item">
|
||
<text class="label" style="font-weight: 700;">配送费</text>
|
||
<text class="value price">¥5.50</text>
|
||
</view>
|
||
</view>
|
||
<view class="info-item">
|
||
<text class="label">订单编号 : </text>
|
||
<text class="value">20251021123456</text>
|
||
</view>
|
||
<view class="info-item" style=" justify-content: space-between;">
|
||
<view class="">
|
||
<text class="label">物品明细 : </text>
|
||
<text class="value">食物</text>
|
||
</view>
|
||
<view class="label">共3件商品</view>
|
||
</view>
|
||
<view class="info-item">
|
||
<text class="label">物品重量 : </text>
|
||
<text class="value">0.5kg</text>
|
||
</view>
|
||
<view class="info-item" style="justify-content: space-between; ">
|
||
<view class="label" style="display: flex; align-items: baseline;">
|
||
<u-icon name="clock" size="24rpx" class="clock-icon"></u-icon>
|
||
2025-10-17 18:30下单
|
||
</view>
|
||
<view class="info-item">
|
||
<up-button @click.stop="Service.GoPage('/pages/order/abnormal')" type="warning"
|
||
color='var(--nav-diluted)' shape='circle' size="mini">提交异常</up-button>
|
||
</view>
|
||
</view>
|
||
|
||
</view>
|
||
|
||
<!-- 物品清单 -->
|
||
<view class="order-basic-info">
|
||
<view class="" style="display: flex; align-items: center; ">
|
||
<view class="" style="flex: 1; font-size: 34rpx; font-weight: 600; ">
|
||
物品清单
|
||
</view>
|
||
<view class="" style="width: 100rpx; text-align: right; font-size: 30rpx; ">
|
||
5件
|
||
</view>
|
||
<view class="" style="width: 120rpx; text-align: right; font-size: 30rpx; ">
|
||
¥16
|
||
</view>
|
||
</view>
|
||
<!-- 商品列表 -->
|
||
<view class="" :style="{'height':isShow?'190rpx':'fit-content' }" style="overflow: hidden;">
|
||
<view class="" v-for="(goodsItem,goodsIndex) in 5 " :key="goodsIndex"
|
||
style="display: flex; align-items: center; margin-top: 15rpx; ">
|
||
<view class="" style="flex: 1; ">
|
||
康师傅 大食桶红烧牛肉143g/桶 经典红烧酱香免洗桶装速食泡面
|
||
</view>
|
||
<view class="" style="width: 100rpx; text-align: right; ">
|
||
×4
|
||
</view>
|
||
<view class="" style="width: 120rpx; text-align: right; ">
|
||
¥16
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="" @click="isShow=!isShow"
|
||
style=" margin-top: 20rpx; display: flex; align-items: center; justify-content: center; color: #666; ">
|
||
<up-icon :name="isShow?'arrow-down':'arrow-up'" color="#666" size="18"></up-icon>
|
||
{{isShow?'展开':'收入'}}
|
||
</view>
|
||
</view>
|
||
<!-- 地图区域 -->
|
||
<view class="map-section">
|
||
<view class="map-placeholder">
|
||
<text @click="Service.GoPage('/pages/order/navigation')" class="map-hint">点击查看完整导航</text>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 取餐地址 -->
|
||
<view class="address-section">
|
||
<text class="section-title">取餐地址</text>
|
||
<view class="address-content">
|
||
<text class="store-name">张亮麻辣烫(五道口店)</text>
|
||
<text class="address">北京市海淀区成府路28号</text>
|
||
<view class="" style="margin-bottom: 20rpx;">
|
||
<up-button icon="phone" type="primary" shape="circle" text="拨打商家"></up-button>
|
||
</view>
|
||
<view class="pickup-code">
|
||
<text class="code-label">取餐号:</text>
|
||
<text class="code-value">A123</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 送餐地址 -->
|
||
<view class="address-section">
|
||
<text class="section-title">送餐地址</text>
|
||
<view class="address-content">
|
||
<text class="user-name">张*</text>
|
||
<text class="address">XX小区3栋502室</text>
|
||
<view class="" style="margin-bottom: 20rpx;">
|
||
<up-button icon="phone" type="primary" shape="circle" text="拨打商家"></up-button>
|
||
</view>
|
||
<view class="remark">
|
||
<text class="remark-label">备注:</text>
|
||
<text class="remark-content">请放门口,勿按门铃</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="" style="width: 100vw; height: 140rpx; ">
|
||
|
||
</view>
|
||
|
||
<!-- 底部按钮 -->
|
||
<view class="bottom-action">
|
||
<up-button color="var(--nav-vice)" class="confirm-btn">我已取餐</up-button>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script setup lang="ts">
|
||
import { onLoad } from '@dcloudio/uni-app';
|
||
import { ref, onMounted } from 'vue';
|
||
import { Service } from '@/Service/Service';
|
||
|
||
// 加载状态
|
||
const loading = ref(true);
|
||
|
||
let orderStatus = ref(0)
|
||
|
||
let isShow = ref(true)
|
||
|
||
onLoad(() => {
|
||
setTimeout(() => {
|
||
loading.value = false
|
||
}, 1000)
|
||
})
|
||
</script>
|
||
|
||
<style scoped>
|
||
/* 骨架屏样式 */
|
||
.skeleton-container {
|
||
min-height: 100vh;
|
||
background-color: #f5f5f5;
|
||
padding-bottom: 140rpx;
|
||
}
|
||
|
||
/* 骨架屏导航栏 */
|
||
.skeleton-nav {
|
||
height: 88rpx;
|
||
position: fixed;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100vw;
|
||
background-color: #fff;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
padding: 0 20rpx;
|
||
z-index: 100;
|
||
}
|
||
|
||
.skeleton-nav-item {
|
||
width: 32rpx;
|
||
height: 32rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 4rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
.skeleton-nav-title {
|
||
width: 180rpx;
|
||
height: 36rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 4rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
/* 骨架屏订单状态 */
|
||
.skeleton-status {
|
||
height: 100rpx;
|
||
background-color: #fff;
|
||
padding: 30rpx;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
|
||
.skeleton-status::after {
|
||
content: '';
|
||
width: 350rpx;
|
||
height: 45rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 4rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
/* 骨架屏订单基本信息 */
|
||
.skeleton-basic-info {
|
||
background-color: #fff;
|
||
margin: 20rpx 20rpx;
|
||
padding: 30rpx;
|
||
border-radius: 20rpx;
|
||
}
|
||
|
||
.skeleton-row {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
margin-bottom: 20rpx;
|
||
}
|
||
|
||
.skeleton-info-half {
|
||
width: 45%;
|
||
height: 40rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 4rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
.skeleton-right {
|
||
width: 10%;
|
||
}
|
||
|
||
.skeleton-line {
|
||
width: 60%;
|
||
height: 40rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 4rpx;
|
||
margin-bottom: 20rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
.skeleton-info-third {
|
||
width: 60%;
|
||
height: 40rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 4rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
.skeleton-info-btn {
|
||
width: 20%;
|
||
height: 50rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 25rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
/* 列表状态 */
|
||
.skeleton-list-status {
|
||
height: 60rpx;
|
||
background-color: #fff;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
|
||
.skeleton-list-status::after {
|
||
content: '';
|
||
width: 200rpx;
|
||
height: 45rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 4rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
/* 骨架屏地图区域 */
|
||
.skeleton-map {
|
||
margin: 20rpx;
|
||
height: 400rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 20rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
position: relative;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.skeleton-map::after {
|
||
content: '';
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
background: linear-gradient(135deg, transparent 25%, rgba(255, 255, 255, 0.2) 25%, rgba(255, 255, 255, 0.2) 50%, transparent 50%, transparent 75%, rgba(255, 255, 255, 0.2) 75%, rgba(255, 255, 255, 0.2));
|
||
background-size: 100rpx 100rpx;
|
||
animation: shimmer 1.5s infinite linear;
|
||
}
|
||
|
||
/* 骨架屏地址区域 */
|
||
.skeleton-address {
|
||
background-color: #fff;
|
||
margin: 20rpx;
|
||
padding: 30rpx;
|
||
border-radius: 20rpx;
|
||
}
|
||
|
||
.skeleton-title {
|
||
width: 120rpx;
|
||
height: 30rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 4rpx;
|
||
margin-bottom: 25rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
.skeleton-store-name {
|
||
width: 70%;
|
||
height: 50rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 4rpx;
|
||
margin-bottom: 15rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
.skeleton-address-line {
|
||
width: 90%;
|
||
height: 26rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 4rpx;
|
||
margin-bottom: 15rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
.skeleton-btn {
|
||
height: 70rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 35rpx;
|
||
margin: 20rpx 0;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
.skeleton-code {
|
||
width: 50%;
|
||
height: 26rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 4rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
.skeleton-remark {
|
||
width: 80%;
|
||
height: 26rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 4rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
/* 骨架屏底部按钮 */
|
||
.skeleton-bottom {
|
||
background-color: #fff;
|
||
width: 100vw;
|
||
position: fixed;
|
||
bottom: 0;
|
||
left: 0;
|
||
padding: 20rpx 30rpx;
|
||
}
|
||
|
||
.skeleton-bottom-btn {
|
||
width: 100%;
|
||
height: 90rpx;
|
||
background-color: #e6e6e6;
|
||
border-radius: 45rpx;
|
||
animation: shimmer 1.5s infinite;
|
||
}
|
||
|
||
/* 骨架屏动画 */
|
||
@keyframes shimmer {
|
||
0% {
|
||
opacity: 0.6;
|
||
}
|
||
|
||
50% {
|
||
opacity: 0.8;
|
||
}
|
||
|
||
100% {
|
||
opacity: 0.6;
|
||
}
|
||
}
|
||
|
||
/* 骨架屏滑动动画 */
|
||
@keyframes shimmer-slide {
|
||
0% {
|
||
transform: translateX(-100%);
|
||
}
|
||
|
||
100% {
|
||
transform: translateX(100%);
|
||
}
|
||
}
|
||
|
||
/* end */
|
||
|
||
.order-detail {
|
||
min-height: 100vh;
|
||
background-color: #f5f5f5;
|
||
}
|
||
|
||
/* 订单状态样式 */
|
||
.order-status {
|
||
background-color: #fff;
|
||
padding: 30rpx;
|
||
text-align: center;
|
||
}
|
||
|
||
|
||
/* 订单基本信息样式 */
|
||
.order-basic-info {
|
||
background-color: #fff;
|
||
margin: 20rpx 20rpx;
|
||
padding: 30rpx;
|
||
border-radius: 20rpx;
|
||
}
|
||
|
||
.info-item {
|
||
display: flex;
|
||
align-items: center;
|
||
margin-bottom: 20rpx;
|
||
font-size: 28rpx;
|
||
}
|
||
|
||
.info-item:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.label {
|
||
color: #666;
|
||
margin-right: 10rpx;
|
||
}
|
||
|
||
.value {
|
||
color: #333;
|
||
}
|
||
|
||
.value.highlight {
|
||
color: var(--nav-diluted);
|
||
font-weight: 500;
|
||
}
|
||
|
||
.value.price {
|
||
color: var(--nav-diluted);
|
||
font-weight: 700;
|
||
}
|
||
|
||
.clock-icon {
|
||
color: #666;
|
||
margin-right: 8rpx;
|
||
}
|
||
|
||
/* 地图区域样式 */
|
||
.map-section {
|
||
margin: 20rpx;
|
||
border-radius: 20rpx;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.map-placeholder {
|
||
width: 100%;
|
||
height: 400rpx;
|
||
background-color: #f0f0f0;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
position: relative;
|
||
border: 1rpx solid #e8e8e8;
|
||
}
|
||
|
||
.map-placeholder::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
background: linear-gradient(135deg, #f5f5f5 25%, #e6e6e6 25%, #e6e6e6 50%, #f5f5f5 50%, #f5f5f5 75%, #e6e6e6 75%, #e6e6e6 100%);
|
||
background-size: 20rpx 20rpx;
|
||
opacity: 0.3;
|
||
}
|
||
|
||
.map-hint {
|
||
font-size: 28rpx;
|
||
color: #666;
|
||
position: relative;
|
||
z-index: 1;
|
||
}
|
||
|
||
/* 地址区域样式 */
|
||
.address-section {
|
||
background-color: #fff;
|
||
margin: 20rpx;
|
||
padding: 30rpx;
|
||
border-radius: 20rpx;
|
||
}
|
||
|
||
.section-title {
|
||
font-size: 30rpx;
|
||
font-weight: 800;
|
||
color: #333;
|
||
margin-bottom: 25rpx;
|
||
}
|
||
|
||
.address-content {
|
||
position: relative;
|
||
}
|
||
|
||
.store-name,
|
||
.user-name {
|
||
font-size: 34rpx;
|
||
font-weight: 600;
|
||
margin-bottom: 15rpx;
|
||
display: block;
|
||
}
|
||
|
||
.address {
|
||
font-size: 26rpx;
|
||
color: #666;
|
||
line-height: 1.5;
|
||
margin-bottom: 25rpx;
|
||
display: block;
|
||
}
|
||
|
||
|
||
|
||
.pickup-code,
|
||
.remark {
|
||
font-size: 26rpx;
|
||
}
|
||
|
||
.code-label,
|
||
.code-value {
|
||
color: var(--nav-mian);
|
||
font-weight: 600;
|
||
}
|
||
|
||
.remark-label,
|
||
.remark-content {
|
||
color: #FAAD14;
|
||
font-weight: 600;
|
||
}
|
||
|
||
/* 底部按钮样式 */
|
||
.bottom-action {
|
||
background-color: #fff;
|
||
width: 100vw;
|
||
position: fixed;
|
||
bottom: 0;
|
||
left: 0;
|
||
padding: 20rpx 30rpx;
|
||
}
|
||
|
||
.confirm-btn {
|
||
width: 100%;
|
||
height: 90rpx;
|
||
font-size: 32rpx;
|
||
line-height: 90rpx;
|
||
border-radius: 45rpx;
|
||
}
|
||
</style> |