@saasui/utils 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../src/base.ts","../src/storage.ts","../src/auth.ts","../src/function.ts","../src/form.ts","../src/logger.ts","../src/math.ts","../src/text.ts","../src/index.ts"],"sourcesContent":["/**\r\n * 本文件导出常用工具函数集合,支持类型判断、深拷贝、字符串字节长度、样式转换、UUID生成、对象数组互转、文本宽高测量、下载、复制等功能。\r\n *\r\n * 你可以通过 import xxx from 'src/components/util/base' 方式直接引入所有工具函数。\r\n *\r\n * 具体函数说明请参考本文件源码注释。\r\n * /\r\n\r\n\r\n/**\r\n * 获取数据的类型字符串\r\n * @param data 任意类型的数据\r\n * @returns 返回数据的类型字符串,如 'Object'、'Array'、'String' 等\r\n */\r\nexport function dataType(data: any) {\r\n // 利用 Object.prototype.toString 获取类型字符串\r\n // 结果如 \"[object Array]\",通过正则去除中括号并分割取类型名\r\n return Object.prototype.toString.call(data).replace(/\\[|]/g, '').split(' ')[1];\r\n}\r\n\r\n/**\r\n * 计算字符串的字节长度(中文算2字节,英文算1字节)\r\n * @param str 需要计算的字符串\r\n * @returns 返回字符串的总字节数\r\n */\r\nexport const calcStringLenth = (str: string) => {\r\n if (!str || str === '') return str; // 空字符串直接返回\r\n let byteNum = 0;\r\n // 遍历字符串的每一个字符\r\n for (let i = 0; i < str.length; i++) {\r\n // charCode大于255的字符(如中文)算2字节,否则算1字节\r\n str.charCodeAt(i) > 255 ? (byteNum += 2) : (byteNum += 1);\r\n }\r\n return byteNum;\r\n};\r\n/**\r\n * 深拷贝函数,支持对象、数组、Date、RegExp等常见类型的递归深拷贝\r\n * @param target 需要深拷贝的数据\r\n * @returns 返回深拷贝后的新数据\r\n */\r\nexport function deepCopy(target: any): any {\r\n // 处理基本类型和函数,直接返回\r\n if (target === null || typeof target !== 'object') {\r\n return target;\r\n }\r\n\r\n // 处理Date对象\r\n if (target instanceof Date) {\r\n return new Date(target.getTime());\r\n }\r\n\r\n // 处理RegExp对象\r\n if (target instanceof RegExp) {\r\n return new RegExp(target);\r\n }\r\n\r\n // 处理Array\r\n if (Array.isArray(target)) {\r\n // 遍历数组递归拷贝每一项\r\n return target.map(item => deepCopy(item));\r\n }\r\n\r\n // 处理普通对象\r\n const result: { [key: string]: any } = {};\r\n // 只拷贝对象自身的属性\r\n for (const key in target) {\r\n if (Object.prototype.hasOwnProperty.call(target, key)) {\r\n // 递归拷贝每个属性\r\n result[key] = deepCopy(target[key]);\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * 计算指定字符串在浏览器中应用指定样式后的实际宽度和高度(单位:像素)。\r\n * @param str 需要计算的文本内容\r\n * @param styleObj 可选,应用于文本的样式对象,如 { fontSize: '16px', fontWeight: 'bold' }\r\n * @returns { width: number, height: number }\r\n */\r\nexport function getTextSize(str: string, styleObj: { [key: string]: string } = {}): { width: number; height: number } {\r\n // 创建一个隐藏的span元素\r\n const span = document.createElement('span');\r\n span.innerText = str;\r\n // 设置基础样式,防止换行和影响布局\r\n span.style.position = 'absolute';\r\n span.style.visibility = 'hidden';\r\n span.style.whiteSpace = 'pre'; // 保留空格和换行\r\n span.style.left = '-9999px';\r\n // 应用自定义样式\r\n for (const key in styleObj) {\r\n if (Object.prototype.hasOwnProperty.call(styleObj, key)) {\r\n // @ts-ignore\r\n span.style[key] = styleObj[key];\r\n }\r\n }\r\n document.body.appendChild(span);\r\n const width = span.offsetWidth;\r\n const height = span.offsetHeight;\r\n document.body.removeChild(span);\r\n return { width, height };\r\n}\r\n\r\n/**\r\n * 通过创建一个隐藏的a标签,实现文件下载\r\n * @param url 下载链接\r\n * @param filename 下载文件名\r\n */\r\nexport function downloadALink(url: string, filename: string) {\r\n const a = document.createElement('a');\r\n a.style.display = 'none';\r\n a.href = url; // 指定下载链接\r\n a.download = filename; // 指定下载文件名\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n // 如果是blob链接,释放对象URL\r\n if (url.startsWith('blob:')) {\r\n URL.revokeObjectURL(url);\r\n }\r\n}\r\n\r\n/**\r\n * 兼容新版和旧版浏览器的复制文本到剪贴板函数\r\n * @param value 需要复制的内容\r\n * @returns Promise<boolean> 复制成功返回true,失败返回false\r\n */\r\nexport function copyText(value: string): Promise<boolean> {\r\n // 优先使用新版API\r\n if (navigator && (navigator as any).clipboard && (navigator as any).clipboard.writeText) {\r\n return (navigator as any).clipboard\r\n .writeText(value)\r\n .then(() => true)\r\n .catch(() => {\r\n // 新版失败则尝试旧版\r\n return legacyCopy(value);\r\n });\r\n } else {\r\n // 旧版\r\n return Promise.resolve(legacyCopy(value));\r\n }\r\n\r\n // 旧版复制实现\r\n function legacyCopy(val: string): boolean {\r\n try {\r\n const input = document.createElement('input');\r\n input.value = val;\r\n input.style.position = 'absolute';\r\n input.style.left = '-9999px';\r\n document.body.appendChild(input);\r\n input.select();\r\n const result = document.execCommand('copy');\r\n document.body.removeChild(input);\r\n return result;\r\n } catch (e) {\r\n console.error('复制失败:', e);\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport const convertStyleToStr = (val: { [key: string]: string } = {}) => {\r\n const result: string[] = [];\r\n Object.entries(val).map(item => {\r\n result.push(`${item[0]}:${item[1]}`);\r\n });\r\n return result.join(';');\r\n};\r\n\r\n/**\r\n * 生成UUID,兼容新版(crypto.randomUUID)与旧版JS环境\r\n * @returns {string} UUID字符串\r\n */\r\nexport function generateUUID(): string {\r\n // 新版浏览器支持\r\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\r\n return crypto.randomUUID();\r\n }\r\n // 旧版实现\r\n const hexDigits = '0123456789abcdef';\r\n const s: string[] = [];\r\n for (let i = 0; i < 36; i++) {\r\n s[i] = hexDigits.substr(Math.floor(Math.random() * 16), 1);\r\n }\r\n s[14] = '4'; // 指定UUID版本为4\r\n // @ts-ignore\r\n s[19] = hexDigits.substr((parseInt(s[19], 16) & 0x3) | 0x8, 1); // 指定variant\r\n s[8] = s[13] = s[18] = s[23] = '-';\r\n return s.join('');\r\n}\r\n\r\n/**\r\n * 将对象转换为指定结构的数组,结构为 [{label: key, value: value}]\r\n * @param obj 需要转换的对象\r\n * @returns 转换后的数组\r\n */\r\nexport function objectToArray(obj: Record<string, any>, isNumber: boolean = false): Array<{ label: string; value: any }> {\r\n if (!obj || typeof obj !== 'object') return [];\r\n return Object.keys(obj).map(key => ({\r\n label: obj[key],\r\n value: isNumber ? Number(key) : key\r\n }));\r\n}\r\n\r\n/**\r\n * 将带层级结构的数组扁平化为一维数组,并通过指定的唯一键去重子项。\r\n * @param arr 需要扁平化的数组\r\n * @param key 用于去重的唯一属性字段名\r\n * @returns 扁平化且去重后的一维数组\r\n */\r\nexport function flattenArray(arr: any[], key: string = \"\") {\r\n const seen = new Set()\r\n const result: any = []\r\n\r\n /**\r\n * 递归遍历数组每一项,将未出现过的节点按照 key 去重后加入结果\r\n * @param items 当前需要遍历的项目数组\r\n */\r\n function traverse(items: any[]) {\r\n for (const item of items) {\r\n if (!seen.has(item[key])) {\r\n seen.add(item[key])\r\n result.push(item)\r\n\r\n // 递归遍历子节点\r\n if (item.children && item.children.length > 0) {\r\n traverse(item.children)\r\n }\r\n }\r\n }\r\n }\r\n\r\n traverse(arr)\r\n return result\r\n}\r\n/**\r\n * 将 [{label, value}] 结构的数组转换为对象\r\n * @param arr 需要转换的数组\r\n * @returns 转换后的对象\r\n */\r\nexport function arrayToObject(arr: Array<{ label: string; value: any }>): Record<string, any> {\r\n if (!Array.isArray(arr)) return {};\r\n const obj: Record<string, any> = {};\r\n arr.forEach(item => {\r\n if (item && typeof item.label !== 'undefined') {\r\n obj[item.label] = item.value;\r\n }\r\n });\r\n return obj;\r\n}\r\n\r\n/**\r\n * 默认导出:工具函数集合对象\r\n *\r\n * 支持智能跳转,IDE可自动提示所有方法。\r\n */\r\nconst utilBase = {\r\n dataType,\r\n calcStringLenth,\r\n deepCopy,\r\n getTextSize,\r\n downloadALink,\r\n copyText,\r\n convertStyleToStr,\r\n generateUUID,\r\n objectToArray,\r\n arrayToObject\r\n};\r\n\r\nexport default utilBase;\r\n","/*\r\n * @Description: 存储数据加密以及解密\r\n * @Author: 陕西顺心信息技术有限公司\r\n * @Date: 2023-04-20\r\n * @LastEditTime: 2023-04-24\r\n * @LastEditors: 张泽锋\r\n */\r\n// import CryptoJS from 'crypto-js';\r\nimport Cookies from 'js-cookie';\r\nimport { dataType } from './base';\r\n\r\nexport const getLocalStorage = (base: string, key: string, isCombination = true) => {\r\n try {\r\n const realKey = isCombination ? composeKey(key, base) : key;\r\n const data = localStorage.getItem(realKey);\r\n if (data === null || data === undefined) return null;\r\n return JSON.parse(data);\r\n } catch (e) {\r\n console.error('获取本地存储失败:', e);\r\n return null;\r\n }\r\n}\r\nexport const composeKey = (key: string, base: string | undefined) => {\r\n return base && base !== '' ? `${base}-${key}` : key;\r\n}\r\n\r\nexport const Storage = {\r\n base: '',\r\n\r\n setBase(base: string) {\r\n this.base = base || '';\r\n },\r\n composeKey(key: string) {\r\n return composeKey(key, this.base)\r\n },\r\n // composeKey(key: string) {\r\n // return this.base ? `${this.base}-${key}` : key;\r\n // },\r\n\r\n setLocalStorage(key: string, data: any) {\r\n try {\r\n const value = dataType(data) === 'String' ? (data as string) : JSON.stringify(data);\r\n localStorage.setItem(this.composeKey(key), value);\r\n } catch (e) {\r\n console.error('设置本地存储失败:', e);\r\n }\r\n },\r\n\r\n getLocalStorage(key: string, isCombination = true) {\r\n try {\r\n const realKey = isCombination ? this.composeKey(key) : key;\r\n const data = localStorage.getItem(realKey);\r\n if (data === null || data === undefined) return null;\r\n return JSON.parse(data);\r\n } catch (e) {\r\n console.error('获取本地存储失败:', e);\r\n return null;\r\n }\r\n },\r\n\r\n setSessionStorage(key: string, data: any) {\r\n try {\r\n const value = dataType(data) === 'String' ? (data as string) : JSON.stringify(data);\r\n sessionStorage.setItem(this.composeKey(key), value);\r\n } catch (e) {\r\n console.error('设置会话存储失败:', e);\r\n }\r\n },\r\n\r\n getSessionStorage(key: string, isCombination = true) {\r\n try {\r\n const realKey = isCombination ? this.composeKey(key) : key;\r\n const data = sessionStorage.getItem(realKey);\r\n if (data === null || data === undefined) return null;\r\n return JSON.parse(data);\r\n } catch (e) {\r\n console.error('获取会话存储失败:', e);\r\n return null;\r\n }\r\n },\r\n\r\n removeLocalStorage(key: string) {\r\n try {\r\n localStorage.removeItem(this.composeKey(key));\r\n } catch (e) {\r\n console.error('移除本地存储失败:', e);\r\n }\r\n },\r\n\r\n removeSessionStorage(key: string) {\r\n try {\r\n sessionStorage.removeItem(this.composeKey(key));\r\n } catch (e) {\r\n console.error('移除会话存储失败:', e);\r\n }\r\n },\r\n\r\n getEmployee() {\r\n try {\r\n const employee = localStorage.getItem('Employee');\r\n if (!employee || employee === 'undefined') return null;\r\n return JSON.parse(employee);\r\n } catch (e) {\r\n console.error('获取员工信息失败:', e);\r\n return null;\r\n }\r\n },\r\n\r\n getPlateForm() {\r\n try {\r\n const plateForm = localStorage.getItem('plateForm');\r\n if (!plateForm || plateForm === 'undefined') return null;\r\n return JSON.parse(plateForm);\r\n } catch (e) {\r\n console.error('获取平台信息失败:', e);\r\n return null;\r\n }\r\n },\r\n\r\n clearCookies() {\r\n const cookies = document.cookie ? document.cookie.split(';') : [];\r\n cookies.forEach(cookie => {\r\n const eqPos = cookie.indexOf('=');\r\n const name = eqPos > -1 ? cookie.substr(0, eqPos).trim() : cookie.trim();\r\n if (name) Cookies.remove(name);\r\n });\r\n }\r\n};\r\n\r\nexport default Storage;\r\n","import Storage from './storage';\r\n\r\nexport type FunctionAuth = {\r\n FunctionId: string;\r\n FunctionName: string;\r\n ViewType: string;\r\n SysId: string;\r\n MenuId: string;\r\n ServiceName: string;\r\n ApiName: string;\r\n SortNo: number;\r\n};\r\n\r\nexport function isAuth(name: string, authData: FunctionAuth[] = []) {\r\n if (authData.length === 0) {\r\n authData = Storage.getSessionStorage('function');\r\n }\r\n let isIndex = authData.findIndex(val => val.FunctionId === name);\r\n return isIndex === -1 ? false : true;\r\n}\r\n/**\r\n * 此函数根据会话存储中给定的函数 ID 检索 API 名称和服务名称。\r\n * @param name - 我们要为其检索 API 信息的函数 ID 的名称。\r\n * @returns 如果 `functionInfo` 为真,则函数返回格式为 `${functionInfo.ServiceName}/${functionInfo.ApiName}`\r\n * 的字符串。否则,它返回“null”。\r\n */\r\nexport function getApiByFunctionId(FunctionId: string) {\r\n let data: FunctionAuth[] = Storage.getSessionStorage('function');\r\n if (!data || !isAuth(FunctionId, data)) {\r\n console.log(\r\n `API:%c未查询到${FunctionId} %c 请检查角色权限`, // Console Message\r\n 'color: #4e6ef2',\r\n 'color: red' // CSS Style\r\n );\r\n return null;\r\n }\r\n let functionInfo = data.find(val => val.FunctionId === FunctionId);\r\n return !functionInfo ? null : `${functionInfo.ServiceName}/${functionInfo.ApiName}`;\r\n}\r\n/**\r\n * 该函数根据用户是否有权访问每个选项的相应功能来过滤一组选项。\r\n * @param options - 表示不同按钮选项的对象数组。每个对象都应该有一个名为“FunctionId”的属性,用于确定按钮是否需要身份验证。\r\n * @returns `checkBtnOptionsAuth` 函数返回一个数组,该数组仅包含来自 `options` 数组的元素,这些元素具有通过 `isAuth` 函数检查的\r\n * `FunctionId`。\r\n */\r\nexport function checkBtnOptionsAuth(options: FunctionAuth[]) {\r\n let arr: FunctionAuth[] = [];\r\n let data = Storage.getSessionStorage('function');\r\n options.forEach(e => {\r\n if (isAuth(e.FunctionId, data) || !e.FunctionId) {\r\n arr.push(e);\r\n }\r\n });\r\n return arr;\r\n}\r\n","/*\r\n * @Description: 文件介绍\r\n * @Author: 陕西顺心信息技术有限公司\r\n * @Date: 2023-10-23\r\n * @LastEditTime: 2025-06-05\r\n * @LastEditors: 张泽锋\r\n */\r\n\r\n// ==================== 类型判断函数 ====================\r\nexport function isUndefined(variable: any) {\r\n return variable === void 0;\r\n}\r\n\r\nexport function isNumber(n: any) {\r\n return n instanceof Number;\r\n}\r\n\r\nexport function isArray(arr: any[]) {\r\n return Array.isArray(arr);\r\n}\r\n\r\nexport function isString(str: any) {\r\n return typeof str === 'string';\r\n}\r\n\r\n// ==================== 数据转换函数 ====================\r\n\r\n// 将Map类型的数据转换为数组类型的数据\r\nexport const MapToArray = (map: Map<string | number, string>, isNumber: boolean = true) => {\r\n // 定义一个空数组\r\n let arr = [];\r\n\r\n // 遍历Map类型的数据\r\n for (const [key, value] of map) {\r\n // 将Map类型的数据转换为对象类型的数据,并添加到数组中\r\n arr.push({\r\n label: value,\r\n value: isNumber ? Number(key) : key\r\n });\r\n }\r\n // 返回转换后的数组\r\n return arr;\r\n};\r\n\r\n// ==================== 树形结构处理函数 ====================\r\n\r\ninterface TreeNode {\r\n [key: string]: any\r\n}\r\n\r\n/**\r\n * 该函数根据上级和权限 ID 将平面数据列表转换为树结构。\r\n * @param data - 数据参数是一个对象数组,表示需要转换为树结构的项目列表。\r\n * @param superiorId - superiorId 参数是一个字符串,表示数据对象中的键,用于标识树结构中的父节点或上级节点。\r\n * @param permissionId - `permissionId` 参数可能是 `data` 数组中的属性名称或键,表示树中每个节点的唯一标识符。该标识符用于将子节点链接到它们的父节点。\r\n * @returns 根据输入数据构建的树结构的根节点的子节点。\r\n */\r\nexport function listToTree(data: TreeNode[], superiorId: string, permissionId: string) {\r\n let arr = JSON.parse(JSON.stringify(data))\r\n const listChildren = (obj: TreeNode, filter: (item: TreeNode) => boolean) => {\r\n ;[arr, obj.children] = arr.reduce(\r\n (res: [TreeNode[], TreeNode[]], val: TreeNode) => {\r\n if (filter(val)) res[1].push(val)\r\n else res[0].push(val)\r\n return res\r\n },\r\n [[], []]\r\n )\r\n obj.children.forEach((val: TreeNode) => {\r\n if (arr.length) listChildren(val, (obj: TreeNode) => obj[superiorId] === val[permissionId])\r\n })\r\n }\r\n const tree: TreeNode = {}\r\n listChildren(\r\n tree,\r\n (val: TreeNode) => arr.findIndex((i: TreeNode) => i[permissionId] === val[superiorId]) === -1\r\n )\r\n return tree.children\r\n}\r\n","// 类型定义(避免循环依赖)\r\nexport interface FormItemProps {\r\n type?: string;\r\n prop: string;\r\n label?: string;\r\n formType?: string;\r\n queryParams?: Record<string, any>;\r\n method?: number;\r\n options?: Array<{ label: string; value: any; prop?: string }>;\r\n staticValue?: any[];\r\n fileIds?: string[];\r\n [key: string]: any;\r\n}\r\n\r\nexport interface FormValue {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface PaginationType {\r\n currentPage: number;\r\n pageSize: number;\r\n}\r\nimport { isArray } from \"./function\";\r\n\r\n\r\n/**\r\n * 该函数在 JavaScript 中设置分页和表单数据的搜索参数。\r\n * @param pagination - 一个对象,包含有关当前页面和分页页面大小的信息,以及排序字段和方向。\r\n * @param formJson - `formJson` 是一个包含搜索表单数据的 JSON 对象。它用于在返回值中构造 QueryModel 对象。\r\n * @param [SortField=UpdatedDate] - 搜索结果排序依据的字段。在这种情况下,默认值为“UpdatedDate”。\r\n * @returns 函数“setSearchParameter”返回一个具有两个属性的对象:“PageInfo”和“QueryModel”。 `PageInfo` 包含有关搜索结果的分页和排序的信息,而\r\n * `QueryModel` 包含对象数组形式的搜索条件。\r\n */\r\nexport interface SearchParameterType { pagination: PaginationType, formJson: formJsonType, sortField: string, sortDirection: string }\r\nexport interface formJsonType {\r\n formData: FormItemProps[],\r\n formValue: FormValue\r\n}\r\nexport interface SearchParameterModalItem {\r\n fileId: string,\r\n method: number,\r\n value: any\r\n}\r\nexport const setSearchParameter = ({ pagination, formJson, sortField = 'updatedTime', sortDirection = 'Desc' }: SearchParameterType) => {\r\n return {\r\n pageInfo: {\r\n currentPage: pagination.currentPage,\r\n pageSize: pagination.pageSize,\r\n sortField: sortField,\r\n sortDirection: sortDirection,\r\n isGetTotalCount: true\r\n },\r\n queryModel: getSearchForm(formJson)\r\n };\r\n};\r\n/**\r\n * 此函数接受表单数据和表单值,并返回具有非空值的已过滤表单项数组。\r\n * @param e - 参数“e”可能是一个对象,其中包含有关表单提交事件的信息,例如表单数据和表单值。函数 getSearchForm 将此事件对象作为参数并返回搜索表单项的数组。\r\n * @returns\r\n * 函数“getSearchForm”返回一个对象数组,这些对象是对“e.formData”数组中的每个项目调用“coverFormItem”函数的结果,“e.formValue”对象作为第二个参数。\r\n * `coverFormItem` 函数应返回具有 `Label` 和 `Value` 属性的对象数组。 `getSearchForm`\r\n */\r\n\r\nexport function getSearchForm(e: formJsonType) {\r\n let arr: SearchParameterModalItem[] = [];\r\n e.formData.map(item => {\r\n item.queryParams = item.queryParams || {};\r\n item.method = item.method || 0;\r\n arr = [...arr, ...coverFormItem(item, e.formValue)];\r\n });\r\n return arr.filter((val: SearchParameterModalItem) => Boolean(val.value));\r\n}\r\n/**\r\n * 该函数接受一个表单项及其值,并返回一个数组,其中包含字段名称、值和表单提交的方法,并对日期选择器和复选框进行特殊处理。\r\n * @param formItem - 表示表单字段的对象,包含 formType、prop 和 method 等属性。\r\n * @param formValue - 用户在表单字段中输入的值。\r\n * @returns 函数“coverFormItem”返回具有“FileId”、“Value”和“Method”属性的对象数组。返回的具体对象取决于 if 语句中满足的条件。如果 `formItem` 的\r\n * `formType` 为“Date-Picker”,则调用 `splicingDate` 函数并将其返回值包含在数组中。如果\r\n */\r\n\r\nexport function coverFormItem(formItem: FormItemProps, formValue: FormValue) {\r\n const formValueResult = getFormValue(formItem, formValue);\r\n let config: SearchParameterModalItem = {\r\n // ...formItem.queryParams,\r\n fileId: formItem.prop,\r\n value: formValueResult ?? '',\r\n method: formItem.method ?? 0\r\n };\r\n if (formItem.formType && ['DatePicker'].includes(formItem.formType)) {\r\n return splicingDate(formItem, formValue);\r\n }\r\n if (formItem.formType && ['CheckBox'].includes(formItem.formType)) {\r\n return splicingCheckBox(formItem, formValue);\r\n }\r\n if (config.value && formItem.staticValue) {\r\n config.value = [config.value, ...formItem.staticValue];\r\n }\r\n return [config];\r\n}\r\n/**\r\n * 该函数从给定对象中检索特定属性的值。\r\n * @param formItem - 表示表单项的对象,具有名为“prop”的属性,该属性指定我们要从 formValue 对象中检索的值的键\r\n * @param formValue - 包含表单字段值的对象。\r\n * @returns 由 `formValue` 对象中的 `formItem` 参数指定的属性值。\r\n */\r\n\r\nfunction getFormValue(formItem: FormItemProps, formValue: FormValue) {\r\n return formValue[formItem.prop];\r\n}\r\n/**\r\n * 该函数将一个日期范围拼接成两个单独的日期对象,并以特定格式返回它们。\r\n * @param formItem - 表示表单字段的对象,具有诸如“prop”(字段名称)和“type”(输入类型)等属性\r\n * @param formValue - 表单的值,它是一个包含键值对的对象,其中键是表单字段的名称,值是这些字段的用户输入。\r\n * @returns 函数 `splicingDate` 返回一个包含两个对象的数组,这些对象具有属性 `FileId`、`Method` 和 `Value`。 `FileId` 属性设置为\r\n * `formItem.prop` 的值,`Method` 属性为 3 或 4,`Value` 属性为格式化的日期字符串。该函数还检查给定的`的`formValue`\r\n */\r\n\r\nexport function splicingDate(formItem: FormItemProps, formValue: FormValue) {\r\n let value: any = formValue[formItem.prop];\r\n\r\n if (!value) return [];\r\n if (!Array.isArray(value)) {\r\n value = [value, value];\r\n }\r\n if (isArray(value) && value.length === 0) return [];\r\n let data = [];\r\n let fileIds = formItem.fileIds || [];\r\n data.push({\r\n ...formItem.queryParams,\r\n fileId: fileIds.length > 0 ? fileIds[0] : formItem.prop,\r\n method: 4,\r\n value: `${getDate(value[0])} 00:00:00`\r\n });\r\n data.push({\r\n ...formItem.queryParams,\r\n fileId: fileIds.length > 1 ? fileIds[1] : formItem.prop,\r\n method: 3,\r\n value: `${getDate(value[1])} 23:59:59`\r\n });\r\n return data;\r\n}\r\n\r\n/**\r\n * 函数 splicingCheckBox 根据复选框表单项中的选定选项创建一个对象数组。\r\n * @param formItem - 包含有关表单项的信息的对象,例如其属性名称 (prop)、选项和方法。\r\n * @param formValue - 它是一个包含表单字段值的对象。该函数使用特定字段 (formValue[formItem.prop]) 的值来确定选择了哪些复选框。\r\n * @returns 函数 `splicingCheckBox` 返回一个对象数组,该对象具有三个属性:`FileId`、`Method` 和 `Value`。这些对象是基于 `formItem` 参数和\r\n * `formValue` 参数的 `options` 数组创建的。对象被推入“数据”数组,然后返回。\r\n */\r\n\r\nexport function splicingCheckBox(formItem: FormItemProps, formValue: FormValue) {\r\n let data: SearchParameterModalItem[] = [];\r\n const fieldValue = formValue[formItem.prop];\r\n const selectedValues = Array.isArray(fieldValue) ? fieldValue : [];\r\n formItem.options?.map((e: any) => {\r\n if (selectedValues.includes(e.value)) {\r\n data.push({\r\n // ...formItem.queryParams,\r\n fileId: e.prop,\r\n method: formItem.method ?? 0,\r\n value: e.value\r\n });\r\n }\r\n });\r\n return data;\r\n}\r\nexport function getDate(date = new Date()) {\r\n date = new Date(date);\r\n var year = date.getFullYear();\r\n var month = formatTen(date.getMonth() + 1);\r\n var day = formatTen(date.getDate());\r\n return year + '-' + month + '-' + day;\r\n}\r\nexport function formatTen(num: number) {\r\n return num > 9 ? `${num}` : `0${num}`;\r\n}","/**\r\n * @Description: 日志工具,统一管理 console 输出\r\n * @Author: 系统\r\n * @Date: 2025-01-XX\r\n */\r\n\r\n// 检查是否在开发环境\r\nconst isDev = typeof (import.meta as any).env !== 'undefined' && (import.meta as any).env.MODE === 'development';\r\n\r\nexport const logger = {\r\n /**\r\n * 开发环境输出日志\r\n */\r\n log: (...args: any[]) => {\r\n if (isDev) {\r\n console.log(...args);\r\n }\r\n },\r\n\r\n /**\r\n * 错误日志(始终输出)\r\n */\r\n error: (...args: any[]) => {\r\n console.error(...args);\r\n },\r\n\r\n /**\r\n * 警告日志(开发环境输出)\r\n */\r\n warn: (...args: any[]) => {\r\n if (isDev) {\r\n console.warn(...args);\r\n }\r\n },\r\n\r\n /**\r\n * 信息日志(开发环境输出)\r\n */\r\n info: (...args: any[]) => {\r\n if (isDev) {\r\n console.info(...args);\r\n }\r\n },\r\n\r\n /**\r\n * 分组日志(开发环境输出)\r\n */\r\n group: (label: string, callback?: () => void) => {\r\n if (isDev) {\r\n console.group(label);\r\n callback?.();\r\n console.groupEnd();\r\n } else if (callback) {\r\n callback();\r\n }\r\n },\r\n\r\n /**\r\n * 分组折叠日志(开发环境输出)\r\n *\r\n * @example\r\n * logger.groupCollapsed('API 调用详情', () => {\r\n * logger.log('请求参数:', params);\r\n * logger.log('响应数据:', data);\r\n * });\r\n */\r\n groupCollapsed: (label: string, callback?: () => void) => {\r\n if (isDev) {\r\n console.groupCollapsed(label);\r\n callback?.();\r\n console.groupEnd();\r\n } else if (callback) {\r\n callback();\r\n }\r\n }\r\n};\r\n","/**\r\n * 精确浮点数加法\r\n * @param nums 参与运算的数字数组\r\n * @param precision 保留的小数位数,默认2位\r\n * @returns 返回加法运算后的结果\r\n */\r\nexport function floatAdd(nums: number[], precision: number = 2): number {\r\n // 如果不是数组或数组为空,直接返回0\r\n if (!Array.isArray(nums) || nums.length === 0) return 0;\r\n let maxDecimalLen = 0; // 记录所有数字中小数部分的最大长度\r\n nums.forEach(num => {\r\n const dec = num.toString().split('.')[1]; // 获取小数部分\r\n if (dec) maxDecimalLen = Math.max(maxDecimalLen, dec.length); // 更新最大小数长度\r\n });\r\n const factor = Math.pow(10, maxDecimalLen); // 计算放大因子\r\n // 先将所有数字放大为整数后相加,最后再缩小\r\n const sum = nums.reduce((acc, num) => acc + Math.round(num * factor), 0);\r\n return Number((sum / factor).toFixed(precision)); // 保留指定小数位数\r\n}\r\n\r\n/**\r\n * 精确浮点数减法\r\n * @param nums 参与运算的数字数组(第一个为被减数,后面为减数)\r\n * @param precision 保留的小数位数,默认2位\r\n * @returns 返回减法运算后的结果\r\n */\r\nexport function floatSubtract(nums: number[], precision: number = 2): number {\r\n // 如果不是数组或数组为空,直接返回0\r\n if (!Array.isArray(nums) || nums.length === 0) return 0;\r\n let maxDecimalLen = 0; // 记录所有数字中小数部分的最大长度\r\n nums.forEach(num => {\r\n const dec = num.toString().split('.')[1]; // 获取小数部分\r\n if (dec) maxDecimalLen = Math.max(maxDecimalLen, dec.length); // 更新最大小数长度\r\n });\r\n const factor = Math.pow(10, maxDecimalLen); // 计算放大因子\r\n let result = Math.round(nums[0] * factor); // 第一个数先放大\r\n // 依次减去后面的数\r\n for (let i = 1; i < nums.length; i++) {\r\n result -= Math.round(nums[i] * factor);\r\n }\r\n return Number((result / factor).toFixed(precision)); // 保留指定小数位数\r\n}\r\n\r\n/**\r\n * 精确浮点数乘法\r\n * @param nums 参与运算的数字数组\r\n * @param precision 保留的小数位数,默认2位\r\n * @returns 返回乘法运算后的结果\r\n */\r\nexport function floatMultiply(nums: number[], precision: number = 2): number {\r\n // 如果不是数组或数组为空,直接返回0\r\n if (!Array.isArray(nums) || nums.length === 0) return 0;\r\n let totalDecimalLen = 0; // 记录所有数字小数部分长度之和\r\n let intProduct = 1; // 用于存储整数相乘的结果\r\n nums.forEach(num => {\r\n const s = num.toString(); // 转为字符串\r\n const decLen = s.includes('.') ? s.split('.')[1].length : 0; // 获取小数长度\r\n totalDecimalLen += decLen; // 累加小数长度\r\n intProduct *= Number(s.replace('.', '')); // 去掉小数点后相乘\r\n });\r\n const result = intProduct / Math.pow(10, totalDecimalLen); // 缩小回原来的小数位\r\n return Number(result.toFixed(precision)); // 保留指定小数位数\r\n}\r\n\r\n/**\r\n * 精确浮点数除法\r\n * @param nums 参与运算的数字数组(第一个为被除数,后面为除数)\r\n * @param precision 保留的小数位数,默认2位\r\n * @returns 返回除法运算后的结果\r\n */\r\nexport function floatDivide(nums: number[], precision: number = 2): number {\r\n // 如果不是数组或数组为空,直接返回0\r\n if (!Array.isArray(nums) || nums.length === 0) return 0;\r\n let dividend = nums[0]; // 初始被除数\r\n // 依次除以后面的数\r\n for (let i = 1; i < nums.length; i++) {\r\n const a = dividend.toString(); // 被除数转字符串\r\n const b = nums[i].toString(); // 除数转字符串\r\n const aDec = a.includes('.') ? a.split('.')[1].length : 0; // 被除数小数长度\r\n const bDec = b.includes('.') ? b.split('.')[1].length : 0; // 除数小数长度\r\n const factorA = Math.pow(10, aDec); // 被除数放大因子\r\n const factorB = Math.pow(10, bDec); // 除数放大因子\r\n // 先将被除数和除数都转为整数再相除,最后乘以因子比值\r\n dividend = (Number(a.replace('.', '')) / Number(b.replace('.', ''))) * (factorB / factorA);\r\n }\r\n return Number(dividend.toFixed(precision)); // 保留指定小数位数\r\n}\r\n\r\nexport default {\r\n floatAdd,\r\n floatSubtract,\r\n floatMultiply,\r\n floatDivide\r\n};\r\n","/**\r\n * @description: 复制指定文本内容\r\n * @param {string} text\r\n * @author: 张泽锋\r\n * @Date: 2025-06-03\r\n */\r\nexport async function CopyText(text: string) {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n console.log('复制成功');\r\n return true;\r\n } catch (err) {\r\n console.error('复制失败:', err);\r\n // 兼容旧浏览器,可以回退到 execCommand 方案\r\n return FallbackCopyText(text);\r\n }\r\n}\r\n\r\n/**\r\n * @description: 复制指定文本内容 兼容新旧JS的复制函数\r\n * @param {string} text\r\n * @author: 张泽锋\r\n * @Date: 2025-06-03\r\n */\r\n// execCommand 已弃用,优先尝试 Clipboard API,若不支持则降级为手动选中提示用户自行复制\r\nfunction FallbackCopyText(text: string) {\r\n // 优先尝试 Clipboard API\r\n if (navigator && navigator.clipboard && navigator.clipboard.writeText) {\r\n return navigator.clipboard\r\n .writeText(text)\r\n .then(() => {\r\n console.log('使用 Clipboard API 复制成功');\r\n return true;\r\n })\r\n .catch(err => {\r\n console.error('Clipboard API 复制失败:', err);\r\n // 降级为手动选中\r\n return fallbackManualCopy(text);\r\n });\r\n } else {\r\n // 降级为手动选中\r\n return fallbackManualCopy(text);\r\n }\r\n}\r\n\r\n// 降级方案:手动选中并提示用户复制\r\nfunction fallbackManualCopy(text: string) {\r\n const textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n textarea.setAttribute('readonly', '');\r\n textarea.style.position = 'absolute';\r\n textarea.style.left = '-9999px';\r\n textarea.style.opacity = '0';\r\n document.body.appendChild(textarea);\r\n\r\n textarea.select();\r\n textarea.setSelectionRange(0, textarea.value.length);\r\n\r\n // 提示用户手动复制\r\n alert('您的浏览器不支持自动复制,请手动按 Ctrl+C 复制内容');\r\n document.body.removeChild(textarea);\r\n return false;\r\n}\r\n\r\n/**\r\n * @description: 计算文本的字符数量\r\n * @param {string} str\r\n * @param {number} strNum\r\n * @return {*}\r\n * @author: 张泽锋\r\n * @Date: 2025-06-06\r\n */\r\nexport const ExtractSpecifiedString = (str: string, strNum: number): string => {\r\n if (!str || str === '') return str;\r\n let byteNum = 0;\r\n let val = [];\r\n strNum = Number(strNum);\r\n //返回字符串的总字节数\r\n for (let i = 0; i < str.length; i++) {\r\n str.charCodeAt(i) > 255 ? (byteNum += 2) : (byteNum += 1);\r\n if (byteNum <= strNum) {\r\n val.push(str[i]);\r\n }\r\n }\r\n return val.join('');\r\n};\r\n/**\r\n * @description: 依据字符长度截取规定的字符串\r\n * @param {String} str\r\n * @return {*}\r\n * @author: 张泽锋\r\n * @Date: 2025-06-06\r\n */\r\nexport const CalcStrLen = (str: String): number => {\r\n if (!str || str === '') return 0;\r\n let byteNum = 0;\r\n //返回字符串的总字节数\r\n for (let i = 0; i < str.length; i++) {\r\n str.charCodeAt(i) > 255 ? (byteNum += 2) : (byteNum += 1);\r\n }\r\n return byteNum;\r\n};\r\n\r\n/**\r\n * @description: 计算字符串在浏览器中的像素宽度\r\n * @param {string} str 需要计算的字符串\r\n * @param {string} [font='14px Arial'] 可选,字体样式,默认14px Arial\r\n * @return {number} 返回字符串的像素宽度\r\n * @author: 张泽锋\r\n * @Date: 2025-06-06\r\n */\r\nexport const getTextWidth = (str: string, size: string = '14px Microsoft YaHei'): number => {\r\n if (!str) return 0;\r\n\r\n // 创建canvas上下文用于测量文本宽度\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return 0;\r\n ctx.font = `${size}`;\r\n const metrics = ctx.measureText(str);\r\n const actual = Math.abs(metrics.actualBoundingBoxLeft) + Math.abs(metrics.actualBoundingBoxRight);\r\n return Math.ceil(Math.max(metrics.width, actual)) + 1;\r\n};\r\n\r\n// 假设div宽度为50px,最多显示2行,超出2行显示省略号\r\n// 判断字符串是否超出2行(即是否需要省略号)\r\n\r\n/**\r\n * 判断字符串在指定宽度和字体下是否会超出两行显示\r\n * @param str 需要判断的字符串\r\n * @param font 字体,默认 '14px Microsoft YaHei'\r\n * @param maxWidth 单行最大宽度,默认 50px\r\n * @param maxLines 最大行数,默认 2\r\n * @returns 是否超出两行\r\n */\r\nexport function isTextOverTwoLines(\r\n str: string,\r\n font: string = '14px Microsoft YaHei',\r\n maxWidth: number = 50,\r\n maxLines: number = 1\r\n): boolean {\r\n if (!str) return false;\r\n\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return false;\r\n ctx.font = font;\r\n\r\n let lines = 1;\r\n let currentLine = '';\r\n for (let i = 0; i < str.length; i++) {\r\n const testLine = currentLine + str[i];\r\n const width = ctx.measureText(testLine).width;\r\n\r\n if (width + 23 > maxWidth) {\r\n lines++;\r\n currentLine = str[i];\r\n\r\n if (lines > maxLines) {\r\n return true; // 超出2行\r\n }\r\n } else {\r\n currentLine = testLine;\r\n }\r\n }\r\n return false; // 未超出2行\r\n}\r\n\r\n// 用法示例\r\n// const str = '这是一个很长的字符串,用于测试是否会超出两行显示。';\r\n","/**\r\n * @saas-ui/utils\r\n * SaaS UI 工具函数库\r\n *\r\n * 使用方式:\r\n * import { deepCopy, Storage, isAuth, logger } from '@saas-ui/utils'\r\n */\r\n\r\n// ==================== 类型导出 ====================\r\nexport type {\r\n FunctionAuth\r\n} from './auth';\r\n\r\nexport type {\r\n FormItemProps,\r\n FormValue,\r\n PaginationType,\r\n SearchParameterType,\r\n formJsonType,\r\n SearchParameterModalItem\r\n} from './form';\r\n\r\n// ==================== Auth 权限相关 ====================\r\nexport {\r\n isAuth,\r\n getApiByFunctionId,\r\n checkBtnOptionsAuth\r\n} from './auth';\r\n\r\n// ==================== Base 基础工具 ====================\r\nexport {\r\n dataType,\r\n calcStringLenth,\r\n deepCopy,\r\n getTextSize,\r\n downloadALink,\r\n copyText,\r\n convertStyleToStr,\r\n generateUUID,\r\n objectToArray,\r\n arrayToObject,\r\n flattenArray\r\n} from './base';\r\n\r\n// ==================== Form 表单工具 ====================\r\nexport {\r\n setSearchParameter,\r\n getSearchForm,\r\n coverFormItem,\r\n splicingDate,\r\n splicingCheckBox,\r\n getDate,\r\n formatTen\r\n} from './form';\r\n\r\n// ==================== Function 类型与转换 ====================\r\nexport {\r\n isUndefined,\r\n isNumber,\r\n isArray,\r\n isString,\r\n MapToArray,\r\n listToTree\r\n} from './function';\r\n\r\n// ==================== Logger 日志工具 ====================\r\nexport { logger } from './logger';\r\n\r\n// ==================== Math 数学计算 ====================\r\nexport {\r\n floatAdd,\r\n floatSubtract,\r\n floatMultiply,\r\n floatDivide\r\n} from './math';\r\n\r\n// ==================== Storage 存储工具 ====================\r\nexport {\r\n Storage,\r\n getLocalStorage,\r\n composeKey\r\n} from './storage';\r\n\r\n// ==================== Text 文本处理 ====================\r\nexport {\r\n CopyText,\r\n ExtractSpecifiedString,\r\n CalcStrLen,\r\n getTextWidth,\r\n isTextOverTwoLines\r\n} from './text';\r\n\r\n// ==================== 默认导出 ====================\r\nimport { isAuth, getApiByFunctionId, checkBtnOptionsAuth } from './auth';\r\nimport { deepCopy, dataType, generateUUID } from './base';\r\nimport { isUndefined, isNumber, isArray, isString, listToTree } from './function';\r\nimport { floatAdd, floatSubtract, floatMultiply, floatDivide } from './math';\r\nimport Storage from './storage';\r\nimport { logger } from './logger';\r\n\r\nconst utils = {\r\n // Auth\r\n isAuth,\r\n getApiByFunctionId,\r\n checkBtnOptionsAuth,\r\n // Base\r\n deepCopy,\r\n dataType,\r\n generateUUID,\r\n // Type check\r\n isUndefined,\r\n isNumber,\r\n isArray,\r\n isString,\r\n // Tree\r\n listToTree,\r\n // Math\r\n floatAdd,\r\n floatSubtract,\r\n floatMultiply,\r\n floatDivide,\r\n // Storage\r\n Storage,\r\n // Logger\r\n logger\r\n};\r\n\r\nexport default utils;\r\n"],"mappings":"+lBAcA,SAAgB,EAAS,EAAW,CAGlC,OAAO,OAAO,UAAU,SAAS,KAAK,EAAK,CAAC,QAAQ,QAAS,GAAG,CAAC,MAAM,IAAI,CAAC,GAQ9E,IAAa,EAAmB,GAAgB,CAC9C,GAAI,CAAC,GAAO,IAAQ,GAAI,OAAO,EAC/B,IAAI,EAAU,EAEd,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,IAE9B,EAAI,WAAW,EAAE,CAAG,IAAO,GAAW,EAAM,GAAW,EAEzD,OAAO,GAOT,SAAgB,EAAS,EAAkB,CAEzC,GAAuB,OAAO,GAAW,WAArC,EACF,OAAO,EAIT,GAAI,aAAkB,KACpB,OAAO,IAAI,KAAK,EAAO,SAAS,CAAC,CAInC,GAAI,aAAkB,OACpB,OAAO,IAAI,OAAO,EAAO,CAI3B,GAAI,MAAM,QAAQ,EAAO,CAEvB,OAAO,EAAO,IAAI,GAAQ,EAAS,EAAK,CAAC,CAI3C,IAAM,EAAiC,EAAE,CAEzC,IAAK,IAAM,KAAO,EACZ,OAAO,UAAU,eAAe,KAAK,EAAQ,EAAI,GAEnD,EAAO,GAAO,EAAS,EAAO,GAAK,EAGvC,OAAO,EAST,SAAgB,EAAY,EAAa,EAAsC,EAAE,CAAqC,CAEpH,IAAM,EAAO,SAAS,cAAc,OAAO,CAC3C,EAAK,UAAY,EAEjB,EAAK,MAAM,SAAW,WACtB,EAAK,MAAM,WAAa,SACxB,EAAK,MAAM,WAAa,MACxB,EAAK,MAAM,KAAO,UAElB,IAAK,IAAM,KAAO,EACZ,OAAO,UAAU,eAAe,KAAK,EAAU,EAAI,GAErD,EAAK,MAAM,GAAO,EAAS,IAG/B,SAAS,KAAK,YAAY,EAAK,CAC/B,IAAM,EAAQ,EAAK,YACb,EAAS,EAAK,aAEpB,OADA,SAAS,KAAK,YAAY,EAAK,CACxB,CAAE,QAAO,SAAQ,CAQ1B,SAAgB,EAAc,EAAa,EAAkB,CAC3D,IAAM,EAAI,SAAS,cAAc,IAAI,CACrC,EAAE,MAAM,QAAU,OAClB,EAAE,KAAO,EACT,EAAE,SAAW,EACb,SAAS,KAAK,YAAY,EAAE,CAC5B,EAAE,OAAO,CACT,SAAS,KAAK,YAAY,EAAE,CAExB,EAAI,WAAW,QAAQ,EACzB,IAAI,gBAAgB,EAAI,CAS5B,SAAgB,EAAS,EAAiC,CAExD,GAAI,WAAc,UAAkB,WAAc,UAAkB,UAAU,UAC5E,OAAQ,UAAkB,UACvB,UAAU,EAAM,CAChB,SAAW,GAAK,CAChB,UAEQ,EAAW,EAAM,CACxB,CAGJ,OAAO,QAAQ,QAAQ,EAAW,EAAM,CAAC,CAI3C,SAAS,EAAW,EAAsB,CACxC,GAAI,CACF,IAAM,EAAQ,SAAS,cAAc,QAAQ,CAC7C,EAAM,MAAQ,EACd,EAAM,MAAM,SAAW,WACvB,EAAM,MAAM,KAAO,UACnB,SAAS,KAAK,YAAY,EAAM,CAChC,EAAM,QAAQ,CACd,IAAM,EAAS,SAAS,YAAY,OAAO,CAE3C,OADA,SAAS,KAAK,YAAY,EAAM,CACzB,QACA,EAAG,CAEV,OADA,QAAQ,MAAM,QAAS,EAAE,CAClB,KAKb,IAAa,GAAqB,EAAiC,EAAE,GAAK,CACxE,IAAM,EAAmB,EAAE,CAI3B,OAHA,OAAO,QAAQ,EAAI,CAAC,IAAI,GAAQ,CAC9B,EAAO,KAAK,GAAG,EAAK,GAAG,GAAG,EAAK,KAAK,EACpC,CACK,EAAO,KAAK,IAAI,EAOzB,SAAgB,GAAuB,CAErC,GAAI,OAAO,OAAW,KAAe,OAAO,OAAO,YAAe,WAChE,OAAO,OAAO,YAAY,CAG5B,IAAM,EAAY,mBACZ,EAAc,EAAE,CACtB,IAAK,IAAI,EAAI,EAAG,EAAI,GAAI,IACtB,EAAE,GAAK,EAAU,OAAO,KAAK,MAAM,KAAK,QAAQ,CAAG,GAAG,CAAE,EAAE,CAM5D,MAJA,GAAE,IAAM,IAER,EAAE,IAAM,EAAU,OAAQ,SAAS,EAAE,IAAK,GAAG,CAAG,EAAO,EAAK,EAAE,CAC9D,EAAE,GAAK,EAAE,IAAM,EAAE,IAAM,EAAE,IAAM,IACxB,EAAE,KAAK,GAAG,CAQnB,SAAgB,EAAc,EAA0B,EAAoB,GAA6C,CAEvH,MADI,CAAC,GAAO,OAAO,GAAQ,SAAiB,EAAE,CACvC,OAAO,KAAK,EAAI,CAAC,IAAI,IAAQ,CAClC,MAAO,EAAI,GACX,MAAO,EAAW,OAAO,EAAI,CAAG,EACjC,EAAE,CASL,SAAgB,EAAa,EAAY,EAAc,GAAI,CACzD,IAAM,EAAO,IAAI,IACX,EAAc,EAAE,CAMtB,SAAS,EAAS,EAAc,CAC9B,IAAK,IAAM,KAAQ,EACZ,EAAK,IAAI,EAAK,GAAK,GACtB,EAAK,IAAI,EAAK,GAAK,CACnB,EAAO,KAAK,EAAK,CAGb,EAAK,UAAY,EAAK,SAAS,OAAS,GAC1C,EAAS,EAAK,SAAS,EAO/B,OADA,EAAS,EAAI,CACN,EAOT,SAAgB,EAAc,EAAgE,CAC5F,GAAI,CAAC,MAAM,QAAQ,EAAI,CAAE,MAAO,EAAE,CAClC,IAAM,EAA2B,EAAE,CAMnC,OALA,EAAI,QAAQ,GAAQ,CACd,GAAe,EAAK,QAAU,SAChC,EAAI,EAAK,OAAS,EAAK,QAEzB,CACK,EC7OT,IAAa,GAAmB,EAAc,EAAa,EAAgB,KAAS,CAClF,GAAI,CACF,IAAM,EAAU,EAAgB,EAAW,EAAK,EAAK,CAAG,EAClD,EAAO,aAAa,QAAQ,EAAQ,CAE1C,OADI,GAAS,KAAmC,KACzC,KAAK,MAAM,EAAK,OAChB,EAAG,CAEV,OADA,QAAQ,MAAM,YAAa,EAAE,CACtB,OAGE,GAAc,EAAa,IAC/B,GAAQ,IAAS,GAAK,GAAG,EAAK,GAAG,IAAQ,EAGrC,EAAU,CACrB,KAAM,GAEN,QAAQ,EAAc,CACpB,KAAK,KAAO,GAAQ,IAEtB,WAAW,EAAa,CACtB,OAAO,EAAW,EAAK,KAAK,KAAK,EAMnC,gBAAgB,EAAa,EAAW,CACtC,GAAI,CACF,IAAM,EAAQ,EAAS,EAAK,GAAK,SAAY,EAAkB,KAAK,UAAU,EAAK,CACnF,aAAa,QAAQ,KAAK,WAAW,EAAI,CAAE,EAAM,OAC1C,EAAG,CACV,QAAQ,MAAM,YAAa,EAAE,GAIjC,gBAAgB,EAAa,EAAgB,GAAM,CACjD,GAAI,CACF,IAAM,EAAU,EAAgB,KAAK,WAAW,EAAI,CAAG,EACjD,EAAO,aAAa,QAAQ,EAAQ,CAE1C,OADI,GAAS,KAAmC,KACzC,KAAK,MAAM,EAAK,OAChB,EAAG,CAEV,OADA,QAAQ,MAAM,YAAa,EAAE,CACtB,OAIX,kBAAkB,EAAa,EAAW,CACxC,GAAI,CACF,IAAM,EAAQ,EAAS,EAAK,GAAK,SAAY,EAAkB,KAAK,UAAU,EAAK,CACnF,eAAe,QAAQ,KAAK,WAAW,EAAI,CAAE,EAAM,OAC5C,EAAG,CACV,QAAQ,MAAM,YAAa,EAAE,GAIjC,kBAAkB,EAAa,EAAgB,GAAM,CACnD,GAAI,CACF,IAAM,EAAU,EAAgB,KAAK,WAAW,EAAI,CAAG,EACjD,EAAO,eAAe,QAAQ,EAAQ,CAE5C,OADI,GAAS,KAAmC,KACzC,KAAK,MAAM,EAAK,OAChB,EAAG,CAEV,OADA,QAAQ,MAAM,YAAa,EAAE,CACtB,OAIX,mBAAmB,EAAa,CAC9B,GAAI,CACF,aAAa,WAAW,KAAK,WAAW,EAAI,CAAC,OACtC,EAAG,CACV,QAAQ,MAAM,YAAa,EAAE,GAIjC,qBAAqB,EAAa,CAChC,GAAI,CACF,eAAe,WAAW,KAAK,WAAW,EAAI,CAAC,OACxC,EAAG,CACV,QAAQ,MAAM,YAAa,EAAE,GAIjC,aAAc,CACZ,GAAI,CACF,IAAM,EAAW,aAAa,QAAQ,WAAW,CAEjD,MADI,CAAC,GAAY,IAAa,YAAoB,KAC3C,KAAK,MAAM,EAAS,OACpB,EAAG,CAEV,OADA,QAAQ,MAAM,YAAa,EAAE,CACtB,OAIX,cAAe,CACb,GAAI,CACF,IAAM,EAAY,aAAa,QAAQ,YAAY,CAEnD,MADI,CAAC,GAAa,IAAc,YAAoB,KAC7C,KAAK,MAAM,EAAU,OACrB,EAAG,CAEV,OADA,QAAQ,MAAM,YAAa,EAAE,CACtB,OAIX,cAAe,EACG,SAAS,OAAS,SAAS,OAAO,MAAM,IAAI,CAAG,EAAE,EACzD,QAAQ,GAAU,CACxB,IAAM,EAAQ,EAAO,QAAQ,IAAI,CAC3B,EAAO,EAAQ,GAAK,EAAO,OAAO,EAAG,EAAM,CAAC,MAAM,CAAG,EAAO,MAAM,CACpE,GAAM,EAAA,QAAQ,OAAO,EAAK,EAC9B,EAEL,CClHD,SAAgB,EAAO,EAAc,EAA2B,EAAE,CAAE,CAKlE,OAJI,EAAS,SAAW,IACtB,EAAW,EAAQ,kBAAkB,WAAW,EAEpC,EAAS,UAAU,GAAO,EAAI,aAAe,EAAK,GAC7C,GAQrB,SAAgB,EAAmB,EAAoB,CACrD,IAAI,EAAuB,EAAQ,kBAAkB,WAAW,CAChE,GAAI,CAAC,GAAQ,CAAC,EAAO,EAAY,EAAK,CAMpC,OALA,QAAQ,IACN,aAAa,EAAW,aACxB,iBACA,aACD,CACM,KAET,IAAI,EAAe,EAAK,KAAK,GAAO,EAAI,aAAe,EAAW,CAClE,OAAQ,EAAsB,GAAG,EAAa,YAAY,GAAG,EAAa,UAAnD,KAQzB,SAAgB,EAAoB,EAAyB,CAC3D,IAAI,EAAsB,EAAE,CACxB,EAAO,EAAQ,kBAAkB,WAAW,CAMhD,OALA,EAAQ,QAAQ,GAAK,EACf,EAAO,EAAE,WAAY,EAAK,EAAI,CAAC,EAAE,aACnC,EAAI,KAAK,EAAE,EAEb,CACK,EC5CT,SAAgB,EAAY,EAAe,CACzC,OAAO,IAAa,IAAK,GAG3B,SAAgB,EAAS,EAAQ,CAC/B,OAAO,aAAa,OAGtB,SAAgB,EAAQ,EAAY,CAClC,OAAO,MAAM,QAAQ,EAAI,CAG3B,SAAgB,EAAS,EAAU,CACjC,OAAO,OAAO,GAAQ,SAMxB,IAAa,GAAc,EAAmC,EAAoB,KAAS,CAEzF,IAAI,EAAM,EAAE,CAGZ,IAAK,GAAM,CAAC,EAAK,KAAU,EAEzB,EAAI,KAAK,CACP,MAAO,EACP,MAAO,EAAW,OAAO,EAAI,CAAG,EACjC,CAAC,CAGJ,OAAO,GAgBT,SAAgB,EAAW,EAAkB,EAAoB,EAAsB,CACrF,IAAI,EAAM,KAAK,MAAM,KAAK,UAAU,EAAK,CAAC,CACpC,GAAgB,EAAe,IAAwC,CAC1E,CAAC,EAAK,EAAI,UAAY,EAAI,QACxB,EAA+B,KAC1B,EAAO,EAAI,CAAE,EAAI,GAAG,KAAK,EAAI,CAC5B,EAAI,GAAG,KAAK,EAAI,CACd,GAET,CAAC,EAAE,CAAE,EAAE,CAAC,CACT,CACD,EAAI,SAAS,QAAS,GAAkB,CAClC,EAAI,QAAQ,EAAa,EAAM,GAAkB,EAAI,KAAgB,EAAI,GAAc,EAC3F,EAEE,EAAiB,EAAE,CAKzB,OAJA,EACE,EACC,GAAkB,EAAI,UAAW,GAAgB,EAAE,KAAkB,EAAI,GAAY,GAAK,GAC5F,CACM,EAAK,SClCd,IAAa,GAAsB,CAAE,aAAY,WAAU,YAAY,cAAe,gBAAgB,WAC3F,CACH,SAAU,CACN,YAAa,EAAW,YACxB,SAAU,EAAW,SACV,YACI,gBACf,gBAAiB,GACpB,CACD,WAAY,EAAc,EAAS,CACtC,EAUL,SAAgB,EAAc,EAAiB,CAC3C,IAAI,EAAkC,EAAE,CAMxC,OALA,EAAE,SAAS,IAAI,GAAQ,CACnB,EAAK,YAAc,EAAK,aAAe,EAAE,CACzC,EAAK,OAAS,EAAK,QAAU,EAC7B,EAAM,CAAC,GAAG,EAAK,GAAG,EAAc,EAAM,EAAE,UAAU,CAAC,EACrD,CACK,EAAI,OAAQ,GAAkC,EAAQ,EAAI,MAAO,CAU5E,SAAgB,EAAc,EAAyB,EAAsB,CACzE,IAAM,EAAkB,EAAa,EAAU,EAAU,CACrD,EAAmC,CAEnC,OAAQ,EAAS,KACjB,MAAO,GAAmB,GAC1B,OAAQ,EAAS,QAAU,EAC9B,CAUD,OATI,EAAS,UAAY,CAAC,aAAa,CAAC,SAAS,EAAS,SAAS,CACxD,EAAa,EAAU,EAAU,CAExC,EAAS,UAAY,CAAC,WAAW,CAAC,SAAS,EAAS,SAAS,CACtD,EAAiB,EAAU,EAAU,EAE5C,EAAO,OAAS,EAAS,cACzB,EAAO,MAAQ,CAAC,EAAO,MAAO,GAAG,EAAS,YAAY,EAEnD,CAAC,EAAO,EASnB,SAAS,EAAa,EAAyB,EAAsB,CACjE,OAAO,EAAU,EAAS,MAU9B,SAAgB,EAAa,EAAyB,EAAsB,CACxE,IAAI,EAAa,EAAU,EAAS,MAMpC,GAJI,CAAC,IACA,MAAM,QAAQ,EAAM,GACrB,EAAQ,CAAC,EAAO,EAAM,EAEtB,EAAQ,EAAM,EAAI,EAAM,SAAW,GAAG,MAAO,EAAE,CACnD,IAAI,EAAO,EAAE,CACT,EAAU,EAAS,SAAW,EAAE,CAapC,OAZA,EAAK,KAAK,CACN,GAAG,EAAS,YACZ,OAAQ,EAAQ,OAAS,EAAI,EAAQ,GAAK,EAAS,KACnD,OAAQ,EACR,MAAO,GAAG,EAAQ,EAAM,GAAG,CAAC,WAC/B,CAAC,CACF,EAAK,KAAK,CACN,GAAG,EAAS,YACZ,OAAQ,EAAQ,OAAS,EAAI,EAAQ,GAAK,EAAS,KACnD,OAAQ,EACR,MAAO,GAAG,EAAQ,EAAM,GAAG,CAAC,WAC/B,CAAC,CACK,EAWX,SAAgB,EAAiB,EAAyB,EAAsB,CAC5E,IAAI,EAAmC,EAAE,CACnC,EAAa,EAAU,EAAS,MAChC,EAAiB,MAAM,QAAQ,EAAW,CAAG,EAAa,EAAE,CAWlE,OAVA,EAAS,SAAS,IAAK,GAAW,CAC1B,EAAe,SAAS,EAAE,MAAM,EAChC,EAAK,KAAK,CAEN,OAAQ,EAAE,KACV,OAAQ,EAAS,QAAU,EAC3B,MAAO,EAAE,MACZ,CAAC,EAER,CACK,EAEX,SAAgB,EAAQ,EAAO,IAAI,KAAQ,CACvC,EAAO,IAAI,KAAK,EAAK,CACrB,IAAI,EAAO,EAAK,aAAa,CACzB,EAAQ,EAAU,EAAK,UAAU,CAAG,EAAE,CACtC,EAAM,EAAU,EAAK,SAAS,CAAC,CACnC,OAAO,EAAO,IAAM,EAAQ,IAAM,EAEtC,SAAgB,EAAU,EAAa,CACnC,OAAO,EAAM,EAAI,GAAG,IAAQ,IAAI,ICrKpC,IAAa,EAAS,CAIpB,KAAM,GAAG,IAAgB,GASzB,OAAQ,GAAG,IAAgB,CACzB,QAAQ,MAAM,GAAG,EAAK,EAMxB,MAAO,GAAG,IAAgB,GAS1B,MAAO,GAAG,IAAgB,GAS1B,OAAQ,EAAe,IAA0B,CAKpC,GACT,GAAU,EAad,gBAAiB,EAAe,IAA0B,CAK7C,GACT,GAAU,EAGf,CCrED,SAAgB,EAAS,EAAgB,EAAoB,EAAW,CAEtE,GAAI,CAAC,MAAM,QAAQ,EAAK,EAAI,EAAK,SAAW,EAAG,MAAO,GACtD,IAAI,EAAgB,EACpB,EAAK,QAAQ,GAAO,CAClB,IAAM,EAAM,EAAI,UAAU,CAAC,MAAM,IAAI,CAAC,GAClC,IAAK,EAAgB,KAAK,IAAI,EAAe,EAAI,OAAO,GAC5D,CACF,IAAM,EAAkB,IAAI,EAEtB,EAAM,EAAK,QAAQ,EAAK,IAAQ,EAAM,KAAK,MAAM,EAAM,EAAO,CAAE,EAAE,CACxE,OAAO,QAAQ,EAAM,GAAQ,QAAQ,EAAU,CAAC,CASlD,SAAgB,EAAc,EAAgB,EAAoB,EAAW,CAE3E,GAAI,CAAC,MAAM,QAAQ,EAAK,EAAI,EAAK,SAAW,EAAG,MAAO,GACtD,IAAI,EAAgB,EACpB,EAAK,QAAQ,GAAO,CAClB,IAAM,EAAM,EAAI,UAAU,CAAC,MAAM,IAAI,CAAC,GAClC,IAAK,EAAgB,KAAK,IAAI,EAAe,EAAI,OAAO,GAC5D,CACF,IAAM,EAAkB,IAAI,EACxB,EAAS,KAAK,MAAM,EAAK,GAAK,EAAO,CAEzC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,GAAU,KAAK,MAAM,EAAK,GAAK,EAAO,CAExC,OAAO,QAAQ,EAAS,GAAQ,QAAQ,EAAU,CAAC,CASrD,SAAgB,EAAc,EAAgB,EAAoB,EAAW,CAE3E,GAAI,CAAC,MAAM,QAAQ,EAAK,EAAI,EAAK,SAAW,EAAG,MAAO,GACtD,IAAI,EAAkB,EAClB,EAAa,EACjB,EAAK,QAAQ,GAAO,CAClB,IAAM,EAAI,EAAI,UAAU,CAClB,EAAS,EAAE,SAAS,IAAI,CAAG,EAAE,MAAM,IAAI,CAAC,GAAG,OAAS,EAC1D,GAAmB,EACnB,GAAc,OAAO,EAAE,QAAQ,IAAK,GAAG,CAAC,EACxC,CACF,IAAM,EAAS,EAAsB,IAAI,EACzC,OAAO,OAAO,EAAO,QAAQ,EAAU,CAAC,CAS1C,SAAgB,EAAY,EAAgB,EAAoB,EAAW,CAEzE,GAAI,CAAC,MAAM,QAAQ,EAAK,EAAI,EAAK,SAAW,EAAG,MAAO,GACtD,IAAI,EAAW,EAAK,GAEpB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,IAAM,EAAI,EAAS,UAAU,CACvB,EAAI,EAAK,GAAG,UAAU,CACtB,EAAO,EAAE,SAAS,IAAI,CAAG,EAAE,MAAM,IAAI,CAAC,GAAG,OAAS,EAClD,EAAO,EAAE,SAAS,IAAI,CAAG,EAAE,MAAM,IAAI,CAAC,GAAG,OAAS,EAClD,EAAmB,IAAI,EACvB,EAAmB,IAAI,EAE7B,EAAY,OAAO,EAAE,QAAQ,IAAK,GAAG,CAAC,CAAG,OAAO,EAAE,QAAQ,IAAK,GAAG,CAAC,EAAK,EAAU,GAEpF,OAAO,OAAO,EAAS,QAAQ,EAAU,CAAC,CC/E5C,eAAsB,EAAS,EAAc,CAC3C,GAAI,CAGF,OAFA,MAAM,UAAU,UAAU,UAAU,EAAK,CACzC,QAAQ,IAAI,OAAO,CACZ,SACA,EAAK,CAGZ,OAFA,QAAQ,MAAM,QAAS,EAAI,CAEpB,EAAiB,EAAK,EAWjC,SAAS,EAAiB,EAAc,CAgBpC,OAdE,WAAa,UAAU,WAAa,UAAU,UAAU,UACnD,UAAU,UACd,UAAU,EAAK,CACf,UACC,QAAQ,IAAI,wBAAwB,CAC7B,IACP,CACD,MAAM,IACL,QAAQ,MAAM,sBAAuB,EAAI,CAElC,EAAmB,EAAK,EAC/B,CAGG,EAAmB,EAAK,CAKnC,SAAS,EAAmB,EAAc,CACxC,IAAM,EAAW,SAAS,cAAc,WAAW,CAcnD,MAbA,GAAS,MAAQ,EACjB,EAAS,aAAa,WAAY,GAAG,CACrC,EAAS,MAAM,SAAW,WAC1B,EAAS,MAAM,KAAO,UACtB,EAAS,MAAM,QAAU,IACzB,SAAS,KAAK,YAAY,EAAS,CAEnC,EAAS,QAAQ,CACjB,EAAS,kBAAkB,EAAG,EAAS,MAAM,OAAO,CAGpD,MAAM,gCAAgC,CACtC,SAAS,KAAK,YAAY,EAAS,CAC5B,GAWT,IAAa,GAA0B,EAAa,IAA2B,CAC7E,GAAI,CAAC,GAAO,IAAQ,GAAI,OAAO,EAC/B,IAAI,EAAU,EACV,EAAM,EAAE,CACZ,EAAS,OAAO,EAAO,CAEvB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC9B,EAAI,WAAW,EAAE,CAAG,IAAO,GAAW,EAAM,GAAW,EACnD,GAAW,GACb,EAAI,KAAK,EAAI,GAAG,CAGpB,OAAO,EAAI,KAAK,GAAG,EASR,EAAc,GAAwB,CACjD,GAAI,CAAC,GAAO,IAAQ,GAAI,MAAO,GAC/B,IAAI,EAAU,EAEd,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,IAC9B,EAAI,WAAW,EAAE,CAAG,IAAO,GAAW,EAAM,GAAW,EAEzD,OAAO,GAWI,GAAgB,EAAa,EAAe,yBAAmC,CAC1F,GAAI,CAAC,EAAK,MAAO,GAIjB,IAAM,EADS,SAAS,cAAc,SAAS,CAC5B,WAAW,KAAK,CACnC,GAAI,CAAC,EAAK,MAAO,GACjB,EAAI,KAAO,GAAG,IACd,IAAM,EAAU,EAAI,YAAY,EAAI,CAC9B,EAAS,KAAK,IAAI,EAAQ,sBAAsB,CAAG,KAAK,IAAI,EAAQ,uBAAuB,CACjG,OAAO,KAAK,KAAK,KAAK,IAAI,EAAQ,MAAO,EAAO,CAAC,CAAG,GActD,SAAgB,EACd,EACA,EAAe,uBACf,EAAmB,GACnB,EAAmB,EACV,CACT,GAAI,CAAC,EAAK,MAAO,GAGjB,IAAM,EADS,SAAS,cAAc,SAAS,CAC5B,WAAW,KAAK,CACnC,GAAI,CAAC,EAAK,MAAO,GACjB,EAAI,KAAO,EAEX,IAAI,EAAQ,EACR,EAAc,GAClB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,IAAM,EAAW,EAAc,EAAI,GAGnC,GAFc,EAAI,YAAY,EAAS,CAAC,MAE5B,GAAK,EAIf,IAHA,IACA,EAAc,EAAI,GAEd,EAAQ,EACV,MAAO,QAGT,EAAc,EAGlB,MAAO,GCjET,IAAM,EAAQ,CAEZ,SACA,qBACA,sBAEA,WACA,WACA,eAEA,cACA,WACA,UACA,WAEA,aAEA,WACA,gBACA,gBACA,cAEA,UAEA,SACD"}
package/dist/index.js ADDED
@@ -0,0 +1,32 @@
1
+ import { arrayToObject as e, calcStringLenth as t, convertStyleToStr as n, copyText as r, dataType as i, deepCopy as a, downloadALink as o, flattenArray as s, generateUUID as c, getTextSize as l, objectToArray as u } from "./es/base.js";
2
+ import { Storage as d, composeKey as f, getLocalStorage as p } from "./es/storage.js";
3
+ import { checkBtnOptionsAuth as m, getApiByFunctionId as h, isAuth as g } from "./es/auth.js";
4
+ import { MapToArray as _, isArray as v, isNumber as y, isString as b, isUndefined as x, listToTree as S } from "./es/function.js";
5
+ import { coverFormItem as C, formatTen as w, getDate as T, getSearchForm as E, setSearchParameter as D, splicingCheckBox as O, splicingDate as k } from "./es/form.js";
6
+ import { logger as A } from "./es/logger.js";
7
+ import { floatAdd as j, floatDivide as M, floatMultiply as N, floatSubtract as P } from "./es/math.js";
8
+ import { CalcStrLen as F, CopyText as I, ExtractSpecifiedString as L, getTextWidth as R, isTextOverTwoLines as z } from "./es/text.js";
9
+ //#region src/index.ts
10
+ var B = {
11
+ isAuth: g,
12
+ getApiByFunctionId: h,
13
+ checkBtnOptionsAuth: m,
14
+ deepCopy: a,
15
+ dataType: i,
16
+ generateUUID: c,
17
+ isUndefined: x,
18
+ isNumber: y,
19
+ isArray: v,
20
+ isString: b,
21
+ listToTree: S,
22
+ floatAdd: j,
23
+ floatSubtract: P,
24
+ floatMultiply: N,
25
+ floatDivide: M,
26
+ Storage: d,
27
+ logger: A
28
+ };
29
+ //#endregion
30
+ export { F as CalcStrLen, I as CopyText, L as ExtractSpecifiedString, _ as MapToArray, d as Storage, e as arrayToObject, t as calcStringLenth, m as checkBtnOptionsAuth, f as composeKey, n as convertStyleToStr, r as copyText, C as coverFormItem, i as dataType, a as deepCopy, B as default, o as downloadALink, s as flattenArray, j as floatAdd, M as floatDivide, N as floatMultiply, P as floatSubtract, w as formatTen, c as generateUUID, h as getApiByFunctionId, T as getDate, p as getLocalStorage, E as getSearchForm, l as getTextSize, R as getTextWidth, v as isArray, g as isAuth, y as isNumber, b as isString, z as isTextOverTwoLines, x as isUndefined, S as listToTree, A as logger, u as objectToArray, D as setSearchParameter, O as splicingCheckBox, k as splicingDate };
31
+
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["/**\r\n * @saas-ui/utils\r\n * SaaS UI 工具函数库\r\n *\r\n * 使用方式:\r\n * import { deepCopy, Storage, isAuth, logger } from '@saas-ui/utils'\r\n */\r\n\r\n// ==================== 类型导出 ====================\r\nexport type {\r\n FunctionAuth\r\n} from './auth';\r\n\r\nexport type {\r\n UitlsFormItemProps,\r\n UitlsFormValue,\r\n PaginationType,\r\n SearchParameterType,\r\n formJsonType,\r\n SearchParameterModalItem\r\n} from './form';\r\n\r\n// ==================== Auth 权限相关 ====================\r\nexport {\r\n isAuth,\r\n getApiByFunctionId,\r\n checkBtnOptionsAuth\r\n} from './auth';\r\n\r\n// ==================== Base 基础工具 ====================\r\nexport {\r\n dataType,\r\n calcStringLenth,\r\n deepCopy,\r\n getTextSize,\r\n downloadALink,\r\n copyText,\r\n convertStyleToStr,\r\n generateUUID,\r\n objectToArray,\r\n arrayToObject,\r\n flattenArray\r\n} from './base';\r\n\r\n// ==================== Form 表单工具 ====================\r\nexport {\r\n setSearchParameter,\r\n getSearchForm,\r\n coverFormItem,\r\n splicingDate,\r\n splicingCheckBox,\r\n getDate,\r\n formatTen\r\n} from './form';\r\n\r\n// ==================== Function 类型与转换 ====================\r\nexport {\r\n isUndefined,\r\n isNumber,\r\n isArray,\r\n isString,\r\n MapToArray,\r\n listToTree\r\n} from './function';\r\n\r\n// ==================== Logger 日志工具 ====================\r\nexport { logger } from './logger';\r\n\r\n// ==================== Math 数学计算 ====================\r\nexport {\r\n floatAdd,\r\n floatSubtract,\r\n floatMultiply,\r\n floatDivide\r\n} from './math';\r\n\r\n// ==================== Storage 存储工具 ====================\r\nexport {\r\n Storage,\r\n getLocalStorage,\r\n composeKey\r\n} from './storage';\r\n\r\n// ==================== Text 文本处理 ====================\r\nexport {\r\n CopyText,\r\n ExtractSpecifiedString,\r\n CalcStrLen,\r\n getTextWidth,\r\n isTextOverTwoLines\r\n} from './text';\r\n\r\n// ==================== 默认导出 ====================\r\nimport { isAuth, getApiByFunctionId, checkBtnOptionsAuth } from './auth';\r\nimport { deepCopy, dataType, generateUUID } from './base';\r\nimport { isUndefined, isNumber, isArray, isString, listToTree } from './function';\r\nimport { floatAdd, floatSubtract, floatMultiply, floatDivide } from './math';\r\nimport Storage from './storage';\r\nimport { logger } from './logger';\r\n\r\nconst utils = {\r\n // Auth\r\n isAuth,\r\n getApiByFunctionId,\r\n checkBtnOptionsAuth,\r\n // Base\r\n deepCopy,\r\n dataType,\r\n generateUUID,\r\n // Type check\r\n isUndefined,\r\n isNumber,\r\n isArray,\r\n isString,\r\n // Tree\r\n listToTree,\r\n // Math\r\n floatAdd,\r\n floatSubtract,\r\n floatMultiply,\r\n floatDivide,\r\n // Storage\r\n Storage,\r\n // Logger\r\n logger\r\n};\r\n\r\nexport default utils;\r\n"],"mappings":";;;;;;;;;AAoGA,IAAM,IAAQ;CAEZ;CACA;CACA;CAEA;CACA;CACA;CAEA;CACA;CACA;CACA;CAEA;CAEA;CACA;CACA;CACA;CAEA;CAEA;CACD"}
@@ -0,0 +1,25 @@
1
+ export type FunctionAuth = {
2
+ FunctionId: string;
3
+ FunctionName: string;
4
+ ViewType: string;
5
+ SysId: string;
6
+ MenuId: string;
7
+ ServiceName: string;
8
+ ApiName: string;
9
+ SortNo: number;
10
+ };
11
+ export declare function isAuth(name: string, authData?: FunctionAuth[]): boolean;
12
+ /**
13
+ * 此函数根据会话存储中给定的函数 ID 检索 API 名称和服务名称。
14
+ * @param name - 我们要为其检索 API 信息的函数 ID 的名称。
15
+ * @returns 如果 `functionInfo` 为真,则函数返回格式为 `${functionInfo.ServiceName}/${functionInfo.ApiName}`
16
+ * 的字符串。否则,它返回“null”。
17
+ */
18
+ export declare function getApiByFunctionId(FunctionId: string): string | null;
19
+ /**
20
+ * 该函数根据用户是否有权访问每个选项的相应功能来过滤一组选项。
21
+ * @param options - 表示不同按钮选项的对象数组。每个对象都应该有一个名为“FunctionId”的属性,用于确定按钮是否需要身份验证。
22
+ * @returns `checkBtnOptionsAuth` 函数返回一个数组,该数组仅包含来自 `options` 数组的元素,这些元素具有通过 `isAuth` 函数检查的
23
+ * `FunctionId`。
24
+ */
25
+ export declare function checkBtnOptionsAuth(options: FunctionAuth[]): FunctionAuth[];
@@ -0,0 +1,104 @@
1
+ /**
2
+ * 本文件导出常用工具函数集合,支持类型判断、深拷贝、字符串字节长度、样式转换、UUID生成、对象数组互转、文本宽高测量、下载、复制等功能。
3
+ *
4
+ * 你可以通过 import xxx from 'src/components/util/base' 方式直接引入所有工具函数。
5
+ *
6
+ * 具体函数说明请参考本文件源码注释。
7
+ * /
8
+
9
+
10
+ /**
11
+ * 获取数据的类型字符串
12
+ * @param data 任意类型的数据
13
+ * @returns 返回数据的类型字符串,如 'Object'、'Array'、'String' 等
14
+ */
15
+ export declare function dataType(data: any): string;
16
+ /**
17
+ * 计算字符串的字节长度(中文算2字节,英文算1字节)
18
+ * @param str 需要计算的字符串
19
+ * @returns 返回字符串的总字节数
20
+ */
21
+ export declare const calcStringLenth: (str: string) => string | number;
22
+ /**
23
+ * 深拷贝函数,支持对象、数组、Date、RegExp等常见类型的递归深拷贝
24
+ * @param target 需要深拷贝的数据
25
+ * @returns 返回深拷贝后的新数据
26
+ */
27
+ export declare function deepCopy(target: any): any;
28
+ /**
29
+ * 计算指定字符串在浏览器中应用指定样式后的实际宽度和高度(单位:像素)。
30
+ * @param str 需要计算的文本内容
31
+ * @param styleObj 可选,应用于文本的样式对象,如 { fontSize: '16px', fontWeight: 'bold' }
32
+ * @returns { width: number, height: number }
33
+ */
34
+ export declare function getTextSize(str: string, styleObj?: {
35
+ [key: string]: string;
36
+ }): {
37
+ width: number;
38
+ height: number;
39
+ };
40
+ /**
41
+ * 通过创建一个隐藏的a标签,实现文件下载
42
+ * @param url 下载链接
43
+ * @param filename 下载文件名
44
+ */
45
+ export declare function downloadALink(url: string, filename: string): void;
46
+ /**
47
+ * 兼容新版和旧版浏览器的复制文本到剪贴板函数
48
+ * @param value 需要复制的内容
49
+ * @returns Promise<boolean> 复制成功返回true,失败返回false
50
+ */
51
+ export declare function copyText(value: string): Promise<boolean>;
52
+ export declare const convertStyleToStr: (val?: {
53
+ [key: string]: string;
54
+ }) => string;
55
+ /**
56
+ * 生成UUID,兼容新版(crypto.randomUUID)与旧版JS环境
57
+ * @returns {string} UUID字符串
58
+ */
59
+ export declare function generateUUID(): string;
60
+ /**
61
+ * 将对象转换为指定结构的数组,结构为 [{label: key, value: value}]
62
+ * @param obj 需要转换的对象
63
+ * @returns 转换后的数组
64
+ */
65
+ export declare function objectToArray(obj: Record<string, any>, isNumber?: boolean): Array<{
66
+ label: string;
67
+ value: any;
68
+ }>;
69
+ /**
70
+ * 将带层级结构的数组扁平化为一维数组,并通过指定的唯一键去重子项。
71
+ * @param arr 需要扁平化的数组
72
+ * @param key 用于去重的唯一属性字段名
73
+ * @returns 扁平化且去重后的一维数组
74
+ */
75
+ export declare function flattenArray(arr: any[], key?: string): any;
76
+ /**
77
+ * 将 [{label, value}] 结构的数组转换为对象
78
+ * @param arr 需要转换的数组
79
+ * @returns 转换后的对象
80
+ */
81
+ export declare function arrayToObject(arr: Array<{
82
+ label: string;
83
+ value: any;
84
+ }>): Record<string, any>;
85
+ /**
86
+ * 默认导出:工具函数集合对象
87
+ *
88
+ * 支持智能跳转,IDE可自动提示所有方法。
89
+ */
90
+ declare const utilBase: {
91
+ dataType: typeof dataType;
92
+ calcStringLenth: (str: string) => string | number;
93
+ deepCopy: typeof deepCopy;
94
+ getTextSize: typeof getTextSize;
95
+ downloadALink: typeof downloadALink;
96
+ copyText: typeof copyText;
97
+ convertStyleToStr: (val?: {
98
+ [key: string]: string;
99
+ }) => string;
100
+ generateUUID: typeof generateUUID;
101
+ objectToArray: typeof objectToArray;
102
+ arrayToObject: typeof arrayToObject;
103
+ };
104
+ export default utilBase;
@@ -0,0 +1,94 @@
1
+ export interface UitlsFormItemProps {
2
+ type?: string;
3
+ prop: string;
4
+ label?: string;
5
+ formType?: string;
6
+ queryParams?: Record<string, any>;
7
+ method?: number;
8
+ options?: Array<{
9
+ label: string;
10
+ value: any;
11
+ prop?: string;
12
+ }>;
13
+ staticValue?: any[];
14
+ fileIds?: string[];
15
+ [key: string]: any;
16
+ }
17
+ export interface UitlsFormValue {
18
+ [key: string]: any;
19
+ }
20
+ export interface PaginationType {
21
+ currentPage: number;
22
+ pageSize: number;
23
+ }
24
+ /**
25
+ * 该函数在 JavaScript 中设置分页和表单数据的搜索参数。
26
+ * @param pagination - 一个对象,包含有关当前页面和分页页面大小的信息,以及排序字段和方向。
27
+ * @param formJson - `formJson` 是一个包含搜索表单数据的 JSON 对象。它用于在返回值中构造 QueryModel 对象。
28
+ * @param [SortField=UpdatedDate] - 搜索结果排序依据的字段。在这种情况下,默认值为“UpdatedDate”。
29
+ * @returns 函数“setSearchParameter”返回一个具有两个属性的对象:“PageInfo”和“QueryModel”。 `PageInfo` 包含有关搜索结果的分页和排序的信息,而
30
+ * `QueryModel` 包含对象数组形式的搜索条件。
31
+ */
32
+ export interface SearchParameterType {
33
+ pagination: PaginationType;
34
+ formJson: formJsonType;
35
+ sortField: string;
36
+ sortDirection: string;
37
+ }
38
+ export interface formJsonType {
39
+ formData: UitlsFormItemProps[];
40
+ formValue: UitlsFormValue;
41
+ }
42
+ export interface SearchParameterModalItem {
43
+ fileId: string;
44
+ method: number;
45
+ value: any;
46
+ }
47
+ export declare const setSearchParameter: ({ pagination, formJson, sortField, sortDirection }: SearchParameterType) => {
48
+ pageInfo: {
49
+ currentPage: number;
50
+ pageSize: number;
51
+ sortField: string;
52
+ sortDirection: string;
53
+ isGetTotalCount: boolean;
54
+ };
55
+ queryModel: SearchParameterModalItem[];
56
+ };
57
+ /**
58
+ * 此函数接受表单数据和表单值,并返回具有非空值的已过滤表单项数组。
59
+ * @param e - 参数“e”可能是一个对象,其中包含有关表单提交事件的信息,例如表单数据和表单值。函数 getSearchForm 将此事件对象作为参数并返回搜索表单项的数组。
60
+ * @returns
61
+ * 函数“getSearchForm”返回一个对象数组,这些对象是对“e.formData”数组中的每个项目调用“coverFormItem”函数的结果,“e.formValue”对象作为第二个参数。
62
+ * `coverFormItem` 函数应返回具有 `Label` 和 `Value` 属性的对象数组。 `getSearchForm`
63
+ */
64
+ export declare function getSearchForm(e: formJsonType): SearchParameterModalItem[];
65
+ /**
66
+ * 该函数接受一个表单项及其值,并返回一个数组,其中包含字段名称、值和表单提交的方法,并对日期选择器和复选框进行特殊处理。
67
+ * @param formItem - 表示表单字段的对象,包含 formType、prop 和 method 等属性。
68
+ * @param formValue - 用户在表单字段中输入的值。
69
+ * @returns 函数“coverFormItem”返回具有“FileId”、“Value”和“Method”属性的对象数组。返回的具体对象取决于 if 语句中满足的条件。如果 `formItem` 的
70
+ * `formType` 为“Date-Picker”,则调用 `splicingDate` 函数并将其返回值包含在数组中。如果
71
+ */
72
+ export declare function coverFormItem(formItem: UitlsFormItemProps, formValue: UitlsFormValue): SearchParameterModalItem[];
73
+ /**
74
+ * 该函数将一个日期范围拼接成两个单独的日期对象,并以特定格式返回它们。
75
+ * @param formItem - 表示表单字段的对象,具有诸如“prop”(字段名称)和“type”(输入类型)等属性
76
+ * @param formValue - 表单的值,它是一个包含键值对的对象,其中键是表单字段的名称,值是这些字段的用户输入。
77
+ * @returns 函数 `splicingDate` 返回一个包含两个对象的数组,这些对象具有属性 `FileId`、`Method` 和 `Value`。 `FileId` 属性设置为
78
+ * `formItem.prop` 的值,`Method` 属性为 3 或 4,`Value` 属性为格式化的日期字符串。该函数还检查给定的`的`formValue`
79
+ */
80
+ export declare function splicingDate(formItem: UitlsFormItemProps, formValue: UitlsFormValue): {
81
+ fileId: string;
82
+ method: number;
83
+ value: string;
84
+ }[];
85
+ /**
86
+ * 函数 splicingCheckBox 根据复选框表单项中的选定选项创建一个对象数组。
87
+ * @param formItem - 包含有关表单项的信息的对象,例如其属性名称 (prop)、选项和方法。
88
+ * @param formValue - 它是一个包含表单字段值的对象。该函数使用特定字段 (formValue[formItem.prop]) 的值来确定选择了哪些复选框。
89
+ * @returns 函数 `splicingCheckBox` 返回一个对象数组,该对象具有三个属性:`FileId`、`Method` 和 `Value`。这些对象是基于 `formItem` 参数和
90
+ * `formValue` 参数的 `options` 数组创建的。对象被推入“数据”数组,然后返回。
91
+ */
92
+ export declare function splicingCheckBox(formItem: UitlsFormItemProps, formValue: UitlsFormValue): SearchParameterModalItem[];
93
+ export declare function getDate(date?: Date): string;
94
+ export declare function formatTen(num: number): string;
@@ -0,0 +1,20 @@
1
+ export declare function isUndefined(variable: any): boolean;
2
+ export declare function isNumber(n: any): n is Number;
3
+ export declare function isArray(arr: any[]): boolean;
4
+ export declare function isString(str: any): str is string;
5
+ export declare const MapToArray: (map: Map<string | number, string>, isNumber?: boolean) => {
6
+ label: string;
7
+ value: string | number;
8
+ }[];
9
+ interface TreeNode {
10
+ [key: string]: any;
11
+ }
12
+ /**
13
+ * 该函数根据上级和权限 ID 将平面数据列表转换为树结构。
14
+ * @param data - 数据参数是一个对象数组,表示需要转换为树结构的项目列表。
15
+ * @param superiorId - superiorId 参数是一个字符串,表示数据对象中的键,用于标识树结构中的父节点或上级节点。
16
+ * @param permissionId - `permissionId` 参数可能是 `data` 数组中的属性名称或键,表示树中每个节点的唯一标识符。该标识符用于将子节点链接到它们的父节点。
17
+ * @returns 根据输入数据构建的树结构的根节点的子节点。
18
+ */
19
+ export declare function listToTree(data: TreeNode[], superiorId: string, permissionId: string): any;
20
+ export {};
@@ -0,0 +1,61 @@
1
+ import { isAuth, getApiByFunctionId, checkBtnOptionsAuth } from './auth';
2
+ import { deepCopy, dataType, generateUUID } from './base';
3
+ import { isUndefined, isNumber, isArray, isString, listToTree } from './function';
4
+ import { floatAdd, floatSubtract, floatMultiply, floatDivide } from './math';
5
+ /**
6
+ * @saas-ui/utils
7
+ * SaaS UI 工具函数库
8
+ *
9
+ * 使用方式:
10
+ * import { deepCopy, Storage, isAuth, logger } from '@saas-ui/utils'
11
+ */
12
+ export type { FunctionAuth } from './auth';
13
+ export type { UitlsFormItemProps, UitlsFormValue, PaginationType, SearchParameterType, formJsonType, SearchParameterModalItem } from './form';
14
+ export { isAuth, getApiByFunctionId, checkBtnOptionsAuth } from './auth';
15
+ export { dataType, calcStringLenth, deepCopy, getTextSize, downloadALink, copyText, convertStyleToStr, generateUUID, objectToArray, arrayToObject, flattenArray } from './base';
16
+ export { setSearchParameter, getSearchForm, coverFormItem, splicingDate, splicingCheckBox, getDate, formatTen } from './form';
17
+ export { isUndefined, isNumber, isArray, isString, MapToArray, listToTree } from './function';
18
+ export { logger } from './logger';
19
+ export { floatAdd, floatSubtract, floatMultiply, floatDivide } from './math';
20
+ export { Storage, getLocalStorage, composeKey } from './storage';
21
+ export { CopyText, ExtractSpecifiedString, CalcStrLen, getTextWidth, isTextOverTwoLines } from './text';
22
+ declare const utils: {
23
+ isAuth: typeof isAuth;
24
+ getApiByFunctionId: typeof getApiByFunctionId;
25
+ checkBtnOptionsAuth: typeof checkBtnOptionsAuth;
26
+ deepCopy: typeof deepCopy;
27
+ dataType: typeof dataType;
28
+ generateUUID: typeof generateUUID;
29
+ isUndefined: typeof isUndefined;
30
+ isNumber: typeof isNumber;
31
+ isArray: typeof isArray;
32
+ isString: typeof isString;
33
+ listToTree: typeof listToTree;
34
+ floatAdd: typeof floatAdd;
35
+ floatSubtract: typeof floatSubtract;
36
+ floatMultiply: typeof floatMultiply;
37
+ floatDivide: typeof floatDivide;
38
+ Storage: {
39
+ base: string;
40
+ setBase(base: string): void;
41
+ composeKey(key: string): string;
42
+ setLocalStorage(key: string, data: any): void;
43
+ getLocalStorage(key: string, isCombination?: boolean): any;
44
+ removeLocalStorage(key: string): void;
45
+ setSessionStorage(key: string, data: any): void;
46
+ getSessionStorage(key: string, isCombination?: boolean): any;
47
+ removeSessionStorage(key: string): void;
48
+ getEmployee: () => any;
49
+ getPlateForm: () => any;
50
+ clearCookies: () => void;
51
+ };
52
+ logger: {
53
+ log: (...args: any[]) => void;
54
+ error: (...args: any[]) => void;
55
+ warn: (...args: any[]) => void;
56
+ info: (...args: any[]) => void;
57
+ group: (label: string, callback?: () => void) => void;
58
+ groupCollapsed: (label: string, callback?: () => void) => void;
59
+ };
60
+ };
61
+ export default utils;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @Description: 日志工具,统一管理 console 输出
3
+ * @Author: 系统
4
+ * @Date: 2025-01-XX
5
+ */
6
+ export declare const logger: {
7
+ /**
8
+ * 开发环境输出日志
9
+ */
10
+ log: (...args: any[]) => void;
11
+ /**
12
+ * 错误日志(始终输出)
13
+ */
14
+ error: (...args: any[]) => void;
15
+ /**
16
+ * 警告日志(开发环境输出)
17
+ */
18
+ warn: (...args: any[]) => void;
19
+ /**
20
+ * 信息日志(开发环境输出)
21
+ */
22
+ info: (...args: any[]) => void;
23
+ /**
24
+ * 分组日志(开发环境输出)
25
+ */
26
+ group: (label: string, callback?: () => void) => void;
27
+ /**
28
+ * 分组折叠日志(开发环境输出)
29
+ *
30
+ * @example
31
+ * logger.groupCollapsed('API 调用详情', () => {
32
+ * logger.log('请求参数:', params);
33
+ * logger.log('响应数据:', data);
34
+ * });
35
+ */
36
+ groupCollapsed: (label: string, callback?: () => void) => void;
37
+ };
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 精确浮点数加法
3
+ * @param nums 参与运算的数字数组
4
+ * @param precision 保留的小数位数,默认2位
5
+ * @returns 返回加法运算后的结果
6
+ */
7
+ export declare function floatAdd(nums: number[], precision?: number): number;
8
+ /**
9
+ * 精确浮点数减法
10
+ * @param nums 参与运算的数字数组(第一个为被减数,后面为减数)
11
+ * @param precision 保留的小数位数,默认2位
12
+ * @returns 返回减法运算后的结果
13
+ */
14
+ export declare function floatSubtract(nums: number[], precision?: number): number;
15
+ /**
16
+ * 精确浮点数乘法
17
+ * @param nums 参与运算的数字数组
18
+ * @param precision 保留的小数位数,默认2位
19
+ * @returns 返回乘法运算后的结果
20
+ */
21
+ export declare function floatMultiply(nums: number[], precision?: number): number;
22
+ /**
23
+ * 精确浮点数除法
24
+ * @param nums 参与运算的数字数组(第一个为被除数,后面为除数)
25
+ * @param precision 保留的小数位数,默认2位
26
+ * @returns 返回除法运算后的结果
27
+ */
28
+ export declare function floatDivide(nums: number[], precision?: number): number;
29
+ declare const _default: {
30
+ floatAdd: typeof floatAdd;
31
+ floatSubtract: typeof floatSubtract;
32
+ floatMultiply: typeof floatMultiply;
33
+ floatDivide: typeof floatDivide;
34
+ };
35
+ export default _default;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * 组装带前缀的key
3
+ */
4
+ export declare const composeKey: (key: string, base?: string) => string;
5
+ /**
6
+ * 设置本地存储
7
+ */
8
+ export declare const setLocalStorage: (key: string, data: any, base?: string) => void;
9
+ /**
10
+ * 获取本地存储
11
+ */
12
+ export declare const getLocalStorage: (key: string, base?: string, isCombination?: boolean) => any;
13
+ /**
14
+ * 移除本地存储
15
+ */
16
+ export declare const removeLocalStorage: (key: string, base?: string) => void;
17
+ /**
18
+ * 设置会话存储
19
+ */
20
+ export declare const setSessionStorage: (key: string, data: any, base?: string) => void;
21
+ /**
22
+ * 获取会话存储
23
+ */
24
+ export declare const getSessionStorage: (key: string, base?: string, isCombination?: boolean) => any;
25
+ /**
26
+ * 移除会话存储
27
+ */
28
+ export declare const removeSessionStorage: (key: string, base?: string) => void;
29
+ /**
30
+ * 获取员工信息
31
+ */
32
+ export declare const getEmployee: () => any;
33
+ /**
34
+ * 获取平台信息
35
+ */
36
+ export declare const getPlateForm: () => any;
37
+ /**
38
+ * 清除所有Cookies
39
+ */
40
+ export declare const clearCookies: () => void;
41
+ /**
42
+ * 可组合的 Storage 工具对象
43
+ */
44
+ export declare const Storage: {
45
+ base: string;
46
+ setBase(base: string): void;
47
+ composeKey(key: string): string;
48
+ setLocalStorage(key: string, data: any): void;
49
+ getLocalStorage(key: string, isCombination?: boolean): any;
50
+ removeLocalStorage(key: string): void;
51
+ setSessionStorage(key: string, data: any): void;
52
+ getSessionStorage(key: string, isCombination?: boolean): any;
53
+ removeSessionStorage(key: string): void;
54
+ getEmployee: () => any;
55
+ getPlateForm: () => any;
56
+ clearCookies: () => void;
57
+ };
58
+ export default Storage;