From 8f85c863a6e70dc007e2af6e95b073fdf8be15f8 Mon Sep 17 00:00:00 2001
From: wangfukang <15630117759@163.com>
Date: Mon, 13 Apr 2026 15:37:24 +0800
Subject: [PATCH] 1
---
package1/buyFood/buyFood.vue | 25 +-
package1/index/deliveryPersonList.vue | 4 +-
package1/myCenter/partTimeJobRegister.vue | 1 -
package1/order/orderDetail.vue | 56 +-
package1/order/orderList.vue | 19 +-
package1/runErrand/runErrand.vue | 881 +++++++++++++++++-----
6 files changed, 757 insertions(+), 229 deletions(-)
diff --git a/package1/buyFood/buyFood.vue b/package1/buyFood/buyFood.vue
index f0b9e8c..b1a678d 100644
--- a/package1/buyFood/buyFood.vue
+++ b/package1/buyFood/buyFood.vue
@@ -126,6 +126,11 @@
+
+
+
+ 因您的收货楼层在3楼以上,将额外收取配送费 ¥{{highFloorFeeCalc}}
+
@@ -452,6 +457,15 @@
return this.cartItems.reduce((acc, curr) => acc + (curr.quantity * parseFloat(curr.price)), 0);
}
},
+ highFloorFeeCalc() {
+ if (this.selected === 'zhiding' && this.assignedWorker) {
+ let hFee = parseFloat(this.assignedWorker.highFloorFee || 0);
+ if (hFee > 0 && this.formData.address && parseInt(this.formData.address.floor) > 3) {
+ return hFee;
+ }
+ }
+ return 0;
+ },
packageFee() {
if (this.totalPackageFee > 0) return this.totalPackageFee;
let fee = 0;
@@ -486,12 +500,12 @@
let members = parseInt(this.groupItem.groupRule.groupCount) || 1;
if (this.selected === 'zhiding') {
let extra = members > 2 ? (members - 2) * 0.5 : 0;
- return Math.ceil(((commission + extra) / members) * 100) / 100;
+ return Math.ceil(((commission + this.highFloorFeeCalc + extra) / members) * 100) / 100;
} else {
- return Math.ceil((commission / members) * 100) / 100;
+ return Math.ceil(((commission + this.highFloorFeeCalc) / members) * 100) / 100;
}
}
- return commission;
+ return commission + this.highFloorFeeCalc;
},
totalAmountCalc() {
if(this.isPaotui==true){
@@ -541,6 +555,7 @@
},
onUnload() {
uni.$off('updateDeliveryWorker');
+ uni.removeStorageSync('pendingAssignWorker');
},
methods: {
initAddress() {
@@ -609,7 +624,7 @@
let shopArea = this.shopItem.shopArea || '';
let putArea = this.formData.address ? this.formData.address.areaId : '';
uni.navigateTo({
- url: `/package1/index/deliveryPersonList?shopAreaId=${shopArea}&putAreaId=${putArea}`
+ url: `/package1/index/deliveryPersonList?orderType=0&shopAreaId=${shopArea}&putAreaId=${putArea}`
})
},
openAddressBook() {
@@ -845,7 +860,7 @@
payload.workerParam = {
workerId: this.assignedWorker.workerId,
workerName: this.assignedWorker.workerName,
- orderBkge: parseFloat(this.assignedWorker.orderBkge || 0)
+ orderBkge: parseFloat(this.assignedWorker.orderBkge || 0) + this.highFloorFeeCalc
};
} else if (this.selected === 'buzhiding') {
payload.workerParam = {
diff --git a/package1/index/deliveryPersonList.vue b/package1/index/deliveryPersonList.vue
index c3f951d..9a9a6e5 100644
--- a/package1/index/deliveryPersonList.vue
+++ b/package1/index/deliveryPersonList.vue
@@ -107,12 +107,14 @@
shopAreaId: '',
putAreaId: '',
workerList: [],
+ orderType:null,
keyword: ''
}
},
onLoad(option) {
this.shopAreaId = option.shopAreaId || '';
this.putAreaId = option.putAreaId || '';
+ this.orderType = option.orderType || 0;
this.getShopList();
},
onShow() {
@@ -123,7 +125,7 @@
// Fake request to our new endpoint
let payload = {
shopAreaId: this.shopAreaId,
- orderType: 0,
+ orderType: this.orderType,
putAreaId: this.putAreaId,
baozhang: this.baozhang,
xiangtong: this.xiangtong,
diff --git a/package1/myCenter/partTimeJobRegister.vue b/package1/myCenter/partTimeJobRegister.vue
index da8c347..82102a5 100644
--- a/package1/myCenter/partTimeJobRegister.vue
+++ b/package1/myCenter/partTimeJobRegister.vue
@@ -269,7 +269,6 @@
for(let m = 0;m订单已退款
售后中
订单已售后
- (商家拒绝退款)
预计{{orderDetail.deliveryInfo.mustFinishTime | formatHourMinute }}送达
@@ -156,7 +155,7 @@
增加配送佣金
- 指派配送员
+ 改派配送员
+
+
+
+ 件数
+
+
+ {{orderDetail.deliveryInfo.allCount}}
+
+
+
+
+ 服务类型
+
+
+ 快递/跑腿
+
+
订单号
@@ -380,7 +403,7 @@
{{orderDetail.deliveryInfo.acceptTime | formatTime}}
-
+
商家出餐时间
@@ -388,7 +411,7 @@
{{orderDetail.shopMakeTime ? orderDetail.shopMakeTime : '' | formatTime}}
-
+
配送员到店时间
@@ -425,7 +448,7 @@
-
+
@@ -450,10 +473,10 @@
确定要取消订单吗
- 取消订单需要商家同意
+ 取消订单需要商家同意
- 商家还未出餐
- 本单商家备餐时长共计{{shopTime}} 配送员配送时长共计{{peisongTime}}
+ 商家还未出餐
+ 本单商家备餐时长共计{{shopTime}} 配送员配送时长共计{{peisongTime}}
@@ -652,6 +675,11 @@
},
returnPopupProp(item){
this.payData = item;
+
+ if(this.payData.otherOrder == 1){
+ this.refundType = 3
+ this.refundTypeStatus = 2
+ }
if(this.payData.shopMakeTime != null){
const date1 = new Date(this.payData.deliveryInfo.acceptTime);
const date2 = new Date(this.payData.shopMakeTime);
diff --git a/package1/order/orderList.vue b/package1/order/orderList.vue
index 82e3d8b..6444f88 100644
--- a/package1/order/orderList.vue
+++ b/package1/order/orderList.vue
@@ -126,16 +126,13 @@
- {{item.orderType == 4 ? '快递' : item.orderType == 5 ? '跑腿' : item.orderType == 6 ? '二手':"饭团"}}
+ {{item.otherOrder == 1 ? '快递/跑腿' : item.otherOrder == 2 ? '二手' :"饭团"}}
- {{item.orderType == 4 ? '快递代取' : item.orderType == 5 ? '跑腿帮送' : item.orderType == 6 ? '二手物品': item.shopName}}
+ {{item.otherOrder == 1 ? '快递/跑腿' : item.otherOrder == 2 ? '二手物品': item.shopName}}
-
+
-
- 3个
-
@@ -143,14 +140,14 @@
- 沁园春第三食堂A20窗口
+ {{item.shopAddress}}
- 11号宿舍楼610
+ {{item.receiverAddress}}
- 下单时间:2026-02-25 16:34
+ 下单时间:{{item.createTime | formatTime}}
@@ -181,12 +178,16 @@
实付(含包装/配送费) ¥{{item.totalAmount}}
+
+ 下单时间:{{item.createTime | formatTime}}
+
+
去支付
diff --git a/package1/runErrand/runErrand.vue b/package1/runErrand/runErrand.vue
index 03d2cb1..b63a54a 100644
--- a/package1/runErrand/runErrand.vue
+++ b/package1/runErrand/runErrand.vue
@@ -1,24 +1,24 @@
-
+
-
+
-
+
-
-
+
+
-
+
@@ -27,113 +27,164 @@
-
+
-
-
+
+
+
+
+
+
+
+
+ {{selectedPickupArea.title}}
+
+
+ 请选择快递代取点
+
+
+
+
+
-
+
-
-
- 沁园春第三食堂A20窗口
+
+
+ {{formData.pickupAddress.areaName || ''}}{{formData.pickupAddress.floor ? formData.pickupAddress.floor + '层' : ''}}{{formData.pickupAddress.roomNum || ''}} {{formData.pickupAddress.receiverName || ''}}
-
- 地址簿
+
+ 请选择取货地址
+
+
+
-
+
-
-
- 沁园春第三食堂A20窗口
+
+
+ {{formData.address.areaName || ''}}{{formData.address.floor ? formData.address.floor + '层' : ''}}{{formData.address.roomNum || ''}} {{formData.address.receiverName || ''}}
-
- 地址簿
+
+ 请选择收货地址
+
-
-
-
- 取件数量*
+
+
+
+
+ 立即送出
+ 预计{{immediateTimeStr}}送达
-
- 0 ? addFormData.num-- : 0"
- style="width: 30%;font-size: 44rpx;font-weight: 700;text-align: center;">-
-
- +
+
+ 预约配送
+
+
+ {{formData.deliveryTime}}
+
+ 选择时间 >
+
-
-
- 取件凭证*
+
+
+
+
+ 配送员
+ 指定配送员,如配送员拒绝接单或者下线,订单进入抢单大厅
+ 不指定配送员超过10分钟没有人接单,会发送短信通知
-
-
-
-
+
+
+
+
-
- 手机尾号
+
+ 不指定
-
-
+
+ 佣金 ¥
+
-
-
-
+
+
+
-
- 取件码
+
+ 指定配送员
-
-
-
-
-
+
+ {{ assignedWorker ? assignedWorker.workerName + ' ' + assignedWorker.mobile : '选配送员' }}
+
-
- + 添加取件码
+
+
+
+
+ 因您的收货楼层在3楼以上,将额外收取配送费 ¥{{highFloorFeeCalc}}
+
+
+
+
+
+
+ 取件数量*
+
+
+ 1 ? addFormData.num-- : 1" style="width: 30%;font-size: 44rpx;font-weight: 700;text-align: center;">-
+
+ +
+
+
+
+
+ 取件凭证*
+
+
+
+ 手机尾号
+
+
-
-
-
-
+
+ 取件码
+
+
+
+
-
- 取件码截图
-
-
-
-
-
-
-
+ + 添加取件码
+
+
+ 截图凭证
+
+
+
+
+
+
+
+
@@ -142,49 +193,113 @@
- 特殊情况*
+ 特殊情况
-
- 超重超大
+
+ 超重/超大
- 订单备注*
+ 订单备注
-
+
-
-
- 送达时间*
+
+
+ {{isKuaidi?'代取配送费':'跑腿费'}}
-
- {{addFormData.deliveryTime}}
+
+ ¥{{deliveryFeeCalc.toFixed(2)}}
+
+ 合计
+ ¥{{totalAmountCalc.toFixed(2)}}
+
+
+
-
- 直接购买
+
+ 立即支付{{backendTotalAmount ? backendTotalAmount.toFixed(2) : totalAmountCalc.toFixed(2)}}
-
+
+
+
+
+
+
+
+ 选择快递代取点
+
+
+
+
+ {{item.title}}
+
+
+
+ 暂无可用快递点
+
+
+
+
+
+ >
+
+
+
+
+
+
+
+
+
+
+
-
- >
@@ -194,69 +309,206 @@
export default {
data() {
return {
- selected: 'phone',
- isPaotui: true,
+ isKuaidi: true,
menuButtonInfo: {},
+ selectedWorker:'buzhiding',
+ assignedWorker:null,
+ customCommission:'0',
+ shopArea: [],
+ kuaidiAreaList: [],
+ selectedPickupArea: null,
+ addressSelectMode: 'put', // 'put' | 'get'
+ formData: {
+ address: null, // 收货地址 putArea
+ pickupAddress: null, // 取货地址 getArea (跑腿模式)
+ isImmediately: true,
+ deliveryTime: '',
+ peisongyuan: ''
+ },
addFormData: {
- qu: '',
- song: '',
- num: 0,
- phone: '',
- codeList: [{
- code: ''
- }],
+ num: 1,
+ phoneNumber: '',
+ codeList: [{ code: '' }],
picture: [],
isOverweightOrOvervolume: false,
- deliveryTime: '立即送达'
+ remark: ''
},
- content: []
+ content: [],
+ immediateTimeStr: '',
+ backendTotalAmount: 0,
+ currentOrderId: '',
+ warnPopup: ''
}
},
components: {
deliveryTimeOp,
addressList
},
+ computed: {
+ highFloorFeeCalc() {
+ if (this.selectedWorker === 'zhiding' && this.assignedWorker) {
+ let hFee = parseFloat(this.assignedWorker.highFloorFee || 0);
+ if (hFee > 0 && this.formData.address && parseInt(this.formData.address.floor) > 3) {
+ return hFee;
+ }
+ }
+ return 0;
+ },
+ deliveryFeeCalc() {
+ let commission = 0;
+ if (this.selectedWorker === 'zhiding') {
+ if (this.assignedWorker) {
+ commission = parseFloat(this.assignedWorker.orderBkge || 3);
+ }
+ } else {
+ let val = parseFloat(this.customCommission);
+ if (!isNaN(val) && val > 0) commission = val;
+ }
+ return commission + this.highFloorFeeCalc;
+ },
+ totalAmountCalc() {
+ return this.deliveryFeeCalc;
+ }
+ },
onLoad() {
},
onShow() {
+ this.getShopArea()
this.menuButtonInfo = uni.getMenuButtonBoundingClientRect()
+ this.initAddress()
+
+ const now = new Date();
+ const startTime = new Date(now);
+ const endTime = new Date(now);
+ startTime.setMinutes(startTime.getMinutes() + 20);
+ endTime.setMinutes(endTime.getMinutes() + 35);
+ const startStr = `${startTime.getHours().toString().padStart(2, '0')}:${startTime.getMinutes().toString().padStart(2, '0')}`;
+ const endStr = `${endTime.getHours().toString().padStart(2, '0')}:${endTime.getMinutes().toString().padStart(2, '0')}`;
+ this.immediateTimeStr = `${startStr}-${endStr}`;
+
+ uni.$on('updateDeliveryWorker', (worker) => {
+ this.assignedWorker = worker;
+ this.selectedWorker = 'zhiding';
+ });
+
+ },
+ onUnload() {
+ uni.$off('updateDeliveryWorker');
+ uni.removeStorageSync('pendingAssignWorker');
},
methods: {
- openAddressBook(){
- this.$refs.bookPopup.open('bottom')
+ getShopArea(){
+ let that = this
+ let areaStorage = uni.getStorageSync('area');
+ if(!areaStorage) return;
+ that.tui.request("/app/shopArea/getByParentId/"+JSON.parse(areaStorage).id, "GET", {}, false, true).then((res) => {
+ if (res.code == 200) {
+ if(res.result != null){
+ that.shopArea = res.result;
+ that.kuaidiAreaList = that.shopArea.filter(item => item.isCanteen === 2);
+ }
+ } else {
+ that.tui.toast(res.message)
+ return
+ }
+ }).catch((res) => {})
+ },
+ initAddress() {
+ let cachedAddress = uni.getStorageSync('selectedAddress');
+ if (cachedAddress && !this.formData.address) {
+ this.formData.address = cachedAddress;
+ } else if(!this.formData.address){
+ let that = this;
+ let userId = uni.getStorageSync('id');
+ if(!userId) return;
+ that.tui.request("/app/userAddress/list", "GET", {
+ userId: userId
+ }, false, true).then((res) => {
+ if (res.code == 200 && res.result && res.result.length > 0) {
+ let target = res.result.find(item => item.isDefault == 1) || res.result[0];
+ that.formData.address = target;
+ uni.setStorageSync('selectedAddress', target);
+ }
+ }).catch(() => {});
+ }
+ },
+ openAddressBook(mode) {
+ this.addressSelectMode = mode;
+ this.$refs.bookPopup.open('bottom');
+ },
+ handleSelectAddress(address) {
+ if (this.addressSelectMode === 'put') {
+ this.formData.address = address;
+ uni.setStorageSync('selectedAddress', address);
+ } else {
+ this.formData.pickupAddress = address;
+ }
+ this.$refs.bookPopup.close();
+ },
+ handleSyncAddress(address) {
+ if (this.addressSelectMode === 'put') {
+ this.formData.address = address;
+ }
+ },
+ openKuaidiPicker() {
+ this.$refs.kuaidiPickerPopup.open();
+ },
+ selectKuaidiArea(item) {
+ this.selectedPickupArea = item;
+ this.$refs.kuaidiPickerPopup.close();
+ },
+ goDetail() {
+ let shopAreaId = '';
+ if (this.isKuaidi) {
+ shopAreaId = this.selectedPickupArea ? this.selectedPickupArea.id : '';
+ } else {
+ shopAreaId = this.formData.pickupAddress ? this.formData.pickupAddress.areaId : '';
+ }
+ let putAreaId = this.formData.address ? this.formData.address.areaId : '';
+ if(this.isKuaidi){
+ uni.navigateTo({
+ url: `/package1/index/deliveryPersonList?orderType=1&shopAreaId=${shopAreaId}&putAreaId=${putAreaId}`
+ });
+ }else{
+ uni.navigateTo({
+ url: `/package1/index/deliveryPersonList?shopAreaId=${shopAreaId}&putAreaId=${putAreaId}`
+ });
+ }
},
- checkTime(){
- this.$refs.model.open();
- this.generateDeliveryTimes()
+ checkTime(type) {
+ if (type === this.formData.isImmediately) {
+ if (type === false) {
+ this.$refs.model.open()
+ this.generateDeliveryTimes()
+ }
+ return;
+ }
+ this.formData.isImmediately = type;
+ if (this.formData.isImmediately === false) {
+ this.$refs.model.open()
+ this.generateDeliveryTimes()
+ }
},
- //时间选择器获取时间数据
generateDeliveryTimes() {
const now = new Date();
const today = new Date(now);
const tomorrow = new Date(now);
tomorrow.setDate(tomorrow.getDate() + 1);
- // 星期几
const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
const todayWeekday = weekdays[today.getDay()];
const todayStr = `今天 (${todayWeekday})`;
- // 明天的日期格式:月-日(不补零)
const month = tomorrow.getMonth() + 1;
const day = tomorrow.getDate();
const tomorrowStr = `${month}-${day}`;
- // ----- 生成今天的时间列表 -----
- const todayTimelist = [{
- timestr: '自动送达'
- }];
-
+ const todayTimelist = [{ timestr: '自动送达' }];
const currentHour = now.getHours();
const currentMinute = now.getMinutes();
- // 计算下一个半小时点
let nextHour = currentHour;
let nextMinute = 30;
if (currentMinute >= 30) {
@@ -264,88 +516,292 @@
nextMinute = 0;
}
- // 从下一个半小时点开始,直到 23:30
for (let h = nextHour; h <= 23; h++) {
const startMin = (h === nextHour) ? nextMinute : 0;
for (let m = startMin; m < 60; m += 30) {
- if (h === 23 && m > 30) continue; // 不超过 23:30
+ if (h === 23 && m > 30) continue;
const timeStr = `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}`;
- todayTimelist.push({
- timestr: timeStr
- });
+ todayTimelist.push({ timestr: timeStr });
}
}
- // ----- 生成明天的时间列表(全天 00:00 ~ 23:30)-----
const tomorrowTimelist = [];
for (let h = 0; h <= 23; h++) {
for (let m = 0; m < 60; m += 30) {
if (h === 23 && m > 30) continue;
const timeStr = `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}`;
- tomorrowTimelist.push({
- timestr: timeStr
- });
+ tomorrowTimelist.push({ timestr: timeStr });
}
}
- this.content = [{
- timezh: todayStr,
- timelist: todayTimelist
- },
- {
- timezh: tomorrowStr,
- timelist: tomorrowTimelist
- }
+ this.content = [
+ { timezh: todayStr, timelist: todayTimelist },
+ { timezh: tomorrowStr, timelist: tomorrowTimelist }
];
},
-
- //切换日期
- dataCallback(type) {
- console.log("11111111111")
- },
- //时间选择器点击后
timeCallback(val) {
- this.addFormData.deliveryTime = val.timestr
- this.$refs.model.close()
+ this.formData.deliveryTime = val.timestr;
+ this.$refs.model.close();
+ },
+ checkWorker(type) {
+ if (type == this.selectedWorker) return;
+ this.selectedWorker = type;
+ if (this.selectedWorker == 'buzhiding') {
+ this.formData.peisongyuan = "";
+ this.assignedWorker = null;
+ }
},
checkWeightOrVolume() {
this.addFormData.isOverweightOrOvervolume = !this.addFormData.isOverweightOrOvervolume
-
},
addCode() {
- this.addFormData.codeList.push({
- code: ''
- })
+ this.addFormData.codeList.push({ code: '' })
},
delCode(index) {
this.addFormData.codeList.splice(index, 1)
},
- checkVoucher(type) {
- if (type == this.selected) return;
- this.selected = type;
-
- this.addFormData.phone = '',
- this.addFormData.codeList = [{
- code: ''
- }]
- this.addFormData.picture = []
+ pictureAdd() {
+ let that = this
+ uni.chooseMedia({
+ count: 1,
+ mediaType: ['image'],
+ sourceType: ['album'],
+ success(res) {
+ uni.showLoading({
+ title: '加载中...',
+ mask: true
+ })
+ for (let i = 0; i < res.tempFiles.length; i++) {
+
+ that.upLoadFile(res.tempFiles[i].tempFilePath)
+ }
+
+ }
+ })
},
- toggleReply() {
- this.isExpanded = !this.isExpanded;
+ async upLoadFile(path) {
+ let that = this;
+ let hiver_token = uni.getStorageSync("hiver_token")
+ await uni.uploadFile({
+ url: that.tui.interfaceUrl() + '/upload/file',
+ filePath: path,
+ name: 'file',
+ header: {
+ "content-type": "multipart/form-data",
+ 'accessToken': hiver_token
+ },
+ formData: {},
+ success: (uploadFileRes) => {
+ let data = JSON.parse(uploadFileRes.data);
+ if (data.success) {
+ that.addFormData.picture.push(data.result);
+ } else {
+ that.tui.toast(data.message);
+ }
+ that.$forceUpdate()
+ },
+ fail: (err) => {
+ uni.hideLoading();
+ uni.showToast({
+ title: JSON.stringify(err),
+ icon: 'none'
+ })
+ }
+ });
+ await setTimeout(res => {
+ uni.hideLoading();
+ }, 1000)
},
- checkTab(index) {
- for (let i = 0; i < this.menuList.length; i++) {
- if (i == index) {
- this.menuList[i].checked = true
- } else {
- this.menuList[i].checked = false
+ delPicture(index) {
+ this.addFormData.picture.splice(index, 1);
+ },
+ getMustFinishTime() {
+ if (this.formData.isImmediately || !this.formData.deliveryTime || this.formData.deliveryTime === '自动送达' || this.formData.deliveryTime === '尽快送达') {
+ const now = new Date();
+ now.setMinutes(now.getMinutes() + 35);
+ const year = now.getFullYear();
+ const month = String(now.getMonth() + 1).padStart(2, '0');
+ const day = String(now.getDate()).padStart(2, '0');
+ const hours = String(now.getHours()).padStart(2, '0');
+ const minutes = String(now.getMinutes()).padStart(2, '0');
+ const seconds = String(now.getSeconds()).padStart(2, '0');
+ return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;
+ } else {
+ let timeStr = this.formData.deliveryTime;
+ if (timeStr.length === 5) {
+ let [h, m] = timeStr.split(':');
+ let targetHour = parseInt(h);
+ let d = new Date();
+ if (targetHour < d.getHours()) d.setDate(d.getDate() + 1);
+ let yyyy = d.getFullYear();
+ let MM = String(d.getMonth() + 1).padStart(2, '0');
+ let DD = String(d.getDate()).padStart(2, '0');
+ return `${yyyy}-${MM}-${DD}T${timeStr}:00`;
+ }
+ }
+ return null;
+ },
+ submitPay() {
+ if (this.isKuaidi && !this.selectedPickupArea) {
+ uni.showToast({ title: '请选择代取点', icon: 'none' });
+ return;
+ }
+ if (!this.isKuaidi && !this.formData.pickupAddress) {
+ uni.showToast({ title: '请选择取货地址', icon: 'none' });
+ return;
+ }
+ if (!this.formData.address) {
+ this.warnPopup = 'shdz';
+ this.$refs.warnPopup.open();
+ return;
+ }
+ if (this.selectedWorker === 'buzhiding') {
+ let comm = parseFloat(this.customCommission);
+ if (isNaN(comm) || comm <= 0) {
+ this.warnPopup = 'psyj';
+ this.$refs.warnPopup.open();
+ return;
}
}
+ if (this.selectedWorker === 'zhiding' && !this.assignedWorker) {
+ this.warnPopup = 'psy';
+ this.$refs.warnPopup.open();
+ return;
+ }
+ if (this.isKuaidi && (!this.addFormData.codeList || this.addFormData.codeList[0].code.trim() === '') && this.addFormData.picture.length === 0) {
+ uni.showToast({ title: '请填写取件码或上传截图凭证', icon: 'none' });
+ return;
+ }
+
+ this.submitOrderToBackend();
+ },
+ submitOrderToBackend() {
+ let deliveryType = this.isKuaidi ? 2 : 3;
+
+ let putAddressStr = (this.formData.address.areaName || '') + (this.formData.address.floor ? this.formData.address.floor + '层' : '') + (this.formData.address.roomNum || '');
+ let shopAddressStr = '';
+ let shopName = '';
+ let shopPhone = '';
+ let getAreaId = '';
+
+ if (this.isKuaidi) {
+ shopAddressStr = this.selectedPickupArea.title;
+ shopName = this.selectedPickupArea.title;
+ getAreaId = this.selectedPickupArea.id;
+ } else {
+ shopAddressStr = (this.formData.pickupAddress.areaName || '') + (this.formData.pickupAddress.floor ? this.formData.pickupAddress.floor + '层' : '') + (this.formData.pickupAddress.roomNum || '');
+ shopName = this.formData.pickupAddress.receiverName || '个人寄件';
+ shopPhone = this.formData.pickupAddress.receiverPhone || '';
+ getAreaId = this.formData.pickupAddress.areaId;
+ }
+
+ let codes = this.addFormData.codeList.map(c => c.code).filter(c => c).join(',');
+ let pics = this.addFormData.picture.join(',');
+
+ let payload = {
+ getAreaId: getAreaId,
+ putAreaId: this.formData.address.areaId,
+ deliveryType: deliveryType,
+ receiverName: this.formData.address.receiverName,
+ receiverPhone: this.formData.address.receiverPhone,
+ receiverAddress: putAddressStr,
+ shopAddress: shopAddressStr,
+ shopId: uni.getStorageSync('id'),
+ shopPhone: shopPhone,
+ remark: this.addFormData.remark,
+ allCount: this.addFormData.num,
+ isBig: this.addFormData.isOverweightOrOvervolume ? 1 : 0,
+ phoneNumber: this.addFormData.phoneNumber,
+ getCodes: codes,
+ getPictures: pics,
+ regionId: JSON.parse(uni.getStorageSync('area')).id,
+ deliveryFee: this.deliveryFeeCalc
+ };
+
+ let mft = this.getMustFinishTime();
+ if (mft) payload.mustFinishTime = mft;
+
+ if (this.selectedWorker === 'zhiding' && this.assignedWorker) {
+ payload.workerId = this.assignedWorker.workerId;
+ payload.workerName = this.assignedWorker.workerName;
+ payload.workerPhone = this.assignedWorker.mobile;
+ payload.workerParam = { // Backend processing might specifically look for workerParam.orderBkge
+ workerId: this.assignedWorker.workerId,
+ workerName: this.assignedWorker.workerName,
+ orderBkge: parseFloat(this.assignedWorker.orderBkge || 0) + this.highFloorFeeCalc
+ }
+ // deliveryFee override just in case
+ payload.deliveryFee = parseFloat(this.assignedWorker.orderBkge || 3) + this.highFloorFeeCalc;
+ } else if (this.selectedWorker === 'buzhiding') {
+ payload.workerParam = { orderBkge: parseFloat(this.customCommission || 0) };
+ payload.deliveryFee = parseFloat(this.customCommission || 0);
+ }
+
+ uni.showLoading({ title: '创建订单中...' });
+
+ this.tui.request("/mall/delivery/insert", "POST", payload, false, false).then(res => {
+ uni.hideLoading();
+ if (res.success && res.result) {
+ this.currentOrderId = res.result.id;
+ this.backendTotalAmount = res.result.deliveryFee || this.deliveryFeeCalc;
+ this.$refs.payPopup.open('bottom');
+ } else {
+ uni.showToast({ title: res.message || '下单失败', icon: 'none' });
+ }
+ }).catch(err => {
+ uni.hideLoading();
+ });
+ },
+ wxPayment() {
+ let that = this;
+ if (!this.currentOrderId || !this.backendTotalAmount) return;
+
+ let amountInCents = Math.round(this.backendTotalAmount * 100);
+ let payDesc = this.isKuaidi ? '代取快递费' : '代跑腿费';
+
+ this.tui.request("/api/wechat/pay/unified-order", "POST", {
+ openid: uni.getStorageSync('miniProgramOpenid') || 'test-openid',
+ amount: amountInCents,
+ description: payDesc,
+ outTradeNo: this.currentOrderId
+ }, false, false).then((res) => {
+ if (res.code == 200) {
+ uni.requestPayment({
+ provider: 'wxpay',
+ timeStamp: res.timeStamp,
+ nonceStr: res.nonceStr,
+ package: res.package,
+ signType: res.signType,
+ paySign: res.paySign,
+ success: function(res2) {
+ uni.showToast({ title: '支付成功', icon: 'success' });
+ that.tui.request("/api/wechat/pay/paySuccess", "POST", {
+ outTradeNo: that.currentOrderId
+ }, false, false).then((res3) => {
+ if(res3.code == 200) {
+ that.handlePaymentSuccess();
+ } else {
+ that.tui.toast("系统繁忙,请联系客服处理");
+ }
+ })
+ },
+ fail: function(err) {
+ uni.redirectTo({
+ url: '/package1/order/orderDetail?id=' + that.currentOrderId
+ });
+ }
+ });
+ } else {
+ uni.redirectTo({
+ url: '/package1/order/orderDetail?id=' + that.currentOrderId
+ });
+ }
+ })
},
- //查看大图
- largeImg(img) {
- this.bigImg = 'https://jewel-shop.oss-cn-beijing.aliyuncs.com/00b1f011787c4549bbea650d95a4eb39.png'
- this.$refs.imgPopup.open()
+ handlePaymentSuccess() {
+ uni.redirectTo({
+ url: '/package1/order/orderDetail?id=' + this.currentOrderId
+ });
},
back() {
uni.navigateBack()
@@ -374,7 +830,7 @@
.title {
background: url('https://jewel-shop.oss-cn-beijing.aliyuncs.com/8bc15960c2dc40268e295d6dd23aecce.png') no-repeat;
width: 100%;
- height: 54%;
+ height: 40%;
}
.title-sreach {
@@ -400,12 +856,12 @@
.content {
position: absolute;
- top: 360rpx;
+ top: 280rpx;
width: 100%;
overflow: scroll;
- height: 80%;
- background: #fff;
- padding: 0 2.5%;
+ height: 100%;
+ padding: 0 4%;
+ box-sizing: border-box;
}
.tab1 {
@@ -427,7 +883,6 @@
.dizhi {
display: flex;
- margin-bottom: 20rpx;
}
.dizhi-tu {
@@ -443,34 +898,32 @@
.dizhi1 {
flex: 1;
- background: #eee;
- border-radius: 20rpx;
height: 100rpx;
line-height: 100rpx;
display: flex;
- padding: 0 20rpx;
+ justify-content: space-between;
+ align-items: center;
}
.dizhi-ming {
- flex: 1;
+ font-size: 30rpx;
font-weight: 700;
- }
-
- .dizhi-btn {
- width: 112rpx;
- height: 50rpx;
- background: #fff;
- line-height: 50rpx;
- text-align: center;
- border: 1px solid #777;
- border-radius: 50rpx;
- margin-top: 26rpx;
+ flex: 1;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
.content-box {
width: 100%;
display: flex;
line-height: 120rpx;
+ background: #fff;
+ border-radius: 20rpx;
+ padding: 0 20rpx;
+ margin-top: 20rpx;
+ box-shadow: 0 0 10rpx rgba(0,0,0,0.05);
+ box-sizing: border-box;
}
.content-title {
@@ -486,7 +939,7 @@
border-radius: 48rpx;
text-align: center;
line-height: 48rpx;
- margin: 36rpx 20rpx 0 0;
+ margin: 0 20rpx 0 0;
}
.radio-no-check {
@@ -494,14 +947,12 @@
height: 48rpx;
border-radius: 48rpx;
border: 1px solid #eee;
- margin: 36rpx 20rpx 0 0;
+ margin: 0 20rpx 0 0;
}
.check-input {
- border: 1px solid rgba(0, 35, 28, 0.1);
- border-radius: 20rpx;
height: 70rpx;
- width: 75%;
+ width: 100%;
margin-bottom: 20rpx;
}
@@ -511,7 +962,8 @@
line-height: 50rpx;
text-align: center;
background: rgba(166, 255, 234, 1);
- margin-top: 20rpx;
+ margin-top: 10rpx;
+ margin-bottom: 20rpx;
border-radius: 10rpx;
font-size: 22rpx;
}
@@ -526,6 +978,7 @@
padding: 0 20rpx;
color: #777;
margin-right: 20rpx;
+ margin-top: 24rpx;
}
.buy-bottom {
@@ -544,18 +997,48 @@
width: 90%;
height: 100rpx;
background: linear-gradient(90deg, #e3ff96, #a6ffea);
- font-size: 26rpx;
+ font-size: 32rpx;
font-weight: 700;
line-height: 100rpx;
text-align: center;
border-radius: 100rpx;
margin: 20rpx auto;
}
+
.book-popup-content{
position: relative;
height: 1200rpx;
width: 100%;
padding: 20rpx;
overflow: scroll;
+ box-sizing: border-box;
}
+
+ .time-box {
+ background: #fff;
+ display: flex;
+ height: 140rpx;
+ padding: 20rpx;
+ border-radius: 20rpx;
+ margin-top: 20rpx;
+ box-shadow: 0 0 10rpx rgba(0,0,0,0.05);
+ box-sizing: border-box;
+ }
+
+ .time1 {
+ height: 100rpx;
+ flex: 1;
+ border-radius: 20rpx;
+ text-align: center;
+ margin: 0 10rpx;
+ line-height: 40rpx;
+ padding-top: 10rpx;
+ box-sizing: border-box;
+ }
+
+ .content2 {
+ background: #fff;
+ border-radius: 40rpx 40rpx 0 0;
+ overflow: hidden;
+ }
\ No newline at end of file