这次增加了测试结果导出到EXCEL、项目阶段需要安装定义的表格中的name PN来处理
This commit is contained in:
@@ -13,6 +13,14 @@ from PyQt5.QtWidgets import (
|
||||
QTextEdit, QPushButton, QLabel, QWidget
|
||||
)
|
||||
from PyQt5.QtCore import Qt
|
||||
import requests
|
||||
|
||||
# 尝试导入配置
|
||||
try:
|
||||
from config import USE_HTTP_API, HTTP_API_BASE_URL
|
||||
except ImportError:
|
||||
USE_HTTP_API = False
|
||||
HTTP_API_BASE_URL = "http://127.0.0.1:5050"
|
||||
|
||||
|
||||
class DUTFormDialog(QDialog):
|
||||
@@ -26,12 +34,20 @@ class DUTFormDialog(QDialog):
|
||||
self.setModal(True)
|
||||
self.resize(800, 480)
|
||||
|
||||
# HTTP API 配置
|
||||
self.use_http_api = USE_HTTP_API
|
||||
self.api_base_url = HTTP_API_BASE_URL
|
||||
|
||||
# 机台数据缓存
|
||||
self.machines = []
|
||||
self.current_machine = None
|
||||
|
||||
# 项目阶段数据缓存
|
||||
self.project_phases = [] # 存储从后端获取的项目阶段列表
|
||||
|
||||
self._build_ui()
|
||||
self._load_machines() # 加载机台数据
|
||||
self._load_project_phases() # 加载项目阶段数据
|
||||
self._fill_form(self.dut_form)
|
||||
self._apply_lock()
|
||||
|
||||
@@ -62,7 +78,7 @@ class DUTFormDialog(QDialog):
|
||||
self.input_testReq = QLineEdit()
|
||||
self.input_phase = QComboBox()
|
||||
self.input_phase.setEditable(True)
|
||||
self.input_phase.addItems(["A Sample", "B Sample", "C Sample", "Work Sample", "阶段1", "阶段2"]) # 示例项
|
||||
# 项目阶段选项将在 _load_project_phases() 中从后端加载
|
||||
|
||||
# 右列控件 - 设备分配(二级选择)
|
||||
self.input_dtMachine = QComboBox() # 机台选择
|
||||
@@ -143,6 +159,58 @@ class DUTFormDialog(QDialog):
|
||||
except Exception as e:
|
||||
print(f"加载机台数据失败: {e}")
|
||||
|
||||
def _load_project_phases(self):
|
||||
"""从后端加载项目阶段数据"""
|
||||
try:
|
||||
# 尝试使用 HTTP API
|
||||
if self.use_http_api:
|
||||
try:
|
||||
url = f"{self.api_base_url}/dbTableAccess"
|
||||
response = requests.get(
|
||||
url,
|
||||
params={"table": "projectPhase"},
|
||||
timeout=5
|
||||
)
|
||||
response.raise_for_status()
|
||||
result = response.json()
|
||||
data = result.get("data", [])
|
||||
|
||||
if data:
|
||||
self.project_phases = data
|
||||
print(f"从 HTTP API 加载了 {len(data)} 个项目阶段")
|
||||
else:
|
||||
print("后端返回的项目阶段数据为空")
|
||||
self.project_phases = []
|
||||
|
||||
except Exception as e:
|
||||
print(f"HTTP API 加载项目阶段失败: {e},回退到 SystemModel")
|
||||
# 回退到使用 SystemModel
|
||||
if self.system_model:
|
||||
self.project_phases = self.system_model.load_project_phases()
|
||||
else:
|
||||
self.project_phases = []
|
||||
else:
|
||||
# 直接使用 SystemModel
|
||||
if self.system_model:
|
||||
self.project_phases = self.system_model.load_project_phases()
|
||||
else:
|
||||
self.project_phases = []
|
||||
|
||||
# 填充下拉框:显示 name,存储 PN 作为 itemData
|
||||
self.input_phase.clear()
|
||||
for phase in self.project_phases:
|
||||
name = phase.get("name", "")
|
||||
pn = phase.get("PN", "")
|
||||
if name: # 只添加有名称的项
|
||||
self.input_phase.addItem(name, pn) # 显示 name,数据存储 PN
|
||||
|
||||
print(f"项目阶段下拉框已填充 {self.input_phase.count()} 个选项")
|
||||
|
||||
except Exception as e:
|
||||
print(f"加载项目阶段数据失败: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
def _on_machine_changed(self, index):
|
||||
"""机台选择变化时更新通道列表"""
|
||||
self.input_station.clear()
|
||||
@@ -181,13 +249,22 @@ class DUTFormDialog(QDialog):
|
||||
self.input_SN.setText(str(f.get("SN", "")))
|
||||
self.input_project.setText(str(f.get("project", "")))
|
||||
self.input_testReq.setText(str(f.get("testReq", "")))
|
||||
phase_val = str(f.get("phase", ""))
|
||||
if phase_val:
|
||||
idx = self.input_phase.findText(phase_val)
|
||||
if idx >= 0:
|
||||
self.input_phase.setCurrentIndex(idx)
|
||||
else:
|
||||
self.input_phase.setEditText(phase_val)
|
||||
|
||||
# 项目阶段:f.get("phase") 存储的是 PN 值,需要匹配 itemData
|
||||
phase_pn = str(f.get("phase", ""))
|
||||
if phase_pn:
|
||||
# 查找匹配的 PN
|
||||
found = False
|
||||
for i in range(self.input_phase.count()):
|
||||
item_pn = self.input_phase.itemData(i)
|
||||
if item_pn == phase_pn:
|
||||
self.input_phase.setCurrentIndex(i)
|
||||
found = True
|
||||
break
|
||||
|
||||
# 如果没有找到匹配项,使用可编辑功能填充
|
||||
if not found:
|
||||
self.input_phase.setEditText(phase_pn)
|
||||
|
||||
# 设备分配:使用 Model 解析后的 dtMachine 和 station 字段
|
||||
dtm = f.get("dtMachine", "").strip()
|
||||
@@ -224,11 +301,16 @@ class DUTFormDialog(QDialog):
|
||||
|
||||
def get_form_dict(self):
|
||||
# 以 dut_form 的结构返回数据
|
||||
# 项目阶段:优先获取 itemData(PN值),如果没有则使用用户输入的文本
|
||||
phase_pn = self.input_phase.currentData() # 获取当前选中项的 PN
|
||||
if phase_pn is None: # 如果是用户手动输入的文本
|
||||
phase_pn = self.input_phase.currentText().strip()
|
||||
|
||||
dut_form = {
|
||||
"SN": self.input_SN.text().strip(),
|
||||
"project": self.input_project.text().strip(),
|
||||
"testReq": self.input_testReq.text().strip(),
|
||||
"phase": self.input_phase.currentText().strip(),
|
||||
"phase": phase_pn, # 存储 PN 值
|
||||
"weeks": int(self.input_weeks.text() or 0),
|
||||
"workOrder": self.input_workOrder.text().strip(),
|
||||
"inspector": self.input_inspector.text().strip(),
|
||||
|
||||
Reference in New Issue
Block a user