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.
412 lines
10 KiB
412 lines
10 KiB
export default {
|
|
data() {
|
|
return {
|
|
listStyle: '',
|
|
loadingType: 'loading', //加载更多状态
|
|
orderType: '',
|
|
priceOrder: 'desc', //1 价格从低到高 2价格从高到低
|
|
categoryList: [], //排序类型
|
|
goodsList: [],
|
|
order: '',
|
|
sort: 'desc',
|
|
showScreen: false,
|
|
keyword: '',
|
|
categoryId: 0,
|
|
minPrice: '',
|
|
maxPrice: '',
|
|
isFreeShipping: false, //是否免邮
|
|
isIphoneX: false,
|
|
coupon: 0,
|
|
emptyShow: false,
|
|
isList: true, //列表样式
|
|
//分享建立上下级所需id
|
|
memberId: 0,
|
|
//分享所需标题
|
|
share_title: '',
|
|
//搜索到多少件商品
|
|
count: 0,
|
|
//当前分类名称
|
|
category_title: '',
|
|
//优惠券数据
|
|
coupon_name: '',
|
|
//列表瀑布流数据
|
|
listHeight: [],
|
|
listPosition: [],
|
|
debounce: null,
|
|
brandId: 0,
|
|
brandList: [], //品牌筛选项
|
|
}
|
|
},
|
|
|
|
onLoad(options) {
|
|
this.categoryId = options.category_id || 0;
|
|
this.keyword = options.keyword || '';
|
|
this.coupon = options.coupon || 0;
|
|
this.goods_id_arr = options.goods_id_arr || 0;
|
|
this.brandId = options.brand_id || 0;
|
|
|
|
this.loadCategoryList(this.categoryId);
|
|
this.getBrandList();
|
|
this.isIphoneX = this.$util.uniappIsIPhoneX();
|
|
|
|
//首页
|
|
if (uni.getStorageSync('token')) {
|
|
this.$util.getMemberId().then(resolve => {
|
|
this.memberId = resolve;
|
|
});
|
|
}
|
|
//小程序分享接收source_member
|
|
if (options.source_member) {
|
|
uni.setStorageSync('source_member', options.source_member);
|
|
}
|
|
// 小程序扫码进入,接收source_member
|
|
if (options.scene) {
|
|
var sceneParams = decodeURIComponent(options.scene);
|
|
sceneParams = sceneParams.split('&');
|
|
if (sceneParams.length) {
|
|
sceneParams.forEach(item => {
|
|
if (item.indexOf('sku_id') != -1) this.skuId = item.split('-')[1];
|
|
if (item.indexOf('m') != -1) uni.setStorageSync('source_member', item.split('-')[1]);
|
|
if (item.indexOf('is_test') != -1) uni.setStorageSync('is_test', 1);
|
|
});
|
|
}
|
|
}
|
|
|
|
uni.onWindowResize(res => {
|
|
if (this.debounce) clearTimeout(this.debounce);
|
|
this.waterfallflow(0);
|
|
})
|
|
},
|
|
onShow() {
|
|
|
|
|
|
//记录分享关系
|
|
if (uni.getStorageSync('token') && uni.getStorageSync('source_member')) {
|
|
this.$util.onSourceMember(uni.getStorageSync('source_member'));
|
|
}
|
|
setTimeout(() => {
|
|
//this.handle_share();
|
|
}, 2000)
|
|
},
|
|
/**
|
|
* 转发分享
|
|
*/
|
|
onShareAppMessage(res) {
|
|
var title = '搜索到' + this.count + '件“' + this.keyword + this.category_title + this.coupon_name + '”相关的优质商品';
|
|
let route = this.$util.getCurrentShareRoute(this.memberId);
|
|
var path = route.path;
|
|
return {
|
|
title: title,
|
|
path: path,
|
|
success: res => {},
|
|
fail: res => {}
|
|
};
|
|
},
|
|
// 分享到微信朋友圈
|
|
onShareTimeline() {
|
|
var title = '搜索到' + this.count + '件“' + this.keyword + this.category_title + this.coupon_name + '”相关的优质商品';
|
|
let route = this.$util.getCurrentShareRoute(this.memberId);
|
|
var query = route.query;
|
|
return {
|
|
title: title,
|
|
query: query,
|
|
imageUrl: ''
|
|
};
|
|
},
|
|
methods: {
|
|
/**
|
|
* 获取优惠券数据
|
|
*/
|
|
couponInfo(id) {
|
|
return new Promise(resolve => {
|
|
this.$api.sendRequest({
|
|
url: '/coupon/api/coupon/typeinfo',
|
|
data: {
|
|
coupon_type_id: id
|
|
},
|
|
success: res => {
|
|
if (res.code >= 0) {
|
|
resolve(res.data.coupon_name);
|
|
}
|
|
}
|
|
});
|
|
})
|
|
},
|
|
/**
|
|
* 获取分类名称
|
|
*/
|
|
share_select(data, id) {
|
|
return new Promise((resolve) => {
|
|
data.forEach((item) => {
|
|
if (item.category_id == id) {
|
|
resolve(item.category_name)
|
|
}
|
|
if (item.child_list && item.child_list.length > 0) {
|
|
item.child_list.forEach((v) => {
|
|
if (v.category_id == id) {
|
|
resolve(v.category_name)
|
|
}
|
|
if (v.child_list && v.child_list.length > 0) {
|
|
v.forEach((m) => {
|
|
if (m.category_id == id) {
|
|
resolve(m.category_name)
|
|
}
|
|
})
|
|
|
|
}
|
|
})
|
|
}
|
|
})
|
|
})
|
|
},
|
|
//加载分类
|
|
loadCategoryList(fid, sid) {
|
|
this.$api.sendRequest({
|
|
url: '/api/goodscategory/tree',
|
|
data: {},
|
|
success: res => {
|
|
if (res.data != null) {
|
|
this.categoryList = res.data
|
|
};
|
|
}
|
|
});
|
|
},
|
|
getGoodsList(mescroll) {
|
|
this.$api.sendRequest({
|
|
url: '/api/goodssku/page',
|
|
data: {
|
|
page: mescroll.num,
|
|
page_size: mescroll.size,
|
|
keyword: this.keyword,
|
|
category_id: this.categoryId,
|
|
brand_id: this.brandId,
|
|
min_price: this.minPrice,
|
|
max_price: this.maxPrice,
|
|
is_free_shipping: (this.isFreeShipping ? 1 : 0),
|
|
order: this.order,
|
|
sort: this.sort,
|
|
coupon: this.coupon,
|
|
goods_id_arr: this.goods_id_arr
|
|
},
|
|
success: res => {
|
|
let newArr = []
|
|
let msg = res.message;
|
|
if (res.code == 0 && res.data) {
|
|
this.count = res.data.count;
|
|
if (res.data.page_count == 0) {
|
|
this.emptyShow = true
|
|
}
|
|
newArr = res.data.list;
|
|
} else {
|
|
this.$util.showToast({
|
|
title: msg
|
|
})
|
|
}
|
|
this.category_title = '';
|
|
this.coupon_name = '';
|
|
if (this.categoryId) {
|
|
this.share_select(this.categoryList, this.categoryId).then(resolve => {
|
|
this.category_title = resolve
|
|
});
|
|
}
|
|
if (this.coupon) {
|
|
this.couponInfo(this.coupon).then(resolve => {
|
|
this.coupon_name = resolve
|
|
});;
|
|
}
|
|
mescroll.endSuccess(newArr.length);
|
|
//设置列表数据
|
|
if (mescroll.num == 1) this.goodsList = []; //如果是第一页需手动制空列表
|
|
this.goodsList = this.goodsList.concat(newArr); //追加新数据
|
|
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
|
|
|
|
this.waterfallflow((mescroll.num - 1) * 10);
|
|
},
|
|
fail: res => {
|
|
//联网失败的回调
|
|
mescroll.endErr();
|
|
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
|
|
}
|
|
});
|
|
},
|
|
changeListStyle() {
|
|
this.isList = !this.isList;
|
|
this.waterfallflow(0);
|
|
},
|
|
//筛选点击
|
|
sortTabClick(tag) {
|
|
if (tag == 'sale_num') {
|
|
this.order = 'sale_num';
|
|
this.sort = 'desc';
|
|
} else if (tag == 'discount_price') {
|
|
this.order = 'discount_price';
|
|
this.sort = 'desc';
|
|
} else if (tag == 'screen') {
|
|
//筛选
|
|
this.showScreen = true;
|
|
return;
|
|
} else {
|
|
this.order = '';
|
|
this.sort = '';
|
|
}
|
|
|
|
if (this.orderType === tag && tag !== 'discount_price') return;
|
|
|
|
this.orderType = tag;
|
|
if (tag === 'discount_price') {
|
|
this.priceOrder = this.priceOrder === 'asc' ? 'desc' : 'asc';
|
|
this.sort = this.priceOrder;
|
|
} else {
|
|
this.priceOrder = '';
|
|
}
|
|
this.emptyShow = false;
|
|
this.goodsList = [];
|
|
this.$refs.mescroll.refresh();
|
|
},
|
|
//商品详情
|
|
toDetail(item) {
|
|
this.$util.redirectTo('/page_goods/detail/detail', {
|
|
goods_id: item.goods_id
|
|
});
|
|
},
|
|
search() {
|
|
this.emptyShow = false;
|
|
this.goodsList = [];
|
|
this.$refs.mescroll.refresh();
|
|
},
|
|
selectedCategory(categoryId) {
|
|
this.categoryId = categoryId;
|
|
},
|
|
screenData() {
|
|
if (this.minPrice != '' || this.maxPrice != '') {
|
|
// if (!Number(this.minPrice) && this.minPrice) {
|
|
// this.$util.showToast({
|
|
// title: '请输入最低价'
|
|
// });
|
|
// return;
|
|
// }
|
|
if (!Number(this.maxPrice) && this.maxPrice) {
|
|
this.$util.showToast({
|
|
title: '请输入最高价'
|
|
});
|
|
return;
|
|
}
|
|
if (Number(this.minPrice) < 0 || Number(this.maxPrice) < 0) {
|
|
this.$util.showToast({
|
|
title: '筛选价格不能小于0'
|
|
});
|
|
return;
|
|
}
|
|
if (this.minPrice != '' && Number(this.minPrice) > Number(this.maxPrice) && this.maxPrice) {
|
|
|
|
this.$util.showToast({
|
|
title: '最低价不能大于最高价'
|
|
});
|
|
return;
|
|
}
|
|
if (this.maxPrice != '' && Number(this.maxPrice) < Number(this.minPrice)) {
|
|
this.$util.showToast({
|
|
title: '最高价不能小于最低价'
|
|
});
|
|
return;
|
|
}
|
|
}
|
|
this.emptyShow = false;
|
|
this.goodsList = [];
|
|
this.$refs.mescroll.refresh();
|
|
this.showScreen = false;
|
|
},
|
|
//重置数据
|
|
resetData() {
|
|
this.categoryId = 0
|
|
this.minPrice = ''
|
|
this.maxPrice = ''
|
|
this.isFreeShipping = false
|
|
},
|
|
goodsImg(imgStr) {
|
|
let imgs = imgStr.split(',');
|
|
return imgs[0] ? this.$util.img(imgs[0], {
|
|
size: 'mid'
|
|
}) : this.$util.getDefaultImage().goods;
|
|
},
|
|
imgError(index) {
|
|
this.goodsList[index].goods_image = this.$util.getDefaultImage().goods;
|
|
},
|
|
showPrice(data) {
|
|
let price = data.discount_price;
|
|
if (data.member_price && parseFloat(data.member_price) < parseFloat(price)) price = data.member_price;
|
|
return price;
|
|
},
|
|
goodsTag(data) {
|
|
return data.label_name || '';
|
|
},
|
|
/**
|
|
* 瀑布流
|
|
*/
|
|
waterfallflow(start = 0) {
|
|
if (!this.isList) {
|
|
//页面渲染完成后的事件
|
|
this.$nextTick(() => {
|
|
setTimeout(() => {
|
|
let listHeight = [];
|
|
let listPosition = [];
|
|
if (start != 0) {
|
|
listHeight = this.listHeight;
|
|
listPosition = this.listPosition;
|
|
}
|
|
let column = 2;
|
|
const query = uni.createSelectorQuery().in(this);
|
|
query.selectAll('.double-column .goods-item').boundingClientRect(data => {
|
|
for (let i = start; i < data.length; i++) {
|
|
if (i < column) {
|
|
let position = {};
|
|
position.top = uni.upx2px(20) + 'px';
|
|
if (i % column == 0) {
|
|
position.left = data[i].width * i + "px";
|
|
} else {
|
|
position.left = data[i].width * i + (i % column * uni
|
|
.upx2px(30)) + "px";
|
|
}
|
|
listPosition[i] = position;
|
|
listHeight[i] = data[i].height + uni.upx2px(20);
|
|
} else {
|
|
let minHeight = Math.min(...listHeight); // 找到第一列的最小高度
|
|
let minIndex = listHeight.findIndex(item => item ===
|
|
minHeight) // 找到最小高度的索引
|
|
//设置当前子元素项的位置
|
|
let position = {};
|
|
position.top = minHeight + uni.upx2px(20) + "px";
|
|
position.left = listPosition[minIndex].left;
|
|
listPosition[i] = position;
|
|
//重新定义数组最小项的高度 进行累加
|
|
listHeight[minIndex] += data[i].height + uni.upx2px(20);
|
|
}
|
|
}
|
|
this.listHeight = listHeight;
|
|
this.listPosition = listPosition;
|
|
}).exec();
|
|
}, 50)
|
|
})
|
|
}
|
|
},
|
|
getBrandList() {
|
|
var data = {
|
|
page: 1,
|
|
page_size: 0
|
|
};
|
|
this.$api.sendRequest({
|
|
url: '/api/goodsbrand/page',
|
|
data: data,
|
|
success: res => {
|
|
if (res.code == 0 && res.data) {
|
|
let data = res.data;
|
|
this.brandList = data.list;
|
|
}
|
|
}
|
|
});
|
|
},
|
|
},
|
|
watch: {
|
|
|
|
}
|
|
}
|
|
|