Segmented
分段选择器
Markup Schema 案例
<script lang="ts" setup>
import { createForm } from '@formily/core'
import { FormItem, Segmented, Submit } from '@silver-formily/element-plus'
import { createSchemaField, FormProvider } from '@silver-formily/vue'
const form = createForm()
const { SchemaField, SchemaStringField } = createSchemaField({
components: {
FormItem,
Segmented,
},
})
async function log(value) {
console.log(value)
}
</script>
<template>
<FormProvider :form="form">
<SchemaField>
<SchemaStringField
name="segmented"
title="分段选择"
x-decorator="FormItem"
x-component="Segmented"
:enum="[
{ label: '按天', value: 'day' },
{ label: '按周', value: 'week' },
{ label: '按月', value: 'month' },
]"
/>
<SchemaStringField
name="segmented-slot"
title="插槽渲染"
x-decorator="FormItem"
x-component="Segmented"
:enum="[
{ label: '立即', value: 'now' },
{ label: '今天', value: 'today' },
{ label: '本周', value: 'week' },
]"
:x-content="{
default: (props, { attrs }) => {
const item = attrs.item
return `插槽渲染-${typeof item === 'object' ? item.label : item}`
},
}"
/>
</SchemaField>
<Submit @submit="log">
提交
</Submit>
</FormProvider>
</template>分段选择:
插槽渲染:
查看源码
JSON Schema 案例
<script lang="ts" setup>
import { createForm } from '@formily/core'
import { Form, FormItem, Segmented, Submit } from '@silver-formily/element-plus'
import { createSchemaField } from '@silver-formily/vue'
const schema = {
type: 'object',
properties: {
segmented: {
'type': 'string',
'title': '分段选择',
'x-decorator': 'FormItem',
'x-component': 'Segmented',
'enum': [
{ label: '按天', value: 'day' },
{ label: '按周', value: 'week' },
{ label: '按月', value: 'month' },
],
},
},
}
const form = createForm()
const { SchemaField } = createSchemaField({
components: {
FormItem,
Segmented,
},
})
async function onSubmit(value) {
console.log(value)
}
</script>
<template>
<Form :form="form">
<SchemaField :schema="schema" />
<Submit @submit="onSubmit">
提交
</Submit>
</Form>
</template>查看源码
Template 案例
<script lang="ts" setup>
import { createForm } from '@formily/core'
import { FormItem, Segmented, Submit } from '@silver-formily/element-plus'
import { Field, FormProvider } from '@silver-formily/vue'
const form = createForm()
async function log(value) {
console.log(value)
}
</script>
<template>
<FormProvider :form="form">
<Field
name="segmented"
title="分段选择"
:decorator="[FormItem]"
:component="[Segmented]"
:data-source="[
{ label: '按天', value: 'day' },
{ label: '按周', value: 'week' },
{ label: '按月', value: 'month' },
]"
/>
<Field
name="segmented-slot"
title="插槽渲染"
:decorator="[FormItem]"
:component="[Segmented]"
:data-source="[
{ label: '立即', value: 'now' },
{ label: '今天', value: 'today' },
{ label: '本周', value: 'week' },
]"
>
<template #default="{ item }">
自定义{{ typeof item === 'object' ? item.label : item }}
</template>
</Field>
<Submit @submit="log">
提交
</Submit>
</FormProvider>
</template>分段选择:
插槽渲染:
查看源码
API
参考 https://cn.element-plus.org/zh-CN/component/segmented.html
扩展属性
| 属性名 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| options | array | 选项配置数组,一般情况下请通过dataSource来配置 | [] |
Segmented Slot
| 插槽名 | 说明 | 类型 |
|---|---|---|
| default | 自定义选项渲染作用域插槽 | object |