From f298959388c58a4be7ff2bee2dbd33e1d5ec9aa4 Mon Sep 17 00:00:00 2001 From: xjs <1294405880@qq.com> Date: Tue, 15 Mar 2022 15:32:17 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81gateway=E7=BD=91=E5=85=B3=E8=B7=A8?= =?UTF-8?q?=E5=9F=9F=E5=B1=9E=E6=80=A7=E4=BF=AE=E6=94=B9=EF=BC=8Coptions?= =?UTF-8?q?=E9=A2=84=E8=AF=B7=E6=B1=82=E7=BC=93=E5=AD=98=202=E3=80=81?= =?UTF-8?q?=E5=95=86=E5=9F=8E=E5=95=86=E5=93=81=E4=B8=89=E7=BA=A7=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E5=8A=9F=E8=83=BD=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/gateway/config/GatewayConfig.java | 2 + ruoyi-ui/src/api/mall/product/category.js | 58 +++ ruoyi-ui/src/views/mall/product/category.vue | 357 ++++++++++++++++++ .../controller/CategoryController.java | 75 ++-- .../mall/product/entity/CategoryEntity.java | 15 +- .../mall/product/service/CategoryService.java | 13 + .../service/impl/CategoryServiceImpl.java | 61 ++- 7 files changed, 542 insertions(+), 39 deletions(-) create mode 100644 ruoyi-ui/src/api/mall/product/category.js create mode 100644 ruoyi-ui/src/views/mall/product/category.vue diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/GatewayConfig.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/GatewayConfig.java index 71ebe3b8..13b59ff8 100644 --- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/GatewayConfig.java +++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/GatewayConfig.java @@ -31,6 +31,8 @@ public class GatewayConfig config.addAllowedMethod("*"); config.addAllowedOrigin("*"); config.addAllowedHeader("*"); + //缓存options预请求 + config.setMaxAge(60000L); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser()); source.registerCorsConfiguration("/**", config); diff --git a/ruoyi-ui/src/api/mall/product/category.js b/ruoyi-ui/src/api/mall/product/category.js new file mode 100644 index 00000000..1d04eeba --- /dev/null +++ b/ruoyi-ui/src/api/mall/product/category.js @@ -0,0 +1,58 @@ +import request from '@/utils/request' + +// 获取菜单 +export function getMenus() { + return request({ + url: '/mall-product/product/category/list/tree', + method: 'get', + }) +} + + +//删除分类 +export function removeMenus(ids) { + return request({ + url: '/mall-product/product/category/delete', + method: 'delete', + data:ids + }) +} + +//添加三级分类 +export function addCategory(data) { + return request({ + url: '/mall-product/product/category/save', + method: 'post', + data:data + }) +} + +//修改三级分类 +export function editCategory(data) { + return request({ + url: '/mall-product/product/category/update', + method: 'put', + data:data + }) +} + +//获取具体一个三级分类 +export function getCategory(data) { + return request({ + url: `/mall-product/product/category/info/${data.catId}`, + method: 'get', + }) +} + +//批量修改 +export function batchSave(data) { + return request({ + url: '/mall-product/product/category/update/sort', + method: 'put', + data:data + }) +} + + + + diff --git a/ruoyi-ui/src/views/mall/product/category.vue b/ruoyi-ui/src/views/mall/product/category.vue new file mode 100644 index 00000000..28e02d6e --- /dev/null +++ b/ruoyi-ui/src/views/mall/product/category.vue @@ -0,0 +1,357 @@ + + + + diff --git a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/controller/CategoryController.java b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/controller/CategoryController.java index 983a63da..65d86c0a 100644 --- a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/controller/CategoryController.java +++ b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/controller/CategoryController.java @@ -1,20 +1,17 @@ package com.xjs.mall.product.controller; -import java.util.Arrays; -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; import com.xjs.mall.product.entity.CategoryEntity; import com.xjs.mall.product.service.CategoryService; -import com.xjs.utils.PageUtils; import com.xjs.utils.R; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import java.util.Arrays; +import java.util.List; /** @@ -22,41 +19,47 @@ import com.xjs.utils.R; * * @author xiejs * @email 1294405880@qq.com - * @date 2022-03-15 10:16:53 + * @since 2022-03-15 10:16:53 */ @RestController @RequestMapping("product/category") +@Api(tags = "商城-商品-分类") public class CategoryController { @Autowired private CategoryService categoryService; /** - * 列表 + * 列表--树形结构 */ - @RequestMapping("/list") - public R list(@RequestParam Map params){ - PageUtils page = categoryService.queryPage(params); + @GetMapping("/list/tree") + @ApiOperation("树形结构") + public R list() { - return R.ok().put("page", page); + List list = categoryService.listWithTree(); + + return R.ok().put("page", list); } /** * 信息 */ - @RequestMapping("/info/{catId}") - public R info(@PathVariable("catId") Long catId){ - CategoryEntity category = categoryService.getById(catId); + @GetMapping("/info/{catId}") + @ApiOperation("信息") + public R info(@PathVariable("catId") Long catId) { + CategoryEntity category = categoryService.getById(catId); - return R.ok().put("category", category); + return R.ok().put("data", category); } /** * 保存 */ - @RequestMapping("/save") - public R save(@RequestBody CategoryEntity category){ - categoryService.save(category); + @PostMapping("/save") + @ApiOperation("保存") + @Log(title = "商品分类", businessType = BusinessType.INSERT) + public R save(@RequestBody CategoryEntity category) { + categoryService.save(category); return R.ok(); } @@ -64,19 +67,31 @@ public class CategoryController { /** * 修改 */ - @RequestMapping("/update") - public R update(@RequestBody CategoryEntity category){ - categoryService.updateById(category); + @PutMapping("/update") + @ApiOperation("修改") + @Log(title = "商品分类", businessType = BusinessType.UPDATE) + public R update(@RequestBody CategoryEntity category) { + categoryService.updateById(category); return R.ok(); } + @PutMapping("/update/sort") + @Log(title = "商品分类", businessType = BusinessType.UPDATE) + public R updateSort(@RequestBody CategoryEntity[] categoryEntities) { + categoryService.updateBatchById(Arrays.asList(categoryEntities)); + return R.ok(); + } + /** * 删除 */ - @RequestMapping("/delete") - public R delete(@RequestBody Long[] catIds){ - categoryService.removeByIds(Arrays.asList(catIds)); + @DeleteMapping("/delete") + @ApiOperation("删除") + @Log(title = "商品分类", businessType = BusinessType.DELETE) + public R delete(@RequestBody Long[] catIds) { + + categoryService.removeMenuByIds(Arrays.asList(catIds)); return R.ok(); } diff --git a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/entity/CategoryEntity.java b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/entity/CategoryEntity.java index ff60b310..0b392837 100644 --- a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/entity/CategoryEntity.java +++ b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/entity/CategoryEntity.java @@ -1,18 +1,20 @@ package com.xjs.mall.product.entity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; import java.io.Serializable; -import java.util.Date; -import lombok.Data; +import java.util.List; /** * 商品三级分类 * * @author xiejs * @email 1294405880@qq.com - * @date 2022-03-15 10:16:53 + * @since 2022-03-15 10:16:53 */ @Data @TableName("pms_category") @@ -39,6 +41,7 @@ public class CategoryEntity implements Serializable { /** * 是否显示[0-不显示,1显示] */ + @TableLogic(value = "1",delval = "0") private Integer showStatus; /** * 排序 @@ -57,4 +60,10 @@ public class CategoryEntity implements Serializable { */ private Integer productCount; + /** + * 子分类 + */ + @TableField(exist = false) + private List children; + } diff --git a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/CategoryService.java b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/CategoryService.java index df1eb947..d510b391 100644 --- a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/CategoryService.java +++ b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/CategoryService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.xjs.utils.PageUtils; import com.xjs.mall.product.entity.CategoryEntity; +import java.util.List; import java.util.Map; /** @@ -16,5 +17,17 @@ import java.util.Map; public interface CategoryService extends IService { PageUtils queryPage(Map params); + + /** + * 查询树形结构分类 + * @return list + */ + List listWithTree(); + + /** + * 批量删除菜单 + * @param asList ids + */ + void removeMenuByIds(List asList); } diff --git a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/impl/CategoryServiceImpl.java b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/impl/CategoryServiceImpl.java index bde50dbc..8eeb4403 100644 --- a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/impl/CategoryServiceImpl.java +++ b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/impl/CategoryServiceImpl.java @@ -1,29 +1,78 @@ package com.xjs.mall.product.service.impl; -import org.springframework.stereotype.Service; -import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.xjs.utils.PageUtils; -import com.xjs.utils.Query; - import com.xjs.mall.product.dao.CategoryDao; import com.xjs.mall.product.entity.CategoryEntity; import com.xjs.mall.product.service.CategoryService; +import com.xjs.utils.PageUtils; +import com.xjs.utils.Query; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; @Service("categoryService") public class CategoryServiceImpl extends ServiceImpl implements CategoryService { + @Resource + private CategoryDao categoryDao; + @Override public PageUtils queryPage(Map params) { IPage page = this.page( new Query().getPage(params), - new QueryWrapper() + new QueryWrapper<>() ); return new PageUtils(page); } + @Override + public List listWithTree() { + //1、查询所有分类 + List entities = categoryDao.selectList(null); + + //2、找到所有一级分类 + return entities.stream().filter(categoryEntity -> + categoryEntity.getParentCid() == 0) + .peek(menu -> menu.setChildren(this.getChildrens(menu, entities))) + .sorted(Comparator.comparingInt(menu -> (menu.getSort() == null ? 0 : menu.getSort()))) + .collect(Collectors.toList()); + + } + + @Override + public void removeMenuByIds(List asList) { + // todo 检查当前要删除的菜单是否被其他的地方引用 + + categoryDao.deleteBatchIds(asList); + } + + + /** + * 递归获取子菜单 + * + * @param root 根菜单 + * @param all 所有菜单 + * @return list + */ + private List getChildrens(CategoryEntity root, List all) { + + //-----------peek和map区别---------------// + //map有返回值,peek没有返回值 + + return all.stream().filter(categoryEntity -> Objects.equals(categoryEntity.getParentCid(), root.getCatId())) + .peek(categoryEntity -> categoryEntity.setChildren(getChildrens(categoryEntity, all))) + .sorted(Comparator.comparingInt(menu -> (menu.getSort() == null ? 0 : menu.getSort()))) + .collect(Collectors.toList()); + } + + } \ No newline at end of file