109 lines
4.1 KiB
Python
109 lines
4.1 KiB
Python
|
|
|
||
|
|
import json
|
||
|
|
import re
|
||
|
|
import base64
|
||
|
|
from PyQt6 import *
|
||
|
|
from PyQt6.QtCore import *
|
||
|
|
from PyQt6.QtGui import *
|
||
|
|
from PyQt6.QtWidgets import *
|
||
|
|
from ui.Ui_insertTaskDlg import Ui_insertTaskDlg
|
||
|
|
from taskModel.taskManager import taskManager
|
||
|
|
from taskInstructionModel.taskInstructionManager import taskInstructionManager
|
||
|
|
|
||
|
|
class InsertTaskDlg(QDialog):
|
||
|
|
insertFinished = pyqtSignal()
|
||
|
|
def __init__(self, parent=None):
|
||
|
|
super().__init__(parent)
|
||
|
|
self.ui = Ui_insertTaskDlg()
|
||
|
|
self.ui.setupUi(self)
|
||
|
|
self.taskId = ""
|
||
|
|
self.includingSubtasks = {}
|
||
|
|
self.targetType = "task"
|
||
|
|
self.instructionPosition = -1
|
||
|
|
self.taskModel = QStandardItemModel()
|
||
|
|
self.taskProxyModel = QSortFilterProxyModel()
|
||
|
|
self.taskProxyModel.setSourceModel(self.taskModel)
|
||
|
|
self.ui.tableViewTask.setModel(self.taskProxyModel)
|
||
|
|
self.ui.leSearchTask.textChanged.connect(self.handleTaskSearch)
|
||
|
|
self.ui.pbSave.clicked.connect(self.handleSave)
|
||
|
|
self.ui.pbCancel.clicked.connect(self.reject)
|
||
|
|
|
||
|
|
def handleSave(self):
|
||
|
|
selectedRows = self.ui.tableViewTask.selectionModel().selectedRows()
|
||
|
|
levelIndex = 0
|
||
|
|
if len(selectedRows) > 0:
|
||
|
|
for row in selectedRows:
|
||
|
|
index = row.model().index(row.row(), 0)
|
||
|
|
targetId = index.data()
|
||
|
|
level = self.instructionPosition + levelIndex
|
||
|
|
param = {
|
||
|
|
'task_id': self.taskId,
|
||
|
|
'device_id': "",
|
||
|
|
'loop': 1,
|
||
|
|
'delay': 0,
|
||
|
|
'target_type': self.targetType,
|
||
|
|
'target_id': targetId,
|
||
|
|
'interface_index': 0,
|
||
|
|
'level': level
|
||
|
|
}
|
||
|
|
id = taskInstructionManager.create(param)
|
||
|
|
if id == "":
|
||
|
|
print("insert error")
|
||
|
|
levelIndex += 1
|
||
|
|
self.accept()
|
||
|
|
|
||
|
|
def showDlg(self, taskId, position):
|
||
|
|
self.taskId = taskId
|
||
|
|
self.instructionPosition = position
|
||
|
|
self.includingSubtasks = {taskId:"True"}
|
||
|
|
self.setWindowTitle('添加任务')
|
||
|
|
self.taskModel.clear()
|
||
|
|
self.loadAllIncludingSubtasks()
|
||
|
|
self.loadTask()
|
||
|
|
self.exec()
|
||
|
|
|
||
|
|
def batchOperation(self):
|
||
|
|
self.setAllColumnWidth()
|
||
|
|
self.hideAllColumn()
|
||
|
|
self.setAllHorizontalHeaderLabels()
|
||
|
|
|
||
|
|
def handleTaskSearch(self):
|
||
|
|
self.taskProxyModel.setFilterRegularExpression(re.escape(self.ui.leSearchTask.text()))
|
||
|
|
self.taskProxyModel.setFilterKeyColumn(1)
|
||
|
|
|
||
|
|
#加载全部包含子任务的任务
|
||
|
|
def loadAllIncludingSubtasks(self):
|
||
|
|
return
|
||
|
|
tasks = taskInstructionManager.getIncludingsubtasks()
|
||
|
|
if len(tasks) > 0:
|
||
|
|
for task in tasks:
|
||
|
|
if str(task['task_id']) not in self.includingSubtasks:
|
||
|
|
self.includingSubtasks[str(task['task_id'])] = True
|
||
|
|
# 加载队列
|
||
|
|
def loadTask(self):
|
||
|
|
self.taskModel.clear()
|
||
|
|
tasks = taskManager.getInfo()
|
||
|
|
if len(tasks) > 0:
|
||
|
|
for task in tasks:
|
||
|
|
index = self.taskModel.rowCount()
|
||
|
|
if str(task['id']) not in self.includingSubtasks:
|
||
|
|
self.taskModel.setItem(index, 0, QStandardItem(str(task['id'])))
|
||
|
|
self.taskModel.setItem(index, 1, QStandardItem(task['name']))
|
||
|
|
self.taskModel.setItem(index, 2, QStandardItem(str(task['loop'])))
|
||
|
|
self.taskModel.setItem(index, 3, QStandardItem(str(task['delay'])))
|
||
|
|
self.taskModel.setItem(index, 4, QStandardItem(task['remark']))
|
||
|
|
self.batchOperation()
|
||
|
|
# 批量设置标题
|
||
|
|
def setAllHorizontalHeaderLabels(self):
|
||
|
|
self.taskModel.setHorizontalHeaderLabels(['ID','名称', '循环次数', '间隔时间(ms)', '备注'])
|
||
|
|
|
||
|
|
# 隐藏指定列
|
||
|
|
def hideAllColumn(self):
|
||
|
|
self.ui.tableViewTask.setColumnHidden(0, True)
|
||
|
|
|
||
|
|
|
||
|
|
# 批量设置列宽
|
||
|
|
def setAllColumnWidth(self):
|
||
|
|
self.ui.tableViewTask.setColumnWidth(1, 200)
|
||
|
|
self.ui.tableViewTask.setColumnWidth(4, 200)
|