fav-product-list.vue 3.99 KB
<template>
    <div class="fav-type show" v-infinite-scroll="loadMore()" infinite-scroll-disabled="busy" infinite-scroll-distance="10">
        <ul class="fav-product-list">
            <li v-for="item in productData" track-by="fav_id">
                <div class="fav-del {{editmodel ? 'show': ''}}">
                    <button @click="delProduct($index, item.fav_id)">删除</button>
                </div>
                <a :href="item.link">
                    <div class="fav-img-box">
                        <img :src="item.imgUrl" alt=""/>
                    </div>
                    <div class="fav-info-list">
                        <span class="title">{{item.title}}</span>
                        <br/>
                        <div class="fav-price">
                            <span class="new-price" v-if="item.discountPrice">{{item.discountPrice}}</span>
                            <span class="fav-price {{ item.discountPrice ? 'price-underline' : ''}}">{{item.price}}</span>
                        </div>
                        <br/>
                        <div class="save-price">
                            <span class="sell-out" v-if="item.sellOut || item.invalidGoods">{{item.sellOut ? '已售罄' : '已下架'}}</span>
                        </div>
                    </div>
                </a>
            </li>
        </ul>
        <div class="fav-null-box {{ nullbox }}">
            <span class="fav-null">您暂无收藏任何商品}}</span>
            <a slot="go-shopping" class="go-shopping" :href="productUrl">随便逛逛</a>
        </div>
    </div>
</template>

<script>
    const $ = require('yoho-jquery');
    const tip = require('common/tip');
    const Loading = require('common/loading');
    const modal = require('common/modal');
    const loading = new Loading();

    module.exports = {
        props: ['productUrl'],
        data() {
            return {
                nullbox : 'hide',
                busy: false,
                editmodel: false,
                page: 0,
                productData: []
            };
        },
        methods: {
            loadMore: function() {
                loading.show();

                let _this = this;
                this.busy = true;

                $.ajax({
                    url: '/home/favorite/favpaging',
                    data: {
                        page : ++_this.page
                    }
                }).then(result => {
                    if (result.length) {
                        result.forEach(function(o){
                            _this.productData.push(o);
                        });
                        _this.busy = false;
                    } else {
                        _this.busy = true;
                    }

                    _this.nullbox = _this.productData.length ? "hide" : "";
                    loading.hide();
                }).fail(() => {
                    tip('网络错误');
                });
            },
            editProduct(action) {
                this.editmodel = action;
            },
            delProduct(index, id) {
                let _this = this;
                $.modal.confirm('', '确定刪除该收藏吗?', function() {
                    this.hide();
                    $.ajax({
                        method: 'post',
                        url: '/home/favorite/favdel',
                        data: {
                            id: id
                        }
                    }).then(function(data) {
                        if (data.code === 200) {
                            _this.productData.splice(index, 1);
                        } else if (data.code === 400) {
                            $.modal.alert(data.message, '出错了!');
                        } else {
                            $.modal.alert('', '取消收藏失败');
                        }
                    }).fail(function() {
                        $.modal.alert('', '网络错误');
                    });
                });
            }
        }
    };
</script>