
## 汇总api
- app：应用相关方法。文档[点击这里](https://docs.cloudbase.net/lowcode/framework/app/app)
- auth：权限、用户信息、应用信息、登入/登出等
具体API见如下。

## 初始化
### app.init(params: Object)
初始化。目前支持两种：
（1）web：对外只支持web
（2）小程序：小程序参数复杂，暂时不对外
#### web入参 Object 属性
| 属性     | 类型     | 默认值   | 必填     | 说明     |
| -------- | --------- | --------   | -------- | -------- |
| type     | string     |               |  是       | portal:企业工作台|
| isProd  |  boolen    |               |  是       | 是否是正式环境 |
| envId   |  string    |               |  是       | 环境id |
| login    | function |               |  否       | 登录后的回调函数，调用auth.signIn后的执行回调函数，例如可跳转到登录页 |
#### 示例
```javascript
import { app } from '@cloudbase/weda-client';
// 1、初始化工作台
app.init({
	type: 'portal',
	isProd: true,
	envId: '你的环境id',
	login: () => {
		history.pushState({}, '企业工作台', '/adminportal')
	}
});
```

#### 小程序入参 Object 属性
| 属性     | 类型     | 默认值   | 必填     | 说明     |
| -------- | --------- | --------   | -------- | -------- |
| isProd  |  boolen    |               |  是       | 是否是正式环境 |
| envId   |  string    |               |  是       | 环境id |
| appId     | string     |               |  是       | 应用id|
| tcbClientId     | string     |               |  是       | 应用端ID|
| resourceAppid     | string     |               |  是       | 云开发资源所属的微信app id|
| dataSourceProfiles    | array |               |  是       | 数据源描述对象数组 |
| datasetProfiles    | object |               |  是       | 新的dataset变量配置对象，key 为页面ID(全局为$global), val 为变量配置数组 |

## 登录认证
### auth.signIn(params: Object)
登录。目前支持两种：
（1）web登录：支持用户名密码
（2）小程序：支持手机号登录（不对外）

#### （1）企业工作台登录参数
| 字段 | 必填 | 类型 | 说明 |
| ------ | ------ | ------ | ------ |
| username | 是 | string |  用户手机号，邮箱或自定义用户名 |
| password | 否 | string | 用户密码 ，password 与 verification_token 必须任选其一 |

#### （2）小程序登录参数
| 字段 | 必填 | 类型 | 说明 |
| ------ | ------ | ------ | ------ |
| encryptedPhoneCode | 是 | string |  手机号动态令牌。获取方式参考[微信文档](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html)


#### 示例
```javascript
// 1、初始化工作台
import { app, auth } from '@cloudbase/weda-client';
app.init({
	type: 'portal',
	isProd: true,
	envId: '你的环境id',
	login: () => {
		history.pushState({}, '企业工作台', '/adminportal')
	}
});

// 2、调用登录
await auth.signIn({
	username: ‘用户名’,
	password: '密码'
});
```
### auth.onLoginStateChanged((param: Object) => {})
目前只支持web。
如果已登录，则回调参数是UserInfo，否则是null
#### 回调参数 Object 属性
| 属性     | 类型     | 说明     |
| -------- | --------- | -------- |
| userInfo | Object | 用户信息，如果未登录，返回null。已登录，见下面解释 |
| appInfo |  Array<AppInfo>  | 如果未登录，返回null。已登录，见下面解释 |

#### 出参Object属性
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
| name | string | 仅内部用户有name字段，外部用户没有 |
| type | number | 类型。0: 内部用户;1: 外部用户;2: 匿名用户 |
| relatedRoles | array | 已关联角色。见下面解释 |
| openId | string | 微信openid/企业微信openid。|
| userId | string | 微搭用户id |
#### 出参object.relatedRoles[i]属性
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
|id |string |角色id |
|envId |string |环境ID |
|name |string |角色名称 |
|roleIdentity |string |角色标识 |
#### object.appInfo
数组子项：
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
| appCustomNav | Object | 菜单导航信息 |
| deployUrl | string | 部署地址 |
| id | string | 应用id |
| name | string | 应用名 |

#### object.appInfo.appCustomNav
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
| isMultiTerminal | boolean | 是否是双端菜单 |
| menuData | Array<CustomMenu> | pc端菜单 |
| mobileMenuData | Array<CustomMenu> | 移动端菜单 |
| navigationStyle | string | 导航样式 |

#### object.appInfo.appCustomNav.menuData[i]、object.appInfo.appCustomNav.mobileMenuData[i]
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
| Key | string | 菜单key |
| title | string | 菜单标题 |
| type | string | 菜单类型 |
| path | string | 菜单路径 |
| iconUrl | string | 图标地址 |
| children | string | Array<CustomMenu> |
| linkTargetBlank | boolean | 是否新打开页面 |
| level | number | 菜单登记 |

#### 示例
```javascript
// 1、初始化工作台
import { app, auth } from '@cloudbase/weda-client';
app.init({
	type: 'portal',
	isProd: true,
	envId: '你的环境id',
	login: () => {
		history.pushState({}, '企业工作台', '/adminportal')
	}
});

// 2、调用登录
auth.onLoginStateChanged((res) => {
	console.log('监听 onLoginStateChanged res', res);
});
```

### auth.signOut()
登出。目前仅支持web
#### 示例
```javascript
import { app, auth } from '@cloudbase/weda-client';
// 1、初始化工作台
app.init({
	type: 'portal',
	isProd: true,
	envId: '你的环境id',
	login: () => {
		history.pushState({}, '企业工作台', '/adminportal')
	}
});

// 2、调用登录
await auth.signIn({
	username: ‘用户名’,
	password: '密码'
});

// 4、登出。登出是异步，建议await
await auth.signOut();
```

### auth.getAccessToken(): object
web和小程序都支持。返回accessToken字符串
#### 出参Object属性
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
| accessToken | string | accessToken字符串 |
#### 示例
```javascript
import { app, auth } from '@cloudbase/weda-client';
// 1、初始化工作台
app.init({
	type: 'portal',
	isProd: true,
	envId: '你的环境id',
	login: () => {
		history.pushState({}, '企业工作台', '/adminportal')
	}
});

// 2、调用登录
await auth.signIn({
	username: ‘用户名’,
	password: '密码'
});

// 3、获取accessToken
const res = await auth.getAccessToken();
console.log('getAccessToken res', res);  // { "accessToken"："eyJhbGciOiJSUzI1NiIsImtpZCI6ImRjYWRmM"}
```
### auth.currentUser: Object
web和小程序都支持。
获取用户信息。数据与 `auth.getUserInfo()` 一致。

#### 出参Object属性
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
| name | string | 仅内部用户有name字段，外部用户没有 |
| type | number | 类型。0: 内部用户;1: 外部用户;2: 匿名用户 |
| relatedRoles | array | 已关联角色。见下面解释 |
| openId | string | 微信openid/企业微信openid。|
| userId | string | 微搭用户id |
#### 出参object.relatedRoles[i]属性
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
|id |string |角色id |
|envId |string |环境ID |
|name |string |角色名称 |
|roleIdentity |string |角色标识 |
	
#### 示例
```javascript
// 1、初始化工作台
import { app, auth } from '@cloudbase/weda-client';
app.init({
	type: 'portal',
	isProd: true,
	envId: '你的环境id',
	login: () => {
		history.pushState({}, '企业工作台', '/adminportal')
	}
});

// 2、调用登录
await auth.signIn({
	username: ‘用户名’,
	password: '密码'
});
	
// 3、获取用户信息
const res = await auth.currentUser;
console.log('currentUser res', res);
```
	
### auth.getUserInfo(): Object
web和小程序都支持。获取用户信息。
数据与 `auth.currentUser` 一致。区分内部用户和外部用户，两者信息返回如下。

#### 出参Object属性
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
| name | string | 仅内部用户有name字段，外部用户没有 |
| type | number | 类型。0: 内部用户;1: 外部用户;2: 匿名用户 |
| relatedRoles | array | 已关联角色。见下面解释 |
| openId | string | 微信openid/企业微信openid。|
| userId | string | 微搭用户id |
#### 出参object.relatedRoles[i]属性
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
|id |string |角色id |
|envId |string |环境ID |
|name |string |角色名称 |
|roleIdentity |string |角色标识 |

#### 示例
```javascript
// 1、初始化工作台
import { app, auth } from '@cloudbase/weda-client';
app.init({
	type: 'portal',
	isProd: true,
	envId: '你的环境id',
	login: () => {
		history.pushState({}, '企业工作台', '/adminportal')
	}
});

// 2、调用登录
await auth.signIn({
	username: ‘用户名’,
	password: '密码'
});
	
// 3、获取用户信息
const res = await auth.getUserInfo();
console.log('getUserInfo res', res);
```
	
	
## 附录
```
#### 内部用户出参Object属性
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
| uin | string | 腾讯云主账号uin。不放开。 |
| name | string | 用户名。 |
| envId | string | 环境Id。不放开。 |
| type | string | 类型。类型数值分别代表什么意思？？ |
| email | string | 邮箱。不放开。 |
| phone | string | 手机号。不放开。 |
| uuid | string | 用户uuid。不放开。  |
| source | number | 渠道，1:自建；2:企业微信导入。3:外部用户。不放开。 |
| relatedRoles | string | 已关联角色 |
| userId | number | 微搭用户id |
| userExtend | number | 用户扩展信息。json字符串 |
| isLicensed | number | 用户是否授权License。不放开。 |
#### 内部用户出参object.relatedRoles[i]属性
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
|envId |string |环境ID |
|id |number |角色id |
|name |string |角色名称 |
|roleIdentity |string |角色标识 |
	
#### 外部用户出参Object属性
| 属性 | 类型 | 说明 |
| ------ | ------ | ------ |
| uin | string | 腾讯云主账号uin。不放开。 |
| name | string | 用户名。没看到数据？？ |
| envId | string | 环境Id。不放开。 |
| type | string | 类型。类型数值分别代表什么意思？？ |
| phone | string | 手机号。没看到数据？？。不放开。 |
| uuid | string | 用户uuid。不放开。 |
| source | number | 渠道，1:自建；2:企业微信导入；3: 外部用户 |
| openId | string | 微信openid。注意：此字段可能返回 null，表示取不到有效值。 |
| userId | number | 微搭用户id |
| userExtend | number | 用户扩展信息 |
| isLicensed | number | 用户是否授权License。不放开。 |
```

