diff --git a/.editorconfig b/.editorconfig index 1b019118..bfe62370 100644 --- a/.editorconfig +++ b/.editorconfig @@ -5,7 +5,7 @@ root = true # all files [*] charset = utf-8 -indent_style = space +indent_style = tab indent_size = 4 end_of_line = lf insert_final_newline = true diff --git a/.gitignore b/.gitignore index 8a8505b3..8ff30f3a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ unpackage/ .DS_Store wxcomponents/**/*.vue wxcomponents/**/*.css +.hbuilderx/ \ No newline at end of file diff --git a/App.vue b/App.vue index 6bcf3956..ce99d18d 100644 --- a/App.vue +++ b/App.vue @@ -1,94 +1,138 @@ - + /* #endif*/ + diff --git a/README.md b/README.md index ade675ca..17bb22bc 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,127 @@ # hello-uniapp -`uni-app`框架示例,一套代码,同时发行到iOS、Android、H5、小程序等多个平台,请使用手机扫码快速体验`uni-app`的强大功能。 +`uni-app`框架示例,一套代码,同时发行到iOS、Android、H5、小程序等多个平台,请使用手机在下方扫码快速体验`uni-app`的强大功能。[官方文档](https://uniapp.dcloud.net.cn/) -

- - - -

+## 快速上手 +hello-uniapp 示例工程可以通过两种方式创建, 一种是 HBuilderX, 配套 IDE,集成开发;另一种是 CLI 创建;推荐前者。 +### 通过 HBuilderX 可视化界面创建(推荐) + +可视化的方式比较简单,HBuilderX内置相关环境,开箱即用,无需配置nodejs。 + +开始之前,开发者需先下载安装如下工具: + +- HBuilderX:[官方IDE下载地址](https://www.dcloud.io/hbuilderx.html) + +HBuilderX是通用的前端开发工具,但为`uni-app`做了特别强化,请下载App开发版。 + +由于截图在 github 不便浏览,参见官方文档 [HBuilderX 可视化界面创建](https://uniapp.dcloud.net.cn/quickstart?id=_1-%e9%80%9a%e8%bf%87-hbuilderx-%e5%8f%af%e8%a7%86%e5%8c%96%e7%95%8c%e9%9d%a2) + +### 通过 vue-cli 创建 + +``` +npm install -g @vue/cli +``` + +#### 创建uni-app + +**使用正式版**(对应HBuilderX最新正式版) + +``` +vue create -p dcloudio/uni-preset-vue my-project +``` + +**使用alpha版**(对应HBuilderX最新alpha版) + +``` +vue create -p dcloudio/uni-preset-vue#alpha my-alpha-project +``` + +此时,会提示选择项目模板,选择 `hello uni-app` 项目模板,如下所示: + +
+ +
+ +创建好后,进入项目目录 +``` +cd my-project +``` + +执行该命令运行到 h5 端 +``` +npm run dev:h5 +``` + +欢迎提 issues,推荐到[官方社区](https://ask.dcloud.net.cn/explore/)提问。 + +## 扫码体验 + +
+

一套代码编到10个平台,这不是梦想。眼见为实,扫描10个二维码,亲自体验最全面的跨平台效果!

+
+ +
+ +
+ Android版 +
+ +
+ +
+ iOS版 +
+ +
+ +
+ H5版 +
+ +
+ 微信小程序版 +
+ +
+ 支付宝小程序版 +
+
+
+ +
+ 百度小程序版 +
+ +
+ +
+ 字节跳动小程序版 +
+ +
+ +
+ QQ小程序版 +
+ +
+ +
+ 快应用 +
+ +
+ +
+ 360小程序 +
+
+

+ 注:某些平台不能提交简单demo,故补充了一些其他功能;hello uni-app示例代码可从[github](https://github.com/dcloudio/hello-uniapp)获取
+ 快应用仅支持 vivo 、oppo、华为
+ 360小程序仅 windows平台支持,需要在360浏览器中打开
+

+
`uni-app`官网文档详见[https://uniapp.dcloud.io](https://uniapp.dcloud.io) diff --git a/changelog.md b/changelog.md new file mode 100644 index 00000000..24de90db --- /dev/null +++ b/changelog.md @@ -0,0 +1,186 @@ +## 3.4.9(2025-06-25) +- 适配 鸿蒙元服务 +- 更新 uni-swipe-action +- 新增 crypto 示例和测试例 +- 新增 css 变量示例和测试例 +- 新增 web-view点击位置偏移测试例 +## 3.4.8(2025-04-10) +- 调整 renderjs示例的平台兼容性 +## 3.4.7(2025-01-08) +- 新增 uni-calendar显示 +- 更新 uniui 组件 +- 更新uni-id至3.3.33版本 +- 替换示例中失效图片资源地址 +## 3.4.6(2023-06-30) +- 更新 video组件引用的视频链接 +## 3.4.4(2022-07-25) +- 新增 同步 uni-ui@1.4.20 + - uni-forms 【重要】组件逻辑重构,部分用法旧版本不兼容,请注意兼容问题 + - uni-section 新增组件 +## 3.4.3(2022-07-14) +- 修复 HBuilderX 拉取 hello uni-app 项目直接运行提示无服务空间关联的bug +## 3.4.2(2022-07-06) +- 新增 同步 uni-ui@1.4.18 + - uni-forms 【重要】组件逻辑重构,部分用法旧版本不兼容,请注意兼容问题 + - uni-forms 【重要】组件使用 Provide/Inject 方式注入依赖,提供了自定义表单组件调用 uni-forms 校验表单的能力 + - uni-forms 新增 更多表单示例 + - uni-forms 新增 model 属性,等同于原 value/modelValue 属性,旧属性即将废弃 + - uni-forms 新增 validateTrigger 属性的 blur 值,仅 uni-easyinput 生效 + - uni-forms 新增 onFieldChange 方法,可以对子表单进行校验,可替代binddata方法 + - uni-forms 新增 子表单的 setRules 方法,配合自定义校验函数使用 + - uni-forms 新增 uni-forms-item 的 setRules 方法,配置动态表单使用可动态更新校验规则 + - uni-forms 修复 由 1.4.0 引发的 label 插槽不生效的bug + - uni-forms 修复 子组件找不到 setValue 报错的bug + - uni-forms 修复 uni-data-picker 在 uni-forms-item 中报错的bug + - uni-forms 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug + - uni-forms 修复 表单校验顺序无序问题 + - uni-forms 优化 子表单组件uni-datetime-picker、uni-data-select、uni-data-picker的显示样式 + - uni-forms 优化 动态表单校验方式,废弃拼接name的方式 + - uni-breadcrumb 修复 微信小程序 separator 不显示问题 + - uni-data-checkbox 优化 在 uni-forms 中的依赖注入方式 + - uni-data-picker 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug + - uni-data-picker 优化 显示样式 + - uni-data-select 优化 显示样式 + - uni-datetime-picker 修复 日历顶部年月及底部确认未国际化 bug + - uni-datetime-picker 优化 组件样式,调整了组件图标大小、高度、颜色等,与uni-ui风格保持一致 + - uni-easyinput 新增 在 uni-forms 1.4.0 中使用可以在 blur 时校验内容 + - uni-easyinput 新增 clear 事件,点击右侧叉号图标触发 + - uni-easyinput 新增 change 事件 ,仅在输入框失去焦点或用户按下回车时触发 + - uni-easyinput 优化 组件样式,组件获取焦点时高亮显示,图标颜色调整等 + - uni-easyinput 优化 clearable 显示策略 + - uni-file-picker 修复 在uni-forms下样式不生效的bug + - uni-nav-bar 修复 组件示例中插槽用法无法显示内容的bug + - uni-swipe-action 修复 vue3 下使用组件不能正常运行的Bug + - uni-swipe-action 修复 h5端点击click触发两次的Bug + - uni-table 修复 微信小程序存在无使用组件的问题 +## 3.4.1(2022-06-30) +- 新增 支持 ios 安全区 +## 3.3.8(2022-05-08) +- 新增 同步 uni-ui@1.4.15 + - uni-data-picker 修复 字节小程序 本地数据无法选择下一级的Bug + - uni-data-select 新增 记住上次的选项(仅 collection 存在时有效) + - uni-search-bar 修复 vue3 input 事件不生效的bug + - uni-search-bar 修复 多余代码导致的bug + - uni-tooltip 更新 text 属性变更为 content + - uni-tooltip 更新 移除 width 属性 + - uni-tooltip 修复 组件根 text 嵌套组件 warning +## 3.3.7(2022-04-06) +- 新增 更新扩展组件 uni-nav-bar、uni-list 的展示页面 +## 3.3.6(2022-03-31) +- 更新 uni-ui 组件及示例 +## 3.3.5(2022-03-30) +- 修复 插槽兼容 vue3, slot -> v-slot +- 新增 更新 uni-ui +## 3.3.4(2022-02-25) +- 修复 编译到 App 平台的控制台报错 +## 3.3.3(2022-02-23) +- 修复 模板城市选择 vue3 报错的bug +- 修复 删除 map.nvue 中多余的 enableOverlooking 变量 +- 修复 swipe-dot.nvue 中条件编译媒体查询 +## 3.3.2(2022-01-26) +- 修复 默认运行到 vue2 +## 3.3.1(2022-01-26) +- 新增 同步 uni-ui@1.4.11 + - uni-collapse 修复 微信小程序resize后组件收起的bug + - uni-countdown 修复 在微信小程序中样式不生效的bug + - uni-countdown 新增 update 方法 ,在动态更新时间后,刷新组件 + - uni-load-more 新增 showText属性 ,是否显示文本 + - uni-load-more 修复 nvue 平台下不显示文本的bug + - uni-load-more 修复 微信小程序平台样式选择器报警告的问题 + - uni-nav-bar 修复 在vue下,标题不垂直居中的bug + - uni-nav-bar 修复 height 属性类型错误 + - uni-nav-bar 新增 height 属性,可修改组件高度 + - uni-nav-bar 新增 dark 属性可可开启暗黑模式 + - uni-nav-bar 优化 标题字数过多显示省略号 + - uni-nav-bar 优化 插槽,插入内容可完全覆盖 + - uni-popup 修复 isMaskClick 失效的bug + - uni-popup 新增 cancelText \ confirmText 属性 ,可自定义文本 + - uni-popup 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色 + - uni-popup 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题 +## 3.3.0(2022-01-04) +- 修复 开发时在 vue3 下由 pc 端切换到手机端,不能返回上一级页面的 bug +- 优化 去掉 pc 端 topwindow 右上角用于演示的 url 导航 +## 3.2.12(2021-12-20) +- 新增 适配京东小程序 +## 3.2.11(2021-12-07) +- 修复 uni-ui 在 hello-uniapp 中丢失图标、ui 受到公共样式影响等问题 +- 修复 微信登录取值报错的问题 +## 3.2.10(2021-11-30) +- 修复 map 组件示例不显示的 bug +## 3.2.9(2021-11-19) +- 新增 uni-ui 以 uni_modules 方式引入,方便开发者从 hello-uniapp 中 copy 组件及示例 +- 优化 uni-ui 示例页面,完善组件示例 +## 3.2.8(2021-11-10) +- 新增 适配飞书平台(lark) +## 3.2.7(2021-10-26) +- 修复 uni-popup 示例的 button 文字在 iPhone 5 上换行的 bug +- 修复 uni-table 示例,页面顶部距离不对的 bug +- 修复 GlobalData示例,在vue3是无效的 bug +- 优化 删除无用的 project.swan.json 文件 +## 3.2.6(2021-10-08) +- 由于体验问题,暂时撤销 uni-ui 以 uni_modules 方式引入的修改 + +## 3.2.4(2021-09-07) +- 修复 vue3 在 H5 编译报错的 bug +- 新增 同步 uni-ui + - 新增 uni-ui 组件支持国际化 i18n + - uni-data-checkbox 修复 在uni-forms中 modelValue 中不存在当前字段,当前字段必填写也不参与校验的问题 + - uni-datetime-picker 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次 + - uni-datetime-picker 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法 + - uni-datetime-picker 优化 调整字号大小,美化日历界面 + - uni-datetime-picker 修复 因国际化导致的 placeholder 失效的 bug + - uni-file-picker 修复 return-type="object" 时且存在v-model时,无法删除文件的Bug + - uni-file-picker 新增 参数中返回 fileID 字段 + - uni-file-picker 修复 腾讯云传入fileID 不能回显的bug + - uni-file-picker 修复 选择图片后,不能放大的问题 + - uni-link 修复 在 nvue 下不显示的 bug + - uni-list 修复 在vue3中to属性在发行应用的时候报错的bug + - uni-search-bar 修复 value 属性与 modelValue 属性不兼容的Bug + - uni-swipe-action 优化 close-all 方法 + - uni-collapse 优化 show-arrow 属性默认为true + - uni-collapse 新增 show-arrow 属性,控制是否显示右侧箭头 + - uni-data-checkbox 修复 单选 list 模式下 ,icon 为 left 时,选中图标不显示的问题 + - uni-easyinput 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug + - uni-file-picker 修复 由于 0.2.11 版本引起的不能回显图片的Bug + - uni-file-picker 新增 clearFiles(index) 方法,可以手动删除指定文件 + - uni-file-picker 修复 v-model 值设为 null 报错的Bug + - uni-swipe-action 新增 close-all 方法,关闭所有已打开的组件 + - uni-swipe-action 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件 + - uni-swipe-action 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题 + - uni-swipe-action 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题 + + +## 3.2.3(2021-08-27) +- 优化 tabbar 页面移除 vuex 相关代码 +- 新增 适配 vue3 (app) +## 3.2.2(2021-08-10) +- 新增 适配快手小程序 +- 新增 同步 uni-ui + - uni-datetime-picker 新增 return-type 属性支持返回 date 日期对象 + - uni-file-picker 修复 fileExtname属性不指定值报错的Bug + - uni-file-picker 修复 在某种场景下图片不回显的Bug + - uni-link 支持自定义插槽 + - uni-calendar 修复 弹出层被 tabbar 遮盖 bug + - uni-dateformat 调整 默认时间不再是当前时间,而是显示'-'字符 + - uni-datetime-picker 新增 适配 vue3 + - uni-datetime-picker 新增 支持作为 uni-forms 子组件相关功能 + - uni-datetime-picker 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug + - uni-datetime-picker 修复 type 属性动态赋值无效的 bug + - uni-datetime-picker 修复 ‘确认’按钮被 tabbar 遮盖 bug + - uni-datetime-picker 修复 组件未赋值时范围选左、右日历相同的 bug + - uni-datetime-picker 修复 范围选未正确显示当前值的 bug + - uni-datetime-picker 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug + - uni-file-picker 修复 auto-upload 属性失效的Bug +## 3.2.1(2021-07-31) +- 新增 同步 uni-ui@1.3.8 +## 3.2.0(2021-07-30) +- 新增 同时兼容 vue2 & vue3 +## 3.1.20(2021-07-30) +- 新增 同时兼容 vue2 & vue3 +## 3.1.17(2021-05-26) +- 修复 3.1.16 依赖 sass 的问题 +- 条件编译 nuve 不支持 css 属性 +## 3.1.16(2021-05-26) +- 修复 uni-data-checkbox 不关联服务空间的情况下组件报错的 Bug +## 3.1.12(2021-05-07) +- hello-uniapp 发布插件市场 diff --git a/common/airport.js b/common/airport.js index 7385df8f..adc05b4d 100644 --- a/common/airport.js +++ b/common/airport.js @@ -1,4 +1,4 @@ -module.exports ={ +export default { "list": [{ "letter": "A", "data": [ diff --git a/common/graceChecker.js b/common/graceChecker.js index 3e421a3e..682af992 100755 --- a/common/graceChecker.js +++ b/common/graceChecker.js @@ -3,7 +3,7 @@ 来自 grace.hcoder.net 作者 hcoder 深海 */ -module.exports = { +export default { error:'', check : function (data, rule){ for(var i = 0; i < rule.length; i++){ diff --git a/common/permission.js b/common/permission.js index 03abce62..d9249d99 100644 --- a/common/permission.js +++ b/common/permission.js @@ -242,4 +242,4 @@ const permission = { gotoAppSetting: gotoAppPermissionSetting } -module.exports = permission +export default permission diff --git a/common/uni-nvue.css b/common/uni-nvue.css index c47ba0b9..6863ac99 100644 --- a/common/uni-nvue.css +++ b/common/uni-nvue.css @@ -23,6 +23,9 @@ page { } .uni-header-logo { + /* #ifdef H5 */ + display: flex; + /* #endif */ padding: 15px 15px; flex-direction: column; justify-content: center; @@ -56,10 +59,17 @@ page { } .uni-panel-h { + /* #ifdef H5 */ + display: flex; + /* #endif */ background-color: #ffffff; - flex-direction: row; - align-items: center; + flex-direction: row !important; + /* justify-content: space-between !important; */ + align-items: center !important; padding: 12px; + /* #ifdef H5 */ + cursor: pointer; + /* #endif */ } /* .uni-panel-h:active { @@ -92,6 +102,9 @@ page { } .uni-navigate-item { + /* #ifdef H5 */ + display: flex; + /* #endif */ flex-direction: row; align-items: center; background-color: #FFFFFF; @@ -99,6 +112,9 @@ page { border-top-color: #f0f0f0; border-top-width: 1px; padding: 12px; + /* #ifdef H5 */ + cursor: pointer; + /* #endif */ } .uni-navigate-item:active { diff --git a/common/uni.css b/common/uni.css index a7470193..f46f7feb 100644 --- a/common/uni.css +++ b/common/uni.css @@ -5,11 +5,21 @@ src: url('~@/static/uni.ttf') format('truetype'); } -/*通用 */ -view{ +/* #ifdef H5 */ +.fix-left-window { + padding-left: var(--window-left); +} +.pc-hide { + display: none !important; +} +/* #endif */ + +/*通用 */ + +/* view{ font-size:28rpx; line-height:1.8; -} +} */ progress, checkbox-group{ width: 100%; } @@ -50,11 +60,11 @@ form { } /* page */ -.uni-page-head{ +.common-page-head{ padding:35rpx; text-align: center; } -.uni-page-head-title { +.common-page-head-title { display: inline-block; padding: 0 40rpx; font-size: 30rpx; @@ -64,13 +74,9 @@ form { box-sizing: border-box; border-bottom: 2rpx solid #D8D8D8; } -.uni-page-body { - width: 100%; - flex-grow: 1; - overflow-x: hidden; -} + .uni-padding-wrap{ - width:690rpx; + /* width:690rpx; */ padding:0 30rpx; } .uni-word { @@ -186,7 +192,7 @@ radio-group label, checkbox-group label{ padding-bottom:30rpx; } /*数字角标*/ -.uni-badge, +/* .uni-badge, .uni-badge-default { font-family: 'Helvetica Neue', Helvetica, sans-serif; font-size: 12px; @@ -196,7 +202,7 @@ radio-group label, checkbox-group label{ color: #333; border-radius: 100px; background-color: rgba(0, 0, 0, .15); -} +} */ .uni-badge.uni-badge-inverted { padding: 0 5px 0 0; color: #929292; @@ -268,7 +274,7 @@ radio-group label, checkbox-group label{ border-radius: 8rpx; margin:20rpx 0; position: relative; - box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, .3); + /* box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, .3); */ } .uni-card-content { font-size: 30rpx; @@ -360,7 +366,7 @@ radio-group label, checkbox-group label{ transform: scaleY(.5); background-color: #c8c7cc; } -.uni-list::before { +/* .uni-list::before { position: absolute; z-index: 10; right: 0; @@ -371,7 +377,7 @@ radio-group label, checkbox-group label{ -webkit-transform: scaleY(.5); transform: scaleY(.5); background-color: #c8c7cc; -} +} */ .uni-list-cell { position: relative; display: flex; @@ -1446,3 +1452,7 @@ radio-group label, checkbox-group label{ left: 0; transform: translateY(50%); } + +.left-win-active text{ + color: #007AFF !important; +} diff --git a/common/util.js b/common/util.js index 7095702a..727069b9 100644 --- a/common/util.js +++ b/common/util.js @@ -9,7 +9,7 @@ function formatTime(time) { time = time % 60 var second = time - return ([hour, minute, second]).map(function (n) { + return ([hour, minute, second]).map(function(n) { n = n.toString() return n[1] ? n : '0' + n }).join(':') @@ -38,7 +38,7 @@ var dateUtils = { '分钟': 60000, '秒': 1000 }, - humanize: function (milliseconds) { + humanize: function(milliseconds) { var humanize = ''; for (var key in this.UNITS) { if (milliseconds >= this.UNITS[key]) { @@ -48,26 +48,26 @@ var dateUtils = { } return humanize || '刚刚'; }, - format: function (dateStr) { + format: function(dateStr) { var date = this.parse(dateStr) var diff = Date.now() - date.getTime(); if (diff < this.UNITS['天']) { return this.humanize(diff); } - var _format = function (number) { + var _format = function(number) { return (number < 10 ? ('0' + number) : number); }; return date.getFullYear() + '/' + _format(date.getMonth() + 1) + '/' + _format(date.getDate()) + '-' + _format(date.getHours()) + ':' + _format(date.getMinutes()); }, - parse: function (str) { //将"yyyy-mm-dd HH:MM:ss"格式的字符串,转化为一个Date对象 + parse: function(str) { //将"yyyy-mm-dd HH:MM:ss"格式的字符串,转化为一个Date对象 var a = str.split(/[^0-9]/); return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]); } }; -module.exports = { - formatTime: formatTime, - formatLocation: formatLocation, - dateUtils: dateUtils +export { + formatTime, + formatLocation, + dateUtils } diff --git a/components/amap-wx/lib/amap-wx.js b/components/amap-wx/lib/amap-wx.js index eb969c33..e1ef2b20 100644 --- a/components/amap-wx/lib/amap-wx.js +++ b/components/amap-wx/lib/amap-wx.js @@ -1 +1 @@ -function AMapWX(a){this.key=a.key,this.requestConfig={key:a.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"}}AMapWX.prototype.getWxLocation=function(a,b){wx.getLocation({type:"gcj02",success:function(a){var c=a.longitude+","+a.latitude;wx.setStorage({key:"userLocation",data:c}),b(c)},fail:function(c){wx.getStorage({key:"userLocation",success:function(a){a.data&&b(a.data)}}),a.fail({errCode:"0",errMsg:c.errMsg||""})}})},AMapWX.prototype.getRegeo=function(a){function c(c){var d=b.requestConfig;wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:b.key,location:c,extensions:"all",s:d.s,platform:d.platform,appname:b.key,sdkversion:d.sdkversion,logversion:d.logversion},method:"GET",header:{"content-type":"application/json"},success:function(b){var d,e,f,g,h,i,j,k,l;b.data.status&&"1"==b.data.status?(d=b.data.regeocode,e=d.addressComponent,f=[],g="",d&&d.roads[0]&&d.roads[0].name&&(g=d.roads[0].name+"附近"),h=c.split(",")[0],i=c.split(",")[1],d.pois&&d.pois[0]&&(g=d.pois[0].name+"附近",j=d.pois[0].location,j&&(h=parseFloat(j.split(",")[0]),i=parseFloat(j.split(",")[1]))),e.provice&&f.push(e.provice),e.city&&f.push(e.city),e.district&&f.push(e.district),e.streetNumber&&e.streetNumber.street&&e.streetNumber.number?(f.push(e.streetNumber.street),f.push(e.streetNumber.number)):(k="",d&&d.roads[0]&&d.roads[0].name&&(k=d.roads[0].name),f.push(k)),f=f.join(""),l=[{iconPath:a.iconPath,width:a.iconWidth,height:a.iconHeight,name:f,desc:g,longitude:h,latitude:i,id:0,regeocodeData:d}],a.success(l)):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:"0",errMsg:b.errMsg||""})}})}var b=this;a.location?c(a.location):b.getWxLocation(a,function(a){c(a)})},AMapWX.prototype.getWeather=function(a){function d(d){var e="base";a.type&&"forecast"==a.type&&(e="all"),wx.request({url:"https://restapi.amap.com/v3/weather/weatherInfo",data:{key:b.key,city:d,extensions:e,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion},method:"GET",header:{"content-type":"application/json"},success:function(b){function c(a){var b={city:{text:"城市",data:a.city},weather:{text:"天气",data:a.weather},temperature:{text:"温度",data:a.temperature},winddirection:{text:"风向",data:a.winddirection+"风"},windpower:{text:"风力",data:a.windpower+"级"},humidity:{text:"湿度",data:a.humidity+"%"}};return b}var d,e;b.data.status&&"1"==b.data.status?b.data.lives?(d=b.data.lives,d&&d.length>0&&(d=d[0],e=c(d),e["liveData"]=d,a.success(e))):b.data.forecasts&&b.data.forecasts[0]&&a.success({forecast:b.data.forecasts[0]}):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:"0",errMsg:b.errMsg||""})}})}function e(e){wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:b.key,location:e,extensions:"all",s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion},method:"GET",header:{"content-type":"application/json"},success:function(b){var c,e;b.data.status&&"1"==b.data.status?(e=b.data.regeocode,e.addressComponent?c=e.addressComponent.adcode:e.aois&&e.aois.length>0&&(c=e.aois[0].adcode),d(c)):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:"0",errMsg:b.errMsg||""})}})}var b=this,c=b.requestConfig;a.city?d(a.city):b.getWxLocation(a,function(a){e(a)})},AMapWX.prototype.getPoiAround=function(a){function d(d){var e={key:b.key,location:d,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion};a.querytypes&&(e["types"]=a.querytypes),a.querykeywords&&(e["keywords"]=a.querykeywords),wx.request({url:"https://restapi.amap.com/v3/place/around",data:e,method:"GET",header:{"content-type":"application/json"},success:function(b){var c,d,e,f;if(b.data.status&&"1"==b.data.status){if(b=b.data,b&&b.pois){for(c=[],d=0;d0&&(d=d[0],e=c(d),e["liveData"]=d,a.success(e))):b.data.forecasts&&b.data.forecasts[0]&&a.success({forecast:b.data.forecasts[0]}):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:"0",errMsg:b.errMsg||""})}})}function e(e){wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:b.key,location:e,extensions:"all",s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion},method:"GET",header:{"content-type":"application/json"},success:function(b){var c,e;b.data.status&&"1"==b.data.status?(e=b.data.regeocode,e.addressComponent?c=e.addressComponent.adcode:e.aois&&e.aois.length>0&&(c=e.aois[0].adcode),d(c)):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:"0",errMsg:b.errMsg||""})}})}var b=this,c=b.requestConfig;a.city?d(a.city):b.getWxLocation(a,function(a){e(a)})},AMapWX.prototype.getPoiAround=function(a){function d(d){var e={key:b.key,location:d,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion};a.querytypes&&(e["types"]=a.querytypes),a.querykeywords&&(e["keywords"]=a.querykeywords),wx.request({url:"https://restapi.amap.com/v3/place/around",data:e,method:"GET",header:{"content-type":"application/json"},success:function(b){var c,d,e,f;if(b.data.status&&"1"==b.data.status){if(b=b.data,b&&b.pois){for(c=[],d=0;d + + diff --git a/components/marked/index.js b/components/marked/index.js index a12f9056..33e56c3a 100644 --- a/components/marked/index.js +++ b/components/marked/index.js @@ -1 +1 @@ -module.exports = require('./lib/marked'); +export default './lib/marked' diff --git a/components/mpvue-citypicker/city-data/area.js b/components/mpvue-citypicker/city-data/area.js deleted file mode 100644 index 92dfc30a..00000000 --- a/components/mpvue-citypicker/city-data/area.js +++ /dev/null @@ -1,12542 +0,0 @@ -/* eslint-disable */ -var areaData = [ - [ - [{ - "label": "东城区", - "value": "110101" - }, - { - "label": "西城区", - "value": "110102" - }, - { - "label": "朝阳区", - "value": "110105" - }, - { - "label": "丰台区", - "value": "110106" - }, - { - "label": "石景山区", - "value": "110107" - }, - { - "label": "海淀区", - "value": "110108" - }, - { - "label": "门头沟区", - "value": "110109" - }, - { - "label": "房山区", - "value": "110111" - }, - { - "label": "通州区", - "value": "110112" - }, - { - "label": "顺义区", - "value": "110113" - }, - { - "label": "昌平区", - "value": "110114" - }, - { - "label": "大兴区", - "value": "110115" - }, - { - "label": "怀柔区", - "value": "110116" - }, - { - "label": "平谷区", - "value": "110117" - }, - { - "label": "密云区", - "value": "110118" - }, - { - "label": "延庆区", - "value": "110119" - } - ] - ], - [ - [{ - "label": "和平区", - "value": "120101" - }, - { - "label": "河东区", - "value": "120102" - }, - { - "label": "河西区", - "value": "120103" - }, - { - "label": "南开区", - "value": "120104" - }, - { - "label": "河北区", - "value": "120105" - }, - { - "label": "红桥区", - "value": "120106" - }, - { - "label": "东丽区", - "value": "120110" - }, - { - "label": "西青区", - "value": "120111" - }, - { - "label": "津南区", - "value": "120112" - }, - { - "label": "北辰区", - "value": "120113" - }, - { - "label": "武清区", - "value": "120114" - }, - { - "label": "宝坻区", - "value": "120115" - }, - { - "label": "滨海新区", - "value": "120116" - }, - { - "label": "宁河区", - "value": "120117" - }, - { - "label": "静海区", - "value": "120118" - }, - { - "label": "蓟州区", - "value": "120119" - } - ] - ], - [ - [{ - "label": "长安区", - "value": "130102" - }, - { - "label": "桥西区", - "value": "130104" - }, - { - "label": "新华区", - "value": "130105" - }, - { - "label": "井陉矿区", - "value": "130107" - }, - { - "label": "裕华区", - "value": "130108" - }, - { - "label": "藁城区", - "value": "130109" - }, - { - "label": "鹿泉区", - "value": "130110" - }, - { - "label": "栾城区", - "value": "130111" - }, - { - "label": "井陉县", - "value": "130121" - }, - { - "label": "正定县", - "value": "130123" - }, - { - "label": "行唐县", - "value": "130125" - }, - { - "label": "灵寿县", - "value": "130126" - }, - { - "label": "高邑县", - "value": "130127" - }, - { - "label": "深泽县", - "value": "130128" - }, - { - "label": "赞皇县", - "value": "130129" - }, - { - "label": "无极县", - "value": "130130" - }, - { - "label": "平山县", - "value": "130131" - }, - { - "label": "元氏县", - "value": "130132" - }, - { - "label": "赵县", - "value": "130133" - }, - { - "label": "石家庄高新技术产业开发区", - "value": "130171" - }, - { - "label": "石家庄循环化工园区", - "value": "130172" - }, - { - "label": "辛集市", - "value": "130181" - }, - { - "label": "晋州市", - "value": "130183" - }, - { - "label": "新乐市", - "value": "130184" - } - ], - [{ - "label": "路南区", - "value": "130202" - }, - { - "label": "路北区", - "value": "130203" - }, - { - "label": "古冶区", - "value": "130204" - }, - { - "label": "开平区", - "value": "130205" - }, - { - "label": "丰南区", - "value": "130207" - }, - { - "label": "丰润区", - "value": "130208" - }, - { - "label": "曹妃甸区", - "value": "130209" - }, - { - "label": "滦县", - "value": "130223" - }, - { - "label": "滦南县", - "value": "130224" - }, - { - "label": "乐亭县", - "value": "130225" - }, - { - "label": "迁西县", - "value": "130227" - }, - { - "label": "玉田县", - "value": "130229" - }, - { - "label": "唐山市芦台经济技术开发区", - "value": "130271" - }, - { - "label": "唐山市汉沽管理区", - "value": "130272" - }, - { - "label": "唐山高新技术产业开发区", - "value": "130273" - }, - { - "label": "河北唐山海港经济开发区", - "value": "130274" - }, - { - "label": "遵化市", - "value": "130281" - }, - { - "label": "迁安市", - "value": "130283" - } - ], - [{ - "label": "海港区", - "value": "130302" - }, - { - "label": "山海关区", - "value": "130303" - }, - { - "label": "北戴河区", - "value": "130304" - }, - { - "label": "抚宁区", - "value": "130306" - }, - { - "label": "青龙满族自治县", - "value": "130321" - }, - { - "label": "昌黎县", - "value": "130322" - }, - { - "label": "卢龙县", - "value": "130324" - }, - { - "label": "秦皇岛市经济技术开发区", - "value": "130371" - }, - { - "label": "北戴河新区", - "value": "130372" - } - ], - [{ - "label": "邯山区", - "value": "130402" - }, - { - "label": "丛台区", - "value": "130403" - }, - { - "label": "复兴区", - "value": "130404" - }, - { - "label": "峰峰矿区", - "value": "130406" - }, - { - "label": "肥乡区", - "value": "130407" - }, - { - "label": "永年区", - "value": "130408" - }, - { - "label": "临漳县", - "value": "130423" - }, - { - "label": "成安县", - "value": "130424" - }, - { - "label": "大名县", - "value": "130425" - }, - { - "label": "涉县", - "value": "130426" - }, - { - "label": "磁县", - "value": "130427" - }, - { - "label": "邱县", - "value": "130430" - }, - { - "label": "鸡泽县", - "value": "130431" - }, - { - "label": "广平县", - "value": "130432" - }, - { - "label": "馆陶县", - "value": "130433" - }, - { - "label": "魏县", - "value": "130434" - }, - { - "label": "曲周县", - "value": "130435" - }, - { - "label": "邯郸经济技术开发区", - "value": "130471" - }, - { - "label": "邯郸冀南新区", - "value": "130473" - }, - { - "label": "武安市", - "value": "130481" - } - ], - [{ - "label": "桥东区", - "value": "130502" - }, - { - "label": "桥西区", - "value": "130503" - }, - { - "label": "邢台县", - "value": "130521" - }, - { - "label": "临城县", - "value": "130522" - }, - { - "label": "内丘县", - "value": "130523" - }, - { - "label": "柏乡县", - "value": "130524" - }, - { - "label": "隆尧县", - "value": "130525" - }, - { - "label": "任县", - "value": "130526" - }, - { - "label": "南和县", - "value": "130527" - }, - { - "label": "宁晋县", - "value": "130528" - }, - { - "label": "巨鹿县", - "value": "130529" - }, - { - "label": "新河县", - "value": "130530" - }, - { - "label": "广宗县", - "value": "130531" - }, - { - "label": "平乡县", - "value": "130532" - }, - { - "label": "威县", - "value": "130533" - }, - { - "label": "清河县", - "value": "130534" - }, - { - "label": "临西县", - "value": "130535" - }, - { - "label": "河北邢台经济开发区", - "value": "130571" - }, - { - "label": "南宫市", - "value": "130581" - }, - { - "label": "沙河市", - "value": "130582" - } - ], - [{ - "label": "竞秀区", - "value": "130602" - }, - { - "label": "莲池区", - "value": "130606" - }, - { - "label": "满城区", - "value": "130607" - }, - { - "label": "清苑区", - "value": "130608" - }, - { - "label": "徐水区", - "value": "130609" - }, - { - "label": "涞水县", - "value": "130623" - }, - { - "label": "阜平县", - "value": "130624" - }, - { - "label": "定兴县", - "value": "130626" - }, - { - "label": "唐县", - "value": "130627" - }, - { - "label": "高阳县", - "value": "130628" - }, - { - "label": "容城县", - "value": "130629" - }, - { - "label": "涞源县", - "value": "130630" - }, - { - "label": "望都县", - "value": "130631" - }, - { - "label": "安新县", - "value": "130632" - }, - { - "label": "易县", - "value": "130633" - }, - { - "label": "曲阳县", - "value": "130634" - }, - { - "label": "蠡县", - "value": "130635" - }, - { - "label": "顺平县", - "value": "130636" - }, - { - "label": "博野县", - "value": "130637" - }, - { - "label": "雄县", - "value": "130638" - }, - { - "label": "保定高新技术产业开发区", - "value": "130671" - }, - { - "label": "保定白沟新城", - "value": "130672" - }, - { - "label": "涿州市", - "value": "130681" - }, - { - "label": "定州市", - "value": "130682" - }, - { - "label": "安国市", - "value": "130683" - }, - { - "label": "高碑店市", - "value": "130684" - } - ], - [{ - "label": "桥东区", - "value": "130702" - }, - { - "label": "桥西区", - "value": "130703" - }, - { - "label": "宣化区", - "value": "130705" - }, - { - "label": "下花园区", - "value": "130706" - }, - { - "label": "万全区", - "value": "130708" - }, - { - "label": "崇礼区", - "value": "130709" - }, - { - "label": "张北县", - "value": "130722" - }, - { - "label": "康保县", - "value": "130723" - }, - { - "label": "沽源县", - "value": "130724" - }, - { - "label": "尚义县", - "value": "130725" - }, - { - "label": "蔚县", - "value": "130726" - }, - { - "label": "阳原县", - "value": "130727" - }, - { - "label": "怀安县", - "value": "130728" - }, - { - "label": "怀来县", - "value": "130730" - }, - { - "label": "涿鹿县", - "value": "130731" - }, - { - "label": "赤城县", - "value": "130732" - }, - { - "label": "张家口市高新技术产业开发区", - "value": "130771" - }, - { - "label": "张家口市察北管理区", - "value": "130772" - }, - { - "label": "张家口市塞北管理区", - "value": "130773" - } - ], - [{ - "label": "双桥区", - "value": "130802" - }, - { - "label": "双滦区", - "value": "130803" - }, - { - "label": "鹰手营子矿区", - "value": "130804" - }, - { - "label": "承德县", - "value": "130821" - }, - { - "label": "兴隆县", - "value": "130822" - }, - { - "label": "滦平县", - "value": "130824" - }, - { - "label": "隆化县", - "value": "130825" - }, - { - "label": "丰宁满族自治县", - "value": "130826" - }, - { - "label": "宽城满族自治县", - "value": "130827" - }, - { - "label": "围场满族蒙古族自治县", - "value": "130828" - }, - { - "label": "承德高新技术产业开发区", - "value": "130871" - }, - { - "label": "平泉市", - "value": "130881" - } - ], - [{ - "label": "新华区", - "value": "130902" - }, - { - "label": "运河区", - "value": "130903" - }, - { - "label": "沧县", - "value": "130921" - }, - { - "label": "青县", - "value": "130922" - }, - { - "label": "东光县", - "value": "130923" - }, - { - "label": "海兴县", - "value": "130924" - }, - { - "label": "盐山县", - "value": "130925" - }, - { - "label": "肃宁县", - "value": "130926" - }, - { - "label": "南皮县", - "value": "130927" - }, - { - "label": "吴桥县", - "value": "130928" - }, - { - "label": "献县", - "value": "130929" - }, - { - "label": "孟村回族自治县", - "value": "130930" - }, - { - "label": "河北沧州经济开发区", - "value": "130971" - }, - { - "label": "沧州高新技术产业开发区", - "value": "130972" - }, - { - "label": "沧州渤海新区", - "value": "130973" - }, - { - "label": "泊头市", - "value": "130981" - }, - { - "label": "任丘市", - "value": "130982" - }, - { - "label": "黄骅市", - "value": "130983" - }, - { - "label": "河间市", - "value": "130984" - } - ], - [{ - "label": "安次区", - "value": "131002" - }, - { - "label": "广阳区", - "value": "131003" - }, - { - "label": "固安县", - "value": "131022" - }, - { - "label": "永清县", - "value": "131023" - }, - { - "label": "香河县", - "value": "131024" - }, - { - "label": "大城县", - "value": "131025" - }, - { - "label": "文安县", - "value": "131026" - }, - { - "label": "大厂回族自治县", - "value": "131028" - }, - { - "label": "廊坊经济技术开发区", - "value": "131071" - }, - { - "label": "霸州市", - "value": "131081" - }, - { - "label": "三河市", - "value": "131082" - } - ], - [{ - "label": "桃城区", - "value": "131102" - }, - { - "label": "冀州区", - "value": "131103" - }, - { - "label": "枣强县", - "value": "131121" - }, - { - "label": "武邑县", - "value": "131122" - }, - { - "label": "武强县", - "value": "131123" - }, - { - "label": "饶阳县", - "value": "131124" - }, - { - "label": "安平县", - "value": "131125" - }, - { - "label": "故城县", - "value": "131126" - }, - { - "label": "景县", - "value": "131127" - }, - { - "label": "阜城县", - "value": "131128" - }, - { - "label": "河北衡水经济开发区", - "value": "131171" - }, - { - "label": "衡水滨湖新区", - "value": "131172" - }, - { - "label": "深州市", - "value": "131182" - } - ] - ], - [ - [{ - "label": "小店区", - "value": "140105" - }, - { - "label": "迎泽区", - "value": "140106" - }, - { - "label": "杏花岭区", - "value": "140107" - }, - { - "label": "尖草坪区", - "value": "140108" - }, - { - "label": "万柏林区", - "value": "140109" - }, - { - "label": "晋源区", - "value": "140110" - }, - { - "label": "清徐县", - "value": "140121" - }, - { - "label": "阳曲县", - "value": "140122" - }, - { - "label": "娄烦县", - "value": "140123" - }, - { - "label": "山西转型综合改革示范区", - "value": "140171" - }, - { - "label": "古交市", - "value": "140181" - } - ], - [{ - "label": "城区", - "value": "140202" - }, - { - "label": "矿区", - "value": "140203" - }, - { - "label": "南郊区", - "value": "140211" - }, - { - "label": "新荣区", - "value": "140212" - }, - { - "label": "阳高县", - "value": "140221" - }, - { - "label": "天镇县", - "value": "140222" - }, - { - "label": "广灵县", - "value": "140223" - }, - { - "label": "灵丘县", - "value": "140224" - }, - { - "label": "浑源县", - "value": "140225" - }, - { - "label": "左云县", - "value": "140226" - }, - { - "label": "大同县", - "value": "140227" - }, - { - "label": "山西大同经济开发区", - "value": "140271" - } - ], - [{ - "label": "城区", - "value": "140302" - }, - { - "label": "矿区", - "value": "140303" - }, - { - "label": "郊区", - "value": "140311" - }, - { - "label": "平定县", - "value": "140321" - }, - { - "label": "盂县", - "value": "140322" - }, - { - "label": "山西阳泉经济开发区", - "value": "140371" - } - ], - [{ - "label": "城区", - "value": "140402" - }, - { - "label": "郊区", - "value": "140411" - }, - { - "label": "长治县", - "value": "140421" - }, - { - "label": "襄垣县", - "value": "140423" - }, - { - "label": "屯留县", - "value": "140424" - }, - { - "label": "平顺县", - "value": "140425" - }, - { - "label": "黎城县", - "value": "140426" - }, - { - "label": "壶关县", - "value": "140427" - }, - { - "label": "长子县", - "value": "140428" - }, - { - "label": "武乡县", - "value": "140429" - }, - { - "label": "沁县", - "value": "140430" - }, - { - "label": "沁源县", - "value": "140431" - }, - { - "label": "山西长治高新技术产业园区", - "value": "140471" - }, - { - "label": "潞城市", - "value": "140481" - } - ], - [{ - "label": "城区", - "value": "140502" - }, - { - "label": "沁水县", - "value": "140521" - }, - { - "label": "阳城县", - "value": "140522" - }, - { - "label": "陵川县", - "value": "140524" - }, - { - "label": "泽州县", - "value": "140525" - }, - { - "label": "高平市", - "value": "140581" - } - ], - [{ - "label": "朔城区", - "value": "140602" - }, - { - "label": "平鲁区", - "value": "140603" - }, - { - "label": "山阴县", - "value": "140621" - }, - { - "label": "应县", - "value": "140622" - }, - { - "label": "右玉县", - "value": "140623" - }, - { - "label": "怀仁县", - "value": "140624" - }, - { - "label": "山西朔州经济开发区", - "value": "140671" - } - ], - [{ - "label": "榆次区", - "value": "140702" - }, - { - "label": "榆社县", - "value": "140721" - }, - { - "label": "左权县", - "value": "140722" - }, - { - "label": "和顺县", - "value": "140723" - }, - { - "label": "昔阳县", - "value": "140724" - }, - { - "label": "寿阳县", - "value": "140725" - }, - { - "label": "太谷县", - "value": "140726" - }, - { - "label": "祁县", - "value": "140727" - }, - { - "label": "平遥县", - "value": "140728" - }, - { - "label": "灵石县", - "value": "140729" - }, - { - "label": "介休市", - "value": "140781" - } - ], - [{ - "label": "盐湖区", - "value": "140802" - }, - { - "label": "临猗县", - "value": "140821" - }, - { - "label": "万荣县", - "value": "140822" - }, - { - "label": "闻喜县", - "value": "140823" - }, - { - "label": "稷山县", - "value": "140824" - }, - { - "label": "新绛县", - "value": "140825" - }, - { - "label": "绛县", - "value": "140826" - }, - { - "label": "垣曲县", - "value": "140827" - }, - { - "label": "夏县", - "value": "140828" - }, - { - "label": "平陆县", - "value": "140829" - }, - { - "label": "芮城县", - "value": "140830" - }, - { - "label": "永济市", - "value": "140881" - }, - { - "label": "河津市", - "value": "140882" - } - ], - [{ - "label": "忻府区", - "value": "140902" - }, - { - "label": "定襄县", - "value": "140921" - }, - { - "label": "五台县", - "value": "140922" - }, - { - "label": "代县", - "value": "140923" - }, - { - "label": "繁峙县", - "value": "140924" - }, - { - "label": "宁武县", - "value": "140925" - }, - { - "label": "静乐县", - "value": "140926" - }, - { - "label": "神池县", - "value": "140927" - }, - { - "label": "五寨县", - "value": "140928" - }, - { - "label": "岢岚县", - "value": "140929" - }, - { - "label": "河曲县", - "value": "140930" - }, - { - "label": "保德县", - "value": "140931" - }, - { - "label": "偏关县", - "value": "140932" - }, - { - "label": "五台山风景名胜区", - "value": "140971" - }, - { - "label": "原平市", - "value": "140981" - } - ], - [{ - "label": "尧都区", - "value": "141002" - }, - { - "label": "曲沃县", - "value": "141021" - }, - { - "label": "翼城县", - "value": "141022" - }, - { - "label": "襄汾县", - "value": "141023" - }, - { - "label": "洪洞县", - "value": "141024" - }, - { - "label": "古县", - "value": "141025" - }, - { - "label": "安泽县", - "value": "141026" - }, - { - "label": "浮山县", - "value": "141027" - }, - { - "label": "吉县", - "value": "141028" - }, - { - "label": "乡宁县", - "value": "141029" - }, - { - "label": "大宁县", - "value": "141030" - }, - { - "label": "隰县", - "value": "141031" - }, - { - "label": "永和县", - "value": "141032" - }, - { - "label": "蒲县", - "value": "141033" - }, - { - "label": "汾西县", - "value": "141034" - }, - { - "label": "侯马市", - "value": "141081" - }, - { - "label": "霍州市", - "value": "141082" - } - ], - [{ - "label": "离石区", - "value": "141102" - }, - { - "label": "文水县", - "value": "141121" - }, - { - "label": "交城县", - "value": "141122" - }, - { - "label": "兴县", - "value": "141123" - }, - { - "label": "临县", - "value": "141124" - }, - { - "label": "柳林县", - "value": "141125" - }, - { - "label": "石楼县", - "value": "141126" - }, - { - "label": "岚县", - "value": "141127" - }, - { - "label": "方山县", - "value": "141128" - }, - { - "label": "中阳县", - "value": "141129" - }, - { - "label": "交口县", - "value": "141130" - }, - { - "label": "孝义市", - "value": "141181" - }, - { - "label": "汾阳市", - "value": "141182" - } - ] - ], - [ - [{ - "label": "新城区", - "value": "150102" - }, - { - "label": "回民区", - "value": "150103" - }, - { - "label": "玉泉区", - "value": "150104" - }, - { - "label": "赛罕区", - "value": "150105" - }, - { - "label": "土默特左旗", - "value": "150121" - }, - { - "label": "托克托县", - "value": "150122" - }, - { - "label": "和林格尔县", - "value": "150123" - }, - { - "label": "清水河县", - "value": "150124" - }, - { - "label": "武川县", - "value": "150125" - }, - { - "label": "呼和浩特金海工业园区", - "value": "150171" - }, - { - "label": "呼和浩特经济技术开发区", - "value": "150172" - } - ], - [{ - "label": "东河区", - "value": "150202" - }, - { - "label": "昆都仑区", - "value": "150203" - }, - { - "label": "青山区", - "value": "150204" - }, - { - "label": "石拐区", - "value": "150205" - }, - { - "label": "白云鄂博矿区", - "value": "150206" - }, - { - "label": "九原区", - "value": "150207" - }, - { - "label": "土默特右旗", - "value": "150221" - }, - { - "label": "固阳县", - "value": "150222" - }, - { - "label": "达尔罕茂明安联合旗", - "value": "150223" - }, - { - "label": "包头稀土高新技术产业开发区", - "value": "150271" - } - ], - [{ - "label": "海勃湾区", - "value": "150302" - }, - { - "label": "海南区", - "value": "150303" - }, - { - "label": "乌达区", - "value": "150304" - } - ], - [{ - "label": "红山区", - "value": "150402" - }, - { - "label": "元宝山区", - "value": "150403" - }, - { - "label": "松山区", - "value": "150404" - }, - { - "label": "阿鲁科尔沁旗", - "value": "150421" - }, - { - "label": "巴林左旗", - "value": "150422" - }, - { - "label": "巴林右旗", - "value": "150423" - }, - { - "label": "林西县", - "value": "150424" - }, - { - "label": "克什克腾旗", - "value": "150425" - }, - { - "label": "翁牛特旗", - "value": "150426" - }, - { - "label": "喀喇沁旗", - "value": "150428" - }, - { - "label": "宁城县", - "value": "150429" - }, - { - "label": "敖汉旗", - "value": "150430" - } - ], - [{ - "label": "科尔沁区", - "value": "150502" - }, - { - "label": "科尔沁左翼中旗", - "value": "150521" - }, - { - "label": "科尔沁左翼后旗", - "value": "150522" - }, - { - "label": "开鲁县", - "value": "150523" - }, - { - "label": "库伦旗", - "value": "150524" - }, - { - "label": "奈曼旗", - "value": "150525" - }, - { - "label": "扎鲁特旗", - "value": "150526" - }, - { - "label": "通辽经济技术开发区", - "value": "150571" - }, - { - "label": "霍林郭勒市", - "value": "150581" - } - ], - [{ - "label": "东胜区", - "value": "150602" - }, - { - "label": "康巴什区", - "value": "150603" - }, - { - "label": "达拉特旗", - "value": "150621" - }, - { - "label": "准格尔旗", - "value": "150622" - }, - { - "label": "鄂托克前旗", - "value": "150623" - }, - { - "label": "鄂托克旗", - "value": "150624" - }, - { - "label": "杭锦旗", - "value": "150625" - }, - { - "label": "乌审旗", - "value": "150626" - }, - { - "label": "伊金霍洛旗", - "value": "150627" - } - ], - [{ - "label": "海拉尔区", - "value": "150702" - }, - { - "label": "扎赉诺尔区", - "value": "150703" - }, - { - "label": "阿荣旗", - "value": "150721" - }, - { - "label": "莫力达瓦达斡尔族自治旗", - "value": "150722" - }, - { - "label": "鄂伦春自治旗", - "value": "150723" - }, - { - "label": "鄂温克族自治旗", - "value": "150724" - }, - { - "label": "陈巴尔虎旗", - "value": "150725" - }, - { - "label": "新巴尔虎左旗", - "value": "150726" - }, - { - "label": "新巴尔虎右旗", - "value": "150727" - }, - { - "label": "满洲里市", - "value": "150781" - }, - { - "label": "牙克石市", - "value": "150782" - }, - { - "label": "扎兰屯市", - "value": "150783" - }, - { - "label": "额尔古纳市", - "value": "150784" - }, - { - "label": "根河市", - "value": "150785" - } - ], - [{ - "label": "临河区", - "value": "150802" - }, - { - "label": "五原县", - "value": "150821" - }, - { - "label": "磴口县", - "value": "150822" - }, - { - "label": "乌拉特前旗", - "value": "150823" - }, - { - "label": "乌拉特中旗", - "value": "150824" - }, - { - "label": "乌拉特后旗", - "value": "150825" - }, - { - "label": "杭锦后旗", - "value": "150826" - } - ], - [{ - "label": "集宁区", - "value": "150902" - }, - { - "label": "卓资县", - "value": "150921" - }, - { - "label": "化德县", - "value": "150922" - }, - { - "label": "商都县", - "value": "150923" - }, - { - "label": "兴和县", - "value": "150924" - }, - { - "label": "凉城县", - "value": "150925" - }, - { - "label": "察哈尔右翼前旗", - "value": "150926" - }, - { - "label": "察哈尔右翼中旗", - "value": "150927" - }, - { - "label": "察哈尔右翼后旗", - "value": "150928" - }, - { - "label": "四子王旗", - "value": "150929" - }, - { - "label": "丰镇市", - "value": "150981" - } - ], - [{ - "label": "乌兰浩特市", - "value": "152201" - }, - { - "label": "阿尔山市", - "value": "152202" - }, - { - "label": "科尔沁右翼前旗", - "value": "152221" - }, - { - "label": "科尔沁右翼中旗", - "value": "152222" - }, - { - "label": "扎赉特旗", - "value": "152223" - }, - { - "label": "突泉县", - "value": "152224" - } - ], - [{ - "label": "二连浩特市", - "value": "152501" - }, - { - "label": "锡林浩特市", - "value": "152502" - }, - { - "label": "阿巴嘎旗", - "value": "152522" - }, - { - "label": "苏尼特左旗", - "value": "152523" - }, - { - "label": "苏尼特右旗", - "value": "152524" - }, - { - "label": "东乌珠穆沁旗", - "value": "152525" - }, - { - "label": "西乌珠穆沁旗", - "value": "152526" - }, - { - "label": "太仆寺旗", - "value": "152527" - }, - { - "label": "镶黄旗", - "value": "152528" - }, - { - "label": "正镶白旗", - "value": "152529" - }, - { - "label": "正蓝旗", - "value": "152530" - }, - { - "label": "多伦县", - "value": "152531" - }, - { - "label": "乌拉盖管委会", - "value": "152571" - } - ], - [{ - "label": "阿拉善左旗", - "value": "152921" - }, - { - "label": "阿拉善右旗", - "value": "152922" - }, - { - "label": "额济纳旗", - "value": "152923" - }, - { - "label": "内蒙古阿拉善经济开发区", - "value": "152971" - } - ] - ], - [ - [{ - "label": "和平区", - "value": "210102" - }, - { - "label": "沈河区", - "value": "210103" - }, - { - "label": "大东区", - "value": "210104" - }, - { - "label": "皇姑区", - "value": "210105" - }, - { - "label": "铁西区", - "value": "210106" - }, - { - "label": "苏家屯区", - "value": "210111" - }, - { - "label": "浑南区", - "value": "210112" - }, - { - "label": "沈北新区", - "value": "210113" - }, - { - "label": "于洪区", - "value": "210114" - }, - { - "label": "辽中区", - "value": "210115" - }, - { - "label": "康平县", - "value": "210123" - }, - { - "label": "法库县", - "value": "210124" - }, - { - "label": "新民市", - "value": "210181" - } - ], - [{ - "label": "中山区", - "value": "210202" - }, - { - "label": "西岗区", - "value": "210203" - }, - { - "label": "沙河口区", - "value": "210204" - }, - { - "label": "甘井子区", - "value": "210211" - }, - { - "label": "旅顺口区", - "value": "210212" - }, - { - "label": "金州区", - "value": "210213" - }, - { - "label": "普兰店区", - "value": "210214" - }, - { - "label": "长海县", - "value": "210224" - }, - { - "label": "瓦房店市", - "value": "210281" - }, - { - "label": "庄河市", - "value": "210283" - } - ], - [{ - "label": "铁东区", - "value": "210302" - }, - { - "label": "铁西区", - "value": "210303" - }, - { - "label": "立山区", - "value": "210304" - }, - { - "label": "千山区", - "value": "210311" - }, - { - "label": "台安县", - "value": "210321" - }, - { - "label": "岫岩满族自治县", - "value": "210323" - }, - { - "label": "海城市", - "value": "210381" - } - ], - [{ - "label": "新抚区", - "value": "210402" - }, - { - "label": "东洲区", - "value": "210403" - }, - { - "label": "望花区", - "value": "210404" - }, - { - "label": "顺城区", - "value": "210411" - }, - { - "label": "抚顺县", - "value": "210421" - }, - { - "label": "新宾满族自治县", - "value": "210422" - }, - { - "label": "清原满族自治县", - "value": "210423" - } - ], - [{ - "label": "平山区", - "value": "210502" - }, - { - "label": "溪湖区", - "value": "210503" - }, - { - "label": "明山区", - "value": "210504" - }, - { - "label": "南芬区", - "value": "210505" - }, - { - "label": "本溪满族自治县", - "value": "210521" - }, - { - "label": "桓仁满族自治县", - "value": "210522" - } - ], - [{ - "label": "元宝区", - "value": "210602" - }, - { - "label": "振兴区", - "value": "210603" - }, - { - "label": "振安区", - "value": "210604" - }, - { - "label": "宽甸满族自治县", - "value": "210624" - }, - { - "label": "东港市", - "value": "210681" - }, - { - "label": "凤城市", - "value": "210682" - } - ], - [{ - "label": "古塔区", - "value": "210702" - }, - { - "label": "凌河区", - "value": "210703" - }, - { - "label": "太和区", - "value": "210711" - }, - { - "label": "黑山县", - "value": "210726" - }, - { - "label": "义县", - "value": "210727" - }, - { - "label": "凌海市", - "value": "210781" - }, - { - "label": "北镇市", - "value": "210782" - } - ], - [{ - "label": "站前区", - "value": "210802" - }, - { - "label": "西市区", - "value": "210803" - }, - { - "label": "鲅鱼圈区", - "value": "210804" - }, - { - "label": "老边区", - "value": "210811" - }, - { - "label": "盖州市", - "value": "210881" - }, - { - "label": "大石桥市", - "value": "210882" - } - ], - [{ - "label": "海州区", - "value": "210902" - }, - { - "label": "新邱区", - "value": "210903" - }, - { - "label": "太平区", - "value": "210904" - }, - { - "label": "清河门区", - "value": "210905" - }, - { - "label": "细河区", - "value": "210911" - }, - { - "label": "阜新蒙古族自治县", - "value": "210921" - }, - { - "label": "彰武县", - "value": "210922" - } - ], - [{ - "label": "白塔区", - "value": "211002" - }, - { - "label": "文圣区", - "value": "211003" - }, - { - "label": "宏伟区", - "value": "211004" - }, - { - "label": "弓长岭区", - "value": "211005" - }, - { - "label": "太子河区", - "value": "211011" - }, - { - "label": "辽阳县", - "value": "211021" - }, - { - "label": "灯塔市", - "value": "211081" - } - ], - [{ - "label": "双台子区", - "value": "211102" - }, - { - "label": "兴隆台区", - "value": "211103" - }, - { - "label": "大洼区", - "value": "211104" - }, - { - "label": "盘山县", - "value": "211122" - } - ], - [{ - "label": "银州区", - "value": "211202" - }, - { - "label": "清河区", - "value": "211204" - }, - { - "label": "铁岭县", - "value": "211221" - }, - { - "label": "西丰县", - "value": "211223" - }, - { - "label": "昌图县", - "value": "211224" - }, - { - "label": "调兵山市", - "value": "211281" - }, - { - "label": "开原市", - "value": "211282" - } - ], - [{ - "label": "双塔区", - "value": "211302" - }, - { - "label": "龙城区", - "value": "211303" - }, - { - "label": "朝阳县", - "value": "211321" - }, - { - "label": "建平县", - "value": "211322" - }, - { - "label": "喀喇沁左翼蒙古族自治县", - "value": "211324" - }, - { - "label": "北票市", - "value": "211381" - }, - { - "label": "凌源市", - "value": "211382" - } - ], - [{ - "label": "连山区", - "value": "211402" - }, - { - "label": "龙港区", - "value": "211403" - }, - { - "label": "南票区", - "value": "211404" - }, - { - "label": "绥中县", - "value": "211421" - }, - { - "label": "建昌县", - "value": "211422" - }, - { - "label": "兴城市", - "value": "211481" - } - ] - ], - [ - [{ - "label": "南关区", - "value": "220102" - }, - { - "label": "宽城区", - "value": "220103" - }, - { - "label": "朝阳区", - "value": "220104" - }, - { - "label": "二道区", - "value": "220105" - }, - { - "label": "绿园区", - "value": "220106" - }, - { - "label": "双阳区", - "value": "220112" - }, - { - "label": "九台区", - "value": "220113" - }, - { - "label": "农安县", - "value": "220122" - }, - { - "label": "长春经济技术开发区", - "value": "220171" - }, - { - "label": "长春净月高新技术产业开发区", - "value": "220172" - }, - { - "label": "长春高新技术产业开发区", - "value": "220173" - }, - { - "label": "长春汽车经济技术开发区", - "value": "220174" - }, - { - "label": "榆树市", - "value": "220182" - }, - { - "label": "德惠市", - "value": "220183" - } - ], - [{ - "label": "昌邑区", - "value": "220202" - }, - { - "label": "龙潭区", - "value": "220203" - }, - { - "label": "船营区", - "value": "220204" - }, - { - "label": "丰满区", - "value": "220211" - }, - { - "label": "永吉县", - "value": "220221" - }, - { - "label": "吉林经济开发区", - "value": "220271" - }, - { - "label": "吉林高新技术产业开发区", - "value": "220272" - }, - { - "label": "吉林中国新加坡食品区", - "value": "220273" - }, - { - "label": "蛟河市", - "value": "220281" - }, - { - "label": "桦甸市", - "value": "220282" - }, - { - "label": "舒兰市", - "value": "220283" - }, - { - "label": "磐石市", - "value": "220284" - } - ], - [{ - "label": "铁西区", - "value": "220302" - }, - { - "label": "铁东区", - "value": "220303" - }, - { - "label": "梨树县", - "value": "220322" - }, - { - "label": "伊通满族自治县", - "value": "220323" - }, - { - "label": "公主岭市", - "value": "220381" - }, - { - "label": "双辽市", - "value": "220382" - } - ], - [{ - "label": "龙山区", - "value": "220402" - }, - { - "label": "西安区", - "value": "220403" - }, - { - "label": "东丰县", - "value": "220421" - }, - { - "label": "东辽县", - "value": "220422" - } - ], - [{ - "label": "东昌区", - "value": "220502" - }, - { - "label": "二道江区", - "value": "220503" - }, - { - "label": "通化县", - "value": "220521" - }, - { - "label": "辉南县", - "value": "220523" - }, - { - "label": "柳河县", - "value": "220524" - }, - { - "label": "梅河口市", - "value": "220581" - }, - { - "label": "集安市", - "value": "220582" - } - ], - [{ - "label": "浑江区", - "value": "220602" - }, - { - "label": "江源区", - "value": "220605" - }, - { - "label": "抚松县", - "value": "220621" - }, - { - "label": "靖宇县", - "value": "220622" - }, - { - "label": "长白朝鲜族自治县", - "value": "220623" - }, - { - "label": "临江市", - "value": "220681" - } - ], - [{ - "label": "宁江区", - "value": "220702" - }, - { - "label": "前郭尔罗斯蒙古族自治县", - "value": "220721" - }, - { - "label": "长岭县", - "value": "220722" - }, - { - "label": "乾安县", - "value": "220723" - }, - { - "label": "吉林松原经济开发区", - "value": "220771" - }, - { - "label": "扶余市", - "value": "220781" - } - ], - [{ - "label": "洮北区", - "value": "220802" - }, - { - "label": "镇赉县", - "value": "220821" - }, - { - "label": "通榆县", - "value": "220822" - }, - { - "label": "吉林白城经济开发区", - "value": "220871" - }, - { - "label": "洮南市", - "value": "220881" - }, - { - "label": "大安市", - "value": "220882" - } - ], - [{ - "label": "延吉市", - "value": "222401" - }, - { - "label": "图们市", - "value": "222402" - }, - { - "label": "敦化市", - "value": "222403" - }, - { - "label": "珲春市", - "value": "222404" - }, - { - "label": "龙井市", - "value": "222405" - }, - { - "label": "和龙市", - "value": "222406" - }, - { - "label": "汪清县", - "value": "222424" - }, - { - "label": "安图县", - "value": "222426" - } - ] - ], - [ - [{ - "label": "道里区", - "value": "230102" - }, - { - "label": "南岗区", - "value": "230103" - }, - { - "label": "道外区", - "value": "230104" - }, - { - "label": "平房区", - "value": "230108" - }, - { - "label": "松北区", - "value": "230109" - }, - { - "label": "香坊区", - "value": "230110" - }, - { - "label": "呼兰区", - "value": "230111" - }, - { - "label": "阿城区", - "value": "230112" - }, - { - "label": "双城区", - "value": "230113" - }, - { - "label": "依兰县", - "value": "230123" - }, - { - "label": "方正县", - "value": "230124" - }, - { - "label": "宾县", - "value": "230125" - }, - { - "label": "巴彦县", - "value": "230126" - }, - { - "label": "木兰县", - "value": "230127" - }, - { - "label": "通河县", - "value": "230128" - }, - { - "label": "延寿县", - "value": "230129" - }, - { - "label": "尚志市", - "value": "230183" - }, - { - "label": "五常市", - "value": "230184" - } - ], - [{ - "label": "龙沙区", - "value": "230202" - }, - { - "label": "建华区", - "value": "230203" - }, - { - "label": "铁锋区", - "value": "230204" - }, - { - "label": "昂昂溪区", - "value": "230205" - }, - { - "label": "富拉尔基区", - "value": "230206" - }, - { - "label": "碾子山区", - "value": "230207" - }, - { - "label": "梅里斯达斡尔族区", - "value": "230208" - }, - { - "label": "龙江县", - "value": "230221" - }, - { - "label": "依安县", - "value": "230223" - }, - { - "label": "泰来县", - "value": "230224" - }, - { - "label": "甘南县", - "value": "230225" - }, - { - "label": "富裕县", - "value": "230227" - }, - { - "label": "克山县", - "value": "230229" - }, - { - "label": "克东县", - "value": "230230" - }, - { - "label": "拜泉县", - "value": "230231" - }, - { - "label": "讷河市", - "value": "230281" - } - ], - [{ - "label": "鸡冠区", - "value": "230302" - }, - { - "label": "恒山区", - "value": "230303" - }, - { - "label": "滴道区", - "value": "230304" - }, - { - "label": "梨树区", - "value": "230305" - }, - { - "label": "城子河区", - "value": "230306" - }, - { - "label": "麻山区", - "value": "230307" - }, - { - "label": "鸡东县", - "value": "230321" - }, - { - "label": "虎林市", - "value": "230381" - }, - { - "label": "密山市", - "value": "230382" - } - ], - [{ - "label": "向阳区", - "value": "230402" - }, - { - "label": "工农区", - "value": "230403" - }, - { - "label": "南山区", - "value": "230404" - }, - { - "label": "兴安区", - "value": "230405" - }, - { - "label": "东山区", - "value": "230406" - }, - { - "label": "兴山区", - "value": "230407" - }, - { - "label": "萝北县", - "value": "230421" - }, - { - "label": "绥滨县", - "value": "230422" - } - ], - [{ - "label": "尖山区", - "value": "230502" - }, - { - "label": "岭东区", - "value": "230503" - }, - { - "label": "四方台区", - "value": "230505" - }, - { - "label": "宝山区", - "value": "230506" - }, - { - "label": "集贤县", - "value": "230521" - }, - { - "label": "友谊县", - "value": "230522" - }, - { - "label": "宝清县", - "value": "230523" - }, - { - "label": "饶河县", - "value": "230524" - } - ], - [{ - "label": "萨尔图区", - "value": "230602" - }, - { - "label": "龙凤区", - "value": "230603" - }, - { - "label": "让胡路区", - "value": "230604" - }, - { - "label": "红岗区", - "value": "230605" - }, - { - "label": "大同区", - "value": "230606" - }, - { - "label": "肇州县", - "value": "230621" - }, - { - "label": "肇源县", - "value": "230622" - }, - { - "label": "林甸县", - "value": "230623" - }, - { - "label": "杜尔伯特蒙古族自治县", - "value": "230624" - }, - { - "label": "大庆高新技术产业开发区", - "value": "230671" - } - ], - [{ - "label": "伊春区", - "value": "230702" - }, - { - "label": "南岔区", - "value": "230703" - }, - { - "label": "友好区", - "value": "230704" - }, - { - "label": "西林区", - "value": "230705" - }, - { - "label": "翠峦区", - "value": "230706" - }, - { - "label": "新青区", - "value": "230707" - }, - { - "label": "美溪区", - "value": "230708" - }, - { - "label": "金山屯区", - "value": "230709" - }, - { - "label": "五营区", - "value": "230710" - }, - { - "label": "乌马河区", - "value": "230711" - }, - { - "label": "汤旺河区", - "value": "230712" - }, - { - "label": "带岭区", - "value": "230713" - }, - { - "label": "乌伊岭区", - "value": "230714" - }, - { - "label": "红星区", - "value": "230715" - }, - { - "label": "上甘岭区", - "value": "230716" - }, - { - "label": "嘉荫县", - "value": "230722" - }, - { - "label": "铁力市", - "value": "230781" - } - ], - [{ - "label": "向阳区", - "value": "230803" - }, - { - "label": "前进区", - "value": "230804" - }, - { - "label": "东风区", - "value": "230805" - }, - { - "label": "郊区", - "value": "230811" - }, - { - "label": "桦南县", - "value": "230822" - }, - { - "label": "桦川县", - "value": "230826" - }, - { - "label": "汤原县", - "value": "230828" - }, - { - "label": "同江市", - "value": "230881" - }, - { - "label": "富锦市", - "value": "230882" - }, - { - "label": "抚远市", - "value": "230883" - } - ], - [{ - "label": "新兴区", - "value": "230902" - }, - { - "label": "桃山区", - "value": "230903" - }, - { - "label": "茄子河区", - "value": "230904" - }, - { - "label": "勃利县", - "value": "230921" - } - ], - [{ - "label": "东安区", - "value": "231002" - }, - { - "label": "阳明区", - "value": "231003" - }, - { - "label": "爱民区", - "value": "231004" - }, - { - "label": "西安区", - "value": "231005" - }, - { - "label": "林口县", - "value": "231025" - }, - { - "label": "牡丹江经济技术开发区", - "value": "231071" - }, - { - "label": "绥芬河市", - "value": "231081" - }, - { - "label": "海林市", - "value": "231083" - }, - { - "label": "宁安市", - "value": "231084" - }, - { - "label": "穆棱市", - "value": "231085" - }, - { - "label": "东宁市", - "value": "231086" - } - ], - [{ - "label": "爱辉区", - "value": "231102" - }, - { - "label": "嫩江县", - "value": "231121" - }, - { - "label": "逊克县", - "value": "231123" - }, - { - "label": "孙吴县", - "value": "231124" - }, - { - "label": "北安市", - "value": "231181" - }, - { - "label": "五大连池市", - "value": "231182" - } - ], - [{ - "label": "北林区", - "value": "231202" - }, - { - "label": "望奎县", - "value": "231221" - }, - { - "label": "兰西县", - "value": "231222" - }, - { - "label": "青冈县", - "value": "231223" - }, - { - "label": "庆安县", - "value": "231224" - }, - { - "label": "明水县", - "value": "231225" - }, - { - "label": "绥棱县", - "value": "231226" - }, - { - "label": "安达市", - "value": "231281" - }, - { - "label": "肇东市", - "value": "231282" - }, - { - "label": "海伦市", - "value": "231283" - } - ], - [{ - "label": "加格达奇区", - "value": "232701" - }, - { - "label": "松岭区", - "value": "232702" - }, - { - "label": "新林区", - "value": "232703" - }, - { - "label": "呼中区", - "value": "232704" - }, - { - "label": "呼玛县", - "value": "232721" - }, - { - "label": "塔河县", - "value": "232722" - }, - { - "label": "漠河县", - "value": "232723" - } - ] - ], - [ - [{ - "label": "黄浦区", - "value": "310101" - }, - { - "label": "徐汇区", - "value": "310104" - }, - { - "label": "长宁区", - "value": "310105" - }, - { - "label": "静安区", - "value": "310106" - }, - { - "label": "普陀区", - "value": "310107" - }, - { - "label": "虹口区", - "value": "310109" - }, - { - "label": "杨浦区", - "value": "310110" - }, - { - "label": "闵行区", - "value": "310112" - }, - { - "label": "宝山区", - "value": "310113" - }, - { - "label": "嘉定区", - "value": "310114" - }, - { - "label": "浦东新区", - "value": "310115" - }, - { - "label": "金山区", - "value": "310116" - }, - { - "label": "松江区", - "value": "310117" - }, - { - "label": "青浦区", - "value": "310118" - }, - { - "label": "奉贤区", - "value": "310120" - }, - { - "label": "崇明区", - "value": "310151" - } - ] - ], - [ - [{ - "label": "玄武区", - "value": "320102" - }, - { - "label": "秦淮区", - "value": "320104" - }, - { - "label": "建邺区", - "value": "320105" - }, - { - "label": "鼓楼区", - "value": "320106" - }, - { - "label": "浦口区", - "value": "320111" - }, - { - "label": "栖霞区", - "value": "320113" - }, - { - "label": "雨花台区", - "value": "320114" - }, - { - "label": "江宁区", - "value": "320115" - }, - { - "label": "六合区", - "value": "320116" - }, - { - "label": "溧水区", - "value": "320117" - }, - { - "label": "高淳区", - "value": "320118" - } - ], - [{ - "label": "锡山区", - "value": "320205" - }, - { - "label": "惠山区", - "value": "320206" - }, - { - "label": "滨湖区", - "value": "320211" - }, - { - "label": "梁溪区", - "value": "320213" - }, - { - "label": "新吴区", - "value": "320214" - }, - { - "label": "江阴市", - "value": "320281" - }, - { - "label": "宜兴市", - "value": "320282" - } - ], - [{ - "label": "鼓楼区", - "value": "320302" - }, - { - "label": "云龙区", - "value": "320303" - }, - { - "label": "贾汪区", - "value": "320305" - }, - { - "label": "泉山区", - "value": "320311" - }, - { - "label": "铜山区", - "value": "320312" - }, - { - "label": "丰县", - "value": "320321" - }, - { - "label": "沛县", - "value": "320322" - }, - { - "label": "睢宁县", - "value": "320324" - }, - { - "label": "徐州经济技术开发区", - "value": "320371" - }, - { - "label": "新沂市", - "value": "320381" - }, - { - "label": "邳州市", - "value": "320382" - } - ], - [{ - "label": "天宁区", - "value": "320402" - }, - { - "label": "钟楼区", - "value": "320404" - }, - { - "label": "新北区", - "value": "320411" - }, - { - "label": "武进区", - "value": "320412" - }, - { - "label": "金坛区", - "value": "320413" - }, - { - "label": "溧阳市", - "value": "320481" - } - ], - [{ - "label": "虎丘区", - "value": "320505" - }, - { - "label": "吴中区", - "value": "320506" - }, - { - "label": "相城区", - "value": "320507" - }, - { - "label": "姑苏区", - "value": "320508" - }, - { - "label": "吴江区", - "value": "320509" - }, - { - "label": "苏州工业园区", - "value": "320571" - }, - { - "label": "常熟市", - "value": "320581" - }, - { - "label": "张家港市", - "value": "320582" - }, - { - "label": "昆山市", - "value": "320583" - }, - { - "label": "太仓市", - "value": "320585" - } - ], - [{ - "label": "崇川区", - "value": "320602" - }, - { - "label": "港闸区", - "value": "320611" - }, - { - "label": "通州区", - "value": "320612" - }, - { - "label": "海安县", - "value": "320621" - }, - { - "label": "如东县", - "value": "320623" - }, - { - "label": "南通经济技术开发区", - "value": "320671" - }, - { - "label": "启东市", - "value": "320681" - }, - { - "label": "如皋市", - "value": "320682" - }, - { - "label": "海门市", - "value": "320684" - } - ], - [{ - "label": "连云区", - "value": "320703" - }, - { - "label": "海州区", - "value": "320706" - }, - { - "label": "赣榆区", - "value": "320707" - }, - { - "label": "东海县", - "value": "320722" - }, - { - "label": "灌云县", - "value": "320723" - }, - { - "label": "灌南县", - "value": "320724" - }, - { - "label": "连云港经济技术开发区", - "value": "320771" - }, - { - "label": "连云港高新技术产业开发区", - "value": "320772" - } - ], - [{ - "label": "淮安区", - "value": "320803" - }, - { - "label": "淮阴区", - "value": "320804" - }, - { - "label": "清江浦区", - "value": "320812" - }, - { - "label": "洪泽区", - "value": "320813" - }, - { - "label": "涟水县", - "value": "320826" - }, - { - "label": "盱眙县", - "value": "320830" - }, - { - "label": "金湖县", - "value": "320831" - }, - { - "label": "淮安经济技术开发区", - "value": "320871" - } - ], - [{ - "label": "亭湖区", - "value": "320902" - }, - { - "label": "盐都区", - "value": "320903" - }, - { - "label": "大丰区", - "value": "320904" - }, - { - "label": "响水县", - "value": "320921" - }, - { - "label": "滨海县", - "value": "320922" - }, - { - "label": "阜宁县", - "value": "320923" - }, - { - "label": "射阳县", - "value": "320924" - }, - { - "label": "建湖县", - "value": "320925" - }, - { - "label": "盐城经济技术开发区", - "value": "320971" - }, - { - "label": "东台市", - "value": "320981" - } - ], - [{ - "label": "广陵区", - "value": "321002" - }, - { - "label": "邗江区", - "value": "321003" - }, - { - "label": "江都区", - "value": "321012" - }, - { - "label": "宝应县", - "value": "321023" - }, - { - "label": "扬州经济技术开发区", - "value": "321071" - }, - { - "label": "仪征市", - "value": "321081" - }, - { - "label": "高邮市", - "value": "321084" - } - ], - [{ - "label": "京口区", - "value": "321102" - }, - { - "label": "润州区", - "value": "321111" - }, - { - "label": "丹徒区", - "value": "321112" - }, - { - "label": "镇江新区", - "value": "321171" - }, - { - "label": "丹阳市", - "value": "321181" - }, - { - "label": "扬中市", - "value": "321182" - }, - { - "label": "句容市", - "value": "321183" - } - ], - [{ - "label": "海陵区", - "value": "321202" - }, - { - "label": "高港区", - "value": "321203" - }, - { - "label": "姜堰区", - "value": "321204" - }, - { - "label": "泰州医药高新技术产业开发区", - "value": "321271" - }, - { - "label": "兴化市", - "value": "321281" - }, - { - "label": "靖江市", - "value": "321282" - }, - { - "label": "泰兴市", - "value": "321283" - } - ], - [{ - "label": "宿城区", - "value": "321302" - }, - { - "label": "宿豫区", - "value": "321311" - }, - { - "label": "沭阳县", - "value": "321322" - }, - { - "label": "泗阳县", - "value": "321323" - }, - { - "label": "泗洪县", - "value": "321324" - }, - { - "label": "宿迁经济技术开发区", - "value": "321371" - } - ] - ], - [ - [{ - "label": "上城区", - "value": "330102" - }, - { - "label": "下城区", - "value": "330103" - }, - { - "label": "江干区", - "value": "330104" - }, - { - "label": "拱墅区", - "value": "330105" - }, - { - "label": "西湖区", - "value": "330106" - }, - { - "label": "滨江区", - "value": "330108" - }, - { - "label": "萧山区", - "value": "330109" - }, - { - "label": "余杭区", - "value": "330110" - }, - { - "label": "富阳区", - "value": "330111" - }, - { - "label": "临安区", - "value": "330112" - }, - { - "label": "桐庐县", - "value": "330122" - }, - { - "label": "淳安县", - "value": "330127" - }, - { - "label": "建德市", - "value": "330182" - } - ], - [{ - "label": "海曙区", - "value": "330203" - }, - { - "label": "江北区", - "value": "330205" - }, - { - "label": "北仑区", - "value": "330206" - }, - { - "label": "镇海区", - "value": "330211" - }, - { - "label": "鄞州区", - "value": "330212" - }, - { - "label": "奉化区", - "value": "330213" - }, - { - "label": "象山县", - "value": "330225" - }, - { - "label": "宁海县", - "value": "330226" - }, - { - "label": "余姚市", - "value": "330281" - }, - { - "label": "慈溪市", - "value": "330282" - } - ], - [{ - "label": "鹿城区", - "value": "330302" - }, - { - "label": "龙湾区", - "value": "330303" - }, - { - "label": "瓯海区", - "value": "330304" - }, - { - "label": "洞头区", - "value": "330305" - }, - { - "label": "永嘉县", - "value": "330324" - }, - { - "label": "平阳县", - "value": "330326" - }, - { - "label": "苍南县", - "value": "330327" - }, - { - "label": "文成县", - "value": "330328" - }, - { - "label": "泰顺县", - "value": "330329" - }, - { - "label": "温州经济技术开发区", - "value": "330371" - }, - { - "label": "瑞安市", - "value": "330381" - }, - { - "label": "乐清市", - "value": "330382" - } - ], - [{ - "label": "南湖区", - "value": "330402" - }, - { - "label": "秀洲区", - "value": "330411" - }, - { - "label": "嘉善县", - "value": "330421" - }, - { - "label": "海盐县", - "value": "330424" - }, - { - "label": "海宁市", - "value": "330481" - }, - { - "label": "平湖市", - "value": "330482" - }, - { - "label": "桐乡市", - "value": "330483" - } - ], - [{ - "label": "吴兴区", - "value": "330502" - }, - { - "label": "南浔区", - "value": "330503" - }, - { - "label": "德清县", - "value": "330521" - }, - { - "label": "长兴县", - "value": "330522" - }, - { - "label": "安吉县", - "value": "330523" - } - ], - [{ - "label": "越城区", - "value": "330602" - }, - { - "label": "柯桥区", - "value": "330603" - }, - { - "label": "上虞区", - "value": "330604" - }, - { - "label": "新昌县", - "value": "330624" - }, - { - "label": "诸暨市", - "value": "330681" - }, - { - "label": "嵊州市", - "value": "330683" - } - ], - [{ - "label": "婺城区", - "value": "330702" - }, - { - "label": "金东区", - "value": "330703" - }, - { - "label": "武义县", - "value": "330723" - }, - { - "label": "浦江县", - "value": "330726" - }, - { - "label": "磐安县", - "value": "330727" - }, - { - "label": "兰溪市", - "value": "330781" - }, - { - "label": "义乌市", - "value": "330782" - }, - { - "label": "东阳市", - "value": "330783" - }, - { - "label": "永康市", - "value": "330784" - } - ], - [{ - "label": "柯城区", - "value": "330802" - }, - { - "label": "衢江区", - "value": "330803" - }, - { - "label": "常山县", - "value": "330822" - }, - { - "label": "开化县", - "value": "330824" - }, - { - "label": "龙游县", - "value": "330825" - }, - { - "label": "江山市", - "value": "330881" - } - ], - [{ - "label": "定海区", - "value": "330902" - }, - { - "label": "普陀区", - "value": "330903" - }, - { - "label": "岱山县", - "value": "330921" - }, - { - "label": "嵊泗县", - "value": "330922" - } - ], - [{ - "label": "椒江区", - "value": "331002" - }, - { - "label": "黄岩区", - "value": "331003" - }, - { - "label": "路桥区", - "value": "331004" - }, - { - "label": "三门县", - "value": "331022" - }, - { - "label": "天台县", - "value": "331023" - }, - { - "label": "仙居县", - "value": "331024" - }, - { - "label": "温岭市", - "value": "331081" - }, - { - "label": "临海市", - "value": "331082" - }, - { - "label": "玉环市", - "value": "331083" - } - ], - [{ - "label": "莲都区", - "value": "331102" - }, - { - "label": "青田县", - "value": "331121" - }, - { - "label": "缙云县", - "value": "331122" - }, - { - "label": "遂昌县", - "value": "331123" - }, - { - "label": "松阳县", - "value": "331124" - }, - { - "label": "云和县", - "value": "331125" - }, - { - "label": "庆元县", - "value": "331126" - }, - { - "label": "景宁畲族自治县", - "value": "331127" - }, - { - "label": "龙泉市", - "value": "331181" - } - ] - ], - [ - [{ - "label": "瑶海区", - "value": "340102" - }, - { - "label": "庐阳区", - "value": "340103" - }, - { - "label": "蜀山区", - "value": "340104" - }, - { - "label": "包河区", - "value": "340111" - }, - { - "label": "长丰县", - "value": "340121" - }, - { - "label": "肥东县", - "value": "340122" - }, - { - "label": "肥西县", - "value": "340123" - }, - { - "label": "庐江县", - "value": "340124" - }, - { - "label": "合肥高新技术产业开发区", - "value": "340171" - }, - { - "label": "合肥经济技术开发区", - "value": "340172" - }, - { - "label": "合肥新站高新技术产业开发区", - "value": "340173" - }, - { - "label": "巢湖市", - "value": "340181" - } - ], - [{ - "label": "镜湖区", - "value": "340202" - }, - { - "label": "弋江区", - "value": "340203" - }, - { - "label": "鸠江区", - "value": "340207" - }, - { - "label": "三山区", - "value": "340208" - }, - { - "label": "芜湖县", - "value": "340221" - }, - { - "label": "繁昌县", - "value": "340222" - }, - { - "label": "南陵县", - "value": "340223" - }, - { - "label": "无为县", - "value": "340225" - }, - { - "label": "芜湖经济技术开发区", - "value": "340271" - }, - { - "label": "安徽芜湖长江大桥经济开发区", - "value": "340272" - } - ], - [{ - "label": "龙子湖区", - "value": "340302" - }, - { - "label": "蚌山区", - "value": "340303" - }, - { - "label": "禹会区", - "value": "340304" - }, - { - "label": "淮上区", - "value": "340311" - }, - { - "label": "怀远县", - "value": "340321" - }, - { - "label": "五河县", - "value": "340322" - }, - { - "label": "固镇县", - "value": "340323" - }, - { - "label": "蚌埠市高新技术开发区", - "value": "340371" - }, - { - "label": "蚌埠市经济开发区", - "value": "340372" - } - ], - [{ - "label": "大通区", - "value": "340402" - }, - { - "label": "田家庵区", - "value": "340403" - }, - { - "label": "谢家集区", - "value": "340404" - }, - { - "label": "八公山区", - "value": "340405" - }, - { - "label": "潘集区", - "value": "340406" - }, - { - "label": "凤台县", - "value": "340421" - }, - { - "label": "寿县", - "value": "340422" - } - ], - [{ - "label": "花山区", - "value": "340503" - }, - { - "label": "雨山区", - "value": "340504" - }, - { - "label": "博望区", - "value": "340506" - }, - { - "label": "当涂县", - "value": "340521" - }, - { - "label": "含山县", - "value": "340522" - }, - { - "label": "和县", - "value": "340523" - } - ], - [{ - "label": "杜集区", - "value": "340602" - }, - { - "label": "相山区", - "value": "340603" - }, - { - "label": "烈山区", - "value": "340604" - }, - { - "label": "濉溪县", - "value": "340621" - } - ], - [{ - "label": "铜官区", - "value": "340705" - }, - { - "label": "义安区", - "value": "340706" - }, - { - "label": "郊区", - "value": "340711" - }, - { - "label": "枞阳县", - "value": "340722" - } - ], - [{ - "label": "迎江区", - "value": "340802" - }, - { - "label": "大观区", - "value": "340803" - }, - { - "label": "宜秀区", - "value": "340811" - }, - { - "label": "怀宁县", - "value": "340822" - }, - { - "label": "潜山县", - "value": "340824" - }, - { - "label": "太湖县", - "value": "340825" - }, - { - "label": "宿松县", - "value": "340826" - }, - { - "label": "望江县", - "value": "340827" - }, - { - "label": "岳西县", - "value": "340828" - }, - { - "label": "安徽安庆经济开发区", - "value": "340871" - }, - { - "label": "桐城市", - "value": "340881" - } - ], - [{ - "label": "屯溪区", - "value": "341002" - }, - { - "label": "黄山区", - "value": "341003" - }, - { - "label": "徽州区", - "value": "341004" - }, - { - "label": "歙县", - "value": "341021" - }, - { - "label": "休宁县", - "value": "341022" - }, - { - "label": "黟县", - "value": "341023" - }, - { - "label": "祁门县", - "value": "341024" - } - ], - [{ - "label": "琅琊区", - "value": "341102" - }, - { - "label": "南谯区", - "value": "341103" - }, - { - "label": "来安县", - "value": "341122" - }, - { - "label": "全椒县", - "value": "341124" - }, - { - "label": "定远县", - "value": "341125" - }, - { - "label": "凤阳县", - "value": "341126" - }, - { - "label": "苏滁现代产业园", - "value": "341171" - }, - { - "label": "滁州经济技术开发区", - "value": "341172" - }, - { - "label": "天长市", - "value": "341181" - }, - { - "label": "明光市", - "value": "341182" - } - ], - [{ - "label": "颍州区", - "value": "341202" - }, - { - "label": "颍东区", - "value": "341203" - }, - { - "label": "颍泉区", - "value": "341204" - }, - { - "label": "临泉县", - "value": "341221" - }, - { - "label": "太和县", - "value": "341222" - }, - { - "label": "阜南县", - "value": "341225" - }, - { - "label": "颍上县", - "value": "341226" - }, - { - "label": "阜阳合肥现代产业园区", - "value": "341271" - }, - { - "label": "阜阳经济技术开发区", - "value": "341272" - }, - { - "label": "界首市", - "value": "341282" - } - ], - [{ - "label": "埇桥区", - "value": "341302" - }, - { - "label": "砀山县", - "value": "341321" - }, - { - "label": "萧县", - "value": "341322" - }, - { - "label": "灵璧县", - "value": "341323" - }, - { - "label": "泗县", - "value": "341324" - }, - { - "label": "宿州马鞍山现代产业园区", - "value": "341371" - }, - { - "label": "宿州经济技术开发区", - "value": "341372" - } - ], - [{ - "label": "金安区", - "value": "341502" - }, - { - "label": "裕安区", - "value": "341503" - }, - { - "label": "叶集区", - "value": "341504" - }, - { - "label": "霍邱县", - "value": "341522" - }, - { - "label": "舒城县", - "value": "341523" - }, - { - "label": "金寨县", - "value": "341524" - }, - { - "label": "霍山县", - "value": "341525" - } - ], - [{ - "label": "谯城区", - "value": "341602" - }, - { - "label": "涡阳县", - "value": "341621" - }, - { - "label": "蒙城县", - "value": "341622" - }, - { - "label": "利辛县", - "value": "341623" - } - ], - [{ - "label": "贵池区", - "value": "341702" - }, - { - "label": "东至县", - "value": "341721" - }, - { - "label": "石台县", - "value": "341722" - }, - { - "label": "青阳县", - "value": "341723" - } - ], - [{ - "label": "宣州区", - "value": "341802" - }, - { - "label": "郎溪县", - "value": "341821" - }, - { - "label": "广德县", - "value": "341822" - }, - { - "label": "泾县", - "value": "341823" - }, - { - "label": "绩溪县", - "value": "341824" - }, - { - "label": "旌德县", - "value": "341825" - }, - { - "label": "宣城市经济开发区", - "value": "341871" - }, - { - "label": "宁国市", - "value": "341881" - } - ] - ], - [ - [{ - "label": "鼓楼区", - "value": "350102" - }, - { - "label": "台江区", - "value": "350103" - }, - { - "label": "仓山区", - "value": "350104" - }, - { - "label": "马尾区", - "value": "350105" - }, - { - "label": "晋安区", - "value": "350111" - }, - { - "label": "闽侯县", - "value": "350121" - }, - { - "label": "连江县", - "value": "350122" - }, - { - "label": "罗源县", - "value": "350123" - }, - { - "label": "闽清县", - "value": "350124" - }, - { - "label": "永泰县", - "value": "350125" - }, - { - "label": "平潭县", - "value": "350128" - }, - { - "label": "福清市", - "value": "350181" - }, - { - "label": "长乐市", - "value": "350182" - } - ], - [{ - "label": "思明区", - "value": "350203" - }, - { - "label": "海沧区", - "value": "350205" - }, - { - "label": "湖里区", - "value": "350206" - }, - { - "label": "集美区", - "value": "350211" - }, - { - "label": "同安区", - "value": "350212" - }, - { - "label": "翔安区", - "value": "350213" - } - ], - [{ - "label": "城厢区", - "value": "350302" - }, - { - "label": "涵江区", - "value": "350303" - }, - { - "label": "荔城区", - "value": "350304" - }, - { - "label": "秀屿区", - "value": "350305" - }, - { - "label": "仙游县", - "value": "350322" - } - ], - [{ - "label": "梅列区", - "value": "350402" - }, - { - "label": "三元区", - "value": "350403" - }, - { - "label": "明溪县", - "value": "350421" - }, - { - "label": "清流县", - "value": "350423" - }, - { - "label": "宁化县", - "value": "350424" - }, - { - "label": "大田县", - "value": "350425" - }, - { - "label": "尤溪县", - "value": "350426" - }, - { - "label": "沙县", - "value": "350427" - }, - { - "label": "将乐县", - "value": "350428" - }, - { - "label": "泰宁县", - "value": "350429" - }, - { - "label": "建宁县", - "value": "350430" - }, - { - "label": "永安市", - "value": "350481" - } - ], - [{ - "label": "鲤城区", - "value": "350502" - }, - { - "label": "丰泽区", - "value": "350503" - }, - { - "label": "洛江区", - "value": "350504" - }, - { - "label": "泉港区", - "value": "350505" - }, - { - "label": "惠安县", - "value": "350521" - }, - { - "label": "安溪县", - "value": "350524" - }, - { - "label": "永春县", - "value": "350525" - }, - { - "label": "德化县", - "value": "350526" - }, - { - "label": "金门县", - "value": "350527" - }, - { - "label": "石狮市", - "value": "350581" - }, - { - "label": "晋江市", - "value": "350582" - }, - { - "label": "南安市", - "value": "350583" - } - ], - [{ - "label": "芗城区", - "value": "350602" - }, - { - "label": "龙文区", - "value": "350603" - }, - { - "label": "云霄县", - "value": "350622" - }, - { - "label": "漳浦县", - "value": "350623" - }, - { - "label": "诏安县", - "value": "350624" - }, - { - "label": "长泰县", - "value": "350625" - }, - { - "label": "东山县", - "value": "350626" - }, - { - "label": "南靖县", - "value": "350627" - }, - { - "label": "平和县", - "value": "350628" - }, - { - "label": "华安县", - "value": "350629" - }, - { - "label": "龙海市", - "value": "350681" - } - ], - [{ - "label": "延平区", - "value": "350702" - }, - { - "label": "建阳区", - "value": "350703" - }, - { - "label": "顺昌县", - "value": "350721" - }, - { - "label": "浦城县", - "value": "350722" - }, - { - "label": "光泽县", - "value": "350723" - }, - { - "label": "松溪县", - "value": "350724" - }, - { - "label": "政和县", - "value": "350725" - }, - { - "label": "邵武市", - "value": "350781" - }, - { - "label": "武夷山市", - "value": "350782" - }, - { - "label": "建瓯市", - "value": "350783" - } - ], - [{ - "label": "新罗区", - "value": "350802" - }, - { - "label": "永定区", - "value": "350803" - }, - { - "label": "长汀县", - "value": "350821" - }, - { - "label": "上杭县", - "value": "350823" - }, - { - "label": "武平县", - "value": "350824" - }, - { - "label": "连城县", - "value": "350825" - }, - { - "label": "漳平市", - "value": "350881" - } - ], - [{ - "label": "蕉城区", - "value": "350902" - }, - { - "label": "霞浦县", - "value": "350921" - }, - { - "label": "古田县", - "value": "350922" - }, - { - "label": "屏南县", - "value": "350923" - }, - { - "label": "寿宁县", - "value": "350924" - }, - { - "label": "周宁县", - "value": "350925" - }, - { - "label": "柘荣县", - "value": "350926" - }, - { - "label": "福安市", - "value": "350981" - }, - { - "label": "福鼎市", - "value": "350982" - } - ] - ], - [ - [{ - "label": "东湖区", - "value": "360102" - }, - { - "label": "西湖区", - "value": "360103" - }, - { - "label": "青云谱区", - "value": "360104" - }, - { - "label": "湾里区", - "value": "360105" - }, - { - "label": "青山湖区", - "value": "360111" - }, - { - "label": "新建区", - "value": "360112" - }, - { - "label": "南昌县", - "value": "360121" - }, - { - "label": "安义县", - "value": "360123" - }, - { - "label": "进贤县", - "value": "360124" - } - ], - [{ - "label": "昌江区", - "value": "360202" - }, - { - "label": "珠山区", - "value": "360203" - }, - { - "label": "浮梁县", - "value": "360222" - }, - { - "label": "乐平市", - "value": "360281" - } - ], - [{ - "label": "安源区", - "value": "360302" - }, - { - "label": "湘东区", - "value": "360313" - }, - { - "label": "莲花县", - "value": "360321" - }, - { - "label": "上栗县", - "value": "360322" - }, - { - "label": "芦溪县", - "value": "360323" - } - ], - [{ - "label": "濂溪区", - "value": "360402" - }, - { - "label": "浔阳区", - "value": "360403" - }, - { - "label": "柴桑区", - "value": "360404" - }, - { - "label": "武宁县", - "value": "360423" - }, - { - "label": "修水县", - "value": "360424" - }, - { - "label": "永修县", - "value": "360425" - }, - { - "label": "德安县", - "value": "360426" - }, - { - "label": "都昌县", - "value": "360428" - }, - { - "label": "湖口县", - "value": "360429" - }, - { - "label": "彭泽县", - "value": "360430" - }, - { - "label": "瑞昌市", - "value": "360481" - }, - { - "label": "共青城市", - "value": "360482" - }, - { - "label": "庐山市", - "value": "360483" - } - ], - [{ - "label": "渝水区", - "value": "360502" - }, - { - "label": "分宜县", - "value": "360521" - } - ], - [{ - "label": "月湖区", - "value": "360602" - }, - { - "label": "余江县", - "value": "360622" - }, - { - "label": "贵溪市", - "value": "360681" - } - ], - [{ - "label": "章贡区", - "value": "360702" - }, - { - "label": "南康区", - "value": "360703" - }, - { - "label": "赣县区", - "value": "360704" - }, - { - "label": "信丰县", - "value": "360722" - }, - { - "label": "大余县", - "value": "360723" - }, - { - "label": "上犹县", - "value": "360724" - }, - { - "label": "崇义县", - "value": "360725" - }, - { - "label": "安远县", - "value": "360726" - }, - { - "label": "龙南县", - "value": "360727" - }, - { - "label": "定南县", - "value": "360728" - }, - { - "label": "全南县", - "value": "360729" - }, - { - "label": "宁都县", - "value": "360730" - }, - { - "label": "于都县", - "value": "360731" - }, - { - "label": "兴国县", - "value": "360732" - }, - { - "label": "会昌县", - "value": "360733" - }, - { - "label": "寻乌县", - "value": "360734" - }, - { - "label": "石城县", - "value": "360735" - }, - { - "label": "瑞金市", - "value": "360781" - } - ], - [{ - "label": "吉州区", - "value": "360802" - }, - { - "label": "青原区", - "value": "360803" - }, - { - "label": "吉安县", - "value": "360821" - }, - { - "label": "吉水县", - "value": "360822" - }, - { - "label": "峡江县", - "value": "360823" - }, - { - "label": "新干县", - "value": "360824" - }, - { - "label": "永丰县", - "value": "360825" - }, - { - "label": "泰和县", - "value": "360826" - }, - { - "label": "遂川县", - "value": "360827" - }, - { - "label": "万安县", - "value": "360828" - }, - { - "label": "安福县", - "value": "360829" - }, - { - "label": "永新县", - "value": "360830" - }, - { - "label": "井冈山市", - "value": "360881" - } - ], - [{ - "label": "袁州区", - "value": "360902" - }, - { - "label": "奉新县", - "value": "360921" - }, - { - "label": "万载县", - "value": "360922" - }, - { - "label": "上高县", - "value": "360923" - }, - { - "label": "宜丰县", - "value": "360924" - }, - { - "label": "靖安县", - "value": "360925" - }, - { - "label": "铜鼓县", - "value": "360926" - }, - { - "label": "丰城市", - "value": "360981" - }, - { - "label": "樟树市", - "value": "360982" - }, - { - "label": "高安市", - "value": "360983" - } - ], - [{ - "label": "临川区", - "value": "361002" - }, - { - "label": "东乡区", - "value": "361003" - }, - { - "label": "南城县", - "value": "361021" - }, - { - "label": "黎川县", - "value": "361022" - }, - { - "label": "南丰县", - "value": "361023" - }, - { - "label": "崇仁县", - "value": "361024" - }, - { - "label": "乐安县", - "value": "361025" - }, - { - "label": "宜黄县", - "value": "361026" - }, - { - "label": "金溪县", - "value": "361027" - }, - { - "label": "资溪县", - "value": "361028" - }, - { - "label": "广昌县", - "value": "361030" - } - ], - [{ - "label": "信州区", - "value": "361102" - }, - { - "label": "广丰区", - "value": "361103" - }, - { - "label": "上饶县", - "value": "361121" - }, - { - "label": "玉山县", - "value": "361123" - }, - { - "label": "铅山县", - "value": "361124" - }, - { - "label": "横峰县", - "value": "361125" - }, - { - "label": "弋阳县", - "value": "361126" - }, - { - "label": "余干县", - "value": "361127" - }, - { - "label": "鄱阳县", - "value": "361128" - }, - { - "label": "万年县", - "value": "361129" - }, - { - "label": "婺源县", - "value": "361130" - }, - { - "label": "德兴市", - "value": "361181" - } - ] - ], - [ - [{ - "label": "历下区", - "value": "370102" - }, - { - "label": "市中区", - "value": "370103" - }, - { - "label": "槐荫区", - "value": "370104" - }, - { - "label": "天桥区", - "value": "370105" - }, - { - "label": "历城区", - "value": "370112" - }, - { - "label": "长清区", - "value": "370113" - }, - { - "label": "章丘区", - "value": "370114" - }, - { - "label": "平阴县", - "value": "370124" - }, - { - "label": "济阳县", - "value": "370125" - }, - { - "label": "商河县", - "value": "370126" - }, - { - "label": "济南高新技术产业开发区", - "value": "370171" - } - ], - [{ - "label": "市南区", - "value": "370202" - }, - { - "label": "市北区", - "value": "370203" - }, - { - "label": "黄岛区", - "value": "370211" - }, - { - "label": "崂山区", - "value": "370212" - }, - { - "label": "李沧区", - "value": "370213" - }, - { - "label": "城阳区", - "value": "370214" - }, - { - "label": "即墨区", - "value": "370215" - }, - { - "label": "青岛高新技术产业开发区", - "value": "370271" - }, - { - "label": "胶州市", - "value": "370281" - }, - { - "label": "平度市", - "value": "370283" - }, - { - "label": "莱西市", - "value": "370285" - } - ], - [{ - "label": "淄川区", - "value": "370302" - }, - { - "label": "张店区", - "value": "370303" - }, - { - "label": "博山区", - "value": "370304" - }, - { - "label": "临淄区", - "value": "370305" - }, - { - "label": "周村区", - "value": "370306" - }, - { - "label": "桓台县", - "value": "370321" - }, - { - "label": "高青县", - "value": "370322" - }, - { - "label": "沂源县", - "value": "370323" - } - ], - [{ - "label": "市中区", - "value": "370402" - }, - { - "label": "薛城区", - "value": "370403" - }, - { - "label": "峄城区", - "value": "370404" - }, - { - "label": "台儿庄区", - "value": "370405" - }, - { - "label": "山亭区", - "value": "370406" - }, - { - "label": "滕州市", - "value": "370481" - } - ], - [{ - "label": "东营区", - "value": "370502" - }, - { - "label": "河口区", - "value": "370503" - }, - { - "label": "垦利区", - "value": "370505" - }, - { - "label": "利津县", - "value": "370522" - }, - { - "label": "广饶县", - "value": "370523" - }, - { - "label": "东营经济技术开发区", - "value": "370571" - }, - { - "label": "东营港经济开发区", - "value": "370572" - } - ], - [{ - "label": "芝罘区", - "value": "370602" - }, - { - "label": "福山区", - "value": "370611" - }, - { - "label": "牟平区", - "value": "370612" - }, - { - "label": "莱山区", - "value": "370613" - }, - { - "label": "长岛县", - "value": "370634" - }, - { - "label": "烟台高新技术产业开发区", - "value": "370671" - }, - { - "label": "烟台经济技术开发区", - "value": "370672" - }, - { - "label": "龙口市", - "value": "370681" - }, - { - "label": "莱阳市", - "value": "370682" - }, - { - "label": "莱州市", - "value": "370683" - }, - { - "label": "蓬莱市", - "value": "370684" - }, - { - "label": "招远市", - "value": "370685" - }, - { - "label": "栖霞市", - "value": "370686" - }, - { - "label": "海阳市", - "value": "370687" - } - ], - [{ - "label": "潍城区", - "value": "370702" - }, - { - "label": "寒亭区", - "value": "370703" - }, - { - "label": "坊子区", - "value": "370704" - }, - { - "label": "奎文区", - "value": "370705" - }, - { - "label": "临朐县", - "value": "370724" - }, - { - "label": "昌乐县", - "value": "370725" - }, - { - "label": "潍坊滨海经济技术开发区", - "value": "370772" - }, - { - "label": "青州市", - "value": "370781" - }, - { - "label": "诸城市", - "value": "370782" - }, - { - "label": "寿光市", - "value": "370783" - }, - { - "label": "安丘市", - "value": "370784" - }, - { - "label": "高密市", - "value": "370785" - }, - { - "label": "昌邑市", - "value": "370786" - } - ], - [{ - "label": "任城区", - "value": "370811" - }, - { - "label": "兖州区", - "value": "370812" - }, - { - "label": "微山县", - "value": "370826" - }, - { - "label": "鱼台县", - "value": "370827" - }, - { - "label": "金乡县", - "value": "370828" - }, - { - "label": "嘉祥县", - "value": "370829" - }, - { - "label": "汶上县", - "value": "370830" - }, - { - "label": "泗水县", - "value": "370831" - }, - { - "label": "梁山县", - "value": "370832" - }, - { - "label": "济宁高新技术产业开发区", - "value": "370871" - }, - { - "label": "曲阜市", - "value": "370881" - }, - { - "label": "邹城市", - "value": "370883" - } - ], - [{ - "label": "泰山区", - "value": "370902" - }, - { - "label": "岱岳区", - "value": "370911" - }, - { - "label": "宁阳县", - "value": "370921" - }, - { - "label": "东平县", - "value": "370923" - }, - { - "label": "新泰市", - "value": "370982" - }, - { - "label": "肥城市", - "value": "370983" - } - ], - [{ - "label": "环翠区", - "value": "371002" - }, - { - "label": "文登区", - "value": "371003" - }, - { - "label": "威海火炬高技术产业开发区", - "value": "371071" - }, - { - "label": "威海经济技术开发区", - "value": "371072" - }, - { - "label": "威海临港经济技术开发区", - "value": "371073" - }, - { - "label": "荣成市", - "value": "371082" - }, - { - "label": "乳山市", - "value": "371083" - } - ], - [{ - "label": "东港区", - "value": "371102" - }, - { - "label": "岚山区", - "value": "371103" - }, - { - "label": "五莲县", - "value": "371121" - }, - { - "label": "莒县", - "value": "371122" - }, - { - "label": "日照经济技术开发区", - "value": "371171" - }, - { - "label": "日照国际海洋城", - "value": "371172" - } - ], - [{ - "label": "莱城区", - "value": "371202" - }, - { - "label": "钢城区", - "value": "371203" - } - ], - [{ - "label": "兰山区", - "value": "371302" - }, - { - "label": "罗庄区", - "value": "371311" - }, - { - "label": "河东区", - "value": "371312" - }, - { - "label": "沂南县", - "value": "371321" - }, - { - "label": "郯城县", - "value": "371322" - }, - { - "label": "沂水县", - "value": "371323" - }, - { - "label": "兰陵县", - "value": "371324" - }, - { - "label": "费县", - "value": "371325" - }, - { - "label": "平邑县", - "value": "371326" - }, - { - "label": "莒南县", - "value": "371327" - }, - { - "label": "蒙阴县", - "value": "371328" - }, - { - "label": "临沭县", - "value": "371329" - }, - { - "label": "临沂高新技术产业开发区", - "value": "371371" - }, - { - "label": "临沂经济技术开发区", - "value": "371372" - }, - { - "label": "临沂临港经济开发区", - "value": "371373" - } - ], - [{ - "label": "德城区", - "value": "371402" - }, - { - "label": "陵城区", - "value": "371403" - }, - { - "label": "宁津县", - "value": "371422" - }, - { - "label": "庆云县", - "value": "371423" - }, - { - "label": "临邑县", - "value": "371424" - }, - { - "label": "齐河县", - "value": "371425" - }, - { - "label": "平原县", - "value": "371426" - }, - { - "label": "夏津县", - "value": "371427" - }, - { - "label": "武城县", - "value": "371428" - }, - { - "label": "德州经济技术开发区", - "value": "371471" - }, - { - "label": "德州运河经济开发区", - "value": "371472" - }, - { - "label": "乐陵市", - "value": "371481" - }, - { - "label": "禹城市", - "value": "371482" - } - ], - [{ - "label": "东昌府区", - "value": "371502" - }, - { - "label": "阳谷县", - "value": "371521" - }, - { - "label": "莘县", - "value": "371522" - }, - { - "label": "茌平县", - "value": "371523" - }, - { - "label": "东阿县", - "value": "371524" - }, - { - "label": "冠县", - "value": "371525" - }, - { - "label": "高唐县", - "value": "371526" - }, - { - "label": "临清市", - "value": "371581" - } - ], - [{ - "label": "滨城区", - "value": "371602" - }, - { - "label": "沾化区", - "value": "371603" - }, - { - "label": "惠民县", - "value": "371621" - }, - { - "label": "阳信县", - "value": "371622" - }, - { - "label": "无棣县", - "value": "371623" - }, - { - "label": "博兴县", - "value": "371625" - }, - { - "label": "邹平县", - "value": "371626" - } - ], - [{ - "label": "牡丹区", - "value": "371702" - }, - { - "label": "定陶区", - "value": "371703" - }, - { - "label": "曹县", - "value": "371721" - }, - { - "label": "单县", - "value": "371722" - }, - { - "label": "成武县", - "value": "371723" - }, - { - "label": "巨野县", - "value": "371724" - }, - { - "label": "郓城县", - "value": "371725" - }, - { - "label": "鄄城县", - "value": "371726" - }, - { - "label": "东明县", - "value": "371728" - }, - { - "label": "菏泽经济技术开发区", - "value": "371771" - }, - { - "label": "菏泽高新技术开发区", - "value": "371772" - } - ] - ], - [ - [{ - "label": "中原区", - "value": "410102" - }, - { - "label": "二七区", - "value": "410103" - }, - { - "label": "管城回族区", - "value": "410104" - }, - { - "label": "金水区", - "value": "410105" - }, - { - "label": "上街区", - "value": "410106" - }, - { - "label": "惠济区", - "value": "410108" - }, - { - "label": "中牟县", - "value": "410122" - }, - { - "label": "郑州经济技术开发区", - "value": "410171" - }, - { - "label": "郑州高新技术产业开发区", - "value": "410172" - }, - { - "label": "郑州航空港经济综合实验区", - "value": "410173" - }, - { - "label": "巩义市", - "value": "410181" - }, - { - "label": "荥阳市", - "value": "410182" - }, - { - "label": "新密市", - "value": "410183" - }, - { - "label": "新郑市", - "value": "410184" - }, - { - "label": "登封市", - "value": "410185" - } - ], - [{ - "label": "龙亭区", - "value": "410202" - }, - { - "label": "顺河回族区", - "value": "410203" - }, - { - "label": "鼓楼区", - "value": "410204" - }, - { - "label": "禹王台区", - "value": "410205" - }, - { - "label": "祥符区", - "value": "410212" - }, - { - "label": "杞县", - "value": "410221" - }, - { - "label": "通许县", - "value": "410222" - }, - { - "label": "尉氏县", - "value": "410223" - }, - { - "label": "兰考县", - "value": "410225" - } - ], - [{ - "label": "老城区", - "value": "410302" - }, - { - "label": "西工区", - "value": "410303" - }, - { - "label": "瀍河回族区", - "value": "410304" - }, - { - "label": "涧西区", - "value": "410305" - }, - { - "label": "吉利区", - "value": "410306" - }, - { - "label": "洛龙区", - "value": "410311" - }, - { - "label": "孟津县", - "value": "410322" - }, - { - "label": "新安县", - "value": "410323" - }, - { - "label": "栾川县", - "value": "410324" - }, - { - "label": "嵩县", - "value": "410325" - }, - { - "label": "汝阳县", - "value": "410326" - }, - { - "label": "宜阳县", - "value": "410327" - }, - { - "label": "洛宁县", - "value": "410328" - }, - { - "label": "伊川县", - "value": "410329" - }, - { - "label": "洛阳高新技术产业开发区", - "value": "410371" - }, - { - "label": "偃师市", - "value": "410381" - } - ], - [{ - "label": "新华区", - "value": "410402" - }, - { - "label": "卫东区", - "value": "410403" - }, - { - "label": "石龙区", - "value": "410404" - }, - { - "label": "湛河区", - "value": "410411" - }, - { - "label": "宝丰县", - "value": "410421" - }, - { - "label": "叶县", - "value": "410422" - }, - { - "label": "鲁山县", - "value": "410423" - }, - { - "label": "郏县", - "value": "410425" - }, - { - "label": "平顶山高新技术产业开发区", - "value": "410471" - }, - { - "label": "平顶山市新城区", - "value": "410472" - }, - { - "label": "舞钢市", - "value": "410481" - }, - { - "label": "汝州市", - "value": "410482" - } - ], - [{ - "label": "文峰区", - "value": "410502" - }, - { - "label": "北关区", - "value": "410503" - }, - { - "label": "殷都区", - "value": "410505" - }, - { - "label": "龙安区", - "value": "410506" - }, - { - "label": "安阳县", - "value": "410522" - }, - { - "label": "汤阴县", - "value": "410523" - }, - { - "label": "滑县", - "value": "410526" - }, - { - "label": "内黄县", - "value": "410527" - }, - { - "label": "安阳高新技术产业开发区", - "value": "410571" - }, - { - "label": "林州市", - "value": "410581" - } - ], - [{ - "label": "鹤山区", - "value": "410602" - }, - { - "label": "山城区", - "value": "410603" - }, - { - "label": "淇滨区", - "value": "410611" - }, - { - "label": "浚县", - "value": "410621" - }, - { - "label": "淇县", - "value": "410622" - }, - { - "label": "鹤壁经济技术开发区", - "value": "410671" - } - ], - [{ - "label": "红旗区", - "value": "410702" - }, - { - "label": "卫滨区", - "value": "410703" - }, - { - "label": "凤泉区", - "value": "410704" - }, - { - "label": "牧野区", - "value": "410711" - }, - { - "label": "新乡县", - "value": "410721" - }, - { - "label": "获嘉县", - "value": "410724" - }, - { - "label": "原阳县", - "value": "410725" - }, - { - "label": "延津县", - "value": "410726" - }, - { - "label": "封丘县", - "value": "410727" - }, - { - "label": "长垣县", - "value": "410728" - }, - { - "label": "新乡高新技术产业开发区", - "value": "410771" - }, - { - "label": "新乡经济技术开发区", - "value": "410772" - }, - { - "label": "新乡市平原城乡一体化示范区", - "value": "410773" - }, - { - "label": "卫辉市", - "value": "410781" - }, - { - "label": "辉县市", - "value": "410782" - } - ], - [{ - "label": "解放区", - "value": "410802" - }, - { - "label": "中站区", - "value": "410803" - }, - { - "label": "马村区", - "value": "410804" - }, - { - "label": "山阳区", - "value": "410811" - }, - { - "label": "修武县", - "value": "410821" - }, - { - "label": "博爱县", - "value": "410822" - }, - { - "label": "武陟县", - "value": "410823" - }, - { - "label": "温县", - "value": "410825" - }, - { - "label": "焦作城乡一体化示范区", - "value": "410871" - }, - { - "label": "沁阳市", - "value": "410882" - }, - { - "label": "孟州市", - "value": "410883" - } - ], - [{ - "label": "华龙区", - "value": "410902" - }, - { - "label": "清丰县", - "value": "410922" - }, - { - "label": "南乐县", - "value": "410923" - }, - { - "label": "范县", - "value": "410926" - }, - { - "label": "台前县", - "value": "410927" - }, - { - "label": "濮阳县", - "value": "410928" - }, - { - "label": "河南濮阳工业园区", - "value": "410971" - }, - { - "label": "濮阳经济技术开发区", - "value": "410972" - } - ], - [{ - "label": "魏都区", - "value": "411002" - }, - { - "label": "建安区", - "value": "411003" - }, - { - "label": "鄢陵县", - "value": "411024" - }, - { - "label": "襄城县", - "value": "411025" - }, - { - "label": "许昌经济技术开发区", - "value": "411071" - }, - { - "label": "禹州市", - "value": "411081" - }, - { - "label": "长葛市", - "value": "411082" - } - ], - [{ - "label": "源汇区", - "value": "411102" - }, - { - "label": "郾城区", - "value": "411103" - }, - { - "label": "召陵区", - "value": "411104" - }, - { - "label": "舞阳县", - "value": "411121" - }, - { - "label": "临颍县", - "value": "411122" - }, - { - "label": "漯河经济技术开发区", - "value": "411171" - } - ], - [{ - "label": "湖滨区", - "value": "411202" - }, - { - "label": "陕州区", - "value": "411203" - }, - { - "label": "渑池县", - "value": "411221" - }, - { - "label": "卢氏县", - "value": "411224" - }, - { - "label": "河南三门峡经济开发区", - "value": "411271" - }, - { - "label": "义马市", - "value": "411281" - }, - { - "label": "灵宝市", - "value": "411282" - } - ], - [{ - "label": "宛城区", - "value": "411302" - }, - { - "label": "卧龙区", - "value": "411303" - }, - { - "label": "南召县", - "value": "411321" - }, - { - "label": "方城县", - "value": "411322" - }, - { - "label": "西峡县", - "value": "411323" - }, - { - "label": "镇平县", - "value": "411324" - }, - { - "label": "内乡县", - "value": "411325" - }, - { - "label": "淅川县", - "value": "411326" - }, - { - "label": "社旗县", - "value": "411327" - }, - { - "label": "唐河县", - "value": "411328" - }, - { - "label": "新野县", - "value": "411329" - }, - { - "label": "桐柏县", - "value": "411330" - }, - { - "label": "南阳高新技术产业开发区", - "value": "411371" - }, - { - "label": "南阳市城乡一体化示范区", - "value": "411372" - }, - { - "label": "邓州市", - "value": "411381" - } - ], - [{ - "label": "梁园区", - "value": "411402" - }, - { - "label": "睢阳区", - "value": "411403" - }, - { - "label": "民权县", - "value": "411421" - }, - { - "label": "睢县", - "value": "411422" - }, - { - "label": "宁陵县", - "value": "411423" - }, - { - "label": "柘城县", - "value": "411424" - }, - { - "label": "虞城县", - "value": "411425" - }, - { - "label": "夏邑县", - "value": "411426" - }, - { - "label": "豫东综合物流产业聚集区", - "value": "411471" - }, - { - "label": "河南商丘经济开发区", - "value": "411472" - }, - { - "label": "永城市", - "value": "411481" - } - ], - [{ - "label": "浉河区", - "value": "411502" - }, - { - "label": "平桥区", - "value": "411503" - }, - { - "label": "罗山县", - "value": "411521" - }, - { - "label": "光山县", - "value": "411522" - }, - { - "label": "新县", - "value": "411523" - }, - { - "label": "商城县", - "value": "411524" - }, - { - "label": "固始县", - "value": "411525" - }, - { - "label": "潢川县", - "value": "411526" - }, - { - "label": "淮滨县", - "value": "411527" - }, - { - "label": "息县", - "value": "411528" - }, - { - "label": "信阳高新技术产业开发区", - "value": "411571" - } - ], - [{ - "label": "川汇区", - "value": "411602" - }, - { - "label": "扶沟县", - "value": "411621" - }, - { - "label": "西华县", - "value": "411622" - }, - { - "label": "商水县", - "value": "411623" - }, - { - "label": "沈丘县", - "value": "411624" - }, - { - "label": "郸城县", - "value": "411625" - }, - { - "label": "淮阳县", - "value": "411626" - }, - { - "label": "太康县", - "value": "411627" - }, - { - "label": "鹿邑县", - "value": "411628" - }, - { - "label": "河南周口经济开发区", - "value": "411671" - }, - { - "label": "项城市", - "value": "411681" - } - ], - [{ - "label": "驿城区", - "value": "411702" - }, - { - "label": "西平县", - "value": "411721" - }, - { - "label": "上蔡县", - "value": "411722" - }, - { - "label": "平舆县", - "value": "411723" - }, - { - "label": "正阳县", - "value": "411724" - }, - { - "label": "确山县", - "value": "411725" - }, - { - "label": "泌阳县", - "value": "411726" - }, - { - "label": "汝南县", - "value": "411727" - }, - { - "label": "遂平县", - "value": "411728" - }, - { - "label": "新蔡县", - "value": "411729" - }, - { - "label": "河南驻马店经济开发区", - "value": "411771" - } - ], - [{ - "label": "济源市", - "value": "419001" - }] - ], - [ - [{ - "label": "江岸区", - "value": "420102" - }, - { - "label": "江汉区", - "value": "420103" - }, - { - "label": "硚口区", - "value": "420104" - }, - { - "label": "汉阳区", - "value": "420105" - }, - { - "label": "武昌区", - "value": "420106" - }, - { - "label": "青山区", - "value": "420107" - }, - { - "label": "洪山区", - "value": "420111" - }, - { - "label": "东西湖区", - "value": "420112" - }, - { - "label": "汉南区", - "value": "420113" - }, - { - "label": "蔡甸区", - "value": "420114" - }, - { - "label": "江夏区", - "value": "420115" - }, - { - "label": "黄陂区", - "value": "420116" - }, - { - "label": "新洲区", - "value": "420117" - } - ], - [{ - "label": "黄石港区", - "value": "420202" - }, - { - "label": "西塞山区", - "value": "420203" - }, - { - "label": "下陆区", - "value": "420204" - }, - { - "label": "铁山区", - "value": "420205" - }, - { - "label": "阳新县", - "value": "420222" - }, - { - "label": "大冶市", - "value": "420281" - } - ], - [{ - "label": "茅箭区", - "value": "420302" - }, - { - "label": "张湾区", - "value": "420303" - }, - { - "label": "郧阳区", - "value": "420304" - }, - { - "label": "郧西县", - "value": "420322" - }, - { - "label": "竹山县", - "value": "420323" - }, - { - "label": "竹溪县", - "value": "420324" - }, - { - "label": "房县", - "value": "420325" - }, - { - "label": "丹江口市", - "value": "420381" - } - ], - [{ - "label": "西陵区", - "value": "420502" - }, - { - "label": "伍家岗区", - "value": "420503" - }, - { - "label": "点军区", - "value": "420504" - }, - { - "label": "猇亭区", - "value": "420505" - }, - { - "label": "夷陵区", - "value": "420506" - }, - { - "label": "远安县", - "value": "420525" - }, - { - "label": "兴山县", - "value": "420526" - }, - { - "label": "秭归县", - "value": "420527" - }, - { - "label": "长阳土家族自治县", - "value": "420528" - }, - { - "label": "五峰土家族自治县", - "value": "420529" - }, - { - "label": "宜都市", - "value": "420581" - }, - { - "label": "当阳市", - "value": "420582" - }, - { - "label": "枝江市", - "value": "420583" - } - ], - [{ - "label": "襄城区", - "value": "420602" - }, - { - "label": "樊城区", - "value": "420606" - }, - { - "label": "襄州区", - "value": "420607" - }, - { - "label": "南漳县", - "value": "420624" - }, - { - "label": "谷城县", - "value": "420625" - }, - { - "label": "保康县", - "value": "420626" - }, - { - "label": "老河口市", - "value": "420682" - }, - { - "label": "枣阳市", - "value": "420683" - }, - { - "label": "宜城市", - "value": "420684" - } - ], - [{ - "label": "梁子湖区", - "value": "420702" - }, - { - "label": "华容区", - "value": "420703" - }, - { - "label": "鄂城区", - "value": "420704" - } - ], - [{ - "label": "东宝区", - "value": "420802" - }, - { - "label": "掇刀区", - "value": "420804" - }, - { - "label": "京山县", - "value": "420821" - }, - { - "label": "沙洋县", - "value": "420822" - }, - { - "label": "钟祥市", - "value": "420881" - } - ], - [{ - "label": "孝南区", - "value": "420902" - }, - { - "label": "孝昌县", - "value": "420921" - }, - { - "label": "大悟县", - "value": "420922" - }, - { - "label": "云梦县", - "value": "420923" - }, - { - "label": "应城市", - "value": "420981" - }, - { - "label": "安陆市", - "value": "420982" - }, - { - "label": "汉川市", - "value": "420984" - } - ], - [{ - "label": "沙市区", - "value": "421002" - }, - { - "label": "荆州区", - "value": "421003" - }, - { - "label": "公安县", - "value": "421022" - }, - { - "label": "监利县", - "value": "421023" - }, - { - "label": "江陵县", - "value": "421024" - }, - { - "label": "荆州经济技术开发区", - "value": "421071" - }, - { - "label": "石首市", - "value": "421081" - }, - { - "label": "洪湖市", - "value": "421083" - }, - { - "label": "松滋市", - "value": "421087" - } - ], - [{ - "label": "黄州区", - "value": "421102" - }, - { - "label": "团风县", - "value": "421121" - }, - { - "label": "红安县", - "value": "421122" - }, - { - "label": "罗田县", - "value": "421123" - }, - { - "label": "英山县", - "value": "421124" - }, - { - "label": "浠水县", - "value": "421125" - }, - { - "label": "蕲春县", - "value": "421126" - }, - { - "label": "黄梅县", - "value": "421127" - }, - { - "label": "龙感湖管理区", - "value": "421171" - }, - { - "label": "麻城市", - "value": "421181" - }, - { - "label": "武穴市", - "value": "421182" - } - ], - [{ - "label": "咸安区", - "value": "421202" - }, - { - "label": "嘉鱼县", - "value": "421221" - }, - { - "label": "通城县", - "value": "421222" - }, - { - "label": "崇阳县", - "value": "421223" - }, - { - "label": "通山县", - "value": "421224" - }, - { - "label": "赤壁市", - "value": "421281" - } - ], - [{ - "label": "曾都区", - "value": "421303" - }, - { - "label": "随县", - "value": "421321" - }, - { - "label": "广水市", - "value": "421381" - } - ], - [{ - "label": "恩施市", - "value": "422801" - }, - { - "label": "利川市", - "value": "422802" - }, - { - "label": "建始县", - "value": "422822" - }, - { - "label": "巴东县", - "value": "422823" - }, - { - "label": "宣恩县", - "value": "422825" - }, - { - "label": "咸丰县", - "value": "422826" - }, - { - "label": "来凤县", - "value": "422827" - }, - { - "label": "鹤峰县", - "value": "422828" - } - ], - [{ - "label": "仙桃市", - "value": "429004" - }, - { - "label": "潜江市", - "value": "429005" - }, - { - "label": "天门市", - "value": "429006" - }, - { - "label": "神农架林区", - "value": "429021" - } - ] - ], - [ - [{ - "label": "芙蓉区", - "value": "430102" - }, - { - "label": "天心区", - "value": "430103" - }, - { - "label": "岳麓区", - "value": "430104" - }, - { - "label": "开福区", - "value": "430105" - }, - { - "label": "雨花区", - "value": "430111" - }, - { - "label": "望城区", - "value": "430112" - }, - { - "label": "长沙县", - "value": "430121" - }, - { - "label": "浏阳市", - "value": "430181" - }, - { - "label": "宁乡市", - "value": "430182" - } - ], - [{ - "label": "荷塘区", - "value": "430202" - }, - { - "label": "芦淞区", - "value": "430203" - }, - { - "label": "石峰区", - "value": "430204" - }, - { - "label": "天元区", - "value": "430211" - }, - { - "label": "株洲县", - "value": "430221" - }, - { - "label": "攸县", - "value": "430223" - }, - { - "label": "茶陵县", - "value": "430224" - }, - { - "label": "炎陵县", - "value": "430225" - }, - { - "label": "云龙示范区", - "value": "430271" - }, - { - "label": "醴陵市", - "value": "430281" - } - ], - [{ - "label": "雨湖区", - "value": "430302" - }, - { - "label": "岳塘区", - "value": "430304" - }, - { - "label": "湘潭县", - "value": "430321" - }, - { - "label": "湖南湘潭高新技术产业园区", - "value": "430371" - }, - { - "label": "湘潭昭山示范区", - "value": "430372" - }, - { - "label": "湘潭九华示范区", - "value": "430373" - }, - { - "label": "湘乡市", - "value": "430381" - }, - { - "label": "韶山市", - "value": "430382" - } - ], - [{ - "label": "珠晖区", - "value": "430405" - }, - { - "label": "雁峰区", - "value": "430406" - }, - { - "label": "石鼓区", - "value": "430407" - }, - { - "label": "蒸湘区", - "value": "430408" - }, - { - "label": "南岳区", - "value": "430412" - }, - { - "label": "衡阳县", - "value": "430421" - }, - { - "label": "衡南县", - "value": "430422" - }, - { - "label": "衡山县", - "value": "430423" - }, - { - "label": "衡东县", - "value": "430424" - }, - { - "label": "祁东县", - "value": "430426" - }, - { - "label": "衡阳综合保税区", - "value": "430471" - }, - { - "label": "湖南衡阳高新技术产业园区", - "value": "430472" - }, - { - "label": "湖南衡阳松木经济开发区", - "value": "430473" - }, - { - "label": "耒阳市", - "value": "430481" - }, - { - "label": "常宁市", - "value": "430482" - } - ], - [{ - "label": "双清区", - "value": "430502" - }, - { - "label": "大祥区", - "value": "430503" - }, - { - "label": "北塔区", - "value": "430511" - }, - { - "label": "邵东县", - "value": "430521" - }, - { - "label": "新邵县", - "value": "430522" - }, - { - "label": "邵阳县", - "value": "430523" - }, - { - "label": "隆回县", - "value": "430524" - }, - { - "label": "洞口县", - "value": "430525" - }, - { - "label": "绥宁县", - "value": "430527" - }, - { - "label": "新宁县", - "value": "430528" - }, - { - "label": "城步苗族自治县", - "value": "430529" - }, - { - "label": "武冈市", - "value": "430581" - } - ], - [{ - "label": "岳阳楼区", - "value": "430602" - }, - { - "label": "云溪区", - "value": "430603" - }, - { - "label": "君山区", - "value": "430611" - }, - { - "label": "岳阳县", - "value": "430621" - }, - { - "label": "华容县", - "value": "430623" - }, - { - "label": "湘阴县", - "value": "430624" - }, - { - "label": "平江县", - "value": "430626" - }, - { - "label": "岳阳市屈原管理区", - "value": "430671" - }, - { - "label": "汨罗市", - "value": "430681" - }, - { - "label": "临湘市", - "value": "430682" - } - ], - [{ - "label": "武陵区", - "value": "430702" - }, - { - "label": "鼎城区", - "value": "430703" - }, - { - "label": "安乡县", - "value": "430721" - }, - { - "label": "汉寿县", - "value": "430722" - }, - { - "label": "澧县", - "value": "430723" - }, - { - "label": "临澧县", - "value": "430724" - }, - { - "label": "桃源县", - "value": "430725" - }, - { - "label": "石门县", - "value": "430726" - }, - { - "label": "常德市西洞庭管理区", - "value": "430771" - }, - { - "label": "津市市", - "value": "430781" - } - ], - [{ - "label": "永定区", - "value": "430802" - }, - { - "label": "武陵源区", - "value": "430811" - }, - { - "label": "慈利县", - "value": "430821" - }, - { - "label": "桑植县", - "value": "430822" - } - ], - [{ - "label": "资阳区", - "value": "430902" - }, - { - "label": "赫山区", - "value": "430903" - }, - { - "label": "南县", - "value": "430921" - }, - { - "label": "桃江县", - "value": "430922" - }, - { - "label": "安化县", - "value": "430923" - }, - { - "label": "益阳市大通湖管理区", - "value": "430971" - }, - { - "label": "湖南益阳高新技术产业园区", - "value": "430972" - }, - { - "label": "沅江市", - "value": "430981" - } - ], - [{ - "label": "北湖区", - "value": "431002" - }, - { - "label": "苏仙区", - "value": "431003" - }, - { - "label": "桂阳县", - "value": "431021" - }, - { - "label": "宜章县", - "value": "431022" - }, - { - "label": "永兴县", - "value": "431023" - }, - { - "label": "嘉禾县", - "value": "431024" - }, - { - "label": "临武县", - "value": "431025" - }, - { - "label": "汝城县", - "value": "431026" - }, - { - "label": "桂东县", - "value": "431027" - }, - { - "label": "安仁县", - "value": "431028" - }, - { - "label": "资兴市", - "value": "431081" - } - ], - [{ - "label": "零陵区", - "value": "431102" - }, - { - "label": "冷水滩区", - "value": "431103" - }, - { - "label": "祁阳县", - "value": "431121" - }, - { - "label": "东安县", - "value": "431122" - }, - { - "label": "双牌县", - "value": "431123" - }, - { - "label": "道县", - "value": "431124" - }, - { - "label": "江永县", - "value": "431125" - }, - { - "label": "宁远县", - "value": "431126" - }, - { - "label": "蓝山县", - "value": "431127" - }, - { - "label": "新田县", - "value": "431128" - }, - { - "label": "江华瑶族自治县", - "value": "431129" - }, - { - "label": "永州经济技术开发区", - "value": "431171" - }, - { - "label": "永州市金洞管理区", - "value": "431172" - }, - { - "label": "永州市回龙圩管理区", - "value": "431173" - } - ], - [{ - "label": "鹤城区", - "value": "431202" - }, - { - "label": "中方县", - "value": "431221" - }, - { - "label": "沅陵县", - "value": "431222" - }, - { - "label": "辰溪县", - "value": "431223" - }, - { - "label": "溆浦县", - "value": "431224" - }, - { - "label": "会同县", - "value": "431225" - }, - { - "label": "麻阳苗族自治县", - "value": "431226" - }, - { - "label": "新晃侗族自治县", - "value": "431227" - }, - { - "label": "芷江侗族自治县", - "value": "431228" - }, - { - "label": "靖州苗族侗族自治县", - "value": "431229" - }, - { - "label": "通道侗族自治县", - "value": "431230" - }, - { - "label": "怀化市洪江管理区", - "value": "431271" - }, - { - "label": "洪江市", - "value": "431281" - } - ], - [{ - "label": "娄星区", - "value": "431302" - }, - { - "label": "双峰县", - "value": "431321" - }, - { - "label": "新化县", - "value": "431322" - }, - { - "label": "冷水江市", - "value": "431381" - }, - { - "label": "涟源市", - "value": "431382" - } - ], - [{ - "label": "吉首市", - "value": "433101" - }, - { - "label": "泸溪县", - "value": "433122" - }, - { - "label": "凤凰县", - "value": "433123" - }, - { - "label": "花垣县", - "value": "433124" - }, - { - "label": "保靖县", - "value": "433125" - }, - { - "label": "古丈县", - "value": "433126" - }, - { - "label": "永顺县", - "value": "433127" - }, - { - "label": "龙山县", - "value": "433130" - }, - { - "label": "湖南吉首经济开发区", - "value": "433172" - }, - { - "label": "湖南永顺经济开发区", - "value": "433173" - } - ] - ], - [ - [{ - "label": "荔湾区", - "value": "440103" - }, - { - "label": "越秀区", - "value": "440104" - }, - { - "label": "海珠区", - "value": "440105" - }, - { - "label": "天河区", - "value": "440106" - }, - { - "label": "白云区", - "value": "440111" - }, - { - "label": "黄埔区", - "value": "440112" - }, - { - "label": "番禺区", - "value": "440113" - }, - { - "label": "花都区", - "value": "440114" - }, - { - "label": "南沙区", - "value": "440115" - }, - { - "label": "从化区", - "value": "440117" - }, - { - "label": "增城区", - "value": "440118" - } - ], - [{ - "label": "武江区", - "value": "440203" - }, - { - "label": "浈江区", - "value": "440204" - }, - { - "label": "曲江区", - "value": "440205" - }, - { - "label": "始兴县", - "value": "440222" - }, - { - "label": "仁化县", - "value": "440224" - }, - { - "label": "翁源县", - "value": "440229" - }, - { - "label": "乳源瑶族自治县", - "value": "440232" - }, - { - "label": "新丰县", - "value": "440233" - }, - { - "label": "乐昌市", - "value": "440281" - }, - { - "label": "南雄市", - "value": "440282" - } - ], - [{ - "label": "罗湖区", - "value": "440303" - }, - { - "label": "福田区", - "value": "440304" - }, - { - "label": "南山区", - "value": "440305" - }, - { - "label": "宝安区", - "value": "440306" - }, - { - "label": "龙岗区", - "value": "440307" - }, - { - "label": "盐田区", - "value": "440308" - }, - { - "label": "龙华区", - "value": "440309" - }, - { - "label": "坪山区", - "value": "440310" - } - ], - [{ - "label": "香洲区", - "value": "440402" - }, - { - "label": "斗门区", - "value": "440403" - }, - { - "label": "金湾区", - "value": "440404" - } - ], - [{ - "label": "龙湖区", - "value": "440507" - }, - { - "label": "金平区", - "value": "440511" - }, - { - "label": "濠江区", - "value": "440512" - }, - { - "label": "潮阳区", - "value": "440513" - }, - { - "label": "潮南区", - "value": "440514" - }, - { - "label": "澄海区", - "value": "440515" - }, - { - "label": "南澳县", - "value": "440523" - } - ], - [{ - "label": "禅城区", - "value": "440604" - }, - { - "label": "南海区", - "value": "440605" - }, - { - "label": "顺德区", - "value": "440606" - }, - { - "label": "三水区", - "value": "440607" - }, - { - "label": "高明区", - "value": "440608" - } - ], - [{ - "label": "蓬江区", - "value": "440703" - }, - { - "label": "江海区", - "value": "440704" - }, - { - "label": "新会区", - "value": "440705" - }, - { - "label": "台山市", - "value": "440781" - }, - { - "label": "开平市", - "value": "440783" - }, - { - "label": "鹤山市", - "value": "440784" - }, - { - "label": "恩平市", - "value": "440785" - } - ], - [{ - "label": "赤坎区", - "value": "440802" - }, - { - "label": "霞山区", - "value": "440803" - }, - { - "label": "坡头区", - "value": "440804" - }, - { - "label": "麻章区", - "value": "440811" - }, - { - "label": "遂溪县", - "value": "440823" - }, - { - "label": "徐闻县", - "value": "440825" - }, - { - "label": "廉江市", - "value": "440881" - }, - { - "label": "雷州市", - "value": "440882" - }, - { - "label": "吴川市", - "value": "440883" - } - ], - [{ - "label": "茂南区", - "value": "440902" - }, - { - "label": "电白区", - "value": "440904" - }, - { - "label": "高州市", - "value": "440981" - }, - { - "label": "化州市", - "value": "440982" - }, - { - "label": "信宜市", - "value": "440983" - } - ], - [{ - "label": "端州区", - "value": "441202" - }, - { - "label": "鼎湖区", - "value": "441203" - }, - { - "label": "高要区", - "value": "441204" - }, - { - "label": "广宁县", - "value": "441223" - }, - { - "label": "怀集县", - "value": "441224" - }, - { - "label": "封开县", - "value": "441225" - }, - { - "label": "德庆县", - "value": "441226" - }, - { - "label": "四会市", - "value": "441284" - } - ], - [{ - "label": "惠城区", - "value": "441302" - }, - { - "label": "惠阳区", - "value": "441303" - }, - { - "label": "博罗县", - "value": "441322" - }, - { - "label": "惠东县", - "value": "441323" - }, - { - "label": "龙门县", - "value": "441324" - } - ], - [{ - "label": "梅江区", - "value": "441402" - }, - { - "label": "梅县区", - "value": "441403" - }, - { - "label": "大埔县", - "value": "441422" - }, - { - "label": "丰顺县", - "value": "441423" - }, - { - "label": "五华县", - "value": "441424" - }, - { - "label": "平远县", - "value": "441426" - }, - { - "label": "蕉岭县", - "value": "441427" - }, - { - "label": "兴宁市", - "value": "441481" - } - ], - [{ - "label": "城区", - "value": "441502" - }, - { - "label": "海丰县", - "value": "441521" - }, - { - "label": "陆河县", - "value": "441523" - }, - { - "label": "陆丰市", - "value": "441581" - } - ], - [{ - "label": "源城区", - "value": "441602" - }, - { - "label": "紫金县", - "value": "441621" - }, - { - "label": "龙川县", - "value": "441622" - }, - { - "label": "连平县", - "value": "441623" - }, - { - "label": "和平县", - "value": "441624" - }, - { - "label": "东源县", - "value": "441625" - } - ], - [{ - "label": "江城区", - "value": "441702" - }, - { - "label": "阳东区", - "value": "441704" - }, - { - "label": "阳西县", - "value": "441721" - }, - { - "label": "阳春市", - "value": "441781" - } - ], - [{ - "label": "清城区", - "value": "441802" - }, - { - "label": "清新区", - "value": "441803" - }, - { - "label": "佛冈县", - "value": "441821" - }, - { - "label": "阳山县", - "value": "441823" - }, - { - "label": "连山壮族瑶族自治县", - "value": "441825" - }, - { - "label": "连南瑶族自治县", - "value": "441826" - }, - { - "label": "英德市", - "value": "441881" - }, - { - "label": "连州市", - "value": "441882" - } - ], - [{ - "label": "东莞市", - "value": "441900" - }], - [{ - "label": "中山市", - "value": "442000" - }], - [{ - "label": "湘桥区", - "value": "445102" - }, - { - "label": "潮安区", - "value": "445103" - }, - { - "label": "饶平县", - "value": "445122" - } - ], - [{ - "label": "榕城区", - "value": "445202" - }, - { - "label": "揭东区", - "value": "445203" - }, - { - "label": "揭西县", - "value": "445222" - }, - { - "label": "惠来县", - "value": "445224" - }, - { - "label": "普宁市", - "value": "445281" - } - ], - [{ - "label": "云城区", - "value": "445302" - }, - { - "label": "云安区", - "value": "445303" - }, - { - "label": "新兴县", - "value": "445321" - }, - { - "label": "郁南县", - "value": "445322" - }, - { - "label": "罗定市", - "value": "445381" - } - ] - ], - [ - [{ - "label": "兴宁区", - "value": "450102" - }, - { - "label": "青秀区", - "value": "450103" - }, - { - "label": "江南区", - "value": "450105" - }, - { - "label": "西乡塘区", - "value": "450107" - }, - { - "label": "良庆区", - "value": "450108" - }, - { - "label": "邕宁区", - "value": "450109" - }, - { - "label": "武鸣区", - "value": "450110" - }, - { - "label": "隆安县", - "value": "450123" - }, - { - "label": "马山县", - "value": "450124" - }, - { - "label": "上林县", - "value": "450125" - }, - { - "label": "宾阳县", - "value": "450126" - }, - { - "label": "横县", - "value": "450127" - } - ], - [{ - "label": "城中区", - "value": "450202" - }, - { - "label": "鱼峰区", - "value": "450203" - }, - { - "label": "柳南区", - "value": "450204" - }, - { - "label": "柳北区", - "value": "450205" - }, - { - "label": "柳江区", - "value": "450206" - }, - { - "label": "柳城县", - "value": "450222" - }, - { - "label": "鹿寨县", - "value": "450223" - }, - { - "label": "融安县", - "value": "450224" - }, - { - "label": "融水苗族自治县", - "value": "450225" - }, - { - "label": "三江侗族自治县", - "value": "450226" - } - ], - [{ - "label": "秀峰区", - "value": "450302" - }, - { - "label": "叠彩区", - "value": "450303" - }, - { - "label": "象山区", - "value": "450304" - }, - { - "label": "七星区", - "value": "450305" - }, - { - "label": "雁山区", - "value": "450311" - }, - { - "label": "临桂区", - "value": "450312" - }, - { - "label": "阳朔县", - "value": "450321" - }, - { - "label": "灵川县", - "value": "450323" - }, - { - "label": "全州县", - "value": "450324" - }, - { - "label": "兴安县", - "value": "450325" - }, - { - "label": "永福县", - "value": "450326" - }, - { - "label": "灌阳县", - "value": "450327" - }, - { - "label": "龙胜各族自治县", - "value": "450328" - }, - { - "label": "资源县", - "value": "450329" - }, - { - "label": "平乐县", - "value": "450330" - }, - { - "label": "荔浦县", - "value": "450331" - }, - { - "label": "恭城瑶族自治县", - "value": "450332" - } - ], - [{ - "label": "万秀区", - "value": "450403" - }, - { - "label": "长洲区", - "value": "450405" - }, - { - "label": "龙圩区", - "value": "450406" - }, - { - "label": "苍梧县", - "value": "450421" - }, - { - "label": "藤县", - "value": "450422" - }, - { - "label": "蒙山县", - "value": "450423" - }, - { - "label": "岑溪市", - "value": "450481" - } - ], - [{ - "label": "海城区", - "value": "450502" - }, - { - "label": "银海区", - "value": "450503" - }, - { - "label": "铁山港区", - "value": "450512" - }, - { - "label": "合浦县", - "value": "450521" - } - ], - [{ - "label": "港口区", - "value": "450602" - }, - { - "label": "防城区", - "value": "450603" - }, - { - "label": "上思县", - "value": "450621" - }, - { - "label": "东兴市", - "value": "450681" - } - ], - [{ - "label": "钦南区", - "value": "450702" - }, - { - "label": "钦北区", - "value": "450703" - }, - { - "label": "灵山县", - "value": "450721" - }, - { - "label": "浦北县", - "value": "450722" - } - ], - [{ - "label": "港北区", - "value": "450802" - }, - { - "label": "港南区", - "value": "450803" - }, - { - "label": "覃塘区", - "value": "450804" - }, - { - "label": "平南县", - "value": "450821" - }, - { - "label": "桂平市", - "value": "450881" - } - ], - [{ - "label": "玉州区", - "value": "450902" - }, - { - "label": "福绵区", - "value": "450903" - }, - { - "label": "容县", - "value": "450921" - }, - { - "label": "陆川县", - "value": "450922" - }, - { - "label": "博白县", - "value": "450923" - }, - { - "label": "兴业县", - "value": "450924" - }, - { - "label": "北流市", - "value": "450981" - } - ], - [{ - "label": "右江区", - "value": "451002" - }, - { - "label": "田阳县", - "value": "451021" - }, - { - "label": "田东县", - "value": "451022" - }, - { - "label": "平果县", - "value": "451023" - }, - { - "label": "德保县", - "value": "451024" - }, - { - "label": "那坡县", - "value": "451026" - }, - { - "label": "凌云县", - "value": "451027" - }, - { - "label": "乐业县", - "value": "451028" - }, - { - "label": "田林县", - "value": "451029" - }, - { - "label": "西林县", - "value": "451030" - }, - { - "label": "隆林各族自治县", - "value": "451031" - }, - { - "label": "靖西市", - "value": "451081" - } - ], - [{ - "label": "八步区", - "value": "451102" - }, - { - "label": "平桂区", - "value": "451103" - }, - { - "label": "昭平县", - "value": "451121" - }, - { - "label": "钟山县", - "value": "451122" - }, - { - "label": "富川瑶族自治县", - "value": "451123" - } - ], - [{ - "label": "金城江区", - "value": "451202" - }, - { - "label": "宜州区", - "value": "451203" - }, - { - "label": "南丹县", - "value": "451221" - }, - { - "label": "天峨县", - "value": "451222" - }, - { - "label": "凤山县", - "value": "451223" - }, - { - "label": "东兰县", - "value": "451224" - }, - { - "label": "罗城仫佬族自治县", - "value": "451225" - }, - { - "label": "环江毛南族自治县", - "value": "451226" - }, - { - "label": "巴马瑶族自治县", - "value": "451227" - }, - { - "label": "都安瑶族自治县", - "value": "451228" - }, - { - "label": "大化瑶族自治县", - "value": "451229" - } - ], - [{ - "label": "兴宾区", - "value": "451302" - }, - { - "label": "忻城县", - "value": "451321" - }, - { - "label": "象州县", - "value": "451322" - }, - { - "label": "武宣县", - "value": "451323" - }, - { - "label": "金秀瑶族自治县", - "value": "451324" - }, - { - "label": "合山市", - "value": "451381" - } - ], - [{ - "label": "江州区", - "value": "451402" - }, - { - "label": "扶绥县", - "value": "451421" - }, - { - "label": "宁明县", - "value": "451422" - }, - { - "label": "龙州县", - "value": "451423" - }, - { - "label": "大新县", - "value": "451424" - }, - { - "label": "天等县", - "value": "451425" - }, - { - "label": "凭祥市", - "value": "451481" - } - ] - ], - [ - [{ - "label": "秀英区", - "value": "460105" - }, - { - "label": "龙华区", - "value": "460106" - }, - { - "label": "琼山区", - "value": "460107" - }, - { - "label": "美兰区", - "value": "460108" - } - ], - [{ - "label": "海棠区", - "value": "460202" - }, - { - "label": "吉阳区", - "value": "460203" - }, - { - "label": "天涯区", - "value": "460204" - }, - { - "label": "崖州区", - "value": "460205" - } - ], - [{ - "label": "西沙群岛", - "value": "460321" - }, - { - "label": "南沙群岛", - "value": "460322" - }, - { - "label": "中沙群岛的岛礁及其海域", - "value": "460323" - } - ], - [{ - "label": "儋州市", - "value": "460400" - }], - [{ - "label": "五指山市", - "value": "469001" - }, - { - "label": "琼海市", - "value": "469002" - }, - { - "label": "文昌市", - "value": "469005" - }, - { - "label": "万宁市", - "value": "469006" - }, - { - "label": "东方市", - "value": "469007" - }, - { - "label": "定安县", - "value": "469021" - }, - { - "label": "屯昌县", - "value": "469022" - }, - { - "label": "澄迈县", - "value": "469023" - }, - { - "label": "临高县", - "value": "469024" - }, - { - "label": "白沙黎族自治县", - "value": "469025" - }, - { - "label": "昌江黎族自治县", - "value": "469026" - }, - { - "label": "乐东黎族自治县", - "value": "469027" - }, - { - "label": "陵水黎族自治县", - "value": "469028" - }, - { - "label": "保亭黎族苗族自治县", - "value": "469029" - }, - { - "label": "琼中黎族苗族自治县", - "value": "469030" - } - ] - ], - [ - [{ - "label": "万州区", - "value": "500101" - }, - { - "label": "涪陵区", - "value": "500102" - }, - { - "label": "渝中区", - "value": "500103" - }, - { - "label": "大渡口区", - "value": "500104" - }, - { - "label": "江北区", - "value": "500105" - }, - { - "label": "沙坪坝区", - "value": "500106" - }, - { - "label": "九龙坡区", - "value": "500107" - }, - { - "label": "南岸区", - "value": "500108" - }, - { - "label": "北碚区", - "value": "500109" - }, - { - "label": "綦江区", - "value": "500110" - }, - { - "label": "大足区", - "value": "500111" - }, - { - "label": "渝北区", - "value": "500112" - }, - { - "label": "巴南区", - "value": "500113" - }, - { - "label": "黔江区", - "value": "500114" - }, - { - "label": "长寿区", - "value": "500115" - }, - { - "label": "江津区", - "value": "500116" - }, - { - "label": "合川区", - "value": "500117" - }, - { - "label": "永川区", - "value": "500118" - }, - { - "label": "南川区", - "value": "500119" - }, - { - "label": "璧山区", - "value": "500120" - }, - { - "label": "铜梁区", - "value": "500151" - }, - { - "label": "潼南区", - "value": "500152" - }, - { - "label": "荣昌区", - "value": "500153" - }, - { - "label": "开州区", - "value": "500154" - }, - { - "label": "梁平区", - "value": "500155" - }, - { - "label": "武隆区", - "value": "500156" - } - ], - [{ - "label": "城口县", - "value": "500229" - }, - { - "label": "丰都县", - "value": "500230" - }, - { - "label": "垫江县", - "value": "500231" - }, - { - "label": "忠县", - "value": "500233" - }, - { - "label": "云阳县", - "value": "500235" - }, - { - "label": "奉节县", - "value": "500236" - }, - { - "label": "巫山县", - "value": "500237" - }, - { - "label": "巫溪县", - "value": "500238" - }, - { - "label": "石柱土家族自治县", - "value": "500240" - }, - { - "label": "秀山土家族苗族自治县", - "value": "500241" - }, - { - "label": "酉阳土家族苗族自治县", - "value": "500242" - }, - { - "label": "彭水苗族土家族自治县", - "value": "500243" - } - ] - ], - [ - [{ - "label": "锦江区", - "value": "510104" - }, - { - "label": "青羊区", - "value": "510105" - }, - { - "label": "金牛区", - "value": "510106" - }, - { - "label": "武侯区", - "value": "510107" - }, - { - "label": "成华区", - "value": "510108" - }, - { - "label": "龙泉驿区", - "value": "510112" - }, - { - "label": "青白江区", - "value": "510113" - }, - { - "label": "新都区", - "value": "510114" - }, - { - "label": "温江区", - "value": "510115" - }, - { - "label": "双流区", - "value": "510116" - }, - { - "label": "郫都区", - "value": "510117" - }, - { - "label": "金堂县", - "value": "510121" - }, - { - "label": "大邑县", - "value": "510129" - }, - { - "label": "蒲江县", - "value": "510131" - }, - { - "label": "新津县", - "value": "510132" - }, - { - "label": "都江堰市", - "value": "510181" - }, - { - "label": "彭州市", - "value": "510182" - }, - { - "label": "邛崃市", - "value": "510183" - }, - { - "label": "崇州市", - "value": "510184" - }, - { - "label": "简阳市", - "value": "510185" - } - ], - [{ - "label": "自流井区", - "value": "510302" - }, - { - "label": "贡井区", - "value": "510303" - }, - { - "label": "大安区", - "value": "510304" - }, - { - "label": "沿滩区", - "value": "510311" - }, - { - "label": "荣县", - "value": "510321" - }, - { - "label": "富顺县", - "value": "510322" - } - ], - [{ - "label": "东区", - "value": "510402" - }, - { - "label": "西区", - "value": "510403" - }, - { - "label": "仁和区", - "value": "510411" - }, - { - "label": "米易县", - "value": "510421" - }, - { - "label": "盐边县", - "value": "510422" - } - ], - [{ - "label": "江阳区", - "value": "510502" - }, - { - "label": "纳溪区", - "value": "510503" - }, - { - "label": "龙马潭区", - "value": "510504" - }, - { - "label": "泸县", - "value": "510521" - }, - { - "label": "合江县", - "value": "510522" - }, - { - "label": "叙永县", - "value": "510524" - }, - { - "label": "古蔺县", - "value": "510525" - } - ], - [{ - "label": "旌阳区", - "value": "510603" - }, - { - "label": "罗江区", - "value": "510604" - }, - { - "label": "中江县", - "value": "510623" - }, - { - "label": "广汉市", - "value": "510681" - }, - { - "label": "什邡市", - "value": "510682" - }, - { - "label": "绵竹市", - "value": "510683" - } - ], - [{ - "label": "涪城区", - "value": "510703" - }, - { - "label": "游仙区", - "value": "510704" - }, - { - "label": "安州区", - "value": "510705" - }, - { - "label": "三台县", - "value": "510722" - }, - { - "label": "盐亭县", - "value": "510723" - }, - { - "label": "梓潼县", - "value": "510725" - }, - { - "label": "北川羌族自治县", - "value": "510726" - }, - { - "label": "平武县", - "value": "510727" - }, - { - "label": "江油市", - "value": "510781" - } - ], - [{ - "label": "利州区", - "value": "510802" - }, - { - "label": "昭化区", - "value": "510811" - }, - { - "label": "朝天区", - "value": "510812" - }, - { - "label": "旺苍县", - "value": "510821" - }, - { - "label": "青川县", - "value": "510822" - }, - { - "label": "剑阁县", - "value": "510823" - }, - { - "label": "苍溪县", - "value": "510824" - } - ], - [{ - "label": "船山区", - "value": "510903" - }, - { - "label": "安居区", - "value": "510904" - }, - { - "label": "蓬溪县", - "value": "510921" - }, - { - "label": "射洪县", - "value": "510922" - }, - { - "label": "大英县", - "value": "510923" - } - ], - [{ - "label": "市中区", - "value": "511002" - }, - { - "label": "东兴区", - "value": "511011" - }, - { - "label": "威远县", - "value": "511024" - }, - { - "label": "资中县", - "value": "511025" - }, - { - "label": "内江经济开发区", - "value": "511071" - }, - { - "label": "隆昌市", - "value": "511083" - } - ], - [{ - "label": "市中区", - "value": "511102" - }, - { - "label": "沙湾区", - "value": "511111" - }, - { - "label": "五通桥区", - "value": "511112" - }, - { - "label": "金口河区", - "value": "511113" - }, - { - "label": "犍为县", - "value": "511123" - }, - { - "label": "井研县", - "value": "511124" - }, - { - "label": "夹江县", - "value": "511126" - }, - { - "label": "沐川县", - "value": "511129" - }, - { - "label": "峨边彝族自治县", - "value": "511132" - }, - { - "label": "马边彝族自治县", - "value": "511133" - }, - { - "label": "峨眉山市", - "value": "511181" - } - ], - [{ - "label": "顺庆区", - "value": "511302" - }, - { - "label": "高坪区", - "value": "511303" - }, - { - "label": "嘉陵区", - "value": "511304" - }, - { - "label": "南部县", - "value": "511321" - }, - { - "label": "营山县", - "value": "511322" - }, - { - "label": "蓬安县", - "value": "511323" - }, - { - "label": "仪陇县", - "value": "511324" - }, - { - "label": "西充县", - "value": "511325" - }, - { - "label": "阆中市", - "value": "511381" - } - ], - [{ - "label": "东坡区", - "value": "511402" - }, - { - "label": "彭山区", - "value": "511403" - }, - { - "label": "仁寿县", - "value": "511421" - }, - { - "label": "洪雅县", - "value": "511423" - }, - { - "label": "丹棱县", - "value": "511424" - }, - { - "label": "青神县", - "value": "511425" - } - ], - [{ - "label": "翠屏区", - "value": "511502" - }, - { - "label": "南溪区", - "value": "511503" - }, - { - "label": "宜宾县", - "value": "511521" - }, - { - "label": "江安县", - "value": "511523" - }, - { - "label": "长宁县", - "value": "511524" - }, - { - "label": "高县", - "value": "511525" - }, - { - "label": "珙县", - "value": "511526" - }, - { - "label": "筠连县", - "value": "511527" - }, - { - "label": "兴文县", - "value": "511528" - }, - { - "label": "屏山县", - "value": "511529" - } - ], - [{ - "label": "广安区", - "value": "511602" - }, - { - "label": "前锋区", - "value": "511603" - }, - { - "label": "岳池县", - "value": "511621" - }, - { - "label": "武胜县", - "value": "511622" - }, - { - "label": "邻水县", - "value": "511623" - }, - { - "label": "华蓥市", - "value": "511681" - } - ], - [{ - "label": "通川区", - "value": "511702" - }, - { - "label": "达川区", - "value": "511703" - }, - { - "label": "宣汉县", - "value": "511722" - }, - { - "label": "开江县", - "value": "511723" - }, - { - "label": "大竹县", - "value": "511724" - }, - { - "label": "渠县", - "value": "511725" - }, - { - "label": "达州经济开发区", - "value": "511771" - }, - { - "label": "万源市", - "value": "511781" - } - ], - [{ - "label": "雨城区", - "value": "511802" - }, - { - "label": "名山区", - "value": "511803" - }, - { - "label": "荥经县", - "value": "511822" - }, - { - "label": "汉源县", - "value": "511823" - }, - { - "label": "石棉县", - "value": "511824" - }, - { - "label": "天全县", - "value": "511825" - }, - { - "label": "芦山县", - "value": "511826" - }, - { - "label": "宝兴县", - "value": "511827" - } - ], - [{ - "label": "巴州区", - "value": "511902" - }, - { - "label": "恩阳区", - "value": "511903" - }, - { - "label": "通江县", - "value": "511921" - }, - { - "label": "南江县", - "value": "511922" - }, - { - "label": "平昌县", - "value": "511923" - }, - { - "label": "巴中经济开发区", - "value": "511971" - } - ], - [{ - "label": "雁江区", - "value": "512002" - }, - { - "label": "安岳县", - "value": "512021" - }, - { - "label": "乐至县", - "value": "512022" - } - ], - [{ - "label": "马尔康市", - "value": "513201" - }, - { - "label": "汶川县", - "value": "513221" - }, - { - "label": "理县", - "value": "513222" - }, - { - "label": "茂县", - "value": "513223" - }, - { - "label": "松潘县", - "value": "513224" - }, - { - "label": "九寨沟县", - "value": "513225" - }, - { - "label": "金川县", - "value": "513226" - }, - { - "label": "小金县", - "value": "513227" - }, - { - "label": "黑水县", - "value": "513228" - }, - { - "label": "壤塘县", - "value": "513230" - }, - { - "label": "阿坝县", - "value": "513231" - }, - { - "label": "若尔盖县", - "value": "513232" - }, - { - "label": "红原县", - "value": "513233" - } - ], - [{ - "label": "康定市", - "value": "513301" - }, - { - "label": "泸定县", - "value": "513322" - }, - { - "label": "丹巴县", - "value": "513323" - }, - { - "label": "九龙县", - "value": "513324" - }, - { - "label": "雅江县", - "value": "513325" - }, - { - "label": "道孚县", - "value": "513326" - }, - { - "label": "炉霍县", - "value": "513327" - }, - { - "label": "甘孜县", - "value": "513328" - }, - { - "label": "新龙县", - "value": "513329" - }, - { - "label": "德格县", - "value": "513330" - }, - { - "label": "白玉县", - "value": "513331" - }, - { - "label": "石渠县", - "value": "513332" - }, - { - "label": "色达县", - "value": "513333" - }, - { - "label": "理塘县", - "value": "513334" - }, - { - "label": "巴塘县", - "value": "513335" - }, - { - "label": "乡城县", - "value": "513336" - }, - { - "label": "稻城县", - "value": "513337" - }, - { - "label": "得荣县", - "value": "513338" - } - ], - [{ - "label": "西昌市", - "value": "513401" - }, - { - "label": "木里藏族自治县", - "value": "513422" - }, - { - "label": "盐源县", - "value": "513423" - }, - { - "label": "德昌县", - "value": "513424" - }, - { - "label": "会理县", - "value": "513425" - }, - { - "label": "会东县", - "value": "513426" - }, - { - "label": "宁南县", - "value": "513427" - }, - { - "label": "普格县", - "value": "513428" - }, - { - "label": "布拖县", - "value": "513429" - }, - { - "label": "金阳县", - "value": "513430" - }, - { - "label": "昭觉县", - "value": "513431" - }, - { - "label": "喜德县", - "value": "513432" - }, - { - "label": "冕宁县", - "value": "513433" - }, - { - "label": "越西县", - "value": "513434" - }, - { - "label": "甘洛县", - "value": "513435" - }, - { - "label": "美姑县", - "value": "513436" - }, - { - "label": "雷波县", - "value": "513437" - } - ] - ], - [ - [{ - "label": "南明区", - "value": "520102" - }, - { - "label": "云岩区", - "value": "520103" - }, - { - "label": "花溪区", - "value": "520111" - }, - { - "label": "乌当区", - "value": "520112" - }, - { - "label": "白云区", - "value": "520113" - }, - { - "label": "观山湖区", - "value": "520115" - }, - { - "label": "开阳县", - "value": "520121" - }, - { - "label": "息烽县", - "value": "520122" - }, - { - "label": "修文县", - "value": "520123" - }, - { - "label": "清镇市", - "value": "520181" - } - ], - [{ - "label": "钟山区", - "value": "520201" - }, - { - "label": "六枝特区", - "value": "520203" - }, - { - "label": "水城县", - "value": "520221" - }, - { - "label": "盘州市", - "value": "520281" - } - ], - [{ - "label": "红花岗区", - "value": "520302" - }, - { - "label": "汇川区", - "value": "520303" - }, - { - "label": "播州区", - "value": "520304" - }, - { - "label": "桐梓县", - "value": "520322" - }, - { - "label": "绥阳县", - "value": "520323" - }, - { - "label": "正安县", - "value": "520324" - }, - { - "label": "道真仡佬族苗族自治县", - "value": "520325" - }, - { - "label": "务川仡佬族苗族自治县", - "value": "520326" - }, - { - "label": "凤冈县", - "value": "520327" - }, - { - "label": "湄潭县", - "value": "520328" - }, - { - "label": "余庆县", - "value": "520329" - }, - { - "label": "习水县", - "value": "520330" - }, - { - "label": "赤水市", - "value": "520381" - }, - { - "label": "仁怀市", - "value": "520382" - } - ], - [{ - "label": "西秀区", - "value": "520402" - }, - { - "label": "平坝区", - "value": "520403" - }, - { - "label": "普定县", - "value": "520422" - }, - { - "label": "镇宁布依族苗族自治县", - "value": "520423" - }, - { - "label": "关岭布依族苗族自治县", - "value": "520424" - }, - { - "label": "紫云苗族布依族自治县", - "value": "520425" - } - ], - [{ - "label": "七星关区", - "value": "520502" - }, - { - "label": "大方县", - "value": "520521" - }, - { - "label": "黔西县", - "value": "520522" - }, - { - "label": "金沙县", - "value": "520523" - }, - { - "label": "织金县", - "value": "520524" - }, - { - "label": "纳雍县", - "value": "520525" - }, - { - "label": "威宁彝族回族苗族自治县", - "value": "520526" - }, - { - "label": "赫章县", - "value": "520527" - } - ], - [{ - "label": "碧江区", - "value": "520602" - }, - { - "label": "万山区", - "value": "520603" - }, - { - "label": "江口县", - "value": "520621" - }, - { - "label": "玉屏侗族自治县", - "value": "520622" - }, - { - "label": "石阡县", - "value": "520623" - }, - { - "label": "思南县", - "value": "520624" - }, - { - "label": "印江土家族苗族自治县", - "value": "520625" - }, - { - "label": "德江县", - "value": "520626" - }, - { - "label": "沿河土家族自治县", - "value": "520627" - }, - { - "label": "松桃苗族自治县", - "value": "520628" - } - ], - [{ - "label": "兴义市", - "value": "522301" - }, - { - "label": "兴仁县", - "value": "522322" - }, - { - "label": "普安县", - "value": "522323" - }, - { - "label": "晴隆县", - "value": "522324" - }, - { - "label": "贞丰县", - "value": "522325" - }, - { - "label": "望谟县", - "value": "522326" - }, - { - "label": "册亨县", - "value": "522327" - }, - { - "label": "安龙县", - "value": "522328" - } - ], - [{ - "label": "凯里市", - "value": "522601" - }, - { - "label": "黄平县", - "value": "522622" - }, - { - "label": "施秉县", - "value": "522623" - }, - { - "label": "三穗县", - "value": "522624" - }, - { - "label": "镇远县", - "value": "522625" - }, - { - "label": "岑巩县", - "value": "522626" - }, - { - "label": "天柱县", - "value": "522627" - }, - { - "label": "锦屏县", - "value": "522628" - }, - { - "label": "剑河县", - "value": "522629" - }, - { - "label": "台江县", - "value": "522630" - }, - { - "label": "黎平县", - "value": "522631" - }, - { - "label": "榕江县", - "value": "522632" - }, - { - "label": "从江县", - "value": "522633" - }, - { - "label": "雷山县", - "value": "522634" - }, - { - "label": "麻江县", - "value": "522635" - }, - { - "label": "丹寨县", - "value": "522636" - } - ], - [{ - "label": "都匀市", - "value": "522701" - }, - { - "label": "福泉市", - "value": "522702" - }, - { - "label": "荔波县", - "value": "522722" - }, - { - "label": "贵定县", - "value": "522723" - }, - { - "label": "瓮安县", - "value": "522725" - }, - { - "label": "独山县", - "value": "522726" - }, - { - "label": "平塘县", - "value": "522727" - }, - { - "label": "罗甸县", - "value": "522728" - }, - { - "label": "长顺县", - "value": "522729" - }, - { - "label": "龙里县", - "value": "522730" - }, - { - "label": "惠水县", - "value": "522731" - }, - { - "label": "三都水族自治县", - "value": "522732" - } - ] - ], - [ - [{ - "label": "五华区", - "value": "530102" - }, - { - "label": "盘龙区", - "value": "530103" - }, - { - "label": "官渡区", - "value": "530111" - }, - { - "label": "西山区", - "value": "530112" - }, - { - "label": "东川区", - "value": "530113" - }, - { - "label": "呈贡区", - "value": "530114" - }, - { - "label": "晋宁区", - "value": "530115" - }, - { - "label": "富民县", - "value": "530124" - }, - { - "label": "宜良县", - "value": "530125" - }, - { - "label": "石林彝族自治县", - "value": "530126" - }, - { - "label": "嵩明县", - "value": "530127" - }, - { - "label": "禄劝彝族苗族自治县", - "value": "530128" - }, - { - "label": "寻甸回族彝族自治县", - "value": "530129" - }, - { - "label": "安宁市", - "value": "530181" - } - ], - [{ - "label": "麒麟区", - "value": "530302" - }, - { - "label": "沾益区", - "value": "530303" - }, - { - "label": "马龙县", - "value": "530321" - }, - { - "label": "陆良县", - "value": "530322" - }, - { - "label": "师宗县", - "value": "530323" - }, - { - "label": "罗平县", - "value": "530324" - }, - { - "label": "富源县", - "value": "530325" - }, - { - "label": "会泽县", - "value": "530326" - }, - { - "label": "宣威市", - "value": "530381" - } - ], - [{ - "label": "红塔区", - "value": "530402" - }, - { - "label": "江川区", - "value": "530403" - }, - { - "label": "澄江县", - "value": "530422" - }, - { - "label": "通海县", - "value": "530423" - }, - { - "label": "华宁县", - "value": "530424" - }, - { - "label": "易门县", - "value": "530425" - }, - { - "label": "峨山彝族自治县", - "value": "530426" - }, - { - "label": "新平彝族傣族自治县", - "value": "530427" - }, - { - "label": "元江哈尼族彝族傣族自治县", - "value": "530428" - } - ], - [{ - "label": "隆阳区", - "value": "530502" - }, - { - "label": "施甸县", - "value": "530521" - }, - { - "label": "龙陵县", - "value": "530523" - }, - { - "label": "昌宁县", - "value": "530524" - }, - { - "label": "腾冲市", - "value": "530581" - } - ], - [{ - "label": "昭阳区", - "value": "530602" - }, - { - "label": "鲁甸县", - "value": "530621" - }, - { - "label": "巧家县", - "value": "530622" - }, - { - "label": "盐津县", - "value": "530623" - }, - { - "label": "大关县", - "value": "530624" - }, - { - "label": "永善县", - "value": "530625" - }, - { - "label": "绥江县", - "value": "530626" - }, - { - "label": "镇雄县", - "value": "530627" - }, - { - "label": "彝良县", - "value": "530628" - }, - { - "label": "威信县", - "value": "530629" - }, - { - "label": "水富县", - "value": "530630" - } - ], - [{ - "label": "古城区", - "value": "530702" - }, - { - "label": "玉龙纳西族自治县", - "value": "530721" - }, - { - "label": "永胜县", - "value": "530722" - }, - { - "label": "华坪县", - "value": "530723" - }, - { - "label": "宁蒗彝族自治县", - "value": "530724" - } - ], - [{ - "label": "思茅区", - "value": "530802" - }, - { - "label": "宁洱哈尼族彝族自治县", - "value": "530821" - }, - { - "label": "墨江哈尼族自治县", - "value": "530822" - }, - { - "label": "景东彝族自治县", - "value": "530823" - }, - { - "label": "景谷傣族彝族自治县", - "value": "530824" - }, - { - "label": "镇沅彝族哈尼族拉祜族自治县", - "value": "530825" - }, - { - "label": "江城哈尼族彝族自治县", - "value": "530826" - }, - { - "label": "孟连傣族拉祜族佤族自治县", - "value": "530827" - }, - { - "label": "澜沧拉祜族自治县", - "value": "530828" - }, - { - "label": "西盟佤族自治县", - "value": "530829" - } - ], - [{ - "label": "临翔区", - "value": "530902" - }, - { - "label": "凤庆县", - "value": "530921" - }, - { - "label": "云县", - "value": "530922" - }, - { - "label": "永德县", - "value": "530923" - }, - { - "label": "镇康县", - "value": "530924" - }, - { - "label": "双江拉祜族佤族布朗族傣族自治县", - "value": "530925" - }, - { - "label": "耿马傣族佤族自治县", - "value": "530926" - }, - { - "label": "沧源佤族自治县", - "value": "530927" - } - ], - [{ - "label": "楚雄市", - "value": "532301" - }, - { - "label": "双柏县", - "value": "532322" - }, - { - "label": "牟定县", - "value": "532323" - }, - { - "label": "南华县", - "value": "532324" - }, - { - "label": "姚安县", - "value": "532325" - }, - { - "label": "大姚县", - "value": "532326" - }, - { - "label": "永仁县", - "value": "532327" - }, - { - "label": "元谋县", - "value": "532328" - }, - { - "label": "武定县", - "value": "532329" - }, - { - "label": "禄丰县", - "value": "532331" - } - ], - [{ - "label": "个旧市", - "value": "532501" - }, - { - "label": "开远市", - "value": "532502" - }, - { - "label": "蒙自市", - "value": "532503" - }, - { - "label": "弥勒市", - "value": "532504" - }, - { - "label": "屏边苗族自治县", - "value": "532523" - }, - { - "label": "建水县", - "value": "532524" - }, - { - "label": "石屏县", - "value": "532525" - }, - { - "label": "泸西县", - "value": "532527" - }, - { - "label": "元阳县", - "value": "532528" - }, - { - "label": "红河县", - "value": "532529" - }, - { - "label": "金平苗族瑶族傣族自治县", - "value": "532530" - }, - { - "label": "绿春县", - "value": "532531" - }, - { - "label": "河口瑶族自治县", - "value": "532532" - } - ], - [{ - "label": "文山市", - "value": "532601" - }, - { - "label": "砚山县", - "value": "532622" - }, - { - "label": "西畴县", - "value": "532623" - }, - { - "label": "麻栗坡县", - "value": "532624" - }, - { - "label": "马关县", - "value": "532625" - }, - { - "label": "丘北县", - "value": "532626" - }, - { - "label": "广南县", - "value": "532627" - }, - { - "label": "富宁县", - "value": "532628" - } - ], - [{ - "label": "景洪市", - "value": "532801" - }, - { - "label": "勐海县", - "value": "532822" - }, - { - "label": "勐腊县", - "value": "532823" - } - ], - [{ - "label": "大理市", - "value": "532901" - }, - { - "label": "漾濞彝族自治县", - "value": "532922" - }, - { - "label": "祥云县", - "value": "532923" - }, - { - "label": "宾川县", - "value": "532924" - }, - { - "label": "弥渡县", - "value": "532925" - }, - { - "label": "南涧彝族自治县", - "value": "532926" - }, - { - "label": "巍山彝族回族自治县", - "value": "532927" - }, - { - "label": "永平县", - "value": "532928" - }, - { - "label": "云龙县", - "value": "532929" - }, - { - "label": "洱源县", - "value": "532930" - }, - { - "label": "剑川县", - "value": "532931" - }, - { - "label": "鹤庆县", - "value": "532932" - } - ], - [{ - "label": "瑞丽市", - "value": "533102" - }, - { - "label": "芒市", - "value": "533103" - }, - { - "label": "梁河县", - "value": "533122" - }, - { - "label": "盈江县", - "value": "533123" - }, - { - "label": "陇川县", - "value": "533124" - } - ], - [{ - "label": "泸水市", - "value": "533301" - }, - { - "label": "福贡县", - "value": "533323" - }, - { - "label": "贡山独龙族怒族自治县", - "value": "533324" - }, - { - "label": "兰坪白族普米族自治县", - "value": "533325" - } - ], - [{ - "label": "香格里拉市", - "value": "533401" - }, - { - "label": "德钦县", - "value": "533422" - }, - { - "label": "维西傈僳族自治县", - "value": "533423" - } - ] - ], - [ - [{ - "label": "城关区", - "value": "540102" - }, - { - "label": "堆龙德庆区", - "value": "540103" - }, - { - "label": "林周县", - "value": "540121" - }, - { - "label": "当雄县", - "value": "540122" - }, - { - "label": "尼木县", - "value": "540123" - }, - { - "label": "曲水县", - "value": "540124" - }, - { - "label": "达孜县", - "value": "540126" - }, - { - "label": "墨竹工卡县", - "value": "540127" - }, - { - "label": "格尔木藏青工业园区", - "value": "540171" - }, - { - "label": "拉萨经济技术开发区", - "value": "540172" - }, - { - "label": "西藏文化旅游创意园区", - "value": "540173" - }, - { - "label": "达孜工业园区", - "value": "540174" - } - ], - [{ - "label": "桑珠孜区", - "value": "540202" - }, - { - "label": "南木林县", - "value": "540221" - }, - { - "label": "江孜县", - "value": "540222" - }, - { - "label": "定日县", - "value": "540223" - }, - { - "label": "萨迦县", - "value": "540224" - }, - { - "label": "拉孜县", - "value": "540225" - }, - { - "label": "昂仁县", - "value": "540226" - }, - { - "label": "谢通门县", - "value": "540227" - }, - { - "label": "白朗县", - "value": "540228" - }, - { - "label": "仁布县", - "value": "540229" - }, - { - "label": "康马县", - "value": "540230" - }, - { - "label": "定结县", - "value": "540231" - }, - { - "label": "仲巴县", - "value": "540232" - }, - { - "label": "亚东县", - "value": "540233" - }, - { - "label": "吉隆县", - "value": "540234" - }, - { - "label": "聂拉木县", - "value": "540235" - }, - { - "label": "萨嘎县", - "value": "540236" - }, - { - "label": "岗巴县", - "value": "540237" - } - ], - [{ - "label": "卡若区", - "value": "540302" - }, - { - "label": "江达县", - "value": "540321" - }, - { - "label": "贡觉县", - "value": "540322" - }, - { - "label": "类乌齐县", - "value": "540323" - }, - { - "label": "丁青县", - "value": "540324" - }, - { - "label": "察雅县", - "value": "540325" - }, - { - "label": "八宿县", - "value": "540326" - }, - { - "label": "左贡县", - "value": "540327" - }, - { - "label": "芒康县", - "value": "540328" - }, - { - "label": "洛隆县", - "value": "540329" - }, - { - "label": "边坝县", - "value": "540330" - } - ], - [{ - "label": "巴宜区", - "value": "540402" - }, - { - "label": "工布江达县", - "value": "540421" - }, - { - "label": "米林县", - "value": "540422" - }, - { - "label": "墨脱县", - "value": "540423" - }, - { - "label": "波密县", - "value": "540424" - }, - { - "label": "察隅县", - "value": "540425" - }, - { - "label": "朗县", - "value": "540426" - } - ], - [{ - "label": "乃东区", - "value": "540502" - }, - { - "label": "扎囊县", - "value": "540521" - }, - { - "label": "贡嘎县", - "value": "540522" - }, - { - "label": "桑日县", - "value": "540523" - }, - { - "label": "琼结县", - "value": "540524" - }, - { - "label": "曲松县", - "value": "540525" - }, - { - "label": "措美县", - "value": "540526" - }, - { - "label": "洛扎县", - "value": "540527" - }, - { - "label": "加查县", - "value": "540528" - }, - { - "label": "隆子县", - "value": "540529" - }, - { - "label": "错那县", - "value": "540530" - }, - { - "label": "浪卡子县", - "value": "540531" - } - ], - [{ - "label": "那曲县", - "value": "542421" - }, - { - "label": "嘉黎县", - "value": "542422" - }, - { - "label": "比如县", - "value": "542423" - }, - { - "label": "聂荣县", - "value": "542424" - }, - { - "label": "安多县", - "value": "542425" - }, - { - "label": "申扎县", - "value": "542426" - }, - { - "label": "索县", - "value": "542427" - }, - { - "label": "班戈县", - "value": "542428" - }, - { - "label": "巴青县", - "value": "542429" - }, - { - "label": "尼玛县", - "value": "542430" - }, - { - "label": "双湖县", - "value": "542431" - } - ], - [{ - "label": "普兰县", - "value": "542521" - }, - { - "label": "札达县", - "value": "542522" - }, - { - "label": "噶尔县", - "value": "542523" - }, - { - "label": "日土县", - "value": "542524" - }, - { - "label": "革吉县", - "value": "542525" - }, - { - "label": "改则县", - "value": "542526" - }, - { - "label": "措勤县", - "value": "542527" - } - ] - ], - [ - [{ - "label": "新城区", - "value": "610102" - }, - { - "label": "碑林区", - "value": "610103" - }, - { - "label": "莲湖区", - "value": "610104" - }, - { - "label": "灞桥区", - "value": "610111" - }, - { - "label": "未央区", - "value": "610112" - }, - { - "label": "雁塔区", - "value": "610113" - }, - { - "label": "阎良区", - "value": "610114" - }, - { - "label": "临潼区", - "value": "610115" - }, - { - "label": "长安区", - "value": "610116" - }, - { - "label": "高陵区", - "value": "610117" - }, - { - "label": "鄠邑区", - "value": "610118" - }, - { - "label": "蓝田县", - "value": "610122" - }, - { - "label": "周至县", - "value": "610124" - } - ], - [{ - "label": "王益区", - "value": "610202" - }, - { - "label": "印台区", - "value": "610203" - }, - { - "label": "耀州区", - "value": "610204" - }, - { - "label": "宜君县", - "value": "610222" - } - ], - [{ - "label": "渭滨区", - "value": "610302" - }, - { - "label": "金台区", - "value": "610303" - }, - { - "label": "陈仓区", - "value": "610304" - }, - { - "label": "凤翔县", - "value": "610322" - }, - { - "label": "岐山县", - "value": "610323" - }, - { - "label": "扶风县", - "value": "610324" - }, - { - "label": "眉县", - "value": "610326" - }, - { - "label": "陇县", - "value": "610327" - }, - { - "label": "千阳县", - "value": "610328" - }, - { - "label": "麟游县", - "value": "610329" - }, - { - "label": "凤县", - "value": "610330" - }, - { - "label": "太白县", - "value": "610331" - } - ], - [{ - "label": "秦都区", - "value": "610402" - }, - { - "label": "杨陵区", - "value": "610403" - }, - { - "label": "渭城区", - "value": "610404" - }, - { - "label": "三原县", - "value": "610422" - }, - { - "label": "泾阳县", - "value": "610423" - }, - { - "label": "乾县", - "value": "610424" - }, - { - "label": "礼泉县", - "value": "610425" - }, - { - "label": "永寿县", - "value": "610426" - }, - { - "label": "彬县", - "value": "610427" - }, - { - "label": "长武县", - "value": "610428" - }, - { - "label": "旬邑县", - "value": "610429" - }, - { - "label": "淳化县", - "value": "610430" - }, - { - "label": "武功县", - "value": "610431" - }, - { - "label": "兴平市", - "value": "610481" - } - ], - [{ - "label": "临渭区", - "value": "610502" - }, - { - "label": "华州区", - "value": "610503" - }, - { - "label": "潼关县", - "value": "610522" - }, - { - "label": "大荔县", - "value": "610523" - }, - { - "label": "合阳县", - "value": "610524" - }, - { - "label": "澄城县", - "value": "610525" - }, - { - "label": "蒲城县", - "value": "610526" - }, - { - "label": "白水县", - "value": "610527" - }, - { - "label": "富平县", - "value": "610528" - }, - { - "label": "韩城市", - "value": "610581" - }, - { - "label": "华阴市", - "value": "610582" - } - ], - [{ - "label": "宝塔区", - "value": "610602" - }, - { - "label": "安塞区", - "value": "610603" - }, - { - "label": "延长县", - "value": "610621" - }, - { - "label": "延川县", - "value": "610622" - }, - { - "label": "子长县", - "value": "610623" - }, - { - "label": "志丹县", - "value": "610625" - }, - { - "label": "吴起县", - "value": "610626" - }, - { - "label": "甘泉县", - "value": "610627" - }, - { - "label": "富县", - "value": "610628" - }, - { - "label": "洛川县", - "value": "610629" - }, - { - "label": "宜川县", - "value": "610630" - }, - { - "label": "黄龙县", - "value": "610631" - }, - { - "label": "黄陵县", - "value": "610632" - } - ], - [{ - "label": "汉台区", - "value": "610702" - }, - { - "label": "南郑区", - "value": "610703" - }, - { - "label": "城固县", - "value": "610722" - }, - { - "label": "洋县", - "value": "610723" - }, - { - "label": "西乡县", - "value": "610724" - }, - { - "label": "勉县", - "value": "610725" - }, - { - "label": "宁强县", - "value": "610726" - }, - { - "label": "略阳县", - "value": "610727" - }, - { - "label": "镇巴县", - "value": "610728" - }, - { - "label": "留坝县", - "value": "610729" - }, - { - "label": "佛坪县", - "value": "610730" - } - ], - [{ - "label": "榆阳区", - "value": "610802" - }, - { - "label": "横山区", - "value": "610803" - }, - { - "label": "府谷县", - "value": "610822" - }, - { - "label": "靖边县", - "value": "610824" - }, - { - "label": "定边县", - "value": "610825" - }, - { - "label": "绥德县", - "value": "610826" - }, - { - "label": "米脂县", - "value": "610827" - }, - { - "label": "佳县", - "value": "610828" - }, - { - "label": "吴堡县", - "value": "610829" - }, - { - "label": "清涧县", - "value": "610830" - }, - { - "label": "子洲县", - "value": "610831" - }, - { - "label": "神木市", - "value": "610881" - } - ], - [{ - "label": "汉滨区", - "value": "610902" - }, - { - "label": "汉阴县", - "value": "610921" - }, - { - "label": "石泉县", - "value": "610922" - }, - { - "label": "宁陕县", - "value": "610923" - }, - { - "label": "紫阳县", - "value": "610924" - }, - { - "label": "岚皋县", - "value": "610925" - }, - { - "label": "平利县", - "value": "610926" - }, - { - "label": "镇坪县", - "value": "610927" - }, - { - "label": "旬阳县", - "value": "610928" - }, - { - "label": "白河县", - "value": "610929" - } - ], - [{ - "label": "商州区", - "value": "611002" - }, - { - "label": "洛南县", - "value": "611021" - }, - { - "label": "丹凤县", - "value": "611022" - }, - { - "label": "商南县", - "value": "611023" - }, - { - "label": "山阳县", - "value": "611024" - }, - { - "label": "镇安县", - "value": "611025" - }, - { - "label": "柞水县", - "value": "611026" - } - ] - ], - [ - [{ - "label": "城关区", - "value": "620102" - }, - { - "label": "七里河区", - "value": "620103" - }, - { - "label": "西固区", - "value": "620104" - }, - { - "label": "安宁区", - "value": "620105" - }, - { - "label": "红古区", - "value": "620111" - }, - { - "label": "永登县", - "value": "620121" - }, - { - "label": "皋兰县", - "value": "620122" - }, - { - "label": "榆中县", - "value": "620123" - }, - { - "label": "兰州新区", - "value": "620171" - } - ], - [{ - "label": "嘉峪关市", - "value": "620201" - }], - [{ - "label": "金川区", - "value": "620302" - }, - { - "label": "永昌县", - "value": "620321" - } - ], - [{ - "label": "白银区", - "value": "620402" - }, - { - "label": "平川区", - "value": "620403" - }, - { - "label": "靖远县", - "value": "620421" - }, - { - "label": "会宁县", - "value": "620422" - }, - { - "label": "景泰县", - "value": "620423" - } - ], - [{ - "label": "秦州区", - "value": "620502" - }, - { - "label": "麦积区", - "value": "620503" - }, - { - "label": "清水县", - "value": "620521" - }, - { - "label": "秦安县", - "value": "620522" - }, - { - "label": "甘谷县", - "value": "620523" - }, - { - "label": "武山县", - "value": "620524" - }, - { - "label": "张家川回族自治县", - "value": "620525" - } - ], - [{ - "label": "凉州区", - "value": "620602" - }, - { - "label": "民勤县", - "value": "620621" - }, - { - "label": "古浪县", - "value": "620622" - }, - { - "label": "天祝藏族自治县", - "value": "620623" - } - ], - [{ - "label": "甘州区", - "value": "620702" - }, - { - "label": "肃南裕固族自治县", - "value": "620721" - }, - { - "label": "民乐县", - "value": "620722" - }, - { - "label": "临泽县", - "value": "620723" - }, - { - "label": "高台县", - "value": "620724" - }, - { - "label": "山丹县", - "value": "620725" - } - ], - [{ - "label": "崆峒区", - "value": "620802" - }, - { - "label": "泾川县", - "value": "620821" - }, - { - "label": "灵台县", - "value": "620822" - }, - { - "label": "崇信县", - "value": "620823" - }, - { - "label": "华亭县", - "value": "620824" - }, - { - "label": "庄浪县", - "value": "620825" - }, - { - "label": "静宁县", - "value": "620826" - }, - { - "label": "平凉工业园区", - "value": "620871" - } - ], - [{ - "label": "肃州区", - "value": "620902" - }, - { - "label": "金塔县", - "value": "620921" - }, - { - "label": "瓜州县", - "value": "620922" - }, - { - "label": "肃北蒙古族自治县", - "value": "620923" - }, - { - "label": "阿克塞哈萨克族自治县", - "value": "620924" - }, - { - "label": "玉门市", - "value": "620981" - }, - { - "label": "敦煌市", - "value": "620982" - } - ], - [{ - "label": "西峰区", - "value": "621002" - }, - { - "label": "庆城县", - "value": "621021" - }, - { - "label": "环县", - "value": "621022" - }, - { - "label": "华池县", - "value": "621023" - }, - { - "label": "合水县", - "value": "621024" - }, - { - "label": "正宁县", - "value": "621025" - }, - { - "label": "宁县", - "value": "621026" - }, - { - "label": "镇原县", - "value": "621027" - } - ], - [{ - "label": "安定区", - "value": "621102" - }, - { - "label": "通渭县", - "value": "621121" - }, - { - "label": "陇西县", - "value": "621122" - }, - { - "label": "渭源县", - "value": "621123" - }, - { - "label": "临洮县", - "value": "621124" - }, - { - "label": "漳县", - "value": "621125" - }, - { - "label": "岷县", - "value": "621126" - } - ], - [{ - "label": "武都区", - "value": "621202" - }, - { - "label": "成县", - "value": "621221" - }, - { - "label": "文县", - "value": "621222" - }, - { - "label": "宕昌县", - "value": "621223" - }, - { - "label": "康县", - "value": "621224" - }, - { - "label": "西和县", - "value": "621225" - }, - { - "label": "礼县", - "value": "621226" - }, - { - "label": "徽县", - "value": "621227" - }, - { - "label": "两当县", - "value": "621228" - } - ], - [{ - "label": "临夏市", - "value": "622901" - }, - { - "label": "临夏县", - "value": "622921" - }, - { - "label": "康乐县", - "value": "622922" - }, - { - "label": "永靖县", - "value": "622923" - }, - { - "label": "广河县", - "value": "622924" - }, - { - "label": "和政县", - "value": "622925" - }, - { - "label": "东乡族自治县", - "value": "622926" - }, - { - "label": "积石山保安族东乡族撒拉族自治县", - "value": "622927" - } - ], - [{ - "label": "合作市", - "value": "623001" - }, - { - "label": "临潭县", - "value": "623021" - }, - { - "label": "卓尼县", - "value": "623022" - }, - { - "label": "舟曲县", - "value": "623023" - }, - { - "label": "迭部县", - "value": "623024" - }, - { - "label": "玛曲县", - "value": "623025" - }, - { - "label": "碌曲县", - "value": "623026" - }, - { - "label": "夏河县", - "value": "623027" - } - ] - ], - [ - [{ - "label": "城东区", - "value": "630102" - }, - { - "label": "城中区", - "value": "630103" - }, - { - "label": "城西区", - "value": "630104" - }, - { - "label": "城北区", - "value": "630105" - }, - { - "label": "大通回族土族自治县", - "value": "630121" - }, - { - "label": "湟中县", - "value": "630122" - }, - { - "label": "湟源县", - "value": "630123" - } - ], - [{ - "label": "乐都区", - "value": "630202" - }, - { - "label": "平安区", - "value": "630203" - }, - { - "label": "民和回族土族自治县", - "value": "630222" - }, - { - "label": "互助土族自治县", - "value": "630223" - }, - { - "label": "化隆回族自治县", - "value": "630224" - }, - { - "label": "循化撒拉族自治县", - "value": "630225" - } - ], - [{ - "label": "门源回族自治县", - "value": "632221" - }, - { - "label": "祁连县", - "value": "632222" - }, - { - "label": "海晏县", - "value": "632223" - }, - { - "label": "刚察县", - "value": "632224" - } - ], - [{ - "label": "同仁县", - "value": "632321" - }, - { - "label": "尖扎县", - "value": "632322" - }, - { - "label": "泽库县", - "value": "632323" - }, - { - "label": "河南蒙古族自治县", - "value": "632324" - } - ], - [{ - "label": "共和县", - "value": "632521" - }, - { - "label": "同德县", - "value": "632522" - }, - { - "label": "贵德县", - "value": "632523" - }, - { - "label": "兴海县", - "value": "632524" - }, - { - "label": "贵南县", - "value": "632525" - } - ], - [{ - "label": "玛沁县", - "value": "632621" - }, - { - "label": "班玛县", - "value": "632622" - }, - { - "label": "甘德县", - "value": "632623" - }, - { - "label": "达日县", - "value": "632624" - }, - { - "label": "久治县", - "value": "632625" - }, - { - "label": "玛多县", - "value": "632626" - } - ], - [{ - "label": "玉树市", - "value": "632701" - }, - { - "label": "杂多县", - "value": "632722" - }, - { - "label": "称多县", - "value": "632723" - }, - { - "label": "治多县", - "value": "632724" - }, - { - "label": "囊谦县", - "value": "632725" - }, - { - "label": "曲麻莱县", - "value": "632726" - } - ], - [{ - "label": "格尔木市", - "value": "632801" - }, - { - "label": "德令哈市", - "value": "632802" - }, - { - "label": "乌兰县", - "value": "632821" - }, - { - "label": "都兰县", - "value": "632822" - }, - { - "label": "天峻县", - "value": "632823" - }, - { - "label": "大柴旦行政委员会", - "value": "632857" - }, - { - "label": "冷湖行政委员会", - "value": "632858" - }, - { - "label": "茫崖行政委员会", - "value": "632859" - } - ] - ], - [ - [{ - "label": "兴庆区", - "value": "640104" - }, - { - "label": "西夏区", - "value": "640105" - }, - { - "label": "金凤区", - "value": "640106" - }, - { - "label": "永宁县", - "value": "640121" - }, - { - "label": "贺兰县", - "value": "640122" - }, - { - "label": "灵武市", - "value": "640181" - } - ], - [{ - "label": "大武口区", - "value": "640202" - }, - { - "label": "惠农区", - "value": "640205" - }, - { - "label": "平罗县", - "value": "640221" - } - ], - [{ - "label": "利通区", - "value": "640302" - }, - { - "label": "红寺堡区", - "value": "640303" - }, - { - "label": "盐池县", - "value": "640323" - }, - { - "label": "同心县", - "value": "640324" - }, - { - "label": "青铜峡市", - "value": "640381" - } - ], - [{ - "label": "原州区", - "value": "640402" - }, - { - "label": "西吉县", - "value": "640422" - }, - { - "label": "隆德县", - "value": "640423" - }, - { - "label": "泾源县", - "value": "640424" - }, - { - "label": "彭阳县", - "value": "640425" - } - ], - [{ - "label": "沙坡头区", - "value": "640502" - }, - { - "label": "中宁县", - "value": "640521" - }, - { - "label": "海原县", - "value": "640522" - } - ] - ], - [ - [{ - "label": "天山区", - "value": "650102" - }, - { - "label": "沙依巴克区", - "value": "650103" - }, - { - "label": "新市区", - "value": "650104" - }, - { - "label": "水磨沟区", - "value": "650105" - }, - { - "label": "头屯河区", - "value": "650106" - }, - { - "label": "达坂城区", - "value": "650107" - }, - { - "label": "米东区", - "value": "650109" - }, - { - "label": "乌鲁木齐县", - "value": "650121" - }, - { - "label": "乌鲁木齐经济技术开发区", - "value": "650171" - }, - { - "label": "乌鲁木齐高新技术产业开发区", - "value": "650172" - } - ], - [{ - "label": "独山子区", - "value": "650202" - }, - { - "label": "克拉玛依区", - "value": "650203" - }, - { - "label": "白碱滩区", - "value": "650204" - }, - { - "label": "乌尔禾区", - "value": "650205" - } - ], - [{ - "label": "高昌区", - "value": "650402" - }, - { - "label": "鄯善县", - "value": "650421" - }, - { - "label": "托克逊县", - "value": "650422" - } - ], - [{ - "label": "伊州区", - "value": "650502" - }, - { - "label": "巴里坤哈萨克自治县", - "value": "650521" - }, - { - "label": "伊吾县", - "value": "650522" - } - ], - [{ - "label": "昌吉市", - "value": "652301" - }, - { - "label": "阜康市", - "value": "652302" - }, - { - "label": "呼图壁县", - "value": "652323" - }, - { - "label": "玛纳斯县", - "value": "652324" - }, - { - "label": "奇台县", - "value": "652325" - }, - { - "label": "吉木萨尔县", - "value": "652327" - }, - { - "label": "木垒哈萨克自治县", - "value": "652328" - } - ], - [{ - "label": "博乐市", - "value": "652701" - }, - { - "label": "阿拉山口市", - "value": "652702" - }, - { - "label": "精河县", - "value": "652722" - }, - { - "label": "温泉县", - "value": "652723" - } - ], - [{ - "label": "库尔勒市", - "value": "652801" - }, - { - "label": "轮台县", - "value": "652822" - }, - { - "label": "尉犁县", - "value": "652823" - }, - { - "label": "若羌县", - "value": "652824" - }, - { - "label": "且末县", - "value": "652825" - }, - { - "label": "焉耆回族自治县", - "value": "652826" - }, - { - "label": "和静县", - "value": "652827" - }, - { - "label": "和硕县", - "value": "652828" - }, - { - "label": "博湖县", - "value": "652829" - }, - { - "label": "库尔勒经济技术开发区", - "value": "652871" - } - ], - [{ - "label": "阿克苏市", - "value": "652901" - }, - { - "label": "温宿县", - "value": "652922" - }, - { - "label": "库车县", - "value": "652923" - }, - { - "label": "沙雅县", - "value": "652924" - }, - { - "label": "新和县", - "value": "652925" - }, - { - "label": "拜城县", - "value": "652926" - }, - { - "label": "乌什县", - "value": "652927" - }, - { - "label": "阿瓦提县", - "value": "652928" - }, - { - "label": "柯坪县", - "value": "652929" - } - ], - [{ - "label": "阿图什市", - "value": "653001" - }, - { - "label": "阿克陶县", - "value": "653022" - }, - { - "label": "阿合奇县", - "value": "653023" - }, - { - "label": "乌恰县", - "value": "653024" - } - ], - [{ - "label": "喀什市", - "value": "653101" - }, - { - "label": "疏附县", - "value": "653121" - }, - { - "label": "疏勒县", - "value": "653122" - }, - { - "label": "英吉沙县", - "value": "653123" - }, - { - "label": "泽普县", - "value": "653124" - }, - { - "label": "莎车县", - "value": "653125" - }, - { - "label": "叶城县", - "value": "653126" - }, - { - "label": "麦盖提县", - "value": "653127" - }, - { - "label": "岳普湖县", - "value": "653128" - }, - { - "label": "伽师县", - "value": "653129" - }, - { - "label": "巴楚县", - "value": "653130" - }, - { - "label": "塔什库尔干塔吉克自治县", - "value": "653131" - } - ], - [{ - "label": "和田市", - "value": "653201" - }, - { - "label": "和田县", - "value": "653221" - }, - { - "label": "墨玉县", - "value": "653222" - }, - { - "label": "皮山县", - "value": "653223" - }, - { - "label": "洛浦县", - "value": "653224" - }, - { - "label": "策勒县", - "value": "653225" - }, - { - "label": "于田县", - "value": "653226" - }, - { - "label": "民丰县", - "value": "653227" - } - ], - [{ - "label": "伊宁市", - "value": "654002" - }, - { - "label": "奎屯市", - "value": "654003" - }, - { - "label": "霍尔果斯市", - "value": "654004" - }, - { - "label": "伊宁县", - "value": "654021" - }, - { - "label": "察布查尔锡伯自治县", - "value": "654022" - }, - { - "label": "霍城县", - "value": "654023" - }, - { - "label": "巩留县", - "value": "654024" - }, - { - "label": "新源县", - "value": "654025" - }, - { - "label": "昭苏县", - "value": "654026" - }, - { - "label": "特克斯县", - "value": "654027" - }, - { - "label": "尼勒克县", - "value": "654028" - } - ], - [{ - "label": "塔城市", - "value": "654201" - }, - { - "label": "乌苏市", - "value": "654202" - }, - { - "label": "额敏县", - "value": "654221" - }, - { - "label": "沙湾县", - "value": "654223" - }, - { - "label": "托里县", - "value": "654224" - }, - { - "label": "裕民县", - "value": "654225" - }, - { - "label": "和布克赛尔蒙古自治县", - "value": "654226" - } - ], - [{ - "label": "阿勒泰市", - "value": "654301" - }, - { - "label": "布尔津县", - "value": "654321" - }, - { - "label": "富蕴县", - "value": "654322" - }, - { - "label": "福海县", - "value": "654323" - }, - { - "label": "哈巴河县", - "value": "654324" - }, - { - "label": "青河县", - "value": "654325" - }, - { - "label": "吉木乃县", - "value": "654326" - } - ], - [{ - "label": "石河子市", - "value": "659001" - }, - { - "label": "阿拉尔市", - "value": "659002" - }, - { - "label": "图木舒克市", - "value": "659003" - }, - { - "label": "五家渠市", - "value": "659004" - }, - { - "label": "铁门关市", - "value": "659006" - } - ] - ], - [ - [{ - "label": "台北", - "value": "660101" - }], - [{ - "label": "高雄", - "value": "660201" - }], - [{ - "label": "基隆", - "value": "660301" - }], - [{ - "label": "台中", - "value": "660401" - }], - [{ - "label": "台南", - "value": "660501" - }], - [{ - "label": "新竹", - "value": "660601" - }], - [{ - "label": "嘉义", - "value": "660701" - }], - [{ - "label": "宜兰", - "value": "660801" - }], - [{ - "label": "桃园", - "value": "660901" - }], - [{ - "label": "苗栗", - "value": "661001" - }], - [{ - "label": "彰化", - "value": "661101" - }], - [{ - "label": "南投", - "value": "661201" - }], - [{ - "label": "云林", - "value": "661301" - }], - [{ - "label": "屏东", - "value": "661401" - }], - [{ - "label": "台东", - "value": "661501" - }], - [{ - "label": "花莲", - "value": "661601" - }], - [{ - "label": "澎湖", - "value": "661701" - }] - ], - [ - [{ - "label": "香港岛", - "value": "670101" - }], - [{ - "label": "九龙", - "value": "670201" - }], - [{ - "label": "新界", - "value": "670301" - }] - ], - [ - [{ - "label": "澳门半岛", - "value": "680101" - }], - [{ - "label": "氹仔岛", - "value": "680201" - }], - [{ - "label": "路环岛", - "value": "680301" - }], - [{ - "label": "路氹城", - "value": "680401" - }] - ] -] -export default areaData; diff --git a/components/mpvue-citypicker/city-data/city.js b/components/mpvue-citypicker/city-data/city.js deleted file mode 100644 index 8c1dc262..00000000 --- a/components/mpvue-citypicker/city-data/city.js +++ /dev/null @@ -1,1503 +0,0 @@ -/* eslint-disable */ -var cityData = [ - [{ - "label": "市辖区", - "value": "1101" - }], - [{ - "label": "市辖区", - "value": "1201" - }], - [{ - "label": "石家庄市", - "value": "1301" - }, - { - "label": "唐山市", - "value": "1302" - }, - { - "label": "秦皇岛市", - "value": "1303" - }, - { - "label": "邯郸市", - "value": "1304" - }, - { - "label": "邢台市", - "value": "1305" - }, - { - "label": "保定市", - "value": "1306" - }, - { - "label": "张家口市", - "value": "1307" - }, - { - "label": "承德市", - "value": "1308" - }, - { - "label": "沧州市", - "value": "1309" - }, - { - "label": "廊坊市", - "value": "1310" - }, - { - "label": "衡水市", - "value": "1311" - } - ], - [{ - "label": "太原市", - "value": "1401" - }, - { - "label": "大同市", - "value": "1402" - }, - { - "label": "阳泉市", - "value": "1403" - }, - { - "label": "长治市", - "value": "1404" - }, - { - "label": "晋城市", - "value": "1405" - }, - { - "label": "朔州市", - "value": "1406" - }, - { - "label": "晋中市", - "value": "1407" - }, - { - "label": "运城市", - "value": "1408" - }, - { - "label": "忻州市", - "value": "1409" - }, - { - "label": "临汾市", - "value": "1410" - }, - { - "label": "吕梁市", - "value": "1411" - } - ], - [{ - "label": "呼和浩特市", - "value": "1501" - }, - { - "label": "包头市", - "value": "1502" - }, - { - "label": "乌海市", - "value": "1503" - }, - { - "label": "赤峰市", - "value": "1504" - }, - { - "label": "通辽市", - "value": "1505" - }, - { - "label": "鄂尔多斯市", - "value": "1506" - }, - { - "label": "呼伦贝尔市", - "value": "1507" - }, - { - "label": "巴彦淖尔市", - "value": "1508" - }, - { - "label": "乌兰察布市", - "value": "1509" - }, - { - "label": "兴安盟", - "value": "1522" - }, - { - "label": "锡林郭勒盟", - "value": "1525" - }, - { - "label": "阿拉善盟", - "value": "1529" - } - ], - [{ - "label": "沈阳市", - "value": "2101" - }, - { - "label": "大连市", - "value": "2102" - }, - { - "label": "鞍山市", - "value": "2103" - }, - { - "label": "抚顺市", - "value": "2104" - }, - { - "label": "本溪市", - "value": "2105" - }, - { - "label": "丹东市", - "value": "2106" - }, - { - "label": "锦州市", - "value": "2107" - }, - { - "label": "营口市", - "value": "2108" - }, - { - "label": "阜新市", - "value": "2109" - }, - { - "label": "辽阳市", - "value": "2110" - }, - { - "label": "盘锦市", - "value": "2111" - }, - { - "label": "铁岭市", - "value": "2112" - }, - { - "label": "朝阳市", - "value": "2113" - }, - { - "label": "葫芦岛市", - "value": "2114" - } - ], - [{ - "label": "长春市", - "value": "2201" - }, - { - "label": "吉林市", - "value": "2202" - }, - { - "label": "四平市", - "value": "2203" - }, - { - "label": "辽源市", - "value": "2204" - }, - { - "label": "通化市", - "value": "2205" - }, - { - "label": "白山市", - "value": "2206" - }, - { - "label": "松原市", - "value": "2207" - }, - { - "label": "白城市", - "value": "2208" - }, - { - "label": "延边朝鲜族自治州", - "value": "2224" - } - ], - [{ - "label": "哈尔滨市", - "value": "2301" - }, - { - "label": "齐齐哈尔市", - "value": "2302" - }, - { - "label": "鸡西市", - "value": "2303" - }, - { - "label": "鹤岗市", - "value": "2304" - }, - { - "label": "双鸭山市", - "value": "2305" - }, - { - "label": "大庆市", - "value": "2306" - }, - { - "label": "伊春市", - "value": "2307" - }, - { - "label": "佳木斯市", - "value": "2308" - }, - { - "label": "七台河市", - "value": "2309" - }, - { - "label": "牡丹江市", - "value": "2310" - }, - { - "label": "黑河市", - "value": "2311" - }, - { - "label": "绥化市", - "value": "2312" - }, - { - "label": "大兴安岭地区", - "value": "2327" - } - ], - [{ - "label": "市辖区", - "value": "3101" - }], - [{ - "label": "南京市", - "value": "3201" - }, - { - "label": "无锡市", - "value": "3202" - }, - { - "label": "徐州市", - "value": "3203" - }, - { - "label": "常州市", - "value": "3204" - }, - { - "label": "苏州市", - "value": "3205" - }, - { - "label": "南通市", - "value": "3206" - }, - { - "label": "连云港市", - "value": "3207" - }, - { - "label": "淮安市", - "value": "3208" - }, - { - "label": "盐城市", - "value": "3209" - }, - { - "label": "扬州市", - "value": "3210" - }, - { - "label": "镇江市", - "value": "3211" - }, - { - "label": "泰州市", - "value": "3212" - }, - { - "label": "宿迁市", - "value": "3213" - } - ], - [{ - "label": "杭州市", - "value": "3301" - }, - { - "label": "宁波市", - "value": "3302" - }, - { - "label": "温州市", - "value": "3303" - }, - { - "label": "嘉兴市", - "value": "3304" - }, - { - "label": "湖州市", - "value": "3305" - }, - { - "label": "绍兴市", - "value": "3306" - }, - { - "label": "金华市", - "value": "3307" - }, - { - "label": "衢州市", - "value": "3308" - }, - { - "label": "舟山市", - "value": "3309" - }, - { - "label": "台州市", - "value": "3310" - }, - { - "label": "丽水市", - "value": "3311" - } - ], - [{ - "label": "合肥市", - "value": "3401" - }, - { - "label": "芜湖市", - "value": "3402" - }, - { - "label": "蚌埠市", - "value": "3403" - }, - { - "label": "淮南市", - "value": "3404" - }, - { - "label": "马鞍山市", - "value": "3405" - }, - { - "label": "淮北市", - "value": "3406" - }, - { - "label": "铜陵市", - "value": "3407" - }, - { - "label": "安庆市", - "value": "3408" - }, - { - "label": "黄山市", - "value": "3410" - }, - { - "label": "滁州市", - "value": "3411" - }, - { - "label": "阜阳市", - "value": "3412" - }, - { - "label": "宿州市", - "value": "3413" - }, - { - "label": "六安市", - "value": "3415" - }, - { - "label": "亳州市", - "value": "3416" - }, - { - "label": "池州市", - "value": "3417" - }, - { - "label": "宣城市", - "value": "3418" - } - ], - [{ - "label": "福州市", - "value": "3501" - }, - { - "label": "厦门市", - "value": "3502" - }, - { - "label": "莆田市", - "value": "3503" - }, - { - "label": "三明市", - "value": "3504" - }, - { - "label": "泉州市", - "value": "3505" - }, - { - "label": "漳州市", - "value": "3506" - }, - { - "label": "南平市", - "value": "3507" - }, - { - "label": "龙岩市", - "value": "3508" - }, - { - "label": "宁德市", - "value": "3509" - } - ], - [{ - "label": "南昌市", - "value": "3601" - }, - { - "label": "景德镇市", - "value": "3602" - }, - { - "label": "萍乡市", - "value": "3603" - }, - { - "label": "九江市", - "value": "3604" - }, - { - "label": "新余市", - "value": "3605" - }, - { - "label": "鹰潭市", - "value": "3606" - }, - { - "label": "赣州市", - "value": "3607" - }, - { - "label": "吉安市", - "value": "3608" - }, - { - "label": "宜春市", - "value": "3609" - }, - { - "label": "抚州市", - "value": "3610" - }, - { - "label": "上饶市", - "value": "3611" - } - ], - [{ - "label": "济南市", - "value": "3701" - }, - { - "label": "青岛市", - "value": "3702" - }, - { - "label": "淄博市", - "value": "3703" - }, - { - "label": "枣庄市", - "value": "3704" - }, - { - "label": "东营市", - "value": "3705" - }, - { - "label": "烟台市", - "value": "3706" - }, - { - "label": "潍坊市", - "value": "3707" - }, - { - "label": "济宁市", - "value": "3708" - }, - { - "label": "泰安市", - "value": "3709" - }, - { - "label": "威海市", - "value": "3710" - }, - { - "label": "日照市", - "value": "3711" - }, - { - "label": "莱芜市", - "value": "3712" - }, - { - "label": "临沂市", - "value": "3713" - }, - { - "label": "德州市", - "value": "3714" - }, - { - "label": "聊城市", - "value": "3715" - }, - { - "label": "滨州市", - "value": "3716" - }, - { - "label": "菏泽市", - "value": "3717" - } - ], - [{ - "label": "郑州市", - "value": "4101" - }, - { - "label": "开封市", - "value": "4102" - }, - { - "label": "洛阳市", - "value": "4103" - }, - { - "label": "平顶山市", - "value": "4104" - }, - { - "label": "安阳市", - "value": "4105" - }, - { - "label": "鹤壁市", - "value": "4106" - }, - { - "label": "新乡市", - "value": "4107" - }, - { - "label": "焦作市", - "value": "4108" - }, - { - "label": "濮阳市", - "value": "4109" - }, - { - "label": "许昌市", - "value": "4110" - }, - { - "label": "漯河市", - "value": "4111" - }, - { - "label": "三门峡市", - "value": "4112" - }, - { - "label": "南阳市", - "value": "4113" - }, - { - "label": "商丘市", - "value": "4114" - }, - { - "label": "信阳市", - "value": "4115" - }, - { - "label": "周口市", - "value": "4116" - }, - { - "label": "驻马店市", - "value": "4117" - }, - { - "label": "省直辖县级行政区划", - "value": "4190" - } - ], - [{ - "label": "武汉市", - "value": "4201" - }, - { - "label": "黄石市", - "value": "4202" - }, - { - "label": "十堰市", - "value": "4203" - }, - { - "label": "宜昌市", - "value": "4205" - }, - { - "label": "襄阳市", - "value": "4206" - }, - { - "label": "鄂州市", - "value": "4207" - }, - { - "label": "荆门市", - "value": "4208" - }, - { - "label": "孝感市", - "value": "4209" - }, - { - "label": "荆州市", - "value": "4210" - }, - { - "label": "黄冈市", - "value": "4211" - }, - { - "label": "咸宁市", - "value": "4212" - }, - { - "label": "随州市", - "value": "4213" - }, - { - "label": "恩施土家族苗族自治州", - "value": "4228" - }, - { - "label": "省直辖县级行政区划", - "value": "4290" - } - ], - [{ - "label": "长沙市", - "value": "4301" - }, - { - "label": "株洲市", - "value": "4302" - }, - { - "label": "湘潭市", - "value": "4303" - }, - { - "label": "衡阳市", - "value": "4304" - }, - { - "label": "邵阳市", - "value": "4305" - }, - { - "label": "岳阳市", - "value": "4306" - }, - { - "label": "常德市", - "value": "4307" - }, - { - "label": "张家界市", - "value": "4308" - }, - { - "label": "益阳市", - "value": "4309" - }, - { - "label": "郴州市", - "value": "4310" - }, - { - "label": "永州市", - "value": "4311" - }, - { - "label": "怀化市", - "value": "4312" - }, - { - "label": "娄底市", - "value": "4313" - }, - { - "label": "湘西土家族苗族自治州", - "value": "4331" - } - ], - [{ - "label": "广州市", - "value": "4401" - }, - { - "label": "韶关市", - "value": "4402" - }, - { - "label": "深圳市", - "value": "4403" - }, - { - "label": "珠海市", - "value": "4404" - }, - { - "label": "汕头市", - "value": "4405" - }, - { - "label": "佛山市", - "value": "4406" - }, - { - "label": "江门市", - "value": "4407" - }, - { - "label": "湛江市", - "value": "4408" - }, - { - "label": "茂名市", - "value": "4409" - }, - { - "label": "肇庆市", - "value": "4412" - }, - { - "label": "惠州市", - "value": "4413" - }, - { - "label": "梅州市", - "value": "4414" - }, - { - "label": "汕尾市", - "value": "4415" - }, - { - "label": "河源市", - "value": "4416" - }, - { - "label": "阳江市", - "value": "4417" - }, - { - "label": "清远市", - "value": "4418" - }, - { - "label": "东莞市", - "value": "4419" - }, - { - "label": "中山市", - "value": "4420" - }, - { - "label": "潮州市", - "value": "4451" - }, - { - "label": "揭阳市", - "value": "4452" - }, - { - "label": "云浮市", - "value": "4453" - } - ], - [{ - "label": "南宁市", - "value": "4501" - }, - { - "label": "柳州市", - "value": "4502" - }, - { - "label": "桂林市", - "value": "4503" - }, - { - "label": "梧州市", - "value": "4504" - }, - { - "label": "北海市", - "value": "4505" - }, - { - "label": "防城港市", - "value": "4506" - }, - { - "label": "钦州市", - "value": "4507" - }, - { - "label": "贵港市", - "value": "4508" - }, - { - "label": "玉林市", - "value": "4509" - }, - { - "label": "百色市", - "value": "4510" - }, - { - "label": "贺州市", - "value": "4511" - }, - { - "label": "河池市", - "value": "4512" - }, - { - "label": "来宾市", - "value": "4513" - }, - { - "label": "崇左市", - "value": "4514" - } - ], - [{ - "label": "海口市", - "value": "4601" - }, - { - "label": "三亚市", - "value": "4602" - }, - { - "label": "三沙市", - "value": "4603" - }, - { - "label": "儋州市", - "value": "4604" - }, - { - "label": "省直辖县级行政区划", - "value": "4690" - } - ], - [{ - "label": "市辖区", - "value": "5001" - }, - { - "label": "县", - "value": "5002" - } - ], - [{ - "label": "成都市", - "value": "5101" - }, - { - "label": "自贡市", - "value": "5103" - }, - { - "label": "攀枝花市", - "value": "5104" - }, - { - "label": "泸州市", - "value": "5105" - }, - { - "label": "德阳市", - "value": "5106" - }, - { - "label": "绵阳市", - "value": "5107" - }, - { - "label": "广元市", - "value": "5108" - }, - { - "label": "遂宁市", - "value": "5109" - }, - { - "label": "内江市", - "value": "5110" - }, - { - "label": "乐山市", - "value": "5111" - }, - { - "label": "南充市", - "value": "5113" - }, - { - "label": "眉山市", - "value": "5114" - }, - { - "label": "宜宾市", - "value": "5115" - }, - { - "label": "广安市", - "value": "5116" - }, - { - "label": "达州市", - "value": "5117" - }, - { - "label": "雅安市", - "value": "5118" - }, - { - "label": "巴中市", - "value": "5119" - }, - { - "label": "资阳市", - "value": "5120" - }, - { - "label": "阿坝藏族羌族自治州", - "value": "5132" - }, - { - "label": "甘孜藏族自治州", - "value": "5133" - }, - { - "label": "凉山彝族自治州", - "value": "5134" - } - ], - [{ - "label": "贵阳市", - "value": "5201" - }, - { - "label": "六盘水市", - "value": "5202" - }, - { - "label": "遵义市", - "value": "5203" - }, - { - "label": "安顺市", - "value": "5204" - }, - { - "label": "毕节市", - "value": "5205" - }, - { - "label": "铜仁市", - "value": "5206" - }, - { - "label": "黔西南布依族苗族自治州", - "value": "5223" - }, - { - "label": "黔东南苗族侗族自治州", - "value": "5226" - }, - { - "label": "黔南布依族苗族自治州", - "value": "5227" - } - ], - [{ - "label": "昆明市", - "value": "5301" - }, - { - "label": "曲靖市", - "value": "5303" - }, - { - "label": "玉溪市", - "value": "5304" - }, - { - "label": "保山市", - "value": "5305" - }, - { - "label": "昭通市", - "value": "5306" - }, - { - "label": "丽江市", - "value": "5307" - }, - { - "label": "普洱市", - "value": "5308" - }, - { - "label": "临沧市", - "value": "5309" - }, - { - "label": "楚雄彝族自治州", - "value": "5323" - }, - { - "label": "红河哈尼族彝族自治州", - "value": "5325" - }, - { - "label": "文山壮族苗族自治州", - "value": "5326" - }, - { - "label": "西双版纳傣族自治州", - "value": "5328" - }, - { - "label": "大理白族自治州", - "value": "5329" - }, - { - "label": "德宏傣族景颇族自治州", - "value": "5331" - }, - { - "label": "怒江傈僳族自治州", - "value": "5333" - }, - { - "label": "迪庆藏族自治州", - "value": "5334" - } - ], - [{ - "label": "拉萨市", - "value": "5401" - }, - { - "label": "日喀则市", - "value": "5402" - }, - { - "label": "昌都市", - "value": "5403" - }, - { - "label": "林芝市", - "value": "5404" - }, - { - "label": "山南市", - "value": "5405" - }, - { - "label": "那曲地区", - "value": "5424" - }, - { - "label": "阿里地区", - "value": "5425" - } - ], - [{ - "label": "西安市", - "value": "6101" - }, - { - "label": "铜川市", - "value": "6102" - }, - { - "label": "宝鸡市", - "value": "6103" - }, - { - "label": "咸阳市", - "value": "6104" - }, - { - "label": "渭南市", - "value": "6105" - }, - { - "label": "延安市", - "value": "6106" - }, - { - "label": "汉中市", - "value": "6107" - }, - { - "label": "榆林市", - "value": "6108" - }, - { - "label": "安康市", - "value": "6109" - }, - { - "label": "商洛市", - "value": "6110" - } - ], - [{ - "label": "兰州市", - "value": "6201" - }, - { - "label": "嘉峪关市", - "value": "6202" - }, - { - "label": "金昌市", - "value": "6203" - }, - { - "label": "白银市", - "value": "6204" - }, - { - "label": "天水市", - "value": "6205" - }, - { - "label": "武威市", - "value": "6206" - }, - { - "label": "张掖市", - "value": "6207" - }, - { - "label": "平凉市", - "value": "6208" - }, - { - "label": "酒泉市", - "value": "6209" - }, - { - "label": "庆阳市", - "value": "6210" - }, - { - "label": "定西市", - "value": "6211" - }, - { - "label": "陇南市", - "value": "6212" - }, - { - "label": "临夏回族自治州", - "value": "6229" - }, - { - "label": "甘南藏族自治州", - "value": "6230" - } - ], - [{ - "label": "西宁市", - "value": "6301" - }, - { - "label": "海东市", - "value": "6302" - }, - { - "label": "海北藏族自治州", - "value": "6322" - }, - { - "label": "黄南藏族自治州", - "value": "6323" - }, - { - "label": "海南藏族自治州", - "value": "6325" - }, - { - "label": "果洛藏族自治州", - "value": "6326" - }, - { - "label": "玉树藏族自治州", - "value": "6327" - }, - { - "label": "海西蒙古族藏族自治州", - "value": "6328" - } - ], - [{ - "label": "银川市", - "value": "6401" - }, - { - "label": "石嘴山市", - "value": "6402" - }, - { - "label": "吴忠市", - "value": "6403" - }, - { - "label": "固原市", - "value": "6404" - }, - { - "label": "中卫市", - "value": "6405" - } - ], - [{ - "label": "乌鲁木齐市", - "value": "6501" - }, - { - "label": "克拉玛依市", - "value": "6502" - }, - { - "label": "吐鲁番市", - "value": "6504" - }, - { - "label": "哈密市", - "value": "6505" - }, - { - "label": "昌吉回族自治州", - "value": "6523" - }, - { - "label": "博尔塔拉蒙古自治州", - "value": "6527" - }, - { - "label": "巴音郭楞蒙古自治州", - "value": "6528" - }, - { - "label": "阿克苏地区", - "value": "6529" - }, - { - "label": "克孜勒苏柯尔克孜自治州", - "value": "6530" - }, - { - "label": "喀什地区", - "value": "6531" - }, - { - "label": "和田地区", - "value": "6532" - }, - { - "label": "伊犁哈萨克自治州", - "value": "6540" - }, - { - "label": "塔城地区", - "value": "6542" - }, - { - "label": "阿勒泰地区", - "value": "6543" - }, - { - "label": "自治区直辖县级行政区划", - "value": "6590" - } - ], - [{ - "label": "台北", - "value": "6601" - }, - { - "label": "高雄", - "value": "6602" - }, - { - "label": "基隆", - "value": "6603" - }, - { - "label": "台中", - "value": "6604" - }, - { - "label": "台南", - "value": "6605" - }, - { - "label": "新竹", - "value": "6606" - }, - { - "label": "嘉义", - "value": "6607" - }, - { - "label": "宜兰", - "value": "6608" - }, - { - "label": "桃园", - "value": "6609" - }, - { - "label": "苗栗", - "value": "6610" - }, - { - "label": "彰化", - "value": "6611" - }, - { - "label": "南投", - "value": "6612" - }, - { - "label": "云林", - "value": "6613" - }, - { - "label": "屏东", - "value": "6614" - }, - { - "label": "台东", - "value": "6615" - }, - { - "label": "花莲", - "value": "6616" - }, - { - "label": "澎湖", - "value": "6617" - } - ], - [{ - "label": "香港岛", - "value": "6701" - }, - { - "label": "九龙", - "value": "6702" - }, - { - "label": "新界", - "value": "6703" - } - ], - [{ - "label": "澳门半岛", - "value": "6801" - }, - { - "label": "氹仔岛", - "value": "6802" - }, - { - "label": "路环岛", - "value": "6803" - }, - { - "label": "路氹城", - "value": "6804" - } - ] -] -export default cityData; diff --git a/components/mpvue-citypicker/city-data/province.js b/components/mpvue-citypicker/city-data/province.js deleted file mode 100644 index 1bd680e8..00000000 --- a/components/mpvue-citypicker/city-data/province.js +++ /dev/null @@ -1,139 +0,0 @@ -/* eslint-disable */ -var provinceData = [{ - "label": "北京市", - "value": "11" - }, - { - "label": "天津市", - "value": "12" - }, - { - "label": "河北省", - "value": "13" - }, - { - "label": "山西省", - "value": "14" - }, - { - "label": "内蒙古自治区", - "value": "15" - }, - { - "label": "辽宁省", - "value": "21" - }, - { - "label": "吉林省", - "value": "22" - }, - { - "label": "黑龙江省", - "value": "23" - }, - { - "label": "上海市", - "value": "31" - }, - { - "label": "江苏省", - "value": "32" - }, - { - "label": "浙江省", - "value": "33" - }, - { - "label": "安徽省", - "value": "34" - }, - { - "label": "福建省", - "value": "35" - }, - { - "label": "江西省", - "value": "36" - }, - { - "label": "山东省", - "value": "37" - }, - { - "label": "河南省", - "value": "41" - }, - { - "label": "湖北省", - "value": "42" - }, - { - "label": "湖南省", - "value": "43" - }, - { - "label": "广东省", - "value": "44" - }, - { - "label": "广西壮族自治区", - "value": "45" - }, - { - "label": "海南省", - "value": "46" - }, - { - "label": "重庆市", - "value": "50" - }, - { - "label": "四川省", - "value": "51" - }, - { - "label": "贵州省", - "value": "52" - }, - { - "label": "云南省", - "value": "53" - }, - { - "label": "西藏自治区", - "value": "54" - }, - { - "label": "陕西省", - "value": "61" - }, - { - "label": "甘肃省", - "value": "62" - }, - { - "label": "青海省", - "value": "63" - }, - { - "label": "宁夏回族自治区", - "value": "64" - }, - { - "label": "新疆维吾尔自治区", - "value": "65" - }, - { - "label": "台湾", - "value": "66" - }, - { - "label": "香港", - "value": "67" - }, - { - "label": "澳门", - "value": "68" - } -] -export default provinceData; diff --git a/components/mpvue-citypicker/mpvueCityPicker.vue b/components/mpvue-citypicker/mpvueCityPicker.vue deleted file mode 100644 index ec02c8bc..00000000 --- a/components/mpvue-citypicker/mpvueCityPicker.vue +++ /dev/null @@ -1,230 +0,0 @@ - - - - - diff --git a/components/mpvue-echarts/src/echarts.vue b/components/mpvue-echarts/src/echarts.vue deleted file mode 100644 index bc2bfab9..00000000 --- a/components/mpvue-echarts/src/echarts.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - - - diff --git a/components/mpvue-echarts/src/wx-canvas.js b/components/mpvue-echarts/src/wx-canvas.js deleted file mode 100644 index ef588931..00000000 --- a/components/mpvue-echarts/src/wx-canvas.js +++ /dev/null @@ -1,73 +0,0 @@ -export default class WxCanvas { - constructor(ctx, canvasId) { - this.ctx = ctx; - this.canvasId = canvasId; - this.chart = null; - - WxCanvas.initStyle(ctx); - this.initEvent(); - } - - getContext(contextType) { - return contextType === '2d' ? this.ctx : null; - } - - setChart(chart) { - this.chart = chart; - } - - attachEvent() { - // noop - } - - detachEvent() { - // noop - } - - static initStyle(ctx) { - const styles = ['fillStyle', 'strokeStyle', 'globalAlpha', - 'textAlign', 'textBaseAlign', 'shadow', 'lineWidth', - 'lineCap', 'lineJoin', 'lineDash', 'miterLimit', 'fontSize']; - - styles.forEach((style) => { - Object.defineProperty(ctx, style, { - set: (value) => { - if ((style !== 'fillStyle' && style !== 'strokeStyle') - || (value !== 'none' && value !== null) - ) { - ctx[`set${style.charAt(0).toUpperCase()}${style.slice(1)}`](value); - } - }, - }); - }); - - ctx.createRadialGradient = () => ctx.createCircularGradient(arguments); - } - - initEvent() { - this.event = {}; - const eventNames = [{ - wxName: 'touchStart', - ecName: 'mousedown', - }, { - wxName: 'touchMove', - ecName: 'mousemove', - }, { - wxName: 'touchEnd', - ecName: 'mouseup', - }, { - wxName: 'touchEnd', - ecName: 'click', - }]; - - eventNames.forEach((name) => { - this.event[name.wxName] = (e) => { - const touch = e.mp.touches[0]; - this.chart._zr.handler.dispatch(name.ecName, { - zrX: name.wxName === 'tap' ? touch.clientX : touch.x, - zrY: name.wxName === 'tap' ? touch.clientY : touch.y, - }); - }; - }); - } -} diff --git a/components/mpvue-picker/mpvuePicker.vue b/components/mpvue-picker/mpvuePicker.vue deleted file mode 100644 index dd988296..00000000 --- a/components/mpvue-picker/mpvuePicker.vue +++ /dev/null @@ -1,463 +0,0 @@ - - - - - diff --git a/components/mpvueGestureLock/gestureLock.js b/components/mpvueGestureLock/gestureLock.js deleted file mode 100644 index 55d5f745..00000000 --- a/components/mpvueGestureLock/gestureLock.js +++ /dev/null @@ -1,175 +0,0 @@ -class GestureLock { - - constructor(containerWidth, cycleRadius) { - this.containerWidth = containerWidth; // 容器宽度 - this.cycleRadius = cycleRadius; // 圆的半径 - - this.circleArray = []; // 全部圆的对象数组 - this.checkPoints = []; // 选中的圆的对象数组 - this.lineArray = []; // 已激活锁之间的线段数组 - this.lastCheckPoint = 0; // 最后一个激活的锁 - this.offsetX = 0; // 容器的 X 偏移 - this.offsetY = 0; // 容器的 Y 偏移 - this.activeLine = {}; // 最后一个激活的锁与当前位置之间的线段 - - this.windowWidth = wx.getSystemInfoSync().windowWidth; // 窗口大小(用于rpx 和 px 转换) - - this.initCircleArray(); - } - - // 初始化 画布上的 9个圆 - initCircleArray() { - const cycleMargin = (this.containerWidth - 6 * this.cycleRadius) / 6; - let count = 0; - for (let i = 0; i < 3; i++) { - for (let j = 0; j < 3; j++) { - count++; - this.circleArray.push({ - count: count, - x: this.rpxTopx((cycleMargin + this.cycleRadius) * (j * 2 + 1)), - y: this.rpxTopx((cycleMargin + this.cycleRadius) * (i * 2 + 1)), - radius: this.rpxTopx(this.cycleRadius), - check: false, - style: { - left: (cycleMargin + this.cycleRadius) * (j * 2 + 1) - this.cycleRadius + 'rpx', - top: (cycleMargin + this.cycleRadius) * (i * 2 + 1) - this.cycleRadius + 'rpx', - width: this.cycleRadius * 2 + 'rpx', - } - }); - } - } - } - - onTouchStart(e) { - this.setOffset(e); - this.checkTouch({ - x: e.touches[0].pageX - this.offsetX, - y: e.touches[0].pageY - this.offsetY - }); - } - - onTouchMove(e) { - this.moveDraw(e) - } - - onTouchEnd(e) { - const checkPoints = this.checkPoints; - this.reset(); - return checkPoints; - } - - // 初始化 偏移量 - setOffset(e) { - this.offsetX = e.currentTarget.offsetLeft; - this.offsetY = e.currentTarget.offsetTop; - } - - // 检测当时 触摸位置是否位于 锁上 - checkTouch({ - x, - y - }) { - for (let i = 0; i < this.circleArray.length; i++) { - let point = this.circleArray[i]; - if (this.isPointInCycle(x, y, point.x, point.y, point.radius)) { - if (!point.check) { - this.checkPoints.push(point.count); - if (this.lastCheckPoint != 0) { - // 已激活锁之间的线段 - const line = this.drawLine(this.lastCheckPoint, point); - this.lineArray.push(line); - } - this.lastCheckPoint = point; - } - point.check = true; - return; - } - } - } - - // 画线 - 返回 样式 对象 - drawLine(start, end) { - const width = this.getPointDis(start.x, start.y, end.x, end.y); - const rotate = this.getAngle(start, end); - - return { - activeLeft: start.x + 'px', - activeTop: start.y + 'px', - activeWidth: width + 'px', - activeRotate: rotate + 'deg' - } - - } - - // 获取 画线的 角度 - getAngle(start, end) { - var diff_x = end.x - start.x, - diff_y = end.y - start.y; - if (diff_x >= 0) { - return 360 * Math.atan(diff_y / diff_x) / (2 * Math.PI); - } else { - return 180 + 360 * Math.atan(diff_y / diff_x) / (2 * Math.PI); - } - } - - // 判断 当前点是否位于 锁内 - isPointInCycle(x, y, circleX, circleY, radius) { - return (this.getPointDis(x, y, circleX, circleY) < radius) ? true : false; - } - - // 获取两点之间距离 - getPointDis(ax, ay, bx, by) { - return Math.sqrt(Math.pow(ax - bx, 2) + Math.pow(ay - by, 2)); - } - - // 移动 绘制 - moveDraw(e) { - // 画经过的圆 - const x = e.touches[0].pageX - this.offsetX; - const y = e.touches[0].pageY - this.offsetY; - this.checkTouch({ - x, - y - }); - - // 画 最后一个激活的锁与当前位置之间的线段 - this.activeLine = this.drawLine(this.lastCheckPoint, { - x, - y - }); - } - - // 使 画布 恢复初始状态 - reset() { - this.circleArray.forEach((item) => { - item.check = false; - }); - this.checkPoints = []; - this.lineArray = []; - this.activeLine = {}; - this.lastCheckPoint = 0; - } - - - // 获取 最后一个激活的锁与当前位置之间的线段 - getActiveLine() { - return this.activeLine; - } - - // 获取 圆对象数组 - getCycleArray() { - return this.circleArray; - } - - // 获取 已激活锁之间的线段 - getLineArray() { - return this.lineArray; - } - - // 将 RPX 转换成 PX - rpxTopx(rpx) { - return rpx / 750 * this.windowWidth; - } -} - -export default GestureLock; diff --git a/components/mpvueGestureLock/index.vue b/components/mpvueGestureLock/index.vue deleted file mode 100644 index 32bbc398..00000000 --- a/components/mpvueGestureLock/index.vue +++ /dev/null @@ -1,138 +0,0 @@ - - - - diff --git a/components/page-foot.vue b/components/page-foot/page-foot.vue similarity index 87% rename from components/page-foot.vue rename to components/page-foot/page-foot.vue index f9a41737..23cbd2d2 100644 --- a/components/page-foot.vue +++ b/components/page-foot/page-foot.vue @@ -1,7 +1,7 @@ diff --git a/components/page-head.vue b/components/page-head/page-head.vue similarity index 62% rename from components/page-head.vue rename to components/page-head/page-head.vue index c2780647..4fc0508a 100644 --- a/components/page-head.vue +++ b/components/page-head/page-head.vue @@ -1,6 +1,6 @@ + diff --git a/components/privacy-dialog/privacy-dialog.vue b/components/privacy-dialog/privacy-dialog.vue new file mode 100644 index 00000000..b0565017 --- /dev/null +++ b/components/privacy-dialog/privacy-dialog.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/components/uLink.vue b/components/u-link/u-link.vue similarity index 100% rename from components/uLink.vue rename to components/u-link/u-link.vue diff --git a/components/uni-badge/uni-badge.vue b/components/uni-badge/uni-badge.vue deleted file mode 100644 index 50a51f21..00000000 --- a/components/uni-badge/uni-badge.vue +++ /dev/null @@ -1,146 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-card/uni-card.vue b/components/uni-card/uni-card.vue deleted file mode 100644 index 8de596f7..00000000 --- a/components/uni-card/uni-card.vue +++ /dev/null @@ -1,298 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-collapse-item/uni-collapse-item.vue b/components/uni-collapse-item/uni-collapse-item.vue deleted file mode 100644 index 0ba9c3a8..00000000 --- a/components/uni-collapse-item/uni-collapse-item.vue +++ /dev/null @@ -1,217 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-collapse/uni-collapse.vue b/components/uni-collapse/uni-collapse.vue deleted file mode 100644 index 1457eb43..00000000 --- a/components/uni-collapse/uni-collapse.vue +++ /dev/null @@ -1,59 +0,0 @@ - - - \ No newline at end of file diff --git a/components/uni-combox/uni-combox.vue b/components/uni-combox/uni-combox.vue deleted file mode 100644 index 39cf62aa..00000000 --- a/components/uni-combox/uni-combox.vue +++ /dev/null @@ -1,202 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-countdown/uni-countdown.vue b/components/uni-countdown/uni-countdown.vue deleted file mode 100644 index 5ebf5b82..00000000 --- a/components/uni-countdown/uni-countdown.vue +++ /dev/null @@ -1,200 +0,0 @@ - - - \ No newline at end of file diff --git a/components/uni-icons/icons.js b/components/uni-icons/icons.js deleted file mode 100644 index 5242f227..00000000 --- a/components/uni-icons/icons.js +++ /dev/null @@ -1,132 +0,0 @@ -export default { - "pulldown": "\ue588", - "refreshempty": "\ue461", - "back": "\ue471", - "forward": "\ue470", - "more": "\ue507", - "more-filled": "\ue537", - "scan": "\ue612", - "qq": "\ue264", - "weibo": "\ue260", - "weixin": "\ue261", - "pengyouquan": "\ue262", - "loop": "\ue565", - "refresh": "\ue407", - "refresh-filled": "\ue437", - "arrowthindown": "\ue585", - "arrowthinleft": "\ue586", - "arrowthinright": "\ue587", - "arrowthinup": "\ue584", - "undo-filled": "\ue7d6", - "undo": "\ue406", - "redo": "\ue405", - "redo-filled": "\ue7d9", - "bars": "\ue563", - "chatboxes": "\ue203", - "camera": "\ue301", - "chatboxes-filled": "\ue233", - "camera-filled": "\ue7ef", - "cart-filled": "\ue7f4", - "cart": "\ue7f5", - "checkbox-filled": "\ue442", - "checkbox": "\ue7fa", - "arrowleft": "\ue582", - "arrowdown": "\ue581", - "arrowright": "\ue583", - "smallcircle-filled": "\ue801", - "arrowup": "\ue580", - "circle": "\ue411", - "eye-filled": "\ue568", - "eye-slash-filled": "\ue822", - "eye-slash": "\ue823", - "eye": "\ue824", - "flag-filled": "\ue825", - "flag": "\ue508", - "gear-filled": "\ue532", - "reload": "\ue462", - "gear": "\ue502", - "hand-thumbsdown-filled": "\ue83b", - "hand-thumbsdown": "\ue83c", - "hand-thumbsup-filled": "\ue83d", - "heart-filled": "\ue83e", - "hand-thumbsup": "\ue83f", - "heart": "\ue840", - "home": "\ue500", - "info": "\ue504", - "home-filled": "\ue530", - "info-filled": "\ue534", - "circle-filled": "\ue441", - "chat-filled": "\ue847", - "chat": "\ue263", - "mail-open-filled": "\ue84d", - "email-filled": "\ue231", - "mail-open": "\ue84e", - "email": "\ue201", - "checkmarkempty": "\ue472", - "list": "\ue562", - "locked-filled": "\ue856", - "locked": "\ue506", - "map-filled": "\ue85c", - "map-pin": "\ue85e", - "map-pin-ellipse": "\ue864", - "map": "\ue364", - "minus-filled": "\ue440", - "mic-filled": "\ue332", - "minus": "\ue410", - "micoff": "\ue360", - "mic": "\ue302", - "clear": "\ue434", - "smallcircle": "\ue868", - "close": "\ue404", - "closeempty": "\ue460", - "paperclip": "\ue567", - "paperplane": "\ue503", - "paperplane-filled": "\ue86e", - "person-filled": "\ue131", - "contact-filled": "\ue130", - "person": "\ue101", - "contact": "\ue100", - "images-filled": "\ue87a", - "phone": "\ue200", - "images": "\ue87b", - "image": "\ue363", - "image-filled": "\ue877", - "location-filled": "\ue333", - "location": "\ue303", - "plus-filled": "\ue439", - "plus": "\ue409", - "plusempty": "\ue468", - "help-filled": "\ue535", - "help": "\ue505", - "navigate-filled": "\ue884", - "navigate": "\ue501", - "mic-slash-filled": "\ue892", - "search": "\ue466", - "settings": "\ue560", - "sound": "\ue590", - "sound-filled": "\ue8a1", - "spinner-cycle": "\ue465", - "download-filled": "\ue8a4", - "personadd-filled": "\ue132", - "videocam-filled": "\ue8af", - "personadd": "\ue102", - "upload": "\ue402", - "upload-filled": "\ue8b1", - "starhalf": "\ue463", - "star-filled": "\ue438", - "star": "\ue408", - "trash": "\ue401", - "phone-filled": "\ue230", - "compose": "\ue400", - "videocam": "\ue300", - "trash-filled": "\ue8dc", - "download": "\ue403", - "chatbubble-filled": "\ue232", - "chatbubble": "\ue202", - "cloud-download": "\ue8e4", - "cloud-upload-filled": "\ue8e5", - "cloud-upload": "\ue8e6", - "cloud-download-filled": "\ue8e9", - "headphones":"\ue8bf", - "shop":"\ue609" -} diff --git a/components/uni-icons/uni-icons.vue b/components/uni-icons/uni-icons.vue deleted file mode 100644 index 23099fef..00000000 --- a/components/uni-icons/uni-icons.vue +++ /dev/null @@ -1,67 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-link/uni-link.vue b/components/uni-link/uni-link.vue deleted file mode 100644 index 785144f1..00000000 --- a/components/uni-link/uni-link.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-list-item/uni-list-item.vue b/components/uni-list-item/uni-list-item.vue deleted file mode 100644 index 60108ac4..00000000 --- a/components/uni-list-item/uni-list-item.vue +++ /dev/null @@ -1,270 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-list/uni-list.vue b/components/uni-list/uni-list.vue deleted file mode 100644 index f4db8758..00000000 --- a/components/uni-list/uni-list.vue +++ /dev/null @@ -1,78 +0,0 @@ - - - - \ No newline at end of file diff --git a/components/uni-list/uni-refresh.vue b/components/uni-list/uni-refresh.vue deleted file mode 100644 index 85637091..00000000 --- a/components/uni-list/uni-refresh.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-load-more/uni-load-more.vue b/components/uni-load-more/uni-load-more.vue deleted file mode 100644 index 53ad880e..00000000 --- a/components/uni-load-more/uni-load-more.vue +++ /dev/null @@ -1,364 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-nav-bar/uni-nav-bar.vue b/components/uni-nav-bar/uni-nav-bar.vue deleted file mode 100644 index 3b076406..00000000 --- a/components/uni-nav-bar/uni-nav-bar.vue +++ /dev/null @@ -1,235 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-number-box/uni-number-box.vue b/components/uni-number-box/uni-number-box.vue deleted file mode 100644 index 6a57edd8..00000000 --- a/components/uni-number-box/uni-number-box.vue +++ /dev/null @@ -1,197 +0,0 @@ - - - \ No newline at end of file diff --git a/components/uni-pagination/uni-pagination.vue b/components/uni-pagination/uni-pagination.vue deleted file mode 100644 index 24707996..00000000 --- a/components/uni-pagination/uni-pagination.vue +++ /dev/null @@ -1,200 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-popup/uni-popup.vue b/components/uni-popup/uni-popup.vue deleted file mode 100644 index ad764560..00000000 --- a/components/uni-popup/uni-popup.vue +++ /dev/null @@ -1,264 +0,0 @@ - - - - \ No newline at end of file diff --git a/components/uni-rate/uni-rate.vue b/components/uni-rate/uni-rate.vue deleted file mode 100644 index 7259f853..00000000 --- a/components/uni-rate/uni-rate.vue +++ /dev/null @@ -1,157 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-search-bar/uni-search-bar.vue b/components/uni-search-bar/uni-search-bar.vue deleted file mode 100644 index 9d2bc362..00000000 --- a/components/uni-search-bar/uni-search-bar.vue +++ /dev/null @@ -1,203 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-section/uni-section.vue b/components/uni-section/uni-section.vue deleted file mode 100644 index 14386dd8..00000000 --- a/components/uni-section/uni-section.vue +++ /dev/null @@ -1,136 +0,0 @@ - - - - \ No newline at end of file diff --git a/components/uni-status-bar/uni-status-bar.vue b/components/uni-status-bar/uni-status-bar.vue deleted file mode 100644 index 34a171fd..00000000 --- a/components/uni-status-bar/uni-status-bar.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-swipe-action-item/bindingx.js b/components/uni-swipe-action-item/bindingx.js deleted file mode 100644 index 59c592e4..00000000 --- a/components/uni-swipe-action-item/bindingx.js +++ /dev/null @@ -1,245 +0,0 @@ -const BindingX = uni.requireNativePlugin('bindingx'); -const dom = uni.requireNativePlugin('dom'); -const animation = uni.requireNativePlugin('animation'); - -export default { - data() { - return { - right: 0, - button: [], - preventGesture: false - } - }, - - watch: { - show(newVal) { - if (!this.position || JSON.stringify(this.position) === '{}') return; - if (this.autoClose) return - if (this.isInAnimation) return - if (newVal) { - this.open() - } else { - this.close() - } - }, - }, - created() { - if (this.swipeaction.children !== undefined) { - this.swipeaction.children.push(this) - } - }, - mounted() { - this.boxSelector = this.getEl(this.$refs['selector-box-hock']); - this.selector = this.getEl(this.$refs['selector-content-hock']); - this.buttonSelector = this.getEl(this.$refs['selector-button-hock']); - this.position = {} - this.x = 0 - setTimeout(() => { - this.getSelectorQuery() - }, 200) - }, - beforeDestroy() { - if (this.timing) { - BindingX.unbind({ - token: this.timing.token, - eventType: 'timing' - }) - } - if (this.eventpan) { - BindingX.unbind({ - token: this.eventpan.token, - eventType: 'pan' - }) - } - this.swipeaction.children.forEach((item, index) => { - if (item === this) { - this.swipeaction.children.splice(index, 1) - } - }) - }, - methods: { - onClick(index, item) { - this.$emit('click', { - content: item, - index - }) - }, - touchstart(e) { - if (this.isInAnimation) return - if (this.stop) return - this.stop = true - if (this.autoClose) { - this.swipeaction.closeOther(this) - } - let endWidth = this.right - let boxStep = `(x+${this.x})` - let pageX = `${boxStep}> ${-endWidth} && ${boxStep} < 0?${boxStep}:(x+${this.x} < 0? ${-endWidth}:0)` - - let props = [{ - element: this.selector, - property: 'transform.translateX', - expression: pageX - }] - - let left = 0 - for (let i = 0; i < this.options.length; i++) { - let buttonSelectors = this.getEl(this.$refs['button-hock'][i]); - if (this.button.length === 0 || !this.button[i] || !this.button[i].width) return - let moveMix = endWidth - left - left += this.button[i].width - let step = `(${this.x}+x)/${endWidth}` - let moveX = `(${step}) * ${moveMix}` - let pageButtonX = `${moveX}&& (x+${this.x} > ${-endWidth})?${moveX}:${-moveMix}` - props.push({ - element: buttonSelectors, - property: 'transform.translateX', - expression: pageButtonX - }) - } - - this.eventpan = this._bind(this.boxSelector, props, 'pan', (e) => { - if (e.state === 'end') { - this.x = e.deltaX + this.x; - if (this.x < -endWidth) { - this.x = -endWidth - } - if (this.x > 0) { - this.x = 0 - } - this.stop = false - this.bindTiming(); - } - }) - }, - touchend(e) { - this.$nextTick(() => { - if (this.isopen && !this.isDrag && !this.isInAnimation) { - this.close() - } - }) - }, - bindTiming() { - if (this.isopen) { - this.move(this.x, -this.right) - } else { - this.move(this.x, -40) - } - }, - move(left, value) { - if (left >= value) { - this.close() - } else { - this.open() - } - }, - /** - * 开启swipe - */ - open() { - this.animation(true) - }, - /** - * 关闭swipe - */ - close() { - this.animation(false) - }, - /** - * 开启关闭动画 - * @param {Object} type - */ - animation(type) { - this.isDrag = true - let endWidth = this.right - let time = 200 - this.isInAnimation = true; - - let exit = `t>${time}`; - let translate_x_expression = `easeOutExpo(t,${this.x},${type?(-endWidth-this.x):(-this.x)},${time})` - let props = [{ - element: this.selector, - property: 'transform.translateX', - expression: translate_x_expression - }] - - let left = 0 - for (let i = 0; i < this.options.length; i++) { - let buttonSelectors = this.getEl(this.$refs['button-hock'][i]); - if (this.button.length === 0 || !this.button[i] || !this.button[i].width) return - let moveMix = endWidth - left - left += this.button[i].width - let step = `${this.x}/${endWidth}` - let moveX = `(${step}) * ${moveMix}` - let pageButtonX = `easeOutExpo(t,${moveX},${type ? -moveMix + '-' + moveX: 0 + '-' + moveX},${time})` - props.push({ - element: buttonSelectors, - property: 'transform.translateX', - expression: pageButtonX - }) - } - - this.timing = BindingX.bind({ - eventType: 'timing', - exitExpression: exit, - props: props - }, (e) => { - if (e.state === 'end' || e.state === 'exit') { - this.x = type ? -endWidth : 0 - this.isInAnimation = false; - - this.isopen = this.isopen || false - if (this.isopen !== type) { - this.$emit('change', type) - } - this.isopen = type - this.isDrag = false - } - }); - }, - /** - * 绑定 BindingX - * @param {Object} anchor - * @param {Object} props - * @param {Object} fn - */ - _bind(anchor, props, eventType, fn) { - return BindingX.bind({ - anchor, - eventType, - props - }, (e) => { - typeof(fn) === 'function' && fn(e) - }); - }, - /** - * 获取ref - * @param {Object} el - */ - getEl(el) { - return el.ref - }, - /** - * 获取节点信息 - */ - getSelectorQuery() { - dom.getComponentRect(this.$refs['selector-content-hock'], (data) => { - if (this.position.content) return - this.position.content = data.size - }) - for (let i = 0; i < this.options.length; i++) { - dom.getComponentRect(this.$refs['button-hock'][i], (data) => { - if (!this.button) { - this.button = [] - } - if (this.options.length === this.button.length) return - this.button.push(data.size) - this.right += data.size.width - if (this.autoClose) return - if (this.show) { - this.open() - } - }) - } - } - } -} diff --git a/components/uni-swipe-action-item/index.wxs b/components/uni-swipe-action-item/index.wxs deleted file mode 100644 index ab8e368c..00000000 --- a/components/uni-swipe-action-item/index.wxs +++ /dev/null @@ -1,203 +0,0 @@ -/** - * 监听页面内值的变化,主要用于动态开关swipe-action - * @param {Object} newValue - * @param {Object} oldValue - * @param {Object} ownerInstance - * @param {Object} instance - */ -function sizeReady(newValue, oldValue, ownerInstance, instance) { - var state = instance.getState() - state.position = JSON.parse(newValue) - if (!state.position || state.position.length === 0) return - var show = state.position[0].show - state.left = state.left || state.position[0].left; - // 通过用户变量,开启或关闭 - if (show) { - openState(true, instance, ownerInstance) - } else { - openState(false, instance, ownerInstance) - } -} - -/** - * 开始触摸操作 - * @param {Object} e - * @param {Object} ins - */ -function touchstart(e, ins) { - var instance = e.instance; - var state = instance.getState(); - var pageX = e.touches[0].pageX; - // 开始触摸时移除动画类 - instance.removeClass('ani'); - var owner = ins.selectAllComponents('.button-hock') - for (var i = 0; i < owner.length; i++) { - owner[i].removeClass('ani'); - } - // state.position = JSON.parse(instance.getDataset().position); - state.left = state.left || state.position[0].left; - // 获取最终按钮组的宽度 - state.width = pageX - state.left; - ins.callMethod('closeSwipe') -} - -/** - * 开始滑动操作 - * @param {Object} e - * @param {Object} ownerInstance - */ -function touchmove(e, ownerInstance) { - var instance = e.instance; - var disabled = instance.getDataset().disabled - var state = instance.getState() - // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 - disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; - - if (disabled) return - var pageX = e.touches[0].pageX; - move(pageX - state.width, instance, ownerInstance) -} - -/** - * 结束触摸操作 - * @param {Object} e - * @param {Object} ownerInstance - */ -function touchend(e, ownerInstance) { - var instance = e.instance; - var disabled = instance.getDataset().disabled - var state = instance.getState() - - // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 - disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; - - if (disabled) return - // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 - moveDirection(state.left, -40, instance, ownerInstance) -} - -/** - * 设置移动距离 - * @param {Object} value - * @param {Object} instance - * @param {Object} ownerInstance - */ -function move(value, instance, ownerInstance) { - var state = instance.getState() - // 获取可滑动范围 - var x = Math.max(-state.position[1].width, Math.min((value), 0)); - state.left = x; - instance.setStyle({ - transform: 'translateX(' + x + 'px)', - '-webkit-transform': 'translateX(' + x + 'px)' - }) - // 折叠按钮动画 - buttonFold(x, instance, ownerInstance) -} - -/** - * 移动方向判断 - * @param {Object} left - * @param {Object} value - * @param {Object} ownerInstance - * @param {Object} ins - */ -function moveDirection(left, value, ins, ownerInstance) { - var state = ins.getState() - var position = state.position - var isopen = state.isopen - if (!position[1].width) { - openState(false, ins, ownerInstance) - return - } - // 如果已经是打开状态,进行判断是否关闭,还是保留打开状态 - if (isopen) { - if (-left <= position[1].width) { - openState(false, ins, ownerInstance) - } else { - openState(true, ins, ownerInstance) - } - return - } - // 如果是关闭状态,进行判断是否打开,还是保留关闭状态 - if (left <= value) { - openState(true, ins, ownerInstance) - } else { - openState(false, ins, ownerInstance) - } -} - -/** - * 设置按钮移动距离 - * @param {Object} value - * @param {Object} instance - * @param {Object} ownerInstance - */ -function buttonFold(value, instance, ownerInstance) { - var ins = ownerInstance.selectAllComponents('.button-hock'); - var state = instance.getState(); - var position = state.position; - var arr = []; - var w = 0; - for (var i = 0; i < ins.length; i++) { - if (!ins[i].getDataset().button) return - var btnData = JSON.parse(ins[i].getDataset().button) - - // fix by mehaotian TODO 在 app-vue 中,字符串转对象,需要转两次,这里先这么兼容 - if (typeof(btnData) === 'string') { - btnData = JSON.parse(btnData) - } - - var button = btnData[i] && btnData[i].width || 0 - w += button - arr.push(-w) - // 动态计算按钮组每个按钮的折叠动画移动距离 - var distance = arr[i - 1] + value * (arr[i - 1] / position[1].width) - if (i != 0) { - ins[i].setStyle({ - transform: 'translateX(' + distance + 'px)', - }) - } - } -} - -/** - * 开启状态 - * @param {Boolean} type - * @param {Object} ins - * @param {Object} ownerInstance - */ -function openState(type, ins, ownerInstance) { - var state = ins.getState() - var position = state.position - if (state.isopen === undefined) { - state.isopen = false - } - // 只有状态有改变才会通知页面改变状态 - if (state.isopen !== type) { - // 通知页面,已经打开 - ownerInstance.callMethod('change', { - open: type - }) - } - // 设置打开和移动状态 - state.isopen = type - - - // 添加动画类 - ins.addClass('ani'); - var owner = ownerInstance.selectAllComponents('.button-hock') - for (var i = 0; i < owner.length; i++) { - owner[i].addClass('ani'); - } - // 设置最终移动位置 - move(type ? -position[1].width : 0, ins, ownerInstance) - -} - -module.exports = { - sizeReady: sizeReady, - touchstart: touchstart, - touchmove: touchmove, - touchend: touchend -} diff --git a/components/uni-swipe-action-item/mp.js b/components/uni-swipe-action-item/mp.js deleted file mode 100644 index a8c93aa6..00000000 --- a/components/uni-swipe-action-item/mp.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - data() { - return { - position: [], - button: [] - } - }, - computed: { - pos() { - return JSON.stringify(this.position) - }, - btn() { - return JSON.stringify(this.button) - } - }, - watch: { - show(newVal) { - if (this.autoClose) return - let valueObj = this.position[0] - if (!valueObj) { - this.init() - return - } - valueObj.show = newVal - this.$set(this.position, 0, valueObj) - } - }, - created() { - if (this.swipeaction.children !== undefined) { - this.swipeaction.children.push(this) - } - }, - mounted() { - this.init() - - }, - beforeDestroy() { - this.swipeaction.children.forEach((item, index) => { - if (item === this) { - this.swipeaction.children.splice(index, 1) - } - }) - }, - methods: { - init() { - - setTimeout(() => { - this.getSize() - this.getButtonSize() - }, 50) - }, - closeSwipe(e) { - if (!this.autoClose) return - this.swipeaction.closeOther(this) - }, - - change(e) { - this.$emit('change', e.open) - let valueObj = this.position[0] - if (valueObj.show !== e.open) { - valueObj.show = e.open - this.$set(this.position, 0, valueObj) - } - }, - onClick(index, item) { - this.$emit('click', { - content: item, - index - }) - }, - getSize() { - const views = uni.createSelectorQuery().in(this) - views - .selectAll('.selector-query-hock') - .boundingClientRect(data => { - if (this.autoClose) { - data[0].show = false - } else { - data[0].show = this.show - } - this.position = data - }) - .exec() - }, - getButtonSize() { - const views = uni.createSelectorQuery().in(this) - views - .selectAll('.button-hock') - .boundingClientRect(data => { - this.button = data - }) - .exec() - } - } -} diff --git a/components/uni-swipe-action-item/mpalipay.js b/components/uni-swipe-action-item/mpalipay.js deleted file mode 100644 index 8537b248..00000000 --- a/components/uni-swipe-action-item/mpalipay.js +++ /dev/null @@ -1,160 +0,0 @@ -export default { - data() { - return { - isshow: false, - viewWidth: 0, - buttonWidth: 0, - disabledView: false, - x: 0, - transition: false - } - }, - watch: { - show(newVal) { - if (this.autoClose) return - if (newVal) { - this.open() - } else { - this.close() - } - }, - }, - created() { - if (this.swipeaction.children !== undefined) { - this.swipeaction.children.push(this) - } - }, - beforeDestroy() { - this.swipeaction.children.forEach((item, index) => { - if (item === this) { - this.swipeaction.children.splice(index, 1) - } - }) - }, - mounted() { - this.isopen = false - this.transition = true - setTimeout(() => { - this.getQuerySelect() - }, 50) - - }, - methods: { - onClick(index, item) { - this.$emit('click', { - content: item, - index - }) - }, - touchstart(e) { - let { - pageX, - pageY - } = e.changedTouches[0] - this.transition = false - this.startX = pageX - if (this.autoClose) { - this.swipeaction.closeOther(this) - } - }, - touchmove(e) { - let { - pageX, - } = e.changedTouches[0] - this.slide = this.getSlide(pageX) - if (this.slide === 0) { - this.disabledView = false - } - - }, - touchend(e) { - this.stop = false - this.transition = true - if (this.isopen) { - if (this.moveX === -this.buttonWidth) { - this.close() - return - } - this.move() - } else { - if (this.moveX === 0) { - this.close() - return - } - this.move() - } - }, - open() { - this.x = this.moveX - this.$nextTick(() => { - this.x = -this.buttonWidth - this.moveX = this.x - - if(!this.isopen){ - this.isopen = true - this.$emit('change', true) - } - }) - }, - close() { - this.x = this.moveX - this.$nextTick(() => { - this.x = 0 - this.moveX = this.x - if(this.isopen){ - this.isopen = false - this.$emit('change', false) - } - }) - }, - move() { - if (this.slide === 0) { - this.open() - } else { - this.close() - } - }, - onChange(e) { - let x = e.detail.x - this.moveX = x - if (x >= this.buttonWidth) { - this.disabledView = true - this.$nextTick(() => { - this.x = this.buttonWidth - }) - } - }, - getSlide(x) { - if (x >= this.startX) { - this.startX = x - return 1 - } else { - this.startX = x - return 0 - } - - }, - getQuerySelect() { - const query = uni.createSelectorQuery().in(this); - query.selectAll('.viewWidth-hook').boundingClientRect(data => { - - this.viewWidth = data[0].width - this.buttonWidth = data[1].width - this.transition = false - this.$nextTick(() => { - this.transition = true - }) - - if (!this.buttonWidth) { - this.disabledView = true - } - - if (this.autoClose) return - if (this.show) { - this.open() - } - }).exec(); - - } - } -} diff --git a/components/uni-swipe-action-item/mpother.js b/components/uni-swipe-action-item/mpother.js deleted file mode 100644 index ae97ba67..00000000 --- a/components/uni-swipe-action-item/mpother.js +++ /dev/null @@ -1,158 +0,0 @@ -// #ifdef APP-NVUE -const dom = weex.requireModule('dom'); -// #endif -export default { - data() { - return { - uniShow: false, - left: 0 - } - }, - computed: { - moveLeft() { - return `translateX(${this.left}px)` - } - }, - watch: { - show(newVal) { - if (!this.position || JSON.stringify(this.position) === '{}') return; - if (this.autoClose) return - if (newVal) { - this.$emit('change', true) - this.open() - } else { - this.$emit('change', false) - this.close() - } - } - }, - mounted() { - this.position = {} - if (this.swipeaction.children !== undefined) { - this.swipeaction.children.push(this) - } - setTimeout(() => { - this.getSelectorQuery() - }, 100) - }, - beforeDestoy() { - this.swipeaction.children.forEach((item, index) => { - if (item === this) { - this.swipeaction.children.splice(index, 1) - } - }) - }, - methods: { - onClick(index, item) { - this.$emit('click', { - content: item, - index - }) - this.close() - }, - touchstart(e) { - const { - pageX - } = e.touches[0] - if (this.disabled) return - const left = this.position.content.left - if (this.autoClose) { - this.swipeaction.closeOther(this) - } - this.width = pageX - left - if (this.isopen) return - if (this.uniShow) { - this.uniShow = false - this.isopen = true - this.openleft = this.left + this.position.button.width - } - }, - touchmove(e, index) { - if (this.disabled) return - const { - pageX - } = e.touches[0] - this.setPosition(pageX) - }, - touchend() { - if (this.disabled) return - if (this.isopen) { - this.move(this.openleft, 0) - return - } - this.move(this.left, -40) - }, - setPosition(x, y) { - if (!this.position.button.width) { - return - } - // this.left = x - this.width - this.setValue(x - this.width) - }, - setValue(value) { - // 设置最大最小值 - this.left = Math.max(-this.position.button.width, Math.min(parseInt(value), 0)) - this.position.content.left = this.left - if (this.isopen) { - this.openleft = this.left + this.position.button.width - } - }, - move(left, value) { - if (left >= value) { - this.$emit('change', false) - this.close() - } else { - this.$emit('change', true) - this.open() - } - }, - open() { - this.uniShow = true - this.left = -this.position.button.width - this.setValue(-this.position.button.width) - }, - close() { - this.uniShow = true - this.setValue(0) - setTimeout(() => { - this.uniShow = false - this.isopen = false - }, 300) - }, - getSelectorQuery() { - // #ifndef APP-NVUE - const views = uni.createSelectorQuery() - .in(this) - views - .selectAll('.selector-query-hock') - .boundingClientRect(data => { - this.position.content = data[1] - this.position.button = data[0] - if (this.autoClose) return - if (this.show) { - this.open() - } else { - this.close() - } - }) - .exec() - // #endif - // #ifdef APP-NVUE - dom.getComponentRect(this.$refs['selector-content-hock'], (data) => { - if (this.position.content) return - this.position.content = data.size - }) - dom.getComponentRect(this.$refs['selector-button-hock'], (data) => { - if (this.position.button) return - this.position.button = data.size - if (this.autoClose) return - if (this.show) { - this.open() - } else { - this.close() - } - }) - // #endif - } - } -} diff --git a/components/uni-swipe-action-item/mpwxs.js b/components/uni-swipe-action-item/mpwxs.js deleted file mode 100644 index a8c93aa6..00000000 --- a/components/uni-swipe-action-item/mpwxs.js +++ /dev/null @@ -1,95 +0,0 @@ -export default { - data() { - return { - position: [], - button: [] - } - }, - computed: { - pos() { - return JSON.stringify(this.position) - }, - btn() { - return JSON.stringify(this.button) - } - }, - watch: { - show(newVal) { - if (this.autoClose) return - let valueObj = this.position[0] - if (!valueObj) { - this.init() - return - } - valueObj.show = newVal - this.$set(this.position, 0, valueObj) - } - }, - created() { - if (this.swipeaction.children !== undefined) { - this.swipeaction.children.push(this) - } - }, - mounted() { - this.init() - - }, - beforeDestroy() { - this.swipeaction.children.forEach((item, index) => { - if (item === this) { - this.swipeaction.children.splice(index, 1) - } - }) - }, - methods: { - init() { - - setTimeout(() => { - this.getSize() - this.getButtonSize() - }, 50) - }, - closeSwipe(e) { - if (!this.autoClose) return - this.swipeaction.closeOther(this) - }, - - change(e) { - this.$emit('change', e.open) - let valueObj = this.position[0] - if (valueObj.show !== e.open) { - valueObj.show = e.open - this.$set(this.position, 0, valueObj) - } - }, - onClick(index, item) { - this.$emit('click', { - content: item, - index - }) - }, - getSize() { - const views = uni.createSelectorQuery().in(this) - views - .selectAll('.selector-query-hock') - .boundingClientRect(data => { - if (this.autoClose) { - data[0].show = false - } else { - data[0].show = this.show - } - this.position = data - }) - .exec() - }, - getButtonSize() { - const views = uni.createSelectorQuery().in(this) - views - .selectAll('.button-hock') - .boundingClientRect(data => { - this.button = data - }) - .exec() - } - } -} diff --git a/components/uni-swipe-action-item/uni-swipe-action-item.vue b/components/uni-swipe-action-item/uni-swipe-action-item.vue deleted file mode 100644 index de616b89..00000000 --- a/components/uni-swipe-action-item/uni-swipe-action-item.vue +++ /dev/null @@ -1,264 +0,0 @@ - - - - \ No newline at end of file diff --git a/components/uni-swipe-action/uni-swipe-action.vue b/components/uni-swipe-action/uni-swipe-action.vue deleted file mode 100644 index 242ff5fd..00000000 --- a/components/uni-swipe-action/uni-swipe-action.vue +++ /dev/null @@ -1,58 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-tag/uni-tag.vue b/components/uni-tag/uni-tag.vue deleted file mode 100644 index 0c3bff3f..00000000 --- a/components/uni-tag/uni-tag.vue +++ /dev/null @@ -1,226 +0,0 @@ - - - - - \ No newline at end of file diff --git a/components/uni-transition/uni-transition.vue b/components/uni-transition/uni-transition.vue deleted file mode 100644 index 228c6600..00000000 --- a/components/uni-transition/uni-transition.vue +++ /dev/null @@ -1,279 +0,0 @@ - - - - - \ No newline at end of file diff --git a/hybrid/html/issue-17581.html b/hybrid/html/issue-17581.html new file mode 100644 index 00000000..b235ffc4 --- /dev/null +++ b/hybrid/html/issue-17581.html @@ -0,0 +1,55 @@ + + + + + + 点击显示小点 + + + + + + + + diff --git a/hybrid/html/local.html b/hybrid/html/local.html index 2fdc52b5..75e563e0 100644 --- a/hybrid/html/local.html +++ b/hybrid/html/local.html @@ -44,7 +44,7 @@ - + + + + + + + + +
+ + + diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..96c1fcee --- /dev/null +++ b/jest.config.js @@ -0,0 +1,11 @@ +module.exports = { + testTimeout: 20000, + reporters: [ + 'default' + ], + watchPathIgnorePatterns: ['/node_modules/', '/dist/', '/.git/'], + moduleFileExtensions: ['js', 'json'], + rootDir: __dirname, + testMatch: ["/pages/**/*test.[jt]s?(x)"], + testPathIgnorePatterns: ['/node_modules/'] +} diff --git a/main.js b/main.js index fbd3a857..ff49fdee 100644 --- a/main.js +++ b/main.js @@ -1,28 +1,44 @@ -import Vue from 'vue' import App from './App' +import store from './store' -import pageHead from './components/page-head.vue' -import pageFoot from './components/page-foot.vue' -import uLink from '@/components/uLink.vue' -import store from './store' - +// #ifndef VUE3 +import Vue from 'vue' Vue.config.productionTip = false - Vue.prototype.$store = store +Vue.prototype.$adpid = "1111111111" Vue.prototype.$backgroundAudioData = { playing: false, playTime: 0, formatedPlayTime: '00:00:00' } - -Vue.component('page-head', pageHead) -Vue.component('page-foot', pageFoot) -Vue.component('uLink', uLink) - App.mpType = 'app' - const app = new Vue({ store, ...App }) -app.$mount() +app.$mount() +// #endif + +// #ifdef VUE3 +import { + createSSRApp +} from 'vue' +import * as Pinia from 'pinia'; +import Vuex from "vuex"; +export function createApp() { + const app = createSSRApp(App) + app.use(store) + app.use(Pinia.createPinia()); + app.config.globalProperties.$adpid = "1111111111" + app.config.globalProperties.$backgroundAudioData = { + playing: false, + playTime: 0, + formatedPlayTime: '00:00:00' + } + return { + app, + Vuex, // 如果 nvue 使用 vuex 的各种map工具方法时,必须 return Vuex + Pinia // 此处必须将 Pinia 返回 + } +} +// #endif diff --git a/manifest.json b/manifest.json index 6eec2ec7..79189a62 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { "name" : "hello uni-app", - "appid" : "", + "appid" : "__UNI__HelloUniApp", "description" : "应用描述", "versionName" : "1.0.0", "versionCode" : "100", @@ -9,6 +9,7 @@ "app-plus" : { "usingComponents" : true, "nvueCompiler" : "uni-app", + "nvueStyleCompiler" : "uni-app", "compilerVersion" : 3, "nvueLaunchMode" : "fast", "splashscreen" : { @@ -56,7 +57,6 @@ "", "", "", - "", "", "", "", @@ -77,10 +77,29 @@ } }, "orientation" : [ "portrait-primary" ] + }, + "uniStatistics" : { + "enable" : true } }, /* 快应用特有相关 */ "quickapp" : {}, + "quickapp-native" : { + "icon" : "/static/logo.png", + "package" : "com.example.demo", + "features" : [ + { + "name" : "system.clipboard" + } + ] + }, + "quickapp-webview" : { + "icon" : "/static/logo.png", + "package" : "com.example.demo", + "minPlatformVersion" : 1070, + "versionName" : "1.0.0", + "versionCode" : 100 + }, /* 小程序特有相关 */ "mp-weixin" : { "appid" : "", @@ -92,32 +111,88 @@ "scope.userLocation" : { "desc" : "演示定位能力" } + }, + "uniStatistics" : { + "enable" : true } }, "mp-alipay" : { - "usingComponents" : true + "usingComponents" : true, + "uniStatistics" : { + "enable" : true + } }, "mp-baidu" : { - "usingComponents" : true + "usingComponents" : true, + "uniStatistics" : { + "enable" : true + }, + "dynamicLib" : { + "editorLib" : { + "provider" : "swan-editor" + } + } }, "mp-toutiao" : { - "usingComponents" : true + "usingComponents" : true, + "uniStatistics" : { + "enable" : true + } + }, + "mp-jd" : { + "usingComponents" : true, + "uniStatistics" : { + "enable" : true + } }, "h5" : { "template" : "template.h5.html", "router" : { "mode" : "history", - "base" : "/h5/" + "base" : "" }, "sdkConfigs" : { "maps" : { "qqmap" : { - "key" : "" + "key" : "TKUBZ-D24AF-GJ4JY-JDVM2-IBYKK-KEBCU" } } }, "async" : { "timeout" : 20000 + }, + "uniStatistics" : { + "enable" : true + } + }, + "vueVersion" : "3", + "mp-kuaishou" : { + "uniStatistics" : { + "enable" : true + } + }, + "mp-lark" : { + "uniStatistics" : { + "enable" : true } + }, + "mp-qq" : { + "uniStatistics" : { + "enable" : true + } + }, + "quickapp-webview-huawei" : { + "uniStatistics" : { + "enable" : true + } + }, + "quickapp-webview-union" : { + "uniStatistics" : { + "enable" : true + } + }, + "uniStatistics" : { + "version" : "2", + "enable" : true } } diff --git a/package.json b/package.json index 0b5f2ceb..d1e3f290 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,133 @@ { - "uni-app": { - "scripts": { - "mp-dingtalk": { - "title":"钉钉小程序", - "env": { - "UNI_PLATFORM": "mp-alipay" - }, - "define": { - "MP-DINGTALK": true - } - } + "id": "hello-uniapp", + "name": "hello-uniapp", + "displayName": "hello-uniapp 示例工程", + "version": "3.4.9", + "description": "uni-app 框架示例,一套代码,同时发行到iOS、Android、H5、小程序等多个平台,请使用手机扫码快速体验 uni-app 的强大功能", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": "https://github.com/dcloudio/hello-uniapp.git", + "keywords": [ + "hello-uniapp", + "uni-app", + "uni-ui", + "示例工程" +], + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/dcloudio/hello-uniapp/issues" + }, + "homepage": "https://github.com/dcloudio/hello-uniapp#readme", + "dependencies": {}, + "dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "type": "uniapp-template-project", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "√", + "aliyun": "√", + "alipay": "x" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "√", + "vue3": "√" + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "√", + "android": "√", + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "√", + "toutiao": "√", + "baidu": "√", + "kuaishou": "√", + "jd": "√", + "harmony": "√", + "qq": "√", + "lark": "√" + }, + "quickapp": { + "huawei": "-", + "union": "-" + } + }, + "uni-app-x": { + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "android": "-", + "ios": "-", + "harmony": "-" + }, + "mp": { + "weixin": "-" + } } + } } -} + }, + "uni-app": { + "scripts": { + "mp-dingtalk": { + "title": "钉钉小程序", + "env": { + "UNI_PLATFORM": "mp-alipay" + }, + "define": { + "MP-DINGTALK": true + } + }, + "hello-uniapp-demo": { + "title": "hello-uniapp 演示网站", + "env": { + "UNI_PLATFORM": "h5" + }, + "define": { + "H5-DEMO": true + } + } + } + }, + "engines": { + "HBuilderX": "^3.1.0", + "uni-app": "^4.03", + "uni-app-x": "" + } +} \ No newline at end of file diff --git a/pages.json b/pages.json index 7a32ab11..4ea4d9b7 100644 --- a/pages.json +++ b/pages.json @@ -1,1196 +1,1426 @@ -{ - "pages": [ - // pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages - { - "path": "pages/tabBar/component/component", - "style": { - "navigationBarTitleText": "内置组件", - "app-plus": { - "bounce": "vertical", - "titleNView": { - "buttons": [{ - "text": "\ue534", - "fontSrc": "/static/uni.ttf", - "fontSize": "22px", - "color": "#FFFFFF" - }] - } - } - } - }, - { - "path": "pages/tabBar/API/API", - "style": { - "navigationBarTitleText": "接口", - "app-plus": { - "titleNView": { - "buttons": [{ - "text": "\ue534", - "fontSrc": "/static/uni.ttf", - "fontSize": "22px", - "color": "#FFFFFF" - }] - } - } - } - }, - { - "path": "pages/tabBar/template/template", - "style": { - "navigationBarTitleText": "模版", - "app-plus": { - "titleNView": { - "buttons": [{ - "text": "\ue534", - "fontSrc": "/static/uni.ttf", - "fontSize": "22px", - "color": "#FFFFFF" - }] - } - } - } - }, - { - "path": "pages/tabBar/extUI/extUI", - "style": { - "navigationBarTitleText": "扩展组件", - "app-plus": { - "titleNView": { - "buttons": [{ - "text": "\ue534", - "fontSrc": "/static/uni.ttf", - "fontSize": "22px", - "color": "#FFFFFF" - }] - } - } - } - }, - { - "path": "pages/component/view/view", - "style": { - "navigationBarTitleText": "view" - } - }, - { - "path": "pages/component/scroll-view/scroll-view", - "style": { - "navigationBarTitleText": "scroll-view" - } - }, - { - "path": "pages/component/swiper/swiper", - "style": { - "navigationBarTitleText": "swiper" - } - }, - // #ifndef MP-TOUTIAO - { - "path": "pages/component/cover-view/cover-view", - "style": { - "navigationBarTitleText": "cover-view" - } - }, - { - "path": "pages/component/movable-view/movable-view", - "style": { - "navigationBarTitleText": "movable-view" - } - }, - // #endif - { - "path": "pages/component/text/text", - "style": { - "navigationBarTitleText": "text" - } - }, - { - "path": "pages/component/rich-text/rich-text", - "style": { - "navigationBarTitleText": "rich-text" - } - }, - { - "path": "pages/component/progress/progress", - "style": { - "navigationBarTitleText": "progress" - } - }, - { - "path": "pages/component/button/button", - "style": { - "navigationBarTitleText": "button" - } - }, - { - "path": "pages/component/checkbox/checkbox", - "style": { - "navigationBarTitleText": "checkbox" - } - }, - { - "path": "pages/component/form/form", - "style": { - "navigationBarTitleText": "form" - } - }, - { - "path": "pages/component/input/input", - "style": { - "navigationBarTitleText": "input", - "app-plus": { - "softinputNavBar": "none" - } - } - }, - { - "path": "pages/component/label/label", - "style": { - "navigationBarTitleText": "label" - } - }, - { - "path": "pages/component/picker/picker", - "style": { - "navigationBarTitleText": "picker" - } - }, - { - "path": "pages/component/picker-view/picker-view", - "style": { - "navigationBarTitleText": "picker-view" - } - }, - { - "path": "pages/component/radio/radio", - "style": { - "navigationBarTitleText": "radio" - } - }, - { - "path": "pages/component/slider/slider", - "style": { - "navigationBarTitleText": "slider" - } - }, - { - "path": "pages/component/switch/switch", - "style": { - "navigationBarTitleText": "switch" - } - }, - { - "path": "pages/component/textarea/textarea", - "style": { - "navigationBarTitleText": "textarea" - } - }, - // #ifdef APP-PLUS || MP-WEIXIN || H5 - { - "path": "pages/component/editor/editor", - "style": { - "navigationBarTitleText": "editor" - } - }, - // #endif - { - "path": "pages/component/navigator/navigator", - "style": { - "navigationBarTitleText": "navigator" - } - }, - { - "path": "pages/component/navigator/navigate/navigate", - "style": { - "navigationBarTitleText": "navigatePage" - } - }, - { - "path": "pages/component/navigator/redirect/redirect", - "style": { - "navigationBarTitleText": "redirectPage" - } - }, - { - "path": "pages/component/image/image", - "style": { - "navigationBarTitleText": "image" - } - }, - { - "path": "pages/component/video/video", - "style": { - "navigationBarTitleText": "video" - } - }, - // #ifndef MP-ALIPAY || MP-TOUTIAO - { - "path": "pages/component/audio/audio", - "style": { - "navigationBarTitleText": "audio" - } - }, - // #endif - // #ifndef MP-TOUTIAO - { - "path": "pages/component/map/map", - "style": { - "navigationBarTitleText": "map" - } - }, - // #endif - { - "path": "pages/component/canvas/canvas", - "style": { - "navigationBarTitleText": "canvas" - } - }, - { - "path": "pages/component/web-view/web-view", - "style": { - "navigationBarTitleText": "web-view" - } - }, - // #ifndef H5 || MP-BAIDU - { - "path": "pages/component/ad/ad", - "style": { - "navigationBarTitleText": "AD" - } - }, - // #endif - // #ifdef APP-PLUS - { - "path": "pages/component/web-view-local/web-view-local", - "style": {} - }, - // #endif - { - "path": "platforms/app-plus/speech/speech", - "style": { - "navigationBarTitleText": "语音识别" - } - }, - { - "path": "platforms/app-plus/orientation/orientation", - "style": { - "navigationBarTitleText": "方向传感器" - } - }, - { - "path": "platforms/app-plus/proximity/proximity", - "style": { - "navigationBarTitleText": "距离传感器" - } - }, - { - "path": "platforms/app-plus/push/push", - "style": { - "navigationBarTitleText": "推送" - } - }, - { - "path": "platforms/app-plus/shake/shake", - "style": { - "navigationBarTitleText": "摇一摇" - } - }, - // #ifdef H5 || APP-PLUS - { - "path": "pages/about/about", - "style": { - "navigationBarTitleText": "关于" - } - }, - // #endif - { - "path": "platforms/app-plus/feedback/feedback", - "style": { - "navigationBarTitleText": "问题反馈" - } - } - ], - "subPackages": [{ - "root": "pages/API", - "pages": [{ - "path": "login/login", - "style": { - "navigationBarTitleText": "授权登录" - } - }, - // #ifdef APP-PLUS - { - "path": "subnvue/subnvue", - "style": { - "navigationBarTitleText": "SubNvue", - "app-plus": { - "titleNView": false, - "subNVues": [{ - "id": "drawer", - "path": "subnvue/subnvue/drawer", - "type": "popup", - "style": { - "width": "50%" - } - }, { - "id": "popup", - "path": "subnvue/subnvue/popup", - "type": "popup", - "style": { - "margin": "auto", - "width": "80%", - "height": "600rpx" - } - }, { - "id": "video_mask", - "path": "subnvue/subnvue/video-mask", - "style": { - "position": "absolute", - "bottom": "30px", - "left": "0", - "width": "230px", - "height": "110px", - "background": "transparent" - } - }, { - "id": "nav", - "path": "subnvue/subnvue/nav", - "type": "navigationBar" - }] - } - } - }, - // #endif - { - "path": "get-user-info/get-user-info", - "style": { - "navigationBarTitleText": "获取用户信息" - } - }, - { - "path": "request-payment/request-payment", - "style": { - "navigationBarTitleText": "发起支付" - } - }, - { - "path": "share/share", - "style": { - "navigationBarTitleText": "分享" - } - }, - { - "path": "set-navigation-bar-title/set-navigation-bar-title", - "style": { - "navigationBarTitleText": "设置界面标题" - } - }, - { - "path": "show-loading/show-loading", - "style": { - "navigationBarTitleText": "加载提示框" - } - }, - { - "path": "navigator/navigator", - "style": { - "navigationBarTitleText": "页面跳转" - } - }, - { - "path": "navigator/new-page/new-vue-page-1", - "style": { - "navigationBarTitleText": "新VUE页面1" - } - }, - { - "path": "navigator/new-page/new-vue-page-2", - "style": { - "navigationBarTitleText": "新VUE页面2" - } - }, - { - "path": "navigator/new-page/new-nvue-page-1", - "style": { - "navigationBarTitleText": "新NVUE页面1" - } - }, - { - "path": "navigator/new-page/new-nvue-page-2", - "style": { - "navigationBarTitleText": "新NVUE页面2" - } - }, - { - "path": "pull-down-refresh/pull-down-refresh", - "style": { - "navigationBarTitleText": "下拉刷新", - "enablePullDownRefresh": true - } - }, - { - "path": "animation/animation", - "style": { - "navigationBarTitleText": "创建动画" - } - }, - { - "path": "get-node-info/get-node-info", - "style": { - "navigationBarTitleText": "节点信息" - } - }, - { - "path": "intersection-observer/intersection-observer", - "style": { - "navigationBarTitleText": "节点布局相交状态" - } - }, - { - "path": "canvas/canvas", - "style": { - "navigationBarTitleText": "创建绘画" - } - }, - { - "path": "action-sheet/action-sheet", - "style": { - "navigationBarTitleText": "操作菜单" - } - }, - { - "path": "modal/modal", - "style": { - "navigationBarTitleText": "模态弹窗" - } - }, - { - "path": "toast/toast", - "style": { - "navigationBarTitleText": "消息提示框" - } - }, - { - "path": "get-network-type/get-network-type", - "style": { - "navigationBarTitleText": "获取手机网络状态" - } - }, - { - "path": "get-system-info/get-system-info", - "style": { - "navigationBarTitleText": "获取手机系统信息" - } - }, - { - "path": "add-phone-contact/add-phone-contact", - "style": { - "navigationBarTitleText": "添加手机联系人" - } - }, - { - "path": "on-accelerometer-change/on-accelerometer-change", - "style": { - "navigationBarTitleText": "监听加速度计数据" - } - }, - { - "path": "on-compass-change/on-compass-change", - "style": { - "navigationBarTitleText": "监听罗盘数据" - } - }, - { - "path": "make-phone-call/make-phone-call", - "style": { - "navigationBarTitleText": "打电话" - } - }, - { - "path": "scan-code/scan-code", - "style": { - "navigationBarTitleText": "扫码" - } - }, - { - "path": "clipboard/clipboard", - "style": { - "navigationBarTitleText": "剪贴板" - } - }, - { - "path": "request/request", - "style": { - "navigationBarTitleText": "网络请求" - } - }, - { - "path": "upload-file/upload-file", - "style": { - "navigationBarTitleText": "上传文件" - } - }, - { - "path": "download-file/download-file", - "style": { - "navigationBarTitleText": "下载文件" - } - }, - { - "path": "image/image", - "style": { - "navigationBarTitleText": "图片" - } - }, - { - "path": "voice/voice", - "style": { - "navigationBarTitleText": "录音" - } - }, - { - "path": "background-audio/background-audio", - "style": { - "navigationBarTitleText": "背景音频" - } - }, - { - "path": "video/video", - "style": { - "navigationBarTitleText": "视频" - } - }, - { - "path": "file/file", - "style": { - "navigationBarTitleText": "文件" - } - }, - // #ifndef MP-QQ || MP-TOUTIAO - { - "path": "map/map", - "style": { - "navigationBarTitleText": "map" - } - }, - // #endif - // #ifdef APP-PLUS - { - "path": "map-search/map-search", - "style": { - "navigationBarTitleText": "map search" - } - }, - // #endif - { - "path": "get-location/get-location", - "style": { - "navigationBarTitleText": "获取位置" - } - }, - { - "path": "open-location/open-location", - "style": { - "navigationBarTitleText": "查看位置" - } - }, - // #ifndef MP-TOUTIAO - { - "path": "choose-location/choose-location", - "style": { - "navigationBarTitleText": "使用地图选择位置" - } - }, - // #endif - { - "path": "storage/storage", - "style": { - "navigationBarTitleText": "数据存储" - } - }, - { - "path": "sqlite/sqlite", - "style": { - "navigationBarTitleText": "SQLite" - } - }, - // #ifdef APP-PLUS || MP-WEIXIN - { - "path": "rewarded-video-ad/rewarded-video-ad", - "style": { - "navigationBarTitleText": "激励视频广告" - } - }, - // #endif - // #ifndef H5 - { - "path": "brightness/brightness", - "style": { - "navigationBarTitleText": "屏幕亮度" - } - }, - // #endif - // #ifndef H5 || MP-ALIPAY - { - "path": "save-media/save-media", - "style": { - "navigationBarTitleText": "保存媒体到本地" - } - }, - // #endif - // #ifdef APP-PLUS || MP-WEIXIN || MP-QQ - { - "path": "bluetooth/bluetooth", - "style": { - "navigationBarTitleText": "蓝牙" - } - }, - { - "path": "soter/soter", - "style": { - "navigationBarTitleText": "生物认证" - } - }, - // #endif - // #ifdef APP-PLUS || MP-WEIXIN - { - "path": "ibeacon/ibeacon", - "style": { - "navigationBarTitleText": "iBeacon" - } - }, - // #endif - { - "path": "vibrate/vibrate", - "style": { - "navigationBarTitleText": "震动" - } - }, - // #ifndef MP-ALIPAY - { - "path": "websocket-socketTask/websocket-socketTask", - "style": { - "navigationBarTitleText": "websocket-socketTask" - } - }, - // #endif - { - "path": "websocket-global/websocket-global", - "style": { - "navigationBarTitleText": "websocket-global" - } - } - ] - }, - { - "root": "pages/extUI", - "pages": [{ - "path": "badge/badge", - "style": { - "navigationBarTitleText": "Badge 数字角标" - } - }, - { - "path": "countdown/countdown", - "style": { - "navigationBarTitleText": "Countdown 倒计时" - } - }, - { - "path": "drawer/drawer", - "style": { - "navigationBarTitleText": "Drawer 抽屉", - "app-plus": { - "titleNView": { - "buttons": [{ - "text": "", - "fontSrc": "/static/uni.ttf", - "fontSize": "22px" - }] - }, - "bounce": "none" - } - } - }, - { - "path": "icons/icons", - "style": { - "navigationBarTitleText": "Icons 图标" - } - }, - { - "path": "load-more/load-more", - "style": { - "navigationBarTitleText": "LoadMore 加载更多" - } - }, - { - "path": "nav-bar/nav-bar", - "style": { - "navigationBarTitleText": "NavBar 导航栏", - "navigationStyle": "custom", - "enablePullDownRefresh": true, - "app-plus": { - "titleNView": false, - "bounce": "none", - "pullToRefresh": { - "style": "circle", - "offset": "70px" - } - } - } - }, - { - "path": "number-box/number-box", - "style": { - "navigationBarTitleText": "NumberBox 数字输入框" - } - }, - { - "path": "popup/popup", - "style": { - "navigationBarTitleText": "Popup 弹出层", - "app-plus": { - "softinputMode": "adjustResize" - } - } - }, - { - "path": "segmented-control/segmented-control", - "style": { - "navigationBarTitleText": "SegmentedControl 分段器" - } - }, - { - "path": "tag/tag", - "style": { - "navigationBarTitleText": "Tag 标签" - } - }, - { - "path": "list/list", - "style": { - "navigationBarTitleText": "List 列表" - } - }, - { - "path": "card/card", - "style": { - "navigationBarTitleText": "Card 卡片" - } - }, - { - "path": "collapse/collapse", - "style": { - "navigationBarTitleText": "Collapse 折叠面板" - } - }, - { - "path": "pagination/pagination", - "style": { - "navigationBarTitleText": "Pagination 分页器" - } - }, - { - "path": "swiper-dot/swiper-dot", - "style": { - "navigationBarTitleText": "SwiperDot 轮播图指示点", - "mp-baidu": { - "disableSwipeBack": true - } - } - }, - { - "path": "grid/grid", - "style": { - "navigationBarTitleText": "Grid 宫格" - } - }, - { - "path": "rate/rate", - "style": { - "navigationBarTitleText": "Rate 评分" - } - }, - { - "path": "steps/steps", - "style": { - "navigationBarTitleText": "Steps 步骤条" - } - }, - { - "path": "notice-bar/notice-bar", - "style": { - "navigationBarTitleText": "NoticeBar 通告栏" - } - }, - { - "path": "swipe-action/swipe-action", - "style": { - "navigationBarTitleText": "SwipeAction 滑动操作", - "app-plus": { - "bounce": "none" - } - } - }, - { - "path": "search-bar/search-bar", - "style": { - "navigationBarTitleText": "SearchBar 搜索栏" - } - }, - { - "path": "calendar/calendar", - "style": { - "navigationBarTitleText": "Calendar 日历" - } - }, - { - "path": "indexed-list/indexed-list", - "style": { - "navigationBarTitleText": "IndexedList 索引列表", - "mp-weixin": { - "disableScroll": true - }, - "app-plus": { - "bounce": "none" - }, - "mp-alipay": { - "allowsBounceVertical": "NO" - }, - "mp-baidu": { - "disableScroll": true - } - } - }, - { - "path": "fab/fab", - "style": { - "navigationBarTitleText": "Fab 悬浮按钮" - } - }, - { - "path": "fav/fav", - "style": { - "navigationBarTitleText": "Fav 收藏按钮" - } - }, - { - "path": "goods-nav/goods-nav", - "style": { - "navigationBarTitleText": "GoodsNav 商品导航" - } - }, - { - "path": "section/section", - "style": { - "navigationBarTitleText": "Section 章节标题" - } - }, - { - "path": "transition/transition", - "style": { - "navigationBarTitleText": "Transition 过渡动画" - } - }, - { - "path": "title/title", - "style": { - "navigationBarTitleText": "Title 章节标题" - } - }, - { - "path": "link/link", - "style": { - "navigationBarTitleText": "Link 链接" - } - }, - { - "path": "combox/combox", - "style": { - "navigationBarTitleText": "Combox 组合框" - } - } - ] - }, - { - "root": "pages/template", - "pages": [{ - "path": "ucharts/ucharts", - "style": { - "navigationBarTitleText": "uCharts 图表" - } - }, - { - "path": "nav-default/nav-default", - "style": { - "navigationBarTitleText": "默认导航栏" - } - }, - { - "path": "component-communication/component-communication", - "style": { - "navigationBarTitleText": "组件通讯" - } - }, - // #ifdef APP-PLUS || H5 || MP-ALIPAY - { - "path": "nav-transparent/nav-transparent", - "style": { - "navigationBarTitleText": "透明渐变导航栏", - "transparentTitle": "auto" - } - }, - // #endif - // #ifdef APP-PLUS || H5 - { - "path": "nav-button/nav-button", - "style": { - "navigationBarTitleText": "导航栏带自定义按钮", - "app-plus": { - "titleNView": { - "buttons": [{ - "type": "share" - }, - { - "type": "favorite" - } - ] - } - } - } - }, - // #endif - // #ifdef APP-PLUS || H5 || MP-ALIPAY - { - "path": "nav-image/nav-image", - "style": { - "navigationBarBackgroundColor": "#FFFFFF", - "navigationBarTextStyle": "black", - "titleImage": "https://img-cdn-qiniu.dcloud.net.cn/static/images/logo1@2x.png" - } - }, - // #endif - // #ifdef APP-PLUS || H5 - { - "path": "nav-city-dropdown/nav-city-dropdown", - "style": { - "navigationBarTitleText": "导航栏带城市选择", - "app-plus": { - "titleNView": { - "buttons": [{ - "text": "北京市", - "fontSize": "14", - "select": true, - "width": "auto" - }] - } - } - } - }, - { - "path": "nav-dot/nav-dot", - "style": { - "navigationBarTitleText": "导航栏带红点和角标", - "app-plus": { - "titleNView": { - "buttons": [{ - "text": "消息", - "fontSize": "14", - "redDot": true - }, - { - "text": "关注", - "fontSize": "14", - "badgeText": "12" - } - ] - } - } - } - }, - { - "path": "nav-search-input/nav-search-input", - "style": { - "navigationBarTitleText": "导航栏带搜索框", - "app-plus": { - "titleNView": { - "type": "transparent", - "titleColor": "#fff", - "backgroundColor": "#007AFF", - "buttons": [{ - "fontSrc": "/static/uni.ttf", - "text": "\ue537", - "width": "40px", - "fontSize": "28px", - "color": "#fff", - "background": "rgba(0,0,0,0)" - }], - "searchInput": { - "backgroundColor": "#fff", - "borderRadius": "6px", - "placeholder": "请输入地址 如:大钟寺", - "disabled": true - } - } - } - } - }, - { - "path": "nav-search-input/detail/detail", - "style": { - "navigationBarTitleText": "搜索", - "app-plus": { - "titleNView": { - "titleColor": "#fff", - "backgroundColor": "#007AFF", - "buttons": [{ - "fontSrc": "/static/uni.ttf", - "text": "\ue537", - "width": "auto", - "fontSize": "28px", - "color": "#fff" - }], - "searchInput": { - "backgroundColor": "#fff", - "borderRadius": "6px", - "placeholder": "请输入地址 如:大钟寺", - "autoFocus": true - } - } - } - } - }, - // #endif - { - "path": "list2detail-list/list2detail-list", - "style": { - "navigationBarTitleText": "列表到详情示例", - "enablePullDownRefresh": true - } - }, - { - "path": "list2detail-detail/list2detail-detail", - "style": { - "navigationBarTitleText": "详情", - "app-plus": { - "titleNView": { - "type": "transparent", - "buttons": [{ - "type": "share" - }] - } - }, - "h5": { - "titleNView": { - "type": "transparent", - "buttons": [] - } - } - } - }, - { - "path": "tabbar/tabbar", - "style": { - "navigationBarTitleText": "可拖动顶部选项卡" - } - }, - { - "path": "tabbar/detail/detail", - "style": { - "navigationBarTitleText": "详情页面" - } - }, - // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-QQ - { - "path": "swiper-vertical/swiper-vertical", - "style": { - "navigationBarTitleText": "上下滑动切换视频", - "app-plus": { - "titleNView": false - } - } - }, - { - "path": "swiper-list/swiper-list", - "style": { - "navigationBarTitleText": "swiper-list" - } - }, - // #endif - // #ifdef APP-PLUS - { - "path": "swiper-list-nvue/swiper-list-nvue", - "style": { - "navigationBarTitleText": "swiper-list" - } - }, - // #endif - { - "path": "scheme/scheme", - "style": { - "navigationBarTitleText": "打开外部应用" - } - }, - // #ifdef APP-PLUS || MP-WEIXIN || MP-QQ || H5 - { - "path": "vant-button/vant-button", - "style": { - "navigationBarTitleText": "微信自定义组件示例", - "usingComponents": { - "van-button": "/wxcomponents/vant/button/index" - } - } - }, - // #endif - { - "path": "global/global", - "style": { - "navigationBarTitleText": "GlobalData和vuex" - } - } - ] - } - ], +{ + "leftWindow": { + "path": "windows/left-window.vue", + "style": { + "width": "350px" + } + }, + "topWindow": { + "path": "windows/top-window.vue", + "style": { + "height": "60px" + } + }, + "pages": [ + // pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/tabBar/component/component", + "style": { + "navigationBarTitleText": "内置组件", + "app-plus": { + "bounce": "vertical", + "titleNView": { + "buttons": [{ + "text": "\ue534", + "fontSrc": "/static/uni.ttf", + "fontSize": "22px", + "color": "#FFFFFF" + }] + } + } + } + }, + { + "path": "pages/tabBar/API/API", + "style": { + "navigationBarTitleText": "接口", + "app-plus": { + "titleNView": { + "buttons": [{ + "text": "\ue534", + "fontSrc": "/static/uni.ttf", + "fontSize": "22px", + "color": "#FFFFFF" + }] + } + } + } + }, + { + "path": "pages/tabBar/template/template", + "style": { + "navigationBarTitleText": "模版", + "app-plus": { + "titleNView": { + "buttons": [{ + "text": "\ue534", + "fontSrc": "/static/uni.ttf", + "fontSize": "22px", + "color": "#FFFFFF" + }] + } + } + } + }, + { + "path": "pages/tabBar/extUI/extUI", + "style": { + "navigationBarTitleText": "扩展组件", + "app-plus": { + "titleNView": { + "buttons": [{ + "text": "\ue534", + "fontSrc": "/static/uni.ttf", + "fontSize": "22px", + "color": "#FFFFFF" + }] + } + } + } + }, + { + "path": "pages/component/view/view", + "style": { + "navigationBarTitleText": "view" + } + }, + { + "path": "pages/component/scroll-view/scroll-view", + "style": { + "navigationBarTitleText": "scroll-view" + } + }, + { + "path": "pages/component/swiper/swiper", + "style": { + "navigationBarTitleText": "swiper" + } + }, + // #ifndef MP-TOUTIAO + { + "path": "pages/component/cover-view/cover-view", + "style": { + "navigationBarTitleText": "cover-view" + } + }, + { + "path": "pages/component/movable-view/movable-view", + "style": { + "navigationBarTitleText": "movable-view" + } + }, + // #endif + { + "path": "pages/component/text/text", + "style": { + "navigationBarTitleText": "text" + } + }, + { + "path": "pages/component/rich-text/rich-text", + "style": { + "navigationBarTitleText": "rich-text" + } + }, + { + "path": "pages/component/progress/progress", + "style": { + "navigationBarTitleText": "progress" + } + }, + { + "path": "pages/component/button/button", + "style": { + "navigationBarTitleText": "button" + } + }, + { + "path": "pages/component/checkbox/checkbox", + "style": { + "navigationBarTitleText": "checkbox" + } + }, + { + "path": "pages/component/form/form", + "style": { + "navigationBarTitleText": "form" + } + }, + { + "path": "pages/component/input/input", + "style": { + "navigationBarTitleText": "input", + "app-plus": { + "softinputNavBar": "none" + } + } + }, + { + "path": "pages/component/label/label", + "style": { + "navigationBarTitleText": "label" + } + }, + { + "path": "pages/component/picker/picker", + "style": { + "navigationBarTitleText": "picker" + } + }, + { + "path": "pages/component/picker-view/picker-view", + "style": { + "navigationBarTitleText": "picker-view" + } + }, + { + "path": "pages/component/radio/radio", + "style": { + "navigationBarTitleText": "radio" + } + }, + { + "path": "pages/component/slider/slider", + "style": { + "navigationBarTitleText": "slider" + } + }, + { + "path": "pages/component/switch/switch", + "style": { + "navigationBarTitleText": "switch" + } + }, + { + "path": "pages/component/textarea/textarea", + "style": { + "navigationBarTitleText": "textarea" + } + }, + // #ifdef APP-PLUS || MP-WEIXIN || H5 || MP-BAIDU + { + "path": "pages/component/editor/editor", + "style": { + "navigationBarTitleText": "editor", + "app-plus": { + "softinputMode": "adjustResize" + } + // #ifdef MP-BAIDU + ,"usingComponents": { + "editor": "dynamicLib://editorLib/editor" + } + // #endif + } + }, + // #endif + { + "path": "pages/component/navigator/navigator", + "style": { + "navigationBarTitleText": "navigator" + } + }, + { + "path": "pages/component/navigator/navigate/navigate", + "style": { + "navigationBarTitleText": "navigatePage" + } + }, + { + "path": "pages/component/navigator/redirect/redirect", + "style": { + "navigationBarTitleText": "redirectPage" + } + }, + { + "path": "pages/component/image/image", + "style": { + "navigationBarTitleText": "image" + } + }, + { + "path": "pages/component/video/video", + "style": { + "navigationBarTitleText": "video" + } + }, + // #ifndef MP-ALIPAY || MP-TOUTIAO || VUE3 + // { + // "path": "pages/component/audio/audio", + // "style": { + // "navigationBarTitleText": "audio" + // } + // }, + // #endif + // #ifndef MP-TOUTIAO + { + "path": "pages/component/map/map", + "style": { + "navigationBarTitleText": "map" + } + }, + // #endif + { + "path": "pages/component/canvas/canvas", + "style": { + "navigationBarTitleText": "canvas" + } + }, + { + "path": "pages/component/web-view/web-view", + "style": { + "navigationBarTitleText": "web-view" + } + }, + // #ifdef APP-VUE || APP-NVUE + { + "path": "pages/component/ad/ad", + "style": { + "navigationBarTitleText": "AD" + } + }, + // #endif + // #ifdef APP || H5 + { + "path": "pages/component/web-view-local/web-view-local", + "style": {} + }, + { + "path": "pages/component/web-view-local/issue-17581", + "style": { + "navigationBarTitleText": "issue-17581" + } + }, + // #endif + { + "path": "platforms/app-plus/speech/speech", + "style": { + "navigationBarTitleText": "语音识别" + } + }, + { + "path": "platforms/app-plus/orientation/orientation", + "style": { + "navigationBarTitleText": "方向传感器" + } + }, + { + "path": "platforms/app-plus/proximity/proximity", + "style": { + "navigationBarTitleText": "距离传感器" + } + }, + { + "path": "platforms/app-plus/push/push", + "style": { + "navigationBarTitleText": "推送" + } + }, + { + "path": "platforms/app-plus/shake/shake", + "style": { + "navigationBarTitleText": "摇一摇" + } + }, + // #ifdef H5 || APP-PLUS + { + "path": "pages/about/about", + "style": { + "navigationBarTitleText": "关于" + } + }, + // #endif + { + "path": "platforms/app-plus/feedback/feedback", + "style": { + "navigationBarTitleText": "问题反馈" + } + } + // #ifdef H5 + , { + "path": "pages/error/404", + "style": { + "navigationBarTitleText": "Not Found" + } + } + // #endif + // #ifdef APP-PLUS + ,{ + "path": "uni_modules/uni-upgrade-center-app/pages/upgrade-popup", + "style": { + "app-plus": { + "animationDuration": 200, + "animationType": "fade-in", + "background": "transparent", + "backgroundColorTop": "transparent", + "popGesture": "none", + "scrollIndicator": false, + "titleNView": false + }, + "disableScroll": true + } + } + // #endif + +], + "subPackages": [{ + "root": "pages/API", + "pages": [{ + "path": "login/login", + "style": { + "navigationBarTitleText": "授权登录" + } + }, + // #ifdef APP-PLUS + { + "path": "subnvue/subnvue", + "style": { + "navigationBarTitleText": "原生子窗体", + "app-plus": { + "subNVues": [{ + "id": "drawer", + "path": "subnvue/subnvue/drawer", + "type": "popup", + "style": { + "width": "50%" + } + }, { + "id": "popup", + "path": "subnvue/subnvue/popup", + "type": "popup", + "style": { + "margin": "auto", + "width": "80%", + "height": "600rpx" + } + }, { + "id": "video_mask", + "path": "subnvue/subnvue/video-mask", + "style": { + "position": "absolute", + "bottom": "30px", + "left": "0", + "width": "230px", + "height": "110px", + "background": "transparent" + } + }] + } + } + }, + // #endif + { + "path": "get-user-info/get-user-info", + "style": { + "navigationBarTitleText": "获取用户信息" + } + }, + { + "path": "request-payment/request-payment", + "style": { + "navigationBarTitleText": "发起支付" + } + }, + { + "path": "share/share", + "style": { + "navigationBarTitleText": "分享" + } + }, + { + "path": "set-navigation-bar-title/set-navigation-bar-title", + "style": { + "navigationBarTitleText": "设置界面标题" + } + }, + { + "path": "show-loading/show-loading", + "style": { + "navigationBarTitleText": "加载提示框" + } + }, + { + "path": "navigator/navigator", + "style": { + "navigationBarTitleText": "页面跳转" + } + }, + { + "path": "navigator/new-page/new-vue-page-1", + "style": { + "navigationBarTitleText": "新VUE页面1" + } + }, + { + "path": "navigator/new-page/new-vue-page-2", + "style": { + "navigationBarTitleText": "新VUE页面2" + } + }, + // #ifndef VUE3 + { + "path": "navigator/new-page/new-nvue-page-1", + "style": { + "navigationBarTitleText": "新NVUE页面1" + } + }, + { + "path": "navigator/new-page/new-nvue-page-2", + "style": { + "navigationBarTitleText": "新NVUE页面2" + } + }, + // #endif + { + "path": "pull-down-refresh/pull-down-refresh", + "style": { + "navigationBarTitleText": "下拉刷新", + "enablePullDownRefresh": true + } + }, + { + "path": "animation/animation", + "style": { + "navigationBarTitleText": "创建动画" + } + }, + { + "path": "get-node-info/get-node-info", + "style": { + "navigationBarTitleText": "节点信息" + } + }, + { + "path": "intersection-observer/intersection-observer", + "style": { + "navigationBarTitleText": "节点布局相交状态" + } + }, + { + "path": "canvas/canvas", + "style": { + "navigationBarTitleText": "创建绘画" + } + }, + { + "path": "action-sheet/action-sheet", + "style": { + "navigationBarTitleText": "操作菜单" + } + }, + { + "path": "modal/modal", + "style": { + "navigationBarTitleText": "模态弹窗" + } + }, + { + "path": "toast/toast", + "style": { + "navigationBarTitleText": "消息提示框" + } + }, + { + "path": "get-network-type/get-network-type", + "style": { + "navigationBarTitleText": "获取设备网络状态" + } + }, + { + "path": "get-system-info/get-system-info", + "style": { + "navigationBarTitleText": "获取设备系统信息" + } + }, + { + "path": "add-phone-contact/add-phone-contact", + "style": { + "navigationBarTitleText": "添加手机联系人" + } + }, + { + "path": "on-accelerometer-change/on-accelerometer-change", + "style": { + "navigationBarTitleText": "监听加速度计数据" + } + }, + { + "path": "on-compass-change/on-compass-change", + "style": { + "navigationBarTitleText": "监听罗盘数据" + } + }, + { + "path": "make-phone-call/make-phone-call", + "style": { + "navigationBarTitleText": "打电话" + } + }, + { + "path": "scan-code/scan-code", + "style": { + "navigationBarTitleText": "扫码" + } + }, + { + "path": "clipboard/clipboard", + "style": { + "navigationBarTitleText": "剪贴板" + } + }, + { + "path": "request/request", + "style": { + "navigationBarTitleText": "网络请求" + } + }, + { + "path": "upload-file/upload-file", + "style": { + "navigationBarTitleText": "上传文件" + } + }, + { + "path": "download-file/download-file", + "style": { + "navigationBarTitleText": "下载文件" + } + }, + { + "path": "image/image", + "style": { + "navigationBarTitleText": "图片" + } + }, + { + "path": "voice/voice", + "style": { + "navigationBarTitleText": "录音" + } + }, + { + "path": "inner-audio/inner-audio", + "style": { + "navigationBarTitleText": "音频" + } + }, + { + "path": "background-audio/background-audio", + "style": { + "navigationBarTitleText": "背景音频" + } + }, + { + "path": "video/video", + "style": { + "navigationBarTitleText": "视频" + } + }, + { + "path": "file/file", + "style": { + "navigationBarTitleText": "文件" + } + }, + // #ifndef MP-QQ || MP-TOUTIAO + { + "path": "map/map", + "style": { + "navigationBarTitleText": "map" + } + }, + // #endif + // #ifdef APP-PLUS + { + "path": "map-search/map-search", + "style": { + "navigationBarTitleText": "map search" + } + }, + // #endif + { + "path": "get-location/get-location", + "style": { + "navigationBarTitleText": "获取位置" + } + }, + { + "path": "open-location/open-location", + "style": { + "navigationBarTitleText": "查看位置" + } + }, + // #ifndef MP-TOUTIAO + { + "path": "choose-location/choose-location", + "style": { + "navigationBarTitleText": "使用地图选择位置" + } + }, + // #endif + { + "path": "storage/storage", + "style": { + "navigationBarTitleText": "数据存储" + } + }, + { + "path": "sqlite/sqlite", + "style": { + "navigationBarTitleText": "SQLite" + } + }, + // #ifdef APP-PLUS || MP-WEIXIN + { + "path": "rewarded-video-ad/rewarded-video-ad", + "style": { + "navigationBarTitleText": "激励视频广告" + } + }, + // #endif + // #ifdef APP-PLUS + { + "path": "full-screen-video-ad/full-screen-video-ad", + "style": { + "navigationBarTitleText": "全屏视频广告" + } + }, + // #endif + // #ifndef H5 + { + "path": "brightness/brightness", + "style": { + "navigationBarTitleText": "屏幕亮度" + } + }, + // #endif + // #ifndef H5 || MP-ALIPAY + { + "path": "save-media/save-media", + "style": { + "navigationBarTitleText": "保存媒体到本地" + } + }, + // #endif + // #ifdef APP-PLUS || MP-WEIXIN || MP-QQ || MP-JD + { + "path": "bluetooth/bluetooth", + "style": { + "navigationBarTitleText": "蓝牙" + } + }, + { + "path": "soter/soter", + "style": { + "navigationBarTitleText": "生物认证" + } + }, + // #endif + // #ifdef APP-PLUS || MP-WEIXIN + { + "path": "ibeacon/ibeacon", + "style": { + "navigationBarTitleText": "iBeacon" + } + }, + // #endif + { + "path": "vibrate/vibrate", + "style": { + "navigationBarTitleText": "震动" + } + }, + // #ifndef MP-ALIPAY + { + "path": "websocket-socketTask/websocket-socketTask", + "style": { + "navigationBarTitleText": "websocket-socketTask" + } + }, + // #endif + { + "path": "websocket-global/websocket-global", + "style": { + "navigationBarTitleText": "websocket-global" + } + } + ] + }, + { + "root": "pages/extUI", + "pages": [{ + "path": "forms/forms", + "style": { + "navigationBarTitleText": "Form 表单" + } + }, + { + "path": "group/group", + "style": { + "navigationBarTitleText": "Group 分组" + } + }, + { + "path": "badge/badge", + "style": { + "navigationBarTitleText": "Badge 数字角标" + } + }, + { + "path": "breadcrumb/breadcrumb", + "style": { + "navigationBarTitleText": "Breadcrumb 面包屑" + } + }, + { + "path": "countdown/countdown", + "style": { + "navigationBarTitleText": "Countdown 倒计时" + } + }, + { + "path": "drawer/drawer", + "style": { + "navigationBarTitleText": "Drawer 抽屉" + } + }, + { + "path": "icons/icons", + "style": { + "navigationBarTitleText": "Icons 图标" + } + }, + { + "path": "load-more/load-more", + "style": { + "navigationBarTitleText": "LoadMore 加载更多" + } + }, + { + "path": "nav-bar/nav-bar", + "style": { + "navigationBarTitleText": "NavBar 导航栏", + "navigationStyle": "custom", + "enablePullDownRefresh": true, + "app-plus": { + "titleNView": false, + "bounce": "none", + "pullToRefresh": { + "style": "circle", + "offset": "70px" + } + } + } + }, + { + "path": "number-box/number-box", + "style": { + "navigationBarTitleText": "NumberBox 数字输入框" + } + }, + { + "path": "popup/popup", + "style": { + "navigationBarTitleText": "Popup 弹出层", + "app-plus": { + "softinputMode": "adjustResize" + } + } + }, + { + "path": "segmented-control/segmented-control", + "style": { + "navigationBarTitleText": "SegmentedControl 分段器" + } + }, + { + "path": "tag/tag", + "style": { + "navigationBarTitleText": "Tag 标签" + } + }, + { + "path": "list/list", + "style": { + "navigationBarTitleText": "List 列表" + } + }, + { + "path": "card/card", + "style": { + "navigationBarTitleText": "Card 卡片" + } + }, + { + "path": "collapse/collapse", + "style": { + "navigationBarTitleText": "Collapse 折叠面板" + } + }, + { + "path": "pagination/pagination", + "style": { + "navigationBarTitleText": "Pagination 分页器" + } + }, + { + "path": "swiper-dot/swiper-dot", + "style": { + "navigationBarTitleText": "SwiperDot 轮播图指示点", + "mp-baidu": { + "disableSwipeBack": true + } + } + }, + { + "path": "grid/grid", + "style": { + "navigationBarTitleText": "Grid 宫格" + } + }, + { + "path": "rate/rate", + "style": { + "navigationBarTitleText": "Rate 评分" + } + }, + { + "path": "steps/steps", + "style": { + "navigationBarTitleText": "Steps 步骤条" + } + }, + { + "path": "notice-bar/notice-bar", + "style": { + "navigationBarTitleText": "NoticeBar 通告栏" + } + }, + { + "path": "swipe-action/swipe-action", + "style": { + "navigationBarTitleText": "SwipeAction 滑动操作", + "app-plus": { + "bounce": "none" + } + } + }, + { + "path": "search-bar/search-bar", + "style": { + "navigationBarTitleText": "SearchBar 搜索栏" + } + }, + { + "path": "calendar/calendar", + "style": { + "navigationBarTitleText": "Calendar 日历" + } + }, + { + "path": "indexed-list/indexed-list", + "style": { + "navigationBarTitleText": "IndexedList 索引列表", + "mp-weixin": { + "disableScroll": true + }, + "app-plus": { + "bounce": "none" + }, + "mp-alipay": { + "allowsBounceVertical": "NO" + }, + "mp-baidu": { + "disableScroll": true + } + } + }, + { + "path": "fab/fab", + "style": { + "navigationBarTitleText": "Fab 悬浮按钮" + } + }, + { + "path": "fav/fav", + "style": { + "navigationBarTitleText": "Fav 收藏按钮" + } + }, + { + "path": "goods-nav/goods-nav", + "style": { + "navigationBarTitleText": "GoodsNav 商品导航" + } + }, + { + "path": "section/section", + "style": { + "navigationBarTitleText": "Section 标题栏" + } + }, + { + "path": "transition/transition", + "style": { + "navigationBarTitleText": "Transition 过渡动画" + } + }, + { + "path": "title/title", + "style": { + "navigationBarTitleText": "Title 章节标题" + } + }, + { + "path": "tooltip/tooltip", + "style": { + "navigationBarTitleText": "Tooltip 文字提示" + } + }, + { + "path": "link/link", + "style": { + "navigationBarTitleText": "Link 链接" + } + }, + { + "path": "combox/combox", + "style": { + "navigationBarTitleText": "Combox 组合框" + } + }, + { + "path": "list/chat", + "style": {} + }, + { + "path": "table/table", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + }, + { + "path": "dateformat/dateformat", + "style": { + "navigationBarTitleText": "Dateformat 日期格式化", + "enablePullDownRefresh": false + } + }, + { + "path": "data-checkbox/data-checkbox", + "style": { + "navigationBarTitleText": "DataCheckbox 单选复选框", + "enablePullDownRefresh": false + } + }, + { + "path": "easyinput/easyinput", + "style": { + "navigationBarTitleText": "Easyinput 增强输入框", + "enablePullDownRefresh": false + } + }, + { + "path": "data-picker/data-picker", + "style": { + "navigationBarTitleText": "DataPicker 级联选择", + "enablePullDownRefresh": false + } + }, + { + "path": "data-select/data-select", + "style": { + "navigationBarTitleText": "DataSelect 下拉框", + "enablePullDownRefresh": false + } + }, + { + "path": "datetime-picker/datetime-picker", + "style": { + "navigationBarTitleText": "DatetimePicker 日期时间", + "enablePullDownRefresh": false + } + }, + { + "path": "row/row", + "style": { + "navigationBarTitleText": "Layout 布局", + "enablePullDownRefresh": false + } + }, + { + "path": "file-picker/file-picker", + "style": { + "navigationBarTitleText": "FilePicker 文件选择上传", + "enablePullDownRefresh": false + } + }, + { + "path": "space/space", + "style": { + "navigationBarTitleText": "间距", + "enablePullDownRefresh": false + } + }, + { + "path": "font/font", + "style": { + "navigationBarTitleText": "字体", + "enablePullDownRefresh": false + } + }, + { + "path": "color/color", + "style": { + "navigationBarTitleText": "颜色", + "enablePullDownRefresh": false + } + }, + { + "path": "radius/radius", + "style": { + "navigationBarTitleText": "圆角", + "enablePullDownRefresh": false + } + }, + { + "path": "button/button", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + } + ] + }, + { + "root": "pages/template", + "pages": [ + // #ifndef VUE3 + { + "path": "ucharts/ucharts", + "style": { + "navigationBarTitleText": "uCharts 图表" + } + }, + // #endif + { + "path": "nav-default/nav-default", + "style": { + "navigationBarTitleText": "默认导航栏" + } + }, + { + "path": "component-communication/component-communication", + "style": { + "navigationBarTitleText": "组件通讯" + } + }, + // #ifdef APP-PLUS || H5 || MP-ALIPAY + { + "path": "nav-transparent/nav-transparent", + "style": { + "navigationBarTitleText": "透明渐变导航栏", + "transparentTitle": "auto" + } + }, + // #endif + // #ifdef APP-PLUS || H5 + { + "path": "nav-button/nav-button", + "style": { + "navigationBarTitleText": "导航栏带自定义按钮", + "app-plus": { + "titleNView": { + "buttons": [{ + "type": "share" + }, + { + "type": "favorite" + } + ] + } + } + } + }, + // #endif + // #ifdef APP-PLUS || H5 || MP-ALIPAY + { + "path": "nav-image/nav-image", + "style": { + "navigationBarBackgroundColor": "#FFFFFF", + "navigationBarTextStyle": "black", + "titleImage": "https://web-assets.dcloud.net.cn/unidoc/zh/logo1@2x.png" + } + }, + // #endif + // #ifdef APP-PLUS || H5 + { + "path": "nav-city-dropdown/nav-city-dropdown", + "style": { + "navigationBarTitleText": "导航栏带城市选择", + "app-plus": { + "titleNView": { + "buttons": [{ + "text": "北京市", + "fontSize": "14", + "select": true, + "width": "auto" + }] + } + } + } + }, + { + "path": "nav-dot/nav-dot", + "style": { + "navigationBarTitleText": "导航栏带红点和角标", + "app-plus": { + "titleNView": { + "buttons": [{ + "text": "消息", + "fontSize": "14", + "redDot": true + }, + { + "text": "关注", + "fontSize": "14", + "badgeText": "12" + } + ] + } + } + } + }, + { + "path": "nav-search-input/nav-search-input", + "style": { + "navigationBarTitleText": "导航栏带搜索框", + "app-plus": { + "titleNView": { + "type": "transparent", + "titleColor": "#fff", + "backgroundColor": "#007AFF", + "buttons": [{ + "fontSrc": "/static/uni.ttf", + "text": "\ue537", + "width": "40px", + "fontSize": "28px", + "color": "#fff", + "background": "rgba(0,0,0,0)" + }], + "searchInput": { + "backgroundColor": "#fff", + "borderRadius": "6px", + "placeholder": "请输入地址 如:大钟寺", + "disabled": true + } + } + } + } + }, + { + "path": "nav-search-input/detail/detail", + "style": { + "navigationBarTitleText": "搜索", + "app-plus": { + "titleNView": { + "titleColor": "#fff", + "backgroundColor": "#007AFF", + "buttons": [{ + "fontSrc": "/static/uni.ttf", + "text": "\ue537", + "width": "auto", + "fontSize": "28px", + "color": "#fff" + }], + "searchInput": { + "backgroundColor": "#fff", + "borderRadius": "6px", + "placeholder": "请输入地址 如:大钟寺", + "autoFocus": true + } + } + } + } + }, + // #endif + { + "path": "list2detail-list/list2detail-list", + "style": { + "navigationBarTitleText": "列表到详情示例", + "enablePullDownRefresh": true + } + }, + { + "path": "list2detail-detail/list2detail-detail", + "style": { + "navigationBarTitleText": "详情", + "app-plus": { + "titleNView": { + "type": "transparent", + "buttons": [{ + "type": "share" + }] + } + }, + "h5": { + "titleNView": { + "type": "transparent", + "buttons": [] + } + } + } + }, + { + "path": "tabbar/tabbar", + "style": { + "navigationBarTitleText": "可拖动顶部选项卡" + } + }, + { + "path": "tabbar/detail/detail", + "style": { + "navigationBarTitleText": "详情页面" + } + }, + // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-QQ + { + "path": "swiper-vertical/swiper-vertical", + "style": { + "navigationBarTitleText": "上下滑动切换视频", + "app-plus": { + "titleNView": false + } + } + }, + { + "path": "swiper-list/swiper-list", + "style": { + "navigationBarTitleText": "swiper-list" + } + }, + // #endif + // #ifdef APP-PLUS + { + "path": "swiper-list-nvue/swiper-list-nvue", + "style": { + "navigationBarTitleText": "swiper-list" + } + }, + // #endif + { + "path": "scheme/scheme", + "style": { + "navigationBarTitleText": "打开外部应用" + } + }, + // #ifdef APP-PLUS || MP-WEIXIN || MP-QQ || H5 + // #ifndef VUE3 + { + "path": "vant-button/vant-button", + "style": { + "navigationBarTitleText": "微信自定义组件示例", + "usingComponents": { + "van-button": "/wxcomponents/vant/button/index" + } + } + }, + // #endif + // #endif + // #ifdef APP || H5 + { + "path" : "renderjs/renderjs", + "style" : + { + "navigationBarTitleText" : "renderjs" + } + }, + // #endif + { + "path": "global/global", + "style": { + "navigationBarTitleText": "GlobalData和vuex" + } + }, + // #ifdef VUE3 + { + "path" : "pinia/pinia", + "style" : + { + "navigationBarTitleText" : "pinia" + } + }, + // #endif + // #ifdef APP + { + "path" : "vuex-nvue/vuex-nvue", + "style" : + { + "navigationBarTitleText" : "vuex-nvue" + } + }, + // #endif + { + "path" : "vuex-vue/vuex-vue", + "style" : + { + "navigationBarTitleText" : "vuex-vue" + } + }, + { + "path" : "crypto-api/crypto-api", + "style" : + { + "navigationBarTitleText" : "crypto" + } + } + ] + } + ], "globalStyle": { - // #ifdef MP-360 - "navigationStyle": "custom", - // #endif - "pageOrientation": "portrait", - "navigationBarTextStyle": "white", - "navigationBarTitleText": "Hello uniapp", - "navigationBarBackgroundColor": "#007AFF", - "backgroundColor": "#F8F8F8", - "backgroundColorTop": "#F4F5F6", - "backgroundColorBottom": "#F4F5F6" - }, - "tabBar": { - "color": "#7A7E83", - "selectedColor": "#007AFF", - "borderStyle": "black", - "backgroundColor": "#F8F8F8", - "list": [{ - "pagePath": "pages/tabBar/component/component", - "iconPath": "static/component.png", - "selectedIconPath": "static/componentHL.png", - "text": "内置组件" - }, - { - "pagePath": "pages/tabBar/API/API", - "iconPath": "static/api.png", - "selectedIconPath": "static/apiHL.png", - "text": "接口" - }, { - "pagePath": "pages/tabBar/extUI/extUI", - "iconPath": "static/extui.png", - "selectedIconPath": "static/extuiHL.png", - "text": "扩展组件" - }, { - "pagePath": "pages/tabBar/template/template", - "iconPath": "static/template.png", - "selectedIconPath": "static/templateHL.png", - "text": "模板" - } - ] - } -} \ No newline at end of file + "pageOrientation": "portrait", + "navigationBarTitleText": "Hello uniapp", + "navigationBarTextStyle": "white", + "navigationBarBackgroundColor": "#007AFF", + "backgroundColor": "#F8F8F8", + "backgroundColorTop": "#F4F5F6", + "backgroundColorBottom": "#F4F5F6", + "mp-360": { + "navigationStyle": "custom" + }, + "h5": { + "maxWidth": 1190, + "navigationBarTextStyle": "black", + "navigationBarBackgroundColor": "#F1F1F1" + } + }, + "tabBar": { + "color": "#7A7E83", + "selectedColor": "#007AFF", + "borderStyle": "black", + "backgroundColor": "#F8F8F8", + "list": [{ + "pagePath": "pages/tabBar/component/component", + "iconPath": "static/component.png", + "selectedIconPath": "static/componentHL.png", + "text": "内置组件" + }, + { + "pagePath": "pages/tabBar/API/API", + "iconPath": "static/api.png", + "selectedIconPath": "static/apiHL.png", + "text": "接口" + }, { + "pagePath": "pages/tabBar/extUI/extUI", + "iconPath": "static/extui.png", + "selectedIconPath": "static/extuiHL.png", + "text": "扩展组件" + }, { + "pagePath": "pages/tabBar/template/template", + "iconPath": "static/template.png", + "selectedIconPath": "static/templateHL.png", + "text": "模板" + } + ] + } +} diff --git a/pages/API/action-sheet/action-sheet.vue b/pages/API/action-sheet/action-sheet.vue index ddf2a477..9e44c1f3 100644 --- a/pages/API/action-sheet/action-sheet.vue +++ b/pages/API/action-sheet/action-sheet.vue @@ -3,7 +3,7 @@ - +
@@ -12,23 +12,49 @@ export default { data() { return { - title: 'action-sheet' + title: 'action-sheet', + buttonRect: {} } }, + // #ifdef H5 + onReady() { + this.getNodeInfo() + window.addEventListener('resize', this.getNodeInfo) + }, + beforeDestroy() { + window.removeEventListener('resize', this.getNodeInfo) + }, + // #endif methods: { actionSheetTap() { - uni.showActionSheet({ - title:'标题', + const that = this + uni.showActionSheet({ + title: '标题', itemList: ['item1', 'item2', 'item3', 'item4'], + popover: { + // 104: navbar + topwindow 高度,暂时 fix createSelectorQuery 在 pc 上获取 top 不准确的 bug + top: that.buttonRect.top + 104 + that.buttonRect.height, + left: that.buttonRect.left + that.buttonRect.width / 2 + }, success: (e) => { console.log(e.tapIndex); uni.showToast({ - title:"点击了第" + e.tapIndex + "个选项", - icon:"none" + title: "点击了第" + e.tapIndex + "个选项", + icon: "none" }) } }) + }, + // #ifdef H5 + getNodeInfo() { + uni.createSelectorQuery().select('.target').boundingClientRect().exec((ret) => { + const rect = ret[0] + if (rect) { + this.buttonRect = rect + } + }); } + // #endif } } diff --git a/pages/API/add-phone-contact/add-phone-contact.vue b/pages/API/add-phone-contact/add-phone-contact.vue index cadd6679..f4c39a37 100644 --- a/pages/API/add-phone-contact/add-phone-contact.vue +++ b/pages/API/add-phone-contact/add-phone-contact.vue @@ -8,7 +8,7 @@ 名称 - + @@ -16,7 +16,7 @@ 手机号 - + diff --git a/pages/API/animation/animation.vue b/pages/API/animation/animation.vue index 1c7a0d8a..3b8c9a5d 100644 --- a/pages/API/animation/animation.vue +++ b/pages/API/animation/animation.vue @@ -110,7 +110,7 @@ .animation-buttons { padding:30rpx 0; width: 100%; - height: 360rpx; + /* height: 360rpx; */ } .animation-button { diff --git a/pages/API/background-audio/background-audio.vue b/pages/API/background-audio/background-audio.vue index 4860b65b..7f7688df 100644 --- a/pages/API/background-audio/background-audio.vue +++ b/pages/API/background-audio/background-audio.vue @@ -35,14 +35,14 @@ + + diff --git a/pages/API/get-location/get-location.vue b/pages/API/get-location/get-location.vue index fd323388..a1527707 100644 --- a/pages/API/get-location/get-location.vue +++ b/pages/API/get-location/get-location.vue @@ -31,17 +31,13 @@ diff --git a/pages/API/get-node-info/get-node-info.test.js b/pages/API/get-node-info/get-node-info.test.js new file mode 100644 index 00000000..509dff06 --- /dev/null +++ b/pages/API/get-node-info/get-node-info.test.js @@ -0,0 +1,32 @@ +describe('测试 css 变量', () => { + let page + const isApp = process.env.UNI_PLATFORM.includes('app'); + beforeAll(async () => { + // 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象) + page = await program.reLaunch('/pages/API/get-node-info/get-node-info') + await page.waitFor(1000) + }) + + it('css var', async () => { + + if (isApp) { + const element1 = await page.$('.box1') + const size = await element1.size() + expect(size.height > 0).toBe(true) + + const element2 = await page.$('.box2') + const size2 = await element2.size() + expect(size2.height === 0).toBe(true) + + const element3 = await page.$('.box3') + const size3 = await element3.size() + expect(size3.height === 0).toBe(true) + + const element4 = await page.$('.box4') + const size4 = await element4.size() + expect(size4.height > size.height).toBe(true) + } else { + expect(1).toBe(1) + } + }) +}); diff --git a/pages/API/get-node-info/get-node-info.vue b/pages/API/get-node-info/get-node-info.vue index 67a4419b..0b41e305 100644 --- a/pages/API/get-node-info/get-node-info.vue +++ b/pages/API/get-node-info/get-node-info.vue @@ -20,9 +20,16 @@ + + + + + + + + - + diff --git a/pages/API/login/login.vue b/pages/API/login/login.vue index a58e657f..e6361475 100644 --- a/pages/API/login/login.vue +++ b/pages/API/login/login.vue @@ -1,121 +1,325 @@ diff --git a/pages/API/map-search/map-search.nvue b/pages/API/map-search/map-search.nvue index 79296300..9dc8ef61 100644 --- a/pages/API/map-search/map-search.nvue +++ b/pages/API/map-search/map-search.nvue @@ -11,7 +11,7 @@ diff --git a/pages/API/request/request.vue b/pages/API/request/request.vue index d3b0f948..6632f450 100644 --- a/pages/API/request/request.vue +++ b/pages/API/request/request.vue @@ -71,7 +71,8 @@ } }); }, - _requestPromise() { + _requestPromise() { + // #ifndef VUE3 uni.request({ url: requestUrl, dataType: 'text', @@ -87,7 +88,6 @@ duration: duration }); this.res = '请求结果 : ' + JSON.stringify(res[1]); - this.loading = false; }).catch(err => { console.log('request fail', err); @@ -97,16 +97,62 @@ }); this.loading = false; - }); + }); + // #endif + + // #ifdef VUE3 + uni.request({ + url: requestUrl, + dataType: 'text', + data: { + noncestr: Date.now() + } + }).then(res => { + console.log('request success', res); + uni.showToast({ + title: '请求成功', + icon: 'success', + mask: true, + duration: duration + }); + this.res = '请求结果 : ' + JSON.stringify(res); + + this.loading = false; + }).catch(err => { + console.log('request fail', err); + uni.showModal({ + content: err.errMsg, + showCancel: false + }); + + this.loading = false; + }); + // #endif }, - async _requestAwait() { - const [err, res] = await uni.request({ + async _requestAwait() { + let res, err + // #ifndef VUE3 + [err, res] = await uni.request({ url: requestUrl, dataType: 'text', data: { noncestr: Date.now() } - }); + }); + // #endif + // #ifdef VUE3 + try { + res = await uni.request({ + url: requestUrl, + dataType: 'text', + data: { + noncestr: Date.now() + } + }); + } catch(e){ + err=e + } + // #endif if (err) { console.log('request fail', err); uni.showModal({ diff --git a/pages/API/scan-code/scan-code.vue b/pages/API/scan-code/scan-code.vue index c5aa4444..b5ed860e 100644 --- a/pages/API/scan-code/scan-code.vue +++ b/pages/API/scan-code/scan-code.vue @@ -37,25 +37,8 @@ success: (res) => { this.result = res.result }, - fail: (err) => { - // #ifdef MP - uni.getSetting({ - success: (res) => { - let authStatus = res.authSetting['scope.camera']; - if (!authStatus) { - uni.showModal({ - title: '授权失败', - content: 'Hello uni-app需要使用您的相机,请在设置界面打开相关权限', - success: (res) => { - if (res.confirm) { - uni.openSetting() - } - } - }) - } - } - }) - // #endif + fail: (err) => { + // 需要注意的是小程序扫码不需要申请相机权限 } }); } diff --git a/pages/API/set-navigation-bar-title/set-navigation-bar-title.test.js b/pages/API/set-navigation-bar-title/set-navigation-bar-title.test.js new file mode 100644 index 00000000..93b017c9 --- /dev/null +++ b/pages/API/set-navigation-bar-title/set-navigation-bar-title.test.js @@ -0,0 +1,14 @@ +describe('pages/API/set-navigation-bar-title/set-navigation-bar-title.vue', () => { + let page + beforeAll(async () => { + // 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象) + page = await program.reLaunch('/pages/API/set-navigation-bar-title/set-navigation-bar-title') + const waitTime = process.env.UNI_PLATFORM === "mp-weixin" ? 10000 : 5000 + await page.waitFor(waitTime) + page = await program.currentPage() + }) + it('set-navigation-bar-title 组件标题', async () => { + let view = await page.$('.common-page-head-title') + expect(await view.text()).toBe('nav-default') + }) +}) diff --git a/pages/API/share/share.vue b/pages/API/share/share.vue index d51d7384..90e8701a 100644 --- a/pages/API/share/share.vue +++ b/pages/API/share/share.vue @@ -35,7 +35,7 @@ - + @@ -72,7 +72,7 @@ return { title: this.shareText ? this.shareText : "欢迎体验uni-app", path: '/pages/tabBar/component/component', - imageUrl:this.image ? this.image : 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/app/share-logo@3.png' + imageUrl:this.image ? this.image : 'https://web-assets.dcloud.net.cn/unidoc/zh/share-logo@3.png' } }, onUnload:function(){ @@ -135,7 +135,7 @@ methods: { async share(e) { console.log('分享通道:'+ e.id +'; 分享类型:' + this.shareType); - + if(!this.shareText && (this.shareType === 1 || this.shareType === 0)){ uni.showModal({ content:'分享内容不能为空', @@ -143,7 +143,7 @@ }) return; } - + if(!this.image && (this.shareType === 2 || this.shareType === 0)){ uni.showModal({ content:'分享图片不能为空', @@ -151,10 +151,10 @@ }) return; } - + let shareOPtions = { provider: e.id, - scene: e.type && e.type === 'WXSenceTimeline' ? 'WXSenceTimeline' : 'WXSceneSession', //WXSceneSession”分享到聊天界面,“WXSenceTimeline”分享到朋友圈,“WXSceneFavorite”分享到微信收藏 + scene: e.type && e.type === 'WXSceneTimeline' ? 'WXSceneTimeline' : 'WXSceneSession', //WXSceneSession”分享到聊天界面,“WXSceneTimeline”分享到朋友圈,“WXSceneFavorite”分享到微信收藏 type: this.shareType, success: (e) => { console.log('success', e); @@ -174,7 +174,7 @@ console.log('分享操作结束!') } } - + switch (this.shareType){ case 0: shareOPtions.summary = this.shareText; @@ -189,7 +189,7 @@ shareOPtions.imageUrl = this.image; break; case 5: - shareOPtions.imageUrl = this.image ? this.image : 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/app/share-logo@3.png' + shareOPtions.imageUrl = this.image ? this.image : 'https://web-ext-storage.dcloud.net.cn/hello-uni-app/share.png' shareOPtions.title = '欢迎体验uniapp'; shareOPtions.miniProgram = { id:'gh_33446d7f7a26', @@ -201,8 +201,8 @@ default: break; } - - if(shareOPtions.type === 0 && plus.os.name === 'iOS'){//如果是图文分享,且是ios平台,则压缩图片 + + if(shareOPtions.type === 0 && plus.os.name === 'iOS'){//如果是图文分享,且是ios平台,则压缩图片 shareOPtions.imageUrl = await this.compress(); } if(shareOPtions.type === 1 && shareOPtions.provider === 'qq'){//如果是分享文字到qq,则必须加上href和title @@ -253,7 +253,7 @@ console.log('after' + localPath); // 压缩size plus.io.resolveLocalFileSystemURL(localPath, (entry) => { - entry.file((file) => {// 可通过entry对象操作图片 + entry.file((file) => {// 可通过entry对象操作图片 console.log('getFile:' + JSON.stringify(file)); if(file.size > 20480) {// 压缩后size 大于20Kb plus.zip.compressImage({ diff --git a/pages/API/show-loading/show-loading.vue b/pages/API/show-loading/show-loading.vue index 3f1c8f9d..271b05f4 100644 --- a/pages/API/show-loading/show-loading.vue +++ b/pages/API/show-loading/show-loading.vue @@ -34,12 +34,13 @@ hideLoading: function() { uni.hideLoading(); } - }, + } + // #ifdef MP-ALIPAY + , onUnload() { - // #ifdef MP-ALIPAY this._showTimer && clearTimeout(this._showTimer); - // #endif - } + } + // #endif } diff --git a/pages/API/storage/storage.vue b/pages/API/storage/storage.vue index 239cd3c2..952192eb 100644 --- a/pages/API/storage/storage.vue +++ b/pages/API/storage/storage.vue @@ -8,7 +8,7 @@ key - + @@ -16,7 +16,7 @@ value - + @@ -91,7 +91,12 @@ success: (res) => { uni.showModal({ title: '存储数据成功', - content: ' ', + // #ifndef MP-ALIPAY + content: JSON.stringify(res.errMsg), + // #endif + // #ifdef MP-ALIPAY + content: data, + // #endif showCancel:false }) }, @@ -123,4 +128,4 @@ background-color: #007aff; color: #ffffff; } - + diff --git a/pages/API/subnvue/subnvue.vue b/pages/API/subnvue/subnvue.vue index 0003f7f9..80746c23 100644 --- a/pages/API/subnvue/subnvue.vue +++ b/pages/API/subnvue/subnvue.vue @@ -15,7 +15,7 @@ @pause="closeMask" :controls="false" src="https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/%E7%AC%AC1%E8%AE%B2%EF%BC%88uni-app%E4%BA%A7%E5%93%81%E4%BB%8B%E7%BB%8D%EF%BC%89-%20DCloud%E5%AE%98%E6%96%B9%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B@20181126-lite.m4v" - @error="videoErrorCallback" poster="https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/poster.png"> + @error="videoErrorCallback" poster="https://web-assets.dcloud.net.cn/unidoc/zh/poster.png"> diff --git a/pages/API/subnvue/subnvue/nav.nvue b/pages/API/subnvue/subnvue/nav.nvue deleted file mode 100644 index 4c27782b..00000000 --- a/pages/API/subnvue/subnvue/nav.nvue +++ /dev/null @@ -1,57 +0,0 @@ - - - - - diff --git a/pages/API/toast/toast.vue b/pages/API/toast/toast.vue index a7f2e693..2fd0ccd0 100644 --- a/pages/API/toast/toast.vue +++ b/pages/API/toast/toast.vue @@ -5,14 +5,19 @@ + - + + + - - + + + + @@ -24,40 +29,54 @@ title: 'toast' } }, + // #ifdef MP-ALIPAY + onUnload() { + this._showTimer && clearTimeout(this._showTimer); + }, + // #endif methods: { - toast1Tap: function () { + toast1Tap: function() { uni.showToast({ title: "默认" }) }, - toast2Tap: function () { + toast2Tap: function() { uni.showToast({ title: "duration 3000", duration: 3000 }) }, - toast3Tap: function () { + toast3Tap: function() { uni.showToast({ title: "loading", icon: "loading", duration: 5000 }) + // #ifdef MP-ALIPAY + this._showTimer = setTimeout(() => { + // icon 是 loading 时,showToast 实际执行的是 showLoading + my.hideLoading() + // 执行完所有代码再清除定时器 + clearTimeout(this._showTimer); + }, 3000) + // #endif + }, - toast4Tap: function () { + toast4Tap: function() { uni.showToast({ title: "logo", image: "../../../static/uni.png" }) }, // #ifdef APP-PLUS - toast5Tap: function () { - uni.showToast({ - title: "显示一段轻提示", - position:'bottom' + toast5Tap: function() { + uni.showToast({ + title: "显示一段轻提示", + position: 'bottom' }) }, // #endif - hideToast: function () { + hideToast: function() { uni.hideToast() } } diff --git a/pages/API/vibrate/vibrate.vue b/pages/API/vibrate/vibrate.vue index 4dedb00b..41a413a3 100644 --- a/pages/API/vibrate/vibrate.vue +++ b/pages/API/vibrate/vibrate.vue @@ -30,7 +30,10 @@ export default { }); }, shortshock() { - uni.vibrateShort({ + uni.vibrateShort({ + // #ifdef MP-HARMONY + type:"medium", + // #endif success: function() { console.log('success'); } diff --git a/pages/API/voice/voice.vue b/pages/API/voice/voice.vue index 2f27d5e7..6eec279a 100644 --- a/pages/API/voice/voice.vue +++ b/pages/API/voice/voice.vue @@ -61,7 +61,7 @@ // #ifdef APP-PLUS import permision from "@/common/permission.js" // #endif - var util = require('../../../common/util.js') + import * as util from '../../../common/util.js' var playTimeInterval = null; var recordTimeInterval = null; var recorderManager = null; diff --git a/pages/API/websocket-global/websocket-global.vue b/pages/API/websocket-global/websocket-global.vue index fbcea692..3d7f1acc 100644 --- a/pages/API/websocket-global/websocket-global.vue +++ b/pages/API/websocket-global/websocket-global.vue @@ -126,11 +126,6 @@ + diff --git a/pages/component/cover-view/cover-view.vue b/pages/component/cover-view/cover-view.vue index cade9e95..ace1bf94 100644 --- a/pages/component/cover-view/cover-view.vue +++ b/pages/component/cover-view/cover-view.vue @@ -52,7 +52,8 @@ + \ No newline at end of file diff --git a/pages/component/editor/iconfont.ttf b/pages/component/editor/iconfont.ttf new file mode 100644 index 00000000..8ade3a4c Binary files /dev/null and b/pages/component/editor/iconfont.ttf differ diff --git a/pages/component/form/form.vue b/pages/component/form/form.vue index e5d55deb..2b9e0c6d 100644 --- a/pages/component/form/form.vue +++ b/pages/component/form/form.vue @@ -48,7 +48,7 @@ + diff --git a/pages/component/picker-view/picker-view.vue b/pages/component/picker-view/picker-view.vue index fb193c98..54ab4ad1 100644 --- a/pages/component/picker-view/picker-view.vue +++ b/pages/component/picker-view/picker-view.vue @@ -6,7 +6,7 @@ 日期:{{year}}年{{month}}月{{day}}日 - + {{item}}年 @@ -55,7 +55,14 @@ * 解决动态设置indicator-style不生效的问题 */ visible: true, - indicatorStyle: `height: ${Math.round(uni.getSystemInfoSync().screenWidth/(750/100))}px;` + // indicatorStyle: `height: ${Math.round(uni.getSystemInfoSync().screenWidth/(750/100))}px;` + indicatorStyle: `height: 50px;`, + // #ifdef MP-KUAISHOU + maskStyle: "padding:10px 0" + // #endif + // #ifndef MP-KUAISHOU + maskStyle: "" + // #endif } }, methods: { @@ -70,7 +77,7 @@ diff --git a/pages/component/progress/progress.vue b/pages/component/progress/progress.vue index 89492505..ba79925c 100644 --- a/pages/component/progress/progress.vue +++ b/pages/component/progress/progress.vue @@ -14,16 +14,15 @@ - + - + - - + + + + + diff --git a/pages/component/video/video.vue b/pages/component/video/video.vue index db4543fb..07674318 100644 --- a/pages/component/video/video.vue +++ b/pages/component/video/video.vue @@ -1,93 +1,94 @@ - - - - + + + + diff --git a/pages/component/view/view.test.js b/pages/component/view/view.test.js new file mode 100644 index 00000000..4755f380 --- /dev/null +++ b/pages/component/view/view.test.js @@ -0,0 +1,36 @@ +describe('pages/component/view/view.vue', () => { + let page + beforeAll(async () => { + // 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象) + page = await program.reLaunch('/pages/component/view/view') + await page.waitFor(1000) + }) + + /** + * 测试步骤 + * 1. 检测页面标题是否为 view + */ + it('view 组件标题', async () => { + let view = await page.$('.common-page-head-title') + expect(await view.text()).toBe('view') + }) + /** + * 测试步骤 + * 1. uni-flex 的个数 + * 2. flex-item 的个数 + */ + it('view 个数', async () => { + let viewLen = await page.$$('.uni-flex') + expect(viewLen.length).toBe(18) + let viewItemLen = await page.$$('.flex-item') + expect(viewItemLen.length).toBe(6) + }) + /** + * 测试步骤 + * 1. 第一个颜色块的色值是否为 rgb(247, 98, 96) + */ + it('view 前三个元素颜色', async () => { + let viewRed = await page.$('.uni-bg-red') + expect(await viewRed.style('backgroundColor')).toBe('rgb(247, 98, 96)') + }) +}) diff --git a/pages/component/view/view.vue b/pages/component/view/view.vue index c7e9a9b6..e095362d 100644 --- a/pages/component/view/view.vue +++ b/pages/component/view/view.vue @@ -138,5 +138,9 @@ .desc { /* text-indent: 40rpx; */ + } + .flex-pc { + display: flex; + justify-content: center; } diff --git a/pages/component/web-view-local/issue-17581.test.js b/pages/component/web-view-local/issue-17581.test.js new file mode 100644 index 00000000..e9c46d4d --- /dev/null +++ b/pages/component/web-view-local/issue-17581.test.js @@ -0,0 +1,29 @@ +const platformInfo = process.env.uniTestPlatformInfo.toLocaleLowerCase() +const isHarmony = platformInfo.startsWith('harmony') + +describe('pages/component/web-view-local/issue-17581.vue', () => { + if (!isHarmony) { + it('skip', async () => { + expect(1).toBe(1) + }) + return + } + let page + beforeAll(async () => { + page = await program.reLaunch('/pages/component/web-view-local/issue-17581') + await page.waitFor(1000) + }) + + it('click position', async () => { + await program.tap({ + x: 100, + y: 400 + }) + await page.waitFor(200) + const { + clickClientY + } = await page.data() + expect(clickClientY).toBeLessThan(200) + expect(clickClientY).toBeGreaterThan(0) + }) +}) diff --git a/pages/component/web-view-local/issue-17581.vue b/pages/component/web-view-local/issue-17581.vue new file mode 100644 index 00000000..c347105e --- /dev/null +++ b/pages/component/web-view-local/issue-17581.vue @@ -0,0 +1,28 @@ + + + diff --git a/pages/component/web-view/web-view.vue b/pages/component/web-view/web-view.vue index dce6413e..ebc19e19 100644 --- a/pages/component/web-view/web-view.vue +++ b/pages/component/web-view/web-view.vue @@ -8,7 +8,7 @@ export default { data() { return { - url: 'https://uniapp.dcloud.io/static/web-view.html' + url: 'https://hellouniapp.dcloud.net.cn/html/web-view.html' } }, onLoad(options) { diff --git a/pages/error/404.vue b/pages/error/404.vue new file mode 100644 index 00000000..02211556 --- /dev/null +++ b/pages/error/404.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/pages/extUI/badge/badge.nvue b/pages/extUI/badge/badge.nvue deleted file mode 100644 index eb289c4b..00000000 --- a/pages/extUI/badge/badge.nvue +++ /dev/null @@ -1,157 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/badge/badge.vue b/pages/extUI/badge/badge.vue new file mode 100644 index 00000000..0e39731b --- /dev/null +++ b/pages/extUI/badge/badge.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/pages/extUI/breadcrumb/breadcrumb.vue b/pages/extUI/breadcrumb/breadcrumb.vue new file mode 100644 index 00000000..78643089 --- /dev/null +++ b/pages/extUI/breadcrumb/breadcrumb.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/pages/extUI/button/button.vue b/pages/extUI/button/button.vue new file mode 100644 index 00000000..19758611 --- /dev/null +++ b/pages/extUI/button/button.vue @@ -0,0 +1,107 @@ + + + diff --git a/pages/extUI/calendar/calendar.nvue b/pages/extUI/calendar/calendar.nvue index 62f27fa7..b46d39d4 100644 --- a/pages/extUI/calendar/calendar.nvue +++ b/pages/extUI/calendar/calendar.nvue @@ -1,196 +1,136 @@ - \ No newline at end of file + flex-direction: row; +} + +.calendar-button { + flex: 1; + font-weight: bold; + font-size: 32rpx; +} + diff --git a/pages/extUI/card/card.nvue b/pages/extUI/card/card.nvue index d2f5d0f0..7cc46588 100644 --- a/pages/extUI/card/card.nvue +++ b/pages/extUI/card/card.nvue @@ -1,106 +1,136 @@ - \ No newline at end of file + diff --git a/pages/extUI/collapse/collapse.nvue b/pages/extUI/collapse/collapse.nvue deleted file mode 100644 index 9b398dea..00000000 --- a/pages/extUI/collapse/collapse.nvue +++ /dev/null @@ -1,223 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/collapse/collapse.vue b/pages/extUI/collapse/collapse.vue new file mode 100644 index 00000000..fda3e02c --- /dev/null +++ b/pages/extUI/collapse/collapse.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/pages/extUI/color/color.nvue b/pages/extUI/color/color.nvue new file mode 100644 index 00000000..7d39ee03 --- /dev/null +++ b/pages/extUI/color/color.nvue @@ -0,0 +1,150 @@ + + + + + diff --git a/pages/extUI/combox/combox.vue b/pages/extUI/combox/combox.vue index 0104c6d5..84d37064 100644 --- a/pages/extUI/combox/combox.vue +++ b/pages/extUI/combox/combox.vue @@ -1,150 +1,55 @@ - - - - - \ No newline at end of file + + + + + diff --git a/pages/extUI/countdown/countdown.nvue b/pages/extUI/countdown/countdown.nvue index 77d893b5..b9f1e286 100644 --- a/pages/extUI/countdown/countdown.nvue +++ b/pages/extUI/countdown/countdown.nvue @@ -1,163 +1,71 @@ - \ No newline at end of file + diff --git a/pages/extUI/data-checkbox/data-checkbox.vue b/pages/extUI/data-checkbox/data-checkbox.vue new file mode 100644 index 00000000..888177f7 --- /dev/null +++ b/pages/extUI/data-checkbox/data-checkbox.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/pages/extUI/data-indexed-list/data-indexed-list.vue b/pages/extUI/data-indexed-list/data-indexed-list.vue new file mode 100644 index 00000000..8562b9b2 --- /dev/null +++ b/pages/extUI/data-indexed-list/data-indexed-list.vue @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/pages/extUI/data-picker/data-picker.nvue b/pages/extUI/data-picker/data-picker.nvue new file mode 100644 index 00000000..f76ce102 --- /dev/null +++ b/pages/extUI/data-picker/data-picker.nvue @@ -0,0 +1,164 @@ + + + + + diff --git a/pages/extUI/data-select/data-select.vue b/pages/extUI/data-select/data-select.vue new file mode 100644 index 00000000..2a39eca0 --- /dev/null +++ b/pages/extUI/data-select/data-select.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/pages/extUI/dateformat/dateformat.vue b/pages/extUI/dateformat/dateformat.vue new file mode 100644 index 00000000..26003eba --- /dev/null +++ b/pages/extUI/dateformat/dateformat.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/pages/extUI/datetime-picker/datetime-picker.vue b/pages/extUI/datetime-picker/datetime-picker.vue new file mode 100644 index 00000000..562073ab --- /dev/null +++ b/pages/extUI/datetime-picker/datetime-picker.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/pages/extUI/drawer/drawer.nvue b/pages/extUI/drawer/drawer.nvue deleted file mode 100644 index 241b9847..00000000 --- a/pages/extUI/drawer/drawer.nvue +++ /dev/null @@ -1,276 +0,0 @@ - - - - \ No newline at end of file diff --git a/pages/extUI/drawer/drawer.vue b/pages/extUI/drawer/drawer.vue new file mode 100644 index 00000000..a65304ee --- /dev/null +++ b/pages/extUI/drawer/drawer.vue @@ -0,0 +1,129 @@ + + + + diff --git a/pages/extUI/easyinput/easyinput.vue b/pages/extUI/easyinput/easyinput.vue new file mode 100644 index 00000000..4f66d738 --- /dev/null +++ b/pages/extUI/easyinput/easyinput.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/pages/extUI/fab/fab.nvue b/pages/extUI/fab/fab.nvue deleted file mode 100644 index cec8a10d..00000000 --- a/pages/extUI/fab/fab.nvue +++ /dev/null @@ -1,228 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/fab/fab.vue b/pages/extUI/fab/fab.vue new file mode 100644 index 00000000..485b5409 --- /dev/null +++ b/pages/extUI/fab/fab.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/pages/extUI/fav/fav.nvue b/pages/extUI/fav/fav.nvue deleted file mode 100644 index 3d7735bd..00000000 --- a/pages/extUI/fav/fav.nvue +++ /dev/null @@ -1,180 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/fav/fav.vue b/pages/extUI/fav/fav.vue new file mode 100644 index 00000000..a29e72be --- /dev/null +++ b/pages/extUI/fav/fav.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/pages/extUI/file-picker/file-picker.vue b/pages/extUI/file-picker/file-picker.vue new file mode 100644 index 00000000..1a1e705a --- /dev/null +++ b/pages/extUI/file-picker/file-picker.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/pages/extUI/font/font.nvue b/pages/extUI/font/font.nvue new file mode 100644 index 00000000..5b87914f --- /dev/null +++ b/pages/extUI/font/font.nvue @@ -0,0 +1,53 @@ + + diff --git a/pages/extUI/forms/forms.vue b/pages/extUI/forms/forms.vue new file mode 100644 index 00000000..eb78bf95 --- /dev/null +++ b/pages/extUI/forms/forms.vue @@ -0,0 +1,355 @@ + + + + + diff --git a/pages/extUI/goods-nav/goods-nav.nvue b/pages/extUI/goods-nav/goods-nav.nvue index 5bc2c942..ccf83a74 100644 --- a/pages/extUI/goods-nav/goods-nav.nvue +++ b/pages/extUI/goods-nav/goods-nav.nvue @@ -1,38 +1,39 @@ - \ No newline at end of file + diff --git a/pages/extUI/grid/grid.nvue b/pages/extUI/grid/grid.nvue index f6dc5969..9babf6c4 100644 --- a/pages/extUI/grid/grid.nvue +++ b/pages/extUI/grid/grid.nvue @@ -1,19 +1,30 @@ - \ No newline at end of file + + /* #ifdef H5 */ + @media screen and (min-width: 768px) and (max-width: 1425px) { + .swiper { + height: 630px; + } + } + + @media screen and (min-width: 1425px) { + .swiper { + height: 830px; + } + } + + /* #endif */ + diff --git a/pages/extUI/group/group.vue b/pages/extUI/group/group.vue new file mode 100644 index 00000000..a7939e60 --- /dev/null +++ b/pages/extUI/group/group.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/pages/extUI/icons/icons.nvue b/pages/extUI/icons/icons.nvue index a21190fc..df07ec88 100644 --- a/pages/extUI/icons/icons.nvue +++ b/pages/extUI/icons/icons.nvue @@ -1,577 +1,569 @@ - - - - - \ No newline at end of file + + + + + diff --git a/pages/extUI/indexed-list/indexed-list.nvue b/pages/extUI/indexed-list/indexed-list.nvue index 0e4ab535..7cdf333a 100644 --- a/pages/extUI/indexed-list/indexed-list.nvue +++ b/pages/extUI/indexed-list/indexed-list.nvue @@ -1,25 +1,22 @@ - - - - \ No newline at end of file + + + + + + diff --git a/pages/extUI/link/link.nvue b/pages/extUI/link/link.nvue deleted file mode 100644 index 48fc0fbb..00000000 --- a/pages/extUI/link/link.nvue +++ /dev/null @@ -1,131 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/link/link.vue b/pages/extUI/link/link.vue new file mode 100644 index 00000000..2e3abf3a --- /dev/null +++ b/pages/extUI/link/link.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/pages/extUI/list/chat.vue b/pages/extUI/list/chat.vue new file mode 100644 index 00000000..08439263 --- /dev/null +++ b/pages/extUI/list/chat.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/pages/extUI/list/list.nvue b/pages/extUI/list/list.nvue index 3c0668c6..8c812910 100644 --- a/pages/extUI/list/list.nvue +++ b/pages/extUI/list/list.nvue @@ -1,159 +1,164 @@ - \ No newline at end of file + diff --git a/pages/extUI/load-more/load-more.nvue b/pages/extUI/load-more/load-more.nvue index 65e5b513..28d57edc 100644 --- a/pages/extUI/load-more/load-more.nvue +++ b/pages/extUI/load-more/load-more.nvue @@ -1,63 +1,44 @@ - \ No newline at end of file + diff --git a/pages/extUI/nav-bar/nav-bar.nvue b/pages/extUI/nav-bar/nav-bar.nvue index b126b10f..7d87e709 100644 --- a/pages/extUI/nav-bar/nav-bar.nvue +++ b/pages/extUI/nav-bar/nav-bar.nvue @@ -1,45 +1,87 @@ - \ No newline at end of file + diff --git a/pages/extUI/notice-bar/notice-bar.nvue b/pages/extUI/notice-bar/notice-bar.nvue deleted file mode 100644 index 29d3b1b1..00000000 --- a/pages/extUI/notice-bar/notice-bar.nvue +++ /dev/null @@ -1,170 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/notice-bar/notice-bar.vue b/pages/extUI/notice-bar/notice-bar.vue new file mode 100644 index 00000000..c4628f7c --- /dev/null +++ b/pages/extUI/notice-bar/notice-bar.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/pages/extUI/number-box/number-box.nvue b/pages/extUI/number-box/number-box.nvue index fc3600b8..326ae807 100644 --- a/pages/extUI/number-box/number-box.nvue +++ b/pages/extUI/number-box/number-box.nvue @@ -1,143 +1,56 @@ - \ No newline at end of file + diff --git a/pages/extUI/pagination/pagination.nvue b/pages/extUI/pagination/pagination.nvue deleted file mode 100644 index 869ac44e..00000000 --- a/pages/extUI/pagination/pagination.nvue +++ /dev/null @@ -1,184 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/pagination/pagination.vue b/pages/extUI/pagination/pagination.vue new file mode 100644 index 00000000..5c954fb8 --- /dev/null +++ b/pages/extUI/pagination/pagination.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/pages/extUI/popup/popup.nvue b/pages/extUI/popup/popup.nvue deleted file mode 100644 index 22e85334..00000000 --- a/pages/extUI/popup/popup.nvue +++ /dev/null @@ -1,384 +0,0 @@ - - - - \ No newline at end of file diff --git a/pages/extUI/popup/popup.vue b/pages/extUI/popup/popup.vue new file mode 100644 index 00000000..f0ce9d73 --- /dev/null +++ b/pages/extUI/popup/popup.vue @@ -0,0 +1,276 @@ + + + + diff --git a/pages/extUI/radius/radius.nvue b/pages/extUI/radius/radius.nvue new file mode 100644 index 00000000..64585c8a --- /dev/null +++ b/pages/extUI/radius/radius.nvue @@ -0,0 +1,145 @@ + + + diff --git a/pages/extUI/rate/rate.nvue b/pages/extUI/rate/rate.nvue index ac4e6244..d28c68b8 100644 --- a/pages/extUI/rate/rate.nvue +++ b/pages/extUI/rate/rate.nvue @@ -1,151 +1,63 @@ - \ No newline at end of file + diff --git a/pages/extUI/row/row.vue b/pages/extUI/row/row.vue new file mode 100644 index 00000000..837f98f5 --- /dev/null +++ b/pages/extUI/row/row.vue @@ -0,0 +1,230 @@ + + + + + diff --git a/pages/extUI/search-bar/search-bar.nvue b/pages/extUI/search-bar/search-bar.nvue deleted file mode 100644 index 0269b27f..00000000 --- a/pages/extUI/search-bar/search-bar.nvue +++ /dev/null @@ -1,178 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/search-bar/search-bar.vue b/pages/extUI/search-bar/search-bar.vue new file mode 100644 index 00000000..c66b6275 --- /dev/null +++ b/pages/extUI/search-bar/search-bar.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/pages/extUI/section/section.nvue b/pages/extUI/section/section.nvue deleted file mode 100644 index 18ee0164..00000000 --- a/pages/extUI/section/section.nvue +++ /dev/null @@ -1,212 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/section/section.vue b/pages/extUI/section/section.vue new file mode 100644 index 00000000..81f68dec --- /dev/null +++ b/pages/extUI/section/section.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/pages/extUI/segmented-control/segmented-control.nvue b/pages/extUI/segmented-control/segmented-control.vue similarity index 52% rename from pages/extUI/segmented-control/segmented-control.nvue rename to pages/extUI/segmented-control/segmented-control.vue index c019b3ae..dfcdc4a7 100644 --- a/pages/extUI/segmented-control/segmented-control.nvue +++ b/pages/extUI/segmented-control/segmented-control.vue @@ -1,16 +1,24 @@ - \ No newline at end of file + diff --git a/pages/extUI/space/space.nvue b/pages/extUI/space/space.nvue new file mode 100644 index 00000000..0173168f --- /dev/null +++ b/pages/extUI/space/space.nvue @@ -0,0 +1,151 @@ + + + diff --git a/pages/extUI/steps/steps.nvue b/pages/extUI/steps/steps.nvue deleted file mode 100644 index 40a31111..00000000 --- a/pages/extUI/steps/steps.nvue +++ /dev/null @@ -1,179 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/steps/steps.vue b/pages/extUI/steps/steps.vue new file mode 100644 index 00000000..da20197a --- /dev/null +++ b/pages/extUI/steps/steps.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/pages/extUI/swipe-action/swipe-action.nvue b/pages/extUI/swipe-action/swipe-action.nvue deleted file mode 100644 index c3e07a85..00000000 --- a/pages/extUI/swipe-action/swipe-action.nvue +++ /dev/null @@ -1,324 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/swipe-action/swipe-action.vue b/pages/extUI/swipe-action/swipe-action.vue new file mode 100644 index 00000000..ac74cd73 --- /dev/null +++ b/pages/extUI/swipe-action/swipe-action.vue @@ -0,0 +1,350 @@ + + + + + diff --git a/pages/extUI/swiper-dot/swiper-dot.nvue b/pages/extUI/swiper-dot/swiper-dot.nvue index d1a6bf4e..7e8d34f7 100644 --- a/pages/extUI/swiper-dot/swiper-dot.nvue +++ b/pages/extUI/swiper-dot/swiper-dot.nvue @@ -1,63 +1,74 @@ - \ No newline at end of file + diff --git a/pages/extUI/table/table.vue b/pages/extUI/table/table.vue new file mode 100644 index 00000000..0d3e4746 --- /dev/null +++ b/pages/extUI/table/table.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/pages/extUI/table/tableData.js b/pages/extUI/table/tableData.js new file mode 100644 index 00000000..9a57d0cd --- /dev/null +++ b/pages/extUI/table/tableData.js @@ -0,0 +1,193 @@ +export default [{ + "date": "2020-09-01", + "name": "Dcloud1", + "address": "上海市普陀区金沙江路 1518 弄" +}, { + "date": "2020-09-02", + "name": "Dcloud2", + "address": "上海市普陀区金沙江路 1517 弄" +}, { + "date": "2020-09-03", + "name": "Dcloud3", + "address": "上海市普陀区金沙江路 1519 弄" +}, { + "date": "2020-09-04", + "name": "Dcloud4", + "address": "上海市普陀区金沙江路 1516 弄" +}, { + "date": "2020-09-05", + "name": "Dcloud5", + "address": "上海市普陀区金沙江路 1518 弄" +}, { + "date": "2020-09-06", + "name": "Dcloud6", + "address": "上海市普陀区金沙江路 1517 弄" +}, { + "date": "2020-09-07", + "name": "Dcloud7", + "address": "上海市普陀区金沙江路 1519 弄" +}, { + "date": "2020-09-08", + "name": "Dcloud8", + "address": "上海市普陀区金沙江路 1516 弄" +}, { + "date": "2020-09-09", + "name": "Dcloud9", + "address": "上海市普陀区金沙江路 1518 弄" +}, { + "date": "2020-09-10", + "name": "Dcloud10", + "address": "上海市普陀区金沙江路 1517 弄" +}, { + "date": "2020-09-11", + "name": "Dcloud11", + "address": "上海市普陀区金沙江路 1519 弄" +}, { + "date": "2020-09-12", + "name": "Dcloud12", + "address": "上海市普陀区金沙江路 1516 弄" +}, { + "date": "2020-09-13", + "name": "Dcloud13", + "address": "上海市普陀区金沙江路 1518 弄" +}, { + "date": "2020-09-14", + "name": "Dcloud14", + "address": "上海市普陀区金沙江路 1517 弄" +}, { + "date": "2020-09-15", + "name": "Dcloud15", + "address": "上海市普陀区金沙江路 1519 弄" +}, { + "date": "2020-09-16", + "name": "Dcloud16", + "address": "上海市普陀区金沙江路 1516 弄" +}, { + "date": "2020-09-01", + "name": "Dcloud17", + "address": "上海市普陀区金沙江路 1518 弄" +}, { + "date": "2020-09-02", + "name": "Dcloud18", + "address": "上海市普陀区金沙江路 1517 弄" +}, { + "date": "2020-09-03", + "name": "Dcloud19", + "address": "上海市普陀区金沙江路 1519 弄" +}, { + "date": "2020-09-04", + "name": "Dcloud20", + "address": "上海市普陀区金沙江路 1516 弄" +}, { + "date": "2020-09-05", + "name": "Dcloud21", + "address": "上海市普陀区金沙江路 1518 弄" +}, { + "date": "2020-09-06", + "name": "Dcloud22", + "address": "上海市普陀区金沙江路 1517 弄" +}, { + "date": "2020-09-07", + "name": "Dcloud23", + "address": "上海市普陀区金沙江路 1519 弄" +}, { + "date": "2020-09-08", + "name": "Dcloud24", + "address": "上海市普陀区金沙江路 1516 弄" +}, { + "date": "2020-09-09", + "name": "Dcloud25", + "address": "上海市普陀区金沙江路 1518 弄" +}, { + "date": "2020-09-10", + "name": "Dcloud26", + "address": "上海市普陀区金沙江路 1517 弄" +}, { + "date": "2020-09-11", + "name": "Dcloud27", + "address": "上海市普陀区金沙江路 1519 弄" +}, { + "date": "2020-09-12", + "name": "Dcloud28", + "address": "上海市普陀区金沙江路 1516 弄" +}, { + "date": "2020-09-13", + "name": "Dcloud29", + "address": "上海市普陀区金沙江路 1518 弄" +}, { + "date": "2020-09-14", + "name": "Dcloud30", + "address": "上海市普陀区金沙江路 1517 弄" +}, { + "date": "2020-09-15", + "name": "Dcloud31", + "address": "上海市普陀区金沙江路 1519 弄" +}, { + "date": "2020-09-16", + "name": "Dcloud32", + "address": "上海市普陀区金沙江路 1516 弄" +}, { + "date": "2020-09-01", + "name": "Dcloud33", + "address": "上海市普陀区金沙江路 1518 弄" +}, { + "date": "2020-09-02", + "name": "Dcloud34", + "address": "上海市普陀区金沙江路 1517 弄" +}, { + "date": "2020-09-03", + "name": "Dcloud35", + "address": "上海市普陀区金沙江路 1519 弄" +}, { + "date": "2020-09-04", + "name": "Dcloud36", + "address": "上海市普陀区金沙江路 1516 弄" +}, { + "date": "2020-09-05", + "name": "Dcloud37", + "address": "上海市普陀区金沙江路 1518 弄" +}, { + "date": "2020-09-06", + "name": "Dcloud38", + "address": "上海市普陀区金沙江路 1517 弄" +}, { + "date": "2020-09-07", + "name": "Dcloud39", + "address": "上海市普陀区金沙江路 1519 弄" +}, { + "date": "2020-09-08", + "name": "Dcloud40", + "address": "上海市普陀区金沙江路 1516 弄" +}, { + "date": "2020-09-09", + "name": "Dcloud41", + "address": "上海市普陀区金沙江路 1518 弄" +}, { + "date": "2020-09-10", + "name": "Dcloud42", + "address": "上海市普陀区金沙江路 1517 弄" +}, { + "date": "2020-09-11", + "name": "Dcloud43", + "address": "上海市普陀区金沙江路 1519 弄" +}, { + "date": "2020-09-12", + "name": "Dcloud44", + "address": "上海市普陀区金沙江路 1516 弄" +}, { + "date": "2020-09-13", + "name": "Dcloud45", + "address": "上海市普陀区金沙江路 1518 弄" +}, { + "date": "2020-09-14", + "name": "Dcloud46", + "address": "上海市普陀区金沙江路 1517 弄" +}, { + "date": "2020-09-15", + "name": "Dcloud47", + "address": "上海市普陀区金沙江路 1519 弄" +}, { + "date": "2020-09-16", + "name": "Dcloud48", + "address": "上海市普陀区金沙江路 1516 弄" +}] diff --git a/pages/extUI/tag/tag.nvue b/pages/extUI/tag/tag.nvue index d1a1bf5f..1bdeff21 100644 --- a/pages/extUI/tag/tag.nvue +++ b/pages/extUI/tag/tag.nvue @@ -1,133 +1,133 @@ - \ No newline at end of file + diff --git a/pages/extUI/title/title.nvue b/pages/extUI/title/title.nvue deleted file mode 100644 index 1e972deb..00000000 --- a/pages/extUI/title/title.nvue +++ /dev/null @@ -1,201 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/title/title.vue b/pages/extUI/title/title.vue new file mode 100644 index 00000000..c2fbf015 --- /dev/null +++ b/pages/extUI/title/title.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/pages/extUI/tooltip/tooltip.vue b/pages/extUI/tooltip/tooltip.vue new file mode 100644 index 00000000..fb7802b8 --- /dev/null +++ b/pages/extUI/tooltip/tooltip.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/pages/extUI/transition/transition.nvue b/pages/extUI/transition/transition.nvue deleted file mode 100644 index c26b99b5..00000000 --- a/pages/extUI/transition/transition.nvue +++ /dev/null @@ -1,207 +0,0 @@ - - - - - \ No newline at end of file diff --git a/pages/extUI/transition/transition.vue b/pages/extUI/transition/transition.vue new file mode 100644 index 00000000..b6c24ec2 --- /dev/null +++ b/pages/extUI/transition/transition.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/pages/tabBar/API/API.nvue b/pages/tabBar/API/API.nvue index 2c778d91..b363cbdf 100644 --- a/pages/tabBar/API/API.nvue +++ b/pages/tabBar/API/API.nvue @@ -4,21 +4,21 @@ - - + + + + diff --git a/pages/tabBar/component/component.test.js b/pages/tabBar/component/component.test.js new file mode 100644 index 00000000..624f534b --- /dev/null +++ b/pages/tabBar/component/component.test.js @@ -0,0 +1,62 @@ +describe('pages/tabBar/component/component.nvue', () => { + let page, containsVite, isApp; + containsVite = process.env.UNI_CLI_PATH.includes('uniapp-cli-vite') + isApp = process.env.UNI_PLATFORM.includes('app') + if (containsVite && isApp) { + it('vue3', async () => { + expect(1).toBe(1) + }) + return + } + beforeAll(async () => { + // 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象) + page = await program.reLaunch('/pages/tabBar/component/component') + await page.waitFor("view") + }) + + it('u-link', async () => { + // 检测首页u-link的文本内容 + expect(await (await page.$('.hello-link')).text()).toBe('https://uniapp.dcloud.io/component/') + }) + + it('视图容器', async () => { + let panelText = await page.$('.uni-panel-text') + // 检测首个 panel 是视图容器 + expect(await panelText.text()).toBe( '视图容器') + // 检测首个 panel 切换展开 + const panelH = await page.$('.uni-panel-h'); + // 不能做完全匹配,百度小程序会生成额外的class + expect(await panelH.attribute('class')).toContain('uni-panel-h') + await panelH.tap() + await page.waitFor(500) + // 已展开 + expect(await panelH.attribute('class')).toContain('uni-panel-h-on') + }) + + it('.uni-panel', async () => { + const lists = await page.$$('.uni-panel') + if(process.env.UNI_PLATFORM == 'app-plus' || process.env.UNI_PLATFORM == 'mp-weixin'){ + expect(lists.length).toBe(9) + }else if(process.env.UNI_PLATFORM == 'h5' && !containsVite){ + expect(lists.length).toBe(8) + } + }) + + it('.uni-panel action', async () => { + const listHead = await page.$('.uni-panel-h') + expect(await listHead.attribute('class')).toContain('uni-panel-h-on') + await listHead.tap() + await page.waitFor(200) + expect(await listHead.attribute('class')).toContain('uni-panel-h') + // 展开第一个 panel,点击第一个 item,验证打开的新页面是否正确 + await listHead.tap() + await page.waitFor(200) + const item = await page.$('.uni-navigate-item') + await item.tap() + await page.waitFor(500) + expect((await program.currentPage()).path).toBe('pages/component/view/view') + await page.waitFor(500) + // 执行 navigateBack 验证是否返回 + expect((await program.navigateBack()).path).toBe('pages/tabBar/component/component') + }) +}) diff --git a/pages/tabBar/extUI/extUI.nvue b/pages/tabBar/extUI/extUI.nvue index 764f35f0..65bef7b0 100644 --- a/pages/tabBar/extUI/extUI.nvue +++ b/pages/tabBar/extUI/extUI.nvue @@ -1,14 +1,17 @@ \ No newline at end of file + @import '../../../common/uni-nvue.css'; + diff --git a/pages/tabBar/extUI/extUI.test.js b/pages/tabBar/extUI/extUI.test.js new file mode 100644 index 00000000..8699152a --- /dev/null +++ b/pages/tabBar/extUI/extUI.test.js @@ -0,0 +1,68 @@ +describe('pages/tabBar/extUI/extUI.nvue', () => { + let page, containsVite, isApp; + containsVite = process.env.UNI_CLI_PATH.includes('uniapp-cli-vite') + isApp = process.env.UNI_PLATFORM.includes('app') + if (containsVite && isApp) { + it('vue3', async () => { + expect(1).toBe(1) + }) + return + } + beforeAll(async () => { + // 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象) + page = await program.reLaunch('/pages/tabBar/extUI/extUI') + if (process.env.UNI_PLATFORM === "h5") { + await page.waitFor(1000) + } + if (process.env.UNI_PLATFORM === "mp-weixin" || process.env.UNI_PLATFORM === "mp-baidu") { + await page.waitFor(10000) + } + page = await program.currentPage() + await page.waitFor("view") + }) + /** + * 点击 u-link 组件 + */ + it('u-link 点击', async () => { + const helloLink = await page.$('.hello-link') + // 检测首页u-link的文本内容 + expect(await helloLink.text()).toBe('https://ext.dcloud.net.cn') + }) + + /** + * 检测列表长度,是否发生变化 + */ + it('.uni-panel 列表长度', async () => { + let lists = [] + if(process.env.UNI_PLATFORM == 'h5'){ + lists = await page.$$('.uni-container.extUI .uni-panel') + }else{ + const extUIEl = await page.$('.extUI') + lists = await extUIEl.$$('.uni-panel') + } + if(process.env.UNI_PLATFORM == 'app-plus'){ + expect(lists.length).toBe(41) + }else if(process.env.UNI_PLATFORM == 'h5' || process.env.UNI_PLATFORM == 'mp-weixin'){ + expect(lists.length).toBe(44) + } + }) + /** + * 检测打开列表第一个元素是否正确 + */ + it('.uni-panel-h tap 打开 badge 组件', async () => { + // 检测首个 panel 是视图容器 + expect(await (await page.$('.uni-panel-text')).text()).toBe('uni-badge 数字角标') + const listHead = await page.$('.uni-panel-h') + // 是否获取正确的元素 + expect(await listHead.attribute('class')).toContain('uni-panel-h') + // 点击第一个 item,验证打开的新页面是否正确 + await listHead.tap() + const waitTime = process.env.UNI_PLATFORM == 'mp-weixin'? 5000 : 2000 + await page.waitFor(waitTime) + expect((await program.currentPage()).path).toBe('pages/extUI/badge/badge') + await page.waitFor(500) + // 执行 navigateBack 验证是否返回 + expect((await program.navigateBack()).path).toBe('pages/tabBar/extUI/extUI') + }) + +}) diff --git a/pages/tabBar/template/template.nvue b/pages/tabBar/template/template.nvue index f79af369..3945223c 100644 --- a/pages/tabBar/template/template.nvue +++ b/pages/tabBar/template/template.nvue @@ -1,172 +1,232 @@ - - - - diff --git a/pages/template/component-communication/reciver.vue b/pages/template/component-communication/reciver.vue index 661a954a..c307e1cd 100644 --- a/pages/template/component-communication/reciver.vue +++ b/pages/template/component-communication/reciver.vue @@ -7,7 +7,6 @@ + + diff --git a/pages/template/global/global.vue b/pages/template/global/global.vue index db85a2b4..481efaa9 100644 --- a/pages/template/global/global.vue +++ b/pages/template/global/global.vue @@ -35,7 +35,7 @@ ...mapMutations(['setTestTrue']), ...mapMutations(['setTestFalse']), setGD:function () { - getApp().globalData.test="123" + this.gd.test="123" }, setVUEX:function (isTrue) { // console.log("this.testvuex: " + this.testvuex); diff --git a/pages/template/list2detail-detail/list2detail-detail.vue b/pages/template/list2detail-detail/list2detail-detail.vue index 826dfc35..73e04455 100644 --- a/pages/template/list2detail-detail/list2detail-detail.vue +++ b/pages/template/list2detail-detail/list2detail-detail.vue @@ -10,7 +10,7 @@ {{banner.published_at}} - + @@ -21,7 +21,7 @@ diff --git a/pages/template/nav-button/nav-button.vue b/pages/template/nav-button/nav-button.vue index 36b76a60..92202931 100644 --- a/pages/template/nav-button/nav-button.vue +++ b/pages/template/nav-button/nav-button.vue @@ -12,7 +12,6 @@ diff --git a/pages/template/nav-city-dropdown/nav-city-dropdown.vue b/pages/template/nav-city-dropdown/nav-city-dropdown.vue index d14c56cd..79f54084 100644 --- a/pages/template/nav-city-dropdown/nav-city-dropdown.vue +++ b/pages/template/nav-city-dropdown/nav-city-dropdown.vue @@ -1,129 +1,102 @@ - - - - - + + + diff --git a/pages/template/nav-dot/nav-dot.vue b/pages/template/nav-dot/nav-dot.vue index f1835d8d..2db24276 100644 --- a/pages/template/nav-dot/nav-dot.vue +++ b/pages/template/nav-dot/nav-dot.vue @@ -12,7 +12,6 @@ diff --git a/pages/template/nav-image/nav-image.vue b/pages/template/nav-image/nav-image.vue index 9323b2e4..2d31e660 100644 --- a/pages/template/nav-image/nav-image.vue +++ b/pages/template/nav-image/nav-image.vue @@ -5,22 +5,18 @@ 说明 : - 在App端可在pages.json里通过 style -> titleImage 配置,支付宝小程序只支持https地址的图片,暂不支持动态改变;常用于App首页顶部导航显示产品Logo。 + 在App端可在pages.json里通过 style -> titleImage 配置,支付宝小程序只支持https地址的图片,暂不支持动态改变;常用于App首页顶部导航显示产品Logo。 在支付宝小程序里请使用真机调试查看效果。 diff --git a/pages/template/nav-search-input/nav-search-input.vue b/pages/template/nav-search-input/nav-search-input.vue index 9c3e9021..9d3f306f 100644 --- a/pages/template/nav-search-input/nav-search-input.vue +++ b/pages/template/nav-search-input/nav-search-input.vue @@ -30,8 +30,8 @@ export default { return { showSwiper: false, imgUrls: [ - 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/muwu.jpg', - 'https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/cbd.jpg' + 'https://web-assets.dcloud.net.cn/unidoc/zh/muwu.jpg', + 'https://web-assets.dcloud.net.cn/unidoc/zh/cbd.jpg' ] }; }, @@ -66,6 +66,7 @@ image, swiper, .img-view { width: 750rpx; + width: 100%; height: 500rpx; } .page-section-title { diff --git a/pages/template/nav-transparent/nav-transparent.vue b/pages/template/nav-transparent/nav-transparent.vue index 0d335a29..b7ba9344 100644 --- a/pages/template/nav-transparent/nav-transparent.vue +++ b/pages/template/nav-transparent/nav-transparent.vue @@ -37,8 +37,8 @@ showSwiper: false, imgUrls: [ "../../../static/shuijiao.jpg", - "https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/muwu.jpg", - "https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/cbd.jpg" + "https://web-assets.dcloud.net.cn/unidoc/zh/muwu.jpg", + "https://web-assets.dcloud.net.cn/unidoc/zh/cbd.jpg" ], items: [{ value: "img", @@ -66,6 +66,7 @@ swiper, .img-view { width: 750rpx; + width: 100%; height: 500rpx; } .page-section-title{ diff --git a/pages/template/pinia/pinia.test.js b/pages/template/pinia/pinia.test.js new file mode 100644 index 00000000..462d7256 --- /dev/null +++ b/pages/template/pinia/pinia.test.js @@ -0,0 +1,50 @@ +describe('test pinia', () => { + let page,containsVite; + containsVite = process.env.UNI_CLI_PATH.includes('uniapp-cli-vite') + if (!containsVite) { + // Vue 2 项目暂不支持 Pinia + it('is vue2', async () => { + expect(1).toBe(1) + }) + return + } + beforeAll(async () => { + page = await program.reLaunch('/pages/template/pinia/pinia') + await page.waitFor('view'); + }); + it('check page data', async () => { + const count = await page.$('.count'); + expect(await count.text()).toEqual('当前计数:0'); + const doubleCount = await page.$('.doubleCount'); + expect(await doubleCount.text()).toEqual('计数翻倍:0'); + }); + it('store incrementCounter', async () => { + await page.callMethod('incrementCounter') + const count = await page.$('.count'); + expect(await count.text()).toEqual('当前计数:1'); + const doubleCount = await page.$('.doubleCount'); + expect(await doubleCount.text()).toEqual('计数翻倍:2'); + }); + it('store incrementPatchCounter', async () => { + await page.callMethod('incrementPatchCounter') + const count = await page.$('.count'); + expect(await count.text()).toEqual('当前计数:2'); + const doubleCount = await page.$('.doubleCount'); + expect(await doubleCount.text()).toEqual('计数翻倍:4'); + }); + it('store actions', async () => { + const increment = await page.$('.increment'); + await increment.tap() + const countIn = await page.$('.count'); + expect(await countIn.text()).toEqual('当前计数:3'); + const doubleCountIn = await page.$('.doubleCount'); + expect(await doubleCountIn.text()).toEqual('计数翻倍:6'); + + const decrement = await page.$('.decrement'); + await decrement.tap() + const countDe = await page.$('.count'); + expect(await countDe.text()).toEqual('当前计数:2'); + const doubleCountDe = await page.$('.doubleCount'); + expect(await doubleCountDe.text()).toEqual('计数翻倍:4'); + }); +}); diff --git a/pages/template/pinia/pinia.vue b/pages/template/pinia/pinia.vue new file mode 100644 index 00000000..7e9a1b0b --- /dev/null +++ b/pages/template/pinia/pinia.vue @@ -0,0 +1,32 @@ + + + diff --git a/pages/template/renderjs/renderjs.test.js b/pages/template/renderjs/renderjs.test.js new file mode 100644 index 00000000..ad6a3358 --- /dev/null +++ b/pages/template/renderjs/renderjs.test.js @@ -0,0 +1,38 @@ +describe('renderjs', () => { + let page, btns; + if (process.env.UNI_PLATFORM === "mp-weixin") { + // renderjs仅支持App和H5 + it('is mp-weixin', async () => { + expect(1).toBe(1) + }) + return + } + beforeAll(async () => { + page = await program.reLaunch('/pages/template/renderjs/renderjs') + await page.waitFor('view'); + btns = await page.$$('button'); + }); + it('check page data', async () => { + const data1 = await page.$('.renderjs'); + expect(await data1.text()).toEqual('serviceData'); + }); + it('callMethod renderjs', async () => { + await btns[0].tap(); + await page.waitFor(300); + const data2 = await page.$('.renderjs'); + expect(await data2.text()).toEqual('renderjsData'); + }); + it('callMethod service', async () => { + await btns[1].tap(); + await page.waitFor(300); + const data3 = await page.$('.renderjs'); + expect(await data3.text()).toEqual('serviceData改变了'); + }); + if (process.env.UNI_PLATFORM === "h5") { + it('trigger getServiceData', async () => { + expect(await page.data('newValue')).toEqual('serviceData改变了'); + expect(await page.data('oldValue')).toEqual('renderjsData'); + }); + } + +}); diff --git a/pages/template/renderjs/renderjs.vue b/pages/template/renderjs/renderjs.vue new file mode 100644 index 00000000..498e0cbf --- /dev/null +++ b/pages/template/renderjs/renderjs.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/pages/template/swiper-list-nvue/swiper-list-nvue.nvue b/pages/template/swiper-list-nvue/swiper-list-nvue.nvue index 69a089fe..373cf095 100644 --- a/pages/template/swiper-list-nvue/swiper-list-nvue.nvue +++ b/pages/template/swiper-list-nvue/swiper-list-nvue.nvue @@ -1,393 +1,434 @@ - diff --git a/pages/template/swiper-list-nvue/swiper-page.nvue b/pages/template/swiper-list-nvue/swiper-page.nvue index 14f621a5..4ca76b2b 100644 --- a/pages/template/swiper-list-nvue/swiper-page.nvue +++ b/pages/template/swiper-list-nvue/swiper-page.nvue @@ -1,87 +1,90 @@ diff --git a/pages/template/swiper-vertical/swiper-vertical.nvue b/pages/template/swiper-vertical/swiper-vertical.nvue index 12771e78..4a276b1d 100644 --- a/pages/template/swiper-vertical/swiper-vertical.nvue +++ b/pages/template/swiper-vertical/swiper-vertical.nvue @@ -10,22 +10,22 @@ diff --git a/pages/template/vant-button/vant-button.vue b/pages/template/vant-button/vant-button.vue index c36db2b6..9bd8d1a8 100644 --- a/pages/template/vant-button/vant-button.vue +++ b/pages/template/vant-button/vant-button.vue @@ -1,7 +1,7 @@ - \ No newline at end of file + diff --git a/uni_modules/uni-goods-nav/package.json b/uni_modules/uni-goods-nav/package.json new file mode 100644 index 00000000..636e45e7 --- /dev/null +++ b/uni_modules/uni-goods-nav/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-goods-nav", + "displayName": "uni-goods-nav 商品导航", + "version": "1.2.1", + "description": "商品导航组件主要用于电商类应用底部导航,可自定义加入购物车,购买等操作", + "keywords": [ + "uni-ui", + "uniui", + "商品导航" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "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-goods-nav/readme.md b/uni_modules/uni-goods-nav/readme.md new file mode 100644 index 00000000..07df93f5 --- /dev/null +++ b/uni_modules/uni-goods-nav/readme.md @@ -0,0 +1,10 @@ + + +## GoodsNav 商品导航 +> **组件名:uni-goods-nav** +> 代码块: `uGoodsNav` + +商品加入购物车,立即购买等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-goods-nav) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-grid/changelog.md b/uni_modules/uni-grid/changelog.md new file mode 100644 index 00000000..184941db --- /dev/null +++ b/uni_modules/uni-grid/changelog.md @@ -0,0 +1,13 @@ +## 1.4.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-grid](https://uniapp.dcloud.io/component/uniui/uni-grid) +## 1.3.2(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.3.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.3.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.2.4(2021-05-12) +- 新增 组件示例地址 +## 1.2.3(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/components/uni-grid-item/uni-grid-item.vue b/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue similarity index 69% rename from components/uni-grid-item/uni-grid-item.vue rename to uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue index ab6206c6..ab86a04e 100644 --- a/components/uni-grid-item/uni-grid-item.vue +++ b/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue @@ -1,6 +1,8 @@ - \ No newline at end of file + diff --git a/uni_modules/uni-indexed-list/package.json b/uni_modules/uni-indexed-list/package.json new file mode 100644 index 00000000..83e0005a --- /dev/null +++ b/uni_modules/uni-indexed-list/package.json @@ -0,0 +1,107 @@ +{ + "id": "uni-indexed-list", + "displayName": "uni-indexed-list 索引列表", + "version": "1.2.2", + "description": "索引列表组件,右侧带索引的列表,方便快速定位到具体内容,通常用于城市/机场选择等场景", + "keywords": [ + "uni-ui", + "索引列表", + "索引", + "列表" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "", + "uni-app": "^4.05", + "uni-app-x": "" + }, + "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", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "x", + "aliyun": "x", + "alipay": "x" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "√", + "vue3": "√" + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "√", + "android": "√", + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "√", + "toutiao": "√", + "baidu": "√", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "√", + "lark": "-", + "xhs": "-" + }, + "quickapp": { + "huawei": "√", + "union": "√" + } + }, + "uni-app-x": { + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "android": "-", + "ios": "-", + "harmony": "-" + }, + "mp": { + "weixin": "-" + } + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-indexed-list/readme.md b/uni_modules/uni-indexed-list/readme.md new file mode 100644 index 00000000..f3913d70 --- /dev/null +++ b/uni_modules/uni-indexed-list/readme.md @@ -0,0 +1,10 @@ + + +## IndexedList 索引列表 +> **组件名:uni-indexed-list** +> 代码块: `uIndexedList` + + +用于展示索引列表。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-indexed-list) \ No newline at end of file diff --git a/uni_modules/uni-installApk/changelog.md b/uni_modules/uni-installApk/changelog.md new file mode 100644 index 00000000..d67eb701 --- /dev/null +++ b/uni_modules/uni-installApk/changelog.md @@ -0,0 +1,10 @@ +## 1.0.4(2023-12-08) +兼容asset目录文件的处理 +## 1.0.3(2023-10-27) +遵循UniError规范 +## 1.0.2(2023-10-27) +修改文档 +## 1.0.1(2023-10-27) +支持js层调用 +## 1.0.0(2023-10-26) +安装apk的插件 diff --git a/uni_modules/uni-installApk/package.json b/uni_modules/uni-installApk/package.json new file mode 100644 index 00000000..2270fe2a --- /dev/null +++ b/uni_modules/uni-installApk/package.json @@ -0,0 +1,93 @@ +{ + "id": "uni-installApk", + "displayName": "uni-installApk", + "version": "1.0.4", + "description": "uni-installApk", + "keywords": [ + "uni-installApk" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.94" + }, + "dcloudext": { + "type": "uts", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "android.permission.REQUEST_INSTALL_PACKAGES" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "uni-ext-api": { + "uni": { + "installApk": { + "name": "installApk", + "app": { + "js": true, + "kotlin": true, + "swift": false + } + } + } + }, + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-android": "y", + "app-ios": "n" + }, + "H5-mobile": { + "Safari": "n", + "Android Browser": "n", + "微信浏览器(Android)": "n", + "QQ浏览器(Android)": "n" + }, + "H5-pc": { + "Chrome": "n", + "IE": "n", + "Edge": "n", + "Firefox": "n", + "Safari": "n" + }, + "小程序": { + "微信": "n", + "阿里": "n", + "百度": "n", + "字节跳动": "n", + "QQ": "n", + "钉钉": "n", + "快手": "n", + "飞书": "n", + "京东": "n" + }, + "快应用": { + "华为": "n", + "联盟": "n" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-installApk/readme.md b/uni_modules/uni-installApk/readme.md new file mode 100644 index 00000000..898834d7 --- /dev/null +++ b/uni_modules/uni-installApk/readme.md @@ -0,0 +1,37 @@ +# uni-installApk + +## 使用说明 + +Android平台安装Apk + +**注意: 3.95以下需要自定义基座** + +### uni.installApk(options : InstallApkOptions):void + +安装apk + +参数说明 + +``` +type InstallApkOptions = { + /** + * apk文件地址 + */ + filePath : string, + /** + * 接口调用成功的回调函数 + * @defaultValue null + */ + success ?: (res : any) => void, + /** + * 接口调用失败的回调函数 + * @defaultValue null + */ + fail ?: (err : any) => void, + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + * @defaultValue null + */ + complete ?: (res : any) => void, +} +``` \ No newline at end of file diff --git a/uni_modules/uni-installApk/utssdk/app-android/AndroidManifest.xml b/uni_modules/uni-installApk/utssdk/app-android/AndroidManifest.xml new file mode 100644 index 00000000..5cf3ce22 --- /dev/null +++ b/uni_modules/uni-installApk/utssdk/app-android/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uni-installApk/utssdk/app-android/index.uts b/uni_modules/uni-installApk/utssdk/app-android/index.uts new file mode 100644 index 00000000..64e7b6bd --- /dev/null +++ b/uni_modules/uni-installApk/utssdk/app-android/index.uts @@ -0,0 +1,83 @@ +import { InstallApkOptions, InstallApkSuccess } from "../interface.uts" +import { InstallApkFailImpl } from "../unierror.uts" +import Intent from 'android.content.Intent'; +import Build from 'android.os.Build'; +import File from 'java.io.File'; +import FileProvider from 'androidx.core.content.FileProvider'; +import Context from 'android.content.Context'; +import Uri from 'android.net.Uri'; +import FileOutputStream from 'java.io.FileOutputStream'; + +export function installApk(options : InstallApkOptions) : void { + const context = UTSAndroid.getAppContext() as Context + var filePath = UTSAndroid.convert2AbsFullPath(options.filePath) + var apkFile : File | null = null; + if (filePath.startsWith("/android_asset/")) { + filePath = filePath.replace("/android_asset/", "") + apkFile = copyAssetFileToPrivateDir(context, filePath) + } else { + apkFile = new File(filePath) + } + + if (apkFile != null && !apkFile.exists() && !apkFile.isFile()) { + let error = new InstallApkFailImpl(1300002); + options.fail?.(error) + options.complete?.(error) + return + } + const intent = new Intent() + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + intent.setAction(Intent.ACTION_VIEW) + + if (Build.VERSION.SDK_INT >= 24) { + const authority = context.getPackageName() + ".dc.fileprovider" + const apkUri = FileProvider.getUriForFile(context, authority, apkFile!!) + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); + } else { + intent.setDataAndType(Uri.fromFile(apkFile!!), "application/vnd.android.package-archive"); + } + + context.startActivity(intent) + const success : InstallApkSuccess = { + errMsg: "success" + } + options.success?.(success) + options.complete?.(success) +} + + +function copyAssetFileToPrivateDir(context : Context, fileName : string) : File | null { + try { + const destPath = context.getCacheDir().getPath() + "/apks/" + fileName + const outFile = new File(destPath) + const parentFile = outFile.getParentFile() + if (parentFile != null) { + if (!parentFile.exists()) { + parentFile.mkdirs() + } + } + if (!outFile.exists()) { + outFile.createNewFile() + } + const inputStream = context.getAssets().open(fileName) + const outputStream = new FileOutputStream(outFile) + let buffer = new ByteArray(1024); + do { + let len = inputStream.read(buffer); + if (len == -1) { + break; + } + outputStream.write(buffer, 0, len) + } while (true) + + inputStream.close() + outputStream.close() + + return outFile + } catch (e : Exception) { + e.printStackTrace() + } + + return null +} diff --git a/uni_modules/uni-installApk/utssdk/app-ios/index.uts b/uni_modules/uni-installApk/utssdk/app-ios/index.uts new file mode 100644 index 00000000..e69de29b diff --git a/uni_modules/uni-installApk/utssdk/index.d.ts b/uni_modules/uni-installApk/utssdk/index.d.ts new file mode 100644 index 00000000..ad24effb --- /dev/null +++ b/uni_modules/uni-installApk/utssdk/index.d.ts @@ -0,0 +1,78 @@ +declare namespace UniNamespace { + +interface InstallApkSuccess { + /** + * 安装成功消息 + */ + errMsg : string +} + +type InstallApkErrorCode = 1300002 +interface InstallApkFail { + errCode : InstallApkErrorCode +} + +type InstallApkComplete = any + +type InstallApkSuccessCallback = (res : InstallApkSuccess) => void +type InstallApkFailCallback = (err : InstallApkFail) => void +type InstallApkCompleteCallback = (res : InstallApkComplete) => void + +interface InstallApkOptions { + /** + * apk文件地址 + */ + filePath : string, + /** + * 接口调用成功的回调函数 + * @defaultValue null + */ + success ?: InstallApkSuccessCallback | null, + /** + * 接口调用失败的回调函数 + * @defaultValue null + */ + fail ?: InstallApkFailCallback | null, + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + * @defaultValue null + */ + complete ?: InstallApkCompleteCallback | null +} + +} + + +declare interface Uni { + /** + * installApk() + * @description + * 安装apk + * @param {InstallApkOptions} + * @return {void} + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4", + * "uniVer": "3.94+", + * "unixVer": "3.94+" + * }, + * "ios": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * } + * } + * } + * @example + ```typescript + uni.installApk({ + filePath: "/xx/xx/xx.apk", + complete: (res: any) => { + console.log("complete => " + JSON.stringify(res)); + } + }); + ``` + */ + installApk(options : UniNamespace.InstallApkOptions) : void +} diff --git a/uni_modules/uni-installApk/utssdk/interface.uts b/uni_modules/uni-installApk/utssdk/interface.uts new file mode 100644 index 00000000..35edfcd7 --- /dev/null +++ b/uni_modules/uni-installApk/utssdk/interface.uts @@ -0,0 +1,76 @@ +export interface Uni { + /** + * installApk() + * @description + * 安装apk + * @param {InstallApkOptions} + * @return {void} + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4", + * "uniVer": "3.94+", + * "unixVer": "3.94+" + * }, + * "ios": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * } + * } + * } + * @example + ```typescript + uni.installApk({ + filePath: "/xx/xx/xx.apk", + complete: (res: any) => { + console.log("complete => " + JSON.stringify(res)); + } + }); + ``` + */ + installApk(options : InstallApkOptions) : void +} +export type InstallApkSuccess = { + /** + * 安装成功消息 + */ + errMsg : string +} +export type InstallApkComplete = any +export type InstallApkSuccessCallback = (res : InstallApkSuccess) => void +/** + * 错误码 + * - 1300002 找不到文件 + */ +export type InstallApkErrorCode = 1300002 +/** + * 网络请求失败的错误回调参数 + */ +export interface InstallApkFail extends IUniError { + errCode : InstallApkErrorCode +}; +export type InstallApkFailCallback = (err : InstallApkFail) => void +export type InstallApkCompleteCallback = (res : InstallApkComplete) => void + +export type InstallApkOptions = { + /** + * apk文件地址 + */ + filePath : string, + /** + * 接口调用成功的回调函数 + * @defaultValue null + */ + success ?: InstallApkSuccessCallback | null, + /** + * 接口调用失败的回调函数 + * @defaultValue null + */ + fail ?: InstallApkFailCallback | null, + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + * @defaultValue null + */ + complete ?: InstallApkCompleteCallback | null +} \ No newline at end of file diff --git a/uni_modules/uni-installApk/utssdk/unierror.uts b/uni_modules/uni-installApk/utssdk/unierror.uts new file mode 100644 index 00000000..a10c730d --- /dev/null +++ b/uni_modules/uni-installApk/utssdk/unierror.uts @@ -0,0 +1,25 @@ +import { InstallApkErrorCode, InstallApkFail } from "./interface.uts" + +/** + * 错误主题 + */ +export const UniErrorSubject = 'uni-installApk'; +/** + * 错误码 + * @UniError + */ +export const UniErrors : Map = new Map([ + /** + * 找不到文件 + */ + [1300002, 'No such file'], +]); + +export class InstallApkFailImpl extends UniError implements InstallApkFail { + constructor(errCode : InstallApkErrorCode) { + super(); + this.errSubject = UniErrorSubject; + this.errCode = errCode; + this.errMsg = UniErrors[errCode] ?? ""; + } +} \ No newline at end of file diff --git a/uni_modules/uni-link/changelog.md b/uni_modules/uni-link/changelog.md new file mode 100644 index 00000000..7f43317a --- /dev/null +++ b/uni_modules/uni-link/changelog.md @@ -0,0 +1,17 @@ +## 1.0.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-link](https://uniapp.dcloud.io/component/uniui/uni-link) +## 1.1.7(2021-11-08) +## 0.0.7(2021-09-03) +- 修复 在 nvue 下不显示的 bug +## 0.0.6(2021-07-30) +- 新增 支持自定义插槽 +## 0.0.5(2021-06-21) +- 新增 download 属性,H5平台下载文件名 +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-03-09) +- 新增 href 属性支持 tel:|mailto: + +## 0.0.2(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-link/components/uni-link/uni-link.vue b/uni_modules/uni-link/components/uni-link/uni-link.vue new file mode 100644 index 00000000..8d720039 --- /dev/null +++ b/uni_modules/uni-link/components/uni-link/uni-link.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/uni_modules/uni-link/package.json b/uni_modules/uni-link/package.json new file mode 100644 index 00000000..3e994711 --- /dev/null +++ b/uni_modules/uni-link/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-link", + "displayName": "uni-link 超链接", + "version": "1.0.0", + "description": "uni-link是一个外部网页超链接组件,在小程序内复制url,在app内打开外部浏览器,在h5端打", + "keywords": [ + "uni-ui", + "uniui", + "link", + "超链接", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "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" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-link/readme.md b/uni_modules/uni-link/readme.md new file mode 100644 index 00000000..d40fdcad --- /dev/null +++ b/uni_modules/uni-link/readme.md @@ -0,0 +1,11 @@ + + +## Link 链接 +> **组件名:uni-link** +> 代码块: `uLink` + + +uni-link是一个外部网页超链接组件,在小程序内复制url,在app内打开外部浏览器,在h5端打开新网页。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-link) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-list/changelog.md b/uni_modules/uni-list/changelog.md new file mode 100644 index 00000000..ddf45a47 --- /dev/null +++ b/uni_modules/uni-list/changelog.md @@ -0,0 +1,48 @@ +## 1.2.15(2025-01-08) +- 修复 示例中过期图片地址 +## 1.2.14(2023-04-14) +- 优化 uni-list-chat 具名插槽`header` 非app端套一层元素,方便使用时通过外层元素定位实现样式修改 +## 1.2.13(2023-03-03) +- uni-list-chat 新增 支持具名插槽`header` +## 1.2.12(2023-02-01) +- 新增 列表图标新增 customPrefix 属性 ,用法 [详见](https://uniapp.dcloud.net.cn/component/uniui/uni-icons.html#icons-props) +## 1.2.11(2023-01-31) +- 修复 无反馈效果呈现的bug +## 1.2.9(2022-11-22) +- 修复 uni-list-chat 在vue3下跳转报错的bug +## 1.2.8(2022-11-21) +- 修复 uni-list-chat avatar属性 值为本地路径时错误的问题 +## 1.2.7(2022-11-21) +- 修复 uni-list-chat avatar属性 在腾讯云版uniCloud下错误的问题 +## 1.2.6(2022-11-18) +- 修复 uni-list-chat note属性 支持:“草稿”字样功能 文本少1位的问题 +## 1.2.5(2022-11-15) +- 修复 uni-list-item 的 customStyle 属性 padding值在 H5端 无效的bug +## 1.2.4(2022-11-15) +- 修复 uni-list-item 的 customStyle 属性 padding值在nvue(vue2)下无效的bug +## 1.2.3(2022-11-14) +- uni-list-chat 新增 avatar 支持 fileId +## 1.2.2(2022-11-11) +- uni-list 新增属性 render-reverse 详情参考:[https://uniapp.dcloud.net.cn/component/list.html](https://uniapp.dcloud.net.cn/component/list.html) +- uni-list-chat note属性 支持:“草稿”字样 加红显示 详情参考uni-im:[https://ext.dcloud.net.cn/plugin?name=uni-im](https://ext.dcloud.net.cn/plugin?name=uni-im) +- uni-list-item 新增属性 customStyle 支持设置padding、backgroundColor +## 1.2.1(2022-03-30) +- 删除无用文件 +## 1.2.0(2021-11-23) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-list](https://uniapp.dcloud.io/component/uniui/uni-list) +## 1.1.3(2021-08-30) +- 修复 在vue3中to属性在发行应用的时候报错的bug +## 1.1.2(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.1(2021-07-21) +- 修复 与其他组件嵌套使用时,点击失效的Bug +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.17(2021-05-12) +- 新增 组件示例地址 +## 1.0.16(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.15(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 uni-list-chat 角标显示不正常的问题 diff --git a/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue b/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue new file mode 100644 index 00000000..d145b549 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss b/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss new file mode 100644 index 00000000..7e2708f7 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss @@ -0,0 +1,58 @@ +/** + * 这里是 uni-list 组件内置的常用样式变量 + * 如果需要覆盖样式,这里提供了基本的组件样式变量,您可以尝试修改这里的变量,去完成样式替换,而不用去修改源码 + * + */ + +// 背景色 +$background-color : #fff; +// 分割线颜色 +$divide-line-color : #e5e5e5; + +// 默认头像大小,如需要修改此值,注意同步修改 js 中的值 const avatarWidth = xx ,目前只支持方形头像 +// nvue 页面不支持修改头像大小 +$avatar-width : 45px ; + +// 头像边框 +$avatar-border-radius: 5px; +$avatar-border-color: #eee; +$avatar-border-width: 1px; + +// 标题文字样式 +$title-size : 16px; +$title-color : #3b4144; +$title-weight : normal; + +// 描述文字样式 +$note-size : 12px; +$note-color : #999; +$note-weight : normal; + +// 右侧额外内容默认样式 +$right-text-size : 12px; +$right-text-color : #999; +$right-text-weight : normal; + +// 角标样式 +// nvue 页面不支持修改圆点位置以及大小 +// 角标在左侧时,角标的位置,默认为 0 ,负数左/下移动,正数右/上移动 +$badge-left: 0px; +$badge-top: 0px; + +// 显示圆点时,圆点大小 +$dot-width: 10px; +$dot-height: 10px; + +// 显示角标时,角标大小和字体大小 +$badge-size : 18px; +$badge-font : 12px; +// 显示角标时,角标前景色 +$badge-color : #fff; +// 显示角标时,角标背景色 +$badge-background-color : #ff5a5f; +// 显示角标时,角标左右间距 +$badge-space : 6px; + +// 状态样式 +// 选中颜色 +$hover : #f5f5f5; diff --git a/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue b/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue new file mode 100644 index 00000000..27d05ddb --- /dev/null +++ b/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue @@ -0,0 +1,593 @@ + + + + + diff --git a/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue b/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue new file mode 100644 index 00000000..2322373b --- /dev/null +++ b/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue @@ -0,0 +1,534 @@ + + + + + \ No newline at end of file diff --git "a/uni_modules/uni-list/components/uni-list/uni-list - \345\211\257\346\234\254.vue" "b/uni_modules/uni-list/components/uni-list/uni-list - \345\211\257\346\234\254.vue" new file mode 100644 index 00000000..8a46cfc2 --- /dev/null +++ "b/uni_modules/uni-list/components/uni-list/uni-list - \345\211\257\346\234\254.vue" @@ -0,0 +1,106 @@ + + + + diff --git a/uni_modules/uni-list/components/uni-list/uni-list.vue b/uni_modules/uni-list/components/uni-list/uni-list.vue new file mode 100644 index 00000000..38470db2 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list/uni-list.vue @@ -0,0 +1,123 @@ + + + + diff --git a/uni_modules/uni-list/components/uni-list/uni-refresh.vue b/uni_modules/uni-list/components/uni-list/uni-refresh.vue new file mode 100644 index 00000000..3b4c5a23 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list/uni-refresh.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/components/uni-list/uni-refresh.wxs b/uni_modules/uni-list/components/uni-list/uni-refresh.wxs similarity index 100% rename from components/uni-list/uni-refresh.wxs rename to uni_modules/uni-list/components/uni-list/uni-refresh.wxs diff --git a/uni_modules/uni-list/package.json b/uni_modules/uni-list/package.json new file mode 100644 index 00000000..5ebe1569 --- /dev/null +++ b/uni_modules/uni-list/package.json @@ -0,0 +1,91 @@ +{ + "id": "uni-list", + "displayName": "uni-list 列表", + "version": "1.2.15", + "description": "List 组件 ,帮助使用者快速构建列表。", + "keywords": [ + "", + "uni-ui", + "uniui", + "列表", + "", + "list" +], + "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-badge", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y", + "app-harmony": "u", + "app-uvue": "u" + }, + "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-list/readme.md b/uni_modules/uni-list/readme.md new file mode 100644 index 00000000..ae499e66 --- /dev/null +++ b/uni_modules/uni-list/readme.md @@ -0,0 +1,46 @@ +## List 列表 +> **组件名:uni-list** +> 代码块: `uList`、`uListItem` +> 关联组件:`uni-list-item`、`uni-badge`、`uni-icons`、`uni-list-chat`、`uni-list-ad` + + +List 列表组件,包含基本列表样式、可扩展插槽机制、长列表性能优化、多端兼容。 + +在vue页面里,它默认使用页面级滚动。在app-nvue页面里,它默认使用原生list组件滚动。这样的长列表,在滚动出屏幕外后,系统会回收不可见区域的渲染内存资源,不会造成滚动越长手机越卡的问题。 + +uni-list组件是父容器,里面的核心是uni-list-item子组件,它代表列表中的一个可重复行,子组件可以无限循环。 + +uni-list-item有很多风格,uni-list-item组件通过内置的属性,满足一些常用的场景。当内置属性不满足需求时,可以通过扩展插槽来自定义列表内容。 + +内置属性可以覆盖的场景包括:导航列表、设置列表、小图标列表、通信录列表、聊天记录列表。 + +涉及很多大图或丰富内容的列表,比如类今日头条的新闻列表、类淘宝的电商列表,需要通过扩展插槽实现。 + +下文均有样例给出。 + +uni-list不包含下拉刷新和上拉翻页。上拉翻页另见组件:[uni-load-more](https://ext.dcloud.net.cn/plugin?id=29) + +### [点击查看详细文档](https://uniapp.dcloud.io/component/uniui/uni-indexed-list) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + +## 基于uni-list扩展的页面模板 + +通过扩展插槽,可实现多种常见样式的列表 + +**新闻列表类** + +1. 云端一体混合布局:[https://ext.dcloud.net.cn/plugin?id=2546](https://ext.dcloud.net.cn/plugin?id=2546) +2. 云端一体垂直布局,大图模式:[https://ext.dcloud.net.cn/plugin?id=2583](https://ext.dcloud.net.cn/plugin?id=2583) +3. 云端一体垂直布局,多行图文混排:[https://ext.dcloud.net.cn/plugin?id=2584](https://ext.dcloud.net.cn/plugin?id=2584) +4. 云端一体垂直布局,多图模式:[https://ext.dcloud.net.cn/plugin?id=2585](https://ext.dcloud.net.cn/plugin?id=2585) +5. 云端一体水平布局,左图右文:[https://ext.dcloud.net.cn/plugin?id=2586](https://ext.dcloud.net.cn/plugin?id=2586) +6. 云端一体水平布局,左文右图:[https://ext.dcloud.net.cn/plugin?id=2587](https://ext.dcloud.net.cn/plugin?id=2587) +7. 云端一体垂直布局,无图模式,主标题+副标题:[https://ext.dcloud.net.cn/plugin?id=2588](https://ext.dcloud.net.cn/plugin?id=2588) + +**商品列表类** + +1. 云端一体列表/宫格视图互切:[https://ext.dcloud.net.cn/plugin?id=2651](https://ext.dcloud.net.cn/plugin?id=2651) +2. 云端一体列表(宫格模式):[https://ext.dcloud.net.cn/plugin?id=2671](https://ext.dcloud.net.cn/plugin?id=2671) +3. 云端一体列表(列表模式):[https://ext.dcloud.net.cn/plugin?id=2672](https://ext.dcloud.net.cn/plugin?id=2672) \ No newline at end of file diff --git a/uni_modules/uni-load-more/changelog.md b/uni_modules/uni-load-more/changelog.md new file mode 100644 index 00000000..667abdb9 --- /dev/null +++ b/uni_modules/uni-load-more/changelog.md @@ -0,0 +1,25 @@ +## 1.3.6(2024-10-15) +- 修复 微信小程序中的getSystemInfo警告 +## 1.3.5(2024-10-12) +- 修复 微信小程序中的getSystemInfo警告 +## 1.3.4(2024-10-12) +- 修复 微信小程序中的getSystemInfo警告 +## 1.3.3(2022-01-20) +- 新增 showText属性 ,是否显示文本 +## 1.3.2(2022-01-19) +- 修复 nvue 平台下不显示文本的bug +## 1.3.1(2022-01-19) +- 修复 微信小程序平台样式选择器报警告的问题 +## 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-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more) +## 1.2.1(2021-08-24) +- 新增 支持国际化 +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.8(2021-05-12) +- 新增 组件示例地址 +## 1.1.7(2021-03-30) +- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug +## 1.1.6(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json new file mode 100644 index 00000000..6f45b0ec --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "Pull up to show more", + "uni-load-more.contentrefresh": "loading...", + "uni-load-more.contentnomore": "No more data" +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js new file mode 100644 index 00000000..fa8f0f37 --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/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-load-more/components/uni-load-more/i18n/zh-Hans.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json new file mode 100644 index 00000000..3a14ca07 --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "上拉显示更多", + "uni-load-more.contentrefresh": "正在加载...", + "uni-load-more.contentnomore": "没有更多数据了" +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json new file mode 100644 index 00000000..ee99b067 --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "上拉顯示更多", + "uni-load-more.contentrefresh": "正在加載...", + "uni-load-more.contentnomore": "沒有更多數據了" +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue new file mode 100644 index 00000000..aa43c551 --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue @@ -0,0 +1,404 @@ + + + + + diff --git a/uni_modules/uni-load-more/package.json b/uni_modules/uni-load-more/package.json new file mode 100644 index 00000000..cf44bff3 --- /dev/null +++ b/uni_modules/uni-load-more/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-load-more", + "displayName": "uni-load-more 加载更多", + "version": "1.3.6", + "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。", + "keywords": [ + "uni-ui", + "uniui", + "加载更多", + "load-more" +], + "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" + } + } + } + } +} diff --git a/uni_modules/uni-load-more/readme.md b/uni_modules/uni-load-more/readme.md new file mode 100644 index 00000000..54dc1fad --- /dev/null +++ b/uni_modules/uni-load-more/readme.md @@ -0,0 +1,14 @@ + + +### LoadMore 加载更多 +> **组件名:uni-load-more** +> 代码块: `uLoadMore` + + +用于列表中,做滚动加载使用,展示 loading 的各种状态。 + + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-nav-bar/changelog.md b/uni_modules/uni-nav-bar/changelog.md new file mode 100644 index 00000000..e3efe125 --- /dev/null +++ b/uni_modules/uni-nav-bar/changelog.md @@ -0,0 +1,57 @@ +## 1.3.14(2024-10-15) +- 修复 微信小程序中的getSystemInfo警告 +## 1.3.13(2024-10-12) +- 修复 微信小程序中的getSystemInfo警告 +## 1.3.12(2024-10-12) +- 修复 微信小程序中的getSystemInfo警告 +## 1.3.11(2023-03-29) +- 修复 自定义状态栏高度闪动BUG +## 1.3.10(2023-03-29) +- 修复 暗黑模式下边线颜色错误的bug +## 1.3.9(2022-10-13) +- 修复 条件编译错误的bug +## 1.3.8(2022-10-12) +- 修复 nvue 环境 fixed 为 true 的情况下,无法置顶的 bug +## 1.3.7(2022-08-11) +- 修复 nvue 环境下 fixed 为 true 的情况下,无法置顶的 bug +## 1.3.6(2022-06-30) +- 修复 组件示例中插槽用法无法显示内容的bug +## 1.3.5(2022-05-24) +- 新增 stat 属性 ,可开启统计title 上报 ,仅使用了title 属性且项目开启了uni统计生效 +## 1.3.4(2022-01-24) +- 更新 组件示例 +## 1.3.3(2022-01-24) +- 新增 left-width/right-width属性 ,可修改左右两侧的宽度 +## 1.3.2(2022-01-18) +- 修复 在vue下,标题不垂直居中的bug +## 1.3.1(2022-01-18) +- 修复 height 属性类型错误 +## 1.3.0(2022-01-18) +- 新增 height 属性,可修改组件高度 +- 新增 dark 属性可可开启暗黑模式 +- 优化 标题字数过多显示省略号 +- 优化 插槽,插入内容可完全覆盖 +## 1.2.1(2022-01-10) +- 修复 color 属性不生效的bug +## 1.2.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-nav-bar](https://uniapp.dcloud.io/component/uniui/uni-nav-bar) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.11(2021-05-12) +- 新增 组件示例地址 +## 1.0.10(2021-04-30) +- 修复 在nvue下fixed为true,宽度不能撑满的Bug +## 1.0.9(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.8(2021-04-14) +- uni-ui 修复 uni-nav-bar 当 fixed 属性为 true 时铺不满屏幕的 bug + +## 1.0.7(2021-02-25) +- 修复 easycom 下,找不到 uni-status-bar 的bug + +## 1.0.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue new file mode 100644 index 00000000..ef257f21 --- /dev/null +++ b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue @@ -0,0 +1,357 @@ + + + + + diff --git a/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue new file mode 100644 index 00000000..92aa589b --- /dev/null +++ b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/uni_modules/uni-nav-bar/package.json b/uni_modules/uni-nav-bar/package.json new file mode 100644 index 00000000..d9f53b24 --- /dev/null +++ b/uni_modules/uni-nav-bar/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-nav-bar", + "displayName": "uni-nav-bar 自定义导航栏", + "version": "1.3.14", + "description": "自定义导航栏组件,主要用于头部导航。", + "keywords": [ + "uni-ui", + "导航", + "导航栏", + "自定义导航栏" +], + "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-icons" + ], + "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-nav-bar/readme.md b/uni_modules/uni-nav-bar/readme.md new file mode 100644 index 00000000..3934b327 --- /dev/null +++ b/uni_modules/uni-nav-bar/readme.md @@ -0,0 +1,15 @@ + + +## NavBar 导航栏 +> **组件名:uni-nav-bar** +> 代码块: `uNavBar` + +导航栏组件,主要用于头部导航。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-nav-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + + diff --git a/uni_modules/uni-notice-bar/changelog.md b/uni_modules/uni-notice-bar/changelog.md new file mode 100644 index 00000000..ce506744 --- /dev/null +++ b/uni_modules/uni-notice-bar/changelog.md @@ -0,0 +1,20 @@ +## 1.2.2(2023-12-20) +- 修复动态绑定title时,滚动速度不一致的问题 +## 1.2.1(2022-09-05) +- 新增 属性 fontSize,可修改文字大小。 +## 1.2.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-notice-bar](https://uniapp.dcloud.io/component/uniui/uni-notice-bar) +## 1.1.1(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.9(2021-05-12) +- 新增 组件示例地址 +## 1.0.8(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.7(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.6(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/components/uni-notice-bar/uni-notice-bar.vue b/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue similarity index 74% rename from components/uni-notice-bar/uni-notice-bar.vue rename to uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue index 1581eae5..e7d03975 100644 --- a/components/uni-notice-bar/uni-notice-bar.vue +++ b/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue @@ -1,31 +1,52 @@ - \ No newline at end of file + diff --git a/uni_modules/uni-notice-bar/package.json b/uni_modules/uni-notice-bar/package.json new file mode 100644 index 00000000..1e9762c4 --- /dev/null +++ b/uni_modules/uni-notice-bar/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-notice-bar", + "displayName": "uni-notice-bar 通告栏", + "version": "1.2.2", + "description": "NoticeBar 通告栏组件,常用于展示公告信息,可设为滚动公告", + "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", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "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-notice-bar/readme.md b/uni_modules/uni-notice-bar/readme.md new file mode 100644 index 00000000..fb2ede24 --- /dev/null +++ b/uni_modules/uni-notice-bar/readme.md @@ -0,0 +1,13 @@ + + +## NoticeBar 通告栏 +> **组件名:uni-notice-bar** +> 代码块: `uNoticeBar` + + +通告栏组件 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-notice-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-number-box/changelog.md b/uni_modules/uni-number-box/changelog.md new file mode 100644 index 00000000..adf9221d --- /dev/null +++ b/uni_modules/uni-number-box/changelog.md @@ -0,0 +1,39 @@ +## 1.2.8(2024-04-26) +- 修复 在vue2下H5黑边的bug +## 1.2.7(2024-04-26) +- 修复 在vue2手动输入后失焦导致清空数值的严重bug +## 1.2.6(2024-02-22) +- 新增 设置宽度属性width(单位:px) +## 1.2.5(2024-02-21) +- 修复 step步长小于1时,键盘类型为number的bug +## 1.2.4(2024-02-02) +- 修复 加减号垂直位置偏移样式问题 +## 1.2.3(2023-05-23) +- 更新示例工程 +## 1.2.2(2023-05-08) +- 修复 change 事件执行顺序错误的问题 +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.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-number-box](https://uniapp.dcloud.io/component/uniui/uni-number-box) +## 1.1.2(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-20) +- 修复 uni-number-box 浮点数运算不精确的 bug +- 修复 uni-number-box change 事件触发不正确的 bug +- 新增 uni-number-box v-model 双向绑定 +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 + +## 1.0.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 v-model +- 新增 支持 focus、blur 事件 +- 新增 支持 PC 端 diff --git a/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue b/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue new file mode 100644 index 00000000..dd46e265 --- /dev/null +++ b/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue @@ -0,0 +1,232 @@ + + + diff --git a/uni_modules/uni-number-box/package.json b/uni_modules/uni-number-box/package.json new file mode 100644 index 00000000..4ac90475 --- /dev/null +++ b/uni_modules/uni-number-box/package.json @@ -0,0 +1,83 @@ +{ + "id": "uni-number-box", + "displayName": "uni-number-box 数字输入框", + "version": "1.2.8", + "description": "NumberBox 带加减按钮的数字输入框组件,用户可以控制每次点击增加的数值,支持小数。", + "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-number-box/readme.md b/uni_modules/uni-number-box/readme.md new file mode 100644 index 00000000..affc56fa --- /dev/null +++ b/uni_modules/uni-number-box/readme.md @@ -0,0 +1,13 @@ + + +## NumberBox 数字输入框 +> **组件名:uni-number-box** +> 代码块: `uNumberBox` + + +带加减按钮的数字输入框。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-number-box) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-open-bridge-common/changelog.md b/uni_modules/uni-open-bridge-common/changelog.md new file mode 100644 index 00000000..24684372 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/changelog.md @@ -0,0 +1,27 @@ +## 1.2.1(2024-09-13) +- 修复 微信小程序平台 当微信的服务器返回`encrypt_key`的过期时间`expire_in`为`0`时特殊处理为`1`天,否者可能无法验证客户端请求携带的版本 +## 1.2.0(2023-04-27) +- 重要 微信小程序平台 使用微信新增 API getStableAccessToken 获取 access_token, access_token 有效期内重复调用该接口不会更新 access_token, [详情](https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getStableAccessToken.html) +## 1.1.5(2023-03-27) +- 修复 微信小程序平台 某些情况下 encrypt_key 插入错误的问题 +## 1.1.4(2023-03-13) +- 修复 平台 weixin-web +## 1.1.3(2023-03-13) +- 新增 支持旧版本 uni-id 配置 +- 新增 支持平台 weixin-app|qq-mp|qq-app +## 1.1.2(2023-02-28) +- 新增 config 配置错误提示语 +## 1.1.1(2023-02-28) +- 新增 支持 provider 参数,和 platform 保持一致 +## 1.1.0(2023-02-27) +- 重要更新 调整数据库key格式,兼容旧版本API,如果开发者通过手动拼接key查询数据库需要修改现有逻辑 + + 原格式: uni-id:[dcloudAppid]:[platform]:[openid]:[access-token|user-access-token|session-key|encrypt-key-version|ticket] + + 新格式: uni-id:[provider]:[appid]:[openid]:[access-token|user-access-token|session-key|encrypt-key-version|ticket] +## 1.0.4(2022-09-21) +- 新增 支持使用阿里云固定IP获取微信公众号H5凭据 access_token、ticket,开发者需要在微信公众平台配置阿里云固定IP,[固定IP详情](https://uniapp.dcloud.net.cn/uniCloud/cf-functions.html#aliyun-eip) +## 1.0.3(2022-09-06) +- 修复 过期时间问题,容错 AccessToken 默认 fallback 逻辑,当微信服务器没有返回过期时间时设置为2小时后过期 +## 1.0.2(2022-09-02) +- 新增 依赖数据表schema opendb-open-data +## 1.0.0(2022-08-22) +- 首次发布 diff --git a/uni_modules/uni-open-bridge-common/package.json b/uni_modules/uni-open-bridge-common/package.json new file mode 100644 index 00000000..d89290f7 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-open-bridge-common", + "displayName": "uni-open-bridge-common", + "version": "1.2.1", + "description": "统一接管微信等三方平台认证凭据", + "keywords": [ + "access_token", + "session_key", + "ticket" +], + "repository": "", + "engines": { + "HBuilderX": "^3.5.2" + }, + "dcloudext": { + "type": "unicloud-template-function", + "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", + "alipay": "n" + }, + "client": { + "Vue": { + "vue2": "u", + "vue3": "u" + }, + "App": { + "app-vue": "u", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "u", + "Android Browser": "u", + "微信浏览器(Android)": "u", + "QQ浏览器(Android)": "u" + }, + "H5-pc": { + "Chrome": "u", + "IE": "u", + "Edge": "u", + "Firefox": "u", + "Safari": "u" + }, + "小程序": { + "微信": "u", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-open-bridge-common/readme.md b/uni_modules/uni-open-bridge-common/readme.md new file mode 100644 index 00000000..38923847 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/readme.md @@ -0,0 +1,5 @@ +# uni-open-bridge-common + +`uni-open-bridge-common` 是统一接管微信等三方平台认证凭据(包括但不限于`access_token`、`session_key`、`encrypt_key`、`ticket`)的开源库。 + +文档链接 [https://uniapp.dcloud.net.cn/uniCloud/uni-open-bridge#common](https://uniapp.dcloud.net.cn/uniCloud/uni-open-bridge#common) diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/bridge-error.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/bridge-error.js new file mode 100644 index 00000000..95160a43 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/bridge-error.js @@ -0,0 +1,26 @@ +'use strict'; + +class BridgeError extends Error { + + constructor(code, message) { + super(message) + + this._code = code + } + + get code() { + return this._code + } + + get errCode() { + return this._code + } + + get errMsg() { + return this.message + } +} + +module.exports = { + BridgeError +} diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/config.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/config.js new file mode 100644 index 00000000..d083f00c --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/config.js @@ -0,0 +1,124 @@ +'use strict'; + +const { + ProviderType +} = require('./consts.js') + +const configCenter = require('uni-config-center') + +// 多维数据为兼容uni-id以前版本配置 +const OauthConfig = { + 'weixin-app': [ + ['app', 'oauth', 'weixin'], + ['app-plus', 'oauth', 'weixin'] + ], + 'weixin-mp': [ + ['mp-weixin', 'oauth', 'weixin'] + ], + 'weixin-h5': [ + ['web', 'oauth', 'weixin-h5'], + ['h5-weixin', 'oauth', 'weixin'], + ['h5', 'oauth', 'weixin'] + ], + 'weixin-web': [ + ['web', 'oauth', 'weixin-web'] + ], + 'qq-app': [ + ['app', 'oauth', 'qq'], + ['app-plus', 'oauth', 'qq'] + ], + 'qq-mp': [ + ['mp-qq', 'oauth', 'qq'] + ] +} + +const Support_Platforms = [ + ProviderType.WEIXIN_MP, + ProviderType.WEIXIN_H5, + ProviderType.WEIXIN_APP, + ProviderType.WEIXIN_WEB, + ProviderType.QQ_MP, + ProviderType.QQ_APP +] + +class ConfigBase { + + constructor() { + const uniIdConfigCenter = configCenter({ + pluginId: 'uni-id' + }) + + this._uniIdConfig = uniIdConfigCenter.config() + } + + getAppConfig(appid) { + if (Array.isArray(this._uniIdConfig)) { + return this._uniIdConfig.find((item) => { + return (item.dcloudAppid === appid) + }) + } + return this._uniIdConfig + } +} + +class AppConfig extends ConfigBase { + + constructor() { + super() + } + + get(appid, platform) { + if (!this.isSupport(platform)) { + return null + } + + let appConfig = this.getAppConfig(appid) + if (!appConfig) { + return null + } + + return this.getOauthConfig(appConfig, platform) + } + + isSupport(platformName) { + return (Support_Platforms.indexOf(platformName) >= 0) + } + + getOauthConfig(appConfig, platformName) { + let treePath = OauthConfig[platformName] + let node = this.findNode(appConfig, treePath) + if (node && node.appid && node.appsecret) { + return { + appid: node.appid, + secret: node.appsecret + } + } + return null + } + + findNode(treeNode, arrayPath) { + let node = treeNode + for (let treePath of arrayPath) { + for (let name of treePath) { + const currentNode = node[name] + if (currentNode) { + node = currentNode + } else { + node = null + break + } + } + if (node === null) { + node = treeNode + } else { + break + } + } + return node + } +} + + +module.exports = { + AppConfig +}; \ No newline at end of file diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/consts.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/consts.js new file mode 100644 index 00000000..4c666e93 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/consts.js @@ -0,0 +1,30 @@ +'use strict'; + +const TAG = "UNI_OPEN_BRIDGE" + +const HTTP_STATUS = { + SUCCESS: 200 +} + +const ProviderType = { + WEIXIN_MP: 'weixin-mp', + WEIXIN_H5: 'weixin-h5', + WEIXIN_APP: 'weixin-app', + WEIXIN_WEB: 'weixin-web', + QQ_MP: 'qq-mp', + QQ_APP: 'qq-app' +} + +// old +const PlatformType = ProviderType + +const ErrorCodeType = { + SYSTEM_ERROR: TAG + "_SYSTEM_ERROR" +} + +module.exports = { + HTTP_STATUS, + ProviderType, + PlatformType, + ErrorCodeType +} diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/index.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/index.js new file mode 100644 index 00000000..1b5a340b --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/index.js @@ -0,0 +1,317 @@ +'use strict'; + +const { + PlatformType, + ProviderType, + ErrorCodeType +} = require('./consts.js') + +const { + AppConfig +} = require('./config.js') + +const { + Storage +} = require('./storage.js') + +const { + BridgeError +} = require('./bridge-error.js') + +const { + WeixinServer +} = require('./weixin-server.js') + +const appConfig = new AppConfig() + +class AccessToken extends Storage { + + constructor() { + super('access-token', ['provider', 'appid']) + } + + async update(key) { + super.update(key) + + const result = await this.getByWeixinServer(key) + + return this.set(key, result.value, result.duration) + } + + async fallback(key) { + return this.getByWeixinServer(key) + } + + async getByWeixinServer(key) { + const oauthConfig = appConfig.get(key.dcloudAppid, key.provider) + let methodName + if (key.provider === ProviderType.WEIXIN_MP) { + methodName = 'GetMPAccessTokenData' + } else if (key.provider === ProviderType.WEIXIN_H5) { + methodName = 'GetH5AccessTokenData' + } else { + throw new BridgeError(ErrorCodeType.SYSTEM_ERROR, "provider invalid") + } + + const responseData = await WeixinServer[methodName](oauthConfig) + + const duration = responseData.expires_in || (60 * 60 * 2) + delete responseData.expires_in + + return { + value: responseData, + duration + } + } +} + +class UserAccessToken extends Storage { + + constructor() { + super('user-access-token', ['provider', 'appid', 'openid']) + } +} + +class SessionKey extends Storage { + + constructor() { + super('session-key', ['provider', 'appid', 'openid']) + } +} + +class Encryptkey extends Storage { + + constructor() { + super('encrypt-key', ['provider', 'appid', 'openid']) + } + + async update(key) { + super.update(key) + + const result = await this.getByWeixinServer(key) + + return this.set(key, result.value, result.duration) + } + + getKeyString(key) { + return `${super.getKeyString(key)}-${key.version}` + } + + getExpiresIn(value) { + if (value <= 0) { + return 60 + } + return value + } + + async fallback(key) { + return this.getByWeixinServer(key) + } + + async getByWeixinServer(key) { + const accessToken = await Factory.Get(AccessToken, key) + const userSession = await Factory.Get(SessionKey, key) + + const responseData = await WeixinServer.GetUserEncryptKeyData({ + openid: key.openid, + access_token: accessToken.access_token, + session_key: userSession.session_key + }) + + const keyInfo = responseData.key_info_list.find((item) => { + return item.version === key.version + }) + + if (!keyInfo) { + throw new BridgeError(ErrorCodeType.SYSTEM_ERROR, 'key version invalid') + } + + const value = { + encrypt_key: keyInfo.encrypt_key, + iv: keyInfo.iv + } + + return { + value, + duration: keyInfo.expire_in || (24 * 60 * 60) + } + } +} + +class Ticket extends Storage { + + constructor() { + super('ticket', ['provider', 'appid']) + } + + async update(key) { + super.update(key) + + const result = await this.getByWeixinServer(key) + + return this.set(key, result.value, result.duration) + } + + async fallback(key) { + return this.getByWeixinServer(key) + } + + async getByWeixinServer(key) { + const accessToken = await Factory.Get(AccessToken, { + dcloudAppid: key.dcloudAppid, + provider: ProviderType.WEIXIN_H5 + }) + + const responseData = await WeixinServer.GetH5TicketData(accessToken) + + const duration = responseData.expires_in || (60 * 60 * 2) + delete responseData.expires_in + delete responseData.errcode + delete responseData.errmsg + + return { + value: responseData, + duration + } + } +} + + +const Factory = { + + async Get(T, key, fallback) { + Factory.FixOldKey(key) + return Factory.MakeUnique(T).get(key, fallback) + }, + + async Set(T, key, value, expiresIn) { + Factory.FixOldKey(key) + return Factory.MakeUnique(T).set(key, value, expiresIn) + }, + + async Remove(T, key) { + Factory.FixOldKey(key) + return Factory.MakeUnique(T).remove(key) + }, + + async Update(T, key) { + Factory.FixOldKey(key) + return Factory.MakeUnique(T).update(key) + }, + + FixOldKey(key) { + if (!key.provider) { + key.provider = key.platform + } + + const configData = appConfig.get(key.dcloudAppid, key.provider) + if (!configData) { + throw new BridgeError(ErrorCodeType.SYSTEM_ERROR, 'appid or provider invalid') + } + key.appid = configData.appid + }, + + MakeUnique(T) { + return new T() + } +} + + +// exports + +async function getAccessToken(key, fallback) { + return Factory.Get(AccessToken, key, fallback) +} + +async function setAccessToken(key, value, expiresIn) { + return Factory.Set(AccessToken, key, value, expiresIn) +} + +async function removeAccessToken(key) { + return Factory.Remove(AccessToken, key) +} + +async function updateAccessToken(key) { + return Factory.Update(AccessToken, key) +} + +async function getUserAccessToken(key, fallback) { + return Factory.Get(UserAccessToken, key, fallback) +} + +async function setUserAccessToken(key, value, expiresIn) { + return Factory.Set(UserAccessToken, key, value, expiresIn) +} + +async function removeUserAccessToken(key) { + return Factory.Remove(UserAccessToken, key) +} + +async function getSessionKey(key, fallback) { + return Factory.Get(SessionKey, key, fallback) +} + +async function setSessionKey(key, value, expiresIn) { + return Factory.Set(SessionKey, key, value, expiresIn) +} + +async function removeSessionKey(key) { + return Factory.Remove(SessionKey, key) +} + +async function getEncryptKey(key, fallback) { + return Factory.Get(Encryptkey, key, fallback) +} + +async function setEncryptKey(key, value, expiresIn) { + return Factory.Set(Encryptkey, key, value, expiresIn) +} + +async function removeEncryptKey(key) { + return Factory.Remove(Encryptkey, key) +} + +async function updateEncryptKey(key) { + return Factory.Update(Encryptkey, key) +} + +async function getTicket(key, fallback) { + return Factory.Get(Ticket, key, fallback) +} + +async function setTicket(key, value, expiresIn) { + return Factory.Set(Ticket, key, value, expiresIn) +} + +async function removeTicket(key) { + return Factory.Remove(Ticket, key) +} + +async function updateTicket(key) { + return Factory.Update(Ticket, key) +} + +module.exports = { + getAccessToken, + setAccessToken, + removeAccessToken, + updateAccessToken, + getUserAccessToken, + setUserAccessToken, + removeUserAccessToken, + getSessionKey, + setSessionKey, + removeSessionKey, + getEncryptKey, + setEncryptKey, + removeEncryptKey, + updateEncryptKey, + getTicket, + setTicket, + removeTicket, + updateTicket, + ProviderType, + PlatformType, + WeixinServer, + ErrorCodeType +} diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/package.json b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/package.json new file mode 100644 index 00000000..e2770618 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/package.json @@ -0,0 +1,19 @@ +{ + "name": "uni-open-bridge-common", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "uni-config-center": "file:..\/..\/..\/..\/..\/uni-config-center\/uniCloud\/cloudfunctions\/common\/uni-config-center" + }, + "origin-plugin-dev-name": "uni-open-bridge-common", + "origin-plugin-version": "1.2.1", + "plugin-dev-name": "uni-open-bridge-common", + "plugin-version": "1.2.1" +} \ No newline at end of file diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/storage.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/storage.js new file mode 100644 index 00000000..b1665cc8 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/storage.js @@ -0,0 +1,116 @@ +'use strict'; + +const { + Validator +} = require('./validator.js') + +const { + CacheKeyCascade +} = require('./uni-cloud-cache.js') + +const { + BridgeError +} = require('./bridge-error.js') + +class Storage { + + constructor(type, keys) { + this._type = type || null + this._keys = keys || [] + } + + async get(key, fallback) { + this.validateKey(key) + const result = await this.create(key, fallback).get() + return result.value + } + + async set(key, value, expiresIn) { + this.validateKey(key) + this.validateValue(value) + const expires_in = this.getExpiresIn(expiresIn) + if (expires_in !== 0) { + await this.create(key).set(this.getValue(value), expires_in) + } + } + + async remove(key) { + this.validateKey(key) + await this.create(key).remove() + } + + // virtual + async update(key) { + this.validateKey(key) + } + + async ttl(key) { + this.validateKey(key) + // 后续考虑支持 + } + + async fallback(key) { + return { + value: null, + duration: -1 + } + } + + getKeyString(key) { + const keyArray = [Storage.Prefix] + this._keys.forEach((name) => { + keyArray.push(key[name]) + }) + keyArray.push(this._type) + return keyArray.join(':') + } + + getValue(value) { + return value + } + + getExpiresIn(value) { + if (value !== undefined) { + return value + } + return -1 + } + + validateKey(key) { + Validator.Key(this._keys, key) + } + + validateValue(value) { + Validator.Value(value) + } + + create(key, fallback) { + const keyString = this.getKeyString(key) + const options = { + layers: [{ + type: 'database', + key: keyString + }, { + type: 'redis', + key: keyString + }] + } + + const _this = this + return new CacheKeyCascade({ + ...options, + fallback: async function() { + if (fallback) { + return fallback(key) + } else if (_this.fallback) { + return _this.fallback(key) + } + } + }) + } +} +Storage.Prefix = "uni-id" + +module.exports = { + Storage +}; diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/uni-cloud-cache.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/uni-cloud-cache.js new file mode 100644 index 00000000..2e4286be --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/uni-cloud-cache.js @@ -0,0 +1,324 @@ +const db = uniCloud.database() + +function getType(value) { + return Object.prototype.toString.call(value).slice(8, -1).toLowerCase() +} + +const validator = { + key: function(value) { + const err = new Error('Invalid key') + if (typeof value !== 'string') { + throw err + } + const valueTrim = value.trim() + if (!valueTrim || valueTrim !== value) { + throw err + } + }, + value: function(value) { + // 仅作简单校验 + const type = getType(value) + const validValueType = ['null', 'number', 'string', 'array', 'object'] + if (validValueType.indexOf(type) === -1) { + throw new Error('Invalid value type') + } + }, + duration: function(value) { + const err = new Error('Invalid duration') + if (value === undefined) { + return + } + if (typeof value !== 'number' || value === 0) { + throw err + } + } +} + +/** + * 入库时 expired 为过期时间对应的时间戳,永不过期用-1表示 + * 返回结果时 与redis对齐,-1表示永不过期,-2表示已过期或不存在 + */ +class DatabaseCache { + constructor({ + collection = 'opendb-open-data' + } = {}) { + this.type = 'db' + this.collection = db.collection(collection) + } + + _serializeValue(value) { + return value === undefined ? null : JSON.stringify(value) + } + + _deserializeValue(value) { + return value ? JSON.parse(value) : value + } + + async set(key, value, duration) { + validator.key(key) + validator.value(value) + validator.duration(duration) + value = this._serializeValue(value) + await this.collection.doc(key).set({ + value, + expired: duration && duration !== -1 ? Date.now() + (duration * 1000) : -1 + }) + } + + async _getWithDuration(key) { + const getKeyRes = await this.collection.doc(key).get() + const record = getKeyRes.data[0] + if (!record) { + return { + value: null, + duration: -2 + } + } + const value = this._deserializeValue(record.value) + const expired = record.expired + if (expired === -1) { + return { + value, + duration: -1 + } + } + const duration = expired - Date.now() + if (duration <= 0) { + await this.remove(key) + return { + value: null, + duration: -2 + } + } + return { + value, + duration: Math.floor(duration / 1000) + } + } + + async get(key, { + withDuration = true + } = {}) { + const result = await this._getWithDuration(key) + if (!withDuration) { + delete result.duration + } + return result + } + + async remove(key) { + await this.collection.doc(key).remove() + } +} + +class RedisCache { + constructor() { + this.type = 'redis' + this.redis = uniCloud.redis() + } + + _serializeValue(value) { + return value === undefined ? null : JSON.stringify(value) + } + + _deserializeValue(value) { + return value ? JSON.parse(value) : value + } + + async set(key, value, duration) { + validator.key(key) + validator.value(value) + validator.duration(duration) + value = this._serializeValue(value) + if (!duration || duration === -1) { + await this.redis.set(key, value) + } else { + await this.redis.set(key, value, 'EX', duration) + } + } + + async get(key, { + withDuration = false + } = {}) { + let value = await this.redis.get(key) + value = this._deserializeValue(value) + if (!withDuration) { + return { + value + } + } + const durationSecond = await this.redis.ttl(key) + let duration + switch (durationSecond) { + case -1: + duration = -1 + break + case -2: + duration = -2 + break + default: + duration = durationSecond + break + } + return { + value, + duration + } + } + + async remove(key) { + await this.redis.del(key) + } +} + +class Cache { + constructor({ + type, + collection + } = {}) { + if (type === 'database') { + return new DatabaseCache({ + collection + }) + } else if (type === 'redis') { + return new RedisCache() + } else { + throw new Error('Invalid cache type') + } + } +} + +class CacheKey { + constructor({ + type, + collection, + cache, + key, + fallback + } = {}) { + this.cache = cache || new Cache({ + type, + collection + }) + this.key = key + this.fallback = fallback + } + + async set(value, duration) { + await this.cache.set(this.key, value, duration) + } + + async setWithSync(value, duration, syncMethod) { + await Promise.all([ + this.set(this.key, value, duration), + syncMethod(value, duration) + ]) + } + + async get() { + let { + value, + duration + } = await this.cache.get(this.key) + if (value !== null && value !== undefined) { + return { + value, + duration + } + } + if (!this.fallback) { + return { + value: null, + duration: -2 + } + } + const fallbackResult = await this.fallback() + value = fallbackResult.value + duration = fallbackResult.duration + if (value !== null && duration !== undefined) { + await this.cache.set(this.key, value, duration) + } + return { + value, + duration + } + } + + async remove() { + await this.cache.remove(this.key) + } +} + +class CacheKeyCascade { + constructor({ + layers, // [{cache, type, collection, key}] 从低级到高级排序,[DbCacheKey, RedisCacheKey] + fallback + } = {}) { + this.layers = layers + this.cacheLayers = [] + let lastCacheKey + for (let i = 0; i < layers.length; i++) { + const { + type, + cache, + collection, + key + } = layers[i] + const lastCacheKeyTemp = lastCacheKey + try { + const currentCacheKey = new CacheKey({ + type, + collection, + cache, + key, + fallback: i === 0 ? fallback : function() { + return lastCacheKeyTemp.get() + } + }) + this.cacheLayers.push(currentCacheKey) + lastCacheKey = currentCacheKey + } catch (e) {} + } + this.highLevelCache = lastCacheKey + } + + async set(value, duration) { + return Promise.all( + this.cacheLayers.map(item => { + return item.set(value, duration) + }) + ) + } + + async setWithSync(value, duration, syncMethod) { + const setPromise = this.cacheLayers.map(item => { + return item.set(value, duration) + }) + return Promise.all( + [ + ...setPromise, + syncMethod(value, duration) + ] + ) + } + + async get() { + return this.highLevelCache.get() + } + + async remove() { + await Promise.all( + this.cacheLayers.map(cacheKeyItem => { + return cacheKeyItem.remove() + }) + ) + } +} + +module.exports = { + Cache, + DatabaseCache, + RedisCache, + CacheKey, + CacheKeyCascade +} diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/validator.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/validator.js new file mode 100644 index 00000000..47a455b1 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/validator.js @@ -0,0 +1,31 @@ +const Validator = { + + Key(keyArray, parameters) { + for (let i = 0; i < keyArray.length; i++) { + const keyName = keyArray[i] + if (typeof parameters[keyName] !== 'string') { + Validator.ThrowNewError(`Invalid ${keyName}`) + } + if (parameters[keyName].length < 1) { + Validator.ThrowNewError(`Invalid ${keyName}`) + } + } + }, + + Value(value) { + if (value === undefined) { + Validator.ThrowNewError('Invalid Value') + } + if (typeof value !== 'object') { + Validator.ThrowNewError('Invalid Value Type') + } + }, + + ThrowNewError(message) { + throw new Error(message) + } +} + +module.exports = { + Validator +} diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/weixin-server.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/weixin-server.js new file mode 100644 index 00000000..ef476f16 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/weixin-server.js @@ -0,0 +1,203 @@ +'use strict'; + +const crypto = require('crypto') + +const { + HTTP_STATUS +} = require('./consts.js') + +const { + BridgeError +} = require('./bridge-error.js') + +class WeixinServer { + + constructor(options = {}) { + this._appid = options.appid + this._secret = options.secret + } + + getAccessToken() { + return uniCloud.httpclient.request(WeixinServer.AccessToken_Url, { + dataType: 'json', + method: 'POST', + contentType: 'json', + data: { + appid: this._appid, + secret: this._secret, + grant_type: "client_credential" + } + }) + } + + // 使用客户端获取的 code 从微信服务器换取 openid,code 仅可使用一次 + codeToSession(code) { + return uniCloud.httpclient.request(WeixinServer.Code2Session_Url, { + dataType: 'json', + data: { + appid: this._appid, + secret: this._secret, + js_code: code, + grant_type: 'authorization_code' + } + }) + } + + getUserEncryptKey({ + access_token, + openid, + session_key + }) { + console.log(access_token, openid, session_key); + const signature = crypto.createHmac('sha256', session_key).update('').digest('hex') + return uniCloud.httpclient.request(WeixinServer.User_Encrypt_Key_Url, { + dataType: 'json', + method: 'POST', + dataAsQueryString: true, + data: { + access_token, + openid: openid, + signature: signature, + sig_method: 'hmac_sha256' + } + }) + } + + getH5AccessToken() { + return uniCloud.httpclient.request(WeixinServer.AccessToken_H5_Url, { + dataType: 'json', + method: 'GET', + data: { + appid: this._appid, + secret: this._secret, + grant_type: "client_credential" + } + }) + } + + getH5Ticket(access_token) { + return uniCloud.httpclient.request(WeixinServer.Ticket_Url, { + dataType: 'json', + dataAsQueryString: true, + method: 'POST', + data: { + access_token + } + }) + } + + getH5AccessTokenForEip() { + return uniCloud.httpProxyForEip.postForm(WeixinServer.AccessToken_H5_Url, { + appid: this._appid, + secret: this._secret, + grant_type: "client_credential" + }, { + dataType: 'json' + }) + } + + getH5TicketForEip(access_token) { + return uniCloud.httpProxyForEip.postForm(WeixinServer.Ticket_Url, { + access_token + }, { + dataType: 'json', + dataAsQueryString: true + }) + } +} + +WeixinServer.AccessToken_Url = 'https://api.weixin.qq.com/cgi-bin/stable_token' +WeixinServer.Code2Session_Url = 'https://api.weixin.qq.com/sns/jscode2session' +WeixinServer.User_Encrypt_Key_Url = 'https://api.weixin.qq.com/wxa/business/getuserencryptkey' +WeixinServer.AccessToken_H5_Url = 'https://api.weixin.qq.com/cgi-bin/token' +WeixinServer.Ticket_Url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi' + +WeixinServer.GetMPAccessToken = function(options) { + return new WeixinServer(options).getAccessToken() +} + +WeixinServer.GetCodeToSession = function(options) { + return new WeixinServer(options).codeToSession(options.code) +} + +WeixinServer.GetUserEncryptKey = function(options) { + return new WeixinServer(options).getUserEncryptKey(options) +} + +WeixinServer.GetH5AccessToken = function(options) { + return new WeixinServer(options).getH5AccessToken() +} + +WeixinServer.GetH5Ticket = function(options) { + return new WeixinServer(options).getH5Ticket(options.access_token) +} + +//////////////////////////////////////////////////////////////// + +function isAliyun() { + return (uniCloud.getCloudInfos()[0].provider === 'aliyun') +} + +WeixinServer.GetResponseData = function(response) { + console.log("WeixinServer::response", response) + + if (!(response.status === HTTP_STATUS.SUCCESS || response.statusCodeValue === HTTP_STATUS.SUCCESS)) { + throw new BridgeError(response.status || response.statusCodeValue, response.status || response.statusCodeValue) + } + + const responseData = response.data || response.body + + if (responseData.errcode !== undefined && responseData.errcode !== 0) { + throw new BridgeError(responseData.errcode, responseData.errmsg) + } + + return responseData +} + +WeixinServer.GetMPAccessTokenData = async function(options) { + const response = await new WeixinServer(options).getAccessToken() + return WeixinServer.GetResponseData(response) +} + +WeixinServer.GetCodeToSessionData = async function(options) { + const response = await new WeixinServer(options).codeToSession(options.code) + return WeixinServer.GetResponseData(response) +} + +WeixinServer.GetUserEncryptKeyData = async function(options) { + const response = await new WeixinServer(options).getUserEncryptKey(options) + return WeixinServer.GetResponseData(response) +} + +WeixinServer.GetH5AccessTokenData = async function(options) { + const ws = new WeixinServer(options) + let response + if (isAliyun()) { + response = await ws.getH5AccessTokenForEip() + if (typeof response === 'string') { + response = JSON.parse(response) + } + } else { + response = await ws.getH5AccessToken() + } + return WeixinServer.GetResponseData(response) +} + +WeixinServer.GetH5TicketData = async function(options) { + const ws = new WeixinServer(options) + let response + if (isAliyun()) { + response = await ws.getH5TicketForEip(options.access_token) + if (typeof response === 'string') { + response = JSON.parse(response) + } + } else { + response = await ws.getH5Ticket(options.access_token) + } + return WeixinServer.GetResponseData(response) +} + + +module.exports = { + WeixinServer +} diff --git a/uni_modules/uni-open-bridge-common/uniCloud/database/opendb-open-data.schema.json b/uni_modules/uni-open-bridge-common/uniCloud/database/opendb-open-data.schema.json new file mode 100644 index 00000000..bc250988 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/database/opendb-open-data.schema.json @@ -0,0 +1,19 @@ +// 文档教程: https://uniapp.dcloud.net.cn/uniCloud/schema +{ + "bsonType": "object", + "required": ["_id", "value"], + "properties": { + "_id": { + "bsonType": "string", + "description": "key,格式:uni-id:[provider]:[appid]:[openid]:[access-token|user-access-token|session-key|encrypt-key-version|ticket]" + }, + "value": { + "bsonType": "object", + "description": "字段_id对应的值" + }, + "expired": { + "bsonType": "date", + "description": "过期时间" + } + } +} diff --git a/uni_modules/uni-pagination/changelog.md b/uni_modules/uni-pagination/changelog.md new file mode 100644 index 00000000..e09db35d --- /dev/null +++ b/uni_modules/uni-pagination/changelog.md @@ -0,0 +1,27 @@ +## 1.2.4(2022-09-19) +- 修复,未对主题色设置默认色,导致未引入 uni-scss 变量文件报错。 +- 修复,未对移动端当前页文字做主题色适配。 +## 1.2.3(2022-09-15) +- 修复未使用 uni-scss 主题色的 bug。 +## 1.2.2(2022-07-06) +- 修复 es 语言 i18n 错误 +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.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-pagination](https://uniapp.dcloud.io/component/uniui/uni-pagination) +## 1.1.2(2021-10-08) +- 修复 current 、value 属性未监听,导致高亮样式失效的 bug +## 1.1.1(2021-08-20) +- 新增 支持国际化 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-12) +- 新增 PC 和 移动端适配不同的 ui +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json new file mode 100644 index 00000000..59148149 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "prev", + "uni-pagination.nextText": "next", + "uni-pagination.piecePerPage": "piece/page" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json new file mode 100644 index 00000000..b62ab5b1 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "anterior", + "uni-pagination.nextText": "prxima", + "uni-pagination.piecePerPage": "Artculo/Pgina" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json new file mode 100644 index 00000000..0d29b6a3 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "précédente", + "uni-pagination.nextText": "suivante", + "uni-pagination.piecePerPage": "Articles/Pages" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js b/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js new file mode 100644 index 00000000..01986f1b --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js @@ -0,0 +1,12 @@ +import en from './en.json' +import es from './es.json' +import fr from './fr.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + es, + fr, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json new file mode 100644 index 00000000..402768c5 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "上一页", + "uni-pagination.nextText": "下一页", + "uni-pagination.piecePerPage": "条/页" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json new file mode 100644 index 00000000..04cfbf07 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "上一頁", + "uni-pagination.nextText": "下一頁", + "uni-pagination.piecePerPage": "條/頁" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue b/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue new file mode 100644 index 00000000..cf0efce4 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue @@ -0,0 +1,465 @@ + + + + + diff --git a/uni_modules/uni-pagination/package.json b/uni_modules/uni-pagination/package.json new file mode 100644 index 00000000..38595f8b --- /dev/null +++ b/uni_modules/uni-pagination/package.json @@ -0,0 +1,83 @@ +{ + "id": "uni-pagination", + "displayName": "uni-pagination 分页器", + "version": "1.2.4", + "description": "Pagination 分页器组件,用于展示页码、请求数据等。", + "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","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "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-pagination/readme.md b/uni_modules/uni-pagination/readme.md new file mode 100644 index 00000000..dd418a86 --- /dev/null +++ b/uni_modules/uni-pagination/readme.md @@ -0,0 +1,11 @@ + + +## Pagination 分页器 +> **组件名:uni-pagination** +> 代码块: `uPagination` + + +分页器组件,用于展示页码、请求数据等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-pagination) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-popup/changelog.md b/uni_modules/uni-popup/changelog.md new file mode 100644 index 00000000..505fc70c --- /dev/null +++ b/uni_modules/uni-popup/changelog.md @@ -0,0 +1,90 @@ +## 1.9.6(2025-01-08) +- 修复 示例中过期图片地址 +## 1.9.5(2024-10-15) +- 修复 微信小程序中的getSystemInfo警告 +## 1.9.2(2024-09-21) +- 修复 uni-popup在android上的重复点击弹出位置不正确的bug +## 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 00000000..a747b9fc --- /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 00000000..e42bfaf0 --- /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 00000000..7f27a1e1 --- /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 00000000..049cd5cf --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue @@ -0,0 +1,188 @@ + + + + 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 00000000..8c0f5f38 --- /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 00000000..fa8f0f37 --- /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 00000000..8e5b99f0 --- /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 00000000..06ce1629 --- /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 00000000..16a58188 --- /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 00000000..a37fb9fc --- /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 00000000..5eb8d5be --- /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 00000000..5af55e01 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue @@ -0,0 +1,518 @@ + + + + diff --git a/uni_modules/uni-popup/package.json b/uni_modules/uni-popup/package.json new file mode 100644 index 00000000..da485a45 --- /dev/null +++ b/uni_modules/uni-popup/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-popup", + "displayName": "uni-popup 弹出层", + "version": "1.9.6", + "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", + "app-harmony": "u", + "app-uvue": "u" + }, + "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 00000000..fdad4b3d --- /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-rate/changelog.md b/uni_modules/uni-rate/changelog.md new file mode 100644 index 00000000..6c001713 --- /dev/null +++ b/uni_modules/uni-rate/changelog.md @@ -0,0 +1,27 @@ +## 1.3.2(2026-02-09) +- 修复 pc 触屏问题 +## 1.3.1(2022-02-25) +- 修复 条件判断 `NaN` 错误的 bug +## 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-rate](https://uniapp.dcloud.io/component/uniui/uni-rate) +## 1.2.2(2021-09-10) +- 优化 默认值修改为 0 颗星 +## 1.2.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.2(2021-05-12) +- 新增 组件示例地址 +## 1.1.1(2021-04-21) +- 修复 布局变化后 uni-rate 星星计算不准确的 bug +- 优化 添加依赖 uni-icons, 导入 uni-rate 自动下载依赖 +## 1.1.0(2021-04-16) +- 修复 uni-rate 属性 margin 值为 string 组件失效的 bug + +## 1.0.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.8(2021-02-05) +- 调整为uni_modules目录规范 +- 支持 pc 端 diff --git a/uni_modules/uni-rate/components/uni-rate/uni-rate.vue b/uni_modules/uni-rate/components/uni-rate/uni-rate.vue new file mode 100644 index 00000000..0cf1d606 --- /dev/null +++ b/uni_modules/uni-rate/components/uni-rate/uni-rate.vue @@ -0,0 +1,371 @@ + + + + + diff --git a/uni_modules/uni-rate/package.json b/uni_modules/uni-rate/package.json new file mode 100644 index 00000000..bad3bbeb --- /dev/null +++ b/uni_modules/uni-rate/package.json @@ -0,0 +1,106 @@ +{ + "id": "uni-rate", + "displayName": "uni-rate 评分", + "version": "1.3.2", + "description": "Rate 评分组件,可自定义评分星星图标的大小、间隔、评分数。", + "keywords": [ + "uni-ui", + "uniui", + "评分" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "", + "uni-app": "^4.05", + "uni-app-x": "" + }, + "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", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "x", + "aliyun": "x", + "alipay": "x" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "√", + "vue3": "√" + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "√", + "android": "√", + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "√", + "toutiao": "√", + "baidu": "√", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "√", + "lark": "-", + "xhs": "-" + }, + "quickapp": { + "huawei": "√", + "union": "√" + } + }, + "uni-app-x": { + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "android": "-", + "ios": "-", + "harmony": "-" + }, + "mp": { + "weixin": "-" + } + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-rate/readme.md b/uni_modules/uni-rate/readme.md new file mode 100644 index 00000000..49f4ae25 --- /dev/null +++ b/uni_modules/uni-rate/readme.md @@ -0,0 +1,11 @@ + + +## Rate 评分 +> **组件名:uni-rate** +> 代码块: `uRate` +> 关联组件:`uni-icons` + + +评分组件,多用于购买商品后,对商品进行评价等场景 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-rate) \ No newline at end of file diff --git a/uni_modules/uni-row/changelog.md b/uni_modules/uni-row/changelog.md new file mode 100644 index 00000000..a97d8930 --- /dev/null +++ b/uni_modules/uni-row/changelog.md @@ -0,0 +1,10 @@ +## 1.0.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-row](https://uniapp.dcloud.io/component/uniui/uni-row) +## 0.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-02-05) +- 调整为uni_modules目录规范 +- 新增uni-row组件 diff --git a/uni_modules/uni-row/components/uni-col/uni-col.vue b/uni_modules/uni-row/components/uni-col/uni-col.vue new file mode 100644 index 00000000..5b2ecd82 --- /dev/null +++ b/uni_modules/uni-row/components/uni-col/uni-col.vue @@ -0,0 +1,317 @@ + + + + + diff --git a/uni_modules/uni-row/components/uni-row/uni-row.vue b/uni_modules/uni-row/components/uni-row/uni-row.vue new file mode 100644 index 00000000..3451cc90 --- /dev/null +++ b/uni_modules/uni-row/components/uni-row/uni-row.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/uni_modules/uni-row/package.json b/uni_modules/uni-row/package.json new file mode 100644 index 00000000..b09a8d03 --- /dev/null +++ b/uni_modules/uni-row/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-row", + "displayName": "uni-row 布局-行", + "version": "1.0.0", + "description": "流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局。", + "keywords": [ + "uni-ui", + "uniui", + "栅格", + "布局", + "layout" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "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": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-row/readme.md b/uni_modules/uni-row/readme.md new file mode 100644 index 00000000..3c9c8b99 --- /dev/null +++ b/uni_modules/uni-row/readme.md @@ -0,0 +1,10 @@ +## Layout 布局 + +> **组件名 uni-row、uni-col** +> 代码块: `uRow`、`uCol` + + +流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-row) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-scss/changelog.md b/uni_modules/uni-scss/changelog.md new file mode 100644 index 00000000..b863bb0f --- /dev/null +++ b/uni_modules/uni-scss/changelog.md @@ -0,0 +1,8 @@ +## 1.0.3(2022-01-21) +- 优化 组件示例 +## 1.0.2(2021-11-22) +- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题 +## 1.0.1(2021-11-22) +- 修复 vue3中scss语法兼容问题 +## 1.0.0(2021-11-18) +- init diff --git a/uni_modules/uni-scss/index.scss b/uni_modules/uni-scss/index.scss new file mode 100644 index 00000000..1744a5f9 --- /dev/null +++ b/uni_modules/uni-scss/index.scss @@ -0,0 +1 @@ +@import './styles/index.scss'; diff --git a/uni_modules/uni-scss/package.json b/uni_modules/uni-scss/package.json new file mode 100644 index 00000000..7cc0ccb7 --- /dev/null +++ b/uni_modules/uni-scss/package.json @@ -0,0 +1,82 @@ +{ + "id": "uni-scss", + "displayName": "uni-scss 辅助样式", + "version": "1.0.3", + "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。", + "keywords": [ + "uni-scss", + "uni-ui", + "辅助样式" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "JS SDK", + "通用 SDK" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "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" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-scss/readme.md b/uni_modules/uni-scss/readme.md new file mode 100644 index 00000000..b7d1c25f --- /dev/null +++ b/uni_modules/uni-scss/readme.md @@ -0,0 +1,4 @@ +`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/index.scss b/uni_modules/uni-scss/styles/index.scss new file mode 100644 index 00000000..ffac4fec --- /dev/null +++ b/uni_modules/uni-scss/styles/index.scss @@ -0,0 +1,7 @@ +@import './setting/_variables.scss'; +@import './setting/_border.scss'; +@import './setting/_color.scss'; +@import './setting/_space.scss'; +@import './setting/_radius.scss'; +@import './setting/_text.scss'; +@import './setting/_styles.scss'; diff --git a/uni_modules/uni-scss/styles/setting/_border.scss b/uni_modules/uni-scss/styles/setting/_border.scss new file mode 100644 index 00000000..12a11c32 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_border.scss @@ -0,0 +1,3 @@ +.uni-border { + border: 1px $uni-border-1 solid; +} \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/setting/_color.scss b/uni_modules/uni-scss/styles/setting/_color.scss new file mode 100644 index 00000000..1ededd94 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_color.scss @@ -0,0 +1,66 @@ + +// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐 +// @mixin get-styles($k,$c) { +// @if $k == size or $k == weight{ +// font-#{$k}:#{$c} +// }@else{ +// #{$k}:#{$c} +// } +// } +$uni-ui-color:( + // 主色 + primary: $uni-primary, + primary-disable: $uni-primary-disable, + primary-light: $uni-primary-light, + // 辅助色 + success: $uni-success, + success-disable: $uni-success-disable, + success-light: $uni-success-light, + warning: $uni-warning, + warning-disable: $uni-warning-disable, + warning-light: $uni-warning-light, + error: $uni-error, + error-disable: $uni-error-disable, + error-light: $uni-error-light, + info: $uni-info, + info-disable: $uni-info-disable, + info-light: $uni-info-light, + // 中性色 + main-color: $uni-main-color, + base-color: $uni-base-color, + secondary-color: $uni-secondary-color, + extra-color: $uni-extra-color, + // 背景色 + bg-color: $uni-bg-color, + // 边框颜色 + border-1: $uni-border-1, + border-2: $uni-border-2, + border-3: $uni-border-3, + border-4: $uni-border-4, + // 黑色 + black:$uni-black, + // 白色 + white:$uni-white, + // 透明 + transparent:$uni-transparent +) !default; +@each $key, $child in $uni-ui-color { + .uni-#{"" + $key} { + color: $child; + } + .uni-#{"" + $key}-bg { + background-color: $child; + } +} +.uni-shadow-sm { + box-shadow: $uni-shadow-sm; +} +.uni-shadow-base { + box-shadow: $uni-shadow-base; +} +.uni-shadow-lg { + box-shadow: $uni-shadow-lg; +} +.uni-mask { + background-color:$uni-mask; +} diff --git a/uni_modules/uni-scss/styles/setting/_radius.scss b/uni_modules/uni-scss/styles/setting/_radius.scss new file mode 100644 index 00000000..9a0428bb --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_radius.scss @@ -0,0 +1,55 @@ +@mixin radius($r,$d:null ,$important: false){ + $radius-value:map-get($uni-radius, $r) if($important, !important, null); + // Key exists within the $uni-radius variable + @if (map-has-key($uni-radius, $r) and $d){ + @if $d == t { + border-top-left-radius:$radius-value; + border-top-right-radius:$radius-value; + }@else if $d == r { + border-top-right-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == b { + border-bottom-left-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == l { + border-top-left-radius:$radius-value; + border-bottom-left-radius:$radius-value; + }@else if $d == tl { + border-top-left-radius:$radius-value; + }@else if $d == tr { + border-top-right-radius:$radius-value; + }@else if $d == br { + border-bottom-right-radius:$radius-value; + }@else if $d == bl { + border-bottom-left-radius:$radius-value; + } + }@else{ + border-radius:$radius-value; + } +} + +@each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $key} { + @include radius($key) + } + }@else{ + .uni-radius { + @include radius($key) + } + } +} + +@each $direction in t, r, b, l,tl, tr, br, bl { + @each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $direction}-#{"" + $key} { + @include radius($key,$direction,false) + } + }@else{ + .uni-radius-#{$direction} { + @include radius($key,$direction,false) + } + } + } +} diff --git a/uni_modules/uni-scss/styles/setting/_space.scss b/uni_modules/uni-scss/styles/setting/_space.scss new file mode 100644 index 00000000..3c895289 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_space.scss @@ -0,0 +1,56 @@ + +@mixin fn($space,$direction,$size,$n) { + @if $n { + #{$space}-#{$direction}: #{$size*$uni-space-root}px + } @else { + #{$space}-#{$direction}: #{-$size*$uni-space-root}px + } +} +@mixin get-styles($direction,$i,$space,$n){ + @if $direction == t { + @include fn($space, top,$i,$n); + } + @if $direction == r { + @include fn($space, right,$i,$n); + } + @if $direction == b { + @include fn($space, bottom,$i,$n); + } + @if $direction == l { + @include fn($space, left,$i,$n); + } + @if $direction == x { + @include fn($space, left,$i,$n); + @include fn($space, right,$i,$n); + } + @if $direction == y { + @include fn($space, top,$i,$n); + @include fn($space, bottom,$i,$n); + } + @if $direction == a { + @if $n { + #{$space}:#{$i*$uni-space-root}px; + } @else { + #{$space}:#{-$i*$uni-space-root}px; + } + } +} + +@each $orientation in m,p { + $space: margin; + @if $orientation == m { + $space: margin; + } @else { + $space: padding; + } + @for $i from 0 through 16 { + @each $direction in t, r, b, l, x, y, a { + .uni-#{$orientation}#{$direction}-#{$i} { + @include get-styles($direction,$i,$space,true); + } + .uni-#{$orientation}#{$direction}-n#{$i} { + @include get-styles($direction,$i,$space,false); + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/setting/_styles.scss b/uni_modules/uni-scss/styles/setting/_styles.scss new file mode 100644 index 00000000..689afec6 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_styles.scss @@ -0,0 +1,167 @@ +/* #ifndef APP-NVUE */ + +$-color-white:#fff; +$-color-black:#000; +@mixin base-style($color) { + color: #fff; + background-color: $color; + border-color: mix($-color-black, $color, 8%); + &:not([hover-class]):active { + background: mix($-color-black, $color, 10%); + border-color: mix($-color-black, $color, 20%); + color: $-color-white; + outline: none; + } +} +@mixin is-color($color) { + @include base-style($color); + &[loading] { + @include base-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &[loading], + &:not([hover-class]):active { + color: $-color-white; + border-color: mix(darken($color,10%), $-color-white); + background-color: mix($color, $-color-white); + } + } + +} +@mixin base-plain-style($color) { + color:$color; + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 70%); + &:not([hover-class]):active { + background: mix($-color-white, $color, 80%); + color: $color; + outline: none; + border-color: mix($-color-white, $color, 50%); + } +} +@mixin is-plain($color){ + &[plain] { + @include base-plain-style($color); + &[loading] { + @include base-plain-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &:active { + color: mix($-color-white, $color, 40%); + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 80%); + } + } + } +} + + +.uni-btn { + margin: 5px; + color: #393939; + border:1px solid #ccc; + font-size: 16px; + font-weight: 200; + background-color: #F9F9F9; + // TODO 暂时处理边框隐藏一边的问题 + overflow: visible; + &::after{ + border: none; + } + + &:not([type]),&[type=default] { + color: #999; + &[loading] { + background: none; + &::before { + margin-right:5px; + } + } + + + + &[disabled]{ + color: mix($-color-white, #999, 60%); + &, + &[loading], + &:active { + color: mix($-color-white, #999, 60%); + background-color: mix($-color-white,$-color-black , 98%); + border-color: mix($-color-white, #999, 85%); + } + } + + &[plain] { + color: #999; + background: none; + border-color: $uni-border-1; + &:not([hover-class]):active { + background: none; + color: mix($-color-white, $-color-black, 80%); + border-color: mix($-color-white, $-color-black, 90%); + outline: none; + } + &[disabled]{ + &, + &[loading], + &:active { + background: none; + color: mix($-color-white, #999, 60%); + border-color: mix($-color-white, #999, 85%); + } + } + } + } + + &:not([hover-class]):active { + color: mix($-color-white, $-color-black, 50%); + } + + &[size=mini] { + font-size: 16px; + font-weight: 200; + border-radius: 8px; + } + + + + &.uni-btn-small { + font-size: 14px; + } + &.uni-btn-mini { + font-size: 12px; + } + + &.uni-btn-radius { + border-radius: 999px; + } + &[type=primary] { + @include is-color($uni-primary); + @include is-plain($uni-primary) + } + &[type=success] { + @include is-color($uni-success); + @include is-plain($uni-success) + } + &[type=error] { + @include is-color($uni-error); + @include is-plain($uni-error) + } + &[type=warning] { + @include is-color($uni-warning); + @include is-plain($uni-warning) + } + &[type=info] { + @include is-color($uni-info); + @include is-plain($uni-info) + } +} +/* #endif */ diff --git a/uni_modules/uni-scss/styles/setting/_text.scss b/uni_modules/uni-scss/styles/setting/_text.scss new file mode 100644 index 00000000..a34d08f3 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_text.scss @@ -0,0 +1,24 @@ +@mixin get-styles($k,$c) { + @if $k == size or $k == weight{ + font-#{$k}:#{$c} + }@else{ + #{$k}:#{$c} + } +} + +@each $key, $child in $uni-headings { + /* #ifndef APP-NVUE */ + .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ + /* #ifdef APP-NVUE */ + .container .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ +} diff --git a/uni_modules/uni-scss/styles/setting/_variables.scss b/uni_modules/uni-scss/styles/setting/_variables.scss new file mode 100644 index 00000000..557d3d7c --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_variables.scss @@ -0,0 +1,146 @@ +// @use "sass:math"; +@import '../tools/functions.scss'; +// 间距基础倍数 +$uni-space-root: 2 !default; +// 边框半径默认值 +$uni-radius-root:5px !default; +$uni-radius: () !default; +// 边框半径断点 +$uni-radius: map-deep-merge( + ( + 0: 0, + // TODO 当前版本暂时不支持 sm 属性 + // 'sm': math.div($uni-radius-root, 2), + null: $uni-radius-root, + 'lg': $uni-radius-root * 2, + 'xl': $uni-radius-root * 6, + 'pill': 9999px, + 'circle': 50% + ), + $uni-radius +); +// 字体家族 +$body-font-family: 'Roboto', sans-serif !default; +// 文本 +$heading-font-family: $body-font-family !default; +$uni-headings: () !default; +$letterSpacing: -0.01562em; +$uni-headings: map-deep-merge( + ( + 'h1': ( + size: 32px, + weight: 300, + line-height: 50px, + // letter-spacing:-0.01562em + ), + 'h2': ( + size: 28px, + weight: 300, + line-height: 40px, + // letter-spacing: -0.00833em + ), + 'h3': ( + size: 24px, + weight: 400, + line-height: 32px, + // letter-spacing: normal + ), + 'h4': ( + size: 20px, + weight: 400, + line-height: 30px, + // letter-spacing: 0.00735em + ), + 'h5': ( + size: 16px, + weight: 400, + line-height: 24px, + // letter-spacing: normal + ), + 'h6': ( + size: 14px, + weight: 500, + line-height: 18px, + // letter-spacing: 0.0125em + ), + 'subtitle': ( + size: 12px, + weight: 400, + line-height: 20px, + // letter-spacing: 0.00937em + ), + 'body': ( + font-size: 14px, + font-weight: 400, + line-height: 22px, + // letter-spacing: 0.03125em + ), + 'caption': ( + 'size': 12px, + 'weight': 400, + 'line-height': 20px, + // 'letter-spacing': 0.03333em, + // 'text-transform': false + ) + ), + $uni-headings +); + + + +// 主色 +$uni-primary: #2979ff !default; +$uni-primary-disable:lighten($uni-primary,20%) !default; +$uni-primary-light: lighten($uni-primary,25%) !default; + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37 !default; +$uni-success-disable:lighten($uni-success,20%) !default; +$uni-success-light: lighten($uni-success,25%) !default; + +$uni-warning: #f3a73f !default; +$uni-warning-disable:lighten($uni-warning,20%) !default; +$uni-warning-light: lighten($uni-warning,25%) !default; + +$uni-error: #e43d33 !default; +$uni-error-disable:lighten($uni-error,20%) !default; +$uni-error-light: lighten($uni-error,25%) !default; + +$uni-info: #8f939c !default; +$uni-info-disable:lighten($uni-info,20%) !default; +$uni-info-light: lighten($uni-info,25%) !default; + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a !default; // 主要文字 +$uni-base-color: #6a6a6a !default; // 常规文字 +$uni-secondary-color: #909399 !default; // 次要文字 +$uni-extra-color: #c7c7c7 !default; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0 !default; +$uni-border-2: #EDEDED !default; +$uni-border-3: #DCDCDC !default; +$uni-border-4: #B9B9B9 !default; + +// 常规色 +$uni-black: #000000 !default; +$uni-white: #ffffff !default; +$uni-transparent: rgba($color: #000000, $alpha: 0) !default; + +// 背景色 +$uni-bg-color: #f7f7f7 !default; + +/* 水平间距 */ +$uni-spacing-sm: 8px !default; +$uni-spacing-base: 15px !default; +$uni-spacing-lg: 30px !default; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default; +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default; +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default; + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4) !default; diff --git a/uni_modules/uni-scss/styles/tools/functions.scss b/uni_modules/uni-scss/styles/tools/functions.scss new file mode 100644 index 00000000..ac6f63e5 --- /dev/null +++ b/uni_modules/uni-scss/styles/tools/functions.scss @@ -0,0 +1,19 @@ +// 合并 map +@function map-deep-merge($parent-map, $child-map){ + $result: $parent-map; + @each $key, $child in $child-map { + $parent-has-key: map-has-key($result, $key); + $parent-value: map-get($result, $key); + $parent-type: type-of($parent-value); + $child-type: type-of($child); + $parent-is-map: $parent-type == map; + $child-is-map: $child-type == map; + + @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){ + $result: map-merge($result, ( $key: $child )); + }@else { + $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) )); + } + } + @return $result; +}; diff --git a/uni_modules/uni-scss/theme.scss b/uni_modules/uni-scss/theme.scss new file mode 100644 index 00000000..80ee62f7 --- /dev/null +++ b/uni_modules/uni-scss/theme.scss @@ -0,0 +1,31 @@ +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; +// 主色 +$uni-primary: #2979ff; +// 辅助色 +$uni-success: #4cd964; +// 警告色 +$uni-warning: #f0ad4e; +// 错误色 +$uni-error: #dd524d; +// 描述色 +$uni-info: #909399; +// 中性色 +$uni-main-color: #303133; +$uni-base-color: #606266; +$uni-secondary-color: #909399; +$uni-extra-color: #C0C4CC; +// 背景色 +$uni-bg-color: #f5f5f5; +// 边框颜色 +$uni-border-1: #DCDFE6; +$uni-border-2: #E4E7ED; +$uni-border-3: #EBEEF5; +$uni-border-4: #F2F6FC; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); diff --git a/uni_modules/uni-scss/variables.scss b/uni_modules/uni-scss/variables.scss new file mode 100644 index 00000000..1c062d42 --- /dev/null +++ b/uni_modules/uni-scss/variables.scss @@ -0,0 +1,62 @@ +@import './styles/setting/_variables.scss'; +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; + +// 主色 +$uni-primary: #2979ff; +$uni-primary-disable:mix(#fff,$uni-primary,50%); +$uni-primary-light: mix(#fff,$uni-primary,80%); + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37; +$uni-success-disable:mix(#fff,$uni-success,50%); +$uni-success-light: mix(#fff,$uni-success,80%); + +$uni-warning: #f3a73f; +$uni-warning-disable:mix(#fff,$uni-warning,50%); +$uni-warning-light: mix(#fff,$uni-warning,80%); + +$uni-error: #e43d33; +$uni-error-disable:mix(#fff,$uni-error,50%); +$uni-error-light: mix(#fff,$uni-error,80%); + +$uni-info: #8f939c; +$uni-info-disable:mix(#fff,$uni-info,50%); +$uni-info-light: mix(#fff,$uni-info,80%); + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a; // 主要文字 +$uni-base-color: #6a6a6a; // 常规文字 +$uni-secondary-color: #909399; // 次要文字 +$uni-extra-color: #c7c7c7; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0; +$uni-border-2: #EDEDED; +$uni-border-3: #DCDCDC; +$uni-border-4: #B9B9B9; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); + +// 背景色 +$uni-bg-color: #f7f7f7; + +/* 水平间距 */ +$uni-spacing-sm: 8px; +$uni-spacing-base: 15px; +$uni-spacing-lg: 30px; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5); +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2); +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5); + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4); diff --git a/uni_modules/uni-search-bar/changelog.md b/uni_modules/uni-search-bar/changelog.md new file mode 100644 index 00000000..2c6571c0 --- /dev/null +++ b/uni_modules/uni-search-bar/changelog.md @@ -0,0 +1,47 @@ +## 1.3.0(2024-04-22) +- 修复 textColor默认值导致的文字不显示的bug +## 1.2.9(2024-04-17) +- 修复 textColor不生效的bug +## 1.2.8(2024-02-22) +- 修复 清空按钮emit值错误的bug +## 1.2.7(2024-02-21) +- 新增 设置输入框字体颜色:textColor +## 1.2.6(2024-02-20) +- 修复 uni-search-bar在支付宝小程序下样式兼容问题 +## 1.2.5(2024-01-31) +- 修复 uni-search-bar居中问题,现在默认居左,并修复样式偏移问题 +## 1.2.4(2023-05-09) +- 修复 i18n 国际化不正确的 Bug +## 1.2.3(2022-05-24) +- 新增 readonly 属性,组件只读 +## 1.2.2(2022-05-06) +- 修复 vue3 input 事件不生效的bug +## 1.2.1(2022-05-06) +- 修复 多余代码导致的bug +## 1.2.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-search-bar](https://uniapp.dcloud.io/component/uniui/uni-search-bar) +## 1.1.2(2021-08-30) +- 修复 value 属性与 modelValue 属性不兼容的Bug +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.9(2021-05-12) +- 新增 项目示例地址 +## 1.0.8(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.7(2021-04-15) +- uni-ui 新增 uni-search-bar 的 focus 事件 + +## 1.0.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持双向绑定 +- 更改 input 事件的返回值,e={value:Number} --> e=value +- 新增 支持图标插槽 +- 新增 支持 clear、blur 事件 +- 新增 支持 focus 属性 +- 去掉组件背景色 diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json new file mode 100644 index 00000000..0c72ffb3 --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "cancel", + "uni-search-bar.placeholder": "Search enter content" +} \ No newline at end of file diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js new file mode 100644 index 00000000..fa8f0f37 --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/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-search-bar/components/uni-search-bar/i18n/zh-Hans.json b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json new file mode 100644 index 00000000..d2a1ced4 --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "取消", + "uni-search-bar.placeholder": "请输入搜索内容" +} diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json new file mode 100644 index 00000000..f1c96bc4 --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "取消", + "uni-search-bar.placeholder": "請輸入搜索內容" +} diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue b/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue new file mode 100644 index 00000000..67969028 --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue @@ -0,0 +1,309 @@ + + + + + diff --git a/uni_modules/uni-search-bar/package.json b/uni_modules/uni-search-bar/package.json new file mode 100644 index 00000000..1730d9d1 --- /dev/null +++ b/uni_modules/uni-search-bar/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-search-bar", + "displayName": "uni-search-bar 搜索栏", + "version": "1.3.0", + "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", + "uni-icons" + ], + "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-search-bar/readme.md b/uni_modules/uni-search-bar/readme.md new file mode 100644 index 00000000..253092f0 --- /dev/null +++ b/uni_modules/uni-search-bar/readme.md @@ -0,0 +1,14 @@ + + +## SearchBar 搜索栏 + +> **组件名:uni-search-bar** +> 代码块: `uSearchBar` + + +搜索栏组件 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-search-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-section/changelog.md b/uni_modules/uni-section/changelog.md new file mode 100644 index 00000000..738f2b32 --- /dev/null +++ b/uni_modules/uni-section/changelog.md @@ -0,0 +1,2 @@ +## 0.0.1(2022-07-22) +- 初始化 diff --git a/uni_modules/uni-section/components/uni-section/uni-section.vue b/uni_modules/uni-section/components/uni-section/uni-section.vue new file mode 100644 index 00000000..3c0b7a3a --- /dev/null +++ b/uni_modules/uni-section/components/uni-section/uni-section.vue @@ -0,0 +1,167 @@ + + + + diff --git a/uni_modules/uni-section/package.json b/uni_modules/uni-section/package.json new file mode 100644 index 00000000..0a31fb55 --- /dev/null +++ b/uni_modules/uni-section/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-section", + "displayName": "uni-section 标题栏", + "version": "0.0.1", + "description": "标题栏组件", + "keywords": [ + "uni-ui", + "uniui", + "标题栏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "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-section/readme.md b/uni_modules/uni-section/readme.md new file mode 100644 index 00000000..d47faab7 --- /dev/null +++ b/uni_modules/uni-section/readme.md @@ -0,0 +1,8 @@ +## Section 标题栏 +> **组件名:uni-section** +> 代码块: `uSection` + +uni-section 组件主要用于文章、列表详情等标题展示 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-section) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-segmented-control/changelog.md b/uni_modules/uni-segmented-control/changelog.md new file mode 100644 index 00000000..7d26c78e --- /dev/null +++ b/uni_modules/uni-segmented-control/changelog.md @@ -0,0 +1,15 @@ +## 1.2.3(2024-04-02) +- 修复 修复在微信小程序下inactiveColor失效bug +## 1.2.2(2024-03-28) +- 修复 在vue2下:style动态绑定导致编译失败的bug +## 1.2.1(2024-03-20) +- 新增 inActiveColor属性,可供配置未激活时的颜色 +## 1.2.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-segmented-control](https://uniapp.dcloud.io/component/uniui/uni-segmented-control) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.5(2021-05-12) +- 新增 项目示例地址 +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/components/uni-segmented-control/uni-segmented-control.vue b/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue similarity index 58% rename from components/uni-segmented-control/uni-segmented-control.vue rename to uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue index 0ec7a3a4..272cbf50 100644 --- a/components/uni-segmented-control/uni-segmented-control.vue +++ b/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue @@ -1,16 +1,18 @@ @@ -25,12 +27,14 @@ * @value button 按钮类型 * @value text 文字类型 * @property {String} activeColor 选中的标签背景色与边框颜色 + * @property {String} inActiveColor 未选中的标签背景色与边框颜色 * @property {Array} values 选项数组 * @event {Function} clickItem 组件触发点击事件时触发,e={currentIndex} */ export default { name: 'UniSegmentedControl', + emits: ['clickItem'], props: { current: { type: Number, @@ -44,7 +48,11 @@ }, activeColor: { type: String, - default: '#007aff' + default: '#2979FF' + }, + inActiveColor: { + type: String, + default: 'transparent' }, styleType: { type: String, @@ -63,6 +71,7 @@ } } }, + computed: {}, created() { this.currentIndex = this.current }, @@ -79,7 +88,7 @@ } - \ No newline at end of file + diff --git a/uni_modules/uni-segmented-control/package.json b/uni_modules/uni-segmented-control/package.json new file mode 100644 index 00000000..4d3b7a32 --- /dev/null +++ b/uni_modules/uni-segmented-control/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-segmented-control", + "displayName": "uni-segmented-control 分段器", + "version": "1.2.3", + "description": "分段器由至少 2 个分段控件组成,用作不同视图的显示", + "keywords": [ + "uni-ui", + "uniui", + "分段器", + "segement", + "顶部选择" +], + "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-segmented-control/readme.md b/uni_modules/uni-segmented-control/readme.md new file mode 100644 index 00000000..3527b03f --- /dev/null +++ b/uni_modules/uni-segmented-control/readme.md @@ -0,0 +1,13 @@ + + +## SegmentedControl 分段器 +> **组件名:uni-segmented-control** +> 代码块: `uSegmentedControl` + + +用作不同视图的显示 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-segmented-control) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-steps/changelog.md b/uni_modules/uni-steps/changelog.md new file mode 100644 index 00000000..b8963915 --- /dev/null +++ b/uni_modules/uni-steps/changelog.md @@ -0,0 +1,18 @@ +## 1.1.2(2024-03-28) +- 修复 uni-steps为竖排列时,文本长度过长引起点错乱的bug +## 1.1.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.1.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-steps](https://uniapp.dcloud.io/component/uniui/uni-steps) +## 1.0.8(2021-05-12) +- 新增 项目示例地址 +## 1.0.7(2021-05-06) +- 修复 uni-steps 横向布局时,多行文字高度不合理的 bug +## 1.0.6(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/components/uni-steps/uni-steps.vue b/uni_modules/uni-steps/components/uni-steps/uni-steps.vue similarity index 58% rename from components/uni-steps/uni-steps.vue rename to uni_modules/uni-steps/components/uni-steps/uni-steps.vue index 25af75c7..473d9c95 100644 --- a/components/uni-steps/uni-steps.vue +++ b/uni_modules/uni-steps/components/uni-steps/uni-steps.vue @@ -2,19 +2,30 @@ - - {{item.title}} - {{item.desc}} + + {{item.title}} + {{item.desc}} - - - - + + - - + + + + + @@ -22,8 +33,6 @@ - \ No newline at end of file + diff --git a/uni_modules/uni-steps/package.json b/uni_modules/uni-steps/package.json new file mode 100644 index 00000000..701d8849 --- /dev/null +++ b/uni_modules/uni-steps/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-steps", + "displayName": "uni-steps 步骤条", + "version": "1.1.2", + "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", + "uni-icons" + ], + "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-steps/readme.md b/uni_modules/uni-steps/readme.md new file mode 100644 index 00000000..7c0a94ed --- /dev/null +++ b/uni_modules/uni-steps/readme.md @@ -0,0 +1,13 @@ + + +## Steps 步骤条 +> **组件名:uni-steps** +> 代码块: `uSteps` + + +步骤条,常用于显示进度 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-steps) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-swipe-action/changelog.md b/uni_modules/uni-swipe-action/changelog.md new file mode 100644 index 00000000..cc431eae --- /dev/null +++ b/uni_modules/uni-swipe-action/changelog.md @@ -0,0 +1,60 @@ +## 1.3.17(2026-02-09) +- 修复 pc 触屏问题 +## 1.3.16(2025-06-11) +- 修复 鸿蒙 next 浏览器上无法滑动的问题 +## 1.3.14(2025-06-09) +- 优化 更新示例项目 +## 1.3.13(2025-04-15) +- 修复 app 端 缺少leftOptions 或 rightOptions 时无法滑动的问题 +## 1.3.12(2025-04-14) +- 修复 由上一个兼容版本引发的 安卓运行报错且无法回弹的问题 +## 1.3.11(2025-04-08) +- 优化 兼容鸿蒙平台 +- 修复 WEB 平台控制台报错 +## 1.3.10(2024-01-17) +- 修复 点击按钮时,按钮会被点击穿透导致自动收缩的 bug(兼容阿里/百度/抖音小程序) +## 1.3.9(2024-01-17) +- 修复 点击按钮时,按钮会被点击穿透导致自动收缩的 bug +## 1.3.8(2023-04-13) +- 修复`uni-swipe-action`和`uni-swipe-action-item`不同时使用导致 closeOther 方法报错的 bug +## 1.3.7(2022-06-06) +- 修复 vue3 下使用组件不能正常运行的Bug +## 1.3.6(2022-05-31) +- 修复 h5端点击click触发两次的Bug +## 1.3.5(2022-05-23) +- 修复 isPC 找不到的Bug +## 1.3.4(2022-05-19) +- 修复 在 nvue 下 disabled 失效的bug +## 1.3.3(2022-03-31) +- 修复 按钮字体大小不能设置的bug +## 1.3.2(2022-03-16) +- 修复 h5和app端下报el错误的bug +## 1.3.1(2022-03-07) +- 修复 HBuilderX 1.4.X 版本中,h5和app端下报错的bug +## 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-swipe-action](https://uniapp.dcloud.io/component/uniui/uni-swipe-action) +## 1.2.4(2021-08-20) +- 优化 close-all 方法 +## 1.2.3(2021-08-20) +- 新增 close-all 方法,关闭所有已打开的组件 +## 1.2.2(2021-08-17) +- 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件 +- 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题 +- 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题 +## 1.2.1(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +- 修复 跨页面修改组件数据 ,导致不能滑动的问题 +## 1.1.10(2021-06-17) +- 修复 按钮点击执行两次的bug +## 1.1.9(2021-05-12) +- 新增 项目示例地址 +## 1.1.8(2021-03-26) +- 修复 微信小程序 nv_navigator is not defined 报错的bug +## 1.1.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 左侧滑动 +- 新增 插槽使用方式 +- 新增 threshold 属性,可以控制滑动缺省值 +- 优化 长列表滚动性能 +- 修复 滚动页面时触发组件滑动的Bug diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js new file mode 100644 index 00000000..caa34a62 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js @@ -0,0 +1,302 @@ +let bindIngXMixins = {} + +// #ifdef APP-NVUE +const BindingX = uni.requireNativePlugin('bindingx'); +const dom = uni.requireNativePlugin('dom'); +const animation = uni.requireNativePlugin('animation'); + +bindIngXMixins = { + data() { + return {} + }, + + watch: { + show(newVal) { + if (this.autoClose) return + if (this.stop) return + this.stop = true + if (newVal) { + this.open(newVal) + } else { + this.close() + } + }, + leftOptions() { + this.getSelectorQuery() + this.init() + }, + rightOptions(newVal) { + this.init() + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction && Array.isArray(this.swipeaction.children)) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.box = this.getEl(this.$refs['selector-box--hock']) + this.selector = this.getEl(this.$refs['selector-content--hock']); + this.leftButton = this.getEl(this.$refs['selector-left-button--hock']); + this.rightButton = this.getEl(this.$refs['selector-right-button--hock']); + this.init() + }, + // beforeDestroy() { + // this.swipeaction.children.forEach((item, index) => { + // if (item === this) { + // this.swipeaction.children.splice(index, 1) + // } + // }) + // }, + methods: { + init() { + this.$nextTick(() => { + this.x = 0 + this.button = { + show: false + } + setTimeout(() => { + this.getSelectorQuery() + }, 200) + }) + }, + onClick(index, item, position) { + this.$emit('click', { + content: item, + index, + position + }) + }, + touchstart(e) { + // fix by mehaotian 禁止滑动 + if (this.disabled) return + // 每次只触发一次,避免多次监听造成闪烁 + if (this.stop) return + this.stop = true + if (this.autoClose && this.swipeaction) { + this.swipeaction.closeOther(this) + } + + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + let expression = this.range(this.x, -rightWidth, leftWidth) + let leftExpression = this.range(this.x - leftWidth, -leftWidth, 0) + let rightExpression = this.range(this.x + rightWidth, 0, rightWidth) + + this.eventpan = BindingX.bind({ + anchor: this.box, + eventType: 'pan', + props: [{ + element: this.selector, + property: 'transform.translateX', + expression + }, { + element: this.leftButton, + property: 'transform.translateX', + expression: leftExpression + }, { + element: this.rightButton, + property: 'transform.translateX', + expression: rightExpression + }, ] + }, (e) => { + // nope + if (e.state === 'end') { + this.x = e.deltaX + this.x; + this.isclick = true + this.bindTiming(e.deltaX) + } + }); + }, + touchend(e) { + if (this.isopen !== 'none' && !this.isclick) { + this.open('none') + } + }, + bindTiming(x) { + const left = this.x + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + const threshold = this.threshold + if (!this.isopen || this.isopen === 'none') { + if (left > threshold) { + this.open('left') + } else if (left < -threshold) { + this.open('right') + } else { + this.open('none') + } + } else { + if ((x > -leftWidth && x < 0) || x > rightWidth) { + if ((x > -threshold && x < 0) || (x - rightWidth > threshold)) { + this.open('left') + } else { + this.open('none') + } + } else { + if ((x < threshold && x > 0) || (x + leftWidth < -threshold)) { + this.open('right') + } else { + this.open('none') + } + } + } + }, + + /** + * 移动范围 + * @param {Object} num + * @param {Object} mix + * @param {Object} max + */ + range(num, mix, max) { + return `min(max(x+${num}, ${mix}), ${max})` + }, + + /** + * 开启swipe + */ + open(type) { + this.animation(type) + }, + + /** + * 关闭swipe + */ + close() { + this.animation('none') + }, + + /** + * 开启关闭动画 + * @param {Object} type + */ + animation(type) { + const time = 300 + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + if (this.eventpan && this.eventpan.token) { + BindingX.unbind({ + token: this.eventpan.token, + eventType: 'pan' + }) + } + + switch (type) { + case 'left': + Promise.all([ + this.move(this.selector, leftWidth), + this.move(this.leftButton, 0), + this.move(this.rightButton, rightWidth * 2) + ]).then(() => { + this.setEmit(leftWidth, type) + }) + break + case 'right': + Promise.all([ + this.move(this.selector, -rightWidth), + this.move(this.leftButton, -leftWidth * 2), + this.move(this.rightButton, 0) + ]).then(() => { + this.setEmit(-rightWidth, type) + }) + break + default: + Promise.all([ + this.move(this.selector, 0), + this.move(this.leftButton, -leftWidth), + this.move(this.rightButton, rightWidth) + ]).then(() => { + this.setEmit(0, type) + }) + + } + }, + setEmit(x, type) { + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + this.isopen = this.isopen || 'none' + this.stop = false + this.isclick = false + // 只有状态不一致才会返回结果 + if (this.isopen !== type && this.x !== x) { + if (type === 'left' && leftWidth > 0) { + this.$emit('change', 'left') + } + if (type === 'right' && rightWidth > 0) { + this.$emit('change', 'right') + } + if (type === 'none') { + this.$emit('change', 'none') + } + } + this.x = x + this.isopen = type + }, + move(ref, value) { + return new Promise((resolve, reject) => { + animation.transition(ref, { + styles: { + transform: `translateX(${value})`, + }, + duration: 150, //ms + timingFunction: 'linear', + needLayout: false, + delay: 0 //ms + }, function(res) { + resolve(res) + }) + }) + + }, + + /** + * 获取ref + * @param {Object} el + */ + getEl(el) { + return el.ref + }, + /** + * 获取节点信息 + */ + getSelectorQuery() { + Promise.all([ + this.getDom('left'), + this.getDom('right'), + ]).then((data) => { + let show = 'none' + if (this.autoClose) { + show = 'none' + } else { + show = this.show + } + + if (show === 'none') { + // this.close() + } else { + this.open(show) + } + + }) + + }, + getDom(str) { + return new Promise((resolve, reject) => { + dom.getComponentRect(this.$refs[`selector-${str}-button--hock`], (data) => { + if (data) { + this.button[str] = data.size + resolve(data) + } else { + reject() + } + }) + }) + } + } +} + +// #endif + +export default bindIngXMixins diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/index.wxs b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/index.wxs new file mode 100644 index 00000000..886bc752 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/index.wxs @@ -0,0 +1,323 @@ +var MIN_DISTANCE = 10; + +/** + * 判断当前是否为H5、app-vue + */ +var IS_HTML5 = false +if (typeof window === 'object') IS_HTML5 = true + +/** + * 监听页面内值的变化,主要用于动态开关swipe-action + * @param {Object} newValue + * @param {Object} oldValue + * @param {Object} ownerInstance + * @param {Object} instance + */ +function sizeReady(newValue, oldValue, ownerInstance, instance) { + var state = instance.getState() + var buttonPositions = JSON.parse(newValue) + if (!buttonPositions || !buttonPositions.data || buttonPositions.data.length === 0) return + state.leftWidth = buttonPositions.data[0].width + state.rightWidth = buttonPositions.data[1].width + state.threshold = instance.getDataset().threshold + + if (buttonPositions.show && buttonPositions.show !== 'none') { + openState(buttonPositions.show, instance, ownerInstance) + return + } + + if (state.left) { + openState('none', instance, ownerInstance) + } + resetTouchStatus(instance) +} + +/** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ +function touchstart(e, ins) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState(); + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 开始触摸时移除动画类 + instance.requestAnimationFrame(function() { + instance.removeClass('ani'); + ins.callMethod('closeSwipe'); + }) + + // 记录上次的位置 + state.x = state.left || 0 + // 计算滑动开始位置 + stopTouchStart(e, ins) +} + +/** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchmove(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 是否可以滑动页面 + stopTouchMove(e); + if (state.direction !== 'horizontal') { + return; + } + + if (e.preventDefault) { + // 阻止页面滚动 + e.preventDefault() + } + + move(state.x + state.deltaX, instance, ownerInstance) +} + +/** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchend(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + moveDirection(state.left, instance, ownerInstance) + +} + +/** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ +function move(value, instance, ownerInstance) { + value = value || 0 + var state = instance.getState() + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + // 获取可滑动范围 + state.left = range(value, -rightWidth, leftWidth); + instance.requestAnimationFrame(function() { + instance.setStyle({ + transform: 'translateX(' + state.left + 'px)', + '-webkit-transform': 'translateX(' + state.left + 'px)' + }) + }) + +} + +/** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ +function range(num, min, max) { + return Math.min(Math.max(num, min), max); +} + + +/** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ +function moveDirection(left, ins, ownerInstance) { + var state = ins.getState() + var threshold = state.threshold + var position = state.position + var isopen = state.isopen || 'none' + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + if (state.deltaX === 0) { + openState('none', ins, ownerInstance) + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && + rightWidth + + left < threshold)) { + // right + openState('right', ins, ownerInstance) + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + openState('left', ins, ownerInstance) + } else { + // default + openState('none', ins, ownerInstance) + } +} + + +/** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ +function openState(type, ins, ownerInstance) { + var state = ins.getState() + var position = state.position + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + var left = '' + state.isopen = state.isopen ? state.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + // && !state.throttle + + if (state.isopen !== type) { + state.throttle = true + ownerInstance.callMethod('change', { + open: type + }) + + } + + state.isopen = type + // 添加动画类 + ins.requestAnimationFrame(function() { + ins.addClass('ani'); + move(left, ins, ownerInstance) + }) + // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的 +} + + +function getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; +} + +/** + * 重置滑动状态 + * @param {Object} event + */ +function resetTouchStatus(instance) { + var state = instance.getState(); + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; +} + +/** + * 设置滑动开始位置 + * @param {Object} event + */ +function stopTouchStart(event) { + var instance = event.instance; + var state = instance.getState(); + resetTouchStatus(instance); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.startX = touch.clientX; + state.startY = touch.clientY; +} + +/** + * 滑动中,是否禁止打开 + * @param {Object} event + */ +function stopTouchMove(event) { + var instance = event.instance; + var state = instance.getState(); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.deltaX = touch.clientX - state.startX; + state.deltaY = touch.clientY - state.startY; + state.offsetY = Math.abs(state.deltaY); + state.offsetX = Math.abs(state.deltaX); + state.direction = state.direction || getDirection(state.offsetX, state.offsetY); +} + +function isPC() { + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; + var flag = true; + for (var v = 0; v < Agents.length - 1; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +} + +var movable = false + +function mousedown(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchstart(e, ins) + movable = true +} + +function mousemove(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + if (!movable) return + touchmove(e, ins) +} + +function mouseup(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchend(e, ins) + movable = false +} + +function mouseleave(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + movable = false +} + +module.exports = { + sizeReady: sizeReady, + touchstart: touchstart, + touchmove: touchmove, + touchend: touchend, + mousedown: mousedown, + mousemove: mousemove, + mouseup: mouseup, + mouseleave: mouseleave +} diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js new file mode 100644 index 00000000..7dd4a200 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js @@ -0,0 +1,22 @@ +export function isPC() { + var userAgentInfo = navigator.userAgent || ''; + var info = typeof uni !== 'undefined' && uni.getSystemInfoSync ? uni.getSystemInfoSync() : null; + if (info && info.deviceType) { + if (info.deviceType === 'pc') return true; + if (info.deviceType === 'phone' || info.deviceType === 'pad') return false; + } + var isMobileUA = /Android|iPhone|SymbianOS|Windows Phone|iPad|iPod|Mobile|Harmony|HarmonyOS/i.test(userAgentInfo); + if (isMobileUA) return false; + var hasTouch = false; + if (typeof navigator.maxTouchPoints === 'number') { + hasTouch = navigator.maxTouchPoints > 0; + } else if (typeof window !== 'undefined') { + hasTouch = 'ontouchstart' in window; + } + if (hasTouch && typeof window !== 'undefined' && window.matchMedia) { + var finePointer = window.matchMedia('(pointer: fine)').matches; + var canHover = window.matchMedia('(hover: hover)').matches; + return finePointer || canHover; + } + return !hasTouch; +} diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js new file mode 100644 index 00000000..6e5ad7c5 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js @@ -0,0 +1,195 @@ +export default { + data() { + return { + x: 0, + transition: false, + width: 0, + viewWidth: 0, + swipeShow: 0 + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + if (newVal && newVal !== 'none') { + this.transition = true + this.open(newVal) + } else { + this.close() + } + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction && Array.isArray(this.swipeaction.children)) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.isopen = false + setTimeout(() => { + this.getQuerySelect() + }, 50) + }, + methods: { + appTouchStart(e) { + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + /** + * 移动触发 + * @param {Object} e + */ + onChange(e) { + this.moveX = e.detail.x + this.isclose = false + }, + touchstart(e) { + this.transition = false + this.isclose = true + if (this.autoClose && this.swipeaction) { + this.swipeaction.closeOther(this) + } + }, + touchmove(e) {}, + touchend(e) { + // 0的位置什么都不执行 + if (this.isclose && this.isopen === 'none') return + if (this.isclose && this.isopen !== 'none') { + this.transition = true + this.close() + } else { + this.move(this.moveX + this.leftWidth) + } + }, + + /** + * 移动 + * @param {Object} moveX + */ + move(moveX) { + // 打开关闭的处理逻辑不太一样 + this.transition = true + // 未打开状态 + if (!this.isopen || this.isopen === 'none') { + if (moveX > this.threshold) { + this.open('left') + } else if (moveX < -this.threshold) { + this.open('right') + } else { + this.close() + } + } else { + if (moveX < 0 && moveX < this.rightWidth) { + const rightX = this.rightWidth + moveX + if (rightX < this.threshold) { + this.open('right') + } else { + this.close() + } + } else if (moveX > 0 && moveX < this.leftWidth) { + const leftX = this.leftWidth - moveX + if (leftX < this.threshold) { + this.open('left') + } else { + this.close() + } + } + + } + + }, + + /** + * 打开 + */ + open(type) { + this.x = this.moveX + this.animation(type) + }, + + /** + * 关闭 + */ + close() { + this.x = this.moveX + // TODO 解决 x 值不更新的问题,所以会多触发一次 nextTick ,待优化 + this.$nextTick(() => { + this.x = -this.leftWidth + if (this.isopen !== 'none') { + this.$emit('change', 'none') + } + this.isopen = 'none' + }) + }, + + /** + * 执行结束动画 + * @param {Object} type + */ + animation(type) { + this.$nextTick(() => { + if (type === 'left') { + this.x = 0 + } else { + this.x = -this.rightWidth - this.leftWidth + } + + if (this.isopen !== type) { + this.$emit('change', type) + } + this.isopen = type + }) + + }, + getSlide(x) {}, + getQuerySelect() { + const query = uni.createSelectorQuery().in(this); + query.selectAll('.movable-view--hock').boundingClientRect(data => { + this.leftWidth = data[1].width + this.rightWidth = data[2].width + this.width = data[0].width + this.viewWidth = this.width + this.rightWidth + this.leftWidth + if (this.leftWidth === 0) { + // TODO 疑似bug ,初始化的时候如果x 是0,会导致移动位置错误,所以让元素超出一点 + this.x = -0.1 + } else { + this.x = -this.leftWidth + } + this.moveX = this.x + this.$nextTick(() => { + this.swipeShow = 1 + }) + + if (!this.buttonWidth) { + this.disabledView = true + } + + if (this.autoClose) return + if (this.show !== 'none') { + this.transition = true + this.open(this.shows) + } + }).exec(); + + } + } +} diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js new file mode 100644 index 00000000..7d1702ee --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js @@ -0,0 +1,260 @@ +let otherMixins = {} + +// #ifndef APP-PLUS|| MP-WEIXIN || H5 +const MIN_DISTANCE = 10; +otherMixins = { + data() { + // TODO 随机生生元素ID,解决百度小程序获取同一个元素位置信息的bug + const elClass = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}` + return { + uniShow: false, + left: 0, + buttonShow: 'none', + ani: false, + moveLeft: '', + elClass + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + this.openState(newVal) + }, + left() { + this.moveLeft = `translateX(${this.left}px)` + }, + buttonShow(newVal) { + if (this.autoClose) return + this.openState(newVal) + }, + leftOptions() { + this.init() + }, + rightOptions() { + this.init() + } + }, + mounted() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction && Array.isArray(this.swipeaction.children)) { + this.swipeaction.children.push(this) + } + this.init() + }, + methods: { + init() { + clearTimeout(this.timer) + this.timer = setTimeout(() => { + this.getSelectorQuery() + }, 100) + // 移动距离 + this.left = 0 + this.x = 0 + }, + + closeSwipe(e) { + if (this.autoClose && this.swipeaction) { + this.swipeaction.closeOther(this) + } + }, + appTouchStart(e) { + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + touchstart(e) { + if (this.disabled) return + this.ani = false + this.x = this.left || 0 + this.stopTouchStart(e) + this.autoClose && this.closeSwipe() + }, + touchmove(e) { + if (this.disabled) return + // 是否可以滑动页面 + this.stopTouchMove(e); + if (this.direction !== 'horizontal') { + return; + } + this.move(this.x + this.deltaX) + return false + }, + touchend() { + if (this.disabled) return + this.moveDirection(this.left) + }, + /** + * 设置移动距离 + * @param {Object} value + */ + move(value) { + value = value || 0 + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + // 获取可滑动范围 + this.left = this.range(value, -rightWidth, leftWidth); + }, + + /** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ + range(num, min, max) { + return Math.min(Math.max(num, min), max); + }, + /** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + */ + moveDirection(left) { + const threshold = this.threshold + const isopen = this.isopen || 'none' + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + if (this.deltaX === 0) { + this.openState('none') + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > + 0 && rightWidth + + left < threshold)) { + // right + this.openState('right') + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > + 0 && + leftWidth - left < threshold)) { + // left + this.openState('left') + } else { + // default + this.openState('none') + } + }, + + /** + * 开启状态 + * @param {Boolean} type + */ + openState(type) { + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + let left = '' + this.isopen = this.isopen ? this.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + + if (this.isopen !== type) { + this.throttle = true + this.$emit('change', type) + } + + this.isopen = type + // 添加动画类 + this.ani = true + this.$nextTick(() => { + this.move(left) + }) + // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的 + }, + close() { + this.openState('none') + }, + getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; + }, + + /** + * 重置滑动状态 + * @param {Object} event + */ + resetTouchStatus() { + this.direction = ''; + this.deltaX = 0; + this.deltaY = 0; + this.offsetX = 0; + this.offsetY = 0; + }, + + /** + * 设置滑动开始位置 + * @param {Object} event + */ + stopTouchStart(event) { + this.resetTouchStatus(); + const touch = event.touches[0]; + this.startX = touch.clientX; + this.startY = touch.clientY; + }, + + /** + * 滑动中,是否禁止打开 + * @param {Object} event + */ + stopTouchMove(event) { + const touch = event.touches[0]; + this.deltaX = touch.clientX - this.startX; + this.deltaY = touch.clientY - this.startY; + this.offsetX = Math.abs(this.deltaX); + this.offsetY = Math.abs(this.deltaY); + this.direction = this.direction || this.getDirection(this.offsetX, this.offsetY); + }, + + getSelectorQuery() { + const views = uni.createSelectorQuery().in(this) + views + .selectAll('.' + this.elClass) + .boundingClientRect(data => { + if (data.length === 0) return + let show = 'none' + if (this.autoClose) { + show = 'none' + } else { + show = this.show + } + this.leftWidth = data[0].width || 0 + this.rightWidth = data[1].width || 0 + this.buttonShow = show + }) + .exec() + } + } +} + +// #endif + +export default otherMixins diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js new file mode 100644 index 00000000..bfea96e7 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js @@ -0,0 +1,84 @@ +let mpMixins = {} +let is_pc = null +// #ifdef H5 +import { + isPC +} from "./isPC" +is_pc = isPC() +// #endif +// #ifdef APP-VUE || APP-HARMONY || MP-WEIXIN || H5 + +mpMixins = { + data() { + return { + is_show: 'none' + } + }, + watch: { + show(newVal) { + this.is_show = this.show + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction && Array.isArray(this.swipeaction.children)) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.is_show = this.show + }, + methods: { + // wxs 中调用 + closeSwipe(e) { + if (this.autoClose && this.swipeaction) { + this.swipeaction.closeOther(this) + } + }, + + change(e) { + this.$emit('change', e.open) + if (this.is_show !== e.open) { + this.is_show = e.open + } + }, + + appTouchStart(e) { + if (is_pc) return + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + if (is_pc) return + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + onClickForPC(index, item, position) { + if (!is_pc) return + // #ifdef H5 + this.$emit('click', { + content: item, + index, + position + }) + // #endif + } + } +} + +// #endif +export default mpMixins diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js new file mode 100644 index 00000000..2fb81a40 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js @@ -0,0 +1,277 @@ +const MIN_DISTANCE = 10; +export default { + showWatch(newVal, oldVal, ownerInstance, instance, self) { + var state = self.state || {} + var $el = ownerInstance.$el || ownerInstance.$vm && ownerInstance.$vm.$el + if (!$el) return + this.getDom(instance, ownerInstance, self) + if (newVal && newVal !== 'none') { + this.openState(newVal, instance, ownerInstance, self) + return + } + + if (state.left) { + this.openState('none', instance, ownerInstance, self) + } + this.resetTouchStatus(instance, self) + }, + + /** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ + touchstart(e, ownerInstance, self) { + let instance = e.instance; + let disabled = instance.getDataset().disabled + let state = self.state || {}; + this.getDom(instance, ownerInstance, self) + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + if (disabled) return + // 开始触摸时移除动画类 + instance.requestAnimationFrame(function() { + instance.removeClass('ani'); + ownerInstance.callMethod('closeSwipe'); + }) + + // 记录上次的位置 + state.x = state.left || 0 + // 计算滑动开始位置 + this.stopTouchStart(e, ownerInstance, self) + }, + + /** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ + touchmove(e, ownerInstance, self) { + let instance = e.instance; + // 删除之后已经那不到实例了 + if (!instance) return; + let disabled = instance.getDataset().disabled + let state = self.state || {} + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + if (disabled) return + // 是否可以滑动页面 + this.stopTouchMove(e, self); + if (state.direction !== 'horizontal') { + return; + } + if (e.preventDefault) { + // 阻止页面滚动 + e.preventDefault() + } + let x = state.x + state.deltaX + this.move(x, instance, ownerInstance, self) + }, + + /** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ + touchend(e, ownerInstance, self) { + let instance = e.instance; + let disabled = instance.getDataset().disabled + let state = self.state || {} + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + this.moveDirection(state.left, instance, ownerInstance, self) + + }, + + /** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ + move(value, instance, ownerInstance, self) { + value = value || 0 + let state = self.state || {} + let leftWidth = state.leftWidth + let rightWidth = state.rightWidth + // 获取可滑动范围 + state.left = this.range(value, -rightWidth, leftWidth); + instance.requestAnimationFrame(function() { + instance.setStyle({ + transform: 'translateX(' + state.left + 'px)', + '-webkit-transform': 'translateX(' + state.left + 'px)' + }) + }) + + }, + + /** + * 获取元素信息 + * @param {Object} instance + * @param {Object} ownerInstance + */ + getDom(instance, ownerInstance, self) { + var state = self.state || {} + var $el = ownerInstance.$el || ownerInstance.$vm && ownerInstance.$vm.$el + var leftDom = $el.querySelector('.button-group--left') + var rightDom = $el.querySelector('.button-group--right') + if (leftDom && leftDom.offsetWidth) { + state.leftWidth = leftDom.offsetWidth || 0 + } else { + state.leftWidth = 0 + } + if (rightDom && rightDom.offsetWidth) { + state.rightWidth = rightDom.offsetWidth || 0 + } else { + state.rightWidth = 0 + } + state.threshold = instance.getDataset().threshold + }, + + getDisabledType(value) { + return (typeof(value) === 'string' ? JSON.parse(value) : value) || false; + }, + + /** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ + range(num, min, max) { + return Math.min(Math.max(num, min), max); + }, + + + /** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ + moveDirection(left, ins, ownerInstance, self) { + var state = self.state || {} + var threshold = state.threshold + var position = state.position + var isopen = state.isopen || 'none' + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + if (state.deltaX === 0) { + this.openState('none', ins, ownerInstance, self) + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && + rightWidth + + left < threshold)) { + // right + this.openState('right', ins, ownerInstance, self) + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + this.openState('left', ins, ownerInstance, self) + } else { + // default + this.openState('none', ins, ownerInstance, self) + } + }, + + + /** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ + openState(type, ins, ownerInstance, self) { + let state = self.state || {} + let leftWidth = state.leftWidth + let rightWidth = state.rightWidth + let left = '' + state.isopen = state.isopen ? state.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + // && !state.throttle + + if (state.isopen !== type) { + state.throttle = true + ownerInstance.callMethod('change', { + open: type + }) + + } + + state.isopen = type + // 添加动画类 + ins.requestAnimationFrame(() => { + ins.addClass('ani'); + this.move(left, ins, ownerInstance, self) + }) + }, + + + getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; + }, + + /** + * 重置滑动状态 + * @param {Object} event + */ + resetTouchStatus(instance, self) { + let state = self.state || {}; + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; + }, + + /** + * 设置滑动开始位置 + * @param {Object} event + */ + stopTouchStart(event, ownerInstance, self) { + let instance = event.instance; + let state = self.state || {} + this.resetTouchStatus(instance, self); + var touch = event.touches[0]; + state.startX = touch.clientX; + state.startY = touch.clientY; + }, + + /** + * 滑动中,是否禁止打开 + * @param {Object} event + */ + stopTouchMove(event, self) { + let instance = event.instance; + let state = self.state || {}; + let touch = event.touches[0]; + + state.deltaX = touch.clientX - state.startX; + state.deltaY = touch.clientY - state.startY; + state.offsetY = Math.abs(state.deltaY); + state.offsetX = Math.abs(state.deltaX); + state.direction = state.direction || this.getDirection(state.offsetX, state.offsetY); + } +} diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue new file mode 100644 index 00000000..851918cb --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue @@ -0,0 +1,354 @@ + + + + + + diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs new file mode 100644 index 00000000..39466fd0 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs @@ -0,0 +1,346 @@ +var MIN_DISTANCE = 10; + +/** + * 判断当前是否为H5、app-vue + */ +var IS_HTML5 = false +if (typeof window === 'object') IS_HTML5 = true + +/** + * 监听页面内值的变化,主要用于动态开关swipe-action + * @param {Object} newValue + * @param {Object} oldValue + * @param {Object} ownerInstance + * @param {Object} instance + */ +function showWatch(newVal, oldVal, ownerInstance, instance) { + var state = instance.getState() + getDom(instance, ownerInstance) + if (newVal && newVal !== 'none') { + openState(newVal, instance, ownerInstance) + return + } + + if (state.left) { + openState('none', instance, ownerInstance) + } + resetTouchStatus(instance) +} + +/** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ +function touchstart(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState(); + getDom(instance, ownerInstance) + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 开始触摸时移除动画类 + instance.requestAnimationFrame(function() { + instance.removeClass('ani'); + ownerInstance.callMethod('closeSwipe'); + }) + + // 记录上次的位置 + state.x = state.left || 0 + // 计算滑动开始位置 + stopTouchStart(e, ownerInstance) +} + +/** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchmove(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 是否可以滑动页面 + stopTouchMove(e); + if (state.direction !== 'horizontal') { + return; + } + + if (e.preventDefault) { + // 阻止页面滚动 + e.preventDefault() + } + + move(state.x + state.deltaX, instance, ownerInstance) +} + +/** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchend(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + moveDirection(state.left, instance, ownerInstance) + +} + +/** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ +function move(value, instance, ownerInstance) { + value = value || 0 + var state = instance.getState() + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + // 获取可滑动范围 + state.left = range(value, -rightWidth, leftWidth); + instance.requestAnimationFrame(function() { + instance.setStyle({ + transform: 'translateX(' + state.left + 'px)', + '-webkit-transform': 'translateX(' + state.left + 'px)' + }) + }) + +} + +/** + * 获取元素信息 + * @param {Object} instance + * @param {Object} ownerInstance + */ +function getDom(instance, ownerInstance) { + var state = instance.getState() + var leftDom = ownerInstance.selectComponent('.button-group--left') + var rightDom = ownerInstance.selectComponent('.button-group--right') + var leftStyles = { + width: 0 + } + var rightStyles = { + width: 0 + } + + if (leftDom) { + leftStyles = leftDom.getBoundingClientRect() + } + + if (rightDom) { + rightStyles = rightDom.getBoundingClientRect() + } + state.leftWidth = leftStyles.width || 0 + state.rightWidth = rightStyles.width || 0 + state.threshold = instance.getDataset().threshold +} + +/** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ +function range(num, min, max) { + return Math.min(Math.max(num, min), max); +} + + +/** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ +function moveDirection(left, ins, ownerInstance) { + var state = ins.getState() + var threshold = state.threshold + var position = state.position + var isopen = state.isopen || 'none' + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + if (state.deltaX === 0) { + openState('none', ins, ownerInstance) + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && + rightWidth + + left < threshold)) { + // right + openState('right', ins, ownerInstance) + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + openState('left', ins, ownerInstance) + } else { + // default + openState('none', ins, ownerInstance) + } +} + + +/** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ +function openState(type, ins, ownerInstance) { + var state = ins.getState() + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + var left = '' + state.isopen = state.isopen ? state.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + // && !state.throttle + + if (state.isopen !== type) { + state.throttle = true + ownerInstance.callMethod('change', { + open: type + }) + + } + + state.isopen = type + // 添加动画类 + ins.requestAnimationFrame(function() { + ins.addClass('ani'); + move(left, ins, ownerInstance) + }) + // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的 +} + + +function getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; +} + +/** + * 重置滑动状态 + * @param {Object} event + */ +function resetTouchStatus(instance) { + var state = instance.getState(); + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; +} + +/** + * 设置滑动开始位置 + * @param {Object} event + */ +function stopTouchStart(event) { + var instance = event.instance; + var state = instance.getState(); + resetTouchStatus(instance); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.startX = touch.clientX; + state.startY = touch.clientY; +} + +/** + * 滑动中,是否禁止打开 + * @param {Object} event + */ +function stopTouchMove(event) { + var instance = event.instance; + var state = instance.getState(); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.deltaX = touch.clientX - state.startX; + state.deltaY = touch.clientY - state.startY; + state.offsetY = Math.abs(state.deltaY); + state.offsetX = Math.abs(state.deltaX); + state.direction = state.direction || getDirection(state.offsetX, state.offsetY); +} + +function isPC() { + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod", "Mobile", "Harmony", "HarmonyOS"]; + var flag = true; + for (var v = 0; v < Agents.length; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +} + +var movable = false + +function mousedown(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchstart(e, ins) + movable = true +} + +function mousemove(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + if (!movable) return + touchmove(e, ins) +} + +function mouseup(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchend(e, ins) + movable = false +} + +function mouseleave(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + movable = false +} + +module.exports = { + showWatch: showWatch, + touchstart: touchstart, + touchmove: touchmove, + touchend: touchend, + mousedown: mousedown, + mousemove: mousemove, + mouseup: mouseup, + mouseleave: mouseleave +} diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue b/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue new file mode 100644 index 00000000..9b32b3dd --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/uni_modules/uni-swipe-action/package.json b/uni_modules/uni-swipe-action/package.json new file mode 100644 index 00000000..2165ae1e --- /dev/null +++ b/uni_modules/uni-swipe-action/package.json @@ -0,0 +1,113 @@ +{ + "id": "uni-swipe-action", + "displayName": "uni-swipe-action 滑动操作", + "version": "1.3.17", + "description": "SwipeAction 滑动操作操作组件", + "keywords": [ + "", + "uni-ui", + "uniui", + "滑动删除", + "侧滑删除" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "", + "uni-app": "^4.27", + "uni-app-x": "" + }, + "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", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [ + "uni-scss" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "x", + "aliyun": "x", + "alipay": "x" + }, + "client": { + "uni-app": { + "vue": { + "vue2": { + "extVersion": "1.3.14", + "minVersion": "" + }, + "vue3": { + "extVersion": "1.3.14", + "minVersion": "" + } + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "√", + "android": "√", + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "√", + "toutiao": "√", + "baidu": "√", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "√", + "lark": "-", + "xhs": "-" + }, + "quickapp": { + "huawei": "√", + "union": "√" + } + }, + "uni-app-x": { + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "android": "-", + "ios": "-", + "harmony": "-" + }, + "mp": { + "weixin": "-" + } + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-swipe-action/readme.md b/uni_modules/uni-swipe-action/readme.md new file mode 100644 index 00000000..284066ac --- /dev/null +++ b/uni_modules/uni-swipe-action/readme.md @@ -0,0 +1,10 @@ + + +## SwipeAction 滑动操作 +> **组件名:uni-swipe-action** +> 代码块: `uSwipeAction`、`uSwipeActionItem` + + +通过滑动触发选项的容器 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-swipe-action) \ No newline at end of file diff --git a/uni_modules/uni-swiper-dot/changelog.md b/uni_modules/uni-swiper-dot/changelog.md new file mode 100644 index 00000000..ca5ef1c8 --- /dev/null +++ b/uni_modules/uni-swiper-dot/changelog.md @@ -0,0 +1,12 @@ +## 1.2.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-swiper-dot](https://uniapp.dcloud.io/component/uniui/uni-swiper-dot) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.6(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 clickItem 事件,支持指示点控制轮播 +- 新增 支持 pc 可用 diff --git a/components/uni-swiper-dot/uni-swiper-dot.vue b/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue similarity index 73% rename from components/uni-swiper-dot/uni-swiper-dot.vue rename to uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue index 903cd153..c0725a4a 100644 --- a/components/uni-swiper-dot/uni-swiper-dot.vue +++ b/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue @@ -2,46 +2,52 @@ - + - + - + {{ (current+1)+"/"+info.length +' ' +info[current][field] }} - {{ index+1 }} + {{ index+1 }} - - \ No newline at end of file + diff --git a/uni_modules/uni-swiper-dot/package.json b/uni_modules/uni-swiper-dot/package.json new file mode 100644 index 00000000..b9b126a5 --- /dev/null +++ b/uni_modules/uni-swiper-dot/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-swiper-dot", + "displayName": "uni-swiper-dot 轮播图指示点", + "version": "1.2.0", + "description": "自定义轮播图指示点组件", + "keywords": [ + "uni-ui", + "uniui", + "轮播图指示点", + "dot", + "swiper" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "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-swiper-dot/readme.md b/uni_modules/uni-swiper-dot/readme.md new file mode 100644 index 00000000..7d397e2c --- /dev/null +++ b/uni_modules/uni-swiper-dot/readme.md @@ -0,0 +1,11 @@ + + +## SwiperDot 轮播图指示点 +> **组件名:uni-swiper-dot** +> 代码块: `uSwiperDot` + + +自定义轮播图指示点 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-swiper-dot) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-table/changelog.md b/uni_modules/uni-table/changelog.md new file mode 100644 index 00000000..943707bf --- /dev/null +++ b/uni_modules/uni-table/changelog.md @@ -0,0 +1,33 @@ +## 1.2.8(2024-10-15) +- 修复 运行到抖音小程序上出现的问题 +## 1.2.7(2024-10-15) +- 修复 微信小程序中的getSystemInfo警告 +## 1.2.4(2023-12-19) +- 修复 uni-tr只有一列时minWidth计算错误,列变化实时计算更新 +## 1.2.3(2023-03-28) +- 修复 在vue3模式下可能会出现错误的问题 +## 1.2.2(2022-11-29) +- 优化 主题样式 +## 1.2.1(2022-06-06) +- 修复 微信小程序存在无使用组件的问题 +## 1.2.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-table](https://uniapp.dcloud.io/component/uniui/uni-table) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-07-08) +- 新增 uni-th 支持 date 日期筛选范围 +## 1.0.6(2021-07-05) +- 新增 uni-th 支持 range 筛选范围 +## 1.0.5(2021-06-28) +- 新增 uni-th 筛选功能 +## 1.0.4(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.3(2021-04-16) +- 新增 sortable 属性,是否开启单列排序 +- 优化 表格多选逻辑 +## 1.0.2(2021-03-22) +- uni-tr 添加 disabled 属性,用于 type=selection 时,设置某行是否可由全选按钮控制 +## 1.0.1(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-table/components/uni-table/uni-table.vue b/uni_modules/uni-table/components/uni-table/uni-table.vue new file mode 100644 index 00000000..b37e0672 --- /dev/null +++ b/uni_modules/uni-table/components/uni-table/uni-table.vue @@ -0,0 +1,460 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue b/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue new file mode 100644 index 00000000..d7cb129c --- /dev/null +++ b/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-td/uni-td.vue b/uni_modules/uni-table/components/uni-td/uni-td.vue new file mode 100644 index 00000000..0f01f65f --- /dev/null +++ b/uni_modules/uni-table/components/uni-td/uni-td.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-th/filter-dropdown.vue b/uni_modules/uni-table/components/uni-th/filter-dropdown.vue new file mode 100644 index 00000000..df22a714 --- /dev/null +++ b/uni_modules/uni-table/components/uni-th/filter-dropdown.vue @@ -0,0 +1,511 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-th/uni-th.vue b/uni_modules/uni-table/components/uni-th/uni-th.vue new file mode 100644 index 00000000..d2c27c3d --- /dev/null +++ b/uni_modules/uni-table/components/uni-th/uni-th.vue @@ -0,0 +1,295 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-thead/uni-thead.vue b/uni_modules/uni-table/components/uni-thead/uni-thead.vue new file mode 100644 index 00000000..dea6e2b1 --- /dev/null +++ b/uni_modules/uni-table/components/uni-thead/uni-thead.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-tr/table-checkbox.vue b/uni_modules/uni-table/components/uni-tr/table-checkbox.vue new file mode 100644 index 00000000..f22936bd --- /dev/null +++ b/uni_modules/uni-table/components/uni-tr/table-checkbox.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-tr/uni-tr.vue b/uni_modules/uni-table/components/uni-tr/uni-tr.vue new file mode 100644 index 00000000..56abd4bc --- /dev/null +++ b/uni_modules/uni-table/components/uni-tr/uni-tr.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/uni_modules/uni-table/i18n/en.json b/uni_modules/uni-table/i18n/en.json new file mode 100644 index 00000000..e32023cc --- /dev/null +++ b/uni_modules/uni-table/i18n/en.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "Reset", + "filter-dropdown.search": "Search", + "filter-dropdown.submit": "Submit", + "filter-dropdown.filter": "Filter", + "filter-dropdown.gt": "Greater or equal to", + "filter-dropdown.lt": "Less than or equal to", + "filter-dropdown.date": "Date" +} diff --git a/uni_modules/uni-table/i18n/es.json b/uni_modules/uni-table/i18n/es.json new file mode 100644 index 00000000..9afd04bb --- /dev/null +++ b/uni_modules/uni-table/i18n/es.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "Reiniciar", + "filter-dropdown.search": "Búsqueda", + "filter-dropdown.submit": "Entregar", + "filter-dropdown.filter": "Filtrar", + "filter-dropdown.gt": "Mayor o igual a", + "filter-dropdown.lt": "Menos que o igual a", + "filter-dropdown.date": "Fecha" +} diff --git a/uni_modules/uni-table/i18n/fr.json b/uni_modules/uni-table/i18n/fr.json new file mode 100644 index 00000000..b0062371 --- /dev/null +++ b/uni_modules/uni-table/i18n/fr.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "Réinitialiser", + "filter-dropdown.search": "Chercher", + "filter-dropdown.submit": "Soumettre", + "filter-dropdown.filter": "Filtre", + "filter-dropdown.gt": "Supérieur ou égal à", + "filter-dropdown.lt": "Inférieur ou égal à", + "filter-dropdown.date": "Date" +} diff --git a/uni_modules/uni-table/i18n/index.js b/uni_modules/uni-table/i18n/index.js new file mode 100644 index 00000000..2469dd02 --- /dev/null +++ b/uni_modules/uni-table/i18n/index.js @@ -0,0 +1,12 @@ +import en from './en.json' +import es from './es.json' +import fr from './fr.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + es, + fr, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-table/i18n/zh-Hans.json b/uni_modules/uni-table/i18n/zh-Hans.json new file mode 100644 index 00000000..862af179 --- /dev/null +++ b/uni_modules/uni-table/i18n/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "重置", + "filter-dropdown.search": "搜索", + "filter-dropdown.submit": "确定", + "filter-dropdown.filter": "筛选", + "filter-dropdown.gt": "大于等于", + "filter-dropdown.lt": "小于等于", + "filter-dropdown.date": "日期范围" +} diff --git a/uni_modules/uni-table/i18n/zh-Hant.json b/uni_modules/uni-table/i18n/zh-Hant.json new file mode 100644 index 00000000..64f80615 --- /dev/null +++ b/uni_modules/uni-table/i18n/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "重置", + "filter-dropdown.search": "搜索", + "filter-dropdown.submit": "確定", + "filter-dropdown.filter": "篩選", + "filter-dropdown.gt": "大於等於", + "filter-dropdown.lt": "小於等於", + "filter-dropdown.date": "日期範圍" +} diff --git a/uni_modules/uni-table/package.json b/uni_modules/uni-table/package.json new file mode 100644 index 00000000..19454c71 --- /dev/null +++ b/uni_modules/uni-table/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-table", + "displayName": "uni-table 表格", + "version": "1.2.8", + "description": "表格组件,多用于展示多条结构类似的数据,如", + "keywords": [ + "uni-ui", + "uniui", + "table", + "表格" +], + "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-datetime-picker"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "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", + "字节跳动": "n", + "QQ": "y" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-table/readme.md b/uni_modules/uni-table/readme.md new file mode 100644 index 00000000..bb08c791 --- /dev/null +++ b/uni_modules/uni-table/readme.md @@ -0,0 +1,13 @@ + + +## Table 表单 +> 组件名:``uni-table``,代码块: `uTable`。 + +用于展示多条结构类似的数据 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-table) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + diff --git a/uni_modules/uni-tag/changelog.md b/uni_modules/uni-tag/changelog.md new file mode 100644 index 00000000..8d2baa2e --- /dev/null +++ b/uni_modules/uni-tag/changelog.md @@ -0,0 +1,23 @@ +## 2.1.1(2024-03-20) +- 优化 app下边框过窄导致不显示的bug +## 2.1.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-tag](https://uniapp.dcloud.io/component/uniui/uni-tag) +## 2.0.0(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +- 移除 插槽 +- 移除 type 属性的 royal 选项 +## 1.1.1(2021-08-11) +- type 不是 default 时,size 为 small 字体大小显示不正确 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-06-18) +- 修复 uni-tag 在字节跳动小程序上 css 类名编译错误的 bug +## 1.0.6(2021-06-04) +- 修复 未定义 sass 变量 "$uni-color-royal" 的bug +## 1.0.5(2021-05-10) +- 修复 royal 类型无效的bug +- 修复 uni-tag 宽度不自适应的bug +- 新增 uni-tag 支持属性 custom-style 自定义样式 +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-tag/components/uni-tag/uni-tag.vue b/uni_modules/uni-tag/components/uni-tag/uni-tag.vue new file mode 100644 index 00000000..26924885 --- /dev/null +++ b/uni_modules/uni-tag/components/uni-tag/uni-tag.vue @@ -0,0 +1,252 @@ + + + + + diff --git a/uni_modules/uni-tag/package.json b/uni_modules/uni-tag/package.json new file mode 100644 index 00000000..50881f8d --- /dev/null +++ b/uni_modules/uni-tag/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-tag", + "displayName": "uni-tag 标签", + "version": "2.1.1", + "description": "Tag 组件,用于展示1个或多个文字标签,可点击切换选中、不选中的状态。", + "keywords": [ + "uni-ui", + "uniui", + "", + "tag", + "标签" +], + "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" + }, + "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-tag/readme.md b/uni_modules/uni-tag/readme.md new file mode 100644 index 00000000..e8f7d829 --- /dev/null +++ b/uni_modules/uni-tag/readme.md @@ -0,0 +1,13 @@ + + +## Tag 标签 +> **组件名:uni-tag** +> 代码块: `uTag` + + +用于展示1个或多个文字标签,可点击切换选中、不选中的状态 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-tag) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-title/changelog.md b/uni_modules/uni-title/changelog.md new file mode 100644 index 00000000..76262165 --- /dev/null +++ b/uni_modules/uni-title/changelog.md @@ -0,0 +1,10 @@ +## 1.1.1(2022-05-19) +- 修改组件描述 +## 1.1.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-title](https://uniapp.dcloud.io/component/uniui/uni-title) +## 1.0.2(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.1(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/components/uni-title/uni-title.vue b/uni_modules/uni-title/components/uni-title/uni-title.vue similarity index 88% rename from components/uni-title/uni-title.vue rename to uni_modules/uni-title/components/uni-title/uni-title.vue index f1f356cd..0d5b8480 100644 --- a/components/uni-title/uni-title.vue +++ b/uni_modules/uni-title/components/uni-title/uni-title.vue @@ -4,26 +4,27 @@ - - \ No newline at end of file + diff --git a/uni_modules/uni-title/package.json b/uni_modules/uni-title/package.json new file mode 100644 index 00000000..2249f5a1 --- /dev/null +++ b/uni_modules/uni-title/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-title", + "displayName": "uni-title 章节标题", + "version": "1.1.1", + "description": "章节标题,通常用于记录页面标题,使用当前组件,uni-app 如果开启统计,将会自动统计页面标题", + "keywords": [ + "uni-ui", + "uniui", + "标题", + "章节", + "章节标题", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "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-title/readme.md b/uni_modules/uni-title/readme.md new file mode 100644 index 00000000..0e60b1b9 --- /dev/null +++ b/uni_modules/uni-title/readme.md @@ -0,0 +1,14 @@ + + +## Title 标题 +> **组件名:uni-title** +> 代码块: `uTitle` + + +章节标题,通常用于记录页面标题,使用当前组件,uni-app 如果开启统计,将会自动统计页面标题 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-title) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + diff --git a/uni_modules/uni-tooltip/changelog.md b/uni_modules/uni-tooltip/changelog.md new file mode 100644 index 00000000..4c9487ad --- /dev/null +++ b/uni_modules/uni-tooltip/changelog.md @@ -0,0 +1,16 @@ +## 0.2.4(2024-04-23) +- 修复 弹出位置默认值不一致导致的错位 +## 0.2.3(2024-03-20) +- 修复 弹出位置修正 +## 0.2.2(2024-01-15) +- 新增 placement支持设置四个方向:top bottom left right +## 0.2.1(2022-05-09) +- 修复 content 为空时仍然弹出的bug +## 0.2.0(2022-05-07) +**注意:破坏性更新** +- 更新 text 属性变更为 content +- 更新 移除 width 属性 +## 0.1.1(2022-04-27) +- 修复 组件根 text 嵌套组件 warning +## 0.1.0(2022-04-21) +- 初始化 diff --git a/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue b/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue new file mode 100644 index 00000000..7dfdbf13 --- /dev/null +++ b/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue @@ -0,0 +1,108 @@ + + + + + + diff --git a/uni_modules/uni-tooltip/package.json b/uni_modules/uni-tooltip/package.json new file mode 100644 index 00000000..44158e1d --- /dev/null +++ b/uni_modules/uni-tooltip/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-tooltip", + "displayName": "uni-tooltip 提示文字", + "version": "0.2.4", + "description": "Tooltip 提示文字", + "keywords": [ + "uni-tooltip", + "uni-ui", + "tooltip", + "tip", + "文字提示" +], + "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": "", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "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", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-tooltip/readme.md b/uni_modules/uni-tooltip/readme.md new file mode 100644 index 00000000..faafa2ec --- /dev/null +++ b/uni_modules/uni-tooltip/readme.md @@ -0,0 +1,8 @@ +## Badge 数字角标 +> **组件名:uni-tooltip** +> 代码块: `uTooltip` + +数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景, + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-tooltip) +#### 如使用过程中有任何问题,或者您对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 00000000..faaf3363 --- /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 00000000..8f89b185 --- /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 00000000..f3ddd1f3 --- /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 00000000..d5c20e1f --- /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 00000000..2f8a77e1 --- /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 diff --git a/uni_modules/uni-upgrade-center-app/changelog.md b/uni_modules/uni-upgrade-center-app/changelog.md new file mode 100644 index 00000000..af0fc531 --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/changelog.md @@ -0,0 +1,94 @@ +## 0.7.9(2024-03-15) +- 移除无用代码 +- 调整 is_silently 类型为可为 null +## 0.7.8(2024-01-04) +- 新增 移除无用代码 +## 0.7.7(2024-01-04) +- 新增 uni-app x 项目中新增 @show 回调 +## 0.7.6(2023-12-21) +- 修复 iOS使用升级中心云打包时报错(使用新版的 [uts-progressNotification](https://ext.dcloud.net.cn/plugin?name=uts-progressNotification) 插件,如果之前下载过请删除 `uts-progressNotification\utssdk\app-ios` 文件夹) +## 0.7.5(2023-12-12) +- 新增 通知栏进度条使用 uts-progressNotification 插件 +- 新增 依赖 uni-installApk、uts-progressNotification。使用前要安装插件三方依赖 +## 0.7.4(2023-11-29) +- 修复 uni-app-x 项目中由上版引发的无法升级的Bug +## 0.7.3(2023-11-27) +- 修复 在 uni-app x 中无更新时报错的Bug +## 0.7.2(2023-11-20) +- 新增 插件根目录 utils 文件夹中新增 check-update-nvue.js 文件(vue2 的 nvue 页面请引用该文件) +## 0.7.1(2023-11-17) +- 修复 运行至浏览器 ts 语法报错 +## 0.7.0(2023-11-10) +- 新增 兼容 uni-app x 项目 [详情](https://uniapp.dcloud.net.cn/uniCloud/upgrade-center.html) +## 0.6.5(2023-10-27) +- 修复 安装 wgt 报错 manifest.json 文件不存在的Bug +## 0.6.4(2023-09-01) +chore: 优化代码结构 +## 0.6.3(2023-08-30) +- 修复 下载 wgt 时如果后缀名不正确,重命名后安装 +## 0.6.2(2022-11-21) +- 处理 cloudfunctions 目录 +## 0.6.1(2022-08-17) +- 修复 后台添加应用市场,但都没有启用的情况下报错的Bug (需要 uni-admin 1.9.3+) +## 0.6.0(2022-07-19) +- 新增 支持多应用商店配置(需要 uni-admin 1.9.3+) +## 0.4.1(2022-05-27) +- 修复 上版引出的报错问题 +## 0.4.0(2022-05-27) +- 新增 Android 支持跳转手机自带商店,填写升级包地址时请填写跳转商店链接 +- 新增 改为云对象调用方式,使用更直观 +## 0.3.3(2022-04-14) +- 修复 调用 check-update,当 code 为 0 时没有回调 +## 0.3.2(2022-01-12) +- 优化显示逻辑 +## 0.3.1(2021-11-24) +- 修复 vue3 上图片不显示的Bug +## 0.3.0(2021-11-18) +- 移除 wgt 安装成功后提示,防止重启过快弹框不消失 +## 0.2.2(2021-08-25) +- 兼容vue3.0 +## 0.2.1(2021-07-26) +- 修复 使用腾讯云并手动填写地址时,导致下载链接失效的bug +## 0.2.0(2021-07-13) +- 更新文档 关于报错local_storage_key 为空,请不要将页面路径设置为pages.json中第一项 +## 0.1.9(2021-06-28) +- 更新文档 +- 修复 wgt安装失败时,按钮状态不对 +## 0.1.8(2021-06-16) +- 修复 跳转安装时,导致上次下载的apk还没安装就被删掉的bug +## 0.1.7(2021-06-03) +- 修改 移除static中的图片 +## 0.1.6(2021-06-03) +- 修改 下载更新按钮使用CSS渐变色 +## 0.1.5(2021-04-22) +- 更新check-update函数。现在返回一个Promise,有更新时成功回调,其他情况错误回调 +## 0.1.4(2021-04-13) +- 更新文档。明确云函数调用结果 +## 0.1.3(2021-04-13) +- 解耦云函数与弹框处理。utils中新增 call-check-version.js,可用于单独检测是否有更新 +## 0.1.2(2021-04-07) +- 更新版本对比函数 compare +## 0.1.1(2021-04-07) +- 修复 腾讯云空间下载链接不能下载问题 +## 0.1.0(2021-04-07) +- 新增使用uni.showModal提示升级示例 +- 修改iOS升级提示方式 +## 0.0.7(2021-04-02) +- 修复在iOS上打开弹框报错 +## 0.0.6(2021-04-01) +- 兼容旧版本安卓 +## 0.0.5(2021-04-01) +- 修复低版本安卓上进度条错位 +## 0.0.4(2021-04-01) +- 更新readme +- 修复check-update语法错误 +## 0.0.3(2021-04-01) +- 新增前台更新弹框,详见readme +- 更新前台检查更新方法 + +## 0.0.2(2021-03-29) +- 更新文档 +- 移除 dependencies + +## 0.0.1(2021-03-25) +- 升级中心前台检查更新 diff --git a/uni_modules/uni-upgrade-center-app/components/uni-upgrade-center-app/uni-upgrade-center-app.uvue b/uni_modules/uni-upgrade-center-app/components/uni-upgrade-center-app/uni-upgrade-center-app.uvue new file mode 100644 index 00000000..e6d9a23f --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/components/uni-upgrade-center-app/uni-upgrade-center-app.uvue @@ -0,0 +1,474 @@ + + + + + diff --git a/uni_modules/uni-upgrade-center-app/images/app_update_close.png b/uni_modules/uni-upgrade-center-app/images/app_update_close.png new file mode 100644 index 00000000..8b2ffe62 Binary files /dev/null and b/uni_modules/uni-upgrade-center-app/images/app_update_close.png differ diff --git a/uni_modules/uni-upgrade-center-app/images/bg_top.png b/uni_modules/uni-upgrade-center-app/images/bg_top.png new file mode 100644 index 00000000..015f698c Binary files /dev/null and b/uni_modules/uni-upgrade-center-app/images/bg_top.png differ diff --git a/uni_modules/uni-upgrade-center-app/package.json b/uni_modules/uni-upgrade-center-app/package.json new file mode 100644 index 00000000..70db6918 --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-upgrade-center-app", + "displayName": "升级中心 uni-upgrade-center - App", + "version": "0.7.9", + "description": "uni升级中心 - 客户端检查更新", + "keywords": [ + "uniCloud", + "update", + "升级", + "wgt" +], + "repository": "https://gitee.com/dcloud/uni-upgrade-center/tree/master/uni_modules/uni-upgrade-center-app", + "engines": { + "HBuilderX": "^3.97" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "", + "type": "unicloud-template-page" + }, + "uni_modules": { + "dependencies": [ + "uni-installApk", + "uts-progressNotification" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "u", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-upgrade-center-app/pages/upgrade-popup.vue b/uni_modules/uni-upgrade-center-app/pages/upgrade-popup.vue new file mode 100644 index 00000000..aa4edfcc --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/pages/upgrade-popup.vue @@ -0,0 +1,611 @@ + + + + + diff --git a/uni_modules/uni-upgrade-center-app/pages_init.json b/uni_modules/uni-upgrade-center-app/pages_init.json new file mode 100644 index 00000000..7021d998 --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/pages_init.json @@ -0,0 +1,18 @@ +{ + "pages": [{ + "path": "uni_modules/uni-upgrade-center-app/pages/upgrade-popup", + "style": { + "disableScroll": true, + "app-plus": { + "backgroundColorTop": "transparent", + "background": "transparent", + "titleNView": false, + "scrollIndicator": false, + "popGesture": "none", + "animationType": "fade-in", + "animationDuration": 200 + + } + } + }] +} diff --git a/uni_modules/uni-upgrade-center-app/readme.md b/uni_modules/uni-upgrade-center-app/readme.md new file mode 100644 index 00000000..53ff781d --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/readme.md @@ -0,0 +1 @@ +文档已移至 [uni-upgrade-center](https://uniapp.dcloud.net.cn/uniCloud/upgrade-center.html) \ No newline at end of file diff --git a/uni_modules/uni-upgrade-center-app/static/app_update_close.png b/uni_modules/uni-upgrade-center-app/static/app_update_close.png new file mode 100644 index 00000000..8b2ffe62 Binary files /dev/null and b/uni_modules/uni-upgrade-center-app/static/app_update_close.png differ diff --git a/uni_modules/uni-upgrade-center-app/static/bg_top.png b/uni_modules/uni-upgrade-center-app/static/bg_top.png new file mode 100644 index 00000000..015f698c Binary files /dev/null and b/uni_modules/uni-upgrade-center-app/static/bg_top.png differ diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/check-version.param.json b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/check-version.param.json new file mode 100644 index 00000000..b45ad7c3 --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/check-version.param.json @@ -0,0 +1,9 @@ +// 本文件中的json内容将在云函数【运行】时作为参数传给云函数。 + +// 配置教程参考:https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=runparam + +{ + "appid": "__YOUR_APPID__", + "appVersion": "2.2.0", + "wgtVersion": "2.2.2" +} diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/index.js b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/index.js new file mode 100644 index 00000000..76f42474 --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/check-version/index.js @@ -0,0 +1,167 @@ +'use strict'; +exports.main = async (event, context) => { + /** + * 检测升级 使用说明 + * 上传包: + * 1. 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传 + * 2. 先从数据库取出所有该平台(从上下文读取平台信息,默认 Andriod)的所有线上发行更新 + * 3. 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新 + * 4. 使用上步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新,必须同时大于这两项,否则返回暂无更新 + * 5. 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion + */ + + let { + appid, + appVersion, + wgtVersion, + } = event; + + const platform_Android = 'Android'; + const platform_iOS = 'iOS'; + const package_app = 'native_app'; + const package_wgt = 'wgt'; + const app_version_db_name = 'opendb-app-versions' + + let platform = platform_Android; + + // 云函数URL化请求 + if (event.headers) { + let body; + try { + if (event.httpMethod.toLocaleLowerCase() === 'get') { + body = event.queryStringParameters; + } else { + body = JSON.parse(event.body); + } + } catch (e) { + return { + code: 500, + msg: '请求错误' + }; + } + + appid = body.appid; + appVersion = body.appVersion; + wgtVersion = body.wgtVersion; + + platform = /iPhone|iPad/.test(event.headers) ? platform_iOS : platform_Android; + } else if (context.OS) { + platform = context.OS === 'android' + ? platform_Android + : context.OS === 'ios' + ? platform_iOS + : platform_Android; + } + + if (appid && appVersion && wgtVersion && platform) { + const collection = uniCloud.database().collection(app_version_db_name); + + const record = await collection.where({ + appid, + platform, + stable_publish: true + }) + .orderBy('create_date', 'desc') + .get(); + + if (record && record.data && record.data.length > 0) { + const appVersionInDb = record.data.find(item => item.type === package_app) || {}; + const wgtVersionInDb = record.data.find(item => item.type === package_wgt) || {}; + const hasAppPackage = !!Object.keys(appVersionInDb).length; + const hasWgtPackage = !!Object.keys(wgtVersionInDb).length; + + // 取两个版本中版本号最大的包,版本一样,使用wgt包 + let stablePublishDb = hasAppPackage + ? hasWgtPackage + ? compare(wgtVersionInDb.version, appVersionInDb.version) >= 0 + ? wgtVersionInDb + : appVersionInDb + : appVersionInDb + : wgtVersionInDb; + + const { + version, + min_uni_version + } = stablePublishDb; + + // 库中的version必须满足同时大于appVersion和wgtVersion才行,因为上次更新可能是wgt更新 + const appUpdate = compare(version, appVersion) === 1; // app包可用更新 + const wgtUpdate = compare(version, wgtVersion) === 1; // wgt包可用更新 + + if (Object.keys(stablePublishDb).length && appUpdate && wgtUpdate) { + // 判断是否可用wgt更新 + if (min_uni_version && compare(min_uni_version, appVersion) < 1) { + return { + code: 101, + message: 'wgt更新', + ...stablePublishDb + }; + } else if (hasAppPackage && compare(appVersionInDb.version, appVersion) === 1) { + return { + code: 102, + message: '整包更新', + ...appVersionInDb + }; + } + } + + return { + code: 0, + message: '当前版本已经是最新的,不需要更新' + }; + } + + return { + code: -101, + message: '暂无更新或检查appid是否填写正确' + }; + } + + return { + code: -102, + message: '请检查传参是否填写正确' + }; +}; + +/** + * 对比版本号,如需要,请自行修改判断规则 + * 支持比对 ("3.0.0.0.0.1.0.1", "3.0.0.0.0.1") ("3.0.0.1", "3.0") ("3.1.1", "3.1.1.1") 之类的 + * @param {Object} v1 + * @param {Object} v2 + * v1 > v2 return 1 + * v1 < v2 return -1 + * v1 == v2 return 0 + */ +function compare(v1 = '0', v2 = '0') { + v1 = String(v1).split('.') + v2 = String(v2).split('.') + const minVersionLens = Math.min(v1.length, v2.length); + + let result = 0; + for (let i = 0; i < minVersionLens; i++) { + const curV1 = Number(v1[i]) + const curV2 = Number(v2[i]) + + if (curV1 > curV2) { + result = 1 + break; + } else if(curV1 < curV2) { + result = -1 + break; + } + } + + if (result === 0 && (v1.length !== v2.length)) { + const v1BiggerThenv2 = v1.length > v2.length; + const maxLensVersion = v1BiggerThenv2 ? v1 : v2; + for (let i = minVersionLens; i < maxLensVersion.length; i++) { + const curVersion = Number(maxLensVersion[i]) + if (curVersion > 0) { + v1BiggerThenv2 ? result = 1 : result = -1 + break; + } + } + } + + return result; +} diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/checkVersion.param.json b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/checkVersion.param.json new file mode 100644 index 00000000..f5e08907 --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/checkVersion.param.json @@ -0,0 +1,14 @@ +// 本文件中的json内容将在云对象【运行】时作为参数传给云对象。 +// 配置教程参考:https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=runparam +{ + // 调用云对象的方法名称 + "method": "checkVersion", + // 传递给调用方法的参数列表 + "params": [ + { + "appid": "__UNI__HelloUNIApp", + "appVersion": "1.0.0", + "wgtVersion": "1.0.0" + } + ] +} diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/index.obj.js b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/index.obj.js new file mode 100644 index 00000000..ddfd02f5 --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/index.obj.js @@ -0,0 +1,148 @@ +// 开发文档: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj +module.exports = { + checkVersion: async function(event) { + /** + * 检测升级 使用说明 + * 上传包: + * 1. 根据传参,先检测传参是否完整,appid appVersion wgtVersion 必传 + * 2. 先从数据库取出所有该平台(从上下文读取平台信息,默认 Andriod)的所有线上发行更新 + * 3. 再从所有线上发行更新中取出版本最大的一版。如果可以,尽量先检测wgt的线上发行版更新 + * 4. 使用上步取出的版本包的版本号 和传参 appVersion、wgtVersion 来检测是否有更新,必须同时大于这两项,否则返回暂无更新 + * 5. 如果库中 wgt包 版本大于传参 appVersion,但是不满足 min_uni_version < appVersion,则不会使用wgt更新,会接着判断库中 app包version 是否大于 appVersion + */ + + const clientInfo = this.getClientInfo() + + let { + appid, + appVersion, + wgtVersion, + } = event; + + const platform_Android = 'Android'; + const platform_iOS = 'iOS'; + const package_app = 'native_app'; + const package_wgt = 'wgt'; + const app_version_db_name = 'opendb-app-versions' + + let platform = platform_Android; + + platform = clientInfo.OS === 'android' ? + platform_Android : + clientInfo.OS === 'ios' ? + platform_iOS : + platform_Android; + + if (appid && appVersion && wgtVersion && platform) { + const collection = uniCloud.database().collection(app_version_db_name); + + const record = await collection.where({ + appid, + platform, + stable_publish: true + }) + .orderBy('create_date', 'desc') + .get(); + + if (record && record.data && record.data.length > 0) { + const appVersionInDb = record.data.find(item => item.type === package_app) || {}; + const wgtVersionInDb = record.data.find(item => item.type === package_wgt) || {}; + const hasAppPackage = !!Object.keys(appVersionInDb).length; + const hasWgtPackage = !!Object.keys(wgtVersionInDb).length; + + // 取两个版本中版本号最大的包,版本一样,使用wgt包 + let stablePublishDb = hasAppPackage ? + hasWgtPackage ? + compare(wgtVersionInDb.version, appVersionInDb.version) >= 0 ? + wgtVersionInDb : + appVersionInDb : + appVersionInDb : + wgtVersionInDb; + + const { + version, + min_uni_version + } = stablePublishDb; + + // 库中的version必须满足同时大于appVersion和wgtVersion才行,因为上次更新可能是wgt更新 + const appUpdate = compare(version, appVersion) === 1; // app包可用更新 + const wgtUpdate = compare(version, wgtVersion) === 1; // wgt包可用更新 + + if (Object.keys(stablePublishDb).length && appUpdate && wgtUpdate) { + // 判断是否可用wgt更新 + if (min_uni_version && compare(min_uni_version, appVersion) < 1) { + return { + code: 101, + message: 'wgt更新', + ...stablePublishDb + }; + } else if (hasAppPackage && compare(appVersionInDb.version, appVersion) === 1) { + return { + code: 102, + message: '整包更新', + ...appVersionInDb + }; + } + } + + return { + code: 0, + message: '当前版本已经是最新的,不需要更新' + }; + } + + return { + code: -101, + message: '暂无更新或检查appid是否填写正确' + }; + } + + return { + code: -102, + message: '请检查传参是否填写正确' + }; + } +} + +/** + * 对比版本号,如需要,请自行修改判断规则 + * 支持比对 ("3.0.0.0.0.1.0.1", "3.0.0.0.0.1") ("3.0.0.1", "3.0") ("3.1.1", "3.1.1.1") 之类的 + * @param {Object} v1 + * @param {Object} v2 + * v1 > v2 return 1 + * v1 < v2 return -1 + * v1 == v2 return 0 + */ +function compare(v1 = '0', v2 = '0') { + v1 = String(v1).split('.') + v2 = String(v2).split('.') + const minVersionLens = Math.min(v1.length, v2.length); + + let result = 0; + for (let i = 0; i < minVersionLens; i++) { + const curV1 = Number(v1[i]) + const curV2 = Number(v2[i]) + + if (curV1 > curV2) { + result = 1 + break; + } else if (curV1 < curV2) { + result = -1 + break; + } + } + + if (result === 0 && (v1.length !== v2.length)) { + const v1BiggerThenv2 = v1.length > v2.length; + const maxLensVersion = v1BiggerThenv2 ? v1 : v2; + for (let i = minVersionLens; i < maxLensVersion.length; i++) { + const curVersion = Number(maxLensVersion[i]) + if (curVersion > 0) { + v1BiggerThenv2 ? result = 1 : result = -1 + break; + } + } + } + + return result; +} diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/package.json b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/package.json new file mode 100644 index 00000000..e36bef9e --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/checkVersion/package.json @@ -0,0 +1,7 @@ +{ + "name": "checkVersion", + "dependencies": {}, + "extensions": { + "uni-cloud-jql": {} + } +} \ No newline at end of file diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/temp.png b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/temp.png new file mode 100644 index 00000000..8b2ffe62 Binary files /dev/null and b/uni_modules/uni-upgrade-center-app/uniCloud/cloudfunctions/temp.png differ diff --git a/uni_modules/uni-upgrade-center-app/uniCloud/database/db_init.json b/uni_modules/uni-upgrade-center-app/uniCloud/database/db_init.json new file mode 100644 index 00000000..69a88e3b --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/uniCloud/database/db_init.json @@ -0,0 +1 @@ +{} diff --git a/uni_modules/uni-upgrade-center-app/utils/call-check-version.js b/uni_modules/uni-upgrade-center-app/utils/call-check-version.js new file mode 100644 index 00000000..1a28bd8f --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/utils/call-check-version.js @@ -0,0 +1,33 @@ +export default function() { + // #ifdef APP-PLUS + return new Promise((resolve, reject) => { + plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) { + const data = { + action: 'checkVersion', + appid: plus.runtime.appid, + appVersion: plus.runtime.version, + wgtVersion: widgetInfo.version + } + console.log("data: ",data); + uniCloud.callFunction({ + name: 'uni-upgrade-center', + data, + success: (e) => { + console.log("e: ", e); + resolve(e) + }, + fail: (error) => { + reject(error) + } + }) + }) + }) + // #endif + // #ifndef APP-PLUS + return new Promise((resolve, reject) => { + reject({ + message: '请在App中使用' + }) + }) + // #endif +} diff --git a/uni_modules/uni-upgrade-center-app/utils/call-check-version.ts b/uni_modules/uni-upgrade-center-app/utils/call-check-version.ts new file mode 100644 index 00000000..26ea9271 --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/utils/call-check-version.ts @@ -0,0 +1,120 @@ +export type StoreListItem = { + enable : boolean + id : string + name : string + scheme : string + priority : number // 优先级 +} + +export type UniUpgradeCenterResult = { + _id : string + appid : string + name : string + title : string + contents : string + url : string // 安装包下载地址 + platform : Array // Array<'Android' | 'iOS'> + version : string // 版本号 1.0.0 + uni_platform : string // "android" | "ios" // 版本号 1.0.0 + stable_publish : boolean // 是否是稳定版 + is_mandatory : boolean // 是否强制更新 + is_silently : boolean | null // 是否静默更新 + create_env : string // "upgrade-center" + create_date : number + message : string + code : number + + type : string // "native_app" | "wgt" + store_list : StoreListItem[] | null + min_uni_version : string | null // 升级 wgt 的最低 uni-app 版本 +} + +export default function () : Promise { + // #ifdef APP + return new Promise((resolve, reject) => { + const systemInfo = uni.getSystemInfoSync() + const appId = systemInfo.appId + const appVersion = systemInfo.appVersion //systemInfo.appVersion + // #ifndef UNI-APP-X + if (typeof appId === 'string' && typeof appVersion === 'string' && appId.length > 0 && appVersion.length > 0) { + plus.runtime.getProperty(appId, function (widgetInfo) { + if (widgetInfo.version) { + let data = { + action: 'checkVersion', + appid: appId, + appVersion: appVersion, + wgtVersion: widgetInfo.version + } + uniCloud.callFunction({ + name: 'uni-upgrade-center', + data, + success: (e) => { + resolve(e.result as UniUpgradeCenterResult) + }, + fail: (error) => { + reject(error) + } + }) + } else { + reject('widgetInfo.version is EMPTY') + } + }) + } else { + reject('plus.runtime.appid is EMPTY') + } + // #endif + // #ifdef UNI-APP-X + if (typeof appId === 'string' && typeof appVersion === 'string' && appId.length > 0 && appVersion.length > 0) { + let data = { + action: 'checkVersion', + appid: appId, + appVersion: appVersion, + is_uniapp_x: true, + wgtVersion: '0.0.0.0.0.1' + } + try { + uniCloud.callFunction({ + name: 'uni-upgrade-center', + data: data + }).then(res => { + const code = res.result['code'] + const codeIsNumber = ['Int', 'Long', 'number'].includes(typeof code) + if (codeIsNumber) { + if ((code as number) == 0) { + reject({ + code: res.result['code'], + message: res.result['message'] + }) + } else if ((code as number) < 0) { + reject({ + code: res.result['code'], + message: res.result['message'] + }) + } else { + const result = JSON.parse(JSON.stringify(res.result)) as UniUpgradeCenterResult + resolve(result) + } + } + }).catch((err : any | null) => { + const error = err as UniCloudError + if (error.errMsg == '未匹配到云函数[uni-upgrade-center]') + error.errMsg = '【uni-upgrade-center-app】未配置uni-upgrade-center,无法升级。参考: https://uniapp.dcloud.net.cn/uniCloud/upgrade-center.html' + reject(error.errMsg) + }) + } catch (e) { + reject(e.message) + } + } else { + reject('invalid appid or appVersion') + } + // #endif + }) + // #endif + // #ifndef APP-PLUS + return new Promise((resolve, reject) => { + reject({ + message: '请在App中使用' + }) + }) + // #endif +} diff --git a/uni_modules/uni-upgrade-center-app/utils/check-update-nvue.js b/uni_modules/uni-upgrade-center-app/utils/check-update-nvue.js new file mode 100644 index 00000000..e6ed43d6 --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/utils/check-update-nvue.js @@ -0,0 +1,184 @@ +function callCheckVersion() { + // #ifdef APP-PLUS + return new Promise((resolve, reject) => { + plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) { + let data = { + action: 'checkVersion', + appid: plus.runtime.appid, + appVersion: plus.runtime.version, + wgtVersion: widgetInfo.version + } + uniCloud.callFunction({ + name: 'uni-upgrade-center', + data, + success: (e) => { + resolve(e) + }, + fail: (error) => { + reject(error) + } + }) + }) + }) + // #endif + // #ifndef APP-PLUS + return new Promise((resolve, reject) => {}) + // #endif +} + +// 推荐再App.vue中使用 +const PACKAGE_INFO_KEY = '__package_info__' + +export default function() { + // #ifdef APP-PLUS + return new Promise((resolve, reject) => { + callCheckVersion().then(async (e) => { + if (!e.result) return; + const { + code, + message, + is_silently, // 是否静默更新 + url, // 安装包下载地址 + platform, // 安装包平台 + type // 安装包类型 + } = e.result; + + // 此处逻辑仅为实例,可自行编写 + if (code > 0) { + // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回 + const { + fileList + } = await uniCloud.getTempFileURL({ + fileList: [url] + }); + if (fileList[0].tempFileURL) + e.result.url = fileList[0].tempFileURL; + + resolve(e) + + // 静默更新,只有wgt有 + if (is_silently) { + uni.downloadFile({ + url: e.result.url, + success: res => { + if (res.statusCode == 200) { + // 下载好直接安装,下次启动生效 + plus.runtime.install(res.tempFilePath, { + force: false + }); + } + } + }); + return; + } + + /** + * 提示升级一 + * 使用 uni.showModal + */ + // return updateUseModal(e.result) + + /** + * 提示升级二 + * 官方适配的升级弹窗,可自行替换资源适配UI风格 + */ + uni.setStorageSync(PACKAGE_INFO_KEY, e.result) + uni.navigateTo({ + url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`, + fail: (err) => { + console.error('更新弹框跳转失败', err) + uni.removeStorageSync(PACKAGE_INFO_KEY) + } + }) + + return + } else if (code < 0) { + // TODO 云函数报错处理 + console.error(message) + return reject(e) + } + return resolve(e) + }).catch(err => { + // TODO 云函数报错处理 + console.error(err.message) + reject(err) + }) + }); + // #endif +} + +/** + * 使用 uni.showModal 升级 + */ +function updateUseModal(packageInfo) { + const { + title, // 标题 + contents, // 升级内容 + is_mandatory, // 是否强制更新 + url, // 安装包下载地址 + platform, // 安装包平台 + type // 安装包类型 + } = packageInfo; + + let isWGT = type === 'wgt' + let isiOS = !isWGT ? platform.includes('iOS') : false; + let confirmText = isiOS ? '立即跳转更新' : '立即下载更新' + + return uni.showModal({ + title, + content: contents, + showCancel: !is_mandatory, + confirmText, + success: res => { + if (res.cancel) return; + + // 安装包下载 + if (isiOS) { + plus.runtime.openURL(url); + return; + } + + uni.showToast({ + title: '后台下载中……', + duration: 1000 + }); + + // wgt 和 安卓下载更新 + downloadTask = uni.downloadFile({ + url, + success: res => { + if (res.statusCode !== 200) { + console.error('下载安装包失败', err); + return; + } + // 下载好直接安装,下次启动生效 + plus.runtime.install(res.tempFilePath, { + force: false + }, () => { + if (is_mandatory) { + //更新完重启app + plus.runtime.restart(); + return; + } + uni.showModal({ + title: '安装成功是否重启?', + success: res => { + if (res.confirm) { + //更新完重启app + plus.runtime.restart(); + } + } + }); + }, err => { + uni.showModal({ + title: '更新失败', + content: err + .message, + showCancel: false + }); + }); + } + }); + } + }); +} diff --git a/uni_modules/uni-upgrade-center-app/utils/check-update.js b/uni_modules/uni-upgrade-center-app/utils/check-update.js new file mode 100644 index 00000000..f45e5fb0 --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/utils/check-update.js @@ -0,0 +1,158 @@ +import callCheckVersion from './call-check-version' + +// 推荐再App.vue中使用 +const PACKAGE_INFO_KEY = '__package_info__' + +export default function() { + // #ifdef APP-PLUS + return new Promise((resolve, reject) => { + callCheckVersion().then(async (e) => { + if (!e.result) return; + const { + code, + message, + is_silently, // 是否静默更新 + url, // 安装包下载地址 + platform, // 安装包平台 + type // 安装包类型 + } = e.result; + + // 此处逻辑仅为实例,可自行编写 + if (code > 0) { + // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回 + const { + fileList + } = await uniCloud.getTempFileURL({ + fileList: [url] + }); + if (fileList[0].tempFileURL) + e.result.url = fileList[0].tempFileURL; + + resolve(e) + + // 静默更新,只有wgt有 + if (is_silently) { + uni.downloadFile({ + url: e.result.url, + success: res => { + if (res.statusCode == 200) { + // 下载好直接安装,下次启动生效 + plus.runtime.install(res.tempFilePath, { + force: false + }); + } + } + }); + return; + } + + /** + * 提示升级一 + * 使用 uni.showModal + */ + // return updateUseModal(e.result) + + /** + * 提示升级二 + * 官方适配的升级弹窗,可自行替换资源适配UI风格 + */ + uni.setStorageSync(PACKAGE_INFO_KEY, e.result) + uni.navigateTo({ + url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`, + fail: (err) => { + console.error('更新弹框跳转失败', err) + uni.removeStorageSync(PACKAGE_INFO_KEY) + } + }) + + return + } else if (code < 0) { + // TODO 云函数报错处理 + console.error(message) + return reject(e) + } + return resolve(e) + }).catch(err => { + // TODO 云函数报错处理 + console.error(err.message) + reject(err) + }) + }); + // #endif +} + +/** + * 使用 uni.showModal 升级 + */ +function updateUseModal(packageInfo) { + const { + title, // 标题 + contents, // 升级内容 + is_mandatory, // 是否强制更新 + url, // 安装包下载地址 + platform, // 安装包平台 + type // 安装包类型 + } = packageInfo; + + let isWGT = type === 'wgt' + let isiOS = !isWGT ? platform.includes('iOS') : false; + let confirmText = isiOS ? '立即跳转更新' : '立即下载更新' + + return uni.showModal({ + title, + content: contents, + showCancel: !is_mandatory, + confirmText, + success: res => { + if (res.cancel) return; + + // 安装包下载 + if (isiOS) { + plus.runtime.openURL(url); + return; + } + + uni.showToast({ + title: '后台下载中……', + duration: 1000 + }); + + // wgt 和 安卓下载更新 + downloadTask = uni.downloadFile({ + url, + success: res => { + if (res.statusCode !== 200) { + console.error('下载安装包失败', err); + return; + } + // 下载好直接安装,下次启动生效 + plus.runtime.install(res.tempFilePath, { + force: false + }, () => { + if (is_mandatory) { + //更新完重启app + plus.runtime.restart(); + return; + } + uni.showModal({ + title: '安装成功是否重启?', + success: res => { + if (res.confirm) { + //更新完重启app + plus.runtime.restart(); + } + } + }); + }, err => { + uni.showModal({ + title: '更新失败', + content: err + .message, + showCancel: false + }); + }); + } + }); + } + }); +} diff --git a/uni_modules/uni-upgrade-center-app/utils/check-update.ts b/uni_modules/uni-upgrade-center-app/utils/check-update.ts new file mode 100644 index 00000000..ae2b4a1b --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/utils/check-update.ts @@ -0,0 +1,191 @@ +import callCheckVersion, { UniUpgradeCenterResult } from "./call-check-version" +// #ifdef UNI-APP-X +import { openSchema } from './utils.uts' +// #endif + +// 推荐再App.vue中使用 +const PACKAGE_INFO_KEY = '__package_info__' + +// uni-app 项目无法从 vue 中导出 ComponentPublicInstance 类型,故使用条件编译 +// #ifdef UNI-APP-X +export default function (component : ComponentPublicInstance | null = null) : Promise { +// #endif +// #ifndef UNI-APP-X +export default function () : Promise { +// #endif + return new Promise((resolve, reject) => { + callCheckVersion().then(async (uniUpgradeCenterResult) => { + // NOTE uni-app x 3.96 解构有问题 + const code = uniUpgradeCenterResult.code + const message = uniUpgradeCenterResult.message + const url = uniUpgradeCenterResult.url // 安装包下载地址 + + // 此处逻辑仅为示例,可自行编写 + if (code > 0) { + // 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回 + const tcbRes = await uniCloud.getTempFileURL({ fileList: [url] }); + if (typeof tcbRes.fileList[0].tempFileURL !== 'undefined') uniUpgradeCenterResult.url = tcbRes.fileList[0].tempFileURL; + + /** + * 提示升级一 + * 使用 uni.showModal + */ + // return updateUseModal(uniUpgradeCenterResult) + + // #ifndef UNI-APP-X + // 静默更新,只有wgt有 + if (uniUpgradeCenterResult.is_silently) { + uni.downloadFile({ + url, + success: res => { + if (res.statusCode == 200) { + // 下载好直接安装,下次启动生效 + plus.runtime.install(res.tempFilePath, { + force: false + }); + } + } + }); + return; + } + // #endif + + /** + * 提示升级二 + * 官方适配的升级弹窗,可自行替换资源适配UI风格 + */ + // #ifndef UNI-APP-X + uni.setStorageSync(PACKAGE_INFO_KEY, uniUpgradeCenterResult) + uni.navigateTo({ + url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`, + fail: (err) => { + console.error('更新弹框跳转失败', err) + uni.removeStorageSync(PACKAGE_INFO_KEY) + } + }) + // #endif + // #ifdef UNI-APP-X + component?.$callMethod('show', true, uniUpgradeCenterResult) + // #endif + + return resolve(uniUpgradeCenterResult) + } else if (code < 0) { + console.error(message) + return reject(uniUpgradeCenterResult) + } + return resolve(uniUpgradeCenterResult) + }).catch((err) => { + reject(err) + }) + }); + } + +/** + * 使用 uni.showModal 升级 + */ +function updateUseModal(packageInfo : UniUpgradeCenterResult) : void { + // #ifdef APP + const { + title, // 标题 + contents, // 升级内容 + is_mandatory, // 是否强制更新 + url, // 安装包下载地址 + type, + platform + } = packageInfo; + + let isWGT = type === 'wgt' + let isiOS = !isWGT ? platform.includes('iOS') : false; + + // #ifndef UNI-APP-X + let confirmText = isiOS ? '立即跳转更新' : '立即下载更新' + // #endif + // #ifdef UNI-APP-X + let confirmText = '立即下载更新' + // #endif + + return uni.showModal({ + title, + content: contents, + showCancel: !is_mandatory, + confirmText, + success: res => { + if (res.cancel) return; + + if (isiOS) { + // iOS 平台跳转 AppStore + // #ifndef UNI-APP-X + plus.runtime.openURL(url); + // #endif + // #ifdef UNI-APP-X + openSchema(url) + // #endif + return; + } + + uni.showToast({ + title: '后台下载中……', + duration: 1000 + }); + + // wgt 和 安卓下载更新 + uni.downloadFile({ + url, + success: res => { + if (res.statusCode !== 200) { + console.error('下载安装包失败'); + return; + } + // 下载好直接安装,下次启动生效 + // uni-app x 项目没有 plus5+ 故使用条件编译 + // #ifndef UNI-APP-X + plus.runtime.install(res.tempFilePath, { + force: false + }, () => { + if (is_mandatory) { + //更新完重启app + plus.runtime.restart(); + return; + } + uni.showModal({ + title: '安装成功是否重启?', + success: res => { + if (res.confirm) { + //更新完重启app + plus.runtime.restart(); + } + } + }); + }, err => { + uni.showModal({ + title: '更新失败', + content: err + .message, + showCancel: false + }); + }); + // #endif + + // #ifdef UNI-APP-X + uni.installApk({ + filePath: res.tempFilePath, + success: () => { + uni.showModal({ + title: '安装成功请手动重启' + }); + }, + fail: err => { + uni.showModal({ + title: '更新失败', + content: err.message, + showCancel: false + }); + } + }); + // #endif + } + }); + } + }); + // #endif +} diff --git a/uni_modules/uni-upgrade-center-app/utils/utils.uts b/uni_modules/uni-upgrade-center-app/utils/utils.uts new file mode 100644 index 00000000..341ca5f0 --- /dev/null +++ b/uni_modules/uni-upgrade-center-app/utils/utils.uts @@ -0,0 +1,17 @@ +import Intent from 'android.content.Intent'; +import Uri from 'android.net.Uri'; + +export function openSchema(url : string) : Promise { + return new Promise((resolve, reject) => { + try { + const context = UTSAndroid.getUniActivity()!; + const uri = Uri.parse(url) + const intent = new Intent(Intent.ACTION_VIEW, uri) + intent.setData(uri); + context.startActivity(intent); + resolve(true) + } catch (e) { + reject(e) + } + }) +} diff --git a/uni_modules/uts-progressNotification/changelog.md b/uni_modules/uts-progressNotification/changelog.md new file mode 100644 index 00000000..8f90d3db --- /dev/null +++ b/uni_modules/uts-progressNotification/changelog.md @@ -0,0 +1,24 @@ +## 1.1.0(2024-03-08) +修复uniapp打包报错问题 +## 1.0.9(2024-02-29) +去除代码过时警告 +## 1.0.8(2023-12-21) +去除app-ios目录 +## 1.0.7(2023-12-11) +去除无用代码 +## 1.0.6(2023-12-11) +修改文档 +## 1.0.5(2023-12-11) +1.修改插件名称 +2.修改插件引入方式为import导入 +## 1.0.4(2023-11-30) +1. createNotificationProgress增加`onClick`回调 +2.修复在小米部分系统上,通知消息会归类于不重要通知的bug +## 1.0.3(2023-11-28) +更新截图 +## 1.0.2(2023-11-28) +修改资源的包名 +## 1.0.1(2023-11-28) +更新文档 +## 1.0.0(2023-11-28) +Android通知栏显示进度插件 diff --git a/uni_modules/uts-progressNotification/package.json b/uni_modules/uts-progressNotification/package.json new file mode 100644 index 00000000..d3a6dcc4 --- /dev/null +++ b/uni_modules/uts-progressNotification/package.json @@ -0,0 +1,83 @@ +{ + "id": "uts-progressNotification", + "displayName": "uts-progressNotification", + "version": "1.1.0", + "description": "uts-progressNotification", + "keywords": [ + "uts-progressNotification" +], + "repository": "", + "engines": { + "HBuilderX": "^3.91" + }, + "dcloudext": { + "type": "uts", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "TargetSDKVersion33以上时需配置\n`android.permission.POST_NOTIFICATIONS`" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-android": { + "minVersion": "19" + }, + "app-ios": "n" + }, + "H5-mobile": { + "Safari": "n", + "Android Browser": "n", + "微信浏览器(Android)": "n", + "QQ浏览器(Android)": "n" + }, + "H5-pc": { + "Chrome": "n", + "IE": "n", + "Edge": "n", + "Firefox": "n", + "Safari": "n" + }, + "小程序": { + "微信": "n", + "阿里": "n", + "百度": "n", + "字节跳动": "n", + "QQ": "n", + "钉钉": "n", + "快手": "n", + "飞书": "n", + "京东": "n" + }, + "快应用": { + "华为": "n", + "联盟": "n" + } + } + } + } +} diff --git a/uni_modules/uts-progressNotification/readme.md b/uni_modules/uts-progressNotification/readme.md new file mode 100644 index 00000000..87d85766 --- /dev/null +++ b/uni_modules/uts-progressNotification/readme.md @@ -0,0 +1,71 @@ +# uts-progressNotification + +## 使用说明 + +Android平台创建显示进度的通知栏消息 + +**注意: 需要自定义基座,否则点击通知栏消息不会拉起应用** + +### 导入 + +需要import导入插件 + +### createNotificationProgress(options : CreateNotificationProgressOptions) : void, + +创建显示进度的通知栏消息 + +参数说明 + +``` +export type CreateNotificationProgressOptions = { + /** + * 通知标题 + * @defaultValue 应用名称 + */ + title ?: string | null + /** + * 通知内容 + */ + content : string, + /** + * 进度 + */ + progress : number, + /** + * 点击通知消息回调 + * @defaultValue null + */ + onClick? : (() => void) | null +} +``` + +### finishNotificationProgress(options: FinishNotificationProgressOptions) : void + +完成时调用的API,比如下载完成后需要显示下载完成并隐藏进度时调用。 + +参数说明 + + +``` +export type FinishNotificationProgressOptions = { + /** + * 通知标题 + * @defaultValue 应用名称 + */ + title ?: string | null + /** + * 通知内容 + */ + content : string, + /** + * 点击通知消息回调 + */ + onClick : () => void +} +``` + + +### cancelNotificationProgress() : void + +取消通知消息显示 + diff --git a/uni_modules/uts-progressNotification/utssdk/app-android/AndroidManifest.xml b/uni_modules/uts-progressNotification/utssdk/app-android/AndroidManifest.xml new file mode 100644 index 00000000..93749e96 --- /dev/null +++ b/uni_modules/uts-progressNotification/utssdk/app-android/AndroidManifest.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/uni_modules/uts-progressNotification/utssdk/app-android/TransparentActivity.uts b/uni_modules/uts-progressNotification/utssdk/app-android/TransparentActivity.uts new file mode 100644 index 00000000..19678999 --- /dev/null +++ b/uni_modules/uts-progressNotification/utssdk/app-android/TransparentActivity.uts @@ -0,0 +1,62 @@ +import Activity from "android.app.Activity"; +import Bundle from 'android.os.Bundle'; +import Build from 'android.os.Build'; +import View from 'android.view.View'; +import Color from 'android.graphics.Color'; +import WindowManager from 'android.view.WindowManager'; +import { globalNotificationProgressFinishCallBack, globalNotificationProgressCallBack } from './callbacks.uts'; +import { ACTION_DOWNLOAD_FINISH, ACTION_DOWNLOAD_PROGRESS } from "./constant.uts" + + +export class TransparentActivity extends Activity { + constructor() { + super() + } + + @Suppress("DEPRECATION") + override onCreate(savedInstanceState : Bundle | null) { + super.onCreate(savedInstanceState) + this.fullScreen(this) + const action = this.getIntent().getAction() + if (action == ACTION_DOWNLOAD_FINISH) { + setTimeout(() => { + globalNotificationProgressFinishCallBack() + globalNotificationProgressFinishCallBack = () => { } + }, 100) + this.overridePendingTransition(0, 0) + } + + if (action == ACTION_DOWNLOAD_PROGRESS) { + setTimeout(() => { + globalNotificationProgressCallBack?.() + globalNotificationProgressCallBack = () => { } + }, 100) + this.overridePendingTransition(0, 0) + } + + setTimeout(() => { + this.finish() + }, 20) + } + + + @Suppress("DEPRECATION") + private fullScreen(activity : Activity) { + if (Build.VERSION.SDK_INT >= 19) { + if (Build.VERSION.SDK_INT >= 21) { + const window = activity.getWindow(); + const decorView = window.getDecorView(); + const option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; + decorView.setSystemUiVisibility(option); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(Color.TRANSPARENT); + } else { + const window = activity.getWindow(); + const attributes = window.getAttributes(); + const flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; + attributes.flags |= flagTranslucentStatus; + window.setAttributes(attributes); + } + } + } +} diff --git a/uni_modules/uts-progressNotification/utssdk/app-android/callbacks.uts b/uni_modules/uts-progressNotification/utssdk/app-android/callbacks.uts new file mode 100644 index 00000000..410adf66 --- /dev/null +++ b/uni_modules/uts-progressNotification/utssdk/app-android/callbacks.uts @@ -0,0 +1,4 @@ + + +export let globalNotificationProgressCallBack : (() => void) | null = () => { } +export let globalNotificationProgressFinishCallBack = () => { } diff --git a/uni_modules/uts-progressNotification/utssdk/app-android/config.json b/uni_modules/uts-progressNotification/utssdk/app-android/config.json new file mode 100644 index 00000000..7deedfa4 --- /dev/null +++ b/uni_modules/uts-progressNotification/utssdk/app-android/config.json @@ -0,0 +1,3 @@ +{ + "minSdkVersion": "19" +} \ No newline at end of file diff --git a/uni_modules/uts-progressNotification/utssdk/app-android/constant.uts b/uni_modules/uts-progressNotification/utssdk/app-android/constant.uts new file mode 100644 index 00000000..8652ac4b --- /dev/null +++ b/uni_modules/uts-progressNotification/utssdk/app-android/constant.uts @@ -0,0 +1,2 @@ +export const ACTION_DOWNLOAD_FINISH = "ACTION_DOWNLOAD_FINISH" +export const ACTION_DOWNLOAD_PROGRESS = "ACTION_DOWNLOAD_PROGRESS" \ No newline at end of file diff --git a/uni_modules/uts-progressNotification/utssdk/app-android/index.uts b/uni_modules/uts-progressNotification/utssdk/app-android/index.uts new file mode 100644 index 00000000..0782f616 --- /dev/null +++ b/uni_modules/uts-progressNotification/utssdk/app-android/index.uts @@ -0,0 +1,159 @@ +import Build from 'android.os.Build'; +import Context from 'android.content.Context'; +import NotificationManager from 'android.app.NotificationManager'; +import NotificationChannel from 'android.app.NotificationChannel'; +import Notification from 'android.app.Notification'; +import Intent from 'android.content.Intent'; +import ComponentName from 'android.content.ComponentName'; +import PendingIntent from 'android.app.PendingIntent'; +import { CreateNotificationProgressOptions, FinishNotificationProgressOptions } from '../interface.uts'; +import { ACTION_DOWNLOAD_FINISH, ACTION_DOWNLOAD_PROGRESS } from "./constant.uts" + +import { globalNotificationProgressFinishCallBack, globalNotificationProgressCallBack } from './callbacks.uts'; + +export { TransparentActivity } from './TransparentActivity.uts'; + + +const DOWNLOAD_PROGRESS_NOTIFICATION_ID : Int = 7890 +const DC_DOWNLOAD_CHANNEL_ID = "下载文件" +const DC_DOWNLOAD_CHANNEL_NAME = "用于显示现在进度的渠道" + + +let notificationBuilder : Notification.Builder | null = null + +let timeId = -1 + +let histroyProgress = 0 + +let isProgress = false + + + +export function createNotificationProgress(options : CreateNotificationProgressOptions) : void { + const { content, progress, onClick } = options + + if (progress == 100) { + clearTimeout(timeId) + const context = UTSAndroid.getAppContext() as Context + realCreateNotificationProgress(options.title ?? getAppName(context), content, progress, onClick) + reset() + return + } + + histroyProgress = progress + if (timeId != -1) { + return + } + + const context = UTSAndroid.getAppContext() as Context + if (!isProgress) { + realCreateNotificationProgress(options.title ?? getAppName(context), content, histroyProgress, onClick) + isProgress = true + } else { + timeId = setTimeout(() => { + realCreateNotificationProgress(options.title ?? getAppName(context), content, histroyProgress, onClick) + timeId = -1 + }, 1000) + } +} + + +export function cancelNotificationProgress() : void { + const context = UTSAndroid.getAppContext() as Context + const notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + notificationManager.cancel(DOWNLOAD_PROGRESS_NOTIFICATION_ID) + reset() +} + + +function realCreateNotificationProgress(title : string, content : string, progress : number, cb : (() => void) | null) : void { + globalNotificationProgressCallBack = cb + const context = UTSAndroid.getAppContext() as Context + const notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + createDownloadChannel(notificationManager) + const builder = createNotificationBuilder(context) + builder.setProgress(100, progress.toInt(), false) + builder.setContentTitle(title) + builder.setContentText(content) + builder.setContentIntent(createPendingIntent(context, ACTION_DOWNLOAD_PROGRESS)); + notificationManager.notify(DOWNLOAD_PROGRESS_NOTIFICATION_ID, builder.build()) +} + + +export function finishNotificationProgress(options : FinishNotificationProgressOptions) { + globalNotificationProgressFinishCallBack = options.onClick + const context = UTSAndroid.getAppContext() as Context + const notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + createDownloadChannel(notificationManager) + const builder = createNotificationBuilder(context) + builder.setProgress(0, 0, false) + builder.setContentTitle(options.title ?? getAppName(context)) + builder.setContentText(options.content) + //小米rom setOngoing未false的时候,会被通知管理器归为不重要通知 + // builder.setOngoing(false) + builder.setAutoCancel(true); + builder.setContentIntent(createPendingIntent(context, ACTION_DOWNLOAD_FINISH)); + notificationManager.notify(DOWNLOAD_PROGRESS_NOTIFICATION_ID, builder.build()) + reset() +} + +function reset() { + isProgress = false + notificationBuilder = null + histroyProgress = 0 + if (timeId != -1) { + clearTimeout(timeId) + timeId = -1 + } +} + + + +function createPendingIntent(context : Context, action : string) : PendingIntent { + const i = new Intent(action); + i.setComponent(new ComponentName(context.getPackageName(), "uts.sdk.modules.utsProgressNotification.TransparentActivity")); + let flags = PendingIntent.FLAG_ONE_SHOT; + if (Build.VERSION.SDK_INT >= 23) { + flags = PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE; + } + return PendingIntent.getActivity(context, DOWNLOAD_PROGRESS_NOTIFICATION_ID, i, flags); +} + + +function createDownloadChannel(notificationManager : NotificationManager) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + const channel = new NotificationChannel( + DC_DOWNLOAD_CHANNEL_ID, + DC_DOWNLOAD_CHANNEL_NAME, + NotificationManager.IMPORTANCE_LOW + ) + notificationManager.createNotificationChannel(channel) + } +} +@Suppress("DEPRECATION") +function createNotificationBuilder(context : Context) : Notification.Builder { + if (notificationBuilder == null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + notificationBuilder = new Notification.Builder(context, DC_DOWNLOAD_CHANNEL_ID) + } else { + notificationBuilder = new Notification.Builder(context) + } + notificationBuilder!.setSmallIcon(context.getApplicationInfo().icon) + notificationBuilder!.setOngoing(true) + notificationBuilder!.setSound(null) + } + return notificationBuilder! +} + +@Suppress("DEPRECATION") +function getAppName(context : Context) : string { + let appName = "" + try { + const packageManager = context.getPackageManager() + const applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), 0) + appName = packageManager.getApplicationLabel(applicationInfo) as string + } catch (e : Exception) { + e.printStackTrace() + } + return appName +} diff --git a/uni_modules/uts-progressNotification/utssdk/app-android/res/values/notification_progress_styles.xml b/uni_modules/uts-progressNotification/utssdk/app-android/res/values/notification_progress_styles.xml new file mode 100644 index 00000000..cc01105b --- /dev/null +++ b/uni_modules/uts-progressNotification/utssdk/app-android/res/values/notification_progress_styles.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uts-progressNotification/utssdk/interface.uts b/uni_modules/uts-progressNotification/utssdk/interface.uts new file mode 100644 index 00000000..95703533 --- /dev/null +++ b/uni_modules/uts-progressNotification/utssdk/interface.uts @@ -0,0 +1,46 @@ +export type CreateNotificationProgressOptions = { + /** + * 通知标题 + * @defaultValue 应用名称 + */ + title ?: string | null + /** + * 通知内容 + */ + content : string, + /** + * 进度 + */ + progress : number, + /** + * 点击通知消息回调 + * @defaultValue null + */ + onClick? : (() => void) | null +} + + +export type FinishNotificationProgressOptions = { + /** + * 通知标题 + * @defaultValue 应用名称 + */ + title ?: string | null + /** + * 通知内容 + */ + content : string, + /** + * 点击通知消息回调 + */ + onClick : () => void +} + + +export type CreateNotificationProgress = (options : CreateNotificationProgressOptions) => void; + + +export type CancelNotificationProgress = () => void; + + +export type FinishNotificationProgress = (options: FinishNotificationProgressOptions) => void diff --git a/uni_modules/uts-progressNotification/utssdk/unierror.uts b/uni_modules/uts-progressNotification/utssdk/unierror.uts new file mode 100644 index 00000000..e69de29b diff --git a/windows/left-window.vue b/windows/left-window.vue new file mode 100644 index 00000000..f8507de0 --- /dev/null +++ b/windows/left-window.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/windows/top-window.vue b/windows/top-window.vue new file mode 100644 index 00000000..5dc44594 --- /dev/null +++ b/windows/top-window.vue @@ -0,0 +1,163 @@ + + + + +