展示参数明细
elementui Tag标签
{{ item }} + New Tag
// 获取分类参数的数据 async getParamsData() { // 判断是否选中三级分类,如果未选中则重新选中 if (this.selectdKeys.length !== 3) { this.selectdKeys = [] this.paramsData = [] return } // 根据所选分类获取动态参数或者静态属性 三级分类的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('获取参数列表失败') } //对参数的明细进行处理:按空格拆分为数组 res.data.forEach(item=>{ item.attr_vals = item.attr_vals ? item.attr_vals.split(',') : [] }) console.log(res.data) this.paramsData = res.data },
展示参数明细功能
inputVisible 控制输入框的显示
showInput
// tag 标签 显示文本输入框 inputVisible:false,
+ New Tag
// tag 显示文本输入框 showInput(){ this.inputVisible=true }
输入框太宽,修改下长度
.input-new-tag{ width: 120px; }
但是现在会存在一个问题,颜色和尺寸属性应该是独立的互不产生影响才对,但是这里产生了关联(点击按钮颜色和尺寸都会出现输入框,如果输入内存也都会同时输入)
直接在data里面定义下面的属性是不行的
// tag 标签 显示文本输入框
inputVisible:false,
解决方法:可以在后端返回的参数数据里面加上该属性,用以控制文本框的显示和隐藏
//对参数的明细进行处理:按空格拆分为数组 res.data.forEach(item=>{ item.attr_vals = item.attr_vals ? item.attr_vals.split(',') : [] item.inputVisible=false //控制文本框的显示和隐藏 })
这里的v-if 相当于从该行数据中获取该值用以控制
这是文本框输入的值
v-model="scope.row.inputValue"
//对参数的明细进行处理:按空格拆分为数组 res.data.forEach(item=>{ item.attr_vals = item.attr_vals ? item.attr_vals.split(',') : [] item.inputVisible=false //控制文本框的显示和隐藏 item.inputValue='' // 文本框输入的值 })
这两步的目的就是让添加参数的按钮输入框互不产生影响
showInput(scope.row)
这里需要拿到参数对象
+ New Tag
所以获取到用户输入的参数后先添加到参数明细attr_vals中
row.attr_vals.push(row.inputValue.trim())
// tag 显示文本输入框 showInput(row){ row.inputVisible=true this.$nextTick(_ => { // 点击新增按钮后 输入框获取焦点 ref = saveTagInput this.$refs.saveTagInput.$refs.input.focus(); }); }, // 文本框失去焦点或按下enter 按键 handleInputConfirm(row){ if(row.inputValue.trim()){ row.attr_vals.push(row.inputValue.trim()) // 更新参数的明细 this.updateParamsDetail(row) } row.inputVisible=false }, // 更新参数的明细 async updateParamsDetail(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('更新参数明细成功!') }
这里失去焦点和执行enter会触发两次事件,执行两次
row.inputValue=''
// 文本框失去焦点或按下enter 按键 handleInputConfirm(row){ if(row.inputValue.trim()){ row.attr_vals.push(row.inputValue.trim()) // 更新参数的明细 this.updateParamsDetail(row) } row.inputVisible=false // 执行完一次(enter 或者失去焦点) 清空,这样就不会执行上面的if row.inputValue='' },
实现删除参数明细功能
splice 方法
// 监视tag标签的关闭事件,即删除对应的参数明细项 handleClose(){ row.attr_vals.splice(i,1) // 更新参数的明细 this.updateParamsDetail(row) },
实现静态属性的更新
{{ item }} + New Tag
只需要把动态属性的明细 复制到静态属性即可
完整代码
首页 商品管理 分类参数 选择商品分类: 添加参数 {{ item }} + New Tag 编辑 删除 添加属性 {{ item }} + New Tag 编辑 删除
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!