Rate 评分
用于评分、打星或展示满意度等级,适合评价表单、质量反馈和评分结果展示。
何时使用
- 需要用户快速给出等级评价时。
- 需要在详情、列表或卡片中展示评分结果时。
- 评分项数量较少,并且每个等级含义容易理解时。
基础用法
vue
<template>
<x-rate v-model="value" />
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref(3);
</script>半星评分
vue
<template>
<x-rate v-model="value" allow-half />
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref(2.5);
</script>可清除
vue
<template>
<x-rate v-model="value" allow-clear />
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref(4);
</script>只读和禁用
vue
<template>
<x-rate v-model="readonlyValue" allow-half readonly />
<x-rate v-model="disabledValue" disabled />
</template>
<script setup lang="ts">
import { ref } from 'vue';
const readonlyValue = ref(3.5);
const disabledValue = ref(2);
</script>自定义数量
vue
<template>
<x-rate v-model="value" :count="8" />
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref(6);
</script>自定义字符
1
1
2
2
3
3
4
4
5
5
vue
<template>
<x-rate v-model="value">
<template #character="{ index }">
<span>{{ index + 1 }}</span>
</template>
</x-rate>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref(3);
</script>自定义颜色和笑脸分级
vue
<template>
<x-rate v-model="value" :color="scoreColors" />
<x-rate v-model="value" grading />
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref(4);
const scoreColors = {
2: '#f53f3f',
4: '#ff7d00',
5: '#00b42a',
};
</script>提示文本
vue
<template>
<x-rate v-model="value" :tooltips="tooltipTexts" />
<p>{{ tooltipTexts[value - 1] }}</p>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref(3);
const tooltipTexts = ['很差', '一般', '还行', '不错', '很好'];
</script>事件
vue
<template>
<x-rate
v-model="value"
allow-half
allow-clear
@change="(nextValue) => log = `change: ${nextValue}`"
@hover-change="(nextValue) => hoverValue = nextValue"
/>
<p>{{ log }},hover:{{ hoverValue ?? '-' }}</p>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const value = ref(2);
const hoverValue = ref<number | undefined>();
const log = ref('等待操作');
</script>表单组合
vue
<template>
<x-form :model="formModel" layout="vertical">
<x-form-item label="服务评分" field="score">
<x-rate v-model="formModel.score" allow-half allow-clear />
</x-form-item>
</x-form>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const formModel = ref({
score: 4,
});
</script>按需导入
ts
import { Rate } from 'x-next';Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
modelValue | 绑定值 | number | undefined |
defaultValue | 默认值,非受控模式 | number | 0 |
count | 评分总数,grading 开启时固定为 5 | number | 5 |
allowHalf | 是否允许半选 | boolean | false |
allowClear | 是否允许再次点击清除 | boolean | false |
grading | 是否开启笑脸分级 | boolean | false |
readonly | 是否只读 | boolean | false |
disabled | 是否禁用 | boolean | false |
autofocus | 是否自动获取焦点 | boolean | false |
tabindex | 根节点 tabindex | string | number | 0 |
tooltips | 每项提示文本 | string[] | undefined |
color | 评分颜色,支持统一颜色或分段阈值颜色 | string | Record<number, string> | undefined |
Events
| 事件名 | 说明 | 参数 |
|---|---|---|
update:modelValue | 绑定值更新时触发 | value: number |
change | 评分改变时触发 | value: number |
hover-change | 鼠标移入评分项或移出组件时触发 | value: number | undefined |
focus | 组件获得焦点时触发 | ev: FocusEvent |
blur | 组件失去焦点时触发 | ev: FocusEvent |
keydown | 键盘按下时触发 | ev: KeyboardEvent |
Slots
| 插槽名 | 说明 | 参数 |
|---|---|---|
character | 自定义评分符号 | { index, value, count, disabled } |
Methods
| 方法名 | 说明 |
|---|---|
focus() | 让评分组件获得焦点 |
blur() | 移除评分组件焦点 |
键盘交互
| 按键 | 行为 |
|---|---|
ArrowRight / ArrowUp | 增加评分 |
ArrowLeft / ArrowDown | 减少评分 |
Home | 清零 |
End | 选择最大评分 |
0-9 | 在评分总数范围内快速设置对应分值 |