271 lines
9.0 KiB
Vue
271 lines
9.0 KiB
Vue
|
|
<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>
|