From 6e54af776db885ad1a22ec582bdc97d7e1273c6c Mon Sep 17 00:00:00 2001
From: queenwuli <942534046@qq.com>
Date: Wed, 13 Jan 2021 17:31:30 +0800
Subject: [PATCH] 系统优化

---
 hive-app/pages/workbench/selectProduct/index.vue |  224 +++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 173 insertions(+), 51 deletions(-)

diff --git a/hive-app/pages/workbench/selectProduct/index.vue b/hive-app/pages/workbench/selectProduct/index.vue
index 298d203..b9b3f7f 100644
--- a/hive-app/pages/workbench/selectProduct/index.vue
+++ b/hive-app/pages/workbench/selectProduct/index.vue
@@ -1,22 +1,25 @@
 <template>
 	<!-- 当前客户 -->
 	<view class="container">
-		<!-- #ifndef H5 -->
-		<view class="status_bar"></view>
-		<!-- #endif -->
-		<search-bar placeholder="商品名称、编号、拼音" class="search-bar"></search-bar>
+		<search-bar @confirm="search" placeholder="商品名称、编号、拼音" class="search-bar"></search-bar>
 		<view class="list">
 			<scroll-view class="list-left" scroll-y="true">
-				<view class="list-left-row" 
-					v-for="(item,index) in goodsTypeList" 
-					v-if="item.parentId===0"
-					:class="index==selectIndex?'active':''"
-					@click="changeGoodsType(item.id, index)">
-						<text>{{item.name}}</text>
-				</view>
+				<uni-collapse accordion="true" @change="toggleCollapse">
+				    <uni-collapse-item :showAnimation="true" :title="item.name" class="list-left-row"
+						v-if="item.parentId===0" v-for="item in goodsTypeList">
+				        <view class="list-row-wrap">
+							<view class="list-row" :class="op.id==cateId?'blue':''"
+								v-for="op in goodsTypeList" 
+								v-if="op.parentId===item.id" 
+								@click="changeGoodsType(op.id)">
+							    {{op.name}}
+							</view>
+						</view>
+				    </uni-collapse-item>
+				</uni-collapse>
 			</scroll-view>
-			<scroll-view class="list-right" scroll-y="true">
-				<navigator url="../productDetail/index" hover-class="none" v-for="item in goodsList">
+			<scroll-view class="list-right" scroll-y="true" @scrolltolower="scrolltolower()">
+				<navigator :url="'../productDetail/index?goodsType='+item.goodsType+'&id='+item.id" hover-class="none" v-for="item in goodsList">
 					<view class="list-right-row">
 						<image class="product-img" :src="item.img?item.img:'../../../static/images/no-img.png'"></image>
 						<view class="flex-1">
@@ -36,6 +39,9 @@
 						</view>
 					</view>
 				</navigator>
+				<view v-if="goodsList.length">
+					<uni-load-more :status="loadStatus" color="#a5abaf"></uni-load-more>
+				</view>
 			</scroll-view>
 		</view>
 		<view class="footer">
@@ -48,28 +54,34 @@
 			</view>
 			<button class="blue-btn btn mr-0" @click="submit" :disabled="isEnableSumbit">提交订单</button>
 		</view>
-		<shopping-cart ref="shopCart" :list="selectItems" @addGoods="addGoods" @decreaseGoods="decreaseGoods" @reset="clearShopCart"></shopping-cart>
+		<shopping-cart ref="shopCart" :list="selectItems" @freeChange="freeChange" @addGoods="addGoods" @decreaseGoods="decreaseGoods" @reset="clearShopCart"></shopping-cart>
 	</view>
 </template>
 
 <script>
+	import uniCollapse from '../../../components/uni-collapse/uni-collapse.vue'
+	import uniCollapseItem from '../../../components/uni-collapse-item/uni-collapse-item.vue'
 	import searchBar from '../../../components/searchBar/index.vue';
-	import uniPopup from '@/components/uni-popup/uni-popup.vue'
 	import shoppingCart from './shoppingCart.vue'
+	import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
 	export default {
 		components:{
+			uniCollapse,
+			uniCollapseItem,
 			searchBar,
-			uniPopup,
-			shoppingCart
+			shoppingCart,
+			uniLoadMore
 		},
 		data(){
 			return{
 				id: '',
 				goodsTypeList: [], 
 				goodsList: [],
-				selectIndex: 0,
 				cateId: null,//当前产品类别id
-				selectItems: []
+				selectItems: [],
+				queryKey: '',
+				loadStatus: 'more',
+				pageNum: 1
 			}
 		},
 		computed:{
@@ -85,7 +97,9 @@
 			totalAmount(){
 				let amount = 0;
 				this.selectItems.forEach((item) => {
-					amount += item.price * item.num;
+					if(!item.isFree){
+						amount += item.price * item.num;
+					}
 				})
 				return amount;
 			},
@@ -100,12 +114,26 @@
 			});
 			this.loadGoodsTypeList()
 		},
+		onPullDownRefresh(){
+			this.reloadData();
+			let timer = setTimeout(function () {
+				uni.startPullDownRefresh();
+				clearTimeout(timer);
+				timer = null;
+			}, 800);
+		},
 		methods:{
+			reloadData(){
+				this.goodsList = [];
+				this.pageNum = 1;
+				this.loadStatus = 'more';
+				this.loadGoodsList();
+			},
+			scrolltolower(){
+				this.loadGoodsList()
+			},
 			openShoppingCart(){
-				if(!this.selectItems.length){
-					return;
-				}
-				this.$refs.shopCart.show()
+				this.$refs.shopCart.toggle()
 			},
 			loadGoodsTypeList(){
 				this.$httpUtils.request('/api/order/findShoppingGoodsType').then((res) => {
@@ -120,43 +148,119 @@
 				})
 			},
 			loadGoodsList(){
+				if(this.loadStatus!=='more'){
+					return;
+				}
 				this.$httpUtils.request('/api/order/findShoppingGoods',{
 					cateId: this.cateId,
-					pageNum: 1,
-					pageSize: 100,
-					queryKey: ''
+					pageNum: this.pageNum,
+					pageSize: 10,
+					queryKey: this.queryKey
 				},'POST').then((res) => {
 					if(res.status == 200){
-						this.goodsList = res.rows.map((item) => {
+						let result = res.rows.map((item) => {
 							return Object.assign(item, {num: 0});
+						});
+						if(result.length < 10){
+							this.loadStatus = 'noMore';
+						} else {
+							this.pageNum ++ ;
+							this.loadStatus = 'more';
+						}
+						this.goodsList = this.goodsList.concat(result);
+						this.goodsList.forEach((item) => {
+							this.selectItems.forEach((op) => {
+								if(item.id == op.id){
+									item.num = op.num;
+								}
+							})
 						});
 					}
 				})
 			},
-			// 切换商品类型
-			changeGoodsType(id, index){
-				this.selectIndex = index;
-				this.cateId = id;
-				this.loadGoodsList();
+			// 搜索
+			search(val){
+				this.queryKey = val;
+				this.reloadData();
 			},
-			addGoods(goods){
-				let index = this.selectItems.indexOf(goods);
-				goods.num++;
-				// 该商品若已在购物车,则购物车数量上+1,否则加入购物车
-				if(index > -1){
-					this.selectItems[index].num = goods.num;
-				}else{
-					this.selectItems.push(goods);
+			getParentId(){
+				let arr = this.goodsTypeList.filter((item) => {
+					return item.id===this.cateId
+				})
+				return arr.length?arr[0].parentId:'';
+			},
+			// 打开关闭面板
+			toggleCollapse(arr){
+				if(!arr.length){
+					let parentId = this.getParentId();
+					if(parentId){
+						this.changeGoodsType();
+					}
+					return;
 				}
+				let index = arr[0];
+				let result = this.goodsTypeList.filter((item) => {
+					return item.parentId===0
+				})
+				this.changeGoodsType(result[index].id);
+			},
+			// 切换商品类型
+			changeGoodsType(id){
+				this.cateId = id;
+				this.reloadData();
+			},
+			freeChange(data){
+				data.goods.isFree = !data.goods.isFree;
+				this.$set(this.selectItems, data.index, data.goods)
+			},
+			// 添加商品
+			addGoods(goods){
+				goods.num ++ 
+				// 所有商品列表的下标
+				let ids = this.goodsList.map((item) => {
+					return item.id;
+				})
+				let index = ids.indexOf(goods.id);
+				if(index>-1){
+					this.goodsList[index].num = goods.num;
+				}
+				
+				// 选中商品的下标
+				let selectIds = this.selectItems.map((item) => {
+					return item.id;
+				})
+				let selectIndex = selectIds.indexOf(goods.id);
+				
+				// 该商品若已在购物车,则购物车数量上+1,否则加入购物车
+				if(selectIndex > -1){
+					this.selectItems[selectIndex].num = goods.num;
+				}else{
+					this.selectItems.push(Object.assign(goods, {isFree: false}));
+				}
+				
 			},
 			decreaseGoods(goods){
-				let index = this.selectItems.indexOf(goods);
 				goods.num = goods.num <= 0 ? 0 : goods.num - 1;
+				// 所有商品列表的下标
+				let ids = this.goodsList.map((item) => {
+					return item.id;
+				})
+				let index = ids.indexOf(goods.id);
+				if(index>-1){
+					this.goodsList[index].num = goods.num;
+				}
+				
+				// 选中商品的下标
+				let selectIds = this.selectItems.map((item) => {
+					return item.id;
+				})
+				let selectIndex = selectIds.indexOf(goods.id);
+				
 				// 该商品若已在购物车,则购物车数量上-1,否则从购物车删除
-				if(index > -1 && this.selectItems[index].num >= 1){
-					this.selectItems[index].num = goods.num;
+				if(goods.num >= 1){
+					this.selectItems[selectIndex].num = goods.num;
 				}else{
-					this.selectItems.splice(index, 1);
+					this.selectItems.splice(selectIndex, 1);
 				}
 			},
 			clearShopCart(){
@@ -166,8 +270,9 @@
 				});
 			},
 			submit(){
+				let str = (encodeURIComponent(JSON.stringify(this.selectItems))).replace(/%/g, '%25');
 				uni.navigateTo({
-					url: '../confirmOrder?id='+this.id+'&list='+encodeURIComponent(JSON.stringify(this.selectItems))
+					url: '../confirmOrder?id='+this.id+'&list='+str
 				});
 			}
 		}
@@ -195,7 +300,7 @@
 		overflow: hidden;
 	}
 	.list-left{
-		width: 170rpx;
+		width: 200rpx;
 		background: #F6F6F8;
 		border-radius: 4px;
 	}
@@ -203,13 +308,27 @@
 		flex: 1;
 	}
 	.list-left-row{
-		padding: 10px;
 		color: #8c9fad;
 		font-size: 13px;
+		border-bottom: 0;
 	}
-	.list-left-row.active{
-		background: #FFFFFF;
-		color: #000000;
+	.uni-collapse{
+		background-color: #F6F6F8!important;
+	}
+	.uni-collapse-cell{
+		border-color: #F6F6F8!important;
+	}
+	.uni-collapse-cell__title:active, .uni-collapse-cell--hover, .uni-collapse-cell--open, .uni-collapse-cell--disabled{
+		background-color: #FFFFFF!important;
+	}
+	
+	.list-row-wrap{
+		padding: 0 15px;
+		margin-top: -8px;
+	}
+	.list-row{
+		font-size: 13px;
+		margin: 8px 0;
 	}
 	.list-right-row{
 		display: flex;
@@ -221,6 +340,9 @@
 		border-radius: 4px;
 		font-size: 13px;
 	}
+	.list-right-row:nth-last-of-type(1){
+		margin-bottom: 0;
+	}
 	.list-right-row .product-img{
 		width: 66px;
 		height: 66px;

--
Gitblit v1.9.1