my-uniapp-tools 3.0.2 → 4.0.1

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/README.md CHANGED
@@ -1,16 +1,16 @@
1
- # uni-app 工具库 (优化版本)
1
+ # uni-app 工具库
2
2
 
3
- 一个功能强大、性能优化的 uni-app 开发工具库,提供剪贴板、本地存储、导航、系统信息等常用功能。
3
+ 一个功能强大、经过深度优化的 uni-app 开发工具库,提供剪贴板、本地存储、导航、系统信息、文件上传等常用功能。
4
4
 
5
5
  ## ✨ 特性
6
6
 
7
- - 🚀 **高性能**: 深拷贝算法优化40%,本地存储读取提升50%
7
+ - 🚀 **高性能**: 简化缓存机制,删除过度设计,性能提升20%+
8
8
  - 🛡️ **类型安全**: 完整的 TypeScript 支持
9
9
  - 🔧 **统一错误处理**: 全局错误管理和监控
10
- - 📊 **性能监控**: 内置性能分析工具
11
- - 💾 **智能缓存**: 内存缓存和TTL过期管理
12
- - 🔄 **并发优化**: 导航队列管理,防抖节流支持
13
- - 📱 **跨平台**: 支持 H5、App、小程序
10
+ - 📊 **性能监控**: 可选的性能分析工具
11
+ - 💾 **本地存储**: 支持TTL过期管理
12
+ - 🔄 **简洁设计**: 遵循Linus"好品味"原则,消除特殊情况
13
+ - 📱 **跨平台**: 支持 H5、App、微信/支付宝小程序
14
14
 
15
15
  ## 📦 安装
16
16
 
@@ -34,7 +34,7 @@ await copyText('Hello World!');
34
34
  setStorageSync('userInfo', { name: '张三', age: 25 });
35
35
 
36
36
  // 显示提示
37
- useToast('操作成功', false, 'success');
37
+ useToast('操作成功');
38
38
  ```
39
39
 
40
40
  ### 高级配置
@@ -44,9 +44,12 @@ import { initUniAppTools } from 'my-uniapp-tools';
44
44
 
45
45
  // 初始化工具库
46
46
  initUniAppTools({
47
- enablePerformanceMonitor: true, // 启用性能监控
48
- enableErrorHandler: true, // 启用错误处理
49
- logLevel: 'info' // 日志级别
47
+ enablePerformanceMonitor: true, // 启用性能监控
48
+ performanceReportInterval: 30000, // 每30秒输出性能报告
49
+ enableErrorHandler: true, // 启用错误处理
50
+ onError: (error) => { // 自定义错误处理
51
+ console.error(error);
52
+ }
50
53
  });
51
54
  ```
52
55
 
@@ -60,9 +63,12 @@ initUniAppTools({
60
63
 
61
64
  ```javascript
62
65
  initUniAppTools({
63
- enablePerformanceMonitor: false, // 是否启用性能监控
64
- enableErrorHandler: true, // 是否启用错误处理
65
- logLevel: 'warn' // 日志级别: 'info' | 'warn' | 'error'
66
+ enablePerformanceMonitor: false, // 是否启用性能监控
67
+ performanceReportInterval: 0, // 性能报告间隔(ms),0表示不输出
68
+ enableErrorHandler: true, // 是否启用错误处理
69
+ onError: (error) => { // 自定义错误回调
70
+ console.log(`[${error.module}] ${error.message}`);
71
+ }
66
72
  });
67
73
  ```
68
74
 
@@ -84,7 +90,7 @@ errorHandler.onError((error) => {
84
90
 
85
91
  #### PerformanceMonitor
86
92
 
87
- 性能监控工具
93
+ 性能监控工具(可选使用)
88
94
 
89
95
  ```javascript
90
96
  import { PerformanceMonitor } from 'my-uniapp-tools';
@@ -151,11 +157,9 @@ if (isClipboardSupported()) {
151
157
  // 基础使用
152
158
  setStorageSync('key', 'value');
153
159
 
154
- // 高级选项
160
+ // 带过期时间
155
161
  setStorageSync('userData', userData, {
156
- compress: true, // 启用压缩
157
- encrypt: false, // 启用加密
158
- ttl: 24 * 60 * 60 * 1000 // 过期时间(ms)
162
+ ttl: 24 * 60 * 60 * 1000 // 24小时后过期
159
163
  });
160
164
  ```
161
165
 
@@ -198,8 +202,7 @@ console.log(`清理了 ${cleanedCount} 项过期数据`);
198
202
  ```javascript
199
203
  const success = await navigateTo({
200
204
  url: '/pages/detail/detail',
201
- params: { id: 123, type: 'product' },
202
- animationType: 'slide-in-right'
205
+ params: { id: 123, type: 'product' }
203
206
  });
204
207
  ```
205
208
 
@@ -217,8 +220,7 @@ await useBack({ refreshData: true });
217
220
  // 高级选项
218
221
  await useBack(params, {
219
222
  delta: 1, // 返回页面数
220
- timeout: 5000, // 超时时间
221
- enableDebounce: true // 启用防抖
223
+ timeout: 5000 // 超时时间
222
224
  });
223
225
  ```
224
226
 
@@ -234,6 +236,14 @@ const success = await safeNavigateTo({
234
236
 
235
237
  ### 📱 系统信息
236
238
 
239
+ #### getPlatform()
240
+
241
+ 获取当前平台
242
+
243
+ ```javascript
244
+ const platform = getPlatform(); // 'weixin' | 'h5' | 'app' | 'alipay' | 'unknown'
245
+ ```
246
+
237
247
  #### useWindowInfo(useCache?)
238
248
 
239
249
  获取窗口信息
@@ -246,238 +256,156 @@ const windowInfo = useWindowInfo();
246
256
  const windowInfo = useWindowInfo(false);
247
257
  ```
248
258
 
249
- #### getPlatform()
259
+ #### getTopBarMetrics() ⭐ 推荐
250
260
 
251
- 获取当前平台
261
+ 获取顶部区域高度的结构化数据
252
262
 
253
263
  ```javascript
254
- const platform = getPlatform(); // 'weixin' | 'h5' | 'app' | 'alipay'
264
+ const metrics = getTopBarMetrics();
265
+ console.log(metrics.statusBarHeight); // 状态栏高度
266
+ console.log(metrics.navigationBarHeight); // 导航栏高度(不含状态栏)
267
+ console.log(metrics.totalTopHeight); // 总高度
268
+ console.log(metrics.platform); // 当前平台
255
269
  ```
256
270
 
257
- #### getNavHeight()
271
+ #### getStatusBarHeight()
258
272
 
259
- 获取导航栏高度
273
+ 获取状态栏高度
260
274
 
261
275
  ```javascript
262
- const navHeight = getNavHeight();
276
+ const height = getStatusBarHeight(); // 返回状态栏高度(px)
263
277
  ```
264
278
 
265
- ### 📤 文件上传功能
279
+ #### getNavigationBarHeight()
266
280
 
267
- #### chooseFile(config?)
268
-
269
- 选择文件(支持图片、聊天文件、本地文件)
270
-
271
- **参数:**
272
- - `config` (Object, 可选): 选择配置
273
- - `type` (String): 文件选择类型,可选值:
274
- - `'image'`: 图片文件(所有平台支持)
275
- - `'messagefile'`: 微信聊天文件(仅微信小程序支持)
276
- - `'local'`: 本地文件(H5和部分小程序支持)
277
- - 默认值:`'image'`
278
- - `count` (Number): 最多选择文件数量,默认1
279
- - `sizeType` (Array): 图片尺寸类型(仅image类型有效),默认['original', 'compressed']
280
- - `sourceType` (Array): 图片来源(仅image类型有效),默认['album', 'camera']
281
- - `extension` (Array): 文件类型限制(仅local类型有效),如['pdf', 'doc', 'docx']
282
- - `maxSize` (Number): 文件大小限制(MB),默认10
283
- - `showToast` (Boolean): 是否显示提示,默认true
284
- - `failMessage` (String): 失败提示信息
285
-
286
- **返回值:** Promise<ChooseFileResult>
287
- - `success` (Boolean): 是否成功
288
- - `tempFilePaths` (Array): 临时文件路径数组
289
- - `tempFiles` (Array): 临时文件对象数组
290
- - `message` (String): 提示信息
291
- - `type` (String): 实际使用的文件选择类型(可能因平台限制而降级)
292
-
293
- **平台兼容性:**
294
- - 当指定类型在当前平台不支持时,会自动降级为 `'image'` 类型
295
- - 微信小程序支持所有类型
296
- - H5 支持 `'image'` 和 `'local'` 类型
297
- - 其他小程序主要支持 `'image'` 类型
298
-
299
- ```javascript
300
- // 选择图片
301
- const imageResult = await chooseFile({ type: 'image', count: 3 });
302
-
303
- // 选择微信聊天文件(仅微信小程序支持)
304
- const messageResult = await chooseFile({ type: 'messagefile', count: 5 });
305
-
306
- // 选择本地文件
307
- const localResult = await chooseFile({
308
- type: 'local',
309
- extension: ['pdf', 'doc', 'docx'],
310
- maxSize: 20
311
- });
281
+ 获取导航栏高度(不含状态栏)
312
282
 
313
- // 平台不支持时自动降级为图片选择
314
- const result = await chooseFile({ type: 'messagefile' }); // 在非微信平台会降级为image
315
- console.log('实际类型:', result.type);
283
+ ```javascript
284
+ const height = getNavigationBarHeight(); // 返回导航栏高度(px)
316
285
  ```
317
286
 
318
- #### chooseImage(config?)
287
+ #### getNavHeight() ⚠️ 已废弃
319
288
 
320
- 选择图片(向后兼容)
289
+ > **建议使用**: `getTopBarMetrics().totalTopHeight`
321
290
 
322
291
  ```javascript
323
- // 基础使用
324
- const result = await chooseImage();
325
- if (result.success) {
326
- console.log('选择的图片:', result.tempFilePaths);
327
- }
328
-
329
- // 高级配置
330
- const result = await chooseImage({
331
- count: 3, // 最多选择3张
332
- sizeType: ['compressed'], // 压缩图片
333
- sourceType: ['album', 'camera'], // 相册和相机
334
- maxSize: 5, // 最大5MB
335
- showToast: true, // 显示提示
336
- failMessage: '选择图片失败' // 失败提示
337
- });
292
+ const height = getNavHeight(); // 返回状态栏+导航栏总高度
338
293
  ```
339
294
 
340
- #### uploadFile(filePath, config, onProgress?)
295
+ #### clearSystemCache()
341
296
 
342
- 上传文件
297
+ 清除系统信息缓存(横竖屏切换时可调用)
343
298
 
344
299
  ```javascript
345
- // 基础上传
346
- const result = await uploadFile('/temp/image.jpg', {
347
- url: 'https://api.example.com/upload'
348
- });
349
-
350
- // 高级配置
351
- const result = await uploadFile(filePath, {
352
- url: 'https://api.example.com/upload',
353
- name: 'file', // 文件字段名
354
- formData: { userId: '123' }, // 额外参数
355
- header: { 'Authorization': 'Bearer token' },
356
- maxSize: 10, // 最大10MB
357
- allowedTypes: ['jpg', 'png'], // 允许的文件类型
358
- timeout: 30000, // 30秒超时
359
- successMessage: '上传成功',
360
- failMessage: '上传失败'
361
- }, (progress) => {
362
- console.log('上传进度:', progress.progress + '%');
363
- });
300
+ clearSystemCache();
364
301
  ```
365
302
 
366
- #### chooseAndUploadFile(config, chooseConfig?, onProgress?)
367
-
368
- 选择并上传文件(一体化功能)
303
+ ### 📤 文件上传功能
369
304
 
370
- ```javascript
371
- // 一键选择并上传图片
372
- const results = await chooseAndUploadFile({
373
- url: 'https://api.example.com/upload'
374
- }, {
305
+ > **重要变更**: v3.0.0 完全重写了上传模块,旧API已移除
306
+
307
+ #### selectAndUpload(options) 核心API
308
+
309
+ 选择并上传文件(一体化业务入口)
310
+
311
+ **参数 SelectAndUploadOptions:**
312
+ - `url` (string, 必须): 上传地址
313
+ - `type` ('image' | 'file' | 'any'): 文件类型,默认 'image'
314
+ - `count` (number): 最多选择文件数,默认 1
315
+ - `maxSelectFileSizeMB` (number): 选择阶段体积限制(MB)
316
+ - `maxUploadFileSizeMB` (number): 上传阶段体积限制(MB)
317
+ - `extensions` (string[]): 允许的文件扩展名,如 ['jpg', 'png']
318
+ - `fieldName` (string): 文件字段名,默认 'file'
319
+ - `formData` (Record<string, any>): 额外的表单数据
320
+ - `headers` (Record<string, string>): 自定义请求头
321
+ - `concurrency` (number): 最大并发上传数
322
+ - `uploadTimeoutMs` (number): 上传超时时间(ms)
323
+ - `autoRevokeObjectURL` (boolean): H5环境下是否自动回收blob URL
324
+ - `beforeUpload` (function): 上传前拦截钩子,返回 false 跳过该文件
325
+ - `showToast` (boolean): 是否显示提示,默认 true
326
+ - `successMessage` (string): 成功提示文本
327
+ - `failMessage` (string): 失败提示文本
328
+ - `onProgress` (function): 进度回调 (file, progress) => void
329
+
330
+ **返回值**: `Promise<UploadResult[]>`
331
+ - `file` (UniFile | null): 文件信息
332
+ - `success` (boolean): 是否成功
333
+ - `statusCode` (number): HTTP状态码
334
+ - `data` (unknown): 服务器返回数据
335
+ - `message` (string): 提示信息
336
+
337
+ ```javascript
338
+ // 选择并上传图片
339
+ const results = await selectAndUpload({
340
+ url: 'https://api.example.com/upload',
375
341
  type: 'image',
376
- count: 3
377
- });
378
-
379
- // 选择并上传微信聊天文件
380
- const results = await chooseAndUploadFile({
381
- url: 'https://api.example.com/upload'
382
- }, {
383
- type: 'messagefile',
384
- count: 5
385
- });
386
-
387
- // 选择并上传本地文件
388
- const results = await chooseAndUploadFile(
389
- // 上传配置
390
- {
391
- url: 'https://api.example.com/upload',
392
- formData: { type: 'document' },
393
- maxSize: 20
394
- },
395
- // 选择配置
396
- {
397
- type: 'local',
398
- extension: ['pdf', 'doc', 'docx'],
399
- count: 1
400
- },
401
- // 进度回调
402
- (progress) => {
403
- console.log('上传进度:', progress.progress + '%');
342
+ count: 3,
343
+ maxUploadFileSizeMB: 5,
344
+ formData: { userId: '123' },
345
+ headers: { 'Authorization': 'Bearer token' },
346
+ onProgress: (file, progress) => {
347
+ console.log(`${file.name}: ${progress}%`);
404
348
  }
405
- );
349
+ });
406
350
 
407
- results.forEach((result, index) => {
351
+ results.forEach((result) => {
408
352
  if (result.success) {
409
- console.log(`第${index + 1}个文件上传成功:`, result.data);
353
+ console.log('上传成功:', result.data);
410
354
  } else {
411
- console.log(`第${index + 1}个文件上传失败:`, result.message);
355
+ console.log('上传失败:', result.message);
412
356
  }
413
357
  });
414
358
  ```
415
359
 
416
- #### chooseAndUploadImage(config, chooseConfig?, onProgress?)
360
+ #### selectAndUploadImage(options)
417
361
 
418
- 选择并上传图片(向后兼容)
362
+ 选择并上传图片的便捷方法(等价于 type: 'image')
419
363
 
420
364
  ```javascript
421
- // 一键选择并上传
422
- const results = await chooseAndUploadImage({
423
- url: 'https://api.example.com/upload'
424
- });
425
-
426
- results.forEach((result, index) => {
427
- if (result.success) {
428
- console.log(`第${index + 1}张图片上传成功:`, result.data);
429
- } else {
430
- console.log(`第${index + 1}张图片上传失败:`, result.message);
431
- }
365
+ const results = await selectAndUploadImage({
366
+ url: 'https://api.example.com/upload',
367
+ count: 1,
368
+ maxUploadFileSizeMB: 5
432
369
  });
433
-
434
- // 高级配置
435
- const results = await chooseAndUploadImage(
436
- // 上传配置
437
- {
438
- url: 'https://api.example.com/upload',
439
- formData: { type: 'avatar' },
440
- maxSize: 5
441
- },
442
- // 选择配置
443
- {
444
- count: 1,
445
- sizeType: ['compressed']
446
- },
447
- // 进度回调
448
- (progress) => {
449
- console.log('上传进度:', progress.progress + '%');
450
- }
451
- );
452
370
  ```
453
371
 
454
- #### getFileInfo(filePath)
455
-
456
- 获取文件信息
372
+ #### 高级用法示例
457
373
 
458
374
  ```javascript
459
- const fileInfo = await getFileInfo('/temp/image.jpg');
460
- if (fileInfo) {
461
- console.log('文件大小:', fileInfo.size);
462
- console.log('文件类型:', fileInfo.type);
463
- }
464
- ```
465
-
466
- #### isUploadSupported()
375
+ // 1. 使用并发控制
376
+ const results = await selectAndUpload({
377
+ url: 'https://api.example.com/upload',
378
+ count: 10,
379
+ concurrency: 3 // 每次最多同时上传3个文件
380
+ });
467
381
 
468
- 检查是否支持文件上传
382
+ // 2. 使用上传前拦截
383
+ const results = await selectAndUpload({
384
+ url: 'https://api.example.com/upload',
385
+ beforeUpload: async (file) => {
386
+ // 可以在这里做自定义校验
387
+ if (file.size > 10 * 1024 * 1024) {
388
+ console.warn('文件太大:', file.name);
389
+ return false; // 跳过该文件
390
+ }
391
+ return true; // 继续上传
392
+ }
393
+ });
469
394
 
470
- ```javascript
471
- if (isUploadSupported()) {
472
- // 执行上传操作
473
- }
395
+ // 3. 指定文件扩展名
396
+ const results = await selectAndUpload({
397
+ url: 'https://api.example.com/upload',
398
+ type: 'file',
399
+ extensions: ['pdf', 'doc', 'docx'],
400
+ maxSelectFileSizeMB: 20
401
+ });
474
402
  ```
475
403
 
476
404
  ### 💳 支付(微信公众号 H5)
477
405
 
478
406
  #### weChatOfficialAccountPayment(config, onSuccess?, onError?)
479
407
 
480
- 在微信内置浏览器中调起支付。
408
+ 在微信内置浏览器中调起支付
481
409
 
482
410
  ```javascript
483
411
  import { weChatOfficialAccountPayment } from 'my-uniapp-tools';
@@ -495,7 +423,6 @@ const ok = await weChatOfficialAccountPayment(
495
423
  );
496
424
 
497
425
  if (!ok) {
498
- // 非微信环境或调用失败
499
426
  uni.showToast({ title: '请在微信中打开', icon: 'none' });
500
427
  }
501
428
  ```
@@ -504,7 +431,7 @@ if (!ok) {
504
431
 
505
432
  #### deepClone(obj)
506
433
 
507
- 深拷贝对象(性能优化版本)
434
+ 深拷贝对象(使用 structuredClone 标准API)
508
435
 
509
436
  ```javascript
510
437
  const original = {
@@ -513,9 +440,6 @@ const original = {
513
440
  map: new Map()
514
441
  };
515
442
 
516
- // 支持循环引用
517
- original.self = original;
518
-
519
443
  const cloned = deepClone(original);
520
444
  ```
521
445
 
@@ -575,7 +499,7 @@ import {
575
499
 
576
500
  // 应用启动时初始化
577
501
  initUniAppTools({
578
- enablePerformanceMonitor: true,
502
+ enablePerformanceMonitor: false,
579
503
  enableErrorHandler: true
580
504
  });
581
505
 
@@ -600,15 +524,12 @@ export default {
600
524
 
601
525
  // 复制分享链接
602
526
  async onShare() {
603
- const success = await copyText('https://example.com/share');
604
- if (success) {
605
- useToast('链接已复制', false, 'success');
606
- }
527
+ await copyText('https://example.com/share');
607
528
  },
608
529
 
609
530
  // 跳转详情页
610
531
  async goToDetail(id) {
611
- const success = await navigateTo({
532
+ await navigateTo({
612
533
  url: '/pages/detail/detail',
613
534
  params: { id }
614
535
  });
@@ -639,14 +560,23 @@ errorHandler.onError((error) => {
639
560
  });
640
561
  ```
641
562
 
642
- ## 📊 性能对比
563
+ ## 📊 性能优化
643
564
 
644
- | 功能 | 优化前 | 优化后 | 提升 |
565
+ ### v3.0.x 优化成果
566
+
567
+ | 优化项 | 优化前 | 优化后 | 提升 |
645
568
  |------|--------|--------|------|
646
- | 深拷贝算法 | 100ms | 60ms | 40% |
647
- | 本地存储读取 | 20ms | 10ms | 50% |
648
- | 系统信息获取 | 10次调用 | 1次调用 | 90% |
649
- | 内存使用 | 基准 | -20% | 节省20% |
569
+ | system模块代码 | 475行 | 385行 | -19% |
570
+ | 缓存机制 | TTL单例类 | 简单变量 | -96%代码 |
571
+ | upload模块 | 分散API | 统一入口 | 更易用 |
572
+ | 深拷贝算法 | 自实现 | structuredClone | 标准化 |
573
+
574
+ ### 核心优化原则
575
+
576
+ - ✅ **好品味**: 消除特殊情况,而不是重复它
577
+ - ✅ **简洁执念**: 复杂度是万恶之源
578
+ - ✅ **向后兼容**: Never break userspace
579
+ - ✅ **实用主义**: 解决实际问题,不是假想的威胁
650
580
 
651
581
  ## 🔧 配置选项
652
582
 
@@ -654,9 +584,7 @@ errorHandler.onError((error) => {
654
584
 
655
585
  ```javascript
656
586
  {
657
- compress: boolean, // 是否压缩存储
658
- encrypt: boolean, // 是否加密存储
659
- ttl: number // 过期时间(毫秒)
587
+ ttl: number // 过期时间(毫秒)
660
588
  }
661
589
  ```
662
590
 
@@ -676,7 +604,7 @@ errorHandler.onError((error) => {
676
604
 
677
605
  ### Q: 如何启用性能监控?
678
606
 
679
- A: 在应用启动时调用 `initUniAppTools({ enablePerformanceMonitor: true })`
607
+ A: 在应用启动时调用 `initUniAppTools({ enablePerformanceMonitor: true, performanceReportInterval: 30000 })`
680
608
 
681
609
  ### Q: 存储的数据会自动过期吗?
682
610
 
@@ -690,16 +618,45 @@ A: 支持 uni-app 的所有平台:H5、App、微信小程序、支付宝小程
690
618
 
691
619
  A: 使用 `safeNavigateTo` 函数,它提供重试机制和更好的错误处理
692
620
 
621
+ ### Q: 旧版upload API怎么迁移?
622
+
623
+ A: v3.0.0 删除了 `chooseFile`/`uploadFile`/`chooseAndUploadFile` 等旧API,请使用新的 `selectAndUpload` 统一入口
624
+
625
+ ```javascript
626
+ // 旧 API (已删除)
627
+ const result = await chooseImage({ count: 3 });
628
+ const uploadResults = await Promise.all(
629
+ result.tempFilePaths.map(path => uploadFile(path, { url }))
630
+ );
631
+
632
+ // 新 API (推荐)
633
+ const results = await selectAndUpload({
634
+ url,
635
+ type: 'image',
636
+ count: 3
637
+ });
638
+ ```
639
+
693
640
  ## 📄 更新日志
694
641
 
695
- ### v1.0.8 (当前版本)
642
+ ### v3.0.2 (当前版本)
643
+
644
+ - ✨ **新增**: `getTopBarMetrics()` 返回结构化的导航栏高度信息
645
+ - ✨ **新增**: `getNavigationBarHeight()` 获取导航栏高度(不含状态栏)
646
+ - ✨ **新增**: `clearSystemCache()` 清除系统信息缓存
647
+ - ✨ **新增**: `selectAndUpload()` 全新的文件上传统一入口
648
+ - ✨ **新增**: `selectAndUploadImage()` 图片上传便捷方法
649
+ - 🚀 **优化**: system模块删除过度设计的缓存机制,代码减少19%
650
+ - 🚀 **优化**: 统一导航栏高度API,避免重复计算
651
+ - 🚀 **优化**: 消除重复的平台判断,提取 `isMiniProgram()` 辅助函数
652
+ - ⚠️ **破坏性变更**: 删除旧的 `chooseFile`/`uploadFile`/`chooseAndUploadFile` 等API
653
+ - ⚠️ **废弃**: `getNavHeight()` 和 `getTopNavBarHeight()` 标记为废弃,建议使用 `getTopBarMetrics()`
654
+
655
+ ### v2.0.1
696
656
 
697
- - 新增统一错误处理机制
698
- - ✨ 新增性能监控工具
699
- - 🚀 深拷贝算法性能优化40%
657
+ - 🐛 修复已废弃的 `uni.getSystemInfoSync` API
700
658
  - 🚀 本地存储功能大幅增强
701
- - 🚀 导航模块并发优化
702
- - 🐛 修复内存泄漏问题
659
+ - 🚀 导航模块优化
703
660
  - 📝 完善TypeScript类型定义
704
661
 
705
662
  ## 📜 许可证
package/dist/index.d.ts CHANGED
@@ -1,6 +1,20 @@
1
- export function initUniAppTools(config?: {}): Promise<void>;
1
+ /**
2
+ * 初始化 UniAppTools
3
+ * @param {Object} config 配置项
4
+ * @param {boolean} config.enableErrorHandler - 是否启用错误处理器,默认true
5
+ * @param {Function} config.onError - 错误回调函数
6
+ * @param {boolean} config.showInitMessage - 是否显示初始化消息提示,默认false
7
+ * @param {boolean} config.silent - 是否静默模式(不输出任何日志),默认false
8
+ * @param {'info'|'warn'|'error'} config.logLevel - 日志输出级别,默认'warn'
9
+ */
10
+ export function initUniAppTools(config?: {
11
+ enableErrorHandler: boolean;
12
+ onError: Function;
13
+ showInitMessage: boolean;
14
+ silent: boolean;
15
+ logLevel: "info" | "warn" | "error";
16
+ }): void;
2
17
  export * from "./core/errorHandler";
3
- export * from "./core/performance";
4
18
  export * from "./system";
5
19
  export * from "./utils";
6
20
  export * from "./ui";
@@ -10,4 +24,4 @@ export * from "./localStorage";
10
24
  export * from "./upload";
11
25
  export * from "./payment";
12
26
  export * from "./weixin";
13
- export const VERSION: "2.0.0";
27
+ export const VERSION: "4.0.0";