后台管理系统: spu管理模块

spu管理模块业务

spu 可以理解为类

例如 people类【spu】

sku可以理解为实例

例如:小明 18 男

spu跟sku可以理解为类跟多个实例的关系

spu管理模块静态

 

<template><div><el-card style="margin: 20px 0px"><CategorySelect @getCategoryId="getCategoryId" :show="!show"></CategorySelect></el-card><el-card style="margin: 20px 0px"><!-- 底部这里将来是有三部分进行切换 --><div><!-- 展示spu列表的结构 --><el-button type="primary" icon="el-icon-plus"> 添加spu </el-button><el-table border style="width: 100%;"><el-table-column type="index" label="序号" width="80" align="center"></el-table-column><el-table-column label="SPU名称" width="width" prop="prop"></el-table-column><el-table-column label="SPU描述" width="width" prop="prop"></el-table-column><el-table-column label="操作" width="width" prop="prop"><template slot-scope="{row,$index}"><el-button type="success" icon="el-icon-plus" size="mini"></el-button><el-button type="warning" icon="el-icon-edit" size="mini"></el-button><el-button type="info" icon="el-icon-info" size="mini"></el-button><el-button type="danger" icon="el-icon-delete" size="mini"></el-button></template></el-table-column></el-table><!--  @size-change="sizeChange"@current-change="currentChange" --><el-paginationstyle="text-align:center;":page-sizes="[3,5,10]":page-size="3"layout="prev, pager, next, jumper,->,sizes,total":total="23" background>:pager-count="7"></el-pagination></div><div></div><div></div></el-card></div>
</template><script>
export default {data() {return {category1Id: '',category2Id: '',category3Id: '',// 控制三级联动的可操作show: true}},methods: {getCategoryId({ categoryId, level }) {// categoryId:获取到一,二,三级分类的id level:为了区分是几级的idif (level == 1) {this.category1Id = categoryIdthis.category2Id = ''this.category3Id = ''} else if (level == 2) {this.category2Id = categoryIdthis.category3Id = ''} else {//代表三级分类的id有了this.category3Id = categoryId//发请求获取平台的属性数据this.getSpuList()}},getSpuList() {}}
}
</script><style>
</style>

动态展示spu列表

 

 这里我不是很懂,明明element-ui自己封装了一个title属性,但是还要自己去封装一个button

这里要注意的是这个按钮是活的,因此不能使用简写

我们把这个按钮封装 全局中,以便后续的使用

通过给他传递title参数来显示提示 

点击分页器第几页按钮的回调@current-change element-ui都已经给我们封装好了,我直接修改page给传进来的page,然后在调用接口就可以拿到数据了 

  这里我们可以采用这种方式,就是默认没有传参数进来page是第一页,如果传参数进来,那这个page直接别赋值未传进来的参数

分页器的某一页数据条数发生变化的回调逻辑跟上表述的一样 

Spu管理内容的切换

由三部分来切换的

--展示spu列表结构

--添加spu|修改spu

--展示添加spu结构

我们可以通过数字来控制

而我们可以将这俩部分拆分为组件,来展示

SpuForm静态组件完成

给他绑定一个点击事件,点击的时候直接修改他的scene就可以了 

书写静态页面,这里要用到这个照片墙的功能

 

 界面

<template><div><el-form ref="form" label-width="80px"><el-form-item label="spu名称"><el-input placeholder="spu名称"></el-input></el-form-item><el-form-item label="品牌"><el-select placeholder="请选择品牌" value=""><el-option label="" value=""></el-option></el-select></el-form-item><el-form-item label="spu描述"><el-input type="textarea" rows="4" placeholder="描述"></el-input></el-form-item><el-form-item label="spu图片"><el-upload action="https://jsonplaceholder.typicode.com/posts/" list-type="picture-card" :on-preview="handlePictureCardPreview" :on-remove="handleRemove"><i class="el-icon-plus"></i></el-upload><el-dialog :visible.sync="dialogVisible"><img width="100%" :src="dialogImageUrl" alt="" /></el-dialog></el-form-item><el-form-item label="销售属性"><el-select placeholder="还有三项未选择" value=""><el-option label="label" value="value"></el-option></el-select><el-button type="primary" icon="el-icon-plus">添加销售属性</el-button><el-table style="width: 100%;" border ><el-table-colum type="index" label="序号" width="80px" align="center"></el-table-colum><el-table-colum type="index" label="属性名" width="width"></el-table-colum><el-table-colum type="index" label="属性名称列表" width="width" ></el-table-colum><el-table-colum type="index" label="操作" width="width" ></el-table-colum></el-table></el-form-item><el-form-item><el-button type="primary">保存</el-button><el-button>取消</el-button></el-form-item></el-form></div>
</template>

SpuForm请求业务得分析

---品牌的数据需要发请求的            http://localhost:9529/dev-api/admin/product/baseTrademark/getTrademarkList
---获取平台中全部的销售属性(3个)    http://localhost:9529/dev-api/admin/product/baseSaleAttrList
---获取某一个SPU信息                 Request URL: http://localhost:9529/dev-api/admin/product/getSpuById/5092
--获取SPU图片                        http://localhost:9529/dev-api/admin/product/spuImageList/5092

先做一个点击取消返回原样的逻辑

子组件发射自定义事件

父组件绑定这个自定义事件

SPUFORM子组件发请求地方分析:
不能书写在mounted里面:
因为咱们刚才看了一下已经完成的项目,每一次显示SpuForm子组件的时候,都会发四个请求,
而我们为什么不能放在子组件的mounted里面,因为v-show只是控制SpuForm子组件显示与隐藏,
这个子组件并没有卸载(只是显示或者隐藏),导致mounted只能执行一次。

解决方法就是拿到子组件,然后每次修改都发请求

在父组件当中可以通过$ref获取子组件等等 

获取SpuForm数据

先写api,然后是调用它

 我们书写在initSpuData,调用的时机就是当我们修改它的时候

测试调用一下,发现是一个对象。那么我们需要存储一下他的数据。按照同样的方式,获取其他服务器返回来的数据

 返回回来的数据都是有数据的

async initSpuData(spu){// spu信息let spuResult=await this.$Api.spu.reqSpu(spu.id)if(spuResult.code==200){this.spu=spuResult}// 品牌信息let tradeMarkResult=await this.$Api.spu.reqTradeMarkList()if(tradeMarkResult.code==200){this.tradeMarkList=tradeMarkResult.data}// spu图片let spuImageResult=await this.$Api.spu.reqSpuImageList(spu.id)if(spuImageResult.code==200){this.spuImageList=spuImageResult.data}// 平台全部的销售属性let saleResult=await this.$Api.spu.reqBaseSaleAttrList()if(saleResult.code==200){this.saleAttrList=saleResult.data}}

SpuForm组件数据展示与收集数据

添加SPU的时候需要给服务器携带的参数

{"category3Id": 0,"tmId": 0,"description": "string","spuName": "string","spuImageList": [{"id": 0,"imgName": "string","imgUrl": "string","spuId": 0}],"spuSaleAttrList": [{"baseSaleAttrId": 0,"id": 0,"saleAttrName": "string","spuId": 0,"spuSaleAttrValueList": [{"baseSaleAttrId": 0,"id": 0,"isChecked": "string","saleAttrName": "string","saleAttrValueName": "string","spuId": 0}]}],
}

 图片上传的属性

这里有一个注意的点就是file-list.由于照片墙显示图片的数据需要数组,数组里面的元素需要name与url字段,因此需要把服务器返回的数据进行修改 

 完整展示效果如上

SpuForm销售属性的数据展示

整个项目当中销售属性一共有三个:颜色,尺码,版本

 我们还需要通过计算属性计算出未选择的销售属性

假如第一次过滤的是颜色,然后到spu这个数组中对比一下,如果spu.saleAttrList是尺寸

那就是颜色!=尺寸返回的结果是真,也就是我们需要的数据过滤出来,反之颜色!=颜色为假,那就不要这个数据 

 展示的是name,收集的是id

完成SpuForm照片墙数据的收集

----照片墙何时收集数据
     ---预览照片墙的时候,显示大的图片的时候,需要收集数据吗? ---不需要收集的【数据已经有了】

    ---照片墙在删除图片的时候,需要收集数据的。
     ---照片墙在添加图片的时候,需要收集数据的。

销售属性的添加的操作

------收集哪些数据
baseSaleAttrId
saleAttrName
spuSaleAttrValueList

 响应的id和name都可以拿到

-----收集到哪里呀?
把数据收集到SPU对象

销售属性值展示与收集

上面的操作只完成了添加销售属性,但是销售属性列表并没有实现

 我们通过row.inputVisible来控制input和button的显示,row.inputValue来收集数据

首先我们需要先把着俩个属性变成响应式数据

因此我们需要使用this.$set

新增的销售属性值需要收集的字段:
baseSaleAttrId
saleAttrValueName

两种情况要考虑,1,是属性值不能未空 2,属性值不能重复

删除销售属性与属性值操作

当我们点击这个属性列表的删除标记时,其实就是删除spuSaleAttrValueList数组里面的数据

删除索引值

删除行 

完成添加spu的操作

1.先写接口,通过判断携带是否有spu.id如果有就是修改这个对象,如果没有那么就是添加spu。(主要是这俩个接口结构类似)

2.当我们点击保存按钮的时候要整理参数(照片墙数据),对于图片,需要携带imageName与imageUrl字段

3.发起请求

4.父组件切换完后,需要重新获取数据,同时当前页page传进去

完成spu操作

就是把spu的数据提交给服务器,新增的业务

点击添加SPU按钮的时候,需要发请求(两个:获取品牌的数据、全部销售属性的数据)

点击添加spu按钮发起请求,调用子组件中的事件

搞定

这里有一个注意点,就是当添加的时候,应该返回的是第一页。而修改才是当前页

通过传递过来第二个参数flag传递过来的是修改还是添加来确认停留在第几页

点击取消按钮,清除数据

 Object.assign(this._data,this.$options.data());

Object.assign(this._data, this.$option.data()) 这行代码的作用是将 this.$option.data() 返回的对象中的属性复制到 this._data 对象中。如果 this._data 对象中存在相同的属性,那么这些属性的值将被覆盖。因此,这行代码可以清除 this._data 对象中的一些数据。

就是B复制到A

Object.assign()合并对象

this._data就是初始的data值

注意当点击取消按钮时,出现如下的效果,这个是因为父组件的changeScene这个方法传入的形参应该是一个对象而不是俩个参数,上面是我写错了,因此出现了该错误。

删除spu

需要使用element-ui的这个组件

<template> <el-popconfirm title="这是一段内容确定删除吗?" > <el-button slot="reference">删除</el-button> </el-popconfirm> </template>

把原先的替换掉,这里要注意的是原先的插槽 slot="reference"需要重现添加到button上,并且原先是删除按钮点击事件,应该修改为弹出框确认触发。

完成,这里注意,删除完成后需要重新发起请求,并且spu个数大于1删除停留当前页,小于1返回上一页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/636068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM安装与项目结构

1. 安装环境 参考E:\peixunQianrushi\arm\ziliao\FS4412新版&#xff08;学生资料&#xff09;\环境相关资料 这边建议全部默认路径 安装注意事项&#xff1a; 1、在接下来的安装过程中&#xff0c;对于使用win10、win8的操作系统的用户&#xff0c;所有的安装请均以管理员身份…

POKT Network (POKT) :进军百亿美元市场规模的人工智能推理市场

POKT Network&#xff08;又称 Pocket Network&#xff09;是一个去中心化的物理基础设施网络&#xff08;DePIN&#xff09;&#xff0c;它能够协调并激励对任何开放数据源的访问&#xff0c;最初专注于向应用程序和服务提供商提供区块链数据。 自 2020 年主网上线以来&#x…

【GitHub项目推荐--推荐 5 个炫炫炫的可视化项目】【转载】

数据可视化就是将抽象的数据通过视觉的方式进行展示&#xff0c;能让用户直观的看到数据中蕴含的信息和规律。 本篇文章&#xff0c;整理了 5 个可视化开源项目&#xff0c;其中包括可视化制作低代码平台、大屏可视化、地图可视化、热图、图标可视化等等。 00. 数据大屏可视化…

Rust基础语法1

所有权转移&#xff0c;Rust中没有垃圾收集器&#xff0c;使用所有权规则确保内存安全&#xff0c;所有权规则如下&#xff1a; 1、每个值在Rust中都有一个被称为其所有者&#xff08;owner&#xff09;的变量&#xff0c;值在任何时候只能有一个所有者。 2、当所有者离开作用域…

WordPress微信一键关注免认证登录插件

插件介绍 WordPress微信免认证快捷登录插件&#xff1a;订阅号也能一键通行 这款WordPress插件专为个人用户打造&#xff0c;无需繁琐的服务号申请与认证流程。即使您只有未认证的订阅号&#xff0c;也能轻松实现关注公众号后一键登录网站的功能&#xff01; 配置步骤简单明…

【接上篇】二、Flask学习之CSS(下篇)

上篇&#xff1a;二、Flask学习之CSS 3.8hover hover是用来美化鼠标悬停的效果的&#xff0c;当鼠标停放在某个区域&#xff0c;就会执行对应的hover操作。可以操作本标签的内容&#xff0c;也可以操作本标签下某一个标签的内容 3.9after <!DOCTYPE html> <html l…

Unity3d C#实现场景编辑/运行模式下3D模型XYZ轴混合一键排序功能(含源码工程)

前言 在部分场景搭建中需要整齐摆放一些物品&#xff08;如仓库中的货堆、货架等&#xff09;&#xff0c;因为有交互的操作在单个模型上&#xff0c;每次总是手动拖动模型操作起来也是繁琐和劳累。 在这背景下&#xff0c;我编写了一个在运行或者编辑状态下都可以进行一键排序…

JS-元素尺寸与位置

通过js的方式&#xff0c;得到元素在页面中的位置 获取宽高 元素.offsetWidth 元素.offsetHeight 1&#xff09;获取元素的自身宽高、包括元素自身设置的宽高paddingborder 2&#xff09;获取出来的是数值&#xff0c;方便计算 3&#xff09;注意&#xff1a;获取的是可视…

Python项目——搞怪小程序(PySide6+Pyinstaller)

1、介绍 使用python编写一个小程序&#xff0c;回答你是猪吗。 点击“是”提交&#xff0c;弹窗并退出。 点击“不是”提交&#xff0c;等待5秒&#xff0c;重新选择。 并且隐藏了关闭按钮。 2、实现 新建一个项目。 2.1、设计UI 使用Qt designer设计一个UI界面&#xff0c…

C#,入门教程(20)——列表(List)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(19)——循环语句&#xff08;for&#xff0c;while&#xff0c;foreach&#xff09;的基础知识https://blog.csdn.net/beijinghorn/article/details/124060844 List顾名思义就是数据列表&#xff0c;区别于数据数组&#xff08;arr…

WGAN损失函数解读

WGAN是Wasserstein GAN 解读

【大数据Hive】hive 行列转换使用详解

目录 一、前言 二、使用场景介绍 2.1 使用场景1 2.2 使用场景2 三、多行转多列 3.1 case when 函数 语法一 语法二 操作演示 3.2 多行转多列操作演示 四、多行转单列 4.1 concat函数 语法 4.2 concat_ws函数 语法 4.3 collect_list函数 语法 4.4 collect_set函…

dpwwn:02

靶场下载地址 https://download.vulnhub.com/dpwwn/dpwwn-02.zip 环境配置 当打开此虚拟机环境的时候&#xff0c;可能会出现&#xff1a;当前硬件版本不支持设备“sata”。然后启动失败的情况~ 解决办法参考&#xff1a;https://www.cnblogs.com/yaodun55/p/16434468.html …

x-cmd pkg | fanyi - 命令行中英文翻译工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 fanyi 是命令行翻译工具&#xff0c;翻译数据来源于 icba.com 和 fanyi.youdao.com&#xff0c;仅支持中英文互译。支持 ChatGPT&#xff0c;可通过设置 OpenAI API 密钥以启用 ChatGPT 翻译。 注意&#xff1a;在 L…

Flink SQL

Flink SQL 来源&#xff1a;B站尚硅谷 sql-client准备 Table API和SQL是最上层的API&#xff0c;在Flink中这两种API被集成在一起&#xff0c;SQL执行的对象也是Flink中的表&#xff08;Table&#xff09;&#xff0c;所以我们一般会认为它们是一体的。Flink是批流统一的处理…

本地运行LlaMA 2的简易指南

大家好&#xff0c;像LLaMA 2这样的新开源模型已经变得相当先进&#xff0c;并且可以免费使用。可以在商业上使用它们&#xff0c;也可以根据自己的数据进行微调&#xff0c;以开发专业版本。凭借其易用性&#xff0c;现在可以在自己的设备上本地运行它们。 本文将介绍如何下载…

numpy数组的max、min、argmax和argmin计算方法

numpy数组的max、min、argmax和argmin计算方法 官方对numpy.max和numpy.min的说明 numpy.max 参考官方的理解 数组&#xff1a; 24611529 import numpy as npif __name__ __main__:a np.array([[2, 4, 6, 1], [1, 5, 2, 9]])print(a)print(np.argmax(a, axis0)) # ax…

Java医院信息管理系统

技术框架&#xff1a; springboot shiro layui jquery thymeleaf nginx 有需要的可以联系我。 运行环境&#xff1a; jdk8 mysql IntelliJ IDEA maven项目功能&#xff1a; 本项目是用springbootlayuishiro写的医院管理系统&#xff0c;系统的业务比较复杂&#x…

11 - PXC集群|MySQL存储引擎

PXC集群&#xff5c;MySQL存储引擎 数据库系列文章PXC集群配置集群测试集群 MySQL存储引擎存储引擎介绍mysql服务体系结构mysql服务的工作过程处理查询访问的工作过程处理存储insert访问的工作过程 什么是搜索引擎 存储引擎管理查看存储引擎修改存储引擎 存储引擎特点myisam存储…

canvas能压缩图片?

之前写过一篇使用命令行工具压缩图片的博文&#xff1a;使用yx-tiny命令行工具进行图片压缩&#xff0c;大家感兴趣可以去瞅一眼。 这篇简单说一下使用canvas压缩图片 其实思路很简单&#xff0c;我们选择了图片之后&#xff0c;会获取到对应的文件流对象&#xff0c;然后我们…