@@ -61,6 +67,7 @@ import MainNavbarLink from './MainNavbarLink.vue';
import NavbarLogo from './NavbarLogo.vue';
import DcloudSearchPage from './DcloudSearchPage';
import navInject from '../mixin/navInject';
+import DropdownLink from '@theme/components/DropdownLink.vue'
import { forbidScroll, os } from '../util';
export default {
@@ -75,14 +82,16 @@ export default {
SearchBox,
AlgoliaSearchBox,
NavbarLogo,
- DcloudSearchPage
+ DcloudSearchPage,
+ DropdownLink
},
data () {
return {
linksWrapMaxWidth: null,
showMobilePanel: false,
- fixedNavbar: false
+ fixedNavbar: false,
+ SearchBoxTop: 0
}
},
@@ -93,6 +102,18 @@ export default {
isAlgoliaSearch () {
return this.algolia && this.algolia.apiKey && this.algolia.indexName
+ },
+
+ SearchBoxStyle () {
+ const initStyle = {
+ top: `${this.SearchBoxTop}px`,
+ zIndex: 100
+ };
+ return this.linksWrapMaxWidth
+ ? Object.assign({}, initStyle, {
+ 'max-width': this.linksWrapMaxWidth + 'px',
+ })
+ : initStyle;
}
},
@@ -134,6 +155,7 @@ export default {
this.addWindowScroll()
} else {
this.fixedNavbar = true
+ this.SearchBoxTop = 0
}
},
addWindowScroll () {
@@ -148,7 +170,7 @@ export default {
this.vuepressToc && this.vuepressToc.removeAttribute('style')
this.navbar && this.navbar.removeAttribute('style')
if (this.pageContainer) {
- this.pageContainer.style.marginTop = this.showSubNavBar ? 'auto' : `${this.navbarHeight}px`
+ this.pageContainer.style.marginTop = this.showSubNavBar || !os.pc ? 'auto' : `${this.navbarHeight}px`
}
},
onWindowScroll () {
@@ -165,6 +187,7 @@ export default {
if (!this.fixedNavbar) {
this.fixedNavbar = true
this.navbar.style.top = `-${this.mainNavBarHeight}px`
+ this.SearchBoxTop = this.mainNavBarHeight + (this.subNavBarHeight - this.mainNavBarHeight) / 2
this.$nextTick(() => {
this.pageContainer && (this.pageContainer.style.marginTop = `${this.navbarHeight}px`)
})
@@ -173,6 +196,7 @@ export default {
if (this.fixedNavbar) {
this.fixedNavbar = false
this.pageContainer && (this.pageContainer.style.marginTop = 'auto')
+ this.SearchBoxTop = 0
}
}
},
@@ -264,6 +288,7 @@ $navbar-horizontal-padding = 1.5rem
display none !important
.links
padding-left 0rem // 1.5rem
+ top 0 !important
.site-name
width calc(100vw - 9.4rem)
overflow hidden
diff --git a/docs/.vuepress/theme/components/SidebarLinks.vue b/docs/.vuepress/theme/components/SidebarLinks.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9d8ac023f7598d45059c2f62d3e6fcd480c6be17
--- /dev/null
+++ b/docs/.vuepress/theme/components/SidebarLinks.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
diff --git a/docs/.vuepress/theme/config/navbar.js b/docs/.vuepress/theme/config/navbar.js
index 599bb2795445ddaecca7966e066008a001a9d267..9082f27ebf4c1e2e02325894cb3da1a85f5b81a7 100644
--- a/docs/.vuepress/theme/config/navbar.js
+++ b/docs/.vuepress/theme/config/navbar.js
@@ -10,6 +10,7 @@
export const navbar = [
{
text: 'uni-app',
+ link: '/',
items: [
{
text: '介绍',
diff --git a/docs/.vuepress/theme/styles/navbar.styl b/docs/.vuepress/theme/styles/navbar.styl
index cb9bc535786b560f3c3d6012382a1ecafb9c809a..83bd8ba6c0035e0e1092e9a40cea1e6d88b38b30 100644
--- a/docs/.vuepress/theme/styles/navbar.styl
+++ b/docs/.vuepress/theme/styles/navbar.styl
@@ -20,6 +20,7 @@ $navbar-logo-height = $navbar-main-navbar-height - 2rem
&
display none
.sub-navbar
+ position relative
line-height $navbar-sub-navbar-height
border-top-width 1px
.mobile-main-navbar
@@ -76,6 +77,20 @@ $navbar-logo-height = $navbar-main-navbar-height - 2rem
color inherit
&:hover
color $accentColor
+
+ .custom-main-navbar
+ position absolute
+ height 30px
+ top calc(50% - 15px)
+ left 2rem
+ @media (max-width: 1200px)
+ display none
+ a
+ color inherit
+ .nav-dropdown
+ right auto
+ left 0
+ z-index 12
@media (max-width: $MQMobile)
$navbar-a-color = #222;
diff --git a/docs/case.md b/docs/case.md
index af5a7d310991b6f87f53f64ceb3c9b63c84ce700..51476786d05000b985944a79f702e93c895ef0c6 100644
--- a/docs/case.md
+++ b/docs/case.md
@@ -2,10 +2,6 @@ DCloud有**900万**开发者,[uni统计](https://tongji.dcloud.net.cn/)手机
欢迎知名开发商[提交案例](https://github.com/dcloudio/uni-app/issues/6)或接入[uni统计](https://tongji.dcloud.net.cn/)。
-### 新冠抗疫专区案例
-
-uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,详见专题:[xinguan2020.dcloud.net.cn](https://dcloud.io/ncp.html)
-
### 官方示例
Hello uni-app:演示uni-app框架的组件、接口、模板。本项目源码可在HBuilderX中新建项目获得,也可从[github](https://github.com/dcloudio/hello-uniapp)上获取。
@@ -41,6 +37,60 @@ uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目,
### 第三方开发者案例
+#### 新冠抗疫专区案例
+
+uni-app助力数百家单位快速上线**抗疫系统**,开源众多项目。
+
+- 首都疫苗服务 [App](https://a.app.qq.com/o/simple.jsp?pkgname=io.dcloud.H5AC4580F)
+- 广东 粤核酸 微信小程序
+- 广东 粤健通 微信小程序
+- 广州市 穗康生活 微信小程序
+- 海南 海易办 微信小程序
+- 陕西一码通 微信小程序
+- 健康陕西公众服务 微信小程序
+- 健康西安公众服务 微信小程序
+- 河南疾控 微信小程序
+- 平顶山 鹰城官微 微信小程序
+- 开封市 汴易检 微信小程序
+- 三门峡市 灵宝一码通 微信小程序
+- 湖北健康码 微信小程序
+- 山西 晋快检 微信小程序
+- 云南省居民电子健康卡 微信小程序
+- 西双版纳 平安版纳 微信小程序
+- 黑龙江 健康龙江服务平台 微信小程序
+- 黑龙江 密山疫情防控 微信小程序
+- 贵州健康码 微信小程序
+- 贵州 黔康码 微信小程序
+- 河北新冠疫苗预约 懂苗服务 微信小程序
+- 蒙速办 微信小程序
+- 蒙健康 微信小程序
+- 包头市 鹿城健康服务 微信小程序
+- 江西 赣通码 微信小程序
+- 南昌 昌通码 微信小程序
+- 藏易通健康码 微信小程序
+- 江苏核酸检测信息系统 cydj.weiynet.cn
+- 扬州 扬城扫码通 微信小程序
+- 遵义市 实名登记码 微信小程序
+- 乐清市 乐行通 微信小程序
+- 南昌市 i南昌-官方 微信小程序
+- 鄂尔多斯健康宝 微信小程序
+- 新疆伊犁阿勒泰 满意雪都 微信小程序
+- 南宁市电子健康卡 微信小程序
+- 吕梁健康防疫核酸检测平台 微信小程序
+- 曲靖防疫出行 微信小程序
+- 镇江市通行码 镇合意 微信小程序
+- 灌南县 惠泽行 微信小程序
+- 新疆伊犁哈萨克自治州塔城地区 健康塔城 微信小程序
+- 喀什和易行 微信小程序
+- 巴州和易行 微信小程序
+- 绥化防疫 微信小程序
+- 青城医疗 微信小程序
+- 温州健康码扫码工具 微信小程序
+- 临沂 沂码通 微信小程序
+- 鞍山 易鞍码 微信小程序
+
+2020年新冠疫情爆发初期的抗疫项目专题另见:[xinguan2020.dcloud.net.cn](https://dcloud.io/ncp.html)
+
#### 典型案例
华为荣耀亲选商城: 华为公司旗下荣耀品牌精品电商平台。
diff --git a/docs/component/_sidebar.md b/docs/component/_sidebar.md
index 3ea6491f4b4c211dafaf158edfcc570dcd25712b..afd6b0b80538a7af08c4305d0dc57a2599e40d4f 100644
--- a/docs/component/_sidebar.md
+++ b/docs/component/_sidebar.md
@@ -74,6 +74,7 @@
* [色彩说明](component/uniui/color.md)
* [uni-sass 辅助样式](component/uniui/uni-sass.md)
* [uni-badge 数字角标](component/uniui/uni-badge.md)
+ * [uni-breadcrumb 数字角标](component/uniui/uni-breadcrumb.md)
* [uni-calendar 日历](component/uniui/uni-calendar.md)
* [uni-card 卡片](component/uniui/uni-card.md)
* [uni-collapse 折叠面板](component/uniui/uni-collapse.md)
@@ -81,6 +82,7 @@
* [uni-countdown 倒计时](component/uniui/uni-countdown.md)
* [uni-data-checkbox 数据选择器](component/uniui/uni-data-checkbox.md)
* [uni-data-picker 级联选择器](component/uniui/uni-data-picker.md)
+ * [uni-data-select 级联选择器](component/uniui/uni-data-select.md)
* [uni-dateformat 日期格式化](component/uniui/uni-dateformat.md)
* [uni-datetime-picker 日期选择器](component/uniui/uni-datetime-picker.md)
* [uni-drawer 抽屉](component/uniui/uni-drawer.md)
@@ -112,6 +114,7 @@
* [uni-table 表格](component/uniui/uni-table.md)
* [uni-tag 标签](component/uniui/uni-tag.md)
* [uni-title 章节标题](component/uniui/uni-title.md)
+ * [uni-tooltip 章节标题](component/uniui/uni-tooltip.md)
* [uni-transition 过渡动画](component/uniui/uni-transition.md)
* [更新日志](https://ext.dcloud.net.cn/plugin?id=55&update_log)
* [更多插件市场的组件](https://ext.dcloud.net.cn/?cat1=2)
diff --git a/docs/component/uniui/quickstart.md b/docs/component/uniui/quickstart.md
index 90a93a2599d3dfc0cbd1c5c2d1eaf4b409fba9f6..e8416bf2e5f9e92fac926902a67ff5ed82f4404e 100644
--- a/docs/component/uniui/quickstart.md
+++ b/docs/component/uniui/quickstart.md
@@ -49,7 +49,6 @@ uni-ui支持 HBuilderX直接新建项目模板、npm安装和单独导入个别
|uni-rate|[评分](https://ext.dcloud.net.cn/plugin?name=uni-rate)|
|uni-row|[布局-行](https://ext.dcloud.net.cn/plugin?name=uni-row)|
|uni-search-bar|[搜索栏](https://ext.dcloud.net.cn/plugin?name=uni-search-bar)|
-|Section|[标题栏](https://ext.dcloud.net.cn/plugin?name=uni-section)|
|uni-segmented-control|[分段器](https://ext.dcloud.net.cn/plugin?name=uni-segmented-control)|
|uni-steps|[步骤条](https://ext.dcloud.net.cn/plugin?name=uni-steps)|
|uni-swipe-action|[滑动操作](https://ext.dcloud.net.cn/plugin?name=uni-swipe-action)|
diff --git a/docs/component/uniui/uni-breadcrumb.md b/docs/component/uniui/uni-breadcrumb.md
new file mode 100644
index 0000000000000000000000000000000000000000..1c72533569b601f3705e0c085f094237c5f8cf03
--- /dev/null
+++ b/docs/component/uniui/uni-breadcrumb.md
@@ -0,0 +1,128 @@
+::: tip 组件名:uni-breadcrumb
+
+> 代码块: `uBreadcrumb`
+
+[点击下载&安装](https://ext.dcloud.net.cn/plugin?name=uni-breadcrumb)
+:::
+
+显示当前页面的路径,快速返回之前的任意页面。
+
+### 安装方式
+
+本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+
+如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
+
+### 基本用法
+
+在 `template` 中使用组件
+
+```html
+
+ {{route.name}}
+
+```
+
+```js
+export default {
+ name: "uni-stat-breadcrumb",
+ data() {
+ return {
+ routes: [
+ {
+ to: "/A",
+ name: "A页面",
+ },
+ {
+ to: "/B",
+ name: "B页面",
+ },
+ {
+ to: "/C",
+ name: "C页面",
+ },
+ ],
+ };
+ },
+};
+```
+
+## API
+
+### Breadcrumb Props
+
+| 属性名 | 类型 | 默认值 | 说明 |
+| :------------: | :----: | :-----: | :--------------: |
+| separator | String | 斜杠'/' | 分隔符 |
+| separatorClass | String | | 图标分隔符 class |
+
+### Breadcrumb Item Props
+
+| 属性名 | 类型 | 默认值 | 说明 |
+| :-----: | :-----------: | :----: | :-----------------------------------------------------------------------------: |
+| to | String/Object | | 路由跳转页面路径/对象 |
+| replace | Boolean | | 在使用 to 进行路由跳转时,启用 replace 将不会向 history 添加新记录(仅 h5 支持) |
+
+## 组件示例
+
+::: warning 注意
+直接拷贝示例代码,无法运行 ,示例依赖了 `uni-card` `uni-section` `uni-scss` 等多个组件。
+
+请到 [组件下载页面](https://ext.dcloud.net.cn/plugin?name=uni-breadcrumb) ,在页面右侧选择 `使用 HBuilderX导入示例项目` ,体验完整组件示例。
+:::
+
+:::preview https://hellouniapp.dcloud.net.cn/pages/extUI/breadcrumb/breadcrumb
+
+```html
+
+
+
+ 面包屑导航显示当前页面的路径,快速返回之前的任意可跳转页面
+
+
+
+ {{route.name}}
+
+
+
+
+ {{route.name}}
+
+
+
+
+
+
+
+
+```
diff --git a/docs/component/uniui/uni-data-select.md b/docs/component/uniui/uni-data-select.md
new file mode 100644
index 0000000000000000000000000000000000000000..715037d006b4b4abc6ed151e7b6bb31f6cf793fa
--- /dev/null
+++ b/docs/component/uniui/uni-data-select.md
@@ -0,0 +1,210 @@
+::: tip 组件名:uni-data-select
+
+> 代码块: `uDataSelect`
+
+[点击下载&安装](https://ext.dcloud.net.cn/plugin?name=uni-data-select)
+:::
+
+当选项过多时,使用下拉菜单展示并选择内容
+
+本组件要解决问题包括:
+
+1. 数据绑定型组件:给本组件绑定一个 data,会自动渲染一组候选内容。再以往,开发者需要编写不少代码实现类似功能
+2. 自动的表单校验:组件绑定了 data,且符合[uni-forms](https://ext.dcloud.net.cn/plugin?id=2773)组件的表单校验规范,搭配使用会自动实现表单校验
+
+在 uniCloud 开发中,`DB Schema`中配置了 enum 枚举等类型后,在 web 控制台的[自动生成表单](https://uniapp.dcloud.io/uniCloud/schema?id=autocode)功能中,会自动生成`uni-data-select`组件并绑定好 data
+
+> **注意事项**
+> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
+>
+> - 组件需要依赖 `sass` 插件 ,请自行手动安装
+> - 本组件为数据驱动,目的是快速投入使用,只可通过 style 覆盖有限样式,不支持自定义更多样式
+> - 如使用过程中有任何问题,或者您对 uni-ui 有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+> - 组件支持 nvue ,需要在 `manifest.json > app-plus` 节点下配置 `"nvueStyleCompiler" : "uni-app"`
+> - 如组件显示有问题 ,请升级 `HBuilderX` 为 `v3.1.0` 以上
+
+### 安装方式
+
+本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+
+如需通过`npm`方式使用`uni-ui`组件,另行文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
+
+### 基本用法
+
+设置 `localdata` 属性后,组件会通过数据渲染出对应的内容
+
+```html
+
+
+
+
+
+```
+
+```javascript
+export default {
+ data() {
+ return {
+ value: 0,
+ range: [
+ { value: 0, text: "篮球" },
+ { value: 1, text: "足球" },
+ { value: 2, text: "游泳" },
+ ],
+ };
+ },
+ methods: {
+ change(e) {
+ console.log("e:", e);
+ },
+ },
+};
+```
+
+### 云端数据示例
+
+```html
+
+
+
+
+
+
+```
+
+## API
+
+### DataSelect Props
+
+| 属性名 | 类型 | 可选值 | 默认值 | 说明 |
+| :-----------: | :-----------: | :----: | :------: | :-----------------------------------------------------------------: |
+| value/v-model | String/Number | - | - | 默认值,multiple=true 时为 Array 类型,否则为 String 或 Number 类型 |
+| localdata | Array | - | - | 本地渲染数据, |
+| clear | Boolean | - | - | 是否可以清空已选项 |
+| label | String | | | 左侧标题 |
+| placeholder | String | - | 请选择 | 输入框的提示文字 |
+| emptyText | String | - | 暂无数据 | 没有数据时显示的文字 ,本地数据无效 |
+
+#### DataCom Props
+
+更多 DataCom 支持的属性参考[更多](https://uniapp.dcloud.net.cn/component/datacom.html#%E8%AF%AD%E6%B3%95%E6%89%8B%E5%86%8C)
+
+#### Localdata Options
+
+`localdata` 属性的格式为数组,数组内每项是对象,需要严格遵循如下格式
+
+| 属性名 | 说明 |
+| :-----: | :--------: |
+| text | 显示文本 |
+| value | 选中后的值 |
+| disable | 是否禁用 |
+
+### DataSelect Events
+
+| 事件名 | 事件说明 | 返回参数 |
+| :-----: | :--------------------: | :------: |
+| @change | 选中状态改变时触发事件 | - |
+
+## 组件示例
+
+::: warning 注意
+直接拷贝示例代码,无法运行 ,示例依赖了 `uni-card` `uni-section` `uni-scss` 等多个组件。
+
+请到 [组件下载页面](https://ext.dcloud.net.cn/plugin?name=uni-data-select) ,在页面右侧选择 `使用 HBuilderX导入示例项目` ,体验完整组件示例。
+:::
+
+:::preview https://hellouniapp.dcloud.net.cn/pages/extUI/data-select/data-select
+
+```html
+
+
+
+ 通过数据驱动的单选框和复选框,可直接通过连接 uniCloud
+ 获取数据,同时可以配合表单组件 uni-forms 使用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
diff --git a/docs/component/uniui/uni-tooltip.md b/docs/component/uniui/uni-tooltip.md
new file mode 100644
index 0000000000000000000000000000000000000000..31eb9a25faf002a68d9740a2b6565cbcf32de503
--- /dev/null
+++ b/docs/component/uniui/uni-tooltip.md
@@ -0,0 +1,82 @@
+::: tip 组件名:uni-tooltip
+
+> 代码块: `utooltip`
+
+[点击下载&安装](https://ext.dcloud.net.cn/plugin?name=uni-tooltip)
+:::
+
+常用于展示鼠标 hover 时的提示信息。
+
+> 遮挡不住原生组件
+
+### 安装方式
+
+本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+
+如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
+
+### 基本用法
+
+在 `template` 中使用组件
+
+```html
+
+
+
+```
+
+## API
+
+### Tooltip Props
+
+| 属性名 | 类型 | 默认值 | 说明 |
+| :-------: | :----: | :----: | :---------------------------------: |
+| content | String | | 弹出层显示的内容 |
+| placement | String | left | Tooltip 的出现位置, 目前只支持 left |
+
+### Tooltip Slots
+
+| 名称 | 说明 |
+| :-----: | :-------------------: |
+| default | 被 Tooltip 包裹的组件 |
+| content | 弹出层插槽 |
+
+## 组件示例
+
+::: warning 注意
+直接拷贝示例代码,无法运行 ,示例依赖了 `uni-card` `uni-section` `uni-scss` 等多个组件。
+
+请到 [组件下载页面](https://ext.dcloud.net.cn/plugin?name=uni-tooltip) ,在页面右侧选择 `使用 HBuilderX导入示例项目` ,体验完整组件示例。
+:::
+
+:::preview https://hellouniapp.dcloud.net.cn/pages/extUI/tooltip/tooltip
+
+```html
+
+
+
+ 常用于展示鼠标 hover 时的提示信息,注意:无法覆盖原生组件
+
+
+
+
+
+ 一段文字
+
+
+ 一段文字
+
+
+
+
+
+
+
+```
diff --git a/docs/plugin/sell.md b/docs/plugin/sell.md
index 08bf10a1b485b543b04d0b293a31be66fbd77902..dfa7242838f2318f39cbc3cc65df9f54197f39d7 100644
--- a/docs/plugin/sell.md
+++ b/docs/plugin/sell.md
@@ -3,7 +3,9 @@
DCloud插件市场支持对uniCloud插件、原生插件设置付费销售,帮助插件作者进行技术变现;其中:
- uniCloud插件支持普通授权版、源码授权版两种形式进行售卖;[uniCloud付费插件的“源码授权版”和“普通授权版”的区别](https://ask.dcloud.net.cn/article/38040);
-- App原生插件仅支持普通授权版;
+- App原生插件仅支持购买授权版,不提供源码;
+
+其他类型插件不支持计费。
插件作者在发布uniCloud插件、原生插件时,可自定义售卖价格及形式(uniCloud分类),见下图:
@@ -11,11 +13,20 @@ DCloud插件市场支持对uniCloud插件、原生插件设置付费销售,帮
如未设置价格,则默认为免费插件,所有用户均可下载使用;
-如果设置了价格,则用户需付费后才能使用;为保护插件作者的权益最大化,DCloud对购买插件的使用场景做了限制,具体如下:
-- uniCloud插件:购买时需绑定服务空间,该付费插件仅支持部署到绑定的服务空间。
-- App原生插件:购买时需绑定appid,该付费插件仅可用于该appid对应的云打包,不支持其他appid云打包,不支持离线打包。
+## 版权保护和试用机制
+
+普通前端插件因其源码开放问题,无法支持计费。
+
+uniCloud插件的云函数部分支持源码保护,未购买源码版的用户无法获取到源码。如果是云端一体插件,其前端部分的js也支持加密混淆。但由于前端js必须运行在前端设备上,仍然存在被破解的可能性,DCloud无法承诺这种前端加密混淆无法破解。
+
+uniCloud插件的销售和服务空间绑定。购买者购买时绑定好自己的服务空间spaceid,未经授权的服务空间无法上传加密的云函数。
+
+app原生插件由于插件作者提交的是编译后的二进制文件,且该app插件的二进制文件在设计上不会单独被三方获取,所以可以保护安全。(也因此,本地打包不支持使用插件市场的付费app原生插件)
+
+app原生插件的销售和客户端appid、包名绑定。购买者购买时绑定好自己的appid和包名。未经授权的appid和包名无法运行需要付费购买的app原生插件。
+但DCloud为所有销售插件提供了试用机制,允许购买者先试用后付费。uniCloud插件提供了7天的试用,试用到期后会自动销毁加密云函数;app原生插件仅支持在app自定义运行基座上试用,该运行基座无法脱离HBuilder独立安装,且每次启动均有会弹出测试toast字样。
## 查看收益
diff --git a/docs/select.md b/docs/select.md
index 198f17b1f38072204a50c2a3dfd14bd33fc76eaa..0b4c4bec54d63f215cf0c05bb91c38cbc548b947 100644
--- a/docs/select.md
+++ b/docs/select.md
@@ -55,7 +55,7 @@ DCloud的盈利方式在帮助开发者进行流量变现(uni-AD)和提供
6. 微信原生开发对webpack、预编译语言、工程流程管理很多功能都不支持,大公司很少用微信原生开发,都是在用框架来提升开发效率
7. uni-app支持双向数据绑定、vuex状态管理,比小程序原生开发方便的多
8. 迟早会有多端需求,使用`uni-app`再无后续顾虑
-9. uni-app并非仅用于做跨端的,只用uni-app做小程序、只做H5、只做App的,案例是一样多的,详见:[https://uniapp.dcloud.io/case](https://uniapp.dcloud.io/case)
+9. uni-app并非仅用于做跨端的,只用uni-app做小程序、只做web、只做App的,案例是一样多的,详见:[https://uniapp.dcloud.io/case](https://uniapp.dcloud.io/case)
关于uni-app和微信开发的详细比较评测,参考:[https://ask.dcloud.net.cn/article/36484](https://ask.dcloud.net.cn/article/36484)
- 评测1、uni-app和原生wxml开发、wepy、mpvue、taro的对比,[https://ask.dcloud.net.cn/article/35867](https://ask.dcloud.net.cn/article/35867)
@@ -107,12 +107,13 @@ uni-app提供了大量的扩展api解决了这个问题,并且发展了成熟
```uni-app``` 积极拥抱社区现有的现代开发流程,包括但不限于:
-- 内置了webpack
+- 内置了webpack/vite
- NPM 包管理系统,详见[参考](http://uniapp.dcloud.io/tutorial/page-script#npm支持)
- es6+ 语法(发布时会自动编译为es5),详见[参考](http://uniapp.dcloud.io/tutorial/syntax-js#es6-支持)
- 各种预处理器(less、scss、stylus、typescript)
- uni-app的官方ide:HBuilderX,在vue、json、markdown、代码提示、操作效率上,有非常明显的优势,可帮助开发者大幅提高工作效率
- uni-app同时也提供了cli方式,可使用其他开发工具如vscode开发,当然开发效率不如HBuilderX。对比详见[https://ask.dcloud.net.cn/article/35451](https://ask.dcloud.net.cn/article/35451)
+- HBuilder也提供了cli,[参考](https://hx.dcloud.net.cn/cli/README)
**uni-app 生态开放性如何?能否直接利用现有前端社区资源?**
@@ -121,8 +122,8 @@ uni-app提供了大量的扩展api解决了这个问题,并且发展了成熟
- 丰富的插件市场为开发者提供数千款现成的轮子,[https://ext.dcloud.net.cn](https://ext.dcloud.net.cn)
- 兼容微信小程序 JS SDK,丰富的小程序生态内容可直接引入uni-app,并且在App侧通用,[参考](http://ask.dcloud.net.cn/article/35070)
-- 兼容微信小程序自定义组件,并且App、H5侧通用,[参考](http://uniapp.dcloud.io/tutorial/miniprogram-subject#小程序自定义组件支持)
-- App和H5提供了renderjs,使得浏览器专用的库也可以在App和H5里使用,[参考](https://uniapp.dcloud.io/tutorial/renderjs)
+- 兼容微信小程序自定义组件,并且App、web侧通用,[参考](http://uniapp.dcloud.io/tutorial/miniprogram-subject#小程序自定义组件支持)
+- App和web提供了renderjs,使得浏览器专用的库也可以在App和web里使用,[参考](https://uniapp.dcloud.io/tutorial/renderjs)
- 支持 NPM 包管理系统,[参考](http://uniapp.dcloud.io/tutorial/page-script#npm支持)
- 支持 mpvue 项目及组件,[参考](http://ask.dcloud.net.cn/article/34945)
- 支持原生插件,见插件市场:[https://ext.dcloud.net.cn](https://ext.dcloud.net.cn)
@@ -130,9 +131,11 @@ uni-app提供了大量的扩展api解决了这个问题,并且发展了成熟
**uni-app 支持的手机版本最低到多少?**
-
-- Vue2: Android4.4、iOS9是官方会保障兼容的。要知道Android4.4已经是2013年发布的手机了,正常用户不会还在用这么久远的手机。
-- Vue3: 支持的范围是:Android > 4.4, ios >= 10
+1. Web端:uni-app没有限制,同vue2和vue3自身能支持的浏览器版本
+2. 小程序端:uni-app没有限制,同该小程序自身能支持的最低平台
+3. App端:
+ - Vue2: Android4.4+、iOS9+。Android4.4已经是2013年发布的手机了。
+ - Vue3: 支持的范围是:Android >=5 (使用nvue和vue有区别。某些老国产Android5的rom无法动态升级Android system webview,此时如果使用vue页面需搭配x5内核) , iOS >= 10
**uni-app成熟度高吗?**
@@ -150,9 +153,9 @@ uni-app提供了大量的扩展api解决了这个问题,并且发展了成熟
**DCloud是家什么公司,是否可信赖**
-```DCloud```从2013年开始做HBuilder,目前800万前端开发者在使用```DCloud```的开发工具,HBuilder百度指数超过sublime、webstorm等全球知名工具。是中国唯一一家成功的开发工具厂商。
+```DCloud```从2013年开始做HBuilder,目前900万前端开发者在使用```DCloud```的开发工具,HBuilder百度指数超过sublime、webstorm等全球知名工具。是中国唯一一家成功的开发工具厂商。
-```DCloud```是明星创业公司,融资已经过了B2轮,且均为知名VC或战略投资人。
+```DCloud```是明星创业公司,融资已经过了C轮,且均为知名VC或战略投资人。
```DCloud```是HTML5中国产业联盟的发起单位和秘书单位。该联盟隶属于工信部信通院标准所。
@@ -164,7 +167,7 @@ uni-app提供了大量的扩展api解决了这个问题,并且发展了成熟
**App打包必须上传DCloud云端吗?代码会泄露吗?**
-代码可以云打包,也可以离线打包。
+代码可以云打包,也可以本地打包。
使用云打包时有两种模式:
1. 安心打包
@@ -172,7 +175,7 @@ uni-app提供了大量的扩展api解决了这个问题,并且发展了成熟
2. 传统云打包
传统云打包仅适合没有mac电脑但需要打iOS包的开发者。在这种情况下,代码和证书会上传到DCloud的mac打包服务器,但打包后立即删除,DCloud不会持久化保存。
-DCloud是一家遵纪守法的公司,不会做损害自己名誉的事情。之所以提供云打包,是方便不熟悉原生的前端工程师直接生成App安装包。包括让没有mac电脑的工程师也可以打出iOS的包。
+DCloud是一家正规公司,已通过等保三级认证(证书编号:11010813802-20001),珍惜自己的名誉。之所以提供云打包,是方便不熟悉原生的前端工程师直接生成App安装包。包括让没有mac电脑的工程师也可以打出iOS的包。
**DCloud提供哪些技术支持?碰到框架bug影响业务怎么办?**
diff --git a/docs/uni-stat-v2.md b/docs/uni-stat-v2.md
index 0692e41e41b0c4c79ab46eb43d6e3efc08a024db..e9a698aedb4748139bf782e2c3d77c9a6b96e238 100644
--- a/docs/uni-stat-v2.md
+++ b/docs/uni-stat-v2.md
@@ -206,6 +206,8 @@ uni统计2.0 是基于 uniCloud 开发的开源、免费统计平台。
#### 开启redis缓存
+开启redis缓存后可以降低数据库查询压力,提升uni统计性能,可按需决定是否开启。
+
::: warning 注意
开启redis缓存前,需要先确认是否已在布署uni统计的服务空间内购买redis服务,如果没有购买则需要先购买redis服务。
:::
diff --git a/docs/uniCloud/cf-functions.md b/docs/uniCloud/cf-functions.md
index d308d4d49f1a0a6079e4a98404e957eceff94381..aeed9cfa29f8559e9cd77012df255470cd4f65f6 100644
--- a/docs/uniCloud/cf-functions.md
+++ b/docs/uniCloud/cf-functions.md
@@ -49,9 +49,9 @@ HBuilderX中uniCloud项目的云函数均为项目的uniCloud/cloudfunctions目
| | └──package.json 公用模块package.json
| │───uni-clientDB-actions
| │ └──new_action.js clientDB action代码
详情
-| └───function-name 云函数目录
-| │──index.js 云函数代码
-| └──package.json 包含云函数的配置信息,如url化、定时设置、可用内存等内容
详情
+| │───function-name 云函数目录
+| │ │──index.js 云函数代码
+| │ └──package.json 包含云函数的配置信息,如url化、定时设置、可用内存等内容
详情
| └───object-name 云对象目录
| │──index.obj.js 云对象代码
| └──package.json 包含云对象的配置信息,可用内存等内容
详情
@@ -227,7 +227,9 @@ exports.main = async (event, context) => {
##### 其他客户端信息@client-info
-- 以下四个属性只有使用uni-app以callFunction方式调用才能获取,由客户端传递到云函数
+> HBuilderX 3.4.9起,可以获取所有客户端`getSystemInfo`返回的客户端信息,详细字段列表参考:[getSystemInfo](https://uniapp.dcloud.net.cn/api/system/info.html#getsysteminfo)
+
+- 客户端信息只有使用uni-app客户端以callFunction方式调用才能获取,由客户端传递到云函数
- 实际业务中务必验证一下前端传来的数据的合法性
```js
@@ -242,8 +244,8 @@ exports.main = async (event, context) => {
**注意事项**
-- event大小不可超过100kb
-- 云函数url化的场景下无法获取`context.OS`、`context.PLATFORM`、`context.APPID`、`context.DEVICEID`
+- 阿里云event大小不可超过1MB,腾讯云event大小不可超过6MB
+- 云函数url化的场景下无法获取客户端信息,`context.OS`、`context.PLATFORM`、`context.APPID`、`context.DEVICEID`等
>在云函数URL化的场景无法获取客户端平台信息,可以在调用依赖客户端平台的接口接口之前(推荐在云函数入口)通过修改context.PLATFORM手动传入客户端平台信息供其他插件(如:uni-id)使用
diff --git a/docs/uniCloud/cloud-obj.md b/docs/uniCloud/cloud-obj.md
index 06b47d98bedab8045da5cca0657b35c8c7fc0d7b..a6f88678e011d40adc1c4ccee518b71a2f47b557 100644
--- a/docs/uniCloud/cloud-obj.md
+++ b/docs/uniCloud/cloud-obj.md
@@ -216,6 +216,8 @@ uniCloud有众多API,另见:[uniCloud的API清单](uniCloud/cf-functions.htm
### 获取客户端信息@get-client-info
+> HBuilderX 3.4.9起此接口可获取所有客户端`getSystemInfo`返回的客户端信息,完整字段列表参考:[getSystemInfo](https://uniapp.dcloud.net.cn/api/system/info.html#getsysteminfo)
+
**接口形式**
`this.getClientInfo()`
@@ -253,6 +255,8 @@ module.exports = {
|deviceId |string |是 |客户端deviceId,目前同getSystemInfo内的deviceId|
|uniIdToken |string |是 |客户端用户token |
+
+
**注意**
- 与云函数内获取客户端platform稍有不同,云函数未拉齐vue2、vue3版本app平台的platform值,vue2为`app-plus`,vue3为`app`。云对象无论客户端是vue2还是vue3,在app平台获取的platform均为`app`。这一点在使用uni-id时需要特别注意,详情见:[uni-id文档 preferedAppPlatform](uniCloud/uni-id.md?id=prefered-app-platform)
@@ -518,7 +522,7 @@ uniCloud.importObject('todo', {
uniCloud.importObject('todo', {
customUI: false, // 是否取消自动展示的交互界面。默认为false,配置为true时取消自动展示的交互提示界面,以下配置均不再生效
loadingOptions: { // loading相关配置
- text: '加载中...', // 显示的loading内的提示文字。默认值为:加载中...
+ title: '加载中...', // 显示的loading内的提示文字。默认值为:加载中...
mask: true // 是否使用透明遮罩,配置为true时不可点击页面其他内容。默认值为:true
},
errorOptions: { // 错误界面相关配置
diff --git a/docs/uniCloud/faq.md b/docs/uniCloud/faq.md
index 392716ebaf26b2e582a6d62527f125f802428acd..5b908415879bd367e438b88af9a3557fde812df5 100644
--- a/docs/uniCloud/faq.md
+++ b/docs/uniCloud/faq.md
@@ -232,7 +232,7 @@ uniCloud的每个云函数是一个独立进程,不存在云函数级别的多
### 高并发下简单的防止超卖
-> uniCloud阿里云现已支持redis,开通并使用redis请参考:[redis开通和使用](uniCloud/redis.md),如何使用redis防止超卖请参考:[redis高并发抢购](uniCloud/redis.md?id=snap-over-sell)
+> uniCloud阿里云现已支持redis,开通并使用redis请参考:[redis开通和使用](uniCloud/redis.md),如何使用redis防止超卖请参考:[redis高并发抢购](uniCloud/redis.md?id=snap-over-sell)(推荐使用)。如下方式针对无redis场景比较不灵活(不推荐使用)
高并发时很多用户同时对一条数据读写,很容易造成数据混乱,表现在秒杀抢购等场景就是超卖。以秒杀为例,开发者可以从扣除库存这步入手对超卖进行很大程度的限制,下面是一个简单的示例(**注意以下代码未使用事务**)
diff --git a/docs/uniCloud/uni-id.md b/docs/uniCloud/uni-id.md
index 83b1ef2ace5759c33412a0b4447752047e9204e7..6a168ba4ce019eefa6425ba00d40f53ec2f20df0 100644
--- a/docs/uniCloud/uni-id.md
+++ b/docs/uniCloud/uni-id.md
@@ -250,7 +250,7 @@ const userInfo = atob(userSegment) // '{"uid":"61a593ba91a750000166f78d","role":
**前提介绍:**
-uni-app vue2版本app端对应的platform为`app-plus`,uni-app vue3版本app端对应的platform为`app`。此改动引发了一些问题,比如在uni-id内使微信登录会无法匹配对应的平台导致登录报错。
+uni-app vue2版本app端对应的platform为`app-plus`(HBuilderX 3.4.9起 vue2版本app端对应的platform值也调整为`app`),uni-app vue3版本app端对应的platform为`app`。此改动引发了一些问题,比如在uni-id内使微信登录会无法匹配对应的平台导致登录报错。
由于uni-id将客户端平台存储在了数据库内(例如:app端微信登录的openid被存储为`wx_openid['app-plus']`),此问题无法平滑升级,因此对于新老项目建议分别处理。
@@ -787,6 +787,32 @@ uniCloud.callFunction({
```
+### 主动刷新token@refresh-token
+
+> 新增于uni-id 3.3.14
+
+用法:`uniID.refreshToken(Object RefreshTokenParams);`
+
+**参数说明**
+
+| 字段| 类型 | 必填| 说明 |
+| --- | --- | --- | --- |
+| token | String| 是 |用户token|
+
+**示例**
+
+```js
+const {
+ token,
+ tokenExpired
+} = await uniID.refreshToken({
+ token: 'xxx'
+})
+```
+
+**注意**
+
+- 刷新token后会在再次触发查库校验token时使token失效
### 登出@logout
@@ -937,15 +963,37 @@ exports.main = async function(event,context) {
}
```
+### 使用短信验证码重置密码@reset-pwd-by-sms
+
+> 新增于 uni-id 3.3.14
+
+用法:`uniID.resetPwdBySms(Object ResetPwdBySmsParams)`
+
+**参数说明**
+
+| 字段 | 类型 | 必填 | 说明 |
+| --- | --- | --- | --- |
+| mobile | String| 是 |手机号码 |
+| code | String| 是 |验证码 |
+| password | String| 是 |重置后的密码 |
+
+**响应参数**
+
+无
+
+**注意**
+
+- 对应发送短信验证码接口`type`为`reset-pwd`
+
### 加密密码 @encrypt-password
用法:`uniID.encryptPwd(String password)`
**参数说明**
-| 字段 | 类型 | 必填| 说明 |
-| --- | --- | --- | --- |
-| password | String| 是 |要加密的字符串 |
+| 字段 | 类型 | 必填 | 说明 |
+| --- | --- | --- | --- |
+| password | String| 是 |要加密的字符串 |
**响应参数**
@@ -1132,6 +1180,36 @@ exports.main = async function(event,context) {
- 此接口仅校验token是否合法,从token中获取用户信息。不查库校验token,也不会查库获取用户信息。适用于不想使用checkToken获取用户信息的场景(checkToken内包含其他逻辑,比如自动刷新token等)
+### 添加用户(非注册)@add-user
+
+> 新增于 uni-id 3.3.14
+
+用法:`uniID.addUser(Object AddUserParams);`
+
+**BanAccountParams参数说明**
+
+| 字段 | 类型 | 必填 | 说明 |
+| --- | --- | --- | --- |
+| username | String| username、email、mobile至少有一个 |用户名 |
+| mobile | String| username、email、mobile至少有一个 |手机号 |
+| email | String| username、email、mobile至少有一个 |邮箱 |
+| password | String| 否 |密码 |
+| role | Array | 否 |角色列表 |
+| authorizedApp | Array | 否 |此用户能登录的app对应的appId列表 |
+
+
+**响应参数**
+
+| 字段 | 类型 | 必备 | 说明 |
+| --- | --- | --- | --- |
+| uid | String| 是 |添加用户返回的用户id |
+
+**注意**
+
+- authorizedApp不传时创建的用户无法登录任一端,后续可以调用授权登录接口再次授权登录
+- 传入email、mobile时,自动会将对用的email_confirmed、mobile_confirmed设置为1
+
+
### 封禁账户@ban-account
- 由于客户端存在token缓存,执行封禁操作并不会实时生效。用户下次获取token(包括刷新token)时才会出现错误信息
@@ -1148,9 +1226,9 @@ exports.main = async function(event,context) {
**响应参数**
-| 字段| 类型 | 必填| 说明 |
-| --- | --- | --- | --- |
-| code| Number| 是 |错误码,0表示成功|
+| 字段 | 类型 | 必填 | 说明 |
+| --- | --- | --- | --- |
+| errCode | Number | String | 是 |错误码,0表示成功 |
### 解禁账户@unban-account
@@ -1285,12 +1363,12 @@ uni.removeStorageSync('uni_id_token_expired')
**参数说明**
-| 字段 | 类型 | 必填| 说明 |
-| --- | --- | --- | --- |
-| mobile | String| 是 |用户手机号 |
-| templateId| String| 是 |`uni-id 1.1.8+`用户自定义模板Id,不传则使用uniID_code(请注意目前此模板已经不再开放使用,请传入自定义模板Id,已经报备使用的用户不受影响),请使用类似下面模板示例的参数申请模板 |
-| code | String| 否 |验证码字符串 |
-| type | String| 是 |类型,用于防止不同功能的验证码混用,目前支持的类型`login`登录、`register`注册、`bind`绑定手机、`unbind`解绑手机|
+| 字段 | 类型 | 必填 | 说明 |
+| --- | --- | --- | --- |
+| mobile | String| 是 |用户手机号 |
+| templateId| String| 是 |`uni-id 1.1.8+`用户自定义模板Id,请使用类似下面模板示例的参数申请模板 |
+| code | String| 否 |验证码字符串 |
+| type | String| 是 |类型,用于防止不同功能的验证码混用,目前支持的类型`login`登录、`register`注册、`bind`绑定手机、`unbind`解绑手机|
```
// 短信模板示例,请在https://dev.dcloud.net.cn/uniSms申请签名(短信开头中括号内部分)及模板
@@ -2021,6 +2099,27 @@ exports.main = async function(event,context) {
}
```
+### 获取App平台微信登录用户信息@get-weixin-user-info
+
+> 新增于 uni-id 3.3.14
+
+用法:`uniID.getWeixinUserInfo(Object GetWeixinUserInfoParams);`
+
+**参数说明**
+
+| 字段 | 类型 | 必填 | 说明 |
+| --- | --- | --- | --- |
+| accessToken | String| 是 |用户登录时返回的accessToken|
+| openid | String| 是 |用户登录时返回的openid |
+
+**响应参数**
+
+| 字段 | 类型 | 说明 |
+| --- | --- | --- |
+| nickname | String|用户昵称 |
+| avatar | String|用户头像 |
+
+
## QQ@qq
> 新增于3.3.0版本
@@ -3035,36 +3134,41 @@ const res = await uniID.forbidAppLogin({
在unicloud [web控制台](https://unicloud.dcloud.net.cn/) 新建数据表时,可以从`uni-id`的模板分类里找到下面的表,并一键创建这些表。
-## 用户表
+## 用户表@user-table
表名:`uni-id-users`
-| 字段 | 类型 | 必填| 描述 |
-| ----------------| --------- | ----| ------------------------------------------- |
-| \_id | Object ID | 是 | 存储文档 ID(用户 ID),系统自动生成 |
-| username | String | 否 | 用户名,不允许重复 |
-| password | String | 否 | 密码。加密存储 |
-| nickname | String | 否 | 用户昵称 |
-| gender | Integer | 否 | 用户性别:0 未知 1 男性 2 女性 |
-| status | Integer | 是 | 用户状态:0 正常,1 禁用,2 审核中,3 审核拒绝,4 已注销 |
-| mobile | String | 否 | 手机号码 |
-| mobile_confirmed| Integer | 否 | 手机号验证状态:0 未验证 1 已验证,未验证用户不可登录 |
-| email | String | 否 | 邮箱地址 |
-| email_confirmed | Integer | 否 | 邮箱验证状态:0 未验证 1 已验证,未验证用户不可登录 |
-| avatar | String | 否 | 头像地址 |
-| wx_unionid | String | 否 | 微信unionid |
-| wx_openid | Object | 否 | 微信各个平台openid |
-| ali_openid | String | 否 | 支付宝平台openid |
-| comment | String | 否 | 备注 |
-| realname_auth | Object | 否 | 实名认证信息 |
-| register_date | Timestamp | 否 | 注册时间 |
-| register_ip | String | 否 | 注册时 IP 地址 |
-| last_login_date | Timestamp | 否 | 最后登录时间(注意并非只有登录操作会修改此值,token刷新时也会修改最后登录时间。应用启动时若token有效则不会触发登录行为,也不会更新本值。最后登录IP同理)|
-| last_login_ip | String | 否 | 最后登录时 IP 地址 |
-| login_ip_limit | Array | 否 | 登录 IP 限制 |
-| inviter_uid | Array | 否 | 邀请人uid,按层级从下往上排列的uid数组,即第一个是直接上级|
-| my_invite_code | String | 否 | 用户自己的邀请码 |
-| role | Array | 否 | 用户角色列表,由role_id组成的数组 |
+| 字段 | 类型 | 必填 | 描述 |
+| ---------------- | --------- | ---- | ------------------------------------------- |
+| \_id | Object ID | 是 | 存储文档 ID(用户 ID),系统自动生成 |
+| username | String | 否 | 用户名,不允许重复 |
+| password | String | 否 | 密码。加密存储 |
+| nickname | String | 否 | 用户昵称 |
+| gender | Integer | 否 | 用户性别:0 未知 1 男性 2 女性 |
+| status | Integer | 是 | 用户状态:0 正常,1 禁用,2 审核中,3 审核拒绝,4 已注销 |
+| mobile | String | 否 | 手机号码 |
+| mobile_confirmed | Integer | 否 | 手机号验证状态:0 未验证 1 已验证,未验证用户不可登录 |
+| email | String | 否 | 邮箱地址 |
+| email_confirmed | Integer | 否 | 邮箱验证状态:0 未验证 1 已验证,未验证用户不可登录 |
+| avatar | String | 否 | 头像地址 |
+| wx_unionid | String | 否 | 微信unionid |
+| wx_openid | Object | 否 | 微信各个平台openid |
+| ali_openid | String | 否 | 支付宝平台openid |
+| comment | String | 否 | 备注 |
+| realname_auth | Object | 否 | 实名认证信息 |
+| register_date | Timestamp | 否 | 注册时间 |
+| register_ip | String | 否 | 注册时 IP 地址,`uni-id 3.3.14`起移至register_env内 |
+| last_login_date | Timestamp | 否 | 最后登录时间 |
+| last_login_ip | String | 否 | 最后登录时 IP 地址 |
+| login_ip_limit | Array | 否 | 登录 IP 限制 |
+| inviter_uid | Array | 否 | 邀请人uid,按层级从下往上排列的uid数组,即第一个是直接上级|
+| my_invite_code | String | 否 | 用户自己的邀请码 |
+| role | Array | 否 | 用户角色列表,由role_id组成的数组 |
+| register_env | Object | 否 | 用户注册时的环境信息,新增于`uni-id 3.3.14` |
+
+**注意**
+
+- 最后登录时间、IP,并非只有登录操作会修改,token刷新时也会修改最后登录时间、ip。应用启动时若token有效则不会触发登录行为,也不会更新本值。
**wx_openid字段定义**
@@ -3100,6 +3204,21 @@ const res = await uniID.forbidAppLogin({
| company | String | 否 | 公司名称 |
| title | String | 否 | 职位 |
+**register_env字段定义**
+
+**注意:调用addUser添加的用户无此字段**
+
+| 字段 | 类型 | 必填 | 描述 |
+|-- |-- |-- |-- |
+|appid | String|否 |注册时的客户端appId |
+|uni_platform |String |否 |注册时的客户端平台,如h5、app、mp-weixin等 |
+|app_name |String |否 |注册时的客户端名称 |
+|app_version |String |否 |注册时的客户版本 |
+|app_version_code |String |否 |注册时的客户版本号 |
+|channel |String |否 |注册时的客户端启动场景(小程序)或应用渠道(app) |
+|client_ip |String |否 |注册时的客户端IP |
+
+
用户集合示例:
```