certflow.views.base_data_hub_widget 源代码

"""基础数据 hub 控件(阶段 B:查询中心「基础数据」标签内容)

替代独立的「基础数据维护」模态按钮,作为「查询与补充」堆叠页内「基础数据」标签的
内容。包含:

- 顶部「维护基础数据」按钮:打开现有 ``LookupTablesDialog`` 模态(材质/口径/型号→压力 CRUD)。
- 子标签(直接内嵌现有管理器视图,零重写):
  - 🧪 材质牌号(``MaterialGradeManagerView``)
  - 📐 口径映射(``CaliberMappingManagerView``)
  - 🔧 型号→压力(``ModelParamMappingManagerView``)
  - 📦 BOM零件牌号查询(``BomMaterialQueryView``,只读检索 + 回访源文件)

蓝图关联:``docs/BLUEPRINT_QUERY_UNIFY.md`` 阶段 B2/B4(基础数据 tab + 维护按钮 + BOM 子 tab)。
"""

from __future__ import annotations

import contextlib
from typing import Any

from PySide6.QtWidgets import (
    QHBoxLayout,
    QLabel,
    QPushButton,
    QTabWidget,
    QVBoxLayout,
    QWidget,
)

from certflow.controllers.bom_material_controller import BomMaterialController
from certflow.views.bom_material_query_view import BomMaterialQueryView
from certflow.views.caliber_mapping_manager_view import CaliberMappingManagerView
from certflow.views.lookup_tables_dialog import LookupTablesDialog
from certflow.views.material_grade_manager_view import MaterialGradeManagerView
from certflow.views.model_param_mapping_manager_view import ModelParamMappingManagerView


[文档] class BaseDataHubWidget(QWidget): """基础数据 hub:维护入口 + 四张只读/检索子标签。""" def __init__( self, db_manager: Any = None, session: Any = None, parent: QWidget | None = None, ) -> None: super().__init__(parent) self._db_manager = db_manager self._session = session self._init_ui() def _init_ui(self) -> None: layout = QVBoxLayout(self) layout.setContentsMargins(10, 10, 10, 10) layout.setSpacing(8) # —— 顶部维护入口 —— top = QHBoxLayout() maintain_btn = QPushButton("🛠 维护基础数据") maintain_btn.setToolTip("打开材质牌号 / 口径映射 / 型号→压力 的 CRUD 对话框") maintain_btn.clicked.connect(self._open_maintain) top.addWidget(maintain_btn) hint = QLabel("材质牌号 / 口径映射 / 型号→压力 维护;BOM 零件牌号查询为只读检索。") hint.setStyleSheet("font-size: 11px; color: #666;") top.addWidget(hint, stretch=1) layout.addLayout(top) # —— 子标签 —— tabs = QTabWidget() tabs.addTab( MaterialGradeManagerView( db_manager=self._db_manager, session=self._session, dict_key="material_grades", parent=self, ), "🧪 材质牌号", ) tabs.addTab( CaliberMappingManagerView( db_manager=self._db_manager, session=self._session, dict_key="caliber_mappings", parent=self, ), "📐 口径映射", ) tabs.addTab( ModelParamMappingManagerView( db_manager=self._db_manager, session=self._session, dict_key="model_param_mappings", parent=self, ), "🔧 型号→压力", ) self._bom_view = BomMaterialQueryView( db_manager=self._db_manager, session=self._session, controller=BomMaterialController(db_session=self._session, db_manager=self._db_manager), parent=self, ) tabs.addTab(self._bom_view, "📦 BOM零件牌号查询") layout.addWidget(tabs, stretch=1)
[文档] def refresh(self) -> None: """刷新内嵌子标签(导入完成后由查询中心调用,修复 BOM 查询陈旧/双倍)。""" with contextlib.suppress(Exception): self._bom_view.refresh()
def _open_maintain(self) -> None: dlg = LookupTablesDialog( db_manager=self._db_manager, session=self._session, parent=self, ) dlg.exec()