|
|
259f3a7e0d
|
4.29扫码获取库位小工具接口
|
2026-04-29 15:40:43 +08:00 |
|
|
|
00839863f5
|
4.29出库审批流程完善,通知申请人以及库管邮件功能
|
2026-04-29 09:11:37 +08:00 |
|
|
|
8276597a67
|
fix(email): 审批通知逻辑重构 - 通过时同时通知库管和申请人,驳回仅通知申请人;精简 DEBUG 日志
|
2026-04-29 09:10:34 +08:00 |
|
|
|
ccbce82c2e
|
fix(email): 审批通过后库管通知增加明细+DEBUG日志,修复MAIL_DEFAULT_SENDER格式问题
|
2026-04-28 16:46:12 +08:00 |
|
|
|
183b93012e
|
4.28
|
2026-04-28 16:07:11 +08:00 |
|
|
|
62c0e3738e
|
fix(outbound+trans): 修复POST接口错误数据清洗导致的sku/quantity字段被清除Bug,并新增出库审批工作流全链路
|
2026-04-28 16:02:34 +08:00 |
|
|
|
e08eaff40a
|
feat(outbound): 库存列表按规格+库位聚合 + BOM明细类型修复
|
2026-04-28 09:23:59 +08:00 |
|
|
|
40e405becd
|
4.27
|
2026-04-27 16:33:54 +08:00 |
|
|
|
d6ae9499db
|
feat: 新增首页全局搜索功能,支持跨模块多词搜索
|
2026-04-27 15:57:26 +08:00 |
|
|
|
48f2011a38
|
fix: 盘点草稿已盘数量统计兼容字段名 quantity
|
2026-04-24 13:32:46 +08:00 |
|
|
|
996056d46a
|
fix: 修复库存盘点已盘数量卡在500的问题
|
2026-04-24 13:19:57 +08:00 |
|
|
|
f0c200a15f
|
fix: delete_bom use .all() instead of .first() to delete all child records
|
2026-04-24 11:42:42 +08:00 |
|
|
|
3c9cb06dbc
|
fix: save_bom add db.session.flush() to fix unique constraint conflict
|
2026-04-23 13:34:41 +08:00 |
|
|
|
1205d9c7e8
|
feat(audit): 优化审计日志的人性化展示
|
2026-04-22 10:44:13 +08:00 |
|
|
|
4b794b9bcc
|
feat(audit): 添加全局无侵入审计日志拦截器
|
2026-04-22 10:41:15 +08:00 |
|
|
|
f8f5b05d7d
|
refactor(audit): 废弃装饰器+分离架构,改为监听器单体直写入库
|
2026-04-20 16:04:01 +08:00 |
|
|
|
a849e14b2c
|
refactor(orm): 将所有的批量 delete/update 重构为对象级操作,以确保触发 SQLAlchemy 审计事件
|
2026-04-20 15:43:48 +08:00 |
|
|
|
7e72c12f30
|
fix(audit): 修复 decorators.py 中缺失 has_request_context 导入导致的致命 NameError
|
2026-04-20 15:10:12 +08:00 |
|
|
|
decb7f5e1f
|
debug(audit): 添加X光调试-追踪断点
|
2026-04-20 15:01:20 +08:00 |
|
|
|
1c8def7e6f
|
refactor(audit): 分离架构-监听器计算装饰器入库
|
2026-04-20 14:41:40 +08:00 |
|
|
|
381d1fa675
|
feat(audit): 平滑升级-监听器+装饰器共存,装饰器自动检测并跳过已处理日志
|
2026-04-20 13:15:25 +08:00 |
|
|
|
becd3cb010
|
审计日志修改完善
|
2026-04-20 11:39:28 +08:00 |
|
|
|
7d683f3e65
|
fix: implement strict regex validation (no pure numbers, no special chars) on both frontend user creation form and backend auth service
|
2026-04-17 13:33:51 +08:00 |
|
|
|
772f3f45f4
|
feat(profile): implement independent email update dialog to prevent accidental password resets during partial updates
|
2026-04-17 12:48:30 +08:00 |
|
|
|
d651d19e86
|
feat(system): implement robust batch user creation integrating existing pinyin logic and backend duplication prevention
|
2026-04-17 12:16:45 +08:00 |
|
|
|
8291a89898
|
feat(backend): apply global cross-company data isolation logic across all inbound, outbound, and stock services
|
2026-04-17 09:57:00 +08:00 |
|
|
|
bd93a3d70b
|
feat: implement clean global cross-organization permission node and backend service isolation logic
|
2026-04-17 08:59:55 +08:00 |
|
|
|
477da7c434
|
fix-security-correct-field-permission-mapping-and-403-denial
|
2026-04-14 15:37:39 +08:00 |
|
|
|
ae05f3bb75
|
fix-security-field-permission-matching
|
2026-04-14 15:09:15 +08:00 |
|
|
|
ae1fd1afd4
|
fix-security-permission-codes
|
2026-04-14 14:49:53 +08:00 |
|
|
|
db077a6033
|
fix(security): resolve incorrect field-level desensitization causing null values for authorized columns
|
2026-04-14 09:28:46 +08:00 |
|
|
|
c91f8ec693
|
fix(auth): prevent AttributeError when querying permissions for users with no role
|
2026-04-14 08:56:47 +08:00 |
|
|
|
0e8ddd0851
|
feat(security): implement strict row-level data isolation based on user company
|
2026-04-14 08:38:50 +08:00 |
|
|
|
6aa2142f01
|
refactor(material): implement contiguous sequence grouping for specs with count-based descending sort
|
2026-04-13 09:14:59 +08:00 |
|
|
|
c7ac092be4
|
feat(material): add global floating helper to track latest specification codes with smart grouping
|
2026-04-13 08:28:27 +08:00 |
|
|
|
e23e8c6a9e
|
fix(scrap): resolve material names, specs and operator names in list query
|
2026-04-09 17:49:51 +08:00 |
|
|
|
454f9b1184
|
feat(scrap): integrate repair items into physical scrap scanning flow and lock manual status
|
2026-04-09 09:53:20 +08:00 |
|
|
|
f4d14f718d
|
refactor(repair): strictly gate 'Already Outbound' status to system-only trigger
|
2026-04-09 09:12:42 +08:00 |
|
|
|
48efbed46b
|
feat(repair): add quick status filters, mandatory validations, FIFO sorting, and hide actions on finished orders
|
2026-04-09 09:04:05 +08:00 |
|
|
|
0a9c8cd39c
|
fix(repair): add edit action, mandatory validations, default date, and fix outbound SN mapping
|
2026-04-09 08:49:50 +08:00 |
|
|
|
09936cb045
|
fix(outbound): integrate TransRepair into global barcode scanning and outbound checkout flow
|
2026-04-09 08:38:48 +08:00 |
|
|
|
3085d9f447
|
feat(repair): decouple material base, sync global sku sequence and add scan/print features
|
2026-04-08 19:36:14 +08:00 |
|
|
|
41b5118ecd
|
feat(repair): implement backend CRUD services and API routes with RBAC permissions for repair module
|
2026-04-08 18:34:48 +08:00 |
|
|
|
ec468b266d
|
refactor(repair): upgrade TransRepair model with base_id, status, and SN for independent operation
|
2026-04-08 18:23:22 +08:00 |
|
|
|
4df471add2
|
fix(inbound): correct date attributes for StockProduct and StockSemi in history location query
|
2026-04-08 17:45:29 +08:00 |
|
|
|
4a4baa2f8f
|
fix: sort warehouse tree by name, fix tree batch delete cascade, and implement safe history location autofill
|
2026-04-08 17:32:00 +08:00 |
|
|
|
f612c47143
|
fix(filter): append 23:59:59 to end_date to resolve midnight truncation bug in date range queries
|
2026-04-07 17:39:14 +08:00 |
|
|
|
5ea2be58ae
|
fix(filter): globally apply not_contains operator parsing to all stock and inbound queries
|
2026-04-07 17:32:27 +08:00 |
|
|
|
6d80c90b66
|
feat: add 'not contains' operator, implement inbound record export, and verify export filter rules
|
2026-04-07 17:23:00 +08:00 |
|
|
|
30ab1c186c
|
fix: filter zero quantity items in inventory export and add batch/sn traceability to outbound record details
|
2026-04-07 16:41:53 +08:00 |
|