提交 db332865 编写于 作者: JiaRongPing's avatar JiaRongPing

Merge branch 'master' of https://gitee.com/dcloud/unidocs-zh

......@@ -61,11 +61,11 @@
flex-direction column
justify-content center
#docsearch span
@media (min-width: $MQMobile)
@media (min-width: 1200px)
&
display flex
@media (max-width: $MQMobile)
@media (max-width: 1200px)
:root
--docsearch-spacing 10px
--docsearch-footer-height 40px
......
......@@ -30,9 +30,7 @@
<div
class="links"
:style="linksWrapMaxWidth ? {
'max-width': linksWrapMaxWidth + 'px'
} : {}"
:style="SearchBoxStyle"
>
<!-- <a class="switch-version" href="javascript:void(0)">回到旧版</a> -->
<DcloudSearchPage v-if="isAlgoliaSearch" ref="dcloudSearchPage" :options="algolia"/>
......@@ -42,6 +40,14 @@
</div>
<div class="sub-navbar">
<DropdownLink
class="custom-main-navbar can-hide"
v-if="showSubNavBar && fixedNavbar"
:item="{
text: customNavBarKeys[navConfig.userNavIndex],
items: customNavBar
}"
/>
<NavLinks class="can-hide" />
<div class="mobile-sub-navbar">
<div class="subnavbar__item" @click="$emit('toggle-sidebar')">
......@@ -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
......
<template>
<ul
v-if="items.length"
class="sidebar-links"
>
<li
v-for="(item, i) in items"
:key="i"
>
<SidebarGroup
v-if="item.type === 'group'"
:item="item"
:open="i === openGroupIndex"
:collapsable="item.collapsable || item.collapsible"
:depth="depth"
@toggle="toggleGroup(i)"
/>
<SidebarLink
v-else
:sidebar-depth="sidebarDepth"
:item="item"
/>
</li>
</ul>
</template>
<script>
import SidebarGroup from '@theme/components/SidebarGroup.vue'
import SidebarLink from '@theme/components/SidebarLink.vue'
import { isActive, debounce } from '../util'
export default {
name: 'SidebarLinks',
components: { SidebarGroup, SidebarLink },
props: [
'items',
'depth', // depth of current sidebar links
'sidebarDepth', // depth of headers to be extracted
'initialOpenGroupIndex'
],
data () {
return {
openGroupIndex: this.initialOpenGroupIndex || 0
}
},
watch: {
'$route': debounce(function () {
this.refreshIndex()
})
},
created () {
this.refreshIndex()
},
methods: {
refreshIndex () {
const index = resolveOpenGroupIndex(
this.$route,
this.items
)
if (index > -1) {
this.openGroupIndex = index
}
},
toggleGroup (index) {
this.openGroupIndex = index === this.openGroupIndex ? -1 : index
},
isActive (page) {
return isActive(this.$route, page.regularPath)
}
}
}
function resolveOpenGroupIndex (route, items) {
for (let i = 0; i < items.length; i++) {
const item = items[i]
if (descendantIsActive(route, item)) {
return i
}
}
return -1
}
function descendantIsActive (route, item) {
if (item.type === 'group') {
const childIsActive = item.path && isActive(route, item.path)
const grandChildIsActive = item.children.some(child => {
if (child.type === 'group') {
return descendantIsActive(route, child)
} else {
return child.type === 'page' && isActive(route, child.path)
}
})
return childIsActive || grandChildIsActive
}
return false
}
</script>
......@@ -10,6 +10,7 @@
export const navbar = [
{
text: 'uni-app',
link: '/',
items: [
{
text: '介绍',
......
......@@ -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;
......
......@@ -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)
### 官方示例
<a href="//m3w.cn/uniapp" target="_blank" class="clear-style"><b>Hello uni-app:</b></a>演示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)
#### 典型案例
<a href="https://m.qinxuan.hihonor.com/" target="_blank" class="clear-style"><b>华为荣耀亲选商城:</b></a> 华为公司旗下荣耀品牌精品电商平台。
......
......@@ -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)
......
......@@ -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)|
......
::: 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
<uni-breadcrumb separator="/">
<uni-breadcrumb-item v-for="route in routes" :to="route.to"
>{{route.name}}</uni-breadcrumb-item
>
</uni-breadcrumb>
```
```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
<template>
<view class="container">
<uni-card is-full :is-shadow="false">
<text class="uni-h6"
>面包屑导航显示当前页面的路径,快速返回之前的任意可跳转页面</text
>
</uni-card>
<uni-section title="基础用法" type="line" padding>
<uni-breadcrumb separator="/">
<uni-breadcrumb-item v-for="route in routes" :to="route.to"
>{{route.name}}</uni-breadcrumb-item
>
</uni-breadcrumb>
</uni-section>
<uni-section title="自定义分隔符" type="line" padding>
<uni-breadcrumb separator=">">
<uni-breadcrumb-item v-for="route in routes" :to="route.to"
>{{route.name}}</uni-breadcrumb-item
>
</uni-breadcrumb>
</uni-section>
</view>
</template>
<script>
export default {
components: {},
data() {
return {
routes: [
{
to: "/",
name: "首页",
},
{
to: "",
name: "菜单 A",
},
{
to: "",
name: "菜单 B",
},
],
};
},
};
</script>
<style lang="scss"></style>
```
::: 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
<template>
<view>
<uni-data-select
v-model="value"
:localdata="range"
@change="change"
></uni-data-select>
</view>
</template>
```
```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
<template>
<view>
<!-- 云端数据 -->
<uni-data-select
collection="opendb-app-list"
field="appid as value, name as text"
label="应用选择"
v-model="appid"
:clear="false"
/>
</view>
</template>
```
## 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
<template>
<view>
<uni-card is-full>
<text class="uni-h6"
>通过数据驱动的单选框和复选框,可直接通过连接 uniCloud
获取数据,同时可以配合表单组件 uni-forms 使用</text
>
</uni-card>
<uni-section title="本地数据" type="line">
<uni-data-select
v-model="value"
:localdata="range"
@change="change"
></uni-data-select>
</uni-section>
<uni-section
title="云端数据"
subTitle="连接云服务空间, 且存在相关的数据表才能生效(此处演示, 未连接云服务空间, 故不生效, 且有报错)"
type="line"
>
<uni-data-select
collection="opendb-app-list"
field="appid as value, name as text"
v-mode="value"
/>
</uni-section>
<uni-section title="是否可清除已选项" type="line">
<uni-data-select
v-model="value"
:localdata="range"
@change="change"
:clear="false"
></uni-data-select>
</uni-section>
<uni-section title="配置左侧标题" type="line">
<uni-data-select
v-model="value"
:localdata="range"
@change="change"
label="应用选择"
></uni-data-select>
</uni-section>
</view>
</template>
<script>
export default {
data() {
return {
value: 0,
range: [
{ value: 0, text: "篮球" },
{ value: 1, text: "足球" },
{ value: 2, text: "游泳" },
],
};
},
methods: {
change(e) {
console.log("e:", e);
},
},
};
</script>
<style lang="scss">
.text {
font-size: 12px;
color: #666;
margin-top: 5px;
}
.uni-px-5 {
padding-left: 10px;
padding-right: 10px;
}
.uni-pb-5 {
padding-bottom: 10px;
}
</style>
```
::: 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
<uni-tooltip :content="tooltip显示的内容">
<button>被包裹的组件</button>
</uni-tooltip>
```
## 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
<template>
<view class="container">
<uni-card is-full :is-shadow="false">
<text class="uni-h6">常用于展示鼠标 hover 时的提示信息,注意:无法覆盖原生组件</text>
</uni-card>
<uni-section title="基础用法" type="line" padding>
<uni-tooltip content="提示文字" />
</uni-section>
<uni-section title="插槽用法" type="line" padding>
<uni-tooltip content="提示文字">一段文字</uni-tooltip>
</uni-section>
<uni-section title="自定义弹层宽度" type="line" padding>
<uni-tooltip content="提示文字">一段文字</uni-tooltip>
</uni-section>
</view>
</template>
<script>
export default {
components: {},
data() {
return {};
},
};
</script>
<style lang="scss"></style>
```
......@@ -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字样。
## 查看收益
......
......@@ -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影响业务怎么办?**
......
......@@ -206,6 +206,8 @@ uni统计2.0 是基于 uniCloud 开发的开源、免费统计平台。
#### 开启redis缓存
开启redis缓存后可以降低数据库查询压力,提升uni统计性能,可按需决定是否开启。
::: warning 注意
开启redis缓存前,需要先确认是否已在布署uni统计的服务空间内购买redis服务,如果没有购买则需要先购买redis服务。
:::
......
......@@ -49,9 +49,9 @@ HBuilderX中uniCloud项目的云函数均为项目的uniCloud/cloudfunctions目
| | └──package.json 公用模块package.json
| │───uni-clientDB-actions
| │ └──new_action.js clientDB action代码 <a target="_blank" href="https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=action">详情</a>
| ───function-name 云函数目录
| │──index.js 云函数代码
| └──package.json 包含云函数的配置信息,如url化、定时设置、可用内存等内容 <a target="_blank" href="https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=packagejson">详情</a>
| ───function-name 云函数目录
| │──index.js 云函数代码
| └──package.json 包含云函数的配置信息,如url化、定时设置、可用内存等内容 <a target="_blank" href="https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=packagejson">详情</a>
| └───object-name 云对象目录
| │──index.obj.js 云对象代码
| └──package.json 包含云对象的配置信息,可用内存等内容 <a target="_blank" href="https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=packagejson">详情</a>
......@@ -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)使用
......
......@@ -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: { // 错误界面相关配置
......
......@@ -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场景比较不灵活(不推荐使用)
高并发时很多用户同时对一条数据读写,很容易造成数据混乱,表现在秒杀抢购等场景就是超卖。以秒杀为例,开发者可以从扣除库存这步入手对超卖进行很大程度的限制,下面是一个简单的示例(**注意以下代码未使用事务**
......
......@@ -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 &#124; 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 |
用户集合示例:
```
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册