"""型号参数对照表管理界面
可视化维护 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()