orzar/assets/js/newcar.js

187 lines
5.0 KiB
JavaScript
Raw Normal View History

2025-06-05 14:46:21 +08:00
$(function() {
// 搜索模块展开收起
const filterToggle = document.querySelector('.filter-toggle');
const filterWrapper = document.querySelector('.filter-wrapper');
if (filterToggle && filterWrapper) {
filterToggle.addEventListener('click', function() {
filterWrapper.classList.toggle('expanded');
});
}
var vm = new Vue({
el: '#app',
data: {
currentPage: 1, // 当前页码
pageSize: 12, // 每页条数
totalItems: 0, // 总数据量(后端分页用)
dataList: [],
brandListAll:[],
selectedLetter: 'hot',
selectedBrand: '',
selectedenergy:'',
letters: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
],
energyList:[],
is_hot:'',
isnone:false,
isFilterOpen: false, // 控制筛选面板的开关状态
},
computed: {
// 当前页数据(前端分页)
currentPageData() {
const start = (this.currentPage - 1) * this.pageSize;
return this.allData.slice(start, start + this.pageSize);
},
// 总页数
totalPages() {
return Math.ceil(this.totalItems / this.pageSize);
},
// 动态页码范围
visiblePages() {
const maxVisible = 5;
let start = Math.max(1, this.currentPage - 2);
let end = Math.min(start + maxVisible - 1, this.totalPages);
return Array.from({
length: end - start + 1
}, (_, i) => start + i);
}
},
watch: {
currentPage() {
this.fetchData(); // 后端分页时触发数据更新
},
isFilterOpen(newVal) {
// 当筛选面板状态改变时控制body滚动
document.body.style.overflow = newVal ? 'hidden' : '';
}
},
created: function() {
this.getbrand('',1)
this.getenergy()
this.fetchData()
},
mounted() {
// 创建遮罩层
const overlay = document.createElement('div');
overlay.className = 'filter-overlay';
document.body.appendChild(overlay);
// 点击遮罩层关闭
overlay.addEventListener('click', () => {
this.isFilterOpen = false;
});
// 点击其他区域关闭筛选面板
document.addEventListener('click', (e) => {
const filterContainer = document.querySelector('.filter-container');
const filterBtn = document.querySelector('.filter-btn');
// 如果点击的不是筛选面板内部元素,也不是筛选按钮,则关闭面板
if (this.isFilterOpen &&
!filterContainer.contains(e.target) &&
!filterBtn.contains(e.target)) {
this.isFilterOpen = false;
}
});
},
methods: {
toggleFilter() {
this.isFilterOpen = !this.isFilterOpen;
},
getbrand(letter,is_hot){
var that = this
AjaxUtils.get('apis/brand/letterAll', {
letter:letter,
is_hot:is_hot,
}).done(function(data) {
that.brandListAll= data.data
}).fail(function(error) {
// console.error(error);
});
},
getenergy(){
var that = this
AjaxUtils.get('apis/energy/preset', {}).done(function(data) {
that.energyList= data.data
}).fail(function(error) {
// console.error(error);
});
},
fetchData() {
var that = this
AjaxUtils.get('apis/vehicle/new/list', {
page: this.currentPage,
per_page: this.pageSize,
brand:this.selectedBrand,
energy:this.selectedenergy
}).done(function(data) {
that.dataList = data.data.list
that.allData = data.data.list; // 前端分页时存储所有数据
that.totalItems = data.data.meta.total; // 后端分页时更新总数
if(that.dataList.length>0){
that.isnone = false
}else{
that.isnone = true
}
}).fail(function(error) {
// console.error(error);
});
},
filterByLetter(letter) {
this.selectedLetter = letter;
if (this.selectedLetter === 'all') {
this.getbrand('','')
} else if (this.selectedLetter === 'hot') {
this.getbrand('',1)
} else {
this.getbrand(letter,'')
}
},
selectBrand(brand) {
if(this.selectedBrand==brand){
this.selectedBrand = '';
}else{
this.selectedBrand = brand;
}
// window.location.href = 'brand.html?id=' + brand
// 这里可以添加点击后的逻辑,比如跳转到品牌页面
// console.log('选中品牌:', brand);
this.fetchData()
},
selectenergy(item) {
if(item=='all'){
this.selectedenergy =''
}else{
this.selectedenergy = item.id
}
// window.location.href = 'brand.html?id=' + brand
// 这里可以添加点击后的逻辑,比如跳转到品牌页面
// console.log('选中:', item);
this.fetchData()
},
prevPage() {
if (this.currentPage > 1) this.currentPage--;
$('html, body').animate({
scrollTop: $('.navs').offset().top - 0
}, 0);
},
nextPage() {
if (this.currentPage < this.totalPages) {
this.currentPage++
};
$('html, body').animate({
scrollTop: $('.navs').offset().top - 0
}, 0);
},
gotoPage(page) {
this.currentPage = page;
},
godetil(item) {
2025-06-09 11:00:46 +08:00
window.location.href = 'newcar-details.html?id=' + item.id
2025-06-05 14:46:21 +08:00
},
},
})
})