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下
This commit is contained in:
yueli
2026-07-15 11:11:40 +08:00
parent 56edb92d80
commit e1417d740a
14 changed files with 186 additions and 14 deletions

View File

@ -15,7 +15,7 @@ from openpyxl.utils import get_column_letter
class InboundSummaryService:
@staticmethod
def get_list(page=1, per_page=10, keyword=None, start_date=None, end_date=None, source_type=None):
def get_list(page=1, per_page=10, keyword=None, start_date=None, end_date=None, source_type=None, company=None):
"""
聚合查询:
1. 联合 StockBuy, StockSemi, StockProduct 三张表
@ -126,6 +126,10 @@ class InboundSummaryService:
if source_type:
query = query.filter(cte.c.source_type == source_type)
# 公司过滤(跨域选择器传入)
if company:
query = query.filter(MaterialBase.company_name == company)
# =========================================================
# 5. 获取总数
# =========================================================
@ -139,6 +143,8 @@ class InboundSummaryService:
count_query = count_query.filter(cte.c.inbound_date.between(start_date, end_date))
if source_type:
count_query = count_query.filter(cte.c.source_type == source_type)
if company:
count_query = count_query.filter(MaterialBase.company_name == company)
total = count_query.scalar() or 0
@ -218,7 +224,7 @@ class InboundSummaryService:
raise e
@staticmethod
def export_excel(keyword=None, start_date=None, end_date=None, source_type=None):
def export_excel(keyword=None, start_date=None, end_date=None, source_type=None, company=None):
"""
导出入库记录 Excel
"""
@ -304,6 +310,9 @@ class InboundSummaryService:
if source_type:
query = query.filter(cte.c.source_type == source_type)
if company:
query = query.filter(MaterialBase.company_name == company)
# 排序
query = query.order_by(desc(cte.c.inbound_date), asc(cte.c.sku))