商品發布功能

文章目錄

    • 1.SPU和SKU介紹
        • 1.SPU
        • 2.SKU
        • 3.兩者之間的關系
    • 2.完成商品發布界面
        • 1.組件引入
          • 1.commoditylaunch.vue 引入到 src/views/modules/commodity下
          • 2.multiUpload.vue 引入到 src/components/upload/multiUpload.vue
        • 2.創建菜單
          • 1.創建目錄
          • 2.創建菜單,注意菜單路由要匹配
          • 3.重啟前端項目,查看界面
    • 3.選擇分類聯動顯示品牌
        • 1.首先讓分類以樹形菜單的形式顯示
          • 1.修改getCategorys請求的url為環境變量 + 資源路徑
          • 2.訪問測試
        • 2.思路分析
        • 3.后端 sunliving-commodity模塊
          • 1.CategoryBrandRelationService.java 根據分類id獲取關聯的品牌
          • 2.CategoryBrandRelationServiceImpl.java 實現方法
          • 3.CategoryBrandRelationController.java 編寫接口
          • 4.測試
        • 4.前端 commoditylaunch.vue
          • 1.查看getCatBrands方法,修改請求為環境變量 + 資源路徑的形式
          • 2.測試
    • 4.完成獲取某個分類關聯的所有屬性分組和這些分組關聯的基本屬性,并顯示供發布選擇
        • 1.設計VO類 包含一個屬性組和該屬性組關聯的基本屬性列表
        • 2.后端 sunliving-commodity模塊
          • 1.AttrgroupService.java 根據分類id獲取屬性分組以及分組下的屬性
          • 2.AttrgroupServiceImpl.java 實現方法
        • 3.前端 commoditylaunch.vue
          • 1.將showBaseAttrs方法的請求改成 環境變量 + 資源路徑的形式
          • 2.后端編寫接口
          • 3.postman測試
          • 4.前端測試,發現item.attrs是空的
          • 5.問題分析
          • 6.解決方式:讓每一個屬性組都至少有一個關聯的屬性即可
          • 7.再次訪問測試
        • 4.可以看到目前的功能雖然可以正常實現,但是測試數據不是很好,所以重新設置一下數據
          • 1.分類管理
            • 1.以京東的這個頁面為主
            • 2.設計
          • 2.品牌管理
            • 1.主要是小米和華為
            • 2.小米關聯三個分類
            • 3.華為關聯一個
          • 3.屬性分組
            • 1.參考規格與包裝
            • 2.性價比手機分類下有6個屬性分組
          • 4.基本屬性和銷售屬性
            • 1.參考小米手機購買頁面
            • 2.基本屬性
            • 3.銷售屬性
          • 5.對于這些數據的解釋
            • 1.分類管理
            • 2.品牌管理
            • 3.屬性分組
            • 4.基本屬性
            • 5.銷售屬性
          • 6.表關聯的示意圖
    • 5.完成銷售屬性的顯示
        • 1.前端分析 commoditylaunch.vue
          • 1.修改 commoditylaunch.vue的getShowSaleAttr方法的url為環境變量 + 資源路徑的形式
          • 2.分析url發現前端請求攜帶分類管理的id,要求返回分頁的銷售屬性
        • 2.后端 sunliving-commodity模塊
          • 1.思路分析
          • 2.AttrService.java 銷售屬性分頁查詢,根據分類id
          • 3.AttrServiceImpl.java 實現方法
          • 4.AttrController.java 編寫接口
          • 5.測試
        • 3.前后端聯調
          • 1.前端訪問
          • 2.發現這里應該使用逗號分隔才對,而不是幾個可選項放在一起
            • 1.將這個復選框的分隔方式改成逗號即可
            • 2.基本屬性那里也是要改動一下
          • 3.點擊+自定義還是分號
          • 4.解決方式
            • 1.找到+自定義的輸入框
            • 2.進入這個handleInputConfirm方法,修改分隔符為逗號
    • 6.生成SKU信息(前端完成)
        • 這個SKU信息就是基本屬性+銷售屬性的組合

1.SPU和SKU介紹

1.SPU

image-20240421193217630

2.SKU

image-20240421193228617

3.兩者之間的關系

image-20240421193255238

2.完成商品發布界面

1.組件引入
1.commoditylaunch.vue 引入到 src/views/modules/commodity下

image-20240421193659756

2.multiUpload.vue 引入到 src/components/upload/multiUpload.vue

image-20240421194049258

2.創建菜單
1.創建目錄

image-20240421194536566

2.創建菜單,注意菜單路由要匹配

image-20240421194746379

3.重啟前端項目,查看界面

image-20240421194935197

3.選擇分類聯動顯示品牌

1.首先讓分類以樹形菜單的形式顯示
1.修改getCategorys請求的url為環境變量 + 資源路徑

image-20240422094136998

2.訪問測試

image-20240422094429603

2.思路分析

image-20240422103424874

3.后端 sunliving-commodity模塊
1.CategoryBrandRelationService.java 根據分類id獲取關聯的品牌
    /*** 根據分類id獲取關聯的品牌** @param categoryId* @return*/List<BrandEntity> getBrandsByCategoryId(Long categoryId);
2.CategoryBrandRelationServiceImpl.java 實現方法
    @Overridepublic List<BrandEntity> getBrandsByCategoryId(Long categoryId) {// 1.查詢關聯關系表,獲取到品牌idList<CategoryBrandRelationEntity> categoryBrandRelationEntities = categoryBrandRelationDao.selectList(new QueryWrapper<CategoryBrandRelationEntity>().eq("category_id", categoryId));// 2.得到所有的品牌idif (categoryBrandRelationEntities.size() > 0) {List<Long> brandIds = categoryBrandRelationEntities.stream().map(CategoryBrandRelationEntity::getBrandId).collect(Collectors.toList());// 3.查詢品牌表,獲取到品牌信息List<BrandEntity> brandEntities = brandDao.selectBatchIds(brandIds);return brandEntities;}return Collections.emptyList();}
3.CategoryBrandRelationController.java 編寫接口
    /*** 根據categoryId返回關聯的品牌* @param categoryId* @return*/@RequestMapping("/brands/list")public R relationBrandsList(@RequestParam(value = "catId", required = true) Long categoryId) {return R.ok().put("data", categoryBrandRelationService.getBrandsByCategoryId(categoryId));}
4.測試

image-20240422103745553

4.前端 commoditylaunch.vue
1.查看getCatBrands方法,修改請求為環境變量 + 資源路徑的形式

image-20240422104052815

2.測試

image-20240422104125187

4.完成獲取某個分類關聯的所有屬性分組和這些分組關聯的基本屬性,并顯示供發布選擇

1.設計VO類 包含一個屬性組和該屬性組關聯的基本屬性列表
@Data
public class AttrGroupWithAttrsVo {/*** id*/private Long id;/*** 組名*/private String name;/*** 排序*/private Integer sort;/*** 說明*/private String description;/*** 組圖標*/private String icon;/*** 所屬分類 id*/private Long categoryId;/*** 基本屬性列表*/private List<AttrEntity> attrs;
}
2.后端 sunliving-commodity模塊
1.AttrgroupService.java 根據分類id獲取屬性分組以及分組下的屬性
    /*** 根據分類id獲取屬性分組以及分組下的屬性* @param categoryId* @return*/List<AttrGroupWithAttrsVo> getAttrGroupWithAttrsByCategoryId(Long categoryId);
2.AttrgroupServiceImpl.java 實現方法
    @Overridepublic List<AttrGroupWithAttrsVo> getAttrGroupWithAttrsByCategoryId(Long categoryId) {// 1.根據分類id獲取屬性分組的集合List<AttrgroupEntity> AttrgroupList = attrgroupDao.selectList(new QueryWrapper<AttrgroupEntity>().eq("category_id", categoryId));// 2.使用stream api 遍歷屬性分組的集合,調用attrService的getRelationAttr方法,根據屬性分組id獲取屬性的集合if (AttrgroupList.size() > 0) {return AttrgroupList.stream().map(attrgroup -> {// 創建AttrGroupWithAttrsVo對象AttrGroupWithAttrsVo attrGroupWithAttrsVo = new AttrGroupWithAttrsVo();// 設置屬性attrGroupWithAttrsVo.setId(attrgroup.getId());attrGroupWithAttrsVo.setName(attrgroup.getName());attrGroupWithAttrsVo.setSort(attrgroup.getSort());attrGroupWithAttrsVo.setDescription(attrgroup.getDescription());attrGroupWithAttrsVo.setIcon(attrgroup.getIcon());attrGroupWithAttrsVo.setCategoryId(attrgroup.getCategoryId());attrGroupWithAttrsVo.setAttrs(attrService.getRelationAttr(attrgroup.getId()));// 對每一個屬性分組,設置完一個vo對象之后返回,最后組成一個vo對象的集合并返回return attrGroupWithAttrsVo;}).collect(Collectors.toList());}return Collections.emptyList();}
3.前端 commoditylaunch.vue
1.將showBaseAttrs方法的請求改成 環境變量 + 資源路徑的形式

image-20240422131934216

2.后端編寫接口
    /*** 根據分類id獲取屬性分組以及分組下的屬性* @param catalogId* @return*/@RequestMapping("/{catalogId}/withattr")public R getAttrGroupWithAttrsByCatalogId(@PathVariable("catalogId") Long catalogId) {List<AttrGroupWithAttrsVo> attrGroupWithAttrsByCategoryId = attrgroupService.getAttrGroupWithAttrsByCategoryId(catalogId);return R.ok().put("data", attrGroupWithAttrsByCategoryId);}
3.postman測試

image-20240422132107699

4.前端測試,發現item.attrs是空的

image-20240422132934117

5.問題分析
  • item表示的是每一個VO,而item.attrs表示的是attrs
  • attrs出現空,就說明有的屬性組并沒有關聯的屬性
6.解決方式:讓每一個屬性組都至少有一個關聯的屬性即可
7.再次訪問測試

image-20240422133917119

4.可以看到目前的功能雖然可以正常實現,但是測試數據不是很好,所以重新設置一下數據
1.分類管理
1.以京東的這個頁面為主

image-20240422134656096

2.設計

image-20240422140640431

2.品牌管理
1.主要是小米和華為

image-20240422140129111

2.小米關聯三個分類

image-20240422140838009

3.華為關聯一個

image-20240422140904754

3.屬性分組
1.參考規格與包裝

image-20240422141217105

2.性價比手機分類下有6個屬性分組

image-20240422142234176

4.基本屬性和銷售屬性
1.參考小米手機購買頁面

image-20240422144200954

2.基本屬性

image-20240422145034900

3.銷售屬性

image-20240422145108022

5.對于這些數據的解釋
1.分類管理

有三級分類

2.品牌管理

一個分類可以有多個品牌,一個品牌也可以有多個分類,所以采用關聯表的方式與分類管理進行關聯

3.屬性分組

一個分類可以有多個屬性分組,所以使用外鍵的方式與分類管理進行關聯

4.基本屬性

一個分類可以有多個基本屬性,所以使用外鍵的方式與分類管理進行關聯

一個屬性分組可以有多個基本屬性,為了好擴展還是使用了關聯表的方式與屬性分組進行關聯

這個基本屬性需要放到一個分組里,然后再歸屬于一個分類中

5.銷售屬性

一個分類可以有多個銷售屬性,所以使用外鍵的方式與分類管理進行關聯

這個銷售屬性就相當于在某個分類中不需分組來區分的,通用的屬性

6.表關聯的示意圖

image-20240422154031690

5.完成銷售屬性的顯示

1.前端分析 commoditylaunch.vue
1.修改 commoditylaunch.vue的getShowSaleAttr方法的url為環境變量 + 資源路徑的形式

image-20240422155212834

2.分析url發現前端請求攜帶分類管理的id,要求返回分頁的銷售屬性
2.后端 sunliving-commodity模塊
1.思路分析

image-20240422155906129

2.AttrService.java 銷售屬性分頁查詢,根據分類id
    /*** 銷售屬性分頁查詢,根據分類id* @param params* @param categoryId* @return*/PageUtils queryPageOnSale(Map<String, Object> params, Long categoryId);
3.AttrServiceImpl.java 實現方法
    @Overridepublic PageUtils queryPageOnSale(Map<String, Object> params, Long categoryId) {// 1.獲取關鍵字和分頁參數String key = (String) params.get("key");int currentPage = Integer.parseInt(params.getOrDefault("page", "1").toString());int pageSize = Integer.parseInt(params.getOrDefault("limit", "10").toString());// 2.構建基本查詢條件,根據key進行查詢QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<>();if (StringUtils.isNotBlank(key)) {queryWrapper.and(wrapper ->wrapper.eq("attr_id", key).or().like("attr_name", key));}// 3.如果有categoryId,附加查詢條件,根據categoryId查詢出對應的銷售屬性if (categoryId != null) {queryWrapper.eq("category_id", categoryId);queryWrapper.eq("attr_type", 0);  // 只包括類型為0的屬性}// 4.執行分頁查詢Page<AttrEntity> page = new Page<>(currentPage, pageSize);IPage<AttrEntity> attrPage = attrDao.selectPage(page, queryWrapper);// 5.使用PageUtils封裝返回結果return new PageUtils(attrPage);}
4.AttrController.java 編寫接口
    @RequestMapping("/sale/list/{categoryId}")public R list(@RequestParam Map<String, Object> params, @PathVariable("categoryId") Long categoryId){PageUtils page = attrService.queryPageOnSale(params, categoryId);return R.ok().put("page", page);}
5.測試

image-20240422161349535

image-20240422161505344

3.前后端聯調
1.前端訪問

image-20240422161600353

2.發現這里應該使用逗號分隔才對,而不是幾個可選項放在一起
1.將這個復選框的分隔方式改成逗號即可

image-20240422162924710

2.基本屬性那里也是要改動一下

image-20240422163634065

3.點擊+自定義還是分號

image-20240422163733524

4.解決方式
1.找到+自定義的輸入框

image-20240422163950658

2.進入這個handleInputConfirm方法,修改分隔符為逗號

image-20240422164713981

6.生成SKU信息(前端完成)

這個SKU信息就是基本屬性+銷售屬性的組合

image-20240422170832513

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14589.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14589.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14589.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

go語言中同一for循環體內的多個初始變量和多個自增變量用法示例

在go語言的for循環體中&#xff0c;我們可以同時初始多個變量&#xff0c; 也可以同時多多個變量進行自增/自減操作&#xff0c; 用法如下&#xff1a; for 后面的多個初始化變量使用的是逗號分隔的批量賦值操作&#xff0c;多個變量自增自減使用 加減運算符和逗號分隔 字符…

MySQL之性能剖析和Schema與數據類型優化(一)

性能剖析總結 1.定義性能最有效的方法是響應時間2.如果無法測量就無法有效地優化&#xff0c;所以性能優化工作需要基于高質量、全方位及完整的響應時間測量3.測量的最佳開始點是應用程序&#xff0c;而不是數據庫。即使問題出在底層的數據庫&#xff0c;借助良好的測量也可以…

C++系列-友元

&#x1f308;個人主頁&#xff1a;羽晨同學 &#x1f4ab;個人格言:“成為自己未來的主人~” 我們在之前的文章有提到友元&#xff0c;我們先來看下面的這段包含了友元的代碼&#xff1a; ??#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace…

CLIP論文學習

學習來自B站bryanyzhu

jdk17安裝教程詳細(jdk17安裝超詳細圖文)

2021年9月14日JDK17 發布&#xff0c;其中不僅包含很多新語言功能&#xff0c;而且與舊版 JDK 相比&#xff0c;性能提升也非常明顯。與之前 LTS 版本的 JDK 8 和 JDK 11 相比&#xff0c;JDK17 的性能提升尤為明顯&#xff0c;本文將教你如何安裝 相比于JDK1.8&#xff0c;JD…

虛擬機網絡設置為橋接模式后未顯示網絡

本方法為&#xff0c;VMware配置正確&#xff0c;但在嘗試其他辦法后未能成功解決的人提供一種方法 本機的虛擬機使用NAT模式正常使用 但是使用橋接模式后重啟&#xff0c;未發現虛擬機內網絡設置,詳見下圖&#xff1a; 使用 ifconfig 查看網絡詳情 發現沒有ens33接口 查看硬…

雙非本科,逆襲中大廠的 Java 學習路線

從零基礎入門 Java&#xff0c;到最后秋招上岸&#xff0c;筆者也是花費了不少的經歷&#xff0c;也走了很多彎路。這一篇文章會記錄下真正有用的學習路線。 為什么要強調真正有用&#xff1f;網上的很多所謂從入門到求職&#xff0c;推薦的路線都超級長&#xff0c;零基礎的同…

LeetCode198:打家劫舍

題目描述 你是一個專業的小偷&#xff0c;計劃偷竊沿街的房屋。每間房內都藏有一定的現金&#xff0c;影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統&#xff0c;如果兩間相鄰的房屋在同一晚上被小偷闖入&#xff0c;系統會自動報警。 給定一個代表每個房屋存…

【學習筆記】Windows GDI繪圖(六)圖形路徑GraphicsPath詳解(中)

上一篇【學習筆記】Windows GDI繪圖(五)圖形路徑GraphicsPath詳解(上)介紹了GraphicsPath類的構造函數、屬性和方法AddArc添加橢圓弧、AddBezier添加貝賽爾曲線、AddClosedCurve添加封閉基數樣條曲線、AddCurve添加開放基數樣條曲線、基數樣條如何轉Bezier、AddEllipse添加橢圓…

華為校招機試 - 最久最少使用緩存(20240508)

題目描述 無線通信移動性需要在基站上配置鄰區(本端基站的小區 LocalCell 與周邊鄰基站的小區 NeighborCelI 映射)關系, 為了能夠加速無線算法的計算效率,設計一個鄰區關系緩存表,用于快速的通過本小區 LocalCell 查詢到鄰小區 NeighborCell。 但是緩存表有一定的規格限…

代碼隨想錄-Day07

454. 四數相加 II 給你四個整數數組 nums1、nums2、nums3 和 nums4 &#xff0c;數組長度都是 n &#xff0c;請你計算有多少個元組 (i, j, k, l) 能滿足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 輸入&#x…

系統磁盤高級管理、lvm例子、創建pv、創建VG、創建lv、磁盤擴展

LVM&#xff1a; 邏輯卷&#xff0c;動態調整分區大小&#xff0c;擴展性好 創建pv pvcreate &#xff1a; 將實體 partition 創建成為 PV &#xff1b; pvscan &#xff1a; 搜尋目前系統里面任何具有 PV 的磁盤&#xff1b; pvdisplay &#xff1a; 顯示出目前系統上面…

GNSS仿真測試之三種常用坐標系與轉換

作者介紹 在當今的全球導航衛星系統&#xff08;GNSS&#xff09;技術領域&#xff0c;仿真測試是評估和驗證GNSS接收機性能的關鍵環節&#xff0c;全球導航衛星系統&#xff08;GNSS&#xff09;仿真測試是確保GNSS接收機和導航解決方案在實際部署前能夠正確、可靠地工作的關鍵…

【git】學習記錄: 貯藏功能

Git 貯藏修改是一種臨時存儲工作目錄中已經修改但尚未提交的更改的機制。通過貯藏修改&#xff0c;你可以將當前的工作目錄狀態保存起來&#xff0c;以便你可以在之后的時間點重新應用這些更改&#xff0c;或者在不同的分支間切換時避免沖突。 要使用 Git 貯藏修改&#xff0c…

Linux(centos)常用命令

Linux&#xff08;Centos&#xff09;常用命令使用說明文檔 切換到/home目錄下 使用cd命令切換目錄&#xff0c;例如&#xff1a; cd /home列出/home目錄下的所有文件 使用ls命令列出目錄下的文件和子目錄&#xff0c;例如&#xff1a; ls /home新建目錄dir1 使用mkdir命…

頭歌OpenGauss數據庫-I.復雜查詢第1關:獲取前N名成績

本關任務&#xff1a;編寫函數來實現獲取前N名成績的方法。 提示&#xff1a;前面的實驗沒有提供編寫自定義函數的示例&#xff0c;需要參考OpenGauss數據庫文檔學習自定義函數的使用。 score表內容如下&#xff1a; IdScore13.5223.6534.2343.8554.2363.65 --#請在BEGIN - END…

python windows 開發.exe程序筆記

import win32api import win32gui import win32con import time import tkinter as tk## pyinstaller --onefile t4.py 將python 代碼打包為windows可執行文件 .exe ## airtext 大漠 def clickGoogle():hw win32gui.FindWindow("Chrome_WidgetWin_1", "新標…

解決Redis 緩存雪崩(過期時間不一致) 和 緩存穿透(黑名單)

解決Redis 緩存雪崩&#xff08;過期時間不一致&#xff09; 和 緩存穿透&#xff08;黑名單&#xff09; public Product getdetailById(Integer id) {String key "product." id;// 查詢黑名單中是否有該keyBoolean b hashOperations.hasKey(PROODUCT_DETAIL_B…

算法 Hw7

Hw 7 Graph Algorithm 1 Edge detection2 Reachability3 Bitonic shortest paths 1 Edge detection 由 Cut Property 可知&#xff1a;如果 e 是從某個集合 S 到補集 V?S 的開銷最小的邊&#xff0c;則 e 一定所有最小生成樹中。 由 Cycle Property 可知&#xff1a;如果 e 是…

Gradle常見問題及總結

使用android studio開發項目&#xff0c;難免遇到gradle相關的錯誤&#xff0c;在此總結。 gradle插件與gradle home版本關系錯誤 參考更新 Gradle Gradle下載太慢 Index of /gradle/ (tencent.com) 是國內下載地址,手動下載對應版本即可 緩存不刷新 問題描述 maven發布…