修复规程执行结果统计问题

main
zcwBit 3 months ago
parent 03c38c6d8d
commit 51531b3a37

@ -193,8 +193,20 @@ class StepExecutor(QWidget):
self.tableView.setEditTriggers(QTableView.DoubleClicked)
self.tableView.setSelectionBehavior(QTableView.SelectRows)
# 设置表格显示优化
self.tableView.setAlternatingRowColors(True) # 交替行颜色
self.tableView.setShowGrid(True) # 显示网格线
self.tableView.setGridStyle(Qt.SolidLine) # 实线网格
self.tableView.setSortingEnabled(False) # 禁用排序避免干扰执行顺序
# 设置最小行高
self.tableView.verticalHeader().setMinimumSectionSize(30)
self.setupTableHeaders()
# 初始调整所有行高
self.adjustAllRowHeights()
layout.addWidget(QLabel("测试步骤:"))
layout.addWidget(self.tableView)
@ -212,14 +224,34 @@ class StepExecutor(QWidget):
try:
header = self.tableView.horizontalHeader()
if header:
header.setStretchLastSection(True)
header.setSectionResizeMode(0, QHeaderView.ResizeToContents)
header.setSectionResizeMode(1, QHeaderView.Stretch)
header.setSectionResizeMode(2, QHeaderView.ResizeToContents)
header.setSectionResizeMode(3, QHeaderView.ResizeToContents)
header.setSectionResizeMode(4, QHeaderView.ResizeToContents)
header.setSectionResizeMode(5, QHeaderView.ResizeToContents)
header.setSectionResizeMode(6, QHeaderView.ResizeToContents)
# 设置表格自动调整行高
self.tableView.verticalHeader().setDefaultSectionSize(35)
self.tableView.verticalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
# 设置列宽模式 - 让表格填充满整个宽度
header.setStretchLastSection(True) # 让最后一列自动拉伸填充剩余空间
# 设置各列的调整模式
header.setSectionResizeMode(0, QHeaderView.Fixed) # 步骤ID - 固定宽度
header.setSectionResizeMode(1, QHeaderView.Stretch) # 步骤描述 - 拉伸
header.setSectionResizeMode(2, QHeaderView.Fixed) # 操作类型 - 固定宽度
header.setSectionResizeMode(3, QHeaderView.Fixed) # 执行时间 - 固定宽度
header.setSectionResizeMode(4, QHeaderView.Fixed) # 执行结果 - 固定宽度
header.setSectionResizeMode(5, QHeaderView.Stretch) # 详细结果 - 拉伸
header.setSectionResizeMode(6, QHeaderView.Stretch) # 备注 - 拉伸
# 设置固定列的宽度
self.tableView.setColumnWidth(0, 80) # 步骤ID
self.tableView.setColumnWidth(2, 120) # 操作类型
self.tableView.setColumnWidth(3, 160) # 执行时间
self.tableView.setColumnWidth(4, 80) # 执行结果
# 设置拉伸列的最小宽度
header.setMinimumSectionSize(100) # 设置所有列的最小宽度
# 启用文本换行
self.tableView.setWordWrap(True)
except Exception as e:
print(f"设置表格头部时出错: {e}")
@ -522,6 +554,54 @@ class StepExecutor(QWidget):
stepInterval = int(self.stepIntervalSpin.value() * 1000)
self.timer.start(stepInterval)
def is_step_successful(self, step):
"""判断步骤是否执行成功"""
return (step.get('executed', False) and
step.get('result') and
'失败' not in step.get('result', ''))
def adjustRowHeight(self, row):
"""调整指定行的高度以适应内容"""
try:
# 获取该行的内容
stepInfo = self.tableModel.getStepInfo(row)
if not stepInfo:
return
# 计算需要的行高
description = stepInfo.get('description', '')
result = stepInfo.get('result', '')
note = stepInfo.get('note', '')
# 基于最长文本计算行高
max_text_length = max(len(description), len(result), len(note))
# 基础行高
base_height = 35
# 根据文本长度动态调整
if max_text_length > 100:
height = base_height + (max_text_length // 50) * 15
elif max_text_length > 50:
height = base_height + 15
else:
height = base_height
# 设置行高最大不超过150像素
height = min(height, 150)
self.tableView.setRowHeight(row, height)
except Exception as e:
print(f"调整行高时出错: {e}")
def adjustAllRowHeights(self):
"""调整所有行的高度"""
try:
for row in range(self.tableModel.rowCount()):
self.adjustRowHeight(row)
except Exception as e:
print(f"调整所有行高时出错: {e}")
def finishExecution(self):
"""完成执行"""
self.stopAutoExecute()
@ -529,7 +609,7 @@ class StepExecutor(QWidget):
# 计算最终执行统计
totalSteps = len([step for step in self.tableModel.stepData])
executedSteps = len([step for step in self.tableModel.stepData if step.get('executed', False)])
successSteps = len([step for step in self.tableModel.stepData if step.get('executed', False)])
successSteps = len([step for step in self.tableModel.stepData if self.is_step_successful(step)])
failedSteps = executedSteps - successSteps
successRate = (successSteps/executedSteps*100) if executedSteps > 0 else 0
@ -607,6 +687,10 @@ class StepExecutor(QWidget):
self.dbManager.updateStepResults(self.currentExecutionId, self.stepResults)
success = self.tableModel.updateStepResult(row, result, datetime.now())
# 更新表格行高以适应内容
self.adjustRowHeight(row)
return result
def handleStep(self, rowIndex, stepInfo):
@ -829,6 +913,9 @@ class StepExecutor(QWidget):
self.tabLockRequired.emit(False)
self.updateStatusDisplay("已重置", "blue")
self.resetCountdown()
# 重置后重新调整行高
self.adjustAllRowHeights()
def onExportReportClicked(self):
"""导出报告点击事件"""
@ -940,7 +1027,7 @@ class StepExecutor(QWidget):
"""添加执行统计表格"""
totalSteps = len([step for step in self.tableModel.stepData])
executedSteps = len([step for step in self.tableModel.stepData if step.get('executed', False)])
successSteps = len([step for step in self.tableModel.stepData if step.get('executed', False) and step.get('result', False)])
successSteps = len([step for step in self.tableModel.stepData if self.is_step_successful(step)])
failedSteps = executedSteps - successSteps
successRate = (successSteps/executedSteps*100) if executedSteps > 0 else 0
@ -1028,7 +1115,7 @@ class StepExecutor(QWidget):
"""添加执行总结"""
totalSteps = len([step for step in self.tableModel.stepData])
executedSteps = len([step for step in self.tableModel.stepData if step.get('executed', False)])
successSteps = len([step for step in self.tableModel.stepData if step.get('executed', False) and step.get('result', False)])
successSteps = len([step for step in self.tableModel.stepData if self.is_step_successful(step)])
failedSteps = executedSteps - successSteps
successRate = (successSteps/executedSteps*100) if executedSteps > 0 else 0

@ -166,6 +166,12 @@ class StepTableModel(QAbstractTableModel):
elif step['isMain']:
return QBrush(QColor(220, 220, 220))
elif role == Qt.TextAlignmentRole:
if col in [0, 2, 3, 4]: # 步骤ID、操作类型、执行时间、执行结果居中对齐
return Qt.AlignCenter
else: # 其他列左对齐并顶部对齐
return Qt.AlignLeft | Qt.AlignTop
elif role == Qt.FontRole and step['isMain']:
font = QFont()
font.setBold(True)

Loading…
Cancel
Save