PreviewText
阅读态组件,主要用来实现类 Input,类 DatePicker 这些组件的阅读态
简单案例
:
Hello world
vue
<template>
<FormLayout :label-col="6" :wrapper-col="10">
<FormProvider :form="form">
<SchemaField>
<SchemaStringField
x-decorator="FormItem"
title="文本预览"
x-component="PreviewText.Input"
default="Hello world"
/>
<SchemaStringField
x-decorator="FormItem"
title="选择项预览"
x-component="PreviewText.Select"
:x-component-props="{
multiple: true,
}"
:default="['123', '222']"
:enum="[
{ label: 'A111', value: '123' },
{
label: 'A222',
value: '222',
},
]"
/>
<SchemaStringField
x-decorator="FormItem"
title="日期预览"
x-component="PreviewText.DatePicker"
default="2020-11-23 22:15:20"
/>
<SchemaStringField
x-decorator="FormItem"
title="时间预览"
x-component="PreviewText.TimePicker"
:default="['2020-11-23 22:15:20', '2020-11-23 23:15:20']"
/>
<SchemaStringField
x-decorator="FormItem"
title="Cascader预览"
x-component="PreviewText.Cascader"
:default="['hangzhou', 'yuhang']"
:enum="[
{ label: '杭州', value: 'hangzhou' },
{ label: '余杭', value: 'yuhang' },
]"
/>
</SchemaField>
</FormProvider>
</FormLayout>
</template>
<script>
import { createForm } from '@formily/core'
import { FormProvider, createSchemaField } from '@formily/vue'
import { Formily } from 'element-plus-x'
const { FormItem, FormLayout, PreviewText } = Formily
const fields = createSchemaField({
components: {
FormItem,
PreviewText,
},
})
export default {
components: {
FormProvider,
FormLayout,
...fields,
},
data() {
const form = createForm()
return {
form,
}
},
methods: {
log(v) {
console.log(v)
},
},
}
</script>
隐藏源代码
扩展案例
vue
<template>
<Form
:label-col="6"
:wrapper-col="10"
:form="form"
:preview-text-placeholder="vnode"
>
<SchemaField>
<SchemaStringField
x-decorator="FormItem"
title="文本预览"
x-component="Input"
default="Hello world"
/>
<SchemaStringField
x-decorator="FormItem"
title="选择项预览"
x-component="PreviewText.Select"
:x-component-props="{
multiple: true,
}"
:default="['123', '222']"
:enum="[
{ label: 'A111', value: '123' },
{
label: 'A222',
value: '222',
},
]"
/>
<SchemaStringField
x-decorator="FormItem"
title="日期预览"
x-component="PreviewText.DatePicker"
default="2020-11-23 22:15:20"
/>
<SchemaStringField
x-decorator="FormItem"
title="日期范围预览"
x-component="PreviewText.DatePicker"
:default="['2020-11-23 22:15:20', '2020-11-24 22:15:20']"
/>
<SchemaStringField
x-decorator="FormItem"
title="Cascader预览"
x-component="PreviewText.Cascader"
:default="['hangzhou', 'yuhang']"
:enum="[
{ label: '杭州', value: 'hangzhou' },
{ label: '余杭', value: 'yuhang' },
]"
/>
</SchemaField>
<FormButtonGroup align-form-item>
<Button
@click="
() => {
form.setState((state) => {
state.editable = !state.editable
})
}
"
>切换阅读态</Button
>
</FormButtonGroup>
</Form>
</template>
<script>
import { h } from 'vue'
import { createForm } from '@formily/core'
import { createSchemaField } from '@formily/vue'
import { Formily } from 'element-plus-x'
import { ElButton as Button } from 'element-plus'
const { Form, FormButtonGroup, FormItem, Input, PreviewText } = Formily
const fields = createSchemaField({
components: {
FormItem,
Input,
PreviewText,
},
})
export default {
components: {
Form,
FormButtonGroup,
Button,
...fields,
},
data() {
const form = createForm()
return {
form,
vnode: () => h('div', {}, '123'),
}
},
mounted() {},
}
</script>
隐藏源代码
显示类型
FPreviewTextSelect
和 FPreviewTextCascader
组件支持 2 种显示类型及自定义分隔符
:
vue
<template>
<FormLayout :label-col="6" :wrapper-col="10">
<FormProvider :form="form">
<SchemaField>
<SchemaStringField
x-decorator="FormItem"
title="文本预览"
x-component="Input"
default="Hello world"
/>
<SchemaStringField
x-decorator="FormItem"
title="选择项预览"
x-component="Select"
:x-component-props="{
multiple: true,
}"
:default="['123', '222']"
:enum="[
{ label: 'A111', value: '123' },
{
label: 'A222',
value: '222',
},
]"
/>
<SchemaStringField
x-decorator="FormItem"
title="选择项预览2"
x-component="Select"
:x-component-props="{
multiple: true,
displayType: 'text',
separator: '; ',
}"
:default="['123', '222']"
:enum="[
{ label: 'A111', value: '123' },
{
label: 'A222',
value: '222',
},
]"
/>
<SchemaStringField
x-decorator="FormItem"
title="日期预览"
x-component="DatePicker"
default="2020-11-23 22:15:20"
:x-component-props="{
style: {
width: '100%',
},
}"
/>
<SchemaStringField
x-decorator="FormItem"
title="时间预览"
x-component="TimePicker"
:default="'2020-11-23 22:15:20'"
:x-component-props="{
style: {
width: '100%',
},
}"
/>
<SchemaStringField
x-decorator="FormItem"
title="Cascader预览"
x-component="Cascader"
:x-component-props="{
clearable: true,
separator: '、',
style: {
width: '100%',
},
}"
:default="['hangzhou', 'aa']"
:enum="[
{
label: '杭州',
value: 'hangzhou',
children: [{ label: 'aa', value: 'aa' }],
},
{ label: '余杭', value: 'yuhang' },
]"
/>
<SchemaStringField
x-decorator="FormItem"
title="Cascader预览2"
x-component="Cascader"
:x-component-props="{
displayType: 'text',
clearable: true,
separator: '、',
style: {
width: '100%',
},
}"
:default="['hangzhou', 'aa']"
:enum="[
{
label: '杭州',
value: 'hangzhou',
children: [{ label: 'aa', value: 'aa' }],
},
{ label: '余杭', value: 'yuhang' },
]"
/>
<SchemaStringField
x-decorator="FormItem"
title="开关"
x-component="Switch"
:x-component-props="{
activeText: '是',
inactiveText: '否',
// activeValue: 1,
// inactiveValue: 0,
}"
:default="true"
/>
</SchemaField>
<FormButtonGroup align-form-item>
<Button
@click="
() => {
form.setState((state) => {
state.editable = !state.editable
})
}
"
>切换阅读态</Button
>
</FormButtonGroup>
</FormProvider>
</FormLayout>
</template>
<script>
import { createForm } from '@formily/core'
import { ElButton } from 'element-plus'
import { FormProvider, createSchemaField } from '@formily/vue'
import { Formily } from 'element-plus-x'
const {
FormItem,
FormLayout,
Input,
Select,
DatePicker,
TimePicker,
Cascader,
Switch,
FormButtonGroup,
} = Formily
const fields = createSchemaField({
components: {
FormItem,
Input,
Select,
DatePicker,
TimePicker,
Cascader,
Switch,
FormButtonGroup,
},
})
export default {
components: {
Button: ElButton,
FormProvider,
FormLayout,
FormButtonGroup,
...fields,
},
data() {
const form = createForm()
return {
form,
}
},
methods: {
log(v) {
console.log(v)
},
},
}
</script>
隐藏源代码
API
PreviewText.Input
参考 https://element-plus.org/zh-CN/component/input.html
PreviewText.Select
参考 https://element-plus.org/zh-CN/component/select.html
属性名 | 说明 | 类型 | 默认值 |
---|---|---|---|
displayType | 显示类型 | String | tag |
separator | 数组转字符串分隔符 | String | ; |
PreviewText.Cascader
参考 https://element-plus.org/zh-CN/component/cascader.html
属性名 | 说明 | 类型 | 默认值 |
---|---|---|---|
displayType | 显示类型 | String | tag |
separator | 数组转字符串分隔符 | String | ; |
PreviewText.DatePicker
参考 https://element-plus.org/zh-CN/component/date-picker.html
PreviewText.TimePicker
参考 https://element-plus.org/zh-CN/component/datetime-picker.html
PreviewText
属性名 | 类型 | 描述 | 默认值 |
---|---|---|---|
value | stirng | 缺省占位符 | N/A |
PreviewText.Placeholder
属性名 | 类型 | 描述 | 默认值 |
---|---|---|---|
value | stirng | 缺省占位符 | N/A |
PreviewText.usePlaceholder
ts
interface usePreviewTextPlaceholder {
(): string
}