gaoluyang
2026-06-24 c0cb161bb52ce0fbdce5c66ec391d107c75e2452
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import type { VbenFormSchema } from '#/adapter/form';
 
import { markRaw } from 'vue';
 
import NumberRangeInput from './number-range-input.vue';
 
export { default as NumberRangeInput } from './number-range-input.vue';
 
export type NumberRangeValue = [number | undefined, number | undefined];
 
function splitNumberRange(minFieldName: string, maxFieldName: string) {
  return (
    value: NumberRangeValue | undefined,
    setValue: (fieldName: string, value: number | undefined) => void,
  ) => {
    setValue(minFieldName, value?.[0]);
    setValue(maxFieldName, value?.[1]);
    return undefined;
  };
}
 
export function buildNumberRangeSchema(
  label: string,
  fieldName: string,
  minFieldName: string,
  maxFieldName: string,
  precision: number,
): VbenFormSchema {
  return {
    component: markRaw(NumberRangeInput),
    componentProps: {
      min: 0,
      precision,
    },
    fieldName,
    label,
    valueFormat: splitNumberRange(minFieldName, maxFieldName),
  };
}