Commit 1e6e210a92709bb8c04c429360c5932782cf6827

Authored by lichao
1 parent 932941fd

提交

garbage-removal/src/apis/order.js
@@ -188,3 +188,19 @@ export async function queryBadgeByType(type) { @@ -188,3 +188,19 @@ export async function queryBadgeByType(type) {
188 export async function queryByCarCode(carCode) { 188 export async function queryByCarCode(carCode) {
189 return await request.get(`/order/queryByCarCode/${carCode}`); 189 return await request.get(`/order/queryByCarCode/${carCode}`);
190 } 190 }
  191 +
  192 +export async function queryGarRealCarCountByGarOrderNo(orderNo) {
  193 + return await request.get(`/order/queryGarRealCarCountByGarOrderNo/${orderNo}`);
  194 +}
  195 +
  196 +export async function queryByOrderNo(orderNo) {
  197 + return await request.get(`/order/queryByOrderNo/${orderNo}`);
  198 +}
  199 +
  200 +export async function queryByOrderNoDriver(orderNo) {
  201 + return await request.get(`/order/queryByOrderNoDriver/${orderNo}`);
  202 +}
  203 +
  204 +export async function updateCarCount(params) {
  205 + return await request.post(`/order/updateCarCount`, params);
  206 +}
garbage-removal/src/pages/order-info/order-driver/detail/index.vue
@@ -75,12 +75,13 @@ @@ -75,12 +75,13 @@
75 车辆信息 75 车辆信息
76 </view> 76 </view>
77 <view class="order-detail-container-header-item" style="justify-content: space-between;" 77 <view class="order-detail-container-header-item" style="justify-content: space-between;"
78 - v-for="(item) in dataGram.garCarInfoList" :key="item.garId">  
79 - <text class="order-detail-container-header-title" style="color: #303133;">{{ item.garOrderCarType }} 78 + v-for="(item) in handlerList">
  79 + <text class="order-detail-container-header-title" style="color: #303133;">
  80 + {{item.garOrderHandlerName}}/{{ item.garHandlerCarCode }}/{{item.garOrderContainerVolume}}
80 </text> 81 </text>
81 <view class="order-detail-container-header-content"> 82 <view class="order-detail-container-header-content">
82 <text class="order-detail-container-header-title"> 83 <text class="order-detail-container-header-title">
83 - {{ cleanStatus(dataGram.garOrderHandlerStatus) }} 84 + 趟次:{{item.garCarCount}}车
84 </text> 85 </text>
85 </view> 86 </view>
86 </view> 87 </view>
@@ -227,7 +228,7 @@ @@ -227,7 +228,7 @@
227 228
228 <script setup> 229 <script setup>
229 import { 230 import {
230 - createHandlerQrCode, queryErrType, 231 + createHandlerQrCode, queryByOrderNo, queryByOrderNoDriver, queryErrType,
231 queryGarOrderMatchAsk, 232 queryGarOrderMatchAsk,
232 queryGarOrderMatchAsks, 233 queryGarOrderMatchAsks,
233 queryOrderDetail, 234 queryOrderDetail,
@@ -251,6 +252,7 @@ const putOnImagesGrouped = ref([]) // 新增这个变量 @@ -251,6 +252,7 @@ const putOnImagesGrouped = ref([]) // 新增这个变量
251 const putDownImages = ref([]) 252 const putDownImages = ref([])
252 const emptyBase64Image = ref(zStatic.base64Empty) 253 const emptyBase64Image = ref(zStatic.base64Empty)
253 const showUQRcode = ref(false) 254 const showUQRcode = ref(false)
  255 +const handlerList = ref([])
254 const spaceStr = ref("") 256 const spaceStr = ref("")
255 const cancelShow = ref(false) 257 const cancelShow = ref(false)
256 const currentCancelName = ref("") 258 const currentCancelName = ref("")
@@ -468,6 +470,7 @@ const createQrCodeValid = (val) =&gt; { @@ -468,6 +470,7 @@ const createQrCodeValid = (val) =&gt; {
468 * @param {string} putType 470 * @param {string} putType
469 */ 471 */
470 472
  473 +
471 const handleUploadImage = (orderId, putType) => { 474 const handleUploadImage = (orderId, putType) => {
472 const data = dataGram.value; 475 const data = dataGram.value;
473 476
@@ -482,6 +485,16 @@ const handleUploadImage = (orderId, putType) =&gt; { @@ -482,6 +485,16 @@ const handleUploadImage = (orderId, putType) =&gt; {
482 485
483 // 检查当前要上传的是第几趟 486 // 检查当前要上传的是第几趟
484 const currentGroupIndex = putOnImagesGrouped.value.length + 1; 487 const currentGroupIndex = putOnImagesGrouped.value.length + 1;
  488 +
  489 + // 如果handlerList中有数据且其garCarCount小于或等于图片列表长度,提示订单趟次已完成
  490 + if (handlerList.value && handlerList.value.length > 0 && handlerList.value[0].garCarCount !== undefined) {
  491 + const totalTrips = parseInt(handlerList.value[0].garCarCount);
  492 + if (putOnImagesGrouped.value.length >= totalTrips) {
  493 + uni.$u.toast('当前订单趟次已经运完');
  494 + return;
  495 + }
  496 + }
  497 +
485 if(number !== 0){ 498 if(number !== 0){
486 await queryGarOrderMatchAsks(orderId).then(res => { 499 await queryGarOrderMatchAsks(orderId).then(res => {
487 if (res.data.data === 0) { 500 if (res.data.data === 0) {
@@ -549,6 +562,13 @@ onShow(() =&gt; { @@ -549,6 +562,13 @@ onShow(() =&gt; {
549 } catch (error) { 562 } catch (error) {
550 console.log(error); 563 console.log(error);
551 } 564 }
  565 + queryByOrderNoDriver(orderId.value).then(res => {
  566 + if (res.data.success) {
  567 + handlerList.value = res.data.data
  568 + }
  569 + }).catch(err => {
  570 + console.error('获取订单信息失败:', err);
  571 + })
552 }) 572 })
553 </script> 573 </script>
554 574
garbage-removal/src/pages/order-info/order-other/detail/index.vue
@@ -120,6 +120,9 @@ @@ -120,6 +120,9 @@
120 <view class="order-detail-container-header-card-uicon"></view> 120 <view class="order-detail-container-header-card-uicon"></view>
121 车辆信息 121 车辆信息
122 </view> 122 </view>
  123 + <view style="margin-bottom: 8px">
  124 + 当前订单总计需发车次数:{{realCarCount}}
  125 + </view>
123 <view class="order-detail-container-box-card" v-if="driverList.length > 0"> 126 <view class="order-detail-container-box-card" v-if="driverList.length > 0">
124 <view class="driver-info-container"> 127 <view class="driver-info-container">
125 <view class="driver-info-row" v-for="(driver, index) in driverList" :key="index"> 128 <view class="driver-info-row" v-for="(driver, index) in driverList" :key="index">
@@ -130,27 +133,43 @@ @@ -130,27 +133,43 @@
130 </view> 133 </view>
131 </view> 134 </view>
132 <view class="order-detail-container-header-item" style="justify-content: space-between;" 135 <view class="order-detail-container-header-item" style="justify-content: space-between;"
133 - v-for="(item) in dataGram.garCarInfoList" :key="item.garId">  
134 - <text class="order-detail-container-header-title" style="color: #303133;">{{ item.garOrderCarType }} 136 + v-for="(item) in handlerList">
  137 + <text class="order-detail-container-header-title" style="color: #303133;">
  138 + {{item.garOrderHandlerName}}/{{ item.garHandlerCarCode }}/{{item.garOrderContainerVolume}}
135 </text> 139 </text>
136 <view class="order-detail-container-header-content"> 140 <view class="order-detail-container-header-content">
137 <text class="order-detail-container-header-title"> 141 <text class="order-detail-container-header-title">
138 - {{dataGram.garHandlerCarCode}}{{ cleanStatus(dataGram.garOrderHandlerStatus) }} 142 + 趟次:{{item.garCarCount}}车
139 </text> 143 </text>
140 </view> 144 </view>
141 </view> 145 </view>
  146 +
142 <view v-if="userType == '运输企业负责人'" class="order-detail-container-header-item" style="justify-content: space-between; align-items: center;"> 147 <view v-if="userType == '运输企业负责人'" class="order-detail-container-header-item" style="justify-content: space-between; align-items: center;">
143 - <text class="order-detail-container-header-title" style="color: #303133;">新增趟次:</text> 148 + <text class="order-detail-container-header-title" style="color: #303133;">分配趟次:</text>
  149 +
  150 + <select v-model="selectedHandlerTel" style="margin-left: 20rpx; width: 160rpx; height: 46rpx; border: 1px solid #DCDFE6; border-radius: 4px; padding: 0 10px; outline: none;">
  151 + <option value="">请选择分配人员</option>
  152 + <option value="ADD_TOTAL_TRIPS">新增总趟次</option>
  153 + <option
  154 + v-for="handler in handlerList"
  155 + :key="handler.garOrderHandlerTel"
  156 + :value="handler.garOrderHandlerTel">
  157 + {{ handler.garOrderHandlerName }}
  158 + </option>
  159 + </select>
  160 +
  161 +
144 <view class="order-detail-container-header-content" style="display: flex; align-items: center;"> 162 <view class="order-detail-container-header-content" style="display: flex; align-items: center;">
145 <u-number-box 163 <u-number-box
146 - v-model="totalCarNumber" 164 + v-model="carCount"
147 :min="0" 165 :min="0"
148 :max="999" 166 :max="999"
149 integer 167 integer
150 buttonSize="46" 168 buttonSize="46"
151 - inputWidth="100"> 169 + inputWidth="70">
152 </u-number-box> 170 </u-number-box>
153 - <u-button type="primary" color="#19a97c" style="margin-left: 20rpx; height: 46rpx; width: 120rpx;" @click="confirmAddVehicle">确定</u-button> 171 +<!-- :disabled="!isDriverAssigned"-->
  172 + <u-button type="primary" color="#19a97c" style="margin-left: 20rpx; height: 46rpx; width: 120rpx;" @click="confirmAddVehicle" >确定</u-button>
154 </view> 173 </view>
155 </view> 174 </view>
156 </view> 175 </view>
@@ -250,35 +269,31 @@ @@ -250,35 +269,31 @@
250 v-if="dataGram.garOrderScanHandlerFlag === 0 && userType == '用户' && dataGram.garOrderHandlerStatus != 3 && dataGram.garAskStatus != '1'" 269 v-if="dataGram.garOrderScanHandlerFlag === 0 && userType == '用户' && dataGram.garOrderHandlerStatus != 3 && dataGram.garAskStatus != '1'"
251 @click="handlerUpdateOrderClick()" shape="square" color="#19a97c" text="修改车辆数"></u-button> 270 @click="handlerUpdateOrderClick()" shape="square" color="#19a97c" text="修改车辆数"></u-button>
252 </view> 271 </view>
253 -  
254 - <view class="order-detail-bottom-center" v-if="dataGram.garOrderHandlerStatus === 0 && userType == '运输企业负责人' && dataGram.handleFlag && dataGram.garCancelFlag === 0">  
255 - <view class="button-group"> 272 + <view class="order-detail-bottom-center" v-show="showCenterButtons">
  273 + <!-- 修改按钮组容器类名和结构 -->
  274 + <view class="button-group-wrap" v-if="dataGram.garOrderHandlerStatus === 0 && userType == '运输企业负责人' && dataGram.handleFlag && dataGram.garCancelFlag === 0">
256 <u-button @click="handleOrderDispatchClick(orderId)" shape="square" color="#19a97c" text="分配驾驶员"></u-button> 275 <u-button @click="handleOrderDispatchClick(orderId)" shape="square" color="#19a97c" text="分配驾驶员"></u-button>
257 <u-button @click="handleDisposalDispatchClick(orderId)" shape="square" color="#19a97c" text="分配处置场所"></u-button> 276 <u-button @click="handleDisposalDispatchClick(orderId)" shape="square" color="#19a97c" text="分配处置场所"></u-button>
258 <u-button 277 <u-button
259 @click="handleOrder(orderId)" 278 @click="handleOrder(orderId)"
260 shape="square" 279 shape="square"
261 color="#19a97c" 280 color="#19a97c"
262 - text="处理订单" 281 + text="开始运输"
263 :disabled="!isDriverAndDisposalAssigned()"> 282 :disabled="!isDriverAndDisposalAssigned()">
264 </u-button> 283 </u-button>
265 </view> 284 </view>
266 - </view>  
267 285
268 - <view class="order-detail-bottom-center" v-else-if="dataGram.garOrderHandlerStatus === 1 && userType == '运输企业负责人'">  
269 - <view class="button-group">  
270 - <u-button @click="handleOrderDispatchClick(orderId)" shape="square" color="#19a97c" text="重新分配驾驶员"></u-button>  
271 - <u-button @click="handleDisposalDispatchClick(orderId)" shape="square" color="#19a97c" text="重新分配处置场所"></u-button> 286 + <view class="button-group-spread" v-else-if="!isAllTripsCompleted()">
  287 + <u-button class="btn-left" @click="handleOrderDispatchClick(orderId)" shape="square" color="#19a97c" text="重新分配驾驶员"></u-button>
  288 + <u-button class="btn-right" @click="handleDisposalDispatchClick(orderId)" shape="square" color="#19a97c" text="重新分配处置场所"></u-button>
272 </view> 289 </view>
273 - </view>  
274 -  
275 290
276 -  
277 - <view class="order-detail-bottom-center" v-else-if="dataGram.garOrderHandlerStatus === 1 && userType == '运输企业负责人' && isAllTripsCompleted()">  
278 - <u-button @click="handleSubmitSuccess(orderId)" shape="square" color="#19a97c" text="完成订单"></u-button> 291 + <view v-else-if="dataGram.garOrderHandlerStatus === 1 && userType == '运输企业负责人' && isAllTripsCompleted()">
  292 + <u-button @click="handleSubmitSuccess(orderId)" shape="square" color="#19a97c" text="完成订单"></u-button>
  293 + </view>
279 </view> 294 </view>
280 295
281 - <view class="order-detail-bottom-right"> 296 + <view class="order-detail-bottom-right" v-show="showRightButtons">
282 <u-button 297 <u-button
283 v-if="dataGram.garOrderHandlerStatus === 0 && userType == '用户' && dataGram.garCancelFlag === 0" 298 v-if="dataGram.garOrderHandlerStatus === 0 && userType == '用户' && dataGram.garCancelFlag === 0"
284 @click="handleOderCancelClick()" shape="square" color="#19a97c" text="取消订单"></u-button> 299 @click="handleOderCancelClick()" shape="square" color="#19a97c" text="取消订单"></u-button>
@@ -340,7 +355,7 @@ @@ -340,7 +355,7 @@
340 queryOrderDetail, 355 queryOrderDetail,
341 queryOrderDispatch, sendToDriver, updateGarRealCarCount, 356 queryOrderDispatch, sendToDriver, updateGarRealCarCount,
342 updateOrder, 357 updateOrder,
343 - queryCarCode 358 + queryCarCode, queryByOrderNo, updateCarCount, queryGarRealCarCountByGarOrderNo
344 } from "@/apis/order.js"; 359 } from "@/apis/order.js";
345 import { 360 import {
346 createQrCode 361 createQrCode
@@ -356,9 +371,9 @@ @@ -356,9 +371,9 @@
356 onLoad, 371 onLoad,
357 onShow 372 onShow
358 } from '@dcloudio/uni-app'; 373 } from '@dcloudio/uni-app';
359 - import {  
360 - computed  
361 - } from 'vue'; 374 + import {
  375 + computed, watch
  376 + } from 'vue';
362 import { ref } from 'vue'; 377 import { ref } from 'vue';
363 const paramFrom = ref({ 378 const paramFrom = ref({
364 carNumber: 0, 379 carNumber: 0,
@@ -375,6 +390,12 @@ @@ -375,6 +390,12 @@
375 const clashDisposalDispatchRef = ref() 390 const clashDisposalDispatchRef = ref()
376 const driverPersonnelList = ref([]) 391 const driverPersonnelList = ref([])
377 const disposalPersonnelList = ref([]) 392 const disposalPersonnelList = ref([])
  393 + const handlerList = ref([])
  394 + const orderNo = ref(null)
  395 + const carCount = ref(null)
  396 + const tel = ref(null)
  397 + const selectedHandlerTel = ref("")
  398 + const realCarCount = ref(null)
378 const store = useMainStore(); 399 const store = useMainStore();
379 const userType = computed(() => store.userType) 400 const userType = computed(() => store.userType)
380 const dataGram = ref(); 401 const dataGram = ref();
@@ -394,7 +415,7 @@ @@ -394,7 +415,7 @@
394 const garCarLabelInfoList = ref({}) 415 const garCarLabelInfoList = ref({})
395 const garCarLabelInfoNow = ref() 416 const garCarLabelInfoNow = ref()
396 const driverAssigned = ref(false); // 添加这行,跟踪驾驶员是否已分配 417 const driverAssigned = ref(false); // 添加这行,跟踪驾驶员是否已分配
397 -const disposalAssigned = ref(false); // 添加这行,跟踪处置场所是否已分配 418 + const disposalAssigned = ref(false); // 添加这行,跟踪处置场所是否已分配
398 419
399 const list = computed(() => { 420 const list = computed(() => {
400 let reason = [{ 421 let reason = [{
@@ -421,6 +442,10 @@ const disposalAssigned = ref(false); // 添加这行,跟踪处置场所是否 @@ -421,6 +442,10 @@ const disposalAssigned = ref(false); // 添加这行,跟踪处置场所是否
421 return reason 442 return reason
422 }) 443 })
423 444
  445 + const isDriverAssigned = computed(() => {
  446 + // 检查是否有分配的驾驶员
  447 + return driverList.value && driverList.value.length > 0;
  448 + });
424 const isDriverAndDisposalAssigned = () => { 449 const isDriverAndDisposalAssigned = () => {
425 // 直接使用已有的响应式变量来判断分配状态 450 // 直接使用已有的响应式变量来判断分配状态
426 const hasDrivers = driverAssigned.value; 451 const hasDrivers = driverAssigned.value;
@@ -442,6 +467,7 @@ const disposalAssigned = ref(false); // 添加这行,跟踪处置场所是否 @@ -442,6 +467,7 @@ const disposalAssigned = ref(false); // 添加这行,跟踪处置场所是否
442 const completedTrips = putOnImagesGrouped.value.length; 467 const completedTrips = putOnImagesGrouped.value.length;
443 468
444 // 如果完成的趟次数大于等于要求的趟次数,则表示全部运完 469 // 如果完成的趟次数大于等于要求的趟次数,则表示全部运完
  470 + console.log("实际完成次数" + completedTrips + "要求次数" + requiredTrips)
445 return completedTrips >= requiredTrips; 471 return completedTrips >= requiredTrips;
446 } 472 }
447 473
@@ -461,27 +487,104 @@ const disposalAssigned = ref(false); // 添加这行,跟踪处置场所是否 @@ -461,27 +487,104 @@ const disposalAssigned = ref(false); // 添加这行,跟踪处置场所是否
461 }); 487 });
462 }; 488 };
463 489
  490 + watch(selectedHandlerTel, (newVal) => {
  491 + tel.value = newVal;
  492 + });
  493 +
  494 + const refreshOrderData = () => {
  495 + // 刷新处理人员列表
  496 + queryByOrderNo(orderNo.value).then(res => {
  497 + if (res.data.success) {
  498 + handlerList.value = res.data.data
  499 + }
  500 + }).catch(err => {
  501 + console.error('获取订单信息失败:', err);
  502 + })
  503 +
  504 + // 刷新总趟次数
  505 + queryGarRealCarCountByGarOrderNo(orderNo.value).then(res => {
  506 + if (res.data.success) {
  507 + realCarCount.value = res.data.data
  508 + }
  509 + })
  510 + };
  511 +
  512 +
  513 +
464 const confirmAddVehicle = () => { 514 const confirmAddVehicle = () => {
465 - console.log('新增车辆数量:', totalCarNumber.value); 515 + console.log('新增车辆数量:', carCount.value);
  516 + console.log('选中处理人员电话:', tel.value);
  517 +
  518 + // 检查必填字段
  519 + if (!carCount.value) {
  520 + uni.$u.toast(`请选择分配的趟次!`);
  521 + return;
  522 + }
  523 + if (!tel.value) {
  524 + uni.$u.toast(`请选择分配人员!`);
  525 + return;
  526 + }
  527 +
  528 +
  529 + if (selectedHandlerTel.value === 'ADD_TOTAL_TRIPS') {
  530 + const newTotalTrips = (realCarCount.value || 0) + carCount.value;
  531 + updateGarRealCarCount(orderId.value, carCount.value)
  532 + .then(res => {
  533 + if (res.data.success) {
  534 + uni.$u.toast(`总趟次更新成功!`);
  535 + // 刷新订单详情
  536 + handleOrderDetail(orderId.value);
  537 + refreshOrderData()
  538 + } else {
  539 + uni.$u.toast(`总趟次更新失败!`);
  540 + }
  541 + })
  542 + .catch(err => {
  543 + uni.$u.toast('总趟次更新请求失败');
  544 + console.error('总趟次更新失败:', err);
  545 + });
  546 + return;
  547 + }
  548 +
  549 + // 检查已分配趟次总和是否超过订单要求的总发车次数
  550 + const allocatedTrips = handlerList.value.reduce((sum, handler) => sum + parseInt(handler.garCarCount || 0), 0);
  551 + const totalRequiredTrips = realCarCount.value || 0;
  552 +
  553 + console.log('已分配趟次总和:', allocatedTrips);
  554 + console.log('总需求趟次:', totalRequiredTrips);
  555 +
  556 + if (allocatedTrips >= totalRequiredTrips) {
  557 + uni.$u.toast(`全部趟次已分配完成,无需再分配!`);
  558 + return;
  559 + }
  560 +
  561 + // 检查本次分配后是否会超过总发车次数
  562 + if (allocatedTrips + carCount.value > totalRequiredTrips) {
  563 + uni.$u.toast(`分配趟次过多,最多只能再分配${totalRequiredTrips - allocatedTrips}趟!`);
  564 + return;
  565 + }
466 566
467 // 调用API传递订单ID和新增车辆数量 567 // 调用API传递订单ID和新增车辆数量
468 - updateGarRealCarCount(orderId.value, totalCarNumber.value) 568 + const params = {
  569 + carCount: carCount.value,
  570 + tel: tel.value
  571 + };
  572 +
  573 + updateCarCount(params)
469 .then(res => { 574 .then(res => {
470 if (res.data.success) { 575 if (res.data.success) {
471 - uni.$u.toast(`成功新增${totalCarNumber.value}辆车`);  
472 - getGarOrderMatchHandlers(orderId.value).then(res => {  
473 - console.log('司机列表:', res.data);  
474 - if (res.data.success && res.data.data && res.data.data.length > 0) {  
475 - driverListForAssignment.value = res.data.data;  
476 - driverListPopupShowFlag.value = true;  
477 - }  
478 - })  
479 - // 重置输入框  
480 - totalCarNumber.value = 0; 576 + uni.$u.toast(`分配成功!`);
481 // 刷新订单详情 577 // 刷新订单详情
482 handleOrderDetail(orderId.value); 578 handleOrderDetail(orderId.value);
  579 + queryByOrderNo(orderNo.value).then(res => {
  580 + if (res.data.success) {
  581 + handlerList.value = res.data.data
  582 + }
  583 + }).catch(err => {
  584 + console.error('获取订单信息失败:', err);
  585 + })
483 } else { 586 } else {
484 - uni.$u.toast(res.data.msg || '新增车辆失败'); 587 + uni.$u.toast(`分配失败!`);
485 } 588 }
486 }) 589 })
487 .catch(err => { 590 .catch(err => {
@@ -944,13 +1047,33 @@ const handleDriverDispatchConfirm = (val) =&gt; { @@ -944,13 +1047,33 @@ const handleDriverDispatchConfirm = (val) =&gt; {
944 } 1047 }
945 }); 1048 });
946 } 1049 }
  1050 + const showLeftButtons = computed(() => {
  1051 + return (dataGram.value?.garOrderHandlerStatus === 0 && userType.value == '运输企业负责人' && dataGram.value?.garCancelFlag === 0) ||
  1052 + (dataGram.value?.garOrderScanHandlerFlag === 0 && userType.value == '用户' && dataGram.value?.garOrderHandlerStatus != 3 && dataGram.value?.garAskStatus != '1');
  1053 + });
  1054 +
  1055 + const showCenterButtons = computed(() => {
  1056 + return (dataGram.value?.garOrderHandlerStatus === 0 && userType.value == '运输企业负责人' && dataGram.value?.handleFlag && dataGram.value?.garCancelFlag === 0) ||
  1057 + (dataGram.value?.garOrderHandlerStatus === 1 && userType.value == '运输企业负责人') ||
  1058 + (dataGram.value?.garOrderHandlerStatus === 1 && userType.value == '运输企业负责人' && isAllTripsCompleted());
  1059 + });
  1060 +
  1061 + const showRightButtons = computed(() => {
  1062 + return (dataGram.value?.garOrderHandlerStatus === 0 && userType.value == '用户' && dataGram.value?.garCancelFlag === 0) ||
  1063 + (dataGram.value?.garEvaluateFlag === 0 && userType.value === '用户') ||
  1064 + (dataGram.value?.garHandlerEvaluateFlag === 0 && userType.value === '运输企业负责人' && dataGram.value?.haveEvaluateOfClient == 1) ||
  1065 + (dataGram.value?.garHandlerEvaluateFlag === 1 && userType.value === '运输企业负责人' && dataGram.value?.haveEvaluateOfClient == 1) ||
  1066 + (dataGram.value?.garEvaluateFlag === 1 && userType.value === '用户');
  1067 + });
947 1068
948 /** 1069 /**
949 * 初始化信息 1070 * 初始化信息
950 */ 1071 */
951 onLoad((options) => { 1072 onLoad((options) => {
952 orderId.value = options.orderId 1073 orderId.value = options.orderId
  1074 + orderNo.value = options.orderId
953 handleOrderDetail(orderId.value) 1075 handleOrderDetail(orderId.value)
  1076 + refreshOrderData()
954 }) 1077 })
955 1078
956 onShow(() => { 1079 onShow(() => {
@@ -997,6 +1120,7 @@ const handleDriverDispatchConfirm = (val) =&gt; { @@ -997,6 +1120,7 @@ const handleDriverDispatchConfirm = (val) =&gt; {
997 flex: 1; 1120 flex: 1;
998 display: flex; 1121 display: flex;
999 justify-content: center; 1122 justify-content: center;
  1123 + width: 100%; // 确保占满可用宽度
1000 1124
1001 .button-group { 1125 .button-group {
1002 display: flex; 1126 display: flex;
@@ -1007,6 +1131,30 @@ const handleDriverDispatchConfirm = (val) =&gt; { @@ -1007,6 +1131,30 @@ const handleDriverDispatchConfirm = (val) =&gt; {
1007 white-space: nowrap; 1131 white-space: nowrap;
1008 } 1132 }
1009 } 1133 }
  1134 +
  1135 + // 修复重新分配按钮的样式(重点修改这里)
  1136 + .button-group-spread {
  1137 + display: flex;
  1138 + justify-content: space-between; // 两端对齐
  1139 + align-items: center; // 垂直居中
  1140 + width: 100%; // 占满父容器宽度
  1141 + padding: 0; // 移除左右内边距,让按钮更贴边
  1142 + gap: 40rpx; // 中间间距(可根据需要调整大小)
  1143 +
  1144 + .btn-left {
  1145 + margin-right: auto; // 强制靠左
  1146 + }
  1147 +
  1148 + .btn-right {
  1149 + margin-left: auto; // 强制靠右
  1150 + }
  1151 +
  1152 + u-button {
  1153 + min-width: 220rpx; // 固定最小宽度,确保按钮宽度一致
  1154 + white-space: nowrap;
  1155 + padding: 0 30rpx; // 按钮内部左右 padding,让按钮更舒展
  1156 + }
  1157 + }
1010 } 1158 }
1011 1159
1012 .order-detail-bottom-right { 1160 .order-detail-bottom-right {
@@ -1098,56 +1246,92 @@ const handleDriverDispatchConfirm = (val) =&gt; { @@ -1098,56 +1246,92 @@ const handleDriverDispatchConfirm = (val) =&gt; {
1098 } 1246 }
1099 1247
1100 1248
1101 - .order-detail-bottom {  
1102 - position: absolute;  
1103 - width: 100%;  
1104 - // height: 100%;  
1105 - bottom: 0;  
1106 - left: 0;  
1107 -  
1108 - .movableAreaDetail {  
1109 - pointer-events: none;  
1110 - position: fixed;  
1111 - left: 0;  
1112 - top: 0;  
1113 - width: 100%;  
1114 - height: calc(100% - $custom-bottom-height);  
1115 - z-index: 999; 1249 + .order-detail-bottom {
  1250 + position: fixed; // 改为fixed定位,确保始终在底部
  1251 + width: 100%;
  1252 + bottom: 0;
  1253 + left: 0;
  1254 + background-color: #fff; // 添加背景色,避免穿透
  1255 + box-shadow: 0 -2rpx 10rpx rgba(0,0,0,0.05); // 添加阴影,提升层次感
  1256 + padding: 20rpx $custom-page-padding; // 上下内边距,左右和页面一致
  1257 + box-sizing: border-box;
1116 1258
1117 - .movableView {  
1118 - pointer-events: auto;  
1119 - min-height: 60rpx;  
1120 - min-width: 60rpx; 1259 + .order-detail-bottom-box {
  1260 + height: auto; // 取消固定高度,自适应内容
  1261 + padding: 0; // 移除原有内边距
  1262 + display: flex;
  1263 + flex-wrap: wrap; // 允许换行
  1264 + gap: 16rpx; // 按钮之间统一间距
  1265 + align-items: center;
  1266 + }
1121 1267
1122 - .order-detail-call-box-container {  
1123 - min-height: 60rpx;  
1124 - min-width: 60rpx;  
1125 - display: flex;  
1126 - align-items: center;  
1127 - justify-content: center;  
1128 - background-color: #19a97c;  
1129 - border-radius: 100%;  
1130 - }  
1131 - }  
1132 - } 1268 + // 左中右三个区域统一处理
  1269 + .order-detail-bottom-left,
  1270 + .order-detail-bottom-center,
  1271 + .order-detail-bottom-right {
  1272 + min-width: auto; // 取消最小宽度限制
  1273 + flex: 1; // 三个区域平均分配宽度
  1274 + display: flex;
  1275 + justify-content: center;
  1276 + align-items: center;
  1277 + }
1133 1278
1134 - .order-detail-bottom-box {  
1135 - height: $custom-bottom-height;  
1136 - padding: 50rpx;  
1137 - box-sizing: border-box;  
1138 - display: flex;  
1139 - justify-content: space-between;  
1140 - align-items: center; 1279 + // 左侧区域单独处理(取消订单按钮)
  1280 + .order-detail-bottom-left {
  1281 + justify-content: flex-start;
  1282 + }
1141 1283
1142 - .order-detail-bottom-left {  
1143 - min-width: 200rpx;  
1144 - } 1284 + // 右侧区域单独处理(评价相关按钮)
  1285 + .order-detail-bottom-right {
  1286 + justify-content: flex-end;
  1287 + }
  1288 + }
1145 1289
1146 - .order-detail-bottom-right {  
1147 - min-width: 200rpx;  
1148 - }  
1149 - }  
1150 - } 1290 + // 中间按钮组优化(分配/处理订单按钮)
  1291 + .order-detail-bottom-center {
  1292 + .button-group-wrap {
  1293 + display: flex;
  1294 + flex-wrap: wrap; // 超出时自动换行
  1295 + gap: 16rpx; // 按钮之间间距
  1296 + justify-content: center;
  1297 + width: 100%;
  1298 + }
  1299 +
  1300 + // 单个按钮样式统一优化
  1301 + u-button {
  1302 + flex: 0 0 auto; // 不自动拉伸
  1303 + min-width: 180rpx; // 最小宽度,确保按钮不会太窄
  1304 + max-width: 240rpx; // 最大宽度,避免过宽
  1305 + height: 72rpx; // 统一按钮高度
  1306 + line-height: 72rpx; // 垂直居中
  1307 + font-size: 26rpx; // 字体大小优化
  1308 + padding: 0 20rpx;
  1309 + border-radius: 36rpx; // 圆角优化,更美观
  1310 + }
  1311 +
  1312 + // 重新分配按钮组样式
  1313 + .button-group-spread {
  1314 + display: flex;
  1315 + justify-content: space-between;
  1316 + align-items: center;
  1317 + width: 100%;
  1318 + gap: 16rpx; // 中间间距
  1319 + }
  1320 + }
  1321 +
  1322 + // 适配小屏幕,当按钮过多时自动换行
  1323 + @media (max-width: 375px) {
  1324 + .order-detail-bottom-box {
  1325 + gap: 12rpx;
  1326 + }
  1327 +
  1328 + .order-detail-bottom-center u-button {
  1329 + min-width: 160rpx;
  1330 + font-size: 24rpx;
  1331 + height: 68rpx;
  1332 + line-height: 68rpx;
  1333 + }
  1334 + }
1151 } 1335 }
1152 1336
1153 .mask-container { 1337 .mask-container {