diff --git a/package1/index/deliveryPersonList.vue b/package1/index/deliveryPersonList.vue
index 852ef15..c3f951d 100644
--- a/package1/index/deliveryPersonList.vue
+++ b/package1/index/deliveryPersonList.vue
@@ -136,6 +136,7 @@
});
},
selectWorker(worker) {
+ uni.setStorageSync('pendingAssignWorker', worker);
uni.$emit('updateDeliveryWorker', worker);
uni.navigateBack();
},
diff --git a/package1/order/orderDetail.vue b/package1/order/orderDetail.vue
index 8e2926c..353c9ba 100644
--- a/package1/order/orderDetail.vue
+++ b/package1/order/orderDetail.vue
@@ -152,10 +152,10 @@
立即备餐
-
+
增加配送佣金
-
+
指派配送员
+
+
+
@@ -490,7 +538,9 @@
orderId:'',
payData:{},
orderDetail:{},
- codeImg:'https://jewel-shop.oss-cn-beijing.aliyuncs.com/3a4e68eb14d7417cbb4f15fa85907c64.jpg'
+ codeImg:'https://jewel-shop.oss-cn-beijing.aliyuncs.com/3a4e68eb14d7417cbb4f15fa85907c64.jpg',
+ additionalFee: '',
+ addFeeTradeNo: ''
}
},
components: {
@@ -546,9 +596,22 @@
this.orderId = option.id
this.getOrderDetail(this.orderId)
}
+ // 监听配送员选择事件(在onLoad中注册一次,确保事件不会丢失)
+ uni.$on('updateDeliveryWorker', (worker) => {
+ this.handleWorkerSelected(worker);
+ });
},
onShow() {
this.menuButtonInfo = uni.getMenuButtonBoundingClientRect()
+ // 备用方案:检查缓存中是否有待处理的配送员选择
+ let pendingWorker = uni.getStorageSync('pendingAssignWorker');
+ if (pendingWorker) {
+ uni.removeStorageSync('pendingAssignWorker');
+ this.handleWorkerSelected(pendingWorker);
+ }
+ },
+ onUnload() {
+ uni.$off('updateDeliveryWorker');
},
methods: {
openCode(){
@@ -771,6 +834,134 @@
}
}).catch((res) => {})
},
+ goAssignWorker() {
+ let shopAreaId = this.orderDetail.getAreaId || '';
+ let putAreaId = this.orderDetail.putAreaId || '';
+ uni.navigateTo({
+ url: `/package1/index/deliveryPersonList?shopAreaId=${shopAreaId}&putAreaId=${putAreaId}`
+ });
+ },
+ handleWorkerSelected(worker) {
+ let that = this;
+ uni.showModal({
+ title: '指派配送员',
+ content: `是否选取配送员「${worker.workerName || '未知'}」?`,
+ success: function(res) {
+ if (res.confirm) {
+ that.reassignWorker(worker);
+ }
+ }
+ });
+ },
+ reassignWorker(worker) {
+ let that = this;
+ let deliveryId = '';
+ if (that.orderDetail.deliveryInfo && that.orderDetail.deliveryInfo.id) {
+ deliveryId = that.orderDetail.deliveryInfo.id;
+ }
+ that.tui.request("/mall/delivery/reassignWorker", "POST", {
+ deliveryId: deliveryId,
+ newWorkerId: worker.workerId,
+ newWorkerName: worker.workerName,
+ newWorkerPhone: worker.mobile
+ }, false, true).then((res) => {
+ if (res.code == 200) {
+ that.tui.toast("指派配送员成功");
+ that.getOrderDetail(that.orderId);
+ that.$forceUpdate();
+ } else {
+ that.tui.toast(res.message || '指派配送员失败');
+ }
+ }).catch((err) => {
+ that.tui.toast('请求失败,请重试');
+ });
+ },
+ openAddFeePopup() {
+ this.additionalFee = '';
+ this.$refs.addFeePopup.open('bottom');
+ },
+ submitAddFee() {
+ let fee = parseFloat(this.additionalFee);
+ if (isNaN(fee) || fee <= 0) {
+ this.tui.toast('请输入有效的金额');
+ return;
+ }
+ // 关闭输入弹窗,生成随机订单号,打开支付弹窗
+ this.$refs.addFeePopup.close();
+ const now = Date.now(); // 获取当前时间戳 (13位)
+ const randomPart = Math.floor(Math.random() * 1000000); // 6位随机数
+ this.addFeeTradeNo = `${now}${randomPart.toString().padStart(6, '0')}`;
+ setTimeout(() => {
+ this.$refs.addFeePayPopup.open('bottom');
+ }, 300);
+ },
+ addFeeWxPayment() {
+ let that = this;
+ let fee = parseFloat(this.additionalFee);
+ if (!fee || fee <= 0) return;
+ let amountInCents = Math.round(fee * 100);
+
+ this.tui.request("/api/wechat/pay/unified-order", "POST", {
+ openid: uni.getStorageSync('miniProgramOpenid') || 'test-openid',
+ amount: amountInCents,
+ description: '增加配送佣金',
+ outTradeNo: this.addFeeTradeNo
+ }, 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.$refs.addFeePayPopup.close();
+ that.callAddFeeApi();
+ },
+ fail: function(err) {
+ that.tui.toast('支付失败或取消');
+ }
+ });
+ } else {
+ // 模拟支付成功(用于测试环境)
+ if (res.code == 404 || res.code == 500 || res.code == 400 || !res.code) {
+ that.$refs.addFeePayPopup.close();
+ uni.showToast({ title: '支付成功(模拟)', icon: 'none' });
+ setTimeout(() => {
+ that.callAddFeeApi();
+ }, 1500);
+ } else {
+ that.tui.toast(res.message);
+ }
+ }
+ });
+ },
+ callAddFeeApi() {
+ let that = this;
+ let fee = parseFloat(this.additionalFee);
+ let deliveryId = '';
+ if (that.orderDetail.deliveryInfo && that.orderDetail.deliveryInfo.id) {
+ deliveryId = that.orderDetail.deliveryInfo.id;
+ }
+ that.tui.request("/mall/delivery/addFee", "POST", {
+ deliveryId: deliveryId,
+ additionalFee: fee,
+ orderId:that.orderDetail.deliveryFee.id,
+ olditionalFee:that.orderDetail.deliveryFee ? that.orderDetail.deliveryFee : 0
+ }, false, true).then((res) => {
+ if (res.code == 200) {
+ that.tui.toast("增加佣金成功");
+ that.getOrderDetail(that.orderId);
+ that.$forceUpdate();
+ } else {
+ that.tui.toast(res.message || '增加佣金失败');
+ }
+ }).catch((err) => {
+ that.tui.toast('请求失败,请重试');
+ });
+ },
back() {
uni.navigateBack()
}