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.
402 lines
13 KiB
402 lines
13 KiB
let sBoxID = ''
|
|
let sSortmark = ''
|
|
let page = 0
|
|
let pageSize = 36
|
|
let hasNextPage = true
|
|
let searchKeyWord = '' // 搜索keyword
|
|
let isSearch = false
|
|
|
|
// 默认初始化会有限制选择图书借阅的数量的值
|
|
// public string getReader()
|
|
// 读者信息 {"Barcode":"700008","Name":"测试卡","nMaxNum":2}
|
|
let lendNum = 0
|
|
|
|
setInterval(function() {
|
|
$('.lending-btn img').css('animation-duration', '1s').addClass('animate__animated animate__tada');
|
|
setTimeout(function() {
|
|
$('.lending-btn img').removeClass('animate__animated animate__tada');
|
|
}, 1000);
|
|
}, 5000);
|
|
|
|
getBaseInfoReader()
|
|
function getBaseInfoReader(){
|
|
let readerJson = JSON.parse(boundObject.getReader())
|
|
console.log('readerJson',readerJson)
|
|
console.log('readerJson-Barcode',readerJson.Barcode)
|
|
console.log('readerJson-Name',readerJson.Name)
|
|
console.log('readerJson-nMaxNum',readerJson.nMaxNum)
|
|
lendNum = readerJson.nMaxNum
|
|
}
|
|
|
|
// 假设书籍数据
|
|
let books = [];
|
|
|
|
// 动态生成左侧分类的项
|
|
createHtmlLeftNav();
|
|
function createHtmlLeftNav() {
|
|
let LeftLocaltionJSON = boundObject.getBoxs('1')
|
|
let locations = JSON.parse(LeftLocaltionJSON)
|
|
console.log('LeftLocaltionJSON',LeftLocaltionJSON)
|
|
|
|
let LeftCategoriesJSON = boundObject.getSortmarks('2')
|
|
let categories = JSON.parse(LeftCategoriesJSON)
|
|
console.log('LeftCategoriesJSON',LeftCategoriesJSON)
|
|
|
|
// 图书位置
|
|
let locationsHtml = '<div class="left-item"><h4>图书位置</h4><ul class="left-filter filter-location">';
|
|
locations.forEach((location, index) => {
|
|
let activeClass = index === 0 ? 'class="active"' : '';
|
|
locationsHtml += `<li ${activeClass} data-id=${location.BoxID}>${location.BoxName}</li>`;
|
|
});
|
|
locationsHtml += '</ul></div>';
|
|
|
|
// 图书分类
|
|
let categoriesHtml = '<div class="left-item"><h4>图书分类</h4><ul class="left-filter filter-sort">';
|
|
categories.forEach(category => {
|
|
categoriesHtml += `<li data-id=${category.SortIndex}>${category.SortName}</li>`;
|
|
});
|
|
categoriesHtml += '</ul></div>';
|
|
|
|
document.getElementById('lib-book-left').innerHTML = `${locationsHtml}${categoriesHtml}`
|
|
}
|
|
|
|
// 为图书位置和分类的每个li元素添加点击事件
|
|
document.querySelectorAll('.left-filter li').forEach(item => {
|
|
item.addEventListener('click', function(event) {
|
|
document.querySelectorAll('.left-filter li').forEach(li => {
|
|
li.classList.remove('active');
|
|
});
|
|
const clickedLi = event.target;
|
|
const dataId = clickedLi.getAttribute('data-id');
|
|
|
|
// 判断点击的是图书位置还是分类,并分别处理
|
|
if (clickedLi.closest('.filter-location')) {
|
|
if(dataId === '*'){
|
|
sBoxID = '';
|
|
}else{
|
|
sBoxID = dataId;
|
|
}
|
|
sSortmark = ''
|
|
} else if (clickedLi.closest('.filter-sort')) {
|
|
sSortmark = dataId;
|
|
sBoxID = ''
|
|
}
|
|
this.classList.add('active');
|
|
|
|
page = 0
|
|
hasNextPage = true
|
|
document.querySelector('input[name="keyword"]').value = ''
|
|
searchKeyWord = ''
|
|
isSearch = false
|
|
|
|
document.querySelector('.rack-content').scrollTop = 0
|
|
document.querySelector('.rack-content').innerHTML = ''
|
|
createInitRackBooklist();
|
|
});
|
|
});
|
|
|
|
let scrollTimeout = null;
|
|
|
|
function debouncedOnScroll() {
|
|
if (scrollTimeout !== null) {
|
|
clearTimeout(scrollTimeout);
|
|
}
|
|
scrollTimeout = setTimeout(onScroll, 200); // 延迟1秒执行onScroll
|
|
}
|
|
|
|
// 滚动事件处理函数
|
|
function onScroll() {
|
|
const element = document.querySelector('.rack-content')
|
|
if (element.scrollTop + element.offsetHeight > element.scrollHeight - 100) {
|
|
FetchRightBookList();
|
|
}
|
|
}
|
|
document.querySelector('.rack-content').addEventListener('scroll', debouncedOnScroll);
|
|
|
|
// 使用事件委托为所有list-item图书添加点击事件
|
|
function addClickEventToItems() {
|
|
const rackContent = document.querySelector('.rack-content');
|
|
rackContent.addEventListener('click', function(event) {
|
|
const listItem = event.target.closest('.list-item');
|
|
if (listItem) {
|
|
listItem.classList.toggle('active');
|
|
}
|
|
});
|
|
}
|
|
window.addEventListener('DOMContentLoaded', () => {
|
|
addClickEventToItems();
|
|
});
|
|
|
|
function FetchRightBookList(){
|
|
if (!hasNextPage) return; // 如果没有下一页,停止加载
|
|
if (isSearch) {
|
|
page = 0
|
|
sBoxID = ''
|
|
sSortmark = ''
|
|
document.querySelector('.rack-content').innerHTML = ''
|
|
}
|
|
page += 1;
|
|
const params = {
|
|
'sName': searchKeyWord,
|
|
'sBoxID': sBoxID,
|
|
'sSortmark': sSortmark,
|
|
'nPageIndex': page,
|
|
'nPageMaxNum': pageSize
|
|
}
|
|
// js传参给 c#端
|
|
console.log('params',params)
|
|
console.log('sName',searchKeyWord)
|
|
console.log('sBoxID',sBoxID)
|
|
console.log('sSortmark',sSortmark)
|
|
console.log('nPageIndex',page)
|
|
console.log('nPageMaxNum',pageSize)
|
|
|
|
// ----- ----- ----- js调用c#的函数
|
|
let booksRightJson = boundObject.getBooks(searchKeyWord,sBoxID,sSortmark,page,pageSize)
|
|
var correctedJsonStr = booksRightJson.replace(/"status":\s*"0",\s*/, '');
|
|
// 去除字符串的头尾空白
|
|
correctedJsonStr = correctedJsonStr.trim();
|
|
// 去掉字符串的头花括号
|
|
correctedJsonStr = correctedJsonStr.substring(1);
|
|
books = JSON.parse(correctedJsonStr).data
|
|
|
|
const totalPages = JSON.parse(correctedJsonStr).totalPages
|
|
console.log('totalPages',totalPages)
|
|
if (books.length > 0) {
|
|
// books = books.concat(books);
|
|
appendBooksToRackContent(books);
|
|
} else {
|
|
hasNextPage = false; // 更新是否有下一页
|
|
}
|
|
if(page > totalPages){
|
|
hasNextPage = false
|
|
}
|
|
}
|
|
|
|
function appendBooksToRackContent(books) {
|
|
console.log('appendBooks',books.length)
|
|
const groupSize = 12;
|
|
const rackContent = document.querySelector('.rack-content');
|
|
let lastRackBoxList = rackContent.querySelector('.rack-box-list:last-child');
|
|
let lastGroupBooksCount = lastRackBoxList ? lastRackBoxList.querySelectorAll('.list-item').length : 0;
|
|
|
|
let currentBooksCount = 0; // 当前正在处理的书籍数量
|
|
|
|
// 循环遍历所有书籍,将它们添加到正确的容器中
|
|
books.forEach((book) => {
|
|
// 如果最后一个容器不存在或者书籍数量已经达到groupSize,创建一个新的rack-box-list
|
|
if (!lastRackBoxList || lastGroupBooksCount >= groupSize) {
|
|
lastRackBoxList = document.createElement('div');
|
|
lastRackBoxList.className = 'rack-box-list';
|
|
rackContent.appendChild(lastRackBoxList);
|
|
lastGroupBooksCount = 0; // 重置计数器
|
|
}
|
|
|
|
// 追加书籍到这个rack-box-list中
|
|
const authorSpan = (book.Author !== '' && book.Author !== 'NULL') ? `<span class="book-writer">作者:${book.Author}</span>` : '' ;
|
|
const bookElement = `
|
|
<div class="list-item" data-id="${book.Barcode}">
|
|
<div class="box-txt">
|
|
<span class="book-name">${book.Name}</span>
|
|
${authorSpan}
|
|
</div>
|
|
</div>
|
|
`;
|
|
lastRackBoxList.innerHTML += bookElement;
|
|
lastGroupBooksCount++;
|
|
currentBooksCount++;
|
|
|
|
if (currentBooksCount >= groupSize) {
|
|
return;
|
|
}
|
|
});
|
|
}
|
|
|
|
// 初始化无图书封面的图书列表
|
|
createInitRackBooklist();
|
|
function createInitRackBooklist() {
|
|
if (isSearch) {
|
|
page = 0
|
|
sBoxID = ''
|
|
sSortmark = ''
|
|
document.querySelector('.rack-content').innerHTML = ''
|
|
}
|
|
const params = {
|
|
'sName': searchKeyWord,
|
|
'sBoxID': sBoxID,
|
|
'sSortmark': sSortmark,
|
|
'nPageIndex': page,
|
|
'nPageMaxNum': pageSize
|
|
}
|
|
// js传参给 c#端
|
|
console.log('初始化params',params)
|
|
console.log('初始化sName',searchKeyWord)
|
|
console.log('初始化sBoxID',sBoxID)
|
|
console.log('初始化sSortmark',sSortmark)
|
|
console.log('初始化nPageIndex',page)
|
|
console.log('初始化nPageMaxNum',pageSize)
|
|
|
|
// ----- ----- ----- js调用c#的函数
|
|
let booksRightJson = boundObject.getBooks(searchKeyWord,sBoxID,sSortmark,page,pageSize)
|
|
var correctedJsonStr = booksRightJson.replace(/"status":\s*"0",\s*/, '');
|
|
// 去除字符串的头尾空白
|
|
correctedJsonStr = correctedJsonStr.trim();
|
|
// 去掉字符串的头花括号
|
|
correctedJsonStr = correctedJsonStr.substring(1);
|
|
books = JSON.parse(correctedJsonStr).data
|
|
console.log('初始化Books',books.length)
|
|
|
|
if(books.length === 0){
|
|
document.querySelector(".lib-search-result span").innerHTML = 0
|
|
bookListHtml = `
|
|
<div class="empty-book-list">
|
|
<img src="images/empty.png" alt="" />
|
|
<span>暂无相关数据</span>
|
|
</div>
|
|
`;
|
|
document.querySelector('.rack-content').innerHTML = bookListHtml;
|
|
if (bookList) {
|
|
bookList.remove()
|
|
}
|
|
}else{
|
|
const groupSize = 12;
|
|
let html = '';
|
|
for (let i = 0; i < books.length; i += groupSize) {
|
|
html += '<div class="rack-box-list">';
|
|
for (let j = i; j < i + groupSize && j < books.length; j++) {
|
|
const authorSpan = (books[j].Author !== '' && books[j].Author !== 'NULL') ? `<span class="book-writer">作者:${books[j].Author}</span>` : '';
|
|
html += `
|
|
<div class="list-item" data-id="${books[j].Barcode}">
|
|
<div class="box-txt">
|
|
<span class="book-name">${books[j].Name}</span>
|
|
${authorSpan}
|
|
</div>
|
|
</div>
|
|
`;
|
|
}
|
|
html += '</div>';
|
|
}
|
|
document.querySelector('.rack-content').innerHTML += html
|
|
}
|
|
|
|
if(isSearch){
|
|
document.querySelector(".lib-search-result").style.display = 'block'
|
|
document.querySelector(".lib-search-result span").innerHTML = books.length
|
|
}else{
|
|
document.querySelector(".lib-search-result").style.display = 'none'
|
|
document.querySelector(".lib-search-result span").innerHTML = 0
|
|
}
|
|
}
|
|
|
|
// 创建借阅书籍弹框
|
|
function createlendDialog(books) {
|
|
// 借阅书籍列表
|
|
const listItems = books.map(function(book,index) {
|
|
return `
|
|
<li class="lib-lending-item">
|
|
<span class="lending-num">${index+1}</span>
|
|
<span class="lending-author">${book.barcode}</span>
|
|
<h4>${book.title}</h4>
|
|
</li>
|
|
`;
|
|
}).join('');
|
|
|
|
// 弹框的HTML字符串
|
|
const dialogHTML = `
|
|
<div class="lib-dialog" id="lib-dialog">
|
|
<div class="lib-dialog-mask"></div>
|
|
<div class="lib-dialog-main">
|
|
<div class="lib-dialog-header">
|
|
<div class="lib-dialog-title">图书借阅</div>
|
|
</div>
|
|
<ul class="lib-lending-list">
|
|
${listItems}
|
|
</ul>
|
|
<div class="lib-dialog-bottom">
|
|
<span class="cancel-btn">取消</span>
|
|
<span class="confirm-btn">确定</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
`;
|
|
|
|
// 将弹框添加到body
|
|
document.body.insertAdjacentHTML('beforeend', dialogHTML);
|
|
|
|
// 获取弹框元素
|
|
const dialog = document.getElementById('lib-dialog');
|
|
const cancelButton = dialog.querySelector('.cancel-btn');
|
|
const confirmButton = dialog.querySelector('.confirm-btn');
|
|
|
|
// 取消
|
|
cancelButton.addEventListener('click', function() {
|
|
removeSelected(dialog)
|
|
});
|
|
// 确定
|
|
confirmButton.addEventListener('click', function() {
|
|
// ----- ----- ----- js调用c#的函数 假设需要借阅得书籍id集
|
|
// public string beginLendBooks(string sData)
|
|
const bookBarcodes = books.map(function(book) {
|
|
return book.barcode
|
|
})
|
|
console.log('bookBarcodes',bookBarcodes)
|
|
const params = bookBarcodes.join(',')
|
|
let lendBookComfirmed = boundObject.beginLendBooks(params)
|
|
if(lendBookComfirmed){
|
|
removeSelected(dialog)
|
|
}
|
|
});
|
|
}
|
|
|
|
function removeSelected(dialog){
|
|
const bookListItems = document.querySelectorAll('.list-item');
|
|
bookListItems.forEach(function(item) {
|
|
item.classList.remove('active');
|
|
});
|
|
dialog.remove()
|
|
}
|
|
|
|
// 图书借阅弹框 show
|
|
document.querySelector(".lending-btn").addEventListener("click", function() {
|
|
const selectedBooks = [];
|
|
document.querySelectorAll('.list-item.active').forEach(activeLi => {
|
|
const bookData = {
|
|
barcode: activeLi.getAttribute('data-id'),
|
|
title: activeLi.querySelector('.book-name').textContent
|
|
};
|
|
selectedBooks.push(bookData);
|
|
});
|
|
|
|
// author: activeLi.querySelector('.book-writer') ? activeLi.querySelector('.book-writer').textContent : ''
|
|
|
|
if(selectedBooks.length === 0){
|
|
layer.alert('请先选择需要借阅的图书!');
|
|
return false
|
|
}else if(selectedBooks.length > lendNum){
|
|
layer.alert('最多只可借阅'+lendNum+'本图书!');
|
|
return false
|
|
}{
|
|
createlendDialog(selectedBooks);
|
|
}
|
|
});
|
|
|
|
// 搜索按钮点击搜索
|
|
document.querySelector(".search-btn").addEventListener("click", function() {
|
|
isSearch = true
|
|
searchKeyWord = document.querySelector('input[name="keyword"]').value
|
|
if(searchKeyWord === ''){
|
|
layer.alert('请输入关键词进行搜索!');
|
|
return false
|
|
}
|
|
hasNextPage = true
|
|
// document.querySelector('.rack-content').scrollTop = 0
|
|
// document.querySelector('.rack-content').innerHTML = ''
|
|
let bookNoData= document.querySelector('.rack-content').querySelector('.book-noData');
|
|
if(bookNoData){
|
|
bookNoData.remove()
|
|
}
|
|
document.querySelectorAll('.left-filter li').forEach(item => {
|
|
item.classList.remove('active');
|
|
});
|
|
createInitRackBooklist()
|
|
});
|