UNPKG

@ithinkdt/cloud

Version:

iThinkDT Cloud API

360 lines (327 loc) 11.8 kB
import { AppModule } from '@ithinkdt/app' import { Awaitable, MaybeArray } from '@ithinkdt/common' import { HttpClient, HttpInterceptor, HttpRequestInit } from '@ithinkdt/common/request' import '../shims.js' /** HttpClient Interceptor */ export declare const interceptor: (options?: { language?: ('zh-CN' | 'en-US' | (string & {}) | undefined) | (() => 'zh-CN' | 'en-US' | (string & {}) | undefined) onAuthError?: ( type: 'NOT_VALID_TOKEN_TYPE' | 'REQUEST_TOKEN_ERROR' | 'ACCOUNT_FREEZE_ERROR' | 'LOGIN_EXPIRED', error: Error, ) => void }) => HttpInterceptor /** Options for {@link cloud} */ export interface CloudOptions { /** 自定义 HttpClient */ request?: HttpClient | undefined } /** * cloud 服务 * @param sysServerName - 系统服务名 */ export declare function cloud(sysServerName: string, options?: CloudOptions): { /** 获取所有应用 */ getAllApps: () => Promise<CloudApp[]> getAppName: (appCode: string, lang: string) => Promise<string> /** 获取前端配置 */ getFrontConfig: ( appCode: string, /** * 是否启用缓存(仅 session 会话中生效) * @defaultValue true */ cached?: boolean | string, yidaServerName?: string, ) => Promise<CloudConfig> /** 获取翻译资源 */ getI18nResources: (appCode: string, lang: string) => Promise<{ [k in string]?: string }> /** 图标 */ getIconData: (id: string) => Promise<string | undefined> /** 认证 */ authenticator: (appCode: string, lang: string) => CloudAuthenticator } export default cloud /** 应用信息 */ export interface CloudApp { id: string appCode: string appName: string url: string logo: string } /** 应用配置信息,可扩展 */ export interface CloudConfig { /** 是否开启多页签 */ multiTab: boolean /** 是否开启菜单手风琴模式 */ menuAccordion: boolean /** menu 位置 */ menuPlacement: 'sidebar' | 'header' | 'split' /** logo 位置 */ logoPlacement: 'sidebar' | 'header' /** 多租户 */ tenant: boolean /** 是否支持多语言切换 */ i18n: boolean /** 语言 */ defaultLanguage: 'zh-CN' | 'en-US' | (string & {}) /** 支持的语言列表 */ supportLanguages: DictItem[] /** 单点登录 */ sso: false | SSOConfig /** 渲染水印 */ watermark: | false | ((user: UserInfo) => { content: string fontFamily?: string fontSize?: number fontStretch?: string fontStyle?: 'normal' | 'italic' | 'oblique' | `oblique ${number}deg` fontVariant?: string fontWeight?: number height?: number lineHeight?: number rotate?: number textAlign?: 'left' | 'right' | 'center' width?: number zIndex?: number cross?: boolean xGap?: number yGap?: number selectable?: boolean debug?: boolean yOffset?: number xOffset?: number image?: string imageHeight?: number imageWidth?: number imageOpacity?: number fontColor?: string globalRotate?: number }) /** 页脚内容 */ footer: string | undefined /** 是否展示网页颜色模式切换按钮 */ appearance: boolean /** 主题配置,亮色和暗色 */ theme: { [mode in 'light' | 'dark']: Record< 'vars' | (string & {}), Record<string, string | boolean | number | undefined> > } /** 默认请求超时时间 */ timeout: number | undefined /** 消息通知刷新时间间隔 */ msgInterval: number | undefined /** 易搭入口 */ yidaEntry: string | undefined } export interface SSOConfig { /** 获取登录地址 */ getLoginUrl: (redirectUrl?: string) => Awaitable<string> /** 登出 */ getLogoutUrl: (redirectUrl?: string, username?: string, token?: string) => Awaitable<string> /** 从 url 解析 token 和 目标地址 */ parseUrl: (fromUrl: string) => { token: string, search?: string, hash?: string } | undefined /** 是否允许不通过 sso 登录 */ selfLogin: boolean } /** 认证工具 */ export interface CloudAuthenticator { /** 登录 */ login: (username: string, password: string) => Promise<string> /** 登出 */ logout: (token: string) => Promise<void> /** 获取用户信息 */ getUserInfo: (token: string) => Promise<UserInfo> /** 修改密码 */ changePwd: (token: string, currentPwd: string, newPwd: string) => Promise<void> /** 刷新用户权限 */ refreshAuth: (token: string) => Promise<string> /** 获取模块信息 */ getUserModules: (token: string) => Promise<UserModule[]> } /** 用户信息 */ export interface UserInfo { id: string /** 用户名 */ username: string /** 昵称 */ nickname: string /** 人名 */ personName: string /** 账号未失效 */ accountNonExpired: boolean /** 账号未被锁定 */ accountNonLocked: boolean /** 证书未失效 */ credentialsNonExpired: boolean /** 数据权限 */ dataScope: Record<string, 0 | 1 | 2> /** 启用状态 */ enabled: boolean /** 电子邮箱 */ email: string /** 手机 */ phone: string /** 租户 id */ tenantId: string /** 所属租户列表 */ tenantList: TenantItem[] | undefined } /** 租户信息 */ export interface TenantItem { id: string name: string shotName?: string | undefined } export interface FileInfo { id: string name: string size: number type: string url: string thumbnailUrl: string accessRight: 'INTERNAL' | 'PRIVATE' | 'PUBLIC' status: 'finished' } export declare function useCloud(options: { request?: HttpClient, sysServerName?: string, mcServerName?: string, fileServerName?: string }): { /** tenant */ changeTenant: (tenantId: string) => Promise<string> /** logo */ renderLogo: () => import('vue').VNodeChild /** 图标 */ getIconRender: (id: string) => ((placeholder?: import('vue').VNodeChild) => import('vue').VNodeChild) /** 图标 */ getIconData: (id: string) => Promise<string | undefined> /** 消息 */ notification: CloudNotification /** 字典 */ getDictByTypes: (types: string[], lang?: string, appCode?: string) => Promise<Record<string, DictItem[] | undefined>> /** 国际化 */ getModuleResources: (lang: string, moduleCode: string, appCode?: 'ALL' | string & {}, contentCode?: string) => Promise<Record<string, string>> saveResources: (moduleCode: string, contentCode: string, resources: Record<string, string | undefined>, appCode: string) => Promise<void> deleteResources: (moduleCode: string, contentCode: string, appCode: string) => Promise<void> getResources: (moduleCode: string, contentCode: string, appCode: string) => Promise<Record<string, string>> /** 系统参数 */ getSysParams: <T extends object = Record<string, unknown>>(group: string) => Promise<T> /** file */ removeFile: (fileId: string) => Promise<void> getFileInfos: (fileIds: string[]) => Promise<FileInfo[]> previewFileUrl: (fileId: string, credentials?: boolean) => string downloadFileUrl: (fileId: string, credentials?: boolean) => string uploadFile: (file: File, options?: { fileName?: string | undefined filePath?: string | undefined accessRight?: 'INTERNAL' | 'PRIVATE' | 'PUBLIC' | undefined onProgress?: ((percent: number) => void) | undefined }) => Promise<string> /** user org dept */ getUserGroups?: (() => Promise<{ code: string, name: string }[]>) | undefined getUsersByGroup?: ((code: string) => Promise<{ username: string, nickname: string }[]>) | undefined getUsersByOrg?: ((code: string) => Promise<{ username: string, nickname: string }[]>) | undefined getUsersByUsername?: ((usernames?: string[]) => Promise<{ username: string, nickname: string }[]>) | undefined getOrgsByCode?: (codes?: string[]) => Promise<OrgTreeNode[]> /** 获取服务器时间 */ getServerTimestamp: () => Promise<number> } interface OrgTreeNode { code: string name: string children?: OrgTreeNode[] | undefined } /** 消息工具 */ export interface CloudNotification { getUnreadCount: () => Promise<number> getPage: ( type: 'all' | 'unread', page: number, size: number, searchtext?: string, ) => Promise<{ records: { key: string title: string content: () => import('vue').VNodeChild date: number status: 'read' | 'unread' link?: string }[] total: number }> markRead: (keys: string[]) => Promise<void> markDelete: (keys: string[]) => Promise<void> } /** 字典项 */ export interface DictItem { value: string label: string remark?: string labelMap: Record<string, string | undefined> } /** 图标工具 */ export interface CloudIcon { getData: (id: string) => Promise<string | undefined> getRender: (id: string) => ((placeholder?: import('vue').VNodeChild) => import('vue').VNodeChild) } export type UserModule = AppModule export declare interface CloudResponse<T = unknown> { status: boolean code: number message: string data: T } /** 初始化 */ export declare function setup(options: { request: HttpClient }): void export type ApiOptionsString = `${'get' | 'delete' | 'post' | 'put'}` | `${'post' | 'put'}|${HttpRequestInit['requestType']}` export type ApiString = `${ApiOptionsString}: ${string}` /** * id 字段类型 */ type ID = string /** * 创建增删改查接口 * * @param resource - 资源名称 */ export declare function createCrudApi< Entity extends { id: ID }, ReturnEntity extends boolean = false, DetailEntity extends { id: ID } = Entity, FilterParams extends {} = { [K in keyof Entity]?: Entity[K] | undefined | null }, CreateParams extends { id?: undefined | null } = Omit<Entity, 'id' | 'createDate' | 'createUser' | 'updateDate' | 'updateUser' | 'deleted'> & { id?: undefined | null }, UpdateParams extends { id: ID } = Omit<Entity, 'createDate' | 'createUser' | 'updateDate' | 'updateUser' | 'deleted'>, >( resource: string | { resource?: string | undefined list?: ApiString | undefined page?: ApiString | undefined get?: ApiString | undefined post?: ApiString | undefined put?: ApiString | undefined save?: ApiString | undefined delete?: ApiString | undefined }, ): { list( this: void, params: { filter?: FilterParams | undefined, sortField?: string | undefined, sortOrder?: 'asc' | 'desc' | undefined }, ): Promise<Entity[]> page( this: void, params: { pageSize?: number | undefined currentPage?: number | undefined filter?: FilterParams | undefined sortField?: string | undefined sortOrder?: 'asc' | 'desc' | undefined }, ): Promise<{ total: number, records: Entity[] }> get(this: void, id: ID): Promise<DetailEntity | undefined> post(this: void, entity: CreateParams): Promise<ReturnEntity extends true ? Entity : undefined> put(this: void, entity: UpdateParams): Promise<ReturnEntity extends true ? Entity : undefined> save(this: void, entity: CreateParams | UpdateParams): Promise<ReturnEntity extends true ? Entity : undefined> delete(this: void, id: MaybeArray<ID>): Promise<void> }