Browse Source

mall:完善商品分类的 APP 后端接口

YunaiV 2 years ago
parent
commit
efd4942129

+ 3 - 3
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/category/ProductCategoryController.java

@@ -5,7 +5,7 @@ import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCateg
 import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryListReqVO;
 import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryCreateReqVO;
 import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryUpdateReqVO;
-import cn.iocoder.yudao.module.product.convert.category.CategoryConvert;
+import cn.iocoder.yudao.module.product.convert.category.ProductCategoryConvert;
 import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO;
 import cn.iocoder.yudao.module.product.service.category.ProductCategoryService;
 import io.swagger.annotations.Api;
@@ -61,7 +61,7 @@ public class ProductCategoryController {
     @PreAuthorize("@ss.hasPermission('product:category:query')")
     public CommonResult<ProductCategoryRespVO> getProductCategory(@RequestParam("id") Long id) {
         ProductCategoryDO category = categoryService.getProductCategory(id);
-        return success(CategoryConvert.INSTANCE.convert(category));
+        return success(ProductCategoryConvert.INSTANCE.convert(category));
     }
 
     @GetMapping("/list")
@@ -70,7 +70,7 @@ public class ProductCategoryController {
     public CommonResult<List<ProductCategoryRespVO>> getProductCategoryList(@Valid ProductCategoryListReqVO treeListReqVO) {
         List<ProductCategoryDO> list = categoryService.getEnableProductCategoryList(treeListReqVO);
         list.sort(Comparator.comparing(ProductCategoryDO::getSort));
-        return success(CategoryConvert.INSTANCE.convertList(list));
+        return success(ProductCategoryConvert.INSTANCE.convertList(list));
     }
 
 }

+ 4 - 4
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/category/AppCategoryController.java

@@ -1,8 +1,8 @@
 package cn.iocoder.yudao.module.product.controller.app.category;
 
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.module.product.controller.app.category.vo.AppCategoryListRespVO;
-import cn.iocoder.yudao.module.product.convert.category.CategoryConvert;
+import cn.iocoder.yudao.module.product.controller.app.category.vo.AppCategoryRespVO;
+import cn.iocoder.yudao.module.product.convert.category.ProductCategoryConvert;
 import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO;
 import cn.iocoder.yudao.module.product.service.category.ProductCategoryService;
 import io.swagger.annotations.Api;
@@ -29,10 +29,10 @@ public class AppCategoryController {
 
     @GetMapping("/list")
     @ApiOperation("获得商品分类列表")
-    public CommonResult<List<AppCategoryListRespVO>> listByQuery() {
+    public CommonResult<List<AppCategoryRespVO>> getProductCategoryList() {
         List<ProductCategoryDO> list = categoryService.getEnableProductCategoryList();
         list.sort(Comparator.comparing(ProductCategoryDO::getSort));
-        return success(CategoryConvert.INSTANCE.convertList03(list));
+        return success(ProductCategoryConvert.INSTANCE.convertList03(list));
     }
 
 }

+ 2 - 2
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/category/vo/AppCategoryListRespVO.java → yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/category/vo/AppCategoryRespVO.java

@@ -8,8 +8,8 @@ import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
 @Data
-@ApiModel(value = "App - 商品分类 Response VO")
-public class AppCategoryListRespVO {
+@ApiModel(value = "用户 APP - 商品分类 Response VO")
+public class AppCategoryRespVO {
 
     @ApiModelProperty(value = "分类编号", required = true, example = "2")
     private Long id;

+ 4 - 4
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/convert/category/CategoryConvert.java → yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/convert/category/ProductCategoryConvert.java

@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.product.convert.category;
 import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryCreateReqVO;
 import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryRespVO;
 import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryUpdateReqVO;
-import cn.iocoder.yudao.module.product.controller.app.category.vo.AppCategoryListRespVO;
+import cn.iocoder.yudao.module.product.controller.app.category.vo.AppCategoryRespVO;
 import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
@@ -16,9 +16,9 @@ import java.util.List;
  * @author 芋道源码
  */
 @Mapper
-public interface CategoryConvert {
+public interface ProductCategoryConvert {
 
-    CategoryConvert INSTANCE = Mappers.getMapper(CategoryConvert.class);
+    ProductCategoryConvert INSTANCE = Mappers.getMapper(ProductCategoryConvert.class);
 
     ProductCategoryDO convert(ProductCategoryCreateReqVO bean);
 
@@ -28,5 +28,5 @@ public interface CategoryConvert {
 
     List<ProductCategoryRespVO> convertList(List<ProductCategoryDO> list);
 
-    List<AppCategoryListRespVO> convertList03(List<ProductCategoryDO> list);
+    List<AppCategoryRespVO> convertList03(List<ProductCategoryDO> list);
 }

+ 3 - 3
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/category/ProductCategoryDO.java

@@ -9,9 +9,9 @@ import lombok.*;
 /**
  * 商品分类 DO
  *
- * 商品分类一共两
+ * 商品分类一共两
  * 1)一级分类:{@link #parentId} 等于 0
- * 2)二级分类:{@link #parentId} 等于父分类
+ * 2)二级 + 三级分类:{@link #parentId} 不等于 0
  *
  * @author 芋道源码
  */
@@ -46,7 +46,7 @@ public class ProductCategoryDO extends BaseDO {
      * 分类图片
      *
      * 一级分类:推荐 200 x 100 分辨率
-     * 二级分类:推荐 100 x 100 分辨率
+     * 二级 + 三级分类:推荐 100 x 100 分辨率
      */
     private String picUrl;
     /**

+ 3 - 3
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java

@@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryCreateReqVO;
 import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryListReqVO;
 import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryUpdateReqVO;
-import cn.iocoder.yudao.module.product.convert.category.CategoryConvert;
+import cn.iocoder.yudao.module.product.convert.category.ProductCategoryConvert;
 import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO;
 import cn.iocoder.yudao.module.product.dal.mysql.category.ProductCategoryMapper;
 import org.springframework.stereotype.Service;
@@ -37,7 +37,7 @@ public class ProductCategoryServiceImpl implements ProductCategoryService {
         validateParentProductCategory(createReqVO.getParentId());
 
         // 插入
-        ProductCategoryDO category = CategoryConvert.INSTANCE.convert(createReqVO);
+        ProductCategoryDO category = ProductCategoryConvert.INSTANCE.convert(createReqVO);
         productCategoryMapper.insert(category);
         // 返回
         return category.getId();
@@ -51,7 +51,7 @@ public class ProductCategoryServiceImpl implements ProductCategoryService {
         validateParentProductCategory(updateReqVO.getParentId());
 
         // 更新
-        ProductCategoryDO updateObj = CategoryConvert.INSTANCE.convert(updateReqVO);
+        ProductCategoryDO updateObj = ProductCategoryConvert.INSTANCE.convert(updateReqVO);
         productCategoryMapper.updateById(updateObj);
     }
 

+ 21 - 5
yudao-ui-admin/src/views/mall/product/category/index.vue

@@ -61,15 +61,15 @@
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="上级分类" prop="parentId">
-          <el-select v-model="form.parentId" placeholder="请选择上级分类" clearable size="small">
-            <el-option :key="0" label="顶级分类" :value="0"/>
-            <el-option v-for="item in list.filter(v => v.parentId === 0)" :key="item.id" :label="item.name" :value="item.id"/>
-          </el-select>
+          <Treeselect v-model="form.parentId" :options="parentCategoryOptions" :normalizer="normalizer"
+                      :show-count="true"
+                      :defaultExpandLevel="1"
+                      placeholder="上级分类"/>
         </el-form-item>
         <el-form-item label="分类名称" prop="name">
           <el-input v-model="form.name" placeholder="请输入分类名称"/>
         </el-form-item>
-        <el-form-item label="分类图片" prop="bannerUrl">
+        <el-form-item label="分类图片" prop="picUrl">
           <ImageUpload v-model="form.picUrl" :limit="1" :is-show-tip="false" />
           <div v-if="form.parentId === 0" style="font-size: 10px">推荐 200x100 图片分辨率</div>
           <div v-else style="font-size: 10px">推荐 100x100 图片分辨率</div>
@@ -164,6 +164,11 @@ export default {
       getProductCategoryList(params).then(response => {
         this.list = this.handleTree(response.data, "id", "parentId");
         this.loading = false;
+        // 属性下拉框
+        this.parentCategoryOptions = [];
+        const menu = {id: 0, name: '顶级分类', children: []};
+        menu.children = this.handleTree(response.data, "id", "parentId");
+        this.parentCategoryOptions.push(menu);
       });
     },
     /** 取消按钮 */
@@ -202,6 +207,17 @@ export default {
         this.refreshTable = true;
       });
     },
+    /** 转换菜单数据结构 */
+    normalizer(node) {
+      if (node.children && !node.children.length) {
+        delete node.children;
+      }
+      return {
+        id: node.id,
+        label: node.name,
+        children: node.children
+      };
+    },
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();

+ 3 - 3
yudao-ui-app/pages/category/category.vue

@@ -20,7 +20,7 @@
       <!-- 右侧分类内容 -->
       <scroll-view scroll-y="true" class="box-right">
         <view class="category-image">
-          <image :showLoading="true" :src="categoryList[currentIndex].bannerUrl" mode='widthFix' @click="click"></image>
+          <image :showLoading="true" :src="categoryList[currentIndex].picUrl" mode='widthFix' @click="click"></image>
         </view>
 
         <view class="sub-category-box" v-for="(item, index) in categoryList[currentIndex].children" :key="item.id">
@@ -33,8 +33,8 @@
             <u-grid col="3">
               <u-grid-item v-for="(subItem, subIndex) in item.children" :key="subItem.id">
                 <view class="sub-category-item" @click="handleCategory(item, subIndex)">
-                  <u-icon name="photo" :size="80" v-if="subItem.bannerUrl === null"></u-icon>
-                  <image :src="item.bannerUrl" v-if="subItem.bannerUrl != null" mode='widthFix' />
+                  <u-icon name="photo" :size="80" v-if="subItem.picUrl === null"></u-icon>
+                  <image :src="item.picUrl" v-if="subItem.picUrl != null" mode='widthFix' />
                   <text class="sub-category-title">{{ subItem.name }}</text>
                 </view>
               </u-grid-item>