diff --git a/api/userrecruit.js b/api/userrecruit.js
index 812924b..a6dd67e 100644
--- a/api/userrecruit.js
+++ b/api/userrecruit.js
@@ -134,4 +134,9 @@ export const cancelUserInvite = (params) => request({
url: '/api/jobslink-api/user/userrecruit/cancelUserInvite',
method: 'get',
params
+})
+export const getDeptAllTree = (params) => request({
+ url: '/api/jobslink-api/system/dept/all-tree',
+ method: 'get',
+ params
})
\ No newline at end of file
diff --git a/components/uni-popup/uni-popup.vue b/components/uni-popup/uni-popup.vue
index 50434e6..7df14e9 100644
--- a/components/uni-popup/uni-popup.vue
+++ b/components/uni-popup/uni-popup.vue
@@ -1,187 +1,189 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pages/recruit/subPage/task.vue b/pages/recruit/subPage/task.vue
index 33f47d2..25c9827 100644
--- a/pages/recruit/subPage/task.vue
+++ b/pages/recruit/subPage/task.vue
@@ -101,6 +101,11 @@
+
+
+
@@ -176,7 +181,8 @@
submitInfo,
getWorktypesBaseList,
findTradeList,
- getDictionary
+ getDictionary,
+ getDeptAllTree
} from '@/api/userrecruit.js'
import PickerTree from './enterpriceCertification/pickerTree.vue'
import {
@@ -191,6 +197,7 @@
export default {
data() {
return {
+ deptTreeData: [],
addressOptions: [],
loading: false,
latitude: 31.05, //中心点
@@ -242,6 +249,7 @@
callTel: '', // 手机号
callNumber: '', // 座机
address: '', // 公司详细地址
+ createDept: []
// userInfo: {
// name: '楼兰',
// sex: '',
@@ -258,7 +266,7 @@
showNature: false, // 人员属性
showAge: false, // 年龄要求
showEdu: false, // 学历要求
- showExpe: false, // 经验要求
+ showExpe: false, // 经验要求
birthday: Number(new Date()),
wageColumns: dic.wageUnitCategoryState,
tradeColumns: dic.tradeArr,
@@ -391,6 +399,12 @@
message: '请输入详细地址',
trigger: ['change']
},
+ createDept: {
+ type: 'array',
+ required: true,
+ message: '请选择所属社区',
+ trigger: ['change']
+ }
},
}
},
@@ -412,6 +426,7 @@
} = dic.wageUnitCategoryState[0].filter(item => item.id == 3)[0]
this.info.wageUnitCategory = staId
this.info.wageUnitCategoryName = staLabel
+ this.getTreeDept()
if (this.company) {
this.backfill(this.company)
}
@@ -426,6 +441,13 @@
},
methods: {
+ async getTreeDept() {
+ let resData = await getDeptAllTree()
+ if (resData.data.code === 200) {
+ this.deptTreeData = resData.data.data
+ console.log('dept', resData.data.data)
+ }
+ },
selectInput: debounce(function(val) {
// querySearch(val, '3CXBZ-SKHCL-QC6PH-MLJAE-ZYCFK-6MBR5').then(res => {
// console.log(res)
@@ -484,6 +506,7 @@
this.info.jobCompanyIndustry = info.jobCompanyIndustry
this.info.jobCompanyNature = info.jobCompanyNature
this.info.jobCompanyDescription = info.jobCompanyDescription
+ this.info.createDept = [String(info.createDept)]
this.info.callName = info.callName
this.info.callTel = info.callTel
this.info.callNumber = info.callNumber
@@ -658,6 +681,7 @@
}
params.lon = that.longitude
params.lat = that.latitude
+ params.createDept = params.createDept[0]
submitInfo(params).then(res => {
if (res.data.code == 200) {
that.reset()
@@ -700,6 +724,7 @@
'jobCompanyIndustry',
'jobCompanyNature',
'jobCompanyDescription',
+ "createDept",
'callName',
'callTel',
'callNumber',
diff --git a/pages/recruit/subPage/work.vue b/pages/recruit/subPage/work.vue
index 20225dc..e986039 100644
--- a/pages/recruit/subPage/work.vue
+++ b/pages/recruit/subPage/work.vue
@@ -105,6 +105,11 @@
+
+
+
@@ -177,7 +182,8 @@
submitInfo,
getWorktypesBaseList,
findTradeList,
- getDictionary
+ getDictionary,
+ getDeptAllTree
} from '@/api/userrecruit.js'
import PickerTree from './enterpriceCertification/pickerTree.vue'
import {
@@ -186,6 +192,7 @@
export default {
data() {
return {
+ deptTreeData: [],
latitude: 31.05, //中心点
longitude: 104.20,
covers: [{ //marker标记位置
@@ -384,6 +391,12 @@
message: '请输入详细地址',
trigger: ['change']
},
+ createDept: {
+ type: 'array',
+ required: true,
+ message: '请选择所属社区',
+ trigger: ['change']
+ }
},
}
},
@@ -412,6 +425,7 @@
this.info.wageUnitCategory = staId
this.info.wageUnitCategoryName = staLabel
console.log(this.area)
+ this.getTreeDept()
this.getWorkTypes()
this.dictionary()
if (this.company) {
@@ -419,6 +433,12 @@
}
},
methods: {
+ async getTreeDept() {
+ let resData = await getDeptAllTree()
+ if (resData.data.code === 200) {
+ this.deptTreeData = resData.data.data
+ }
+ },
onBlurWage(value) {
const val = this.wallMaxAndMin
if (!val.length) {
@@ -468,6 +488,7 @@
this.info.jobCompanyNature = info.jobCompanyNature
this.info.jobCompanyDescription = info.jobCompanyDescription
this.info.callName = info.callName
+ this.info.createDept = [String(info.createDept)]
this.info.callTel = info.callTel
this.info.callNumber = info.callNumber
this.info.address = info.address
@@ -648,6 +669,7 @@
}
params.lon = that.longitude
params.lat = that.latitude
+ params.createDept = params.createDept[0]
submitInfo(params).then(res => {
if (res.data.code == 200) {
that.reset()
@@ -701,6 +723,7 @@
'jobCompanyNature',
'jobCompanyDescription',
'callName',
+ 'createDept',
'callTel',
'callNumber',
'address'
diff --git a/uni_modules/custom-tree-select/changelog.md b/uni_modules/custom-tree-select/changelog.md
new file mode 100644
index 0000000..a74dfa5
--- /dev/null
+++ b/uni_modules/custom-tree-select/changelog.md
@@ -0,0 +1,187 @@
+## 4.1.0(2023-10-22)
+- 修复小程序端无法移除已选项问题
+- 修复小程序端异步加载节点不可用问题
+- 增加点击左侧箭头同样可以展开元素
+## 4.0.0(2023-09-17)
+- 调整 v-model 传参类型,为适应数值和字符串同时存在的树形数据
+## 3.8.4(2023-09-17)
+- 支持动态加载节点
+## 3.8.3(2023-09-17)
+- 文档更新
+## 3.8.2(2023-09-17)
+- 新增路径模式吗,解决重名选项无法辨认问题
+## 3.8.1(2023-08-06)
+- 修复加载选择器数据后,选择框没有数据问题
+## 3.8.0(2023-07-29)
+- 修复父子联动状态下,数据回显父级半选状态不展示问题
+- selectChange 返回数据调整
+- 新增 contentHeight 、disabledList 属性
+- 文档更新
+## 3.7.9(2023-07-11)
+- 文档更新
+## 3.7.8(2023-07-10)
+- 修复父元素未完全选中状态显示异常问题
+## 3.7.7(2023-07-07)
+- 文档更新
+## 3.7.6(2023-07-07)
+- 重写checkbox,解决与colorui样式冲突问题
+- 父级添加子级未全选状态,更直观了解选中数据情况
+- 样式优化,提取文件内样式变量
+- 代码体积优化
+## 3.7.5(2023-05-15)
+- 修复visible在数据初始化时配置有时失效问题
+## 3.7.4(2023-05-11)
+- 修复父元素下某个子元素设置隐藏时,父子联动状态异常问题
+- 对性能以及代码体积做了进一步优化
+## 3.7.3(2023-05-08)
+- 修复子元素展开懒加载功能被覆盖问题
+- 优化数据初始化速度
+## 3.7.2(2023-05-04)
+- uni.$emit 替换 bus事件
+## 3.7.1(2023-04-10)
+- 解决小程序无法折叠或展开问题
+## 3.7.0(2023-04-09)
+- 全选默认不开启,并且只在多选模式下生效
+## 3.6.91(2023-04-09)
+- 文档更新
+## 3.6.9(2023-04-09)
+- 代码整体优化
+- 新增弹窗安全区配置选项
+- 新增全选功能配置选项
+- 新增搜索框清除按钮是否直接重置搜索结果选项
+- 遗留问题:小程序端搜索后无法折叠或打开
+## 3.6.8(2023-04-07)
+- 优化deepClone
+## 3.6.7(2023-04-03)
+- 取消对微信小程序的支持
+## 3.6.6(2023-04-03)
+- 修复listData刷新后,不能正确渲染勾选状态问题
+## 3.6.5(2023-03-30)
+- 修复小程序节点展开或折叠时指示箭头不变换状态
+- 修复回显数据有时不展示问题
+## 3.6.3(2023-03-27)
+- [紧急] 修复单选状态仍可以多选bug
+## 3.6.2(2023-03-27)
+- 修复偶尔出现节点无法根据绑定数据改变选中状态问题
+## 3.6.1(2023-03-24)
+- 修复引入问题
+## 3.6.0(2023-03-24)
+- 重构去除冗余代码,功能不变
+## 3.5.0(2023-03-23)
+- 修复没有子元素时点击报错问题
+## 3.3.9(2023-03-22)
+- 解决搜索时 toLowerCase 报错问题
+## 3.3.8(2023-03-22)
+- 懒加载优化
+## 3.3.7(2023-03-20)
+- 样式更新
+## 3.3.6(2023-03-20)
+- 修复子元素折叠或展开不触发问题
+## 3.3.5(2023-03-15)
+- isArray 替换 instanceof
+## 3.3.4(2023-03-11)
+- 修复搜索后无法展开或折叠问题
+- 搜索后直接展开搜索项
+## 3.3.3(2023-03-06)
+- 优化展示效果
+- 添加引导线选项
+## 3.3.2(2023-02-22)
+- 修复搜索内容包含隐藏数据的问题
+- 优化搜索触发方式
+## 3.3.1(2023-02-16)
+- 修复异常
+## 3.2.9(2023-02-16)
+- 修复编译到小程序报错问题
+## 3.2.8(2023-02-16)
+- 修复多个组件key重复问题
+## 3.2.7(2023-02-16)
+- 全新底层架构设计
+- 修改默认配色,更显成熟稳重
+## 3.2.6(2023-02-15)
+- 修改文档
+## 3.2.5(2023-02-15)
+- 文档修改
+## 3.2.3(2023-02-15)
+- 修复小程序组件无法折叠问题
+## 3.2.2(2023-02-10)
+- 文档更新
+## 3.2.1(2023-02-09)
+- 增加节点展开和关闭全局配置
+- 修复搜索后数据无法展开和关闭问题
+- 修复搜索后不能自动滚动到顶部问题
+## 3.2.0(2023-01-16)
+- 修复事件冲突
+## 3.1.5(2023-01-13)
+- 样式调整
+## 3.1.4(2023-01-13)
+- 样式修复
+## 3.1.3(2023-01-13)
+- 文档更新
+## 3.1.2(2023-01-13)
+- 修复一些已知问题
+## 3.1.1(2023-01-12)
+- 解决微信小程序bus事件冲突问题
+## 3.1.0(2023-01-11)
+- 支持微信小程序
+## 3.0.3(2023-01-10)
+- 更新文档
+## 3.0.2(2023-01-09)
+- 修复了一些已知问题
+## 3.0.1(2023-01-09)
+- 修复了一些已知问题
+## 3.0.0(2023-01-09)
+- 全面支持懒加载,大量数据也能快速打开
+## 2.0.01(2022-12-29)
+- 文档修改
+## 2.0.0(2022-12-28)
+- 添加搜索功能
+- 完善文档
+## 1.9.2(2022-12-14)
+- 修复了一些已知问题
+## 1.9.1(2022-12-14)
+- 修复了一些已知问题
+## 1.9.0(2022-12-14)
+- 增加选项禁用、隐藏功能
+- 文档添加示例
+## 1.8.4(2022-12-13)
+- 文档修复
+## 1.8.3(2022-12-09)
+- 样式调整
+## 1.8.2(2022-12-07)
+- 修复弹窗不同设备显示高度问题
+## 1.8.1(2022-12-06)
+- 修复了一些已知问题
+## 1.8.0(2022-12-05)
+- 修复了一些已知问题
+- 图标替换图片
+## 1.7.0(2022-12-05)
+- 增加 disabled 属性,适用于查看页面
+- 修复了一些已知问题
+## 1.6.0(2022-12-05)
+- 修复了一些已知问题
+## 1.5.0(2022-12-05)
+- 根据绑定数据类型自动判断返回值类型
+- 完善文档
+## 1.4.0(2022-12-02)
+- 修复了一些已知问题
+## 1.3.1(2022-12-02)
+- 修复了一些已知问题
+## 1.3.0(2022-12-02)
+- 修复了一些已知问题
+## 1.2.01(2022-12-02)
+- 文档更新
+## 1.2.0(2022-12-02)
+- 添加一键清除功能
+- 添加多选、单选功能
+## 1.1.0(2022-12-02)
+- 支持数据回显、已选数据移除
+- 对标 uni-easyinput 默认样式
+- 支持更多属性和事件
+## 1.0.3(2022-12-01)
+- 修改信息
+## 1.0.2(2022-12-01)
+- 更新文档
+## 1.0.1(2022-12-01)
+- 更新预览截图
+## 1.0.0(2022-12-01)
+- 插件更新
diff --git a/uni_modules/custom-tree-select/components/custom-tree-select/custom-tree-select.vue b/uni_modules/custom-tree-select/components/custom-tree-select/custom-tree-select.vue
new file mode 100644
index 0000000..cc28a50
--- /dev/null
+++ b/uni_modules/custom-tree-select/components/custom-tree-select/custom-tree-select.vue
@@ -0,0 +1,983 @@
+
+
+
+
+
+
+
+ {{ pathMode ? item.path : item[dataLabel] }}
+
+
+
+
+
+
+
+ {{ placeholder }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/custom-tree-select/components/custom-tree-select/data-select-item.vue b/uni_modules/custom-tree-select/components/custom-tree-select/data-select-item.vue
new file mode 100644
index 0000000..08be717
--- /dev/null
+++ b/uni_modules/custom-tree-select/components/custom-tree-select/data-select-item.vue
@@ -0,0 +1,363 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ node[dataLabel] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/custom-tree-select/components/custom-tree-select/utils.js b/uni_modules/custom-tree-select/components/custom-tree-select/utils.js
new file mode 100644
index 0000000..e6a3560
--- /dev/null
+++ b/uni_modules/custom-tree-select/components/custom-tree-select/utils.js
@@ -0,0 +1,17 @@
+export function isString(data) {
+ return typeof data === 'string'
+}
+
+// 分页
+export function paging(data, PAGENUM = 50) {
+ if (!Array.isArray(data) || !data.length) return data
+ const pages = []
+ data.forEach((item, index) => {
+ const i = Math.floor(index / PAGENUM)
+ if (!pages[i]) {
+ pages[i] = []
+ }
+ pages[i].push(item)
+ })
+ return pages
+}
diff --git a/uni_modules/custom-tree-select/package.json b/uni_modules/custom-tree-select/package.json
new file mode 100644
index 0000000..bea8e65
--- /dev/null
+++ b/uni_modules/custom-tree-select/package.json
@@ -0,0 +1,83 @@
+{
+ "id": "custom-tree-select",
+ "displayName": "custom-tree-select树形选择器支持v-model",
+ "version": "4.1.0",
+ "description": "树形选择器基于uni-ui,v-model绑定数据,父级可选、数据回显、移除选项",
+ "keywords": [
+ "custom",
+ "tree-select",
+ "选择器",
+ "树形选择器"
+],
+ "repository": "https://github.com/qzlthxp/custom-tree-select",
+"engines": {
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "插件不采集任何数据",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "u"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "u"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "u",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "u",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/custom-tree-select/readme.md b/uni_modules/custom-tree-select/readme.md
new file mode 100644
index 0000000..e1f9501
--- /dev/null
+++ b/uni_modules/custom-tree-select/readme.md
@@ -0,0 +1,228 @@
+# custom-tree-select 使用指南
+
+找工作中…,大佬们有内推加群联系我
+
+**提示:** 使用该插件前确保你已经导入 `uni-popup` `uni-icons` `uni-easyinput` 插件。
+
+当前插件主要作为表单中选择器来使用,如果只是作为弹窗会出现数据状态无法重置,此时推荐使用 [`custom-tree-popup`](https://ext.dcloud.net.cn/plugin?name=custom-tree-popup) 组件。
+
+**如果在微信小程序中使用,在 `main.js` 文件中添加以下代码,2023/05/04 之前安装插件或者本地插件版本 `<=3.7.1` 需要添加**
+
+```js
+// #ifdef MP-WEIXIN
+Vue.prototype.$bus = new Vue()
+// #endif
+```
+
+**有问题可以加 QQ 群:297080738**
+
+## 优势
+
+💪:基于 `uni-popup`、 `uni-icons`、 `uni-easyinput` 插件进行开发,默认样式与 `uni-easyinput` 样式对标。
+
+⚡:全面支持懒加载应对大量数据。
+
+🚀:v-model 绑定数据、数据回显、移除选项。
+
+⚙ :提供更多配置项。
+
+📦:开箱即用。
+
+## Props
+
+| 属性名 | 类型 | 默认值 | 说明 | 版本要求 |
+| :-------------------: | :---------: | :-----------------------------: | :----------------------------------------------------------: | --------- |
+| canSelectAll | Boolean | false | 开启一键全选功能 | |
+| contentHeight | String | '500px' \| 视窗高度的 75%的像素 | 弹出内选择器容器高度,为解决搜索时搜索框被顶出屏幕,监听输入框 focus 事件 动态修改弹窗内选择器容器高度 | |
+| clearResetSearch | Boolean | false | 设置为 `true` 并且搜索之后,点击输入框清除按钮,会清空搜索内容并且会直接重置整个弹窗内树形选择器内容,默认情况下只有清除之后再次进行查询才会重置选择器 | |
+| animation | Boolean | ture | 是否开启弹窗动画 | |
+| is-mask-click | Boolean | true | 点击遮罩关闭弹窗 | |
+| mask-background-color | String | rgba(0,0,0,0.4) | 蒙版颜色,建议使用 rgba 颜色值 | |
+| background-color | String | none | 主窗口背景色 | |
+| safe-area | Boolean | true | 是否适配底部安全区 | |
+| **choseParent** | **Boolean** | **true** | **父节点是否可选** | |
+| **linkage** | **Boolean** | **false** | **父子节点是否联动** | |
+| placeholder | String | 请选择 | 空状态信息提示、弹窗标题 | |
+| confirmText | String | 完成 | 确定按钮文字 | |
+| confirmTextColor | String | #007aff | 确定按钮文字颜色 | |
+| listData | Array | - | 展示的数据 | |
+| **dataLabel** | **String** | **name** | **listData 中对应数据的 label** | |
+| **dataValue** | **String** | **id** | **listData 中对应数据的 value** | |
+| **dataChildren** | **String** | **children** | **listData 中对应数据的 children** | |
+| clearable | Boolean | false | 是否显示清除按钮,点击清除所有已选项 | |
+| **mutiple** | **Boolean** | **false** | **是否可以多选** | |
+| **disabled** | **Boolean** | **false** | **是否允许修改** | |
+| disabledList | Array | [] | 设置某些选项为不可选,数组元素为数据 dataValue 对应的值,也可以操作数据 disabled 属性实现 | |
+| search | Boolean | false | 是否可以搜索(常用于数据较多的情况) | |
+| showChildren | Boolean | false | 默认展开(数据内部 showChildren 属性优先级更高,可以设置全局收起,单独展开某一条数据) | |
+| border | Boolean | false | 显示引导线 | |
+| pathMode | Boolean | false | 路径模式,开启后选择框内展示选项所在层级的完整信息如:`城市/街道/小区` | >= 3.8.2 |
+| pathHyphen | String | / | 路径模式下连字符 | >= 3.8.2 |
+| lazyLoadChildren | Boolean | false | 是否允许动态加载获取子节点 | >= 3.8.4 |
+| load | Function | (node) => Promise | 动态加载函数,具体用法见下方示例 | >= 3.8.4 |
+| **v-model/value** | **Array** | **[ ]** | **已选择的值,通过 v-model 进行绑定,例如:v-model="formData.selectedList"** (根据你绑定数据的类型自动返回相同类型的数据,String 类型通过 `,` 进行分隔。>=4.0.0 版本不在支持字符串类型传参,修改为数组类型) | >= 4.0.0 |
+
+## listdata 特有属性
+
+| 名称 | 类型 | 默认值 | 说明 |
+| ------------ | ------- | ------ | ------------------ |
+| disabled | Boolean | false | 选项是否可选 |
+| visible | Boolean | true | 选项是否展示 |
+| showChildren | Boolean | true | 选项是否展示子节点 |
+
+## Events
+
+| 事件名称 | 说明 | 返回值 |
+| ------------ | ------------------------ | -------------------------------------- |
+| change | 弹窗组件状态发生变化触发 | e={show: true | false, type:当前模式} |
+| maskClick | 点击遮罩层触发 | |
+| input | 选中数据或取消选中时触发 | 以数组形式返回已选择数据 |
+| selectChange | 选中数据或取消选中时触发 | 以数组形式返回已选择数据完整信息 |
+| removeSelect | 选择框移除选项时触发 | 返回对应数据的完整信息 |
+
+## 基础使用示例
+
+```vue
+
+
+
+
+
+
+```
+
+## 禁用某些选项,或隐藏某些选项
+
+```vue
+
+
+
+
+
+
+```
+
+## 动态加载节点
+
+```vue
+
+
+
+```
+
diff --git a/uni_modules/uni-popup/changelog.md b/uni_modules/uni-popup/changelog.md
new file mode 100644
index 0000000..decd775
--- /dev/null
+++ b/uni_modules/uni-popup/changelog.md
@@ -0,0 +1,84 @@
+## 1.9.1(2024-04-02)
+- 修复 uni-popup-dialog vue3下使用value无法进行绑定的bug(双向绑定兼容旧写法)
+## 1.9.0(2024-03-28)
+- 修复 uni-popup-dialog 双向绑定时初始化逻辑修正
+## 1.8.9(2024-03-20)
+- 修复 uni-popup-dialog 数据输入时修正为双向绑定
+## 1.8.8(2024-02-20)
+- 修复 uni-popup 在微信小程序下出现文字向上闪动的bug
+## 1.8.7(2024-02-02)
+- 新增 uni-popup-dialog 新增属性focus:input模式下,是否自动自动聚焦
+## 1.8.6(2024-01-30)
+- 新增 uni-popup-dialog 新增属性maxLength:限制输入框字数
+## 1.8.5(2024-01-26)
+- 新增 uni-popup-dialog 新增属性showClose:控制关闭按钮的显示
+## 1.8.4(2023-11-15)
+- 新增 uni-popup 支持uni-app-x 注意暂时仅支持 `maskClick` `@open` `@close`
+## 1.8.3(2023-04-17)
+- 修复 uni-popup 重复打开时的 bug
+## 1.8.2(2023-02-02)
+- uni-popup-dialog 组件新增 inputType 属性
+## 1.8.1(2022-12-01)
+- 修复 nvue 下 v-show 报错
+## 1.8.0(2022-11-29)
+- 优化 主题样式
+## 1.7.9(2022-04-02)
+- 修复 弹出层内部无法滚动的bug
+## 1.7.8(2022-03-28)
+- 修复 小程序中高度错误的bug
+## 1.7.7(2022-03-17)
+- 修复 快速调用open出现问题的Bug
+## 1.7.6(2022-02-14)
+- 修复 safeArea 属性不能设置为false的bug
+## 1.7.5(2022-01-19)
+- 修复 isMaskClick 失效的bug
+## 1.7.4(2022-01-19)
+- 新增 cancelText \ confirmText 属性 ,可自定义文本
+- 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色
+- 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题
+## 1.7.3(2022-01-13)
+- 修复 设置 safeArea 属性不生效的bug
+## 1.7.2(2021-11-26)
+- 优化 组件示例
+## 1.7.1(2021-11-26)
+- 修复 vuedoc 文字错误
+## 1.7.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-popup](https://uniapp.dcloud.io/component/uniui/uni-popup)
+## 1.6.2(2021-08-24)
+- 新增 支持国际化
+## 1.6.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.6.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.5.0(2021-06-23)
+- 新增 mask-click 遮罩层点击事件
+## 1.4.5(2021-06-22)
+- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
+## 1.4.4(2021-06-18)
+- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
+## 1.4.3(2021-06-08)
+- 修复 错误的 watch 字段
+- 修复 safeArea 属性不生效的问题
+- 修复 点击内容,再点击遮罩无法关闭的Bug
+## 1.4.2(2021-05-12)
+- 新增 组件示例地址
+## 1.4.1(2021-04-29)
+- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题
+## 1.4.0 (2021-04-29)
+- 新增 type 属性的 left\right 值,支持左右弹出
+- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗
+- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色
+- 新增 safeArea 属性,是否适配底部安全区
+- 修复 App\h5\微信小程序底部安全区占位不对的Bug
+- 修复 App 端弹出等待的Bug
+- 优化 提升低配设备性能,优化动画卡顿问题
+- 优化 更简单的组件自定义方式
+## 1.2.9(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+## 1.2.8(2021-02-05)
+- 调整为uni_modules目录规范
+## 1.2.7(2021-02-05)
+- 调整为uni_modules目录规范
+- 新增 支持 PC 端
+- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端
diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js
new file mode 100644
index 0000000..a747b9f
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js
@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+ name: 'Keypress',
+ props: {
+ disable: {
+ type: Boolean,
+ default: false
+ }
+ },
+ mounted () {
+ const keyNames = {
+ esc: ['Esc', 'Escape'],
+ tab: 'Tab',
+ enter: 'Enter',
+ space: [' ', 'Spacebar'],
+ up: ['Up', 'ArrowUp'],
+ left: ['Left', 'ArrowLeft'],
+ right: ['Right', 'ArrowRight'],
+ down: ['Down', 'ArrowDown'],
+ delete: ['Backspace', 'Delete', 'Del']
+ }
+ const listener = ($event) => {
+ if (this.disable) {
+ return
+ }
+ const keyName = Object.keys(keyNames).find(key => {
+ const keyName = $event.key
+ const value = keyNames[key]
+ return value === keyName || (Array.isArray(value) && value.includes(keyName))
+ })
+ if (keyName) {
+ // 避免和其他按键事件冲突
+ setTimeout(() => {
+ this.$emit(keyName, {})
+ }, 0)
+ }
+ }
+ document.addEventListener('keyup', listener)
+ this.$once('hook:beforeDestroy', () => {
+ document.removeEventListener('keyup', listener)
+ })
+ },
+ render: () => {}
+}
+// #endif
diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
new file mode 100644
index 0000000..e42bfaf
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
@@ -0,0 +1,316 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
new file mode 100644
index 0000000..7f27a1e
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
new file mode 100644
index 0000000..7a98a31
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
@@ -0,0 +1,187 @@
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/en.json b/uni_modules/uni-popup/components/uni-popup/i18n/en.json
new file mode 100644
index 0000000..8c0f5f3
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/en.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "cancel",
+ "uni-popup.ok": "ok",
+ "uni-popup.placeholder": "pleace enter",
+ "uni-popup.title": "Hint",
+ "uni-popup.shareTitle": "Share to"
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/index.js b/uni_modules/uni-popup/components/uni-popup/i18n/index.js
new file mode 100644
index 0000000..fa8f0f3
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
new file mode 100644
index 0000000..8e5b99f
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "取消",
+ "uni-popup.ok": "确定",
+ "uni-popup.placeholder": "请输入",
+ "uni-popup.title": "提示",
+ "uni-popup.shareTitle": "分享到"
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
new file mode 100644
index 0000000..06ce162
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "取消",
+ "uni-popup.ok": "確定",
+ "uni-popup.placeholder": "請輸入",
+ "uni-popup.title": "提示",
+ "uni-popup.shareTitle": "分享到"
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/keypress.js b/uni_modules/uni-popup/components/uni-popup/keypress.js
new file mode 100644
index 0000000..16a5818
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/keypress.js
@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+ name: 'Keypress',
+ props: {
+ disable: {
+ type: Boolean,
+ default: false
+ }
+ },
+ mounted () {
+ const keyNames = {
+ esc: ['Esc', 'Escape'],
+ tab: 'Tab',
+ enter: 'Enter',
+ space: [' ', 'Spacebar'],
+ up: ['Up', 'ArrowUp'],
+ left: ['Left', 'ArrowLeft'],
+ right: ['Right', 'ArrowRight'],
+ down: ['Down', 'ArrowDown'],
+ delete: ['Backspace', 'Delete', 'Del']
+ }
+ const listener = ($event) => {
+ if (this.disable) {
+ return
+ }
+ const keyName = Object.keys(keyNames).find(key => {
+ const keyName = $event.key
+ const value = keyNames[key]
+ return value === keyName || (Array.isArray(value) && value.includes(keyName))
+ })
+ if (keyName) {
+ // 避免和其他按键事件冲突
+ setTimeout(() => {
+ this.$emit(keyName, {})
+ }, 0)
+ }
+ }
+ document.addEventListener('keyup', listener)
+ // this.$once('hook:beforeDestroy', () => {
+ // document.removeEventListener('keyup', listener)
+ // })
+ },
+ render: () => {}
+}
+// #endif
diff --git a/uni_modules/uni-popup/components/uni-popup/popup.js b/uni_modules/uni-popup/components/uni-popup/popup.js
new file mode 100644
index 0000000..a37fb9f
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/popup.js
@@ -0,0 +1,26 @@
+
+export default {
+ data() {
+ return {
+
+ }
+ },
+ created(){
+ this.popup = this.getParent()
+ },
+ methods:{
+ /**
+ * 获取父元素实例
+ */
+ getParent(name = 'uniPopup') {
+ let parent = this.$parent;
+ let parentName = parent.$options.name;
+ while (parentName !== name) {
+ parent = parent.$parent;
+ if (!parent) return false
+ parentName = parent.$options.name;
+ }
+ return parent;
+ },
+ }
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue b/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue
new file mode 100644
index 0000000..5eb8d5b
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/uni-popup/components/uni-popup/uni-popup.vue b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue
new file mode 100644
index 0000000..8349e99
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue
@@ -0,0 +1,503 @@
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/package.json b/uni_modules/uni-popup/package.json
new file mode 100644
index 0000000..3cfa384
--- /dev/null
+++ b/uni_modules/uni-popup/package.json
@@ -0,0 +1,88 @@
+{
+ "id": "uni-popup",
+ "displayName": "uni-popup 弹出层",
+ "version": "1.9.1",
+ "description": " Popup 组件,提供常用的弹层",
+ "keywords": [
+ "uni-ui",
+ "弹出层",
+ "弹窗",
+ "popup",
+ "弹框"
+ ],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss",
+ "uni-transition"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y",
+ "alipay": "n"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-popup/readme.md b/uni_modules/uni-popup/readme.md
new file mode 100644
index 0000000..fdad4b3
--- /dev/null
+++ b/uni_modules/uni-popup/readme.md
@@ -0,0 +1,17 @@
+
+
+## Popup 弹出层
+> **组件名:uni-popup**
+> 代码块: `uPopup`
+> 关联组件:`uni-transition`
+
+
+弹出层组件,在应用中弹出一个消息提示窗口、提示框等
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
+
+
+
diff --git a/uni_modules/uni-transition/changelog.md b/uni_modules/uni-transition/changelog.md
new file mode 100644
index 0000000..faaf336
--- /dev/null
+++ b/uni_modules/uni-transition/changelog.md
@@ -0,0 +1,24 @@
+## 1.3.3(2024-04-23)
+- 修复 当元素会受变量影响自动隐藏的bug
+## 1.3.2(2023-05-04)
+- 修复 NVUE 平台报错的问题
+## 1.3.1(2021-11-23)
+- 修复 init 方法初始化问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition)
+## 1.2.1(2021-09-27)
+- 修复 init 方法不生效的 Bug
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.1(2021-05-12)
+- 新增 示例地址
+- 修复 示例项目缺少组件的 Bug
+## 1.1.0(2021-04-22)
+- 新增 通过方法自定义动画
+- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式
+- 优化 动画触发逻辑,使动画更流畅
+- 优化 支持单独的动画类型
+- 优化 文档示例
+## 1.0.2(2021-02-05)
+- 调整为 uni_modules 目录规范
diff --git a/uni_modules/uni-transition/components/uni-transition/createAnimation.js b/uni_modules/uni-transition/components/uni-transition/createAnimation.js
new file mode 100644
index 0000000..8f89b18
--- /dev/null
+++ b/uni_modules/uni-transition/components/uni-transition/createAnimation.js
@@ -0,0 +1,131 @@
+// const defaultOption = {
+// duration: 300,
+// timingFunction: 'linear',
+// delay: 0,
+// transformOrigin: '50% 50% 0'
+// }
+// #ifdef APP-NVUE
+const nvueAnimation = uni.requireNativePlugin('animation')
+// #endif
+class MPAnimation {
+ constructor(options, _this) {
+ this.options = options
+ // 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误
+ this.animation = uni.createAnimation({
+ ...options
+ })
+ this.currentStepAnimates = {}
+ this.next = 0
+ this.$ = _this
+
+ }
+
+ _nvuePushAnimates(type, args) {
+ let aniObj = this.currentStepAnimates[this.next]
+ let styles = {}
+ if (!aniObj) {
+ styles = {
+ styles: {},
+ config: {}
+ }
+ } else {
+ styles = aniObj
+ }
+ if (animateTypes1.includes(type)) {
+ if (!styles.styles.transform) {
+ styles.styles.transform = ''
+ }
+ let unit = ''
+ if(type === 'rotate'){
+ unit = 'deg'
+ }
+ styles.styles.transform += `${type}(${args+unit}) `
+ } else {
+ styles.styles[type] = `${args}`
+ }
+ this.currentStepAnimates[this.next] = styles
+ }
+ _animateRun(styles = {}, config = {}) {
+ let ref = this.$.$refs['ani'].ref
+ if (!ref) return
+ return new Promise((resolve, reject) => {
+ nvueAnimation.transition(ref, {
+ styles,
+ ...config
+ }, res => {
+ resolve()
+ })
+ })
+ }
+
+ _nvueNextAnimate(animates, step = 0, fn) {
+ let obj = animates[step]
+ if (obj) {
+ let {
+ styles,
+ config
+ } = obj
+ this._animateRun(styles, config).then(() => {
+ step += 1
+ this._nvueNextAnimate(animates, step, fn)
+ })
+ } else {
+ this.currentStepAnimates = {}
+ typeof fn === 'function' && fn()
+ this.isEnd = true
+ }
+ }
+
+ step(config = {}) {
+ // #ifndef APP-NVUE
+ this.animation.step(config)
+ // #endif
+ // #ifdef APP-NVUE
+ this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config)
+ this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin
+ this.next++
+ // #endif
+ return this
+ }
+
+ run(fn) {
+ // #ifndef APP-NVUE
+ this.$.animationData = this.animation.export()
+ this.$.timer = setTimeout(() => {
+ typeof fn === 'function' && fn()
+ }, this.$.durationTime)
+ // #endif
+ // #ifdef APP-NVUE
+ this.isEnd = false
+ let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref
+ if(!ref) return
+ this._nvueNextAnimate(this.currentStepAnimates, 0, fn)
+ this.next = 0
+ // #endif
+ }
+}
+
+
+const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d',
+ 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY',
+ 'translateZ'
+]
+const animateTypes2 = ['opacity', 'backgroundColor']
+const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom']
+animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => {
+ MPAnimation.prototype[type] = function(...args) {
+ // #ifndef APP-NVUE
+ this.animation[type](...args)
+ // #endif
+ // #ifdef APP-NVUE
+ this._nvuePushAnimates(type, args)
+ // #endif
+ return this
+ }
+})
+
+export function createAnimation(option, _this) {
+ if(!_this) return
+ clearTimeout(_this.timer)
+ return new MPAnimation(option, _this)
+}
diff --git a/uni_modules/uni-transition/components/uni-transition/uni-transition.vue b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue
new file mode 100644
index 0000000..f3ddd1f
--- /dev/null
+++ b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-transition/package.json b/uni_modules/uni-transition/package.json
new file mode 100644
index 0000000..d5c20e1
--- /dev/null
+++ b/uni_modules/uni-transition/package.json
@@ -0,0 +1,85 @@
+{
+ "id": "uni-transition",
+ "displayName": "uni-transition 过渡动画",
+ "version": "1.3.3",
+ "description": "元素的简单过渡动画",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "动画",
+ "过渡",
+ "过渡动画"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+"dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y",
+ "alipay": "n"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-transition/readme.md b/uni_modules/uni-transition/readme.md
new file mode 100644
index 0000000..2f8a77e
--- /dev/null
+++ b/uni_modules/uni-transition/readme.md
@@ -0,0 +1,11 @@
+
+
+## Transition 过渡动画
+> **组件名:uni-transition**
+> 代码块: `uTransition`
+
+
+元素过渡动画
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file