Просмотр исходного кода

1. 配送页面修改 2.跑腿设置页面修改

shizhongqi 8 месяцев назад
Родитель
Сommit
b554c5c866

+ 17 - 2
ghsApp/src/admin/delivery/allDelivery.vue

@@ -161,7 +161,7 @@
       </view> -->
 
       <!-- 遍历deliveryList -->
-      <view class="delivery-item" v-for="(item, index) in deliveryList" :key="index" :class="{ active: selectedDelivery === item.name }" @click="selectDelivery(item)">
+      <view class="delivery-item" v-for="(item, index) in deliveryList" :key="index" :class="{ active: selectedDelivery === item.name, disabled: !item.isAble }" @click="selectDelivery(item)">
         <view class="item-left">
           <view class="delivery-name">
             <text class="name">{{ item.name }}</text>
@@ -170,7 +170,7 @@
         </view>
         <view class="item-right">
           <view class="price">预估 ¥{{ item.price/100.00 }}</view>
-          <radio :checked="selectedDelivery === item.name" color="#3385FF" style="transform: scale(0.7)"></radio>
+          <radio :checked="selectedDelivery === item.name" :disabled="!item.isAble" color="#3385FF" style="transform: scale(0.7)"></radio>
         </view>
       </view>
       
@@ -305,6 +305,10 @@ export default {
       });
     },
     selectDelivery(item) {
+      // 如果item被禁用,则不允许选择
+      if (!item.isAble) {
+        return;
+      }
       this.selectedDelivery = item.name;
     },
     openTimePicker() {
@@ -591,6 +595,17 @@ export default {
       background-color: #f0f7ff;
     }
 
+    &.disabled {
+      opacity: 0.5;
+      cursor: not-allowed;
+
+      .name,
+      .delivery-detail,
+      .price {
+        color: #cccccc;
+      }
+    }
+
     .item-left {
       flex: 1;
 

+ 37 - 3
ghsApp/src/admin/delivery/components/PlatformItem.vue

@@ -16,10 +16,15 @@
 					</view>
 				</view>
 			</view>
-			<view v-if="platform.is_authorized" class="balance-section">
+		<view v-if="platform.is_authorized" class="balance-section">
+			<view class="balance-header">
 				<text class="balance-label">余额</text>
-				<text class="balance-amount">¥{{ platform.balance.toFixed(2) }}</text>
+				<view class="refresh-btn" @click="handleRefreshBalance">
+					<text class="refresh-icon">⟳</text>
+				</view>
 			</view>
+			<text class="balance-amount">¥{{ platform.balance }}</text>
+		</view>
 		</view>
 		<view class="bottom-content">
 			<view class="actions">
@@ -59,6 +64,9 @@ export default {
 		},
 		handleAuthorize() {
 			this.$emit('authorize', this.platform);
+		},
+		handleRefreshBalance() {
+			this.$emit('refresh-balance', this.platform);
 		}
 	}
 };
@@ -160,10 +168,36 @@ export default {
 	min-width: 140rpx;
 }
 
+.balance-header {
+	display: flex;
+	align-items: center;
+	gap: 8rpx;
+	margin-bottom: 8rpx;
+}
+
 .balance-label {
 	font-size: 24rpx;
 	color: #999;
-	margin-bottom: 8rpx;
+}
+
+.refresh-btn {
+	display: inline-flex;
+	align-items: center;
+	justify-content: center;
+	width: 44rpx;
+	height: 44rpx;
+	cursor: pointer;
+	transition: transform 0.3s ease;
+}
+
+.refresh-btn:active {
+	transform: rotate(180deg);
+}
+
+.refresh-icon {
+	font-size: 28rpx;
+	color: #1890ff;
+	font-weight: bold;
 }
 
 .balance-amount {

+ 20 - 1
ghsApp/src/admin/delivery/deliveryManage.vue

@@ -15,6 +15,8 @@
 				@recharge="handleRecharge"
 				@cancel-auth="handleCancelAuth"
 				@authorize="handleAuthorize"
+				@refresh-balance="handleRefreshBalance"
+				@shop="shopDetail"
 			/>
 		</view>
 
@@ -48,6 +50,7 @@
 <script>
 import PlatformItem from './components/PlatformItem.vue';
 import { getPlatformList, getAuthUrl, cancelAuth } from '@/api/express/delivery.js';
+import { refreshBalance } from '@/api/express/deliveryShop.js';
 
 export default {
 	components: {
@@ -98,7 +101,7 @@ export default {
                 { id: 'shansong', name: '闪送', logo: '⚡'},
                 { id: 'didi', name: '滴滴', logo: '🚗'},
 			    { id: 'uu', name: 'UU跑腿', logo: '🛵'},
-                { id: 'dada', name: '达达', logo: '📦'}
+                { id: 'shunfeng', name: '顺丰', logo: '🚚'}
 		    ];
 		
             // 获取已授权平台的id集合
@@ -111,6 +114,7 @@ export default {
 			this.$refs.addAuthModal.close();
 		},
 		handleRecharge(platform) {
+			// 请求后端,根据后端的返回进行响应
 			uni.showModal({
 				title: '充值',
 				editable: true,
@@ -155,6 +159,21 @@ export default {
 					icon: 'none'
 				});
 			}
+		},
+		handleRefreshBalance(platform) {
+			console.log(`刷新 ${platform} 的余额`);
+			refreshBalance({platform: platform.id}).then(res => {
+				if (res.code === 1) {
+					uni.showToast({ title: '刷新余额成功', icon: 'none' });
+					// 只更新当前平台的余额
+					this.platformList.find(p => p.id === platform.id).balance = res.data.balance/100.00;
+				} else {
+					uni.showToast({ title: '刷新余额失败', icon: 'none' });
+				}
+			});
+		},
+		shopDetail(platform) {
+			uni.navigateTo({ url: `/admin/delivery/shopDetail`, query: { platform: platform.id } });
 		}
 	}
 };

+ 2 - 2
ghsApp/src/api/express/delivery.js

@@ -11,7 +11,7 @@ export const address = data => {
  * 获取配送平台报价
  */
 export const getDeliveryQuotes = data => {
-	return https.post('/delivery/all-delivery-quotes', data)
+	return https.post('/delivery/all-delivery-quotes', data) //?XDEBUG_SESSION_START=PHPSTORM
 }
 
 /**
@@ -32,7 +32,7 @@ export const cancelDeliveryOrder = data => {
  * 获取可用订单取消原因
  */
  export const getCancelReason = data => {
-	return https.post('/delivery/cancel-reason', data)
+	return https.post('/delivery/cancel-reason?XDEBUG_SESSION_START=PHPSTORM', data)
  }
 
 /**

+ 15 - 0
ghsApp/src/api/express/deliveryShop.js

@@ -0,0 +1,15 @@
+import https from '@/plugins/luch-request_0.0.7/request'
+
+/**
+ * 发货与收货地址
+ */
+export const refreshBalance = data => {
+	return https.get('/delivery-shop/balance', data)
+}
+
+/**
+ * 获取平台列表
+ */
+export const getPlatformList = data => {
+	return https.get('/delivery/list')
+}

+ 35 - 5
ghsApp/src/pagesOrder/detail.vue

@@ -534,7 +534,7 @@
 							<view class="reason-text">{{ item.order_cancel_desc }}</view>
 						</label>
 					</radio-group>
-					<textarea v-if="selectedCancelReasonCode === 0" v-model="otherCancelReason" placeholder="请输入其他原因" class="reason-textarea"></textarea>
+					<textarea v-if="selectedCancelReasonCode === 0 || selectedCancelReasonCode === 313" v-model="otherCancelReason" placeholder="请输入其他原因" class="reason-textarea"></textarea>
 				</scroll-view>
 				<view class="popup-actions">
 					<button @click="closeCancelReasonPopup" class="action-btn cancel">取消</button>
@@ -699,7 +699,7 @@ export default {
 			if(deliveryId == 'fengniao'){
 				getCancelReason({ghsOrderId: orderId, platform: deliveryId}).then(res => {
 					if (res.code == 1 && res.data && res.data.code == 0) {
-						this.cancelReasonList = res.data.data.cancel_reason_list;
+						this.cancelReasonList = res.data.data.reasonList;
 						this.currentExpressInfo = { orderId, deliveryId };
 						this.selectedCancelReasonCode = null;
 						this.otherCancelReason = '';
@@ -707,7 +707,7 @@ export default {
 					} else {
 						// 如果获取原因失败,走原来的流程
 						this.$util.confirmModal({content: '确认取消?(获取取消原因失败)'}, async () => { 
-							const res = await cancelDeliveryOrder({ghsOrderId: orderId, platform: deliveryId})
+							const res = await cancelDeliveryOrder({ghsOrderId: orderId, platform: deliveryId, order_cancel_reason: "客户取消订单"})
 							if (res.code === 1) {
 								this.$msg('取消成功')
 								this.init()
@@ -715,9 +715,39 @@ export default {
 						})
 					}
 				})
+			} else if(deliveryId == 'shunfeng'){
+				this.cancelReasonList = [
+					{ order_cancel_code: 300, order_cancel_desc: '计划有变,暂时不需要寄件了' },
+					{ order_cancel_code: 302, order_cancel_desc: '填错订单信息,取消后重新提交' },
+					{ order_cancel_code: 303, order_cancel_desc: '骑士要求取消' },
+					{ order_cancel_code: 304, order_cancel_desc: '暂时无法提供待配送物品' },
+					{ order_cancel_code: 306, order_cancel_desc: '重复下单,取消此单' },
+					{ order_cancel_code: 309, order_cancel_desc: '骑士上门时间太长' },
+					{ order_cancel_code: 310, order_cancel_desc: '超出配送范围' },
+					{ order_cancel_code: 311, order_cancel_desc: '用户(收方)要求取消' },
+					{ order_cancel_code: 312, order_cancel_desc: '无人接单,换用其他平台寄件' },
+					{ order_cancel_code: 313, order_cancel_desc: '其他,请注明原因' }
+				];
+				this.currentExpressInfo = { orderId, deliveryId };
+				this.selectedCancelReasonCode = null;
+				this.otherCancelReason = '';
+				this.$refs.cancelReasonPopup.open();
+			} else if(deliveryId == 'huolala'){
+				getCancelReason({ghsOrderId: orderId, platform: deliveryId}).then(res => {
+					if (res.code == 1 && res.data) {
+						this.cancelReasonList = res.data.reasonList;
+						this.currentExpressInfo = { orderId, deliveryId };
+						this.selectedCancelReasonCode = null;
+						this.otherCancelReason = '';
+						this.$refs.cancelReasonPopup.open();
+					} else {
+						this.$msg(res.msg)
+						return false;
+					}
+				})
 			} else {
 				this.$util.confirmModal({content: '确认取消?'}, async () => { //(若配送员接单1分钟后取消,扣2元违约金)
-					const res = await cancelDeliveryOrder({ghsOrderId: orderId})
+					const res = await cancelDeliveryOrder({ghsOrderId: orderId, platform: deliveryId, order_cancel_reason: "客户取消订单"}) // order_cancel_reason 不能为空,所以随意填一个
 					if (res.code === 1) {
 						this.$msg('取消成功')
 						this.init()
@@ -740,7 +770,7 @@ export default {
 			let reason = this.cancelReasonList.find(item => item.order_cancel_code === this.selectedCancelReasonCode);
 			let reason_desc = reason.order_cancel_desc;
 		
-			if (this.selectedCancelReasonCode === 0) {
+			if (this.selectedCancelReasonCode === 0 || this.selectedCancelReasonCode === 313) {
 				if (this.$util.isEmpty(this.otherCancelReason)) {
 					this.$msg('请输入其他原因');
 					return;