Hãy điền thông tin người mượn để thực mượn sách
{msg && ({msg}
)}MSSV:Ngày mượn: setBorrowDate(e.target.value)}/>Họ tên:Ngày trả: setReturnDate(e.target.value)}/>Mã sáchTên sáchTác giảVị trí{books.map((book, index) => ({book.MaSach}{book.TenSach}{book.TacGia}{book.Vitri}))}HOÀN TẤT);};export default Borrow; 3.2.3 Trả sách Hình Giao diện phần Trả sách (Nguồn: Tác giả) Mô tả: Để trả sách, thủ thư cần nhập MSSV sinh viên mượn sách Nếu nhập MSSV, hệ thống hiển thị sách mà sinh viên mượn Hình Giao diện thị sách mà sinh viện mượn (Nguồn: Tác giả) Nếu muốn trả sách thủ thư cần chọn vào sách xác nhận trả sách 81 Hình Giao diện chọn sách để trả (Nguồn: Tác giả) Câu lệnh: import React, { useEffect, useState } from "react";import BorrowImage from" /assets/borrow.jpg";import {getBorrowingTicketByReaderId, returnBookByTicketId, } from " /api/user"; import moment from "moment";import { Modal, notification } from "antd";const Search = () => {const [searchText, setSearchText] = useState("");const [tickets,setTickets] = useState([]); const [msg, setMsg] = useState("");const [selectedTickets, setSelectedTickets] = useState([]);const [isModalOpen, setIsModalOpen] = useState(false); const onChange = (e) => {setSearchText(e.target.value);};const search = async () => {setMsg("");const res = await getBorrowingTicketByReaderId(searchText);if (!res.data.data || res.data.data.length === 0) {setMsg("Khơng tìm thấy phiếu mượn nào.");} else setTickets(res.data.data);}; const onCheck = (e) => {const bookId = JSON.parse(e.target.value);if (e.target.checked) {setSelectedTickets([ selectedTickets, bookId]);} else {setSelectedTickets(selectedTickets.filter((book) => book.ID !== bookId.ID));}}; const returnBook = async () => {const promises = selectedTickets.map((ticket) =>returnBookByTicketId({ticketId: ticket.MaPhieuMuon, bookId: ticket.IDSach,readerId: ticket.MaDocGia,returnDate: ticket.NgayTra,}));const result = await Promise.all(promises);setIsModalOpen(false);let success = true;result.map((r) => {if (!r || r.data.data) success = false;});if (success) {notification.success({message: "Thành công",description: "Trả sách thành công",});setSelectedTickets([]);await search();} else {notification.error({message: "Thất bại",description: "Trả sách thất bại!",});}};return (TRẢ SÁCHTìm kiếm{msg && ({msg}
)}{tickets.length > && (Mã phiếuMSSVNgười mượnTên sáchNgày mượnNgày trảTrạng thái{tickets.map((ticket, index) => ({ticket.TrangThai === && (ticket2.MaPhieuMuon ===ticket.MaPhieuMuon)}/>)}{ticket.MaPhieuMuon}
{tic ket.MaDocGia}
{ticket.TenDocGia}
{ticket.TenSach}
{moment(ticket.NgayMuon).format("DD/MM/YYYY")}
{moment(ticket.NgayTra).format("DD/MM/YYYY")}
{ticket.TrangTh === ? "Đang mượn" : "Đã trả"}
))})}{selectedTickets.length > && (DANH SÁCH SÁCH TRẢ- {selectedTickets.map((book) => (
- {book.TenSach} ))}
{book.TenSach}
))} );}; export default Search; 3.2.4 Quản lý sách Quản lý sách nơi mà thủ thư tìm kiếm sách cách nâng cao - tìm kiếm khơng tên sách mà cịn vị trí, tác giả, Tại thủ thư cịn nhập sách Vậy phần Quản lý sách tích hợp chức năng: Tra cứu thông tin sách, Nhập sách Mô tả: Sau click vào button Quản Lý Sách từ Trang chủ, thủ thư đến với giao diện Quản Lý sách với tính năng: Tra cứu thơng tin sách Nhập sách 83 Hình 10 Giao diện Tra cứu thông tin sách (Nguồn: Tác giả) Câu lệnh: import React, { useEffect, useState } from "react"; import BorrowImage from " /assets/borrow.jpg"; import { getBooks } from " /api/user";const Search = () => { const [searchText, setSearchText] = useState("");const [books, setBooks] = useState([]);const [msg, setMsg] = useState("");const [selectedBooks, setSelectedBooks] = useState([]);const onChange = (e) => {setSearchText(e.target.value);};const search = async () => {setMsg(""); const res = await getBooks(searchText); if (!res.data.data || res.data.data.length === 0) {setMsg("Khơng tìm thấy sách nào.");} else setBooks(res.data.data);};const onCheck = (e) => {const bookId = JSON.parse(e.target.value);if (e.target.checked) {setSelectedBooks([ selectedBooks, bookId]);} else {setSelectedBooks(selectedBooks.filter((book) => book.ID !== bookId.ID));}};useEffect(() => {localStorage.setItem("selected", JSON.stringify(selectedBooks));}, [selectedBooks]); return (TRA CỨU SÁCHTìm kiếm {msg && ({msg}
)}{books.length > && (Mã sáchTên sáchTác giảVị trí{books.map((book, index) => ( book2.ID === book.ID)}/>{book.MaSach}{book.TenSach}{book.TacGia}{book.Vitri}))})}{selectedBooks.length > && (DANH SÁCH SÁCH MƯỢN- {selectedBooks.map((book) => (
- {book.TenSach} {book.TacGia} ))}
Hãy điền thông tin sách để thêm sách
Mã sách: setMaSach(e.target.value)}/>Tên sách: setTenSach(e.target.value)}/> Tác giả: setTacGia(e.target.value)} />Mã tác giả: