Skip to content

Dev#5823

Merged
KouShenhai merged 11 commits intomasterfrom
dev
Mar 7, 2026
Merged

Dev#5823
KouShenhai merged 11 commits intomasterfrom
dev

Conversation

@KouShenhai
Copy link
Owner

@KouShenhai KouShenhai commented Mar 7, 2026

Summary by CodeRabbit

Release Notes

  • New Features

    • Introduced internationalization menu management system to replace message management functionality.
    • Added comprehensive multi-language support across the application interface with localized strings for English and Chinese.
  • Improvements

    • Enhanced user interface consistency with translated labels, placeholders, and validation messages throughout the application.
    • Improved form handling and modal interactions across multiple pages.
  • Updates

    • Updated database schema to support the new menu-based internationalization structure.

@gitguardian
Copy link

gitguardian bot commented Mar 7, 2026

⚠️ GitGuardian has uncovered 1 secret following the scan of your pull request.

Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.

🔎 Detected hardcoded secret in your pull request
GitGuardian id GitGuardian status Secret Commit Filename
6970633 Triggered Generic Password 3280007 ui/src/locales/en-US.ts View secret
🛠 Guidelines to remediate hardcoded secrets
  1. Understand the implications of revoking this secret by investigating where it is used in your code.
  2. Replace and store your secret safely. Learn here the best practices.
  3. Revoke and rotate this secret.
  4. If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.

To avoid such incidents in the future consider


🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

@netlify
Copy link

netlify bot commented Mar 7, 2026

Deploy Preview for kcloud-platform-iot ready!

Name Link
🔨 Latest commit ff87706
🔍 Latest deploy log https://app.netlify.com/projects/kcloud-platform-iot/deploys/69ac022c1ac44300087c70a5
😎 Deploy Preview https://deploy-preview-5823--kcloud-platform-iot.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@KouShenhai KouShenhai merged commit 64c22ff into master Mar 7, 2026
7 of 14 checks passed
@coderabbitai
Copy link

coderabbitai bot commented Mar 7, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 067110af-cf61-4368-bdc4-ec26aef6573c

📥 Commits

Reviewing files that changed from the base of the PR and between 3578ae7 and ff87706.

⛔ Files ignored due to path filters (1)
  • ui/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (120)
  • README.adoc
  • README.md
  • archive/docs/00.二开指南/02.指南/04.Docker安装.md
  • archive/docs/00.二开指南/02.指南/05.Linux常用命令.md
  • archive/docs/00.二开指南/02.指南/06.Docker常用命令.md
  • doc/db/4.0.0/kcloud_platform.sql
  • doc/db/4.0.0/kcloud_platform_nacos.sql
  • doc/db/4.0.0/kcloud_platform数据库设计文档.html
  • laokou-common/laokou-common-data-cache/src/main/java/org/laokou/common/data/cache/aspectj/OperateType.java
  • laokou-common/laokou-common-data-cache/src/test/java/org/laokou/common/data/cache/aspectj/DataCacheAspectjTest.java
  • laokou-common/laokou-common-i18n/src/main/java/org/laokou/common/i18n/util/MessageUtils.java
  • laokou-service/laokou-admin/laokou-admin-adapter/src/main/java/org/laokou/admin/web/I18nMenuController.java
  • laokou-service/laokou-admin/laokou-admin-adapter/src/main/java/org/laokou/admin/web/I18nMessagesController.java
  • laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuExportCmdExe.java
  • laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuImportCmdExe.java
  • laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuModifyCmdExe.java
  • laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuRemoveCmdExe.java
  • laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuSaveCmdExe.java
  • laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/query/I18nMenuGetQryExe.java
  • laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/query/I18nMenuPageQryExe.java
  • laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/service/I18nMenusServiceImpl.java
  • laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMessage/service/I18nMessagesServiceImpl.java
  • laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/menu/command/query/MenuTreeListQryExe.java
  • laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/api/I18nMenusServiceI.java
  • laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuExportCmd.java
  • laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuGetQry.java
  • laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuImportCmd.java
  • laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuModifyCmd.java
  • laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuPageQry.java
  • laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuRemoveCmd.java
  • laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuSaveCmd.java
  • laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/clientobject/I18nMenuCO.java
  • laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMessage/api/I18nMessagesServiceI.java
  • laokou-service/laokou-admin/laokou-admin-domain/src/main/java/org/laokou/admin/i18nMenu/ability/I18nMenuDomainService.java
  • laokou-service/laokou-admin/laokou-admin-domain/src/main/java/org/laokou/admin/i18nMenu/gateway/I18nMenuGateway.java
  • laokou-service/laokou-admin/laokou-admin-domain/src/main/java/org/laokou/admin/i18nMenu/model/I18nMenuE.java
  • laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/convertor/I18nMenuConvertor.java
  • laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/gatewayimpl/I18nMenuGatewayImpl.java
  • laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/gatewayimpl/database/I18nMenuMapper.java
  • laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/gatewayimpl/database/dataobject/I18nMenuDO.java
  • laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMessage/convertor/I18nMessageConvertor.java
  • laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMessage/gatewayimpl/I18nMessageGatewayImpl.java
  • laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/i18nMenu/I18nMenuMapper.xml
  • laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/menu/MenuMapper.xml
  • laokou-service/laokou-admin/laokou-admin-start/src/main/resources/admin-flow.json
  • laokou-service/laokou-auth/laokou-auth-app/src/main/java/org/laokou/auth/command/TokenRemoveCmdExe.java
  • ui/.eslintrc.js
  • ui/.lintstagedrc
  • ui/.prettierrc
  • ui/.stylelintrc.js
  • ui/config/config.ts
  • ui/config/proxy.ts
  • ui/config/routes.ts
  • ui/src/access.ts
  • ui/src/app.tsx
  • ui/src/global.less
  • ui/src/loading.tsx
  • ui/src/locales/en-US.ts
  • ui/src/locales/zh-CN.ts
  • ui/src/models/global.ts
  • ui/src/pages/Home/DeviceMessage.tsx
  • ui/src/pages/Home/index.less
  • ui/src/pages/Home/index.tsx
  • ui/src/pages/IoT/Device/DeviceDrawer.tsx
  • ui/src/pages/IoT/Device/ProductCategoryDrawer.tsx
  • ui/src/pages/IoT/Device/ProductDrawer.tsx
  • ui/src/pages/IoT/Device/ThingModelDrawer.tsx
  • ui/src/pages/IoT/Device/index.tsx
  • ui/src/pages/IoT/Device/product.tsx
  • ui/src/pages/IoT/Device/productCategory.tsx
  • ui/src/pages/IoT/Device/thingModel.tsx
  • ui/src/pages/Login/index.tsx
  • ui/src/pages/Sys/Config/generator.tsx
  • ui/src/pages/Sys/Log/NoticeDrawer.tsx
  • ui/src/pages/Sys/Log/OperateDrawer.tsx
  • ui/src/pages/Sys/Log/login.tsx
  • ui/src/pages/Sys/Log/notice.tsx
  • ui/src/pages/Sys/Log/operate.tsx
  • ui/src/pages/Sys/Oss/config.tsx
  • ui/src/pages/Sys/Oss/log.tsx
  • ui/src/pages/Sys/Permission/DeptDrawer.tsx
  • ui/src/pages/Sys/Permission/MenuDrawer.tsx
  • ui/src/pages/Sys/Permission/RoleDrawer.tsx
  • ui/src/pages/Sys/Permission/RoleModifyAuthorityDrawer.tsx
  • ui/src/pages/Sys/Permission/UploadAvatarDrawer.tsx
  • ui/src/pages/Sys/Permission/UserDrawer.tsx
  • ui/src/pages/Sys/Permission/UserModifyAuthorityDrawer.tsx
  • ui/src/pages/Sys/Permission/UserResetPwdDrawer.tsx
  • ui/src/pages/Sys/Permission/dept.tsx
  • ui/src/pages/Sys/Permission/menu.tsx
  • ui/src/pages/Sys/Permission/role.tsx
  • ui/src/pages/Sys/Permission/user.tsx
  • ui/src/services/admin/dept.ts
  • ui/src/services/admin/dict.ts
  • ui/src/services/admin/dictItem.ts
  • ui/src/services/admin/i18nMenu.ts
  • ui/src/services/admin/i18nMessage.ts
  • ui/src/services/admin/index.ts
  • ui/src/services/admin/loginLog.ts
  • ui/src/services/admin/menu.ts
  • ui/src/services/admin/noticeLog.ts
  • ui/src/services/admin/operateLog.ts
  • ui/src/services/admin/oss.ts
  • ui/src/services/admin/ossLog.ts
  • ui/src/services/admin/role.ts
  • ui/src/services/admin/source.ts
  • ui/src/services/admin/tenant.ts
  • ui/src/services/admin/typings.d.ts
  • ui/src/services/admin/user.ts
  • ui/src/services/auth/auth.ts
  • ui/src/services/auth/captcha.ts
  • ui/src/services/auth/secret.ts
  • ui/src/services/auth/typings.d.ts
  • ui/src/services/iot/device.ts
  • ui/src/services/iot/index.ts
  • ui/src/services/iot/product.ts
  • ui/src/services/iot/productCategory.ts
  • ui/src/services/iot/thingModel.ts
  • ui/src/services/iot/typings.d.ts
  • ui/src/utils/export.ts

Walkthrough

This PR executes a comprehensive system-wide refactoring to migrate internationalization functionality from a message-based to menu-based architecture. It renames database tables (sys_i18n_messagesys_i18n_menu), updates API endpoints (/api/v1/i18n-messages/api/v1/i18n-menus), refactors 40+ backend classes across domain/service/controller layers, and implements extensive frontend internationalization by introducing locale files with 350+ translation keys and integrating i18n helpers into 80+ UI components.

Changes

Cohort / File(s) Summary
Database Schema & Configuration
doc/db/4.0.0/kcloud_platform.sql, doc/db/4.0.0/kcloud_platform_nacos.sql, doc/db/4.0.0/kcloud_platform数据库设计文档.html, laokou-service/.../MenuMapper.xml
Rename sys_i18n_message table to sys_i18n_menu, replace zh_message/en_message columns with menu column, update API resource paths from i18n-messages to i18n-menus, modify menu query mappers to join with i18n table for localized names.
Backend I18n Domain Services
laokou-service/.../i18nMenu/ability/I18nMenuDomainService.java, laokou-service/.../i18nMenu/gateway/I18nMenuGateway.java, laokou-service/.../i18nMenu/model/I18nMenuE.java, laokou-service/.../i18nMessage/... (removed)
Complete refactoring of domain layer: rename I18nMessageDomainService → I18nMenuDomainService, update gateway interfaces and entity models; remove legacy i18nMessage domain classes.
Backend Command/Query Executors
laokou-service/.../i18nMenu/command/*.java, laokou-service/.../i18nMenu/command/query/*.java, laokou-service/.../i18nMessage/... (removed)
Implement command executors for create/update/delete/import/export operations and query executors for pagination and retrieval; rename all message-related executors to menu equivalents; remove legacy message executors.
Backend Infrastructure & Converters
laokou-service/.../i18nMenu/convertor/I18nMenuConvertor.java, laokou-service/.../i18nMenu/gatewayimpl/, laokou-service/.../i18nMenu/gatewayimpl/database/
Add I18nMenuConvertor for entity/DO/CO transformations; implement I18nMenuGatewayImpl with CRUD operations; rename mapper and data objects from message to menu; remove legacy message infrastructure classes.
Backend API Controllers & Services
laokou-service/.../web/I18nMenuController.java, laokou-service/.../web/I18nMessagesController.java (removed), laokou-service/.../service/I18nMenusServiceImpl.java, laokou-service/.../service/I18nMessagesServiceImpl.java (removed), laokou-service/.../api/I18nMenusServiceI.java, laokou-service/.../api/I18nMessagesServiceI.java (removed)
New REST controller for i18n menu CRUD/import/export endpoints; implement service interface and implementation; remove legacy message controller and services.
Backend Data Transfer Objects
laokou-service/.../i18nMenu/dto/*.java, laokou-service/.../i18nMenu/dto/clientobject/I18nMenuCO.java, laokou-service/.../i18nMessage/dto/ (removed)
Rename all command/query DTOs from I18nMessage\* to I18nMenu\*; update type references in saveCmd/modifyCmd/removeCmd/pageQry/getQry/exportCmd/importCmd; remove legacy message DTO classes.
Cache Eviction Updates
laokou-common/.../OperateType.java, laokou-service/.../TokenRemoveCmdExe.java, laokou-common/.../DataCacheAspectjTest.java
Replace cache eviction API from evictIfPresent(key) to evict(key) with 200ms delay using LockSupport.parkNanos; update corresponding test assertions.
Frontend API Services
ui/src/services/admin/i18nMenu.ts, ui/src/services/admin/i18nMessage.ts (removed), ui/src/services/admin/index.ts
New i18nMenu service module with CRUD/import/export/page operations; remove legacy i18nMessage service; update index.ts exports to reference i18nMenu instead of i18nMessage.
Frontend Locale & Configuration
ui/src/locales/en-US.ts, ui/src/locales/zh-CN.ts, ui/.eslintrc.js, ui/.lintstagedrc, ui/.prettierrc, ui/.stylelintrc.js, ui/config/config.ts, ui/config/proxy.ts, ui/config/routes.ts
Add 350+ translation keys across common, user, role, auth, error, home, IoT, and system modules; minor formatting/indentation fixes to linting and configuration files.
Frontend App & Global Setup
ui/src/app.tsx, ui/src/access.ts, ui/src/global.less, ui/src/loading.tsx, ui/src/models/global.ts
Add internationalization helpers (t function, mapMenuTreeI18n); enhance token refresh flow and initial state retrieval; normalize error handling with i18n keys; add getIntl to loading component; minor formatting in access checks and styles.
Frontend Permission & User Management
ui/src/pages/Sys/Permission/user.tsx, ui/src/pages/Sys/Permission/UserDrawer.tsx, ui/src/pages/Sys/Permission/UserModifyAuthorityDrawer.tsx, ui/src/pages/Sys/Permission/UserResetPwdDrawer.tsx, ui/src/pages/Sys/Permission/UploadAvatarDrawer.tsx, ui/src/pages/Sys/Permission/dept.tsx, ui/src/pages/Sys/Permission/DeptDrawer.tsx
Comprehensive i18n integration across user/role/permission management: replace hardcoded strings with t(...) lookups for labels, placeholders, validation messages; add drawer state management (modalVisit, setModalVisit); enhance form handling with loading states and localized success messages.
Frontend Menu & Role Management
ui/src/pages/Sys/Permission/menu.tsx, ui/src/pages/Sys/Permission/MenuDrawer.tsx, ui/src/pages/Sys/Permission/role.tsx, ui/src/pages/Sys/Permission/RoleDrawer.tsx, ui/src/pages/Sys/Permission/RoleModifyAuthorityDrawer.tsx, laokou-service/.../MenuTreeListQryExe.java
Internationalize menu and role pages; extract menu/role drawer components with i18n-enabled forms; update menu tree query executor to cache userId locally; add permission-driven rendering and localized action labels.
Frontend Logging & System Pages
ui/src/pages/Sys/Log/login.tsx, ui/src/pages/Sys/Log/notice.tsx, ui/src/pages/Sys/Log/operate.tsx, ui/src/pages/Sys/Log/NoticeDrawer.tsx, ui/src/pages/Sys/Log/OperateDrawer.tsx, ui/src/pages/Sys/Oss/config.tsx, ui/src/pages/Sys/Oss/log.tsx, ui/src/pages/Sys/Config/generator.tsx
Add comprehensive i18n support to logging and system configuration pages: replace hardcoded strings with translation keys for column titles, status labels, placeholders; implement localized export functionality with translated headers and file names; enhance drawer forms with i18n labels and validation messages.
Frontend IoT Components
ui/src/pages/IoT/Device/index.tsx, ui/src/pages/IoT/Device/ProductDrawer.tsx, ui/src/pages/IoT/Device/ProductCategoryDrawer.tsx, ui/src/pages/IoT/Device/productCategory.tsx, ui/src/pages/IoT/Device/ThingModelDrawer.tsx, ui/src/pages/IoT/Device/thingModel.tsx
Internationalize IoT device/product/thing-model management pages: add i18n helpers and replace static strings; enhance drawer forms with localized labels, placeholders, and validation messages; implement translated success/error feedback; add WebSocket message localization.
Frontend Home & Login
ui/src/pages/Home/index.tsx, ui/src/pages/Home/index.less, ui/src/pages/Home/DeviceMessage.tsx, ui/src/pages/Login/index.tsx
Add i18n support to home dashboard (product/device counts, device messages, alarms); replace hardcoded greeting messages in login with translated keys; normalize CSS formatting; update device message chart labels.
Frontend Services Formatting
ui/src/services/admin/dept.ts, ui/src/services/admin/dict.ts, ui/src/services/admin/dictItem.ts, ui/src/services/admin/loginLog.ts, ui/src/services/admin/menu.ts, ui/src/services/admin/noticeLog.ts, ui/src/services/admin/operateLog.ts, ui/src/services/admin/oss.ts, ui/src/services/admin/ossLog.ts, ui/src/services/admin/role.ts, ui/src/services/admin/source.ts, ui/src/services/admin/tenant.ts, ui/src/services/admin/user.ts, ui/src/services/auth/auth.ts, ui/src/services/auth/captcha.ts, ui/src/services/auth/secret.ts, ui/src/services/iot/device.ts, ui/src/services/iot/product.ts, ui/src/services/iot/productCategory.ts, ui/src/services/iot/thingModel.ts
Refactor API service function signatures to multiline parameter lists with trailing commas for consistency; minor spacing adjustments in destructuring; no behavioral changes.
Frontend Type Definitions
ui/src/services/admin/typings.d.ts, ui/src/services/auth/typings.d.ts, ui/src/services/iot/typings.d.ts
Rename I18nMessage\* type aliases to I18nMenu\*; update field type references; add semicolon termination and minor formatting; preserve semantic equivalence.
Frontend IoT Service Index & Export
ui/src/services/iot/index.ts, ui/src/utils/export.ts
Export productCategory and device from iot service index; enhance Excel export utility with standardized formatting and consistent semicolon usage.
Documentation
README.adoc, README.md, archive/docs/.../Docker安装.md, archive/docs/.../Linux常用命令.md, archive/docs/.../Docker常用命令.md
Update Spring Boot Admin version from 4.0.1 to 4.0.2; add Linux distribution-specific commands (Ubuntu, Arch); add Docker image management commands; remove empty lines in documentation.
Admin Flow Configuration
laokou-service/.../admin-flow.json
Update API resource paths from i18n-messages to i18n-menus in workflow configuration.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

  • Refactoring of cache eviction behavior from evictIfPresent() to evict() with delay, affecting both data-cache and auth modules—directly impacts the OperateType and TokenRemoveCmdExe changes in this PR.
  • Extensive i18n migration across menu tree query executors and menu mapper SQL logic, aligning with the MenuTreeListQryExe changes that cache userId locally.
  • UI permission/role/drawer management refactoring alongside role authority modifications and avatar upload enhancements, closely matching the RoleDrawer, UserDrawer, and UploadAvatarDrawer changes in this PR.

Suggested labels

refactoring, i18n, database-migration, backend-api, frontend-ui

Suggested reviewers

  • Database/Migration Specialist: Review database schema changes (sys_i18n_messagesys_i18n_menu), Nacos config updates, and menu mapper SQL logic.
  • Backend Service Owner: Review domain services, command executors, gateway implementations, and controller layers for i18n menu migration.
  • Frontend Lead: Review UI component internationalization, locale file expansion, service layer updates, and access permission checks.
  • Full-Stack Reviewer: Oversee end-to-end refactoring consistency, API contract alignment, and integration points between backend and frontend.

Poem

🐰 A menu migration, menus not messages now,
With thousand translation keys in every row,
From cache evictions to i18n strings so bright,
This PR brings the system's i18n to light!
hops excitedly 🌍✨

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dev

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @KouShenhai, your pull request is larger than the review limit of 150000 diff characters

@qodo-code-review
Copy link

Review Summary by Qodo

I18n Menu Management Implementation with Frontend Internationalization and Code Standardization

✨ Enhancement 🐞 Bug fix

Grey Divider

Walkthroughs

Description
• **I18n Menu Management System**: Implemented comprehensive internationalization menu management
  feature with full CRUD operations, including REST controller, service layer, domain models, and data
  persistence
• **Refactored I18n Message to Menu**: Renamed all I18nMessage related classes to I18nMenu
  across domain, application, infrastructure, and client layers to better reflect the feature's
  purpose
• **Cache Eviction Enhancement**: Updated cache eviction mechanism from evictIfPresent to evict
  with 200ms delay in token removal and data cache operations for improved consistency
• **Frontend Internationalization**: Added comprehensive i18n support across multiple UI components
  (menu, user, role, login, device management) with useIntl hook and message key translations
• **Frontend Code Formatting**: Standardized code formatting across TypeScript/TSX files including
  indentation, import organization, function signatures, and CSS properties
• **Type Definitions Update**: Renamed i18n types from I18nMessage* to I18nMenu* in TypeScript
  type definitions for consistency
• **MyBatis Mapper Update**: Updated mapper configuration from i18nMessage to i18nMenu namespace
  and data object types
• **Database Documentation**: Updated database design documentation to reflect menu terminology
  instead of message
Diagram
flowchart LR
  A["I18nMessage<br/>Components"] -->|Refactor| B["I18nMenu<br/>Components"]
  B --> C["REST Controller<br/>I18nMenuController"]
  B --> D["Service Layer<br/>I18nMenusServiceImpl"]
  B --> E["Domain Layer<br/>I18nMenuDomainService"]
  B --> F["Infrastructure<br/>Gateway & Mapper"]
  G["Frontend<br/>Components"] -->|Add i18n| H["Internationalized<br/>UI Pages"]
  H --> I["Menu, User, Role,<br/>Login, Device"]
  J["Cache Operations"] -->|Enhance| K["Evict with<br/>200ms Delay"]
  L["Code Formatting"] -->|Standardize| M["Consistent Style<br/>Across Codebase"]
Loading

Grey Divider

File Changes

1. laokou-service/laokou-admin/laokou-admin-adapter/src/main/java/org/laokou/admin/web/I18nMenuController.java ✨ Enhancement +119/-0

New I18n Menu Management REST Controller

• New REST controller for internationalization menu management with CRUD operations
• Implements endpoints for save, modify, remove, import, export, pagination, and detail retrieval
• Includes security annotations for permission-based access control
• Uses idempotent and operation logging decorators for reliability and auditability

laokou-service/laokou-admin/laokou-admin-adapter/src/main/java/org/laokou/admin/web/I18nMenuController.java


2. laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/service/I18nMenusServiceImpl.java ✨ Enhancement +99/-0

I18n Menu Service Implementation

• New service implementation for I18n menu operations
• Delegates to command and query executors for business logic
• Implements interface I18nMenusServiceI with seven methods

laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/service/I18nMenusServiceImpl.java


3. laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/api/I18nMenusServiceI.java ✨ Enhancement +80/-0

I18n Menu Service Interface Definition

• New service interface defining I18n menu operations contract
• Declares seven methods for CRUD, import/export, and query operations
• Includes JavaDoc documentation for each method

laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/api/I18nMenusServiceI.java


View more (118)
4. laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/query/I18nMenuPageQryExe.java 🐞 Bug fix +13/-13

Rename Message to Menu Query Executor

• Refactored from I18nMessagePageQryExe to I18nMenuPageQryExe
• Updated all package names and class references from i18nMessage to i18nMenu
• Updated mapper and converter references accordingly

laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/query/I18nMenuPageQryExe.java


5. laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/gatewayimpl/I18nMenuGatewayImpl.java ✨ Enhancement +58/-0

I18n Menu Gateway Implementation

• New gateway implementation for I18n menu data persistence
• Implements create, update, and delete operations using mapper
• Handles version management for optimistic locking

laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/gatewayimpl/I18nMenuGatewayImpl.java


6. laokou-service/laokou-admin/laokou-admin-domain/src/main/java/org/laokou/admin/i18nMenu/ability/I18nMenuDomainService.java 🐞 Bug fix +12/-12

Rename Message to Menu Domain Service

• Refactored from I18nMessageDomainService to I18nMenuDomainService
• Updated all references from message to menu terminology
• Maintains three core domain operations: create, update, delete

laokou-service/laokou-admin/laokou-admin-domain/src/main/java/org/laokou/admin/i18nMenu/ability/I18nMenuDomainService.java


7. laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuModifyCmdExe.java 🐞 Bug fix +10/-10

Rename Message Save to Menu Modify Executor

• Refactored from I18nMessageSaveCmdExe to I18nMenuModifyCmdExe
• Updated to call updateI18nMenu instead of createI18nMessage
• Updated all package and class references from message to menu

laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuModifyCmdExe.java


8. laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuSaveCmdExe.java 🐞 Bug fix +10/-10

Rename Message Modify to Menu Save Executor

• Refactored from I18nMessageModifyCmdExe to I18nMenuSaveCmdExe
• Updated to call createI18nMenu instead of updateI18nMessage
• Updated all package and class references from message to menu

laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuSaveCmdExe.java


9. laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/query/I18nMenuGetQryExe.java 🐞 Bug fix +10/-10

Rename Message to Menu Detail Query Executor

• Refactored from I18nMessageGetQryExe to I18nMenuGetQryExe
• Updated all package names and class references from message to menu
• Updated mapper and converter references accordingly

laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/query/I18nMenuGetQryExe.java


10. laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/convertor/I18nMenuConvertor.java ✨ Enhancement +52/-0

I18n Menu Data Converter Utility

• New converter utility for I18n menu data transformations
• Provides conversion methods between entity, data object, and client object
• Handles ID assignment for new records

laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/convertor/I18nMenuConvertor.java


11. laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuRemoveCmdExe.java 🐞 Bug fix +8/-8

Rename Message to Menu Remove Executor

• Refactored from I18nMessageRemoveCmdExe to I18nMenuRemoveCmdExe
• Updated to call deleteI18nMenu instead of deleteI18nMessage
• Updated all package and class references from message to menu

laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuRemoveCmdExe.java


12. laokou-service/laokou-admin/laokou-admin-domain/src/main/java/org/laokou/admin/i18nMenu/gateway/I18nMenuGateway.java 🐞 Bug fix +10/-10

Rename Message to Menu Gateway Interface

• Refactored from I18nMessageGateway to I18nMenuGateway
• Updated all method names and documentation from message to menu
• Maintains three core gateway operations: create, update, delete

laokou-service/laokou-admin/laokou-admin-domain/src/main/java/org/laokou/admin/i18nMenu/gateway/I18nMenuGateway.java


13. laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuExportCmdExe.java 🐞 Bug fix +5/-5

Rename Message to Menu Export Executor

• Refactored from I18nMessageExportCmdExe to I18nMenuExportCmdExe
• Updated all package and class references from message to menu
• Placeholder implementation for export functionality

laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuExportCmdExe.java


14. laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuImportCmdExe.java 🐞 Bug fix +5/-5

Rename Message to Menu Import Executor

• Refactored from I18nMessageImportCmdExe to I18nMenuImportCmdExe
• Updated all package and class references from message to menu
• Placeholder implementation for import functionality

laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMenu/command/I18nMenuImportCmdExe.java


15. laokou-service/laokou-auth/laokou-auth-app/src/main/java/org/laokou/auth/command/TokenRemoveCmdExe.java ✨ Enhancement +4/-1

Cache Eviction with Delay Enhancement

• Changed cache eviction from evictIfPresent to evict method
• Added 200ms delay using LockSupport.parkNanos after cache eviction
• Added imports for TimeUnit and LockSupport

laokou-service/laokou-auth/laokou-auth-app/src/main/java/org/laokou/auth/command/TokenRemoveCmdExe.java


16. laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/gatewayimpl/database/I18nMenuMapper.java 🐞 Bug fix +4/-4

Rename Message to Menu Database Mapper

• Refactored from I18nMessageMapper to I18nMenuMapper
• Updated all package names and class references from message to menu
• Maintains MyBatis mapper interface extending CrudMapper

laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/gatewayimpl/database/I18nMenuMapper.java


17. laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuModifyCmd.java 🐞 Bug fix +5/-5

Rename Message Save to Menu Modify Command DTO

• Refactored from I18nMessageSaveCmd to I18nMenuModifyCmd
• Updated all package and class references from message to menu
• Updated JavaDoc to reflect modify operation

laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuModifyCmd.java


18. laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuSaveCmd.java 🐞 Bug fix +5/-5

Rename Message Modify to Menu Save Command DTO

• Refactored from I18nMessageModifyCmd to I18nMenuSaveCmd
• Updated all package and class references from message to menu
• Updated JavaDoc to reflect save operation

laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuSaveCmd.java


19. laokou-common/laokou-common-data-cache/src/main/java/org/laokou/common/data/cache/aspectj/OperateType.java ✨ Enhancement +5/-1

Cache Eviction with Delay Enhancement

• Changed cache eviction from evictIfPresent to evict method in DELETE operation
• Added 200ms delay using LockSupport.parkNanos after cache eviction
• Added imports for TimeUnit and LockSupport

laokou-common/laokou-common-data-cache/src/main/java/org/laokou/common/data/cache/aspectj/OperateType.java


20. laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/gatewayimpl/database/dataobject/I18nMenuDO.java 🐞 Bug fix +3/-3

Rename Message to Menu Data Object

• Refactored from I18nMessageDO to I18nMenuDO
• Updated all package names and class references from message to menu
• Updated JavaDoc to reflect menu data object

laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/gatewayimpl/database/dataobject/I18nMenuDO.java


21. laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuImportCmd.java 🐞 Bug fix +3/-3

Rename Message to Menu Import Command DTO

• Refactored from I18nMessageImportCmd to I18nMenuImportCmd
• Updated all package and class references from message to menu
• Updated JavaDoc to reflect import operation

laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuImportCmd.java


22. laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuRemoveCmd.java 🐞 Bug fix +3/-3

Rename Message to Menu Remove Command DTO

• Refactored from I18nMessageRemoveCmd to I18nMenuRemoveCmd
• Updated all package and class references from message to menu
• Updated JavaDoc to reflect remove operation

laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuRemoveCmd.java


23. laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuGetQry.java 🐞 Bug fix +3/-3

Rename Message to Menu Detail Query DTO

• Refactored from I18nMessageGetQry to I18nMenuGetQry
• Updated all package and class references from message to menu
• Updated JavaDoc to reflect menu detail query

laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuGetQry.java


24. laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/clientobject/I18nMenuCO.java 🐞 Bug fix +3/-3

Rename Message to Menu Client Object DTO

• Refactored from I18nMessageCO to I18nMenuCO
• Updated all package and class references from message to menu
• Updated JavaDoc to reflect menu client object

laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/clientobject/I18nMenuCO.java


25. laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuPageQry.java 🐞 Bug fix +3/-3

Rename Message to Menu Pagination Query DTO

• Refactored from I18nMessagePageQry to I18nMenuPageQry
• Updated all package and class references from message to menu
• Updated JavaDoc to reflect menu pagination query

laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuPageQry.java


26. laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuExportCmd.java 🐞 Bug fix +3/-3

Rename Message to Menu Export Command DTO

• Refactored from I18nMessageExportCmd to I18nMenuExportCmd
• Updated all package and class references from message to menu
• Updated JavaDoc to reflect menu export operation

laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/I18nMenuExportCmd.java


27. laokou-service/laokou-admin/laokou-admin-domain/src/main/java/org/laokou/admin/i18nMenu/model/I18nMenuE.java 🐞 Bug fix +3/-3

Rename Message to Menu Entity Model

• Refactored from I18nMessageE to I18nMenuE
• Updated all package and class references from message to menu
• Updated JavaDoc to reflect menu entity

laokou-service/laokou-admin/laokou-admin-domain/src/main/java/org/laokou/admin/i18nMenu/model/I18nMenuE.java


28. laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/menu/command/query/MenuTreeListQryExe.java Formatting +3/-2

Extract User ID to Local Variable

• Extracted UserUtils.getUserId() call to local variable for reuse
• Improved code readability by reducing duplicate method calls

laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/menu/command/query/MenuTreeListQryExe.java


29. laokou-common/laokou-common-i18n/src/main/java/org/laokou/common/i18n/util/MessageUtils.java 📦 Other +1/-1
• Updated Java

laokou-common/laokou-common-i18n/src/main/java/org/laokou/common/i18n/util/MessageUtils.java


30. ui/src/services/iot/thingModel.ts Formatting +98/-81

Code formatting and indentation standardization

• Reformatted function signatures to place parameters on separate lines for improved readability
• Converted 2-space indentation to tab-based indentation throughout the file
• Applied consistent code formatting to all async functions

ui/src/services/iot/thingModel.ts


31. ui/src/services/iot/device.ts Formatting +98/-79

Code formatting and indentation standardization

• Reformatted function signatures with parameters on separate lines
• Standardized indentation from spaces to tabs across all functions
• Applied consistent formatting to request configurations

ui/src/services/iot/device.ts


32. ui/src/services/iot/product.ts Formatting +98/-79

Code formatting and indentation standardization

• Reformatted function signatures to place parameters on separate lines
• Converted space-based indentation to tab-based indentation
• Applied consistent code formatting to all service functions

ui/src/services/iot/product.ts


33. ui/src/services/admin/menu.ts Formatting +41/-12

Code formatting and indentation standardization

• Reformatted import statement with consistent spacing
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Applied consistent formatting to destructuring assignments

ui/src/services/admin/menu.ts


34. ui/src/services/admin/dept.ts Formatting +37/-11

Code formatting and indentation standardization

• Reformatted import statement with consistent spacing
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Applied consistent formatting to destructuring assignments

ui/src/services/admin/dept.ts


35. ui/src/services/admin/i18nMenu.ts ✨ Enhancement +127/-0

New i18n menu service API implementation

• New file created for internationalization menu service API
• Implements CRUD operations for i18n menu management
• Includes functions for modify, save, remove, get, export, import, and page query

ui/src/services/admin/i18nMenu.ts


36. ui/src/services/admin/noticeLog.ts Formatting +40/-12

Code formatting and import organization

• Reorganized import statements in alphabetical order
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Improved formatting of ExportAllToExcel function call with line breaks

ui/src/services/admin/noticeLog.ts


37. ui/src/services/admin/operateLog.ts Formatting +40/-12

Code formatting and import organization

• Reorganized import statements in alphabetical order
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Improved formatting of ExportAllToExcel function call with line breaks

ui/src/services/admin/operateLog.ts


38. ui/src/services/admin/loginLog.ts Formatting +40/-12

Code formatting and import organization

• Reorganized import statements in alphabetical order
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Improved formatting of ExportAllToExcel function call with line breaks

ui/src/services/admin/loginLog.ts


39. ui/src/services/admin/role.ts Formatting +33/-10

Code formatting and indentation standardization

• Reformatted import statement with consistent spacing
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Applied consistent formatting to destructuring assignments

ui/src/services/admin/role.ts


40. ui/config/routes.ts Formatting +26/-26

Route configuration formatting standardization

• Added trailing commas to object properties for consistency
• Standardized formatting of nested route configurations
• Applied consistent indentation throughout the routes configuration

ui/config/routes.ts


41. ui/src/services/admin/ossLog.ts Formatting +28/-9

Code formatting and indentation standardization

• Reformatted import statement with consistent spacing
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Applied consistent formatting to destructuring assignments

ui/src/services/admin/ossLog.ts


42. ui/src/services/admin/dictItem.ts Formatting +28/-9

Code formatting and indentation standardization

• Reformatted import statement with consistent spacing
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Applied consistent formatting to destructuring assignments

ui/src/services/admin/dictItem.ts


43. ui/src/services/admin/oss.ts Formatting +28/-9

Code formatting and indentation standardization

• Reformatted import statement with consistent spacing
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Applied consistent formatting to destructuring assignments

ui/src/services/admin/oss.ts


44. ui/src/services/admin/tenant.ts Formatting +28/-9

Code formatting and indentation standardization

• Reformatted import statement with consistent spacing
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Applied consistent formatting to destructuring assignments

ui/src/services/admin/tenant.ts


45. ui/src/services/admin/dict.ts Formatting +28/-9

Code formatting and indentation standardization

• Reformatted import statement with consistent spacing
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Applied consistent formatting to destructuring assignments

ui/src/services/admin/dict.ts


46. ui/src/services/admin/source.ts Formatting +28/-9

Code formatting and indentation standardization

• Reformatted import statement with consistent spacing
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Applied consistent formatting to destructuring assignments

ui/src/services/admin/source.ts


47. ui/src/utils/export.ts Formatting +27/-21

Code formatting and import organization

• Reorganized import statements in alphabetical order
• Reformatted function signatures with parameters on separate lines
• Standardized indentation and spacing throughout the file
• Added semicolons for consistency and improved code formatting

ui/src/utils/export.ts


48. ui/src/services/auth/auth.ts Formatting +8/-10
 Code formatting and function signature standardization

ui/src/services/auth/auth.ts


49. ui/src/services/admin/typings.d.ts ✨ Enhancement +9/-10

Type definitions refactoring and naming consistency

• Renamed I18nMessageCO type to I18nMenuCO for consistency
• Renamed related types: I18nMessageExportCmd, I18nMessageModifyCmd, I18nMessagePageQry,
 I18nMessageSaveCmd
• Fixed indentation inconsistencies in OperateLogCO and Result type definitions

ui/src/services/admin/typings.d.ts


50. ui/src/services/admin/index.ts ✨ Enhancement +13/-13

Import organization and i18n service renaming

• Reorganized import statements in alphabetical order
• Renamed import from i18nMessage to i18nMenu to match new service
• Added trailing commas for consistency

ui/src/services/admin/index.ts


51. ui/src/services/auth/captcha.ts Formatting +4/-4

Code formatting and spacing standardization

• Reformatted import statement with consistent spacing
• Standardized indentation and spacing in destructuring assignments
• Applied consistent formatting to object literals

ui/src/services/auth/captcha.ts


52. ui/src/services/auth/typings.d.ts Formatting +3/-4

Type definitions formatting and consistency

• Removed extra blank line after namespace declaration
• Added trailing semicolons to type definitions for consistency
• Fixed indentation in Result type definition

ui/src/services/auth/typings.d.ts


53. ui/src/services/iot/index.ts Formatting +2/-2

Import organization and formatting

• Reorganized import statements in alphabetical order
• Applied consistent formatting to export statement

ui/src/services/iot/index.ts


54. ui/src/models/global.ts Formatting +2/-2

Import statement formatting

• Reformatted import statements with consistent spacing
• Applied consistent spacing around curly braces

ui/src/models/global.ts


55. ui/src/services/auth/secret.ts Formatting +1/-1

Import statement formatting

• Reformatted import statement with consistent spacing

ui/src/services/auth/secret.ts


56. ui/config/proxy.ts Formatting +1/-1

Proxy configuration formatting

• Reformatted pathRewrite object with consistent spacing
• Applied consistent formatting to proxy configuration

ui/config/proxy.ts


57. doc/db/4.0.0/kcloud_platform数据库设计文档.html 📝 Documentation +2/-2

Database documentation description update

• Updated table description from '国际化消息' to '国际化菜单'
• Updated section description from '国际化消息' to '国际化菜单'

doc/db/4.0.0/kcloud_platform数据库设计文档.html


58. ui/src/global.less Formatting +46/-32

CSS formatting and color value optimization

• Reformatted box-shadow properties with improved line breaks for readability
• Changed color values from #ffffff to #fff and #000000 to #000
• Applied consistent spacing and formatting to CSS rules

ui/src/global.less


59. ui/src/pages/Home/index.less Formatting +4/-7

CSS formatting and whitespace cleanup

• Removed unnecessary blank lines within CSS selectors
• Standardized spacing and formatting of CSS properties
• Applied consistent indentation throughout the file

ui/src/pages/Home/index.less


60. ui/src/pages/Sys/Permission/menu.tsx ✨ Enhancement +244/-195

Menu component internationalization and code refactoring

• Reorganized import statements in alphabetical order
• Added useIntl hook for internationalization support
• Replaced hardcoded strings with intl.formatMessage() calls for i18n
• Reformatted component code with consistent spacing and line breaks
• Added proper TypeScript types for ActionType and useRef

ui/src/pages/Sys/Permission/menu.tsx


61. laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/i18nMenu/I18nMenuMapper.xml ✨ Enhancement +2/-2

MyBatis mapper namespace and type refactoring

• Updated mapper namespace from i18nMessage to i18nMenu
• Updated resultType from I18nMessageDO to I18nMenuDO

laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/i18nMenu/I18nMenuMapper.xml


62. ui/src/pages/IoT/Device/thingModel.tsx ✨ Enhancement +301/-194

Internationalization and code formatting improvements

• Reorganized imports with consistent formatting and added useIntl hook for internationalization
• Replaced all hardcoded Chinese strings with t() function calls using i18n message keys
• Added type annotation ActionType | null to actionRef ref
• Improved code formatting with consistent spacing and line breaks throughout the file

ui/src/pages/IoT/Device/thingModel.tsx


63. ui/src/pages/Sys/Permission/user.tsx ✨ Enhancement +292/-210

Internationalization implementation and import reorganization

• Added useIntl hook and t() translation function for internationalization support
• Replaced all hardcoded Chinese text with i18n message keys throughout the component
• Reorganized imports alphabetically and improved formatting consistency
• Added type annotation ActionType | null to actionRef and improved code structure

ui/src/pages/Sys/Permission/user.tsx


64. ui/src/pages/Login/index.tsx ✨ Enhancement +161/-90

Login page internationalization and code formatting

• Reorganized imports with consistent formatting and proper line breaks
• Replaced hardcoded Chinese greeting messages with i18n keys using t() function
• Improved code formatting with consistent spacing in JSX elements and function calls
• Enhanced type safety with better null checks and type casting

ui/src/pages/Login/index.tsx


65. ui/src/pages/Sys/Permission/role.tsx ✨ Enhancement +209/-169

Role management internationalization and code refactoring

• Added useIntl hook and t() translation function for full internationalization
• Replaced all hardcoded Chinese strings with i18n message keys
• Reorganized imports alphabetically and improved code formatting
• Added type annotation ActionType to actionRef ref with ts-ignore comment

ui/src/pages/Sys/Permission/role.tsx


66. ui/src/pages/IoT/Device/ThingModelDrawer.tsx ✨ Enhancement +205/-111

Thing model drawer internationalization implementation

• Added useIntl hook and t() translation function for internationalization
• Replaced all hardcoded Chinese labels, placeholders, and validation messages with i18n keys
• Reorganized imports with consistent formatting and proper line breaks
• Improved code formatting with consistent spacing and JSX structure

ui/src/pages/IoT/Device/ThingModelDrawer.tsx


67. ui/src/app.tsx ✨ Enhancement +189/-103

App-level internationalization and menu translation support

• Added mapMenuTreeI18n() function to recursively translate menu names and handle icon conversion
• Implemented i18n support for menu items and improved menu tree processing logic
• Reorganized imports alphabetically and improved code formatting throughout
• Enhanced error handling and response interceptor with i18n message keys

ui/src/app.tsx


68. ui/src/pages/Sys/Permission/RoleDrawer.tsx ✨ Enhancement +143/-108

Role drawer internationalization and code formatting

• Added useIntl hook and t() translation function for internationalization
• Replaced all hardcoded Chinese labels, placeholders, and validation messages with i18n keys
• Reorganized imports with consistent formatting and proper line breaks
• Improved code formatting with consistent spacing and JSX structure

ui/src/pages/Sys/Permission/RoleDrawer.tsx


69. README.adoc Additional files +1/-1

...

README.adoc


70. README.md Additional files +1/-1

...

README.md


71. archive/docs/00.二开指南/02.指南/04.Docker安装.md Additional files +0/-1

...

archive/docs/00.二开指南/02.指南/04.Docker安装.md


72. archive/docs/00.二开指南/02.指南/05.Linux常用命令.md Additional files +23/-0

...

archive/docs/00.二开指南/02.指南/05.Linux常用命令.md


73. archive/docs/00.二开指南/02.指南/06.Docker常用命令.md Additional files +15/-0

...

archive/docs/00.二开指南/02.指南/06.Docker常用命令.md


74. doc/db/4.0.0/kcloud_platform.sql Additional files +52/-28

...

doc/db/4.0.0/kcloud_platform.sql


75. doc/db/4.0.0/kcloud_platform_nacos.sql Additional files +15/-15

...

doc/db/4.0.0/kcloud_platform_nacos.sql


76. laokou-common/laokou-common-data-cache/src/test/java/org/laokou/common/data/cache/aspectj/DataCacheAspectjTest.java Additional files +1/-1

...

laokou-common/laokou-common-data-cache/src/test/java/org/laokou/common/data/cache/aspectj/DataCacheAspectjTest.java


77. laokou-service/laokou-admin/laokou-admin-adapter/src/main/java/org/laokou/admin/web/I18nMessagesController.java Additional files +0/-119

...

laokou-service/laokou-admin/laokou-admin-adapter/src/main/java/org/laokou/admin/web/I18nMessagesController.java


78. laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMessage/service/I18nMessagesServiceImpl.java Additional files +0/-99

...

laokou-service/laokou-admin/laokou-admin-app/src/main/java/org/laokou/admin/i18nMessage/service/I18nMessagesServiceImpl.java


79. laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMessage/api/I18nMessagesServiceI.java Additional files +0/-80

...

laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMessage/api/I18nMessagesServiceI.java


80. laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMessage/convertor/I18nMessageConvertor.java Additional files +0/-49

...

laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMessage/convertor/I18nMessageConvertor.java


81. laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMessage/gatewayimpl/I18nMessageGatewayImpl.java Additional files +0/-58

...

laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMessage/gatewayimpl/I18nMessageGatewayImpl.java


82. laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/menu/MenuMapper.xml Additional files +11/-9

...

laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/menu/MenuMapper.xml


83. laokou-service/laokou-admin/laokou-admin-start/src/main/resources/admin-flow.json Additional files +5/-5

...

laokou-service/laokou-admin/laokou-admin-start/src/main/resources/admin-flow.json


84. ui/.eslintrc.js Additional files +1/-1

...

ui/.eslintrc.js


85. ui/.lintstagedrc Additional files +10/-15

...

ui/.lintstagedrc


86. ui/.prettierrc Additional files +9/-6

...

ui/.prettierrc


87. ui/.stylelintrc.js Additional files +1/-1

...

ui/.stylelintrc.js


88. ui/config/config.ts Additional files +3/-3

...

ui/config/config.ts


89. ui/pnpm-lock.yaml Additional files +8342/-3487

...

ui/pnpm-lock.yaml


90. ui/src/access.ts Additional files +138/-60

...

ui/src/access.ts


91. ui/src/loading.tsx Additional files +11/-5

...

ui/src/loading.tsx


92. ui/src/locales/en-US.ts Additional files +349/-5

...

ui/src/locales/en-US.ts


93. ui/src/locales/zh-CN.ts Additional files +347/-3

...

ui/src/locales/zh-CN.ts


94. ui/src/pages/Home/DeviceMessage.tsx Additional files +40/-35

...

ui/src/pages/Home/DeviceMessage.tsx


95. ui/src/pages/Home/index.tsx Additional files +102/-51

...

ui/src/pages/Home/index.tsx


96. ui/src/pages/IoT/Device/DeviceDrawer.tsx Additional files +1/-3

...

ui/src/pages/IoT/Device/DeviceDrawer.tsx


97. ui/src/pages/IoT/Device/ProductCategoryDrawer.tsx Additional files +95/-51

...

ui/src/pages/IoT/Device/ProductCategoryDrawer.tsx


98. ui/src/pages/IoT/Device/ProductDrawer.tsx Additional files +1/-3

...

ui/src/pages/IoT/Device/ProductDrawer.tsx


99. ui/src/pages/IoT/Device/index.tsx Additional files +10/-7

...

ui/src/pages/IoT/Device/index.tsx


100. ui/src/pages/IoT/Device/product.tsx Additional files +1/-3

...

ui/src/pages/IoT/Device/product.tsx


101. ui/src/pages/IoT/Device/productCategory.tsx Additional files +204/-138

...

ui/src/pages/IoT/Device/productCategory.tsx


102. ui/src/pages/Sys/Config/generator.tsx Additional files +32/-26

...

ui/src/pages/Sys/Config/generator.tsx


103. ui/src/pages/Sys/Log/NoticeDrawer.tsx Additional files +58/-20

...

ui/src/pages/Sys/Log/NoticeDrawer.tsx


104. ui/src/pages/Sys/Log/OperateDrawer.tsx Additional files +138/-45

...

ui/src/pages/Sys/Log/OperateDrawer.tsx


105. ui/src/pages/Sys/Log/login.tsx Additional files +157/-114

...

ui/src/pages/Sys/Log/login.tsx


106. ui/src/pages/Sys/Log/notice.tsx Additional files +150/-107

...

ui/src/pages/Sys/Log/notice.tsx


107. ui/src/pages/Sys/Log/operate.tsx Additional files +177/-120

...

ui/src/pages/Sys/Log/operate.tsx


108. ui/src/pages/Sys/Oss/config.tsx Additional files +58/-46

...

ui/src/pages/Sys/Oss/config.tsx


109. ui/src/pages/Sys/Oss/log.tsx Additional files +46/-39

...

ui/src/...

@qodo-code-review
Copy link

qodo-code-review bot commented Mar 7, 2026

Code Review by Qodo

🐞 Bugs (3) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. i18n table mismatch 🐞 Bug ✓ Correctness
Description
Init SQL creates sys_i18n_menu(code, menu) but i18nMenu MyBatis still queries sys_i18n_message and
maps zhMessage/enMessage, causing runtime failures (table/column not found) and a broken i18n-menu
feature.
Code

laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/i18nMenu/I18nMenuMapper.xml[R23-27]

	<select id="selectObjectPage"
-			resultType="org.laokou.admin.i18nMessage.gatewayimpl.database.dataobject.I18nMessageDO">
+			resultType="org.laokou.admin.i18nMenu.gatewayimpl.database.dataobject.I18nMenuDO">
		SELECT *
		from sys_i18n_message
		where del_flag = 0
Evidence
The DB init script now defines only sys_i18n_menu with columns (code, menu). However, the i18nMenu
persistence layer still selects from sys_i18n_message and the mapped DO expects zh/en message
columns, which do not exist in sys_i18n_menu. This mismatch will fail at runtime when loading/paging
i18n menus and is inconsistent with the new menu join that relies on sys_i18n_menu.

doc/db/4.0.0/kcloud_platform.sql[182-197]
laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/i18nMenu/I18nMenuMapper.xml[23-28]
laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/gatewayimpl/database/dataobject/I18nMenuDO.java[29-47]
laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/menu/MenuMapper.xml[81-90]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The PR changes DB init scripts and menu queries to rely on `sys_i18n_menu(code, menu)`, but the i18nMenu CRUD/paging layer still targets `sys_i18n_message` and expects `zhMessage/enMessage` columns. This will break i18nMenu endpoints at runtime.

### Issue Context
- `doc/db/4.0.0/kcloud_platform.sql` defines `sys_i18n_menu(code, menu)`.
- MyBatis mapper and DO still point to `sys_i18n_message` and `zhMessage/enMessage`.

### Fix Focus Areas
- laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/i18nMenu/I18nMenuMapper.xml[23-42]
- laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/gatewayimpl/database/dataobject/I18nMenuDO.java[29-47]
- laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/clientobject/I18nMenuCO.java[29-50]
- laokou-service/laokou-admin/laokou-admin-domain/src/main/java/org/laokou/admin/i18nMenu/model/I18nMenuE.java[28-49]
- doc/db/4.0.0/kcloud_platform.sql[182-218]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. 200ms eviction stall 🐞 Bug ➹ Performance
Description
OperateType.DEL now adds a fixed 200ms park after cache eviction; because DataCacheAspectj executes
synchronously around annotated endpoints, every DEL cache operation adds hard latency to normal
write requests.
Code

laokou-common/laokou-common-data-cache/src/main/java/org/laokou/common/data/cache/aspectj/OperateType.java[R72-74]

+				getCache(cacheManager, name).evict(key);
+				LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(200));
				return point.proceed();
Evidence
OperateType.DEL unconditionally blocks the current thread for 200ms. DataCacheAspectj invokes
OperateType.execute in an @Around advice, so the delay is on the caller thread (typically the
request thread). Multiple controllers use @DataCache with OperateType.DEL (example: modify menu), so
this introduces a pervasive latency regression.

laokou-common/laokou-common-data-cache/src/main/java/org/laokou/common/data/cache/aspectj/OperateType.java[68-75]
laokou-common/laokou-common-data-cache/src/main/java/org/laokou/common/data/cache/aspectj/DataCacheAspectj.java[47-53]
laokou-service/laokou-admin/laokou-admin-adapter/src/main/java/org/laokou/admin/web/MenusController.java[79-86]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`OperateType.DEL` introduces a fixed 200ms `parkNanos` delay after eviction. This runs inside an `@Around` advice, adding 200ms latency to every `@DataCache(... operateType = DEL)` request.

### Issue Context
`DataCacheAspectj` is synchronous and executes on the calling thread.

### Fix Focus Areas
- laokou-common/laokou-common-data-cache/src/main/java/org/laokou/common/data/cache/aspectj/OperateType.java[68-84]
- laokou-common/laokou-common-data-cache/src/main/java/org/laokou/common/data/cache/aspectj/DataCacheAspectj.java[47-53]
- laokou-service/laokou-admin/laokou-admin-adapter/src/main/java/org/laokou/admin/web/MenusController.java[79-86]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Menu join drops menus 🐞 Bug ✓ Correctness
Description
Menu list queries now inner-join sys_i18n_menu on menu name without filtering tenant_id/del_flag;
missing or duplicate i18n rows can hide menus or produce duplicate menu rows in results.
Code

laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/menu/MenuMapper.xml[R82-90]

+    select m.id,
+           im.code as "name",
+           m.pid,
+           m."path",
+           m.icon
+    from sys_menu m
+    join sys_i18n_menu im on m."name" = im.menu
+    where m."type" = 0 and m.status = 0 and m.del_flag = 0 and m.tenant_id = 0
+    order by m."sort" desc
Evidence
The new SQL uses an inner join to sys_i18n_menu; any menu lacking a mapping row is excluded.
Additionally, sys_i18n_menu has tenant_id and del_flag columns but the join does not constrain them,
so cross-tenant or soft-deleted mappings can affect results. The init SQL adds only a non-unique
index (not a UNIQUE constraint), so multiple i18n rows for the same menu can exist and multiply rows
in selectAllMenuList (which lacks DISTINCT).

laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/menu/MenuMapper.xml[81-90]
doc/db/4.0.0/kcloud_platform.sql[191-196]
doc/db/4.0.0/kcloud_platform.sql[211-214]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
Menu queries now require a matching `sys_i18n_menu` row via INNER JOIN and do not filter `im.del_flag` or `im.tenant_id`. This can hide menus when mappings are missing and can create duplicates when multiple mappings exist.

### Issue Context
`sys_i18n_menu` is multi-tenant/soft-delete capable (tenant_id, del_flag), but the join doesn’t apply those constraints. The init SQL adds a non-unique index only.

### Fix Focus Areas
- laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/menu/MenuMapper.xml[81-106]
- doc/db/4.0.0/kcloud_platform.sql[184-218]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@sonarqubecloud
Copy link

sonarqubecloud bot commented Mar 7, 2026

Comment on lines 23 to 27
<select id="selectObjectPage"
resultType="org.laokou.admin.i18nMessage.gatewayimpl.database.dataobject.I18nMessageDO">
resultType="org.laokou.admin.i18nMenu.gatewayimpl.database.dataobject.I18nMenuDO">
SELECT *
from sys_i18n_message
where del_flag = 0

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. I18n table mismatch 🐞 Bug ✓ Correctness

Init SQL creates sys_i18n_menu(code, menu) but i18nMenu MyBatis still queries sys_i18n_message and
maps zhMessage/enMessage, causing runtime failures (table/column not found) and a broken i18n-menu
feature.
Agent Prompt
### Issue description
The PR changes DB init scripts and menu queries to rely on `sys_i18n_menu(code, menu)`, but the i18nMenu CRUD/paging layer still targets `sys_i18n_message` and expects `zhMessage/enMessage` columns. This will break i18nMenu endpoints at runtime.

### Issue Context
- `doc/db/4.0.0/kcloud_platform.sql` defines `sys_i18n_menu(code, menu)`.
- MyBatis mapper and DO still point to `sys_i18n_message` and `zhMessage/enMessage`.

### Fix Focus Areas
- laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/i18nMenu/I18nMenuMapper.xml[23-42]
- laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/java/org/laokou/admin/i18nMenu/gatewayimpl/database/dataobject/I18nMenuDO.java[29-47]
- laokou-service/laokou-admin/laokou-admin-client/src/main/java/org/laokou/admin/i18nMenu/dto/clientobject/I18nMenuCO.java[29-50]
- laokou-service/laokou-admin/laokou-admin-domain/src/main/java/org/laokou/admin/i18nMenu/model/I18nMenuE.java[28-49]
- doc/db/4.0.0/kcloud_platform.sql[182-218]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +72 to 74
getCache(cacheManager, name).evict(key);
LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(200));
return point.proceed();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

2. 200ms eviction stall 🐞 Bug ➹ Performance

OperateType.DEL now adds a fixed 200ms park after cache eviction; because DataCacheAspectj executes
synchronously around annotated endpoints, every DEL cache operation adds hard latency to normal
write requests.
Agent Prompt
### Issue description
`OperateType.DEL` introduces a fixed 200ms `parkNanos` delay after eviction. This runs inside an `@Around` advice, adding 200ms latency to every `@DataCache(... operateType = DEL)` request.

### Issue Context
`DataCacheAspectj` is synchronous and executes on the calling thread.

### Fix Focus Areas
- laokou-common/laokou-common-data-cache/src/main/java/org/laokou/common/data/cache/aspectj/OperateType.java[68-84]
- laokou-common/laokou-common-data-cache/src/main/java/org/laokou/common/data/cache/aspectj/DataCacheAspectj.java[47-53]
- laokou-service/laokou-admin/laokou-admin-adapter/src/main/java/org/laokou/admin/web/MenusController.java[79-86]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +82 to +90
select m.id,
im.code as "name",
m.pid,
m."path",
m.icon
from sys_menu m
join sys_i18n_menu im on m."name" = im.menu
where m."type" = 0 and m.status = 0 and m.del_flag = 0 and m.tenant_id = 0
order by m."sort" desc

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

3. Menu join drops menus 🐞 Bug ✓ Correctness

Menu list queries now inner-join sys_i18n_menu on menu name without filtering tenant_id/del_flag;
missing or duplicate i18n rows can hide menus or produce duplicate menu rows in results.
Agent Prompt
### Issue description
Menu queries now require a matching `sys_i18n_menu` row via INNER JOIN and do not filter `im.del_flag` or `im.tenant_id`. This can hide menus when mappings are missing and can create duplicates when multiple mappings exist.

### Issue Context
`sys_i18n_menu` is multi-tenant/soft-delete capable (tenant_id, del_flag), but the join doesn’t apply those constraints. The init SQL adds a non-unique index only.

### Fix Focus Areas
- laokou-service/laokou-admin/laokou-admin-infrastructure/src/main/resources/mapper/menu/MenuMapper.xml[81-106]
- doc/db/4.0.0/kcloud_platform.sql[184-218]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@codecov
Copy link

codecov bot commented Mar 7, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 58.32%. Comparing base (3578ae7) to head (ff87706).
⚠️ Report is 14 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff            @@
##             master    #5823   +/-   ##
=========================================
  Coverage     58.31%   58.32%           
  Complexity     1144     1144           
=========================================
  Files           270      270           
  Lines          5357     5358    +1     
  Branches        339      339           
=========================================
+ Hits           3124     3125    +1     
  Misses         2057     2057           
  Partials        176      176           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant