当前位置:   article > 正文

vue3-实战-09-管理后台-SKU模块开发_sku组件

sku组件

目录

1-需求原型分析

2-功能模块开发

2.1-列表页面数据获取和展示

2.2-上架下架sku

2.3-更新sku信息

2.4-查看sku详情

2.5-删除sku


1-需求原型分析

 

       列表页面就是el-card里面放置el-table结构,下面有个el-pagination组件显示分页器。点击查看详情的时候有个抽屉效果el-drawer效果。

2-功能模块开发

由于此模块逻辑简单,调用的接口复杂,所以一次性贴出请求的接口和数据类型。
接口定义文件src\api\product\sku\index.ts

  1. //SKU模块接口管理
  2. import request from '@/utils/request'
  3. import type { SkuResponseData, SkuInfoData } from './type'
  4. //枚举地址
  5. enum API {
  6. //获取已有的商品的数据-SKU
  7. SKU_URL = '/admin/product/list/',
  8. //上架
  9. SALE_URL = '/admin/product/onSale/',
  10. //下架的接口
  11. CANCELSALE_URL = '/admin/product/cancelSale/',
  12. //获取商品详情的接口
  13. SKUINFO_URL = '/admin/product/getSkuInfo/',
  14. //删除已有的商品
  15. DELETESKU_URL = '/admin/product/deleteSku/',
  16. }
  17. //获取商品SKU的接口
  18. export const reqSkuList = (page: number, limit: number) =>
  19. request.get<any, SkuResponseData>(API.SKU_URL + `${page}/${limit}`)
  20. //已有商品上架的请求
  21. export const reqSaleSku = (skuId: number) =>
  22. request.get<any, any>(API.SALE_URL + skuId)
  23. //下架的请求
  24. export const reqCancelSale = (skuId: number) =>
  25. request.get<any, any>(API.CANCELSALE_URL + skuId)
  26. //获取商品详情的接口
  27. export const reqSkuInfo = (skuId: number) =>
  28. request.get<any, SkuInfoData>(API.SKUINFO_URL + skuId)
  29. //删除某一个已有的商品
  30. export const reqRemoveSku = (skuId: number) =>
  31. request.delete<any, any>(API.DELETESKU_URL + skuId)

数据类型定义文件:src\api\product\sku\type.ts

  1. export interface ResponseData {
  2. code: number
  3. message: string
  4. ok: boolean
  5. }
  6. //定义SKU对象的ts类型
  7. export interface Attr {
  8. id?: number
  9. attrId: number | string //平台属性的ID
  10. valueId: number | string //属性值的ID
  11. }
  12. export interface saleArr {
  13. id?: number
  14. saleAttrId: number | string //属性ID
  15. saleAttrValueId: number | string //属性值的ID
  16. }
  17. export interface SkuData {
  18. category3Id?: string | number //三级分类的ID
  19. spuId?: string | number //已有的SPU的ID
  20. tmId?: string | number //SPU品牌的ID
  21. skuName?: string //sku名字
  22. price?: string | number //sku价格
  23. weight?: string | number //sku重量
  24. skuDesc?: string //sku的描述
  25. skuAttrValueList?: Attr[]
  26. skuSaleAttrValueList?: saleArr[]
  27. skuDefaultImg?: string //sku图片地址
  28. isSale?: number //控制商品的上架与下架
  29. id?: number
  30. }
  31. //获取SKU接口返回的数据ts类型
  32. export interface SkuResponseData extends ResponseData {
  33. data: {
  34. records: SkuData[]
  35. total: number
  36. size: number
  37. current: number
  38. orders: []
  39. optimizeCountSql: boolean
  40. hitCount: boolean
  41. countId: null
  42. maxLimit: null
  43. searchCount: boolean
  44. pages: number
  45. }
  46. }
  47. //获取SKU商品详情接口的ts类型
  48. export interface SkuInfoData extends ResponseData {
  49. data: SkuData
  50. }

2.1-列表页面数据获取和展示

在组件加载后,我们需要请求服务器获取sku数据,动态渲染在table表格上。我们定义好对象接受接口返回的数据。
 

  1. let pageNo = ref<number>(1);//分页器当前页码
  2. let pageSize = ref<number>(10);//每一页展示几条数据
  3. let total = ref<number>(0);
  4. let skuArr = ref<SkuData[]>([]);
  5. let drawer = ref<boolean>(false);//控制抽屉显示与隐藏的字段
  6. let skuInfo = ref<any>({});

 动态渲染数据:

2.2-上架下架sku

    当用户点击列表操作的上下架按钮时,触发调用上下架接口,然后对应的图标icon也需要发生变化。

  1. //商品的上架与下架的操作
  2. const updateSale = async (row: SkuData) => {
  3. //如果当前商品的isSale==1,说明当前商品是上架的额状态->更新为下架
  4. //否则else情况与上面情况相反
  5. if (row.isSale == 1) { //下架操作
  6. await reqCancelSale((row.id as number));
  7. ElMessage({ type: 'success', message: '下架成功' }); //提示信息
  8. getHasSku(pageNo.value);//发请求获取当前更新完毕的全部已有的SKU
  9. } else {
  10. await reqSaleSku((row.id as number));//下架操作
  11. ElMessage({ type: 'success', message: '上架成功' });//提示信息
  12. getHasSku(pageNo.value);//发请求获取当前更新完毕的全部已有的SKU
  13. }
  14. }

2.3-更新sku信息

目前没有此接口,所以仅仅只是标识一下,实际项目中按照自己实际项目文档开发即可。

2.4-查看sku详情

点击查看sku详情的时候,需要抽屉展示sku信息。

  1. //查看商品详情按钮的回调
  2. const findSku = async (row: SkuData) => {
  3. //抽屉展示出来
  4. drawer.value = true;
  5. //获取已有商品详情数据
  6. let result: SkuInfoData = await reqSkuInfo((row.id as number));
  7. //存储已有的SKU
  8. skuInfo.value = result.data;
  9. }

动态渲染数据,使用栅格组件el-row里面el-col:

主要是看轮播图的展示:

2.5-删除sku

       当用户点击删除sku的时候,需要弹框提示,然后调用服务器接口删除数据,删除完数据,需要判断如果当前页数据还有,留在当前页重新获取当前页数据;否则获取上一页的数据,不管成功还是失败都可以弹框提示用户。

  1. //删除某一个已有的商品
  2. const removeSku = async (id: number) => {
  3. //删除某一个已有商品的情况
  4. let result: any = await reqRemoveSku(id);
  5. if (result.code == 200) {
  6. //提示信息
  7. ElMessage({ type: 'success', message: '删除成功' });
  8. //获取已有全部商品
  9. getHasSku(skuArr.value.length > 1 ? pageNo.value : pageNo.value - 1);
  10. } else {
  11. //删除失败
  12. ElMessage({ type: 'error', message: '系统数据不能删除' });
  13. }
  14. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/540769
推荐阅读
相关标签
  

闽ICP备14008679号