利用ElementUI配置商品的规格参数

商品有不同的规格组合,自动生成对应规格的所有组合,并设置该规格的图片、价格、库存数据。
在这里插入图片描述

<template><div class="sku-list"><template v-if="!disabled"><div class="sku-list-head"><el-button type="primary" size="mini" @click="addSkuRow">添加规格</el-button></div><divclass="sku-list-item"v-for="(item, index) in skuData.attrList":key="index"><div class="sku-list-item-main"><div class="sku-list-item__layout"><span class="span">规格名</span><el-inputsize="small"v-model="item.attrName"class="input"></el-input></div><div class="sku-list-item__layout"><span class="span">规格值</span><div class="sku-list-item-tags"><el-tagclass="sku-list-item-tag"closable@close="removeSkuAttr(index)"v-for="(subitem, i) in item.attrValue":key="i">{{ subitem.attrValue }}</el-tag><el-buttonsize="small"icon="el-icon-plus"@click="addSkuAttr(index)">添加</el-button></div></div></div><el-buttontype="text"size="small"class="sku-list-item-removeBtn"@click="removeSkuRow(index)">删除规格</el-button></div></template><el-table border :data="skuData.skuList"><el-table-column label="规格图片" align="center" width="120"></el-table-column><el-table-columnlabel="规格名称"align="center"prop="attrPath"></el-table-column><el-table-column label="规格售价" align="center"><template slot-scope="scope"><el-input-number v-model="scope.row.priceCost" :precision="2" :min="0.01"/></template></el-table-column>
<!--      <el-table-column label="销售价格" align="center">-->
<!--        <template slot-scope="scope">-->
<!--          <el-input-->
<!--            :readonly="disabled"-->
<!--            v-model="scope.row.priceCash"-->
<!--          ></el-input>-->
<!--        </template>-->
<!--      </el-table-column>-->
<!--      <el-table-column label="划线价格" align="center">-->
<!--        <template slot-scope="scope">-->
<!--          <el-input-->
<!--            :readonly="disabled"-->
<!--            v-model="scope.row.priceOriginal"-->
<!--          ></el-input>-->
<!--        </template>-->
<!--      </el-table-column>--><el-table-column label="规格库存" align="center"><template slot-scope="scope"><el-input-number v-model="scope.row.stock" :min="0" :max="999999"/></template></el-table-column><!-- <el-table-column label="商品预警值" align="center"><template slot-scope="scope"><el-input :readonly="disabled" v-model="scope.row.stock"></el-input></template></el-table-column> --><!-- <el-table-column v-if="!disabled" label="操作" align="center"><template><el-button type="text" size="small">删除</el-button><el-button type="text" size="small">上移</el-button></template></el-table-column> --></el-table></div>
</template><script>
export default {model: {prop: "skuData",event: "changeSku",},props: {// skuData: {//   type: Object,//   default: () => ({}),// },disabled: {type: Boolean,default: false,},},data() {return {skuData: {attrList: [],skuList: [],initSkuList: []}};},watch: {"skuData.attrList": {handler() {if (!this.disabled) {this.$set(this.skuData, "skuList", this.getTable());}},deep: true,immediate: true,},},methods: {// 添加规格行addSkuRow(i) {// const attrList = this.skuData.attrList;// if (attrList === undefined) {//   const list = [{//     attrName: "",//     attrValue: []//   }]//   this.skuData.attrList = list;// } else {//   attrList.push({//     attrName: "",//     attrValue: []//   });// }this.skuData.attrList.push({attrName: "",attrValue: []})this.$emit("changeSku", this.skuData);},// 删除规格行removeSkuRow(i) {this.skuData.attrList.splice(i, 1);this.$emit("changeSku", this.skuData);},// 删除规格属性值removeSkuAttr(a, b) {this.skuData.attrList[a].attrValue.splice(b, 1);this.$emit("changeSku", this.skuData);},// 添加规格属性值addSkuAttr(i) {this.$prompt("请输入规格值", "添加规格值", {confirmButtonText: "确定",cancelButtonText: "取消",inputPattern: /\S+/,inputErrorMessage: "规格值不能为空",closeOnClickModal: false,}).then(({ value }) => {this.skuData.attrList[i].attrValue.push({attrValue: value,});this.$emit("changeSku", this.skuData);});},onUploadImgSuccess(res, file, row) {if (!file) {return;}row.icon = file;this.$emit("changeSku", this.skuData);},getTable() {const table = [];const attrValueAry = [];const arr = [];const tmpSkuData = (this.skuData.attrList || []).filter((d) => d.attrName !== "" && d.attrValue.length > 0);if (!tmpSkuData || tmpSkuData.length === 0) {return [];}tmpSkuData.forEach((item) => {attrValueAry.push(item.attrValue);});function func(skuArr = [], i) {for (let j = 0; j < attrValueAry[i].length; j++) {if (i < attrValueAry.length - 1) {skuArr[i] = attrValueAry[i][j];func(skuArr, i + 1);} else {arr.push([...skuArr, attrValueAry[i][j]]);}}}func([], 0);arr.forEach((item) => {let attrPath = "";// const findItem = {};// const tableItem = {};item.forEach((d, idx) => {attrPath += `${tmpSkuData[idx].attrName}:${d.attrValue};`;});const findItem =this.skuData.initSkuList.find((item) => {return attrPath.includes(item.attrPath);}) || {};const tableItem = Object.assign({priceCost: 0,priceCash: 0,priceOriginal: 0,stock: 0,icon: null,},findItem,{attrPath,});table.push(tableItem);});return table;},},
};
</script><style lang="scss" scoped>
.sku-list {&-head {margin-bottom: 10px;}&-item {display: flex;align-items: center;border: 1px solid #eee;border-radius: 5px;margin-bottom: 20px;padding: 20px 50px;&-main {flex: 1;}&-removeBtn {margin-left: 20px;color: #f56c6c;}&__layout {display: flex;align-items: center;margin-bottom: 20px;&:last-child {margin-bottom: 0;}.input {width: 240px;}.span {font-size: 13px;font-weight: bold;margin-right: 10px;}}&-tags {flex: 1;}&-tag {margin-bottom: 10px;margin-right: 10px;}}
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开启新零售时代,引领消费革命

开启新零售时代&#xff0c;引领消费革命 新零售的魅力在于它将线上线下融合&#xff0c;打破了传统零售的界限。以往&#xff0c;消费者需要亲自前往实体店面购物&#xff0c;但如今他们可以通过电子商务平台随时随地进行购物。这种便捷的消费方式不仅节省了时间和精力&#x…

【带头学C++】----- 九、类和对象 ---- 9.2 构造函数

目录 9.2 构造函数 9.2.1 构造函数的概述 9.2.2 构造函数定义方法&#xff08;初始化构造函数&#xff09; 9.2.3 提供构造函数的影响 9.2 构造函数 以下是一些C引入构造函数的原因&#xff1a; 初始化对象&#xff1a;构造函数允许在创建对象时立即初始化该对象的成员变量…

如何快速了解一家公司?

在炒股过程中&#xff0c;我们想要了解一家公司是否具有投资价值&#xff0c;需要查看和阅读很多公司的相关资料。股民们自行去查询往往会花费很多的时间精力&#xff0c;所以专业的炒股软件一般都会给股民提供这些现成的资料。 在金斗云智投APP内&#xff0c;进入到个股详情页…

mac修改默认shell为bash

1. 打开系统偏好设置 2. 点击用户群组 3. 按住ctrl&#xff0c;点击用户名 4. 点击高级选项&#xff0c;修改登录shell 参考&#xff1a;在 Mac 上将 zsh 用作默认 Shell - 官方 Apple 支持 (中国)

Node-red

Node-Red 什么是Node-redNode-red的特点 Node-red的Windows安装安装Node.js安装包下载安装包安装安装检查 安装Node-red安装Note-red运行Note-red 什么是Node-red Node-RED 是一种编程工具&#xff0c;用于以新颖有趣的方式将硬件设备、API 和在线服务连接在一起。 Node-RED 是…

手敲单链表,简单了解其运行逻辑

1. 链表 1.1 结构组成 链表是一种物理存储结构上非连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 链表的结构如下图所示&#xff0c;是由很多个节点相互通过引用来连接而成的&#xff1b;每一个节点由两部分组成&#xff0c;分别数据域&…

MySQL 索引,优化,回表,执行计划等相关总结学习

一、MySQL 执行流程 innoDB表引擎&#xff1a;默认的事务型引擎&#xff0c;最重要最广泛的存储引擎&#xff0c;性能非常优秀,数据村粗在共享表空间&#xff0c;可以通过配置分开,主键查询性能高于其他引擎 myISM表引擎&#xff1a;5.1版本前这个是默认的存储引擎&#xff0c…

第九节HarmonyOS 常用基础组件-Text

一、组件介绍 组件&#xff08;Component&#xff09;是界面搭建与显示的最小单位&#xff0c;HarmonyOS ArkUI声名式为开发者提供了丰富多样的UI组件&#xff0c;我们可以使用这些组件轻松的编写出更加丰富、漂亮的界面。 组件根据功能可以分为以下五大类&#xff1a;基础组件…

segment-anything安装教程

文章目录 一. segment-anything安装教程 一. segment-anything安装教程 官网安装说明:https://github.com/facebookresearch/segment-anything anaconda下新建一个环境 conda create -n sam python3.8激活新建的环境 conda activate sam更换conda镜像源 conda config --add ch…

Python过滤掉特定区域内的矩形框

Python过滤掉特定区域内的矩形框 前言前提条件相关介绍实验环境过滤掉特定区域内的矩形框方法一&#xff1a;直接法&#xff08;for循环遍历&#xff09;代码实现输出结果 方法二&#xff1a;列表推导式代码实现输出结果 前言 由于本人水平有限&#xff0c;难免出现错漏&#x…

Navicat Premium 16.3.3 Windows x64 Crack

增强您的表现。 Navicat 16 具有许多改进和功能&#xff0c;可以满足您的数据库开发需求。凭借 100 多项增强功能和全新界面&#xff0c;您可以探索构建、管理和维护数据库的新方法。构建时考虑到可用性。 Navicat 16 引入了许多 UI/UX 改进&#xff0c;以最大限度地提高您的效…

P4 链表的节点数统计与链表数据查找替换

目录 前言 01 链表的节点数统计 02 链表数据查找替换 2.1 残疾的数据查找 2.2 数据查找优化 前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C 》✨✨✨ &#x1f525; 推荐专栏2: 《 Linux C应用编程&#xff08;概念类&#xff09;》✨…

Java集合(二)

1. Map 1.1 HashMap 和 Hashtable 的区别 线程是否安全&#xff1a; HashMap 是非线程安全的&#xff0c;Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。&#xff08;如果你要保证线程安全的话就使用 ConcurrentHashMap 吧&#xff01;&…

C#,数值计算——插值和外推,谢别德(Shep)插值方法的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 谢别德插值方法 /// Object for Shepard interpolation using n points in dim dimensions. Call /// constructor once, then interp as many times as desired. /// &…

4.C转python

1.建立函数: def 函数名(形参): 函数体(记得写缩进) return 返回值(python中可以没有return) 2.调用函数: 函数名(实参) 实参和形参个数相等即可,类型不需要相同 其中接收返回值与C中的差不多 3.如果只是定义而不调用则函数不会执行 4.先定义函数,后调用 5.python中可以…

每天五分钟计算机视觉:ImageNet大赛的世界冠军AlexNet模型

AlexNet模型 2012 Imagenet 比赛第一&#xff0c;Top5准确度超出第二10% &#xff0c;它让人们认识到了深度学习技术的威力。比 LeNet更深&#xff0c;用多层小卷积层叠加替换大卷积层&#xff0c;就是说每一个卷积层的通道数小&#xff0c;不像LeNet一样每个卷积层的通道数很大…

记录华为云服务器(Linux 可视化 宝塔面板)-- 防火墙篇

文章目录 前言安装防火墙防火墙设置防火墙操作1.设置开机启动防火墙2.查看防火墙开放哪些端口3.重载防火墙配置&#xff08;修改配置后重新启动才生效&#xff09;4.查看防火墙状态5.开启防火墙6.关闭防火墙 若遇到无法开启查询已开放的端口查询端口是否开放&#xff08;80&…

Python爬虫-新能源汽车销量榜

前言 本文是该专栏的第11篇,后面会持续分享python爬虫案例干货,记得关注。 本文以懂车平台的新能源汽车销量榜单为例,获取各车型的销量排行榜单数据。具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。 废话不多说,跟着笔者直接往下看正文详细内容。(附带…

电梯安全远程监控系统的主要作用和意义

电梯是现代城市生活中必不可少的交通工具&#xff0c;为了保证其安全可靠的运行&#xff0c;电梯运行监测系统应运而生。本文将介绍电梯安全远程监控的工作原理、重要性 一、电梯安全远程监控系统的作用   ◆实时监控和故障预警&#xff1a;电梯安全远程监控系统可以实时监测…

加强网站稳定性!学习如何进行高效压力测试!

前言 1、什么是压力测试&#xff1f; 软件压力测试是一种基本的质量保证行为&#xff0c;它是每个重要软件测试工作的一部分。 软件压力测试的基本思路很简单&#xff1a;不是在常规条件下运行手动或自动测试&#xff0c;而是在计算机数量较少或系统资源匮乏的条件下运行测试…