Fetch the repository succeeded.
易千图书馆项目,实现图书检索,借还图书等功能,项目采用前后端分离的开发模式进行开发
前端作者: @aimaier4869
后端作者: @Skywt2003
https://gitee.com/aimaier4869/yiqian-library-front-end
https://github.com/Skywt2003/lib-backend
git
命令克隆仓库到本地
foreground
文件夹background
文件夹npm i
命令安装项目所需要的依赖doc
文件夹npm i
命令安装项目所需要的依赖见 https://github.com/Skywt2003/lib-backend 中的 README.md
见 doc/docs/build.html
jwt
,flask
,sqlalchemy
,mysql-connector
等。id
:无符号整型,自增主键。在后端程序内部实际地标识用户。group
:无符号整型,范围 0~2,0 表示管理员,1 表示普通用户,2 表示禁用的用户。email
:字符串,在外部使用邮箱作为 ID 唯一地标识一位用户。passwd
:字符串,存储密码的哈希值。密码需要满足设定的安全策略。stuid
:字符串,12 位纯数字学号。name
:字符串,10 以内字符。gender
:无符号整型,范围 0~3,0 表示未知,1 为男,2 为女,age
:无符号整型,范围 0~100,0 表示未知,bio
:字符串,200 字符以内。id
:无符号整型,自增主键。在后端程序内部实际地标识书籍。name
:字符串,50 以内字符。author
:字符串数组。包含所有原作者。transer
:字符串数组。包含所有译者。isbn
:字符串。13 位纯数字。在外部使用 ISBN 唯一地标识一本书。press
:字符串。20 以内字符。existingNum
:无符号整型,范围 0~100。totalNum
:无符号整型,范围 0~100。id
:无符号整型,自增主键。userId
:无符号整型,对应「用户信息」表中用户的 ID。bookId
:无符号整型,对应「书籍信息」表中书籍的 ID。borrowDate
:Unix 时间戳,借阅的时间。returnDate
:Unix 时间戳,归还的时间。returned
:0 表示尚未归还,1 表示已归还。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
描述:管理面板(单页面应用)
地址:/admin/index.html
http://127.0.0.1/api
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
status | 是 | Number | 状态码 |
data | Array, Object | 数据 | |
msg | 是 | String | 描述信息 |
后端返回数据示例:
{
"status": 200,
"data": []|{},
"msg": "操作成功"
}
状态码 | 描述 |
---|---|
200 | 操作成功 |
201 | 创建成功 |
303 | 重定向 |
400 | 参数列表错误(缺少,格式不匹配等) |
401 | 没有权限访问 |
500 | 服务器内部发生错误 |
/users
键 | 值 | 必传 | 描述 |
---|---|---|---|
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 表示禁用的用户,一般管理员添加用户时才会传递该参数 |
请求示例:
{
"userEmail": "abc@email.com",
"userPwd": "123456",
"userStuId": "202108010500",
"userName": "张三",
"userGender": 1,
"userAge": 16,
"userBio": ""
}
成功时返回示例:
{
"status": 200,
"data": {
"userId": 123,
"userEmail": "abc@email.com",
"userStuId": "202108010500",
"userName": "张三",
"userGender": 1,
"userAge": 16,
"userBio": "",
"userGroup": 1
}
"msg": "注册成功"
}
失败时返回示例:
{
"status": 400,
"msg": "注册失败,{具体失败原因}"
}
/token
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
userEmail | 是 | String | 账号 |
userPwd | 是 | String | 密码 |
请求示例:
{
"userEmail": "abc@email.com",
"userPwd": "123456",
}
成功时返回示例:
{
"status": 200,
"data": {
token: "XXX"
}
"msg": "登录成功"
}
失败时返回示例:
{
"status": 400,
"msg": "用户名或密码错误"
}
/users/{userId}
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 删除操作必须携带 token |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
userId | 是 | Number | 要删除的用户的 ID |
成功时返回示例:
{
"status": 200,
"msg": "删除成功"
}
失败时返回示例:
{
"status": 400,
"msg": "删除失败"
}
/users/self
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 获取用户信息必须携带token,按照token返回当前用户的信息 |
成功时返回示例:
{
"status": 200,
"data": {
"userId": 123,
"userEmail": "abc@email.com",
"userStuId": "202108010500",
"userName": "张三",
"userGender": 1,
"userAge": 16,
"userBio": "",
"userGroup": 1
}
"msg": "获取成功"
}
失败时返回示例:
{
"status": 400,
"msg": "获取失败"
}
/users?name={name}&gender={gender}&email={email}&stuId={stuId}&age={age}&group={group}&page={page}&page-size={page-size}
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 获取用户信息必须携带token,非管理员只能获取自己的信息 |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
name | String | 用户名 | |
gender | Number | 性别 | |
String | 账号 | ||
stuId | String | 学号 | |
age | Number | 年龄 | |
group | Number | 用户组 | |
page | Number | 第几页,默认第1页 | |
page-size | Number | 每页显示几条内容,默认10条 |
成功时返回示例:
{
"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": "获取成功"
}
失败时返回示例:
{
"status": 400,
"msg": "获取失败"
}
/users/{userId}
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 修改信息时必须是已登录状态,若要修改userGroup属性必须是管理员 |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
userId | 是 | Number | 要修改信息的用户的 ID |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
userEmail | 是 | String | 邮箱(账号) |
userStuId | 是 | String | 学号 |
userName | 是 | String | 姓名 |
userGender | 是 | Number | 性别,0 表示未知,1 为男,2 为女 |
userAge | 是 | Number | 年龄 |
userBio | 是 | String | 简介 |
userGroup | Number | 普通用户修改自己的信息时不会传递该参数,管理员修改某个用户的信息时必会传递该参数 |
请求示例:
{
"userEmail": "abc@email.com",
"userPwd": "123456",
"userStuId": "202108010500",
"userName": "张三",
"userGender": 1,
"userAge": 16,
"userBio": ""
}
成功时返回示例:
{
"status": 200,
"msg": "修改成功"
}
失败时返回示例:
{
"status": 400,
"msg": "注册失败,{具体失败原因}"
}
/users/{userId}/password
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 修改时必须是已登录状态,非管理员只允许修改自己的密码 |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
userId | 是 | Number | 要修改密码的用户的 ID |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
userPwd | 是 | String | 旧密码,管理员重置某个用户的密码会传递空
|
userNewPwd | 是 | String | 新密码 |
请求示例:
{
"userPwd": 12345,
"userNewPwd": 456789
}
成功时返回示例:
{
"status": 200,
"msg": "修改成功"
}
失败时返回示例:
{
"status": 400,
"msg": "修改失败,{具体失败原因}"
}
/books?name={name}&isbn={isbn}&author={author}&page={page}&page-size={page-size}
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 登录后才可以检索 |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
name | String | 图书名称 | |
isbn | String | ISBN | |
author | String | 作者 | |
page | Number | 第几页,默认第1页 | |
page-size | Number | 每页显示几条内容,默认10条 |
成功时返回示例:
{
"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": "获取成功"
}
失败时返回示例:
{
"status": 400,
"msg": "获取失败"
}
/books
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 只有管理员才可以添加书籍 |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
bookName | 是 | String | 图书名称 |
bookAuthor | 是 | String | 作者 |
bookISBN | 是 | String | ISBN |
bookPress | 是 | String | 出版社 |
bookExistingNumber | 是 | Number | 现存数量 |
bookTotalNumber | 是 | Number | 库存总数 |
请求示例:
{
"bookName": "c++程序设计教程(通用版)(第三版)",
"bookAuthor": "钱能",
"bookISBN": "978-7825-1236-789",
"bookPress": "湖南大学出版社",
"bookExistingNumber": 16, // 现存总数量
"bookTotalNumber": 16 // 总数量
}
成功时返回示例:
{
"status": 200,
"data": {
"bookId": 123,
"bookName": "c++程序设计教程(通用版)(第三版)",
"bookAuthor": "钱能",
"bookISBN": "978-7825-1236-789",
"bookPress": "湖南大学出版社",
"bookExistingNumber": 16, // 现存总数量
"bookTotalNumber": 16 // 总数量
}
"msg": "添加成功"
}
失败时返回示例:
{
"status": 400,
"msg": "添加失败,{具体失败原因}"
}
/books/{bookId}
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 删除操作必须携带token |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
bookId | 是 | Number | 要删除的图书的ID |
成功时返回示例:
{
"status": 200,
"msg": "删除成功"
}
失败时返回示例:
{
"status": 400,
"msg": "删除失败"
}
/books/{bookId}
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 只有管理员才可以修改书籍 |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
bookId | 是 | Number | 要修改的图书的 ID |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
bookName | 是 | String | 图书名称 |
bookAuthor | 是 | String | 作者 |
bookISBN | 是 | String | ISBN |
bookPress | 是 | String | 出版社 |
bookExistingNumber | 是 | Number | 现存数量 |
bookTotalNumber | 是 | Number | 库存总数 |
请求示例:
{
"bookName": "c++程序设计教程(通用版)(第三版)",
"bookAuthor": "钱能",
"bookISBN": "978-7825-1236-789",
"bookPress": "湖南大学出版社",
"bookExistingNumber": 1, // 现存总数量
"bookTotalNumber": 16 // 总数量
}
成功时返回示例:
{
"status": 200,
"msg": "添加成功"
}
失败时返回示例:
{
"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}
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 登录后才可以查询,非管理员只允许查询自己的借阅记录 |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
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条 |
成功时返回示例:
{
"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": "获取成功"
}
失败时返回示例:
{
"status": 400,
"msg": "获取失败"
}
/records
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 登录后才允许借阅书籍 |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
rcdUserID | 是 | Number | 借书人ID |
rcdBookID | 是 | Number | 借阅的书籍ID |
rcdBorrowDate | 是 | Datetime | 借阅时间 |
请求示例:
{
"rcdUserID": 123456,
"rcdBookID": 752136,
"rcdBorrowDate": 1645362141170,
}
成功时返回示例:
{
"status": 200,
"msg": "借阅成功"
}
失败时返回示例:
{
"status": 400,
"msg": "借阅失败,{具体失败原因}"
}
/records/{rcdId}
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 只有管理员才可以删除借阅记录 |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
rcdId | 是 | Number | 要删除的借阅记录的ID |
成功时返回示例:
{
"status": 200,
"msg": "删除成功"
}
失败时返回示例:
{
"status": 400,
"msg": "删除失败"
}
/records/{rcdId}
键 | 值 | 必传 | 描述 |
---|---|---|---|
Content-Type | application/json | 请求体类型 | |
accept | application/json | 返回类型 | |
token | XXX | 是 | 只有登录后才可以操作 |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
rcdId | 是 | Number | 记录ID |
参数名 | 必传 | 类型 | 描述 |
---|---|---|---|
rcdReturnDate | 是 | Datetime | 归还时间 |
请求示例:
{
"rcdReturnDate": 1645362153685
}
成功时返回示例:
{
"status": 200,
"msg": "归还成功"
}
失败时返回示例:
{
"status": 400,
"msg": "归还失败,{具体失败原因}"
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。