## 核心目标 - 以最新Excel为数据来源,支持重复导入并覆盖更新 - 提供手机/电脑可访问的网页,快速查询“名称、进价、卖价、条码” ## 功能范围 - Excel导入:上传或本地选择文件,解析指定工作表与字段 - 数据存储:结构化入库并做去重/更新(以条码为准) - 查询接口:按条码精准查、按名称模糊查 - 前端页面:响应式单页,支持键盘输入与移动端友好使用 ## 技术选型 - 后端:Python + FastAPI(轻量、易部署、带交互式文档) - 存储:SQLite(零运维,小型数据量足够;建立索引) - Excel解析:pandas + openpyxl(兼容中文列名与格式) - 前端:原生HTML/CSS/JS(或轻量库),移动端响应式布局 ## 数据模型 - 表:`products` - `barcode` TEXT 主键 - `name` TEXT - `purchase_price` REAL - `sale_price` REAL - 预留字段:`category`、`created_at`、`source_file` - 索引:`name`(模糊查询加速) ## Excel导入流程 1. 读取`Sheet1`,识别列名:`名称(必填)`、`进货价(必填)`、`销售价(必填)`、`条码` 2. 清洗: - 去首尾空格、统一类型;进价/卖价转数值 - 条码为空的行跳过;负库存不入库(如需可扩展) 3. Upsert策略:以`条码`为主键;存在则更新名称/价格,不存在则插入 4. 审计:记录导入时间与源文件名 ## API设计 - `POST /import` 上传Excel并执行导入,返回导入统计(插入/更新/跳过数) - `GET /products/{barcode}` 按条码查询,返回名称/进价/卖价/条码 - `GET /products?q=关键词&limit=20` 按名称模糊查询,分页 - `GET /health` 健康检查 ## 前端设计 - 单页结构:搜索输入框 + 结果卡片 - 查询模式: - 条码:输入或粘贴条码,直接命中详情 - 名称:模糊搜索,列表展示,点选查看详情 - 关键字段展示:`名称、进价、卖价、条码` - 响应式:移动端单列,桌面端居中卡片 ## 权限与安全 - 初期无需登录;可选在`/import`增加简单令牌(环境变量) - 限制上传文件类型与大小;后端校验列名 ## 性能与鲁棒性 - SQLite足以支撑数千到数万条数据;建立`barcode`主键与`name`索引 - 导入过程批量提交、类型稳健转换;错误行记录到日志 ## 测试与验收 - 单元测试: - 列名映射与类型转换 - Upsert逻辑(插入/更新) - 集成测试: - 上传Excel,查询接口返回期望数据 - 验收标准: - 可成功导入你现有的`商品资料.xlsx` - 条码精确查询命中正确的名称/进价/卖价 - 名称模糊查询返回合理结果 ## 实施任务清单 1. 初始化后端项目与SQLite数据表 2. 实现Excel解析与清洗、Upsert导入模块 3. 编写API:`/import`、`/products/{barcode}`、`/products` 4. 实现前端页面(响应式布局、搜索交互) 5. 编写测试与导入验证、性能与错误日志 6. 打包运行脚本与简单部署说明(Windows环境) ## 可选增强 - 条码扫描(移动端摄像头 + 前端库,如ZXing/Quagga) - 导入历史记录与回滚 - 导入多工作表与列名自动适配