金诚优选前端代码
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.
 
 
 
 
 

340 lines
8.5 KiB

<template>
<view id="favorite-index">
<checkbox-group change="select">
<view class="num-box">
<view class="goods">您收藏了 <text class="num">{{total}}</text> 个商品</view>
<view class="operation" @tap="editF">{{edit ? '完成' : '编辑'}}</view>
</view>
<view class="goods-list">
<view v-for="(item, idx) in dataList" :key="idx">
<view class="goods-item mx-1px-bottom" v-if="!item.remove" v-for="(item, index) in dataList[idx]" :key="index">
<view class="img-box">
<checkbox :hidden="!edit" color="#fff" @tap="fClick" :checked="item.isCheck" :data-ischecked="item.isCheck" :data-findex="idx" :data-index="index" :data-value="item.favoriteable_id" :value="item.favoriteable_id"></checkbox>
<image :src="item.favoriteable.img" :data-id="item.favoriteable_id" @tap="jump"></image>
</view>
<view class="text" :data-id="item.favoriteable.id" @tap="jump">
<view class="names">{{item.favoriteable.name}}</view>
<view class="money">¥{{item.favoriteable.sell_price}}</view>
</view>
</view>
</view>
<view class="loadingbox" :hidden="!show">
正在加载下一页数据
</view>
</view>
</checkbox-group>
<view class="cancel mx-1px-top" v-if="edit">
<view class="checkbox">
<label>
<checkbox @tap="click" color="#fff" :checked="allCheck"></checkbox> 全选
</label>
</view>
<view class="cancel-button" :style="'background: ' + config.mainColor" @tap="cancel">
取消收藏
</view>
</view>
</view>
</template>
<script>
import {pageLogin, getUrl,config,is} from '@/common/js/utils.js';
export default {
data() {
return {
page: 1,
show: false,
edit: false,
meta: '',
total: 0,
dataList: [],
checkList: [],
allCheck: false,
config: ''
};
},
onReachBottom() {
var hasMore = this.meta.pagination.total_pages > this.meta.pagination.current_page;
if (hasMore) {
this.setData({
show: true
});
var page = this.meta.pagination.current_page + 1;
this.queryFavoriteList(0, page);
} else {
wx.showToast({
image: '../../../static/error.png',
title: '再拉也没有啦'
});
}
},
onShow() {
this.queryFavoriteList(); // let app =getApp();
// app.isBirthday().then(()=>{
// if(this.$cookieStorage.get("birthday_gift")){
// var giftData=this.$cookieStorage.get("birthday_gift").data;
// new app.ToastPannel().__page.showText(giftData);
// }
// });
},
onLoad() {
// 第三方平台配置颜色
var config = this.$cookieStorage.get('globalConfig') || '';
this.setData({
config: config
});
},
components: {},
props: {},
methods: {
editF() {
this.setData({
edit: !this.edit
});
},
select(e) {
var value = e.detail.value;
var newList = [];
if (value.length == this.total) {
this.setData({
allCheck: true
});
} else {
this.setData({
allCheck: false
});
}
value.forEach(v => {
v = parseInt(v);
newList.push(v);
});
this.setData({
checkList: newList
});
},
click() {
var newList = this.dataList;
if (this.allCheck) {
newList.forEach(v => {
v.forEach(i => {
i.isCheck = false;
});
});
this.setData({
checkList: []
});
} else {
var checkList = [];
newList.forEach(v => {
v.forEach(i => {
i.isCheck = true;
});
});
newList.forEach(v => {
v.forEach(i => {
checkList.push(i.favoriteable_id);
});
});
this.setData({
checkList: checkList
});
}
this.setData({
dataList: newList,
allCheck: !this.allCheck
});
},
fClick(e) {
var index = e.currentTarget.dataset.index;
var value = e.currentTarget.dataset.value;
var fIndex = e.currentTarget.dataset.findex;
var isCheck = e.currentTarget.dataset.ischecked;
var list = `dataList[${fIndex}]`;
// this.setData({
// [`${list}[${index}].isCheck`]: !this.dataList[fIndex][index].isCheck
// });
this.list[index].isCheck=!this.dataList[fIndex][index].isCheck;
},
cancel() {
var data = {
checkList: this.checkList,
dataList: this.dataList
};
if (this.checkList.length === 0) {
wx.showModal({
title: '',
content: '请选择你要删除的收藏',
showCancel: false
});
} else {
wx.showModal({
title: '',
content: '是否取消收藏',
success: res => {
if (res.confirm) {
this.removeBatchFavorite(data);
}
}
});
}
},
jump(e) {
var id = e.currentTarget.dataset.id;
wx.navigateTo({
url: '/pages/store/detail/detail?id=' + id
});
},
// 查询收藏列表
queryFavoriteList(status = 0, page = 1) {
var token = this.$cookieStorage.get('user_token');
this.$http.get({
api: 'api/favorite',
header: {
Authorization: token
},
data: {
page: page
}
}).then(res => {
if (res.statusCode == 200) {
res = res.data;
if (res.status) {
var pages = res.meta.pagination;
var total = res.meta.pagination.total;
res.data.forEach(v => {
v.remove = false;
v.isCheck = false;
});
this.setData({
total: total,
//[`dataList[${page - 1}]`]: res.data,
meta: res.meta
});
this.$set(this.dataList, page -1, res.data);
} else {
wx.showModal({
title: '',
content: res.message,
showCancel: false
});
}
} else {
wx.showModal({
title: '',
content: "请求失败",
showCancel: false
});
}
this.setData({
show: false
});
}).catch(rej => {
this.setData({
show: false
});
});
},
// 批量删除收藏
removeBatchFavorite(data) {
var token = this.$cookieStorage.get('user_token');
this.$http.post({
api: 'api/favorite/delFavs',
data: {
favoriteable_id: data.checkList,
favoriteable_type: 'goods'
},
header: {
Authorization: token
}
}).then(res => {
if (res.statusCode == 200) {
res = res.data;
if (res.status) {
var dataList = data.dataList;
var checkList = data.checkList;
dataList.forEach((v, idx) => {
v.forEach((i, index) => {
if (checkList.indexOf(i.favoriteable_id) != -1) {
// this.setData({
// [`dataList[${idx}][${index}].remove`]: true
// });
//
this.dataList[idx][index].remove=true;
}
});
});
this.queryFavoriteList();
this.setData({
checkList: []
});
} else {
wx.showModal({
title: '',
content: res.message,
showCancel: false
});
}
} else {
wx.showModal({
title: '',
content: "请求失败",
showCancel: false
});
}
});
},
setData: function (obj) {
let that = this;
let keys = [];
let val, data;
Object.keys(obj).forEach(function (key) {
keys = key.split('.');
val = obj[key];
data = that.$data;
keys.forEach(function (key2, index) {
if (index + 1 == keys.length) {
that.$set(data, key2, val);
} else {
if (!data[key2]) {
that.$set(data, key2, {});
}
}
data = data[key2];
});
});
}
},
computed: {},
watch: {}
};
</script>
<style rel="stylesheet/less" lang="less">
@import "index";
</style>