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()