小程序交互SmoUI 自研
组件总览定位
基础组件直接使用 shadcn/ui;SmoUI 维护中文业务规则、模板和验收流程。
源码路径
registry-src/smo-miniprogram-half-screen-dialog快速开始
页面里直接调用 SmoUI 业务组件。组件内部可以复用 shadcn/ui 底座,但对外暴露的是 Smo 场景语义。
安装到项目
npx shadcn@latest add https://smoui.xiaomolian.com/r/smo-miniprogram-half-screen-dialog.json页面直接调用
import { Image, Text, View } from "@tarojs/components"
import { HalfScreenDialog } from "@/components/HalfScreenDialog"
export default function ExamplePage() {
return (
<HalfScreenDialog
show={joinSheetOpen}
size="half"
closable={false}
maskClosable
onClose={() => setJoinSheetOpen(false)}
>
<View className="join-sheet-content">
<Image src={groupInviteButtonUrl} mode="widthFix" showMenuByLongpress />
<Text>长按入群后,从群里的抽奖卡片进入即可开抽。</Text>
</View>
</HalfScreenDialog>
)
}Preview / Code
预览使用 Smo 业务语境命名,避免只停留在抽象控件展示。
registry-src/smo-miniprogram-half-screen-dialog咖
小魔咖啡
咖啡 · 群抽奖
群入口
老客福利群
268 人在群
老朋友专享
今晚群里抽咖啡红包
进场即可参与,中奖后到店核销
半价券
群内权益
免单券
群内权益
群友加码
群内权益
再抽一次
群内权益
268
已参与
1
可抽次数
预览
奖池
长按入群
入群后回到群内抽奖卡片开抽
长按入群后,从群里的抽奖卡片进入即可开抽。
测试群邀请,6 月 24 日前有效
变体
轻量无标题
生成页面时按业务语义选择,不按视觉喜好随机切换。
带标题确认
生成页面时按业务语义选择,不按视觉喜好随机切换。
长内容滚动
生成页面时按业务语义选择,不按视觉喜好随机切换。
业务组合
复用底座原语
底层继续使用 shadcn/ui 和 Base UI,不把基础按钮、弹窗、卡片重新发明一遍。
映射 Smo 场景
根据 SmoArch、SmoLink、smolink-online、SmoFan、SmoMark 的边界决定组件出现的位置和状态。
沉淀业务模板
成熟组合进入页面模板和 registry,让下一次从一句话生成 UI 时可以复用。
SMO 使用规则
移动端默认使用底部升起半屏,不使用桌面居中弹窗承载轻量任务。
弹层高度必须随内容自适应,只通过 content / half / large 限制最大高度。
内容超过最大高度后只滚动内容区;内容区未滚动或已回到顶部时,下滑关闭弹层。
轻量场景不强制标题和右上关闭按钮;标题栏只用于需要明确任务语义或确认路径的场景。
业务内容必须放在独立组件里,页面只负责组合和状态绑定。
API 参考
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| show | boolean | - | 控制半屏弹层是否展示。 |
| size | "content" | "half" | "large" | "half" | 只约束最大高度,不设置固定高度。 |
| closable | boolean | true | 是否展示标题栏关闭按钮;轻量无标题场景建议关闭。 |
| closeOnSwipe | boolean | true | 是否允许顶部手柄和内容顶部区域下滑关闭。 |
| maskClosable | boolean | true | 点击遮罩是否关闭。 |
| bodyClassName | string | - | 传给内容内层容器,业务组件可在这里控制内容布局。 |