dingdong-master/pages/order-manage/modal/dispatch-order-sure.vue

271 lines
9.0 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>
<!-- popup -->
<view>
<uni-popup ref="deliveryOrderPopup" type="bottom" @change="changePopup">
<view class="text-bold text-gray text-lg text-center left-top-sm-bar" style="position: absolute;top: 15px;right: 20px;" data-popup="deliveryOrderPopup" @click="closePopup"><text
class="cuIcon-close"></text></view>
<view class="bg-white padding" style="padding-top: 30rpx;width: 100%;">
<view class="text-center">
<text class="text-black" style="font-size: 34upx;">包安装/包服务商品安装确认</text>
</view>
<view>
<view class="solid-bottom padding-bottom-sm">
<view v-if="columnTitleArr.length" class="flex justify-between margin-tb-sm">
<view class="basis-df">{{columnTitleArr[0]}}</view>
<view class="flex justify-end text-center basis-df">
<view v-for="(title, index) in columnTitleArr" v-if="index >= 1" class="basis-df">{{title}}</view>
</view>
</view>
<view class="flex justify-between margin-tb-xs align-center" v-for="(item,index) in pickedList" :key="index">
<view class='cu-tag padding basis-lg'>{{item.goodsName}}</view>
<view class="flex justify-end basis-df text-center align-center">
<view class="basis-df">{{item.goodsNum}}</view>
<view class="basis-df">{{item.goodsNum}}
</view>
</view>
</view>
</view>
<view class="padding-top-sm padding-bottom-xs flex justify-between align-center">
<text class="margin-right-sm">本单可派服务金额<text class="text-red text-lg">{{curOrder.serverMoney}}</text></text>
</view>
<view class="padding-bottom-sm flex justify-between align-center">
<text class="margin-right-sm" style="width: 150rpx;">服务金额</text>
<input type="digit" class="line-input radius-input" v-model="dispatchTotalPrice" placeholder="请输入服务总金额 (你对服务单跟进负责)"></input>
</view>
</view>
<view class="padding-tb" v-if="serviceShop">
<view class="text-black text-bold flex justify-between">
<text>安装/服务/施工门店</text>
<text @click="goChooseShop">更多></text>
</view>
<view class="flex-sub flex margin-top-sm" @click="openShopLocation(serviceShop)">
<view style="width: 150rpx;height: 150rpx;margin-right:10px;">
<image style="width: 100%;height: 100%;" :src="serviceShop.imageUrl" mode="aspectFill"></image>
</view>
<view class="flex-sub">
<view class="text-bold" style="text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 1;">
客户已选: {{serviceShop.shopName}}
</view>
<view class="padding-tb-xs" style="position: relative;">
<!-- <view class='cu-tag round bg-orange light'>
<text class="text-black" v-if="pickedProductList[0].product[0].storeService == 1">到店服务</text>
<text class="text-black" v-if="pickedProductList[0].product[0].storeService == 2">到店+配送(服务)</text>
<text class="text-black" v-if="pickedProductList[0].product[0].storeService == 3">到店+上门(服务)</text>
</view> -->
<view class="margin-lr-sm" style="display: inline-block;" v-if="serviceShop.distance">
<view class="cu-tag bg-red" style="padding: 0 2px;height: auto;">距离客户</view>
<text class="text-gray" style="vertical-align: middle;">{{serviceShop.distance}}</text>
</view>
<image src="/static/navigation.png" style="width: 50rpx;height: 50rpx;display: inline-block;position: absolute;top: 5px;right: -10px;"></image>
</view>
<view style="text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 1;">{{serviceShop.provinceName + serviceShop.cityName + serviceShop.countryName + serviceShop.streetName + serviceShop.address}}</view>
<view class="flex justify-between align-center margin-bottom-xs padding-top">
<view>
<text class="text-bold text-lg margin-lr-xs">店长:{{serviceShop.phone}}</text>
</view>
<button class="cu-btn line-main-color" @click.stop="makePhoneCall(serviceShop.phone)">拨打</button>
</view>
</view>
</view>
</view>
<view class="cu-bar bg-white solid-top">
<view class="action margin-0 flex-sub text-black" @tap="closePopup">取消</view>
<view class="action margin-0 flex-sub text-main-color solid-left" @click="assignWork">提交</view>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
export default {
emits: ['confirmFeedback', 'close'],
props: {
show: {
type: Boolean,
default: false
},
data: {
type: Object,
default: () => {}
},
product: {
type: Object,
default: {}
},
orderType: {
type: Number,
default: 0
}
},
watch: {
show: {
handler(newVal) {
if(newVal) {
this.$nextTick(() => {
this.$refs.deliveryOrderPopup.open()
this.loadData(this.data)
})
}
},
immediate: true
}
},
data() {
return {
dispatchTotalPrice: null,
showDispatchPriceModal: false,
columnTitleArr: ['购买机型', '待派单', '派单量'],
curOrder: {},
pickedList: [],
workerName: null,
curUserInfo: null,
serviceShop: null,
serviceCancelled: null
}
},
onReady() {
uni.$on('chooseShop', this.chooseShop)
},
onUnload() {
uni.$off('chooseShop');
},
methods: {
changePopup(e) {
console.log(e);
if(!e.show) {
this.closePopup()
}
},
closePopup() {
this.$emit('close')
},
dateChange(e) {
this.date = e.detail.value;
this.changeExpectTime();
},
openShopLocation(item) {
// const gcj02Coord = wgs84ToGcj02(item.shop.longitude, item.shop.latitude)
// const gcj02Coord = wgs84ToGcj02(102.80154676649306, 24.969456922743056)
// const gcj02Coord = [102.82868680950929, 24.864792838337802]
const gcj02Coord = [item.longitude, item.latitude]
wx.openLocation({
latitude: gcj02Coord[1],
longitude: gcj02Coord[0],
scale: 18,
name: item.shopName,
address: `${item.provinceName}${item.cityName}${item.countryName}${item.streetName}${item.address}`
})
},
showModal(e) {
this[e.currentTarget.dataset.modal] = true;
},
hideModal(e) {
this[e.currentTarget.dataset.modal] = false;
},
changePiecesNum(curNum, curItem) {
curItem.toAssignNum = curNum;
},
resetData() {
this.dispatchTotalPrice = null;
this.pickedList = [];
this.curOrder = {};
this.curUserInfo = null;
},
loadData(order) {
this.resetData();
this.curUserInfo = this.$request.getCurUserInfo();
this.getCanAssignList(order);
// init defalut shop
this.initShop()
},
async getCanAssignList(order) {
// 获取最新的订单信息
let getOrderRes = await this.$request.getOrderMasterDetail({
id: order.orderMasterId,
});
let res = await this.$request.getCanAssignList({
orderMasterId: order.orderMasterId,
generateServiceOrder: getOrderRes.data.serviceCancelled
});
this.serviceCancelled = getOrderRes.data.serviceCancelled;
let pickedList = res.data;
this.curOrder = getOrderRes.data;
this.pickedList = pickedList;
},
async initShop() {
const {provinceName, cityName, countryName, streetName, address, serviceShopId} = this.data
let res = await this.$request.getShopDetailWithDistance({
shopId: serviceShopId,
provinceName,
cityName,
countryName,
streetName,
address
});
this.serviceShop = res.data;
},
chooseShop(shopInfo) {
this.serviceShop = shopInfo;
},
goChooseShop() {
const {provinceName, cityName, countryName, streetName, address, goodsId, goods, serviceShopId} = this.data
const addressFullObj = {
provinceName,
cityName,
countryName,
streetName,
address
}
const gotGoodsId = goods ? goods.goodsId : goodsId
uni.navigateTo({
url: '/pages/order-manage/choose-shop?goodsId='+gotGoodsId+'&addressFullObj='+JSON.stringify(addressFullObj)+'&shopId='+serviceShopId
})
},
async assignWork() {
if (this.dispatchTotalPrice) {
let res = await this.$request.allocateServiceMoney({
id: this.data.orderMasterId,
serverGoodsMoney: this.dispatchTotalPrice,
serviceShopId: this.serviceShop.shopId
});
if (res && res.code === 0) {
setTimeout(() => {
uni.showToast({
icon: 'success',
title: this.serviceCancelled == 1 ? '已安装确认' : '现已安装确认,请操作接单',
duration: 2000
})
}, 1500)
this.$emit('confirmFeedback');
return;
}
} else {
uni.showToast({
title: '请输入服务总金额',
icon: 'none'
})
}
},
makePhoneCall(customerPhone) {
uni.makePhoneCall({
phoneNumber: customerPhone
})
},
}
}
</script>
<style scoped>
.relative-view {
position: relative;
}
.input-arrow {
position: absolute;
right: 10rpx;
top: 25%;
}
</style>