156 lines
5.9 KiB
Markdown
156 lines
5.9 KiB
Markdown
|
|
# 装车信息表单自动填充功能实现
|
|||
|
|
|
|||
|
|
## 功能概述
|
|||
|
|
|
|||
|
|
已成功实现装车信息表单的自动填充功能,可以根据API返回的数据自动映射并填充表单字段。
|
|||
|
|
|
|||
|
|
## 实现的功能
|
|||
|
|
|
|||
|
|
### 1. 数据映射字段
|
|||
|
|
|
|||
|
|
根据提供的API响应数据,实现了以下字段的自动映射:
|
|||
|
|
|
|||
|
|
#### 基础信息
|
|||
|
|
- `deliveryId` ← `id`
|
|||
|
|
- `estimatedDeliveryTime` ← `estimatedDeliveryTime`
|
|||
|
|
- `serverDeviceSn` ← `serverDeviceId`
|
|||
|
|
|
|||
|
|
#### 重量信息
|
|||
|
|
- `emptyWeight` ← `emptyWeight`
|
|||
|
|
- `entruckWeight` ← `entruckWeight`
|
|||
|
|
- `landingEntruckWeight` ← `landingEntruckWeight`
|
|||
|
|
|
|||
|
|
#### 照片URL
|
|||
|
|
- `quarantineTickeyUrl` ← `quarantineTickeyUrl`
|
|||
|
|
- `poundListImg` ← `poundListImg`
|
|||
|
|
- `emptyVehicleFrontPhoto` ← `emptyVehicleFrontPhoto`
|
|||
|
|
- `loadedVehicleFrontPhoto` ← `loadedVehicleFrontPhoto`
|
|||
|
|
- `loadedVehicleWeightPhoto` ← `loadedVehicleWeightPhoto`
|
|||
|
|
- `driverIdCardPhoto` ← `driverIdCardPhoto`
|
|||
|
|
|
|||
|
|
#### 视频URL
|
|||
|
|
- `entruckWeightVideo` ← `entruckWeightVideo`
|
|||
|
|
- `emptyWeightVideo` ← `emptyWeightVideo`
|
|||
|
|
- `entruckVideo` ← `entruckVideo`
|
|||
|
|
- `controlSlotVideo` ← `controlSlotVideo`
|
|||
|
|
- `cattleLoadingCircleVideo` ← `cattleLoadingCircleVideo`
|
|||
|
|
|
|||
|
|
### 2. 核心实现
|
|||
|
|
|
|||
|
|
#### 自动填充函数
|
|||
|
|
```javascript
|
|||
|
|
const autoFillFormData = (apiData) => {
|
|||
|
|
if (!apiData) return;
|
|||
|
|
|
|||
|
|
// 基础信息映射
|
|||
|
|
ruleForm.deliveryId = apiData.id || '';
|
|||
|
|
ruleForm.estimatedDeliveryTime = apiData.estimatedDeliveryTime || '';
|
|||
|
|
ruleForm.serverDeviceSn = apiData.serverDeviceId || '';
|
|||
|
|
|
|||
|
|
// 重量信息映射
|
|||
|
|
ruleForm.emptyWeight = apiData.emptyWeight || '';
|
|||
|
|
ruleForm.entruckWeight = apiData.entruckWeight || '';
|
|||
|
|
ruleForm.landingEntruckWeight = apiData.landingEntruckWeight || '';
|
|||
|
|
|
|||
|
|
// 照片URL映射
|
|||
|
|
ruleForm.quarantineTickeyUrl = apiData.quarantineTickeyUrl || '';
|
|||
|
|
ruleForm.poundListImg = apiData.poundListImg || '';
|
|||
|
|
ruleForm.emptyVehicleFrontPhoto = apiData.emptyVehicleFrontPhoto || '';
|
|||
|
|
ruleForm.loadedVehicleFrontPhoto = apiData.loadedVehicleFrontPhoto || '';
|
|||
|
|
ruleForm.loadedVehicleWeightPhoto = apiData.loadedVehicleWeightPhoto || '';
|
|||
|
|
ruleForm.driverIdCardPhoto = apiData.driverIdCardPhoto || '';
|
|||
|
|
|
|||
|
|
// 视频URL映射
|
|||
|
|
ruleForm.entruckWeightVideo = apiData.entruckWeightVideo || '';
|
|||
|
|
ruleForm.emptyWeightVideo = apiData.emptyWeightVideo || '';
|
|||
|
|
ruleForm.entruckVideo = apiData.entruckVideo || '';
|
|||
|
|
ruleForm.controlSlotVideo = apiData.controlSlotVideo || '';
|
|||
|
|
ruleForm.cattleLoadingCircleVideo = apiData.cattleLoadingCircleVideo || '';
|
|||
|
|
|
|||
|
|
console.log('表单数据已自动填充:', ruleForm);
|
|||
|
|
};
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 更新后的对话框调用函数
|
|||
|
|
```javascript
|
|||
|
|
const onShowDialog = (row, apiData = null) => {
|
|||
|
|
data.dialogVisible = true;
|
|||
|
|
if (formDataRef.value) {
|
|||
|
|
formDataRef.value.resetFields();
|
|||
|
|
}
|
|||
|
|
if (row) {
|
|||
|
|
nextTick(() => {
|
|||
|
|
data.deliveryId = row.id;
|
|||
|
|
ruleForm.deliveryId = row.id;
|
|||
|
|
|
|||
|
|
// 如果提供了API数据,直接填充表单
|
|||
|
|
if (apiData) {
|
|||
|
|
autoFillFormData(apiData);
|
|||
|
|
} else {
|
|||
|
|
// 否则从服务器获取详情
|
|||
|
|
getOrderDetail();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getHostList();
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 使用方法
|
|||
|
|
|
|||
|
|
### 方法1:直接传递API数据
|
|||
|
|
```javascript
|
|||
|
|
// 在调用装车对话框时,直接传递API响应数据
|
|||
|
|
const loadClick = (row, apiData) => {
|
|||
|
|
if (LoadDialogRef.value) {
|
|||
|
|
LoadDialogRef.value.onShowDialog(row, apiData);
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方法2:在API响应中自动填充
|
|||
|
|
当调用 `getOrderDetail()` 函数时,会自动调用 `autoFillFormData(res.data)` 来填充表单。
|
|||
|
|
|
|||
|
|
## 示例数据映射
|
|||
|
|
|
|||
|
|
基于提供的API响应数据:
|
|||
|
|
```javascript
|
|||
|
|
{
|
|||
|
|
id: 85,
|
|||
|
|
deliveryNumber: "ZC20251020105111",
|
|||
|
|
deliveryTitle: "1",
|
|||
|
|
estimatedDeliveryTime: "2025-10-31 00:00:00",
|
|||
|
|
emptyWeight: "1000.00",
|
|||
|
|
entruckWeight: "2000.00",
|
|||
|
|
quarantineTickeyUrl: "https://smart-1251449951.cos.ap-guangzhou.myqcloud.com/iotPlateform/2025/10/21/4c4e20251021100838.jpg",
|
|||
|
|
poundListImg: "https://smart-1251449951.cos.ap-guangzhou.myqcloud.com/iotPlateform/2025/10/21/cows20251021100841.jpg",
|
|||
|
|
emptyVehicleFrontPhoto: "https://smart-1251449951.cos.ap-guangzhou.myqcloud.com/iotPlateform/2025/10/21/4c4e20251021100847.jpg",
|
|||
|
|
loadedVehicleFrontPhoto: "https://smart-1251449951.cos.ap-guangzhou.myqcloud.com/iotPlateform/2025/10/21/cows20251021100849.jpg",
|
|||
|
|
loadedVehicleWeightPhoto: "https://smart-1251449951.cos.ap-guangzhou.myqcloud.com/iotPlateform/2025/10/21/4c4e20251021100854.jpg",
|
|||
|
|
driverIdCardPhoto: "https://smart-1251449951.cos.ap-guangzhou.myqcloud.com/iotPlateform/2025/10/21/cows20251021100857.jpg",
|
|||
|
|
entruckWeightVideo: "https://smart-1251449951.cos.ap-guangzhou.myqcloud.com/iotPlateform/2025/10/21/normal_video20251021100901.mp4",
|
|||
|
|
emptyWeightVideo: "https://smart-1251449951.cos.ap-guangzhou.myqcloud.com/iotPlateform/2025/10/21/normal_video20251021100904.mp4",
|
|||
|
|
entruckVideo: "https://smart-1251449951.cos.ap-guangzhou.myqcloud.com/iotPlateform/2025/10/21/normal_video20251021101046.mp4",
|
|||
|
|
controlSlotVideo: "https://smart-1251449951.cos.ap-guangzhou.myqcloud.com/iotPlateform/2025/10/21/normal_video20251021101049.mp4",
|
|||
|
|
cattleLoadingCircleVideo: "https://smart-1251449951.cos.ap-guangzhou.myqcloud.com/iotPlateform/2025/10/21/normal_video20251021101052.mp4"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
这些数据会自动映射到表单的相应字段中。
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **数据安全**:所有字段都使用了 `|| ''` 来确保空值安全
|
|||
|
|
2. **向后兼容**:保持了原有的 `getOrderDetail()` 功能
|
|||
|
|
3. **调试支持**:添加了 `console.log` 来帮助调试数据填充过程
|
|||
|
|
4. **响应式更新**:使用 Vue 3 的 reactive 系统确保数据变化时UI自动更新
|
|||
|
|
|
|||
|
|
## 文件修改
|
|||
|
|
|
|||
|
|
- `pc-cattle-transportation/src/views/shipping/loadDialog.vue`
|
|||
|
|
- 添加了 `landingEntruckWeight` 字段
|
|||
|
|
- 实现了 `autoFillFormData` 函数
|
|||
|
|
- 更新了 `onShowDialog` 函数支持API数据参数
|
|||
|
|
- 在 `getOrderDetail` 中集成了自动填充功能
|