Site Tools


Hotfix release available: 2026-07-14c "Mort". upgrade now! [57.3] (what's this?)
研发库房管理:冷启动文件

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
研发库房管理:冷启动文件 [2026/08/30 22:09] – external edit 127.0.0.1研发库房管理:冷启动文件 [2026/09/15 04:46] (current) – 更新至最新(2026-09-15) 172.17.0.1
Line 1: Line 1:
-====== 研发库房管理 H5 — 冷启动文件 ======+======= 研发库房管理 H5 — 冷启动文件 =======
  
 > 版本: 2.3 | 更新: 2026-08-30 | 用途: 研发库房样品出入库管理系统的冷启动/重建/排障手册 > 版本: 2.3 | 更新: 2026-08-30 | 用途: 研发库房样品出入库管理系统的冷启动/重建/排障手册
Line 8: Line 8:
 > 附件: /home/ubuntu/docs/store/attachments/ | 前端: ~/.hermes/scripts/rd_store.html(单文件零外链)| 后端: rd_store.py > 附件: /home/ubuntu/docs/store/attachments/ | 前端: ~/.hermes/scripts/rd_store.html(单文件零外链)| 后端: rd_store.py
  
-===== 1. 核心业务流程(用户定稿 2026-08-28~30) =====+====== 1. 核心业务流程(用户定稿 2026-08-28~30) ======
  
 <code> <code>
Line 22: Line 22:
    ↓    ↓
 领料人台账:出库挂人名下,未抵消 = 出库总量 - 归还总量 - 销毁总量(销毁也抵消);最新记录在上 领料人台账:出库挂人名下,未抵消 = 出库总量 - 归还总量 - 销毁总量(销毁也抵消);最新记录在上
-<code>+</code>
  
-===== 2. 数据模型 =====+====== 2. 数据模型 ======
  
-  * **samples 表**(软删除):id/data(JSON)/deleted/deleted_at/created_at +- **samples 表**(软删除):id/data(JSON)/deleted/deleted_at/created_at 
-  * data 含:id/name/material_code(A+10位唯一)/model/spec/supplier{name,addr,phone}/waybill/qty/project/purpose/in_time/operator/photo/status(新样品|入库留样保存)/location/drawing/remark(备注追加不覆盖)/combine/units[](个体编号N1~Nn: no/status/pass_no/out_log[])/compose_pass/hist[](出入库历史含备注) +  - data 含:id/name/material_code(A+10位唯一)/model/spec/supplier{name,addr,phone}/waybill/qty/project/purpose/in_time/operator/photo/status(新样品|入库留样保存)/location/drawing/remark(备注追加不覆盖)/combine/units[](个体编号N1~Nn: no/status/pass_no/out_log[])/compose_pass/hist[](出入库历史含备注) 
-  * **requests 表**:申请记录(kind 出库|销毁 / sample_id/qty/units[](编号)/receiver/auditor/status/pass_no/settled(台账抵消)/settle_time/note(备注)) +- **requests 表**:申请记录(kind 出库|销毁 / sample_id/qty/units[](编号)/receiver/auditor/status/pass_no/settled(台账抵消)/settle_time/note(备注)) 
-  * **history 表**:出入库流水(note 含"审核批准,备注:xxx")+- **history 表**:出入库流水(note 含"审核批准,备注:xxx")
  
-===== 3. API 表 =====+====== 3. API 表 ======
  
 | API | 方法 | 说明 | | API | 方法 | 说明 |
-| ----- | ------ | ------ |+|-----|------|------|
 | /api/store/meta | GET | 人员(钉钉全量)+历史下拉(样品名/供应商/项目/用途/位置/型号/物料) | | /api/store/meta | GET | 人员(钉钉全量)+历史下拉(样品名/供应商/项目/用途/位置/型号/物料) |
 | /api/store/material?code= | GET | 按物料编码反查物料全部信息(唯一性定位) | | /api/store/material?code= | GET | 按物料编码反查物料全部信息(唯一性定位) |
Line 57: Line 57:
 | /api/store/upload | POST | 附件上传(照片/图纸) | | /api/store/upload | POST | 附件上传(照片/图纸) |
  
-===== 4. 关键规则 =====+====== 4. 关键规则 ======
  
-  * **物料编码**:A+10位数字,样品唯一标识;自动随机生成(去重50次)或手动录入;已有编码拒绝重复建档并显示该物料全部信息 +- **物料编码**:A+10位数字,样品唯一标识;自动随机生成(去重50次)或手动录入;已有编码拒绝重复建档并显示该物料全部信息 
-  * **个体编号**:数量 N → 生成 N1~Nn;出库按编号(默认顺序=最小在库编号),重新入库按编号匹配;追加数量编号顺延 +- **个体编号**:数量 N → 生成 N1~Nn;出库按编号(默认顺序=最小在库编号),重新入库按编号匹配;追加数量编号顺延 
-  * **准出编号**:ZC-YYYYMMDD-NNN,审核批准时生成;只有贴准出编号样品可做研发测试(测试才有效);**每次出库须重新申请生成新准出编号** +- **准出编号**:ZC-YYYYMMDD-NNN,审核批准时生成;只有贴准出编号样品可做研发测试(测试才有效);**每次出库须重新申请生成新准出编号** 
-  * **销毁**:按准出编号销毁(申请校验编号存在/未销毁/未归还+防重复申请);批准后该编号作废;**已销毁编号不可再销毁/重新入库/出库** +- **销毁**:按准出编号销毁(申请校验编号存在/未销毁/未归还+防重复申请);批准后该编号作废;**已销毁编号不可再销毁/重新入库/出库** 
-  * **台账抵消**:原样品/组合样品原物归库 → 各准出编号 settled=true;**未抵消 = 出库总量 - 归还总量 - 销毁总量**(销毁也抵消) +- **台账抵消**:原样品/组合样品原物归库 → 各准出编号 settled=true;**未抵消 = 出库总量 - 归还总量 - 销毁总量**(销毁也抵消) 
-  * **审核人默认武燕青**(所有申请表单自动填入,可改) +- **审核人默认武燕青**(所有申请表单自动填入,可改) 
-  * **销毁原因**写入销毁申请备注(审核中心可见) +- **销毁原因**写入销毁申请备注(审核中心可见) 
-  * **申请全部显示备注**(出库/销毁/入库,待审核+已处理列表均显示) +- **申请全部显示备注**(出库/销毁/入库,待审核+已处理列表均显示) 
-  * **备注**:出库申请"备注信息"贯穿样品历史/流水/台账;样品备注追加不覆盖 +- **备注**:出库申请"备注信息"贯穿样品历史/流水/台账;样品备注追加不覆盖 
-  * **库存只走出入库/销毁流程**;删除样品=软删除(历史保留可恢复) +- **库存只走出入库/销毁流程**;删除样品=软删除(历史保留可恢复) 
-  * **历史保护**:编辑只改白名单字段;SQLite+软删除+git 三重保障+- **历史保护**:编辑只改白名单字段;SQLite+软删除+git 三重保障
  
-===== 5. 部署与运维 =====+====== 5. 部署与运维 ======
  
 <code> <code>
Line 80: Line 80:
 测试隔离:STORE_DB=/tmp/store_test.db STORE_PORT=13599 venv/bin/python rd_store.py(独立实例,测完删库) 测试隔离:STORE_DB=/tmp/store_test.db STORE_PORT=13599 venv/bin/python rd_store.py(独立实例,测完删库)
 前端改完即生效(读文件);后端改完需重启 前端改完即生效(读文件);后端改完需重启
-<code>+</code>
  
-===== 6. 界面规范(永久保留,禁止回归) =====+====== 6. 界面规范(永久保留,禁止回归) ======
  
-  * **人员选择 = 文本框下拉列表**(2026-08-30 用户定稿):所有人员字段(操作人 iOp/bOrigOp/cOp/apOp、领料人 oRecv、审核人 oAud/dAud、申请人 dRecv)均用 combo 组件: +- **人员选择 = 文本框下拉列表**(2026-08-30 用户定稿):所有人员字段(操作人 iOp/bOrigOp/cOp/apOp、领料人 oRecv、审核人 oAud/dAud、申请人 dRecv)均用 combo 组件: 
-  * 下拉选项 = **钉钉通讯录全量**(/api/store/meta 的 people,实时拉取+快照兜底) +  - 下拉选项 = **钉钉通讯录全量**(/api/store/meta 的 people,实时拉取+快照兜底) 
-  * 点击/输入文本框 → 弹出下拉(输入即时过滤),**选择后自动收起**(comboDDs) +  - 点击/输入文本框 → 弹出下拉(输入即时过滤),**选择后自动收起**(comboDDs) 
-  * 下拉用普通流布局(不绝对定位)→ **不遮挡下方内容**,展开时推挤下方 +  - 下拉用普通流布局(不绝对定位)→ **不遮挡下方内容**,展开时推挤下方 
-  * 可自定义输入新人员(文本框) +  - 可自定义输入新人员(文本框) 
-  * 项目选择(iProj/oProj)同 combo 组件(历史项目列表) +- 项目选择(iProj/oProj)同 combo 组件(历史项目列表) 
-  * combo 绑定列表维护位置:fillDatalists() 中 `['iOp','oRecv','oAud','dRecv','dAud','bOrigOp','cOp','apOp']`——**新增人员字段必须同步加入此列表**(曾因 bOp 改名漏绑导致原样品/组合入库人员无下拉) +- combo 绑定列表维护位置:fillDatalists() 中 `['iOp','oRecv','oAud','dRecv','dAud','bOrigOp','cOp','apOp']`——**新增人员字段必须同步加入此列表**(曾因 bOp 改名漏绑导致原样品/组合入库人员无下拉) 
-  * **样品选择下拉:名称后不加括号内容**(曾导致用户无法选择编号);出库编号下拉只显示纯编号 +- **样品选择下拉:名称后不加括号内容**(曾导致用户无法选择编号);出库编号下拉只显示纯编号 
-  * ⚠️ **fillDatalists 必须用 setDL 安全填充**(元素不存在不报错)——曾因删除 hisMat datalist 导致 combo 绑定全部中断 +- ⚠️ **fillDatalists 必须用 setDL 安全填充**(元素不存在不报错)——曾因删除 hisMat datalist 导致 combo 绑定全部中断 
-  * ⚠️ **getElementById 赋值前必须判空**——销毁改准出编号后 dSamp 删除导致 renderSampSelect 中断、出库编号下拉空白(用户无法选编号) +- ⚠️ **getElementById 赋值前必须判空**——销毁改准出编号后 dSamp 删除导致 renderSampSelect 中断、出库编号下拉空白(用户无法选编号) 
-  * 页面禁缓存(meta no-cache + 服务端 no-store)——微信缓存旧 JS 曾导致下拉空白/样品不存在+- 页面禁缓存(meta no-cache + 服务端 no-store)——微信缓存旧 JS 曾导致下拉空白/样品不存在
  
-===== 7. 功能清单(2026-08-30 存档,只增不减) =====+====== 7. 功能清单(2026-08-30 存档,只增不减) ======
  
 | # | 模块 | 功能点 | | # | 模块 | 功能点 |
-| --- | ------ | -------- |+|---|------|--------|
 | 1 | 📦 样品档案 | 列表/搜索(名称编码型号位置+样品名下拉)/筛选(状态/项目)/详情(全部字段+图纸+备注+编号明细含转出记录+出入库历史)/软删除/✕删/+追加数量(编号顺延) | | 1 | 📦 样品档案 | 列表/搜索(名称编码型号位置+样品名下拉)/筛选(状态/项目)/详情(全部字段+图纸+备注+编号明细含转出记录+出入库历史)/软删除/✕删/+追加数量(编号顺延) |
 | 2 | ⬇️ 样品入库 | 全字段:名称(历史下拉)/物料编码(A+10位自动随机🔄/手动/反查确认显示物料信息)/型号/规格/图纸📄/供应商(名址电)/运单/数量(编号N1~Nn提示)/项目(下拉)/用途/时间/操作人(下拉)/状态/位置(下拉)/照片/备注 | | 2 | ⬇️ 样品入库 | 全字段:名称(历史下拉)/物料编码(A+10位自动随机🔄/手动/反查确认显示物料信息)/型号/规格/图纸📄/供应商(名址电)/运单/数量(编号N1~Nn提示)/项目(下拉)/用途/时间/操作人(下拉)/状态/位置(下拉)/照片/备注 |
Line 112: Line 112:
 | 11 | 🗄️ 数据 | SQLite 数据库(软删除保留历史)/附件上传(照片/图纸)/git 管理 | | 11 | 🗄️ 数据 | SQLite 数据库(软删除保留历史)/附件上传(照片/图纸)/git 管理 |
  
-===== 8. 改版验证清单(改完必查,防止功能丢失) =====+====== 8. 改版验证清单(改完必查,防止功能丢失) ======
  
 <code> <code>
Line 123: Line 123:
 ⑦ 数据不丢:SQLite 软删除 + git 提交 ⑦ 数据不丢:SQLite 软删除 + git 提交
 ⑧ 测试用独立库(STORE_DB/STORE_PORT),测完删库,生产零污染 ⑧ 测试用独立库(STORE_DB/STORE_PORT),测完删库,生产零污染
-<code>+</code>
  
-===== 9. 排障速查 =====+====== 9. 排障速查 ======
  
 | 现象 | 处理 | | 现象 | 处理 |
-| ------ | ------ |+|------|------|
 | 人员列表为空 | /api/store/meta;.env DINGTALK_CLIENT_ID/SECRET;ding_org.json 快照兜底 | | 人员列表为空 | /api/store/meta;.env DINGTALK_CLIENT_ID/SECRET;ding_org.json 快照兜底 |
 | 数据库只读 | chown ubuntu:ubuntu ~/docs/store/store.db | | 数据库只读 | chown ubuntu:ubuntu ~/docs/store/store.db |
研发库房管理/冷启动文件.1788127767.txt.gz · Last modified: by 127.0.0.1