<template> <view class="goods"> <view class="search"> <view class="box"> <!-- <image src="/static/news/icon-search.png"></image> <input type="search" placeholder="搜索订单" /> --> <u-search height="50" @search="getListAfter" @custom="getListAfter" placeholder="商品名称/编码" v-model="keyword"></u-search> </view> </view> <view class="goods-bd"> <view class="li" v-for="(i,index) in list" :key="index"> <view class="b"> <view class="item"> <view class="select" @click="selectItem(i,index)"> <image mode="aspectFill" v-if="!i.checked" :src="$picUrl+'/static/invoice/select.png'" /> <image mode="aspectFill" v-else :src="$picUrl+'/static/invoice/select-on.png'" /> </view> <view class="pic"> <image mode="aspectFill" :src="i.goods_image" /> </view> <!-- 此层wrap在此为必写的,否则可能会出现标题定位错误 --> <view class="info"> <view class="title">{{i.goods_name}}</view> <view class="sku"> {{i.selling_point}} </view> <view class="fd"> <view class="price">¥<text>{{i.goods_price_max}}</text></view> <view class="kc">库存{{i.stock_total}}</view> </view> </view> </view> </view> <view class="a"> <view class="status">商品状态:{{i.status==10?'上架':i.status==20?'下架':'未知'}}</view> </view> </view> </view> <view class="goods-fd"> <view class="a" @click="checkedAllHandle"> <image mode="aspectFill" v-if="!checkedAll" :src="$picUrl+'/static/invoice/select.png'" /> <image mode="aspectFill" v-else :src="$picUrl+'/static/invoice/select-on.png'" />全选 </view> <view class="b">共<text>{{checkedList.length}}</text>件商品</view> <view class="c" @click="show=true">删除</view> </view> <u-toast ref="uToast" /> <u-modal v-model="show" content="确定删除选中商品吗" :show-cancel-button="true" @cancel="show=false" @confirm="delConfirm"></u-modal> </view> </template> <script> import * as newFunApi from '@/api/newFun' export default { data() { return { list: [], keyword: "", total: 0, pageNum: 1, checkedAll:false, checkedList:[], show:false, }; }, // watch:{ // list:{ // deep:true, // handler:function(){ // } // } // }, methods: { selectItem(item,index){ if(this.list[index].checked){//取消选中 if(this.checkedList.indexOf(item.goods_id)!=-1){ this.checkedList.splice(this.checkedList.indexOf(item.goods_id), 1); } this.list[index].checked = false }else{//选中 if(this.checkedList.indexOf(item.goods_id)==-1){ this.checkedList.push(item.goods_id) } this.list[index].checked = true } if (this.list.length == this.checkedList.length) { this.checkedAll = true; } else { this.checkedAll = false; } }, checkedAllHandle(){ this.checkedList=[] if(this.checkedAll){ this.checkedAll = false this.list.forEach(item=>{ item.checked = false; }) }else{ this.checkedAll = true; this.list.forEach(item=>{ this.checkedList.push(item.goods_id) item.checked = true }) } }, getListAfter(){ this.checkedList=[]; this.list = []; this.getList() }, async getList() { uni.showLoading({ title:"加载中" }) let {status, message, data} = await newFunApi.storeKeeperList({ goodsNo: "", page: this.pageNum, listType: "all", goodsName: this.keyword }); if(status == 200){ uni.hideLoading(); this.list = this.list.concat(data.list.data) this.total = data.list.total } }, async delConfirm(){ let {status, message, data} = await newFunApi.delGoods({ goodsIds:this.checkedList }); if(status == 200){ uni.hideLoading(); this.$refs.uToast.show({ title: message, type: 'success' }) this.getListAfter() } }, delHandle(item){ this.selected=item; this.show = true }, }, onReady() { this.getListAfter(); }, onReachBottom() { if(this.list.length <= this.total){ this.pageNum ++; this.getList(); } }, } </script> <style lang="scss" scoped> .goods{ padding: 0 0 130rpx; overflow: hidden; &-fd{ width: 100%; padding: 20rpx; overflow: hidden; display: flex; align-items: center; justify-content: center; box-sizing: border-box; position: fixed; left: 0; bottom: 0; z-index: 999; background-color: #fff; .a{ margin-right: 20rpx; font-size: 28rpx; font-weight: 400; color: #313131; display: flex; align-items: center; image{ width: 40rpx; height: 40rpx; margin-right: 10rpx; } } .b{ text{ color: #ED2B00; padding: 0 10rpx; } font-size: 26rpx; font-weight: 400; color: #A2A2A2; margin-right: 16rpx; } .c{ width: 408rpx; line-height: 80rpx; background: #FF564A; border-radius: 80rpx; text-align: center; font-size: 28rpx; font-weight: 500; color: #FFFFFF; } } .search{ width: 750rpx; padding: 35rpx; box-sizing: border-box; .box{ padding: 15rpx 25rpx; box-sizing: border-box; display: flex; align-items: center; background: #F3F3F3; border-radius: 60rpx; image{ width: 28rpx; height: 28rpx; margin-right: 22rpx; } input{ flex: 1; font-size: 28rpx; line-height: 30rpx; } } } &-bd{ padding: 0 30rpx; overflow: hidden; .a{ padding: 15rpx 0; display: flex; align-items: center; justify-content: space-between; .status{ font-size: 28rpx; font-weight: 400; color: #B6B6B6; } .btn{ width: 148rpx; line-height: 64rpx; background: #FFFFFF; border-radius: 64rpx; text-align: center; border: 1px solid #F55349; font-size: 28rpx; font-weight: 400; color: #F55349; } } .li{ overflow: hidden; background-color: #fff; padding: 0 30rpx; margin-top: 15rpx; &:first-child{ margin-top: 0; } .item{ padding: 20rpx 0; overflow: hidden; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid #EFEFEF; .select{ width: 40rpx; height: 40rpx; margin-right: 20rpx; image{ width: 100%; height: 100%; } } .pic{ width: 160rpx; height: 160rpx; margin-right: 20rpx; image{ width: 100%; height: 100%; } } .info{ flex: 1; max-width: 370rpx; margin-right: 20rpx; .title{ font-size: 28rpx; font-weight: 400; color: #000000; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .sku{ line-height: 48rpx; margin-top: 10rpx; font-size: 28rpx; font-weight: 400; color: #7C7C7C; } .fd{ display: flex; align-items: center; justify-content: space-between; margin-top: 10rpx; .price{ font-size: 32rpx; font-weight: 400; color: #ED2B00; } .kc{ font-size: 28rpx; font-weight: 400; color: #B6B6B6; } } } } } } } </style>