Browse Source

提交本次修改

王耀南 2 years ago
parent
commit
b1e6a11780

+ 1 - 1
components/common/k-tabbar/k-tabbar.vue

@@ -1,6 +1,6 @@
 <template>
 	<!-- 底部导航栏 -->
-	<u-tabbar :fixed="fixed" :placeholder="placeholder" :safeAreaInsetBottom="safeAreaInsetBottom"
+	<u-tabbar class="u-tabbar" :fixed="fixed" :placeholder="placeholder" :safeAreaInsetBottom="safeAreaInsetBottom"
 		:value="$S_tabbar_tabIdx" @change="tabChg">
 		<u-tabbar-item v-for="item in tabList" :key="item.id" :text="item.name" :icon="item.icon"></u-tabbar-item>
 	</u-tabbar>

+ 110 - 0
mixins/cart.js

@@ -0,0 +1,110 @@
+export default {
+	computed: {
+		// 整合购物车数据
+		$S_tabbar_shopCarts() {
+			let shopCarts = this.$M_GS('common', '$S_tabbar_shopCarts');
+			
+			if (!this.$M_IsEmpty(shopCarts)) {
+				let cartList = [];
+				for (let key in shopCarts) {
+					cartList.push(shopCarts[key]);
+				}
+				return cartList;
+			} else {
+				return [];
+			}
+		},
+	},
+	methods: {
+		// 当数量超出范围,比如最小范围1触发
+		numsOverlimit(e, row) {
+			if (e === 'minus') {
+				this.deleteShops = row;
+				this.uModalShow = true;
+			}
+		},
+		goodPlus(e, row) {
+			this.handleCar(e, row, 1);
+		},
+		// 点击商品-
+		goodMinus(e, row) {
+			this.handleCar(e, row, 2);
+		},
+		// 点击数量的+-
+		numsChg(e, row) {
+			// 增加用户体验
+			uni.showLoading({
+				title: '请稍等',
+				mask: true,
+			});
+			setTimeout(() => {
+				uni.hideLoading();
+			}, 200);
+			this.handleCar(e, row, 3);
+		},
+		// 处理购物车数据
+		handleCar(e, row, idx) {
+			let shopCarts = this.$S_tabbar_shopCarts;
+			if (shopCarts.length > 0) {
+				shopCarts.forEach(item => {
+					if (item.imgId === row.imgId) {
+						switch (idx) {
+							// 给优惠码和优惠价的列表添加一个0值
+							case 1:
+								item.codeList.push(0);
+								item.discountList.push(0);
+								break;
+								// 去掉优惠码和优惠价的列表的最后一个
+							case 2:
+								item.codeList.pop();
+								item.discountList.pop();
+								break;
+								// 找到购物车数据对应商品的,重新计算总价格
+							case 3:
+								item.nums = e.value;
+								item.totalPrice = this.$M_Big(item.goodsPrice)
+									.mul(item.nums)
+									.toNumber();
+								break;
+						}
+					}
+				});
+			}
+			// 把数组转成对象储存到vuex中
+			let cartList = this.arrAttrToOBj(shopCarts, 'imgId');
+			this.$M_Dp('ACTI_SHOPCARTS', cartList);
+		},
+		// 根据数组的某个属性转成对象
+		arrAttrToOBj(arr, attr, obj = {}) {
+			if (arr.length > 0) {
+				arr.forEach(item => {
+					obj[item[attr]] = item;
+				});
+				return obj;
+			} else {
+				return {};
+			}
+		},
+		// 点击删除弹窗的确定按钮
+		uModalConfirm() {
+			let shopCarts = this.$S_tabbar_shopCarts;
+			let list = [];
+			if (shopCarts.length > 0) {
+				// 根据id筛选出不是删除的那个商品
+				list = shopCarts.filter(item => {
+					if (item.imgId !== this.deleteShops.imgId) {
+						return item;
+					} else {
+						// 要把优惠码和优惠价清空
+						item.codeList = [];
+						item.discountList = [];
+					}
+				});
+			}
+			// 把数组转成对象储存到vuex中
+			let cartList = this.arrAttrToOBj(list, 'imgId');
+			this.$M_Dp('ACTI_SHOPCARTS', cartList);
+			this.uModalShow = false;
+		},
+	}
+};

+ 2 - 1
otherPages/home/singleBye/index.vue

@@ -173,7 +173,8 @@ export default {
 		numsChg(e, row) {
 			// 增加用户体验
 			uni.showLoading({
-				title: '请稍等'
+				title: '请稍等',
+				mask: true,
 			});
 			setTimeout(() => {
 				uni.hideLoading();

+ 212 - 193
otherPages/mine/orderRecord/index.vue

@@ -1,196 +1,215 @@
-<template>
-	<!-- z-paging插件:具体使用文档请看https://z-paging.zxlee.cn/ -->
-	<z-paging
-		auto-show-back-to-top
-		back-to-top-bottom="300rpx"
-		:paging-style="{ paddingBottom: 'constant(safe-area-inset-bottom)', paddingBottom: 'env(safe-area-inset-bottom)' }"
-		ref="paging"
-		v-model="dataList"
-		@query="queryList"
-	>
-		<template #top>
-			<view class="c-bg-f"><u-tabs :activeStyle="{ color: '#3c9cff' }" :list="statusList" @click="statusClick"></u-tabs></view>
-		</template>
-		<view class="o-plr-24 o-ptb-24">
-			<view v-for="(item, index) in dataList" :key="item.id" class="l-boxShadow o-mb-20 c-bg-f o-plr-24 o-ptb-12 c-radius-10">
-				<view class="l-flex-between o-ptb-20">
-					<view class="c-color-8 l-flex-RC">
-						<text>取餐号:</text>
-						<u-tooltip color="#888888" overlay :text="mealCode(item.id)" direction="bottom"></u-tooltip>
+<template>
+	<!-- z-paging插件:具体使用文档请看https://z-paging.zxlee.cn/ -->
+	<z-paging auto-show-back-to-top back-to-top-bottom="300rpx"
+		:paging-style="{ paddingBottom: 'constant(safe-area-inset-bottom)', paddingBottom: 'env(safe-area-inset-bottom)' }"
+		ref="paging" v-model="dataList" @query="queryList">
+		<template #top>
+			<view class="c-bg-f">
+				<u-tabs :activeStyle="{ color: '#3c9cff' }" :list="statusList" @click="statusClick"></u-tabs>
+			</view>
+		</template>
+		<view class="o-plr-24 o-ptb-24">
+			<view v-for="(item, index) in dataList" :key="item.id"
+				class="l-boxShadow o-mb-20 c-bg-f o-plr-24 o-ptb-12 c-radius-10">
+				<view class="l-flex-between o-ptb-20">
+					<view class="c-color-8 l-flex-RC">
+						<text>取餐号:</text>
+						<u-tooltip color="#888888" overlay :text="mealCode(item.id)" direction="bottom"></u-tooltip>
+					</view>
+				</view>
+				<view class="l-flex-between o-ptb-20">
+					<view class="c-color-8 l-flex-RC">
+						<text>订单号:</text>
+						<u-tooltip color="#888888" overlay :text="item.sn" direction="bottom"></u-tooltip>
 					</view>
-				</view>
-				<view class="l-flex-between o-ptb-20">
-					<view class="c-color-8 l-flex-RC">
-						<text>订单号:</text>
-						<u-tooltip color="#888888" overlay :text="item.sn" direction="bottom"></u-tooltip>
-					</view>
-					<text class="c-color-8">{{ statusName(item.status) }}</text>
-				</view>
-				
-				<u-line></u-line>
-				<view @click="toDetail(item)" v-for="item1 in item.goodsNumsPrice">
-					<view class="l-flex-RC o-mb-20">
+					<u-tag @click="setClipboardData(item.sn)" text="复制" size="mini"></u-tag>
+					<text class="c-color-8">{{ statusName(item.status) }}</text>
+				</view>
+
+				<u-line></u-line>
+				<view @click="toDetail(item)" v-for="item1 in item.goodsNumsPrice">
+					<view class="l-flex-RC o-mb-20">
 						<view class="l-flex-1">
-							<!-- 后台约定好A00,但是这个商品编号有可能会获取不到,获取不到会是A00 -->
-							<u--image
-								v-if="item1.imgId !== 'A00'"
-								:width="GETT_miniProduct.includes(item1.imgId) ? '250rpx' : '200rpx'"
-								:height="GETT_miniProduct.includes(item1.imgId) ? '250rpx' : '200rpx'"
-								mode="aspectFit"
-								:lazy-load="true"
-								:fade="true"
-								duration="450"
-								:src="item1.imgUrl"
-							>
-								<view slot="error" style="font-size: 24rpx;">加载失败</view>
-							</u--image>
-						</view>
-						<view class="l-flex-3">
-							<view class="c-color-8 u-line-2">{{ item1.goodsName }}</view>
-							<view class="l-flex-RC o-mt-30">
-								<text class="c-color-8">X{{ item1.nums }}</text>
-								<text class="c-color-MR o-ml-30">¥{{ item1.price }}</text>
-							</view>
-						</view>
-					</view>
-				</view>
-				<u-line></u-line>
-				<view class="l-flex-between o-ptb-20">
-					<text class="c-text-12 c-color-8">{{ new Date(item.payDate).getTime() | date('yyyy-mm-dd hh:MM:ss') }}</text>
-					<view class="l-flex-RC">
-						<text class="c-text-12 c-color-8">共{{ item.goodsNums }}件商品</text>
-						<view class="l-flex-RC o-ml-30">
-							<text class="c-text-12 c-color-8">实付</text>
-							<text class="c-text-16 c-color-MR">¥{{ item.price }}</text>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-	</z-paging>
-</template>
-
-<script>
-// 导入接口
-import { API_getOrderlist } from '@/common/api.js';
-// 引入辅助函数
-import { mapGetters } from 'vuex';
-// 引入商品数据
-import goodsList from '@/static/images/home/goods.js';
-export default {
-	data() {
-		return {
-			// z-paging插件的主数据,用作列表渲染
-			dataList: [],
-			// 标签数组,元素为对象,如[{name: '推荐'}]
-			statusList: [
-				{
-					name: '已完成'
-				},
-				{
-					name: '已退款'
-				}
-			],
-			// 当前选中标签的索引
-			current: 0
-		};
-	},
-	computed: {
-		// 使用辅助函数
-		...mapGetters(['GETT_loginInfos', 'GETT_miniProduct']),
-		// 状态名称
-		statusName: () => {
-			return status => {
-				switch (status) {
-					case 1:
-						return '已完成';
-						break;
-					case 3:
-						return '已退款';
-						break;
-					default:
-						return '暂无';
-						break;
-				}
-			};
-		},
-		mealCode: () => {
-			return id => {
-				return id.substring(id.length-6,id.length);
-			};
-		}
-	},
-	methods: {
-		// 点击去详情页
-		toDetail(row) {
-			this.$M_Go(`/otherPages/mine/orderRecord/detail?row=${encodeURIComponent(JSON.stringify(row))}`);
-		},
-		// z-paging插件分页的方法
-		queryList(pageNo, pageSize) {
-			let param = {
-				wxId: this.GETT_loginInfos.id,
-				status: this.current === 0 ? 1 : 3,
-				size: pageSize,
-				current: pageNo
-			};
-			// 发起获取商品类表请求
-			API_getOrderlist(param).then(res => {
-				const { records } = res || [];
-				if (records.length > 0) {
-					records.forEach(item => {
-						// 将不同品种的商品分隔出来
-						let noteList = item.note.split(',');
-						// 商品名称、数量、价格组成
-						item.goodsNumsPrice = [];
-						// 商品总数量
-						item.goodsNums = 0;
-						if (noteList.length > 0) {
-							noteList.forEach((item1, index) => {
-								// 处理数组中有null,undefined,''的情况
-								if (item1) {
-									item.goodsNumsPrice[index] = {};
-									// 将商品名称和商品数量、商品价格分隔出俩
-									let goodsNumsPrice = item1.split('-');
-									// 组合商品编码
-									item.goodsNumsPrice[index]['imgId'] = goodsNumsPrice[0];
-									// 组合商品名称
-									item.goodsNumsPrice[index]['goodsName'] = goodsNumsPrice[1];
-									let numsPrice = goodsNumsPrice[2].split(':');
-									// 组合价格
-									item.goodsNumsPrice[index]['nums'] = numsPrice[0];
-									// 组合数量
-									item.goodsNumsPrice[index]['price'] = numsPrice[1];
-									// 商品总数量
-									item.goodsNums = this.$M_Big(item.goodsNums).add(numsPrice[0]);
-								}
-							});
-						}
-					});
-					// 从商品列表中找到对应的商品路径(因为商品图片是存到前台的,要根据后台的标识找到路径)
-					goodsList.forEach(item => {
-						records.forEach(item1 => {
-							// 给前台数据赋值接口数组
-							if (item1.goodsNumsPrice.length > 0) {
-								item1.goodsNumsPrice.forEach(item2 => {
-									if (item2.imgId === item.imgId) {
-										// 商品图片
-										item2.imgUrl = item.imgUrl;
-									}
-								});
-							}
-						});
-					});
-				}
-				this.$refs.paging.complete(records);
-			});
-		},
-		// 点击订单状态标签
-		statusClick(e) {
-			this.current = e.index;
-			this.$refs.paging.reload();
-		}
-	}
-};
-</script>
-
+							<view :style="{'width': GETT_miniProduct.includes(item.imgId) ? '200rpx' : '250rpx', 'height': GETT_miniProduct.includes(item.imgId) ? '200rpx' : '250rpx'}">
+								<!-- 后台约定好A00,但是这个商品编号有可能会获取不到,获取不到会是A00 -->
+								<u--image v-if="item1.imgId !== 'A00'"
+									:width="GETT_miniProduct.includes(item1.imgId) ? '250rpx' : '200rpx'"
+									:height="GETT_miniProduct.includes(item1.imgId) ? '250rpx' : '200rpx'" mode="aspectFit"
+									:lazy-load="true" :fade="true" duration="450" :src="item1.imgUrl">
+									<view slot="error" style="font-size: 24rpx;">加载失败</view>
+								</u--image>
+							</view>
+						</view>
+						<view style="margin-left: 12rpx" class="l-flex-3">
+							<view class="c-color-8 u-line-2">{{ item1.goodsName }}</view>
+							<view class="l-flex-RC o-mt-30">
+								<text class="c-color-8">X{{ item1.nums }}</text>
+								<text class="c-color-MR o-ml-30">¥{{ item1.price }}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+				<u-line></u-line>
+				<view class="l-flex-between o-ptb-20">
+					<text
+						class="c-text-12 c-color-8">{{ new Date(item.payDate).getTime() | date('yyyy-mm-dd hh:MM:ss') }}</text>
+					<view class="l-flex-RC">
+						<text class="c-text-12 c-color-8">共{{ item.goodsNums }}件商品</text>
+						<view class="l-flex-RC o-ml-30">
+							<text class="c-text-12 c-color-8">实付</text>
+							<text class="c-text-16 c-color-MR">¥{{ item.price }}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</z-paging>
+</template>
+
+<script>
+	// 导入接口
+	import {
+		API_getOrderlist
+	} from '@/common/api.js';
+	// 引入辅助函数
+	import {
+		mapGetters
+	} from 'vuex';
+	// 引入商品数据
+	import goodsList from '@/static/images/home/goods.js';
+	export default {
+		data() {
+			return {
+				// z-paging插件的主数据,用作列表渲染
+				dataList: [],
+				// 标签数组,元素为对象,如[{name: '推荐'}]
+				statusList: [{
+						name: '已完成'
+					},
+					{
+						name: '已退款'
+					}
+				],
+				// 当前选中标签的索引
+				current: 0
+			};
+		},
+		computed: {
+			// 使用辅助函数
+			...mapGetters(['GETT_loginInfos', 'GETT_miniProduct']),
+			// 状态名称
+			statusName: () => {
+				return status => {
+					switch (status) {
+						case 1:
+							return '已完成';
+							break;
+						case 3:
+							return '已退款';
+							break;
+						default:
+							return '暂无';
+							break;
+					}
+				};
+			},
+			mealCode: () => {
+				return id => {
+					return id.substring(id.length - 6, id.length);
+				};
+			}
+		},
+		methods: {
+			// 点击去详情页
+			toDetail(row) {
+				this.$M_Go(`/otherPages/mine/orderRecord/detail?row=${encodeURIComponent(JSON.stringify(row))}`);
+			},
+			// z-paging插件分页的方法
+			queryList(pageNo, pageSize) {
+				let param = {
+					wxId: this.GETT_loginInfos.id,
+					status: this.current === 0 ? 1 : 3,
+					size: pageSize,
+					current: pageNo
+				};
+				// 发起获取商品类表请求
+				API_getOrderlist(param).then(res => {
+					const {
+						records
+					} = res || [];
+					if (records.length > 0) {
+						records.forEach(item => {
+							// 将不同品种的商品分隔出来
+							let noteList = item.note.split(',');
+							// 商品名称、数量、价格组成
+							item.goodsNumsPrice = [];
+							// 商品总数量
+							item.goodsNums = 0;
+							if (noteList.length > 0) {
+								noteList.forEach((item1, index) => {
+									// 处理数组中有null,undefined,''的情况
+									if (item1) {
+										item.goodsNumsPrice[index] = {};
+										// 将商品名称和商品数量、商品价格分隔出俩
+										let goodsNumsPrice = item1.split('-');
+										// 组合商品编码
+										item.goodsNumsPrice[index]['imgId'] = goodsNumsPrice[0];
+										// 组合商品名称
+										item.goodsNumsPrice[index]['goodsName'] = goodsNumsPrice[
+										1];
+										let numsPrice = goodsNumsPrice[2].split(':');
+										// 组合价格
+										item.goodsNumsPrice[index]['nums'] = numsPrice[0];
+										// 组合数量
+										item.goodsNumsPrice[index]['price'] = numsPrice[1];
+										// 商品总数量
+										item.goodsNums = this.$M_Big(item.goodsNums).add(numsPrice[
+											0]);
+									}
+								});
+							}
+						});
+						// 从商品列表中找到对应的商品路径(因为商品图片是存到前台的,要根据后台的标识找到路径)
+						goodsList.forEach(item => {
+							records.forEach(item1 => {
+								// 给前台数据赋值接口数组
+								if (item1.goodsNumsPrice.length > 0) {
+									item1.goodsNumsPrice.forEach(item2 => {
+										if (item2.imgId === item.imgId) {
+											// 商品图片
+											item2.imgUrl = item.imgUrl;
+										}
+									});
+								}
+							});
+						});
+					}
+					this.$refs.paging.complete(records);
+				});
+			},
+			// 点击订单状态标签
+			statusClick(e) {
+				this.current = e.index;
+				this.$refs.paging.reload();
+			},
+			// 复制文本到粘贴板
+			setClipboardData(sn) {
+				// #ifndef H5
+				uni.setClipboardData({
+					// 优先使用copyText字段,如果没有,则默认使用text字段当做复制的内容
+					data: sn,
+					success: () => {
+						this.showToast && uni.$u.toast('复制成功')
+					},
+					fail: () => {
+						this.showToast && uni.$u.toast('复制失败')
+					},
+					complete: () => {}
+				})
+				// #endif
+			}
+		}
+	};
+</script>
+
 <style lang="scss"></style>

+ 6 - 63
pages/car/index.vue

@@ -11,9 +11,10 @@
 			v-model="dataList"
 		>
 			<template #top>
-				<view v-if="!showEmptyCart" class="l-boxShadow c-bg-f l-flex-between o-plr-24 o-ptb-10">
-					<view></view>
-					<view class="c-text-16" @click="isEdit = !isEdit">{{ isEdit ? '完成' : '编辑' }}</view>
+				<view v-if="!showEmptyCart" style="overflow: hidden" class="l-boxShadow c-bg-f o-plr-24 o-ptb-10">
+					<view style="float: right">
+						<u-tag @click="isEdit = !isEdit" :text="isEdit ? '完成' : '编辑'" :type="isEdit ? 'success' : 'warning'"></u-tag>
+					</view>
 				</view>
 			</template>
 			<view class="o-plr-24 o-pt-20 chgUNumBox">
@@ -159,6 +160,7 @@ import kDiscountPop from '@/components/common/k-discountPop/index.vue';
 import kPayPop from '@/components/common/k-payPop/index.vue';
 // 引入底部导航栏
 import kTabbar from '@/components/common/k-tabbar/k-tabbar.vue';
+import cartMixins from '@/mixins/cart.js';
 export default {
 	components: {
 		kTabbar,
@@ -186,22 +188,10 @@ export default {
 			deleteShops: {}
 		};
 	},
+	mixins: [cartMixins],
 	computed: {
 		// 使用辅助函数
 		...mapGetters(['GETT_loginInfos', 'GETT_clientId', 'GETT_home_couponList', 'GETT_home_totalCoupon']),
-		// 整合购物车数据
-		$S_tabbar_shopCarts() {
-			let shopCarts = this.$M_GS('common', '$S_tabbar_shopCarts');
-			if (!this.$M_IsEmpty(shopCarts)) {
-				let cartList = [];
-				for (let key in shopCarts) {
-					cartList.push(shopCarts[key]);
-				}
-				return cartList;
-			} else {
-				return [];
-			}
-		},
 		// 购物车数据是否为空
 		showEmptyCart() {
 			if (this.$M_IsEmpty(this.$S_tabbar_shopCarts)) return true;
@@ -427,53 +417,6 @@ export default {
 				}
 			})
 		},
-		// 当数量超出范围,比如最小范围1触发
-		numsOverlimit(e, row) {
-			if (e === 'minus') {
-				this.deleteShops = row;
-				this.uModalShow = true;
-			}
-		},
-		// 点击删除弹窗的确定按钮
-		uModalConfirm() {
-			let shopCarts = this.$S_tabbar_shopCarts;
-			let list = [];
-			if (shopCarts.length > 0) {
-				// 根据id筛选出不是删除的那个商品
-				list = shopCarts.filter(item => {
-					if (item.imgId !== this.deleteShops.imgId) {
-						return item;
-					} else {
-						// 要把优惠码和优惠价清空
-						item.codeList = [];
-						item.discountList = [];
-					}
-				});
-			}
-			// 把数组转成对象储存到vuex中
-			let cartList = this.arrAttrToOBj(list, 'imgId');
-			this.$M_Dp('ACTI_SHOPCARTS', cartList);
-			this.uModalShow = false;
-		},
-		// 点击商品+
-		goodPlus(e, row) {
-			this.handleCar(e, row, 1);
-		},
-		// 点击商品-
-		goodMinus(e, row) {
-			this.handleCar(e, row, 2);
-		},
-		// 点击数量的+-
-		numsChg(e, row) {
-			// 增加用户体验
-			uni.showLoading({
-				title: '请稍等'
-			});
-			setTimeout(() => {
-				uni.hideLoading();
-			}, 200);
-			this.handleCar(e, row, 3);
-		},
 		// 处理购物车数据
 		handleCar(e, row, idx) {
 			let shopCarts = this.$S_tabbar_shopCarts;

File diff suppressed because it is too large
+ 154 - 66
pages/home/index.vue


+ 3 - 3
pages/mine/index.vue

@@ -4,8 +4,8 @@
 		<view class="o-plr-24" style="margin-top: -80rpx;">
 			<view class="l-flex-between l-boxShadow o-mb-40 c-bg-f o-plr-20 o-ptb-10 c-radius-10">
 				<view @click="setAvatarNick" class="l-flex-RC">
-					<view class="headImg o-mr-28">
-						<u--image width="200rpx" height="200rpx" shape="circle" :src="$S_mine_avatarNick.avatarUrl">
+					<view style="padding: 50rpx 0" class="headImg o-mr-28">
+						<u--image width="100rpx" height="100rpx" shape="circle" :src="$S_mine_avatarNick.avatarUrl">
 							<view slot="error" style="font-size: 24rpx;">个人头像加载失败</view>
 						</u--image>
 					</view>
@@ -44,7 +44,7 @@ export default {
 				},
 				{
 					icon: 'bag',
-					title: '我要开店',
+					title: '我要赚钱',
 					isLink: true,
 					url: '/otherPages/mine/opneShop/index',
 					id: 2

File diff suppressed because it is too large
+ 315 - 309
store/modules/common.js


+ 2 - 1
util/request/requestInterceptors.js

@@ -21,7 +21,8 @@ module.exports = (vm) => {
 			// 如果都需要loading效果的接口
 			if (custom.loading !== false) {
 				uni.showLoading({
-					title: '加载中'
+					title: '加载中',
+					mask: true,
 				})
 				wx.showNavigationBarLoading();
 			}