JS实现商品SKU

这篇具有很好参考价值的文章主要介绍了JS实现商品SKU。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JS实现商品SKU,SKU,javascript文章来源地址https://www.toymoban.com/news/detail-719096.html

<!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>

到了这里,关于JS实现商品SKU的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 获取主流电商平台商品价格,库存信息,数据分析,SKU详情

    要接入API接口以采集电商平台上的商品数据,可以按照以下步骤进行: 1、找到可用的API接口:首先,需要找到支持查询商品信息的API接口。这些信息通常可以在电商平台的官方文档或开发者门户网站上找到。 2、注册并获取API密钥:在使用API接口之前,需要注册并获取API密钥

    2024年01月19日
    浏览(58)
  • HTML+CSS+JavaScript:两种方法实现商品价格筛选效果

    鼠标点击上方菜单栏中不同的价格区间,自动筛选出价格符合条件的商品,并渲染在页面中   以下是缺失JS部分的代码,感兴趣的小伙伴可以先自己试着写一写 1、封装渲染函数,传入的参数为数组对象,将数组中的每一个对象进行数据处理,再渲染到页面中 2、利用事件委托

    2024年02月14日
    浏览(65)
  • taro.js和nutui实现商品选择页面

    1. 首先安装 Taro.js 和 NutUI: ``` npm install -g @tarojs/cli npm install taro-ui ``` 2. 创建 Taro 项目并进入项目目录: ``` taro init myapp cd myapp ``` 3. 选用 Taro 模板一并安装依赖: ``` npm install ``` 4. 在页面目录中创建商品选择页: ``` taro create --name goods --type page ``` 5. 在 `goods.jsx`中导入并使用

    2024年02月11日
    浏览(44)
  • JavaScript深拷贝(js深拷贝,JavaScript递归函数,实现深拷贝)

    简述:JavaScript的深拷贝和浅拷贝大家都比较熟悉,今天来分享下深拷贝,就是使用该函数时,会复制拷贝一份该数据,修改该数据属性,不会改变原有数据,就是把复制的对象所引用的对象全都复制了一遍,具体实现如下; 1、定义拷贝对象; 2、定义递归函数deepClone(),实现

    2024年02月15日
    浏览(62)
  • 【JS】js数组分组,javascript实现数组的按属性分组

    项目代码中有很多时候需要按一定的条件实现按属性分组 你可以使用JavaScript的 Array.prototype.reduce() 方法来将数组分组。这是一种高级的方法,它可以将数组元素组合成一个单值。在这种情况下,你可以使用它来把数组元素放到一个对象中,其中对象的键是分组的条件,值是所

    2023年04月08日
    浏览(50)
  • SpringBoot实战项目整合RabbitMQ+ElaticSearch实现SKU上下架功能

    😊 @ 作者: Eric 💖 @ 主页: https://blog.csdn.net/weixin_47316183?type=blog 🎉 @ 主题: SpringBoot实战项目整合RabbitMQ+ElaticSearch实现SKU上下架功能 ⏱️ @ 创作时间: 2023年07月03日 最终实现效果:针对SKU的上下架 上架效果: 1、后台选择 SKU ,点击上架,该 SKU 修改为 上架 状态 2、同时向

    2024年02月11日
    浏览(41)
  • 【JavaScript】原生js实现省市区联动效果

    😉博主:初映CY的前说(前端领域) ,📒本文核心:用原生js实现省市区联动 【前言】今日在复习省市县三级联动的时候,有点忘了原生的js应该怎么样处理省市县的联动,特此写下来再次复习下 1.获取相对应的DOM对象 2.写省市县接口获取到接口信息 3.写下change事件,有变化时调

    2023年04月24日
    浏览(54)
  • JavaScript实现点击复制(JS访问剪贴板相关)

    一、具体代码 ​ 网页前端开发中有时会出现这样的场景:让用户点击某个按钮,然后就能直接复制对应的文本内容,让用户可以将文本内容粘贴到想要粘贴的地方,常用于分享功能模块中。如果想要实现这种效果就需要我们去访问用户的剪贴板,然后把想要复制的内容写入

    2024年02月11日
    浏览(41)
  • 【JavaScript】JS实用案例分享:动态生成分页组件 | 通过按键实现移动控制

    CSDN话题挑战赛第2期 参赛话题:学习笔记 🖥️ NodeJS专栏:Node.js从入门到精通 🖥️ 博主的前端之路( 源创征文一等奖作品 ):前端之行,任重道远(来自大三学长的万字自述) 🖥️ TypeScript知识总结:TypeScript从入门到精通(十万字超详细知识点总结) 🧑‍💼 个人简介

    2023年04月21日
    浏览(77)
  • [JavaScript]使用opencv.js实现基于傅里叶变换的频域水印(隐水印)

    PS:查了多方资料,都没有提到用 JavaScript 来实现频域水印的教程,故经过笔者的实践,遂写一篇教程来简单介绍。 通过了解频域水印的相关知识,我理解了频域水印就是先将图片进行傅里叶变换,得到频域图,然后将水印文字加到频域图中,在将频域图转换回去得到加了频

    2024年02月09日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包