商品售后余下功能
This commit is contained in:
parent
d31ca6fc16
commit
22d451eead
|
|
@ -86,15 +86,11 @@ const myTeamInfo = {
|
|||
}
|
||||
|
||||
const masterRules = [
|
||||
'0规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容',
|
||||
'1规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容',
|
||||
'2规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容',
|
||||
'3规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容',
|
||||
'4规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容',
|
||||
'5规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容',
|
||||
'6规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容',
|
||||
'7规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容',
|
||||
'8规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容规则内容'
|
||||
'接单:属于您的订单请30分钟内接单。',
|
||||
'预约:接单后立即预约,超时30分钟会提示,超1小时你有责;',
|
||||
'排单:按约排单,30分钟未排单提示超时,超1小时你有责;',
|
||||
'上门:按约准时上门,超时上门或被投诉未上门,你有责;',
|
||||
'退单:当天订单不得私自退单,遇事可提前3小时与客户沟通妥善。紧急问题且沟通不畅的,请联系你上级或平台客服。上门时间3小时范围内退单的,产生责任由你承担。',
|
||||
]
|
||||
|
||||
// type: 0=升降序,1=功能按钮;order: 0=升序,1=降序;
|
||||
|
|
@ -322,7 +318,12 @@ const timeRangeList = [
|
|||
'18:00-18:30',
|
||||
'18:30-19:00',
|
||||
'19:00-19:30',
|
||||
'19:30-20:00'
|
||||
'19:30-20:00',
|
||||
'19:00-20:00',
|
||||
'20:00-21:00',
|
||||
'21:00-22:00',
|
||||
'22:00-23:00',
|
||||
'23:00-24:00',
|
||||
]
|
||||
|
||||
const servDetail = {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,12 @@ export default {
|
|||
}
|
||||
return this.countDownDiffCache;
|
||||
},
|
||||
addDays(dateStr, dayAmount) {
|
||||
let date = new Date(dateStr);
|
||||
// 使用时间戳计算,避免时区问题
|
||||
const timestamp = date.getTime() + (dayAmount * 24 * 60 * 60 * 1000);
|
||||
return new Date(timestamp);
|
||||
},
|
||||
addHours(dateStr, hourAmount) {
|
||||
let date = new Date(dateStr);
|
||||
date.setHours(date.getHours() + hourAmount);
|
||||
|
|
|
|||
|
|
@ -1,22 +1,45 @@
|
|||
import globalData from '@/common/js/globalData.js';
|
||||
|
||||
export default {
|
||||
// address: 'https://www.opsoul.com:8881',
|
||||
address: 'https://gmhl.opsoul.com',
|
||||
address: 'https://gmhl.gmjlb.com',
|
||||
// address: 'https://gmhl.opsoul.com',
|
||||
// 异步接口拦截
|
||||
addInterceptor() {
|
||||
let _this = this;
|
||||
uni.addInterceptor('request', {
|
||||
invoke(args) {
|
||||
uni.showLoading({
|
||||
mask: true,
|
||||
title: '加载中'
|
||||
})
|
||||
if(!args.hideLoading) {
|
||||
uni.showLoading({
|
||||
mask: true,
|
||||
title: '加载中'
|
||||
})
|
||||
}
|
||||
|
||||
let userInfo = _this.getCurUserInfo();
|
||||
|
||||
// if(userInfo.loginStatus == 1) {
|
||||
// // 禁止登录,退出登录
|
||||
// uni.clearStorageSync('userProfile');
|
||||
// uni.showToast({
|
||||
// icon: 'none',
|
||||
// title: '您已被禁止登录',
|
||||
// duration: 3000,
|
||||
// success() {
|
||||
// setTimeout(() => {
|
||||
// uni.hideLoading();
|
||||
// uni.reLaunch({
|
||||
// url: '/pages/login/login'
|
||||
// })
|
||||
// }, 3000)
|
||||
// }
|
||||
// })
|
||||
// return
|
||||
// }
|
||||
// request 触发前拼接 url
|
||||
// args.url = 'https://www.opsoul.com:8881' + args.url;
|
||||
// args.url = 'http://127.0.0.1:80' + args.url;
|
||||
args.url = 'https://gmhl.opsoul.com' + args.url;
|
||||
// args.url = 'https://gmhl.opsoul.com' + args.url;
|
||||
args.url = 'https://gmhl.gmjlb.com' + args.url;
|
||||
|
||||
if (!args.data) {
|
||||
args.data = {}
|
||||
|
|
@ -41,10 +64,11 @@ export default {
|
|||
uni.hideLoading();
|
||||
if (!res || !res.data || res.data.code !== 0) {
|
||||
uni.showToast({
|
||||
title: '系统错误',
|
||||
title: res.data.msg || '系统错误',
|
||||
icon: 'error'
|
||||
})
|
||||
}
|
||||
// _this.getAndSetWorkerInfo()
|
||||
},
|
||||
fail(err) {
|
||||
console.log(err);
|
||||
|
|
@ -182,6 +206,33 @@ export default {
|
|||
uni.clearStorageSync('userProfile');
|
||||
uni.setStorageSync('userProfile', userInfo);
|
||||
},
|
||||
async GetCurrentLocation() {
|
||||
let res = await this.wxGetLocation()
|
||||
console.log(res);
|
||||
if (!res || !res.latitude) {
|
||||
return;
|
||||
}
|
||||
let res1 = await uni.request({
|
||||
url: '/tool/baidu/getLocation',
|
||||
method: 'POST',
|
||||
data: {
|
||||
location: res.latitude + ',' + res.longitude
|
||||
}
|
||||
})
|
||||
let areaRes = res1[1].data
|
||||
return areaRes.data;
|
||||
},
|
||||
async TransformLocation(params) {
|
||||
let res1 = await uni.request({
|
||||
url: '/tool/baidu/getLocation',
|
||||
method: 'POST',
|
||||
data: {
|
||||
location: params.latitude + ',' + params.longitude
|
||||
}
|
||||
})
|
||||
let areaRes = res1[1].data
|
||||
return areaRes.data;
|
||||
},
|
||||
async registerUser(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/wx/addWorker',
|
||||
|
|
@ -272,6 +323,7 @@ export default {
|
|||
},
|
||||
getCurUserInfo() {
|
||||
let userProfile = uni.getStorageSync('userProfile');
|
||||
|
||||
return userProfile;
|
||||
},
|
||||
async refreshCurUserCache() {
|
||||
|
|
@ -310,7 +362,7 @@ export default {
|
|||
if (resStr != null && resStr.length > 0) {
|
||||
try {
|
||||
resObj = JSON.parse(resStr);
|
||||
} catch(e) {
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
|
|
@ -323,7 +375,9 @@ export default {
|
|||
}
|
||||
return resObj.url;
|
||||
},
|
||||
async qrySpecialSkillList(params = {goodsCategoryId : null}) {
|
||||
async qrySpecialSkillList(params = {
|
||||
goodsCategoryId: null
|
||||
}) {
|
||||
let res = await uni.request({
|
||||
url: '/special/skill/list',
|
||||
method: 'POST',
|
||||
|
|
@ -331,7 +385,9 @@ export default {
|
|||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async listByStep(params = {goodsCategoryId : null}) {
|
||||
async listByStep(params = {
|
||||
goodsCategoryId: null
|
||||
}) {
|
||||
let res = await uni.request({
|
||||
url: '/goods/deptcategory/listByStep',
|
||||
method: 'POST',
|
||||
|
|
@ -339,7 +395,9 @@ export default {
|
|||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async areaListByStep(params = { parentCode: null }) {
|
||||
async areaListByStep(params = {
|
||||
parentCode: null
|
||||
}) {
|
||||
let res = await uni.request({
|
||||
url: '/system/area/app/list',
|
||||
method: 'POST',
|
||||
|
|
@ -363,6 +421,23 @@ export default {
|
|||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async insuranceUserList(params) {
|
||||
let res = await uni.request({
|
||||
url: '/insurance/user/app/list',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async insuranceUserAdd(params) {
|
||||
let res = await uni.request({
|
||||
url: '/insurance/user/add',
|
||||
method: 'POST',
|
||||
data: params,
|
||||
hideLoading: true
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async addGoods(params) {
|
||||
let res = await uni.request({
|
||||
url: '/goods/goods/addGoods',
|
||||
|
|
@ -503,6 +578,14 @@ export default {
|
|||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async checkOrderInsurance(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/order/master/orderInsurance?orderCode='+params.orderCode,
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async qryDetailOrderPage(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/order/detail/app/list',
|
||||
|
|
@ -684,6 +767,25 @@ export default {
|
|||
let res = await uni.request({
|
||||
url: '/order/master/console/cancel',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async goodsOrderRefund(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/order/master/goodsOrderRefund',
|
||||
method: 'POST',
|
||||
data: params,
|
||||
header: {
|
||||
'content-type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async deleteAttachPrice(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/order/attach/deleteByDetailId',
|
||||
method: 'POST',
|
||||
data: params,
|
||||
header: {
|
||||
'content-type': 'application/x-www-form-urlencoded'
|
||||
|
|
@ -735,6 +837,14 @@ export default {
|
|||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async allocateServiceMoney(params) {
|
||||
let res = await uni.request({
|
||||
url: '/order/generate/service/order',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async checkAuth(authScope, callbackName, callbackSuccessKey) {
|
||||
let _this = this;
|
||||
// 通过 wx.getSetting 先查询一下用户是否授权了authScope
|
||||
|
|
@ -774,25 +884,26 @@ export default {
|
|||
},
|
||||
async wxGetLocation() {
|
||||
let errCode = null;
|
||||
let res = await wx.getLocation({
|
||||
type: 'gcj02',
|
||||
fail: async (result) => {
|
||||
if (result.errCode === 2) {
|
||||
uni.showToast({
|
||||
title: '定位获取失败,请确认是否开启定位',
|
||||
icon: 'none',
|
||||
duration: 2500
|
||||
})
|
||||
return new Promise((resolve, reject) => {
|
||||
wx.getLocation({
|
||||
type: 'gcj02',
|
||||
fail: async (result) => {
|
||||
if (result.errCode === 2) {
|
||||
uni.showToast({
|
||||
title: '定位获取失败,请确认是否开启定位',
|
||||
icon: 'none',
|
||||
duration: 2500
|
||||
})
|
||||
}
|
||||
reject(null)
|
||||
},
|
||||
success: async (result) => {
|
||||
console.log("success", result);
|
||||
resolve(result)
|
||||
}
|
||||
},
|
||||
success: async (result) => {
|
||||
console.log("success");
|
||||
return result;
|
||||
}
|
||||
})
|
||||
})
|
||||
// res.latitude, res.longitude
|
||||
console.log(res)
|
||||
return res;
|
||||
|
||||
},
|
||||
|
||||
async callCustomer(params = {}) {
|
||||
|
|
@ -834,6 +945,15 @@ export default {
|
|||
return res[1].data;
|
||||
},
|
||||
|
||||
async returnOrder(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/order/detail/app/return',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
|
||||
// 获取操作流程节点列表
|
||||
async getOrderOperate(params = {}) {
|
||||
let res = await uni.request({
|
||||
|
|
@ -842,5 +962,151 @@ export default {
|
|||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
}
|
||||
},
|
||||
// 验证接单用户保险信息
|
||||
async certNoTwoElementVerification(params) {
|
||||
let res = await uni.request({
|
||||
url: '/tool/ali/certNoTwoElementVerification',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async getShopAddressList(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/shop/list',
|
||||
method: 'GET',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async getMasterShopAddressList(workerId) {
|
||||
let res = await uni.request({
|
||||
url: '/shop/worker/'+workerId,
|
||||
method: 'GET'
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async addShopAddressList(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/shop/add',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async editShopAddressList(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/shop/update',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async delShopAddressList(customerAddressId) {
|
||||
let res = await uni.request({
|
||||
url: '/shop/delete/'+customerAddressId,
|
||||
method: 'POST'
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async changeInvoiceStatus(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/order/master/changeInvoiceStatus',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async transferOrder(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/order/master/transferOrder',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async getByCustomerAddressId(customerAddressId) {
|
||||
let res = await uni.request({
|
||||
url: '/customer/address/getByCustomerAddressId',
|
||||
method: 'POST',
|
||||
data: {
|
||||
customerAddressId: customerAddressId
|
||||
},
|
||||
header: {
|
||||
'content-type': 'application/x-www-form-urlencoded'
|
||||
}
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async getShopDetailWithDistance(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/shop/getShopDetailWithDistance',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async getShopsByGoodsId(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/goods/goods/getShopsByGoodsId',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async getDeliveryFlow(trackingNumber) {
|
||||
// "trackingNumber": "YT8774104632324",
|
||||
let res = await uni.request({
|
||||
url: '/order/logistics/query/'+trackingNumber,
|
||||
method: 'GET',
|
||||
data: {}
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async workerResendPlan(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/worker/record/workerResendPlan',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async editAfterServiceGoodsRecord(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/worker/record/editGoods',
|
||||
method: 'POST',
|
||||
data: params,
|
||||
header: {
|
||||
pageNum: params.pageNum,
|
||||
pageSize: params.pageSize
|
||||
}
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async saveMasterWorkerRemark(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/order/master/saveMasterWorkerRemark',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
async getAndSetWorkerInfo(workerId) {
|
||||
let res = await uni.request({
|
||||
url: '/worker/detail/'+ workerId,
|
||||
method: 'GET'
|
||||
})
|
||||
let curUserInfo = res[1].data.data;
|
||||
uni.setStorageSync('userProfile', curUserInfo);
|
||||
return res[1].data;
|
||||
},
|
||||
async workerConfirmReceive(params = {}) {
|
||||
let res = await uni.request({
|
||||
url: '/worker/record/workerConfirmReceive',
|
||||
method: 'POST',
|
||||
data: params
|
||||
})
|
||||
return res[1].data;
|
||||
},
|
||||
}
|
||||
|
|
@ -15,6 +15,9 @@ export default {
|
|||
}
|
||||
return true;
|
||||
},
|
||||
validPhone: function(email) {
|
||||
return contactNumRegex.test(email);
|
||||
},
|
||||
|
||||
validIdCard: function(idCardNum) {
|
||||
return idCardRegex.test(idCardNum);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,24 @@
|
|||
<view class="text-black">{{product.totalName}}</view>
|
||||
<view class="text-sm" v-if="ifShowComments">{{product.remark}}</view>
|
||||
</view>
|
||||
<view class="flex justify-between align-center">
|
||||
<view class="flex align-center" v-if="product.goods">
|
||||
<view class='cu-tag round bg-orange light' v-if="product.goods.installService">
|
||||
<text class="text-black">{{getInstallServiceName(product.goods.installService)}}</text>
|
||||
</view>
|
||||
<view class='cu-tag round bg-orange light' v-if="product.goods.deliveryService">
|
||||
<text class="text-black">{{getDeliveryName(product.goods.deliveryService)}}</text>
|
||||
</view>
|
||||
<template v-if="product.goods.storeService">
|
||||
<view class='cu-tag round bg-orange light' v-if="product.goods.storeService == 1">
|
||||
<text class="text-black">到店服务</text>
|
||||
</view>
|
||||
<view class='cu-tag round bg-orange light' v-if="product.goods.storeService == 2">
|
||||
<text class="text-black">到店+配送(服务)</text>
|
||||
</view>
|
||||
<view class='cu-tag round bg-orange light' v-if="product.goods.storeService == 3">
|
||||
<text class="text-black">到店+上门(服务)</text>
|
||||
</view>
|
||||
</template>
|
||||
<!-- <view class="flex justify-start align-center" v-if="product.payMoney">
|
||||
<text class="text-price text-red text-bold text-xl">{{product.payMoney}}</text>
|
||||
</view>
|
||||
|
|
@ -37,7 +54,7 @@
|
|||
<text class='cuIcon-locationfill'></text>
|
||||
</view>
|
||||
<view class="cu-tag line-main-color sm">
|
||||
服务区域
|
||||
{{product.orderType === 1 ? '发货区域' : '服务区域'}}
|
||||
</view>
|
||||
</view>
|
||||
<text v-for="(item,index) in product.goodsAreaList" v-if="ifShowServArea">
|
||||
|
|
@ -62,13 +79,33 @@
|
|||
},
|
||||
product: {
|
||||
type: Object,
|
||||
default: {}
|
||||
default: () => {}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getDeliveryName(deliveryService) {
|
||||
if(deliveryService === 1) {
|
||||
return '包邮'
|
||||
} else if(deliveryService === 2) {
|
||||
return '同城包送'
|
||||
} else if(deliveryService === 3) {
|
||||
return '邮费自付/自提'
|
||||
}
|
||||
},
|
||||
getInstallServiceName(installService) {
|
||||
if(installService === 1) {
|
||||
return '包安装'
|
||||
} else if(installService === 2) {
|
||||
return '不包安装'
|
||||
} else if(installService === 3) {
|
||||
return '自费安装'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -7,19 +7,23 @@
|
|||
<input class="uni-combox__input" type="text" :placeholder="placeholder" @click="toggleSelector" disabled
|
||||
placeholder-class="uni-combox__input-plac" v-model="inputVal[showField]" @input="onInput" @focus="onFocus"
|
||||
@blur="onBlur" />
|
||||
<uni-icons v-if="showClear && inputVal" type="clear" size="20" style="margin-right: 20rpx;" color="#999" @click="clearChosen">
|
||||
</uni-icons>
|
||||
<uni-icons :type="showSelector? 'top' : 'bottom'" size="14" color="#999" @click="toggleSelector">
|
||||
</uni-icons>
|
||||
</view>
|
||||
<view class="uni-combox__selector" v-if="showSelector">
|
||||
<view class="uni-popper__arrow"></view>
|
||||
<scroll-view scroll-y="true" class="uni-combox__selector-scroll">
|
||||
<view class="uni-combox__selector-empty" v-if="filterCandidatesLength === 0">
|
||||
<text>{{emptyTips}}</text>
|
||||
</view>
|
||||
<scroll-view scroll-y="true" class="uni-combox__selector-scroll" :style="{maxHeight: screenMaxHeight}">
|
||||
<view class="uni-combox__selector-item" v-for="(item,index) in filterCandidates" :key="index"
|
||||
@click="onSelectorClick(index)">
|
||||
<text>{{item[showField]}}</text>
|
||||
</view>
|
||||
<view class="uni-combox__selector-empty" v-if="filterCandidatesLength === 0 || alwaysShowEmpty">
|
||||
<slot name="empty">
|
||||
<text>{{emptyTips}}</text>
|
||||
</slot>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -45,6 +49,14 @@
|
|||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
showClear: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
alwaysShowEmpty: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
label: {
|
||||
type: String,
|
||||
default: ''
|
||||
|
|
@ -83,6 +95,10 @@
|
|||
default: ''
|
||||
},
|
||||
// #endif
|
||||
screenMaxHeight: {
|
||||
type: String,
|
||||
default: '200px'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -149,6 +165,12 @@
|
|||
this.$emit('input', this.inputVal)
|
||||
this.$emit('update:modelValue', this.inputVal)
|
||||
})
|
||||
},
|
||||
clearChosen() {
|
||||
setTimeout(() => {
|
||||
this.$emit('input', '')
|
||||
this.$emit('update:modelValue', '')
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@
|
|||
<view class="cu-dialog">
|
||||
<view class="padding-xl">
|
||||
<view class="cuIcon-discover big-icon padding-tb text-main-color"></view>
|
||||
<view>请您选择供应类型!到家服务类请选-服务商;商品销售类请选-品牌商。</view>
|
||||
<view>请您选择供应类型!提供服务类型的请选--服务商!提供商品类型的请选--货品商!</view>
|
||||
</view>
|
||||
<view class="cu-bar bg-white">
|
||||
<view class="action margin-0 flex-sub text-black" data-modal="isShowSteer" @click="chooseEntryType(1)">品牌商
|
||||
<view class="action margin-0 flex-sub text-black" data-modal="isShowSteer" @click="chooseEntryType(1)">货品商
|
||||
</view>
|
||||
<view class="action margin-0 flex-sub text-main-color solid-left"
|
||||
data-modal="isShowSteer" @click="chooseEntryType(0)">服务商</view>
|
||||
|
|
@ -37,18 +37,21 @@
|
|||
this.hideModal();
|
||||
let curUserInfo = this.$request.getCurUserInfo();
|
||||
if (typeCode === 1) {
|
||||
if (curUserInfo && curUserInfo.storeStatus == 1) {
|
||||
uni.navigateTo({
|
||||
url: '/pages/index/index?menuCode=supplyChainPage'
|
||||
})
|
||||
} else {
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/apply-shop'
|
||||
})
|
||||
}
|
||||
// if (curUserInfo && curUserInfo.storeStatus == 1) {
|
||||
// uni.navigateTo({
|
||||
// url: '/pages/index/index?menuCode=supplyChainPage'
|
||||
// })
|
||||
// } else {
|
||||
// uni.navigateTo({
|
||||
// url: '/pages/my/apply-shop'
|
||||
// })
|
||||
// }
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/master-settled-info?type=2'
|
||||
})
|
||||
} else if (typeCode === 0) {
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/master-settled-info'
|
||||
url: '/pages/my/master-settled-info?type=1'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,8 +62,11 @@
|
|||
"permission" : {
|
||||
"scope.userLocation" : {
|
||||
"desc" : "因涉及上门家政服务,需获取地理位置"
|
||||
},
|
||||
"scope.writeClipboard" : {
|
||||
"desc" : "剪贴板写入权限"
|
||||
}
|
||||
},
|
||||
"requiredPrivateInfos" : [ "getLocation" ]
|
||||
"requiredPrivateInfos" : [ "getLocation", "chooseLocation" ]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
12
pages.json
12
pages.json
|
|
@ -27,19 +27,27 @@
|
|||
"root": "pages/order-manage/",
|
||||
"pages": [{
|
||||
"path": "order-manage"
|
||||
}, {
|
||||
"path": "order-manage-parts"
|
||||
}, {
|
||||
"path": "serv-detail"
|
||||
}, {
|
||||
"path": "finish-order"
|
||||
}, {
|
||||
"path": "cancel-order"
|
||||
}, {
|
||||
"path": "choose-shop"
|
||||
}]
|
||||
}, {
|
||||
"root": "pages/my/",
|
||||
"pages": [{
|
||||
"path": "new-serv"
|
||||
},{
|
||||
"path": "new-serv-parts"
|
||||
}, {
|
||||
"path": "master-occupancy"
|
||||
}, {
|
||||
"path": "master-occupancy-parts"
|
||||
}, {
|
||||
"path": "withdraw"
|
||||
}, {
|
||||
|
|
@ -60,6 +68,10 @@
|
|||
"path": "certification"
|
||||
}, {
|
||||
"path": "apply-shop"
|
||||
},{
|
||||
"path": "shop-list"
|
||||
},{
|
||||
"path": "edit-shop-address"
|
||||
}]
|
||||
}],
|
||||
"globalStyle": {
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
<view class="cu-bar bg-white tabbar border shop fixed-bottom-bar">
|
||||
<view class="left-grid text-center" data-modal="takeRateSet" @click="showModalByRef('setTakeRateModal')">
|
||||
<view>设置扣点</view>
|
||||
<view v-if="curUserInfo.leaderTeamRate">(扣点:<text
|
||||
<view v-if="curUserInfo.leaderTeamRate && !backIndex">(扣点:<text
|
||||
class="text-red">{{Number(curUserInfo.leaderTeamRate)*100}}%</text>)</view>
|
||||
</view>
|
||||
<!-- <view class="bg-main-color submit" @click="showModalByRef('inviteMasterModal')">邀请团队</view> -->
|
||||
|
|
|
|||
|
|
@ -82,10 +82,22 @@
|
|||
<view v-else class='cu-tag margin-right-xs radius line-red margin-top-xs'>款已付清</view>
|
||||
</template>
|
||||
</view>
|
||||
<view class="float-clear"></view>
|
||||
<view class="margin-top-sm order-name">
|
||||
<view>
|
||||
<text class="text-main-color text-lg margin-right-xs"><text class="cuIcon-people"></text></text>
|
||||
<text>姓名:{{task.customerName}}</text>
|
||||
</view>
|
||||
<view v-if="task.insuranceId">
|
||||
<text style="padding-right: 20rpx;">保险要求</text>
|
||||
<text class="text-main-color" data-modal="showInsuranceDetail" @click="showModal($event, task)"> 详情...</text>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<view class="margin-top-sm">
|
||||
<text class="text-main-color text-lg margin-right-xs"><text
|
||||
class="cuIcon-locationfill"></text></text>
|
||||
<text>{{task.address}}</text>
|
||||
<text>{{task.provinceName + task.cityName + task.countryName + task.streetName + task.address}}</text>
|
||||
</view>
|
||||
<view class="margin-top-sm">
|
||||
<text class="text-main-color text-lg margin-right-xs"><text class="cuIcon-timefill"></text></text>
|
||||
|
|
@ -97,6 +109,9 @@
|
|||
<text class="margin-right-xs">{{task.customerName}}</text>
|
||||
<text>{{task.customerPhone.substring(0, 3) + "****" + task.customerPhone.substring(7)}}</text>
|
||||
</view>
|
||||
<!-- <view class="margin-top-sm" v-if="task.customerRemark">
|
||||
备注:{{task.customerRemark}}
|
||||
</view> -->
|
||||
<view class="padding-top-sm flex justify-end">
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur" data-modal="showForwardModal"
|
||||
@click="showModal($event, task)">转发</button>
|
||||
|
|
@ -201,19 +216,23 @@
|
|||
<!-- 账户及实名弹窗 -->
|
||||
<vertify-bank-bind ref="vertifyBankBind" text="仍然接单" @stillAcceptOrder="stillAccept"></vertify-bank-bind>
|
||||
<vertify-certify ref="vertifyCertify" text="仍然接单" @stillAcceptOrder="stillAccept"></vertify-certify>
|
||||
<insurance-detail v-if="showInsuranceDetail" :show="showInsuranceDetail" :data="curTask" @close="showInsuranceDetail = false"></insurance-detail>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import loadStatusBar from '@/components/custom-bar/load-status-bar.vue';
|
||||
import insuranceDetail from '@/pages/order-manage/modal/insurance-detail.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
loadStatusBar
|
||||
loadStatusBar,
|
||||
insuranceDetail
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tabCur: 0,
|
||||
orderType: 0,
|
||||
scrollLeft: 0,
|
||||
stickyTop: this.CustomBar,
|
||||
pageNum: 1,
|
||||
|
|
@ -242,7 +261,7 @@
|
|||
}, {
|
||||
code: 'reset',
|
||||
type: 1,
|
||||
title: '重置',
|
||||
title: '重置/刷新',
|
||||
action: 'resetConditions'
|
||||
}],
|
||||
originTaskConditions: [{
|
||||
|
|
@ -294,10 +313,15 @@
|
|||
workerStreetIds: [],
|
||||
workerFirstCategoryIds: [],
|
||||
workerSecondCategoryIds: [],
|
||||
workerThirdCategoryIds: []
|
||||
workerThirdCategoryIds: [],
|
||||
showInsuranceDetail: false,
|
||||
workerProvinceIds: []
|
||||
}
|
||||
},
|
||||
onShow() {
|
||||
onLoad(option) {
|
||||
if(option && option.orderType) {
|
||||
this.orderType = option.orderType
|
||||
}
|
||||
this.loadData();
|
||||
},
|
||||
methods: {
|
||||
|
|
@ -339,29 +363,47 @@
|
|||
},
|
||||
async getWorkerAreaIds() {
|
||||
let res = await this.$request.getWorkerArea({
|
||||
workerId: this.curUserInfo.workerId
|
||||
workerId: this.curUserInfo.workerId,
|
||||
serviceType: this.orderType == 0 ? 1 : 2
|
||||
});
|
||||
let cityIds = [];
|
||||
let districtIds = [];
|
||||
let streetIds = [];
|
||||
for(let i = 0; i < res.data.length; i++) {
|
||||
if (cityIds.indexOf(res.data[i].cityId) === -1) {
|
||||
cityIds.push(res.data[i].cityId)
|
||||
|
||||
if(this.orderType == 0 ) {
|
||||
let cityIds = [];
|
||||
let districtIds = [];
|
||||
let streetIds = [];
|
||||
for(let i = 0; i < res.data.length; i++) {
|
||||
if (cityIds.indexOf(res.data[i].cityId) === -1) {
|
||||
cityIds.push(res.data[i].cityId)
|
||||
}
|
||||
if (districtIds.indexOf(res.data[i].districtId) === -1) {
|
||||
districtIds.push(res.data[i].districtId)
|
||||
}
|
||||
if (streetIds.indexOf(res.data[i].streetId) === -1) {
|
||||
streetIds.push(res.data[i].streetId)
|
||||
}
|
||||
}
|
||||
if (districtIds.indexOf(res.data[i].districtId) === -1) {
|
||||
districtIds.push(res.data[i].districtId)
|
||||
}
|
||||
if (streetIds.indexOf(res.data[i].streetId) === -1) {
|
||||
streetIds.push(res.data[i].streetId)
|
||||
this.workerCityIds = cityIds;
|
||||
this.workerDistrictIds = districtIds;
|
||||
this.workerStreetIds = streetIds;
|
||||
} else {
|
||||
let provinceIds = [];
|
||||
let cityIds = [];
|
||||
for(let i = 0; i < res.data.length; i++) {
|
||||
if (cityIds.indexOf(res.data[i].cityId) === -1) {
|
||||
cityIds.push(res.data[i].cityId)
|
||||
}
|
||||
if (provinceIds.indexOf(res.data[i].provinceId) === -1) {
|
||||
provinceIds.push(res.data[i].provinceId)
|
||||
}
|
||||
}
|
||||
this.workerProvinceIds = provinceIds;
|
||||
this.workerCityIds = cityIds;
|
||||
}
|
||||
this.workerCityIds = cityIds;
|
||||
this.workerDistrictIds = districtIds;
|
||||
this.workerStreetIds = streetIds;
|
||||
},
|
||||
async getWorkerDataCategoryIds() {
|
||||
let res = await this.$request.getWorkerGoodsCategory({
|
||||
workerId: this.curUserInfo.workerId
|
||||
workerId: this.curUserInfo.workerId,
|
||||
serviceType: this.orderType == 0 ? 1 : 2
|
||||
});
|
||||
let firstGoodsCategoryIds = [];
|
||||
let secondGoodsCategoryIds = [];
|
||||
|
|
@ -387,6 +429,7 @@
|
|||
params.orderStatus = 0;
|
||||
params.workerId = -1;
|
||||
params.goodsName = this.inputGoodsName;
|
||||
params.orderType = this.orderType;
|
||||
this.taskConditions.forEach((condition) => {
|
||||
if (condition.type === 2) {
|
||||
params[condition.code] = condition.value;
|
||||
|
|
@ -470,24 +513,24 @@
|
|||
},
|
||||
async loadCategoryList(idArr) {
|
||||
let typeList = await this.$request.listByStep({
|
||||
type: 1
|
||||
type: this.orderType == 0 ? 1 : 2
|
||||
});
|
||||
typeList = typeList.data;
|
||||
let col1Id = idArr ? idArr[0] : typeList[0].goodsCategoryId;
|
||||
let subTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.orderType == 0 ? 1 : 2,
|
||||
goodsCategoryId: col1Id
|
||||
});
|
||||
subTypeList = subTypeList.data;
|
||||
let col2Id = idArr ? idArr[1] : subTypeList[0].goodsCategoryId;
|
||||
let subSubTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.orderType == 0 ? 1 : 2,
|
||||
goodsCategoryId: col2Id
|
||||
});
|
||||
subSubTypeList = subSubTypeList.data;
|
||||
let col3Id = idArr ? idArr[2] : subSubTypeList[0].goodsCategoryId;
|
||||
let thirdTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.orderType == 0 ? 1 : 2,
|
||||
goodsCategoryId: col3Id
|
||||
});
|
||||
thirdTypeList = thirdTypeList.data;
|
||||
|
|
@ -510,43 +553,69 @@
|
|||
this.categoryList.push(thirdTypeList);
|
||||
},
|
||||
async loadRegionList() {
|
||||
let regionList = await this.$request.areaListByStep({
|
||||
areaIds: this.workerCityIds,
|
||||
parentCode: ''
|
||||
});
|
||||
regionList = regionList.data;
|
||||
let subRegionList = [];
|
||||
let subSubRegionList = [];
|
||||
if (regionList && regionList.length > 0) {
|
||||
subRegionList = await this.$request.areaListByStep({
|
||||
parentCode: regionList[0].areaCode,
|
||||
areaIds: this.workerDistrictIds
|
||||
if(this.orderType == 0) {
|
||||
let regionList = await this.$request.areaListByStep({
|
||||
areaIds: this.workerCityIds,
|
||||
parentCode: ''
|
||||
});
|
||||
subRegionList = subRegionList.data;
|
||||
}
|
||||
if (subRegionList && subRegionList.length > 0) {
|
||||
subSubRegionList = await this.$request.areaListByStep({
|
||||
parentCode: subRegionList[0].areaCode,
|
||||
areaIds: this.workerStreetIds
|
||||
regionList = regionList.data;
|
||||
let subRegionList = [];
|
||||
let subSubRegionList = [];
|
||||
if (regionList && regionList.length > 0) {
|
||||
subRegionList = await this.$request.areaListByStep({
|
||||
parentCode: regionList[0].areaCode,
|
||||
areaIds: this.workerDistrictIds
|
||||
});
|
||||
subRegionList = subRegionList.data;
|
||||
}
|
||||
if (subRegionList && subRegionList.length > 0) {
|
||||
subSubRegionList = await this.$request.areaListByStep({
|
||||
parentCode: subRegionList[0].areaCode,
|
||||
areaIds: this.workerStreetIds
|
||||
});
|
||||
subSubRegionList = subSubRegionList.data;
|
||||
}
|
||||
// 加上“全部”节点
|
||||
regionList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
subSubRegionList = subSubRegionList.data;
|
||||
subRegionList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
subSubRegionList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
this.areaList.push(regionList);
|
||||
this.areaList.push(subRegionList);
|
||||
this.areaList.push(subSubRegionList);
|
||||
} else {
|
||||
let regionList = await this.$request.areaListByStep({
|
||||
areaIds: this.workerProvinceIds,
|
||||
parentCode: ''
|
||||
});
|
||||
regionList = regionList.data;
|
||||
let subRegionList = [];
|
||||
if (regionList && regionList.length > 0) {
|
||||
subRegionList = await this.$request.areaListByStep({
|
||||
parentCode: regionList[0].areaCode,
|
||||
areaIds: this.workerCityIds
|
||||
});
|
||||
subRegionList = subRegionList.data;
|
||||
}
|
||||
regionList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
subRegionList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
this.areaList.push(regionList);
|
||||
this.areaList.push(subRegionList);
|
||||
}
|
||||
// 加上“全部”节点
|
||||
regionList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
subRegionList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
subSubRegionList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
this.areaList.push(regionList);
|
||||
this.areaList.push(subRegionList);
|
||||
this.areaList.push(subSubRegionList);
|
||||
},
|
||||
searchTasks() {
|
||||
this.reloadMasterOrderPage();
|
||||
|
|
@ -577,47 +646,51 @@
|
|||
},
|
||||
async regionColChange(e) {
|
||||
let colObj = e.detail;
|
||||
if (colObj.column == 0) {
|
||||
// 通过一级查二级
|
||||
let subAreaList = await this.$request.areaListByStep({parentCode: this.areaList[0][colObj.value].areaCode, areaIds: this.workerDistrictIds});
|
||||
subAreaList = subAreaList.data;
|
||||
let subSubAreaList = [];
|
||||
if (subAreaList.length) {
|
||||
subSubAreaList = await this.$request.areaListByStep({parentCode: subAreaList[0].areaCode, areaIds: this.workerStreetIds});
|
||||
subSubAreaList = subSubAreaList.data;
|
||||
if(this.orderType == 0) {
|
||||
if (colObj.column == 0) {
|
||||
// 通过一级查二级
|
||||
let subAreaList = await this.$request.areaListByStep({parentCode: this.areaList[0][colObj.value].areaCode, areaIds: this.workerDistrictIds});
|
||||
subAreaList = subAreaList.data;
|
||||
let subSubAreaList = [];
|
||||
if (subAreaList.length) {
|
||||
subSubAreaList = await this.$request.areaListByStep({parentCode: subAreaList[0].areaCode, areaIds: this.workerStreetIds});
|
||||
subSubAreaList = subSubAreaList.data;
|
||||
}
|
||||
// 加上“全部”节点
|
||||
if (subAreaList.length > 0) {
|
||||
subAreaList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
}
|
||||
if (subSubAreaList.length > 0) {
|
||||
subSubAreaList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
}
|
||||
this.areaList.pop();
|
||||
this.areaList.pop();
|
||||
this.areaList.push(subAreaList);
|
||||
this.areaList.push(subSubAreaList);
|
||||
this.areaMultiIndex = [colObj.value, 0, 0];
|
||||
} else if (colObj.column == 1) {
|
||||
// 通过二级查三级
|
||||
let subAreaList = await this.$request.areaListByStep({parentCode: this.areaList[1][colObj.value].areaCode, areaIds: this.workerStreetIds});
|
||||
subAreaList = subAreaList.data;
|
||||
// 加上“全部”节点
|
||||
if (subAreaList.length > 0) {
|
||||
subAreaList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
}
|
||||
this.areaList.pop();
|
||||
this.areaList.push(subAreaList);
|
||||
this.areaMultiIndex = [this.areaMultiIndex[0], colObj.value, 0];
|
||||
}
|
||||
// 加上“全部”节点
|
||||
if (subAreaList.length > 0) {
|
||||
subAreaList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
}
|
||||
if (subSubAreaList.length > 0) {
|
||||
subSubAreaList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
}
|
||||
this.areaList.pop();
|
||||
this.areaList.pop();
|
||||
this.areaList.push(subAreaList);
|
||||
this.areaList.push(subSubAreaList);
|
||||
this.areaMultiIndex = [colObj.value, 0, 0];
|
||||
} else if (colObj.column == 1) {
|
||||
// 通过二级查三级
|
||||
let subAreaList = await this.$request.areaListByStep({parentCode: this.areaList[1][colObj.value].areaCode, areaIds: this.workerStreetIds});
|
||||
subAreaList = subAreaList.data;
|
||||
// 加上“全部”节点
|
||||
if (subAreaList.length > 0) {
|
||||
subAreaList.unshift({
|
||||
areaName: '全部',
|
||||
areaId: -1
|
||||
});
|
||||
}
|
||||
this.areaList.pop();
|
||||
this.areaList.push(subAreaList);
|
||||
this.areaMultiIndex = [this.areaMultiIndex[0], colObj.value, 0];
|
||||
} else {
|
||||
// 商品改变
|
||||
}
|
||||
},
|
||||
async categoryChange(e) {
|
||||
|
|
@ -639,14 +712,14 @@
|
|||
if (colObj.column == 0) {
|
||||
// 通过一级查询二级
|
||||
let subTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.orderType == 0 ? 1 : 2,
|
||||
goodsCategoryId: this.categoryList[0][colObj.value].goodsCategoryId
|
||||
});
|
||||
subTypeList = subTypeList.data;
|
||||
let subSubTypeList = [];
|
||||
if (subTypeList && subTypeList.length) {
|
||||
subSubTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.orderType == 0 ? 1 : 2,
|
||||
goodsCategoryId: subTypeList[0].goodsCategoryId
|
||||
});
|
||||
subSubTypeList = subSubTypeList.data;
|
||||
|
|
@ -668,7 +741,7 @@
|
|||
} else if (colObj.column == 1) {
|
||||
// 通过二级查三级
|
||||
let subSubTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.orderType == 0 ? 1 : 2,
|
||||
goodsCategoryId: this.categoryList[1][colObj.value].goodsCategoryId
|
||||
});
|
||||
subSubTypeList = subSubTypeList.data;
|
||||
|
|
@ -684,7 +757,8 @@
|
|||
},
|
||||
showDemandDetail(e, task) {
|
||||
let paramObj = {
|
||||
orderMasterId: task.orderMasterId
|
||||
orderMasterId: task.orderMasterId,
|
||||
orderType: this.orderType
|
||||
}
|
||||
uni.navigateTo({
|
||||
url: '/pages/demand-center/demand-detail?paramObj=' + encodeURIComponent(JSON.stringify(
|
||||
|
|
@ -735,9 +809,18 @@
|
|||
// uni.makePhoneCall({
|
||||
// phoneNumber: this.curTask.customerPhone
|
||||
// })
|
||||
uni.navigateTo({
|
||||
url: '/pages/order-manage/order-manage'
|
||||
})
|
||||
// uni.navigateTo({
|
||||
// url: '/pages/order-manage/order-manage'
|
||||
// })
|
||||
if(this.orderType == 0) {
|
||||
uni.navigateTo({
|
||||
url: '/pages/order-manage/order-manage?orderType=0'
|
||||
})
|
||||
} else {
|
||||
uni.navigateTo({
|
||||
url: '/pages/order-manage/order-manage-parts?orderType=1'
|
||||
})
|
||||
}
|
||||
},
|
||||
goToCertify() {
|
||||
uni.navigateTo({
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
</view>
|
||||
<view class="margin-top-sm">
|
||||
<text class="text-main-color text-lg margin-right-xs"><text class="cuIcon-locationfill"></text></text>
|
||||
<text>{{order.address}}</text>
|
||||
<text>{{order.provinceName + order.cityName + order.countryName + order.streetName + order.address}}</text>
|
||||
</view>
|
||||
<view class="margin-top-sm">
|
||||
<text class="text-main-color text-lg margin-right-xs"><text class="cuIcon-timefill"></text></text>
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
</view>
|
||||
<view class="margin-bottom-sm"><text class="text-bold">订单编码:</text>{{order.orderMasterCode}}</view>
|
||||
<view class="margin-bottom-sm"><text class="text-bold">订单时间:</text>{{order.createTime}}</view>
|
||||
<view class="margin-bottom-sm"><text class="text-bold">备注:</text>{{order.remark}}</view>
|
||||
<view class="margin-bottom-sm"><text class="text-bold">备注:</text>{{order.customerRemark}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="cu-bar tabbar border shop fixed-bottom-bar">
|
||||
|
|
@ -188,9 +188,16 @@
|
|||
// uni.makePhoneCall({
|
||||
// phoneNumber: this.order.customerPhone
|
||||
// })
|
||||
uni.navigateTo({
|
||||
url: '/pages/order-manage/order-manage'
|
||||
})
|
||||
|
||||
if(this.initParam.orderType === 1) {
|
||||
uni.navigateTo({
|
||||
url: '/pages/order-manage/order-manage-parts?orderType=1'
|
||||
})
|
||||
} else {
|
||||
uni.navigateTo({
|
||||
url: '/pages/order-manage/order-manage?orderType=0'
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,16 +7,104 @@
|
|||
</cu-custom>
|
||||
<!-- 规则内容 -->
|
||||
<view class="padding bg-white">
|
||||
<view v-if="!hasCheckedRule">
|
||||
<!-- v-if="hasCheckedRule" -->
|
||||
<text style="color: red;">进入接单大厅前,请先阅读并了解本服务规则标准,有利于以良好的服务定位进行服务工作,阅读学习后请打勾并确认。本规则后续可在主页右上角“服务规则”处查看。</text>
|
||||
</view>
|
||||
<view style="padding: 10upx 0;">
|
||||
<text style="font-weight: 500;">接单规则:【晚19点至早8点不计超时】</text>
|
||||
</view>
|
||||
<checkbox-group class="block" @change="checkRule">
|
||||
<view class="flex justify-start align-start margin-top-xs" v-for="(item, index) in masterRules">
|
||||
<view class="flex justify-start align-start margin-top-xs" v-for="(item, index) in masterRules" :key="index">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>{{item}}</text>
|
||||
</view>
|
||||
<view style="padding: 10upx 0;">
|
||||
<text style="font-weight: 500;">服务流程:</text>
|
||||
</view>
|
||||
<view class="flex justify-start align-start margin-top-xs">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>对话文明有礼(电话及上门会面时)、工服/鞋套/口罩齐备、设备工具/防护/地垫齐全;事前有试机、流程有沟通有确认、问题指出留证据、完工有复查、卫生全干净、客户现场给意见/验收/评价到位再出门(杜绝二次上门及投诉发生率)</text>
|
||||
</view>
|
||||
<view style="padding: 10upx 0;">
|
||||
<text style="font-weight: 500;">异常处理:</text>
|
||||
</view>
|
||||
<view class="flex justify-start align-start margin-top-xs">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>客户异常:不同时间段多次联系未成功,短信留言客户,并点“无法排单”上传拔打记录或短信截图,均定性为客户原因;约定的上门不成功的,与客户重新约定重新排单。</text>
|
||||
</view>
|
||||
<view class="flex justify-start align-start margin-top-xs">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>师傅异常:因故未能上门,提前与客户协商,同意后点“重新排单”改上门时间,未能谈妥的,报客服处;被投诉无故迟到或未上门或完全不同意师傅的上门时间,你全责。</text>
|
||||
</view>
|
||||
<view class="flex justify-start align-start margin-top-xs">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>异常通报:非师傅原因的服务有问题时,对客户表达到位,否则可能被定义为技能差从而投诉,非师傅的异常,指出后留证据先报至平台,避免师傅责任!</text>
|
||||
</view>
|
||||
<view style="padding: 10upx 0;">
|
||||
<text style="font-weight: 500;">六不红线:</text>
|
||||
</view>
|
||||
<view class="flex justify-start align-start margin-top-xs">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>①代表品牌上门时,不以其它身份沟通;</text>
|
||||
</view>
|
||||
<view class="flex justify-start align-start margin-top-xs">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>②不谈论产品价格及服务费用;</text>
|
||||
</view>
|
||||
<view class="flex justify-start align-start margin-top-xs">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>③不发表与服务无关的言论;</text>
|
||||
</view>
|
||||
<view class="flex justify-start align-start margin-top-xs">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>④不撬订单,否则一定会被品牌方追究;</text>
|
||||
</view>
|
||||
<view class="flex justify-start align-start margin-top-xs">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>⑤不得发生争吵,争吵无论对错,师傅全责;</text>
|
||||
</view>
|
||||
<view class="flex justify-start align-start margin-top-xs">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>⑥不得使用客户家里损耗类物品。</text>
|
||||
</view>
|
||||
|
||||
<view style="padding: 10upx 0;">
|
||||
<text style="font-weight: 500;">沟通原则:</text>
|
||||
</view>
|
||||
<view class="flex justify-start align-start margin-top-xs">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>服务前及服务中,存在沟通分岐问题不能说“不知道”、“不关我事”、“你退单”等缺失服务水平言语,有分岐应该客气和平的处理,不要反复去证明客户错了,遇事只提出你的积极解决方案,以解决完事为准则。如超能力处理范围或客户要求确实过份可说“抱歉,这个问题我现在反映给公司为您处理”,公司或平台客服接手后,须离开的与客户打个招呼,否则未确认接手及未打招呼离开或丢下不管,客诉你全责。</text>
|
||||
</view>
|
||||
|
||||
<view style="padding: 10upx 0;">
|
||||
<text style="font-weight: 500;">客诉界定:</text>
|
||||
</view>
|
||||
<view class="flex justify-start align-start margin-top-xs">
|
||||
<checkbox style="transform:scale(0.7)" class="main-color" :checked="hasCheckedRule" value='1'>
|
||||
</checkbox>
|
||||
<text>客诉无小事,重要不属师傅的责任,那都不是事。属师傅责任,那就都是事。有责的客诉,将被追责,最高按订单额10%-50%或1000元处罚或赔偿损失(以实际事实为准)。</text>
|
||||
</view>
|
||||
|
||||
</checkbox-group>
|
||||
<view class="margin-top-xl">总结【约单迅速,上门准时,友好客气,分清责任,不踩红线,流程沟通,验收评价,完单复查,前后确认】</view>
|
||||
<!-- 操作按钮 -->
|
||||
<view class="cu-bar tabbar border shop margin-top-lg">
|
||||
<view class="margin-top-lg" style="text-align: center;" v-if="!hasCheckedRule">
|
||||
<text>我已认真阅读并知晓规则</text>
|
||||
</view>
|
||||
<view class="cu-bar tabbar border shop">
|
||||
<button class="cu-btn bg-main-color long-btn margin-lr-sm" type="" :disabled="hasCheckedRule"
|
||||
@click="acceptRules">{{hasCheckedRule ? '已同意' : '同意'}}</button>
|
||||
</view>
|
||||
|
|
@ -58,19 +146,22 @@
|
|||
checkedTimes++;
|
||||
}
|
||||
}
|
||||
if (checkedTimes === this.masterRules.length) {
|
||||
if (checkedTimes === 17) {
|
||||
uni.showToast({
|
||||
icon: 'success',
|
||||
mask: true
|
||||
})
|
||||
uni.setStorageSync('hasCheckedRule', 1)
|
||||
if (this.navigate) {
|
||||
uni.navigateTo({
|
||||
url: '/pages/demand-center/accept-demand-center'
|
||||
})
|
||||
} else {
|
||||
uni.navigateBack()
|
||||
}
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '请逐条阅读,并在框内打勾,完成规则学习',
|
||||
title: '请逐条阅读并在框内打勾,完成规则学习',
|
||||
icon: 'none',
|
||||
mask: true
|
||||
})
|
||||
|
|
|
|||
|
|
@ -18,59 +18,61 @@
|
|||
<!-- 条件筛选栏 -->
|
||||
<view class="padding bg-white solid-bottom">
|
||||
<view class="flex justify-between align-center">
|
||||
<input class="line-input radius-input" v-model="formData.keywords" placeholder="请输入关键字"></input>
|
||||
<button class="cu-btn bg-main-color shadow-blur">搜索</button>
|
||||
<input class="line-input radius-input" v-model="keywords" :placeholder="tabCur == 0 ? '可搜索服务名称/标题或城市名或区县名' : '可搜索商品名称/标题或城市名或区县名'"></input>
|
||||
<button class="cu-btn bg-main-color shadow-blur" @click="reloadData">搜索</button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- tab content -->
|
||||
<view>
|
||||
<view class="padding bg-white margin-top-sm margin-lr-sm name-card" v-for="(good, index) in goodsList" v-if="good.status !== 2">
|
||||
<view class="flex justify-start">
|
||||
<view class="cu-avatar xxl-view" :style="'background-image:url(' + good.goodsImgUrl + ');'"></view>
|
||||
<view class="margin-left-sm flex-column-between">
|
||||
<view class="text-black text-cut" style="width: 330rpx;">{{good.goodsName}}</view>
|
||||
<view>
|
||||
<view v-if="good.goodsStandardList[0].discountPrice" class="flex justify-start align-center">
|
||||
<text class="text-price text-red text-bold text-lg">{{good.goodsStandardList[0].discountPrice}}</text>
|
||||
<text class="text-del" v-if="good.goodsPrice">¥{{good.goodsStandardList[0].goodsPrice}}</text>
|
||||
</view>
|
||||
<view v-else-if="good.goodsStandardList[0].goodsPrice" class="flex justify-start align-center">
|
||||
<text class="text-price text-red text-bold text-lg">{{good.goodsStandardList[0].goodsPrice}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-gray" v-if="good.remark">{{good.remark}}</view>
|
||||
<view v-if="good.goodsAreaList && good.goodsAreaList.length">
|
||||
<view class="cu-capsule">
|
||||
<view class='cu-tag bg-main-color sm'>
|
||||
<text class='cuIcon-locationfill'></text>
|
||||
<view class="padding bg-white margin-top-sm margin-lr-sm name-card" v-for="(good, index) in goodsList" :key="good.id">
|
||||
<template v-if="good.status !== 2">
|
||||
<view class="flex justify-start">
|
||||
<view class="cu-avatar xxl-view" :style="'background-image:url(' + good.goodsImgUrl + ');'"></view>
|
||||
<view class="margin-left-sm flex-column-between">
|
||||
<view class="text-black text-cut" style="width: 330rpx;">{{good.goodsName}}</view>
|
||||
<view>
|
||||
<view v-if="good.goodsStandardList[0].discountPrice" class="flex justify-start align-center">
|
||||
<text class="text-price text-red text-bold text-lg">{{good.goodsStandardList[0].discountPrice}}</text>
|
||||
<text class="text-del" v-if="good.goodsPrice">¥{{good.goodsStandardList[0].goodsPrice}}</text>
|
||||
</view>
|
||||
<view class="cu-tag line-main-color sm">
|
||||
服务区域
|
||||
<view v-else-if="good.goodsStandardList[0].goodsPrice" class="flex justify-start align-center">
|
||||
<text class="text-price text-red text-bold text-lg">{{good.goodsStandardList[0].goodsPrice}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<text v-for="(item,index) in good.goodsAreaList">
|
||||
<text class="margin-lr-xs text-sm">{{item.areaName}}<text v-if="index != good.goodsAreaList.length - 1">,</text></text>
|
||||
</text>
|
||||
<!-- <view class="text-gray" v-if="good.remark">{{good.remark}}</view> -->
|
||||
<view v-if="good.goodsAreaList && good.goodsAreaList.length">
|
||||
<view class="cu-capsule">
|
||||
<view class='cu-tag bg-main-color sm'>
|
||||
<text class='cuIcon-locationfill'></text>
|
||||
</view>
|
||||
<view class="cu-tag line-main-color sm">
|
||||
服务区域
|
||||
</view>
|
||||
</view>
|
||||
<text v-for="(item,index) in good.goodsAreaList" :key="item.goodsId">
|
||||
<text class="margin-lr-xs text-sm">{{item.areaName}}<text v-if="index != good.goodsAreaList.length - 1">,</text></text>
|
||||
</text>
|
||||
</view>
|
||||
<!-- <view class="text-gray">团购日期:</view> -->
|
||||
<!-- <uni-datetime-picker :value="good.groupBuyDate" type="datetimerange" rangeSeparator="至" @change="changeGroupBuyDate($event, good)"/> -->
|
||||
</view>
|
||||
<!-- <view class="text-gray">团购日期:</view> -->
|
||||
<!-- <uni-datetime-picker :value="good.groupBuyDate" type="datetimerange" rangeSeparator="至" @change="changeGroupBuyDate($event, good)"/> -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex justify-end oper-bar">
|
||||
<view class="text-center margin-right-sm" v-if="good.isGoldenServ">
|
||||
<view class="cuIcon-selectionfill text-orange"></view>
|
||||
<view class="text-xs">金牌服务</view>
|
||||
<view class="flex justify-end oper-bar">
|
||||
<view class="text-center margin-right-sm" v-if="good.isGoldenServ">
|
||||
<view class="cuIcon-selectionfill text-orange"></view>
|
||||
<view class="text-xs">金牌服务</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view>
|
||||
<button class="cu-btn line-main-color margin-right-xs margin-top-sm" @click="addEditGood(good)">编辑</button>
|
||||
<button class="cu-btn line-main-color margin-right-xs margin-top-sm" v-if="good.status === 0" @click="offGood(good)">下架</button>
|
||||
<button class="cu-btn line-main-color margin-right-xs margin-top-sm" v-if="good.status === 1" @click="onGood(good)">上架</button>
|
||||
<!-- <button class="cu-btn line-main-color margin-right-xs margin-top-sm" @click="copyGood(good)">复制</button> -->
|
||||
<!-- <button class="cu-btn line-main-color margin-right-xs margin-top-sm">优惠券</button> -->
|
||||
<!-- <button class="cu-btn line-red shadow-blur margin-right-xs margin-top-sm" @click="delGood(good)">删除</button> -->
|
||||
</view>
|
||||
<view v-if="good.goodsId">
|
||||
<button class="cu-btn line-main-color margin-right-xs margin-top-sm" @click="() => addEditGood(good.goodsId)">编辑</button>
|
||||
<button class="cu-btn line-main-color margin-right-xs margin-top-sm" v-if="good.status === 0" @click="() => offGood(good)">下架</button>
|
||||
<button class="cu-btn line-main-color margin-right-xs margin-top-sm" v-if="good.status === 1" @click="() => onGood(good)">上架</button>
|
||||
<!-- <button class="cu-btn line-main-color margin-right-xs margin-top-sm" @click="copyGood(good)">复制</button> -->
|
||||
<!-- <button class="cu-btn line-main-color margin-right-xs margin-top-sm">优惠券</button> -->
|
||||
<!-- <button class="cu-btn line-red shadow-blur margin-right-xs margin-top-sm" @click="delGood(good)">删除</button> -->
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -78,7 +80,7 @@
|
|||
<view class="margin-bottom-with-bar"></view>
|
||||
<!-- 底部操作栏 -->
|
||||
<view class="padding-tb-sm flex justify-around padding-tb-sm fixed-bottom-bar-with-bar bg-back">
|
||||
<button class="cu-btn bg-main-color lg shadow-blur margin-left-xs" @click="addEditGood(null)">新增服务</button>
|
||||
<button class="cu-btn bg-main-color lg shadow-blur margin-left-xs" @click="addEditGood(null)">新增{{tabCur === 0 ? '服务' : '货品'}}</button>
|
||||
<button class="cu-btn bg-main-color lg shadow-blur" disabled type="">优惠券</button>
|
||||
<button class="cu-btn bg-main-color lg shadow-blur" disabled type="">暂停售卖</button>
|
||||
<!-- <button class="cu-btn bg-main-color lg shadow-blur margin-right-xs" data-modal="communityModal" @tap="showModal">社区</button> -->
|
||||
|
|
@ -131,13 +133,14 @@
|
|||
},
|
||||
data() {
|
||||
return {
|
||||
keywords: '',
|
||||
tabCur: 0,
|
||||
tabHeaders: [{
|
||||
code: 0,
|
||||
code: 1,
|
||||
name: '服务商品'
|
||||
}, {
|
||||
code: 1,
|
||||
name: '配件商品'
|
||||
code: 2,
|
||||
name: '货物商品'
|
||||
}],
|
||||
scrollLeft: 0,
|
||||
stickyTop: this.CustomBar,
|
||||
|
|
@ -180,9 +183,13 @@
|
|||
params.pageNum = this.pageNum;
|
||||
params.pageSize = this.pageSize;
|
||||
params.workerId = this.$request.getCurUserInfo().workerId;
|
||||
params.keyword = this.keywords;
|
||||
this.$refs.loadStatusBar.showLoading();
|
||||
try {
|
||||
let res = await this.$request.qryProductPage(params);
|
||||
let res = await this.$request.qryProductPage({
|
||||
...params,
|
||||
type: this.tabHeaders[this.tabCur].code
|
||||
});
|
||||
let rowsLength = res.rows.length;
|
||||
if (rowsLength > 0) {
|
||||
this.goodsList = this.goodsList.concat(res.rows);
|
||||
|
|
@ -209,6 +216,7 @@
|
|||
tabSelect(e) {
|
||||
this.tabCur = e.currentTarget.dataset.id;
|
||||
this.scrollLeft = (e.currentTarget.dataset.id - 1) * 60
|
||||
this.reloadData()
|
||||
},
|
||||
showModal(e) {
|
||||
let modalName = e.currentTarget.dataset.modal;
|
||||
|
|
@ -279,14 +287,23 @@
|
|||
comfirmCommunity() {
|
||||
|
||||
},
|
||||
addEditGood(servItem) {
|
||||
let params = '';
|
||||
if (servItem != null) {
|
||||
params = '?goodId=' + servItem.goodsId
|
||||
addEditGood(goodsId) {
|
||||
let params = '?type='+this.tabHeaders[this.tabCur].code;
|
||||
const curType = this.tabHeaders[this.tabCur].code
|
||||
if (goodsId != null) {
|
||||
params = '?goodId=' + goodsId + '&type='+curType
|
||||
}
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/new-serv' + params
|
||||
})
|
||||
console.log(params);
|
||||
if(curType === 1) {
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/new-serv' + params
|
||||
})
|
||||
} else {
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/new-serv-parts' + params
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,19 +19,19 @@
|
|||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="right-tag padding-lr padding-tb-xs" @click="showMasterRule">师傅规则</view> -->
|
||||
<view class="right-tag padding-lr padding-tb-xs" @click="showMasterRule">服务规则</view>
|
||||
</view>
|
||||
<!-- 未预约,未派单,上门超时 -->
|
||||
<view class="cu-list grid no-border col-3 margin-top-sm" style="background-color: inherit;">
|
||||
<view class="cu-item">
|
||||
<view class="cu-item" @click="gotoOrderNew">
|
||||
<view class="margin-bottom-xs text-xxl">{{orderStatistics.newOrderNum}}</view>
|
||||
<view>新订单</view>
|
||||
</view>
|
||||
<view class="cu-item">
|
||||
<view class="cu-item" @click="goToOrder">
|
||||
<view class="margin-bottom-xs text-xxl">{{orderStatistics.planOrderNum}}</view>
|
||||
<view>未排单</view>
|
||||
</view>
|
||||
<view class="cu-item">
|
||||
<view class="cu-item" @click="goToOrder">
|
||||
<view class="margin-bottom-xs text-xxl">0</view>
|
||||
<view>上门超时</view>
|
||||
</view>
|
||||
|
|
@ -43,13 +43,13 @@
|
|||
<view class="cu-bar margin-top-sm solid-bottom">
|
||||
<view class="action bar-first-action">
|
||||
<view class="cuIcon-title text-main-color"></view>
|
||||
<text>今日待上门({{waitServOrderToday.length}})</text>
|
||||
<text>今日待处理({{waitServOrderToday.length}})</text>
|
||||
</view>
|
||||
<view class="flex justify-end text-sm align-center"
|
||||
@click="clickServModule({
|
||||
pageUrl: '/pages/order-manage/order-manage'
|
||||
pageUrl: waitServOrderToday[0].orderType === 1 ? '/pages/order-manage/order-manage-parts' : '/pages/order-manage/order-manage'
|
||||
})">
|
||||
<text>即将上门订单</text>
|
||||
<text>即将处理订单</text>
|
||||
<text class="cuIcon-right"></text>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
</swiper-item>
|
||||
</swiper>
|
||||
<view v-else class="screen-swiper padding text-center text-gray">
|
||||
今日无待上门订单
|
||||
今日无待处理订单
|
||||
</view>
|
||||
</view>
|
||||
<!-- 每周公告 -->
|
||||
|
|
@ -96,15 +96,15 @@
|
|||
<view hover-class="none" class="nav-li serv-module" @click="clickServModule(item)"
|
||||
:class="'bg-'+item.color" :style="[{animation: 'show ' + ((index+1)*0.2+1) + 's 1'}]"
|
||||
v-for="(item,index) in servModules " :key="index">
|
||||
<template v-if="item.id !== 4">
|
||||
<!-- <template v-if="item.id !== 4"> -->
|
||||
<view :class="index === 0 ? 'text-xxl' : 'text-xl'">{{item.title}}</view>
|
||||
<!-- <view class="nav-name">{{item.name}}</view> -->
|
||||
<text :class="'cuIcon-' + item.cuIcon"></text>
|
||||
</template>
|
||||
<button data-name="shareBtn" open-type="share" hover-class="none" v-else>
|
||||
<!-- </template> -->
|
||||
<!-- <button data-name="shareBtn" open-type="share" hover-class="none" v-else>
|
||||
<view :class="index === 0 ? 'text-xxl' : 'text-xl'">{{item.title}}</view>
|
||||
<text :class="'cuIcon-' + item.cuIcon"></text>
|
||||
</button>
|
||||
</button> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -135,26 +135,28 @@
|
|||
checkLogin: true
|
||||
}, {
|
||||
id: 2,
|
||||
title: '我的订单',
|
||||
title: '服务订单',
|
||||
name: '查看详情',
|
||||
color: 'orange',
|
||||
cuIcon: 'text',
|
||||
pageUrl: '/pages/order-manage/order-manage',
|
||||
pageUrl: '/pages/order-manage/order-manage?orderType=0',
|
||||
checkLogin: true
|
||||
}, {
|
||||
id: 3,
|
||||
title: '叮咚学院',
|
||||
title: '商品订单',
|
||||
name: '查看详情',
|
||||
color: 'cyan',
|
||||
cuIcon: 'emoji',
|
||||
pageUrl: ''
|
||||
pageUrl: '/pages/order-manage/order-manage-parts?orderType=1',
|
||||
checkLogin: true
|
||||
}, {
|
||||
id: 4,
|
||||
title: '邀请师傅',
|
||||
title: '商品大厅',
|
||||
name: '查看详情',
|
||||
color: 'pink',
|
||||
cuIcon: 'profile',
|
||||
pageUrl: ''
|
||||
pageUrl: '/pages/demand-center/accept-demand-center?orderType=1',
|
||||
checkLogin: true
|
||||
}, {
|
||||
id: 5,
|
||||
title: '区域代理',
|
||||
|
|
@ -165,7 +167,7 @@
|
|||
checkLogin: true
|
||||
}],
|
||||
curUserInfo: {},
|
||||
myInfo: {},
|
||||
// myInfo: {},
|
||||
waitServOrderToday: [],
|
||||
orderStatistics: {},
|
||||
isShowSteer: false,
|
||||
|
|
@ -178,14 +180,12 @@
|
|||
this.loadData();
|
||||
},
|
||||
methods: {
|
||||
test() {
|
||||
|
||||
},
|
||||
async authLogin() {
|
||||
// 更新缓存中的userInfo
|
||||
// let res = await this.$request.storageExistUser();
|
||||
// 获取缓存中的userInfo
|
||||
let curUserInfo = this.$request.getCurUserInfo();
|
||||
console.log(curUserInfo);
|
||||
// 校验提示登录
|
||||
// if (!curUserInfo || !curUserInfo.openId) {
|
||||
// this.$refs.vertifyLogin.showModal();
|
||||
|
|
@ -218,20 +218,23 @@
|
|||
this.$refs.vertifyWorkerType.showModal();
|
||||
return false;
|
||||
}
|
||||
this.loadData();
|
||||
// if(Object.keys('orderStatistics').length === 0) {
|
||||
// this.loadData();
|
||||
// }
|
||||
return true;
|
||||
},
|
||||
async loadData() {
|
||||
// 获取缓存中的userInfo
|
||||
this.curUserInfo = this.$request.getCurUserInfo();
|
||||
this.myInfo = await this.$api.data('myInfo');
|
||||
// this.myInfo = await this.$api.data('myInfo');
|
||||
// this.isShowSteer = !this.myInfo.entryType;
|
||||
const hasCheckedRule = !!uni.getStorageSync('hasCheckedRule')
|
||||
let newServModules = this.servModules.concat();
|
||||
if (this.myInfo.hasCheckedRule) {
|
||||
newServModules[0].pageUrl = '/pages/demand-center/accept-demand-center';
|
||||
if (hasCheckedRule) {
|
||||
newServModules[0].pageUrl = '/pages/demand-center/accept-demand-center?orderType=0';
|
||||
} else {
|
||||
let paramObj = {
|
||||
hasCheckedRule: this.myInfo.hasCheckedRule,
|
||||
hasCheckedRule: hasCheckedRule,
|
||||
navigate: true
|
||||
}
|
||||
newServModules[0].pageUrl = '/pages/demand-center/rule?paramObj=' + encodeURIComponent(JSON
|
||||
|
|
@ -262,8 +265,9 @@
|
|||
this[e.currentTarget.dataset.modal] = false;
|
||||
},
|
||||
showMasterRule() {
|
||||
const hasCheckedRule = !!uni.getStorageSync('hasCheckedRule')
|
||||
let paramObj = {
|
||||
hasCheckedRule: this.myInfo.hasCheckedRule,
|
||||
hasCheckedRule: hasCheckedRule,
|
||||
navigate: false
|
||||
}
|
||||
uni.navigateTo({
|
||||
|
|
@ -282,13 +286,51 @@
|
|||
if (pageObj.checkLogin) {
|
||||
let res = await this.authLogin();
|
||||
if (res) {
|
||||
uni.navigateTo({
|
||||
url: pageObj.pageUrl
|
||||
})
|
||||
// uni.navigateTo({
|
||||
// url: pageObj.pageUrl
|
||||
// })
|
||||
this.toNewPath(pageObj.pageUrl)
|
||||
}
|
||||
} else {
|
||||
// uni.navigateTo({
|
||||
// url: pageObj.pageUrl
|
||||
// })
|
||||
this.toNewPath(pageObj.pageUrl)
|
||||
}
|
||||
},
|
||||
gotoOrderNew() {
|
||||
// uni.navigateTo({
|
||||
// url: '/pages/order-manage/order-manage?stateCur=6'
|
||||
// })
|
||||
this.toNewPath('/pages/order-manage/order-manage?stateCur=6')
|
||||
},
|
||||
goToOrder() {
|
||||
// uni.navigateTo({
|
||||
// url: '/pages/order-manage/order-manage'
|
||||
// })
|
||||
this.toNewPath('/pages/order-manage/order-manage')
|
||||
},
|
||||
async toNewPath(path) {
|
||||
const res = await this.$request.getAndSetWorkerInfo(this.curUserInfo.workerId)
|
||||
if(res.data.loginStatus == 1) {
|
||||
// 禁止登录,退出登录
|
||||
uni.clearStorageSync('userProfile');
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '您已被禁止登录',
|
||||
duration: 3000,
|
||||
success() {
|
||||
setTimeout(() => {
|
||||
uni.reLaunch({
|
||||
url: '/pages/login/login'
|
||||
})
|
||||
}, 3000)
|
||||
}
|
||||
})
|
||||
return
|
||||
} else {
|
||||
uni.navigateTo({
|
||||
url: pageObj.pageUrl
|
||||
url: path
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
data() {
|
||||
return {
|
||||
moduleBarInfos: [],
|
||||
curPageCode: 'indexPage',
|
||||
curPageCode: '',
|
||||
forwardingPageCode: null
|
||||
}
|
||||
},
|
||||
|
|
@ -51,6 +51,8 @@
|
|||
this.loadData();
|
||||
if (options && options.menuCode) {
|
||||
this.changeCurPageCode(options.menuCode)
|
||||
} else {
|
||||
this.curPageCode = 'indexPage'
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="paper-drawer-bar margin-bottom-with-bar">
|
||||
<view class="paper-drawer-bar margin-bottom-with-bar padding-bottom-lg">
|
||||
<view class="margin-lr-sm cu-list grid no-border col-4 shadow-warp">
|
||||
<view class="cu-item">
|
||||
<view class="cuIcon-remind margin-bottom-xs middle-icon"
|
||||
|
|
@ -92,10 +92,17 @@
|
|||
}, {
|
||||
name: '服务明细',
|
||||
icon: 'calendar'
|
||||
}, {
|
||||
name: '师傅入驻',
|
||||
},
|
||||
{
|
||||
name: '服务入驻',
|
||||
icon: 'profile',
|
||||
pageUrl: '/pages/my/master-settled-info',
|
||||
pageUrl: '/pages/my/master-settled-info?type=1',
|
||||
show: true
|
||||
},
|
||||
{
|
||||
name: '商品入驻',
|
||||
icon: 'profile',
|
||||
pageUrl: '/pages/my/master-settled-info?type=2',
|
||||
show: true
|
||||
},
|
||||
{
|
||||
|
|
@ -133,7 +140,8 @@
|
|||
icon: 'exit',
|
||||
pageUrl: '/pages/login/login',
|
||||
show: true
|
||||
}]
|
||||
}],
|
||||
isSixSecord: false
|
||||
}
|
||||
},
|
||||
onReady() {
|
||||
|
|
@ -166,6 +174,9 @@
|
|||
const status = await this.checkBeforeFollow()
|
||||
if(!status) {
|
||||
this.$refs.focusModal.showModal();
|
||||
setTimeout(() => {
|
||||
this.isSixSecord = true
|
||||
}, 6000)
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '您已绑定消息通知',
|
||||
|
|
@ -177,7 +188,7 @@
|
|||
const wxLoginRes = await wx.login();
|
||||
console.log(wxLoginRes);
|
||||
const wxAuthRes = await uni.request({
|
||||
url: '/wx/check',
|
||||
url: '/wx/neCheck',
|
||||
header: {
|
||||
code: wxLoginRes.code
|
||||
}
|
||||
|
|
@ -191,28 +202,18 @@
|
|||
return wxAuthRes[1].data.data
|
||||
},
|
||||
async checkIfFollow() {
|
||||
const status = await this.checkBeforeFollow()
|
||||
// const wxLoginRes = await wx.login();
|
||||
// const wxAuthRes = await uni.request({
|
||||
// url: '/wx/check',
|
||||
// header: {
|
||||
// code: wxLoginRes.code
|
||||
// }
|
||||
// })
|
||||
if(!status) {
|
||||
uni.showToast({
|
||||
title: '请完成公众号关注',
|
||||
icon: 'none'
|
||||
})
|
||||
return;
|
||||
} else {
|
||||
// uni.showToast({
|
||||
// title: '感谢您的关注!',
|
||||
// icon: 'success'
|
||||
// })
|
||||
this.$refs.focusModal.hideModal();
|
||||
return;
|
||||
if(!this.isSixSecord) {
|
||||
const status = await this.checkBeforeFollow()
|
||||
if(!status) {
|
||||
uni.showToast({
|
||||
title: '请先关注公众号',
|
||||
icon: 'none'
|
||||
})
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.$refs.focusModal.hideModal();
|
||||
return;
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@
|
|||
</view>
|
||||
<view class="cu-form-group margin-top">
|
||||
<view class="title">验证码</view>
|
||||
<input class="radius-input" type="number" name="registerCode" v-model="formData.registerCode"
|
||||
<input class="radius-input" type="digit" name="registerCode" v-model="formData.registerCode"
|
||||
placeholder="请输入验证码"></input>
|
||||
<view v-if="countDownNum === 0" class="cu-btn bg-blue round-btn margin-left-xs shadow-blur" @click="sendVertifyCode">发送验证码
|
||||
</view>
|
||||
|
|
@ -99,7 +99,7 @@
|
|||
|
||||
<script>
|
||||
// import inviteMaster from '../area-proxy/modal/invite-master.vue'
|
||||
// 18929577155 qq880920
|
||||
// 18929577155 qq880920 13386441744
|
||||
export default {
|
||||
components: {
|
||||
// inviteMaster
|
||||
|
|
@ -111,7 +111,8 @@
|
|||
countDownNum: 0,
|
||||
agreeContract: false,
|
||||
formData: {},
|
||||
inviter: {}
|
||||
inviter: {},
|
||||
isSixSecord: false
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
|
|
@ -132,12 +133,15 @@
|
|||
this.reset();
|
||||
this.operType = this.operType === 0 ? 1 : 0;
|
||||
if (this.operType === 1) {
|
||||
const status = await this.checkBeforeFollow()
|
||||
if(!status) {
|
||||
// const status = await this.checkBeforeFollow()
|
||||
// if(!status) {
|
||||
this.$refs.focusModal.showModal();
|
||||
} else {
|
||||
this.authLogin();
|
||||
}
|
||||
setTimeout(() => {
|
||||
this.isSixSecord = true
|
||||
}, 6000)
|
||||
// } else {
|
||||
// this.authLogin();
|
||||
// }
|
||||
}
|
||||
},
|
||||
reset() {
|
||||
|
|
@ -344,20 +348,15 @@
|
|||
return wxAuthRes[1].data.data
|
||||
},
|
||||
async checkIfFollow() {
|
||||
const res = await this.checkBeforeFollow()
|
||||
// const wxLoginRes = await wx.login();
|
||||
// const wxAuthRes = await uni.request({
|
||||
// url: '/wx/check',
|
||||
// header: {
|
||||
// code: wxLoginRes.code
|
||||
// }
|
||||
// })
|
||||
if(!res) {
|
||||
uni.showToast({
|
||||
title: '请先关注公众号',
|
||||
icon: 'error'
|
||||
})
|
||||
return
|
||||
if(!this.isSixSecord) {
|
||||
const res = await this.checkBeforeFollow()
|
||||
if(!res) {
|
||||
uni.showToast({
|
||||
title: '请先关注公众号',
|
||||
icon: 'error'
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
this.$refs.focusModal.isShow = false;
|
||||
this.authLogin();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,420 @@
|
|||
<template>
|
||||
<view>
|
||||
<!-- 顶部操作条 -->
|
||||
<cu-custom :bgColor="'bg-main-color'" :isBack="true">
|
||||
<block slot="backText">返回</block>
|
||||
<block slot="content">{{mode === 1 ? '新增' : '编辑'}}店铺</block>
|
||||
</cu-custom>
|
||||
<!-- 地址信息form -->
|
||||
<view class="bg-white margin-top-sm">
|
||||
<form @submit="submit">
|
||||
<view style="padding: 0 30rpx;">
|
||||
<view class="padding-tb-sm flex justify-between align-center">
|
||||
<text>店铺门头</text>
|
||||
<text style="font-size: 20rpx;">1张门头照+3张店内照 (至少1张,门头照排前)</text>
|
||||
</view>
|
||||
<view>
|
||||
<div class="grid col-3 grid-square">
|
||||
<view class="bg-img" v-for="(item,index) in imgList" :key="index"
|
||||
@tap="viewImage($event, imgList)" :data-url="item">
|
||||
<image :src="item" mode="aspectFill"></image>
|
||||
<view class="cu-tag bg-red" @tap.stop="delImg($event, imgList)" :data-index="index">
|
||||
<text class='cuIcon-close'></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="solids" @tap="chooseImage" v-if="imgList.length < 6">
|
||||
<text class='cuIcon-cameraadd'></text>
|
||||
</view>
|
||||
</div>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
<!-- #ifndef H5 || APP-PLUS || MP-ALIPAY -->
|
||||
<view class="cu-form-group">
|
||||
<view class="title">联系地址</view>
|
||||
<picker :mode="'multiSelector'" @change="regionChange" @columnchange="regionColChange" :value="multiIndex" :range-key="'areaName'" :range="areaList">
|
||||
<view class="picker">
|
||||
{{formData.area && formData.area.length ? formData.area[0].areaName + '-' + formData.area[1].areaName + '-' + formData.area[2].areaName + '-' + formData.area[3].areaName : '请选择'}}
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
<!-- #endif -->
|
||||
<view class="cu-form-group">
|
||||
<view class="title">详细地址</view>
|
||||
<input name="address" v-model="formData.address"></input>
|
||||
<view class="text-blue" @click="getLocation">定位上传</view>
|
||||
</view>
|
||||
<view class="cu-form-group">
|
||||
<view class="title">门店名称</view>
|
||||
<input name="shopName" v-model="formData.shopName"></input>
|
||||
</view>
|
||||
<view class="cu-form-group">
|
||||
<view class="title">门店电话</view>
|
||||
<input name="phone" v-model="formData.phone" placeholder="请输入门店客户接待电话"></input>
|
||||
</view>
|
||||
<!-- 底部操作栏 -->
|
||||
<view class="cu-bar tabbar border shop fixed-bottom-bar">
|
||||
<button class="cu-btn bg-main-color long-btn margin-lr-sm shadow-blur" form-type="submit">保存</button>
|
||||
</view>
|
||||
</form>
|
||||
</view>
|
||||
|
||||
|
||||
<!-- <view class="cu-modal" :class="isLocationShow?'show':''">
|
||||
<view class="cu-dialog bg-white">
|
||||
<view class="cu-bar bg-white justify-end solid-bottom">
|
||||
<view class="content">提示</view>
|
||||
<view class="action" @click="isLocationShow = false">
|
||||
<text class="cuIcon-close text-red"></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="padding-xl text-left bg-white">
|
||||
<view>
|
||||
点击确定定位,会按你当前位置上传。(添加店铺本次定位上传时,请在店铺内操作)!
|
||||
</view>
|
||||
</view>
|
||||
<view class="cu-bar bg-white solid-top">
|
||||
<view class="action margin-0 flex-sub text-black" @tap="isLocationShow = false">关闭</view>
|
||||
<view class="action margin-0 flex-sub text-main-color solid-left"
|
||||
@click="getLocation">确定定位</view>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
<!-- 前往授权设置 -->
|
||||
<!-- <view class="cu-modal" :class="isShowPrivSetting?'show':''">
|
||||
<view class="cu-dialog">
|
||||
<view class="padding-xl text-left">
|
||||
<view>需先授权定位功能才可正常使用功能</view>
|
||||
</view>
|
||||
<view class="cu-bar bg-white">
|
||||
<navigator class="modal-bottom-oper margin-0 flex-sub text-black" open-type="exit"
|
||||
target="miniProgram">拒绝授权
|
||||
</navigator>
|
||||
<button class="cu-btn modal-bottom-oper margin-0 flex-sub text-main-color bg-white solid-left"
|
||||
open-type="openSetting" @opensetting="authLocationCallback">前往授权</button>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
areaList: [],
|
||||
multiIndex: [0, 0, 0],
|
||||
formData: {
|
||||
},
|
||||
mode: 1, // 1为新增,0为修改
|
||||
imgList: [],
|
||||
isLocationShow: false,
|
||||
isShowPrivSetting: false
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
let params = JSON.parse(decodeURIComponent(options.params));
|
||||
this.mode = params ? params.mode : this.mode;
|
||||
console.log(this.mode)
|
||||
if (this.mode === 0) {
|
||||
// 修改
|
||||
this.fillForm(params.addressInfo);
|
||||
} else {
|
||||
this.formData = {
|
||||
area: [],
|
||||
shopName: '',
|
||||
address: '',
|
||||
phone: '',
|
||||
provinceId: '',
|
||||
provinceName: '',
|
||||
cityId: '',
|
||||
cityName: '',
|
||||
countryId: '',
|
||||
countryName: '',
|
||||
streetId: '',
|
||||
streetName: '',
|
||||
longitude: '',
|
||||
latitude: ''
|
||||
}
|
||||
}
|
||||
this.loadData();
|
||||
},
|
||||
methods: {
|
||||
chooseImage(e) {
|
||||
uni.chooseMedia({
|
||||
count: 1, //默认9
|
||||
mediaType: ['image'],
|
||||
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
||||
sourceType: ['album'], //从相册选择
|
||||
success: (res) => {
|
||||
uni.showLoading({
|
||||
title: '上传中',
|
||||
mask: true
|
||||
});
|
||||
res.tempFiles.forEach((fileObj, index) => {
|
||||
this.$request.uploadFile(fileObj.tempFilePath).then((url) => {
|
||||
this.imgList.push(url);
|
||||
if (index === res.tempFiles.length - 1) {
|
||||
uni.hideLoading();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
viewImage(e, imgList) {
|
||||
uni.previewImage({
|
||||
urls: imgList,
|
||||
current: e.currentTarget.dataset.url
|
||||
});
|
||||
},
|
||||
delImg(e, imgList) {
|
||||
uni.showModal({
|
||||
title: '',
|
||||
content: '确定要删除这张图片吗?',
|
||||
cancelText: '取消',
|
||||
confirmText: '确定',
|
||||
success: res => {
|
||||
if (res.confirm) {
|
||||
imgList.splice(e.currentTarget.dataset.index, 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
async loadData() {
|
||||
// this.areaList = await this.$api.data('areaList');
|
||||
this.loadAreaList();
|
||||
},
|
||||
fillForm(addressInfo) {
|
||||
this.formData = addressInfo && Object.keys(addressInfo).length > 0 ? addressInfo : this.formData;
|
||||
this.imgList = addressInfo.imageUrl ? addressInfo.imageUrl.split(',') : []
|
||||
},
|
||||
// async authLocationCallback(res) {
|
||||
// if (res.detail.authSetting['scope.userLocation']) {
|
||||
// this.isShowPrivSetting = false;
|
||||
// this.getLocation();
|
||||
// }
|
||||
// },
|
||||
async getLocation() {
|
||||
// let res = await wx.getSetting();
|
||||
// console.log(res);
|
||||
// if (res && !res.authSetting['scope.userLocation']) {
|
||||
// wx.authorize({
|
||||
// scope: 'scope.userLocation',
|
||||
// success: () => {
|
||||
// this.getLocation()
|
||||
// },
|
||||
// fail: () => {
|
||||
// this.isShowPrivSetting = true;
|
||||
// }
|
||||
// });
|
||||
// return;
|
||||
// }
|
||||
// const res = await this.$request.GetCurrentLocation()
|
||||
wx.chooseLocation({
|
||||
success: async (res1) => {
|
||||
const res = await this.$request.TransformLocation(res1)
|
||||
console.log(res);
|
||||
this.formData.area = [res.provinceArea, res.cityArea, res.countryArea, res.streetArea]
|
||||
this.formData.provinceId = res.provinceArea.areaId;
|
||||
this.formData.provinceName = res.provinceArea.areaName;
|
||||
this.formData.cityId = res.cityArea.areaId;
|
||||
this.formData.cityName = res.cityArea.areaName;
|
||||
this.formData.countryId = res.countryArea.areaId;
|
||||
this.formData.countryName = res.countryArea.areaName;
|
||||
this.formData.streetId = res.streetArea.areaId;
|
||||
this.formData.streetName = res.streetArea.areaName;
|
||||
this.formData.latitude = res.latitude;
|
||||
this.formData.longitude = res.longitude;
|
||||
this.isLocationShow = false
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('选择位置失败', err);
|
||||
// uni.showModal({
|
||||
// title: '提示',
|
||||
// content: '定位获取失败,请确认是否开启定位',
|
||||
// cancelText: '取消',
|
||||
// confirmText: '重试',
|
||||
// success: res => {
|
||||
// if (res.confirm) {
|
||||
// this.getLocation();
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
}
|
||||
});
|
||||
},
|
||||
async loadAreaList(idArr) {
|
||||
let areaList = await this.$request.areaListByStep();
|
||||
areaList = areaList.data;
|
||||
let col1Code = idArr ? idArr[0] : areaList[0].areaCode;
|
||||
let subAreaList = await this.$request.areaListByStep({ parentCode: col1Code });
|
||||
subAreaList = subAreaList.data;
|
||||
let col2Code = idArr ? idArr[1] : subAreaList[0].areaCode;
|
||||
let subSubAreaList = await this.$request.areaListByStep({ parentCode: col2Code });
|
||||
subSubAreaList = subSubAreaList.data;
|
||||
let col3Code = idArr ? idArr[2] : subSubAreaList[0].areaCode;
|
||||
let subSub2AreaList = await this.$request.areaListByStep({ parentCode: col3Code });
|
||||
subSub2AreaList = subSub2AreaList.data;
|
||||
this.areaList.push(areaList);
|
||||
this.areaList.push(subAreaList);
|
||||
this.areaList.push(subSubAreaList);
|
||||
this.areaList.push(subSub2AreaList);
|
||||
},
|
||||
regionChange(e) {
|
||||
this.multiIndex = e.detail.value;
|
||||
let chosenArea = [];
|
||||
for(let i = 0; i < this.areaList.length; i++) {
|
||||
chosenArea.push(this.areaList[i][this.multiIndex[i]]);
|
||||
}
|
||||
this.formData.area = chosenArea;
|
||||
this.formData.provinceId = chosenArea[0].areaId;
|
||||
this.formData.provinceName = chosenArea[0].areaName;
|
||||
this.formData.cityId = chosenArea[1].areaId;
|
||||
this.formData.cityName = chosenArea[1].areaName;
|
||||
this.formData.countryId = chosenArea[2].areaId;
|
||||
this.formData.countryName = chosenArea[2].areaName;
|
||||
this.formData.streetId = chosenArea[3].areaId;
|
||||
this.formData.streetName = chosenArea[3].areaName;
|
||||
},
|
||||
async regionColChange(e) {
|
||||
let colObj = e.detail;
|
||||
if (colObj.column == 0) {
|
||||
let subSubAreaList = [], subSub2AreaList = [];
|
||||
// 通过一级查询二级,通过二级查三级
|
||||
let subAreaList = await this.$request.areaListByStep({parentCode: this.areaList[0][colObj.value].areaCode});
|
||||
subAreaList = subAreaList.data;
|
||||
if (subAreaList && subAreaList.length) {
|
||||
subSubAreaList = await this.$request.areaListByStep({parentCode: subAreaList[0].areaCode});
|
||||
subSubAreaList = subSubAreaList.data;
|
||||
if(subSubAreaList && subSubAreaList.length) {
|
||||
subSub2AreaList = await this.$request.areaListByStep({parentCode: subSubAreaList[0].areaCode});
|
||||
subSub2AreaList = subSub2AreaList.data;
|
||||
}
|
||||
}
|
||||
this.areaList[1] = subAreaList
|
||||
this.areaList[2] = subSubAreaList
|
||||
this.areaList[3] = subSub2AreaList
|
||||
this.multiIndex = [colObj.value, 0, 0, 0];
|
||||
} else if (colObj.column == 1) {
|
||||
let subSub2AreaList = []
|
||||
// 通过二级查三级
|
||||
let subSubAreaList = await this.$request.areaListByStep({parentCode: this.areaList[1][colObj.value].areaCode});
|
||||
subSubAreaList = subSubAreaList.data;
|
||||
if (subSubAreaList && subSubAreaList.length) {
|
||||
subSub2AreaList = await this.$request.areaListByStep({parentCode: subSubAreaList[0].areaCode});
|
||||
subSub2AreaList = subSub2AreaList.data;
|
||||
}
|
||||
this.areaList[2] = subSubAreaList
|
||||
this.areaList[3] = subSub2AreaList
|
||||
this.multiIndex = [this.multiIndex[0], colObj.value, 0, 0];
|
||||
} else if (colObj.column == 2) {
|
||||
// 通过二级查三级
|
||||
let subSubAreaList = await this.$request.areaListByStep({parentCode: this.areaList[2][colObj.value].areaCode});
|
||||
subSubAreaList = subSubAreaList.data;
|
||||
this.areaList[3] = subSubAreaList;
|
||||
this.multiIndex = [this.multiIndex[0], this.multiIndex[1], colObj.value, 0];
|
||||
}
|
||||
},
|
||||
validateForm(addressInfo) {
|
||||
console.log(addressInfo);
|
||||
if(this.imgList.length === 0) {
|
||||
uni.showToast({
|
||||
title: '请至少上传一张门头图',
|
||||
icon: 'none',
|
||||
mask: true
|
||||
})
|
||||
return false
|
||||
}
|
||||
if(!addressInfo.latitude || !addressInfo.longitude) {
|
||||
uni.showToast({
|
||||
title: '请先点击定位上传',
|
||||
icon: 'none',
|
||||
mask: true
|
||||
})
|
||||
return false
|
||||
}
|
||||
|
||||
if(!addressInfo.area || addressInfo.area.length === 0) {
|
||||
uni.showToast({
|
||||
title: '请选择联系地址',
|
||||
icon: 'none',
|
||||
mask: true
|
||||
})
|
||||
return false
|
||||
}
|
||||
|
||||
if (!addressInfo.address) {
|
||||
uni.showToast({
|
||||
title: '请填写详细地址',
|
||||
icon: 'none',
|
||||
mask: true
|
||||
})
|
||||
return false
|
||||
}
|
||||
if (!addressInfo.shopName) {
|
||||
uni.showToast({
|
||||
title: '请输入门店名称',
|
||||
icon: 'none',
|
||||
mask: true
|
||||
})
|
||||
return false
|
||||
}
|
||||
if (!this.$validate.validContactNum(addressInfo.phone)) {
|
||||
uni.showToast({
|
||||
title: '联系号码格式错误',
|
||||
icon: 'none',
|
||||
mask: true
|
||||
})
|
||||
return false
|
||||
}
|
||||
return true;
|
||||
},
|
||||
async submit(e) {
|
||||
const confirmFormData = {...this.formData}
|
||||
console.log(confirmFormData);
|
||||
let formValid = this.validateForm(confirmFormData);
|
||||
if (formValid) {
|
||||
let isSuccess = false;
|
||||
if (this.mode === 1) {
|
||||
let res = await this.$request.addShopAddressList({
|
||||
...this.formData,
|
||||
imageUrl: this.imgList.toString(),
|
||||
workerId: this.$request.getCurUserInfo().workerId
|
||||
});
|
||||
if (res.code === 0) {
|
||||
isSuccess = true;
|
||||
}
|
||||
} else if (this.mode === 0) {
|
||||
let res = await this.$request.editShopAddressList({
|
||||
...this.formData,
|
||||
imageUrl: this.imgList.toString(),
|
||||
workerId: this.$request.getCurUserInfo().workerId,
|
||||
});
|
||||
if (res.code === 0) {
|
||||
isSuccess = true;
|
||||
}
|
||||
}
|
||||
if (isSuccess) {
|
||||
uni.showToast({
|
||||
title: '保存成功',
|
||||
icon: 'success',
|
||||
mask: true
|
||||
})
|
||||
uni.navigateBack()
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '保存失败',
|
||||
icon: 'error',
|
||||
mask: true
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
|
@ -0,0 +1,741 @@
|
|||
<template>
|
||||
<view>
|
||||
<!-- 顶部操作条 -->
|
||||
<cu-custom :bgColor="'bg-main-color'" :isBack="true">
|
||||
<block slot="backText">返回</block>
|
||||
<block slot="content">师傅入驻信息填写</block>
|
||||
</cu-custom>
|
||||
<!-- 步骤条 -->
|
||||
<view class="bg-white padding">
|
||||
<view class="cu-steps">
|
||||
<view class="cu-item" :class="index>curStep?'':'text-main-color'" v-for="(stepName, index) in stepList" :key="stepName">
|
||||
<text class='cuIcon-radioboxfill'></text> {{stepName}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 服务区域 -->
|
||||
<view v-if="curStep === 0">
|
||||
<view class="margin-bottom-with-bar">
|
||||
<view class="bg-white margin-top-sm" v-for="(item, index) in servArea" :key="index">
|
||||
<view class="cu-bar padding-lr solid-bottom">
|
||||
<view class="text-lg">
|
||||
<text class="cuIcon-titles"></text>
|
||||
<text>发货区域{{index + 1}}(将按服务范围派单)</text>
|
||||
</view>
|
||||
<view @click="delServArea(index)">
|
||||
<text class="text-main-color">删除</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="padding">
|
||||
<view class="flex">
|
||||
<my-uni-combox class="flex-sub margin-right-xs" :candidates="provinceList"
|
||||
:showField="'areaName'" placeholder="选择省份" v-model="servArea[index].provinceObj"
|
||||
@input="chooseRegion($event, 0, index)"></my-uni-combox>
|
||||
<!-- <my-uni-combox class="flex-sub margin-right-xs" :candidates="servArea[index].cityList"
|
||||
:showField="'areaName'" placeholder="选择城市" v-model="servArea[index].cityObj"
|
||||
@input="chooseRegion($event, 1, index)" @tap="reloadTargetArea(1, index)"></my-uni-combox> -->
|
||||
<!-- <my-uni-combox class="flex-sub" :candidates="servArea[index].districtList"
|
||||
:showField="'areaName'" placeholder="选择地区" v-model="servArea[index].districtObj"
|
||||
@input="chooseRegion($event, 2, index)" @tap="reloadTargetArea(2, index)"></my-uni-combox> -->
|
||||
</view>
|
||||
<checkbox-group @change="checkCity($event, index)" class="grid col-2 margin-top-xs">
|
||||
<view v-for="(item0, index0) in servArea[index].cityList" :key="item0.areaCode" class="margin-tb-xs">
|
||||
<checkbox style="transform:scale(1)" class="main-color margin-right-xs"
|
||||
:value="item0.areaCode"
|
||||
:checked="servArea[index].cityIds.indexOf(item0.areaId) !== -1 ? true : false">
|
||||
</checkbox>
|
||||
<text>{{item0.areaName}}</text>
|
||||
</view>
|
||||
</checkbox-group>
|
||||
<!-- <checkbox-group @change="checkStreet($event, index)" class="grid col-2 margin-top-xs">
|
||||
<view v-for="(item0, index0) in servArea[index].streetList" class="margin-tb-xs">
|
||||
<checkbox style="transform:scale(1)" class="main-color margin-right-xs"
|
||||
:value="item0.areaCode"
|
||||
:checked="servArea[index].streetIds.indexOf(String(item0.areaCode)) !== -1 ? true : false">
|
||||
</checkbox>
|
||||
<text>{{item0.areaName}}</text>
|
||||
</view>
|
||||
</checkbox-group> -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-center margin-top">
|
||||
<button class="cu-btn bg-main-color light" @click="addServArea">
|
||||
<text class="margin-right-xs"><text class="cuIcon-add"></text></text>
|
||||
<text>继续添加发货区域</text>
|
||||
</button>
|
||||
</view>
|
||||
</view>
|
||||
<view class="bottom-site-bar"></view>
|
||||
<!-- 下一步 -->
|
||||
<view class="cu-bar tabbar border shop fixed-bottom-bar bg-back">
|
||||
<button class="margin-lr cu-btn bg-main-color shadow-blur long-btn" @click="nextStep">下一步</button>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 服务技能 -->
|
||||
<view v-if="curStep === 1">
|
||||
<view class="margin-bottom-with-bar">
|
||||
<view class="bg-white margin-top-sm" v-for="(item, index) in servSkill" :key="index">
|
||||
<view class="cu-bar padding-lr solid-bottom">
|
||||
<view class="text-lg">
|
||||
<text class="cuIcon-titles"></text>
|
||||
<text>货品类别{{index + 1}}(将按服务技能派单)</text>
|
||||
</view>
|
||||
<view @click="delServSkill(index)">
|
||||
<text class="text-main-color">删除</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="padding">
|
||||
<view class="flex">
|
||||
<my-uni-combox class="flex-sub margin-right-xs" :candidates="typeList"
|
||||
:showField="'goodsCategoryName'" placeholder="请选择" v-model="servSkill[index].typeObj"
|
||||
@input="chooseType($event, 0, index)"></my-uni-combox>
|
||||
<my-uni-combox class="flex-sub" :candidates="servSkill[index].subTypeList"
|
||||
:showField="'goodsCategoryName'" placeholder="请选择" v-model="servSkill[index].subTypeObj"
|
||||
@input="chooseType($event, 1, index)" @tap="reloadTargetCategory(1, index)"></my-uni-combox>
|
||||
</view>
|
||||
<checkbox-group @change="checkGoodType($event, index)" class="grid col-3 margin-top-xs">
|
||||
<view v-for="(item0, index0) in servSkill[index].subSubTypeList" :key="item0.goodsCategoryId" class="margin-tb-xs">
|
||||
<checkbox style="transform:scale(1)" class="main-color margin-right-xs"
|
||||
:value="item0.goodsCategoryId"
|
||||
:checked="servSkill[index].subSubTypeIds.indexOf(String(item0.goodsCategoryId)) !== -1 ? true : false">
|
||||
</checkbox>
|
||||
<text>{{item0.goodsCategoryName}}</text>
|
||||
</view>
|
||||
</checkbox-group>
|
||||
<!-- <view>
|
||||
<input type="text" class="radius-input" placeholder="输入其他服务,用“,”隔开。"
|
||||
v-model="servSkill[index].otherServSkill">
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-center margin-top">
|
||||
<button class="cu-btn bg-main-color light" @click="addServSkill">
|
||||
<text class="margin-right-xs"><text class="cuIcon-add"></text></text>
|
||||
<text>继续添加货品类别</text>
|
||||
</button>
|
||||
</view>
|
||||
</view>
|
||||
<view class="bottom-site-bar"></view>
|
||||
<!-- 下一步 -->
|
||||
<view class="cu-bar tabbar border shop fixed-bottom-bar bg-back">
|
||||
<button class="margin-lr-sm cu-btn bg-white shadow-blur long-btn" @click="preStep">上一步</button>
|
||||
<!-- <button class="bg-main-color long-btn margin-lr" @click="nextStep">下一步</button> -->
|
||||
<button class="margin-lr-sm cu-btn bg-main-color shadow-blur long-btn" @click="submit">提交</button>
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="false" class="margin-top-sm">
|
||||
<view class="margin-bottom-with-bar">
|
||||
<view class="bg-white margin-top-sm" v-for="(item, index) in specialSkill" :key="index">
|
||||
<view class="cu-bar padding-lr solid-bottom">
|
||||
<view class="text-lg">
|
||||
<text class="cuIcon-titles"></text>
|
||||
<text>特殊技能{{index + 1}}(特殊工种如空调安装等请上传)</text>
|
||||
</view>
|
||||
<view @click="delSpecialSkill(index)">
|
||||
<text class="text-main-color">删除</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="padding">
|
||||
<view>
|
||||
<text>特殊技能:</text>
|
||||
<view>
|
||||
<view class="flex align-center margin-bottom-xs">
|
||||
<my-uni-combox class="flex-sub margin-right-xs" :candidates="specialTypeList"
|
||||
:showField="'goodsCategoryName'" placeholder="请选择"
|
||||
v-model="specialSkill[index].specialTypeObj" @input="chooseSpecialSkill($event, 0, index)">
|
||||
</my-uni-combox>
|
||||
<my-uni-combox class="flex-sub margin-right-xs"
|
||||
:candidates="specialSkill[index].specialSubTypeList" :showField="'goodsCategoryName'"
|
||||
placeholder="请选择" v-model="specialSkill[index].specialSubTypeObj"
|
||||
@input="chooseSpecialSkill($event, 1, index)"></my-uni-combox>
|
||||
<my-uni-combox class="flex-sub" :candidates="specialSkill[index].specialSubSubTypeList"
|
||||
:showField="'goodsCategoryName'" placeholder="请选择"
|
||||
v-model="specialSkill[index].specialSubSubTypeObj"
|
||||
@input="chooseSpecialSkill($event, 2, index)"></my-uni-combox>
|
||||
</view>
|
||||
<my-uni-combox :candidates="specialSkill[index].specialSkillList"
|
||||
:showField="'specialSkillName'" placeholder="请选择"
|
||||
v-model="specialSkill[index].specialSkillObj"
|
||||
@input="chooseSpecialSkill($event, 3, index)"></my-uni-combox>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex justify-start align-center margin-top-sm">
|
||||
<view>技能证书:</view>
|
||||
<view class="grid col-1 upload-pic-grid grid-square flex-sub">
|
||||
<view class="bg-img" v-for="(url, index0) in specialSkill[index].skillCert" :key="index0"
|
||||
@tap="viewImage($event, specialSkill[index].skillCert)" :data-url="url">
|
||||
<image :src="url" mode="aspectFill"></image>
|
||||
<view class="cu-tag bg-red" @tap.stop="delImg($event, specialSkill[index].skillCert)" :data-index="index0">
|
||||
<text class='cuIcon-close'></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="solids" @tap="chooseImage($event, specialSkill[index].skillCert)" v-if="specialSkill[index].skillCert.length < 1">
|
||||
<text class='cuIcon-cameraadd'></text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex justify-start align-center margin-top-sm">
|
||||
<view>保险证明:</view>
|
||||
<view class="grid col-1 upload-pic-grid grid-square flex-sub">
|
||||
<view class="bg-img" v-for="(url, index0) in specialSkill[index].insurCert" :key="index0"
|
||||
@tap="viewImage($event, specialSkill[index].insurCert)" :data-url="url">
|
||||
<image :src="url" mode="aspectFill"></image>
|
||||
<view class="cu-tag bg-red" @tap.stop="delImg($event, specialSkill[index].insurCert)" :data-index="index0">
|
||||
<text class='cuIcon-close'></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="solids" @tap="chooseImage($event, specialSkill[index].insurCert)" v-if="specialSkill[index].insurCert.length < 1">
|
||||
<text class='cuIcon-cameraadd'></text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex justify-start align-center">
|
||||
<view>保险日期:</view>
|
||||
<uni-datetime-picker style="width: 75%;"
|
||||
:value="[specialSkill[index].insurStartDate, specialSkill[index].insurEndDate]"
|
||||
type="datetimerange" rangeSeparator="~" @change="changeInsurDate($event, index)" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-center margin-top">
|
||||
<button class="cu-btn bg-main-color light" @click="addSpecialSkill">
|
||||
<text class="margin-right-xs"><text class="cuIcon-add"></text></text>
|
||||
<text>继续添加特殊技能</text>
|
||||
</button>
|
||||
</view>
|
||||
</view>
|
||||
<view class="bottom-site-bar"></view>
|
||||
<!-- 下一步 -->
|
||||
<view class="cu-bar tabbar border shop fixed-bottom-bar bg-back">
|
||||
<button class="bg-white long-btn margin-lr" @click="preStep">上一步</button>
|
||||
<button class="bg-main-color long-btn margin-lr" @click="submit">提交</button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import myUniCombox from '@/components/uni-combox/my-uni-combox.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
myUniCombox
|
||||
},
|
||||
onLoad() {
|
||||
this.loadData();
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
curUserInfo: {},
|
||||
curStep: 0,
|
||||
// stepList: ['服务范围', '服务技能', '特殊技能'],
|
||||
stepList: ['服务范围', '商品类目'],
|
||||
provinceList: [],
|
||||
servArea: [{
|
||||
cityList: [],
|
||||
districtList: [],
|
||||
streetList: [],
|
||||
provinceObj: {},
|
||||
cityObj: {},
|
||||
districtObj: {},
|
||||
streetIds: [],
|
||||
cityIds: []
|
||||
}],
|
||||
typeList: [],
|
||||
servSkill: [{
|
||||
subTypeList: [],
|
||||
subSubTypeList: [],
|
||||
typeObj: {},
|
||||
subTypeObj: {},
|
||||
subSubTypeIds: [],
|
||||
otherServSkill: null
|
||||
}],
|
||||
specialTypeList: [],
|
||||
specialSkill: [{
|
||||
specialSubTypeList: [],
|
||||
specialSubSubTypeList: [],
|
||||
specialTypeObj: {},
|
||||
specialSubTypeObj: {},
|
||||
specialSubSubTypeObj: {},
|
||||
specialSkillList: [],
|
||||
specialSkillObj: {},
|
||||
skillCert: [],
|
||||
insurCert: [],
|
||||
insurStartDate: '',
|
||||
insurEndDate: ''
|
||||
}],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async loadData() {
|
||||
this.curUserInfo = this.$request.getCurUserInfo();
|
||||
await this.loadProvinceList();
|
||||
await this.loadTypeList();
|
||||
await this.loadExistData();
|
||||
// this.loadSpecialSkill();
|
||||
},
|
||||
async loadExistData() {
|
||||
this.loadServAreas();
|
||||
this.loadServSkills();
|
||||
},
|
||||
async loadServAreas() {
|
||||
let res = await this.$request.getWorkerAreaEdit({
|
||||
workerId: this.curUserInfo.workerId,
|
||||
type: 2
|
||||
});
|
||||
let servArea = [];
|
||||
for(let i = 0; i < res.data.length; i++) {
|
||||
let item = res.data[i];
|
||||
let cityListRes = await this.$request.areaListByStep({
|
||||
parentCode: item.provinceArea.areaCode
|
||||
});
|
||||
servArea.push({
|
||||
cityList: cityListRes.data,
|
||||
cityIds: item.cityIds,
|
||||
districtList: [],
|
||||
streetList: [],
|
||||
provinceObj: item.provinceArea,
|
||||
cityObj: item.cityArea,
|
||||
districtObj: {},
|
||||
streetIds: []
|
||||
})
|
||||
}
|
||||
if (servArea.length > 0) {
|
||||
this.servArea = servArea;
|
||||
}
|
||||
},
|
||||
async loadServSkills() {
|
||||
let res = await this.$request.getWorkerGoodsCategoryEdit({
|
||||
workerId: this.curUserInfo.workerId,
|
||||
type: 2
|
||||
});
|
||||
let servSkill = [];
|
||||
if(res.data) {
|
||||
for(let i = 0; i < res.data.length; i++) {
|
||||
let item = res.data[i];
|
||||
let subSubTypeRes = await this.$request.listByStep({
|
||||
goodsCategoryId: item.twoGoodsCategory.goodsCategoryId,
|
||||
type: 2
|
||||
});
|
||||
servSkill.push({
|
||||
subTypeList: [],
|
||||
subSubTypeList: subSubTypeRes.data,
|
||||
typeObj: item.oneGoodsCategory,
|
||||
subTypeObj: item.twoGoodsCategory,
|
||||
subSubTypeIds: item.categoryIds
|
||||
})
|
||||
}
|
||||
}
|
||||
if (servSkill.length > 0) {
|
||||
this.servSkill = servSkill;
|
||||
}
|
||||
},
|
||||
/* 服务区域 start */
|
||||
async loadProvinceList() {
|
||||
let res = await this.$request.areaListByStep();
|
||||
this.provinceList = res.data;
|
||||
},
|
||||
async chooseRegion(e, type, index) {
|
||||
let res = await this.$request.areaListByStep({
|
||||
parentCode: e.areaCode
|
||||
});
|
||||
if (res.code == 0) {
|
||||
switch (type) {
|
||||
case 0: {
|
||||
this.servArea[index].cityList = res.data;
|
||||
this.servArea[index].districtList = [];
|
||||
this.servArea[index].streetList = [];
|
||||
this.servArea[index].cityObj = {};
|
||||
this.servArea[index].districtObj = {};
|
||||
this.servArea[index].streetIds = [];
|
||||
this.servArea[index].cityIds = [];
|
||||
}
|
||||
break;
|
||||
case 1: {
|
||||
this.servArea[index].districtList = res.data;
|
||||
this.servArea[index].streetList = [];
|
||||
this.servArea[index].districtObj = {};
|
||||
this.servArea[index].streetIds = [];
|
||||
this.servArea[index].cityIds = [];
|
||||
}
|
||||
break;
|
||||
case 2: {
|
||||
this.servArea[index].streetList = res.data;
|
||||
this.servArea[index].streetIds = [];
|
||||
this.servArea[index].cityIds = [];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
checkStreet(e, index) {
|
||||
let checkedIndexArr = e.detail.value;
|
||||
this.servArea[index].streetIds = checkedIndexArr;
|
||||
},
|
||||
checkCity(e, index) {
|
||||
let checkedIndexArr = e.detail.value;
|
||||
this.servArea[index].cityIds = checkedIndexArr;
|
||||
},
|
||||
addServArea() {
|
||||
this.servArea.push({
|
||||
cityList: [],
|
||||
districtList: [],
|
||||
streetList: [],
|
||||
provinceObj: {},
|
||||
cityObj: {},
|
||||
districtObj: {},
|
||||
streetIds: [],
|
||||
cityIds: [],
|
||||
});
|
||||
},
|
||||
delServArea(index) {
|
||||
this.servArea.splice(index, 1);
|
||||
},
|
||||
async reloadTargetArea(colIndex, areaIndex) {
|
||||
switch(colIndex) {
|
||||
case 1: {
|
||||
if (this.servArea[areaIndex].provinceObj
|
||||
&& (!this.servArea[areaIndex].cityList
|
||||
|| this.servArea[areaIndex].cityList.length === 0)) {
|
||||
let res = await this.$request.areaListByStep({
|
||||
parentCode: this.servArea[areaIndex].provinceObj.areaCode,
|
||||
});
|
||||
this.servArea[areaIndex].cityList = res.data;
|
||||
}
|
||||
} break;
|
||||
case 2: {
|
||||
if (this.servArea[areaIndex].cityObj
|
||||
&& (!this.servArea[areaIndex].districtList
|
||||
|| this.servArea[areaIndex].districtList.length === 0)) {
|
||||
let res = await this.$request.areaListByStep({
|
||||
parentCode: this.servArea[areaIndex].cityObj.areaCode,
|
||||
});
|
||||
this.servArea[areaIndex].districtList = res.data;
|
||||
}
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
},
|
||||
/* 服务区域 end */
|
||||
/* 服务技能 start */
|
||||
async loadTypeList() {
|
||||
let res = await this.$request.listByStep({
|
||||
type: 2
|
||||
});
|
||||
res = res.data;
|
||||
let typeList = await this.$request.listByStep({
|
||||
type: 2,
|
||||
goodsCategoryId: res[0].goodsCategoryId
|
||||
});
|
||||
this.typeList = typeList.data;
|
||||
},
|
||||
async chooseType(e, type, index) {
|
||||
let res = await this.$request.listByStep({
|
||||
goodsCategoryId: e.goodsCategoryId,
|
||||
type: 2
|
||||
});
|
||||
if (res.code == 0) {
|
||||
switch (type) {
|
||||
case 0: {
|
||||
this.servSkill[index].subTypeList = res.data;
|
||||
this.servSkill[index].subSubTypeList = [];
|
||||
this.servSkill[index].subTypeObj = {};
|
||||
this.servSkill[index].subSubTypeIds = [];
|
||||
}
|
||||
break;
|
||||
case 1: {
|
||||
this.servSkill[index].subSubTypeList = res.data;
|
||||
this.servSkill[index].subSubTypeIds = [];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
checkGoodType(e, index) {
|
||||
let checkedIndexArr = e.detail.value;
|
||||
this.servSkill[index].subSubTypeIds = checkedIndexArr;
|
||||
},
|
||||
addServSkill() {
|
||||
this.servSkill.push({
|
||||
subTypeList: [],
|
||||
subSubTypeList: [],
|
||||
typeObj: {},
|
||||
subTypeObj: {},
|
||||
subSubTypeIds: [],
|
||||
otherServSkill: null
|
||||
});
|
||||
},
|
||||
delServSkill(index) {
|
||||
this.servSkill.splice(index, 1);
|
||||
},
|
||||
async reloadTargetCategory(colIndex, servSkillIndex) {
|
||||
switch(colIndex) {
|
||||
case 1: {
|
||||
if (this.servSkill[servSkillIndex].typeObj
|
||||
&& (!this.servSkill[servSkillIndex].subTypeList
|
||||
|| this.servSkill[servSkillIndex].subTypeList.length === 0)) {
|
||||
let res = await this.$request.listByStep({
|
||||
goodsCategoryId: this.servSkill[servSkillIndex].typeObj.goodsCategoryId,
|
||||
type: 2
|
||||
});
|
||||
this.servSkill[servSkillIndex].subTypeList = res.data;
|
||||
}
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
},
|
||||
/* 服务技能 end */
|
||||
/* 特殊技能 start */
|
||||
async loadSpecialSkill() {
|
||||
let res = await this.$request.listByStep({
|
||||
type: 2
|
||||
});
|
||||
res = res.data;
|
||||
let typeList = await this.$request.listByStep({
|
||||
type: 2,
|
||||
goodsCategoryId: res[0].goodsCategoryId
|
||||
});
|
||||
this.specialTypeList = typeList.data;
|
||||
},
|
||||
async chooseSpecialSkill(e, type, index) {
|
||||
let funName = "listByStep";
|
||||
if (type === 2) {
|
||||
funName = "qrySpecialSkillList";
|
||||
}
|
||||
let res = await this.$request[funName]({
|
||||
goodsCategoryId: e.goodsCategoryId,
|
||||
type: 2
|
||||
});
|
||||
if (res.code == 0) {
|
||||
switch (type) {
|
||||
case 0: {
|
||||
this.specialSkill[index].specialSubTypeList = res.data;
|
||||
this.specialSkill[index].specialSubSubTypeList = [];
|
||||
this.specialSkill[index].specialSubTypeObj = {};
|
||||
this.specialSkill[index].specialSubSubTypeObj = {};
|
||||
}
|
||||
break;
|
||||
case 1: {
|
||||
this.specialSkill[index].specialSubSubTypeList = res.data;
|
||||
this.specialSkill[index].specialSubSubTypeObj = {};
|
||||
}
|
||||
case 2: {
|
||||
this.specialSkill[index].specialSkillList = res.data;
|
||||
this.specialSkill[index].specialSkillObj = {};
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
addSpecialSkill() {
|
||||
this.specialSkill.push({
|
||||
specialSubTypeList: [],
|
||||
specialSubSubTypeList: [],
|
||||
specialTypeObj: {},
|
||||
specialSubTypeObj: {},
|
||||
specialSubSubTypeObj: {},
|
||||
skillCert: [],
|
||||
insurCert: [],
|
||||
insurStartDate: '',
|
||||
insurEndDate: ''
|
||||
});
|
||||
},
|
||||
delSpecialSkill(index) {
|
||||
this.specialSkill.splice(index, 1);
|
||||
},
|
||||
changeInsurDate(e, index) {
|
||||
this.specialSkill[index].insurStartDate = e[0];
|
||||
this.specialSkill[index].insurEndDate = e[1];
|
||||
},
|
||||
async chooseImage(e, imgList) {
|
||||
uni.chooseMedia({
|
||||
count: 1, //默认9
|
||||
mediaType: ['image'],
|
||||
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
||||
sourceType: ['album'], //从相册选择
|
||||
success: (res) => {
|
||||
// 上传图片
|
||||
res.tempFiles.forEach((fileObj) => {
|
||||
this.$request.uploadFile(fileObj.tempFilePath).then((url) => {
|
||||
// 存入缓存
|
||||
imgList.push(url);
|
||||
});
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
viewImage(e, imgList) {
|
||||
uni.previewImage({
|
||||
urls: imgList,
|
||||
current: e.currentTarget.dataset.url
|
||||
});
|
||||
},
|
||||
delImg(e, imgList) {
|
||||
uni.showModal({
|
||||
title: '',
|
||||
content: '确定要删除这张图片吗?',
|
||||
cancelText: '取消',
|
||||
confirmText: '确定',
|
||||
success: res => {
|
||||
if (res.confirm) {
|
||||
imgList.splice(e.currentTarget.dataset.index, 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/* 特殊技能 end */
|
||||
nextStep() {
|
||||
let workerAreas = [];
|
||||
// 区域参数
|
||||
this.servArea.forEach((item) => {
|
||||
item.cityIds.forEach((cityId) => {
|
||||
workerAreas.push({
|
||||
provinceId: item.provinceObj.areaId,
|
||||
cityId: cityId,
|
||||
districtId: '',
|
||||
streetId: ''
|
||||
})
|
||||
});
|
||||
// item.streetIds.forEach((streetId) => {
|
||||
// workerAreas.push({
|
||||
// provinceId: item.provinceObj.areaId,
|
||||
// cityId: item.cityObj.areaId,
|
||||
// districtId: item.districtObj.areaId,
|
||||
// streetId: streetId
|
||||
// })
|
||||
// });
|
||||
});
|
||||
let params = {
|
||||
workerGoodsAreas: workerAreas
|
||||
}
|
||||
if (this.curStep === 0 && !this.validData(params)) {
|
||||
return;
|
||||
}
|
||||
this.curStep = this.curStep === this.stepList.length - 1 ? this.curStep : ++this.curStep;
|
||||
},
|
||||
preStep() {
|
||||
this.curStep = this.curStep === 0 ? 0 : --this.curStep;
|
||||
},
|
||||
validData(data) {
|
||||
let errMsg = null;
|
||||
if (!data.workerGoodsAreas || !data.workerGoodsAreas.length) {
|
||||
errMsg = '请至少添加一个服务区域(需要勾选到城市)';
|
||||
}
|
||||
if (this.curStep > 0) {
|
||||
if (!data.goodsCategoryIds || !data.goodsCategoryIds.length) {
|
||||
errMsg = '请至少添加一个服务技能(需要勾选到三级类目)';
|
||||
}
|
||||
}
|
||||
if (errMsg) {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: errMsg,
|
||||
duration: 3000
|
||||
})
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
async submit() {
|
||||
let workerId = this.curUserInfo.workerId;
|
||||
let workerAreas = [];
|
||||
let goodsCategories = [];
|
||||
// let specialSkills = [];
|
||||
// 区域参数
|
||||
this.servArea.forEach((item) => {
|
||||
// item.streetIds.forEach((streetId) => {
|
||||
// workerAreas.push({
|
||||
// workerId: workerId,
|
||||
// provinceId: item.provinceObj.areaId,
|
||||
// cityId: item.cityObj.areaId,
|
||||
// districtId: item.districtObj.areaId,
|
||||
// streetId: streetId
|
||||
// })
|
||||
// });
|
||||
item.cityIds.forEach((cityId) => {
|
||||
workerAreas.push({
|
||||
workerId: workerId,
|
||||
provinceId: item.provinceObj.areaId,
|
||||
cityId: cityId,
|
||||
districtId: '',
|
||||
streetId: ''
|
||||
})
|
||||
});
|
||||
});
|
||||
// 服务品类参数
|
||||
this.servSkill.forEach((item) => {
|
||||
item.subSubTypeIds.forEach((goodsCategoryId) => {
|
||||
// goodsCategories.push({
|
||||
// workerId: workerId,
|
||||
// goodsCategoryId: goodsCategoryId
|
||||
// });
|
||||
goodsCategories.push(goodsCategoryId)
|
||||
});
|
||||
});
|
||||
// 特殊技能参数
|
||||
// this.specialSkill.forEach((item) => {
|
||||
// specialSkills.push({
|
||||
// workerId: workerId,
|
||||
// specialSkillId: item.specialSkillObj.specialSkillId,
|
||||
// credential: item.skillCert[0],
|
||||
// insurance: item.insurCert[0],
|
||||
// insuranceStart: item.insurStartDate,
|
||||
// insuranceEnd: item.insurEndDate
|
||||
// });
|
||||
// });
|
||||
|
||||
let params = {
|
||||
workerId: workerId,
|
||||
workerGoodsAreas: workerAreas,
|
||||
goodsCategoryIds: goodsCategories,
|
||||
// specialSkills: specialSkills
|
||||
}
|
||||
|
||||
if (!this.validData(params)) {
|
||||
return;
|
||||
}
|
||||
|
||||
let res = await this.$request.workerSettled(params);
|
||||
if (res && res.code === 0) {
|
||||
uni.showToast({
|
||||
icon: 'success',
|
||||
title: '提交成功',
|
||||
duration: 2000
|
||||
})
|
||||
// 更新当前缓存的用户信息
|
||||
let newUserInfo = await this.$request.getCurUserNoCache();
|
||||
this.$request.updateCache('userProfile', newUserInfo);
|
||||
uni.navigateBack({
|
||||
delta: -1
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/deep/ .uni-combox__selector {
|
||||
z-index: 99 !important;
|
||||
}
|
||||
|
||||
.grid.col-1.grid-square.upload-pic-grid>view {
|
||||
padding-bottom: 35%;
|
||||
height: 0;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
|
||||
.grid.col-1.upload-pic-grid>view {
|
||||
width: 35%;
|
||||
}
|
||||
|
||||
/deep/ .uni-date__x-input {
|
||||
height: 36px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -270,7 +270,8 @@
|
|||
},
|
||||
async loadServAreas() {
|
||||
let res = await this.$request.getWorkerAreaEdit({
|
||||
workerId: this.curUserInfo.workerId
|
||||
workerId: this.curUserInfo.workerId,
|
||||
type: 1
|
||||
});
|
||||
let servArea = [];
|
||||
for(let i = 0; i < res.data.length; i++) {
|
||||
|
|
@ -294,7 +295,8 @@
|
|||
},
|
||||
async loadServSkills() {
|
||||
let res = await this.$request.getWorkerGoodsCategoryEdit({
|
||||
workerId: this.curUserInfo.workerId
|
||||
workerId: this.curUserInfo.workerId,
|
||||
type: 1
|
||||
});
|
||||
let servSkill = [];
|
||||
for(let i = 0; i < res.data.length; i++) {
|
||||
|
|
@ -592,12 +594,13 @@
|
|||
this.curStep = this.curStep === 0 ? 0 : --this.curStep;
|
||||
},
|
||||
validData(data) {
|
||||
console.log(data);
|
||||
let errMsg = null;
|
||||
if (!data.workerAreas || !data.workerAreas.length) {
|
||||
errMsg = '请至少添加一个服务区域(需要勾选到服务街道)';
|
||||
}
|
||||
if (this.curStep > 0) {
|
||||
if (!data.goodsCategories || !data.goodsCategories.length) {
|
||||
if (!(data.serviceCategoryIds && data.serviceCategoryIds.length)) {
|
||||
errMsg = '请至少添加一个服务技能(需要勾选到三级类目)';
|
||||
}
|
||||
}
|
||||
|
|
@ -631,10 +634,11 @@
|
|||
// 服务品类参数
|
||||
this.servSkill.forEach((item) => {
|
||||
item.subSubTypeIds.forEach((goodsCategoryId) => {
|
||||
goodsCategories.push({
|
||||
workerId: workerId,
|
||||
goodsCategoryId: goodsCategoryId
|
||||
});
|
||||
// goodsCategories.push({
|
||||
// workerId: workerId,
|
||||
// goodsCategoryId: goodsCategoryId
|
||||
// });
|
||||
goodsCategories.push(goodsCategoryId)
|
||||
});
|
||||
});
|
||||
// 特殊技能参数
|
||||
|
|
@ -652,7 +656,7 @@
|
|||
let params = {
|
||||
workerId: workerId,
|
||||
workerAreas: workerAreas,
|
||||
goodsCategories: goodsCategories,
|
||||
serviceCategoryIds: goodsCategories,
|
||||
// specialSkills: specialSkills
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,14 +8,14 @@
|
|||
<view v-if="(servSkills && servSkills.length) || (servAreas && servAreas.length) " class="margin bg-white">
|
||||
<view class="padding">
|
||||
<view class="text-black text-bold">服务区域:</view>
|
||||
<view v-for="(item,index) in servAreas">
|
||||
<view v-for="(item,index) in servAreas" :key="index">
|
||||
<text>{{strReplace(item.mergerName, "-", ",")}}</text>
|
||||
<!-- <text v-if="index !== servAreas.length - 1">,</text> -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="padding">
|
||||
<view class="text-black text-bold">服务技能:</view>
|
||||
<view v-for="(item,index) in servSkills">
|
||||
<view v-for="(item,index) in servSkills" :key="index">
|
||||
<text>{{item.mergeName}}</text>
|
||||
<!-- <text v-if="index !== servSkills.length - 1">,</text> -->
|
||||
</view>
|
||||
|
|
@ -60,12 +60,15 @@
|
|||
curUserInfo: {},
|
||||
servAreas: [],
|
||||
servSkills: [],
|
||||
servSpecialSkills: []
|
||||
servSpecialSkills: [],
|
||||
serviceType: null
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
if(options.type) {
|
||||
this.serviceType = options.type
|
||||
}
|
||||
},
|
||||
// onLoad() {
|
||||
// this.loadData();
|
||||
// },
|
||||
onShow() {
|
||||
this.loadData();
|
||||
},
|
||||
|
|
@ -74,23 +77,26 @@
|
|||
this.curUserInfo = await this.$request.getCurUserNoCache();
|
||||
this.loadServAreas();
|
||||
this.loadServSkills();
|
||||
this.loadSpecialSkills();
|
||||
// this.loadSpecialSkills();
|
||||
},
|
||||
async loadServAreas() {
|
||||
let res = await this.$request.getWorkerArea({
|
||||
workerId: this.curUserInfo.workerId
|
||||
workerId: this.curUserInfo.workerId,
|
||||
serviceType: this.serviceType
|
||||
});
|
||||
this.servAreas = res.data;
|
||||
},
|
||||
async loadServSkills() {
|
||||
let res = await this.$request.getWorkerGoodsCategory({
|
||||
workerId: this.curUserInfo.workerId
|
||||
workerId: this.curUserInfo.workerId,
|
||||
serviceType: this.serviceType
|
||||
});
|
||||
this.servSkills = res.data;
|
||||
},
|
||||
async loadSpecialSkills() {
|
||||
let res = await this.$request.getWorkerSpecialSkill({
|
||||
workerId: this.curUserInfo.workerId
|
||||
workerId: this.curUserInfo.workerId,
|
||||
serviceType: this.serviceType
|
||||
});
|
||||
this.servSpecialSkills = res.data;
|
||||
},
|
||||
|
|
@ -101,9 +107,15 @@
|
|||
});
|
||||
},
|
||||
navigate2ApplySettled() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/master-occupancy'
|
||||
})
|
||||
if(this.serviceType == 1) {
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/master-occupancy'
|
||||
})
|
||||
} else {
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/master-occupancy-parts'
|
||||
})
|
||||
}
|
||||
},
|
||||
strReplace(wholeStr, newStr, oldStr) {
|
||||
if (wholeStr && wholeStr.length > 0) {
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -29,53 +29,61 @@
|
|||
</picker>
|
||||
</view>
|
||||
<view v-if="formData.specsList && formData.specsList.length > 0">
|
||||
<checkbox-group class="padding-lr bg-white" @change="checkSpecs"
|
||||
:class="isShowAllSpecs ? '' : 'certern-height'">
|
||||
<view v-for="(item, index) in formData.specsList" :key="index" class="padding-tb-sm">
|
||||
<view class="flex">
|
||||
<view class="flex-sub">
|
||||
<checkbox style="transform:scale(1)" class="margin-right-xs"
|
||||
:value="index" :checked="item.checked" :class="goodsId && item.checked ? 'grey' : 'main-color'" :disabled="goodsId && item.checked"></checkbox>
|
||||
<text>{{item.goodsCategoryName}}</text>
|
||||
</view>`
|
||||
<view class="flex-sub">
|
||||
<input class="sm radius-input"
|
||||
@input="inputSpecs($event, index, 'goodsStandardName')"
|
||||
:value="item.goodsStandardName" maxlength="20"
|
||||
placeholder="自编辑购买标题(限20字符)"></input>
|
||||
<view :class="isShowAllSpecs ? '' : 'certern-height'">
|
||||
<checkbox-group class="padding-lr bg-white" @change="checkSpecs">
|
||||
<view v-for="(item, index) in formData.specsList" :key="index" class="padding-tb-sm">
|
||||
<view class="flex">
|
||||
<view class="flex-sub">
|
||||
<checkbox style="transform:scale(1)" class="margin-right-xs"
|
||||
:value="index" :checked="item.checked" :class="goodsId && item.checked ? 'grey' : 'main-color'" :disabled="goodsId && item.checked"></checkbox>
|
||||
<text>{{item.goodsCategoryName}}</text>
|
||||
</view>
|
||||
<view class="flex-sub">
|
||||
<input class="sm radius-input"
|
||||
@input="inputSpecs($event, index, 'goodsStandardName')"
|
||||
:value="item.goodsStandardName" maxlength="20"
|
||||
placeholder="自编辑购买标题(限20字符)"></input>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex margin-top-xs">
|
||||
<view class="margin-right-xs" style="flex-basis: 30%;">
|
||||
<view class='text-red' style="position: absolute; z-index: 0;">*</view>
|
||||
<zb-tooltip
|
||||
:content="'平' + parseInt(item.deptRate * 100) + '%+¥' + $calcUtil.curNumPlaces(item.deptMoney, 3) + '销' + parseInt((Number(item.oneRate) + Number(item.twoRate) + Number(item.threeRate) + Number(item.retainRate)) * 100) + '%+¥' + $calcUtil.curNumPlaces(item.retainMoney, 3)"
|
||||
placement="top" ref="goodsPriceTip">
|
||||
<input type="number" class="radius-input xs" @input="inputSpecs($event, index, 'goodsPrice')"
|
||||
:value="item.goodsPrice" placeholder="价格"
|
||||
@blur="hideTips('goodsPriceTip', index)"></input>
|
||||
</zb-tooltip>
|
||||
</view>
|
||||
<view class="margin-right-xs" style="flex-basis: 21%;">
|
||||
<input type="number" class="radius-input xs" @input="inputSpecs($event, index, 'extMoney')"
|
||||
:value="item.extMoney" placeholder="追加提成额"></input>
|
||||
</view>
|
||||
<view class="margin-right-xs" style="flex-basis: 14%;">
|
||||
<input type="number" class="radius-input xs" @input="inputSpecs($event, index, 'groupPrice')"
|
||||
:value="item.groupPrice" placeholder="团购价"></input>
|
||||
</view>
|
||||
<view class="margin-right-xs" style="flex-basis: 11%;">
|
||||
<input class="radius-input xs" @input="inputSpecs($event, index, 'goodsUnit')"
|
||||
:value="item.goodsUnit" placeholder="单位"></input>
|
||||
</view>
|
||||
<view class="margin-right-xs" style="flex-basis: 14%;">
|
||||
<view class='text-red' style="position: absolute; absolute; z-index: 0;">*</view>
|
||||
<input type="number" class="radius-input xs" @input="inputSpecs($event, index, 'goodsNum')"
|
||||
:value="item.goodsNum" placeholder="库存数"></input>
|
||||
</view>
|
||||
<view style="flex-basis: 10%;">
|
||||
<view style="border: 1px solid #0081ff;text-align: center;" class="radius-input" @click="chooseImgList($event, 'specsList:'+index, 500, 500)">
|
||||
<image v-if="item.imageUrl" :src="item.imageUrl" style="width: 40rpx;height: 40rpx;" alt="" mode="aspectFit" ></image>
|
||||
<image v-else src="/static/add-img.png" style="width: 40rpx;height: 40rpx;" alt="" mode="aspectFit" ></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex margin-top-xs">
|
||||
<view class="margin-right-xs">
|
||||
<view class='text-red' style="position: absolute; z-index: 0;">*</view>
|
||||
<zb-tooltip
|
||||
:content="'平' + parseInt(item.deptRate * 100) + '%+¥' + $calcUtil.curNumPlaces(item.deptMoney, 3) + '销' + parseInt((Number(item.oneRate) + Number(item.twoRate) + Number(item.threeRate) + Number(item.retainRate)) * 100) + '%+¥' + $calcUtil.curNumPlaces(item.retainMoney, 3)"
|
||||
placement="right" ref="goodsPriceTip">
|
||||
<input type="number" class="radius-input xs" @input="inputSpecs($event, index, 'goodsPrice')"
|
||||
:value="item.goodsPrice" placeholder="价格"
|
||||
@blur="hideTips('goodsPriceTip', index)"></input>
|
||||
</zb-tooltip>
|
||||
</view>
|
||||
<view class="margin-right-xs" style="flex-basis: 21%;">
|
||||
<input type="number" class="radius-input xs" @input="inputSpecs($event, index, 'extMoney')"
|
||||
:value="item.extMoney" placeholder="追加提成额"></input>
|
||||
</view>
|
||||
<view class="margin-right-xs" style="flex-basis: 14%;">
|
||||
<input type="number" class="radius-input xs" @input="inputSpecs($event, index, 'groupPrice')"
|
||||
:value="item.groupPrice" placeholder="团购价"></input>
|
||||
</view>
|
||||
<view class="margin-right-xs" style="flex-basis: 11%;">
|
||||
<input class="radius-input xs" @input="inputSpecs($event, index, 'goodsUnit')"
|
||||
:value="item.goodsUnit" placeholder="单位"></input>
|
||||
</view>
|
||||
<view style="flex-basis: 14%;">
|
||||
<view class='text-red' style="position: absolute; absolute; z-index: 0;">*</view>
|
||||
<input type="number" class="radius-input xs" @input="inputSpecs($event, index, 'goodsNum')"
|
||||
:value="item.goodsNum" placeholder="库存数"></input>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</checkbox-group>
|
||||
</checkbox-group>
|
||||
</view>
|
||||
|
||||
<view class="text-bold text-gray text-lg text-center bg-white padding-tb-sm"
|
||||
@click="showAllSpecs()"><text :class="'cuIcon-' + (isShowAllSpecs ? 'fold' : 'unfold')"></text>
|
||||
</view>
|
||||
|
|
@ -135,6 +143,24 @@
|
|||
v-model="formData.expectDuration">
|
||||
</my-uni-combox>
|
||||
</view>
|
||||
<view class="cu-form-group justify-start">
|
||||
<view class="title">到店服务</view>
|
||||
<my-uni-combox class="form-val-area" :showClear="true" :candidates="storeServiceList" placeholder="必须到店服务才选此项"
|
||||
v-model="formData.storeService">
|
||||
</my-uni-combox>
|
||||
</view>
|
||||
<view class="cu-form-group justify-start" v-if="formData.storeService">
|
||||
<view class="title">服务店铺<text class="text-red">*</text></view>
|
||||
<my-uni-combox class="form-val-area" :candidates="myShopList" placeholder="请选择" :alwaysShowEmpty="true"
|
||||
v-model="formData.shopId">
|
||||
<template v-slot:empty>
|
||||
<view>
|
||||
<span>无匹配项,</span>
|
||||
<span class="text-blue" @click="goToShopList">点击增加</span>
|
||||
</view>
|
||||
</template>
|
||||
</my-uni-combox>
|
||||
</view>
|
||||
<view class="solid-top">
|
||||
<view class="cu-form-group">
|
||||
<view class="title">上架区域<text class="text-red">*</text></view>
|
||||
|
|
@ -198,6 +224,7 @@
|
|||
<view class="action text-black">区域描述<text class="text-red">*</text></view>
|
||||
</view>
|
||||
<view class="padding-lr-sm padding-bottom-sm">
|
||||
<!-- :adjust-position="false" -->
|
||||
<textarea name="areaDesc" style="width: 100%; height: 150rpx;"
|
||||
class="solid radius text-left padding-sm" v-model="servArea[index].areaDesc" maxlength="-1"
|
||||
placeholder="如:XX区XX街道未覆盖或XX区仅服务XX街道"></textarea>
|
||||
|
|
@ -327,6 +354,7 @@
|
|||
data() {
|
||||
return {
|
||||
goodsId: null,
|
||||
type: 1,
|
||||
formData: {
|
||||
servName: '',
|
||||
servDesc: '',
|
||||
|
|
@ -342,7 +370,10 @@
|
|||
detailDesc: '',
|
||||
descImgList: [],
|
||||
coverImgList: [],
|
||||
videoList: []
|
||||
videoList: [],
|
||||
shopId: '',
|
||||
shopName: '',
|
||||
storeService: ''
|
||||
},
|
||||
servArea: [],
|
||||
sysInfo: null,
|
||||
|
|
@ -404,22 +435,40 @@
|
|||
}],
|
||||
warrantyPeriodList: [{
|
||||
code: 1,
|
||||
name: '15天'
|
||||
name: '即时验收'
|
||||
}, {
|
||||
code: 2,
|
||||
name: '30天'
|
||||
name: '验收后离店'
|
||||
}, {
|
||||
code: 3,
|
||||
name: '45天'
|
||||
name: '完工24小时'
|
||||
}, {
|
||||
code: 4,
|
||||
name: '3个月'
|
||||
name: '3天'
|
||||
}, {
|
||||
code: 5,
|
||||
name: '6个月'
|
||||
name: '7天'
|
||||
}, {
|
||||
code: 6,
|
||||
name: '15天'
|
||||
}, {
|
||||
code: 7,
|
||||
name: '30天'
|
||||
}, {
|
||||
code: 8,
|
||||
name: '45天'
|
||||
}, {
|
||||
code: 9,
|
||||
name: '3个月'
|
||||
}, {
|
||||
code: 10,
|
||||
name: '6个月'
|
||||
}, {
|
||||
code: 11,
|
||||
name: '12个月'
|
||||
}, {
|
||||
code: 12,
|
||||
name: '24个月'
|
||||
}],
|
||||
expectDurationList: [{
|
||||
name: '12点前下单,预计当天下午上门/服务'
|
||||
|
|
@ -429,18 +478,41 @@
|
|||
name: '现时下单,预计次日上门/服务'
|
||||
}, {
|
||||
name: '现时下单,预计后日上门/服务'
|
||||
}, {
|
||||
name: '到店服务,按预约服务',
|
||||
}, {
|
||||
name: '到店服务,到达即服务'
|
||||
}],
|
||||
storeServiceList: [
|
||||
{
|
||||
code: 1,
|
||||
name: '到店服务'
|
||||
}, {
|
||||
code: 2,
|
||||
name: '到店+配送(服务)'
|
||||
}, {
|
||||
code: 3,
|
||||
name: '到店+上门(服务)'
|
||||
}
|
||||
],
|
||||
curUserInfo: {},
|
||||
bankCard: null,
|
||||
certifyInfo: null
|
||||
certifyInfo: null,
|
||||
myShopList: []
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
if (options && options.goodId) {
|
||||
this.goodsId = options.goodId;
|
||||
}
|
||||
if(options && options.type) {
|
||||
this.type = options.type
|
||||
}
|
||||
this.loadData(this.goodsId);
|
||||
},
|
||||
onShow() {
|
||||
this.loadShopList();
|
||||
},
|
||||
methods: {
|
||||
async loadData(goodId) {
|
||||
this.sysInfo = uni.getSystemInfoSync();
|
||||
|
|
@ -455,6 +527,15 @@
|
|||
// this.categoryList = await this.$api.data('categoryList');
|
||||
// this.regionList = await this.$api.data('regionList');
|
||||
},
|
||||
async loadShopList() {
|
||||
let res = await this.$request.getMasterShopAddressList(this.$request.getCurUserInfo().workerId);
|
||||
this.myShopList = res.data.map(item => {return {name: item.shopName, code: item.shopId}});
|
||||
},
|
||||
goToShopList() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/shop-list'
|
||||
})
|
||||
},
|
||||
async getCurGoodsInfo(goodsId) {
|
||||
let res1 = await this.$request.qryProductDetail({
|
||||
goodsId: goodsId
|
||||
|
|
@ -468,7 +549,7 @@
|
|||
});
|
||||
// 查询选中的第三级类目下的所有规格
|
||||
let res2 = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.type,
|
||||
goodsCategoryId: goods.deptGoodsCategoryId
|
||||
});
|
||||
let specsList = res2.data;
|
||||
|
|
@ -503,6 +584,11 @@
|
|||
});
|
||||
console.log(newAreaList)
|
||||
|
||||
let stopService = null
|
||||
if(goods.storeService) {
|
||||
stopService = this.storeServiceList.find(i => i.code == goods.storeService)
|
||||
}
|
||||
|
||||
this.formData = {
|
||||
servName: goods.goodsName,
|
||||
servDesc: goods.goodsDesc,
|
||||
|
|
@ -530,6 +616,8 @@
|
|||
descImgList: goods.detailUrl,
|
||||
videoList: goods.goodsVideoUrl ? [goods.goodsVideoUrl] : [],
|
||||
// status: 0,
|
||||
shopId: goods.shopId ? {code: goods.shopId, name: goods.shopName} : null,
|
||||
storeService: goods.storeService ? stopService : null
|
||||
}
|
||||
},
|
||||
async checkBankAndCertify() {
|
||||
|
|
@ -552,24 +640,24 @@
|
|||
},
|
||||
async loadCategoryList(idArr) {
|
||||
let typeList = await this.$request.listByStep({
|
||||
type: 1
|
||||
type: this.type
|
||||
});
|
||||
typeList = typeList.data;
|
||||
let col1Id = idArr ? idArr[0] : typeList[0].goodsCategoryId;
|
||||
let subTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.type,
|
||||
goodsCategoryId: col1Id
|
||||
});
|
||||
subTypeList = subTypeList.data;
|
||||
let col2Id = idArr ? idArr[1] : subTypeList[0].goodsCategoryId;
|
||||
let subSubTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.type,
|
||||
goodsCategoryId: col2Id
|
||||
});
|
||||
subSubTypeList = subSubTypeList.data;
|
||||
let col3Id = idArr ? idArr[2] : subSubTypeList[0].goodsCategoryId;
|
||||
let thirdTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.type,
|
||||
goodsCategoryId: col3Id
|
||||
});
|
||||
thirdTypeList = thirdTypeList.data;
|
||||
|
|
@ -603,7 +691,7 @@
|
|||
|
||||
// 查询最后一级品类
|
||||
let res = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.type,
|
||||
goodsCategoryId: chosenCategory[chosenCategory.length - 1].goodsCategoryId
|
||||
});
|
||||
this.formData.specsList = res.data;
|
||||
|
|
@ -613,14 +701,14 @@
|
|||
if (colObj.column == 0) {
|
||||
// 通过一级查询二级,通过二级查三级
|
||||
let subTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.type,
|
||||
goodsCategoryId: this.categoryList[0][colObj.value].goodsCategoryId
|
||||
});
|
||||
subTypeList = subTypeList.data;
|
||||
let subSubTypeList = [];
|
||||
if (subTypeList && subTypeList.length) {
|
||||
subSubTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.type,
|
||||
goodsCategoryId: subTypeList[0].goodsCategoryId
|
||||
});
|
||||
subSubTypeList = subSubTypeList.data;
|
||||
|
|
@ -633,7 +721,7 @@
|
|||
} else if (colObj.column == 1) {
|
||||
// 通过二级查三级
|
||||
let subSubTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.type,
|
||||
goodsCategoryId: this.categoryList[1][colObj.value].goodsCategoryId
|
||||
});
|
||||
subSubTypeList = subSubTypeList.data;
|
||||
|
|
@ -763,7 +851,15 @@
|
|||
mask: true
|
||||
});
|
||||
this.$request.uploadFile(ev.path).then((url) => {
|
||||
this.formData[this.curImgListField].push(url);
|
||||
if(this.curImgListField.indexOf('specsList') > -1) {
|
||||
// 规格上传图片
|
||||
const specsListIndex = this.curImgListField.split(':')[1]
|
||||
const temp = this.formData.specsList[specsListIndex]
|
||||
temp.imageUrl = url
|
||||
this.$set(this.formData.specsList, specsListIndex, temp)
|
||||
} else {
|
||||
this.formData[this.curImgListField].push(url);
|
||||
}
|
||||
uni.hideLoading();
|
||||
});
|
||||
// url设置为空,隐藏控件
|
||||
|
|
@ -858,6 +954,8 @@
|
|||
errMsg = '服务活动不能为空';
|
||||
} else if (!data.expectDuration) {
|
||||
errMsg = '服务时效不能为空';
|
||||
} else if(data.storeService && !data.shopId) {
|
||||
errMsg = '到店店铺不能为空';
|
||||
} else if (!data.goodsAreaList || !data.goodsAreaList.length) {
|
||||
errMsg = '上架区域填写不完整';
|
||||
} else if (!data.areaDesc) {
|
||||
|
|
@ -1004,9 +1102,16 @@
|
|||
goodsVideoUrl: goodsVideoUrl,
|
||||
status: 0,
|
||||
remark: this.formData.detailDesc,
|
||||
areaDesc: this.formData.areaDesc
|
||||
areaDesc: this.formData.areaDesc,
|
||||
type: this.type,
|
||||
shopId: this.formData.shopId ? this.formData.shopId.code : '',
|
||||
shopName: this.formData.shopId ? this.formData.shopId.name : '',
|
||||
storeService: this.formData.storeService ? this.formData.storeService.code : ''
|
||||
}
|
||||
|
||||
// console.log(params);
|
||||
// return
|
||||
|
||||
let res = null;
|
||||
if (this.goodsId) {
|
||||
res = await this.$request.editGoods({
|
||||
|
|
@ -1074,6 +1179,7 @@
|
|||
.certern-height {
|
||||
max-height: 520rpx;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.long-btn {
|
||||
|
|
|
|||
|
|
@ -28,6 +28,11 @@
|
|||
<view class="title">电子邮箱</view>
|
||||
<input name="email" :value="curUserInfo.email"></input>
|
||||
</view>
|
||||
<view class="cu-form-group" @click="showShopList">
|
||||
<view class="title">店铺管理</view>
|
||||
<view class="text-lg"><text class="cuIcon-right"></text></view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<view class="margin-top-sm bg-white">
|
||||
<view class="cu-form-group" @click="showAccountSecurity">
|
||||
|
|
@ -68,6 +73,11 @@
|
|||
url: '/pages/my/account-security'
|
||||
})
|
||||
},
|
||||
showShopList() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/shop-list'
|
||||
})
|
||||
},
|
||||
async submit() {
|
||||
let res = await this.$request.updateWorker({
|
||||
workerId: this.curUserInfo.workerId,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,130 @@
|
|||
<template>
|
||||
<view>
|
||||
<!-- 顶部操作条 -->
|
||||
<cu-custom :bgColor="'bg-main-color'" :isBack="true">
|
||||
<block slot="backText">返回</block>
|
||||
<block slot="content">店铺管理</block>
|
||||
</cu-custom>
|
||||
<!-- 店铺管理列表 -->
|
||||
<view class="margin-bottom-with-bar">
|
||||
<view class="padding margin-lr-sm margin-top-sm bg-white flex justify-between align-center" v-for="(item, index) in myAddressList" :key="index">
|
||||
<view class="flex flex-sub align-center">
|
||||
<image class="bg-img-container" :src="item.imageUrl.split(',')[0]" mode="aspectFill"></image>
|
||||
<view class="flex-sub">
|
||||
<view class="flex justify-start align-center">
|
||||
<view class="text-gray margin-right-xs">{{item.provinceName}}</view>
|
||||
<view class="text-gray margin-right-xs">{{item.cityName}}</view>
|
||||
<view class="text-gray margin-right-xs">{{item.countryName}}</view>
|
||||
<view class="text-gray margin-right-xs">{{item.streetName || ''}}</view>
|
||||
</view>
|
||||
<view class="text-lg margin-tb-sm">{{item.address}}</view>
|
||||
<view class="text-gray">
|
||||
<text class="margin-right">门店名称:</text>
|
||||
<text>{{item.shopName}}</text>
|
||||
</view>
|
||||
<view class="text-gray">
|
||||
<text class="margin-right">门店电话:</text>
|
||||
<text>{{item.phone}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="oper-column text-xl flex justify-end flex-direction">
|
||||
<view class="cuIcon-edit padding-lr-xs padding-tb-xs" @click="addEditAddress(item)"></view>
|
||||
<view class="cuIcon-close padding-lr-xs padding-tb-xs" @click="confirm2DelAddress(item)"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 底部新增地址按钮 -->
|
||||
<view class="cu-bar tabbar border shop fixed-bottom-bar bg-back">
|
||||
<button class="cu-btn bg-main-color long-btn margin-lr-sm shadow-blur" @click="addEditAddress(null)">新增店铺</button>
|
||||
</view>
|
||||
<!-- 模态框 -->
|
||||
<confirm-modal ref="confirmModal" :content="'是否确定删除?'" @confirm="delAddress"></confirm-modal>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
myAddressList: [],
|
||||
modalName: '',
|
||||
delAddressInfo: {},
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
|
||||
},
|
||||
onShow() {
|
||||
this.loadData();
|
||||
},
|
||||
methods: {
|
||||
async loadData() {
|
||||
let res = await this.$request.getMasterShopAddressList(this.$request.getCurUserInfo().workerId);
|
||||
this.myAddressList = res.data;
|
||||
},
|
||||
addEditAddress(addressInfo) {
|
||||
let url = null;
|
||||
let params = null;
|
||||
if (addressInfo) {
|
||||
// 修改
|
||||
addressInfo.area = [
|
||||
{
|
||||
areaId: addressInfo.cityId,
|
||||
areaName: addressInfo.cityName
|
||||
},{
|
||||
areaId: addressInfo.provinceId,
|
||||
areaName: addressInfo.provinceName
|
||||
},{
|
||||
areaId: addressInfo.countryId,
|
||||
areaName: addressInfo.countryName
|
||||
},{
|
||||
areaId: addressInfo.streetId || 0,
|
||||
areaName: addressInfo.streetName
|
||||
}]
|
||||
params = {
|
||||
addressInfo: addressInfo,
|
||||
mode: 0
|
||||
}
|
||||
} else {
|
||||
// 新增
|
||||
params = {
|
||||
mode: 1
|
||||
}
|
||||
}
|
||||
uni.navigateTo({
|
||||
url: '/pages/my/edit-shop-address?params=' + encodeURIComponent(JSON.stringify(params))
|
||||
})
|
||||
},
|
||||
confirm2DelAddress(addressInfo) {
|
||||
this.delAddressInfo = addressInfo;
|
||||
this.$refs.confirmModal.showModal();
|
||||
},
|
||||
async delAddress() {
|
||||
let res = await this.$request.delShopAddressList(this.delAddressInfo.shopId);
|
||||
if (res.code === 0) {
|
||||
this.loadData();
|
||||
uni.showToast({
|
||||
title: '删除成功',
|
||||
icon: 'success',
|
||||
mask: true
|
||||
})
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '删除失败',
|
||||
icon: 'error',
|
||||
mask: true
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.bg-img-container{
|
||||
width: 140rpx;
|
||||
height: 140rpx;
|
||||
margin-right: 14rpx;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
<block slot="backText">返回</block>
|
||||
<block slot="content">申请退单</block>
|
||||
</cu-custom>
|
||||
<view class="padding flex justify-start margin-top-sm bg-white">
|
||||
<!-- <view class="padding flex justify-start margin-top-sm bg-white">
|
||||
<view class="cu-avatar xxl-view" :style="'background-image:url(' + good.picUrl + ');'"></view>
|
||||
<view class="flex flex-column-between margin-left-sm">
|
||||
<view class="text-black text-lg">{{good.servTitle}}</view>
|
||||
|
|
@ -14,20 +14,21 @@
|
|||
{{item}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="margin-top-sm padding flex justify-between bg-white">
|
||||
<view>申请原因</view>
|
||||
<picker @change="reasonChange" :range="cancelReasonList" :range-key="'reasonName'">
|
||||
<view class="picker">
|
||||
{{formData.reasonObj.reasonId ? formData.reasonObj.reasonName : '请选择' }}
|
||||
{{formData.returnReason ? formData.returnReason : '请选择' }}
|
||||
<text class="text-gray text-lg margin-left-xs"><text class="cuIcon-right"></text></text>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="margin-top-sm padding bg-white">
|
||||
<view class="margin-bottom-sm">具体原因</view>
|
||||
<textarea style="width: 100%;" class="solid radius text-left padding-sm" v-model="formData.detailDesc" maxlength="-1"
|
||||
placeholder="本次原因请如实填写。无故退单,无理由退单引起客诉的你有责,订单大多数由推荐/分销人员带单产生,注意不要产生私自成交,撬单等行为,造成订单销售人员的佣金损失,不利于长远合作。被带单销售人员发现恶意违规破坏合作的,将追责3000元/单。"></textarea>
|
||||
<view class="margin-bottom-sm">具体原因<text class="text-gray margin-left-xs">(请填写退单退货的原因)</text></view>
|
||||
<textarea style="width: 100%;" class="solid radius text-left padding-sm" v-model="formData.returnReasonDetail" maxlength="-1"
|
||||
placeholder-style="color: #d2d1d1;"
|
||||
placeholder="无故退单,无理由退单引起客诉你将有责,本次原因请如实填写。订单大多数由推荐分销人员带单产生,注意不要产生私自成交、撬单等行为,造成订单销售人员的佣金损失,不利于长远合作。被带单销售人员发现恶意违规破坏合作的,将追责3000元/单。"></textarea>
|
||||
</view>
|
||||
<view class="margin-top-sm padding bg-white">
|
||||
<view class="margin-bottom-sm">上传凭证(选填)</view>
|
||||
|
|
@ -45,7 +46,7 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="cu-bar tabbar fixed-bottom-bar bg-back">
|
||||
<button class="bg-main-color cu-btn lg shadow-warp long-btn margin-lr" @click="nextStep">提交退单</button>
|
||||
<button class="bg-main-color cu-btn lg shadow-warp long-btn margin-lr" @click="submitCancelOrder">提交退单</button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
|
@ -54,48 +55,50 @@
|
|||
export default {
|
||||
data() {
|
||||
return {
|
||||
good: {},
|
||||
// good: {},
|
||||
formData: {
|
||||
imgList: [],
|
||||
reasonObj: {}
|
||||
returnReason: '',
|
||||
returnReasonDetail: ''
|
||||
},
|
||||
cancelReasonList: [{
|
||||
reasonId: 1,
|
||||
reasonName: '客户的时间我无法配合'
|
||||
}, {
|
||||
reasonId: 2,
|
||||
reasonName: '客户多次爽约'
|
||||
}, {
|
||||
reasonId: 3,
|
||||
reasonName: '客户不能确定时间'
|
||||
}, {
|
||||
reasonId: 4,
|
||||
reasonName: '客户多天未能联系上'
|
||||
}, {
|
||||
reasonId: 5,
|
||||
reasonName: '客户说无此服务'
|
||||
}, {
|
||||
reasonId: 6,
|
||||
reasonName: '客户要求已超出服务范围'
|
||||
}, {
|
||||
reasonId: 7,
|
||||
reasonName: '环境问题无法施工'
|
||||
}, {
|
||||
reasonId: 8,
|
||||
reasonName: '技能原因无法完成'
|
||||
}, {
|
||||
reasonId: 9,
|
||||
reasonName: '分岐未能谈妥'
|
||||
}, {
|
||||
reasonId: 10,
|
||||
reasonName: '不愿支付费用'
|
||||
}]
|
||||
cancelReasonList: [],
|
||||
orderId: null,
|
||||
orderType: null,
|
||||
detailPlaceholder: '',
|
||||
isDetailOrder: null,
|
||||
isSelfAcceptOrder: false
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
if (options && options.params) {
|
||||
this.good = JSON.parse(decodeURIComponent(options.params)).orderInfo;
|
||||
// if (options && options.params) {
|
||||
// this.good = JSON.parse(decodeURIComponent(options.params)).orderInfo;
|
||||
// }
|
||||
|
||||
if (options && options.orderId) {
|
||||
this.orderId = options.orderId
|
||||
}
|
||||
if(options && options.orderType) {
|
||||
let reasonList
|
||||
if(options.orderType === '1') {
|
||||
reasonList = ['商家原因,没时间备货!', '商家原因,缺货了!', '商家原因,发货时间迟了!', '商家原因,物流原因,长时间滞留路途!', '客户原因,无法接受质量!', '客户原因,商品无法满足期望!']
|
||||
} else {
|
||||
reasonList = ['师傅原因,时间排不上!', '师傅原因,技术不能解决问题!', '师傅原因,迟到了无法服务!', '客户原因,约好时间没遵守!', '客户原因,要求无法达成,无法沟通。']
|
||||
}
|
||||
this.cancelReasonList = reasonList.map((i , index)=> {
|
||||
return {
|
||||
reasonId: index + 1,
|
||||
reasonName: i
|
||||
}
|
||||
})
|
||||
this.orderType = options.orderType
|
||||
}
|
||||
if(options && options.isDetailOrder) {
|
||||
this.isDetailOrder = options.isDetailOrder
|
||||
}
|
||||
if(options && options.isSelfAcceptOrder) {
|
||||
this.isSelfAcceptOrder = options.isSelfAcceptOrder
|
||||
}
|
||||
|
||||
},
|
||||
methods: {
|
||||
chooseImgList(e) {
|
||||
|
|
@ -105,15 +108,18 @@
|
|||
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
||||
sourceType: ['album'], //从相册选择
|
||||
success: (res) => {
|
||||
let tempFilePaths = [];
|
||||
res.tempFiles.forEach((fileObj) => {
|
||||
tempFilePaths.push(fileObj.tempFilePath)
|
||||
})
|
||||
if (this.formData.imgList.length != 0) {
|
||||
this.formData.imgList = this.formData.imgList.concat(tempFilePaths)
|
||||
} else {
|
||||
this.formData.imgList = tempFilePaths
|
||||
}
|
||||
uni.showLoading({
|
||||
title: '上传中',
|
||||
mask: true
|
||||
});
|
||||
res.tempFiles.forEach((fileObj, index) => {
|
||||
this.$request.uploadFile(fileObj.tempFilePath).then((url) => {
|
||||
this.formData.imgList.push(url);
|
||||
if (index === res.tempFiles.length - 1) {
|
||||
uni.hideLoading();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
|
@ -137,7 +143,71 @@
|
|||
})
|
||||
},
|
||||
reasonChange(e) {
|
||||
this.formData.reasonObj = this.cancelReasonList[e.detail.value]
|
||||
this.formData.returnReason = this.cancelReasonList[e.detail.value].reasonName
|
||||
},
|
||||
submitCancelOrder() {
|
||||
if(!this.formData.returnReason) {
|
||||
uni.showToast({
|
||||
title: '请选择申请原因',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
if(!this.formData.returnReasonDetail) {
|
||||
uni.showToast({
|
||||
title: '请填写具体原因',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// if(this.isDetailOrder == 1 && this.isSelfAcceptOrder) {
|
||||
// uni.showModal({
|
||||
// title: '提示',
|
||||
// content: this.orderType == 1 ? '确认后订单回到你拣货/发货栏,你可重新派单或操作彻底退单' : '确认后订单回到你未约/未排栏,你可重新派单或操作彻底退单',
|
||||
// success: (res) => {
|
||||
// if(res.confirm) {
|
||||
// this.cancelSend()
|
||||
// }
|
||||
// },
|
||||
// })
|
||||
// } else {
|
||||
this.cancelSend()
|
||||
// }
|
||||
},
|
||||
async cancelSend() {
|
||||
const params = {
|
||||
id: this.orderId,
|
||||
returnImages: this.formData.imgList.length ? this.formData.imgList.toString() : '',
|
||||
returnReason: this.formData.returnReason,
|
||||
returnReasonDetail: this.formData.returnReasonDetail
|
||||
}
|
||||
let funcName = 'rejectMasterOrderWhenAccepted'
|
||||
if(this.isDetailOrder == 1) {
|
||||
funcName = 'rejectDetailOrder'
|
||||
}
|
||||
let res = await this.$request[funcName](params);
|
||||
if (res && res.code === 0) {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '退单成功',
|
||||
duration: 1000
|
||||
})
|
||||
await this.$request.addOrderOperate({
|
||||
orderId: this.orderId,
|
||||
orderType: '01',
|
||||
content: '师傅退单'
|
||||
})
|
||||
uni.navigateBack({
|
||||
delta: -1
|
||||
})
|
||||
} else {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: res.msg,
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,163 @@
|
|||
<template>
|
||||
<view>
|
||||
<!-- 顶部操作条 -->
|
||||
<cu-custom :bgColor="'bg-main-color'" :isBack="true" :isBackHome="true" :homePageUrl="'/pages/index/index'">
|
||||
<block slot="content">选择门店</block>
|
||||
</cu-custom>
|
||||
<!-- 产品列表 -->
|
||||
<view class="padding-lr padding-top bg-white solid-top">
|
||||
<view class="solid-bottom margin-bottom-sm padding-bottom-sm"
|
||||
v-for="(item, index) in productList" :key="item.id">
|
||||
<view class="flex-sub flex margin-top-sm">
|
||||
<view style="height: 150rpx;line-height: 150rpx;margin-right: 10px;">
|
||||
<radio class="main-color" :checked="chooseShopInfo && chooseShopInfo.shopId === item.shopId" @click="chooseShopInfo = item" />
|
||||
</view>
|
||||
<!-- <checkbox style="transform:scale(0.8);" class="main-color" :checked="chooseShopId === item.shopId" @click.stop="chooseShopId = item.shopId"></checkbox> -->
|
||||
<view style="width: 150rpx;height: 150rpx;margin-right:10px;display: flex;flex-direction: row;justify-content: center;">
|
||||
<image style="width: 100%;height: 100%;" :src="item.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;">{{item.shopName}}</view>
|
||||
<view>
|
||||
<view style="text-overflow: ellipsis;overflow: hidden;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 1;">{{item.provinceName + item.cityName + item.countryName + item.streetName + item.address}}</view>
|
||||
<view class="margin-lr-sm" style="display: inline-block;" v-if="item.distance">
|
||||
<view class="cu-tag bg-red" style="padding: 0 2px;height: auto;">距离客户</view>
|
||||
<text class="text-gray" style="vertical-align: middle;">{{item.distance}}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view v-if="index == 0">
|
||||
<text style="font-size: 24rpx;color: #0081ff;">您购买的商品的店铺所属服务点(距离近可优先选择)</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 底部新增地址按钮 -->
|
||||
<view class="cu-bar tabbar border shop fixed-bottom-bar bg-back">
|
||||
<button class="cu-btn bg-main-color long-btn margin-lr-sm shadow-blur" @click="selectShop">确定</button>
|
||||
</view>
|
||||
<!-- <view class="margin-bottom-lg">
|
||||
<view v-if="hasMoreData" class="text-center bg-main-color padding-tb text-lg" @click="loadProductData">
|
||||
<text class="margin-right-xs">查看更多</text>
|
||||
<text class="text-bold cuIcon-unfold"></text>
|
||||
</view>
|
||||
<view class="cu-load" :class="loadMoreStatus"></view>
|
||||
</view> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
productList: [],
|
||||
loadMoreStatus: '',
|
||||
hasMoreData: false,
|
||||
pageNum: this.$globalData.initPageNum,
|
||||
pageSize: this.$globalData.initPageSize,
|
||||
inputGoodsName: null,
|
||||
goodsId: null,
|
||||
shopId: null,
|
||||
chooseShopInfo: null,
|
||||
addressFull: null,
|
||||
}
|
||||
},
|
||||
async onLoad(options) {
|
||||
this.goodsId = options.goodsId;
|
||||
this.shopId = options.shopId;
|
||||
this.addressFullObj = JSON.parse(options.addressFullObj)
|
||||
|
||||
this.loadData();
|
||||
},
|
||||
methods: {
|
||||
async loadData() {
|
||||
this.pageNum = this.$globalData.initPageNum;
|
||||
this.pageSize = this.$globalData.initPageSize;
|
||||
this.loadProductData();
|
||||
},
|
||||
loadCategoryList(type = 1) {},
|
||||
async loadProductData(params = {}) {
|
||||
params.pageNum = this.pageNum;
|
||||
params.pageSize = this.pageSize;
|
||||
// if(this.addressLatitude && this.addressLongitude) {
|
||||
// params.latitude = this.addressLatitude
|
||||
// params.longitude = this.addressLongitude
|
||||
// }
|
||||
params.provinceName = this.addressFullObj.provinceName,
|
||||
params.cityName = this.addressFullObj.cityName,
|
||||
params.countryName = this.addressFullObj.countryName,
|
||||
params.streetName = this.addressFullObj.streetName,
|
||||
params.address = this.addressFullObj.address
|
||||
params.goodsId = this.goodsId
|
||||
// params.goodsId = 2089
|
||||
|
||||
this.loadMoreStatus = 'loading bg-main-color padding-tb text-lg';
|
||||
this.hasMoreData = false;
|
||||
try {
|
||||
await this.loadShopPage(params);
|
||||
this.loadMoreStatus = this.hasMoreData ? '' : 'over bg-grey padding-tb text-lg';
|
||||
} catch (e) {
|
||||
this.loadMoreStatus = 'erro bg-red padding-tb text-lg'
|
||||
}
|
||||
},
|
||||
reloadShopPage() {
|
||||
this.pageNum = this.$globalData.initPageNum;
|
||||
this.pageSize = this.$globalData.initPageSize;
|
||||
this.pageNumOfOtherCityPage = this.$globalData.initPageNum;
|
||||
this.productList = [];
|
||||
this.loadProductData();
|
||||
},
|
||||
async loadShopPage(params) {
|
||||
let res = await this.$request.getShopsByGoodsId(params);
|
||||
// let rowsLength = res[1].data.rows.length;
|
||||
// if (rowsLength === this.pageSize) {
|
||||
// this.hasMoreData = true;
|
||||
// }
|
||||
// if (this.pageNum === this.$globalData.initPageNum) {
|
||||
// this.productList = res[1].data.rows;
|
||||
// } else {
|
||||
// this.productList = this.productList.concat(res[1].data.rows);
|
||||
// }
|
||||
// this.pageNum++;
|
||||
|
||||
this.productList = res.data.serviceShops
|
||||
this.chooseShopInfo = res.data.serviceShops.find(i => i.shopId == this.shopId)
|
||||
console.log(this.productList);
|
||||
},
|
||||
searchGoods() {
|
||||
this.reloadShopPage();
|
||||
},
|
||||
selectShop() {
|
||||
uni.$emit('chooseShop', this.chooseShopInfo);
|
||||
uni.navigateBack({
|
||||
delta: -1
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.search-nav-item-text {
|
||||
width: 100rpx;
|
||||
}
|
||||
|
||||
.nav .cu-item {
|
||||
height: 90rpx;
|
||||
display: inline-block;
|
||||
line-height: 90rpx;
|
||||
margin: 0;
|
||||
padding: 0 10rpx;
|
||||
width: 180rpx;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.cu-load {
|
||||
display: block;
|
||||
line-height: unset;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,261 @@
|
|||
<template>
|
||||
<view v-if="afterServiceRecord">
|
||||
<view v-if="afterServiceRecord.createBy == 1" class="padding-tb solid-top">
|
||||
<view class='cu-tag bg-main-color radius light'>售后发起中</view>
|
||||
<view class="text-gray text-sm margin-bottom-xs">您需快速操作反馈,24小时内不操作将自动同意!</view>
|
||||
<view v-if="afterServiceRecord.operType === 1">
|
||||
<view class="flex justify-start align-end">
|
||||
<text>退款申请:</text>
|
||||
<uni-countdown :show-colon="false" :backgroundColor="'#eee'"
|
||||
:day="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).day"
|
||||
:hour="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).hour"
|
||||
:minute="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).min"
|
||||
:second="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).seconds">
|
||||
</uni-countdown>
|
||||
</view>
|
||||
<view>
|
||||
<text>退款金额:</text>
|
||||
<text v-if="afterServiceRecord.refund">{{afterServiceRecord.refund}}</text>
|
||||
<text v-else-if="order.payMoney">{{order.payMoney}}</text>
|
||||
</view>
|
||||
<view>
|
||||
<text>退款原因:</text>
|
||||
<text v-if="afterServiceRecord.customerReasonType === 1">上门/服务不守时</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 2">态度不友好,无法继续</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 3">服务效果差,未达到合格</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 4">技能水平问题,未妥善完成</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 5">要求加费用,费用不合理</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 6">订单拖太久了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 7">超了些服务内容,师傅不接受</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 8">客户/我时间不方便了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 9">客户/我已让别的师傅服务了</text>
|
||||
</view>
|
||||
<view>
|
||||
<text>具体原因:</text>
|
||||
<text v-if="afterServiceRecord.customerReason">{{afterServiceRecord.customerReason}}</text>
|
||||
</view>
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm">
|
||||
<view class="bg-img" v-for="(imgObj, imgIndex) in afterServiceRecord.imgsList" :key="imgIndex" v-if="imgObj.imgUploadBy === 1">
|
||||
<image :src="imgObj.imgUrl" @tap="viewImage($event, [imgObj.imgUrl])" :data-url="imgObj.imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view>
|
||||
<text class="text-red" v-if="order.workerId == order.masterWorkerId && !order.isOnlyServ && order.payMoney < afterServiceRecord.refund && afterServiceRecord.customerFinalCheck == null">警报:退单金额大于该师傅接单金额,但客户发起的退款金额有效,您需介入处理,如让接单师傅系统上操作同意退款,系统最大按该单派单额退回客户,其余需人工处理!如属于师傅责任引起的退单,建议重做,重做后让客户撤消退单!</text>
|
||||
</view>
|
||||
</view>
|
||||
<view v-else-if="afterServiceRecord.operType === 2">
|
||||
<view class="flex justify-start align-end">
|
||||
<text>待处理售后:</text>
|
||||
<uni-countdown :show-colon="false" :backgroundColor="'#eee'"
|
||||
:day="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).day"
|
||||
:hour="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).hour"
|
||||
:minute="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).min"
|
||||
:second="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).seconds">
|
||||
</uni-countdown>
|
||||
</view>
|
||||
<view>
|
||||
<text>售后原因:</text>
|
||||
<text v-if="afterServiceRecord.customerReasonType === 1">上门/服务不守时</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 2">态度不友好,无法继续</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 3">服务效果差,未达到合格</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 4">技能水平问题,未妥善完成</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 5">要求加费用,费用不合理</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 6">订单拖太久了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 7">超了些服务内容,师傅不接受</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 8">客户/我时间不方便了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 9">客户/我已让别的师傅服务了</text>
|
||||
</view>
|
||||
<view>
|
||||
<text>具体原因:</text>
|
||||
<text v-if="afterServiceRecord.customerReason">{{afterServiceRecord.customerReason}}</text>
|
||||
</view>
|
||||
<view>
|
||||
<text>完成操作:点击“操作处理”提交由客服回访!</text>
|
||||
</view>
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm">
|
||||
<view class="bg-img" v-for="(imgObj, imgIndex) in afterServiceRecord.imgsList" :key="imgIndex" v-if="imgObj.imgUploadBy === 1">
|
||||
<image :src="imgObj.imgUrl" @tap="viewImage($event, [imgObj.imgUrl])" :data-url="imgObj.imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex justify-end align-end margin-tb-sm" v-if="!afterServiceRecord.updateBy && afterServiceRecord.workerFeedbackResult === null && showActionBtn">
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" @tap="$emit('redoGoHome')">上门重做</button>
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" @tap="$emit('callModal', 'rejectAfterSale')">拒绝处理</button>
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" @tap="$emit('callModal', 'agreeAfterSale')">操作处理</button>
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.updateBy == 2" class="padding-tb solid-top">
|
||||
<view class='cu-tag bg-main-color radius light'>师傅反馈</view>
|
||||
<view>
|
||||
<view class="margin-top-xs">
|
||||
<text>师傅反馈结果:</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackResult === 0">拒绝</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackResult === 1">同意</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackResult === 2 || afterServiceRecord.workerFeedbackResult === 3">上门重做/补做</text>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.workerFeedbackResult === 1">
|
||||
<text>同意退款金额:</text>
|
||||
<text>{{afterServiceRecord.agreedRefund ? afterServiceRecord.agreedRefund : afterServiceRecord.refund}}</text>
|
||||
</view>
|
||||
<view style="padding-left: 196upx;" v-if="afterServiceRecord.workerFeedbackResult === 2 || afterServiceRecord.workerFeedbackResult === 3">
|
||||
<view>客户同意则本次退款金额为0元</view>
|
||||
<view>客户同意的需马上处理并重新提交</view>
|
||||
<view class="text-right" v-if="afterServiceRecord.customerAgreeRedo === 1">
|
||||
<view class='cu-tag bg-main-color radius light'>客户同意方案</view>
|
||||
</view>
|
||||
</view>
|
||||
<template v-if="afterServiceRecord.workerFeedbackResult == 0 || afterServiceRecord.workerFeedbackResult == 1">
|
||||
<view>
|
||||
<text>师傅反馈:</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackReasonType === 1">客户原因</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackReasonType === 2">师傅原因</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackReasonType === 3">其他</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackReason">
|
||||
<text v-if="afterServiceRecord.workerFeedbackReasonType">,</text>
|
||||
{{afterServiceRecord.workerFeedbackReason}}
|
||||
</text>
|
||||
</view>
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm" v-if="afterServiceRecord.workerFeedbackImages">
|
||||
<view class="bg-img" v-for="(imgUrl, imgIndex) in afterServiceRecord.workerFeedbackImages.split(',')" :key="imgIndex">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<template v-else-if="afterServiceRecord.workerFeedbackResult === 3">
|
||||
<view class="margin-top-xs">
|
||||
<text>师傅重做/补做提交:</text>
|
||||
</view>
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm" v-if="afterServiceRecord.redoCompleteImages">
|
||||
<view class="bg-img" v-for="(imgUrl, imgIndex) in afterServiceRecord.redoCompleteImages.split(',')" :key="imgIndex">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="margin-bottom-xs">
|
||||
<text>{{afterServiceRecord.redoCompleteRemark}}</text>
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
|
||||
<view style="border-top: 1px solid gainsboro;padding-top: 10upx;" v-if="afterServiceRecord.customerFinalCheck == null && afterServiceRecord.redoCompleteTime && (afterServiceRecord.workerFeedbackResult === 0 || afterServiceRecord.workerFeedbackResult === 1 || afterServiceRecord.workerFeedbackResult === 3)">
|
||||
<text class="text-gray" style="font-size: 20upx;">待客户验收或审核,36小时未操作将自动取消本次售后</text>
|
||||
<view class="flex align-center margin-top-sm">
|
||||
<text>工单时限:</text>
|
||||
<uni-countdown :show-colon="false" :backgroundColor="'#eee'"
|
||||
:day="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.redoCompleteTime, 36)).day"
|
||||
:hour="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.redoCompleteTime, 36)).hour"
|
||||
:minute="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.redoCompleteTime, 36)).min"
|
||||
:second="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.redoCompleteTime, 36)).seconds">
|
||||
</uni-countdown>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
<view class="flex justify-end align-end margin-tb-sm" v-if="afterServiceRecord.workerFeedbackResult === 2 && showActionBtn">
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" @tap="$emit('callModal', 'showReFinishSubmit')">重做/补做提交</button>
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck != null" class="padding-tb solid-top">
|
||||
<template v-if="order.afterPlatformServiceStatus === 0 || order.afterPlatformServiceStatus == 1">
|
||||
<view class='cu-tag bg-main-color radius light'>客户最终确认</view>
|
||||
<view class="margin-top-xs">
|
||||
{{afterServiceRecord.customerFinalCheck === 1 ? '同意' : '不同意'}}
|
||||
<text v-if="afterServiceRecord.isAutoProcessed == 1 && afterServiceRecord.customerFinalCheck === 1">(超时系统自动同意)</text>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck === 0">
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm" v-if="afterServiceRecord.customerDisagreeImages">
|
||||
<view class="bg-img" v-for="imgUrl in afterServiceRecord.customerDisagreeImages.split(',')" :key="imgUrl">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="margin-bottom-xs" v-if="afterServiceRecord.customerDisagreeReason">
|
||||
<text>不同意理由:{{afterServiceRecord.customerDisagreeReason}}</text>
|
||||
</view>
|
||||
<view class="text-red" v-if="afterServiceRecord.customerFinalCheck === 0">订单交由平台协商处理</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck === 0">系统提示您,如能协商尽可能与客户协商一致(能重新协商则按双方认可方案重新发起)!可让客户撤单最佳。</view>
|
||||
</view>
|
||||
<view v-else-if="afterServiceRecord.customerFinalCheck === 1">
|
||||
<template v-if="afterServiceRecord.workerFeedbackResult !== 0">
|
||||
<view v-if="(afterServiceRecord.agreedRefund > 0 || afterServiceRecord.originalRefund > 0) && order.refundPayStatus == 1">
|
||||
<view>
|
||||
<text>本单退款,系统已发起按客户支付的帐户原路退回</text>
|
||||
<text class="text-red">{{afterServiceRecord.originalRefund || afterServiceRecord.agreedRefund}}</text>
|
||||
<text>元,银行按工作日退款,节假日顺延到帐。遇客户问询,请其耐心等待,到账时会在客户端”客户最终确认“处有到账时间。</text>
|
||||
</view>
|
||||
<view>退款支付到账:{{afterServiceRecord.refundApplyTime}}</view>
|
||||
</view>
|
||||
<view v-else-if="order.refundPayStatus == 0">
|
||||
<text v-if="afterServiceRecord.workerFeedbackResult === 3">本次售后已重新补做并验收完成(退款额为0)。</text>
|
||||
<text v-else>本单已退款<text class="text-red">{{afterServiceRecord.originalRefund || afterServiceRecord.agreedRefund}}</text>元,因未实际支付,实退为0元。未退部分继续完成订单及正常支付!</text>
|
||||
</view>
|
||||
</template>
|
||||
<view v-else>
|
||||
<text>本次售后已操作完毕,售后申请已结束!</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<template v-else-if="order.afterPlatformServiceStatus === 2 || order.afterPlatformServiceStatus === 3">
|
||||
<view class='cu-tag bg-main-color radius light'>客户最终确认</view>
|
||||
<view class="margin-top-xs">
|
||||
{{order.afterPlatformServiceStatus === 2 ? '同意' : '取消售后'}}
|
||||
(平台操作)
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.platformHandleReason">
|
||||
<text>平台意见:{{afterServiceRecord.platformHandleReason}}</text>
|
||||
</view>
|
||||
<view v-if="order.afterPlatformServiceStatus === 3">
|
||||
<text>本次售后已操作完毕,售后申请已结束!</text>
|
||||
</view>
|
||||
<template v-else>
|
||||
<view v-if="(afterServiceRecord.platformRefund || afterServiceRecord.agreedRefund) && order.refundPayStatus == 1">
|
||||
<view>
|
||||
<text>本单退款,系统已发起按客户支付的帐户原路退回</text>
|
||||
<text class="text-red">{{afterServiceRecord.platformRefund || afterServiceRecord.agreedRefund}}</text>
|
||||
<text>元,银行按工作日退款,节假日顺延到帐。遇客户问询,请其耐心等待,到账时会在客户端”客户最终确认“处有到账时间。</text>
|
||||
</view>
|
||||
<view>退款支付到账:{{afterServiceRecord.refundApplyTime}}</view>
|
||||
</view>
|
||||
<view v-else-if="order.refundPayStatus == 0">
|
||||
<text>本单已退款<text class="text-red">{{afterServiceRecord.platformRefund || afterServiceRecord.agreedRefund || 0}}</text>元,因未实际支付,实退为0元。未退部分继续完成订单及正常支付!</text>
|
||||
</view>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
emits: ['redoGoHome', 'callModal'],
|
||||
props: {
|
||||
afterServiceRecord: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
},
|
||||
order: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
},
|
||||
showActionBtn: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
viewImage(e, imgList) {
|
||||
uni.previewImage({
|
||||
urls: imgList,
|
||||
current: e.currentTarget.dataset.url
|
||||
});
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
|
@ -0,0 +1,394 @@
|
|||
<template>
|
||||
<view v-if="afterServiceRecord">
|
||||
<view v-if="afterServiceRecord.createBy == 1" class="padding-tb solid-top">
|
||||
<view class='cu-tag bg-main-color radius light'>售后发起中</view>
|
||||
<view class="text-gray text-sm margin-bottom-xs">您需快速操作反馈,24小时内不操作将自动同意!</view>
|
||||
<view v-if="afterServiceRecord.operType === 1">
|
||||
<view class="flex justify-start align-end">
|
||||
<text>{{afterServiceRecord.operType === 1 ? '退款申请:' : '待处理售后:'}}</text>
|
||||
<uni-countdown :show-colon="false" :backgroundColor="'#eee'"
|
||||
:day="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).day"
|
||||
:hour="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).hour"
|
||||
:minute="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).min"
|
||||
:second="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).seconds">
|
||||
</uni-countdown>
|
||||
</view>
|
||||
<view>
|
||||
<text>退款金额:</text>
|
||||
<text v-if="afterServiceRecord.refund">{{afterServiceRecord.refund}}</text>
|
||||
<text v-else-if="order.payMoney">{{order.payMoney}}</text>
|
||||
</view>
|
||||
<view>
|
||||
<text>售后类型:</text>
|
||||
<text v-if="afterServiceRecord.afterServiceType === 1">未收到货,我要退单退款!</text>
|
||||
<text v-else-if="afterServiceRecord.afterServiceType === 2">未收到货(发货在途),我要退款!</text>
|
||||
<text v-else-if="afterServiceRecord.afterServiceType === 3">已收到货,我要退款退货!</text>
|
||||
</view>
|
||||
<view>
|
||||
<text>申请原因:</text>
|
||||
<text v-if="afterServiceRecord.customerReasonType === 1">不想要了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 2">买错型号尺寸了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 3">材质与商品描述不符</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 4">大小尺寸与商品描述不符</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 5">颜色、款式、型号与描述不符</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 6">出现质量问题</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 7">收到商品少件(少配件)</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 8">商家发错货</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 9">商品破损或污渍</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 10">未按承诺时间发货</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 11">未见快递/物流有信息</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 12">其它原因</text>
|
||||
</view>
|
||||
<view>
|
||||
<text>具体原因:</text>
|
||||
<text v-if="afterServiceRecord.customerReason">{{afterServiceRecord.customerReason}}</text>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.operType === 2">
|
||||
<text>完成操作:点击“操作处理”提交由客服回访!</text>
|
||||
</view>
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm">
|
||||
<view class="bg-img" v-for="(imgObj, imgIndex) in afterServiceRecord.imgsList" :key="imgIndex" v-if="imgObj.imgUploadBy === 1">
|
||||
<image :src="imgObj.imgUrl" @tap="viewImage($event, [imgObj.imgUrl])" :data-url="imgObj.imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view>
|
||||
<text class="text-red" v-if="order.workerId == order.masterWorkerId && !order.isOnlyServ && order.payMoney < afterServiceRecord.refund && afterServiceRecord.customerFinalCheck == null">警报:退单金额大于该师傅接单金额,但客户发起的退款金额有效,您需介入处理,如让接单师傅系统上操作同意退款,系统最大按该单派单额退回客户,其余需人工处理!如属于师傅责任引起的退单,建议重做,重做后让客户撤消退单!</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="flex justify-end align-end margin-tb-sm" v-if="!afterServiceRecord.updateBy || afterServiceRecord.updateBy == 1">
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" @tap="showModalByRef('sure2Revisit', order, null)">重发/补发</button>
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" data-modal="rejectAfterSale" @tap="showModal($event, order)">拒绝处理</button>
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" data-modal="agreeAfterSale" @tap="showModal($event, order)">操作处理</button>
|
||||
</view> -->
|
||||
<!-- {{!afterServiceRecord.updateBy}}
|
||||
{{afterServiceRecord.workerFeedbackResult === null}}
|
||||
{{showActionBtn}} -->
|
||||
<view class="flex justify-end align-end margin-tb-sm" v-if="(!afterServiceRecord.updateBy || afterServiceRecord.updateBy == 1) && afterServiceRecord.workerFeedbackResult === null && showActionBtn">
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" @tap="$emit('redoGoHome')">重发/补发</button>
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" @tap="$emit('callModal', 'rejectAfterSale')">拒绝处理</button>
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" @tap="$emit('callModal', 'agreeAfterSale')">操作处理</button>
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.updateBy != 1" class="padding-tb solid-top">
|
||||
<view class='cu-tag bg-main-color radius light'>商家反馈</view>
|
||||
<view>
|
||||
<view class="margin-top-xs">
|
||||
<text>商家反馈结果:</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackResult === 0">拒绝</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackResult === 1">同意</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackResult === 2 || afterServiceRecord.workerFeedbackResult === 3">{{order.orderType == 1 ? '重发/补发商品' : '上门重做/补做'}}</text>
|
||||
</view>
|
||||
<template v-if="afterServiceRecord.workerFeedbackResult === 1">
|
||||
<view>
|
||||
<text>同意退款金额:</text>
|
||||
<text>{{afterServiceRecord.agreedRefund ? afterServiceRecord.agreedRefund : afterServiceRecord.refund}}</text>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.workerReceiveStatus">
|
||||
<text>收货状态:</text>
|
||||
<text v-if="afterServiceRecord.workerReceiveStatus == 1">未发货</text>
|
||||
<text v-else-if="afterServiceRecord.workerReceiveStatus == 2">已发货在途</text>
|
||||
<text v-else-if="afterServiceRecord.workerReceiveStatus == 3">已收货</text>
|
||||
<text v-else-if="afterServiceRecord.workerReceiveStatus == 4">售后保障期</text>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.workerAgreeType">
|
||||
<text>同意选项:</text>
|
||||
<text v-if="afterServiceRecord.workerAgreeType == 1">同意即时退单退款</text>
|
||||
<text v-else-if="afterServiceRecord.workerAgreeType == 2">同意货物拦截后退单退款</text>
|
||||
<text v-else-if="afterServiceRecord.workerAgreeType == 3">同意快递返回货物后退单退款</text>
|
||||
<text v-else-if="afterServiceRecord.workerAgreeType == 4">同意您退回货物后退单退款</text>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<view v-if="afterServiceRecord.workerFeedbackResult === 2 || afterServiceRecord.workerFeedbackResult === 3" style="padding-left: 196upx;">
|
||||
<view v-if="afterServiceRecord.workerResendPlan">
|
||||
<text v-if="afterServiceRecord.workerResendPlan == 1">重发/补发,您无需退货</text>
|
||||
<text v-if="afterServiceRecord.workerResendPlan == 2">重发/补发前,您需先退货</text>
|
||||
<text v-if="afterServiceRecord.workerResendPlan == 3">请您退回商品,给你换货</text>
|
||||
<text v-if="afterServiceRecord.workerResendPlan == 4">请退回商品,为您售后换货</text>
|
||||
</view>
|
||||
<view>客户同意则本次退款金额为0元</view>
|
||||
<view>客户同意的需马上处理并重新提交</view>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.workerFeedbackResult !== 2 && afterServiceRecord.workerFeedbackResult !== 3">
|
||||
<text>商家反馈:</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackReasonType === 1">客户原因</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackReasonType === 2">商家原因</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackReasonType === 3">其他</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackReason">
|
||||
<text v-if="afterServiceRecord.workerFeedbackReasonType">,</text>
|
||||
{{afterServiceRecord.workerFeedbackReason}}
|
||||
</text>
|
||||
</view>
|
||||
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm" v-if="afterServiceRecord.workerFeedbackImages">
|
||||
<view class="bg-img" v-for="(imgUrl, imgIndex) in afterServiceRecord.workerFeedbackImages.split(',')" :key="imgIndex">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="text-right" v-if="afterServiceRecord.customerAgreeRedo === 1">
|
||||
<!-- 同意售后并且同意类型需要退货;;重发补发以及重发方案为需要退货 -->
|
||||
<view class='cu-tag bg-main-color radius light' v-if="(afterServiceRecord.workerFeedbackResult === 1 && (afterServiceRecord.workerAgreeType == 2 || afterServiceRecord.workerAgreeType == 3 || afterServiceRecord.workerAgreeType == 4)) || ((afterServiceRecord.workerFeedbackResult === 2 || afterServiceRecord.workerFeedbackResult === 3) && (afterServiceRecord.workerResendPlan === 2 || afterServiceRecord.workerResendPlan === 3 || afterServiceRecord.workerResendPlan === 4))">客户反馈未收货,货在途</view>
|
||||
<view class='cu-tag bg-main-color radius light' v-else>客户同意方案</view>
|
||||
</view>
|
||||
|
||||
<template v-if="afterServiceRecord.returnType">
|
||||
<view class="margin-top-xs">
|
||||
<text>客户已退货:</text>
|
||||
</view>
|
||||
<view class="flex justify-between align-center">
|
||||
<text>发货方式:{{afterServiceRecord.returnType == 1 ? '发快递/物流': (afterServiceRecord.returnType == 2 ? '送货上门' : '客户自提')}}</text>
|
||||
<text v-if="afterServiceRecord.returnType == 1" @click="copyData(afterServiceRecord.returnTrackingNumber)">{{afterServiceRecord.returnTrackingNumber}}<text class="cuIcon-copy"></text><text class="text-main-color margin-left-sm" @click.stop="getDeliveryFlow(afterServiceRecord.returnTrackingNumber)">查询</text></text>
|
||||
</view>
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm" v-if="afterServiceRecord.returnImages">
|
||||
<view class="bg-img" v-for="(imgUrl, imgIndex) in afterServiceRecord.returnImages.split(',')" :key="imgIndex">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="margin-bottom-xs" v-if="afterServiceRecord.returnRemark">
|
||||
<text>发货备注:{{afterServiceRecord.returnRemark}}</text>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<template v-if="afterServiceRecord.workerFeedbackResult === 3 && afterServiceRecord.workerResendType">
|
||||
<view class="margin-top-xs">
|
||||
<text>商家重发/补发提交:</text>
|
||||
</view>
|
||||
<view class="flex justify-between align-center">
|
||||
<text>发货方式:{{afterServiceRecord.workerResendType == 1 ? '发快递/物流': (afterServiceRecord.workerResendType == 2 ? '送货上门' : '客户自提')}}</text>
|
||||
<text v-if="afterServiceRecord.workerResendType == 1" @click="copyData(afterServiceRecord.workerResendTrackingNumber)">{{afterServiceRecord.workerResendTrackingNumber}}<text class="cuIcon-copy"></text></text>
|
||||
</view>
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm" v-if="afterServiceRecord.workerResendImages">
|
||||
<view class="bg-img" v-for="(imgUrl, imgIndex) in afterServiceRecord.workerResendImages.split(',')" :key="imgIndex">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="margin-bottom-xs" v-if="afterServiceRecord.workerResendRemark">
|
||||
<text>发货备注:{{afterServiceRecord.workerResendRemark}}</text>
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view style="border-top: 1px solid gainsboro;padding-top: 10upx;" v-if="afterServiceRecord.customerFinalCheck == null && afterServiceRecord.workerResendType">
|
||||
<view v-if="afterServiceRecord.workerResendType == 1">
|
||||
<text class="text-gray" style="font-size: 20upx;">待客户验收或审核,4天内未操作将自动完成本次售后!</text>
|
||||
<view class="flex align-center margin-top-sm">
|
||||
<text>操作时限:</text>
|
||||
<uni-countdown :show-colon="false" :backgroundColor="'#eee'"
|
||||
:day="$dateUtil.countDownDiff($dateUtil.addDays(afterServiceRecord.workerResendTime, 4)).day"
|
||||
:hour="$dateUtil.countDownDiff($dateUtil.addDays(afterServiceRecord.workerResendTime, 4)).hour"
|
||||
:minute="$dateUtil.countDownDiff($dateUtil.addDays(afterServiceRecord.workerResendTime, 4)).min"
|
||||
:second="$dateUtil.countDownDiff($dateUtil.addDays(afterServiceRecord.workerResendTime, 4)).seconds">
|
||||
</uni-countdown>
|
||||
</view>
|
||||
</view>
|
||||
<view v-else>
|
||||
<text class="text-gray" style="font-size: 20upx;">待客户验收或审核,24小时未操作将自动同意本售后!</text>
|
||||
<view class="flex align-center margin-top-sm">
|
||||
<text>操作时限:</text>
|
||||
<uni-countdown :show-colon="false" :backgroundColor="'#eee'"
|
||||
:day="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.workerResendTime, 24)).day"
|
||||
:hour="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.workerResendTime, 24)).hour"
|
||||
:minute="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.workerResendTime, 24)).min"
|
||||
:second="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.workerResendTime, 24)).seconds">
|
||||
</uni-countdown>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view style="border-top: 1px solid gainsboro;padding-top: 10upx;" v-if="afterServiceRecord.customerFinalCheck == null && (afterServiceRecord.workerFeedbackResult === 0 || afterServiceRecord.workerFeedbackResult === 1 || afterServiceRecord.workerFeedbackResult === 3 || (afterServiceRecord.workerFeedbackResult === 2 && (afterServiceRecord.workerResendPlan === 2 || afterServiceRecord.workerResendPlan === 3)))">
|
||||
<template v-if="afterServiceRecord.workerFeedbackResult === 1 && afterServiceRecord.customerOperationTime">
|
||||
<text class="text-gray" style="font-size: 20upx;">您需跟踪客户退货或物流返货,收到后第一时间操作“结单”键退款!</text>
|
||||
<view class="flex align-center margin-top-sm">
|
||||
<text>工单时限:</text>
|
||||
<uni-countdown :show-colon="false" :backgroundColor="'#eee'"
|
||||
:day="$dateUtil.countDownDiff($dateUtil.addDays(afterServiceRecord.customerOperationTime, 6)).day"
|
||||
:hour="$dateUtil.countDownDiff($dateUtil.addDays(afterServiceRecord.customerOperationTime, 6)).hour"
|
||||
:minute="$dateUtil.countDownDiff($dateUtil.addDays(afterServiceRecord.customerOperationTime, 6)).min"
|
||||
:second="$dateUtil.countDownDiff($dateUtil.addDays(afterServiceRecord.customerOperationTime, 6)).seconds">
|
||||
</uni-countdown>
|
||||
</view>
|
||||
</template>
|
||||
<template v-if="afterServiceRecord.workerFeedbackResult === 2 && afterServiceRecord.workerResendPlanTime">
|
||||
<text class="text-gray" style="font-size: 20upx;">待客户验收或审核,36小时未操作将自动取消本次售后</text>
|
||||
<view class="flex align-center margin-top-sm">
|
||||
<text>工单时限:</text>
|
||||
<uni-countdown :show-colon="false" :backgroundColor="'#eee'"
|
||||
:day="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.workerResendPlanTime, 36)).day"
|
||||
:hour="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.workerResendPlanTime, 36)).hour"
|
||||
:minute="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.workerResendPlanTime, 36)).min"
|
||||
:second="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.workerResendPlanTime, 36)).seconds">
|
||||
</uni-countdown>
|
||||
</view>
|
||||
</template>
|
||||
<template v-else-if="afterServiceRecord.redoCompleteTime">
|
||||
<text class="text-gray" style="font-size: 20upx;">待客户验收或审核,36小时未操作将自动取消本次售后</text>
|
||||
<view class="flex align-center margin-top-sm">
|
||||
<text>工单时限:</text>
|
||||
<uni-countdown :show-colon="false" :backgroundColor="'#eee'"
|
||||
:day="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.redoCompleteTime, 36)).day"
|
||||
:hour="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.redoCompleteTime, 36)).hour"
|
||||
:minute="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.redoCompleteTime, 36)).min"
|
||||
:second="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.redoCompleteTime, 36)).seconds">
|
||||
</uni-countdown>
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
|
||||
<!-- <view class="flex justify-end align-end margin-tb-sm" v-if="afterServiceRecord.workerFeedbackResult === 2">
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" data-modal="showDeliverGoods" @tap="showModal($event, order)">立即重发/补发</button>
|
||||
</view> -->
|
||||
<template v-if="afterServiceRecord.customerFinalCheck === null">
|
||||
<view class="flex justify-end align-end margin-tb-sm" v-if="afterServiceRecord.workerFeedbackResult === 2 && showActionBtn">
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" @tap="$emit('callModal', 'showDeliverGoods')">立即重发/补发</button>
|
||||
</view>
|
||||
<view class="flex justify-end align-end margin-tb-sm" v-if="afterServiceRecord.workerFeedbackResult === 1 && (afterServiceRecord.workerAgreeType == 2 || afterServiceRecord.workerAgreeType == 3 || afterServiceRecord.workerAgreeType == 4) && afterServiceRecord.workerReceiveStatus != 3 && showActionBtn">
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" @tap="workerReceived">货已收到,结单</button>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
||||
<view v-if="afterServiceRecord.customerFinalCheck != null" class="padding-tb solid-top">
|
||||
<template v-if="order.afterPlatformServiceStatus === 0 || order.afterPlatformServiceStatus == 1">
|
||||
<view class='cu-tag bg-main-color radius light'>{{afterServiceRecord.workerReceiveConfirm === 1 ? '商家确认' : '客户最终确认'}}</view>
|
||||
<view class="margin-top-xs" v-if="afterServiceRecord.workerReceiveConfirm === 1">
|
||||
<view>已收货,结单</view>
|
||||
<view>本单已退货并结束售后!</view>
|
||||
</view>
|
||||
<template v-else>
|
||||
<view class="margin-top-xs" v-if="afterServiceRecord.customerFinalCheck === 2">
|
||||
取消
|
||||
<text v-if="afterServiceRecord.isAutoProcessed == 1">(超时系统自动取消)</text>
|
||||
</view>
|
||||
<view class="margin-top-xs" v-else>
|
||||
{{afterServiceRecord.customerFinalCheck === 1 ? '同意' : '不同意'}}
|
||||
<text v-if="afterServiceRecord.isAutoProcessed == 1 && afterServiceRecord.customerFinalCheck === 1">(超时系统自动同意)</text>
|
||||
</view>
|
||||
</template>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck === 0">
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm" v-if="afterServiceRecord.customerDisagreeImages">
|
||||
<view class="bg-img" v-for="imgUrl in afterServiceRecord.customerDisagreeImages.split(',')" :key="imgUrl">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="margin-bottom-xs" v-if="afterServiceRecord.customerDisagreeReason">
|
||||
<text>不同意理由:{{afterServiceRecord.customerDisagreeReason}}</text>
|
||||
</view>
|
||||
<view class="text-red" v-if="afterServiceRecord.customerFinalCheck === 0">订单交由平台协商处理</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck === 0">
|
||||
系统提示您,如能协商尽可能与客户协商一致(能重新协商则按双方认可方案重新发起)!可让客户撤单最佳(售后内已重新发货的则客户无法操作撤单)!
|
||||
</view>
|
||||
</view>
|
||||
<view v-else-if="afterServiceRecord.customerFinalCheck === 1">
|
||||
<template v-if="afterServiceRecord.workerFeedbackResult !== 0">
|
||||
<view v-if="(afterServiceRecord.agreedRefund > 0 || afterServiceRecord.originalRefund > 0) && order.refundPayStatus == 1">
|
||||
<view>
|
||||
<text>本单退款,系统已发起按客户支付的帐户原路退回</text>
|
||||
<text class="text-red">{{afterServiceRecord.originalRefund || afterServiceRecord.agreedRefund}}</text>
|
||||
<text>元,银行按工作日退款,节假日顺延到帐。遇客户问询,请其耐心等待,到账时会在客户端”客户最终确认“处有到账时间。</text>
|
||||
</view>
|
||||
<view>退款支付到账:{{afterServiceRecord.refundApplyTime}}</view>
|
||||
</view>
|
||||
<view v-else-if="order.refundPayStatus == 0">
|
||||
<text v-if="afterServiceRecord.workerFeedbackResult === 3">{{order.orderType == 1 ? '本次售后已重发/补发并验收完成(退款为0)' : '本次售后已重新补做并验收完成(退款额为0)。'}}</text>
|
||||
<text v-else>本单已退款<text class="text-red">{{afterServiceRecord.originalRefund || afterServiceRecord.agreedRefund || 0}}</text>元,因未实际支付,实退为0元。未退部分继续完成订单及正常支付!</text>
|
||||
</view>
|
||||
</template>
|
||||
<view v-else>
|
||||
<text>本次售后已操作完毕,售后申请已结束!</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<template v-else-if="order.afterPlatformServiceStatus === 2 || order.afterPlatformServiceStatus === 3">
|
||||
<view class='cu-tag bg-main-color radius light'>客户最终确认</view>
|
||||
<view class="margin-top-xs">
|
||||
{{order.afterPlatformServiceStatus === 2 ? '同意' : '取消售后'}}
|
||||
(平台操作)
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.platformHandleReason">
|
||||
<text>平台意见:{{afterServiceRecord.platformHandleReason}}</text>
|
||||
</view>
|
||||
<view v-if="order.afterPlatformServiceStatus === 3">
|
||||
<text>本次售后已操作完毕,售后申请已结束!</text>
|
||||
</view>
|
||||
<template v-else>
|
||||
<view v-if="(afterServiceRecord.platformRefund || afterServiceRecord.agreedRefund) && order.refundPayStatus == 1">
|
||||
<view>
|
||||
<text>本单退款,系统已发起按客户支付的帐户原路退回</text>
|
||||
<text class="text-red">{{afterServiceRecord.platformRefund || afterServiceRecord.agreedRefund}}</text>
|
||||
<text>元,银行按工作日退款,节假日顺延到帐。遇客户问询,请其耐心等待,到账时会在客户端”客户最终确认“处有到账时间。</text>
|
||||
</view>
|
||||
<view>退款支付到账:{{afterServiceRecord.refundApplyTime}}</view>
|
||||
</view>
|
||||
<view v-else-if="order.refundPayStatus == 0">
|
||||
<text>本单已退款<text class="text-red">{{afterServiceRecord.platformRefund || afterServiceRecord.agreedRefund || 0}}</text>元,因未实际支付,实退为0元。未退部分继续完成订单及正常支付!</text>
|
||||
</view>
|
||||
</template>
|
||||
</template>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
afterServiceRecord: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
},
|
||||
order: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
},
|
||||
showActionBtn: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
|
||||
},
|
||||
methods: {
|
||||
viewImage(e, imgList) {
|
||||
uni.previewImage({
|
||||
urls: imgList,
|
||||
current: e.currentTarget.dataset.url
|
||||
});
|
||||
},
|
||||
copyData(data) {
|
||||
uni.setClipboardData({
|
||||
data: data,
|
||||
success() {
|
||||
uni.showToast({
|
||||
title: '复制成功'
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
getDeliveryFlow(returnTrackingNumber) {
|
||||
console.log(returnTrackingNumber);
|
||||
this.$emit('getDeliveryFlow', returnTrackingNumber)
|
||||
},
|
||||
workerReceived() {
|
||||
uni.showModal({
|
||||
confirmText: '确认',
|
||||
cancelText: '取消',
|
||||
content: "确认后结束售后单,退款按支付原路退回,退款额最大按本单商品金额为限,存在退额不足且未满足客户诉求的将由您与您的派单公司按订单总额另行与客户对接后再结单!",
|
||||
success: async (res) => {
|
||||
if(res.confirm) {
|
||||
await this.$request.workerConfirmReceive({
|
||||
id: this.afterServiceRecord.id
|
||||
})
|
||||
this.$emit('refreshOrderList')
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
|
@ -12,7 +12,8 @@
|
|||
<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">
|
||||
<view class="basis-df" v-if="orderMode === 'transferOrder'">{{item.goodsNum}}</view>
|
||||
<view class="basis-df" v-else>
|
||||
<uni-number-box :min="0" :max="item.goodsNum" v-model="item.toAssignNum" @change="changePiecesNum($event, item)">
|
||||
</uni-number-box>
|
||||
</view>
|
||||
|
|
@ -24,7 +25,7 @@
|
|||
</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>
|
||||
<input type="digit" class="line-input radius-input" v-model="dispatchTotalPrice" :placeholder="orderMode === 'transferOrder'?'请输入派出总额(转出后在监控单查看)' : '请输入派出总额'"></input>
|
||||
</view>
|
||||
</view>
|
||||
<view class="solid-top padding-top-sm flex justify-between align-center">
|
||||
|
|
@ -35,6 +36,18 @@
|
|||
</view>
|
||||
<!-- 可指派成员 -->
|
||||
<scroll-view class="certern-height-with-scroll" :scroll-y="true" :scroll-with-animation="true">
|
||||
<view v-if="orderMode === 'transferOrder'">
|
||||
<view class="bg-white padding">
|
||||
<view class="flex justify-between align-center">
|
||||
<view class="flex justify-start align-center">
|
||||
<view class="text-lg margin-left-sm">转入大厅</view>
|
||||
</view>
|
||||
<view>
|
||||
<button class="cu-btn bg-main-color shadow-blur" @click="assignTransfer">转大厅</button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="searchedMembers && searchedMembers.length > 0">
|
||||
<view class="bg-white padding" v-for="(member, index) in searchedMembers">
|
||||
<view class="flex justify-between align-center">
|
||||
|
|
@ -115,6 +128,10 @@
|
|||
orderNow: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
orderMode: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
data() {
|
||||
|
|
@ -171,7 +188,36 @@
|
|||
});
|
||||
this.searchedMembers = res.rows;
|
||||
},
|
||||
assignTransfer(member) {
|
||||
let goodsToAssign = [];
|
||||
this.pickedList.forEach((item) => {
|
||||
goodsToAssign.push({
|
||||
goodsStandardId: item.goodsStandardId,
|
||||
num: item.goodsNum
|
||||
})
|
||||
});
|
||||
if (this.dispatchTotalPrice) {
|
||||
let params = {
|
||||
goodsList: goodsToAssign,
|
||||
workerId: member ? member.workerId : null,
|
||||
totalPay: this.dispatchTotalPrice,
|
||||
orderMasterId: this.curOrder.orderMasterId,
|
||||
isAll: 1,
|
||||
workerName: member ? member.workerName : null
|
||||
}
|
||||
this.$emit('assignWork', params);
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '请填写派单价格',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
},
|
||||
assignWork(member) {
|
||||
if(this.orderMode === 'transferOrder') {
|
||||
this.assignTransfer(member)
|
||||
return
|
||||
}
|
||||
let goodsToAssign = [];
|
||||
// 标识是否派完所有goods,1为派完,0为未派完
|
||||
let isAll = 1;
|
||||
|
|
|
|||
|
|
@ -6,8 +6,15 @@
|
|||
<view class="padding-xl">
|
||||
<view class="cuIcon-roundcheck big-icon padding-tb text-main-color"></view>
|
||||
<view class="text-bold text-lg margin-bottom-sm">接单成功</view>
|
||||
<view v-if="data.payType == 0">请在30分钟内联系客户,预约好上门时间,并在订单中操作排单时间,超时6倍将受平台处罚管理;该订单款项在任务流程结束后由银联自动结算至您帐户! </view>
|
||||
<view v-else-if="data.payType == 1">该单需上门收款。请在30分钟内联系客户,并告知客户属上门收款单(金额以客户端弹出的金额为准或上门后师傅端弹出的二维码内金额支付)预约好上门时间,并在订单中操作排单时间,超时6倍将受平台处罚管理;该订单款项在任务流程结束后由银联自动结算至您帐户! </view>
|
||||
<template v-if="data.orderType == 1">
|
||||
<view v-if="data.payType == 0">接单成功,请在30分钟内发货或排发货时间,超时3倍未排可能被平台处罚,该订单款项在流程结束后将由银联自动结算至你帐户。</view>
|
||||
<view v-else-if="data.payType == 1">接单成功,货到付款单,交货时按单内二维码收款或客户在其帐户端支付。接单后请在请在30分钟内发货或排发货时间,超时3倍未排可能被平台处罚,该订单款项在流程结束后将由银联自动结算至你帐户。</view>
|
||||
</template>
|
||||
<template v-else>
|
||||
<view v-if="data.payType == 0">请在30分钟内联系客户,预约好上门时间,并在订单中操作排单时间,超时6倍将受平台处罚管理;该订单款项在任务流程结束后由银联自动结算至您帐户! </view>
|
||||
<view v-else-if="data.payType == 1">该单需上门收款。请在30分钟内联系客户,并告知客户属上门收款单(金额以客户端弹出的金额为准或上门后师傅端弹出的二维码内金额支付)预约好上门时间,并在订单中操作排单时间,超时6倍将受平台处罚管理;该订单款项在任务流程结束后由银联自动结算至您帐户! </view>
|
||||
</template>
|
||||
|
||||
</view>
|
||||
<view class="cu-bar bg-white solid-top">
|
||||
<view class="action margin-0 flex-sub text-main-color" data-modal="showAcceptOrderNoticeModal"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,240 @@
|
|||
<template>
|
||||
<view class="cu-modal" :class="show?'show':''">
|
||||
<view class="cu-dialog bg-white">
|
||||
<view class="cu-bar">
|
||||
<view class="content">同意售后</view>
|
||||
<view class="action" data-modal="agreeAfterSale" @click="hideModal">
|
||||
<text class="cuIcon-close text-red"></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="padding text-left">
|
||||
<view class="text-lg">
|
||||
<text>退款金额:</text>
|
||||
<text class="text-price text-red">{{data.afterServiceRecordList[0].refund ? data.afterServiceRecordList[0].refund : data.payMoney}}</text>
|
||||
</view>
|
||||
<view v-if="!data.isOnlyServ && data.afterServiceRecordList[0].refund && data.payMoney < data.afterServiceRecordList[0].refund" class="padding-top text-red">
|
||||
警报:该单关联其它订单,客户申请的退款金额有效,有疑问可先沟通派单公司(详情处电话),如确认同意,最大退款额以本单接单额原路退回,其余需退的或你仍有收益则由派单公司处理,如更改退单额,需先协商一致,余额部分完单后计入你账户。
|
||||
</view>
|
||||
<view class="flex justify-start align-center margin-top-sm">
|
||||
<view class="title">收货状态:</view>
|
||||
<my-uni-combox class="form-val-area inline-input" :candidates="workerReceiveStatusArr" placeholder="请选择" :showField="'name'"
|
||||
v-model="workerReceiveStatus">
|
||||
</my-uni-combox>
|
||||
</view>
|
||||
<view class="flex justify-start align-center margin-top-sm">
|
||||
<view class="title">同意选项:</view>
|
||||
<my-uni-combox class="form-val-area inline-input" :candidates="workerAgreeTypeArr" placeholder="请选择" :showField="'name'"
|
||||
v-model="workerAgreeType">
|
||||
</my-uni-combox>
|
||||
</view>
|
||||
<view class="text-lg padding-top flex justify-start align-center">
|
||||
<text>更改退款金额:</text>
|
||||
<input type="digit" class="radius-input inline-input" style="flex-basis:25%" v-model="agreedRefund"></input>
|
||||
<text class="margin-left-xs">元</text>
|
||||
</view>
|
||||
<view class="padding-top">
|
||||
<view class="flex justify-start">
|
||||
<view>原因选择:</view>
|
||||
<radio-group @change="changeReasonRadio">
|
||||
<label class="radio margin-right-sm">
|
||||
<radio style="transform:scale(0.7)" class="main-color" :value="1" :checked="data.reasonType === 1"/>
|
||||
<text>客户原因</text>
|
||||
</label>
|
||||
<label class="radio">
|
||||
<radio style="transform:scale(0.7)" class="main-color" :value="2" :checked="data.reasonType === 2"/>
|
||||
<text>师傅原因</text>
|
||||
</label>
|
||||
<label class="radio">
|
||||
<radio style="transform:scale(0.7)" class="main-color" :value="3" :checked="data.reasonType === 3"/>
|
||||
<text>其他</text>
|
||||
</label>
|
||||
</radio-group>
|
||||
</view>
|
||||
<view class="margin-top">
|
||||
<textarea style="width: 100%; height: 200rpx;" fixed="true" class="solid radius text-left padding-sm"
|
||||
v-model="remark" maxlength="-1"
|
||||
placeholder="请输入同意原因或更改金额原因(更改退单金额需与客户协商一致,或请订单详情处“派单公司”介入,否则可能被拒绝或引起客诉升级)"></textarea>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="cu-bar solid-top">
|
||||
<view class="action margin-0 flex-sub text-black" data-modal="agreeAfterSale" @click="hideModal">取消</view>
|
||||
<view class="action margin-0 flex-sub text-main-color solid-left" data-modal="agreeAfterSale"
|
||||
@click="showNotice">确认</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<confirm-modal ref="notice" :content="'本单款项银联确认已发起支付,款项已到达或即将到达您所绑定帐户,需退款的同意后您线下与客户操作退款,系统无法提供原路返回退款!'" :confirmMsg="'同意'" @confirm="noticeConfirm" @cancel="noticeCancel"></confirm-modal>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import myUniCombox from '@/components/uni-combox/my-uni-combox.vue';
|
||||
export default {
|
||||
name: 'agreeAfterSale',
|
||||
components: {
|
||||
myUniCombox
|
||||
},
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
agreedRefund: null,
|
||||
reasonType: null,
|
||||
remark: null,
|
||||
workerReceiveStatus: null,
|
||||
workerAgreeType: null,
|
||||
workerReceiveStatusArr: [
|
||||
{
|
||||
code: 1,
|
||||
name: '未发货'
|
||||
},
|
||||
{
|
||||
code: 2,
|
||||
name: '已发货在途'
|
||||
},
|
||||
{
|
||||
code: 3,
|
||||
name: '已收货'
|
||||
},
|
||||
{
|
||||
code: 4,
|
||||
name: '售后保障期'
|
||||
},
|
||||
],
|
||||
workerAgreeTypeArr: [
|
||||
{
|
||||
code: 1,
|
||||
name: '同意即时退单退款'
|
||||
},
|
||||
{
|
||||
code: 2,
|
||||
name: '同意货物拦截后退单退款'
|
||||
},
|
||||
{
|
||||
code: 3,
|
||||
name: '同意快递返回货物后退单退款'
|
||||
},
|
||||
{
|
||||
code: 4,
|
||||
name: '同意您退回货物后退单退款'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
hideModal(e) {
|
||||
this.resetData();
|
||||
this.$emit('close', e);
|
||||
},
|
||||
resetData() {
|
||||
// this.data = null;
|
||||
this.agreedRefund = null;
|
||||
this.reasonType = null;
|
||||
this.remark = null;
|
||||
this.workerReceiveStatus = null;
|
||||
this.workerAgreeType = null;
|
||||
},
|
||||
changeReasonRadio(e) {
|
||||
this.reasonType = e.detail.value;
|
||||
},
|
||||
showNotice(e) {
|
||||
if (this.data.drawCashStatus != null && this.data.drawCashStatus >= 1) {
|
||||
this.$refs.notice.showModal();
|
||||
} else {
|
||||
this.submit(e);
|
||||
}
|
||||
},
|
||||
noticeConfirm() {
|
||||
this.submit({
|
||||
currentTarget: {
|
||||
dataset: {
|
||||
modal: 'agreeAfterSale'
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
noticeCancel() {
|
||||
this.hideModal({
|
||||
currentTarget: {
|
||||
dataset: {
|
||||
modal: 'agreeAfterSale'
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async submit(e) {
|
||||
if(!this.workerReceiveStatus) {
|
||||
uni.showToast({
|
||||
title: '请选择收货状态',
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
})
|
||||
return
|
||||
}
|
||||
if(!this.workerAgreeType) {
|
||||
uni.showToast({
|
||||
title: '请选择同意选项',
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
})
|
||||
return
|
||||
}
|
||||
let agreedRefund = this.agreedRefund;
|
||||
if (!agreedRefund && this.data.afterServiceRecordList[0].refund != null) {
|
||||
agreedRefund = this.data.afterServiceRecordList[0].refund;
|
||||
} else if (!agreedRefund) {
|
||||
agreedRefund = this.data.payMoney;
|
||||
}
|
||||
console.log({
|
||||
id: this.data.afterServiceRecordList[0].id,
|
||||
workerFeedbackReasonType: this.reasonType,
|
||||
agreedRefund: agreedRefund,
|
||||
workerFeedbackReason: this.remark,
|
||||
workerFeedbackResult: 1,
|
||||
updateBy: 2,
|
||||
workerReceiveStatus: this.workerReceiveStatus.code,
|
||||
workerAgreeType: this.workerAgreeType.code
|
||||
});
|
||||
let res = await this.$request.editAfterServiceGoodsRecord({
|
||||
id: this.data.afterServiceRecordList[0].id,
|
||||
workerFeedbackReasonType: this.reasonType,
|
||||
agreedRefund: agreedRefund,
|
||||
workerFeedbackReason: this.remark,
|
||||
workerFeedbackResult: 1,
|
||||
updateBy: 2,
|
||||
workerReceiveStatus: this.workerReceiveStatus.code,
|
||||
workerAgreeType: this.workerAgreeType.code
|
||||
});
|
||||
if (res && res.code === 0) {
|
||||
uni.showToast({
|
||||
icon: 'success',
|
||||
title: '提交成功',
|
||||
duration: 1000
|
||||
})
|
||||
this.hideModal(e);
|
||||
this.$emit('confirmFeedback');
|
||||
return;
|
||||
}
|
||||
uni.showToast({
|
||||
icon: 'error',
|
||||
duration: 1000,
|
||||
title: '提交失败',
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
.inline-input {
|
||||
flex-basis: 74%;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
<template>
|
||||
<view class="cu-modal" :class="show?'show':''">
|
||||
<view class="cu-dialog bg-white">
|
||||
<view class="cu-bar">
|
||||
<view class="content">分配服务金额</view>
|
||||
<view class="action" data-modal="agreeAfterSale" @click="hideModal">
|
||||
<text class="cuIcon-close text-red"></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="padding text-left">
|
||||
<view class="padding-top">
|
||||
<view class="flex justify-start flex-direction">
|
||||
<view>本单商品已设置包安装/包施工类服务</view>
|
||||
<view>请预置分配安装或服务费/工时费:</view>
|
||||
</view>
|
||||
<view class="margin-top solid radius text-left padding-sm">
|
||||
<input type="digit" style="width: 100%;" placeholder="请输入本单服务费,工时费可撤回或修改" v-model="serviceMoney">
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="cu-bar solid-top">
|
||||
<view class="action margin-0 flex-sub text-black" data-modal="agreeAfterSale" @click="hideModal">关闭/返回查看商品</view>
|
||||
<view class="action margin-0 flex-sub text-main-color solid-left" data-modal="agreeAfterSale"
|
||||
@click="noticeConfirm">继续接单</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<confirm-modal ref="notice" :content="'本单款项银联确认已发起支付,款项已到达或即将到达您所绑定帐户,需退款的同意后您线下与客户操作退款,系统无法提供原路返回退款!'" :confirmMsg="'同意'" @confirm="noticeConfirm" @cancel="noticeCancel"></confirm-modal>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'agreeAfterSale',
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
data: {
|
||||
type: Object,
|
||||
default: {}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
agreedRefund: null,
|
||||
reasonType: null,
|
||||
remark: null,
|
||||
serviceMoney: null
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
hideModal(e) {
|
||||
this.resetData();
|
||||
this.$emit('close', e);
|
||||
},
|
||||
resetData() {
|
||||
this.serviceMoney = null;
|
||||
},
|
||||
showNotice(e) {
|
||||
if (this.data.drawCashStatus != null && this.data.drawCashStatus >= 1) {
|
||||
this.$refs.notice.showModal();
|
||||
} else {
|
||||
this.submit(e);
|
||||
}
|
||||
},
|
||||
noticeConfirm() {
|
||||
this.submit({
|
||||
currentTarget: {
|
||||
dataset: {
|
||||
modal: 'agreeAfterSale'
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
noticeCancel() {
|
||||
this.hideModal({
|
||||
currentTarget: {
|
||||
dataset: {
|
||||
modal: 'agreeAfterSale'
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async submit(e) {
|
||||
if (!this.serviceMoney) {
|
||||
uni.showToast({
|
||||
title: '请输入本单服务费',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
if(parseFloat(this.serviceMoney) > this.data.serverMoney) {
|
||||
uni.showToast({
|
||||
title: '本单服务费不能大于订单服务金额',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
let res = await this.$request.allocateServiceMoney({
|
||||
id: this.data.orderMasterId,
|
||||
serverGoodsMoney: this.serviceMoney
|
||||
});
|
||||
if (res && res.code === 0) {
|
||||
uni.showToast({
|
||||
icon: 'success',
|
||||
title: '提交成功',
|
||||
duration: 1000
|
||||
})
|
||||
this.hideModal(e);
|
||||
this.$emit('confirmFeedback');
|
||||
return;
|
||||
}
|
||||
uni.showToast({
|
||||
icon: 'error',
|
||||
duration: 1000,
|
||||
title: '提交失败',
|
||||
})
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.inline-input {
|
||||
flex-basis: 25%;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,62 +1,80 @@
|
|||
<template>
|
||||
<view class="cu-modal" :class="show?'show':''">
|
||||
<view class="cu-dialog">
|
||||
<view class="cu-bar bg-white justify-end solid-bottom">
|
||||
<view class="content">申请订单加价/预付款</view>
|
||||
<view class="action" data-modal="applyExtraChargeModal" @click="hideModal">
|
||||
<text class="cuIcon-close text-red"></text>
|
||||
<view>
|
||||
<view class="cu-modal" :class="show?'show':''">
|
||||
<view class="cu-dialog" style="margin-top: 180rpx;vertical-align: initial;">
|
||||
<view class="cu-bar bg-white justify-end solid-bottom">
|
||||
<view class="content">申请订单加价/预付款</view>
|
||||
<view class="action" data-modal="applyExtraChargeModal" @click="hideModal">
|
||||
<text class="cuIcon-close text-red"></text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="bg-white padding text-left">
|
||||
<view class="text-lg padding-top flex justify-start align-center">
|
||||
<text class="title-input">加价金额:</text>
|
||||
<input type="digit" class="radius-input inline-input" placeholder="请输入金额(订单完成或取消后原路退回此款)" v-model="moneyAmount"></input>
|
||||
</view>
|
||||
<view class="text-lg padding-top flex justify-start align-center">
|
||||
<text class="title-input">加价原因:</text>
|
||||
<picker style="width: 75%;" @change="bindPickerChange" :value="chooseIndex" :range="array">
|
||||
<view class="radius-input inline-input custom-input">{{array[chooseIndex]}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="text-lg padding-top flex justify-start align-center">
|
||||
<text class="title-input">{{chooseIndex < 6 ? '配件费' : '施工费'}}:</text>
|
||||
<input type="digit" class="radius-input inline-input" placeholder="请输入该费用实际金额" v-model="extraAmount"></input>
|
||||
</view>
|
||||
<view>
|
||||
<view class="padding-tb-sm">凭证上传</view>
|
||||
<view class="grid col-3 grid-square">
|
||||
<view class="bg-img" v-for="(item,index) in imgList" :key="index"
|
||||
@tap="viewImage($event, imgList)" :data-url="item">
|
||||
<image :src="item" mode="aspectFill"></image>
|
||||
<view class="cu-tag bg-red" @tap.stop="delImg($event, imgList)" :data-index="index">
|
||||
<text class='cuIcon-close'></text>
|
||||
<view class="bg-white padding text-left">
|
||||
<view class="text-lg padding-top flex justify-start align-center">
|
||||
<text class="title-input">加价金额:</text>
|
||||
<input type="digit" class="radius-input inline-input" placeholder="请输入加价总金额" v-model="moneyAmount"></input>
|
||||
</view>
|
||||
<view class="text-lg padding-top flex justify-start align-center">
|
||||
<text class="title-input">加价原因:</text>
|
||||
<picker style="width: 75%;" @change="bindPickerChange" :value="chooseIndex" :range="array">
|
||||
<view class="flex justify-between align-center radius-input inline-input custom-input">
|
||||
<view>{{array[chooseIndex]}}</view>
|
||||
<text class="cuIcon-right"></text>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="text-lg padding-top flex justify-start align-center" v-if="array[chooseIndex].indexOf('含') > -1">
|
||||
<text class="title-input">{{array[chooseIndex].split('含')[1]}}:</text>
|
||||
<input type="digit" class="radius-input inline-input" placeholder="请输入该费用实际金额" v-model="extraAmount"></input>
|
||||
</view>
|
||||
<view>
|
||||
<view class="padding-tb-sm">凭证上传</view>
|
||||
<view class="grid col-3 grid-square">
|
||||
<view class="bg-img" v-for="(item,index) in imgList" :key="index"
|
||||
@tap="viewImage($event, imgList)" :data-url="item">
|
||||
<image :src="item" mode="aspectFill"></image>
|
||||
<view class="cu-tag bg-red" @tap.stop="delImg($event, imgList)" :data-index="index">
|
||||
<text class='cuIcon-close'></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="solids" @tap="chooseImage" v-if="imgList.length < 6">
|
||||
<text class='cuIcon-cameraadd'></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="solids" @tap="chooseImage" v-if="imgList.length < 1">
|
||||
<text class='cuIcon-cameraadd'></text>
|
||||
</view>
|
||||
<view>
|
||||
<view class="padding-tb-sm">申请原因</view>
|
||||
<view class="solid">
|
||||
<textarea style="width: 100%; height: 150rpx;" fixed="true" class="radius text-left padding-sm"
|
||||
v-model="remark" maxlength="-1" :placeholder="`请输入理由或备注`"></textarea>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view>
|
||||
<view class="padding-tb-sm">申请原因</view>
|
||||
<view class="solid">
|
||||
<textarea style="width: 100%; height: 200rpx;" fixed="true" class="radius text-left padding-sm"
|
||||
v-model="remark" maxlength="-1"></textarea>
|
||||
<view style="padding-top: 10px;">
|
||||
<view style="font-size: 24rpx;color: #666;white-space: pre-wrap;">
|
||||
加价提示\n1、加价所有费用需经系统支付!加价报价以双方约定输入总价。含配件类物料类的全额到你帐户(银行手续费自付);\n2、申请加价时,客户端仅看到加价总额,总额内的配件类物料类金额与凭证均看不到(网点与商家可见);
|
||||
</view>
|
||||
</view>
|
||||
<view class="cu-btn line-main-color margin-top-sm long-btn" v-if="hasReacord" @click="clearCurAddedPrice">
|
||||
清空加价</view>
|
||||
</view>
|
||||
<view class="cu-bar bg-white solid-top">
|
||||
<view class="action margin-0 flex-sub text-black" data-modal="applyChargeModal"
|
||||
@click="hideModal">{{ hasReacord ? '退出/待二次上门' : '取消'}}</view>
|
||||
<view class="action margin-0 flex-sub text-main-color solid-left" data-modal="applyChargeModal" v-if="!hasReacord"
|
||||
@click="submit">确认</view>
|
||||
<view class="action margin-0 flex-sub text-main-color solid-left" data-modal="applyChargeModal" v-else
|
||||
@click="makePayQrcode">请客户支付</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="cu-bar bg-white solid-top">
|
||||
<view class="action margin-0 flex-sub text-black" data-modal="applyChargeModal"
|
||||
@click="hideModal">取消</view>
|
||||
<view class="action margin-0 flex-sub text-main-color solid-left" data-modal="applyChargeModal"
|
||||
@click="submit">确认</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<pay-qrcode ref="payQrcode" :show="showPayQrcodeModal" :data="data" @finishQrPay="finishQrPay"></pay-qrcode>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import payQrcode from '@/pages/order-manage/modal/pay-qrcode.vue';
|
||||
export default {
|
||||
components: {payQrcode},
|
||||
name: 'applyCharge',
|
||||
props: {
|
||||
show: {
|
||||
|
|
@ -70,16 +88,40 @@
|
|||
},
|
||||
data() {
|
||||
return {
|
||||
array: ['加单加价','加急费','拆机/拆换费','搬运费','清理费','远程费','施工费','垫付金','奖励金','质保金','客户押金','工具押金','物品押金'],
|
||||
// array: ['加单加价','加急费','拆机/拆换费','搬运费','清理费','远程费','施工费','垫付金','奖励金','质保金','客户押金','工具押金','物品押金'],
|
||||
array: ['加单加价', '加急费', '加时费', '奖励金', '拆机/换机费', '搬运费', '打孔费', '额外服务费', '检查检测费', '清理费', '运输吊装费', '加价含物料费', '加价含垫付金', '加价含配件费', '加价含好评费', '加价含远程费', '加价含高空费', '加价含质保金', '加价含客户押金', '加价含工具押金', '加价含物品押金'],
|
||||
chooseIndex: 0,
|
||||
imgList: [],
|
||||
moneyAmount: '',
|
||||
reason: '1',
|
||||
extraAmount: '',
|
||||
remark: ''
|
||||
remark: '',
|
||||
hasReacord: false,
|
||||
showPayQrcodeModal: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async initPriceData() {
|
||||
const cur_reacord = await this.resetPriceChangedInfo()
|
||||
if(cur_reacord) {
|
||||
this.hasReacord = true
|
||||
this.init(cur_reacord);
|
||||
} else {
|
||||
this.hasReacord = false
|
||||
}
|
||||
},
|
||||
init(priceObj) {
|
||||
console.log(priceObj);
|
||||
if (!priceObj || priceObj.payStatus == 1) {
|
||||
return;
|
||||
}
|
||||
this.moneyAmount = priceObj.changeMoney + (priceObj.attachmentMoney || 0)
|
||||
this.extraAmount = priceObj.attachmentMoney;
|
||||
this.remark = priceObj.remark;
|
||||
this.chooseIndex = priceObj.reason ? this.array.findIndex(i => i == priceObj.reason) : 0;
|
||||
this.imgList = priceObj.urls ? priceObj.urls.split(',') : []
|
||||
this.priceObj = priceObj;
|
||||
},
|
||||
bindPickerChange(e) {
|
||||
this.chooseIndex = parseInt(e.detail.value)
|
||||
},
|
||||
|
|
@ -93,15 +135,18 @@
|
|||
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
||||
sourceType: ['album'], //从相册选择
|
||||
success: (res) => {
|
||||
let tempFilePaths = [];
|
||||
res.tempFiles.forEach((fileObj) => {
|
||||
tempFilePaths.push(fileObj.tempFilePath)
|
||||
})
|
||||
if (this.imgList.length != 0) {
|
||||
this.imgList = this.imgList.concat(tempFilePaths)
|
||||
} else {
|
||||
this.imgList = tempFilePaths
|
||||
}
|
||||
uni.showLoading({
|
||||
title: '上传中',
|
||||
mask: true
|
||||
});
|
||||
res.tempFiles.forEach((fileObj, index) => {
|
||||
this.$request.uploadFile(fileObj.tempFilePath).then((url) => {
|
||||
this.imgList.push(url);
|
||||
if (index === res.tempFiles.length - 1) {
|
||||
uni.hideLoading();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
|
@ -136,8 +181,19 @@
|
|||
this.moneyAmount = ''
|
||||
this.extraAmount = ''
|
||||
this.remark = ''
|
||||
this.hasReacord = false
|
||||
},
|
||||
async submit(e) {
|
||||
const res = await this.resetPriceChangedInfo()
|
||||
if (res && res.type != 1) {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '你有加价未付款,请客户支付后再加或在原加价上增加金额!',
|
||||
duration: 2500
|
||||
})
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.moneyAmount) {
|
||||
uni.showToast({
|
||||
title: '请输入本次加价总金额',
|
||||
|
|
@ -145,14 +201,14 @@
|
|||
});
|
||||
return;
|
||||
}
|
||||
if (!this.extraAmount) {
|
||||
if (this.array[this.chooseIndex].indexOf('含') > -1 && !this.extraAmount) {
|
||||
uni.showToast({
|
||||
title: '请输入该费用实际金额',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
if(this.chooseIndex === 6 && this.imgList.length === 0) {
|
||||
if(this.array[this.chooseIndex].indexOf('含') > -1 && this.imgList.length === 0) {
|
||||
uni.showToast({
|
||||
title: '请上传凭证,至少一张',
|
||||
icon: 'none'
|
||||
|
|
@ -161,114 +217,110 @@
|
|||
}
|
||||
const num_moneyAmount = parseInt(this.moneyAmount)
|
||||
const num_extraAmount = parseInt(this.extraAmount)
|
||||
if(num_extraAmount > num_moneyAmount) {
|
||||
if(this.array[this.chooseIndex].indexOf('含') > -1 && num_extraAmount > num_moneyAmount) {
|
||||
uni.showToast({
|
||||
title: '费用实际金额不能大于本次加价总金额',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
if(this.chooseIndex < 6 && num_moneyAmount == num_extraAmount) {
|
||||
// 直接修改配件费
|
||||
if(this.array[this.chooseIndex].indexOf('含') === -1) {
|
||||
console.log('调用详情接口',{
|
||||
orderDetailId: this.data.orderDetailId,
|
||||
attachMoney: this.moneyAmount,
|
||||
type: '01'
|
||||
});
|
||||
// 调用后端接口,添加附加费
|
||||
let res = await this.$request.addOrderAttach({
|
||||
let res = await this.$request.changeOrderPrice({
|
||||
orderDetailId: this.data.orderDetailId,
|
||||
attachMoney: this.moneyAmount,
|
||||
type: '01'
|
||||
changeMoney: this.moneyAmount,
|
||||
type: 1,
|
||||
remark: this.remark,
|
||||
urls: this.imgList.toString(),
|
||||
reason: this.array[this.chooseIndex]
|
||||
});
|
||||
if (res.code === 0) {
|
||||
uni.showToast({
|
||||
title: '操作成功',
|
||||
icon: 'success'
|
||||
});
|
||||
this.hideModal(e);
|
||||
this.resetData()
|
||||
// this.$emit('callAgain')
|
||||
this.initPriceData()
|
||||
}
|
||||
} else if(this.chooseIndex >= 6 && num_moneyAmount == num_extraAmount) {
|
||||
// 直接修改施工费
|
||||
const res = await this.resetPriceChangedInfo()
|
||||
if (res && res.type != 1) {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '你有加价未付款,请客户支付后再加或在原加价上增加金额!',
|
||||
duration: 3500
|
||||
})
|
||||
return;
|
||||
}
|
||||
|
||||
} else {
|
||||
// 直接修改配件费
|
||||
let type1_price, type2_price;
|
||||
type2_price = num_extraAmount
|
||||
type1_price = num_moneyAmount - num_extraAmount
|
||||
console.log('调用列表接口',{
|
||||
orderDetailId: this.data.orderDetailId,
|
||||
changeMoney: num_moneyAmount,
|
||||
changeMoney: type1_price,
|
||||
type: 1,
|
||||
remark: this.remark
|
||||
remark: this.remark,
|
||||
urls: this.imgList.toString()
|
||||
});
|
||||
let res1 = await this.$request.changeOrderPrice({
|
||||
let res2 = await this.$request.changeOrderPrice({
|
||||
orderDetailId: this.data.orderDetailId,
|
||||
changeMoney: newPrice,
|
||||
type: this.payAction,
|
||||
remark: this.remark
|
||||
changeMoney: type1_price,
|
||||
type: 1,
|
||||
remark: this.remark,
|
||||
urls: this.imgList.toString(),
|
||||
reason: this.array[this.chooseIndex]
|
||||
});
|
||||
if (res1 && res1.code === 0) {
|
||||
uni.showToast({
|
||||
icon: 'success',
|
||||
title: '操作成功'
|
||||
})
|
||||
this.hideModal(e);
|
||||
this.resetData()
|
||||
}
|
||||
} else if(num_moneyAmount > num_extraAmount) {
|
||||
const res = await this.resetPriceChangedInfo()
|
||||
if (res && res.type != 1) {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '你有加价未付款,请客户支付后再加或在原加价上增加金额!',
|
||||
duration: 3500
|
||||
})
|
||||
return;
|
||||
}
|
||||
let type1_price, type2_price;
|
||||
if(this.chooseIndex < 6) {
|
||||
type1_price = num_extraAmount
|
||||
type2_price = num_moneyAmount - num_extraAmount
|
||||
} else {
|
||||
type2_price = num_extraAmount
|
||||
type1_price = num_moneyAmount - num_extraAmount
|
||||
}
|
||||
if (res2.code != 0) return
|
||||
const newData = await this.resetPriceChangedInfo()
|
||||
console.log('调用详情接口',{
|
||||
orderDetailId: this.data.orderDetailId,
|
||||
attachMoney: type1_price,
|
||||
attachMoney: type2_price,
|
||||
type: '01'
|
||||
});
|
||||
let res1 = await this.$request.addOrderAttach({
|
||||
orderDetailId: this.data.orderDetailId,
|
||||
attachMoney: type1_price,
|
||||
type: '01'
|
||||
attachMoney: type2_price,
|
||||
type: '01',
|
||||
financialChangeRecordId: newData.id,
|
||||
remark: this.remark,
|
||||
});
|
||||
if (res1.code != 0) return
|
||||
console.log('调用列表接口',{
|
||||
orderDetailId: this.data.orderDetailId,
|
||||
changeMoney: type2_price,
|
||||
type: 1,
|
||||
remark: this.remark
|
||||
});
|
||||
let res2 = await this.$request.changeOrderPrice({
|
||||
orderDetailId: this.data.orderDetailId,
|
||||
changeMoney: type2_price,
|
||||
type: this.payAction,
|
||||
remark: this.remark
|
||||
});
|
||||
if (res2.code != 0) return
|
||||
uni.showToast({
|
||||
icon: 'success',
|
||||
title: '操作成功'
|
||||
})
|
||||
this.hideModal(e);
|
||||
this.resetData()
|
||||
// this.$emit('callAgain')
|
||||
this.initPriceData()
|
||||
}
|
||||
},
|
||||
async makePayQrcode(e) {
|
||||
let res = await this.$request.priceAddedQrPay(this.data);
|
||||
if (res && res.code === 0) {
|
||||
this.showPayQrcodeModal = true;
|
||||
this.$refs.payQrcode.showQrcode(res.data.expend.qrcode_url);
|
||||
}
|
||||
},
|
||||
finishQrPay(e) {
|
||||
this.showPayQrcodeModal = false;
|
||||
// this.$emit('callAgain')
|
||||
this.initPriceData()
|
||||
},
|
||||
async clearCurAddedPrice() {
|
||||
await this.$request.deleteAttachPrice({
|
||||
orderDetailId: this.data.orderDetailId
|
||||
})
|
||||
let res = await this.$request.changeOrderPrice({
|
||||
orderDetailId: this.data.orderDetailId,
|
||||
changeMoney: 0,
|
||||
type: 1,
|
||||
remark: '客户清空加价',
|
||||
urls: '',
|
||||
reason: ''
|
||||
});
|
||||
if (res && res.code === 0) {
|
||||
uni.showToast({
|
||||
icon: 'success',
|
||||
title: '操作成功'
|
||||
})
|
||||
// this.$emit('callAgain')
|
||||
this.initPriceData()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,207 @@
|
|||
<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" data-popup="deliveryOrderPopup" @click="closePopup"><text
|
||||
class="cuIcon-close"></text></view>
|
||||
<view class="bg-white padding" style="padding-top: 74rpx; min-height: 1000rpx;">
|
||||
<view class="text-xxl text-center">发货类型</view>
|
||||
<radio-group class="flex padding-tb-sm flex-direction" style="gap: 10rpx">
|
||||
<label @click="form.deliveryType = 1">
|
||||
<radio class="main-color" :value="1" :checked="form.deliveryType === 1" /><text class="margin-left-sm">发快递/物流</text>
|
||||
</label>
|
||||
<view style="padding-left: 70rpx;">
|
||||
<input type="text" v-model="form.trackingNumber" class="custom-input radius-input" placeholder="请输入快递/物流单号">
|
||||
</view>
|
||||
<label @click="form.deliveryType = 2">
|
||||
<radio class="main-color" :value="2" :checked="form.deliveryType === 2"/><text class="margin-left-sm">送货上门</text>
|
||||
</label>
|
||||
<label @click="form.deliveryType = 3">
|
||||
<radio class="main-color" :value="3" :checked="form.deliveryType === 3"/><text class="margin-left-sm">客户自提</text>
|
||||
</label>
|
||||
</radio-group>
|
||||
<view class="text-lg text-left">出货拍照存档(非必填):</view>
|
||||
<view>
|
||||
<div class="grid col-3 grid-square">
|
||||
<view class="bg-img" v-for="(item,index) in imgList" :key="index"
|
||||
@tap="viewImage($event, imgList)" :data-url="item">
|
||||
<image :src="item" mode="aspectFill"></image>
|
||||
<view class="cu-tag bg-red" @tap.stop="delImg($event, imgList)" :data-index="index">
|
||||
<text class='cuIcon-close'></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="solids" @tap="chooseImage" v-if="imgList.length < 6">
|
||||
<text class='cuIcon-cameraadd'></text>
|
||||
</view>
|
||||
</div>
|
||||
</view>
|
||||
<view style="margin-bottom: 10rpx;">
|
||||
<textarea style="width: 100%;box-sizing: border-box;" class="custom-input radius-input" placeholder="发货备注(非必填)" cols="30" rows="10" v-model="form.deliveryRemark"></textarea>
|
||||
</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="Submit">确认发货</view>
|
||||
</view>
|
||||
</view>
|
||||
</uni-popup>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
emits: ['confirmFeedback', 'close'],
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
},
|
||||
isQuicklyDelivery: {
|
||||
type: String,
|
||||
default: '0'
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
show: {
|
||||
handler(newVal) {
|
||||
if(newVal) {
|
||||
this.$nextTick(() => {
|
||||
this.$refs.deliveryOrderPopup.open()
|
||||
})
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
deliveryType: 1,
|
||||
deliveryRemark: '',
|
||||
deliveryImages: '',
|
||||
trackingNumber: ''
|
||||
},
|
||||
imgList: [],
|
||||
clicked: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
chooseImage(e) {
|
||||
uni.chooseMedia({
|
||||
count: 1, //默认9
|
||||
mediaType: ['image'],
|
||||
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
||||
sourceType: ['album'], //从相册选择
|
||||
success: (res) => {
|
||||
uni.showLoading({
|
||||
title: '上传中',
|
||||
mask: true
|
||||
});
|
||||
res.tempFiles.forEach((fileObj, index) => {
|
||||
this.$request.uploadFile(fileObj.tempFilePath).then((url) => {
|
||||
this.imgList.push(url);
|
||||
if (index === res.tempFiles.length - 1) {
|
||||
uni.hideLoading();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
viewImage(e, imgList) {
|
||||
uni.previewImage({
|
||||
urls: imgList,
|
||||
current: e.currentTarget.dataset.url
|
||||
});
|
||||
},
|
||||
delImg(e, imgList) {
|
||||
uni.showModal({
|
||||
title: '',
|
||||
content: '确定要删除这张图片吗?',
|
||||
cancelText: '取消',
|
||||
confirmText: '确定',
|
||||
success: res => {
|
||||
if (res.confirm) {
|
||||
imgList.splice(e.currentTarget.dataset.index, 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
changePopup(e) {
|
||||
console.log(e);
|
||||
if(!e.show) {
|
||||
this.closePopup()
|
||||
}
|
||||
},
|
||||
closePopup() {
|
||||
this.$emit('close')
|
||||
},
|
||||
changeRadio(e) {
|
||||
this.form.deliveryType = e.target.value
|
||||
},
|
||||
async Submit() {
|
||||
if(this.clicked) return;
|
||||
this.clicked = true;
|
||||
if(this.form.deliveryType == 1 && !this.form.trackingNumber) {
|
||||
uni.showToast({
|
||||
title: '请填写物流/快递单号',
|
||||
icon: 'none'
|
||||
})
|
||||
this.clicked = false;
|
||||
return
|
||||
}
|
||||
const isAfterService = this.data.afterServiceRecordList && this.data.afterServiceRecordList.length !== 0
|
||||
let res;
|
||||
if(isAfterService && this.isQuicklyDelivery === '0') {
|
||||
const updateGoodsParams = {
|
||||
id: this.data.afterServiceRecordList[0].id,
|
||||
workerFeedbackResult: 3, // 已重发/补发
|
||||
workerResendType: this.form.deliveryType, // 1-快递/物流
|
||||
workerResendTrackingNumber: this.form.trackingNumber, // 必填
|
||||
workerResendRemark: this.form.deliveryRemark,
|
||||
workerResendImages: this.imgList.length ? this.imgList.toString() : ''
|
||||
}
|
||||
res = await this.$request.editAfterServiceGoodsRecord(updateGoodsParams);
|
||||
} else {
|
||||
// 确定方法名
|
||||
let reqFunName = "updateOrder", id, isQuicklyDelivery;
|
||||
if (this.data.orderDetailId == null) {
|
||||
id = this.data.orderMasterId;
|
||||
} else {
|
||||
reqFunName = "updateDetailOrder";
|
||||
id = this.data.orderDetailId;
|
||||
isQuicklyDelivery = 1
|
||||
}
|
||||
const updateOrderParams = {
|
||||
...this.form,
|
||||
id: id,
|
||||
deliveryImages: this.imgList.length ? this.imgList.toString() : ''
|
||||
}
|
||||
|
||||
if(isQuicklyDelivery) {
|
||||
updateOrderParams.isQuicklyDelivery = isQuicklyDelivery;
|
||||
updateOrderParams.orderStatus = 3
|
||||
}
|
||||
|
||||
res = await this.$request[reqFunName](updateOrderParams);
|
||||
}
|
||||
this.clicked = false;
|
||||
if (res.code === 0) {
|
||||
this.$emit('confirmFeedback')
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '操作失败',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
<template>
|
||||
<view>
|
||||
<!-- 模态框 -->
|
||||
<view class="cu-modal" :class="show?'show':''">
|
||||
<view class="cu-dialog">
|
||||
<view class="padding-xl" style="background-color: #ffffff;">
|
||||
<view class="text-bold text-lg margin-bottom-sm">物流信息</view>
|
||||
|
||||
<view class="cu-timeline" style="max-height: 600upx;overflow-y: auto;">
|
||||
<view class="cu-item text-main-color" v-for="(item, index) in flowArr" :key="index">
|
||||
<view class="content shadow-blur" style="text-align: left;padding: 15upx 20upx;">
|
||||
<view><text style="color: black;">{{item.description}}</text></view>
|
||||
<text style="color: #999999;font-size: 24upx;">{{item.time}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="cu-bar bg-white solid-top">
|
||||
<view class="action margin-0 flex-sub text-black solid-left" data-modal="deliveryFlowDetail"
|
||||
@tap="hideModal">关闭</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'deliveryFlowDetail',
|
||||
emits: ['confirmFeedback'],
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
trackingNumber: {
|
||||
type: String
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
show: {
|
||||
handler(newVal) {
|
||||
if(newVal) {
|
||||
this.$nextTick(() => {
|
||||
this.getFLows()
|
||||
})
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
flowArr: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getFLows() {
|
||||
const res = await this.$request.getDeliveryFlow(this.trackingNumber)
|
||||
this.flowArr = res.data.traces ? res.data.traces.reverse() : [];
|
||||
},
|
||||
hideModal(e) {
|
||||
this.$emit('close', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
|
@ -0,0 +1,271 @@
|
|||
<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>
|
||||
|
|
@ -0,0 +1,323 @@
|
|||
<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" data-popup="deliveryOrderPopup" @click="closePopup"><text
|
||||
class="cuIcon-close"></text></view>
|
||||
<view class="bg-white padding" style="padding-top: 74rpx; min-height: 1000rpx;">
|
||||
<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">
|
||||
<uni-number-box :min="0" :max="item.goodsNum" v-model="item.toAssignNum" @change="changePiecesNum($event, item)">
|
||||
</uni-number-box>
|
||||
</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="solid-bottom padding padding-bottom-sm">
|
||||
<view class="flex justify-between align-center margin-bottom-xs padding-top">
|
||||
<view>
|
||||
<text class="text-xxl text-main-color"><text class="cuIcon-phone"></text></text>
|
||||
<text class="text-bold text-lg margin-lr-xs">{{data.customerPhone.substring(0, 3) + "****" + data.customerPhone.substring(7)}}</text>
|
||||
</view>
|
||||
<button class="cu-btn line-main-color" @click="makePhoneCall(data.customerPhone)">拨打</button>
|
||||
</view>
|
||||
<view class="text-sm">
|
||||
{{orderType === 1 ? '分次发货,请输入发货日期与时间,然后在”发货预约“栏按时发货。' : '拨打电话,按与客户约定的时间填入,完成排单,未完成排单将导致排单超时!'}}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="padding">
|
||||
<view class="margin-bottom-xs">
|
||||
<view class="margin-bottom-xs">选择日期:</view>
|
||||
<picker class="relative-view" mode="date" :value="date" :start="curDate" @change="dateChange">
|
||||
<input class="radius-input" v-model="date" disabled>
|
||||
<view class="text-lg input-arrow"><text class="cuIcon-triangledownfill"></text></view>
|
||||
</input>
|
||||
</picker>
|
||||
</view>
|
||||
<view>
|
||||
<view class="margin-bottom-xs">选择时间:</view>
|
||||
<view class="flex justify-start align-center">
|
||||
<picker class="relative-view" :class="disableTime ? 'readonlyPicker' : ''" mode="selector" :value="timeIndex" :range="timeList"
|
||||
@change="timeChange" @click="showTime">
|
||||
<input class="custom-input radius-input" v-model="time" disabled>
|
||||
<view class="text-lg input-arrow"><text class="cuIcon-triangledownfill"></text></view>
|
||||
</input>
|
||||
</picker>
|
||||
<text class="margin-lr-xs">或</text>
|
||||
<picker class="relative-view" :class="!disableTime ? 'readonlyPicker' : ''" mode="selector" :value="timeRangeIndex" :range="timeRangeList"
|
||||
@change="timeRangeChange" @click="showDuration">
|
||||
<input class="custom-input radius-input" v-model="timeRange" disabled>
|
||||
<view class="text-lg input-arrow"><text class="cuIcon-triangledownfill"></text></view>
|
||||
</input>
|
||||
</picker>
|
||||
</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,
|
||||
date: null,
|
||||
time: null,
|
||||
timeList: [],
|
||||
timeIndex: 0,
|
||||
timeRangeList: [],
|
||||
timeRange: null,
|
||||
timeRangeIndex: 0,
|
||||
expectTimeStart: null,
|
||||
expectTimeEnd: null,
|
||||
disableTime: false
|
||||
}
|
||||
},
|
||||
onReady() {
|
||||
this.timeRangeList = this.$globalData.timeRangeList;
|
||||
this.timeList = this.$globalData.timeList;
|
||||
},
|
||||
methods: {
|
||||
changePopup(e) {
|
||||
console.log(e);
|
||||
if(!e.show) {
|
||||
this.closePopup()
|
||||
}
|
||||
},
|
||||
closePopup() {
|
||||
this.$emit('close')
|
||||
},
|
||||
dateChange(e) {
|
||||
this.date = e.detail.value;
|
||||
this.changeExpectTime();
|
||||
},
|
||||
showTime() {
|
||||
this.disableTime = false;
|
||||
},
|
||||
showDuration() {
|
||||
this.disableTime = true;
|
||||
},
|
||||
timeChange(e) {
|
||||
this.timeIndex = e.detail.value;
|
||||
this.time = this.timeList[this.timeIndex];
|
||||
this.timeRange = null;
|
||||
this.changeExpectTime();
|
||||
},
|
||||
timeRangeChange(e) {
|
||||
this.timeRangeIndex = e.detail.value;
|
||||
this.timeRange = this.timeRangeList[this.timeRangeIndex];
|
||||
this.time = null;
|
||||
this.changeExpectTime();
|
||||
},
|
||||
changeExpectTime() {
|
||||
let time = this.time != null ? this.time : this.timeRange;
|
||||
if (time != null) {
|
||||
let timeRangeSplit = this.$globalData.timeRangeSplit;
|
||||
let timeArr = time.split(timeRangeSplit);
|
||||
this.expectTimeStart = this.date + ' ' + timeArr[0] + ':00';
|
||||
this.expectTimeEnd = this.date + ' ' + timeArr[1] + ':00';
|
||||
}
|
||||
},
|
||||
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;
|
||||
this.date = null;
|
||||
this.time = null;
|
||||
this.timeRange = null;
|
||||
this.timeRangeIndex = 0;
|
||||
this.expectTimeStart = null,
|
||||
this.expectTimeEnd = null;
|
||||
},
|
||||
loadData(order) {
|
||||
this.resetData();
|
||||
this.curUserInfo = this.$request.getCurUserInfo();
|
||||
this.getCanAssignList(order);
|
||||
},
|
||||
async getCanAssignList(order) {
|
||||
// 获取最新的订单信息
|
||||
let getOrderRes = await this.$request.getOrderMasterDetail({
|
||||
id: order.orderMasterId
|
||||
});
|
||||
|
||||
let res = await this.$request.getCanAssignList({
|
||||
orderMasterId: order.orderMasterId
|
||||
});
|
||||
let pickedList = res.data;
|
||||
this.curOrder = getOrderRes.data;
|
||||
this.pickedList = pickedList;
|
||||
},
|
||||
assignWork() {
|
||||
let goodsToAssign = [];
|
||||
// 标识是否派完所有goods,1为派完,0为未派完
|
||||
let isAll = 1;
|
||||
this.pickedList.forEach((item) => {
|
||||
if (item.toAssignNum && item.goodsNum !== item.toAssignNum) {
|
||||
isAll = 0;
|
||||
}
|
||||
if (item.toAssignNum) {
|
||||
goodsToAssign.push({
|
||||
goodsStandardId: item.goodsStandardId,
|
||||
num: item.toAssignNum
|
||||
})
|
||||
}
|
||||
});
|
||||
if (goodsToAssign.length > 0) {
|
||||
if (this.dispatchTotalPrice) {
|
||||
if (!(this.time || this.timeRange)) {
|
||||
uni.showToast({
|
||||
title: '请选择预约时间',
|
||||
icon: 'none'
|
||||
})
|
||||
return;
|
||||
}
|
||||
this.UpdateTime()
|
||||
let params = {
|
||||
goodsList: goodsToAssign,
|
||||
workerId: this.curUserInfo.workerId,
|
||||
totalPay: this.dispatchTotalPrice,
|
||||
orderMasterId: this.curOrder.orderMasterId,
|
||||
isAll: isAll,
|
||||
workerName: this.curUserInfo.realName
|
||||
}
|
||||
this.$emit('assignWork', params);
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '请填写派单价格',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '请至少选择一种规格',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
},
|
||||
makePhoneCall(customerPhone) {
|
||||
uni.makePhoneCall({
|
||||
phoneNumber: customerPhone
|
||||
})
|
||||
},
|
||||
async UpdateTime() {
|
||||
const datetimeArr = [this.expectTimeStart, this.expectTimeEnd];
|
||||
let reqFunName = "updateOrder", id;
|
||||
if (this.data.orderDetailId == null) {
|
||||
id = this.data.orderMasterId;
|
||||
} else {
|
||||
reqFunName = "updateDetailOrder";
|
||||
id = this.data.orderDetailId;
|
||||
}
|
||||
// 确定参数
|
||||
let params = datetimeArr && datetimeArr.length > 1 ? {
|
||||
id: id,
|
||||
expectTimeStart: datetimeArr[0],
|
||||
expectTimeEnd: datetimeArr[1],
|
||||
useTimeNotRange: datetimeArr[1] == null ? true : false
|
||||
} : {
|
||||
id: id,
|
||||
revTime: datetime
|
||||
}
|
||||
|
||||
let res = await this.$request[reqFunName](params);
|
||||
if (res.code === 0) {
|
||||
this.$emit('confirmFeedback')
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '操作失败',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
.relative-view {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.input-arrow {
|
||||
position: absolute;
|
||||
right: 10rpx;
|
||||
top: 25%;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
<button class="cu-btn line-main-color" @click="makePhoneCall(data.customerPhone)">拨打</button>
|
||||
</view>
|
||||
<view class="text-sm">
|
||||
拨打电话,按与客户约定的时间填入,完成排单,未完成排单将导致排单超时!
|
||||
{{ orderType === 1 ? '修改或重排发货时间,需与客户协商一致并同意,否则引起客诉你负全责。' : '拨打电话,按与客户约定的时间填入,完成排单,未完成排单将导致排单超时!'}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="padding">
|
||||
|
|
@ -57,7 +57,7 @@
|
|||
</label>
|
||||
<label class="radio">
|
||||
<radio style="transform:scale(0.7)" class="main-color" value="master" />
|
||||
<text>师傅原因</text>
|
||||
<text>{{orderType === 1 ? '商家原因' : '师傅原因'}}</text>
|
||||
</label>
|
||||
</radio-group>
|
||||
</view>
|
||||
|
|
@ -68,7 +68,7 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="cu-bar bg-white solid-top">
|
||||
<view class="action margin-0 flex-sub text-black" data-modal="showEditTimeArrangeModal" @click="cannotArrangeTime">无法排单</view>
|
||||
<view class="action margin-0 flex-sub text-black" data-modal="showEditTimeArrangeModal" @click="cannotArrangeTime">{{orderType === 1 ? '取消' : '无法排单'}}</view>
|
||||
<view class="action margin-0 flex-sub text-main-color solid-left" data-modal="showEditTimeArrangeModal"
|
||||
@click="arrangeTime">确认</view>
|
||||
</view>
|
||||
|
|
@ -96,6 +96,10 @@
|
|||
ifRollback2WS: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
orderType: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
},
|
||||
data() {
|
||||
|
|
@ -165,7 +169,11 @@
|
|||
},
|
||||
cannotArrangeTime(e) {
|
||||
this.resetData();
|
||||
this.$emit('showArrangeFailTime', e)
|
||||
if(this.orderType === 1) {
|
||||
this.hideModal(e)
|
||||
} else {
|
||||
this.$emit('showArrangeFailTime', e)
|
||||
}
|
||||
},
|
||||
async arrangeTime(e) {
|
||||
if (!(this.time || this.timeRange)) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,153 @@
|
|||
<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" data-popup="deliveryOrderPopup" @click="closePopup"><text
|
||||
class="cuIcon-close"></text></view>
|
||||
<view class="bg-white padding" style="padding-top: 74rpx; min-height: 1000rpx;">
|
||||
<view class="text-xxl text-center">交货记录</view>
|
||||
<view class="text-lg text-left">上传交货照片(非必填):</view>
|
||||
<view>
|
||||
<div class="grid col-3 grid-square">
|
||||
<view class="bg-img" v-for="(item,index) in imgList" :key="index"
|
||||
@tap="viewImage($event, imgList)" :data-url="item">
|
||||
<image :src="item" mode="aspectFill"></image>
|
||||
<view class="cu-tag bg-red" @tap.stop="delImg($event, imgList)" :data-index="index">
|
||||
<text class='cuIcon-close'></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="solids" @tap="chooseImage" v-if="imgList.length < 6">
|
||||
<text class='cuIcon-cameraadd'></text>
|
||||
</view>
|
||||
</div>
|
||||
</view>
|
||||
<view class="text-lg text-left">备注:</view>
|
||||
<view style="margin-bottom: 10rpx;">
|
||||
<textarea style="width: 100%;box-sizing: border-box;" class="custom-input radius-input" placeholder="温馨提示:服务过程中有分歧存在客诉隐患或未能及时处理彻底的,请急报说明情况,将由平台客服一起协调沟通,否则造成你有责任的客诉将不利于服务评价。" cols="30" rows="10" v-model="form.handoverRemark"></textarea>
|
||||
</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="Submit">提交</view>
|
||||
</view>
|
||||
</view>
|
||||
</uni-popup>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
emits: ['confirmFeedback', 'close'],
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
show: {
|
||||
handler(newVal) {
|
||||
if(newVal) {
|
||||
this.$nextTick(() => {
|
||||
this.$refs.deliveryOrderPopup.open()
|
||||
})
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
handoverRemark: '',
|
||||
handoverImages: '',
|
||||
},
|
||||
imgList: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
chooseImage(e) {
|
||||
uni.chooseMedia({
|
||||
count: 1, //默认9
|
||||
mediaType: ['image'],
|
||||
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
||||
sourceType: ['album'], //从相册选择
|
||||
success: (res) => {
|
||||
uni.showLoading({
|
||||
title: '上传中',
|
||||
mask: true
|
||||
});
|
||||
res.tempFiles.forEach((fileObj, index) => {
|
||||
this.$request.uploadFile(fileObj.tempFilePath).then((url) => {
|
||||
this.imgList.push(url);
|
||||
if (index === res.tempFiles.length - 1) {
|
||||
uni.hideLoading();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
viewImage(e, imgList) {
|
||||
uni.previewImage({
|
||||
urls: imgList,
|
||||
current: e.currentTarget.dataset.url
|
||||
});
|
||||
},
|
||||
delImg(e, imgList) {
|
||||
uni.showModal({
|
||||
title: '',
|
||||
content: '确定要删除这张图片吗?',
|
||||
cancelText: '取消',
|
||||
confirmText: '确定',
|
||||
success: res => {
|
||||
if (res.confirm) {
|
||||
imgList.splice(e.currentTarget.dataset.index, 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
changePopup(e) {
|
||||
console.log(e);
|
||||
if(!e.show) {
|
||||
this.closePopup()
|
||||
}
|
||||
},
|
||||
closePopup() {
|
||||
this.$emit('close')
|
||||
},
|
||||
async Submit() {
|
||||
// 确定方法名
|
||||
let reqFunName = "updateOrder", id;
|
||||
if (this.data.orderDetailId == null) {
|
||||
id = this.data.orderMasterId;
|
||||
} else {
|
||||
reqFunName = "updateDetailOrder";
|
||||
id = this.data.orderDetailId;
|
||||
}
|
||||
const updateOrderParams = {
|
||||
...this.form,
|
||||
id: id,
|
||||
handoverImages: this.imgList.length ? this.imgList.toString() : ''
|
||||
}
|
||||
|
||||
let res = await this.$request[reqFunName](updateOrderParams);
|
||||
if (res.code === 0) {
|
||||
this.$emit('confirmFeedback')
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '操作失败',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
<template>
|
||||
<view>
|
||||
<!-- 模态框 -->
|
||||
<view class="cu-modal" :class="show?'show':''">
|
||||
<view class="cu-dialog">
|
||||
<view class="padding-xl" style="text-align: left;">
|
||||
<view class="text-bold text-lg margin-bottom-sm">本订单属指定保险全程保障的订单</view>
|
||||
<view>1、本订单已打通保险系统,根据接单人员信息自动生效保险保单(立即生效)</view>
|
||||
<view>2、确保上门人员与系统接单人员为同一人,便能成功将上门人员纳入保险系统承保。</view>
|
||||
<view>3、接单后需派单下级人员 (或改派换人)下级需进系统接单,其保险方能生效! </view>
|
||||
<view style="font-size: 15px;padding-top: 20rpx;">雇佣保险:{{data.insuranceManager.insuranceName}}<text class="text-main-color" style="margin-left: 20rpx;" @click="goInfo(data.insuranceManager.insuranceUrl)">详情条款</text></view>
|
||||
<view style="padding-top: 20rpx;">
|
||||
<checkbox style="transform:scale(0.6)" class="main-color" :checked="true" disabled>
|
||||
</checkbox>
|
||||
<text class="margin-left-xs">
|
||||
<text class="text-red">如未按规则办理,心存侥幸,导致上门人员脱保将负全责!</text>
|
||||
</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="cu-bar bg-white solid-top">
|
||||
<view class="action margin-0 flex-sub text-main-color" data-modal="showAcceptOrderNoticeModal"
|
||||
@click="hideModal">同意/确认</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'acceptOrderNotice',
|
||||
emits: ['close'],
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
hideModal() {
|
||||
this.$emit('close');
|
||||
},
|
||||
goInfo(url) {
|
||||
uni.setClipboardData({
|
||||
data: url,
|
||||
success: () => {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '链接已复制,请在浏览器打开'
|
||||
});
|
||||
},
|
||||
fail(e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
|
@ -0,0 +1,201 @@
|
|||
<template>
|
||||
<view>
|
||||
<!-- 模态框 -->
|
||||
<view class="cu-modal" :class="show?'show':''">
|
||||
<view class="cu-dialog">
|
||||
<view class="padding-xl" style="text-align: left;" v-if="data.orderDetailId">
|
||||
<view class="text-bold text-lg margin-bottom-sm">本订单属全程保险保障订单</view>
|
||||
<view class="text-red" style="padding-bottom: 10rpx;">本单所有同行人员 (师傅/徒弟/随行),未在系统有账号的接单人员均需填写保险承保信息!
|
||||
</view>
|
||||
|
||||
<view class="oneStaff solid-top" v-for="item in showList" :key="item.phone">
|
||||
<view class="oneLine">
|
||||
<view>
|
||||
<text>同行人员姓名:</text>
|
||||
<view style="margin-top: 10rpx">
|
||||
{{item.name}}
|
||||
</view>
|
||||
</view>
|
||||
<view>
|
||||
<text>同行人员联系号码:</text>
|
||||
<view style="margin-top: 10rpx">
|
||||
{{item.phone}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view style="padding-top: 10rpx;">
|
||||
<text>身份证号码:</text>
|
||||
<view style="margin-top: 10rpx">
|
||||
{{item.idCardNum}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="tag">保险已生效</view>
|
||||
</view>
|
||||
|
||||
<view class="oneStaff solid-top">
|
||||
<view class="oneLine">
|
||||
<view>
|
||||
<text>同行人员姓名:</text>
|
||||
<view style="margin-top: 10rpx">
|
||||
<input class="radius-input inline-input" type="text" placeholder="输入真实姓名"
|
||||
v-model="oneData.name">
|
||||
</view>
|
||||
</view>
|
||||
<view>
|
||||
<text>同行人员联系号码:</text>
|
||||
<view style="margin-top: 10rpx">
|
||||
<input class="radius-input inline-input" type="text" placeholder="必须本人号码"
|
||||
v-model="oneData.phone">
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view style="padding-top: 10rpx;">
|
||||
<text>身份证号码:</text>
|
||||
<view style="margin-top: 10rpx">
|
||||
<input class="radius-input inline-input" type="text" placeholder="请输入身份证号码并反复确认无误"
|
||||
v-model="oneData.idCardNum">
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view style="text-align: center;padding: 10rpx 0;">
|
||||
<text class="text-main-color" @click="submitAdd">添加同行人员+</text>
|
||||
</view>
|
||||
<view style="padding-top: 20rpx;">
|
||||
<checkbox style="transform:scale(0.6)" class="main-color" :checked="true" disabled>
|
||||
</checkbox>
|
||||
<text class="margin-left-xs">
|
||||
<text class="text-red">未录入者/与订单无关者,一律不得上门。根据法律法规以上资料必须实真有效且无误方能被保险承保。</text>
|
||||
</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="padding-xl" style="text-align: left;" v-else>
|
||||
<view class="text-bold text-lg margin-bottom-sm">本订单属全程保险保障订单</view>
|
||||
<view>本订单指定全程保险,但凡有随行人员均需录入增员信息,以纳入保险承保。排单后请在“待上门”或“进行中”状态点“保险增员”按键操作;订单指派下级人员的,下级接单人员亦可同样操作。</view>
|
||||
</view>
|
||||
<view class="cu-bar bg-white solid-top">
|
||||
<view class="action margin-0 flex-sub text-main-color"
|
||||
data-modal="showAcceptOrderNoticeModal" @click="hideModal">退出页面</view>
|
||||
<!-- <view v-else class="action margin-0 flex-sub text-main-color"
|
||||
data-modal="showAcceptOrderNoticeModal" @click="hideModal">我已知晓</view> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import validRule from '@/common/js/validate.js'
|
||||
export default {
|
||||
name: 'acceptOrderNotice',
|
||||
emits: ['close'],
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
oneData: {
|
||||
name: "",
|
||||
phone: "",
|
||||
idCardNum: ""
|
||||
},
|
||||
showList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
hideModal() {
|
||||
this.$emit('close');
|
||||
},
|
||||
async initData() {
|
||||
let res = await this.$request.insuranceUserList({
|
||||
orderDetailId: this.data.orderDetailId
|
||||
})
|
||||
this.showList = res.rows
|
||||
},
|
||||
async submitAdd() {
|
||||
if (!this.oneData.name) {
|
||||
uni.showToast({
|
||||
title: '请输入姓名',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
if (!validRule.validPhone(this.oneData.phone)) {
|
||||
uni.showToast({
|
||||
title: '请输入手机号码',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
if (!validRule.validIdCard(this.oneData.idCardNum)) {
|
||||
uni.showToast({
|
||||
title: '请输入正确的身份证号码',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
uni.showToast({
|
||||
title: '保险生成中,可能需要几秒或最多三分钟,请等待!', // 要显示的文字
|
||||
icon: 'none', // 设置图标为'none',只显示文字
|
||||
duration: 10 * 60 * 1000,
|
||||
});
|
||||
// 510121198705063377
|
||||
const res = await this.$request.insuranceUserAdd({
|
||||
...this.oneData,
|
||||
orderDetailId: this.data.orderDetailId
|
||||
})
|
||||
if (res.code === 0) {
|
||||
uni.showToast({
|
||||
title: '增员完毕,保险已生效',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
this.initData()
|
||||
this.oneData = {
|
||||
name: "",
|
||||
phone: "",
|
||||
idCardNum: ""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.oneStaff {
|
||||
padding: 20rpx 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.oneStaff .tag {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 20rpx;
|
||||
color: #0081ff;
|
||||
}
|
||||
|
||||
.oneLine {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.oneLine>view {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.oneLine text {
|
||||
padding-bottom: 10rpx;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
<template>
|
||||
<view>
|
||||
<!-- 模态框 -->
|
||||
<view class="cu-modal" :class="show?'show':''">
|
||||
<view class="cu-dialog">
|
||||
<view class="padding-xl" style="text-align: left;">
|
||||
<view class="text-bold text-lg margin-bottom-sm">绑定本帐号保险人员信息</view>
|
||||
<view class="text-red" style="padding-bottom: 10rpx;">请绑定本帐号操作者身份信息,用于含保险订单的保单投保 (自动实时投保)!
|
||||
</view>
|
||||
<view class="oneStaff solid-top">
|
||||
<view>
|
||||
<text>您的姓名:</text>
|
||||
<view style="margin-top: 10rpx">
|
||||
<input class="radius-input inline-input" type="text" placeholder="输入真实姓名"
|
||||
v-model="oneData.certName">
|
||||
</view>
|
||||
</view>
|
||||
<view style="padding-top: 10rpx;">
|
||||
<text>身份证号码:</text>
|
||||
<view style="margin-top: 10rpx">
|
||||
<input class="radius-input inline-input" type="text" placeholder="请输入身份证号码并反复确认无误"
|
||||
v-model="oneData.certNo">
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view style="padding-top: 20rpx;">
|
||||
<checkbox style="transform:scale(0.6)" class="main-color" :checked="true" disabled>
|
||||
</checkbox>
|
||||
<text class="margin-left-xs">
|
||||
<text class="text-red">各自在自己账号上绑定即可,在参与上门服务或客户作业服务过程中,操作订单时会自动对接保险系统!</text>
|
||||
</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="cu-bar bg-white solid-top">
|
||||
<view class="action margin-0 flex-sub text-main-color"
|
||||
data-modal="showAcceptOrderNoticeModal" @click="submitAdd">确认资料</view>
|
||||
<!-- <view v-else class="action margin-0 flex-sub text-main-color"
|
||||
data-modal="showAcceptOrderNoticeModal" @click="hideModal">我已知晓</view> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import validRule from '@/common/js/validate.js'
|
||||
export default {
|
||||
name: 'acceptOrderNotice',
|
||||
emits: ['close', 'success'],
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
data: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
oneData: {
|
||||
certName: "",
|
||||
certNo: ""
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
hideModal() {
|
||||
this.$emit('close');
|
||||
},
|
||||
async submitAdd() {
|
||||
if (!this.oneData.certName) {
|
||||
uni.showToast({
|
||||
title: '请输入姓名',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
if (!validRule.validIdCard(this.oneData.certNo)) {
|
||||
uni.showToast({
|
||||
title: '请输入正确的身份证号码',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
return
|
||||
}
|
||||
this.$emit('success', this.oneData)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.oneStaff {
|
||||
padding: 20rpx 0;
|
||||
}
|
||||
|
||||
.oneLine {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.oneLine>view {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.oneLine text {
|
||||
padding-bottom: 10rpx;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -21,13 +21,15 @@
|
|||
<view>上门有加单,请客户支付</view>
|
||||
<view class="flex justify-start margin-top-sm align-center">
|
||||
<text>加单总额:</text>
|
||||
<input class="radius-input inline-input" type="digit" v-model="newPriceForA1"></input>
|
||||
<input class="radius-input inline-input" type="digit" :disabled="hadSetPriceChange" v-model="newPriceForA1"></input>
|
||||
<text class="margin-left-xs">元</text>
|
||||
<view class="cu-btn line-main-color sm margin-left"
|
||||
v-if="priceObj && priceObj.type == 1" @click="changeOrderPrice(newPriceForA1)">修改报价
|
||||
</view>
|
||||
<view class="cu-btn line-main-color sm margin-left" v-else
|
||||
@click="changeOrderPrice(newPriceForA1)">确认报价</view>
|
||||
<template v-if="!hadSetPriceChange">
|
||||
<view class="cu-btn line-main-color sm margin-left"
|
||||
v-if="priceObj && priceObj.type == 1" @click="changeOrderPrice(newPriceForA1)">修改报价
|
||||
</view>
|
||||
<view class="cu-btn line-main-color sm margin-left" v-else
|
||||
@click="changeOrderPrice(newPriceForA1)">确认报价</view>
|
||||
</template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -37,13 +39,15 @@
|
|||
<view>上门报价类,给现场客户的报价</view>
|
||||
<view class="flex justify-start margin-top-sm align-center">
|
||||
<text>报价总额:</text>
|
||||
<input class="radius-input inline-input" type="digit" v-model="newPriceForA2"></input>
|
||||
<input class="radius-input inline-input" type="digit" :disabled="hadSetPriceChange" v-model="newPriceForA2"></input>
|
||||
<text class="margin-left-xs">元</text>
|
||||
<view class="cu-btn line-main-color sm margin-left"
|
||||
v-if="priceObj && priceObj.type == 2" @click="changeOrderPrice(newPriceForA2)">修改报价
|
||||
</view>
|
||||
<view class="cu-btn line-main-color sm margin-left" v-else
|
||||
@click="changeOrderPrice(newPriceForA2)">确认报价</view>
|
||||
<template v-if="!hadSetPriceChange">
|
||||
<view class="cu-btn line-main-color sm margin-left"
|
||||
v-if="priceObj && priceObj.type == 2" @click="changeOrderPrice(newPriceForA2)">修改报价
|
||||
</view>
|
||||
<view class="cu-btn line-main-color sm margin-left" v-else
|
||||
@click="changeOrderPrice(newPriceForA2)">确认报价</view>
|
||||
</template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -107,7 +111,8 @@
|
|||
newPriceForA1: null,
|
||||
newPrice: null,
|
||||
showPayQrcodeModal: false,
|
||||
remark: ""
|
||||
remark: "",
|
||||
hadSetPriceChange: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
|
@ -121,10 +126,13 @@
|
|||
this.payAction = priceObj.type;
|
||||
let money = priceObj.changeMoney;
|
||||
if (this.payAction === 1) {
|
||||
this.newPriceForA1 = money;
|
||||
this.newPriceForA1 = money + (this.priceObj.attachmentMoney || 0);
|
||||
} else if (this.payAction === 2) {
|
||||
this.newPriceForA2 = money;
|
||||
}
|
||||
this.hadSetPriceChange = true
|
||||
} else {
|
||||
this.hadSetPriceChange = false
|
||||
}
|
||||
},
|
||||
resetData() {
|
||||
|
|
@ -147,6 +155,7 @@
|
|||
}
|
||||
},
|
||||
changePayAction(payAction) {
|
||||
if(this.hadSetPriceChange) return
|
||||
this.payAction = payAction;
|
||||
},
|
||||
async changeOrderPrice(newPrice) {
|
||||
|
|
@ -202,8 +211,13 @@
|
|||
goFinishOrder() {
|
||||
this.$emit('finishOrder', this.data);
|
||||
},
|
||||
clearCurAddedPrice() {
|
||||
this.changeOrderPrice(0);
|
||||
async clearCurAddedPrice() {
|
||||
if(this.priceObj.attachmentMoney) {
|
||||
await this.$request.deleteAttachPrice({
|
||||
orderDetailId: this.data.orderDetailId
|
||||
})
|
||||
}
|
||||
this.changeOrderPrice(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,12 +21,14 @@
|
|||
<view>上门有加单,请客户支付</view>
|
||||
<view class="flex justify-start margin-top-sm align-center">
|
||||
<text>加单总额:</text>
|
||||
<input class="radius-input inline-input" type="digit" v-model="newPriceForA1"></input>
|
||||
<input class="radius-input inline-input" type="digit" :disabled="hadSetPriceChange" v-model="newPriceForA1"></input>
|
||||
<text class="margin-left-xs">元</text>
|
||||
<view class="cu-btn line-main-color sm margin-left" v-if="priceObj && priceObj.type == 1"
|
||||
@click="changeOrderPrice(newPriceForA1)">修改报价</view>
|
||||
<view class="cu-btn line-main-color sm margin-left" v-else
|
||||
@click="changeOrderPrice(newPriceForA1)">确认报价</view>
|
||||
<template v-if="!hadSetPriceChange">
|
||||
<view class="cu-btn line-main-color sm margin-left" v-if="priceObj && priceObj.type == 1"
|
||||
@click="changeOrderPrice(newPriceForA1)">修改报价</view>
|
||||
<view class="cu-btn line-main-color sm margin-left" v-else
|
||||
@click="changeOrderPrice(newPriceForA1)">确认报价</view>
|
||||
</template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -36,12 +38,14 @@
|
|||
<view>上门报价类,给下单方报价</view>
|
||||
<view class="flex justify-start margin-top-sm align-center">
|
||||
<text>报价总额:</text>
|
||||
<input class="radius-input inline-input" type="digit" v-model="newPriceForA2"></input>
|
||||
<input class="radius-input inline-input" type="digit" :disabled="hadSetPriceChange" v-model="newPriceForA2"></input>
|
||||
<text class="margin-left-xs">元</text>
|
||||
<view class="cu-btn line-main-color sm margin-left" v-if="priceObj && priceObj.type == 2"
|
||||
@click="changeOrderPrice(newPriceForA2)">修改报价</view>
|
||||
<view class="cu-btn line-main-color sm margin-left" v-else
|
||||
@click="changeOrderPrice(newPriceForA2)">确认报价</view>
|
||||
<template v-if="!hadSetPriceChange">
|
||||
<view class="cu-btn line-main-color sm margin-left" v-if="priceObj && priceObj.type == 2"
|
||||
@click="changeOrderPrice(newPriceForA2)">修改报价</view>
|
||||
<view class="cu-btn line-main-color sm margin-left" v-else
|
||||
@click="changeOrderPrice(newPriceForA2)">确认报价</view>
|
||||
</template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -104,7 +108,8 @@
|
|||
newPriceForA1: null,
|
||||
newPrice: null,
|
||||
showPayQrcodeModal: false,
|
||||
remark: ""
|
||||
remark: "",
|
||||
hadSetPriceChange: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
|
@ -118,11 +123,15 @@
|
|||
this.payAction = priceObj.type;
|
||||
let money = priceObj.changeMoney;
|
||||
if (this.payAction === 1) {
|
||||
this.newPriceForA1 = money;
|
||||
this.newPriceForA1 = money + (this.priceObj.attachmentMoney || 0);
|
||||
} else if (this.payAction === 2) {
|
||||
this.newPriceForA2 = money;
|
||||
}
|
||||
this.hadSetPriceChange = true
|
||||
} else {
|
||||
this.hadSetPriceChange = false
|
||||
}
|
||||
console.log(this.hadSetPriceChange);
|
||||
},
|
||||
resetData() {
|
||||
this.payAction = 0;
|
||||
|
|
@ -144,6 +153,7 @@
|
|||
}
|
||||
},
|
||||
changePayAction(payAction) {
|
||||
if(this.hadSetPriceChange) return
|
||||
this.payAction = payAction;
|
||||
},
|
||||
async directlyFinish(e) {
|
||||
|
|
@ -175,6 +185,7 @@
|
|||
type: this.payAction,
|
||||
remark: this.remark
|
||||
});
|
||||
|
||||
if (res && res.code === 0) {
|
||||
uni.showToast({
|
||||
icon: 'success',
|
||||
|
|
@ -199,8 +210,13 @@
|
|||
goFinishOrder() {
|
||||
this.$emit('finishOrder', this.data);
|
||||
},
|
||||
clearCurAddedPrice() {
|
||||
this.changeOrderPrice(0);
|
||||
async clearCurAddedPrice() {
|
||||
if(this.priceObj.attachmentMoney) {
|
||||
await this.$request.deleteAttachPrice({
|
||||
orderDetailId: this.data.orderDetailId
|
||||
})
|
||||
}
|
||||
this.changeOrderPrice(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,154 @@
|
|||
<template>
|
||||
<!-- popup -->
|
||||
<view>
|
||||
<uni-popup ref="reFinishPopup" type="bottom" @change="changePopup">
|
||||
<view class="text-bold text-gray text-lg text-center left-top-sm-bar" data-popup="reFinishPopup" @click="closePopup"><text
|
||||
class="cuIcon-close"></text></view>
|
||||
<view class="bg-white padding" style="padding-top: 74rpx; min-height: 1000rpx;">
|
||||
<view class="text-xxl text-center">上门重做补做提交</view>
|
||||
<view class="text-lg text-left">本次售后必须确认已与客户协商一致,并已处理到位,严禁出现再次客诉!现提交给客户验收并结单?</view>
|
||||
<view>
|
||||
<div class="grid col-3 grid-square">
|
||||
<view class="bg-img" v-for="(item,index) in imgList" :key="index"
|
||||
@tap="viewImage($event, imgList)" :data-url="item">
|
||||
<image :src="item" mode="aspectFill"></image>
|
||||
<view class="cu-tag bg-red" @tap.stop="delImg($event, imgList)" :data-index="index">
|
||||
<text class='cuIcon-close'></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="solids" @tap="chooseImage" v-if="imgList.length < 6">
|
||||
<text class='cuIcon-cameraadd'></text>
|
||||
</view>
|
||||
</div>
|
||||
</view>
|
||||
<view style="margin-bottom: 10rpx;">
|
||||
<textarea style="width: 100%;box-sizing: border-box;" class="custom-input radius-input" placeholder="请输入理由或备注" cols="30" rows="10" v-model="form.redoCompleteRemark"></textarea>
|
||||
</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="Submit">确认</view>
|
||||
</view>
|
||||
</view>
|
||||
</uni-popup>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
emits: ['confirmFeedback', 'close'],
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
curOrder: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
show: {
|
||||
handler(newVal) {
|
||||
if(newVal) {
|
||||
this.$nextTick(() => {
|
||||
this.$refs.reFinishPopup.open()
|
||||
})
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
redoCompleteRemark: '',
|
||||
redoCompleteImages: '',
|
||||
},
|
||||
imgList: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
chooseImage(e) {
|
||||
uni.chooseMedia({
|
||||
count: 1, //默认9
|
||||
mediaType: ['image'],
|
||||
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
||||
sourceType: ['album'], //从相册选择
|
||||
success: (res) => {
|
||||
uni.showLoading({
|
||||
title: '上传中',
|
||||
mask: true
|
||||
});
|
||||
res.tempFiles.forEach((fileObj, index) => {
|
||||
this.$request.uploadFile(fileObj.tempFilePath).then((url) => {
|
||||
this.imgList.push(url);
|
||||
if (index === res.tempFiles.length - 1) {
|
||||
uni.hideLoading();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
viewImage(e, imgList) {
|
||||
uni.previewImage({
|
||||
urls: imgList,
|
||||
current: e.currentTarget.dataset.url
|
||||
});
|
||||
},
|
||||
delImg(e, imgList) {
|
||||
uni.showModal({
|
||||
title: '',
|
||||
content: '确定要删除这张图片吗?',
|
||||
cancelText: '取消',
|
||||
confirmText: '确定',
|
||||
success: res => {
|
||||
if (res.confirm) {
|
||||
imgList.splice(e.currentTarget.dataset.index, 1)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
changePopup(e) {
|
||||
console.log(e);
|
||||
if(!e.show) {
|
||||
this.closePopup()
|
||||
}
|
||||
},
|
||||
closePopup() {
|
||||
this.$emit('close')
|
||||
},
|
||||
changeRadio(e) {
|
||||
this.form.deliveryType = e.target.value
|
||||
},
|
||||
async Submit() {
|
||||
const updateOrderParams = {
|
||||
id: this.curOrder.afterServiceRecordList[0].id,
|
||||
workerFeedbackResult: 3,
|
||||
redoCompleteRemark: this.form.redoCompleteRemark,
|
||||
redoCompleteImages: this.imgList.length ? this.imgList.toString() : ''
|
||||
}
|
||||
|
||||
let res = await this.$request.editAfterServiceRecord(updateOrderParams)
|
||||
|
||||
if (res.code === 0) {
|
||||
uni.showToast({
|
||||
icon: 'success',
|
||||
title: '提交成功',
|
||||
duration: 1000
|
||||
})
|
||||
this.$emit('confirmFeedback')
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '操作失败',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
<view class="padding text-left">
|
||||
<view>
|
||||
<view class="flex justify-start">
|
||||
<view>原因选择:</view>
|
||||
<view><text class="text-red">*</text>原因选择:</view>
|
||||
<radio-group @change="changeReasonRadio">
|
||||
<label class="radio margin-right-sm">
|
||||
<radio style="transform:scale(0.7)" class="main-color" value="1" :checked="data.reasonType === 1"/>
|
||||
|
|
@ -29,7 +29,7 @@
|
|||
<view class="margin-top">
|
||||
<textarea style="width: 100%; height: 200rpx;" class="solid radius text-left padding-sm"
|
||||
v-model="remark" maxlength="-1"
|
||||
placeholder="请输入具体原因或直接同意,更改到帐金额需与客户协商一致,否则可能被拒绝或引起客诉升级"></textarea>
|
||||
placeholder="拒绝原因:发生纠纷,建议了解清楚客户诉求,积极协商和平处理(让客户撤单更佳)。否则升级重大客诉可能被平台处罚!确实属客户问题且无法协商请输入具体情况!"></textarea>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 上传图片 -->
|
||||
|
|
@ -42,7 +42,7 @@
|
|||
<text class='cuIcon-close'></text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="solids" @tap="chooseImgList(e, imgList)" v-if="imgList.length < 3">
|
||||
<view class="solids" @click.stop="chooseImgList(e, imgList)" v-if="imgList.length < 3">
|
||||
<text class='cuIcon-cameraadd'></text>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -67,7 +67,7 @@
|
|||
},
|
||||
data: {
|
||||
type: Object,
|
||||
default: {}
|
||||
default: () => {}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
|
|
@ -132,19 +132,20 @@
|
|||
})
|
||||
},
|
||||
async submit(e) {
|
||||
let imgObjList = [];
|
||||
this.imgList.forEach(url => {
|
||||
imgObjList.push({
|
||||
imgUrl: url,
|
||||
imgUploadBy: 2
|
||||
if(!this.remark) {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
duration: 3000,
|
||||
title: '请输入拒绝原因'
|
||||
})
|
||||
})
|
||||
return
|
||||
}
|
||||
let res = await this.$request.editAfterServiceRecord({
|
||||
id: this.data.afterServiceRecordList[0].id,
|
||||
workerFeedbackReasonType: this.reasonType,
|
||||
workerFeedbackReason: this.remark,
|
||||
workerFeedbackResult: 0,
|
||||
imgsList: imgObjList,
|
||||
workerFeedbackImages: this.imgList.length ? this.imgList.toString() : '',
|
||||
updateBy: 2
|
||||
});
|
||||
if (res && res.code === 0) {
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
default: false
|
||||
},
|
||||
arr: {
|
||||
type: Object,
|
||||
type: Array,
|
||||
default: () => []
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
<button class="cu-btn line-main-color" @click="makePhoneCall(data)">拨打</button>
|
||||
</view>
|
||||
<view class="text-sm">
|
||||
拨打电话,按与客户约定的时间填入,完成排单,未完成排单将导致排单超时!
|
||||
{{orderType === 0 ? '拨打电话,按与客户约定的时间填入,完成排单,未完成排单将导致排单超时!' : '需排货的,请输入发货日期与发货时间,发货期将同步通知客户,系统会提醒您发货!'}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="padding">
|
||||
|
|
@ -48,9 +48,10 @@
|
|||
</view>
|
||||
</view>
|
||||
<view class="cu-bar bg-white solid-top">
|
||||
<view class="action margin-0 flex-sub text-black" @click="cannotArrangeTime">无法排单</view>
|
||||
<view class="action margin-0 flex-sub text-black" @click="cannotArrangeTime" v-if="orderType === 0">无法排单</view>
|
||||
<view class="action margin-0 flex-sub text-black" data-modal="showTimeArrangeModal" @click="eightClockDelivery" v-if="orderType === 1">今日20点前发货</view>
|
||||
<view class="action margin-0 flex-sub text-black solid-left" data-modal="showTimeArrangeModal"
|
||||
@click="hideModal">按原时间上门</view>
|
||||
@click="hideModal" v-if="orderType === 0">按原时间上门</view>
|
||||
<view class="action margin-0 flex-sub text-main-color solid-left" data-modal="showTimeArrangeModal"
|
||||
@click="arrangeTime">确认</view>
|
||||
</view>
|
||||
|
|
@ -74,6 +75,10 @@
|
|||
curDate: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
orderType: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
},
|
||||
data() {
|
||||
|
|
@ -156,6 +161,14 @@
|
|||
this.$emit('editServTime', this.data.orderMasterId, [this.expectTimeStart, this.expectTimeEnd], false, this.data);
|
||||
this.hideModal(e);
|
||||
},
|
||||
eightClockDelivery(e) {
|
||||
let nowDate = new Date();
|
||||
const today = nowDate.getFullYear() + '-' + (nowDate.getMonth() + 1) + '-' + nowDate.getDate()
|
||||
const expectStart = today + ' 19:00:00';
|
||||
const expectEnd = today + ' 20:00:00';
|
||||
this.$emit('editServTime', this.data.orderMasterId, [expectStart, expectEnd], false, this.data);
|
||||
this.hideModal(e);
|
||||
},
|
||||
makePhoneCall(order) {
|
||||
if (order.orderDetailId == null) {
|
||||
this.$request.callCustomer({
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -4,7 +4,7 @@
|
|||
<!-- 顶部操作条 -->
|
||||
<cu-custom :bgColor="'bg-main-color'" :isBack="true">
|
||||
<block slot="backText">返回</block>
|
||||
<block slot="content">接收的任务</block>
|
||||
<block slot="content">服务订单</block>
|
||||
</cu-custom>
|
||||
<view class="sticky-bar" :style="[{top: stickyTop + 'px'}]">
|
||||
<!-- 条件筛选栏 -->
|
||||
|
|
@ -97,8 +97,11 @@
|
|||
<view class="flex justify-between">
|
||||
<view class="text-lg text-bold text-cut">{{order.goodsName}}</view>
|
||||
<!-- 不同状态订单使用不同角标 -->
|
||||
<view v-if="([2, 5].indexOf(stateCur) >= 0 || tabCur === 4) && order.orderDetailId == null" class="right-tag padding-lr-sm padding-tb-xs bg-orange">监</view>
|
||||
<view v-else-if="order.orderStatus === 0" class="right-tag padding-lr-sm padding-tb-xs bg-cyan">新</view>
|
||||
<template v-if="order.orderStatus === 0" >
|
||||
<view v-if="order.orderDetailId == null" class="right-tag padding-lr-sm padding-tb-xs bg-cyan">未</view>
|
||||
<view v-else class="right-tag padding-lr-sm padding-tb-xs bg-cyan">新</view>
|
||||
</template>
|
||||
<view v-else-if="([2, 5].indexOf(stateCur) >= 0 || tabCur === 4) && order.isMonitoredOrder" class="right-tag padding-lr-sm padding-tb-xs bg-orange">监</view>
|
||||
<view v-else-if="order.orderStatus === 1" class="right-tag padding-lr-sm padding-tb-xs bg-main-color">未</view>
|
||||
<view v-else-if="order.orderStatus === 2" class="right-tag padding-lr-sm padding-tb-xs bg-yellow">待</view>
|
||||
<view v-else-if="order.orderStatus === 3" class="right-tag padding-lr-sm padding-tb-xs bg-purple">服</view>
|
||||
|
|
@ -120,17 +123,25 @@
|
|||
<view v-if="order.changeMoney || order.payStatus != 1" class='cu-tag margin-right-xs radius line-red margin-top-xs'>有待付款</view>
|
||||
<view v-else class='cu-tag margin-right-xs radius line-red margin-top-xs'>款已付清</view>
|
||||
</template>
|
||||
<template v-if="order.insuranceId">
|
||||
<view class='cu-tag margin-right-xs radius line-main-color margin-top-xs' v-if="order.orderStatus === 0">保险预备中</view>
|
||||
<view class='cu-tag margin-right-xs radius line-main-color margin-top-xs' v-else-if="[1,2,3,4].includes(order.orderStatus)">保险已生效</view>
|
||||
<view class='cu-tag margin-right-xs radius line-main-color margin-top-xs' v-else>保险已完结</view>
|
||||
</template>
|
||||
|
||||
</view>
|
||||
<view>
|
||||
<view v-if="order.timeout == 1" class="float-left">
|
||||
<view v-if="order.orderStatus === 0" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未接单</view>
|
||||
<view v-else-if="order.orderStatus === 1 && order.isCall === '1'" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未预约</view>
|
||||
<view v-else-if="order.orderStatus === 1 && order.isCall === '01'" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未预约</view>
|
||||
<view v-else-if="order.orderStatus === 1 && order.isCall === '02'" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未排单</view>
|
||||
<view v-else-if="order.orderStatus === 1 && order.orderDetailId != null" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未预约</view>
|
||||
<view v-else-if="order.orderStatus === 2" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未上门</view>
|
||||
<view v-else-if="order.orderStatus === 3" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未完单</view>
|
||||
</view>
|
||||
<view class="float-left" v-if="order.afterTimeout == 1 && (order.orderDetailId != null || tabCur === 4)">
|
||||
<view class='cu-tag margin-right-xs radius line-red margin-top-xs'>售后超时</view>
|
||||
</view>
|
||||
<!-- <view class="float-left" v-else-if="order.orderTimeoutRecords" v-for="(timeoutRecord, recordIndex) in order.orderTimeoutRecords">
|
||||
<view v-if="timeoutRecord.orderStatus === 0" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未接单</view>
|
||||
<view v-else-if="timeoutRecord.orderStatus === 1" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未预约</view>
|
||||
|
|
@ -139,21 +150,31 @@
|
|||
</view> -->
|
||||
</view>
|
||||
<view class="float-left" v-for="(afterServiceRecord, afterServiceRecordIndex) in order.afterServiceRecordList" :key="afterServiceRecord.id">
|
||||
<view v-if="afterServiceRecord.createBy && !afterServiceRecord.updateBy" class='cu-tag margin-right-xs radius line-red margin-top-xs'>售后发起中</view>
|
||||
<template v-if="afterServiceRecord.customerFinalCheck === null && afterServiceRecord.customerReasonType">
|
||||
<view v-if="afterServiceRecord.workerFeedbackResult === null" class='cu-tag margin-right-xs radius line-red margin-top-xs'>售后发起中</view>
|
||||
<view v-else class='cu-tag margin-right-xs radius line-red margin-top-xs'>售后反馈中</view>
|
||||
</template>
|
||||
<view v-if="afterServiceRecord.workerFeedbackResult == 1 && afterServiceRecord.customerFinalCheck == null" class='cu-tag margin-right-xs radius line-main-color margin-top-xs'>售后已同意</view>
|
||||
<view v-if="afterServiceRecord.workerFeedbackResult == 0 && afterServiceRecord.customerFinalCheck == null" class='cu-tag margin-right-xs radius line-red margin-top-xs'>售后已拒绝</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck == 0" class='cu-tag margin-right-xs radius line-red margin-top-xs'>售后纠纷中</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck == 1" class='cu-tag margin-right-xs radius line-main-color margin-top-xs'>售后已完成</view>
|
||||
<view v-if="order.afterPlatformServiceStatus == 1" class='cu-tag margin-right-xs radius line-red margin-top-xs'>售后纠纷中</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck == 1 || afterServiceRecord.customerFinalCheck == 2" class='cu-tag margin-right-xs radius line-main-color margin-top-xs'>售后已完成</view>
|
||||
</view>
|
||||
<view class="float-clear"></view>
|
||||
<view class="margin-top-sm">
|
||||
<text class="text-main-color text-lg margin-right-xs"><text class="cuIcon-people"></text></text>
|
||||
<text>姓名:{{order.customerName}}</text>
|
||||
<view class="margin-top-sm order-name">
|
||||
<view>
|
||||
<text class="text-main-color text-lg margin-right-xs"><text class="cuIcon-people"></text></text>
|
||||
<text>姓名:{{order.customerName}}</text>
|
||||
</view>
|
||||
<view v-if="order.insuranceId">
|
||||
<text style="padding-right: 20rpx;">保险要求</text>
|
||||
<text class="text-main-color" data-modal="showInsuranceDetail" @click="showModal($event, order)"> 详情...</text>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<view class="margin-top-sm">
|
||||
<text class="text-main-color text-lg margin-right-xs"><text class="cuIcon-location"></text></text>
|
||||
<text class="margin-right-xs">{{order.address}}</text>
|
||||
<text class="text-lg" @tap="copyData(order.address)"><text class="cuIcon-copy"></text></text>
|
||||
<text class="margin-right-xs">{{order.provinceName + order.cityName + order.countryName + order.streetName + order.address}}</text>
|
||||
<text class="text-lg" @tap="copyData(order.provinceName + order.cityName + order.countryName + order.streetName + order.address)"><text class="cuIcon-copy"></text></text>
|
||||
</view>
|
||||
<view class="margin-top-sm">
|
||||
<text class="text-main-color text-lg margin-right-xs"><text class="cuIcon-time"></text></text>
|
||||
|
|
@ -189,11 +210,12 @@
|
|||
<view class="margin-top-sm flex justify-start align-center" v-if="order.orderDetailId != null && tabCur === 3 && order.drawCashStatus === 0 && $dateUtil.addHours(order.workFinishTime, 1).getTime() > new Date().getTime()">
|
||||
<text class="text-main-color text-lg margin-right-xs"><text class="cuIcon-time"></text></text>
|
||||
<text>距完单分帐:</text>
|
||||
<uni-countdown :show-colon="false" :backgroundColor="'#e35b33'" :color="'#faf3f0'"
|
||||
:day="$dateUtil.countDownDiff($dateUtil.addHours(order.workFinishTime, 1)).day"
|
||||
:hour="$dateUtil.countDownDiff($dateUtil.addHours(order.workFinishTime, 1)).hour"
|
||||
:minute="$dateUtil.countDownDiff($dateUtil.addHours(order.workFinishTime, 1)).min"
|
||||
:second="$dateUtil.countDownDiff($dateUtil.addHours(order.workFinishTime, 1)).seconds">
|
||||
<uni-countdown v-if="order.shareAccountCountdownEndTime" :show-colon="false" :backgroundColor="'#e35b33'" :color="'#faf3f0'"
|
||||
:day="$dateUtil.countDownDiff(order.shareAccountCountdownEndTime).day"
|
||||
:hour="$dateUtil.countDownDiff(order.shareAccountCountdownEndTime).hour"
|
||||
:minute="$dateUtil.countDownDiff(order.shareAccountCountdownEndTime).min"
|
||||
:second="$dateUtil.countDownDiff(order.shareAccountCountdownEndTime).seconds"
|
||||
@timeup="reloadMasterOrderPage()">
|
||||
</uni-countdown>
|
||||
</view>
|
||||
<view class="margin-top-sm text-red" @click="normalShowModalByRef('ledgerAccountRemark')"
|
||||
|
|
@ -228,28 +250,33 @@
|
|||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm">改价</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm">转发</button> -->
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" @click="showServOrderDetail(order)">查看</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showAcceptOrderNoticeModal" @click="acceptOrder($event, order, order.orderMasterId, order.orderMasterCode, 1, 'updateMasterOrder')" v-if="order.orderDetailId == null">确认接单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showAcceptOrderNoticeModal" @click="acceptOrder($event, order, order.orderDetailId, order.orderDetailCode, 1, 'updateDetailOrder')" v-else>确认接单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.orderDetailId == null" @click="rejectMasterOrder(order)">拒绝接单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-else @click="rejectDetailOrder(order)">拒绝接单</button>
|
||||
<template v-if="!(order.goodsOrderMasterId && stateCur === 0)">
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showAcceptOrderNoticeModal" @click="acceptOrder($event, order, order.orderMasterId, order.orderMasterCode, 1, 'updateMasterOrder')" v-if="order.orderDetailId == null">确认接单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showAcceptOrderNoticeModal" @click="acceptOrder($event, order, order.orderDetailId, order.orderDetailCode, 1, 'updateDetailOrder')" v-else>确认接单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.orderDetailId == null" @click="rejectMasterOrder(order)">拒绝接单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-else @click="rejectDetailOrder(order)">拒绝接单</button>
|
||||
</template>
|
||||
</view>
|
||||
<view v-if="order.orderStatus === 1 && tabCur === 0">
|
||||
<view v-if="order.orderStatus === 1 && (tabCur === 0 || order.workerId == curUserInfo.workerId)">
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" @click="showServOrderDetail(order)">查看</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-popup="dispatchOrderPopup" @click="getCanAssignList(order)" @tap="togglePopup($event, order)" v-show="order.orderDetailId == null">派单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" @click="assignWork2MySelf(order)" v-show="order.orderDetailId == null">自己承接</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showTimeArrangeModal" @tap="showModal($event, order)">预约时间</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.orderDetailId != null" @click="rejectDetailOrder(order)">退单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showDispathToSelf" @tap="showModal($event, order)" v-show="order.orderDetailId == null">分次服务</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showTimeArrangeModal" @tap="showModal($event, order, true)">预约时间</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.orderDetailId != null" @click="rejectMasterOrderWhenAccepted(order)">{{order.masterWorkerId === order.workerId ? '退回重派' : '退单'}}</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.orderDetailId == null" @click="rejectMasterOrderWhenAccepted(order)">退单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.insuranceId" data-modal="showInsuranceRetinue" @click="insuranceRetinueAdd($event, order)">保险增员</button>
|
||||
</view>
|
||||
<view v-else-if="order.orderStatus === 1">
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" @click="showServOrderDetail(order)">查看</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.orderDetailId != null && order.insuranceId" data-modal="showInsuranceRetinue" @click="insuranceRetinueAdd($event, order)">保险增员</button>
|
||||
</view>
|
||||
<view v-if="order.orderStatus === 2">
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" @click="showServOrderDetail(order)">查看</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" @click="makePhoneCall(order.customerPhone)">联系客户</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showEditTimeArrangeModal" @tap="showModal($event, order)" v-show="order.orderDetailId != null">修改时间</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showOnDoorNoticeModal" @tap="showModal($event, order)" v-show="order.orderDetailId != null">立即上门</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.orderDetailId != null" @click="rejectDetailOrder(order)">退单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showOnDoorNoticeModal" @tap="showModal($event, order)" v-show="order.orderDetailId != null">{{order.goods.storeService ? '立即服务' : '立即上门'}}</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.orderDetailId != null" @click="rejectMasterOrderWhenAccepted(order)">{{order.masterWorkerId === order.workerId ? '退回重派' : '退单'}}</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.orderDetailId != null && order.insuranceId" data-modal="showInsuranceRetinue" @click="insuranceRetinueAdd($event, order)">保险增员</button>
|
||||
</view>
|
||||
<view v-if="order.orderStatus === 3">
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" @click="showServOrderDetail(order)">查看</button>
|
||||
|
|
@ -263,22 +290,25 @@
|
|||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showEditTimeArrangeModal" @tap="showModal($event, order)" v-show="order.orderDetailId != null">重新排期</button>
|
||||
<!-- <button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" @tap="finishOrder(order)" v-if="order.payStatus === 1" v-show="order.orderDetailId != null">发起完单</button> -->
|
||||
<!-- <button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showPayQrcodeModal" v-if="order.payStatus === 0" @tap="makePayQrcode($event, order)" v-show="order.orderDetailId != null">生成收款码</button> -->
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.orderDetailId != null" @click="rejectDetailOrder(order)">退单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.orderDetailId != null" @click="rejectMasterOrderWhenAccepted(order)">{{order.masterWorkerId === order.workerId ? '退回重派' : '退单'}}</button>
|
||||
</view>
|
||||
<view v-if="order.orderStatus === 4 || order.orderStatus === 5">
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" @click="showServOrderDetail(order)">查看</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" @click = "changePrice($event, order)" data-ref="newServPriceOffline" data-modal="showNewServPriceOfflineModal" v-show="order.orderDetailId != null && order.clockInLocation && order.payType === 1 && order.consultMode === '01'">报价/完单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" @click = "changePrice($event, order)" data-ref="newServPriceOnline" data-modal="showNewServPriceOnlineModal" v-show="order.orderDetailId != null && order.clockInLocation && order.payType === 0 && order.consultMode === '01'">报价/完单</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" v-if="order.drawCashStatus !== 1" @click="serveringReturn(order)">提交退回</button>
|
||||
</view>
|
||||
<!-- <view v-if="order.orderStatus === 'afterSaleService'">
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" @tap="makePhoneCall(order.customerPhone)">联系客户</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm" data-modal="showEditTimeArrangeModal" @tap="showModal($event, order)">修改时间</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm">立即上门</button>
|
||||
<button class="cu-btn bg-main-color margin-right-xs shadow-blur margin-top-sm">立即服务</button>
|
||||
</view> -->
|
||||
<view v-if="order.afterServiceRecordList && order.afterServiceRecordList.length && order.orderDetailId != null" class="bg-white margin-top-sm">
|
||||
<view v-if="order.showAfterServiceRecord == 1 && order.afterServiceRecordList && order.afterServiceRecordList.length" class="bg-white margin-top-sm">
|
||||
<view v-for="(afterServiceRecord, afterServiceRecordIndex) in order.afterServiceRecordList" :key="afterServiceRecord.id">
|
||||
<view v-if="afterServiceRecord.createBy == 1" class="padding-tb solid-top">
|
||||
<afterServiceRecord :after-service-record="afterServiceRecord" :order="order" @redoGoHome="showModalByRef('sure2Revisit', order, null)" @callModal="(modelName) => showModal({currentTarget: {dataset: {modal: modelName}}}, order)"></afterServiceRecord>
|
||||
<!-- <view v-if="afterServiceRecord.createBy == 1" class="padding-tb solid-top">
|
||||
<view class='cu-tag bg-main-color radius light'>售后发起中</view>
|
||||
<view class="text-gray text-sm margin-bottom-xs">您需快速操作反馈,24小时内不操作将自动同意!</view>
|
||||
<view v-if="afterServiceRecord.operType === 1">
|
||||
<view class="flex justify-start align-end">
|
||||
<text>退款申请:</text>
|
||||
|
|
@ -351,7 +381,7 @@
|
|||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex justify-end align-end margin-tb-sm" v-if="!afterServiceRecord.updateBy">
|
||||
<view class="flex justify-end align-end margin-tb-sm" v-if="!afterServiceRecord.updateBy && afterServiceRecord.workerFeedbackResult === null">
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" @tap="showModalByRef('sure2Revisit', order, null)">上门重做</button>
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" data-modal="rejectAfterSale" @tap="showModal($event, order)">拒绝处理</button>
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" data-modal="agreeAfterSale" @tap="showModal($event, order)">操作处理</button>
|
||||
|
|
@ -359,82 +389,113 @@
|
|||
</view>
|
||||
<view v-if="afterServiceRecord.updateBy == 2" class="padding-tb solid-top">
|
||||
<view class='cu-tag bg-main-color radius light'>师傅反馈</view>
|
||||
<view v-if="afterServiceRecord.operType === 1">
|
||||
<view>
|
||||
<view class="margin-top-xs">
|
||||
<text>师傅反馈结果:</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackResult === 0">拒绝</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackResult === 1">同意</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackResult === 2">上门重做/补做</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackResult === 2 || afterServiceRecord.workerFeedbackResult === 3">上门重做/补做</text>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.workerFeedbackResult === 1">
|
||||
<text>同意退款金额:</text>
|
||||
<text v-if="afterServiceRecord.agreedRefund">{{afterServiceRecord.agreedRefund}}</text>
|
||||
<text v-else-if="afterServiceRecord.refund">{{afterServiceRecord.refund}}</text>
|
||||
<text v-else-if="order.payMoney">{{order.payMoney}}</text>
|
||||
<text>{{afterServiceRecord.agreedRefund ? afterServiceRecord.agreedRefund : afterServiceRecord.refund}}</text>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.workerFeedbackResult !== 2">
|
||||
<text>师傅反馈:</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackReasonType === 1">客户原因</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackReasonType === 2">师傅原因</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackReasonType === 3">其他</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackReason">
|
||||
<text v-if="afterServiceRecord.workerFeedbackReasonType">,</text>
|
||||
{{afterServiceRecord.workerFeedbackReason}}
|
||||
</text>
|
||||
</view>
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm">
|
||||
<view class="bg-img" v-for="(imgObj, imgIndex) in afterServiceRecord.imgsList" :key="imgIndex" v-if="imgObj.imgUploadBy === 2">
|
||||
<image :src="imgObj.imgUrl" @tap="viewImage($event, [imgObj.imgUrl])" :data-url="imgObj.imgUrl" mode="aspectFill"></image>
|
||||
<view style="padding-left: 196upx;" v-if="afterServiceRecord.workerFeedbackResult === 2 || afterServiceRecord.workerFeedbackResult === 3">
|
||||
<view>客户同意则本次退款金额为0元</view>
|
||||
<view>客户同意的需马上处理并重新提交</view>
|
||||
<view class="text-right" v-if="afterServiceRecord.customerAgreeRedo === 1">
|
||||
<view class='cu-tag bg-main-color radius light'>客户同意方案</view>
|
||||
</view>
|
||||
</view>
|
||||
<template v-if="afterServiceRecord.workerFeedbackResult == 0 || afterServiceRecord.workerFeedbackResult == 1">
|
||||
<view>
|
||||
<text>师傅反馈:</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackReasonType === 1">客户原因</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackReasonType === 2">师傅原因</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackReasonType === 3">其他</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackReason">
|
||||
<text v-if="afterServiceRecord.workerFeedbackReasonType">,</text>
|
||||
{{afterServiceRecord.workerFeedbackReason}}
|
||||
</text>
|
||||
</view>
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm" v-if="afterServiceRecord.workerFeedbackImages">
|
||||
<view class="bg-img" v-for="(imgUrl, imgIndex) in afterServiceRecord.workerFeedbackImages.split(',')" :key="imgIndex">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<template v-else-if="afterServiceRecord.workerFeedbackResult === 3">
|
||||
<view class="margin-top-xs">
|
||||
<text>师傅重做/补做提交:</text>
|
||||
</view>
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm" v-if="afterServiceRecord.redoCompleteImages">
|
||||
<view class="bg-img" v-for="(imgUrl, imgIndex) in afterServiceRecord.redoCompleteImages.split(',')" :key="imgIndex">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="margin-bottom-xs">
|
||||
<text>{{afterServiceRecord.redoCompleteRemark}}</text>
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
|
||||
<view style="border-top: 1px solid gainsboro;padding-top: 10upx;" v-if="afterServiceRecord.customerFinalCheck == null && (afterServiceRecord.workerFeedbackResult === 0 || afterServiceRecord.workerFeedbackResult === 1 || afterServiceRecord.workerFeedbackResult === 3)">
|
||||
<text class="text-gray" style="font-size: 20upx;">待客户验收或审核,36小时未操作将自动取消本次售后</text>
|
||||
<view class="flex align-center margin-top-sm">
|
||||
<text>工单时限:</text>
|
||||
<uni-countdown :show-colon="false" :backgroundColor="'#eee'"
|
||||
:day="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.redoCompleteTime, 36)).day"
|
||||
:hour="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.redoCompleteTime, 36)).hour"
|
||||
:minute="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.redoCompleteTime, 36)).min"
|
||||
:second="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.redoCompleteTime, 36)).seconds">
|
||||
</uni-countdown>
|
||||
</view>
|
||||
</view>
|
||||
<view v-else-if="afterServiceRecord.operType === 2">
|
||||
<view class="margin-top-xs">
|
||||
<text>师傅反馈结果:</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackResult === 0">拒绝</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackResult === 1">同意</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackResult === 2">上门重做/补做</text>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.workerFeedbackResult !== 2">
|
||||
<text>师傅反馈:</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackReasonType === 1">客户原因</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackReasonType === 2">师傅原因</text>
|
||||
<text v-else-if="afterServiceRecord.workerFeedbackReasonType === 3">其他</text>
|
||||
<text v-if="afterServiceRecord.workerFeedbackReason">
|
||||
<text v-if="afterServiceRecord.workerFeedbackReasonType">,</text>
|
||||
{{afterServiceRecord.workerFeedbackReason}}
|
||||
</text>
|
||||
</view>
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm">
|
||||
<view class="bg-img" v-for="(imgObj, imgIndex) in afterServiceRecord.imgsList" :key="imgIndex" v-if="imgObj.imgUploadBy === 2">
|
||||
<image :src="imgObj.imgUrl" @tap="viewImage($event, [imgObj.imgUrl])" :data-url="imgObj.imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
<view class="flex justify-end align-end margin-tb-sm" v-if="afterServiceRecord.workerFeedbackResult === 2">
|
||||
<button class="cu-btn sm bg-yellow margin-right-sm" data-modal="showReFinishSubmit" @tap="showModal($event, order)">重做/补做提交</button>
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck != null" class="padding-tb solid-top">
|
||||
<view class='cu-tag bg-main-color radius light'>客户最终确认</view>
|
||||
<view class="margin-top-xs">{{afterServiceRecord.customerFinalCheck === 1 ? '同意' : '不同意'}}</view>
|
||||
<view class="text-red" v-if="afterServiceRecord.customerFinalCheck === 0">订单交由平台协商处理</view>
|
||||
<view v-else-if="afterServiceRecord.customerFinalCheck === 1">
|
||||
<view v-if="afterServiceRecord.originalRefund > 0">
|
||||
<view>
|
||||
<text>本单退款,系统已发起按客户支付的帐户原路退回</text>
|
||||
<text class="text-red">{{afterServiceRecord.originalRefund}}</text>
|
||||
<text>元,银行按工作日退款,节假日顺延到帐。遇客户问询,请其耐心等待,到账时会在客户端”客户最终确认“处有到账时间。</text>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck === 0">
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm" v-if="afterServiceRecord.customerDisagreeImages">
|
||||
<view class="bg-img" v-for="imgUrl in afterServiceRecord.customerDisagreeImages.split(',')" :key="imgUrl">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
<view>退款支付到账:{{afterServiceRecord.refundApplyTime}}</view>
|
||||
</view>
|
||||
<view v-else-if="afterServiceRecord.originalRefund == 0 && order.payStatus == 0">
|
||||
<text>本单未支付,实际退回0.00元</text>
|
||||
<view class="margin-bottom-xs" v-if="afterServiceRecord.customerDisagreeReason">
|
||||
<text>不同意理由:{{afterServiceRecord.customerDisagreeReason}}</text>
|
||||
</view>
|
||||
<view class="text-red" v-if="afterServiceRecord.customerFinalCheck === 0">订单交由平台协商处理</view>
|
||||
</view>
|
||||
<view v-else-if="afterServiceRecord.customerFinalCheck === 1">
|
||||
<template v-if="afterServiceRecord.workerFeedbackResult !== 0">
|
||||
<view v-if="(afterServiceRecord.agreedRefund > 0 || afterServiceRecord.originalRefund > 0) && order.payStatus == 1">
|
||||
<view>
|
||||
<text>本单退款,系统已发起按客户支付的帐户原路退回</text>
|
||||
<text class="text-red">{{afterServiceRecord.agreedRefund || afterServiceRecord.originalRefund}}</text>
|
||||
<text>元,银行按工作日退款,节假日顺延到帐。遇客户问询,请其耐心等待,到账时会在客户端”客户最终确认“处有到账时间。</text>
|
||||
</view>
|
||||
<view>退款支付到账:{{afterServiceRecord.refundApplyTime}}</view>
|
||||
</view>
|
||||
<view v-else-if="order.payStatus == 0">
|
||||
<text>本单已退款{{afterServiceRecord.agreedRefund}}元,因未实际支付,实退为0元。未退部分继续完成订单及正常支付!</text>
|
||||
</view>
|
||||
</template>
|
||||
<view v-else>
|
||||
<text>本次售后已操作完毕,售后申请已结束!</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="margin-top-sm solid-top padding-top-sm" v-if="Boolean(order.customerRemark)">
|
||||
<view class="margin-top-sm solid-top padding-top-sm" @click="updateOrderWorkerRemark(order, index)">
|
||||
<text class="text-main-color text-lg margin-right-xs"><text class="cuIcon-comment"></text></text>
|
||||
<text>备注:{{order.customerRemark}}</text>
|
||||
<text>{{order.workerRemark || '可输入本单备注语'}}</text>
|
||||
<!-- <text class="cuIcon-edit margin-left-sm" @click="updateOrderWorkerRemark(order, index)"></text> -->
|
||||
</view>
|
||||
</view>
|
||||
<load-status-bar v-show="[5,6].indexOf(tabCur) >= 0 || (stateCur != null && stateList[stateCur].code === 105)" ref="loadStatusBar" @loadMore="loadMasterOrderPage"></load-status-bar>
|
||||
|
|
@ -452,6 +513,13 @@
|
|||
<pic-modal ref="showPicModal" :imgList="picModalImgList"></pic-modal>
|
||||
<on-door-immediately v-if="showOnDoorNoticeModal" :show="showOnDoorNoticeModal" :data="curOrder" @close="showOnDoorNoticeModal = false" @confirmFeedback="reloadMasterOrderPage"></on-door-immediately>
|
||||
<accept-order-notice v-if="showAcceptOrderNoticeModal" :show="showAcceptOrderNoticeModal" :data="curOrder" @close="showAcceptOrderNoticeModal = false" @confirmFeedback="setCurTab(0)"></accept-order-notice>
|
||||
<insurance-detail v-if="showInsuranceDetail" :show="showInsuranceDetail" :data="curOrder" @close="showInsuranceDetail = false"></insurance-detail>
|
||||
<insurance-retinue v-if="showInsuranceRetinue" :show="showInsuranceRetinue" :data="curOrder" @close="showInsuranceRetinue = false" ref="insuranceRetinueRef"></insurance-retinue>
|
||||
<insurance-vertify v-if="showInsuranceVertify" :show="showInsuranceVertify" :data="curOrder" @close="showInsuranceVertify = false" ref="insuranceVertifyRef" @success="certVertifySuccess"></insurance-vertify>
|
||||
<allocateServiceMoney v-if="showAllocateServiceMoney" :show="showAllocateServiceMoney" :data="curOrder" @close="showAllocateServiceMoney = false" @confirmFeedback="showAllocateServiceMoney = false;reloadMasterOrderPage()"></allocateServiceMoney>
|
||||
<dispatch-order-to-self v-if="showDispathToSelf" :show="showDispathToSelf" :data="curOrder" @close="showDispathToSelf = false" @assignWork="assignWork" @confirmFeedback="showDispathToSelf = false;reloadMasterOrderPage()"></dispatch-order-to-self>
|
||||
<reFinishSubmit v-if="showReFinishSubmit" :show="showReFinishSubmit" :curOrder="curOrder" @close="showReFinishSubmit = false" @confirmFeedback="showReFinishSubmit = false;reloadMasterOrderPage()"></reFinishSubmit>
|
||||
|
||||
<confirm-modal ref="ledgerAccountRemark" :showCancel="false" :showConfirm="true">
|
||||
<block slot="contentView">
|
||||
<view class="text-left">
|
||||
|
|
@ -476,6 +544,10 @@
|
|||
<!-- 账户及实名弹窗 -->
|
||||
<vertify-bank-bind ref="vertifyBankBind"></vertify-bank-bind>
|
||||
<vertify-certify ref="vertifyCertify"></vertify-certify>
|
||||
|
||||
<uni-popup ref="editOrderRemarkPopup" type="center">
|
||||
<uni-popup-dialog title="修改本单备忘语" mode="input" :value="curOrder.workerRemark" v-if="showEditWorkerRemark" @close="showEditWorkerRemark = false" @confirm="updateOrderWorkerRemarkOpreation"></uni-popup-dialog>
|
||||
</uni-popup>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
|
@ -495,6 +567,13 @@
|
|||
import rejectAfterSale from '@/pages/order-manage/modal/reject-after-sale.vue';
|
||||
import onDoorImmediately from '@/pages/order-manage/modal/on-door-immediately.vue';
|
||||
import acceptOrderNotice from '@/pages/order-manage/modal/accept-order-notice.vue';
|
||||
import insuranceDetail from '@/pages/order-manage/modal/insurance-detail.vue';
|
||||
import insuranceRetinue from '@/pages/order-manage/modal/insurance-retinue.vue';
|
||||
import insuranceVertify from '@/pages/order-manage/modal/insurance-vertify.vue';
|
||||
import allocateServiceMoney from '@/pages/order-manage/modal/allocate-service-money.vue';
|
||||
import dispatchOrderToSelf from '@/pages/order-manage/modal/dispatch-order-to-self.vue';
|
||||
import reFinishSubmit from '@/pages/order-manage/modal/re-finish-submit.vue'
|
||||
import afterServiceRecord from './components/afterServiceRecord.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
|
@ -512,7 +591,14 @@
|
|||
agreeAfterSale,
|
||||
rejectAfterSale,
|
||||
onDoorImmediately,
|
||||
acceptOrderNotice
|
||||
acceptOrderNotice,
|
||||
insuranceDetail,
|
||||
insuranceRetinue,
|
||||
insuranceVertify,
|
||||
allocateServiceMoney,
|
||||
dispatchOrderToSelf,
|
||||
reFinishSubmit,
|
||||
afterServiceRecord
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -586,6 +672,7 @@
|
|||
scrollLeft: 0,
|
||||
stickyTop: this.CustomBar,
|
||||
tabCur: 0,
|
||||
orderType: 0,
|
||||
stateCur: null,
|
||||
showTimeArrangeModal: false,
|
||||
showArrangeFailTimeModal: false,
|
||||
|
|
@ -595,6 +682,9 @@
|
|||
showEditTimeArrangeModal: false,
|
||||
showOnDoorNoticeModal: false,
|
||||
showAcceptOrderNoticeModal: false,
|
||||
showInsuranceDetail: false,
|
||||
showInsuranceRetinue: false,
|
||||
showInsuranceVertify: false,
|
||||
sendUrgentMsgModal: false,
|
||||
agreeAfterSale: false,
|
||||
rejectAfterSale: false,
|
||||
|
|
@ -603,20 +693,34 @@
|
|||
curDate: '',
|
||||
curUserInfo: {},
|
||||
orderStatistics: {},
|
||||
hasAuthLocation: true
|
||||
hasAuthLocation: true,
|
||||
storageArgs: null,
|
||||
showAllocateServiceMoney: false,
|
||||
showDispathToSelf: false,
|
||||
showEditWorkerRemark: false,
|
||||
showReFinishSubmit: false
|
||||
}
|
||||
},
|
||||
onLoad(option) {
|
||||
if (option && option.tabCur) {
|
||||
this.stateCur = null;
|
||||
this.tabCur = option.tabCur;
|
||||
} else if(option && option.stateCur) {
|
||||
this.tabCur = null;
|
||||
this.stateCur = option.stateCur;
|
||||
} else if(option && option.orderType) {
|
||||
this.orderType = option.orderType;
|
||||
}
|
||||
this.loadData();
|
||||
this.bindEvent();
|
||||
},
|
||||
onShow() {
|
||||
if(this.orderList.length){
|
||||
const isDetailPage = uni.getStorageSync('isDetailPage');
|
||||
console.log(isDetailPage);
|
||||
if(this.orderList.length && !isDetailPage){
|
||||
this.reloadMasterOrderPage();
|
||||
}
|
||||
uni.setStorageSync('isDetailPage', '')
|
||||
},
|
||||
onUnload() {
|
||||
this.offBindEvent();
|
||||
|
|
@ -627,6 +731,24 @@
|
|||
this.curUserInfo = this.$request.getCurUserInfo();
|
||||
// let myTeamInfo = await this.$api.data('myTeamInfo');
|
||||
// this.myTeamMembers = myTeamInfo.members;
|
||||
// const res = await this.$request.getWorkerInfo(this.curUserInfo.workerId)
|
||||
// if(res.data.loginStatus == 1) {
|
||||
// // 禁止登录,退出登录
|
||||
// uni.clearStorageSync('userProfile');
|
||||
// uni.showToast({
|
||||
// icon: 'none',
|
||||
// title: '您已被禁止登录',
|
||||
// duration: 3000,
|
||||
// success() {
|
||||
// setTimeout(() => {
|
||||
// uni.reLaunch({
|
||||
// url: '/pages/login/login'
|
||||
// })
|
||||
// }, 3000)
|
||||
// }
|
||||
// })
|
||||
// return
|
||||
// }
|
||||
this.myOrders = await this.$api.data('myOrders');
|
||||
// this.orderList = this.myOrders.orderList;
|
||||
// this.areaList = await this.$api.data('areaList');
|
||||
|
|
@ -639,16 +761,30 @@
|
|||
// });
|
||||
// }
|
||||
// 初始化订单列表
|
||||
this.loadMasterOrderPage({
|
||||
orderStatus: this.subStateList[0].code
|
||||
});
|
||||
// 初始化品类及区域列表
|
||||
this.loadCategoryList();
|
||||
this.loadRegionList();
|
||||
// 初始化指派成员
|
||||
this.loadTeamMembers();
|
||||
// 订单统计
|
||||
this.loadOrderStatistics();
|
||||
// this.loadMasterOrderPage({
|
||||
// orderStatus: this.subStateList[0].code
|
||||
// });
|
||||
// // 初始化品类及区域列表
|
||||
// this.loadCategoryList();
|
||||
// this.loadRegionList();
|
||||
// // 初始化指派成员
|
||||
// this.loadTeamMembers();
|
||||
// // 订单统计
|
||||
// this.loadOrderStatistics();
|
||||
Promise.allSettled([
|
||||
// 初始化订单列表
|
||||
this.loadMasterOrderPage({
|
||||
orderStatus: this.subStateList[0].code
|
||||
}),
|
||||
// 订单统计
|
||||
this.loadOrderStatistics()
|
||||
]).then(() => {
|
||||
// 初始化品类及区域列表
|
||||
this.loadCategoryList();
|
||||
this.loadRegionList();
|
||||
// 初始化指派成员
|
||||
this.loadTeamMembers();
|
||||
})
|
||||
},
|
||||
reloadMasterOrderPage(params = {}) {
|
||||
// this.pageParams = [];
|
||||
|
|
@ -715,7 +851,7 @@
|
|||
params.isMonitoredOrder = true;
|
||||
} else if (this.stateList[this.stateCur].code === 103) {
|
||||
// 超时单
|
||||
params.isMonitoredOrder = true;
|
||||
// params.isMonitoredOrder = true;
|
||||
params.orderByColumn = "createTime";
|
||||
params.isAsc = "desc";
|
||||
} else if (this.stateList[this.stateCur].code === 0) {
|
||||
|
|
@ -749,6 +885,7 @@
|
|||
params.isAsc = "asc";
|
||||
}
|
||||
}
|
||||
params.orderType = this.orderType;
|
||||
try {
|
||||
let res = null;
|
||||
let tmpStateCur = this.stateCur;
|
||||
|
|
@ -824,24 +961,24 @@
|
|||
},
|
||||
async loadCategoryList(idArr) {
|
||||
let typeList = await this.$request.listByStep({
|
||||
type: 1
|
||||
type: this.orderType == 0 ? 1 : 2
|
||||
});
|
||||
typeList = typeList.data;
|
||||
let col1Id = idArr ? idArr[0] : typeList[0].goodsCategoryId;
|
||||
let subTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.orderType == 0 ? 1 : 2,
|
||||
goodsCategoryId: col1Id
|
||||
});
|
||||
subTypeList = subTypeList.data;
|
||||
let col2Id = idArr ? idArr[1] : subTypeList[0].goodsCategoryId;
|
||||
let subSubTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.orderType == 0 ? 1 : 2,
|
||||
goodsCategoryId: col2Id
|
||||
});
|
||||
subSubTypeList = subSubTypeList.data;
|
||||
let col3Id = idArr ? idArr[2] : subSubTypeList[0].goodsCategoryId;
|
||||
let thirdTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.orderType == 0 ? 1 : 2,
|
||||
goodsCategoryId: col3Id
|
||||
});
|
||||
thirdTypeList = thirdTypeList.data;
|
||||
|
|
@ -878,7 +1015,9 @@
|
|||
this.myTeamMembers = res.rows;
|
||||
},
|
||||
async loadOrderStatistics() {
|
||||
let res = await this.$request.orderStatistics();
|
||||
let res = await this.$request.orderStatistics({
|
||||
orderType: this.orderType
|
||||
});
|
||||
this.orderStatistics = res.data;
|
||||
},
|
||||
bindEvent() {
|
||||
|
|
@ -925,14 +1064,14 @@
|
|||
if (colObj.column == 0) {
|
||||
// 通过一级查询二级
|
||||
let subTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.orderType == 0 ? 1 : 2,
|
||||
goodsCategoryId: this.categoryList[0][colObj.value].goodsCategoryId
|
||||
});
|
||||
subTypeList = subTypeList.data;
|
||||
let subSubTypeList = [];
|
||||
if (subTypeList && subTypeList.length) {
|
||||
subSubTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.orderType == 0 ? 1 : 2,
|
||||
goodsCategoryId: subTypeList[0].goodsCategoryId
|
||||
});
|
||||
subSubTypeList = subSubTypeList.data;
|
||||
|
|
@ -945,7 +1084,7 @@
|
|||
} else if (colObj.column == 1) {
|
||||
// 通过二级查三级
|
||||
let subSubTypeList = await this.$request.listByStep({
|
||||
type: 1,
|
||||
type: this.orderType == 0 ? 1 : 2,
|
||||
goodsCategoryId: this.categoryList[1][colObj.value].goodsCategoryId
|
||||
});
|
||||
subSubTypeList = subSubTypeList.data;
|
||||
|
|
@ -988,7 +1127,13 @@
|
|||
let date = new Date();
|
||||
this.curDate = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate() + " 00:00:00";
|
||||
},
|
||||
showModal(e, orderInfo) {
|
||||
async showModal(e, orderInfo, isCheckOrderInsurance) {
|
||||
if(isCheckOrderInsurance) {
|
||||
let resCheck = await this.$request.checkOrderInsurance({
|
||||
orderCode: orderInfo.orderMasterCode
|
||||
});
|
||||
if(resCheck.code !== 0) return;
|
||||
}
|
||||
this.getCurDateAndTime();
|
||||
if (orderInfo) {
|
||||
this.curOrder = orderInfo;
|
||||
|
|
@ -1139,13 +1284,24 @@
|
|||
this.$refs.payQrcode.showQrcode(res.data.expend.qrcode_url);
|
||||
}
|
||||
},
|
||||
async insuranceRetinueAdd(e, orderInfo) {
|
||||
this.showModal(e, orderInfo);
|
||||
if(orderInfo.orderDetailId) {
|
||||
this.$nextTick(() => {
|
||||
this.$refs.insuranceRetinueRef.initData()
|
||||
})
|
||||
}
|
||||
},
|
||||
showServOrderDetail(order) {
|
||||
uni.setStorageSync('isDetailPage', true);
|
||||
|
||||
uni.navigateTo({
|
||||
url: '/pages/order-manage/serv-detail?order=' + encodeURIComponent(JSON.stringify(order))
|
||||
})
|
||||
},
|
||||
async finishOrder(order) {
|
||||
let checkRes = await this.checkBankAndCertify();
|
||||
console.log(checkRes);
|
||||
if (!checkRes) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -1166,11 +1322,13 @@
|
|||
this.$refs.vertifyCertify.showModal();
|
||||
return false;
|
||||
} else if (this.certifyInfo.status != 1) {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '实名认证审核通过后才可进行操作',
|
||||
duration: 2500
|
||||
})
|
||||
setTimeout(() => {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '实名认证审核通过后才可进行操作',
|
||||
duration: 2500
|
||||
})
|
||||
}, 500);
|
||||
return false;
|
||||
} else if (!this.bankCard || !this.bankCard.bankNum) {
|
||||
this.$refs.vertifyBankBind.showModal();
|
||||
|
|
@ -1178,7 +1336,86 @@
|
|||
}
|
||||
return true;
|
||||
},
|
||||
async acceptOrder(e, order, id, code, status, funName) {
|
||||
certVertifySuccess(data) {
|
||||
const cacheArgs = Array.from(this.storageArgs)
|
||||
const sendArgs = cacheArgs.length > 6 ? cacheArgs.slice(0,-1) : cacheArgs
|
||||
this.acceptOrder(...sendArgs, data)
|
||||
this.showInsuranceVertify = false
|
||||
},
|
||||
varifyDetailOrderUser() {
|
||||
const remark = this.curUserInfo.remark ? JSON.parse(this.curUserInfo.remark) : {certNo: '',certName: ''}
|
||||
if(remark.certNo && remark.certName) {
|
||||
return {
|
||||
check: true,
|
||||
...remark
|
||||
}
|
||||
} else {
|
||||
// 没有身份信息,让填写
|
||||
return {
|
||||
check: false,
|
||||
...remark
|
||||
}
|
||||
}
|
||||
},
|
||||
async acceptOrder(e, order, id, code, status, funName, certData = {}) {
|
||||
// 如果是配件订单,先拆分订单
|
||||
if(order.orderType === 1 && order.hasServiceOrder === 0) {
|
||||
this.curOrder = order;
|
||||
this.showAllocateServiceMoney = true;
|
||||
return
|
||||
}
|
||||
if(order.orderDetailId && order.insuranceId) {
|
||||
// 子单并且订单有保险
|
||||
const detailUserStatus = this.varifyDetailOrderUser()
|
||||
if(detailUserStatus.check) {
|
||||
const validUser = certData.certNo && certData.certName ? certData : detailUserStatus
|
||||
const res = await this.$request.insuranceUserAdd({
|
||||
idCardNum: validUser.certNo,
|
||||
phone: this.curUserInfo.phone,
|
||||
name: validUser.certName,
|
||||
orderDetailId: order.orderDetailId
|
||||
})
|
||||
if (res.code === 0) {
|
||||
// 增员完毕,保险已生效
|
||||
} else {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '保险未响应,请再次点接单',
|
||||
})
|
||||
|
||||
// 没有身份信息,让用户填写
|
||||
// this.storageArgs = arguments;
|
||||
// this.showInsuranceVertify = true
|
||||
return
|
||||
}
|
||||
} else {
|
||||
// 没有身份信息,让用户填写
|
||||
this.storageArgs = arguments;
|
||||
this.showInsuranceVertify = true
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if(order.insuranceId) {
|
||||
// 订单有保险校验保险信息
|
||||
const varifyData = await this.$request.certNoTwoElementVerification({
|
||||
workerId: this.curUserInfo.workerId,
|
||||
...certData
|
||||
})
|
||||
if(varifyData && varifyData.code === 0 && varifyData.data === '身份证二要素校验失败!') {
|
||||
// 验证不通过,弹出输入弹窗
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '身份信息校验失败,请重新输入',
|
||||
duration: 2500
|
||||
})
|
||||
this.storageArgs = arguments;
|
||||
this.showInsuranceVertify = true
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
this.storageArgs = null;
|
||||
let res = await this.$request[funName]({
|
||||
id: id,
|
||||
orderStatus: status,
|
||||
|
|
@ -1287,6 +1524,10 @@
|
|||
}
|
||||
},
|
||||
async assignWork2MySelf(orderInfo) {
|
||||
let resCheck = await this.$request.checkOrderInsurance({
|
||||
orderCode: orderInfo.orderMasterCode
|
||||
});
|
||||
if(resCheck.code !== 0) return;
|
||||
let res = await this.$request.getCanAssignList({
|
||||
orderMasterId: orderInfo.orderMasterId
|
||||
});
|
||||
|
|
@ -1313,9 +1554,8 @@
|
|||
return await this.assignWork(params);
|
||||
},
|
||||
async rejectMasterOrder(order) {
|
||||
let res = await this.$request.updateOrder({
|
||||
id: order.orderMasterId,
|
||||
workerId: -1
|
||||
let res = await this.$request.rejectMasterOrderWhenAccepted({
|
||||
id: order.orderMasterId
|
||||
});
|
||||
if (res && res.code === 0) {
|
||||
this.reloadMasterOrderPage();
|
||||
|
|
@ -1354,27 +1594,63 @@
|
|||
})
|
||||
}
|
||||
},
|
||||
async rejectMasterOrderWhenAccepted(order) {
|
||||
let res = await this.$request.rejectMasterOrderWhenAccepted({
|
||||
id: order.orderMasterId
|
||||
});
|
||||
if (res && res.code === 0) {
|
||||
this.reloadMasterOrderPage();
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '退单成功',
|
||||
duration: 1000
|
||||
})
|
||||
this.addOrderOperate({
|
||||
orderId: order.orderMasterId,
|
||||
orderType: '01',
|
||||
content: '师傅退单'
|
||||
rejectMasterOrderWhenAccepted(order) {
|
||||
if(order.orderDetailId == null && this.tabCur === 0) {
|
||||
// 到店服务主单退单的那个退单键。和商品有派安装单的时候退单的退单键
|
||||
if(order.goods.storeService) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: `1.你的订单属到店服务,整单退单请把所有派出子单退回后,让客户点“取消订单”键。\n2.如派出子单已完成结算支付则客户无法“取消订单”,且已完成订单的金额与分销金额无法系统退回。非客户责任的建议你线下退全款并完成订单(等于你承担无法退回的分销费用)!`,
|
||||
success: (res) => {
|
||||
|
||||
}
|
||||
})
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(order.masterWorkerId === order.workerId) {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: order.orderType == 1 ? '确认后订单回到你拣货/发货栏,你可重新派单或操作彻底退单' : '确认后订单回到你未约/未排栏,你可重新派单或操作彻底退单',
|
||||
success: async (res) => {
|
||||
if(res.confirm) {
|
||||
let res
|
||||
if(order.orderDetailId) {
|
||||
res = await this.$request.rejectDetailOrder({
|
||||
id: order.orderDetailId
|
||||
});
|
||||
} else {
|
||||
res = await this.$request.rejectMasterOrderWhenAccepted({
|
||||
id: order.orderMasterId
|
||||
});
|
||||
}
|
||||
if (res && res.code === 0) {
|
||||
this.reloadMasterOrderPage();
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '退单成功',
|
||||
duration: 1000
|
||||
})
|
||||
// this.addOrderOperate({
|
||||
// orderId: order.orderMasterId,
|
||||
// orderType: '01',
|
||||
// content: '师傅退单'
|
||||
// })
|
||||
} else {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: res.msg,
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: res.msg,
|
||||
duration: 2000
|
||||
const orderId = order.orderDetailId ? order.orderDetailId : order.orderMasterId
|
||||
const isDetailOrder = order.orderDetailId ? 1 : 0
|
||||
uni.navigateTo({
|
||||
url: '/pages/order-manage/cancel-order?orderId='+orderId+'&orderType=0&isDetailOrder='+isDetailOrder
|
||||
})
|
||||
}
|
||||
},
|
||||
|
|
@ -1506,6 +1782,67 @@
|
|||
this.tabCur = curTab;
|
||||
this.stateCur = null;
|
||||
this.reloadMasterOrderPage();
|
||||
},
|
||||
async serveringReturn(order) {
|
||||
const res = await this.$request.returnOrder({
|
||||
id: order.orderDetailId
|
||||
})
|
||||
if (res && res.code === 0) {
|
||||
uni.showToast({
|
||||
icon: 'success',
|
||||
title: '操作成功',
|
||||
duration: 1000
|
||||
})
|
||||
this.addOrderOperate({
|
||||
orderId: order.orderDetailId,
|
||||
orderType: '02',
|
||||
content: '提交退回'
|
||||
})
|
||||
} else {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '操作失败',
|
||||
duration: 1000
|
||||
})
|
||||
}
|
||||
},
|
||||
updateOrderWorkerRemark(order, index) {
|
||||
this.curOrder = order;
|
||||
this.curOrder.currentIndex = index;
|
||||
this.showEditWorkerRemark = true;
|
||||
this.$refs.editOrderRemarkPopup.open()
|
||||
},
|
||||
async updateOrderWorkerRemarkOpreation(input) {
|
||||
let reqFunName = "saveMasterWorkerRemark", id;
|
||||
if (this.curOrder.orderDetailId) {
|
||||
reqFunName = "updateDetailOrder";
|
||||
id = this.curOrder.orderDetailId;
|
||||
} else {
|
||||
id = this.curOrder.orderMasterId;
|
||||
}
|
||||
// 确定参数
|
||||
let params = {
|
||||
id: id,
|
||||
workerRemark: input
|
||||
}
|
||||
|
||||
let res = await this.$request[reqFunName](params);
|
||||
if (res.code === 0) {
|
||||
uni.showToast({
|
||||
icon: 'success',
|
||||
title: '操作成功',
|
||||
duration: 1000
|
||||
})
|
||||
const currentOrder = this.orderList[this.curOrder.currentIndex]
|
||||
currentOrder.workerRemark = input
|
||||
this.set(this.orderList, this.curOrder.currentIndex, currentOrder)
|
||||
} else {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '操作失败',
|
||||
duration: 1000
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1542,4 +1879,9 @@
|
|||
top: 25rpx;
|
||||
z-index: 99;
|
||||
}
|
||||
.order-name {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<!-- 顶部操作条 -->
|
||||
<cu-custom :bgColor="'bg-main-color'" :isBack="true">
|
||||
<block slot="backText">返回</block>
|
||||
<block slot="content">服务订单详情</block>
|
||||
<block slot="content">{{order.orderType === 0 ? '服务订单详情' : '商品订单详情'}}</block>
|
||||
</cu-custom>
|
||||
<!-- 任务进度跟踪 -->
|
||||
<view class="bg-white margin-lr-sm padding-lr padding-bottom margin-top-sm">
|
||||
|
|
@ -37,9 +37,10 @@
|
|||
<text class="text-xl margin-right">{{servDetail.goodsName}}</text>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 5">已完成</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 4">确认中</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 3">服务中</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 2">待上门</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 1">未约/未排</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 3">{{order.orderType === 0 ? '服务中' : '发货中'}}</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 2">{{order.orderType === 0 ? '待上门' : '待发货'}}</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 1">{{order.orderType === 0 ? '未约/未排' : '拣货/发货'}}</view>
|
||||
<view class='cu-tag bg-grey radius light margin-right-sm' v-if="servDetail.orderStatus === 6">已取消</view>
|
||||
</view>
|
||||
<!-- <view class="margin-top-sm">
|
||||
<view v-for="(item, index) in servDetail.mainServOrder.orderTag" class='cu-tag radius margin-right-sm'>
|
||||
|
|
@ -47,45 +48,60 @@
|
|||
</view> -->
|
||||
<view class="margin-top-sm">
|
||||
<text class="cuIcon-location text-main-color margin-right-xs"></text>
|
||||
<text><text class="labels">服务地址:</text>{{servDetail.address}}</text>
|
||||
<text><text class="labels">服务地址:</text>{{servDetail.provinceName + servDetail.cityName + servDetail.countryName + servDetail.streetName + servDetail.address}}</text>
|
||||
</view>
|
||||
<view class="margin-top-sm">
|
||||
<text class="cuIcon-people text-main-color margin-right-xs"></text>
|
||||
<text class="margin-right-sm"><text class="labels">客户:</text>{{servDetail.customerName}}</text>
|
||||
<text>{{servDetail.customerPhone.substring(0, 3) + "****" + servDetail.customerPhone.substring(7)}}</text>
|
||||
<button class="cu-btn line-main-color sm" @click="makeCustomerPhoneCall(servDetail)">拨打</button>
|
||||
<text v-if="servDetail.customerPhone">{{servDetail.customerPhone.substring(0, 3) + "****" + servDetail.customerPhone.substring(7)}}</text>
|
||||
<button class="cu-btn line-main-color sm" v-if="servDetail.orderStatus !== 1" @click="makeCustomerPhoneCall(servDetail)">拨打</button>
|
||||
</view>
|
||||
<view class="margin-top-sm" v-if="servDetail.orderDetailId">
|
||||
|
||||
<view class="margin-top-sm" v-if="servDetail.goodsOrderMasterId">
|
||||
<text class="cuIcon-friendfamous text-main-color margin-right-xs"></text>
|
||||
<text class="margin-right-sm"><text class="labels">派单公司:</text>{{servDetail.masterCompanyName}}</text>
|
||||
<text class="margin-right-xs">{{servDetail.masterCompanyPhone}}</text>
|
||||
<button class="cu-btn line-main-color sm" @click="makePhoneCall(servDetail.masterCompanyPhone)">拨打</button>
|
||||
</view>
|
||||
<view class="margin-top-sm" v-else-if="servDetail.orderDetailId">
|
||||
<text class="cuIcon-friendfamous text-main-color margin-right-xs"></text>
|
||||
<text class="margin-right-sm"><text class="labels">派单公司:</text>{{servDetail.masterCompanyName}}</text>
|
||||
<text class="margin-right-xs">{{servDetail.masterWorkerPhone}}</text>
|
||||
<button class="cu-btn line-main-color sm" @click="makePhoneCall(servDetail.masterWorkerPhone)">拨打</button>
|
||||
</view>
|
||||
<view class="margin-top-sm">
|
||||
<text class="cuIcon-time text-main-color margin-right-xs"></text>
|
||||
<text v-if="servDetail.expectTimeEndFront"><text class="labels">预约时间:</text>{{servDetail.expectTimeStartFront + '~' + servDetail.expectTimeEndFront}}</text>
|
||||
<text v-else><text class="labels">预约时间:</text>{{servDetail.expectTimeStartFront}}</text>
|
||||
</view>
|
||||
<!-- <view class="margin-top-sm">
|
||||
<text class="cuIcon-time text-main-color margin-right-xs"></text>
|
||||
<text>排单时间:{{servDetail.mainServOrder.boodTime}}</text>
|
||||
<!-- <view class="margin-top-sm" v-else-if="servDetail.masterCompanyName && servDetail.masterWorkerPhone">
|
||||
<text class="cuIcon-friendfamous text-main-color margin-right-xs"></text>
|
||||
<text class="margin-right-sm"><text class="labels">派单公司:</text>{{servDetail.masterCompanyName}}</text>
|
||||
<text class="margin-right-xs">{{servDetail.masterWorkerPhone}}</text>
|
||||
<button class="cu-btn line-main-color sm" @click="makePhoneCall(servDetail.masterWorkerPhone)">拨打</button>
|
||||
</view> -->
|
||||
<view class="margin-top-sm" v-if="servDetail.orderDetailId != null && servDetail.orderStatus >= 3">
|
||||
<text class="cuIcon-time text-main-color margin-right-xs"></text>
|
||||
<text><text class="labels">上门时间:</text>{{servDetail.workBeginTime}}</text>
|
||||
</view>
|
||||
<template v-if="order.orderType === 0">
|
||||
<view class="margin-top-sm">
|
||||
<text class="cuIcon-time text-main-color margin-right-xs"></text>
|
||||
<text v-if="servDetail.expectTimeEndFront"><text class="labels">预约时间:</text>{{servDetail.expectTimeStartFront + '~' + servDetail.expectTimeEndFront}}</text>
|
||||
<text v-else><text class="labels">预约时间:</text>{{servDetail.expectTimeStartFront}}</text>
|
||||
</view>
|
||||
<!-- <view class="margin-top-sm">
|
||||
<text class="cuIcon-time text-main-color margin-right-xs"></text>
|
||||
<text>排单时间:{{servDetail.mainServOrder.boodTime}}</text>
|
||||
</view> -->
|
||||
<view class="margin-top-sm" v-if="servDetail.orderDetailId != null && servDetail.orderStatus >= 3">
|
||||
<text class="cuIcon-time text-main-color margin-right-xs"></text>
|
||||
<text><text class="labels">上门时间:</text>{{servDetail.workBeginTime}}</text>
|
||||
</view>
|
||||
</template>
|
||||
<!-- <view class="margin-top-sm" v-if="servDetail.orderDetailId == null && servDetail.orderMode == '02'">
|
||||
<text class="cuIcon-moneybag text-main-color margin-right-xs"></text>
|
||||
<text>订单金额:</text>
|
||||
<text class="text-price">{{servDetail.totalMoney}}</text>
|
||||
</view> -->
|
||||
<view class="margin-top-sm" v-if="servDetail.customerRemark">
|
||||
<!-- <view class="margin-top-sm" v-if="servDetail.customerRemark">
|
||||
<text class="cuIcon-message text-main-color margin-right-xs"></text>
|
||||
<text><text class="labels">备注:</text>{{servDetail.customerRemark}}</text>
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="margin-top-sm">
|
||||
<text class="cuIcon-moneybag text-main-color margin-right-xs"></text>
|
||||
<text class="labels">服务金额:</text>
|
||||
<text class="labels">{{order.orderType === 0 ? '服务金额' : '货品金额'}}:</text>
|
||||
<text class="text-price" v-if="servDetail.orderDetailId != null">
|
||||
{{servDetail.payAddMoney}}
|
||||
<text v-if="servDetail.payType === 1 && servDetail.financialChangeRecords && servDetail.financialChangeRecords.length > 0">【订单加价,单独到账】</text>
|
||||
|
|
@ -93,7 +109,7 @@
|
|||
</text>
|
||||
<text class="text-price" v-else>{{servDetail.serverMoney}}</text>
|
||||
</view>
|
||||
<view class="text-sm text-gray margin-left-lg"
|
||||
<!-- <view class="text-sm text-gray margin-left-lg"
|
||||
v-if="servDetail.orderDetailId != null && servDetail.timeout == 1">
|
||||
<text>加减费用:<text class="text-price margin-top-xs">-3</text>
|
||||
[
|
||||
|
|
@ -107,8 +123,25 @@
|
|||
<view class="text-sm text-gray margin-left-lg" v-if="servDetail.orderDetailId != null && servDetail.financialChangeRecords != null"
|
||||
v-for="(item, index) in servDetail.financialChangeRecords" :key="index">
|
||||
<text v-if="item.payStatus === 1">加减费用:<text class="text-price margin-top-xs">+{{item.changeMoney}}</text>[订单加价]</text>
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
<!-- 下单备注 暂时注释, 客户说的不显示 -->
|
||||
<view v-if="servDetail.customerRemark || servDetail.orderImages" class="bg-white margin-lr-sm padding margin-top-sm">
|
||||
<view v-if="servDetail.orderImages">
|
||||
<view class="grid col-3 grid-square flex-sub">
|
||||
<view class="bg-img" v-for="imgUrl in servDetail.orderImages.split(',')" :key="imgUrl">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill">
|
||||
</image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view>订单备注: {{servDetail.customerRemark}}</view>
|
||||
</view>
|
||||
|
||||
|
||||
<!-- 待服务列 -->
|
||||
<view class="bg-white margin-lr-sm padding-lr padding-bottom margin-top-sm">
|
||||
<view class="cu-bar solid-bottom">
|
||||
|
|
@ -120,10 +153,114 @@
|
|||
<product-picked :product="servDetail" :pickedList="servDetail.standardList" :columnTitleArr="servingColumnHeaders" :valFieldArr="servingValFields"></product-picked>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 下单备注 -->
|
||||
<view v-if="servDetail.remark" class="bg-white margin-lr-sm padding margin-top-sm">
|
||||
<view>订单备注: {{servDetail.remark}}</view>
|
||||
|
||||
<view class="bg-white margin-lr-sm padding-lr margin-top-sm padding" v-if="servDetail.serviceShop">
|
||||
<template v-if="servDetail.goodsOrderMasterId && servDetail.masterWorkerName && servDetail.masterWorkerPhone && (servDetail.originalWorkerId == curUserInfo.workerId)">
|
||||
<view class="cu-bar solid-bottom">
|
||||
<view class="action bar-first-action">
|
||||
<text class="cuIcon-titles text-main-color"></text> 服务记录
|
||||
</view>
|
||||
<view>
|
||||
<view class="cu-btn sm bg-main-color margin-right-sm shadow-blur" v-if="[0,1,2,3].indexOf(servDetail.orderStatus) >= 0" @click="cancelMasterOrder(servDetail)">撤单</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 5">已完成</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 4">待确认</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 3">服务中</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 2">待上门</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 1">未约/未排</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 0">待接单</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="float-clear"></view>
|
||||
<view class="margin-top-sm">师傅:{{servDetail.masterWorkerName}}</view>
|
||||
<view class="margin-top-sm margin-bottom-lg">
|
||||
<text class="margin-right-xs">联系方式:{{servDetail.masterWorkerPhone}}</text>
|
||||
<button class="cu-btn line-main-color sm" @click="makePhoneCall(servDetail.masterWorkerPhone)">拨打</button>
|
||||
</view>
|
||||
</template>
|
||||
<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(servDetail.serviceShop)">
|
||||
<view style="width: 150rpx;height: 150rpx;margin-right:10px;">
|
||||
<image style="width: 100%;height: 100%;" :src="servDetail.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;">
|
||||
客户已选: {{servDetail.serviceShop.shopName}}
|
||||
</view>
|
||||
<view class="padding-tb-xs" style="position: relative;">
|
||||
<view class="margin-lr-sm" style="display: inline-block;" v-if="servDetail.serviceShop.distance">
|
||||
<view class="cu-tag bg-red" style="padding: 0 2px;height: auto;">距离客户</view>
|
||||
<text class="text-gray" style="vertical-align: middle;">{{servDetail.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;">{{servDetail.serviceShop.provinceName + servDetail.serviceShop.cityName + servDetail.serviceShop.countryName + servDetail.serviceShop.streetName + servDetail.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">店长:{{servDetail.serviceShop.phone}}</text>
|
||||
</view>
|
||||
<button class="cu-btn line-main-color" @click.stop="makePhoneCall(servDetail.serviceShop.phone)">拨打</button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="bg-white margin-lr-sm padding-lr margin-top-sm padding" v-else-if="servDetail.shop">
|
||||
<template v-if="servDetail.goodsOrderMasterId && (servDetail.originalWorkerId == curUserInfo.workerId)">
|
||||
<view class="cu-bar solid-bottom">
|
||||
<view class="action bar-first-action">
|
||||
<text class="cuIcon-titles text-main-color"></text> 服务记录
|
||||
</view>
|
||||
<view>
|
||||
<view class="cu-btn sm bg-main-color margin-right-sm shadow-blur" v-if="[0,1,2,3].indexOf(servDetail.orderStatus) >= 0" @click="cancelMasterOrder(servDetail)">撤单</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 5">已完成</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 4">待确认</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 3">服务中</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 2">待上门</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 1">未约/未排</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="servDetail.orderStatus === 0">待接单</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="float-clear"></view>
|
||||
<view class="margin-top-sm">师傅:{{servDetail.masterWorkerName}}</view>
|
||||
<view class="margin-top-sm margin-bottom-lg">
|
||||
<text class="margin-right-xs">联系方式:{{servDetail.masterWorkerPhone}}</text>
|
||||
<button class="cu-btn line-main-color sm" @click="makePhoneCall(servDetail.masterWorkerPhone)">拨打</button>
|
||||
</view>
|
||||
</template>
|
||||
<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(servDetail.shop)">
|
||||
<view style="width: 150rpx;height: 150rpx;margin-right:10px;">
|
||||
<image style="width: 100%;height: 100%;" :src="servDetail.shop.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;">
|
||||
客户已选: {{servDetail.shop.shopName}}
|
||||
</view>
|
||||
<view class="padding-tb-xs" style="position: relative;">
|
||||
<view class="margin-lr-sm" style="display: inline-block;" v-if="servDetail.shop.distance">
|
||||
<view class="cu-tag bg-red" style="padding: 0 2px;height: auto;">距离您</view>
|
||||
<text class="text-gray" style="vertical-align: middle;">{{servDetail.shop.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>{{servDetail.shop.provinceName + servDetail.shop.cityName + servDetail.shop.countryName + servDetail.shop.streetName + servDetail.shop.address}}</view>
|
||||
<view class="flex justify-between align-center margin-bottom-xs padding-top">
|
||||
<view>
|
||||
<text class="text-bold text-lg margin-lr-xs">店长:{{servDetail.shop.phone}}</text>
|
||||
</view>
|
||||
<button class="cu-btn line-main-color" @click.stop="makePhoneCall(servDetail.shop.phone)">拨打</button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
|
||||
<!-- 加价记录 子单详情展示 -->
|
||||
<view v-if="servDetail.orderDetailId != null && servDetail.financialChangeRecords && servDetail.financialChangeRecords.length > 0" class="bg-white margin-lr-sm padding-lr padding-bottom margin-top-sm">
|
||||
<view class="cu-bar solid-bottom">
|
||||
|
|
@ -131,14 +268,26 @@
|
|||
<text class="cuIcon-titles text-main-color"></text> 加价记录
|
||||
</view>
|
||||
</view>
|
||||
<view class="padding-tb-sm" v-for="(changeRecord, changeRecordIndex) in servDetail.financialChangeRecords" :key="changeRecordIndex">
|
||||
<view class="padding-tb-sm" v-for="addRecord in servDetail.financialChangeRecords" :key="addRecord.id">
|
||||
<view>
|
||||
<text>加价金额:</text>
|
||||
<text>{{changeRecord.changeMoney}}</text>
|
||||
<text>{{addRecord.changeMoney + (addRecord.attachmentMoney || 0)}}</text>
|
||||
</view>
|
||||
<view v-if="addRecord.reason && addRecord.reason.indexOf('含') > -1">
|
||||
<text>{{addRecord.reason.split('含')[1]}}:</text>
|
||||
<text>{{addRecord.changeMoney}}</text>
|
||||
</view>
|
||||
<view>
|
||||
<text>加价备注:</text>
|
||||
<text v-if="changeRecord.remark">{{changeRecord.remark}}</text>
|
||||
<text v-if="addRecord.remark">{{addRecord.remark}}</text>
|
||||
</view>
|
||||
<view v-if="addRecord.urls">
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm">
|
||||
<view class="bg-img" v-for="imgUrl in addRecord.urls.split(',')" :key="imgUrl">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill">
|
||||
</image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -165,7 +314,20 @@
|
|||
</view>
|
||||
</view>
|
||||
<view v-for="(afterServiceRecord, afterServiceRecordIndex) in servDetail.afterServiceRecordList" :key="afterServiceRecordIndex">
|
||||
<view v-if="afterServiceRecord.createBy == 1" class="padding-tb-sm solid-top">
|
||||
<afterServiceRecord
|
||||
v-if="order.orderType === 0"
|
||||
:after-service-record="afterServiceRecord"
|
||||
:order="order"
|
||||
:showActionBtn="false"
|
||||
></afterServiceRecord>
|
||||
<afterServiceRecordGoods
|
||||
v-else
|
||||
:after-service-record="afterServiceRecord"
|
||||
:order="order"
|
||||
:showActionBtn="false"
|
||||
@getDeliveryFlow="(trackingNumber) => {showDeliveryFlow = true; showDeliveryFlowTrackingNumber = trackingNumber;}"
|
||||
></afterServiceRecordGoods>
|
||||
<!-- <view v-if="afterServiceRecord.createBy == 1" class="padding-tb-sm solid-top">
|
||||
<view class='cu-tag bg-main-color radius light'>售后发起中</view>
|
||||
<view v-if="afterServiceRecord.operType === 1">
|
||||
<view class="text-gray text-sm margin-bottom-xs">退单退款已提交至商家,其最大时限24小时内需完成操作!</view>
|
||||
|
|
@ -182,17 +344,39 @@
|
|||
<text>退款金额:</text>
|
||||
<text>{{afterServiceRecord.refund}}</text>
|
||||
</view>
|
||||
<view v-if="order.orderType === 1">
|
||||
<text>售后类型:</text>
|
||||
<text v-if="afterServiceRecord.afterServiceType === 1">未收到货,我要退单退款!</text>
|
||||
<text v-else-if="afterServiceRecord.afterServiceType === 2">未收到货(发货在途),我要退款!</text>
|
||||
<text v-else-if="afterServiceRecord.afterServiceType === 3">已收到货,我要退款退货!</text>
|
||||
</view>
|
||||
<view>
|
||||
<text>退款原因:</text>
|
||||
<text v-if="afterServiceRecord.customerReasonType === 1">上门/服务不守时</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 2">态度不友好,无法继续</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 3">服务效果差,未达到合格</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 4">技能水平问题,未妥善完成</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 5">要求加费用,费用不合理</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 6">订单拖太久了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 7">超了些服务内容,师傅不接受</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 8">客户/我时间不方便了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 9">客户/我已让别的师傅服务了</text>
|
||||
<template v-if="order.orderType === 1">
|
||||
<text v-if="afterServiceRecord.customerReasonType === 1">不想要了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 2">买错型号尺寸了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 3">材质与商品描述不符</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 4">大小尺寸与商品描述不符</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 5">颜色、款式、型号与描述不符</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 6">出现质量问题</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 7">收到商品少件(少配件)</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 8">商家发错货</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 9">商品破损或污渍</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 10">未按承诺时间发货</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 11">未见快递/物流有信息</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 12">其它原因</text>
|
||||
</template>
|
||||
<template v-else>
|
||||
<text v-if="afterServiceRecord.customerReasonType === 1">上门/服务不守时</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 2">态度不友好,无法继续</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 3">服务效果差,未达到合格</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 4">技能水平问题,未妥善完成</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 5">要求加费用,费用不合理</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 6">订单拖太久了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 7">超了些服务内容,师傅不接受</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 8">客户/我时间不方便了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 9">客户/我已让别的师傅服务了</text>
|
||||
</template>
|
||||
</view>
|
||||
<view>
|
||||
<text>具体原因:</text>
|
||||
|
|
@ -220,17 +404,39 @@
|
|||
:second="$dateUtil.countDownDiff($dateUtil.addHours(afterServiceRecord.createTime, 24)).seconds">
|
||||
</uni-countdown>
|
||||
</view>
|
||||
<view v-if="order.orderType === 1">
|
||||
<text>售后类型:</text>
|
||||
<text v-if="afterServiceRecord.afterServiceType === 1">未收到货,我要退单退款!</text>
|
||||
<text v-else-if="afterServiceRecord.afterServiceType === 2">未收到货(发货在途),我要退款!</text>
|
||||
<text v-else-if="afterServiceRecord.afterServiceType === 3">已收到货,我要退款退货!</text>
|
||||
</view>
|
||||
<view>
|
||||
<text>售后原因:</text>
|
||||
<text v-if="afterServiceRecord.customerReasonType === 1">上门/服务不守时</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 2">态度不友好,无法继续</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 3">服务效果差,未达到合格</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 4">技能水平问题,未妥善完成</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 5">要求加费用,费用不合理</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 6">订单拖太久了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 7">超了些服务内容,师傅不接受</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 8">客户/我时间不方便了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 9">客户/我已让别的师傅服务了</text>
|
||||
<text>退款原因:</text>
|
||||
<template v-if="order.orderType === 1">
|
||||
<text v-if="afterServiceRecord.customerReasonType === 1">不想要了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 2">买错型号尺寸了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 3">材质与商品描述不符</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 4">大小尺寸与商品描述不符</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 5">颜色、款式、型号与描述不符</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 6">出现质量问题</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 7">收到商品少件(少配件)</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 8">商家发错货</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 9">商品破损或污渍</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 10">未按承诺时间发货</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 11">未见快递/物流有信息</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 12">其它原因</text>
|
||||
</template>
|
||||
<template v-else>
|
||||
<text v-if="afterServiceRecord.customerReasonType === 1">上门/服务不守时</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 2">态度不友好,无法继续</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 3">服务效果差,未达到合格</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 4">技能水平问题,未妥善完成</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 5">要求加费用,费用不合理</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 6">订单拖太久了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 7">超了些服务内容,师傅不接受</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 8">客户/我时间不方便了</text>
|
||||
<text v-else-if="afterServiceRecord.customerReasonType === 9">客户/我已让别的师傅服务了</text>
|
||||
</template>
|
||||
</view>
|
||||
<view>
|
||||
<text>具体原因:</text>
|
||||
|
|
@ -302,36 +508,51 @@
|
|||
<view class='cu-tag bg-main-color radius light'>客户最终确认</view>
|
||||
<view class="margin-top-xs">{{afterServiceRecord.customerFinalCheck === 1 ? '同意' : '不同意'}}
|
||||
</view>
|
||||
<view class="text-red" v-if="afterServiceRecord.customerFinalCheck === 0">订单交由平台协商处理</view>
|
||||
<view v-else-if="afterServiceRecord.customerFinalCheck === 1">
|
||||
<view v-if="afterServiceRecord.originalRefund > 0">
|
||||
<view>
|
||||
<text>本单退款,系统已发起按客户支付的帐户原路退回</text>
|
||||
<text class="text-red">{{afterServiceRecord.originalRefund}}</text>
|
||||
<text>元,银行按工作日退款,节假日顺延到帐。遇客户问询,请其耐心等待,到账时会在客户端”客户最终确认“处有到账时间。</text>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck === 0">
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm" v-if="afterServiceRecord.customerDisagreeImages">
|
||||
<view class="bg-img" v-for="imgUrl in afterServiceRecord.customerDisagreeImages.split(',')" :key="imgUrl">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
<view>退款支付到账:{{afterServiceRecord.refundApplyTime}}</view>
|
||||
</view>
|
||||
<view v-else-if="afterServiceRecord.originalRefund == 0 && servDetail.payStatus == 0">
|
||||
<text>本单未支付,实际退回0.00元</text>
|
||||
<view class="margin-bottom-xs" v-if="afterServiceRecord.customerDisagreeReason">
|
||||
<text>不同意理由:{{afterServiceRecord.customerDisagreeReason}}</text>
|
||||
</view>
|
||||
<view class="text-red" v-if="afterServiceRecord.customerFinalCheck === 0">订单交由平台协商处理</view>
|
||||
</view>
|
||||
<view v-else-if="afterServiceRecord.customerFinalCheck === 1">
|
||||
<template v-if="afterServiceRecord.workerFeedbackResult !== 0">
|
||||
<view v-if="(afterServiceRecord.agreedRefund > 0 || afterServiceRecord.originalRefund > 0) && order.payStatus == 1">
|
||||
<view>
|
||||
<text>本单退款,系统已发起按客户支付的帐户原路退回</text>
|
||||
<text class="text-red">{{afterServiceRecord.agreedRefund || afterServiceRecord.originalRefund}}</text>
|
||||
<text>元,银行按工作日退款,节假日顺延到帐。遇客户问询,请其耐心等待,到账时会在客户端”客户最终确认“处有到账时间。</text>
|
||||
</view>
|
||||
<view>退款支付到账:{{afterServiceRecord.refundApplyTime}}</view>
|
||||
</view>
|
||||
<view v-else-if="order.payStatus == 0">
|
||||
<text>本单已退款{{afterServiceRecord.agreedRefund}}元,因未实际支付,实退为0元。未退部分继续完成订单及正常支付!</text>
|
||||
</view>
|
||||
</template>
|
||||
<view v-else>
|
||||
<text>本次售后已操作完毕,售后申请已结束!</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
<!-- 完成记录 主单详情展示 -->
|
||||
<view v-if="servDetail.orderDetailId == null" class="bg-white margin-lr-sm padding-lr padding-bottom margin-top-sm" v-for="(item, index) in servDetail.orderStandardDetailList" :key="index">
|
||||
<view v-if="servDetail.orderDetailId == null && (servDetail.originalWorkerId != curUserInfo.workerId)" class="bg-white margin-lr-sm padding-lr padding-bottom margin-top-sm" v-for="(item, index) in servDetail.orderStandardDetailList" :key="index">
|
||||
<view class="cu-bar solid-bottom">
|
||||
<view class="action bar-first-action">
|
||||
<text class="cuIcon-titles text-main-color"></text> 服务记录
|
||||
<text class="cuIcon-titles text-main-color"></text> {{order.orderType === 0 ? '服务记录' : '发货记录'}}
|
||||
</view>
|
||||
<view>
|
||||
<view class="cu-btn sm bg-main-color margin-right-sm shadow-blur" v-if="[0,1,2,3].indexOf(item.orderStatus) >= 0" @click="rejectDetailOrder(item)">撤单</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="item.orderStatus === 5">已完成</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="item.orderStatus === 4">待确认</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="item.orderStatus === 3">服务中</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="item.orderStatus === 2">待上门</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="item.orderStatus === 1">未约/未排</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="item.orderStatus === 3">{{servDetail.orderType === 0 ? '服务中' : '发货中'}}</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="item.orderStatus === 2">{{servDetail.orderType === 0 ? '待上门' : '待发货'}}</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="item.orderStatus === 1">{{servDetail.orderType === 0 ? '未约/未排' : '拣货/发货'}}</view>
|
||||
<view class='cu-tag bg-purple radius light margin-right-sm' v-if="item.orderStatus === 0">待接单</view>
|
||||
</view>
|
||||
<!-- <view class='cu-tag bg-purple radius light margin-right-sm' v-if="item.orderStatus > 3">{{item.workFinishTime}}</view> -->
|
||||
|
|
@ -342,14 +563,24 @@
|
|||
<view v-if="afterServiceRecord.workerFeedbackResult == 1 && afterServiceRecord.customerFinalCheck == null" class='cu-tag margin-right-xs radius line-main-color margin-top-xs'>售后已同意</view>
|
||||
<view v-if="afterServiceRecord.workerFeedbackResult == 0 && afterServiceRecord.customerFinalCheck == null" class='cu-tag margin-right-xs radius line-red margin-top-xs'>售后已拒绝</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck == 0" class='cu-tag margin-right-xs radius line-red margin-top-xs'>售后纠纷中</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck == 1" class='cu-tag margin-right-xs radius line-main-color margin-top-xs'>售后已完成</view>
|
||||
</view>
|
||||
<view v-if="item.timeout == 1" class="float-left">
|
||||
<view v-if="item.orderStatus === 0" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未接单</view>
|
||||
<view v-else-if="item.orderStatus === 1" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未预约</view>
|
||||
<view v-else-if="item.orderStatus === 2" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未上门</view>
|
||||
<view v-else-if="item.orderStatus === 3" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未完单</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck == 1 || afterServiceRecord.customerFinalCheck == 2" class='cu-tag margin-right-xs radius line-main-color margin-top-xs'>售后已完成</view>
|
||||
</view>
|
||||
<template v-if="item.timeout == 1">
|
||||
<view class="float-left" v-if="order.orderType === 0">
|
||||
<view v-if="item.orderStatus === 0" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未接单</view>
|
||||
<view v-else-if="order.orderStatus === 1 && order.isCall === '01'" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未预约</view>
|
||||
<view v-else-if="order.orderStatus === 1 && order.isCall === '02'" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未排单</view>
|
||||
<view v-else-if="order.orderStatus === 1 && order.orderDetailId != null" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未预约</view>
|
||||
<view v-else-if="item.orderStatus === 2" class='cu-tag margin-right-xs radius line-red margin-top-xs'>{{order.orderType === 0 ? '超时未上门' : '超时未发货'}}</view>
|
||||
<view v-else-if="item.orderStatus === 3 && order.orderType === 0" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未完单</view>
|
||||
</view>
|
||||
<view v-else class="float-left">
|
||||
<view v-if="order.orderStatus === 0" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未接单</view>
|
||||
<view v-else-if="order.orderStatus === 1" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未发货</view>
|
||||
<view v-else-if="order.orderStatus === 2" class='cu-tag margin-right-xs radius line-red margin-top-xs'>超时未发货</view>
|
||||
</view>
|
||||
</template>
|
||||
<view v-if="item.afterTimeout == 1" class='cu-tag margin-right-xs radius line-red margin-top-xs'>售后超时</view>
|
||||
</view>
|
||||
<view class="float-clear"></view>
|
||||
<view class="margin-top-sm">师傅:{{item.workerName}}</view>
|
||||
|
|
@ -361,9 +592,9 @@
|
|||
服务金额:
|
||||
<text class="text-price">{{item.payMoney}}</text>
|
||||
</view>
|
||||
<view class="margin-top-sm" v-if="item.expectTimeEndFront">预约时间:{{item.expectTimeStartFront + '~' + item.expectTimeEndFront}}</view>
|
||||
<view class="margin-top-sm" v-if="item.expectTimeEndFront">预约时间:{{item.expectTimeStartFront}}</view>
|
||||
<view class="margin-top-sm" v-else>预约时间:{{item.expectTimeStartFront}}</view>
|
||||
<view class="margin-top-sm" v-if="item.orderStatus >= 3">上门时间:{{item.workBeginTime}}</view>
|
||||
<view class="margin-top-sm" v-if="item.orderStatus >= 3">{{order.orderType === 1 ? '发货时间' : '上门时间'}}:{{item.workBeginTime}}</view>
|
||||
<view class="margin-top-sm" v-if="item.orderStatus >= 4">完成时间:{{item.workFinishTime}}</view>
|
||||
<view class="margin-top-sm">
|
||||
<product-picked :pickedList="item.orderStandardList" :columnTitleArr="servedColumnHeaders" :valFieldArr="servedValFields"></product-picked>
|
||||
|
|
@ -377,12 +608,24 @@
|
|||
<view class="padding-tb-sm" v-for="(changeRecord, changeRecordIndex) in item.financialChangeRecord" :key="changeRecordIndex">
|
||||
<view>
|
||||
<text>加价金额:</text>
|
||||
<text>{{changeRecord.changeMoney + (changeRecord.attachmentMoney || 0)}}</text>
|
||||
</view>
|
||||
<view v-if="changeRecord.reason && changeRecord.reason.indexOf('含') > -1">
|
||||
<text>{{changeRecord.reason.split('含')[1]}}:</text>
|
||||
<text>{{changeRecord.changeMoney}}</text>
|
||||
</view>
|
||||
<view>
|
||||
<text>加价备注:</text>
|
||||
<text v-if="changeRecord.remark">{{changeRecord.remark}}</text>
|
||||
</view>
|
||||
<view v-if="changeRecord.urls">
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm">
|
||||
<view class="bg-img" v-for="imgUrl in changeRecord.urls.split(',')" :key="imgUrl">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill">
|
||||
</image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="servDetail.orderStatus > 3 && item.finishImgList && item.finishImgList.length" class="bg-white">
|
||||
|
|
@ -409,7 +652,15 @@
|
|||
</view>
|
||||
</view>
|
||||
<view v-for="(afterServiceRecord, afterServiceRecordIndex) in item.afterServiceRecordList" :key="afterServiceRecordIndex">
|
||||
<view v-if="afterServiceRecord.createBy == 1" class="padding-tb-sm solid-top">
|
||||
<afterServiceRecord v-if="order.orderType === 0" :after-service-record="afterServiceRecord" :order="item" :showActionBtn="false"></afterServiceRecord>
|
||||
<afterServiceRecordGoods
|
||||
v-else
|
||||
:after-service-record="afterServiceRecord"
|
||||
:order="item"
|
||||
:showActionBtn="false"
|
||||
@getDeliveryFlow="(trackingNumber) => {showDeliveryFlow = true; showDeliveryFlowTrackingNumber = trackingNumber;}"
|
||||
></afterServiceRecordGoods>
|
||||
<!-- <view v-if="afterServiceRecord.createBy == 1" class="padding-tb-sm solid-top">
|
||||
<view class='cu-tag bg-main-color radius light'>售后发起中</view>
|
||||
<view v-if="afterServiceRecord.operType === 1">
|
||||
<view class="text-gray text-sm margin-bottom-xs">退单退款已提交至商家,其最大时限24小时内需完成操作!</view>
|
||||
|
|
@ -544,30 +795,84 @@
|
|||
</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck != null" class="padding-tb-sm solid-top">
|
||||
<view class='cu-tag bg-main-color radius light'>客户最终确认</view>
|
||||
<view class="margin-top-xs">{{afterServiceRecord.customerFinalCheck === 1 ? '同意' : '不同意'}}
|
||||
</view>
|
||||
<view class="text-red" v-if="afterServiceRecord.customerFinalCheck === 0">订单交由平台协商处理</view>
|
||||
<view v-else-if="afterServiceRecord.customerFinalCheck === 1">
|
||||
<view v-if="afterServiceRecord.originalRefund > 0">
|
||||
<view>
|
||||
<text>本单退款,系统已发起按客户支付的帐户原路退回</text>
|
||||
<text class="text-red">{{afterServiceRecord.originalRefund}}</text>
|
||||
<text>元,银行按工作日退款,节假日顺延到帐。遇客户问询,请其耐心等待,到账时会在客户端”客户最终确认“处有到账时间。</text>
|
||||
<view class="margin-top-xs">{{afterServiceRecord.customerFinalCheck === 1 ? '同意' : '不同意'}}</view>
|
||||
<view v-if="afterServiceRecord.customerFinalCheck === 0">
|
||||
<view class="grid col-3 grid-square flex-sub margin-top-sm" v-if="afterServiceRecord.customerDisagreeImages">
|
||||
<view class="bg-img" v-for="imgUrl in afterServiceRecord.customerDisagreeImages.split(',')" :key="imgUrl">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill"></image>
|
||||
</view>
|
||||
<view>退款支付到账:{{afterServiceRecord.refundApplyTime}}</view>
|
||||
</view>
|
||||
<view v-else-if="afterServiceRecord.originalRefund == 0 && servDetail.payStatus == 0">
|
||||
<text>本单未支付,实际退回0.00元</text>
|
||||
<view class="margin-bottom-xs" v-if="afterServiceRecord.customerDisagreeReason">
|
||||
<text>不同意理由:{{afterServiceRecord.customerDisagreeReason}}</text>
|
||||
</view>
|
||||
<view class="text-red" v-if="afterServiceRecord.customerFinalCheck === 0">订单交由平台协商处理</view>
|
||||
</view>
|
||||
|
||||
<view v-if="afterServiceRecord.customerFinalCheck === 1">
|
||||
<template v-if="afterServiceRecord.workerFeedbackResult !== 0">
|
||||
<view v-if="(afterServiceRecord.agreedRefund > 0 || afterServiceRecord.originalRefund > 0) && order.payStatus == 1">
|
||||
<view>
|
||||
<text>本单退款,系统已发起按客户支付的帐户原路退回</text>
|
||||
<text class="text-red">{{afterServiceRecord.agreedRefund || afterServiceRecord.originalRefund}}</text>
|
||||
<text>元,银行按工作日退款,节假日顺延到帐。遇客户问询,请其耐心等待,到账时会在客户端”客户最终确认“处有到账时间。</text>
|
||||
</view>
|
||||
<view>退款支付到账:{{afterServiceRecord.refundApplyTime}}</view>
|
||||
</view>
|
||||
<view v-else-if="order.payStatus == 0">
|
||||
<text>本单已退款{{afterServiceRecord.agreedRefund}}元,因未实际支付,实退为0元。未退部分继续完成订单及正常支付!</text>
|
||||
</view>
|
||||
</template>
|
||||
<view v-else>
|
||||
<text>本次售后已操作完毕,售后申请已结束!</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 发货信息 -->
|
||||
<view class="bg-white margin-top-sm padding margin-lr-sm" v-if="servDetail.deliveryType">
|
||||
<view v-if="servDetail.deliveryType">
|
||||
发货方式:
|
||||
<text v-if="servDetail.deliveryType == 1">发快递/物流</text>
|
||||
<text v-if="servDetail.deliveryType == 2">送货上门</text>
|
||||
<text v-if="servDetail.deliveryType == 3">客户自提</text>
|
||||
</view>
|
||||
<view class="margin-top-xs" v-if="servDetail.deliveryImages">
|
||||
<view class="grid col-3 grid-square flex-sub">
|
||||
<view class="bg-img" v-for="imgUrl in servDetail.deliveryImages.split(',')" :key="imgUrl">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill">
|
||||
</image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="margin-top-xs" v-if="servDetail.deliveryRemark"><text>发货备注:{{servDetail.deliveryRemark}}</text></view>
|
||||
<view class="margin-top-xs" v-if="servDetail.trackingNumber">
|
||||
<text>快递单号:{{servDetail.trackingNumber}}</text>
|
||||
<text class="text-main-color margin-left-sm" @click="getDeliveryFlow(servDetail.trackingNumber)">查询</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 交货记录 -->
|
||||
<view class="bg-white margin-top-sm padding margin-lr-sm" v-if="servDetail.handoverRemark || servDetail.handoverImages">
|
||||
<view>交货记录</view>
|
||||
<view class="margin-top-xs" v-if="servDetail.handoverImages">
|
||||
<view class="grid col-3 grid-square flex-sub">
|
||||
<view class="bg-img" v-for="imgUrl in servDetail.handoverImages.split(',')" :key="imgUrl">
|
||||
<image :src="imgUrl" @tap="viewImage($event, [imgUrl])" :data-url="imgUrl" mode="aspectFill">
|
||||
</image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="margin-top-xs" v-if="servDetail.deliveryRemark"><text>交货备注:{{servDetail.handoverRemark}}</text></view>
|
||||
</view>
|
||||
|
||||
<!-- 订单编码和时间 -->
|
||||
<view class="bg-white margin-top-sm padding margin-lr-sm">
|
||||
<view v-if="servDetail.orderDetailCode != null">订单编码:{{servDetail.orderDetailCode}}</view>
|
||||
<view v-else>订单编码:{{servDetail.orderMasterCode}}</view>
|
||||
<view class="margin-top-xs" v-if="servDetail.originalOrderMasterCode">原订单编码:{{servDetail.originalOrderMasterCode}}</view>
|
||||
<view class="margin-top-xs">订单时间:{{servDetail.createTime}}</view>
|
||||
</view>
|
||||
<view class="occupancy-bottom-bar"></view>
|
||||
|
|
@ -576,7 +881,7 @@
|
|||
<view class="action" data-popup="orderManage" @click="togglePopup">
|
||||
<view class="cuIcon-list"></view> 订单管理
|
||||
</view>
|
||||
<view v-if="servDetail.orderDetailId != null && servDetail.orderStatus === 2" class="bg-main-color submit" @click="workBegin">立即上门</view>
|
||||
<view v-if="servDetail.orderDetailId != null && servDetail.orderStatus === 2" class="bg-main-color submit" @click="workBegin">{{order.orderType === 0 ? (servDetail.goods.storeService ? '立即服务' : '立即上门') : '立即发货'}}</view>
|
||||
</view>
|
||||
<!-- <view class="cu-bar bg-white tabbar border fixed-bottom-bar" v-if="servDetail.orderDetailId != null && servDetail.orderStatus === 2">
|
||||
<view class="action" data-popup="orderManage" @click="togglePopup">
|
||||
|
|
@ -605,27 +910,43 @@
|
|||
</uni-popup>
|
||||
<!-- 模态框 -->
|
||||
<urgent-msg :show="sendUrgentMsgModal" @hideModal="hideModal"></urgent-msg>
|
||||
<apply-extra-charge v-if="applyExtraChargeModal" :show="applyExtraChargeModal" :data="servDetail" @close="applyExtraChargeClose"></apply-extra-charge>
|
||||
<apply-charge v-if="applyChargeModal" :show="applyChargeModal" :data="servDetail" @close="applyChargeClose"></apply-charge>
|
||||
<!-- <apply-extra-charge v-if="applyExtraChargeModal" :show="applyExtraChargeModal" :data="servDetail" @close="applyExtraChargeClose"></apply-extra-charge> -->
|
||||
<apply-charge v-if="applyChargeModal" ref="applyChargeModal" :show="applyChargeModal" :data="servDetail" @close="applyChargeClose" @callAgain="callApplyChargeAgain"></apply-charge>
|
||||
|
||||
<task-process-detail :show="taskProcessDetail" :arr="taskListArr" @close="taskDetailClose"></task-process-detail>
|
||||
|
||||
<deliveryFlowDetail :show="showDeliveryFlow" :trackingNumber="showDeliveryFlowTrackingNumber" @close="showDeliveryFlow = false"></deliveryFlowDetail>
|
||||
|
||||
<deliverGoods v-if="showDeliverGoods" :show="showDeliverGoods" :data="servDetail" @close="showDeliverGoods = false" @confirmFeedback="showDeliverGoods = false;loadData()"></deliverGoods>
|
||||
|
||||
<on-door-immediately v-if="showOnDoorNoticeModal" :show="showOnDoorNoticeModal" :data="servDetail" @close="showOnDoorNoticeModal = false" @confirmFeedback="showOnDoorNoticeModal = false;loadData()"></on-door-immediately>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import productPicked from '@/components/goods-card/product-picked.vue';
|
||||
import urgentMsg from '@/pages/order-manage/modal/urgent-msg.vue';
|
||||
import applyExtraCharge from '@/pages/order-manage/modal/apply-extra-charge.vue';
|
||||
// import applyExtraCharge from '@/pages/order-manage/modal/apply-extra-charge.vue';
|
||||
import applyCharge from '@/pages/order-manage/modal/apply-charge.vue';
|
||||
import taskProcessDetail from '@/pages/order-manage/modal/task_process_detail.vue'
|
||||
import deliveryFlowDetail from '@/pages/order-manage/modal/delivery_flow_detail.vue';
|
||||
import deliverGoods from '@/pages/order-manage/modal/deliver-goods.vue';
|
||||
import onDoorImmediately from '@/pages/order-manage/modal/on-door-immediately.vue';
|
||||
import afterServiceRecord from './components/afterServiceRecord.vue';
|
||||
import afterServiceRecordGoods from './components/afterServiceRecordGoods.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
productPicked,
|
||||
urgentMsg,
|
||||
applyExtraCharge,
|
||||
// applyExtraCharge,
|
||||
taskProcessDetail,
|
||||
applyCharge
|
||||
applyCharge,
|
||||
deliveryFlowDetail,
|
||||
deliverGoods,
|
||||
onDoorImmediately,
|
||||
afterServiceRecord,
|
||||
afterServiceRecordGoods
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -643,11 +964,11 @@
|
|||
// name: '申请配件',
|
||||
// action: 'applyFittings'
|
||||
// },
|
||||
{
|
||||
name: '申请附加费',
|
||||
action: 'applyExtraCharge',
|
||||
modal: 'applyExtraChargeModal'
|
||||
},
|
||||
// {
|
||||
// name: '申请附加费',
|
||||
// action: 'applyExtraCharge',
|
||||
// modal: 'applyExtraChargeModal'
|
||||
// },
|
||||
{
|
||||
name: '申请费用',
|
||||
action: 'applyCharge',
|
||||
|
|
@ -671,7 +992,12 @@
|
|||
applyExtraChargeModal: false,
|
||||
taskProcessDetail: false,
|
||||
taskListArr: [],
|
||||
applyChargeModal: false
|
||||
applyChargeModal: false,
|
||||
showDeliveryFlow: false,
|
||||
showDeliverGoods: false,
|
||||
showOnDoorNoticeModal: false,
|
||||
curUserInfo: null,
|
||||
showDeliveryFlowTrackingNumber: ''
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
|
|
@ -679,12 +1005,31 @@
|
|||
if (options && options.order) {
|
||||
this.order = JSON.parse(decodeURIComponent(options.order));
|
||||
}
|
||||
console.log(this.order);
|
||||
if(this.order.orderType === 1) {
|
||||
this.servingColumnHeaders = ['购买型号', '购买量', '待发货']
|
||||
this.servedColumnHeaders = ['购买型号', '购买量', '已发货']
|
||||
}
|
||||
this.curUserInfo = this.$request.getCurUserInfo();
|
||||
this.loadData();
|
||||
},
|
||||
onUnload() {
|
||||
this.offBindEvent();
|
||||
},
|
||||
methods: {
|
||||
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}`
|
||||
})
|
||||
},
|
||||
// 显示任务详情进度框
|
||||
showTaskDetailMdl() {
|
||||
this.taskProcessDetail = true
|
||||
|
|
@ -714,6 +1059,7 @@
|
|||
let servDetailRes = await this.$request[funName]({
|
||||
id: orderId
|
||||
});
|
||||
servDetailRes.data.orderType = this.order.orderType;
|
||||
this.servDetail = servDetailRes.data;
|
||||
this.getProcessData()
|
||||
},
|
||||
|
|
@ -741,15 +1087,25 @@
|
|||
applyFittings() {
|
||||
console.log("申请配件")
|
||||
},
|
||||
applyExtraCharge() {
|
||||
console.log("申请charge")
|
||||
this.applyExtraChargeModal = true;
|
||||
},
|
||||
applyExtraChargeClose() {
|
||||
this.applyExtraChargeModal = false;
|
||||
},
|
||||
// applyExtraCharge() {
|
||||
// console.log("申请charge")
|
||||
// this.applyExtraChargeModal = true;
|
||||
// },
|
||||
// applyExtraChargeClose() {
|
||||
// this.applyExtraChargeModal = false;
|
||||
// },
|
||||
applyCharge() {
|
||||
this.applyChargeModal = true;
|
||||
console.log('resetPriceChangedInfo');
|
||||
this.$nextTick(() => {
|
||||
this.$refs.applyChargeModal.initPriceData()
|
||||
})
|
||||
},
|
||||
async callApplyChargeAgain() {
|
||||
await this.loadData();
|
||||
this.$nextTick(() => {
|
||||
this.$refs.applyChargeModal.initPriceData()
|
||||
})
|
||||
},
|
||||
applyChargeClose() {
|
||||
this.applyChargeModal = false;
|
||||
|
|
@ -764,20 +1120,25 @@
|
|||
})
|
||||
},
|
||||
async workBegin() {
|
||||
let curDate = new Date();
|
||||
let formatCurDate = curDate.getFullYear() + '-' + (curDate.getMonth() + 1) + '-' + curDate.getDate()
|
||||
+ ' ' + curDate.getHours() + ':' + curDate.getMinutes() + ':' + curDate.getSeconds();
|
||||
let params = {
|
||||
id: this.servDetail.orderDetailId,
|
||||
orderStatus: 3,
|
||||
workBeginTime: formatCurDate
|
||||
}
|
||||
let res = await this.$request.updateDetailOrder(params);
|
||||
if (res && res.code === 0) {
|
||||
this.loadData(this.servDetail.orderDetailId);
|
||||
uni.showToast({
|
||||
icon: 'success'
|
||||
})
|
||||
if(this.order.orderType === 1) {
|
||||
this.showDeliverGoods = true
|
||||
} else {
|
||||
this.showOnDoorNoticeModal = true
|
||||
// let curDate = new Date();
|
||||
// let formatCurDate = curDate.getFullYear() + '-' + (curDate.getMonth() + 1) + '-' + curDate.getDate()
|
||||
// + ' ' + curDate.getHours() + ':' + curDate.getMinutes() + ':' + curDate.getSeconds();
|
||||
// let params = {
|
||||
// id: this.servDetail.orderDetailId,
|
||||
// orderStatus: 3,
|
||||
// workBeginTime: formatCurDate
|
||||
// }
|
||||
// let res = await this.$request.updateDetailOrder(params);
|
||||
// if (res && res.code === 0) {
|
||||
// this.loadData(this.servDetail.orderDetailId);
|
||||
// uni.showToast({
|
||||
// icon: 'success'
|
||||
// })
|
||||
// }
|
||||
}
|
||||
},
|
||||
showModal(e) {
|
||||
|
|
@ -814,6 +1175,11 @@
|
|||
phoneNumber: phoneNum
|
||||
})
|
||||
},
|
||||
copyData(data) {
|
||||
uni.setClipboardData({
|
||||
data: data
|
||||
});
|
||||
},
|
||||
async rejectDetailOrder(order) {
|
||||
let res = await this.$request.rejectDetailOrder({
|
||||
id: order.orderDetailId
|
||||
|
|
@ -832,6 +1198,32 @@
|
|||
})
|
||||
}
|
||||
},
|
||||
async cancelMasterOrder(order) {
|
||||
let res = await this.$request.rejectMasterOrderWhenAccepted({
|
||||
id: order.orderMasterId
|
||||
});
|
||||
if (res && res.code === 0) {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '撤单成功,请回商品订单管理处理或重派。',
|
||||
duration: 2000
|
||||
})
|
||||
setTimeout(() => {
|
||||
uni.navigateBack()
|
||||
}, 3000)
|
||||
} else {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: res.msg,
|
||||
duration: 2000
|
||||
})
|
||||
}
|
||||
},
|
||||
// 获取物流信息
|
||||
getDeliveryFlow(TrackingNumber) {
|
||||
this.showDeliveryFlow = true;
|
||||
this.showDeliveryFlowTrackingNumber = TrackingNumber;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 470 B |
|
|
@ -236,7 +236,7 @@
|
|||
position: absolute;
|
||||
border-radius: 4px;
|
||||
font-size: 12px;
|
||||
padding: 10px;
|
||||
padding: 5px 3px;
|
||||
min-width: 10px;
|
||||
word-wrap: break-word;
|
||||
display: inline-block;
|
||||
|
|
|
|||
Loading…
Reference in New Issue