vue+element 实现商品sku效果
在网上搜索了很久,没有发现合适sku编辑的文章,只能自己写一个vue+element 的sku编辑功能。实现的效果如下图
除成本、售价、库存、货号这几个写死的属性外,可自行添加/删除商品属性,自行添加删除商品sku。
PS:可自行修改这几个属性

话不多说,放码一战:
<div id="app">
<el-form ref="ruleForm" label-width="100px" class="demo-ruleForm" >
<el-form-item label="商品规格:" required>
<el-button @click="addNature" :disabled="!editType" type="success">增加属性</el-button>
<el-button @click="addSku" type="success">增加SKU</el-button>
<el-button @click="logData" type="success">打印tableData数据</el-button> </el-form-item>
<el-form-item>
<el-table :data="tableData" style="width: 100%">
<!-- 自定义部分 -->
<el-table-column v-for="(col,i ) in attr_names" :prop="col.prop">
<template slot="header" slot-scope="scope">
<span class="del" v-on:click="delColumn(scope.$index)" v-if="editType">X</span>
<el-input v-model="col.label" size="mini" class="f-cent" :disabled="!editType"/>
</template>
<template slot-scope="scope">
<el-input size="mini" v-model="scope.row[col.prop]" :disabled="!scope.row['editable']"> </el-input>
</template>
</el-table-column> <!-- 固定写死的部分 -->
<el-table-column prop="cost_price" label="成本">
<template slot-scope="scope">
<el-input size="mini" v-model="scope.row['cost_price']" :disabled="!scope.row['editable']"></el-input>
</template>
</el-table-column>
<el-table-column prop="price" label="售价">
<template slot-scope="scope">
<el-input size="mini" v-model="scope.row['price']" :disabled="!scope.row['editable']"></el-input>
</template>
</el-table-column>
<el-table-column prop="quantity" label="库存">
<template slot-scope="scope">
<el-input size="mini" v-model="scope.row['quantity']" :disabled="!scope.row['editable']"></el-input>
</template>
</el-table-column>
<el-table-column prop="no" label="货号">
<template slot-scope="scope">
<el-input size="mini" v-model="scope.row['no']" :disabled="!scope.row['editable']"></el-input>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="80">
<template slot-scope="scope">
<el-button
@click.native.prevent="deleteRow(scope.$index, tableData)"
type="text"
size="small" v-if="scope.row['editable']">
移除
</el-button>
</template>
</el-table-column> </el-table>
</el-form-item>
</el-form>
</div>
js部分
var app = new Vue({
el: "#app",
data: {
editType:true, //判定商品属性标签是否可编辑
attr_names: [
// 为了方便理解用 保留
// {label: '成本', prop: 'cost_price'},
// {label: '售价', prop: 'price'},
// {label: '库存', prop: 'quantity'},
// {label: '货号', prop: 'no'},
],
tableData:[
{
cost_price: '', //成本价
price: ' ',//售价
quantity: '',//库存
no: '',//货号
img:'',//图片
editable:true //判定SKU是否可编辑
}
],
},
methods: {
// 增加商品属性
addNature(){
let len=this.attr_names.length;
//新增以 attr_ 开关,也可以自行定义
this.attr_names.push({label: '商品属性', prop: `attr_${len}`})
},
// 增加商品SKU
addSku(){
let data=this.tableData[0]
let keys=[]
for (var key in data){
keys.push(key);
}
let obj={}
for(let i=0; i<keys.length; i++){
if(keys[i]==='editable'){
obj[keys[i]]=true
}else{
obj[keys[i]]=''
}
}
this.tableData.push(obj);
},
//删除一排 tableData ARR
deleteRow(index, rows) {
rows.splice(index, 1);
},
//删除SKU列 每次删除最后一列数据
delColumn(index){
let len=this.attr_names.length - 1 ;
let str=this.attr_names[len].prop;
this.tableData.map((item)=>{
delete item[str];
})
this.attr_names.pop()
},
// 调试代码信息用
logData(){
console.log('this.attr_names',this.attr_names);
console.log('this.tableData',this.tableData);
},
}
});
css
.del{
cursor: pointer;
display: none;
background: red;
color: #fff;
font-size: 10px;
padding: 2px 5px;
position: absolute;
top: 7px;
right: 0px;
z-index:;
border-radius: 3px;
}
.cell:hover .del{
display: inline;
}
代码很简单,都不难,主要讲解 editType/editable 这两个。在第一次发布商品sku时可忽略,但在编辑商品sku时就要注意了
editType:用于判断是否可添加删除商品的属于,例如商品发布过SKU,并已经有客户购买,那么该商品的属性值理应是无法更改的。
editable:用于判断商品该SKU是否可修改/删除,如iphone X 颜色:土豪金 内存:64G 已经有用户购买并生成购买订单(记录)。那么该条sku是不能更改/删除的。
vue+element 实现商品sku效果的更多相关文章
- 商品sku规格选择效果,没有商品的不能选中,选择顺序不影响展示结果
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展示和字段转义处理
在我们一般开发的系统界面里面,列表页面是一个非常重要的综合展示界面,包括有条件查询.列表展示和分页处理,以及对每项列表内容可能进行的转义处理,本篇随笔介绍基于Vue +Element基础上实现表格列表 ...
- 循序渐进VUE+Element 前端应用开发(6)--- 常规Element 界面组件的使用
在我们开发BS页面的时候,往往需要了解常规界面组件的使用,小到最普通的单文本输入框.多文本框.下拉列表,以及按钮.图片展示.弹出对话框.表单处理.条码二维码等等,本篇随笔基于普通表格业务的展示录入的场 ...
- 循序渐进VUE+Element 前端应用开发(25)--- 各种界面组件的使用(1)
在我们使用Vue+Element开发前端的时候,往往涉及到很多界面组件的使用,其中很多直接采用Element官方的案例即可,有些则是在这个基础上封装更好利用.更少代码的组件:另外有些则是直接采用第三方 ...
- 循序渐进VUE+Element 前端应用开发(27)--- 数据表的动态表单设计和数据存储
在我们一些系统里面,有时候会需要一些让用户自定义的数据信息,一般这些可以使用扩展JSON进行存储,不过每个业务表的显示项目可能不一样,因此需要根据不同的表单进行设计,然后进行对应的数据存储.本篇随笔结 ...
- Vue + Element 小技巧
说是小技巧 ,其实就是本人 就是一个小菜比 .如有大佬可以纠正,或者再救救我这个小菜比 跪谢 1.当后台返回一个字段需要根据不同字段内容在表格内显示相对应的文字(字段内容是死的,表格内需要显示对 ...
- jquery实现商品sku多属性选择(商品详情页)
转载于https://blog.csdn.net/csdn924618338/article/details/51455595 实现效果 源码 <!DOCTYPE HTML> <ht ...
- 新书上线:《Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统》,欢迎大家买回去垫椅子垫桌脚
新书上线 大家好,笔者的新书<Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统>已上线,此书内容充实.材质优良,乃家中必备垫桌脚 ...
- GitHub Vue项目推荐|Vue+Element实现的电商后台管理系统功能丰富
GitHub Vue项目推荐|mall-admin-web是一个电商后台管理系统的前端项目基于Vue+Element实现 主要包括商品管理.订单管理.会员管理.促销管理.运营管理.内容管理.统计报表. ...
随机推荐
- Vector和Arrarlist的异同;Hashtanle和HashMap的异同
Vector和ArrayList的异同 实现原理相同,功能相同,可以互用 主要区别: Vector线程安全,ArrayList重速度,轻安全,线程非安全. 长度需要增长时,Vector默认增长一倍,A ...
- localStorage详细总结
一.localStorage简介: 在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cooki ...
- scala函数式编程(二) scala基础语法介绍
上次我们介绍了函数式编程的好处,并使用scala写了一个小小的例子帮助大家理解,从这里开始我将真正开始介绍scala编程的一些内容. 这里会先重点介绍scala的一些语法.当然,这里是假设你有一些ja ...
- Windows 笔记 - 用到的设置
博客地址:http://www.moonxy.com 在日常使用 Windows 的过程中,或多或少会遇到一些设置,记录下来,以备以后使用. 1. 不重启电脑使 hosts 生效的解决方法 有时候需要 ...
- Dart函数、类和运算符-处理信息
编程语言虽然千差万别,但归根结底,它们的设计思想无非就是回答两个问题: 1.如何表示信息: 2.如何处理信息: 函数 函数是一段用来独立地完成某个功能的代码.函数是对象类型,它的类型叫做Functio ...
- wait()与notify()
一,前言 简单画了一下线程的流程图,只是一个大概.如图所示,线程有多种状态,那么不同状态之间是如何切换的,下面主要总结关于wait()和notify()的使用. 二,wait() wait ...
- 死磕 java同步系列之Phaser源码解析
问题 (1)Phaser是什么? (2)Phaser具有哪些特性? (3)Phaser相对于CyclicBarrier和CountDownLatch的优势? 简介 Phaser,翻译为阶段,它适用于这 ...
- Spring boot 梳理 - 配置eclipse集成maven,并开发Spring boot hello
@RestController @EnableAutoConfiguration public class App { @RequestMapping("/hello") publ ...
- java @postconstruct初始化注解使用
1.从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion):@PostConstruct和@PreDestroy.这两个注解被用来修饰一个非静态的 ...
- Docker系列(五):.Net Core实现k8s健康探测机制
k8s通过liveness来探测微服务的存活性,判断什么时候该重启容器实现自愈.比如访问 Web 服务器时显示 500 内部错误,可能是系统超载,也可能是资源死锁,此时 httpd 进程并没有异常退出 ...