# 易千图书馆-前端 **Repository Path**: aimaier4869/yiqian-library-front-end ## Basic Information - **Project Name**: 易千图书馆-前端 - **Description**: 易千图书馆项目前端代码。用Vue + ElementUI 编写的图书检索管理系统,有增删改查图书,增删改查用户,用户登录注册,借阅归还图书等功能。 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: http://sswa.top/library/ - **GVP Project**: No ## Statistics - **Stars**: 15 - **Forks**: 1 - **Created**: 2022-03-01 - **Last Updated**: 2025-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: Vue, Element-UI, Library, 图书馆, 图书管理系统 ## README

易千图书馆-前端

> 易千图书馆项目,实现图书检索,借还图书等功能,项目采用前后端分离的开发模式进行开发 > > 前端作者: [@aimaier4869](https://gitee.com/aimaier4869) > > 后端作者: [@Skywt2003](https://github.com/Skywt2003) ## 仓库地址 - 前端代码:`https://gitee.com/aimaier4869/yiqian-library-front-end` - 后端代码:`https://github.com/Skywt2003/lib-backend` ## 效果演示 ![首页](./assets/fr-index.png) ![登录注册页](./assets/fr-regist.png) ![个人中心](./assets/fr-user.png) ![后台首页](./assets/bk-home.png) ![图书馆里](./assets/bk-books.png) ![借阅记录管理](./assets/bk-records.png) ![用户管理](./assets/bk-users.png) ## 使用 ### 前端 1. 用 `git` 命令克隆仓库到本地 - 前台: 1. 进入 `foreground` 文件夹 - 后台: 1. 进入 `background` 文件夹 2. 使用 `npm i` 命令安装项目所需要的依赖 - 项目文档: 1. 进入 `doc` 文件夹 2. 使用 `npm i` 命令安装项目所需要的依赖 2. 继续开发 ### 后端 见 https://github.com/Skywt2003/lib-backend 中的 `README.md` ## 项目文档 见 `doc/docs/build.html`

易千图书馆项目文档

## 分工信息 - 前端: 1. 设计页面并用代码呈现成网页 2. 设计接口,编写接口文档 3. 按照接口文档编写前后端交互逻辑代码,将后端返回的数据渲染到页面中 4. 利用Mock数据进行调试 - 后端: 1. 设计数据库,数据表 2. 设计接口,编写接口文档 3. 按照接口文档编写接口,处理前端请求,检索数据库,给前端返回相应的数据 4. 利用Postman等工具对接口进行调试 ## 架构设计 ### 技术栈 * **前端:** * 前台:Vue2 + ElementUI * 后台:Vite + Vue3 + Element-Plus * **后端:** Python * 需要安装的模块:`jwt`,`flask`,`sqlalchemy`,`mysql-connector` 等。 * **数据库:** MySQL ### 数据表设计 #### 用户信息表 users * ID `id`:无符号整型,自增主键。在后端程序内部实际地标识用户。 * 用户组 `group`:无符号整型,范围 0~2,0 表示管理员,1 表示普通用户,2 表示禁用的用户。 * 邮箱 `email`:字符串,在外部使用邮箱作为 ID 唯一地标识一位用户。 * 密码 `passwd`:字符串,存储密码的哈希值。密码需要满足设定的安全策略。 * 学号 `stuid`:字符串,12 位纯数字学号。 * 姓名 `name`:字符串,10 以内字符。 * 性别 `gender`:无符号整型,范围 0~3,0 表示未知,1 为男,2 为女,~~3 为其他~~。 * 年龄 `age`:无符号整型,范围 0~100,0 表示未知, * 自我介绍 `bio`:字符串,200 字符以内。 #### 书籍信息表 books * ID `id`:无符号整型,自增主键。在后端程序内部实际地标识书籍。 * 书名 `name`:字符串,50 以内字符。 * 原作者 `author`:字符串数组。包含所有原作者。 * 译者 `transer`:字符串数组。包含所有译者。 * ISBN `isbn`:字符串。13 位纯数字。在外部使用 ISBN 唯一地标识一本书。 * 出版社 `press`:字符串。20 以内字符。 * 现存数量 `existingNum`:无符号整型,范围 0~100。 * 总数量 `totalNum`:无符号整型,范围 0~100。 #### 借阅记录信息表 records * ID `id`:无符号整型,自增主键。 * 借阅用户 ID `userId`:无符号整型,对应「用户信息」表中用户的 ID。 * 借阅书籍 ID `bookId`:无符号整型,对应「书籍信息」表中书籍的 ID。 * 借阅时间 `borrowDate`:Unix 时间戳,借阅的时间。 * 归还时间 `returnDate`:Unix 时间戳,归还的时间。 * 归还状态 `returned`:0 表示尚未归还,1 表示已归还。 ## 前端页面设计 ### 基本信息 * baseUrl: http://127.0.0.1/ ### 目录结构 ```bash public │ favicon.ico │ index.html │ login.html │ user.html ├─admin │ │ favicon.ico │ │ index.html │ └─assets │ Books.js │ Home.js │ index.css │ index.js │ index2.js │ logo.png │ plugin-vue_export-helper.js │ Records.js │ Users.js │ vendor.js ├─css │ element.css │ index.css │ login.css │ reset.css │ user.css ├─fonts │ element-icons.ttf │ element-icons.woff ├─img │ check.svg │ left.svg │ logo.png │ right.svg │ title-img.png ├─js │ axios.js │ element.js │ loginInfo.js │ multiavatar.js │ requestConfig.js │ vue.js └─mock index.js mock.js ``` ### 首页 * 描述:网站首页 * 地址:/index.html ### 登录页 * 描述:用户登录,新用户注册页面 * 地址:/login.html ### 个人中心 * 描述:查询个人借阅记录,修改个人信息,修改密码,注销页面 * 地址:/user.html ### 后台 * 描述:管理面板(单页面应用) * /home:个人中心 * /users:用户管理 * /books:图书管理 * /records:借阅记录管理 * 地址:/admin/index.html ## 接口说明 ### 基本信息 * 基础路径(baseUrl):`http://127.0.0.1/api` * 后端返回数据参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | status | 是 | Number | 状态码 | | data | | Array, Object | 数据 | | msg | 是 | String | 描述信息 | * 后端返回数据示例: ```json { "status": 200, "data": []|{}, "msg": "操作成功" } ``` ### 全局状态码 | 状态码 | 描述 | |----|----| | 200 | 操作成功 | | 201 | 创建成功 | | 303 | 重定向 | | 400 | 参数列表错误(缺少,格式不匹配等) | | 401 | 没有权限访问 | | 500 | 服务器内部发生错误 | ### 用户相关 #### 注册/添加用户 * 描述:新用户注册,管理员添加用户 * 请求地址:`/users` * 请求方式:POST * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | | 如果请求参数中有userGroup属性请验证是否已登录 | * 请求参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | userEmail | 是 | String | 邮箱(账号) | | userPwd | 是 | String | 密码 | | userStuId | 是 | String | 学号 | | userName | 是 | String | 姓名 | | userGender | 是 | Number | 性别,0 表示未知,1 为男,2 为女 | | userAge | 是 | Number | 年龄 | | userBio | 是 | String | 简介 | | userGroup | | Number | 0 表示管理员,1 表示普通用户,2 表示禁用的用户,一般管理员添加用户时才会传递该参数 | * 请求示例: ```json { "userEmail": "abc@email.com", "userPwd": "123456", "userStuId": "202108010500", "userName": "张三", "userGender": 1, "userAge": 16, "userBio": "" } ``` * 成功时返回示例: ```json { "status": 200, "data": { "userId": 123, "userEmail": "abc@email.com", "userStuId": "202108010500", "userName": "张三", "userGender": 1, "userAge": 16, "userBio": "", "userGroup": 1 } "msg": "注册成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "注册失败,{具体失败原因}" } ``` #### 登录 * 描述:用户登录,登录成功后后端生成 token 并返回 * 请求地址:`/token` * 请求方式:POST * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | * 请求参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | userEmail | 是 | String | 账号 | | userPwd | 是 | String | 密码 | * 请求示例: ```json { "userEmail": "abc@email.com", "userPwd": "123456", } ``` * 成功时返回示例: ```json { "status": 200, "data": { token: "XXX" } "msg": "登录成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "用户名或密码错误" } ``` #### 删除/注销 * 描述:用户自主注销,管理员删除用户 * 请求地址:`/users/{userId}` * 请求方式:DELETE * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 删除操作必须携带 token | * URL参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | userId | 是 | Number | 要删除的用户的 ID | * 成功时返回示例: ```json { "status": 200, "msg": "删除成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "删除失败" } ``` #### 获取当前用户信息 * 描述:获取当前登录的用户的信息 * 请求地址:`/users/self` * 请求方式:GET * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 获取用户信息必须携带token,按照token返回当前用户的信息 | * 成功时返回示例: ```json { "status": 200, "data": { "userId": 123, "userEmail": "abc@email.com", "userStuId": "202108010500", "userName": "张三", "userGender": 1, "userAge": 16, "userBio": "", "userGroup": 1 } "msg": "获取成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "获取失败" } ``` #### 查询用户 * 描述:按照条件查询用户,以分页的形式返回数据 * 请求地址:`/users?name={name}&gender={gender}&email={email}&stuId={stuId}&age={age}&group={group}&page={page}&page-size={page-size}` * 请求方式:GET * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 获取用户信息必须携带token,非管理员只能获取自己的信息 | * URL参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | name | | String | 用户名 | | gender | | Number | 性别 | | email | | String | 账号 | | stuId | | String | 学号 | | age | | Number | 年龄 | | group | | Number | 用户组 | | page | | Number | 第几页,默认第1页 | | page-size | | Number | 每页显示几条内容,默认10条 | * 成功时返回示例: ```json { "status": 200, "data": { "page": 1, "page-size": 10, "total-count": 125, // 匹配的查询结果数量 "total-page": 13, // 一共有多少页 "users": [ { "userId": 123, "userEmail": "abc@email.com", "userStuId": "202108010500", "userName": "张三", "userGender": 1, "userAge": 16, "userBio": "", "userGroup": 1 }, { "userId": 123, "userEmail": "abc@email.com", "userStuId": "202108010500", "userName": "张三", "userGender": 1, "userAge": 16, "userBio": "", "userGroup": 1 } ] } "msg": "获取成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "获取失败" } ``` #### 修改用户信息 * 描述:修改除密码以外的用户信息 * 请求地址:`/users/{userId}` * 请求方式:PUT * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 修改信息时必须是已登录状态,若要修改userGroup属性必须是管理员 | * URL参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | userId | 是 | Number | 要修改信息的用户的 ID | * 请求参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | userEmail | 是 | String | 邮箱(账号) | | userStuId | 是 | String | 学号 | | userName | 是 | String | 姓名 | | userGender | 是 | Number | 性别,0 表示未知,1 为男,2 为女 | | userAge | 是 | Number | 年龄 | | userBio | 是 | String | 简介 | | userGroup | | Number | 普通用户修改自己的信息时不会传递该参数,管理员修改某个用户的信息时必会传递该参数 | * 请求示例: ```json { "userEmail": "abc@email.com", "userPwd": "123456", "userStuId": "202108010500", "userName": "张三", "userGender": 1, "userAge": 16, "userBio": "" } ``` * 成功时返回示例: ```json { "status": 200, "msg": "修改成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "注册失败,{具体失败原因}" } ``` #### 修改用户密码 * 描述:用户修改自己的密码,管理员重置某个用户的密码 * 请求地址:`/users/{userId}/password` * 请求方式:PUT * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 修改时必须是已登录状态,非管理员只允许修改自己的密码 | * URL参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | userId | 是 | Number | 要修改密码的用户的 ID | * 请求参数 | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | userPwd | 是 | String | 旧密码,管理员重置某个用户的密码会传递`空` | | userNewPwd | 是 | String | 新密码 | * 请求示例: ```json { "userPwd": 12345, "userNewPwd": 456789 } ``` * 成功时返回示例: ```json { "status": 200, "msg": "修改成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "修改失败,{具体失败原因}" } ``` ### 书籍相关 #### 查询书籍 * 描述:查询书籍,查询结果以分页的形式展示 * 请求地址:`/books?name={name}&isbn={isbn}&author={author}&page={page}&page-size={page-size}` * 请求方式:GET * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 登录后才可以检索 | * URL参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | name | | String | 图书名称 | | isbn | | String | ISBN | | author | | String | 作者 | | page | | Number | 第几页,默认第1页 | | page-size | | Number | 每页显示几条内容,默认10条 | * 成功时返回示例: ```json { "status": 200, "data": { "page": 1, "page-size": 10, "total-count": 124, // 匹配的查询结果数量 "total-page": 13, // 一共有多少页 "books": [ { "bookId": 123, "bookName": "c++程序设计教程(通用版)(第三版)", "bookAuthor": "钱能", "bookISBN": "978-7825-1236-789", "bookPress": "湖南大学出版社", "bookExistingNumber": 1, // 现存总数量 "bookTotalNumber": 16 // 总数量 }, { "bookId": 456, "bookName": "c++程序设计教程(通用版)(第三版)", "bookAuthor": "钱能", "bookISBN": "978-7825-1236-789", "bookPress": "湖南大学出版社", "bookExistingNumber": 1, // 现存总数量 "bookTotalNumber": 16 // 总数量 } ] }, "msg": "获取成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "获取失败" } ``` #### 添加书籍 * 描述:新用户注册,管理员添加用户 * 请求地址:`/books` * 请求方式:POST * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 只有管理员才可以添加书籍 | * 请求参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | bookName | 是 | String | 图书名称 | | bookAuthor | 是 | String | 作者 | | bookISBN | 是 | String | ISBN | | bookPress | 是 | String | 出版社 | | bookExistingNumber | 是 | Number | 现存数量 | | bookTotalNumber | 是 | Number | 库存总数 | * 请求示例: ```json { "bookName": "c++程序设计教程(通用版)(第三版)", "bookAuthor": "钱能", "bookISBN": "978-7825-1236-789", "bookPress": "湖南大学出版社", "bookExistingNumber": 16, // 现存总数量 "bookTotalNumber": 16 // 总数量 } ``` * 成功时返回示例: ```json { "status": 200, "data": { "bookId": 123, "bookName": "c++程序设计教程(通用版)(第三版)", "bookAuthor": "钱能", "bookISBN": "978-7825-1236-789", "bookPress": "湖南大学出版社", "bookExistingNumber": 16, // 现存总数量 "bookTotalNumber": 16 // 总数量 } "msg": "添加成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "添加失败,{具体失败原因}" } ``` #### 删除书籍 * 描述:管理员删除某一本书 * 请求地址:`/books/{bookId}` * 请求方式:DELETE * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 删除操作必须携带token | * URL参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | bookId | 是 | Number | 要删除的图书的ID | * 成功时返回示例: ```json { "status": 200, "msg": "删除成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "删除失败" } ``` #### 修改书籍 * 描述:管理员修改某一本书的信息 * 请求地址:`/books/{bookId}` * 请求方式:PUT * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 只有管理员才可以修改书籍 | * URL参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | bookId | 是 | Number | 要修改的图书的 ID | * 请求参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | bookName | 是 | String | 图书名称 | | bookAuthor | 是 | String | 作者 | | bookISBN | 是 | String | ISBN | | bookPress | 是 | String | 出版社 | | bookExistingNumber | 是 | Number | 现存数量 | | bookTotalNumber | 是 | Number | 库存总数 | * 请求示例: ```json { "bookName": "c++程序设计教程(通用版)(第三版)", "bookAuthor": "钱能", "bookISBN": "978-7825-1236-789", "bookPress": "湖南大学出版社", "bookExistingNumber": 1, // 现存总数量 "bookTotalNumber": 16 // 总数量 } ``` * 成功时返回示例: ```json { "status": 200, "msg": "添加成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "添加失败,{具体失败原因}" } ``` ### 借阅记录相关 #### 查询记录 * 描述:查询借阅记录 * 请求地址:`/records?userId={rcdUserId}&bookId={bookId}&bookName={bookName}&minBorrowDate={minBrrowDate}&maxBorrowDate={maxBorrowDate}&minReturnDate={minReturnDate}&maxReturnDate={maxReturnDate}&status={status}&page={page}&page-size={page-size}` * 请求方式:GET * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 登录后才可以查询,非管理员只允许查询自己的借阅记录 | * URL参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | userId | | Number | 用户ID | | bookId | | Number | 图书ID | | bookName | | String | 图书名称 | | minBorrowDate | | Datetime | 最小借阅时间 | | maxBorrowDate | | Datetime | 最大借阅时间 | | minReturnDate | | Datetime | 最小归还时间 | | maxReturnDate | | Datetime | 最大归还时间 | | returned | | Number | 归还状态,0表示尚未归还,1表示已归还 | | page | | Number | 第几页,默认第1页 | | page-size | | Number | 每页显示几条内容,默认10条 | * 成功时返回示例: ```json { "status": 200, "data": { "page": 1, "page-size": 10, "total-count": 124, // 匹配的查询结果数量 "total-page": 13, // 一共有多少页 "records": [ { "rcdId": 123, "rcdUserID": 123456, "rcdBookID": 752136, "rcdBorrowDate": 1645362141170, "rcdReturnDate": 1645362153685, "rcdReturned": 0, // 归还状态 "bookName": "c++程序设计教程(通用版)(第三版)", "bookAuthor": "钱能", "bookISBN": "978-7825-1236-789", "bookPress": "湖南大学出版社", "bookExistingNumber": 1, // 现存总数量 "bookTotalNumber": 16, // 总数量 "userEmail": "abc@email.com", "userStuId": "202108010500", "userName": "张三", "userGender": 1, "userAge": 16, "userBio": "", "userGroup": 1 }, { "rcdId": 123, "rcdUserID": 123456, "rcdBookID": 752136, "rcdBorrowDate": 1645362141170, "rcdReturnDate": 1645362153685, "rcdReturned": 0, // 归还状态 "bookName": "c++程序设计教程(通用版)(第三版)", "bookAuthor": "钱能", "bookISBN": "978-7825-1236-789", "bookPress": "湖南大学出版社", "bookExistingNumber": 1, // 现存总数量 "bookTotalNumber": 16, // 总数量 "userEmail": "abc@email.com", "userStuId": "202108010500", "userName": "张三", "userGender": 1, "userAge": 16, "userBio": "", "userGroup": 1 } ] } "msg": "获取成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "获取失败" } ``` #### 借阅图书 * 描述: * 请求地址:`/records` * 请求方式:POST * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 登录后才允许借阅书籍 | * 请求参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | rcdUserID | 是 | Number | 借书人ID | | rcdBookID | 是 | Number | 借阅的书籍ID | | rcdBorrowDate | 是 | Datetime | 借阅时间 | * 请求示例: ```json { "rcdUserID": 123456, "rcdBookID": 752136, "rcdBorrowDate": 1645362141170, } ``` * 成功时返回示例: ```json { "status": 200, "msg": "借阅成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "借阅失败,{具体失败原因}" } ``` #### 删除记录 * 描述:管理员删除某一个借阅记录 * 请求地址:`/records/{rcdId}` * 请求方式:DELETE * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 只有管理员才可以删除借阅记录 | * URL参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | rcdId | 是 | Number | 要删除的借阅记录的ID | * 成功时返回示例: ```json { "status": 200, "msg": "删除成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "删除失败" } ``` #### 归还图书 * 描述:用户归还某一本书 * 请求地址:`/records/{rcdId}` * 请求方式:PUT * 请求头(headers)信息: | 键 | 值 | 必传 | 描述 | |----|----|----|----| | Content-Type | application/json | | 请求体类型 | | accept | application/json | | 返回类型 | | token | XXX | 是 | 只有登录后才可以操作 | * URL 参数 | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | rcdId | 是 | Number | 记录ID | * 请求参数: | 参数名 | 必传 | 类型 | 描述 | |----|----|----|----| | rcdReturnDate | 是 | Datetime | 归还时间 | * 请求示例: ```json { "rcdReturnDate": 1645362153685 } ``` * 成功时返回示例: ```json { "status": 200, "msg": "归还成功" } ``` * 失败时返回示例: ```json { "status": 400, "msg": "归还失败,{具体失败原因}" } ```