【前端】纸掌柜h5端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

385 lines
8.8 KiB

<template>
<view class="warpper">
<uni-nav-bar :fixed="true" color="#ffffff" background-color="#ffffff" :status-bar="true">
<view slot="left" class="left-title">购物车</view>
<view slot="right" v-if="pageShow" class="right-title" @tap="delTap">删除</view>
</uni-nav-bar>
<view class="" v-if="pageShow">
<scroll-list ref="list" :option="option" @load="upCallback" @refresh="downCallback" style="background-color: #FFFFFF;">
<view class="group-box" v-for="(item, index) in list" :key="index">
<uGap></uGap>
<view class="group-checkbox">
<view class="checkbox">
<checkbox-group @change="onCheck"><checkbox value="cb" :checked="checked" color="#000000" style="transform: scale(0.7)" /></checkbox-group>
</view>
<view class="">{{item.supplierName}}</view>
</view>
<view class="list-box" v-for="(subItem, subIndex) in item.carItemList" :key="subIndex">
<view class="checkbox">
<checkbox-group @change="onCheck"><checkbox value="cb" :checked="checked" color="#000000" style="transform: scale(0.7)" /></checkbox-group>
</view>
<view class="list-row">
<image class="image" src="https://qncloud.oss-cn-shenzhen.aliyuncs.com/ztb_pic/testPic.jfif" mode=""></image>
<view class="right">
<view class="name">{{subItem.productName}}</view>
<view class="measure">{{subItem.gramWeight}}g{{subItem.width}}*{{subItem.length}}</view>
<view class="weight">预估重量{{subItem.weight}}</view>
<view class="price-row">
<view class="value">¥{{subItem.price}}</view>
<view class=""><qnInputNumber @change="change" /></view>
</view>
</view>
</view>
</view>
</view>
</scroll-list>
<view class="footer-box">
<view class="row">
<view class="left">
<view class="">
<checkbox-group @change="onCheck"><checkbox value="cb" :checked="checked" color="#000000" style="transform: scale(0.7)"></checkbox></checkbox-group>
</view>
<view class=""><text class="check-text">全选</text></view>
</view>
<view class="right">
<view class="">
<text class="name">应付</text>
<text class="value">¥7200.00</text>
</view>
<view class="right-balance-btn">结算</view>
</view>
</view>
</view>
</view>
<uni-popup ref="popup" type="center" :mask-click="false">
<view class="popup-box">
<view class="tip-title">
确定将当前纸品删除吗
</view>
<view class="operation-row">
<view class="cancel-text" @tap="cancelTap">
取消
</view>
<view class="line">
</view>
<view class="confirm-text" @tap="confirmTap">
确定
</view>
</view>
</view>
</uni-popup>
<no-data v-if="!pageShow"></no-data>
</view>
</template>
<script>
import uGap from '@/components/u-gap/u-gap.vue'
import qnFooter from '@/components/qn-footer/qn-footer.vue'
import { back, go2 } from '@/utils/hook.js'
import qnInputNumber from '@/components/qn-input-number/qn-input-number.vue'
import { getShoppingCarList, removeShoppingCar } from '@/apis/cartApi.js'
import noData from './no-data.vue'
export default {
components: { uGap, qnInputNumber, qnFooter, noData },
data() {
return {
pageShow: true,
option: {
size: 10,
auto: true,
// height: '90%',
emptyText: '暂无数据~',
background: '#F7F8FA',
disabled: false
},
params: {
userId : this.$store.state.userInfo.userId || null,
},
pagination: {
pageNum: 0, // 初始会执行一次下拉加载
pageSize: 10
},
checked: false,
list: [],
}
},
created() {
let that = this
uni.getSystemInfo({
success: function(res) {
console.log('状态栏的高', res.statusBarHeight)
that.option.height = res.windowHeight * (750 / res.windowWidth) - 180
}
})
},
onLoad() {},
methods: {
getList() {
return new Promise((resolve, reject) => {
getShoppingCarList({ ...this.params, ...this.pagination })
.then(res => {
// console.log('购物车', res)
if (res) {
if(res.records.length == 0) {
this.pageShow = false
return
}
if (this.pagination.pageNum == 1) {
this.list = res.records
} else {
this.list = this.list.concat(res.records)
}
// this.list = []
// this.list = [...this.list, ...[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
resolve({ list: this.list, total: res.total })
}
})
.catch(err => {
reject(err)
})
})
},
downCallback() {
this.pagination.pageNum = 1
this.getList()
.then(({ list, total }) => {
this.$refs.list.refreshSuccess({ list, total })
})
.catch(() => {
this.$refs.list.refreshFail()
})
},
upCallback() {
this.pagination.pageNum++
this.getList()
.then(({ list, total }) => {
this.$refs.list.loadSuccess({ list, total })
})
.catch(() => {
this.$refs.list.loadFail()
})
},
delTap() {
this.$refs.popup.open('center')
},
confirmTap() {
this.$refs.popup.close()
},
cancelTap() {
this.$refs.popup.close()
},
/**
* @param {Number} num
* 计数器返回值
*/
change(num) {}
}
}
</script>
<style lang="scss">
.warpper {
.left-title {
font-size: 40rpx;
color: #000000;
letter-spacing: 0;
font-weight: 500;
}
.right-title {
font-size: 28rpx;
color: #f5222d;
text-align: right;
font-weight: 500;
float: right;
}
.group-box {
// padding: 0rpx 32rpx;
.group-checkbox {
display: flex;
flex-direction: row;
align-items: center;
height: 88rpx;
background: #ffffff;
padding: 0rpx 32rpx;
}
}
.checkbox {
flex: 0 0 35rpx;
margin-right: 20rpx;
}
.list-box {
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
border-top: 2rpx solid #d8d8d8;
padding: 28rpx 32rpx 40rpx 32rpx;
.list-row {
flex: 1;
display: flex;
flex-direction: row;
.image {
flex: 0 0 180rpx;
width: 180rpx;
height: 180rpx;
border-radius: 8px;
margin-right: 16rpx;
}
.right {
flex: 1;
width: 100%;
}
.name {
font-size: 34rpx;
color: #333333;
letter-spacing: 0;
text-align: left;
font-weight: 600;
padding-top: 10rpx;
}
.measure {
font-size: 24rpx;
color: #333333;
letter-spacing: 0;
text-align: left;
font-weight: 500;
margin-top: 16rpx;
}
.weight {
text-align: center;
font-size: 24rpx;
color: #888888;
font-weight: 400;
text-align: right;
padding-top: 4rpx;
}
.price-row {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
padding-top: 12rpx;
.value {
font-size: 30rpx;
color: #f5222d;
letter-spacing: 0;
text-align: left;
font-weight: 500;
}
}
}
}
.footer-box {
left: 0;
right: 0;
.check-text {
font-size: 24rpx;
color: #333333;
letter-spacing: 0;
text-align: center;
font-weight: 400;
}
.row {
display: flex;
flex-direction: row;
align-items: center;
height: 96rpx;
background: #ffffff;
padding: 0rpx 32rpx;
.left {
flex: 0 0 200rpx;
display: flex;
flex-direction: row;
align-items: center;
}
.right {
flex: 1;
// width: 100%;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
.name {
font-size: 28rpx;
color: rgba(0, 0, 0, 0.85);
text-align: right;
font-weight: 400;
}
.value {
font-size: 36rpx;
color: #f5222d;
letter-spacing: 0;
text-align: left;
font-weight: 500;
}
}
.right-balance-btn {
width: 201rpx;
height: 76rpx;
line-height: 76rpx;
background: #007aff;
border-radius: 38rpx;
font-size: 32rpx;
color: #ffffff;
letter-spacing: 0;
text-align: center;
font-weight: 400;
}
}
}
.popup-box {
width: 540rpx;
height: 226rpx;
background: #FFFFFF;
border-radius: 14rpx;
.tip-title {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
height: 126rpx;
font-size: 32rpx;
color: #333333;
letter-spacing: 0;
text-align: center;
font-weight: 400;
}
.operation-row {
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
height: 100rpx;
background: #FFFFFF;
border-top: 2rpx solid #DDDDDD;
.cancel-text {
flex-grow: 1;
flex-shrink: 1;
font-size: 36rpx;
color: #000000;
letter-spacing: 0;
text-align: center;
font-weight: 400;
}
.line {
flex-grow: 0;
flex-shrink: 0;
width: 2rpx;
height: 100rpx;
border-left: 2rpx solid #DCDEE3;
}
.confirm-text{
flex-grow: 1;
flex-shrink: 1;
font-size: 36rpx;
color: #108EE9;
letter-spacing: 0;
text-align: center;
font-weight: 400;
}
}
}
}
</style>