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 功能演示

添加链接描述

相关推荐
用户938515635071 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战
前端·设计模式·typescript
CodeSheep2 小时前
稚晖君公司人事大变动,来了!
前端·后端·程序员
鱼樱前端2 小时前
用 AI 做内容变收入
前端·人工智能·ai编程
Dxy12393102162 小时前
Python 如何使用 MySQL 的事务
python·mysql
eric-sjq2 小时前
10 分钟实战:用 0.6B 本地模型生成中文网页(WanlyFrontend + 编译器全流程)
javascript·机器学习·自然语言处理·html
浮生望2 小时前
React + TypeScript 组件设计进阶:从类型约束到无状态组件的三次进化
前端
To_OC3 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
90后的晨仔3 小时前
Mac 开发 uni-app 终极方案:让安卓模拟器彻底脱离 Android Studio 独立运行
前端·vue.js
90后的晨仔3 小时前
别再搞混了!uni-app 中 node_modules 和 uni_modules 到底是什么关系?
前端
kyriewen4 小时前
面试官问"这段逻辑为什么这样写"——我才发现,这半年我写的代码,我自己都解释不了
前端·javascript·面试