-
data(){
-
return {
-
goodsList:[], // 商品列表
-
priceFilter:[ // 價格區間數組
-
{
-
startPrice:'0.00',
-
endPrice:'100.00'
-
},
-
{
-
startPrice:'100.00',
-
endPrice:'500.00'
-
},
-
{
-
startPrice:'500.00',
-
endPrice:'1000.00'
-
},
-
{
-
startPrice:'1000.00',
-
endPrice:'5000.00'
-
}
-
],
-
priceChecked:'all', // 選中的價格區間
-
filterBy:false, // 控制價格菜單的顯示
-
overLayFlag:false, // 遮罩的顯示
-
-
sortFlag:true, // 排序:默認升序
-
page:1, // 當前第一頁
-
pageSize:8, // 一頁有8條數據
-
-
busy:true, // 滾動加載插件默認禁用
-
-
loading:false, // 往下滾動"加載圖標"的出現效果
-
-
mdShow:false, // 未登錄的模態框是否顯示
-
mdShowCart:false // 已登錄的模態框是否顯示
-
}
-
},
-
components:{
-
NavHeader,
-
NavFooter,
-
NavBread,
-
Modal
-
},
-
mounted:function(){
-
this.getGoodsList();
-
},
-
methods:{
-
getGoodsList(flag){
-
var param = {
-
page:this.page,
-
pageSize:this.pageSize,
-
sort:this.sortFlag ? 1 : -1 , // sortFlag為true升序
-
priceLevel:this.priceChecked // 點擊的價格區間
-
}
-
this.loading = true;
-
axios.get("/goods/list",{
-
params:param // 傳參
-
}).then((res)=>{
-
var res = res.data;
-
this.loading = false;
-
if(res.status == "0"){
-
if(flag){ // true.商品數據累加
-
this.goodsList = this.goodsList.concat(res.result.list);
-
-
if(res.result.count == 0){ // 0條數據了,就不加載滾動加載方法了
-
this.busy = true; // 禁用
-
}else{
-
this.busy = false; // 啟用
-
}
-
-
}else{ // 只加載一頁
-
this.goodsList = res.result.list;
-
this.busy = false;
-
}
-
}else{
-
this.goodsList = [];
-
}
-
})
-
},
-
sortGoods(){ // 點擊排序商品
-
this.sortFlag = !this.sortFlag;
-
this.page = 1; // 點擊價格排序后從第一頁開始
-
this.getGoodsList(); // 重新加載數據
-
},
-
setPriceFilter(index){ // 點擊價格
-
this.priceChecked = index;
-
this.closePop();
-
this.getGoodsList();
-
},
-
showFilterPop(){ // 點擊filterBy出現價格菜單和遮罩
-
this.filterBy = true;
-
this.overLayFlag = true;
-
},
-
closePop(){ // 關閉價格菜單和遮罩
-
this.filterBy = false;
-
this.overLayFlag = false;
-
},
-
loadMore(){ // 滾動加載插件方法
-
this.busy = true; // 滾動就禁用,防止下一個滾動
-
setTimeout(() => { // 一個滾動完成之后再滾動加載下一個
-
this.page++;
-
this.getGoodsList(true); // 滾動加載是累加數據,並不是只顯示一頁數據,so需要傳參去請求數據的地方判斷一下
-
}, 500);
-
},
-
addCart(productId){ // 點擊加入購物車
-
axios.post("/goods/addCart",{ // 接口設置在server/routes/goods.js
-
productId:productId
-
}).then((res)=>{
-
var res = res.data;
-
if(res.status==0){
-
//alert("加入成功")
-
this.mdShowCart = true; // 加入購物車成功,成功的模態框顯示
-
-
// 購物車數量加1
-
this.$store.commit('updateCartCount',1);
-
}else{
-
// alert("msg:"+res.msg)
-
this.mdShow = true; // 未登錄模態框顯示
-
}
-
})
-
},
-
closeModal(){ // 關閉模態框
-
this.mdShow = false; // 未登錄模態框消失
-
this.mdShowCart = false; // 未登錄模態框消失
-
}
-
}
Node.js后端代碼
-
// 查詢商品列表數據
-
/* GET goods page. */
-
router.get('/list', function(req, res, next) {
-
// res.send('hello,goods list'); // 測試路由,連接成功頁面出現'hello,goods list'
-
-
// express獲取請求參數
-
let page = parseInt(req.param("page")); // get請求數據拿到數據:res.param()
-
let pageSize = parseInt(req.param("pageSize"));
-
let priceLevel = req.param("priceLevel"); // 傳過來的價格區間
-
let sort = req.param("sort");
-
let skip = (page-1)*pageSize; // 跳過的數據條數,(分頁的公式).
-
var priceGt = '',priceLte = '';
-
let params = {};
-
if(priceLevel != 'all'){ // 價格區間過濾功能
-
switch (priceLevel){
-
case '0':priceGt=0;priceLte =100;break;
-
case '1':priceGt=100;priceLte =500;break;
-
case '2':priceGt=500;priceLte =1000;break;
-
case '3':priceGt=1000;priceLte =5000;break;
-
}
-
params = {
-
salePrice:{
-
$gt:priceGt,
-
$lte:priceLte
-
}
-
}
-
}
-
let goodsModel = Goods.find(params).skip(skip).limit(pageSize); // 先查詢所有,skip(skip)跳過skip條數據,limit(pageSize)一頁多少條數據.即分頁功能實現
-
goodsModel.sort({'salePrice':sort}); // 對價格排序功能
-
-
goodsModel.exec(function(err, doc){
-
if(err) {
-
res.json({
-
status:'1',
-
msg:err.message
-
})
-
}else{
-
res.json({
-
status:'0',
-
msg:'',
-
result:{
-
count:doc.length,
-
list:doc
-
}
-
})
-
}
-
})
-
-
});
