zjk
2026-03-23 83149aa17a23ed3ef077ea2f48357dde664d291a
feat: 修改定价管理bug
1个文件已修改
708 ■■■■■ 已修改文件
src/views/transaction/pricingManagement/detail.vue 708 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/transaction/pricingManagement/detail.vue
@@ -1,134 +1,8 @@
<script setup lang="tsx">
import { useBoolean } from '@/hooks'
import { useTabStore } from '@/store'
import { NButton, NSpace } from 'naive-ui'
import { useRoute, useRouter } from 'vue-router'
import { getPricingDetail, setPricing } from '@/service/api/transaction'
// 检查对象中是否存在值为null的键
const hasNullValue = (obj: Record<string, any>) => {
  for (const key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      if (obj[key] === null) {
        return true
      }
    }
  }
  return false
}
const validateTimeRanges = () => {
  // 验证起步价时段
  if (model.value.startingFareJson && model.value.startingFareJson.length > 0) {
    // 检查每个时段的开始时间不能大于等于结束时间
    for (const item of model.value.startingFareJson) {
      if (item.num1 && item.num2) {
        // 将时间字符串转换为分钟数进行比较
        const [startHour, startMinute] = item.num1.split(':').map(Number);
        const [endHour, endMinute] = item.num2.split(':').map(Number);
        const startMinutes = startHour * 60 + startMinute;
        const endMinutes = endHour * 60 + endMinute;
        if (startMinutes >= endMinutes) {
          window.$message.error('起步价时段中,结束时间必须大于开始时间');
          return false;
        }
      }
    }
    // 检查时段之间不能重叠
    for (let i = 0; i < model.value.startingFareJson.length; i++) {
      for (let j = i + 1; j < model.value.startingFareJson.length; j++) {
        const item1 = model.value.startingFareJson[i];
        const item2 = model.value.startingFareJson[j];
        if (item1.num1 && item1.num2 && item2.num1 && item2.num2) {
          const [startHour1, startMinute1] = item1.num1.split(':').map(Number);
          const [endHour1, endMinute1] = item1.num2.split(':').map(Number);
          const [startHour2, startMinute2] = item2.num1.split(':').map(Number);
          const [endHour2, endMinute2] = item2.num2.split(':').map(Number);
          const start1 = startHour1 * 60 + startMinute1;
          const end1 = endHour1 * 60 + endMinute1;
          const start2 = startHour2 * 60 + startMinute2;
          const end2 = endHour2 * 60 + endMinute2;
          // 检查两个时间段是否重叠
          if (start1 < end2 && start2 < end1) {
            window.$message.error('起步价时段不能重叠');
            return false;
          }
        }
      }
    }
  }
  // 验证夜间行驶费用时段
  if (model.value.basicPricingJson1.num14 && model.value.basicPricingJson1.num141) {
    const [startHour, startMinute] = model.value.basicPricingJson1.num14.split(':').map(Number);
    const [endHour, endMinute] = model.value.basicPricingJson1.num141.split(':').map(Number);
    const startMinutes = startHour * 60 + startMinute;
    const endMinutes = endHour * 60 + endMinute;
    if (startMinutes >= endMinutes) {
      window.$message.error('夜间行驶费用时段中,结束时间必须大于开始时间');
      return false;
    }
  }
  // 验证第一个高峰期时段
  if (model.value.basicPricingJson1.num21 && model.value.basicPricingJson1.num211) {
    const [startHour, startMinute] = model.value.basicPricingJson1.num21.split(':').map(Number);
    const [endHour, endMinute] = model.value.basicPricingJson1.num211.split(':').map(Number);
    const startMinutes = startHour * 60 + startMinute;
    const endMinutes = endHour * 60 + endMinute;
    if (startMinutes >= endMinutes) {
      window.$message.error('高峰期费用时段中,结束时间必须大于开始时间');
      return false;
    }
  }
  // 验证第二个高峰期时段
  if (model.value.basicPricingJson1.num22 && model.value.basicPricingJson1.num221) {
    const [startHour, startMinute] = model.value.basicPricingJson1.num22.split(':').map(Number);
    const [endHour, endMinute] = model.value.basicPricingJson1.num221.split(':').map(Number);
    const startMinutes = startHour * 60 + startMinute;
    const endMinutes = endHour * 60 + endMinute;
    if (startMinutes >= endMinutes) {
      window.$message.error('高峰期费用时段中,结束时间必须大于开始时间');
      return false;
    }
  }
  // 检查高峰期时段之间不能重叠
  if (model.value.basicPricingJson1.num21 && model.value.basicPricingJson1.num211 &&
      model.value.basicPricingJson1.num22 && model.value.basicPricingJson1.num221) {
    const [startHour1, startMinute1] = model.value.basicPricingJson1.num21.split(':').map(Number);
    const [endHour1, endMinute1] = model.value.basicPricingJson1.num211.split(':').map(Number);
    const [startHour2, startMinute2] = model.value.basicPricingJson1.num22.split(':').map(Number);
    const [endHour2, endMinute2] = model.value.basicPricingJson1.num221.split(':').map(Number);
    const start1 = startHour1 * 60 + startMinute1;
    const end1 = endHour1 * 60 + endMinute1;
    const start2 = startHour2 * 60 + startMinute2;
    const end2 = endHour2 * 60 + endMinute2;
    // 检查两个高峰期时段是否重叠
    if (start1 < end2 && start2 < end1) {
      window.$message.error('高峰期费用时段不能重叠');
      return false;
    }
  }
  return true;
};
const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(false)
@@ -203,12 +77,12 @@
    num9: null,
  },
  // 起步价-动态计费
  startingFareJson: []
  startingFareJson: [],
}
const model = ref({ ...initialModel })
const addTimePeriod = () => {
function addTimePeriod() {
  model.value.startingFareJson.push({
    num1: null,
    num2: null,
@@ -221,13 +95,13 @@
  })
}
const removeTimePeriod = (item: any) => {
function removeTimePeriod(item: any) {
  model.value.startingFareJson = model.value.startingFareJson.filter((i: any) => i.id !== item.id)
}
const handleSubmit = async () => {
async function handleSubmit() {
  if (!validateTimeRanges()) {
    return;
    return
  }
  await formRef.value?.validate()
  if (type.value === 'add') {
@@ -236,7 +110,6 @@
      return
    }
    if (category.value === '1') {
      console.log(model.value.basicPricingJson1)
      if (hasNullValue(model.value.basicPricingJson1)) {
        window.$message.error('请配置基础定价')
        return
@@ -248,7 +121,6 @@
      model.value.startingFareJson.forEach((item: any) => {
        if (hasNullValue(item)) {
          window.$message.error('请配置起步价')
          return
        }
      })
    }
@@ -259,20 +131,20 @@
    startLoading()
    // 创建一个副本用于提交,避免修改原始数据
    let submitBasicPricingJson1 = { ...model.value.basicPricingJson1 };
    const submitBasicPricingJson1 = { ...model.value.basicPricingJson1 }
    if (category.value === '1' && !hasNullValue(model.value.basicPricingJson1)) {
      // 在副本上进行时间范围合并
      if (submitBasicPricingJson1.num14 && submitBasicPricingJson1.num141) {
        submitBasicPricingJson1.num14 = submitBasicPricingJson1.num14 + ' - ' + submitBasicPricingJson1.num141;
        delete submitBasicPricingJson1.num141;
        submitBasicPricingJson1.num14 = `${submitBasicPricingJson1.num14} - ${submitBasicPricingJson1.num141}`
        delete submitBasicPricingJson1.num141
      }
      if (submitBasicPricingJson1.num21 && submitBasicPricingJson1.num211) {
        submitBasicPricingJson1.num21 = submitBasicPricingJson1.num21 + ' - ' + submitBasicPricingJson1.num211;
        delete submitBasicPricingJson1.num211;
        submitBasicPricingJson1.num21 = `${submitBasicPricingJson1.num21} - ${submitBasicPricingJson1.num211}`
        delete submitBasicPricingJson1.num211
      }
      if (submitBasicPricingJson1.num22 && submitBasicPricingJson1.num221) {
        submitBasicPricingJson1.num22 = submitBasicPricingJson1.num22 + ' - ' + submitBasicPricingJson1.num221;
        delete submitBasicPricingJson1.num221;
        submitBasicPricingJson1.num22 = `${submitBasicPricingJson1.num22} - ${submitBasicPricingJson1.num221}`
        delete submitBasicPricingJson1.num221
      }
    }
@@ -291,17 +163,18 @@
    }).finally(() => {
      endLoading()
    })
  } else {
  }
  else {
    handleCancel()
  }
}
const handleCancel = () => {
function handleCancel() {
  tabStore.closeTab(route.fullPath)
  router.back()
}
const getPricingDetailData = async (id: string) => {
async function getPricingDetailData(id: string) {
  const res = await getPricingDetail(id)
  if (res.code === 200) {
    detail.value = res.data
@@ -321,7 +194,8 @@
      model.value.basicPricingJson1 = Object.keys(parsedBasicPricing).length === 0 ? { ...initialModel.basicPricingJson1 } : parsedBasicPricing
      const parsedStartingFare = JSON.parse(detail.value.startingFareJson)
      model.value.startingFareJson = parsedStartingFare || []
    } else {
    }
    else {
      const parsedBasicPricing = JSON.parse(detail.value.basicPricingJson)
      model.value.basicPricingJson2 = Object.keys(parsedBasicPricing).length === 0 ? { ...initialModel.basicPricingJson2 } : parsedBasicPricing
    }
@@ -343,17 +217,142 @@
  }
})
// 检查对象中是否存在值为null的键
function hasNullValue(obj: Record<string, any>) {
  for (const key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      if (obj[key] === null) {
        return true
      }
    }
  }
  return false
}
function validateTimeRanges() {
  // 验证起步价时段
  if (model.value.startingFareJson && model.value.startingFareJson.length > 0) {
    // 检查每个时段的开始时间不能大于等于结束时间
    for (const item of model.value.startingFareJson) {
      if (item.num1 && item.num2) {
        // 将时间字符串转换为分钟数进行比较
        const [startHour, startMinute] = item.num1.split(':').map(Number)
        const [endHour, endMinute] = item.num2.split(':').map(Number)
        const startMinutes = startHour * 60 + startMinute
        const endMinutes = endHour * 60 + endMinute
        if (startMinutes >= endMinutes) {
          window.$message.error('起步价时段中,结束时间必须大于开始时间')
          return false
        }
      }
    }
    // 检查时段之间不能重叠
    for (let i = 0; i < model.value.startingFareJson.length; i++) {
      for (let j = i + 1; j < model.value.startingFareJson.length; j++) {
        const item1 = model.value.startingFareJson[i]
        const item2 = model.value.startingFareJson[j]
        if (item1.num1 && item1.num2 && item2.num1 && item2.num2) {
          const [startHour1, startMinute1] = item1.num1.split(':').map(Number)
          const [endHour1, endMinute1] = item1.num2.split(':').map(Number)
          const [startHour2, startMinute2] = item2.num1.split(':').map(Number)
          const [endHour2, endMinute2] = item2.num2.split(':').map(Number)
          const start1 = startHour1 * 60 + startMinute1
          const end1 = endHour1 * 60 + endMinute1
          const start2 = startHour2 * 60 + startMinute2
          const end2 = endHour2 * 60 + endMinute2
          // 检查两个时间段是否重叠
          if (start1 < end2 && start2 < end1) {
            window.$message.error('起步价时段不能重叠')
            return false
          }
        }
      }
    }
  }
  // 验证夜间行驶费用时段
  if (model.value.basicPricingJson1.num14 && model.value.basicPricingJson1.num141) {
    const [startHour, startMinute] = model.value.basicPricingJson1.num14.split(':').map(Number)
    const [endHour, endMinute] = model.value.basicPricingJson1.num141.split(':').map(Number)
    const startMinutes = startHour * 60 + startMinute
    const endMinutes = endHour * 60 + endMinute
    if (startMinutes >= endMinutes) {
      window.$message.error('夜间行驶费用时段中,结束时间必须大于开始时间')
      return false
    }
  }
  // 验证第一个高峰期时段
  if (model.value.basicPricingJson1.num21 && model.value.basicPricingJson1.num211) {
    const [startHour, startMinute] = model.value.basicPricingJson1.num21.split(':').map(Number)
    const [endHour, endMinute] = model.value.basicPricingJson1.num211.split(':').map(Number)
    const startMinutes = startHour * 60 + startMinute
    const endMinutes = endHour * 60 + endMinute
    if (startMinutes >= endMinutes) {
      window.$message.error('高峰期费用时段中,结束时间必须大于开始时间')
      return false
    }
  }
  // 验证第二个高峰期时段
  if (model.value.basicPricingJson1.num22 && model.value.basicPricingJson1.num221) {
    const [startHour, startMinute] = model.value.basicPricingJson1.num22.split(':').map(Number)
    const [endHour, endMinute] = model.value.basicPricingJson1.num221.split(':').map(Number)
    const startMinutes = startHour * 60 + startMinute
    const endMinutes = endHour * 60 + endMinute
    if (startMinutes >= endMinutes) {
      window.$message.error('高峰期费用时段中,结束时间必须大于开始时间')
      return false
    }
  }
  // 检查高峰期时段之间不能重叠
  if (model.value.basicPricingJson1.num21 && model.value.basicPricingJson1.num211
    && model.value.basicPricingJson1.num22 && model.value.basicPricingJson1.num221) {
    const [startHour1, startMinute1] = model.value.basicPricingJson1.num21.split(':').map(Number)
    const [endHour1, endMinute1] = model.value.basicPricingJson1.num211.split(':').map(Number)
    const [startHour2, startMinute2] = model.value.basicPricingJson1.num22.split(':').map(Number)
    const [endHour2, endMinute2] = model.value.basicPricingJson1.num221.split(':').map(Number)
    const start1 = startHour1 * 60 + startMinute1
    const end1 = endHour1 * 60 + endMinute1
    const start2 = startHour2 * 60 + startMinute2
    const end2 = endHour2 * 60 + endMinute2
    // 检查两个高峰期时段是否重叠
    if (start1 < end2 && start2 < end1) {
      window.$message.error('高峰期费用时段不能重叠')
      return false
    }
  }
  return true
}
onMounted(() => {
  getPricingDetailData(id.value as string)
})
</script>
<template>
  <n-flex class="w-full h-full">
    <n-card title="设置价格" v-if="type === 'add'">
      <n-form ref="formRef" :model="model" label-placement="left" inline :show-feedback="false"
        require-mark-placement="left">
    <n-card v-if="type === 'add'" title="设置价格">
      <n-form
        ref="formRef" :model="model" label-placement="left" inline :show-feedback="false"
        require-mark-placement="left"
      >
        <n-spin :show="loading">
          <NSpace vertical>
            <!-- <n-card> -->
@@ -371,80 +370,108 @@
            <!-- </n-card> -->
            <!-- 一口价 -->
            <!-- 基础定价 -->
            <NSpace vertical v-if="category === '2'" :size="16">
              <div class="text-base font-bold">基础定价</div>
            <NSpace v-if="category === '2'" vertical :size="16">
              <div class="text-base font-bold">
                基础定价
              </div>
              <div class="pl-4">
                <n-form-item label="起步价设置" path="num1" required>
                  起步价为
                  <n-input-number v-model:value="model.basicPricingJson2.num1" min="0" max="999" :precision="2"
                    :show-button="false" placeholder="最多3位数" class="mx-3" />
                  <n-input-number
                    v-model:value="model.basicPricingJson2.num1" min="0" max="999" :precision="2"
                    :show-button="false" placeholder="最多3位数" class="mx-3"
                  />
                  元,起步价包含
                  <n-input-number v-model:value="model.basicPricingJson2.num2" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" class="mx-3" />
                  <n-input-number
                    v-model:value="model.basicPricingJson2.num2" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" class="mx-3"
                  />
                  公里,
                  <n-input-number v-model:value="model.basicPricingJson2.num3" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" class="mr-3" />
                  <n-input-number
                    v-model:value="model.basicPricingJson2.num3" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" class="mr-3"
                  />
                  分钟
                </n-form-item>
              </div>
              <div class="pl-4">
                <n-form-item label="里程费设置" path="num4" required>
                  超过起步里程后每公里
                  <n-input-number v-model:value="model.basicPricingJson2.num4" min="0" max="999" :precision="2"
                    :show-button="false" placeholder="最多3位数" class="mx-3" />
                  <n-input-number
                    v-model:value="model.basicPricingJson2.num4" min="0" max="999" :precision="2"
                    :show-button="false" placeholder="最多3位数" class="mx-3"
                  />
                  元
                </n-form-item>
              </div>
              <div class="pl-4">
                <n-form-item label="时长费设置" path="num5" required>
                  超过起步时长后每分钟
                  <n-input-number v-model:value="model.basicPricingJson2.num5" min="0" max="999" :precision="2"
                    :show-button="false" placeholder="最多3位数" class="mx-3" />
                  <n-input-number
                    v-model:value="model.basicPricingJson2.num5" min="0" max="999" :precision="2"
                    :show-button="false" placeholder="最多3位数" class="mx-3"
                  />
                  元
                </n-form-item>
              </div>
            </NSpace>
            <NSpace vertical v-else :size="16">
              <div class="text-base font-bold">基础定价</div>
              <NButton type='primary' text @click="addTimePeriod">
            <NSpace v-else vertical :size="16">
              <div class="text-base font-bold">
                基础定价
              </div>
              <NButton type="primary" text @click="addTimePeriod">
                添加时段
              </NButton>
              <div class="pl-4" v-for="item in model.startingFareJson">
              <div v-for="(item, index) in model.startingFareJson" :key="index" class="pl-4">
                <NSpace vertical :size="16">
                  <n-form-item label="时段" path="num1" required label-width="92px">
                    <n-time-picker v-model:formatted-value="item.num1" format="HH:mm" value-format="HH:mm" clearable
                      class="mr-3" />至
                    <n-time-picker v-model:formatted-value="item.num2" format="HH:mm" value-format="HH:mm" clearable
                      class="mx-3" />
                    <n-time-picker
                      v-model:formatted-value="item.num1" format="HH:mm" value-format="HH:mm" clearable
                      class="mr-3"
                    />至
                    <n-time-picker
                      v-model:formatted-value="item.num2" format="HH:mm" value-format="HH:mm" clearable
                      class="mx-3"
                    />
                    <icon-park-outline-delete @click="removeTimePeriod(item)" />
                  </n-form-item>
                  <div class="pl-20">
                    <n-form-item label="起步价设置" path="num3" required>
                      起步价为
                      <n-input-number v-model:value="item.num3" min="0" max="999" :precision="2" :show-button="false"
                        placeholder="最多3位数" class="mx-3" />
                      <n-input-number
                        v-model:value="item.num3" min="0" max="999" :precision="2" :show-button="false"
                        placeholder="最多3位数" class="mx-3"
                      />
                      元,起步价包含
                      <n-input-number v-model:value="item.num4" min="0" max="999" :precision="0" :show-button="false"
                        placeholder="最多3位数" class="mx-3" />
                      <n-input-number
                        v-model:value="item.num4" min="0" max="999" :precision="0" :show-button="false"
                        placeholder="最多3位数" class="mx-3"
                      />
                      公里,
                      <n-input-number v-model:value="item.num5" min="0" max="999" :precision="0" :show-button="false"
                        placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="item.num5" min="0" max="999" :precision="0" :show-button="false"
                        placeholder="最多3位数" class="mr-3"
                      />
                      分钟
                    </n-form-item>
                  </div>
                  <div class="pl-20">
                    <n-form-item label="里程费设置" path="num6" required>
                      超过起步里程后每公里
                      <n-input-number v-model:value="item.num6" min="0" max="999" :precision="2" :show-button="false"
                        placeholder="最多3位数" class="mx-3" />
                      <n-input-number
                        v-model:value="item.num6" min="0" max="999" :precision="2" :show-button="false"
                        placeholder="最多3位数" class="mx-3"
                      />
                      元
                    </n-form-item>
                  </div>
                  <div class="pl-20">
                    <n-form-item label="时长费设置" path="num7" required>
                      超过起步时长后每分钟
                      <n-input-number v-model:value="item.num7" min="0" max="999" :precision="2" :show-button="false"
                        placeholder="最多3位数" class="mx-3" />
                      <n-input-number
                        v-model:value="item.num7" min="0" max="999" :precision="2" :show-button="false"
                        placeholder="最多3位数" class="mx-3"
                      />
                      元
                    </n-form-item>
                  </div>
@@ -453,11 +480,15 @@
              <div class="pl-4">
                <n-form-item label="等待费设置" path="basicPricingJson1" required>
                  司机到达预约地点
                  <n-input-number v-model:value="model.basicPricingJson1.num4" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" class="mx-3" />
                  <n-input-number
                    v-model:value="model.basicPricingJson1.num4" min="0" max="999" :precision="0"
                    :show-button="false" placeholder="最多3位数" class="mx-3"
                  />
                  分钟后开始收取等待费,为
                  <n-input-number v-model:value="model.basicPricingJson1.num5" min="0" max="999" :precision="2"
                    :show-button="false" placeholder="最多3位数" class="mx-3" />
                  <n-input-number
                    v-model:value="model.basicPricingJson1.num5" min="0" max="999" :precision="2"
                    :show-button="false" placeholder="最多3位数" class="mx-3"
                  />
                  元/分,不足一分钟按一分钟计算
                </n-form-item>
              </div>
@@ -465,38 +496,47 @@
                <n-form-item label="远途费设置" path="num6" required>
                  <NSpace vertical :size="16">
                    <NSpace align="center">
                      <!-- 总里程超过
                      <n-input-number v-model:value="model.basicPricingJson1.num6" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" class="mr-3" /> -->
                      总里程超过起步包含公里数时,公里不足
                      <n-input-number v-model:value="model.basicPricingJson1.num7" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num7" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      公里,超出部分每公里加收
                      <n-input-number v-model:value="model.basicPricingJson1.num8" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num8" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元
                    </NSpace>
                    <NSpace align="center">
                      超过
                      <!-- 公里数为num9,但是直接取num7 -->
                      <n-input-number v-model:value="model.basicPricingJson1.num7" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" class="mr-3" disabled />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num9" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" class="mr-3" disabled
                      />
                      不足
                      <n-input-number v-model:value="model.basicPricingJson1.num10" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num10" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      公里时,超出部分每公里加收
                      <n-input-number v-model:value="model.basicPricingJson1.num11" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num11" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元
                    </NSpace>
                    <NSpace align="center">
                      超过
                      <!-- 公里数为num12,但是直接取num10 -->
                      <n-input-number v-model:value="model.basicPricingJson1.num10" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" class="mr-3" disabled/>
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num12" min="0" max="999" :precision="0"
                        :show-button="false" placeholder="最多3位数" class="mr-3" disabled
                      />
                      公里以后,超出部分每公里加收
                      <n-input-number v-model:value="model.basicPricingJson1.num13" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num13" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元
                    </NSpace>
                  </NSpace>
@@ -506,32 +546,48 @@
                <n-form-item label="夜间行驶费用设置" path="num14" required>
                  <NSpace vertical :size="16">
                    <NSpace align="center">
                      <n-time-picker v-model:formatted-value="model.basicPricingJson1.num14" format="HH:mm"
                        value-format="HH:mm" clearable class="w-80px" />-
                      <n-time-picker v-model:formatted-value="model.basicPricingJson1.num141" format="HH:mm"
                        value-format="HH:mm" clearable class="w-80px" />
                      <n-time-picker
                        v-model:formatted-value="model.basicPricingJson1.num14" format="HH:mm"
                        value-format="HH:mm" clearable class="w-80px"
                      />-
                      <n-time-picker
                        v-model:formatted-value="model.basicPricingJson1.num141" format="HH:mm"
                        value-format="HH:mm" clearable class="w-80px"
                      />
                      点为夜间行车时间,起步价变为
                      <n-input-number v-model:value="model.basicPricingJson1.num15" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num15" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元
                    </NSpace>
                    <NSpace align="center">
                      里程费为每公里
                      <n-input-number v-model:value="model.basicPricingJson1.num16" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num16" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元,时长费为每
                      <n-input-number v-model:value="model.basicPricingJson1.num17" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num17" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元
                    </NSpace>
                    <NSpace align="center">
                      远途费为每公里加收
                      <n-input-number v-model:value="model.basicPricingJson1.num18" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number v-model:value="model.basicPricingJson1.num19" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number v-model:value="model.basicPricingJson1.num20" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num18" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num19" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num20" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元
                    </NSpace>
                  </NSpace>
@@ -541,37 +597,57 @@
                <n-form-item label="高峰期费用设置" path="num21" required>
                  <NSpace vertical :size="16">
                    <NSpace align="center">
                      <n-time-picker v-model:formatted-value="model.basicPricingJson1.num21" format="HH:mm"
                        value-format="HH:mm" clearable class="w-80px" />-
                      <n-time-picker v-model:formatted-value="model.basicPricingJson1.num211" format="HH:mm"
                        value-format="HH:mm" clearable class="w-80px" />
                      <n-time-picker
                        v-model:formatted-value="model.basicPricingJson1.num21" format="HH:mm"
                        value-format="HH:mm" clearable class="w-80px"
                      />-
                      <n-time-picker
                        v-model:formatted-value="model.basicPricingJson1.num211" format="HH:mm"
                        value-format="HH:mm" clearable class="w-80px"
                      />
                      和
                      <n-time-picker v-model:formatted-value="model.basicPricingJson1.num22" format="HH:mm"
                        value-format="HH:mm" clearable class="w-80px" />-
                      <n-time-picker v-model:formatted-value="model.basicPricingJson1.num221" format="HH:mm"
                        value-format="HH:mm" clearable class="w-80px" />
                      <n-time-picker
                        v-model:formatted-value="model.basicPricingJson1.num22" format="HH:mm"
                        value-format="HH:mm" clearable class="w-80px"
                      />-
                      <n-time-picker
                        v-model:formatted-value="model.basicPricingJson1.num221" format="HH:mm"
                        value-format="HH:mm" clearable class="w-80px"
                      />
                      为高峰期行车时间,起步价变为
                      <n-input-number v-model:value="model.basicPricingJson1.num23" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num23" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元
                    </NSpace>
                    <NSpace align="center">
                      里程费为每公里
                      <n-input-number v-model:value="model.basicPricingJson1.num24" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num24" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元,时长费为每
                      <n-input-number v-model:value="model.basicPricingJson1.num25" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num25" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元
                    </NSpace>
                    <NSpace align="center">
                      远途费为每公里加收
                      <n-input-number v-model:value="model.basicPricingJson1.num26" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number v-model:value="model.basicPricingJson1.num27" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number v-model:value="model.basicPricingJson1.num28" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num26" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num27" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num28" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元
                    </NSpace>
                  </NSpace>
@@ -582,27 +658,39 @@
                  <NSpace vertical :size="16">
                    <NSpace align="center">
                      节假日起步价变为
                      <n-input-number v-model:value="model.basicPricingJson1.num29" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num29" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元
                    </NSpace>
                    <NSpace align="center">
                      里程费为每公里
                      <n-input-number v-model:value="model.basicPricingJson1.num30" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num30" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元,时长费为每
                      <n-input-number v-model:value="model.basicPricingJson1.num31" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num31" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元
                    </NSpace>
                    <NSpace align="center">
                      远途费为每公里加收
                      <n-input-number v-model:value="model.basicPricingJson1.num32" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number v-model:value="model.basicPricingJson1.num33" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number v-model:value="model.basicPricingJson1.num34" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3" />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num32" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num33" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      <n-input-number
                        v-model:value="model.basicPricingJson1.num34" min="0" max="999" :precision="2"
                        :show-button="false" placeholder="最多3位数" class="mr-3"
                      />
                      元
                    </NSpace>
                  </NSpace>
@@ -611,78 +699,96 @@
            </NSpace>
            <!-- 动态定价 -->
            <NSpace vertical :size="16">
              <div class="text-base font-bold">动态定价</div>
              <div class="text-base font-bold">
                动态定价
              </div>
              <div class="pl-4">
                <n-form-item label="是否开启动态调价" path="isDynamicPrice" required>
                  <n-radio-group v-model:value="model.isDynamicPrice" name="radiogroup">
                    <n-space>
                    <NSpace>
                      <n-radio :value="1">
                        是
                      </n-radio>
                      <n-radio :value="0">
                        否
                      </n-radio>
                    </n-space>
                    </NSpace>
                  </n-radio-group>
                </n-form-item>
              </div>
              <div class="pl-4">
                <n-form-item label="供需关系调价规则" path="num1" required>
                </n-form-item>
                <n-form-item label="供需关系调价规则" path="num1" required />
              </div>
              <div class="pl-20">
                <n-grid :cols="3" :x-gap="18">
                  <n-form-item-grid-item label="供需计算周期:" path="num1">
                    <n-input-number v-model:value="model.dynamicPricingJson.num1" min="0" :precision="0"
                      :show-button="false" class="mr-3" />分钟
                    <n-input-number
                      v-model:value="model.dynamicPricingJson.num1" min="0" :precision="0"
                      :show-button="false" class="mr-3"
                    />分钟
                  </n-form-item-grid-item>
                  <n-form-item-grid-item label="订单需求阈值:" path="num2">
                    <n-input-number v-model:value="model.dynamicPricingJson.num2" min="0" :precision="0"
                      :show-button="false" class="mr-3" />单以上开始上浮
                    <n-input-number
                      v-model:value="model.dynamicPricingJson.num2" min="0" :precision="0"
                      :show-button="false" class="mr-3"
                    />单以上开始上浮
                  </n-form-item-grid-item>
                  <n-form-item-grid-item label="车辆供给阈值:" path="num3">
                    <n-input-number v-model:value="model.dynamicPricingJson.num3" min="0" :precision="0"
                      :show-button="false" class="mr-3" />辆以下开始触发上浮
                    <n-input-number
                      v-model:value="model.dynamicPricingJson.num3" min="0" :precision="0"
                      :show-button="false" class="mr-3"
                    />辆以下开始触发上浮
                  </n-form-item-grid-item>
                </n-grid>
              </div>
              <div class="pl-20">
                <n-form-item label="供需价格系数:" path="condition_1">
                  每增加
                  <n-input-number v-model:value="model.dynamicPricingJson.num4" min="0" :precision="0"
                    :show-button="false" class="mx-3" />
                  <n-input-number
                    v-model:value="model.dynamicPricingJson.num4" min="0" :precision="0"
                    :show-button="false" class="mx-3"
                  />
                  单,价格上浮
                  <n-input-number v-model:value="model.dynamicPricingJson.num5" min="0" :precision="0"
                    :show-button="false" class="mx-3" max="100"/>%
                  <n-input-number
                    v-model:value="model.dynamicPricingJson.num5" min="0" :precision="0"
                    :show-button="false" class="mx-3" max="100"
                  />%
                </n-form-item>
              </div>
              <div class="pl-20">
                <n-form-item label="供需冷却时间:" path="num6">
                  调价后
                  <n-input-number v-model:value="model.dynamicPricingJson.num6" min="0" :precision="0"
                    :show-button="false" class="mx-3" />
                  <n-input-number
                    v-model:value="model.dynamicPricingJson.num6" min="0" :precision="0"
                    :show-button="false" class="mx-3"
                  />
                  分钟内不再重复调整
                </n-form-item>
              </div>
              <div class="pl-4">
                <n-form-item label="区域拥堵调价规则(根据实时路况自动调整价格)" path="num7" required>
                </n-form-item>
                <n-form-item label="区域拥堵调价规则(根据实时路况自动调整价格)" path="num7" required />
              </div>
              <div class="pl-20">
                <n-form-item label="拥堵判断阈值:" path="num7">
                  道路速度
                  < <n-input-number v-model:value="model.dynamicPricingJson.num7" min="0" :precision="0"
                    :show-button="false" class="mx-3" />
                  < <n-input-number
                    v-model:value="model.dynamicPricingJson.num7" min="0" :precision="0"
                    :show-button="false" class="mx-3"
                  />
                  km/h视为拥堵,拥堵价格上浮比例:
                  <n-input-number v-model:value="model.dynamicPricingJson.num8" min="0" :precision="0"
                    :show-button="false" class="mx-3" max="100" />%
                  <n-input-number
                    v-model:value="model.dynamicPricingJson.num8" min="0" :precision="0"
                    :show-button="false" class="mx-3" max="100"
                  />%
                </n-form-item>
              </div>
              <div class="pl-20">
                <n-form-item label="拥堵影响半径:" path="num9">
                  以订单起点为中心
                  <n-input-number v-model:value="model.dynamicPricingJson.num9" min="0" :precision="0"
                    :show-button="false" class="mx-3" />
                  <n-input-number
                    v-model:value="model.dynamicPricingJson.num9" min="0" :precision="0"
                    :show-button="false" class="mx-3"
                  />
                  m范围内
                </n-form-item>
              </div>
@@ -691,17 +797,19 @@
        </n-spin>
      </n-form>
      <NSpace justify="center" class="w-[50%] mt-12">
        <NButton type='primary' @click="handleSubmit">
        <NButton type="primary" @click="handleSubmit">
          保存
        </NButton>
        <NButton type='primary' @click="handleCancel">
        <NButton type="primary" @click="handleCancel">
          取消
        </NButton>
      </NSpace>
    </n-card>
    <n-card title="定价详情" v-else>
      <n-form ref="formRef" :model="model" label-placement="left" inline :show-feedback="false"
        require-mark-placement="left">
    <n-card v-else title="定价详情">
      <n-form
        ref="formRef" :model="model" label-placement="left" inline :show-feedback="false"
        require-mark-placement="left"
      >
        <n-spin :show="loading">
          <NSpace vertical>
            <n-grid :cols="3" :x-gap="18">
@@ -723,8 +831,10 @@
            </n-grid>
            <!-- 一口价 -->
            <!-- 基础定价 -->
            <NSpace vertical v-if="category === '2'">
              <div class="text-base font-bold">基础定价</div>
            <NSpace v-if="category === '2'" vertical>
              <div class="text-base font-bold">
                基础定价
              </div>
              <div class="pl-4">
                <n-form-item label="起步价设置" path="num1">
                  起步价为 {{ model.basicPricingJson2.num1 }} 元,起步包含 {{ model.basicPricingJson2.num2 }} 公里,最多
@@ -742,12 +852,14 @@
                </n-form-item>
              </div>
            </NSpace>
            <NSpace vertical v-else>
              <div class="text-base font-bold">基础定价</div>
              <NButton type='primary' text @click="addTimePeriod">
            <NSpace v-else vertical>
              <div class="text-base font-bold">
                基础定价
              </div>
              <NButton type="primary" text @click="addTimePeriod">
                添加时段
              </NButton>
              <div class="pl-4" v-for="item in model.startingFareJson">
              <div v-for="(item, index) in model.startingFareJson" :key="index" class="pl-4">
                <NSpace vertical>
                  <n-form-item label="时段" path="num1" label-width="92px">
                    {{ item.num1 }} 至 {{ item.num2 }}
@@ -779,8 +891,6 @@
                <n-form-item label="远途费设置" path="basicPricingJson1">
                  <NSpace vertical>
                    <NSpace align="center">
                      <!-- 总里程超过 {{ model.basicPricingJson1.num6 }} 公里不足 {{ model.basicPricingJson1.num7 }} 公里,超出部分每公里加收 {{
                        model.basicPricingJson1.num8 }} 元 -->
                      总里程超过起步包含公里数时,公里不足 {{ model.basicPricingJson1.num7 }} 公里,超出部分每公里加收 {{
                        model.basicPricingJson1.num8 }} 元
                    </NSpace>
@@ -845,16 +955,17 @@
              </div>
            </NSpace>
            <!-- 动态定价 -->
            <NSpace vertical v-if="model.isDynamicPrice === 1">
              <div class="text-base font-bold">动态定价</div>
            <NSpace v-if="model.isDynamicPrice === 1" vertical>
              <div class="text-base font-bold">
                动态定价
              </div>
              <div class="pl-4">
                <n-form-item label="是否开启动态调价" path="isDynamicPrice">
                  {{ model.isDynamicPrice === 1 ? '是' : '否' }}
                </n-form-item>
              </div>
              <div class="pl-4">
                <n-form-item label="供需关系调价规则" path="num1">
                </n-form-item>
                <n-form-item label="供需关系调价规则" path="num1" />
              </div>
              <div class="pl-20">
                供需计算周期 {{ model.dynamicPricingJson.num1 }} 分钟, 订单需求阈值为 {{ model.dynamicPricingJson.num2 }} 单以上开始触发上浮,
@@ -867,13 +978,12 @@
                供需冷却时间 调价后 {{ model.dynamicPricingJson.num6 }} 分钟内不再重复调整
              </div>
              <div class="pl-4">
                <n-form-item label="区域拥堵调价规则(根据实时路况自动调整价格)" path="num7">
                </n-form-item>
                <n-form-item label="区域拥堵调价规则(根据实时路况自动调整价格)" path="num7" />
              </div>
              <div class="pl-20">
                <n-form-item label="拥堵判断阈值:" path="num7">
                  道路速度 < {{ model.dynamicPricingJson.num7 }} km/h视为拥堵,拥堵价格上浮比例:{{ model.dynamicPricingJson.num8 }} %
                    </n-form-item>
                  道路速度 &lt; {{ model.dynamicPricingJson.num7 }} km/h视为拥堵,拥堵价格上浮比例:{{ model.dynamicPricingJson.num8 }} %
                </n-form-item>
              </div>
              <div class="pl-20">
                <n-form-item label="拥堵影响半径:" path="num9">
@@ -883,14 +993,16 @@
            </NSpace>
            <!-- 计费规则说明 -->
            <NSpace vertical>
              <div class="text-base font-bold">计费规则说明</div>
              <div class="pl-4" v-html="detail?.priceRule"></div>
              <div class="text-base font-bold">
                计费规则说明
              </div>
              <div class="pl-4" v-html="detail?.priceRule" />
            </NSpace>
          </NSpace>
        </n-spin>
      </n-form>
      <NSpace justify="center" class="w-[50%] mt-12">
        <NButton type='primary' @click="handleCancel">
        <NButton type="primary" @click="handleCancel">
          返回
        </NButton>
      </NSpace>