From b83ba3cc4687f21d744e9866e10e30e91229e8a4 Mon Sep 17 00:00:00 2001 From: queenwuli <942534046@qq.com> Date: Thu, 28 Jan 2021 16:23:30 +0800 Subject: [PATCH] gx --- hive-app/pages/workbench/selectProduct/index.vue | 226 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 183 insertions(+), 43 deletions(-) diff --git a/hive-app/pages/workbench/selectProduct/index.vue b/hive-app/pages/workbench/selectProduct/index.vue index 25e4263..ed1bbba 100644 --- a/hive-app/pages/workbench/selectProduct/index.vue +++ b/hive-app/pages/workbench/selectProduct/index.vue @@ -4,15 +4,21 @@ <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" :open="item.id==cateId" :title="item.name" :isShowIcon="isShowIcon(item)" class="list-left-row" + v-if="item.parentId===0" v-for="(item, index) 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"> + <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> @@ -33,6 +39,10 @@ </view> </view> </navigator> + <view v-if="goodsList.length"> + <uni-load-more :status="loadStatus" color="#a5abaf"></uni-load-more> + </view> + <no-record :isShow="!goodsList.length" txt="暂无产品/项目"></no-record> </scroll-view> </view> <view class="footer"> @@ -45,27 +55,35 @@ </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 shoppingCart from './shoppingCart.vue' + import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue'; export default { components:{ + uniCollapse, + uniCollapseItem, searchBar, - shoppingCart + shoppingCart, + uniLoadMore }, data(){ return{ id: '', + tabIndex: '0', goodsTypeList: [], goodsList: [], - selectIndex: 0, cateId: null,//当前产品类别id selectItems: [], - queryKey: '' + queryKey: '', + loadStatus: 'more', + pageNum: 1 } }, computed:{ @@ -81,7 +99,9 @@ totalAmount(){ let amount = 0; this.selectItems.forEach((item) => { - amount += item.price * item.num; + if(!item.isFree){ + amount += item.price * item.num; + } }) return amount; }, @@ -96,9 +116,35 @@ }); this.loadGoodsTypeList() }, + onPullDownRefresh(){ + this.reloadData(); + let timer = setTimeout(function () { + uni.stopPullDownRefresh(); + clearTimeout(timer); + timer = null; + }, 800); + }, methods:{ + reloadData(){ + this.goodsList = []; + this.pageNum = 1; + this.loadStatus = 'more'; + this.loadGoodsList(); + }, + scrolltolower(){ + this.loadGoodsList() + }, + isShowIcon(item){ + let count = 0; + this.goodsTypeList.forEach((op) => { + if(op.parentId==item.id){ + count ++ + } + }); + return count?true:false; + }, openShoppingCart(){ - this.$refs.shopCart.show() + this.$refs.shopCart.toggle() }, loadGoodsTypeList(){ this.$httpUtils.request('/api/order/findShoppingGoodsType').then((res) => { @@ -113,15 +159,32 @@ }) }, loadGoodsList(){ + if(this.loadStatus!=='more'){ + return; + } this.$httpUtils.request('/api/order/findShoppingGoods',{ cateId: this.cateId, - pageNum: 1, - pageSize: 100, + 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; + } + }) }); } }) @@ -129,32 +192,89 @@ // 搜索 search(val){ this.queryKey = val; - this.loadGoodsList(); + this.reloadData(); + }, + getParentId(){ + let arr = this.goodsTypeList.filter((item) => { + return item.id===this.cateId + }) + return arr.length?arr[0].parentId:''; + }, + toggleAll(arr){ + this.changeGoodsType(''); + }, + // 打开关闭面板 + 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, index){ - this.selectIndex = index; + changeGoodsType(id){ this.cateId = id; - this.loadGoodsList(); + this.reloadData(); }, + freeChange(data){ + data.goods.isFree = !data.goods.isFree; + this.$set(this.selectItems, data.index, data.goods) + }, + // 添加商品 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); + 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(){ @@ -181,7 +301,7 @@ display: flex; flex-direction: column; height: 100%; - padding: 10px 0 0; + padding-top: 10px; box-sizing: border-box; } .search-bar{ @@ -194,7 +314,7 @@ overflow: hidden; } .list-left{ - width: 170rpx; + width: 200rpx; background: #F6F6F8; border-radius: 4px; } @@ -202,13 +322,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; @@ -216,9 +350,12 @@ padding: 10px; margin: 0 10px 10px; border: 1px solid #EDEAF4; - box-shadow:0 6px 6px rgba(237,234,244,0.5); + box-shadow:0 6px 6px rgba(237,234,244,0.4); border-radius: 4px; font-size: 13px; + } + .list-row .list-right-row:nth-last-of-type(1){ + margin-bottom: 0; } .list-right-row .product-img{ width: 66px; @@ -236,8 +373,11 @@ display: flex; justify-content: space-between; background: #FFFFFF; - padding: 10px 10px; - box-shadow: 0 6px 100px rgba(237,234,244,1); + padding: 10px; + padding-bottom: 10px; + padding-bottom: calc(10px + constant(safe-area-inset-bottom)); + padding-bottom: calc(10px + env(safe-area-inset-bottom)); + box-shadow: 0 -6px 6px rgba(237,234,244,0.2); } .footer .icon-car-wrap{ position: relative; @@ -261,8 +401,8 @@ } .footer .btn{ border-radius: 20px; - line-height: 34px; - padding: 0 24px; + line-height: 36px; + padding: 0 26px; font-size: 14px; } </style> -- Gitblit v1.9.1