npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@ithinkdt/cloud

v4.2.5

Published

iThinkDT Cloud API

Downloads

1,361

Readme

@ithinkdt/cloud

许可证

MIT

安装

npm i @ithinkdt/cloud

需要您自行安装依赖 vue@3@ithinkdt/app@ithinkdt/page

介绍

@ithinkdt/cloud 提供 iThinkDT 平台的云 API 集成能力,包括:

  • 认证登录(登录、登出、修改密码、刷新令牌)
  • 用户信息与模块权限获取
  • 前端应用配置获取
  • 国际化资源管理(增删改查)
  • 字典数据获取
  • 系统参数获取
  • 文件上传、下载与预览
  • 组织架构与用户查询
  • 消息通知(未读计数、分页查询、标记已读/删除)
  • 图标渲染
  • 租户切换
  • CRUD API 工厂

初始化

注册 HTTP 拦截器

建议在应用入口处注册 interceptor 以统一处理认证错误:

import { interceptor } from '@ithinkdt/cloud'

// 注册全局拦截器,自动处理 603/604/605/606 等认证错误
app.use(appCore, {
    // ...
    setup: (app) => {
        interceptor({
            language: () => app.language,
            onAuthError(type, error) {
                // type: 'NOT_VALID_TOKEN_TYPE' | 'REQUEST_TOKEN_ERROR' | 'ACCOUNT_FREEZE_ERROR' | 'LOGIN_EXPIRED'
                console.error(type, error)
            },
        })
    },
})

创建 Cloud API 客户端

import cloud from '@ithinkdt/cloud'

// 创建 cloud 服务,传入系统服务名
const api = cloud('/sys-server')

// 获取所有应用
const apps = await api.getAllApps()

// 获取应用名称
const name = await api.getAppName('admin', 'zh-CN')

// 获取前端配置
const config = await api.getFrontConfig('admin')

// 获取认证工具
const auth = api.authenticator('admin', 'zh-CN')
const userInfo = await auth.login('username', 'password')
const modules = await auth.getUserModules(token)

使用 Composable(推荐)

import { useCloud } from '@ithinkdt/cloud'
import { ref, computed } from 'vue'

const {
    renderLogo,           // 渲染 Logo
    getIconRender,        // 获取图标渲染函数
    notification,         // 消息通知
    getDictByTypes,       // 获取字典
    getSysParams,         // 获取系统参数
    uploadFile,           // 上传文件
    previewFileUrl,       // 文件预览 URL
    downloadFileUrl,      // 文件下载 URL
    getFileInfos,         // 获取文件信息
    removeFile,           // 删除文件
    changeTenant,         // 切换租户
    getModuleResources,   // 获取模块国际化资源
    saveResources,        // 保存国际化资源
    deleteResources,      // 删除国际化资源
    getResources,         // 获取国际化资源
} = useCloud({
    sysServerName: '/sys-server',
    mcServerName: '/mc-server',
    fileServerName: '/file-server',
})

// 获取字典
const dicts = await getDictByTypes(['sex', 'status'], 'zh-CN')

// 获取未读消息数
const unreadCount = await notification.getUnreadCount()

// 上传文件
const fileId = await uploadFile(file, {
    accessRight: 'INTERNAL',
    onProgress: (percent) => console.log(`${percent}%`),
})

// 获取系统参数
const params = await getSysParams('email')

CRUD API 工厂

createCrudApi 提供标准的增删改查接口封装,自动根据资源名生成 RESTful API 调用:

import { createCrudApi } from '@ithinkdt/cloud'

// 快速创建
const userApi = createCrudApi('user')

// 查询列表
const users = await userApi.list({ filter: { status: 1 } })

// 分页查询
const page = await userApi.page({ currentPage: 1, pageSize: 20 })

// 获取详情
const detail = await userApi.get('id-xxx')

// 新增
const newUser = await userApi.save({ name: '张三' })

// 修改
await userApi.put({ id: 'id-xxx', name: '李四' })

// 删除
await userApi.delete('id-xxx')

// 批量删除
await userApi.delete(['id-1', 'id-2'])

自定义 API 路径

const api = createCrudApi({
    resource: 'user',
    list: 'post|json: /api/user/search',
    page: 'post|json: /api/user/page',
    get: 'get: /api/user/detail',
    save: 'post|json: /api/user/create',
    delete: 'post|json: /api/user/remove',
    deletes: 'post|json: /api/user/removeBatch',
})

API 参考

cloud(sysServerName, options?)

创建 Cloud API 客户端。

| 参数 | 类型 | 说明 | |------|------|------| | sysServerName | string | 系统服务名,如 '/sys-server' | | options.request | HttpClient | 可选,自定义 HTTP 客户端 |

返回值方法:

| 方法 | 说明 | |------|------| | getAllApps() | 获取所有启用的应用列表,返回 Promise<CloudApp[]> | | getAppName(appCode, lang) | 获取应用名称(国际化),返回 Promise<string> | | getIconData(id) | 获取图标 SVG 数据,返回 Promise<string \| undefined> | | getI18nResources(appCode, lang) | 获取应用国际化资源,返回 Promise<Record<string, string>> | | getFrontConfig(appCode, cached?, yidaServerName?) | 获取前端应用配置,返回 Promise<CloudConfig> | | authenticator(appCode, lang) | 获取认证工具,返回 CloudAuthenticator(见下方) |

authenticator 方法

| 方法 | 参数 | 说明 | |------|------|------| | login(username, password) | username: string — 用户名password: string — 密码 | 登录,返回 Promise<UserInfo> | | logout(token) | token: string — 认证令牌 | 登出 | | changePwd(token, curPassword, newPassword) | token: string — 认证令牌curPassword: string — 当前密码newPassword: string — 新密码 | 修改密码 | | getUserInfo(token) | token: string — 认证令牌 | 获取用户信息,返回 Promise<UserInfo> | | refreshAuth(token) | token: string — 认证令牌 | 刷新令牌,返回 Promise<string> | | getUserModules(token) | token: string — 认证令牌 | 获取用户模块权限,返回 Promise<UserModule[]> |

getFrontConfig 参数

| 参数 | 类型 | 说明 | |------|------|------| | appCode | string | 应用编码 | | cached | boolean \| string | 可选,是否启用缓存(仅 session 会话中生效),默认 true | | yidaServerName | string | 可选,易搭服务名 |

useCloud(options?)

Vue Composable,提供云 API 集成能力。

| 参数 | 类型 | 说明 | |------|------|------| | options.sysServerName | string | 可选,系统服务名 | | options.mcServerName | string | 可选,消息中心服务名 | | options.fileServerName | string | 可选,文件服务名 | | options.request | HttpClient | 可选,自定义 HTTP 客户端 |

返回值方法:

| 方法 | 参数 | 说明 | |------|------|------| | renderLogo() | — | 渲染应用 Logo 组件,返回 VNodeChild | | getIconRender(id) | id: string — 图标 ID | 获取图标渲染函数,返回 (placeholder?) => VNodeChild | | getIconData(id) | id: string — 图标 ID | 获取图标数据,返回 Promise<string \| undefined> | | changeTenant(tenantId) | tenantId: string — 目标租户 ID | 切换租户,返回 Promise<string> | | getDictByTypes(types, lang?, appCode?) | types: string[] — 字典类型数组lang?: string — 语言,如 'zh-CN'appCode?: string — 应用编码 | 按类型获取字典数据,返回 Promise<Record<string, DictItem[]>> | | getSysParams(group) | group: string — 参数分组名 | 获取系统参数,返回 Promise<T> | | getModuleResources(lang, moduleCode, appCode?, contentCode?) | lang: string — 语言moduleCode: string — 模块编码appCode?: string — 应用编码contentCode?: string — 内容编码 | 获取模块国际化资源,返回 Promise<Record<string, string>> | | saveResources(moduleCode, contentCode, resources, appCode) | moduleCode: string — 模块编码contentCode: string — 内容编码resources: Record<string, string \| undefined> — 资源键值对appCode: string — 应用编码 | 保存国际化资源 | | deleteResources(moduleCode, contentCode, appCode) | moduleCode: string — 模块编码contentCode: string — 内容编码appCode: string — 应用编码 | 删除国际化资源 | | getResources(moduleCode, contentCode, appCode) | moduleCode: string — 模块编码contentCode: string — 内容编码appCode: string — 应用编码 | 获取国际化资源,返回 Promise<Record<string, string>> | | uploadFile(file, options?) | file: File — 文件对象options.fileName?: string — 自定义文件名options.filePath?: string — 文件路径options.accessRight?: 'INTERNAL' \| 'PRIVATE' \| 'PUBLIC' — 访问权限options.onProgress?: (percent: number) => void — 上传进度回调 | 上传文件,返回 Promise<string>(文件 ID) | | removeFile(fileId) | fileId: string — 文件 ID | 删除文件 | | getFileInfos(fileIds) | fileIds: string[] — 文件 ID 数组 | 批量获取文件信息,返回 Promise<FileInfo[]> | | previewFileUrl(fileId, credentials?) | fileId: string — 文件 IDcredentials?: boolean — 是否携带凭证 | 获取文件预览 URL,返回 string | | downloadFileUrl(fileId, credentials?) | fileId: string — 文件 IDcredentials?: boolean — 是否携带凭证 | 获取文件下载 URL,返回 string | | getUserGroups() | — | 获取用户组列表,返回 Promise<{code: string, name: string}[]> | | getUsersByGroup(code) | code: string — 用户组编码 | 按用户组获取用户,返回 Promise<{username: string, nickname: string}[]> | | getUsersByOrg(code) | code: string — 组织编码 | 按组织获取用户,返回 Promise<{username: string, nickname: string}[]> | | getUsersByUsername(usernames?) | usernames?: string[] — 用户名数组 | 按用户名获取用户,返回 Promise<{username: string, nickname: string}[]> | | getOrgsByCode(codes?) | codes?: string[] — 组织编码数组 | 按编码获取组织树,返回 Promise<OrgTreeNode[]> | | getServerTimestamp() | — | 获取服务器时间戳,返回 Promise<number> |

notification 消息通知

| 方法 | 参数 | 说明 | |------|------|------| | getUnreadCount() | — | 获取未读消息数,返回 Promise<number> | | getPage(type, page, size) | type: 'all' \| 'unread' — 消息类型page: number — 页码size: number — 每页条数 | 分页查询消息,返回 Promise<{records, total}> | | markRead(keys) | keys: string[] — 消息 key 数组 | 标记消息为已读 | | markDelete(keys) | keys: string[] — 消息 key 数组 | 标记消息为删除 |

createCrudApi(resource)

创建标准增删改查接口。

| 参数 | 类型 | 说明 | |------|------|------| | resource | string \| CrudApiOptions | 资源名称字符串,或自定义 API 配置对象 |

CrudApiOptions 配置:

| 属性 | 类型 | 说明 | |------|------|------| | resource | string | 可选,资源名称 | | list | ApiString | 可选,列表查询 API,如 'get: /api/user/list' | | page | ApiString | 可选,分页查询 API,如 'post\|json: /api/user/page' | | get | ApiString | 可选,详情查询 API | | save | ApiString | 可选,新增/修改 API | | post | ApiString | 可选,新增 API(同 save) | | put | ApiString | 可选,修改 API | | delete | ApiString | 可选,删除 API | | deletes | ApiString | 可选,批量删除 API |

返回值方法:

| 方法 | 参数 | 说明 | |------|------|------| | list(params?) | params.filter?: object — 过滤条件params.sortField?: string — 排序字段params: any — 其他查询参数 | 查询列表 | | page(params?) | params.filter?: object — 过滤条件params.currentPage?: number — 当前页码params.sortField?: string — 排序字段params: any — 其他查询参数 | 分页查询 | | get(id) | id: string — 记录 ID | 获取详情 | | save(params) | params: object — 新增数据(不含 id) | 新增记录,返回含 id 的结果 | | put(params) | params: object — 修改数据(含 id) | 修改记录 | | delete(idOrIds) | idOrIds: string \| string[] — 记录 ID 或 ID 数组 | 删除(单个或批量) |