修复bug,归档

This commit is contained in:
侯欢 2025-12-07 16:06:51 +08:00
parent 116ee0d54a
commit 9bfefd635c
5 changed files with 39 additions and 29 deletions

View File

@ -1 +0,0 @@
{"projectId":"prj_d4Snf7Qo4GMchiUVyezwVqJieNi6","orgId":"team_hyS3Eg5TitOtyQ1YVgGLzKUz","projectName":"trae_table_ls74","neverMindDeployCard":true}

View File

@ -1,7 +0,0 @@
node_modules
build
dist
.git
.trae
.log
.figma

View File

@ -1,14 +1,15 @@
# 商品查询系统
# 益选便利店商品查询
## 功能
- 导入Excel为数据库以条码为主键Upsert
- 查询商品:条码精确查、名称模糊查
- 响应式前端,手机/电脑可用
## 概述
- 基于 FastAPI + SQLite 的轻量查询系统,适配手机和桌面
- 支持导入 Excel条码为主键自动插入/更新Upsert
- 支持条码部分匹配(前缀/后缀/任意包含)与名称关键词搜索
- 内置扫码入口:支持浏览器原生条码识别与拍照识别兜底
## 运行
1. 安装依赖:`python -m pip install fastapi "uvicorn[standard]" pandas openpyxl python-multipart`
2. 启动服务:`python -m uvicorn app.main:app --host 0.0.0.0 --port 57777`(或设置环境变量 `PORT=57777`
3. 打开页面:`http://localhost:57777/`
## 本地运行
- 安装依赖:`python -m pip install fastapi "uvicorn[standard]" pandas openpyxl python-multipart`
- 启动服务:`python -m uvicorn app.main:app --host 0.0.0.0 --port 57777`
- 访问页面:`http://localhost:57777/`
## 导入
- 页面“导入Excel”选择文件并提交
@ -16,22 +17,40 @@
## 接口
- `POST /import` 表单上传`file`
- `GET /products/{barcode}` 返回名称、进价、卖价、条码
- `GET /products?q=关键词&limit=20` 名称模糊查询
- `GET /products/{barcode}` 精确条码查询
- `GET /products?q=关键词&limit=20&page=1&sort=name&order=asc` 列表查询
- 当 `q` 为数字时:支持条码前缀、后缀与任意包含匹配;同时匹配名称包含
- 当 `q` 为文本时:按名称包含匹配
- `GET /health` 健康检查
## 数据库
- SQLite 文件:`data/products.db`
- 表:`products(barcode primary key, name, purchase_price, sale_price, category, created_at, source_file)`
- 索引:`idx_products_name(name)`
- 性能:启用 WAL 与适度同步,提升并发读取
## 注意
- Excel中文列名需一致
- 非数字价格会被跳过或置为空
- 条码为空的行跳过
## Docker推荐部署
- 构建并启动:`docker compose up --build -d`
- 端口:宿主机映射 `57777:57777`
- 数据与静态资源挂载:
- 端口映射:`57777:57777`(保持不变)
- 卷挂载:
- `./data:/app/data`SQLite 持久化)
- `./static:/app/static:ro`(前端文件,无需重建镜像即可更新)
- `./static:/app/static:ro`(前端文件可直接更新,无需重建)
- 宝塔/Nginx可选反代到 `http://127.0.0.1:57777` 并启用 HTTPS
- 详见《部署文档.md》
## 前端扫码
- 优先使用浏览器原生 `BarcodeDetector` 实时识别
- 非安全上下文或不支持时,自动切换为“拍照识别”方式
- 识别成功自动填充并触发查询
## 项目结构
- `app/` 后端 FastAPI
- `static/` 前端页面与脚本、样式
- `data/` 运行时生成的 SQLite 数据库
- `Dockerfile`、`docker-compose.yml` 部署配置
- `部署文档.md` 服务器部署说明
## 常见问题
- 无法唤起相机:请通过 HTTPS 域名访问或使用支持的浏览器HTTP 下自动切换为拍照识别
- 构建缓存问题:使用 `docker compose build --no-cache && docker compose up -d`
- 中文命令行乱码:页面显示正常;确保浏览器为 UTF-8 编码

View File

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>商品查询</title>
<title>益选便利店商品查询</title>
<link rel="stylesheet" href="/static/styles.css" />
</head>
<body>
@ -14,7 +14,7 @@
</div>
<section id="searchSection" class="section">
<h1>商品查询</h1>
<h1>益选便利店商品查询</h1>
<div class="search">
<div class="search-input">
<input id="q" type="text" placeholder="输入条码或名称,支持前缀/后缀/包含" />

View File

@ -1 +0,0 @@
{"rewrites":[{"source":"/(.*)","destination":"/index.html"}]}