2020 零基础到快速开发 Vue全家桶开发电商管理系统(Element-UI)分类参数篇
发布日期:2021-06-29 14:28:40 浏览次数:2 分类:技术文章

本文共 12178 字,大约阅读时间需要 40 分钟。

文章目录

1、引言

寒假是用来反超的!一起来学习Vue把,这篇博客是关于商品分类,请多指教~

2、分类参数篇

商品参数用于显示商品的固定的特征信息,可以通过电商平台商品详情页面直观的看到。

分为动态参数和静态参数

2.1 通过路由加载分类参数组件页面

在这里插入图片描述

在这里插入图片描述

2.2 渲染分类参数页面的基本UI结构

在这里插入图片描述

2.3 调用API获取商品分类列表的数据
methods: {
async getCateList(){
const {
data : res} = await this.$http.get('categories') if(res.meta.status !== 200) return this.$message.error('获取商品分类失败!') // console.log(res.data) this.cateList = res.data console.log(res) } },

在这里插入图片描述

2.4 渲染商品分类的级联选择框
选择商品分类:

在这里插入图片描述

2.5 控制级联选择框的选中范围

只允许选中三级分类,对于一二级分类我们需要进行清空操作,即把selectedKeys数组清空

// 监听级联选择框选项发生变化的事件        handleChange(){
// console.log(this.selectedCatKeys) // 证明选中的不是三级分类 if(this.selectedCatKeys.length !== 3){
this.selectedCatKeys = [] return } // 反之,选中的是三级分类 console.log(this.selectedCatKeys) }

在这里插入图片描述

2.6 渲染分类参数的Tabs页签
动态参数
静态属性

在这里插入图片描述

2.7 渲染添加参数按钮并控制按钮的禁用状态

只有选到了三级分类,按钮才能使用,否则保持禁用状态,于是我们在computed里计算一下属性 即看数组长度是否为3

computed:{
// 如果按钮需要被禁用,则返回true,否则返回false isBtnDisabled(){
if(this.selectedCatKeys.length !== 3) return true return false } },

在这里插入图片描述

在这里插入图片描述

2.8 获取参数列表数据
// 监听级联选择框选项发生变化的事件        async handleChange(){
// console.log(this.selectedCatKeys) // 获取参数列表数据 this.getParamsData() }, // 监听Tab页签点击事件 handleTabClick(){
//console.log(this.activeName) // 获取参数列表数据 this.getParamsData() }, //获取参数列表数据 async getParamsData(){
// 证明选中的不是三级分类 if(this.selectedCatKeys.length !== 3){
this.selectedCatKeys = [] return } // 反之,选中的是三级分类 // console.log(this.selectedCatKeys) // 根据所选分类的id和当前所处面板参数,获取数据请求 const {
data:res} = await this.$http.get('categories/'+this.cateId+'/attributes', {
params:{
sel: this.activeName}}) if(res.meta.status !== 200) return this.$message.error('获取参数列表失败!') console.log(res.data) }

在这里插入图片描述

2.9 将获取到的参数数据挂载到不同的数据源上

在这里插入图片描述

//获取参数列表数据        async getParamsData(){
// 证明选中的不是三级分类 if(this.selectedCatKeys.length !== 3){
this.selectedCatKeys = [] return } // 反之,选中的是三级分类 // console.log(this.selectedCatKeys) // 根据所选分类的id和当前所处面板参数,获取数据请求 const {
data:res} = await this.$http.get('categories/'+this.cateId+'/attributes', {
params:{
sel: this.activeName}}) if(res.meta.status !== 200) return this.$message.error('获取参数列表失败!') // console.log(res.data) // 通过判断来挂载到对应的表格上 if(this.activeName == 'many'){
this.manyTableData = res.data }else{
this.onlyTableData = res.data } }
2.10 渲染动态参数和静态属性的Table表格
添加参数
添加属性

在这里插入图片描述

在这里插入图片描述

2.11 完成动态参数和静态属性的添加操作
取 消
确 定
// 点击确定按钮,添加分类参数        addParams(){
this.$refs.addFormRef.validate(async valid =>{
if(!valid) return const {
data:res} = await this.$http.post('categories/'+this.cateId+'/attributes',{
attr_name: this.addForm.attr_name, attr_sel: this.activeName }) if(res.meta.status !== 201) return this.$message.error('添加参数列表失败!') // 添加成功就关闭对话框并重新刷新列表数据 this.$message.success('添加参数成功!') this.addDialogVisible = false this.getParamsData() }) }

在这里插入图片描述

在这里插入图片描述

2.12 渲染修改参数的对话框
取 消
确 定

在这里插入图片描述

在这里插入图片描述

2.13 完成修改参数的操作
// 点击编辑按钮,展示修改对话框        async showEditDialog(attr_id){
// 查询当前参数的信息 const {
data:res} = await this.$http.get('categories/'+this.cateId+'/attributes/'+attr_id,{
params:{
attr_sel :this.activeName} }) if(res.meta.status !== 200) return this.$message.error('获取参数列表失败!') this.editForm = res.data this.editDialogVisible = true }, // 当对话框关闭时,重置表单 editDialogClosed(){
this.$refs.editFormRef.resetFields() }, // 点击确定按钮,进行信息修改 editParams(){
this.$refs.editFormRef.validate(async valid =>{
if(!valid) return const {
data:res} = await this.$http.put('categories/'+this.cateId+'/attributes/'+this.editForm.attr_id,{
attr_name: this.editForm.attr_name, attr_sel: this.activeName }) if(res.meta.status !== 200) return this.$message.error('修改参数列表失败!') // 修改成功就关闭对话框并重新刷新列表数据 this.$message.success('修改参数成功!') this.editDialogVisible = false this.getParamsData() }) }

在这里插入图片描述

在这里插入图片描述

2.14 完成删除参数的业务逻辑
// 根据id删除对应的参数项        async removeParams(attr_id){
const confirmResult = await this.$confirm('此操作将永久删该参数,是否继续?','提示',{
confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).catch(err => err) // 用户取消了删除操作 if(confirmResult !== 'confirm') return this.$message.info('已取消删除!') // 删除的业务逻辑 const {
data:res} = await this.$http.delete('categories/'+this.cateId+'/attributes/'+attr_id) if(res.meta.status !== 200) return this.$message.error('删除参数列表失败!') // 删除成功就关闭对话框并重新刷新列表数据 this.$message.success('删除参数成功!') this.getParamsData() }

在这里插入图片描述

在这里插入图片描述

2.15 渲染参数下的可选项
//获取参数列表数据        async getParamsData(){
// 证明选中的不是三级分类 if(this.selectedCatKeys.length !== 3){
this.selectedCatKeys = [] return } // 反之,选中的是三级分类 // console.log(this.selectedCatKeys) // 根据所选分类的id和当前所处面板参数,获取数据请求 const {
data:res} = await this.$http.get('categories/'+this.cateId+'/attributes', {
params:{
sel: this.activeName}}) if(res.meta.status !== 200) return this.$message.error('获取参数列表失败!') // console.log(res.data) // 将attr_vals进行分割 获得标签 // ps:后面改进用三元表达式 解决attr_vals为空的情况 res.data.forEach(item => {
item.attr_vals = item.attr_vals ? (item.attr_vals || '').split(' ') : [] }) console.log(res.data) // 通过判断来挂载到对应的表格上 if(this.activeName == 'many'){
this.manyTableData = res.data }else{
this.onlyTableData = res.data } },

在这里插入图片描述

在这里插入图片描述

2.16 实现控制按钮与文本框的切换显示
// 文本框是去焦点或按下回车将会触发        handleInputConfirm(row){
//console.log('ok!') if(row.inputValue.trim().length == 0) row.inputValue = '' row.inputVisible = false }, // 点击按钮,展示文本输入框 保存tag标签 showInput(row){
row.inputVisible = true // 让文本框自动获得焦点 // $nextTick 方法的作用,就是当页面上元素被重新渲染之后,才会指定回调函数中的代码 this.$nextTick(_ => {
this.$refs.saveTagInput.$refs.input.focus() }) }

在这里插入图片描述

2.17 完成参数可选项的添加操作
// 文本框是去焦点或按下回车将会触发        async handleInputConfirm(row){
//console.log('ok!') if(row.inputValue.trim().length == 0){
row.inputValue = '' row.inputVisible = false return } // 如果没有return,则证明输入的内容,需要做后续的处理 row.attr_vals.push(row.inputValue.trim()) row.inputValue = '' row.inputVisible = false // 需要发起请求,保存数组数据 const {
data:res} = await this.$http.put('categories/'+this.cateId+'/attributes/'+row.attr_id,{
attr_name: row.attr_name, attr_sel: row.attr_sel, attr_vals: row.attr_vals.join(' ') }) if(res.meta.status !== 200) return this.$message.error('修改参数列表失败!') // 修改成功就关闭对话框并重新刷新列表数据 this.$message.success('修改参数成功!') },

在这里插入图片描述

2.18 删除参数下的可选项
// 文本框是去焦点或按下回车将会触发        async handleInputConfirm(row){
//console.log('ok!') if(row.inputValue.trim().length == 0){
row.inputValue = '' row.inputVisible = false return } // 如果没有return,则证明输入的内容,需要做后续的处理 row.attr_vals.push(row.inputValue.trim()) row.inputValue = '' row.inputVisible = false // 将对attr_vals的操作,保存到数据库 this.saveAttrVals(row) }, // 将对attr_vals的操作,保存到数据库 async saveAttrVals(row){
// 需要发起请求,保存数组数据 const {
data:res} = await this.$http.put('categories/'+this.cateId+'/attributes/'+row.attr_id,{
attr_name: row.attr_name, attr_sel: row.attr_sel, attr_vals: row.attr_vals.join(' ') }) if(res.meta.status !== 200) return this.$message.error('修改参数列表失败!') // 修改成功就关闭对话框并重新刷新列表数据 this.$message.success('修改参数成功!') }, // 点击按钮,展示文本输入框 保存tag标签 showInput(row){
row.inputVisible = true // 让文本框自动获得焦点 // $nextTick 方法的作用,就是当页面上元素被重新渲染之后,才会指定回调函数中的代码 this.$nextTick(_ => {
this.$refs.saveTagInput.$refs.input.focus() }) }, // 删除对应的tag标签 handleClose(i,row){
row.attr_vals.splice(i,1) this.saveAttrVals(row) }
2.19 清空表格数据

解决当添加参数为禁用状态下,表格依旧存在的问题,我们需要对此进行清空

在这里插入图片描述

2.20 完成静态属性表格中展开行的效果

只需要把之前在动态参数写过的代码直接复制一份到静态属性展开行即可,白嫖【滑稽】

在这里插入图片描述

3、结束语

至此,我们的功能就完成了!

Vue全家桶开发电商管理系统码云地址,欢迎一起来学习~

https://gitee.com/Chocolate666/vue_shop


最后,看完本篇博客后,觉得挺有帮助的话,可以继续查看专栏其它内容嗷,一起来学习Vue吧~

在这里插入图片描述

学如逆水行舟,不进则退

转载地址:https://chocolate.blog.csdn.net/article/details/104056728 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:2020 零基础到快速开发 Vue全家桶开发电商管理系统(Element-UI)商品列表篇
下一篇:Vue报错:[Vue warn]: Error in v-on handler: "TypeError: Cannot read property 'cat_pid' of undefined"

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月11日 02时13分36秒