浏览代码

Merge branch 'dev-yhq'

tsurumure 2 月之前
父节点
当前提交
5dac5fa78f

+ 33 - 30
db/sys_user_role_menu.sql

@@ -24,15 +24,6 @@ CREATE TABLE `sys_user_role_menu` (
 INSERT INTO sys_user_role_menu(id, parent_id, menu_name, menu_name_en, type, path, component, meta, icon, permission_id, sort) VALUES
     (1, -1, '创意中心', 'Idea Center', 1, '/', '/src/views/home/ideaCenter.vue', '{}', 'House', '2', 999),
 
-#     (-1, '商城管理', 'B2c', 1, '/b2c/good', '', '{}', 'Goods', '11', 2),
-#     (2, '商品管理', 'Goods', 1, '/b2c/good/b2cGood', '/src/views/b2c/good/b2cGood.vue', '{}', null, '11.1', 3),
-#     (2, '商品详情', 'Goods Detail', 2, '/b2c/good/b2cGoodDetail', '/src/views/b2c/good/b2cGoodDetail.vue', '{"isBack":true,"isHide":true}', null, '11.1.1', 3),
-#     (2, '商品分类', 'Goods Categories', 1, '/b2c/good/b2cGoodCategory', '/src/views/b2c/good/b2cGoodCategory.vue', '{}', null, '11.2', 4),
-#     (2, '商品分类详情', 'Goods Categories Detail', 2, '/b2c/good/b2cGoodCategoryDetail', '/src/views/b2c/good/b2cGoodCategoryDetail.vue', '{"isBack":true,"isHide":true}', null, '11.2.1', 4),
-#     (2, '商品品牌', 'Goods Brands', 1, '/b2c/good/b2cGoodBrand', '/src/views/b2c/good/b2cGoodBrand.vue', '{}', null, '11.3', 5),
-#     (2, '商品品牌详情', 'Goods Brands Detail', 2, '/b2c/good/b2cGoodBrandDetail', '/src/views/b2c/good/b2cGoodBrandDetail.vue', '{"isBack":true,"isHide":true}', null, '11.3.1', 5),
-#     (2, '商品单位', 'Goods Units', 1, '/b2c/good/b2cGoodUnit', '/src/views/b2c/good/b2cGoodUnit.vue', '{}', null, '11.4', 6),
-#     (2, '商品单位详情', 'Goods Units Detail', 2, '/b2c/good/b2cGoodUnitDetail', '/src/views/b2c/good/b2cGoodUnitDetail.vue', '{"isBack":true,"isHide":true}', null, '11.4.1', 6),
 #
 #     (2, '订单管理', 'Orders', 1, '/b2c/order/b2cOrder', '/src/views/b2c/order/b2cOrder.vue', '{}', null, null, 4),
 #     (2, '订单详情', 'Orders Detail', 2, '/b2c/order/b2cOrderDetail', '/src/views/b2c/order/b2cOrderDetail.vue', '{"isBack":true,"isHide":true}', null, null, 4),
@@ -63,25 +54,37 @@ INSERT INTO sys_user_role_menu(id, parent_id, menu_name, menu_name_en, type, pat
 #     (8, '我的草稿', 'My Draft', 1, '/account/myDraft', '', '{}', null, '21.3', 11),
 
     (30, -1, '内容管理', 'CMS', 1, '/cms', '', '{}', 'Document', '10', 5),
-    (31, 30, '导航管理', 'Navigation', 1, '/cms/navigation/cmsNavigation', '/src/views/cms/navigation/cmsNavigation.vue', '{}', null, '10.6', 4),
-    (32, 30, '单页管理', 'Pages', 1, '/cms/page/cmsPage', '/src/views/cms/page/cmsPage.vue', '{}', null, '10.4', 5),
-    (33, 30, '资讯管理', 'Articles', 1, '/cms/article/cmsArticle', '/src/views/cms/article/cmsArticle.vue', '{}', null, '10.3', 6),
-    (34, 30, '资讯详情', 'Articles Detail', 2, '/cms/article/cmsArticleDetail', '/src/views/cms/article/cmsArticleDetail.vue', '{"isBack":true,"isHide":true}', null, '10.3.1', 6),
-    (35, 30, '资讯分类管理', 'Articles Categories', 1, '/cms/article/cmsArticleCategory', '/src/views/cms/article/cmsArticleCategory.vue', '{}', null, '10.2', 7),
-    (36, 30, '资讯分类详情', 'Articles Categorie Detail', 2, '/cms/article/cmsArticleCategoryDetail', '/src/views/cms/article/cmsArticleCategoryDetail.vue', '{"isBack":true,"isHide":true}', null, '10.2.1', 7),
-    (37, 30, '幻灯片管理', 'Banners', 1, '/cms/banner/cmsBanner', '/src/views/cms/banner/cmsBanner.vue', '{}', null, '10.1', 8),
-    (38, 30, '幻灯片详情', 'Banners Detail', 2, '/cms/banner/cmsBannerDetail', '/src/views/cms/banner/cmsBannerDetail.vue', '{"isBack":true,"isHide":true}', null, '10.1.1', 8),
-    (39, 30, '站点信息', 'SiteInfo', 1, '/cms/site/cmsSiteInfo', '/src/views/cms/site/cmsSiteInfo.vue', '{}', null, '10.5', 9),
-
-    (12, -1, '系统管理', 'Systems', 1, '/system', '', '{}', 'Setting', '3', 12),
-    (13, 12, '用户管理', 'Users', 1, '/system/sysUserList', '/src/views/system/sysUser/sysUserList.vue', '{}', null, '3.2', 12),
-    (14, 12, '用户详情', 'Users Detail', 2, '/system/sysUserDetail', '/src/views/system/sysUser/sysUserDetail.vue', '{"isBack":true,"isHide":true}', null, '3.2.1', 12),
-    (15, 12, '角色管理', 'Users Roles', 1, '/system/sysUserRole', '/src/views/system/sysUserRole/sysUserRoleList.vue', '{}', null, '4.1', 12),
-
-    (16, 12, '文件管理', 'File', 1, '/system/sysFileList', '/src/views/system/sysFile/sysFileList.vue', '{}', null, '1.1', 12),
-    (17, 12, '配置管理', 'Common', 1, '/system/sysCommonList', '/src/views/system/sysCommon/sysCommonList.vue', '{}', null, '6.1', 12),
-
-    (18, 12, '角色详情', 'Users Role Detail', 2, '/system/sysUserRoleDetail', '/src/views/system/sysUserRole/sysUserRoleDetail.vue', '{"isBack":true,"isHide":true}', null, '4.1.1', 12),
-    (19, 12, '菜单管理', 'Menus', 1, '/system/sysUserRoleMenu', '/src/views/system/sysUserRoleMenu/sysUserRoleMenuDetail.vue', '{}', null, '4.3', 12),
-    (20, 12, '日志管理', 'Logs', 1, '/system/sysLogList', '/src/views/system/sysLog/sysLogList.vue', '{}', null, '5.1', 12)
+    (31, 30, '导航管理', 'Navigation', 1, '/cms/navigation/cmsNavigation', '/src/views/cms/navigation/cmsNavigation.vue', '{}', null, '10.6', 20),
+    (32, 30, '单页管理', 'Pages', 1, '/cms/page/cmsPage', '/src/views/cms/page/cmsPage.vue', '{}', null, '10.4', 19),
+    (33, 30, '资讯管理', 'Articles', 1, '/cms/article/cmsArticle', '/src/views/cms/article/cmsArticle.vue', '{}', null, '10.3', 18),
+    (34, 30, '资讯详情', 'Articles Detail', 2, '/cms/article/cmsArticleDetail', '/src/views/cms/article/cmsArticleDetail.vue', '{"isBack":true,"isHide":true}', null, '10.3.1', 17),
+    (35, 30, '资讯分类管理', 'Articles Categories', 1, '/cms/article/cmsArticleCategory', '/src/views/cms/article/cmsArticleCategory.vue', '{}', null, '10.2', 16),
+    (36, 30, '资讯分类详情', 'Articles Categorie Detail', 2, '/cms/article/cmsArticleCategoryDetail', '/src/views/cms/article/cmsArticleCategoryDetail.vue', '{"isBack":true,"isHide":true}', null, '10.2.1', 15),
+    (37, 30, '幻灯片管理', 'Banners', 1, '/cms/banner/cmsBanner', '/src/views/cms/banner/cmsBanner.vue', '{}', null, '10.1', 14),
+    (38, 30, '幻灯片详情', 'Banners Detail', 2, '/cms/banner/cmsBannerDetail', '/src/views/cms/banner/cmsBannerDetail.vue', '{"isBack":true,"isHide":true}', null, '10.1.1', 13),
+    (39, 30, '站点信息', 'SiteInfo', 1, '/cms/site/cmsSiteInfo', '/src/views/cms/site/cmsSiteInfo.vue', '{}', null, '10.5', 12),
+
+
+    (50, -1, '商城管理', 'B2c', 1, '/b2c/good', '', '{}', 'Goods', '11', 4),
+    (51, 50, '商品管理', 'Goods', 1, '/b2c/good/b2cGood', '/src/views/b2c/good/b2cGood.vue', '{}', null, '11.1', 20),
+    (52, 50, '商品详情', 'Goods Detail', 2, '/b2c/good/b2cGoodDetail', '/src/views/b2c/good/b2cGoodDetail.vue', '{"isBack":true,"isHide":true}', null, '11.1.1', 19),
+    (53, 50, '商品分类', 'Goods Categories', 1, '/b2c/good/b2cGoodCategory', '/src/views/b2c/good/b2cGoodCategory.vue', '{}', null, '11.2', 18),
+    (54, 50, '商品分类详情', 'Goods Categories Detail', 2, '/b2c/good/b2cGoodCategoryDetail', '/src/views/b2c/good/b2cGoodCategoryDetail.vue', '{"isBack":true,"isHide":true}', null, '11.2.1', 17),
+    (55, 50, '商品品牌', 'Goods Brands', 1, '/b2c/good/b2cGoodBrand', '/src/views/b2c/good/b2cGoodBrand.vue', '{}', null, '11.3', 16),
+    (56, 50, '商品品牌详情', 'Goods Brands Detail', 2, '/b2c/good/b2cGoodBrandDetail', '/src/views/b2c/good/b2cGoodBrandDetail.vue', '{"isBack":true,"isHide":true}', null, '11.3.1', 15),
+    (57, 50, '商品单位', 'Goods Units', 1, '/b2c/good/b2cGoodUnit', '/src/views/b2c/good/b2cGoodUnit.vue', '{}', null, '11.4', 14),
+    (58, 50, '商品单位详情', 'Goods Units Detail', 2, '/b2c/good/b2cGoodUnitDetail', '/src/views/b2c/good/b2cGoodUnitDetail.vue', '{"isBack":true,"isHide":true}', null, '11.4.1', 13),
+
+
+    (1000, -1, '系统管理', 'Systems', 1, '/system', '', '{}', 'Setting', '3', 12),
+    (1001, 1000, '用户管理', 'Users', 1, '/system/sysUserList', '/src/views/system/sysUser/sysUserList.vue', '{}', null, '3.2', 12),
+    (1002, 1000, '用户详情', 'Users Detail', 2, '/system/sysUserDetail', '/src/views/system/sysUser/sysUserDetail.vue', '{"isBack":true,"isHide":true}', null, '3.2.1', 12),
+    (1003, 1000, '角色管理', 'Users Roles', 1, '/system/sysUserRole', '/src/views/system/sysUserRole/sysUserRoleList.vue', '{}', null, '4.1', 12),
+
+    (1004, 1000, '文件管理', 'File', 1, '/system/sysFileList', '/src/views/system/sysFile/sysFileList.vue', '{}', null, '1.1', 12),
+    (1005, 1000, '配置管理', 'Common', 1, '/system/sysCommonList', '/src/views/system/sysCommon/sysCommonList.vue', '{}', null, '6.1', 12),
+
+    (1006, 1000, '角色详情', 'Users Role Detail', 2, '/system/sysUserRoleDetail', '/src/views/system/sysUserRole/sysUserRoleDetail.vue', '{"isBack":true,"isHide":true}', null, '4.1.1', 12),
+    (1007, 1000, '菜单管理', 'Menus', 1, '/system/sysUserRoleMenu', '/src/views/system/sysUserRoleMenu/sysUserRoleMenuDetail.vue', '{}', null, '4.3', 12),
+    (1008, 1000, '日志管理', 'Logs', 1, '/system/sysLogList', '/src/views/system/sysLog/sysLogList.vue', '{}', null, '5.1', 12)
 ;

+ 31 - 31
db/sys_user_role_permission.sql

@@ -140,37 +140,37 @@ INSERT INTO sys_user_role_permission(id, parent_id, permission_name, sort) VALUE
             ('10.6.3', '10.6', '编辑导航', null),
             ('10.6.4', '10.6', '删除导航', null)
 
-    -- ('11', -1, '商品管理', null),
-    --     ('11.1', '11', '商品列表', null),
-    --         ('11.1.1', '11.1', '商品详情', null),
-    --         ('11.1.2', '11.1', '创建商品', null),
-    --         ('11.1.3', '11.1', '编辑商品', null),
-    --         ('11.1.4', '11.1', '删除商品', null),
-    --     ('11.2', '11', '商品分类列表', null),
-    --         ('11.2.1', '11.2', '商品分类详情', null),
-    --         ('11.2.2', '11.2', '创建商品分类', null),
-    --         ('11.2.3', '11.2', '编辑商品分类', null),
-    --         ('11.2.4', '11.2', '删除商品分类', null),
-    --     ('11.3', '11', '商品品牌列表', null),
-    --         ('11.3.1', '11.3', '商品品牌详情', null),
-    --         ('11.3.2', '11.3', '创建商品品牌', null),
-    --         ('11.3.3', '11.3', '编辑商品品牌', null),
-    --         ('11.3.4', '11.3', '删除商品品牌', null),
-    --     ('11.4', '11', '商品单位列表', null),
-    --         ('11.4.1', '11.4', '商品单位详情', null),
-    --         ('11.4.2', '11.4', '创建商品单位', null),
-    --         ('11.4.3', '11.4', '编辑商品单位', null),
-    --         ('11.4.4', '11.4', '删除商品单位', null),
-    --     ('11.5', '11', '商品规格列表', null),
-    --         ('11.5.1', '11.5', '商品规格详情', null),
-    --         ('11.5.2', '11.5', '创建商品规格', null),
-    --         ('11.5.3', '11.5', '编辑商品规格', null),
-    --         ('11.5.4', '11.5', '删除商品规格', null),
-    --     ('11.6', '11', '商品规格SKU列表', null),
-    --         ('11.6.1', '11.6', '商品规格SKU详情', null),
-    --         ('11.6.2', '11.6', '创建商品规格SKU', null),
-    --         ('11.6.3', '11.6', '编辑商品规格SKU', null),
-    --         ('11.6.4', '11.6', '删除商品规格SKU', null),
+    ('11', -1, '商品管理', null),
+        ('11.1', '11', '商品列表', null),
+            ('11.1.1', '11.1', '商品详情', null),
+            ('11.1.2', '11.1', '创建商品', null),
+            ('11.1.3', '11.1', '编辑商品', null),
+            ('11.1.4', '11.1', '删除商品', null),
+        ('11.2', '11', '商品分类列表', null),
+            ('11.2.1', '11.2', '商品分类详情', null),
+            ('11.2.2', '11.2', '创建商品分类', null),
+            ('11.2.3', '11.2', '编辑商品分类', null),
+            ('11.2.4', '11.2', '删除商品分类', null),
+        ('11.3', '11', '商品品牌列表', null),
+            ('11.3.1', '11.3', '商品品牌详情', null),
+            ('11.3.2', '11.3', '创建商品品牌', null),
+            ('11.3.3', '11.3', '编辑商品品牌', null),
+            ('11.3.4', '11.3', '删除商品品牌', null),
+        ('11.4', '11', '商品单位列表', null),
+            ('11.4.1', '11.4', '商品单位详情', null),
+            ('11.4.2', '11.4', '创建商品单位', null),
+            ('11.4.3', '11.4', '编辑商品单位', null),
+            ('11.4.4', '11.4', '删除商品单位', null),
+        ('11.5', '11', '商品规格列表', null),
+            ('11.5.1', '11.5', '商品规格详情', null),
+            ('11.5.2', '11.5', '创建商品规格', null),
+            ('11.5.3', '11.5', '编辑商品规格', null),
+            ('11.5.4', '11.5', '删除商品规格', null),
+        ('11.6', '11', '商品规格SKU列表', null),
+            ('11.6.1', '11.6', '商品规格SKU详情', null),
+            ('11.6.2', '11.6', '创建商品规格SKU', null),
+            ('11.6.3', '11.6', '编辑商品规格SKU', null),
+            ('11.6.4', '11.6', '删除商品规格SKU', null),
 
 
 

+ 15 - 13
db/sys_user_role_permission_relation.sql

@@ -60,19 +60,21 @@ INSERT INTO sys_user_role_permission_relation(role_id, permission_id) VALUES
             (1, '10.5.1'),
         (1, '10.6'),
             (1, '10.6.1'), (1, '10.6.2'), (1, '10.6.3'), (1, '10.6.4'),
-#     (1, '11'),
-#         (1, '11.1'),
-#             (1, '11.1.1'), (1, '11.1.2'), (1, '11.1.3'), (1, '11.1.4'),
-#         (1, '11.2'),
-#             (1, '11.2.1'), (1, '11.2.2'), (1, '11.2.3'), (1, '11.2.4'),
-#         (1, '11.3'),
-#             (1, '11.3.1'), (1, '11.3.2'), (1, '11.3.3'), (1, '11.3.4'),
-#         (1, '11.4'),
-#             (1, '11.4.1'), (1, '11.4.2'), (1, '11.4.3'), (1, '11.4.4'),
-#         (1, '11.5'),
-#             (1, '11.5.1'), (1, '11.5.2'), (1, '11.5.3'), (1, '11.5.4'),
-#         (1, '11.6'),
-#             (1, '11.6.1'), (1, '11.6.2'), (1, '11.6.3'), (1, '11.6.4'),
+
+
+    (1, '11'),
+        (1, '11.1'),
+            (1, '11.1.1'), (1, '11.1.2'), (1, '11.1.3'), (1, '11.1.4'),
+        (1, '11.2'),
+            (1, '11.2.1'), (1, '11.2.2'), (1, '11.2.3'), (1, '11.2.4'),
+        (1, '11.3'),
+            (1, '11.3.1'), (1, '11.3.2'), (1, '11.3.3'), (1, '11.3.4'),
+        (1, '11.4'),
+            (1, '11.4.1'), (1, '11.4.2'), (1, '11.4.3'), (1, '11.4.4'),
+        (1, '11.5'),
+            (1, '11.5.1'), (1, '11.5.2'), (1, '11.5.3'), (1, '11.5.4'),
+        (1, '11.6'),
+            (1, '11.6.1'), (1, '11.6.2'), (1, '11.6.3'), (1, '11.6.4'),
 
 
 #     (1, '20'),

+ 16 - 1
src/main/java/com/backendsys/modules/cms/navigation/controller/NavigationController.java

@@ -3,9 +3,13 @@ package com.backendsys.modules.cms.navigation.controller;
 import com.backendsys.modules.cms.navigation.entity.Navigation;
 import com.backendsys.modules.cms.navigation.service.NavigationService;
 import com.backendsys.modules.common.aspect.SysLog;
+import com.backendsys.modules.common.config.security.annotations.Anonymous;
+import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
 import com.backendsys.modules.common.utils.Result;
+import com.backendsys.utils.LanguageUtil;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
@@ -17,6 +21,9 @@ import org.springframework.web.bind.annotation.*;
 @Tag(name = "导航管理")
 public class NavigationController {
 
+    @Autowired
+    private LanguageUtil languageUtil;
+
     @Autowired
     private NavigationService navigationService;
 
@@ -27,6 +34,14 @@ public class NavigationController {
         return Result.success().put("data", navigationService.selectNavigationList(navigation));
     }
 
+    @Anonymous
+    @Operation(summary = "获取导航列表 (公共)")
+    @GetMapping("/api/app/cms/navigation/getNavigationList")
+    public Result getNavigationPublic() {
+        String lang = languageUtil.getLang();
+        return Result.success().put("data", navigationService.selectNavigationTemplate(lang));
+    }
+
     @Operation(summary = "获取导航详情")
     @PreAuthorize("@sr.hasPermission('10.6.1')")
     @GetMapping("/api/cms/navigation/getNavigationDetail")
@@ -65,5 +80,5 @@ public class NavigationController {
     public Result deleteNavigationBatch(@Validated(Navigation.DeleteBatch.class) @RequestBody Navigation navigation) {
         return Result.success().put("data", navigationService.deleteNavigationBatch(navigation));
     }
-    
+
 }

+ 2 - 2
src/main/java/com/backendsys/modules/cms/siteinfo/controller/SiteInfoController.java

@@ -26,7 +26,7 @@ public class SiteInfoController {
     @PreAuthorize("@sr.hasPermission('10.5')")
     @GetMapping("/api/cms/site/getSiteInfo")
     public Result getSiteInfo() {
-        return Result.success().put("data", siteInfoService.selectSiteInfo(null));
+        return Result.success().put("data", siteInfoService.selectSiteInfo());
     }
 
     @Operation(summary = "编辑站点信息")
@@ -41,7 +41,7 @@ public class SiteInfoController {
     @Operation(summary = "获取站点信息 (公开)")
     @GetMapping("/api/app/cms/site/getSiteInfo")
     public Result getSiteInfoPublic() {
-        return Result.success().put("data", siteInfoService.selectSiteInfo(null));
+        return Result.success().put("data", siteInfoService.selectSiteInfo());
     }
 
 }

+ 1 - 1
src/main/java/com/backendsys/modules/cms/siteinfo/service/SiteInfoService.java

@@ -8,7 +8,7 @@ import java.util.Map;
 public interface SiteInfoService {
 
     // 获取站点信息
-    SiteInfo selectSiteInfo(String lang);
+    SiteInfo selectSiteInfo();
     // 编辑站点信息
     Map<String, Object> updateSiteInfo(SiteInfo siteInfo);
 

+ 6 - 15
src/main/java/com/backendsys/modules/cms/siteinfo/service/impl/SiteInfoServiceImpl.java

@@ -20,7 +20,10 @@ public class SiteInfoServiceImpl implements SiteInfoService {
 
     @Value("${DEFAULT_LANGUAGE}")
     private String DEFAULT_LANGUAGE;
-    
+
+    @Autowired
+    private LanguageUtil languageUtil;
+
     @Autowired
     private HttpRequestUtil httpRequestUtil;
 
@@ -31,21 +34,9 @@ public class SiteInfoServiceImpl implements SiteInfoService {
      * 获取站点信息
      */
     @Override
-    public SiteInfo selectSiteInfo(String paramLang) {
-
-        String lang = DEFAULT_LANGUAGE;
-
-        HttpServletRequest request = httpRequestUtil.getRequest();
-        String headerLang = request.getHeader("Lang");
-
-        // [Header] 从头部信息来的 Lang
-        if (StrUtil.isNotEmpty(headerLang)) lang = headerLang;
-        // [Param] 从参数来的 Lang
-        if (StrUtil.isNotEmpty(paramLang)) lang = paramLang;
-
-        // [入参] 比 [头部] 优先级高
+    public SiteInfo selectSiteInfo() {
         LambdaQueryWrapper<SiteInfo> wrapper = new LambdaQueryWrapper();
-        wrapper.eq(SiteInfo::getLanguage, lang);
+        wrapper.eq(SiteInfo::getLanguage, languageUtil.getLang());
         return siteInfoDao.selectOne(wrapper);
     }
 

+ 2 - 2
src/main/java/com/backendsys/modules/common/aspect/PagesAspect.java

@@ -64,12 +64,12 @@ public class PagesAspect {
 				model.addAttribute("sysLanguage", sysLanguageService.selectLanguageList());
 
 				// [Get] 获取站点信息
-				SiteInfo siteInfo = siteInfoService.selectSiteInfo(lang);
+				SiteInfo siteInfo = siteInfoService.selectSiteInfo();
 				if (siteInfo == null) {
 					request.setAttribute("errorMessage", "站点信息不存在 " + "(" + lang + ")");
 					response.sendRedirect(request.getContextPath() + "/error");
 				}
-				model.addAttribute("siteInfo", siteInfoService.selectSiteInfo(lang));
+				model.addAttribute("siteInfo", siteInfoService.selectSiteInfo());
 
 				// [Get] 获取导航
 				model.addAttribute("navigation", navigationService.selectNavigationTemplate(lang));

+ 31 - 7
src/main/java/com/backendsys/utils/LanguageUtil.java

@@ -1,5 +1,6 @@
 package com.backendsys.utils;
 
+import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
 import com.backendsys.modules.common.config.security.utils.TokenUtil;
 
 import java.util.ArrayList;
@@ -9,6 +10,8 @@ import java.util.Map;
 import java.util.stream.Collectors;
 import java.lang.reflect.Field;
 
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.StringRedisTemplate;
@@ -19,21 +22,42 @@ import org.springframework.stereotype.Component;
 public class LanguageUtil {
 
     @Autowired
-    private TokenUtil tokenUtil;
-    @Autowired
-    private StringRedisTemplate stringRedisTemplate;
+    private HttpRequestUtil httpRequestUtil;
 
     @Value("${DEFAULT_LANGUAGE}")
     private String DEFAULT_LANGUAGE;
 
+    /**
+     * 1.通过 headers: { lang } 获取语言
+     * 2.通过 cookies: { lang } 获取语言
+     */
     public String getLang() {
-        // 配置语言参数
-        String langRedisKey = "lang:" + tokenUtil.getLoginUUID();
-        String lang = stringRedisTemplate.opsForValue().get(langRedisKey);
-        if (lang.isEmpty()) lang = DEFAULT_LANGUAGE;
+        HttpServletRequest request = httpRequestUtil.getRequest();
+        // [Header] 从头部信息来的 Lang
+        String lang = request.getHeader("lang");
+        if (lang == null || lang.isEmpty()) {
+            // [Cookie] 从Cookie信息来的 Lang
+            lang = getCookieValue(request, "lang");
+            if (lang == null || lang.isEmpty()) {
+                lang = DEFAULT_LANGUAGE;
+            }
+        }
         return lang;
     }
 
+    // 通过Cookie名称获取Cookie的值
+    private String getCookieValue(HttpServletRequest request, String name) {
+        Cookie[] cookies = request.getCookies();
+        if (cookies != null) {
+            for (Cookie cookie : cookies) {
+                if (name.equals(cookie.getName())) {
+                    return cookie.getValue();
+                }
+            }
+        }
+        return null;
+    }
+
     /**
      *  完整示例:
         Map<String, Object> fieldPrimary = Collections.singletonMap("article_id", cmsArticleDTO.getArticle_id());