12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- <template>
- <uv-form-item :prop="prop">
- <template #label>
- <uv-text :text="label" :prefix-icon="icon" v-bind="titleBindings"/>
- </template>
- <uv-input v-model="model[prop]" v-bind="inputBindings" :placeholder="autoPlaceholder"
- :type="type" @update:modelValue="$emit('update:modelValue', $event)">
- <template v-for="(s, name) in $slots" #[name]>
- <slot :name="name"/>
- </template>
- </uv-input>
- </uv-form-item>
- </template>
- <script setup>
- /*NOTE: 必须设置父级uv-form.labelPosition=`top`来确保该组件的布局*/
- import {computed, ref} from 'vue'
- import {createPropDefine} from "@/utils";
- import {useInjectFormData} from "@/pages/login/components/hooks/useFormDataInjection";
- const props = defineProps({
- prop: createPropDefine(''),
- modelValue: createPropDefine(''),
- label: createPropDefine(''),
- placeholder: createPropDefine(''),
- icon: createPropDefine(''),
- type: createPropDefine(undefined)
- })
- defineEmits(['update:modelValue'])
- const [model] = useInjectFormData()
- const autoPlaceholder = computed(() => props.placeholder || '请输入' + props.label)
- const titleBindings = ref({
- color: 'var(--primary-color)',
- size: 20,
- iconStyle: {
- fontSize: '24px',
- color: 'var(--primary-color)'
- }
- })
- const inputBindings = ref({
- fontSize: 18,
- clearable: true,
- border: 'bottom',
- customStyle: {padding: '10px 0'}
- })
- </script>
- <style scoped>
- </style>
|