orzar/assets/js/newcar.js
2025-06-09 11:00:46 +08:00

187 lines
5.0 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

$(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) {
window.location.href = 'newcar-details.html?id=' + item.id
},
},
})
})