Mure 7 місяців тому
батько
коміт
b1f39a7143

+ 4 - 0
src/main/java/com/backendsys/modules/cms/navigation/service/NavigationService.java

@@ -3,12 +3,16 @@ package com.backendsys.modules.cms.navigation.service;
 import com.backendsys.modules.cms.navigation.entity.Navigation;
 import com.backendsys.utils.response.PageEntity;
 
+import java.util.List;
 import java.util.Map;
 
 public interface NavigationService {
 
     // 获取导航列表
     PageEntity selectNavigationList(Navigation navigation);
+    // 获取导航列表 (模板引擎)
+    List<Navigation> selectNavigationTemplate(String lang);
+
     // 获取导航详情
     Map<String, Object> selectNavigationDetail(Navigation navigation);
     // 创建导航

+ 8 - 0
src/main/java/com/backendsys/modules/cms/navigation/service/impl/NavigationServiceImpl.java

@@ -38,6 +38,14 @@ public class NavigationServiceImpl implements NavigationService {
         List<Navigation> list = navigationDao.selectNavigationList(navigation);
         return new PageInfoResult(list).toEntity();
     }
+    /**
+     * 获取导航列表 (模板引擎)
+     */
+    public List<Navigation> selectNavigationTemplate(String lang) {
+        Navigation navigation = new Navigation();
+        navigation.setLang(lang);
+        return navigationDao.selectNavigationList(navigation);
+    }
 
     /**
      * 获取导航详情

+ 2 - 2
src/main/java/com/backendsys/modules/cms/pageArticle/controller/PageArticleController.java → src/main/java/com/backendsys/modules/cms/template/TemplateArticleController.java

@@ -1,4 +1,4 @@
-package com.backendsys.modules.cms.pageArticle.controller;
+package com.backendsys.modules.cms.template;
 
 import jakarta.servlet.http.HttpServletRequest;
 import org.springframework.stereotype.Controller;
@@ -7,7 +7,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
 @Controller
-public class PageArticleController {
+public class TemplateArticleController {
 
 //    @Autowired
 //    private CmsSiteInfoService cmsSiteInfoService;

+ 4 - 4
src/main/java/com/backendsys/modules/cms/pageIndex/controller/PageIndexController.java → src/main/java/com/backendsys/modules/cms/template/TemplateIndexController.java

@@ -1,15 +1,15 @@
-package com.backendsys.modules.cms.pageIndex.controller;
+package com.backendsys.modules.cms.template;
 
-import com.backendsys.modules.cms.siteinfo.service.SiteInfoService;
 import com.backendsys.modules.common.aspect.Pages;
 import jakarta.servlet.http.HttpServletRequest;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.GetMapping;
 
 @Controller
-public class PageIndexController {
+public class TemplateIndexController {
+
+
 
     @Pages
     @GetMapping({"/"})

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

@@ -1,8 +1,13 @@
 package com.backendsys.modules.common.aspect;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.backendsys.modules.cms.navigation.entity.Navigation;
+import com.backendsys.modules.cms.navigation.service.NavigationService;
 import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
+import com.backendsys.modules.common.utils.CookieUtil;
 import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.springframework.ui.Model;
 import com.backendsys.modules.cms.siteinfo.entity.SiteInfo;
@@ -12,9 +17,12 @@ import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 import org.springframework.web.method.HandlerMethod;
 
 import java.lang.reflect.Method;
+import java.util.List;
 
 /**
  * 视图自动添加:站点信息、导航
@@ -25,9 +33,12 @@ public class PagesAspect {
 
 	@Autowired
 	private HttpRequestUtil httpRequestUtil;
-
 	@Autowired
 	private SiteInfoService siteInfoService;
+	@Autowired
+	private NavigationService navigationService;
+
+
 
 	@Before("@annotation(org.springframework.web.bind.annotation.GetMapping) && @annotation(pages)")
 	public void beforeGet(JoinPoint joinPoint, Pages pages) {
@@ -45,8 +56,19 @@ public class PagesAspect {
 			if (arg instanceof Model) {
 				Model model = (Model) arg;
 
+				// [Cookie] 获得语种 (默认是:中文)
+				String default_lang = "zh";
+				String lang = CookieUtil.getCookie("lang", request);
+				if (StrUtil.isEmpty(lang)) {
+					lang = default_lang;
+					CookieUtil.setCookie("lang", lang);
+				}
+				System.out.println("(PagesAspect) lang = " + lang);
+				
 				// [Get] 获取站点信息
 				model.addAttribute("siteInfo", siteInfoService.selectSiteInfo());
+				// [Get] 获取导航
+				model.addAttribute("navigation", navigationService.selectNavigationTemplate(lang));
 
 				// 其他信息
 				model.addAttribute("timestamp", DateUtil.current());			// 当前时间戳

+ 13 - 2
src/main/java/com/backendsys/modules/common/interceptor/ApiLogInterceptor.java

@@ -7,6 +7,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.web.servlet.HandlerInterceptor;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * [拦截器] API日志
  */
@@ -35,10 +38,18 @@ public class ApiLogInterceptor implements HandlerInterceptor {
         // 请求处理时间
         long consumeTime = System.currentTimeMillis() - startTimeThreadLocal.get();
 
-        System.out.println(
+        // 过滤路径
+        List<String> filterPath = Arrays.asList(
+            "/js/*",
+            "/css/*",
+            "/images/*"
+        );
+        if (filterPath.stream().noneMatch(path -> request.getRequestURI().startsWith(path.replace("*", "")))) {
+            System.out.println(
                 response.getStatus() + " [" + request.getMethod() + "] " +
                 request.getRequestURI() + " (IP: " + httpRequestUtil.getIpAddr() + ") " + userIdLog +
                 "Processing Time: " + consumeTime + " ms"
-        );
+            );
+        }
     }
 }

+ 70 - 0
src/main/java/com/backendsys/modules/common/utils/CookieUtil.java

@@ -0,0 +1,70 @@
+package com.backendsys.modules.common.utils;
+
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.util.StringUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+public class CookieUtil {
+
+    private static HttpServletResponse getCurrentResponse() {
+        return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
+    }
+
+    /**
+     * 获取 Cookie 的值
+     */
+    public static String getCookie(String name, HttpServletRequest request) {
+        String value = null;
+        if (!StringUtils.isEmpty(name)) {
+            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+            Cookie[] cks = request.getCookies();
+            if (null != cks) {
+                for (Cookie cookie : cks) {
+                    if (name.equals(cookie.getName())) {
+                        value = cookie.getValue();
+                    }
+                }
+            }
+        }
+        return value;
+    }
+
+    /**
+     * 设置 Cookie 的值
+     * @param name Cookie 名称
+     * @param value Cookie 值
+     */
+    public static void setCookie(String name, String value) {
+        HttpServletResponse response = getCurrentResponse();
+        if (!StringUtils.isEmpty(name) && value != null) {
+            Cookie cookie = new Cookie(name, value);
+            cookie.setMaxAge(-1);
+            cookie.setPath("/"); // 设置路径为根路径,使 Cookie 在整个域名下有效
+            response.addCookie(cookie);
+        }
+    }
+
+    /**
+     * 删除 cookie
+     */
+    public static void delCookie(String name, HttpServletRequest request) {
+        if (!StringUtils.isEmpty(name)) {
+            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+            Cookie[] cks = request.getCookies();
+            if (null != cks) {
+                for (Cookie cookie : cks) {
+                    if (name.equals(cookie.getName())) {
+                        Cookie c = new Cookie(name, null);
+                        c.setPath("/");
+                        c.setMaxAge(0);
+                        HttpServletResponse res = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
+                        res.addCookie(c);
+                    }
+                }
+            }
+        }
+    }
+}

+ 0 - 2
src/main/java/com/backendsys/modules/system/controller/SysUserIntegralController.java

@@ -26,8 +26,6 @@ import java.util.Map;
 @Tag(name = "系统用户积分")
 public class SysUserIntegralController {
 
-    @Autowired
-    private SecurityUtil securityUtil;
     @Autowired
     private SysUserDao sysUserDao;
     @Autowired

+ 1 - 0
src/main/resources/mapper/cms/navigation/NavigationDao.xml

@@ -73,6 +73,7 @@
         ORDER BY n.sort DESC
     </select>
 
+
     <!-- 查 详情 (带翻译 Array) (二次查询) -->
     <select id="selectNavigationDetail" resultMap="resultMapNavigationDetail">
         SELECT <include refid="includeNavigationDetail" />

+ 11 - 12
src/main/resources/templates/layout/layout-header.html

@@ -2,25 +2,24 @@
 
   header
 
-<!--  <div class="wrapper">-->
+  <div class="wrapper">
 
 <!--    <div class="nav-menu" id="navMenu"></div>-->
 <!--    <div class="nav-right-bar">-->
 <!--      <div th:replace="~{components/language::language}"></div>-->
 <!--    </div>-->
 
-<!--    &lt;!&ndash; 导航 &ndash;&gt;-->
-<!--    <ul class="nav" id="nav">-->
+    <!-- 导航 -->
+    <ul class="nav" id="nav">
 
 <!--      <li class="first-nav-item" th:text="#{sub.sider.title.nav}"></li>-->
 
-<!--      <li th:each="nav, iterStat : ${navigation}"-->
-<!--          th:class="${(iterStat.index + 1 == (navigation.size + 1) / 2) ? 'middle-l' : (iterStat.index == (navigation.size + 1) / 2) ? 'middle-r' : ''}">-->
+      <li th:each="nav, iterStat : ${navigation}">
 <!--        <div class="flex justify-between">-->
-<!--          <a th:href="${nav.link}"-->
-<!--             th:class="${'link underline-hover underline-offset-4 ' + (request_uri == nav.link ? 'active' : '') + (nav.is_blank == 1 ? 'underline' : '')}">-->
-<!--            <span th:text="${nav.navigation_name}"></span>-->
-<!--          </a>-->
+          <a th:href="${nav.link}"
+             th:class="${'link underline-hover underline-offset-4 ' + (request_uri == nav.link ? 'active' : '') + (nav.is_blank == 1 ? 'underline' : '')}">
+            <span th:text="${nav.navigation_name}"></span>
+          </a>
 <!--          <span th:if="${nav.children.size > 0}" class="nav-more" id="navMore">+</span>-->
 <!--        </div>-->
 <!--        &lt;!&ndash; 子级导航 &ndash;&gt;-->
@@ -30,8 +29,8 @@
 <!--          </div>-->
 <!--        </div>-->
 
-<!--      </li>-->
-<!--    </ul>-->
+      </li>
+    </ul>
 <!--    <div class="nav-mask" id="navMask"></div>-->
 <!--    <script>-->
 <!--        // [Click] 点击显示左侧 (或顶部) 导航-->
@@ -59,5 +58,5 @@
 <!--      <img class="header-logo" th:src="@{/images/logo.png}" />-->
 <!--    </a>-->
 
-<!--  </div>-->
+  </div>
 </div>