RecommendationCard 建议卡
带置信度的智能体建议:正文、备选抽屉、确认动作,卡片尺寸不随内容跳动。
RecommendationCard 建议卡
基础用法
建议与备选
页脚的量表和文字一起表达置信度。按「其他方案」拉开抽屉,选中任一条即把它提升为当前建议。
示例加载中...
置信度怎么映射
confidence 是语义入口,组件据此推导量表格数与颜色:
confidence | 量表格数 | 默认颜色 |
|---|---|---|
high | 3 | --tx-bui-green |
medium | 2 | --tx-bui-orange |
low | 1 | --tx-bui-red |
none(默认) | 0 | --tx-bui-ink-3 |
signal 与 tone 是逃生口,分别覆盖格数与颜色。label 始终必填——颜色不能是状态的唯一载体。
API
Props
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
title | string | — | 卡片标题,通常是一句待确认的问句。必填。 |
options | RecommendationOption[] | — | 方案列表:{ key, text?, short, confidence?, signal?, tone?, label, cta?, ctaTone? }。必填。 |
modelValue | string | 首项的 key | v-model,当前被提升的方案 key。 |
open | boolean | — | v-model:open,备选抽屉。不传则组件自持。 |
accepted | boolean | — | v-model:accepted,是否已确认。 |
alternativesLabel | string | 'Alternatives' | 抽屉触发按钮文案。 |
otherOptionsLabel | string | 'Other options' | 抽屉内小标题。 |
acceptedLabel | string | 'Accepted' | 已确认后的主按钮文案。 |
acceptLabel | string | 'Accept' | 方案没写 cta 时的兜底文案。 |
Events
| 事件名 | 参数 | 说明 |
|---|---|---|
update:modelValue | (key: string) | 当前方案变化。 |
update:open | (open: boolean) | 抽屉开合。 |
update:accepted | (accepted: boolean) | 确认态变化。 |
accept | (option: RecommendationOption) | 主按钮被按下,携带完整方案对象。 |
select | (option: RecommendationOption) | 抽屉里某条备选被选中。 |
Slots
| 插槽名 | 作用域参数 | 说明 |
|---|---|---|
body | { option } | 覆盖正文。富文本(内联 code、强调)走这里。 |
meter | { option } | 覆盖量表,页脚与抽屉每行都会用到。 |
footer-extra | — | 插在页脚左侧、动作按钮之前。 |
交互契约
- 选中即提升。 在抽屉里点一条备选会把它设为当前建议、关闭抽屉,并清空已确认态——上一条的确认不该顺延到新方案上。
- 抽屉只列其他方案,当前建议不会重复出现在里面。
- 收起的抽屉带
inert。0fr网格只是把高度压成零,里面的按钮仍在 Tab 序列里;组件显式加inert把它们移出无障碍树与焦点顺序。这是有意超出上游的修正。 accepted只切文案与配色,没有撤销。真实业务通常需要撤回,所以把它做成受控 prop,撤销权在宿主。- 正文有一个最小高度(默认 48px),用来防止不同长度的方案切换时卡片跳动。中文行高不同,可用
--tx-bui-recommendation-card-body-min-height调。 - 正文里的
<code>由组件样式接管:默认是强调色 tint,加is-warning类切成警示色。用body插槽填富文本时不必自己写样式。 tone收的是裸 CSS 颜色字符串,不参与主题切换;优先用confidence。- 抽屉的缓动比这套组件的其他部分更柔(
cubic-bezier(0.16, 1, 0.3, 1)),是上游刻意的差别,已原样保留。
最佳实践
short写成一句能独立读懂的话——抽屉里它是唯一的信息。label与量表配对出现,别只给颜色;高对比与色觉障碍下颜色会失效。- 高风险动作用
ctaTone: 'danger',让主按钮的分量和后果匹配。 - 把
accepted提到宿主并在请求成功后再置 true,否则用户会以为已经下单。 - 备选控制在两三条;超过就该换成列表页而不是抽屉。
Source
- Component source:
packages/tuffex/packages/components/src/recommendation-card/src/TxRecommendationCard.vue。 - Types:
packages/tuffex/packages/components/src/recommendation-card/src/types.ts。 - 实测覆盖:
packages/tuffex/packages/components/src/recommendation-card/__tests__/recommendation-card.test.ts(14 项)验证默认提升首项、confidence→ 格数与颜色的映射、signal/tone覆盖、抽屉只列其他方案、aria-expanded/aria-controls配对、收起态inert、选中即提升并清空确认、ctaTone映射、受控modelValue/accepted优先、cta兜底、空列表不渲染,以及body插槽的富文本。 - 移植自 Beautiful UI(https://www.beautifului.dev),© 2026 Shane Levine,MIT。
查看源码
packages/tuffex/packages/components/src/recommendation-card/index.ts