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实现 主要包括商品管理.订单管理.会员管理.促销管理.运营管理.内容管理.统计报表. ...
随机推荐
- VMware Workstation Fixed Unable to connect to the MKS
场景:早上开虚拟机时突然报这个错 解决办法如下: 以管理员的身份打开CMD,然后执行如下命令: net start vmx86 net start hcmon net start vmauthdser ...
- Python中使用python -m pip install --upgrade pip升级pip时老是不成功
场景 在使用python -m pip install --upgrade pip进行pip升级时,每次到最后就是报一大堆红色,最终升级不成功. 实现 使用默认的镜像源时间过长就会没响应,使用豆瓣的镜 ...
- nginx 模块
8.nginx开启目录浏览 提供下载功能 默认情况下,网站返回index指定的主页,但如果该网站不存在主页,则将请求交给autoindex模块 ##### 如果开启autoindex模块,则提供一个下 ...
- 53 (OC) 皮肤切换
1:添加皮肤 1.1:iOS皮肤切换方案 http://www.cocoachina.com/ios/20171012/20762.html 1.2:整合 iOS几种换肤思路和demo https:/ ...
- Salem and Sticks-萨鲁曼的棍子 CodeForce#1105A 暴力
题目链接:Salem and Sticks 题目原文 Salem gave you
- grep 命令使用
grep是Linux中最常用的"文本处理工具"之一,用于在文本中查找指定的字符串. 语法: grep [OPTION]... PATTERN [FILE]... 参数: -i:在搜 ...
- springboot 使用freemarker自定义标签
1.pom依赖引入 <dependencies> <dependency> <groupId>org.springframework.boot</groupI ...
- zui框架配置日期控件只显示年月
zui框架配置日期控件datetimepicker只显示年月 <!DOCTYPE html> <head> <script src="~/Scripts/jqu ...
- Redis优雅实现分布式锁
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 在实际项目开发中经常会遇到这样一个业务场景:如果同一台机器有多个线程抢夺同一个共享资源,同一个线程多次执行会出 ...
- Grafana 6.4 正式发布!
原文链接:Grafana 6.4 正式发布! 2019 年 10 月 2 日,也就是国内小伙伴们的放假期间,Grafana 实验室正式发布了 Grafana 6.4 版本.这个版本主要围绕数据模型和指 ...