Skip to content

xtf-rate

组件说明

xtf-rate 是评分组件,用于评价打分、满意度采集或商品/服务评分展示。支持星级、心形、点赞、皇冠、盾牌等十余种图形(display-mode),支持半星(allow-half)、滑动打分(allow-slide)、自定义图片、多项文案标签,以及 product / service / delivery / heat 等业务预设和只读展示(readonly),是评价反馈与数据展示的核心组件。


基础用法

1. 最简示例

通过 v-model 双向绑定评分值,count 控制总分:

vue
<template>
  <view style="display: flex; flex-direction: column; gap: 32rpx; padding: 32rpx">
    <xtf-rate v-model="score" :count="5" />
    <xtf-text level="caption" color="secondary" :text="'当前评分: ' + score" />
  </view>
</template>

<script>
export default {
  data() {
    return { score: 3 }
  }
}
</script>

2. 半星与滑动打分

通过 allow-half 开启半星,通过 precision 控制精确度,allow-slide 支持滑动打分:

vue
<template>
  <view style="display: flex; flex-direction: column; gap: 32rpx; padding: 32rpx">
    <xtf-rate v-model="score1" :count="5" allow-half />
    <xtf-text level="caption" color="secondary" :text="'半星评分: ' + score1" />
    <xtf-rate v-model="score2" :count="10" :precision="0.5" />
    <xtf-text level="caption" color="secondary" :text="'十分制滑动: ' + score2" />
  </view>
</template>

<script>
export default {
  data() {
    return { score1: 3.5, score2: 6.5 }
  }
}
</script>

3. 业务预设

通过 preset 一键应用业务预设(product / service / delivery / heat 等),自动携带文案与配色:

vue
<template>
  <view style="display: flex; flex-direction: column; gap: 32rpx; padding: 32rpx">
    <xtf-rate v-model="p1" preset="product" />
    <xtf-rate v-model="p2" preset="service" />
    <xtf-rate v-model="p3" preset="heat" />
  </view>
</template>

<script>
export default {
  data() {
    return { p1: 4, p2: 5, p3: 7 }
  }
}
</script>

4. 图形切换

通过 display-mode 切换星形/心形/点赞/皇冠等图形,active-color / inactive-color 自定义配色:

vue
<template>
  <view style="display: flex; flex-direction: column; gap: 32rpx; padding: 32rpx">
    <xtf-rate v-model="s1" display-mode="star" />
    <xtf-rate v-model="s2" display-mode="heart" active-color="#ef4444" />
    <xtf-rate v-model="s3" display-mode="crown" active-color="#eab308" />
    <xtf-rate v-model="s4" display-mode="bar" active-color="#f97316" :count="10" />
  </view>
</template>

<script>
export default {
  data() {
    return { s1: 4, s2: 3, s3: 5, s4: 8 }
  }
}
</script>

5. 自定义图片

通过 active-image / inactive-image 使用自定义图片代替图形:

vue
<template>
  <view style="display: flex; flex-direction: column; gap: 32rpx; padding: 32rpx">
    <xtf-rate
      v-model="score"
      :count="5"
      active-image="/static/star-active.png"
      inactive-image="/static/star-inactive.png"
    />
  </view>
</template>

<script>
export default {
  data() {
    return { score: 4 }
  }
}
</script>

6. 只读展示

通过 readonly 开启只读展示,readonly-variant 切换 compact / panel 展示形态:

vue
<template>
  <view style="display: flex; flex-direction: column; gap: 32rpx; padding: 32rpx">
    <xtf-rate
      :model-value="4.5"
      readonly
      readonly-variant="compact"
      :review-count="128"
      show-value
      label-mode="text"
    />
    <xtf-rate
      :model-value="4.8"
      readonly
      readonly-variant="panel"
      :review-count="356"
      show-value
      label-mode="text"
    />
  </view>
</template>

全部属性

属性类型默认值作用描述适用范围
valueString | Number0评分值(兼容低版本 v-model双向绑定
modelValueString | Numberundefined评分值(v-model 推荐)双向绑定
countString | Number5评分总数设置星级数
presetString'default'业务预设:'product' / 'service' / 'delivery' / 'flavor' / 'heat' / 'recommend' / 'safety' / 'quality' / 'mood' / 'ticket'一键应用场景
sizeString | Number''尺寸:'sm' / 'md' / 'lg' 或数值(rpx),默认继承 form / configProvider控制大小
displayModeString'star'图形:'star' / 'heart' / 'thumb' / 'diamond' / 'bolt' / 'flame' / 'crown' / 'shield' / 'dot' / 'pill' / 'bar' / 'block' / 'ticket'切换图形
shapeStyleString''图形风格:'filled' / 'outline'空心/实心
activeColorString'var(--xtf-color-warning)'激活色自定义颜色
activeImageString''激活态图片图片评分
inactiveImageString''未激活图片图片评分
activeImagesArray[]每个激活态图片数组逐项图片
inactiveImagesArray[]每个未激活图片数组逐项图片
imageFitString'aspectFit'图片填充模式图片适配
colorString''自定义激活色(active-color 别名)自定义颜色
inactiveColorString'var(--xtf-color-border)'未激活色自定义颜色
gutterString | Number8项间距间距
allowHalfBooleanfalse是否支持半星半星打分
precisionString | Number1精确度(0.5 / 1精确打分
allowSlideBooleantrue是否支持滑动打分滑动交互
readonlyBooleanfalse是否只读展示场景
disabledBooleanfalse是否禁用禁用交互
clearableBooleanfalse点击当前值是否清零重新打分
showValueBooleanfalse是否显示数值展示数值
showTextBooleanfalse是否显示文字展示文案
readonlyVariantString'plain'只读形态:'plain' / 'compact' / 'panel'只读展示
reviewCountString | Number''评分人数只读展示
totalScoreString | Number5总分(用于计算百分比)只读展示
reviewLabelString''评分标签只读展示
percentSuffixString'好评率'百分比后缀只读展示
labelModeString'auto'文案模式:'value' / 'text' / 'both'文案展示
textsArray[]各档位文案自定义文案
colorRangesArray[]分段颜色:[{ min, max, color }]分段配色
itemLabelsArray[]每项下方标签标签展示
showItemLabelsBooleanfalse是否显示项标签标签展示
itemLabelModeString'always'项标签模式:'always' / 'ends'标签模式
startTextString''起始附加文字附加文案
endTextString''结束附加文字附加文案
itemMinWidthString | Number''每项最小宽度布局
activeScaleString | Number1激活项缩放视觉强调
inactiveScaleString | Number1未激活项缩放视觉弱化
valueFormatterFunctionnull自定义文案格式化 ({ value, text, count }) => String自定义文案
customClassString''自定义类名样式覆盖
customStyleString | Object''自定义样式动态样式覆盖

colorRanges 数组每项支持的字段

字段类型默认值说明
minNumber1范围起始(含)
maxNumbercount范围结束(含)
colorString''该范围激活色

事件

事件名称触发时机回调参数参数说明
change评分变化时触发(点击/滑动)(value: Number)新的评分值
input兼容低版本 v-model(value: Number)新的评分值
update:modelValuev-model 同步(value: Number)新的评分值
update:selected评分变化时触发(payload: { value, source, text, count })值、来源(tap / touch / mouse)、文案、总数

事件使用示例

vue
<template>
  <view style="display: flex; flex-direction: column; gap: 32rpx; padding: 32rpx">
    <xtf-rate
      v-model="score"
      :count="5"
      show-value
      label-mode="both"
      @change="onChange"
      @update:selected="onSelected"
    />
    <xtf-text level="caption" color="secondary" :text="'当前评分: ' + score" />
  </view>
</template>

<script>
export default {
  data() {
    return { score: 0 }
  },
  methods: {
    onChange(val) {
      console.log('评分变化:', val)
    },
    onSelected(payload) {
      console.log('选择:', payload.value, payload.text, '来源:', payload.source)
      uni.showToast({ title: '评分: ' + payload.value + ' ' + payload.text, icon: 'none' })
    }
  }
}
</script>

插槽

xtf-rate 暂未开放插槽,评分图形与文案均通过属性配置。


主题说明

  • 激活色使用 var(--xtf-rate-active),未激活色使用 var(--xtf-rate-inactive)
  • 项间距使用 var(--xtf-rate-gap),总数使用 var(--xtf-rate-count)
  • 图形/图片尺寸使用 var(--xtf-rate-shape-size) / var(--xtf-rate-symbol-size) / var(--xtf-rate-image-size)
  • 激活/未激活缩放使用 var(--xtf-rate-active-scale) / var(--xtf-rate-inactive-scale)
  • 附加文字尺寸使用 var(--xtf-rate-addon-size),项标签尺寸使用 var(--xtf-rate-meta-size)
  • 默认激活色为 --xtf-color-warning,未激活色为 --xtf-color-border

如需全局调整主题,请在 xtf-config-provider 或主题配置中覆盖上述 CSS 变量。

MIT Licensed