merchapp/java-mall-app-shop-admin/pages/order/order.vue

2642 lines
74 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="index-container">
<status-bar :backgroundColor="'#fff'" v-if="true"></status-bar>
<view class="shop-info">
<view
class="shop-logo-img"
:style="{ backgroundImage: `url(${logoUrl})` }"
></view>
<view class="shop-name">{{ shopNmae }}</view>
</view>
<view class="tab-content">
<tui-tabs
:tabs="tabs"
:currentTab="currentTab"
backgroundColor="#fff"
:height="88"
color="#333"
:size="32"
selectedColor="#FE411B"
sliderBgColor="#FE411B"
:width="width"
unlined
@change="handleTab"
></tui-tabs>
</view>
<view class="tab2-content" v-if="currentTab == 0">
<tui-tabs
:class="['tabs-2', `tab_item_${currentTab2}`]"
:tabs="tabs2"
:width="300"
:currentTab="currentTab2"
@change="handleTab2"
backgroundColor="#fff"
:height="60"
:size="28"
unlined
:sliderWidth="150"
:sliderHeight="48"
sliderRadius="4rpx"
bottom="50%"
color="#888"
selectedColor="#fff"
sliderBgColor="#FE411B"
></tui-tabs>
</view>
<view class="search-contetn" v-if="currentTab2 != 2">
<u-search
placeholder="请输入订单号搜索"
:showAction="false"
bgColor="#fff"
v-model="keyword"
@input="searchOrder()"
></u-search>
<!-- <view class="btn-content" @click="handleShowDropDown">
<tui-dropdown-list :show="showDropdown" :top="94" :height="400">
<template v-slot:selectionbox>
<view class="btn-down">
功能模块
<u-icon
:class="[
'tui-animation',
showDropdown ? 'tui-animation-show' : '',
]"
style="display: inline-block; margin-left: 6rpx"
:name="'arrow-down'"
color="#cccccc"
size="12"
></u-icon>
</view>
</template>
<template v-slot:dropdownbox>
<view class="btn-down-list">
<view class="btn-unfold">全部展开</view>
<view class="btn-unfold">全部收回</view>
</view>
</template>
</tui-dropdown-list>
</view> -->
</view>
<view class="sales-retrun-btn-list" v-if="currentTab2 == 2">
<u-button
:class="[
'sales-retrun-btn-item',
{ active: salesReturnBtnSearchAcitve == item.value },
]"
size=""
@click="handelSalesReturnSearch(item)"
:style="{ width: item.width }"
v-for="(item, index) of salesReturnBtnSearchList"
:key="index"
>
{{ item.label }}
</u-button>
</view>
<view class="order-info-content" v-if="currentTab2 == 0">
<favorite-loading
class="order-loading"
v-show="showOrderLoading"
:color="'#FE411B'"
text=""
animation="spinner15"
></favorite-loading>
<scroll-view
class="uni-swiper-list"
scroll-y
:scroll-top="0"
enhanced
:show-scrollbar="false"
@scrolltolower="scrolltolower"
v-if="orderInfo.order_page_list.records.length > 0"
>
<view
:class="[
'order-info-block',
{ 'order-info-oepn': item.showRefundOrderInfo },
]"
v-for="(item, index) of orderInfo.order_page_list.records"
:key="index"
>
<view class="order-info-hander">
<view class="order-num-block">
<view class="order-serial-num">
#
<block
style="
font-size: 46rpx;
padding-left: 4rpx;
font-weight: bold;
"
>
{{ item.orderNum }}
</block>
</view>
<view class="delivery-status">
{{ sfFormatStatus(item.order_state_id) }}
</view>
</view>
<view class="rider-info" v-if="item.arrival_time && item.order_id">
<view class="delivery-time">
预计送达{{ formatTime(item.arrival_time) }}前
</view>
<view class="order-num">订单号:{{ item.order_id }}</view>
</view>
</view>
<view class="" v-show="item.showRefundOrderInfo">
<view class="user-info-block">
<view class="user-info">
{{ item.buyer_info.da_name }} 手机尾号{{
item.buyer_info.da_mobile.slice(-4)
}}
</view>
<view class="user-address">
收货地址:{{
item.buyer_info.da_province +
item.buyer_info.da_city +
item.buyer_info.da_county +
item.buyer_info.da_address
}}
</view>
<view class="distance">距离:{{ item.distance / 1000 }}km</view>
</view>
<view class="picking-info">
<view class="picking-status">
<view class="picking-name">拣货中</view>
<view class="picking-time">
{{ getRemainingTime(item.arrival_time) }}
</view>
</view>
<u-button
class="picking-btn"
@click="handerShowOrderPickingPopup(item)"
>
拣货完成
</u-button>
</view>
<view class="delivery-status-info">
<view class="delivery-status">
{{ sfFormatStatus(item.order_state_id) }}
</view>
<view class="delivery-num">{{ item.order_pickup_num_str }}</view>
</view>
<view class="order-remark">
<block style="color: #fff; font-weight: bold">备注:</block>
<block style="color: #fff">
{{ item.buyer_info.order_message }}
</block>
</view>
<view class="commodity-info-block">
<view class="commodity-num">
<block style="font-size: 36rpx">
{{ item.order_items.length || 0 }}
</block>
<block>件商品</block>
</view>
<view
class="commodity-info"
v-for="(group, index) of item.order_items"
:key="index"
>
<image
class="commodity-info-img"
:src="group.order_item_image"
></image>
<view class="commodity-content">
<view class="commodity-name">{{ group.item_name || 0 }}</view>
<view class="commodity-barcode">
条码
<block style="padding-left: 8rpx">
{{ group.item_barcode || 0 }}
</block>
</view>
<view class="commodity-specification">
规格
<block style="padding-left: 8rpx">
{{ group.specification || 0 }}
</block>
</view>
</view>
<view class="commodity-num">
<view class="">
X
<text style="padding-left: 8rpx">
{{ group.order_item_quantity || 0 }}
</text>
</view>
</view>
<view class="commodity-price">
¥{{ group.order_item_amount || 0 }}
</view>
</view>
</view>
<!-- <view class="baling-charges-block">
<view class="baling-charges-name">打包费</view>
<view class="baling charges-num">¥0.5</view>
</view> -->
<view class="cost-info-block">
<view class="cost-info-item cost-info-subtotal">
<view class="cost-info-title">小计</view>
<view class="cost-info-num">
¥{{ item.order_product_amount }}
</view>
</view>
<view class="cost-info-item cost-info-subtotal">
<view
class="cost-info-title"
style="color: #333333; font-weight: 700"
>
商家活动支付
<block>
<u-icon
style="display: inline-block; margin-left: 8rpx"
name="question-circle"
size="12"
color="aaaaaa"
></u-icon>
</block>
</view>
<view class="cost-info-num">
¥{{ item.order_discount_amount }}
</view>
</view>
<view class="cost-info-item cost-info-subtotal">
<view
class="cost-info-title"
style="color: #333333; font-weight: 700"
>
平台服务费
<block>
<u-icon
style="display: inline-block; margin-left: 8rpx"
name="question-circle"
size="12"
color="#aaaaaa"
></u-icon>
</block>
</view>
<view class="cost-info-num">¥{{ item.platform_fee }}</view>
</view>
<view class="cost-info-item cost-info-subtotal">
<view
class="cost-info-title"
style="color: #333333; font-weight: 700"
>
配送费用
<block>
<u-icon
style="display: inline-block; margin-left: 8rpx"
name="question-circle"
size="12"
color="#aaaaaa"
></u-icon>
</block>
</view>
<view class="cost-info-num">
¥{{ item.order_shipping_fee }}
</view>
</view>
<!-- <view class="cost-info-income">
<view class="predict-income">
预计收入
<block
style="font-size: 40rpx; color: #333333; font-weight: 700"
>
¥24.95
</block>
</view>
<view class="customer-actual-payment">
顾客实际支付 ¥30.50
</view>
</view> -->
</view>
</view>
<view class="order-btn-block">
<view class="btn-list">
<u-button class="btn-item" @click="handerShowCancelOrder(item)">
取消订单
</u-button>
<!-- <u-button class="btn-item">退差价</u-button> -->
<u-button
class="btn-item"
@click="handerShowPartOrderRefund(item)"
>
部分退款
</u-button>
</view>
<view class="arrow-item" @click="showRefundOrderInfo(item, index)">
{{ item.showRefundOrderInfo ? "收起订单" : "展开订单" }}
<u-icon
style="display: inline-block; margin-left: 6rpx"
:name="item.showRefundOrderInfo ? 'arrow-up' : 'arrow-down'"
color="#cccccc"
size="12"
></u-icon>
</view>
</view>
</view>
<view
class="m-loading-box"
v-if="
orderInfo.order_page_list.records.length > 0 && !isNoOnlineOrder
"
>
<block v-if="loadingDownOnlinData">
<view class="u-loadmore">
<view class="u-loading"></view>
<text class="u-loadmore-tips">正在加载...</text>
</view>
</block>
<block v-else>
<view class="u-loadmore u-loadmore-line">
<text class="u-loadmore-tips">没有更多数据啦!</text>
</view>
</block>
</view>
</scroll-view>
<view
class="no-data"
v-if="orderInfo.order_page_list.records.length <= 0 && isNoOnlineOrder"
>
<view class="no-data-bg"></view>
<view class="no-data-tips">暂无交易记录!</view>
</view>
</view>
<view class="order-info-content" v-if="currentTab2 == 1">
<favorite-loading
class="order-loading"
v-show="showOrderLoading"
:color="'#FE411B'"
text=""
animation="spinner15"
></favorite-loading>
<scroll-view
class="uni-swiper-list"
scroll-y
:scroll-top="0"
enhanced
:show-scrollbar="false"
@scrolltolower="scrolltolower"
v-if="orderInfo.order_page_list.records.length > 0"
>
<view
:class="[
'order-info-block',
{ 'order-info-oepn': item.showRefundOrderInfo },
{ 'order-abnormal': currentTab2 == 1 && item.showRefundOrderInfo },
]"
v-for="(item, index) of orderInfo.order_page_list.records"
:key="index"
>
<view class="order-info-hander">
<view class="order-num-block">
<view class="order-serial-num">
#
<text
style="
font-size: 46rpx;
padding-left: 4rpx;
font-weight: bold;
"
>
{{ item.order_pickup_num }}
</text>
</view>
<view class="delivery-status" style="color: red">
{{ sfFormatStatus(item.order_state_id) }}
</view>
</view>
<view class="rider-info" v-if="item.arrival_time && item.order_id">
<view class="delivery-time">
预计送达{{ formatTime(item.arrival_time) }}前
</view>
<view class="order-num">订单号:{{ item.order_id }}</view>
</view>
</view>
<view class="" v-show="item.showRefundOrderInfo">
<view class="user-info-block">
<view class="user-info">
<view class="user-info-block">
{{ item.buyer_info.da_name }} 手机尾号{{
item.buyer_info.da_mobile.slice(-4)
}}
</view>
<view class="user-info-icon-block"></view>
</view>
<view class="user-address">
收货地址:{{
item.buyer_info.da_province +
item.buyer_info.da_city +
item.buyer_info.da_county +
item.buyer_info.da_address
}}
</view>
<view class="distance">距离:{{ item.distance / 1000 }}km</view>
</view>
<!-- <view class="picking-info">
<view class="picking-status">
<view class="picking-name">拣货中</view>
<view class="picking-time">已用时 03:54</view>
</view>
<u-button class="picking-btn">拣货完成</u-button>
</view> -->
<view class="delivery-status-info">
<!-- <view class="delivery-status">{{
sfFormatStatus(item.order_state_id)
}}</view> -->
<view class="delivery-num">{{ item.order_pickup_num_str }}</view>
</view>
<view class="order-remark">
<text style="font-weight: bold">备注:</text>
<text>{{ item.buyer_info.order_message }}</text>
</view>
<view class="commodity-info-block">
<view class="commodity-num">
<text style="font-size: 36rpx">
{{ item.order_items.length || 0 }}
</text>
<text>件商品</text>
</view>
<view
class="commodity-info"
v-for="(group, index) of item.order_items"
:key="index"
>
<image
class="commodity-info-img"
:src="group.order_item_image"
></image>
<view class="commodity-content">
<view class="commodity-name">{{ group.item_name || 0 }}</view>
<view class="commodity-barcode">
条码
<text style="padding-left: 8rpx">
{{ group.item_barcode || 0 }}
</text>
</view>
<view class="commodity-specification">
规格
<text style="padding-left: 8rpx">
{{ item.specification || 0 }}
</text>
</view>
</view>
<view class="commodity-num">
X
<text style="padding-left: 8rpx">
{{ item.order_item_quantity || 0 }}
</text>
</view>
<view class="commodity-price">
¥{{ item.order_item_amount || 0 }}
</view>
</view>
</view>
<!-- <view class="baling-charges-block">
<view class="baling-charges-name">打包费</view>
<view class="baling charges-num">¥0.5</view>
</view> -->
<view class="cost-info-block">
<view class="cost-info-item cost-info-subtotal">
<view class="cost-info-title">小计</view>
<view class="cost-info-num">
¥{{ item.order_product_amount }}
</view>
</view>
<view class="cost-info-item cost-info-subtotal">
<view
class="cost-info-title"
style="color: #333333; font-weight: 700"
>
商家活动支付
<text>
<u-icon
style="display: inline-block; margin-left: 8rpx"
name="question-circle"
size="12"
color="aaaaaa"
></u-icon>
</text>
</view>
<view class="cost-info-num">
¥{{ item.order_discount_amount }}
</view>
</view>
<view class="cost-info-item cost-info-subtotal">
<view
class="cost-info-title"
style="color: #333333; font-weight: 700"
>
平台服务费
<text>
<u-icon
style="display: inline-block; margin-left: 8rpx"
name="question-circle"
size="12"
color="#aaaaaa"
></u-icon>
</text>
</view>
<view class="cost-info-num">¥{{ item.platform_fee }}</view>
</view>
<view class="cost-info-item cost-info-subtotal">
<view
class="cost-info-title"
style="color: #333333; font-weight: 700"
>
配送费用
<text>
<u-icon
style="display: inline-block; margin-left: 8rpx"
name="question-circle"
size="12"
color="#aaaaaa"
></u-icon>
</text>
</view>
<view class="cost-info-num">
¥{{ item.order_shipping_fee }}
</view>
</view>
<view class="cost-info-income">
<view class="predict-income">
预计收入
<text
style="font-size: 40rpx; color: #333333; font-weight: 700"
>
¥24.95
</text>
</view>
<view class="customer-actual-payment">
顾客实际支付 ¥30.50
</view>
</view>
</view>
</view>
<view class="order-btn-block">
<!-- <view class="btn-list">
<u-button class="btn-item">取消订单</u-button>
<u-button class="btn-item">退差价</u-button>
<u-button class="btn-item">部分退款</u-button>
</view> -->
<view class="arrow-item" @click="showRefundOrderInfo(item, index)">
{{ item.showRefundOrderInfo ? "收起订单" : "展开订单" }}
<u-icon
style="display: inline-block; margin-left: 6rpx"
:name="item.showRefundOrderInfo ? 'arrow-up' : 'arrow-down'"
size="12"
color="#cccccc"
></u-icon>
</view>
</view>
</view>
<view class="m-loading-box">
<block v-if="loadingDownOnlinData">
<view class="u-loadmore">
<view class="u-loading"></view>
<text class="u-loadmore-tips">正在加载...</text>
</view>
</block>
<block v-else>
<view class="u-loadmore u-loadmore-line">
<text class="u-loadmore-tips">没有更多数据啦!</text>
</view>
</block>
</view>
</scroll-view>
<view
class="no-data"
v-if="orderInfo.order_page_list.records.length <= 0 && isNoOnlineOrder"
>
<view class="no-data-bg"></view>
<view class="no-data-tips">暂无交易记录!</view>
</view>
</view>
<view class="order-info-content" v-if="currentTab2 == 2">
<favorite-loading
class="order-loading"
v-show="showOrderLoading"
:color="'#FE411B'"
text=""
animation="spinner15"
></favorite-loading>
<scroll-view
class="uni-swiper-return-list"
scroll-y
:scroll-top="0"
enhanced
:show-scrollbar="false"
@scrolltolower="scrollSalesReturnTolower"
v-if="salesReturnOrderList.length > 0"
>
<view
:class="[
'order-info-block',
{ 'order-info-oepn': item.showRefundOrderInfo },
{ 'order-refund': currentTab2 == 2 },
{
'order-refund-open': currentTab2 == 2 && item.showRefundOrderInfo,
},
]"
v-for="(item, index) of salesReturnOrderList"
:key="index"
>
<view class="order-info-hander">
<view class="order-num-block">
<view class="order-serial-num">
#
<text
style="
font-size: 46rpx;
padding-left: 4rpx;
font-weight: bold;
"
>
{{ item.orderNum }}
</text>
</view>
<view class="order-num">退货单号:{{ item.return_id }}</view>
</view>
<view class="rider-info" v-if="item.order_state_id">
<view class="delivery-time"></view>
<view class="delivery-status">
{{ sfFormatStatus(item.order_state_id) }}
</view>
</view>
<!-- <view class="order-msg-tips">
取消原因:订单符合未发货秒退规则,平台已优先退款
</view> -->
</view>
<!-- <view class="steps-content" v-show="item.showRefundOrderInfo">
<view class="steps-title">
退款
<u-icon
style="display: inline-block; margin: 0 8rpx"
@click="handlePopup"
name="question-circle"
size="12"
color="aaaaaa"
></u-icon>
</view>
<u-steps :current="0" direction="column" :dot="true">
<u-steps-item
class="steps-item-1"
title="系统自动退款"
desc="订单符合未发货秒退规则,平台已优先退款"
></u-steps-item>
<u-steps-item
title="顾客申请全部退款"
desc="理由:商家联系我说没货了"
></u-steps-item>
</u-steps>
</view> -->
<view
class=""
v-if="
item.showRefundOrderInfo &&
item.detailsInfo &&
Object.keys(item.detailsInfo).length > 0
"
>
<view class="user-info-block">
<view class="user-info">
{{ item.detailsInfo.da_name }}先生 手机尾号{{
item.detailsInfo.da_mobile.slice(-4)
}}
<u-icon
@click="makePhone(item.detailsInfo.da_mobile)"
name="phone-fill"
class="icon-phone-fill"
size="40"
color="#FE411B"
></u-icon>
</view>
<view class="user-address">
收货地址:{{ item.detailsInfo.da_address }}
</view>
</view>
<view class="order-remark">
<text style="font-weight: bold">退货理由:</text>
<text>{{ item.return_buyer_message }}</text>
</view>
<view
class="sales-return-img-title"
v-if="item.detailsInfo.items[0].return_item_image.length > 0"
>
退货凭据
</view>
<view
class="sales-return-img-list"
v-if="item.detailsInfo.items[0].return_item_image.length > 0"
>
<u--image
v-for="(imgItem, imgIndex) of item.detailsInfo.items[0]
.return_item_image"
:key="imgIndex"
:showLoading="true"
:src="imgItem"
width="80px"
height="80px"
@click="
handlerShowImg(item.detailsInfo.items[0].return_item_image)
"
></u--image>
</view>
<view class="commodity-info-block">
<view class="commodity-num">
<text style="font-size: 36rpx">
{{ item.detailsInfo.items[0].return_item_num }}
</text>
<text>件商品</text>
</view>
<view
class="commodity-info"
v-for="(group, index2) of item.detailsInfo.items"
:key="index2"
>
<image
class="commodity-info-img"
:src="group.order_item_image"
></image>
<view class="commodity-content">
<view class="commodity-name">{{ group.product_name }}</view>
<!-- <view class="commodity-barcode">
条码
<text style="padding-left: 8rpx">{{ item.barcode }}</text>
</view> -->
<!-- <view class="commodity-specification">
规格
<text style="padding-left: 8rpx">
{{ item.specification }}
</text>
</view> -->
</view>
<view class="commodity-num">
X
<text style="padding-left: 8rpx">
{{ group.return_item_num }}
</text>
</view>
<view class="commodity-price">
¥{{ group.return_item_subtotal }}
</view>
</view>
</view>
<!-- <view class="baling-charges-block">
<view class="baling-charges-name">打包费</view>
<view class="baling charges-num">¥0.5</view>
</view> -->
<view class="cost-info-block">
<!-- <view class="cost-info-item cost-info-subtotal">
<view class="cost-info-title">小计</view>
<view class="cost-info-num">¥30.50</view>
</view>
<view class="cost-info-item cost-info-subtotal">
<view
class="cost-info-title"
style="color: #333333; font-weight: 700"
>
商家活动支付
<text>
<u-icon
style="display: inline-block; margin-left: 8rpx"
name="question-circle"
size="12"
color="aaaaaa"
></u-icon>
</text>
</view>
<view class="cost-info-num">¥30.50</view>
</view> -->
<!-- <view class="cost-info-item cost-info-subtotal">
<view
class="cost-info-title"
style="color: #333333; font-weight: 700"
>
平台服务费
<text>
<u-icon
style="display: inline-block; margin-left: 8rpx"
name="question-circle"
size="12"
color="#aaaaaa"
></u-icon>
</text>
</view>
<view class="cost-info-num">¥30.50</view>
</view> -->
<view class="cost-info-income">
<view class="predict-income">
实际退款总额
<text
style="
margin: 0 10rpx;
font-size: 40rpx;
color: #333333;
font-weight: 700;
"
>
{{ item.return_refund_amount }}
</text>
</view>
<!-- <view class="customer-actual-payment">
顾客实际支付 ¥30.50
</view> -->
</view>
</view>
</view>
<view class="order-btn-block">
<view class="btn-list" v-if="item.return_state_id == 3105">
<u-button
class="btn-item"
@click="handelOpenReturnOrderPopup(item, 'noPass')"
>
拒绝退款
</u-button>
<u-button
class="btn-item"
@click="handelOpenReturnOrderPopup(item, 'pass')"
>
同意退款
</u-button>
</view>
<view class="btn-list retrun-state-name" v-else>
{{ item.return_state_name }}
</view>
<view
class="arrow-item arrow-item-2"
@click="showRefundOrderInfo(item, index)"
>
<view class="time">{{ item.return_add_time }}</view>
<view>
{{ item.showRefundOrderInfo ? "收起订单" : "展开订单" }}
<u-icon
style="display: inline-block; margin-left: 6rpx"
:name="item.showRefundOrderInfo ? 'arrow-up' : 'arrow-down'"
size="12"
color="#cccccc"
></u-icon>
</view>
</view>
</view>
</view>
<view
class="m-loading-box"
v-if="salesReturnOrderList.length > 0 && !isNoSalesReturnOrderData"
>
<block v-if="loadingDownSalesReturnData">
<view class="u-loadmore">
<view class="u-loading"></view>
<text class="u-loadmore-tips">正在加载...</text>
</view>
</block>
<block v-else>
<view class="u-loadmore u-loadmore-line">
<text class="u-loadmore-tips">没有更多数据啦!</text>
</view>
</block>
</view>
</scroll-view>
<view
class="no-data"
v-if="salesReturnOrderList.length <= 0 && isNoSalesReturnOrderData"
>
<view class="no-data-bg"></view>
<view class="no-data-tips">暂无交易记录!</view>
</view>
</view>
<tabbar tabbarName="order"></tabbar>
<tui-gallery
:urls="showImgList"
:show="showImg"
@hide="hideImg"
></tui-gallery>
<u-popup
class="return-order-popup"
:show="showReturnOrderPopup"
mode="center"
round="12"
@close="handerCloseReturnOrderPopup"
>
<view class="return-order-popup-content">
<view class="title">
{{ returnOrderType == "pass" ? "退货确认" : "拒绝退款" }}
</view>
<view class="radio-content" v-if="returnOrderType == 'pass'">
<view class="radio-type-name">退货类型:</view>
<view class="radio-list">
<tui-radio-group class="radio-group" @change="handelRaddio">
<view v-for="(item, index) in radioItems" :key="index">
<tui-radio
:checked="item.checked"
:value="item.value"
color="#07c160"
borderColor="#999"
></tui-radio>
<text class="radio-name">{{ item.name }}</text>
</view>
</tui-radio-group>
</view>
</view>
<view class="popup-textarea">
<u--textarea
class="textarea"
v-model="retrunOrderMsg"
placeholder="请输入商家备注"
:border="'surround'"
count
:maxlength="40"
:height="100"
></u--textarea>
</view>
<view class="popup-btn-list">
<u-button
class="btn-item"
:hairline="true"
:plain="true"
shape="circle"
@click="showReturnOrderPopup = false"
>
取消
</u-button>
<u-button
v-if="dashboardInfo.store_info.store_biz_state == 1"
class="btn-item btn-item-2"
:hairline="true"
:plain="true"
shape="circle"
@click="getInitiativeOrderRefund()"
>
确认
</u-button>
</view>
</view>
</u-popup>
<u-popup
class="affirm-popup"
zIndex="10077"
:show="showCancelOrderPopup"
mode="center"
@close="showCancelOrderPopup = false"
>
<view class="affirm-popup-content">
<view class="affirm-popup-title">取消订单</view>
<view class="affirm-popup-tips">
取消订单后,金额将原路退回给用户,确定取消?
</view>
<view class="affirm-popup-form">
<u--form
labelPosition="left"
:model="form"
ref="uForm"
label-width="100"
:rules="rules"
>
<u-form-item
label="退款原因"
prop="reason"
class="form-item"
required
>
<u--textarea
class="u-textarea"
v-model="form.reason"
count
autoHeight
maxlength="100"
placeholder="请输入取消订单原因"
></u--textarea>
</u-form-item>
</u--form>
</view>
<view class="popup-btn-list">
<u-button
class="btn-item"
:hairline="true"
:plain="true"
shape="circle"
@click="showCancelOrderPopup = false"
>
取消
</u-button>
<u-button
class="btn-item btn-item-2"
:hairline="true"
:plain="true"
shape="circle"
@click="getInitiativeOrderRefund"
>
确定
</u-button>
</view>
</view>
</u-popup>
<u-popup
class="part-order-refund-popup"
zIndex="10080"
:show="showPartOrderRefundPopup"
mode="bottom"
closeable
@close="showPartOrderRefundPopup = false"
>
<view class="part-order-refund-popup-content">
<view class="part-order-refund-popup-title">部分退款</view>
<scroll-view
scroll-y
class="specification-type-search-scroll"
:show-scrollbar="false"
:style="{
maxHeight: currOrderItem.order_items.length >= 5 ? '500px' : 'none',
overflowY:
currOrderItem.order_items.length >= 5 ? 'auto' : 'visible',
}"
>
<view class="affirm-popup-form">
<u--form
labelPosition="left"
:model="form"
ref="uForm"
label-width="100"
:rules="rules"
>
<u-form-item
label="退款原因"
prop="reason"
class="form-item"
required
>
<u--textarea
class="u-textarea"
v-model="form.reason"
count
autoHeight
maxlength="100"
placeholder="请输入取消订单原因"
></u--textarea>
</u-form-item>
</u--form>
</view>
<view class="radio-list" v-if="currOrderItem.order_items.length > 0">
<u-checkbox-group
v-model="commodityCheckBoxList"
placement="column"
>
<view
class="commodity-info-item"
v-for="(item, index) of currOrderItem.order_items"
:key="index"
>
<view class="commodity-info-box">
<image
class="commodity-info-img"
:src="item.order_item_image"
></image>
<view class="commodity-content">
<view class="commodity-name">
{{ item.item_name || 0 }}
</view>
<view style="padding-left: 8rpx">
X{{ item.order_item_quantity || 0 }}
</view>
<view class="commodity-price">
¥{{
item.order_item_quantity * item.item_unit_price || 0
}}
</view>
</view>
</view>
<u-number-box
:min="1"
:max="item.order_item_quantity_2"
v-model="item.order_item_quantity"
></u-number-box>
<u-checkbox
:customStyle="{ marginBottom: '8px' }"
:key="index"
:name="item.item_id"
></u-checkbox>
</view>
</u-checkbox-group>
</view>
</scroll-view>
<view class="popup-btn-list">
<u-button
class="btn-item"
:hairline="true"
:plain="true"
shape="circle"
@click="showPartOrderRefundPopup = false"
>
取消
</u-button>
<u-button
class="btn-item btn-item-2"
:hairline="true"
:plain="true"
shape="circle"
@click="getInitiativeOrderRefund"
>
确认
</u-button>
</view>
</view>
</u-popup>
<u-popup
class="affirm-popup"
zIndex="10077"
:show="showOrderPickingPopup"
mode="center"
@close="showOrderPickingPopup = false"
>
<view class="affirm-popup-content">
<view class="affirm-popup-title">取消订单</view>
<view class="affirm-popup-tips">
确定将取货号“ {{ currOrderItem.order_pickup_num }} ”提前拣货完成?
</view>
<view class="popup-btn-list">
<u-button
class="btn-item"
:hairline="true"
:plain="true"
shape="circle"
@click="showOrderPickingPopup = false"
>
取消
</u-button>
<u-button
class="btn-item btn-item-2"
:hairline="true"
:plain="true"
shape="circle"
@click="getOrderPicking"
>
确定
</u-button>
</view>
</view>
</u-popup>
<u-toast ref="uToast"></u-toast>
</view>
</template>
<script>
import statusBar from "../../components/status-bar.vue";
import tuiTabs from "../../components/tui-tabs.vue";
import {
GetOrderList,
GetSalesReturnOrderList,
GetSalesReturnOrderDetails,
GetSalesReturnOrderNoPass,
GetSalesReturnOrderPass,
GetInitiativeOrderRefund,
GetOrderPicking,
} from "../../api/order";
import { mapState } from "vuex";
import { GetAuditInfo } from "../../api/audit";
import { GetAccountDashboard } from "../../api/user";
import favoriteLoading from "@/components/favorite-loading/favorite-loading.vue";
import tuiDropdownList from "@/components/tui-dropdown-list/tui-dropdown-list.vue";
import tabbar from "@/components/tabbar/tabbar.vue";
import tuiGallery from "@/components/tui-gallery/tui-gallery.vue";
import tuiRadio from "@/components/tui-radio/tui-radio.vue";
import tuiRadioGroup from "@/components/tui-radio-group/tui-radio-group.vue";
import tuiSelect from "@/components/tui-select/tui-select.vue";
export default {
components: {
tuiTabs,
statusBar,
favoriteLoading,
tuiDropdownList,
tabbar,
tuiGallery,
tuiRadio,
tuiRadioGroup,
tuiSelect,
},
data() {
return {
showDropdown: false,
currentTab: 0,
currentTab2: 0,
keyword: "",
pageNum: 1,
pageSize: 10,
width: uni.upx2px(200),
tabs: [
{
name: "同城订单",
num: 1,
},
// {
// name: "预订单",
// },
// {
// name: "物流订单",
// },
// {
// name: "全部订单",
// num: 0,
// },
],
tabs2: [
{
name: "进行中",
num: 0,
},
{
name: "异常配送",
num: 0,
},
{
name: "退款",
num: 0,
},
],
commodityArr: [
{
imrUrl: "../../static/logo.jpg",
name: "猪肉",
barcode: "11131312123",
specification: "500g*1袋",
num: "3",
price: 300,
},
{
imrUrl: "../../static/logo.jpg",
name: "猪肉",
barcode: "11131312123",
specification: "500g*1袋",
num: "3",
price: 300,
},
{
imrUrl: "../../static/logo.jpg",
name: "猪肉",
barcode: "11131312123",
specification: "500g*1袋",
num: "3",
price: 300,
},
],
orderInfo: {
order_count: {
same_city_order: {
progress_count: "",
overtime_count: "",
refund_count: "",
},
},
order_page_list: {
records: [],
},
},
shopNmae: "",
logoUrl: "@/static/logo.jpg",
sfStatus: [
{
id: 1,
label: "订单创建",
},
{
id: 2,
label: "订单取消",
},
{
id: 10,
label: "配送员接单",
},
{
id: 12,
label: "配送员到店",
},
{
id: 15,
label: "配送中(已取货)",
},
{
id: 17,
label: "配送员妥投完单",
},
{
id: 22,
label: "配送员撤单",
},
{
id: 91,
label: "骑士上报异常",
},
{
id: 31,
label: "取消中",
},
],
deliveryType: [
{
key: 16,
value: "同城",
},
{
key: 10,
value: "普通快递",
},
{
key: 5,
value: "自提",
},
],
time: 0,
params: {
storeId: "",
keyword: "",
pageNum: "",
pageSize: "",
return_state_id: null,
},
dashboardInfo: {
store_info: {
store_id: "",
},
},
salesReturnBtnSearchList: [
{
value: null,
label: "全部",
width: "120rpx",
},
{
value: 3125,
label: "完成",
width: "120rpx",
},
{
value: 3130,
label: "拒绝",
width: "120rpx",
},
{
value: 3110,
label: "收货确认",
width: "170rpx",
},
{
value: 3105,
label: "待审核",
width: "140rpx",
},
{
value: 3115,
label: "退款确认",
width: "170rpx",
},
{
value: 3120,
label: "收款确认",
width: "170rpx",
},
],
salesReturnBtnSearchAcitve: 3105,
salesReturnOrderList: [],
showImgList: [],
showImg: false,
showOrderLoading: false, //
isNoOnlineOrder: false, // 没有订单的显示
loadingDownOnlinData: false, // 在线订单下拉加载
isDownNoOrderData: false, // 下拉加载时没有数据的表现
isNoSalesReturnOrderData: false, // 没有退货订单
loadingDownSalesReturnData: false, // 下拉加载退货订单
isDownNoSalesReturnData: false, // 下拉加载时没有退货数据
showReturnOrderPopup: false,
returnOrderType: "",
radioOrderType: "",
radioItems: [
{
name: "需要退货",
value: "1",
checked: true,
},
{
name: "不用退货",
value: "0",
checked: false,
},
],
retrunOrderMsg: "",
currReturnId: "",
currOrderItem: {
order_items: [],
},
isCancelOrder: false,
showCancelOrderPopup: false,
showPartOrderRefundPopup: false,
form: {
reason: "",
},
rules: {
reason: [
{
required: true,
message: "请输入取消订单原因",
// 可以单个或者同时写两个触发验证方式
trigger: ["change", "blur"],
},
],
},
commodityCheckBoxList: [],
refreshInterval: null, // 全局定时器
showOrderPickingPopup: false,
};
},
computed: {
...mapState("user", ["userInfo"]),
...mapState("order", ["pushOrderInfo"]),
},
watch: {
pushOrderInfo: {
handler(newValue, oldValue) {
if (newValue) {
console.log("order watch", newValue);
this.orderInfo.order_page_list.records.unshift(newValue);
this.orderInfo.order_page_list.records =
this.orderInfo.order_page_list.records.map((item, index) => ({
...item, // 保留原有属性
orderNum: index + 1, // 重新分配 orderNum (1, 2, 3, ...)
}));
console.log(this.orderInfo.order_page_list.records);
}
},
},
},
onLoad() {},
onShow() {
this.getOrderList();
},
onPullDownRefresh() {
this.pageNum = 1;
this.pageSize = 10;
this.keyword = "";
this.getOrderList();
},
mounted() {
// 每1秒刷新一次数据触发界面更新
this.refreshInterval = setInterval(() => {
this.$forceUpdate(); // 强制更新视图
}, 1000);
},
beforeDestroy() {
// 组件销毁时清除定时器
if (this.refreshInterval) {
clearInterval(this.refreshInterval);
}
},
// onReachBottom() {
// clearTimeout(this.time);
// this.loadingDownOnlinData = true;
// this.time = setTimeout(() => {
// this.pageNum = this.pageNum + 1;
// this.getOrderList();
// }, 500);
// },
methods: {
async getOrderList() {
let accountDashboard = uni.getStorageSync("accountDashboard");
let auditInfo = uni.getStorageSync("auditInfo");
if (accountDashboard) {
this.shopNmae = accountDashboard.store_info.store_name;
this.logoUrl = accountDashboard.store_info.store_logo;
this.dashboardInfo = accountDashboard;
} else {
await this.getAccountDashboard();
}
if (!auditInfo) {
await this.getAuditInfo();
}
if (this.loadingDownOnlinData) {
this.showOrderLoading = false;
} else {
this.showOrderLoading = true;
}
this.params = {
storeId: this.dashboardInfo.store_info.store_id,
keyword: this.keyword,
pageNum: this.pageNum,
pageSize: this.pageSize,
delivery: this.currentTab + 1,
status: this.currentTab2 + 1,
};
let res = await GetOrderList(this.params);
if (res && res.status == 200) {
// 下拉加载时
if (this.loadingDownOnlinData) {
if (res.data.order_page_list.records.length <= 0) {
this.loadingDownOnlinData = false;
this.isDownNoOrderData = true;
return;
} else {
// this.orderInfo = { ...this.orderInfo, ...res.data };
this.orderInfo.order_page_list.records = [
...this.orderInfo.order_page_list.records,
...res.data.order_page_list.records,
];
}
} else {
this.orderInfo = res.data;
}
if (this.orderInfo.order_count) {
this.tabs[0].num =
this.orderInfo.order_count.same_city_order.progress_count +
this.orderInfo.order_count.same_city_order.overtime_count +
this.orderInfo.order_count.same_city_order.refund_count; // 同城订单总数
// this.tabs[2].num = this.orderInfo.order_count.logistics_order_count; // 物流订单总数
// this.tabs[3].num = this.orderInfo.order_count.all_order_count; //所有订单总数
this.tabs2[0].num =
this.orderInfo.order_count.same_city_order.progress_count; // 同城进行中订单数量
this.tabs2[1].num =
this.orderInfo.order_count.same_city_order.overtime_count; // 同城超时异常订单数量
this.tabs2[2].num =
this.orderInfo.order_count.same_city_order.refund_count; // 同城退款订单数量
}
if (res.data.order_page_list.records.length <= 0) {
this.showOrderLoading = false;
this.isNoOnlineOrder = true;
return;
}
this.orderInfo.order_page_list.records =
this.orderInfo.order_page_list.records.map((item, index) => {
if (item) {
item.orderNum = index + 1;
item.showRefundOrderInfo = false;
}
return item;
});
}
this.showOrderLoading = false;
this.loadingDownOnlinData = false;
// uni.stopPullDownRefresh();
},
getRemainingTime(arrivalTime) {
if (!arrivalTime) return "时间未设定";
const now = Date.now();
const remainingMs = arrivalTime - now;
if (remainingMs <= 0) return "已超时";
// 计算分钟和秒
const minutes = Math.floor(remainingMs / (1000 * 60));
const seconds = Math.floor((remainingMs % (1000 * 60)) / 1000);
// 格式化为 MM:SS补零
return `${minutes}:${seconds.toString().padStart(2, "0")}`;
},
handelSalesReturnSearch(item) {
if (item.value == this.salesReturnBtnSearchAcitve) return;
this.pageNum = 1;
this.pageSize = 10;
this.salesReturnBtnSearchAcitve = item.value;
this.loadingDownSalesReturnData = false;
this.isNoSalesReturnOrderData = false;
this.isDownNoSalesReturnData = false;
this.getSalesReturnOrderList(item.value);
},
async getSalesReturnOrderList(returnStateId = 3105) {
if (this.loadingDownSalesReturnData) {
this.showOrderLoading = false;
} else {
this.showOrderLoading = true;
}
let params = {
pageNum: this.pageNum,
pageSize: this.pageSize,
return_state_id: returnStateId,
};
let res = await GetSalesReturnOrderList(params);
if (res && res.status == 200) {
// 下拉加载
if (this.loadingDownSalesReturnData) {
if (res.data.items.length <= 0) {
this.loadingDownSalesReturnData = false;
this.isDownNoSalesReturnData = true;
return;
} else {
// this.orderInfo = { ...this.orderInfo, ...res.data };
this.salesReturnOrderList = [
...this.salesReturnOrderList,
...res.data.items,
];
}
} else {
this.salesReturnOrderList = res.data.items;
}
if (res.data.items <= 0) {
this.showOrderLoading = false;
this.isNoSalesReturnOrderData = true;
return;
}
this.salesReturnOrderList = this.salesReturnOrderList.map(
(item, index) => {
if (item) {
item.orderNum = index + 1;
item.showRefundOrderInfo = false;
}
return item;
}
);
console.log(this.salesReturnOrderList);
}
this.showOrderLoading = false;
this.loadingDownSalesReturnData = false;
},
async getSalesReturnOrderDetails(item, index) {
let params = {
return_id: item.return_id,
};
let res = await GetSalesReturnOrderDetails(params);
if (res && res.status == 200) {
let detailsInfo = res.data;
this.$set(this.salesReturnOrderList, index, {
...this.salesReturnOrderList[index],
detailsInfo: detailsInfo,
});
console.log(this.salesReturnOrderList);
}
},
showRefundOrderInfo(item, index) {
if (this.currentTab2 == 2) {
if (!item.showRefundOrderInfo) {
this.getSalesReturnOrderDetails(item, index);
}
this.$set(this.salesReturnOrderList, index, {
...item,
showRefundOrderInfo: !item.showRefundOrderInfo,
});
}
if (this.currentTab2 != 2) {
this.$set(this.orderInfo.order_page_list.records, index, {
...item,
showRefundOrderInfo: !item.showRefundOrderInfo,
});
}
},
async getAuditInfo() {
var params = {};
params.mobile = this.userInfo.user_mobile.startsWith("+86")
? this.userInfo.user_mobile.replace("+86", "")
: this.userInfo.user_mobile;
let res = await GetAuditInfo(params);
if (res && res.status == 200) {
uni.setStorageSync("auditInfo", res.data);
if (res.data.contract_download_url) {
uni.setStorageSync(
"contractDownloadUrl",
res.data.contract_download_url
);
}
}
},
async getAccountDashboard() {
let res = await GetAccountDashboard();
if (res && res.status == 200) {
uni.setStorageSync("accountDashboard", res.data);
this.dashboardInfo = res.data;
this.shopNmae = res.data.store_info.store_name;
this.logoUrl = res.data.store_info.store_logo;
}
},
handerCloseReturnOrderPopup() {
this.showReturnOrderPopup = false;
},
makePhone(phone) {
// #ifdef H5
uni.showToast({
title: "H5环境不支持",
icon: "none",
});
// #endif
// #ifdef APP-PLUS
uni.makePhoneCall({
phoneNumber: phone,
success: function () {
console.log("拨打电话成功");
},
fail: function () {
console.log("拨打电话失败");
},
});
// #endif
},
sfFormatStatus(id) {
let label = "";
this.sfStatus.forEach((item) => {
if (item.id == id) {
label = item.label;
}
});
return label;
},
handlerShowImg(imgList) {
this.showImg = true;
const _imgList = imgList.map((item) => {
return {
src: item,
desc: "",
};
});
this.showImgList = _imgList;
console.log(this.showImgList);
},
hideImg() {
this.showImg = false;
},
formatTime(time) {
let date = new Date(time);
let hours = String(date.getHours()).padStart(2, "0");
let minutes = String(date.getMinutes()).padStart(2, "0");
return hours + ":" + minutes;
},
handleTab(e) {
this.currentTab = e.index;
this.pageNum = 1;
this.pageSize = 10;
this.keyword = "";
this.isNoOnlineOrder = false;
this.getOrderList();
},
handleTab2(e) {
this.currentTab2 = e.index;
this.pageNum = 1;
this.pageSize = 10;
this.keyword = "";
this.isNoOnlineOrder = false;
this.loadingDownOnlinData = false;
this.isDownNoOrderData = false;
this.isNoSalesReturnOrderData = false;
this.loadingDownSalesReturnData = false;
this.isDownNoSalesReturnData = false;
if (this.currentTab2 == 2) {
this.getSalesReturnOrderList();
} else {
this.getOrderList();
}
},
searchOrder() {
this.pageNum = 1;
this.pageSize = 10;
setTimeout(() => {
this.getOrderList();
}, 600);
},
scrolltolower() {
clearTimeout(this.time);
if (this.isDownNoOrderData) return;
this.loadingDownOnlinData = true;
this.time = setTimeout(() => {
this.pageNum = this.pageNum + 1;
this.getOrderList();
}, 500);
},
scrollSalesReturnTolower() {
clearTimeout(this.time);
if (this.isDownNoSalesReturnData) return;
this.loadingDownSalesReturnData = true;
this.time = setTimeout(() => {
this.pageNum = this.pageNum + 1;
this.getSalesReturnOrderList();
});
},
handleShowDropDown() {
this.showDropdown = !this.showDropdown;
},
handelOpenReturnOrderPopup(item, type) {
this.showReturnOrderPopup = true;
this.returnOrderType = type;
this.currReturnId = item.return_id;
},
handelRaddio(e) {
this.radioOrderType = e.detail.value;
},
async handerRetrunOrder() {
if (this.returnOrderType == "noPass") {
let params = {
return_id: this.currReturnId,
return_store_message: this.retrunOrderMsg,
};
let res = await GetSalesReturnOrderNoPass(params);
if (res && res.status == 200) {
this.currReturnId = "";
this.retrunOrderMsg = "";
this.getSalesReturnOrderList();
}
} else {
let params = {
return_flag: this.radioOrderType,
return_id: this.currReturnId,
return_store_message: this.retrunOrderMsg,
};
if (this.radioOrderType == 1) {
params.receiving_address = 2;
}
let res = await GetSalesReturnOrderPass(params);
if (res && res.status == 200) {
this.currReturnId = "";
this.retrunOrderMsg = "";
this.getSalesReturnOrderList();
}
}
},
handerShowCancelOrder(item) {
this.currOrderItem = JSON.parse(JSON.stringify(item));
this.showCancelOrderPopup = true;
this.isCancelOrder = true;
},
handerShowPartOrderRefund(item) {
let _item = JSON.parse(JSON.stringify(item));
_item.order_items.forEach((group) => {
group.order_item_quantity_2 = group.order_item_quantity;
});
this.currOrderItem = _item;
this.showPartOrderRefundPopup = true;
this.isCancelOrder = false;
},
getInitiativeOrderRefund() {
var params = {
order_id: this.currOrderItem.order_id,
reason: this.form.reason,
};
if (!this.isCancelOrder) {
if (this.commodityCheckBoxList.length <= 0) {
this.$refs.uToast.show({
message: "请先选择你要退的商品",
type: "error",
duration: 1000,
zIndex: 12000,
position: "top",
});
return;
}
const matchedItems = this.currOrderItem.order_items.filter((item) =>
this.commodityCheckBoxList.includes(item.item_id)
);
params.order_return_vo = {
order_id: this.currOrderItem.order_id,
return_items: matchedItems.map((item) => {
return {
order_item_id: item.item_id,
return_item_num: item.order_item_quantity,
return_refund_amount:
item.order_item_quantity * item.item_unit_price,
};
}),
};
}
this.$refs.uForm.validate().then(async (valid) => {
let res = await GetInitiativeOrderRefund(params);
if (res && res.status == 200) {
this.showCancelOrderPopup = false;
this.showPartOrderRefundPopup = false;
if (!this.isCancelOrder) {
uni.$u.toast("部分订单退款成功");
} else {
uni.$u.toast("取消订单成功");
}
this.form.reason = "";
this.pageNum = 1;
this.commodityCheckBoxList = [];
this.getOrderList();
}
this.showCancelOrderPopup = false;
this.showPartOrderRefundPopup = false;
});
},
handerShowOrderPickingPopup(item) {
this.currOrderItem = item;
this.showOrderPickingPopup = true;
},
async getOrderPicking(item) {
let params = {
order_id: this.currOrderItem.order_id,
store_id: this.currOrderItem.store_info.store_id,
};
let res = await GetOrderPicking(params);
if (res && res.status == 200) {
this.showOrderPickingPopup = false;
uni.$u.toast("操作成功");
}
this.showOrderPickingPopup = false;
},
},
};
</script>
<style lang="scss">
@import "@/styles/variables.scss";
.index-container {
// overflow: hidden;
background: #eeeff3;
min-height: 100vh;
.shop-info {
display: flex;
align-items: center;
padding: 40rpx;
padding-top: 20rpx;
background: #fff;
.shop-logo-img {
width: 90rpx;
height: 90rpx;
background-image: url("../../static/logo.jpg");
background-size: 100% 100%;
border-radius: 50%;
}
.shop-name {
margin-left: 20rpx;
font-weight: bold;
background: #fff;
}
}
.order-loading {
margin: 70% auto;
display: flex;
}
.tab-content {
padding-bottom: 20rpx;
background: #fff;
// ::v-deep .tui-tabs-title {
// font-size: 36rpx !important;
// }
::v-deep .tui-tabs__badge {
line-height: 32rpx;
}
}
.tab2-content {
background: #fff;
::v-deep .tui-tabs-slider {
background: #ffecf2 !important;
border: 2rpx solid #fe411b;
bottom: 48% !important;
}
::v-deep .tui-tabs-item {
line-height: 60rpx;
.tui-tabs-title {
color: #333 !important;
}
&.tui__tab_current {
.tui-tabs-title {
color: #fe411b !important;
}
}
}
}
.sales-return-img-title {
margin: 20rpx;
font-weight: bold;
}
.sales-return-img-list {
display: flex;
flex-wrap: wrap;
margin: 40rpx 20rpx;
}
.search-contetn {
display: flex;
align-items: center;
padding: 30rpx 40rpx 40rpx;
.btn-content {
margin-left: 20rpx;
padding: 16rpx 20rpx;
width: 200rpx;
border-radius: 60rpx;
background: #fff;
color: #333333;
font-size: 14px;
text-align: center;
}
}
.sales-retrun-btn-list {
margin: 30rpx 10rpx 0;
height: 160rpx;
.sales-retrun-btn-item {
float: left !important;
height: 60rpx;
margin-left: 20rpx;
margin-bottom: 20rpx;
border: none;
font-size: 24rpx;
::after {
border: none;
}
}
.active {
// background: $base-color;
color: #fe411b;
}
}
.order-info-content {
border-radius: 8rpx;
.uni-swiper-list {
height: calc(100vh - 320px);
}
.uni-swiper-return-list {
height: calc(100vh - 350px);
}
.order-msg-tips {
padding: 12rpx;
height: 72rpx;
line-height: 72rpx;
font-size: 26rpx;
background: #efdfc7;
color: #d9001b;
}
.steps-content {
padding: 20rpx;
border-bottom: 1px solid #d7d7d7;
.steps-title {
font-size: 20px;
font-weight: bold;
color: #333333;
}
.steps-item-1 {
::v-deep.u-text__value--tips {
margin: 40rpx 0;
}
}
}
.order-info-block {
margin: 28rpx;
border-radius: 24rpx;
overflow: hidden;
background: #fff;
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1);
transition: height 0.5s ease;
// // #ifdef H5
// height: 380rpx;
// // #endif
// // #ifdef APP-PLUS
// height: 360rpx;
// // #endif
.order-info-hander {
margin: 24rpx;
font-size: 32rpx;
border-bottom: 1px solid #f7f7f7;
.order-num-block {
display: flex;
justify-content: space-between;
align-items: center;
.order-serial-num {
color: #333333;
}
}
.rider-info {
display: flex;
justify-content: space-between;
align-items: center;
padding: 24rpx 0;
color: #333333;
.delivery-time {
font-size: 26rpx;
}
}
.order-num {
font-size: 24rpx;
}
.delivery-status {
font-size: 32rpx;
font-weight: bold;
color: $base-color;
}
}
.user-info-block {
padding: 32rpx 0;
margin: 0 24rpx;
border-bottom: 1px solid #f7f7f7;
.user-info {
display: flex;
align-items: center;
font-size: 26rpx;
margin-bottom: 20rpx;
}
.user-address {
font-size: 24rpx;
margin-bottom: 20rpx;
}
.distance {
font-size: 24rpx;
}
}
.picking-info {
display: flex;
justify-content: space-between;
align-items: center;
padding: 32rpx 0;
margin: 0 24rpx;
border-bottom: 1px solid #f7f7f7;
.picking-status {
font-size: 26rpx;
color: #7f7f7f;
font-weight: 500;
flex: 1;
}
.picking-btn {
width: 34%;
height: 60rpx;
font-size: 24rpx;
border-radius: 32rpx;
background: $base-color;
color: #fff;
border: none;
}
}
.delivery-status-info {
display: flex;
justify-content: space-between;
align-items: center;
padding: 32rpx 0;
margin: 0 24rpx;
border-bottom: 1px solid #f7f7f7;
color: #333333;
.delivery-status {
font-size: 40rpx;
font-weight: 700;
}
.delivery-num {
font-size: 26rpx;
}
}
.order-remark {
margin: 12rpx;
padding: 12rpx;
background: $base-color;
color: #fff;
}
.commodity-info-block {
padding: 12rpx 0;
margin: 0 24rpx;
border-bottom: 1px solid #f7f7f7;
.commodity-num {
font-size: 28rpx;
}
.commodity-info {
margin: 16rpx 8rpx;
display: flex;
// justify-content: space-between;
align-items: center;
color: #333333;
.commodity-info-img {
width: 120rpx;
height: 120rpx;
}
.commodity-content {
width: 50%;
margin-left: 16rpx;
.commodity-name {
font-size: 28rpx;
}
.commodity-barcode,
.commodity-specification {
font-size: 24rpx;
}
}
.commodity-num {
flex: 1;
}
}
}
.baling-charges-block {
display: flex;
justify-content: space-between;
padding: 24rpx 0;
margin: 0 24rpx;
font-size: 24rpx;
border-bottom: 1px solid #f7f7f7;
color: #aaaaaa;
}
.cost-info-block {
padding: 24rpx 0;
margin: 0 24rpx;
border-bottom: 1px solid #f7f7f7;
font-size: 26rpx;
.cost-info-item {
display: flex;
justify-content: space-between;
margin-bottom: 40rpx;
.cost-info-num {
margin-right: 20rpx;
}
}
.cost-info-income {
margin-top: 20rpx;
font-size: 26rpx;
text-align: right;
color: #7f7f7f;
}
}
.predict-income {
margin-bottom: 40rpx;
}
.order-btn-block {
padding: 24rpx;
.btn-list {
display: flex;
justify-content: flex-end;
.btn-item {
margin: 0;
margin-left: 24rpx;
width: 160rpx;
height: 60rpx;
font-size: 24rpx;
border-radius: 32rpx;
background: $base-color;
color: #fff;
border: none;
}
}
.arrow-item {
display: flex;
align-items: center;
justify-content: flex-end;
margin-top: 40rpx;
font-size: 26rpx;
color: #cccccc;
.time {
color: #333333;
}
}
.arrow-item-2 {
justify-content: space-between;
}
}
}
// .order-info-oepn {
// // #ifdef H5
// height: 940px;
// // #endif
// // #ifdef APP-PLUS
// height: 1460rpx;
// // #endif
// }
// .order-abnormal {
// // #ifdef H5
// height: 900px;
// // #endif
// // #ifdef APP-PLUS
// height: 1400rpx;
// // #endif
// }
// .order-refund {
// // #ifdef H5
// height: 480rpx;
// // #endif
// // #ifdef APP-PLUS
// height: 460rpx;
// // #endif
// }
// .order-refund-open {
// // #ifdef H5
// height: 1150px;
// // #endif
// // #ifdef APP-PLUS
// height: 1850rpx;
// // #endif
// }
}
.m-loading-box {
text-align: center;
margin: 40rpx;
color: #aaaa;
font-size: 28rpx;
}
.no-data {
.no-data-bg {
margin: auto;
margin-bottom: 0;
width: 480rpx;
height: 480rpx;
background-image: url("../../static/no-order-data.png");
background-size: 100%;
}
.no-data-tips {
margin: 20rpx auto 0;
color: #aaaaaa;
text-align: center;
}
}
.part-order-refund-popup {
::v-deep.u-popup__content {
border-top-left-radius: 16rpx;
border-top-right-radius: 16rpx;
}
::v-deep.u-fade-enter-to {
z-index: 10079 !important;
}
.part-order-refund-popup-content {
.part-order-refund-popup-title {
padding: 40rpx;
text-align: center;
font-weight: bold;
}
.affirm-popup-form {
padding: 20rpx 60rpx;
}
.radio-list {
.commodity-info-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 28rpx;
.commodity-info-box {
display: flex;
align-items: center;
justify-content: space-between;
.commodity-info-img {
margin-right: 20rpx;
width: 120rpx;
height: 120rpx;
}
}
}
}
}
.popup-btn-list {
display: flex;
margin: 50rpx;
.btn-item {
width: 46%;
height: 64rpx;
border-color: #909193;
&::after {
border: none;
}
}
.btn-item-2 {
background: $base-color;
color: #fff;
border: none;
}
}
}
.affirm-popup {
::v-deep.u-popup__content {
border-radius: 16rpx;
}
::v-deep.u-fade-enter-to {
z-index: 10076 !important;
}
.affirm-popup-content {
width: 600rpx;
.affirm-popup-title {
padding: 60rpx 0 20rpx;
text-align: center;
font-size: 28rpx;
font-weight: bold;
}
.affirm-popup-tips {
padding: 0 32rpx;
font-size: 28rpx;
text-align: center;
}
.u-form {
padding: 0 60rpx;
}
.popup-btn-list {
display: flex;
margin: 50rpx;
.btn-item {
width: 46%;
height: 64rpx;
border-color: #909193;
&::after {
border: none;
}
}
.btn-item-2 {
background: $base-color;
color: #fff;
border: none;
}
}
}
}
.tui-animation {
display: inline-block;
transform: rotate(0deg);
transition: all 0.2s;
}
.tui-animation-show {
transform: rotate(180deg);
}
.icon-phone-fill {
margin-left: 10%;
}
.retrun-state-name {
color: $base-color;
}
.return-order-popup {
.return-order-popup-content {
width: 600rpx;
min-height: 600rpx;
.title {
margin: 36rpx;
text-align: center;
font-weight: bold;
font-size: 36rpx;
}
.radio-content {
display: flex;
justify-content: space-between;
align-items: center;
margin: 60rpx 40rpx 40rpx;
.radio-type-name {
font-weight: 500;
}
.radio-list {
flex: 1;
.radio-group {
display: flex;
align-items: center;
justify-content: space-around;
line-height: 40rpx;
.radio-name {
margin-left: 8rpx;
}
}
}
}
.popup-textarea {
margin: 28rpx;
.textarea {
border: 1px solid #eeeff3;
}
}
.popup-btn-list {
display: flex;
margin: 50rpx;
.btn-item {
width: 46%;
height: 80rpx;
border-color: #909193;
&::after {
border: none;
}
}
.btn-item-2 {
background: $base-color;
color: #fff;
border: none;
}
}
}
}
}
</style>