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实现 主要包括商品管理.订单管理.会员管理.促销管理.运营管理.内容管理.统计报表. ...
随机推荐
- Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码
场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- Python编程书籍高清PDF免费下载
场景 CSDN: https://blog.csdn.net/badao_liumang_qizhi 博客园: https://www.cnblogs.com/badaoliumangqizhi/ 哔 ...
- AirFlow常见问题汇总
airflow常见问题的排查记录如下: 1,airflow怎么批量unpause大量的dag任务 普通少量任务可以通过命令airflow unpause dag_id命令来启动,或者在web界面点 ...
- graphics.drawRect()方法
drawRect方法的官方API文档描述 drawRect public void drawRect(int x, int y, int width, int height) Draws the ou ...
- 垃圾佬的旅游III(Hash + 暴力)
题目链接:http://120.78.128.11/Problem.jsp?pid=3445 最开始的思路就是直接暴力求解,先把所有的数值两两存入结构体,再从小到大枚举.用二分的思路去判断数值以及出现 ...
- CentOS部署Harbor镜像仓库
关于Harbor Harbor是用于存储和分发Docker镜像的镜像仓库服务,相比Docker Registry,Harbor在安全.标识.管理等方面做了增强,更适合企业使用: 官方网站:https: ...
- .Net轻量状态机Stateless
很多业务系统开发中,不可避免的会出现状态变化,通常采用的情形可能是使用工作流去完成,但是对于简单场景下,用工作流有点大财小用感觉,比如订单业务中,订单状态的变更,涉及到的状态量不是很多,即使通过简单的 ...
- 利用ShowDoc自动生成api接口文档
最近在做新项目,感觉写完一个接口 还要去再写一遍api文档 挺浪费时间的,所以借用ShowDoc的api开放功能 自动生成api文档. 首先 去 https://www.showdoc.cc/ 注册一 ...
- Win系统下使用命令链接MySQL数据库
方法一: 1:打开[开始]>[运行]输入[cmd]单击[确定]后出现CMD命令黑色窗口,这就是我们说的CMD命令行 2:默认进入C盘,于是我们可以进入E盘,点击回车.因为我的数据库是存放在E盘的 ...
- 移动端获取短信验证码java实现——阿里云短信服务
需求:移动端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短信 ...