merchapp/java-mall-app-shop-admin/pages/order/order.vue
2025-12-01 09:51:15 +08:00

1713 lines
42 KiB
Vue
Raw Permalink 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>
<u-search
class="search"
placeholder="请输入订单号搜索"
:showAction="false"
bgColor="#fff"
v-model="keyword"
@input="searchOrder()"
></u-search>
<u-icon
@click="openPhoneDial"
class="icon-shezhi"
custom-prefix="custom-icon-kefu custom-icon"
size="24"
color="#000"
></u-icon>
</view>
<view class="tab-content">
<tui-tabs
:tabs="tabs"
:currentTab="currentTab"
backgroundColor="#f9f9f9"
:height="88"
color="#333"
:size="36"
selectedColor="#FE411B"
sliderBgColor="#FE411B"
:sliderHeight="4"
: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="320"
:currentTab="currentTab2"
@change="handleTab2"
backgroundColor="#f9f9f9"
:height="60"
:size="28"
unlined
:sliderWidth="166"
:sliderHeight="64"
sliderRadius="4rpx"
bottom="50%"
color="#888"
selectedColor="#f9f9f9"
sliderBgColor="#FE411B"
></tui-tabs>
<view
class="screen-content"
v-show="currentTab2 == 2"
@click="showScreenPopup = true"
>
<u-icon
class="icon-shezhi"
custom-prefix="custom-icon-a-Frame3 custom-icon"
size="16"
color="#fe411b"
></u-icon>
筛选
</view>
</view>
<!-- <view class="search-contetn" v-if="currentTab2 != 2">
<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="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"
refresher-enabled
:refresher-triggered="isRefreshing"
@refresherrefresh="handleRefresh"
>
<OrderItem
v-if="
orderInfo.order_page_list.records.length > 0 && !showOrderLoading
"
v-for="(item, index) of orderInfo.order_page_list.records"
:orderItem="item"
:orderItemIndex="index"
:isErrorOrder="false"
@cancelOrder="handerCancelOrder"
@showRefundOrderInfo="handerShowRefundOrderInfo"
></OrderItem>
<view
class="no-data"
v-if="
orderInfo.order_page_list.records.length <= 0 &&
isNoOnlineOrder &&
!showOrderLoading
"
>
<view class="no-data-bg"></view>
<view class="no-data-tips">暂无交易记录!</view>
</view>
<view
class="m-loading-box"
v-if="!showOrderLoading && !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>
<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"
refresher-enabled
:refresher-triggered="isRefreshing"
@refresherrefresh="handleRefresh"
>
<OrderItem
v-show="
orderInfo.order_page_list.records.length > 0 && !showOrderLoading
"
v-for="(item, index) of orderInfo.order_page_list.records"
:orderItem="item"
:orderItemIndex="index"
:isErrorOrder="true"
@cancelOrder="handerCancelOrder"
@showRefundOrderInfo="handerShowRefundOrderInfo"
@refreshOrderList="handleRefresh"
></OrderItem>
<view
class="no-data"
v-if="
orderInfo.order_page_list.records.length <= 0 &&
isNoOnlineOrder &&
!showOrderLoading
"
>
<view class="no-data-bg"></view>
<view class="no-data-tips">暂无交易记录!</view>
</view>
<view
class="m-loading-box"
v-if="!showOrderLoading && !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>
<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"
refresher-enabled
:refresher-triggered="isRefreshing"
@refresherrefresh="handleRefresh"
>
<retrunOrderItem
v-for="(item, index) of salesReturnOrderList"
:orderItem="item"
:orderItemIndex="index"
:dashboardInfo="dashboardInfo"
:salesReturnBtnSearchAcitve="salesReturnBtnSearchAcitve"
@handerRefreshSalesReturnOrderList="handerRefreshSalesReturnOrderList"
></retrunOrderItem>
<view
class="no-data"
v-if="salesReturnOrderList.length <= 0 && isNoSalesReturnOrderData"
>
<view class="no-data-bg"></view>
<view class="no-data-tips">暂无交易记录!</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>
<u-popup
class="screen-popup"
zIndex="10080"
:show="showScreenPopup"
mode="bottom"
closeable
@close="showScreenPopup = false"
>
<view class="screen-popup-content">
<view class="screen-popup-title">筛选</view>
<view class="sales-retrun-btn-list">
<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="popup-btn-list">
<u-button
class="btn-item"
:hairline="true"
:plain="true"
shape="circle"
@click="showScreenPopup = false"
>
取消
</u-button>
<u-button
class="btn-item btn-item-2"
:hairline="true"
:plain="true"
shape="circle"
@click="handerRetrunOrderScreen"
>
确认
</u-button>
</view>
</view>
</u-popup>
<u-toast ref="uToast"></u-toast>
<tabbar tabbarName="order"></tabbar>
</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";
import OrderItem from "./components/OrderItem.vue";
import retrunOrderItem from "./components/retrunOrderItem.vue";
export default {
components: {
tuiTabs,
statusBar,
favoriteLoading,
tuiDropdownList,
tabbar,
tuiGallery,
tuiRadio,
tuiRadioGroup,
tuiSelect,
OrderItem,
retrunOrderItem,
},
data() {
return {
showDropdown: false,
currentTab: 0,
currentTab2: 0,
keyword: "",
pageNum: 1,
pageSize: 10,
width: uni.upx2px(204),
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: null,
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,
isRefreshing: false,
showScreenPopup: false,
};
},
computed: {
...mapState("user", ["userInfo"]),
...mapState("push", ["orderDetail", "orderStatus"]),
},
watch: {
orderDetail: {
handler(newValue) {
if (newValue && newValue.order_id) {
console.log("orderDetail", newValue);
// 找到数组中匹配的订单索引
const index = this.orderInfo.order_page_list.records.findIndex(
(item) => item.order_id === newValue.order_id
);
// 如果找到匹配的订单
if (index !== -1) {
// 保留原有的orderNum
const originalOrderNum =
this.orderInfo.order_page_list.records[index].orderNum;
this.$set(this.orderInfo.order_page_list.records, index, {
...this.orderInfo.order_page_list.records[index],
...newValue,
orderNum: originalOrderNum,
});
}
}
},
deep: true,
},
orderStatus: {
handler(newValue) {
if (newValue) {
this.pageNum = 1;
if (newValue == "mchRetrunOrderList") {
if (this.currentTab2 == 2) {
this.getSalesReturnOrderList(null);
console.log("触发getSalesReturnOrderList");
}
} else {
if (this.currentTab2 != 2) {
this.getOrderList(false);
console.log("触发getOrderList");
}
}
}
},
},
},
onLoad() {},
onShow() {
const currentTab2 = uni.getStorageSync("currentTab2");
console.log(currentTab2);
if (currentTab2) {
this.handleTab2(currentTab2);
uni.removeStorageSync("currentTab2");
} else {
this.getOrderList();
}
if (this.currentTab2 === 2) {
this.getSalesReturnOrderList(null);
}
},
onPullDownRefresh() {
this.pageNum = 1;
this.keyword = "";
this.getOrderList();
},
methods: {
// 在线订单
async getOrderList(isLoding = true) {
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 {
if (isLoding) {
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;
this.isRefreshing = false;
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;
item.sf_order_info = {
sf_order_id: "",
operator_name: "",
operator_phone: "",
rider_lng: "",
rider_lat: "",
order_status: "",
status_desc: "",
cancel_code: "",
cancel_reason: "",
push_time: "",
h5_url: "",
feed: [],
...item.sf_order_info,
};
}
return item;
});
}
this.showOrderLoading = false;
this.loadingDownOnlinData = false;
this.isRefreshing = false;
// uni.stopPullDownRefresh();
},
handleRefresh() {
this.isRefreshing = true;
this.pageNum = 1;
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();
}
},
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.salesReturnBtnSearchAcitve = item.value;
},
async getSalesReturnOrderList(returnStateId = 3105) {
if (this.loadingDownSalesReturnData) {
this.showOrderLoading = false;
} else {
this.showOrderLoading = true;
}
console.log(this.keyword);
let params = {
pageNum: this.pageNum,
pageSize: this.pageSize,
order_id: this.keyword,
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;
this.isRefreshing = false;
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;
this.isRefreshing = 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);
}
},
handerShowRefundOrderInfo(showRefundOrderInfo, index) {
if (this.currentTab2 == 2) {
this.$set(this.salesReturnOrderList, index, {
...this.salesReturnOrderList[index],
showRefundOrderInfo: showRefundOrderInfo,
});
} else {
this.$set(this.orderInfo.order_page_list.records, index, {
...this.orderInfo.order_page_list.records[index],
showRefundOrderInfo: 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;
},
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.keyword = "";
this.isNoOnlineOrder = false;
this.getOrderList();
},
handleTab2(e) {
if (e.index || e.index == 0) {
this.currentTab2 = e.index;
} else {
this.currentTab2 = e;
}
console.log("触发了handleTab2", e);
this.pageNum = 1;
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(null);
} else {
this.getOrderList();
}
},
searchOrder() {
this.pageNum = 1;
this.keyword = "";
setTimeout(() => {
if (this.currentTab2 == 2) {
this.getSalesReturnOrderList();
} else {
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;
},
handerCancelOrder() {
this.pageNum = 1;
this.getOrderList();
},
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;
},
handerRefreshSalesReturnOrderList() {
this.getSalesReturnOrderList();
},
handerRetrunOrderScreen() {
this.pageNum = 1;
this.loadingDownSalesReturnData = false;
this.isNoSalesReturnOrderData = false;
this.isDownNoSalesReturnData = false;
this.getSalesReturnOrderList(this.salesReturnBtnSearchAcitve);
this.showScreenPopup = false;
},
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;
},
//IM发送 之前客服的位置方法 暂时不用了
toServices() {
let item = {
user_friend_id: 36,
user_id: 10001,
friend_id: 10001,
friend_note: "",
user_friend_addtime: "2025-05-09 10:03:33",
friend_state: 2,
friend_invite: 2,
username: "系统客服",
avatar:
"https://media-mall-prod-1259811287.cos.ap-guangzhou.myqcloud.com/media/media/plantform/20250307/c4cab676e06a49b282c2cbbe481f0fa1.png",
sign: "",
level_name: "v1",
user_nickname: "系统客服",
user_avatar:
"https://media-mall-prod-1259811287.cos.ap-guangzhou.myqcloud.com/media/media/plantform/20250307/c4cab676e06a49b282c2cbbe481f0fa1.png",
user_sign: "",
user_level_name: "v1",
rid: 2,
id: 776395489,
};
uni.navigateTo({
url: `/pages/IM/IMmsgContent?item=${JSON.stringify(item)}`,
});
},
openPhoneDial(){
uni.makePhoneCall({
phoneNumber: '17777525395',
// 可选:添加拨号失败回调
fail: (err) => {
console.log('拨号失败', err);
this.$refs.uToast.show({ title: '拨号失败,请稍后重试' });
}
});
}
}
};
</script>
<style lang="scss">
@import "@/styles/variables.scss";
.index-container {
// overflow: hidden;
background: #f9f9f9;
min-height: 100vh;
.shop-info {
display: flex;
align-items: center;
padding: 28rpx 32rpx;
.shop-logo-img {
width: 64rpx;
height: 64rpx;
background-image: url("../../static/logo.jpg");
background-size: 100% 100%;
border-radius: 50%;
}
.search {
margin: 0 44rpx !important;
::v-deep.u-search__content {
height: 38px !important;
}
::v-deep.u-search__content__input {
font-size: 12px;
}
}
.shop-name {
margin-left: 20rpx;
font-weight: bold;
background: #fff;
}
}
.order-loading {
margin: 70% auto;
display: flex;
}
.tab-content {
padding: 0 20rpx;
padding-bottom: 16rpx;
border-bottom: 1px solid #eeeeee;
background: #f9f9f9;
// ::v-deep .tui-tabs-title {
// font-size: 36rpx !important;
// }
::v-deep .tui-tabs__badge {
line-height: 32rpx;
}
}
.tab2-content {
display: flex;
align-items: center;
justify-content: space-between;
margin: 30rpx 0;
::v-deep .tui-tabs-slider {
background: #ffecf2 !important;
bottom: 48% !important;
display: none;
}
::v-deep.tabs-2 {
left: -10px;
}
::v-deep .tui-tabs-item {
margin: 0 10rpx;
height: 32px !important;
line-height: 32px !important;
background: #fff;
.tui-tabs-title {
color: rgba(34, 34, 34, 1) !important;
}
&.tui__tab_current {
background: #ffecf2 !important;
.tui-tabs-title {
color: #fe411b !important;
}
}
}
.screen-content {
display: flex;
flex-flow: column;
align-items: center;
font-size: 24rpx;
text-align: center;
margin-right: 32rpx;
color: $base-color;
}
}
.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: $base-color;
&::after {
border: 1px solid $base-color;
}
}
}
.order-info-content {
margin: 28rpx 24rpx;
border-radius: 8rpx;
.uni-swiper-list {
height: calc(100vh - 500rpx);
}
.uni-swiper-return-list {
height: calc(100vh - 500rpx);
}
.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;
}
.screen-popup {
.screen-popup-content {
width: 100%;
.screen-popup-title {
margin: 36rpx;
text-align: center;
font-weight: bold;
font-size: 36rpx;
}
.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;
}
}
}
}
.no-data {
.no-data-bg {
margin: 23% 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;
}
}
}
.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;
}
}
</style>