diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..c79ea59 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,75 @@ +# AGENTS.md + +本文件面向 AI 编码代理,介绍本项目的架构、约定与开发方式。 + +## 项目概述 + +**SHJ_APP**(施工管理 App)是一个基于 **uni-app + Vue 3** 的跨端移动应用,服务于管道施工 / 焊接管理业务(点口管理、试压管理、包装管理、发货管理、预制组件管理、下料抽检、组对抽查、焊接日报、防腐处理等)。主要运行目标是**微信小程序**(`manifest.json` 中已配置 `mp-weixin` appid),同时兼容 H5 和 App(5+App)。 + +后端接口地址(见 `utils/request.js`): + +- API:`https://lygcgs.com.cn:8078/shjapi/api/` +- 附件/文件:`https://lygcgs.com.cn:8078/shj/` + +## 技术栈 + +- **框架**:uni-app(Vue 3,`manifest.json` 中 `vueVersion: "3"`)+ Vite +- **状态管理**:Pinia + `pinia-plugin-persist-uni`(状态持久化到本地存储) +- **UI 组件库**:uview-pro(`u-*` 组件通过 easycom 自动引入)。组件用法/props 参考本地文档副本 `docs/uview-pro-llms-full.txt`(原始地址 ,可按 `url:` 分节检索,共 147 个组件/主题文档) +- **样式**:SCSS(全局样式在 `App.vue` 中引入;公共变量在 `uni.scss`,如 `$app-primary: #2979ff`) +- **条码**:bwip-js(`assets/js/js_sdk/`,微信小程序需要 `main.js` 顶部的 `atob` polyfill) + +## 构建与运行 + +`package.json` 中**没有定义任何 scripts**,也没有 `vite.config.*`。本项目通常通过 **HBuilderX** 开发调试(运行 → 运行到小程序模拟器 → 微信开发者工具),构建产物输出到 `unpackage/`(已 gitignore)。 + +依赖安装:`pnpm install`(仓库同时存在 `pnpm-lock.yaml` 与 `package-lock.json`,以 pnpm 为主)。 + +## 目录结构 + +``` +pages/ 主包页面:login(登录)、index(首页)、mine(我的)、todo(待办) +pipe/ 分包(root: pipe):diankou 点口、pressure 试压、packaging 包装、 + deliver 发货、precast 预制组件 +scanpages/ 分包(root: scanpages):hj/ 扫码与焊接相关页面(材料详情、下料抽检、 + 组对抽查、焊接日报、防腐处理、日报审核)、components/nbd-print-prop.vue +components/ 全局公共组件,均为 nbd-* 前缀(easycom 自动注册) +api/ 接口层:auth.js / user.js / base.js / hj.js,按业务模块划分 +store/ Pinia:index.js 入口,modules/ 下 user.js(登录态/项目)、 + menu.js(菜单权限/快捷应用)、large.js(焊接首页数据) +utils/ request.js(请求封装)、scanUtils.js(扫码解析)、constant.js + (常量/默认应用配置)、formatTime.js、bwipjs-polyfill.js +assets/ css/(page.scss、components.scss 全局样式)、icon/(nbd-icon 图标)、js/ +docs/ 参考文档(uview-pro-llms-full.txt 组件库文档副本) +static/ 图片与 tabBar 图标 +pages.json 页面路由、分包、tabBar、easycom 配置(修改路由必须改这里) +manifest.json 应用配置(appid、微信小程序 appid、Android 权限等) +``` + +## 代码约定 + +- 页面与组件统一使用 **Vue 3 ` +``` + +## 配置顶部的提示信息和底部取消按钮 + +* `tips`参数为一个对象类型,属性可以设置`text`,`fontSize`(字体大小),`color`(颜色),文本内容将会显示组件的上方,起提示作用。 +* `cancel-btn`参数配置是否显示底部的取消按钮,默认显示 + +```html + + + +``` + +## 如何知道点了第几项 + +`click`回调事件带有一个`index`值,这个索引值为传递的`list`数组的索引值,根据回调事件,能获得点击了 +第几项和该项的内容 + +```html + + + +``` + +## 自定义 item 内容 + +从`v0.3.5`开始,`u-action-sheet`开始支持自定义`item`内容,通过定义 u-action-sheet-item 的`slot="default"`插槽,传入自定义的`item`内容,会覆盖默认的`item`内容。 +该功能兼容使用`list`配置数据的方式。 + +如下示例: + +```vue + + +``` + +当你要使用`u-action-sheet-item`时,不需要传入`list`即可,如使用以下代码是同样的效果: + +```html + + +``` + +使用`slot`自定义内容,则需要使用`u-action-sheet-item`组件,如下示例: + +```html + + +``` + +## API + +### Props ActionSheet + +注意:props 中没有控制组件弹出与收起的参数,因为这是通过 v-model 绑定变量实现的,见上方说明。 +|参数|说明|类型|默认值|可选值| +|-|-|-|-|-| +|list|按钮的文字数组,见上方文档示例|Array\|\[]|-| +|tips|顶部的提示文字,见上方文档示例|Object|-|-| +|cancel-btn|是否显示底部的取消按钮|Boolean|true|false| +|border-radius|弹出部分顶部左右的圆角值,单位 rpx|Number \ String|0|-| +|mask-close-able|点击遮罩是否可以关闭|Boolean|true|false| +|safe-area-inset-bottom|是否开启[底部安全区适配](/zh/components/safeAreaInset.html#关于uview某些组件safe-area-inset参数的说明)|Boolean|false|true| +|z-index|`z-index`值|Number \ String|1075|-| +|cancel-text|取消按钮的提示文字|String|取消|-| +|async-close |是否异步关闭|Boolean|false|true| + +### Events ActionSheet + +|事件名|说明|回调参数|版本| +|:-|:-|:-|:-| +| click | 点击ActionSheet列表项时触发 | index: 点击了第几个,从0开始 | - | +| close | 点击取消按钮时触发 | - | - | + +### Props ActionSheetItem + +注意:props 中没有控制组件弹出与收起的参数,因为这是通过 v-model 绑定变量实现的,见上方说明。 + +|参数|说明|类型|默认值|可选值|版本| +|:-|:-|:-|:-|:-|:-| +|text|标题|String|''|-|0.3.5| +|subText|描述|String|''|-|0.3.5| +|padding|边距|Number \ String|'34rpx 0'|-|0.3.5| +|color|字体颜色|String|mainColor|-|0.3.5| +|fontSize|字体大小|Number \ String|'32rpx'|-|0.3.5| +|disabled|是否禁用|Boolean|false|true|0.3.5| +|asyncClose|是否异步关闭|Boolean|false|true|0.3.5| + +### Slots ActionSheetItem + +|名称|说明|版本| +|:-|:-|:-| +|default|自定义item内容|0.3.5| + +### Events ActionSheetItem + +|事件名|说明|回调参数|版本| +|:-|:-|:-|:-| +| click | 点击ActionSheet列表项时触发 | index: 点击了第几个,从0开始 | 0.3.5 | +| async-close | 是否异步关闭 | Boolean | 0.3.5 | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/alertTips.md' +--- +# AlertTips 警告提示 + +警告提示,展现需要关注的信息。 + +## 使用场景 + +* 当某个页面需要向用户显示警告的信息时。 +* 非浮层的静态展现形式,始终展现,不会自动消失,用户可以点击关闭。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 通过`title`和`description`设置组件的标题和描述内容,如果内容和标题同时存在,标题字体会被加粗加大 +* 通过`type`设置主题类型,有`primary`,`success`,`error`,`warning`,`info`可选值 + +```html + + + +``` + +## 图标 + +通过`show-icon`设置是否显示图标,作用是让信息类型更加醒目。 + +**注意**:当前版本图标为uView内置图标,根据`type`参数显示不同的图标,无法自定义。 + +```html + +``` + +## 可关闭的警告提示 + +显示关闭按钮,点击可关闭警告提示。 + +* `close-text`参数配置关闭的文字,默认为一个叉的icon图标。`close-able`为`true`时有效 +* `close-able`参数配置是否允许关闭的文字或图标 + +::: warning 注意 +由于`props`传参的限制,您需要监听组件的`close`事件,并在此此事件中设置`show`参数为`false`,才能关闭组件。 +::: + +```html + + + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| title | 显示的文字 | String | - | - | +| description | 辅助性文字,颜色比`title`浅一点,字号也小一点,可选 | String | - | - | +| close-able | 关闭按钮(默认为叉号icon图标) | Boolean | false | true | +| type | 使用预设的颜色 | String | warning | success / primary / error / info | +| close-text | 用文字替代关闭图标,`close-able`为`true`时有效 | String | - | - | +| show-icon | 是否显示左边的辅助图标 | Boolean | false | true | +| show | 显示或隐藏组件 | Boolean | true | false | +| icon | 左侧的图标名称,如设置`type`和`show-icon`值,会有一个默认的图标 | String | - | - | +| icon-style | 自定义图标的样式,对象形式 | Object | - | - | +| title-style | 自定义标题的样式,对象形式 | Object | - | - | +| desc-style | 自定义内容的样式,对象形式 | Object | - | - | + +### Events + +|事件名|说明|回调参数| +|:-|:-|:-| +|close|点击关闭按钮时触发,需在此回调设置`show`为`false`|-| +|click|点击组件时触发|-| + +--- + +--- +url: 'https://uviewpro.cn/zh/components/avatar.md' +--- +# Avatar 头像 + +本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +通过`src`指定头像的路径即可简单使用,如果传递了`text`参数,`text`将会优先起作用 + +**注意:** 请保证传递给`src`的是绝对地址,而不是相对地址,为什么呢?因为传入`avatar`组件的相对地址,是相对于组件的,而不是父组件(页面),所以相对址可能会出错。 + +```html + + + +``` + +## 头像类型 + +* `mode`参数指定头像的类型,取值`circle`为圆形,取值`square`为圆角方形 + +```html + + + +``` + +## 默认头像 + +如果头像加载失败,导致加载图片失败,将会显示一个默认的灰色头像 + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| bg-color | 背景颜色,一般显示文字时用 | String | #ffffff | - | +| src | 头像路径,如加载失败,将会显示默认头像 | String | - | - | +| size | 头像尺寸,可以为指定字符串(large, default, mini),或者数值,单位rpx | String | Number | default | - | +| mode | 显示类型,见上方说明 | String | circle | square | +| text | 用文字替代图片,级别优先于`src` | String | - | - | +| img-mode | 头像图片的裁剪类型,与uni的`image`组件的`mode`参数一致,如效果达不到需求,可尝试传`widthFix`值 | String | aspectFill | - | +| show-sex | 是否显示右上角的性别图标 | Boolean | false | true | +| sex-icon | 右上角性别图标,可传入图片路径,或内置图标名 | String | man | woman | +| sex-bg-color | 性别图标的背景颜色 | String | man-primary主题,woman-error主题 | - | +| show-level | 是否显示右下角的等级图标 | Boolean | false | true | +| level-icon | 右下角等级图标,可传入图片路径,或内置图标名 | String | level | - | +| level-bg-color | 等级图标的背景颜色 | String | warning主题 | - | + +### Events + +|事件名|说明|回调参数| +|:-|:-|:-| +| click | 头像被点击 | index: 用户传递的标识符 | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/avatarCropper.md' +--- +# AvatarCropper 头像裁剪 + +该组件一般的图片裁剪需求场景,尤其适合于头像裁剪方面。 + +## 平台差异说明 + +| App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ 小程序 | +| :-: | :-: | :--------: | :----------: | :--------: | :--------: | :-------: | +| √ | √ | √ | √ | √ | √ | √ | + +## 基本使用 + +组件使用流程: + +1. 打开头像裁剪页面,同时传递配置基本参数(已默认配置好最优参数) +2. 选取图片,调整图片合适位置和大小,确定裁剪并返回此裁剪结果 +3. 在原始页面监听`uAvatarCropper`事件,获得裁剪结果 + +```html + + + + + +``` + +## 注意事项 + +根据`下载`方式和`NPM`方式引入 uView 的不同,需要进行不同的处理,下载方式可以引用`uview-pro`中的某个文件当做页面文件,但是`NPM`方式,不能引入 +`node_modules`文件夹中的`uview-pro`包的某个文件当做页面路径,故下方对两个方式分别说明: + +### 1. 下载引入 uView 方式 + +* 裁剪页面内置在 uView 中,由于打开页面,需要先在`pages.json`声明页面,故请把以下内容复制到项目根目录的`pages.json`中的`pages`数组中: + +```js +{ + "path": "uview-pro/components/u-avatar-cropper/u-avatar-cropper", + "style": { + "navigationBarTitleText": "头像裁剪", + "navigationBarBackgroundColor": "#000000" + } +} +``` + +### 1. NPM 引入 uView 方式 + +您需要去`node_modules`文件中,按路径`/node_modules/uview-pro/components/u-avatar-cropper/u-avatar-cropper.vue`找到此文件,将其内容复制出来, +放到`/pages`文件夹中的某个文件中,再按上面下载方式引入的一样的操作,去声明和引用页面即可。 + +* 裁剪后的结果,通过`uni.$on`监听`uAvatarCropper`事件,由于 uni-app 限制,H5 端裁剪的结果为`base64`格式,其他端为`blod`二进制形式, + 如果后端对接收格式有要求,请自行处理 + +## API + +以下参数,需要通过 URL 的 get 参数传参到裁剪页,非 props。uView 很多组件传递值的单位为`rpx`,注意这里的`dest-width`和`rect-width`单位为`px` + +## URL 参数 + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +| ---------- | -------------------------------------------------------------- | ---------------- | ------ | ------ | +| dest-width | 输出图片宽度,高等于宽,单位**px** | String | Number | 200 | - | +| rect-width | 裁剪框宽度,高等于宽,单位**px** | String | Number | 200 | - | +| file-type | 输出的图片类型,如果'png'类型发现裁剪的图片太大,改成"jpg"即可 | String | jpg | png | + +### Events + +| 事件名 | 说明 | 回调参数 | +| :------------- | :---------------------------------- | :------------------- | +| uAvatarCropper | 裁剪结束后的事件,通过`uni.$on`监听 | path: 裁剪的图片数据 | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/backTop.md' +--- +# BackTop 返回顶部 + +该组件一个用于长页面,滑动一定距离后,出现返回顶部按钮,方便快速返回顶部的场景。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +由于返回顶部需要实时监听滚动条的位置,从而判断返回的按钮该出现还是隐藏,由于组件无法得知页面的滚动条信息,只能在**页面**的`onPageScroll`生命周期 +中获得滚动条的位置,故需要在页面监听`onPageScroll`生命周期,实时获得滚动条的位置,通过Props传递给组件。 + +```html + + + + + +``` + +## 改变返回顶部按钮的出现时机 + +可以通过`top`参数,修改页面滚动多少距离时,出现返回顶部的按钮 + +```html + +``` + +## 自定义返回顶部的图标和提示 + +* 通过`icon`修改返回顶部按钮的图标,可以是uView内置的图标,或者图片路径 +* 通过`tips`参数修改返回顶部按钮的文字提示信息,如果需要修改文字的颜色和大小,可以通过`custom-style`参数 + +```html + +``` + +## 其他自定义样式 + +* 通过`icon-style`参数自定义图标的样式,比如颜色,大小等 +* 通过`custom-style`修改返回按钮的背景颜色,大小等 +* 通过`mode`修改按钮的形状,`circle`为圆形,`square`为方形 + +注意:如果通过`icon`参数传入图片路径的话,需要通过`icon-style`参数设置图片的`width`和`height`属性 + +```html + + + + + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| mode | 按钮形状 | String | circle | square | +| icon | uView内置图标名称,或图片路径 | String | arrow-upward | - | +| tips | 返回顶部按钮的提示文字 | String | - | - | +| duration | 返回顶部过程中的过渡时间,单位ms | String | Number | 100 | - | +| scroll-top | 页面的滚动距离,通过`onPageScroll`生命周期获取 | String | Number | 0 | - | +| top | 滚动条滑动多少距离时显示,单位rpx | String | Number | 400 | - | +| bottom | 返回按钮位置到屏幕底部的距离,单位rpx | String | Number | 200 | - | +| right | 返回按钮位置到屏幕右边的距离,单位rpx | String | Number | 40 | - | +| z-index | 返回顶部按钮的层级 | String | Number | 9 | - | +| icon-style | 图标的样式,对象形式 | Object | - | - | + +### Slots + +|名称|说明| +|:-|:-| +| - | 自定义返回按钮的所有内容 | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/badge.md' +--- +# Badge 徽标数 + +该组件一般用于图标右上角显示未读的消息数量,提示用户点击,有圆点和圆包含文字两种形式。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 通过`count`参数定义徽标内容 +* 通过`type`设置主题。重申一次,uView中,所有组件的`type`参数都只有5个固定的可选值,分别是`primary`(蓝色-主色),`warning`(黄色-警告), + `error`(红色-错误),`success`(绿色-成功),`info`(灰色-信息) + +::: warning 注意 +此组件内部默认为`absolute`绝对定位,所以需要给`badge`父组件(元素)设置`position: relative`相对定位, +再通过调整`offset`偏移值(数组,两个元素,第一个元素为`top`值,第二个元素为`right`值,单位rpx,可为负值,如"\[-10, -10]")设置到合适的位置即可。\ +如果不需要组件内容默认的自动绝对定位,设置`absolute`参数为`false`即可。 +::: + +```html + +``` + +## 设置徽标的尺寸 + +`size`参数默认为`default`,如果设置为`mini`,将会得到一个小尺寸的徽标,组件内部通过css的`scale`属性值进行缩放。 + +```html + +``` + +## 设置徽标的类型为一个圆点 + +通过`is-dot`参数设置,该形式组件没有内容,只显示一个圆点 + +```html + +``` + +## 自定义徽标样式 + +该组件内部通过一个`view`元素实现,是一个根元素,依据`vue-cli`的`vue-loader`特性,在引用的组件上直接写类名或者内联样式,可以作用于组件内部的 +根元素上(微信小程序除外),所以用户可以在组件引用时自定义修改样式 + +```html + + + +``` + +## 如何让组件中心点与父组件右上角重合 + +某些特殊的场景下,特别是`badge`内容值是通过后端获取,长度未知时,会导致最终渲染出来的`badge`组件的位置与父组件右上角的位置有出入, +为了解决这个问题,uView提供了一个`is-center`(默认为`false`),如果设置为`true`,`offset`参数将会失效,同时`badge`组件的中心点 +将会和父组件的右上角重合。 + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| count | 展示的数字,大于 `overflowCount` 时显示为 `${overflowCount}+`,为`0`且`show-zero`为`false`时隐藏 | String | Number | - | - | +| is-dot | 不展示数字,只有一个小点 | Boolean | false | true | +| absolute | 组件是否绝对定位,为`true`时,`offset`参数才有效 | Boolean | true | false | +| overflow-count | 展示封顶的数字值 | String | Number | 99 | - | +| type | 使用预设的背景颜色 | String | error | success / primary / warning / info | +| show-zero | 当数值为 0 时,是否展示 Badge | Boolean | false | true | +| size | Badge的尺寸,设为`mini`会得到小一号的`Badge` | String | default | mini | +| offset | 设置badge的位置偏移,格式为 \[x, y],也即设置的为`top`和`right`的值,单位rpx。`absolute`为`true`时有效 | Array | \[20, 20] | - | +| color | 字体颜色 | String | #ffffff | - | +| bgColor | 背景颜色,优先级比`type`高,如设置,`type`参数会失效 | String | - | - | +| is-center | 组件中心点是否和父组件右上角重合,优先级比`offset`高,如设置,`offset`参数会失效 | Boolean | false | true | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/button.md' +--- +# Button 按钮 + +该组件内部实现以uni-app`button`组件为基础,进行二次封装,主要区别在于: + +* 按钮`type`值有更多的主题颜色 +* 有可选的按钮点击水波纹效果 +* 按钮`size`值有更多的尺寸可选 + +::: warning 注意 + +1. 此组件内部使用uni-app`button`组件为基础,除了开头中所说的增加的功能,另外暴露出来的props属性和官方组件的属性完全一致, + uni-app`button`组件比较特殊,因为它有一些其他小程序平台的特定能力,请参考文档后面的参数列表,更详细说明请参uni-app方文档:\ + [uni-app方button组件](https://uniapp.dcloud.io/component/button) +2. 由于微信小程序的限制,在微信小程序中设置了`form-type`的`u-button`无法触发`form`组件的`submit`事件(H5和APP正常),详见微信小程序文档[Bug & Tip部分](https://developers.weixin.qq.com/miniprogram/dev/component/button.html) + ::: + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +文字内容通过`slot`传入 + +```html +月落 +``` + +## 设置按钮的主题 + +`type`值可选的有`default`(默认)、`primary`、`success`、`info`、`warning`、`error` + +```html +默认按钮 +主要按钮 +成功按钮 +信息按钮 +警告按钮 +危险按钮 +``` + +## 设置按钮为半圆形 + +`shape`默认值为`square`(按钮为圆角矩形),设置为`circle`,则按钮两边为半圆形 + +```html +乌啼 +``` + +## 设置尺寸 + +`button`组件的`size`(可选值为`default`(默认),`mini`(小尺寸)和`medium`(中等尺寸)和`large`(大尺寸)) + +```html +江湖 +夜雨 +十年灯 +西风 +``` + +## 设置按钮的镂空状态 + +镂空状态按钮背景为白色,边框和文字同色,通过`plain`来设置 + +```html +披荆 + + +斩棘 +``` + +## 设置点击按钮的水波纹效果 + +该效果通过给按钮绝对定位形式覆盖一个`view`,点击时改变`view`的`scale`,`opacity`样式属性,形成扩散再消失的水波纹效果。 + +```html +十年 + + +之约 +``` + +## 如何修改按钮的样式 + +1. 针对非微信小程序平台,组件的根元素就是uni-app`button`组件,所以修改按钮的样式很容易,直接给组件定义`类名`或者嵌入`内联样式`即可。 +2. 如果是微信小程序,编译后页面会有组件同名的元素存在,导致样式传递有问题。 +3. 如果是为了修改按钮与其他元素之间的距离或者宽度等,可以给按钮外面套一个`view`元素,控制这个`view`与其他元素的距离或者宽度,即可达到同等效果。 + +所以:我们提供了一个`custom-style`参数,推荐用户可以用对象形式传递样式给组件内部,注意驼峰命名。 + +```html +雪月夜 + + + + +/* 也可以 */ +雪月夜 + + +``` + +## 各家小程序开放能力的对接 + +uView Pro已对接[uni-app button组件 open-type](https://uniapp.dcloud.net.cn/component/button.html#open-type-有效值)的基础开放能力,按照文档说明使用即可,如果有发现遗漏的地方,请提交issue反馈。 + +## API + +### Props + +|属性名|说明|类型|默认值|可选值|平台差异说明| +|:-|:-|:-|:-|:-|:-| +|size|按钮的大小|String|default|medium / mini / large|-| +|ripple|是否开启点击水波纹效果|Boolean|false|true|-| +|ripple-bg-color|水波纹的背景色,ripple为true时有效|String|rgba(0, 0, 0, 0.15)|-|-| +|type|按钮的样式类型|String|default|primary / success / info/ warning / error|-| +|plain|按钮是否镂空,背景色透明|Boolean|false|true|-| +|disabled|是否禁用|Boolean|false|true|-| +|hair-line|是否显示按钮的细边框|Boolean|true|false|-| +|shape|按钮外观形状,见上方说明|String|square|circle|-| +|loading|按钮名称前是否带 loading 图标|Boolean|false|true|App-nvue 平台,在 ios 上为雪花,Android上为圆圈| +|form-type|用于 `
` 组件,点击分别会触发 `` 组件的 submit/reset 事件|String|-|submit / reset|-| +|open-type|开放能力|String|请参考uni-app方文档|-|-| +|hover-class|指定按钮按下去的样式类。当 hover-class="none" 时,没有点击态效果|String|button-hover|-|App-nvue 平台暂不支持| +|hover-start-time|按住后多久出现点击态,单位毫秒|String | Number|20|-|-| +|hover-stay-time|手指松开后点击态保留时间,单位毫秒|String | Number|150|-|-| +|app-parameter|打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效|Boolean|false|true|微信小程序、QQ小程序| +|hover-stop-propagation|指定是否阻止本节点的祖先节点出现点击态|Boolean|false|true|微信小程序| +|lang|指定返回用户信息的语言,zh\_CN 简体中文,zh\_TW 繁体中文,en 英文|String|en|zh\_CN \ zh\_TW |微信小程序| +|session-from|会话来源,open-type="contact"时有效|String|-|-|微信小程序| +|send-message-title|会话内消息卡片标题,open-type="contact"时有效|String|当前标题|-|微信小程序| +|send-message-path|会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 |String|当前分享路径|-|微信小程序| +|send-message-img|会话内消息卡片图片,open-type="contact"时有效 |String|当前页面截图|-|微信小程序| +|show-message-card|是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息,open-type="contact"时有效|String|-|-|微信小程序| +|throttle-time| 节流的时间间隔(一定时间内无论点击多少次,只会触发一次`click`事件),单位ms,详见[节流防抖](/zh/tools/debounce.html) |String | Number |0|-|-| + +### Events + +**说明**:目前经测试(Hbuilder X 2.6.8),在H5,APP,可以直接对组件监听`tap`事件,等同组件内部发出的`click`事件效果,某些HX版本上, +微信小程序对组件使用`tap`事件可能无效,故建议对按钮组件的点击事件监听统一使用组件内部发出的`click`事件。 + +|属性名|说明|类型|默认值|可选值|平台差异说明| +|:-|:-|:-|:-|:-|:-| +|click|按钮点击,请勿使用`@tap`点击事件,微信小程序无效,返回值为点击事件及参数|Handler|-| +|getphonenumber|open-type="getPhoneNumber"时有效|Handler|微信小程序| +|getuserinfo|用户点击该按钮时,会返回获取到的用户信息,从返回参数的detail中获取到的值同uni.getUserInfo|Handler|微信小程序| +|error|当使用开放能力时,发生错误的回调|Handler|微信小程序| +|opensetting|在打开授权设置页并关闭后回调|Handler|微信小程序| +|launchapp|打开 APP 成功的回调|Handler|微信小程序| + +--- + +--- +url: 'https://uviewpro.cn/zh/components/calendar.md' +--- +# Calendar 日历 + +此组件用于单个选择日期,范围选择日期等,日历被包裹在底部弹起的容器中。 + +**注意:** 此组件与[Picker 选择器](/zh/components/picker.html)的日期选择模式有一定的重合之处,区别在于本组件为更专业的日期选择场景,能选择日期范围等。 +另外`Picker`组件的日期模式可以配置更多的参数,如时、分、秒等,可以根据不同的使用场景进行选择。 + +## 平台差异说明 + +| App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ小程序 | +| :-: | :-: | :-: | :-: | :-: | :-: | :-: | +| √ | √ | √ | √ | √ | √ | √ | + +## 基本使用 + +* 通过`v-model`绑定一个布尔变量用于打开或收起日历弹窗。 +* 通过`mode`参数指定选择单个日期,还是选择日期范围。 + +```html + + + +``` + +## 日历模式 + +* `mode`为`date`只能选择单个日期 +* `mode`为`range`可以选择日期范围 + +## 单个日期模式 + +选择日期后,需要点击底部的`确定`按钮才能触发回调事件,回调参数为一个对象,有如下属性: + +```js +{ + day: 4, // 选择了哪一天 + days: 30, // 这个月份有多少天 + isToday: true, // 选择的日期是否今天 + month: 6, // 选择的月份 + result: "2020-06-04", // 选择的日期整体值 + week: "星期四", // 选择日期所属的星期数 + year: 2020 , // 选择的年份 +} +``` + +示例代码: + +```html + + + +``` + +## 日期范围模式 + +此模式用于选择一个日期范围,比如住酒店的入住到离店的日期范围,有如下可配置的参数: + +* `active-bg-color`参数配置起始/结束日期按钮的背景色 +* `active-color`参数配置起始/结束日期按钮的字体颜色 +* `range-bg-color`参数配置起始/结束日期之间的区域的背景颜色,默认为`var(--u-type-primary-light)`,为浅蓝色 +* `start-text`参数用于设置起始日期底部的提示文字,如"住店" +* `end-text`参数用于设置结束日期底部的提示文字,如"离店" + +此模式的返回参数如下: + +```js +{ + endDate: "2020-06-04", // 选择的结束日期 + endDay: 4, // 结束日期是哪一天 + endMonth: 6, // 结束日期的月份 + endWeek: "星期四", // 结束日期的星期数 + endYear: 2020, // 结束日期的年份 + startDate: "2020-06-01", // 选择的起始日期 + startDay: 1, // 起始日期是哪一天 + startMonth: 6, // 起始日期的月份 + startWeek: "星期一", // 起始日期的星期数 + startYear: 2020 // 起始日期的年份 +} +``` + +示例代码: + +```html + + + +``` + +## 显示农历模式 + +支持农历选择和回调,配置的参数: + +* `show-lunar`是否显示农历 + +单个日期模式的返回参数如下: + +```js +{ + day: 4, // 选择了哪一天 + days: 30, // 这个月份有多少天 + isToday: true, // 选择的日期是否今天 + month: 6, // 选择的月份 + result: "2020-06-04", // 选择的日期整体值 + week: "星期四", // 选择日期所属的星期数 + year: 2020 , // 选择的年份 + lunar: { + dayCn: '十三', // 农历的日 + monthCn: '四月', // 农历的月 + weekCn: "星期四", // 选择日期所属的星期数 + day: '13', // 农历的日 + month: '4', // 农历的月 + week: 4, // 选择日期所属的星期数 + year: 2020 // 农历的年份 + }, +} +``` + +日期范围模式的返回参数如下: + +```js +{ + endDate: "2020-06-04", // 选择的结束日期 + endDay: 4, // 结束日期是哪一天 + endMonth: 6, // 结束日期的月份 + endWeek: "星期四", // 结束日期的星期数 + endYear: 2020, // 结束日期的年份 + startDate: "2020-06-01", // 选择的起始日期 + startDay: 1, // 起始日期是哪一天 + startMonth: 6, // 起始日期的月份 + startWeek: "星期一", // 起始日期的星期数 + startYear: 2020, // 起始日期的年份 + startLunar: { + dayCn: '初十', + monthCn: '四月', + weekCn: "星期一", + day: '13', + month: '4', + week: 1, + year: 2020 + }, + endLunar: { + dayCn: '十三', + monthCn: '四月', + weekCn: "星期四", + day: '13', + month: '4', + week: 4, + year: 2020 + }, +} +``` + +示例代码: + +```html + + + +``` + +## 页面模式 + +通过`is-page`参数可以将日历直接嵌入页面中显示,而不是以弹窗形式展示。 + +* `is-page`为`true`时,日历直接嵌入页面,不显示弹窗和确定按钮 +* 选择日期后自动触发`change`事件 + +```html + + + +``` + +## 默认选中日期 + +支持传入默认选中的日期,组件初始化时会自动选中指定日期。 + +* `default-date`:单选模式下默认选中的日期,格式:`2024-01-01` +* `start-date`:范围模式下默认选中的开始日期,格式:`2024-01-01` +* `end-date`:范围模式下默认选中的结束日期,格式:`2024-01-01` + +```html + +``` + +## 只读模式 + +通过`readonly`参数可以设置日历为只读模式,禁止点击选择日期。 + +```html + +``` + +## 打卡签到模式 + +支持打卡签到功能,可以显示已打卡日期和今日打卡状态。 + +### 属性说明 + +* `checked-dates`:已打卡日期列表,格式:`['2024-01-01', '2024-01-02']` +* `today-checked`:今日是否已打卡(优先级高于自动判断) +* `checkin-mode`:是否启用打卡签到模式,未打卡日期显示灰色背景 +* `checked-bg-color`:已打卡日期背景色,默认为`var(--u-type-warning)`(橙色) +* `today-checked-bg-color`:今日已打卡背景色,默认为`var(--u-type-success)`(绿色) +* `unchecked-bg-color`:未打卡日期背景色,默认为`var(--u-light-color)`(灰色) + +### 显示规则 + +1. 今日已打卡:绿色圆形背景,显示白色对勾 +2. 其他已打卡日期:橙色圆形背景,显示日期 +3. 未打卡日期(checkin-mode为true时):灰色圆形背景 + +### 示例代码 + +```html + + + +``` + +## 节假日和加班日 + +支持显示节假日和加班日标记。 + +### 属性说明 + +* `holidays`:节假日列表,格式:`['2024-01-01', '2024-01-02']`(标准日期格式 `YYYY-MM-DD`) +* `workdays`:加班日列表,格式:`['2024-01-06', '2024-01-07']`(标准日期格式 `YYYY-MM-DD`) +* `holiday-color`:节假日文字颜色,默认为`var(--u-type-error)`(红色) +* `workday-color`:加班日文字颜色,默认为`var(--u-type-primary)`(蓝色) + +### 显示规则 + +1. 节假日:显示红色"休"字 +2. 加班日:显示蓝色"班"字 +3. 选中的节假日/加班日:显示白色"休"/"班"字(与选中日期文字颜色一致) +4. 范围选择时:优先显示"开始"/"结束"文案 + +### 示例代码 + +```html + + + +``` + +## 节日显示 + +支持显示中国传统节日和自定义节日。 + +### 属性说明 + +* `show-festival`:是否显示内置节日(中国传统节日),默认为`false` +* `festivals`:自定义节日配置,格式:`{ '04-04': '清明节', '04-01': '愚人节' }`(支持 `MM-DD` 和 `YYYY-MM-DD` 两种格式) +* `festival-color`:节日文字颜色,默认为`var(--u-type-primary)`(主题色) + +### 内置节日 + +当`show-festival`为`true`时,会自动显示以下中国传统节日: + +* 元旦(1月1日) +* 情人节(2月14日) +* 妇女节(3月8日) +* 植树节(3月12日) +* 愚人节(4月1日) +* 劳动节(5月1日) +* 青年节(5月4日) +* 儿童节(6月1日) +* 建党节(7月1日) +* 建军节(8月1日) +* 教师节(9月10日) +* 国庆节(10月1日) +* 光棍节(11月11日) +* 圣诞节(12月25日) + +### 自定义节日 + +可以通过`festivals`属性添加自定义节日,支持两种配置格式: + +| 格式 | 示例 | 说明 | +| :- | :- | :- | +| `YYYY-MM-DD` | `'2024-04-04': '清明节'` | 特定年份的节日,只在指定年份显示 | +| `MM-DD` | `'04-04': '清明节'` | 每年的固定节日,每年都显示 | + +**格式说明:** + +* 使用**标准日期格式**,月份和日期需要**前导零**(如 `04-04` 而不是 `4-4`) +* 所有日期相关配置(节日、节假日、加班日)都使用统一格式 + +**优先级规则:** + +1. 特定年份格式(`年-月-日`)优先级最高 +2. 每年固定格式(`月-日`)次之 +3. 内置节日优先级最低 + +**覆盖内置节日:** 传入空字符串可以覆盖内置节日(表示不显示该节日)。 + +### 示例代码 + +```html + + + +``` + +### 关闭内置节日,完全自定义 + +```html + +``` + +## 自定义日期内容(价格日历) + +通过`date`插槽可以自定义每个日期的显示内容,常用于电商价格日历等场景。 + +### 插槽参数 + +| 属性 | 说明 | 类型 | +| :- | :- | :- | +| date.year | 年份 | Number | +| date.month | 月份 | Number | +| date.day | 日期 | Number | +| date.date | 完整日期字符串 | String | +| date.week | 星期文字 | String | +| date.weekNum | 星期数字 0-6 | Number | +| date.isToday | 是否今天 | Boolean | +| date.isHoliday | 是否节假日 | Boolean | +| date.isWorkday | 是否加班日 | Boolean | +| date.isChecked | 是否已打卡 | Boolean | +| date.isSelected | 是否选中 | Boolean | +| date.isTodayChecked | 今天是否已打卡 | Boolean | +| date.lunar | 农历信息 | Object | + +### 注意事项 + +* 使用自定义日期插槽时,需要设置`use-date-slot="true"`显式声明 +* 自定义插槽优先级最高,会覆盖农历、节日等默认显示内容 + +### 示例代码 + +```html + + + + + +``` + +## 默认选中今天 + +通过`default-select-today`参数控制初始化时是否默认选中今天。 + +**优先级规则:** + +1. 优先级1: `default-date` / `start-date` / `end-date`(显式指定日期) +2. 优先级2: `default-select-today`(默认选中今天,默认值为`true`) +3. 优先级3: 不选中任何日期 + +```html + +``` + +## 选中效果控制 + +通过`is-active-current`参数控制选中日期是否显示选中效果(背景色和文字颜色)。 + +```html + +``` + +## 自定义内容 + +组件有一个默认插槽,名为`tooltip`,传入的内容将会显示在键盘的顶部位置,如使用,需要为传入的内容自定义样式。 + +```html + + + + + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | 版本 | +| :- | :- | :- | :- | :- | :- | +| mode | 选择日期的模式,date-为单个日期,range-为选择日期范围 | String | date | range | - | +| v-model | 布尔值变量,用于控制日历的弹出与收起 | Boolean | false | true | - | +| safe-area-inset-bottom | 是否开启[底部安全区适配](/zh/components/safeAreaInset.html#关于uview某些组件safe-area-inset参数的说明) | Boolean | false | true | - | +| change-year | 是否显示顶部的切换年份方向的按钮 | Boolean | true | false | - | +| change-month | 是否显示顶部的切换月份方向的按钮 | Boolean | true | false | - | +| max-year | 可切换的最大年份 | Number | String | 2050 | - | - | +| min-year | 可切换的最小年份 | Number | String | 1950 | - | - | +| min-date | 最小可选日期 | Number | String | 1950-01-01 | - | - | +| max-date | 最大可选日期 | Number | String | 当前日期 | - | - | +| border-radius | 弹窗顶部左右两边的圆角值,单位rpx | Number | String | 20 | - | - | +| mask-close-able | 是否允许通过点击遮罩关闭日历 | Boolean | true | false | - | +| month-arrow-color | 月份切换按钮箭头颜色 | String | var(--u-content-color) | - | - | +| year-arrow-color | 年份切换按钮箭头颜色 | String | var(--u-tips-color) | - | - | +| color | 日期字体的默认颜色 | String | var(--u-main-color) | - | - | +| active-bg-color | 起始/结束日期按钮的背景色 | String | var(--u-type-primary) | - | - | +| z-index | 弹出时的`z-index`值 | String | Number | 10075 | - | - | +| active-color | 起始/结束日期按钮的字体颜色 | String | var(--u-white-color) | - | - | +| range-bg-color | 起始/结束日期之间的区域的背景颜色 | String | var(--u-type-primary-light) | - | - | +| range-color | 选择范围内字体颜色 | String | var(--u-type-primary) | - | - | +| start-text | 起始日期底部的提示文字 | String | 开始 | - | - | +| end-text | 结束日期底部的提示文字 | String | 结束 | - | - | +| btn-type | 底部确定按钮的主题 | String | primary | default / success / info / warning / error | - | +| toolTip | 顶部提示文字,如设置名为`tooltip`的`slot`,此参数将失效 | String | 选择日期 | - | - | +| closeable | 是否显示右上角的关闭图标 | Boolean | true | false | - | +| is-change | 切换年月是否触发事件,mode=date时生效 | Boolean | false | true | - | +| show-lunar | 是否显示农历 | Boolean | false | true | 0.2.1 | +| is-page | 是否在页面中直接显示,不使用弹窗 | Boolean | false | true | 0.5.17 | +| default-date | 默认选中的日期,mode=date时生效,格式:2024-01-01 | String | '' | - | 0.5.17 | +| start-date | 默认选中的开始日期,mode=range时生效,格式:2024-01-01 | String | '' | - | 0.5.17 | +| end-date | 默认选中的结束日期,mode=range时生效,格式:2024-01-01 | String | '' | - | 0.5.17 | +| default-select-today | 初始化时是否默认选中今天,优先级低于default-date/start-date/end-date | Boolean | true | false | 0.5.17 | +| is-active-current | 当前选中日期是否带选中效果 | Boolean | true | false | 0.5.17 | +| readonly | 是否只读,只读模式下禁止点击选择日期 | Boolean | false | true | 0.5.17 | +| checked-dates | 已打卡日期列表,格式:\['2024-01-01', '2024-01-02'] | Array | \[] | - | 0.5.17 | +| today-checked | 今日是否已打卡(优先级高于自动判断) | Boolean | false | true | 0.5.17 | +| checkin-mode | 是否启用打卡签到模式(未打卡日期显示灰色) | Boolean | false | true | 0.5.17 | +| checked-bg-color | 已打卡日期背景色 | String | var(--u-type-warning) | - | 0.5.17 | +| checked-color | 已打卡日期字体颜色 | String | var(--u-white-color) | - | 0.5.17 | +| today-checked-bg-color | 今日已打卡背景色 | String | var(--u-type-success) | - | 0.5.17 | +| unchecked-bg-color | 未打卡日期背景色 | String | var(--u-light-color) | - | 0.5.17 | +| unchecked-color | 未打卡日期字体颜色 | String | var(--u-white-color) | - | 0.5.17 | +| holidays | 节假日列表,格式:\['2024-01-01', '2024-01-02'] | Array | \[] | - | 0.5.17 | +| workdays | 加班日列表,格式:\['2024-01-06', '2024-01-07'] | Array | \[] | - | 0.5.17 | +| holiday-color | 节假日文字颜色 | String | var(--u-type-error) | - | 0.5.17 | +| workday-color | 加班日文字颜色 | String | var(--u-type-primary) | - | 0.5.17 | +| show-festival | 是否显示内置节日(中国传统节日) | Boolean | false | true | 0.5.17 | +| festivals | 自定义节日配置,格式:{ '04-04': '清明节' },支持 `MM-DD` 和 `YYYY-MM-DD` 两种格式 | Object | {} | - | 0.5.17 | +| festival-color | 节日文字颜色 | String | var(--u-type-primary) | - | 0.5.17 | +| use-date-slot | 是否启用自定义日期内容插槽 | Boolean | false | true | 0.5.17 | + +### Slots + +| 名称 | 说明 | 版本 | +| :- | :- | :- | +| tooltip | 自定义日历顶部的内容 | - | +| date | 自定义日期内容,作用域参数见[自定义日期内容](#自定义日期内容-价格日历) | 0.5.17 | + +### Events + +| 事件名 | 说明 | 回调参数 | +| :- | :- | :- | +| change | 点击右上角`确定`按钮时触发(弹窗模式)/ 选择日期时触发(页面模式) | 选择日期相关的返回参数 | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/card.md' +--- +# Card 卡片 + +卡片组件一般用于多个列表条目,且风格统一的场景。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +组件的头部信息可以通过参数配置,其他主体和底部的信息,需要通过`slot`传入。 + +* `title`配置标题 +* `sub-title`配置副标题 + +```html + + + + + +``` + +## 配置卡片间距 + +可以通过`margin`参数配置卡片与屏幕左右的边距,以及上下卡片之间的距离,如: `20rpx 30rpx`、`20rpx 30rpx 30rpx 20rpx`。\ +注意:当设置`full`参数为`true`的时候,也就是卡片占据屏幕总宽度的时候,通过`margin`配置的左右边距会失效。 + +```html + +``` + +## 配置卡片左上角的缩略图 + +这个缩略图是可选的,显示在卡片的左上角位置,如果配置了`thumb`参数(图片路径),就会显示图片。 + +* `thumb`缩略图路径 +* `thumb-width`缩略图宽度,高等于宽 +* `thumb-circle`缩略图是否为圆形 + +```html + +``` + +## 配置卡片边框 + +这里说的边框,有3个: + +* `border`配置是否显示整个卡片的外边框 +* `head-border-bottom`配置是否显示卡片内部头部的下边框 +* `foot-border-top`配置是否显示卡片内部底部的上边框 + +```html + +``` + +## 设置内边距 + +默认下,卡片内部的头部,主体,底部都有一个内边距,可以通过配置`padding`参数去覆盖: + +```html + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| full | 卡片与屏幕两侧是否留空隙 | Boolean | fasle | true | +| title | 头部左边的标题 | String | - | - | +| title-color | 标题颜色 | String | #303133 | - | +| title-size | 标题字体大小,单位rpx | String | Number | 30 | - | +| sub-title | 头部右边的副标题 | String | - | - | +| sub-title-color | 副标题颜色 | String | #909399 | - | +| sub-title-size | 副标题字体大小 | String | Number | 26 | - | +| border | 是否显示边框 | Boolean | true | false | +| index | 用于标识点击了第几个卡片 | String | Number | - | - | +| margin | 卡片与屏幕两边和上下元素的间距,需带单位,如"30rpx 20rpx",见上方说明 | String | 30rpx | - | +| border-radius | 卡片整体的圆角值,单位rpx | String | Number | 16 | - | +| head-style | 头部自定义样式,对象形式 | Object | - | - | +| body-style | 主体自定义样式,对象形式 | Object | - | - | +| foot-style | 底部自定义样式,对象形式 | Object | - | - | +| head-border-bottom | 是否显示头部的下边框 | Boolean | true | false | +| foot-border-top | 是否显示底部的上边框 | Boolean | true | false | +| thumb | 缩略图路径,如设置将显示在标题的左边,不建议使用相对路径 | String | - | - | +| thumb-width | 缩略图的宽度,高等于宽,单位rpx | String | Number | 60 | - | +| thumb-circle | 缩略图是否为圆形 | Boolean | false | true | +| padding | 给head,body,foot部的内边距,见上方说明,单位rpx | String | Number | 30 | - | +| show-head | 是否显示头部 | Boolean | true | false | +| show-foot | 是否显示尾部 | Boolean | true | false | +| box-shadow | 卡片外围阴影,字符串形式 | String | none | - | + +### Slots + +| 名称 | 说明 | +|------------- |---------------- | +| default | 同 body 插槽 | +| head | 自定义卡片头部内容 | +| body | 自定义卡片主体部分内容 | +| foot | 自定义卡片底部部分内容 | + +### Events + +|事件名|说明|回调参数| +|:-|:-|:-| +| click | 整个卡片任意位置被点击时触发 | index: 用户传递的标识符 | +| head-click | 卡片头部被点击时触发 | index: 用户传递的标识符 | +| body-click | 卡片主体部分被点击时触发 | index: 用户传递的标识符 | +| foot-click | 卡片底部部分被点击时触发 | index: 用户传递的标识符 | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/cell.md' +--- +# Cell 单元格 + +cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 该组件需要搭配`cell-group`使用,并由它实现列表组的上下边框,如不需要上下边框,配置`cellGroup`的`border`参数为`false`即可。 +* 通过`title`设置左侧标题,`value`设置右侧内容。 +* 通过`icon`字段设置图标,值为uView自带的[Icon 图标](/zh/components/icon.html)名。 + +**注意:** 由于`cell`组件需要由`cellGroup`组件提供参数值,这些父子组件间通过Vue的"provide/inject"特性注入依赖, +所以您必须使用`cellGroup`包裹`cell`组件才能正常使用。 + +```html + +``` + +## 自定义内容 + +* 通过插槽`icon`可以自定义图标,内容会替换左边图标位置 +* 通过插槽`title`定义左边标题部分 +* 通过插槽`right-icon`定义右边内容部分 + +```html + + + + + + + +``` + +如上所示,可以给`cell-item`组件通过``设定右边uView自带的`badge`或者`switch`组件: + +* 如果搭配的是`badge`组件,注意设置`absolute`参数为`false`去掉绝对定位,否则其位于右侧的恰当位置,详见[Badge 徽标数](/zh/components/badge.html)。 +* 如果搭配的是`switch`组件,注意要通过`v-model`绑定一个内容为布尔值的变量,否则无法操作`switch`,详见[Switch 开关选择器](/zh/components/switch.html)。 + +## 展示右箭头 + +设置`arrow`为`true`,将会显示右侧的箭头,可以通过arrow-direction控制箭头的方向 + +```html + + + + +``` + +## 分组标题 + +通过`cell-group`的`title`参数可以指定分组标题 + +```html + + + + +``` + +## 是否开启点击反馈 + +如果将`arrow`参数设置为`true`,意味着这是一个可点击的Cell,默认会给一个点击的反馈效果,如果您想自定义这个反馈效果,可以通过 +`hover-class`参数传入一个样式类名,这个类必须写在全局样式中,如`App.vue`、或通过`Apop.vue`引入的全局样式中,一般建议定义反馈的背景颜色,或者是透明度即可。 +如果不想要任何效果,将`hover-class`设置为`none`即可。 + +```html + + + +``` + +```css +/* App.vue */ +.cell-hover-class { + background-color: rgb(235, 237, 238); +} + +/* 或者单是设置透明度 */ +.cell-hover-class { + opacity: 0.5; +} +``` + +## API + +## CellGroup Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| title | 分组标题 | String | - | - | +| border | 是否显示外边框 | Boolean | true | false | +| title-style | 分组标题的的样式,对象形式,如`{'font-size': '24rpx'}` 或 `{'fontSize': '24rpx'}` | object | - | - | + +## CellItem Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| title | 左侧标题 | String | - | - | +| icon | 左侧图标名,只支持uView内置图标,见[Icon 图标](/zh/components/icon.html) | String | - | - | +| icon-style | icon的样式,对象形式 | Object | - | - | +| value | 右侧内容 | String | - | - | +| label | 标题下方的描述信息 | String | - | - | +| border-bottom | 是否显示cell的下边框 | Boolean | true | false | +| border-top | 是否显示cell的上边框 | Boolean | false | true | +| border-gap | `border-bottom`为`true`时,Cell列表中间的条目的下边框是否与左边有一个间隔 | Boolean | true | false | +| hover-class | 是否开启点击反馈,`none`为无效果,见上方说明 | String | - | none | +| arrow | 是否显示右侧箭头,开启的话,将会默认带上点击反馈,可通过`hover-class`配置 | Boolean | true | false | +| arrow-direction | 箭头方向,可选值为 | String | right | up / down | +| title-style | 标题样式,对象形式 | Object | - | - | +| required | 是否显示左边表示必填的星号 | Boolean | false | true | +| value-style | 右侧内容样式,对象形式 | Object | - | - | +| label-style | 标题下方描述信息的样式,对象形式 | Object | - | - | +| bg-color | 背景颜色,默认透明背景 | String | transparent | - | +| index | 用于在`click`事件回调中返回,标识当前是第几个Item | String | Number | - | - | +| title-width | 标题的宽度,单位rpx | Number | String | - | - | +| icon-size | 左边通过`icon`参数传入的图标的大小,单位rpx | Number | String | 34 | - | +| center | 是否使内容垂直居中 | Boolean | false | true | + +## CellItem Slot + +| 名称 | 说明 | +|------------- |---------------- | +| title | 自定义左侧标题部分的内容,如需使用,请勿定义`title`参数,或赋值`null`即可 | +| icon | 自定义左侧的图标 | +| right-icon | 自定义右侧图标内容,需设置`arrow`为`false`才起作用 | +| label | 自定义`label`内容,需同时设置`use-label-slot`为`true` | + +## CellItem Event + +|事件名|说明|回调参数| +|:-|:-|:-| +| click | 点击cell列表时触发 | index: 通过`props`传递的`index`参数 | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/checkbox.md' +--- +# Checkbox 复选框 + +复选框组件一般用于需要多个选择的场景,该组件功能完整,使用方便 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +:::tip + +* 0.5.2 版本开始,`checkbox-group` 组件支持 `v-model` 双向绑定,`checkbox` 组件新增 `value` 参数,`value`如不设置,默认值取`name`属性, 详情见下方 API 说明。 +* 本次升级完全兼容之前用法,但推荐使用 `checkbox-group` 的 `v-model` 进行双向绑定,更加简洁方便。 + ::: + +## 基本使用 + +* 该组件无需强制搭配`checkboxGroup`组件使用(视情况而定),可以单个独立使用`u-checkbox`组件 + +```html + + + +``` + +## 禁用checkbox + +设置`disabled`为`true`,即可禁用某个组件,让用户无法点击,禁用分为两种状态,一是未勾选前禁用,这时只显示一个灰色的区域。二是已勾选后 +再禁用,会有灰色的已勾选的图标,但此时依然是不可操作的。 + +```html + +``` + +## 自定义形状 + +可以通过设置`shape`为`square`或者`circle`,将复选框设置为方形或者圆形 + +```html + +``` + +## 自定义颜色 + +此处所指的颜色,为`checkbox`选中时的背景颜色,参数为`active-color` + +```html + +``` + +## 文本是否可点击 + +设置`label-disabled`为`false`,点击文本时,无法操作`checkbox` + +```html + +``` + +## API + +## Checkbox Props + +注意:需要给`checkbox`组件通过`v-model`绑定一个**布尔值**,来初始化`checkbox`的状态,随后该值被双向绑定, +当用户勾选复选框时,该值在`checkbox`内部被修改为`true`,并反映到父组件,否则为`false`,换言之,您无需监听`checkbox`的`change`事件,也能 +知道某一个`checkbox`是否被选中的状态 + +注意:`checkbox`和`checkbox-group`二者同名参数中,`checkbox`的参数优先级更高。 + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | 版本 | +|------------- |---------------- |---------------|------------------ |-------- | - | +| v-model | 双向绑定某一个`checkbox`的值,如果将该变量设置为`true`,将会被选中 | String \ Number | - | - | +| size | 组件整体的大小,单位rpx | String \ Number | - | - | - | +| label-size | label字体大小,单位rpx | String \ Number | - | - | - | +| icon-size | 图标大小,单位rpx | String \ Number | - | - | - | +| label | `checkbox`组件的文本显示名称 | String \ Number | - | - | - | +| value | `checkbox`组件的标示符 | String \ Number | - | - | | +| name | 同 `value`,即将废弃 | String \ Number | - | - | - | +| shape | 形状,见上方说明 | String | - | square | - | +| disabled | 是否禁用 | Boolean | - | false / true | - | +| label-disabled | 是否禁止点击文本操作`checkbox` | Boolean | - | false / true | - | +| active-color | 选中时的颜色,如设置`CheckboxGroup`的`active-color`将失效 | String | - | - | - | + +## CheckboxGroup Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | 版本 | +|------------- |---------------- |---------------|------------------ |-------- | - | +| v-model | 双向绑定某一个`checkbox`的值,如果将该变量设置为`true`,将会被选中 | Array | - | - | | +| max | 最多能选中多少个`checkbox` | String \ Number | 999 | - | - | +| disabled | 是否禁用所有`checkbox` | Boolean | false | true | - | +| icon-size | 图标大小,单位rpx | String \ Number | 20 | - | - | +| size | 组件整体的大小,单位rpx | String \ Number | 34 | - | - | +| shape | 形状,见上方说明 | String | circle | square | - | +| active-color | 选中时的颜色,应用到所有子`Checkbox`组件 | String | #2979ff | - | - | +| label-disabled | 是否禁止点击文本操作`checkbox` | Boolean | false | true | - | +| width | `checkbox`的宽度,需带单位,如`50%`,`150rpx` | String | auto | - | - | +| wrap | 是否每个`checkbox`占一行 | Boolean | false | true | - | + +## Checkbox Event + +|事件名|说明|回调参数|版本| +|:-|:-|:-|:-| +| change | 某个`checkbox`状态发生变化时触发,回调为boolean类型数值 | boolean(当前`checkbox`的选中状态) | `v0.5.2`由object改为boolean | + +## CheckboxGroup Event + +|事件名|说明|回调参数|版本| +|:-|:-|:-|:-| +| change | 任一个`checkbox`状态发生变化时触发,回调为一个对象 | detail = array( \[元素为被选中的`checkbox`的`value`] ) | - | + +## Checkbox Slots + +| 名称 | 说明 | 版本 | +|:-|:-|:-| +| default | 默认插槽,用于放置`checkbox`的文本 | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/circleProgress.md' +--- +# CircleProgress 圆形进度条 + +展示操作或任务的当前进度,比如上传文件,是一个圆形的进度环。 + +## 内部实现 + +组件内部通过`canvas`实现,有更好的性能和通用性。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 通过`percent`设置当前的进度值,该值区间为0-100 +* 通过`active-color`设置圆环的颜色,也可以直接设置`type`主题颜色,使用预置值 +* 通过默认`slot`传入内容,将会显示在圆环的内部 + +```html + + + +``` + +## 设置圆环的动画时间 + +通过`duration`设置圆环从0递增到100%(也即一圆周)所需的时间,如需动态修改进度值时会用到,比如用户进行某一个操作之后, +需要把进度值从30%改为80%,这里增加了50%(80% - 30% = 50%),也即半个圆周,所需时间为`duration`的一半,因为`duration`值为一个圆周的时间。 + +```html + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| percent | 圆环进度百分比值,为数值类型,0-100 | String | Number | - | - | +| inactive-color | 圆环的底色,默认为灰色(该值无法动态变更) | String | #ececec | - | +| active-color | 圆环激活部分的颜色(该值无法动态变更) | String | #19be6b | - | +| width | 整个圆环组件的宽度,高度默认等于宽度值,单位rpx | String | Number | 200 | - | +| border-width | 圆环的边框宽度,单位rpx | String | Number | 14 | - | +| duration | 整个圆环执行一圈的时间,单位ms | String | Number | 1500 | - | +| type | 如设置,`active-color`值将会失效 | String | - | success / primary / error / info / warning | +| bg-color | 整个组件背景颜色,默认为白色 | String | #ffffff | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/collapse.md' +--- +# Collapse 折叠面板 + +通过折叠面板收纳内容区域 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +默认为手风琴模式,即打开一个,另外所有的都会关闭。可以将`u-collapse`的`accordion`设置为`false`,这样可以允许打开多个面板 + +```html + + + +``` + +## 控制面板的初始状态,以及是否可以操作 + +* 设置`u-collapse-item`的`open`参数为`true`,可以让面板初始化时为打开状态 +* 如果设置`u-collapse-item`的`disabled`参数为`true`,那么面板会保持初始状态,无法关闭或打开 + +```html + + + +``` + +## 自定义样式 + +在此组件中,可以通过多个方式对每个`Item`进行样式定义,我们可以从如下方面思考和着手: + +### 1. 如果修改展开后的内容? + +* 因为是通过默认的`slot`传入的(见上方示例),我们可以加一个`view`元素当做外层,在父组件给它添加样式,如下: + +```html + + + +``` + +* 通过`Collapse`的`body-style`参数也可以配置主体内容的样式,需要注意上面的自定义`slot`内容如果在父组件定义了样式,会优先起作用。 + +### 2. 如何自定义标题的样式? + +如果想修改头部标题的字体大小,颜色等,可以通过`head-style`参数修改。 + +### 3. 如何修改整个`Item`的样式? + +有时候我们需要修改`Item`的整体样式,比如将各个`Item`之间隔开,这时我们可以通过`item-style`参数进行设置,比如: + +```html + + + +``` + +## API + +### Props Collapse + +|参数|说明|类型|默认值|可选值| +|---|---|---|---|---| +|accordion|是否手风琴模式|Boolean|true|false| +|arrow|是否显示标题右侧的箭头|Boolean|true|false| +|arrow-color|标题右侧箭头的颜色|String|#909399|-| +|item-style|整个`Item`的自定义样式,对象形式|Object|-|-| +|head-style|`Item`的标题自定义样式,对象形式|Object|-|-| +|body-style|`Item`的主体自定义样式,对象形式|Object|-|-| +|hover-class|样式类名,按下时有效,样式必须写在根目录的`App.vue`或通过其引入的全局样式中才有效,`none`为无效果,作用于头部标题区域|String|u-hover-class|none/其他| + +### Props CollapseItem + +|参数|说明|类型|默认值|可选值| +|---|---|---|---|---| +|title|面板标题|String|-|-| +|index|主要用于事件的回调,标识那个Item被点击|String/Number|-|-| +|disabled|面板是否可以打开或收起|Boolean|false|true| +|open|设置某个面板的初始状态是否打开|Boolean|false|true| +|name|唯一标识符,如不设置,默认用当前`collapse-item`的索引值|String/Number|-|-| +|align|标题的对齐方式|String|left|-| +|active-style|不显示箭头时,可以添加当前选择的collapse-item活动样式,对象形式|Object|-|-| + +### Events Collapse + +注意:请在``上监听此事件 + +|事件名|说明|回调参数| +|---|---|---| +|change|当前激活面板展开时触发(如果是手风琴模式,参数activeNames类型为String,否则为Array)|activeNames: String/Array| + +### Event CollapseItem + +注意:请在``上监听此事件 + +|事件名|说明|回调参数| +|---|---|---| +|change|某个item被打开或者收起时触发|对象,{index: index, show: true|false},index为`collapse-item`的`index`参数,show为`true`表示被打开,`false`表示被收起| + +### Methods Collapse + +注意:此方法需要通过`ref`调用 + +|方法|说明| +|---|---| +|init|重新初始化内部高度计算,用于异步获取内容的情形,请结合`nextTick()`使用| + +### Slots + +|名称|说明| +|---|---| +|-|主体部分的内容| +|title|头部的内容,不含右边的箭头| +|title-all|整个头部的内容,包含右边的箭头| + +--- + +--- +url: 'https://uviewpro.cn/zh/components/color.md' +--- +# Color 色彩 + +uView经过大量调试和研究,得出一套专有的调色板,在各个组件内部,使用统一的配色,为您的产品带来统一又鲜明的视觉效果。 + +::: danger 注意 +uView为了更好编写css,使用了scss预处理器,使用uView之前,请确认您的Hbuilder X已经安装了scss预处理器,一般情况下,相信您已经安装了。如果没有安装, +请在 Hbuilder X->工具->插件安装 中找到找到"scss/sass编译"安装即可,安装完毕如果不生效,请重启Hbuilder X。 +::: + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 主题色 + +`primary`,`success`,`error`,`warning`,`info`是uView的主题色,他们给人在视觉感受上分别对应于蓝色,绿色,红色,黄色,灰色。 +而他们又有对应的`disabled`、`dark`和`light`状态,分别表示对应的禁止,加深和变浅的对应颜色。举例uView的`button`组件来说: + +1. 设置`type`参数为`primary`时,按钮显示蓝色。 +2. 按钮被按下时,使用的是`primary`的加深颜色,也即`dark`状态。 +3. 按钮设置为镂空状态(`plain`为`true`)时,背景色为`primary`的变浅颜色,也即`light`状态。 +4. 按钮处于禁止状态时,使用的是`primary`的稍浅颜色,也即`disabled`状态。 + +## 主色 + +蓝色作为uView主色调,表示一种鲜明,积极的态度 + +我们在全局样式中,通过`scss`提供了对应的颜色变量名,方便您在任何可写css的地方,调用这些变量,如下: + +```css +/* 变量的定义,该部分uView已全局引入,无需您编写 */ +$u-type-primary: #2979ff; +$u-type-primary-light: #ecf5ff; +$u-type-primary-disabled: #a0cfff; +$u-type-primary-dark: #2b85e4; + + +/* 在您编写css的地方使用这些变量 */ +.title { + color: $u-type-primary; + ...... +} +``` + +## 辅助色 + +除了主色外的场景色,需要在不同的场景中使用,如绿色代表成功,红色代表错误,黄色代表警示。 + +我们在全局样式中,通过`scss`提供了对应的颜色变量名,方便您在任何可写css的地方,调用这些变量,如下: + +```css +/* 变量的定义,该部分uView已全局引入,无需您编写 */ + +$u-type-warning: #ff9900; +$u-type-warning-disabled: #fcbd71; +$u-type-warning-dark: #f29100; +$u-type-warning-light: #fdf6ec; + +$u-type-success: #19be6b; +$u-type-success-disabled: #71d5a1; +$u-type-success-dark: #18b566; +$u-type-success-light: #dbf1e1; + +$u-type-error: #fa3534; +$u-type-error-disabled: #fab6b6; +$u-type-error-dark: #dd6161; +$u-type-error-light: #fef0f0; + +$u-type-info: #909399; +$u-type-info-disabled: #c8c9cc; +$u-type-info-dark: #82848a; +$u-type-info-light: #f4f4f5; + +/* 在您编写css的地方使用这些变量 */ +.title { + color: $u-type-info; + ...... +} +``` + +## 文字颜色 + +uView中,分别提炼了4种用于文字颜色,分别是:主要文字、常规文字、次要文字、占位文字颜色。 + +* 主要文字颜色一般用于内容的标题等,如新闻列表的标题 +* 常规文字颜色一般用于内容的主体,如新闻列表的概要 +* 次要文字颜色一般用于内容的提示部分,如新闻列表底部的时间,评论数量的提示文字 +* 占位文字颜色属于更浅的灰色,看场景选择使用 + +```css +/* 变量的定义,该部分uView已全局引入,无需您编写 */ +$u-main-color: #303133; +$u-content-color: #606266; +$u-tips-color: #909399; +$u-light-color: #c0c4cc; + +/* 在您编写css的地方使用这些变量 */ +.title { + color: $u-main-color; +} +``` + +## 背景颜色 + +uView中,定义了一个背景颜色,如下: + +我们在全局样式中,通过`scss`提供了对应的颜色变量名,方便您在任何可写css的地方,调用这个变量,如下: + +```css +/* 变量的定义,该部分uView已全局引入,无需您编写 */ +$u-bg-color: #f3f4f6; + +/* 在您编写css的地方使用这些变量 */ +.title { + color: $u-bg-color; +} +``` + +## 边框颜色 + +uView自定义了一个边框的颜色,值为`#e4e7ed`,如果想使用,如下: + +```css +/* 变量的定义,该部分uView已全局引入,无需您编写 */ +$u-border-color: #e4e7ed; + +/* 在您编写css的地方使用这个变量 */ +.item { + border: 1px solid $u-border-color; +} +``` + +--- + +--- +url: 'https://uviewpro.cn/zh/tools/color.md' +--- +# color 颜色值 + +此功能为uView内部通过js提供的一些颜色值,可以用于通过js修改元素字体,背景颜色等一些场景,常用于uView的各个组件中。\ +这些颜色值,挂载在`$u`对象下的`color`数组中,关于这些颜色值的具体描述,详见[Color 色彩](/zh/components/color.html)\ +使用方法:如使用`primary`颜色值,方法为:`$u.color['primary']` + +**说明**:这些通过JS调用的颜色值,也是能通过CSS调用的,二者等价。详见[Color 色彩](/zh/components/color.html) + +## 主题颜色 + +该主题颜色值,一共有5个,分别是`primary`、`error`、`success`、`info`、`warning` + +```js +import { ref, onMounted } from 'vue'; + +const errorColor = ref(''); + +onMounted(() => { + errorColor.value = uni.$u.color['error']; +}); +``` + +## 文字颜色 + +uView一共提供了四个颜色值,具体请见组件部分[Color色彩](/zh/components/color.html)\ +分别有:`mainColor`、`contentColor`、`tipsColor`、`lightColor`、`borderColor`(边框颜色值) + +```js +console.log(uni.$u.color['contentColor']); +``` + +## 背景颜色 + +uView提供了一个浅灰的背景颜色值,该值为`#f3f4f6` + +```js +console.log(uni.$u.color['bgColor']); +``` + +--- + +--- +url: 'https://uviewpro.cn/zh/tools/colorSwitch.md' +--- +# colorSwitch 颜色转换 + +## RGB转十六进制Hex + +### rgbToHex(rgb) + +该函数可以将一个RGB颜色值转换成一个Hex的十六进制颜色值 + +* `rgb` \ RGB颜色值,如`rgb(230, 231, 233)` + +```js +import { ref, onMounted } from 'vue'; +import { $u } from 'uview-pro'; + +const rgb = ref('rgb(13, 145, 20)'); + +onMounted(() => { + console.log($u.rgbToHex(rgb.value)); +}); +``` + +## 十六进制Hex转RGB + +### hexToRgb(hex) + +该函数可以将一个Hex的十六进制颜色值转换成一个RGB颜色值 + +* `hex` \ HEx颜色值,如`#0afdce` + +```js +import { ref, onMounted } from 'vue'; +import { $u } from 'uview-pro'; + +const hex = ref('#0afdce'); + +onMounted(() => { + console.log($u.hexToRgb(hex.value)); +}); +``` + +## 颜色渐变 + +### colorGradient(startColor, endColor, step) + +该函数实现两个颜色值之间等分取值,返回一个数组,元素为十六进制形式的颜色值,数组长度为`step`值。 +例如:colorGradient('rgb(250, 250, 250)', 'rgb(252, 252, 252)', 3),得到的结果为\["#fafafa", "#fafafa", "#fbfbfb"] + +* `startColor` \ 开始颜色值,可以是HEX或者RGB颜色值,如`#0afdce`或者`rgb(120, 130, 150)` +* `endColor` \ 结束颜色值,可以是HEX或者RGB颜色值,如`#0afdce`或者`rgb(120, 130, 150)` +* `step` \ 均分值,把开始值和结束值平均分成多少份 + +```js +console.log(uni.$u.colorGradient('rgb(250,250,250)', 'rgb(252,252,252)', 3)); +// 结果为:["#fafafa", "#fafafa", "#fbfbfb"] +``` + +## 颜色透明度 + +### colorToRgba(color, opacity = 0.3) + +该函数可以接受一个`十六进制`或者`rgb`格式的颜色值(不能接受命名式颜色格式,比如`white`),返回此颜色的`rgba`格式值,如下: + +* `color` \ 颜色值,只能`hex`或者`rgba`格式 +* `opacity` \ 不透明度值,取值为0-1之间 + +```js +uni.$u.colorToRgba('#000000', 0.35); +// 结果为 rgba(0, 0, 0, 0.35) + +uni.$u.colorToRgba('rgb(255, 180, 0)', 0.4); +// 结果为 rgba(255, 180, 0, 0.4) +``` + +--- + +--- +url: 'https://uviewpro.cn/zh/components/configProvider.md' +--- +# ConfigProvider 全局配置 + +`u-config-provider` 是 uView Pro 主题系统的唯一入口组件,负责把 `useTheme` 维护的 CSS 变量注入到页面,同时向外抛出主题与暗黑模式变更事件。本文档面向业务开发者,介绍其用法、属性与常见场景。 + +## 监听主题切换 + +需要配合内置虚拟根组件来实现全局共享,详见:[虚拟根组件](/zh/guide/root.html)。 + +### 引入 + +* CLI项目: 直接编辑 根目录下的 vite.config.(js|ts) +* HBuilderX项目: 需要在根目录下 创建 vite.config.(js|ts) + +::: code-group + +```ts [npm 安装] +// vite.config.(js|ts) + +import { defineConfig } from 'vite' +import { UniRoot } from 'uview-pro/plugins' +import Uni from '@dcloudio/vite-plugin-uni' + +export default defineConfig({ + plugins: [ + // ...plugins + UniRoot(), + Uni() + ] +}) +``` + +```ts [uni_modules 安装] +// vite.config.(js|ts) + +import { defineConfig } from 'vite' +import { UniRoot } from './src/uni_modules/uview-pro/plugins' +import Uni from '@dcloudio/vite-plugin-uni' + +export default defineConfig({ + plugins: [ + // ...plugins + UniRoot(), + Uni() + ] +}) +``` + +::: + +:::tip +若存在改变 pages.json 的插件,需要将 UniRoot 放置其后 +::: + +### 使用 + +1. 创建根组件并处理全局配置组件 + +* CLI项目: 在 **src** 目录下创建下 App.root.vue +* HBuilderX项目: 在 **根** 目录下创建 App.root.vue + +:::tip +在 App.root.vue 中标签 `` 代表页面内容的渲染位置,必须保留 +::: + +## 基本用法 + +```vue + + + +``` + +* 建议在应用的最外层(如 `App.root.vue`)直接包裹整个视图,保证所有子组件都能拿到最新的 CSS 变量。 +* `darkMode` 默认是 `Ref<'light' | 'dark' | 'auto'>`,直接透传即可;组件内部会依赖 `useTheme` 自动切换类名 `u-theme-light / u-theme-dark`。 + +## API + +### Props + +| Prop | 类型 | 默认值 | 说明 | +| --- | --- | --- | --- | +| `themes` | `Theme[]` | `[]` | 可选。用于在运行时(如远程拉取主题)重新初始化主题列表,通常不需要手动传入。 | +| `currentTheme` | `string` | `''` | 可选。强制切换到指定主题名;当你希望父级受控时使用。 | +| `darkMode` | `'light' \| 'dark' \| 'auto'` | `'auto'` | 推荐配合 `useTheme().darkMode`,也可以手动传值。 | +| `customStyle` | `Record \| string` | `{}` | 可选。追加到根节点上的样式,会与系统注入的 CSS 变量合并。 | +| `customClass` | `string` | `''` | 可选。自定义外层样式类名。 | + +> 当 `themes` 已通过插件初始化后,`u-config-provider` 会跳过重复初始化,仅根据 props 调整当前主题/模式,因此可以安心地多次挂载(例如微前端场景)。 + +### Events + +| 事件 | 回调参数 | 触发时机 | +| --- | --- | --- | +| `theme-change` | `(themeName: string)` | 全局主题被切换时(包括 `setTheme`、外部传入 `currentTheme`)。 | +| `mode-change` | `(mode: 'light' \| 'dark')` | 暗黑渲染状态变化时触发,`auto` 也会根据系统变化回调。 | + +示例: + +```vue + + + +``` + +## 常见场景 + +* **受控主题面板**:当你的设置页需要根据表单实时切换主题,可在父层直接修改 `currentTheme`,并监听 `theme-change` 做持久化。 +* **多应用容器**:如果你的应用存在多个入口,可在每个入口都包裹一个 `u-config-provider`,无需担心初始化冲突。 +* **局部覆写样式**:通过 `customStyle` / `customClass` 提供局部布局、背景覆写,同时依旧继承全局 CSS 变量。 + +## 最佳实践 + +* 始终通过 `useTheme` 获取 `darkMode` ref,保持单一数据源。 +* 不要在业务组件里直接调用 `configProvider` 单例,`u-config-provider` + `useTheme` 已暴露全部能力。 +* 若需要在页面层面自定义背景色、遮罩等,请使用 `$u-bg-color`、`rgba(var(--u-mask-color-rgb), .5)` 等变量,避免硬编码。 + +通过以上方式即可让 `u-config-provider` 在项目中稳定运行,确保主题/暗黑模式与应用保持同步。 + +--- + +--- +url: 'https://uviewpro.cn/zh/components/countDown.md' +--- +# CountDown 倒计时 + +该组件一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 通过`timestamp`参数设置倒计时间,单位为`秒` + +```html + + + +``` + +## 设置是否显示天,时,分,秒 + +说明:参数的配置原则应该是"自右向左"的,设置了"时",它右边的"分"和"秒"也应该设置为`true` + +* `show-days`,`show-hours`,`show-minutes`,`show-seconds`等参数默认为`true`,分别对应是否显示倒计时的"天","时","分","秒"。 + +该示例表示只显示倒计时的分和秒 + +```html + +``` + +## 倒计时分隔符 + +通过配置`separator`参数为`colon`或者`zh`来区分分隔符。`separator-size`配置分隔符的大小,单位rpx。`separator-color`配置分隔符的颜色 +`separator`可选值如下: + +* `colon`(默认)时显示为冒号,如:23:14:51 +* `zh`时显示为中文,如:23时14分51秒 + +```html + +``` + +## 倒计时样式 + +* 通过`color`设置倒计数字的颜色 +* `font-size`设置倒计数字的大小,重申一次:uView中,所有`font-size`,`width`,`height`,`padding`,`margin`等props参数 + 的单位默认都是`rpx`,特别说明除外(极少数场景会要求px单位)。关于`rpx`单位的说明,请参考uni官方文档:[尺寸单位](https://uniapp.dcloud.io/frame?id=%e5%b0%ba%e5%af%b8%e5%8d%95%e4%bd%8d) +* `show-border`参数设置倒计数字是否添加边框,`border-color`参数设置边框的颜色 + +```html + +``` + +## 倒计时执行的时机 + +通过`autoplay`配置倒计时是否在组件的`mounted`生命周期进行初始化(在`timestamp`有值前提下),如果设置`autoplay`为`false`,就需要手动通过 +`refs`的形式通知倒计时开始执行,调用的是组件内部的`start()`方法 + +```html + + + +``` + +## 如何获取当前倒计的秒数 + +有时候我们可会需要记录当前剩余的秒数,并在某个时机重新触发,可以通过如下两个方式实现: + +* 监听`change`事件,在回调中获得当前剩余的秒数 +* 通过ref调用,获取内部的`seconds`参数即为当前剩余的秒数 + +```html + + + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| timestamp | 倒计时,单位为秒 | String | Number | 0 | - | +| autoplay | 是否自动开始倒计时,如果为`false`,需手动调用开始方法。见上方说明 | Boolean | true | false | +| separator | 分隔符,`colon`为英文冒号,`zh`为中文 | String | colon | zh | +| separator-size | 分隔符的字体大小,单位rpx | String | Number | 30 | - | +| separator-color | 分隔符的颜色 | String | #303133 | - | +| font-size | 倒计时字体大小,单位rpx | String | Number | 30 | - | +| show-border | 是否显示倒计时数字的边框 | Boolean | false | true | +| border-color | 数字边框的颜色 | String | #303133 | - | +| bg-color | 倒计时数字的背景颜色 | String | #ffffff | - | +| color | 倒计时数字的颜色 | String | #303133 | - | +| height | 数字高度值(宽度等同此值),设置边框时看情况是否需要设置此值,单位rpx | String | auto | - | +| show-days | 是否显示倒计时的"天"部分 | Boolean | true | false | +| show-hours | 是否显示倒计时的"时"部分 | Boolean | true | false | +| show-minutes | 是否显示倒计时的"分"部分 | Boolean | true | false | +| show-seconds | 是否显示倒计时的"秒"部分 | Boolean | true | false | +| hide-zero-day | 当"天"的部分为0时,隐藏该字段 | Boolean | true | false | + +### Events + +|事件名|说明|回调参数| +|:-|:-|:-| +|end|倒计时结束|-| +|change|倒计过程中,每秒触发一次|timestamp: 当前剩余的倒计秒数| + +### Methods + +需要通过ref获取倒计时组件才能调用,见上方"倒计时执行的时机"说明 + +| 名称 | 说明 | +|------------- |---------------- | +| start | 开始倒计时 | +| end | 停止倒计时 | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/countTo.md' +--- +# CountTo 数字滚动 + +该组件一般用于需要滚动数字到某一个值的场景,目标要求是一个递增的值。 + +::: warning 注意 +如果给组件的父元素设置`text-align: center`想让数字水平居中,可能是由于元素内容快速变化而导致渲染的问题,在APP上组件可能会有轻微的左右抖动现象, +解决办法是给父元素设置`padding-left`或者`margin-left`即可。 +::: + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +通过`start-val`设置开始值,`end-val`设置结束值 + +```html + +``` + +## 设置滚动相关参数 + +* 通过`duration`设置从开始值到结束值整个滚动过程所需的时间,单位`ms` +* 通过`use-easing`设置滚动快结尾的时候,是否放慢滚动的速度,给用户更好的视觉效果 + +```html + +``` + +## 是否显示小数位 + +通过`decimals`设置显示的小数位,如果设置了,在滚动过程中,小数位会一起变化。如果`start-val`和`end-val`是带小数的,应该设置`decimals`为 +`start-val`和`end-val`一样的小数位数值,如`end-val`为1200.55,那么`decimals`应该设置为2。 + +```html + +``` + +## 千分位分隔符 + +通过`separator`配置千分位分隔符,默认为空字符串,可以设置英文逗号",",此参数表现为`end-val`值超过1000时,比如为"1257",那么滚动后会变成"1,245",在金额数值时, +该参数可能会用上。 + +```html + +``` + +## 滚动执行的时机 + +可以通过`autoplay`设置是否需要初始化时就开始滚动,默认为`true`,如果设置为`false`,可以通过组件的`ref`去控制组件内部的`start()`和`paused()` +方法来开始或暂停。 + +```html + + + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| start-val | 开始值 | String | Number | 0 | - | +| end-val | 结束值 | String | Number | 0 | - | +| duration | 滚动过程所需的时间,单位ms | String | Number | 2000 | - | +| autoplay | 是否自动开始滚动 | Boolean | true | false | +| decimals | 要显示的小数位数,见上方说明 | String | Number | 0 | - | +| use-easing | 滚动结束时,是否缓动结尾,见上方说明 | Boolean | true | false | +| separator | 千位分隔符,见上方说明 | String | - | - | +| color | 字体颜色 | String | #303133 | - | +| font-size | 字体大小,单位rpx | String | Number | 50 | - | +| bold | 字体是否加粗 | Boolean | false | true | + +### Methods + +此方法如要通过ref手动调用 + +| 名称 | 说明 | +|------------- |---------------- | +| start | `autoplay`为`false`时,通过此方法启动滚动 | +| reStart | 暂停后重新开始滚动(从暂停前的值开始滚动) | +| paused | 暂停滚动 | + +### Events + +|事件名|说明|回调参数|版本| +|:-|:-|:-|:-| +| end | 数值滚动到目标值时触发 | - | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/guide/customIcon.md' +--- +# CustomIcon 扩展自定义图标库 + +uView Pro 已通过大量的实践中,收集了用户最有可能需要用到的图标,见 [Icon 图标](/zh/components/icon.html),但我们也相信,它肯定无法覆盖所有的场景和需求。 + +用户也可以使用标签的方式,自行引入字体图标,为何要通过扩展的方式集成呢?\ +这是因为 uView 有统一的字体图标组件,使用方便,配置灵活,且风格统一。 + +:::tip 说明 +以下说明和演示,均针对[阿里字体图标库](https://www.iconfont.cn),其他字体库源同理 +::: + +总的来说,我们要实现的效果如下: + +```css +@font-face { + /* 声明"custom-icon"字体 */ + font-family: "custom-icon"; + src: url("data:application/x-font-woff2;charset=utf-8;base64,xxxxxxxx") format("woff2"); +} + +.custom-icon { + /* 引用上面声明的"custom-icon"字体 */ + font-family: "custom-icon" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* 字体图标的前缀为"custom-icon-" */ +.custom-icon-copy:before { + content: "\e641"; +} +``` + +通过如下方式引用: + +通过`custom-prefix`指定类名为`custom-icon` + +```html + +``` + +## 基础说明 + +我们假定您一个项目中,需要扩展多个图标,所以您应该把各个图标收集进一个阿里图标库的项目中,即使您后面不断的扩展图标,也能让它们在同一个库中。 + +一般情况下,我们建议您在收藏的项目中,使用"下载至本地"的功能,而后解压,复制文件夹中的"iconfont.css"至 uni-app 目中(其余的文件可忽略) + +下面的操作默认您已进入阿里图标库的"图标管理"栏目中 + +1. 我们建议,您应该修改这个图标的前缀,这样以后有新图标加入的时候,不用每次频繁修改前缀,在右上角的"更多操作"中,进入"编辑项目": + +2) 修改"FontClass/Symbol 前缀"项为"custom-icon-",修改"Font Family"为"custom-icon",如下图: + +3. 下载项目至本地 + +4) 复制"iconfont.css"至项目,一般放在根目录的`static`文件夹下 + +5. 复制"iconfont.css"文件到 uni-app 目根目录的`static`目录后(也可以为其他目录),打开"iconfont.css",内部如下: + +删掉下图圈出的部分,记得把"src: url('data:application/x-font-woff2......"最后的逗号`,`改成分号`;`。 + +6. 最终如下图: + +7) 在项目根目录的"App.vue"中,引入上述的"iconfont.css",注意自己存放的路径,且通过"@import"引入的外部样式,为了兼容性建议使用相对路径, + 且引入的样式,需要写在`style`标签有效内容中的最前面,如下: + +```css +/* App.vue */ + +``` + +8. 在页面通过 uView 的[Icon](/zh/components/icon.html)组件使用图标,图标名称为您在阿里图标库中点击"编辑图标"时的"Font Class / Symbol"(该值可修改,每次修改都需重新下载"iconfont.css"放到 uni-app 目中, + 覆盖原来的"iconfont.css") + +如上图,我们得到"backspace"值,使用如下: + +```html + +``` + +从上可以看出,相比 uView 内置的图标使用,多了一句固定的`custom-prefix="custom-icon"`,其余使用方法完全相同 + + +**注意**:执行完上面的操作后,您就可以随心所欲的扩展自己的图标了,最重要的是第二步,修改了它,就免了以后每次都要修改"iconfont.css"的多处细节。 +当然,每次新增图标,当您把"iconfont.css"复制至项目中覆盖原来的"iconfont.css"后,都需要执行一遍第 5 步删掉多余的内容,别忘了修改最后的`,`为`;`。 + +最后提一下,为了多平台兼容性,您应该仅把单色图标添加到阿里图标库的项目中,即使添加了多色的图标,在使用中,也会被转成单色。 + +祝您使用愉快! + +--- + +--- +url: 'https://uviewpro.cn/zh/tools/deepClone.md' +--- +# deepClone 对象深度克隆 + +:::tip 注意 +由于JS对象包括的范围非常广,加上ES6又有众多的新特性,很难、也没必要做到囊括所有的类型和情况,这里说的"对象",指的是普通的对象,不包括修改对象原型链, +或者为"Function","Promise"等的情况,请留意。 +::: + +场景: + +* 我们平时可能会遇到需要通过`console.log`打印一个对象,至执行打印的时刻,此对象为空,后面的逻辑中对此对象进行了修改赋值,但是我们在控制台直接看到的打印结果 + 却是修改后的值,这让人匪夷所思,虽然我们可以通过`console.log(JSON.parse(JSON.stringify(object)))`的形式处理,但是需要写这长长的一串,难免让人心生抵触。 + +* 当我们将一个对象(变量A)赋值给另一个变量(变量B)时,修改变量B,因为对象引用的特性,导致A也同时被修改,所以有时候我们需要将A克隆给B,这样修改B的时候,就不会 + 导致A也被修改。 + +### deepClone(object = {}) + +* `object` \ 需要被克隆的对象 + +```js +let a = { + name: 'mary' +}; + +// 直接赋值,为对象引用,即修改b等于修改a,因为a和b为同一个值 +let b = a; + +b.name = 'juli'; +console.log(b); // 结果为 {name: 'juli'} +console.log(a); // 结果为 {name: 'juli'} + + +// 深度克隆 +let b = uni.$u.deepClone(a); + +b.name = 'juli'; +console.log(b); // 结果为 {name: 'juli'} +console.log(a); // 结果为 {name: 'mary'} +``` + +--- + +--- +url: 'https://uviewpro.cn/zh/tools/deepMerge.md' +--- +# deepMerge 对象深度合并 + +:::tip 注意 +由于JS对象包括的范围非常广,加上ES6又有众多的新特性,很难、也没必要做到囊括所有的类型和情况,这里说的"对象",指的是普通的对象,不包括修改对象原型链, +或者为"Function","Promise"等的情况,请留意。 +::: + +在ES6中,我们可以很方便的使用`Object.assign`进行对象合并,但这只是浅层的合并,如果对象的属性为数组或者对象的时候,会导致属性内部的值丢失。 + +**注意:** 此处合并不同于`Object.assign`,因为`Object.assign(a, b)`会修改`a`的值为最终的结果(这往往不是我们所期望的),但是`deepMerge(a, b)`并不会修改`a`的值。 + +### deepMerge(target = {}, source = {}) + +* `target` \ 目标对象 +* `source` \ 源对象 + +`Object.assign`浅合并示例: + +```js +let a = { + info: { + name: 'mary' + } +} + +let b = { + info: { + age: '22' + } +} + +// 使用Object.assign进行合并,注意此时a被修改了 +let c = Object.assign(a, b); + +// 我们期望的结果为: +c = { + info: { + name: 'mary', + age: '22' + } +} + +// 事实上,我们得到的结果却为: +c = { + info: { + age: '22' + } +} +``` + +深度合并示例: + +```js +let a = { + info: { + name: 'mary' + } +} + +let b = { + info: { + age: '22' + } +} + +let c = uni.$u.deepMerge(a, b); + +// c为我们期望的结果 +c = { + info: { + age: '22', + name: 'mary' + } +} +``` + +--- + +--- +url: 'https://uviewpro.cn/zh/components/divider.md' +--- +# Divider 分割线 + +区隔内容的分割线,一般用于页面底部"没有更多"的提示。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +文字内容通过`slot`传入 + +```html +大漠孤烟直 +``` + +## 设置文字颜色 + +可以通过`color`指定文字的颜色 + +```html +长河落日圆 +``` + +## 设置单边边线条宽度和颜色 + +* `half-width`指定文字某一边的线条宽度(注意这里设置的是一边,而不是文字两边线条的总长度),`half-width`可以是数值(rpx)或者百分比 +* `type`可以快捷的设置线条为某一个主题色(默认`primary`),`border-color`参数同样也能设置线条颜色,优先级高于`type`,也即是说二者同时 + 设置了值,将会是`border-color`起作用。反之,如果要让`type`值起作用,就要将`border-color`置为空字符串或者`null`。 + +```html +姑苏城外寒山寺 +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------- |---------------------- |-------- | +| half-width | 文字左或右边线条宽度,数值或百分比,数值时单位为rpx | String | Number | - | 150 | +| border-color | 线条颜色,优先级高于`type` | String | #dcdfe6 | - | +| color | 文字颜色 | String | #909399 | - | +| fontSize | 字体大小,单位rpx | String | Number | 26 | - | +| bg-color | 整个divider的背景颜色 | String | #ffffff | - | +| height | 整个divider的高度,单位rpx | string | Number | 40 | - | +| type | 将线条设置主题色 | string | primary | info \ success \ warning \ error | +| margin-top | 与前一个元素的距离,单位rpx | String | Number | 0 | - | +| margin-bottom | 与后一个元素的距离,单位rpx | String | Number | 0 | - | +| use-slot | 是否使用slot传入内容,如果不传入,中间不会有空隙 | Boolean | true | false | + +### Events + +|事件名|说明|回调参数|版本| +|:-|:-|:-|:-| +| click | divider组件被点击时触发 | - | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/dropdown.md' +--- +# Dropdown 下拉菜单 + +该组件一般用于向下展开菜单,同时可切换多个选项卡的场景。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +使用前说明: + +* 该组件必须结合`u-dorpdown`和`u-dropdown-item`一起使用,展开的内容由`u-dropdown-item`通过传递参数或者`slot`提供 +* 组件的菜单栏标题由`u-dropdown-item`通过`title`参数提供 +* `u-dropdown-item`带有默认的单选展示功能,通过`options`(见下方说明)配置,传入`slot`则会覆盖默认功能,通过`v-model`双向绑定`options`选中项的`value`值 + +```html + + + +``` + +## 配置选项卡默认功能 + +如上所示,`u-dropdown-item`具有默认的单选功能,这里主要讲解其`options`和`v-model`参数: + +`options`参数为一个数组,元素为对象,其中`label`为需要展示的提示文字,`value`为点击时双向绑定给`v-model`的值,`v-model`初始化时如果设置 +某个`options`中的`value`,则该条目将会被默认选中: + +```js +let options = [ + { + label: '蜀道难', + value: 1 + }, + { + label: '难以上青天', + value: 2 + } +] +``` + +## 配置选项卡自定义功能 + +在选项卡默认的单选功能无法满足的时候,我们可以给`u-dropw-item`传递`slot`来自定义需要展示的内容。 + +问:如果自定义内容,如何实现点击其中的按钮关闭下拉菜单? + +答:在`u-dropdown`中,有一个`close()`方法,可以通过`ref`获取实例,并调用方法进行关闭即可。 + +```html + + + +``` + +## 配置选项卡内容可滚动 + +如果我们想给自定义内容的选项中局部内容可滚动,可以通过嵌入`scroll-view`元素实现,需要注意的是`scroll-view`必须声明高度才有效,大概如下: + +```html + + + +``` + +## 如何保持菜单高亮 + +有时候,我们可能会希望下拉菜单收起之后,标题部分可以保持高亮,组件内部可以做到这样的要求,但是如果通过自定义`slot`传入了内容,那么组件就不知道 +收起的时候,是否该保持菜单的高亮了,因为组件不知道您在自定义的内容中是否进行了"操作",所以我们提供了一个手动通过`ref`设置的`highlight(index)`方法, +让您自主决定是否让某个菜单高亮,可以自行结合`change`(dropdown-item)、`open`(dropdown)、`close`(dropdown)事件进行组合操作。 + +```html + + + +``` + +## Fixed 定位模式 + +设置`fixed`属性后,下拉菜单使用`fixed`定位固定在视窗顶部,自动适配状态栏和导航栏高度,并生成占位区域防止页面塌陷。不受父容器`overflow: hidden`裁剪或`transform`影响,适用于在滚动视图、弹窗或复杂布局中使用。 + +### 定位计算 + +``` +实际顶部偏移 = statusBarHeight + navbarHeight + offsetTop +``` + +|参与计算的参数|说明| +|-|-| +|`statusBarHeight`|系统状态栏高度,由组件自动获取| +|`navbarHeight`|导航栏高度。默认不设置时自动计算(44px),微信小程序 iOS 端 44px、Android 端 48px;设置任意数值(包括0)则使用指定值| +|`offsetTop`|额外顶部偏移量,默认0,用于用户微调位置| + +### 行为说明 + +|行为|说明| +|-|-| +|展开|下拉内容以`fixed`定位显示在视窗中,菜单栏下方的区域由遮罩层覆盖,点击遮罩可关闭| +|收起|下拉内容完全隐藏(`display: none`),不会遮挡下方页面元素的点击和触摸事件| +|占位|`fixed`定位后组件脱离文档流,默认自动生成同等高度的占位区域防止页面塌陷。开启`immersive`后不生成占位区域| + +### 参数说明 + +* **offset-top**:在自动计算偏移量的基础上增加额外顶部偏移。例如页面顶部有自定义元素时,可通过此参数下移菜单位置 +* **navbar-height**:组件默认自动计算状态栏+导航栏高度。如果页面导航栏高度非标准(44px),可通过此参数指定精确高度。设置为`0`可完全取消顶部偏移 +* **immersive**:沉浸式模式,开启后不生成占位区域,允许页面内容延伸到下拉菜单下方,适用于沉浸式导航栏场景 +* **z-index**:自定义`fixed`定位时的层叠值,默认为985,当页面有其他固定元素遮挡时可调整 + +### 配合参数使用 + +```html + + + + + +``` + +### 完整示例 + +```html + + + +``` + +## 兼容性 + +* 由于`头条小程序`的兼容性原因,如果`u-dropdown`父元素设置了`display: flex`,您可能需要给组件添加`u-dropdown`类,如下: + +```html + +``` + +## API + +### Props Dropdown + +|参数|说明|类型|默认值|可选值|版本| +|-|-|-|-|-|-| +|active-color|标题和选项卡选中的颜色|String|#2979ff|-|-| +|inactive-color|标题和选项卡未选中的颜色|String|#606266|-|-| +|close-on-click-mask|点击遮罩是否关闭菜单|Boolean|true|false|-| +|close-on-click-self|点击当前激活项标题是否关闭菜单|Boolean|true|false|-| +|duration|选项卡展开和收起的过渡时间,单位ms|String | Number|300|-|-| +|height|标题菜单的高度,单位任意,数值默认为rpx单位|String | Number|80|-|-| +|border-bottom|标题菜单是否显示下边框|Boolean|false|true|-| +|title-size|标题的字体大小,单位任意,数值默认为rpx单位|String | Number|28|-|-| +|border-radius|菜单展开内容下方的圆角值,单位任意|String | Number|0|-|-| +|menu-icon|标题菜单右侧的图标|String|arrow-down|arrow-down-fill|-| +|menu-icon-size|标题菜单右侧的图标的大小,单位任意,数值默认为rpx单位|String | Number|26|-|-| +|fixed|是否使用fixed定位,开启后下拉菜单固定在顶部,自动适配状态栏和导航栏高度,并生成占位区域防止页面塌陷|Boolean|false|true|| +|offset-top|fixed定位时,在自动计算的偏移量基础上的额外顶部偏移量(px),用于用户微调位置。实际top = statusBarHeight + navbarHeight + offsetTop|String | Number|0|-|| +|navbar-height|fixed定位时,状态栏和导航栏所占的总高度(px)。默认不设置(空字符串),组件会自动获取系统状态栏高度+默认导航栏高度(44px/48px)。设置任意数值(包括0)则使用用户指定值,不再自动计算|String | Number|''|-|| +|immersive|沉浸式模式,仅在fixed下生效。开启后不生成占位区域,允许页面内容延伸到dropdown下方(类似沉浸式导航栏)|Boolean|false|true|| +|z-index|fixed定位时的z-index值|String | Number|985|-|| + +### Events Dropdown + +|事件名|说明|回调参数| +|-|-|-| +|open|下拉菜单被打开时触发|(index) - 当前被打开菜单的索引| +|close|下拉菜单被关闭时触发|(index) - 当前被关闭菜单的索引| + +### Props DropdownItem + +|参数|说明|类型|默认值|可选值|版本| +|-|-|-|-|-|-| +|v-model|双向绑定选项卡选择值|String | Number|-|-|-| +|title|菜单项标题|String|-|-|-| +|options|选项数据,如果传入了默认slot,此参数无效,数据结构见上方说明|Array\[Object]|-|-|-| +|disabled|是否禁用此选项卡|Boolean|false|true|-| +|height|弹窗下拉内容的高度(内容超出将会滚动),`slot`自定义内容时无效(自行使用`scroll-view`处理),单位任意,默认rpx|String | Number|auto|-|-| +|show|是否显示此选项卡|Boolean|false|true|| + +### Slots DropdownItem + +|名称|说明| +|-|-| +|default|自定义选项卡内容| + +### Events DropdownItem + +|事件名|说明|回调参数| +|-|-|-| +|change|每个`u-dropdown`均有此回调,点击某个`options`选项时触发|(value) - 点击项绑定的`value`属性值| + +### Methods Dropdown + +这些为组件内部的方法,需要通过`ref`调用 + +|方法名|说明| +|-|-| +|close()|关闭下拉菜单| +|open(index)|打开指定索引的下拉菜单,`index`为菜单项的索引| +|highlight(index)|`index`为需要设置高亮的菜单项的索引(从0开始),不写表示清空内部的高亮| + +--- + +--- +url: 'https://uviewpro.cn/zh/components/empty.md' +--- +# Empty 内容为空 + +该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个"没有内容"的场景, +我们精心挑选了十几个场景的图标,方便您使用。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +:::tip 提示 +新版本移除了此组件内置的图片,因为这些图片太大,影响了组件库的大小。改用字体图标的形式提供,缺点是字体图标只能是单色的,形状与原来的图片也有些许出入。 +基于以上,我们的专业设计师精心为您准备了一套精美缺省图,带有图片和`Sketch`文件,您可以下载或修改后再使用:[资源下载](/zh/components/resource.html) +::: + +* 通过`text`参数配置提示的文字内容 +* 通过`mode`(默认为`data`)参数配置要显示的图标 + +```html + +``` + +## 内置图标 + +这些图标已内置,直接通过`mode`参数引用即可 + +| 名称 | 说明 | +|------------- |---------------- | +| car | 购物车为空 | +| page | 页面不存在 | +| search | 没有搜索结果 | +| address | 没有收货地址 | +| wifi | 没有WiFi | +| order | 订单为空 | +| coupon | 没有优惠券 | +| favor | 无收藏 | +| permission | 无权限 | +| history | 无历史记录 | +| news | 无新闻列表 | +| message | 消息列表为空 | +| list | 列表为空(通用) | +| data | 数据为空(默认,通用) | + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| color | 文字颜色 | String | #c0c4cc | - | +| text | 文字提示 | String | 无内容 | - | +| icon-color | icon的颜色,字体图标时有效 | String | #c0c4cc | - | +| icon-size | icon的大小,单位rpx,如果`src`为图片路径,此参数可以设置图片的尺寸 | String | Number | 120 | - | +| src | 图标名称或者图片路径(绝对路径),如定义,`mode`参数会失效 | String | - | - | +| font-size | 提示文字的大小,单位rpx | String | Number | 28 | - | +| mode | 内置的图标,见上方说明 | String | data | - | +| img-width | 图标的宽度,单位rpx | String | Number | 240 | - | +| img-height | 图标的高度,单位rpx | String | auto | - | +| show | 是否显示组件 | Boolean | true | false | +| margin-top | 组件到上一个元素的间距,单位rpx | String | Number | 0 | - | + +### Slots + +| 名称 | 说明 | +|------------- |---------------- | +| bottom | 给组件底部传入`slot`内容 | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/fab.md' +--- +# Fab 悬浮按钮 + +悬浮按钮(Floating Action Button)用于在页面右下角或指定位置提供常用快捷操作入口,支持拖拽、展开子操作项、以及多种布局策略。本文件按组件文档规范提供示例与 API 说明,包含平台差异与常见问题说明。 + +:::warning 注意 +由于演示示例是通过`iframe`嵌入到网页的,所以可能会造成某些在网页上(浏览器 F12 手机调试模式无问题)无法使用,造成组件有 BUG 的错觉。 +::: + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本用法(默认右下角) + +```html + + + +``` + +示例: + +```html + + + 收藏 + 点赞 + + + + + + +``` + +## 启用拖拽并关闭自动吸边 + +```html + + 收藏 + 分享 + +``` + +## 传入四边 gap 并设置右上角(position) + +```html + + + + +``` + +## 自定义触发器并通过 ref 控制展开 + +```html + + + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|:- |:- |:- |:-: |:-: | +| type | 主题颜色 | String | `primary` | `primary` / `info` / `error` / `warning` / `success` | +| disabled | 是否禁用 | Boolean | `false` | - | +| draggable | 是否允许拖拽 | Boolean | `false` | - | +| autoStick | 拖拽释放后是否自动吸边(仅当 draggable=true 时生效) | Boolean | `true` | - | +| gap | 与屏幕边缘的间距,支持单值或对象分别配置四边间距,单位px | Object | `{ left: 16, right: 16, top: 16, bottom: 16 }` | - | +| position | 预设停靠位置 | String | `right-bottom` | `left-top` / `right-top` / `left-bottom` / `right-bottom` / `left-center` / `right-center` / `top-center` / `bottom-center` | +| direction | 子操作项展开方向 | String | `top` | `top` / `bottom` / `left` / `right` | +| zIndex | 层级 | Number | `99` | - | + +> 说明:`gap` 支持对象形式 `{ top, right, bottom, left }`,单位:px。 + +### Events + +| 事件名 | 说明 | 回调参数 | +|:-|:-|:-| +| trigger | 当没有子项时,点击触发此事件 | event | + +## 暴露方法 + +| 方法名 | 说明 | +|:-|:-| +| toggle | 切换展开/收缩状态(通过组件 ref 调用) | + +### Slots + +| 名称 | 说明 | +|:-|:-| +| default | 子操作项插槽(存在 slot 时组件作为展开菜单展示) | +| trigger | 自定义触发器(覆盖默认圆形按钮) | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/field.md' +--- +# Field 输入框 + +借助此组件,可以实现表单的输入, 有"text"和"textarea"类型的,此外,借助uView的`picker`和`actionSheet`组件可以快速实现上拉菜单,时间,地区选择等, +为表单解决方案的利器。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 通过`v-model`,可以双向绑定输入框的值 +* 通过`label`设置输入框左边的提示文字 +* 通过`placeholder`指定个性化的提示语 + +```html + + + +``` + +### 自定义输入框类型 + +我们可以通过`type`参数来自定义输入框的类型,如果为`text`(默认)内部为`input`输入框,如果为`textarea`值,内部为`textarea`输入框,相比`input`输入框, +它的默认高度约为两个`input`的高度,且可以换行,同时组件高度也会自动增高,适用于需要多行输入的场景。 + +```html + +``` + +### 必填和错误提示 + +* 通过设置`required`,可以给输入框左边添加一个红色的"\*"号,它只起提示作用,uView内部不会判断用户是否输入了值,您需要提交的时候,通过`v-model`绑定的值自行判断 +* 通过设置`error-message`,会在输入框下方给用红色给出错误提示 + +```html + + + +``` + +### 在输入框尾部插入按钮 + +此为在表单填写时,可能需要用户发送验证码的场景,可以通过`slot`插入一个uView的[button](/zh/components/button.html)组件,通过结合uView的[VerificationCode](/zh/components/verificationCode.html), +可以简单,迅速的将功能集成 + +```html + + + +``` + +### 如何与Picker或者actionSheet等组件结合 + +某些场景,比如需要用用户选择性别,或者时间,地区选择等,我们可以结合uView的[ActionSheet](/zh/components/actionSheet.html)和[Picker](/zh/components/picker.html)组件解决, +这种情况,一般都是要求`field`组件是不可输入内容的,我们需要设置`disabled`参数为`true`,既然是需要弹出选择框,`field`组件右边应该要有一个实心向下的 +三角形图标,配置为`right-icon`为`arrow-down-fill`,同时监听`click`即可。这一切,uView都帮您想到,并且做好了。 + +```html + + + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| type | 输入框的类型 | String | text | textarea | +| icon | `label`左边的图标,限uView的图标名称 | String | - | - | +| border-bottom | 是否显示field的下边框 | Boolean | true | false | +| border-top | 是否显示field的上边框 | Boolean | false | true | +| icon-style | icon的样式,对象形式 | Object | - | - | +| right-icon | 输入框右边的图标名称,限uView的图标名称 | String | - | - | +| required | 是否必填,左边显示红色"\*"号 | Boolean | false | true | +| label | 输入框左边的文字提示 | String | - | - | +| password | 是否密码输入方式(用点替换文字),`type`为`text`时有效 | Boolean | false | true | +| clearable | 是否显示右侧清空内容的图标控件(输入框有内容,且获得焦点时才显示),点击可清空输入框内容 | Boolean | true | false | +| label-width | `label`的宽度,单位rpx | Number | String | 130 | - | +| label-align | `label`的文字对齐方式 | String | left | center / right | +| input-align | 输入框内容对齐方式 | String | left | center / right | +| icon-color | 左边通过`icon`配置的图标的颜色 | String | #606266 | - | +| clear-size | 清除图标的大小,单位rpx | Number | String | 30 | - | +| field-style | 输入框的样式,对象形式 | Object | - | - | +| auto-height | 是否自动增高输入区域,`type`为`textarea`时有效 | Boolean | true | false | +| error-message | 显示的错误提示内容,如果为空字符串或者`false`,则不显示错误信息 | String \ Boolean | - | - | +| placeholder | 输入框的提示文字 | String | - | - | +| placeholder-style | `placeholder`的样式(内联样式,字符串),如"color: #ddd" | String | - | - | +| focus | 是否自动获得焦点 | Boolean | false | true | +| fixed | 如果`type`为`textarea`,且在一个"position:fixed"的区域,需要指明为`true` | Boolean | false | true | +| disabled | 是否不可输入 | Boolean | false | true | +| maxlength | 最大输入长度,设置为 -1 的时候不限制最大长度 | Number | String | 140 | - | +| confirm-type | 设置键盘右下角按钮的文字,仅在type="text"时生效 | String | done | - | +| trim | 是否自动去除两端的空格 | Boolean | true | false | + +### Slots + +| 名称 | 说明 | +|------------- |---------------- | +| icon | 自定义左侧的图标 | +| right | 自定义右侧内容 | + +### Events + +|事件名|说明|回调参数| +|:-|:-|:-| +| input | 输入框内容发生变化时触发 | value:输入框的内容,建议通过`v-model`双向绑定输入值,而不是监听此事件的形式 | +| focus | 输入框获得焦点时触发 | - | +| blur | 输入框失去焦点时触发 | - | +| confirm | 点击完成按钮时触发 | value:输入框的内容,建议通过`v-model`双向绑定输入值,而不是监听此事件的形式 | +| right-icon-click | 通过`right-icon`生成的图标被点击时触发 | +| click | 输入框被点击或者通过`right-icon`生成的图标被点击时触发,这样设计是考虑到传递右边的图标,一般都为需要弹出"picker"等操作时的场景,点击倒三角图标,理应发出此事件,见上方说明| - | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/form.md' +--- +# Form 表单 + +此组件一般用于表单场景,可以配置Input输入框,Select弹出框,进行表单验证等。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +此组件一般是用于表单验证使用,每一个表单域由一个`u-form-item`组成,表单域中可以放置`u-input`、`u-checkbox`、`u-radio`、`u-switch`等。 + +* 在表单组中,通过`model`参数绑定一个对象,这个对象的属性为各个`u-form-item`内组件的对应变量。 +* 由于表单验证和绑定表单规则时,需要通过`ref`操作,故这里需要给`form`组件声明`ref="uFormRef"`属性。 +* 关于`u-from-item`内其他可能包含的诸如`input`、`radio`等组件,请见各自组件的相关文档说明。 + +下方为一个经典表单的示例,包含`input`、`textarea`、`radio`、`checkbox`、`switch`的组合使用: + +```vue + + + +``` + +## Form-item组件说明 + +此组件一般需要搭配`Form`组件使用,也可以单独搭配`Input`等组件使用,由于此组件参数较多,这里只对其中参数最简要介绍,其余请见底部的API说明: + +* `prop`为传入`Form`组件的`model`中的属性字段,如果需要表单验证,此属性是必填的。 +* `label-position`可以配置左侧"label"的对齐方式,可选为`left`和`top`。 +* `border-bottom`是否显示表单域的下划线,如果给`Input`组件配置了边框,可以将此属性设置为`false`,从而隐藏默认的下划线。 +* 如果想在表单域配置左右的图标(或小图片,[Icon 图标](/zh/components/icon.html)可以配置图片),可以通过`left-icon`和`right-icon`参数实现。 + +## 表单尺寸 + +v0.5.16 新增了组件尺寸配置系统,`Form`组件新增了`size`参数,可以配置组件的尺寸,影响内部组件的尺寸,具体如下: + +* `size`参数可选值:`default`(默认)、`small`、`large`,通过配置`size`参数,可以同时调整表单内组件的尺寸,达到整体协调的效果。 +* 默认情况下,表单尺寸为`default`,即默认尺寸,如果希望表单尺寸为`small`,可以在`u-form`组件上设置`size="small"`,同理,设置`size="large"`,为`large`尺寸。 + +```VUE + + +``` + +`u-form-item`,`u-input`,`u-textarea`,`u-switch`,`u-radio`,`u-checkbox` 等组件也新增了`size`参数,如果需要单独调整某一个表单域的尺寸,可以在对应组件上设置`size`参数,优先级高于`Form`组件的同名参数: + +具体可参考issue提交:[表单组件尺寸配置系统 · Issue #137 · anyup/uView-Pro](https://github.com/anyup/uView-Pro/issues/137) + +## 表单验证 + +uView Pro的表单组件具备完整的验证功能,在开始之前,需要了解如下几个注意事项,方面您快速上手: + +### `Form`组件绑定`model`参数 + +* `model`参数为一个对象,对象属性为需要验证的变量名。 +* 通过`ref`,在`onMounted`生命周期调用组件的`setRules`方法绑定验证规则,无法通过`props`传递变量,是因为微信小程序会过滤掉对象中的方法,导致自定义验证规则无效。 + +```vue + + + +``` + +### 嵌套验证 + +自`v0.3.15`起,uView Pro的表单组件支持嵌套验证,即`u-form-item`的 `prop` 可以书写成`a.b.c`,如: + +```html + + + +``` + +### 深层验证、动态验证 + +自`v0.4.5`起,uView Pro 的表单组件支持深层验证、动态验证: + +详情参考[form校验](https://github.com/anyup/uView-Pro/blob/master/src/pages/componentsA/form/index.vue) + +### u-form-item绑定`label`和`prop` + +此组件最大的作用是与`u-form`和`u-input`等组件进行交互,在表单验证时,需要绑定`prop`参数,此参数为`u-form`组件的`model`对象中的属性名, +目的是在验证时,通过这个`prop`属性名将父组件`u-form`的`model`和`rules`规则关联起来。 + +注意点: + +* 通过`prop`绑定对应的属性名,这里是字符串,而不是一个变量。 +* 通过`label`参数设置左边显示的提示文字,另外通过`label-position`可以配置`label`在左边还是上方。 + +```vue + + + +``` + +从上面的示例我们可以看到,`rules`中的属性名和`form`的属性名是一致的,同时传递给`u-form-item`的`prop`参数绑定的也是相同的属性名,注意这里`prop`参数绑定的是 +字符串(属性名),而不是一个变量。 + +### 验证规则 + +组件验证部分采用了[async-validator](https://github.com/yiminghe/async-validator),一个字段可以设置多个内置规则,以及自定义规则,触发方式等, +每个字段的验证规则为一个数组,数组的每一个元素对象为其中一条规则(一个字段的验证可以配置多个规则),如下: + +```ts +const rules = { + name: [ + // 对name字段进行长度验证 + { + min: 5, + message: '简介不能少于5个字', + trigger: 'change' + }, + // 对name字段进行必填验证 + { + required: true, + message: '请填写姓名', + trigger: ['change', 'blur'] + } + ] +}; +``` + +### 验证规则属性 + +每一个验证规则中,可以配置多个属性,下面对常用的属性进行讲解,更具体的可以查看[async-validator](https://github.com/yiminghe/async-validator)的文档说明: + +* `trigger`{`String | Array`}:触发校验的方式有2种: + * change:字段值发生变化时校验 + * blur:输入框失去焦点时触发 + * 如果同时监听两种方式,需要写成数组形式:`['change', 'blur']` + +* `type`{String}\ + 内置校验规则,如这些规则无法满足需求,可以使用正则匹配、或者使用`validator`自定义方法并结合uView自带[验证规则](/zh/tools/test.html)。 + * string:必须是 `string` 类型,默认类型 + * number:必须是 `number` 类型 + * boolean:必须是 `boolean` 类型 + * method:必须是 `function` 类型 + * regexp:必须是 `regexp` 类型,这里的正则,指的是判断字段的内容是否一个正则表达式,而不是用这个正则去匹配字段值 + * integer:必须是`整数`类型 + * float:必须是`浮点数`类型 + * array:必须是 `array` 类型 + * object:必须是 `object` 类型 + * enum:必须出现在 `enmu` 指定的值中 + * date:必须是 `date` 类型 + * url:必须是 `url` 类型 + * hex:必须是 `16` 进制类型 + * email:必须是 `email` 类型 + * any:任意类型 + +* `required`\ + 布尔值,是否必填,配置此参数不会显示输入框左边的必填星号,如需要,请配置`u-form-item`的`required`为`true` + +* `pattern`\ + 要求此参数值为一个正则表达式,如: /\d+/,**不能**带引号,如:"/\d+/",组件会对字段进行正则判断,返回结果。 + +* `min`\ + 最小值,如果字段类型为字符串和数组,会取字符串长度与数组长度(length)与`min`比较,如果字段是数值,则直接与`min`比较。 + +* `max`\ + 最大值,规则同`min`参数 + +* `len`\ + 指定长度,规则同`min`,优先级高于`min`和`max` + +* `enum`{Array} + 指定的值,配合 type: 'enum' 使用 + +* `whitespace`{Boolean}\ + 如果字段值内容都为空格,默认无法通过`required: true`校验,如果要允许通过,需要将此参数设置为`true` + +* `transform`{Function},校验前对值进行转换,函数的参数为当前值,返回值为改变后的值,参数如如下: + * `value`:当前校验字段的值 + +* `message`\ + 校验不通过时的提示信息 + +* `validator`{Function}:自定义**同步**校验函数,参数如下: + * `rule`:当前校验字段在 rules 中所对应的校验规则 + * `value`:当前校验字段的值 + * `callback`:校验完成时的回调,一般无需执行callback,返回`true`(校验通过)或者`false`(校验失败)即可 + +* `asyncValidator`{Function}:自定义**异步**校验函数,参数如下: + * `rule`:当前校验字段在 rules 中所对应的校验规则 + * `value`:当前校验字段的值 + * `callback`:校验完成时的回调,执行完异步操作(比如向后端请求数据验证),如果不通过,需要callback(new Error('提示错误信息')),如果校验通过,执行callback()即可 + +### uView Pro自带验证规则 + +uView在JS板块的[Test 规则校验](/zh/tools/test.html)中有大量内置的验证规则,这些规则对表单验证来说,属于**自定义规则**,故需要用到上方规则属性的 +`validator`自定义验证函数,这里做一个详细说明。 + +我们知道uView有自带的判断手机号的验证方法`uni.$u.test.mobile(value)`,但是[async-validator](https://github.com/yiminghe/async-validator)没有 +内置判断手机号的规则,所以将二者结合使用: + +```ts +const rules = { + // 字段名称 + mobile: [ + { + required: true, + message: '请输入手机号', + trigger: ['change', 'blur'] + }, + { + // 自定义验证函数,见上说明 + validator: (rule: any, value: string, callback: Function) => { + // uni.$u.test.mobile()就是返回true或者false的 + return uni.$u.test.mobile(value); + }, + message: '手机号码不正确', + trigger: ['change', 'blur'] + } + ] +}; +``` + +### 综合实战 + +上面讲述了[async-validator](https://github.com/yiminghe/async-validator)的规则和配置,以及uView内置规则的结合使用,下面我们进行一个综合 +实战示例,要入对某一个字段进行如下验证(验证实现有多种方法,下方仅为引导示例,非唯一,或最优做法): + +1. 必填,同时可接受`change`和`blur`触发校验:配置`required`参数为`true`,同时配置`trigger`为`[change, bulr]` +2. 必须为字母或字符串,校验前先将字段值转为字符串类型:通过`pattern`参数配置正则:/^\[0-9a-zA-Z]\*$/g,通过`transform`参数在校验前对字段值转换为字符串 +3. 长度6-8个字符之间:通过 配置`min`为6,`max`为8 +4. 需要包含字母"A":使用uView的`uni.$u.test.contains()`方法,并结合`validator`自定义函数实现 +5. 异步校验,输入完账号,输入框失去焦点时,向后端请求该账号是否已存在:通过上方的`asyncValidator`异步函数进行验证。 + +综上,我们可以得出如下的一个配置规则(仅为综合演示,非最优做法): + +```ts +const rules = { + name: [ + // 必填规则 + { + required: true, + message: '此为必填字段', + // blur和change事件触发检验 + trigger: ['blur', 'change'] + }, + // 正则判断为字母或数字 + { + pattern: /^[0-9a-zA-Z]*$/g, + // 正则检验前先将值转为字符串 + transform(value: any) { + return String(value); + }, + message: '只能包含字母或数字' + }, + // 6-8个字符之间的判断 + { + min: 6, + max: 8, + message: '长度在6-8个字符之间' + }, + // 自定义规则判断是否包含字母"A" + { + validator: (rule: any, value: string, callback: Function) => { + return uni.$u.test.contains(value, "A"); + }, + message: '必须包含字母"A"' + }, + // 校验用户是否已存在 + { + asyncValidator: (rule: any, value: string, callback: Function) => { + uni.$u.post('/xxx/xxx', { name: value }).then((res: any) => { + // 如果验证不通过,需要在callback()抛出new Error('错误提示信息') + if (res.error) { + callback(new Error('姓名重复')); + } else { + // 如果校验通过,也要执行callback()回调 + callback(); + } + }); + } + // 如果是异步校验,无需写message属性,错误的信息通过Error抛出即可 + // message: 'xxx' + } + ] +}; +``` + +### 校验错误提示方式 + +uView提供了多种校验的错误提示方式,这些值需要包含在数组(可以填写多个值,同时进行多种提示)中,传递给`Form`组件的`error-type`参数: + +* `message`:默认为输入框下方用文字进行提示 +* `none`:只要包含此值,将不会进行任何提示 +* `border-bottom`:配置作用域底部的下划线显示为红色 +* `border`:配置输入框的边框为红色进行提示 -- 如果有配置显示`Input`组件显示边框的话 +* `toast`:以"toast"提示的方式弹出错误信息,每次只弹出最前面的那个表单域的错误信息 + +```vue + + + +``` + +### 校验 + +进行了上方的配置和讲解后,进入到最后一步,执行验证:\ +需要通过`ref`调用`Form`组件的`validate`方法,该方法回调函数的参数为一个布尔值,`true`为校验通过,否则反之。 + +```vue + + + +``` + +## API + +## Form Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | 版本 | +|------------- |---------------- |---------------|------------------ |-------- | - | +| model | 表单数据对象 | Object | - | - | - | +| rules | 通过`ref`设置,见上方说明 | Object | - | - | - | +| error-type | 错误的提示方式,数组形式,见上方说明 | Array | \['message', 'toast'] | - | - | +| border-bottom | 是否显示表单域的下划线边框 | Boolean | true | - | - | +| label-position | 表单域提示文字的位置,`left`-左侧,`top`-上方 | String | left | top | - | +| label-width | 提示文字的宽度,单位rpx | String | Number | 90 | 数值 / auto | - | +| label-style | `lable`的样式,对象形式 | Object | - | - | - | +| label-align | `lable`的对齐方式 | String | left | center / right | - | +| size | 组件尺寸,影响内部组件的尺寸 | String | default | small / large | | + +## Form Methods + +此方法如要通过ref手动调用 + +| 名称 | 说明 | 参数 | +|------------- |---------------- | ---------------- |\ +| setRules | 调用此方法,设置校验规则 | Function(rules) | +| resetFields | 对整个表单进行重置,将所有字段值重置为初始值并移除校验结果 | - | +| validate | 对整个表单进行校验的方法,第一个参数为boolean,表示校验结果,第二个参数为数组,包含所有错误信息支持第二个参数 | Function(callback: Function(boolean, array)) | + +## Form-item Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | 版本 | +|------------- |---------------- |---------------|------------------ |-------- |-------- | +| label | 左侧提示文字 | String | - | - | - | +| prop | 表单域`model`对象的属性名,在使用 validate、resetFields 方法的情况下,该属性是必填的 | String | - | - | - | +| border-bottom | 是否显示下边框,如不需要下边框,需同时将`u-form`的同名参数设置为`false` | Boolean | true | true / false | - | +| label-position | 表单域提示文字的位置,`left`-左侧,`top`-上方,如设置,将覆盖`u-form`的同名参数 | String | - | left / top | - | +| label-width | 提示文字的宽度,单位rpx,如设置,将覆盖`u-form`的同名参数| String | Number | - | - | - | +| label-style | `lable`的样式,对象形式,如设置,将覆盖`u-form`的同名参数 | Object | - | - | - | +| label-align | `lable`的对齐方式,如设置,将覆盖`u-form`的同名参数 | String | - | - | - | +| right-icon | 右侧自定义字体图标(限uView内置图标)或图片地址 | String | - | - | +| left-icon | 左侧自定义字体图标(限uView内置图标)或图片地址 | String | - | - | +| left-icon-style | 左侧图标的样式,对象形式 | Object | - | - | - | +| right-icon-style | 右侧图标的样式,对象形式 | Object | - | - | - | +| required | 是否显示左边的"\*"号,这里仅起展示作用,如需校验必填,请通过`rules`配置必填规则 | Boolean | false | true | - | +| left-icon-prefix | 自定义左侧图标的前缀,相当于u-icon组件的custom-prefix | String | - | - | | +| right-icon-prefix | 自定义右侧图标的前缀,相当于u-icon组件的custom-prefix | String | - | - | | +| size | 组件尺寸,影响内部组件的尺寸 | String | default | small / large | | + +## Form-item Slot + +|名称|说明|版本| +|:-|:-|:-| +| default | Form Item 的内容 | - | +| right | 右侧自定义内容,可以在此传入一个按钮,用于获取验证码等场景 | - | +| label | 左侧标题自定义内容 | | +| leftIcon | 左侧图标自定义内容 | | +| rightIcon | 右侧图标自定义内容 | | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/fullScreen.md' +--- +# fullScreen 压窗屏 + +所谓压窗屏,是指遮罩能盖住原生导航栏和底部tabbar栏的弹窗,一般用于在APP端弹出升级应用弹框,或者其他需要增强型弹窗的场景。 + +:::danger 警告 +由于uni-app的Bug,在最新版的HX2.8.6(包括之前的多个版本),此功能(组件)无效,等到uni-app修复此Bug时,我们会撤销此通告。 +::: + +:::tip 提示 +这里的做法是在本页面打开一个新页面,同时在`pages.json`中配置本页面的背景为百分百透明,这样即可达到压窗效果。\ +由于只有APP支持设置页面背景透明度,故只有APP支持本组件做法,非APP端不支持。 +::: + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|x|x|x|x|x|x| + +## 基本使用 + +本组件只是提供参考思路和注意事项,因为每个人在弹窗需要实现的逻辑和样式都是不一样的,请参考本文档思路,自行实行相关功能。 + +首先,我们需要`pages.json`中声明一个页面用于弹窗: + +```js +// pages.json + +"pages": [ + { + "path": "uview-pro/components/u-full-screen/u-full-screen", + "style": { + "navigationStyle": "custom", // 取消本页面的导航栏 + "app-plus": { + "animationType": "fade-in", // 设置fade-in淡入动画,为最合理的动画类型 + "background": "transparent", // 背景透明 + "backgroundColor": "rgba(0,0,0,0)", // 背景透明 + "popGesture": "none" // 关闭IOS屏幕左边滑动关闭当前页面的功能 + } + } + } +] +``` + +通过上面的配置,我们得到了一个页面: + +* 这个页面去掉了导航栏 +* 页面进入的时候,是采用淡入动画的形式 +* 并且此页面的背景是百分比透明度,这样可以看到底层页面的内容 +* 移除在iOS上左滑手势,避免本页被左滑关闭 + +## 触发压窗屏 + +我们在父页面(当前页面)通过路由方法,打开一个新页面(上面配置的压窗屏页面),由于它是一个普通的页面,故可以通过常规方法传递参数。 + +```js + +``` + +## 定义压窗屏内容 + +当我们触发(打开)了压窗屏页面之后,将会有一个新的,背景透明的页面覆盖在本页面上,由于我们的终极目标就是要做一个弹窗,让其遮罩盖住"父页面"的导航栏和 +Tabbar栏,所以这里我们可以使用uView的[Popup 弹出层](/zh/components/popup.html)组件,并且将`popup`组件的`mode`参数设置`center`,即中部弹出的形式。 + +下方示例为打开一个[Modal 模态框](/zh/components/modal.html)组件的示例,此组件内部用的也是`popup`组件。 + +```html + + + + + +``` + +上面有一个需要注意的点,我们打开"压窗"弹窗后,可能需要通过一些按钮来关闭弹窗,这里关闭弹窗的本质意义是关闭弹出的页面(压窗屏弹框),所以用的是uni-app带的 +关闭页面的接口`uni.navigateBack()`,见上方示例。 + +## 注意事项 + +由于压窗屏其实也是一个普通的页面的,当我们关闭弹窗(顶层页面),"父页面"(上一个页面)就会显示出来,意味着会进入`onShow`生命周期,如有相关特定逻辑需要 +处理,可关注此处。 + +由于弹窗打开的实际是一个页面,而不是一个组件,所以我们无法通过`props`的形式传递参数,有如下方式可以行进两个页面之间的通信: + +* 父页面通过URL参数的形式将参数传递给弹窗 +* 当弹窗内进行某些操作之后,可以通过`uni.$emit`的方式发送事件,父页面中通过`uni.$on`的形式接收事件和参数,达到通信的效果 +* 通过Vuex的形式共享变量 + +--- + +--- +url: 'https://uviewpro.cn/zh/components/gap.md' +--- +# Gap 间隔槽 + +该组件一般用于内容块之间的用一个灰色块隔开的场景,方便用户风格统一,减少工作量 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +直接引入即可使用 + +* 通过`height`配置高度,单位rpx +* 通过`bg-color`配置背景颜色 + +```html + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| bg-color | 背景颜色 | String | transparent(背景透明) | - | +| height | 间隔槽高度,单位rpx | String | Number | 30 | - | +| margin-top | 与前一个元素的距离,单位rpx | String | Number | 0 | - | +| margin-bottom | 与后一个元素的距离,单位rpx | String | Number | 0 | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/tools/getRect.md' +--- +# getRect 节点布局信息 + +此方法封装自uni的[nodesRef.boundingClientRect](https://uniapp.dcloud.io/api/ui/nodes-info?id=nodesrefboundingclientrect),它极大简化了 +使用复杂度,内部使用`Promise`,可以让用户同步获取节点信息。 + +### getRect(selector, instance, all) + +* `selector` \ 此参数为元素节点,可以是`id`或者`class`,比如"#user-name",".box" +* `instance` \ 此参数为组件实例,通过 `getCurrentInstance()` 获得 +* `all` \ 是否返回全部节点信息,当页面有多个相同`selector`的元素时,`all`为`true`,会以数组形式返回所有节点的信息(结果为数组,数组元素为对象),否则只返回第一个节点的信息(结果为一个对象) + +注意:该方法返回的结果,共有如下有用信息: + +```js +res = { + left: 0, + right: 414, + top: 323, + height: 2597, + bottom: 2920, + width: 414 +} +``` + +受限于`nodesRef.boundingClientRect`,其上结果中的`left`,`top`,`right`,`bottom`,是会随着页面滚动而变化的,因为这个查询的相对于屏幕窗口,而不是 +相对于页面根元素的,但`width`,`height`,是恒定不变的,所以一般情况我们推荐您想要获取节点宽高的时候采用这个方法。 + +:::warning 注意 +由于`onLoad`生命周期元素尚未创建完成,请勿在此生命周期使用此方法,如果是页面,应该在`onReady`生命周期,组件内应该在`mounted`生命周期调用。 +如果要查询的目标,是通过服务端获取数据后才渲染的,那么应该在获取数据后,通过`this.$nextTick`调用此方法。 +::: + +### 异步使用方法 + +通过`then`调用即可 + +```js +const instance = getCurrentInstance() + +getElInfo() { + uni.$u.getRect('.user-avatar', instance).then(res => { + console.log(res); + }) +} + +``` + +### 同步使用方法 + +该方法的使用场景为您下一步的操作需要获取元素的节点后才能进行的情况,可以通过`async/await`方式调用,注意,无论是生命周期还是`methods`中的方法,都可以在 +其前面添加`async`修饰符 + +```js +const instance = getCurrentInstance() + +async getElInfo() { + let rectInfo = await uni.$u.getRect('.user-avatar', instance); + console.log(rectInfo); +} +``` + +### 请求数据后再获取节点信息 + +此场景为元素内容为后端获取数据填充的,节点填充数据前后,元素的大小尺寸是不一样的,所以需要在获取后再执行此方法,这里通过`this.$nextTick`调用, +是因为它会等待数据赋值,元素创建完成后再执行,此时才是准确的尺寸,以下演示,为uView Pro自带的[http 请求](/zh/tools/http.html)方法调用 + +```html + + + +``` + +### 获取全部节点信息 + +设置第二个参数为`true`,此场景为页面有多个相同类名的元素,需要获取所有同类名节点信息时候使用,返回结果为一个数组 + +```html + + + +``` + +### 如何让让某个元素滚动到页面顶部 + +这里说的顶部,指的是导航栏的下方,比如我们点击某个操作,页面自动滚动,指定元素位于导航栏下方时停止。\ +我们需要结合`onPageScroll`生命周期,获得实时的页面滚动条位置。 + +```html + + + + + +``` + +--- + +--- +url: 'https://uviewpro.cn/zh/components/grid.md' +--- +# Grid 宫格布局 + +宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件([badge](/zh/components/badge.html)),或者图标等,也可以扩展为左右滑动的轮播形式。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 该组件外层为`u-grid`组件包裹,通过`col`设置内部宫格的列数 +* 内部通过`ugrid-item`组件的`slot`设置宫格的内容 +* 如果不需要宫格的边框,可以设置`border`为`false` + +```html + + + +``` + +## 给宫格设置右上角的角标和图标 + +可以通过uView的`badge`(注意Badge在此需要设置相关定位属性,详见[Badge](/zh/components/badge.html))或者`image`设置宫格有右上角的内容 + +```html + + + +``` + +## 实现宫格的左右滑动 + +结合uni的swiper组件可以实现宫格的左右滑动,因为`swiper`特性的关系,请指定`swiper`的高度 ,否则`swiper`的高度不会被内容撑开,可以自定义`swiper`的指示器,达到更高的灵活度 + +```html + + + + + +``` + +## API + +### Props Grid + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| col | 宫格的列数 | String | Number | 3 | - | +| border | 是否显示宫格的边框 | Boolean | true | false | +| align | 宫格的对齐方式,用于控制只有一两个宫格时的对齐场景 | String | left | center / right | +| hover-class | 样式类名,按下时有效,样式必须写在根目录的`App.vue`或通过其引入的全局样式中才有效,`none`为无效果,作用于头部标题区域 | String | u-hover-class | none / 其他 | + +### Props GridItem + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| bg-color | 宫格的背景颜色 | String | #ffffff | - | +| index | 点击宫格时,返回的值 | String | Number | - | - | + +### Events Grid + +注意:请在``上监听此事件 + +|事件名|说明|回调参数| +|:-|:-|:-| +|click|点击宫格触发|index: `u-grid-item`通过`props`传递的`index`值| + +### Events GridItem + +注意:请在``上监听此事件 + +|事件名|说明|回调参数| +|:-|:-|:-| +|click|点击宫格触发|index: `u-grid-item`通过`props`传递的`index`值| + +--- + +--- +url: 'https://uviewpro.cn/zh/tools/guid.md' +--- +# guid 全局唯一标识符 + +## 唯一标识符 + +### guid(length = 32, firstU = true, radix = 62) + +该函数可以生产一个全局唯一、随机的guid,默认首字母为`u`,可以用于当做元素的id或者class名等需要唯一,随机字符串的地方,因为id或者class不能以数字开头。 + +* `length` \ guid的长度,默认为`32`,如果取值`null`,则按`rfc4122标准`生成对应格式的随机数 +* `firstU` \ 首字母是否为"u",如果首字母为数字情况下,不能用作元素的`id`或者`class`,默认为`true` +* `radix` \ 生成的基数,默认为`62`,用于生成随机数字符串为"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", + 如果取2,那么返回的结果就是前两位0和1(可以理解为二进制)的随机结果,如果为7,返回的字符串就是0-7(理解为八进制)之间, + 10为十进制,以此类推。 + +**说明**:这个方法三个参数都有默认的值,所以您调用的时候,可以无需传递任何参数也是可以的,并且**建议您这样做**。 + +```html + + + +``` + +--- + +--- +url: 'https://uviewpro.cn/zh/ext/guidePage.md' +--- + +# Guide Page 引导页组件 + +该组件基于 uni-app x 开发的的 Guide Page 引导页组件,用于应用首次启动时的新手引导场景,支持全屏引导页、新功能引导、步骤引导,支持多页滑动展示、卡片动画、高度自定义样式,支持 App、H5、微信小程序全平台。 + +## 平台差异说明 + +仅支持 uni-app x 项目 + +|App|H5|微信小程序| +|:-:|:-:|:-:| +|√|√|√| + +## 安装方式 + +只能通过 uni-app x 官方插件市场安装:[**立即去安装**](https://ext.dcloud.net.cn/plugin?name=ux-guide-page) + +## 预览效果 + +## 基本使用 + +首先,引导页需要全屏展示,所以 pages.json 中添加 `"navigationStyle": "custom"` 配置: + +```json +{ + "pages": [ + { + "path": "pages/demo/index", + "style": { + "navigationBarTitleText": "uView Pro X 演示", + "navigationStyle": "custom" + } + } + ] +} +``` + +* 通过 `v-model:show` 控制引导页的显示与隐藏 +* 通过 `slides` 传入引导页数据,支持多页配置 +* 通过 `storage-key` 设置本地存储键名,自动记录用户是否已查看过引导页 + +```html + + + +``` + +## 多卡片布局 + +每个页面支持配置多个卡片,卡片可以设置不同的位置(左上、右上、居中、左下、右下)。 + +```html + + + +``` + +## 自定义卡片内容 + +可以单独自定义卡片的图标和内容部分: + +```html + +``` + +## 自定义样式 + +组件提供了丰富的 slot,可以完全自定义引导页的各个部分: + +```html + +``` + +## 双向绑定(v-model:show) + +组件支持 `v-model:show` 双向绑定,可以更方便地控制引导页的显示状态。 + +```html + + + +``` + +## 控制显示元素 + +通过 props 可以控制引导页各部分的显示与隐藏: + +```html + +``` + +## 监听事件 + +组件提供了丰富的事件回调: + +```html + + + +``` + +## 禁用滑动切换 + +如果不希望用户通过滑动切换页面,可以禁用滑动功能: + +```html + +``` + +## 手动控制页面跳转 + +可以通过 `ref` 获取组件实例,手动控制页面跳转: + +```html + + + +``` + +## 平台适配注意事项 + +### App 端 linear-gradient 限制 + +App 端 `linear-gradient` 需要三个色值才能生效: + +```scss +/* ✅ 正确 */ +.custom-bg { + background: linear-gradient(180deg, #667eea 0%, #764ba2 50%, #764ba2 100%); +} + +/* ❌ 错误 - 两个色值在 App 端不生效 */ +.custom-bg { + background: linear-gradient(180deg, #667eea 0%, #764ba2 100%); +} +``` + +### App 端动画实现 + +App 端不支持 `@keyframes`,请使用 `transition`: + +```scss +/* ✅ 正确 - 使用 transition */ +.card { + opacity: 0; + transform: translateY(30rpx); + transition: all 0.4s ease; +} + +.card-visible { + opacity: 1; + transform: translateY(0); +} + +/* ❌ 错误 - App 端不支持 */ +@keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } +} +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | 版本 | +|------|------|------|--------|--------|------| +| show | 是否显示引导页(支持 v-model:show) | Boolean | false | true/false | - | +| storageKey | 本地存储键名,用于记录用户是否已查看引导 | String | - | - | - | +| slides | 引导页数据数组 | Array | \[] | - | - | +| enableSwipe | 是否允许滑动切换页面 | Boolean | true | true/false | - | +| showDots | 是否显示页面指示器 | Boolean | true | true/false | - | +| showSkip | 是否显示跳过按钮 | Boolean | true | true/false | - | +| showHeader | 是否显示头部区域 | Boolean | true | true/false | - | +| showActions | 是否显示底部操作按钮 | Boolean | true | true/false | - | + +### Slides 数据结构 + +```typescript +type OnboardingCard = { + icon: string; // 卡片图标(可以是 emoji 或图片 URL) + title: string; // 卡片标题 + desc: string; // 卡片描述 + position: 'top-left' | 'top-right' | 'center' | 'bottom-left' | 'bottom-right'; + features?: string[]; // 特性列表(可选) + delay?: number; // 动画延迟时间(毫秒,可选) +} + +type OnboardingSlide = { + cards: OnboardingCard[]; // 该页面的卡片数组 +} +``` + +### Methods + +| 名称 | 说明 | 参数 | 版本 | +|------|------|------|------| +| goToSlide | 跳转到指定页面 | (index: number) | - | +| handleNext | 切换到下一页 | - | - | +| handlePrev | 切换到上一页 | - | - | +| handleComplete | 完成引导 | - | - | + +### Slots + +| 名称 | 说明 | 作用域参数 | 版本 | +|------|------|-----------|------| +| background | 自定义背景 | - | - | +| skip | 自定义跳过按钮 | { onSkip } | - | +| header | 自定义头部 | { current, total } | - | +| slide | 自定义页面内容 | { slide, index, isActive } | - | +| card-icon | 自定义卡片图标 | { card, index, cIndex } | - | +| card-content | 自定义卡片内容 | { card, index, cIndex } | - | +| dots | 自定义页面指示器 | { current, total } | - | +| actions | 自定义操作按钮 | { current, total, isFirst, isLast, onPrev, onNext, onComplete } | - | + +### Events + +| 事件名 | 说明 | 回调参数 | 版本 | +|--------|------|----------|------| +| change | 页面切换时触发 | (index: number) | - | +| complete | 点击完成按钮时触发 | - | - | +| skip | 点击跳过按钮时触发 | - | - | +| update:show | v-model:show 双向绑定事件 | (show: boolean) | - | + +## 完整示例代码 + +```html + + + + + +``` + +--- + +--- +url: 'https://uviewpro.cn/zh/components/icon.md' +--- +# Icon 图标 + +基于字体的图标集,包含了大多数常见场景的图标。 + +## 平台差异说明 + +| App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ 小程序 | +| :-: | :-: | :--------: | :----------: | :--------: | :--------: | :-------: | +| √ | √ | √ | √ | √ | √ | √ | + +## 基本使用 + +:::tip 提示 +如果您觉得内置的图标数量不够,或者不合符您的需求,别担心,我们还精心为您准备了一份简单易用的扩展自定义图标库教程:[扩展自定义图标库](https://uviewpro.cn/zh/guide/customIcon.html) +::: + +通过``形式来调用,设置`name`参数为图标名即可 + +```html + +``` + +## 修改图标的样式 + +* 通过`color`参数修改图标的颜色 +* 通过`size`参数修改图标的大小,单位为 rpx + +```html + +``` + +## 图片图标 + +这里说的图片图标,指的是小图标,起作用定位为"icon"图标作用,而非大尺寸的图片展示场景,理论上,这个小图标应该为`png`格式的正方形图标。 + +上面说到,给组件的`name`参数传入一个图片的名称即可显示字体图标,这些名称中不能带有`/`斜杠符号,否则会被认为是传入了图片图标,同时,`size`参数 +也被设置为这个图片图标的宽度,由于是图片,诸如颜色`color`等参数都会失效。 + +```html + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|---|---|---|---|---| +| name | 图标名称,见示例图标集,如名称带有`/`,会被认为是图片图标 | String | - | - | +| color | 图标颜色 | String | inherit | - | +| size | 图标字体大小,单位 rpx | String|Number | inherit | - | +| index | 一个用于区分多个图标的值,点击图标时通过`click`事件传出 | String | - | - | +| hover-class | 图标按下去的样式类,用法同 uni 的`view`组件的`hover-class`参数,详见:[hover-class](https://uniapp.dcloud.io/component/view) | String | - | - | +| label | 图标右侧/下方的 label 文字 | String | - | - | +| label-size | `label`字体大小,单位 rpx | String|Number | 28 | - | +| label-color | `label`字体颜色 | String | #606266 | - | +| custom-prefix | 自定义字体图标库时,需要写上此值,详见:[扩展自定义图标库](https://uviewpro.cn/zh/guide/customIcon.html) | String | uicon | - | +| space | `label`在四周时与图标的距离,权重高于 margin,单位 rpx | String|Number | - | - | +| margin-left | `label`在右方时与图标的距离,单位 rpx | String|Number | 6 | - | +| margin-top | `label`在下方时与图标的距离,单位 rpx | String|Number | 6 | - | +| margin-bottom | `label`在上方时与图标的距离,单位 rpx | String|Number | 6 | - | +| margin-right | `label`在左侧时与图标的距离,单位 rpx | String|Number | 6 | - | +| label-pos | `label`相对于图标的位置 | String | right | bottom/top/left | +| width | `name`为图片路径时图片的宽度,单位任意,数值默认为 rpx 单位 | String|Number | - | - | +| height | `name`为图片路径时图片的高度,单位任意,数值默认为 rpx 单位 | String|Number | - | - | +| top | 如果某些场景,如果图标没有垂直居中,可以调整此参数,单位任意,数值默认为 rpx 单位 | String|Number | 0 | - | +| show-decimal-icon | 是否为 DecimalIcon | Boolean | false | true | +| inactive-color | 背景颜色,可接受主题色,仅 Decimal 时有效 | String | #ececec | - | +| percent | 显示的百分比,仅 Decimal 时有效 | String|Number | 50 | - | + +### Events + +| 事件名 | 说明 | 回调参数 | 版本 | +| :----- | :------------- | :-------------------------------- | :--- | +| click | 点击图标时触发 | index: 通过`props`传递的`index`值 | - | + +## 图标集 + +--- + +--- +url: 'https://uviewpro.cn/zh/components/image.md' +--- +# Image 图片 + +此组件为 uni-app 的`image`组件的加强版,在继承了原有功能外,还支持淡入动画、加载中、加载失败提示、圆角值和形状等。\ +**我们推荐您在任何使用图片场景的地方,都优先考虑使用这个小巧,精致而实用的组件。** + +## 平台差异说明 + +| App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ 小程序 | +| :-: | :-: | :--------: | :----------: | :--------: | :--------: | :-------: | +| √ | √ | √ | √ | √ | √ | √ | + +## 基本使用 + +配置图片的`width`宽和`height`高,以及`src`路径即可使用。 + +```html + + + +``` + +## 填充模式 + +通过`mode`参数配置填充模式,此模式用法与 uni-app 的`image`组件的`mode`参数完全一致,详见:[Image](https://uniapp.dcloud.io/component/image) + +```html + +``` + +## mode 有效值 + +mode 有 14 种模式,其中 5 种是缩放模式,9 种是裁剪模式。 + +| 模式 | 值 | 说明 | +| ----- | ------------ | --------------------------------------------------------------------------- | +| 缩放 | scaleToFill | 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素 | +| 缩放 | aspectFit | 保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。 | +| 缩放 | aspectFill | 保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。 | +| 缩放 | widthFix | 宽度不变,高度自动变化,保持原图宽高比不变 | +| 缩放 | heightFix | 高度不变,宽度自动变化,保持原图宽高比不变 **App 和 H5 平台 HBuilderX 2.9.3+ 支持、微信小程序需要基础库 2.10.3** | +| 裁剪 | top | 不缩放图片,只显示图片的顶部区域 | +| 裁剪 | bottom | 不缩放图片,只显示图片的底部区域 | +| 裁剪 | center | 不缩放图片,只显示图片的中间区域 | +| 裁剪 | left | 不缩放图片,只显示图片的左边区域 | +| 裁剪 | right | 不缩放图片,只显示图片的右边区域 | +| 裁剪 | top left | 不缩放图片,只显示图片的左上边区域 | +| 裁剪 | top right | 不缩放图片,只显示图片的右上边区域 | +| 裁剪 | bottom left | 不缩放图片,只显示图片的左下边区域 | +| 裁剪 | bottom right | 不缩放图片,只显示图片的右下边区域| + +## 图片形状 + +* 通过`shape`参数设置图片的形状,`circle`为圆形,`square`为方形 +* 如果为方形时,还可以通过`border-radius`参数设置圆角值 + +```html + +``` + +## 懒加载 + +注意:此功能只对微信小程序、App、百度小程序、字节跳动小程序有效,默认开启。 + +```html + +``` + +## 加载中提示 + +图片加载过程中,为加载中状态(默认显示一个小图标),可以通过`loading`自定义插槽,结合 uView 的`u-loading`组件,实现加载的动画效果。 + +```html + + + +``` + +## 加载错误提示 + +图片加载失败时,默认显示一个错误提示图标,可以通过`error`自定义插槽,实现个性化的提示方式。 + +```html + + + +``` + +## 淡入动画 + +组件自带了加载完成时的淡入动画效果: + +* 通过`fade`参数配置是否开启动画效果 +* 通过`duration`参数配置动画的过渡时间,单位 ms + +```html + +``` + +## 事件冒泡 + +默认情况下,组件是允许内部向外事件冒泡的,因为很多情况下,我们都希望点击图片,同时图片所在的父元素的点击事件也能触发。\ +如果您想避免事件冒泡,那么您可以在组件外面嵌套一个`view`,同时给它加上`@tap.stop`即可。 + +```html + + + + + + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +| ------------------------------- | ------------------------------------------------------------- | ---------------- | ------------ | ------ | +| src | 图片地址,**强烈建议**使用绝对或者网络路径 | String | - | - | +| mode | 裁剪模式,见上方说明 | String | aspectFill | - | +| width | 宽度,单位任意,如果为数值,则为 rpx 单位 | String | Number | 100% | - | +| height | 高度,单位任意,如果为数值,则为 rpx 单位 | String | Number | auto | - | +| shape | 图片形状,circle-圆形,square-方形 | String | square | circle | +| border-radius | 圆角值,单位任意,如果为数值,则为 rpx 单位 | String | Number | 0 | - | +| lazy-load | 是否懒加载,仅微信小程序、App、百度小程序、字节跳动小程序有效 | Boolean | true | - | +| show-menu-by-longpress | 是否开启长按图片显示识别小程序码菜单,仅微信小程序有效 | Boolean | true | - | +| loading-icon | 加载中的图标,或者小图片 | String | photo | - | +| error-icon | 加载失败的图标,或者小图片 | String | error-circle | - | +| show-loading | 是否显示加载中的图标或者自定义的 slot | Boolean | true | false | +| show-error | 是否显示加载错误的图标或者自定义的 slot | Boolean | true | false | +| fade | 是否需要淡入效果 | Boolean | true | false | +| webp | 只支持网络资源,只对微信小程序有效 | Boolean | false | true | +| duration | 搭配`fade`参数的过渡时间,单位 ms | String | Number | 500 | - | +| bg-color | 背景颜色 | String | #f3f4f6 | - | + +### Slots + +| 名称 | 说明 | +| :------ | :--------------------- | +| loading | 自定义加载中的提示内容 | +| error | 自定义失败的提示内容 | + +## CellItem Events + +| 事件名 | 说明 | 回调参数 | +| :----- | :----------------- | :------------ | +| click | 点击图片时触发 | - | +| error | 图片加载失败时触发 | err: 错误信息 | +| load | 图片加载成功时触发 | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/indexList.md' +--- +# IndexList 索引列表 + +通过折叠面板收纳内容区域 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +外层包裹一个`index-list`组件,内部锚点通过`index-anchor`组件传入,其余内容可以自定义 + +* 可以通过`index-list`参数自定义索引字符列表 +* 需要监听页面的onPageScroll事件,将当前滚动条高度传入`index-list`组件 + +```html + + + + + +``` + +## 自定义锚点样式 + +`index-anchor`锚点组件默认显示`index`参数的值,可以通过设置`use-slot`为`true`,传入自定义内容,同时设定 +自己的样式 + +```html + + + +``` + +## 自定义导航栏 + +默认情况下,组件的锚点是吸附在导航栏下方的,如果您修改了导航栏,比如取消导航栏、或者自定义了导航栏,就需要指定吸顶的高度,也就是`offset-top` +的值,注意这个值的单位为`rpx`: + +* 如果取消导航栏,需要将`offset-top`为`0` +* 如果自定义了导航栏,需要`offset-top`设置为导航栏的高度 + +## API + +### Props IndexBar + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| scroll-top | 当前滚动高度,自定义组件无法获得滚动条事件,所以依赖接入方传入 | Number | String | - | - | +| index-list | 索引字符列表,数组 | Array\[string | number] | A-Z | - | +| z-index | 锚点吸顶时的层级 | Number | String | 965 | - | +| sticky | 是否开启锚点自动吸顶 | Boolean | true | false | +| offset-top | 锚点自动吸顶时与顶部的距离,单位rpx,见上方"自定义导航栏"说明 | Number | String | 0 | - | +| active-color | 锚点和右边索引字符高亮颜色 | String | #2979ff | - | + +### Props IndexAnchor + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| use-slot | 是否使用自定义内容的插槽 | Boolean | false | true | +| index | 索引字符,如果定义了`use-slot`,此参数自动失效 | String | Number | - | - | + +### Events IndexBar + +|事件名|说明|回调参数|版本| +|:-|:-|:-|:-| +| select | 选中右边索引字符时触发 | index: 索引字符 | - | + +### Slots IndexAnchor + +| 名称 | 说明 | +|:-|:-| +| default | 锚点位置显示内容,默认为索引字符 | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/input.md' +--- +# Input 输入框 + +此组件为一个输入框,默认没有边框和样式,是专门为配合表单组件[u-form](/zh/components/form.html)而设计的,利用它可以快速实现表单验证,输入内容,下拉选择等功能。 + +::: tip 提示 +v0.3.7 已新增 Textarea 文本域组件,用于长文本输入,详见:[Textarea 文本域](/zh/components/textarea.html)。 +::: + +**注意:** 当您仅是需要一个输入框的话,可以考虑使用[u-field](/zh/components/field.html)组件,而如果是一个表单组,比如有多个输入框一起,且需要验证功能的时候, +应该在`u-form`中嵌套`u-form-item`,再嵌套`u-input`去实现。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 通过`v-model`绑定输入框的值 +* 通过`type`设置输入框的类型 +* 通过`border`配置是否显示输入框的边框 + +```html + + + +``` + +## 输入框的类型 + +综述:此组件通过配置`type`参数有两种形态: + +1. 一是长文本内容输入的`textarea`类型。 +2. 二是类似普通输入框的`text`类型,在普通输入框时,由于HTML5或者小程序等一些特殊场景,此 `type`参数又可以设置为`text`、`number`、`idcard`、`digit`等值, + 这些参数跟各个平台的兼容性有关,详见uni-app文档:[Input 组件](https://uniapp.dcloud.io/component/input)。 + +### Textarea模式 + +此模式需要将`type`参数设置为`textarea`,有如下两个需要注意的参数: + +* `auto-height`参数可以配置为`textarea`输入框的高度是否随着行数增加,而自动增加输入框的高度。 +* `height`参数可以配置输入框的初始高度。 + +```html + + + +``` + +### Text模式 + +将`type`设置为`text`,此种情况为一个单纯的输入框,但是还可以将其设置为`number`、`idcard`、`digit`等值,需要考虑兼容性,见上方说明。 + +```html + + + +``` + +### Password模式 + +`type`参数可以设置为`password`,此时输入内容将会用点替代: + +* 如果设置`password-icon`设置为`true`,右侧将会出现一个可以切换密码与普通字符的图标。 + +```html + + + +``` + +### Select下拉选择模式 + +如果将`type`设置为`select`,此时组件将会在外观上呈现出Select选择器的形态,主要体现在右侧多了一个下三角图标,但是此时组件并没有内置下拉的功能, +主要是考虑到移动端的特殊性和uView内置组件的关联性,因为想实现下拉选择,不同场景可能会使用不同的组件,比如uView的[Picker 选择器](/zh/components/picker.html)、 +[ActionSheet 操作菜单](/zh/components/actionSheet.html)、[Select 列选择器](/zh/components/select.html)等,您可以根据情况自由选择合适的组件做搭配。 + +* 以上说的可以配合的组件,它们都有一个共同的通过`v-model`绑定弹出与收起的参数,可以同时将此参数赋值给`Input`组件的`select-open`参数, + 当此参数为`true`(也即`Select`选择器打开时),右侧的下三角图标会翻转,为`false`时,恢复原位。 +* 监听组件的`@click`事件,在此将绑定选择器的参数修改为`true`即可。 + +```html + + + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | 版本 | +|------|------|------|--------|--------|------| +| type | 模式选择,见上方说明 | String | text | select / password / textarea / number | - | +| clearable | 是否显示右侧的清除图标,type = select时无效 | Boolean | true | false | - | +| v-model | 用于双向绑定输入框的值 | - | - | - | - | +| input-align | 输入框文字的对齐方式 | String | left | center / right | - | +| placeholder | placeholder显示值 | String | 请输入内容 | - | - | +| disabled | 是否禁用输入框 | Boolean | false | true | - | +| readonly | 是否只读 | Boolean | false | true | 0.6.4 | +| maxlength | 输入框的最大可输入长度 | Number | String | 140 | - | - | +| placeholder-style | placeholder的样式,字符串形式,如"color: red;" | String | "color: #c0c4cc;" | - | - | +| confirm-type | 设置键盘右下角按钮的文字,仅在`type`为`text`时生效 | String | done | - | - | +| focus | 是否自动获得焦点 | Boolean | false | true | - | +| fixed | 如果`type`为`textarea`,且在一个"position:fixed"的区域,需要指明为`true` | Boolean | false | true | - | +| password-icon | `type`为`password`时,是否显示右侧的密码查看图标 | Boolean | true | false | - | +| border | 是否显示边框 | Boolean | false | true | - | +| border-color | 输入框的边框颜色 | String | #dcdfe6 | - | - | +| auto-height | 是否自动增高输入区域,`type`为`textarea`时有效 | Boolean | true | false | - | +| height | 高度,单位rpx | Number | String | text类型时为70,textarea时为100 | - | - | +| count | type为textarea模式下显示计数 | Boolean | false | true | 0.3.7 | +| cursor-spacing | 指定光标与键盘的距离,单位**px** | Number | String | 0 | - | - | +| selection-start | 光标起始位置,自动聚焦时有效,需与selection-end搭配使用 | Number | String | -1 | - | - | +| selection-end | 光标结束位置,自动聚焦时有效,需与selection-start搭配使用 | Number | String | -1 | - | - | +| trim | 是否自动去除两端的空格 | Boolean | true | false | - | +| show-confirmbar | 是否显示键盘上方带有”完成“按钮那一栏 | Boolean | true | false | - | +| adjust-position | 弹出键盘时是否自动调节高度 | Boolean | true | false | - | +| confirm-hold | 点击键盘右下角完成按钮时,是否保持键盘不收起 | Boolean | false | true | 0.6.7 | + +### Events + +| 事件名 | 说明 | 回调参数 | 版本 | +|--------|------|---------|------| +| input | 输入内容变化时触发 | value: 当前输入框内容 | - | +| blur | 输入框失焦时触发 | value: 当前输入框内容 | - | +| focus | 输入框聚焦时触发 | value: 当前输入框内容 | - | +| confirm | 点击键盘右下角完成按钮时触发 | value: 当前输入框内容 | - | +| click | 点击输入框时触发 | - | - | +| clear | 点击清除按钮时触发 | - | 0.6.9 | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/keyboard.md' +--- +# Keyboard 键盘 + +此为uView自定义的键盘面板,内含了数字键盘,车牌号键,身份证号键盘3种模式,都有可以打乱按键顺序的选项。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +通过`mode`参数定义键盘的类型,v-model绑定一个值为布尔值的变量控制键盘的弹出与收起: + +* mode = number (默认值)为数字键盘,此时顶部工具条中间的提示文字为"数字键盘" +* mode = car 为汽车键盘,此时顶部工具条中间的提示文字为"车牌号键盘" +* mode = card 为身份证键盘,此时顶部工具条中间的提示文字为"身份证键盘" + +```html + + + +``` + +## 控制键盘顶部的工具条 + +* 通过`tooltip`参数配置是否显示显示顶部的工具条,默认为`true` +* 通过`tips`参数修改工具条中间的提示文字 +* 通过`show-tips`可以控制是否显示工具条中间的文字 +* 通过`cancelBtn`参数配置是否显示工具条左边的"取消"按钮 +* 通过`confirmBtn`参数配置是否显示工具条右边的"完成"按钮 + +```html + +``` + +## 是否显示键盘的点(".")按键 + +该按键通过`dot-enabled`(默认为`true`)参数配置,只在"mode = number"时生效,因为车牌号和身份证键盘,用不到"."这个按键 + +```html + +``` + +## 是否打乱按键的顺序 + +如果配置`random`参数为`true`的话,**每次**打开键盘,按键的顺序都是随机的,该功能默认是关闭的 + +```html + +``` + +## 如何控制键盘的打开和关闭? + +通过v-model绑定一个值为布尔值的变量控制组件的弹出与收起,v-model的值是双向绑定的。 + +```html + + + +``` + +## 如何监听键盘按键被点击? + +* 输入值是通过组件的`change`事件实现的,组件内部每个按键被点击的时候,组件就会发出一个`change`事件,回调参数为点击的按键的值。 +* 通过`backspace`事件监听键盘退格键的点击,通过修改父组件的值实现退格的效果,见下方示例 + +注意:点击退格键(也即删除键)不会触发`change`事件 + +```html + + + +``` + +## 是否显示遮罩 + +当您使用键盘时,可能会不想显示遮罩,这时可以配置`mask`参数为`false`即可 + +```html + +``` + +## API + +### Props + +注意:props中没有控制键盘弹出与收起的参数,因为这是通过v-model绑定变量实现的,见上方说明。 + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|-----------|-----------|----------|----------|---------| +| mode | 键盘类型,见上方`基本使用`的说明 | String | number | car / card | +| dot-enabled | 是否显示"."按键,只在mode=number时有效 | Boolean | true | false | +| tooltip | 是否显示键盘顶部工具条 | Boolean | true | false | +| tips | 工具条中间的提示文字,见上方`基本使用`的说明 | String | - | - | +| show-tips | 是否显示工具条中间的文字 | Boolean | true | false | +| cancel-btn | 是否显示工具条左边的"取消"按钮 | Boolean | true | false | +| confirm-btn | 是否显示工具条右边的"完成"按钮 | Boolean | true | false | +| mask | 是否显示遮罩 | Boolean | true | false | +| z-index | 弹出键盘的`z-index`值 | Number | String | 1075 | - | +| random | 是否打乱键盘按键的顺序 | Boolean | false | true | +| safe-area-inset-bottom | 是否开启[底部安全区适配](/zh/components/safeAreaInset.html#关于uview某些组件safe-area-inset参数的说明) | Boolean | false | true | +| mask-close-able | 是否允许点击遮罩收起键盘 | Boolean | true | false | +| confirm-text | 确认按钮的文字 | String | 取消 | - | +| cancel-text | 取消按钮的文字 | String | 确认 | - | + +### Events + +|事件名|说明|回调参数|版本| +|:-|:-|:-|:-| +| change | 按键被点击(不包含退格键被点击) | 按键的值,见上方说明和示例 | - | +| cancel | 键盘顶部工具条左边的"取消"按钮被点击 | - | - | +| confirm | 键盘顶部工具条右边的"完成"按钮被点击 | - | - | +| backspace | 键盘退格键被点击 | - | - | + +### Slots + +|名称|说明|版本| +|:-|:-|:-| +| default | 内容将会显示键盘的工具条上面,可以结合[MessageInput 验证码输入](/zh/components/messageInput.html)组件实现类似支付宝输入密码时,上方显示输入内容的功能 | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/layout.md' +--- +# Layout 布局 + +通过基础的 12 分栏,迅速简便地创建布局 + +::: warning 注意 +如需实现类似宫格的布局,请使用uView的[Grid宫格组件](/zh/components/grid.html),可以设置角标,功能更完善和灵活 +::: + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +通过`col`组件的`span`设置需要分栏的比例 + +```html + + + +``` + +## 分栏间隔 + +通过设置`row`组件的`gutter`参数,来指定每一栏之间的间隔(最终表现为左边内边距各为gutter/2),默认间隔为0 + +```html + + + + + + + + + + +``` + +## 分栏偏移 + +通过指定`col`组件的`offset`属性可以指定分栏偏移的栏数。 + +```html + + + + + + + + +``` + +## 对齐方式 + +通过`row`组件的`justify`来对分栏进行灵活的对齐, +可选值为`start`(或`flex-start`)、`end`(或`flex-end`)、`center`、`around`(或`space-around`)、`between`(或`space-between`), +其最终的表现类似于css的`justify-content`属性。 + +**注意**:由于持微信小程序编译后的特殊结构,此方式不支持微信小程序。 + +```html + + + + + + + + +``` + +## API + +## Row Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| gutter | 栅格间隔,左右各为此值的一半,单位rpx | String | Number | 0 | - | +| justify | 水平排列方式(微信小程序暂不支持) | String | start(或flex-start) | end(或flex-end) / center / around(或space-around) / between(或space-between) | +| align | 垂直排列方式 | String | center | top / bottom | + +## Col Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| span | 栅格占据的列数,总12等分 | String | Number | 0 | 1-12 | +| offset | 分栏左边偏移,计算方式与`span`相同 | String | Number | 0 | - | +| text-align | 文字水平对齐方式 | String | left | center / right | + +## Row Events + +|事件名|说明|回调参数| +|:-|:-|:-| +| click | `row`被点击 | - | + +## Col Events + +|事件名|说明|回调参数| +|:-|:-|:-| +| click | `col`被点击,会阻止事件冒泡到`row` | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/lazyLoad.md' +--- +# LazyLoad 懒加载 + +懒加载使用的场景为:页面有很多图片时,APP会同时加载所有的图片,导致页面卡顿,各个位置的图片出现前后不一致等\ +本组件高度封装和集成,创新性地使用`uni.createIntersectionObserver` +接口,保证高性能的同时,还有其他友好的可配置参数,比如预加载占位图,加载错误占位图,加载位置参数(threshold),各种事件等。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +通过`image`参数传入图片的`src`路径即可 + +:::warning 注意 +由于uni-app默认给了image组件的`height`为225px,同时也只有在uni-appimage组件的`mode`参数为`widthFix`时,image才会自动计算出一个高度值 +覆盖默认的`height`(225px)。其他`mode`参数下,如果设置`height`为`auto`,或者`100%`的话,图片将会无法显示。 + +所以:当您使用uView的`lazyload`组件时,如果设置`height`参数为`auto`,或者`100%`,而`img-mode`参数又不为`widthFix`的话,图片将会不显示,这不是uView的BUG。 + +结论:如果`img-mode`参数不为`widthFix`的话,必须设置`height`参数为一个固定的高度(单位rpx),否则无效。 +::: + +```html + + + +``` + +## 配置占位图 + +占位图有两种情况: + +* 一种是正常预加载时显示的,通过`loading-img`配置类似"正在加载"的占位图。 +* 另一种是图片加载失败(如图片不存在,路径不完整等),通过`error-img`参数配置类似"图片加载错误"的占位图 + +```html + + + +``` + +## 图片加载位置 + +可以通过`threshold`参数设置图片距离屏幕底部多少距离时触发图片加载,单位rpx,说明: + +* 如果取负值(如-300),为尚未到达屏幕底部,距离300rpx时触发 +* 如果取正数(如300),为图片超出屏幕底部300rpx时触发 + +```html + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| index | 用户自定义值,在事件触发时回调,用以区分是哪个图片 | String | Number | - | - | +| image | 图片路径 | String | - | - | +| loading-img | 预加载时的占位图 | String | - | - | +| error-img | 图片加载出错时的占位图 | String | - | - | +| threshold | 触发加载时的位置,见上方说明,单位 rpx | String | 100 | - | +| duration | 图片加载成功时,淡入淡出时间,单位ms | String | Number | 500 | - | +| effect | 图片加载成功时,淡入淡出的css动画效果 | String | ease-in-out | linear / ease / ease-in / ease-out | +| is-effect | 图片加载成功时,是否启用淡入淡出效果 | Boolean | true | false | +| border-radius | 图片圆角值,单位rpx | String | Number | 0 | - | +| height | 图片高度,注意:实际高度可能受`img-mode`参数影响 | String | Number | 450 | - | +| img-mode | 图片的裁剪模式,详见[image组件裁剪模式](https://uniapp.dcloud.io/component/image) | String | Number | widthFix | - | + +### Events + +|事件名|说明|回调参数|版本| +|:-|:-|:-|:-| +|click|点击图片时触发|index:用户通过props传递的`index`值|-| +|load|图片加载成功时触发|index:用户通过props传递的`index`值|-| +|error|图片加载失败时触发|index:用户通过props传递的`index`值|-| + +--- + +--- +url: 'https://uviewpro.cn/zh/components/line.md' +--- +# Line 线条 + +此组件一般用于显示一根线条,用于分隔内容块,有横向和竖向两种模式,且能设置0.5px线条,使用也很简单。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +组件内部有预置的参数,直接使用即可,有如下几个参数需要了解: + +* `color`为线条的颜色 +* `direction`为线条的方向,默认为横向 +* `hair-line`为是否设置细线条(0.5px),默认为`true` +* `length`参数需要特别留意,它需要带上单位,比如设置为"50%","500rpx"等,在线条为横向时,表现为线条的长度;在线条为竖向时,表现为线条的高度。 + +```html + +``` + +## 线条类型 + +我们可以通过`border-style`参数设置线条的类型,有如下三种可选项: + +* `solid`表示实线 +* `dashed`表示方形虚线 +* `dotted`表示圆点虚线 + +## 兼容性 + +由于`头条小程序`的兼容性,如果组件无效的情况下,您可能需要给组件加上`u-line`类,如下: + +```html + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| color | 线条的颜色 | String | #e4e7ed | - | +| length | 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带rpx单位的值等 | String | 100% | - | +| direction | 线条的方向,`row`-横向,`column`-竖向 | String | row | column | +| hair-line | 是否显示细线条 | Boolean | true | false | +| margin | 线条与上下左右元素的间距,字符串形式,如"30rpx"、"20rpx 30rpx" | String | - | - | +| border-style | 线条类型,见上方说明 | String | solid | dashed / dotted | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/lineProgress.md' +--- +# LineProgress 线形进度条 + +展示操作或任务的当前进度,比如上传文件,是一个线形的进度条。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 通过`percent`设置当前的进度值,该值区间为0-100. +* 通过`active-color`设置进度条的颜色,也可以直接设置`type`主题颜色(优先起作用),使用预置值 + +```html + +``` + +## 设置进度条动画效果 + +该效果会在已完成的百分比部分显示移动的条纹(具体见示例效果) + +* `striped`参数配置是否显示条纹 +* `striped-active`参数配置条纹是否具有动态效果 + +```html + +``` + +## 设置进度条内部显示百分比值 + +参数为`show-percent` + +* 说明:进度条可以通过`height`设置高度,如果高度太小的话,是无法在内部显示当前的百分比值的 + +```html + +``` + +## 修改进度条的样式 + +* `active-color`参数修改激活部分的颜色 +* `round`参数设置进度条两端是否为半圆 + +```html + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| percent | 进度条百分比值,为数值类型,0-100 | String | Number | - | - | +| round | 进度条两端是否为半圆 | Boolean | true | false | +| type | 如设置,`active-color`值将会失效 | String | - | success / primary / error / info / warning | +| active-color | 进度条激活部分的颜色 | String | #19be6b | - | +| inactive-color | 进度条的底色,默认为灰色 | String | #ececec | - | +| show-percent | 是否在进度条内部显示当前的百分比值数值 | Boolean | true | false | +| height | 进度条的高度,单位rpx | String | Number | 28 | - | +| striped | 是否显示进度条激活部分的条纹 | Boolean | false | true | +| striped-active | 条纹是否具有动态效果 | Boolean | false | true | + +### Slots + +| 名称 | 说明 | +|:-|:-| +| default | 传入自定义的显示内容,将会覆盖默认显示的百分比值 | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/link.md' +--- +# Link 超链接 + +该组件为超链接组件,在不同平台有不同表现形式: + +* 在APP平台会通过`plus`环境打开内置浏览器 +* 在小程序中把链接复制到粘贴板,同时提示信息 +* 在H5中通过`window.open`打开链接 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 通过`href`设置打开的链接,`slot`传入显示的内容 + +```html +蜀道难,难于上青天 +``` + +## 下划线 + +通过`under-line`设置是否显示链接的下划线 + +```html +蒹葭苍苍,白露为霜 +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| color | 文字颜色 | String | #606266 | - | +| font-size | 字体大小,单位rpx | String | Number | 28 | - | +| under-line | 是否显示下划线 | Boolean | false | true | +| href | 跳转的链接,要带上http(s) | String | - | - | +| line-color | 下划线颜色,默认同`color`参数颜色 | String | - | - | +| mp-tips | 各个小程序平台把链接复制到粘贴板后的提示语 | String | 链接已复制,请在浏览器打开 | - | +| default-click | 是否有默认点击事件,不同平台有不同表现形式,如上介绍 | Boolean | true | false | + +### Events + +|事件名|说明|回调参数|版本| +|:-|:-|:-|:-| +| click | `defaultClick`为`false`时,点击组件会发出此事件 | href | | + +--- + +--- +url: 'https://uviewpro.cn/zh/guide/llms.md' +--- +# LLMs 支持 + +uView Pro 为大型语言模型(LLMs)提供了完善的上下文支持,帮助 AI 更好地理解和使用组件库。 + +## llms.txt 文件 + +我们为 LLMs 提供了两种格式的上下文文件: + +### 标准版(llms.txt) + +**地址:** + +标准版文件包含: + +* 组件库概述和特性介绍 +* 所有组件的链接和简介 +* 工具函数的列表 +* 快速导航索引 + +适用于:快速了解 uView Pro 的整体结构和可用资源 + +### 完整版(llms-full.txt) + +**地址:** + +完整版文件包含: + +* 所有组件的详细文档内容 +* 完整的 API 说明和属性列表 +* 详细的使用示例和代码片段 +* 事件、插槽、方法等完整参考 + +适用于:深度理解和精确使用具体组件 + +## 如何使用 + +### 在 AI 助手/IDE 中使用 + +将以下 URL 提供给支持的 AI 助手或 IDE: + +``` +https://uviewpro.cn/llms.txt +``` + +或完整版本: + +``` +https://uviewpro.cn/llms-full.txt +``` + +### 在 Cursor 中使用 + +在 Cursor 的设置中,可以将 llms.txt 添加为项目的上下文参考: + +1. 打开 Cursor 设置 +2. 找到 "Context" 或 "Documents" 设置 +3. 添加 URL:`https://uviewpro.cn/llms.txt` + +### 在其他 AI 工具中使用 + +大多数支持 URL 上下文的 AI 工具(如 Claude、ChatGPT、GitHub Copilot 等)都可以通过提供上述 URL 来获取 uView Pro 的组件库信息。 + +## 内容覆盖 + +llms.txt 和 llms-full.txt 文件涵盖了 uView Pro 的全部内容: + +### 基础组件 + +* Button、Icon、Image、Cell、Badge 等基础 UI 组件 +* Layout、Grid、Gap 等布局组件 +* Card、Divider、Line 等展示组件 + +### 表单组件 + +* Input、Field、Textarea 等输入组件 +* Radio、Checkbox、Switch 等选择组件 +* Form、Picker、Select 等表单容器组件 + +### 反馈组件 + +* Toast、Modal、Loading、Message 等提示组件 +* ActionSheet、Popup、Notify 等弹层组件 +* Progress、Skeleton、Empty 等状态组件 + +### 导航组件 + +* Navbar、Tabbar、Tabs、Steps 等导航组件 +* BackTop、IndexList、TreeSelect 等辅助导航 + +### 工具函数 + +* 颜色处理(color、colorSwitch) +* 数据操作(deepClone、deepMerge、random) +* 格式化工具(timeFormat、priceFormat) +* 设备信息(systemInfo、getRect) +* 其他实用工具(guid、queryParams、test) + +## 更新频率 + +llms.txt 文件会随着 uView Pro 的版本更新而自动更新,确保 AI 始终获取到最新的组件文档和 API 信息。 + +## 结合 Skills 使用 + +为了获得最佳的 AI 辅助开发体验,建议同时使用: + +1. **llms.txt** - 为 AI 提供组件库的完整上下文 +2. **[Skills](./skills.md)** - 提供标准化的代码生成能力 + +两者结合,可以让 AI 更准确地理解你的需求并生成高质量的 uView Pro 代码。 + +## 问题反馈 + +如果在使用 llms.txt 过程中发现内容有误或缺失,欢迎通过以下方式反馈: + +* [GitHub Issues](https://github.com/anyup/uview-pro/issues) +* [Gitee Issues](https://gitee.com/anyup/uview-pro/issues) + +--- + +--- +url: 'https://uviewpro.cn/zh/components/loading.md' +--- +# Loading 加载动画 + +此组件为一个小动画,目前用在uView的[loadmore加载更多](/zh/components/loadMore.html)和[switch开关](/zh/components/switch.html)等组件的正在加载状态场景。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +通过`mode`设定动画的类型,`circle`为圆圈的形状,`flower`为经典类似花朵的形状 + +```html + +``` + +## 动画颜色 + +`color`可以指定动画活动区域的颜色 + +```html + +``` + +## 动画尺寸 + +通过`size`设定尺寸,单位rpx,组件内把`size`值体现为组件的宽和高 + +```html + +``` + +## 显示或隐藏动画 + +通过`show`设置为`true`或`false`,来显示或隐藏动画 + +```html + + +/* 等价于 */ + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| mode | 模式选择,见上方说明 | String | circle | flower | +| color | 动画活动区域的颜色,只对 mode = circle 模式有效 | String | #c7c7c7 | - | +| size |加载图标的大小,单位rpx | String | Number | 34 | - | +| show | 是否显示动画 | Boolean | true | false | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/loadingPopup.md' +--- +# LoadingPopup 加载弹窗 + +`u-loading-popup` 是 uView Pro 提供的弹窗式加载动画组件,常用于页面或局部异步加载、数据请求等待等场景。相比普通的 `u-loading`,它支持遮罩、内容插槽、自动关闭等高级功能。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +通过 `v-model` 实现弹窗的双向绑定显示,`mode` 设定动画类型(`circle` 圆圈、`flower` 花朵),可自定义内容。 + +```html + + + +``` + +## 方向 + +可通过 `direction` 属性设置内容方向,可选值有 `vertical`(垂直)和 `horizontal`(水平)。 + +```html + + +``` + +## 动画颜色与尺寸 + +* `color` 设置动画颜色(仅 mode=circle 有效)。 +* `size` 设置动画尺寸,单位 rpx。 + +```html + +``` + +## 自动关闭与遮罩交互 + +* `duration` 设置自动关闭时间(ms),默认(设置为 0)表示不自动关闭。 +* `cancelTime` 允许点击遮罩关闭的最短时间(ms),默认 10000。 + * 遮罩层点击在 cancelTime 毫秒后可关闭弹窗,触发 cancel 事件。 + +```html + +``` + +## 事件 + +* `@cancel` 点击遮罩关闭时触发。 + +```html + + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +| ---------- | -------------------------- | ------------- | -------- | ------------------- | +| v-model | 弹窗显示的双向绑定 | Boolean | false | true/false | +| mode | 加载动画类型 | String | circle | circle/flower | +| text | 加载提示文字 | String | - | - | +| direction | 内容方向 | String | vertical | vertical/horizontal | +| duration | 自动关闭时间(ms) | Number | 0 | - | +| cancelTime | 允许点击遮罩关闭的最短时间 | Number | 10000 | - | +| color | 动画颜色 | String | #c7c7c7 | - | +| size | 加载动画尺寸(rpx) | String/Number | 48 | - | + +### Events + +| 事件名 | 说明 | 回调参数 | +| ------ | ---------------- | -------- | +| cancel | 点击遮罩关闭时触发 | - | + +*** + +更多用法请参考组件源码和实际业务场景。 + +--- + +--- +url: 'https://uviewpro.cn/zh/components/loadMore.md' +--- +# loadmore 加载更多 + +此组件一般用于标识页面底部加载数据时的状态,共有三种状态: + +* 加载前,显示"加载更多",加入点击可选,是因为数据不够一页时,无法触发页面的`onReachBottom`生命周期 +* 加载中,显示"正在加载...",2种动画可选 +* 加载后,如果还有数据,回到"加载前"状态,否则加载结束,显示"没有更多了" + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 通过`status`设置组件的状态,加载前值为`loadmore`,加载中为`loading`,没有数据为`nomore` + +注意:以下示例仅为模拟效果,实际中请根据自己的逻辑,修改代码的实现 + +```html + + + + + +``` + +## 控制组件的提示以及动画效果 + +* 可以通过`icon-type`设置加载中的图标为`flower`或者`circle`,如果不需要图标,可以设置`icon`为`false` +* 可以设置`is-dot`为`true`,在没有数据时,内容显示为一个"●"替代默认的"没有更多了" +* 可以通过配置`load-text`配置提示的文字,该参数为一个对象值,可以修改默认的文字提示,见如下: + +```html + + + +``` + +## 手动触发加载更多 + +有时候可能会因为网络,或者数据不满一页的原因,导致无法上拉触发`onReachBottom`生命周期,这时候(需`status`为`loadmore`状态),用户点击组件,就会触发`loadmore` +事件,可以在回调中,进行状态的控制和数据的加载,同时也可以修改`loadText`的`loadmore`为"上拉或点击加载更多"进行更加人性化的提示。 + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| status | 组件状态 | String | loadmore | loading / nomore | +| bg-color | 组件背景颜色,在页面是非白色时会用到(默认为transparent) | String | #ffffff | - | +| icon | 加载中时是否显示图标 | Boolean | true | false | +| icon-type | 加载中时的图标类型, | String | circle | flower | +| icon-color | `icon-type`为`circle`时有效,加载中的动画图标的颜色 | String | #b7b7b7 | - | +| is-dot | `status`为`nomore`时,内容显示为一个"●" | Boolean | false | true | +| color | 字体颜色 | String | #606266 | - | +| font-size | 字体大小,单位rpx | String | Number | 28 | - | +| load-text | 自定义显示的文字,见上方说明示例 | Object | - | - | +| margin-top | 与前一个元素的距离,单位rpx | String | Number | 0 | - | +| margin-bottom | 与后一个元素的距离,单位rpx | String | Number | 0 | - | + +### Events + +|事件名|说明|回调参数|版本| +|:-|:-|:-|:-| +| loadmore | `status`为`loadmore`时,点击组件会发出此事件 | - | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/mask.md' +--- +# Mask 遮罩层 + +创建一个遮罩层,用于强调特定的页面元素,并阻止用户对遮罩下层的内容进行操作,一般用于弹窗场景 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 通过`show`参数配置是否显示遮罩 +* 遮罩被点击时,会发送一个`click`事件,如不需要此事件,请设置`mask-click-able`参数为`false` + +```html + + + +``` + +## 嵌入内容 + +通过默认插槽可以在遮罩层上嵌入任意内容\ +注意:如果不想让`slot`插槽内容的点击事件冒泡到遮罩,请给指定元素添加上`@tap.stop` + +```html + + + + + +``` + +## 遮罩样式 + +* 通过`duration`设置遮罩淡入淡出的时长,单位`ms` +* 通过`zoom`设置遮罩淡入淡出时是否带有轻微的缩放效果,内部通过`transform: scale(1.2, 1.2)`实现 +* 通过`custom-style`传入一个对象,自定义样式,如"{backgroundColor: 'red', color: 'blue'}" + +```html + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|-----------|-----------|----------|----------|---------| +| show | 是否显示遮罩 | Boolean | false | true | +| z-index | z-index 层级 | String | Number | 10070 | - | +| duration | 动画时长,单位毫秒 | String | Number | 300 | - | +| zoom | 是否使用`scale`对遮罩进行缩放 | Boolean | true | false | +| mask-click-able | 遮罩是否可点击,为`false`时点击不会发送`click`事件 | Boolean | true | false | + +### Events + +|事件名|说明|回调参数| +|:-|:-|:-| +| click | `mask-click-able`为`true`时,点击遮罩发送此事件 | - | + +### Slots + +|名称|说明| +|:-|:-| +| default | 默认插槽,用于在遮罩层上方嵌入内容 | + +--- + +--- +url: 'https://uviewpro.cn/zh/guide/mcp.md' +--- +# MCP 协议支持 + +uView Pro 为 AI 编辑器提供了基于 Model Context Protocol (MCP) 的组件文档查询服务,让 AI 能够实时获取最新的组件 API 信息。 + +## 什么是 MCP + +**Model Context Protocol (MCP)** 是一种标准化协议,允许 AI 编辑器与外部工具进行通信。通过 MCP,AI 可以: + +* 查询组件的 Props、Events、Methods、Slots 等 API 信息 +* 获取组件的使用示例代码 +* 检查代码是否正确使用了组件 +* 查询 Hooks、Tools、指南等文档内容 + +## 功能特性 + +### 组件搜索 + +* 支持中英文名称模糊搜索 +* 返回组件简介、分类、平台兼容性 + +### API 查询 + +* 获取组件的完整 Props 列表(参数、类型、默认值、说明) +* 获取组件支持的 Events(事件名、说明、回调参数) +* 获取组件的 Methods 和 Slots + +### 代码示例 + +* 返回组件的使用示例代码 +* 包含不同场景下的用法示例 + +### Hooks 和 Tools 查询 + +* 查询组合式函数(Hooks)的用法 +* 查询工具函数(Tools)的参数和返回值 + +### 代码验证 + +* 检查组件使用是否符合规范 +* 验证属性名称和类型是否正确 + +## 支持的 AI 编辑器 + +| Cursor | Claude Desktop | Trae AI | 其他支持 MCP 的编辑器 | +|:-:|:-:|:-:|:-:| +| √ | √ | √ | √ | + +## 安装配置 + +### 在 Cursor 中使用 + +创建 `.cursor/mcp.json` 文件: + +```json +{ + "mcpServers": { + "uview-pro": { + "command": "npx", + "args": ["-y", "@uview-pro/mcp"] + } + } +} +``` + +### 在 Claude Desktop 中使用 + +编辑 `claude_desktop_config.json`: + +```json +{ + "mcpServers": { + "uview-pro": { + "command": "npx", + "args": ["-y", "@uview-pro/mcp"] + } + } +} +``` + +### 在 Trae 中使用 + +创建 `.trae/mcp.json` 文件: + +```json +{ + "mcpServers": { + "uview-pro": { + "command": "npx", + "args": ["-y", "@uview-pro/mcp"] + } + } +} +``` + +### 直接运行 + +```bash +npx @uview-pro/mcp +``` + +## 使用示例 + +在 AI 编辑器中直接提问: + +``` +- "uview 有哪些表单组件?" +- "button 组件有哪些属性?" +- "如何使用 useToast?" +- "检查这段代码是否正确使用了 form 组件" +``` + +AI 会自动调用 MCP 服务获取最新的文档信息。 + +## 数据来源 + +MCP 服务的数据来源于 uView Pro 官方文档,包含: + +### 组件库 + +* 基础组件:Button、Icon、Image、Cell、Badge 等 +* 表单组件:Input、Field、Textarea、Radio、Checkbox 等 +* 反馈组件:Toast、Modal、Loading、ActionSheet 等 +* 导航组件:Navbar、Tabbar、Tabs、Steps 等 + +### Hooks + +* useToast、useModal、useLoading 等组合式函数 +* useColor、useTheme 等状态管理 Hooks + +### Tools + +* 颜色处理(color、colorSwitch) +* 数据操作(deepClone、deepMerge) +* 格式化工具(timeFormat、priceFormat) + +### 指南 + +* 代码规范、主题配置、国际化支持等 + +## 版本更新 + +MCP 服务会随着 uView Pro 的版本更新而发布新版本,确保 AI 获取到最新的组件文档和 API 信息。 + +## 结合 llms.txt 和 Skills 使用 + +为了获得最佳的 AI 辅助开发体验,建议同时使用: + +1. **llms.txt** - 为 AI 提供组件库的完整上下文 +2. **MCP** - 提供实时、精确的 API 查询能力 +3. **Skills** - 提供标准化的代码生成能力 + +三者结合,可以让 AI 更准确地理解你的需求并生成高质量的 uView Pro 代码。 + +## 开源仓库 + +MCP 项目完全开源,欢迎社区贡献: + +**GitHub:** + +**Gitee:** + +## 问题反馈 + +如果在使用 MCP 服务过程中发现问题或有改进建议,欢迎通过以下方式反馈: + +* [GitHub Issues](https://github.com/uview-pro/mcp/issues) +* [Gitee Issues](https://gitee.com/uview-pro/mcp/issues) + +--- + +--- +url: 'https://uviewpro.cn/zh/tools/md5.md' +--- +# md5 加密 + +该`md5`加密方法,需要手动`import`库函数,调用`md5`方法即可使用,可以对字符串加密为32位的字符串结果,如需进一步了解, +详见[MD5百度百科](https://baike.baidu.com/item/MD5) + +使用方法: + +```js +import { ref, onMounted } from 'vue'; +import md5Libs from "uview-pro/libs/function/md5"; + +const md5Result = ref(''); + +onMounted(() => { + md5Result.value = md5Libs.md5('uView'); + console.log(md5Result.value); + // 结果为:55c859b4750225eb1cdbd9e0403ee274 +}); +``` + +--- + +--- +url: 'https://uviewpro.cn/zh/components/messageInput.md' +--- +# MessageInput 验证码输入 + +该组件一般用于验证用户短信验证码的场景,也可以结合uView的[键盘组件](/zh/components/keyboard.html)使用 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 通过`mode`参数模式,可取如下值: +* `box`(默认)-输入位置位一个方框 +* `bottomLine`-底部显示一条横线 +* `middleLine`-中部显示一条横线 + +```html + +``` + +## 设置最大长度和初始值 + +* 通过`maxlength`参数配置可输入的方框个数,如5位验证码,该值设置为5即可 +* 如果需要显示默认值,请通过`value`参数配置 + +```html + +``` + +## 是否自动获取焦点 + +如果需要一打开页面,就自动弹出键盘获取焦点,请配置`focus`值为true,否则需要用户手动点击输入区域才能唤起键盘 + +```html + +``` + +## 配置呼吸灯效果 + +配置`breathe`为`true`,当前激活输入框的样式会有一个类似光标一闪一闪的由浅到深的效果 + +```html + +``` + +## 用"●"替代输入内容 + +`dot-fill`参数配置后,输入内容将不可见,用点替代,事件回调中会返回真实值 + +```html + +``` + +## 禁止唤起系统键盘 + +uView有[键盘](/zh/components/keyboard.html)组件,如果您想结合键盘组件进行自定义的输入效果,就需要设置`disabled-keyboard`为`true`,来保证点击 +输入框时不会触发系统自带的键盘,否则会造成冲突。 + +## 事件回调 + +* 每当输入内容发生改变,会回调一个`change`事件,内容为当前输入的字符串,如"395" +* 当输入的内容长度(字符个数)达到`maxlength`值后,会触发`finish`事件,同时也会触发`change`事件 + +```html + + + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| maxlength | 输入字符个数 | String | Number | 4 | - | +| dot-fill | 是否用圆点填充 | Boolean | false | true | +| mode | 模式选择,见上方"基本使用"说明 | String | box | bottomLine / middleLine | +| value | 预置值 | String | Number | - | - | +| breathe | 是否开启呼吸效果,见上方说明 | Boolean | true | false | +| focus | 是否自动获取焦点 | Boolean | false | true | +| bold | 字体和输入横线是否加粗 | Boolean | true | false | +| font-size | 字体大小,单位rpx | String | Number | 60 | - | +| active-color | 当前激活输入框的样式 | String | #2979ff | - | +| inactive-color | 非激活输入框的样式,文字颜色同此值 | String | #606266 | - | +| width | 输入框的宽度(高等于宽),单位rpx | String | Number | 80 | - | +| disabled-keyboard | 禁止点击输入框唤起系统键盘 | Boolean | false | true | + +### Events + +| 事件名 | 说明 | 回调参数 | 版本 | +| :- | :- | :- | :- | +| change | 输入内容发生改变时触发,具体见上方说明 | value:当前输入的值 | - | +| finish | 输入字符个数达`maxlength`值时触发,见上方说明 | value:当前输入的值 | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/modal.md' +--- +# Modal 模态框 + +弹出模态框,常用于消息提示、消息确认、在当前页面内完成特定的交互操作。 + +:::tip 提示 +Modal 模态框目前已经支持 composable,提供简洁的模态框显示功能,支持全局/局部模式和函数式调用。详情查看:[**useModal**](/zh/hooks/useModal.html) +::: + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +默认情况下,模态框只有一个`确认`按钮: + +* 请至少要配置弹框的内容参数`content`。 +* 通过`v-model`绑定一个布尔变量来控制模态框的显示与否。 + +```html + + + +``` + +## 传入富文本内容 + +有时候我们需要给模态框的内容,不一定是纯文本的字符串,可能会需要换行,嵌入其他元素等,这时候我们可以使用`slot`功能,再结合uni-app`rictText`组件, +就能传入富文本内容了,如下演示: + +```html + + + + + +``` + +## 异步关闭 + +异步关闭只对"确定"按钮起作用,需要设置`async-close`为`true`,当点击确定按钮的时候,按钮的文字变成一个loading动画,此动画的颜色为 +`confirm-color`参数的颜色,同时Modal不会自动关闭,需要手动设置通过`v-model`绑定的变量为`false`来实现手动关闭。 + +```html + + + +``` + +## 点击遮罩关闭 + +有时候我们不显示"关闭"按钮的时候,需要点击遮罩也可以关闭Modal,这时通过配置`mask-close-able`为`true`即可 + +```html + +``` + +## 控制模态框宽度 + +可以通过设置`width`参数控制模态框的宽度,此值可以为数值(单位rpx),百分比,`auto`等。 + +```html + +``` + +## 自定义样式 + +此组件有完善的自定义功能,可以配置标题,内容,按钮等样式(传入对象形式),具体参数详见底部的API说明 + +```html + +``` + +## 缩放效果 + +开启缩放效果,在打开和收起模态框的时候,会带有缩放效果,具体效果请见示例,此效果默认开启,通过`zoom`参数配置 + +```html + +``` + +## API + +### Props + +注意:需要给`modal`组件通过`v-model`绑定一个布尔值,来初始化`modal`的状态,随后该值被双向绑定。 + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| show | 是否显示模态框,请赋值给`v-model` | Boolean | false | true | +| z-index | 层级 | String | Number | 1075 | - | +| title | 标题内容 | String | 提示 | - | +| width | 模态框宽度,数值时单位为rpx | String | Number | 600 | 百分比 / auto | +| content | 模态框内容,如传入`slot`内容,则此参数无效 | String | 内容 | - | +| show-title | 是否显示标题 | Boolean | true | false | +| show-confirm-button | 是否显示确认按钮 | Boolean | true | false | +| show-cancel-button | 是否显示取消按钮 | Boolean | false | true | +| confirm-text | 确认按钮的文字 | String | 确认 | - | +| cancel-text | 取消按钮的文字 | String | 取消 | - | +| cancel-color | 取消按钮的颜色 | String | #606266 | - | +| confirm-color | 确认按钮的颜色 | String | #2979ff | - | +| border-radius | 模态框圆角值,单位rpx | String | Number | 16 | - | +| title-style | 自定义标题样式,对象形式 | Object | - | - | +| content-style | 自定义内容样式,对象形式 | Object | - | - | +| cancel-style | 自定义取消按钮样式,对象形式 | Object | - | - | +| confirm-style | 自定义确认按钮样式,对象形式 | Object | - | - | +| zoom | 是否开启缩放模式 | Boolean | true | false | +| async-close | 是否异步关闭,只对确定按钮有效,见上方说明 | Boolean | false | true | +| mask-close-able | 是否允许点击遮罩关闭Modal | Boolean | false | true | +| negative-top | 往上偏移的值,以避免可能弹出的键盘重合,单位任意,数值则默认为rpx单位 | String | Number | 0 | - | + +### Events + +|事件名|说明|回调参数| +|:-|:-|:-| +| confirm | 点击确认按钮时触发 | - | +| cancel | 点击取消按钮时触发 | - | + +### Methods + +此方法需要通过ref调用,详见上方的"异步关闭" + +|事件名|说明| +|:-|:-| +| clearLoading | 异步控制时,通过调用此方法,可以不关闭Modal,而单是清除loading状态 | + +### Slots + +| 名称 | 说明 | +|:-|:-| +| default | 传入自定义内容,一般为富文本,见上方说明 | +| confirm-button | 传入自定义按钮,用于在微信小程序弹窗通过按钮授权的场景 | + +--- + +--- +url: 'https://uviewpro.cn/zh/tools/mpShare.md' +--- +# mpShare 小程序分享 + +此功能,是对uni的[onShareAppMessage 生命周期](https://uniapp.dcloud.io/api/plugins/share?id=onshareappmessage)的封装。 + +这里说的小程序,指的是"微信小程序、百度小程序、头条小程序、QQ小程序,支付宝小程序等"。 + +由于小程序的分享(微信、头条平台),需要监听页面的`onShareAppMessage`生命周期,小程序需要在页面声明了此生命周期,点击右上角的"胶囊"才会有分享功能, +而一般情况下,我们希望每个页面都可以分享,那就需要每个页面都写一遍这个生命周期,是很繁琐的。 + +基于以上,uView通过`mixin`的形式,给每一个页面注入了`onShareAppMessage`生命周期,让您简单引入,无需任何后续操作,即可让每一个页面都有分享功能(仅针对小程序)。 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|x|x|√|√|√|√|√| + +## 基本使用 + +需要注意的是,小程序(uni)没有提供类似"getNavigationBarTitle"这样的接口,所以我们无法获取当前页面导航栏的标题,换言之,我们想要每个页面个性化的 +分享标题,需要手动设置,否则**默认为小程序的名称**。 + +:::tip 注意: +分享功能是默认关闭的,但是我们写好各项配置,您只要在`main.js`中引入对应的文件即可,我们没有默认引入,是因为某些用户并不需要此功能。 +::: + +打开小程序分享功能: + +```js +// main.js + +// 其他内容 + +// 引入uView对小程序分享的mixin封装 +let mpShare = require('uview-pro/libs/mixin/mpShare.js'); +Vue.mixin(mpShare) + +// 其他内容 +``` + +分享功能,一般有三个参数,如下: + +```js +// 该对象已集成到this.$u中,内部属性如下 +uni.$u.mpShare = { + title: '', // 默认为小程序名称,可自定义 + path: '', // 默认为当前页面路径,一般无需修改,QQ小程序不支持 + // 分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径。 + // 支持PNG及JPG,默认为当前页面的截图 + imageUrl: '' +} +``` + +以上这些,uView已通过`mixin`集成,当某一个页面您需要自定义分享信息时,可以通过"uni.$u.mpShare"对进行修改,在页面的`onLoad`生命周期修改即可。 + +```vue + +``` + +## 重写"onShareAppMessage"生命周期 + +如果您基于自己的一些业务逻辑,需要更加自定义的实现逻辑,可以在页面中重写`onShareAppMessage`生命周期即可覆盖uView通过`mixin`监听的`onShareAppMessage`生命周期。 + +```vue + +``` + +## 分享到朋友圈 + +此功能为微信小程序最新加入的功能,仅适用于微信小程序,uView也全局监听了此生命周期。 + +同理,你也可以在页面中重写`onShareTimeline`生命周期即可覆盖uView通过`mixin`监听的`onShareTimeline`生命周期。 + +```vue + +``` + +--- + +--- +url: 'https://uviewpro.cn/zh/components/navbar.md' +--- +# Navbar 自定义导航栏 + +此组件一般用于在特殊情况下,需要自定义导航栏的时候用到,一般建议使用 uni-app 带的导航栏。 + +## 平台差异说明 + +| App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ 小程序 | +| :-: | :-: | :--------: | :----------: | :--------: | :--------: | :-------: | +| √ | √ | √ | √ | √ | √ | √ | + +## 基本使用 + +默认情况下,该组件只有向左的箭头,**点击**可以返回上一页,如果您想将自定义导航栏用在 tabbar(不存在要返回的逻辑)页面,应该将`is-back`设置为`false`, +这样会隐藏左边的返回图标区域。 + +* 如果想在返回箭头的右边自定义类似"返回"字样,可以将`back-text`设置为"返回",前提是`is-back`要为`true`(默认) +* 通过`title`参数传入需要显示的标题,通过`title-width`(rpx)设置标题区域的宽度,文字超出会通过省略号隐藏 +* 通过`is-fixed`配置是否将导航栏固定在顶部 + +:::tip 说明 + +* 在小程序中,导航栏会自动适配导航栏右侧的胶囊位置,避开该区域 +* 组件底部默认有一条下边框,如您不需要,可以设置`border-bottom`为`false`即可 + ::: + +```html + +``` + +## 注意事项 + +既然是要自定义导航栏,那么首先就要取消系统自带的导航栏,需要在 uni-app 目的根目录的"pages.json"中设置,同时在此设置状态栏字体的颜色(H5 无效), +自定义导航栏后,如果想通过"uni.setNavigationBarColor"动态设置导航栏颜色相关参数,是可能会出问题的,请勿使用此方式。 + +```js +// pages.json + +"pages": [ + // navbar-自定义导航栏 + { + "path": "/pages/navbar/index", + "style": { + "navigationStyle": "custom" ,// 隐藏系统导航栏 + "navigationBarTextStyle": "white" // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一 + } + } +] +``` + +## 导航栏高度 + +可以通过`height`(单位**px**,默认 44,和 uni-app 统导航栏高度一致)配置导航栏的高度,此高度为导航栏内容的高度,不含状态栏的高度,组件内部会自动 +加上状态栏的高度,并填充状态栏的占位区域。 + +注意上方说的 uni-app 方的高度,这里指的是 H5,和 APP。至于各家小程序,由于受导航栏右侧胶囊的影响,目前组件内部给安卓设定的导航栏高度为`48px`,iOS 设定的导航栏高度为`44`,这是结合了大量的 +实践的出来的结果,具备完好的兼容性。 + +## 自定义导航栏内容 + +一般需要自定义导航栏内部的内容的时候,分几种情况: + +* `is-back`为`false`可以去除导航栏左侧默认的返回图标和文字。 +* 如有必要,将`title`设置空字符串,同时将会去除导航栏中间显示标题的占位区域。 + +当将`is-back`设置为`false`,`title`设置为空字符串之后,导航栏将不会有任何默认的内容,您可以通过`slot`传入任意自定义内容,在 APP 和小程序上,导航栏 +会自动添加状态栏的占位区域。 + +**注意:** 通过自定义`slot`传入的内容,为了能在导航栏中垂直居中,您可能需要注意下方示例的 css 的`slot-wrap`类的内容: + +```html + + + +``` + +## 自定义导航栏背景颜色 + +uView 提供了一个`background`参数(需对象形式),可以自定义导航栏的背景颜色: + +* 这个颜色,在 APP 和小程序上,包括状态的颜色在内 +* 如果是定义纯色的背景,可以设置`backgroundColor`属性 +* 如果是定义渐变的背景,可以设置`backgroundImage`属性 +* 如果是定义背景图,可以设置`background`属性,还可以加上其他属性,比如`no-repeat`,`center`等 + +```html + + + +``` + +## API + +### Props + +|参数|说明|类型|默认值|可选值| +|---|---|---|---|---| +|height|导航栏高度(不包括状态栏高度在内,内部自动加上),注意这里的单位是**px**|String | Number|44|-| +|back-icon-color|左边返回图标的颜色|String|#606266|-| +|back-icon-name|左边返回图标的名称,只能为 uView 自带的图标|String|nav-back|-| +|back-icon-size|左边返回图标的大小,单位 rpx|String | Number|30|-| +|back-text|返回图标右边的辅助提示文字|String|-|-| +|back-text-style|返回图标右边的辅助提示文字的样式,对象形式|Object|{ color: '#606266' }|-| +|title|导航栏标题,如设置为空字符,将会隐藏标题占位区域|String|-|-| +|title-width|导航栏标题的最大宽度,内容超出会以省略号隐藏,单位 rpx|String | Number|250|-| +|title-color|标题的颜色|String|#606266|-| +|title-size|导航栏标题字体大小,单位 rpx |String | Number|32|-| +|z-index|固定在顶部时的`z-index`值|String | Number|980|-| +|is-back|是否显示导航栏左边返回图标和辅助文字|Boolean|true|false| +|background|导航栏背景设置(APP 和小程序上包括状态栏的颜色),见上方说明|Object|{ background: '#ffffff' }|-| +|is-fixed|导航栏是否固定在顶部|Boolean|true|false| +|border-bottom|导航栏底部是否显示下边框,如定义了较深的背景颜色,可取消此值|Boolean|true|false| +|custom-back|自定义返回逻辑方法,如传入,点击返回按钮执行函数,否则正常返回上一页,注意模板中不需要写方法参数的括号|Function|-|-| +|immersive|沉浸式,允许 fixed 定位后导航栏塌陷,仅 fixed 定位下生效|Boolean|false|true| +|title-bold|导航栏标题字体是否加粗|Boolean|false|true| + +### Slots + +|名称|说明| +|---|---| +|default|自定义中间部分的内容| +|left|自定义左侧部分内容| +|right|自定义右侧部分内容| + +--- + +--- +url: 'https://uviewpro.cn/zh/components/noNetwork.md' +--- +# NoNetwork 无网络提示 + +该组件无需任何配置,引入即可,内部自动处理所有功能和事件,有如下特点: + +* 如果没有网络,该组件会以`fixed`定位,并且以很大的`z-index`值覆盖原来的内容。一旦有网络了,会自动隐藏该组件,实现自动化 +* 在APP上,嵌入了5+接口,可以直接打开手机的设置页面,方便用户进行网络相关的设置 + +::: warning 说明 + +1. 应用有网络时,是不会触发本组件的,为了测试此功能,请关闭手机的数据连接以及WiFi即可 +2. 由于普通的组件无法覆盖原生组件,所以本组件不适用那些有`video`,`map`等原生表现的组件的页面,可以自行使用uni的`cover-view`组件修改 + ::: + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|x|√| + +## 基本使用 + +```html + + + + + +``` + +## 兼容性 + +* `头条小程序`不支持监听网络状态变化,故本组件不支持`头条小程序` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| tips | 没有网络时的提示语 | String | 哎呀,网络信号丢失 | - | +| zIndex | 组件的`z-index`值 | String | Number | 10080 | - | +| image | 无网络的图片提示,可用的src地址或base64图片 | String | - | - | + +### Events + +| 事件名 | 说明 | 回调参数 | +| :- | :- | :- | +| retry | 用户点击页面的"重试"按钮时触发 | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/noticeBar.md' +--- +# NoticeBar 滚动通知 + +该组件用于滚动通告场景,有多种模式可供选择 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +* 通过`list`数组参数设置需要滚动的内容 +* 滚动`mode`参数有两种模式,分别是`horizontal`水平滚动,`vertical`垂直滚动。其中水平滚动又可以通过`is-circular`来配置是衔接滚动(`true`)还是步进滚动(`false`), + 衔接滚动滚动会把`list`数组元素拼接成一个字符串形式进行滚动,步进滚动模式类似轮播图水平滚动的形式,具体效果请见实例 + +```html + + + +``` + +## 配置主题 + +* 通过`type`参数可以配置5种主题,即`primary`、`warning`(默认)、`error`、`info`、`success`、`none` + +说明:`none`主题默认没有背景颜色 + +```html + +``` + +## 配置图标 + +* `volume-icon`参数配置是否显示左侧的音量小喇叭图标,默认显示 +* `more-icon`配置是否显示右侧的向右箭头,默认关闭 +* `close-icon`配置是否显示关闭的图标,默认关闭 + +```html + + + + + +``` + +## 配置滚动速度 + +* `mode`为`vertical`(垂直滚动),或者`mode`为`horizontal`且`is-circular`为`false`时,两者都可视为"步进"滚动,此时通过`duration`设置滚动周期时长 +* `mode`为`horizontal`且`is-circular`为`true`时,可视为"水平衔接滚动",此时uView加入了一个滚动因子参数,可确保在任意多内容情况下,滚动速度恒定不变, + 可通过`speed`参数配置每秒滚动的距离,单位为`rpx` + +```html + + + + + +``` + +## 控制滚动的开始和暂停 + +* `autoplay`参数默认为`true`,控制是否自动播放滚动通告 +* `play-state`参数为`paused`,滚动会暂停,为`play`滚动继续播放 + +```html + +``` + +## 事件回调 + +* `more-icon`参数为`true`时,点击向右图标会回调一个`getMore`事件 +* `close-icon`参数为`true`时,点击关闭箭头图标会触发一个`close`事件 +* 点击通告栏的文字时,会触发`click`事件,回调参数为当前文字所在`list`数组参数的索引值 + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| list | 滚动内容,数组形式,见上方说明 | Array | - | - | +| type | 显示的主题 | String | warning | primary / info / error / success / none | +| volume-icon | 是否显示小喇叭图标 | Boolean | true | false | +| more-icon | 是否显示右边的向右箭头 | Boolean | false | true | +| close-icon | 是否显示关闭图标 | Boolean | false | true | +| autoplay | 是否自动播放 | Boolean | true | false | +| color | 文字颜色 | String | - | - | +| bg-color | 背景颜色 | String | Number | - | - | +| mode | 滚动模式 | String | horizontal(水平滚动) | vertical(垂直滚动) | +| show | 是否显示 | Boolean | true | false | +| volume-size | 左边喇叭的大小 | String | Number | 34 | - | +| font-size | 字体大小,单位rpx | String | Number | 28 | - | +| duration | 滚动周期时长,只对步进模式有效,横向衔接模式无效,单位ms | String | Number | 2000 | - | +| speed | 水平滚动时的滚动速度,即每秒移动多少距离,只对水平衔接方式有效,单位rpx | String | Number | 160 | - | +| is-circular | `mode`为`horizontal`时,指明是否水平衔接滚动 | Boolean | true | false | +| play-state | 播放状态,play - 播放,paused - 暂停 | String | play | paused | +| disable-touch | 是否禁止通过手动滑动切换通知,只有mode = vertical,或者mode = horizontal且is-circular = false时有效;只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序| Boolean | true | false | +| padding | 内置滚动通知的内边距,字符串,类似"16rpx 20rpx" | String | 18rpx 24rpx | - | +| border-radius | 圆角值,单位rpx | String \ Number | 0 | - | +| no-list-hidden | `list`为空数组时,是否显示组件 | Boolean | true | false | + +### Events + +详细解释见上方说明 + +| 事件名 | 说明 | 回调参数 | 版本 | +| :- | :- | :- | :- | +| click | 点击通告文字触发,只有mode = vertical,或者mode = horizontal且is-circular = false时有效 | index:当前文字所在`list`数组的索引值 | - | +| close | 点击右侧关闭图标触发 | - | - | +| getMore | 点击右侧向右图标触发 | - | - | +| end | 列表的消息每次被播放一个周期时触发,只有mode = vertical,或者mode = horizontal且is-circular = false时有效 | - | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/npmSetting.md' +--- +# npm 安装方式配置 + +## 关于 SCSS + +uView Pro 依赖 SCSS,您必须要安装此插件,否则无法正常运行。 + +* 如果您的项目是由`HBuilder X`创建的,相信已经安装 scss 插件,如果没有,请在 HX 菜单的 工具->插件安装中找到"scss/sass 编译"插件进行安装, + 如不生效,重启 HX 即可 +* 如果您的项目是由 vue-cli 创建的,请通过以下命令安装对 sass(scss)的支持,如果已安装,请略过。 + +```bash +# 安装sass +npm i sass -D + +# 安装sass-loader +npm i sass-loader -D +``` + +:::tip 注意 +sass、sass-loader 版本过高或过低,导致编译异常,因此推荐统一并锁定依赖版本: + +```json +"sass": "1.63.2", +"sass-loader": "10.4.1" +``` + +::: + +## 准备工作 + +在进行配置之前,请确保您已经根据[安装](install.html)中的步骤对 uView Pro 进行了 npm 安装,如果没有,请先执行安装: + +## 1. 引入 uView Pro 主库 + +在 `main.ts` 中引入并注册 uView Pro: + +```js +// main.ts +import { createSSRApp } from 'vue' +// npm 方式 +import uViewPro from 'uview-pro' + +export function createApp() { + const app = createSSRApp(App) + app.use(uViewPro) + return { + app + } +} +``` + +## 2. 引入全局样式 + +在 `uni.scss` 中引入主题样式: + +```scss +/* uni.scss */ +// npm 方式 +@import 'uview-pro/theme.scss'; +``` + +在 `App.vue` 首行引入基础样式: + +```scss + +``` + +## 3. 配置 easycom 自动引入组件 + +在 `pages.json` 中配置 easycom 规则,实现组件自动引入: + +```json +// pages.json +{ + "easycom": { + "autoscan": true, + "custom": { + // npm 方式 + "^u-(.*)": "uview-pro/components/u-$1/u-$1.vue" + } + }, + "pages": [ + // ... + ] +} +``` + +:::tip 注意 + +* 1.修改 `easycom` 规则后需重启 HX 或重新编译项目。 +* 2.请确保 `pages.json` 中只有一个 easycom 字段,否则请自行合并多个规则。 +* 3.一定要放在 `custom` 内,否则无效。 + ::: + +## 4. Volar 类型提示支持 + +如需在 CLI 项目中获得 Volar 的全局类型提示,请在 `tsconfig.json` 中添加: + +```json +{ + "compilerOptions": { + // npm 方式 + "types": ["uview-pro/types"] + } +} +``` + +> HBuilderX 项目暂不支持 tsconfig.json 的 types 配置,CLI 项目推荐配置以获得最佳 TS 体验。 + +## 5. 组件使用 + +配置完成后,无需 import 和 components 注册,可直接在 SFC 中使用 uView Pro 组件: + +```vue + +``` + +--- + +--- +url: 'https://uviewpro.cn/zh/components/numberBox.md' +--- +# NumberBox 步进器 + +该组件一般用于商城购物选择物品数量的场景 + +注意:该输入框只能输入大于或等于0的整数,不支持小数输入 + +## 平台差异说明 + +|App|H5|微信小程序|支付宝小程序|百度小程序|头条小程序|QQ小程序| +|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +|√|√|√|√|√|√|√| + +## 基本使用 + +通过`v-model`绑定`value`初始值,此值是双向绑定的,**无需**在回调中将返回的数值重新赋值给`value`。 + +```html + + + +``` + +## 步长设置 + +* 通过`step`属性设置每次点击增加或减少按钮时变化的值,默认为1 + +**注意:** `step`参数支持小数值,如`1.1`、`0.3`等 + +下面示例每次都会加2或者减2 + +```html + +``` + +## 限制输入范围 + +通过`min`和`max`参数限制输的入值最小值和最大值 + +```html + +``` + +## 禁用状态 + +通过设置`disabled`参数来禁用输入框,禁用状态下无法点击加减按钮或修改输入框的值 + +```html + +``` + +## 自定义大小 + +* 通过`input-width`参数设置输入框的宽度 +* 通过`input-height`参数设置输入框和按钮的高度,单位都是rpx + +```html + +``` + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | 可选值 | +|------------- |---------------- |---------------|------------------ |-------- | +| v-model | 输入框初始值 | Number | 1 | - | +| bg-color | 输入框和按钮的背景颜色 | String | #F2F3F5 | - | +| min | 用户可输入的最小值 | Number | 0 | - | +| max | 用户可输入的最大值 | Number | 99999 | - | +| step | 步长,每次加或减的值,支持小数值,如需小数,请设置`positive-integer`为`false` | Number | 1 | - | +| disabled | 是否禁用操作,禁用后无法加减或手动修改输入框的值 | Boolean | false | true | +| size | 输入框文字和按钮字体大小,单位rpx | String | Number | 26 | - | +| color | 输入框文字和加减按钮图标的颜色 | String | #323233 | - | +| input-width | 输入框宽度,单位rpx | String | Number | 80 | - | +| input-height | 输入框和按钮的高度,单位rpx | String | Number | 50 | - | +| index | 事件回调时用以区分当前发生变化的是哪个输入框 | String | Number | - | - | +| disabled-input | 是否禁止输入框手动输入值 | Boolean | false | true | +| cursor-spacing | 指定光标于键盘的距离,避免键盘遮挡输入框,单位rpx | String | Number | 200 | - | +| long-press | 是否开启长按连续递增或递减 | Boolean | true | false | +| press-time | 开启长按触发后,每触发一次需要多久,单位ms | String | Number | 250 | - | +| positive-integer | 是否只能输入正整数 | Boolean | true | false | + +### Events + +| 事件名 | 说明 | 回调参数 | 版本 | +| :- | :- | :- | :- | +| change | 输入框内容发生变化时触发,对象形式 | value:输入框当前值,index:通过props传递的`index`值 | - | +| blur | 输入框失去焦点时触发,对象形式 | value:输入框当前值,index:通过props传递的`index`值 | - | +| minus | 点击减少按钮时触发(按钮可点击情况下),对象形式 | value:输入框当前值,index:通过props传递的`index`值 | - | +| plus | 点击增加按钮时触发(按钮可点击情况下),对象形式 | value:输入框当前值,index:通过props传递的`index`值 | - | +| blur | 输入框失去焦点时触发,对象形式 | value:输入框当前值,index:通过props传递的`index`值 | - | + +--- + +--- +url: 'https://uviewpro.cn/zh/components/nvue.md' +--- +# Nvue 特性相关 + +前言:uView 在 1.x 版本,只有部分组件支持`nvue`,不推荐在`nvue`项目中使用,uView Pro 也不建议在`nvue`项目中使用,我们在这里做一个专题,列出一些`nvue`上的坑,希望能帮助到您。 + +## Text 组件 + +* 我们在`vue`中,可以将文本相关的内容放到`view`或者`text`组件,这都是没问题的,但是在`nvue`中,需要动态响应(双向绑定)的内容,必须放在`text`标签,如果放在`view`可以正常显示,但是无法双向绑定。 + +* 在`nvue`中,文本的样式无法继承父元素的颜色(color),必须具体到给每一个`text`元素定义类名,在通过指定的类名给赋予颜色值,其他类似出现不能继承父组件的情况,也可参考此做法。 + +* 在`nvue`中,`text`组件不能换行写内容,否则会出现无法去除的周边空白内容(类似被加上了`padding`或者`margin`的效果),如下: + +```html + + 桃花潭水深千尺 + + +不及汪伦送我情 +``` + +## 事件冒泡 + +`weex`事件冒泡相关文档 —— [事件冒泡](https://weex.apache.org/zh/docs/events/event-bubbling.html#%E9%98%BB%E6%AD%A2%E5%86%92%E6%B3%A1) + +在`weex`原文中,需要给给页面(组件)根元素设置`bubble="true"`才能产生事件冒泡机制,但是在`uni-app`的`nvue`中,已自动加上类似`bubble="true"`的操作,无需用户额外干预,自动就会获得事件冒泡的机制。另外,在 nvue 中,我们可以通过如下方式阻止事件冒泡: + +```html + + + +``` + +## line-height + +在`nvue`中,`line-height`与字体大小`font-size`无关,如果赋予数值,单位默认为`px`,这意味着不可以如下使用: + +```css +.box { + /* vue正常,nvue中会导致行高只有1px */ + line-height: 1; +} +``` + +## 样式穿透 + +在`weex`(`nvue`)中有如此描述:[在 Weex 里, 每一个 Vue 组件的样式都是 scoped](https://weex.apache.org/zh/guide/use-vue-in-weex.html#%E5%B9%B3%E5%8F%B0%E7%9A%84%E5%B7%AE%E5%BC%82),这说明`vue`中的的`/deep/`和`:deep`在`nvue`中都是无效,修改子组件样式只能通过传参进行,而不能进行样式穿透。 + +## 字体引入不能加引号 + +`nvue`下,`font-family`的字体引入,不能加引号,否则会导致字体图标无法显示,如下: + +```css +/* 错误写法 */ +font-family: "uicon-iconfont"; + +/* 正确写法 */ +font-family: uicon-iconfont; +``` + +## Scss 中的:export 无效 + +在`vue`中,我们可以通过`*.scss`中使用[:export](https://www.jianshu.com/p/069f4f79de16)进行变量导出,供`js`和`css`共同使用变量,但是`nvue`中不支持此写法,请勿使用。 + +## transition 属性不能简写 + +在`vue`中,我们可以很方便的简写`transition`属性,但是`nvue`中,必须分开写才有效,如下: + +* [weex 文档关于 transition 的描述](https://weex.apache.org/zh/docs/styles/common-styles.html#transition) + +```css +/* 如下写法,vue有效,nvue无效 */ +transition: opacity 0.3s ease-in; + +/* nvue页面需要拆分成如下写法 */ +transition-property: opacity; +transition-duration: 0.3s; +transition-timing-function: ease-in; +``` + +## box-shadow + +据关于[weex 关于 box-shadow 文档](https://weex.apache.org/zh/docs/styles/common-styles.html#%E9%98%B4%E5%BD%B1-box-shadow)描述,`weex`不支持`android`上的`box-shadow`属性,但是经实测,在`nvue`(uni-app 改良后台的`weex`)上`android`,是支持的`box-shadow`属性效果的。 + +需要说明的是,在`IOS`上,目前(2020-10-30)不允许将`box-shadow`值设置为`none`,否则会出现锐利的高亮白色边框,由于`nvue`支持`rgba`透明度,我们可以通过如下方式实现类似`none`的效果: + +```css +.box { + box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); +} +``` + +## border-radius + +[在`weex`文档中有明确的说明](https://weex.apache.org/zh/docs/styles/common-styles.html#border-radius),`border-radius`支持简写形式,但是在`nvue`的`android`端,`border-radius`必须分开写才有效,如下: + +```css +/* nvue下,安卓不支持此写法 */ +.box { + border-radius: 10px; +} + +/* 必须如下写法才能兼容 */ +.box { + border-bottom-left-radius: 10px; + border-bottom-right-radius: 10px; + border-top-left-radius: 10px; + border-top-right-radius: 10px; +} +``` + +## 关于\