var curPage = 1; //当前页
var pageSize = 20; //每页显示20条
var totalCount; //总条数
var total_page; //总页数
// 定义计算页码范围的函数
function calculatePageRange(n, totalCount) {
n = n || 5; // 默认展示当前页前后5页
var prePage = curPage - 1;
var leftm = Math.floor(prePage / n);
var left = leftm * n + 1;
var right = leftm * n + n > totalCount ? totalCount : leftm * n + n;
right = totalCount = 0 ? 1 : right;
var nextPage = curPage + 1;
return {
prePage,
left,
right,
nextPage
};
}
$('.sp1 a').attr('href', 'javascript:;')
$('.sp2 a').attr('href', 'javascript:;')
var Initials = '' //字母
var jobTitle = '' //职称检索
var team = '' //系所检索
getList()
// 点击 "职称检索"、"字母"、"系所检索"
$('.sp2').on('click', 'a', function () {
$(this).parent('.sp2').prev('.sp1').children('a').removeClass('on')
$(this).siblings('a').removeClass('on')
$(this).addClass('on')
if ($(this).parents('li').index() == 0) {
Initials = $(this).children('i').text().toUpperCase()
} else if ($(this).parents('li').index() == 1) {
jobTitle = $(this).text()
} else if ($(this).parents('li').index() == 2) {
team = $(this).text()
}
curPage = 1
getList()
})
// 点击 "全部"
$('.sp1 a').click(function () {
$(this).parent('.sp1').next('.sp2').find('a').removeClass('on')
$(this).addClass('on')
if ($(this).parents('li').index() == 0) {
Initials = ''
} else if ($(this).parents('li').index() == 1) {
jobTitle = ''
} else if ($(this).parents('li').index() == 2) {
team = ''
}
curPage = 1
getList()
})
function getList() {
$.ajax({
url: '../../common/jsjs.json',
success: function (data) {
var list = data.data;
var newArr = []
var InitialsArr = []
jobTitleArr = []
teamArr = []
list.map(function (item, index, arr) {
if (item.properties['字母检索'].toUpperCase().slice(0, 1) == Initials) {
InitialsArr.push(item)
}
})
list.map(function (item, index, arr) {
if (item.properties['职称检索'].includes(jobTitle) || jobTitle.split('/').indexOf(item.properties['职称检索']) != -1) {
jobTitleArr.push(item)
}
})
list.map(function (item, index, arr) {
if (item.properties['系所检索'].includes(team)) {
teamArr.push(item)
}
})
let arr2 = []
if (Initials != '') {
if (jobTitle != '') {
if (team != '') {
arr2 = [InitialsArr, jobTitleArr, teamArr]
newArr = qjj(arr2)
} else {
arr2 = [InitialsArr, jobTitleArr]
newArr = qjj(arr2)
}
} else {
if (team != '') {
arr2 = [InitialsArr, teamArr]
newArr = qjj(arr2)
} else {
arr2 = [InitialsArr]
newArr = qjj(arr2)
}
}
} else {
if (jobTitle != '') {
if (team != '') {
arr2 = [jobTitleArr, teamArr]
newArr = qjj(arr2)
} else {
arr2 = [jobTitleArr]
newArr = qjj(arr2)
}
} else {
if (team != '') {
arr2 = [teamArr]
newArr = qjj(arr2)
} else {
newArr = list
}
}
}
// 按姓名排序
let newArr2 = newArr.sort((a, b) => a.title.localeCompare(b.title, 'zh'));
// 分页开始
totalCount = newArr2.length //总条数
total_page = Math.ceil(totalCount / pageSize) //总页数
var html2 = '
' + curPage + '';
// console.log(total_page);
for (var p = 1; p <= total_page; p++) {
html2 += '- ' + p + '
'
}
html2 += '
'
var pagehtml = ''
// 生成页码部分的 HTML
function generatePageNumbers(curPage, totalPage) {
var { prePage, left, right, nextPage } = calculatePageRange(totalPage);
var pageNumbers = '';
for (var i = left; i <= right; i++) {
pageNumbers += `${i}`;
}
return pageNumbers;
}
// 生成通用的分页 HTML 结构
function generatePaginationHTML(totalCount, pageSize, curPage, totalPage, html2) {
curPage = parseInt(curPage);
var html = '';
html += '
共' + totalCount + '条';
html += '
每页' + pageSize + '条';
html += '
首页 ';
html += '
上一页 ';
html += '
';
html += '
';
html += generatePageNumbers(curPage, totalPage);
html += '
下一页 ';
html += '
末页 ';
html += '
跳转 ';
html += html2;
html += '页';
html += '
';
html += '
';
return html;
}
// 根据总页数生成对应的分页 HTML
pagehtml = generatePaginationHTML(totalCount, pageSize, curPage, total_page, html2);
$('.ser_b').html(pagehtml)
// 分页结束
if (newArr2.length) {
$('.gp-pagesOut').html(pagehtml)
} else {
$('.gp-pagesOut').html('')
}
getHtml(newArr2, curPage)
// 分页跳转
$('.gp-page1').on('click', 'a', function () {
if ($(this).parents('.selectDiv').length > 0) {
curPage = $(this).text()
getList()
} else {
if ($(this).hasClass('.gp-page-prev') && curPage == 1 || $(this).hasClass('.gp-page-start') && curPage == 1) {
return false
// getList()
} else if ($(this).hasClass('.gp-page-next') && curPage == total_page || $(this).hasClass('.gp-page-end') && curPage == total_page) {
return false
// getList()
} else {
$(this).siblings('a').removeClass('on_pages')
$(this).addClass('on_pages')
curPage = $(this).attr('page')
getList()
}
}
console.log(curPage)
})
$('.gp-page1').on('mouseenter', '.selectDiv', function () {
$('.selectDiv ul').addClass('on')
})
$('.gp-page1').on('mouseleave', '.selectDiv', function () {
$('.selectDiv ul').removeClass('on')
})
}
})
}
// 数据追加到页面
function getHtml(newArr, curPage) {
var newArr2 = []
newArr2 = newArr.slice((parseInt(curPage) - 1) * pageSize, curPage * pageSize)
var html = ''
$.each(newArr2, function (i, item) {
html += '' +
'' +
'' +
'

' +
'
' +
'' + item.title + '
' +
'' + item.viceTitle.trim() + '
' +
'' +
''
})
$('.gp-teacher5 ul').html(html)
}
// 取多个数组交集
// 1、设置一个变量minArr,表示所有数据里最小长度的数组
// 后面通过这个最小长度数组的数据和其他的数据比较取交集的数据
function qjj(arr) {
let minArr = [],
defaultArr = [];
arr.forEach(i => {
minArr = i;
if (i.length < minArr.length) {
minArr = i;
}
});
minArr.forEach(i => {
state = [];
// 2、这里因为要知道arr每个数组里是否包含的minArr当前循环的值i,
// 所有设置了一个状态的数组state=[],
// arr里的数组j如果包含i就往state里面push一个true,否则push一个false
arr.forEach(j => {
if (j.includes(i)) {
state.push(true);
} else state.push(false);
});
// 3、最后一步通过对state状态数组对比每一个值是不是都是true
// 来判断是否把这个i存进defaultArr交集的数组里
const status = state.every(i => {
return i === true;
});
// 只有arr所有的数组都包含这个值才存进defaultArr里
status && !defaultArr.includes(i) && defaultArr.push(i);
});
return defaultArr
}