|
|
- <template>
- <view class="cart">
- <u-navbar :title="$t('page.cart.shoppingCart')" placeholder
- @leftClick="toHome()"></u-navbar>
- <!-- <u-checkbox-group v-if="productList.length > 0" @change="slectProductChange" v-model="selectProduct" -->
- <!-- activeColor="#ED762F" placement="column" shape="circle"> -->
- <u-radio-group v-if="productList.length > 0" v-model="selectProduct" activeColor="#ED762F" placement="column" @change="groupChange">
- <u-swipe-action autoClose>
- <u-swipe-action-item v-for="(item,index) in productList" :key="index" @click="deleteCart(item.id)"
- :show="item.show" :options="cartOptions" ref="item">
- <view @click.stop="toProductDetail(item.shopId)" class="cart-item">
- <view class="cart-item-body">
- <!-- <u-checkbox :name="item.id"></u-checkbox> -->
- <u-radio :key="index" @change="radioChange" :name="item.id">
- </u-radio>
- <view class="img-box">
- <image mode="aspectFill" :src="item.image" alt="" />
- </view>
- <view class="product-info">
- <view class="product-name">{{ item.shopName }}</view>
- <view class="product-price">
- <text></text>
- <text class="integer">{{ item.price }}</text>
- <!-- <text class="point">.</text> -->
- <!-- <text class="decimals">99</text> -->
- </view>
- </view>
- </view>
- <view class="prodict-num">
- <u-number-box v-model="item.num" :min="1" style="transform: scale(0.8);"
- @change="(num) => {editNum(item,num.value)}"></u-number-box>
- </view>
- </view>
- </u-swipe-action-item>
- </u-swipe-action>
- <!-- </u-checkbox-group> -->
- </u-radio-group>
-
- <view v-else class="no-product">
- <view class="box">
- <view class="no-product-title">{{ $t('page.cart.none-product') }}</view>
- <view @click="toHome()" class="to-home">{{ $t('page.cart.stroll')}}</view>
- </view>
- </view>
-
- <view class="cart-bottom">
- <u-checkbox-group @change="SelectAllChange" v-model="selectAll" activeColor="#ED762F" placement="column"
- shape="circle">
- <u-checkbox v-for="(item,index) in selectAllList" :disabled="forbiddenSelectAll" :key="index" :label="item.name"
- :name="item.name"></u-checkbox>
- </u-checkbox-group>
- <view class="total-price">
- {{ $t('page.cart.total') }}:
- <text class="total">{{ total }}</text>
- </view>
- <view @click="createOrder()" class="buy">
- {{ $t('page.cart.buy') }}
- <!-- <text class="num">({{ selectProduct.length }})</text> -->
- </view>
- </view>
-
- </view>
- </template>
-
- <script>
- export default {
- data() {
- return {
- productList: [],
- // selectProduct: [],
- selectProduct: '',
- cartNum: 1,
- selectAllList: [{
- name: this.$t('page.cart.selectAll')
- }],
- selectAll: [],
- total: 0, //总价
- cartOptions: [{
- text: this.$t('page.collect.detele')
- }],
- show: true,
- forbiddenSelectAll : false, //是否禁用全选按钮
- }
- },
- onShow() {
- this.getCartProductList();
- },
- methods: {
-
- toHome() {
- uni.switchTab({
- url: '/pages/home/home'
- })
- },
-
- toProductDetail(shop_id) {
- uni.navigateTo({
- url: '/pages/productDetail/productDetail?id=' + shop_id
- })
- },
-
- SelectAllChange(selectArr) { //全选按钮状态发生改变
- // if (selectArr.length > 0) {
- // this.productList.forEach(item => {
- // this.total += item.price;
- // this.selectProduct.push(item.id);
- // })
- // } else {
- // this.selectProduct = [];
- // this.total = 0;
- // }
-
- if (selectArr.length > 0) {
- this.total = this.productList[0].price;
- this.selectProduct = this.productList[0].id;
- } else {
- this.selectProduct = '';
- this.total = 0;
- }
- },
-
- slectProductChange(selectProductArr) {
- this.total = 0;
- if (selectProductArr.length == this.productList.length) {
- this.selectAll.push(this.$t('page.home.all'));
- } else {
- this.selectAll = [];
- }
- this.productList.forEach(item => {
- selectProductArr.forEach(pro => {
- if (item.id == pro) {
- this.total += item.price;
- }
- })
- })
- },
-
- getCartProductList() { //获取购物车商品列表
- this.request('getCartList', {}, {
- "pageSize": 999,
- "currentPage": 0
- }).then(res => {
- if (res.code == 200) {
- this.forbiddenSelectAll = false;
- this.productList = parseList(res.result.records)
- if(this.productList && this.productList.length ==0){
- this.forbiddenSelectAll = true;
- }
- this.cloeseAllSwiper();
- //
- this.selectProduct = ''
- }
- })
- },
-
- deleteCart(id) { //删除购物车
- this.request("delCartNum", {
- id,
- }).then(res => {
- if (res.code === 200) {
- uni.$u.toast(this.$t('success-operation'));
- this.getCartProductList();
- }
- })
- },
-
- editNum(currentProduct, num) { //修改购物车数量
- this.request('editCartNum', {
- id: currentProduct.id,
- shopId : currentProduct.shopId,
- num
- }).then(res => {
- if (res.code === 200) {
- uni.$u.toast(this.$t('success-operation'));
- this.getCartProductList();
- }
- })
- },
-
- cloeseAllSwiper() {
- if (this.$refs.item) {
- this.$refs.item.forEach(item => item.closeHandler(true))
- }
- },
- createOrder() { //创建订单
- if(!this.selectProduct){
- return uni.$u.toast(this.$t('page.cart.Please_select_product'))
- }
- let item = {};
- this.productList.forEach(n=>{
- if(n.id == this.selectProduct){
- item = n;
- }
- })
- this.request("createOrder", {
- shopId: item.shopId,
- num: item.num,
- price: item.price,
- image: item.image,
- title: item.shopName,
- subTitle: item.shopName
- }).then(res => {
- if (res.code === 200) {
-
- this.request('delCartNum', {
- id : this.selectProduct
- })
-
- return uni.navigateTo({
- url: '/pages/payOrder/payOrder?id=' + res.result.id + '&quantity=' + item.num
- })
- }
- })
- },
- radioChange(item){
- this.productList.forEach(n=>{
- if(n.id == item){
- this.total = n.price;
- }
- })
- }
- }
- }
- </script>
-
- <style lang="scss" scoped>
- .cart {
- padding-bottom: 50px;
-
- .cart-item {
- background: white;
-
- .cart-item-body {
- display: flex;
- flex-wrap: wrap;
- padding: 20px 10px;
-
- .u-checkbox {
- width: 80rpx;
- }
-
- .img-box {
- width: 160rpx;
- height: 160rpx;
- border-radius: 12rpx;
- overflow: hidden;
-
- image {
- width: 100%;
- height: 100%;
- }
- }
-
- .product-info {
- box-sizing: border-box;
- width: calc(100% - 240rpx);
- padding-left: 20rpx;
- font-size: 26rpx;
-
- .product-name {
- overflow: hidden;
- display: -webkit-box;
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- word-break: break-all;
- }
-
- .product-price {
- color: #E01717;
- margin-top: 5px;
-
- .integer {
- font-size: 36rpx;
- }
- }
- }
- }
-
- .prodict-num {
- box-sizing: border-box;
- display: flex;
- justify-content: flex-end;
- padding: 10px;
- }
- }
-
- .no-product {
- height: calc(100vh - 144px);
- display: flex;
- justify-content: center;
- align-items: center;
-
- .box {
- font-size: 26rpx;
- text-align: center;
-
- .to-home {
- padding: 20rpx 140rpx;
- border: 1px solid #ccc;
- border-radius: 5px;
- text-align: center;
- margin: 20rpx 0px;
- }
- }
- }
-
- .cart-bottom {
- display: flex;
- align-items: center;
- justify-content: space-between;
- flex-wrap: wrap;
- position: fixed;
- left: 0;
- bottom: 50px;
- height: 100rpx;
- width: 100%;
- background: white;
- z-index: 100;
- box-shadow: -1px -1px 2px rgba(0, 0, 0, .1);
-
- .u-checkbox-group {
- box-sizing: border-box;
- width: 130rpx;
- padding-left: 10px;
- }
-
- .total-price {
- font-size: 28rpx;
-
- .total {
- font-size: 36rpx;
- color: #ED7A2F;
- }
- }
-
- .buy {
- height: 100%;
- line-height: 100rpx;
- width: 240rpx;
- background: #ED7A2F;
- color: white;
- text-align: center;
- font-size: 28rpx;
- }
- }
-
- //修改组件样式
- .u-page {
- padding: 0;
- }
-
- .u-demo-block__title {
- padding: 10px 0 2px 15px;
- }
-
- .swipe-action {
- &__content {
- padding: 25rpx 0;
-
- &__text {
- font-size: 15px;
- color: $u-main-color;
- padding-left: 30rpx;
- }
- }
- }
-
- &::v-deep .u-swipe-action-item__right__button__wrapper {
- background-color: red !important;
- width: 60rpx;
- }
-
- &::v-deep .u-swipe-action-item__right__button__wrapper__text {
- span {
- font-size: 26rpx !important;
- }
- }
-
- &::v-deep .u-swipe-action-item {
- margin-top: 10px;
- }
- }
- </style>
|