11 图书借阅功能实现(Vue3+element plus +Spring Boot)

目录

  • [1 功能描述](#1 功能描述)
  • [2 接口地址](#2 接口地址)
  • [3 后端代码](#3 后端代码)
  • [4 api/book.js中编写借阅图书的接口代码](#4 api/book.js中编写借阅图书的接口代码)
  • [5 BookResourcesVue.vue组件中完成点击事件borrowBook](#5 BookResourcesVue.vue组件中完成点击事件borrowBook)
  • [6 功能演示](#6 功能演示)

1 功能描述

普通用户借阅图书,点击借阅按钮,修改图书状态,最多能够借阅3本图书。

2 接口地址

图书借阅

GET http://localhost:8082/book/borrowBook

3 后端代码

java 复制代码
 //用户借阅图书功能
    @GetMapping("/borrowBook")
    public Result userBorrowBook(String bookId){
       User user = ThreadLocalUtil.get();
//      查询用户当前借了是否达到三本书,如果达到,禁止借阅
        QueryWrapper<Book> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("book_borrower",user.getUserName());
        List<Book> books = iBookService.list(queryWrapper);
        if(books.size()>=3){
            return Result.error("借阅图书失败,借阅图书数量已达上限!");
        }
        //定义时间格式
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        //获取当前时间 格式为 yyyy-MM-dd
        String borrowTime = LocalDate.now().format(dateFormatter);
        //设置还书时间为当前时间的30天之后
        String returnTime =  LocalDate.now().plusDays(30).format(dateFormatter);
        //通过book_id查找需要借阅的图书
        UpdateWrapper<Book> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("book_id",bookId)
                .set("book_borrower",user.getUserName())
                .set("book_status","1")
                .set("book_borrowtime",borrowTime)
                .set("book_returntime",returnTime);

        boolean result = iBookService.update(updateWrapper); // 调用 update 方法
        if (result) {
            return Result.success("借阅图书成功");
        } else {
            return Result.error("借阅失败,可能图书已被其他人借阅或者是其他问题!");
        }
    }

4 api/book.js中编写借阅图书的接口代码

javascript 复制代码
//借阅图书 发送get请求
export const bookBorrowService = (bookId) => {
    return request.get('/book/borrowBook', { params: { bookId: bookId } })
}

5 BookResourcesVue.vue组件中完成点击事件borrowBook

html 复制代码
 <el-table-column v-else label="操作" width="100">
                <template #default="{ row }">
                    <el-button v-if="row.bookStatus == 0" plain type="primary"
                        @click="borrowBook(row.bookId)">借阅</el-button>
                    <el-button v-if="row.bookStatus == 1" plain disabled type="primary"
                        @click="borrowBook(row.bookId)">借阅</el-button>
                </template>
            </el-table-column>

点击借阅,实现对应代码

javascript 复制代码
// 导入借阅图书的接口
import { bookBorrowService } from '@/api/book.js'
const borrowBook = async (bookId) => {
    // 提示要借阅吗 如果确定 提交借阅申请
    await ElMessageBox.confirm('确定要借阅吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
    }).then(() => {
        // 用户点击了确定
        console.log("要借阅的图书为:" + bookId);
        bookBorrowService(bookId).then(result => {
            ElMessage.success(result.message ? result.message : '借阅成功')
            // 刷新列表
            getBooks()
        })
    }).catch(error => {
        ElMessage.error(error.message)
    })

}

6 功能演示

添加链接描述

相关推荐
harmony&7 小时前
MySQL 运维实战:从 DQL 查询到 MHA 高可用架构全解析
mysql
DevOpenClub7 小时前
网页证据如何长期复核:快照、静态 HTML 与 PDF 归档链路
前端·pdf·html
独立开发之道7 小时前
Three.js 创建 VR 内容:四步把一个普通 3D 场景送进头显
javascript·3d·vr
Canace7 小时前
基于 Codex Agent Harness 套壳实现自己的 AI 产品:Agent 运行时与任务编排实践
前端·人工智能·agent
学长毕业设计8 小时前
基于SpringBoot的旅游美食攻略分享系统的设计与实现(源码+文档+讲解视频)
spring boot·旅游·美食
程序员阿明8 小时前
spring boot4集成spring AI 2
人工智能·spring boot·spring
星栈独行8 小时前
自定义 UI-UX-Pro-Max 的 CSV 知识库,把 AI 生成的后台拉回行业该有的样子
前端·人工智能·ui·ux
hunterandroid8 小时前
[Android 从零到一] APK 体积优化实战:从 50MB 到 15MB 的瘦身之旅
android·前端
Coodor8 小时前
在前端如何转换IC卡卡号格式
前端·javascript·nfc·卡号格式
Meta398 小时前
Java八股文之Spring Boot 中解决 MySQL 和 Elasticsearch (ES) 的数据一致性问题
java·spring boot·mysql