certflow.views.model_param_mapping_manager_view 源代码

"""型号参数对照表管理界面

可视化维护 model_param_mappings 表(产品型号 → 压力 / 试压标准 / 工作温度 / 适用介质)。
复用通用基类 ``LookupTableManagerView``,本模块仅声明列/字段定义。

字段维度说明:
- product_model:产品型号(如 Z41H-25C),唯一
- pressure_value:公称压力值(如 2.5MPa / 150Lb)
- test_standard:试压标准号(如 GB/T 13927-2008)
- working_temp:工作温度(如 ≤425℃)
- working_medium:适用介质(如水、蒸汽)
- source:来源(manual/auto_learn/import)
"""

from __future__ import annotations

from typing import Any

from PySide6.QtWidgets import QMessageBox

from certflow.controllers.model_param_mapping_controller import (
    ModelParamMappingController,
)
from certflow.utils.logger import logger
from certflow.views.bases.lookup_table_manager_view import (
    ColumnSpec,
    FieldSpec,
    LookupTableManagerView,
)

_COLUMNS = [
    ColumnSpec("ID", "id", False),
    ColumnSpec("产品型号", "product_model"),
    ColumnSpec("公称压力", "pressure_value"),
    ColumnSpec("试压标准", "test_standard"),
    ColumnSpec("工作温度", "working_temp"),
    ColumnSpec("适用介质", "working_medium"),
    ColumnSpec("来源", "source"),
    ColumnSpec("使用次数", "usage_count", field_type="int"),
]

_EDIT_FIELDS = [
    FieldSpec("product_model", "产品型号 *", required=True, placeholder="如 Z41H-25C"),
    FieldSpec("pressure_value", "公称压力", placeholder="如 2.5MPa / 150Lb"),
    FieldSpec("test_standard", "试压标准", placeholder="如 GB/T 13927-2008"),
    FieldSpec("working_temp", "工作温度", placeholder="如 ≤425℃"),
    FieldSpec("working_medium", "适用介质", placeholder="如水、蒸汽"),
    FieldSpec(
        "source",
        "来源",
        field_type="choice",
        choices=["manual", "auto_learn", "import"],
        default="manual",
    ),
]


[文档] class ModelParamMappingManagerView(LookupTableManagerView): """型号参数对照表管理对话框(通用基类 + 型号对照专属配置)""" def __init__( self, db_manager: Any = None, session: Any = None, dict_key: str | None = "model_param_mappings", parent: Any = None, ) -> None: """初始化管理对话框 Args: db_manager: 数据库管理器(优先) session: 外部会话(与 db_manager 二选一) dict_key: 字典键名(``dictionary.<key>.csv``),缺省 ``model_param_mappings`` parent: 父窗口 """ if db_manager is not None: controller = ModelParamMappingController(db_manager=db_manager) else: controller = ModelParamMappingController(db_session=session) super().__init__( controller=controller, columns=_COLUMNS, edit_fields=_EDIT_FIELDS, title="型号→压力", window_title="型号参数对照管理", extra_actions=[("📥 载入示例", self._on_seed, False)], dict_key=dict_key, table_key="model_param", parent=parent, ) def _on_seed(self) -> None: """载入常见型号→压力示例(幂等,库非空则跳过)""" try: count = self._controller.seed_common_models() except Exception as e: logger.error(f"载入示例失败: {e}") QMessageBox.critical(self, "错误", f"载入示例失败: {e}") return if count == 0: QMessageBox.information(self, "提示", "库中已有数据,未重复写入。") else: QMessageBox.information(self, "成功", f"已载入 {count} 条示例数据。") self.refresh()