feat: 输入文本含有空格时,弹窗提示

This commit is contained in:
marchyang 2024-01-05 14:35:42 +08:00
parent 3c167f3b54
commit ab5e31dfea

View File

@ -1,32 +1,44 @@
<template> <template>
<TMagicInput <TMagicPopover :visible="popoverVisible" width="220px">
v-model="model[name]" <template #reference>
clearable <TMagicInput
:size="size" v-model="model[name]"
:placeholder="config.placeholder" clearable
:disabled="disabled"
@change="changeHandler"
@input="inputHandler"
@keyup="keyUpHandler($event)"
>
<template #append v-if="config.append">
<span v-if="typeof config.append === 'string'">{{ config.append }}</span>
<TMagicButton
v-if="typeof config.append === 'object' && config.append.type === 'button'"
style="color: #409eff"
:size="size" :size="size"
@click.prevent="buttonClickHandler" :placeholder="config.placeholder"
:disabled="disabled"
@change="changeHandler"
@input="inputHandler"
@keyup="keyUpHandler($event)"
> >
{{ config.append.text }} <template #append v-if="config.append">
</TMagicButton> <span v-if="typeof config.append === 'string'">{{ config.append }}</span>
<TMagicButton
v-if="typeof config.append === 'object' && config.append.type === 'button'"
style="color: #409eff"
:size="size"
@click.prevent="buttonClickHandler"
>
{{ config.append.text }}
</TMagicButton>
</template>
</TMagicInput>
</template> </template>
</TMagicInput>
<div class="m-form-item__content">
<div class="m-form-validate__warning">输入内容前后有空格是否移除空格</div>
<div style="display: flex; justify-content: flex-end">
<TMagicButton type="text" size="small" @click="popoverVisible = false">保持原样</TMagicButton>
<TMagicButton type="primary" size="small" @click="confirmTrimHandler">移除空格</TMagicButton>
</div>
</div>
</TMagicPopover>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { inject } from 'vue'; import { inject, ref } from 'vue';
import { TMagicButton, TMagicInput } from '@tmagic/design'; import { TMagicButton, TMagicInput, TMagicPopover } from '@tmagic/design';
import { isNumber } from '@tmagic/utils'; import { isNumber } from '@tmagic/utils';
import type { FieldProps, FormState, TextConfig } from '../schema'; import type { FieldProps, FormState, TextConfig } from '../schema';
@ -47,11 +59,25 @@ useAddField(props.prop);
const mForm = inject<FormState | undefined>('mForm'); const mForm = inject<FormState | undefined>('mForm');
const popoverVisible = ref(false);
const confirmTrimHandler = () => {
emit('change', props.model[props.name].trim() || '');
popoverVisible.value = false;
};
const checkWhiteSpace = (value: unknown) => {
if (typeof value === 'string' && !props.config.trim) {
popoverVisible.value = value.trim() !== value;
}
};
const changeHandler = (value: string) => { const changeHandler = (value: string) => {
emit('change', value); emit('change', value);
}; };
const inputHandler = (v: string) => { const inputHandler = (v: string) => {
checkWhiteSpace(v);
emit('input', v); emit('input', v);
mForm?.$emit('field-input', props.prop, v); mForm?.$emit('field-input', props.prop, v);
}; };
@ -124,3 +150,11 @@ const keyUpHandler = ($event: KeyboardEvent) => {
emit('change', props.model[props.name]); emit('change', props.model[props.name]);
}; };
</script> </script>
<style lang="scss" scoped>
.m-form-validate__warning {
color: var(--el-color-warning);
font-size: 12px;
width: 100%;
line-height: 1.4;
}
</style>