my-uniapp-tools 1.0.10 → 1.0.11
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.
- package/OPTIMIZATION_REPORT.md +278 -278
- package/README.md +477 -477
- package/dist/my-uniapp-tools.cjs.js +39 -39
- package/dist/my-uniapp-tools.cjs.js.map +1 -1
- package/dist/my-uniapp-tools.esm.js +39 -39
- package/dist/my-uniapp-tools.esm.js.map +1 -1
- package/package.json +73 -65
|
@@ -1653,45 +1653,45 @@ function batchGetStorage(keys) {
|
|
|
1653
1653
|
return result;
|
|
1654
1654
|
}
|
|
1655
1655
|
|
|
1656
|
-
// 核心功能
|
|
1657
|
-
|
|
1658
|
-
// 版本信息
|
|
1659
|
-
const VERSION = '1.0.8';
|
|
1660
|
-
|
|
1661
|
-
// 初始化函数
|
|
1662
|
-
async function initUniAppTools(config = {}) {
|
|
1663
|
-
const {
|
|
1664
|
-
enablePerformanceMonitor = false,
|
|
1665
|
-
enableErrorHandler = true,
|
|
1666
|
-
logLevel = 'warn'
|
|
1667
|
-
} = config;
|
|
1668
|
-
|
|
1669
|
-
if (enableErrorHandler) {
|
|
1670
|
-
const { ErrorHandler } = await Promise.resolve().then(function () { return errorHandler; });
|
|
1671
|
-
const errorHandler$1 = ErrorHandler.getInstance();
|
|
1672
|
-
|
|
1673
|
-
// 设置全局错误监听
|
|
1674
|
-
if (enablePerformanceMonitor) {
|
|
1675
|
-
errorHandler$1.onError((error) => {
|
|
1676
|
-
console.log(`[UniAppTools] ${error.module} - ${error.code}: ${error.message}`);
|
|
1677
|
-
});
|
|
1678
|
-
}
|
|
1679
|
-
}
|
|
1680
|
-
|
|
1681
|
-
if (enablePerformanceMonitor) {
|
|
1682
|
-
const { PerformanceMonitor } = await Promise.resolve().then(function () { return performance$1; });
|
|
1683
|
-
const monitor = PerformanceMonitor.getInstance();
|
|
1684
|
-
|
|
1685
|
-
// 定期输出性能报告
|
|
1686
|
-
setInterval(() => {
|
|
1687
|
-
const report = monitor.getReport();
|
|
1688
|
-
if (report.slowest.length > 0) {
|
|
1689
|
-
console.log('[UniAppTools] 性能报告:', report);
|
|
1690
|
-
}
|
|
1691
|
-
}, 60000); // 每分钟输出一次
|
|
1692
|
-
}
|
|
1693
|
-
|
|
1694
|
-
console.log(`[UniAppTools] v${VERSION} 初始化完成`);
|
|
1656
|
+
// 核心功能
|
|
1657
|
+
|
|
1658
|
+
// 版本信息
|
|
1659
|
+
const VERSION = '1.0.8';
|
|
1660
|
+
|
|
1661
|
+
// 初始化函数
|
|
1662
|
+
async function initUniAppTools(config = {}) {
|
|
1663
|
+
const {
|
|
1664
|
+
enablePerformanceMonitor = false,
|
|
1665
|
+
enableErrorHandler = true,
|
|
1666
|
+
logLevel = 'warn'
|
|
1667
|
+
} = config;
|
|
1668
|
+
|
|
1669
|
+
if (enableErrorHandler) {
|
|
1670
|
+
const { ErrorHandler } = await Promise.resolve().then(function () { return errorHandler; });
|
|
1671
|
+
const errorHandler$1 = ErrorHandler.getInstance();
|
|
1672
|
+
|
|
1673
|
+
// 设置全局错误监听
|
|
1674
|
+
if (enablePerformanceMonitor) {
|
|
1675
|
+
errorHandler$1.onError((error) => {
|
|
1676
|
+
console.log(`[UniAppTools] ${error.module} - ${error.code}: ${error.message}`);
|
|
1677
|
+
});
|
|
1678
|
+
}
|
|
1679
|
+
}
|
|
1680
|
+
|
|
1681
|
+
if (enablePerformanceMonitor) {
|
|
1682
|
+
const { PerformanceMonitor } = await Promise.resolve().then(function () { return performance$1; });
|
|
1683
|
+
const monitor = PerformanceMonitor.getInstance();
|
|
1684
|
+
|
|
1685
|
+
// 定期输出性能报告
|
|
1686
|
+
setInterval(() => {
|
|
1687
|
+
const report = monitor.getReport();
|
|
1688
|
+
if (report.slowest.length > 0) {
|
|
1689
|
+
console.log('[UniAppTools] 性能报告:', report);
|
|
1690
|
+
}
|
|
1691
|
+
}, 60000); // 每分钟输出一次
|
|
1692
|
+
}
|
|
1693
|
+
|
|
1694
|
+
console.log(`[UniAppTools] v${VERSION} 初始化完成`);
|
|
1695
1695
|
}
|
|
1696
1696
|
|
|
1697
1697
|
exports.ErrorHandler = ErrorHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"my-uniapp-tools.cjs.js","sources":["../src/core/errorHandler.ts","../src/core/performance.ts","../src/ui/index.ts","../src/utils/index.ts","../src/navigation/index.ts","../src/clipboard/index.ts","../src/system/index.ts","../src/localStorage/index.ts","../src/index.js"],"sourcesContent":["/**\n * 统一错误处理机制\n */\n\nexport interface ErrorInfo {\n code: string;\n message: string;\n module: string;\n timestamp: number;\n stack?: string;\n}\n\nexport class UniAppToolsError extends Error {\n public code: string;\n public module: string;\n public timestamp: number;\n\n constructor(code: string, message: string, module: string) {\n super(message);\n this.name = 'UniAppToolsError';\n this.code = code;\n this.module = module;\n this.timestamp = Date.now();\n }\n}\n\n/**\n * 全局错误处理器\n */\nexport class ErrorHandler {\n private static instance: ErrorHandler;\n private errorCallbacks: Array<(error: ErrorInfo) => void> = [];\n\n static getInstance(): ErrorHandler {\n if (!ErrorHandler.instance) {\n ErrorHandler.instance = new ErrorHandler();\n }\n return ErrorHandler.instance;\n }\n\n /**\n * 注册错误回调\n */\n onError(callback: (error: ErrorInfo) => void): void {\n this.errorCallbacks.push(callback);\n }\n\n /**\n * 处理错误\n */\n handleError(error: Error | UniAppToolsError, module: string): void {\n const errorInfo: ErrorInfo = {\n code: error instanceof UniAppToolsError ? error.code : 'UNKNOWN_ERROR',\n message: error.message,\n module: error instanceof UniAppToolsError ? error.module : module,\n timestamp: error instanceof UniAppToolsError ? error.timestamp : Date.now(),\n stack: error.stack\n };\n\n // 开发环境下打印详细错误信息\n // 注意:在uni-app环境中,通常不需要检查NODE_ENV\n console.error(`[${errorInfo.module}] ${errorInfo.code}: ${errorInfo.message}`, errorInfo);\n\n // 执行错误回调\n this.errorCallbacks.forEach(callback => {\n try {\n callback(errorInfo);\n } catch (callbackError) {\n console.error('Error in error callback:', callbackError);\n }\n });\n }\n\n /**\n * 创建模块专用的错误处理函数\n */\n createModuleErrorHandler(moduleName: string) {\n return (code: string, message: string, originalError?: Error) => {\n const error = new UniAppToolsError(code, message, moduleName);\n if (originalError) {\n error.stack = originalError.stack;\n }\n this.handleError(error, moduleName);\n return error;\n };\n }\n}\n\n/**\n * 异步操作包装器,统一错误处理\n */\nexport async function safeAsync<T>(\n operation: () => Promise<T>,\n moduleName: string,\n errorCode: string = 'ASYNC_ERROR'\n): Promise<T | null> {\n try {\n return await operation();\n } catch (error) {\n const errorHandler = ErrorHandler.getInstance();\n const moduleErrorHandler = errorHandler.createModuleErrorHandler(moduleName);\n const errorMessage = error instanceof Error ? error.message : String(error);\n moduleErrorHandler(errorCode, `异步操作失败: ${errorMessage}`, error as Error);\n return null;\n }\n}\n\n/**\n * 同步操作包装器,统一错误处理\n */\nexport function safeSync<T>(\n operation: () => T,\n moduleName: string,\n errorCode: string = 'SYNC_ERROR',\n defaultValue: T | null = null\n): T | null {\n try {\n return operation();\n } catch (error) {\n const errorHandler = ErrorHandler.getInstance();\n const moduleErrorHandler = errorHandler.createModuleErrorHandler(moduleName);\n const errorMessage = error instanceof Error ? error.message : String(error);\n moduleErrorHandler(errorCode, `同步操作失败: ${errorMessage}`, error as Error);\n return defaultValue;\n }\n}\n","/**\n * 性能监控工具\n */\n\nexport interface PerformanceMetric {\n name: string;\n startTime: number;\n endTime?: number;\n duration?: number;\n module: string;\n metadata?: Record<string, any>;\n}\n\nexport class PerformanceMonitor {\n private static instance: PerformanceMonitor;\n private metrics: Map<string, PerformanceMetric> = new Map();\n private completedMetrics: PerformanceMetric[] = [];\n private maxStoredMetrics = 100; // 最多存储100条性能记录\n\n static getInstance(): PerformanceMonitor {\n if (!PerformanceMonitor.instance) {\n PerformanceMonitor.instance = new PerformanceMonitor();\n }\n return PerformanceMonitor.instance;\n }\n\n /**\n * 开始性能测量\n */\n start(name: string, module: string, metadata?: Record<string, any>): void {\n const metric: PerformanceMetric = {\n name,\n startTime: performance.now(),\n module,\n metadata\n };\n this.metrics.set(name, metric);\n }\n\n /**\n * 结束性能测量\n */\n end(name: string): PerformanceMetric | null {\n const metric = this.metrics.get(name);\n if (!metric) {\n console.warn(`Performance metric \"${name}\" not found`);\n return null;\n }\n\n metric.endTime = performance.now();\n metric.duration = metric.endTime - metric.startTime;\n\n // 移动到已完成列表\n this.metrics.delete(name);\n this.completedMetrics.push(metric);\n\n // 限制存储数量\n if (this.completedMetrics.length > this.maxStoredMetrics) {\n this.completedMetrics.shift();\n }\n\n // 开发环境下输出性能信息\n // 注意:在uni-app环境中,可以直接输出性能信息\n console.log(`[Performance] ${metric.module}.${metric.name}: ${metric.duration?.toFixed(2)}ms`);\n\n return metric;\n }\n\n /**\n * 获取性能报告\n */\n getReport(): {\n byModule: Record<string, PerformanceMetric[]>;\n slowest: PerformanceMetric[];\n average: Record<string, number>;\n } {\n const byModule: Record<string, PerformanceMetric[]> = {};\n const averages: Record<string, { total: number; count: number }> = {};\n\n // 按模块分组\n this.completedMetrics.forEach(metric => {\n if (!byModule[metric.module]) {\n byModule[metric.module] = [];\n }\n byModule[metric.module].push(metric);\n\n // 计算平均值\n const key = `${metric.module}.${metric.name}`;\n if (!averages[key]) {\n averages[key] = { total: 0, count: 0 };\n }\n averages[key].total += metric.duration || 0;\n averages[key].count += 1;\n });\n\n // 计算平均值\n const average: Record<string, number> = {};\n Object.entries(averages).forEach(([key, value]) => {\n average[key] = value.total / value.count;\n });\n\n // 获取最慢的操作\n const slowest = [...this.completedMetrics]\n .sort((a, b) => (b.duration || 0) - (a.duration || 0))\n .slice(0, 10);\n\n return { byModule, slowest, average };\n }\n\n /**\n * 清除性能记录\n */\n clear(): void {\n this.metrics.clear();\n this.completedMetrics = [];\n }\n}\n\n/**\n * 性能装饰器\n */\nexport function measurePerformance(moduleName: string) {\n return function (target: any, propertyName: string, descriptor: PropertyDescriptor) {\n const method = descriptor.value;\n\n descriptor.value = function (...args: any[]) {\n const monitor = PerformanceMonitor.getInstance();\n const metricName = `${target.constructor.name}.${propertyName}`;\n\n monitor.start(metricName, moduleName, { args: args.length });\n\n try {\n const result = method.apply(this, args);\n\n // 处理异步方法\n if (result instanceof Promise) {\n return result.finally(() => {\n monitor.end(metricName);\n });\n }\n\n monitor.end(metricName);\n return result;\n } catch (error) {\n monitor.end(metricName);\n throw error;\n }\n };\n };\n}\n","/**\n * UI交互相关工具函数\n */\n\n/**\n * 显示消息提示框\n * @param title 提示的内容,默认为空字符串\n * @param mask 是否显示透明蒙层,默认为 false\n * @param icon 图标类型,默认为 'none'\n * @param duration 提示的延迟时间,默认为 2000 毫秒\n */\nexport const useToast = (\n title: string = '',\n mask: boolean = false,\n icon: 'none' | 'success' | 'loading' | 'error' | 'fail' | 'exception' | undefined = 'none',\n duration: number = 2000\n) => {\n uni.showToast({\n title,\n icon,\n mask,\n duration,\n });\n};","/**\n * 工具函数库\n */\n\nimport { PerformanceMonitor, measurePerformance } from '../core/performance';\nimport { safeSync } from '../core/errorHandler';\n\n/**\n * 高性能深拷贝实现\n * @param obj 要拷贝的对象\n * @returns 深拷贝后的对象\n * @description 优化的深拷贝算法,支持循环引用检测,性能提升约40%\n */\nexport function deepClone<T>(obj: T): T {\n return safeSync(\n () => {\n // 基本类型直接返回\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // 使用WeakMap处理循环引用,性能优于Map\n const visited = new WeakMap();\n\n function cloneRecursive(source: any): any {\n // 基本类型检查\n if (source === null || typeof source !== 'object') {\n return source;\n }\n\n // 循环引用检查\n if (visited.has(source)) {\n return visited.get(source);\n }\n\n // 特殊对象类型处理\n if (source instanceof Date) {\n return new Date(source.getTime());\n }\n\n if (source instanceof RegExp) {\n return new RegExp(source.source, source.flags);\n }\n\n if (source instanceof Map) {\n const clonedMap = new Map();\n visited.set(source, clonedMap);\n source.forEach((value, key) => {\n clonedMap.set(cloneRecursive(key), cloneRecursive(value));\n });\n return clonedMap;\n }\n\n if (source instanceof Set) {\n const clonedSet = new Set();\n visited.set(source, clonedSet);\n source.forEach(value => {\n clonedSet.add(cloneRecursive(value));\n });\n return clonedSet;\n }\n\n // 数组处理 - 使用Array.from优化性能\n if (Array.isArray(source)) {\n const result: any[] = new Array(source.length);\n visited.set(source, result);\n\n for (let i = 0; i < source.length; i++) {\n result[i] = cloneRecursive(source[i]);\n }\n return result;\n }\n\n // 普通对象处理 - 使用Object.create保持原型链\n const result = Object.create(Object.getPrototypeOf(source));\n visited.set(source, result);\n\n // 使用Object.getOwnPropertyDescriptors获取所有属性描述符\n const descriptors = Object.getOwnPropertyDescriptors(source);\n for (const key in descriptors) {\n const descriptor = descriptors[key];\n if (descriptor.value !== undefined) {\n descriptor.value = cloneRecursive(descriptor.value);\n }\n Object.defineProperty(result, key, descriptor);\n }\n\n return result;\n }\n\n return cloneRecursive(obj);\n },\n 'utils',\n 'DEEP_CLONE_ERROR',\n obj\n ) as T;\n}\n\n/**\n * 浅拷贝对象合并(性能优化版本)\n * @param target 目标对象\n * @param source 源对象\n * @returns 合并后的目标对象\n */\nexport function mergeObjects<T extends Record<string, any>>(target: T, source: Partial<T>): T {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('mergeObjects', 'utils');\n\n const result = safeSync(\n () => {\n // 使用Object.assign进行浅拷贝,性能更好\n return Object.assign(target, source);\n },\n 'utils',\n 'MERGE_OBJECTS_ERROR',\n target\n ) as T;\n\n monitor.end('mergeObjects');\n return result;\n}\n\n/**\n * 深度合并对象\n * @param target 目标对象\n * @param source 源对象\n * @returns 深度合并后的新对象\n */\nexport function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('deepMerge', 'utils');\n\n const result = safeSync(\n () => {\n const result = deepClone(target);\n\n function mergeRecursive(targetObj: any, sourceObj: any): void {\n for (const key in sourceObj) {\n if (sourceObj.hasOwnProperty(key)) {\n const sourceValue = sourceObj[key];\n const targetValue = targetObj[key];\n\n if (\n sourceValue &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n targetValue &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue)\n ) {\n mergeRecursive(targetValue, sourceValue);\n } else {\n targetObj[key] = deepClone(sourceValue);\n }\n }\n }\n }\n\n mergeRecursive(result, source);\n return result;\n },\n 'utils',\n 'DEEP_MERGE_ERROR',\n target\n ) as T;\n\n monitor.end('deepMerge');\n return result;\n}\n\n/**\n * 防抖函数(优化版本)\n * @param func 要防抖的函数\n * @param wait 等待时间(毫秒)\n * @param immediate 是否立即执行\n * @returns 防抖后的函数\n */\nexport function debounce<T extends (...args: any[]) => any>(\n func: T,\n wait: number,\n immediate: boolean = false\n): T {\n let timeout: number | null = null;\n let result: ReturnType<T>;\n\n const debounced = function (this: any, ...args: Parameters<T>) {\n const callNow = immediate && !timeout;\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(() => {\n timeout = null;\n if (!immediate) {\n result = func.apply(this, args);\n }\n }, wait) as any;\n\n if (callNow) {\n result = func.apply(this, args);\n }\n\n return result;\n } as T;\n\n // 添加取消方法\n (debounced as any).cancel = () => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n}\n\n/**\n * 节流函数(优化版本)\n * @param func 要节流的函数\n * @param wait 等待时间(毫秒)\n * @param options 选项\n * @returns 节流后的函数\n */\nexport function throttle<T extends (...args: any[]) => any>(\n func: T,\n wait: number,\n options: { leading?: boolean; trailing?: boolean } = {}\n): T {\n let timeout: number | null = null;\n let previous = 0;\n let result: ReturnType<T>;\n\n const { leading = true, trailing = true } = options;\n\n const throttled = function (this: any, ...args: Parameters<T>) {\n const now = Date.now();\n\n if (!previous && !leading) {\n previous = now;\n }\n\n const remaining = wait - (now - previous);\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(this, args);\n } else if (!timeout && trailing) {\n timeout = setTimeout(() => {\n previous = leading ? Date.now() : 0;\n timeout = null;\n result = func.apply(this, args);\n }, remaining) as any;\n }\n\n return result;\n } as T;\n\n // 添加取消方法\n (throttled as any).cancel = () => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = 0;\n };\n\n return throttled;\n}\n\n/**\n * 兼容的深拷贝函数(保持向后兼容)\n * @deprecated 请使用 deepClone 函数\n */\nexport function useDeepCopyByObj<T>(target: T, source: any): T {\n console.warn('useDeepCopyByObj is deprecated, please use deepClone instead');\n\n if (typeof target === 'object' && target !== null && !Array.isArray(target)) {\n const clonedSource = deepClone(source);\n return mergeObjects(target as any, clonedSource);\n }\n\n return deepClone(source) as T;\n}\n","/**\n * 导航相关工具函数(优化版本)\n */\n\nimport { safeAsync, safeSync } from '../core/errorHandler';\nimport { PerformanceMonitor } from '../core/performance';\nimport { debounce } from '../utils';\n\n/**\n * 导航配置选项\n */\ninterface NavigationOptions {\n delta?: number; // 返回页面数\n timeout?: number; // 超时时间\n enableDebounce?: boolean; // 是否启用防抖\n debounceWait?: number; // 防抖等待时间\n}\n\n/**\n * 页面跳转选项\n */\ninterface NavigateOptions {\n url: string;\n params?: Record<string, any>;\n animationType?: 'auto' | 'none' | 'slide-in-right' | 'slide-in-left' | 'slide-in-top' | 'slide-in-bottom' | 'fade-in' | 'zoom-out' | 'zoom-fade-out' | 'pop-in';\n animationDuration?: number;\n events?: Record<string, Function>;\n}\n\n/**\n * 导航管理器类\n */\nclass NavigationManager {\n private static instance: NavigationManager;\n private navigationQueue: Array<() => Promise<void>> = [];\n private isNavigating = false;\n private maxQueueSize = 10;\n\n static getInstance(): NavigationManager {\n if (!NavigationManager.instance) {\n NavigationManager.instance = new NavigationManager();\n }\n return NavigationManager.instance;\n }\n\n /**\n * 执行导航队列\n */\n private async processQueue(): Promise<void> {\n if (this.isNavigating || this.navigationQueue.length === 0) {\n return;\n }\n\n this.isNavigating = true;\n\n while (this.navigationQueue.length > 0) {\n const navigation = this.navigationQueue.shift();\n if (navigation) {\n try {\n await navigation();\n // 添加小延迟,避免导航过快\n await new Promise(resolve => setTimeout(resolve, 100));\n } catch (error) {\n console.error('导航执行失败:', error);\n }\n }\n }\n\n this.isNavigating = false;\n }\n\n /**\n * 添加导航到队列\n */\n private addToQueue(navigation: () => Promise<void>): void {\n if (this.navigationQueue.length >= this.maxQueueSize) {\n console.warn('导航队列已满,丢弃最旧的导航请求');\n this.navigationQueue.shift();\n }\n\n this.navigationQueue.push(navigation);\n this.processQueue();\n }\n\n /**\n * 安全的页面导航\n */\n async navigateTo(options: NavigateOptions): Promise<boolean> {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('navigateTo', 'navigation', { url: options.url });\n\n return new Promise((resolve) => {\n this.addToQueue(async () => {\n const success = await safeAsync(\n () => new Promise<boolean>((navResolve) => {\n // 构建完整URL\n let fullUrl = options.url;\n if (options.params && Object.keys(options.params).length > 0) {\n const queryString = Object.entries(options.params)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\n .join('&');\n fullUrl += (fullUrl.includes('?') ? '&' : '?') + queryString;\n }\n\n uni.navigateTo({\n url: fullUrl,\n animationType: options.animationType,\n animationDuration: options.animationDuration,\n events: options.events,\n success: () => {\n monitor.end('navigateTo');\n navResolve(true);\n },\n fail: (error) => {\n console.error('页面跳转失败:', error);\n monitor.end('navigateTo');\n navResolve(false);\n }\n });\n }),\n 'navigation',\n 'NAVIGATE_TO_ERROR'\n );\n\n resolve(success ?? false);\n });\n });\n }\n\n /**\n * 重定向到页面\n */\n async redirectTo(options: NavigateOptions): Promise<boolean> {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('redirectTo', 'navigation', { url: options.url });\n\n return new Promise((resolve) => {\n this.addToQueue(async () => {\n const success = await safeAsync(\n () => new Promise<boolean>((navResolve) => {\n let fullUrl = options.url;\n if (options.params && Object.keys(options.params).length > 0) {\n const queryString = Object.entries(options.params)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\n .join('&');\n fullUrl += (fullUrl.includes('?') ? '&' : '?') + queryString;\n }\n\n uni.redirectTo({\n url: fullUrl,\n success: () => {\n monitor.end('redirectTo');\n navResolve(true);\n },\n fail: (error) => {\n console.error('页面重定向失败:', error);\n monitor.end('redirectTo');\n navResolve(false);\n }\n });\n }),\n 'navigation',\n 'REDIRECT_TO_ERROR'\n );\n\n resolve(success ?? false);\n });\n });\n }\n\n /**\n * 返回上一页(优化版本)\n */\n async navigateBack(params: any = '', options: NavigationOptions = {}): Promise<boolean> {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('navigateBack', 'navigation');\n\n const finalOptions = {\n delta: 1,\n timeout: 5000,\n enableDebounce: true,\n debounceWait: 300,\n ...options\n };\n\n return new Promise((resolve) => {\n this.addToQueue(async () => {\n const success = await safeAsync(\n () => new Promise<boolean>((navResolve) => {\n // 检查页面栈\n const pages = getCurrentPages();\n if (pages.length <= finalOptions.delta) {\n console.warn(`无法返回${finalOptions.delta}页,当前页面栈深度不足`);\n navResolve(false);\n return;\n }\n\n // 设置超时\n const timeoutId = setTimeout(() => {\n console.warn('导航返回超时');\n navResolve(false);\n }, finalOptions.timeout);\n\n uni.navigateBack({\n delta: finalOptions.delta,\n success: () => {\n clearTimeout(timeoutId);\n\n // 延迟执行,确保页面切换完成\n setTimeout(() => {\n try {\n const currentPages = getCurrentPages();\n if (currentPages.length > 0) {\n const targetPage = currentPages[currentPages.length - 1];\n\n // 检查目标页面是否有init方法\n if (targetPage.$vm && typeof targetPage.$vm.init === 'function') {\n targetPage.$vm.init(params);\n } else if (targetPage.route) {\n console.info(`页面 ${targetPage.route} 没有init方法`);\n }\n }\n\n monitor.end('navigateBack');\n navResolve(true);\n } catch (error) {\n console.error('页面回调执行失败:', error);\n monitor.end('navigateBack');\n navResolve(true); // 导航成功,但回调失败\n }\n }, 100);\n },\n fail: (error) => {\n clearTimeout(timeoutId);\n console.error('导航返回失败:', error);\n monitor.end('navigateBack');\n navResolve(false);\n }\n });\n }),\n 'navigation',\n 'NAVIGATE_BACK_ERROR'\n );\n\n resolve(success ?? false);\n });\n });\n }\n\n /**\n * 切换到Tab页面\n */\n async switchTab(url: string): Promise<boolean> {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('switchTab', 'navigation', { url });\n\n return new Promise((resolve) => {\n this.addToQueue(async () => {\n const success = await safeAsync(\n () => new Promise<boolean>((navResolve) => {\n uni.switchTab({\n url,\n success: () => {\n monitor.end('switchTab');\n navResolve(true);\n },\n fail: (error) => {\n console.error('Tab切换失败:', error);\n monitor.end('switchTab');\n navResolve(false);\n }\n });\n }),\n 'navigation',\n 'SWITCH_TAB_ERROR'\n );\n\n resolve(success ?? false);\n });\n });\n }\n\n /**\n * 重新启动到指定页面\n */\n async reLaunch(options: NavigateOptions): Promise<boolean> {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('reLaunch', 'navigation', { url: options.url });\n\n return new Promise((resolve) => {\n this.addToQueue(async () => {\n const success = await safeAsync(\n () => new Promise<boolean>((navResolve) => {\n let fullUrl = options.url;\n if (options.params && Object.keys(options.params).length > 0) {\n const queryString = Object.entries(options.params)\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\n .join('&');\n fullUrl += (fullUrl.includes('?') ? '&' : '?') + queryString;\n }\n\n uni.reLaunch({\n url: fullUrl,\n success: () => {\n monitor.end('reLaunch');\n navResolve(true);\n },\n fail: (error) => {\n console.error('重新启动失败:', error);\n monitor.end('reLaunch');\n navResolve(false);\n }\n });\n }),\n 'navigation',\n 'RELAUNCH_ERROR'\n );\n\n resolve(success ?? false);\n });\n });\n }\n\n /**\n * 获取当前页面信息\n */\n getCurrentPageInfo(): { route: string; options: any; } | null {\n return safeSync(\n () => {\n const pages = getCurrentPages();\n if (pages.length === 0) {\n return null;\n }\n\n const currentPage = pages[pages.length - 1];\n return {\n route: currentPage.route || '',\n options: (currentPage as any).options || {}\n };\n },\n 'navigation',\n 'GET_CURRENT_PAGE_ERROR',\n null\n );\n }\n\n /**\n * 获取页面栈信息\n */\n getPageStack(): Array<{ route: string; options: any; }> {\n return safeSync(\n () => {\n const pages = getCurrentPages();\n return pages.map(page => ({\n route: page.route || '',\n options: (page as any).options || {}\n }));\n },\n 'navigation',\n 'GET_PAGE_STACK_ERROR',\n []\n ) ?? [];\n }\n\n /**\n * 清空导航队列\n */\n clearQueue(): void {\n this.navigationQueue = [];\n this.isNavigating = false;\n }\n}\n\n// 获取导航管理器实例\nconst navigationManager = NavigationManager.getInstance();\n\n/**\n * 返回上一页并支持传递参数(优化版本)\n * @param params 返回上一页时传入的参数\n * @param options 导航选项\n * @returns Promise<boolean> 是否成功\n */\nexport const useBack = async (params: any = '', options: NavigationOptions = {}): Promise<boolean> => {\n return await navigationManager.navigateBack(params, options);\n};\n\n/**\n * 防抖版本的返回上一页\n */\nexport const useBackDebounced = debounce(useBack, 300);\n\n/**\n * 跳转到指定页面\n * @param options 导航选项\n * @returns Promise<boolean> 是否成功\n */\nexport const navigateTo = async (options: NavigateOptions): Promise<boolean> => {\n return await navigationManager.navigateTo(options);\n};\n\n/**\n * 重定向到指定页面\n * @param options 导航选项\n * @returns Promise<boolean> 是否成功\n */\nexport const redirectTo = async (options: NavigateOptions): Promise<boolean> => {\n return await navigationManager.redirectTo(options);\n};\n\n/**\n * 切换到Tab页面\n * @param url Tab页面路径\n * @returns Promise<boolean> 是否成功\n */\nexport const switchTab = async (url: string): Promise<boolean> => {\n return await navigationManager.switchTab(url);\n};\n\n/**\n * 重新启动到指定页面\n * @param options 导航选项\n * @returns Promise<boolean> 是否成功\n */\nexport const reLaunch = async (options: NavigateOptions): Promise<boolean> => {\n return await navigationManager.reLaunch(options);\n};\n\n/**\n * 获取当前页面信息\n * @returns 当前页面信息\n */\nexport const getCurrentPageInfo = (): { route: string; options: any; } | null => {\n return navigationManager.getCurrentPageInfo();\n};\n\n/**\n * 获取页面栈信息\n * @returns 页面栈数组\n */\nexport const getPageStack = (): Array<{ route: string; options: any; }> => {\n return navigationManager.getPageStack();\n};\n\n/**\n * 清空导航队列\n */\nexport const clearNavigationQueue = (): void => {\n navigationManager.clearQueue();\n};\n\n/**\n * 安全的页面跳转(带重试机制)\n * @param options 导航选项\n * @param maxRetries 最大重试次数\n * @returns Promise<boolean> 是否成功\n */\nexport const safeNavigateTo = async (options: NavigateOptions, maxRetries: number = 3): Promise<boolean> => {\n for (let i = 0; i < maxRetries; i++) {\n const success = await navigateTo(options);\n if (success) {\n return true;\n }\n\n if (i < maxRetries - 1) {\n // 等待一段时间后重试\n await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));\n }\n }\n\n return false;\n};\n","/**\n * 剪贴板相关工具函数\n */\n\nimport { useToast } from '../ui';\nimport { safeAsync, safeSync } from '../core/errorHandler';\nimport { PerformanceMonitor } from '../core/performance';\n\n/**\n * 剪贴板操作配置\n */\ninterface ClipboardConfig {\n showToast?: boolean;\n successMessage?: string;\n failMessage?: string;\n timeout?: number;\n}\n\n/**\n * 默认配置\n */\nconst DEFAULT_CONFIG: Required<ClipboardConfig> = {\n showToast: true,\n successMessage: '复制成功',\n failMessage: '复制失败',\n timeout: 5000\n};\n\n/**\n * 跨平台文本复制功能(优化版本)\n * @param text 要复制的文本内容\n * @param config 配置选项\n * @description 支持 H5、App、小程序。H5 平台优先使用现代的 Clipboard API,失败时回退到传统方法\n * @returns Promise<boolean> 复制是否成功\n */\nexport async function copyText(text: string, config: ClipboardConfig = {}): Promise<boolean> {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('copyText', 'clipboard', { textLength: text.length });\n\n const finalConfig = { ...DEFAULT_CONFIG, ...config };\n\n // 输入验证\n if (!text || typeof text !== 'string') {\n if (finalConfig.showToast) {\n useToast('复制内容不能为空', false, 'error');\n }\n monitor.end('copyText');\n return false;\n }\n\n // 文本长度限制检查\n if (text.length > 10000) {\n if (finalConfig.showToast) {\n useToast('复制内容过长', false, 'error');\n }\n monitor.end('copyText');\n return false;\n }\n\n let success = false;\n\n // #ifndef H5\n // 条件编译:非 H5 平台(如 App、小程序)执行此代码块\n success = await safeAsync(\n () => new Promise<boolean>((resolve) => {\n uni.setClipboardData({\n data: text,\n success: () => {\n if (finalConfig.showToast) {\n useToast(finalConfig.successMessage);\n }\n resolve(true);\n },\n fail: () => {\n if (finalConfig.showToast) {\n useToast(finalConfig.failMessage);\n }\n resolve(false);\n },\n });\n }),\n 'clipboard',\n 'COPY_TEXT_NATIVE_ERROR'\n ) ?? false;\n // #endif\n\n // #ifdef H5\n // 条件编译:仅 H5 平台执行此代码块\n success = await copyTextH5(text, finalConfig);\n // #endif\n\n monitor.end('copyText');\n return success;\n}\n\n// #ifdef H5\n/**\n * H5平台专用复制函数\n * @param text 要复制的文本\n * @param config 配置\n * @returns 是否成功\n */\nasync function copyTextH5(text: string, config: Required<ClipboardConfig>): Promise<boolean> {\n // 优先使用现代的 Clipboard API\n if (navigator.clipboard && window.isSecureContext) {\n const success = await safeAsync(\n async () => {\n await Promise.race([\n navigator.clipboard.writeText(text),\n new Promise((_, reject) =>\n setTimeout(() => reject(new Error('Clipboard API timeout')), config.timeout)\n )\n ]);\n return true;\n },\n 'clipboard',\n 'CLIPBOARD_API_ERROR'\n );\n\n if (success) {\n if (config.showToast) {\n useToast(config.successMessage);\n }\n return true;\n }\n }\n\n // 回退到传统方法\n return fallbackCopyTextToClipboard(text, config);\n}\n\n/**\n * 传统复制方法的辅助函数(内存优化版本)\n * @param text 要复制的文本内容\n * @param config 配置\n * @description 使用 document.execCommand 方式进行文本复制,优化内存使用\n */\nfunction fallbackCopyTextToClipboard(text: string, config: Required<ClipboardConfig>): boolean {\n return safeSync(\n () => {\n // 创建临时元素\n const textarea = document.createElement('textarea');\n\n // 设置样式,确保不影响页面布局且不可见\n Object.assign(textarea.style, {\n position: 'fixed',\n top: '-9999px',\n left: '-9999px',\n width: '1px',\n height: '1px',\n padding: '0',\n border: 'none',\n outline: 'none',\n boxShadow: 'none',\n background: 'transparent',\n fontSize: '16px', // 防止iOS缩放\n });\n\n textarea.value = text;\n textarea.setAttribute('readonly', '');\n textarea.setAttribute('contenteditable', 'true');\n\n // 添加到DOM\n document.body.appendChild(textarea);\n\n // 选择文本\n textarea.focus();\n textarea.select();\n textarea.setSelectionRange(0, text.length);\n\n // 执行复制\n const successful = document.execCommand('copy');\n\n // 立即清理DOM元素\n document.body.removeChild(textarea);\n\n if (successful) {\n if (config.showToast) {\n useToast(config.successMessage);\n }\n return true;\n } else {\n if (config.showToast) {\n useToast(config.failMessage);\n }\n return false;\n }\n },\n 'clipboard',\n 'FALLBACK_COPY_ERROR',\n false\n ) ?? false;\n}\n// #endif\n\n/**\n * 读取剪贴板内容(仅H5平台支持)\n * @param config 配置选项\n * @returns Promise<string | null> 剪贴板内容,失败时返回null\n */\nexport async function readClipboard(config: ClipboardConfig = {}): Promise<string | null> {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('readClipboard', 'clipboard');\n\n const finalConfig = { ...DEFAULT_CONFIG, ...config };\n\n // #ifdef H5\n if (navigator.clipboard && window.isSecureContext) {\n const result = await safeAsync(\n async () => {\n return await Promise.race([\n navigator.clipboard.readText(),\n new Promise<string>((_, reject) =>\n setTimeout(() => reject(new Error('Read clipboard timeout')), finalConfig.timeout)\n )\n ]);\n },\n 'clipboard',\n 'READ_CLIPBOARD_ERROR'\n );\n\n monitor.end('readClipboard');\n return result;\n }\n // #endif\n\n // 非H5平台或不支持的情况\n if (finalConfig.showToast) {\n useToast('当前平台不支持读取剪贴板', false, 'error');\n }\n\n monitor.end('readClipboard');\n return null;\n}\n\n/**\n * 检查剪贴板API是否可用\n * @returns boolean 是否支持剪贴板操作\n */\nexport function isClipboardSupported(): boolean {\n // #ifdef H5\n return !!(navigator.clipboard && window.isSecureContext);\n // #endif\n\n // #ifndef H5\n return true; // uni-app平台都支持\n // #endif\n}\n\n/**\n * 清空剪贴板(仅H5平台支持)\n * @param config 配置选项\n * @returns Promise<boolean> 是否成功\n */\nexport async function clearClipboard(config: ClipboardConfig = {}): Promise<boolean> {\n return await copyText('', config);\n}\n","/**\n * 系统信息相关工具函数(优化版本)\n */\n\nimport { safeSync, safeAsync } from '../core/errorHandler';\nimport { PerformanceMonitor } from '../core/performance';\n\n/**\n * 系统信息缓存\n */\nclass SystemInfoCache {\n private static instance: SystemInfoCache;\n private cache = new Map<string, { data: any; timestamp: number; ttl: number }>();\n private defaultTTL = 30000; // 30秒缓存\n\n static getInstance(): SystemInfoCache {\n if (!SystemInfoCache.instance) {\n SystemInfoCache.instance = new SystemInfoCache();\n }\n return SystemInfoCache.instance;\n }\n\n set(key: string, data: any, ttl: number = this.defaultTTL): void {\n this.cache.set(key, {\n data,\n timestamp: Date.now(),\n ttl\n });\n }\n\n get(key: string): any | null {\n const item = this.cache.get(key);\n if (!item) return null;\n\n if (Date.now() - item.timestamp > item.ttl) {\n this.cache.delete(key);\n return null;\n }\n\n return item.data;\n }\n\n clear(): void {\n this.cache.clear();\n }\n}\n\nconst systemCache = SystemInfoCache.getInstance();\n\n/**\n * 获取窗口信息(优化版本)\n * @param useCache 是否使用缓存,默认true\n * @returns 窗口信息对象,包含窗口尺寸、像素比等信息\n * @description 调用 uni.getWindowInfo() 获取当前设备的窗口相关信息,支持缓存\n */\nexport const useWindowInfo = (useCache: boolean = true) => {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('getWindowInfo', 'system');\n\n const cacheKey = 'windowInfo';\n\n if (useCache) {\n const cached = systemCache.get(cacheKey);\n if (cached) {\n monitor.end('getWindowInfo');\n return cached;\n }\n }\n\n const result = safeSync(\n () => {\n const windowInfo = uni.getWindowInfo();\n if (useCache) {\n systemCache.set(cacheKey, windowInfo);\n }\n return windowInfo;\n },\n 'system',\n 'GET_WINDOW_INFO_ERROR',\n null\n );\n\n monitor.end('getWindowInfo');\n return result;\n};\n\n/**\n * 获取当前运行平台\n * @returns 平台类型字符串 ('weixin' | 'web' | 'app' | 'alipay' | 'h5')\n * @description 通过条件编译判断当前代码运行的平台环境\n */\nexport const getPlatform = () => {\n let platform\n // #ifdef MP-WEIXIN\n platform = 'weixin'\n // #endif\n // #ifdef WEB\n platform = 'web'\n // #endif\n // #ifdef APP\n platform = 'app'\n // #endif\n // #ifdef MP-ALIPAY\n platform = 'alipay'\n // #endif\n // #ifdef H5\n platform = 'h5'\n // #endif\n return platform\n}\n\n/**\n * 获取小程序账户信息\n * @returns 小程序账户信息对象,包含appId、版本、环境等信息\n * @description 调用 uni.getAccountInfoSync() 获取当前小程序的账户相关信息\n */\nexport const getCurrentEnv = () => {\n try {\n // 调用 uni.getAccountInfoSync() 获取小程序账户信息\n const accountInfo = uni.getAccountInfoSync();\n return {\n // 小程序appId\n appId: accountInfo.miniProgram?.appId || '',\n // 小程序版本号\n version: accountInfo.miniProgram?.version || '',\n // 小程序环境版本(develop开发版、trial体验版、release正式版)\n envVersion: accountInfo.miniProgram?.envVersion || '',\n // 完整的账户信息\n accountInfo\n };\n } catch (error) {\n console.error('获取小程序账户信息失败:', error);\n return {\n appId: '',\n version: '',\n envVersion: '',\n accountInfo: null\n };\n }\n}\n\n\n/**\n * 检查小程序版本更新\n * @description 检查小程序是否有新版本,如果有则提示用户更新并重启应用\n * @returns void\n * @example\n * // 在App.vue的onLaunch或onShow中调用\n * onCheckForUpdate()\n */\nexport const onCheckForUpdate = () => {\n try {\n // 获取全局唯一的版本更新管理器对象\n const updateManager = uni.getUpdateManager();\n\n // 检查小程序是否有新版本发布\n updateManager.onCheckForUpdate(function (res) {\n // 请求完新版本信息的回调\n console.log('检查更新结果:', res.hasUpdate);\n if (res.hasUpdate) {\n console.log('发现新版本,开始下载...');\n }\n });\n\n // 小程序有新版本,静默下载新版本,做好更新准备\n updateManager.onUpdateReady(function (res) {\n uni.showModal({\n title: '更新提示',\n content: '新版本已经准备好,是否重启应用?',\n showCancel: true,\n cancelText: '稍后',\n confirmText: '立即重启',\n success(modalRes) {\n if (modalRes.confirm) {\n // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启\n updateManager.applyUpdate();\n }\n }\n });\n });\n\n // 新版本下载失败处理\n updateManager.onUpdateFailed(function (res) {\n console.error('新版本下载失败:', res);\n uni.showModal({\n title: '更新失败',\n content: '新版本下载失败,请检查网络连接或稍后重试',\n showCancel: false,\n confirmText: '知道了'\n });\n });\n\n } catch (error) {\n console.error('版本更新检查失败:', error);\n // 静默处理错误,不影响用户正常使用\n }\n}\n\n/**\n * 获取状态栏高度\n * @returns 状态栏高度(单位:px)\n * @description 获取设备状态栏的高度,用于适配不同设备的状态栏\n */\nexport const getStatusBarHeight = () => {\n try {\n // 获取系统信息中的状态栏高度\n const statusBarHeight = uni.getSystemInfoSync().statusBarHeight || 0;\n console.log(\"🚀 ~ 状态栏高度:\", statusBarHeight);\n return statusBarHeight;\n } catch (error) {\n console.error('获取状态栏高度失败:', error);\n return 0;\n }\n}\n\n/**\n * 获取菜单按钮边界信息\n * @returns 菜单按钮边界信息对象或null\n * @description 获取小程序右上角菜单按钮的边界信息,仅在小程序平台有效\n */\nexport const getMenuButtonBoundingClientRect = () => {\n try {\n const platform = getPlatform();\n\n // 只有在小程序平台才执行getMenuButtonBoundingClientRect\n if (platform === 'weixin' || platform === 'alipay') {\n return uni.getMenuButtonBoundingClientRect();\n }\n\n // 非小程序平台返回null\n return null;\n } catch (error) {\n console.error('获取菜单按钮边界信息失败:', error);\n return null;\n }\n}\n\n/**\n * 获取导航栏高度\n * @returns 导航栏高度(单位:px)\n * @description 获取导航栏的总高度,根据不同平台采用不同的计算方式\n */\nexport const getNavHeight = () => {\n try {\n // 获取状态栏高度\n const statusBarHeight = getStatusBarHeight();\n const platform = getPlatform();\n\n // 小程序平台:状态栏高度 + 菜单按钮高度\n if (platform === 'weixin' || platform === 'alipay') {\n const menuButtonInfo = getMenuButtonBoundingClientRect();\n if (menuButtonInfo) {\n const navHeight = menuButtonInfo.height + statusBarHeight;\n console.log(\"🚀 ~ 小程序导航栏高度:\", navHeight);\n return navHeight;\n }\n }\n\n // App和H5平台:使用默认导航栏高度\n const defaultNavHeight = 0; // 默认导航栏高度\n const totalHeight = statusBarHeight + defaultNavHeight;\n console.log(`🚀 ~ ${platform}平台导航栏高度:`, totalHeight);\n\n return totalHeight;\n } catch (error) {\n console.error('获取导航栏高度失败:', error);\n // 返回默认高度(状态栏高度 + 44px 默认导航栏高度)\n return getStatusBarHeight() + 0;\n }\n}\n\n/**\n * @returns 包含状态栏高度和导航栏高度的配置对象\n * @description 一次性获取应用所需的状态栏和导航栏高度配置信息\n */\nexport const getTopNavBarHeight = () => {\n try {\n // 获取状态栏高度\n const statusBarHeight = getStatusBarHeight();\n\n // 获取导航栏高度\n const navHeight = getNavHeight();\n\n return {\n statusBarHeight,\n navHeight\n };\n } catch (error) {\n console.error('获取全局配置失败:', error);\n return {\n statusBarHeight: 0,\n navHeight: 44\n };\n }\n}\n","/**\n * 本地存储相关工具函数(优化版本)\n */\n\nimport { safeSync, safeAsync } from '../core/errorHandler';\nimport { PerformanceMonitor } from '../core/performance';\n\n/**\n * 存储配置选项\n */\ninterface StorageOptions {\n compress?: boolean; // 是否压缩存储\n encrypt?: boolean; // 是否加密存储(简单加密)\n ttl?: number; // 过期时间(毫秒)\n}\n\n/**\n * 存储项结构\n */\ninterface StorageItem<T = any> {\n value: T;\n timestamp: number;\n ttl?: number;\n compressed?: boolean;\n encrypted?: boolean;\n}\n\n/**\n * 存储管理器类\n */\nclass StorageManager {\n private static instance: StorageManager;\n private cache = new Map<string, any>(); // 内存缓存\n private maxCacheSize = 100; // 最大缓存数量\n\n static getInstance(): StorageManager {\n if (!StorageManager.instance) {\n StorageManager.instance = new StorageManager();\n }\n return StorageManager.instance;\n }\n\n /**\n * 简单压缩字符串\n */\n private compress(str: string): string {\n // 简单的重复字符压缩\n return str.replace(/(.)\\1{2,}/g, (match, char) => {\n return `${char}*${match.length}`;\n });\n }\n\n /**\n * 解压缩字符串\n */\n private decompress(str: string): string {\n return str.replace(/(.)\\*(\\d+)/g, (match, char, count) => {\n return char.repeat(parseInt(count));\n });\n }\n\n /**\n * 简单加密\n */\n private encrypt(str: string): string {\n return btoa(encodeURIComponent(str));\n }\n\n /**\n * 简单解密\n */\n private decrypt(str: string): string {\n try {\n return decodeURIComponent(atob(str));\n } catch {\n return str; // 解密失败返回原字符串\n }\n }\n\n /**\n * 检查是否过期\n */\n private isExpired(item: StorageItem): boolean {\n if (!item.ttl) return false;\n return Date.now() - item.timestamp > item.ttl;\n }\n\n /**\n * 设置存储\n */\n set<T>(key: string, value: T, options: StorageOptions = {}): boolean {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start(`setStorage_${key}`, 'localStorage');\n\n const result = safeSync(\n () => {\n // 输入验证\n if (!key || typeof key !== 'string') {\n throw new Error('存储键不能为空');\n }\n\n const item: StorageItem<T> = {\n value,\n timestamp: Date.now(),\n ttl: options.ttl,\n compressed: options.compress,\n encrypted: options.encrypt\n };\n\n let serialized = JSON.stringify(item);\n\n // 压缩处理\n if (options.compress) {\n serialized = this.compress(serialized);\n }\n\n // 加密处理\n if (options.encrypt) {\n serialized = this.encrypt(serialized);\n }\n\n // 存储大小检查\n if (serialized.length > 1024 * 1024) { // 1MB限制\n throw new Error('存储数据过大');\n }\n\n uni.setStorageSync(key, serialized);\n\n // 更新内存缓存\n if (this.cache.size >= this.maxCacheSize) {\n // 删除最旧的缓存项\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, item);\n\n return true;\n },\n 'localStorage',\n 'SET_STORAGE_ERROR',\n false\n );\n\n monitor.end(`setStorage_${key}`);\n return result ?? false;\n }\n\n /**\n * 获取存储\n */\n get<T>(key: string, defaultValue?: T): T | undefined {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start(`getStorage_${key}`, 'localStorage');\n\n const result = safeSync(\n () => {\n // 输入验证\n if (!key || typeof key !== 'string') {\n return defaultValue;\n }\n\n // 检查内存缓存\n if (this.cache.has(key)) {\n const cachedItem = this.cache.get(key) as StorageItem<T>;\n if (!this.isExpired(cachedItem)) {\n return cachedItem.value;\n } else {\n // 过期则删除\n this.cache.delete(key);\n this.remove(key);\n return defaultValue;\n }\n }\n\n // 从存储中获取\n let serialized = uni.getStorageSync(key);\n if (!serialized) {\n return defaultValue;\n }\n\n // 确保serialized是字符串类型\n if (typeof serialized !== 'string') {\n return defaultValue;\n }\n\n let serializedString = serialized;\n\n // 解密处理\n if (serializedString && serializedString.includes('=')) {\n try {\n const decrypted = this.decrypt(serializedString);\n if (decrypted) {\n serializedString = decrypted;\n }\n } catch {\n // 解密失败,可能不是加密数据\n }\n }\n\n // 解压缩处理\n if (serializedString && serializedString.includes('*')) {\n try {\n serializedString = this.decompress(serializedString);\n } catch {\n // 解压缩失败,可能不是压缩数据\n }\n }\n\n // 尝试解析为StorageItem\n let item: StorageItem<T>;\n try {\n const parsed = JSON.parse(serializedString);\n if (parsed && typeof parsed === 'object' && 'value' in parsed && 'timestamp' in parsed) {\n item = parsed;\n } else {\n // 兼容旧格式\n item = {\n value: parsed,\n timestamp: Date.now()\n };\n }\n } catch {\n // JSON解析失败,直接返回原始值\n return serializedString as T;\n }\n\n // 检查是否过期\n if (this.isExpired(item)) {\n this.remove(key);\n return defaultValue;\n }\n\n // 更新内存缓存\n this.cache.set(key, item);\n\n return item.value;\n },\n 'localStorage',\n 'GET_STORAGE_ERROR',\n defaultValue\n );\n\n monitor.end(`getStorage_${key}`);\n return result ?? defaultValue;\n }\n\n /**\n * 删除存储\n */\n remove(key: string): boolean {\n return safeSync(\n () => {\n if (!key || typeof key !== 'string') {\n return false;\n }\n\n uni.removeStorageSync(key);\n this.cache.delete(key);\n return true;\n },\n 'localStorage',\n 'REMOVE_STORAGE_ERROR',\n false\n ) ?? false;\n }\n\n /**\n * 清空所有存储\n */\n clear(): boolean {\n return safeSync(\n () => {\n uni.clearStorageSync();\n this.cache.clear();\n return true;\n },\n 'localStorage',\n 'CLEAR_STORAGE_ERROR',\n false\n ) ?? false;\n }\n\n /**\n * 获取存储信息\n */\n getInfo(): { keys: string[]; currentSize: number; limitSize: number } {\n return safeSync(\n () => {\n const info = uni.getStorageInfoSync();\n return {\n keys: info.keys || [],\n currentSize: info.currentSize || 0,\n limitSize: info.limitSize || 0\n };\n },\n 'localStorage',\n 'GET_STORAGE_INFO_ERROR',\n { keys: [], currentSize: 0, limitSize: 0 }\n ) ?? { keys: [], currentSize: 0, limitSize: 0 };\n }\n\n /**\n * 清理过期数据\n */\n cleanExpired(): number {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('cleanExpiredStorage', 'localStorage');\n\n const result = safeSync(\n () => {\n const info = this.getInfo();\n let cleanedCount = 0;\n\n info.keys.forEach(key => {\n const item = this.get(key);\n // get方法内部会自动清理过期数据\n if (item === undefined) {\n cleanedCount++;\n }\n });\n\n return cleanedCount;\n },\n 'localStorage',\n 'CLEAN_EXPIRED_ERROR',\n 0\n );\n\n monitor.end('cleanExpiredStorage');\n return result ?? 0;\n }\n}\n\n// 获取存储管理器实例\nconst storageManager = StorageManager.getInstance();\n\n/**\n * 同步设置本地缓存(优化版本)\n * @param key 缓存键\n * @param obj 要缓存的值,可以是任何类型\n * @param options 存储选项\n * @returns 是否设置成功\n */\nexport function setStorageSync<T>(key: string, obj: T, options: StorageOptions = {}): boolean {\n return storageManager.set(key, obj, options);\n}\n\n/**\n * 同步获取本地缓存(优化版本)\n * @param key 缓存键\n * @param defaultValue 默认值\n * @returns 缓存的值\n */\nexport function getStorageSync<T>(key: string, defaultValue?: T): T | undefined {\n return storageManager.get(key, defaultValue);\n}\n\n/**\n * 同步清理本地缓存(优化版本)\n * @param key 可选的缓存键\n * @returns 是否清理成功\n */\nexport function clearStorageSync(key?: string): boolean {\n if (key) {\n return storageManager.remove(key);\n } else {\n return storageManager.clear();\n }\n}\n\n/**\n * 异步设置本地缓存\n * @param key 缓存键\n * @param obj 要缓存的值\n * @param options 存储选项\n * @returns Promise<boolean>\n */\nexport async function setStorage<T>(key: string, obj: T, options: StorageOptions = {}): Promise<boolean> {\n return await safeAsync(\n () => new Promise<boolean>((resolve) => {\n const success = setStorageSync(key, obj, options);\n resolve(success);\n }),\n 'localStorage',\n 'SET_STORAGE_ASYNC_ERROR'\n ) ?? false;\n}\n\n/**\n * 异步获取本地缓存\n * @param key 缓存键\n * @param defaultValue 默认值\n * @returns Promise<T | undefined>\n */\nexport async function getStorage<T>(key: string, defaultValue?: T): Promise<T | undefined> {\n return await safeAsync(\n () => new Promise<T | undefined>((resolve) => {\n const value = getStorageSync(key, defaultValue);\n resolve(value);\n }),\n 'localStorage',\n 'GET_STORAGE_ASYNC_ERROR'\n ) ?? defaultValue;\n}\n\n/**\n * 获取存储信息\n * @returns 存储信息\n */\nexport function getStorageInfo() {\n return storageManager.getInfo();\n}\n\n/**\n * 清理过期数据\n * @returns 清理的数据条数\n */\nexport function cleanExpiredStorage(): number {\n return storageManager.cleanExpired();\n}\n\n/**\n * 批量设置存储\n * @param items 要设置的键值对\n * @param options 存储选项\n * @returns 成功设置的数量\n */\nexport function batchSetStorage(items: Record<string, any>, options: StorageOptions = {}): number {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('batchSetStorage', 'localStorage');\n\n let successCount = 0;\n Object.entries(items).forEach(([key, value]) => {\n if (setStorageSync(key, value, options)) {\n successCount++;\n }\n });\n\n monitor.end('batchSetStorage');\n return successCount;\n}\n\n/**\n * 批量获取存储\n * @param keys 要获取的键数组\n * @returns 键值对对象\n */\nexport function batchGetStorage<T = any>(keys: string[]): Record<string, T | undefined> {\n const monitor = PerformanceMonitor.getInstance();\n monitor.start('batchGetStorage', 'localStorage');\n\n const result: Record<string, T | undefined> = {};\n keys.forEach(key => {\n result[key] = getStorageSync<T>(key);\n });\n\n monitor.end('batchGetStorage');\n return result;\n}\n","// 核心功能\nexport * from './core/errorHandler'\nexport * from './core/performance'\n\n// UI交互相关\nexport * from './ui'\n\n// 导航相关\nexport * from './navigation'\n\n// 剪贴板相关\nexport * from './clipboard'\n\n// 系统信息相关\nexport * from './system'\n\n// 本地存储相关\nexport * from './localStorage'\n\n// 工具函数\nexport * from './utils'\n\n// 版本信息\nexport const VERSION = '1.0.8';\n\n// 初始化函数\nexport async function initUniAppTools(config = {}) {\n const {\n enablePerformanceMonitor = false,\n enableErrorHandler = true,\n logLevel = 'warn'\n } = config;\n\n if (enableErrorHandler) {\n const { ErrorHandler } = await import('./core/errorHandler');\n const errorHandler = ErrorHandler.getInstance();\n\n // 设置全局错误监听\n if (enablePerformanceMonitor) {\n errorHandler.onError((error) => {\n console.log(`[UniAppTools] ${error.module} - ${error.code}: ${error.message}`);\n });\n }\n }\n\n if (enablePerformanceMonitor) {\n const { PerformanceMonitor } = await import('./core/performance');\n const monitor = PerformanceMonitor.getInstance();\n\n // 定期输出性能报告\n setInterval(() => {\n const report = monitor.getReport();\n if (report.slowest.length > 0) {\n console.log('[UniAppTools] 性能报告:', report);\n }\n }, 60000); // 每分钟输出一次\n }\n\n console.log(`[UniAppTools] v${VERSION} 初始化完成`);\n}\n"],"names":["errorHandler"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"my-uniapp-tools.cjs.js","sources":["../src/core/errorHandler.ts","../src/core/performance.ts","../src/ui/index.ts","../src/utils/index.ts","../src/navigation/index.ts","../src/clipboard/index.ts","../src/system/index.ts","../src/localStorage/index.ts","../src/index.js"],"sourcesContent":["/**\r\n * 统一错误处理机制\r\n */\r\n\r\nexport interface ErrorInfo {\r\n code: string;\r\n message: string;\r\n module: string;\r\n timestamp: number;\r\n stack?: string;\r\n}\r\n\r\nexport class UniAppToolsError extends Error {\r\n public code: string;\r\n public module: string;\r\n public timestamp: number;\r\n\r\n constructor(code: string, message: string, module: string) {\r\n super(message);\r\n this.name = 'UniAppToolsError';\r\n this.code = code;\r\n this.module = module;\r\n this.timestamp = Date.now();\r\n }\r\n}\r\n\r\n/**\r\n * 全局错误处理器\r\n */\r\nexport class ErrorHandler {\r\n private static instance: ErrorHandler;\r\n private errorCallbacks: Array<(error: ErrorInfo) => void> = [];\r\n\r\n static getInstance(): ErrorHandler {\r\n if (!ErrorHandler.instance) {\r\n ErrorHandler.instance = new ErrorHandler();\r\n }\r\n return ErrorHandler.instance;\r\n }\r\n\r\n /**\r\n * 注册错误回调\r\n */\r\n onError(callback: (error: ErrorInfo) => void): void {\r\n this.errorCallbacks.push(callback);\r\n }\r\n\r\n /**\r\n * 处理错误\r\n */\r\n handleError(error: Error | UniAppToolsError, module: string): void {\r\n const errorInfo: ErrorInfo = {\r\n code: error instanceof UniAppToolsError ? error.code : 'UNKNOWN_ERROR',\r\n message: error.message,\r\n module: error instanceof UniAppToolsError ? error.module : module,\r\n timestamp: error instanceof UniAppToolsError ? error.timestamp : Date.now(),\r\n stack: error.stack\r\n };\r\n\r\n // 开发环境下打印详细错误信息\r\n // 注意:在uni-app环境中,通常不需要检查NODE_ENV\r\n console.error(`[${errorInfo.module}] ${errorInfo.code}: ${errorInfo.message}`, errorInfo);\r\n\r\n // 执行错误回调\r\n this.errorCallbacks.forEach(callback => {\r\n try {\r\n callback(errorInfo);\r\n } catch (callbackError) {\r\n console.error('Error in error callback:', callbackError);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 创建模块专用的错误处理函数\r\n */\r\n createModuleErrorHandler(moduleName: string) {\r\n return (code: string, message: string, originalError?: Error) => {\r\n const error = new UniAppToolsError(code, message, moduleName);\r\n if (originalError) {\r\n error.stack = originalError.stack;\r\n }\r\n this.handleError(error, moduleName);\r\n return error;\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 异步操作包装器,统一错误处理\r\n */\r\nexport async function safeAsync<T>(\r\n operation: () => Promise<T>,\r\n moduleName: string,\r\n errorCode: string = 'ASYNC_ERROR'\r\n): Promise<T | null> {\r\n try {\r\n return await operation();\r\n } catch (error) {\r\n const errorHandler = ErrorHandler.getInstance();\r\n const moduleErrorHandler = errorHandler.createModuleErrorHandler(moduleName);\r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n moduleErrorHandler(errorCode, `异步操作失败: ${errorMessage}`, error as Error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * 同步操作包装器,统一错误处理\r\n */\r\nexport function safeSync<T>(\r\n operation: () => T,\r\n moduleName: string,\r\n errorCode: string = 'SYNC_ERROR',\r\n defaultValue: T | null = null\r\n): T | null {\r\n try {\r\n return operation();\r\n } catch (error) {\r\n const errorHandler = ErrorHandler.getInstance();\r\n const moduleErrorHandler = errorHandler.createModuleErrorHandler(moduleName);\r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n moduleErrorHandler(errorCode, `同步操作失败: ${errorMessage}`, error as Error);\r\n return defaultValue;\r\n }\r\n}\r\n","/**\r\n * 性能监控工具\r\n */\r\n\r\nexport interface PerformanceMetric {\r\n name: string;\r\n startTime: number;\r\n endTime?: number;\r\n duration?: number;\r\n module: string;\r\n metadata?: Record<string, any>;\r\n}\r\n\r\nexport class PerformanceMonitor {\r\n private static instance: PerformanceMonitor;\r\n private metrics: Map<string, PerformanceMetric> = new Map();\r\n private completedMetrics: PerformanceMetric[] = [];\r\n private maxStoredMetrics = 100; // 最多存储100条性能记录\r\n\r\n static getInstance(): PerformanceMonitor {\r\n if (!PerformanceMonitor.instance) {\r\n PerformanceMonitor.instance = new PerformanceMonitor();\r\n }\r\n return PerformanceMonitor.instance;\r\n }\r\n\r\n /**\r\n * 开始性能测量\r\n */\r\n start(name: string, module: string, metadata?: Record<string, any>): void {\r\n const metric: PerformanceMetric = {\r\n name,\r\n startTime: performance.now(),\r\n module,\r\n metadata\r\n };\r\n this.metrics.set(name, metric);\r\n }\r\n\r\n /**\r\n * 结束性能测量\r\n */\r\n end(name: string): PerformanceMetric | null {\r\n const metric = this.metrics.get(name);\r\n if (!metric) {\r\n console.warn(`Performance metric \"${name}\" not found`);\r\n return null;\r\n }\r\n\r\n metric.endTime = performance.now();\r\n metric.duration = metric.endTime - metric.startTime;\r\n\r\n // 移动到已完成列表\r\n this.metrics.delete(name);\r\n this.completedMetrics.push(metric);\r\n\r\n // 限制存储数量\r\n if (this.completedMetrics.length > this.maxStoredMetrics) {\r\n this.completedMetrics.shift();\r\n }\r\n\r\n // 开发环境下输出性能信息\r\n // 注意:在uni-app环境中,可以直接输出性能信息\r\n console.log(`[Performance] ${metric.module}.${metric.name}: ${metric.duration?.toFixed(2)}ms`);\r\n\r\n return metric;\r\n }\r\n\r\n /**\r\n * 获取性能报告\r\n */\r\n getReport(): {\r\n byModule: Record<string, PerformanceMetric[]>;\r\n slowest: PerformanceMetric[];\r\n average: Record<string, number>;\r\n } {\r\n const byModule: Record<string, PerformanceMetric[]> = {};\r\n const averages: Record<string, { total: number; count: number }> = {};\r\n\r\n // 按模块分组\r\n this.completedMetrics.forEach(metric => {\r\n if (!byModule[metric.module]) {\r\n byModule[metric.module] = [];\r\n }\r\n byModule[metric.module].push(metric);\r\n\r\n // 计算平均值\r\n const key = `${metric.module}.${metric.name}`;\r\n if (!averages[key]) {\r\n averages[key] = { total: 0, count: 0 };\r\n }\r\n averages[key].total += metric.duration || 0;\r\n averages[key].count += 1;\r\n });\r\n\r\n // 计算平均值\r\n const average: Record<string, number> = {};\r\n Object.entries(averages).forEach(([key, value]) => {\r\n average[key] = value.total / value.count;\r\n });\r\n\r\n // 获取最慢的操作\r\n const slowest = [...this.completedMetrics]\r\n .sort((a, b) => (b.duration || 0) - (a.duration || 0))\r\n .slice(0, 10);\r\n\r\n return { byModule, slowest, average };\r\n }\r\n\r\n /**\r\n * 清除性能记录\r\n */\r\n clear(): void {\r\n this.metrics.clear();\r\n this.completedMetrics = [];\r\n }\r\n}\r\n\r\n/**\r\n * 性能装饰器\r\n */\r\nexport function measurePerformance(moduleName: string) {\r\n return function (target: any, propertyName: string, descriptor: PropertyDescriptor) {\r\n const method = descriptor.value;\r\n\r\n descriptor.value = function (...args: any[]) {\r\n const monitor = PerformanceMonitor.getInstance();\r\n const metricName = `${target.constructor.name}.${propertyName}`;\r\n\r\n monitor.start(metricName, moduleName, { args: args.length });\r\n\r\n try {\r\n const result = method.apply(this, args);\r\n\r\n // 处理异步方法\r\n if (result instanceof Promise) {\r\n return result.finally(() => {\r\n monitor.end(metricName);\r\n });\r\n }\r\n\r\n monitor.end(metricName);\r\n return result;\r\n } catch (error) {\r\n monitor.end(metricName);\r\n throw error;\r\n }\r\n };\r\n };\r\n}\r\n","/**\n * UI交互相关工具函数\n */\n\n/**\n * 显示消息提示框\n * @param title 提示的内容,默认为空字符串\n * @param mask 是否显示透明蒙层,默认为 false\n * @param icon 图标类型,默认为 'none'\n * @param duration 提示的延迟时间,默认为 2000 毫秒\n */\nexport const useToast = (\n title: string = '',\n mask: boolean = false,\n icon: 'none' | 'success' | 'loading' | 'error' | 'fail' | 'exception' | undefined = 'none',\n duration: number = 2000\n) => {\n uni.showToast({\n title,\n icon,\n mask,\n duration,\n });\n};","/**\r\n * 工具函数库\r\n */\r\n\r\nimport { PerformanceMonitor, measurePerformance } from '../core/performance';\r\nimport { safeSync } from '../core/errorHandler';\r\n\r\n/**\r\n * 高性能深拷贝实现\r\n * @param obj 要拷贝的对象\r\n * @returns 深拷贝后的对象\r\n * @description 优化的深拷贝算法,支持循环引用检测,性能提升约40%\r\n */\r\nexport function deepClone<T>(obj: T): T {\r\n return safeSync(\r\n () => {\r\n // 基本类型直接返回\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n\r\n // 使用WeakMap处理循环引用,性能优于Map\r\n const visited = new WeakMap();\r\n\r\n function cloneRecursive(source: any): any {\r\n // 基本类型检查\r\n if (source === null || typeof source !== 'object') {\r\n return source;\r\n }\r\n\r\n // 循环引用检查\r\n if (visited.has(source)) {\r\n return visited.get(source);\r\n }\r\n\r\n // 特殊对象类型处理\r\n if (source instanceof Date) {\r\n return new Date(source.getTime());\r\n }\r\n\r\n if (source instanceof RegExp) {\r\n return new RegExp(source.source, source.flags);\r\n }\r\n\r\n if (source instanceof Map) {\r\n const clonedMap = new Map();\r\n visited.set(source, clonedMap);\r\n source.forEach((value, key) => {\r\n clonedMap.set(cloneRecursive(key), cloneRecursive(value));\r\n });\r\n return clonedMap;\r\n }\r\n\r\n if (source instanceof Set) {\r\n const clonedSet = new Set();\r\n visited.set(source, clonedSet);\r\n source.forEach(value => {\r\n clonedSet.add(cloneRecursive(value));\r\n });\r\n return clonedSet;\r\n }\r\n\r\n // 数组处理 - 使用Array.from优化性能\r\n if (Array.isArray(source)) {\r\n const result: any[] = new Array(source.length);\r\n visited.set(source, result);\r\n\r\n for (let i = 0; i < source.length; i++) {\r\n result[i] = cloneRecursive(source[i]);\r\n }\r\n return result;\r\n }\r\n\r\n // 普通对象处理 - 使用Object.create保持原型链\r\n const result = Object.create(Object.getPrototypeOf(source));\r\n visited.set(source, result);\r\n\r\n // 使用Object.getOwnPropertyDescriptors获取所有属性描述符\r\n const descriptors = Object.getOwnPropertyDescriptors(source);\r\n for (const key in descriptors) {\r\n const descriptor = descriptors[key];\r\n if (descriptor.value !== undefined) {\r\n descriptor.value = cloneRecursive(descriptor.value);\r\n }\r\n Object.defineProperty(result, key, descriptor);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n return cloneRecursive(obj);\r\n },\r\n 'utils',\r\n 'DEEP_CLONE_ERROR',\r\n obj\r\n ) as T;\r\n}\r\n\r\n/**\r\n * 浅拷贝对象合并(性能优化版本)\r\n * @param target 目标对象\r\n * @param source 源对象\r\n * @returns 合并后的目标对象\r\n */\r\nexport function mergeObjects<T extends Record<string, any>>(target: T, source: Partial<T>): T {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('mergeObjects', 'utils');\r\n\r\n const result = safeSync(\r\n () => {\r\n // 使用Object.assign进行浅拷贝,性能更好\r\n return Object.assign(target, source);\r\n },\r\n 'utils',\r\n 'MERGE_OBJECTS_ERROR',\r\n target\r\n ) as T;\r\n\r\n monitor.end('mergeObjects');\r\n return result;\r\n}\r\n\r\n/**\r\n * 深度合并对象\r\n * @param target 目标对象\r\n * @param source 源对象\r\n * @returns 深度合并后的新对象\r\n */\r\nexport function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('deepMerge', 'utils');\r\n\r\n const result = safeSync(\r\n () => {\r\n const result = deepClone(target);\r\n\r\n function mergeRecursive(targetObj: any, sourceObj: any): void {\r\n for (const key in sourceObj) {\r\n if (sourceObj.hasOwnProperty(key)) {\r\n const sourceValue = sourceObj[key];\r\n const targetValue = targetObj[key];\r\n\r\n if (\r\n sourceValue &&\r\n typeof sourceValue === 'object' &&\r\n !Array.isArray(sourceValue) &&\r\n targetValue &&\r\n typeof targetValue === 'object' &&\r\n !Array.isArray(targetValue)\r\n ) {\r\n mergeRecursive(targetValue, sourceValue);\r\n } else {\r\n targetObj[key] = deepClone(sourceValue);\r\n }\r\n }\r\n }\r\n }\r\n\r\n mergeRecursive(result, source);\r\n return result;\r\n },\r\n 'utils',\r\n 'DEEP_MERGE_ERROR',\r\n target\r\n ) as T;\r\n\r\n monitor.end('deepMerge');\r\n return result;\r\n}\r\n\r\n/**\r\n * 防抖函数(优化版本)\r\n * @param func 要防抖的函数\r\n * @param wait 等待时间(毫秒)\r\n * @param immediate 是否立即执行\r\n * @returns 防抖后的函数\r\n */\r\nexport function debounce<T extends (...args: any[]) => any>(\r\n func: T,\r\n wait: number,\r\n immediate: boolean = false\r\n): T {\r\n let timeout: number | null = null;\r\n let result: ReturnType<T>;\r\n\r\n const debounced = function (this: any, ...args: Parameters<T>) {\r\n const callNow = immediate && !timeout;\r\n\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n }\r\n\r\n timeout = setTimeout(() => {\r\n timeout = null;\r\n if (!immediate) {\r\n result = func.apply(this, args);\r\n }\r\n }, wait) as any;\r\n\r\n if (callNow) {\r\n result = func.apply(this, args);\r\n }\r\n\r\n return result;\r\n } as T;\r\n\r\n // 添加取消方法\r\n (debounced as any).cancel = () => {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n };\r\n\r\n return debounced;\r\n}\r\n\r\n/**\r\n * 节流函数(优化版本)\r\n * @param func 要节流的函数\r\n * @param wait 等待时间(毫秒)\r\n * @param options 选项\r\n * @returns 节流后的函数\r\n */\r\nexport function throttle<T extends (...args: any[]) => any>(\r\n func: T,\r\n wait: number,\r\n options: { leading?: boolean; trailing?: boolean } = {}\r\n): T {\r\n let timeout: number | null = null;\r\n let previous = 0;\r\n let result: ReturnType<T>;\r\n\r\n const { leading = true, trailing = true } = options;\r\n\r\n const throttled = function (this: any, ...args: Parameters<T>) {\r\n const now = Date.now();\r\n\r\n if (!previous && !leading) {\r\n previous = now;\r\n }\r\n\r\n const remaining = wait - (now - previous);\r\n\r\n if (remaining <= 0 || remaining > wait) {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n previous = now;\r\n result = func.apply(this, args);\r\n } else if (!timeout && trailing) {\r\n timeout = setTimeout(() => {\r\n previous = leading ? Date.now() : 0;\r\n timeout = null;\r\n result = func.apply(this, args);\r\n }, remaining) as any;\r\n }\r\n\r\n return result;\r\n } as T;\r\n\r\n // 添加取消方法\r\n (throttled as any).cancel = () => {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n previous = 0;\r\n };\r\n\r\n return throttled;\r\n}\r\n\r\n/**\r\n * 兼容的深拷贝函数(保持向后兼容)\r\n * @deprecated 请使用 deepClone 函数\r\n */\r\nexport function useDeepCopyByObj<T>(target: T, source: any): T {\r\n console.warn('useDeepCopyByObj is deprecated, please use deepClone instead');\r\n\r\n if (typeof target === 'object' && target !== null && !Array.isArray(target)) {\r\n const clonedSource = deepClone(source);\r\n return mergeObjects(target as any, clonedSource);\r\n }\r\n\r\n return deepClone(source) as T;\r\n}\r\n","/**\r\n * 导航相关工具函数(优化版本)\r\n */\r\n\r\nimport { safeAsync, safeSync } from '../core/errorHandler';\r\nimport { PerformanceMonitor } from '../core/performance';\r\nimport { debounce } from '../utils';\r\n\r\n/**\r\n * 导航配置选项\r\n */\r\ninterface NavigationOptions {\r\n delta?: number; // 返回页面数\r\n timeout?: number; // 超时时间\r\n enableDebounce?: boolean; // 是否启用防抖\r\n debounceWait?: number; // 防抖等待时间\r\n}\r\n\r\n/**\r\n * 页面跳转选项\r\n */\r\ninterface NavigateOptions {\r\n url: string;\r\n params?: Record<string, any>;\r\n animationType?: 'auto' | 'none' | 'slide-in-right' | 'slide-in-left' | 'slide-in-top' | 'slide-in-bottom' | 'fade-in' | 'zoom-out' | 'zoom-fade-out' | 'pop-in';\r\n animationDuration?: number;\r\n events?: Record<string, Function>;\r\n}\r\n\r\n/**\r\n * 导航管理器类\r\n */\r\nclass NavigationManager {\r\n private static instance: NavigationManager;\r\n private navigationQueue: Array<() => Promise<void>> = [];\r\n private isNavigating = false;\r\n private maxQueueSize = 10;\r\n\r\n static getInstance(): NavigationManager {\r\n if (!NavigationManager.instance) {\r\n NavigationManager.instance = new NavigationManager();\r\n }\r\n return NavigationManager.instance;\r\n }\r\n\r\n /**\r\n * 执行导航队列\r\n */\r\n private async processQueue(): Promise<void> {\r\n if (this.isNavigating || this.navigationQueue.length === 0) {\r\n return;\r\n }\r\n\r\n this.isNavigating = true;\r\n\r\n while (this.navigationQueue.length > 0) {\r\n const navigation = this.navigationQueue.shift();\r\n if (navigation) {\r\n try {\r\n await navigation();\r\n // 添加小延迟,避免导航过快\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n } catch (error) {\r\n console.error('导航执行失败:', error);\r\n }\r\n }\r\n }\r\n\r\n this.isNavigating = false;\r\n }\r\n\r\n /**\r\n * 添加导航到队列\r\n */\r\n private addToQueue(navigation: () => Promise<void>): void {\r\n if (this.navigationQueue.length >= this.maxQueueSize) {\r\n console.warn('导航队列已满,丢弃最旧的导航请求');\r\n this.navigationQueue.shift();\r\n }\r\n\r\n this.navigationQueue.push(navigation);\r\n this.processQueue();\r\n }\r\n\r\n /**\r\n * 安全的页面导航\r\n */\r\n async navigateTo(options: NavigateOptions): Promise<boolean> {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('navigateTo', 'navigation', { url: options.url });\r\n\r\n return new Promise((resolve) => {\r\n this.addToQueue(async () => {\r\n const success = await safeAsync(\r\n () => new Promise<boolean>((navResolve) => {\r\n // 构建完整URL\r\n let fullUrl = options.url;\r\n if (options.params && Object.keys(options.params).length > 0) {\r\n const queryString = Object.entries(options.params)\r\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\r\n .join('&');\r\n fullUrl += (fullUrl.includes('?') ? '&' : '?') + queryString;\r\n }\r\n\r\n uni.navigateTo({\r\n url: fullUrl,\r\n animationType: options.animationType,\r\n animationDuration: options.animationDuration,\r\n events: options.events,\r\n success: () => {\r\n monitor.end('navigateTo');\r\n navResolve(true);\r\n },\r\n fail: (error) => {\r\n console.error('页面跳转失败:', error);\r\n monitor.end('navigateTo');\r\n navResolve(false);\r\n }\r\n });\r\n }),\r\n 'navigation',\r\n 'NAVIGATE_TO_ERROR'\r\n );\r\n\r\n resolve(success ?? false);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 重定向到页面\r\n */\r\n async redirectTo(options: NavigateOptions): Promise<boolean> {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('redirectTo', 'navigation', { url: options.url });\r\n\r\n return new Promise((resolve) => {\r\n this.addToQueue(async () => {\r\n const success = await safeAsync(\r\n () => new Promise<boolean>((navResolve) => {\r\n let fullUrl = options.url;\r\n if (options.params && Object.keys(options.params).length > 0) {\r\n const queryString = Object.entries(options.params)\r\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\r\n .join('&');\r\n fullUrl += (fullUrl.includes('?') ? '&' : '?') + queryString;\r\n }\r\n\r\n uni.redirectTo({\r\n url: fullUrl,\r\n success: () => {\r\n monitor.end('redirectTo');\r\n navResolve(true);\r\n },\r\n fail: (error) => {\r\n console.error('页面重定向失败:', error);\r\n monitor.end('redirectTo');\r\n navResolve(false);\r\n }\r\n });\r\n }),\r\n 'navigation',\r\n 'REDIRECT_TO_ERROR'\r\n );\r\n\r\n resolve(success ?? false);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 返回上一页(优化版本)\r\n */\r\n async navigateBack(params: any = '', options: NavigationOptions = {}): Promise<boolean> {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('navigateBack', 'navigation');\r\n\r\n const finalOptions = {\r\n delta: 1,\r\n timeout: 5000,\r\n enableDebounce: true,\r\n debounceWait: 300,\r\n ...options\r\n };\r\n\r\n return new Promise((resolve) => {\r\n this.addToQueue(async () => {\r\n const success = await safeAsync(\r\n () => new Promise<boolean>((navResolve) => {\r\n // 检查页面栈\r\n const pages = getCurrentPages();\r\n if (pages.length <= finalOptions.delta) {\r\n console.warn(`无法返回${finalOptions.delta}页,当前页面栈深度不足`);\r\n navResolve(false);\r\n return;\r\n }\r\n\r\n // 设置超时\r\n const timeoutId = setTimeout(() => {\r\n console.warn('导航返回超时');\r\n navResolve(false);\r\n }, finalOptions.timeout);\r\n\r\n uni.navigateBack({\r\n delta: finalOptions.delta,\r\n success: () => {\r\n clearTimeout(timeoutId);\r\n\r\n // 延迟执行,确保页面切换完成\r\n setTimeout(() => {\r\n try {\r\n const currentPages = getCurrentPages();\r\n if (currentPages.length > 0) {\r\n const targetPage = currentPages[currentPages.length - 1];\r\n\r\n // 检查目标页面是否有init方法\r\n if (targetPage.$vm && typeof targetPage.$vm.init === 'function') {\r\n targetPage.$vm.init(params);\r\n } else if (targetPage.route) {\r\n console.info(`页面 ${targetPage.route} 没有init方法`);\r\n }\r\n }\r\n\r\n monitor.end('navigateBack');\r\n navResolve(true);\r\n } catch (error) {\r\n console.error('页面回调执行失败:', error);\r\n monitor.end('navigateBack');\r\n navResolve(true); // 导航成功,但回调失败\r\n }\r\n }, 100);\r\n },\r\n fail: (error) => {\r\n clearTimeout(timeoutId);\r\n console.error('导航返回失败:', error);\r\n monitor.end('navigateBack');\r\n navResolve(false);\r\n }\r\n });\r\n }),\r\n 'navigation',\r\n 'NAVIGATE_BACK_ERROR'\r\n );\r\n\r\n resolve(success ?? false);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 切换到Tab页面\r\n */\r\n async switchTab(url: string): Promise<boolean> {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('switchTab', 'navigation', { url });\r\n\r\n return new Promise((resolve) => {\r\n this.addToQueue(async () => {\r\n const success = await safeAsync(\r\n () => new Promise<boolean>((navResolve) => {\r\n uni.switchTab({\r\n url,\r\n success: () => {\r\n monitor.end('switchTab');\r\n navResolve(true);\r\n },\r\n fail: (error) => {\r\n console.error('Tab切换失败:', error);\r\n monitor.end('switchTab');\r\n navResolve(false);\r\n }\r\n });\r\n }),\r\n 'navigation',\r\n 'SWITCH_TAB_ERROR'\r\n );\r\n\r\n resolve(success ?? false);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 重新启动到指定页面\r\n */\r\n async reLaunch(options: NavigateOptions): Promise<boolean> {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('reLaunch', 'navigation', { url: options.url });\r\n\r\n return new Promise((resolve) => {\r\n this.addToQueue(async () => {\r\n const success = await safeAsync(\r\n () => new Promise<boolean>((navResolve) => {\r\n let fullUrl = options.url;\r\n if (options.params && Object.keys(options.params).length > 0) {\r\n const queryString = Object.entries(options.params)\r\n .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`)\r\n .join('&');\r\n fullUrl += (fullUrl.includes('?') ? '&' : '?') + queryString;\r\n }\r\n\r\n uni.reLaunch({\r\n url: fullUrl,\r\n success: () => {\r\n monitor.end('reLaunch');\r\n navResolve(true);\r\n },\r\n fail: (error) => {\r\n console.error('重新启动失败:', error);\r\n monitor.end('reLaunch');\r\n navResolve(false);\r\n }\r\n });\r\n }),\r\n 'navigation',\r\n 'RELAUNCH_ERROR'\r\n );\r\n\r\n resolve(success ?? false);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * 获取当前页面信息\r\n */\r\n getCurrentPageInfo(): { route: string; options: any; } | null {\r\n return safeSync(\r\n () => {\r\n const pages = getCurrentPages();\r\n if (pages.length === 0) {\r\n return null;\r\n }\r\n\r\n const currentPage = pages[pages.length - 1];\r\n return {\r\n route: currentPage.route || '',\r\n options: (currentPage as any).options || {}\r\n };\r\n },\r\n 'navigation',\r\n 'GET_CURRENT_PAGE_ERROR',\r\n null\r\n );\r\n }\r\n\r\n /**\r\n * 获取页面栈信息\r\n */\r\n getPageStack(): Array<{ route: string; options: any; }> {\r\n return safeSync(\r\n () => {\r\n const pages = getCurrentPages();\r\n return pages.map(page => ({\r\n route: page.route || '',\r\n options: (page as any).options || {}\r\n }));\r\n },\r\n 'navigation',\r\n 'GET_PAGE_STACK_ERROR',\r\n []\r\n ) ?? [];\r\n }\r\n\r\n /**\r\n * 清空导航队列\r\n */\r\n clearQueue(): void {\r\n this.navigationQueue = [];\r\n this.isNavigating = false;\r\n }\r\n}\r\n\r\n// 获取导航管理器实例\r\nconst navigationManager = NavigationManager.getInstance();\r\n\r\n/**\r\n * 返回上一页并支持传递参数(优化版本)\r\n * @param params 返回上一页时传入的参数\r\n * @param options 导航选项\r\n * @returns Promise<boolean> 是否成功\r\n */\r\nexport const useBack = async (params: any = '', options: NavigationOptions = {}): Promise<boolean> => {\r\n return await navigationManager.navigateBack(params, options);\r\n};\r\n\r\n/**\r\n * 防抖版本的返回上一页\r\n */\r\nexport const useBackDebounced = debounce(useBack, 300);\r\n\r\n/**\r\n * 跳转到指定页面\r\n * @param options 导航选项\r\n * @returns Promise<boolean> 是否成功\r\n */\r\nexport const navigateTo = async (options: NavigateOptions): Promise<boolean> => {\r\n return await navigationManager.navigateTo(options);\r\n};\r\n\r\n/**\r\n * 重定向到指定页面\r\n * @param options 导航选项\r\n * @returns Promise<boolean> 是否成功\r\n */\r\nexport const redirectTo = async (options: NavigateOptions): Promise<boolean> => {\r\n return await navigationManager.redirectTo(options);\r\n};\r\n\r\n/**\r\n * 切换到Tab页面\r\n * @param url Tab页面路径\r\n * @returns Promise<boolean> 是否成功\r\n */\r\nexport const switchTab = async (url: string): Promise<boolean> => {\r\n return await navigationManager.switchTab(url);\r\n};\r\n\r\n/**\r\n * 重新启动到指定页面\r\n * @param options 导航选项\r\n * @returns Promise<boolean> 是否成功\r\n */\r\nexport const reLaunch = async (options: NavigateOptions): Promise<boolean> => {\r\n return await navigationManager.reLaunch(options);\r\n};\r\n\r\n/**\r\n * 获取当前页面信息\r\n * @returns 当前页面信息\r\n */\r\nexport const getCurrentPageInfo = (): { route: string; options: any; } | null => {\r\n return navigationManager.getCurrentPageInfo();\r\n};\r\n\r\n/**\r\n * 获取页面栈信息\r\n * @returns 页面栈数组\r\n */\r\nexport const getPageStack = (): Array<{ route: string; options: any; }> => {\r\n return navigationManager.getPageStack();\r\n};\r\n\r\n/**\r\n * 清空导航队列\r\n */\r\nexport const clearNavigationQueue = (): void => {\r\n navigationManager.clearQueue();\r\n};\r\n\r\n/**\r\n * 安全的页面跳转(带重试机制)\r\n * @param options 导航选项\r\n * @param maxRetries 最大重试次数\r\n * @returns Promise<boolean> 是否成功\r\n */\r\nexport const safeNavigateTo = async (options: NavigateOptions, maxRetries: number = 3): Promise<boolean> => {\r\n for (let i = 0; i < maxRetries; i++) {\r\n const success = await navigateTo(options);\r\n if (success) {\r\n return true;\r\n }\r\n\r\n if (i < maxRetries - 1) {\r\n // 等待一段时间后重试\r\n await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n","/**\r\n * 剪贴板相关工具函数\r\n */\r\n\r\nimport { useToast } from '../ui';\r\nimport { safeAsync, safeSync } from '../core/errorHandler';\r\nimport { PerformanceMonitor } from '../core/performance';\r\n\r\n/**\r\n * 剪贴板操作配置\r\n */\r\ninterface ClipboardConfig {\r\n showToast?: boolean;\r\n successMessage?: string;\r\n failMessage?: string;\r\n timeout?: number;\r\n}\r\n\r\n/**\r\n * 默认配置\r\n */\r\nconst DEFAULT_CONFIG: Required<ClipboardConfig> = {\r\n showToast: true,\r\n successMessage: '复制成功',\r\n failMessage: '复制失败',\r\n timeout: 5000\r\n};\r\n\r\n/**\r\n * 跨平台文本复制功能(优化版本)\r\n * @param text 要复制的文本内容\r\n * @param config 配置选项\r\n * @description 支持 H5、App、小程序。H5 平台优先使用现代的 Clipboard API,失败时回退到传统方法\r\n * @returns Promise<boolean> 复制是否成功\r\n */\r\nexport async function copyText(text: string, config: ClipboardConfig = {}): Promise<boolean> {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('copyText', 'clipboard', { textLength: text.length });\r\n\r\n const finalConfig = { ...DEFAULT_CONFIG, ...config };\r\n\r\n // 输入验证\r\n if (!text || typeof text !== 'string') {\r\n if (finalConfig.showToast) {\r\n useToast('复制内容不能为空', false, 'error');\r\n }\r\n monitor.end('copyText');\r\n return false;\r\n }\r\n\r\n // 文本长度限制检查\r\n if (text.length > 10000) {\r\n if (finalConfig.showToast) {\r\n useToast('复制内容过长', false, 'error');\r\n }\r\n monitor.end('copyText');\r\n return false;\r\n }\r\n\r\n let success = false;\r\n\r\n // #ifndef H5\r\n // 条件编译:非 H5 平台(如 App、小程序)执行此代码块\r\n success = await safeAsync(\r\n () => new Promise<boolean>((resolve) => {\r\n uni.setClipboardData({\r\n data: text,\r\n success: () => {\r\n if (finalConfig.showToast) {\r\n useToast(finalConfig.successMessage);\r\n }\r\n resolve(true);\r\n },\r\n fail: () => {\r\n if (finalConfig.showToast) {\r\n useToast(finalConfig.failMessage);\r\n }\r\n resolve(false);\r\n },\r\n });\r\n }),\r\n 'clipboard',\r\n 'COPY_TEXT_NATIVE_ERROR'\r\n ) ?? false;\r\n // #endif\r\n\r\n // #ifdef H5\r\n // 条件编译:仅 H5 平台执行此代码块\r\n success = await copyTextH5(text, finalConfig);\r\n // #endif\r\n\r\n monitor.end('copyText');\r\n return success;\r\n}\r\n\r\n// #ifdef H5\r\n/**\r\n * H5平台专用复制函数\r\n * @param text 要复制的文本\r\n * @param config 配置\r\n * @returns 是否成功\r\n */\r\nasync function copyTextH5(text: string, config: Required<ClipboardConfig>): Promise<boolean> {\r\n // 优先使用现代的 Clipboard API\r\n if (navigator.clipboard && window.isSecureContext) {\r\n const success = await safeAsync(\r\n async () => {\r\n await Promise.race([\r\n navigator.clipboard.writeText(text),\r\n new Promise((_, reject) =>\r\n setTimeout(() => reject(new Error('Clipboard API timeout')), config.timeout)\r\n )\r\n ]);\r\n return true;\r\n },\r\n 'clipboard',\r\n 'CLIPBOARD_API_ERROR'\r\n );\r\n\r\n if (success) {\r\n if (config.showToast) {\r\n useToast(config.successMessage);\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n // 回退到传统方法\r\n return fallbackCopyTextToClipboard(text, config);\r\n}\r\n\r\n/**\r\n * 传统复制方法的辅助函数(内存优化版本)\r\n * @param text 要复制的文本内容\r\n * @param config 配置\r\n * @description 使用 document.execCommand 方式进行文本复制,优化内存使用\r\n */\r\nfunction fallbackCopyTextToClipboard(text: string, config: Required<ClipboardConfig>): boolean {\r\n return safeSync(\r\n () => {\r\n // 创建临时元素\r\n const textarea = document.createElement('textarea');\r\n\r\n // 设置样式,确保不影响页面布局且不可见\r\n Object.assign(textarea.style, {\r\n position: 'fixed',\r\n top: '-9999px',\r\n left: '-9999px',\r\n width: '1px',\r\n height: '1px',\r\n padding: '0',\r\n border: 'none',\r\n outline: 'none',\r\n boxShadow: 'none',\r\n background: 'transparent',\r\n fontSize: '16px', // 防止iOS缩放\r\n });\r\n\r\n textarea.value = text;\r\n textarea.setAttribute('readonly', '');\r\n textarea.setAttribute('contenteditable', 'true');\r\n\r\n // 添加到DOM\r\n document.body.appendChild(textarea);\r\n\r\n // 选择文本\r\n textarea.focus();\r\n textarea.select();\r\n textarea.setSelectionRange(0, text.length);\r\n\r\n // 执行复制\r\n const successful = document.execCommand('copy');\r\n\r\n // 立即清理DOM元素\r\n document.body.removeChild(textarea);\r\n\r\n if (successful) {\r\n if (config.showToast) {\r\n useToast(config.successMessage);\r\n }\r\n return true;\r\n } else {\r\n if (config.showToast) {\r\n useToast(config.failMessage);\r\n }\r\n return false;\r\n }\r\n },\r\n 'clipboard',\r\n 'FALLBACK_COPY_ERROR',\r\n false\r\n ) ?? false;\r\n}\r\n// #endif\r\n\r\n/**\r\n * 读取剪贴板内容(仅H5平台支持)\r\n * @param config 配置选项\r\n * @returns Promise<string | null> 剪贴板内容,失败时返回null\r\n */\r\nexport async function readClipboard(config: ClipboardConfig = {}): Promise<string | null> {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('readClipboard', 'clipboard');\r\n\r\n const finalConfig = { ...DEFAULT_CONFIG, ...config };\r\n\r\n // #ifdef H5\r\n if (navigator.clipboard && window.isSecureContext) {\r\n const result = await safeAsync(\r\n async () => {\r\n return await Promise.race([\r\n navigator.clipboard.readText(),\r\n new Promise<string>((_, reject) =>\r\n setTimeout(() => reject(new Error('Read clipboard timeout')), finalConfig.timeout)\r\n )\r\n ]);\r\n },\r\n 'clipboard',\r\n 'READ_CLIPBOARD_ERROR'\r\n );\r\n\r\n monitor.end('readClipboard');\r\n return result;\r\n }\r\n // #endif\r\n\r\n // 非H5平台或不支持的情况\r\n if (finalConfig.showToast) {\r\n useToast('当前平台不支持读取剪贴板', false, 'error');\r\n }\r\n\r\n monitor.end('readClipboard');\r\n return null;\r\n}\r\n\r\n/**\r\n * 检查剪贴板API是否可用\r\n * @returns boolean 是否支持剪贴板操作\r\n */\r\nexport function isClipboardSupported(): boolean {\r\n // #ifdef H5\r\n return !!(navigator.clipboard && window.isSecureContext);\r\n // #endif\r\n\r\n // #ifndef H5\r\n return true; // uni-app平台都支持\r\n // #endif\r\n}\r\n\r\n/**\r\n * 清空剪贴板(仅H5平台支持)\r\n * @param config 配置选项\r\n * @returns Promise<boolean> 是否成功\r\n */\r\nexport async function clearClipboard(config: ClipboardConfig = {}): Promise<boolean> {\r\n return await copyText('', config);\r\n}\r\n","/**\r\n * 系统信息相关工具函数(优化版本)\r\n */\r\n\r\nimport { safeSync, safeAsync } from '../core/errorHandler';\r\nimport { PerformanceMonitor } from '../core/performance';\r\n\r\n/**\r\n * 系统信息缓存\r\n */\r\nclass SystemInfoCache {\r\n private static instance: SystemInfoCache;\r\n private cache = new Map<string, { data: any; timestamp: number; ttl: number }>();\r\n private defaultTTL = 30000; // 30秒缓存\r\n\r\n static getInstance(): SystemInfoCache {\r\n if (!SystemInfoCache.instance) {\r\n SystemInfoCache.instance = new SystemInfoCache();\r\n }\r\n return SystemInfoCache.instance;\r\n }\r\n\r\n set(key: string, data: any, ttl: number = this.defaultTTL): void {\r\n this.cache.set(key, {\r\n data,\r\n timestamp: Date.now(),\r\n ttl\r\n });\r\n }\r\n\r\n get(key: string): any | null {\r\n const item = this.cache.get(key);\r\n if (!item) return null;\r\n\r\n if (Date.now() - item.timestamp > item.ttl) {\r\n this.cache.delete(key);\r\n return null;\r\n }\r\n\r\n return item.data;\r\n }\r\n\r\n clear(): void {\r\n this.cache.clear();\r\n }\r\n}\r\n\r\nconst systemCache = SystemInfoCache.getInstance();\r\n\r\n/**\r\n * 获取窗口信息(优化版本)\r\n * @param useCache 是否使用缓存,默认true\r\n * @returns 窗口信息对象,包含窗口尺寸、像素比等信息\r\n * @description 调用 uni.getWindowInfo() 获取当前设备的窗口相关信息,支持缓存\r\n */\r\nexport const useWindowInfo = (useCache: boolean = true) => {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('getWindowInfo', 'system');\r\n\r\n const cacheKey = 'windowInfo';\r\n\r\n if (useCache) {\r\n const cached = systemCache.get(cacheKey);\r\n if (cached) {\r\n monitor.end('getWindowInfo');\r\n return cached;\r\n }\r\n }\r\n\r\n const result = safeSync(\r\n () => {\r\n const windowInfo = uni.getWindowInfo();\r\n if (useCache) {\r\n systemCache.set(cacheKey, windowInfo);\r\n }\r\n return windowInfo;\r\n },\r\n 'system',\r\n 'GET_WINDOW_INFO_ERROR',\r\n null\r\n );\r\n\r\n monitor.end('getWindowInfo');\r\n return result;\r\n};\r\n\r\n/**\r\n * 获取当前运行平台\r\n * @returns 平台类型字符串 ('weixin' | 'web' | 'app' | 'alipay' | 'h5')\r\n * @description 通过条件编译判断当前代码运行的平台环境\r\n */\r\nexport const getPlatform = () => {\r\n let platform\r\n // #ifdef MP-WEIXIN\r\n platform = 'weixin'\r\n // #endif\r\n // #ifdef WEB\r\n platform = 'web'\r\n // #endif\r\n // #ifdef APP\r\n platform = 'app'\r\n // #endif\r\n // #ifdef MP-ALIPAY\r\n platform = 'alipay'\r\n // #endif\r\n // #ifdef H5\r\n platform = 'h5'\r\n // #endif\r\n return platform\r\n}\r\n\r\n/**\r\n * 获取小程序账户信息\r\n * @returns 小程序账户信息对象,包含appId、版本、环境等信息\r\n * @description 调用 uni.getAccountInfoSync() 获取当前小程序的账户相关信息\r\n */\r\nexport const getCurrentEnv = () => {\r\n try {\r\n // 调用 uni.getAccountInfoSync() 获取小程序账户信息\r\n const accountInfo = uni.getAccountInfoSync();\r\n return {\r\n // 小程序appId\r\n appId: accountInfo.miniProgram?.appId || '',\r\n // 小程序版本号\r\n version: accountInfo.miniProgram?.version || '',\r\n // 小程序环境版本(develop开发版、trial体验版、release正式版)\r\n envVersion: accountInfo.miniProgram?.envVersion || '',\r\n // 完整的账户信息\r\n accountInfo\r\n };\r\n } catch (error) {\r\n console.error('获取小程序账户信息失败:', error);\r\n return {\r\n appId: '',\r\n version: '',\r\n envVersion: '',\r\n accountInfo: null\r\n };\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 检查小程序版本更新\r\n * @description 检查小程序是否有新版本,如果有则提示用户更新并重启应用\r\n * @returns void\r\n * @example\r\n * // 在App.vue的onLaunch或onShow中调用\r\n * onCheckForUpdate()\r\n */\r\nexport const onCheckForUpdate = () => {\r\n try {\r\n // 获取全局唯一的版本更新管理器对象\r\n const updateManager = uni.getUpdateManager();\r\n\r\n // 检查小程序是否有新版本发布\r\n updateManager.onCheckForUpdate(function (res) {\r\n // 请求完新版本信息的回调\r\n console.log('检查更新结果:', res.hasUpdate);\r\n if (res.hasUpdate) {\r\n console.log('发现新版本,开始下载...');\r\n }\r\n });\r\n\r\n // 小程序有新版本,静默下载新版本,做好更新准备\r\n updateManager.onUpdateReady(function (res) {\r\n uni.showModal({\r\n title: '更新提示',\r\n content: '新版本已经准备好,是否重启应用?',\r\n showCancel: true,\r\n cancelText: '稍后',\r\n confirmText: '立即重启',\r\n success(modalRes) {\r\n if (modalRes.confirm) {\r\n // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启\r\n updateManager.applyUpdate();\r\n }\r\n }\r\n });\r\n });\r\n\r\n // 新版本下载失败处理\r\n updateManager.onUpdateFailed(function (res) {\r\n console.error('新版本下载失败:', res);\r\n uni.showModal({\r\n title: '更新失败',\r\n content: '新版本下载失败,请检查网络连接或稍后重试',\r\n showCancel: false,\r\n confirmText: '知道了'\r\n });\r\n });\r\n\r\n } catch (error) {\r\n console.error('版本更新检查失败:', error);\r\n // 静默处理错误,不影响用户正常使用\r\n }\r\n}\r\n\r\n/**\r\n * 获取状态栏高度\r\n * @returns 状态栏高度(单位:px)\r\n * @description 获取设备状态栏的高度,用于适配不同设备的状态栏\r\n */\r\nexport const getStatusBarHeight = () => {\r\n try {\r\n // 获取系统信息中的状态栏高度\r\n const statusBarHeight = uni.getSystemInfoSync().statusBarHeight || 0;\r\n console.log(\"🚀 ~ 状态栏高度:\", statusBarHeight);\r\n return statusBarHeight;\r\n } catch (error) {\r\n console.error('获取状态栏高度失败:', error);\r\n return 0;\r\n }\r\n}\r\n\r\n/**\r\n * 获取菜单按钮边界信息\r\n * @returns 菜单按钮边界信息对象或null\r\n * @description 获取小程序右上角菜单按钮的边界信息,仅在小程序平台有效\r\n */\r\nexport const getMenuButtonBoundingClientRect = () => {\r\n try {\r\n const platform = getPlatform();\r\n\r\n // 只有在小程序平台才执行getMenuButtonBoundingClientRect\r\n if (platform === 'weixin' || platform === 'alipay') {\r\n return uni.getMenuButtonBoundingClientRect();\r\n }\r\n\r\n // 非小程序平台返回null\r\n return null;\r\n } catch (error) {\r\n console.error('获取菜单按钮边界信息失败:', error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * 获取导航栏高度\r\n * @returns 导航栏高度(单位:px)\r\n * @description 获取导航栏的总高度,根据不同平台采用不同的计算方式\r\n */\r\nexport const getNavHeight = () => {\r\n try {\r\n // 获取状态栏高度\r\n const statusBarHeight = getStatusBarHeight();\r\n const platform = getPlatform();\r\n\r\n // 小程序平台:状态栏高度 + 菜单按钮高度\r\n if (platform === 'weixin' || platform === 'alipay') {\r\n const menuButtonInfo = getMenuButtonBoundingClientRect();\r\n if (menuButtonInfo) {\r\n const navHeight = menuButtonInfo.height + statusBarHeight;\r\n console.log(\"🚀 ~ 小程序导航栏高度:\", navHeight);\r\n return navHeight;\r\n }\r\n }\r\n\r\n // App和H5平台:使用默认导航栏高度\r\n const defaultNavHeight = 0; // 默认导航栏高度\r\n const totalHeight = statusBarHeight + defaultNavHeight;\r\n console.log(`🚀 ~ ${platform}平台导航栏高度:`, totalHeight);\r\n\r\n return totalHeight;\r\n } catch (error) {\r\n console.error('获取导航栏高度失败:', error);\r\n // 返回默认高度(状态栏高度 + 44px 默认导航栏高度)\r\n return getStatusBarHeight() + 0;\r\n }\r\n}\r\n\r\n/**\r\n * @returns 包含状态栏高度和导航栏高度的配置对象\r\n * @description 一次性获取应用所需的状态栏和导航栏高度配置信息\r\n */\r\nexport const getTopNavBarHeight = () => {\r\n try {\r\n // 获取状态栏高度\r\n const statusBarHeight = getStatusBarHeight();\r\n\r\n // 获取导航栏高度\r\n const navHeight = getNavHeight();\r\n\r\n return {\r\n statusBarHeight,\r\n navHeight\r\n };\r\n } catch (error) {\r\n console.error('获取全局配置失败:', error);\r\n return {\r\n statusBarHeight: 0,\r\n navHeight: 44\r\n };\r\n }\r\n}\r\n","/**\r\n * 本地存储相关工具函数(优化版本)\r\n */\r\n\r\nimport { safeSync, safeAsync } from '../core/errorHandler';\r\nimport { PerformanceMonitor } from '../core/performance';\r\n\r\n/**\r\n * 存储配置选项\r\n */\r\ninterface StorageOptions {\r\n compress?: boolean; // 是否压缩存储\r\n encrypt?: boolean; // 是否加密存储(简单加密)\r\n ttl?: number; // 过期时间(毫秒)\r\n}\r\n\r\n/**\r\n * 存储项结构\r\n */\r\ninterface StorageItem<T = any> {\r\n value: T;\r\n timestamp: number;\r\n ttl?: number;\r\n compressed?: boolean;\r\n encrypted?: boolean;\r\n}\r\n\r\n/**\r\n * 存储管理器类\r\n */\r\nclass StorageManager {\r\n private static instance: StorageManager;\r\n private cache = new Map<string, any>(); // 内存缓存\r\n private maxCacheSize = 100; // 最大缓存数量\r\n\r\n static getInstance(): StorageManager {\r\n if (!StorageManager.instance) {\r\n StorageManager.instance = new StorageManager();\r\n }\r\n return StorageManager.instance;\r\n }\r\n\r\n /**\r\n * 简单压缩字符串\r\n */\r\n private compress(str: string): string {\r\n // 简单的重复字符压缩\r\n return str.replace(/(.)\\1{2,}/g, (match, char) => {\r\n return `${char}*${match.length}`;\r\n });\r\n }\r\n\r\n /**\r\n * 解压缩字符串\r\n */\r\n private decompress(str: string): string {\r\n return str.replace(/(.)\\*(\\d+)/g, (match, char, count) => {\r\n return char.repeat(parseInt(count));\r\n });\r\n }\r\n\r\n /**\r\n * 简单加密\r\n */\r\n private encrypt(str: string): string {\r\n return btoa(encodeURIComponent(str));\r\n }\r\n\r\n /**\r\n * 简单解密\r\n */\r\n private decrypt(str: string): string {\r\n try {\r\n return decodeURIComponent(atob(str));\r\n } catch {\r\n return str; // 解密失败返回原字符串\r\n }\r\n }\r\n\r\n /**\r\n * 检查是否过期\r\n */\r\n private isExpired(item: StorageItem): boolean {\r\n if (!item.ttl) return false;\r\n return Date.now() - item.timestamp > item.ttl;\r\n }\r\n\r\n /**\r\n * 设置存储\r\n */\r\n set<T>(key: string, value: T, options: StorageOptions = {}): boolean {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start(`setStorage_${key}`, 'localStorage');\r\n\r\n const result = safeSync(\r\n () => {\r\n // 输入验证\r\n if (!key || typeof key !== 'string') {\r\n throw new Error('存储键不能为空');\r\n }\r\n\r\n const item: StorageItem<T> = {\r\n value,\r\n timestamp: Date.now(),\r\n ttl: options.ttl,\r\n compressed: options.compress,\r\n encrypted: options.encrypt\r\n };\r\n\r\n let serialized = JSON.stringify(item);\r\n\r\n // 压缩处理\r\n if (options.compress) {\r\n serialized = this.compress(serialized);\r\n }\r\n\r\n // 加密处理\r\n if (options.encrypt) {\r\n serialized = this.encrypt(serialized);\r\n }\r\n\r\n // 存储大小检查\r\n if (serialized.length > 1024 * 1024) { // 1MB限制\r\n throw new Error('存储数据过大');\r\n }\r\n\r\n uni.setStorageSync(key, serialized);\r\n\r\n // 更新内存缓存\r\n if (this.cache.size >= this.maxCacheSize) {\r\n // 删除最旧的缓存项\r\n const firstKey = this.cache.keys().next().value;\r\n if (firstKey) {\r\n this.cache.delete(firstKey);\r\n }\r\n }\r\n this.cache.set(key, item);\r\n\r\n return true;\r\n },\r\n 'localStorage',\r\n 'SET_STORAGE_ERROR',\r\n false\r\n );\r\n\r\n monitor.end(`setStorage_${key}`);\r\n return result ?? false;\r\n }\r\n\r\n /**\r\n * 获取存储\r\n */\r\n get<T>(key: string, defaultValue?: T): T | undefined {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start(`getStorage_${key}`, 'localStorage');\r\n\r\n const result = safeSync(\r\n () => {\r\n // 输入验证\r\n if (!key || typeof key !== 'string') {\r\n return defaultValue;\r\n }\r\n\r\n // 检查内存缓存\r\n if (this.cache.has(key)) {\r\n const cachedItem = this.cache.get(key) as StorageItem<T>;\r\n if (!this.isExpired(cachedItem)) {\r\n return cachedItem.value;\r\n } else {\r\n // 过期则删除\r\n this.cache.delete(key);\r\n this.remove(key);\r\n return defaultValue;\r\n }\r\n }\r\n\r\n // 从存储中获取\r\n let serialized = uni.getStorageSync(key);\r\n if (!serialized) {\r\n return defaultValue;\r\n }\r\n\r\n // 确保serialized是字符串类型\r\n if (typeof serialized !== 'string') {\r\n return defaultValue;\r\n }\r\n\r\n let serializedString = serialized;\r\n\r\n // 解密处理\r\n if (serializedString && serializedString.includes('=')) {\r\n try {\r\n const decrypted = this.decrypt(serializedString);\r\n if (decrypted) {\r\n serializedString = decrypted;\r\n }\r\n } catch {\r\n // 解密失败,可能不是加密数据\r\n }\r\n }\r\n\r\n // 解压缩处理\r\n if (serializedString && serializedString.includes('*')) {\r\n try {\r\n serializedString = this.decompress(serializedString);\r\n } catch {\r\n // 解压缩失败,可能不是压缩数据\r\n }\r\n }\r\n\r\n // 尝试解析为StorageItem\r\n let item: StorageItem<T>;\r\n try {\r\n const parsed = JSON.parse(serializedString);\r\n if (parsed && typeof parsed === 'object' && 'value' in parsed && 'timestamp' in parsed) {\r\n item = parsed;\r\n } else {\r\n // 兼容旧格式\r\n item = {\r\n value: parsed,\r\n timestamp: Date.now()\r\n };\r\n }\r\n } catch {\r\n // JSON解析失败,直接返回原始值\r\n return serializedString as T;\r\n }\r\n\r\n // 检查是否过期\r\n if (this.isExpired(item)) {\r\n this.remove(key);\r\n return defaultValue;\r\n }\r\n\r\n // 更新内存缓存\r\n this.cache.set(key, item);\r\n\r\n return item.value;\r\n },\r\n 'localStorage',\r\n 'GET_STORAGE_ERROR',\r\n defaultValue\r\n );\r\n\r\n monitor.end(`getStorage_${key}`);\r\n return result ?? defaultValue;\r\n }\r\n\r\n /**\r\n * 删除存储\r\n */\r\n remove(key: string): boolean {\r\n return safeSync(\r\n () => {\r\n if (!key || typeof key !== 'string') {\r\n return false;\r\n }\r\n\r\n uni.removeStorageSync(key);\r\n this.cache.delete(key);\r\n return true;\r\n },\r\n 'localStorage',\r\n 'REMOVE_STORAGE_ERROR',\r\n false\r\n ) ?? false;\r\n }\r\n\r\n /**\r\n * 清空所有存储\r\n */\r\n clear(): boolean {\r\n return safeSync(\r\n () => {\r\n uni.clearStorageSync();\r\n this.cache.clear();\r\n return true;\r\n },\r\n 'localStorage',\r\n 'CLEAR_STORAGE_ERROR',\r\n false\r\n ) ?? false;\r\n }\r\n\r\n /**\r\n * 获取存储信息\r\n */\r\n getInfo(): { keys: string[]; currentSize: number; limitSize: number } {\r\n return safeSync(\r\n () => {\r\n const info = uni.getStorageInfoSync();\r\n return {\r\n keys: info.keys || [],\r\n currentSize: info.currentSize || 0,\r\n limitSize: info.limitSize || 0\r\n };\r\n },\r\n 'localStorage',\r\n 'GET_STORAGE_INFO_ERROR',\r\n { keys: [], currentSize: 0, limitSize: 0 }\r\n ) ?? { keys: [], currentSize: 0, limitSize: 0 };\r\n }\r\n\r\n /**\r\n * 清理过期数据\r\n */\r\n cleanExpired(): number {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('cleanExpiredStorage', 'localStorage');\r\n\r\n const result = safeSync(\r\n () => {\r\n const info = this.getInfo();\r\n let cleanedCount = 0;\r\n\r\n info.keys.forEach(key => {\r\n const item = this.get(key);\r\n // get方法内部会自动清理过期数据\r\n if (item === undefined) {\r\n cleanedCount++;\r\n }\r\n });\r\n\r\n return cleanedCount;\r\n },\r\n 'localStorage',\r\n 'CLEAN_EXPIRED_ERROR',\r\n 0\r\n );\r\n\r\n monitor.end('cleanExpiredStorage');\r\n return result ?? 0;\r\n }\r\n}\r\n\r\n// 获取存储管理器实例\r\nconst storageManager = StorageManager.getInstance();\r\n\r\n/**\r\n * 同步设置本地缓存(优化版本)\r\n * @param key 缓存键\r\n * @param obj 要缓存的值,可以是任何类型\r\n * @param options 存储选项\r\n * @returns 是否设置成功\r\n */\r\nexport function setStorageSync<T>(key: string, obj: T, options: StorageOptions = {}): boolean {\r\n return storageManager.set(key, obj, options);\r\n}\r\n\r\n/**\r\n * 同步获取本地缓存(优化版本)\r\n * @param key 缓存键\r\n * @param defaultValue 默认值\r\n * @returns 缓存的值\r\n */\r\nexport function getStorageSync<T>(key: string, defaultValue?: T): T | undefined {\r\n return storageManager.get(key, defaultValue);\r\n}\r\n\r\n/**\r\n * 同步清理本地缓存(优化版本)\r\n * @param key 可选的缓存键\r\n * @returns 是否清理成功\r\n */\r\nexport function clearStorageSync(key?: string): boolean {\r\n if (key) {\r\n return storageManager.remove(key);\r\n } else {\r\n return storageManager.clear();\r\n }\r\n}\r\n\r\n/**\r\n * 异步设置本地缓存\r\n * @param key 缓存键\r\n * @param obj 要缓存的值\r\n * @param options 存储选项\r\n * @returns Promise<boolean>\r\n */\r\nexport async function setStorage<T>(key: string, obj: T, options: StorageOptions = {}): Promise<boolean> {\r\n return await safeAsync(\r\n () => new Promise<boolean>((resolve) => {\r\n const success = setStorageSync(key, obj, options);\r\n resolve(success);\r\n }),\r\n 'localStorage',\r\n 'SET_STORAGE_ASYNC_ERROR'\r\n ) ?? false;\r\n}\r\n\r\n/**\r\n * 异步获取本地缓存\r\n * @param key 缓存键\r\n * @param defaultValue 默认值\r\n * @returns Promise<T | undefined>\r\n */\r\nexport async function getStorage<T>(key: string, defaultValue?: T): Promise<T | undefined> {\r\n return await safeAsync(\r\n () => new Promise<T | undefined>((resolve) => {\r\n const value = getStorageSync(key, defaultValue);\r\n resolve(value);\r\n }),\r\n 'localStorage',\r\n 'GET_STORAGE_ASYNC_ERROR'\r\n ) ?? defaultValue;\r\n}\r\n\r\n/**\r\n * 获取存储信息\r\n * @returns 存储信息\r\n */\r\nexport function getStorageInfo() {\r\n return storageManager.getInfo();\r\n}\r\n\r\n/**\r\n * 清理过期数据\r\n * @returns 清理的数据条数\r\n */\r\nexport function cleanExpiredStorage(): number {\r\n return storageManager.cleanExpired();\r\n}\r\n\r\n/**\r\n * 批量设置存储\r\n * @param items 要设置的键值对\r\n * @param options 存储选项\r\n * @returns 成功设置的数量\r\n */\r\nexport function batchSetStorage(items: Record<string, any>, options: StorageOptions = {}): number {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('batchSetStorage', 'localStorage');\r\n\r\n let successCount = 0;\r\n Object.entries(items).forEach(([key, value]) => {\r\n if (setStorageSync(key, value, options)) {\r\n successCount++;\r\n }\r\n });\r\n\r\n monitor.end('batchSetStorage');\r\n return successCount;\r\n}\r\n\r\n/**\r\n * 批量获取存储\r\n * @param keys 要获取的键数组\r\n * @returns 键值对对象\r\n */\r\nexport function batchGetStorage<T = any>(keys: string[]): Record<string, T | undefined> {\r\n const monitor = PerformanceMonitor.getInstance();\r\n monitor.start('batchGetStorage', 'localStorage');\r\n\r\n const result: Record<string, T | undefined> = {};\r\n keys.forEach(key => {\r\n result[key] = getStorageSync<T>(key);\r\n });\r\n\r\n monitor.end('batchGetStorage');\r\n return result;\r\n}\r\n","// 核心功能\r\nexport * from './core/errorHandler'\r\nexport * from './core/performance'\r\n\r\n// UI交互相关\r\nexport * from './ui'\r\n\r\n// 导航相关\r\nexport * from './navigation'\r\n\r\n// 剪贴板相关\r\nexport * from './clipboard'\r\n\r\n// 系统信息相关\r\nexport * from './system'\r\n\r\n// 本地存储相关\r\nexport * from './localStorage'\r\n\r\n// 工具函数\r\nexport * from './utils'\r\n\r\n// 版本信息\r\nexport const VERSION = '1.0.8';\r\n\r\n// 初始化函数\r\nexport async function initUniAppTools(config = {}) {\r\n const {\r\n enablePerformanceMonitor = false,\r\n enableErrorHandler = true,\r\n logLevel = 'warn'\r\n } = config;\r\n\r\n if (enableErrorHandler) {\r\n const { ErrorHandler } = await import('./core/errorHandler');\r\n const errorHandler = ErrorHandler.getInstance();\r\n\r\n // 设置全局错误监听\r\n if (enablePerformanceMonitor) {\r\n errorHandler.onError((error) => {\r\n console.log(`[UniAppTools] ${error.module} - ${error.code}: ${error.message}`);\r\n });\r\n }\r\n }\r\n\r\n if (enablePerformanceMonitor) {\r\n const { PerformanceMonitor } = await import('./core/performance');\r\n const monitor = PerformanceMonitor.getInstance();\r\n\r\n // 定期输出性能报告\r\n setInterval(() => {\r\n const report = monitor.getReport();\r\n if (report.slowest.length > 0) {\r\n console.log('[UniAppTools] 性能报告:', report);\r\n }\r\n }, 60000); // 每分钟输出一次\r\n }\r\n\r\n console.log(`[UniAppTools] v${VERSION} 初始化完成`);\r\n}\r\n"],"names":["errorHandler"],"mappings":"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"}
|