|
|
4b1a86a870
|
fix: 对齐field_to_perm与sys_element权限码 + 税率6% + 含税总价反算
- buy/semi/product: 数量字段映射对齐sys_element实际注册码(qty_inbound/qty_stock/qty_available)
- 数据库: 补全buy(9)+semi(10)+product(13)缺失权限码
- deploy_production.sql: 同步更新
- buy.vue: 税率新增6%选项, 价格联动以含税为主输入, 税率变化保持最后编辑价格不变
- buy.vue: 新增含税总价可输入反算功能
|
2026-07-15 15:03:37 +08:00 |
|
|
|
0651eb07fa
|
fix: 彻底解耦出库/借库权限联动 + 路由去硬编码roles + 补API权限保护
根因: 借库选单页面14处硬编码outbound_selection:operation, 导致两模块权限联动
修复:
- borrow/apply: 14处outbound_selection:operation→op_borrow_apply:operation
- stock.py: 拆分_do_get_stock_list裸逻辑, 出库/借库各绑独立权限码
- transactions: 新增/borrow/stock-list端点(@permission(op_borrow_apply))
- transaction.ts: 新增getBorrowStockList前端API函数
- outbound.py: 出库审批4端点改用独立outbound_approval权限码
- transactions.py: 借库审批3端点补@permission(op_borrow_approval)
- purchase.py: 采购管理7端点补@permission(inbound_buy)
- audit.py: 审计日志补@permission(system_audit)
- router: 清除全部6处硬编码roles, 交由动态权限树控制
|
2026-07-15 14:33:11 +08:00 |
|
|
|
9988d1b7eb
|
fix: 补全审计/出库审批/采购管理/借库审批的权限保护+公司隔离
- audit.py: 补@permission_required(system_audit)+import, 审计日志通过split_part关联用户表过滤公司
- outbound.py: 出库审批5个端点全补@permission_required(outbound_list)
- purchase.py: 采购管理7个端点全补@permission_required(inbound_buy)
- borrow_service: 借库审批列表通过applicant_id关联用户表过滤公司
- outbound_service: 出库审批列表通过applicant_id关联用户表过滤公司
- purchase_service: 采购列表通过base_id+requester_id双路过滤公司
- base_service/search_material: 去除debug日志
- decorators: 去除debug日志
|
2026-07-15 11:49:53 +08:00 |
|
|
|
e1417d740a
|
feat: 全模块公司隔离 + crossDomain权限码动态跨域控制
- get_current_company_filter: 新增_has_cross_domain_permission, 权限码替代硬编码
- 补全11个Service的get_current_company_filter调用(semi/product/service/outbound/bom/trans/scrap/summary)
- base/search修复: search_material此前无隔离, 已补全
- get_current_company_filter兜底: JWT缺company_name时返回__NO_COMPANY__防止放行
- permission.py: _get_operator_company补全返回值, 修复权限页保存逻辑
- 新增crossDomain迁移脚本, element_type=element挂system_mgmt下
|
2026-07-15 11:11:40 +08:00 |
|
|
|
d75c301556
|
fix: batch_create_user 补上缺失的 permission_required(system_user:operation)
|
2026-07-15 09:22:58 +08:00 |
|
|
|
68fd93b457
|
fix: BOM跳转恢复 + 采购单导入优化 + 基础信息表单禁用守卫
- BOM: 移除父件/子件跳转按钮的 isReadOnlyMode 限制, 任何模式均可跳转
- BOM: 补全缺失的5个权限码(sys_element + sys_role_permission)
- 采购单导入: supplier_link→detail_link, 新增采购人/邮箱自动填充
- 采购单导入: 实时搜索(300ms防抖)+模糊匹配, 保留搜索按钮
- 采购单导入: 移除原始/详情链接的历史 autocomplete
- 基础信息: el-form 增加 formDisabled, 无 material_list:operation 时全局禁用
- /approved-unstocked API 增加 permission_required(inbound_buy)
- PurchaseRequest.to_dict() 增加 requester_email
|
2026-07-14 17:02:07 +08:00 |
|
|
|
8f468a0a39
|
fix: 修复全局字段权限导致数据显示为空的问题
根因: /permissions/role/<role_code> 接口要求 system_permission,
非管理员角色无法获取自身权限 → 权限数组为空 → 前后端字段全被过滤
修复:
- permission.py: 查自己角色不再需要 system_permission, 解除权限死锁
- 5个 inbound API: 恢复完整 field_to_perm 映射, 每个字段均可独立权限管控
- 补齐遗漏字段(qty_inbound/qty_stock/qty_available/request_id/request_no)
- buy.vue: 入库表单价格字段加入 hasFormFieldPermission 守卫
|
2026-07-14 16:09:41 +08:00 |
|
|
|
a11b7972c3
|
feat: 打通采购申请与入库的按单入库链路
后端变更:
- PurchaseRequest 新增 base_id 硬关联 MaterialBase,StockBuy 新增 request_id 关联采购单
- handle_inbound 支持 request_id 入参,入库后自动反写采购单状态为已完成
- 新增 get_approved_requests 接口,返回已审批未入库采购单列表(含物料信息+历史数据回退匹配)
- create_purchase_request 新增 name+spec_model 自动匹配 MaterialBase
- 新增 SQL 和 Alembic 数据库迁移脚本
前端变更:
- 入库表单新增"从采购单导入"弹窗,支持搜索/选中已审批采购单并一键填充物料和商务信息
- 单价/总价交叉推算,缺项自动补全
- 选中行蓝色高亮+点击整行选中,行级交互优化
|
2026-07-14 15:25:00 +08:00 |
|
|
|
760f78e016
|
feat: 添加参考价格列 + 修复公司筛选跨域问题 + CLIP模型持久化
## 新增功能
- material_base 表新增 reference_price 列(NUMERIC(10,2))
- 基础信息 list.vue / buyOdoo.vue 页面增加「参考价格」列展示和编辑
- 新增 material_list:referencePrice 权限元素,支持按角色控制可见性
## Bug 修复
- 入库三页面(buy/product/semi)公司筛选:非超管用户 company=ALL 不再传给旧版后端
- 基础信息两页面(list/buyOdoo):buyOdoo 增加 v-if=isSuperAdmin 与 list.vue 行为统一
- company=ALL 默认值在各页面 getList/fetchData 中自动过滤,兼容旧版后端
## 运维优化
- docker-compose.prod.yml 增加 models_prod 卷挂载,CLIP模型持久化免重复上传
- deploy_code.sh 增加 models_prod 目录检查与模型文件存在性告警
|
2026-07-13 17:30:52 +08:00 |
|
|
|
4f5965db02
|
feat: JWT多租户数据权限隔离 & 主管系统管理权限 & 含税单价补齐
## 多租户公司数据隔离
- 新增 get_current_company_filter() 工具函数 (decorators.py)
SUPER_ADMIN: 可传company_name参数过滤或传ALL看全量
其他角色: 强制隔离到JWT中的company_name
- 重构 base_service.py / buy_service.py: 用集中式函数替换内联公司过滤
- SysRolePermission 表新增 company_name 字段,支持同角色不同公司权限
- get_user_permissions() 新增 company_name 参数,查公司定制+全局模板权限
- permission.py API 新增 @permission_required 拦截 + 公司过滤
- 19个API/service文件传递 company_name 到权限查询
## 主管系统管理权限
- delete_user() 允许SUPERVISOR删除同公司用户 (原仅SUPER_ADMIN)
- get_all_users() 新增 company_name 参数过滤
- 用户列表/权限分配 API 应用 get_current_company_filter()
- 前端 UserCreate.vue: 超管可见公司下拉框,主管隐藏部门字段
## 前端多租户适配
- material/list.vue / buy.vue: 公司下拉框仅超管可见,默认ALL
- UserCreate.vue: 新增搜索栏公司筛选,部门字段按角色显隐
- auth.ts: getUserList() 支持 params 参数
## Bug修复: 含税单价字段补齐
- buy.vue: 表格列/高级筛选/排序/权限映射新增 post_tax_unit_price
- buy_service.py: allowed_fields/sort_field_map 新增 post_tax_unit_price
|
2026-07-13 15:12:22 +08:00 |
|
|
|
c1092407ad
|
V3.50
|
2026-06-25 15:21:43 +08:00 |
|
|
|
1450e6c1de
|
fix(借还记录列表): 按 borrow_no 单号维度分页 + 修 SQLAlchemy Row 适配错误
- 分页基准从明细行改为单号:21 项单号不再被拆到 3 页
- 步骤 1a 构造 GROUP BY borrow_no 的 subquery(sort_key + status 聚合)
- 步骤 2 主查询 SELECT order_subq.c.borrow_no 一列,避免触发 PG GROUP BY 严格模式 (f405)
- 步骤 3 用 page_borrow_nos 拉明细,保留前端 groupMap 期望的 items 形态
- pagination.items 用 isinstance + hasattr(_mapping) 兜底提取纯字符串(修 psycopg2 can't adapt type 'Row')
- service 加 try-except,路由层识别 500 透传 traceback
- status 过滤改为单号聚合(borrowed=至少一条未还,returned=全部归还)
|
2026-06-16 14:53:42 +08:00 |
|
|
|
83b3db693a
|
fix(借库扫码出库): 校验 key 从 (source_table, sku) 改为 (name, spec_model) + N+1 修复
- 借库申请按 (name, spec_model) 发起,审批明细无 sku 字段;
旧代码用 sku 做 key 会导致所有条目坍塌到同一桶,校验形同虚设
- 改为在扫码循环内即时累加、即时拦截:
防线4 锁定 stock 行后从 material_base 取真实 (name, spec_model),
与审批单按 strip 后的 (name, spec_model) 聚合比对
- 新增 joinedload(ModelClass.base) 一次 JOIN 加载 base,
避免循环内 stock.base 触发 N+1
- 修正 dispatch_borrow docstring 中"sku 用于超额交叉校验"的错误描述
|
2026-06-16 13:50:49 +08:00 |
|
|
|
bfeb397c4a
|
fix(借库扫码出库): items 字段名 stock_id → id 修复 400 + dispatch_borrow docstring 补全 sku 字段说明
|
2026-06-16 13:38:51 +08:00 |
|
|
|
941bd20fbd
|
fix(借库审批): borrow_service pytz时区修复 + transactions except块traceback增强
|
2026-06-12 14:06:17 +08:00 |
|
|
|
c7b84ff3c6
|
fix: BOM草稿模块缺陷修复(事务回滚 + 外键约束 + 前端状态清理)
|
2026-06-10 11:30:07 +08:00 |
|
|
|
8a2da1ac1e
|
半成品/成品入库:BOM 编号下拉按父件规格联动过滤(前后端双端改造)
- 后端 /inbound/{semi,product}/search-bom 增加 parent_spec 可选参数,Service 层在 MaterialBase.spec_model 上加等值过滤
|
2026-06-04 16:01:48 +08:00 |
|
|
|
bac670ef7a
|
基础信息页:计量单位改 el-select(下拉历史+手动输入);表单排版重排为 4 行(类别占满行);类别末级英文后缀自动填规格型号
|
2026-06-04 13:22:51 +08:00 |
|
|
|
f18dfd9819
|
新增 /cascade-inventory 级联库存缺口查询接口,供 AI 调用 BOM 出库缺口分析
|
2026-06-01 09:59:48 +08:00 |
|
|
|
fb5b8d873b
|
版本变更V3.35将图像的处理统一更换到新表当中
|
2026-05-26 11:28:26 +08:00 |
|
|
|
92e1f7275e
|
feat: 以图搜图返回 business_data 包含 name/spec_model/url,支持详情页跳转
|
2026-05-25 17:52:03 +08:00 |
|
|
|
3ffcd35093
|
版本变更V3.31添加识图功能
|
2026-05-22 11:40:35 +08:00 |
|
|
|
8c635d6afe
|
版本变更V3.31添加识图功能
|
2026-05-22 10:59:39 +08:00 |
|
|
|
c273f5a9d9
|
feat: 以图搜图功能升级(跨表UNION检索 + 拍照识图入口 + 批量向量初始化脚本)
|
2026-05-21 15:43:45 +08:00 |
|
|
|
1a7c06f197
|
feat: 添加以图搜图功能(CLIP ONNX + pgvector)+ Dify会话修复 + 版本升至V3.30
|
2026-05-21 14:09:57 +08:00 |
|
|
|
4d81056075
|
feat: 实现异步导出骨架(Threading + Redis 状态流转),支持 POST 提交/轮询状态/下载文件
|
2026-05-19 10:35:33 +08:00 |
|
|
|
c60112f5f8
|
perf: 引入 Redis Cache-Aside 模式优化 BOM 读取,TTL=12h,写操作后主动失效缓存
|
2026-05-19 10:14:55 +08:00 |
|
|
|
cf55c94826
|
feat: 库存接口增加 ai_mode=true 极简返回模式,键名压缩为 n/s/c
|
2026-05-19 09:53:06 +08:00 |
|
|
|
d736d5d4a9
|
fix: 彻底移除 op_records 字段级权限过滤,所有字段对普通角色可见
|
2026-05-15 10:40:53 +08:00 |
|
|
|
27683d2a8b
|
fix: 借用记录列表移除 sku 字段的权限过滤,所有角色均可正常查看
|
2026-05-15 09:57:55 +08:00 |
|
|
|
1a76c4853e
|
feat(purchase): 物料搜索分页+价格半联动+图片必填校验
|
2026-05-12 17:48:29 +08:00 |
|
|
|
9dfcb93146
|
feat(purchase): 新增采购申请模块后端(模型+Service+API路由)
|
2026-05-12 16:33:18 +08:00 |
|
|
|
6b4ebfa24f
|
feat(upload): 上传组件删除前需二次确认,支持ZIP/RAR/7Z压缩包上传
|
2026-05-12 15:34:26 +08:00 |
|
|
|
3dae206828
|
feat(outbound): 完善出库审批邮件通知逻辑,支持申请人与审批人同时收到邮件(带物料明细),审批通过后申请人和库管均收到带物料明细的通知
|
2026-05-12 13:42:15 +08:00 |
|
|
|
259f3a7e0d
|
4.29扫码获取库位小工具接口
|
2026-04-29 15:40:43 +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 |
|
|
|
a849e14b2c
|
refactor(orm): 将所有的批量 delete/update 重构为对象级操作,以确保触发 SQLAlchemy 审计事件
|
2026-04-20 15:43:48 +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 |
|
|
|
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 |
|
|
|
c7ac092be4
|
feat(material): add global floating helper to track latest specification codes with smart grouping
|
2026-04-13 08:28:27 +08:00 |
|