优化项目细节和sql查询
This commit is contained in:
@@ -22,12 +22,13 @@
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
:key="`order-select-${orderList.length}`"
|
||||
@change="handleOrderChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in orderList"
|
||||
:key="item.id"
|
||||
:label="`订单${item.id} - 买方: ${item.buyerName} | 卖方: ${item.sellerName} | 单价: ${item.firmPrice}元/斤`"
|
||||
:key="`order-${item.id}`"
|
||||
:label="`订单${item.id} - 买方: ${item.buyerName || '--'} | 卖方: ${item.sellerName || '--'} | 单价: ${item.firmPrice ? (item.firmPrice + '元/斤') : '--'}`"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
@@ -35,6 +36,54 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 已关联订单管理区域 -->
|
||||
<el-row :gutter="20" v-if="formData.editId && associatedOrders.length > 0">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="已关联订单">
|
||||
<el-table :data="associatedOrders" border size="small" style="width: 100%">
|
||||
<el-table-column label="订单ID" prop="id" width="100">
|
||||
<template #default="scope">
|
||||
{{ scope.row.id || '--' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="买方" prop="buyerName" width="150">
|
||||
<template #default="scope">
|
||||
{{ scope.row.buyerName || '--' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="卖方" prop="sellerName" width="150">
|
||||
<template #default="scope">
|
||||
{{ scope.row.sellerName || '--' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单价" prop="firmPrice" width="120">
|
||||
<template #default="scope">
|
||||
{{ scope.row.firmPrice ? (scope.row.firmPrice + ' 元/斤') : '--' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="结算方式" prop="settlementTypeDesc" width="120">
|
||||
<template #default="scope">
|
||||
{{ scope.row.settlementTypeDesc || '--' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="100" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
size="small"
|
||||
@click="unbindOrder(scope.row.id)"
|
||||
:loading="unbindingOrderId === scope.row.id"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="车牌号" prop="plateNumber">
|
||||
@@ -219,26 +268,53 @@
|
||||
<el-input v-model="formData.quarantineCertNo" placeholder="请输入检疫证号(可选)" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="空车过磅重量" prop="emptyWeight">
|
||||
<el-input-number
|
||||
v-model="formData.emptyWeight"
|
||||
placeholder="请输入空车过磅重量(kg)"
|
||||
:precision="2"
|
||||
:min="0"
|
||||
:step="0.01"
|
||||
:controls-position="'right'"
|
||||
style="width: 100%"
|
||||
class="weight-input-number"
|
||||
>
|
||||
<template #append>kg</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="空车过磅重量" prop="emptyWeight">
|
||||
<el-input-number v-model="formData.emptyWeight" placeholder="请输入空车过磅重量" :precision="2" style="width: 100%">
|
||||
<template #append>kg</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="装车过磅重量" prop="entruckWeight">
|
||||
<el-input-number v-model="formData.entruckWeight" placeholder="请输入装车过磅重量" :precision="2" style="width: 100%">
|
||||
<el-input-number
|
||||
v-model="formData.entruckWeight"
|
||||
placeholder="请输入装车过磅重量(kg)"
|
||||
:precision="2"
|
||||
:min="0"
|
||||
:step="0.01"
|
||||
:controls-position="'right'"
|
||||
style="width: 100%"
|
||||
class="weight-input-number"
|
||||
>
|
||||
<template #append>kg</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="落地过磅重量" prop="landingEntruckWeight">
|
||||
<el-input-number v-model="formData.landingEntruckWeight" placeholder="请输入落地过磅重量" :precision="2" style="width: 100%">
|
||||
<el-input-number
|
||||
v-model="formData.landingEntruckWeight"
|
||||
placeholder="请输入落地过磅重量(kg)"
|
||||
:precision="2"
|
||||
:min="0"
|
||||
:step="0.01"
|
||||
:controls-position="'right'"
|
||||
style="width: 100%"
|
||||
class="weight-input-number"
|
||||
>
|
||||
<template #append>kg</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
@@ -279,7 +355,7 @@
|
||||
</el-divider>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="检疫票" prop="quarantineTickeyUrl">
|
||||
<el-form-item label="检疫票" prop="quarantineTickeyUrl" label-width="180px">
|
||||
<div class="photo-upload-wrapper">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
@@ -322,7 +398,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="传纸质磅单(双章)" prop="poundListImg">
|
||||
<el-form-item label="发车纸质磅单(双章)" prop="poundListImg" label-width="180px">
|
||||
<div class="photo-upload-wrapper">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
@@ -367,7 +443,7 @@
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="车辆空磅上磅车头照片" prop="emptyVehicleFrontPhoto">
|
||||
<el-form-item label="车辆空磅上磅车头照片" prop="emptyVehicleFrontPhoto" label-width="180px">
|
||||
<div class="photo-upload-wrapper">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
@@ -410,7 +486,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="车辆过重磅车头照片" prop="loadedVehicleFrontPhoto">
|
||||
<el-form-item label="车辆过重磅车头照片" prop="loadedVehicleFrontPhoto" label-width="180px">
|
||||
<div class="photo-upload-wrapper">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
@@ -455,7 +531,7 @@
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="车辆重磅照片" prop="loadedVehicleWeightPhoto">
|
||||
<el-form-item label="车辆重磅侧方照片" prop="loadedVehicleWeightPhoto" label-width="180px">
|
||||
<div class="photo-upload-wrapper">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
@@ -498,7 +574,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="驾驶员手持身份证站车头照片" prop="driverIdCardPhoto">
|
||||
<el-form-item label="驾驶员手持身份证站车头照片" prop="driverIdCardPhoto" label-width="180px">
|
||||
<div class="photo-upload-wrapper">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
@@ -543,7 +619,7 @@
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="到地纸质磅单(双章)" prop="destinationPoundListImg">
|
||||
<el-form-item label="落地纸质磅单(双章)" prop="destinationPoundListImg" label-width="180px">
|
||||
<div class="photo-upload-wrapper">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
@@ -586,7 +662,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="到地车辆过重磅车头照片" prop="destinationVehicleFrontPhoto">
|
||||
<el-form-item label="落地车辆过重磅车头照片" prop="destinationVehicleFrontPhoto" label-width="180px">
|
||||
<div class="photo-upload-wrapper">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
@@ -636,7 +712,7 @@
|
||||
</el-divider>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="装车过磅视频" prop="entruckWeightVideo">
|
||||
<el-form-item label="装车过磅视频" prop="entruckWeightVideo" label-width="180px">
|
||||
<el-upload
|
||||
accept=".mp4,.avi,.rmvb,.mkv,.MP4,.AVI,.RMVB,.MKV"
|
||||
class="upload-demo"
|
||||
@@ -663,7 +739,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="空车过磅视频" prop="emptyWeightVideo">
|
||||
<el-form-item label="空车过磅视频" prop="emptyWeightVideo" label-width="180px">
|
||||
<el-upload
|
||||
accept=".mp4,.avi,.rmvb,.mkv,.MP4,.AVI,.RMVB,.MKV"
|
||||
class="upload-demo"
|
||||
@@ -692,7 +768,7 @@
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="装牛视频" prop="cattleLoadingVideo">
|
||||
<el-form-item label="装牛视频" prop="cattleLoadingVideo" label-width="180px">
|
||||
<el-upload
|
||||
accept=".mp4,.avi,.rmvb,.mkv,.MP4,.AVI,.RMVB,.MKV"
|
||||
class="upload-demo"
|
||||
@@ -719,7 +795,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="控槽视频" prop="controlSlotVideo">
|
||||
<el-form-item label="控槽视频" prop="controlSlotVideo" label-width="180px">
|
||||
<el-upload
|
||||
accept=".mp4,.avi,.rmvb,.mkv,.MP4,.AVI,.RMVB,.MKV"
|
||||
class="upload-demo"
|
||||
@@ -748,7 +824,7 @@
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="装完牛绕车一圈视频" prop="cattleLoadingCircleVideo">
|
||||
<el-form-item label="装完牛绕车一圈视频" prop="cattleLoadingCircleVideo" label-width="180px">
|
||||
<el-upload
|
||||
accept=".mp4,.avi,.rmvb,.mkv,.MP4,.AVI,.RMVB,.MKV"
|
||||
class="upload-demo"
|
||||
@@ -775,7 +851,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="卸牛视频" prop="unloadCattleVideo">
|
||||
<el-form-item label="卸牛视频" prop="unloadCattleVideo" label-width="180px">
|
||||
<el-upload
|
||||
accept=".mp4,.avi,.rmvb,.mkv,.MP4,.AVI,.RMVB,.MKV"
|
||||
class="upload-demo"
|
||||
@@ -804,7 +880,7 @@
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="到地过磅视频" prop="destinationWeightVideo">
|
||||
<el-form-item label="落地过磅视频" prop="destinationWeightVideo" label-width="180px">
|
||||
<el-upload
|
||||
accept=".mp4,.avi,.rmvb,.mkv,.MP4,.AVI,.RMVB,.MKV"
|
||||
class="upload-demo"
|
||||
@@ -832,7 +908,7 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-form-item label="备注" prop="remark" label-width="180px">
|
||||
<el-input
|
||||
v-model="formData.remark"
|
||||
type="textarea"
|
||||
@@ -907,11 +983,11 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, computed, watch } from 'vue';
|
||||
import { ref, reactive, computed, watch, nextTick } from 'vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { ElImageViewer } from 'element-plus';
|
||||
import { Plus, UploadFilled, Delete, ZoomIn } from '@element-plus/icons-vue';
|
||||
import { createDelivery, updateDeviceDeliveryId, orderPageQuery, getDeliveryDetail, updateOrderDeliveryId } from '@/api/shipping.js';
|
||||
import { createDelivery, updateDeviceDeliveryId, orderPageQuery, getDeliveryDetail, updateOrderDeliveryId, getOrdersByDeliveryId, unbindOrderFromDelivery } from '@/api/shipping.js';
|
||||
import * as shippingApi from '@/api/shipping.js';
|
||||
import { driverList as fetchDriverList, vehicleList as fetchVehicleList } from '@/api/userManage.js';
|
||||
import { iotDeviceQueryList } from '@/api/hardware.js';
|
||||
@@ -934,6 +1010,8 @@ const collarList = ref([]);
|
||||
const driverOptions = ref([]);
|
||||
const vehicleOptions = ref([]);
|
||||
const orderList = ref([]);
|
||||
const associatedOrders = ref([]); // 已关联的订单列表
|
||||
const unbindingOrderId = ref(null); // 正在解除关联的订单ID
|
||||
const showStartLocationMap = ref(false);
|
||||
const showEndLocationMap = ref(false);
|
||||
|
||||
@@ -973,7 +1051,7 @@ const formData = reactive({
|
||||
loadedVehicleFrontPhoto: '',
|
||||
loadedVehicleWeightPhoto: '',
|
||||
driverIdCardPhoto: '',
|
||||
// 到地相关照片
|
||||
// 落地相关照片
|
||||
destinationPoundListImg: '',
|
||||
destinationVehicleFrontPhoto: '',
|
||||
// 视频
|
||||
@@ -1169,6 +1247,44 @@ const open = async (editData = null) => {
|
||||
loadOrderList()
|
||||
]);
|
||||
|
||||
// 如果是编辑模式,加载已关联的订单
|
||||
if (editData && editData.id) {
|
||||
await loadAssociatedOrders(editData.id);
|
||||
|
||||
// 将已关联的订单补充到订单列表中(确保下拉框能正确显示)
|
||||
// 必须在填充表单之前完成,这样formData.orderIds填充时,orderList中已有完整信息
|
||||
if (associatedOrders.value.length > 0) {
|
||||
associatedOrders.value.forEach(associatedOrder => {
|
||||
// 检查订单列表中是否已存在该订单
|
||||
const exists = orderList.value.find(order => order.id === associatedOrder.id);
|
||||
if (!exists) {
|
||||
// 如果不存在,添加到订单列表中
|
||||
orderList.value.push(associatedOrder);
|
||||
console.log('[ORDER-LIST] 补充订单到列表:', associatedOrder);
|
||||
} else {
|
||||
// 如果存在但信息不完整,更新订单信息
|
||||
let updated = false;
|
||||
if (!exists.buyerName && associatedOrder.buyerName) {
|
||||
exists.buyerName = associatedOrder.buyerName;
|
||||
updated = true;
|
||||
}
|
||||
if (!exists.sellerName && associatedOrder.sellerName) {
|
||||
exists.sellerName = associatedOrder.sellerName;
|
||||
updated = true;
|
||||
}
|
||||
if (!exists.firmPrice && associatedOrder.firmPrice) {
|
||||
exists.firmPrice = associatedOrder.firmPrice;
|
||||
updated = true;
|
||||
}
|
||||
if (updated) {
|
||||
console.log('[ORDER-LIST] 更新订单信息:', exists);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
associatedOrders.value = [];
|
||||
}
|
||||
|
||||
// 标记开始恢复缓存,避免watch触发
|
||||
isRestoringFromCache.value = true;
|
||||
@@ -1176,6 +1292,38 @@ const open = async (editData = null) => {
|
||||
// 如果传入了编辑数据,则填充表单(编辑模式)
|
||||
if (editData) {
|
||||
fillFormWithEditData(editData);
|
||||
|
||||
// 填充表单后,再次确保orderList中有完整的订单信息(使用nextTick确保DOM已更新)
|
||||
await nextTick();
|
||||
if (formData.orderIds && formData.orderIds.length > 0) {
|
||||
formData.orderIds.forEach(orderId => {
|
||||
const existsInOrderList = orderList.value.find(order => order.id === orderId);
|
||||
if (!existsInOrderList) {
|
||||
// 从associatedOrders中查找并补充
|
||||
const associatedOrder = associatedOrders.value.find(order => order.id === orderId);
|
||||
if (associatedOrder) {
|
||||
orderList.value.push(associatedOrder);
|
||||
console.log('[AFTER-FILL] 补充订单到orderList:', associatedOrder);
|
||||
}
|
||||
} else {
|
||||
// 如果存在但信息不完整,从associatedOrders中更新
|
||||
const associatedOrder = associatedOrders.value.find(order => order.id === orderId);
|
||||
if (associatedOrder) {
|
||||
if (!existsInOrderList.buyerName && associatedOrder.buyerName) {
|
||||
existsInOrderList.buyerName = associatedOrder.buyerName;
|
||||
}
|
||||
if (!existsInOrderList.sellerName && associatedOrder.sellerName) {
|
||||
existsInOrderList.sellerName = associatedOrder.sellerName;
|
||||
}
|
||||
if (!existsInOrderList.firmPrice && associatedOrder.firmPrice) {
|
||||
existsInOrderList.firmPrice = associatedOrder.firmPrice;
|
||||
}
|
||||
console.log('[AFTER-FILL] 更新订单信息:', existsInOrderList);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 编辑模式:尝试从缓存恢复数据(如果缓存存在,用于补充未填充的字段)
|
||||
const delivery = editData.delivery || editData;
|
||||
if (delivery.id) {
|
||||
@@ -1239,16 +1387,58 @@ const fillFormWithEditData = (editData) => {
|
||||
|
||||
// 基本信息(将逗号分隔的订单ID字符串转换为数组)
|
||||
if (delivery.orderId) {
|
||||
let orderIdArray = [];
|
||||
if (typeof delivery.orderId === 'string') {
|
||||
// 如果是字符串,按逗号分割
|
||||
formData.orderIds = delivery.orderId.split(',').map(id => parseInt(id.trim())).filter(id => !isNaN(id));
|
||||
// 如果是字符串,按逗号分割并转换为整数数组
|
||||
orderIdArray = delivery.orderId.split(',').map(id => parseInt(id.trim())).filter(id => !isNaN(id));
|
||||
} else if (Array.isArray(delivery.orderId)) {
|
||||
// 如果已经是数组,直接使用
|
||||
formData.orderIds = delivery.orderId;
|
||||
// 如果已经是数组,确保转换为整数数组
|
||||
orderIdArray = delivery.orderId.map(id => {
|
||||
if (typeof id === 'number') {
|
||||
return id;
|
||||
} else if (typeof id === 'string') {
|
||||
const parsed = parseInt(id);
|
||||
return isNaN(parsed) ? null : parsed;
|
||||
}
|
||||
return null;
|
||||
}).filter(id => id !== null);
|
||||
} else {
|
||||
// 如果是单个数字,转换为数组
|
||||
formData.orderIds = [delivery.orderId];
|
||||
const id = typeof delivery.orderId === 'number' ? delivery.orderId : parseInt(delivery.orderId);
|
||||
orderIdArray = isNaN(id) ? [] : [id];
|
||||
}
|
||||
|
||||
formData.orderIds = orderIdArray;
|
||||
|
||||
// 确保orderList中包含这些订单的完整信息
|
||||
// 如果orderList中没有对应的订单,从associatedOrders中查找并补充
|
||||
orderIdArray.forEach(orderId => {
|
||||
const existsInOrderList = orderList.value.find(order => order.id === orderId);
|
||||
if (!existsInOrderList) {
|
||||
// 从associatedOrders中查找
|
||||
const associatedOrder = associatedOrders.value.find(order => order.id === orderId);
|
||||
if (associatedOrder) {
|
||||
orderList.value.push(associatedOrder);
|
||||
console.log('[FILL-FORM] 从associatedOrders补充订单到orderList:', associatedOrder);
|
||||
} else {
|
||||
console.warn('[FILL-FORM] 订单ID', orderId, '在orderList和associatedOrders中都不存在');
|
||||
}
|
||||
} else {
|
||||
// 如果存在但信息不完整,尝试从associatedOrders中更新
|
||||
const associatedOrder = associatedOrders.value.find(order => order.id === orderId);
|
||||
if (associatedOrder) {
|
||||
if (!existsInOrderList.buyerName && associatedOrder.buyerName) {
|
||||
existsInOrderList.buyerName = associatedOrder.buyerName;
|
||||
}
|
||||
if (!existsInOrderList.sellerName && associatedOrder.sellerName) {
|
||||
existsInOrderList.sellerName = associatedOrder.sellerName;
|
||||
}
|
||||
if (!existsInOrderList.firmPrice && associatedOrder.firmPrice) {
|
||||
existsInOrderList.firmPrice = associatedOrder.firmPrice;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
formData.orderIds = [];
|
||||
}
|
||||
@@ -1318,6 +1508,30 @@ const fillFormWithEditData = (editData) => {
|
||||
// 司机运费
|
||||
formData.freight = delivery.freight || null;
|
||||
|
||||
// 检疫证号(从quarantineTickey字段读取)
|
||||
// 支持多种可能的数据结构和字段名
|
||||
// 1. 从 delivery 对象中读取
|
||||
// 2. 从 editData 根级读取(如果 delivery 中没有)
|
||||
// 3. 支持多种字段名:quarantineTickey、quarantine_tickey、quarantineCertNo
|
||||
const quarantineValue = delivery.quarantineTickey
|
||||
|| delivery.quarantine_tickey
|
||||
|| delivery.quarantineCertNo
|
||||
|| (editData && editData.quarantineTickey)
|
||||
|| (editData && editData.quarantine_tickey)
|
||||
|| (editData && editData.quarantineCertNo)
|
||||
|| '';
|
||||
formData.quarantineCertNo = quarantineValue;
|
||||
console.log('[FILL-FORM] 检疫证号填充:', {
|
||||
'delivery.quarantineTickey': delivery.quarantineTickey,
|
||||
'delivery.quarantine_tickey': delivery.quarantine_tickey,
|
||||
'delivery.quarantineCertNo': delivery.quarantineCertNo,
|
||||
'editData.quarantineTickey': editData?.quarantineTickey,
|
||||
'editData.quarantine_tickey': editData?.quarantine_tickey,
|
||||
'editData.quarantineCertNo': editData?.quarantineCertNo,
|
||||
'finalValue': formData.quarantineCertNo,
|
||||
'delivery对象': delivery
|
||||
});
|
||||
|
||||
// 照片
|
||||
formData.quarantineTickeyUrl = delivery.quarantineTickeyUrl || '';
|
||||
formData.poundListImg = delivery.poundListImg || '';
|
||||
@@ -1430,7 +1644,18 @@ const loadOrderList = async () => {
|
||||
// 兼容运行时找不到函数引用的问题,优先从命名空间调用
|
||||
const res = await (orderPageQuery ? orderPageQuery({ pageNum: 1, pageSize: 1000 }) : shippingApi.orderPageQuery({ pageNum: 1, pageSize: 1000 }));
|
||||
if (res.code === 200) {
|
||||
orderList.value = res.data?.rows || [];
|
||||
const responseData = res.data || res;
|
||||
if (responseData && typeof responseData === 'object' && 'rows' in responseData) {
|
||||
orderList.value = responseData.rows || [];
|
||||
} else if (responseData && responseData.data && 'rows' in responseData.data) {
|
||||
orderList.value = responseData.data.rows || [];
|
||||
} else {
|
||||
orderList.value = [];
|
||||
}
|
||||
console.log('[ORDER-LIST] 加载订单列表成功,数量:', orderList.value.length);
|
||||
if (orderList.value.length > 0) {
|
||||
console.log('[ORDER-LIST] 第一个订单示例:', orderList.value[0]);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载订单列表失败', error);
|
||||
@@ -1445,6 +1670,69 @@ const handleOrderChange = async (orderIds) => {
|
||||
}
|
||||
};
|
||||
|
||||
// 加载已关联的订单列表
|
||||
const loadAssociatedOrders = async (deliveryId) => {
|
||||
try {
|
||||
const res = await getOrdersByDeliveryId(deliveryId);
|
||||
if (res.code === 200) {
|
||||
const responseData = res.data || res;
|
||||
if (responseData && typeof responseData === 'object' && 'rows' in responseData) {
|
||||
associatedOrders.value = responseData.rows || [];
|
||||
} else if (responseData && responseData.data && 'rows' in responseData.data) {
|
||||
associatedOrders.value = responseData.data.rows || [];
|
||||
} else {
|
||||
associatedOrders.value = [];
|
||||
}
|
||||
console.log('[ASSOCIATED-ORDERS] 加载已关联订单成功,数量:', associatedOrders.value.length);
|
||||
if (associatedOrders.value.length > 0) {
|
||||
console.log('[ASSOCIATED-ORDERS] 第一个订单示例:', associatedOrders.value[0]);
|
||||
console.log('[ASSOCIATED-ORDERS] 订单信息检查:', {
|
||||
id: associatedOrders.value[0].id,
|
||||
buyerName: associatedOrders.value[0].buyerName,
|
||||
sellerName: associatedOrders.value[0].sellerName,
|
||||
firmPrice: associatedOrders.value[0].firmPrice
|
||||
});
|
||||
}
|
||||
} else {
|
||||
associatedOrders.value = [];
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载已关联订单失败:', error);
|
||||
associatedOrders.value = [];
|
||||
}
|
||||
};
|
||||
|
||||
// 解除订单关联
|
||||
const unbindOrder = async (orderId) => {
|
||||
try {
|
||||
await ElMessageBox.confirm('确定要解除该订单与运送清单的关联吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
});
|
||||
|
||||
unbindingOrderId.value = orderId;
|
||||
const res = await unbindOrderFromDelivery(orderId);
|
||||
unbindingOrderId.value = null;
|
||||
|
||||
if (res.code === 200) {
|
||||
ElMessage.success('解除关联成功');
|
||||
// 刷新已关联订单列表
|
||||
if (formData.editId) {
|
||||
await loadAssociatedOrders(formData.editId);
|
||||
}
|
||||
} else {
|
||||
ElMessage.error(res.msg || '解除关联失败');
|
||||
}
|
||||
} catch (error) {
|
||||
unbindingOrderId.value = null;
|
||||
if (error !== 'cancel') {
|
||||
console.error('解除订单关联失败:', error);
|
||||
ElMessage.error('解除关联失败,请重试');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// 司机选择变化时自动填充电话
|
||||
const handleDriverChange = (driverId) => {
|
||||
if (driverId) {
|
||||
@@ -1610,7 +1898,38 @@ const handleSubmit = () => {
|
||||
|
||||
if (res.code === 200) {
|
||||
// 获取运送清单ID(新增返回data.id,编辑直接用editId)
|
||||
const deliveryId = formData.editId || res.data?.id;
|
||||
let deliveryId = formData.editId || res.data?.id;
|
||||
|
||||
// 如果res.data是Delivery对象,从对象中获取id
|
||||
if (!deliveryId && res.data && typeof res.data === 'object' && res.data.id) {
|
||||
deliveryId = res.data.id;
|
||||
}
|
||||
|
||||
// 确保deliveryId是整数
|
||||
if (deliveryId) {
|
||||
if (typeof deliveryId === 'string') {
|
||||
// 如果是逗号分隔的字符串,取第一个(这种情况不应该发生,但做保护)
|
||||
if (deliveryId.includes(',')) {
|
||||
console.warn('[CREATE-DELIVERY] deliveryId包含逗号,可能是orderId:', deliveryId);
|
||||
deliveryId = deliveryId.split(',')[0];
|
||||
}
|
||||
const parsed = parseInt(deliveryId);
|
||||
if (isNaN(parsed)) {
|
||||
console.error('[CREATE-DELIVERY] deliveryId格式不正确:', deliveryId);
|
||||
ElMessage.error('获取运送清单ID失败');
|
||||
return;
|
||||
}
|
||||
deliveryId = parsed;
|
||||
} else if (typeof deliveryId !== 'number') {
|
||||
deliveryId = parseInt(deliveryId);
|
||||
if (isNaN(deliveryId)) {
|
||||
console.error('[CREATE-DELIVERY] deliveryId格式不正确:', deliveryId);
|
||||
ElMessage.error('获取运送清单ID失败');
|
||||
return;
|
||||
}
|
||||
}
|
||||
console.log('[CREATE-DELIVERY] 获取到的deliveryId:', deliveryId, '类型:', typeof deliveryId);
|
||||
}
|
||||
|
||||
if (deliveryId) {
|
||||
// 更新设备的delivery_id
|
||||
@@ -1619,9 +1938,20 @@ const handleSubmit = () => {
|
||||
// 更新关联订单的delivery_id
|
||||
if (formData.orderIds && formData.orderIds.length > 0) {
|
||||
try {
|
||||
// 确保orderIds是整数数组,而不是字符串数组
|
||||
const orderIdsArray = formData.orderIds.map(id => {
|
||||
if (typeof id === 'string') {
|
||||
const parsed = parseInt(id);
|
||||
return isNaN(parsed) ? null : parsed;
|
||||
}
|
||||
return typeof id === 'number' ? id : parseInt(id);
|
||||
}).filter(id => id !== null);
|
||||
|
||||
console.log('[ORDER-UPDATE] 准备更新订单关联, deliveryId:', deliveryId, 'orderIds:', orderIdsArray);
|
||||
|
||||
const updateOrderRes = await updateOrderDeliveryId({
|
||||
deliveryId: deliveryId,
|
||||
orderIds: formData.orderIds
|
||||
orderIds: orderIdsArray
|
||||
});
|
||||
if (updateOrderRes.code === 200) {
|
||||
console.log('[ORDER-UPDATE] 成功更新订单delivery_id,订单数量:', formData.orderIds.length);
|
||||
@@ -2170,6 +2500,35 @@ let watchTimer = null;
|
||||
height: 500px;
|
||||
}
|
||||
|
||||
/* 重量输入框样式优化 */
|
||||
:deep(.weight-input-number) {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
:deep(.weight-input-number .el-input__inner) {
|
||||
font-size: 14px;
|
||||
padding: 0 15px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
:deep(.weight-input-number .el-input-number__decrease),
|
||||
:deep(.weight-input-number .el-input-number__increase) {
|
||||
width: 32px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
:deep(.weight-input-number .el-input-group__append) {
|
||||
padding: 0 12px;
|
||||
font-size: 14px;
|
||||
background-color: #f5f7fa;
|
||||
color: #606266;
|
||||
border-left: 1px solid #dcdfe6;
|
||||
}
|
||||
|
||||
.dialog-footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
|
||||
Reference in New Issue
Block a user