# bookbook **Repository Path**: mailsohu/bookbook ## Basic Information - **Project Name**: bookbook - **Description**: book9999999999999999999 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-28 - **Last Updated**: 2026-08-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BookBook 图书借阅管理系统 企业/团队内部图书借阅管理系统(图书借阅管理系统),支持管理员与成员两种角色,当前已进入生产运行阶段。 ## 功能一览 - **图书管理**:图书增删改查、分类管理、Excel 批量导入、搜索筛选(书名/作者/ISBN/分类/状态)与分页 - **借阅流程**:成员发起借阅申请 → 管理员审批 → 借出/归还;支持逾期自动标记、用户发起归还申请、管理员确认归还、借阅编号化记录 - **书籍状况管理**:确认归还时登记书况(完好/轻微磨损/破损/缺页)、备注与照片,可同步至图书档案,并在用户借阅历史中展示 - **用户管理**:新增/角色调整/重置密码/删除(含数据完整性保护)、关键词与角色筛选、分页、Excel 导入导出、按用户查看借阅详情 - **采购需求**:成员提交 → 管理员审批 → 标记已采购 - **统计面板**:管理员概览、成员提醒、逾期列表 - **系统设置**:登录背景图、侧边栏 Logo、站点标题(运行时上传) ## 技术栈 Next.js 16(App Router)· React 19 · TypeScript(strict)· Tailwind CSS v4 · SQLite(better-sqlite3)· Drizzle ORM · iron-session · Vitest · lucide-react ## 快速开始 ```bash npm install npm run dev -- --webpack -p 3001 # 开发服务器(本机环境请使用 webpack 模式,见下) npm run build # 生产构建(standalone 输出) npm run start -p 3001 # 运行生产构建 ``` > 开发模式说明:本机环境中 Turbopack 的 PostCSS worker 会因上级目录(`/home/net`,18GB 且为 git 根)解析异常导致 CPU/内存飙升,因此统一使用 `--webpack` 模式开发。 ## 数据库 - 定义:`src/lib/db/schema.ts`;迁移:`src/lib/db/migrations/`(drizzle-kit 生成,当前到 `0004`) - **全新环境**:`npm run db:seed`(自动执行全部迁移 SQL 并写入默认账号 admin/admin123、zhangsan/member123) - **存量库升级**:`node scripts/upgrade-existing-db.cjs`(幂等,只补缺失的表/列,不动已有数据) - 数据文件位于 `data/bookbook.db`(WAL 模式),**不提交到 git** - 数据库升级流程:先备份(停服务 → `PRAGMA wal_checkpoint(TRUNCATE)` → 拷贝 `bookbook.db`),再执行升级脚本,最后恢复属主并启动 ## 测试与检查 ```bash npm run test # Vitest(内存 SQLite,29 个用例,含 action 级测试) npm run lint # ESLint npx tsc --noEmit # 类型检查 ``` ## 部署(Docker) - `Dockerfile` 为多阶段构建(standalone 输出),基础镜像走 DaoCloud 镜像站、npm 依赖走 npmmirror,适配国内网络 - `docker-compose.yml` 挂载 `./data` 与 `./public/uploads`,并设置 `SESSION_SECRET` - 生产环境为 Docker 部署(`docker-compose.yml` 管理,端口映射 `3001:3000`);生产主机与数据目录不在文档中记录 ### 升级与回滚 ```bash # 升级:备份 → 加载新镜像 → 升级数据库 → 重建容器 docker save bookbook-bookbook:latest | gzip > bookbook-old-YYYYMMDD.tar.gz docker stop bookbook-bookbook-1 cp data/bookbook.db data/bookbook.db.bak-YYYYMMDD docker load -i bookbook-new-YYYYMMDD.tar.gz # (按需)node scripts/upgrade-existing-db.cjs docker compose up -d --no-build # 回滚:恢复旧镜像与数据库备份 docker stop bookbook-bookbook-1 docker load -i bookbook-old-YYYYMMDD.tar.gz cp data/bookbook.db.bak-YYYYMMDD data/bookbook.db docker compose up -d --no-build ``` ## 环境变量 - `SESSION_SECRET`:iron-session 加密密钥,生产必须设置(开发有默认值) - `HTTPS`:为真时会话 Cookie 标记 `Secure` ## 目录结构 ``` src/app/ 页面与路由((auth)/(dashboard),admin 后台) src/app/actions/ 全部数据变更/读取为 server actions src/components/ 布局与复用组件 src/lib/ 共享逻辑:db/、auth.ts、format.ts(时间显示)、book-condition.ts scripts/ seed.ts(初始化)、upgrade-existing-db.cjs(存量库升级) tests/ Vitest 测试(内存 SQLite) docs/plans/ 设计/开发计划文档 ```