董国庆
2026-06-24 d445e6870499ba248774700edb08206159c193f7
修改
4个文件已修改
126 ■■■■■ 已修改文件
src/views/assetManagement/vehicleManagement/operatingVehicle/components/DetectionDetailModal.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operations/attendance/shift/components/ShiftFormModal.vue 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/operations/taskOrder/taskOrderCenter/components/RegularDetailModal.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/transaction/order/orderManagement/index.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/assetManagement/vehicleManagement/operatingVehicle/components/DetectionDetailModal.vue
@@ -96,7 +96,7 @@
          <!-- 传感器清洁 -->
          <div class="manual-item">
            <div class="check-label">
              传感器清洁:
              外观和轮胎 :
            </div>
            <div class="image-list">
              <template v-if="detailData.sensorCleanImages && detailData.sensorCleanImages.length">
@@ -118,7 +118,7 @@
          <!-- 紧急求助按钮/应答机 -->
          <div class="manual-item">
            <div class="check-label">
              紧急求助按钮/应答机:
              车内大屏:
            </div>
            <div class="image-list">
              <template v-if="detailData.helpButtonImages && detailData.helpButtonImages.length">
@@ -140,7 +140,7 @@
          <!-- 订单系统检查 -->
          <div class="manual-item">
            <div class="check-label">
              订单系统检查:
              舱内外清洁:
            </div>
            <div class="image-list">
              <template v-if="detailData.orderSystemCheckImages && detailData.orderSystemCheckImages.length">
@@ -162,7 +162,7 @@
          <!-- 车内交互屏检查 -->
          <div class="manual-item">
            <div class="check-label">
              车内交互屏检查:
              随车安全设备:
            </div>
            <div class="image-list">
              <template v-if="detailData.interactiveScreenImages && detailData.interactiveScreenImages.length">
src/views/operations/attendance/shift/components/ShiftFormModal.vue
@@ -52,28 +52,82 @@
  restEndTime: null,
})
function toMinutes(time: string) {
  const [hours, minutes] = time.split(':').map(Number)
  return hours * 60 + minutes
}
function isLatestLaterThanEarliest(earliest: string | null, latest: string | null) {
  if (!earliest || !latest) {
    return true
  }
  return toMinutes(latest) > toMinutes(earliest)
}
const rules: FormRules = {
  shiftName: [
    { required: true, message: '请输入班次名称', trigger: ['change', 'blur'] },
  ],
  startTime: [
    { required: true, message: '请选择开始时间', trigger: ['change', 'blur'] },
    { required: true, message: '请选择开始时间', trigger: ['change'] },
  ],
  maxStartTime: [
    { required: true, message: '请选择上班最早打卡时间', trigger: ['change', 'blur'] },
    { required: true, message: '请选择上班最早打卡时间', trigger: ['change'] },
    {
      validator: () => {
        if (!isLatestLaterThanEarliest(formModel.value.maxStartTime, formModel.value.minStartTime)) {
          return new Error('上班最晚打卡时间必须晚于最早打卡时间')
        }
        return true
      },
      trigger: ['change'],
    },
  ],
  minStartTime: [
    { required: true, message: '请选择上班最晚打卡时间', trigger: ['change', 'blur'] },
    { required: true, message: '请选择上班最晚打卡时间', trigger: ['change'] },
    {
      validator: () => {
        if (!isLatestLaterThanEarliest(formModel.value.maxStartTime, formModel.value.minStartTime)) {
          return new Error('上班最晚打卡时间必须晚于最早打卡时间')
        }
        return true
      },
      trigger: ['change'],
    },
  ],
  endTime: [
    { required: true, message: '请选择结束时间', trigger: ['change', 'blur'] },
    { required: true, message: '请选择结束时间', trigger: ['change'] },
    // 这里因为可能有跨天逻辑,原有的简单结束必须大于开始时间的校验可能不适用,暂时移除强制结束>开始
  ],
  maxEndTime: [
    { required: true, message: '请选择下班最早打卡时间', trigger: ['change', 'blur'] },
    { required: true, message: '请选择下班最早打卡时间', trigger: ['change'] },
    {
      validator: () => {
        if (formModel.value.crossDay) {
          return true
        }
        if (!isLatestLaterThanEarliest(formModel.value.maxEndTime, formModel.value.minEndTime)) {
          return new Error('下班最晚打卡时间必须晚于最早打卡时间')
        }
        return true
      },
      trigger: ['change'],
    },
  ],
  minEndTime: [
    { required: true, message: '请选择下班最晚打卡时间', trigger: ['change', 'blur'] },
    { required: true, message: '请选择下班最晚打卡时间', trigger: ['change'] },
    {
      validator: () => {
        if (formModel.value.crossDay) {
          return true
        }
        if (!isLatestLaterThanEarliest(formModel.value.maxEndTime, formModel.value.minEndTime)) {
          return new Error('下班最晚打卡时间必须晚于最早打卡时间')
        }
        return true
      },
      trigger: ['change'],
    },
  ],
  restStartTime: [
    {
@@ -94,7 +148,7 @@
        }
        return true
      },
      trigger: ['change', 'blur'],
      trigger: ['change'],
    },
  ],
  restEndTime: [
@@ -126,7 +180,7 @@
        }
        return true
      },
      trigger: ['change', 'blur'],
      trigger: ['change'],
    },
  ],
}
@@ -184,6 +238,19 @@
  { immediate: true },
)
watch(
  () => formModel.value.crossDay,
  async crossDay => {
    if (!show.value || !crossDay) {
      return
    }
    // 切换为跨天后清空当前表单校验态,避免下班时间窗残留旧报错
    await nextTick()
    formRef.value?.restoreValidation()
  },
)
function openEdit(data: any) {
  formModel.value = {
    ...formModel.value,
src/views/operations/taskOrder/taskOrderCenter/components/RegularDetailModal.vue
@@ -257,7 +257,7 @@
        <div class="section-title">人工检测</div>
        <div class="grid-gap-3">
          <div class="block">
            <div class="block-label">传感器清洁:</div>
            <div class="block-label">外观和轮胎:</div>
            <n-image-group>
              <div class="thumb-list">
                <n-image
@@ -276,7 +276,7 @@
            </n-image-group>
          </div>
          <div class="block">
            <div class="block-label">紧急求组按钮/应答机:</div>
            <div class="block-label">车内大屏:</div>
            <n-image-group>
              <div class="thumb-list">
                <n-image
@@ -295,7 +295,7 @@
            </n-image-group>
          </div>
          <div class="block">
            <div class="block-label">订单系统检查:</div>
            <div class="block-label">舱内外清洁:</div>
            <n-image-group>
              <div class="thumb-list">
                <n-image
@@ -316,7 +316,7 @@
        </div>
        <div class="grid-gap-3">
          <div class="block">
            <div class="block-label">车内交互屏检查:</div>
            <div class="block-label">随车安全设备:</div>
            <n-image-group>
              <div class="thumb-list">
                <n-image
src/views/transaction/order/orderManagement/index.vue
@@ -36,7 +36,7 @@
  endPointName: '',
  vehicleModel: '',
  orderMoney: '',
  plateNumber: null,
  plateNumber: [],
  fleetId: null,
  orderSource: null,
  cityCode: null,
@@ -68,6 +68,17 @@
const modalRef = ref()
const modalRef1 = ref()
const closeOrderModalRef = ref()
function buildPlateNumberParam(value: unknown) {
  if (Array.isArray(value)) {
    const filteredValues = value
      .map(item => String(item || '').trim())
      .filter(item => item !== '')
    return filteredValues.length ? filteredValues.join(',') : null
  }
  const singleValue = String(value || '').trim()
  return singleValue || null
}
const checkedRowKeysRef = ref<DataTableRowKey[]>([])
const listData = ref<any[]>([])
@@ -316,15 +327,8 @@
      const option = statusOptions.find(item => item.value === row.status)
      return (
        <NTag
          type={option?.type || 'default'}
          color={{ textColor: option?.textColor || '#0BB52D', color: option?.color || '#DCF5DD' }}
          color={{ textColor: option?.textColor, color: option?.color }}
          bordered={false}
          style={row.status === 9
            ? {
                color: '#764DFF',
                backgroundColor: '#F6F0FF',
              }
            : {}}
        >
          {option?.label || ''}
        </NTag>
@@ -488,6 +492,7 @@
        v-model:value={model.value.plateNumber}
        onUpdate:show={(val: any) => isPlateNumberOpen.value = val}
        options={plateNumberOptions.value}
        multiple
        filterable
        clearable
      >
@@ -675,7 +680,7 @@
    vehicleModel: model.value.vehicleModel,
    orderMoney: model.value.orderMoney,
    name: model.value.name,
    plateNumber: model.value.plateNumber,
    plateNumber: buildPlateNumberParam(model.value.plateNumber),
    fleetId: model.value.fleetId,
    orderSource: model.value.orderSource,
    cityCode: model.value.cityCode,
@@ -708,7 +713,7 @@
      endPointName: model.value.endPointName,
      vehicleModel: model.value.vehicleModel,
      orderMoney: model.value.orderMoney,
      plateNumber: model.value.plateNumber,
      plateNumber: buildPlateNumberParam(model.value.plateNumber),
      name: model.value.name,
      fleetId: model.value.fleetId,
      orderSource: model.value.orderSource,