From fa70f6209992a08f7dff5d2371578514dfb72e30 Mon Sep 17 00:00:00 2001 From: liangweihao <734499798@qq.com> Date: Sat, 27 Dec 2025 18:59:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8E=9F=E6=96=99=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 库存跟踪表格设置为只读模式,防止误编辑 - 添加"编辑剩余库存"功能,支持直接修改库存数量 - 实现逻辑删除机制,删除操作不再物理删除数据 - 在 fabric_stock_in 和 fabric_consumption 表添加 is_deleted 字段 - 所有删除操作改为标记删除,保留历史数据 - 查询时自动过滤已删除记录 - 原料编辑支持修改型号 - 型号字段改为可编辑 - 保存时检查型号重复并提示 - 型号修改时级联更新所有关联表 - 优化操作列宽度,确保按钮文本完整显示 - 改进警告提示,明确说明操作影响 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- database.py | 12 +- fabric_library.db | Bin 98304 -> 98304 bytes raw_material_dialog.py | 296 +++++++++++++++++++++++++++++------------ 3 files changed, 225 insertions(+), 83 deletions(-) diff --git a/database.py b/database.py index 05f95aa..962cdde 100644 --- a/database.py +++ b/database.py @@ -143,7 +143,17 @@ class DatabaseManager: conn.execute("ALTER TABLE fabric_consumption ADD COLUMN updated_at DATETIME DEFAULT CURRENT_TIMESTAMP") except: pass - + + # 添加逻辑删除字段 + try: + conn.execute("ALTER TABLE fabric_stock_in ADD COLUMN is_deleted INTEGER DEFAULT 0") + except: + pass + try: + conn.execute("ALTER TABLE fabric_consumption ADD COLUMN is_deleted INTEGER DEFAULT 0") + except: + pass + # 数据迁移:将fabrics表中category字段的"类目-类型"格式拆分成两个字段 try: cursor = conn.execute("SELECT model, category FROM fabrics WHERE category LIKE '%-%' AND (fabric_type IS NULL OR fabric_type = '')") diff --git a/fabric_library.db b/fabric_library.db index 7451beaf62d089546a36b88fa1647284c2588cd5..016e8ba32e0788808dee6cc68a547c664c8a23d6 100644 GIT binary patch delta 1321 zcmb7ET}TvB6ux)v&aSh%9@n4LM4Ba3NX_}#)f@s@$QDym(!`h8Mt99cT|>8oKoZJ+ zsE1-nGoOrJ?B_vOR0Mm>hh8Ge_b^wAz?78Gi0+KK>n=ugVIJn2@1FCWbG|bJ1IB>? zrvgXb4$TT+rOaCWCeu2BB3yYFC69_Aay|W*xyctcR@iVaQ4#8Cc6^(8Q{mAPfr# z7O0$gaFt;*()z}w(G*TeTA2v#*YNj57Wjq;j3XF_MR-kvje?qnNg-}iTY7x0?%qIm zYlqwCCx-|T_rTU}fA5v9%K=}vpQJOSguA5nbb0*&cb6LQ_W0D!UMer0iwmLEgkhW3 zMBBRxR)q9Y4u+j^uxW=aO};bmMhx=^=Bd~*a5pd<0-S9Vsac5b5+|X(;IeHNS>~j8 z-|Xv(C@2nD5rjC%u1JoZT!5>@XP45M50&YMe?g zfAMoOaWYGCKHbs$Y}(9C3cvV;m{^$kISsjhRx$B^XW;+C|9!LIf>-nc|SyE)q$HVxMKj7ggX1)LbUI;_OlMfLSLCa6z8@5U&){jwY5Hdd}SIU#m& xLqo>y^z8 0: + conn.execute( + """ + INSERT INTO fabric_stock_in + (model, quantity, unit, purchase_date, note, is_deleted) + VALUES (?, ?, ?, ?, ?, 0) + """, + ( + model, + new_remaining, + unit, + datetime.now().strftime('%Y-%m-%d'), + "手动编辑库存" + ) + ) + + conn.commit() + + QMessageBox.information( + self, + "成功", + f"{model} 的剩余库存已更新为 {new_remaining:.3f} {unit}" + ) + self.load_stock_table() + + except Exception as e: + QMessageBox.critical(self, "错误", f"保存失败: {str(e)}") \ No newline at end of file