Browse Source

2021-5-25

2312970463@qq.com 4 years ago
parent
commit
ec3b1996ab
100 changed files with 1395 additions and 1002 deletions
  1. 7 5
      pages.json
  2. 431 429
      pages/cart/cart.vue
  3. 2 1
      pages/index/index.vue
  4. 351 317
      pages/money/wallet.vue
  5. 431 236
      pages/product/groupBooking/index.vue
  6. 169 12
      pages/product/seckill.vue
  7. 4 2
      pages/user/user.vue
  8. BIN
      static/icon/hot.png
  9. BIN
      static/img/wallertbg.png
  10. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map
  11. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
  12. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/Loading/index.js.map
  13. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/countDown/index.js.map
  14. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/empty.js.map
  15. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/emptyPage.js.map
  16. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/home/index.js.map
  17. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/jyf-parser/jyf-parser.js.map
  18. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/jyf-parser/libs/trees.js.map
  19. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/newlist/nowList.js.map
  20. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/returnButton.js.map
  21. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/seckill/seckill.js.map
  22. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/ss-calendar/ss-calendar.js.map
  23. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-badge/uni-badge.js.map
  24. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-countdown/uni-countdown.js.map
  25. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-countdown/uni-countdowns.js.map
  26. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-fav/uni-fav.js.map
  27. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-icons/uni-icons.js.map
  28. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-list-item/uni-list-item.js.map
  29. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-list/uni-list.js.map
  30. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-load-more/uni-load-more.js.map
  31. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-notice-bar/uni-notice-bar.js.map
  32. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-number-box.js.map
  33. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-popup/uni-popup-dialog.js.map
  34. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-popup/uni-popup-message.js.map
  35. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-popup/uni-popup.js.map
  36. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-rate/uni-rate.js.map
  37. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-steps/uni-steps.js.map
  38. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-transition/uni-transition.js.map
  39. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/activity/bargain/index.js.map
  40. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/activity/goods_bargain/index.js.map
  41. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/activity/goods_bargain_details/index.js.map
  42. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/cart/cart.js.map
  43. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/category/category.js.map
  44. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map
  45. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/sign.js.map
  46. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/money/account.js.map
  47. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/money/pay.js.map
  48. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/money/paySuccess.js.map
  49. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/money/recharge.js.map
  50. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/money/wallet.js.map
  51. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/money/withdrawal.js.map
  52. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/createOrder.js.map
  53. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/evaluate.js.map
  54. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/expressInfo.js.map
  55. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/order.js.map
  56. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/orderDetail.js.map
  57. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/orderRefund.js.map
  58. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/classify.js.map
  59. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/contentText.js.map
  60. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/discounts.js.map
  61. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/estimate.js.map
  62. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/freshDetail.js.map
  63. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/groupBottom.js.map
  64. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/groupContent.js.map
  65. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/groupTime.js.map
  66. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/guessLike.js.map
  67. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/productBottom.js.map
  68. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/productContent.js.map
  69. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/topSwiper.js.map
  70. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/groupBooking/detail.js.map
  71. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/groupBooking/index.js.map
  72. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/groupBooking/inviteImg.js.map
  73. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/groupBooking/productCollage.js.map
  74. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/groupBooking/productGroup.js.map
  75. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/list.js.map
  76. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/pointsExchange.js.map
  77. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/product.js.map
  78. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/reply.js.map
  79. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/search.js.map
  80. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/seckill.js.map
  81. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/public/forget.js.map
  82. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/public/login.js.map
  83. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/public/register.js.map
  84. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/public/wxLogin.js.map
  85. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/set/address.js.map
  86. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/set/addressManage.js.map
  87. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/set/password.js.map
  88. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/set/phone.js.map
  89. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/set/set.js.map
  90. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/set/userinfo.js.map
  91. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/award.js.map
  92. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/coupon.js.map
  93. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/favorites.js.map
  94. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/notice.js.map
  95. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/scoreAccumulate.js.map
  96. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/shareQrCode.js.map
  97. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/user.js.map
  98. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/withdrawal.js.map
  99. 0 0
      unpackage/dist/dev/app-plus/app-config-service.js
  100. 0 0
      unpackage/dist/dev/app-plus/app-service.js

+ 7 - 5
pages.json

@@ -411,11 +411,13 @@
 			"path": "pages/money/wallet",
 			"style": {
 				"navigationBarTitleText": "我的钱包",
-				"app-plus": {
-					"titleNView": {
-						"type": "transparent"
-					}
-				}
+				"navigationBarBackgroundColor": "#921a23",
+				"navigationBarTextStyle": "white"
+				// "app-plus": {
+				// 	"titleNView": {
+				// 		"type": "transparent"
+				// 	}
+				// }
 			}
 		},
 		{

+ 431 - 429
pages/cart/cart.vue

@@ -1,429 +1,431 @@
-<template>
-	<view class="container">
-		<!-- 空白页 -->
-		<view v-if="!hasLogin || empty === true" class="empty">
-			<image src="/static/error/emptyCart.png" class="emptyImg" mode="aspectFit"></image>
-			<view v-if="hasLogin" class="empty-tips">
-				空空如也
-				<navigator class="navigator" v-if="hasLogin" url="../index/index" open-type="switchTab">随便逛逛></navigator>
-			</view>
-			<view v-else class="empty-tips">
-				空空如也
-				<view class="navigator" @click="navToLogin">去登陆></view>
-			</view>
-		</view>
-		<view v-else>
-			<!-- 列表 -->
-			<view class="cart-list">
-				<block v-for="(item, index) in cartList" :key="item.id">
-					<view class="cart-item" :class="{ 'b-b': index !== cartList.length - 1 }">
-						<view class="image-wrapper">
-							<image
-								:src="item.productInfo.image"
-								:class="[item.loaded]"
-								mode="aspectFill"
-								lazy-load
-								@load="onImageLoad('cartList', index)"
-								@error="onImageError('cartList', index)"
-							></image>
-							<view class="iconfont iconroundcheckfill checkbox" :class="{ checked: item.checked }" @click="check('item', index)"></view>
-						</view>
-						<view class="item-right">
-							<text class="clamp title">{{ item.productInfo.store_name }}</text>
-							<text class="attr">{{ item.attr_val }}</text>
-							<text class="price">¥{{ item.productInfo.price }}</text>
-							<uni-number-box
-								class="step"
-								:min="1"
-								:max="item.productInfo.stock"
-								:value="item.cart_num > item.productInfo.stock ? item.productInfo.stock : item.cart_num"
-								:isMax="item.cart_num >= item.productInfo.stock ? true : false"
-								:isMin="item.cart_num === 1"
-								:index="index"
-								@eventChange="numberChange"
-							></uni-number-box>
-						</view>
-						<text class="del-btn iconfont iconclose" @click="deleteCartItem(index)"></text>
-					</view>
-				</block>
-			</view>
-			<!-- 底部菜单栏 -->
-			<view class="action-section">
-				<view class="checkbox">
-					<view class="iconfont iconroundcheckfill icon-checked-box" @click="check('all')" :class="{ 'icon-checked': allChecked }"></view>
-					<view class="clear-btn" @click="allChecked ? clearCart() : ''" :class="{ show: allChecked }"><text>清空</text></view>
-				</view>
-				<view class="total-box">
-					<text class="price">¥{{ total }}</text>
-					<!-- <text class="coupon">
-						已优惠
-						<text>74.35</text>
-						元
-					</text> -->
-				</view>
-				<button type="primary" class="no-border confirm-btn" @click="createOrder">去结算</button>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { getCartList, getCartNum, cartDel } from '@/api/user.js';
-import { mapState } from 'vuex';
-import uniNumberBox from '@/components/uni-number-box.vue';
-import { saveUrl, interceptor } from '@/utils/loginUtils.js';
-export default {
-	components: {
-		uniNumberBox
-	},
-	data() {
-		return {
-			total: 0, //总价格
-			allChecked: false, //全选状态  true|false
-			empty: false, //空白页现实  true|false
-			cartList: []
-		};
-	},
-	onShow() {
-		// 只有登录时才加载数据
-		if (this.hasLogin) {
-			this.loadData();
-		}
-	},
-	watch: {
-		//显示空白页
-		cartList(e) {
-			let empty = e.length === 0 ? true : false;
-			if (this.empty !== empty) {
-				this.empty = empty;
-			}
-		}
-	},
-	computed: {
-		...mapState('user', ['hasLogin'])
-	},
-	methods: {
-		//请求数据
-		async loadData() {
-			let obj = this;
-			getCartList({})
-				.then(function(e) {
-					// 获取当前购物车物品增加数量
-					let nub = obj.cartList.length;
-					// 获取之前对象数组
-					let aArray = obj.cartList.reverse();
-					// 获取返回数据对象数组
-					let bArray = e.data.valid.reverse();
-					obj.cartList = bArray
-						.map((item, ind) => {
-							// 设置返回数据默认为勾选状态
-							item.checked = true;
-							// 获取相同数组之前对象的数据
-							let carlist = aArray[ind];
-							// 判断之前是否已经加载完毕
-							if (carlist && carlist.loaded == 'loaded') {
-								item.loaded = 'loaded';
-							}
-							return item;
-						})
-						.reverse();
-					obj.calcTotal(); //计算总价
-				})
-				.catch(function(e) {
-					console.log(e);
-				});
-		},
-		//监听image加载完成
-		onImageLoad(key, index) {
-			// 修改载入完成后图片class样式
-			this.$set(this[key][index], 'loaded', 'loaded');
-		},
-		//监听image加载失败
-		onImageError(key, index) {
-			this[key][index].image = '/static/error/errorImage.jpg';
-		},
-		// 跳转到登录页
-		navToLogin() {
-			// 保存地址
-			saveUrl();
-			// 登录拦截
-			interceptor();
-		},
-		//选中状态处理
-		check(type, index) {
-			if (type === 'item') {
-				this.cartList[index].checked = !this.cartList[index].checked;
-			} else {
-				const checked = !this.allChecked;
-				const list = this.cartList;
-				list.forEach(item => {
-					item.checked = checked;
-				});
-				this.allChecked = checked;
-			}
-			this.calcTotal(type);
-		},
-		//数量
-		numberChange(data) {
-			let arr = this.cartList[data.index];
-			arr.cart_num = data.number;
-			getCartNum({ id: arr.id, number: data.number })
-				.then(e => {
-					console.log(e);
-				})
-				.catch(function(e) {
-					console.log(e);
-				});
-			this.calcTotal();
-		},
-		//删除
-		deleteCartItem(index) {
-			let list = this.cartList;
-			let row = list[index];
-			let id = row.id;
-			cartDel({
-				ids: id
-			});
-			this.cartList.splice(index, 1);
-			uni.hideLoading();
-			this.calcTotal();
-		},
-		//清空
-		clearCart() {
-			uni.showModal({
-				content: '清空购物车?',
-				success: e => {
-					if (e.confirm) {
-						let st = this.cartList.map(e => {
-							return e.id;
-						});
-						cartDel({
-							ids: st.join(',')
-						}).then(e => {
-							console.log(e);
-						});
-						this.cartList = [];
-					}
-				}
-			});
-		},
-		//计算总价
-		calcTotal() {
-			let list = this.cartList;
-			if (list.length === 0) {
-				this.empty = true;
-				return;
-			}
-			let total = 0;
-			let checked = true;
-			list.forEach(item => {
-				if (item.checked === true) {
-					total += item.productInfo.price * item.cart_num;
-				} else if (checked === true) {
-					checked = false;
-				}
-			});
-			this.allChecked = checked;
-			this.total = Number(total.toFixed(2));
-		},
-		//创建订单
-		createOrder() {
-			let list = this.cartList;
-			let goodsData = [];
-			list.forEach(item => {
-				if (item.checked) {
-					goodsData.push(item.id);
-				}
-			});
-
-			uni.navigateTo({
-				url: '/pages/order/createOrder?id=' + goodsData.join(',')
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-.container {
-	padding-bottom: 134rpx;
-	background-color: $page-color-base;
-	/* 空白页 */
-	.empty {
-		position: fixed;
-		left: 0;
-		top: 0;
-		width: 100%;
-		height: 100vh;
-		padding-bottom: 100rpx;
-		display: flex;
-		justify-content: center;
-		flex-direction: column;
-		align-items: center;
-		background: #fff;
-		.emptyImg {
-			width: 300rpx;
-			height: 250rpx;
-			margin-bottom: 30rpx;
-		}
-		.empty-tips {
-			display: flex;
-			font-size: $font-sm + 2rpx;
-			color: $font-color-disabled;
-			.navigator {
-				color: $uni-color-primary;
-				margin-left: 16rpx;
-			}
-		}
-	}
-}
-/* 购物车列表项 */
-.cart-item {
-	display: flex;
-	position: relative;
-	padding: 30rpx 40rpx;
-	.image-wrapper {
-		width: 230rpx;
-		height: 230rpx;
-		flex-shrink: 0;
-		position: relative;
-		image {
-			border-radius: 8rpx;
-		}
-	}
-	.checkbox {
-		position: absolute;
-		left: -16rpx;
-		top: -16rpx;
-		z-index: 8;
-		font-size: 44rpx;
-		line-height: 1;
-		padding: 4rpx;
-		color: $font-color-disabled;
-		background: #fff;
-		border-radius: 50px;
-	}
-	.item-right {
-		display: flex;
-		flex-direction: column;
-		flex: 1;
-		overflow: hidden;
-		position: relative;
-		padding-left: 30rpx;
-		.title,
-		.price {
-			font-size: $font-base + 2rpx;
-			color: $font-color-dark;
-			height: 40rpx;
-			line-height: 40rpx;
-		}
-		.attr {
-			font-size: $font-sm + 2rpx;
-			color: $font-color-light;
-			height: 50rpx;
-			line-height: 50rpx;
-		}
-		.price {
-			height: 50rpx;
-			line-height: 50rpx;
-		}
-		.step {
-			margin-top: 20rpx;
-		}
-	}
-	.del-btn {
-		padding: 4rpx 10rpx;
-		font-size: 34rpx;
-		height: 50rpx;
-		color: $font-color-light;
-	}
-}
-/* 底部栏 */
-.action-section {
-	/* #ifdef H5 */
-	margin-bottom: 100rpx;
-	/* #endif */
-	position: fixed;
-	left: 30rpx;
-	bottom: 30rpx;
-	z-index: 95;
-	display: flex;
-	align-items: center;
-	width: 690rpx;
-	height: 100rpx;
-	padding: 0 30rpx;
-	background: rgba(255, 255, 255, 0.9);
-	box-shadow: 0 0 20rpx 0 rgba(0, 0, 0, 0.5);
-	border-radius: 16rpx;
-	.checkbox {
-		height: 52rpx;
-		position: relative;
-		.icon-checked-box {
-			border-radius: 50rpx;
-			background-color: #ffffff;
-			width: 52rpx;
-			height: 100%;
-			position: relative;
-			z-index: 5;
-			font-size: 53rpx;
-			line-height: 1;
-			color: $font-color-light;
-		}
-		.icon-checked {
-			color: $base-color;
-		}
-	}
-	.clear-btn {
-		position: absolute;
-		left: 26rpx;
-		top: 0;
-		z-index: 4;
-		width: 0;
-		height: 52rpx;
-		line-height: 52rpx;
-		padding-left: 38rpx;
-		font-size: $font-base;
-		color: #fff;
-		background: $font-color-disabled;
-		border-radius: 0 50px 50px 0;
-		opacity: 0;
-		transition: 0.2s;
-		&.show {
-			opacity: 1;
-			width: 120rpx;
-		}
-	}
-	.total-box {
-		flex: 1;
-		display: flex;
-		flex-direction: column;
-		text-align: right;
-		padding-right: 40rpx;
-		.price {
-			font-size: $font-lg;
-			color: $font-color-dark;
-		}
-		.coupon {
-			font-size: $font-sm;
-			color: $font-color-light;
-			text {
-				color: $font-color-dark;
-			}
-		}
-	}
-	.confirm-btn {
-		padding: 0 38rpx;
-		margin: 0;
-		border-radius: 100px;
-		height: 76rpx;
-		line-height: 76rpx;
-		font-size: $font-base + 2rpx;
-		background: $base-color;
-	}
-}
-/* 复选框选中状态 */
-.action-section .checkbox.checked,
-.cart-item .checkbox.checked {
-	color: $base-color;
-}
-</style>
+<template>
+	<view class="container">
+		<!-- 空白页 -->
+		<view v-if="!hasLogin || empty === true" class="empty">
+			<image src="/static/error/emptyCart.png" class="emptyImg" mode="aspectFit"></image>
+			<view v-if="hasLogin" class="empty-tips">
+				空空如也
+				<navigator class="navigator" v-if="hasLogin" url="../index/index" open-type="switchTab">随便逛逛></navigator>
+			</view>
+			<view v-else class="empty-tips">
+				空空如也
+				<view class="navigator" @click="navToLogin">去登陆></view>
+			</view>
+		</view>
+		<view v-else>
+			<!-- 列表 -->
+			<view class="cart-list">
+				<block v-for="(item, index) in cartList" :key="item.id">
+					<view class="cart-item" :class="{ 'b-b': index !== cartList.length - 1 }">
+						<view class="image-wrapper">
+							<image
+								:src="item.productInfo.image"
+								:class="[item.loaded]"
+								mode="aspectFill"
+								lazy-load
+								@load="onImageLoad('cartList', index)"
+								@error="onImageError('cartList', index)"
+							></image>
+							<view class="iconfont iconroundcheckfill checkbox" :class="{ checked: item.checked }" @click="check('item', index)"></view>
+						</view>
+						<view class="item-right">
+							<text class="clamp title">{{ item.productInfo.store_name }}</text>
+							<text class="attr">{{ item.attr_val }}</text>
+							<text class="price">¥{{ item.productInfo.price }}</text>
+							<uni-number-box
+								class="step"
+								:min="1"
+								:max="item.productInfo.stock"
+								:value="item.cart_num > item.productInfo.stock ? item.productInfo.stock : item.cart_num"
+								:isMax="item.cart_num >= item.productInfo.stock ? true : false"
+								:isMin="item.cart_num === 1"
+								:index="index"
+								@eventChange="numberChange"
+							></uni-number-box>
+						</view>
+						<text class="del-btn iconfont iconclose" @click="deleteCartItem(index)"></text>
+					</view>
+				</block>
+			</view>
+			<!-- 底部菜单栏 -->
+			<view class="action-section">
+				<view class="checkbox">
+					<view class="iconfont iconroundcheckfill icon-checked-box" @click="check('all')" :class="{ 'icon-checked': allChecked }"></view>
+					<view class="clear-btn" @click="allChecked ? clearCart() : ''" :class="{ show: allChecked }"><text>清空</text></view>
+				</view>
+				<view class="total-box">
+					<text class="price">¥{{ total }}</text>
+					<!-- <text class="coupon">
+						已优惠
+						<text>74.35</text>
+						元
+					</text> -->
+				</view>
+				<button type="primary" class="no-border confirm-btn" @click="createOrder">去结算</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { getCartList, getCartNum, cartDel } from '@/api/user.js';
+import { mapState } from 'vuex';
+import uniNumberBox from '@/components/uni-number-box.vue';
+import { saveUrl, interceptor } from '@/utils/loginUtils.js';
+export default {
+	components: {
+		uniNumberBox
+	},
+	data() {
+		return {
+			total: 0, //总价格
+			allChecked: false, //全选状态  true|false
+			empty: false, //空白页现实  true|false
+			cartList: []
+		};
+	},
+	onShow() {
+		// 只有登录时才加载数据
+		if (this.hasLogin) {
+			this.loadData();
+		}
+	},
+	watch: {
+		//显示空白页
+		cartList(e) {
+			let empty = e.length === 0 ? true : false;
+			if (this.empty !== empty) {
+				this.empty = empty;
+			}
+		}
+	},
+	computed: {
+		...mapState('user', ['hasLogin'])
+	},
+	methods: {
+		//请求数据
+		async loadData() {
+			let obj = this;
+			getCartList({})
+				.then(function(e) {
+					// 获取当前购物车物品增加数量
+					let nub = obj.cartList.length;
+					// 获取之前对象数组
+					let aArray = obj.cartList.reverse();
+					// 获取返回数据对象数组
+					let bArray = e.data.valid.reverse();
+					obj.cartList = bArray
+						.map((item, ind) => {
+							// 设置返回数据默认为勾选状态
+							item.checked = true;
+							// 获取相同数组之前对象的数据
+							let carlist = aArray[ind];
+							// 判断之前是否已经加载完毕
+							if (carlist && carlist.loaded == 'loaded') {
+								item.loaded = 'loaded';
+							}
+							return item;
+						})
+						.reverse();
+					obj.calcTotal(); //计算总价
+				})
+				.catch(function(e) {
+					console.log(e);
+				});
+		},
+		//监听image加载完成
+		onImageLoad(key, index) {
+			// 修改载入完成后图片class样式
+			this.$set(this[key][index], 'loaded', 'loaded');
+		},
+		//监听image加载失败
+		onImageError(key, index) {
+			this[key][index].image = '/static/error/errorImage.jpg';
+		},
+		// 跳转到登录页
+		navToLogin() {
+			// 保存地址
+			saveUrl();
+			// 登录拦截
+			interceptor();
+		},
+		//选中状态处理
+		check(type, index) {
+			if (type === 'item') {
+				this.cartList[index].checked = !this.cartList[index].checked;
+			} else {
+				const checked = !this.allChecked;
+				const list = this.cartList;
+				list.forEach(item => {
+					item.checked = checked;
+				});
+				this.allChecked = checked;
+			}
+			this.calcTotal(type);
+		},
+		//数量
+		numberChange(data) {
+			let arr = this.cartList[data.index];
+			arr.cart_num = data.number;
+			getCartNum({ id: arr.id, number: data.number })
+				.then(e => {
+					console.log(e);
+				})
+				.catch(function(e) {
+					console.log(e);
+				});
+			this.calcTotal();
+		},
+		//删除
+		deleteCartItem(index) {
+			let list = this.cartList;
+			let row = list[index];
+			let id = row.id;
+			cartDel({
+				ids: id
+			});
+			this.cartList.splice(index, 1);
+			uni.hideLoading();
+			this.calcTotal();
+		},
+		//清空
+		clearCart() {
+			uni.showModal({
+				content: '清空购物车?',
+				success: e => {
+					if (e.confirm) {
+						let st = this.cartList.map(e => {
+							return e.id;
+						});
+						cartDel({
+							ids: st.join(',')
+						}).then(e => {
+							console.log(e);
+						});
+						this.cartList = [];
+					}
+				}
+			});
+		},
+		//计算总价
+		calcTotal() {
+			let list = this.cartList;
+			if (list.length === 0) {
+				this.empty = true;
+				return;
+			}
+			let total = 0;
+			let checked = true;
+			list.forEach(item => {
+				if (item.checked === true) {
+					total += item.productInfo.price * item.cart_num;
+				} else if (checked === true) {
+					checked = false;
+				}
+			});
+			this.allChecked = checked;
+			this.total = Number(total.toFixed(2));
+		},
+		//创建订单
+		createOrder() {
+			let list = this.cartList;
+			let goodsData = [];
+			list.forEach(item => {
+				if (item.checked) {
+					goodsData.push(item.id);
+				}
+			});
+
+			uni.navigateTo({
+				url: '/pages/order/createOrder?id=' + goodsData.join(',')
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+.container {
+	padding-bottom: 134rpx;
+	background-color: $page-color-base;
+	/* 空白页 */
+	.empty {
+		position: fixed;
+		left: 0;
+		top: 0;
+		width: 100%;
+		height: 100vh;
+		padding-bottom: 100rpx;
+		display: flex;
+		justify-content: center;
+		flex-direction: column;
+		align-items: center;
+		background: #fff;
+		.emptyImg {
+			width: 300rpx;
+			height: 250rpx;
+			margin-bottom: 30rpx;
+		}
+		.empty-tips {
+			display: flex;
+			font-size: $font-sm + 2rpx;
+			color: $font-color-disabled;
+			
+			.navigator {
+				// color: $uni-color-primary;
+				margin-left: 16rpx;
+				color: #901b21;
+			}
+		}
+	}
+}
+/* 购物车列表项 */
+.cart-item {
+	display: flex;
+	position: relative;
+	padding: 30rpx 40rpx;
+	.image-wrapper {
+		width: 230rpx;
+		height: 230rpx;
+		flex-shrink: 0;
+		position: relative;
+		image {
+			border-radius: 8rpx;
+		}
+	}
+	.checkbox {
+		position: absolute;
+		left: -16rpx;
+		top: -16rpx;
+		z-index: 8;
+		font-size: 44rpx;
+		line-height: 1;
+		padding: 4rpx;
+		color: $font-color-disabled;
+		background: #fff;
+		border-radius: 50px;
+	}
+	.item-right {
+		display: flex;
+		flex-direction: column;
+		flex: 1;
+		overflow: hidden;
+		position: relative;
+		padding-left: 30rpx;
+		.title,
+		.price {
+			font-size: $font-base + 2rpx;
+			color: $font-color-dark;
+			height: 40rpx;
+			line-height: 40rpx;
+		}
+		.attr {
+			font-size: $font-sm + 2rpx;
+			color: $font-color-light;
+			height: 50rpx;
+			line-height: 50rpx;
+		}
+		.price {
+			height: 50rpx;
+			line-height: 50rpx;
+		}
+		.step {
+			margin-top: 20rpx;
+		}
+	}
+	.del-btn {
+		padding: 4rpx 10rpx;
+		font-size: 34rpx;
+		height: 50rpx;
+		color: $font-color-light;
+	}
+}
+/* 底部栏 */
+.action-section {
+	/* #ifdef H5 */
+	margin-bottom: 100rpx;
+	/* #endif */
+	position: fixed;
+	left: 30rpx;
+	bottom: 30rpx;
+	z-index: 95;
+	display: flex;
+	align-items: center;
+	width: 690rpx;
+	height: 100rpx;
+	padding: 0 30rpx;
+	background: rgba(255, 255, 255, 0.9);
+	box-shadow: 0 0 20rpx 0 rgba(0, 0, 0, 0.5);
+	border-radius: 16rpx;
+	.checkbox {
+		height: 52rpx;
+		position: relative;
+		.icon-checked-box {
+			border-radius: 50rpx;
+			background-color: #ffffff;
+			width: 52rpx;
+			height: 100%;
+			position: relative;
+			z-index: 5;
+			font-size: 53rpx;
+			line-height: 1;
+			color: $font-color-light;
+		}
+		.icon-checked {
+			color: $base-color;
+		}
+	}
+	.clear-btn {
+		position: absolute;
+		left: 26rpx;
+		top: 0;
+		z-index: 4;
+		width: 0;
+		height: 52rpx;
+		line-height: 52rpx;
+		padding-left: 38rpx;
+		font-size: $font-base;
+		color: #fff;
+		background: $font-color-disabled;
+		border-radius: 0 50px 50px 0;
+		opacity: 0;
+		transition: 0.2s;
+		&.show {
+			opacity: 1;
+			width: 120rpx;
+		}
+	}
+	.total-box {
+		flex: 1;
+		display: flex;
+		flex-direction: column;
+		text-align: right;
+		padding-right: 40rpx;
+		.price {
+			font-size: $font-lg;
+			color: $font-color-dark;
+		}
+		.coupon {
+			font-size: $font-sm;
+			color: $font-color-light;
+			text {
+				color: $font-color-dark;
+			}
+		}
+	}
+	.confirm-btn {
+		padding: 0 38rpx;
+		margin: 0;
+		border-radius: 100px;
+		height: 76rpx;
+		line-height: 76rpx;
+		font-size: $font-base + 2rpx;
+		background: $base-color;
+	}
+}
+/* 复选框选中状态 */
+.action-section .checkbox.checked,
+.cart-item .checkbox.checked {
+	color: $base-color;
+}
+</style>

+ 2 - 1
pages/index/index.vue

@@ -1761,7 +1761,7 @@ page {
 	}
 }
 .exchange-wrapper {
-	background-color: #fff;
+	// background-color: #fff;
 	width: 696rpx;
 	// height: 100rpx;
 	margin: 37rpx auto 39rpx;
@@ -1773,6 +1773,7 @@ page {
 		width: 342rpx;
 		height: 540rpx;
 		box-shadow: 0px 4px 18px 0px rgba(144, 27, 33, 0.13);
+		background-color: #fff;
 		.ex-img-wrapper {
 			width: 342rpx;
 			height: 338rpx;

+ 351 - 317
pages/money/wallet.vue

@@ -1,317 +1,351 @@
-<template>
-	<view class="content">
-		<view class="content-money">
-			<view class="money-box">
-				<view class="text">可提现金额(元)</view>
-				<view class="money">{{ money | getMoneyStyle }}</view>
-			</view>
-			<view class="moneyTx" @click="navto('/pages/money/recharge')">充值</view>
-			<view class="flex buttom-box">
-				<view class="buttom" @click="navto('/pages/money/recharge')">
-					<view class="icon"><image class="icon-img" src="/static/icon/i5.png" mode="aspectFit"></image></view>
-					<text>充值</text>
-				</view>
-				<view class="interval"></view>
-				<view class="buttom" @click="navto('/pages/money/withdrawal')">
-					<view class="icon"><image class="icon-img" src="/static/icon/i1.png" mode="aspectFit"></image></view>
-					<text>提现</text>
-				</view>
-			</view>
-		</view>
-		<view class="navbar">
-			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)">{{ item.text }}</view>
-		</view>
-		<swiper :current="tabCurrentIndex" :style="{'height':maxheight+'px'}" class="swiper-box" duration="300" @change="changeTab">
-			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
-				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
-					<!-- 空白页 -->
-					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
-
-					<!-- 订单列表 -->
-					<view v-for="(item, index) in tabItem.orderList" :key="index" class="order-item flex">
-						<view class="title-box">
-							<view class="title">
-								<text>{{ item.title }}</text>
-							</view>
-							<view class="time">
-								<text>{{ item.add_time }}</text>
-							</view>
-						</view>
-						<view class="money">
-							<text>{{ (item.pm == 0 ? '-' : '+') + item.number }}</text>
-						</view>
-					</view>
-					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
-				</scroll-view>
-			</swiper-item>
-		</swiper>
-	</view>
-</template>
-
-<script>
-import { spreadCommission, userBalance } from '@/api/wallet.js';
-import { getMoneyStyle } from '@/utils/rocessor.js';
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import empty from '@/components/empty';
-export default {
-	filters: {
-		getMoneyStyle
-	},
-	components: {
-		empty,
-		uniLoadMore
-	},
-	onReady() {
-		// 初始化获取页面宽度
-		uni.createSelectorQuery()
-			.select('.content')
-			.fields(
-				{
-					size: true
-				},
-				data => {
-					console.log(data);
-					console.log(Math.floor((data.width / 750) * 300));
-					// 保存头部高度
-					this.maxheight =data.height - Math.floor((data.width / 750) * 570);
-					console.log(this.maxheight);
-				}
-			)
-			.exec();
-	},
-	data() {
-		return {
-			// 头部图高度
-			maxheight:'',
-			tabCurrentIndex: 0,
-			navList: [
-				{
-					state: 0,
-					text: '全部',
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页数
-					limit: 10 //每次信息条数
-				},
-				{
-					state: 1,
-					text: '支出',
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页数
-					limit: 10 //每次信息条数
-				},
-				{
-					state: 2,
-					text: '收入',
-					loadingType: 'more',
-					orderList: [],
-					page: 1, //当前页数
-					limit: 10 //每次信息条数
-				}
-			],
-			money: ''
-		};
-	},
-	onLoad(options) {},
-	onShow() {
-		this.loadData();
-		// 获取用户余额
-		userBalance({}).then(({ data }) => {
-			this.money = data.now_money;
-		});
-	},
-	methods: {
-		// 页面跳转
-		navto(e) {
-			uni.navigateTo({
-				url: e
-			});
-		},
-		//获取收入支出信息
-		async loadData(source) {
-			//这里是将订单挂载到tab列表下
-			let index = this.tabCurrentIndex;
-			let navItem = this.navList[index];
-			let state = navItem.state;
-			if (source === 'tabChange' && navItem.loaded === true) {
-				//tab切换只有第一次需要加载数据
-				return;
-			}
-			if (navItem.loadingType === 'loading') {
-				//防止重复加载
-				return;
-			}
-			// 修改当前对象状态为加载中
-			navItem.loadingType = 'loading';
-
-			spreadCommission(
-				{
-					page: navItem.page,
-					limit: navItem.limit
-				},
-				state
-			)
-				.then(({ data }) => {
-					if (data.length > 0) {
-						navItem.orderList = navItem.orderList.concat(data[0].list);
-						console.log(navItem.orderList);
-						navItem.page++;
-					}
-					if (navItem.limit == data.length) {
-						//判断是否还有数据, 有改为 more, 没有改为noMore
-						navItem.loadingType = 'more';
-						return;
-					} else {
-						//判断是否还有数据, 有改为 more, 没有改为noMore
-						navItem.loadingType = 'noMore';
-					}
-					uni.hideLoading();
-					this.$set(navItem, 'loaded', true);
-				})
-				.catch(e => {
-					console.log(e);
-				});
-		},
-
-		//swiper 切换
-		changeTab(e) {
-			this.tabCurrentIndex = e.target.current;
-			this.loadData('tabChange');
-		},
-		//顶部tab点击
-		tabClick(index) {
-			this.tabCurrentIndex = index;
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	background: #ffffff;
-	height: 100%;
-}
-.content-money {
-	padding-bottom: 30rpx;
-	background: $page-color-base;
-	.moneyTx {
-		position: absolute;
-		top: 150rpx;
-		right: 0rpx;
-		width: 150rpx;
-		padding: 10rpx 30rpx;
-		border: 2px solid #ffffff;
-		border-top-left-radius: 99rpx;
-		border-bottom-left-radius: 99rpx;
-		color: #ffffff;
-		line-height: 1;
-		font-size: $font-base;
-	}
-	.buttom-box {
-		background-color: #ffffff;
-		text-align: center;
-		margin: 0 30rpx;
-		padding: 20rpx 0;
-		border-radius: $border-radius-sm;
-		margin-top: -60rpx;
-		.buttom {
-			font-size: $font-lg;
-			flex-grow: 1;
-		}
-		.interval {
-			width: 2px;
-			height: 60rpx;
-			background-color: #eeeeee;
-		}
-		.icon {
-			height: 50rpx;
-			width: 48rpx;
-			margin: 0 auto;
-			.icon-img {
-				width: 100%;
-				height: 100%;
-			}
-		}
-	}
-}
-.money-box {
-	background-color: $base-color;
-	padding-top: var(--status-bar-height);
-	height: 368rpx;
-	color: #ffffff;
-	text-align: center;
-	.text {
-		padding-top: 147rpx;
-		font-size: $font-sm;
-	}
-	.money {
-		font-size: 56rpx;
-	}
-}
-
-.navbar {
-	display: flex;
-	height: 40px;
-	padding: 0 5px;
-	background: #fff;
-	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
-	position: relative;
-	z-index: 10;
-	.nav-item {
-		flex: 1;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		height: 100%;
-		font-size: 15px;
-		color: $font-color-dark;
-		position: relative;
-		&.current {
-			color: $base-color;
-			&:after {
-				content: '';
-				position: absolute;
-				left: 50%;
-				bottom: 0;
-				transform: translateX(-50%);
-				width: 44px;
-				height: 0;
-				border-bottom: 2px solid $base-color;
-			}
-		}
-	}
-}
-// 列表
-
-.swiper-box {
-	padding-top: 10rpx;
-	.order-item {
-		padding: 20rpx 30rpx;
-		line-height: 1.5;
-		.title-box {
-			.title {
-				font-size: $font-lg;
-				color: $font-color-base;
-			}
-			.time {
-				font-size: $font-base;
-				color: $font-color-light;
-			}
-		}
-		.money {
-			color: #fd5b23;
-			font-size: $font-lg;
-		}
-	}
-}
-.list-scroll-content {
-	height: 100%;
-}
-.content {
-	height: 100%;
-	.empty-content {
-		background-color: #ffffff;
-	}
-}
-</style>
+<template>
+	<view class="content">
+		<view class="content-money">
+			<view class="money-box">
+				<!-- <view class="text">可提现金额(元)</view> -->
+				<view class="money"><text class="money-icon">¥</text>{{ money | getMoneyStyle }}</view>
+			</view>
+			<!-- <view class="moneyTx" @click="navto('/pages/money/recharge')">充值</view>
+			<view class="flex buttom-box">
+				<view class="buttom" @click="navto('/pages/money/recharge')">
+					<view class="icon"><image class="icon-img" src="/static/icon/i5.png" mode="aspectFit"></image></view>
+					<text>充值</text>
+				</view>
+				<view class="interval"></view>
+				<view class="buttom" @click="navto('/pages/money/withdrawal')">
+					<view class="icon"><image class="icon-img" src="/static/icon/i1.png" mode="aspectFit"></image></view>
+					<text>提现</text>
+				</view>
+			</view> -->
+		</view>
+		<view class="navbar">
+			<view v-for="(item, index) in navList" :key="index" class="nav-item" :class="{ current: tabCurrentIndex === index }" @click="tabClick(index)" v-if="item.text!=='全部'">{{ item.text }}</view>
+		</view>
+		<swiper :current="tabCurrentIndex" :style="{'height':maxheight+'px'}" class="swiper-box" duration="300" @change="changeTab">
+			<swiper-item class="tab-content" v-for="(tabItem, tabIndex) in navList" :key="tabIndex">
+				<scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData">
+					<!-- 空白页 -->
+					<empty v-if="tabItem.loaded === true && tabItem.orderList.length === 0"></empty>
+
+					<!-- 订单列表 -->
+					<view v-for="(item, index) in tabItem.orderList" :key="index" class="order-item flex">
+						<view class="title-box">
+							<view class="title">
+								<text>{{ item.title }}</text>
+							</view>
+							<view class="time">
+								<text>{{ item.add_time }}</text>
+							</view>
+						</view>
+						<view class="money">
+							<text>{{ (item.pm == 0 ? '-' : '+') + item.number }}</text>
+						</view>
+						<view class="jg"></view>
+					</view>
+					<uni-load-more :status="tabItem.loadingType"></uni-load-more>
+				</scroll-view>
+			</swiper-item>
+		</swiper>
+		<view class="add-btn">立刻充值</view>
+	</view>
+</template>
+
+<script>
+import { spreadCommission, userBalance } from '@/api/wallet.js';
+import { getMoneyStyle } from '@/utils/rocessor.js';
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import empty from '@/components/empty';
+export default {
+	filters: {
+		getMoneyStyle
+	},
+	components: {
+		empty,
+		uniLoadMore
+	},
+	onReady() {
+		// 初始化获取页面宽度
+		uni.createSelectorQuery()
+			.select('.content')
+			.fields(
+				{
+					size: true
+				},
+				data => {
+					console.log(data);
+					console.log(Math.floor((data.width / 750) * 300));
+					// 保存头部高度
+					this.maxheight =data.height - Math.floor((data.width / 750) * 570);
+					console.log(this.maxheight);
+				}
+			)
+			.exec();
+	},
+	data() {
+		return {
+			// 头部图高度
+			maxheight:'',
+			tabCurrentIndex: 1,
+			navList: [
+				{
+					state: 0,
+					text: '全部',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 1,
+					text: '收入',
+					loadingType: 'more',
+					orderList: [
+						// { title: 'hello word', add_time: '2021-02-03', pm: 0, number: 99},
+						// { title: 'hello word', add_time: '2021-02-03', pm: 0, number: 99},
+						// { title: 'hello word', add_time: '2021-02-03', pm: 0, number: 99}
+					],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				},
+				{
+					state: 2,
+					text: '支出',
+					loadingType: 'more',
+					orderList: [],
+					page: 1, //当前页数
+					limit: 10 //每次信息条数
+				}
+			],
+			money: ''
+		};
+	},
+	onLoad(options) {},
+	onShow() {
+		// this.loadData();
+		// 获取用户余额
+		// userBalance({}).then(({ data }) => {
+		// 	this.money = data.now_money;
+		// });
+	},
+	methods: {
+		// 页面跳转
+		navto(e) {
+			uni.navigateTo({
+				url: e
+			});
+		},
+		//获取收入支出信息
+		async loadData(source) {
+			//这里是将订单挂载到tab列表下
+			let index = this.tabCurrentIndex;
+			let navItem = this.navList[index];
+			let state = navItem.state;
+			if (source === 'tabChange' && navItem.loaded === true) {
+				//tab切换只有第一次需要加载数据
+				return;
+			}
+			if (navItem.loadingType === 'loading') {
+				//防止重复加载
+				return;
+			}
+			// 修改当前对象状态为加载中
+			navItem.loadingType = 'loading';
+
+			spreadCommission(
+				{
+					page: navItem.page,
+					limit: navItem.limit
+				},
+				state
+			)
+				.then(({ data }) => {
+					if (data.length > 0) {
+						navItem.orderList = navItem.orderList.concat(data[0].list);
+						console.log(navItem.orderList);
+						navItem.page++;
+					}
+					if (navItem.limit == data.length) {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'more';
+						return;
+					} else {
+						//判断是否还有数据, 有改为 more, 没有改为noMore
+						navItem.loadingType = 'noMore';
+					}
+					uni.hideLoading();
+					this.$set(navItem, 'loaded', true);
+				})
+				.catch(e => {
+					console.log(e);
+				});
+		},
+
+		//swiper 切换
+		changeTab(e) {
+			this.tabCurrentIndex = e.target.current;
+			this.loadData('tabChange');
+		},
+		//顶部tab点击
+		tabClick(index) {
+			this.tabCurrentIndex = index;
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background: #ffffff;
+	height: 100%;
+}
+.content-money {
+	padding-bottom: 30rpx;
+	background: $page-color-base;
+	.moneyTx {
+		position: absolute;
+		top: 150rpx;
+		right: 0rpx;
+		width: 150rpx;
+		padding: 10rpx 30rpx;
+		border: 2px solid #ffffff;
+		border-top-left-radius: 99rpx;
+		border-bottom-left-radius: 99rpx;
+		color: #ffffff;
+		line-height: 1;
+		font-size: $font-base;
+	}
+	.buttom-box {
+		background-color: #ffffff;
+		text-align: center;
+		margin: 0 30rpx;
+		padding: 20rpx 0;
+		border-radius: $border-radius-sm;
+		margin-top: -60rpx;
+		.buttom {
+			font-size: $font-lg;
+			flex-grow: 1;
+		}
+		.interval {
+			width: 2px;
+			height: 60rpx;
+			background-color: #eeeeee;
+		}
+		.icon {
+			height: 50rpx;
+			width: 48rpx;
+			margin: 0 auto;
+			.icon-img {
+				width: 100%;
+				height: 100%;
+			}
+		}
+	}
+}
+.money-box {
+	background-color: $base-color;
+	padding-top: var(--status-bar-height);
+	height: 368rpx;
+	color: #ffffff;
+	text-align: center;
+	background-image: url(../../static/img/wallertbg.png);
+	background-size: 100% 100%;
+	.text {
+		padding-top: 147rpx;
+		font-size: $font-sm;
+	}
+	.money {
+		padding-top: 137rpx;
+		// margin: auto 0;
+		font-size: 56rpx;
+		font-weight: bold;
+		color: #FFFFFF;
+		.money-icon {
+			font-size: 38rpx;
+			font-weight: bold;
+			color: #FFFFFF;
+		}
+	}
+}
+
+.navbar {
+	display: flex;
+	height: 40px;
+	padding: 0 5px;
+	background: #fff;
+	box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
+	position: relative;
+	z-index: 10;
+	.nav-item {
+		flex: 1;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100%;
+		font-size: 15px;
+		color: $font-color-dark;
+		position: relative;
+		&.current {
+			color: $base-color;
+			&:after {
+				content: '';
+				position: absolute;
+				left: 50%;
+				bottom: 0;
+				transform: translateX(-50%);
+				width: 44px;
+				height: 0;
+				border-bottom: 2px solid $base-color;
+			}
+		}
+	}
+}
+// 列表
+
+.swiper-box {
+	padding-top: 10rpx;
+	.order-item {
+		padding: 20rpx 30rpx;
+		line-height: 1.5;
+		position: relative;
+		// border-bottom: 1rpx black solid;
+		.title-box {
+			.title {
+				font-size: $font-lg;
+				color: $font-color-base;
+			}
+			.time {
+				font-size: $font-base;
+				color: $font-color-light;
+			}
+		}
+		.money {
+			// color: #fd5b23;
+			color: #901B21;
+			font-size: $font-lg;
+		}
+		.jg {
+			width: 701rpx;
+			height: 2rpx;
+			background: #F0F4F8;
+			margin: 0 auto;
+			position: absolute;
+			bottom: 0;
+		}
+	}
+}
+.list-scroll-content {
+	height: 100%;
+}
+.content {
+	height: 100%;
+	.empty-content {
+		background-color: #ffffff;
+	}
+}
+.add-btn {
+	width: 674rpx;
+	height: 88rpx;
+	background: #FF383E;
+	border-radius: 44rpx;
+}
+</style>

+ 431 - 236
pages/product/groupBooking/index.vue

@@ -1,236 +1,431 @@
-<template>
-	<view class="lyy-bg4">
-		<view class="lyy-f-a">
-			<view class="lyy-f-b lyy-flex">
-				<view class="lyy-f-c item" @click="goProduct(items)" v-for="(items, ind) in goodsList" :key="ind">
-					<view class="content">
-						<view><image :src="items.image" class="lyy-f-image" /></view>
-						<view class="lyy-f-word1 lyy-f-jl ellipsis">{{ items.title }}</view>
-						<view class="lyy-flex2">
-							<view class="lyy-flex3">
-								<view class="lyy-f-word2 lyy-f-jl">¥{{ items.price * 1 }}</view>
-							</view>
-							<view class="lyy-a-tu2 lyy-flex2">
-								<view class="lyy-a-tu3"><image src="../../../static/img/img11.png" class="lyy-a-tu5" /></view>
-								<view class="lyy-a-tu4">{{ items.people }}人拼</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<uni-load-more :status="loadingType"></uni-load-more>
-	</view>
-</template>
-
-<script>
-import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
-import { getCombinationList } from '@/api/product.js';
-export default {
-	components: {
-		uniLoadMore
-	},
-	data() {
-		return {
-			goodsList: [],
-			loadingType: 'more', //加载更多状态
-			limit: 20, //每次加载数据条数
-			page: 1 //当前页数
-		};
-	},
-	onLoad(options) {
-		this.loadData();
-	},
-	//下拉刷新
-	onPullDownRefresh() {
-		this.loadData('refresh');
-	},
-	//监听页面是否滚动到底部加载更多
-	onReachBottom() {
-		this.loadData();
-	},
-	methods: {
-		//加载商品 ,带下拉刷新和上滑加载
-		async loadData(type = 'add', loading) {
-			let obj = this;
-			let data = {
-				page: obj.page,
-				limit: obj.limit
-			};
-			//没有更多直接返回
-			if (type === 'add') {
-				if (obj.loadingType === 'nomore') {
-					return;
-				}
-				obj.loadingType = 'loading';
-			} else {
-				obj.loadingType = 'more';
-			}
-
-			// 加载商品信息
-			getCombinationList(data)
-				.then(e => {
-					if (type === 'refresh') {
-						// 清空数组
-						obj.goodsList = [];
-					}
-					obj.goodsList = obj.goodsList.concat(e.data);
-					//判断是否还有下一页,有是more  没有是nomore
-					if (obj.limit == e.data.length) {
-						obj.page++;
-						obj.loadingType = 'more';
-					} else {
-						obj.loadingType = 'nomore';
-					}
-					if (type === 'refresh') {
-						if (loading == 1) {
-							uni.hideLoading();
-						} else {
-							uni.stopPullDownRefresh();
-						}
-					}
-				})
-				.catch();
-		},
-		goProduct(e) {
-			uni.navigateTo({
-				url: '/pages/product/groupBooking/productGroup?id=' + e.id
-			});
-		}
-	}
-};
-</script>
-
-<style lang="scss">
-page {
-	height: 100%;
-}
-// 拼团列表
-.lyy-f-a {
-	margin: 0px 15px;
-
-	.lyy-flex {
-		/* 内部模块1*/
-		display: flex;
-		justify-content: space-between;
-	}
-	.lyy-f-b {
-		flex-wrap: wrap;
-		.lyy-f-c {
-			flex: 0 0 50%;
-			/* width: 50%; */
-			margin: 10px 0px 0px 0px;
-		}
-
-		.item:nth-child(2n + 1) .content {
-			margin: 0px 7.5px 0px 0px;
-			border-radius: 10px;
-		}
-	}
-
-	.lyy-f-b .content {
-		background-color: white;
-		.lyy-f-image {
-			width: 100%;
-			height: 340rpx;
-			border-radius: 10rpx 10rpx 0rpx 0rpx;
-		}
-		.ellipsis {
-			width: 165px;
-			white-space: nowrap;
-			overflow: hidden;
-			text-overflow: ellipsis;
-		}
-		.lyy-f-jl {
-			padding: 5px 7px;
-		}
-		.lyy-f-word1 {
-			font-size: 12px;
-			color: rgba(50, 50, 50, 1);
-			line-height: 20px;
-			width: 300rpx;
-			white-space: nowrap;
-			overflow: hidden;
-			text-overflow: ellipsis;
-		}
-	}
-
-	.item:nth-child(2n) .content {
-		margin: 0px 0 0px 7.5px;
-		border-radius: 10px;
-	}
-
-	.lyy-f-word3 {
-		font-size: 12px;
-		text-decoration: line-through;
-		color: rgba(139, 139, 139, 1);
-	}
-
-	.lyy-f-word5 {
-		font-size: 20rpx;
-		color: rgba(153, 153, 153, 1);
-		margin: 20rpx 0px 0px 0px;
-	}
-
-	.lyy-f-word4 {
-		height: 26px;
-		background: #6fb22f;
-		color: white;
-		text-align: center;
-	}
-
-	.lyy-f-d {
-		height: 24rpx;
-		border: 1px solid rgba(252, 91, 98, 1);
-		border-radius: 3px;
-		font-size: 20rpx;
-		text-align: center;
-		width: 50rpx;
-		color: rgba(252, 91, 98, 1);
-		margin: 23rpx 0rpx 0rpx 0rpx;
-		line-height: 24rpx;
-	}
-
-	.lyy-flex2 {
-		display: flex;
-		padding-right: 10rpx;
-		align-items: center;
-		.lyy-flex3 {
-			flex: 1;
-			.lyy-f-word2 {
-				font-size: 14px;
-				color: rgba(241, 13, 59, 1);
-			}
-		}
-		&.lyy-a-tu2 {
-			height: 34rpx;
-			background: rgba(255, 255, 255, 1);
-			border: 1px solid #fc5b62;
-			border-radius: 2px;
-			margin: 10rpx 0rpx;
-
-			.lyy-a-tu3 {
-				height: 30rpx;
-				background-color: #fc5b62;
-				padding: 0px 6px;
-				text-align: center;
-				.lyy-a-tu5 {
-					width: 20rpx;
-					height: 20rpx;
-					margin-top: 6rpx;
-					display: block;
-				}
-			}
-
-			.lyy-a-tu4 {
-				margin-left: 4rpx;
-				font-size: 24rpx;
-				line-height: 30rpx;
-				color: #fc5b62;
-				padding: 0px 10rpx;
-				text-align: center;
-			}
-		}
-	}
-}
-</style>
+<template>
+	<!-- <view class="lyy-bg4">
+		<view class="lyy-f-a">
+			<view class="lyy-f-b lyy-flex">
+				<view class="lyy-f-c item" @click="goProduct(items)" v-for="(items, ind) in goodsList" :key="ind">
+					<view class="content">
+						<view><image :src="items.image" class="lyy-f-image" /></view>
+						<view class="lyy-f-word1 lyy-f-jl ellipsis">{{ items.title }}</view>
+						<view class="lyy-flex2">
+							<view class="lyy-flex3">
+								<view class="lyy-f-word2 lyy-f-jl">¥{{ items.price * 1 }}</view>
+							</view>
+							<view class="lyy-a-tu2 lyy-flex2">
+								<view class="lyy-a-tu3"><image src="../../../static/img/img11.png" class="lyy-a-tu5" /></view>
+								<view class="lyy-a-tu4">{{ items.people }}人拼</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		<uni-load-more :status="loadingType"></uni-load-more>
+	</view> -->
+	<view class="czpt">
+		<view class="good-wrapper">
+			<view class="spgood">
+				<view class="left-wrapper"><image src="../../../static/img/spimg1.jpg" mode="scaleToFill"></image></view>
+				<view class="right-wrapper">
+					<view class="right-title">湿热肝上火气肺痰煲汤材料</view>
+					<view class="ex-addr">
+						<image src="../../../static/img/shop.png" mode="" class="name-img"></image>
+						子臣台州旗舰店
+						<image src="../../../static/img/point.png" mode="" class="point-img"></image>
+						200m
+					</view>
+					<view class="pepple-num"><image src="../../../static/icon/hot.png" mode="scaleToFill"></image>2人团</view>
+					<view class="right-bottom">
+						<view class="sp-price">
+							<view class="now-price">¥77</view>
+							<view class="old-price">¥99</view>
+						</view>
+						<view class="sp-btn">马上拼团</view>
+					</view>
+				</view>
+			</view>
+			<view class="spgood">
+				<view class="left-wrapper"><image src="../../../static/img/spimg1.jpg" mode="scaleToFill"></image></view>
+				<view class="right-wrapper">
+					<view class="right-title">湿热肝上火气肺痰煲汤材料</view>
+					<view class="ex-addr">
+						<image src="../../../static/img/shop.png" mode="" class="name-img"></image>
+						子臣台州旗舰店
+						<image src="../../../static/img/point.png" mode="" class="point-img"></image>
+						200m
+					</view>
+					<view class="pepple-num"><image src="../../../static/icon/hot.png" mode="scaleToFill"></image>2人团</view>
+					<view class="right-bottom">
+						<view class="sp-price">
+							<view class="now-price">¥77</view>
+							<view class="old-price">¥99</view>
+						</view>
+						<view class="sp-btn">马上拼团</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
+import { getCombinationList } from '@/api/product.js';
+export default {
+	components: {
+		uniLoadMore
+	},
+	data() {
+		return {
+			goodsList: [
+				{ title: '鸭血粉丝鸭血粉丝鸭血粉丝', price: '99', people: 99 },
+				{ title: '鸭血粉丝鸭血粉丝鸭血粉丝', price: '33', people: 66 },
+				{ title: '鸭血粉丝鸭血粉丝鸭血粉丝', price: '44', people: 22 }
+			],
+			loadingType: 'more', //加载更多状态
+			limit: 20, //每次加载数据条数
+			page: 1 //当前页数
+		};
+	},
+	onLoad(options) {
+		// this.loadData();
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		this.loadData('refresh');
+	},
+	//监听页面是否滚动到底部加载更多
+	onReachBottom() {
+		this.loadData();
+	},
+	methods: {
+		//加载商品 ,带下拉刷新和上滑加载
+		async loadData(type = 'add', loading) {
+			let obj = this;
+			let data = {
+				page: obj.page,
+				limit: obj.limit
+			};
+			//没有更多直接返回
+			if (type === 'add') {
+				if (obj.loadingType === 'nomore') {
+					return;
+				}
+				obj.loadingType = 'loading';
+			} else {
+				obj.loadingType = 'more';
+			}
+
+			// 加载商品信息
+			getCombinationList(data)
+				.then(e => {
+					if (type === 'refresh') {
+						// 清空数组
+						obj.goodsList = [];
+					}
+					obj.goodsList = obj.goodsList.concat(e.data);
+					//判断是否还有下一页,有是more  没有是nomore
+					if (obj.limit == e.data.length) {
+						obj.page++;
+						obj.loadingType = 'more';
+					} else {
+						obj.loadingType = 'nomore';
+					}
+					if (type === 'refresh') {
+						if (loading == 1) {
+							uni.hideLoading();
+						} else {
+							uni.stopPullDownRefresh();
+						}
+					}
+				})
+				.catch();
+		},
+		goProduct(e) {
+			uni.navigateTo({
+				url: '/pages/product/groupBooking/productGroup?id=' + e.id
+			});
+		}
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	height: 100%;
+}
+// 拼团列表
+.lyy-f-a {
+	margin: 0px 15px;
+
+	.lyy-flex {
+		/* 内部模块1*/
+		display: flex;
+		justify-content: space-between;
+	}
+	.lyy-f-b {
+		flex-wrap: wrap;
+		.lyy-f-c {
+			flex: 0 0 50%;
+			/* width: 50%; */
+			margin: 10px 0px 0px 0px;
+		}
+
+		.item:nth-child(2n + 1) .content {
+			margin: 0px 7.5px 0px 0px;
+			border-radius: 10px;
+		}
+	}
+
+	.lyy-f-b .content {
+		background-color: white;
+		.lyy-f-image {
+			width: 100%;
+			height: 340rpx;
+			border-radius: 10rpx 10rpx 0rpx 0rpx;
+		}
+		.ellipsis {
+			width: 165px;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+		}
+		.lyy-f-jl {
+			padding: 5px 7px;
+		}
+		.lyy-f-word1 {
+			font-size: 12px;
+			color: rgba(50, 50, 50, 1);
+			line-height: 20px;
+			width: 300rpx;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+		}
+	}
+
+	.item:nth-child(2n) .content {
+		margin: 0px 0 0px 7.5px;
+		border-radius: 10px;
+	}
+
+	.lyy-f-word3 {
+		font-size: 12px;
+		text-decoration: line-through;
+		color: rgba(139, 139, 139, 1);
+	}
+
+	.lyy-f-word5 {
+		font-size: 20rpx;
+		color: rgba(153, 153, 153, 1);
+		margin: 20rpx 0px 0px 0px;
+	}
+
+	.lyy-f-word4 {
+		height: 26px;
+		background: #6fb22f;
+		color: white;
+		text-align: center;
+	}
+
+	.lyy-f-d {
+		height: 24rpx;
+		border: 1px solid rgba(252, 91, 98, 1);
+		border-radius: 3px;
+		font-size: 20rpx;
+		text-align: center;
+		width: 50rpx;
+		color: rgba(252, 91, 98, 1);
+		margin: 23rpx 0rpx 0rpx 0rpx;
+		line-height: 24rpx;
+	}
+
+	.lyy-flex2 {
+		display: flex;
+		padding-right: 10rpx;
+		align-items: center;
+		.lyy-flex3 {
+			flex: 1;
+			.lyy-f-word2 {
+				font-size: 14px;
+				color: rgba(241, 13, 59, 1);
+			}
+		}
+		&.lyy-a-tu2 {
+			height: 34rpx;
+			background: rgba(255, 255, 255, 1);
+			border: 1px solid #fc5b62;
+			border-radius: 2px;
+			margin: 10rpx 0rpx;
+
+			.lyy-a-tu3 {
+				height: 30rpx;
+				background-color: #fc5b62;
+				padding: 0px 6px;
+				text-align: center;
+				.lyy-a-tu5 {
+					width: 20rpx;
+					height: 20rpx;
+					margin-top: 6rpx;
+					display: block;
+				}
+			}
+
+			.lyy-a-tu4 {
+				margin-left: 4rpx;
+				font-size: 24rpx;
+				line-height: 30rpx;
+				color: #fc5b62;
+				padding: 0px 10rpx;
+				text-align: center;
+			}
+		}
+	}
+}
+.good-wrapper {
+	width: 710rpx;
+	background-color: #f7f5f5;
+	margin: 20rpx auto 0;
+	.spgood {
+		width: 710rpx;
+		height: 280rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 0px 20px 0px rgba(50, 50, 52, 0.06);
+		border-radius: 8rpx;
+		padding: 40rpx 20rpx;
+		display: flex;
+		margin-bottom: 21rpx;
+		.left-wrapper {
+			width: 190rpx;
+			height: 200rpx;
+			border-radius: 10rpx;
+			image {
+				width: 190rpx;
+				height: 200rpx;
+				border-radius: 10rpx;
+			}
+		}
+		.right-wrapper {
+			padding-left: 22rpx;
+			width: 100%;
+			height: 200rpx;
+			// background-color: red;
+			.right-title {
+				padding-top: 8rpx;
+				width: 100%;
+				// height: 29rpx;
+				font-size: 30rpx;
+				font-weight: bold;
+				color: #333333;
+			}
+			.right-addr {
+				margin-top: 18rpx;
+				display: flex;
+				.shop-img {
+					width: 26rpx;
+					height: 23rpx;
+					margin: 0 4rpx 0 0;
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+				.shop-name {
+					// height: 22rpx;
+					font-size: 22rpx;
+					font-weight: 500;
+					color: #dcb876;
+				}
+				.point-img {
+					width: 16rpx;
+					height: 23rpx;
+					margin: 0 4rpx 0 14rpx;
+					image {
+						width: 100%;
+						height: 21rpx;
+					}
+				}
+				.point-disc {
+					font-size: 24rpx;
+					font-weight: 500;
+					padding-top: 3rpx;
+					color: #dcb876;
+				}
+			}
+			.ex-addr {
+				margin-top: 16rpx;
+				// padding-left: 22rpx;
+				height: 24rpx;
+				font-size: 24rpx;
+				font-weight: 500;
+				color: #dcb876;
+				image {
+					height: 22rpx;
+				}
+				.name-img {
+					// vertical-align: ;
+					width: 26rpx;
+					margin: 0 4rpx -3rpx 0;
+				}
+				.point-img {
+					width: 16rpx;
+					margin: 0 4rpx -3rpx 14rpx;
+				}
+			}
+			.pepple-num {
+				width: 99rpx;
+				height: 36rpx;
+				// color: #ff3366;
+				// background: #FC7A0C;
+				background-color: #fee4ce;
+				// opacity: 0.2;
+				border-radius: 18rpx;
+				font-size: 20rpx;
+				font-weight: 500;
+				color: #ff3366;
+				line-height: 36rpx;
+				padding-left: 12rpx;
+				margin-top: 33rpx;
+				image {
+					width: 17rpx;
+					height: 20rpx;
+				}
+			}
+			.right-bottom {
+				margin-top: 2rpx;
+				// justify-items: flex-end;
+				display: flex;
+				justify-content: space-between;
+				.sp-price {
+					height: 60rpx;
+					display: flex;
+					vertical-align: bottom;
+					line-height: 60rpx;
+					.now-price {
+						font-size: 30rpx;
+						font-weight: bold;
+						color: #901b21;
+						margin-right: 16rpx;
+					}
+					.old-price {
+						font-size: 22rpx;
+						font-weight: 500;
+						text-decoration: line-through;
+						color: #aaaaaa;
+					}
+				}
+				.sp-btn {
+					width: 160rpx;
+					height: 60rpx;
+					border-radius: 30rpx;
+					font-size: 26rpx;
+					text-align: center;
+					line-height: 60rpx;
+					font-weight: 400;
+					color: #ffffff;
+					background-color: #901b21;
+				}
+			}
+		}
+	}
+}
+</style>

+ 169 - 12
pages/product/seckill.vue

@@ -1,14 +1,14 @@
 <template>
 	<view class="seckillBox">
-		<scroll-view scroll-x="true" class="class-box flex b-t" :scroll-left="scrollLeft" :scroll-with-animation="true">
-			<view @click="tabClass(idx)" class="item" :style="{ width: topNavWidth }" v-for="(item, idx) in indexList" :key="idx" :class="{ isaction: idx == classIndex }">
+		<scroll-view scroll-x="true" class="class-box flex " :scroll-left="scrollLeft" :scroll-with-animation="true">
+			<view @click="tabClass(idx)" class="item" :style="{ width: topNavWidth }" v-for="(item, idx) in indexList" :key="idx" :class="{ action: idx == classIndex }">
 				<view class="time" :class="{ action: idx == classIndex }">{{ item.time }}</view>
 				<view class="status" :class="{ action: idx == classIndex }">{{ item.state }}</view>
 			</view>
 		</scroll-view>
 		<swiper class="list-Box" :current="classIndex" @change="swiperChange" duration="500">
 			<swiper-item class="list-item" v-for="(ls, idx) in indexList" :key="idx">
-				<view class=" b-b position-relative">
+				<!-- <view class=" b-b position-relative">
 					<view class="title-box flex ">
 						<view class="title-box-left">
 							<text v-if="ls.status == 1">抢购中先下先得哦!</text>
@@ -29,9 +29,10 @@
 							></uni-countdown>
 						</view>
 					</view>
-				</view>
+				</view> -->
 				<scroll-view scroll-y="true" class="list" @scrolltolower="getList(classIndex)">
-					<view class="goodsList-item flex" :key="ind" v-for="(lss, ind) in ls.dataList">
+					<view class="jg"></view>
+					<!-- <view class="goodsList-item flex" :key="ind" v-for="(lss, ind) in ls.dataList">
 						<image :src="lss.image" lazy-load mode="scaleToFill"></image>
 						<view class="goodsList-content">
 							<view class="title clamp">
@@ -56,6 +57,26 @@
 								</view>
 							</view>
 						</view>
+					</view> -->
+					<view class="spgood">
+						<view class="left-wrapper"><image src="../../static/img/spimg1.jpg" mode="scaleToFill"></image></view>
+						<view class="right-wrapper">
+							<view class="right-title">湿热肝上火气肺痰煲汤材料</view>
+							<view class="ex-addr">
+								<image src="../../static/img/shop.png" mode="" class="name-img"></image>
+								子臣台州旗舰店
+								<image src="../../static/img/point.png" mode="" class="point-img"></image>
+								200m
+							</view>
+							<!-- <view class="pepple-num"><image src="../../static/icon/hot.png" mode="scaleToFill"></image>2人团</view> -->
+							<view class="right-bottom">
+								<view class="sp-price">
+									<view class="now-price">¥77</view>
+									<!-- <view class="old-price">¥99</view> -->
+								</view>
+								<view class="sp-btn">马上拼</view>
+							</view>
+						</view>
 					</view>
 					<uni-load-more :status="ls.loadingType"></uni-load-more>
 				</scroll-view>
@@ -143,7 +164,7 @@ export default {
 			// 获取数据对象
 			let date = this.indexList[ind];
 			console.log(date, source);
-			if (source === 'tabChange' && date.loaded === true) {              
+			if (source === 'tabChange' && date.loaded === true) {
 				//tab切换只有第一次需要加载数据
 				return;
 			}
@@ -186,6 +207,7 @@ export default {
 			let obj = this;
 			getSeckillClass({})
 				.then(({ data }) => {
+					console.log('data',data)
 					obj.indexList = data.seckillTime.map((e, ind) => {
 						// 初始化翻页页数
 						e.page = 1;
@@ -270,7 +292,6 @@ page,
 			padding-bottom: 3px;
 			&.action {
 				color: #901b21;
-				background-color: #fff;
 			}
 		}
 		.status {
@@ -279,16 +300,13 @@ page,
 			width: 60px;
 			padding: 3px 0;
 			&.action {
-				width: 100%;
-				height: 100%;
 				color: #901b21;
-				// border-radius: 99px;
+				border-radius: 99px;
 				background-color: #fff;
 			}
 		}
-		
 	}
-	.isaction {
+	.action {
 		color: #901b21;
 		background-color: #fff;
 	}
@@ -408,4 +426,143 @@ $slider-color: #fe9398; //滑块左侧颜色
 		}
 	}
 }
+.spgood {
+		width: 710rpx;
+		height: 290rpx;
+		background: #FFFFFF;
+		box-shadow: 0px 0px 20px 0px rgba(50, 50, 52, 0.06);
+		border-radius: 10rpx;
+		padding: 15rpx 20rpx 15rpx 14rpx;
+		display: flex;
+		margin: 0 auto;
+		margin-bottom: 20rpx;
+		.left-wrapper {
+			width: 260rpx;
+			height: 260rpx;
+			border-radius: 10rpx;
+			image {
+				width: 260rpx;
+				height: 260rpx;
+				border-radius: 10rpx;
+			}
+		}
+		.right-wrapper {
+			padding-left: 22rpx;
+			width: 100%;
+			height: 200rpx;
+			// background-color: red;
+			.right-title {
+				padding-top: 12rpx;
+				width: 100%;
+				// height: 29rpx;
+				// font-size: 30rpx;
+				// font-weight: bold;
+				// color: #333333;
+				
+				font-size: 30rpx;
+				font-weight: bold;
+				color: #333333;
+				line-height: 35rpx;
+			}
+			.right-addr {
+				margin-top: 18rpx;
+				display: flex;
+				.shop-img {
+					width: 26rpx;
+					height: 23rpx;
+					margin: 0 4rpx 0 0;
+					image {
+						width: 100%;
+						height: 100%;
+					}
+				}
+				.shop-name {
+					// height: 22rpx;
+					font-size: 22rpx;
+					font-weight: 500;
+					color: #dcb876;
+				}
+				.point-img {
+					width: 16rpx;
+					height: 23rpx;
+					margin: 0 4rpx 0 14rpx;
+					image {
+						width: 100%;
+						height: 21rpx;
+					}
+				}
+				.point-disc {
+					font-size: 24rpx;
+					font-weight: 500;
+					padding-top: 3rpx;
+					color: #dcb876;
+				}
+			}
+			.ex-addr {
+				margin-top: 16rpx;
+				// padding-left: 22rpx;
+				height: 22rpx;
+				font-size: 25rpx;
+				font-weight: 500;
+				color: #dcb876;
+				image {
+					height: 22rpx;
+				}
+				.name-img {
+					// vertical-align: ;
+					width: 26rpx;
+					margin: 0 4rpx -3rpx 0;
+				}
+				.point-img {
+					width: 16rpx;
+					margin: 0 4rpx -3rpx 14rpx;
+				}
+			}
+			
+			.right-bottom {
+				margin-top: 117rpx;
+				// justify-items: flex-end;
+				display: flex;
+				justify-content: space-between;
+				.sp-price {
+					height: 52rpx;
+					display: flex;
+					vertical-align: bottom;
+					line-height: 52rpx;
+					.now-price {
+						// font-size: 30rpx;
+						// font-weight: bold;
+						// color: #901b21;
+						padding-top: 19rpx;
+						margin-right: 16rpx;
+						font-size: 36rpx;
+						font-weight: bold;
+						color: #901B21;
+						line-height: 35rpx;
+						// vertical-align: bottom;
+					}
+					.old-price {
+						font-size: 22rpx;
+						font-weight: 500;
+						text-decoration: line-through;
+						color: #aaaaaa;
+					}
+				}
+				.sp-btn {
+					width: 136.6rpx;
+					height: 60rpx;
+					border-radius: 30rpx;
+					font-size: 26rpx;
+					text-align: center;
+					line-height: 60rpx;
+					font-weight: 400;
+					color: #ffffff;
+					background-color: #dcb876;
+				}
+			}
+		}
+	}
+	.jg {
+		height: 34rpx;
+	}
 </style>

+ 4 - 2
pages/user/user.vue

@@ -1,7 +1,8 @@
 <template>
 	<view class="container">
 		<view class="vheigh"></view>
-		<scroll-view class="content-box" scroll-y="true">
+		<scroll-view class="content-box" scroll-y="true">
+		<!-- <view class="content-box"> -->
 			<view class="user-section">
 				<view class="bg"></view>
 				<view class="user-info-box ">
@@ -207,7 +208,8 @@
 					</uni-list>
 				</view> -->
 			</view>
-		</scroll-view>
+		</scroll-view>
+		<!-- </view> -->
 	</view>
 </template>
 <script>

BIN
static/icon/hot.png


BIN
static/img/wallertbg.png


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/Loading/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/countDown/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/empty.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/emptyPage.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/home/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/jyf-parser/jyf-parser.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/jyf-parser/libs/trees.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/newlist/nowList.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/returnButton.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/seckill/seckill.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/ss-calendar/ss-calendar.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-badge/uni-badge.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-countdown/uni-countdown.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-countdown/uni-countdowns.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-fav/uni-fav.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-icons/uni-icons.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-list-item/uni-list-item.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-list/uni-list.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-load-more/uni-load-more.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-notice-bar/uni-notice-bar.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-number-box.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-popup/uni-popup-dialog.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-popup/uni-popup-message.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-popup/uni-popup.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-rate/uni-rate.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-steps/uni-steps.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/uni-transition/uni-transition.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/activity/bargain/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/activity/goods_bargain/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/activity/goods_bargain_details/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/cart/cart.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/category/category.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/sign.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/money/account.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/money/pay.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/money/paySuccess.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/money/recharge.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/money/wallet.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/money/withdrawal.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/createOrder.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/evaluate.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/expressInfo.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/order.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/orderDetail.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/order/orderRefund.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/classify.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/contentText.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/discounts.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/estimate.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/freshDetail.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/groupBottom.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/groupContent.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/groupTime.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/guessLike.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/productBottom.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/productContent.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/common/topSwiper.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/groupBooking/detail.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/groupBooking/index.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/groupBooking/inviteImg.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/groupBooking/productCollage.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/groupBooking/productGroup.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/list.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/pointsExchange.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/product.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/reply.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/search.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/product/seckill.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/public/forget.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/public/login.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/public/register.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/public/wxLogin.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/set/address.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/set/addressManage.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/set/password.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/set/phone.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/set/set.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/set/userinfo.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/award.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/coupon.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/favorites.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/notice.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/scoreAccumulate.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/shareQrCode.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/user.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/user/withdrawal.js.map


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/app-plus/app-config-service.js


File diff suppressed because it is too large
+ 0 - 0
unpackage/dist/dev/app-plus/app-service.js


Some files were not shown because too many files changed in this diff