
<import src="../../wxParse/wxParse.wxml" />
<import src="../../templates/toast/toast.wxml" />
<scroll-view class="page" scroll-y="true" id="product-detail">
<view class="section swiper-container">
<swiper indicator-dots="{{indicatorDots}}" autoplay="true" interval="3000" duration="300" bindchange="currentchange">
<block wx:for="{{product.picture}}">
<swiper-item class="picture">
<image mode="aspectFill" src="{{item}}"></image>
</swiper-item>
</block>
</swiper>
<text class="index-con">{{current}} / {{product.picture.length}}</text>
</view>
<view class="product-detail">
<view class="detail product-name">{{product.goods_name}}</view>
<view class="detail product-price">¥ {{product.goods_price}}</view>
<view class=" product-market">
<text>市场价:¥ {{product.market_price}}</text>
<text class="product-sold">已售{{product.sold_count}}件</text>
</view>
</view>
<view class="product-car">
<button class="car" bindtap="navigateToCart">
<view class="cart-wrapper">
<image src="../../images/cart.png"></image>
<text class="badge badge-animation" wx:if="{{cartNum>0}}">{{cartNum}}</text>
</view>
</button>
<button class="add-car" bindtap="addCar">加入到购物车</button>
</view>
<view class="product-recommend">
<view wx:for="{{wxParseData}}" wx:for-item="activity">
<view wx:for="{{activity.child}}" wx:for-item="act">
<view wx:if="{{activity.tag == 'p'}}">{{act.text}}</view>
<view class="con-text-center" wx:if="{{act.tag == 'img' || act.tag == 'gif'}}">
<image src="{{act.attr.src}}" mode="aspectFit"></image>
</view>
</view>
</view>
</view>
<view class="adding-to-cart-popup-background" style="display:{{popDisplay}}">
<view class="adding-to-cart-popup">
<view class="header">
<view class="close" bindtap="closePop"><image src="close.png"></image></view>
<image alt="" class="product-image" src="{{product.goods_image}}"></image>
<view class="product-info">
<view class="stock-price text-primary p">¥ {{goodsPrice}}</view>
<view class="stock p">库存{{totalStock}}件</view>
<view class="spec-title p">请选择口味和重量</view>
</view>
</view>
<view class="section">
<view class="specs" wx:for="{{product.spec}}" wx:for-item="spec">
<text class="h2">{{spec.spec_name}}</text>
<view class="spec-btns">
<button wx:for="{{spec.value}}" data-spec-id="{{spec.spec_id}}" data-value-id="{{item.value_id}}" disabled="{{item.disabled}}" class="{{item.class}}" catchtap="choseSpec">{{item.value_text}}</button>
</view>
</view>
<view class="quantity">
<text class="h2">购买数量</text>
<view class="counter">
<button class="{{subButton.class}}" disabled="{{subButton.disabled}}" catchtap="subShopNum">-</button>
<text class="{{buyNumClass}}">{{buyNum}}</text>
<button class="{{addButton.class}}" disabled="{{addButton.disabled}}" catchtap="addShopNum">+</button>
</view>
</view>
</view>
<view class="footer">
<button catchtap="submitCart">确定</button>
</view>
</view>
</view>
<template is="toast" data="{{...toast}}"/>
</scroll-view>
|
.page{
height: 100%;
background-color: #f8f8f8;
}
.swiper-container {
position: relative;
margin-top: 0;
padding: 0;
margin-bottom: 0;
}
.swiper-container swiper {
height: 315.9rpx;
}
swiper-item image {
width: 100%;
height: 100%;
}
.index-con {
position: absolute;
right: 10rpx;
bottom: 10rpx;
padding: 2rpx 10rpx;
color: #fff;
background-color: rgba(0, 0, 0, 0.3);
border-radius: 16rpx;
font-size: 26rpx;
}
.product-detail {
background-color: #fff;
margin-top: 0;
padding-left: 10rpx;
}
.product-name {
font-family: -apple-system-font, Helvetica Neue, Helvetica, sans-serif;
font-size: 28.12rpx;
letter-spacing: 5rpx;
font-weight: bold;
}
.product-price {
display: block;
color: #fc3151;
}
.product-market {
font-size: 24rpx;
padding-bottom: 15rpx;
color: slategray;
text-decoration: line-through;
}
.detail {
padding-top: 15rpx;
padding-bottom: 15rpx;
}
.product-sold {
color: black;
float: right;
padding-right: 10rpx;
}
.product-recommend {
margin: 15rpx 0 120rpx;
background-color: #fff;
word-wrap: break-word;
word-break: break-all;
}
.text-center,
.con-text-center {
text-align: center;
}
.con-text-center image {
width: 100%;
}
button {
height: 75rpx;
float: left;
padding: 0;
border-radius: .3rem;
font-size: 35rpx;
margin-top: 15rpx;
border: 1px solid #efefef;
}
.product-car {
padding-left: 30rpx;
width: 100%;
height: 105rpx;
position: fixed;
bottom: 0;
background: white;
border-top: 1px solid #ddd;
}
.add-car {
width: 500rpx;
margin-left: 35rpx;
margin-right: 55rpx;
text-align: center;
background-color: #fc3151;
color: #fff;
float: right;
font-family: -apple-system, SF UI Text, Helvetica Neue, Helvetica, Arial, sans-serif;
}
.car {
width: 155rpx;
height: 75rpx;
display: block;
position: relative;
}
.cart-wrapper{
height: 42rpx;
}
.car image {
width: 48rpx;
height: 42rpx;
margin: 20rpx 0;
}
.adding-to-cart-popup-background {
display: none;
position: fixed;
left: 0;
bottom: 0;
width: 100%;
height: 100%;
z-index: 100;
background: rgba(0, 0, 0, 0.4);
transition-duration: 400ms;
}
.adding-to-cart-popup-background .adding-to-cart-popup {
position: absolute;
width: 100%;
bottom: 0;
background-color: white;
transition-duration: 300ms;
-webkit-overflow-scrolling: touch;
}
.adding-to-cart-popup-background .adding-to-cart-popup .header {
height: 248rpx;
border-bottom: 2rpx solid #eee;
}
.adding-to-cart-popup-background .adding-to-cart-popup .header .close {
width: 80rpx;
height: 80rpx;
position: absolute;
right: 0;
}
.adding-to-cart-popup-background .adding-to-cart-popup .header .close image {
width:40rpx;
height:40rpx;
margin-top:20rpx;
margin-left:20rpx;
}
.adding-to-cart-popup-background .adding-to-cart-popup .header .product-image {
width: 200rpx;
height: 200rpx;
background-color: white;
position: absolute;
top: 28rpx;
left: 28rpx;
border: 1rpx solid #efefef;
}
.adding-to-cart-popup-background .adding-to-cart-popup .header .product-info {
padding: 40rpx 0;
margin-left: 250rpx;
}
.adding-to-cart-popup-background .adding-to-cart-popup .header .product-info .stock-price {
font-size: 40rpx;
}
.adding-to-cart-popup-background .adding-to-cart-popup .header .product-info .p {
margin: 0;
line-height: 1.6;
}
.adding-to-cart-popup-background .adding-to-cart-popup .header .product-info .stock {
font-size: 32rpx;
}
.adding-to-cart-popup-background .adding-to-cart-popup .header .product-info .spec-title {
font-size: 24rpx;
color: #a0a0a0;
}
.text-primary {
color: #fc3151;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section {
max-height: 400rpx;
padding: 0;
overflow: auto;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .specs {
margin: 0 28rpx 16rpx;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .specs .h2 {
margin-bottom: 14rpx;
font-weight: normal;
color: #353535;
font-size: 28rpx;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .specs .spec-btns {
margin: 0 -28rpx;
overflow: hidden;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .specs .spec-btns button {
min-width: 180rpx;
height: 68rpx;
// border: 1rpx solid #d6d6d6;
border-radius: 8rpx;
outline: none;
background-color: white;
font-size: 32rpx;
line-height: 64rpx;
color: #353535;
margin: 20rpx 28rpx;
overflow: hidden;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .specs .spec-btns button.disabled {
border-color: #e2e2e2;
color: #e2e2e2;
}
.adding-to-cart-popup-background .adding-to-cart-popup .footer {
border-top: 1px solid #ddd;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .quantity {
padding: 20rpx 28rpx 0;
height: 70rpx;
border-top: 1rpx solid #efefef;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .quantity .h2 {
margin: 0;
font-weight: normal;
color: #353535;
font-size: 28rpx;
line-height: 42rpx;
display: inline-block;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .quantity .counter {
float: right;
height: 70rpx;
text-align: center;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .quantity .counter button.disabled {
border-color: #d6d6d6;
color: #d6d6d6;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .quantity .counter button {
width: 68rpx;
height: 72rpx;
line-height: 68rpx;
margin-top: 0;
padding: 0;
vertical-align: top;
background-color: #fff;
border: 1px solid #fc3150;
border-radius: 8rpx;
font-size: 40rpx;
color: #fc3150;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .quantity .counter text.disabled {
color: #d6d6d6;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .quantity .counter text {
float: left;
width: 128rpx;
height: 68rpx;
margin: 0 20rpx;
line-height: 68rpx;
border-radius: 8rpx;
border: 1rpx solid #d6d6d6;
font-size: 40rpx;
color: #353535;
}
.adding-to-cart-popup-background .adding-to-cart-popup .footer button {
float: none;
margin: 16rpx auto;
border: none;
outline: none;
border-radius: 8rpx;
width: 700rpx;
height: 64rpx;
background-color: #fc3150;
font-size: 28rpx;
color: white;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .specs .spec-btns button.selected {
border-color: #fc3151;
color: #fc3151;
position: relative;
}
.adding-to-cart-popup-background .adding-to-cart-popup .section .specs .spec-btns button.selected::after {
content: '';
position: absolute;
width: 56rpx;
height: 40rpx;
bottom: 0;
right: 0;
box-sizing: border-box;
background-image: url(wedge.png);
background-size: 56rpx 40rpx;
border-radius: 0;
}
button,
button::after {
border: none;
outline: none;
content:none;
width:none;
height:none;
position:none;
top:inherit;
left:inherit;
border:none;
-webkit-transform:none;
transform:none;
-webkit-transform-origin:none;
transform-origin:none;
box-sizing:none;
border-radius:none;
}
#product-detail .product-car .badge {
position: absolute;
left: 60%;
top: 0%;
}
.badge {
display: inline-block;
min-width: 24rpx;
padding: 6rpx;
font-size: 24rpx;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: middle;
border-radius: 16rpx;
background-color: #fc3151;
color: white;
}
|
import request from '../../lib/request';
import WxParse from '../../wxParse/wxParse';
import serviceData from '../../data/config';
Page({
data: {
product: [],
current: 1,
indicatorDots: false
},
currentchange(e) {
this.setData({
current: e.detail.current + 1
});
},
onLoad(options) {
const productId = options.id;
var product = serviceData.productData;
product.goods_price = product.goods_price.toFixed(2);
this.setData({
product,
wxParseData: WxParse('html', product.goods_detail)
,cartNum:2});
},
onShareAppMessage(event){
console.log(event);
return {
title: '商品页',
desc: this.data.product.goods_name,
path: '/products/products?id=' + this.data.product.id
}
},
addCar() {
const specData = this.data.product.spec;
const stockData = this.data.product.stock; // 对应的库存量
specData.forEach((specValue) => {
(specValue.value).forEach((spec) => {
spec.disabled = '';
spec.class = 'class';
let stockNum = 0;
stockData.forEach((stock) => {
if (typeof (stock.stock_spec_str) === 'string') {
stock.stock_spec_str = stock.stock_spec_str.split(',');
}
(stock.stock_spec).forEach((stockSpex) => {
if (Number(spec.value_id) === Number(stockSpex.value_id)) {
// 累加对应口味的库存量
stockNum += Number(stock.stock_num);
spec.stock_num = stockNum;
}
});
});
if (Number(spec.stock_num) === 0) {
// 库存量为0,则不可以点击
spec.disabled = 'disabled';
spec.class = 'disabled';
}
});
})
this.setData({
product: this.data.product,
popDisplay: 'block',
subButton: {
disabled: 'disabled',
class: 'disabled'
},
addButton: {
disabled: 'disabled',
class: 'disabled'
},
buyNum: 1,
buyNumClass: 'disabled',
totalStock: this.data.product.total_stock,
oldStockNum: this.data.product.total_stock,
goodsPrice: this.data.product.goods_price,
oldGoodsPrice: this.data.product.goods_price
});
},
closePop() {
this.setData({
popDisplay: 'none'
});
},
choseSpec(e) {
const valueId = e.currentTarget.dataset.valueId; // 属性id
const specId = e.currentTarget.dataset.specId; // 点击分类的id
const product = this.data.product;
const stockData = product.stock;
const specData = product.spec;
let totalNum = false;
let goodsPrice = false;
let skuId = 0;
specData.forEach((spec) => {
(spec.value).forEach((value) => {
let choseId = '';
if (Number(value.value_id) === Number(valueId)) {
// 点击遍历分类属性,选中效果切换
if (value.class === 'selected') {
value.class = '';
this.data.buyNumClass = 'disabled';
this.data.buyNum = 1;
// 点击修改已选中的规格参数,删除对应的value_id
this.data.choseArr.forEach((citem, index) => {
if (specId === citem.spec_id) {
citem.value_id = '';
}
if (index === 0) {
choseId += citem.value_id;
} else {
choseId += `,${citem.value_id}`;
}
});
specData.forEach((specValue) => {
(specValue.value).forEach((specdata) => {
if (Number(specdata.stock_num) === 0) {
// 库存量为0,则不可以点击
specdata.disabled = 'disabled';
} else if (Number(specValue.spec_id) === Number(specId)) {
specdata.disabled = '';
specdata.class = '';
}
});
});
totalNum = this.data.oldStockNum;
goodsPrice = this.data.oldGoodsPrice;
this.data.addButton.class = 'disabled';
this.data.addButton.disabled = 'disabled';
this.data.subButton.class = 'disabled';
this.data.subButton.disabled = 'disabled';
skuId = 0;
} else {
value.class = 'selected';
let weightId = '';
const arritem = {};
let isCon = false;
// 点击修改已选中的规格参数,修改对应的value_id
this.data.choseArr.forEach((citem) => {
if (specId === citem.spec_id) {
isCon = true;
citem.value_id = valueId;
}
});
if (!isCon) {
arritem.spec_id = specId;
arritem.value_id = valueId;
this.data.choseArr.push(arritem);
}
const arrArr = [];
this.data.choseArr.forEach((citem) => {
arrArr.push(citem.value_id);
});
arrArr.sort((a, b) => b - a);
arrArr.forEach((citem, index) => {
if (index === 0) {
choseId += citem;
} else {
choseId += `,${citem}`;
}
});
// 选中去修改该属性下对应的规格是否还有库存
// 规格选完全后实时修改库存量
stockData.forEach((stock) => {
if (typeof (stock.stock_spec_str) === 'object') {
let stockSpecStr = '';
stock.stock_spec_str.sort((a, b) => b - a);
stock.stock_spec_str.forEach((sitem, index) => {
if (index === 0) {
stockSpecStr += sitem;
} else {
stockSpecStr += `,${sitem}`;
}
});
stock.stock_spec_str = stockSpecStr;
}
if (stock.stock_spec_str === choseId) {
totalNum = stock.stock_num;
goodsPrice = stock.stock_price;
skuId = stock.stock_id;
this.data.buyNumClass = '';
this.data.buyNum = 1;
if (totalNum > 1) {
this.data.addButton.disabled = '';
this.data.addButton.class = '';
} else {
this.data.addButton.disabled = 'disabled';
this.data.addButton.class = 'disabled';
this.data.subButton.disabled = 'disabled';
this.data.subButton.class = 'disabled';
}
}
if (stock.stock_spec_str.indexOf(value.value_id) !== -1 &&
Number(stock.stock_num) === 0) {
const idArray = stock.stock_spec_str.split(',');
idArray.forEach((dataId) => {
if (Number(dataId) !== Number(valueId)) {
weightId = dataId;
}
});
}
// 拿到库存为0的value_id,设置为不可以点击
specData.forEach((specValue) => {
(specValue.value).forEach((valueItem) => {
if (weightId !== '' && Number(valueItem.value_id) === Number(weightId)) {
valueItem.disabled = 'disabled';
valueItem.class = 'disabled';
}
});
});
});
}
} else if (Number(spec.spec_id) === Number(specId) && value.stock_num !== 0) {
// 属于同个属性并且库存不为0的去除选中样式
value.class = '';
value.disabled = '';
} else if (value.stock_num === 0) {
value.class = 'disabled';
value.disabled = 'disabled';
}
});
});
let price = (goodsPrice && goodsPrice.toFixed(2)) || this.data.oldGoodsPrice;
this.setData({
product,
totalStock: totalNum || this.data.oldStockNum,
goodsPrice: price,
addButton: this.data.addButton,
subButton: this.data.subButton,
buyNum: this.data.buyNum,
buyNumClass: this.data.buyNumClass,
skuId
});
},
addShopNum() {
let buyNum = this.data.buyNum;
const totalNum = this.data.totalStock;
buyNum += 1;
if (buyNum < totalNum && buyNum !== 1) {
this.data.subButton.class = '';
this.data.subButton.disabled = '';
} else {
this.data.addButton.class = 'disabled';
this.data.addButton.disabled = 'disabled';
}
this.setData({
buyNum,
addButton: this.data.addButton,
subButton: this.data.subButton
});
},
subShopNum() {
let buyNum = this.data.buyNum;
buyNum -= 1;
if (buyNum === 1) {
this.data.addButton.class = '';
this.data.addButton.disabled = '';
this.data.subButton.class = 'disabled';
this.data.subButton.disabled = 'disabled';
}
this.setData({
buyNum,
addButton: this.data.addButton,
subButton: this.data.subButton
});
},
submitCart() {
const data = {
goods_id: this.data.product.id,
sku_id: this.data.skuId,
goods_number: this.data.buyNum
};
if (data.sku_id) {
request({ path: '/cart/addCart', data, method: 'post' }).then((res) => {
if (res) {
this.setData({
popDisplay: 'none',
cartNum: this.data.cartNum + this.data.buyNum
});
}
});
} else {
this.setData({
toast: {
toastClass: 'yatoast',
toastMessage: '请先选择属性'
}
});
setTimeout(() => {
this.setData({
toast: {
toastClass: '',
toastMessage: ''
}
});
}, 2000);
}
},
navigateToCart() {
wx.switchTab({
url: '../cart/cart'
});
}
});
|
模板简介:该模板名称为【微信小程序商品详情添加到购物车样式模板制作设计下载】,大小是,文档格式为.,推荐使用打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【小程序教程】栏目查找您需要的精美模板。