ms-vite-plugin 1.1.1 → 1.1.3

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 (94) hide show
  1. package/dist/build.js +6 -0
  2. package/dist/cli.js +98 -8
  3. package/dist/mcp/device-config.d.ts +55 -0
  4. package/dist/mcp/device-config.js +183 -0
  5. package/dist/mcp/docs-service.d.ts +65 -0
  6. package/dist/mcp/docs-service.js +168 -0
  7. package/dist/mcp/project.d.ts +16 -0
  8. package/dist/mcp/project.js +74 -0
  9. package/dist/mcp/tools.d.ts +18 -0
  10. package/dist/mcp/tools.js +825 -0
  11. package/dist/mcp/types.d.ts +32 -0
  12. package/dist/mcp/types.js +11 -0
  13. package/dist/mcp-server.d.ts +2 -0
  14. package/dist/mcp-server.js +86 -0
  15. package/dist/project.d.ts +89 -0
  16. package/dist/project.js +306 -0
  17. package/dist/version.d.ts +12 -0
  18. package/dist/version.js +63 -0
  19. package/docs/api/action.md +922 -0
  20. package/docs/api/appleocr.md +229 -0
  21. package/docs/api/config.md +122 -0
  22. package/docs/api/cryptoUtils.md +232 -0
  23. package/docs/api/device.md +374 -0
  24. package/docs/api/file.md +516 -0
  25. package/docs/api/global.md +617 -0
  26. package/docs/api/hid.md +1032 -0
  27. package/docs/api/hotUpdate.md +166 -0
  28. package/docs/api/http.md +548 -0
  29. package/docs/api/image.md +907 -0
  30. package/docs/api/ime.md +290 -0
  31. package/docs/api/logger.md +324 -0
  32. package/docs/api/media.md +248 -0
  33. package/docs/api/mysql.md +441 -0
  34. package/docs/api/netCard.md +200 -0
  35. package/docs/api/node.md +353 -0
  36. package/docs/api/paddleocr.md +246 -0
  37. package/docs/api/pip.md +242 -0
  38. package/docs/api/system.md +572 -0
  39. package/docs/api/thread.md +269 -0
  40. package/docs/api/tomatoocr.md +425 -0
  41. package/docs/api/tts.md +334 -0
  42. package/docs/api/ui.md +947 -0
  43. package/docs/api/utils.md +265 -0
  44. package/docs/api/yolo.md +310 -0
  45. package/docs/apicn/action.md +919 -0
  46. package/docs/apicn/appleocr.md +233 -0
  47. package/docs/apicn/config.md +120 -0
  48. package/docs/apicn/device.md +385 -0
  49. package/docs/apicn/file.md +511 -0
  50. package/docs/apicn/global.md +613 -0
  51. package/docs/apicn/hid.md +1033 -0
  52. package/docs/apicn/hotUpdate.md +170 -0
  53. package/docs/apicn/http.md +672 -0
  54. package/docs/apicn/image.md +924 -0
  55. package/docs/apicn/ime.md +290 -0
  56. package/docs/apicn/logger.md +332 -0
  57. package/docs/apicn/media.md +252 -0
  58. package/docs/apicn/mysql.md +445 -0
  59. package/docs/apicn/netCard.md +200 -0
  60. package/docs/apicn/node.md +362 -0
  61. package/docs/apicn/paddleocr.md +255 -0
  62. package/docs/apicn/pip.md +242 -0
  63. package/docs/apicn/system.md +575 -0
  64. package/docs/apicn/thread.md +269 -0
  65. package/docs/apicn/tts.md +338 -0
  66. package/docs/apicn/ui.md +933 -0
  67. package/docs/apicn/utils.md +265 -0
  68. package/docs/apicn/yolo.md +314 -0
  69. package/docs/apipython/action.md +901 -0
  70. package/docs/apipython/appleocr.md +226 -0
  71. package/docs/apipython/config.md +126 -0
  72. package/docs/apipython/cryptoUtils.md +246 -0
  73. package/docs/apipython/device.md +365 -0
  74. package/docs/apipython/file.md +476 -0
  75. package/docs/apipython/g.md +154 -0
  76. package/docs/apipython/hid.md +1059 -0
  77. package/docs/apipython/hotUpdate.md +154 -0
  78. package/docs/apipython/image.md +938 -0
  79. package/docs/apipython/ime.md +306 -0
  80. package/docs/apipython/logger.md +330 -0
  81. package/docs/apipython/media.md +221 -0
  82. package/docs/apipython/mysql.md +432 -0
  83. package/docs/apipython/netCard.md +219 -0
  84. package/docs/apipython/node.md +331 -0
  85. package/docs/apipython/overview.md +66 -0
  86. package/docs/apipython/paddleocr.md +211 -0
  87. package/docs/apipython/pip.md +231 -0
  88. package/docs/apipython/system.md +458 -0
  89. package/docs/apipython/tomatoocr.md +444 -0
  90. package/docs/apipython/tts.md +331 -0
  91. package/docs/apipython/ui.md +949 -0
  92. package/docs/apipython/utils.md +284 -0
  93. package/docs/apipython/yolo.md +281 -0
  94. package/package.json +8 -4
@@ -0,0 +1,933 @@
1
+ # UI 模块 ($视图)
2
+
3
+ UI 模块提供了 WebView 相关功能,支持事件通信和 JavaScript 交互。该模块使用共享的 WebView 实例,通过静态方法进行操作。
4
+
5
+ ## UI 设计器
6
+
7
+ - <a href="/designer/index.html" target="_blank">在线设计器</a>
8
+
9
+ ## 注意事项
10
+
11
+ - UI 相关方法仅 app 在前台可用
12
+
13
+ ## 配置
14
+
15
+ ### UI 配置 网页会自动加载 package.json 中的配置
16
+
17
+ 在 package.json 中添加以下配置:
18
+
19
+ ```json
20
+ {
21
+ "ui": {
22
+ "tabs": [
23
+ {
24
+ "name": "快点JS",
25
+ "file": "index.html"
26
+ }
27
+ ]
28
+ }
29
+ }
30
+ ```
31
+
32
+ ### 配置项
33
+
34
+ - `tabs` - 网页标签配置数组
35
+ - `name` - 标签名称
36
+ - `file` - 网页文件路径 基于 res 目录
37
+
38
+ ### 多个标签页
39
+
40
+ 如果配置了多个标签页,每个标签页会对应一个网页文件。在 package.json 中添加多个标签页配置即可。
41
+
42
+ ```json
43
+ {
44
+ "ui": {
45
+ "tabs": [
46
+ {
47
+ "name": "快点JS",
48
+ "file": "index.html"
49
+ },
50
+ {
51
+ "name": "设置",
52
+ "file": "settings.html"
53
+ }
54
+ ]
55
+ }
56
+ }
57
+ ```
58
+
59
+ ## 核心方法
60
+
61
+ ### 监听事件回调 - 设置事件回调函数
62
+
63
+ ```typescript
64
+ function 监听事件回调(
65
+ 回调函数: (事件名称: 字符串, 数据: 字典<任意类型>) => 无返回值
66
+ ): 无返回值;
67
+ ```
68
+
69
+ **参数:**
70
+
71
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
72
+ | ---------- | ---------------------------------------------------- | -------- | ------ | ------------------------------------ |
73
+ | `回调函数` | (事件名称: 字符串, 数据: 字典<任意类型>) => 无返回值 | 是 | | 事件回调函数,用于处理来自网页的事件 |
74
+
75
+ **示例:**
76
+
77
+ ```typescript
78
+ // 设置事件回调
79
+ $视图.监听事件回调((事件名称, 数据) => {
80
+ logi(`收到事件: ${事件名称}, 数据: ${JSON.stringify(数据)}`);
81
+ });
82
+ ```
83
+
84
+ ### 调用函数 - 调用 WebView 中的 JavaScript 函数
85
+
86
+ ```typescript
87
+ function 调用函数(函数名: 字符串, 数据: 字典<任意类型>): 无返回值;
88
+ ```
89
+
90
+ **参数:**
91
+
92
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
93
+ | -------- | -------------- | -------- | ------ | ----------------- |
94
+ | `函数名` | 字符串 | 是 | | JavaScript 方法名 |
95
+ | `数据` | 字典<任意类型> | 是 | | 传递给方法的参数 |
96
+
97
+ **示例:**
98
+
99
+ ```typescript
100
+ // 调用网页中的方法
101
+ $视图.调用函数("updateStatus", { status: "running", progress: 50 });
102
+ $视图.调用函数("loadData", {
103
+ items: ["item1", "item2", "item3"],
104
+ timestamp: Date.now(),
105
+ });
106
+ ```
107
+
108
+ ### 显示 Toast 提示 - 显示 Toast 提示消息
109
+
110
+ ```typescript
111
+ function 显示Toast提示(消息内容: 字符串): 无返回值;
112
+ ```
113
+
114
+ **参数:**
115
+
116
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
117
+ | ---------- | ------ | -------- | ------ | ------------ |
118
+ | `消息内容` | 字符串 | 是 | | 提示消息内容 |
119
+
120
+ **示例:**
121
+
122
+ ```typescript
123
+ // 显示成功提示
124
+ $视图.显示Toast提示("操作成功");
125
+
126
+ // 显示错误提示
127
+ $视图.显示Toast提示("网络连接失败,请重试");
128
+
129
+ // 显示信息提示
130
+ $视图.显示Toast提示("数据已保存");
131
+ ```
132
+
133
+ ### 显示确认对话框
134
+
135
+ ```typescript
136
+ function 显示确认对话框(标题: 字符串, 消息内容: 字符串): 布尔值;
137
+ ```
138
+
139
+ **参数:**
140
+
141
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
142
+ | ---------- | ------ | -------- | ------ | ---------- |
143
+ | `标题` | 字符串 | 是 | | 对话框标题 |
144
+ | `消息内容` | 字符串 | 是 | | 对话框内容 |
145
+
146
+ **返回值:**
147
+
148
+ | 类型 | 描述 |
149
+ | -------- | ------------------------------------------- |
150
+ | `布尔值` | 用户选择结果,确定返回 true,取消返回 false |
151
+
152
+ **示例:**
153
+
154
+ ```typescript
155
+ // 显示确认对话框
156
+ const result = $视图.显示确认对话框("确认删除", "是否确定要删除这个文件?");
157
+ if (result) {
158
+ $打印信息日志("用户确认删除");
159
+ // 执行删除操作
160
+ $文件.删除所有文件("temp.txt");
161
+ } else {
162
+ $打印信息日志("用户取消删除");
163
+ }
164
+
165
+ // 确认退出应用
166
+ const shouldExit = $视图.显示确认对话框("退出应用", "确定要退出快点JS吗?");
167
+ if (shouldExit) {
168
+ // 执行退出逻辑
169
+ }
170
+ ```
171
+
172
+ ### 显示输入对话框
173
+
174
+ ```typescript
175
+ function 显示输入对话框(标题: 字符串, 消息内容: 字符串): 字符串;
176
+ ```
177
+
178
+ **参数:**
179
+
180
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
181
+ | ---------- | ------ | -------- | ------ | ---------- |
182
+ | `标题` | 字符串 | 是 | | 对话框标题 |
183
+ | `消息内容` | 字符串 | 是 | | 对话框内容 |
184
+
185
+ **返回值:**
186
+
187
+ | 类型 | 描述 |
188
+ | -------- | -------------------------------- |
189
+ | `字符串` | 用户输入的内容,取消返回空字符串 |
190
+
191
+ **示例:**
192
+
193
+ ```typescript
194
+ // 获取用户输入
195
+ const username = $视图.显示输入对话框("用户登录", "请输入您的用户名:");
196
+ if (username) {
197
+ $打印信息日志(`用户输入的用户名:${username}`);
198
+ // 继续登录流程
199
+ } else {
200
+ $打印信息日志("用户取消了输入");
201
+ }
202
+
203
+ // 获取配置值
204
+ const apiUrl = $视图.显示输入对话框("API配置", "请输入API服务器地址:");
205
+ if (apiUrl) {
206
+ $配置.更新配置("apiUrl", apiUrl);
207
+ $视图.显示Toast提示("API地址配置成功");
208
+ }
209
+ ```
210
+
211
+ ### 显示警告对话框
212
+
213
+ ```typescript
214
+ function 显示警告对话框(标题: 字符串, 消息内容: 字符串): 无返回值;
215
+ ```
216
+
217
+ **参数:**
218
+
219
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
220
+ | ---------- | ------ | -------- | ------ | ---------- |
221
+ | `标题` | 字符串 | 是 | | 对话框标题 |
222
+ | `消息内容` | 字符串 | 是 | | 对话框内容 |
223
+
224
+ **示例:**
225
+
226
+ ```typescript
227
+ // 显示错误警告
228
+ $视图.显示警告对话框("错误", "网络连接失败,请检查网络设置");
229
+
230
+ // 显示重要提示
231
+ $视图.显示警告对话框("重要提示", "请确保设备已连接到电脑并信任此设备");
232
+
233
+ // 显示操作结果
234
+ $视图.显示警告对话框("操作完成", "脚本执行完成,共处理了100个项目");
235
+ ```
236
+
237
+ ## 网页端 API
238
+
239
+ ### registerUIFunc() - 在网页中注册函数,供主进程调用
240
+
241
+ ```typescript
242
+ declare function registerUIFunc(
243
+ name: string,
244
+ func: (data: Record<string, any>) => void
245
+ ): void;
246
+ ```
247
+
248
+ **参数:**
249
+
250
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
251
+ | ------ | -------- | -------- | ------ | -------- |
252
+ | `name` | string | 是 | | 函数名称 |
253
+ | `func` | function | 是 | | 函数实现 |
254
+
255
+ **网页端示例:**
256
+
257
+ ```html
258
+ <!DOCTYPE html>
259
+ <html>
260
+ <head>
261
+ <title>快点JS UI</title>
262
+ </head>
263
+ <body>
264
+ <div id="status">等待中...</div>
265
+ <button onclick="sendMessage()">发送消息</button>
266
+
267
+ <script>
268
+ // 注册供主进程调用的函数
269
+ ms.registerUIFunc("updateStatus", function (data) {
270
+ document.getElementById(
271
+ "status"
272
+ ).textContent = `状态: ${data.status}, 进度: ${data.progress}%`;
273
+ });
274
+
275
+ ms.registerUIFunc("loadData", function (data) {
276
+ console.log(`收到数据: ${JSON.stringify(data)}`);
277
+ // 更新界面显示数据
278
+ updateUI(data.items);
279
+ });
280
+
281
+ function sendMessage() {
282
+ ms.emitEvent("button.click", {
283
+ buttonId: "send",
284
+ timestamp: Date.now(),
285
+ });
286
+ }
287
+
288
+ function updateUI(items) {
289
+ // 更新界面逻辑
290
+ }
291
+ </script>
292
+ </body>
293
+ </html>
294
+ ```
295
+
296
+ ### emitEvent() - 从网页向主进程发送事件
297
+
298
+ ```typescript
299
+ declare function emitEvent(event: string, data: Record<string, any>): void;
300
+ ```
301
+
302
+ **参数:**
303
+
304
+ - `event` - 事件名称
305
+ - `data` - 事件数据
306
+
307
+ **网页端示例:**
308
+
309
+ ```javascript
310
+ // 发送自定义事件
311
+ ms.emitEvent("user.login", { username: "admin", timestamp: Date.now() });
312
+
313
+ // 发送操作完成事件
314
+ ms.emitEvent("task.completed", { taskId: "task001", result: "success" });
315
+
316
+ // 发送错误事件
317
+ ms.emitEvent("error.occurred", { message: "网络连接失败", code: 500 });
318
+ ```
319
+
320
+ ### startTask() - 启动脚本
321
+
322
+ ```typescript
323
+ declare function startTask(): Promise<boolean>;
324
+ ```
325
+
326
+ **返回值:**
327
+
328
+ | 类型 | 描述 |
329
+ | ------------------ | ------------------------------------- |
330
+ | `Promise<boolean>` | 如果启动成功返回 true,否则返回 false |
331
+
332
+ **说明:**
333
+
334
+ 启动脚本任务。
335
+
336
+ **网页端示例:**
337
+
338
+ ```javascript
339
+ // 启动脚本
340
+ ms.startTask()
341
+ .then((result) => {
342
+ if (result) {
343
+ console.log("脚本启动成功");
344
+ } else {
345
+ console.log("脚本启动失败");
346
+ }
347
+ })
348
+ .catch((error) => {
349
+ console.error("启动脚本出错:", error);
350
+ });
351
+ ```
352
+
353
+ ### stopTask() - 停止脚本
354
+
355
+ ```typescript
356
+ declare function stopTask(): Promise<boolean>;
357
+ ```
358
+
359
+ **返回值:**
360
+
361
+ | 类型 | 描述 |
362
+ | ------------------ | ------------------------------------- |
363
+ | `Promise<boolean>` | 如果停止成功返回 false,否则返回 true |
364
+
365
+ **说明:**
366
+
367
+ 停止当前运行的脚本任务。
368
+
369
+ **网页端示例:**
370
+
371
+ ```javascript
372
+ // 停止脚本
373
+ ms.stopTask()
374
+ .then((result) => {
375
+ if (!result) {
376
+ console.log("脚本停止成功");
377
+ } else {
378
+ console.log("脚本停止失败");
379
+ }
380
+ })
381
+ .catch((error) => {
382
+ console.error("停止脚本出错:", error);
383
+ });
384
+ ```
385
+
386
+ ### isTaskRunning() - 检查脚本运行状态
387
+
388
+ ```typescript
389
+ declare function isTaskRunning(): Promise<boolean>;
390
+ ```
391
+
392
+ **返回值:**
393
+
394
+ | 类型 | 描述 |
395
+ | ------------------ | ----------------------------------------- |
396
+ | `Promise<boolean>` | 如果脚本正在运行返回 true,否则返回 false |
397
+
398
+ **说明:**
399
+
400
+ 检查脚本是否正在运行。
401
+
402
+ **网页端示例:**
403
+
404
+ ```javascript
405
+ // 检查脚本状态
406
+ ms.isTaskRunning()
407
+ .then((isRunning) => {
408
+ if (isRunning) {
409
+ console.log("脚本正在运行");
410
+ document.getElementById("task-status").textContent = "运行中";
411
+ } else {
412
+ console.log("脚本未运行");
413
+ document.getElementById("task-status").textContent = "已停止";
414
+ }
415
+ })
416
+ .catch((error) => {
417
+ console.error("获取脚本状态出错:", error);
418
+ });
419
+ ```
420
+
421
+ ### 配置管理方法
422
+
423
+ #### setConfig() - 设置配置项
424
+
425
+ ```typescript
426
+ declare function setConfig(key: string, value: any): Promise<boolean>;
427
+ ```
428
+
429
+ **参数:**
430
+
431
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
432
+ | ------- | ------ | -------- | ------ | -------- |
433
+ | `key` | string | 是 | | 配置项键 |
434
+ | `value` | any | 是 | | 配置项值 |
435
+
436
+ **返回值:**
437
+
438
+ | 类型 | 描述 |
439
+ | ------------------ | ------------------------------------- |
440
+ | `Promise<boolean>` | 如果设置成功返回 true,否则返回 false |
441
+
442
+ **网页端示例:**
443
+
444
+ ```javascript
445
+ // 设置配置项
446
+ ms.setConfig("theme", "dark").then((success) => {
447
+ if (success) {
448
+ console.log("配置设置成功");
449
+ }
450
+ });
451
+ ```
452
+
453
+ #### getConfig() - 获取配置项
454
+
455
+ ```typescript
456
+ declare function getConfig(key: string): Promise<any>;
457
+ ```
458
+
459
+ **参数:**
460
+
461
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
462
+ | ------ | ------ | -------- | ------ | -------- |
463
+ | `key` | string | 是 | | 配置项键 |
464
+
465
+ **返回值:**
466
+
467
+ | 类型 | 描述 |
468
+ | -------------- | -------- |
469
+ | `Promise<any>` | 配置项值 |
470
+
471
+ **网页端示例:**
472
+
473
+ ```javascript
474
+ // 获取配置项
475
+ ms.getConfig("theme").then((value) => {
476
+ console.log("当前主题:", value);
477
+ });
478
+ ```
479
+
480
+ #### removeConfig() - 移除配置项
481
+
482
+ ```typescript
483
+ declare function removeConfig(key: string): Promise<boolean>;
484
+ ```
485
+
486
+ **参数:**
487
+
488
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
489
+ | ------ | ------ | -------- | ------ | -------- |
490
+ | `key` | string | 是 | | 配置项键 |
491
+
492
+ **返回值:**
493
+
494
+ | 类型 | 描述 |
495
+ | ------------------ | ------------------------------------- |
496
+ | `Promise<boolean>` | 如果移除成功返回 true,否则返回 false |
497
+
498
+ **网页端示例:**
499
+
500
+ ```javascript
501
+ // 移除配置项
502
+ ms.removeConfig("theme").then((success) => {
503
+ if (success) {
504
+ console.log("配置移除成功");
505
+ }
506
+ });
507
+ ```
508
+
509
+ #### getAllConfig() - 获取所有配置
510
+
511
+ ```typescript
512
+ declare function getAllConfig(): Promise<Record<string, any>>;
513
+ ```
514
+
515
+ **返回值:**
516
+
517
+ | 类型 | 描述 |
518
+ | ------------------------------ | ------------------ |
519
+ | `Promise<Record<string, any>>` | 包含所有配置的字典 |
520
+
521
+ **网页端示例:**
522
+
523
+ ```javascript
524
+ // 获取所有配置
525
+ ms.getAllConfig().then((configs) => {
526
+ console.log("所有配置:", configs);
527
+ });
528
+ ```
529
+
530
+ ### 快点 Agent 控制方法
531
+
532
+ #### startAgent() - 启动 快点 Agent 服务
533
+
534
+ ```typescript
535
+ declare function startAgent(): Promise<boolean>;
536
+ ```
537
+
538
+ **返回值:**
539
+
540
+ | 类型 | 描述 |
541
+ | ------------------ | ------------------------------------- |
542
+ | `Promise<boolean>` | 如果调用成功返回 true,否则返回 false |
543
+
544
+ **说明:**
545
+
546
+ 启动 快点 Agent 服务。注意:返回值仅表示调用是否成功,不代表 快点 Agent 服务是否启动成功。
547
+
548
+ **网页端示例:**
549
+
550
+ ```javascript
551
+ // 启动 快点 Agent 服务
552
+ ms.startAgent()
553
+ .then((result) => {
554
+ if (result) {
555
+ console.log("快点 Agent 启动调用成功");
556
+ // 可以通过 getAgentStatus() 检查实际状态
557
+ checkAgentStatus();
558
+ } else {
559
+ console.log("快点 Agent 启动调用失败");
560
+ }
561
+ })
562
+ .catch((error) => {
563
+ console.error("快点 Agent 启动出错:", error);
564
+ });
565
+ ```
566
+
567
+ #### getAgentStatus() - 获取 快点 Agent 状态
568
+
569
+ ```typescript
570
+ declare function getAgentStatus(): Promise<boolean>;
571
+ ```
572
+
573
+ **返回值:**
574
+
575
+ | 类型 | 描述 |
576
+ | ------------------ | ------------------------------------------------- |
577
+ | `Promise<boolean>` | 如果 快点 Agent 正在运行返回 true,否则返回 false |
578
+
579
+ **说明:**
580
+
581
+ 检查 快点 Agent 服务的当前运行状态。
582
+
583
+ **网页端示例:**
584
+
585
+ ```javascript
586
+ // 检查 快点 Agent 状态
587
+ ms.getAgentStatus()
588
+ .then((isRunning) => {
589
+ if (isRunning) {
590
+ console.log("快点 Agent 服务正在运行");
591
+ document.getElementById("agent-status").textContent = "已连接";
592
+ document.getElementById("agent-status").className = "status-online";
593
+ } else {
594
+ console.log("快点 Agent 服务未运行");
595
+ document.getElementById("agent-status").textContent = "未连接";
596
+ document.getElementById("agent-status").className = "status-offline";
597
+ }
598
+ })
599
+ .catch((error) => {
600
+ console.error("检查 快点 Agent 状态出错:", error);
601
+ });
602
+
603
+ // 定期检查 快点 Agent 状态
604
+ function checkAgentStatus() {
605
+ ms.getAgentStatus().then((isRunning) => {
606
+ updateAgentStatusUI(isRunning);
607
+ });
608
+ }
609
+
610
+ // 每 5 秒检查一次状态
611
+ setInterval(checkAgentStatus, 5000);
612
+ ```
613
+
614
+ ### 系统功能
615
+
616
+ #### getServerDeviceId() - 获取服务器设备 ID
617
+
618
+ ```typescript
619
+ declare function getServerDeviceId(): Promise<string>;
620
+ ```
621
+
622
+ **返回值:**
623
+
624
+ | 类型 | 描述 |
625
+ | ----------------- | ------------- |
626
+ | `Promise<string>` | 服务器设备 ID |
627
+
628
+ **说明:**
629
+
630
+ 获取当前运行脚本的服务器设备 ID。
631
+
632
+ **网页端示例:**
633
+
634
+ ```javascript
635
+ // 获取服务器设备ID
636
+ ms.getServerDeviceId()
637
+ .then((deviceId) => {
638
+ console.log("当前服务器设备ID:", deviceId);
639
+ })
640
+ .catch((error) => {
641
+ console.error("获取服务器设备ID出错:", error);
642
+ });
643
+ ```
644
+
645
+ #### openURL() - 调用浏览器打开 URL
646
+
647
+ ```typescript
648
+ declare function openURL(url: string): Promise<boolean>;
649
+ ```
650
+
651
+ **参数:**
652
+
653
+ | 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
654
+ | ------ | ------ | -------- | ------ | ----------------- |
655
+ | `url` | string | 是 | | 要打开的 URL 地址 |
656
+
657
+ **返回值:**
658
+
659
+ | 类型 | 描述 |
660
+ | ------------------ | ------------------------------------- |
661
+ | `Promise<boolean>` | 如果调用成功返回 true,否则返回 false |
662
+
663
+ **说明:**
664
+
665
+ 打开指定的 URL 地址。
666
+
667
+ **网页端示例:**
668
+
669
+ ```javascript
670
+ // 打开URL
671
+ ms.openURL("https://www.baidu.com")
672
+ .then((success) => {
673
+ if (success) {
674
+ console.log("URL打开成功");
675
+ } else {
676
+ console.log("URL打开失败");
677
+ }
678
+ })
679
+ .catch((error) => {
680
+ console.error("打开URL出错:", error);
681
+ });
682
+ ```
683
+
684
+ ### 完整示例
685
+
686
+ **完整的控制面板示例:**
687
+
688
+ ```html
689
+ <!DOCTYPE html>
690
+ <html>
691
+ <head>
692
+ <title>快点JS 控制面板</title>
693
+ <style>
694
+ .status-online {
695
+ color: green;
696
+ }
697
+ .status-offline {
698
+ color: red;
699
+ }
700
+ .button {
701
+ padding: 10px 20px;
702
+ margin: 5px;
703
+ cursor: pointer;
704
+ }
705
+ .panel {
706
+ margin: 20px 0;
707
+ padding: 15px;
708
+ border: 1px solid #ccc;
709
+ }
710
+ </style>
711
+ </head>
712
+ <body>
713
+ <h1>快点JS 控制面板</h1>
714
+
715
+ <!-- 脚本控制 -->
716
+ <div class="panel">
717
+ <h3>脚本控制</h3>
718
+ <p>脚本状态: <span id="task-status">检查中...</span></p>
719
+ <button class="button" onclick="startScript()">启动脚本</button>
720
+ <button class="button" onclick="stopScript()">停止脚本</button>
721
+ <button class="button" onclick="checkTaskStatus()">检查状态</button>
722
+ </div>
723
+
724
+ <!-- 快点 Agent 控制 -->
725
+ <div class="panel">
726
+ <h3>快点 Agent 控制</h3>
727
+ <p>快点 Agent 状态: <span id="agent-status">检查中...</span></p>
728
+ <button class="button" onclick="startAgentService()">启动 快点 Agent</button>
729
+ <button class="button" onclick="checkAgentStatus()">检查状态</button>
730
+ </div>
731
+
732
+ <!-- 配置管理 -->
733
+ <div class="panel">
734
+ <h3>配置管理</h3>
735
+ <input type="text" id="config-key" placeholder="配置键" />
736
+ <input type="text" id="config-value" placeholder="配置值" />
737
+ <button class="button" onclick="setConfigItem()">设置配置</button>
738
+ <button class="button" onclick="getConfigItem()">获取配置</button>
739
+ <button class="button" onclick="showAllConfigs()">显示所有配置</button>
740
+ </div>
741
+
742
+ <!-- 对话框测试 -->
743
+ <div class="panel">
744
+ <h3>对话框测试</h3>
745
+ <button class="button" onclick="showToastMessage()">显示Toast</button>
746
+ <button class="button" onclick="showConfirmDialog()">
747
+ 显示确认对话框
748
+ </button>
749
+ <button class="button" onclick="showInputDialog()">显示输入对话框</button>
750
+ <button class="button" onclick="showAlertDialog()">显示警告对话框</button>
751
+ </div>
752
+
753
+ <div id="log-container"></div>
754
+
755
+ <script>
756
+ // 脚本控制函数
757
+ function startScript() {
758
+ addLog("正在启动脚本...");
759
+ ms.startTask()
760
+ .then((result) => {
761
+ addLog(result ? "脚本启动成功" : "脚本启动失败");
762
+ checkTaskStatus();
763
+ })
764
+ .catch((error) => {
765
+ addLog("启动脚本出错: " + error);
766
+ });
767
+ }
768
+
769
+ function stopScript() {
770
+ addLog("正在停止脚本...");
771
+ ms.stopTask()
772
+ .then((result) => {
773
+ addLog(!result ? "脚本停止成功" : "脚本停止失败");
774
+ checkTaskStatus();
775
+ })
776
+ .catch((error) => {
777
+ addLog("停止脚本出错: " + error);
778
+ });
779
+ }
780
+
781
+ function checkTaskStatus() {
782
+ ms.isTaskRunning()
783
+ .then((isRunning) => {
784
+ const statusElement = document.getElementById("task-status");
785
+ statusElement.textContent = isRunning ? "运行中" : "已停止";
786
+ statusElement.className = isRunning
787
+ ? "status-online"
788
+ : "status-offline";
789
+ addLog("脚本状态: " + (isRunning ? "运行中" : "已停止"));
790
+ })
791
+ .catch((error) => {
792
+ addLog("获取脚本状态出错: " + error);
793
+ });
794
+ }
795
+
796
+ // 快点 Agent 控制函数
797
+ function startAgentService() {
798
+ addLog("正在启动 快点 Agent 服务...");
799
+ ms.startAgent()
800
+ .then((result) => {
801
+ if (result) {
802
+ addLog("快点 Agent 启动调用成功");
803
+ setTimeout(() => {
804
+ checkAgentStatus();
805
+ }, 2000);
806
+ } else {
807
+ addLog("快点 Agent 启动调用失败");
808
+ }
809
+ })
810
+ .catch((error) => {
811
+ addLog("启动 快点 Agent 服务出错: " + error);
812
+ });
813
+ }
814
+
815
+ function checkAgentStatus() {
816
+ ms.getAgentStatus()
817
+ .then((isRunning) => {
818
+ updateAgentStatusUI(isRunning);
819
+ addLog("快点 Agent 状态: " + (isRunning ? "运行中" : "未运行"));
820
+ })
821
+ .catch((error) => {
822
+ addLog("获取 快点 Agent 状态出错: " + error);
823
+ });
824
+ }
825
+
826
+ function updateAgentStatusUI(isRunning) {
827
+ const statusElement = document.getElementById("agent-status");
828
+ if (isRunning) {
829
+ statusElement.textContent = "已连接";
830
+ statusElement.className = "status-online";
831
+ } else {
832
+ statusElement.textContent = "未连接";
833
+ statusElement.className = "status-offline";
834
+ }
835
+ }
836
+
837
+ // 配置管理函数
838
+ function setConfigItem() {
839
+ const key = document.getElementById("config-key").value;
840
+ const value = document.getElementById("config-value").value;
841
+ if (!key) {
842
+ addLog("请输入配置键");
843
+ return;
844
+ }
845
+ ms.setConfig(key, value)
846
+ .then((success) => {
847
+ addLog(success ? `配置 ${key} 设置成功` : `配置 ${key} 设置失败`);
848
+ })
849
+ .catch((error) => {
850
+ addLog("设置配置出错: " + error);
851
+ });
852
+ }
853
+
854
+ function getConfigItem() {
855
+ const key = document.getElementById("config-key").value;
856
+ if (!key) {
857
+ addLog("请输入配置键");
858
+ return;
859
+ }
860
+ ms.getConfig(key)
861
+ .then((value) => {
862
+ addLog(`配置 ${key} 的值: ${JSON.stringify(value)}`);
863
+ })
864
+ .catch((error) => {
865
+ addLog("获取配置出错: " + error);
866
+ });
867
+ }
868
+
869
+ function showAllConfigs() {
870
+ ms.getAllConfig()
871
+ .then((configs) => {
872
+ addLog("所有配置: " + JSON.stringify(configs, null, 2));
873
+ })
874
+ .catch((error) => {
875
+ addLog("获取所有配置出错: " + error);
876
+ });
877
+ }
878
+
879
+ // 对话框测试函数
880
+ function showToastMessage() {
881
+ // 注意:这些方法需要在主进程中调用,网页端无法直接调用
882
+ // 这里通过emitEvent发送事件给主进程处理
883
+ ms.emitEvent("show.toast", { message: "这是一个Toast消息" });
884
+ addLog("已发送Toast显示请求");
885
+ }
886
+
887
+ function showConfirmDialog() {
888
+ ms.emitEvent("show.confirm", {
889
+ title: "确认操作",
890
+ message: "您确定要执行这个操作吗?",
891
+ });
892
+ addLog("已发送确认对话框显示请求");
893
+ }
894
+
895
+ function showInputDialog() {
896
+ ms.emitEvent("show.input", {
897
+ title: "输入信息",
898
+ message: "请输入您的姓名:",
899
+ });
900
+ addLog("已发送输入对话框显示请求");
901
+ }
902
+
903
+ function showAlertDialog() {
904
+ ms.emitEvent("show.alert", {
905
+ title: "重要提示",
906
+ message: "这是一个重要的提示信息!",
907
+ });
908
+ addLog("已发送警告对话框显示请求");
909
+ }
910
+
911
+ // 工具函数
912
+ function addLog(message) {
913
+ const logContainer = document.getElementById("log-container");
914
+ const logEntry = document.createElement("div");
915
+ logEntry.textContent = new Date().toLocaleTimeString() + ": " + message;
916
+ logContainer.appendChild(logEntry);
917
+ logContainer.scrollTop = logContainer.scrollHeight;
918
+ }
919
+
920
+ // 页面加载完成后检查状态
921
+ window.onload = function () {
922
+ checkTaskStatus();
923
+ checkAgentStatus();
924
+ // 每 10 秒自动检查一次状态
925
+ setInterval(() => {
926
+ checkTaskStatus();
927
+ checkAgentStatus();
928
+ }, 10000);
929
+ };
930
+ </script>
931
+ </body>
932
+ </html>
933
+ ```