校园图书借阅系统

校园图书借阅 uni-app 纯前端系统,Vue3 + Pinia + Mock API,支持分类排序、搜索、借阅归还与收藏,完全离线运行,适合跨平台图书管理类毕业设计。

评分:4.8/5.0
销量:25
发布:12/9/2025
难度:L2 进阶级

获取完整源码

演示视频仅作效果参考。完整源码、项目说明与运行答疑,请私聊沟通(适合毕业设计 / 课程设计 / 课设参考)。

获取完整源码观看演示视频
✓含项目说明文档,便于对照学习
✓可本地运行,适合课设演示
✓沟通获取后可咨询运行问题

项目封面

截图 1

项目概览

校园图书借阅系统基于 uni-app + Vue3 Composition API 开发,从 Express 后端升级为纯前端 Mock API,实现用户登录、热门图书、六分类排序分页、关键词搜索、借阅归还、收藏管理与个人统计,数据 uni.storage 持久化,适合跨平台图书管理毕业设计。

项目说明

校园图书借阅系统

📋 文档信息

  • 版本:v2.0.0(纯前端版本)
  • 更新日期:2024-12-09
  • 架构类型:纯前端静态小程序
  • 运行方式:完全离线,无需后端服务器

🎯 核心特性

✨ 架构升级

  • ✅ 无后端依赖:从 Express 后端改为纯前端 Mock API
  • ✅ 完全离线:无需网络连接即可运行
  • ✅ 数据持久化:使用 uni.storage 本地存储
  • ✅ 快速部署:无需配置服务器,直接运行

🚀 技术亮点

  • Vue 3 Composition API
  • Pinia 状态管理
  • Mock API 数据模拟
  • 本地存储持久化
  • 跨平台兼容

📖 目录

  1. 系统概述
  2. 技术架构
  3. 目录结构
  4. Mock API 设计
  5. 数据持久化
  6. 核心功能
  7. 页面设计
  8. 组件设计
  9. 图片配置
  10. 运行指南

1. 系统概述

1.1 项目简介

校园图书借阅系统是一个基于 uni-app 开发的纯前端静态小程序,为学校师生提供便捷的图书借阅服务。

核心价值:

  • 📱 跨平台运行(H5、小程序、App)
  • 🚀 无需后端服务器
  • 💾 数据本地持久化
  • ⚡ 快速响应,流畅体验

1.2 功能清单

模块功能说明
用户模块登录、用户信息支持学生角色登录
首页热门图书、快捷入口展示热门图书和功能入口
图书列表分类、排序、分页支持6个分类,4种排序
图书详情详细信息、借阅显示图书信息和借阅状态
搜索关键词搜索、历史支持书名和作者搜索
借阅记录记录查看、归还支持筛选和归还操作
收藏收藏管理本地存储收藏列表
个人中心统计、设置显示借阅统计数据

1.3 技术特点

前端技术:

  • Vue 3 Composition API
  • Pinia 状态管理
  • uni-app 跨平台框架
  • uni-ui 组件库
  • Sass 样式预处理

数据方案:

  • Mock API 模拟后端接口
  • uni.storage 本地存储
  • 内存数据 + 持久化存储
  • 自动数据同步

2. 技术架构

2.1 架构对比

旧架构(前后端分离)

Vue页面 → Store → request.js → uni.request → Express服务器 → 数据库

新架构(纯前端)

Vue页面 → Store → request.js → mock/index.js → 本地数据 → uni.storage

2.2 核心技术栈

技术版本用途
uni-app最新版跨平台框架
Vue3.4.0前端框架
Pinia3.0.4状态管理
Vite6.4.1构建工具
uni-ui最新版UI 组件库
Sass1.94.2样式预处理

2.3 数据流设计

┌─────────────┐
│  Vue 页面   │
└──────┬──────┘
       │
       ↓
┌─────────────┐
│ Pinia Store │
└──────┬──────┘
       │
       ↓
┌─────────────┐
│ request.js  │
└──────┬──────┘
       │
       ↓
┌─────────────┐
│ mock/index  │ ← Mock API 层
└──────┬──────┘
       │
       ↓
┌─────────────┐
│ 本地数据    │ ← mockBooks.js
│             │   mockUsers.js
│             │   mockBorrowRecords.js
└──────┬──────┘
       │
       ↓
┌─────────────┐
│ uni.storage │ ← 数据持久化
└─────────────┘

3. 目录结构

3.1 完整目录

项目根目录/
├── pages/                        # 页面目录
│   ├── index/                   # 首页
│   │   └── index.vue
│   ├── book/                    # 图书相关
│   │   ├── list/               # 图书列表
│   │   │   └── list.vue
│   │   └── detail/             # 图书详情
│   │       └── detail.vue
│   ├── search/                  # 搜索页面
│   │   └── search.vue
│   ├── borrow/                  # 借阅记录
│   │   └── borrow.vue
│   ├── collect/                 # 收藏列表
│   │   └── collect.vue
│   ├── my/                      # 个人中心
│   │   └── my.vue
│   └── login/                   # 登录页面
│       └── login.vue
├── components/                   # 组件目录
│   ├── nav-bar/                # 导航栏组件
│   │   └── nav-bar.vue
│   ├── book-card/              # 图书卡片组件
│   │   └── book-card.vue
│   └── empty/                  # 空状态组件
│       └── empty.vue
├── stores/                       # 状态管理
│   ├── user.js                 # 用户状态
│   └── book.js                 # 图书状态
├── utils/                        # 工具函数
│   ├── config.js               # 配置文件
│   ├── request.js              # 请求封装(调用Mock API)
│   └── util.js                 # 工具函数
├── mock/                         # Mock 数据 ⭐ 核心
│   ├── index.js                # Mock API 实现
│   ├── mockBooks.js            # 图书数据
│   ├── mockUsers.js            # 用户数据
│   ├── mockBorrowRecords.js    # 借阅记录
│   └── README.md               # Mock API 说明
├── styles/                       # 全局样式
│   └── main.scss
├── static/                       # 静态资源
│   └── images/                 # 图片资源
│       ├── default-cover.png   # 默认封面
│       ├── avatar-default.png  # 默认头像
│       └── 平凡的世界.png      # 图书封面
├── App.vue                       # 应用入口
├── main.js                       # 主入口文件
├── pages.json                    # 页面配置
├── manifest.json                 # 应用配置
├── uni.scss                      # uni-app 样式变量
├── vite.config.js               # Vite 配置
└── package.json                  # 项目依赖

3.2 核心文件说明

文件说明重要性
mock/index.jsMock API 核心实现⭐⭐⭐⭐⭐
utils/request.js请求封装,调用 Mock API⭐⭐⭐⭐⭐
stores/book.js图书状态管理⭐⭐⭐⭐
stores/user.js用户状态管理⭐⭐⭐⭐
mock/mockBooks.js图书数据(20本)⭐⭐⭐
mock/mockUsers.js用户数据⭐⭐⭐
mock/mockBorrowRecords.js借阅记录⭐⭐⭐

4. Mock API 设计

4.1 Mock API 概述

mock/index.js 是整个系统的核心,模拟了所有后端 API 接口。

核心特性:

  • ✅ 模拟网络延迟(300ms)
  • ✅ 统一响应格式
  • ✅ 完整业务逻辑
  • ✅ 数据持久化
  • ✅ 错误处理

4.2 API 接口列表

4.2.1 图书相关(4个接口)

接口方法说明
getHotBooks()GET获取热门图书
getBookList(params)GET获取图书列表(分页、筛选、排序)
getBookDetail(id)GET获取图书详情
searchBook(keyword)GET搜索图书(书名或作者)

4.2.2 借阅相关(3个接口)

接口方法说明
borrowBook(bookId)POST借阅图书(减少库存)
getBorrowList(params)GET获取借阅记录(支持筛选)
returnBook(borrowId)POST归还图书(增加库存)

4.2.3 用户相关(2个接口)

接口方法说明
login(form)POST用户登录
getUserInfo()GET获取用户信息

4.3 核心实现示例

4.3.1 获取图书列表

async getBookList(params = {}) {
  await delay()  // 模拟网络延迟
  const { page = 1, pageSize = 10, categoryId = 0, sort = 'default' } = params

  // 筛选分类
  let filteredBooks = categoryId === 0
    ? [...books]
    : books.filter(book => book.categoryId === categoryId)

  // 排序
  switch (sort) {
    case 'hot':
      filteredBooks.sort((a, b) => (b.hot ? 1 : 0) - (a.hot ? 1 : 0))
      break
    case 'stock':
      filteredBooks.sort((a, b) => b.stock - a.stock)
      break
    case 'new':
      filteredBooks.sort((a, b) => b.id - a.id)
      break
  }

  // 分页
  const total = filteredBooks.length
  const start = (page - 1) * pageSize
  const end = start + pageSize
  const list = filteredBooks.slice(start, end)

  return {
    code: 200,
    data: { list, total, page, pageSize },
    msg: 'success'
  }
}

4.3.2 借阅图书

async borrowBook(bookId) {
  await delay()

  const userId = getCurrentUserId()
  const book = books.find(b => b.id === parseInt(bookId))

  // 检查图书是否存在
  if (!book) {
    return { code: 404, data: null, msg: '图书不存在' }
  }

  // 检查库存
  if (book.stock <= 0) {
    return { code: 400, data: null, msg: '库存不足' }
  }

  // 检查是否已借阅
  const existingBorrow = borrowRecords.find(
    record => record.userId === userId &&
              record.bookId === bookId &&
              !record.returnTime
  )

  if (existingBorrow) {
    return { code: 400, data: null, msg: '您已借阅该图书' }
  }

  // 创建借阅记录
  const borrowTime = formatDate(new Date())
  const newBorrow = {
    id: ++borrowIdCounter,
    userId,
    bookId: parseInt(bookId),
    bookName: book.name,
    borrowTime,
    returnDate: getReturnDate(borrowTime),  // 14天后
    returnTime: null,
    status: 'borrowing'
  }

  borrowRecords.push(newBorrow)
  book.stock--  // 减少库存

  // 持久化到本地存储
  uni.setStorageSync('borrowRecords', borrowRecords)
  uni.setStorageSync('books', books)

  return { code: 200, data: newBorrow, msg: '借阅成功' }
}

4.4 统一响应格式

{
  code: 200,        // 状态码:200成功,其他失败
  data: {},         // 返回数据
  msg: 'success'    // 提示信息
}

状态码说明:

  • 200 - 成功
  • 400 - 业务错误(如库存不足)
  • 401 - 未登录
  • 404 - 资源不存在

5. 数据持久化

5.1 存储方案

使用 uni.storage 实现数据本地持久化。

存储键值对:

键名数据类型说明
borrowRecordsArray借阅记录列表
booksArray图书数据(含库存)
userInfoObject用户信息
tokenString登录令牌
collectListArray收藏列表
searchHistoryArray搜索历史(最多10条)

5.2 Storage 工具封装

// utils/util.js
export const storage = {
  // 存储数据
  set(key, value) {
    if (typeof value === "string") {
      uni.setStorageSync(key, value);
    } else {
      uni.setStorageSync(key, JSON.stringify(value));
    }
  },

  // 获取数据
  get(key) {
    const data = uni.getStorageSync(key);
    if (!data) return null;

    try {
      return JSON.parse(data);
    } catch (e) {
      return data;
    }
  },

  // 删除数据
  remove(key) {
    uni.removeStorageSync(key);
  },

  // 清空所有数据
  clear() {
    uni.clearStorageSync();
  },
};

5.3 数据同步策略

读取策略:

  1. 优先从本地存储读取
  2. 如果不存在,使用默认值
  3. 同步到内存中

写入策略:

  1. 更新内存数据
  2. 立即写入本地存储
  3. 确保数据一致性

示例:

// 借阅图书后的数据同步
borrowRecords.push(newBorrow); // 更新内存
book.stock--; // 更新内存

// 持久化到本地
uni.setStorageSync("borrowRecords", borrowRecords);
uni.setStorageSync("books", books);

6. 核心功能

6.1 用户登录

流程:

  1. 输入用户名、密码
  2. 调用 mockApi.login()
  3. 验证用户信息
  4. 生成 token
  5. 存储用户信息和 token
  6. 跳转到首页

测试账号:

  • 用户名:student001
  • 密码:123456

6.2 图书浏览

功能:

  • 热门图书展示
  • 分类筛选(6个分类)
  • 排序功能(默认、热门、新书、库存)
  • 分页加载
  • 图书详情查看

分类列表:

  1. 全部
  2. 文学小说
  3. 计算机技术
  4. 历史传记
  5. 人文社科
  6. 少儿读物

6.3 图书搜索

功能:

  • 关键词搜索(书名或作者)
  • 搜索历史记录(最多10条)
  • 点击历史快速搜索
  • 清空搜索历史

实现:

const results = books.filter(
  (book) =>
    book.name.toLowerCase().includes(keyword.toLowerCase()) ||
    book.author.toLowerCase().includes(keyword.toLowerCase()),
);

6.4 借阅管理

借阅流程:

  1. 查看图书详情
  2. 点击"立即借阅"
  3. 二次确认
  4. 检查库存和借阅状态
  5. 创建借阅记录
  6. 减少图书库存
  7. 持久化数据

归还流程:

  1. 进入借阅记录页面
  2. 找到要归还的图书
  3. 点击"归还"按钮
  4. 二次确认
  5. 更新借阅记录
  6. 增加图书库存
  7. 持久化数据

状态判断:

  • 借阅中:未归还且未逾期
  • 已逾期:未归还且超过归还日期
  • 已归还:已完成归还

6.5 收藏功能

功能:

  • 收藏图书
  • 取消收藏
  • 查看收藏列表
  • 本地存储持久化

实现:

// 添加收藏
addCollect(book) {
  const isExist = this.collectList.some(item => item.id === book.id)
  if (!isExist) {
    this.collectList.push(book)
    storage.set('collectList', this.collectList)
    uni.showToast({ title: '收藏成功' })
  }
}

// 取消收藏
removeCollect(bookId) {
  this.collectList = this.collectList.filter(item => item.id !== bookId)
  storage.set('collectList', this.collectList)
  uni.showToast({ title: '取消收藏' })
}

获取完整源码

技术分类

包含内容

✓完整源码
✓项目说明文档
✓演示材料

适合方向

适合计算机、软件工程专业做 uni-app 跨平台图书管理类毕业设计;也适合图书馆信息系统方向需要离线演示的学生;以及学习 Pinia、Mock API 与 uni.storage 持久化的开发者。

关于 AI源码

AI源码 整理计算机毕业设计、课程设计向的可运行项目参考,含说明文档与演示材料。完整源码请通过联系方式沟通获取。

•QQ: 861077046
•邮箱: 861077046@qq.com
•已帮助 25+ 位同学完成选题参考
问能不能做我的题目

相关推荐

查看全部 →