小程序权益SmoUI 自研
组件总览定位
基础组件直接使用 shadcn/ui;SmoUI 维护中文业务规则、模板和验收流程。
源码路径
registry-src/smo-miniprogram-benefit-pass快速开始
页面里直接调用 SmoUI 业务组件。组件内部可以复用 shadcn/ui 底座,但对外暴露的是 Smo 场景语义。
安装到项目
npx shadcn@latest add https://smoui.xiaomolian.com/r/smo-miniprogram-benefit-pass.json
# 再从 /visual-assets 复制 smofanBenefitPass.* PNG:rail/cup/appointmentBadgeRibbon 到 src/assets/profile,calendar/ticket/tooth 到 src/assets/icons页面直接调用
import { ProfileBenefitPass } from "@/components/ProfileBenefitPass"
export default function ExamplePage() {
return (
<ProfileBenefitPass
merchantName="小魔咖啡"
title="拿铁半价券"
statusLabel="到店可用"
tone="green"
kind="coffee"
action="show_code"
actionLabel="出示"
onAction={showCouponCode}
/>
)
}Preview / Code
预览使用 Smo 业务语境命名,避免只停留在抽象控件展示。
registry-src/smo-miniprogram-benefit-pass皓齿口腔
儿童涂氟体验券
需预约
预约
已约 · 今天 18:30
轻氧护理
肩颈放松券
到店前可改时间i
查看预约
小魔咖啡
拿铁半价券
到店可用
出示
变体
免预约出示
生成页面时按业务语义选择,不按视觉喜好随机切换。
需预约
生成页面时按业务语义选择,不按视觉喜好随机切换。
已约顶部冠标
生成页面时按业务语义选择,不按视觉喜好随机切换。
弱化预览态
生成页面时按业务语义选择,不按视觉喜好随机切换。
咖啡 / 口腔 / 护理 / 通用类型
生成页面时按业务语义选择,不按视觉喜好随机切换。
业务组合
复用底座原语
底层继续使用 shadcn/ui 和 Base UI,不把基础按钮、弹窗、卡片重新发明一遍。
映射 Smo 场景
根据 SmoArch、SmoLink、smolink-online、SmoFan、SmoMark 的边界决定组件出现的位置和状态。
沉淀业务模板
成熟组合进入页面模板和 registry,让下一次从一句话生成 UI 时可以复用。
SMO 使用规则
这是单张权益券组件,不内置筛选 tab、滚轮选择器、核销弹层或业务请求;这些由页面组合层负责。
active 态表达当前可操作券,preview / muted 态只用于上下文预览,不应承载主操作转化。
出示、预约、查看预约必须通过 action 和 actionLabel 明确传入;组件只触发 onAction,不判断业务可用性。
已约券通过 appointmentLabel / showAppointmentCrown 表达顶部履约冠标,券身只保留弱提示和查看预约动作,不重复展示已约状态胶囊。
左侧权益色块、右侧动作区和主内容三段结构保持稳定;当前券左侧 rail 使用 SmoUI 已沉淀 PNG 资产,不在页面里重画。
组件 registry 分发 TSX/CSS;PNG 资产从 /visual-assets 的 smofanBenefitPass.* 资产包复制到目标项目。
文字层级遵循 SmoFan 小程序规范:券标题默认 600,不使用 900;状态和标签用 600 或以下。
API 参考
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| merchantName | ReactNode | - | 商家或权益来源名称,显示为轻量胶囊标签。 |
| title | ReactNode | - | 权益券主标题,建议一行内表达核心价值。 |
| statusLabel | ReactNode | - | 状态文案,例如 到店可用、需预约、已预约 今天18:30。 |
| tone | "green" | "amber" | "coral" | "muted" | "green" | 控制状态点、描边和动作色;预约类常用 amber,弱化态用 muted。 |
| variant | "active" | "preview" | "active" | active 是当前可操作券;preview 用于滚轮上下文或非当前券。 |
| slot | "before" | "current" | "after" | "current" | 供滚轮/堆叠容器标记位置,组件会挂对应类名方便业务侧微调。 |
| kind | "coffee" | "care" | "dental" | "ticket" | "ticket" | 默认图形类型;业务有真实图标时优先传 icon。 |
| icon | ReactNode | 内置类型图形 | 左侧白色图标容器中的自定义内容。 |
| action | "show_code" | "book" | "view_booking" | "view_detail" | "show_code" | 右侧动作语义,影响默认按钮文案和动作区图形。 |
| actionLabel | ReactNode | 随 action 自动推导 | 覆盖右侧按钮文案。 |
| onAction | () => void | - | 点击右侧动作按钮回调。 |
| onSelect | () => void | - | 点击整张券回调,常用于滚轮里切换当前券。 |