add(派单任务和管片任务的刷新)

This commit is contained in:
yaj
2026-03-06 18:33:58 +08:00
parent 37d60ba63e
commit a3b6287808
9 changed files with 393 additions and 42 deletions

View File

@ -278,6 +278,14 @@ class ArcProgressWidget(QWidget):
# 管片编号设置
def setSegmentNumber(self, segmentNumberStr:str):
self.segment_number_label.setText(segmentNumberStr)
# 环号设置
def setRingNumber(self, ringNumber:int):
self.ring_number_label.setText(f"环号: {ringNumber}")
# 管片尺寸(规格)设置 比如6900*1500
def setSegmentSize(self, SizeSpecification:str):
self.segment_size_label.setText(SizeSpecification)
if __name__ == "__main__":

View File

@ -337,10 +337,10 @@ class DispatchDetailsDialog(QDialog):
self.modify_btn.show()
# 2、修改 派单方量标签的值
volume_label = self.rows[4].value
# volume_label = self.rows[4].value
# modifyed_value 为float类型, 一位小数
modifyed_value = self.volume_value_adjuster.get_value()
volume_label.setText(str(modifyed_value))
# volume_label.setText(str(modifyed_value))
# 3、发送派单方量确定修改的信号 (发送派单任务名 + 确认修改之后的派单方量)
self.confirm_modify_volume.emit(self.dispatch_task_name, modifyed_value)
@ -383,6 +383,16 @@ class DispatchDetailsDialog(QDialog):
if 0 <= row < len(self.rows):
self.rows[row].value.setText(str(new_value_text) if new_value_text is not None else "")
def set_dispatch_task_name(self, task_name:str):
"""设置/刷新 派单任务名"""
self.dispatch_task_name = task_name
def set_modify_volume_status(self, status:bool):
"""设置是否能够在派单详情界面修改方量,
status为False即不能修改方量, 为True表示能够修改方量
"""
self.modify_btn.setVisible(status)
# 测试代码
if __name__ == "__main__":

View File

@ -1,6 +1,6 @@
from PySide6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLabel,
QApplication)
from PySide6.QtCore import Qt
from PySide6.QtCore import Qt, Signal, QTimer
from PySide6.QtGui import QPainter, QPixmap
from .value_adjuster import ValueAdjuster
from .switch_button import SwitchButton
@ -10,6 +10,14 @@ import resources.resources_rc
from utils.image_paths import ImagePaths
class PlanWidget(QWidget):
# 自动派单切换信号
# True: 自动派单 False: 手动派单
auto_dispatch_signal = Signal(bool)
# 计划表单最终的确认的修改的方量
# 对应的任务名, 最终的方量
final_modify_volume_signal = Signal(str, float)
def __init__(self, parent=None):
super().__init__(parent)
# 加载背景图
@ -25,6 +33,16 @@ class PlanWidget(QWidget):
"auto_dispatch": None # 自动派单SwitchButton
}
# ==================================================
# 用于计划表单的修改方量的最终确认
# 1、确认最终修改的方量的计时器超时代表着确认了最终的方量
self.volume_timer = QTimer(self)
self.volume_timer.setInterval(2500) # 2.5秒延迟(根据需求调整)
self.volume_timer.setSingleShot(True) # 单次触发:避免重复执行
self.volume_timer.timeout.connect(self._sync_final_volume)
# 2、该计划表单对应的任务名
self.plan_table_task_name = None
# 主垂直布局
main_layout = QVBoxLayout(self)
main_layout.setContentsMargins(13, 5, 6, 15)
@ -63,6 +81,8 @@ class PlanWidget(QWidget):
row2_layout.addWidget(label2)
self.fangliang_adjuster = ValueAdjuster() # 导入的方量调整控件
self.fangliang_adjuster.minus_btn.clicked.connect(self._reset_volume_timer)
self.fangliang_adjuster.plus_btn.clicked.connect(self._reset_volume_timer)
row2_layout.addWidget(self.fangliang_adjuster)
main_layout.addLayout(row2_layout)
self.controls["volume"] = self.fangliang_adjuster
@ -75,7 +95,7 @@ class PlanWidget(QWidget):
row3_layout.addWidget(status_icon3)
row3_layout.addSpacing(4)
label3 = QLabel("计划配比")
label3 = QLabel("")
label3.setStyleSheet("font-size: 18px; color: #03f5ff;")
row3_layout.addWidget(label3)
@ -117,11 +137,24 @@ class PlanWidget(QWidget):
row5_layout.addWidget(label5)
self.switch = SwitchButton()
self.switch.switched.connect(self.auto_dispatch_signal)
self.switch.setChecked(True)
row5_layout.addWidget(self.switch, alignment=Qt.AlignLeft)
main_layout.addLayout(row5_layout)
self.controls["auto_dispatch"] = self.switch
def _reset_volume_timer(self):
"""每次调整方量时,重置定时器(倒计时重新开始)"""
if self.volume_timer.isActive(): # 如果定时器正在运行,先停止
self.volume_timer.stop()
self.volume_timer.start() # 重启定时器
def _sync_final_volume(self):
"""同步 确认的最终的修改方量"""
final_volume = self.fangliang_adjuster.get_value()
# print("最终确认的方量为:", final_volume)
self.final_modify_volume_signal.emit(self.plan_table_task_name, final_volume)
def paintEvent(self, event):
"""绘制背景图片"""
painter = QPainter(self)
@ -150,10 +183,21 @@ class PlanWidget(QWidget):
self.controls["status"].setText(new_status)
def set_auto_dispatch(self, is_checked:bool):
"""修改自动派单开关状态, true: 开启自动派单, False: 关闭自动派单"""
"""修改自动派单开关状态, true: 自动派单, False: 动派单"""
if self.controls["auto_dispatch"]:
self.controls["auto_dispatch"].setChecked(is_checked)
def set_modify_volume_status(self, status:bool):
"""设置 计划表单中修改方量控件的状态, 是否能够修改方量
status: True, 能够修改方量
False, 不能修改方量
"""
self.fangliang_adjuster.setEnabled(status)
def set_plan_table_task_name(self, task_name:str):
"""设置 计划表单对应的选中任务名"""
self.plan_table_task_name = task_name
if __name__ == "__main__":
app = QApplication(sys.argv)
widget = PlanWidget()

View File

@ -11,8 +11,10 @@ from utils.image_paths import ImagePaths
任务控件,如:管片任务、派单任务
"""
class TaskWidget(QWidget):
# 任务详情信号: task1表示第一条任务
# 任务详情信号: task1表示第一条任务 (用于详情对话框)
task_details_signal = Signal(str)
# 任务选择按钮选中的信号 (用于上方的计划表单)
task_selected_signal = Signal(str)
def __init__(self, taskTitle:str, parent=None):
super().__init__(parent)
@ -40,6 +42,7 @@ class TaskWidget(QWidget):
# 用字典存储每个任务的可修改控件(键:任务名,值:控件字典)
self.task_controls = {} # 结构:{"task1": {"volume_label": xxx, "time_label": xxx, ...}, ...}
self.current_selected_task = None # 选择按钮,当前选中的任务的任务名
# 三条任务条目
self._add_task("task1", "SHRB1-3", ImagePaths.TASK_RECT1)
@ -87,12 +90,17 @@ class TaskWidget(QWidget):
}}
""")
select_btn.setCheckable(True)
select_btn.clicked.connect(lambda checked, tn=task_name: self._on_select_btn_clicked(tn, checked))
controls["select_btn"] = select_btn
row1_layout.addWidget(select_btn)
# 任务编号
task_id_label = QLabel(task_id)
task_id_label.setStyleSheet("font-size: 18px; color: #16ffff;padding-left: 6px;")
# 1. 设置鼠标样式为手型,提示可点击
task_id_label.setCursor(Qt.PointingHandCursor)
# 2. 绑定点击事件点击标签时选中对应的select_btn
task_id_label.mousePressEvent = lambda event, tn=task_name: self._on_task_id_clicked(tn)
controls["task_id_label"] = task_id_label
row1_layout.addWidget(task_id_label)
@ -124,7 +132,7 @@ class TaskWidget(QWidget):
row2_layout = QHBoxLayout()
# 方量标签
volume_label = QLabel("方量 200")
volume_label.setStyleSheet("color: #a1c1d7; font-size: 14px;padding-left: 19px;")
volume_label.setStyleSheet("color: #a1c1d7; font-size: 14px;padding-left: 6px;")
controls["volume_label"] = volume_label
row2_layout.addWidget(volume_label)
@ -138,13 +146,19 @@ class TaskWidget(QWidget):
time_label.setStyleSheet("color: #a1c1d7; font-size: 14px;")
controls["time_label"] = time_label
row2_layout.addWidget(time_label)
# 状态文本标签
status_text_label = QLabel()
status_text_label.setStyleSheet("color: #16ffff; font-size: 14px;")
controls["status_text_label"] = status_text_label
row2_layout.addWidget(status_text_label)
# 状态标签
# 状态图标标签
status_icon_label = QLabel()
status_icon_label.setPixmap(QPixmap(status_icon))
controls["status_icon_label"] = status_icon_label
row2_layout.addWidget(status_icon_label, alignment=Qt.AlignRight)
# 添加水平布局2到item_layout
item_layout.addLayout(row2_layout)
# 分隔线
@ -165,6 +179,42 @@ class TaskWidget(QWidget):
# 发送任务详情信号
self.task_details_signal.emit(task_name)
def _on_select_btn_clicked(self, task_name: str, checked: bool):
"""
处理选择按钮点击事件,实现互斥选中
:param task_name: 点击的任务名task1/task2/task3
:param checked: 按钮是否被选中True/False
"""
# 1. 如果是选中操作checked=True
if checked:
# 取消之前选中的任务按钮
if self.current_selected_task and self.current_selected_task != task_name:
prev_select_btn = self.task_controls[self.current_selected_task]["select_btn"]
prev_select_btn.setChecked(False) # 取消选中
# 更新当前选中的任务
self.current_selected_task = task_name
# 通知任务选中按钮更新了选中
self.task_selected_signal.emit(task_name)
else:
# 2. 如果是取消选中操作checked=False
# 重新设为选中状态,阻止取消 (确保该按钮继续为选中状态,保证至少有一个按钮被选中)
current_select_btn = self.task_controls[task_name]["select_btn"]
current_select_btn.setChecked(True)
# 确保选中标记不丢失
self.current_selected_task = task_name
def _on_task_id_clicked(self, task_name: str):
"""
点击任务编号标签时,选中对应的选择按钮(复用互斥逻辑)
:param task_name: 点击的任务名task1/task2/task3
"""
if task_name in self.task_controls:
# 1. 获取对应select_btn
select_btn = self.task_controls[task_name]["select_btn"]
# 2. 模拟点击相应的选择按钮
if not select_btn.isChecked():
select_btn.click()
# --------------------------
# 对外接口:修改任务属性
# 三个任务条目对应的任务名task_name分别为 task1、task2、task3
@ -185,11 +235,36 @@ class TaskWidget(QWidget):
time_label = self.task_controls[task_name]["time_label"]
time_label.setText(time_str)
def set_task_status(self, task_name:str, status_str: str, icon_path:str):
"""修改指定任务的状态, 比如: 已下发、计划中等"""
ICON_COLOR_MAP = {
ImagePaths.TASK_RECT1: "#16ffff",
ImagePaths.TASK_RECT2: "#ffab11",
ImagePaths.TASK_RECT3: "#54f529",
ImagePaths.TASK_RECT4: "#ff6a5c",
ImagePaths.TASK_RECT5: "#f6f44b"
}
DEFAULT_COLOR = "#000000"
if task_name in self.task_controls:
status_label = self.task_controls[task_name]["status_text_label"] # 状态文本
status_label.setText(status_str)
icon_label = self.task_controls[task_name]["status_icon_label"] # 状态图标
icon_label.setPixmap(QPixmap(icon_path))
# 修改状态文本的颜色
status_text_color = ICON_COLOR_MAP.get(icon_path, DEFAULT_COLOR)
status_label.setStyleSheet(f"QLabel {{ color: {status_text_color}; font-size: 14px;}}")
def set_task_id(self, task_name:str, new_id: str):
"""修改指定任务的编号, 如: SHRB2-3"""
if task_name in self.task_controls:
task_id_label = self.task_controls[task_name]["task_id_label"]
task_id_label.setText(new_id)
task_id_label.setText(new_id)
def set_task_select_btn_selected(self, task_name:str):
"""设置 任务选择按钮选中 (主要用于刷新计划表单)"""
if task_name in self.task_controls:
task_select_btn = self.task_controls[task_name]["select_btn"]
task_select_btn.click()
def get_task_volume(self, task_name:str):
"""