AI源码
AI源码AI 精选 · 优质源码 · 助力学习

校园图书借阅系统

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

评分:4.8/5.0
销量:25
发布:2025/12/9
难度:L2 进阶级
💬 联系咨询观看视频介绍
永久使用权限
免费更新维护
技术支持服务

项目封面

截图 1

项目说明

校园图书借阅系统

📋 文档信息

  • 版本: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: '取消收藏' })
}

技术分类

包含内容

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

适用人群

学习参考与二次开发

关于 AI源码

AI源码 专注优质项目源码分享,提供完整源码、详细文档与技术支持,助力源码设计与课程作业。

QQ: 861077046
邮箱: 861077046@qq.com
已服务 25+ 位用户
立即咨询

相关推荐

查看全部 →
本地生活小程序
小程序
进阶

本地生活小程序

本项目是一个基于微信小程序原生开发的本地生活服务平台,提供餐厅推荐、招聘信息、生活服务分类、近期活动展示等功能,是一个典型的O2O本地生活服务类小程序。

小程序
4.869
电影购票网站
HTML
NEW
进阶

电影购票网站

基于原生 HTML、CSS、JavaScript 实现的 PC 端电影在线购票演示网站。数据使用本地 Mock 模拟,订单与座位占用状态通过浏览器 持久化,无需后端服务,直接用浏览器打开 即可运行。

HTML大作业
4.869
家乡介绍小程序
小程序
进阶

家乡介绍小程序

这是一个家乡文化展示与旅游推荐的微信小程序,采用纯前端实现,使用本地Mock数据模拟后端接口。项目以广东省惠州市惠东县为示例,完整实现了景点浏览、美食推荐、乡镇介绍、历史回顾、收藏管理等核心功能,适合作为微信小程序开发学习项目或计算机设计参考。

小程序
4.824
乡村振兴三农小程序
小程序
进阶

乡村振兴三农小程序

这是一个乡村振兴与三农服务的微信小程序,采用纯前端实现,使用本地Mock数据模拟后端接口。项目完整实现了政策解读、农业科技、数字乡村、乡村旅游、农产品展销、乡风文明、人才振兴、基层党建、经验分享等核心功能模块,适合作为微信小程序开发学习项目或计算机设计参考。

小程序
4.889
图书借阅小程序
Node
进阶

图书借阅小程序

这是一个图书借阅管理的微信小程序,采用纯前端实现,使用本地Mock数据模拟后端接口。项目完整实现了图书浏览、分类筛选、搜索查询、收藏管理、借阅下单、订单管理等核心功能,适合作为微信小程序开发学习项目或计算机设计参考。

Node小程序Vue2+1
4.865
垃圾上门回收小程序
Node
进阶

垃圾上门回收小程序

这是一个完整的垃圾上门回收服务平台,包含微信小程序端。系统实现了垃圾分类回收预约、订单管理、地址管理、系统配置等核心功能,采用Egg.js后端框架,适合作为微信小程序全栈开发学习项目或计算机设计参考。

Node小程序Vue2+1
4.877