import os import re import json import base64 from PyQt6 import * from PyQt6.QtCore import * from PyQt6.QtGui import * from PyQt6.QtWidgets import * from ui.Ui_createTaskDlg import Ui_createTaskDlg from taskModel.taskManager import taskManager from show_editor import CodeDialog import ui.res_rc class CreateTaskDlg(QDialog): createFinished = pyqtSignal() editFinished = pyqtSignal() def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_createTaskDlg() self.ui.setupUi(self) self.taskId = "" self.taskGroupId = "" with open(os.path.join(os.path.dirname(__file__),"default_task.py"), "r", encoding="utf-8") as f: self.defaultScriptBase64 = f.read() # 删除UTF-8 BOM(如果有的话) # UTF-8 BOM的字节序列是\xef\xbb\xbf,解码为字符串后是'\ufeff' if self.defaultScriptBase64.startswith('\ufeff'): self.defaultScriptBase64 = self.defaultScriptBase64[1:] # 切片以删除第一个字符(即BOM) self.scriptStr = self.defaultScriptBase64 self.codeDialog = CodeDialog("任务脚本编辑") self.ui.pbScript.clicked.connect(self.handleScript) self.ui.pbSave.clicked.connect(self.handleAccept) self.ui.pbCancel.clicked.connect(self.reject) def showCreateDlg(self, group_id): self.setWindowTitle("创建任务") self.taskId = "" self.taskGroupId = group_id self.scriptStr = self.defaultScriptBase64 self.ui.leName.setText("") self.ui.sLoop.setValue(1) self.ui.sDelay.setValue(0) self.ui.leRemark.setText("") self.exec() def showEditDlg(self, task): self.setWindowTitle("编辑任务") self.taskId = task["id"] self.ui.leName.setText(task["name"]) self.ui.sLoop.setValue(int(task["loop"])) self.ui.sDelay.setValue(int(task["delay"])) self.ui.leRemark.setText(task["remark"]) self.scriptStr = task["script"] and str(base64.b64decode(task["script"] ), 'utf-8') or self.defaultScriptBase64 self.exec() def handleScript(self): self.scriptStr = self.codeDialog.showEditor(self.scriptStr) def handleAccept(self): name = self.ui.leName.text() loop = str(self.ui.sLoop.value()) delay = str(self.ui.sDelay.value()) remark = self.ui.leRemark.text() script = base64.b64encode(self.scriptStr.encode("utf-8")) if name == "": QMessageBox.warning(self, "错误", "任务名称不能为空", QMessageBox.StandardButton.Ok) return if self.windowTitle() == "创建任务": id = taskManager.create(self.taskGroupId, name, loop, delay, remark, script) if id != "": self.createFinished.emit() elif self.windowTitle() == "编辑任务": param = { "name": name, "loop": loop, "delay": delay, "remark": remark, "script": script } result = taskManager.update(self.taskId, param) if result: self.editFinished.emit() self.accept()