mycart.js代碼
// pages/mycart/mycart.js
Page({
/**
* 頁面的初始資料
*/
data: {
goods: [{
id: 1,
name: "拼色短袖T恤",
model: "白色,S",
price: 22,
num: 1,
imgurl: "/image/src/good1.png"
},
{
id: 2,
name: "拼色短袖T恤",
model: "黑色,S",
price: 25,
num: 1,
imgurl: "/image/src/good2.png"
},
{
id: 3,
name: "拼色短袖T恤",
model: "藍色,S",
price: 28,
num: 1,
imgurl: "/image/src/good4.png"
},
{
id: 4,
name: "拼色短袖T恤",
model: "紫色,S",
price: 32,
num: 1,
imgurl: "/image/src/good6.png"
}
],
//所有商品的數
goodscount: 0,
is_edit: 0,
//是否全選,s是編輯模式
is_check_all_s: 0,
is_check_all_d: 0,
//結算時被選中的件數
select_scount: 0,
money: 0,
num_input: 1
},
/**
* 生命周期函數--監聽頁面加載
*/
onLoad: function(options) {
let goods = this.data.goods
let goodscount = 0
for (let i = 0; i < goods.length; i++) {
goodscount += goods[i].num
//添加一個新的屬性預設值為0,這個屬性用來判斷在編輯模式商品是否被選中
goods[i].dot_s = 0
//在非編輯模式下商品是否被選中
goods[i].dot_d = 0
}
this.setData({
goodscount: goodscount,
goods: goods
})
},
goshopping_func() {
wx.navigateTo({
url: '/pages/shop/shop',
})
},
//改變購物車模式
change_edit_func() {
let is_edit = this.data.is_edit
let goods = this.data.goods
let is_check_all_s = this.data.is_check_all_s
let is_check_all_d = this.data.is_check_all_d
if (is_edit == 1) {
for (let i = 0; i < goods.length; i++) {
//添加一個新的屬性預設值為0
goods[i].dot_s = 0
}
} else {
for (let i = 0; i < goods.length; i++) {
//添加一個新的屬性預設值為0
goods[i].dot_d = 0
}
}
this.setData({
is_edit: !is_edit,
goods: goods,
is_check_all_s: 0,
is_check_all_d: 0,
//改變購物車模式時,所有選中商品數清零
select_scount: 0,
money: 0
})
},
//商品在倆個模式中被選中時的處理
select_goods_func(e) {
let id = e.currentTarget.dataset.id
let goods = this.data.goods
let is_edit = this.data.is_edit
if (is_edit) {
for (let i = 0; i < goods.length; i++) {
if (goods[i].id == id) {
goods[i].dot_s = !goods[i].dot_s
}
}
} else {
for (let i = 0; i < goods.length; i++) {
if (goods[i].id == id) {
goods[i].dot_d = !goods[i].dot_d
}
}
//非編輯模式下統計選中商品數量和總金額
this.count_money(goods)
}
this.setData({
goods: goods,
})
},
//統計結算金額和結算商品數量
count_money(goods) {
let select_scount = 0
let money = 0
//在非編輯模式下每次選中商品重新統計被選中商品的件數
for (let i = 0; i < goods.length; i++) {
if (goods[i].dot_d) {
select_scount += goods[i].num
money += goods[i].num * goods[i].price
}
}
this.setData({
select_scount: select_scount,
money: money
})
},
//在不同模式下點選全選
is_check_all_func() {
let is_edit = this.data.is_edit
let goods = this.data.goods
let is_check_all_s = this.data.is_check_all_s
let is_check_all_d = this.data.is_check_all_d
if (is_edit) {
if (is_check_all_s) {
for (let i = 0; i < goods.length; i++) {
goods[i].dot_s = 0
}
} else {
for (let i = 0; i < goods.length; i++) {
goods[i].dot_s = 1
}
}
is_check_all_s = !is_check_all_s
} else {
if (is_check_all_d) {
for (let i = 0; i < goods.length; i++) {
goods[i].dot_d = 0
}
} else {
for (let i = 0; i < goods.length; i++) {
goods[i].dot_d = 1
}
}
is_check_all_d = !is_check_all_d
//在非編輯模式下每次全選商品重新統計被選中商品的件數
this.count_money(goods)
}
this.setData({
goods: goods,
is_check_all_s: is_check_all_s,
is_check_all_d: is_check_all_d,
})
},
//使用者點選删除按鈕
delete_func() {
let that = this
let goods = this.data.goods
let goodscount = 0
wx.showModal({
title: '提示',
content: '确認将已選中的删除嗎?',
success: function(res) {
if (res.confirm) {
goods = goods.filter(function(item) {
return !item.dot_s
});
//删除時從小計算所有商品數
for (let i = 0; i < goods.length; i++) {
goodscount += goods[i].num
}
that.setData({
goods: goods,
goodscount: goodscount
})
} else if (res.cancel) {
console.log('使用者點選取消')
}
}
})
},
//購物車商品數量改變
num_input_change_func(e) {
let num_input = e.detail.value
let id = e.currentTarget.dataset.id
let goods = this.data.goods
if (num_input.length == 1) {
num_input = parseInt(num_input.replace(/[^1-9]/g, ''))
} else if (num_input.length > 1) {
num_input = parseInt(num_input.replace(/\D/g, ''))
} else {
num_input = 1
}
for (let i = 0; i < goods.length; i++) {
if (goods[i].id == id) {
goods[i].num = num_input
}
}
//非編輯模式下統計選中商品數量和總金額
this.count_money(goods)
},
reduce_func(e) {
let id = e.currentTarget.dataset.id
let goods = this.data.goods
for (let i = 0; i < goods.length; i++) {
if (goods[i].id == id) {
if (goods[i].num > 1) {
goods[i].num = goods[i].num - 1
}
}
}
//再重新統計
this.count_money(goods)
this.setData({
goods: goods
})
},
add_func(e) {
let id = e.currentTarget.dataset.id
let goods = this.data.goods
for (let i = 0; i < goods.length; i++) {
if (goods[i].id == id) {
if (goods[i].num < 9999) {
goods[i].num = goods[i].num + 1
}
}
}
//再重新統計
this.count_money(goods)
this.setData({
goods: goods
})
},
})
mycart.wxml 檔案
<view class="container">
<view class="outer_layer">
<block wx:if="{{goods.length>=1}}">
<view class="goods_edit_view">
<view class="goods_edit_left_view">
<text>全部寶貝{{goodscount}}件</text>
</view>
<view class="goods_edit_right_view" bindtap="change_edit_func">
<text>{{is_edit?"完成":"編輯"}}</text>
</view>
</view>
<view class="goods_view">
<block wx:for="{{goods}}" wx:key="unique">
<view class="good_view" >
<view class="good_left_view" data-id="{{item.id}}" bindtap="select_goods_func">
<view class="dot_view">
<block wx:if="{{is_edit?item.dot_s:item.dot_d}}">
<view class="dot_s"></view>
</block>
</view>
</view>
<view class="good_center_view">
<view class="good_center_img_view">
<image class="good_img" src="{{item.imgurl}}" mode="widthFix"></image>
</view>
<view class="good_center_col">
<view class="good_name_view">
<text>{{item.name}}</text>
</view>
<view class="good_model_view">
<text>{{item.model}}</text>
</view>
<view class="priceandnum_view">
<view class="good_price_view">
<text>¥{{item.price}}</text>
</view>
<view class="num_change_view" hidden="{{is_edit}}">
<image class="reduce_img" bindtap="reduce_func" src="/image/reduce.png" data-id="{{item.id}}" mode="widthFix"></image>
<input class="num_input" type="number" maxlength="4" placeholder="" value="{{goods[index].num}}" data-id="{{item.id}}" bindinput="num_input_change_func" />
<image class="add_img" bindtap="add_func" src="/image/add.png" data-id="{{item.id}}" mode="widthFix"></image>
</view>
</view>
</view>
</view>
</view>
</block>
</view>
<!-- 這裡是底部結算按鈕區域 -->
<view class="cart_bottom_vew">
<view class="cart_bottom_left_view" bindtap="is_check_all_func">
<view class="dot_view">
<block wx:if="{{is_edit?is_check_all_s:is_check_all_d}}">
<view class="dot_s"></view>
</block>
</view>
<text class="dot_text">全選</text>
</view>
<view class="cart_bottom_right_view">
<block wx:if="{{is_edit}}">
<view class="del_btn" bindtap="delete_func">
<text>删除</text>
</view>
</block>
<block wx:else>
<view class="settlement_view">
<view class="settlement_left_view">
<view>
<text>合計:<text style="color:#4528A7;font-size:32rpx;">¥{{money}}</text></text>
</view>
<view style="color:#4D4D4D;font-size:26rpx;">
<text>總額{{money}}元,活動優惠0元</text>
</view>
</view>
<view class="del_btn">
<text>去結算({{select_scount}}件)</text>
</view>
</view>
</block>
</view>
</view>
</block>
<block wx:else>
<view class="no_goods_view">
<view class="no_good_view">
<text>您的購物車還沒有商品</text>
</view>
<view class="goshopping_view" bindtap="goshopping_func">
<text class="goshopping_text">去購物</text>
</view>
</view>
</block>
</view>
</view>
mycart.wxss檔案
.container {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
box-sizing: border-box;
color: #1a1311;
font-size: 30rpx;
}
.outer_layer {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
padding-bottom: 40rpx;
}
.no_goods_view {
display: flex;
flex-direction: column;
margin-top: 420rpx;
align-items: center;
}
.no_good_view {
color: #515c6f;
font-size: 48rpx;
font-weight: 600;
}
.goshopping_view {
margin-top: 30rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
width: 180rpx;
height: 60rpx;
border: 1rpx solid #515c6f;
}
.goshopping_text {
color: #515c6f;
}
.goods_edit_view {
width: 100%;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
/* padding: 0rpx 30rpx; */
height: 100rpx;
border-top: 1rpx solid #e0e0e0;
border-bottom: 1rpx solid #e0e0e0;
color: #515c6f;
position: fixed;
background-color: #fff;
}
.goods_edit_left_view {
padding-left: 30rpx;
}
.goods_edit_right_view {
padding-right: 30rpx;
}
.goods_view {
display: flex;
flex-direction: column;
margin-top: 100rpx;
margin-bottom: 100rpx;
}
.good_view {
min-height: 200rpx;
padding: 20rpx 10rpx;
display: flex;
flex-direction: row;
border-bottom: solid #e0e0e0 1rpx;
}
.good_left_view {
width: 100rpx;
height: 200rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
.dot_view {
border-radius: 50%;
width: 35rpx;
height: 35rpx;
padding: 5rpx;
border: 1rpx solid #e0e0e0;
}
.dot_s {
width: 100%;
height: 100%;
border-radius: 50%;
background-color: #4528a7;
}
.good_center_view {
height: 200rpx;
overflow-y: hidden;
display: flex;
flex-direction: row;
}
.good_img {
width: 200rpx;
}
.good_center_col {
display: flex;
flex-direction: column;
justify-content: space-between;
margin-left: 15rpx;
width: 400rpx;
}
.good_name_view {
color: #515c6f;
font-weight: 600;
}
.good_model_view {
color: #838383;
width: 400rpx;
font-size: 28rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.priceandnum_view{
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
height: 90rpx;
}
.good_price_view {
font-size: 38rpx;
color: #4528a7;
}
/* 數量選擇 */
.num_change_view{
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
border: 1rpx solid #e0e0e0;
}
.reduce_img {
width: 20rpx;
height: 20rpx;
padding: 30rpx;
}
.add_img {
width: 20rpx;
height: 20rpx;
padding: 30rpx;
}
.num_input{
width: 70rpx;
height: 30rpx;
font-size: 28rpx;
text-align: center;
}
.cart_bottom_vew{
position: fixed;
width: 100%;
height: 120rpx;
background-color: #fff;
bottom:1rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
z-index: 2;
}
.cart_bottom_left_view{
color: #070203;
font-size: 28rpx;
margin-left: 20rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
}
.cart_bottom_right_view{
margin-right: 15rpx;
}
.dot_text{
margin-left: 20rpx;
}
.del_btn{
font-size: 26rpx;
padding: 0rpx 10rpx;
min-width: 150rpx;
height: 70rpx;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
background-color: #4528A7;
border-radius: 15rpx;
color: #fff;
}
.settlement_view{
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.settlement_left_view{
display: flex;
flex-direction: column;
align-items: flex-end;
margin-right: 10rpx;
justify-content: center;
}
mycart.json 檔案
{
"usingComponents": {},
"navigationBarTitleText": "購物車"
}