zhouhn
2026-08-19 acc7e4d4b329e9555995da6cff12f788c72f78db
Merge origin/feat/nearby-order into feat/deploy-uat [ai-coding] [zhouhn]
1个文件已修改
71 ■■■■■ 已修改文件
src/views/system/config/index.vue 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/config/index.vue
@@ -29,6 +29,8 @@
  creditPayNeedConfirm: number
  operateFreeStartTime: number | null
  operateFreeEndTime: number | null
  minPickupNavigationDistance: string
  nearPickupMaxSpeedKmh: string
}
const message = useMessage()
@@ -69,6 +71,7 @@
const formRef = ref<FormInst | null>(null)
const strategyFormRef = ref<FormInst | null>(null)
const orderStrategyFormRef = ref<FormInst | null>(null)
const pickupStrategyFormRef = ref<FormInst | null>(null)
const operateFreeStartTimePicker = ref<any>(null)
const operateFreeEndTimePicker = ref<any>(null)
@@ -97,6 +100,8 @@
  creditPayNeedConfirm: 0,
  operateFreeStartTime: null,
  operateFreeEndTime: null,
  minPickupNavigationDistance: '',
  nearPickupMaxSpeedKmh: '',
})
const onlyAllowNumberAndDash = (value: string) => !value || /^[\d-]+$/.test(value)
@@ -165,6 +170,18 @@
  formModel.value.orderExceptionalTimeout = normalizedValue
}
function handleMinPickupNavigationDistanceChange(value: string) {
  // 仅保留数字,并在输入阶段直接截断为最多4位,确保不超过9999
  const normalizedValue = value.replace(/\D/g, '').slice(0, 4)
  formModel.value.minPickupNavigationDistance = normalizedValue
}
function handleNearPickupMaxSpeedKmhChange(value: string) {
  // 仅保留数字,并在输入阶段直接截断为最多3位,确保不超过999
  const normalizedValue = value.replace(/\D/g, '').slice(0, 3)
  formModel.value.nearPickupMaxSpeedKmh = normalizedValue
}
const rules: FormRules = {
  customerServicePhone: [
    { required: true, message: '请输入客服电话', trigger: 'blur' },
@@ -215,17 +232,24 @@
  churnThresholdDays: [
    { required: true, message: '请输入正整数', trigger: 'blur' },
  ],
  minPickupNavigationDistance: [
    { required: true, message: '请输入正整数(0表示关闭功能)', trigger: 'blur' },
  ],
  nearPickupMaxSpeedKmh: [
    { required: true, message: '请输入正整数', trigger: 'blur' },
  ],
}
const originalSetting = ref<any | null>(null)
async function handleSave() {
  try {
    // 三块表单统一校验,任意一块不通过都不允许保存
    // 四块表单统一校验,任意一块不通过都不允许保存
    await Promise.all([
      formRef.value?.validate(),
      strategyFormRef.value?.validate(),
      orderStrategyFormRef.value?.validate(),
      pickupStrategyFormRef.value?.validate(),
    ])
    // 权限指引手册链接:底部保存时也强制校验(必填 + 格式)
    if (!permissionGuideLink.value) {
@@ -286,6 +310,8 @@
      xczCaCount: Number(formModel.value.xczCaCount ?? 0),
      xczHmSpeedPerHour: Number(formModel.value.xczHmSpeedPerHour ?? 0),
      xczHmDuration: Number(formModel.value.xczHmDuration ?? 0),
      minPickupNavigationDistance: Number(formModel.value.minPickupNavigationDistance ?? 0),
      nearPickupMaxSpeedKmh: Number(formModel.value.nearPickupMaxSpeedKmh ?? 15),
    }
    const res = await saveSystemSetting(payload)
    if (res.code === 200) {
@@ -326,6 +352,8 @@
      formModel.value.xczCaCount = d.xczCaCount ? d.xczCaCount.toString() : ''
      formModel.value.xczHmSpeedPerHour = d.xczHmSpeedPerHour ? d.xczHmSpeedPerHour.toString() : ''
      formModel.value.xczHmDuration = d.xczHmDuration ? d.xczHmDuration.toString() : ''
      formModel.value.minPickupNavigationDistance = d.minPickupNavigationDistance != null ? d.minPickupNavigationDistance.toString() : ''
      formModel.value.nearPickupMaxSpeedKmh = d.nearPickupMaxSpeedKmh != null ? d.nearPickupMaxSpeedKmh.toString() : ''
    }
  }
  catch (e) {
@@ -389,6 +417,7 @@
  { id: 'section-system', title: '系统配置' },
  { id: 'section-strategy', title: '行程中修改目的地策略' },
  { id: 'section-order', title: '下单及点位吸附策略' },
  { id: 'section-pickup', title: '近距离上车点导航策略' },
  { id: 'section-genre', title: '小程序曲风预设管理' },
  { id: 'section-insurance', title: '保险类型设置' },
  { id: 'section-permission', title: '权限指引手册' },
@@ -786,6 +815,46 @@
          </div>
        </n-form>
      </div>
      <div id="section-pickup" class="box mb-12px">
        <div class="section-title">
          近距离上车点导航策略
        </div>
        <n-form
          ref="pickupStrategyFormRef"
          :model="formModel" :rules="rules" label-placement="left"
          require-mark-placement="left"
        >
          <div class="form-row gap-x-40px!">
            <n-form-item label="接驾导航距离<" path="minPickupNavigationDistance" required class="row-item">
              <div class="inline-input break-line">
                <n-input-group class="w-290px">
                  <n-input
                    :value="formModel.minPickupNavigationDistance" placeholder="请输入"
                    :allow-input="onlyAllowNumberAndDash"
                    @update:value="handleMinPickupNavigationDistanceChange"
                  />
                  <n-input-group-label>m</n-input-group-label>
                </n-input-group>
                <span class="inline-note">时下发空导航(0=关闭功能)</span>
              </div>
            </n-form-item>
            <n-form-item label="静止判定时速<" path="nearPickupMaxSpeedKmh" required class="row-item">
              <div class="inline-input break-line">
                <n-input-group class="w-290px">
                  <n-input
                    :value="formModel.nearPickupMaxSpeedKmh" placeholder="请输入"
                    :allow-input="onlyAllowNumberAndDash"
                    @update:value="handleNearPickupMaxSpeedKmhChange"
                  />
                  <n-input-group-label>km/h</n-input-group-label>
                </n-input-group>
                <span class="inline-note">视为静止(默认15)</span>
              </div>
            </n-form-item>
          </div>
        </n-form>
      </div>
      <div id="section-genre" class="box mb-12px">
        <div class="section-title">
          小程序曲风预设管理