Skip to content

评分 Rate

用于评分或打星操作,支持半星评分、自定义图标、只读和禁用状态。

基础用法

通过 v-model 绑定评分值,默认 5 颗星。

vue
<template>
  <bp-rate v-model="val" :count="5"></bp-rate>
</template>

<script lang="ts" setup>
import { ref } from "vue";

const val = ref(2.5);
</script>

半星评分

通过 half 属性开启半星评分,鼠标移动到星星左半部分为半星,右半部分为整星。

整星评分
半星评分
当前值:2.5
vue
<template>
  <div style="display: flex; flex-direction: column; gap: 16px">
    <div>
      <div class="label">整星评分</div>
      <bp-rate v-model="val1" />
    </div>
    <div>
      <div class="label">半星评分</div>
      <bp-rate v-model="val2" half />
    </div>
    <div>
      <div class="label">当前值:{{ val2 }}</div>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";

const val1 = ref(3);
const val2 = ref(2.5);
</script>

<style scoped>
.label {
  font-size: 13px;
  color: #86909c;
  margin-bottom: 6px;
}
</style>

自定义总数

通过 count 属性设置星星总数。

5 颗星(默认)
8 颗星
vue
<template>
  <div style="display: flex; gap: 40px">
    <div>
      <div class="label">5 颗星(默认)</div>
      <bp-rate v-model="val1" />
    </div>
    <div>
      <div class="label">8 颗星</div>
      <bp-rate v-model="val2" :count="8" />
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";

const val1 = ref(3);
const val2 = ref(5);
</script>

<style scoped>
.label {
  font-size: 13px;
  color: #86909c;
  margin-bottom: 6px;
}
</style>

自定义图标

通过 icon 插槽自定义评分图标,插槽参数 { index } 为当前图标索引。

自定义爱心图标
自定义点赞图标
vue
<template>
  <div style="display: flex; gap: 40px">
    <div>
      <div class="label">自定义爱心图标</div>
      <bp-rate v-model="val1">
        <template #icon>
          <IconHeartFill style="color: #f53f3f" />
        </template>
      </bp-rate>
    </div>
    <div>
      <div class="label">自定义点赞图标</div>
      <bp-rate v-model="val2">
        <template #icon>
          <IconThumbUpFill style="color: #165dff" />
        </template>
      </bp-rate>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";
import { IconHeartFill, IconThumbUpFill } from "birdpaper-icon";

const val1 = ref(3);
const val2 = ref(4);
</script>

<style scoped>
.label {
  font-size: 13px;
  color: #86909c;
  margin-bottom: 6px;
}
</style>

只读与禁用

通过 readonly 属性设置只读状态,disabled 属性设置禁用状态。

只读
禁用
只读半星
vue
<template>
  <div style="display: flex; gap: 40px">
    <div>
      <div class="label">只读</div>
      <bp-rate v-model="val" readonly />
    </div>
    <div>
      <div class="label">禁用</div>
      <bp-rate v-model="val" disabled />
    </div>
    <div>
      <div class="label">只读半星</div>
      <bp-rate v-model="halfVal" readonly half />
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";

const val = ref(3);
const halfVal = ref(3.5);
</script>

<style scoped>
.label {
  font-size: 13px;
  color: #86909c;
  margin-bottom: 6px;
}
</style>

Rate 属性

v-model绑定值
Number
--
count总数
Number
5-
half是否支持半选
Boolean
--
readonly是否只读
Boolean
--
disabled是否禁用
Boolean
--

Rate 插槽

icon自定义图标{ index: number }-