IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 【VUE项目实战】56、商品添加功能(六)-提交添加的商品 -> 正文阅读

[JavaScript知识库]【VUE项目实战】56、商品添加功能(六)-提交添加的商品

接上篇《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

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:40:34  更:2022-07-03 10:40:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:53:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码