Selaa lähdekoodia

新增navigation接口

Mure 8 kuukautta sitten
vanhempi
commit
af1aac592e

+ 25 - 0
db/cms_navigation.sql

@@ -0,0 +1,25 @@
+/**
+Source Server Version: 8.0.31
+Source Database: backendsys
+Date: 2023/05/23 17:09:22
+*/
+
+DROP TABLE IF EXISTS `cms_navigation`;
+
+CREATE TABLE `cms_navigation` (
+    PRIMARY KEY (`id`),
+    `id` BIGINT(10) AUTO_INCREMENT COMMENT 'ID',
+    `parent_id` BIGINT(10) NOT NULL DEFAULT '-1' COMMENT '父ID',
+    `sort` BIGINT(10) DEFAULT '1' COMMENT '排序',
+    `is_blank` TINYINT(1) DEFAULT '-1' COMMENT '是否跳转窗口 (-1否, 1是)'
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='导航表';
+
+INSERT INTO cms_navigation(parent_id, sort) VALUES
+    (-1, 6),
+        (1, 1), (1, 2), (1, 3), (1, 4), (1, 5),
+    (-1, 5),
+    (-1, 4),
+    (-1, 3),
+    (-1, 2),
+    (-1, 1)
+;

+ 39 - 0
db/cms_navigation_i18n.sql

@@ -0,0 +1,39 @@
+/**
+Source Server Version: 8.0.31
+Source Database: backendsys
+Date: 2023/05/23 17:09:22
+*/
+
+DROP TABLE IF EXISTS `cms_navigation_i18n`;
+
+CREATE TABLE `cms_navigation_i18n` (
+    PRIMARY KEY (`id`),
+    `id` BIGINT(10) AUTO_INCREMENT COMMENT 'ID',
+    `navigation_id` BIGINT(10) NOT NULL COMMENT '导航ID',
+    `language` VARCHAR(10) NOT NULL COMMENT '语种',
+    `navigation_name` VARCHAR(255) NOT NULL COMMENT '菜单名称',
+    `link` VARCHAR(1000) COMMENT '链接'
+) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='导航翻译表';
+
+INSERT INTO cms_navigation_i18n(navigation_id, language, navigation_name, link) VALUES
+    (1, 'zh', '手表品牌', '/article?category_id=1'),
+        (2, 'zh', '劳力士', '/article?category_id=2'),
+        (3, 'zh', '万国', '/article?category_id=3'),
+        (4, 'zh', '沛纳海', '/article?category_id=4'),
+        (5, 'zh', '爱彼', '/article?category_id=5'),
+    (1, 'en', 'Product', '/article?category_id=1'),
+        (2, 'en', 'Rolex', '/article?category_id=2'),
+        (3, 'en', 'IWC', '/article?category_id=3'),
+        (4, 'en', 'Panerai', '/article?category_id=4'),
+        (5, 'en', 'Audemars Piguet', '/article?category_id=5'),
+    (41, 'zh', '品牌世界', '/page/brand'),
+    (41, 'en', 'Brand', '/page/brand'),
+    (42, 'zh', '新闻资讯', '/article?category_id=41'),
+    (42, 'en', 'New', '/article?category_id=41'),
+    (43, 'zh', '客户服务', '/page/service'),
+    (43, 'en', 'Service', '/page/service'),
+    (44, 'zh', '关于我们', '/page/about'),
+    (44, 'en', 'About', '/page/about'),
+    (45, 'zh', '联系我们', '/page/contact'),
+    (45, 'en', 'Contact', '/page/contact')
+;

+ 7 - 0
db/sys_user_role_module.sql

@@ -134,6 +134,13 @@ INSERT INTO sys_user_role_module(id, parent_id, module_name, sort) VALUES
     ('13', -1, '站点管理', null),
         ('13.1', '13', '站点-编辑', null),
 
+    ('14', -1, '导航菜单', null),
+        ('14.3', '14', '导航-列表', null),
+            ('14.3.1', '14.3', '导航-详情', null),
+            ('14.3.2', '14.3', '导航创建', null),
+            ('14.3.3', '14.3', '导航-编辑', null),
+            ('14.3.4', '14.3', '导航-删除', null),
+
     ('20', -1, '素材管理', null),
         ('20.1', '20', '素材列表', null),
             ('20.1.1', '20.1', '素材中心', null),

+ 3 - 0
db/sys_user_role_module_relation.sql

@@ -64,6 +64,9 @@ INSERT INTO sys_user_role_module_relation(role_id, module_id) VALUES
 #         (1, '12.3'),
     (1, '13'),
         (1, '13.1'),
+    (1, '14'),
+        (1, '14.3'),
+            (1, '14.3.1'), (1, '14.3.2'), (1, '14.3.3'), (1, '14.3.4'),
 
     (1, '20'),
         (1, '20.1'),

+ 0 - 1
src/main/java/com/backendsys/modules/cms/article/service/impl/ArticleServiceImpl.java

@@ -36,7 +36,6 @@ public class ArticleServiceImpl implements ArticleService {
     @Override
     public PageEntity selectArticleList(Article article) {
         PageUtils.startPage();  // 分页
-        System.out.println(article);
         List<Article> list = articleDao.selectArticleList(article);
         return new PageInfoResult(list).toEntity();
     }

+ 55 - 0
src/main/java/com/backendsys/modules/cms/navigation/controller/NavigationController.java

@@ -0,0 +1,55 @@
+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.utils.Result;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Validated
+@RestController
+@Tag(name = "导航管理")
+public class NavigationController {
+
+    @Autowired
+    private NavigationService navigationService;
+
+    @Operation(summary = "获取导航列表")
+    @PreAuthorize("@ss.hasPermi('14.3')")
+    @GetMapping("/api/cms/navigation/getNavigation")
+    public Result getNavigation(@Validated Navigation navigation) {
+        return Result.success().put("data", navigationService.selectNavigationList(navigation));
+    }
+
+//    @PreAuthorize("@ss.hasPermi('14.3.1')")
+//    @GetMapping("/api/cms/navigation/getNavigationDetail")
+//    public Result getNavigationDetail(@Validated(CmsNavigationDTO.Detail.class) CmsNavigationDTO cmsNavigationDTO) {
+//        return Result.success(cmsNavigationService.queryNavigationDetail(cmsNavigationDTO));
+//    }
+//    @PreAuthorize("@ss.hasPermi('14.3.2')")
+//    @PostMapping("/api/cms/navigation/createNavigation")
+//    public Result createNavigation(@Validated(CmsNavigationI18nDTO.Create.class) @RequestBody CmsNavigationI18nDTO cmsNavigationI18nDTO) {
+//        return Result.success(cmsNavigationService.insertNavigationTranslations(cmsNavigationI18nDTO), "创建成功");
+//    }
+//    @PreAuthorize("@ss.hasPermi('14.3.3')")
+//    @PutMapping("/api/cms/navigation/updateNavigation")
+//    public Result updateNavigation(@Validated(CmsNavigationI18nDTO.Update.class) @RequestBody CmsNavigationI18nDTO cmsNavigationI18nDTO) {
+//        return Result.success(cmsNavigationService.updateNavigationTranslations(cmsNavigationI18nDTO), "更新成功");
+//    }
+//    @PreAuthorize("@ss.hasPermi('14.3.4')")
+//    @DeleteMapping("/api/cms/navigation/deleteNavigation")
+//    public Result deleteNavigation(@Validated(CmsNavigationDTO.Delete.class) @RequestBody CmsNavigationDTO cmsNavigationDTO) {
+//        return Result.success(cmsNavigationService.deleteNavigation(cmsNavigationDTO), "删除成功");
+//    }
+//    @PreAuthorize("@ss.hasPermi('14.3.4')")
+//    @DeleteMapping("/api/cms/navigation/deleteNavigationBatch")
+//    public Result deleteNavigationBatch(@Validated(CmsNavigationDTO.Delete.class) @RequestBody CmsNavigationDTO cmsNavigationDTO) {
+//        return Result.success(cmsNavigationService.deleteNavigationBatch(cmsNavigationDTO.getNavigation_ids()), "删除成功");
+//    }
+    
+}

+ 22 - 0
src/main/java/com/backendsys/modules/cms/navigation/dao/NavigationDao.java

@@ -0,0 +1,22 @@
+package com.backendsys.modules.cms.navigation.dao;
+
+import com.backendsys.modules.cms.navigation.entity.Navigation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface NavigationDao extends BaseMapper<Navigation> {
+    List<Navigation> selectNavigationList(Navigation navigation);
+
+//    Map<String, Object> queryNavigationDetail(CmsNavigationDTO cmsNavigationDTO);
+//    Map<String, Object> queryNavigationDetailPublic(CmsNavigationDTO cmsNavigationDTO);
+//    long insertNavigation(CmsNavigationDTO cmsNavigationDTO);
+//    long insertNavigationTranslations(CmsNavigationI18nDTO cmsNavigationI18nDTO);
+//    long updateNavigation(CmsNavigationDTO cmsNavigationDTO);
+//    long updateNavigationTranslations(CmsNavigationI18nDTO cmsNavigationI18nDTO);
+//    long deleteNavigation(CmsNavigationDTO cmsNavigationDTO);
+//    long deleteNavigationBatch(List<Long> ids);
+}

+ 9 - 0
src/main/java/com/backendsys/modules/cms/navigation/dao/NavigationI18nDao.java

@@ -0,0 +1,9 @@
+package com.backendsys.modules.cms.navigation.dao;
+
+import com.backendsys.modules.cms.navigation.entity.NavigationI18n;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface NavigationI18nDao extends BaseMapper<NavigationI18n> {
+}

+ 46 - 0
src/main/java/com/backendsys/modules/cms/navigation/entity/Navigation.java

@@ -0,0 +1,46 @@
+package com.backendsys.modules.cms.navigation.entity;
+
+
+import com.backendsys.entity.validator.RangeArray;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+import org.hibernate.validator.constraints.Range;
+
+import java.util.List;
+
+@Data
+@TableName("cms_navigation")
+public class Navigation {
+
+    public static interface Detail{}
+    public static interface Create{}
+    public static interface Update{}
+    public static interface Delete{}
+
+    @TableField(exist = false)
+    private String lang;
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @TableField("id")
+    @NotNull(message="navigation_id 不能为空", groups = { Detail.class, Update.class, Delete.class })
+    private Long navigation_id;
+
+    @TableField(exist = false)
+    private List<Long> navigation_ids;
+
+    @TableField(exist = false)
+    private String navigation_name;
+
+    private Long parent_id;
+    @Range(min = 1, max = 9999, message = "排序必须在 {min} 到 {max} 之间", groups = { Create.class, Update.class })
+    private Integer sort;
+    @RangeArray(message="是否跳转新窗口取值有误,范围应是(-1禁用, 1启用)", value = {"-1", "1"}, groups = { Create.class, Update.class })
+    private Integer is_blank;
+
+}

+ 25 - 0
src/main/java/com/backendsys/modules/cms/navigation/entity/NavigationI18n.java

@@ -0,0 +1,25 @@
+package com.backendsys.modules.cms.navigation.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+@Data
+@TableName("cms_navigation_i18n")
+public class NavigationI18n {
+
+    public static interface Detail{}
+    public static interface Create{}
+    public static interface Update{}
+    public static interface Delete{}
+
+    @NotEmpty(message="语言不能为空")
+    private String language;
+    @Size(max = 20, message = "菜单名称长度不超过 {max} 字符", groups = { Create.class, Update.class })
+    private String navigation_name;
+    @Size(max = 1000, message = "链接长度不超过 {max} 字符", groups = { Create.class, Update.class })
+    private String link;
+    
+}

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

@@ -0,0 +1,11 @@
+package com.backendsys.modules.cms.navigation.service;
+
+import com.backendsys.modules.cms.navigation.entity.Navigation;
+import com.backendsys.utils.response.PageEntity;
+
+public interface NavigationService {
+
+    // 获取导航列表
+    PageEntity selectNavigationList(Navigation navigation);
+
+}

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

@@ -0,0 +1,29 @@
+package com.backendsys.modules.cms.navigation.service.impl;
+
+import com.backendsys.modules.cms.navigation.dao.NavigationDao;
+import com.backendsys.modules.cms.navigation.entity.Navigation;
+import com.backendsys.modules.cms.navigation.service.NavigationService;
+import com.backendsys.utils.response.PageEntity;
+import com.backendsys.utils.response.PageInfoResult;
+import com.backendsys.utils.v2.PageUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class NavigationServiceImpl implements NavigationService {
+
+    @Autowired
+    private NavigationDao navigationDao;
+
+    /**
+     * 获取导航列表
+     */
+    @Override
+    public PageEntity selectNavigationList(Navigation navigation) {
+        PageUtils.startPage();  // 分页
+        List<Navigation> list = navigationDao.selectNavigationList(navigation);
+        return new PageInfoResult(list).toEntity();
+    }
+}

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

@@ -3,7 +3,7 @@ package com.backendsys.modules.common.aspect;
 import java.lang.annotation.*;
 
 /**
- * 视图自动添加:站点信息、导航栏目
+ * 视图自动添加:站点信息、导航
  */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)

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

@@ -17,7 +17,7 @@ import org.springframework.web.method.HandlerMethod;
 import java.lang.reflect.Method;
 
 /**
- * 视图自动添加:站点信息、导航栏目
+ * 视图自动添加:站点信息、导航
  */
 @Aspect
 @Component

+ 0 - 0
src/main/resources/mapper/cms.article/ArticleDao.xml → src/main/resources/mapper/cms/article/ArticleDao.xml


+ 0 - 0
src/main/resources/mapper/cms.article/ArticleI18nDao.xml → src/main/resources/mapper/cms/article/ArticleI18nDao.xml


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

@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.backendsys.modules.cms.navigation.dao.NavigationDao">
+
+    <sql id="includeNavigation">
+        n.id id,
+        n.id navigation_id,
+        n.parent_id parent_id,
+        nt.navigation_name navigation_name,
+        COALESCE(nt.link, '') link,
+        n.sort sort,
+        n.is_blank is_blank
+    </sql>
+
+    <sql id="includeNavigationDetail">
+        n.id id,
+        n.id navigation_id,
+        n.parent_id parent_id,
+        n.sort sort,
+        n.is_blank is_blank
+    </sql>
+
+    <sql id="includeNavigationTranslation">
+        id, navigation_id, language, navigation_name, link
+    </sql>
+
+    <resultMap id="resultMapNavigation" type="java.util.LinkedHashMap">
+        <id property="id" column="id" jdbcType="BIGINT" />
+        <result property="navigation_id" column="navigation_id" javaType="java.lang.Long"/>
+        <result property="parent_id" column="parent_id" javaType="java.lang.Long"/>
+        <result property="navigation_name" column="navigation_name" />
+        <result property="link" column="link" />
+        <result property="sort" column="sort" javaType="java.lang.Integer"/>
+        <result property="is_blank" column="is_blank" javaType="java.lang.Integer" />
+    </resultMap>
+
+    <resultMap id="resultMapNavigationDetail" type="java.util.LinkedHashMap">
+        <id property="id" column="id" jdbcType="BIGINT" />
+        <result property="navigation_id" column="navigation_id" javaType="java.lang.Long"/>
+        <result property="parent_id" column="parent_id" javaType="java.lang.Long"/>
+        <result property="navigation_name" column="navigation_name" />
+        <result property="link" column="link" />
+        <result property="sort" column="sort" javaType="java.lang.Integer"/>
+        <result property="is_blank" column="is_blank" javaType="java.lang.Integer" />
+        <collection property="translations" javaType="java.util.List"
+            select="queryTranslationsById" column="id">
+            <id property="id" column="id" />
+            <result property="navigation_name" column="navigation_name" />
+            <result property="link" column="link" />
+        </collection>
+    </resultMap>
+
+    <sql id="leftJoinTranslations">
+        LEFT JOIN cms_navigation_i18n nt ON n.id = nt.navigation_id
+    </sql>
+
+    <!-- 查 列表 -->
+    <select id="selectNavigationList" resultMap="resultMapNavigation">
+        SELECT
+        <include refid="includeNavigation" />
+        FROM cms_navigation n
+        <include refid="leftJoinTranslations" />
+        <where>
+            nt.language = #{lang}
+            <if test="navigation_name != null and navigation_name != ''">
+                AND nt.navigation_name LIKE CONCAT('%', #{navigation_name}, '%')
+            </if>
+        </where>
+        ORDER BY n.sort DESC
+    </select>
+
+    <!-- 查 详情 (带翻译 Array) (二次查询) -->
+    <select id="queryNavigationDetail" resultMap="resultMapNavigationDetail">
+        SELECT <include refid="includeNavigationDetail" />
+        FROM cms_navigation n
+        WHERE n.id = #{navigation_id}
+    </select>
+
+    <!-- 查 翻译集合 (子查询) -->
+    <select id="queryTranslationsById" resultType="java.util.LinkedHashMap">
+        SELECT <include refid="includeNavigationTranslation" />
+        FROM cms_navigation_i18n
+        WHERE navigation_id = #{id}
+    </select>
+
+    <!-- 查 详情 (公共) (带翻译 Object) (关联查询) -->
+    <select id="queryNavigationDetailPublic" resultMap="resultMapNavigation">
+        SELECT <include refid="includeNavigation" />
+        FROM cms_navigation n
+        <include refid="leftJoinTranslations" />
+        WHERE n.id = #{navigation_id} AND nt.language = #{lang}
+    </select>
+
+    <!-- 创建 -->
+<!--    <insert id="insertNavigation" parameterType="com.backendsys.modules.cms.navigation.entity."-->
+<!--        useGeneratedKeys="true" keyProperty="navigation_id">-->
+<!--        INSERT INTO cms_navigation (-->
+<!--        <if test="parent_id != null and parent_id != ''">, parent_id</if>-->
+<!--        <if test="sort != null and sort != ''">, sort</if>-->
+<!--        <if test="is_blank != null and is_blank != ''">, is_blank</if>-->
+<!--        )-->
+<!--        VALUES (-->
+<!--        <if test="parent_id != null and parent_id != ''">, #{parent_id}</if>-->
+<!--        <if test="sort != null and sort != ''">, #{sort}</if>-->
+<!--        <if test="is_blank != null and is_blank != ''">, #{is_blank}</if>-->
+<!--        );-->
+<!--    </insert>-->
+    <!-- 创建翻译 -->
+<!--    <insert id="insertNavigationTranslations" parameterType="com.backendcms.entity.Cms.CmsNavigationI18nDTO.TranslationsDTO">-->
+<!--        INSERT INTO cms_navigation_i18n (navigation_id, language, navigation_name, link)-->
+<!--        VALUES-->
+<!--        <foreach collection="translations" item="translation" separator=",">-->
+<!--            (#{translation.navigation_id}, #{translation.language}, #{translation.navigation_name}, #{translation.link})-->
+<!--        </foreach>-->
+<!--    </insert>-->
+
+    <!-- 编辑 -->
+<!--    <update id="updateNavigationTranslations" parameterType="com.backendcms.entity.Cms.CmsNavigationI18nDTO.CmsNavigationI18nDTO"-->
+<!--            useGeneratedKeys="true" keyProperty="navigation_id">-->
+<!--        UPDATE cms_navigation-->
+<!--        SET-->
+<!--        <trim suffixOverrides="," suffix=" ">-->
+<!--            <if test="parent_id != null and parent_id != ''">parent_id = #{parent_id},</if>-->
+<!--            <if test="sort != null and sort != ''">sort = #{sort},</if>-->
+<!--            <if test="is_blank != null and is_blank != ''">is_blank = #{is_blank},</if>-->
+<!--        </trim>-->
+<!--        WHERE id = #{navigation_id};-->
+
+<!--        <foreach collection="translations" item="translation" separator=";">-->
+<!--            UPDATE cms_navigation_i18n-->
+<!--            SET-->
+<!--            <trim suffixOverrides="," suffix=" ">-->
+<!--                navigation_name = #{translation.navigation_name},-->
+<!--                <if test="translation.link != null and translation.link != ''">-->
+<!--                    link = #{translation.link},-->
+<!--                </if>-->
+<!--            </trim>-->
+<!--            WHERE navigation_id = ${navigation_id} AND language = #{translation.language}-->
+<!--        </foreach>-->
+
+<!--    </update>-->
+
+    <!-- 删除 -->
+    <delete id="deleteNavigation" parameterType="java.lang.Long">
+        DELETE FROM cms_navigation WHERE id = #{navigation_id};
+        DELETE FROM cms_navigation_i18n WHERE navigation_id = #{navigation_id};
+    </delete>
+
+    <!-- 删除 (批量) -->
+    <delete id="deleteNavigationBatch" parameterType="java.lang.Long">
+        DELETE FROM cms_navigation WHERE id IN
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>;
+
+        DELETE FROM cms_navigation_i18n WHERE navigation_id IN
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>;
+    </delete>
+
+</mapper>