---
url: 'https://wot-design-uni.cn/component/action-sheet.md'
---
# ActionSheet 动作面板
从底部弹出的动作菜单面板。
## 基本用法
通过 `v-model` 设置显示隐藏。
`actions` 类型为 `Array`,数组内部对象结构如下:
| 参数 | 类型 | 说明 | 最低版本 |
| ------- | ------ | -------- | -------- |
| name | string | 选项名称 | - |
| subname | string | 描述信息 | - |
| color | string | 颜色 | - |
```html
弹出菜单
```
```typescript
const show = ref(false)
const actions = ref([
{
name: '选项1'
},
{
name: '选项2'
},
{
name: '选项3',
subname: '描述信息'
}
])
function showActions() {
show.value = true
}
function close() {
show.value = false
}
const toast = useToast()
function select({ item, index }) {
toast.show(`当前选中项: ${item.title}, 下标: ${index}`)
}
```
## 选项状态
可以设置 颜色、禁用、加载 等状态。
```html
弹出菜单
```
```typescript
const show = ref(false)
const actions = ref([
{
name: '颜色',
color: '#0083ff'
},
{
name: '禁用',
disabled: true
},
{
loading: true
}
])
function showActions() {
show.value = true
}
function close() {
show.value = false
}
```
## 取消按钮
设置 `cancel-text` 取消按钮文案,展示取消按钮。
```html
```
## 自定义单行面板
自定义单行面板时,`panels` 类型为一维数组, 数组内部对象结构如下:
| 参数 | 类型 | 说明 | 最低版本 |
| ------- | ------ | -------- | -------- |
| iconUrl | string | 图片地址 | - |
| title | string | 标题 | - |
```html
弹出菜单
```
```typescript
const show = ref(false)
const panels = ref([
{
iconUrl: '//img12.360buyimg.com/imagetools/jfs/t1/122016/33/6657/1362/5f0692a1E8708d245/e47299e5945a6956.png',
title: '微信好友'
}
])
function showActions() {
show.value = true
}
function close() {
show.value = false
}
const toast = useToast()
function select({ item, index }) {
toast.show(`当前选中项: ${item.title}, 下标: ${index}`)
}
```
### 多行展示
自定义多行面板时, `panels` 类型为多维数组, 每个数组内部对象结构如下:
| 参数 | 类型 | 说明 | 最低版本 |
| ------- | ------ | -------- | -------- |
| iconUrl | string | 图片地址 | - |
| title | string | 标题 | - |
```html
弹出菜单
```
```typescript
const show = ref(false)
const panels = ref([
[
{
iconUrl: '//img12.360buyimg.com/imagetools/jfs/t1/122016/33/6657/1362/5f0692a1E8708d245/e47299e5945a6956.png',
title: '微信好友'
}
],
[
{
iconUrl: '//img12.360buyimg.com/imagetools/jfs/t1/122016/33/6657/1362/5f0692a1E8708d245/e47299e5945a6956.png',
title: '微信好友'
}
]
])
function showActions() {
show.value = true
}
function close() {
show.value = false
}
const toast = useToast()
function select({ item, index }) {
toast.show(`当前选中项: ${item.title}, 下标: ${index}`)
}
```
## 标题
设置 `title` 展示标题。
```html
内容
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------------------- | ----------------------------------------------------------------------------- | ------- | ------ | ------- | -------- |
| v-model | 设置菜单显示隐藏 | boolean | - | - | - |
| actions | 菜单选项 | array | - | \[] | - |
| panels | 自定义面板项,可以为字符串数组,也可以为对象数组,如果为二维数组,则为多行展示 | array | - | \[] | - |
| title | 标题 | string | - | - | - |
| cancel-text | 取消按钮文案 | string | - | - | - |
| close-on-click-action | 点击选项后是否关闭菜单 | boolean | - | true | - |
| close-on-click-modal | 点击遮罩是否关闭 | boolean | - | true | - |
| duration | 动画持续时间 | number | - | 200(ms) | - |
| z-index | 菜单层级 | number | - | 10 | - |
| lazy-render | 弹层内容懒渲染,触发展示时才渲染内容 | boolean | - | true | - |
| safe-area-inset-bottom | 弹出面板是否设置底部安全距离(iphone X 类型的机型) | boolean | - | true | - |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| ---------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| select | 点击选项时触发 | 菜单选项或自定义面板一维数组 (item: 选项对象, index: 选项下标),自定义面板二维数组(item: 选项对象, rowIndex: 选项行下标, colIndex 选项列下标) | - |
| open | 弹出层打开时触发 | - | - |
| opened | 弹出层打开动画结束时触发 | - | - |
| close | 弹出层关闭时触发 | - | - |
| closed | 弹出层关闭动画结束时触发 | - | - |
| click-modal | 点击遮罩时触发 | - | - |
| cancel | 点击取消按钮时触发 | - | - |
## Action 数据结构
| 键名 | 说明 | 类型 | 最低版本 |
| -------- | ---------- | ------- | -------- |
| name | 选项名称 | string | - |
| subname | 描述信息 | string | - |
| color | 颜色 | string | - |
| disabled | 禁用 | boolean | - |
| loading | 加载中状态 | boolean | - |
## Panel 数据结构
| 键名 | 说明 | 类型 | 最低版本 |
| ------- | -------- | ------ | -------- |
| iconUrl | 图片地址 | string | - |
| title | 标题内容 | string | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------------- | --------------- | -------- |
| custom-class | 根节点样式 | - |
| custom-header-class | header 头部样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/backtop.md'
---
# Backtop 回到顶部
用于返回页面顶部的操作按钮。
## 基本用法
由于返回顶部需要实时监听滚动条位置,但是在uniapp的组件中不能获取页面的滚动信息,
所以只能在页面的`onPageScroll`生命周期中获取滚动条位置,再通过`Props`传递给组件。
```html
```
```typescript
const scrollTop = ref(0)
onPageScroll((e) => {
scrollTop.value = e.scrollTop
})
```
## 自定义图标
```html
TOP
```
## 自定义样式
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| --------- | -------------------------------- | ------ | ------ | ------ | -------- |
| scrollTop | 页面滚动距离 | number | - | - | - |
| top | 距离顶部多少距离时显示,单位`px` | number | - | 300 | - |
| duration | 返回顶部滚动时间,单位`ms` | number | - | 100 | - |
| zIndex | 组件z-index属性 | number | - | 10 | - |
| iconStyle | 自定义`icon`样式 | string | - | - | - |
| shape | 按钮形状 | string | square | circle | - |
| bottom | 距离屏幕顶部的距离,单位`px` | number | - | 100 | - |
| right | 距离屏幕右边距离,单位`px` | number | - | 20 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
| custom-style | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/badge.md'
---
# Badge 徽标
出现在按钮、图标旁的数字或状态标记。
## 基础用法
展示新消息数量。
定义`modelValue`属性,它接受`Number`或者`String`。
```html
评论
评论
```
## 修改背景色
设置 `type` 属性,也可以自定义背景色 `bg-color`,也可以通过`custom-class`定义组件样式。
```html
回复
评论
回复
评论
回复
```
```scss
:deep(.badge) {
margin: 0 30px 20px 0;
display: inline-block;
}
```
## 最大值
可自定义最大值。
由`max`属性定义,它接受一个`Number`,需要注意的是,只有当`modelValue`为`Number`时,它才会生效。
```html
评论
回复
```
## 展示 0 值
可使用`show-zero`属性,自定义是否展示 `0` 值。需要注意的是,`is-dot` 属性优先级高于 `show-zero` 属性,`is-dot`为`true`时将始终显示红点。
```html
评论
回复
```
## 自定义内容
可以显示数字以外的文本内容。
定义`modelValue`为`String`类型是时可以用于显示自定义文本。
```html
评论
回复
```
## 点状标注
以红点的形式标注需要关注的内容。
除了数字外,设置`is-dot`属性,它接受一个`Boolean`。
```html
数据查询
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|---------|
| v-model | 显示值 | string / number | - | - | - | - |
| max | 最大值,超过最大值会显示 '{max}+',要求 value 是 Number 类型 | number | - | - | - |
| top | 为正时,角标向下偏移对应的像素 | number | - | - | - |
| right | 为正时,角标向左偏移对应的像素 | number | - | - | - |
| is-dot | 红色点状标注 | boolean | - | false | - |
| hidden | 隐藏 badge | boolean | - | false | - |
| type | 类型 | string | primary / success / warning / danger / info | - | - |
| bg-color | 背景色 | string | 各种颜色的css写法 | - | - |
| show-zero | 是否显示0 | boolean | - | false | 0.1.62 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/button.md'
---
# Button 按钮
按钮用于触发一个操作,如提交表单或打开链接。
## 基本用法
基本按钮。
```html
主要按钮
成功按钮
信息按钮
警告按钮
危险按钮
```
## 禁用
设置 `disabled` 属性。
```html
默认按钮
```
## 幽灵按钮
设置 `plain` 属性。
```html
主要按钮
```
## 细边框幽灵按钮
设置 `hairline` 属性。
```html
主要按钮
```
## 按钮大小
设置 `size` ,支持 'small'、'medium'、'large',默认为 'medium'。
```html
小号按钮
中号按钮
大号按钮
```
## 加载中按钮
设置 `loading` 属性,让按钮处于加载中状态。加载中的按钮是禁止点击的。
```html
加载中
```
## 文字按钮
将 `type` 设置为 `text`。文字按钮不支持其他颜色。
```html
文字按钮
```
## 图标按钮
将 `type` 设置为 `icon`,同时设置 `icon` 属性,icon 为图标的类名,可以直接使用 `Icon 图标` 章节中的图标类名。
```html
```
## 带图标的按钮
设置 `icon` 属性,不需要设置 `type` 为 `icon`,即可以直接使用带图标的按钮。
```html
```
结合`classPrefix`可以使用自定义图标,参见 [Icon 自定义图标](/component/icon#自定义图标)。
```html
可回收
```
## 块状按钮
设置 `block` 属性。
```html
主要按钮
```
## 自定义样式
通过 `custom-class` 和 `custom-style` 属性可以自定义按钮的样式,这里我们使用`custom-class`给按钮添加一个 `Material Design 3` 风格的`box-shadow`。
```html
主要按钮
成功按钮
信息按钮
警告按钮
危险按钮
```
```scss
.page-class {
:deep() {
.custom-shadow {
box-shadow: 0 3px 1px -2px rgb(0 0 0 / 20%), 0 2px 2px 0 rgb(0 0 0 / 14%), 0 1px 5px 0 rgb(0 0 0 / 12%);
}
}
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | -------------------------------------------------------- | ------------ | -------- |
| type | 按钮类型 | string | primary / success / info / warning / error / text / icon | primary | - |
| round | 圆角按钮 | boolean | - | true | - |
| plain | 幽灵按钮 | boolean | - | false | - |
| hairline | 是否细边框 | boolean | - | false | - |
| loading | 加载中按钮 | boolean | - | false | - |
| block | 块状按钮 | boolean | - | false | - |
| size | 按钮尺寸 | string | small / medium / large | medium | - |
| disabled | 禁用按钮 | boolean | - | false | - |
| icon | 图标类名 | string | - | - | - |
| loading-color | 加载图标颜色 | string | - | - | - |
| open-type | 微信开放能力 | string | - | - | - |
| hover-stop-propagation | 指定是否阻止本节点的祖先节点出现点击态 | boolean | - | false | - |
| lang | 指定返回用户信息的语言,zh\_CN 简体中文,zh\_TW 繁体中文,en 英文 | string | zh\_CN / zh\_TW | en | - |
| session-from | 会话来源,open-type="contact"时有效 | string | - | - | - |
| session-message-title | 会话内消息卡片标题,open-type="contact"时有效 | string | - | 当前标题 | - |
| session-message-path | 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 | string | - | 当前分享路径 | - |
| send-message-img | 会话内消息卡片图片,open-type="contact"时有效 | string | - | 截图 | - |
| app-parameter | 打开 APP 时,向 APP 传递的参数,open-type=launchApp 时有效 | string | - | - | - |
| show-message-card | 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息,open-type="contact"时有效 | boolean | - | false | - |
| classPrefix | 类名前缀,用于使用自定义图标,参见[icon](/component/icon#自定义图标) | string | - | 'wd-icon' | 0.1.27 |
| button-id | 按钮的唯一标识,可用于设置隐私同意授权按钮的 id | string | - | - | 1.3.6 |
| scope | 支付宝小程序使用,当 open-type 为 getAuthorize 时有效。 | ButtonScope | `phoneNumber` / `userInfo` | - | 1.3.14 |
### ButtonOpenType 开放能力
| 属性 | 说明 |
| ------------------------- | ------------------------------------------------------------------------------------------ |
| feedback | 打开“意见反馈”页面,用户可提交反馈内容并上传日志。 |
| share | 触发用户转发 |
| getUserInfo | 获取用户信息,可以从@getuserinfo 回调中获取到用户信息 |
| contact | 打开客服会话,如果用户在会话中点击消息卡片后返回应用,可以从 @contact 回调中获得具体信息 |
| getPhoneNumber | 获取用户手机号,可以从@getphonenumber 回调中获取到用户信息 |
| launchApp | 小程序中打开 APP,可以通过 app-parameter 属性设定向 APP 传的参数 |
| openSetting | 打开授权设置页 |
| chooseAvatar | 获取用户头像,可以从@chooseavatar 回调中获取到头像信息 |
| getAuthorize | 支持小程序授权,支付宝小程序配合`scope`使用,可以实现`getPhoneNumber`和`getUserInfo`功能。 |
| lifestyle | 关注生活号,支付宝小程序 |
| contactShare | 分享到通讯录好友,支付宝小程序 |
| agreePrivacyAuthorization | 用户同意隐私协议按钮。可通过 @agreeprivacyauthorization 监听用户同意隐私协议事件。 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------------- | ------------------------------------------------------------ | -------- | -------- |
| click | 点击事件 | `event` | - |
| getuserinfo | 获取用户信息 | `detail` | - |
| contact | 客服消息回调,open-type="contact"时有效 | `detail` | - |
| getphonenumber | 获取用户手机号回调,open-type=getPhoneNumber 时有效 | `detail` | - |
| error | 当使用开放能力时,发生错误的回调,open-type=launchApp 时有效 | `detail` | - |
| launchapp | 打开 APP 成功的回调,open-type=launchApp 时有效 | `detail` | - |
| opensetting | 在打开授权设置页后回调,open-type=openSetting 时有效 | `detail` | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/calendar.md'
---
# Calendar 日历选择器
提供日历单选、多选、范围选择、周维度、月维度等功能。
## 基本使用
`type` 默认为 `date` 类型,设置 `v-model` 绑定值(13 位时间戳格式),监听 `@confirm` 事件获取选中值。`min-date` 最小日期默认为当前日期往前推 6 个月,`max-date` 最大日期默认为当前日期往后推 6 个月,日历的日期只展示最小日期到最大日期之间的日期。label 可以不传。可以通过 `label-width` 设置标题宽度,默认为 '33%'。
> `min-date`和`max-date`这两个值尽量不要设置过大,避免大量数据的计算和传递导致页面性能低下。
```html
```
```typescript
const value = ref(Date.now())
function handleConfirm({ value }) {
console.log(value)
}
```
## 日期多选
设置 `type` 为 `dates` 类型,此时 `value` 为数组。
```html
```
```typescript
const value = ref([])
function handleConfirm({ value }) {
console.log(value)
}
```
## 周类型选择
设置 `type` 为 `week` 类型,如果 `value` 有初始值,建议将周起始日 `first-day-of-week` 设置为 1(周一),避免选中样式和回显匹配不上。
```html
```
```typescript
const value = ref(Date.now())
function handleConfirm({ value }) {
console.log(value)
}
```
## 月类型选择
设置 `type` 为 `month` 类型,此时 `value` 有值时其值为月的第一天。
```html
```
```typescript
const value = ref(Date.now())
function handleConfirm({ value }) {
console.log(value)
}
```
## 范围选择
`type` 支持 `daterange`(日期范围选择)、`weekrange`(周范围选择)、`monthrange`(月范围选择) 类型,此时 `value` 为数组格式。
```html
```
```typescript
const value = ref([])
function handleConfirm({ value }) {
console.log(value)
}
```
## 日期时间类型
设置 `type` 为 `datetime` 类型,可以选择到时分秒,设置 `type` 为 `datetimerange` 为范围选择。
```html
```
```typescript
const value = ref('')
function handleConfirm({ value }) {
console.log(value)
}
```
可以设置 `hide-second`,使时间只展示到分钟级别;设置 `time-filter` 属性,可以自定义过滤 时分秒 选项,该属性接收 { type: string, values: array } 参数,返回一个新的数组,type 值为 'hour'、'minute' 或 'second',values 为 picker 数据列表。
```html
```
```typescript
const value = ref('')
function timeFilter({ type, values }) {
if (type === 'minute') {
// 只展示 0,10,20,30,40,50 分钟选项
return values.filter((item) => {
return item % 10 === 0
})
}
return values
}
function handleConfirm({ value }) {
console.log(value)
}
```
## 日周月切换
设置 `show-type-switch` 属性,展示 日周月 切换功能,支持在日周月类型 `date、week、month` 之间进行来回切换,可以通过 `type` 属性设置初始类型。如果 `type` 为 range 类型如 `daterange`,则日历可以在 `daterange、weekrange、monthrang` 之间进行来回切换。
```html
```
## 快捷操作
设置 `show-confirm` 属性为 `false`,不展示确定按钮,只对 `date、daterange、week、weekrange、month、monthrange` 类型有效。
```html
```
## 范围选择允许选中同一日期
设置 `allow-same-day` 属性,范围选择允许用户选择同一天、同一周、同一个月。
```html
```
## 格式化日期
设置 `formatter` 参数,其值为函数类型,接收一个 `object` 参数,返回一个对象,对象的属性保持跟入参的属性一致,其属性如下:
| 属性 | 类型 | 说明 | 最低版本 |
| ---------- | --------------- | ------------------------------------------- | -------- |
| type | CalendarDayType | 可选值见[CalendarDayType](#calendardaytype) | - |
| date | timestamp | 13 位的时间戳 | - |
| text | string | 日期文本内容 | - |
| topInfo | string | 上方提示信息 | - |
| bottomInfo | string | 下方提示信息 | - |
| disabled | boolean | 是否禁用 | - |
### CalendarDayType
| 类型 | 说明 | 最低版本 |
| ----------------- | ------------------------------------ | ---------------- |
| selected | 单日期选中 | - |
| start | 范围开始日期 | - |
| end | 范围结束日期 | - |
| middle | 范围开始与结束之间的日期 | - |
| same | 范围开始与结束日期同一天 | - |
| current | 当前日期 | - |
| multiple-middle | 多日期范围选择,开始与结束之间的日期 | 1.5.0 |
| multiple-selected | 多日期范围选择,选中的日期 | 1.5.0 |
```html
```
```typescript
const value = ref([])
function handleConfirm({ value }) {
console.log(value)
}
const formatter = (day) => {
const date = new Date(day.date)
const now = new Date()
const year = date.getFullYear()
const month = date.getMonth()
const da = date.getDate()
const nowYear = now.getFullYear()
const nowMonth = now.getMonth()
const nowDa = now.getDate()
if (year === nowYear && month === nowMonth && da === nowDa) {
day.topInfo = '今天'
}
if (month === 5 && da === 18) {
day.topInfo = '618大促'
}
if (month === 10 && da === 11) {
day.topInfo = '京东双11'
}
if (day.type === 'start') {
day.bottomInfo = '开始'
}
if (day.type === 'end') {
day.bottomInfo = '结束'
}
if (day.type === 'same') {
day.bottomInfo = '开始/结束'
}
return day
}
```
## 快捷选项
设置 `shortcuts` 属性,配置快捷选项列表,传入 `on-shortcuts-click` 属性,`on-shortcuts-click` 是个函数,接收 { item, index } 参数,item 为当前选项,index 为当前选项的下标。当快捷选项被点击时,会调用 `on-shortcuts-click`,接收到日历新的选中值。`text` 为选项的必传字段,其他字段根据自己需要自行传入。
```html
```
```typescript
const shortcuts = ref[]>([
{
text: '近7天',
id: 7
},
{
text: '近15天',
id: 15
},
{
text: '近30天',
id: 30
}
])
const value = ref('')
const onShortcutsClick = ({ item }) => {
const dayDiff = item.id
const endDate = Date.now() - 24 * 60 * 60 * 1000
const startDate = endDate - dayDiff * 24 * 60 * 60 * 1000
return [startDate, endDate]
}
function handleConfirm({ value }) {
console.log(value)
}
```
## 自定义展示
设置 `display-format` 属性可以自定义表单回显,`inner-display-format` 属性自定义范围选择类型的面板内部回显。
`display-format` 为函数,接收 `value`(当前值,type 为范围类型时为时间戳数组,其他类型为 number)、`type`(当前日历类型) 两个参数。
`inner-display-format` 为函数,会调用两次,接收 `value`(开始日期或结束日期,类型为 number)、`rangeType`('start' - 开始日期, 'end' - 结束日期)、`type`(当前日历类型)三个参数。
```html
```
```typescript
import { dayjs } from '@/uni_modules/wot-design-uni'
const value = ref('')
const displayFormat = (value) => {
return dayjs(value[0]).format('YY年MM月DD日') + ' - ' + dayjs(value[1]).format('YY年MM月DD日')
}
const innerDisplayFormat = (value, rangeType) => {
if (!value) {
return rangeType === 'start' ? '活动开始时间' : '活动结束时间'
}
return dayjs(value).format('YY年MM月DD日')
}
function handleConfirm({ value }) {
console.log(value)
}
```
## 确定前校验
设置 `before-confirm` 函数,在用户点击`确定`按钮时,会执行 `before-confirm` 函数,并传入 `value` 和 `resolve` 参数,可以对 `value` 进行校验,并通过 `resolve` 函数告知组件是否确定通过,`resolve` 接受 1 个 boolean 值,`resolve(true)` 表示选项通过,`resolve(false)` 表示选项不通过,不通过时不会关闭弹窗。
```html
```
```typescript
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
const value = ref('')
const beforeConfirm = ({ value, resolve }) => {
if (value > Date.now()) {
toast.error('该日期暂无数据')
resolve(false)
} else {
resolve(true)
}
}
function handleConfirm({ value }) {
console.log(value)
}
```
## 最大范围限制
设置 `max-range` 属性,设置范围选择的最大限制。
```html
```
## 设置周起始日
设置 `first-day-of-week` 属性,默认为 0,即周日,设置为 1 则为周一,依此类推。
## 自定义选择器
如果默认的 cell 类型的展示格式不满足需求,可以通过默认插槽进行自定义选择器样式。
```html
当前选中日期:{{ formatValue }}
选择日期
```
```typescript
const value = ref('')
const formatValue = ref('')
function handleConfirm({ value }) {
formatValue.value = new Date(value).toString()
}
```
## 使用组件实例方法
通过 ref 可以获取到 Calendar 实例并调用实例方法,通过 `with-cell` 可以屏蔽组件内部的 cell 选择器。
```html
打开日历
```
```typescript
import { ref } from 'vue'
import type { CalendarInstance } from '@/uni_modules/wot-design-uni/components/wd-calendar/types'
const calendar = ref()
const value = ref(Date.now())
function openCalendar() {
calendar.value?.open()
}
function closeCalendar() {
calendar.value?.close()
}
function handleConfirm({ value }) {
console.log(value)
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------- | --------------------- | ---------------- |
| v-model | 选中值,为 13 位时间戳或时间戳数组 | null / number / array | - | - | - |
| type | 日期类型 | string | date / dates / datetime / week / month / daterange / datetimerange / weekrange / monthrange | date | - |
| min-date | 最小日期,为 13 位时间戳 | number | - | 当前日期往前推 6 个月 | - |
| max-date | 最大日期,为 13 位时间戳 | number | - | 当前日期往后推 6 个月 | - |
| first-day-of-week | 周起始天 | number | - | 0 | - |
| formatter | 日期格式化函数 | function | - | - | - |
| max-range | type 为范围选择时有效,最大日期范围 | number | - | - | - |
| range-prompt | type 为范围选择时有效,选择超出最大日期范围时的错误提示文案 | string | - | 选择天数不能超过 x 天 | - |
| allow-same-day | type 为范围选择时有效,是否允许选择同一天 | boolean | - | false | - |
| default-time | 选中日期所使用的当日内具体时刻 | string / array | - | 00:00:00 | - |
| time-filter | type 为 'datetime' 或 'datetimerange' 时有效,用于过滤时间选择器的数据 | function | - | - | - |
| hide-second | type 为 'datetime' 或 'datetimerange' 时有效,是否不展示秒修改 | boolean | - | false | - |
| show-confirm | 是否显示确定按钮 | boolean | - | true | - |
| show-type-switch | 是否显示类型切换功能 | boolean | - | false | - |
| shortcuts | 快捷选项,为对象数组,其中对象的 `text` 必传 | array | - | - | - |
| title | 弹出层标题 | string | - | 选择日期 | - |
| label | 选择器左侧文案 | string | - | - | - |
| placeholder | 选择器占位符 | string | - | 请选择 | - |
| disabled | 禁用 | boolean | - | false | - |
| readonly | 只读 | boolean | - | false | - |
| display-format | 自定义展示文案的格式化函数,返回一个字符串 | function | - | - | - |
| inner-display-format | 自定义范围选择类型的面板内部回显,返回一个字符串 | function | - | - | - |
| size | 设置选择器大小 | string | large | - | - |
| label-width | 设置左侧标题宽度 | string | - | 33% | - |
| error | 是否为错误状态,错误状态时右侧内容为红色 | boolean | - | false | - |
| required | 必填样式 | boolean | - | false | - |
| center | 是否垂直居中 | boolean | - | false | - |
| ellipsis | 是否超出隐藏 | boolean | - | false | - |
| align-right | 选择器的值靠右展示 | boolean | - | false | - |
| before-confirm | 确定前校验函数,接收 { value, resolve } 参数,通过 resolve 继续执行,resolve 接收 1 个 boolean 参数 | function | - | - | - |
| use-default-slot | 使用默认插槽时设置该选项,已废弃直接使用默认插槽即可。 | boolean | - | false | - |
| use-label-slot | 使用 label 插槽时设置该选项,已废弃直接使用 label 插槽即可。 | boolean | - | false | - |
| close-on-click-modal | 点击遮罩是否关闭 | boolean | - | true | - |
| z-index | 弹窗层级 | number | - | 15 | - |
| safe-area-inset-bottom | 弹出面板是否设置底部安全距离(iphone X 类型的机型) | boolean | - | true | - |
| prop | 表单域 `model` 字段名,在使用表单校验功能的情况下,该属性是必填的 | string | - | - | - |
| rules | 表单验证规则,结合`wd-form`组件使用 | `FormItemRule []` | - | `[]` | - |
| immediate-change | type 为 'datetime' 或 'datetimerange' 时有,是否在手指松开时立即触发 picker-view 的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25 版本起提供,仅微信小程序和支付宝小程序支持。 | boolean | - | false | 1.2.25 |
| with-cell | 是否使用内置 cell 选择器 | boolean | - | true | 1.5.0 |
### FormItemRule 数据结构
| 键名 | 说明 | 类型 |
| --------- | ------------------------------------------------------- | ------------------------------------- |
| required | 是否为必选字段 | `boolean` |
| message | 错误提示文案 | `string` |
| validator | 通过函数进行校验,可以返回一个 `Promise` 来进行异步校验 | `(value, rule) => boolean \| Promise` |
| pattern | 通过正则表达式进行校验,正则无法匹配表示校验不通过 | `RegExp` |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ------------------------------------ | ------------------------ | -------- |
| confirm | 绑定值变化时触发 | `{ value, type }` | - |
| change | 点击面板日期时触发 | `{ value }` | - |
| cancel | 点击关闭按钮或者蒙层时触发 | - | - |
| open | 日历打开时触发 | - | - |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
| -------- | -------- | ---- | -------- |
| open | 打开面板 | - | - |
| close | 关闭面板 | - | - |
## Slots
| name | 说明 | 最低版本 |
| ------- | ---------- | -------- |
| default | 自定义展示 | - |
| label | 左侧插槽 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------------ | -------------------- | -------- |
| custom-class | 根节点样式 | - |
| custom-label-class | label 外部自定义样式 | - |
| custom-value-class | value 外部自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/calendar-view.md'
---
# CalendarView 日历面板组件
提供日历单选、多选、范围选择、周维度、月维度等功能。可以根据实际业务场景基于该组件进行封装高度定制化组件。
## 基本使用
`type` 默认为 `date` 类型,设置 `v-model` 绑定值(13 位时间戳格式),也可以监听 `@change` 事件获取选中值。`min-date` 最小日期默认为当前日期往前推 6 个月,`max-date` 最大日期默认为当前日期往后推 6 个月,日历面板的日期只展示最小日期到最大日期之间的日期。
> `min-date`和`max-date`这两个值尽量不要设置过大,避免大量数据的计算和传递导致页面性能低下。
```html
```
```typescript
const value = ref(Date.now())
function handleChange({ value }) {
console.log(value)
}
```
## 日期多选
设置 `type` 为 `dates` 类型,此时 `value` 为数组。
```html
```
```typescript
const value = ref([])
function handleChange({ value }) {
console.log(value)
}
```
## 周类型选择
设置 `type` 为 `week` 类型,如果 `value` 有初始值,建议将周起始日 `first-day-of-week` 设置为 1(周一),避免选中样式和回显匹配不上。
```html
```
```typescript
const value = ref(Date.now())
function handleChange({ value }) {
console.log(value)
}
```
## 月类型选择
设置 `type` 为 `month` 类型,此时 `value` 有值时其值为月的第一天。
```html
```
```typescript
const value = ref(Date.now())
function handleChange({ value }) {
console.log(value)
}
```
## 范围选择
`type` 支持 `daterange`(日期范围选择)、`weekrange`(周范围选择)、`monthrange`(月范围选择) 类型,此时 `value` 为数组格式。
```html
```
```typescript
const value = ref([])
function handleChange({ value }) {
console.log(value)
}
```
## 日期时间类型
设置 `type` 为 `datetime` 类型,可以选择到时分秒,设置 `type` 为 `datetimerange` 为范围选择。
```html
```
```typescript
const value = ref('')
function handleChange({ value }) {
console.log(value)
}
```
可以设置 `hide-second`,使时间只展示到分钟级别;设置 `time-filter` 属性,可以自定义过滤 时分秒 选项,该属性接收 { type: string, values: array } 参数,返回一个新的数组,type 值为 'hour'、'minute' 或 'second',values 为 picker 数据列表。
```html
```
```typescript
const value = ref('')
const timeFilter = ({ type, values }) => {
if (type === 'minute') {
// 只展示 0,10,20,30,40,50 分钟选项
return values.filter((item) => {
return item % 10 === 0
})
}
return values
}
function handleChange({ value }) {
console.log(value)
}
```
## 范围选择允许选中同一日期
设置 `allow-same-day` 属性,范围选择允许用户选择同一天、同一周、同一个月。
```html
```
## 格式化日期
设置 `formatter` 参数,其值为函数类型,接收一个 `object` 参数,返回一个对象,对象的属性保持跟入参的属性一致,其属性如下:
| 属性 | 类型 | 说明 | 最低版本 |
| ---------- | --------------- | ------------------------------------------- | -------- |
| type | CalendarDayType | 可选值见[CalendarDayType](#calendardaytype) | - |
| date | timestamp | 13 位的时间戳 | - |
| text | string | 日期文本内容 | - |
| topInfo | string | 上方提示信息 | - |
| bottomInfo | string | 下方提示信息 | - |
| disabled | boolean | 是否禁用 | - |
### CalendarDayType
| 类型 | 说明 |
| ----------------- | ------------------------------------ |
| selected | 单日期选中 |
| start | 范围开始日期 |
| end | 范围结束日期 |
| middle | 范围开始与结束之间的日期 |
| same | 范围开始与结束日期同一天 |
| current | 当前日期 |
| multiple-middle | 多日期范围选择,开始与结束之间的日期 |
| multiple-selected | 多日期范围选择,选中的日期 |
```html
```
```typescript
const value = ref([])
const formatter = (day) => {
const date = new Date(day.date)
const now = new Date()
const year = date.getFullYear()
const month = date.getMonth()
const da = date.getDate()
const nowYear = now.getFullYear()
const nowMonth = now.getMonth()
const nowDa = now.getDate()
if (year === nowYear && month === nowMonth && da === nowDa) {
day.topInfo = '今天'
}
if (month === 5 && da === 18) {
day.topInfo = '618大促'
}
if (month === 10 && da === 11) {
day.topInfo = '京东双11'
}
if (day.type === 'start') {
day.bottomInfo = '开始'
}
if (day.type === 'end') {
day.bottomInfo = '结束'
}
if (day.type === 'same') {
day.bottomInfo = '开始/结束'
}
return day
}
function handleChange({ value }) {
console.log(value)
}
```
## 最大范围限制
设置 `max-range` 属性,设置范围选择的最大限制。
```html
```
## 展示面板标题
`show-panel-title` 默认为 `true`,会自动计算标题并进行展示,可以选择不进行展示。
```html
```
## 设置周起始日
设置 `first-day-of-week` 属性,默认为 0,即周日,设置为 1 则为周一,依此类推。
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------- | --------------------- | -------- |
| v-model | 选中值,为 13 位时间戳或时间戳数组 | null / number / array | - | - | - |
| type | 日期类型 | string | date / dates / datetime / week / month / daterange / datetimerange / weekrange / monthrange | date | - |
| min-date | 最小日期,为 13 位时间戳 | number | - | 当前日期往前推 6 个月 | - |
| max-date | 最大日期,为 13 位时间戳 | number | - | 当前日期往后推 6 个月 | - |
| first-day-of-week | 周起始天 | number | - | 0 | - |
| formatter | 日期格式化函数 | function | - | - | - |
| max-range | type 为范围选择时有效,最大日期范围 | number | - | - | - |
| range-prompt | type 为范围选择时有效,选择超出最大日期范围时的错误提示文案 | string | - | 选择天数不能超过 x 天 | - |
| allow-same-day | type 为范围选择时有效,是否允许选择同一天 | boolean | - | false | - |
| show-panel-title | 是否展示面板标题,自动计算当前滚动的日期月份 | boolean | - | true | - |
| default-time | 选中日期所使用的当日内具体时刻 | string / array | - | 00:00:00 | - |
| panel-height | 可滚动面板的高度 | number | - | 378 | - |
| time-filter | type 为 'datetime' 或 'datetimerange' 时有效,用于过滤时间选择器的数据 | function | - | - | - |
| hide-second | type 为 'datetime' 或 'datetimerange' 时有效,是否不展示秒修改 | boolean | - | false | - |
| immediate-change | type 为 'datetime' 或 'datetimerange' 时有,是否在手指松开时立即触发 picker-view 的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25 版本起提供,仅微信小程序和支付宝小程序支持。 | boolean | - | false | 1.2.25 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | ----------- | -------- |
| change | 绑定值变化时触发 | `{ value }` | - |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
| -------------- | ------------------------------------------------------------------------------------------------------------ | ---- | -------- |
| scrollIntoView | 使当前日期或者选中日期滚动到可视区域,并监听滚动,在面板从 隐藏状态(如 display: none) 切换为展示状态时调用 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/card.md'
---
# Card 卡片
用于展示商品的图片、价格等信息。
## 基本使用
通过 `title` 属性设置标题,默认插槽传入内容。
支持设置 `title` 插槽和 `footer` 插槽。
```html
一般的,检举内容由承办的党的委员会或纪律检查委员会将处理意见或复议、复查结论同申诉人见面,听取其意见。复议、复查的结论和决定,应交给申诉人一份。
查看详情
```
## 矩形卡片
将`type` 设置为 `rectangle` 。
```html
2020-02-03服务到期
您可以去电脑上使用该服务
智催评营销
高级版-快速吸粉 | 周期一年
评价
立即使用
```
```scss
.content,
.title {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
}
.content {
justify-content: flex-start;
}
.title {
justify-content: space-between;
}
.title-tip {
color: rgba(0, 0, 0, 0.25);
font-size: 12px;
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----- | -------- | ------ | --------- | ------ | -------- |
| title | 卡片标题 | string | - | - | - |
| type | 卡片类型 | string | rectangle | - | - |
## Slot
| name | 说明 | 最低版本 |
| ------- | ------------ | -------- |
| default | 卡片内容 | - |
| title | 卡片标题 | - |
| footer | 底部操作内容 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| -------------------- | ---------------- | -------- |
| custom-class | 根节点自定义样式 | - |
| custom-title-class | 标题自定义样式 | - |
| custom-content-class | 内容自定义样式 | - |
| custom-footer-class | 底部自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/cell.md'
---
# Cell 单元格
单元格为列表中的单个展示项。
## 基本用法
`Cell` 可以单独使用,也可以和 `CellGroup` 组合使用。
```html
```
## 图标设置
设置 `icon` 属性,值可以为 Icon 章节中的图标名,也可以通过 icon 的 slot 自定义图标位置。
> 自定义图标,如果有多个 cell,需保证所有图标的宽度是一致的且垂直居中。使用 icon 属性且为 Icon 章节的字体图标,则宽度会自动一致且垂直居中;cell 图标的大小是宽 16px,高 16px,large 尺寸图标宽度 18px,高度 18px,距离右侧文字距离 15px。如果使用插槽,可以通过`custom-icon-class`进行设置。
```html
```
```scss
.cell-icon {
display: block;
box-sizing: border-box;
width: 16px;
height: 16px;
margin-right: 4px;
background: url('https://img10.360buyimg.com/jmadvertisement/jfs/t1/71075/7/3762/1820/5d1f26d1E0d600b9e/a264c901943080ac.png') no-repeat;
background-size: cover;
}
```
## 分组标题
可以在 `cell-group` 上设置 `title` 和 `value` 属性。
```html
```
## 单元格大小
通过设置 `size` 修改单元格大小,将 `size` 设置为 'large' 时左侧标题字号为 16px。
```html
```
## 展示边框线
在 `wd-cell-group` 上设置 `border` 属性,会给每个 cell 加上边框,最后一个 cell 则不展示边框,其他具有 `cell` 类型的表单组件也支持边框展示,如 input、picker。
```html
```
## 点击反馈
通过设置 `clickable` 开启点击反馈,之后可以监听`click`事件。
```html
```
```typescript
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
function showToast() {
toast.show('点击')
}
```
## 页面跳转
通过设置 `is-link` 属性显示导航箭头和点击态,设置 `to` 属性,指定跳转地址,可以设置 replace 替换掉历史堆栈中的当前页面。
`is-link`会默认开启`clickable`。
```html
```
可以只设置 `is-link` 用于展示右箭头和点击态。
```html
```
## 垂直居中
通过设置 `center` 设置内容垂直居中对齐,默认顶部居中。
```html
```
## 表单属性 - 必填
设置 `required` 属性。
```html
```
```typescript
const rate = ref(0)
function handleRateChange({ value }) {
console.log(value)
}
```
## 表单属性 - 上下结构
设置 `vertical` 属性。
```html
```
```typescript
const slider = ref('')
function handleSliderChange({ value }) {
console.log(value)
}
```
## 设置左侧宽度
设置 `title-width` 属性,label 内容超出则会 ... 隐藏,如果有个性化需求,使用插槽实现。
```html
```
## 自定义内容
`cell` 提供了 `icon`、`title`、`label`和默认 value 的插槽。
```html
按钮
订购
标题文字
25天后到期
```
```typescript
const switchValue = ref('')
function handleSwitchChange({ value }) {
console.log(value)
}
```
```scss
.cell-icon {
display: block;
box-sizing: border-box;
padding: 4px 0;
width: 16px;
height: 24px;
margin-right: 4px;
background: url('https://img10.360buyimg.com/jmadvertisement/jfs/t1/71075/7/3762/1820/5d1f26d1E0d600b9e/a264c901943080ac.png') no-repeat;
background-size: cover;
}
:deep(.custom-value) {
position: absolute;
top: 50%;
right: 0;
transform: translate(0, -50%);
white-space: nowrap;
}
.custom-text {
color: #f0883a;
}
.end-time {
display: inline-block;
margin-left: 8px;
border: 1px solid #faa21e;
padding: 0 4px;
font-size: 10px;
color: #faa21e;
}
```
## CellGroup Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| -------- | -------------- | ------- | ------ | ------ | -------- |
| title | 分组标题 | string | - | - | - |
| value | 分组右侧内容 | string | - | - | - |
| border | 是否展示边框线 | boolean | - | - | - |
| use-slot | 分组启用插槽 | boolean | - | false | - |
## Cell Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----------- | ------------------------------ | ------- | ------ | ------ | -------- |
| title | 标题 | string | - | - | - |
| value | 右侧内容 | string | - | - | - |
| icon | 图标类名 | string | - | - | - |
| label | 描述信息 | string | - | - | - |
| is-link | 是否为跳转链接 | boolean | - | false | - |
| to | 跳转地址 | string | - | - | - |
| clickable | 点击反馈,开启 is-link 时,默认开启此选项 | boolean | - | false | - |
| replace | 跳转时是否替换栈顶页面 | boolean | - | false | - |
| size | 设置单元格大小 | string | large | - | - |
| title-width | 设置左侧标题宽度 | string | - | - | - |
| center | 是否垂直居中,默认顶部居中 | boolean | - | false | - |
| required | 表单属性,必填 | boolean | - | false | - |
| vertical | 表单属性,上下结构 | boolean | - | false | - |
| prop | 表单域 `model` 字段名,在使用表单校验功能的情况下,该属性是必填的 | string | - | - | - |
| rules | 表单验证规则,结合`wd-form`组件使用 | `FormItemRule []` | - | `[]` | - |
| border | 是否展示边框线,优先级高于`cell-group`的`border` | boolean | - | - | - |
### FormItemRule 数据结构
| 键名 | 说明 | 类型 |
| --- | --- | --- |
| required | 是否为必选字段 | `boolean` |
| message | 错误提示文案 | `string` |
| validator | 通过函数进行校验,可以返回一个 `Promise` 来进行异步校验 | `(value, rule) => boolean \| Promise` |
| pattern | 通过正则表达式进行校验,正则无法匹配表示校验不通过 | `RegExp` |
## Cell Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ------------------------------------------------ | ---- | -------- |
| click | 当 clickable 或 is-link 为 true 时点击单元格触发 | - | - |
## CellGroup Slot
> CellGroup 必须首先开启`use-slot`,插槽才生效。使用插槽时请通过外部自定义样式类来控制样式。
| name | 说明 | 最低版本 |
| ----- | ------------ | -------- |
| title | 分组标题 | - |
| value | 分组右侧内容 | - |
## Cell Slot
| name | 说明 | 最低版本 |
| ------- | ----------------------------------------- | -------- |
| title | 标题 | - |
| default | 右侧内容,使用时不需要设置 `#default` | - |
| icon | 图标 | - |
| label | 描述信息 | - |
## CellGroup 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
## Cell 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------------ | ------------------------------ | -------- |
| custom-class | 根节点样式 | - |
| custom-icon-class | icon 外部自定义样式 | - |
| custom-label-class | label 外部自定义样式 | - |
| custom-value-class | value 外部自定义样式 | - |
| custom-title-class | title 外部自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/checkbox.md'
---
# Checkbox 复选框
复选框用于在一组备选项中进行多选。
## 基本用法
通过 `v-model` 绑定复选框的勾选状态,单独使用时值为 `boolean` 类型。
```html
单选框1
```
```typescript
const value = ref(true)
function handleChange({ value }) {
console.log(value)
}
```
## 修改图标形状
修改 `shape` 属性,可选值为 'circle'、'square'、'button',默认为 'circle'。
```html
沃特
沃特
```
## 修改选中的颜色
设置 `checked-color` 属性。
```html
沃特
```
```typescript
const value = ref(true)
```
## 修改选中和非选中的值
设置 `true-value` 和 `false-value` 修改选中值和非选中值。如果不设置,`change`事件的参数 默认为 `true` 和 `false` 切换。
```html
复选框
```
## 复选框组
通过 `v-model` 绑定复选框的勾选状态。
```html
沃特
商家后台
```
```typescript
const value = ref([])
```
设置 `cell` 属性,开启表单模式复选框组。
```html
沃特
商家后台
```
开启表单模式时,如果同时设置 `shape` 为 `button` 自动开启表单复选按钮组模式。
```html
选项一
选项二
选项三
选项四
选项五
选项六
选项七
```
```typescript
const value = ref(['jingmai'])
const value1 = ref(['jingmai'])
const value2 = ref(['1'])
```
## 同行展示
设置 `inline` 属性,使复选框在同一行展示。
```html
沃特
商家后台
```
```typescript
const value = ref(['jingmai'])
```
## 禁用
可以在 `checkbox-group` 上面设置 `disabled`,禁用所有复选框,也可以在单个复选框上面设置 `disabled` 属性,禁用某个复选框。
```html
沃特
商家后台
```
```typescript
const value = ref(['jingmai'])
```
## 设置选中数量的上限和下限
`min` 属性设置最小选中的数量,`max` 属性设置最大选中的数量。如果要默认设置某个选项固定被选中,则给该复选框设置 disabled,且 `value` 中有该选项的值。
```html
京东
沃特
商家后台
营销中心
```
```typescript
const value = ref(['jd'])
```
## 尺寸
设置 `size` 属性,可选 `large`。
```html
沃特
商家后台
```
## 结合 Cell 使用
通过 `Checkbox` 实例上的 `toggle` 方法触发选中状态切换。
```html
```
```ts
import { ref } from 'vue'
const value = ref([])
const checkBox1 = ref()
const checkBox2 = ref()
const checkBox3 = ref()
function handleCheck1() {
checkBox1.value && checkBox1.value.toggle()
}
function handleCheck2() {
checkBox2.value && checkBox2.value.toggle()
}
function handleCheck3() {
checkBox3.value && checkBox3.value.toggle()
}
function noop() {}
```
## Checkbox Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | -------------------------------------------------------------------- | ------------------------- | ------------------------ | ------- | -------- |
| v-model | 单选框选中时的值 | string / number / boolean | - | - | - |
| shape | 单选框形状 | string | circle / square / button | circle | - |
| checked-color | 选中的颜色 | string | - | #4D80F0 | - |
| disabled | 禁用 | boolean | - | false | - |
| max-width | 文字位置最大宽度 | string | - | - | - |
| true-value | 选中值,在 checkbox-group 中使用无效,需同 false-value 一块使用 | string / number | - | true | - |
| false-value | 非选中时的值,在 checkbox-group 中使用无效,需同 true-value 一块使用 | string /number | - | false | - |
| size | 设置大小 | string | large | - | - |
## CheckboxGroup Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | -------------------------------------- | ------- | ------------------------ | ------- | -------- |
| v-model | 绑定值 | Array | - | - | - |
| shape | 单选框形状 | string | circle / square / button | circle | - |
| cell | 表单模式 | boolean | - | false | - |
| checked-color | 选中的颜色 | string | - | #4D80F0 | - |
| disabled | 禁用 | boolean | - | false | - |
| min | 最小选中的数量 | number | - | 0 | - |
| max | 最大选中的数量,0 为无限数量,默认为 0 | number | - | 0 | - |
| inline | 同行展示 | boolean | - | false | - |
| size | 设置大小 | string | large | - | - |
## Checkbox Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
| -------- | ------------------------------------- | ---- | -------- |
| toggle | 切换当前选中状态,同时触发 change 事件 | - | 1.2.16 |
## Checkbox Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------------------------------------------------------------- | ----------- | -------- |
| change | 绑定值变化时触发,当为复选框组时参数为 boolean,表示该复选框是否选中 | `{ value }` | - |
## CheckboxGroup Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | ----------- | -------- |
| change | 绑定值变化时触发 | `{ value }` | - |
## Checkbox 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------------ | ---------------- | -------- |
| custom-class | 根节点样式 | - |
| custom-label-class | 文字结点样式 | - |
| custom-shape-class | 单选图标结点样式 | - |
## CheckboxGroup 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/circle.md'
---
# Circle 环形进度条 0.1.19
圆环形的进度条组件,支持进度渐变动画。
## 基础用法
通过`v-model`表示进度条的当前进度,`text`属性控制进度条中间文字内容。
```html
```
```ts
const current = ref(10)
```
## 宽度控制
通过`strokeWidth`属性来控制进度条宽度,默认`10px`。
```html
```
## 颜色定制
通过`color`属性控制进度条颜色,默认`#1C64FD`,通过`layerColor`属性控制进度条轨道颜色,默认`#EBEEF5`。
```html
```
## 渐变色
`color`属性支持传入对象格式来定义渐变色。
```html
```
```ts
const gradientColor = {
'0%': '#ffd01e',
'100%': '#ee0a24'
}
```
## 进度条展开方向
通过`clockwise`属性控制进度条展开方向,`clockwise`为`false`时,进度会从逆时针方向开始。
```html
```
## 大小定制
通过`size`属性控制进度条圆环直径,默认`100px`。
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----------------- | ---------------------------- | --------------------------- | ------------------------------------------ | --------------- | -------- |
| `v-model` / `modelValue` | 当前进度 | number | - | `0` | 0.1.19 |
| `customClass` | 自定义class | string | - | - | 0.1.19 |
| `customStyle` | 自定义style | string | - | - | 0.1.19 |
| `size` | 圆环直径,默认单位为 px | number | - | `100` | 0.1.19 |
| `color` | 进度条颜色 | string / Record\ | - | `#4d80f0` | 0.1.19 |
| `layerColor` | 轨道颜色 | string | - | `#EBEEF5` | 0.1.19 |
| `fill` | 填充颜色 | string | - | `#ffffff` | 0.1.19 |
| `speed` | 动画速度(单位为 rate/s) | number | - | `50` | 0.1.19 |
| `text` | 文字 | string | - | - | 0.1.19 |
| `strokeWidth` | 进度条宽度,单位px | number | - | `10` | 0.1.19 |
| `strokeLinecap` | 进度条端点的形状 | string | `butt` / `round` / `square` | `round` | 0.1.19 |
| `clockwise` | 是否顺时针增加 | boolean | - | `true` | 0.1.19 |
## Circle 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/collapse.md'
---
# Collapse 折叠面板
将一组内容放置在多个折叠面板中,点击面板的标题可以展开或收缩其内容。
## 基本使用
`v-model` 为绑定值,可以为 array 类型(普通折叠)、 string 类型(手风琴)和 boolean 类型(收起展开查看更多)。CollapseItem 的 `name` 为必填, `title` 选填且可通过 `slot` 自定义。`name` 用于标识该折叠栏。
```typescript
const value = ref(['item1'])
```
```html
这是一条简单的示例文字。
这是一条简单的示例文字。
这是一条简单的示例文字。
```
```css
.header {
display: flex;
align-items: center;
justify-content: space-between;
}
```
## 手风琴
设置 `accordion` 属性。
```html
这是一条简单的示例文字。
这是一条简单的示例文字。
这是一条简单的示例文字。
```
## 禁用
给 CollapseItem 设置 `disabled` 属性,禁用某个折叠栏。
```html
这是一条简单的示例文字。
这是一条简单的示例文字。
这是一条简单的示例文字。
```
## 异步更新
通过给`wd-collapse-item`组件传入 `beforeExpend` 函数可以在打开面板前进行校验和处理,返回 true 表示允许打开,返回 false 表示禁止打开。支持返回 Promise 进行例如调用接口获取面板数据的操作。
```html
{{ item.body }}
```
```ts
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
const value = ref(['item1'])
const itemList = ref[]>([
{
title: '标签1',
name: 'item1',
body: '如订单处于暂停状态,进入“我的订单”页面,找到要取消的订单,点击“取消订单”按钮;选择订单取消原因后,点击“下一步”提交申请即可。'
},
{
title: '标签1',
name: 'item2',
body: '一般情况下,买家只能向商户申请退款,商户确认可以退款后,可以通过接口或者商户平台向微信支付发起退款申请。'
},
{
title: '标签1',
name: 'item3',
body: '将收到的有质量问题的商品照片或者订单截图上传到微信公众账号(微信关注联华华商公众号),我们的工作人员会尽快帮您处理。'
},
{
title: '标签1',
name: 'item4',
body: '七天无理由退换货制度,所有商品在不影响二次销售的情况下7天内(以快递单签收为准)均接受客户退换货。'
},
{
title: '标签1',
name: 'item5',
body: 'Q1:优惠券使用详情?详情页面【我的】-【我的优惠】-【优惠券规则说明】。'
}
])
/**
* 折叠面板展开前回调方法
* @param e
*/
function beforeExpend(name) {
const index = itemList.value.findIndex((item) => {
return item.name === name
})
if (index > -1) {
itemList.value[index].body =
'Q1:七天无理由退换货制度,所有商品在不影响二次销售的情况下7天内(以快递单签收为准)均接受客户退换货。七天无理由退换货制度,所有商品在不影响二次销售的情况下7天内(以快递单签收为准)均接受客户退换货。七天无理由退换货制度,所有商品在不影响二次销售的情况下7天内(以快递单签收为准)均接受客户退换货。七天无理由退换货制度,所有商品在不影响二次销售的情况下7天内(以快递单签收为准)均接受客户退换货。七天无理由退换货制度,所有商品在不影响二次销售的情况下7天内(以快递单签收为准)均接受客户退换货。七天无理由退换货制度,所有商品在不影响二次销售的情况下7天内(以快递单签收为准)均接受客户退换货。'
}
return new Promise((reslove, reject) => {
toast.loading('加载中')
setTimeout(() => {
toast.close()
reslove(true)
}, 500)
})
}
```
## 查看更多
Collapse 可以单独使用,通过设置 `viewmore` 属性,将其转化为查看更多的折叠类型,同时可以设置 `line-num` 修改收起时的显示行数。这时候的 `value` 为 boolean 类型。
```html
这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。
```
## 查看更多-使用插槽
Collapse 查看更多的模式下,可以使用插槽定义自己想要的折叠处样式,使用 `use-more-slot` 设置插槽开启。并且可以使用外部样式类 `custom-more-slot-class` 为自定义插槽设置样式。
```scss
:deep(.more-slot) {
color: red;
}
```
```html
具名插槽:这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。这是一条简单的示例文字。
显示全部
```
## 嵌套使用
`collapse`可以嵌套使用,同时由于`collapse-item`的内容容器存在默认的`padding`,所以嵌套的`collapse`需要设置`custom-body-style`或者`custom-body-class`来覆盖默认样式。
***以下为示例,也可以自行调整样式。***
:::tip 注意
`custom-body-style`和`custom-body-class`在`1.4.0`及以上版本支持。
:::
```html
{{ item.body }}
```
```css
.collapse {
:deep() {
.no-border {
&::after {
display: none;
}
}
}
}
```
```ts
const collapseRoot = ref(['0'])
const collapseList = ref>([['item1'], ['item2'], ['item3'], ['item4'], ['item5']])
```
## CollapseItem Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | ----------------------------------------------------------- | -------- | ------ | ------ | -------- |
| name | 折叠栏的标识符 | string | - | - | - |
| title | 折叠栏的标题, 支持同名 slot 自定义内容 | string | - | '' | - |
| disabled | 禁用折叠栏 | boolean | - | false | - |
| before-expend | 打开前的回调函数,返回 false 可以阻止打开,支持返回 Promise | Function | - | - | - |
### `before-expend` 执行时会传递以下回调参数:
| 参数名 | 说明 | 类型 |
| ------ | ---------- | -------- |
| name | 唯一标识符 | `String` |
## Collapse Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----------- | ------------------------------------ | ------------------------ | ------ | ------ | -------- |
| value | 绑定值 | string / array / boolean | - | - | - |
| accordion | 手风琴 | boolean | - | false | - |
| viewmore | 查看更多的折叠面板 | boolean | - | false | - |
| useMoreSlot | 查看更多的自定义插槽使用标志 | boolean | - | false | - |
| line-num | 查看更多的折叠面板,收起时的显示行数 | number | - | 2 | - |
## Collapse Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | ----------- | -------- |
| change | 绑定值变化时触发 | `{ value }` | - |
## Methods
| 方法名 | 说明 | 参数 | 最低版本 |
| --------- | -------------------------------------------------------------------------------- | ------------------------------------ | -------- |
| toggleAll | 切换所有面板展开状态,传 `true` 为全部展开,`false` 为全部收起,不传参为全部切换 | `options?: CollapseToggleAllOptions` | 0.2.6 |
### CollapseToggleAllOptions 参数说明
| 参数名 | 说明 | 类型 | 默认值 |
| ------------ | ----------------------------------- | ------- | ------ |
| expanded | 是否展开,true 为展开,false 为收起 | boolean | - |
| skipDisabled | 是否跳过禁用项 | boolean | false |
### toggleAll 方法示例
```html
...
```
```ts
import { ref } from 'vue'
import type { CollapseInstance } from '@/uni_modules/wot-design-uni/components/wd-collapse/types'
const collapseRef = ref()
// 全部切换
collapseRef.value?.toggleAll()
// 全部展开
collapseRef.value?.toggleAll(true)
// 全部收起
collapseRef.value?.toggleAll(false)
// 全部全部切换,并跳过禁用项
collapseRef.value?.toggleAll({
skipDisabled: true
})
// 全部选中,并跳过禁用项
collapseRef.value?.toggleAll({
expanded: true,
skipDisabled: true
})
```
## Collapse Slot
| name | 说明 | 最低版本 |
| ----- | ---------------------------------------------------- | -------- |
| title | 标题,便于开发者自定义标题(非 viewmore 使用) | 1.2.27 |
| more | 查看更多,便于开发者自定义查看更多类型的展开收起样式 | - |
## CollapseItem 外部样式类
| 类名 | 说明 | 最低版本 |
| ----------------- | ------------------------------ | ---------------- |
| custom-class | collapseItem 根节点样式 | - |
| custom-body-style | 自定义折叠面板内容容器的样式 | 1.4.0 |
| custom-body-class | 自定义折叠面板内容容器的样式类 | 1.4.0 |
## Collapse 外部样式类
| 类名 | 说明 | 最低版本 |
| ---------------------- | ---------------------------------- | -------- |
| custom-class | collapse 根节点样式 | - |
| custom-more-slot-class | 查看更多模式下的插槽外部自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/col-picker.md'
---
# ColPicker 多列选择器
使用多列选择器来做级联,交互效果较好,多列选择器支持无限级选择。
::: tip 提示
多列选择器常用于选择省市区,我们使用 Vant 提供的中国省市区数据作为数据源,你可以安装 [@vant/area-data](https://github.com/youzan/vant/tree/main/packages/vant-area-data) npm 包来引入:
```bash
# 通过 npm
npm i @vant/area-data
# 通过 yarn
yarn add @vant/area-data
# 通过 pnpm
pnpm add @vant/area-data
# 通过 Bun
bun add @vant/area-data
```
:::
***为了方便开发者使用`@vant/area-data`进行开发调试,我们封装了`useColPickerData`,你可以直接使用`useColPickerData`来获取数据源。***
::: details 基于@vant/area-data 包装的`useColPickerData`
```typescript
// 可以将此代码放置于项目src/hooks/useColPickerData.ts中
import { useCascaderAreaData } from '@vant/area-data'
export type CascaderOption = {
text: string
value: string
children?: CascaderOption[]
}
/**
* 使用'@vant/area-data'作为数据源,构造ColPicker组件的数据
* @returns
*/
export function useColPickerData() {
// '@vant/area-data' 数据源
const colPickerData: CascaderOption[] = useCascaderAreaData()
// 根据code查找子节点,不传code则返回所有节点
function findChildrenByCode(data: CascaderOption[], code?: string): CascaderOption[] | null {
if (!code) {
return data
}
for (const item of data) {
if (item.value === code) {
return item.children || null
}
if (item.children) {
const childrenResult = findChildrenByCode(item.children, code)
if (childrenResult) {
return childrenResult
}
}
}
return null
}
return { colPickerData, findChildrenByCode }
}
```
:::
## 基本用法
`label` 设置左侧文本内容;
`columns` 设置数据源,为二维数组,每一列为一个一维数组,每个选项包含 `value`(选项值) 和 `label`(选项名称)。
`v-model` 设置选中项的值,数据类型为数组;
也可以监听 `change` 事件,获取选中值,`event` 是个对象,包含 `value`(选中值数组)、`selectedItems`(选中项对象数组)两个属性。
传入 `column-change` 属性,其类型为 `function`,接收参数 options: object;options 的结构如下:
| 参数 | 类型 | 说明 | 最低版本 |
| ------------ | -------- | ---------------------------------------------------------------------- | -------- |
| selectedItem | object | 当前列的选中项,数据结构跟 columns 中选项的数据结构一致 | - |
| index | number | 当前列下标 | - |
| rowIndex | number | 当前列选中项下标 | - |
| resolve | function | 接收下一列的选项数组 | - |
| finish | function | 结束 picker 选择,若无法正常关闭如数据获取失败,则执行 `finish(false)` | - |
```html
```
```typescript
// useColPickerData可以参考本章节顶部的介绍
// 导入路径根据自己实际情况调整,万不可一贴了之
import { useColPickerData } from '@/hooks/useColPickerData'
const { colPickerData, findChildrenByCode } = useColPickerData()
const value = ref([])
const area = ref([
colPickerData.map((item) => {
return {
value: item.value,
label: item.text
}
})
])
const columnChange = ({ selectedItem, resolve, finish }) => {
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
if (areaData && areaData.length) {
resolve(
areaData.map((item) => {
return {
value: item.value,
label: item.text
}
})
)
} else {
finish()
}
}
function handleConfirm({ value }) {
console.log(value)
}
```
## 异步加载
一般 column-change 是个异步获取数据的操作,触发 column-change 组件会有默认 loading,数据响应后关闭 loading。
异步请求数据失败,则调用 `finish(false)`。
```html
```
```typescript
// useColPickerData可以参考本章节顶部的介绍
// 导入路径根据自己实际情况调整,万不可一贴了之
import { useColPickerData } from '@/hooks/useColPickerData'
const { colPickerData, findChildrenByCode } = useColPickerData()
const value = ref([])
const area = ref([
colPickerData.map((item) => {
return {
value: item.value,
label: item.text
}
})
])
const columnChange = ({ selectedItem, resolve, finish }) => {
// 模拟异步请求
setTimeout(() => {
// 模拟请求失败
if (Math.random() > 0.7) {
finish(false)
toast.error.error('数据请求失败,请重试')
return
}
// 这里为什么用selectedItem.value作为code呢?是因为area构造的时候就是将标识放到了value字段上,同理你也可以改为其他字段,只要和area的字段对应即可
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
if (areaData && areaData.length) {
resolve(
areaData.map((item) => {
return {
value: item.value,
label: item.text
}
})
)
} else {
// 没有下一项时,执行完成
finish()
}
}, 300)
}
function handleConfirm({ value }) {
console.log(value)
}
```
## 初始选项
初始选项有两种方式:
1)设置初始选项时,`columns` 的数组长度应与 `value` 的数组长度一致,`value` 每一列的值必须对应可以在 `columns` 中找到。
```html
```
```typescript
// useColPickerData可以参考本章节顶部的介绍
// 导入路径根据自己实际情况调整,万不可一贴了之
import { useColPickerData } from '@/hooks/useColPickerData'
const { colPickerData, findChildrenByCode } = useColPickerData()
const value = ref(['150000', '150100', '150121'])
const area = ref([
colPickerData.map((item) => {
return {
value: item.value,
label: item.text
}
}),
findChildrenByCode(colPickerData, '150000')!.map((item) => {
return {
value: item.value,
label: item.text
}
}),
findChildrenByCode(colPickerData, '150100')!.map((item) => {
return {
value: item.value,
label: item.text
}
})
])
const columnChange = ({ selectedItem, resolve, finish }) => {
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
if (areaData && areaData.length) {
resolve(
areaData.map((item) => {
return {
value: item.value,
label: item.text
}
})
)
} else {
finish()
}
}
function handleConfirm({ value }) {
console.log(value)
}
```
2)设置 `auto-complete` 属性,当 `columns` 数组长度为 0 时,会自动触发 `columnChange` 函数来补齐数据。设置了该属性后,因为数据需要动态补全,因此 传递出来的参数 selectedItem 只有 value 字段,没有 label 字段。
```html
```
```typescript
// useColPickerData可以参考本章节顶部的介绍
// 导入路径根据自己实际情况调整,万不可一贴了之
import { useColPickerData } from '@/hooks/useColPickerData'
const { colPickerData, findChildrenByCode } = useColPickerData()
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
const value = ref([])
const area = ref([])
onMounted(async () => {
toast.loading('数据加载中')
// 模拟异步请求
await sleep()
toast.close()
value.value = ['150000', '150100', '150121']
})
const columnChange: ColPickerColumnChange = async ({ selectedItem, resolve, finish }) => {
// 模拟异步请求
await sleep(0.3)
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
if (areaData && areaData.length) {
resolve(
areaData.map((item) => {
return {
value: item.value,
label: item.text
}
})
)
} else {
finish()
}
}
function sleep(second: number = 1) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(true)
}, 1000 * second)
})
}
```
## 禁用
设置 `disabled` 属性。
```html
```
## 只读
设置 `readonly` 属性。
```html
```
## 禁用选项
`columns` 每个选项支持 `disabled` 属性。
```html
```
```typescript
// useColPickerData可以参考本章节顶部的介绍
// 导入路径根据自己实际情况调整,万不可一贴了之
import { useColPickerData } from '@/hooks/useColPickerData'
const { colPickerData, findChildrenByCode } = useColPickerData()
const value = ref([])
const area = ref([
colPickerData.map((item) => {
return {
value: item.value,
label: item.text,
disabled: item.value === '140000'
}
})
])
const columnChange = ({ selectedItem, resolve, finish }) => {
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
if (areaData && areaData.length) {
resolve(
areaData.map((item) => {
return {
value: item.value,
label: item.text
}
})
)
} else {
finish()
}
}
```
## 选项提示信息
`columns` 每个选项支持 `tip` 属性。
```html
```
```typescript
// useColPickerData可以参考本章节顶部的介绍
// 导入路径根据自己实际情况调整,万不可一贴了之
import { useColPickerData } from '@/hooks/useColPickerData'
const { colPickerData, findChildrenByCode } = useColPickerData()
const value = ref([])
const area = ref([
colPickerData.map((item) => {
return {
value: item.value,
label: item.text,
disabled: item.value === '140000',
tip: item.value === '140000' ? '该地区无货,暂时无法选择' : item.value === '150000' ? '该地区配送时间可能较长' : ''
}
})
])
const columnChange = ({ selectedItem, resolve, finish }) => {
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
if (areaData && areaData.length) {
resolve(
areaData.map((item) => {
return {
value: item.value,
label: item.text
}
})
)
} else {
finish()
}
}
```
## 展示格式化
设置 `display-format` 属性,其类型为 `function`,接收当前选中项(数组,数组成员的格式同 columns 数组成员的格式),返回要展示的字符串。
```html
```
```typescript
// useColPickerData可以参考本章节顶部的介绍
// 导入路径根据自己实际情况调整,万不可一贴了之
import { useColPickerData } from '@/hooks/useColPickerData'
const { colPickerData, findChildrenByCode } = useColPickerData()
const value = ref(['130000', '130200', '130204'])
const area = ref([
colPickerData.map((item) => {
return {
value: item.value,
label: item.text
}
}),
findChildrenByCode(colPickerData, '130000')!.map((item) => {
return {
value: item.value,
label: item.text
}
}),
findChildrenByCode(colPickerData, '130200')!.map((item) => {
return {
value: item.value,
label: item.text
}
})
])
const columnChange = ({ selectedItem, resolve, finish }) => {
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
if (areaData && areaData.length) {
resolve(
areaData.map((item) => {
return {
value: item.value,
label: item.text
}
})
)
} else {
finish()
}
}
// 格式化方法
const displayFormat = (selectedItems: Record[]) => {
return selectedItems[selectedItems.length - 2].label + '-' + selectedItems[selectedItems.length - 1].label
}
```
## 设置标题
设置 `title` 属性,修改弹出层的标题。
```html
```
## 确定前校验
设置 `before-confirm` 函数,在用户点击`确定`按钮时,会执行 `before-confirm` 函数,并传入 `value`、`selectedItems`(选中项数组,数据结构同 columns 每一列的选项) 和 `resolve` 参数,可以对 `value` 进行校验,并通过 `resolve` 函数告知组件是否确定通过,`resolve` 接受 1 个 boolean 值,`resolve(true)` 表示选项通过,`resolve(false)` 表示选项不通过,不通过时不会关闭弹窗。
```html
```
```typescript
// useColPickerData可以参考本章节顶部的介绍
// 导入路径根据自己实际情况调整,万不可一贴了之
import { useColPickerData } from '@/hooks/useColPickerData'
const { colPickerData, findChildrenByCode } = useColPickerData()
const value = ref([])
const area = ref([
colPickerData.map((item) => {
return {
value: item.value,
label: item.text
}
})
])
const columnChange = ({ selectedItem, resolve, finish }) => {
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
if (areaData && areaData.length) {
resolve(
areaData.map((item) => {
return {
value: item.value,
label: item.text
}
})
)
} else {
finish()
}
}
const beforeConfirm = (value: (string | number)[], selectedItems: Record[], resolve: (isPass: boolean) => void) => {
if (parseInt(String(value[2])) > 120000) {
toast.error('该地区库存不足')
resolve(false)
} else {
resolve(true)
}
}
function handleConfirm({ selectedItems }: any) {
displayValue.value = selectedItems
.map((item: any) => {
return item.label
})
.join('')
}
```
## 错误状态
设置 `error` 属性,选择器的值显示为红色。
```html
```
## 必填样式
设置 `required` 属性,展示必填样式。
```html
```
## 选择器大小
通过设置 `size` 修改选择器大小,将 `size` 设置为 'large' 时字号为 16px。
```html
```
## 值靠右展示
设置 `align-right` 属性,选择器的值靠右展示。
```html
```
## 自定义选择器
如果默认的 cell 类型的展示格式不满足需求,可以通过默认插槽进行自定义选择器样式。在标签上添加 use-default-slot 属性并设置为 true。
```html
当前选中项: {{ displayValue }}
选择地址
```
```typescript
// useColPickerData可以参考本章节顶部的介绍
// 导入路径根据自己实际情况调整,万不可一贴了之
import { useColPickerData } from '@/hooks/useColPickerData'
const { colPickerData, findChildrenByCode } = useColPickerData()
const value = ref([])
const displayValue = ref('')
const area = ref([
colPickerData.map((item) => {
return {
value: item.value,
label: item.text
}
})
])
const columnChange = ({ selectedItem, resolve, finish }) => {
const areaData = findChildrenByCode(colPickerData, selectedItem.value)
if (areaData && areaData.length) {
resolve(
areaData.map((item) => {
return {
value: item.value,
label: item.text
}
})
)
} else {
finish()
}
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------- | ------ | ------- | -------- |
| v-model | 选中项 | array | - | - | - |
| columns | 选择器数据,二维数组 | array | - | - | - |
| value-key | 选项对象中,value 对应的 key | string | - | value | - |
| label-key | 选项对象中,展示的文本对应的 key | string | - | label | - |
| tip-key | 选项对象中,提示文案对应的 key | string | - | tip | - |
| title | 弹出层标题 | string | - | - | - |
| label | 选择器左侧文案 | string | - | - | - |
| placeholder | 选择器占位符 | string | - | 请选择 | - |
| disabled | 禁用 | boolean | - | false | - |
| readonly | 只读 | boolean | - | false | - |
| display-format | 自定义展示文案的格式化函数,返回一个字符串 | function | - | - | - |
| column-change | 接收当前列的选中项 item、当前列下标、当前列选中项下标下一列数据处理函数 resolve、结束选择 finish | function | - | - | - |
| size | 设置选择器大小 | string | large | - | - |
| label-width | 设置左侧标题宽度 | string | - | 33% | - |
| error | 是否为错误状态,错误状态时右侧内容为红色 | boolean | - | false | - |
| required | 必填样式 | boolean | - | false | - |
| align-right | 选择器的值靠右展示 | boolean | - | false | - |
| before-confirm | 确定前校验函数,接收 (value, resolve) 参数,通过 resolve 继续执行 picker,resolve 接收 1 个 boolean 参数 | function | - | - | - |
| loading-color | loading 图标的颜色 | string | - | #4D80F0 | - |
| use-default-slot | 使用默认插槽时设置该选项 | boolean | - | false | - |
| use-label-slot | 使用 label 插槽时设置该选项 | boolean | - | false | - |
| close-on-click-modal | 点击遮罩是否关闭 | boolean | - | true | - |
| auto-complete | 自动触发 column-change 事件来补全数据,当 columns 为空数组或者 columns 数组长度小于 value 数组长度时,会自动触发 column-change | - | false | - |
| z-index | 弹窗层级 | number | - | 15 | - |
| safe-area-inset-bottom | 弹出面板是否设置底部安全距离(iphone X 类型的机型) | boolean | - | true | - |
| ellipsis | 是否超出隐藏 | boolean | - | false | - |
| prop | 表单域 `model` 字段名,在使用表单校验功能的情况下,该属性是必填的 | string | - | - | - |
| rules | 表单验证规则,结合`wd-form`组件使用 | `FormItemRule []` | - | `[]` | - |
| lineWidth | 底部条宽度,单位像素 | number | - | - | 1.3.7 |
| lineHeight | 底部条高度,单位像素 | number | - | - | 1.3.7 |
### FormItemRule 数据结构
| 键名 | 说明 | 类型 |
| --------- | ------------------------------------------------------- | ------------------------------------- |
| required | 是否为必选字段 | `boolean` |
| message | 错误提示文案 | `string` |
| validator | 通过函数进行校验,可以返回一个 `Promise` 来进行异步校验 | `(value, rule) => boolean \| Promise` |
| pattern | 通过正则表达式进行校验,正则无法匹配表示校验不通过 | `RegExp` |
## 选项数据结构
| 键名 | 说明 | 类型 | 是否必填 | 最低版本 |
| -------- | -------- | ------- | -------- | -------- |
| value | 选项值 | string | 是 | - |
| label | 选项名 | string | 是 | - |
| tip | 选项提示 | string | 否 | - |
| disabled | 禁用选项 | boolean | 否 | - |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------------------- | ------------------------------------------------ | -------- |
| confirm | 最后一列选项选中时触发 | `{ value(选项值数组), selectedItems(选项数组) }` | - |
| close | 点击关闭按钮或者蒙层时触发 | - | - |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | ---- | -------- |
| open | 打开 picker 弹框 | - |
| close | 关闭 picker 弹框 | - |
## Slots
| name | 说明 | 最低版本 |
| ------- | ---------- | -------- |
| default | 自定义展示 | - |
| label | 左侧插槽 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------------ | -------------------- | -------- |
| custom-class | 根节点样式 | - |
| custom-label-class | label 外部自定义样式 | - |
| custom-value-class | value 外部自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/config-provider.md'
---
# ConfigProvider 全局配置
用于全局配置 `Wot` 组件,提供深色模式、主题定制等能力。
## 深色模式
将 ConfigProvider 组件的 `theme` 属性设置为 `dark`,可以开启深色模式。
深色模式会全局生效,使页面上的所有 `Wot` 组件变为深色风格。
```vue
...
```
:::tip
值得注意的是,开启 `Wot` 的深色模式只会影响 `Wot` 组件的 `UI`,并不会影响全局的文字颜色或背景颜色,你可以参考以下 `CSS` 来设置一些全局样式:
:::
```css
.wot-theme-dark body {
color: #f5f5f5;
background-color: black;
}
```
## 动态切换
通过动态设置 `theme` 属性,可以在浅色风格和深色风格之间进行切换。
```vue
...
```
```ts
export default {
setup() {
const theme = ref('light')
setTimeout(() => {
theme.value = 'dark'
}, 1000)
return { theme }
}
}
```
## 定制主题
`Wot` 组件通过丰富的 [CSS 变量](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties) 来组织样式,通过覆盖这些 `CSS` 变量,可以实现定制主题、动态切换主题等效果。
### 示例
这些变量的默认值被定义在 `page` 节点上,如果要转 `H5`,默认值被定义在 `:root` 节点上
```css
:root,
page {
--wot-color-success: red;
--wot-color-warning: yellow;
}
```
### 通过 CSS 覆盖
你可以直接在代码中覆盖这些 `CSS` 变量,`Button` 组件的样式会随之发生改变:
```css
/* 添加这段样式后,默认 Button 底色会变成绿色 */
:root,
page {
--wot-button-normal-bg: green;
}
```
### 通过 ConfigProvider 覆盖
`ConfigProvider` 组件提供了覆盖 `CSS` 变量的能力,你需要在根节点包裹一个 `ConfigProvider` 组件,并通过 `theme-vars` 属性来配置一些主题变量
```html
提交
```
```ts
import { ref, reactive } from 'vue'
export default {
setup() {
// themeVars 内的值会被转换成对应 CSS 变量
// 比如 buttonPrimaryBg 会转换成 `--wot-button-primary-bg-color`
const themeVars = reactive({
buttonPrimaryBgColor: '#07c160',
buttonPrimaryColor: '#07c160'
})
return {
themeVars
}
}
}
```
### 在 TypeScript 中使用
在 TypeScript 中定义 `themeVars` 时,建议使用 **wot-design-uni** 提供的 **ConfigProviderThemeVars** 类型,可以提供完善的类型提示:
```ts
import type { ConfigProviderThemeVars } from 'wot-design-uni';
const themeVars: ConfigProviderThemeVars = {
colorTheme: 'red'
}
```
:::tip
注意:ConfigProvider 仅影响它的子组件的样式,不影响全局 root 节点。
:::
## 全局共享
> 需要配合虚拟根组件([uni-ku-root](https://github.com/uni-ku/root)) 来做全局共享
### 安装
::: code-group
```bash [npm]
npm i -D @uni-ku/root
```
```bash [yarn]
yarn add -D @uni-ku/root
```
```bash [pnpm]
pnpm add -D @uni-ku/root
```
:::
### 引入
* CLI项目: 直接编辑 根目录下的 vite.config.(js|ts)
* HBuilderX项目: 需要在根目录下 创建 vite.config.(js|ts)
```ts
// vite.config.(js|ts)
import { defineConfig } from 'vite'
import UniKuRoot from '@uni-ku/root'
import Uni from '@dcloudio/vite-plugin-uni'
export default defineConfig({
plugins: [
// ...plugins
UniKuRoot(),
Uni()
]
})
```
:::tip
若存在改变 pages.json 的插件,需要将 UniKuRoot 放置其后
:::
### 使用
1. 创建根组件并处理全局配置组件
* CLI项目: 在 **src** 目录下创建下 App.ku.vue
* HBuilderX项目: 在 **根** 目录下创建 App.ku.vue
:::tip
在 App.ku.vue 中标签 `` 代表指定视图存放位置
:::
```vue
Hello AppKuVue
```
2. 编写控制主题组合式函数
```ts
// src/composables/useTheme.ts
import type { ConfigProviderThemeVars } from 'wot-design-uni'
import { ref } from 'vue'
const theme = ref<'light' | 'dark'>()
const themeVars = ref()
export function useTheme(vars?: ConfigProviderThemeVars) {
vars && (themeVars.value = vars)
function toggleTheme(mode?: 'light' | 'dark') {
theme.value = mode || (theme.value === 'light' ? 'dark' : 'light')
}
return {
theme,
themeVars,
toggleTheme,
}
}
```
3. 在任意视图文件中使用切换主题模式
```vue
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------- | ------------------------------------------------ | ------ | -------------- | ------ | -------- |
| theme | 主题风格,设置为 `dark` 来开启深色模式,全局生效 | string | `dark`/`light` | - | - |
| theme-vars | 自定义主题变量 | `ConfigProviderThemeVars` | - | - | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | ---------------- |
| custom-class | 根节点样式 | 1.3.9 |
| custom-style | 根节点样式 | 1.3.9 |
---
---
url: 'https://wot-design-uni.cn/component/count-down.md'
---
# CountDown 倒计时0.1.58
用于实时展示倒计时数值,支持毫秒精度。
## 基础用法
`time` 属性表示倒计时总时长,单位为毫秒。
```html
```
```ts
const time = ref(30 * 60 * 60 * 1000)
```
## 自定义格式
`format` 属性表示倒计时格式,支持自定义。
```html
```
```ts
const format = ref('DD 天 HH 时 mm 分 ss 秒')
const time = ref(30 * 60 * 60 * 1000)
```
## 毫秒级渲染
`millisecond` 属性表示是否开启毫秒级渲染,默认关闭。
```html
```
```ts
const time = ref(30 * 60 * 60 * 1000)
```
## 自定义样式
通过插槽自定义倒计时的样式,`timeData` 对象格式见下方表格。
```html
{{ current.hours }}
:
{{ current.minutes }}
:
{{ current.seconds }}
```
```ts
const time = ref(30 * 60 * 60 * 1000)
```
```css
.custom-count-down {
display: inline-block;
width: 22px;
color: #fff;
font-size: 12px;
text-align: center;
background-color: #f0883a;
border-radius: 2px;
}
.custom-count-down-colon {
display: inline-block;
margin: 0 4px;
color: #f0883a;
}
```
## 手动控制
通过 `start` 方法开始倒计时,通过 `pause` 方法暂停倒计时,通过 `reset` 方法重置倒计时。
```html
```
```ts
const { show: showToast } = useToast()
const countDown = ref(null)
const start = () => {
countDown.value.start()
}
const pause = () => {
countDown.value.pause()
}
const reset = () => {
countDown.value.reset()
}
const onFinish = () => showToast('倒计时结束')
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----------- | -------------------- | ------- | ------ | ---------- | -------- |
| time | 倒计时时长,单位毫秒 | Number | — | 0 | 0.1.58 |
| millisecond | 是否开启毫秒级渲染 | Boolean | — | false | 0.1.58 |
| auto-start | 是否自动开始倒计时 | Boolean | — | true | 0.1.58 |
| format | 倒计时格式化字符串 | String | — | `HH:mm:ss` | 0.1.58 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | --------------------- | -------- |
| finish | 倒计时结束时触发 | — | 0.1.58 |
| change | 倒计时变化时触发 | current: TimeData | 0.1.58 |
## Methods
| 方法名 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | --------------------- | -------- |
| start | 开始倒计时 | — | 0.1.58 |
| pause | 暂停倒计时 | — | 0.1.58 |
| reset | 重置倒计时,若 `auto-start` 为 `true`,重设后会自动开始倒计时 | — | 0.1.58 |
## Slots
| 名称 | 说明 | 最低版本 |
| ---- | -------- | -------- |
| — | 默认插槽 | 0.1.58 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
### format 格式
| 格式 | 说明 |
| ---- | ------------ |
| DD | 天数 |
| HH | 小时 |
| mm | 分钟 |
| ss | 秒数 |
| S | 毫秒(1 位) |
| SS | 毫秒(2 位) |
| SSS | 毫秒(3 位) |
### timeData 对象
| 属性 | 说明 | 类型 | 默认值 |
| ------------ | ---- | ------ | ------ |
| days | 天 | number | - |
| hours | 小时 | number | - |
| minutes | 分钟 | number | - |
| seconds | 秒 | number | - |
| milliseconds | 毫秒 | number | - |
---
---
url: 'https://wot-design-uni.cn/component/count-to.md'
---
# CountTo 数字滚动1.3.8
数字滚动组件。
## 基本用法
设置 `endVal` 属性,表示最终值。
设置 `startVal` 属性,表示起始值。
设置 `duration` 属性,表示从起始值到结束值数字变动的时间。
设置 `autoplay` 属性,表示是否自动播放。
设置 `decimals` 属性,表示保留的小数位数。
设置 `decimal` 属性,表示小数点符号。
设置 `prefix` 属性,表示数字前缀。
设置 `suffix` 属性,表示数字后缀。
设置 `fontSize` 属性,表示字体大小。
设置 `color` 属性,表示文本颜色。
```vue
```
## 设置主题
通过type参数设置文本主题,我们提供了五类属性:primary error success warning default-默认。
```html
```
## 手动控制
通过 `start` 方法开始倒计时,通过 `pause` 方法暂停倒计时,通过 `reset` 方法重置倒计时。
```html
```
```ts
import type { CountToInstance } from '@/uni_modules/wot-design-uni/components/wd-count-to/types'
const countTo = ref()
const start = () => {
countTo.value!.start()
}
const pause = () => {
countTo.value!.pause()
}
const reset = () => {
countTo.value!.reset()
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| --------- | ------------------------------ | ------- | ------------------------------------------- | ------- | -------- |
| fontSize | 字体大小 | number | 16 | default | 1.3.8 |
| color | 文本颜色 | string | - | '' | 1.3.8 |
| type | 主题类型 | string | 'primary' / 'error' / 'warning' / 'success' | default | 1.3.9 |
| startVal | 起始值 | number | - | 0 | 1.3.8 |
| endVal | 最终值 | number | - | 2024 | 1.3.8 |
| duration | 从起始值到结束值数字变动的时间 | number | - | 3000 | 1.3.8 |
| autoplay | 是否自动播放 | boolean | - | true | 1.3.8 |
| decimals | 保留的小数位数 | number | (需大于等于 0) | 0 | 1.3.8 |
| decimal | 小数点符号 | string | - | '.' | 1.3.8 |
| separator | 三位三位的隔开效果 | string | - | ',' | 1.3.8 |
| prefix | 前缀 | string | - | - | 1.3.8 |
| suffix | 后缀 | string | - | - | 1.3.8 |
| useEasing | 是否具有连贯性 | boolean | - | true | 1.3.8 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------------- | ---- | -------- |
| finish | 动画完成时触发 | — | 1.3.8 |
| mounted | 组件加载完成时时触发 | - | 1.3.8 |
## Methods
| 方法名 | 说明 | 参数 | 最低版本 |
| ------ | ----------------------------------------------------------- | ---- | -------- |
| start | 开始动画 | — | 1.3.8 |
| pause | 暂停动画 | — | 1.3.8 |
| reset | 重置动画,若 `auto-start` 为 `true`,重设后会自动开始倒计时 | — | 1.3.8 |
## Slots
| 名称 | 说明 | 最低版本 |
| ------- | -------- | -------- |
| default | 默认插槽 | 1.3.8 |
| prefix | 前缀插槽 | 1.3.8 |
| suffix | 后缀插槽 | 1.3.8 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | 1.3.8 |
| custom-style | 根节点样式 | 1.3.8 |
---
---
url: 'https://wot-design-uni.cn/component/curtain.md'
---
# Curtain 幕帘
一般用于公告类的图片弹窗。
## 基本用法
通过 `v-model` 属性设置显示隐藏,必填项。
`src` 为幕帘图片地址(只支持在线地址),值为 `string` 类型,必填项。
`to` 为幕帘点击访问链接,值为 `string` 类型,非必填项。
```html
展示幕帘
```
```typescript
const value = ref(false)
const img = ref('https://img20.360buyimg.com/da/jfs/t1/141592/25/8861/261559/5f68d8c1E33ed78ab/698ad655bfcfbaed.png')
const link = ref('/pages/index/index')
function handleClick() {
value.value = true
}
```
## 设置幕帘图片宽高
设置 `width`,默认高度为图片原始比例与传入`width`计算所得, 必填项。
```html
展示幕帘
```
```typescript
const value = ref(false)
const img = ref('https://img20.360buyimg.com/da/jfs/t1/141592/25/8861/261559/5f68d8c1E33ed78ab/698ad655bfcfbaed.png')
const link = ref('/pages/index/index')
function handleClick() {
value.value = true
}
```
## 修改关闭按钮位置
设置 `close-position`,默认为 'inset',可选值 'top', 'bottom', 'top-left', 'top-right', 'bottom-left', 'bottom-right'。
```html
展示幕帘
```
```typescript
const value = ref(false)
const img = ref('https://img20.360buyimg.com/da/jfs/t1/141592/25/8861/261559/5f68d8c1E33ed78ab/698ad655bfcfbaed.png')
const link = ref('/pages/index/index')
function handleClick() {
value.value = true
}
```
## 设置遮罩点击可关闭幕帘
设置 `close-on-click-modal` 属性,值为`boolean` 类型,非必填项。
```html
展示幕帘
```
```typescript
const value = ref(false)
const img = ref('https://img20.360buyimg.com/da/jfs/t1/141592/25/8861/261559/5f68d8c1E33ed78ab/698ad655bfcfbaed.png')
const link = ref('/pages/index/index')
function handleClick() {
value.value = true
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|----------------------|----------------------------------------------------|---------|--------------------------------------------------------------------------|--------|----------|
| value | 绑定值,展示/关闭幕帘(已废弃,请使用 modelValue) | boolean | - | - | - |
| modelValue | 绑定值,展示/关闭幕帘 | boolean | - | - | 1.7.0 |
| src | 幕帘图片地址,必须使用网络地址 | string | - | - | - |
| width | 幕帘图片宽度,默认单位 px | number | - | - | - |
| to | 幕帘图片点击链接 | string | - | - | - |
| close-position | 关闭按钮位置 | string | inset / top / bottom / top-left / top-right / bottom-left / bottom-right | inset | - |
| close-on-click-modal | 点击遮罩是否关闭 | boolean | - | false | - |
| hide-when-close | 是否当关闭时将弹出层隐藏(display: none) | boolean | - | true | - |
| z-index | 设置层级 | number | - | 10 | 1.4.0 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| ----------- | ------------------------------------------------------------------------------ | ---- | -------- |
| click | 点击幕帘时触发 | - | - |
| close | 弹出层关闭时触发 | - | - |
| click-modal | 点击遮罩时触发 | - | - |
| beforeenter | 进入前触发 | - | - |
| enter | 进入时触发 | - | - |
| afterenter | 进入后触发 | - | - |
| beforeleave | 离开前触发 | - | - |
| leave | 离开时触发 | - | - |
| afterleave | 离开后触发 | - | - |
| load | 图片加载完成事件 | - | - |
| error | 图片加载失败事件,若图片加载失败,则不会展示幕帘组件,即使设置 `value` 为 true | - | - |
## Slots
| name | 说明 | 最低版本 |
| ----- | ------------ | ---------------- |
| close | 关闭按钮插槽 | 1.5.0 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------------ | -------------- | ---------------- |
| custom-class | 根节点样式 | - |
| custom-close-class | 关闭按钮样式类 | 1.5.0 |
| custom-close-style | 关闭按钮样式 | 1.5.0 |
---
---
url: 'https://wot-design-uni.cn/component/datetime-picker.md'
---
# DatetimePicker 日期时间选择器
为 DatetimePickerView 组件的封装,在其内部构建好日期时间选项。
## 基本用法
`v-model` 设置绑定值,默认为 `datetime` 类型,展示年月日时分,绑定值为 `时间戳` 类型,如果为 `time` 类型,绑定值为字符串。label 可以不传。可以通过 `label-width` 设置标题宽度,默认为 `33%`。
```html
```
```typescript
const value = ref(Date.now())
function handleConfirm({ value }) {
console.log(new Date(value))
}
```
## 设置默认值
`default-value` 设置默认日期,打开面板时面板自动选到默认日期。
```html
```
```typescript
const value = ref('')
const defaultValue = ref(Date.now())
function handleConfirm({ value }) {
console.log(new Date(value))
}
```
## date 类型
`date` 类型只展示年月日。
```html
```
```typescript
const value = ref(Date.now())
```
## year-month 类型
`year-month` 类型只展示年月。
```html
```
```typescript
const value = ref(Date.now())
```
## year 类型
`year` 类型只展示年。
```html
```
```typescript
const value = ref(Date.now())
```
## time 类型
`time` 类型只展示时分,绑定值为 `HH:mm` 格式。
```html
```
```typescript
const value4 = ref('09:20')
```
## 修改展示格式
给 `display-format` 属性传入一个函数,接收所有选中项数组,返回展示的文本内容。
```html
```
```typescript
const value = ref(Date.now())
const displayFormat = (items) => {
return `${items[0].label}年${items[1].label}月${items[2].label}日 ${items[3].label}:${items[4].label}`
}
```
## 修改弹出层内部格式
给 `formatter` 属性传入一个函数,接收 `type` 和 `value` 值,返回展示的文本内容。`type` 有 `year`、`month`、`date`、`hour`、`minute` 类型,`value` 为 `number` 类型。
使用自定义`formatter`会关闭内置的默认`display-format`函数。
```html
```
```typescript
const value = ref(Date.now())
const formatter = (type, value) => {
switch (type) {
case 'year':
return value + '年'
case 'month':
return value + '月'
case 'date':
return value + '日'
case 'hour':
return value + '时'
case 'minute':
return value + '分'
default:
return value
}
}
```
## 过滤选项
给 `filter` 属性传入一个函数,接收 `type` 和 `values` 值,返回列的选项列表。`type` 有 `year`、`month`、`date`、`hour`、`minute` 类型,`values` 为 number数组。
```html
```
```typescript
const value = ref(Date.now())
const filter = (type, values) => {
if (type === 'minute') {
return values.filter((value) => value % 5 === 0)
}
return values
}
```
## 选择器大小
通过设置 `size` 修改选择器大小,将 `size` 设置为 'large' 时字号为 16px。
```html
```
## 必填属性
设置 `required` 属性开启表单必填。
```html
```
## 错误状态
设置 `error` 属性,选择器的值显示为红色。
```html
```
## 值靠右展示
设置 `align-right` 属性,选择器的值靠右展示。
```html
```
## 确定前校验
设置 `before-confirm` 函数,在用户点击`确定`按钮时,会执行 `before-confirm` 函数,并传入 `value`(time 类型为字符串,其他为时间戳,当picker为区间选择时,`value`为数组) 、 `resolve` 和 `picker` 参数,可以对 `value` 进行校验,并通过 `resolve` 函数告知组件是否确定通过,`resolve` 接受1个 boolean 值,`resolve(true)` 表示选项通过,`resolve(false)` 表示选项不通过,不通过时不会关闭 `picker`弹窗。可以通过 `picker` 参数直接设置 `loading` 等属性。
```html
```
```typescript
const value = ref('')
const toast = useToast()
const beforeConfirm = (value, resolve, picker) => {
picker.setLoading(true)
setTimeout(() => {
picker.setLoading(false)
if (value > Date.now()) {
resolve(false)
toast.error('不能选择大于今天的日期')
} else {
resolve(true)
}
}, 2000)
}
function handleConfirm({ value }) {
console.log(new Date(value))
}
```
## 唤起项插槽
设置默认插槽修改唤起picker组件的形式。
```html
插槽唤起
```
## 时间范围选择
当 `v-model` 为 `Array` 类型, 时间范围选择开启。
```html
```
```typescript
const value = ref(['', Date.now()])
function handleConfirm({ value }) {
console.log(new Date(value))
}
```
## 范围选择tab标签展示格式
给 `display-format-tab-label` 属性传入一个函数,接收所有选中项数组,返回展示的文本内容。
```html
```
```typescript
const value = ref(['', Date.now()])
function handleConfirm({ value }) {
console.log(new Date(value))
}
const displayFormatTabLabel = (items) => {
return `${items[0].label}年${items[1].label}月${items[2].label}日 ${items[3].label}:${items[4].label}`
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|---------|
| v-model | 选中项,当 type 为 time 时,类型为字符串;当 type 为 Array 时,类型为范围选择;否则为 `timestamp` | `string` / `timestamp` / `array` | - | - |
| default-value | 默认日期,类型保持与 value 一致,打开面板时面板自动选到默认日期 | `string` / `timestamp` / `array` | - | - | - |
| type | 选择器类型 | string | date / year-month / time / year | datetime | - |
| loading | 加载中 | boolean | - | false | - |
| loading-color | 加载的颜色,只能使用十六进制的色值写法,且不能使用缩写 | string | - | #4D80F0 | - |
| columns-height | picker内部滚筒高 | number | - | 231 | - |
| title | 弹出层标题 | string | - | - | - |
| cancel-button-text | 取消按钮文案 | string | - | 取消 | - |
| confirm-button-text | 确认按钮文案 | string | - | 完成 | - |
| label | 选择器左侧文案,label可以不传 | string | - | - | - |
| placeholder | 选择器占位符 | string | - | 请选择 | - |
| disabled | 禁用 | boolean | - | false | - |
| readonly | 只读 | boolean | - | false | - |
| display-format | 自定义展示文案的格式化函数,返回一个字符串 | function | - | - | - |
| formatter | 自定义弹出层选项文案的格式化函数,返回一个字符串 | function | - | - | - |
| filter | 自定义过滤选项的函数,返回列的选项数组 | function | - | - | - |
| display-format-tab-label | 在区域选择模式下,自定义展示tab标签文案的格式化函数,返回一个字符串 | function | - | - | - |
| minDate | 最小日期,13 位的时间戳 | `timestamp` | - | 当前日期 - 10年 | - |
| maxDate | 最大日期,13 位的时间戳 | `timestamp` | - | 当前日期 + 10年 | - |
| minHour | 最小小时,time类型时生效 | number | - | 0 | - |
| maxHour | 最大小时,time类型时生效 | number | - | 23 | - |
| minMinute | 最小分钟,time类型时生效 | number | - | 0 | - |
| maxMinute | 最大分钟,time类型时生效 | number | - | 59 | - |
| required | 表单属性,必填 | boolean | - | false | - |
| size | 设置选择器大小 | string | large | - | - |
| label-width | 设置左侧标题宽度 | string | - | 33% | - |
| error | 是否为错误状态,错误状态时右侧内容为红色 | boolean | - | false | - |
| align-right | 选择器的值靠右展示 | boolean | - | false | - |
| use-label-slot | label 使用插槽,已废弃,直接使用label插槽即可 | boolean | - | false | - |
| use-default-slot | 使用默认插槽,已废弃,直接使用默认插槽即可 | boolean | - | false | - |
| before-confirm | 确定前校验函数,接收 (value, resolve, picker) 参数,通过 resolve 继续执行 picker,resolve 接收1个boolean参数 | function | - | - | - |
| close-on-click-modal | 点击遮罩是否关闭 | boolean | - | true | - |
| z-index | 弹窗层级 | number | - | 15 | - |
| safe-area-inset-bottom | 弹出面板是否设置底部安全距离(iphone X 类型的机型) | boolean | - | true | - |
| ellipsis | 是否超出隐藏 | boolean | - | false | - |
| prop | 表单域 `model` 字段名,在使用表单校验功能的情况下,该属性是必填的 | string | - | - | - |
| rules | 表单验证规则,结合`wd-form`组件使用 | `FormItemRule []` | - | `[]` | - |
| immediate-change | 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。 | boolean | - | false | 1.2.25 |
### FormItemRule 数据结构
| 键名 | 说明 | 类型 |
| --- | --- | --- |
| required | 是否为必选字段 | `boolean` |
| message | 错误提示文案 | `string` |
| validator | 通过函数进行校验,可以返回一个 `Promise` 来进行异步校验 | `(value, rule) => boolean \| Promise` |
| pattern | 通过正则表达式进行校验,正则无法匹配表示校验不通过 | `RegExp` |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|--------|------|-----|---------|
| confirm | 点击右侧按钮触发 | `{ value }`, value 为当前选中日期的时间戳,'time' 类型则为字符串 | - |
| cancel | 点击左侧按钮触发 | - | - |
| toggle | 在区域选择模式下,tab标签切换时触发 | 切换到当前picker选中的值 | - |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
|--------|------|-----|---------|
| open | 打开picker弹框 | - |
| close | 关闭picker弹框 | - |
## Slot
| name | 说明 | 最低版本 |
|------|-----|---------|
| default | 使用默认插槽 | - |
| label | 左侧标题插槽 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-view-class | pickerView 外部自定义样式 | - |
| custom-cell-class | pickerView cell 外部自定义样式 | 1.3.8 |
| custom-label-class | label 外部自定义样式 | - |
| custom-value-class | value 外部自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/datetime-picker-view.md'
---
# DatetimePickerView 日期时间选择器视图
为 Picker 组件的封装,在其内部构建好日期时间选项。
## 基本用法
`v-model` 设置绑定值,默认为 `datetime` 类型,展示年月日时分,绑定值为 `时间戳` 类型,如果为 `time` 类型,绑定值为字符串。
```html
```
```typescript
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
const value = ref(Date.now())
function onChange1({ value }) {
toast.show('选择了' + new Date(value))
}
```
## date 类型
`date` 类型只展示年月日。
```html
```
```typescript
const value = ref(Date.now())
```
## year-month 类型
`year-month` 类型只展示年月。
```html
```
```typescript
const value = ref(Date.now())
```
## year 类型
`year` 类型只展示年月。
```html
```
```typescript
const value = ref(Date.now())
```
## time 类型
`time` 类型只展示时分,绑定值为 `HH:mm` 格式。
```html
```
```typescript
const value4 = ref('11:12')
```
## 修改内部格式
给 `formatter` 属性传入一个函数,接收 `type` 和 `value` 值,返回展示的文本内容。`type` 有 `year`、`month`、`date`、`hour`、`minute` 类型,`value` 为 `number` 类型。
使用自定义`formatter`会关闭内置的默认`display-format`函数。
```html
```
```typescript
const value = ref(Date.now())
const formatter = (type, value) => {
switch (type) {
case 'year':
return value + '年'
case 'month':
return value + '月'
case 'date':
return value + '日'
case 'hour':
return value + '时'
case 'minute':
return value + '分'
default:
return value
}
}
```
## 过滤选项
给 `filter` 属性传入一个函数,接收 `type` 和 `values` 值,返回列的选项列表。`type` 有 `year`、`month`、`date`、`hour`、`minute` 类型,`values` 为 number数组。
```html
```
```typescript
const value = ref(Date.now())
const filter = (type, values) => {
if (type === 'minute') {
return values.filter((value) => value % 5 === 0)
}
return values
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|---------|
| v-model | 选中项,当 type 为 time 时,类型为字符串,否则为 `timestamp` | `string` / `timestamp` | - | - |
| type | 选择器类型 | string | date / year-month / time / year | datetime | - |
| loading | 加载中 | boolean | - | false | - |
| loading-color | 加载的颜色,只能使用十六进制的色值写法,且不能使用缩写 | string | - | #4D80F0 | - |
| columns-height | picker内部滚筒高 | number | - | 231 | - |
| formatter | 自定义弹出层选项文案的格式化函数,返回一个字符串 | function | - | - | - |
| filter | 自定义过滤选项的函数,返回列的选项数组 | function | - | - | - |
| minDate | 最小日期,13 位的时间戳 | `timestamp` | - | 当前日期 - 10年 | - |
| maxDate | 最大日期,13 位的时间戳 | `timestamp` | - | 当前日期 + 10年 | - |
| minHour | 最小小时,time类型时生效 | number | - | 0 | - |
| maxHour | 最大小时,time类型时生效 | number | - | 23 | - |
| minMinute | 最小分钟,time类型时生效 | number | - | 0 | - |
| maxMinute | 最大分钟,time类型时生效 | number | - | 59 | - |
| immediate-change | 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。 | boolean | - | false | 1.2.25 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|--------|------|-----|---------|
| change | 切换选项时触发 | 选中的值 `{ value }`,value 为当前选中日期的时间戳,'time' 类型则为字符串 | - |
| pickstart | 当滚动选择开始时候触发事件 | - | - | - |
| pickend | 当滚动选择结束时候触发事件 | - | - | - |
---
---
url: 'https://wot-design-uni.cn/component/divider.md'
---
# Divider 分割线
用于将内容分隔为多个区域。
:::danger 请注意
`hairline`、`dashed`、`content-position`、`vertical`属性为 1.5.0 版本新增支持,在此之前仅支持默认插槽显示文本和自定义`color`。
:::
## 基本使用
默认渲染一条水平分割线。
```html
```
## 展示文本
使用默认插槽在分割线中间插入内容。
```html
展示文本
```
## 自定义渲染内容
使用默认插槽在分割线中间插入自定义内容。
```html
```
## 内容位置
通过 `content-position` 指定内容所在位置。
```html
中间
左侧
右侧
```
## 虚线
添加 `dashed` 属性使分割线渲染为虚线。
```html
虚线分割
```
## 自定义颜色
设置 `color` 属性。
```html
自定义颜色
```
## 垂直分割线
添加 `vertical` 属性使分割线渲染为垂直分割线。
```html
文本
文本
文本
文本
文本
```
```css
.content {
padding: 12rpx 15px;
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------------- | ------------------------------ | ------- | ----------------------- | -------- | ---------------- |
| color | 自定义颜色,支持所有颜色的写法 | string | - | - | - |
| hairline | 是否显示边框 | boolean | - | true | 1.5.0 |
| dashed | 是否显示为虚线 | boolean | - | false | 1.5.0 |
| content-position | 内容位置 | string | `left`/`center`/`right` | `center` | 1.5.0 |
| vertical | 是否显示为垂直分割线 | boolean | - | false | 1.5.0 |
## Slot
| name | 说明 | 最低版本 |
| ------- | ---- | -------- |
| default | 内容,仅在 `vertical` 为 `false` 时生效 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/drop-menu.md'
---
# DropMenu 下拉菜单
向下或向上弹出的菜单列表。
## 基础用法
基础用法需要绑定 `v-model` 值以及 `options` 属性。
`options` 属性是一个一维对象数组,数组项的数据结构为:label(选项文本),value(选项值),tip(选项说明)。
因为`uni-app`组件无法监听点击自己以外的地方,为了在点击页面其他地方时,可以自动关闭 `dropmenu` ,建议使用组件库的 `useQueue` hook(会关闭所有 dropmenu、popover、toast、swipeAction、fab),在页面的根元素上监听点击事件的冒泡。
:::warning
如果存在用户手动点击 `dropmenu` 以外某个地方如按钮弹出 `dropmenu` 的场景,则需要在点击的元素(在这里上按钮)加上 @click 阻止事件冒泡到根元素上,避免触发 `closeOutside` 把要手动打开的 `dropmenu` 关闭了。
:::
```html
```
```typescript
import { useQueue } from '@/uni_modules/wot-design-uni'
const { closeOutside } = useQueue()
const value1 = ref(0)
const value2 = ref(0)
const option1 = ref[]>([
{ label: '全部商品', value: 0 },
{ label: '新款商品', value: 1 },
{ label: '活动商品', value: 2 }
])
const option2 = ref[]>([
{ label: '综合', value: 0 },
{ label: '销量', value: 1 },
{ label: '上架时间', value: 2 }
])
function handleChange1({ value }) {
console.log(value)
}
function handleChange2({ value }) {
console.log(value)
}
```
## 自定义菜单内容
通过插槽 `default` 可以自定义 `DropMenuItem` 的内容,此时需要使用实例上的 `close` 方法手动控制菜单的关闭。
可以通过 `title` 设置菜单标题。
> 这时候不要传入 options 和 value
```html
主要按钮
```
```typescript
const dropMenu = ref()
const slider = ref() // slider 1.2.25支持
const value = ref(0)
const sliderValue = ref(30)
const option = ref[]>([
{ label: '全部商品', value: 0 },
{ label: '新款商品', value: 1 },
{ label: '活动商品', value: 2 }
])
function handleChange({ value }) {
console.log(value)
}
function confirm() {
dropMenu.value.close()
}
function handleOpened() {
slider.value?.initSlider()
}
```
## 自定义菜单选项
自己通过 flex 布局做自定义筛选展示。
```html
```
## 自定义菜单图标1.3.7
可以通过 `icon` 设置菜单右侧图标,等同于 `` 的 `name` 属性。通过 `icon-size` 设置图标尺寸,等同于 `` 的 `size` 属性。
```html
```
## 异步打开/关闭1.3.7
设置 `before-toggle` 函数,在下拉菜单打开或者关闭前执行特定的逻辑,实现状态变更前校验、异步打开/关闭的目的,`before-toggle`接收 { status: 当前操作类型:true 打开下拉菜单,false 关闭下拉菜单, resolve },可以对操作进行校验,并通过 resolve 函数告知组件是否确定通过,resolve 接受 1 个 boolean 值,resolve(true) 表示选项通过,resolve(false) 表示选项不通过,不通过时不会执行关闭或展开操作。
:::warning 提示
`before-toggle` 函数无法阻止其他`drop-menu`或其他`drop-menu-item`的展开/关闭操作,仅限当前`drop-menu-item`的展开/关闭操作。
:::
```html
```
```typescript
import { useMessage } from '@/uni_modules/wot-design-uni'
const messageBox = useMessage()
const value = ref(0)
const option = ref[]>([
{ label: '全部商品', value: 0 },
{ label: '新款商品', value: 1 },
{ label: '活动商品', value: 2 }
])
// 通过对话框确认是否打开/关闭下拉菜单
const handleBeforeToggle: DropMenuItemBeforeToggle = ({ status, resolve }) => {
messageBox
.confirm({
title: `异步${status ? '打开' : '关闭'}`,
msg: `确定要${status ? '打开' : '关闭'}下拉菜单吗?`
})
.then(() => {
resolve(true)
})
.catch(() => {
resolve(false)
})
}
```
## 向上展开
将 `direction` 属性值设置为 `up`,菜单即可向上展开
```html
```
## 禁用菜单
```html
```
## DropMenu Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| -------------------- | ------------------------------------ | ------- | --------- | ------ | -------- |
| direction | 菜单展开方向,可选值为`up` 或 `down` | string | up / down | down | - |
| modal | 是否展示蒙层 | boolean | - | true | - |
| close-on-click-modal | 是否点击蒙层时关闭 | boolean | - | true | - |
| duration | 菜单展开收起动画时间,单位 ms | number | - | 200 | - |
## DropMenuItem Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | ---------------------------------------------------------------------- | ----------------------------- | ------ | ---------- | -------- |
| v-model | 当前选中项对应选中的 value | string / number | - | - | - |
| disabled | 禁用菜单 | boolean | - | false | - |
| options | 列表数据,对应数据结构 `[{text: '标题', value: '0', tip: '提示文字'}]` | array | - | - | - |
| icon-name | 选中的图标名称(可选名称在 wd-icon 组件中) | string | - | check | - |
| title | 菜单标题 | string | - | - | - |
| icon | 菜单图标 | string | - | arrow-down | - |
| icon-size | 菜单图标尺寸 | string | - | 14px | \_ |
| before-toggle | 下拉菜单打开或者关闭前触发,`reslove(true)`时继续执行打开或关闭操作 | function({ status, resolve }) | - | - | 1.3.7 |
| value-key | 选项对象中,value 对应的 key | string | - | value | - |
| label-key | 选项对象中,展示的文本对应的 key | string | - | label | - |
| tip-key | 选项对象中,选项说明对应的 key | string | - | tip | - |
## DropdownItem Events
| 方法名 | 说明 | 参数 | 最低版本 |
| ------ | ---------------- | ----------------------------------------------------------------------------- | -------- |
| change | 绑定值变化时触发 | event.detail = { value, selectedItem }, value 为选中值,selectedItem 为选中项 | - |
| close | 关闭菜单 | - | - |
| open | 展开菜单 | - | - |
| closed | 菜单完全关闭 | - | - |
| opened | 菜单展开完成 | - | - |
## DropdownItem Methods
通过设置 `ref` 可以获取到 DropdownItem 实例并调用实例方法
| 方法名 | 说明 | 参数 | 返回值 | 最低版本 |
| ------ | -------- | ---- | ------ | -------- |
| close | 关闭菜单 | - | - | - |
| open | 展开菜单 | - | - | - |
## DropMenu Slot
| name | 说明 | 最低版本 |
| ------- | -------- | -------- |
| default | 菜单内容 | - |
## DropMenuItem Slot
| name | 说明 | 最低版本 |
| ------- | ------------------ | -------- |
| default | 菜单自定义内部内容 | - |
## DropMenu 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ------------------- | -------- |
| custom-class | DropMenu 根节点样式 | - |
## DropMenuItem 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------------ | --------------------------- | ---------------- |
| custom-class | DropMenuItem 根节点样式 | - |
| custom-title | DropMenuItem 左侧文字样式 | - |
| custom-icon | DropMenuItem 右侧 icon 样式 | - |
| custom-popup-class | 自定义下拉菜单 popup 样式类 | 1.5.0 |
| custom-popup-style | 自定义下拉菜单 popup 样式 | 1.5.0 |
---
---
url: 'https://wot-design-uni.cn/component/fab.md'
---
# Fab 悬浮按钮
悬浮动作按钮组件,按下可显示一组动作按钮。
:::warning
因为`uni-app`组件无法监听点击自己以外的地方,为了在点击页面其他地方时,可以自动关闭 `fab` ,建议使用组件库的 `useQueue` hook(会关闭所有 dropmenu、popover、toast、swipeAction、fab),在页面的根元素上监听点击事件的冒泡。
如果存在用户手动点击 `fab` 以外某个地方如按钮滑出 `fab` 的场景,则需要在点击的元素(在这里是按钮)加上 `click.stop=""` 阻止事件冒泡到根元素上,避免触发 `closeOutside`把要手动打开的 `fab` 关闭了。
:::
## 基本用法
通过`type`设置悬浮按钮触发器的类型,`position`设置悬浮按钮触发器的位置,`direction`设置动作按钮的打开方向,`disabled`设置悬浮按钮是否禁用。
```html
```
```ts
import { useToast } from '@/uni_modules/wot-design-uni'
const { show: showToast } = useToast()
const type = ref<'primary' | 'success' | 'info' | 'warning' | 'error' | 'default'>('primary')
const position = ref<'left-top'
| 'right-top'
| 'left-bottom'
| 'right-bottom'
| 'left-center'
| 'right-center'
| 'top-center'
| 'bottom-center'>('left-bottom')
const direction = ref<'top' | 'right' | 'bottom' | 'left'>('top')
const disabled = ref(false)
```
```scss
:deep(.custom-button) {
min-width: auto !important;
box-sizing: border-box;
width: 32px !important;
height: 32px !important;
border-radius: 16px !important;
margin: 8rpx;
}
:deep(.custom-radio) {
height: 32px !important;
line-height: 32px !important;
}
```
## 动作菜单展开/收起
通过`v-model:active`控制动作按钮菜单的展开/收起
```html
```
```ts
const active = ref(false)
```
## 可拖动按钮
```html
```
:::warning
开启拖动后`direction`属性将失效,会根据拖动后的位置自动计算弹出方向。拖动完成后按钮将会自动吸边。
:::
## 自定义触发器
通过`trigger`插槽自定义触发器,`expandable`控制点击触发器是否展开/收起动作按钮菜单。
```html
分享给朋友
```
```ts
const handleClick = () => {
console.log('点击了')
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| -------------- | ----------------------------------------------------- | ------------ |-------------------------------------------------------------------------------------------------------------------------------------------| ---------------------------------------------- | ---------------- |
| v-model:active | 是否激活 | boolean | - | false | 0.1.57 |
| type | 类型 | FabType | 'primary' | 'success' | 'info' | 'warning' | 'error' | 'default' | 'primary' | 0.1.57 |
| position | 悬浮按钮位置 | FabPosition | 'left-top' | 'right-top' | 'left-bottom' | 'right-bottom' | left-center | right-center | top-center | bottom-center | 'right-bottom' | 0.1.57 |
| draggable | 按钮能否拖动 | boolean | | false | 1.2.19 |
| direction | 悬浮按钮菜单弹出方向 | FabDirection | 'top' | 'right' | 'bottom' | 'left' | 'top' | 0.1.57 |
| disabled | 是否禁用 | boolean | - | false | 0.1.57 |
| inactiveIcon | 悬浮按钮未展开时的图标 | string | - | 'add' | 0.1.57 |
| activeIcon | 悬浮按钮展开时的图标 | string | - | 'close' | 0.1.57 |
| zIndex | 自定义悬浮按钮层级 | number | - | 99 | 0.1.57 |
| gap | 自定义悬浮按钮与可视区域边缘的间距 | FabGap | - | { top: 16, left: 16, right: 16, bottom: 16 } | 1.2.26 |
| customStyle | 自定义样式 | string | - | '' | 0.1.57 |
| expandable | 用于控制点击时是否展开菜单,设置为 false 时触发 click | boolean | - | true | 1.3.11 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------------------------------------- | ---- | ---------------- |
| click | expandable 设置为 false 时,点击悬浮按钮触发 | — | 1.3.11 |
## Slot
| name | 说明 | 最低版本 |
| ------- | -------------------------------------------------------------- | ---------------- |
| trigger | 触发器插槽,用于自定义点击按钮,使用此插槽时组件不会抛出 click | 1.3.11 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ------------ | -------- |
| custom-class | 自定义样式类 | 0.1.57 |
---
---
url: 'https://wot-design-uni.cn/component/floating-panel.md'
---
# FloatingPanel 浮动面板
浮动在页面底部的面板,用户可以通过上下拖动秒板来浏览内容,从而在不离开当前视图的情况下访问更多信息,常用于地图导航。
## 基本用法
FloatingPanel 的初始高度会取 `anchors[0]` 的值,也就是 `100px`,用户可以拖动来展开面板,使高度达到 `60%` 的屏幕高度。
```html
```
```js
const data = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
```
## 自定义锚点
你可以通过 `anchors` 属性来设置 FloatingPanel 的锚点位置,并通过 `v-model:height` 来控制当前面板的显示高度。
比如,使面板的高度在 `100px`、`40%` 屏幕高度和 `70%` 屏幕高度三个位置停靠:
```html
自定义锚点 {{ anchors }} - {{ height.toFixed(0) }}
```
```js
const height = ref(0)
const windowHeight = ref(0)
const anchors = ref([])
const handleHeightChange = ({ height }: { height: number }) => {
console.log(height)
}
onLoad(() => {
windowHeight.value = uni.getSystemInfoSync().windowHeight
anchors.value = [100, Math.round(0.4 * windowHeight.value), Math.round(0.7 * windowHeight.value)]
height.value = anchors.value[1]
})
```
```css
.inner-content {
padding: 1rem;
text-align: center;
font-size: 16px;
font-weight: bold;
}
```
## 仅头部拖拽
默认情况下,FloatingPanel 的头部区域和内容区域都可以被拖拽,你可以通过 `contentDraggable` 属性来禁用内容区域的拖拽。
```html
内容区不可以拖拽
```
```css
.inner-content {
padding: 1rem;
text-align: center;
font-size: 16px;
font-weight: bold;
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------------- | ------------------------------------------- | -------- | ------ | --------------------------- | ---------------- |
| v-model:height | 当前面板的显示高度 | number | - | `0` | 1.3.12 |
| anchors | 设置自定义锚点, 单位 `px` | number\[] | - | `[100, windowHeight * 0.6]` | 1.3.12 |
| duration | 动画时长,单位`ms`,设置为 `0` 可以禁用动画 | number | - | `300` | 1.3.12 |
| contentDraggable | 允许拖拽内容容器 | boolean | - | `true` | 1.3.12 |
| safeAreaInsetBottom | 是否开启底部安全区适配 | boolean | - | `false` | 1.3.12 |
| showScrollbar | 是否开启滚动条 | boolean | - | `true` | 1.3.12 |
## Slots
| 名称 | 说明 | 最低版本 |
| ---- | -------- | ---------------- |
| — | 默认插槽 | 1.3.12 |
## Events
| 方法名 | 说明 | 参数 | 最低版本 |
| ------------ | -------------------------------- | -------------------- | ---------------- |
| heightChange | 面板显示高度改变且结束拖动后触发 | `{ height: number }` | 1.3.12 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ------------ | ---------------- |
| custom-class | 根节点样式类 | 1.3.12 |
| custom-style | 根节点样式 | 1.3.12 |
---
---
url: 'https://wot-design-uni.cn/component/form.md'
---
# Form 表单
用于数据录入、校验,支持输入框、单选框、复选框、文件上传等类型,常见的 form 表单为`单元格`形式的展示,即左侧为表单的标题描述,右侧为表单的输入。
其中,`Input 输入框`、`Textarea 输入框`、`Picker 选择器`、 `Calendar 日历选择器`、 `ColPicker 多列选择器`、`SelectPicker 单复选选择器`、`Cell 单元格` 和 `DatetimePicker 日期时间选择器`具有`单元格`的展示形式,同时也支持 `prop` 和 `rules` 属性,我们称之为`表单项组件`,而 `InputNumber 计数器` 、 `Switch 开关` 和 `Upload 上传` 等组件则需要使用 `Cell 单元格` 进行包裹使用。
结合 `wd-form` 组件,可以实现对以上组件的规则校验。
> 对于表单组件,建议对 wd-cell-group 开启 border 属性,这样每条 cell 就会有边框线隔离开,这样表单的划分比较清晰。
## 基础用法
在表单中,使用 `model` 指定表单数据对象,每个 `表单项组件` 代表一个表单项,使用 `prop` 指定表单项字段 ,使用 `rules` 属性定义校验规则。
::: details 查看基础用法示例
::: code-group
```html [vue]
```
```typescript [typescript]
```
```css [css]
.footer {
padding: 12px;
}
```
:::
## 校验错误提示方式
1. `message`:默认为输入框下方用文字进行提示
2. `toast`:以"toast"提示的方式弹出错误信息,每次只弹出最前面的那个表单域的错误信息
3. `none`:不会进行任何提示
::: details 错误提示方式
::: code-group
```html [vue]
```
```typescript [typescript]
```
:::
## 校验规则
本章节演示四种自定义校验及提示规则:`正则校验`、`函数校验`、`函数返回错误提示`和`异步函数校验`。
::: details 查看校验规则示例
::: code-group
```html [vue]
```
```typescript [typescript]
```
```css [css]
.footer {
padding: 12px;
}
```
:::
## 动态表单
表单项动态增减。
::: details 查看动态表单示例
::: code-group
```html [vue]
```
```typescript [typescript]
```
```css [css]
.footer {
text-align: left;
:deep(.wd-button) {
&:not(:last-child) {
margin-right: 12px;
}
}
}
```
:::
## 指定字段校验
`validate` 方法可以传入一个 `prop` 参数,指定校验的字段,可以实现在表单组件的`blur`、`change`等事件触发时对该字段的校验。`prop` 参数也可以是一个字段数组,指定多个字段进行校验。
::: details 查看指定字段校验示例
::: code-group
```html [vue]
```
```typescript [typescript]
```
```css [css]
.footer {
padding: 12px;
}
```
:::
## 不对隐藏组件做校验 1.6.0
在表单中,如果某个组件使用 `v-if` 隐藏,则不会对该组件进行校验。
## 复杂表单
结合`Input 输入框`、`Textarea 输入框`、`Picker 选择器`、 `Calendar 日历选择器`、 `ColPicker 多列选择器`、`SelectPicker 单复选选择器`、`Cell 单元格` 和 `DatetimePicker 日期时间选择器`实现一个复杂表单。
::: details 查看复杂表单示例
::: code-group
```html [vue]
满
减
已阅读并同意
《巴拉巴拉吧啦协议》
```
```typescript [typescript]
```
```css [css]
.inline-txt {
display: inline-block;
font-size: 14px;
margin: 0 8px;
color: rgba(0, 0, 0, 0.45);
vertical-align: middle;
}
:deep(.group) {
margin-top: 12px;
}
.tip {
margin: 10px 15px 21px;
color: #999;
font-size: 12px;
}
.footer {
padding: 0 25px 21px;
}
:deep(.label-class) {
color: #999 !important;
font-size: 12px !important;
}
```
:::
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | ----------------------------------------------------------------------------------- | --------------------- | ------ | --------- | ---------------- |
| model | 表单数据对象 | `Record` | - | - | 0.2.0 |
| rules | 表单验证规则 | `FormRules` | - | - | 0.2.0 |
| resetOnChange | 表单数据变化时是否重置表单提示信息(设置为 false 时需要开发者单独对变更项进行校验) | `boolean` | - | `true` | 0.2.16 |
| errorType | 校验错误提示方式 | `toast/message/none` | - | `message` | 1.3.8 |
### FormItemRule 数据结构
| 键名 | 说明 | 类型 |
| --------- | ------------------------------------------------------- | ------------------------------------- |
| required | 是否为必选字段 | `boolean` |
| message | 错误提示文案 | `string` |
| validator | 通过函数进行校验,可以返回一个 `Promise` 来进行异步校验 | `(value, rule) => boolean \| Promise` |
| pattern | 通过正则表达式进行校验,正则无法匹配表示校验不通过 | `RegExp` |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ------------------------------------------------------------------------------ | --------------- | -------- |
| validate | 验证表单,支持传入一个 prop 来验证单个表单项,不传入 prop 时,会验证所有表单项,1.6.0 版本起支持传入数组 | `prop?: string\|string[]` | 0.2.0 |
| reset | 重置校验结果 | - | 0.2.0 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | 0.2.0 |
---
---
url: 'https://wot-design-uni.cn/component/gap.md'
---
# Gap 间隔槽
一般用于页面布局时代替margin或者padding;或者充当(底部)占位元素。
## 基本使用
通过 `height` 属性设置标题 `background` 属性设置背景色。
```html
```
## 自定义背景色
```html
```
## 自定义高度
```html
```
## 底部安全区
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----------------|---------|---------|------------|-------------| -------- |
| height | 高度 | `string`/`number` | - | 15 | - |
| bgColor | 背景颜色 | string | | transparent | - |
| safeAreaBottom | 开启底部安全区 | boolean | true/false | false | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| -------------------- | ---------------- | -------- |
| custom-class | 自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/grid.md'
---
# Grid 宫格
宫格可以在水平方向上把页面分隔成等宽度的区块,用于展示内容或进行页面导航。
## 基础用法
基础用法需要绑定 `icon` 值以及 `text` 属性。默认显示一行。
`icon` 为 `wd-icon` 标签中的 `name` 属性。
```html
```
## 自定义列数
`column` 可以用来自定义宫格列数。未定义 `column` 属性时,默认显示为一行,定义该属性后,组件内部根据 `column` 属性自行划分行数。
```html
```
## 自定义背景颜色
`bg-color` 可以用来自定义宫格背景颜色。
```html
```
## 开启边框
`border` 可以用来开启边框线展示。
```html
```
## 内容插槽
通过默认插槽可以自定义 `GridItem` 的内容。
使用默认插槽过程中, 开启 `GridItem` 上的属性 `use-slot`。
```html
```
```scss
.img {
width: 100%;
height: 90px;
}
```
## 单个插槽
通过插槽 `icon` 可以插入 `GridItem` 中的图标位。通过 `use-icon-slot` 开启图标插槽。
通过插槽 `text` 可以插入 `GridItem` 中的文字位。通过 `use-text-slot` 开启文字插槽。
注意:
1. 使用单个插槽或者自定义样式时,需要用户使用 `custom-class` 控制 每一个 `GridItem` 的高度,保证每一个 `GridItem` 的高度相同且符合用户预期。
2. 使用 icon 插槽时,如果插槽大小超过`icon-size`设置的值时,需要调整`icon-size`属性使其大小等于插槽尺寸。
```html
自定义文字插槽
```
```scss
.slot-img {
height: 36px;
width: 36px;
border-radius: 4px;
}
.text {
color: #ffb300;
margin-top: 8px;
}
```
## 自定义样式
通过设置 `custom-class` 可以自定义 `GridItem` 的样式。
可以在 `custom-class` 样式属性中设定 `GridItem` 的宽、高度等属性。
注意:
* 设定宽高这类可能会影响布局的属性时,请将 `custom-class` 作用到当前 `Grid` 下的所有 `GridItem` 以确保所有 `GridItem` 样式相同。
* **如果想改变 `GridItem` 高度, 不要直接设置 `Grid` 的高度, 修改单独的** `GridItem`。
* **如果想改变 `icon` 大小设置 `icon-size` 属性, `custom-icon` 不能改变当前 icon 宽高。**
```html
```
```scss
:deep(.custom-item) {
height: 80px !important;
color: #e2231a;
padding-left: 20px;
text-align: left !important;
}
```
## 正方形格子
通过 `square` 属性开启正方形格属性。此时显示每一个 `GridItem` 都为正方形。
注意: 使用 `square` 不要自定义 `GridItem` 的高度样式。
```html
```
## 设定格间隙
通过 `gutter` 属性设置格子之间的距离。
```html
```
## 页面导航
通过 `clickable` 属性开启可点击状态, 可以绑定 `click` 事件。
通过 `link-type` 属性设置页面跳转方式。
通过 `url` 属性设置跳转链接, 通过 `url` 属性设置 URL 跳转链接。
```html
```
## 提示信息
设置 `is-dot` 属性后,会在图标右上角展示一个小红点。
设置 `type` | `max` | `value` , 使用方式同组件 `wd-badge` 中的同名属性。
```html
```
## Grid Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----------- | ------------------------------ | ------- | ------ | ---------------------------- | ---------------- |
| column | 列数 | number | - | - | - |
| border | 是否显示边框 | boolean | - | false | - |
| gutter | 格子之间的间距,默认单位为`px` | number | - | - | - |
| square | 是否将格子固定为正方形 | boolean | - | false | - |
| clickable | 是否开启格子点击反馈 | boolean | - | false | - |
| bg-color | 背景颜色设置 | string | - | #ffffff | - |
| hover-class | 指定grid-item按下去的样式类 | string | - | wd-grid-item\_\_content--hover | 1.9.0 |
## GridItem Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | ------------------------------------------------------------------------------------------------------------------------- | -------------- | ------------------------------------------- | ------ | -------- |
| text | 文字 value | string | - | - | - |
| icon | 图标名称,可选值见 `wd-icon` 组件 | string | - | - | - |
| is-dot | 是否显示图标右上角小红点 | boolean | - | false | - |
| type | 图标右上角显示的 `badge` 类型 | string | primary / success / warning / danger / info | - | - |
| value | 图标右上角 `badge` 显示值 | string, number | - | - | - |
| max | 图标右上角 `badge` 最大值,超过最大值会显示 '{max}+',要求 value 是 Number 类型 | number | - | - | - |
| url | 点击后跳转的链接地址 | string | - | - | - |
| link-type | 页面跳转方式, 参考[微信小程序路由文档](https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/route.html) | string | navigateTo / switchTab / reLaunch | - | - |
| use-slot | 是否开启 `GridItem` 内容插槽 | boolean | - | false | - |
| use-icon-slot | 是否开启 `GridItem` icon 插槽 | boolean | - | false | - |
| use-text-slot | 是否开启 `GridItem` text 内容插槽 | boolean | - | false | - |
| icon-size | 图标大小 | string | - | 26px | - |
| badge-props | 自定义徽标的属性,传入的对象会被透传给 [Badge 组件的 props](/component/badge#attributes) | BadgeProps | - | - | 0.1.50 |
## GridItem Events
| 方法名 | 说明 | 参数 | 返回值 | 最低版本 |
| --------- | -------------- | ----- | ------ | -------- |
| itemclick | 点击(跳转)事件 | event | - | - |
## Grid Slot
| name | 说明 | 最低版本 |
| ------- | -------- | -------- |
| default | 宫格内容 | - |
## GridItem Slot
| name | 说明 | 最低版本 |
| ------- | ------------------------------ | -------- |
| default | 宫格中每一格的默认显示全部内容 | - |
| icon | 宫格中图标位内容 | - |
| text | 宫格中文本位内容 | - |
## Grid 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | --------------- | -------- |
| custom-class | Grid 根节点样式 | - |
## GridItem 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ----------------------- | -------- |
| custom-class | GridItem 根节点样式 | - |
| custom-text | GridItem 下方文字样式 | - |
| custom-icon | GridItem 上方 icon 样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/icon.md'
---
# Icon 图标 0.1.27 更新
基于字体的图标集。
## 基本用法
通过 `name` 属性设置使用哪个图标。
```html
```
## 图标颜色
设置 `color` 属性。
```html
```
## 图标大小
设置 `size` 属性。
```html
```
## 自定义图标
如果需要在现有 Icon 的基础上使用更多图标,可以引入第三方 iconfont 对应的字体文件和 CSS 文件,之后就可以在 Icon 组件中直接使用。
```css
/* 路径 src/iconfont/index.css */
@font-face {
font-family: "fish";
src: url('//at.alicdn.com/t/c/font_4626013_vwpx4thmin.woff2?t=1721314121733') format('woff2'),
url('//at.alicdn.com/t/c/font_4626013_vwpx4thmin.woff?t=1721314121733') format('woff'),
url('//at.alicdn.com/t/c/font_4626013_vwpx4thmin.ttf?t=1721314121733') format('truetype');
}
.fish {
font-family: "fish" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.fish-kehuishouwu:before {
content: "\e627";
}
```
```html
```
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|---------|
| name | 使用的图标名字,可以使用链接图片 | string | - | - | - |
| color | 图标的颜色 | string | - | inherit | - |
| size | 图标的字体大小 | string | - | inherit | - |
| classPrefix | 类名前缀,用于使用自定义图标 | string | - | 'wd-icon' | 0.1.27 |
| custom-style | 根节点样式 | string | - | - | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/img.md'
---
# Img 图片
增强版的 img 标签,提供多种图片填充模式,支持图片懒加载、加载完成、加载失败。
## 基本用法
基础用法与原生 image 标签一致,可以设置 `src` 、 `width` 、`height` 等原生属性。
原生属性,参考[uni-app image 官方文档](https://uniapp.dcloud.net.cn/component/image.html#image)。
此处需要注意的是 src 属性:
使用 `相对路径`,需要注意 `src` 需要以组件存放位置相对图片位置为相对路径。
使用 `文件导入` ,需要注意的是微信小程序 image 标签路径接受二进制数据以及 base64 编码。单独使用 import 图片路径无法访问。
```html
```
```typescript
// import { joy } from '../images/joy'
const joy = 'data:image/jpeg;base64,...' // 图片文件base64
```
## 插槽
使用`loading` `error`插槽设置在图片加载时、加载失败后的展示内容
```vue
加载失败
```
## 填充模式
通过 `mode` 属性可以设置图片填充模式,可选值见下方表格。
mode 为小程序原生属性,参考[微信小程序 image 官方文档](https://developers.weixin.qq.com/miniprogram/dev/component/image.html)。
```html
```
## 圆形设置
通过 `round` 属性可以设置以圆形展示。
```html
```
## 可预览
通过设置`enable-preview`属性可以支持点击预览,底层调用 uni.previewImage 来实现预览效果
```html
```
也可以传入 `preview-src` 属性来预览另外的图片
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------------------- | -------------------------------------------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | ---------------- |
| src | 图片链接 | string | - | - | - |
| width | 宽度,默认单位为 px | number / string | - | - | - |
| height | 高度,默认单位为 px | number / string | - | - | - |
| mode | 填充模式 | ImageMode | 'top left' / 'top right' / 'bottom left' / 'bottom right' / 'right' / 'left' / 'center' / 'bottom' / 'top' / 'heightFix' / 'widthFix' / 'aspectFill' / 'aspectFit' / 'scaleToFill' | 'scaleToFill' | - |
| round | 是否显示为圆形 | boolean | - | false | - |
| radius | 圆角大小,默认单位为 px | number / string | - | - | - |
| enable-preview | 是否支持点击预览 | boolean | - | false | 1.2.11 |
| show-menu-by-longpress | 开启长按图片显示识别小程序码菜单,仅微信小程序支持 | boolean | - | false | 1.3.11 |
| preview-src | 预览图片链接 | string | - | - | 1.8.0 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------------- | --------------------------- | -------- |
| click | 点击事件 | (event: MouseEvent) => void | - |
| load | 当图片载入完毕时触发 | `{height, width}` | - |
| error | 当错误发生时触发 | `{errMsg}` | - |
## Slots
| 名称 | 说明 | 最低版本 |
| ------- | ------------------ | -------- |
| loading | 图片加载时展示 | 1.2.21 |
| error | 图片加载失败后展示 | 1.2.21 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | -------------------- | -------- |
| custom-class | 根节点样式 | - |
| custom-image | image 外部自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/img-cropper.md'
---
# ImgCropper 图片裁剪
图片剪裁组件,用于图片裁剪,支持拖拽、缩放、旋转等操作。
## 基本用法
图片裁剪组件需要绑定 `v-model` 来控制组件的显示与隐藏,通过属性 `img-src` 控制展示的图片资源。进入组件后,可以对图片进行拖拽、双指缩放、旋转等操作,监听 `confirm` 事件获取裁剪结果。
> *注意:建议在新页面中使用图片裁剪组件,保持 `show` 为 true,完成裁剪后返回上一页。*
```html
点击上传头像
```
```typescript
const src = ref('')
const imgSrc = ref('')
const show = ref(false)
function upload() {
uni.chooseImage({
count: 1,
success: (res) => {
const tempFilePaths = res.tempFilePaths[0]
src.value = tempFilePaths
show.value = true
}
})
}
function handleConfirm(event) {
const { tempFilePath } = event
imgSrc.value = tempFilePath
}
function imgLoaderror(res) {
console.log('加载失败', res)
}
function imgLoaded(res) {
console.log('加载成功', res)
}
function handleCancel(event) {
console.log('取消', event)
}
```
## 自定义裁剪比例
通过 `aspect-ratio` 属性可以设置裁剪框的宽高比,格式为 `width:height`。
### 3:2 适合拍照
```html
```
### 16:9 影视比例
```html
```
### 16:10 这么阔 很有型
16:10 的显示比例非常适合展示风景照片或者电影海报等宽屏内容。
```html
```
## 裁剪后上传
结合 `useUpload` 可以实现裁剪完成后自动上传图片的功能。
```html
```
```typescript
import { ref } from 'vue'
import { useUpload, useToast } from '@/uni_modules/wot-design-uni'
import { type UploadFileItem } from '@/uni_modules/wot-design-uni/components/wd-upload/types'
const { startUpload, UPLOAD_STATUS } = useUpload()
const { show: showToast } = useToast()
const show = ref(false)
const src = ref('')
const imgSrc = ref('')
async function handleConfirmUpload(event) {
const { tempFilePath } = event
// 构建上传文件对象
const file: UploadFileItem = {
url: tempFilePath,
status: UPLOAD_STATUS.PENDING,
percent: 0,
uid: new Date().getTime()
}
try {
// 开始上传
await startUpload(file, {
action: 'https://your-upload-url',
onSuccess() {
imgSrc.value = tempFilePath
showToast({
msg: '上传成功'
})
},
onError() {
showToast({
msg: '上传失败'
})
},
onProgress(res) {
console.log('上传进度:', res.progress)
}
})
} catch (error) {
console.error('上传失败:', error)
}
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值| 最低版本 |
|-----|------|-----|-------|-------|--------|
| v-model | 打开图片裁剪组件 | boolean | - | false | - |
| img-src | 图片资源链接 | string | - | - | - |
| img-width | 截屏预览图片的初始宽度; `1、设置宽度不设置高度,按照宽度等比缩放;2、如果都不设置,预览时图片大小会根据裁剪框大小进行等比缩放,进行锁边处理;`; string 类型只支持 % 单位,number 类型时单位为 px | number / string | - | - | - |
| img-height | 截屏预览图片的初始高度; `1、设置高度不设置宽度,按照高度等比缩放;2、如果都不设置,预览时图片大小会根据裁剪框大小进行等比缩放,进行锁边处理;`; string 类型只支持 % 单位,number 类型时单位为 px | number / string | - | - | - |
| disabled-rotate | 禁止图片旋转 | boolean | - | false | - |
| export-scale | 设置导出图片尺寸 | number | - | 2 | - |
| max-scale | 最大缩放倍数 | number | - | 3 | - |
| cancel-button-text | 取消按钮文案 | string | - | 取消 | - |
| confirm-button-text | 确认按钮文案 | string | - | 完成 | - |
| quality | 生成的图片质量 [wx.canvasToTempFilePath属性介绍](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasToTempFilePath.html#%E5%8F%82%E6%95%B0) | number | 0/1 | 1 | - |
| file-type | 目标文件的类型,[wx.canvasToTempFilePath属性介绍](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasToTempFilePath.html#%E5%8F%82%E6%95%B0) | string | - | png | - |
| aspect-ratio | 裁剪框宽高比,格式为 width:height | string | - | 1:1 | 1.9.0 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|---------|-----|-----|---------|
| confirm | 完成截图时触发 | `{tempFilePath, width, height}` 分别为生成文件的临时路径 (本地路径)、生成图片宽、生成图片高| - |
| cancel | 当取消截图时触发 | - | - |
| imgloaderror | 当图片加载错误时触发 | `{err} `| - |
| imgloaded | 当图片加载完成时触发 | `{res}` | - |
## Methods
对外暴露函数
| 事件名称 | 说明 | 参数 | 最低版本 |
|--------|------|-----|---------|
| setRoate | 设置图片旋转角度 | deg (设置的旋转角度)| - |
| resetImg | 重置图片的角度、缩放、位置 | - | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/index-bar.md'
---
# IndexBar 索引栏 1.2.21
用于列表的索引分类显示和快速定位。
## 基本用法
使用一个固定高度的元素包裹`wd-index-bar`组件,组件的宽高会和包裹元素相同。
将`wd-index-anchor`作为子组件使用,会根据 anchor 组件的`index`属性生成锚点以及侧边栏。
```vue
```
## 更新列表数据
列表数据如果需要更新,可以参考此示例
::: details 查看更新列表数据示例
::: code-group
```html [vue]
```
```typescript [typescript]
```
```css [css]
.wraper {
height: calc(100vh - var(--window-top));
height: calc(100vh - var(--window-top) - constant(safe-area-inset-bottom));
height: calc(100vh - var(--window-top) - env(safe-area-inset-bottom));
}
```
:::
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------ | ------------ | ------- | ------ | ------ | -------- |
| sticky | 索引是否吸顶 | boolean | - | false | - |
## IndexAnchor Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----- | -------- | ---------------- | ------ | ------ | -------- |
| index | 索引字符 | string / number | - | - | - |
## IndexAnchor Slots
| name | 说明 | 参数 | 最低版本 |
| ------- | ---------- | ---- | -------- |
| default | 自定义内容 | - | - |
## IndexAnchor 外部样式类
| 类名 | 说明 | 最低版本 |
| ----------- | ------------ | -------- |
| customStyle | 自定义样式 | - |
| customClass | 自定义样式类 | - |
---
---
url: 'https://wot-design-uni.cn/component/input.md'
---
# Input 输入框
用户可以在文本框里输入内容。
::: tip 提示
`0.2.0`版本已将 `Input` 组件的 `textarea 文本域`功能迁移至 [Textarea](/component/textarea)组件,所有API保持一致。
:::
## 基本用法
可以通过 `v-model` 双向绑定输入框的值,通过 `placeholder` 设置占位提示文字。
```typescript
const value = ref('')
function handleChange(event) {
console.log(event)
}
```
```html
```
## 禁用
设置 `disabled` 属性。
```html
```
## 只读
设置 `readonly` 属性。
```html
```
## 清空按钮
设置 `clearable` 属性。
```html
```
## 有值且聚焦时展示清空按钮
设置 `clear-trigger` 属性,可以控制是否聚焦时才展示清空按钮。
:::warning 注意
支付宝小程序暂不支持 `clear-trigger` 属性,且某种情况下清空按钮无法点击,原因参考此[issue](https://github.com/ant-design/ant-design-mini/issues/1255)(希望可以早点解决,所以直接给蚂蚁的组件库提了个issue)。
:::
```html
```
## 点击清除按钮时不自动聚焦
设置`focus-when-clear` 属性,可以控制点击清除按钮时是否自动聚焦。
```html
```
## 密码输入框
设置 `show-password` 属性。
```html
```
## 前后icon
设置前置icon `prefix-icon`,设置后置icon `suffix-icon`,icon 为 [icon](/component/icon) 章节中的图标,如果没有你需要的图标,则使用 `prefix`、`suffix` 插槽进行自定义插入。
```html
```
## 限制字数输入
设置 `maxlength` 属性,如果要显示字数限制,设置 `show-word-limit` 属性。
```html
```
## 设置label标题
设置 `label` 标题,可以和 `cell-group` 组合使用,形成 `cell` 展示类型。可以通过 `label-width` 设置标题宽度,默认为 '33%'。
```html
```
## 必填样式
设置了 `label` 的情况下,设置 `required` 属性,展示必填样式。
```html
```
## 输入框大小
通过设置 `size` 修改输入框大小,将 `size` 设置为 'large' 时字号为 16px。
```html
```
## 错误状态
设置 `error` 属性,输入框的值显示为红色。
```html
```
## 垂直居中
当设置 `label` 标题时,默认为顶部居中,设置 `center` 属性可以使标题和输入框垂直居中。
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | --------------------------------------------------------------- | -------------------------------------- | -------- |
| type | 类型 | string | text / number / digit / idcard / safe-password / nickname / tel | text | - |
| v-model | 绑定值 | string / number | - | - | - |
| placeholder | 占位文本 | string | - | 请输入... | - |
| clearable | 显示清空按钮 | boolean | - | false | - |
| maxlength | 原生属性,最大长度 | number | - | 支付宝小程序无默认值,其余平台默认为-1 | - |
| showPassword | 显示为密码框 | boolean | - | false | - |
| disabled | 原生属性,禁用 | boolean | - | false | - |
| readonly | 只读 | boolean | - | false | - |
| prefixIcon | 前置图标,icon组件中的图标类名 | string | - | - | - |
| suffixIcon | 后置图标,icon组件中的图标类名 | string | - | - | - |
| showWordLimit | 显示字数限制,需要同时设置 maxlength | boolean | - | false | - |
| confirm-type | 设置键盘右下角按钮的文字,仅在type='text'时生效 | string | done / go / next / search / send | done | - |
| confirm-hold | 点击键盘右下角按钮时是否保持键盘不收起 | Boolean | - | false | - |
| always-embed | 微信小程序原生属性,强制 input 处于同层状态,默认 focus 时 input 会切到非同层状态 (仅在 iOS 下生效) | Boolean | - | false | - |
| placeholderStyle | 原生属性,指定 placeholder 的样式,目前仅支持color,font-size和font-weight | string | - | - | - |
| placeholderClass | 原生属性,指定 placeholder 的样式类 | string | - | - | - |
| focus | 原生属性,获取焦点 | boolean | - | false | - |
| cursorSpacing | 原生属性,指定光标与键盘的距离。取 input 距离底部的距离和cursor-spacing指定的距离的最小值作为光标与键盘的距离 | number | - | 0 | - |
| cursor | 原生属性,指定focus时的光标位置 | number | - | -1 | - |
| selectionStart | 原生属性,光标起始位置,自动聚集时有效,需与selection-end搭配使用 | number | - | -1 | - |
| selectionEnd | 原生属性,光标结束位置,自动聚集时有效,需与selection-start搭配使用 | number | - | -1 | - |
| adjustPosition | 原生属性,键盘弹起时,是否自动上推页面 | boolean | - | true | - |
| label | 设置左侧标题 | string | - | - | - |
| size | 设置输入框大小 | string | - | - | - |
| error | 设置输入框错误状态,错误状态时为红色 | boolean | - | false | - |
| center | 当有label属性时,设置标题和输入框垂直居中,默认为顶部居中 | boolean | - | false | - |
| label-width | 设置左侧标题宽度 | string | - | 33% | - |
| required | cell 类型下必填样式 | boolean | - | false | - |
| no-border | 非 cell 类型下是否隐藏下划线 | boolean | - | false | - |
| prop | 表单域 `model` 字段名,在使用表单校验功能的情况下,该属性是必填的 | string | - | - | - |
| rules | 表单验证规则,结合`wd-form`组件使用 | `FormItemRule []` | - | `[]` | - |
| clearTrigger | 显示清除图标的时机,always 表示输入框不为空时展示,focus 表示输入框聚焦且不为空时展示 | `InputClearTrigger` | `focus` / `always` | `always` | 1.3.7 |
| focusWhenClear | 是否在点击清除按钮时聚焦输入框 | boolean | - | true | 1.3.7 |
| ignoreCompositionEvent | 是否忽略组件内对文本合成系统事件的处理。为 false 时将触发 compositionstart、compositionend、compositionupdate 事件,且在文本合成期间会触发 input 事件。 | boolean | - | true | 1.3.11 |
| inputmode | 提供用户在编辑元素或其内容时可能输入的数据类型的提示。 | InputMode | - | text | 1.5.0 |
### InputMode 可选值
> 新增于 uni-app 3.6.16+ inputmode是html规范后期更新的内容。各家小程序还未支持此属性。
在符合条件的高版本webview里,uni-app的web和app-vue平台中可使用本属性,参见[inputmode](https://uniapp.dcloud.net.cn/component/input.html#inputmode)。
| 值 | 说明 |
| ------- | -------------------------------------------------------------------------------------------------------------------- |
| none | 无虚拟键盘。在应用程序或者站点需要实现自己的键盘输入控件时很有用。 |
| text | 使用用户本地区域设置的标准文本输入键盘。 |
| decimal | 小数输入键盘,包含数字和分隔符(通常是“ . ”或者“ , ”),设备可能也可能不显示减号键。 |
| numeric | 数字输入键盘,所需要的就是 0 到 9 的数字,设备可能也可能不显示减号键。 |
| tel | 电话输入键盘,包含 0 到 9 的数字、星号(\*)和井号(#)键。表单输入里面的电话输入通常应该使用 。 |
| search | 为搜索输入优化的虚拟键盘,比如,返回键可能被重新标记为“搜索”,也可能还有其他的优化。 |
| email | 为邮件地址输入优化的虚拟键盘,通常包含"@"符号和其他优化。表单里面的邮件地址输入应该使用 。 |
| url | 为网址输入优化的虚拟键盘,比如,“/”键会更加明显、历史记录访问等。表单里面的网址输入通常应该使用 。 |
## FormItemRule
| 键名 | 说明 | 类型 |
| --------- | ------------------------------------------------------- | ------------------------------------- |
| required | 是否为必选字段 | `boolean` |
| message | 错误提示文案 | `string` |
| validator | 通过函数进行校验,可以返回一个 `Promise` 来进行异步校验 | `(value, rule) => boolean \| Promise` |
| pattern | 通过正则表达式进行校验,正则无法匹配表示校验不通过 | `RegExp` |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------------------- | -------------------------------- | -------------------------------------- | -------- |
| input | 监听输入框input事件 | `{value, cursor, keyCode}` | - |
| focus | 监听输入框focus事件 | `{ value, height }`, height 为键盘高度 | - |
| blur | 监听输入框blur事件 | `{ value }` | - |
| clear | 监听输入框清空按钮事件 | - | - |
| confirm | 点击完成时, 触发 confirm 事件 | `{ value }` | - |
| keyboardheightchange | 键盘高度发生变化的时候触发此事件 | `{ height, duration }` | - |
| clickprefixicon | 点击前置图标时触发 | - | - |
| clicksuffixicon | 点击后置图标时触发 | - | - |
## Slot
| name | 说明 | 最低版本 |
| ------ | ------------ | -------- |
| label | 左侧标题插槽 | - |
| prefix | 前置插槽 | - |
| suffix | 后置插槽 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------------ | -------------------- | -------- |
| custom-class | 根节点样式 | - |
| custom-input-class | input 外部自定义样式 | - |
| custom-label-class | label 外部自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/input-number.md'
---
# InputNumber 计数器
由增加按钮、减少按钮和输入框组成,用于在一定范围内输入、调整数字。
## 基本用法
通过 `v-model` 绑定输入值,可以通过 `change` 事件监听到输入值的变化。
```html
```
```typescript
const value = ref(1)
function handleChange({ value }) {
console.log(value)
}
```
## 设置步长
设置 `step` 步长,即每次value变化的绝对值。
```html
```
## 设置最小最大值
设置 `min` 最小值,`max` 最大值。`min` 默认为1。
```html
```
## 禁用
设置 `disabled` 属性。
```html
```
## 禁用输入框
设置 `disable-input` 属性。
```html
```
## 无输入框
设置 `without-input` ,不展示输入框。
```html
```
## 设置小数精度
设置 `precision` 属性,默认为0。
```html
```
## 严格步数倍数
设置 `step-strictly` 属性,强制输入框输入内容为 `step` 的倍数(当用户输入完成后触发change时,会更正输入框内容)。
```html
```
## 修改输入框宽度
设置 `input-width` 设置宽度,该值接受1个字符串,可以是表示尺寸的任何单位。
```html
```
## 允许空值,设置 placeholder
设置 `allow-null` 属性允许空值,设置 `placeholder` 提示填写。
```html
```
```typescript
const value = ref('')
function handleChange({ value }) {
console.log(value)
}
```
## 异步变更
通过 `before-change` 可以在输入值变化前进行校验和拦截。
```html
```
```typescript
import { ref } from 'vue'
import { useToast } from '@/uni_modules/wot-design-uni'
import type { InputNumberBeforeChange } from '@/uni_modules/wot-design-uni/components/wd-input-number/types'
const { loading, close } = useToast()
const value = ref(1)
const beforeChange: InputNumberBeforeChange = (value) => {
loading({ msg: `正在更新到${value}...` })
return new Promise((resolve) => {
setTimeout(() => {
close()
resolve(true)
}, 500)
})
}
```
## 长按加减
设置 `long-press` 属性,允许长按加减。
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|--------|
| v-model | 绑定值 | number / string | - | - | - |
| min | 最小值 | number | - | 1 | - |
| max | 最大值 | number | - | Infinity | - |
| step | 步数 | number | - | 1 | - |
| step-strictly | 严格值为步数的倍数 | boolean | - | false | - |
| precision | 小数精度 | number | - | 0 | - |
| disabled | 禁用 | boolean | - | false | - |
| without-input | 不显示输入框 | boolean | - | false | - |
| input-width | 输入框宽度 | string | - | 36px | - |
| allow-null | 是否允许输入的值为空,设置为 `true` 后允许传入空字符串 | boolean | - | false | - |
| placeholder | 占位文本 | string | - | - | - |
| disable-input | 禁用输入框 | boolean | - | false | 0.2.14 |
| disable-plus | 禁用增加按钮 | boolean | - | false | 0.2.14 |
| disable-minus | 禁用减少按钮 | boolean | - | false | 0.2.14 |
| adjustPosition | 原生属性,键盘弹起时,是否自动上推页面 | boolean | - | true | 1.3.11 |
| before-change | 输入框值改变前触发,返回 false 会阻止输入框值改变,支持返回 `Promise` | `(value: number \| string) => boolean \| Promise` | - | - | 1.6.0 |
| long-press | 是否允许长按进行加减 | boolean | - | false | 1.8.0 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|---------|-----|-----|---------|
| change | 值修改事件 | ` { value }` | - |
| focus | 输入框获取焦点事件 | ` { value, height }` | - |
| blur | 输入框失去焦点事件 | ` { value }` | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/keyboard.md'
---
# Keyboard 虚拟键盘 1.3.10
虚拟数字键盘,用于输入数字、密码、身份证或车牌号等场景。
## 基本用法
可以通过 `v-model:visible` 控制键盘是否展示。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 带右侧栏的键盘
将 `mode` 属性设置为 `custom` 来展示键盘的右侧栏,常用于输入金额的场景。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 身份证键盘
通过 `extra-key` 属性可以设置左下角按键内容,比如需要输入身份证号时,可以将 `extra-key` 设置为 `X`。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 车牌号键盘
将 `mode` 属性设置为 `car` 来展示车牌号键盘,常用于输入车牌号的场景。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 带标题的键盘
通过 `title` 属性可以设置键盘标题。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 使用 slot 自定义标题
```html
自定义标题
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 多个额外按键
当 `mode` 为 `custom` 时,支持以数组的形式配置两个 `extra-key`。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 随机数字键盘
通过 `random-key-order` 属性可以随机排序数字键盘,常用于安全等级较高的场景。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 双向绑定
可以通过 `v-model` 绑定键盘当前输入值,并通过 `maxlength` 属性来限制输入长度。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
const value1 = ref('')
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 展示蒙层遮罩
`hideOnClickOutside`控制键盘弹窗是否有遮罩,通过`modal`控制遮罩是否为透明。
::: tip 提示
当前`modal`仅控制遮罩是否为透明,`hideOnClickOutside`控制弹窗是否有遮罩,当存在遮罩时,点击遮罩就可以关闭键盘,但是键盘展开时必须点击遮罩关闭当前键盘后才可以再点击别的按钮。也可以关闭`hideOnClickOutside`,手动控制键盘是否展示来实现点击外部时收起键盘,这样更灵活。
:::
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
const value1 = ref('')
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------------- | ------------------------ | --------------------- | -------------------------- | ---------- | ---------------- |
| v-model:visible | 是否展开 | `boolean` | - | `false` | 1.3.10 |
| v-model | 绑定的值 | `string` | - | - | 1.3.10 |
| title | 标题 | `string` | - | - | 1.3.10 |
| mode | 键盘模式 | `string` | `default`, `car`, `custom` | `default` | 1.3.10 |
| zIndex | 层级 | `number` | - | `100` | 1.3.10 |
| maxlength | 最大长度 | `number` | - | `Infinity` | 1.3.10 |
| showDeleteKey | 是否显示删除键 | `boolean` | - | `true` | 1.3.10 |
| randomKeyOrder | 是否随机键盘按键顺序 | `boolean` | - | `false` | 1.3.10 |
| closeText | 确认按钮文本 | `string` | - | - | 1.3.10 |
| deleteText | 删除按钮文本 | `string` | - | - | 1.3.10 |
| closeButtonLoading | 关闭按钮是否显示加载状态 | `boolean` | - | `false` | 1.3.10 |
| modal | 是否显示蒙层遮罩 | `boolean` | - | `false` | 1.3.10 |
| hideOnClickOutside | 是否在点击外部时收起键盘 | `boolean` | - | `true` | 1.3.10 |
| lockScroll | 是否锁定滚动 | `boolean` | - | `true` | 1.3.10 |
| safeAreaInsetBottom | 是否在底部安全区域内 | `boolean` | - | `true` | 1.3.10 |
| extraKey | 额外按键 | `string` / `string[]` | - | - | 1.3.10 |
## Slot
| name | 说明 | 类型 | 最低版本 |
| ----- | ---- | ---- | -------- |
| title | 标题 | - | 1.2.12 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ------------------------------ | ----------- | -------- |
| input | 点击按键时触发 | key: string | - |
| delete | 点击删除键时触发 | - | - |
| close | 点击关闭按钮或非键盘区域时触发 | - | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ------------ | -------- |
| custom-class | 根节点样式类 | 1.3.10 |
| custom-style | 根节点样式 | 1.3.10 |
---
---
url: 'https://wot-design-uni.cn/component/layout.md'
---
# Layout 布局
用于快速进行布局。
## 基本用法
`Layout` 组件提供了 `24列` 栅格,通过在 `wd-col` 上设置 `span` 属性,通过计算当前内容所占百分比进行分栏。
注意: 分栏布局仅提供布局,即元素宽度,内部样式用户可根据需要通过 `custom-class` 或 `修改内部标签` 来自行定义样式。
```html
span: 24
span: 12
span: 12
span: 8
span: 8
span: 8
span: 6
span: 6
span: 6
span: 6
```
```scss
.bg-dark1,
.bg-dark,
.bg-light{
border-radius: 4px;
min-height: 30px;
text-align: center;
line-height: 30px;
font-size: 12px;
margin-bottom: 10px;
color: rgba(0, 0, 0, 0.45);
}
.bg-dark1 {
background: #99a9bf;
color: #fff;
}
.bg-dark {
background: #d3dce6;
}
.bg-light {
background: #e5e9f2;
}
```
## 分栏偏移
`offset` 属性可以设置分栏的偏移量,计算方式以及偏移大小与 `span` 相同。
```html
span: 4
span: 8 offset: 4
span: 8 offset: 4
span: 8 offset: 4
```
## 分栏间隔
通过 `gutter` 属性可以设置列元素之间的间距,默认间距为 0
```html
span: 8
span: 8
span: 8
```
## Row Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|--------|
| gutter | 列元素之间的间距(单位为px) | number | - | 0 | - |
## Col Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|---------|
| span | 列元素宽度 | number | - | 24 | - |
| offset | 列元素偏移距离 | number | - | 0 | - |
## Row 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | Row 根节点样式 | - |
## Col 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | Col 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/loading.md'
---
# Loading 加载指示器
加载动画,用于表示加载中的过渡状态。
## 基本用法
基本用法,适用于按钮加载状态和页面轻提示。
```html
```
## 修改指示器类型
通过 `type` 修改指示器的类型,可选值为 'outline',适用于通用模块加载。
```html
```
## 修改颜色
通过 `color` 属性修改指示器的颜色。比如修改为白色,同时设置背景为黑色。
:::warning
小程序中没有 svg 标签,所以是先通过js生成svg标签,再转换成 base64,因此设置指示器颜色必须为16进制色值,且不接受色值缩写。
:::
```html
```
```scss
:deep(.loading-black) {
background: rgba(0, 0, 0, 0.7);
padding: 10px;
border-radius: 4px;
}
```
## 修改指示器大小
通过 `size` 属性设置指示器的大小,默认为大小 '32px',属性支持 `number`/`string` 类型。
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|---------|
| type | 加载指示器类型 | string | outline | ring | - |
| color | 设置加载指示器颜色 | string | - | #4D80F0 | - |
| size | 设置加载指示器大小 | number / string | - | 32px | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/loadmore.md'
---
# loadmore 加载更多
用于在列表底部展示加载状态。
## 基本用法
在需要进行加载的列表的底部引入该组件即可。当滑动到列表底部时,通过设置`state`展示不同的文案。
```html
```
```scss
:deep(.loadmore) {
background-color: #f4f4f4;
margin: 20px 0;
}
```
## 自定义文案
通过设置`loading-text`、`finished-text`、`error-text`配合`state`展示不同状态时的文案
```html
```
## 点击继续加载
当 state 为 error 时,点击文案,组件会触发`loadmore`事件
```html
```
## 应用实现
配合`onReachBottom`事件实现滚动到底部加载更多
```html
这是一条测试{{ index + 1 }}
```
```typescript
import { onLoad, onReachBottom } from '@dcloudio/uni-app'
const state = ref('loading')
const num = ref(0)
const max = ref(60)
onReachBottom(() => {
if (num.value === 45) {
state.value = 'error'
} else if (num.value < max.value) {
loadmore()
} else if (num.value === max.value) {
state.value = 'finished'
}
})
onLoad(() => {
loadmore()
})
function loadmore() {
setTimeout(() => {
num.value = num.value + 15
state.value = 'loading'
}, 200)
}
```
```scss
.list-item {
position: relative;
display: flex;
padding: 10px 15px;
background: #fff;
color: #464646;
}
.list-item:after {
position: absolute;
display: block;
content: '';
height: 1px;
left: 0;
width: 100%;
bottom: 0;
background: #eee;
transform: scaleY(0.5);
}
image {
display: block;
width: 120px;
height: 78px;
margin-right: 15px;
}
.right {
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1;
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | -------------------- | ------ | ---------------------- | ------------------ | -------- |
| state | 加载状态 | string | loading/finished/error | - | - |
| loading-text | 加载提示文案 | string | - | 加载中... | - |
| finished-text | 全部加载完的提示文案 | string | - | 没有更多了 | - |
| error-text | 加载失败的提示文案 | string | - | 加载失败,点击重试 | - |
| loading-props | loading加载组件属性| `Partial` | - | - | 1.3.14 |
#### LoadingProps
参见[LoadingProps](/component/loading.html#attributes)
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | --------------------------------------------------- | ---- | -------- |
| reload | state 为 error 加载错误时,点击文案触发 reload 事件 | - | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/message-box.md'
---
# MessageBox 弹框
弹出对话框,常用于消息提示、消息确认等,支持函数调用。
## Alert 弹框
alert 弹框只有确定按钮,用于强提醒。
```html
alert
```
```typescript
import { useMessage } from '@/uni_modules/wot-design-uni'
const message = useMessage()
function alert() {
message.alert('操作成功')
}
```
显示标题的 alert 弹框。
```html
alert
```
```typescript
import { useMessage } from '@/uni_modules/wot-design-uni'
const message = useMessage()
function alert() {
message.alert({
msg: '提示文案',
title: '标题'
})
}
```
如果内容文案过长,弹框高度不再增加,而是展示滚动条。
```html
alert
```
```typescript
import { useMessage } from '@/uni_modules/wot-design-uni'
const message = useMessage()
function alert() {
message.alert({
msg: '以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文字是示意以上文',
title: '标题'
})
}
```
## Confirm 弹框
用于提示用户操作。
```html
confirm
```
```typescript
import { useMessage } from '@/uni_modules/wot-design-uni'
const message = useMessage()
function confirm() {
message
.confirm({
msg: '提示文案',
title: '标题'
})
.then(() => {
console.log('点击了确定按钮')
})
.catch(() => {
console.log('点击了取消按钮')
})
}
```
## Prompt 弹框
prompt 会展示一个输入框,并可以进行输入校验。
```html
prompt
```
```typescript
import { useMessage } from '@/uni_modules/wot-design-uni'
const message = useMessage()
function prompt() {
message
.prompt({
title: '请输入邮箱',
inputValue: value1.value,
inputPattern: /.+@.+\..+/i
})
.then((resp) => {
console.log(resp)
})
.catch((error) => {
console.log(error)
})
}
```
## 插槽
如果提供的弹框内容不满足需求,可以使用插槽自定义弹框内容。可以通过指定唯一标识`selector`的方式,在一个页面中使用多个`MessageBox`,`useMessage(selector)`会返回一个指定了`selector`的组件实例。
```html
custom
```
```typescript
import { useMessage } from '@/uni_modules/wot-design-uni'
const rate = ref(1)
const message = useMessage('wd-message-box-slot')
function withSlot() {
message
.confirm({
title: '评分'
})
.then(() => {
message.alert(`你的评分为:${rate.value}分`)
})
.catch((error) => {
console.log(error)
})
}
```
```scss
:deep(.custom-rate-class) {
display: block;
height: 22px;
}
```
## 确认前置处理
设置 `beforeConfirm` 函数,在用户选择图片点击确认后,会执行 `beforeConfirm` 函数,接收 { resolve },开发者可以在确认前进行处理,并通过 `resolve` 函数告知组件是否确定通过,`resolve` 接受 1 个 `boolean` 值,`resolve(true)` 表示选项通过,`resolve(false)` 表示选项不通过,不通过时不会完成确认操作。
```html
beforeConfirm
```
```typescript
import { useMessage, useToast } from '@/uni_modules/wot-design-uni'
const message = useMessage()
const toast = useToast()
function beforeConfirm() {
message
.confirm({
msg: '是否删除',
title: '提示',
beforeConfirm: ({ resolve }) => {
toast.loading('删除中...')
setTimeout(() => {
toast.close()
resolve(true)
toast.success('删除成功')
}, 2000)
}
})
.then(() => {})
.catch((error) => {
console.log(error)
})
}
```
## 自定义操作按钮1.5.0
可以通过按钮属性 `cancel-button-props` 和 `confirm-button-props` 自定义操作按钮的样式,具体参考 [Button Attributes](/component/button.html#attributes)。
```html
自定义按钮
```
```typescript
function withButtonProps() {
message
.confirm({
msg: '自定义按钮样式',
title: '提示',
cancelButtonProps: {
type: 'error',
customClass: 'custom-shadow'
},
confirmButtonProps: {
type: 'success',
customClass: 'custom-shadow'
}
})
.then(() => {})
.catch((error) => {
console.log(error)
})
}
```
```css
:deep() {
.wd-message-box {
.custom-shadow {
box-shadow: 0 3px 1px -2px rgb(0 0 0 / 20%), 0 2px 2px 0 rgb(0 0 0 / 14%), 0 1px 5px 0 rgb(0 0 0 / 12%);
}
}
}
```
***
弹框在点击确定和取消按钮时,会返回一个 promise 对象,用 then 接收“确定”按钮事件,用 catch 接收“取消”按钮事件。传入的 action 值为:'confirm'、'cancel'、'modal'。
`MessageBox.show(msg)`在调用时直接传入字符串,`MessageBox.show(options)` 在调用时,需传入 options 参数。alert、confirm 和 prompt 都支持快捷调用:
```typescript
MessageBox.show(msg)
MessageBox.show(options)
MessageBox.alert(options)
MessageBox.confirm(options)
MessageBox.prompt(options)
```
## Options
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| -------------------- | ------------------------------------------------------------------------------- | --------------- | ------------------------ | ---------------- | ---------------- |
| title | 标题 | string | - | - | - |
| msg | 消息文案 | string | - | - | - |
| type | 弹框类型 | string | alert / confirm / prompt | alert | - |
| closeOnClickModal | 是否支持点击蒙层进行关闭,点击蒙层回调传入的 action 为'modal' | boolean | - | true | - |
| inputType | 当 type 为 prompt 时,输入框类型 | string | - | text | - |
| inputValue | 当 type 为 prompt 时,输入框初始值 | string / number | - | - | - |
| inputPlaceholder | 当 type 为 prompt 时,输入框 placeholder | string | - | 请输入内容 | - |
| inputPattern | 当 type 为 prompt 时,输入框正则校验,点击确定按钮时进行校验 | regex | - | - | - |
| inputValidate | 当 type 为 prompt 时,输入框校验函数,点击确定按钮时进行校验 | function | - | - | - |
| inputError | 当 type 为 prompt 时,输入框检验不通过时的错误提示文案 | string | - | 输入的数据不合法 | - |
| confirmButtonText | 确定按钮文案 | string | - | 确定 | - |
| cancelButtonText | 取消按钮文案 | string | - | 取消 | - |
| zIndex | 弹窗层级 | number | - | 99 | - |
| lazyRender | 弹层内容懒渲染,触发展示时才渲染内容 | boolean | - | true | - |
| cancel-button-props | 取消按钮的属性,具体参考 [Button Attributes](/component/button.html#attributes) | object | - | - | 1.5.0 |
| confirm-button-props | 确定按钮的属性,具体参考 [Button Attributes](/component/button.html#attributes) | object | - | - | 1.5.0 |
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | -------- | ------- | ------ | ------ | -------- |
| selector | 指定唯一标识 | string | - | - | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/navbar.md'
---
# Navbar 导航栏
为页面提供导航功能,常用于页面顶部。
::: tip 常见问题
**右图标被小程序胶囊挡住?**
在小程序平台开启自定义顶部导航时,右上角会固定显示胶囊,所以此时右侧插槽及选项是不建议使用。
**如何设置为背景透明?**
通过 `custom-style` 设置组件 `background-color` 为 `transparent`。
```html
```
**组件会被 `video` 覆盖?**
`video`为原生组件,层级较高,目前无法遮盖,需要具体平台具体分析。
:::
## 基础用法
通过 `title` 属性设置导航栏标题。
```html
```
## 返回上级
在导航栏实现返回上级功能。
```html
```
```ts
function handleClickLeft() {
uni.navigateBack()
}
```
## 右侧按钮
在导航栏右侧添加可点击的按钮。
```html
```
```ts
import { useToast } from '@/uni_modules/wot-design-uni'
const { show: showToast } = useToast()
function handleClickRight() {
showToast('按钮')
}
```
## 使用插槽
可以通过 `left` 和 `right` 插槽自定义导航栏两侧的内容。
```html
```
## 固定在顶部
通过 `fixed` 可以设置导航条固定在页面顶部,通过设置 `placeholder` 可以在顶部生成占位空间,通过设置 `safeAreaInsetTop` 可以开启顶部安全区的适配。
```html
```
## 禁用按钮
通过 `left-disabled` 或 `right-disabled` 属性来禁用两侧的按钮。按钮被禁用时透明度降低,且无法点击。
```html
```
## 胶囊样式
通过 `capsule` 插槽和 `navbar-capsule` 组件定制返回胶囊。
```html
```
```ts
function handleBack() {
uni.navigateBack({})
}
function handleBackHome() {
uni.reLaunch({ url: '/pages/index/Index' })
}
```
## 带搜索栏
通过 `title` 插槽,自定义标题。
```html
```
```scss
.search-box {
display: flex;
height: 100%;
align-items: center;
--wot-search-padding: 0;
--wot-search-side-padding: 0;
:deep() {
.wd-search {
background: transparent;
}
}
}
```
## Navbar Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | -------- | ------- | ------ | ------ | -------- |
| title | 卡片标题 | string | - | '' | 0.1.33 |
| leftText | 左侧文案 | string | - | '' | 0.1.33 |
| rightText | 右侧文案 | string | - | '' | 0.1.33 |
| leftArrow | 显示左侧箭头 | boolean | true, false | false | 0.1.33 |
| bordered | 显示下边框 | boolean | true, false | true | 0.1.33 |
| fixed | 固定到顶部 | boolean | true, false | false | 0.1.33 |
| placeholder | 固定在顶部时,在标签位置生成一个等高的占位元素 | boolean | true, false | false | 0.1.33 |
| zIndex | 导航栏 z-index | number | - | 1 | 0.1.33 |
| safeAreaInsetTop | 开启顶部安全区适配 | boolean | true, false | false | 0.1.33 |
| leftDisabled | 禁用左侧按钮,禁用时透明度降低,且无法点击 | boolean | true, false | false | 0.1.33 |
| rightDisabled | 禁用右侧按钮,禁用时透明度降低,且无法点击 | boolean | true, false | false | 0.1.33 |
## Navbar Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| ------------ | ----------------------------- | ---------------------------------------------- | --------- |
| click-left | 点击左侧按钮时触发 | - | 0.1.33 |
| click-right | 点击右侧按钮时触发 | - | 0.1.33 |
## NavbarCapsule Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| ------------ | ----------------------------- | ---------------------------------------------- | --------- |
| back | 点击返回按钮时触发 | - | 0.1.33 |
| back-home | 点击返回首页按钮时触发 | - | 0.1.33 |
## Navbar Slot
| 名称 | 说明 | 最低版本 |
| ------- | -------- | -------- |
| capsule | 自定义胶囊(当存在胶囊时,left不生效) | 0.1.33 |
| left | 左侧内容 | 0.1.33 |
| title | 标题内容 | 0.1.33 |
| right | 右侧内容 | 0.1.33 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式类 | 0.1.33 |
| custom-style | 根节点样式 | 0.1.33 |
---
---
url: 'https://wot-design-uni.cn/component/notice-bar.md'
---
# NoticeBar 通知栏
通知栏组件,用于在页面顶部展示通知提醒。
## 基本用法
设置 `text` 文本内容和 `prefix` 左侧图标。
```html
```
## 类型修改
设置 `type` 可修改通知类型,通知类型共有三种 `info`|`warning`|`danger`,默认值为`warning`。
```html
```
```scss
:deep(.space) {
margin-bottom: 10px;
}
```
## 插槽演示
```html
占位符
通知被禁或时段内消息屏蔽可能造成消…
查看
```
```scss
:deep(.prefix) {
font-size: 18px;
padding-right: 4px;
width: 18px;
height: 18px;
}
```
## 多行展示
设置 `wrapable` 属性为 `true` 且同时禁止滚动 `scrollable` 即可开启多行展示。
```html
```
## 可关闭的
设置 `closable` 属性,使通知栏可以关闭。
```html
```
## 自定义颜色
设置 `color` 修改文字和图标颜色,设置 `background-color` 修改背景颜色。
```html
```
## 多文本轮播
将一个`string[]`传递给`text`属性,即可开启多文本轮播,并且会在展示下一条文本时触发`next`事件,该事件接收一个`number`参数,代表的是当前展示的文本数组索引
```html
```
```javascript
import { ref } from 'vue'
const textArray = ref([
'欢迎使用wot design uni',
'该组件库基于uniapp ->Vue3, ts构建',
'项目地址:https://github.com/Moonofweisheng/wot-design-uni',
'我们的目标是打造最强uniapp组件库',
'诚挚邀请大家共同建设',
'这是一条消息提示信息,这是一条消息提示信息,这是一条消息提示信息,这是一条消息提示信息,这是一条消息提示信息'
])
const onNext = (index: number) => {
console.log('展示下一条,index: ', index)
console.log('文本是:' + textArray.value[index])
}
```
## 垂直滚动
1. `direction`传递`vertical`即可开启垂直滚动,目前仅支持一个方向的垂直滚动
2. `text`为数组时才会进行滚动
```html
```
## 重置播放动画 1.3.13
通过`ref`获取组件实例,调用`reset`方法即可重置播放动画。当你遇到`NoticeBar`的播放动画异常的情况时,可以调用`reset`方法重置动画。
例如:在`APP-VUE`端,`Tabbar`页面使用`NoticeBar`时,从其它界面返回到`NoticeBar`页面,会偶发`NoticeBar`动画异常,此时可以调用`reset`方法重置动画。
参考issues:[#358](https://github.com/Moonofweisheng/wot-design-uni/issues/358)、[#650](https://github.com/Moonofweisheng/wot-design-uni/issues/650)
```html
重置播放动画
```
```ts
// uni_modules
import { type NoticeBarInstance } from '@/uni_modules/wot-design-uni/components/wd-notice-bar/types'
// npm
// import { type NoticeBarInstance } from 'wot-design-uni/components/wd-notice-bar/types'
const notice = ref()
const textArray = ref([
'欢迎使用wot design uni',
'该组件库基于uniapp ->Vue3, ts构建',
'项目地址:https://github.com/Moonofweisheng/wot-design-uni',
'我们的目标是打造最强uniapp组件库',
'诚挚邀请大家共同建设',
'这是一条消息提示信息,这是一条消息提示信息,这是一条消息提示信息,这是一条消息提示信息,这是一条消息提示信息'
])
function handleReset() {
notice.value?.reset()
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------------- | -------------------------------------- | -------------------------- | ----------------------- | ------------ | -------- |
| text | 设置通知栏文案 | `string` `string[]` | - | - | - |
| type | 设置通知栏类型 | `string` | info / warning / danger | warning | - |
| prefix | 设置左侧图标,使用 icon 章节中的图标名 | `string` | - | - | - |
| scrollable | 是否可以滚动 | `boolean` | - | true | - |
| delay | 滚动动画初始延时,单位 秒(s) | `number` | - | 1 | - |
| speed | 滚动速度,单位 px/s | `number` | - | 50 | - |
| closable | 是否可以关闭 | `boolean` | - | false | - |
| wrapable | 是否换行展示 | `boolean` | - | false | - |
| color | 文字、图标颜色 | `string` | - | - | - |
| background-color | 背景颜色 | `string` | - | - | - |
| direction | 滚动方向 | `NoticeBarScrollDirection` | `horizontal` `vertical` | `horizontal` | - |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | ------------------------------------------------------------------------------ | -------- |
| close | 关闭按钮点击时 | - | - |
| next | 下一次滚动前触发 | index: `number` | - |
| click | 点击时触发 | `{ text: string, index: number }`,其中`text`为当前文本,`index`为当前文本索引 | 1.2.16 |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
|---------|-----|-----|---------|
| reset | 用于重置播放动画| - | 1.3.13 |
## Slot
| name | 说明 | 类型 | 最低版本 |
| ------- | ------------ | ---- | -------- |
| prefix | 前置图标 | - | - |
| suffix | 后置插槽 | - | - |
| default | 通知文本内容 | - | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/notify.md'
---
# Notify 消息通知
通知类组件,用于在页面顶部展示通知信息。
## 基本用法
需要在页面中引入该组件,作为挂载点。
```html
```
```ts
import { useNotify } from '@/uni_modules/wot-design-uni'
const { showNotify, closeNotify } = useNotify()
// 3 秒后自动关闭
showNotify('通知内容')
// 主动关闭
closeNotify()
```
## 通知类型
支持 `primary`、`success`、`warning`、`danger` 四种通知类型,默认为 `danger`。
```ts
// 主要通知
showNotify({ type: 'primary', message: '通知内容' })
// 成功通知
showNotify({ type: 'success', message: '通知内容' })
// 危险通知
showNotify({ type: 'danger', message: '通知内容' })
// 警告通知
showNotify({ type: 'warning', message: '通知内容' })
```
## 自定义通知
```ts
showNotify({
message: '自定义颜色',
color: '#ad0000',
background: '#ffe1e1'
})
showNotify({
message: '自定义位置',
position: 'bottom'
})
showNotify({
message: '自定义时长',
duration: 1000
})
```
## 使用 Notify 组件
如果需要在 Notify 内嵌入组件或其他自定义内容,可以直接使用 Notify 组件,并使用默认插槽进行定制。
```html
使用 Notify 组件调用
成功通知
```
```ts
import { ref, onMounted } from 'vue'
let timer: ReturnType
export default {
setup() {
const visible = ref(false)
const safeHeight = ref(0)
const showNotify = () => {
visible.value = true
if (timer) clearTimeout(timer)
timer = setTimeout(() => {
visible.value = false
}, 3000)
}
onMounted(() => {
// #ifdef H5
safeHeight.value = 44
// #endif
})
return {
visible,
showNotify,
safeHeight
}
}
}
```
## 进阶`demo`
```vue
// App.vue
```
```vue
// /components/layout/layout.vue
```
```vue
// /pages/user.vue
User
消息通知
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------ | ----------------------------------------------------------------| ------- | ------------------------- | ------------ | -------- |
| type | 类型 | NotifyType | `primary` `success` `warning` `danger` | `danger` | - |
| message | 展示文案,支持通过`\n`换行 | string | - | - | - |
| duration | 展示时长(ms),值为 0 时,notify 不会消失 | number | - | `3000` | - |
| zIndex | 层级 | number | - | `99` | - |
| position | 弹出位置 | NotifyPosition | `top` `bottom` | `top` | - |
| color | 字体颜色 | string | - | - | - |
| background | 背景颜色 | string | - | - | - |
| safeHeight | 顶部安全高度 | number / string | - | - | - |
| selector | 指定唯一标识 | number | - | - | - |
## Events
| 事件名 | 说明 | 参数 | 最低版本 |
| -------- | ----------------------------------------- | ------- | -------- |
| click | 点击时的回调函数 | (event: MouseEvent) => void | - |
| closed | 关闭时的回调函数 | () => void | - |
| opened | 展示后的回调函数 | () => void | - |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
| -------- | ----------------------------------------- | ------- | -------- |
| showNotify | 展示提示 | `NotifyOptions` / `string` | - |
| closeNotify | 关闭提示 | - | - |
| setNotifyDefaultOptions | 修改默认配置,影响所有的 `showNotify` 调用 | `NotifyOptions` | - |
| resetNotifyDefaultOptions | 重置默认配置,影响所有的 `showNotify` 调用 | - | - |
## Options
调用 `showNotify`、 `setNotifyDefaultOptions` 等方法时,支持传入以下选项:
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------ | ----------------------------------------------------------------| ------- | ------------------------- | ------------ | -------- |
| type | 类型 | NotifyType | `primary` `success` `warning` `danger` | `danger` | - |
| message | 展示文案,支持通过`\n`换行 | string | - | - | - |
| duration | 展示时长(ms),值为 0 时,notify 不会消失 | number | - | `3000` | - |
| zIndex | 层级 | number | - | `99` | - |
| position | 弹出位置 | NotifyPosition | `top` `bottom` | `top` | - |
| color | 字体颜色 | string | - | - | - |
| background | 背景颜色 | string | - | - | - |
| safeHeight | 顶部安全高度 | number / string | - | - | - |
| onClick | 点击时的回调函数 | (event: MouseEvent) => void | - | - | - |
| onClosed | 关闭时的回调函数 | () => void | - | - | - |
| onOpened | 展示后的回调函数 | () => void | - | - | - |
---
---
url: 'https://wot-design-uni.cn/component/number-keyboard.md'
---
# NumberKeyboard 数字键盘
虚拟数字键盘,用于输入数字、密码或身份证等场景。
## 基本用法
可以通过 `v-model:visible` 控制键盘是否展示。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 带右侧栏的键盘
将 `mode` 属性设置为 `custom` 来展示键盘的右侧栏,常用于输入金额的场景。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 身份证键盘
通过 `extra-key` 属性可以设置左下角按键内容,比如需要输入身份证号时,可以将 `extra-key` 设置为 `X`。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 带标题的键盘
通过 `title` 属性可以设置键盘标题。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 使用 slot 自定义标题
```html
自定义标题
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 多个额外按键
当 `mode` 为 `custom` 时,支持以数组的形式配置两个 `extra-key`。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 随机数字键盘
通过 `random-key-order` 属性可以随机排序数字键盘,常用于安全等级较高的场景。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 双向绑定
可以通过 `v-model` 绑定键盘当前输入值,并通过 `maxlength` 属性来限制输入长度。
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
const value1 = ref('')
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## 展示蒙层遮罩
`hideOnClickOutside`控制键盘弹窗是否有遮罩,通过`modal`控制遮罩是否为透明。
::: tip 提示
当前`modal`仅控制遮罩是否为透明,`hideOnClickOutside`控制弹窗是否有遮罩,当存在遮罩时,点击遮罩就可以关闭键盘,但是键盘展开时必须点击遮罩关闭当前键盘后才可以再点击别的按钮。也可以关闭`hideOnClickOutside`,手动控制键盘是否展示来实现点击外部时收起键盘,这样更灵活。
:::
```html
```
```ts
const { show: showToast } = useToast()
const visible = ref(false)
const value1 = ref('')
function showKeyBoard() {
visible.value = true
}
const onInput = (value) => showToast(`${value}`)
const onDelete = () => showToast('删除')
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------------- | ------------------------ | --------------------- | ------------------- | ---------- | -------- |
| v-model:visible | 是否展开 | `boolean` | - | `false` | 0.1.65 |
| v-model | 绑定的值 | `string` | - | - | 0.1.65 |
| title | 标题 | `string` | - | - | 0.1.65 |
| mode | 键盘模式 | `string` | `default`, `custom` | `default` | 0.1.65 |
| zIndex | 层级 | `number` | - | `100` | 0.1.65 |
| maxlength | 最大长度 | `number` | - | `Infinity` | 0.1.65 |
| showDeleteKey | 是否显示删除键 | `boolean` | - | `true` | 0.1.65 |
| randomKeyOrder | 是否随机键盘按键顺序 | `boolean` | - | `false` | 0.1.65 |
| closeText | 确认按钮文本 | `string` | - | - | 0.1.65 |
| deleteText | 删除按钮文本 | `string` | - | - | 0.1.65 |
| closeButtonLoading | 关闭按钮是否显示加载状态 | `boolean` | - | `false` | 0.1.65 |
| modal | 是否显示蒙层遮罩 | `boolean` | - | `false` | 0.1.65 |
| hideOnClickOutside | 是否在点击外部时收起键盘 | `boolean` | - | `true` | 0.1.65 |
| lockScroll | 是否锁定滚动 | `boolean` | - | `true` | 0.1.65 |
| safeAreaInsetBottom | 是否在底部安全区域内 | `boolean` | - | `true` | 0.1.65 |
| extraKey | 额外按键 | `string` / `string[]` | - | - | 0.1.65 |
## Slot
| name | 说明 | 类型 | 最低版本 |
| ----- | ---- | ---- | -------- |
| title | 标题 | - | 1.2.12 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ------------------------------ | ----------- | -------- |
| input | 点击按键时触发 | key: string | - |
| delete | 点击删除键时触发 | - | - |
| close | 点击关闭按钮或非键盘区域时触发 | - | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ------------ | -------- |
| custom-class | 根节点样式类 | 0.1.65 |
| custom-style | 根节点样式 | 0.1.65 |
---
---
url: 'https://wot-design-uni.cn/component/overlay.md'
---
# Overlay 遮罩层 0.1.30
创建一个遮罩层,用于强调特定的页面元素,并阻止用户进行其他操作。
## 基础用法
使用 `show` 控制遮罩层的显示/隐藏。
```html
显示遮罩层
```
## 嵌入内容
通过 `type` 修改指示器的类型,可选值为 'outline',适用于通用模块加载。
```html
嵌入内容
```
```scss
.wrapper {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
}
.block {
width: 120px;
height: 120px;
background-color: #fff;
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----------- | ------------------ | ----------------- | ------ | ------ | -------- |
| show | 是否展示遮罩层 | `boolean` | true | false | - |
| duration | 动画时长,单位毫秒 | `string / number` | - | 300 | - |
| lockScroll | 是否锁定滚动 | `boolean` | false | true | - |
| zIndex | 层级 | `number` | - | 10 | - |
| customStyle | 自定义样式 | `string` | - | - | - |
---
---
url: 'https://wot-design-uni.cn/component/pagination.md'
---
# Pagination 分页
当数据量过多时,使用分页分解数据。
## 基本用法
通过 `v-model` 来绑定当前页码,`total`设置总条数,`page-size`设置一页展示条数,默认为10条,总页数通过`total`和`page-size`自动计算。
```html
```
```typescript
const value = ref(1)
function handleChange({ value }) {
console.log(value)
}
```
## Icon图标
设置 `show-icon` 属性,将分页导航展示为Icon图标。
```html
```
## 文字提示
设置 `show-message` 属性,展示文字提示。
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|--------|
| v-model | 绑定值 | number | - | - | - |
| prev-text | 上一页按钮文字 | string | - | 上一页 | - |
| next-text | 下一页按钮文字 | string | - | 下一页 | - |
| total-page | 总页数,如果有total,则优先使用total计算页数 | number | - | `根据页数计算` | - |
| page-size | 分页大小 | number | - | 10 | - |
| total | 总数据个数 | number | - | - | - |
| show-icon | 是否展示分页Icon | boolean | - | false | - |
| show-message | 是否展示文字提示 | boolean | - | false | - |
| hide-if-one-page | 总页数只有一页时是否隐藏 | boolean | - | true | - |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|---------|-----|------|--------|
| change | 值修改事件 | `{ value }`,value为当前值 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/password-input.md'
---
# PasswordInput 密码输入框 0.2.0
带网格的输入框组件,可以用于输入密码、短信验证码等场景,通常与[数字键盘](./number-keyboard.md)组件配合使用。
## 基础用法
搭配数字键盘组件来实现密码输入功能。
```html
```
```typescript
import { ref } from 'vue'
const value = ref('123')
const showKeyboard = ref(true)
```
### 自定义长度
通过`length`属性来设置密码长度。
```html
```
### 格子间距
通过`gutter`属性来设置格子之间的间距。
```html
```
### 明文展示
将`mask`设置为`false`可以明文展示输入的内容,适用于短信验证码等场景。
```html
```
### 提示信息
通过`info`属性设置提示信息,通过`error-info`属性设置错误提示,例如当输入六位时提示密码错误。
```html
```
```typescript
import { ref, watch } from 'vue'
const value = ref('123')
const errorInfo = ref('')
const showKeyboard = ref(true)
watch(value, (newVal) => {
if (newVal.length === 6 && newVal !== '123456') {
errorInfo.value = '密码错误'
} else {
errorInfo.value = ''
}
})
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------- | ------------------------------------------------ | ---------------- | ------ | ------ | -------- |
| v-model | 密码值 | string | - | - | - |
| info | 输入框下方文字提示 | string | - | - | - |
| error-info | 输入框下方错误提示 | string | - | - | - |
| length | 密码最大长度 | number | - | 6 | - |
| gutter | 输入框格子之间的间距,如 20px 2em,默认单位为 px | number / string | - | 0 | - |
| mask | 是否隐藏密码内容 | boolean | - | true | - |
| focused | 是否已聚焦,聚焦时会显示光标 | boolean | - | false | - |
## Events
| 事件名 | 说明 | 参数 | 最低版本 |
| ------ | ---------------- | ----------- | -------- |
| focus | 输入框聚焦时触发 | `event:Event` | - |
---
---
url: 'https://wot-design-uni.cn/component/picker.md'
---
# Picker 选择器
Picker 组件为 popup 和 pickerView 的组合。
## 基本用法
`columns` 设置选项数据源,选项可以为字符串,也可以为对象,如果为对象则默认取 `label` 属性为选项内容进行渲染。`label` 设置左侧文本内容,`v-model` 设置选中项的值。label 可以不传。可以通过 `label-width` 设置标题宽度,默认为 '33%',监听 `confirm` 事件,获取选中值,传出一个 event 对象,event `event = { value, selectedItems }`,value 为绑定值,selectedItems 为选中选项的对象。
```html
```
```typescript
const columns = ref(['选项1', '选项2', '选项3', '选项4', '选项5', '选项6', '选项7'])
const value = ref('选项1')
function handleConfirm({ value }) {
value.value = value
}
```
当 `columns` 选项为对象时,其数据结构为:
| 参数 | 类型 | 说明 | 最低版本 |
| -------- | ------------------------- | -------------------------------------------------------- | -------- |
| value | string / number / boolean | 选项值,如果 value 属性不存在,则使用 label 作为选项的值 | - |
| label | string | 选项文本内容 | - |
| disabled | boolean | 选项是否禁用 | - |
## 禁用
设置 `disabled` 属性。
```html
```
```typescript
const value = ref('选项3')
const columns = ref(['选项1', '选项2', '选项3', '选项4', '选项5', '选项6', '选项7'])
```
## 只读
设置 `readonly` 属性。
```html
```
## 清空按钮
设置 `clearable` 属性。
```html
```
## 文案标题
设置 `title` 属性。
```html
```
## 加载中
设置 `loading` 属性。
```html
```
## 多列
`columns` 属性设置为二维数组,`value` 为数组。
```html
```
```typescript
const value = ref(['中南大学', '软件工程'])
const columns = ref([
['中山大学', '中南大学', '华南理工大学'],
['计算机科学与技术', '软件工程', '通信工程', '法学', '经济学']
])
```
## 多级联动
传入 `column-change` 属性,其类型为 `function`,接收 pickerView 实例、选中项、当前修改列的下标、resolve 作为入参,根据选中项和列下标进行判断,通过 pickerView 实例暴露出来的 `setColumnData` 方法修改其他列的数据源,当修改完成后需要执行 `resolve()` 告知组件修改完成以继续执行,如果 `column-change` 包含异步操作,也可以使组件按照异步顺序进行执行。
> 每次修改完后都需要调用 resolve() 通知组件。
```html
```
```typescript
const district = {
'0': [{ label: '北京', value: '110000' }, { label: '广东省', value: '440000' }],
'110000': [{ label: '北京', value: '110100' }],
'440000': [{ label: '广州市', value: '440100' }, { label: '韶关市', value: '440200' }, { label: '深圳市', value: '440300' }, { label: '珠海市', value: '440400' }, { label: '汕头市', value: '440500' }],
'110100': [{ label: '东城区', value: '110101' }, { label: '西城区', value: '110102' }, { label: '朝阳区', value: '110105' }, { label: '丰台区', value: '110106' }, { label: '石景山区', value: '110107' }],
'440100': [{ label: '荔湾区', value: '440103' }, { label: '越秀区', value: '440104' }, { label: '海珠区', value: '440105'}],
'440200': [{ label: '武江区', value: '440203'}],
'440300': [{ label: '罗湖区', value: '440303' }, { label: '福田区', value: '440304' }],
'440400': [{ label: '香洲区', value: '440402' }, { label: '斗门区', value: '440403' }, { label: '金湾区', value: '440404' }],
'440500': [{ label: '龙湖区', value: '440507' }, { label: '金平区', value: '440511' }]
}
const value = ref(['110000', '110100', '110102'])
const columns = ref([district[0], district[district[0][0].value], district[district[district[0][0].value][0].value]])
const onChangeDistrict = (pickerView, value, columnIndex, resolve) => {
const item = value[columnIndex]
if (columnIndex === 0) {
pickerView.setColumnData(1, district[item.value])
pickerView.setColumnData(2, district[district[item.value][0].value])
} else if (columnIndex === 1) {
pickerView.setColumnData(2, district[item.value])
}
resolve()
}
const displayFormat = (items) => {
return items
.map((item) => {
return item.label
})
.join('-')
}
```
## 选择器大小
通过设置 `size` 修改选择器大小,将 `size` 设置为 'large' 时字号为 16px。
```html
```
## 必填属性
设置 `required` 属性,展示必填样式。
```html
```
## 错误状态
设置 `error` 属性,选择器的值显示为红色。
```html
```
## 值靠右展示
设置 `align-right` 属性,选择器的值靠右展示。
```html
```
## 确定前校验
设置 `before-confirm` 函数,在用户点击`确定`按钮时,会执行 `before-confirm` 函数,并传入 `value` 、 `resolve` 和 `picker` 参数,可以对 `value` 进行校验,并通过 `resolve` 函数告知组件是否确定通过,`resolve` 接受1个 boolean 值,`resolve(true)` 表示选项通过,`resolve(false)` 表示选项不通过,不通过时不会关闭 `picker`弹窗。可以通过 `picker` 参数直接设置 `loading`、`columns` 等属性。
```html
```
```typescript
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
const beforeConfirm = (value, resolve, picker) => {
picker.setLoading(true)
setTimeout(() => {
picker.setLoading(false)
if (['选项2', '选项3'].indexOf(value) > -1) {
resolve(false)
toast.error('选项校验不通过,请重新选择')
} else {
resolve(true)
}
}, 2000)
}
const columns = ref(['选项1', '选项2', '选项3', '选项4', '选项5', '选项6', '选项7'])
const value = ref('')
const beforeConfirm = (value, resolve, picker) => {
picker.setLoading(true)
setTimeout(() => {
picker.setLoading(false)
if (['选项2', '选项3'].indexOf(value) > -1) {
resolve(false)
toast.error('选项校验不通过,请重新选择')
} else {
resolve(true)
}
}, 2000)
}
function handleConfirm({ value }) {
value.value = value
}
```
## 唤起项插槽
开启 `use-default-slot` ,设置默认插槽修改唤起picker组件的形式。
```html
插槽唤起
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ------ | ------- | ---------------- |
| v-model | 选中项,如果为多列选择器,则其类型应为数组 | string / number / boolean / array | - | - | - |
| columns | 选择器数据,可以为字符串数组,也可以为对象数组,如果为二维数组,则为多列选择器 | array | - | - | - |
| loading | 加载中 | boolean | - | false | - |
| loading-color | 加载的颜色,只能使用十六进制的色值写法,且不能使用缩写 | string | - | #4D80F0 | - |
| columns-height | picker内部滚筒高 | number | - | 231 | - |
| value-key | 选项对象中,value对应的 key | string | - | value | - |
| label-key | 选项对象中,展示的文本对应的 key | string | - | label | - |
| title | 弹出层标题 | string | - | - | - |
| cancel-button-text | 取消按钮文案 | string | - | 取消 | - |
| confirm-button-text | 确认按钮文案 | string | - | 完成 | - |
| label | 选择器左侧文案 | string | - | - | - |
| placeholder | 选择器占位符 | string | - | 请选择 | - |
| disabled | 禁用 | boolean | - | false | - |
| readonly | 只读 | boolean | - | false | - |
| display-format | 自定义展示文案的格式化函数,返回一个字符串 | function | - | - | - |
| column-change | 接收 pickerView 实例、选中项、当前修改列的下标、resolve 作为入参,根据选中项和列下标进行判断,通过 pickerView 实例暴露出来的 `setColumnData` 方法修改其他列的数据源。 | function | - | - | - |
| size | 设置选择器大小 | string | large | - | - |
| label-width | 设置左侧标题宽度 | string | - | 33% | - |
| error | 是否为错误状态,错误状态时右侧内容为红色 | boolean | - | false | - |
| required | 表单属性,必填 | boolean | - | false | - |
| align-right | 选择器的值靠右展示 | boolean | - | false | - |
| use-label-slot | label 使用插槽 | boolean | - | false | - |
| use-default-slot | 使用默认插槽 | boolean | - | false | - |
| before-confirm | 确定前校验函数,接收 (value, resolve, picker) 参数,通过 resolve 继续执行 picker,resolve 接收1个boolean参数 | function | - | - | - |
| close-on-click-modal | 点击遮罩是否关闭 | boolean | - | true | - |
| z-index | 弹窗层级 | number | - | 15 | - |
| safe-area-inset-bottom | 弹出面板是否设置底部安全距离(iphone X 类型的机型) | boolean | - | true | - |
| ellipsis | 是否超出隐藏 | boolean | - | false | - |
| prop | 表单域 `model` 字段名,在使用表单校验功能的情况下,该属性是必填的 | string | - | - | - |
| rules | 表单验证规则,结合`wd-form`组件使用 | `FormItemRule []` | - | `[]` | - |
| immediate-change | 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。 | boolean | - | false | 1.2.25 |
| clearable | 显示清空按钮 | boolean | - | false | 1.3.13 |
### FormItemRule 数据结构
| 键名 | 说明 | 类型 |
| --------- | ------------------------------------------------------- | ------------------------------------- |
| required | 是否为必选字段 | `boolean` |
| message | 错误提示文案 | `string` |
| validator | 通过函数进行校验,可以返回一个 `Promise` 来进行异步校验 | `(value, rule) => boolean \| Promise` |
| pattern | 通过正则表达式进行校验,正则无法匹配表示校验不通过 | `RegExp` |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------------- | ----------------------------------------------------------------------------------------------------------- | -------- |
| confirm | 点击右侧按钮触发 | { value, selectedItems }, value 为选中值(多列则为数组),selectedItems为选中项(多列则为数组) | - |
| cancel | 点击左侧按钮触发 | - | - |
| open | 打开选择器弹出层时触发 | - | - |
| clear | 点击清空按钮时触发 | - | 1.3.13 |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------- | ---- | -------- |
| open | 打开picker弹框 | - | - |
| close | 关闭picker弹框 | - | - |
## Slot
| name | 说明 | 最低版本 |
| ------- | ------------ | -------- |
| default | 使用默认插槽 | - |
| label | 左侧标题插槽 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------------ | ------------------------- | -------- |
| custom-class | 根节点样式 | - |
| custom-view-class | pickerView 外部自定义样式 | - |
| custom-label-class | label 外部自定义样式 | - |
| custom-value-class | value 外部自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/picker-view.md'
---
# PickerView 选择器视图
选择器视图,用于从一组数据中选择单个或多个值。
## 基本用法
单列选择器,给 `columns` 传入一个数值数组,设置 `v-model` 绑定值。选项可以为字符串,也可以为对象,如果为对象则默认取选项 `label` 属性为选项内容进行渲染,`v-model` 获取的值为选项 `value` 属性的值,如果选项 `value` 属性不存在,则取选项 `label` 的值。
```html
```
```typescript
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
const columns = ref(['选项1', '选项2', '选项3', '选项4', '选项5', '选项6', '选项7'])
const value3 = ref('')
function onChange({picker, value, index}) {
toast.show(`当前选中项: ${value}, 下标: ${index}`)
}
```
当 `columns` 选项为对象时,其数据结构为:
| 参数 | 类型 | 说明 | 最低版本 |
|-----|-----|------|---------|
| value | string / number / boolean | 选项值,如果 value 属性不存在,则使用 label 作为选项的值 | - |
| label | string | 选项文本内容 | - |
| disabled | boolean | 选项是否禁用 | - |
## 禁用选项
选项可以为对象,设置 `disabled` 属性。
```html
```
```typescript
const columns = ref(['选项1', '选项2', '选项3', '选项4', '选项5', '选项6', '选项7'])
const value = ref('选项3')
```
## 加载中
设置 `loading` 属性。
```html
```
## 多列
`columns` 属性设置为二维数组,`value` 为数组。
```html
```
```typescript
const value = ref(['中南大学', '软件工程'])
const columns = ref([
['中山大学', '中南大学', '华南理工大学'],
['计算机科学与技术', '软件工程', '通信工程', '法学', '经济学']
])
```
## 多级联动
传入 `column-change` 属性,其类型为 `function`,接收 pickerView 实例、选中项、当前修改列的下标、resolve 作为入参,根据选中项和列下标进行判断,通过 pickerView 实例暴露出来的 `setColumnData` 方法修改其他列的数据源,当修改完成后需要执行 `resolve()` 告知组件修改完成以继续执行,如果 `column-change` 包含异步操作,也可以使组件按照异步顺序进行执行。
```html
```
```typescript
const district = {
'0': [{ label: '北京', value: '110000' }, { label: '广东省', value: '440000' }],
'110000': [{ label: '北京', value: '110100' }],
'440000': [{ label: '广州市', value: '440100' }, { label: '韶关市', value: '440200' }, { label: '深圳市', value: '440300' }, { label: '珠海市', value: '440400' }, { label: '汕头市', value: '440500' }],
'110100': [{ label: '东城区', value: '110101' }, { label: '西城区', value: '110102' }, { label: '朝阳区', value: '110105' }, { label: '丰台区', value: '110106' }, { label: '石景山区', value: '110107' }],
'440100': [{ label: '荔湾区', value: '440103' }, { label: '越秀区', value: '440104' }, { label: '海珠区', value: '440105'}],
'440200': [{ label: '武江区', value: '440203'}],
'440300': [{ label: '罗湖区', value: '440303' }, { label: '福田区', value: '440304' }],
'440400': [{ label: '香洲区', value: '440402' }, { label: '斗门区', value: '440403' }, { label: '金湾区', value: '440404' }],
'440500': [{ label: '龙湖区', value: '440507' }, { label: '金平区', value: '440511' }]
}
const value = ref(['110000', '110100', '110102'])
const columns = ref([district[0], district[district[0][0].value], district[district[district[0][0].value][0].value]])
const onChangeDistrict = (pickerView, value, columnIndex, resolve) => {
const item = value[columnIndex]
if (columnIndex === 0) {
pickerView.setColumnData(1, district[item.value])
pickerView.setColumnData(2, district[district[item.value][0].value])
} else if (columnIndex === 1) {
pickerView.setColumnData(2, district[item.value])
}
resolve()
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|---------|
| v-model | 选中项,如果为多列选择器,则其类型应为数组 | string / number / boolean / array | - | - | - |
| columns | 选择器数据,可以为字符串数组,也可以为对象数组,如果为二维数组,则为多列选择器 | array | - | - | - |
| loading | 加载中 | boolean | - | false | - |
| loading-color | 加载的颜色,只能使用十六进制的色值写法,且不能使用缩写 | string | - | #4D80F0 | - |
| columns-height | picker内部滚筒高 | number | - | 231 | - |
| value-key | 选项对象中,value对应的 key | string | - | value | - |
| label-key | 选项对象中,展示的文本对应的 key | string | - | label | - |
| column-change | 接收 pickerView 实例、选中项、当前修改列的下标、resolve 作为入参,根据选中项和列下标进行判断,通过 pickerView 实例暴露出来的 `setColumnData` 方法修改其他列的数据源。 | function | - | - | - |
| immediate-change | 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。 | boolean | - | false | 1.2.25 |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
|---------|-----|-----|---------|
| getLabels | 获取所有列选中项的文本,返回值为一个数组 | - |
| getColumnIndex | 获取某一列的选中项下标 | columnIndex | - |
| getColumnData | 获取某一列的选项 | columnIndex | - |
| setColumnData | 设置某一列的选项 | columnIndex, values | - |
| resetColumns | 重置列数据为指定列数据 | columns(类型与props中columns相同) | 1.3.9 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|--------|------|------|--------|
| change | 选项值修改时触发 | event = { value, picker, index }, 单列: picker实例, 选中项值, 选中项下标; 多列: picker实例, 所有列选中项值, 当前列的下标 | - |
| pickstart | 当滚动选择开始时候触发事件 | - | - |
| pickend | 当滚动选择结束时候触发事件 | - | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/popover.md'
---
# Popover 气泡
常用于展示提示信息。
## 基本用法
Popover 的属性与 [Tooltip](/component/tooltip.html) 很类似,因此对于重复属性,请参考 [Tooltip](/component/tooltip.html) 的文档,在此文档中不做详尽解释。
因为`uni-app`组件无法监听点击自己以外的地方,为了在点击页面其他地方时,可以自动关闭 `popover` ,建议使用组件库的 `useQueue` hook(会关闭所有 dropmenu、popover、toast、swipeAction、fab),在页面的根元素上监听点击事件的冒泡。
:::warning
如果存在用户手动点击 `popover` 以外某个地方如按钮弹出 `popover` 的场景,则需要在点击的元素(在这里上按钮)加上 click 阻止事件冒泡到根元素上,避免触发 `closeOutside` 把要手动打开的 `popover` 关闭了。
:::
```html
点击展示
```
```typescript
import { useQueue } from '@/uni_modules/wot-design-uni'
const { closeOutside } = useQueue()
function handleChange({ show }) {
console.log(show)
}
```
## 模式 mode
使用 `mode` 属性控制当前文字提示的展示模式。`mode` 可选参数为 `normal` / `menu`:
* **normal**(普通文字模式):
* 当 `mode` 处于默认状态,`content` 属性传入要显示的 `String` 字符串。
* **menu**(列表模式):
* 文字提示框会展示成列表形式,此时 `content` 属性传入 `Array` 类型,数组内对象数据结构如下方列表所示。
* 绑定事件 `menuclick`,在选择结束后,执行操作,列表关闭。
列表模式下 `content` 数组内对象的数据结构:
| 键名 | 说明 | 类型 | 是否必填 | 最低版本 |
| ------------------------------------- | ------ | ------ | -------- | -------- |
| content | 选项名 | string | 是 | - |
| iconClass(不设置该属性时只展示标题) | 选项值 | string | 否 | - |
**注意:iconClass 属性值为组件库内部的 icon 图标名。**
```html
列表
```
```typescript
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
const menu = ref>>([
{
iconClass: 'read',
content: '全部标记已读'
},
{
iconClass: 'delete',
content: '清空最近会话'
},
{
iconClass: 'detection',
content: '消息订阅设置'
},
{
iconClass: 'subscribe',
content: '消息异常检测'
}
])
function link(e) {
toast.show('选择了' + e.item.content)
}
```
## 嵌套信息
开启属性 `use-content-slot`,使用插槽 `content`, 可以在 Popover 中嵌套多种类型信息。
:::warning 注意
目前使用`content`插槽时,组件内部无法正确获取气泡的宽高,此时设置偏移的`placement`无法生效,例如`bottom-end`。
:::
```html
这是一段自定义样式的内容。
点击展示
```
```scss
.pop-content {
/* 必填 开始 */
position: relative;
z-index: 500;
border-radius: 4px;
/* 必填 结束 */
background: #fff;
color: #8268de;
font-weight: bolder;
padding: 10px;
width: 150px;
}
```
## Popover Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | ------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- | ------ | -------- |
| v-model | 手动状态是否可见 | boolean | - | false | - |
| content | 显示的内容,也可以通过 `slot#content` 传入 | string/array(当模式为菜单模式时,content 属性格式为 Array) | - | - | - |
| mode | 当前显示的模式,决定内容的展现形式 | string | normal(普通模式)/ menu(菜单模式) | normal | - |
| placement | popover 的出现位置 | string | top / top-start / top-end / bottom / bottom-start / bottom-end / left / left-start / left-end / right / right-start / right-end | bottom | - |
| visible-arrow | 是否显示 popover 箭头 | boolean | - | true | - |
| disabled | popover 是否可用 | boolean | - | false | - |
| offset | 出现位置的偏移量 | number | - | 0 | - |
## Slot
| name | 说明 | 最低版本 |
| ------- | ------------------------ | -------- |
| content | 多行内容或用户自定义样式 | - |
## Events
| 事件名称 | 说明 | 回调参数 | 最低版本 |
| -------------- | --------------------------- | ----------------- | -------- |
| open | 显示时触发 | - | - |
| close | 隐藏时触发 | - | - |
| change | pop 显隐值变化时触发 | - | - |
| menuclick | menu 模式下点击某一选项触发 | `{ item, index }` | - |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | ---- | -------- |
| open | 打开文字提示弹框 | - | - |
| close | 关闭文字提示弹框 | - | - |
## Popover 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ------------ | -------- |
| custom-class | 根节点样式 | - |
| custom-arrow | 尖角样式 | - |
| custom-pop | 文字提示样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/popup.md'
---
# Popup 弹出层
弹出层组件,用于展示弹窗、信息提示等内容。
## 基本用法
`v-model` 为绑定值,表示是否展示弹出层。
```html
弹弹弹
```
```css
.custom-txt {
color: black;
width: 400rpx;
height: 400rpx;
display: flex;
justify-content: center;
align-items: center;
font-size: 40rpx;
border-radius: 32rpx;
}
```
## 弹出位置
设置 `position`,默认为 'center',可选值 'top', 'right', 'bottom', 'left'。
```html
```
## 关闭按钮
设置 `closable` 属性。
```html
```
## 禁用遮罩点击
通过设置 `close-on-click-modal` 属性为 `false`,你可以禁用用户点击遮罩层时关闭弹出层的功能。
```html
```
## 禁用遮罩
通过设置 `modal` 属性为 `false`,你可以禁用遮罩层,使用户可以与底层内容进行交互。
```html
```
## 开启底部安全区
通过设置 `safe-area-inset-bottom` 属性为 `true`,你可以确保弹出层在底部显示时不会被底部安全区域遮挡。
```html
```
## 禁止滚动穿透
使用组件时,会发现内容部分滚动到底时,继续划动会导致底层页面的滚动,这就是滚动穿透。
目前,组件可以通过 `lock-scroll` 属性处理部分滚动穿透问题。 但由于小程序和APP平台自身原因,弹窗内容区域仍会出现滚动穿透。 不过,我们为开发者提供了一个推荐方案以完整解决滚动穿透:
可以使用 [page-meta](https://uniapp.dcloud.net.cn/component/page-meta#page-meta) 组件动态修改 `page-meta` 的 `overflow` 属性。
```html
```
:::tip 提示
h5 滚动穿透不需要处理,组件已默认开启 `lock-scroll`。
:::
### H5平台
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|-----|------|-------|-------|---------|
| v-model | 弹出层是否显示 | boolean | - | - | - |
| position | 弹出位置 | string | center / top / right / bottom / left | center | - |
| closable | 关闭按钮 | boolean | - | false | - |
| close-on-click-modal | 点击遮罩是否关闭 | boolean | - | true | - |
| duration | 动画持续时间 | number / boolean | - | 300(ms) | - |
| z-index | 设置层级 | number | - | 10 | - |
| custom-style | 自定义弹出层样式 | string | - | - | - |
| modal | 是否显示遮罩 | boolean | - | true | - |
| modal-style | 自定义modal蒙层样式 | string | - | - | - |
| hide-when-close | 是否当关闭时将弹出层隐藏(display: none) | boolean | - | true | - |
| lazy-render | 弹层内容懒渲染,触发展示时才渲染内容 | boolean | - | true | - |
| safe-area-inset-bottom | 弹出面板是否设置底部安全距离(iphone X 类型的机型) | boolean | - | false | - |
| transition | 动画类型,参见 wd-transition 组件的name | string | fade / fade-up / fade-down / fade-left / fade-right / slide-up / slide-down / slide-left / slide-right / zoom-in | - | - |
| lockScroll | 是否锁定背景滚动 | boolean | - | true | 0.1.30 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|---------|-----|-----|---------|
| close | 弹出层关闭时触发 | - | - |
| click-modal | 点击遮罩时触发 | - | - |
| before-enter | 进入前触发 | - | - |
| enter | 进入时触发 | - | - |
| after-enter | 进入后触发 | - | - |
| before-leave | 离开前触发 | - | - |
| leave | 离开时触发 | - | - |
| after-leave | 离开后触发| - | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/progress.md'
---
# Progress 进度条
用于展示操作的当前进度。
## 基本用法
设置百分比 `percentage`。
```html
```
## 隐藏进度文字
设置 `hide-text` 隐藏进度文字。
```html
```
## 设置状态
设置 `status`,告知用户当前状态和预期。
```html
```
## 修改颜色
设置 `color` 修改进度条颜色。
```html
```
`color` 也可以设置为数组或者函数。数组如果只传入颜色,则自动计算每个颜色的进度边界。函数需要返回一个颜色值。
```html
```
数组也可以设置为以下格式:
```html
```
```typescript
import type { ProgressColor } from '@/uni_modules/wot-design-uni/components/wd-progress/types'
const colorObject = ref([
{
color: 'yellow',
percentage: 30
},
{
color: 'red',
percentage: 60
},
{
color: 'blue',
percentage: 80
},
{
color: 'black',
percentage: 90
}
])
const percentage = ref(100)
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------- | --------------------- | --------------------------------------- | ---------------- | ------ | -------- |
| percentage | 进度数值,最大值 100 | `number` | - | 0 | - |
| hide-text | 隐藏进度文字 | `boolean` | - | false | - |
| color | 进度条颜色 | `string / ProgressColor[] / string[]` | - | - | - |
| status | 进度条状态 | `string` | success / danger / warning | - | - |
| duration | 进度增加 1%所需毫秒数 | `number` | - | 30 | - |
### ProgressColor
| 字段 | 说明 | 说明 | 最低版本 |
| ---------- | ------ | ------ | -------- |
| color | string | 颜色 | - |
| percentage | number | 百分比 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/radio.md'
---
# Radio 单选框
单选框,用于在一组备选项中进行单选。
## 基本用法
`v-model` 为绑定值,即选中的 `wd-radio` 的 `value` 值。
```html
单选框1
单选框2
当前选中的值为:{{value}}
```
```typescript
const value = ref(1)
```
## 修改图标形状
修改 `shape` 属性,可选值为 'dot'、'button'、'check',默认为 'check'。
```html
沃特
商家后台
```
```typescript
const value = ref(1)
function change(e) {
console.log(e)
}
```
```html
沃特
商家后台
```
```typescript
const value = ref(1)
function change(e) {
console.log(e)
}
```
## 表单模式
设置 `cell` 属性,开启表单模式单选框组。
开启表单模式时,如果同时设置 `shape` 为 `button` 开启表单模式单选按钮组模式。
```html
选项一
选项二
选项三
选项四
选项五
选项六
选项七
```
```ts
const value = ref(1)
```
## 同行展示
设置 `inline` 属性,使单选框在同一行展示。
```html
单选框1
单选框2
```
```ts
const value = ref(1)
```
## 修改选中的颜色
设置 `checked-color` 属性。
```html
沃特
商家后台
```
```ts
const value = ref(1)
```
## 禁用
可以在 `radio-group` 上面设置 `disabled`,禁用所有单选框,也可以在单个单选框上面设置 `disabled` 属性,禁用某个单选框。
```html
沃特
商家后台
```
```ts
const value = ref(1)
```
## 尺寸
设置 `size` 属性,可选 `large`。
```html
沃特
商家后台
```
## Props优先级
radio设置的props优先级比radioGroup上设置的props优先级更高
```html
商家后台
沃特
商家智能
```
## RadioGroup Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| -------------- | --------------------------- | ------------------------- | -------------------- | ------- | ---------------- |
| v-model | 会自动选中value对应的单选框 | string / number / boolean | - | - | - |
| shape | 单选框形状 | string | dot / button / check | check | - |
| size | 设置大小 | string | large | - | - |
| checked-color | 选中的颜色 | string | - | #4D80F0 | - |
| disabled | 禁用 | boolean | - | false | - |
| max-width | 文字位置最大宽度 | string | - | - | - |
| inline | 同行展示 | boolean | - | false | - |
| cell | 表单模式 | boolean | - | false | - |
| icon-placement | 勾选图标对齐方式 | string | left / right/ auto | auto | 1.5.0 |
## RadioGroup Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | ----------- | -------- |
| change | 绑定值变化时触发 | `{ value }` | - |
## Radio Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | --------------------------------------------- | ------------------------- | -------------------- | ------- | -------- |
| value | 单选框选中时的值。会自动匹配radioGroup的value | string / number / boolean | - | - | - |
| shape | 单选框形状 | string | dot / button / check | check | - |
| checked-color | 选中的颜色 | string | - | #4D80F0 | - |
| disabled | 禁用 | boolean | - | false | - |
---
---
url: 'https://wot-design-uni.cn/component/rate.md'
---
# Rate 评分
用于快速的评价操作,或对评价进行展示。
## 基本用法
设置`v-model`分数,设置`num`总分数,默认为5分。
```html
```
```typescript
const value = ref(1)
function changeValue({ value }) {
console.log(value)
}
```
## 只读
设置 `readonly` 属性。
```html
```
## 禁用
设置 `disabled` 属性和`disabled-color`
```html
```
## 修改颜色
可以通过 `color` 属性修改未选中的颜色,`active-color` 修改选中的颜色。
```html
```
## 修改icon
可以通过 `icon` 属性修改未选中的图标,`active-icon` 修改选中的图标。
```html
```
## 修改大小、间隔
可以通过 `size` 属性修改图标的大小,`space` 修改图标之间的间隔。
```html
```
## 允许半选
设置 `allowHalf` 属性。
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|-----|------|-------|-------|--------|
| v-model | 当前分数 | number | - | - | - |
| num | 评分最大值 | number | - | 5 | - |
| readonly | 是否只读 | boolean | - | false | - |
| size | 图标大小 | string | - | 16px | - |
| space | 图标间距 | string | - | 4px | - |
| color | 未选中的图标颜色 | string | - | #E8E8E8 | - |
| active-color | 选中的图标颜色(支持传颜色数组,共有 2 个元素,为 2 个分段所对应的颜色) | string/array | - | linear-gradient(180deg, rgba(255,238,0,1) 0%,rgba(250,176,21,1) 100%) | - |
| icon | 未选中的图标类名 | string | - | wd-icon-star-on | - |
| active-icon | 选中的图标类名 | string | - | wd-icon-star-on | - |
| disabled | 是否禁用 | boolean | - | false | - |
| disabled-color | 禁用的图标颜色 | string | - | linear-gradient(315deg, rgba(177,177,177,1) 0%,rgba(199,199,199,1) 100%) | - |
| allow-half | 是否允许半选 | boolean | - | false | 1.7.0 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|---------|-----|-----|---------|
| change | 点击icon,修改分值事件 | `{ value }` | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/resize.md'
---
# Resize 监听元素尺寸变化
当组件包裹的文档流尺寸发生变化时,触发 `size` 事件。一般用于监听 dom 内容更新时导致的 dom 尺寸位置的变化,重新获取 dom 尺寸和位置,进行内容展示的计算操作。
## 基本用法
> 不要给此组件增加任何外部样式
```html
```
```typescript
const width = ref('')
const height = ref('')
onReady(() => {
setTimeout(() => {
width.value = '100px'
height.value = '100px'
}, 1500)
})
function handleResize(detail: Record) {
const { height, width, top, right, bottom, left } = detail
console.log(height, width, top, right, bottom, left)
}
```
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|--------|------|-----|---------|
| resize | 尺寸发生变化时触发 | `{width: number, height: number, top: number, right: number, bottom: number, left: number}` | - |
---
---
url: 'https://wot-design-uni.cn/component/search.md'
---
# Search 搜索框
搜索框组件,支持输入框聚焦、失焦、输入、搜索、取消、清空事件。
## 基本用法
`v-model`设置输入框绑定值、`focus`绑定聚焦事件、`change` 绑定输入事件,`blur`绑定失焦事件,`search` 绑定搜索事件,`cancel` 绑定取消事件,`clear` 绑定清空事件。
```html
```
```typescript
const value = ref('')
function focus() {
console.log('聚焦')
}
function blur() {
console.log('失焦')
}
function search() {
console.log('搜索')
}
function clear() {
console.log('重置')
}
function cancel() {
console.log('取消')
}
function change({ value }) {
console.log('输入', value)
}
```
## 浅色主题
设置 `light` 属性,将组件背景色和输入框背景色反转。
```html
```
## 输入框提示文案靠左
设置 `placeholder-left` 属性。
```html
```
## 隐藏取消按钮
设置 `hide-cancel` 属性。
```html
```
## 禁用
设置 `disabled` 属性。
```html
```
可以和 `hide-cancel` 结合使用,用于在本页只展示搜索框,当点击搜索框时,将页面路由切换进搜索页,在搜索页中再使用搜索功能。
```html
```
## 自定义左侧插槽
通过使用 `prefix` 插槽自定义搜索框左侧内容。
```html
{{ searchType }}
```
```typescript
const searchType = ref('全部')
const value = ref('')
const menu = ref([
{
content: '全部'
},
{
content: '订单号'
},
{
content: '退款单号'
}
])
function changeSearchType({ item, index }) {
searchType.value = item.content
}
```
```scss
.search-type {
position: relative;
height: 30px;
line-height: 30px;
padding: 0 8px 0 16px;
}
.search-type::after {
position: absolute;
content: '';
width: 1px;
right: 0;
top: 5px;
bottom: 5px;
background: rgba(0, 0, 0, 0.25);
}
.search-type {
:deep(.icon-arrow) {
display: inline-block;
font-size: 20px;
vertical-align: middle;
}
}
```
## 自定义文案
通过设置 `placeholder` 修改输入框提示文案,`cancel-txt` 修改取消按钮文案。
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------------- | ----------------------------------------------------------------------------------------- | --------------- | ------ | ------ | -------- |
| placeholder | 搜索框占位文本 | string | - | 搜索 | - |
| placeholder-left | placeholder 居左边 | boolean | - | false | - |
| cancel-txt | 搜索框右侧文本 | string | - | 取消 | - |
| light | 搜索框亮色(白色) | boolean | - | false | - |
| hide-cancel | 是否隐藏右侧文本 | boolean | - | false | - |
| disabled | 是否禁用搜索框 | boolean | - | false | - |
| maxlength | 原生属性,设置最大长度。-1 表示无限制 | string / number | - | -1 | - |
| v-model | 输入框内容,双向绑定 | string | - | - | - |
| ~~use-suffix-slot~~ | ~~是否使用输入框右侧插槽~~**(已废弃,将在下一个 minor 版本被移除,直接使用插槽即可)** | boolean | - | false | - |
| focus | 是否自动聚焦 | boolean | - | false | 0.1.63 |
| focusWhenClear | 是否在点击清除按钮时聚焦输入框 | boolean | - | false | 0.1.63 |
| placeholderStyle | 原生属性,指定 placeholder 的样式,目前仅支持color,font-size和font-weight | string | - | - | 1.6.0 |
| placeholderClass | 原生属性,指定 placeholder 的样式类 | string | - | - | 1.6.0 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------------------- | ----------- | -------- |
| focus | 输入框聚焦事件 | `{ value }` | - |
| blur | 监听输入框失焦事件 | `{ value }` | - |
| search | 监听输入框搜索事件 | `{ value }` | - |
| clear | 监听输入框清空按钮事件 | - | - |
| cancel | 监听输入框右侧文本点击事件 | `{ value }` | - |
| change | 监听输入框内容变化事件 | `{ value }` | - |
## Slots
| name | 说明 | 最低版本 |
| ------ | -------------------- | -------- |
| prefix | 输入框左侧自定义内容 | - |
| suffix | 输入框右侧自定义内容 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
| custom-input-class | input 外部自定义样式 | 1.6.0 |
---
---
url: 'https://wot-design-uni.cn/component/segmented.md'
---
# Segmented 分段器 0.1.23
分段器用于展示多个选项并允许用户选择其中单个选项。
## 何时使用
* 用于展示多个选项并允许用户选择其中单个选项;
* 当切换选中选项时,关联区域的内容会发生变化。
## 基本用法
通过 `options` 属性设置选项列表,通过 `v-model:value` 绑定当前选中项。
```vue
```
```ts
const list = ref(['评论', '点赞', '贡献', '打赏'])
const current = ref('点赞')
```
## 大型分段器
通过设置 `size` 属性为 `"large"`,创建一个大型分段器。
```html
```
## 小型分段器
通过设置 `size` 属性为 `"small"`,创建一个小型分段器。
```html
```
## 带振动效果的分段器
通过设置 `vibrate-short` 属性为 `true`,使手机在切换选项时产生短暂振动。
```html
```
## 禁用分段器
通过设置 `disabled` 属性为 `true`,禁用分段器。
```html
```
## 自定义渲染分段器标签
使用插槽 `label` 可以自定义渲染分段器的标签内容。
```html
{{ option.value }}
```
```ts
const list = ref([
{
value: '李雷',
disabled: false,
payload: {
avatar: 'https://registry.npmmirror.com/wot-design-uni-assets/*/files/redpanda.jpg'
}
},
{
value: '韩梅梅',
disabled: false,
payload: {
avatar: 'https://registry.npmmirror.com/wot-design-uni-assets/*/files/capybara.jpg'
}
}
])
```
```scss
.section {
width: 100%;
padding: 0 24rpx;
box-sizing: border-box;
&-slot {
padding: 4px;
}
}
```
## 在弹出框中使用
微信小程序端,在弹出框中使用本组件时,需要调用 `updateActiveStyle` 方法更新分段器样式,参见[常见问题](/guide/common-problems.html#%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%B8%8A%E4%BD%BF%E7%94%A8popup%E3%80%81actionsheet%E3%80%81dropdownitem%E7%AD%89%E5%BC%B9%E5%87%BA%E6%A1%86%E7%BB%84%E4%BB%B6%E5%8C%85%E8%A3%B9slider%E3%80%81tabs%E7%AD%89%E7%BB%84%E4%BB%B6%E6%97%B6-slider%E3%80%81tabs%E8%A1%A8%E7%8E%B0%E5%BC%82%E5%B8%B8)。
```html
打开弹窗
在弹出框中使用
```
```ts
const list = ref(['评论', '点赞', '贡献', '打赏'])
const current = ref('点赞')
const segmentedRef = ref() // 获取分段器实例
const showPopup = ref(false) // 控制popup显示
/**
* 点击按钮打开popup
*/
function handleClick() {
showPopup.value = true
}
/**
* popup打开后更新分段器样式
*/
function handlePopupShow() {
segmentedRef.value?.updateActiveStyle()
}
```
```css
.title {
display: flex;
font-size: 32rpx;
align-items: center;
justify-content: center;
padding: 24rpx 0;
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------------- | ------------------ | ------------------------------------------- | ------------------------------ | -------- | -------- |
| value/v-model:value | 当前选中的值 | string / number | - | - | 0.1.23 |
| disabled | 是否禁用分段器 | boolean | true / false | `false` | 0.1.23 |
| size | 控件尺寸 | string | `large` / `middle` / `small` | `middle` | 0.1.23 |
| options | 数据集合 | `string[] / number[] / SegmentedOption[]` | - | \[] | 0.1.23 |
| vibrateShort | 切换选项时是否振动 | boolean | true / false | `false` | 0.1.23 |
### SegmentedOption
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| -------- | -------- | ---------------- | ------------- | ------ | -------- |
| value | 选中值 | string / number | - | - | 0.1.23 |
| disabled | 是否禁用 | boolean | true / false | - | 0.1.23 |
| payload | 更多数据 | any | - | - | 0.1.23 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------- | ----------------- | -------- |
| change | 选项切换时触发 | `SegmentedOption` | 0.1.23 |
| click | 选项点击时触发 | `SegmentedOption` | 1.2.20 |
## Methods
对外暴露函数
| 事件名称 | 说明 | 参数 | 最低版本 |
| ----------------- | --------------------------------------------------------- | ------------------------------ | -------- |
| updateActiveStyle | 更新滑块偏移量,参数`animation`用于是否开启动画,默认开启 | `(animation: boolean) => void` | - |
## Slots
| name | 说明 | 参数 | 最低版本 |
| ----- | ------------ | ----------------------------- | -------- |
| label | 选项标签内容 | `{ option: SegmentedOption }` | 0.1.23 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ----------- | ------------ | -------- |
| customStyle | 自定义样式 | 0.1.23 |
| customClass | 自定义样式类 | 0.1.23 |
---
---
url: 'https://wot-design-uni.cn/component/select-picker.md'
---
# SelectPicker 单复选选择器 0.1.34 更新
用于从一组选项中进行单选或多选。
## 基本用法
`label` 设置左侧文本内容;
`columns` 设置数据源,一维数组,每个选项包含 `value`(选项值) 和 `label`(选项名称);
`v-model` 设置选中项的值,数据类型为 `Array` | `String` `Number` 或 `Boolean`;
```html
```
```typescript
const columns = ref>([
{
value: '101',
label: '男装'
},
{
value: '102',
label: '奢侈品'
},
{
value: '103',
label: '女装'
}
])
const value = ref(['101'])
function handleChange({ value }) {
toast.show('选择了' + value)
}
```
## 类型切换
`type` 默认值为 `checkbox`, 为默认值时,value 值类型为 `Array` 类型
设置 `type` 值为 `radio` ,开启单选类型,value 值类型为 `String` `Number` 或 `Boolean`。
```html
```
```typescript
const columns = ref>([
{
value: '101',
label: '男装'
},
{
value: '102',
label: '奢侈品'
},
{
value: '103',
label: '女装'
}
])
const value = ref(['101'])
```
## 禁用
设置 `disabled` 属性。
```html
```
## 只读
设置 `readonly` 属性。
```html
```
## 清空
设置 `clearable` 属性
```html
```
## 禁用选项
`columns` 每个选项支持 `disabled` 属性。
```html
```
```typescript
const columns = ref>([
{
value: '101',
label: '男装',
disabled: true
},
{
value: '102',
label: '奢侈品'
},
{
value: '103',
label: '女装'
}
])
const value = ref(['101'])
```
## 展示格式化
设置 `display-format` 属性,其类型为 `function`,接收当前选中项(当类型`checkbox`时 参数是 数组类型,类型为`radio` 时参数是 `String` `Number` 或 `Boolean` 类型), 当前的选项数组 `columns`,返回要展示的字符串。
```html
```
```typescript
const columns = ref>([
{
value: '101',
label: '男装',
disabled: true
},
{
value: '102',
label: '奢侈品'
},
{
value: '103',
label: '女装'
}
])
const value = ref(['101'])
const displayFormat = (items, columns) => {
let showValue = ''
columns.forEach((column) => {
items.forEach((item, index) => {
if (column.value === item) {
showValue += `${item}: ${column.label} ${index + 1 < items.length ? '--' : ''} `
}
})
})
return showValue
}
```
## 确定前校验
设置 `before-confirm` 函数,在用户点击`确定`按钮时,会执行 `before-confirm` 函数,并传入`value`(选中项 也就是当前选择的值) 和 `resolve` 参数,可以对 `value` 进行校验,并通过 `resolve` 函数告知组件是否确定通过,`resolve` 接受 1 个 boolean 值,`resolve(true)` 表示选项通过,`resolve(false)` 表示选项不通过,不通过时不会关闭弹窗。
```html
```
```typescript
const columns = ref>([
{
value: '101',
label: '男装'
},
{
value: '102',
label: '奢侈品'
},
{
value: '103',
label: '女装'
}
])
const value = ref(['101'])
const beforeConfirm = (value, resolve) => {
if (value.length > 0) {
toast.error('暂时无法选择商品')
resolve(false)
} else {
resolve(true)
}
}
```
## 设置标题
设置 `title` 属性,修改弹出层的标题。
```html
```
## 错误状态
设置 `error` 属性,选择器的值显示为红色。
```html
```
## 必填样式
设置 `required` 属性,展示必填样式。
```html
```
## 选择器大小
通过设置 `size` 修改选择器大小,将 `size` 设置为 'large' 时字号为 16px。
```html
```
## 值靠右展示
设置 `align-right` 属性,选择器的值靠右展示。
```html
```
## 可搜索
设置 `filterable` 属性支持本地搜索,设置 `filter-placeholder` 属性设置搜索框的占位符。
```html
```
## 自动完成
`radio`类型,设置 `show-confirm` 属性支持控制确认按钮的显示,设置为`false`可自动完成。
```html
```
## 自定义选择器
如果默认的 cell 类型的展示格式不满足需求,可以通过默认插槽进行自定义选择器样式。
```html
当前选中项:{{customShow}}
默认唤起项
```
```typescript
const value = ref(['102'])
const columns = ref>([
{
value: '101',
label: '男装'
},
{
value: '102',
label: '奢侈品'
},
{
value: '103',
label: '女装'
},
{
value: '104',
label: '鞋靴'
},
{
value: '105',
label: '内衣配饰'
},
{
value: '106',
label: '箱包'
},
{
value: '107',
label: '美妆护肤'
},
{
value: '108',
label: '个性清洁'
},
{
value: '109',
label: '钟表珠宝'
},
{
value: '110',
label: '手机'
},
{
value: '111',
label: '数码'
},
{
value: '112',
label: '电脑办公'
}
])
function handleConfirm({ value, selectedItems }) {
console.log(value)
customShow.value = selectedItems
.map((item) => {
return item.label
})
.join(', ')
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------------------- | -------------------------------------------------------------------------------------------------------- | --------------------------------- | ---------------- | -------- | ---------------- |
| v-model | 选中项,`type`类型为`checkbox`时,类型为 array;`type`为`radio` 时 ,类型为 number / boolean / string | array / number / boolean / string | - | - | - |
| columns | 选择器数据,一维数组 | array | - | - | - |
| type | 单复选选择器类型 | string | checkbox / radio | checkbox | - |
| value-key | 选项对象中,value 对应的 key | string | - | value | - |
| label-key | 选项对象中,展示的文本对应的 key | string | - | label | - |
| title | 弹出层标题 | string | - | - | - |
| label | 选择器左侧文案 | string | - | - | - |
| placeholder | 选择器占位符 | string | - | 请选择 | - |
| disabled | 禁用 | boolean | - | false | - |
| loading | 加载中 | boolean | - | false | - |
| loading-color | 加载的颜色,只能使用十六进制的色值写法,且不能使用缩写 | String | - | #4D80F0 | - |
| readonly | 只读 | boolean | - | false | - |
| display-format | 自定义展示文案的格式化函数,返回一个字符串 | function | - | - | - |
| confirm-button-text | 确认按钮文案 | string | - | 确认 | - |
| size | 设置选择器大小 | string | large | - | - |
| label-width | 设置左侧标题宽度 | string | - | 33% | - |
| error | 是否为错误状态,错误状态时右侧内容为红色 | boolean | - | false | - |
| required | 必填样式 | boolean | - | false | - |
| align-right | 选择器的值靠右展示 | boolean | - | false | - |
| before-confirm | 确定前校验函数,接收 (value, resolve) 参数,通过 resolve 继续执行 picker,resolve 接收 1 个 boolean 参数 | function | - | - | - |
| select-size | 设置 picker 内部的选项组尺寸大小 (单/复选框) | string | large | - | - |
| min | 最小选中的数量(仅在复选框类型下生效,`type`类型为`checkbox`) | number | - | 0 | - |
| max | 最大选中的数量,0 为无限数量,默认为 0(仅在复选框类型下生效,`type`类型为`checkbox`) | number | - | 0 | - |
| checked-color | 选中的颜色(单/复选框) | string | - | #4D80F0 | - |
| use-default-slot | 使用默认插槽时设置该选项 | boolean | - | false | - |
| use-label-slot | 使用 label 插槽时设置该选项 | boolean | - | false | - |
| close-on-click-modal | 点击遮罩是否关闭 | boolean | - | true | - |
| z-index | 弹窗层级 | number | - | 15 | - |
| safe-area-inset-bottom | 弹出面板是否设置底部安全距离(iphone X 类型的机型) | boolean | - | true | - |
| filterable | 可搜索(目前只支持本地搜索) | boolean | - | false | - |
| filter-placeholder | 搜索框占位符 | string | - | 搜索 | - |
| ellipsis | 是否超出隐藏 | boolean | - | false | - |
| scroll-into-view | 重新打开是否滚动到选中项 | boolean | - | true | 0.1.34 |
| show-confirm | 是否显示确认按钮(仅`radio`类型生效) | boolean | | true | 1.2.8 |
| prop | 表单域 `model` 字段名,在使用表单校验功能的情况下,该属性是必填的 | string | - | - | - |
| rules | 表单验证规则,结合`wd-form`组件使用 | `FormItemRule []` | - | `[]` | - |
| clearable | 显示清空按钮 | boolean | - | false | 1.3.13 |
### FormItemRule 数据结构
| 键名 | 说明 | 类型 |
| --------- | ------------------------------------------------------- | ------------------------------------- |
| required | 是否为必选字段 | `boolean` |
| message | 错误提示文案 | `string` |
| validator | 通过函数进行校验,可以返回一个 `Promise` 来进行异步校验 | `(value, rule) => boolean \| Promise` |
| pattern | 通过正则表达式进行校验,正则无法匹配表示校验不通过 | `RegExp` |
## 选项数据结构
| 键名 | 说明 | 类型 | 是否必填 | 最低版本 |
| -------- | -------- | ------- | -------- | -------- |
| value | 选项值 | string | 是 | - |
| label | 选项名 | string | 是 | - |
| disabled | 禁用选项 | boolean | 否 | - |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------------------- | ---------------------------------------------------------------------------------------------------------- | -------- |
| confirm | 点击确认时触发 | event.detail = { value, selectedItems }, checkbox 类型时 value 和 selectedItems 为数组,radio 类型为非数组 | - |
| change | picker 内选项更改时触发 | `{ value }`, checkbox 类型时 value 为数组,radio 类型为非数组 | - |
| cancel | 点击关闭按钮或者蒙层时触发 | - | - |
| close | 弹窗关闭时触发 | - | 1.2.29 |
| open | 弹窗打开时触发 | - | 1.2.29 |
| clear | 点击清空按钮时触发 | - | 1.3.13 |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
| -------- | -------- | ---- | -------- |
| open | 打开弹窗 | - | - |
| close | 关闭弹窗 | - | - |
## Slots
| 插槽名称 | 说明 | 最低版本 |
| -------- | ---------- | -------- |
| default | 自定义展示 | - |
| label | 左侧插槽 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| -------------------- | ------------------------ | -------- |
| custom-class | 根节点样式 | - |
| custom-label-class | label 外部自定义样式 | - |
| custom-value-class | value 外部自定义样式 | - |
| custom-content-class | 弹出层内容区域自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/sidebar.md'
---
# Sidebar 侧边导航 0.1.49
垂直展示的导航栏,用于在不同的内容区域之间进行切换。
## 基础用法
通过 `v-model` 绑定当前选中项的索引。
```html
```
```typescript
const active = ref(0)
```
## 徽标提示
设置 `is-dot` 属性后,会在右上角展示一个小红点;设置 `badge` 属性后,会在右上角展示相应的徽标。
```html
```
## 禁用选项
通过 `disabled` 属性禁用选项。
```html
```
## 监听切换事件
设置 `change` 方法来监听切换导航项时的事件。
```html
```
```typescript
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
const active = ref(1)
function handleChange({ value, label }) {
toast.show(`当前标签名 ${label}`)
}
```
## 异步切换
通过 `before-change` 属性可以在切换标签前执行特定的逻辑。它接收 `{ value, resolve }` 参数,通过 `resolve` `继续执行,resolve` 接收 1 个 boolean 参数
```html
```
```typescript
import { useToast } from '@/uni_modules/wot-design-uni'
import type { SidebarBeforeChange } from '@/uni_modules/wot-design-uni/components/wd-sidebar/types'
import { ref } from 'vue'
const { loading: showLoading, close: closeLoading } = useToast()
const toast = useToast()
const active = ref(1)
const beforeChange: SidebarBeforeChange = ({ value, resolve }) => {
showLoading('切换中')
setTimeout(() => {
closeLoading()
resolve(true)
}, 2000)
}
```
## 锚点用法示例
sidebar 组件的锚点用法可以帮助用户在长页面上快速导航到特定的部分。
::: details 查看锚点用法示例
::: code-group
```html [vue]
```
```typescript [typescript]
```
```css [css]
.wraper {
display: flex;
height: calc(100vh - var(--window-top));
height: calc(100vh - var(--window-top) - constant(safe-area-inset-bottom));
height: calc(100vh - var(--window-top) - env(safe-area-inset-bottom));
}
.content {
flex: 1;
background: #fff;
}
```
:::
## 切换页面用法示例
sidebar 组件在每次切换激活项时,跳转到指定的页面,且无法通过滚动导航到下一个 sidebar 项。
::: details 查看切换页面用法示例
::: code-group
```html [vue]
```
```typescript [typescript]
```
```css [css]
.wraper {
display: flex;
height: calc(100vh - var(--window-top));
height: calc(100vh - var(--window-top) - constant(safe-area-inset-bottom));
height: calc(100vh - var(--window-top) - env(safe-area-inset-bottom));
overflow: hidden;
}
.content {
flex: 1;
background: #fff;
transition: transform 0.3s ease;
}
.category {
box-sizing: border-box;
height: 100%;
}
```
:::
## 自定义图标用法示例
设置`sidebar-item`的`icon`属性,自定义图标。
::: details 自定义图标用法示例
::: code-group
```html [vue]
```
```typescript [typescript]
```
```css [css]
.wraper {
display: flex;
height: calc(100vh - var(--window-top));
height: calc(100vh - var(--window-top) - constant(safe-area-inset-bottom));
height: calc(100vh - var(--window-top) - env(safe-area-inset-bottom));
}
.content {
flex: 1;
background: #fff;
}
```
:::
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | ------ | ------ | ---------------- |
| modelValue / v-model | 当前导航项的索引 | string / number | - | 0 | 0.1.49 |
| before-change | 切换导航项前钩子,可以在切换标签前执行特定的逻辑,接收 { value, resolve } 参数,通过 resolve 继续执行,resolve 接收 1 个 boolean 参数 | function | - | - | 1.4.0 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------- | ------------------------------------------ | -------- |
| change | 选项切换时触发 | `(value: number \| string, label: string)` | 0.1.49 |
## Slots
| name | 说明 | 参数 | 最低版本 |
| ------- | ---------- | ---- | -------- |
| default | 自定义展示 | - | 0.1.49 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ----------- | ------------ | -------- |
| customStyle | 自定义样式 | 0.1.49 |
| customClass | 自定义样式类 | 0.1.49 |
## SidebarItem Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----------- | ---------------------------------------------------------------------------------------- | -------------------------- | ------ | ------ | -------- |
| label | 当前选项标题 | string | - | - | 0.1.49 |
| value | 当前选项的值,唯一标识 | `number / string` | - | - | 0.1.49 |
| icon | 图标 | string | - | - | 0.1.49 |
| badge | 徽标属性,徽标显示值 | `number / string / null` | - | - | 0.1.49 |
| isDot | 徽标属性,是否点状徽标 | boolean | - | false | 0.1.49 |
| max | 徽标属性,徽标最大值 | number | - | 99 | 0.1.49 |
| disabled | 是否禁用 | boolean | - | false | 0.1.49 |
| badge-props | 自定义徽标的属性,传入的对象会被透传给 [Badge 组件的 props](/component/badge#attributes) | BadgeProps | - | - | 0.1.50 |
## SidebarItem Slots
| name | 说明 | 参数 | 最低版本 |
| ---- | ---------- | ---- | -------- |
| icon | 自定义图标 | - | 0.1.49 |
## SidebarItem 外部样式类
| 类名 | 说明 | 最低版本 |
| ----------- | ------------ | -------- |
| customStyle | 自定义样式 | 0.1.49 |
| customClass | 自定义样式类 | 0.1.49 |
---
---
url: 'https://wot-design-uni.cn/component/signature.md'
---
# Signature 签名 1.6.0
用于签名场景,基于 Canvas 实现的签名组件。提供了基础签名、历史记录、笔锋效果等功能。
:::tip 提醒
如果遇到导出图片不清晰,可以将 `exportScale` 设置为 `2` 以上。
:::
## 基础用法
基础的电子签名功能。签名完成后会使用预览组件显示签名图片。
```html
```
```typescript
const img = ref>({})
function confirm(result: SignatureResult) {
if (result.success) {
uni.previewImage({
urls: [result.tempFilePath]
})
}
}
function clear() {
img.value = {}
}
```
## 历史记录
通过 `enable-history` 开启历史记录功能,可以进行撤销和恢复操作。
```html
```
## 笔锋模式
通过 `pressure` 开启笔锋模式,模拟真实书写效果。笔锋模式下笔画粗细会随书写速度变化。
### 基础笔锋效果
```html
```
:::tip 使用建议
1. 笔锋模式推荐参数范围:
* min-width: 1-2
* max-width: 4-6
* min-speed: 1-2
2. max-width 和 min-width 的差值建议保持在 3-5 之间
3. min-speed 值越小,压感越灵敏,建议根据实际书写习惯调整
4. 对于签名场景,建议将画布高度设置在 300-400 之间
:::
### 自定义笔锋参数
可以通过以下属性精确控制笔锋效果:
* `min-width`: 最小笔画宽度,快速书写时的线条粗细
* `max-width`: 最大笔画宽度,慢速书写时的线条粗细
* `min-speed`: 速度阈值,用于调整压感灵敏度
```html
快速书写产生细线条,慢速书写产生粗线条
```
### 笔锋模式 + 历史记录
笔锋模式可以与历史记录功能结合使用,支持对带有笔锋效果的线条进行撤销和恢复操作。
```html
结合历史记录,支持笔锋效果的撤销与恢复
```
## 自定义功能
### 自定义按钮
通过 `footer` 插槽自定义底部按钮。
```html
开始签名
撤回
恢复
清除
确定
```
```typescript
const disabled = ref(true)
function changeDisabled() {
disabled.value = false
}
```
### 自定义画笔
可以自定义画笔的颜色和宽度。
```html
```
### 弹窗中使用
结合 `wd-popup` 组件在弹窗中使用签名板。建议使用 `after-enter` 事件调用签名板的 `init` 方法以确保正确初始化。
```html
打开签名板
```
```typescript
import { ref } from 'vue'
import type { SignatureInstance, SignatureResult } from '@/uni_modules/wot-design-uni/components/wd-signature/types'
const show = ref(false)
const img = ref>({})
const signatureRef = ref()
function handleConfirm(result: SignatureResult) {
show.value = false
if (result.success) {
uni.previewImage({
urls: [result.tempFilePath]
})
}
}
```
```scss
.popup-footer {
margin-top: 16px;
display: flex;
justify-content: flex-end;
gap: 12px;
}
```
:::tip 提示
弹窗中使用签名板时,建议:
1. 开启 `closable` 显示关闭按钮
2. 设置 `safe-area-inset-bottom` 以适配底部安全区
3. 使用 `custom-style` 调整弹窗内边距,为关闭按钮留出空间
4. 在弹窗的 `after-enter` 事件中调用签名板的 `init` 方法,确保正确初始化
:::
### 横屏签名页面
可以通过配置页面的 `pageOrientation` 来实现横屏签名页面。
```json
// pages.json
{
"pages": [
{
"path": "pages/signature-landscape/Index",
"style": {
"navigationBarTitleText": "横屏签名",
"pageOrientation": "landscape"
}
}
]
}
```
```html
```
:::tip 提示
横屏签名页面的建议:
1. 使用 `pageOrientation: "landscape"` 强制横屏显示
2. 动态计算画布尺寸以适配不同设备
3. 注意横屏时 windowWidth 和 windowHeight 的对调
4. 建议开启笔锋模式提供更好的签名体验
:::
### 横屏签名
支持以下两种横屏签名实现方案:
#### 1. 通用横屏方案 (推荐)
通过自定义布局和按钮旋转实现横屏效果,适用于所有平台。
```html
撤回
恢复
清除
完成
```
```ts
import { pause } from '@/uni_modules/wot-design-uni/components/common/util'
const height = ref(0)
const width = ref(0)
const inited = ref(false)
onMounted(() => {
const { windowWidth, windowHeight } = uni.getSystemInfoSync()
width.value = windowWidth - 48
height.value = windowHeight - 48
pause(100).then(() => {
inited.value = true
})
})
```
```scss
.landscape-signature {
height: 100vh;
// #ifdef H5
height: calc(100vh - 44px);
// #endif
background: #fff;
position: relative;
padding: 24px 0;
padding-left: 48px;
box-sizing: border-box;
.custom-actions {
position: fixed;
left: 0;
top: 50%;
width: 48px;
transform: translateY(-50%) rotate(90deg);
transform-origin: center;
z-index: 10;
.button-group {
display: flex;
flex-direction: row;
gap: 12px;
white-space: nowrap;
width: max-content;
transform: translateX(-50%);
}
}
}
```
:::tip 实现说明
通用横屏方案特点:
1. 使用 fixed 布局配合旋转实现左侧垂直按钮栏
2. 通过 footer 插槽自定义操作按钮
3. 使用 transform 实现按钮的旋转效果
4. 适用于所有平台,实现方式一致
5. 建议使用 inited 变量配合延迟加载避免画布初始化问题
:::
#### 2. 原生横屏方案 (仅微信小程序)
微信小程序提供了原生的横屏支持,使用时需要注意区分平台:
```json
{
"path": "pages/signature/landscape",
"style": {
"navigationBarTitleText": "横屏签名",
// #ifdef MP-WEIXIN
"pageOrientation": "landscape"
// #endif
}
}
```
```html
```
```ts
import { pause } from '@/uni_modules/wot-design-uni/components/common/util'
const height = ref(0)
const width = ref(0)
const inited = ref(false)
onMounted(() => {
const { windowWidth, windowHeight } = uni.getSystemInfoSync()
width.value = windowWidth
height.value = windowHeight - 60 // 预留底部按钮空间
pause(100).then(() => {
inited.value = true
})
})
```
```scss
.landscape-signature {
height: 100vh;
background: #fff;
position: relative;
box-sizing: border-box;
// #ifdef MP-WEIXIN
padding: 0;
display: flex;
flex-direction: column;
.weixin-actions {
padding: 12px;
background-color: #f8f8f8;
.button-group {
display: flex;
justify-content: center;
gap: 12px;
}
}
// #endif
}
```
:::warning 注意事项
1. `pageOrientation` 配置仅在微信小程序端生效
2. 使用条件编译区分不同平台的布局结构
3. 微信小程序页面会自动旋转,按钮布局不需要特殊处理
4. 预留底部按钮空间时需要考虑横屏布局
5. 其他平台请使用通用横屏方案
:::
## Attributes
| 参数 | 说明 | 类型 | 默认值 | 最低版本 |
|------|------|------|--------|----------|
| pen-color | 签名笔颜色 | string | #000000 | - |
| line-width | 签名笔宽度 | number | 3 | - |
| height | 画布的高度 | number | 200 | - |
| width | 画布的宽度 | number | 300 | - |
| clear-text | 清空按钮的文本 | string | - | - |
| confirm-text | 确认按钮的文本 | string | - | - |
| file-type | 导出图片类型 | string | png | - |
| quality | 导出图片质量(0-1) | number | 1 | - |
| export-scale | 导出图片的缩放比例 | number | 1 | - |
| disabled | 是否禁用签名板 | boolean | false | - |
| background-color | 画板的背景色 | string | - | - |
| disable-scroll | 是否禁用画布滚动 | boolean | true | - |
| enable-history | 是否开启历史记录 | boolean | false | 1.8.0 |
| step | 历史记录步长 | number | 1 | 1.8.0 |
| pressure | 是否启用笔锋模式 | boolean | false | 1.8.0 |
| min-width | 笔锋模式最小宽度 | number | 2 | 1.8.0 |
| max-width | 笔锋模式最大宽度 | number | 6 | 1.8.0 |
| min-speed | 笔锋模式速度阈值 | number | 1.5 | 1.8.0 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|---------|------|------|----------|
| start | 开始签名时触发 | event: TouchEvent | - |
| end | 结束签名时触发 | event: TouchEvent | - |
| signing | 签名过程中触发 | event: TouchEvent | - |
| confirm | 确认签名时触发 | result: SignatureResult | - |
| clear | 清空签名时触发 | - | - |
## Methods
| 方法名 | 说明 | 参数 | 最低版本 |
|--------|------|------|----------|
| init | 初始化签名板 | forceUpdate?: boolean | - |
| confirm | 确认签名 | - | - |
| clear | 清空签名 | - | - |
| restore | 恢复上一步 | - | - |
| revoke | 撤销上一步 | - | - |
## Slots
| 名称 | 说明 | 参数 | 最低版本 |
|------|------|------|----------|
| footer | 自定义底部按钮 | `{ clear, confirm, restore, revoke, currentStep, historyList }` | - |
---
---
url: 'https://wot-design-uni.cn/component/skeleton.md'
---
# Skeleton 骨架屏
用于等待加载内容所展示的占位图形组合,有动态效果加载效果,减少用户等待焦虑。
## 骨架图风格
支持 `avatar`、`image`、`text`、`paragraph` 四种类型。
```html
// 头像骨架屏
// 图片骨架屏
// 文本骨架屏
// 段落骨架屏
```
## 宫格骨架屏
```html
```
```ts
const grid = [
[
{ width: '48px', height: '48px' },
{ width: '48px', height: '48px' },
{ width: '48px', height: '48px' },
{ width: '48px', height: '48px' },
{ width: '48px', height: '48px' }
],
[
{ width: '48px', height: '16px' },
{ width: '48px', height: '16px' },
{ width: '48px', height: '16px' },
{ width: '48px', height: '16px' },
{ width: '48px', height: '16px' }
]
]
```
## 单元格骨架屏
```html
```
## 图片组合骨架屏
```html
```
```ts
const imageGroup = [
{ height: '171px' }, 1, { width: '107px' },
[{ width: '93px' }, { width: '32px', marginLeft: '41px' }]
]
```
## 加载动画
支持 `gradient`、`flashed`
```html
```
## 插槽内容
可以通过插槽写入展示的内容,当请求结束,将loading设置为false,此时会隐藏骨架组件,同时展示插槽内容。
```html
```
```js
const showContent = ref(true)
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | ----------------------------------- | ------ | -------- |
| theme | 骨架图风格 | SkeletonTheme | `text` `avatar` `paragraph` `image` | - | - |
| rowCol | 用于设置行列数量、宽度高度、间距等【示例一】`[1, 1, 2]` 表示输出三行骨架图,第一行一列,第二行一列,第三行两列。 【示例二】`[1, 1, { width: '100px' }]` 表示自定义第三行的宽度为 `100px`。 【示例三】`[1, 2, [{ width, height }, { width, height, marginLeft }]]` 表示第三行有两列,且自定义宽度、高度和间距 | SkeletonRowCol | - | - | - |
| loading | 是否为加载状态,如果是则显示骨架图,如果不是则显示加载完成的内容 | boolean | - | true | - |
| animation | 动画效果 | SkeletonAnimation | `gradient` `flashed` | - | - |
## Slots
| name | 说明 | 最低版本 |
| ------- | --------------------- | ---------------- |
| default | loading结束后展示内容 | 1.2.21 |
---
---
url: 'https://wot-design-uni.cn/component/slider.md'
---
# Slider 滑块
支持单向滑块和双向滑块。
## 基本用法
`v-model` 为绑定值。如果为 number 类型则显示一个滑块,如果为 array 类型则显示两个滑块。
```html
```
```typescript
const value = ref(30)
```
## 双滑块
双滑块模式下 `value` 为 `二元数组` 类型。
```html
```
```typescript
const value = ref([10, 30])
```
## 最大值最小值
设置 `min` 最小值,`min` 最大值。
```html
```
## 隐藏文案
设置 `hide-label` 隐藏滑块当前值。
```html
```
设置 `hide-min-max` 隐藏最大最小值。
```html
```
## 禁用
设置 `disabled` 属性。
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|---------------------------|-----|-------|-------|-------|
| v-model | 滑块值,如果为array,则为双向滑块 | number / array | - | - | - |
| hide-min-max | 是否显示左右的最大最小值 | boolean | - | false | - |
| hide-label | 是否显示当前滑块值 | boolean | - | false | - |
| disabled | 是否禁用 | boolean | - | false | - |
| max | 最大值 | number | - | 100 | - |
| min | 最小值,允许负数`(1.2.19)` | number | - | 0 | - |
| step | 步进值 | number | - | 1 | `1.2.19` |
| active-color | 进度条激活背景颜色 | string | - | linear-gradient(315deg, rgba(81,124,240,1) 0%,rgba(118,158,245,1) 100%) | - |
| inactive-color | 进度条未激活背景颜色 | string | - | #e5e5e5 | - |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|---------|-----|-----|---------|
| dragstart | 开始移动时触发 | `{ value }` | - |
| dragmove | 移动滑块时触发 | `{ value }` | - |
| dragend | 移动结束时触发 | `{ value }` | - |
## Methods
对外暴露函数
| 事件名称 | 说明 | 参数 | 最低版本 |
|--------|------|-----|---------|
| initSlider | 初始化slider宽度数据 | - | 1.2.25 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
| custom-min-class | 最小值自定义样式 | - |
| custom-max-class | 最大值自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/sort-button.md'
---
# SortButton 排序按钮
用于展示排序按钮,支持升序、降序、重置三种状态。
## 基本用法
使用`v-model` 绑定组件展示状态,其值为:`-1、0、1`,分别代表:降序、未选中状态、升序。 `title` 为展示文案,按钮默认处于未选中状态。
```html
```
```typescript
const value = ref(0)
function handleChange({ value }) {
console.log(value)
}
```
## 按钮重置
双箭头状态下(默认状态)通过设置 `allow-reset` 允许重置按钮为未选中状态
```html
```
## 优先切换为降序
通过设置 `desc-first` 优先切换为降序,默认为升序。
```html
```
## 取消展示下划线
当只有一个排序按钮时,应该不展示下划线,设置 `line` 属性为 `false`。
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|--------|
| v-model | 选中的箭头方向:1 升序,0 重置状态,-1 降序。 | number | -1,0,1 | 0或-1 | - |
| title | 排序按钮展示的文案。 | string | - | - | - |
| allow-reset | 展示双箭头时,允许手动重置按钮。 | boolean | - | false | - |
| desc-first | 优先切换为降序,不开启则默认优先切换为升序 | boolean | - | false | - |
| line | 展示下划线,当只有一个排序按钮时,应该不展示下划线 | boolean | - | true | - |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|---------|-----|-----|---------|
| change | 监听排序修改 | `{ value }` | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/status-tip.md'
---
# StatusTip 缺省提示
一般用于兜底占位展示。
::: warning 注意
本组件使用图片均为外链,***不保证稳定性***,推荐将图片下载到开发者的服务器后通过自定义图片`URL`或者自定义`url-prefix`使用。1.3.11版本开始支持自定义图片地址前缀`url-prefix`。
下载地址:
1. Github 仓库:
2. npm 地址:
* npm:
* 淘宝镜像:
:::
## 基本用法
设置 `image` 修改展示缺省图片类型,默认为 `network`,可选值 `search`, `network`, `content`, `collect`, `comment`, `halo`, `message`。可设置 `tip` 来控制展示提示文案。
```html
```
## 自定义大小
通过 `image-size` 属性图片的大小。
```html
```
## 自定义图片
需要自定义图片时,可以在 `image` 属性中传入任意图片 URL。
```html
```
## 自定义图片内容
使用插槽 `image` 可以自定义图片内容。
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------- | -------------------------------------------------- | ----------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------- | ---------------- |
| image | 缺省图片类型,支持传入图片 URL | string | search / network / content / collect / comment / halo / message | network | - |
| image-size | 图片大小,默认单位为 `px` | `string`/`number`/`ImageSize` | - | - | - |
| tip | 提示文案 | string | - | - | - |
| image-mode | 预览图片的 mode 属性 | `ImageMode` | - | aspectFit | 1.2.12 |
| url-prefix | 图片路径前缀,指向图片所在目录,用于拼接图片 URL。 | string | - | https://registry.npmmirror.com/wot-design-uni-assets/\*/files/ | 1.3.11 |
### ImageSize
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------ | ------------------------- | ---------------- | ------ | ------ | -------- |
| height | 图片高度,默认单位为 `px` | string / number | - | - | 1.2.12 |
| width | 图片宽度,默认单位为 `px` | string / number | - | - | 1.2.12 |
## Slot
| name | 说明 | 最低版本 |
| ------- | ------------------------ | -------- |
| image | 图片内容 | 1.3.12 |
---
---
url: 'https://wot-design-uni.cn/component/steps.md'
---
# Steps 步骤条
用于引导用户按照流程完成任务或向用户展示当前状态。
:::tip 破坏性更新提醒
`1.2.10`版本`step`组件废弃了`title-slot`、`icon-slot`和`description-slot`等三个控制插槽使用的字段,新增支持直接使用`title`、`icon`和`description`插槽,同时废弃了`default`插槽。
:::
## 基本用法
`active` 为步骤进度,为 number 类型,步骤的下标。
```html
```
```ts
const active = ref(0)
function nextStep() {
active.value = active.value + 1
}
```
## 水平居中
设置 `align-center` 水平居中,只对横向步骤条有效。
```html
```
## 设置标题和描述信息
可以通过 `title` 和 `description` 设置步骤的标题和描述信息。如果不设置标题,则会使用默认的文案。
```html
下一步
```
```ts
const active = ref(0)
function nextStep() {
active.value = active.value + 1
}
```
## 修改图标
可以通过 `icon` 属性设置步骤的图标,传入图标的名称,也可以通过 `icon` 的 slot 插槽自定义图标,使用插槽需要设置 `icon-slot` 为 `true`。
```html
```
## 竖向步骤条
设置 `vertical` 属性。
```html
```
## 点状步骤
设置 `dot` 属性。
```html
```
## 修改状态
设置 `status`,支持 'finished'(完成)、'process'(进行中)、'error'(失败) 三种状态。
```html
```
## Steps Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|--------|
| active | 步骤进度 | number | - | 0 | - |
| vertical | 垂直方向 | boolean | - | false | - |
| dot | 点状步骤条 | dot | - | false | - |
| space | 步骤条间距,默认为自动计算 | string | - | - | - |
| align-center | 是否水平居中,只对横向步骤条有效 | boolean | - | false | - |
## Step Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|--------|
| title | 标题,如果没有则为默认文案。当只有标题而没有描述时,标题的字号会小2号 | string | - | - | - |
| title-slot | 使用 title 插槽时需要设置该属性,已废弃,直接使用title插槽即可 | boolean | - | false | - |
| description | 描述 | string | - | - | - |
| description-slot | 使用 description 插槽时需要设置该属性,已废弃,直接使用description插槽即可 | boolean | - | false | - |
| icon | 图标 | string | - | - | - |
| icon-slot | 使用 icon 插槽时需要设置该属性,已废弃,直接使用icon插槽即可 | boolean | - | false | - |
| status | 步骤状态 | string | finished / process / error | - | - |
## Step Slot
| name | 说明 | 最低版本 |
|------|-----|---------|
| icon | 图标 | 1.2.10 |
| title | 标题 | 1.2.10 |
| description | 描述 | 1.2.10 |
## Steps 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|-----|---------|
| custom-class | 根节点样式 | - |
## Step 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/sticky.md'
---
# Sticky 粘性布局
粘性布局组件,用于在页面滚动时将元素固定在指定位置。
## 基本用法
将需要吸顶的内容包裹在 `wd-sticky` 组件内即可。
> 注意:被包裹的元素在样式中使用百分比单位 `width:xx%;height:xx%;` 无效,建议使用 `vh`、`vw`。
```html
基础用法
```
## 动态插入
`wd-sticky` 支持包裹动态生成的内容。
> 注意包裹动态生成的内容时,内容的宽高不小于 `1px`
```html
点击插入
动态插入
```
```typescript
const show = ref(false)
function display() {
show.value = true
}
onShow(() => {
setTimeout(display, 5000)
})
```
```scss
page{
height: 200vh;
}
```
## 吸顶距离
通过 `offset-top` 属性可以设置组件在吸顶时与顶部的距离。
::: tip 提醒
由于在`H5`端导航栏为普通元素,所以吸顶距离会自动在`offset-top`的基础上增加`44px`,当开发者在`H5`端使用自定义导航栏时`offset-top`就需要先减去`44`。例如期望吸顶距离为20px,那么`offset-top = 20 - 44 = -24`
:::
```html
吸顶距离
```
## 指定容器
将 `wd-sticky` 组件包裹在自定义容器内,之后再使用 `wd-sticky-box` 包裹自定义容器。
> 注意:被包裹的自定义容器在样式中使用百分比单位 `width:xx%;height:xx%;` 无效,建议使用 `vh`、`vw`。
```html
指定容器
```
```scss
.container{
height: 150px;width: 100vw;
}
```
## Sticky Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|--------|
| z-index | 堆叠顺序 | number | - | 1 | - |
| offset-top | 吸顶距离 | number | - | 0 | - |
## Sticky 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
## Sticky Box 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|------|--------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/swipe-action.md'
---
# SwipeAction 滑动操作
常用于单元格左右滑删除等手势操作。
:::warning
滑动操作组件对页面的功能隐藏较深,用户难以发现,建议使用其他交互方式来实现操作功能,比如列表项有个按钮,点击按钮弹出 ActionSheet。
如果坚持要使用滑动操作组件,建议在用户进入页面时加上操作提示以提示用户列表项可以左右滑动。
:::
## 基本用法
`wd-swipe-action`分为三部分:`自定义左按钮内容`、`自定义内容`、`自定义右按钮内容`。自定义按钮内容需要设置`slot`开启,自定义内容为默认插槽,无需手动开启。
因为`uni-app`组件无法监听点击自己以外的地方,为了在点击页面其他地方时,可以自动关闭 `swipeAction` ,建议使用组件库的 `useQueue` hook(会关闭所有 dropmenu、popover、toast、swipeAction、fab),在页面的根元素上监听点击事件的冒泡。
:::warning
如果存在用户手动点击 `swipeAction` 以外某个地方如按钮滑出 `swipeAction` 的场景,则需要在点击的元素(在这里上按钮)加上 @click 阻止事件冒泡到根元素上,避免触发 `closeOutside`把要手动打开的 `swipeAction` 关闭了。
:::
```html
操作1
操作2
操作3
```
```typescript
import { useToast, useQueue } from '@/uni_modules/wot-design-uni'
const { closeOutside } = useQueue()
const toast = useToast()
function handleAction(action: string) {
toast.show(`点击了${action}`)
}
```
```scss
.action {
height: 100%;
}
.button {
display: inline-block;
padding: 0 11px;
height: 100%;
color: white;
line-height: 42px;
}
```
## 左右滑动
> `wd-swipe-action`组件提供`left`/`right`两个滑动按钮,通过设置插槽`left`和`right`开启
```html
操作1
操作2
操作3
操作4
操作5
操作6
```
## 切换按钮
> 可以通过设置`v-model`来控制开启关闭滑动按钮,可选值为:`left`、`close`、`right`分别表示:"打开左滑动按钮"、"关闭滑动按钮""打开右滑动按钮"
```html
操作1
操作2
操作3
操作4
操作5
操作6
打开左边
关闭所有
打开右边
```
```typescript
const value = ref('close')
function changeState(position: string) {
value.value = position
}
```
## 按钮关闭前的钩子函数
> 通过`before-close`属性传入一个函数,注意传入的变量必须定义在`data`在。回调函数会在滑动按钮关闭前执行。
钩子函数接收两个参数:`reason`、`position`。
`reason`表示滑动按钮关闭的原因,值为:`click`、`swipe`、`value`,分别代表:点击关闭按钮、滑动关闭按钮、通过控制`value`关闭按钮;
`position`代表被关闭的操作按钮,值为:`left`、`right`。当`reason`为`click`时,表示点击`position`位置关闭滑动按钮,值为:`left`、`right`、`inside`。
```html
操作1
操作2
操作3
操作4
操作5
操作6
打开左边
关闭所有
打开右边
```
```typescript
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
const value = ref('close')
function changeState(position: string) {
value.value = position
}
const beforeClose = (reason, position) => {
if (reason === 'click') {
toast.show(`${reason} ${position}导致滑动按钮关闭`)
} else {
toast.show(`${reason}导致${position}滑动按钮关闭`)
}
}
```
## 点击事件
> `click`事件只会在关闭滑动按钮时触发。
回调函数的参数表示点击的位置,其中`left`、`right`表示点击了左右滑动按钮,`inside`表示点击了容器内按钮以外的地方。
```html
操作1
操作2
操作3
```
```typescript
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
function handleClick({ value }) {
toast.show(`点击${value}关闭操作按钮`)
}
```
## 禁用滑动按钮
> 设置`disabled`属性禁用滑动
```html
操作1
操作2
操作3
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------ | ------------------------ | -------- | -------------------- | ------ | -------- |
| v-model | 滑动按钮的状态 | string | left / close / right | close | - |
| disabled | 是否禁用滑动操作 | boolean | - | false | - |
| before-close | 关闭滑动按钮前的钩子函数 | function | - | - | - |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ----------------------------------------------------- | ----------------------------------------------------- | -------- |
| click | 当滑动按钮打开时,点击整个滑动操作容器触发 click 事件 | event={value}, value 可能为 'left'、'inside'、'right' | - |
## Slot
| name | 说明 | 最低版本 |
| ------- | ------------ | -------- |
| left | 自定义左按钮 | - |
| default | 自定义内容 | - |
| right | 自定义右按钮 | - |
## Cell 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/swiper.md'
---
# Swiper 轮播
用于创建轮播,它支持水平和垂直方向的滑动,可以自定义样式和指示器位置,支持视频和图片资源的轮播,支持设置轮播标题和自定义标题样式。
:::danger 请注意
嵌入视频仅在`h5`、`微信小程序`和`钉钉小程序`支持,其余端不支持,请了解后使用。
:::
## 基础用法
通过设置 `autoplay` 属性控制轮播图是否自动播放,设置 `v-model:current` 属性初始化轮播图展示的滑块,监听滑块 `click` 来处理点击事件,而每一页轮播结束后,会触发 `change` 事件。
```html
```
```ts
const current = ref(0)
const swiperList = ref([
'https://registry.npmmirror.com/wot-design-uni-assets/*/files/redpanda.jpg',
'https://registry.npmmirror.com/wot-design-uni-assets/*/files/capybara.jpg',
'https://registry.npmmirror.com/wot-design-uni-assets/*/files/panda.jpg',
'https://registry.npmmirror.com/wot-design-uni-assets/*/files/moon.jpg',
'https://registry.npmmirror.com/wot-design-uni-assets/*/files/meng.jpg'
])
function handleClick(e) {
console.log(e)
}
function onChange(e) {
console.log(e)
}
```
## 点条状指示器
```html
```
## 数字指示器
```html
```
## 视频轮播1.3.13
:::danger 请注意
嵌入视频仅在`h5`、`微信小程序`和`钉钉小程序`支持,其余端不支持,请了解后使用。
:::
```html
```
```ts
const videoList = ref([
'https://unpkg.com/wot-design-uni-assets@1.0.3/VID_115503.mp4',
'https://unpkg.com/wot-design-uni-assets@1.0.3/VID_150752.mp4',
'https://unpkg.com/wot-design-uni-assets@1.0.3/VID_155516.mp4',
'https://registry.npmmirror.com/wot-design-uni-assets/*/files/moon.jpg'
])
```
## 手动播放视频
```html
```
```ts
const videoList = ref([
'https://unpkg.com/wot-design-uni-assets/VID_115503.mp4',
'https://unpkg.com/wot-design-uni-assets/VID_150752.mp4',
'https://unpkg.com/wot-design-uni-assets/VID_155516.mp4'
])
```
## 播放视频时停止轮播
```html
```
```ts
const videoList = ref([
'https://unpkg.com/wot-design-uni-assets/VID_115503.mp4',
'https://unpkg.com/wot-design-uni-assets/VID_150752.mp4',
'https://unpkg.com/wot-design-uni-assets/VID_155516.mp4'
])
```
## 手动切换
```html
```
## 卡片样式
设置 `previousMargin` 和 `nextMargin` 实现卡片轮播的样式。
```html
```
```scss
.card-swiper {
--wot-swiper-radius: 0;
--wot-swiper-item-padding: 0 24rpx;
--wot-swiper-nav-dot-color: #e7e7e7;
--wot-swiper-nav-dot-active-color: #4d80f0;
padding-bottom: 24rpx;
:deep(.custom-indicator-class) {
bottom: -16px;
}
:deep(.custom-image) {
border-radius: 12rpx;
}
:deep(.custom-image-prev) {
height: 168px !important;
}
}
```
## 同时展示 2 个滑块
设置 `display-multiple-items` 属性,控制同时展示的滑块数量。
```html
```
```scss
.card-swiper {
--wot-swiper-radius: 0;
--wot-swiper-item-padding: 0 24rpx;
--wot-swiper-nav-dot-color: #e7e7e7;
--wot-swiper-nav-dot-active-color: #4d80f0;
padding-bottom: 24rpx;
:deep(.custom-indicator-class) {
bottom: -16px;
}
:deep(.custom-image) {
border-radius: 12rpx;
}
:deep(.custom-image-prev) {
height: 168px !important;
}
}
```
## 垂直方向
`direction` 设置为 `vertical` 后滑块会纵向排列。
```html
```
## 自定义指示器
通过 `indicator` 插槽可以自定义指示器的样式。
```html
{{ current + 1 }}/{{ total }}
```
```scss
.custom-indicator {
padding: 0 12rpx;
height: 48rpx;
line-height: 48rpx;
border-radius: 45%;
background: rgba(0, 0, 0, 0.6);
color: #ffffff;
font-size: 24rpx;
}
```
## 指定valueKey和textKey
通过`value-key` 属性指定 `list` 中每个对象图片地址字段,默认为 `value`。
通过`text-key` 属性指定 `list` 中每个对象标题字段,默认为 `text`。
:::tip 提示
当前`swiper`提供的标题样式为顶部靠右,如需自定义样式,请使用外部样式类`customTextClass`或者自定义样式`customTextStyle`,使用`text-key`时请确认你的组件库版本是否包含此功能。
:::
```html
```
```ts
const current = ref(0)
const customSwiperList = ref([
{ url: 'https://registry.npmmirror.com/wot-design-uni-assets/*/files/redpanda.jpg', title: '小熊猫!' },
{ url: 'https://registry.npmmirror.com/wot-design-uni-assets/*/files/capybara.jpg', title: '卡!皮!巴!拉!' },
{ url: 'https://registry.npmmirror.com/wot-design-uni-assets/*/files/panda.jpg', title: '大熊猫!' },
{ url: 'https://registry.npmmirror.com/wot-design-uni-assets/*/files/moon.jpg', title: '诗画中国!' }
])
```
```scss
:deep(.customTextClass) {
position: absolute;
top: 24rpx;
right: 24rpx;
color: #ffffff;
font-size: 24rpx;
text-shadow: 0 0 8rpx #000000;
}
```
## 属性控制切换
```html
prev
next
```
```javascript
const current = ref (0)
const isLoop = ref(false)
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------------------- | ------------------------------------------------------------------ | --------------------------------- | ------------------------------------------------------------------------------------------------------ | ------------ | ---------------- |
| autoplay | 是否自动播放 | `boolean` | - | true | 0.1.22 |
| v-model:current | 控制当前轮播在哪一项(下标) | `number` | - | 0 | 0.1.22 |
| direction | 轮播滑动方向 | `DirectionType` | `horizontal, vertical` | horizontal | 0.1.22 |
| displayMultipleItems | 同时显示的滑块数量 | `number` | - | 1 | 0.1.22 |
| duration | 滑动动画时长 | `number` | - | 300 | 0.1.22 |
| easingFunction | 切换缓动动画类型(微信小程序、快手小程序、京东小程序) | `EasingType` | - | default | 0.1.22 |
| height | 轮播的高度 | `string / number` | - | 192 | 0.1.22 |
| interval | 轮播间隔时间 | `number` | - | 5000 | 0.1.22 |
| list | 图片列表 | `string[] / SwiperList[]` | - | - | 0.1.22 |
| loop | 是否循环播放 | `boolean` | - | true | 0.1.22 |
| nextMargin | 后边距 | `string / number` | - | 0 | 0.1.22 |
| indicatorPosition | 指示器展示位置 | `IndicatorPositionType` | `left, top-left, top, top-right, bottom-left, bottom, bottom-right, right` | bottom | 0.1.22 |
| previousMargin | 前边距 | `string / number` | - | 0 | 0.1.22 |
| snapToEdge | 边距是否应用到第一个、最后一个元素 | `boolean` | - | false | 0.1.22 |
| indicator | 指示器全部配置 | `SwiperIndicatorProps / boolean` | - | true | 0.1.22 |
| imageMode | 图片裁剪、缩放的模式 | `string` | 参考官方文档[mode](https://uniapp.dcloud.net.cn/component/image.html#mode-%E6%9C%89%E6%95%88%E5%80%BC) | `aspectFill` | 0.1.55 |
| autoplayVideo | 视频是否自动播放,默认自动播放 | `boolean` | - | true | 1.3.13 |
| stopPreviousVideo | 切换轮播项时是否停止上一个视频的播放,默认切换时停止播放上一个视频 | `boolean` | - | true | 1.3.13 |
| stopAutoplayWhenVideoPlay | 视频播放时是否停止自动轮播 | `boolean` | - | false | 1.3.13 |
| customStyle | 外部自定义样式 | `string` | - | '' | 0.1.22 |
| value-key | 选项对象中,value 对应的 key | `string` | - | `value` | 1.3.7 |
| text-key | 选项对象中,标题 text 对应的 key | `string` | - | `text` | 1.3.13 |
| adjust-height | 自动以指定滑块的高度为整个容器的高度。当 vertical 为 true 时,默认不调整,仅支付宝小程序支持。| `string` | `'first' / 'current' / 'highest' / 'none'` | `highest` | 1.3.13 |
| adjust-vertical-height | vertical 为 true 时强制使 adjust-height 生效。仅支付宝小程序支持。 | `boolean` | - | `false` | 1.3.13 |
| muted | 视频是否静音播放 | `boolean` | - | `true` | 1.6.0 |
| videoLoop | 视频是否循环播放 | `boolean` | - | `true` | 1.6.0 |
### DirectionType
轮播滑动方向,可选值为 `'horizontal'` 和 `'vertical'`。
### EasingType
切换缓动动画类型,可选值为 `'default'`、`'linear'`、`'easeInCubic'`、`'easeOutCubic'` 和 `'easeInOutCubic'`。
### IndicatorPositionType
页码信息展示位置,可选值为 `'left'`、`'top-left'`、`'top'`、`'top-right'`、`'bottom-left'`、`'bottom'`、`'bottom-right'` 和 `'right'`。
### SwiperList
轮播图项的列表配置,包括 图片或视频地址`value`、视频封面`poster` 、文件资源的类型`type`等属性,支持扩展属性。指定`type`后组件将不在内部判断文件类型,以`type`为准。
| name | 说明 | 最低版本 |
| --------- | ------------ | -------- |
| value | 图片或视频地址 |- |
| poster | 视频封面 |- |
| type | 用于指定文件资源的类型,可选值`image`、`video` | 1.4.0 |
### SwiperIndicatorProps
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------------- | -------------------------- | --------------------- | -------------------------------------------------------------------------- | ---------- | -------- |
| current | 当前轮播在哪一项(下标) | Number | - | 0 | 0.1.22 |
| direction | 轮播滑动方向 | DirectionType | `horizontal, vertical` | horizontal | 0.1.22 |
| min-show-num | 小于这个数字不会显示导航器 | Number | - | 2 | 0.1.22 |
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------------- | -------------------------- | --------------------- | -------------------------------------------------------------------------- | ---------- | -------- |
| current | 当前轮播在哪一项(下标) | Number | - | 0 | 0.1.22 |
| direction | 轮播滑动方向 | DirectionType | `horizontal, vertical` | horizontal | 0.1.22 |
| min-show-num | 小于这个数字不会显示导航器 | Number | - | 2 | 0.1.22 |
| pagination-position | 页码信息展示位置 | IndicatorPositionType | `left, top-left, top, top-right, bottom-left, bottom, bottom-right, right` | bottom | 0.1.22 |
| show-controls | 是否显示控制按钮 | Boolean | - | false | 0.1.22 |
| total | 总共的项数 | Number | - | 0 | 0.1.22 |
| type | 导航器类型 | SwiperIndicatorType | `dots, dots-bar, fraction ` | dots | 0.1.22 |
| autoplay | 是否自动播放 | boolean | - | true | 0.1.22 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | ----------------------------------------------------------- | -------- |
| click | 点击轮播项时触发 | `(index: number, item: SwiperList \| string)` | 0.1.22 |
| change | 轮播切换时触发 | `(current: number, source: 'autoplay' \| 'touch' \| 'nav') ` | 0.1.22 |
## Slot
| name | 说明 | 参数 | 最低版本 |
| --------- | ------------ | ------------------------------------ | -------- |
| indicator | 自定义指示器 | `{ current: number, total: number }` | 0.1.22 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| -------------------- | -------------------- | -------- |
| customClass | 外部自定义类名 | 0.1.22 |
| customIndicatorClass | 自定义指示器类名 | 0.1.22 |
| customImageClass | 自定义图片类名,1.3版本将废弃,请使用`customItemClass`代替 | 0.1.22 |
| customPrevImageClass | 自定义上一个图片类名,1.3版本将废弃,请使用`customPrevClass`代替 | 0.1.22 |
| customNextImageClass | 自定义下一个图片类名,1.3版本将废弃,请使用`customNextClass`代替 | 0.1.22 |
| customItemClass | 自定义子项类名 | 1.3.13 |
| customPrevClass | 自定义上一个子项类名 | 1.3.13 |
| customNextClass | 自定义下一个子项类名 | 1.3.13 |
| customTextClass | 自定义文字标题类名 | 1.3.13 |
| customTextStyle | 自定义文字标题样式 | 1.3.13 |
---
---
url: 'https://wot-design-uni.cn/component/switch.md'
---
# Switch 开关
用来打开或关闭选项。
## 基本用法
`v-model` 为绑定值,默认为 boolean 类型。
```html
```
```typescript
const checked = ref(true)
```
## 修改值
通过 `active-value` 属性修改开关打开时的值,`inactive-value` 属性修改开关关闭时的值。
```html
```
## 修改颜色
通过 `active-color` 属性修改开关打开时的颜色,`inactive-color` 属性修改开关关闭时的颜色。
```html
```
## 自定义大小
设置 `size` 修改开关大小。
```html
```
## 禁用
设置 `disabled` 属性。
## 修改前钩子
设置 `before-change` 属性,修改前钩子,接收 { value, resolve } 参数,`resolve(true)` 表示修改通过,`resolve(false)` 表示不修改。
```html
```
```typescript
import { useMessage } from '@/uni_modules/wot-design-uni'
const message = useMessage()
const beforeChange = ({ value, resolve }) => {
message
.confirm('是否切换开关')
.then(() => {
resolve(true)
})
.catch(() => {
resolve(false)
})
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----|------|-----|-------|-------|---------|
| v-model | 绑定值 | boolean / string / number | - | - | - |
| disabled | 禁用 | boolean | - | false | - |
| active-value | 打开时的值 | boolean / string / number | - | true | - |
| inactive-value | 关闭时的值 | boolean / string / number | - | false | - |
| active-color | 打开时的背景色 | string | - | #4D80F0 | - |
| inactive-color | 关闭时的背景色,默认为白色,所以有灰色边框,如果设置了该值,则会自动去除灰色边框 | string | - | #fff | - |
| size | 开关大小,可以为任何单位的字符串尺寸 | string/number | - | 28px | - |
| before-change | 修改前钩子 | function | - | - | - |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
|--------|------|-----|---------|
| change | 值修改事件 | `{ value }` | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|-----|---------|
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/tabs.md'
---
# Tab 标签页
标签页组件,用于在不同的内容区域之间进行切换。
## 基本用法
`v-model` 为绑定值,可以为 number 类型(选中的 tab 的下标)和 string 类型(标签名)。
:::tip 提示
当`v-model`为`number`类型时,`wd-tab`可以不必设置`name`。同时如果 value 超出了 tab 数量,会用 0 自动兜底。
:::
```html
内容{{ item}}
```
```typescript
const tab = ref(0)
```
```scss
.content {
line-height: 120px;
text-align: center;
}
```
## name 匹配
为`wd-tab`设置`name`作为唯一标识。
```html
内容{{ item }}
```
```typescript
const tabs = ref(['这', '是', '一', '个', '例子'])
const tab = ref('例子')
```
```scss
.content {
line-height: 120px;
text-align: center;
}
```
## 使用徽标1.4.0
使用`bage-props`设置徽标属性,可以参考[Badge 组件的 props](/component/badge#attributes)。
```html
{{ item.title }}徽标
```
```typescript
const tabWithBadge = ref(0)
const tabsWithBadge = ref([
{
title: '普通数值',
badgeProps: {
modelValue: 10,
right: '-8px'
}
},
{
title: '最大值',
badgeProps: {
modelValue: 100,
max: 99,
right: '-8px'
}
},
{
title: '点状',
badgeProps: {
isDot: true,
right: '-8px',
showZero: true
}
}
])
```
## 自动调整底部条宽度
设置 `auto-line-width` 属性,自动调整底部条宽度为文本内容宽度。
```html
内容{{ tab }}
```
```typescript
const tabs = ref(['Wot', 'Design', 'Uni'])
const tab = ref('Design')
```
## 粘性布局
设置 `sticky` 属性,使用粘性布局。可以设置 `offset-top` 属性,当距离窗口顶部多少像素时,固定标签头。在`H5`端使用自定义导航栏时需要参考[sticky 的吸顶距离](/component/sticky.html#吸顶距离)进行配置。
```html
内容{{ item}}
```
## 禁用 Tab
在 `wd-tab` 上设置 `disabled` 属性,禁用某个页签。
```html
内容{{ item }}
```
## 点击事件
监听页签的点击事件.
```html
内容{{ item }}
```
## 手势滑动
设置 `swipeable` 属性,支持手势滑动。
```html
内容{{ item }}
```
## 切换动画
设置 `animated` 属性,开启切换标签内容时的过渡动画。
```html
内容{{ item }}
```
## 左对齐超出即可滚动 1.4.0
`slidable`设置为`always`时,所有的标签会向左侧收缩对齐,超出即可滑动。
```html
内容{{ item }}
```
***
标签页在标签数大于等于 6 个时,可以滑动;当标签数大于等于 10 个时,将会显示导航地图,便于快速定位到某个标签。可以通过设置 `slidable-num` 修改可滑动的数量阈值;设置 `map-num` 修改显示导航地图的阈值。`slidable`设置为`always`时,所有的标签会向左侧收缩对齐,超出即可滑动。
## 在弹出框中使用
微信小程序端,在弹出框中使用本组件时,需要调用 `updateLineStyle` 方法更新激活项样式,参见[常见问题](/guide/common-problems.html#%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%B8%8A%E4%BD%BF%E7%94%A8popup%E3%80%81actionsheet%E3%80%81dropdownitem%E7%AD%89%E5%BC%B9%E5%87%BA%E6%A1%86%E7%BB%84%E4%BB%B6%E5%8C%85%E8%A3%B9slider%E3%80%81tabs%E7%AD%89%E7%BB%84%E4%BB%B6%E6%97%B6-slider%E3%80%81tabs%E8%A1%A8%E7%8E%B0%E5%BC%82%E5%B8%B8)。
```html
打开弹窗
在弹出框中使用
内容{{ tab }}
```
```ts
const tab = ref(3)
const tabs = ref(['这', '是', '一', '个', '例子'])
const showPopup = ref(false) // 控制popup显示
const tabsRef = ref() // 获取分段器实例
/**
* 点击按钮打开popup
*/
function handleOpenClick() {
showPopup.value = true
}
/**
* popup打开后更新分段器样式
*/
function handlePopupShow() {
tabsRef.value?.updateLineStyle(false)
}
```
```css
.title {
display: flex;
font-size: 32rpx;
align-items: center;
justify-content: center;
padding: 24rpx 0;
}
```
## Tabs Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | ---------------------------------------------------------------------------------------- | --------------- | -------- | ------ | -------- |
| v-model | 绑定值 | string / number | - | - | - |
| slidable-num | 可滑动的标签数阈值,`slidable`设置为`auto`时生效 | number | - | 6 | - |
| map-num | 显示导航地图的标签数阈值 | number | - | 10 | - |
| map-title | 导航地图标题 | string | - | - | 1.4.0 |
| sticky | 粘性布局 | boolean | - | false | - |
| offset-top | 粘性布局时距离窗口顶部距离 | number | - | 0 | - |
| swipeable | 开启手势滑动 | boolean | - | false | - |
| autoLineWidth | 底部条宽度跟随文字,指定`lineWidth`时此选项不生效 | boolean | - | false | 1.4.0 |
| lineWidth | 底部条宽度,单位像素 | number | - | 19 | - |
| lineHeight | 底部条高度,单位像素 | number | - | 3 | - |
| color | 文字颜色 | string | - | - | - |
| inactiveColor | 非活动标签文字颜色 | string | - | - | - |
| animated | 是否开启切换标签内容时的转场动画 | boolean | - | false | - |
| duration | 切换动画过渡时间,单位毫秒 | number | - | 300 | - |
| slidable | 是否开启滚动导航 | TabsSlidable | `always` | `auto` | 1.4.0 |
| badge-props | 自定义徽标的属性,传入的对象会被透传给 [Badge 组件的 props](/component/badge#attributes) | BadgeProps | - | - | 1.4.0 |
## Tab Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| -------- | ------------------------------------------------------- | ------- | ------ | ------ | -------- |
| name | 标签页名称 | string | - | - | - |
| title | 标题 | string | - | - | - |
| disabled | 禁用 | boolean | - | false | - |
| lazy | 延迟渲染,默认开启,开启`animated`后此选项始终为`false` | boolean | - | true | 1.4.0 |
## Tabs Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------------- | --------------------------------------------------------------- | -------- |
| change | 绑定值变化时触发 | event = { index, name },index 为 tab 下标,name 为 tab 绑定的值 | - |
| click | 点击标题时触发 | event = { index, name },index 为 tab 下标,name 为 tab 绑定的值 | - |
| disabled | 点击禁用的标题时触发 | event = { index, name },index 为 tab 下标,name 为 tab 绑定的值 | - |
## Methods
对外暴露函数
| 事件名称 | 说明 | 参数 | 最低版本 |
| --------------- | --------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | -------- |
| setActive | 设置激活项,参数分别为:`value` 激活值,`init` 是否已初始化 ,`setScroll` 是否设置 scroll-view 滚动 | `(value: number \| string, init: boolean, setScroll: boolean) => void` | - |
| scrollIntoView | 使选中项滚动到可视区域 | - | - |
| updateLineStyle | 更新激活项边框线样式,参数`animation`用于是否开启动画,默认开启 | `(animation: boolean) => void` | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/tabbar.md'
---
# Tabbar 标签栏
底部导航栏,用于在不同页面之间进行切换。
## 基础用法
`v-model` 为绑定值,表示选中标签的索引值或者名称。
```html
```
```typescript
import { ref } from 'vue'
const tabbar = ref(1)
```
## 通过名称匹配
通过设置 `name` 属性,可以通过名称匹配选中标签。
```html
```
```typescript
import { ref } from 'vue'
const tabbar = ref('home')
```
## 徽标提示
通过设置 `value` 属性,可以显示徽标提示,而设置 is-dot 属性后,会在图标右上角展示一个小红点。
```html
```
```typescript
import { ref } from 'vue'
const tabbar = ref(1)
```
## 悬浮标签栏
通过设置 `shape` 属性为 `round`,可以将标签栏设置为悬浮样式。
```html
```
```typescript
import { ref } from 'vue'
const tabbar = ref(1)
```
## 自定义图标
通过使用 `` 可以自定义标签页的图标。
```html
```
```typescript
import { ref } from 'vue'
const tabbar = ref(1)
```
## 自定义颜色
通过设置 `active-color` 和 `inactive-color` 属性,可以自定义激活和未激活标签的颜色。
```html
```
```typescript
import { ref } from 'vue'
const tabbar = ref(1)
```
## 监听切换事件
通过监听 `change` 事件,可以获取选中标签的值。
```html
```
```typescript
import { ref } from 'vue'
const tabbar = ref(1)
function handleChange({ value }: { value: string }) {
show(`选中标签:${value}`)
}
```
## 固定底部
通过设置 `fixed` 属性,可以将标签栏固定在底部;通过设置 `placeholder` 属性,可以在固定在底部时在标签位置生成一个等高的占位元素。
```html
```
```typescript
import { ref } from 'vue'
const tabbar = ref(1)
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-----------------------|--------------------------------------------|-----------------------------|--------------------------------------|-------------------|------------|
| model-value / v-model | 选中标签的索引值或者名称 | number / string | - | 0 | 0.1.27 |
| fixed | 是否固定在底部 | boolean | - | false | 0.1.27 |
| safeAreaInsetBottom | 是否设置底部安全距离(iPhone X 类型的机型) | boolean | - | false | 0.1.27 |
| bordered | 是否显示顶部边框 | boolean | - | true | 0.1.27 |
| shape | 标签栏的形状 | TabbarShape | 'default' / 'round' | 'default' | 0.1.27 |
| activeColor | 激活标签的颜色 | string | - | - | 0.1.27 |
| inactiveColor | 未激活标签的颜色 | string | - | - | 0.1.27 |
| placeholder | 固定在底部时,是否在标签位置生成一个等高的占位元素 | boolean | - | false | 0.1.27 |
| zIndex | tabbar组件的层级 | number | - | 500 | 0.1.27 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------------------- | ----------- | -------- |
| change | tabbar标签切换时触发 | `{ value }` | 0.1.27 |
## 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|-----|---------|
| custom-class | 根节点样式类 | 0.1.27 |
| custom-style | 根节点样式 | 0.1.27 |
## TabbarItem Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|--------------|----------------|-------------------------|----------------|----------|------------|
| title | 标签页的标题 | string | - | - | 0.1.27 |
| name | 唯一标识符 | string / number | - | - | 0.1.27 |
| icon | 图标 | string | - | - | 0.1.27 |
| value | 徽标显示值 | number / string | - | - | 0.1.27 |
| isDot | 是否点状徽标 | boolean | - | false | 0.1.27 |
| max | 徽标最大值 | number | - | 99 | 0.1.27 |
| badge-props | 自定义徽标的属性,传入的对象会被透传给 [Badge 组件的 props](/component/badge#attributes) | BadgeProps | - | - | 0.1.50 |
## TabbarItem Slots
| name | 说明 | 参数 | 最低版本 |
| ------ | -------------------- | ----------------------- | -------- |
| icon | 自定义图标 | `active: boolean` | 0.1.27 |
## TabbarItem 外部样式类
| 类名 | 说明 | 最低版本 |
|-----|-----|---------|
| custom-class | 根节点样式类 | 0.1.27 |
| custom-style | 根节点样式 | 0.1.27 |
---
---
url: 'https://wot-design-uni.cn/component/table.md'
---
# Table 表格 0.1.39
用于展示多条结构类似的数据, 可对数据进行排序等操作。
::: warning 提示
`1.5.0`后取消了`height`的默认值,需要自行设置,最好设置为`number`类型,方便未来适配虚拟列表。
:::
## 基础用法
通过`data`设置表格数据。
::: details 基础用法
```html
```
```ts
const dataList = reactive([
{
name: '赵云',
school: '武汉市阳逻妇幼保健学院',
major: '计算机科学与技术专业'
},
{
name: '孔明',
school: '武汉市阳逻卧龙学院',
major: '计算机科学与技术专业'
},
{
name: '刘备',
school: '武汉市阳逻编织学院',
major: '计算机科学与技术专业'
}
])
```
:::
## 固定列
通过`fixed`设置表格列是否固定展示,默认`false`。
:::warning 提示
目前仅支持固定在左侧,且固定列组件的排列顺序要和实际想要展示的顺序相同。
:::
```html
```
## 显示索引
通过`index`设置表格是否显示序号列,默认为`false`。同时也可以传入对象对序号列进行配置,参数同`TableColumnProps`
```html
```
## 斑马纹
通过`stripe`设置表格是否展示斑马纹,默认`true`。
```html
```
## 边框
通过`border`设置表格是否展示边框,默认`true`。
```html
```
## 表格高度
通过`height`设置表格高度,设置高度后会自动固定表头。
```html
```
## 排序事件
当存在列参与排序时,点击会触发`sort-method`排序事件。
```html
```
```ts
function handleSort(e) {
console.log('这里是排序事件')
}
```
## 自定义列模板
自定义列的显示内容,可组合其他组件使用。
通过 `Scoped slot` 可以获取到 `row`, `index` 的数据,用法参考 demo。
::: details 查看自定义列模版 demo
```html
{{ row.grade }}
同比{{ row.compare }}
```
```ts
import { ref } from 'vue'
interface TableData {
name: string
school: string
major: string
gender: string
graduation: string
grade: number
compare: string
hobby: string
}
const dataList = ref([
{
name: '张飞',
school: '武汉市阳逻杀猪学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 56,
compare: '10%',
hobby: '燕人张飞在此!'
},
{
name: '关羽',
school: '武汉市阳逻绿豆学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 66,
compare: '11%',
hobby: '颜良文丑,以吾观之,如土鸡瓦犬耳。'
},
{
name: '刘备',
school: '武汉市阳逻编织学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 45,
compare: '1%',
hobby: '我得空明,如鱼得水也'
},
{
name: '赵云',
school: '武汉市阳逻妇幼保健学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 69,
compare: '14%',
hobby: '子龙,子龙,世无双'
},
{
name: '孔明',
school: '武汉市阳逻卧龙学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 88,
compare: '21%',
hobby: '兴汉讨贼,克复中原'
},
{
name: '姜维',
school: '武汉市阳逻停水停电技术学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 87,
compare: '32%',
hobby: '我计不成,乃天命也!'
}
])
/**
* 排序
* @param e
*/
function handleSort(e) {
dataList.value = dataList.value.reverse()
}
```
```css
.custom-class {
height: 80rpx;
width: 220rpx;
display: flex;
flex-direction: col;
align-items: center;
}
```
:::
## 不固定表头结合分页器使用
使用`pagination`组件,通过`v-model`绑定分页器当前页码,通过`total`设置分页器总条数,实现分页加载效果。
设置`fixed-header`为`false`,取消固定表头。
::: details 查看结合分页器使用 demo
```html
```
```ts
interface TableData {
name: string
school: string
major: string
gender: string
graduation: string
grade: number
compare: string
hobby: string
}
const dataList = ref([
{
name: '关羽',
school: '武汉市阳逻绿豆学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 66,
compare: '48%',
hobby: '颜良文丑,以吾观之,如土鸡瓦犬耳。'
},
{
name: '刘备',
school: '武汉市阳逻编织学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 68,
compare: '21%',
hobby: '我得空明,如鱼得水也'
},
{
name: '赵云',
school: '武汉市阳逻妇幼保健学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 91,
compare: '12%',
hobby: '子龙,子龙,世无双'
},
{
name: '赵云',
school: '武汉市阳逻妇幼保健学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 91,
compare: '12%',
hobby: '子龙,子龙,世无双'
},
{
name: '孔明',
school: '武汉市阳逻卧龙学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 99,
compare: '18%',
hobby: '兴汉讨贼,克复中原'
},
{
name: '赵云',
school: '武汉市阳逻妇幼保健学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 36,
compare: '48%',
hobby: '子龙,子龙,世无双'
},
{
name: '关羽',
school: '武汉市阳逻绿豆学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 66,
compare: '48%',
hobby: '颜良文丑,以吾观之,如土鸡瓦犬耳。'
},
{
name: '刘备',
school: '武汉市阳逻编织学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 68,
compare: '21%',
hobby: '我得空明,如鱼得水也'
},
{
name: '赵云',
school: '武汉市阳逻妇幼保健学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 91,
compare: '12%',
hobby: '子龙,子龙,世无双'
},
{
name: '孔明',
school: '武汉市阳逻卧龙学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 99,
compare: '18%',
hobby: '兴汉讨贼,克复中原'
},
{
name: '赵云',
school: '武汉市阳逻妇幼保健学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 36,
compare: '48%',
hobby: '子龙,子龙,世无双'
},
{
name: '关羽',
school: '武汉市阳逻绿豆学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 66,
compare: '48%',
hobby: '颜良文丑,以吾观之,如土鸡瓦犬耳。'
},
{
name: '刘备',
school: '武汉市阳逻编织学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 68,
compare: '21%',
hobby: '我得空明,如鱼得水也'
},
{
name: '赵云',
school: '武汉市阳逻妇幼保健学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 91,
compare: '12%',
hobby: '子龙,子龙,世无双'
},
{
name: '孔明',
school: '武汉市阳逻卧龙学院',
major: '计算机科学与技术专业',
gender: '男',
graduation: '2022年1月12日',
grade: 99,
compare: '18%',
hobby: '兴汉讨贼,克复中原'
}
])
const page = ref(1)
const pageSize = ref(10)
const total = ref(dataList.value.length)
const paginationData = computed(() => {
// 按页码和每页条数截取数据
return dataList.value.slice((page.value - 1) * pageSize.value, page.value * pageSize.value)
})
```
:::
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| --------------- | --------------------------------------------------- | ---------------------------- | ------ | ------ | ---------------- |
| data | 显示的数据 | Array | - | - | 0.0.39 |
| border | 是否带有边框 | boolean | - | true | 0.0.39 |
| stripe | 是否为斑马纹表 | boolean | - | true | 0.0.39 |
| height | Table 的高度,无默认值,设置后自动开启固定表头。 | `number / string` | - | - | 0.0.39 |
| rowHeight | 行高 | `number / string` | - | 50 | 0.0.39 |
| showHeader | 是否显示表头 | boolean | - | true | 0.0.39 |
| ellipsis | 是否超出 2 行隐藏 | boolean | - | true | 0.0.39 |
| index | 是否显示索引列,可传入`boolean`也可传入 column 配置 | `boolean / TableColumnProps` | | false | 1.2.19 |
| fixed-header | 是否固定表头,需要结合`height`才可以实现固定表头的效果。 | boolean | - | true | 1.5.0 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| ----------- | ------------------------------------------------------------------ | -------------------------------- | -------- |
| sort-method | 指定数据按照哪个属性进行排序,仅当 sortable 设置为 true 的时候有效 | `TableColumn:当前点击列数据` | 0.0.39 |
| row-click | 当某一行被点击时会触发该事件 | `{rowIndex:number} 点击行的下标` | 0.0.39 |
## TableColumn Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| -------- | --------------------------- | --------------- | ------------------- | ------ | -------- |
| prop | 字段名称,对应列内容的字段名 | string | - | - | 0.0.39 |
| label | 显示的标题 | string | - | - | 0.0.39 |
| width | 对应列的宽度,单位为 px | number / string | - | 100 | 0.0.39 |
| sortable | 是否开启列排序 | boolean | - | false | 0.0.39 |
| fixed | 是否固定本列 | boolean | - | false | 0.0.39 |
| align | 列的对齐方式 | AlignType | left, center, right | left | 0.0.39 |
## TableColumn Slot
| name | 说明 | 参数 | 最低版本 |
| ----- | -------------------------------------- | -------------------------------- | -------- |
| value | 自定义列的内容,1.2.16 新增`index`参数 | `{ row: Object, index: number }` | 0.1.22 |
---
---
url: 'https://wot-design-uni.cn/component/tag.md'
---
# Tag 标签
用于标记状态或者概括主要内容。
## 基本用法
设置 `type` 修改标签类型。
```html
标签
标签
标签
标签
标签
```
```scss
:deep(.space) {
margin: 0 10px 10px;
}
```
## 幽灵标签
设置 `plain` 属性。
```html
标签
标签
标签
标签
标签
```
## 标记标签
设置 `mark` 属性。
```html
标签
标签
标签
标签
标签
```
## 幽灵标记标签
同时设置 `mark` 和 `plain` 属性。
```html
标签
标签
标签
标签
标签
```
## 圆角标签
设置 `round` 属性。
```html
标签
标签
标签
标签
标签
```
## 设置图标
设置 `icon` 左侧图标,也可以使用 'icon' 的 slot 插槽,此时要开启`use-icon-slot`。
```html
标签
插槽
```
## 自定义颜色
设置 `color` 修改文字颜色,设置 `bg-color` 修改背景色和边框颜色。
```html
标签
标签
```
## 可关闭
设置 `closable` 属性,允许标签关闭,关闭时会触发 `close` 事件。
```html
标签
```
## 新增标签
设置 `dynamic` 属性,该标签为新增样式,输入内容确定后触发 `confirm` 事件。
```html
{{item}}
```
如果想自定义新增样式的话,可以使用`add`插槽实现。
```html
自定义
```
```typescript
const tags = ref(['标签一', '标签二'])
function handleClose(order) {
tags.value = tags.value.filter((value, index) => index !== order)
console.log('close:index' + order)
}
function handleConfirm({ value }) {
if (!value) return
tags.value = [...tags.value, value]
}
```
## 事件
```html
{{tag.value}}
```
```typescript
const tags = ref([
{
plain: true,
closable: true,
type: 'primary',
value: '标签一'
}
])
function handleClick(index) {
console.log('click:index' + index)
}
function handleClose(order) {
tags.value = tags.value.filter((value, index) => index !== order)
console.log('close:index' + order)
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | ------------------------ | ------- | -------------------------------------------- | ------ | -------- |
| type | 标签类型 | string | `default` / `primary` / `danger` / `warning` / `success` | default | - |
| plain | 幽灵类型 | boolean | - | false | - |
| mark | 标记类型 | boolean | - | false | - |
| round | 圆角类型 | boolean | - | false | - |
| icon | 左侧图标 | string | - | - | - |
| color | 文字颜色 | string | - | - | - |
| bg-color | 背景色和边框色 | string | - | - | - |
| closable | 可关闭(只对圆角类型支持) | boolean | - | false | - |
| use-icon-slot | 开启图标插槽 | boolean | - | false | - |
| dynamic | 是否为新增标签 | boolean | - | false | - |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------------------- | ----------- | -------- |
| click | 标签点击时触发 | event | - |
| close | 点击关闭按钮时触发 | event | - |
| confirm | 新增标签输入内容确定后触发 | `{ value }` | - |
## Slots
| name | 说明 | 最低版本 |
| ---- | ------------------------------------------- | -------- |
| icon | 图标 | - |
| add | 自定义新增标签插槽,`dynamic`为`true`时生效 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | -------- |
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/text.md'
---
# Text 文本
文本组件,用于展示文本信息。
> 1.3.4 版本提供
## 基本用法
设置 `text` 设置文本内容。推荐您使用:text='value'的形式。
```html
```
## 设置主题
通过type参数设置文本主题,我们提供了五类属性:primary error success warning default-默认。
```html
```
## 自定义字体颜色
设置 `color` 属性。
```html
```
## 是否粗体
设置 `bold` 属性。
```html
```
## 字体大小
设置 `size` 属性。
```html
```
## 脱敏
设置 `format` 属性,当 `mode` 为 `phone``name`时生效。
```html
```
## lines
设置 `lines` 属性,文本显示的行数,如果设置,超出此行数,将会显示省略号。最大值为5。
```html
```
## lineHeight
设置 `lineHeight` 文本行高。
```html
```
## 前后插槽
设置 `prefix` `suffix` 插槽。
```html
Prefix
Suffix
```
## 金额
设置 `mode="price"` 。
```html
```
## 文字装饰
设置 `decoration` 文字装饰,下划线,中划线等。
```html
```
## 事件
```html
```
```typescript
function clickTest() {
console.log(1)
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ---------- | ------------------------------------------------------------------ | ------- | ------------------------------------------------------------------ | ------- | ---------------- |
| type | 主题类型 | string | 'primary' / 'error' / 'warning' / 'success' | default | 1.3.4 |
| text | 文字 | string / number | - | | 1.3.4 |
| size | 字体大小 | string | - | - | 1.3.4 |
| mode | 文本处理的匹配模式 | string | 'text-普通文本' / 'date - 日期' / 'phone - 手机号' / 'name - 姓名' / 'price - 金额' | text | 1.3.4+ |
| bold | 是否粗体,默认 normal | boolean | - | false | 1.3.4 |
| format | 是否脱敏 | boolean | 当 mode 为 phone 和 name 时生效 | false | 1.3.4 |
| color | 文字颜色 | string | - | - | 1.3.4 |
| lines | 文本显示的行数,如果设置,超出此行数,将会显示省略号。最大值为 5。 | Number | - | - | 1.3.4 |
| lineHeight | 文本行高 | string | - | | 1.3.4 |
| decoration | 文字装饰,下划线,中划线等 | string | underline/line-through/overline | | 1.3.4+ |
| prefix | 前置插槽 | string | - | | 1.3.4+ |
| suffix | 后置插槽 | string | - | | 1.3.4+ |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------- | -------------- | ----- | ---------------- |
| click | 标签点击时触发 | event | 1.3.4 |
## Slots
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ---------- | ---------------- |
| custom-class | 根节点样式 | 1.3.4 |
| custom-style | 根节点样式 | 1.3.4 |
---
---
url: 'https://wot-design-uni.cn/component/textarea.md'
---
# Textarea 文本域 0.2.0
用于输入多行文本信息。
## 基本用法
可以通过 `v-model` 双向绑定输入框的值,通过 `placeholder` 设置占位提示文字。
```html
```
```typescript
const value = ref('')
```
## 禁用
通过设置 `disabled` 属性,实现禁用文本域。
```html
```
## 只读
通过设置 `readonly` 属性,实现文本域只读。
```html
```
## 清空按钮
通过设置 `clearable` 属性实现清空按钮,设置`show-word-limit`与`maxlength`实现字数限制。
```html
```
## 有值且聚焦时展示清空按钮
设置 `clear-trigger` 属性,可以控制是否聚焦时才展示清空按钮。
:::warning 注意
支付宝小程序暂不支持 `clear-trigger` 属性,且某种情况下清空按钮无法点击,原因参考此[issue](https://github.com/ant-design/ant-design-mini/issues/1255)(希望可以早点解决,所以直接给蚂蚁的组件库提了个issue)。
:::
```html
```
## 点击清除按钮时不自动聚焦
设置`focus-when-clear` 属性,可以控制点击清除按钮时是否自动聚焦。
```html
```
## 高度自适应
通过设置 `auto-height` 属性,实现高度自适应。
```html
```
## 前置 icon
设置前置 icon `prefix-icon`,icon 为 [icon](/component/icon) 章节中的图标,如果没有你需要的图标,则使用 `prefix` 插槽进行自定义插入。
```html
```
## 设置 label 标题
设置 `label` 标题,可以和 `cell-group` 组合使用,形成 `cell` 展示类型。可以通过 `label-width` 设置标题宽度,默认为 '33%'。
```html
```
## 必填样式
设置了 `label` 的情况下,设置 `required` 属性,展示必填样式。
```html
```
## 输入框大小
通过设置 `size` 修改输入框大小,将 `size` 设置为 'large' 时字号为 16px。
```html
```
## 错误状态
设置 `error` 属性,输入框的值显示为红色。
```html
```
## 垂直居中
当设置 `label` 标题时,默认为顶部居中,设置 `center` 属性可以使标题和输入框垂直居中。
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|-------------------------|---------------------------------------------------------------------------------------------------|-------------------|------------------------------------|-----------|----------|
| v-model | 绑定值 | string / number | - | - | - |
| placeholder | 占位文本 | string | - | 请输入... | - |
| placeholderStyle | 原生属性,指定 placeholder 的样式 | string | - | - | - |
| placeholderClass | 原生属性,指定 placeholder 的样式类 | string | - | - | - |
| disabled | 原生属性,禁用 | boolean | - | false | - |
| maxlength | 原生属性,最大输入长度,设置为 -1 时不限制最大长度 | number | - | - | - |
| auto-focus | 原生属性,自动聚焦,拉起键盘 | boolean | - | false | - |
| focus | 原生属性,获取焦点 | boolean | - | false | - |
| auto-height | 原生属性,是否自动增高(设置时 style.height 不生效) | boolean | - | false | - |
| fixed | 在 position:fixed 区域时需要设置为 true | boolean | - | false | - |
| cursorSpacing | 原生属性,指定光标与键盘的距离(取 textarea 底部距离和该值的最小值) | number | - | 0 | - |
| cursor | 原生属性,指定 focus 时的光标位置 | number | - | -1 | - |
| confirm-type | 设置键盘右下角按钮的文字 | string | `done`/`go`/`next`/`search`/`send` | - | - |
| confirm-hold | 点击键盘右下角按钮时是否保持键盘不收起 | boolean | - | false | - |
| show-confirm-bar | 是否显示键盘上方"完成"栏 | boolean | - | true | - |
| selection-start | 原生属性,光标起始位置(需与 selection-end 搭配使用) | number | - | -1 | - |
| selection-end | 原生属性,光标结束位置(需与 selection-start 搭配使用) | number | - | -1 | - |
| adjust-position | 原生属性,键盘弹起时是否自动上推页面 | boolean | - | true | - |
| disable-default-padding | 原生属性,是否去掉 iOS 默认内边距 | boolean | - | false | - |
| hold-keyboard | 原生属性,focus 时点击页面不收起键盘 | boolean | - | false | - |
| show-password | 显示为密码框 | boolean | - | false | - |
| clearable | 显示清空按钮 | boolean | - | false | - |
| readonly | 只读 | boolean | - | false | - |
| prefix-icon | 前置图标(使用 icon 组件类名) | string | - | - | - |
| show-word-limit | 显示字数限制(需设置 maxlength) | boolean | - | false | - |
| label | 设置左侧标题 | string | - | - | - |
| label-width | 设置左侧标题宽度 | string | - | 33% | - |
| size | 设置输入框大小 | string | - | - | - |
| error | 设置输入框错误状态(红色标识) | boolean | - | false | - |
| center | 有 label 时设置标题和输入框垂直居中(默认顶部居中) | boolean | - | false | - |
| no-border | 非 cell 类型下是否隐藏下划线 | boolean | - | false | - |
| required | cell 类型下必填样式 | boolean | - | false | - |
| prop | 表单域 `model` 字段名(表单校验必填) | string | - | - | - |
| rules | 表单验证规则 | FormItemRule\[] | - | \[] | - |
| clearTrigger | 显示清除图标的时机:always(输入框非空时展示)/ focus(聚焦且非空时展示) | InputClearTrigger | `focus`/`always` | `always` | 1.3.7 |
| focusWhenClear | 点击清除按钮时是否聚焦输入框 | boolean | - | true | 1.3.7 |
| ignoreCompositionEvent | 是否忽略文本合成系统事件处理(为 false 时触发 composition 相关事件,且在合成期间触发 input 事件) | boolean | - | true | 1.3.11 |
| inputmode | 输入数据类型提示 | InputMode | - | text | 1.5.0 |
### InputMode 可选值
> 新增于 uni-app 3.6.16+ inputmode是html规范后期更新的内容。各家小程序还未支持此属性。
在符合条件的高版本webview里,uni-app的web和app-vue平台中可使用本属性,参见[inputmode](https://uniapp.dcloud.net.cn/component/input.html#inputmode)。
| 值 | 说明 |
|---------|----------------------------------------------------------------------------------------------------------------------|
| none | 无虚拟键盘。在应用程序或者站点需要实现自己的键盘输入控件时很有用。 |
| text | 使用用户本地区域设置的标准文本输入键盘。 |
| decimal | 小数输入键盘,包含数字和分隔符(通常是“ . ”或者“ , ”),设备可能也可能不显示减号键。 |
| numeric | 数字输入键盘,所需要的就是 0 到 9 的数字,设备可能也可能不显示减号键。 |
| tel | 电话输入键盘,包含 0 到 9 的数字、星号(\*)和井号(#)键。表单输入里面的电话输入通常应该使用 。 |
| search | 为搜索输入优化的虚拟键盘,比如,返回键可能被重新标记为“搜索”,也可能还有其他的优化。 |
| email | 为邮件地址输入优化的虚拟键盘,通常包含"@"符号和其他优化。表单里面的邮件地址输入应该使用 。 |
| url | 为网址输入优化的虚拟键盘,比如,“/”键会更加明显、历史记录访问等。表单里面的网址输入通常应该使用 。 |
### FormItemRule 数据结构
| 键名 | 说明 | 类型 |
| --------- | ------------------------------------------------------- | ------------------------------------- |
| required | 是否为必选字段 | `boolean` |
| message | 错误提示文案 | `string` |
| validator | 通过函数进行校验,可以返回一个 `Promise` 来进行异步校验 | `(value, rule) => boolean \| Promise` |
| pattern | 通过正则表达式进行校验,正则无法匹配表示校验不通过 | `RegExp` |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| -------------------- | -------------------------------- | -------------------------------------------- | -------- |
| input | 监听输入框 input 事件 | ` {value, cursor, keyCode}` | - |
| focus | 监听输入框 focus 事件 | ` { value, height }`, height 为键盘高度 | - |
| blur | 监听输入框 blur 事件 | ` { value }` | - |
| clear | 监听输入框清空按钮事件 | - | - |
| linechange | 监听输入框行数变化 | ` { height: 0, heightRpx: 0, lineCount: 0 }` | - |
| confirm | 点击完成时, 触发 confirm 事件 | ` { value }` | - |
| keyboardheightchange | 键盘高度发生变化的时候触发此事件 | ` { height, duration }` | - |
| clickprefixicon | 点击前置图标时触发 | - | - |
| clicksuffixicon | 点击后置图标时触发 | - | - |
## Slot
| name | 说明 | 最低版本 |
| ------ | ------------ | -------- |
| label | 左侧标题插槽 | - |
| prefix | 前置插槽 | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------------------------- | --------------------------- | -------- |
| custom-class | 根节点样式 | - |
| custom-textarea-container-class | textarea 容器外部自定义样式 | - |
| custom-textarea-class | textarea 外部自定义样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/toast.md'
---
# Toast 轻提示
轻提示组件,用于消息通知、加载提示、操作结果提示等场景,支持函数式调用。
:::tip 提示
`Toast` 自 1.7.0 版本起支持通过 `props` 属性控制组件样式,字段见[props](#props),需要注意的是函数式调用api的`options`优先级高于`props`。
:::
## 基本用法
需要在页面中引入该组件,作为挂载点。
```html
toast
```
```typescript
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
function showToast() {
toast.show('提示信息')
}
```
## 成功、异常、警告、常规
```typescript
toast.show('提示信息')
toast.success('操作成功')
toast.error('手机验证码输入错误,请重新输入')
toast.warning('提示信息')
toast.info('常规提示信息')
```
## 使用图标
可以使用`iconClass`指定图标,结合`classPrefix`可以使用自定义图标,参见 [Icon 自定义图标](/component/icon#自定义图标)。
```ts
// 使用组件库内部图标
toast.show({
iconClass: 'star',
msg: '使用组件库内部图标'
})
```
```ts
// 使用自定义图标
toast.show({
iconClass: 'kehuishouwu',
classPrefix: 'fish',
msg: '使用自定义图标'
})
```
## 提示位置
通过设置 `position` 属性,可以设置提示信息的位置,默认为 `middle-top`。
```typescript
// 顶部提示
toast.show({
position: 'top',
msg: '提示信息'
})
// 局中提示
toast.show({
position: 'middle',
msg: '提示信息'
})
// 底部提示
toast.show({
position: 'bottom',
msg: '提示信息'
})
```
## 排版方向
`direction` 可设置排版方向,默认为横向排版。
```typescript
// 纵向排版
toast.success({
msg: '纵向排版',
direction: 'vertical'
})
```
## 关闭提示
```typescript
toast.close()
```
## loading 提示
`loading` 开启后需要用户手动关闭,关闭可以调用 `close`,或者再调用一次 toast 提示,因为 toast 只会存在一个,新的 toast 会自动顶掉旧的 toast。
```typescript
toast.loading('加载中...')
```
修改 loading 指示器类型:
```typescript
toast.loading({
loadingType: 'ring',
msg: '加载中...'
})
```
手动关闭 loading:
```typescript
toast.close()
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|--------------|------------------------------------------|----------|--------------------------------------------|------------|------------------|
| selector | 选择器 | string | - | '' | - |
| msg | 提示信息 | string | - | '' | 1.7.0 |
| direction | 排列方向 | string | vertical / horizontal | horizontal | 1.7.0 |
| iconName | 图标类型 | string | success / error / warning / loading / info | '' | 1.7.0 |
| iconSize | 图标大小 | number | - | - | 1.7.0 |
| loadingType | 加载类型 | string | outline / ring | outline | 1.7.0 |
| loadingColor | 加载颜色 | string | - | #4D80F0 | 1.7.0 |
| loadingSize | 加载大小 | number | - | - | 1.7.0 |
| iconColor | 图标颜色 | string | - | - | 1.7.0 |
| position | 提示信息框的位置 | string | top / middle-top / middle / bottom | middle-top | 1.7.0 |
| zIndex | 层级 | number | - | 100 | 1.7.0 |
| cover | 是否存在遮罩层 | boolean | - | false | 1.7.0 |
| iconClass | 图标类名 | string | - | '' | 1.7.0 |
| classPrefix | 类名前缀,用于使用自定义图标 | string | - | wd-icon | 1.7.0 |
| opened | 完全展示后的回调函数 | Function | - | - | 1.7.0 |
| closed | 完全关闭时的回调函数 | Function | - | - | 1.7.0 |
## Options
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|--------------|-----------------------------------------------------------------------------|----------|---------------------------|------------|----------|
| msg | 消息内容 | string | - | '' | - |
| duration | 持续时间,单位 ms,为 0 时表示不自动关闭 | number | - | 2000 | - |
| direction | 排版方向 | string | vertical / horizontal | horizontal | 1.7.0 |
| iconName | 图标类型 | string | success / error / warning | '' | - |
| iconSize | 左侧图标尺寸 | number | - | - | - |
| iconClass | 图标类目,自定义图标,可以使用 Icon 章节的那些图标类名,iconName 优先级更高 | string | - | '' | - |
| classPrefix | 类名前缀,用于使用自定义图标 | string | - | 'wd-icon' | - |
| position | 提示信息框的位置 | string | top / middle / bottom | middle-top | - |
| zIndex | toast 层级 | number | - | 100 | - |
| loadingType | [加载中图标类型](/component/loading) | string | ring | outline | - |
| loadingColor | [加载中图标颜色](/component/loading) | string | - | #4D80F0 | - |
| selector | 指定唯一标识 | string | - | '' | - |
| cover | 是否存在一个透明遮罩 | boolean | - | false | - |
| opened | 完全展示后的回调函数 | Function | - | - | - |
| closed | 完全关闭后的回调函数 | Function | - | - | - |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
| -------- | ----------------------------------------- | ------- | -------- |
| success | 成功提示 | options | - |
| error | 错误提示 | options | - |
| info | 常规提示 | options | - |
| warning | 警告提示 | options | - |
| loading | 加载提示 | options | - |
| close | 手动关闭消息提示框,是 Toast 实例上的方法 | - | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ----------------- | -------------- | -------- |
| custom-class | 根节点样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/tooltip.md'
---
# Tooltip 文字提示
常用于展示提示信息。
## 基本用法
在这里我们提供 12 种不同方向的展示方式,可以通过以下完整示例来理解。
可以通过`v-model` 控制手动是否展示文字提示。
使用`content`属性来决定显示时的提示信息。
由`placement`属性决定展示效果:
* `placement`属性值为:`方向-对齐位置`;
* 四个方向:`top`、`left`、`right`、`bottom`;
* 三种对齐位置:`start`、''(默认空为居中)、 `end`;
如 `placement="left-end"`,则提示信息出现在目标元素的左侧,且提示信息的底部与目标元素的底部对齐。
因为`uni-app`组件无法监听点击自己以外的地方,为了在点击页面其他地方时,可以自动关闭 `tooltip` ,建议使用组件库的 `useQueue` hook(会关闭所有 dropmenu、popover、toast、swipeAction、fab),在页面的根元素上监听点击事件的冒泡。
:::warning
如果存在用户手动点击 `tooltip` 以外某个地方如按钮滑出 `tooltip` 的场景,则需要在点击的元素(在这里上按钮)加上 click 阻止事件冒泡到根元素上,避免触发 `closeOutside`把要手动打开的 `tooltip` 关闭了。
:::
```html
top
```
```typescript
import { useQueue } from '@/uni_modules/wot-design-uni'
const { closeOutside } = useQueue()
const show = ref(false)
```
## 更多 Content
展示多行文本或者是设置文本内容的格式
用具名 slot 分发`content`,替代 `tooltip` 中的 `content` 属性。
使用插槽时,请使用 `useContentSlot` 属性,确定 `content` 插槽开启。
:::warning 注意
目前使用`content`插槽时,组件内部无法正确获取气泡的宽高,此时设置偏移的`placement`无法生效,例如`bottom-end`。
:::
```html
多行文本
多行文本1
多行文本2
多行文本3
```
```typescript
import { useQueue } from '@/uni_modules/wot-design-uni'
const { closeOutside } = useQueue()
const show = ref(false)
```
## 显示关闭按钮
Tooltip 组件通过属性`show-close` 控制是否显示关闭按钮。
```html
显示关闭按钮
```
## 控制显隐
通过绑定`v-model`控制 `tooltip` 的显隐。
```html
{{ show ? '关闭' : '打开' }}
top
```
```ts
import { ref } from 'vue'
const show = ref(false)
const control = () => {
show.value = !show.value
}
```
## 高级扩展
除了这些基本设置外,还有一些属性可以让使用者更好的定制自己的效果:
如果需要关闭 `tooltip` 功能,`disabled` 属性可以满足这个需求,它接受一个`Boolean`,设置为`true`即可。
```html
禁用
```
## 控制位置
**注意:由于小程序无法动态插入节点,因此文字气泡位置会根据传入定位的节点最外层位置对齐,如果文字提示位置不在您想要渲染的位置上,可以通过控制组件整体位置达到想要的效果。**
错误用法示例:
```html
top
top
```
正确用法:
```html
top
top
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
|---------------|--------------------------------------------|-------------------|---------------------------------------------------------------------------------------------------------------------------------|--------------|----------|
| show | 状态是否可见 | boolean | - | false | - |
| content | 显示的内容,也可以通过 `slot#content` 传入 | string / array | - | - | - |
| placement | Tooltip 的出现位置 | string | top / top-start / top-end / bottom / bottom-start / bottom-end / left / left-start / left-end / right / right-start / right-end | bottom | - |
| disabled | Tooltip 是否可用 | boolean | - | false | - |
| visible-arrow | 是否显示 Tooltip 箭头 | boolean | - | true | - |
| offset | 出现位置的偏移量 | number / number\[] | - | `{x:0, y:0}` | 1.3.12 |
| show-close | 是否显示 Tooltip 内部的关闭按钮 | boolean | - | false | - |
## Events
| 事件名称 | 说明 | 回调参数 | 最低版本 |
| ----------- | ---------------- | -------- | -------- |
| open | 显示时触发 | - | - |
| close | 隐藏时触发 | - | - |
| change | 显隐值变化时触发 | - | - |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
| -------- | ---------------- | ---- | -------- |
| open | 打开文字提示弹框 | - | - |
| close | 关闭文字提示弹框 | - | - |
## Slot
| name | 说明 | 最低版本 |
| ------- | ------------------------ | -------- |
| content | 多行内容或用户自定义样式 | - |
## Tooltip 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------ | ------------ | -------- |
| custom-class | 根节点样式 | - |
| custom-arrow | 尖角样式 | - |
| custom-pop | 文字提示样式 | - |
---
---
url: 'https://wot-design-uni.cn/component/transition.md'
---
# Transition 动画
用于在元素进入或离开时应用过渡效果。
## 基本用法
将元素包裹在 `wd-transition` 标签中,并设置 `show` 来切换显隐,设置 `name` 选择动画。
```html
内容
```
## 动画类型
`wd-transition` 内置了常用的动画,如 `fade`、`slide`、`zoom-in` 等。
```html
内容
```
## 动画时间
可以通过 `duration` 设置动画执行时间,动画拆分为 `enter` 进入动画和 `leave` 离开动画,`duration` 可以分别设置进入动画执行时间和离开动画执行时间: `{ enter: 300, leave: 500 }`。
## 自定义动画
可以通过 `enter-class`、`enter-active-class`、`enter-to-class`、`leave-class`、`leave-active-class`、`leave-to-class` 设置自定义动画的类名。
在动画进入时,会给标签设置 `enter-class` 和 `enter-active-class` 样式,在下一帧切换为 `enter-to-class` 和 `enter-active-class` 样式,因此进入动画是从 `enter-class` 样式切换为 `enter-to-class` 样式状态,`enter-active-class` 设置 `transition` 相关属性。
在动画离开时,会给标签设置 `leave-class` 和 `leave-active-class` 样式,在下一帧切换为 `leave-to-class` 和 `leave-active-class` 样式,因此离开动画是从 `leave-class` 样式切换为 `leave-to-class` 样式状态,`leave-active-class` 设置 `transition` 相关属性。
```html
```
```scss
:deep(button) {
margin: 0 10px 10px 0;
}
:deep(.block) {
position: fixed;
left: 50%;
top: 50%;
margin: -50px 0 0 -50px;
width: 100px;
height: 100px;
background: #0083ff;
}
:deep(.custom-enter-active),
:deep(.custom-leave-active) {
transition-property: background, transform;
}
:deep(.custom-enter) {
transform: translate3d(-100px, -100px, 0) rotate(-180deg);
background: #ff0000;
}
:deep(.custom-leave-to) {
transform: translate3d(100px, 100px, 0) rotate(180deg);
background: #ff0000;
}
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------ | ------------ | ---------------- | ---------------------------------------------------------------------------------------------------------------- | ------- | -------- |
| show | 是否展示组件 | boolean | - | - | - |
| name | 动画类型 | string | fade / fade-up / fade-down / fade-left / fade-right / slide-up / slide-down / slide-left / slide-right / zoom-in | - | - |
| duration | 动画执行时间 | number / boolean | - | 300(ms) | - |
| custom-style | 自定义样式 | string | - | - | - |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| ---------------- | ---------- | ---- | -------- |
| beforeenter | 进入前触发 | - | - |
| enter | 进入时触发 | - | - |
| afterenter | 进入后触发 | - | - |
| beforeleave | 离开前触发 | - | - |
| leave | 离开时触发 | - | - |
| afterleave | 离开后触发 | - | - |
## 外部样式类
| 类名 | 说明 | 最低版本 |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------- | -------- |
| custom-class | 根节点样式 | - |
| enter-class | 定义进入过渡的开始状态,在元素被插入前生效,在插入的下一帧移除 | - |
| enter-active-class | 定义动画执行期间的状态,在整个进入动画中应用;在元素被插入前生效,在动画结束后移除;可以定义 transition 相关属性 | - |
| enter-to-class | 定义进入过渡的结束状态,在元素被插入的下一帧生效,在动画结束后移除 | - |
| leave-class | 定义离开过渡的开始状态,在离开动画触发时立即生效,在下一帧移除 | - |
| leave-active-class | 定义动画执行期间的状态,在整个离开动画中应用;在离开动画触发时立即生效,在动画结束后移除;可以定义 transition 相关属性 | - |
| leave-to-class | 定义离开过渡的结束状态,在离开动画触发时的下一帧生效,在动画结束后移除 | - |
---
---
url: 'https://wot-design-uni.cn/component/upload.md'
---
# Upload 上传
图片、视频和文件上传组件
::: tip 提示
目前组件库已兼容的平台,都支持上传视频,使用`video`组件实现的视频封面在`H5`、`微信小程序`和`支付宝小程序`平台得到支持,而在`钉钉小程序`和`App`平台则受限于`video`标签在这两个平台的能力无法用做视频封面。故推荐在`change`事件中获取视频封面并给`fileList`对应视频添加封面:`thumb`(上传至各种云服务器时,各厂商应该都提供了视频封面的功能)。
:::
::: warning 关于微信小程序隐私协议
`upload`在微信小程序平台使用了`wx.chooseImage`、`wx.chooseMedia`、`wx.chooseVideo`三个隐私接口需要配置微信隐私协议,可以参考[小程序隐私协议开发指南](https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html)进行相关配置和开发,否则会导致上传功能无法使用。推荐使用[微信小程序隐私保护弹出框](https://ext.dcloud.net.cn/plugin?id=14346)或者组件库演示用的[微信隐私协议弹框](https://github.com/Moonofweisheng/wot-design-uni/tree/master/src/components/wd-privacy-popup)。
:::
## 基本用法
`file-list` 设置上传列表,数据类型为数组;
数据更改后通过绑定 `change` 事件给 fileList 赋值。
`action` 设置上传的地址;
```html
```
```typescript
const fileList = ref([
{
url: 'https://img12.360buyimg.com//n0/jfs/t1/29118/6/4823/55969/5c35c16bE7c262192/c9fdecec4b419355.jpg'
}
])
const action: string = 'https://mockapi.eolink.com/zhTuw2P8c29bc981a741931bdd86eb04dc1e8fd64865cb5/upload'
function handleChange({ fileList: files }) {
fileList.value = files
}
```
## 双向绑定 `1.3.8`
`file-list` 支持用 `v-model` 进行双向绑定。
上传、删除等操作会都会同步数据,不需要通过 `change` 事件进行绑定
```html
```
```typescript
const fileList = ref([
{
url: 'https://img12.360buyimg.com//n0/jfs/t1/29118/6/4823/55969/5c35c16bE7c262192/c9fdecec4b419355.jpg'
}
])
const action: string = 'https://mockapi.eolink.com/zhTuw2P8c29bc981a741931bdd86eb04dc1e8fd64865cb5/upload'
```
## 禁用
设置 `disabled` 开启禁用上传
```html
```
## 多选上传
通过设置 `multiple` 开启文件多选上传。
```html
```
## 最大上传数限制
上传组件可通过设置 `limit` 来限制上传文件的个数。
```html
```
## 覆盖上传
上传组件可通过设置 `reupload` 来实现在选中时自动替换上一个文件。
```html
```
## 拦截预览图片操作
设置 `before-preview` 函数,在用户点击图片进行预览时,会执行 `before-preview` 函数,接收 { file: 预览文件, index: 当前预览的下标, imgList: 所有图片地址列表, resolve },通过 `resolve` 函数告知组件是否确定通过,`resolve` 接受 1 个 boolean 值,`resolve(true)` 表示选项通过,`resolve(false)` 表示选项不通过,不通过时不会执行预览图片操作。
```html
```
```typescript
import { useToast, useMessage } from '@/uni_modules/wot-design-uni'
const messageBox = useMessage()
const toast = useToast()
const fileList = ref([
{
url: 'https://img12.360buyimg.com//n0/jfs/t1/29118/6/4823/55969/5c35c16bE7c262192/c9fdecec4b419355.jpg'
}
])
const beforePreview = ({ file, resolve }) => {
messageBox
.confirm({
msg: '是否预览图片',
title: '提示'
})
.then(() => {
resolve(true)
})
.catch(() => {
toast.show('取消预览操作')
})
}
function handleChange({ fileList }) {
fileList.value = fileList
}
```
## 上传前置处理
设置 `before-upload` 函数,弹出图片选择界面,在用户选择图片点击确认后,会执行 `before-upload` 函数,接收 { files: 当前上传的文件, fileList: 文件列表, resolve },可以对 `file` 进行处理,并通过 `resolve` 函数告知组件是否确定通过,`resolve` 接受 1 个 boolean 值,`resolve(true)` 表示选项通过,`resolve(false)` 表示选项不通过,不通过时不会执行上传操作。
```html
```
```typescript
import { useToast, useMessage } from '@/uni_modules/wot-design-uni'
const messageBox = useMessage()
const toast = useToast()
const fileList = ref([
{
url: 'https://img12.360buyimg.com//n0/jfs/t1/29118/6/4823/55969/5c35c16bE7c262192/c9fdecec4b419355.jpg'
}
])
const beforeUpload = ({ files, resolve }) => {
messageBox
.confirm({
msg: '是否上传',
title: '提示'
})
.then(() => {
resolve(true)
})
.catch(() => {
toast.show('取消上传操作')
})
}
function handleChange({ fileList }) {
fileList.value = fileList
}
```
## 移除图片前置处理
设置 `before-remove` 函数,在用户点击关闭按钮时,会执行 `before-remove` 函数,接收 { file: 移除的文件, index: 移除文件的下标, fileList: 文件列表, resolve },可以对 `file` 进行处理,并通过 `resolve` 函数告知组件是否确定通过,`resolve` 接受 1 个 boolean 值,`resolve(true)` 表示选项通过,`resolve(false)` 表示选项不通过,不通过时不会执行移除图片操作。
```html
```
```typescript
import { useToast, useMessage } from '@/uni_modules/wot-design-uni'
const messageBox = useMessage()
const toast = useToast()
const fileList = ref([
{
url: 'https://img12.360buyimg.com//n0/jfs/t1/29118/6/4823/55969/5c35c16bE7c262192/c9fdecec4b419355.jpg'
}
])
const beforeRemove = ({ file, fileList, resolve }) => {
messageBox
.confirm({
msg: '是否删除',
title: '提示'
})
.then(() => {
toast.success('删除成功')
resolve(true)
})
.catch(() => {
toast.show('取消删除操作')
})
}
function handleChange({ fileList }) {
fileList.value = fileList
}
```
## 选择文件前置处理
设置 `before-choose` 函数,在用户点击唤起项时,会执行 `before-choose` 函数,接收 { fileList: 文件列表, resolve },通过 `resolve` 函数告知组件是否确定通过,`resolve` 接受 1 个 boolean 值,`resolve(true)` 表示选项通过,`resolve(false)` 表示选项不通过,不通过时不会执行选择文件操作。
```html
```
```typescript
import { useToast, useMessage } from '@/uni_modules/wot-design-uni'
const messageBox = useMessage()
const toast = useToast()
const fileList = ref([
{
url: 'https://img12.360buyimg.com//n0/jfs/t1/29118/6/4823/55969/5c35c16bE7c262192/c9fdecec4b419355.jpg'
}
])
const beforeChoose = ({fileList, resolve}) => {
messageBox
.confirm({
msg: '是否选择',
title: '提示'
})
.then(() => {
resolve(true)
})
.catch(() => {
toast.show('取消选择操作')
})
}
function handleChange({ fileList }) {
fileList.value = fileList
}
```
## 上传至云存储
设置 `buildFormData` 函数,在用户点击上传时,会执行 `buildFormData` 函数,接收 `{ file, formData, resolve }`
* `file` 当前上传的文件
* `formData` 待处理的`formData`
* `resolve` 函数,用于告知组件是否组装`formData`成功,`resolve(formData)` 表示组装成功。
```html
```
:::tip 参考
* 上传至阿里云 OSS 的示例,参考[地址](https://help.aliyun.com/zh/oss/use-cases/use-wechat-mini-programs-to-upload-objects)
* 上传至腾讯云 COS 的示例,参考[地址](https://cloud.tencent.com/document/product/436/34929)
* 上传至华为云 OBS 的示例,参考[地址](https://support.huaweicloud.com/bestpractice-obs/obs_05_2000.html)
:::
::: code-group
```ts [阿里云OSS]
const host = ref('Bucket访问域名,例如https://examplebucket.oss-cn-zhangjiakou.aliyuncs.com')
const files = ref[]>([])
function handleChange({ fileList }) {
files.value = fileList
}
/* *
* 构建 formData
* @param {Object} { file, formData, resolve }
* @return {Object} formData
* */
const buildFormData = ({ file, formData, resolve }) => {
let imageName = file.url.substring(file.url.lastIndexOf('/') + 1) // 从图片路径中截取图片名称
// #ifdef H5
// h5端url中不包含扩展名,可以拼接一下name
imageName = imageName + file.name
// #endif
const signature = 'your ' // 签名信息
const ossAccessKeyId = 'your ' // 你的AccessKey ID
const policy = 'your ' // policy信息
const key = `20231120/${imageName}` // 图片上传到oss的路径(拼接你的文件夹和文件名)
const success_action_status = '200' // 将上传成功状态码设置为200,默认状态码为204
formData = {
...formData,
key: key,
OSSAccessKeyId: ossAccessKeyId,
policy: policy,
signature: signature,
success_action_status: success_action_status
}
resolve(formData) // 组装成功后返回 formData,必须返回
}
```
```TS [腾讯云COS]
const host = ref('Bucket访问域名,例如https://examplebucket.oss-cn-zhangjiakou.aliyuncs.com')
const files = ref[]>([])
function handleChange({ fileList }) {
files.value = fileList
}
/* *
* 构建 formData
* @param {Object} { file, formData, resolve }
* @return {Object} formData
* */
const buildFormData = ({ file, formData, resolve }) => {
let imageName = file.url.substring(file.url.lastIndexOf('/') + 1) // 从图片路径中截取图片名称
// #ifdef H5
// h5端url中不包含扩展名,可以拼接一下name
imageName = imageName + file.name
// #endif
const policy = 'your policy' // policy信息
const key = `20231120/${imageName}` // 图片上传到oss的路径(拼接你的文件夹和文件名)
const qAk = 'your qAk'
const qSignAlgorithm = 'your qSignAlgorithm'
const qKeyTime = 'your qKeyTime'
const qSignature = 'your qSignature'
const success_action_status = '200' // 将上传成功状态码设置为200
formData = {
...formData,
key: key,
policy: policy,
'q-sign-algorithm': qSignAlgorithm,
'q-ak': qAk,
'q-key-time': qKeyTime,
'q-signature': qSignature,
success_action_status: success_action_status
}
resolve(formData) // 组装成功后返回 formData,必须返回
}
```
```ts [华为云OBS]
const host = ref('Bucket访问域名,例如https://examplebucket.oss-cn-zhangjiakou.aliyuncs.com')
const files = ref[]>([])
function handleChange({ fileList }) {
files.value = fileList
}
/* *
* 构建 formData
* @param {Object} { file, formData, resolve }
* @return {Object} formData
* */
const buildFormData = ({ file, formData, resolve }) => {
let imageName = file.url.substring(file.url.lastIndexOf('/') + 1) // 从图片路径中截取图片名称
// #ifdef H5
// h5端url中不包含扩展名,可以拼接一下name
imageName = imageName + file.name
// #endif
const signature = 'your ' // 签名信息
const accessKeyId = 'your ' // 你的AccessKey ID
const policy = 'your ' // policy信息
const key = `20231120/${imageName}` // 图片上传到oss的路径(拼接你的文件夹和文件名)
const success_action_status = '200' // 将上传成功状态码设置为200,默认状态码为204
formData = {
...formData,
key: key,
policy: policy,
AccessKeyId: accessKeyId,
signature: signature,
success_action_status: success_action_status
}
resolve(formData) // 组装成功后返回 formData,必须返回
}
```
:::
## 自定义唤起上传样式
使用默认插槽可以修改唤起上传的样式。
```html
上传
```
```typescript
const fileList = ref([
{
url: 'https://img12.360buyimg.com//n0/jfs/t1/29118/6/4823/55969/5c35c16bE7c262192/c9fdecec4b419355.jpg'
}
])
```
## 上传视频
将`accept`设置为`video`可以用于上传视频类型的文件。
```html
```
```typescript
const action = ref('https://mockapi.eolink.com/zhTuw2P8c29bc981a741931bdd86eb04dc1e8fd64865cb5/upload')
const fileList = ref([])
function handleChange({ fileList }) {
fileList.value = fileList
}
```
## 同时上传视频和图片
将`accept`设置为`media`可以用于同时上传视频和图片。仅微信小程序支持。
```html
```
```typescript
const action = ref('https://mockapi.eolink.com/zhTuw2P8c29bc981a741931bdd86eb04dc1e8fd64865cb5/upload')
const fileList = ref([])
function handleChange({ fileList }) {
fileList.value = fileList
}
```
## 仅上传文件
将`accept`设置为`file`可以用于上传除图片和视频以外类型的文件。仅微信小程序支持。
```html
```
```typescript
const action = ref('https://mockapi.eolink.com/zhTuw2P8c29bc981a741931bdd86eb04dc1e8fd64865cb5/upload')
const fileList = ref([])
function handleChange({ fileList }) {
fileList.value = fileList
}
```
## 上传视频图片和文件
将`accept`设置为`all`可以用于上传视频图片和文件。仅微信小程序和 H5 支持。微信小程序使用`chooseMessageFile`实现,H5 使用`chooseFile`实现。
```html
```
```typescript
const action = ref('https://mockapi.eolink.com/zhTuw2P8c29bc981a741931bdd86eb04dc1e8fd64865cb5/upload')
const fileList = ref([])
function handleChange({ fileList }) {
fileList.value = fileList
}
```
## 手动触发上传
设置 `auto-upload` 为 `false` 后,选择文件后不会自动开始上传。调用 `submit` 方法会把未上传的所有文件进行上传。
```html
开始上传
```
```typescript
const uploader = ref()
const onUploadClick = () => {
uploader.value?.submit()
}
```
## 自定义上传方法
使用 `upload-method` 调用自定义的方法来上传文件。
```html
```
```typescript
import type { UploadMethod, UploadFile } from '@/uni_modules/wot-design-uni/components/wd-upload/types'
const fileList = ref([])
const customUpload: UploadMethod = (file, formData, options) => {
const uploadTask = uni.uploadFile({
url: action,
header: options.header,
name: options.name,
fileName: options.name,
fileType: options.fileType,
formData,
filePath: file.url,
success(res) {
if (res.statusCode === options.statusCode) {
// 设置上传成功
options.onSuccess(res, file, formData)
} else {
// 设置上传失败
options.onError({ ...res, errMsg: res.errMsg || '' }, file, formData)
}
},
fail(err) {
// 设置上传失败
options.onError(err, file, formData)
}
})
// 设置当前文件加载的百分比
uploadTask.onProgressUpdate((res) => {
options.onProgress(res, file)
})
}
```
## 自定义预览样式
使用 `preview-cover` 插槽可以自定义覆盖在预览区域上方的内容
```html
{{ file?.name||`文件${index+1}` }}
```
```typescript
const fileList = ref([])
const action: string = 'https://mockapi.eolink.com/zhTuw2P8c29bc981a741931bdd86eb04dc1e8fd64865cb5/upload'
```
## 根据文件拓展名过滤
通过设置 `extension` 可以限制选择文件的格式。以下示例限制只能选择 jpg 和 png 格式的图片:
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------- | ---------------------------------------------- | -------------------------- | ---------------- |
| file-list / v-model:file-list | 上传的文件列表, 例如: \[{ name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg' }] | array | - | \[] | - |
| action | 必选参数,上传的地址 | string | - | - | - |
| header | 设置上传的请求头部 | object | - | - | - |
| multiple | 是否支持多选文件 | boolean | - | - | - |
| disabled | 是否禁用 | boolean | - | false | - |
| reupload | 是否开启覆盖上传,开启后会关闭图片预览 | boolean | - | false | 1.5.0 |
| limit | 最大允许上传个数 | number | - | - | - |
| show-limit-num | 限制上传个数的情况下,是否展示当前上传的个数 | boolean | - | false | - |
| max-size | 文件大小限制,单位为`byte` | number | - | - | - |
| source-type | 选择图片的来源,chooseImage 接口详细参数,查看[官方手册](https://uniapp.dcloud.net.cn/api/media/image.html#chooseimage) | array / string | - | \['album', 'camera'] | - |
| size-type | 所选的图片的尺寸,chooseImage 接口详细参数,查看[官方手册](https://uniapp.dcloud.net.cn/api/media/image.html#chooseimage) | array / string | - | \['original', 'compressed'] | - |
| name | 文件对应的 key,开发者在服务端可以通过这个 key 获取文件的二进制内容,uploadFile 接口详细参数,查看[官方手册](https://uniapp.dcloud.net.cn/api/request/network-file#uploadfile) | string | - | file | - |
| formData | HTTP 请求中其他额外的 form data,uploadFile 接口详细参数,查看[官方手册](https://uniapp.dcloud.net.cn/api/request/network-file#uploadfile) | object | - | - | - |
| header | HTTP 请求 Header,Header 中不能设置 Referer,uploadFile 接口详细参数,查看[官方手册](https://uniapp.dcloud.net.cn/api/request/network-file#uploadfile) | object | - | - | - |
| on-preview-fail | 预览失败执行操作 | function({ index, imgList }) | - | - | - |
| before-upload | 上传文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止上传。 | function({ files, fileList, resolve }) | - | - | - |
| before-choose | 选择图片之前的钩子,参数为文件列表,若返回 false 或者返回 Promise 且被 reject,则停止上传。 | function({ fileList, resolve }) | - | - | - |
| before-remove | 删除文件之前的钩子,参数为要删除的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止上传。 | function({ file, fileList, resolve }) | - | - | - |
| before-preview | 图片预览前的钩子,参数为预览的图片下标和图片列表,若返回 false 或者返回 Promise 且被 reject,则停止上传。 | function({file, index, imgList, resolve }) | - | - | - |
| build-form-data | 构建上传`formData`的钩子,参数为上传的文件、待处理的`formData`,返回值为处理后的`formData`,若返回 false 或者返回 Promise 且被 reject,则停止上传。 | function({ file, formData, resolve }) | - | - | 0.1.61 |
| loading-type | [加载中图标类型](/component/loading) | string | - | circular-ring | - |
| loading-color | [加载中图标颜色](/component/loading) | string | - | #ffffff | - |
| loading-size | [加载中图标尺寸](/component/loading) | string | - | 24px | - |
| status-key | file 数据结构中,status 对应的 key | string | - | status | - |
| image-mode | 预览图片的 mode 属性 | ImageMode | - | aspectFit | - |
| accept | 接受的文件类型 | UploadFileType | **image** **video** **media** **file** **all** | **image** | 1.3.0 |
| compressed | 是否压缩视频,当 accept 为 video | media 时生效 | boolean | - | true | 1.3.0 |
| maxDuration | 拍摄视频最长拍摄时间,当 accept 为 video | media 时生效,单位秒 | Number | - | 60 | 1.3.0 |
| camera | 使用前置或者后置相机,当 accept 为 video | media 时生效 | UploadCameraType | **front** | **back** | 1.3.0 |
| successStatus | 接口响应的成功状态(statusCode)值 | number | - | 200 | 1.3.4 |
| auto-upload | 是否选择文件后自动上传。为 false 时应手动调用 submit() 方法开始上传 | boolean | - | true | 1.3.8 |
| upload-method | 自定义上传方法 | UploadMethod | - | - | 1.3.8 |
| extension | 根据文件拓展名过滤(H5支持全部类型过滤,微信小程序支持all和file时过滤,其余平台不支持) | string\[] | - | - | 1.9.0 |
## accept 的合法值
| name | 说明 | 最低版本 |
| ----- | -------------------------------------------------------------------------------------- | -------- |
| image | 图片,全平台支持 | - |
| video | 视频,全平台支持 | 1.3.0 |
| media | 图片和视频,仅微信支持,使用`chooseMedia`实现 | 1.3.0 |
| file | 从客户端会话选择图片和视频以外的文件,仅微信支持,使用`chooseMessageFile`实现 | 1.3.0 |
| all | 全部类型的文件,仅微信和 H5 支持,微信使用`chooseMessageFile`,H5 使用`chooseFile`实现 | 1.3.0 |
## file 数据结构
| 键名 | 类型 | 说明 | 最低版本 |
| -------- | --------------- | ----------------------------------------------------- | -------- |
| uid | number | 当前上传文件在列表中的唯一标识 | - |
| url | string | 上传图片地址 | - |
| action | string | 上传的地址 | - |
| percent | number | 上传进度 | - |
| size | number | 响文件尺寸应码 | - |
| status | string | 当前图片上传状态。若自定义了 status-key,应取对应字段 | - |
| response | string / object | 后端返回的内容,可能是对象,也可能是字符串 | - |
## Slot
| name | 说明 | 最低版本 |
| ------- | ---------------- | -------- |
| default | 上传唤起插槽样式 | - |
| preview-cover | 自定义覆盖在预览区域上方的内容 | 1.3.12 |
## Events
| 事件名称 | 说明 | 参数 | 最低版本 |
| ----------- | ---------------------- | ------------------------------------------------------------------------------------ | -------- |
| success | 上传成功时触发 | event = { file, fileList,formData } file 为当前选上传的文件,'fileList' 上传图片列表 | - |
| fail | 上传失败时触发 | event = { error, file,formData } error 错误信息,file 上传失败的文件 | - |
| progress | 上传中时触发 | event = { response, file } response 上传中响应信息,file 为当前选上传的文件 | - |
| chooseerror | 选择图片失败时触发 | event = { error } error 选择图片失败的错误信息 | - |
| change | 上传列表修改时触发 | 选中的值 event = { fileList } 'fileList' 上传图片列表 | - |
| remove | 移除图片时触发 | event = { file } file: 移除的文件信息 | - |
| oversize | 文件大小超过限制时触发 | event = { file } file: 尺寸超出的文件信息 | - |
## Methods
| 方法名称 | 说明 | 参数 | 最低版本 |
| -------- | ------------ | ---- | ---------------- |
| submit | 手动开始上传 | - | 1.3.8 |
## Upload 外部样式类
| 类名 | 说明 | 最低版本 |
| -------------------- | ------------------------ | -------- |
| custom-class | 根节点样式类 | - |
| custom-evoke-class | 自定义上传按钮样式类 | - |
| custom-preview-class | 自定义预览图片列表样式类 | - |
---
---
url: 'https://wot-design-uni.cn/component/use-count-down.md'
---
# useCountDown
用于处理倒计时相关的逻辑。
## 基础用法
```ts
import { useCountDown } from '@/uni_modules/wot-design-uni'
const { start, pause, reset, current } = useCountDown({
time: 60 * 1000,
onChange(current) {
console.log('剩余时间', current)
},
onFinish() {
console.log('倒计时结束')
}
})
// 开始倒计时
start()
// 暂停倒计时
pause()
// 重置倒计时
reset()
// 获取当前时间
console.log(current.value)
```
## API
### 参数
| 参数 | 说明 | 类型 | 默认值 |
|-----|------|------|--------|
| time | 倒计时总时间(ms) | number | - |
| millisecond | 是否开启毫秒级渲染 | boolean | false |
| onChange | 倒计时变化回调 | (current: CurrentTime) => void | - |
| onFinish | 倒计时结束回调 | () => void | - |
### 方法
| 方法名 | 说明 | 参数 | 返回值 |
|-------|------|------|--------|
| start | 开始倒计时 | - | - |
| pause | 暂停倒计时 | - | - |
| reset | 重置倒计时 | time?: number | - |
### CurrentTime 结构
```ts
type CurrentTime = {
days: number
hours: number
total: number
minutes: number
seconds: number
milliseconds: number
}
```
---
---
url: 'https://wot-design-uni.cn/component/use-message.md'
---
# useMessage
用于便捷地调用 MessageBox 弹框组件。
## Alert 弹框
alert 弹框只有确定按钮,用于强提醒。
```html
alert
```
```ts
import { useMessage } from '@/uni_modules/wot-design-uni'
const message = useMessage()
function alert() {
message.alert('操作成功')
}
```
## Confirm 弹框
用于提示用户操作。
```html
confirm
```
```ts
import { useMessage } from '@/uni_modules/wot-design-uni'
const message = useMessage()
function confirm() {
message
.confirm({
msg: '提示文案',
title: '标题'
})
.then(() => {
console.log('点击了确定按钮')
})
.catch(() => {
console.log('点击了取消按钮')
})
}
```
## Prompt 弹框
prompt 会展示一个输入框,并可以进行输入校验。
```html
prompt
```
```ts
import { useMessage } from '@/uni_modules/wot-design-uni'
const message = useMessage()
function prompt() {
message
.prompt({
title: '请输入邮箱',
inputPattern: /.+@.+\..+/i,
inputError: '邮箱格式不正确'
})
.then((resp) => {
console.log(resp)
})
.catch((error) => {
console.log(error)
})
}
```
## API
### Methods
| 方法名称 | 说明 | 参数 |
|--------|----------------|---------|
| show | 展示弹框 | options |
| alert | 展示 Alert 弹框 | options |
| confirm| 展示 Confirm 弹框| options |
| prompt | 展示 Prompt 弹框| options |
| close | 关闭弹框 | - |
### Options
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|-----|------|------|--------|--------|
| title | 标题 | string | - | - |
| msg | 消息文案 | string | - | - |
| type | 弹框类型 | string | alert / confirm / prompt | alert |
| closeOnClickModal | 是否支持点击蒙层进行关闭 | boolean | - | true |
| inputType | 当type为prompt时,输入框类型 | string | - | text |
| inputValue | 当type为prompt时,输入框初始值 | string / number | - | - |
| inputPlaceholder | 当type为prompt时,输入框placeholder | string | - | 请输入内容 |
| inputPattern | 当type为prompt时,输入框正则校验 | RegExp | - | - |
| inputValidate | 当type为prompt时,输入框校验函数 | function | - | - |
| inputError | 当type为prompt时,输入框检验不通过时的错误提示文案 | string | - | 输入的数据不合法 |
| confirmButtonText | 确定按钮文案 | string | - | 确定 |
| cancelButtonText | 取消按钮文案 | string | - | 取消 |
| zIndex | 弹窗层级 | number | - | 99 |
| selector | 指定唯一标识 | string | - | '' |
---
---
url: 'https://wot-design-uni.cn/component/use-notify.md'
---
# useNotify
用于便捷地调用 Notify 消息通知组件。
## 基本用法
需要在页面中引入 wd-notify 组件作为挂载点。
```html
notify
```
```ts
import { useNotify } from '@/uni_modules/wot-design-uni'
const { showNotify } = useNotify()
function showNotify() {
showNotify('通知内容')
}
```
## 通知类型
支持 `primary`、`success`、`warning`、`danger` 四种通知类型,默认为 `danger`。
```ts
// 主要通知
showNotify({ type: 'primary', message: '通知内容' })
// 成功通知
showNotify({ type: 'success', message: '通知内容' })
// 危险通知
showNotify({ type: 'danger', message: '通知内容' })
// 警告通知
showNotify({ type: 'warning', message: '通知内容' })
```
## 自定义样式
```ts
showNotify({
message: '自定义颜色',
color: '#ad0000',
background: '#ffe1e1'
})
showNotify({
message: '自定义位置',
position: 'bottom'
})
showNotify({
message: '自定义时长',
duration: 1000
})
```
## API
### Methods
| 方法名称 | 说明 | 参数 |
|---------|------|------|
| showNotify | 展示提示 | `NotifyOptions` / `string` |
| closeNotify | 关闭提示 | - |
| setNotifyDefaultOptions | 修改默认配置,影响所有的 `showNotify` 调用 | `NotifyOptions` |
| resetNotifyDefaultOptions | 重置默认配置,影响所有的 `showNotify` 调用 | - |
### Options
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|-----|------|------|--------|--------|
| type | 类型 | NotifyType | `primary` `success` `warning` `danger` | `danger` |
| message | 展示文案,支持通过\n换行 | string | - | - |
| duration | 展示时长(ms),值为 0 时,notify 不会消失 | number | - | 3000 |
| zIndex | 层级 | number | - | 99 |
| position | 弹出位置 | NotifyPosition | `top` `bottom` | `top` |
| color | 字体颜色 | string | - | - |
| background | 背景颜色 | string | - | - |
| safeHeight | 顶部安全高度 | number / string | - | - |
| onClick | 点击时的回调函数 | (event: MouseEvent) => void | - | - |
| onClosed | 关闭时的回调函数 | () => void | - | - |
| onOpened | 展示后的回调函数 | () => void | - | - |
---
---
url: 'https://wot-design-uni.cn/component/use-toast.md'
---
# useToast
用于便捷地调用 Toast 轻提示组件。
## 基本用法
需要在页面中引入 wd-toast 组件作为挂载点。
```html
toast
```
```ts
import { useToast } from '@/uni_modules/wot-design-uni'
const toast = useToast()
function showToast() {
toast.show('提示信息')
}
```
## 成功、异常、警告、常规
```ts
toast.show('提示信息')
toast.success('操作成功')
toast.error('手机验证码输入错误,请重新输入')
toast.warning('提示信息')
toast.info('常规提示信息')
```
## 使用图标
可以使用`iconClass`指定图标,结合`classPrefix`可以使用自定义图标,参见 [Icon 自定义图标](/component/icon#自定义图标)。
```ts
// 使用组件库内部图标
toast.show({
iconClass: 'star',
msg: '使用组件库内部图标'
})
```
```ts
// 使用自定义图标
toast.show({
iconClass: 'kehuishouwu',
classPrefix: 'fish',
msg: '使用自定义图标'
})
```
## loading 提示
`loading` 开启后需要用户手动关闭,关闭可以调用 `close`,或者再调用一次 toast 提示,因为 toast 只会存在一个,新的 toast 会自动顶掉旧的 toast。
```ts
toast.loading('加载中...')
```
修改 loading 指示器类型:
```ts
toast.loading({
loadingType: 'ring',
msg: '加载中...'
})
```
手动关闭 loading:
```ts
toast.close()
```
## API
### Methods
| 方法名称 | 说明 | 参数 |
| -------- | --------------------- | ------- |
| show | 展示提示 | options |
| success | 成功提示 | options |
| error | 错误提示 | options |
| info | 常规提示 | options |
| warning | 警告提示 | options |
| loading | 加载提示 | options |
| close | 手动关闭消息提示框 | - |
### Options
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|--------------|----------------------------------------|----------|---------------------------|------------|
| msg | 消息内容 | string | - | '' |
| duration | 持续时间,单位 ms,为 0 时表示不自动关闭 | number | - | 2000 |
| direction | 排版方向 | string | vertical / horizontal | horizontal |
| iconName | 图标类型 | string | success / error / warning | '' |
| iconSize | 左侧图标尺寸 | number | - | - |
| iconClass | 自定义图标类名 | string | - | '' |
| classPrefix | 类名前缀 | string | - | 'wd-icon' |
| position | 提示信息框的位置 | string | top / middle / bottom | middle-top |
| zIndex | toast 层级 | number | - | 100 |
| loadingType | 加载中图标类型 | string | ring | outline |
| loadingColor | 加载中图标颜色 | string | - | #4D80F0 |
| selector | 指定唯一标识 | string | - | '' |
| cover | 是否存在一个透明遮罩 | boolean | - | false |
| opened | 完全展示后的回调函数 | Function | - | - |
| closed | 完全关闭后的回调函数 | Function | - | - |
---
---
url: 'https://wot-design-uni.cn/component/use-upload.md'
---
# useUpload
用于处理文件上传和选择相关的逻辑。
## 基础用法
```ts
import { useUpload } from '@/uni_modules/wot-design-uni'
const { startUpload, abort, chooseFile, UPLOAD_STATUS } = useUpload()
// 选择文件
const files = await chooseFile({
accept: 'image',
multiple: true,
maxCount: 9
})
// 开始上传
const file = {
url: 'file://temp/image.png',
status: UPLOAD_STATUS.PENDING,
percent: 0
}
startUpload(file, {
action: 'https://upload-url',
onSuccess(res) {
console.log('上传成功', res)
},
onError(err) {
console.log('上传失败', err)
},
onProgress(progress) {
console.log('上传进度', progress)
}
})
// 中断上传
abort()
```
## API
### 方法
| 方法名 | 说明 | 参数 | 返回值 | 最低版本 |
|-------|------|------|--------|---------|
| startUpload | 开始上传文件 | file: UploadFileItem, options: UseUploadOptions | UniApp.UploadTask | void | - |
| abort | 中断上传 | task?: UniApp.UploadTask | void | - |
| chooseFile | 选择文件 | options: ChooseFileOption | Promise\ | - |
### UseUploadOptions
| 参数 | 说明 | 类型 | 默认值 | 最低版本 |
|-----|------|------|--------|---------|
| action | 上传地址 | string | - | - |
| header | 请求头 | Record\ | {} | - |
| name | 文件对应的 key | string | 'file' | - |
| formData | 其它表单数据 | Record\ | {} | - |
| fileType | 文件类型 | 'image' | 'video' | 'audio' | 'image' | - |
| statusCode | 成功状态码 | number | 200 | - |
| uploadMethod | 自定义上传方法 | UploadMethod | - | - |
| onSuccess | 上传成功回调 | Function | - | - |
| onError | 上传失败回调 | Function | - | - |
| onProgress | 上传进度回调 | Function | - | - |
### ChooseFileOption
| 参数 | 说明 | 类型 | 默认值 | 最低版本 |
|-----|------|------|--------|---------|
| multiple | 是否支持多选文件 | boolean | false | - |
| sizeType | 所选的图片的尺寸 | Array | \['original', 'compressed'] | - |
| sourceType | 选择文件的来源 | Array | \['album', 'camera'] | - |
| maxCount | 最大可选数量 | number | 9 | - |
| accept | 接受的文件类型 | 'image' | 'video' | 'media' | 'file' | 'all' | 'image' | - |
| compressed | 是否压缩视频 | boolean | true | - |
| maxDuration | 视频最大时长(秒) | number | 60 | - |
| camera | 摄像头朝向 | 'back' | 'front' | 'back' | - |
| extension | 根据文件拓展名过滤(H5支持全部类型过滤,微信小程序支持all和file时过滤,其余平台不支持) | string\[] | - |
---
---
url: 'https://wot-design-uni.cn/component/watermark.md'
---
# Watermark 水印 0.1.16
在页面或组件上添加指定的图片或文字,可用于版权保护、品牌宣传等场景。
## 基础用法
将 WaterMark 组件放在页面中,可以通过`content`字段设置水印显示内容,通过`width`和`height`设置单个水印的高度与宽度,展示一个全屏的水印。
```html
```
### 图片水印
通过`image`字段设置网络图片地址或Base64图片,通过`image-width`和`image-height`字段设置水印图片的宽高。
**注意:钉钉小程序平台仅支持网络图片。**
```html
```
### 局部水印
通过`full-screen`设置是否为全屏水印。
```html
```
### 自定义层级和透明度
通过`opacity`设置透明度、`z-index`设置水印层级。
```html
```
## Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 |
| ------------- | ------------------------ | ------- | ------------------------------------ | ------ | -------- |
| `content` | 显示内容 | string | - | `''` | 0.1.16 |
| `image` | 显示图片的地址,支持网络图片和base64(钉钉小程序支持网络图片) | string | - | `''` | 0.1.16 |
| `imageHeight` | 图片高度 | number | - | `100` | 0.1.16 |
| `imageWidth` | 图片宽度 | number | - | `100` | 0.1.16 |
| `gutterX` | X轴间距,单位px | number | - | `0` | 0.1.16 |
| `gutterY` | Y轴间距,单位px | number | - | `0` | 0.1.16 |
| `width` | canvas画布宽度,单位px | number | - | `100` | 0.1.16 |
| `height` | canvas画布高度,单位px | number | - | `100` | 0.1.16 |
| `fullScreen` | 是否为全屏水印 | boolean | - | `true` | 0.1.16 |
| `color` | 水印字体颜色 | string | - | `'#8c8c8c'` | 0.1.16 |
| `size` | 水印字体大小,单位px | number | - | `14` | 0.1.16 |
| `fontStyle` | 水印字体样式(仅微信、支付宝和h5支持) | string | `normal` / `italic` / `oblique` | `'normal'` | 0.1.16 |
| `fontWeight` | 水印字体的粗细(仅微信、支付宝和h5支持) | string | `normal` / `bold` / `bolder` | `'normal'` | 0.1.16 |
| `fontFamily` | 水印字体系列(仅微信、支付宝和h5支持) | string | - | `'PingFang SC'` | 0.1.16 |
| `rotate` | 水印旋转角度 | number | - | `-25` | 0.1.16 |
| `zIndex` | 自定义层级 | number | - | `1100` | 0.1.16 |
| `opacity` | 自定义透明度,取值 0~1 | number | - | `0.5` | 0.1.16 |
---
---
url: 'https://wot-design-uni.cn/guide/introduction.md'
---
# 介绍
`wot-design-uni`组件库基于`vue3`+`Typescript`构建,参照`wot design`的设计规范进行开发,提供 70+高质量组件,支持暗黑模式、国际化和自定义主题,旨在给开发者提供统一的 UI 交互,同时提高研发的开发效率。
## 快速上手
请查看[快速上手](/guide/quick-use.html)文档。
## 扫码体验
## ✨ 特性
* 🎯 多平台覆盖,支持 微信小程序、支付宝小程序、钉钉小程序、H5、APP 等.
* 🚀 70+ 个高质量组件,覆盖移动端主流场景.
* 💪 使用 Typescript 构建,提供良好的组件类型系统.
* 🌍 支持国际化,内置 15 种语言包.
* 📖 提供丰富的文档和组件示例.
* 🎨 支持修改 CSS 变量实现主题定制.
* 🍭 支持暗黑模式
## 链接
* [更新日志](/guide/changelog)
* [常见问题](/guide/common-problems)
* [Discussions 讨论区](https://github.com/Moonofweisheng/wot-design-uni/discussions)
* [互助交流群](/guide/join-group.html)
* [优秀案例](/guide/cases)
## 赞助我们
如果您认为 Wot UI 帮助到了您的开发工作,您可以选择[赞助](/reward/reward.html)我们,赞助无门槛,哪怕是一杯柠檬水也好。
捐赠后您的昵称、留言等将会展示在[捐赠榜单](/reward/donor.html)中。
## 生态推荐
| 项目 | 描述 |
| ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
| [awesome-uni-app](https://github.com/uni-helper/awesome-uni-app) | 多端统一开发框架 uni-app 优秀开发资源汇总 |
| [create-uni](https://github.com/uni-helper/create-uni) | 快速创建 uni-app 项目 |
| [wot-demo](https://github.com/Moonofweisheng/wot-demo) | 基于 [vitesse-uni-app](https://github.com/uni-helper/vitesse-uni-app) 的wot-design-uni快速起手demo |
| [wot-starter-retail](https://github.com/Moonofweisheng/wot-starter-retail) | 基于 wot-design-uni 的 uni-app 零售行业模板 |
| [Wot UI Snippets](https://marketplace.visualstudio.com/items?itemName=kiko.wot-design-uni-snippets) | Wot UI 代码块提示 |
| [uni-mini-ci](https://github.com/Moonofweisheng/uni-mini-ci) | 一个 uni-app 小程序端构建后支持 CI(持续集成)的插件 |
| [uni-mini-router](https://github.com/Moonofweisheng/uni-mini-router) | 一个基于 vue3 和 Typescript 的轻量级 uni-app 路由库 |
| [unibest](https://github.com/codercup/unibest) | 基于 wot-design-uni 的 uni-app 模板 |
| [wot-design-uni AI 助手](https://www.coze.cn/store/bot/7347916532258701363) | 一个能回答你关于 wot-design-uni 组件库问题的智能助手 |
| [uni-ku-root](https://github.com/uni-ku/root) | 一个模拟 App.vue 原有能力的根组件插件 |
## 鸣谢
* [wot-design](https://github.com/jd-ftf/wot-design-mini) - 感谢 wot-design 团队多年来的不断维护,让 wot-design-uni 能够站在巨人的肩膀上。
* [uni-helper](https://github.com/uni-helper) - 感谢 uni-helper 团队提供的 uni-app 工具库,让 wot-design-uni 能够更方便地使用。
* [捐赠者](https://wot-design-uni.cn/reward/donor.html) - 感谢所有捐赠者,是你们的捐赠让 wot-design-uni 能够更好地发展。
## 开源协议
本项目基于 [MIT](https://zh.wikipedia.org/wiki/MIT%E8%A8%B1%E5%8F%AF%E8%AD%89) 协议,请自由地享受和参与开源。
---
---
url: 'https://wot-design-uni.cn/guide/locale.md'
---
# 国际化0.2.20
Wot UI 默认使用中文语言,同时支持多语言切换,如果你希望使用其他语言,你可以参考下面的方案。
:::warning 注意点
目前组件库发布到 npm 上的包是未经编译的`vue`与`ts`,而 Vite 会将[预构建](https://cn.vitejs.dev/guide/dep-pre-bundling.html)的依赖项缓存到 `node_modules/.vite`,组件库的国际化的实现是基于`reactive`实现的数据共享,在`dev`阶段就会出现页面使用预构建产物中的国际化数据,而组件库使用组件库内部的国际化数据,所以在非`uni_modules`模式引入时,需要在`vite.config.ts`中增加以下配置:
```ts
import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
export default defineConfig({
...
optimizeDeps: {
exclude: process.env.UNI_PLATFORM === 'h5' && process.env.NODE_ENV === 'development' ? ['wot-design-uni'] : []
}
...
})
```
使用[optimizeDeps.exclude](https://cn.vitejs.dev/config/dep-optimization-options.html#optimizedeps-exclude)在预构建中强制排除`wot-design-uni`模块,在`uni_modules`模式下,不需要做任何处理。
:::
## 使用其他语言
我们通过 **Locale** 组件实现多语言支持,使用 **Locale.use** 方法可以切换当前使用的语言。
```typescript
import { Locale } from 'wot-design-uni'
// 引入英文语言包
import enUS from 'wot-design-uni/locale/lang/en-US'
Locale.use('en-US', enUS)
```
## 覆盖语言包
通过 **Locale.add** 方法可以实现文案的修改和扩展,示例如下:
```typescript
import { Locale } from 'wot-design-uni'
const messages = {
'zh-CN': {
calendar: {
title: '请选择日期' // 将'选择日期'修改为'请选择日期'
}
}
}
Locale.add(messages)
```
## 支持的语言
| 语言 | 文件名 | 版本 |
| ---------------- | --------- | --------- |
| 简体中文 | zh-CN | `v0.2.20` |
| 繁体中文(台湾) | zh-TW | `v0.2.20` |
| 繁体中文(香港) | zh-HK | `v0.2.20` |
| 英语 | en-US | `v0.2.20` |
| 泰语 | th-TH | `v0.2.20` |
| 越南语 | vi-VN | `v0.2.20` |
| 阿拉伯语 | ar-SA | `v1.3.12` |
| 德语 | de-DE | `v1.3.12` |
| 西班牙语 | es-ES | `v1.3.12` |
| 葡萄牙语 | pt-PT | `v1.3.12` |
| 法语 | fr-FR | `v1.3.12` |
| 日语 | ja-JP | `v1.3.12` |
| 韩语 | ko-KR | `v1.3.12` |
| 土耳其语 | tr-TR | `v1.3.12` |
| 俄语 | ru-RU | `v1.3.12` |
如果你需要使用其他的语言,欢迎贡献 [PR](https://github.com/Moonofweisheng/wot-design-uni/pulls),只需在[这里](https://github.com/Moonofweisheng/wot-design-uni/tree/master/src/uni_modules/wot-design-uni/locale/lang)添加一个语言配置文件即可。
---
---
url: 'https://wot-design-uni.cn/guide/common-problems.md'
---
# 常见问题 FAQ
本节介绍在开发过程当中遇到的部分 **常见问题** 以及 **解决办法**
## 目前支持哪些平台?
目前支持 微信小程序、支付宝小程序、钉钉小程序、H5、APP 等平台。
## 组件库有没有提供可以单独引入的组件?
目前是没有的,首先在插件市场缺少`CI/CD`工具,无法实现自动化发布,维护一套单独引入的组件费时费力,其次组件库提供的安装方式均可以实现按需引入,所以是无需提供单独引入的组件的。
## 如何开启暗黑模式?
`Wot UI`支持深色模式、主题定制等能力,详见[ConfigProvider 全局配置](/component/config-provider.html)组件。
## 有没有技术交流群?
有!
可以加入[Wot UI 互助群](/guide/join-group.html),分享心得、交流体会。
## Sass抛出大量错误和警告?
`Dart Sass 3.0.0` 废弃了一批API,而组件库目前还未兼容,因此请确保你的`sass`版本为`1.78.0`及之前的版本。可以通过以下命令安装指定版本:
::: code-group
```bash [npm]
npm i sass@1.78.0 -D
```
```bash [yarn]
yarn add sass@1.78.0 -D
```
```bash [pnpm]
pnpm add sass@1.78.0 -D
```
:::
## 小程序样式隔离
### 在页面中使用 Wot UI 组件时,可直接在页面的样式文件中覆盖样式
```vue
主要按钮
```
```scss
/* 页面样式 */
:deep(.wd-button) {
color: red !important;
}
```
### 为什么在组件中无法覆盖组件库样式?
在自定义组件中使用 Wot UI 组件时,需开启`styleIsolation: 'shared'`选项
```vue
主要按钮
```
`Vue 3.2` 及以下版本可以使用如下配置开启`styleIsolation: 'shared'`选项:
```ts
// vue
```
```scss
/* 组件样式 */
:deep(.wd-button) {
color: red !important;
}
```
`Vue 3.3+` 可以通过`defineOptions`开启`styleIsolation: 'shared'`选项:
```ts
```
## 小程序使用外部样式类
Wot UI 开放了大量的自定义样式类供开发者使用,具体的样式类名称可查阅对应组件的“外部样式类”部分。需要注意的是普通样式类和自定义样式类的优先级是未定义的,因此使用时请添加`!important`以保证外部样式类的优先级。
::: tip 请注意
`Wot UI` 的组件均设置了`scoped`,所以它的 CSS 只会影响当前组件的元素,和 Shadow DOM 中的样式封装类似,处于 `scoped` 样式中的选择器如果想要做更“深度”的选择,也即:影响到子组件,可以使用 `:deep()` 这个伪类:
```css
```
上面的代码会被编译成:
```css
.a[data-v-f3f3eg9] .b {
/* ... */
}
```
详细可见[单文件组件 CSS 功能](https://cn.vuejs.org/api/sfc-css-features.html#sfc-css-features)。
:::
```vue
主要按钮
```
```scss
/* 组件样式 */
:deep(.custom-button) {
color: red !important;
}
```
## 小程序自定义组件渲染问题
微信/QQ/百度/抖音这四家小程序,自定义组件在渲染时会比 App/H5 端多一级节点,下面以`divider`组件举例:
```vue
```
### 解决办法
在微信端可以使用[virtualHost](https://uniapp.dcloud.net.cn/tutorial/vue-api.html#%E5%85%B6%E4%BB%96%E9%85%8D%E7%BD%AE)解决,`virtualHost`设为`true`之后会将自定义节点设置成虚拟的,更加接近 Vue 组件的表现,可以去掉微信小程序自定义组件多出的最外层标签,启用后还可以通过 [mergeVirtualHostAttributes](https://uniapp.dcloud.net.cn/collocation/manifest.html#mp-weixin) 合并合并组件虚拟节点外层属性。
```js
// vue2使用virtualHost
export default {
data() {
return {}
},
options: {
virtualHost: true
}
}
```
```ts
// vue3 script setup 使用virtualHost
```
### 启用 virtualHost 效果
这里我们还是以`divider`组件举例:
```vue
```
## 如何定制主题?
我们为每个组件提供了`css 变量`,可以参考[config-provider](../component/config-provider)组件的使用介绍来定制主题。
## Toast 和 MessageBox 组件调用无效果?
首先要检查一下用法是否正确,`uni-app`平台不支持全局挂载组件,所以`Message`、`Toast`等组件仍需在 SFC 中显式使用,例如:
```html
```
`Message`、`Toast`的函数式调用是基于`provide/inject`实现的,所以你的调用要确保在`setup`中。
## 编译到支付宝小程序 Popup 组件的遮罩无法显示?
uni-app 3.99.2023122704 将支付宝小程序的`styleIsolation`默认值设置为了`apply-shared`,而支付宝小程序默认的`styleIsolation`为`shared`,所以导致更新到`3.99.2023122704`版本后,支付宝小程序自定义组件样式穿透无法生效,参见[issue](https://ask.dcloud.net.cn/question/187142)。
解决办法:在`mainfest.json`中设置`styleIsolation`为`shared`。
```json
{
// ...
"mp-alipay": {
// ...
"styleIsolation": "shared"
// ...
}
// ...
}
```
## 为什么组件库文档中都是从`@/uni_modules/wot-design-uni`导入方法和工具类?
当前组件库本身的开发方式是将组件库代码放到`@/uni_modules/wot-design-uni`这个目录的,所以文档中都是从`@/uni_modules/wot-design-uni`导入方法和工具类,使用`npm`方式安装组件库的时候可以这样调整:
```ts
// useToast、useNotify等同理
import { useMessage } from '@/uni_modules/wot-design-uni'
```
替换为
```ts
import { useMessage } from 'wot-design-uni'
```
## uni-app 如何自定义编译平台,例如钉钉小程序?
可以参考`uni-app`文档中[package.json](https://uniapp.dcloud.net.cn/collocation/package.html#%E7%A4%BA%E4%BE%8B-%E9%92%89%E9%92%89%E5%B0%8F%E7%A8%8B%E5%BA%8F)章节。
钉钉小程序示例:
```JSON
{
"uni-app": {
"scripts": {
"mp-dingtalk": {
"title": "钉钉小程序",
"env": {
"UNI_PLATFORM": "mp-alipay"
},
"define": {
"MP-DINGTALK": true
}
}
}
},
}
```
## 当前组件库提供的用于控制组件显示隐藏 hooks 不生效怎么办?
:::tip 注意
多次执行`use`后,`useToast`、`useMessage`、`useNotify`、`useQueue`等 hooks 不生效的问题已在1.3.14版本修复,请升级到最新版本。
:::
***可以按照以下步骤进行排查***
1. `uni-app`平台不支持全局挂载组件,所以`Message`、`Toast`、`Notify`等组件需在 SFC 中显式使用,例如:
```html
```
2. `useToast`、`useMessage`、`useNotify`、`useQueue`等 hooks 不生效,请检查是否在`setup`中调用,如果`setup`中调用,请检查当前页面是否存在多次执行`use`的场景,例如在多个组件中执行,这样会导致上一次`use`的失效。针对此场景,组件的函数式调用都支持传入`selector`参数,可以通过`selector`参数来指定组件,例如:
```html
```
```ts
const toast = useToast()
const myToast = useToast('my-toast')
```
## 为什么在微信小程序上使用`Popup`、`ActionSheet`、`DropDownItem`等弹出框组件包裹`Slider`、`Tabs`等组件时,`Slider`、`Tabs`表现异常?
目前uni-app使用`v-if`控制插槽是否显示编译到微信小程序端存在问题,具体可以参考issue:[4755](https://github.com/dcloudio/uni-app/issues/4755)、[4847](https://github.com/dcloudio/uni-app/issues/4847)。而`Popup`、`ActionSheet`、`DropDownItem`恰好正是使用`v-if`控制插槽是否显示,所以会导致`Slider`、`Tabs`在未渲染时执行了相关生命周期。`Slider`、`Tabs`等组件的一些数据如`Slider`的宽度,`Tabs`的滑块位置等会在onMounted等生命周期进行获取,此时这些数据将会存在异常。
解决办法:
1. 在`Slider`、`Tabs`等组件外部使用`v-if`控制弹框打开前不展示,例如:
```html
```
1. 在`Popup`、`ActionSheet`、`DropDownItem`等组件完全打开时的钩子中重新初始化`Slider`、`Tabs`组件,例如:
```html
```
```ts
const slider = ref()
function handleOpened() {
slider.value!.initSlider()
}
```
## 为何messageBox弹出了多个?
检查一下弹出多个`messageBox`的页面是否存在多个相同`selector`或无`selector`的``标签(当前页面包括页面中使用的组件)。`toast`亦是同理,在子组件中使用`messageBox`等组件需要指定`selector`并确保`selector`唯一。
## 如何快速解决你的问题?
[提问的智慧](https://lug.ustc.edu.cn/wiki/doc/smart-questions/),可以帮助你快速提出正确的问题,获得更快的解答。
## 关于我们
**如果您的问题不在上述列表中或您有更好的建议,请联系我们 [Moonofweisheng](https://github.com/Moonofweisheng/wot-design-uni)**
---
---
url: 'https://wot-design-uni.cn/guide/quick-use.md'
---
# 快速上手
本节介绍如何在 `uni-app` 项目中安装、配置并使用 `Wot UI`。
## 使用之前
使用前,请确保你已经学习过 Vue 官方的 [快速上手](https://cn.vuejs.org/guide/quick-start.html) 和 uni-app 提供的 [学习路线](https://uniapp.dcloud.net.cn/resource.html)。
## 安装
:::warning 关于安装
`Wot UI` 提供了 `uni_modules` 和 `npm` 两种安装方式,按需选择。
* 使用`uni_modules`安装无需额外配置,即插即用,但是每次更新组件库需要处理代码差异(一般直接覆盖就可以)。
* 使用`npm`安装需要额外配置,更新组件库时无需处理代码差异。
:::
### npm 安装
::: code-group
```bash [npm]
npm i wot-design-uni
```
```bash [yarn]
yarn add wot-design-uni
```
```bash [pnpm]
pnpm add wot-design-uni
```
:::
### uni\_modules 安装
`Wot UI` 支持 [uni\_modules](https://uniapp.dcloud.net.cn/plugin/uni_modules.html#uni-modules) 规范,已经上架到 uni-app 的插件市场。
在 `uni-app 插件市场` 选择使用 `HBuildX` 导入,或者选择手动在 src 目录下创建 uni\_modules 文件夹并将 `Wot UI` 解压到 uni\_modules 中,结构如下:
```bash
- uni_modules
- - - wot-design-uni
```
下载地址:wot-design-uni
## Sass
`Wot UI` 依赖 `sass` ,因此在使用之前需要确认项目中是否已经安装了 `sass`,如果没有安装,可以通过以下命令进行安装:
::: code-group
```bash [npm]
npm i sass -D
```
```bash [yarn]
yarn add sass -D
```
```bash [pnpm]
pnpm add sass -D
```
:::
::: warning 提醒
`Dart Sass 3.0.0` 废弃了一批 API,而组件库目前还未兼容,因此请确保你的`sass`版本为`1.78.0`及之前的版本。参见参见[常见问题](/guide/common-problems.html#sass抛出大量错误和警告)。
:::
## 配置
### 导入组件
::: tip 提醒
使用 `uni_modules` 安装时 `Wot UI` 的组件天然支持 `easycom` 规范,无需额外配置就可以自动引入组件,而使用 `npm 安装` 需按照此步骤配置,以下两种方案二选一即可。
:::
#### 配置 easycom 自动引入组件方案 1
传统 vue 组件,需要安装、引用、注册,三个步骤后才能使用组件。`easycom`将其精简为一步。\
只要组件路径符合规范(具体见[easycom](https://uniapp.dcloud.net.cn/collocation/pages.html#easycom)),就可以不用引用、注册,直接在页面中使用。
:::tip 提醒
* uni-app 考虑到编译速度,直接在 `pages.json` 内修改 `easycom` 不会触发重新编译,需要改动页面内容触发。
* 请确保您的 `pages.json` 中只有一个 `easycom` 字段,否则请自行合并多个引入规则。
:::
```JSON
// pages.json
{
"easycom": {
"autoscan": true,
"custom": {
"^wd-(.*)": "wot-design-uni/components/wd-$1/wd-$1.vue"
}
},
// 此为本身已有的内容
"pages": [
// ......
]
}
```
#### 基于 vite 配置自动引入组件方案 2
如果不熟悉 `easycom`,也可以通过 [@uni-helper/vite-plugin-uni-components](https://github.com/uni-helper/vite-plugin-uni-components) 实现组件的自动引入。
:::tip 提醒
* 推荐使用 `@uni-helper/vite-plugin-uni-components@0.0.9` 及以上版本,因为在 0.0.9 版本开始其内置了 `wot-design-uni` 的`resolver`。
* 如果使用此方案时控制台打印很多 `Sourcemap for points to missing source files` ,可以尝试将 `Vite` 版本升级至 `4.5.x` 以上版本。
:::
::: code-group
```bash [npm]
npm i @uni-helper/vite-plugin-uni-components -D
```
```bash [yarn]
yarn add @uni-helper/vite-plugin-uni-components -D
```
```bash [pnpm]
pnpm add @uni-helper/vite-plugin-uni-components -D
```
:::
```ts
// vite.config.ts
import { defineConfig } from "vite";
import uni from "@dcloudio/vite-plugin-uni";
import Components from '@uni-helper/vite-plugin-uni-components'
import { WotResolver } from '@uni-helper/vite-plugin-uni-components/resolvers'
export default defineConfig({
plugins: [
// make sure put it before `Uni()`
Components({
resolvers: [WotResolver()]
}), uni()],
});
```
如果你使用 `pnpm` ,请在根目录下创建一个 `.npmrc` 文件,参见 [Issue](https://github.com/antfu/unplugin-vue-components/issues/389)。
```text
// .npmrc
public-hoist-pattern[]=@vue*
// or
// shamefully-hoist = true
```
## Volar 支持
如果您使用 `Volar`,请在 `tsconfig.json` 中通过 `compilerOptions.type` 指定全局组件类型。
:::tip
cli 项目使用 `uni_modules` 安装无需配置,对 `Volar` 的支持自动生效,`HbuildX` 项目不支持此配置,故此步骤仅在 `cli` 项目使用 `npm` 安装时需要配置。
:::
```json
// tsconfig.json
{
"compilerOptions": {
"types": ["wot-design-uni/global"]
}
}
```
## 使用
`Wot UI` 安装、配置完成之后,支持组件自动引入,故可以直接在 SFC 中使用,无需在页面内 import,也不需要在 components 内声明,即可在任意页面使用。值得注意的是,`uni-app` 平台不支持全局挂载组件,所以 `Message`、`Toast` 等组件仍需在 SFC 中显式使用,例如:
```html
```
## 脚手架
我们提供了快速上手项目 [wot-demo](https://github.com/Moonofweisheng/wot-demo),它集成了 `Wot UI` 和众多优秀插件,你可以直接克隆该项目。
你也可以使用[create-uni](https://github.com/uni-helper/create-uni),通过以下命令快速创建一个起手项目:
```bash
pnpm create uni@latest -t wot-demo <你的项目名称>
```
---
---
url: 'https://wot-design-uni.cn/guide/custom-theme.md'
---
# 自定义主题
Wot UI 每个组件基本都有自定义类名 custom-class,可以在组件根节点加入你页面上的类名,进行样式修改。
## 主题介绍
### 主要变量介绍
以下样式变量在多个组件中被使用,通过修改这些主要变量,可以快速定义一套自定义主题。
**主题色**为:
**主题品牌色-小渐变(按钮,渐变更弱)色**:
**品牌色-大渐变(大面积背景色/插件icon底色,渐变更强)**:
**功能色**:
**辅助色**:
### 中性色
中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
## 定制主题
我们为每个组件提供了`css 变量`,可以参考[config-provider](../component/config-provider)组件的使用介绍来定制主题。