# informat.app 应用信息相关函数

## 概述

使用`informat.app`对象执行和应用相关的全局操作。

## abort

终止当前脚本的运行

```javascript
informat.app.abort(message)
informat.app.abort(message, code)
```

**入参**

| 参数      | 类型     | 描述   |
|---------|--------|------|
| message | String | 提示信息 |
| code    | int    | 错误码  |

**返回值**

无

**示例**

```javascript
informat.app.abort('当前项目已立项')
informat.app.abort('当前项目已立项', 270001)
```

## appId

查询当前的应用ID

```javascript
informat.app.appId()
```

**返回值**

类型为`String`，返回当前的应用ID

**示例**

::: code-group

```javascript [调用]
const appId = informat.app.appId();
console.log(appId);
```

```text [返回值]
y2jtobhqycwxb
```

:::

## getAppIdByKey

通过应用标识符查询团队下的应用ID

```javascript
informat.app.getAppIdByKey(key)
```

**入参**

| 参数  | 类型     | 描述    |
|-----|--------|-------|
| key | String | 应用标识符 |

**返回值**

类型为`String`，返回应用ID

**示例**

::: code-group

```javascript [调用]
const appId = informat.app.getAppIdByKey('informat.example');
console.log(appId);
```

```text [返回值]
y2jtobhqycwxb
```

:::

## getModuleIdByKey

通过模块标识符查询模块ID

```javascript
informat.app.getModuleIdByKey(key)
```

**入参**

| 参数  | 类型     | 描述    |
|-----|--------|-------|
| key | String | 模块标识符 |

**返回值**

类型为`String`，返回模块ID

**示例**

::: code-group

```javascript [调用]
const moduleId = informat.app.getModuleIdByKey('dataModelBasics');
console.log(moduleId);
```

```text [返回值]
ww0wfsota14xm
```

:::

## getModuleKeyById

通过模块ID查询模块标识符

```javascript
informat.app.getModuleKeyById(id)
```

**入参**

| 参数 | 类型     | 描述   |
|----|--------|------|
| id | String | 模块ID |

**返回值**

类型为`String`，返回模块标识符

**示例**

::: code-group

```javascript [调用]
const moduleId = informat.app.getModuleKeyById('ww0wfsota14xm');
console.log(moduleId);
```

```text [返回值]
dataModelBasics
```

:::

## userId

查询当前操作的用户ID

```javascript
informat.app.userId()
```

**返回值**

类型为`String`，返回当前的用户ID

**示例**

::: code-group

```javascript [调用]
const userId = informat.app.userId();
console.log(userId);
```

```text [返回值]
zhangsan
```

:::

## appDefine

获取当前应用的配置信息

```javascript
informat.app.appDefine()
```

**返回值**

类型为[AppDefine](/guide/script/model.md#appdefine)，返回当前应用的配置信息

**示例**

::: code-group

```javascript [调用]
const appDefine = informat.app.appDefine();
console.log(appDefine);
```

```json [返回值]
{
  "apiList": [
  ],
  "automaticList": [
    {
      "directory": false,
      "expand": false,
      "id": "kg93tarx7z0ni",
      "isDirectory": false,
      "key": "kg93tarx7z0ni",
      "name": "Excel转换为Pdf",
      "type": "default"
    },
    {
      "directory": false,
      "expand": false,
      "id": "pk7azjbk73fm3",
      "isDirectory": false,
      "key": "pk7azjbk73fm3",
      "name": "发布应用事件",
      "type": "default"
    },
    {
      "directory": false,
      "expand": false,
      "id": "a1ns3a7wu1nw7",
      "isDirectory": false,
      "name": "发布应能用时间",
      "type": "default"
    }
  ],
  "color": "c1",
  "eventList": [
    {
      "id": "gzginycn5nk4",
      "key": "shijian",
      "name": "发布事件"
    }
  ],
  "id": "excel2pdf",
  "moduleList": [
    {
      "directory": false,
      "expand": false,
      "icon": "table",
      "id": "v10lxegyp7q9x",
      "isDirectory": false,
      "key": "tab",
      "name": "数据表",
      "type": "Table"
    }
  ],
  "name": "分区示例",
  "roleList": [
    {
      "directory": false,
      "expand": false,
      "id": "lzlq4xtzj7wa0",
      "isDirectory": false,
      "key": "admin",
      "name": "管理员"
    }
  ],
  "scheduleList": [
  ],
  "scriptList": [
  ],
  "versionList": [
  ]
}
```

:::

## moduleTree

获取模块树

```javascript
informat.app.moduleTree()
```

**返回值**

类型为Array<[ObjectRef](/guide/script/model.md#objectref)>，返回模块列表

**示例**

::: code-group

```javascript [调用]
const moduleTree = informat.app.moduleTree();
console.log(moduleTree);
```

```json [返回值]
[
  {
    "directory": false,
    "expand": false,
    "icon": "table",
    "id": "ww0wfsota14xm",
    "isDirectory": false,
    "key": "dataModelBasics",
    "name": "基础数据表模型",
    "type": "Table"
  },
  {
    "children": [
      {
        "children": [
          {
            "directory": false,
            "expand": false,
            "icon": "table",
            "id": "fq8npovpr6xwq",
            "isDirectory": false,
            "key": "fq8npovpr6xwq",
            "name": "数据表xx",
            "type": "Table"
          }
        ],
        "directory": true,
        "expand": false,
        "icon": "arrow-up-circle",
        "id": "bo6uz2zshv8u",
        "isDirectory": true,
        "name": "分组11",
        "type": "Group"
      }
    ],
    "directory": true,
    "expand": false,
    "icon": "corner-down-right",
    "id": "d6l87tqgh3s9",
    "isDirectory": true,
    "name": "分组1",
    "type": "Group"
  }
]
```

:::

## weworkAccessToken

获取企业微信AccessToken

```javascript
informat.app.weworkAccessToken()
```

**返回值**

类型 `String`，企业微信AccessToken

**示例**

::: code-group

```javascript [调用]
const accessToken = informat.app.weworkAccessToken();
console.log(accessToken);
```

```text [返回值]
Jnr6FjCpHbUJEZXdM0TzpaOMRCu_EnzsdOUALv42Y5enbCk6cW0jbr0VRgQKBMC21mJQpg_GaL8Phw4ge8a1Q1S7fW-yXUOIIAmX6XIeQOfNvOLPO1i2s6Ttnj523qgDwUknn_ARswFbbQnrfz2NbCG_cJIikg9VSXZn4Ba6HjtEGFINNLrs554Bv8SLpz6rMcn6AbDtcM7dxf_uqN3vaA
```

:::

## dingtalkAccessToken

获取钉钉AccessToken

```javascript
informat.app.dingtalkAccessToken()
```

**返回值**

类型 `String`，钉钉AccessToken

**示例**

::: code-group

```javascript [调用]
const accessToken = informat.app.dingtalkAccessToken();
console.log(accessToken);
```

```text [返回值]
05c3b2cea02d3916a892b73d00d36225
```

:::

## feishuAccessToken

获取飞书应用AccessToken

```javascript
informat.app.feishuAccessToken()
```

**返回值**

类型 `String`，飞书应用AccessToken

**示例**

::: code-group

```javascript [调用]
const accessToken = informat.app.feishuAccessToken();
console.log(accessToken);
```

```text [返回值]
a-g10459b02LHUFLQFU7BRRQDAEEFPP2ZV2S65PQK6
```

:::

## feishuTenantAccessToken

获取飞书租户AccessToken

```javascript
informat.app.feishuTenantAccessToken()
```

**返回值**

类型 `String`，飞书租户AccessToken

**示例**

::: code-group

```javascript [调用]
const accessToken = informat.app.feishuTenantAccessToken();
console.log(accessToken);
```

```text [返回值]
t-g10459b02LHUFLQFU7BRRQDAEEFPP2ZV2S65PQK6
```

:::

## appEnvProp

获取环境变量值

```javascript
informat.app.appEnvProp(id)
```

**入参**

| 参数 | 类型     | 描述     |
|----|--------|--------|
| id | String | 环境变量ID |

**返回值**

类型 `String`，环境变量值

::: code-group

```javascript [调用]
informat.app.appEnvProp('host');
```

```text [返回值]
http://dev.informat.cn
```

:::

## showModuleAlert

设置模块提示信息；

```javascript
informat.app.showModuleAlert(moduleAlert)
```

::: tip 提示
模块提示信息会显示在模块页面的顶部，用来展示一些描述性文字。例如在数据导入的时候显示当前的导入进度。
:::

**入参**

| 参数          | 类型                                                | 描述   |
|-------------|---------------------------------------------------|------|
| moduleAlert | [ModuleAlert](/guide/script/model.md#modulealert) | 提示信息 |

**示例**

```javascript
informat.app.showModuleAlert({
    moduleId: 'task',
    title: '输入正在导入中',
    description: '当前正在导入 40/100',
    type: 'info'
})
```

## hideModuleAlert

隐藏模块提示信息

```javascript
informat.app.hideModuleAlert(moduleId)
```

**入参**

| 参数       | 类型       | 描述    |
|----------|----------|-------|
| moduleId | `String` | 模块标识符 |

**示例**

```js
informat.app.hideModuleAlert('task')
```

## invokeAutomatic

调用自动化程序；

```javascript
informat.app.invokeAutomatic(automaticId, args)
```

::: tip 提示

- 如果自动化程序不存在则抛出异常
- 如果自动化程序没有返回值则为`null`
  :::

**入参**

| 参数          | 类型              | 描述        |
|-------------|-----------------|-----------|
| automaticId | `String`        | 自动化程序的标识符 |
| args        | `Array<Object>` | 参数列表      |

**返回值**

类型 `Object`，自动化程序的返回值

**示例**

::: code-group

```javascript [调用]
informat.app.invokeAutomatic('addAutomatic', [1, 2])
```

```text [返回值]
3
```

:::

## pushEvent

推送事件给客户端

```javascript
informat.app.pushEvent(event)
```

**入参**

| 参数    | 类型                                            | 描述   |
|-------|-----------------------------------------------|------|
| event | [PushEvent](/guide/script/model.md#pushevent) | 事件数据 |

**示例**

::: code-group

```javascript [刷新模块]
informat.app.pushEvent({
    eventId: 'ModuleRefresh',
    moduleRefreshModuleId: 'task'
});
```

```javascript [显示提示信息]
informat.app.pushEvent({
    eventId: 'Toast',
    toastMessage: '张三删除了记录test'
});
```

```javascript [刷新表单]
informat.app.pushEvent({
    eventId: 'RecordFormRefresh',
    recordFormRefreshTableId: 'task',
    recordFormRefreshRecordId: 'sf2lk7c7ctzyq'
});
```

:::

## publishAppEvent

发布应用事件

```javascript
informat.app.publishAppEvent(event)
```

::: tip

- 团队中的其他应用可以通过监听器接收到事件消息
  :::

**入参**

| 参数    | 类型 | 描述   |
|-------|----|------|
| event | [AppEvent](/guide/script/model.md#appevent)  | 应用事件 |

**示例**

```javascript
informat.app.publishAppEvent({
    id: 'publishFromSript',
    content: {
        user: '张三'
    }
});
```

## queryCustomRoleList

查询自定义角色列表

```javascript
informat.app.queryCustomRoleList(query)
```

**入参**

| 参数    | 类型                               | 描述   |
|-------|----------------------------------|------|
| query | [Query](/guide/script/model.md#query) | 查询条件 |

过滤器中可以使用的字段列表

| 参数   | 类型       | 描述 |
|------|----------|----|
| name | `String` | 名称 |

**示例**

查询名称包含`总经理`的自定义角色列表

::: code-group

```javascript [调用]
informat.app.queryCustomRoleList({
    pageIndex: 1,
    pageSize: 100,
    filter: {
        conditionList: [
            {
                fieldId: 'name',
                opt: 'contains',
                value: '总经理'
            }
        ]
    }
});
```
```json [返回值]
[
  {
    "createTime": 1709884168637,
    "id": "ceo",
    "name": "总经理",
    "permissionList": [
      "AppAccess",
      "AppMember",
      "...",
      "zu2whl8gk09j9_ExternalAccess",
      "printDesigner_DashboardAccess"
    ],
    "updateTime": 1717065850763
  }
]
```
:::

## queryCustomRoleListCount

查询自定义角色列表总数

```javascript
informat.app.queryCustomRoleListCount(filter)
```

**入参**

| 参数     | 类型                                      | 描述   |
|--------|-----------------------------------------|------|
| filter | [Filter](/guide/script/model.md#filter) | 查询条件 |

**示例**

查询名称包含`总经理`的自定义角色列表总数

::: code-group

```javascript [调用]
informat.app.queryCustomRoleListCount({
    conditionList: [
        {
            fieldId: 'name',
            opt: 'contains',
            value: '总经理'
        }
    ]
});
```
```text [返回值]
1
```
:::

## addCustomRole

新增自定义角色

```javascript
informat.app.addCustomRole(role)
```

| 参数   | 类型                                    | 描述    |
|------|---------------------------------------|-------|
| role | [CustomRole](/guide/script/model.md#customrole) | 自定义角色 |

**示例**

```javascript
informat.app.addCustomRole({
    id: 'supplier',
    name: '供应商',
    remark: '直接向零售商提供商品及相应服务',
    permissionList: ['AppAccess', 'user_TableAccess']
});
```

## updateCustomRole

更新自定义角色

```javascript
informat.app.updateCustomRole(role)
```

**入参**

| 参数   | 类型           | 描述    |
|------|--------------|-------|
| role | [CustomRole](/guide/script/model.md#customrole) | 自定义角色 |

**返回值**

类型 `Integer`
更新的记录数量

**示例**

::: code-group

```javascript [调用]
informat.app.updateCustomRole({
    id: 'supplier',
    name: '主供应商',
    remark: '直接向零售商提供商品及相应服务',
    permissionList: ['AppAccess', 'user_TableAccess', 'user_TableInsert']
});
```
```text [返回值]
1
```

:::

## deleteCustomRole

删除自定义角色

```javascript
informat.app.deleteCustomRole(id)
```

| 参数 | 类型       | 描述       |
|----|----------|----------|
| id | `String` | 自定义角色标识符 |

**返回值**

类型 `Integer`
删除的记录数量

**示例**

::: code-group

```javascript [调用]
informat.app.deleteCustomRole('supplier');
```
```text [返回值]
1
```
:::

## setAppBadge

设置应用角标

```javascript
informat.app.setAppBadge(content)
```

**入参**

| 参数      | 类型       | 描述     |
|---------|----------|--------|
| content | `String` | 应用角标内容 |

**示例**

```javascript
informat.app.setAppBadge('重要');
```

## favoriteModule

收藏模块

```javascript
informat.app.favoriteModule(moduleList)
```

| 参数         | 类型              | 描述      |
|------------|-----------------|---------|
| moduleList | `Array<String>` | 模块标识符列表 |

**返回值**

类型 `Array<String>`
收藏记录ID列表

**示例**
::: code-group

```javascript [调用]
informat.app.favoriteModule(['scriptTableA', 'scriptTableB']);
```
```json [返回值]
[
  "gh2lsh2sgnnms",
  "f52xscr7c77u0"
]
```
:::

## cancelFavoriteModule

取消收藏模块

```javascript
informat.app.cancelFavoriteModule(moduleList)
```

| 参数         | 类型              | 描述      |
|------------|-----------------|---------|
| moduleList | `Array<String>` | 模块标识符列表 |

**返回值**

类型 `Integer`
取消收藏影响的记录数量

**示例**

::: code-group

```javascript [调用]
informat.app.cancelFavoriteModule(['scriptTableA', 'scriptTableB']);
```
```text [返回值]
2
```

:::

## queryFavoriteModuleList

查询我的收藏模块列表(此应用下的模块)

```javascript
informat.app.queryFavoriteModuleList(query)
```

| 参数    | 类型      | 描述   |
|-------|---------|------|
| query | [Query](/guide/script/model.md#query) | 查询条件 |

过滤器中可以使用的字段列表

| 参数         | 类型       | 描述   |
|------------|----------|------|
| moduleName | `String` | 模块名称 |

**返回值**

类型Array<[ModuleFavorite](/guide/script/model.md#modulefavorite)>，我的收藏模块列表

**示例**

查询名称包含`任务`的收藏模块列表

::: code-group

```javascript [调用]
informat.app.queryFavoriteModuleList({
    pageIndex: 1,
    pageSize: 100,
    filter: {
        conditionList: [
            {
                fieldId: 'moduleName',
                opt: 'contains',
                value: '任务'
            }
        ]
    }
});
```
```json [返回值]
[
  {
    "accountId": "yvkc2kwpy3xzr",
    "applicationId": "i1mwqy35y88hl",
    "id": "n9m98qmomke3g",
    "moduleIcon": "noto-slightly-smiling-face",
    "moduleId": "vylzhve0zrehp",
    "moduleName": "欢迎",
    "moduleType": "Dashboard"
  }
]
```

:::

## queryFavoriteModuleListCount

查询我的收藏模块列表总数(此应用下的模块)

```javascript
informat.app.queryFavoriteModuleListCount(filter)
```

| 参数     | 类型                                      | 描述   |
|--------|-----------------------------------------|------|
| filter | [Filter](/guide/script/model.md#filter) | 查询条件 |

**返回值**

类型 `Integer`，我的收藏模块列表总数

**示例**

查询名称包含`任务`的收藏模块列表总数

::: code-group

```javascript [调用]
informat.app.queryFavoriteModuleListCount({
    conditionList: [
        {
            fieldId: 'moduleName',
            opt: 'contains',
            value: '任务'
        }
    ]
});
```

```text [返回值]
1
```

:::

## eval

运行脚本

```javascript
informat.app.eval(script)
```

| 参数     | 类型       | 描述     |
|--------|----------|--------|
| script | `String` | js脚本内容 |

**返回值**

类型 `Object`，脚本运行结果

**示例**


::: code-group

```javascript [调用]
informat.app.eval(`
        let date = new Date()
        console.log(date);`
);
```

```text [返回值]
Fri May 31 10:11:55 CST 2024
```

:::

## appInfo

App运行信息

```javascript
informat.app.appInfo()
```

**返回值**

类型[Application](/guide/script/model.md#app)，脚本运行结果

**示例**

::: code-group

```javascript [调用]
informat.app.appInfo();
```

```json [返回值]
{
  "appDefineBuild": 863,
  "appDefineEditable": true,
  "appDefineVersion": "17",
  "appDefineId": "com.mycompany",
  "color": "c7",
  "createAccountId": "zhangsan",
  "createTime": 1680006873433,
  "icon": "home",
  "id": "ftegr30w93jya",
  "enableAppJsonLog": false,
  "enableAppLog": false,
  "env": "dev",
  "name": "测试一下",
  "updateAccountId": "zhangsan",
  "updateTime": 1696919628896
}
```

:::

## runSchedule

运行定时任务

```javascript
informat.app.runSchedule(key)
```

::: tip 提示
运行成功会影响下一次定时任务的执行时间。假如某定时任务是每隔一个小时执行一次，上一次执行时间是19：30，那么下一次执行时间是20：30，假如用户在20：10调用此接口运行此定时任务，那么它下一次运行时间是21：10分，而不是20：30。
:::

| 参数  | 类型       | 描述      |
|-----|----------|---------|
| key | `String` | 定时任务标识符 |

**返回值**

无

**示例**

```javascript
informat.app.runSchedule('ao8ymduy4jt2p');
```

## getPerformanceStatistics

返回当前app的性能统计列表

```javascript
informat.app.getPerformanceStatistics()
```

**返回值**

类型Array<[ApplicationProcess](/guide/script/model.md#applicationprocess)>
当前app的性能统计列表

**示例**

::: code-group

```javascript [调用]
informat.app.getPerformanceStatistics();
```

```json [返回值]
[
  {
    "associatedId": "xxx_eval_lan5wqq9au2ls",
    "associatedKey": "xxx_eval_lan5wqq9au2ls",
    "associatedName": "xxx_eval_lan5wqq9au2ls",
    "id": "biy9wnye6i4bd",
    "serverId": "informat-biz2-prd",
    "startTime": 1717068263865,
    "status": "running",
    "type": "script"
  },
  {
    "associatedId": "xxxx_eval_s67wnu06xntlc",
    "associatedKey": "xxx_eval_s67wnu06xntlc",
    "associatedName": "xxx_eval_s67wnu06xntlc",
    "endTime": 1717068247296,
    "id": "oaqm8xgyz7m3z",
    "serverId": "informat-biz2-prd",
    "startTime": 1717068247294,
    "status": "success",
    "type": "script"
  }
]
```

:::

## queryAppChangeLogList

查询应用操作日志列表

```javascript
informat.app.queryAppChangeLogList(query)
```

**入参**

| 参数    | 类型      | 描述   |
|-------|---------|------|
| query | [Query](/guide/script/model.md#query) | 查询条件 |

过滤器中可以使用的字段列表

| 参数              | 类型       | 描述    |
|-----------------|----------|-------|
| type            | `String` | 类型    |
| createAccountId | `String` | 创建人ID |

**示例**

查询类型是`编辑成员`的应用操作日志列表

::: code-group

```javascript [调用]
informat.app.queryAppChangeLogList({
    pageIndex: 1,
    pageSize: 100,
    filter: {
        conditionList: [
            {
                fieldId: 'type',
                opt: 'eq',
                value: 'MemberUpdate'
            }
        ]
    }
});
```
```json [返回值]
[
  {
    "content": "{\"avatar\":\"bc57a52b30c648c6bdba32c41b2f5371.jpg\",\"id\":\"skydu\",\"name\":\"张三\",\"newRoleList\":[\"管理员\"],\"oldRoleList\":[\"管理员\",\"成员\"]}",
    "createAccountAvatar": "bc57a52b30c648c6bdba32c41b2f5371.jpg",
    "createAccountId": "zhangsan",
    "createAccountName": "张三",
    "createTime": 1719212372446,
    "id": "uvxmqtn5337cv",
    "type": "MemberUpdate"
  }
]
```

:::

## queryAppChangeLogListCount

查询应用操作日志列表总数

```javascript
informat.app.queryAppChangeLogListCount(filter)
```

**入参**

| 参数     | 类型       | 描述   |
|--------|----------|------|
| filter | [Filter](/guide/script/model.md#filter) | 查询条件 |

**示例**

查询名称包含`总经理`的自定义角色列表总数

::: code-group

```javascript [调用]
informat.app.queryAppChangeLogListCount({
    conditionList: [
        {
            fieldId: 'type',
            opt: 'eq',
            value: 'MemberUpdate'
        }
    ]
});
```

```text [返回值]
1
```

:::

## addAppChangeLog

创建应用变更日志

```javascript
informat.app.addAppChangeLog(content)
```

**入参**

| 参数      | 类型       | 描述   |
|---------|----------|------|
| content | `String` | 变更内容 |

**示例**

```javascript
informat.app.addAppChangeLog('创建记录');
```

## deleteAppChangeLog

删除应用变更日志

```javascript
informat.app.deleteAppChangeLog(id)
```

**入参**

| 参数 | 类型       | 描述     |
|----|----------|--------|
| id | `String` | 应用日志ID |

**示例**

```javascript
informat.app.deleteAppChangeLog('nf6k7cf5u80ca');
```

## addDesignerUserList

新增应用设计成员列表

```js
informat.app.addDesignerUserList(type, userIdList)
```

**入参**

| 参数         | 类型              | 描述       |
|------------|-----------------|----------|
| type       | `String`        | 应用设计权限类型 |
| userIdList | `Array<String>` | 账户ID数组   |

应用设计权限类型可选值：

| 参数      | 描述         |
|---------|------------|
| access  | 可以进入应用设计界面 |
| edit    | 可以进行应用设计   |
| publish | 可以发布应用     |

**示例**

```js
informat.app.addDesignerUserList('access', [informat.app.userId()])
informat.app.addDesignerUserList('edit', [informat.app.userId()])
informat.app.addDesignerUserList('publish', [informat.app.userId()])
```

:::tip 注意

- 应用设计修改成员和应用设计发布成员默认为空，且为空时默认所有成员拥有修改和发布权限。此时调用`addDesignerUserList`和`removeDesignerUserList`
  可能产生意想不到的结果。

- 如需管理成员的修改和发布权限，应配置好对应的修改和发布成员。
  
:::

## getDesignerUserList

查询应用设计成员列表

```js
informat.app.getDesignerUserList(type)
```

**入参**

| 参数   | 类型       | 描述       |
|------|----------|----------|
| type | `String` | 应用设计权限类型 |

应用设计权限类型可选值：

| 参数      | 描述         |
|---------|------------|
| access  | 可以进入应用设计界面 |
| edit    | 可以进行应用设计   |
| publish | 可以发布应用     |

**示例**

::: code-group

```javascript [调用]
informat.app.getDesignerUserList('access')
```

```json [返回值]
[
  "lwfwqr67xsvup",
  "uc4qsqmm64nep",
  "zhansan",
  "lisi"
]
```

:::

## removeDesignerUserList

删除应用设计成员列表

```js
informat.app.removeDesignerUserList(type, userIdList)
```

**入参**

| 参数         | 类型              | 描述       |
|------------|-----------------|----------|
| type       | `String`        | 应用设计权限类型 |
| userIdList | `Array<String>` | 账户ID数组   |

应用设计权限类型可选值：

| 参数      | 描述         |
|---------|------------|
| access  | 可以进入应用设计界面 |
| edit    | 可以进行应用设计   |
| publish | 可以发布应用     |

**示例**

```js
informat.app.removeDesignerUserList('access', [informat.app.userId()])
informat.app.removeDesignerUserList('edit', [informat.app.userId()])
informat.app.removeDesignerUserList('publish', [informat.app.userId()])
```

## userLoginType

查询当前操作的用户登录类型

```js
informat.app.userLoginType()
```

**返回值**

类型为`String`，返回当前操作的用户登录类型

::: code-group

```javascript [调用]
const userLoginType = informat.app.userLoginType();
console.log(userLoginType);
```

```text [返回值]
index
```

:::