小程序交互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 业务语境命名,避免只停留在抽象控件展示。

3 个变体

小魔咖啡

咖啡 · 群抽奖

群入口

老客福利群

268 人在群

老朋友专享

今晚群里抽咖啡红包

进场即可参与,中奖后到店核销

半价券

群内权益

免单券

群内权益

群友加码

群内权益

再抽一次

群内权益

268

已参与

1

可抽次数

预览

奖池

长按入群

入群后回到群内抽奖卡片开抽

长按入群后,从群里的抽奖卡片进入即可开抽。

测试群邀请,6 月 24 日前有效

变体

轻量无标题

生成页面时按业务语义选择,不按视觉喜好随机切换。

带标题确认

生成页面时按业务语义选择,不按视觉喜好随机切换。

长内容滚动

生成页面时按业务语义选择,不按视觉喜好随机切换。

业务组合

复用底座原语

底层继续使用 shadcn/ui 和 Base UI,不把基础按钮、弹窗、卡片重新发明一遍。

映射 Smo 场景

根据 SmoArch、SmoLink、smolink-online、SmoFan、SmoMark 的边界决定组件出现的位置和状态。

沉淀业务模板

成熟组合进入页面模板和 registry,让下一次从一句话生成 UI 时可以复用。

SMO 使用规则

移动端默认使用底部升起半屏,不使用桌面居中弹窗承载轻量任务。
弹层高度必须随内容自适应,只通过 content / half / large 限制最大高度。
内容超过最大高度后只滚动内容区;内容区未滚动或已回到顶部时,下滑关闭弹层。
轻量场景不强制标题和右上关闭按钮;标题栏只用于需要明确任务语义或确认路径的场景。
业务内容必须放在独立组件里,页面只负责组合和状态绑定。

API 参考

属性类型默认值说明
showboolean-控制半屏弹层是否展示。
size"content" | "half" | "large""half"只约束最大高度,不设置固定高度。
closablebooleantrue是否展示标题栏关闭按钮;轻量无标题场景建议关闭。
closeOnSwipebooleantrue是否允许顶部手柄和内容顶部区域下滑关闭。
maskClosablebooleantrue点击遮罩是否关闭。
bodyClassNamestring-传给内容内层容器,业务组件可在这里控制内容布局。