278 lines
7.7 KiB
Vue
278 lines
7.7 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="order-list" @click="handleOrderListClick">
|
|||
|
|
<view class="order-item" v-for="(item, index) of orderList" :key="item.order_id">
|
|||
|
|
<view class="order-item-header">
|
|||
|
|
<view class="order-item-type">
|
|||
|
|
{{ item.serviceType === 1 ? '上门' : '到店' }}
|
|||
|
|
</view>
|
|||
|
|
<view class="order-item-sn overflow-text">{{ item.workOrderNo }}</view>
|
|||
|
|
<view v-if="item.refundStatus === 0" class="order-item-status">{{ item.serviceStatus | serviceStatusFilter }}</view>
|
|||
|
|
<view v-else class="order-item-status">{{ item.refundStatus === 1 ? '退款审核中' : '已退款'}}</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="order-item-contact-info mt-32" v-if="item.serviceType === 1">
|
|||
|
|
<view class="contact-info-left">
|
|||
|
|
<view class="contact-info-name overflow-text">
|
|||
|
|
{{ item.userName }}
|
|||
|
|
<text class="contact-info-phone">{{ item.userPhone }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="contact-info-address overflow-text">
|
|||
|
|
{{ item.userAddress }}
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<button class="contact-action-btn iconfont icon-ic_Phone" :data-event="EVENT.CALL"
|
|||
|
|
:data-index="index"></button>
|
|||
|
|
<button class="contact-action-btn iconfont icon-icon_Location" :data-event="EVENT.LOCATION"
|
|||
|
|
:data-index="index"></button>
|
|||
|
|
</view>
|
|||
|
|
<navigator hover-class="none"
|
|||
|
|
:url="orderType?`/pages/admin/workOrder_manage/workOrder_detail?workOrderNo=${item.workOrderNo}`:`/pages/admin/work_order/detail?workOrderNo=${item.workOrderNo}`">
|
|||
|
|
<OrderGoods :cartInfo="[item]" :isShowBtn="false">
|
|||
|
|
</OrderGoods>
|
|||
|
|
<view class="order-item-reverse-time overflow-text">
|
|||
|
|
预约日期:
|
|||
|
|
{{ item.reservationDate }}
|
|||
|
|
{{ item.reservationTimeSlot }}
|
|||
|
|
</view>
|
|||
|
|
</navigator>
|
|||
|
|
<!--工单管理操作按钮-->
|
|||
|
|
<view v-if="orderType && btnConfig(item).length" class="order-item-btn-group mt-40">
|
|||
|
|
<button class="order-item-btn" v-for="itms of btnConfig(item)" :key="itms.text"
|
|||
|
|
@click="handleBottomBarAction(itms.event,item.workOrderNo)">
|
|||
|
|
{{ itms.text }}
|
|||
|
|
</button>
|
|||
|
|
</view>
|
|||
|
|
<!--移动端商家管理操作按钮-->
|
|||
|
|
<view v-if="!orderType && adminBtnConfig(item).length" class="order-item-btn-group mt-40">
|
|||
|
|
<button class="order-item-btn" :type="itms.type" v-for="itms of adminBtnConfig(item)" :key="itms.text"
|
|||
|
|
@click="handleBottomAdminBarAction(itms.event,item.workOrderNo)" :class="itms.type==='default'?'defaultColor':''">
|
|||
|
|
{{ itms.text }}
|
|||
|
|
</button>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<!-- 派单 改派 -->
|
|||
|
|
<OrderAssign ref="orderAssignRef" v-if="!orderType" @refresh="goDetail"></OrderAssign>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import {
|
|||
|
|
handleWorkOrderBarAction,
|
|||
|
|
serviceStatusEnum,
|
|||
|
|
workOrderBottomBar
|
|||
|
|
} from "../workOrder_manage/config";
|
|||
|
|
import OrderGoods from '@/components/orderGoods'
|
|||
|
|
import {handleMakeCallPhone, handleOpenLocation} from "@/libs/order";
|
|||
|
|
import {adminOrderBottomBar, handleAdminOrderBarAction} from "../work_order/config";
|
|||
|
|
import OrderAssign from "../work_order/components/orderAssign";
|
|||
|
|
|
|||
|
|
const EVENT = {
|
|||
|
|
CALL: "call",
|
|||
|
|
LOCATION: "location"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export default {
|
|||
|
|
components: {
|
|||
|
|
OrderGoods,
|
|||
|
|
OrderAssign
|
|||
|
|
},
|
|||
|
|
props: {
|
|||
|
|
orderList: {
|
|||
|
|
type: Array,
|
|||
|
|
default: []
|
|||
|
|
},
|
|||
|
|
// 底部操作tab,用于区分工单还是移动端商家管理,有值是工单
|
|||
|
|
orderType: {
|
|||
|
|
type: Number,
|
|||
|
|
default: 0
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
serviceStatusEnum,
|
|||
|
|
// BtnUtil,
|
|||
|
|
EVENT,
|
|||
|
|
reservationConfig: {},
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
mounted() {
|
|||
|
|
this.reservationConfig = uni.getStorageSync('reservationConfig'); // 商户预约设置
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
// 工单操作按钮回调
|
|||
|
|
async handleBottomBarAction(event,workOrderNo) {
|
|||
|
|
let data = await handleWorkOrderBarAction(event, workOrderNo)
|
|||
|
|
// 服务完成 / 服务开始
|
|||
|
|
if (data === 'complete' || data === 'start' || data ==='rush_order') {
|
|||
|
|
this.goWorkOrderDetail(workOrderNo)
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
// 工单管理详情
|
|||
|
|
goWorkOrderDetail(workOrderNo){
|
|||
|
|
this.$util.navigateTo(`/pages/admin/workOrder_manage/workOrder_detail?workOrderNo=${workOrderNo}`)
|
|||
|
|
},
|
|||
|
|
// 移动端商家 工单详情
|
|||
|
|
goAdminWorkOrderDetail(workOrderNo){
|
|||
|
|
this.$util.navigateTo(`/pages/admin/work_order/detail?workOrderNo=${workOrderNo}`)
|
|||
|
|
},
|
|||
|
|
// 商家管理操作按钮回调
|
|||
|
|
async handleBottomAdminBarAction(event, workOrderNo) {
|
|||
|
|
let data = await handleAdminOrderBarAction(event, workOrderNo)
|
|||
|
|
// 服务完成 / 服务开始
|
|||
|
|
if (data === 'revise_reservation' || data === 'Compulsory_completion') await this.goAdminWorkOrderDetail(workOrderNo)
|
|||
|
|
if (data === 'revise_dispatch' || data === 'dispatch') await this.handleOpenAssignPage(data, workOrderNo)
|
|||
|
|
},
|
|||
|
|
// 派单 改派
|
|||
|
|
handleOpenAssignPage(isReassign, workOrderNo) {
|
|||
|
|
this.$refs.orderAssignRef.openPanel(workOrderNo, isReassign=== 'revise_dispatch'? true :false);
|
|||
|
|
},
|
|||
|
|
// 去订单详情
|
|||
|
|
goDetail(workOrderNo){
|
|||
|
|
if(this.orderType){
|
|||
|
|
this.goWorkOrderDetail(workOrderNo)
|
|||
|
|
}else{
|
|||
|
|
this.$util.navigateTo(`/pages/admin/work_order/detail?workOrderNo=${workOrderNo}`)
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
// 工单操作按钮
|
|||
|
|
btnConfig(workOrderNoInfo) {
|
|||
|
|
return workOrderBottomBar(workOrderNoInfo)
|
|||
|
|
},
|
|||
|
|
async handleOrderListClick(e) {
|
|||
|
|
const {
|
|||
|
|
event,
|
|||
|
|
index
|
|||
|
|
} = e.target.dataset;
|
|||
|
|
if (event === undefined || index === undefined) return;
|
|||
|
|
const item = this.orderList[index];
|
|||
|
|
if (event === EVENT.CALL) {
|
|||
|
|
handleMakeCallPhone(item.userPhone);
|
|||
|
|
} else if (event === EVENT.LOCATION) {
|
|||
|
|
await handleOpenLocation(item);
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
//移动端商家管理操作按钮
|
|||
|
|
adminBtnConfig(adminOrderNoInfo){
|
|||
|
|
return adminOrderBottomBar(adminOrderNoInfo)
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
.defaultColor{
|
|||
|
|
background-color: #fff !important;
|
|||
|
|
color: #666666 !important;
|
|||
|
|
border: 1px solid #DDDDDD;
|
|||
|
|
}
|
|||
|
|
.order-list {
|
|||
|
|
padding: 0 24rpx 24rpx;
|
|||
|
|
color: #333;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.order-item {
|
|||
|
|
background-color: #fff;
|
|||
|
|
border-radius: 24rpx;
|
|||
|
|
padding: 32rpx 24rpx;
|
|||
|
|
|
|||
|
|
&+.order-item {
|
|||
|
|
margin-top: 20rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.order-item-header {
|
|||
|
|
display: flex;
|
|||
|
|
align-items: baseline;
|
|||
|
|
|
|||
|
|
.order-item-type {
|
|||
|
|
height: 32rpx;
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
padding-inline: 6rpx;
|
|||
|
|
font-size: 20rpx;
|
|||
|
|
color: #2A7EFB;
|
|||
|
|
border: 1px solid currentColor;
|
|||
|
|
border-radius: 6rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.order-item-sn {
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
margin-left: 16rpx;
|
|||
|
|
flex: 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.order-item-status {
|
|||
|
|
margin-left: auto;
|
|||
|
|
font-size: 26rpx;
|
|||
|
|
color: #FF9600;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.order-item-reverse-time {
|
|||
|
|
font-size: 24rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.order-item-btn-group {
|
|||
|
|
display: flex;
|
|||
|
|
justify-content: flex-end;
|
|||
|
|
|
|||
|
|
.order-item-btn {
|
|||
|
|
height: 64rpx;
|
|||
|
|
padding-inline: 32rpx;
|
|||
|
|
border-radius: 50rpx;
|
|||
|
|
//background-color: #2291F8;
|
|||
|
|
font-size: 24rpx;
|
|||
|
|
color: #fff;
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
justify-content: center;
|
|||
|
|
|
|||
|
|
&+.order-item-btn {
|
|||
|
|
margin-left: 20rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.order-item-contact-info {
|
|||
|
|
background-color: #f9f9f9;
|
|||
|
|
border-radius: 16rpx;
|
|||
|
|
padding: 32rpx;
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
|
|||
|
|
.contact-info-left {
|
|||
|
|
margin-right: 28rpx;
|
|||
|
|
flex: 1;
|
|||
|
|
overflow: hidden;
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
color: #282828;
|
|||
|
|
|
|||
|
|
.contact-info-phone {
|
|||
|
|
margin-left: 30rpx;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.contact-info-address {
|
|||
|
|
font-size: 24rpx;
|
|||
|
|
color: #999;
|
|||
|
|
margin-top: 6rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.contact-action-btn {
|
|||
|
|
width: 56rpx;
|
|||
|
|
height: 56rpx;
|
|||
|
|
background-color: #edf2f9;
|
|||
|
|
border-radius: 50%;
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
justify-content: center;
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
color: #2a7efb;
|
|||
|
|
|
|||
|
|
&+.contact-action-btn {
|
|||
|
|
margin-left: 32rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|