| | |
| | | creditPayNeedConfirm: number |
| | | operateFreeStartTime: number | null |
| | | operateFreeEndTime: number | null |
| | | minPickupNavigationDistance: string |
| | | nearPickupMaxSpeedKmh: string |
| | | } |
| | | |
| | | const message = useMessage() |
| | |
| | | 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) |
| | |
| | | creditPayNeedConfirm: 0, |
| | | operateFreeStartTime: null, |
| | | operateFreeEndTime: null, |
| | | minPickupNavigationDistance: '', |
| | | nearPickupMaxSpeedKmh: '', |
| | | }) |
| | | |
| | | const onlyAllowNumberAndDash = (value: string) => !value || /^[\d-]+$/.test(value) |
| | |
| | | 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' }, |
| | |
| | | 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) { |
| | |
| | | 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) { |
| | |
| | | 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) { |
| | |
| | | { 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: '权限指引手册' }, |
| | |
| | | </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"> |
| | | 小程序曲风预设管理 |