close
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="http://cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js"></script>
	<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
	<style type="text/css">
		.cart .clearpadding div{
			padding: 0;
			overflow: hidden;
		}
		.cart .row{
			border: 1px solid #aaa;
			text-align: center;
		}
		.cart .totalrow{
			text-align: right;
		}
		.red{
			color:#a00;
		}
	</style>
</head>
<body>
	<div id="app">
		<div class="container">
			<div class="row">
				<div class="col-sm-5">
					<h1>商品列表</h1>
					<input type="text" v-model='search'>
					<button v-on:click='sortit("name")'>按我篩選商品項目</button>
					<div class="row" v-for='product in products | filterBy search in "name" | orderBy accordingTo ascendOrDescend '>
						<div class="col-sm-12">{{product.name}}</div>
						<div class="col-sm-12">
							<ul>
								<li v-for='opt in product.options'>		
									{{opt.details}} {{opt.price|currency}}
									<button v-on:click='addToCart(product,opt)' class="btn btn-success btn-xs">+</button>
								</li>
							</ul>					
						</div>
					</div>
				</div>
				<div class="col-sm-7 cart">
					<h1>購物車</h1>
					<div class="row clearpadding">
						<div class="col-sm-1">商品編號</div>
						<div class="col-sm-3">名稱</div>
						<div class="col-sm-3">價格</div>
						<div class="col-sm-2">數量</div>
						<div class="col-sm-2">小計</div>
					</div>
					<div class="row clearpadding" v-for='cartItem in incart'>
						<div class="col-sm-1">{{cartItem.id}}</div>
						<div class="col-sm-3">{{cartItem.name}}</div>
						<div class="col-sm-3">{{cartItem.price | currency}}</div>
						<div class="col-sm-2">
							<div class="col-sm-5">
								{{cartItem.quantity}}
							</div>
							<div v-if='cartItem.name != "小費"' class="col-sm-7">
								<button class="btn btn-danger btn-xs" @click='addOne(cartItem)'>+</button>
								<button class="btn btn-danger btn-xs" @click='removeOne(cartItem)'>-</button>
							</div>
						</div>
						<div class="col-sm-2">
							{{cartItem | subtotal | currency}}
							<button class="btn btn-danger btn-xs" @click='removeElement(cartItem)'>x</button>	
						</div>
					</div>
					<div class="row">
						<div class="col-sm-12 discount">
							<div v-if='countTotal >100' class="text-right">
								折價:{{discountedMuch | currency}}
							</div>
							<div v-else class="text-right">
								消費超過100元,打九折
							</div>
						</div>
					</div>
					<div class="row totalrow">
						<div class="col-sm-12">
							<p>購買總數量:{{countQuantity}} 
							總價:<span v-bind:class='{red :discountedMuch}'>{{countTotal | currency}}</span></p>
						</div>
					</div>
					<div class="row">
						小費<input type="number" v-model='newTip'> 
						<button class="btn btn-success" @click='addTip'>給小費</button>
						<button class="btn btn-danger" @click='clearCart'>清空購物車</button>
					</div>
				</div>
			</div>
		</div>
	</div>
	<script type="text/javascript">
		var inventory=[
			{
				name:'Usb stick',
				options:[{
					id:1,
					details:'16GB',
					price:6.95
				},{
					id:2,
					details:'32GB',
					price:12.95
				},{
					id:3,
					details:'64GB',
					price:25.95
				}]
			},{
				name:'Usb plug',
				options:[{
					id:4,
					details:'3ft cable',
					price:4.35
				}]
			},{
				name:'small phone',
				options:[{
					id:5,
					details:'nokia phone',
					price:4.35
				}]
			},{
				name:'camera',
				options:[{
					id:6,
					details:'blue camaera',
					price:76.50
				},{
					id:7,
					details:'red camaera',
					price:76.50
				},{
					id:8,
					details:'yellow camaera',
					price:76.50
				},{
					id:9,
					details:'purple camaera',
					price:76.50
				}]
			}
		];
		var incart=[];
		Vue.filter('subtotal',function(cartItem){
			return cartItem.price*cartItem.quantity;
		});
		var vm = new Vue({
			el: "#app",
			data:{
				products:inventory,
				search:'',
				ascendOrDescend:1,
				accordingTo:'',
				incart:incart,
				newTip:10,
				deal:0
			},
			methods:{
				sortit:function(name){
					this.ascendOrDescend*=-1;
					this.accordingTo=name;
				},
				addToCart:function(product,opt){
					var newCartItem={};
					newCartItem.name=product.name+' '+opt.details;
					newCartItem.price=opt.price;
					newCartItem.id=opt.id;
					var newQua=1;
					/*整個購物車都倒出來檢查*/
					for (var i in this.incart) {
						/*如果商品編號相同*/
						if(this.incart[i].id===opt.id){
							/*新的數量就要加一*/
							newQua=parseInt(this.incart[i].quantity)+1;
							/*找到重複的這個商品物件在陣列中的位置*/
							var theDoubleOneIndex=this.incart.indexOf(this.incart[i]);
							/*把這個陣列從這個位置開始刪掉一個*/
							this.incart.splice(theDoubleOneIndex,1);
						}
					}
					newCartItem.quantity=newQua;
					this.incart.push(newCartItem);
				},
				addOne:function(cartItem){
					cartItem.quantity++;
				},
				removeOne:function(cartItem){
					cartItem.quantity--;
					if(cartItem.quantity<=0){
						/*用編號找會比較麻煩,直接用物件找*/
						this.incart.splice(cartItem,1);
					}
				},
				removeElement:function(cartItem){
					/*跟上面的splice效果相同*/
					this.incart.$remove(cartItem); 
				},
				addTip:function(){
					var newTip={
						price:this.newTip,
						name:'小費',
						quantity:1,
						id:new Date().getTime()
						/*小費用時間來區隔*/
					}
					this.incart.push(newTip);
				},
				clearCart:function(){
					this.incart=[];
					this.countTotal=0;
				}
			},
			computed:{
				countQuantity:function(){
					var countQuantity=0;
					for (var i in this.incart) {
						countQuantity += parseInt(this.incart[i].quantity);
					}
					return countQuantity;
				},
				countTotal:function(){
					var countTotal=0;
					for (var i in this.incart) {
						countTotal += parseInt(this.incart[i].quantity*this.incart[i].price);
					}
					return countTotal;
				},
				discountedMuch:function(){
					if(this.countTotal>100){
						return this.countTotal - (this.countTotal*0.9);
					}else{
						return 0;
					}
				}
			}
		});
		Vue.config.devtools = true;
	</script>
</body>
</html>

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Jerry 的頭像
    Jerry

    Bug倉庫 // 程式日記

    Jerry 發表在 痞客邦 留言(0) 人氣()