fix(form): 文本输入change出发太频繁

This commit is contained in:
roymondchen 2025-11-18 19:13:56 +08:00
parent 0ecc116652
commit 55a2869818
4 changed files with 65 additions and 12 deletions

View File

@ -1,7 +1,7 @@
<template> <template>
<TMagicInputNumber <TMagicInputNumber
v-if="model" v-if="model"
:model-value="model[name]" v-model="value"
clearable clearable
controls-position="right" controls-position="right"
:size="size" :size="size"
@ -10,13 +10,13 @@
:step="config.step" :step="config.step"
:placeholder="config.placeholder" :placeholder="config.placeholder"
:disabled="disabled" :disabled="disabled"
@update:model-value="changeHandler" @change="changeHandler"
@input="inputHandler" @input="inputHandler"
></TMagicInputNumber> ></TMagicInputNumber>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { inject } from 'vue'; import { inject, ref, watch } from 'vue';
import { TMagicInputNumber } from '@tmagic/design'; import { TMagicInputNumber } from '@tmagic/design';
@ -34,6 +34,18 @@ const emit = defineEmits<{
input: [values: number]; input: [values: number];
}>(); }>();
const value = ref<number>();
watch(
() => props.model[props.name],
(v) => {
value.value = v;
},
{
immediate: true,
},
);
useAddField(props.prop); useAddField(props.prop);
const mForm = inject<FormState | null>('mForm'); const mForm = inject<FormState | null>('mForm');

View File

@ -1,24 +1,26 @@
<template> <template>
<div class="m-fields-number-range"> <div class="m-fields-number-range">
<TMagicInput <TMagicInput
:model-value="model[name][0]" v-model="firstValue"
:clearable="config.clearable ?? true" :clearable="config.clearable ?? true"
:size="size" :size="size"
:disabled="disabled" :disabled="disabled"
@update:model-value="minChangeHandler" @change="minChangeHandler"
></TMagicInput> ></TMagicInput>
<span class="split-tag">-</span> <span class="split-tag">-</span>
<TMagicInput <TMagicInput
:model-value="model[name][1]" v-model="secondValue"
:clearable="config.clearable ?? true" :clearable="config.clearable ?? true"
:size="size" :size="size"
:disabled="disabled" :disabled="disabled"
@update:model-value="maxChangeHandler" @change="maxChangeHandler"
></TMagicInput> ></TMagicInput>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, watch } from 'vue';
import { TMagicInput } from '@tmagic/design'; import { TMagicInput } from '@tmagic/design';
import type { FieldProps, NumberRangeConfig } from '../schema'; import type { FieldProps, NumberRangeConfig } from '../schema';
@ -34,6 +36,21 @@ const emit = defineEmits<{
change: [values: [number, number]]; change: [values: [number, number]];
}>(); }>();
const firstValue = ref<number>();
const secondValue = ref<number>();
watch(
() => props.model[props.name],
([first, second]) => {
firstValue.value = first;
secondValue.value = second;
},
{
immediate: true,
deep: true,
},
);
useAddField(props.prop); useAddField(props.prop);
if (!Array.isArray(props.model[props.name])) { if (!Array.isArray(props.model[props.name])) {

View File

@ -1,13 +1,13 @@
<template> <template>
<div class="m-fields-text"> <div class="m-fields-text">
<TMagicInput <TMagicInput
:model-value="model[name]" v-model="value"
ref="input" ref="input"
clearable clearable
:size="size" :size="size"
:placeholder="config.placeholder" :placeholder="config.placeholder"
:disabled="disabled" :disabled="disabled"
@update:model-value="changeHandler" @change="changeHandler"
@input="inputHandler" @input="inputHandler"
@keyup="keyUpHandler($event)" @keyup="keyUpHandler($event)"
> >
@ -67,6 +67,18 @@ useAddField(props.prop);
const mForm = inject<FormState | undefined>('mForm'); const mForm = inject<FormState | undefined>('mForm');
const value = ref('');
watch(
() => props.model[props.name],
(v) => {
value.value = v;
},
{
immediate: true,
},
);
const appendConfig = computed(() => { const appendConfig = computed(() => {
if (typeof props.config.append === 'string') { if (typeof props.config.append === 'string') {
return { return {

View File

@ -1,20 +1,20 @@
<template> <template>
<TMagicInput <TMagicInput
:model-value="model[name]" v-model="value"
type="textarea" type="textarea"
:size="size" :size="size"
clearable clearable
:placeholder="config.placeholder" :placeholder="config.placeholder"
:disabled="disabled" :disabled="disabled"
:rows="config.rows" :rows="config.rows"
@update:model-value="changeHandler" @change="changeHandler"
@input="inputHandler" @input="inputHandler"
> >
</TMagicInput> </TMagicInput>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { inject } from 'vue'; import { inject, ref, watch } from 'vue';
import { TMagicInput } from '@tmagic/design'; import { TMagicInput } from '@tmagic/design';
@ -32,6 +32,18 @@ const emit = defineEmits<{
input: [value: string]; input: [value: string];
}>(); }>();
const value = ref('');
watch(
() => props.model[props.name],
(v) => {
value.value = v;
},
{
immediate: true,
},
);
useAddField(props.prop); useAddField(props.prop);
const mForm = inject<FormState | null>('mForm'); const mForm = inject<FormState | null>('mForm');