当前位置: 首页 > news >正文

13图书归还-云图书管理系统(Vue3+Spring Boot+element plus)

目录

  • 1 接口地址
  • 2 后台代码
      • RecordController
      • BookController
  • 3 view/books/BookRecordsVue中前端框架搭建
  • 4 api/record.js文件写查询用户借阅记录的接口代码
  • 5 api/book.js中写归还图书、查询当前借阅图书接口代码
  • 6 BookRecordsVue中导入接口函数,并调用
  • 7 运行效果

1 接口地址

### 用户借阅历史
GET http://localhost:8082/record/pastBorrowedRecords### 用户当前所借图书
GET http://localhost:8082/book/currentBorrowedBooks### 图书归还
GET http://localhost:8082/book/returnBook

2 后台代码

RecordController

    //历史借阅记录@GetMapping("/pastBorrowedRecords")public Result pastBorrowedRecords(){User user = ThreadLocalUtil.get();LambdaQueryWrapper<Record> recordWrapper = new LambdaQueryWrapper<>();recordWrapper.eq(Record::getRecordBorrower,user.getUserName());List<Record> recordList = iRecordService.list(recordWrapper);System.out.println("曾经的借阅记录");return Result.success(recordList);}

BookController

//   获取用户当前借书数据@GetMapping("/currentBorrowedBooks")public Result currentBorrowedBooks(){User user = ThreadLocalUtil.get();
//      查询book表中借书人为本人的信息LambdaQueryWrapper<Book> bookWrapper = new LambdaQueryWrapper<>();bookWrapper.eq(Book::getBookBorrower,user.getUserName());List<Book> bookList = iBookService.list(bookWrapper);System.out.println("当前所借图书");return Result.success(bookList);}
}
    //用户归还图书功能@GetMapping("/returnBook")public Result returnBook(@RequestParam("bookId") Integer bookId){
//        获取用户信息User loginUser = ThreadLocalUtil.get();//通过book_id查找需要归还的图书Book bookMsg = iBookService.getById(bookId);String TheBorrowtime = bookMsg.getBookBorrowtime();//      获取当前时间DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");String TheRemandtime = LocalDate.now().format(formatter);UpdateWrapper<Book> updateWrapper = new UpdateWrapper<>();updateWrapper.eq("book_borrower",loginUser.getUserName()).eq("book_status","1").eq("book_id",bookId).set("book_status","0").set("book_borrower",null).set("book_borrowtime",null).set("book_returntime",null);boolean result = iBookService.update(updateWrapper); // 调用 update 方法//      图书状态修改之后 还需要新增一条借阅记录Record record = new Record();record.setRecordBookname(bookMsg.getBookName());record.setRecordBorrower(loginUser.getUserName());record.setRecordBookisbn(bookMsg.getBookIsbn());record.setRecordBorrowtime(TheBorrowtime);record.setRecordRemandtime(TheRemandtime);boolean result1 = iRecordService.save(record); // 调用 save 方法if (result1) {System.out.println("Record updated successfully.");return Result.success("归还图书成功");} else {return Result.error("归还失败,可能没有借阅信息或者是其他问题!");}}

3 view/books/BookRecordsVue中前端框架搭建

<script setup>
import { ref, computed } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'// 默认显示第一个tab
const activeTab = ref('current')
// 图书表单数据模型
const bookModel = ref({bookId: 0,bookName: '',bookIsbn: '',bookPress: '',bookAuthor: '',bookPagination: '',bookPrice: '',bookUploadtime: '',bookStatus: '',bookBorrower: '',bookBorrowtime: '',bookReturntime: ''
})// 借阅记录的数据模型
const recordModel = ref({recordId: 0,recordBookname: '',recordBookisbn: '',recordBorrower: '',recordBorrowtime: '',recordRemandtime: ''
})// 当前借阅的图书列表
const currentBorrowedBooks = ref([// 其他当前借阅的图书项...
])// 曾经的借阅记录列表
const pastBorrowedRecords = ref([// 其他借阅记录项...
])// 获取用户当前借阅的图书
const getUsersCurrentBorrowedBooks = async () => {}// 获取用户曾经的借阅记录
const getUsersPastBorrowedRecords = async () => {}// 初始化时获取用户当前借阅的图书和曾经的借阅记录
getUsersCurrentBorrowedBooks()
getUsersPastBorrowedRecords()// 归还图书
const returnBookToBackend = (book) => {}
</script><template><el-card class="page-container"><el-tabs v-model="activeTab" @tab-click="handleTabClick"><el-tab-pane label="当前借阅" name="current"><el-table :data="currentBorrowedBooks" style="width: 100%"><el-table-column prop="bookName" label="书名"></el-table-column><el-table-column prop="bookAuthor" label="作者"></el-table-column><el-table-column prop="bookPress" label="出版社"></el-table-column><el-table-column prop="bookBorrowtime" label="借阅时间"></el-table-column><el-table-column label="操作" width="180"><template #default="{ row }"><el-button type="danger" @click="returnBook(row)">归还</el-button></template></el-table-column></el-table></el-tab-pane><el-tab-pane label="借阅记录" name="past"><el-table :data="pastBorrowedRecords" style="width: 100%":default-sort="{ prop: 'recordRemandtime', order: 'ascending' }"><el-table-column prop="recordBookname" label="书名"></el-table-column><el-table-column prop="recordBookisbn" label="ISBN"></el-table-column><el-table-column prop="recordBorrower" label="借阅人"></el-table-column><el-table-column prop="recordBorrowtime" label="借阅时间" sortable></el-table-column><el-table-column prop="recordRemandtime" label="归还时间" sortable></el-table-column></el-table></el-tab-pane></el-tabs></el-card>
</template><style scoped>
.page-container {padding: 20px;
}
</style>

效果如下
在这里插入图片描述

4 api/record.js文件写查询用户借阅记录的接口代码

// 导入request
import request from '@/utils/request'// 查询用户借阅记录
export const pastBorrowedRecordsService = () => {return request.get('/record/pastBorrowedRecords')
}

5 api/book.js中写归还图书、查询当前借阅图书接口代码

// 用户当前借阅的图书
export const userBorrowListService = () => {return request.get('/book/currentBorrowedBooks')
}// 归还图书 发送get请求
export const bookReturnService = (bookId) => {return request.get('/book/returnBook', { params: { bookId: bookId } })
}

6 BookRecordsVue中导入接口函数,并调用

//导入用户当前借阅 userBorrowListService
import { userBorrowListService } from '@/api/book'
// 获取用户当前借阅的图书
const getUsersCurrentBorrowedBooks = async () => {// 这里可以调用后端API获取用户当前借阅的图书// 假设这里有一个返回当前借阅图书的模拟函数const result = await userBorrowListService()currentBorrowedBooks.value = result.data
}//导入用户借阅历史接口 pastBorrowedRecordsService
import { pastBorrowedRecordsService } from '@/api/record'
// 获取用户曾经的借阅记录
const getUsersPastBorrowedRecords = async () => {// 这里可以调用后端API获取用户曾经的借阅记录// 假设这里有一个返回借阅记录的模拟函数const result = await pastBorrowedRecordsService()pastBorrowedRecords.value = result.data
}// 初始化时获取用户当前借阅的图书和曾经的借阅记录
getUsersCurrentBorrowedBooks()
getUsersPastBorrowedRecords()// 导入 bookReturnService
import { bookReturnService } from '@/api/book'
// 归还图书
const returnBook = (book) => {// 提醒是否要归还这本书return ElMessageBox.confirm('确定要归还《' + book.bookName + '》吗?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {// 用户点击了确定// 这里可以调用后端API归还图书return bookReturnService(book.bookId).then(result => {ElMessage.success(result.data ? result.data : '图书已归还')getUsersCurrentBorrowedBooks();getUsersPastBorrowedRecords();})})
}

7 运行效果

在这里插入图片描述

相关文章:

13图书归还-云图书管理系统(Vue3+Spring Boot+element plus)

目录 1 接口地址2 后台代码RecordControllerBookController 3 view/books/BookRecordsVue中前端框架搭建4 api/record.js文件写查询用户借阅记录的接口代码5 api/book.js中写归还图书、查询当前借阅图书接口代码6 BookRecordsVue中导入接口函数&#xff0c;并调用7 运行效果 1 …...

中航资本:“女人的茅台”重挫!超7700亿元英伟达概念业绩爆发

今天早盘首要指数强势震动&#xff0c;申万一级工作指数跌多涨少&#xff0c;通讯指数涨逾1%居首。概念方面&#xff0c;存储器、动保、重组等概念板块涨幅居前。存储概念大涨首要仍是AI方向又有好消息&#xff0c;市值逾越7700亿元的英伟达概念龙头SK海力士发布效果超预期财报…...

day7:软件包管理

一&#xff0c;软件包概述 软件包概述 软件包用于安装&#xff0c;升级&#xff0c;卸载一个软件 软件包类型 二进制包 源码经过了编译&#xff08;而且成功了&#xff09;后产生的包&#xff0c;二进制包是linux下默认的安装包 编译好的文件&#xff0c;直接使用&#xff…...

探索Konko AI:快速集成大语言模型的最佳实践

探索Konko AI&#xff1a;快速集成大语言模型的最佳实践 引言 随着大语言模型&#xff08;LLM&#xff09;的普及&#xff0c;如何快速方便地集成这些模型成为众多开发者关注的焦点。Konko AI 提供了一个全面管理的 API&#xff0c;使开发者能够选择合适的开源或专有大语言模…...

网络地址和本地网络地址

本地网络地址&#xff08;Local Network Address&#xff0c;简称 LNA&#xff09;是指在一个子网内用于标识特定主机的部分。在 IPv4 地址中&#xff0c;一个完整的 IP 地址由两部分组成&#xff1a;网络地址部分&#xff08;Network Address&#xff09;和本地网络地址部分&a…...

【closerAI ComfyUI】AI绘画界新技术RF Inversion图像编辑和风格迁移!能跟ipadapter争高低吗?

AI绘画界新技术RF Inversion图像编辑和风格迁移&#xff01;能跟ipadapter争高低吗&#xff1f; 在人工智能绘画领域&#xff0c;技术的创新永不止步。closerAI ComfyUI最近推出了一项名为RF Inversion的新技术&#xff0c;它能够进行图像编辑和风格迁移&#xff0c;为艺术家和…...

【Spring篇】Spring的Aop详解

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】【Spring篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;初始Sprig AOP及…...

Spring与其他框架的比较

Spring 框架因其丰富的功能和灵活性&#xff0c;在 Java 领域内得到了广泛应用。然而&#xff0c;在不同的应用场景下&#xff0c;开发者可能会选择其他框架。下面将 Spring 框架与其他一些常见的 Java 框架进行比较&#xff0c;以便更好地理解它们各自的优缺点和适用场景。 1…...

论当前的云计算

随着技术的不断进步和数字化转型的加速&#xff0c;云计算已经成为当今信息技术领域的重要支柱。本文将探讨当前云计算的发展现状、市场趋势、技术革新以及面临的挑战与机遇。 云计算的发展现状 云计算&#xff0c;作为一种通过网络提供可伸缩的、按需分配的计算资源服务模式&a…...

Spring Boot 整合 RocketMQ 之消息消费手动提交 ACK 实战【案例分享】

前言&#xff1a; 上一篇我们分享了 RocketMQ 消息重试的一些基本原理&#xff0c;本篇我们基于 Spring Boot 整合 RocketMQ 来分享一下 RocketMQ 消息基于手动提交的案例&#xff0c;在分享手动进行消息 ACK 中也会分享消息重试的使用。 RocketMQ 系列文章传送门 RocketMQ …...

胃癌数据集(不定期更新)

恶性肿瘤其实就是癌症的一种&#xff0c;它是由一些不正常的细胞组成的&#xff0c;这些细胞会不停地生长和繁殖&#xff0c;而且它们还会侵犯周围的正常组织&#xff0c;甚至通过血液和淋巴系统跑到身体其他部位去。 恶性肿瘤有以下几个特点&#xff1a; 1、无限制生长&…...

zh/FAQ/CentOSStream-CentOS Stream 常见问题

CentOS Stream 是什么&#xff1f; CentOS Stream 是一个为开发者而设的发行版本&#xff0c;目的是要协助社群中的成员、Red Hat 伙伴及其它人在一个较稳定及可预测的 Linux 生态环境下充分利用创新的开源程序。 它的内容正是 Red Hat 有意收录于下个稳定版 RHEL 的软件。任何…...

多台西门子PLC与多台三菱PLC之间实时通讯的方案(PLC内不用编程)

PLC通讯智能网关IGT-DSER模块支持西门子、三菱、欧姆龙、罗克韦尔AB、GE等各种品牌的PLC之间通讯&#xff0c;同时也支持PLC与Modbus协议的变频器、智能仪表等设备通讯。网关有多个网口、串口&#xff0c;也可选择WIFI无线通讯。PLC内无需编程开发&#xff0c;在智能网关上配置…...

C++ [项目] 恶魔轮盘赌

现在才发现C游戏的支持率这么高&#xff0c;那就发几篇吧 零、前情提要 此篇是我与 同学的共创,他负责写人,我负责写机,简称人机, 不过有一点小插曲…… 一、基本介绍 支持Dev-C5.11版本(务必调为英文输入法),基本操作看游戏里的介绍,怎么做的……懒得说,能看懂就看注释,没有…...

微信小程序版本更新管理——实现自动更新

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

Python使用Selenium库实现CSDN自动化发帖

虽然CSDN上有很多优秀的作品&#xff0c;但也不乏很多很水的文章&#xff0c;我也不知道这种有什么意义。不过发这么水的文章多没意思&#xff0c;让浏览器自动化发帖就行了。以下程序能够实现CSDN自动化发帖&#xff0c;同时附自动给关注的人的文章点赞的程序。因为也有很多作…...

StringBulider和StringBuffer的底层源码剖析

要深入了解 StringBuffer 和 StringBuilder 的区别&#xff0c;从底层源码的角度来解析&#xff0c;包括它们的创建、扩容机制等&#xff0c;可以参考 JDK 1.8 的源码。 1. AbstractStringBuilder 类 StringBuffer 和 StringBuilder 都继承自 AbstractStringBuilder。…...

手机空号过滤接口-在线手机空号检测-手机空号过滤API

接口简介&#xff1a;在线检测手机号状态&#xff0c;与运营商平台联动大数据分析判断手机号状态。可划分出实号、空号、停机、流量卡、沉默号。 更新周期&#xff1a;两周 不支持号段&#xff1a;14、16、17、19号段 存在5%的误差&#xff0c;如需实时接口&#xff0c;可购买手…...

ubuntu 用ss-TPROXY实现透明代理,基于TPROXY的透明TCP/UDP代理,在 Linux 2.6.28 后进入官方内核。

TPROXY 是一个 Linux 内核模块&#xff0c;在 Linux 2.6.28 后进入官方内核。 1 安装 tproxy 相关依赖 参考ss-tproxy 的安装依赖。 bash ss-tproxy 使用了 bash 的一些语法特性&#xff0c;比如 shell 数组&#xff0c;因此必须用 bash 解释器执行。大多数发行版已经自带了…...

报错解决:opene3d draw_geometries(): incompatible function arguments.

1. 报错信息 o3d.visualization.draw_geometries(target_pcd) TypeError: draw_geometries(): incompatible function arguments. The following argument types are supported:1. (geometry_list: List[open3d.cpu.pybind.geometry.Geometry], window_name: str Open3D, wid…...

Clickhouse笔记(二) 集群搭建

0.集群规划 操作系统使用ubuntu2204server&#xff0c;8C8G100G。 节点分片部署192.168.50.5分片1副本1clickhouse-server/clickhouse-client/keeper192.168.50.6分片1副本2clickhouse-server/clickhouse-client/keeper192.168.60.7分片2副本1clickhouse-server/clickhouse-c…...

华为云购买弹性云服务器(教程)

配置弹性云服务器 基础配置 实例 操作系统...

Python异常检测- 单类支持向量机(One-Class SVM)

系列文章目录 Python异常检测- Isolation Forest&#xff08;孤立森林&#xff09; python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS) python异常检测-局部异常因子&#xff08;LOF&#xff09;算法 Python异常检测- DBSCAN 文章目录 系列文章目录前言一、On…...

基于SpringBoot+Vue+uniapp微信小程序的婚庆摄影小程序的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…...

NGAC访问控制系列三:低代码产品NGAC运用与算法运用

目录 一、基于NGAC的低代码模型权限管理方案 二、多策略访问控制系统限制内部访问的线性时间算法 1、概述 2、权限控制图遍历算法 一、基于NGAC的低代码模型权限管理方案 NGAC在低代码平台的权限决策模型&#xff1a;功能权限数据权限 案例&#xff1a;对于七巧低代码开发平台&…...

Unity3D 面试题收录

Unity3D 客户端面试题收录&#xff08;持续更新~&#xff09; 面试题收录 本文收录一些对于 Unity3D 客户端可能遇到的面试题&#xff08;持续更新~&#xff09;&#xff0c;答案仅出于个人理解&#xff0c;如有偏差&#xff0c;希望指正。 Unity3D MonoBehaviour 生命周期…...

Jrebel热部署不生效解决

打开setting找到build底下的complier勾选 build project automatically 设置自动构建项目 打开setting找到Advanced Setting勾选Complier中的第一项 Jrebel panel中勾选需要热部署的项目模块 项目配置信息&#xff1a;Edit Configuration中进行编辑&#xff0c;配置如下图…...

软件测试学习笔记丨Selenium键盘鼠标事件ActionChains

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/22515 本文为霍格沃兹测试开发学社的学习经历分享&#xff0c;写出来分享给大家&#xff0c;希望有志同道合的小伙伴可以一起交流技术&#xff0c;一起进步~ 说明&#xff1a;本篇博客基于sel…...

CI/CD(持续集成与持续交付)流水线

集成 Jenkins、GitLab Webhook、Nexus 和 RabbitMQ 可以形成一个全面的 CI/CD&#xff08;持续集成与持续交付&#xff09;流水线&#xff0c;结合消息队列可以创建事件驱动的工作流。以下是配置这四个工具以实现一个基本的 CI/CD 流程的详细步骤。 前置条件 Jenkins、GitLab、…...

分布式光伏发电有什么优劣势

分布式光伏发电是指在离电力消费地点较近的地方&#xff0c;通过安装光伏发电系统来发电。这种系统通常用于屋顶、地面或其他建筑物上&#xff0c;相比于集中式光伏发电系统&#xff0c;它有一些独特的优势和劣势&#xff1a; 优势&#xff1a; 地理适应性&#xff1a; 分布式…...

微网站价格/网络营销方式与工具有哪些

一张圆桌上坐着5名哲学家&#xff0c;每两个哲学家之间的桌上摆一根筷子&#xff0c;桌子的中间是一碗米饭。哲学家们倾注毕生精力用于思考和进餐&#xff0c;哲学家在思考时&#xff0c;并不影响他人。只有当哲学家饥饿的时候&#xff0c;才试图拿起左、 右两根筷子&#xff0…...

重庆政府服务网/seo顾问培训

今天是 201220122012 年 444 月 121212 日星期四&#xff0c;编写程序&#xff0c;输入今天开始到 121212 月 313131 日之间的任意日期&#xff0c;输出那一天是星期几。 输入格式 共两行&#xff0c;第一行包含一个整数 mmm&#xff0c;表示询问日期的月份。 第二行包含一个…...

网站建设与管理说课稿/cps广告联盟平台

小程序的一种封装方法 创建一个js 文件 添加以下代码 在需要请求的的文件中引入 在请求数据时使用...

新疆教育集团网站建设/大二网络营销实训报告

很多商家朋友说自己做店铺没有什么头绪&#xff0c;不知道该怎么做也不知道自己哪里不足。这种情况其实对于做店铺来说是很可怕的一件事。做店铺&#xff0c;一定要理清目的&#xff0c;知道我们每个阶段所要去实现的效果&#xff0c;并且要针对运营过程中的核心痛点来操作&…...

web网站开发方法/网站建设及网络推广

简介项目使用MSSql作为数据库&#xff0c;但是因为SQL服务器贵那么一点&#xff0c;并发连接差那么一点&#xff0c;要把数据迁移到MySQL&#xff0c;顺带迁移过程以及问题。环境 Visual Studio 2013 MySQL 5.7 Entity Framework 6.1.3正文迁移过程1. 安装MySQL&#xff0c;顺带…...

深圳网站制作费用多少/网站seo优化公司

1、torch.sigmoid 2、lstm的hidden_size先改成很小的&#xff0c;后来又增上去&#xff1b; 3、最最根本的原因是&#xff1a;cpu和cuda之间的数据传输太多&#xff0c;导致很慢很慢&#xff01;&#xff01;&#xff01; truelabel.cuda() predtorch.sigmoid(pred).cuda() lo…...