# irent **Repository Path**: ai0110/irent ## Basic Information - **Project Name**: irent - **Description**: 租借系统 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-17 - **Last Updated**: 2026-09-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 云租界 · 通用租赁平台 一套代码同时编译 **微信小程序** + **H5**,Go 后端 + SQLite 数据库,自带后台管理系统。 UI 采用深色科技风、玻璃拟态、青蓝紫渐变配色。 --- ## 项目结构 ``` rental/ ├── backend/ # Go 后端(单文件可执行) │ ├── main.go # 入口、路由分发、静态文件托管 │ ├── config/ # 环境配置 │ ├── db/ # SQLite 初始化、迁移、种子数据、SVG 占位图 │ ├── handlers/ # HTTP 处理器 │ ├── middleware/ # JWT 鉴权 / CORS / 日志 / 恢复 │ ├── models/ # 数据模型 │ ├── pkg/ # 响应封装 / JWT / 工具函数 │ ├── router/ # 自研极简路由器 │ └── web/ # 前端构建产物(H5 + 后台) │ ├── frontend/ # Uni-app 用户端(Vue3 + Vite) │ ├── src/pages/ # 14 个业务页面 │ ├── src/components/ # 自定义导航栏、商品卡片 │ ├── src/store/ # Pinia 状态管理 │ ├── src/api/index.js # 全部业务接口 │ ├── src/static/tab/ # tabBar 图标 │ └── scripts/copy-h5.mjs # 构建后搬运到 backend/web │ ├── admin/ # Vue3 后台管理系统(独立工程) │ ├── src/views/ # 8 个管理视图 │ ├── src/components/ # ToastHost │ ├── src/store/ # 登录态 │ └── src/api/index.js # 管理端接口 │ ├── docs/ # 设计方案 │ └── 设计方案.md │ └── scripts/ # 端到端验收脚本 └── e2e.py ``` --- ## 技术栈 | 端 | 技术 | |---|---| | 小程序 / H5 | Uni-app 3 (Vue3 + Vite) + Pinia | | 后台管理 | Vue3 + Vue Router + Pinia + ECharts 5 | | 后端 | Go 1.21+,标准库 `net/http`,零第三方 Web 框架 | | 数据库 | SQLite(`modernc.org/sqlite` 纯 Go 驱动,无 CGO) | | 鉴权 | 自研 HS256 JWT,用户 / 管理员双 Token | | 密码 | bcrypt | --- ## 快速开始 ### 1. 环境要求 - Go ≥ 1.21(实际依赖 golang.org/x/crypto 已自动切到 1.26 工具链) - Node.js ≥ 18 - pnpm(已预装)或 npm ### 2. 一键启动 ```bash cd /workspace/rental bash scripts/start.sh ``` 启动后访问: - H5 前台:`http://localhost:8080/` - 后台管理:`http://localhost:8080/admin/` - 默认管理员:`admin / admin123` - 默认用户:`13800000000 / 123456`(或任意手机号 + 验证码 `123456`) ### 3. 分别开发 ```bash # 后端 cd backend go run . # H5 前端 cd frontend pnpm install # 首次 pnpm dev:h5 # 微信小程序 cd frontend pnpm dev:mp-weixin # 然后用微信开发者工具打开 dist/dev/mp-weixin # 后台管理 cd admin pnpm install # 首次 pnpm dev ``` ### 4. 构建产物 ```bash # 用户端 H5(自动搬运到 backend/web) cd frontend pnpm build:h5 # 微信小程序 cd frontend pnpm build:mp-weixin # 后台管理 cd admin pnpm build # 后端单文件二进制 cd backend go build -o rental-server . ``` --- ## 部署 只需要一个二进制文件 + `web/` 目录 + `data/` 目录即可: ```bash # 构建 bash scripts/build.sh # 运行 ./backend/rental-server -port 8080 -db ./data/rental.db ``` 生产环境建议设置: ```bash export JWT_SECRET="your-long-secret-key" export RENTAL_DEBUG=false ``` --- ## 验收 ```bash cd /workspace/rental python3 scripts/e2e.py http://localhost:8080 ``` 覆盖:静态资源、用户登录/下单/支付、库存锁定、后台管理、安全边界、业务规则。 --- ## 数据库与种子 - 数据库文件:`data/rental.db`(首次启动自动创建) - 默认数据:管理员、6 个分类、14 个商品、3 张轮播、3 个用户、8 条多状态订单、3 条评价 --- ## 部署到 CloudStudio 预览环境 > 已发布预览地址:**https://a9b7f902705e144eb.app.workbuddy.host** 一键发布: ```bash cd /workspace/rental/backend node /root/.codebuddy/skills/发布为应用/scripts/publish.js \ --dir /workspace/rental/backend \ --language go \ --install-cmd "go build -mod=vendor -o /workspace/app ." ``` ### 注意:网关覆盖 Authorization 头 CloudStudio 的公网入口使用腾讯 EdgeOne 网关,会自动把 `Authorization` 请求头替换为平台自身的鉴权令牌。因此前后端统一改用自定义头 **`X-Token`** 传递本系统的 JWT: - 后端:`middleware/middleware.go` 中 `tokenFrom()` 优先读取 `X-Token`,最后兜底 `Authorization`。 - 用户端:`frontend/src/utils/request.js` - 后台管理:`admin/src/api/index.js` 这样本地开发、公网预览、小程序、H5 都兼容。 --- ## 关键设计 - **模拟支付**:预留 `prepay_id` / `pay_method` / `pay_time`,后续替换为真实微信支付即可。 - **库存一致性**:下单、取消、归还、退款均在事务内操作 `available_stock`。 - **订单快照**:`product_snapshot` JSON 字段保存下单时商品信息,避免后续改价影响历史订单。 - **双端 Token 隔离**:JWT `type` 字段区分 `user` / `admin`,互不可访问。 - **离线可预览**:所有图片(商品、轮播、头像)由后端生成 SVG data-uri,不依赖外部图床。 --- ## 默认账号 | 角色 | 账号 | 密码 / 验证码 | |---|---|---| | 管理员 | admin | admin123 | | 用户 1 | 13800000000 | 123456 | | 用户 2 | 13900000001 | 123456 | | 用户 3 | 13900000002 | 123456 | --- ## 端口与配置 | 配置项 | 默认值 | 说明 | |---|---|---| | `-port` | 8080 | HTTP 端口 | | `-db` | `./data/rental.db` | SQLite 文件路径 | | `JWT_SECRET` | `rental-jwt-secret-dev` | JWT 密钥 | | `RENTAL_DEBUG` | `true` | 是否开启请求日志 |