ui-utils-kit
Version:
ui-utils-kit 是一个高效的偏业务前端工具函数库
244 lines (232 loc) • 10.5 kB
text/typescript
import { Options } from 'html2canvas-pro';
/**
* 输出选项接口
*/
interface OutputOptions {
/** 是否自动下载生成的图片 */
download?: boolean;
/** 下载图片的文件名(不含扩展名) */
downloadName?: string;
/** 是否返回 Blob 格式的图片数据 */
blob?: boolean;
}
/**
* 捕获结果接口
*/
interface CaptureResult {
/** 生成的 Canvas 元素 */
canvas: HTMLCanvasElement | null;
/** 图片的 Data URL 字符串(若启用了下载,则存在) */
dataUrl: string | null;
/** 图片的 Blob 对象(若启用了 blob 输出,则存在) */
blob: Blob | null;
}
/**
* =====================
* ==业务相关的工具类函数==
* =====================
*/
/**
* 将 DOM 元素转换为图片(canvas),并支持自动下载或返回 Blob 格式数据。
*
* @param element - 需要捕捉的 DOM 元素。
* @param canvasConfig - html2canvas 的配置项,例如 scale、backgroundColor 等。
* @param outputOptions - 输出选项。
* @returns 返回 Promise,包含 { canvas, dataUrl, blob } 对象。
*/
declare function captureElementAsImage(element: HTMLElement | null, canvasConfig?: Partial<Options>, outputOptions?: OutputOptions): Promise<CaptureResult>;
declare const business_captureElementAsImage: typeof captureElementAsImage;
declare namespace business {
export { business_captureElementAsImage as captureElementAsImage };
}
/**
* 自校正时钟管理器接口
*/
interface SelfCorrectingClock {
/** 获取最新的当前时间戳(毫秒) */
getCurrentTime: () => number;
/** 停止内部定时器,释放资源 */
stop: () => void;
}
/**
* 自校正倒计时管理器接口
*/
interface SelfCorrectingCountdown {
/**
* 获取最新的剩余时间(毫秒)
* @returns 剩余时间(毫秒)
*/
getRemainingTime: () => number;
/**
* 手动停止倒计时,释放资源
* @returns 无返回值
*/
stop: () => void;
}
/**
* =====================
* =======公共函数=======
* =====================
*/
/**
* 安全地解析 JSON 字符串。
*
* @param jsonString - 要解析的 JSON 字符串。
* @param defaultValue - 解析失败时返回的默认值。
* @returns 一个元组,第一个元素为错误对象(若无错误则为 null),第二个元素为解析结果或默认值。
*/
declare function safeJsonParse<T>(jsonString: string, defaultValue: T): [Error | null, T];
/**
* 数据脱敏函数
*
* @param value - 原始数据
* @param type - 脱敏类型
* @returns 脱敏后的数据
*/
declare function desensitize(value: string, type: "mobile" | "idcard" | "email" | "bankcard" | "name"): string;
/**
* 模拟互斥锁(Mutex)机制,用于控制异步操作对共享资源的访问
*/
declare class Mutex {
#private;
/**
* 获取锁。如果当前已锁定,则将请求加入队列,等待解锁后依次获取。
* @returns Promise<void> - 当获取到锁时,Promise 被 resolve。
*/
lock(): Promise<void>;
/**
* 释放锁。如果有等待队列,则唤醒队列中的下一个请求;否则将锁状态设为未锁定。
*/
unlock(): void;
/**
* 查询当前锁的状态
* @returns boolean - true 表示已锁定,false 表示未锁定
*/
isLocked(): boolean;
/**
* 获取当前等待队列的长度
* @returns number - 等待队列中的请求数量
*/
queueLength(): number;
}
/**
* 创建零漂移的自校正实时时钟
* @param interval 更新间隔(毫秒),默认 1000
*/
declare function createSelfCorrectingClock(interval?: number): SelfCorrectingClock;
/**
* 创建零漂移的自校正倒计时器
* @param targetTimestamp 目标时间戳(毫秒)
* @param interval 更新间隔(毫秒),默认值为 1000
* @returns 自校正倒计时管理器实例,包含获取剩余时间和停止定时器的方法
*/
declare function createSelfCorrectingCountdown(targetTimestamp: number, interval?: number): SelfCorrectingCountdown;
type common_Mutex = Mutex;
declare const common_Mutex: typeof Mutex;
declare const common_createSelfCorrectingClock: typeof createSelfCorrectingClock;
declare const common_createSelfCorrectingCountdown: typeof createSelfCorrectingCountdown;
declare const common_desensitize: typeof desensitize;
declare const common_safeJsonParse: typeof safeJsonParse;
declare namespace common {
export { common_Mutex as Mutex, common_createSelfCorrectingClock as createSelfCorrectingClock, common_createSelfCorrectingCountdown as createSelfCorrectingCountdown, common_desensitize as desensitize, common_safeJsonParse as safeJsonParse };
}
type ExtractValue<T> = T[keyof T];
declare const CheckStatus: {
readonly Unchecked: "0";
readonly HalfChecked: "1";
readonly Checked: "2";
};
type CheckStatusType = ExtractValue<typeof CheckStatus>;
interface TreeNode {
id: string | number;
pid: string | number | null;
check: CheckStatusType;
children?: TreeNode[];
[key: string]: any;
}
/**
* ========================
* ==树级数据操作的工具类函数==
* ========================
*/
/**
* 构建树形结构
* @param {Array} nodes - 树节点数组,每个节点包含 `id` 和 `pid` 等属性
* @returns {Array} - 树形结构数组
*/
declare function buildTree(nodes: TreeNode[]): TreeNode[];
/**
* 将树形结构转换为扁平化数组
* @param {TreeNode[]} data - 树形数据,包含 `id`, `name` 和可选的 `children` 属性
* @returns {Array} - 扁平化的数组,包含节点的 `id`, `name`, 和 `pid`
*/
declare function treeToArr(data: TreeNode[]): TreeNode[];
/**
* 更新树结构的节点选中状态。
* 该函数处理具有多个根节点的树结构,当选中或取消选中某些节点时,更新整个树的状态。
* 父节点的状态会根据其子节点的状态自动变为选中、半选或未选中。
*
* @param {TreeNode[]} tree - 树结构的数组,每个节点包含 id, name, pid, children, check 属性。
* @param {TreeNode[]} selectedNodes - 选中的节点数组,每个节点同样包含 id, name, pid, children, check 属性。
* @returns {TreeNode[]} 返回更新后的树结构数组。
*/
declare function updateTreeCheckStatus(tree: TreeNode[], selectedNodes: TreeNode[]): TreeNode[];
/**
* 更新扁平数组格式的树结构的节点选中状态。
* 该函数处理扁平数组形式的树结构,当选中或取消选中某些节点时,更新整个树的状态。
* 父节点的状态会根据其子节点的状态自动变为选中、半选或未选中。
*
* @param {TreeNode[]} tree - 扁平数组格式的树结构,每个节点包含 id, name, pid, check 属性,children 属性可以为空。
* @param {TreeNode[]} selectedNodes - 选中的节点数组,每个节点同样包含 id, name, pid, check 属性。
* @returns {TreeNode[]} 返回更新后的扁平数组格式的树结构。
*/
declare function updateTreeCheckStatusFlat(tree: TreeNode[], selectedNodes: TreeNode[]): TreeNode[];
/**
* 在树形结构中根据关键词查找相关节点,并返回包含匹配节点、父节点和子节点的结果。
*
* @param {Array} treeArr - 树形数据数组,每个元素应为一个节点对象,节点对象至少包含 `id`, `pid`, `name` 属性。
* @param {string} keywords - 用于查找的关键词,匹配节点的 `name` 属性。
* @param {boolean} mark - 是否在结果中标记 `isMatched` 属性。
* @returns {Array} - 返回匹配的节点数组,包含匹配的节点及其父节点和子节点,顺序为父节点在前、子节点在后。
*/
declare function searchTreeWithRelations(treeArr?: TreeNode[], keywords?: string, mark?: boolean): TreeNode[];
/**
* 从树形结构中移除指定的节点
* @param {Array} treeArr - 当前的扁平树形结构数组,每个节点对象包含 `id` 和 `pid` 属性
* @param {Array} selectedNodes - 要移除的节点数组,每个节点包含 `id` 和 `pid` 属性
* @returns {Array} - 过滤后的扁平树形结构数组,其中移除了指定的节点及其子节点(如果父节点被移除)
*/
declare function removeNodesFromTree(treeArr?: TreeNode[], selectedNodes?: TreeNode[]): TreeNode[];
/**
* 合并节点数组到已有的树形结构中
* @param {Array} treeArr - 现有的树形结构数组,每个元素包含一个 `id` 和 `pid` 属性
* @param {Array} nodes - 要合并的节点数组,每个节点包含一个 `id` 和 `pid` 属性
* @returns {Array} - 合并后的树形结构数组
*/
declare function mergeTrees(treeArr?: TreeNode[], nodes?: TreeNode[]): TreeNode[];
/**
* 从树形结构中选择与给定选中节点相关的所有父节点和子节点
* @param {Array} treeData - 树形结构数组,每个节点对象包含 `id` 和 `pid` 属性
* @param {Array} selectedNodes - 选中的节点数组,每个节点对象包含 `id` 和 `pid` 属性
* @returns {Array} - 包含选中节点、其父节点和子节点的数组
*/
declare function selectRelatedNodes(treeData: TreeNode[], selectedNodes?: TreeNode[]): TreeNode[];
declare const tree_buildTree: typeof buildTree;
declare const tree_mergeTrees: typeof mergeTrees;
declare const tree_removeNodesFromTree: typeof removeNodesFromTree;
declare const tree_searchTreeWithRelations: typeof searchTreeWithRelations;
declare const tree_selectRelatedNodes: typeof selectRelatedNodes;
declare const tree_treeToArr: typeof treeToArr;
declare const tree_updateTreeCheckStatus: typeof updateTreeCheckStatus;
declare const tree_updateTreeCheckStatusFlat: typeof updateTreeCheckStatusFlat;
declare namespace tree {
export { tree_buildTree as buildTree, tree_mergeTrees as mergeTrees, tree_removeNodesFromTree as removeNodesFromTree, tree_searchTreeWithRelations as searchTreeWithRelations, tree_selectRelatedNodes as selectRelatedNodes, tree_treeToArr as treeToArr, tree_updateTreeCheckStatus as updateTreeCheckStatus, tree_updateTreeCheckStatusFlat as updateTreeCheckStatusFlat };
}
declare const _default: {
tree: typeof tree;
business: typeof business;
common: typeof common;
};
// @ts-ignore
export = _default;
export { Mutex, buildTree, captureElementAsImage, createSelfCorrectingClock, createSelfCorrectingCountdown, desensitize, mergeTrees, removeNodesFromTree, safeJsonParse, searchTreeWithRelations, selectRelatedNodes, treeToArr, updateTreeCheckStatus, updateTreeCheckStatusFlat };