Commit c596ff4a by wjw

Merge branch 'master' of http://120.77.182.185/yanl/mini-shimao.git into master

parents 90b47806 f048acfc
let App = getApp()
Page({
data: {
imageBase: App.globalData.appImageBase,
resourcesBase: App.globalData.appResourcesBase,
animationData: {},
animationPointHeight: 0,
winAnimationPoint: false,
shopInfo: {},
sideBar: [], // 侧边菜单
menuTitle: '', // 商品列表标题
commodityList: [], // 商品列表
commodityDetail: {}, // 商品详情
shoppingCart: [], // 购物车列表
shoppingCartTotal: 0, // 购物车总数
currentIndex: 0,
scrollTop: 0,
winToast: false,
winLoading: false,
winCommodityDetail: false,
},
onLoad: function () {
this.setCartAnimation()
this.setShopInfo()
this.querySideBar()
},
/**
* 添加动画初始
* @function
* @param
* @returns
*/
setCartAnimation: function () {
// 购物车添加动画
this.animation = wx.createAnimation({
duration: 500,
timingFunction: 'ease'
})
},
/**
* 添加动画显示
* @function
* @param
* @returns
*/
setCartAnimationExport: function (funcPointHeight) {
// 定位点击元素位置
this.animation.translate(0, funcPointHeight).step()
this.setData({
animationData: this.animation.export(),
winAnimationPoint: false,
})
// 执行下滑动画
this.setData({
winAnimationPoint: true,
})
let funcTimer = setTimeout(() => {
this.animation.translate(0, 0).step()
this.setData({
animationData: this.animation.export(),
// winAnimationPoint: false,
})
clearTimeout(funcTimer)
}, 100)
},
setShopInfo: function () {
let funcShopInfo = wx.getStorageSync('shopInfoBuffer')
this.setData({
shopInfo: funcShopInfo
})
console.log(this.data.shopInfo)
},
/**
* 查询分类
* @function
* @param
* @returns
*/
querySideBar: function () {
App.wxRequest({
url: '/api/v1/commodity/getClassifys',
data: {
'officeId': this.data.shopInfo.id,
'genre': this.data.shopInfo.shopType,
},
success: (response) => {
let funcSideBar = []
let funcResponse = response.data
for (let i = 0, l = funcResponse.length; i < l; i++) {
let funcItem = {
'id': funcResponse[i].id,
'tab': funcResponse[i].name,
}
funcSideBar.push(funcItem)
}
this.setData({
sideBar: funcSideBar,
menuTitle: funcSideBar[0].tab
})
this.queryCommodity()
}
})
},
/**
* 查询分类商品
* @function
* @param
* @returns
*/
queryCommodity: function () {
this.setData({
winLoading: true
})
App.wxRequest({
url: '/api/v1/commodity/getCommoditys',
data: {
'officeId': this.data.shopInfo.id,
'classifyId': this.data.sideBar[this.data.currentIndex].id,
'genre': this.data.shopInfo.shopType,
},
success: (response) => {
let funcCommodityList = []
let funcResponse = response.data
for (let i = 0, l = funcResponse.length; i < l; i++) {
let funcItem = {
'id': funcResponse[i].id, // 商品标识
'typeId': funcResponse[i].classifyId, // 商品分类标识
'inventoriesId': funcResponse[i].inventoriesId, // 仓库标识
'name': funcResponse[i].name,
'cover': funcResponse[i].coverImg, // 商品封面
'price': funcResponse[i].sightseerPrice, // 普通价
'priceText': App.modular.utils.formatAmount(funcResponse[i].sightseerPrice), // 普通价文本格式
'priceSpecial': funcResponse[i].ownerPrice, // 业主价
'priceSpecialText': App.modular.utils.formatAmount(funcResponse[i].ownerPrice), // 业主价文本格式
'priceDiscount': funcResponse[i].price, // 活动价
'priceDiscountText': App.modular.utils.formatAmount(funcResponse[i].price), // 活动价文本格式
'priceType': 1,
'describe': funcResponse[i].synopsis,
'describeDetail': '', // 商品描述详情,在点击详情时获得数据
'tags': funcResponse[i].tags,
'quantityMin': 1,
'quantityMax': funcResponse[i].number,
'isActive': true,
}
let funcUserType = wx.getStorageSync('userInfo').userType
// 根据后台判断价格显示类型
// 活动价优先级最高,如果存在活动价,则只显示活动价和普通价
if (funcItem.priceDiscount) {
funcItem.priceType = 1
} else {
// 活动价不存在,进一步判断普通价与业主价是否一致,如果不一致,则显示两者
if (funcItem.price !== funcItem.priceSpecial && funcUserType) {
funcItem.priceType = 2
} else {
funcItem.priceType = 3
}
}
funcCommodityList.push(funcItem)
}
this.setData({
winLoading: false,
commodityList: funcCommodityList,
})
},
})
},
/**
* 侧边菜单选择事件
* @function
* @param {object} - event
* @returns
*/
onSelectionSideBar: function (event) {
let funcIndex = event.currentTarget.dataset.index
let funcMenuTitle = this.data.sideBar[funcIndex].tab
this.setData({
currentIndex: funcIndex,
menuTitle: funcMenuTitle,
scrollTop: 0
})
this.queryCommodity()
},
/**
* 查询商品详情
* @function
* @param {object} - event
* @returns
*/
onCommodityDetail: function (event) {
let funcItem = event.currentTarget.dataset.item
App.wxRequest({
url: '/api/v1/commodity/getCommodityParticulars',
data: {
'commodityId': funcItem.id,
'classifyId': funcItem.typeId,
'genre': this.data.shopInfo.shopType,
},
success: (response) => {
let funcResponse = response.data
funcItem.banner = funcResponse.imgs.split('|')
funcItem.banner.pop()
funcItem.describeDetail = funcResponse.particulars
this.setData({
commodityDetail: funcItem,
winCommodityDetail: true
})
}
})
},
/**
* 关闭商品详情
* @function
* @param
* @returns
*/
onCommodityClose: function () {
this.setData({
winCommodityDetail: false
})
},
/**
* 添加商品
* @function
* @param {object} - event
* @returns
*/
onCommodityAdd: function (event) {
// 获取点击高度
let funcAnimationPointHeight = event.detail.y
this.setCartAnimationExport(funcAnimationPointHeight)
let funcShoppingCart = this.data.shoppingCart
// 详情加入购物车按钮商品数据不会存在于 event 对象中,所以要区分
let funcWinToast = false
let funcItem = event.currentTarget.dataset.item
if (!funcItem) {
funcWinToast = true
funcItem = this.data.commodityDetail
}
// 判断购物车中是否存在同类商品
// 修改相应的商品数量
if (funcShoppingCart.length !== 0) {
for (let i = 0, l = funcShoppingCart.length; i < l; i++) {
if (funcItem.id === funcShoppingCart[i].id) {
funcShoppingCart[i].quantity = funcShoppingCart[i].quantity + 1
break
}
if (i === funcShoppingCart.length - 1) {
funcItem.quantity = 1
funcShoppingCart.push(funcItem)
}
}
} else {
funcItem.quantity = 1
funcShoppingCart.push(funcItem)
}
// 重新计算购物车总数
let funcShoppingCartTotal = 0
for (let i = 0, l = funcShoppingCart.length; i < l; i++) {
funcShoppingCartTotal = funcShoppingCartTotal + funcShoppingCart[i].quantity
}
this.setData({
shoppingCart: funcShoppingCart,
shoppingCartTotal: funcShoppingCartTotal,
winToast: funcWinToast,
winCommodityDetail: false,
})
},
onLoad: function (options) {
/**
* 跳转购物车页面
* @function
* @param
* @returns
*/
onShoppingCart: function () {
wx.setStorageSync('shoppingCartBuffer', this.data.shoppingCart)
wx.navigateTo({
url: '/pages/commodity/shopping-cart/shopping-cart',
})
},
})
\ No newline at end of file
<!--pages/home/home/home.wxml-->
<text>pages/home/home/home.wxml</text>
<l-toast
l-image-class="toast-image"
l-class="toast-bg"
show="{{winToast}}"
mask="{{true}}"
image="/image/success.png"
title="添加购物车成功"
></l-toast>
<l-toast
show="{{winLoading}}"
icon="loading"
title="加载中"
duration="20000"
mask="{{true}}"
></l-toast>
<navigation class="navigation" titleText="{{shopInfo.name}}" background="#FFFFFF;" backIcon="/image/back.png"></navigation>
<view class="row">
<!-- 侧边菜单 -->
<view class="side-bar">
<block wx:for="{{sideBar}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<view class="menu-item {{currentIndex === index ? 'active' : ''}}" data-index="{{index}}" bindtap="onSelectionSideBar">
<text>{{item.tab}}</text>
</view>
</block>
</view>
<!-- 商品列表 -->
<view class="menu-list">
<view class="right-content-title">{{menuTitle}}</view>
<block wx:for="{{commodityList}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<view class="commodity-item row">
<view class="item-img" data-item="{{item}}" bindtap="onCommodityDetail">
<image src="{{item.cover}}" mode="widthFix"></image>
</view>
<view class="item-info">
<view class="item-info-title">{{item.name}}</view>
<view class="item-info-text-wrap">
<view wx:if="{{item.describe}}">{{item.describe}}</view>
<view wx:else class="item-info-content"></view>
</view>
<view class="item-other row con-b">
<!-- 活动价样式 -->
<view wx:if="{{item.priceType === 1}}">
<view class="item-price row align-c">
<text>¥</text>
<text>{{item.priceDiscountText}}</text>
<text class="item-price-discount">活动价</text>
</view>
<view class="item-info-old-price row align-c">
<text>¥</text>
<text>{{item.priceText}}</text>
</view>
</view>
<!-- 业主价样式 -->
<view wx:if="{{item.priceType === 2}}">
<view class="item-price row align-c">
<text>¥</text>
<text>{{item.priceSpecialText}}</text>
<text class="item-price-special">业主价</text>
</view>
<view class="item-info-old-price row align-c">
<text>¥</text>
<text>{{item.priceText}}</text>
</view>
</view>
<!-- 普通价样式 -->
<view wx:if="{{item.priceType === 3}}">
<view class="item-price row align-c">
<text>¥</text>
<text>{{item.priceText}}</text>
<text></text>
</view>
</view>
<view class="item-operation-add">
<button class="row con-c align-c" data-item="{{item}}" bindtap="onCommodityAdd">
<image mode="widthFix" src="{{imageBase + 'icon/cart-3.png'}}"></image>
</button>
</view>
</view>
</view>
</view>
</block>
<!-- 购物车按钮 -->
<view class="cart-btn row con-c align-c" bindtap="onShoppingCart">
<!-- 添加动画圆点 -->
<view class="cart-animation" wx:if="{{winAnimationPoint}}" animation="{{animationData}}"></view>
<view class="cart-num row con-c align-c">{{shoppingCartTotal}}</view>
<view class="cart-img-wrap">
<image src="../../../image/cart.png" mode="widthFix"></image>
</view>
</view>
</view>
</view>
<!-- 商品详情弹窗 -->
<l-popup show="{{winCommodityDetail}}" content-align="center" locked="{{true}}">
<view class="popup-wrap">
<view id="banner" class="banner">
<swiper autoplay circular class="banner-swiper" interval="5000" duration="500">
<block wx:for="{{commodityDetail.banner}}" wx:for-index="index" wx:for-item="item" wx:key="index">
<swiper-item class="banner-swiper-item">
<image class="banner-swiper-image" src="{{item}}"></image>
</swiper-item>
</block>
</swiper>
<view class="banner-wave">
<image src="/image/ornament-1.png" mode="widthFix"></image>
</view>
</view>
<view class="popup-info-wrapper">
<view class="popuo-info-title">{{commodityDetail.name}}</view>
<view class="popup-info-text">{{commodityDetail.describeDetail}}</view>
</view>
<view class="popup-footer-wrapper">
<!-- 活动价样式 -->
<view class="popup-price-row row align-c" wx:if="{{commodityDetail.priceType === 1}}">
<view class="detail-price-discount row con-c align-c">
<text>活动价</text>
</view>
<view class="detail-price">
<text>¥</text>
<text>{{commodityDetail.priceDiscountText}}</text>
</view>
<view class="popup-price-old">
<text>¥</text>
<text>{{commodityDetail.priceText}}</text>
</view>
</view>
<!-- 业主价样式 -->
<view class="popup-price-row row align-c" wx:if="{{commodityDetail.priceType === 2}}">
<view class="detail-price-special row con-c align-c">
<text>业主价</text>
</view>
<view class="detail-price">
<text>¥</text>
<text>{{commodityDetail.priceSpecialText}}</text>
</view>
<view class="popup-price-old">
<text>¥</text>
<text>{{commodityDetail.priceText}}</text>
</view>
</view>
<!-- 普通价样式 -->
<view class="popup-price-row row align-c" wx:if="{{commodityDetail.priceType === 3}}">
<view class="popup-price-special row con-c align-c">
<text></text>
</view>
<view class="detail-price">
<text>¥</text>
<text>{{commodityDetail.priceText}}</text>
</view>
</view>
<view class="popup-footer-btn row con-c align-c" bindtap="onCommodityAdd">加入购物车</view>
</view>
</view>
<view class="popup-close-btn row con-c align-c" bindtap="onCommodityClose">
<view class="popup-close">
<image mode="widthFix" src="../../../image/icon_close.png"></image>
</view>
</view>
</l-popup>
\ No newline at end of file
/* pages/home/home/home.wxss */
\ No newline at end of file
page {
overflow: hidden;
}
.navigation {
z-index: 1100;
position: fixed;
top: 0;
left: 0;
width: 750rpx;
}
.side-bar {
width: 160rpx;
height: 100vh;
margin-top: 140rpx;
overflow-y: scroll;
background: #f2f3f5;
}
.side-bar::-webkit-scrollbar {
width: 0;
}
.menu-item {
height: 136rpx;
display: flex;
justify-content: center;
align-items: center;
font-size: 26rpx;
color: #656e7b;
}
.menu-item.active {
color: #5cb5dd;
font-weight: 600;
background: #fff;
border-left: 8rpx solid #86c5e1;
}
.menu-list {
width: 590rpx;
height: 100vh;
margin-top: 140rpx;
padding: 0 32rpx 200rpx 32rpx;
overflow-y: scroll;
background: #FFFFFF;
}
.right-content::-webkit-scrollbar {
width: 0;
}
.right-content-title {
height: 100rpx;
padding: 32rpx 0;
font-size: 26rpx;
color: #959da9;
}
.cart-btn {
position: fixed;
right: 48rpx;
bottom: 160rpx;
width: 104rpx;
height: 104rpx;
border-radius: 50%;
background-color: #86c5e1;
}
.cart-num {
position: absolute;
top: 0;
right: 0;
height: 32rpx;
padding: 0 12rpx;
font-size: 22rpx;
line-height: 32rpx;
border: 1px solid #86c5e1;
border-radius: 17rpx;
color: #86c5e1;
background-color: #fff;
}
.cart-img-wrap {
width: 48rpx;
height: 48rpx;
}
.commodity-item {
width: 100%;
min-height: 250rpx;
padding-bottom: 56rpx;
box-sizing: border-box;
}
.item-img {
width: 160rpx;
height: 160rpx;
}
.item-info {
flex: 1;
margin-left: 28rpx;
}
.item-info-title {
font-size: 30rpx;
font-weight: 500;
line-height: 42rpx;
color: #15191F;
}
.item-info-text-wrap {
display: -webkit-box;
width: 342rpx;
height: 64rpx;
margin-top: 16rpx;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
font-size: 22rpx;
font-weight: 400;
line-height: 32rpx;
color: #959DA9;
}
.item-info-content {
height: 40rpx;
}
.item-other {
margin-top: 24rpx;
}
.item-operation {
margin-top: 24rpx;
font-size: 30rpx;
font-weight: 600;
color: #15191f;
}
.item-price text:nth-child(1) {
font-size: 22rpx;
}
.item-price text:nth-child(2) {
margin-right: 8rpx;
font-size: 30rpx;
}
.item-price-discount {
width: 78rpx;
height: 32rpx;
border-radius: 4px;
background: #FAEDEA;
text-align: center;
font-size: 18rpx;
font-weight: 500;
line-height: 32rpx;
color: #EF4E4E;
}
.item-price-special {
width: 78rpx;
height: 32rpx;
border-radius: 4px;
background: linear-gradient(180deg, #3F4357 0%, #252532 100%);
text-align: center;
font-size: 18rpx;
font-weight: 500;
line-height: 32rpx;
color: #E8D0AF;
}
.item-operation-add button {
width: 44rpx;
height: 44rpx;
border-radius: 50%;
background: #86C5E1;
}
.item-operation-add image {
width: 24rpx;
height: 24rpx;
}
.goods-add-btn-wrap {
flex: 1;
}
.l-btn-circle {
border-radius: 50% !important;
font-size: 24rpx;
}
.item-info-old-price {
margin-top: 4rpx;
font-size: 22rpx;
color: #959da9;
text-decoration: line-through;
}
.popup-wrap {
width: 606rpx;
margin-top: 100rpx;
background-color: #fff;
border-radius: 4rpx;
}
.popup-img-wrap {
width: 606rpx;
height: 382rpx;
}
.popup-info-wrapper {
padding: 48rpx 40rpx;
}
.popuo-info-title {
font-size: 34rpx;
color: #15191f;
}
.popup-info-text {
margin-top: 24rpx;
font-size: 22rpx;
line-height: 32rpx;
color: #959da9;
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
}
.popup-footer-wrapper {
margin: 0 40rpx;
padding: 40rpx 0;
border-top: 1px solid #e2e7ef;
}
.popup-price-row {
padding: 10rpx 0;
}
.popup-price-now {
color: #15191f;
}
.detail-price text:nth-child(1) {
height: 52rpx;
font-size: 30rpx;
font-weight: 500;
line-height: 52rpx;
color: #15191F;
}
.detail-price text:nth-child(2) {
height: 52rpx;
font-size: 38rpx;
font-weight: 500;
line-height: 52rpx;
color: #15191F;
}
.detail-price-discount {
width: 90rpx;
height: 36rpx;
margin-right: 16rpx;
border-radius: 4px;
background: #FAEDEA;
text-align: center;
font-size: 18rpx;
font-weight: 500;
line-height: 32rpx;
color: #EF4E4E;
}
.detail-price-special {
width: 90rpx;
height: 36rpx;
margin-right: 16rpx;
border-radius: 4px;
background: linear-gradient(180deg, #3F4357 0%, #252532 100%);
text-align: center;
font-size: 18rpx;
font-weight: 500;
line-height: 32rpx;
color: #E8D0AF;
}
.popup-price-old {
margin-left: 20rpx;
font-size: 26rpx;
color: #959da9;
text-decoration: line-through;
}
.popup-footer-btn {
width: 526rpx;
height: 80rpx;
margin-top: 30rpx;
font-size: 30rpx;
color: #fff;
background-color: #86c5e1;
border-radius: 4rpx;
}
.popup-close-btn {
width: 80rpx;
height: 80rpx;
margin: 48rpx auto 0;
background: rgba(254, 252, 249, 0.5);
border-radius: 50%;
}
.popup-close {
width: 40rpx;
height: 40rpx;
}
.toast-bg {
min-width: 262rpx !important;
min-height: 262prx !important;
}
.toast-image {
z-index: 1900;
}
image {
width: 100%;
height: 100%;
}
/* 商品详情样式 */
.banner {
position: relative;
width: 606rpx;
height: 382rpx;
border-radius: 4px;
background: #FFFFFF;
}
.banner-swiper,
.banner-swiper-item,
.banner-swiper-image {
position: absolute;
top: 0 !important;
left: 0 !important;
width: 606rpx;
height: 382rpx;
}
.banner-wave {
z-index: 1100;
position: absolute;
bottom: -2rpx;
left: 0;
width: 606rpx;
height: 50rpx;
}
.banner-wave image {
width: 606rpx;
height: 50rpx;
}
/* 购物车样式 */
.cart-animation {
position: fixed;
right: 48rpx;
width: 26rpx;
height: 26rpx;
border-radius: 50%;
background: red;
}
\ No newline at end of file
......@@ -2,6 +2,14 @@ let App = getApp()
Page({
data: {
imageBase: App.globalData.appImageBase,
resourcesBase: App.globalData.appResourcesBase,
animationData: {},
animationPointHeight: 0,
winAnimationPoint: false,
shopInfo: {},
sideBar: [], // 侧边菜单
......@@ -22,10 +30,54 @@ Page({
},
onLoad: function () {
this.setCartAnimation()
this.setShopInfo()
this.querySideBar()
},
/**
* 添加动画初始
* @function
* @param
* @returns
*/
setCartAnimation: function () {
// 购物车添加动画
this.animation = wx.createAnimation({
duration: 500,
timingFunction: 'ease'
})
},
/**
* 添加动画显示
* @function
* @param
* @returns
*/
setCartAnimationExport: function (funcPointHeight) {
// 定位点击元素位置
this.animation.translate(0, funcPointHeight).step()
this.setData({
animationData: this.animation.export(),
winAnimationPoint: false,
})
// 执行下滑动画
this.setData({
winAnimationPoint: true,
})
let funcTimer = setTimeout(() => {
this.animation.translate(0, 0).step()
this.setData({
animationData: this.animation.export(),
// winAnimationPoint: false,
})
clearTimeout(funcTimer)
}, 100)
},
setShopInfo: function () {
let funcShopInfo = wx.getStorageSync('shopInfoBuffer')
this.setData({
......@@ -103,7 +155,12 @@ Page({
'priceDiscountText': App.modular.utils.formatAmount(funcResponse[i].price), // 活动价文本格式
'priceType': 1,
'describe': funcResponse[i].synopsis,
'describeDetail': '', // 商品描述详情,在点击详情时获得数据
'tags': funcResponse[i].tags,
'quantityMin': 1,
'quantityMax': funcResponse[i].number,
'isActive': true,
}
let funcUserType = wx.getStorageSync('userInfo').userType
......@@ -168,6 +225,8 @@ Page({
let funcResponse = response.data
funcItem.banner = funcResponse.imgs.split('|')
funcItem.banner.pop()
funcItem.describeDetail = funcResponse.particulars
this.setData({
commodityDetail: funcItem,
winCommodityDetail: true
......@@ -195,6 +254,10 @@ Page({
* @returns
*/
onCommodityAdd: function (event) {
// 获取点击高度
let funcAnimationPointHeight = event.detail.y
this.setCartAnimationExport(funcAnimationPointHeight)
let funcShoppingCart = this.data.shoppingCart
// 详情加入购物车按钮商品数据不会存在于 event 对象中,所以要区分
......
......@@ -80,7 +80,7 @@
<view class="item-operation-add">
<button class="row con-c align-c" data-item="{{item}}" bindtap="onCommodityAdd">
<image mode="widthFix" src="/image/add-w.png"></image>
<image mode="widthFix" src="{{imageBase + 'icon/cart-3.png'}}"></image>
</button>
</view>
</view>
......@@ -90,6 +90,9 @@
<!-- 购物车按钮 -->
<view class="cart-btn row con-c align-c" bindtap="onShoppingCart">
<!-- 添加动画圆点 -->
<view class="cart-animation" wx:if="{{winAnimationPoint}}" animation="{{animationData}}"></view>
<view class="cart-num row con-c align-c">{{shoppingCartTotal}}</view>
<view class="cart-img-wrap">
<image src="../../../image/cart.png" mode="widthFix"></image>
......@@ -117,7 +120,7 @@
<view class="popup-info-wrapper">
<view class="popuo-info-title">{{commodityDetail.name}}</view>
<view class="popup-info-text">{{commodityDetail.describe}}</view>
<view class="popup-info-text">{{commodityDetail.describeDetail}}</view>
</view>
<view class="popup-footer-wrapper">
......
......@@ -373,4 +373,14 @@ image {
.banner-wave image {
width: 606rpx;
height: 50rpx;
}
/* 购物车样式 */
.cart-animation {
position: fixed;
right: 48rpx;
width: 26rpx;
height: 26rpx;
border-radius: 50%;
background: red;
}
\ No newline at end of file
......@@ -2,8 +2,16 @@ let App = getApp()
Page({
data: {
imageBase: App.globalData.appImageBase,
resourcesBase: App.globalData.appResourcesBase,
animationData: {},
animationPointHeight: 0,
winAnimationPoint: false,
shopInfo: {},
sideBar: [], // 侧边菜单
menuTitle: '', // 商品列表标题
commodityList: [], // 商品列表
......@@ -22,10 +30,54 @@ Page({
},
onLoad: function () {
this.setCartAnimation()
this.setShopInfo()
this.querySideBar()
},
/**
* 添加动画初始
* @function
* @param
* @returns
*/
setCartAnimation: function () {
// 购物车添加动画
this.animation = wx.createAnimation({
duration: 500,
timingFunction: 'ease'
})
},
/**
* 添加动画显示
* @function
* @param
* @returns
*/
setCartAnimationExport: function (funcPointHeight) {
// 定位点击元素位置
this.animation.translate(0, funcPointHeight).step()
this.setData({
animationData: this.animation.export(),
winAnimationPoint: false,
})
// 执行下滑动画
this.setData({
winAnimationPoint: true,
})
let funcTimer = setTimeout(() => {
this.animation.translate(0, 0).step()
this.setData({
animationData: this.animation.export(),
// winAnimationPoint: false,
})
clearTimeout(funcTimer)
}, 100)
},
setShopInfo: function () {
let funcShopInfo = wx.getStorageSync('shopInfoBuffer')
this.setData({
......@@ -103,7 +155,12 @@ Page({
'priceDiscountText': App.modular.utils.formatAmount(funcResponse[i].price), // 活动价文本格式
'priceType': 1,
'describe': funcResponse[i].synopsis,
'describeDetail': '', // 商品描述详情,在点击详情时获得数据
'tags': funcResponse[i].tags,
'quantityMin': 1,
'quantityMax': funcResponse[i].number,
'isActive': true,
}
let funcUserType = wx.getStorageSync('userInfo').userType
......@@ -168,6 +225,8 @@ Page({
let funcResponse = response.data
funcItem.banner = funcResponse.imgs.split('|')
funcItem.banner.pop()
funcItem.describeDetail = funcResponse.particulars
this.setData({
commodityDetail: funcItem,
winCommodityDetail: true
......@@ -195,6 +254,10 @@ Page({
* @returns
*/
onCommodityAdd: function (event) {
// 获取点击高度
let funcAnimationPointHeight = event.detail.y
this.setCartAnimationExport(funcAnimationPointHeight)
let funcShoppingCart = this.data.shoppingCart
// 详情加入购物车按钮商品数据不会存在于 event 对象中,所以要区分
......@@ -229,7 +292,7 @@ Page({
for (let i = 0, l = funcShoppingCart.length; i < l; i++) {
funcShoppingCartTotal = funcShoppingCartTotal + funcShoppingCart[i].quantity
}
this.setData({
shoppingCart: funcShoppingCart,
shoppingCartTotal: funcShoppingCartTotal,
......@@ -244,7 +307,7 @@ Page({
* @param
* @returns
*/
onShoppingCart: function() {
onShoppingCart: function () {
wx.setStorageSync('shoppingCartBuffer', this.data.shoppingCart)
wx.navigateTo({
url: '/pages/commodity/shopping-cart/shopping-cart',
......
......@@ -80,7 +80,7 @@
<view class="item-operation-add">
<button class="row con-c align-c" data-item="{{item}}" bindtap="onCommodityAdd">
<image mode="widthFix" src="/image/add-w.png"></image>
<image mode="widthFix" src="{{imageBase + 'icon/cart-3.png'}}"></image>
</button>
</view>
</view>
......@@ -90,6 +90,9 @@
<!-- 购物车按钮 -->
<view class="cart-btn row con-c align-c" bindtap="onShoppingCart">
<!-- 添加动画圆点 -->
<view class="cart-animation" wx:if="{{winAnimationPoint}}" animation="{{animationData}}"></view>
<view class="cart-num row con-c align-c">{{shoppingCartTotal}}</view>
<view class="cart-img-wrap">
<image src="../../../image/cart.png" mode="widthFix"></image>
......@@ -117,7 +120,7 @@
<view class="popup-info-wrapper">
<view class="popuo-info-title">{{commodityDetail.name}}</view>
<view class="popup-info-text">{{commodityDetail.describe}}</view>
<view class="popup-info-text">{{commodityDetail.describeDetail}}</view>
</view>
<view class="popup-footer-wrapper">
......
......@@ -373,4 +373,14 @@ image {
.banner-wave image {
width: 606rpx;
height: 50rpx;
}
/* 购物车样式 */
.cart-animation {
position: fixed;
right: 48rpx;
width: 26rpx;
height: 26rpx;
border-radius: 50%;
background: red;
}
\ No newline at end of file
......@@ -81,16 +81,16 @@ Page({
onLoad: function () {
this.setShopInfo()
// 读取上级页面的购物车数据,默认选中所有。
let funcShoppingCart = wx.getStorageSync('shoppingCartBuffer')
for (let i = 0, l = funcShoppingCart.length; i < l; i++) {
// 设置默认库存为 100 ,在提交订单时矫正为实际库存
funcShoppingCart[i].quantityMin = 1
funcShoppingCart[i].quantityMax = 100
funcShoppingCart[i].isActive = true
}
// // 读取上级页面的购物车数据,默认选中所有。
// let funcShoppingCart = wx.getStorageSync('shoppingCartBuffer')
// for (let i = 0, l = funcShoppingCart.length; i < l; i++) {
// // 设置默认库存为 100 ,在提交订单时矫正为实际库存
// funcShoppingCart[i].quantityMin = 1
// funcShoppingCart[i].quantityMax = 100
// funcShoppingCart[i].isActive = true
// }
this.setData({
shoppingCart: funcShoppingCart
shoppingCart: wx.getStorageSync('shoppingCartBuffer')
})
this.selectionTotal()
......@@ -206,7 +206,7 @@ Page({
titleColor: '#15191F',
success: (response) => {
if (response.confirm) {
// wx.setStorageSync('shoppingCartBuffer', [])
wx.setStorageSync('shoppingCartBuffer', [])
this.setData({
shoppingCart: []
})
......
......@@ -220,6 +220,9 @@ Page({
console.log(response)
}
})
this.setData({
'orderList': [],
})
this.queryOrder()
},
......@@ -241,7 +244,9 @@ Page({
console.log(response)
}
})
this.setData({
'orderList': [],
})
this.queryOrder()
},
......
......@@ -11,6 +11,8 @@ Page({
orderInfo: {},
fromPage: '',
code: {},
winCode: false,
winCode: false,
},
......@@ -23,6 +25,8 @@ Page({
fromPage: options.fromPage === 'order' ? 'order' : ''
})
console.log(funcOrderInfo, '--------------------------')
this.queryOrderDetail()
},
......@@ -89,6 +93,13 @@ Page({
},
success: (response) => {
let funcResponse = response.data
let funcCode = {
'codeBase64': funcResponse.qrcode
}
this.setData({
code: funcCode,
winCode: true,
})
}
})
console.log(funcOrderInfo)
......
......@@ -167,8 +167,14 @@
<view class="tip-describe col">
<text>{{'订单编号:' + orderInfo.tipOrderNo}}</text>
<text>{{'下单时间:' + orderInfo.tipTimeSubmit}}</text>
<text>{{'付款时间:' + orderInfo.tipTimePay}}</text>
<text>{{'获得积分:' + orderInfo.tipIntegral}}</text>
<text wx:if="{{orderInfo.state !== 0 && orderInfo.state !== -1}}">{{'付款时间:' + orderInfo.tipTimePay}}</text>
<text wx:if="{{orderInfo.state !== 0 && orderInfo.state !== -1}}">{{'获得积分:' + orderInfo.tipIntegral}}</text>
</view>
</view>
</view>
<view class="code" wx:if="{{winCode}}">
<view class="code-info">
<image class="code-info-content" src="{{'data:image/png;base64,' + code.codeBase64}}"></image>
</view>
</view>
\ No newline at end of file
......@@ -122,7 +122,6 @@
max-width: 62rpx;
max-height: 62rpx;
margin-right: 16rpx;
background: #999999;
}
.commodity-item {
......@@ -135,7 +134,6 @@
width: 140rpx;
height: 136rpx;
margin-right: 24rpx;
background: #999999;
}
.commodity-item-info {
......@@ -200,4 +198,10 @@
font-weight: 400;
line-height: 42rpx;
color: #959DA9;
}
/* 券码 */
.code-info-content {
width: 296rpx;
height: 296rpx;
}
\ No newline at end of file
......@@ -90,7 +90,6 @@ Page({
this.setShoppingCartData()
this.setView()
this.animation = wx.createAnimation({
duration: 700,
timingFunction: 'ease'
......@@ -472,13 +471,11 @@ Page({
if (funcRegisterInfo[i].name === '' || funcRegisterInfo[i].errorName !== '') {
this.setUserInfo('name', funcRegisterInfo[i].name, i, App.modular.rule.item('name', funcRegisterInfo[i].name))
funcPass = false
break
}
if (funcRegisterInfo[i].phone === '' || funcRegisterInfo[i].errorPhone !== '') {
this.setUserInfo('phone', funcRegisterInfo[i].phone, i, App.modular.rule.item('phone', funcRegisterInfo[i].phone))
funcPass = false
break
}
// 仅在需要的订单场景下校验
......@@ -486,7 +483,6 @@ Page({
if (funcRegisterInfo[i].identity === '' || funcRegisterInfo[i].errorIdentity !== '') {
this.setUserInfo('identity', funcRegisterInfo[i].identity, i, App.modular.rule.item('identity', funcRegisterInfo[i].identity))
funcPass = false
break
}
}
}
......@@ -508,21 +504,24 @@ Page({
// 整合商品数据
let funcCommodity = []
let funcShoppingCartList = this.data.shoppingCartList
console.log(funcShoppingCartList)
for (let i = 0, l = funcShoppingCartList.length; i < l; i++) {
let funcItem = {
'smCommodity': {
'id': funcShoppingCartList[i].id,
},
'smInventory': {
'id': funcShoppingCartList[i].inventoriesId,
},
'goodType': funcShoppingCartList[i].typeId,
'name': funcShoppingCartList[i].name,
'number': funcShoppingCartList[i].quantity,
'unitPrice': Number(funcShoppingCartList[i].priceFinal),
'totalPrices': funcShoppingCartList[i].quantity * Number(funcShoppingCartList[i].priceFinal)
if (funcShoppingCartList.isActive) {
let funcItem = {
'smCommodity': {
'id': funcShoppingCartList[i].id,
},
'smInventory': {
'id': funcShoppingCartList[i].inventoriesId,
},
'goodType': funcShoppingCartList[i].typeId,
'name': funcShoppingCartList[i].name,
'number': funcShoppingCartList[i].quantity,
'unitPrice': Number(funcShoppingCartList[i].priceFinal),
'totalPrices': funcShoppingCartList[i].quantity * Number(funcShoppingCartList[i].priceFinal)
}
funcCommodity.push(funcItem)
}
funcCommodity.push(funcItem)
}
// 整合用户数据
......@@ -549,6 +548,10 @@ Page({
},
success: (response) => {
let funcResponse = response.data.wxRequest
// 库存不足
// if (funcResponse.)
// 库存充足正常下单支付
pagePayId = response.data.orderId
this.setData({
orderId: pagePayId
......@@ -560,10 +563,10 @@ Page({
'package': funcResponse.package,
'signType': funcResponse.signType,
'paySign': funcResponse.paySign,
'success': (response) => {
success: (response) => {
if (response.errMsg === 'requestPayment:ok') {
// 用户点击支付完成按钮回调
this.payStatus(true)
// this.payStatus(true)
}
if (response.errMsg === 'requestPayment:fail cancel') {
......@@ -571,7 +574,7 @@ Page({
this.payStatus(false)
}
},
'fail': function (response) {
fail: (response) => {
clearInterval(App.globalData.payStateTimer)
this.payStatus(false)
}
......@@ -619,8 +622,16 @@ Page({
*/
payStatus: function (funcPayResult) {
clearInterval(App.globalData.payStateTimer)
wx.navigateTo({
url: '/pages/pay/order-state/order-state?state=' + funcPayResult + '&amount=' + this.data.buyContentAmount + '&orderId=' + this.data.orderId
})
if (funcPayResult) {
// 支付成功进入成功页面
wx.navigateTo({
url: '/pages/pay/order-state/order-state?state=' + funcPayResult + '&amount=' + this.data.buyContentAmount + '&orderId=' + this.data.orderId
})
} else {
// 取消支付直接进入订单
wx.reLaunch({
url: '/pages/pay/order-detail/order-detail?id=' + this.data.orderId + '&fromPage=order'
})
}
},
})
\ No newline at end of file
......@@ -208,4 +208,74 @@ Page({
url: '/pages/play/movie/movie'
})
},
// 游客攻略列表
loadVisiterPlanList() {
this.data.loading = true
var that = this
app.wxRequest({
url: '/api/v1/strategy/getList',
data: { pageSize: that.data.pageSize + '', pageNo: that.data.pageNo + '' },
success: function (res) {
that.setData({
loading: false
})
if (res.data.list.length > 0) {
let count = that.data.strategyOriginList.length
if (that.data.pageNo == 1) {
count = 0
}
let tempArray = []
for (let i = 0; i < res.data.list.length; i++) {
let item = res.data.list[i]
let strategy = {
id: item.id,
image: (count == 0 && i == 0) ? item.topImg : item.cover,
title: item.title,
date: item.updateDate,
index: count + i - 1,
}
tempArray.push(strategy)
}
console.log('tempArray', tempArray)
if (that.data.pageNo == 1) {
var newArr = tempArray.slice(1)
var firstItem = tempArray[0]
console.log('firstItem', firstItem)
that.setData({
moreData: (tempArray.length >= Number(res.data.count)) ? false : true,
['strategyFirstItem.id']: firstItem.id,
['strategyFirstItem.image']: firstItem.image,
['strategyFirstItem.title']: firstItem.title,
['strategyFirstItem.date']: firstItem.date,
strategyList: newArr,
strategyOriginList: tempArray,
})
} else {
that.setData({
moreData: (count + tempArray.length >= Number(res.data.count)) ? false : true,
strategyOriginList: that.data.strategyOriginList.concat(tempArray),
strategyList: tempArray,
})
}
// 游客攻略瀑布列表
wx.lin.renderWaterFlow(that.data.strategyList, that.data.pageNo == 1 ? true : false, () => { })
} else {
}
},
fail: function (err) {
that.setData({
loading: false
})
}
})
},
})
\ No newline at end of file
......@@ -15,8 +15,8 @@
<button class="hotel-button" bindtap="onToHotel"></button>
</view>
<view class="title-wrapper row con-b align-c">
<image class="title" src="./image/title-activity.png">近期活动</image>
<view class="title row con-b align-c">
<image src="./image/title-activity.png">近期活动</image>
<text bindtap="onAllRecent">查看全部</text>
</view>
<swiper class="recent-swiper" next-margin="38rpx" bindchange="swiperRecentChange">
......@@ -27,8 +27,8 @@
</block>
</swiper>
<view class="title-wrapper row con-b align-c">
<image class="title" src="./image/title-movie.png">热映影片</image>
<view class="title row con-b align-c">
<image src="./image/title-movie.png">热映影片</image>
<text bindtap="onAllRecent">查看全部</text>
</view>
<swiper class="movie-swiper" next-margin="38rpx" bindchange="swiperMovieChange">
......@@ -70,10 +70,13 @@
</block>
</swiper>
<view class="title-wrapper row align-c">
<image class="title" src="./image/title-route.png">游客攻略</image>
</view>
<view>
<!-- 游客攻略 -->
<view class="route">
<view class="title row align-c">
<image src="./image/title-route.png">游客攻略</image>
</view>
<view class="route-list">
</view>
</view>
</view>
\ No newline at end of file
......@@ -29,12 +29,14 @@
width: 130rpx;
height: 20rpx;
}
.banner {
position: relative;
margin-top: 200rpx;
width: 750rpx;
height: 1200rpx;
}
.art-button {
position: absolute;
top: 40rpx;
......@@ -43,6 +45,7 @@
height: 260rpx;
background: transparent;
}
.health-button {
position: absolute;
top: 320rpx;
......@@ -51,6 +54,7 @@
height: 376rpx;
background: transparent;
}
.food-button {
position: absolute;
top: 350rpx;
......@@ -59,6 +63,7 @@
height: 376rpx;
background: transparent;
}
.leisure-button {
position: absolute;
top: 788rpx;
......@@ -66,8 +71,8 @@
width: 304rpx;
height: 308rpx;
background: transparent;
}
.hotel-button {
position: absolute;
top: 820rpx;
......@@ -75,37 +80,36 @@
width: 296rpx;
height: 328rpx;
background: transparent;
}
.title-wrapper {
width: 670rpx;
margin-top: 30rpx;
}
.title {
width: 184rpx;
height: 44rpx;
}
.all {
width: 104rpx;
height: 36rpx;
background-color: #ccc;
}
.recent-swiper {
width: 750rpx;
height: 721rpx;
margin-top: 80rpx;
padding-bottom: 50rpx;
}
.recent-item {
width: 712rpx;
}
.recent-item image {
width: 648rpx;
background-color: #ccc;
}
.recent-item-left {
margin-left: 40rpx;
}
.recent-item-center {
margin-left: 51rpx;
}
......@@ -116,17 +120,20 @@
margin-top: 48rpx;
padding-bottom: 50rpx;
}
.movie-item {
width: 712rpx;
}
.movie-wrapper {
position: relative;
width: 648rpx;
height: 326rpx;
padding: 40rpx 40rpx 40rpx 260rpx;
background-color: #F5F6F8;
background-color: #f5f6f8;
border-radius: 4rpx;
}
.movie-cover {
position: absolute;
left: 40rpx;
......@@ -136,24 +143,29 @@
background-color: #ccc;
border-radius: 4rpx;
}
.movie-item-left {
margin-left: 40rpx;
}
.movie-item-center {
margin-left: 51rpx;
}
.movie-info-wrapper {
margin-left: 40rpx;
}
.movie-name text {
display: -webkit-box;
color: #15191F;
color: #15191f;
font-size: 30rpx;
max-width: 240rpx;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
overflow: hidden;
}
.movie-dimensional {
width: 52rpx;
height: 32rpx;
......@@ -163,25 +175,29 @@
font-size: 20rpx;
text-align: center;
line-height: 32rpx;
background: #15191F;
background: #15191f;
opacity: 0.5;
border-radius: 4rpx;
}
.movie-info {
margin-top: 16rpx;
font-size: 26rpx;
}
.movie-info-left {
color: #959DA9;
color: #959da9;
}
.movie-info-right {
display: -webkit-box;
margin-left: 8rpx;
color: #656E7B;
color: #656e7b;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
overflow: hidden;
}
.movie-btn {
width: 152rpx;
height: 56rpx;
......@@ -190,12 +206,10 @@
font-size: 26rpx;
text-align: center;
line-height: 56rpx;
background: #86C5E1;
background: #86c5e1;
border-radius: 4rpx;
}
/* .banner,
swiper {
position: relative;
......@@ -230,6 +244,7 @@ swiper-item {
}
/* 更多活动 */
.activity {
width: 100%;
height: 34rpx;
......@@ -237,7 +252,7 @@ swiper-item {
padding: 0 56rpx;
font-size: 26rpx;
font-weight: bolder;
color: #1E2025;
color: #1e2025;
}
.activity image {
......@@ -246,6 +261,7 @@ swiper-item {
}
/* 装饰波浪 */
.ornament-wave {
width: 750rpx;
height: 60rpx;
......@@ -258,10 +274,11 @@ swiper-item {
}
/* 标签选择 */
.tab {
width: 100%;
padding: 40rpx 40rpx 0 40rpx;
background: #ffffff;
background: #fff;
}
.tab-fixed {
......@@ -275,7 +292,7 @@ swiper-item {
.tab-blank {
width: 750rpx;
height: 190rpx;
background: #ffffff;
background: #fff;
}
.tab .tab-item-active {
......@@ -283,7 +300,7 @@ swiper-item {
height: 100rpx;
margin-bottom: 16rpx;
border-radius: 50%;
background: #E3EEFF;
background: #e3eeff;
}
.tab .tab-item-inactive {
......@@ -295,11 +312,11 @@ swiper-item {
}
.tab .tab-item-text-active {
color: #15191F;
color: #15191f;
}
.tab .tab-item-text-inactive {
color: #959DA9;
color: #959da9;
}
.tab-item text {
......@@ -313,6 +330,7 @@ swiper-item {
}
/* 标签详情 */
.detail {
width: 750rpx;
min-height: 500rpx;
......@@ -326,6 +344,7 @@ swiper-item {
}
/* 商店详情 */
.shop-item {
position: relative;
width: 750rpx;
......@@ -344,17 +363,27 @@ swiper-item {
position: absolute;
width: 534rpx;
height: 96rpx;
background: #86C5E1;
background: #86c5e1;
border-radius: 2px;
overflow: hidden;
font-size: 30rpx;
font-weight: 500;
color: #ffffff;
color: #fff;
line-height: 42rpx;
}
image {
width: 100%;
height: 100%;
}
/* 游客攻略 */
.title {
width: 670rpx;
margin-top: 30rpx;
}
.title > image {
width: 184rpx;
height: 44rpx;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment