From 811e65dbd5e5da2667dc808d01d7ac50736c1c85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Tue, 21 Jul 2026 00:43:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(cms):=20=E6=B7=BB=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E9=93=BE=E6=8E=A5=E5=9C=B0=E5=9D=80=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在CmsNavigation实体中新增url字段,支持导航外链和自定义地址 - 在CmsNavigationImportParam中增加url导入字段,支持Excel导入 - 在CmsNavigationController中设置url值,实现自定义链接路径优先跳转 --- .../sql/2026-07-21_cms_navigation_add_url.sql | 32 +++++++++++++++++++ .../controller/CmsNavigationController.java | 1 + .../gxwebsoft/cms/entity/CmsNavigation.java | 3 ++ .../cms/param/CmsNavigationImportParam.java | 3 ++ 4 files changed, 39 insertions(+) create mode 100644 docs/sql/2026-07-21_cms_navigation_add_url.sql diff --git a/docs/sql/2026-07-21_cms_navigation_add_url.sql b/docs/sql/2026-07-21_cms_navigation_add_url.sql new file mode 100644 index 0000000..eb7ad77 --- /dev/null +++ b/docs/sql/2026-07-21_cms_navigation_add_url.sql @@ -0,0 +1,32 @@ +-- ============================================================ +-- 新增 cms_navigation.url 字段 +-- 用途: 存储栏目/导航的自定义链接地址, 与 path(路由地址) 相互独立。 +-- 后台保存时写入该字段; 网站端导航优先使用 url, 未设置则回退 path。 +-- 配合代码侧改动: +-- - CmsNavigation 实体新增 url 字段 (MyBatis-Plus 自动映射列 url) +-- - 网站端 getNavLink 优先使用 url; 外链原样返回, 不追加 navId +-- 执行环境: 各租户业务库 (cms_navigation 为全局表) +-- 执行方式: 幂等, 可重复执行 (已存在 url 列则跳过) +-- ============================================================ + +-- 1. 幂等新增 url 列 +SET @db = DATABASE(); +SET @exists = ( + SELECT COUNT(*) + FROM information_schema.columns + WHERE table_schema = @db + AND table_name = 'cms_navigation' + AND column_name = 'url' +); +SET @sql = IF( + @exists = 0, + 'ALTER TABLE cms_navigation ADD COLUMN url VARCHAR(500) DEFAULT NULL COMMENT ''自定义链接地址(优先级高于path)''', + 'SELECT 1 AS skipped' +); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- 2. 验证字段已存在 +-- 预期: url VARCHAR(500) DEFAULT NULL +SHOW COLUMNS FROM cms_navigation LIKE 'url'; diff --git a/src/main/java/com/gxwebsoft/cms/controller/CmsNavigationController.java b/src/main/java/com/gxwebsoft/cms/controller/CmsNavigationController.java index 276f9e0..513e4e2 100644 --- a/src/main/java/com/gxwebsoft/cms/controller/CmsNavigationController.java +++ b/src/main/java/com/gxwebsoft/cms/controller/CmsNavigationController.java @@ -322,6 +322,7 @@ public class CmsNavigationController extends BaseController { nav.setModel(StrUtil.isBlank(param.getModel()) ? "page" : param.getModel()); nav.setCode(param.getCode()); nav.setPath(param.getPath()); + nav.setUrl(param.getUrl()); nav.setComponent(param.getComponent()); nav.setTarget(param.getTarget()); nav.setIcon(param.getIcon()); diff --git a/src/main/java/com/gxwebsoft/cms/entity/CmsNavigation.java b/src/main/java/com/gxwebsoft/cms/entity/CmsNavigation.java index 449cf54..75385aa 100644 --- a/src/main/java/com/gxwebsoft/cms/entity/CmsNavigation.java +++ b/src/main/java/com/gxwebsoft/cms/entity/CmsNavigation.java @@ -53,6 +53,9 @@ public class CmsNavigation implements Serializable { @Schema(description = "菜单路由地址") private String path; + @Schema(description = "自定义链接地址(优先级高于path, 用于导航跳转外链/自定义地址)") + private String url; + @Schema(description = "菜单组件地址, 目录可为空") private String component; diff --git a/src/main/java/com/gxwebsoft/cms/param/CmsNavigationImportParam.java b/src/main/java/com/gxwebsoft/cms/param/CmsNavigationImportParam.java index 7f37bd6..4043565 100644 --- a/src/main/java/com/gxwebsoft/cms/param/CmsNavigationImportParam.java +++ b/src/main/java/com/gxwebsoft/cms/param/CmsNavigationImportParam.java @@ -33,6 +33,9 @@ public class CmsNavigationImportParam implements Serializable { @Excel(name = "菜单路由地址") private String path; + @Excel(name = "自定义链接地址") + private String url; + @Excel(name = "菜单组件地址") private String component;