sen
昨天 5abcde36961125cbf436f91b8c17610a6b5f8308
ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
@@ -5,7 +5,14 @@
      @row-update="rowUpdate" @row-save="rowSave" @refresh-change="refreshChange" @row-del="rowDel"
      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
      @current-change="currentChange" @size-change="sizeChange" @on-load="onLoad">
      <template #licensePlate-form="{ row, disabled }">
        <el-input v-model="form.licensePlate" placeholder="请选择车牌号" readonly :disabled="disabled"
          @click="handleVehicleSelect">
          <template #append>
            <el-button icon="el-icon-search" @click="handleVehicleSelect" />
          </template>
        </el-input>
      </template>
      <!-- template 中 -->
      <template #requiredVehicleTypes-form="{ row, disabled }">
        <template v-if="disabled">
@@ -23,7 +30,8 @@
          <span>{{ dictFormat(order_type, row?.orderType || form?.orderType) }}</span>
        </template>
        <template v-else>
          <el-select v-model="form.orderType" placeholder="请选择订单类型" style="width: 100%" clearable>
          <el-select v-model="form.orderType" placeholder="请选择订单类型" @change="(val) => handleOrderTypeChange(val)"
            style="width: 100%" clearable>
            <el-option v-for="item in order_type" :key="item.value" :label="item.label" :value="parseInt(item.value)" />
          </el-select>
        </template>
@@ -78,11 +86,10 @@
        <el-button type="primary" icon="Male" :disabled="pageF.single" @click="handleConnectHang"
          v-hasPermi="['tms:tmsDispatchOrder:connectHang']">接挂
        </el-button>
        <el-button type="warning" icon="Avatar" :disabled="!(isCustoms == 0)" @click="handleCustoms"
        <el-button type="warning" icon="Avatar" :disabled="selectionList.length === 0" @click="handleCustoms"
          v-hasPermi="['tms:tmsDispatchOrder:customs']">委托报关信息
        </el-button>
        <el-button type="primary" icon="UserFilled" :disabled="!(isLoad == 0)" @click="handleLoading"
        <el-button type="primary" icon="UserFilled" :disabled="selectionList.length === 0" @click="handleLoading"
          v-hasPermi="['tms:tmsDispatchOrder:loading']">委托卸货信息
        </el-button>
        <el-button type="primary" icon="UserFilled" :disabled="pageF.single" @click="handleZZ"
@@ -299,26 +306,40 @@
      </div>
      <div v-if="optionType == 'customs'">
        <el-descriptions style="margin-bottom: 20px" :column="2" border>
        <el-descriptions v-if="optionNum == 'radio'" style="margin-bottom: 20px" :column="2" border>
          <el-descriptions-item label="调度单号">{{ form.dispatchNo }}</el-descriptions-item>
          <el-descriptions-item label="客户">{{ form.customerName }}</el-descriptions-item>
          <el-descriptions-item label="项目名称">{{ form.projectName }}</el-descriptions-item>
          <el-descriptions-item label="运输路线">{{ form.transportLine }}</el-descriptions-item>
        </el-descriptions>
        <el-table v-if="optionNum == 'checkbox'" :data="clearanceList" border size="small"
          style="width: 100%; margin-bottom: 20px">
          <el-table-column prop="dispatchNo" label="调度单号" width="150" />
          <el-table-column prop="customerName" label="客户" min-width="120" show-overflow-tooltip />
          <el-table-column prop="projectName" label="项目名称" min-width="120" show-overflow-tooltip />
          <el-table-column prop="transportLine" label="运输路线" min-width="150" show-overflow-tooltip />
        </el-table>
        <avue-form v-model="form" ref="boxFormRef" :option="boxFormOption">
        </avue-form>
      </div>
      <div v-if="optionType == 'loading'">
        <el-descriptions style="margin-bottom: 20px" :column="2" border>
        <el-descriptions v-if="optionNum == 'radio'" style="margin-bottom: 20px" :column="2" border>
          <el-descriptions-item label="调度单号">{{ form.dispatchNo }}</el-descriptions-item>
          <el-descriptions-item label="客户">{{ form.customerName }}</el-descriptions-item>
          <el-descriptions-item label="项目名称">{{ form.projectName }}</el-descriptions-item>
          <el-descriptions-item label="运输路线">{{ form.transportLine }}</el-descriptions-item>
        </el-descriptions>
        <el-table v-if="optionNum == 'checkbox'" :data="clearanceList" border size="small"
          style="width: 100%; margin-bottom: 20px">
          <el-table-column prop="dispatchNo" label="调度单号" width="150" />
          <el-table-column prop="customerName" label="客户" min-width="120" show-overflow-tooltip />
          <el-table-column prop="projectName" label="项目名称" min-width="120" show-overflow-tooltip />
          <el-table-column prop="transportLine" label="运输路线" min-width="150" show-overflow-tooltip />
        </el-table>
        <avue-form v-model="form" ref="boxFormRef" :option="boxFormOption">
        </avue-form>
      </div>
      <template #footer>
@@ -635,7 +656,17 @@
    <flowLog ref="flowLogIshow" :isShow="false" :flowParams="flowParams"></flowLog>
  </basicContainer>
  <el-dialog title="选择车辆" v-model="vehicleDialogVisible" width="70%" append-to-body :close-on-click-modal="false">
    <avue-crud ref="vehicleCrudRef" :option="vehicleOption" :data="vehicleData" :page="vehiclePage"
      @on-load="loadVehicleList" @search-change="vehicleSearchChange" @search-reset="vehicleSearchReset"
      @current-change="vehicleCurrentChange" @size-change="vehicleSizeChange" @row-click="handleVehicleRowClick">
    </avue-crud>
    <template #footer>
      <el-button @click="vehicleDialogVisible = false">取 消</el-button>
      <el-button type="primary" @click="confirmVehicleSelection">确 定</el-button>
    </template>
  </el-dialog>
</template>
@@ -665,7 +696,7 @@
  importTemplateTmsDispatchOrder, ypdddjSumbit,
  tmsTmsDispatchOrderImportLog,
  saveTmsFinanceDetail2,
  getLastLicensePlate
  getLastLicensePlate,
} from "@/api/tms/tmsDispatchOrder";
import useCurrentInstance from "@/utils/useCurrentInstance";
import { computed, onMounted, onBeforeUnmount, reactive, ref, toRefs, watch, getCurrentInstance, nextTick } from "vue";
@@ -705,15 +736,27 @@
import {
  tmsFinanceDetail
} from "@/api/tms/tmsDispatchOrder";
const { appContext } = getCurrentInstance();
const { appContext } = getCurrentInstance() as any;
const { proxy } = useCurrentInstance(
);
// 定义类型
interface VehicleRow {
  id?: string;
  licensePlate?: string;
  serviceProviderName?: string;
  vehicleType?: string;
  internalCode?: string;
  licenseHk?: string;
  licenseMo?: string;
  [key: string]: any;
}
const { fee_type, sys_currency, vehicle_type, order_type } = proxy.useDict('fee_type', 'sys_currency', 'vehicle_type', 'order_type')
const crudRef = ref();
const boxFormRef = ref();
const goodsCrudRef = ref();
const actualFormRef = ref();
const isAutoSettingVehicle = ref(false);
/**
 * 字典公共转换函数
 */
@@ -1164,9 +1207,9 @@
        // },
        orderTime: {
          label: '下单时间',
          type: 'datetime',  // 改为 datetime 类型
          format: 'YYYY-MM-DD HH:mm:ss',
          valueFormat: 'YYYY-MM-DD HH:mm:ss',
          type: 'date',  // 改为 datetime 类型
          format: 'YYYY-MM-DD',
          valueFormat: 'YYYY-MM-DD',
          display: true,
          rules: [
            {
@@ -1342,37 +1385,52 @@
              message: "主驾驶员不能为空", trigger: "change"
            }
          ],
          change: (val: any) => {
            // 防止重复执行
          // 在 mainDriverId 的 change 事件中
          change: async (val: any) => {
            if (data.isChanging) return;
            data.isChanging = true;
            isAutoSettingVehicle.value = true;
            const table = crudRef.value?.getPropRef?.('mainDriverId')?.$refs?.temp;
            if (!table) {
              data.isChanging = false;
              isAutoSettingVehicle.value = false;
              return;
            }
            let active = table.active;
            if (Array.isArray(active)) active = active[0];
            if (active && active.driverName) {
              try {
            if (active) {
              Object.assign(form.value, {
                mainDriverId: active.id,
                mainDriverName: active.driverName,
              });
                await nextTick(); // 等待清空生效
                const res = await getLastLicensePlate(active.driverName);
              // 获取车牌号并赋值
              getLastLicensePlate(active.driverName).then(res => {
                if (res.code == 200) {
                  form.value.licensePlate = res.data.licensePlate;
                  form.value.vehicleId = res.data.vehicleId
                if (res.code === 200 && res.data) {
                  const vehicleData = res.data;
                  nextTick(() => {
                    Object.assign(form.value, {
                      licensePlate: vehicleData.licensePlate,
                      vehicleId: vehicleData.vehicleId,
                      actualVehicleType: vehicleData.actualVehicleType,
                      mainDriverName: active.driverName
                    });
                  })
                  await nextTick();
                }
              }).finally(() => {
              } catch (e) {
                console.error("自动获取车牌失败", e);
              } finally {
                data.isChanging = false;
              });
                setTimeout(() => {
                  // isAutoSettingVehicle.value = false;
                }, 500); // 稍微延长一点时间,防止 vehicleId 的 change 事件误触
              }
            } else {
              data.isChanging = false;
              // isAutoSettingVehicle.value = false;
            }
          },
          // change: (val: any) => {
@@ -1400,7 +1458,7 @@
            searchMenuSpan: 5,
            column: {
              vehicleProviderName: {
                label: '车辆服务商1', minWidth: 130,
                label: '车辆服务商', minWidth: 130,
                search: true,
              },
              driverName: {
@@ -1491,6 +1549,7 @@
              if (Array.isArray(value)) {
                id = value[0]
              }
              getTmsDriver(id).then(res => {
                return callback(res.data || {})
              })
@@ -1510,92 +1569,117 @@
          }
        },
        vehicleId: {
        licensePlate: {
          label: '车牌号', dataType: 'string',
          display: true,
          readonly: true,
          rules: [
            {
              required: true,
              required: false,
              message: "车牌号不能为空", trigger: "change"
            }
          ],
          change: (val: any) => {
            const table = crudRef.value?.getPropRef?.('vehicleId')?.$refs?.temp;
            if (!table) return;
            let active = table.active;
            if (Array.isArray(active)) active = active[0];
            if (active) {
              Object.assign(form.value, {
                vehicleId: active.id,
                licensePlate: active.licensePlate,
                actualVehicleType: active.vehicleType,
              });
            }
          },
          type: 'table', suffixIcon: 'search',
          children: {
            border: true,
            searchLabelWidth: 100,
            searchMenuSpan: 5,
            column: {
              serviceProviderName: {
                label: '车辆服务商', minWidth: 130,
                search: true,
              },
              vehicleType: {
                label: '车辆类型', minWidth: 120,
                type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type',
                search: true,
              },
              internalCode: {
                label: '车辆内部编码', minWidth: 120,
                search: true,
              },
              licensePlate: {
                label: '车牌号', minWidth: 120,
                search: true,
              },
              licenseHk: {
                label: '香港牌照', minWidth: 120,
                search: true,
              },
              licenseMo: {
                label: '澳门牌照', minWidth: 120,
                search: true,
              },
            },
          },
          props: {
            label: 'licensePlate',
            value: 'id'
          },
          onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
            if (value) {
              let id = value;
              if (Array.isArray(value)) {
                id = value[0]
              }
              getTmsVehicle(id).then(res => {
                return callback(res.data || {})
              })
            } else {
              listTmsVehicle({
                pageSize: page.pageSize,
                pageNum: page.currentPage, ...data,
                carrierType: form.value.operationMode, serviceProviderId: form.value.vehicleProviderId
              }).then(res => {
                return callback({
                  total: res.total,
                  data: res.rows || [],
                })
              })
            }
          click: ({ value, column }) => {
            // 点击输入框时触发选择弹窗
            handleVehicleSelect();
          }
        },
        // vehicleId: {
        //   label: '车牌号', dataType: 'string',
        //   display: true,
        //   rules: [
        //     {
        //       required: true,
        //       message: "车牌号不能为空", trigger: "change"
        //     }
        //   ],
        //   change: (val: any) => {
        //     if (isAutoSettingVehicle.value) {
        //       return;
        //     }
        //     const table = crudRef.value?.getPropRef?.('vehicleId')?.$refs?.temp;
        //     if (!table) return;
        //     let active = table.active;
        //     if (Array.isArray(active)) active = active[0];
        //     console.log(9852);
        //     if (active) {
        //       Object.assign(form.value, {
        //         vehicleId: active.id,
        //         licensePlate: active.licensePlate,
        //         actualVehicleType: active.vehicleType,
        //       });
        //     }
        //   },
        //   type: 'table', suffixIcon: 'search',
        //   children: {
        //     border: true,
        //     searchLabelWidth: 100,
        //     searchMenuSpan: 5,
        //     column: {
        //       serviceProviderName: {
        //         label: '车辆服务商', minWidth: 130,
        //         search: true,
        //       },
        //       vehicleType: {
        //         label: '车辆类型', minWidth: 120,
        //         type: 'select', dataType: 'string', dicUrl: '/system/dict/data/type/vehicle_type',
        //         search: true,
        //       },
        //       internalCode: {
        //         label: '车辆内部编码', minWidth: 120,
        //         search: true,
        //       },
        //       licensePlate: {
        //         label: '车牌号', minWidth: 120,
        //         search: true,
        //       },
        //       licenseHk: {
        //         label: '香港牌照', minWidth: 120,
        //         search: true,
        //       },
        //       licenseMo: {
        //         label: '澳门牌照', minWidth: 120,
        //         search: true,
        //       },
        //     },
        //   },
        //   props: {
        //     label: 'licensePlate',
        //     value: 'id'
        //   },
        //   onLoad: ({ page, value, data }: { page: any, value: any, data: any }, callback: any) => {
        //     if (value) {
        //       let id = value;
        //       if (Array.isArray(value)) {
        //         id = value[0]
        //       }
        //       console.log(555, 'xq1');
        //       getTmsVehicle(id).then(res => {
        //         return callback(res.data || {})
        //       })
        //     } else {
        //       console.log(444, 'xq1');
        //       listTmsVehicle({
        //         pageSize: page.pageSize,
        //         pageNum: page.currentPage, ...data,
        //         carrierType: form.value.operationMode, serviceProviderId: form.value.vehicleProviderId
        //       }).then(res => {
        //         return callback({
        //           total: res.total,
        //           data: res.rows || [],
        //         })
        //       })
        //     }
        //   }
        // },
        actualVehicleType: {
          label: '派出车型',
          display: true, type: 'select', dicUrl: '/system/dict/data/type/vehicle_type', dataType: 'string',
@@ -2600,10 +2684,12 @@
          if (Array.isArray(value)) {
            id = value[0]
          }
          getTmsVehicle(id).then(res => {
            return callback(res.data || {})
          })
        } else {
          listTmsVehicle({ pageSize: page.pageSize, pageNum: page.currentPage, ...data }).then(res => {
            return callback({
              total: res.total,
@@ -3199,9 +3285,9 @@
  }
});
const zzItemsTableData = ref();
/* 报关列表 */
const clearanceList = ref([]);
const optionNum = ref(''); // 用于区分是报关还是装卸
const {
  tableData,
@@ -3237,6 +3323,7 @@
  },
  handleSelectionChangeFunc: (selection: any) => {
    selectionList.value = selection;
    clearanceList.value = selection;
    if (selection.length > 0) {
      isCustoms.value = selection[0].isCustoms;
      isLoad.value = selection[0].isLoad;
@@ -3297,14 +3384,17 @@
    // 【核心修改】:直接返回,不要赋值给 queryParams.value
    return finalParams;
  },
  handleBeforeOpenFunc: (type: string) => {
  handleBeforeOpenFunc: (type: string,) => {
    if (type == 'add') {
      form.value = {};
    } else if (type == 'edit') {
      // form.value = row;
      handleOrderTypeChange(form.value.orderType);
    }
  }
})
@@ -3538,11 +3628,24 @@
      pageF.isUploading = false;
    })
  } else if (optionType.value === 'customs') {
    customsOrder({
      id: form.value.id,
      customsServiceProviderId: form.value.customsServiceProviderId,
      customsServiceProviderName: form.value.customsServiceProviderName,
    }).then(res => {
    let result = <any>[];
    if (optionNum.value == 'checkbox') {
      result = clearanceList.value.map(item => {
        return {
          id: item.id,
          customsServiceProviderId: form.value.customsServiceProviderId,
          customsServiceProviderName: form.value.customsServiceProviderName
        };
      });
    } else if (optionNum.value == 'radio') {
      result = [{
        id: form.value.id,
        customsServiceProviderId: form.value.customsServiceProviderId,
        customsServiceProviderName: form.value.customsServiceProviderName
      }]
    }
    customsOrder(result).then(res => {
      ElMessage({
        message: "提交成功!",
        type: 'success'
@@ -3553,11 +3656,25 @@
      pageF.isUploading = false;
    })
  } else if (optionType.value === 'loading') {
    loadingOrder({
      id: form.value.id,
      loadingServiceProviderId: form.value.loadingServiceProviderId,
      loadingServiceProviderName: form.value.loadingServiceProviderName,
    }).then(res => {
    let result = <any>[];
    if (optionNum.value == 'checkbox') {
      result = clearanceList.value.map(item => {
        return {
          id: item.id,
          loadingServiceProviderId: form.value.loadingServiceProviderId,
          loadingServiceProviderName: form.value.loadingServiceProviderName
        };
      });
    } else if (optionNum.value == 'radio') {
      result = [{
        id: form.value.id,
        loadingServiceProviderId: form.value.loadingServiceProviderId,
        loadingServiceProviderName: form.value.loadingServiceProviderName
      }]
    }
    loadingOrder(result).then(res => {
      ElMessage({
        message: "提交成功!",
        type: 'success'
@@ -4194,17 +4311,32 @@
const handleCustoms = () => {
  title.value = '补充委托报关信息';
  open.value = true;
  form.value = selectionList.value[0];
  form.value = clearanceList.value[0];
  optionType.value = 'customs';
  optionNum.value = 'checkbox'
  boxFormOption.value = customsOption.value;
}
const handleCustomsAdd = (selectionList) => {
const handleCustomsAdd = (row) => {
  title.value = '补充委托装卸信息';
  clearanceList.value = [];
  // 2. 清除表格视觉上的选中状态
  if (crudRef.value) {
    crudRef.value.clearSelection();
  }
  // 3. 重置表单
  form.value = {};
  // 4. 将当前点击的行数据赋值给 form,用于弹窗编辑
  Object.assign(form.value, row);
  open.value = true;
  form.value = selectionList;
  optionType.value = 'loading';
  optionNum.value = 'radio';
  boxFormOption.value = loadingOption.value;
}
const handleLoading = () => {
@@ -4212,14 +4344,33 @@
  open.value = true;
  form.value = selectionList.value[0];
  optionType.value = 'loading';
  optionNum.value = 'checkbox'
  boxFormOption.value = loadingOption.value;
}
const handleLoadingAdd = (selectionList) => {
  title.value = '补充委托装卸信息';
const handleLoadingAdd = (row: any) => {
  // 1. 清空批量选中的数据列表,导致顶部按钮 disabled (length === 0)
  clearanceList.value = [];
  // 2. 清除表格视觉上的选中状态
  if (crudRef.value) {
    crudRef.value.clearSelection();
  }
  // 3. 重置表单
  form.value = {};
  // 4. 将当前点击的行数据赋值给 form,用于弹窗编辑
  Object.assign(form.value, row);
  // 5. 设置弹窗配置
  title.value = '补充委托报关信息';
  optionType.value = 'customs';
  optionNum.value = 'radio';
  boxFormOption.value = customsOption.value;
  // 6. 打开弹窗
  open.value = true;
  form.value = selectionList;
  optionType.value = 'loading';
  boxFormOption.value = loadingOption.value;
  // 【调试】此时打印,长度应为 0
}
const quotationItems = ref();
const getQuotationItems = async () => {
@@ -4955,6 +5106,174 @@
    // 取消操作
  });
}
const handleOrderTypeChange = (value: any) => {
  // 防止 value 为 null 或 undefined 时出错 (当清空选择时)
  if (value === null || value === undefined) {
    return;
  }
  option.value.group.forEach((item: any) => {
    if (item.prop == 'pcxx') {
      // 处理装货点必填规则
      if (item.column.shipperId && item.column.shipperId.rules) {
        item.column.shipperId.rules.forEach((cItem: any) => {
          cItem.required = !(value == 1);
        });
      }
      // 处理卸货点必填规则
      if (item.column.receiverId && item.column.receiverId.rules) {
        item.column.receiverId.rules.forEach((cItem: any) => {
          cItem.required = !(value == 1);
        });
      }
    }
  });
  // 【新增逻辑】如果切换到了非必填状态 (value == 1),则清除这两个字段的校验提示
  if (value == 1) {
    // 确保 crudRef 存在且暴露了 clearValidate 方法
    if (crudRef.value && typeof crudRef.value.clearValidate === 'function') {
      // 清除指定字段的校验状态
      crudRef.value.clearValidate(['shipperId', 'receiverId']);
    }
  }
};
/* 车牌号 */
// --- 状态管理 ---
const vehicleDialogVisible = ref(false);
const vehicleData = ref<VehicleRow[]>([]);
const vehicleQuery = ref<any>({});
const selectedVehicleRow = ref<VehicleRow>({});
const vehiclePage = ref({
  currentPage: 1,
  pageSize: 10,
  total: 0
});
// --- 弹窗配置 ---
const vehicleOption = ref({
  header: true,
  menu: false,
  addBtn: false,
  refreshBtn: true,
  columnBtn: false,
  index: false,
  selection: false,
  searchShow: true,
  searchMenuSpan: 6,
  searchLabelWidth: 100,
  highlightCurrentRow: true,
  column: [
    { label: '车辆服务商', prop: 'serviceProviderName', search: true },
    {
      label: '车辆类型',
      prop: 'vehicleType',
      type: 'select',
      dataType: 'string',
      dicUrl: '/system/dict/data/type/vehicle_type',
      search: true
    },
    { label: '车辆内部编码', prop: 'internalCode', search: true },
    { label: '车牌号', prop: 'licensePlate', search: true },
    { label: '香港牌照', prop: 'licenseHk' },
    { label: '澳门牌照', prop: 'licenseMo' }
  ]
});
// --- 方法 ---
/**
 * 加载数据:默认强制传 carrierType: '0'
 */
const loadVehicleList = async (page?: any, params?: any) => {
  const query = {
    pageNum: vehiclePage.value.currentPage,
    pageSize: vehiclePage.value.pageSize,
    carrierType: '0', // 默认强制传0
    ...vehicleQuery.value,
    ...params
  };
  try {
    const res = await listTmsVehicle(query);
    if (res.code === 200) {
      // const { records, total } = res.rows;
      vehicleData.value = res.rows;
      vehiclePage.value.total = res.total;
    }
  } catch (error) {
    console.error("加载车辆列表失败", error);
  }
};
/**
 * 搜索:带入搜索参数并强制 carrierType 为 0
 */
const vehicleSearchChange = (params: any, done: Function) => {
  vehicleQuery.value = params;
  vehiclePage.value.currentPage = 1;
  loadVehicleList();
  done();
};
/**
 * 重置:清空搜索条件,但依然保留 carrierType 为 0
 */
const vehicleSearchReset = () => {
  vehicleQuery.value = {}; // 清空搜索
  vehiclePage.value.currentPage = 1;
  loadVehicleList(); // loadVehicleList 内部已经写死 carrierType: '0'
};
const vehicleCurrentChange = (val: number) => {
  vehiclePage.value.currentPage = val;
  loadVehicleList();
};
const vehicleSizeChange = (val: number) => {
  vehiclePage.value.pageSize = val;
  loadVehicleList();
};
const handleVehicleRowClick = (row: VehicleRow) => {
  selectedVehicleRow.value = row;
};
// 打开弹窗方法
const handleVehicleSelect = () => {
  selectedVehicleRow.value = {};
  vehicleDialogVisible.value = true;
};
/**
 * 确认选择:回显到主表单
 */
const confirmVehicleSelection = () => {
  if (!selectedVehicleRow.value.licensePlate) {
    appContext.$message.warning("请点击选择一行记录");
    return;
  }
  // 1. 赋值 (确保主表单 data.form 存在)
  data.form.vehicleId = selectedVehicleRow.value.id;
  data.form.licensePlate = selectedVehicleRow.value.licensePlate;
  data.form.actualVehicleType = selectedVehicleRow.value.vehicleType;
  // 如果需要其他字段也可以一并带回,比如服务商等
  // data.form.serviceProviderName = selectedVehicleRow.value.serviceProviderName;
  vehicleDialogVisible.value = false;
  // 2. 强制视图更新
  nextTick(() => {
    appContext.$forceUpdate();
  });
};
</script>
<style lang="scss" scoped>
::v-deep .cydprint .el-dialog__body {