【VUE项目实战】56、商品添加功能(六)-提交添加的商品

article/2025/9/18 10:15:43

接上篇《55、商品添加功能(五)-商品内容模块》
上一篇我们完成了商品内容编辑模块的开发,也即是完成了商品所有的信息编辑,本篇我们就来开发提交商品所有信息到后台的功能。

一、要实现的效果

我们要实现点击“添加商品”的按钮,将5个页签中的所有信息全部封装为一个表单对象,然后统一提交至后台:

我们在之前每个页签的开发中其实已经将所有商品信息统一封装在addForm对象中去了,我们只要向后台提交该表单即可。

二、进行表单预验证

首先在提交商品信息之前,需要校验我们提交的数据是否全部合法,需要对addForm对象进行表单预验证。
首先我们为“添加商品”按钮新增一个点击事件函数“add”:

<el-tab-pane label="商品内容" name="5"><!-- 富文本编辑器组件 --><quill-editor v-model="addForm.goods_introduce"></quill-editor><el-button type="primary" style="margin-top:15px" @click="add()">添加商品</el-button>
</el-tab-pane>

然后我们在add方法中,第一步来通过表单的引用“addFormRef”的validate方法进行表单预验证:

//添加商品
add(){this.$refs.addFormRef.validate(valid=>{if(!valid){return this.$message.error('请填写必要的表单项!');}//执行添加的业务逻辑})
}

如果验证不通过,就提示错误消息,通过则放行,进入添加商品的逻辑。
我们回到页面,选择一个商品,什么信息也不填写,点击添加就可以看到报错:


然后回到基本信息页面可以看到被拦截的第一个未填参数,说明预校验生效:

三、对表单数据进行处理

在向后台提交商品之前,我们还需要对商品的参数进行一些处理,因为有一些格式类型还不符合API的要求,我们的商品提交API结构如下:

●请求数据

{"goods_name":"test_goods_name2","goods_cat": "1,2,3","goods_price":20,"goods_number":30,"goods_weight":40,"goods_introduce":"abc","pics":[{"pic":"/tmp_uploads/30f08d52c551ecb447277eae232304b8"}],"attrs":[{"attr_id":15,"attr_value":"ddd"},{"attr_id":15,"attr_value":"eee"}]
}

在提交的参数中,有两项比较特殊,一个是“goods_cat”商品分类ID列表,一个是“attrs”商品的参数。
其中“goods_cat”是一个以英文逗号为分隔的字符串,其中从左到右放置了一级、二级和三级分类的ID。而我们当前提交的addForm表单对象中,goods_cat实际是一个数组对象,不是字符串,所以我们需要将goods_cat数组改造为字符串。这里我们使用数组对象的join函数:

//添加商品
add(){this.$refs.addFormRef.validate(valid=>{if(!valid){return this.$message.error('请填写必要的表单项!');}//执行添加的业务逻辑//1.将addForm表单对象复制一个,避免影响原有的双向绑定let form = JSON.parse(JSON.stringify(this.addForm));//2.处理goods_cat,将其由数组转为字符串form.goods_cat = form.goods_cat.join(",");console.log(form);})
}

这里我们不在原来的addForm上操作而是复制一个,是因为原来的addForm对象有很多参数使用了v-model与html组件进行了双向绑定,一旦修改的数据格式和绑定的html组件的数据格式不同,就会报错,为了避免这种情况,我们单独复制一个表单对象进行处理提交。

然后来处理“attrs”商品参数,我们在页面上选择的商品参数和属性都要存到这个数组中去,页面上的属性和参数分别存在“manyTableData”和“onlyTableData”中,在data区域定义:

//商品参数列表数据
manyTableData: [],
//商品属性列表数据
onlyTableData: [],

我们将这两个数组对象处理为单个对象,并组合为一个attr数组,然后挂到待提交的form表单对象上:

//添加商品
add(){this.$refs.addFormRef.validate(valid=>{if(!valid){return this.$message.error('请填写必要的表单项!');}//执行添加的业务逻辑//1.将addForm表单对象复制一个,避免影响原有的双向绑定let form = JSON.parse(JSON.stringify(this.addForm));//2.处理goods_cat,将其由数组转为字符串form.goods_cat = form.goods_cat.join(",");//3.处理动态参数let attrsArray = [];this.manyTableData.forEach(item=>{const newInfo = {attr_id:item.attr_id,attr_value:item.attr_vals.join(" ")};attrsArray.push(newInfo);})//4.处理静态属性this.onlyTableData.forEach(item=>{const newInfo = {attr_id:item.attr_id,attr_value:item.attr_vals};attrsArray.push(newInfo);})form['attrs']=attrsArray;//将参数数组赋值到新属性attrs上console.log(form);})
}

我们在页面上将所有商品信息填写完毕,看看最后打印的form表单数据格式:

发现已经完全符合API要提交的格式了。

四、向后台提交商品信息

我们向后台发起post请求,请求API地址为“goods”,将商品信息表单对象提交:

//添加商品
add(){this.$refs.addFormRef.validate(async valid=>{if(!valid){return this.$message.error('请填写必要的表单项!');}//执行添加的业务逻辑//1.将addForm表单对象复制一个,避免影响原有的双向绑定let form = JSON.parse(JSON.stringify(this.addForm));//2.处理goods_cat,将其由数组转为字符串form.goods_cat = form.goods_cat.join(",");//3.处理动态参数let attrsArray = [];this.manyTableData.forEach(item=>{const newInfo = {attr_id:item.attr_id,attr_value:item.attr_vals.join(" ")};attrsArray.push(newInfo);})//4.处理静态属性this.onlyTableData.forEach(item=>{const newInfo = {attr_id:item.attr_id,attr_value:item.attr_vals};attrsArray.push(newInfo);})form['attrs']=attrsArray;//将参数数组赋值到新属性attrs上console.log(form);//5.将商品信息表单对象通过API提交至后台const {data:res} = await this.$http.post('goods',form);if(res.meta.status!==201){return this.$message.error("添加商品失败!原因:"+res.meta.msg);}this.$message.success("添加商品成功!");//6.跳转回商品列表页面this.$router.push("/goods");})
}

测试:


可以看到商品添加成功。

五、提交与合并分支代码

至此我们的商品添加功能完成了,我们需要将这个分支提交并合并到主分支上。
首先使用“git branch”查看当前所在分支,是goods_list分支;然后使用“git add .”将修改内容添加到暂存区,然后执行“git commit”将修改内容提交至当前本地分支;然后使用“git push”将本地分支push到云端;最后通过“git checkout master”将分支切换到master分支,执行“git merge goods_list”将goods_list的内容合并至master主分支,然后将本地master分支推送到云端,此时master更新到了最新


前往Gitee查看首页的提交记录,可以看到合并成功:

至此我们的商品内容提交功能就完成了。
下一篇我们来开发一个新的模块——————订单管理。

参考:黑马程序员(www.itheima.com)Vue项目实战教学视频

转载请注明出处:https://blog.csdn.net/acmman/article/details/125470496


http://chatgpt.dhexx.cn/article/Jesca6yc.shtml

相关文章

淘淘商城第30讲——实现商品添加功能

经过上文的学习&#xff0c;我相信大家都应该知道了富文本编辑器的使用方法&#xff0c;我们能走到这步&#xff0c;实属不易&#xff0c;本文终于可以来实现商品添加这个功能了。 在item-add.jsp页面当中&#xff0c;当点击提交按钮后&#xff0c;会触发submitForm方法&#…

密码登录

利用idea实现密码的输入 首先我们要先新建一个页面用于输入账号密码 req.setCharacterEncoding("UTF-8");String LoginNamereq.getParameter("LoginName");String LoginPwdreq.getParameter("LoginPwd");String msg"请输入密码";priva…

SQL Server安全:登录和用户

SQL Server安全&#xff1a;登录和用户 前言 建议配合sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系一起看。 授予 Principal &#xff08;安全主体&#xff09;操作 Securable&#xff08;安全对象&#xff09; 的 Permission&#xff08;权限&…

springboot-security安全登录

一个简单的security安全登录示例 配置环境 添加pom依赖坐标 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.6.RELEASE</version></parent><depe…

如何设计一个安全的登录接口?

Java技术栈 www.javastack.cn 关注阅读更多优质文章 作者&#xff1a;哒哒哒哒打代码链接&#xff1a;juejin.im/post/6859214952704999438 前言 大家学写程序时&#xff0c;第一行代码都是hello world。 但是当你开始学习WEB后台技术时&#xff0c;很多人的第一个功能就是写的…

[OS-Linux] CentOS 7.x 安全登录策略设置

简介 之前用用户名和密码登陆服务器 这样不安全 &#xff0c;用SSH公钥(public key)验证 这个办法能很好的解决 登陆服务器 和安全登陆服务器的特点&#xff1a; 方法 / 步骤 &#x1f510; 一: 证书生成 命令行页面生成 (推荐) 查看执行结果&#xff0c;这时候连续回车即可…

开启QQ登录保护仍被盗号——QQ安全机制全面分析

1、前言 周围总是有些同学QQ被盗号&#xff0c;攻击者盗取账号后会继续去欺骗列表里的好友&#xff0c;形成链式反应。危害比较大。 腾讯QQ安全中心提供了登录保护机制&#xff0c;如图&#xff1a; 这是腾讯为QQ添加第二层保护&#xff0c;在开启登录保护后&#xff0c;盗号者…

使用 PHP 和 MySQL 的安全登录系统

Secure Login System with PHP and MySQL 在本教程中&#xff0c;我将教您如何创建自己的安全 PHP 登录系统。登录表单是您网站的访问者可以用来登录您的网站以访问受限内容&#xff08;例如个人资料页面&#xff09;的表单。我们将利用 MySQL 从数据库中检索帐户数据。 高级…

使用腾讯企业邮箱为什么强烈建议启用安全登录?怎么启用?

腾讯企业邮箱开启安全登录&#xff0c;简单来说就是把企业邮箱账号和微信绑定。启用安全登录和关闭安全登录&#xff0c;主要是登录方式发生了变化。 登录方式&#xff1a; 登录启用前启用后网页端邮箱帐号密码登录/微信扫码登录仅支持微信扫码登录客户端邮箱帐号密码登录仅…

登录安全----双重MD5加密实现安全登录

个人简介&#xff1a; &#x1f4e6;个人主页&#xff1a;肇事司机赵四 &#x1f3c6;学习方向&#xff1a;JAVA后端开发 &#x1f4e3;种一棵树最好的时间是十年前&#xff0c;其次是现在&#xff01; &#x1f9e1;喜欢的话麻烦点点关注喔&#xff0c;你们的支持是我的最大动…

http登录模块加密登录安全登录方法

http请求很容易被截获&#xff0c;在写登录模块时&#xff0c;直接使用明文密码请求&#xff0c;很容易明文密码泄露&#xff1b;若在js页面对密码进行一次加密后在传输&#xff0c;虽不是明文密码&#xff0c;但也完全可以截获加密后的暗文&#xff0c;伪造http请求进行登录。…

安全登录认证

用户登录是任何一个应用系统的基本功能&#xff0c;特别是对于网上银行系统来说&#xff0c;用户登录的安全性尤为重要。如何设计一个网站的安全登录认证程序&#xff0c;是本文主要讨论的问题。 静态密码存在着比较多的安全隐患&#xff0c;攻击者有很多手段获得静态密码&…

Web登录如何确保安全

1、一个普通简单的HTML例子&#xff0c;用户登录信息是不安全的 <form action "http://localhost:8080/Application/login" method "POST"> 用户名&#xff1a;<input id"username" name"username" type"te…

实现安全登录的两种方法

登录安全——拦截器和过滤器或权限框架的使用 本次我们将采用两种方法实现登录的安全性&#xff0c;首先介绍拦截器和过滤器。 一、 过滤器和拦截器&#xff1a; 过滤器产生的时间/开始工作的时间&#xff1a; 进入Tomcat之后&#xff0c;但是在进servlet之前。Interceptor进入…

推荐几款优秀的搜素引擎

秘迹搜索 网址&#xff1a;https://mijisou.com/ 秘迹搜索是一款守护用户搜索信息的聚合搜索引擎&#xff0c;Ta不会根据搜索关键词追踪用户&#xff0c;也不会通过历史搜索内容做广告推荐。秘迹搜索通过聚合中文搜索服务比如Bing、百度、360、搜狗等搜索结果提供私密搜索服务…

12.推荐几款好用的搜索引擎

1.goobe https://goobe.io/ 专为程序员设计的搜索引擎&#xff08;搜索非技术相关的东西也很6&#xff09;&#xff0c;界面是这样事儿的 而且可以通过快照访问stackoverflow和github&#xff0c;非常好用 无广告&#xff0c;不跟踪 2.萌搜 https://mengso.com/ 号称小众的…

《搜索和推荐中的深度匹配》——1.1搜索和推荐

重磅推荐专栏&#xff1a; 《Transformers自然语言处理系列教程》 手把手带你深入实践Transformers&#xff0c;轻松构建属于自己的NLP智能应用&#xff01; 随着Internet的快速发展&#xff0c;当今信息科学的基本问题之一变得更加重要&#xff0c;即如何从通常庞大的信息库中…

基于Elasticsearch实现搜索推荐

在基于Elasticsearch实现搜索建议一文中我们曾经介绍过如何基于Elasticsearch来实现搜索建议&#xff0c;而本文是在此基于上进一步优化搜索体验&#xff0c;在当搜索无结果或结果过少时提供推荐搜索词给用户。 背景介绍 在根据用户输入和筛选条件进行搜索后&#xff0c;有时…

五个小众好用的搜索引擎

一、wikiHow https://zh.wikihow.com/ 我把wikiHow当做一个帮我做任何事的搜索引擎 wikiHow上每一篇详尽明了的指南文章 都能改善成百上千人的生活 与维基百科类似&#xff0c;wikiHow 也采用了维基技术 所有人都可以创建或编辑文章中的内容 来自全球的协作者们已编写了…

阿里搜索推荐系统

一、系统框架 导购升级的优化思路从三个方向着手&#xff1a;1.策略升级。利用深度学习及异构网络的思想&#xff0c;对用户个性化进行更深的理解和建模&#xff1b;同时对因马太效应引起的独立query数下降等问题进行优化。 2.导购外投。在包括会场激活页、猜你喜欢等渠道进行搜…