@qy_better_lib/hooks 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/DOCUMENTATION.md +704 -0
  2. package/USAGE.md +444 -0
  3. package/__tests__/use-chart/index.test.ts +287 -0
  4. package/__tests__/use-emit/index.test.ts +248 -0
  5. package/__tests__/use-fullscreen/index.test.ts +162 -0
  6. package/__tests__/use-image/index.test.ts +230 -0
  7. package/__tests__/use-layout-flow/index.test.ts +382 -0
  8. package/__tests__/use-mqtt/index.test.ts +392 -0
  9. package/__tests__/use-print/index.test.ts +378 -0
  10. package/__tests__/use-watermark/index.test.ts +277 -0
  11. package/__tests__/use-websocket/index.test.ts +402 -0
  12. package/dist/hooks.min.js +76 -0
  13. package/lib/_virtual/dayjs.min.js +2 -0
  14. package/lib/_virtual/dayjs.min2.js +4 -0
  15. package/lib/index.d.ts +5 -2
  16. package/lib/index.js +20 -31
  17. package/lib/node_modules/dayjs/dayjs.min.js +286 -0
  18. package/lib/packages/hooks/node_modules/@qy_better_lib/core/lib/directives/click_outside.js +19 -0
  19. package/lib/packages/hooks/node_modules/@qy_better_lib/core/lib/utils/dom.js +25 -0
  20. package/lib/packages/hooks/node_modules/@qy_better_lib/core/lib/utils/echarts.js +166 -0
  21. package/lib/packages/hooks/node_modules/@qy_better_lib/core/lib/utils/file.js +55 -0
  22. package/lib/packages/hooks/node_modules/@qy_better_lib/core/lib/utils/is.js +8 -0
  23. package/lib/packages/hooks/node_modules/@qy_better_lib/core/lib/utils/object.js +83 -0
  24. package/lib/packages/hooks/node_modules/@qy_better_lib/core/lib/utils/random.js +11 -0
  25. package/lib/use-chart/config.d.ts +2 -3
  26. package/lib/use-chart/config.js +80 -0
  27. package/lib/use-chart/index.d.ts +5 -13
  28. package/lib/use-chart/index.js +199 -0
  29. package/lib/use-chart/type.d.ts +92 -4
  30. package/lib/use-emit/extend.d.ts +2 -1
  31. package/lib/use-emit/extend.js +34 -15
  32. package/lib/use-emit/index.d.ts +2 -13
  33. package/lib/use-emit/index.js +22 -17
  34. package/lib/use-emit/type.d.ts +16 -0
  35. package/lib/use-fullscreen/index.d.ts +23 -0
  36. package/lib/use-fullscreen/index.js +53 -0
  37. package/lib/use-image/index.d.ts +18 -52
  38. package/lib/use-image/index.js +189 -67
  39. package/lib/use-image/type.d.ts +8 -10
  40. package/lib/use-image/type.js +7 -6
  41. package/lib/use-layout-flow/index.d.ts +14 -40
  42. package/lib/use-layout-flow/index.js +286 -0
  43. package/lib/use-layout-flow/type.d.ts +46 -0
  44. package/lib/use-mqtt/index.d.ts +9 -18
  45. package/lib/use-mqtt/index.js +179 -0
  46. package/lib/use-mqtt/type.d.ts +78 -0
  47. package/lib/use-print/index.d.ts +5 -9
  48. package/lib/use-print/index.js +274 -40
  49. package/lib/use-print/type.d.ts +58 -0
  50. package/lib/use-watermark/index.d.ts +7 -0
  51. package/lib/use-watermark/index.js +134 -0
  52. package/lib/use-watermark/type.d.ts +55 -0
  53. package/lib/use-websocket/index.d.ts +6 -13
  54. package/lib/use-websocket/index.js +192 -39
  55. package/lib/use-websocket/type.d.ts +54 -0
  56. package/package.json +9 -3
  57. package/dist/@qy_better_lib/hooks.min.js +0 -15
  58. package/lib/use-chart/utils.d.ts +0 -7
  59. package/lib/use-file/index.d.ts +0 -14
  60. package/lib/use-file/index.js +0 -26
  61. package/lib/use-image/canvastoDataURL.d.ts +0 -11
  62. package/lib/use-image/canvastoDataURL.js +0 -7
  63. package/lib/use-image/canvastoFile.d.ts +0 -11
  64. package/lib/use-image/canvastoFile.js +0 -9
  65. package/lib/use-image/dataURLtoFile.d.ts +0 -10
  66. package/lib/use-image/dataURLtoFile.js +0 -16
  67. package/lib/use-image/dataURLtoImage.d.ts +0 -7
  68. package/lib/use-image/dataURLtoImage.js +0 -9
  69. package/lib/use-image/downloadFile.d.ts +0 -7
  70. package/lib/use-image/downloadFile.js +0 -9
  71. package/lib/use-image/filetoDataURL.d.ts +0 -7
  72. package/lib/use-image/filetoDataURL.js +0 -9
  73. package/lib/use-image/imagetoCanvas.d.ts +0 -26
  74. package/lib/use-image/imagetoCanvas.js +0 -41
  75. package/lib/use-image/urltoBlob.d.ts +0 -8
  76. package/lib/use-image/urltoBlob.js +0 -6
  77. package/lib/use-image/urltoImage.d.ts +0 -7
  78. package/lib/use-image/urltoImage.js +0 -13
  79. package/lib/use-utils/index.d.ts +0 -1
  80. package/lib/use-utils/use-fullscreen.d.ts +0 -9
  81. package/lib/use-waterMark/index.d.ts +0 -17
  82. package/lib/use-waterMark/index.js +0 -29
package/USAGE.md ADDED
@@ -0,0 +1,444 @@
1
+ # QY Better Lib Hooks - 使用文档
2
+
3
+ 本文档详细介绍了 QY Better Lib Hooks 包中的各种钩子函数,包括功能描述、参数说明、返回类型和使用示例。
4
+
5
+ ## Hooks 分类
6
+
7
+ ### 1. 事件管理钩子 (use-emit)
8
+
9
+ #### use_emit
10
+ - **功能**: 创建全局事件发射器,支持事件的注册和监听
11
+ - **参数**: `event_list?: Array<EventItem>` - 事件监听器数组
12
+ - **返回类型**: `UseEmits` - 包含事件发射器的对象
13
+ - **示例**:
14
+ ```typescript
15
+ import { use_emit } from '@qy_better_lib/hooks';
16
+
17
+ const { emitter } = use_emit([
18
+ {
19
+ key: 'test-event',
20
+ value: (data) => {
21
+ console.log('收到事件:', data);
22
+ }
23
+ }
24
+ ]);
25
+
26
+ // 发送事件
27
+ emitter.emit('test-event', { message: 'Hello' });
28
+
29
+ // 异步发送事件
30
+ await emitter.emitAsync('test-event', { message: 'Async Hello' });
31
+ ```
32
+
33
+ ### 2. 打印功能钩子 (use-print)
34
+
35
+ #### use_print
36
+ - **功能**: 提供打印页面元素的功能,支持打印HTML内容和DOM元素
37
+ - **参数**: 无
38
+ - **返回类型**: `UsePrintReturn` - 包含打印操作方法的对象
39
+ - **示例**:
40
+ ```typescript
41
+ import { use_print } from '@qy_better_lib/hooks';
42
+
43
+ const { print_html, preview_html } = use_print();
44
+
45
+ // 打印指定DOM元素
46
+ print_html('#content', {
47
+ page_size: 'A4',
48
+ page_orientation: 'portrait',
49
+ print_background: true,
50
+ on_complete: () => {
51
+ console.log('打印完成');
52
+ }
53
+ });
54
+
55
+ // 预览打印内容
56
+ preview_html('#content', {
57
+ preview: true
58
+ });
59
+ ```
60
+
61
+ ### 3. 水印功能钩子 (use-watermark)
62
+
63
+ #### use_water_mark
64
+ - **功能**: 在页面上添加水印,支持自定义水印内容、样式和位置
65
+ - **参数**: 无
66
+ - **返回类型**: `UseWaterMark` - 包含水印操作方法的对象
67
+ - **示例**:
68
+ ```typescript
69
+ import { use_water_mark } from '@qy_better_lib/hooks';
70
+
71
+ const { create_water_mark, remove_water_mark, update_water_mark } = use_water_mark();
72
+
73
+ // 创建水印
74
+ create_water_mark({
75
+ text1: '测试水印',
76
+ text2: '2024-01-01',
77
+ font_size: 16,
78
+ font_family: 'Arial',
79
+ rotate: -15,
80
+ text_color: '#999',
81
+ opacity: 0.1,
82
+ z_index: 100000,
83
+ responsive: true
84
+ });
85
+
86
+ // 更新水印
87
+ update_water_mark({
88
+ text1: '更新后的水印'
89
+ });
90
+
91
+ // 移除水印
92
+ remove_water_mark();
93
+ ```
94
+
95
+ ### 4. WebSocket 钩子 (use-websocket)
96
+
97
+ #### use_web_socket
98
+ - **功能**: 提供 WebSocket 通信功能,支持自动重连、心跳检测和消息队列
99
+ - **参数**: `options: WebSocketOptions` - WebSocket 配置选项
100
+ - **返回类型**: `UseWebSocketReturn` - 包含 WebSocket 操作方法和状态的对象
101
+ - **示例**:
102
+ ```typescript
103
+ import { use_web_socket } from '@qy_better_lib/hooks';
104
+
105
+ const { ws, send_message, get_status, close } = use_web_socket({
106
+ server: 'ws://localhost:8080',
107
+ receive: (event) => {
108
+ console.log('收到消息:', event.data);
109
+ },
110
+ max_reconnect_attempts: 5,
111
+ reconnect_interval: 5000,
112
+ heartbeat_interval: 30000,
113
+ heartbeat_message: 'ping',
114
+ on_open: () => {
115
+ console.log('WebSocket连接成功');
116
+ },
117
+ on_error: (error) => {
118
+ console.error('WebSocket错误:', error);
119
+ },
120
+ on_close: () => {
121
+ console.log('WebSocket连接关闭');
122
+ }
123
+ });
124
+
125
+ // 发送消息
126
+ send_message({ type: 'chat', content: 'Hello WebSocket' });
127
+
128
+ // 获取连接状态
129
+ console.log('连接状态:', get_status());
130
+
131
+ // 关闭连接
132
+ close();
133
+ ```
134
+
135
+ ### 5. 图片处理钩子 (use-image)
136
+
137
+ #### use_image
138
+ - **功能**: 提供图片处理功能,包括压缩、转换和下载
139
+ - **参数**: 无
140
+ - **返回类型**: 包含图片处理方法的对象
141
+ - **示例**:
142
+ ```typescript
143
+ import { use_image, EImageType } from '@qy_better_lib/hooks';
144
+
145
+ const { compress, compress_accurately, download_file } = use_image();
146
+
147
+ // 压缩图片
148
+ async function handleImageCompress(file) {
149
+ const compressedFile = await compress(file, {
150
+ quality: 0.8,
151
+ type: EImageType.JPEG
152
+ });
153
+ console.log('压缩后的文件大小:', compressedFile.size);
154
+ return compressedFile;
155
+ }
156
+
157
+ // 精确压缩图片到指定大小
158
+ async function handleImageCompressAccurately(file) {
159
+ const compressedFile = await compress_accurately(file, {
160
+ size: 100, // 100KB
161
+ accuracy: 0.95,
162
+ type: EImageType.JPEG
163
+ });
164
+ console.log('精确压缩后的文件大小:', compressedFile.size);
165
+ return compressedFile;
166
+ }
167
+
168
+ // 下载图片
169
+ function handleDownloadImage(blob) {
170
+ download_file(blob, 'compressed-image.jpg');
171
+ }
172
+ ```
173
+
174
+ ### 6. 全屏功能钩子 (use-fullscreen)
175
+
176
+ #### use_fullscreen
177
+ - **功能**: 提供全屏功能,支持切换、进入和退出全屏
178
+ - **参数**: `selector: string` - 目标元素选择器
179
+ - **返回类型**: `UseFullScreenReturn` - 包含全屏操作方法和状态的对象
180
+ - **示例**:
181
+ ```typescript
182
+ import { use_fullscreen } from '@qy_better_lib/hooks';
183
+
184
+ const { full, toggle_fullscreen, enter_fullscreen, exit_fullscreen } = use_fullscreen('#app');
185
+
186
+ // 切换全屏状态
187
+ toggle_fullscreen();
188
+
189
+ // 进入全屏
190
+ enter_fullscreen();
191
+
192
+ // 退出全屏
193
+ exit_fullscreen();
194
+
195
+ // 监听全屏状态变化
196
+ console.log('当前全屏状态:', full.value);
197
+ ```
198
+
199
+ ### 7. 图表管理钩子 (use-chart)
200
+
201
+ #### use_chart
202
+ - **功能**: 提供 ECharts 图表管理功能,支持渲染、更新和销毁图表
203
+ - **参数**: `options: UseChartOptions` - 图表配置选项
204
+ - **返回类型**: `UseChartReturn` - 包含图表管理方法的对象
205
+ - **示例**:
206
+ ```typescript
207
+ import { use_chart } from '@qy_better_lib/hooks';
208
+
209
+ const { render_chart, update_chart, remove_chart } = use_chart({
210
+ default_theme: 'light',
211
+ default_renderer: 'canvas',
212
+ auto_responsive: true
213
+ });
214
+
215
+ // 渲染图表
216
+ async function renderMyChart() {
217
+ const chartOption = {
218
+ title: {
219
+ text: '示例图表'
220
+ },
221
+ tooltip: {},
222
+ xAxis: {
223
+ data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
224
+ },
225
+ yAxis: {},
226
+ series: [{
227
+ name: '销量',
228
+ type: 'bar',
229
+ data: [120, 200, 150, 80, 70, 110, 130]
230
+ }]
231
+ };
232
+
233
+ const chart = await render_chart(chartOption, '#chart-container');
234
+ console.log('图表渲染成功:', chart);
235
+ }
236
+
237
+ // 更新图表
238
+ function updateMyChart() {
239
+ const newOption = {
240
+ series: [{
241
+ name: '销量',
242
+ type: 'bar',
243
+ data: [150, 250, 200, 100, 90, 130, 160]
244
+ }]
245
+ };
246
+
247
+ update_chart('#chart-container', newOption);
248
+ }
249
+
250
+ // 移除图表
251
+ function removeMyChart() {
252
+ remove_chart('#chart-container');
253
+ }
254
+ ```
255
+
256
+ ### 8. 流程图布局钩子 (use-layout-flow)
257
+
258
+ #### use_layout_flow
259
+ - **功能**: 提供流程图自动布局功能,支持多种布局方向和自定义元素
260
+ - **参数**: `options: LayoutFlow` - 布局配置选项
261
+ - **返回类型**: 包含流程图布局方法的对象
262
+ - **示例**:
263
+ ```typescript
264
+ import { use_layout_flow } from '@qy_better_lib/hooks';
265
+
266
+ const { init, add_graph_elements, layout, center_content } = use_layout_flow({
267
+ option: {
268
+ panning: true,
269
+ interacting: false,
270
+ mousewheel: {
271
+ enabled: true
272
+ },
273
+ scaling: { min: 0.1, max: 10 }
274
+ }
275
+ });
276
+
277
+ // 初始化画布
278
+ async function initFlowChart() {
279
+ const container = document.getElementById('flow-container');
280
+ const success = await init(container);
281
+
282
+ if (success) {
283
+ // 添加节点和边
284
+ const elements = [
285
+ {
286
+ id: 'node1',
287
+ shape: 'rect',
288
+ x: 100,
289
+ y: 100,
290
+ width: 80,
291
+ height: 40,
292
+ label: '节点1'
293
+ },
294
+ {
295
+ id: 'node2',
296
+ shape: 'rect',
297
+ x: 300,
298
+ y: 100,
299
+ width: 80,
300
+ height: 40,
301
+ label: '节点2'
302
+ },
303
+ {
304
+ id: 'edge1',
305
+ shape: 'edge',
306
+ source: 'node1',
307
+ target: 'node2'
308
+ }
309
+ ];
310
+
311
+ add_graph_elements(elements);
312
+
313
+ // 自动布局
314
+ await layout({
315
+ node_w: 100,
316
+ node_h: 50,
317
+ nodesep: 50,
318
+ ranksep: 80
319
+ }, 'LR');
320
+
321
+ // 内容居中
322
+ center_content(50);
323
+ }
324
+ }
325
+ ```
326
+
327
+ ### 9. MQTT 通信钩子 (use-mqtt)
328
+
329
+ #### use_mqtt
330
+ - **功能**: 提供 MQTT 通信功能,支持连接管理、消息订阅和发布
331
+ - **参数**:
332
+ - `url: string` - MQTT broker 地址
333
+ - `options: any` - MQTT 连接选项
334
+ - **返回类型**: `UseMqttReturn` - 包含 MQTT 操作方法和状态的对象
335
+ - **示例**:
336
+ ```typescript
337
+ import { use_mqtt } from '@qy_better_lib/hooks';
338
+
339
+ const { connect, subscribe, publish, close, status } = use_mqtt('mqtt://localhost:1883', {
340
+ clientId: 'test-client',
341
+ clean: true,
342
+ reconnectPeriod: 5000
343
+ });
344
+
345
+ // 连接 MQTT
346
+ async function connectMqtt() {
347
+ connect({
348
+ success: () => {
349
+ console.log('MQTT 连接成功');
350
+ // 订阅主题
351
+ subscribe('test/topic', {}, (err, granted) => {
352
+ if (!err) {
353
+ console.log('订阅成功:', granted);
354
+ }
355
+ });
356
+ },
357
+ error: (err) => {
358
+ console.error('MQTT 连接错误:', err);
359
+ },
360
+ receive: (topic, message) => {
361
+ console.log('收到消息:', topic, message.toString());
362
+ }
363
+ });
364
+ }
365
+
366
+ // 发布消息
367
+ function publishMessage() {
368
+ publish('test/topic', 'Hello MQTT', {}, (error) => {
369
+ if (!error) {
370
+ console.log('消息发布成功');
371
+ }
372
+ });
373
+ }
374
+
375
+ // 关闭连接
376
+ function closeMqtt() {
377
+ close(() => {
378
+ console.log('MQTT 连接已关闭');
379
+ });
380
+ }
381
+
382
+ // 监听连接状态
383
+ console.log('当前连接状态:', status);
384
+ ```
385
+
386
+ ## 安装和使用
387
+
388
+ ### 安装
389
+
390
+ ```bash
391
+ # 使用 npm
392
+ npm install @qy_better_lib/hooks
393
+
394
+ # 使用 yarn
395
+ yarn add @qy_better_lib/hooks
396
+ ```
397
+
398
+ ### 全局引入
399
+
400
+ ```typescript
401
+ import { createApp } from 'vue';
402
+ import App from './App.vue';
403
+ import * as QyHooks from '@qy_better_lib/hooks';
404
+
405
+ const app = createApp(App);
406
+
407
+ // 全局注册所有钩子
408
+ app.config.globalProperties.$hooks = QyHooks;
409
+
410
+ app.mount('#app');
411
+ ```
412
+
413
+ ### 按需引入
414
+
415
+ ```typescript
416
+ // 按需引入所需的钩子
417
+ import { use_print, use_water_mark } from '@qy_better_lib/hooks';
418
+ ```
419
+
420
+ ## 版本历史
421
+
422
+ - **v1.0.0** - 初始版本,包含所有钩子函数
423
+
424
+ ## 贡献指南
425
+
426
+ 1. Fork 仓库
427
+ 2. 创建功能分支
428
+ 3. 提交代码
429
+ 4. 发起 Pull Request
430
+
431
+ ## 许可证
432
+
433
+ MIT License
434
+
435
+ ## 注意事项
436
+
437
+ - 使用 `use-chart` 钩子时,需要确保已安装 `echarts` 依赖
438
+ - 使用 `use-layout-flow` 钩子时,需要确保已安装 `@antv/x6` 和 `dagre` 依赖
439
+ - 使用 `use-mqtt` 钩子时,需要确保已安装 `mqtt` 依赖
440
+ - 所有钩子函数都使用 TypeScript 编写,提供了完整的类型定义
441
+
442
+ ## 总结
443
+
444
+ QY Better Lib Hooks 提供了一系列实用的 Vue 3 Composition API 钩子函数,涵盖了事件管理、打印功能、水印功能、WebSocket 通信、图片处理、全屏功能、图表管理、流程图布局和 MQTT 通信等多种场景。这些钩子函数设计简洁,使用方便,可以帮助开发者更高效地构建 Vue 应用。