mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2026-07-25 03:55:43 +08:00
66 lines
1.9 KiB
Vue
66 lines
1.9 KiB
Vue
<template>
|
|
<component
|
|
class="tmagic-design-form-item"
|
|
:class="{ 'has-extra-tips': adapterType === 'element-plus' && extraTips }"
|
|
:is="uiComponent"
|
|
v-bind="uiProps"
|
|
>
|
|
<template #label>
|
|
<slot name="label"> </slot>
|
|
</template>
|
|
|
|
<template #default>
|
|
<slot></slot>
|
|
<alert
|
|
v-if="adapterType === 'element-plus' && extraTips"
|
|
:title="extraTips"
|
|
type="warning"
|
|
show-icon
|
|
:closable="false"
|
|
></alert>
|
|
<div v-else-if="adapterType === 'element-plus' && extra" v-html="extra" class="m-form-tip"></div>
|
|
</template>
|
|
|
|
<template v-if="adapterType === 'element-plus'" #error="{ error }">
|
|
<div class="el-form-item__error">{{ resolveErrorText(error) }}</div>
|
|
</template>
|
|
</component>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { computed, inject } from 'vue';
|
|
|
|
import Alert from './Alert.vue';
|
|
import { getDesignConfig } from './config';
|
|
import { stripValidateSuggestion } from './formValidateMessage';
|
|
import { isGlobalFlat } from './index';
|
|
import type { FormItemProps } from './types';
|
|
|
|
defineOptions({
|
|
name: 'TMFormItem',
|
|
});
|
|
|
|
const props = defineProps<FormItemProps & { theme?: string }>();
|
|
|
|
const ui = getDesignConfig('components')?.formItem;
|
|
const uiComponent = ui?.component || 'el-form-item';
|
|
|
|
const adapterType = getDesignConfig('adapterType');
|
|
|
|
const formInline = inject<boolean>('formInline');
|
|
|
|
const uiProps = computed<FormItemProps>(() => {
|
|
const { extra, extraTips, ...rest } = ui?.props(props) || props;
|
|
if (isGlobalFlat.value && rest.labelPosition === undefined) {
|
|
return { ...rest, labelPosition: formInline ? 'right' : 'left' };
|
|
}
|
|
return rest;
|
|
});
|
|
|
|
/**
|
|
* 校验错误文案中,「修改建议」仅用于错误汇总展示。
|
|
* form-item 行内错误只展示主错误描述,不展示修改建议。
|
|
*/
|
|
const resolveErrorText = (error?: string) => stripValidateSuggestion(error);
|
|
</script>
|