JS实现商品SKU

news2024/11/15 5:46:07

<!DOCTYPE html>
<html>
<head>
  <title>商品SKU</title>
	<link rel="stylesheet" href="element/css/element.css">
	<style>
		*{ margin:0; padding:0px; box-sizing: border-box; }
		ul,li{ list-style-type: none;}
		body{ font-size: 12px;}
		[v-lock]{ display: none;}
		.el-input__inner{ height:30px; line-height:30px;}
		.el-button{height:30px; line-height:30px;  padding:0 10px; }
		.el-button.is-round{ height:30px; line-height:30px; background: none; border:0; color:#F56C6C; padding:0 10px;}
		.flex{ display: flex; align-items: center;}
		.between{ display: flex; align-items: center; justify-content: space-between;}
		.center{display: flex; align-items: center; justify-content: center;}
		.mt10{ margin-top:10px;}
		.specbox{ padding:20px; }
		.specbox .spec-top li{ background:#f5f5f5; padding:20px; margin-bottom: 10px; }
		.specbox .spec-top li .tit{ width:100px; text-align: right; line-height:30px;}
		.specbox .spec-top li .hm{ display: flex;}
		.specbox .spec-top li .hm .tit{ margin-top:10px;}
		.specbox .spec-top li .val{ flex: 1; display: flex; flex-wrap: wrap; }
		.specbox .spec-top li .val .itm{ margin:10px 20px 0px 0; position: relative;}
		.specbox .spec-top li .val .itm .el-input__inner{ width:100px;}		
		.specbox .spec-top li .val .itm .c{ position: absolute; right:0; top:0; color:#999; }
		.specbox .spec-top li .val .itm .add{ padding:0;}
		.specbox .spec-table{ border-collapse:collapse; width:100%; border-left:1px solid #eee; border-top:1px solid #eee;}
		.specbox .spec-table tr th{ border-bottom: 1px solid #eee; background:#f9f9f9; border-right: 1px solid #eee; padding:10px;}
		.specbox .spec-table tr td{ text-align: center; border-bottom: 1px solid #eee; width:130px; background:#fff; border-right: 1px solid #eee; padding:10px;}
		.specbox .spec-table tr td .el-input__inner{ text-align: center; padding:0 5px;}
		.specbox .spec-table tr td.td1{width:auto;}
	</style>
</head>
<body>
	
  <div id="app" v-lock>
		<div class="specbox">
			<ul class="spec-top">
				<li v-for="(item,index) in specList" :key="index">
					<div class="ht flex">
						<div class="tit">规格:</div> 
						<div class="val">
							<el-input style="width:254px;" v-model="item.label" placeholder="请输入规格名称"></el-input>
							<el-button type="danger" icon="el-icon-delete" @click="delSpec(index)" round></el-button>
						</div>
					</div>
					<div class="hm">
						<div class="tit">规格值:</div>
						<div class="val">
							<div class="itm flex" v-for="(a,i) in item.attr" :key="i">
								<el-input v-model="a" placeholder="请输入"></el-input>
								<el-button class="c" v-if="i!=0" type="danger" @click="delAttr(item.attr,i)" icon="el-icon-close" round>
							</div>
							<div class="itm"><el-button type="text" @click="addAttr(item.attr)" class="add">添加规格值</el-button></div>
						</div>
					</div>
				</li>			
			</ul>
			<el-button type="primary" class="mt10" @click="addSpec">新增规格</el-button>
			<h3 class="mt10">规格明细</h3>
			<table class="spec-table mt10">
				 <tr>
					 <th v-for="(item,index) in specList" :key="index">{{item.label}}</th>
					 <th>规格图片</th>
					 <th>售价/元</th>
					 <th>成本价</th>
					 <th>兑换积分</th>
					 <th>库存</th>
					 <th>规格编码</th>
					 <th>规格状态</th>
				 </tr>
				 <tr v-for="(item,index) in specData" :key="index">
					 <td class="td1" v-for="(a,i) in item.spec" :key="i">{{a}}</td>
					 <td>上图</td>
					 <td><el-input v-model="item.price"></el-input></td>
					 <td><el-input v-model="item.costPrice"></el-input></td>
					 <td><el-input v-model="item.score"></el-input></td>
					 <td><el-input v-model="item.stock"></el-input></td>
					 <td style="width:150px;"><el-input v-model="item.code"></el-input></td>
					 <td><div class="center"><el-switch v-model="item.status"></el-switch></div></td>
				 </tr>
			</table>
		</div>
		
	</div>
	
	<script src="element/js/vue.min.js"></script>
	<script src="element/js/element.js"></script>
  <script>
		new Vue({
			el:'#app',
			data:{
				specList:[
					{label:'规格1', attr:['属于1']},
					{label:'规格2', attr:['2属于1','2属于2','2属于3']}
				],
				specData:[],
				specItem: {img:'',price:'0.00',costPrice:'0.00',score:0,stock:10, code:'', status:1}
			},
			
			watch:{
				specList:{
					handler:function(newVal,oldVal){
						this.setSpecData(newVal)
					},
					deep:true
				}
			},
			
			mounted() {	
				this.specItem.code = this.getRand(14,'S');
				this.setSpecData(this.specList)
			},
			
			methods:{
				
				getRand(length, prefix) {
					return (function (time, code) {
							code += parseInt(time.substr(0, 1)) + parseInt(time.substr(1, 1)) + time.substr(2, 8);
							while (code.length < length) code += Math.round(Math.random() * 10);
							return code;
					})(Date.now().toString(), prefix || '' + '')
				},
				
				// 递归函数,用于生成所有规格组合的算法
				generateSpecifications(specs, index, current, result) {				
					if (index === specs.length) {				
					  result.push(current);
					  return;
					}
				  for (var i = 0; i < specs[index].attr.length; i++) {
				    var next = current.slice();
				    next.push(specs[index].attr[i]);
				    this.generateSpecifications(specs, index + 1, next, result);
				  }
				},
				
				//设置规格值
				setSpecData(arr){
					let result = [], list = [];
					this.generateSpecifications(arr, 0, [], result);
					result.forEach(res=>{
						 list.push({spec:res,...this.specItem})
					})
					this.specData = list
				},
				
				addSpec(){
					let len = this.specList.length+1
					this.specList.push({label:'规格'+len, attr:['属于1']})
					this.setSpecData(this.specList)
				},				
				
				addAttr(attr, i){
					let len = attr.length+1
					attr.push('属性'+len)
				},
				delSpec(index){
					this.specList.splice(index,1)
				},				
				delAttr(attr,i){
					attr.splice(i,1);
				},					
				
			}
		})
  </script>
</body>
</html>

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

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

相关文章

Python武器库开发-高级特性篇(八)

高级特性篇(八) 高阶函数 Python作为一门高级编程语言&#xff0c;拥有着强大的函数式编程能力。其中高阶函数就是Python函数式编程的重要组成部分。在Python中&#xff0c;函数可以被当作变量一样进行操作&#xff0c;包括作为参数传递给其他函数&#xff0c;或者作为返回值…

DBSCAN算法c++实现

首先计算出距离每个点e以内的点&#xff0c;如果个数>minPts,则找出它的直接密度可达和间接可达的点&#xff0c;用visited标记点是否已经在簇中&#xff0c;循环直到最后一个点。 #include <fstream> #include <vector> #include <iostream> #include &…

Leetcode.树形DP

目录 543.二叉树的直径 124.二叉树中的最大路径和 2246.相邻字符不同的最长路径 543.二叉树的直径 用递归来写 考虑 树形DP 维护以当前节点为根节点的最大值&#xff0c;同时返回给父节点经过当前节点的最大链的长度&#xff0c;这有个trick 当遍历到空节点的时候返回-1 递归…

mq消费并发排队及幂等机制实现

一&#xff0c;解决什么问题及实现方案 主要为了解决并发访问排队执行及重复下发保证幂等的问题 实现技术方案 如何实现并发访问时&#xff0c;请求排队执行方法。Redssion 如何实现MQ重复下发时&#xff0c;保证幂等。redis 先插入一个分布式锁的话题&#xff0c;如下&am…

LeetCode 740.删除并获得点数---->打家劫舍

前言&#xff1a;简单写写自己对这道题的拙见&#xff0c;如有意见或者建议可以联系笔者owo 首先&#xff0c;看看完整题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获…

归并排序(java)

大家好我是苏麟 , 今天说说归并排序 . 归并排序 递归 正式学习归并排序之前&#xff0c;我们得先学习一下递归算法。 定义&#xff1a; 定义方法时&#xff0c;在方法内部调用方法本身&#xff0c;称之为递归. public void show(){System.out.println("aaaa")…

SEACALL海外呼叫中心系统的优势包括

SEACALL海外呼叫中心系统的优势包括 封卡封号问题解决 海外呼叫中心系统通过API开放平台能力&#xff0c;定制电话营销系统&#xff0c;提供多项功能如自动拨打、智能应答、真人语音交互等&#xff0c;帮助企业克服员工离职率高、客户资源流失严重等挑战。 - 高级管理者操控 …

《实现领域驱动设计》

DDD入门 1.1 DDD是什么&#xff1f; DDD是一种软件开发方法 DDD将领域专家和开发人员聚集到一起&#xff0c;开发的软件能够反映出领域专家的思维模型。目标是&#xff1a;交付最具业务价值的软件。DDD关注业务战略&#xff1a;指引我们如何实现面向服务架构&#xff08;ser…

开题报告怎么写?-案例+模板保姆级)

以前导师让们带本科生开题报告&#xff0c;我深知开题报告在学术研究中的重要性。一个出色的开题报告能够展示学生的科学思维、研究能力和创新潜力。 在本篇博客中&#xff0c;我将为大家详细介绍如何撰写史上最强开题报告。 将从课题的 科学意义国内外研究概况和发展趋势应…

SourceTree 使用

如何拉取远程仓库&#xff1f;如何拉去远程分支&#xff1f;如何创建本地分支&#xff1f;如何删除本地分支&#xff1f;如何删除远端分支&#xff1f; 删除了远程分支&#xff0c;如果本地还有此分支&#xff0c;那么是可以通过推送本地分支来还原远端分支。如何合并本地分支&…

2023中国计算机大会:蚂蚁集团连发两支百万级科研基金

10月26日&#xff0c;中国计算机学会&#xff08;CCF&#xff09;主办的第二十届中国计算机大会(CNCC2023)在沈阳举行。在“CCF-蚂蚁科研基金及产学研合作交流活动”上&#xff0c;蚂蚁集团发布了2023年度“CCF-蚂蚁科研基金”绿色计算及隐私计算两支百万级专项基金&#xff0c…

动态代理IP怎么设置?动态代理IP有哪些应用场景?

动态代理IP是指代理服务器会根据实际IP地址的变化而变化&#xff0c;可以帮助用户隐藏真实的IP地址&#xff0c;同时可以在不同的网络环境下使用不同的代理IP地址。下面是动态代理IP的设置和应用场景&#xff1a; 一、动态代理IP怎么设置&#xff1f; 1. 手动设置代理IP地址 用…

基于Arduino的物流分拣控制系统设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、控制系统设计1.1系统方案1.2 系统工作原理1.3方案设计1.3.1快递检测电路方案设计1.3.2控制电路方案设计 二、硬件…

【Java基础】File类与IO流

File类与IO流 文章目录 File类与IO流1. java.io.File类的使用1.1 概述1.2 构造器1.3 作用 2. IO流原理及流的分类2.1 流的分类2.3 流的API 3. 节点流之一&#xff1a;FileReader\FileWriter3.1 Reader与Writer3.3 关于flush&#xff08;刷新&#xff09; 4. 节点流之二&#xf…

GPIO常见名词——推挽、开漏、浮空、上拉、下拉、高阻态

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 1、前言…

VTK OrientationMarker 方向 三维坐标系 相机坐标轴 自定义坐标轴

本文 以 Python 语言开发 我们在做三维软件开发时&#xff0c;经常会用到相机坐标轴&#xff0c;来指示当前空间位置&#xff1b; 坐标轴效果&#xff1a; 相机方向坐标轴 Cube 正方体坐标轴 自定义坐标轴&#xff1a; Code&#xff1a; Axes def main():colors vtkNamedC…

以太网通讯与485通讯哪个好?

随着工业自动化、物联网和信息技术的快速发展&#xff0c;数据传输成为了各个领域越来越关注的问题。在众多通讯技术中&#xff0c;以太网通讯和485通讯被广泛应用于各种场景。那么&#xff0c;这两种通讯技术究竟哪个更好呢&#xff1f;接下来&#xff0c;小编就来为大家一一讲…

使用Terraform管理已经存在的kubernates和默认的节点池

背景&#xff1a; 通过terraform resource "alicloud_cs_managed_kubernetes" "k8s" {...}创建集群时&#xff0c;会产生一个默认的节点池default-nodepool&#xff0c;但是如何去修改这个默认节点池的信息呢&#xff1f; 解决思路&#xff1a; 因为Ter…

LLM系列-大模型技术汇总

LLM系列-大模型技术汇总 1. 大模型技术汇总-参数高效迁移学习方法2. 千亿模型并行训练技术2.1. 数据并行&#xff08;Data Parallelism&#xff0c;DP&#xff09;2.2. 模型并行&#xff08;Model Parallelism&#xff0c;MP&#xff09;2.2.1. 流水线并行&#xff08;Pipeline…

Ubuntu16.04 python matplotlib 输出轴标签出现中文乱码

问题&#xff1a;坐标轴打印中文时&#xff0c;显示会乱码 import matplotlib.pyplot as plt plt.ylabel(时间刻度)原因&#xff1a;matplotlib里面没有中文字体解决方法&#xff1a;下载SimHei字体&#xff0c;快捷方法是使用everything直接在windows搜索simhei.ttf&#xff…