更新记录

1.6.7(2026-09-27)

修复

  • z-navbar:搜索框输入报「Assignment to constant variable.」——uni 编译下模板内联赋值 ref 会直接对 const 闭包变量赋值,改为 handler 处理
  • z-area:H5 端报「Invalid prop: custom validator check failed for prop mode」且无选项——uni-h5 的 picker 明确不支持 region 模式(框架源码注明「暂不支持城市选择」)。H5 端自动回退为内置省市两级级联选择(内置 34 省级行政区真实数据,无网络请求),并新增 data prop 支持自定义完整区域树;小程序 / App 端原生三级不受影响
  • z-sign-calendar:签到后日期数字被对勾图标替换导致「日期看不见」,改为蓝底白字日期 + 「已签」标记
  • 函数式反馈(toast / showDialog / showActionSheet):页面未放置挂载组件时不再于控制台刷「请添加 」警告,自动降级为 uni.showToast / uni.showModal / uni.showActionSheet 原生弹层,功能不受影响
  • 演示页:签到日历「关闭补签」示例补绑 @sign,当天可直接签到
  • z-index-list:模板已使用的 label-key 取名 prop 此前未在 defineProps 声明,外部传入被静默忽略,现已补声明(默认 label,未命中回退 label / text)

演示

  • 返回顶部演示重做:内容加长到可滚过阈值(此前内容太短按钮永不出现);新增阈值 / 位置实时调节(z-stepper)与插槽文字示例
  • 瀑布流演示新增页面级下拉刷新与触底自动加载更多

其他

  • 演示首页迁移至生成器自动产出(新增组件自动同步)

平台兼容性

uni-app(5.26)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - - - - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

uni-app x(5.26)

Chrome Chrome插件版本 Safari Safari插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙 微信小程序 微信小程序插件版本
√ 1.6.7 √ 1.6.7 √ 1.6.7 √ 1.6.7 - √ 1.6.7

ZUI 高性能跨端组件库

基于 Vue3 Composition API 的轻量级 uniapp 组件库 —— 91 个组件,覆盖基础、表单、反馈、展示、导航、布局与高级业务场景。

  • 🧩 进阶业务组件:拖拽排序、下拉菜单、下拉刷新、水波球、自适应轮播、树形、表格、锚点导航、日历、颜色选择器、图片裁剪、双滑块……
  • 🚀 一键使用:标准 uni_modules + easycom,导入即写标签,无需 import、无需注册
  • 🎨 CSS 变量主题:一行换肤,任意容器加 zui-dark 类即刻切换暗黑模式
  • 📦 零外部依赖:内置 35 个矢量图标字体(base64 内嵌,无网络请求)
  • 🖥 全端兼容:H5 / App(Android、iOS)/ 微信、支付宝、百度、字节跳动、QQ 等小程序
  • ⚡ 函数式调用:toast() / showDialog() / showActionSheet() 随处可调
  • 🧩 高级业务组件:上传、轮播图、索引列表、侧边栏、宫格、滑动单元格、倒计时、环形进度、水印、悬浮按钮……

平台兼容

Vue3 H5 App(Android/iOS) 微信小程序 其他小程序
✓ ✓ ✓ ✓ ✓(支付宝/百度/字节/QQ 未逐一实测,欢迎反馈)

本组件库基于 <script setup> 语法,仅支持 Vue3 项目(HBuilderX 3.6+),不支持 Vue2 与 nvue 页面。

新手指南(先看这里)

组件库是怎么工作的? 每个组件就是一段封装好的界面(如按钮、弹窗)。导入本插件后,不需要任何注册代码,直接在页面模板里写标签即可:写 <z-button>点我</z-button> 就会出现一个按钮。

三步上手:

  1. 把插件导入到项目的 uni_modules 目录;
  2. 在 App.vue 里引入一行主题样式(见下文);
  3. 在任意页面写 <z-button>点我</z-button>,运行即可看到按钮。

看文档前需要知道的 5 个名词:

名词 意思
v-model 双向绑定的值。例如 <z-switch v-model="on" />,用户切换开关时变量 on 会自动变 true/false
rpx 响应式单位。750rpx 恒等于屏幕宽度。文档中"数字按 rpx"表示传数字即可,组件自动补单位
easycom uniapp 的自动注册机制。符合目录规范的组件无需 import,写标签就能用
插槽(slot) 组件预留的"自定义区域"。例如 z-card 的 #footer 插槽让你在卡片底部放自己的内容
事件(event) 组件通知你的方式。例如 @click="fn" 表示按钮被点时执行函数 fn

本文档每个组件都包含: 使用场景说明、可直接复制的示例(演示工程中每个组件一个独立页面、含 3 个以上实例,位于 pages/demos/)、参数表(参数 / 类型 / 默认值 / 说明)、事件表、插槽表。

快速上手

1. 导入

在插件市场点击「使用 HBuilderX 导入插件」到你的项目,或手动复制 uni_modules/zdd-zui 到项目 uni_modules/ 目录。

2. 引入主题(推荐)

在 App.vue 中引入主题文件(不引入也能用,组件内置了默认值,引入后才能定制与切换暗黑模式):

<style lang="scss">
@import 'uni_modules/zdd-zui/theme/index.scss';

page {
  background: var(--z-bg);
  color: var(--z-text-1);
}
</style>

⚠️ 请不要把组件库内部路径写进 uni.scss(部分 HBuilderX 版本的 sass 注入编译无法解析 uni_modules 路径)。组件自身已通过相对路径自包含,无需任何额外导入。

3. 直接使用

<template>
  <z-button type="primary" block @click="onClick">主要按钮</z-button>
  <z-cell title="昵称" value="陌上花开" arrow clickable />
  <z-rate v-model="score" />
</template>

<script setup>
import { ref } from 'vue'
const score = ref(3)
const onClick = () => {}
</script>

若项目关闭了 easycom 自动扫描,请在 pages.json 中添加:

{
  "easycom": {
    "autoscan": true,
    "custom": {
      "^z-(.*)": "@/uni_modules/zdd-zui/components/z-$1/z-$1.vue"
    }
  }
}

4. 函数式调用(Toast / Dialog / ActionSheet)

第一步(可选):在页面模板中放置挂载组件,获得与组件库统一的皮肤样式:

<template>
  <view>
    <!-- 页面内容 -->
    <z-toast />
    <z-dialog />
    <z-action-sheet />
  </view>
</template>

未放置时也不会报错——调用自动降级为 uni.showToast / uni.showModal / uni.showActionSheet 原生弹层,功能完全可用,仅样式为系统默认。

第二步:任意位置调用:

import { toast, showDialog, showActionSheet } from '@/uni_modules/zdd-zui/libs/feedback'

toast('保存成功')                          // 纯文字
toast.success('操作成功')                  // 成功
toast.error('网络异常')                    // 失败
toast.loading('提交中...')                 // 加载(不自动关闭)
setTimeout(() => toast.hide(), 1500)

const ok = await showDialog.confirm('确定删除吗?')   // true / false
await showDialog.alert('只有确定按钮')

const idx = await showActionSheet(['拍照', '从相册选择'])  // 索引 / -1(取消)

⚠️ 命名注意:请在 <script setup> 中按上面示例命名导入(showDialog / showActionSheet)。若变量名与组件标签的驼峰形式同名(如 import { zDialog }),Vue 会把模板里的 <z-dialog> 编译为该变量,导致组件无法渲染。

组件总览

分类 组件
基础 z-button 按钮 · z-icon 图标 · z-image 图片 · z-badge 徽标 · z-tag 标签 · z-avatar 头像 · z-loading 加载
表单 z-input 输入框 · z-textarea 文本域 · z-search 搜索框 · z-checkbox 复选 · z-checkbox-group · z-radio 单选 · z-radio-group · z-switch 开关 · z-rate 评分 · z-slider 滑块 · z-stepper 步进器
反馈 z-popup 弹层 · z-dialog 对话框 · z-toast 轻提示 · z-action-sheet 动作面板 · z-progress 进度条 · z-skeleton 骨架屏 · z-empty 空状态
展示 z-card 卡片 · z-cell 单元格 · z-collapse 折叠面板 · z-collapse-item · z-steps 步骤条 · z-notice-bar 通知栏
导航 z-tabs 标签页 · z-navbar 导航栏 · z-backtop 返回顶部
布局 z-row 栅格行 · z-col 栅格列 · z-divider 分割线
高级 z-upload 上传 · z-swiper 轮播图 · z-index-list 索引列表 · z-sidebar 侧边栏 · z-sidebar-item · z-grid 宫格 · z-grid-item · z-countdown 倒计时 · z-circle-progress 环形进度 · z-load-more 加载更多 · z-segmented 分段器 · z-count-to 数字滚动
扩展 z-overlay 遮罩层 · z-fab 悬浮按钮 · z-swipe-cell 滑动单元格 · z-tabbar 底部标签栏 · z-tabbar-item · z-pagination 分页器 · z-popover 气泡 · z-read-more 文本展开 · z-watermark 水印 · z-highlight 高亮 · z-sticky 吸顶 · z-footer 页脚

基础组件

ZButton 按钮

适用场景:用于触发一个即时操作,支持类型、尺寸、图标、加载态等。

<z-button type="primary">主要按钮</z-button>
<z-button type="success" plain round>朴素圆角</z-button>
<z-button icon="search" loading loading-text="加载中" />
<z-button block size="large" color="#7b61ff">块级自定义色</z-button>
Prop 类型 默认值 说明
type String primary primary / success / warning / danger / info / default
size String normal large / normal / small / mini
plain Boolean false 朴素按钮(描边)
round Boolean false 圆角按钮
block Boolean false 块级按钮
disabled Boolean false 禁用
loading Boolean false 加载状态
loading-text String '' 加载文案
icon String '' 图标名(见内置图标)
color String '' 自定义背景色(plain 时为描边色)
custom-style String/Object '' 自定义样式

事件:click(disabled/loading 时不触发)。支持透传 open-type 等原生 button 属性。

ZIcon 图标

适用场景:内置 35 个矢量图标字体,base64 内嵌无需网络请求。

<z-icon name="star" size="40" color="#ff9f18" />
Prop 类型 默认值 说明
name String '' 图标名
size String/Number '' 数字按 rpx
color String '' 颜色

内置图标:close check plus minus search star heart user home gear bell trash edit share location calendar clock photo eye lock phone info warning success error loading chevron-right chevron-down chevron-left chevron-up arrow-right arrow-down arrow-left arrow-up more,别名:clear refresh complete warn。

ZImage 图片

适用场景:增强版图片:加载中占位、失败提示、淡入、形状控制。

<z-image src="https://..." width="220" height="150" radius="16" />
Prop 类型 默认值 说明
src String '' 图片地址
mode String aspectFill 同原生 image mode
width / height String/Number '' 数字按 rpx
radius String/Number 0 圆角
shape String square square / circle(circle 时忽略 radius)
lazy-load Boolean true 懒加载
fade Boolean true 加载完成淡入
show-menu-by-longpress Boolean false 长按识别小程序码

插槽:loading(加载占位)、error(失败占位);事件:load / error。

ZBadge 徽标

适用场景:出现在按钮、图标右上的数字或圆点标记。

<z-badge :value="120" :max="99"><z-button size="small">消息</z-button></z-badge>
<z-badge dot><z-icon name="bell" size="44" /></z-badge>
Prop 类型 默认值 说明
value String/Number '' 数值
max String/Number 99 超出显示 max+
dot Boolean false 圆点模式
color String danger 背景色
offset Array [] 偏移 [x, y](rpx)

ZTag 标签

适用场景:用于标记和分类的小标签。

<z-tag type="success" plain closable @close="onClose">标签</z-tag>
Prop 类型 默认值 说明
type String primary 同 button type
size String medium large / medium / small
plain / round / mark Boolean false 朴素 / 圆角 / 右侧半圆
closable Boolean false 可关闭
color String '' 自定义颜色

事件:click / close。

ZAvatar 头像

适用场景:用图片、图标或文字展示用户头像。

<z-avatar src="https://..." size="88" />
<z-avatar icon="user" shape="square" bg-color="#00b578" />
<z-avatar text="Z" />
Prop 类型 默认值 说明
src String '' 图片地址
size String/Number 88 数字按 rpx
shape String circle circle / square
icon / text String '' 无图片时的图标/文字
bg-color String primary 背景色

事件:click(点击头像)/ error(图片加载失败)。

ZLoading 加载

适用场景:加载动画,支持文案与颜色定制。

<z-loading text="加载中" />
<z-loading color="#00b578" text="垂直" vertical />
Prop 类型 默认值 说明
size String/Number 44 尺寸(rpx)
color String primary 颜色
text String '' 文案
vertical Boolean false 文案垂直排列

表单组件

ZInput 输入框

适用场景:文本输入,支持类型、图标、清空、禁用。

<z-input v-model="text" placeholder="请输入" clearable />
<z-input v-model="pwd" password prefix-icon="lock" placeholder="密码" />
<z-input v-model="tel" type="number" prefix-icon="phone" suffix-icon="info" />
Prop 类型 默认值 说明
v-model String/Number '' 输入值
type String text text / number / digit / idcard / nickname
password Boolean false 密码框
placeholder String 请输入 占位文案
disabled Boolean false 禁用
maxlength Number -1 最大长度
clearable Boolean false 清空按钮
border String outline outline / none
prefix-icon / suffix-icon String '' 前后图标
placeholder-style String — 占位符样式(对象或字符串)
confirm-type String — 键盘确认键类型(search / send 等)
confirm-hold Boolean — 点击确认键后键盘是否保持
cursor-spacing String — 光标与键盘的距离(px)

插槽:prefix / suffix;事件:input / focus / blur / confirm / clear / click-suffix。

ZTextarea 文本域

适用场景:多行文本输入,支持字数统计与自适应高度。

<z-textarea v-model="content" :maxlength="100" show-count auto-height />
Prop 类型 默认值 说明
v-model String/Number '' 输入值
maxlength Number -1 最大长度
show-count Boolean false 显示字数统计
auto-height Boolean false 自适应高度
disabled Boolean false 禁用
placeholder String — 占位文字
placeholder-style String — 占位符样式
focus Boolean — 自动获取焦点
confirm-type String — 键盘确认键类型

事件:input(输入)/ focus / blur。

ZSearch 搜索框

适用场景:搜索输入框,内置搜索图标、清空与动作按钮。

<z-search v-model="keyword" action-text="搜索" @search="onSearch" />
Prop 类型 默认值 说明
v-model String/Number '' 关键词
shape String round round / square
clearable Boolean true 清空按钮
action-text String '' 右侧动作文字(空则不显示)
placeholder String — 占位文字
placeholder-style String — 占位符样式

事件:search / clear / input。

ZCheckbox / ZRadio 复选与单选

Group 参数(z-checkbox-group / z-radio-group 通用)

Prop 类型 默认值 说明
v-model Array / String/Number [] / '' 选中项(checkbox 为数组,radio 为单值)
disabled Boolean false 整组禁用
checked-color String primary 选中颜色
direction String horizontal horizontal / vertical

Item 参数

Prop 类型 默认值 说明
name String/Number — 标识(对应 group v-model)
shape String square checkbox: square / circle;radio 固定圆形
label String '' 文字(也可用插槽)
disabled Boolean false 禁用
label-disabled Boolean false 点击文字不切换
checked-color String — 单独设置选中颜色

事件:change。

适用场景:在一组选项中进行多选或单选。


<z-checkbox-group v-model="checked">
<z-checkbox name="apple">苹果</z-checkbox>
<z-checkbox name="banana" shape="circle">香蕉</z-checkbox>
<z-checkbox name="grape" disabled>禁用</z-checkbox>
</z-checkbox-group>
选项一 选项二

Group:`v-model`(数组 / 值)、`disabled`、`checked-color`、`direction`(horizontal / vertical)。Item:`name`、`shape`(checkbox:square / circle)、`disabled`、`label`(也可用插槽)、`label-disabled`、`checked-color`。

### ZSwitch 开关
> **适用场景**:用于表示开/关两种状态的切换。

```html
<z-switch v-model="on" active-color="#00b578" />
Prop 类型 默认值 说明
v-model Boolean false 选中状态
loading Boolean false 切换中(异步场景)
disabled Boolean false 禁用
active-color / inactive-color String primary / border 背景色
size String/Number 56 节点高度(rpx)

事件:change(value)。

ZRate 评分

适用场景:快速打分,支持半星与自定义图标。

<z-rate v-model="score" allow-half />
<z-rate :model-value="3" readonly icon="heart" active-color="#f5455c" />
Prop 类型 默认值 说明
v-model Number 0 评分值
count Number 5 星星总数
allow-half Boolean false 半星
readonly / disabled Boolean false 只读 / 禁用
icon String star star / heart
size / gutter Number 44 / 8 尺寸与间距(rpx)

事件:change(value)。

ZSlider 滑块

适用场景:在范围内选择值,支持双滑块、垂直、刻度。

<z-slider v-model="val" show-tip :min="0" :max="100" :step="1" />
Prop 类型 默认值 说明
v-model Number/Array 0 单滑块 Number;range 模式传 [min, max]
range Boolean false 双滑块模式
vertical Boolean false 垂直方向(配合 height)
height String/Number 400 垂直模式轨道长度(rpx)
marks Object null 刻度 { 值: 标签 }
min / max / step Number 0 / 100 / 1 范围与步长
show-tip Boolean false 拖动时显示气泡
active-color / inactive-color String primary / bg 颜色
disabled Boolean — 禁用
bar-height String — 轨道高度(rpx)

事件:change(拖动结束)/ dragging(拖动中)。

<!-- 双滑块 + 刻度 -->
<z-slider v-model="[200, 800]" range :marks="{ 0: '0', 500: '500', 1000: '1000' }" />
<!-- 垂直 -->
<z-slider v-model="vol" vertical :height="300" />

#

ZForm 表单

适用场景:schema 校验的表单容器,支持必填 / 长度 / 正则 / 自定义校验。

<z-form ref="formRef" :model="form" :rules="rules">
  <z-form-item label="用户名" prop="username" required>
    <z-input v-model="form.username" />
  </z-form-item>
  <z-button block type="primary" @click="onSubmit">提交</z-button>
</z-form>
Prop 类型 默认值 说明
model Object {} 表单数据对象
rules Object {} 校验规则(见下)
label-width String/Number 160 label 宽度(rpx)
label-align String left label 对齐

规则格式:{ 字段: [{ required, message, min, max, pattern, validator }] }。validator 为自定义异步校验函数 (value, model) => 错误信息或空。

方法:validate(props?) 返回 { valid, errors };resetFields() 清除错误提示。事件:validate(valid, errors)。

ZFormItem:label、prop(对应字段名)、required(星号);插槽 label / 默认。

ZPicker 选择器

适用场景:底部弹出的单列/多列选择器,支持对象与字符串选项。

<z-picker v-model:show="show" :columns="[cats]" title="选择分类" @confirm="onConfirm" />

<!-- 多列 -->
<z-picker v-model:show="show2" :columns="[years, months]" @confirm="onConfirm2" />

<!-- 对象选项 + 默认值 -->
<z-picker v-model:show="show3" v-model="city" :columns="[cityOptions]" />
Prop 类型 默认值 说明
v-model:show Boolean false 显示状态
columns Array [] 每列一个数组:['a','b'] 或 [{ label, value }];多列传二维数组
v-model String/Number/Array '' 选中值(单列为值,多列为数组)
title String '' 顶部标题
confirm-text / cancel-text String 确定 / 取消 按钮文字
visible-item-count Number 5 可视区行数
item-height String/Number 88 行高(rpx)

事件:confirm(value, labels) / cancel / change(value, indices)。

ZStepper 步进器

适用场景:通过加减按钮或输入调整数值。

<z-stepper v-model="num" :min="1" :max="10" :step="0.5" />
Prop 类型 默认值 说明
v-model Number 0 当前值
min / max / step Number 1 / Infinity / 1 范围与步长
integer Boolean false 仅整数
disable-input Boolean false 禁止输入
disabled Boolean — 禁用

事件:change / blur / plus / minus。


反馈组件

ZPopup 弹层(核心组件)

适用场景:页面内弹出层容器,弹窗、抽屉、底部面板等交互的基础组件。

<z-popup v-model:show="show" position="bottom" round closeable>
<view style="padding: 40rpx;">底部弹层内容</view>
</z-popup>
Prop 类型 默认值 说明
v-model:show Boolean false 显示状态
position String center center / top / bottom / left / right
round Boolean false 圆角
closeable Boolean false 关闭按钮
overlay Boolean true 遮罩
overlay-closable Boolean true 点遮罩关闭
z-index Number 10070 层级
duration Number 300 动画时长(ms)
safe-area-inset-bottom Boolean true 底部安全区
custom-style String/Object '' 内容区自定义样式
close-icon String — 是否显示右上角关闭图标
overlay-style String — 遮罩自定义样式

事件:open / opened / close / closed / click-overlay。

ZDialog 对话框(函数式)

适用场景:需要用户确认或提示的模态对话框,通过函数一行调用。


import { showDialog } from '@/uni_modules/zdd-zui/libs/feedback'

await showDialog.alert('只有确定按钮') // Promise const ok = await showDialog.confirm('确定删除吗?', '删除确认') // Promise<true/false> await showDialog({ title: '自定义', content: '内容', showCancelButton: true, cancelText: '取消', confirmText: '确定' })


页面需放置 `<z-dialog />`。支持默认插槽自定义内容。

**showDialog 选项与函数**

| 参数 / 方法 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| title | String | 提示 | 标题 |
| content | String | '' | 内容文字 |
| show-cancel / show-confirm | — | 内置 | 传入 options 里的 showCancelButton / showConfirmButton 控制按钮显隐 |
| cancel-text / confirm-text | String | 取消 / 确定 | 按钮文字 |
| showDialog.alert(content, title) | Function | — | 仅确定按钮 |
| showDialog.confirm(content, title) | Function | — | 返回 Promise<boolean> |
| showDialog.resolve(result) | Function | — | 供插槽内自定义按钮关闭时调用 |

### ZToast 轻提示(函数式)

> **适用场景**:操作结果的轻量反馈提示,自动消失。
```js
import { toast } from '@/uni_modules/zdd-zui/libs/feedback'

toast('纯文字')
toast.success('成功')       // toast.error / toast.warning / toast.info
toast.loading('加载中...')   // duration=0 不自动关闭
setTimeout(() => toast.hide(), 1500)
toast({ message: '顶部提示', position: 'top', duration: 3000, mask: true })

页面需放置 <z-toast />。type:text / success / error / warning / loading;position:top / center / bottom。

toast 用法

方法 说明
toast(options) 或 toast(文字) 基础调用,options 支持 message / type / position / duration / mask
toast.success(文字) 成功图标
toast.error(文字) 失败图标
toast.warning(文字) 警告图标
toast.info(文字) 纯文字
toast.loading(文字) 加载中,不自动关闭
toast.hide() 手动关闭
Option 类型 默认值 说明
message String '' 文案
type String text text / success / error / warning / loading
position String center top / center / bottom
duration Number 2000 展示时长(ms),0 不自动关闭
mask Boolean false 透明遮罩防穿透

ZActionSheet 动作面板(函数式)

适用场景:从底部弹出的一组操作选项,如分享、上传方式选择。


import { showActionSheet } from '@/uni_modules/zdd-zui/libs/feedback'

const idx = await showActionSheet({ title: '选择上传方式', items: [{ name: '拍照' }, { name: '相册', subname: '从手机相册选择' }], cancelText: '取消' }) // idx:点击项索引;点击取消/遮罩返回 -1


页面需放置 `<z-action-sheet />`。item 支持 `name / subname / color / disabled`。

**showActionSheet 选项**

| Option | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| items | Array | [] | [{ name, subname, color, disabled }] |
| title | String | '' | 顶部说明 |
| cancel-text | String | 取消 | 取消按钮文字 |
| show-cancel | Boolean | true | 是否显示取消按钮 |

返回 Promise:选中项索引;点取消 / 遮罩返回 -1。

### ZProgress 进度条
> **适用场景**:展示操作或任务的当前进度。

```html
<z-progress :percent="60" color="#00b578" pivot-text="已完成" />
Prop 类型 默认值 说明
percent Number 0 进度 0-100
stroke-width String/Number 14 粗细(rpx)
color / track-color String primary / bg 颜色
show-text Boolean true 显示文字
pivot-text String '' 自定义文字

ZSkeleton 骨架屏

适用场景:在内容加载前展示占位图形,提升体验。

<z-skeleton :loading="loading" avatar :row="3">
  <你的真实内容 />
</z-skeleton>
Prop 类型 默认值 说明
loading Boolean true 加载中显示骨架
avatar Boolean false 显示头像
title Boolean true 显示标题行
row Number 3 段落行数
row-width Array/String ['100%','100%','60%'] 行宽
animate Boolean true 流光动画

ZEmpty 空状态

适用场景:列表为空时的占位提示。

<z-empty text="暂无订单" description="去逛逛看看想买的">
  <z-button size="small" round>去逛逛</z-button>
</z-empty>
Prop 类型 默认值 说明
icon String photo 图标名
text / description String 暂无数据 / '' 主/副文案
image-size String/Number 160 图标区域(rpx)

展示组件

ZCard 卡片

适用场景:内容容器,支持标题、额外内容与底部区域。

<z-card title="订单信息" shadow>
  <text>内容区域</text>
  <template #extra><z-tag size="small">进行中</z-tag></template>
  <template #footer><z-button size="mini" plain>查看详情</z-button></template>
</z-card>
Prop 类型 默认值 说明
title String '' 标题
padding String/Number 28 内容内边距(rpx)
shadow / border Boolean true / false 阴影 / 描边

插槽:title / extra / default / footer。

事件:click(点击卡片)。

ZCell 单元格

适用场景:列表行的信息展示,可组成设置页等列表。

<z-cell title="昵称" icon="edit" value="陌上花开" arrow clickable />
<z-cell title="地址" label="上海市浦东新区" arrow />
Prop 类型 默认值 说明
title / value / label String '' 标题/值/描述
icon String '' 左侧图标
arrow Boolean false 右箭头
clickable Boolean false 点击反馈
center Boolean false 垂直居中
required Boolean false 必填星号

插槽:icon / title / label / default(值区域)/ right-icon。

ZCollapse 折叠面板

适用场景:点击标题展开/收起内容区域。

<z-collapse v-model="opened">
  <z-collapse-item title="什么是 ZUI?" name="1">内容</z-collapse-item>
  <z-collapse-item title="禁用项" name="2" disabled>内容</z-collapse-item>
</z-collapse>

Collapse:v-model(数组,accordion 模式为单值)、accordion。Item:name、title、label、value(右侧附加文字)、disabled。

ZCollapse 参数

Prop 类型 默认值 说明
v-model String/Array [] 展开项 name(accordion 为单值)
accordion Boolean false 手风琴模式

ZCollapseItem 参数

Prop 类型 默认值 说明
name String/Number — 唯一标识(对应 v-model)
title String '' 标题
label String '' 标题下方描述
value String '' 右侧附加文字
disabled Boolean false 禁用

事件:change(index) / change。

ZSteps 步骤条

适用场景:展示任务流程的当前进度。

<z-steps :items="[{ title: '下单' }, { title: '付款', desc: '已支付' }]" :current="1" />
<z-steps :items="items" :current="2" direction="vertical" />
Prop 类型 默认值 说明
items Array [] [{ title, desc }]
current Number 0 当前步骤索引
direction String horizontal horizontal / vertical
active-color String primary 激活色

ZNoticeBar 通知栏

适用场景:常用于页面顶部展示通知信息,超长自动滚动。

<z-notice-bar text="超长通知自动滚动播放" left-icon="bell" closeable />
Prop 类型 默认值 说明
text String '' 通知内容
scrollable Boolean/String 'auto' true / false / 'auto'(溢出才滚动)
speed Number 50 滚动速度 px/s
color / background String warning / #fff8ec 颜色
left-icon String bell 左侧图标
closeable Boolean false 可关闭

事件:close / click。


导航组件

ZTabs 标签页

适用场景:内容分区导航,支持横向滚动。

<z-tabs v-model="tab" :list="['关注', '推荐', '热榜']" @change="onChange" />
<z-tabs v-model="tab2" :list="list" :line-width="48" active-color="#00b578" />
Prop 类型 默认值 说明
v-model Number 0 当前索引
list Array [] ['标签'] 或 [{ title }]
line-width String/Number 'auto' 下划线宽度('auto' 匹配文字)
color / active-color String text-2 / primary 文字颜色
item-min-width String/Number '' 单项最小宽度

事件:change / click。激活项自动滚动到可视区。

ZNavbar 导航栏(自定义导航栏)

适用场景:自定义页面顶部导航栏,支持返回/首页/搜索/沉浸模式。


<!-- 常规 -->
<z-navbar title="标题" @left="onBack" />
<!-- 透明沉浸模式:滚动后自动变实色(页面需 navigationStyle: custom) -->

| Prop | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| title | String | '' | 标题 |
| search | Boolean | false | 搜索框模式(替代标题区域),confirm 触发 `search` 事件 |
| search-placeholder | String | 搜索 | 搜索框占位文案 |
| left-arrow | Boolean | true | 返回箭头(仅存在上级页面时显示) |
| show-home | Boolean | false | 无上级页面时显示首页按钮 |
| home-path | String | /pages/index/index | 首页路径 |
| fixed / placeholder | Boolean | true | 固定顶部 / 生成占位 |
| transparent | Boolean | false | 沉浸透明模式 |
| scroll-top | Number | 0 | 页面滚动距离(配合 onPageScroll) |
| auto-threshold | Number | 80 | 透明→实色阈值(px) |
| background / color | String | bg-2 / text-1 | 颜色 |
| border | Boolean | true | 底部细线(透明模式不显示) |
| z-index | String | — | 导航层层级 |

插槽:`left` / `right` / `default`(标题);事件:`left` / `home`(未监听时执行默认返回/回首页)。

页面开启自定义导航:`pages.json` 对应页面加 `"navigationStyle": "custom"`。

### ZBacktop 返回顶部
> **适用场景**:长页面滚动一定距离后出现的返回顶部按钮。

```html
<z-backtop :scroll-top="scrollTop" :threshold="300" />

页面 onPageScroll 中把 e.scrollTop 传给 scroll-top。点击自动 pageScrollTo(0)。


Prop 类型 默认值 说明
scroll-top Number 0 页面滚动距离(onPageScroll 传入)
threshold Number 300 出现阈值(px)
icon String chevron-up 图标名
right / bottom Number 40 / 140 距右 / 距底(rpx)

点击自动 pageScrollTo(0);默认插槽可自定义内容。

注意:页面可滚动距离必须超过 threshold 按钮才会出现——页面内容太短时按钮永远不会出现;且必须在页面 onPageScroll 中把 e.scrollTop 传给 scroll-top,否则组件感知不到滚动。

布局组件

ZRow / ZCol 栅格

适用场景:24 等分栅格布局,快速搭建页面的横向分栏。

<z-row gutter="16">
<z-col :span="12"><view>左</view></z-col>
<z-col :span="6" :offset="6"><view>右</view></z-col>
</z-row>

Row:gutter(列间距 rpx)、justify(start/center/end/space-between/space-around)、align(top/center/bottom)、wrap。Col:span(1-24)、offset。

ZRow 参数

Prop 类型 默认值 说明
gutter Number 0 列间距(rpx),自动分配到列两侧
justify String start start / center / end / space-between / space-around
align String top top / center / bottom
wrap Boolean true 是否换行

ZCol 参数

Prop 类型 默认值 说明
span Number 24 占 24 等分中的列数
offset Number 0 左侧偏移列数

ZDivider 分割线

适用场景:分隔内容的分割线,可带文字。

<z-divider>文字</z-divider>
<z-divider dashed>虚线</z-divider>
<z-divider vertical />

Prop 类型 默认值 说明
dashed Boolean false 虚线样式
vertical Boolean false 垂直分割
text-color String text-2 文字颜色
border-color String border 线条颜色
border-width String — 线宽(rpx)

插槽:默认插槽为居中文字。

高级组件

ZUpload 上传

适用场景:图片/文件上传,支持进度、失败重试、自定义上传。

<!-- 图片上传(配置 action 后自动上传) -->
<z-upload v-model="files" accept="image" action="https://api/upload" :max-count="5" @success="onOk" />

<!-- 文件上传 -->
<z-upload v-model="docs" accept="file" :max-count="3" />

<!-- 完全自定义上传 -->
<z-upload v-model="files" :custom-upload="uploadFn" />
Prop 类型 默认值 说明
v-model Array [] 文件列表 [{ url, name, status, progress }]
accept String image image / file
max-count Number 9 最大数量
max-size Number 10 单文件上限(MB)
action String '' 上传接口(空则仅本地预览)
name / header / formData — file / {} uni.uploadFile 参数
custom-upload Function null (file, index) => Promise 自定义上传
source-type Array ['album','camera'] 图片来源
deletable / preview-full-image Boolean true 删除 / 大图预览
disabled Boolean — 禁用上传

事件:change / success / fail / progress / oversize / delete。文件状态:loading(含进度与重试)/ done / failed(点击重试)。

ZSwiper 轮播图

适用场景:图片轮播,支持自定义指示点与标题遮罩。

<z-swiper :list="['https://...a.jpg', { image: 'https://...b.jpg', title: '标题' }]" :height="320" :radius="16" />

<!-- 自定义 slide -->
<z-swiper indicator="line">
  <swiper-item>...</swiper-item>
</z-swiper>
Prop 类型 默认值 说明
list Array [] ['url'] 或 [{ image, title }]
autoplay / circular Boolean true 自动播放 / 循环
interval / duration Number 3000 / 500 间隔与动画(ms)
indicator String dots dots / line / none
indicator-color / indicator-active-color String 白色系 指示点颜色
height / radius String/Number 340 / 0 高度与圆角(rpx)
image-mode String — 图片裁剪模式(同 uni image mode)

事件:change(index) / click(index, item)。

ZIndexList 索引列表

适用场景:带右侧字母导航的长列表,通讯录式交互。

<z-index-list :list="cityList" height="100vh" @select="">
  <template #item="{ item }">
    <text>{{ item }}</text>
  </template>
</z-index-list>
Prop 类型 默认值 说明
list Array [] [{ letter: 'A', items: [] }],item 支持字符串或对象
label-key String '' item 为对象时的显示字段名
index-list Array 取 list 的 letter 右侧索引字母
height String/Number 100vh 滚动区高度
active-color String — 索引条与当前字母高亮色

内置右侧索引条(触摸滑动定位)、中央字母提示。事件:select(item)。> 说明:H5 端 cell 内容由组件内置渲染(字符串直出 / 对象取 label-key 字段);小程序与 App 端支持 #item 作用域插槽自定义行内容。

ZSidebar / ZSidebarItem 侧边栏

适用场景:电商分类页等场景的左侧垂直导航。

<view style="display: flex; height: 600rpx;">
<z-sidebar v-model="active">
<z-sidebar-item v-for="c in cats" :key="c" :title="c" :dot="c === '热卖'" />
</z-sidebar>
<view style="flex: 1;">右侧内容区(随 active 切换)</view>
</view>

Sidebar:v-model(索引)。Item:title、disabled、dot、badge、active-color。

ZSidebar 参数

Prop 类型 默认值 说明
v-model Number 0 当前选中索引

事件:change(index)。

ZSidebarItem 参数

Prop 类型 默认值 说明
title String '' 标题文字
disabled Boolean false 禁用
dot Boolean false 红点标记
badge String/Number '' 数字角标
active-color String primary 激活指示条颜色

ZGrid / ZGridItem 宫格

适用场景:功能入口、图标导航等九宫格布局。

<z-grid :columns="4">
<z-grid-item v-for="(g, i) in list" :key="i" @click="onClick(i)">
<z-icon :name="g.icon" size="40" />
<text>{{ g.name }}</text>
</z-grid-item>
</z-grid>

Grid:columns(列数)、border(边框,自动隐藏末列右框)。Item:clickable、事件 click(index)(index 为注册顺序)。

ZGrid 参数

Prop 类型 默认值 说明
columns Number 4 列数
border Boolean true 显示边框

ZGridItem 参数:clickable(点击反馈);事件 click(index)(index 为注册顺序,从 0 开始);内容用默认插槽自由组合。

ZCountdown 倒计时

适用场景:实时倒计时,支持格式化与完成回调。

<z-countdown :time="7200 * 1000" format="HH:mm:ss" @finish="onFinish" />
<z-countdown :time="90000" format="mm:ss" />
Prop 类型 默认值 说明
time Number 0 时长(毫秒)
format String HH:mm:ss 支持 DD / HH / mm / ss,其余字符为分隔符
autostart Boolean true 自动开始

事件:finish / change(remain);实例方法 start() / stop()。

ZCircleProgress 环形进度

适用场景:环形进度条,无 canvas 依赖全端可用。

<z-circle-progress :rate="72" :size="160" />
<z-circle-progress :rate="45" color="#00b578" text="完成" />
Prop 类型 默认值 说明
rate Number 0 进度 0-100
size / stroke-width Number 200 / 16 直径 / 环宽(rpx)
color / track-color / fill String primary / bg / bg-2 颜色
text String '' 中心文字(默认百分比)

基于 conic-gradient 实现,无 canvas 依赖。支持插槽自定义中心内容。

ZLoadMore 加载更多

适用场景:列表底部加载状态展示。

<z-load-more :status="status" @loadmore="loadNext" />
Prop 类型 默认值 说明
status String loadmore loadmore / loading / nomore
line Boolean true 两侧分割线
loading-text String — 加载中文案
loadmore-text String — 加载更多文案
nomore-text String — 没有更多了文案
color String — 文字颜色
loading-color String — loading 图标颜色

点击 loadmore 状态时触发 loadmore 事件。

ZSegmented 分段器

适用场景:互斥的一组选项,滑动指示块切换。

<z-segmented v-model="tab" :options="['日', '周', '月']" />
<z-segmented v-model="type" :options="[{ label: '全部', value: 0 }]" active-color="#00b578" />

滑动指示块动画;事件:change(value, index)。

Prop 类型 默认值 说明
v-model String/Number — 当前选中值
options Array [] ['a'] 或 [{ label, value }]
active-color String primary 指示块与文字颜色
disabled Boolean false 禁用切换

事件:change(value, index)。

ZCountTo 数字滚动

适用场景:数字从起始值滚动到目标值,带缓动动画。

<z-count-to :end="128450" :duration="2000" font-size="48" />
Prop 类型 默认值 说明
start / end Number 0 起止值
duration Number 1500 动画时长(ms)
decimals Number 0 小数位
separator Boolean true 千分位
color String — 数字颜色
autoplay Boolean — 是否自动开始滚动

事件:end;实例方法 play() / stop()。


扩展组件

ZOverlay 遮罩层

适用场景:独立的遮罩层,可插入任意内容。

<z-overlay :show="show" @click="show = false">可插入内容</z-overlay>
Prop 类型 默认值 说明
show Boolean false 显示
z-index Number 1000 层级
opacity String/Number '' 遮罩透明度
duration Number 300 动画时长

ZFab 悬浮按钮

适用场景:固定在角落的悬浮操作按钮,可展开子动作。

<z-fab :actions="[{ icon: 'camera', text: '拍照' }, { icon: 'photo', text: '相册' }]" @select="" />
<z-fab icon="plus" @click="onClick" />
Prop 类型 默认值 说明
icon / color — plus / primary 主按钮
actions Array [] 子动作 [{ icon, text }],点击主按钮展开
offset Array [40, 140] 位置偏移 [right, bottom](rpx)
direction String — 展开方向 up / down / left / right
disabled Boolean — 禁用展开

事件:click(主按钮)/ select(index, action)。

ZSwipeCell 滑动单元格

适用场景:左右滑动露出操作按钮,跟手带阻尼。

<z-swipe-cell>
  <z-cell title="左滑显示操作" value="内容" />
  <template #right>
    <view class="btn" @click="del">删除</view>
  </template>
</z-swipe-cell>

插槽:left / right / default。支持触摸跟手、阻尼回弹、点击内容收回;v-model(false / true / 'right')、实例方法 close()。

Prop 类型 默认值 说明
v-model Boolean/String false false 关闭 / true 左开 / 'right' 右开
disabled Boolean false 禁止滑动

插槽:left / right(操作按钮区)/ default(内容)。事件:open / close;实例方法 close()。

ZTabbar / ZTabbarItem 底部标签栏

适用场景:固定在页面底部的标签导航栏。

<z-tabbar v-model="tab">
<z-tabbar-item title="首页" icon="home" />
<z-tabbar-item title="购物车" icon="star" :badge="6" />
<z-tabbar-item title="我的" icon="user" />
</z-tabbar>

Tabbar:v-model、fixed / placeholder(默认 true,自动安全区)、border、active-color / inactive-color。Item:title、icon、dot、badge、icon 插槽(含 active 状态)。

ZTabbar 参数

Prop 类型 默认值 说明
v-model Number 0 当前选中索引
fixed / placeholder Boolean true 固定底部 / 生成占位(自动安全区)
border Boolean true 顶部细线
active-color / inactive-color String primary / text-3 文字与图标颜色

ZTabbarItem 参数

Prop 类型 默认值 说明
title String '' 文字
icon String '' 图标名
dot Boolean false 红点
badge String/Number '' 数字角标
z-index String — 标签栏层级

事件:change(index);icon 插槽带 active 状态。

ZPagination 分页器

适用场景:数据分页导航,自动省略号。

<z-pagination v-model="page" :total-items="100" :items-per-page="10" @change="onChange" />

也支持直接传 page-count。自动生成省略号页码。

Prop 类型 默认值 说明
v-model Number 1 当前页码
total-items Number 0 数据总条数
items-per-page Number 10 每页条数
page-count Number 0 直接指定总页数(优先)

事件:change(page)。

ZPopover 气泡

适用场景:点击元素弹出的气泡提示。

<z-popover content="气泡内容" placement="top" theme="dark">
  <z-button size="small">点击我</z-button>
</z-popover>
Prop 类型 默认值 说明
content String '' 内容(也可用 content 插槽)
placement String top top / bottom
theme String dark dark / light
v-model:show Boolean false 显示状态

事件:select(item) / select。

ZReadMore 文本展开

适用场景:长文本折叠显示,点击展开/收起。

<z-read-more :lines="2">{{ 长文本 }}</z-read-more>
Prop 类型 默认值 说明
lines Number 2 收起时行数
expand-text / collapse-text String 展开 / 收起 按钮文字
content String — 文本内容(也可用插槽)
color String — 展开 / 收起按钮颜色

事件:expand / collapse。

ZWatermark 水印

适用场景:在页面或容器上平铺半透明水印文字。

<z-watermark content="仅供演示" :opacity="0.06" />
Prop 类型 默认值 说明
content String '' 水印文字
opacity Number 0.08 透明度
rotate Number -20 旋转角度
fullscreen Boolean true 覆盖全屏(false 时覆盖父容器)
font-size / color / z-index — 26 / text-1 / 9999 样式

ZHighlight 高亮

适用场景:在文本中高亮关键词。

<z-highlight text="ZUI 轻量级跨端组件库" keywords="跨端" />
<z-highlight :text="title" :keywords="['ZUI', '组件']" color="#00b578" />
Prop 类型 默认值 说明
text String '' 原始文本
keywords String/Array '' 高亮关键词,支持多个自动合并重叠
color String danger 高亮颜色
font-size String — 关键字字号(rpx)

ZSticky 吸顶

适用场景:滚动到顶部时吸附固定。

<z-sticky :offset-top="0">
  <view>滚动到顶部时吸附</view>
</z-sticky>
Prop 类型 默认值 说明
offset-top Number 0 吸附距离(px)
z-index String — 吸顶层层级

ZFooter 页脚

适用场景:页面底部的版权/链接区域。

<z-footer copyright="© 2026 ZUI">
  <text>关于</text>
  <text>协议</text>
</z-footer>

Prop 类型 默认值 说明
copyright String Powered by ZUI 版权文字

插槽:默认插槽放链接等自定义内容。

主题定制

覆盖 CSS 变量

/* App.vue 中 theme/index.scss 之后 */
page {
  --z-primary: #7b61ff;
  --z-radius-md: 12rpx;
}

暗黑模式

在页面根容器加 zui-dark 类,整个子树自动切换:

<template>
  <view :class="{ 'zui-dark': dark }">
    <!-- 所有 ZUI 组件随之切换 -->
  </view>
</template>

变量清单

颜色    --z-primary --z-success --z-warning --z-danger --z-info
文字    --z-text-1 --z-text-2 --z-text-3 --z-text-white
背景    --z-bg --z-bg-2 --z-border --z-mask
圆角    --z-radius-sm --z-radius-md --z-radius-lg --z-radius-round
阴影    --z-shadow --z-shadow-lg

进阶组件

ZSorter 拖拽排序

适用场景:长按拖动调整列表顺序,跨行自动交换。

<z-sorter v-model="list" :item-height="96">
  <template #item="{ item }">
    <view class="row">{{ item.label }}</view>
  </template>
</z-sorter>
Prop 类型 默认值 说明
v-model Array [] 数据列表,拖动完成回传新顺序
item-height String/Number 100 单项高度(rpx),拖拽排序要求等高
item-key String id 唯一键字段名
long-press Boolean true 长按 350ms 触发拖动
disabled Boolean — 禁用拖拽

事件:sort-start(index) / sort-end(index)。

ZDropdownMenu 下拉菜单

适用场景:列表顶部的筛选下拉菜单,单开互斥。

<z-dropdown-menu v-model="openIndex">
  <z-dropdown-item v-model="sort" title="排序" :options="[{ text: '默认', value: 0 }, { text: '价格', value: 1 }]" />
  <z-dropdown-item v-model="type" :options="allOptions" active-color="#00b578" />
</z-dropdown-menu>

Menu:v-model(展开的 item 索引,-1 关闭)。Item:v-model(选中值)、options([{ text, value }])、title(默认取选中项文字)、disabled、active-color、max-height。事件:change(value, option)。支持默认插槽自定义面板内容。

ZDropdownMenu 参数

Prop 类型 默认值 说明
v-model Number -1 当前展开的 item 索引(-1 全关)
background String bg-2 菜单栏背景
z-index Number 996 面板层级

ZDropdownItem 参数

Prop 类型 默认值 说明
v-model String/Number '' 选中值
options Array [] [{ text, value, disabled }]
title String 选中项文字 菜单栏标题
active-color String primary 激活颜色
max-height String/Number 600 面板最大高度(rpx)

事件:change(value, option) / close(菜单收起);插槽 default 自定义面板内容。

ZPullRefresh 下拉刷新

适用场景:下拉触发刷新,基于原生 refresher 全端可用。

<z-pull-refresh v-model="refreshing" height="100vh" @refresh="onRefresh">
  <view v-for="i in 20">条目 {{ i }}</view>
</z-pull-refresh>

基于 scroll-view 原生 refresher 实现(全端可用)。v-model 为刷新状态(刷新完成后置 false);height 滚动区高度;支持 refresher 插槽自定义下拉头部。

Prop 类型 默认值 说明
v-model Boolean false 刷新状态(完成后置 false)
height String/Number 100vh 滚动区高度
threshold Number 60 触发下拉距离(px)
loading-color String primary 转圈颜色
disabled Boolean false 禁用

事件:refresh / scroll;插槽 refresher 自定义下拉头部。

ZLiquid 水波进度球

适用场景:水波动画展示百分比进度。

<z-liquid :rate="65" />
<z-liquid :rate="30" color="#00b578" text="30%" />
Prop 类型 默认值 说明
rate Number 0 水位 0-100
size String/Number 240 直径(rpx)
color / track-color String primary / bg 水色 / 边框色
text String '' 中心文字(默认百分比)
text-size String — 中间文字字号(rpx)

双层旋转波纹动画,水位变化平滑过渡。

ZFitSwiper 自适应高度轮播

适用场景:每页高度随图片比例自动变化的轮播图。

<z-fit-swiper :list="['a.jpg', 'b.jpg']" :fallback-height="300" />

每页高度随图片宽高比自动变化,切换时高度平滑过渡。参数与 z-swiper 一致(autoplay/interval/circular/indicator 等),事件 change / click / loaded(index, ratio)。

Prop 类型 默认值 说明
list Array [] ['url'] 或 [{ image, title }]
autoplay / circular Boolean true 自动播放 / 循环
interval / duration Number 3000 / 500 间隔与动画时长(ms)
indicator String dots dots / line / none
fallback-height String/Number 340 图片未加载时的兜底高度(rpx)
indicator-color String — 指示点颜色
indicator-active-color String — 当前指示点颜色

事件:change(index) / click(index, item) / loaded(index, ratio)。

ZTree 树形控件

适用场景:层级数据的展开与选择,支持多级嵌套。

<z-tree :data="treeData" selectable :default-expanded="['n1']" @node-click="onNodeClick" />
Prop 类型 默认值 说明
data Array [] [{ id, label, children: [] }]
node-key String id 唯一键字段
default-expanded Array [] 默认展开节点 id
default-expand-all Boolean false 展开全部
selectable Boolean false 点击选中高亮

事件:node-click(node) / expand(node, expanded)。支持 node 插槽自定义节点内容。

子组件 z-tree-node 为递归节点渲染单元(支持 depth 层级 prop 控制缩进),z-tree 内部已自动使用,一般无需单独引入。

ZTable 表格

适用场景:列数据表格,支持横向滚动与斑马纹。

<z-table
  :columns="[{ key: 'name', title: '姓名', width: 180 }, { key: 'age', title: '年龄', width: 120, align: 'center' }]"
  :data="rows"
  stripe
  @row-click="onRow"
/>
Prop 类型 默认值 说明
columns Array [] [{ key, title, width, align }],width 单位 rpx
data Array [] 行数据
stripe / border Boolean true 斑马纹 / 边框
clickable Boolean — 行可点击(带按压态)

插槽:cell(作用域 { row, column, index })、empty;事件:row-click(row, index)。横向内容超宽自动滚动。

ZAnchor 滚动锚点

适用场景:侧边锚点导航,点击定位 + 滚动自动高亮。

<z-anchor :list="[{ id: 'a', title: '推荐' }, { id: 'b', title: '热卖' }]" height="100vh">
  <template #section="{ item }">区块内容</template>
</z-anchor>

右侧锚点导航(side 可选 left/right),点击滚动定位 + 滚动 scrollspy 自动高亮。事件:change(id)。

Prop 类型 默认值 说明
list Array [] [{ id, title }],区块内容由 section 插槽提供
side String right 锚点导航条位置
height String/Number 100vh 滚动区高度
active-color String primary 高亮颜色

事件:change(id)(滚动高亮变化)/ select。

ZLink 超链接

适用场景:应用内跳转、拨打电话、复制、外部浏览器。

<z-link text="拨打电话" href="10086" mode="phone" />
<z-link text="复制链接" href="https://..." mode="copy" />
<z-link text="外部浏览器" href="https://..." mode="browser" />
<z-link text="应用内跳转" href="/pages/detail/detail" mode="navigate" />

mode:navigate / browser(App 外部浏览器,H5 新窗口,小程序降级复制)/ copy / phone。

Prop 类型 默认值 说明
text String '' 展示文字(也可用插槽)
href String '' 链接地址 / 电话号码
mode String navigate navigate / browser / copy / phone
color String primary 文字颜色
underline Boolean false 下划线
font-size String — 文字字号(rpx)

事件:click(点击链接)。

ZArea 省市区选择

适用场景:表单中选择省 / 市 / 区,小程序与 App 为原生三级选择。

<z-area v-model="region" @change="onChange" />

小程序 / App 端基于原生 picker mode="region",v-model 为 ['省', '市', '区'] 字符串数组。

H5 端平台差异:uni-h5 的 picker 不支持 region 模式(框架源码注明「暂不支持城市选择」),组件自动回退为内置省市两级级联选择(内置 34 个省级行政区 → 地级行政区 / 直辖市下辖区,无网络请求),v-model 为 ['省', '市']。如需完整三级或自定义区域,传入 data 树形数据即可(全平台生效)。

Prop 类型 默认值 说明
v-model Array [] ['省', '市', '区'](H5 回退为 ['省', '市'])
placeholder String 请选择省市区 占位文案
separator String 空格 回显分隔符
disabled Boolean false 禁用
data Array 内置省市数据 自定义区域树 [{ label, value, children }],传入后全平台走级联选择

事件:change(value, detail)(H5 端为 change(value))/ cancel。

ZClipper 图片裁剪

适用场景:全屏图片裁剪器,拖动 + 双指缩放,canvas 导出。

<z-clipper v-if="show" :src="imgSrc" @confirm="onConfirm" @cancel="show = false" />

全屏裁剪器:拖动调整位置、双指缩放,确认后经 canvas 导出临时文件路径(confirm(tempFilePath))。正方形裁剪框,比例可通过 crop-ratio 调整。

Prop 类型 默认值 说明
src String '' 要裁剪的图片地址
crop-ratio Number 0.8 裁剪框占屏幕宽比例
cancel-text / confirm-text String 取消 / 确定 按钮文字

事件:confirm(tempFilePath)(导出 PNG)/ cancel。全屏裁剪器:拖动调整位置、双指缩放、DPR 高清导出。

ZColorPicker 颜色选择器

适用场景:SV 面板 + 色相条 + 预设色板,纯 CSS 实现。

<z-color-picker v-model="color" @change="onChange" />

饱和度/明度面板 + 色相条 + 预设色板 + HEX/RGB 实时显示,纯 CSS 渐变实现(无 canvas)。v-model 为 '#RRGGBB'。

Prop 类型 默认值 说明
v-model String #3370ff 十六进制颜色
presets Array 内置色板 预设颜色数组
custom-style String/Object '' 自定义样式

事件:change(hex, rgb)。

ZCalendar 日历

适用场景:单选 / 多选 / 范围三种模式。

<z-calendar v-model="date" mode="single" />
<z-calendar v-model="range" mode="range" />
<z-calendar v-model="dates" mode="multiple" />
Prop 类型 默认值 说明
v-model String/Array '' single: 'YYYY-MM-DD';range: [起, 止];multiple: 数组
mode String single single / multiple / range
min / max String '' 可选日期范围 'YYYY-MM-DD'

事件:change(value)。支持年月切换、今天高亮、范围中间日浅色底,选中日期带主题色光圈;day 作用域插槽可自定义日期单元格(参数含 day/dateStr/selected/disabled)。

进阶组件(二)

ZKeyboard 虚拟键盘

适用场景:数字 / 身份证 / 车牌 / 自定义四种虚拟键盘。

<z-keyboard type="number" confirm-text="确定" @input="onKey" @delete="onDel" @confirm="onOk" />
<z-keyboard type="idcard" title="请输入身份证号" />
<z-keyboard type="plate" title="请输入车牌号" />
<z-keyboard type="custom" :custom-keys="[['7', '8', '9'], ['{del}', '0', '{confirm}']]" />
Prop 类型 默认值 说明
type String number number 数字 / idcard 身份证(带 X)/ plate 车牌(省份+字母两页)/ custom 自定义
custom-keys Array [] 自定义键盘按键(按行二维数组),{del} 为删除键、{confirm} 为确认键
title String '' 顶部说明文字
confirm-text String 确定 确认键文字
safe-area-inset-bottom Boolean true 底部安全区

事件:input(key) / delete / confirm / close。

ZCodeInput 验证码输入

适用场景:验证码 / 密码分段输入框,支持明文密文与自定义样式。

<z-code-input v-model="code" :length="4" @finish="onFinish" />
<z-code-input v-model="pwd" :length="6" :plaintext="false" mask-char="●" />
Prop 类型 默认值 说明
v-model String '' 已输入内容
length Number 4 验证码位数
plaintext Boolean true false 时显示 mask-char 掩码
mask-char String '' 掩码字符(如 ●)
box-width / box-height Number 88 / 100 单格尺寸(rpx)
gutter Number 20 格间距(rpx)
cursor Boolean true 显示闪烁光标
border-color String — 输入框边框颜色
active-border-color String — 输入进行中的边框颜色
color String — 文字颜色
disabled Boolean — 禁用输入

事件:finish(code)(输入满)/ input / focus / blur。

ZSignCalendar 签到日历

适用场景:数据驱动的签到打卡日历,支持补签与连续天数统计。

<z-sign-calendar :signed-dates="signed" allow-makeup @sign="onSign" @makeup="onMakeup" />
Prop 类型 默认值 说明
signed-dates Array [] 已签到日期 ['YYYY-MM-DD'](数据驱动)
allow-makeup Boolean false 允许补签(点击过去未签日期)
show-footer Boolean true 底部说明

内置统计栏:累计签到 / 连续签到 / 今日状态。已签日期显示为蓝底白字日期 + 「已签」标记。事件:sign(date)(今日签到)/ makeup(date)(补签)/ month-change(y, m)。组件为数据驱动:点击后由父组件把日期 push 进 signed-dates(参考演示页),allow-makeup 为 false 时仅「今天」可触发 sign。

ZSignature 签名板

适用场景:手写签名板,支持撤销 / 重做 / 清空与压感模拟。

<z-signature :height="400" pen-color="#111827" @confirm="onConfirm" />
Prop 类型 默认值 说明
pen-color String text-1 画笔颜色
pen-size Number 3 画笔粗细(px)
background String #ffffff 画布背景(导出图底色)
height String/Number 500 画布高度(rpx)
pressure Boolean true 压感模拟(随书写速度变化线宽)
confirm-text String — 确认按钮文字

支持 触摸与鼠标双输入(桌面 H5 可直接用鼠标签名);画布 CSS 尺寸恒为父容器的 100%(宽度自适应、不溢出屏幕),高度由 height(rpx)控制。

事件:confirm(tempFilePath)(导出签名图片)/ clear / first-draw。实例:撤销 / 重做 / 清空由内置工具栏提供。

ZTransition 过渡动画

适用场景:元素进入 / 离开的过渡动画封装,8 种动画类型。

<z-transition v-model:show="show" anim="fade-up" :duration="400">
  <view>内容</view>
</z-transition>
Prop 类型 默认值 说明
v-model:show Boolean false 显示状态(控制进出动画)
anim String fade fade / fade-up / fade-down / fade-left / fade-right / zoom / slide-left / slide-right
duration Number 300 时长(ms)
timing String ease 缓动曲线
offset String/Number 40 位移幅度(rpx)

事件:before-enter / after-enter / before-leave / after-leave / click。

进阶组件(三)

ZQRCode 二维码

适用场景:生成二维码,内置编码算法无外部依赖,支持导出图片。

<z-qrcode value="https://uniapp.dcloud.net.cn" :size="360" />
<z-qrcode value="ZUI" fg-color="#3370ff" bg-color="#f0f4ff" level="H" />
Prop 类型 默认值 说明
value String '' 二维码内容(网址 / 文本)
size String/Number 400 尺寸(rpx)
level String M 纠错级别 L / M / Q / H
fg-color / bg-color String #000 / #fff 前景 / 背景色
margin Number 2 静区边距(模块数)
show-loading Boolean — 生成期间是否显示 loading

内置 qrcode-generator 编码算法(base64 无外部请求)。事件:ready(canvasId) / click;实例方法 exportImage(cb) 导出图片。

ZBarcode 条形码

适用场景:Code39 条形码,canvas 绘制,支持底部文字。

<z-barcode value="ZUI2026" :height="140" />
<z-barcode value="HELLO" color="#3370ff" :show-text="false" />

Code39 编码,canvas 绘制。value 支持大写字母 / 数字 / - . $ / + % 空格;height 条码高度(rpx);show-text 显示底部文字;color / bg-color 定制。

Prop 类型 默认值 说明
value String '' 条码内容(大写字母 / 数字 / - . $ / + % 空格)
height String/Number 140 条码高度(rpx)
color / bg-color String #000 / #fff 颜色
show-text Boolean true 显示底部文字

事件:ready(canvasId) / click。

ZChart 轻量图表

适用场景:canvas 自绘轻量图表:折线 / 柱状 / 饼图,无需 echarts 依赖。

<z-chart type="line" :labels="['1月', '2月']" :series="[{ name: '销量', data: [320, 402] }]" />
<z-chart type="bar" :labels="labels" :series="series" />
<z-chart type="pie" :labels="pieLabels" :series="pieSeries" :height="420" />
Prop 类型 默认值 说明
type String line line 折线 / bar 柱状 / pie 饼图
labels Array [] X 轴标签 / 扇区名
series Array [] [{ name, data: [] }]
colors Array 内置色板 系列颜色
height String/Number 480 高度(rpx)
show-legend Boolean true 图例(pie)

canvas 自绘轻量实现,无 echarts 依赖;需要复杂交互图表时可配合 renderjs 引入 echarts。

ZWaterfall 瀑布流

适用场景:按累计高度均衡分列的瀑布流布局。

<z-waterfall :list="items" :columns="2">
  <template #item="{ item }">
    <view>卡片内容(图片 + 文字)</view>
  </template>
</z-waterfall>
Prop 类型 默认值 说明
list Array [] 数据项,建议含 height 字段(高度估计值,用于均衡分列)
columns Number 2 列数
gap Number 16 间距(rpx)
item-key String — 数据唯一键字段(默认 id)
clickable Boolean — 项可点击(带按压态)

事件:item-click(item)。

ZCascader 级联选择

适用场景:多级联动的树形选择弹窗。

<z-cascader v-model:show="show" v-model="values" :options="treeOptions" title="选择地区" @finish="onFinish" />
Prop 类型 默认值 说明
options Array [] 树形选项 [{ label, value, children }],叶子节点可无 children
v-model Array [] 各级选中值数组
title String '' 标题
list-height String/Number 600 列表高度(rpx)
active-color String — 选中项与高亮颜色

顶部面包屑可点击回退层级。事件:finish(values, labels) / change。

事件:cancel(取消选择关闭弹层)。

ZDatetimePicker 时间选择

适用场景:表单中选择日期、时间或日期时间,底部弹窗式选择。

<z-datetime-picker v-model:show="show" v-model="dt" mode="datetime" @confirm="onOk" />
Prop 类型 默认值 说明
mode String datetime date / time / datetime
v-model String '' date: 'YYYY-MM-DD';time: 'HH:mm';datetime: 'YYYY-MM-DD HH:mm'
min / max String '' 可选范围(与 v-model 同格式)
title String — 弹窗标题
confirm-text String — 确认按钮文字
cancel-text String — 取消按钮文字
visible-item-count String — 可见选项行数

事件:confirm(value) / cancel / change。

ZConfetti 彩带

适用场景:canvas 粒子彩带庆祝动画,支持自定义颜色与数量。

<z-confetti ref="confetti" :particle-count="120" />
<z-button @click="$refs.confetti.fire()">放彩带</z-button>
Prop 类型 默认值 说明
particle-count Number 80 粒子数量
colors Array 内置色板 彩带颜色
fullscreen Boolean true 覆盖全屏
z-index String — 粒子层层级

实例方法:fire({ x, y, particleCount, colors })(x/y 为屏幕坐标)、stop();事件:done。canvas 粒子物理动画(重力 + 旋转),自动回收。

常见问题

Q:调用 toast() 没反应? 未放置 <z-toast /> 时会自动降级为 uni.showToast 原生提示(<z-dialog /> / <z-action-sheet /> 同理,降级为 uni.showModal / uni.showActionSheet),功能不受影响;若提示一闪而过,请检查是否误传了 duration: 0 或被 toast.loading 占用未 hide。

Q:sass 报 "Can't find stylesheet to import"? 不要在 uni.scss 中 @import 'uni_modules/...'。组件已自包含;如需 SCSS 变量,请在对应文件的 <style lang="scss"> 中 @import '@/uni_modules/zdd-zui/theme/var.scss';。

Q:对话框/动作面板不显示? 检查 <script setup> 中导入的函数名是否为 showDialog / showActionSheet。若变量名与组件标签的驼峰形式同名(如 zDialog),Vue 会把 <z-dialog> 标签编译为该变量导致组件无法渲染。

Q:修改后不生效? HBuilderX 的编译缓存可能滞后,请删除项目 unpackage 目录后重新运行。

更新日志

详见 changelog.md。

许可证

MIT,可免费商用。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

相机,文件

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

无

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。