gc_i18n 1.4.4 → 1.4.5

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.
@@ -2,25 +2,22 @@
2
2
 
3
3
  <cite>
4
4
  **本文档中引用的文件**
5
+ - [package.json](file://package.json) - *版本信息,从1.4.3升级到1.4.4*
5
6
  - [gc_i18n.es.js](file://lib/gc_i18n.es.js) - *在最近的提交中更新*
6
7
  - [i18nUtils.ts](file://packages/libs/i18nUtils.ts) - *在最近的提交中更新*
7
8
  - [service.js](file://packages/libs/service.js) - *在最近的提交中更新,包含关键逻辑变更*
8
9
  - [utils.js](file://packages/libs/utils.js) - *在最近的提交中更新,包含 mergeArraysByKey 函数*
9
10
  - [packages/index.js](file://packages/index.js) - *库的入口点,包含初始化逻辑*
10
- - [package.json](file://package.json) - *版本信息,从1.3.12升级到1.4.1*
11
11
  </cite>
12
12
 
13
13
  ## 更新摘要
14
14
  **变更内容**
15
- - 移除了 `fetchTranslate` 函数中的 `page` 参数,更新了函数签名和参数说明
16
- - 版本从 1.3.12 升级到 1.4.1
17
- - 更新了 `service.js` 中 `getTranslate` 方法的文档,以反映其新的行为:当返回 `common` 类型的翻译时,会移除当前路由的数据
18
- - 更新了 `gc_i18n.es.js` 中 `$t` 方法的文档,详细说明了其新的查找优先级:先查找 `route.key`,再查找 `common.key`,最后查找全局 `key`
19
- - 更新了 `utils.js` 中 `mergeArraysByKey` 函数的文档,说明了其在合并数据时会移除与 `common` 键匹配的当前路由数据
20
- - 修正了 `service.js` 中 `fetchTranslate` 和 `getTranslate` 方法的返回值描述,使其与代码实现一致
15
+ - 版本从 1.4.3 升级到 1.4.4
16
+ - 更新了 `packages/index.js` 中路由守卫的 `closeModal` 功能集成
17
+ - 更新了 `gc_i18n.es.js` 中 `$t` 方法的文档,详细说明了其新的查找优先级
18
+ - 更新了 `utils.js` 中 `mergeArraysByKey` 函数的文档
19
+ - 修正了 `service.js` 中 `fetchTranslate` `getTranslate` 方法的返回值描述
21
20
  - 更新了所有受影响部分的源代码引用,以反映最新的文件状态
22
- - **新增**:标准化了后端翻译服务端点,从 `i18n-web//app/getsupportedlangs` 迁移到 `i18n-web/app/getsupportedlangs`
23
- - **新增**:引入了 `getLanguagesWithCache` 函数,提供带缓存的语言列表获取功能
24
21
 
25
22
  ## 目录
26
23
  1. [简介](#简介)
@@ -40,6 +37,7 @@
40
37
  - **语言切换**:通过 `$changeLocale` 方法动态切换当前语言环境。
41
38
  - **语言包管理**:通过 `service.js` 提供的接口从后端获取和更新翻译资源。
42
39
  - **工具支持**:提供静态分析工具函数,用于提取项目中的翻译键。
40
+ - **模态框关闭**:通过 `closeModal` 方法统一管理 SweetAlert2 模态框的关闭。
43
41
 
44
42
  **Section sources**
45
43
  - [gc_i18n.es.js](file://lib/gc_i18n.es.js)
@@ -116,6 +114,41 @@ $changeLocale(locale: string): Promise<void>
116
114
  - [src/view/Home.vue](file://src/view/Home.vue#L2)
117
115
  - [src/view/login.vue](file://src/view/login.vue#L2)
118
116
 
117
+ ### closeModal (关闭模态框方法)
118
+ 此方法用于统一关闭 SweetAlert2 弹窗,确保模态框的正确销毁和资源清理。
119
+
120
+ **方法签名**
121
+ ```typescript
122
+ closeModal(): void
123
+ ```
124
+
125
+ **参数**
126
+ - 无参数
127
+
128
+ **返回值**
129
+ - `void` - 无返回值
130
+
131
+ **副作用**
132
+ - 关闭当前显示的 SweetAlert2 弹窗
133
+ - 清理弹窗相关的事件监听器和 DOM 元素
134
+ - 触发 `willClose` 和 `didClose` 事件回调
135
+ - 释放内存资源,防止内存泄漏
136
+
137
+ **使用限制**
138
+ - 仅在 SweetAlert2 弹窗处于激活状态时有效
139
+ - 调用后会触发弹窗的销毁流程,无法恢复
140
+
141
+ **错误处理建议**
142
+ - 确保在调用前检查弹窗是否已激活
143
+ - 监听 `willClose` 和 `didClose` 事件以处理关闭后的逻辑
144
+ - 在路由切换时自动调用此方法,避免弹窗残留
145
+
146
+ **新增** 该方法作为 SweetAlert2 的别名方法,提供统一的模态框关闭接口。
147
+
148
+ **Section sources**
149
+ - [gc_i18n.es.js:1340-1350](file://lib/gc_i18n.es.js#L1340-L1350) - *新增 closeModal 方法实现*
150
+ - [gc_i18n.es.js:1930-1932](file://lib/gc_i18n.es.js#L1930-L1932) - *closeModal 方法别名注册*
151
+
119
152
  ## i18nUtils.ts 工具函数
120
153
  `i18nUtils.ts` 文件提供了一个用于静态分析的工具函数,帮助开发者管理和审计翻译资源。
121
154
 
@@ -363,6 +396,16 @@ const keys = extractTranslationKeys(MyComponent);
363
396
  console.log(keys); // 输出: ["hello", "greeting"]
364
397
  ```
365
398
 
399
+ ### 路由守卫中集成 closeModal
400
+ ```javascript
401
+ // 在路由守卫中自动关闭模态框
402
+ this.router.beforeEach(async (to, from, next) => {
403
+ // 自动关闭配置中心弹窗
404
+ this.configInstance && this.configInstance.closeModal();
405
+ // 其他路由逻辑...
406
+ });
407
+ ```
408
+
366
409
  ## 错误处理与限制
367
410
  - **网络错误**: `service.js` 中的所有异步方法都可能因网络问题而失败。务必使用 `try-catch` 或 `.catch()` 处理 Promise 拒绝。
368
411
  - **缓存失效**: `getTranslate` 依赖本地存储。如果用户清除浏览器数据,缓存将丢失,需要重新下载完整语言包。
@@ -371,5 +414,7 @@ console.log(keys); // 输出: ["hello", "greeting"]
371
414
  - **逻辑变更**: `getTranslate` 方法现在会移除 `common` 键覆盖的当前路由数据,这可能会影响某些依赖于特定键的组件。
372
415
  - **参数变更**: `fetchTranslate` 函数已移除 `page` 参数,使用时请注意更新调用方式。
373
416
  - **端点标准化**: 所有翻译服务端点已标准化为 `/i18n-web/...` 结构,确保了后端服务的一致性。
417
+ - **模态框管理**: 新增的 `closeModal` 方法提供了统一的 SweetAlert2 弹窗管理,避免了弹窗残留问题。
418
+ - **版本更新** 本版本为 1.4.4,包含上述重要变更,特别是路由守卫中自动调用 `closeModal` 的功能集成。
374
419
 
375
- **版本更新** 本版本为 1.4.1,包含上述重要变更,特别是后端翻译服务端点的标准化迁移和新增的带缓存语言列表获取功能。
420
+ **版本更新** 本版本为 1.4.4,包含上述重要变更,特别是路由守卫中自动调用 `closeModal` 的功能集成。
@@ -43,6 +43,7 @@
43
43
  - **安全机制改进**,新增JWT令牌验证和权限控制
44
44
  - **SweetAlert2集成优化**,改进变量命名和代码组织结构,提升可读性和维护性
45
45
  - **新增智能语言列表缓存机制**,通过getLanguagesWithCache提供缓存和自动失效功能
46
+ - **新增postMessage事件处理功能**,扩展了原有的updateLanguage事件处理机制,允许外部应用程序通过postMessage事件编程关闭模态框
46
47
 
47
48
  ## 目录
48
49
  1. [项目结构分析](#项目结构分析)
@@ -272,7 +273,7 @@ function _r(e, t) {
272
273
 
273
274
  ### 事件通知机制
274
275
 
275
- 事件通知通过自定义事件系统实现,使用mitt事件发射器:
276
+ **更新** 事件通知通过自定义事件系统实现,使用mitt事件发射器,新增了closeModal事件处理功能:
276
277
 
277
278
  ```javascript
278
279
  install(app, opts = {}) {
@@ -284,6 +285,10 @@ install(app, opts = {}) {
284
285
  if (event.data.type === "updateLanguage") {
285
286
  location.reload();
286
287
  }
288
+ // 新增:监听关闭弹窗消息
289
+ if (event.data.type === "closeModal") {
290
+ this.configInstance && this.configInstance.closeModal();
291
+ }
287
292
  });
288
293
  }
289
294
  ```
@@ -533,6 +538,10 @@ install(app, opts = {}) {
533
538
  if (event.data.type === "updateLanguage") {
534
539
  location.reload();
535
540
  }
541
+ // 新增:监听关闭弹窗消息
542
+ if (event.data.type === "closeModal") {
543
+ this.configInstance && this.configInstance.closeModal();
544
+ }
536
545
  });
537
546
  }
538
547
  ```
@@ -1760,4 +1769,80 @@ div:where(.swal2-container) button:where(.swal2-close):focus-visible {
1760
1769
  - [lib/gc_i18n.css](file://lib/gc_i18n.css)
1761
1770
  - [packages/libs/textEditMode.css:1-166](file://packages/libs/textEditMode.css#L1-L166)
1762
1771
  - [packages/swal.css:1-18](file://packages/swal.css#L1-L18)
1763
- - [packages/index.js:338-343](file://packages/index.js#L338-L343)
1772
+ - [packages/index.js:338-343](file://packages/index.js#L338-L343)
1773
+
1774
+ ## PostMessage事件处理功能
1775
+
1776
+ **新增** I18n类现在支持通过postMessage事件编程控制模态框的关闭,扩展了原有的updateLanguage事件处理机制。
1777
+
1778
+ ### 事件处理机制
1779
+
1780
+ I18n类通过window.addEventListener监听postMessage事件,支持两种类型的事件:
1781
+
1782
+ ```javascript
1783
+ window.addEventListener("message", (event) => {
1784
+ if (event.data.type === "updateLanguage") {
1785
+ location.reload();
1786
+ }
1787
+ // 新增:监听关闭弹窗消息
1788
+ if (event.data.type === "closeModal") {
1789
+ this.configInstance && this.configInstance.closeModal();
1790
+ }
1791
+ });
1792
+ ```
1793
+
1794
+ ### 事件类型说明
1795
+
1796
+ #### updateLanguage事件
1797
+
1798
+ - **用途**: 触发语言更新,重新加载页面
1799
+ - **触发条件**: 接收到type为"updateLanguage"的消息
1800
+ - **行为**: 调用location.reload()重新加载当前页面
1801
+
1802
+ #### closeModal事件
1803
+
1804
+ - **用途**: 编程式关闭模态框
1805
+ - **触发条件**: 接收到type为"closeModal"的消息
1806
+ - **行为**: 调用configInstance.closeModal()关闭当前打开的配置模态框
1807
+ - **适用场景**: 外部应用程序需要程序化控制模态框的关闭
1808
+
1809
+ ### 外部应用程序集成
1810
+
1811
+ 外部应用程序可以通过postMessage API向目标窗口发送关闭模态框的指令:
1812
+
1813
+ ```javascript
1814
+ // 向目标窗口发送关闭模态框指令
1815
+ targetWindow.postMessage({ type: "closeModal" }, "*");
1816
+
1817
+ // 或者指定目标源
1818
+ targetWindow.postMessage({ type: "closeModal" }, "https://your-domain.com");
1819
+ ```
1820
+
1821
+ ### 与Earth组件的协同
1822
+
1823
+ Earth组件同样支持closeModal事件处理,确保组件间的一致性:
1824
+
1825
+ ```javascript
1826
+ const handleMessage = (event) => {
1827
+ if (event.data && event.data.type === "updateLanguage") {
1828
+ // 从 store 重新读取当前语言
1829
+ currentLocale.value = store2.get("I18N_LANGUAGE") || "zh-CN";
1830
+ }
1831
+ // Earth组件也支持closeModal事件
1832
+ if (event.data && event.data.type === "closeModal") {
1833
+ // Earth组件的关闭逻辑
1834
+ }
1835
+ };
1836
+ ```
1837
+
1838
+ ### 最佳实践
1839
+
1840
+ 1. **事件类型区分**: 确保发送的事件类型正确,避免误触发
1841
+ 2. **目标窗口确认**: 在生产环境中指定具体的目标源,提高安全性
1842
+ 3. **错误处理**: 添加适当的错误处理机制,防止事件丢失
1843
+ 4. **时机控制**: 在模态框真正打开后再发送closeModal事件
1844
+
1845
+ **本节来源**
1846
+ - [packages/index.js:546-555](file://packages/index.js#L546-L555)
1847
+ - [packages/components/earth.js:122-128](file://packages/components/earth.js#L122-L128)
1848
+ - [lib/gc_i18n.es.js:2868-2870](file://lib/gc_i18n.es.js#L2868-L2870)