123 lines
4.9 KiB
Python
123 lines
4.9 KiB
Python
import json
|
|
from PyQt6 import *
|
|
from PyQt6.QtCore import *
|
|
from PyQt6.QtGui import *
|
|
from PyQt6.QtWidgets import *
|
|
from ui.Ui_createDeviceDlg import Ui_createDeviceDlg
|
|
from deviceModel.deviceManager import deviceManager
|
|
from devmodelModel.devModelManager import devModelManager
|
|
from dmGroupModel.dmGroupManager import dmGroupManager
|
|
from common import common
|
|
|
|
class CreateDeviceDlg(QDialog):
|
|
createFinished = pyqtSignal()
|
|
editFinished = pyqtSignal()
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.ui = Ui_createDeviceDlg()
|
|
self.ui.setupUi(self)
|
|
self.deviceId = ""
|
|
self.group_id = ''
|
|
self.devModelId = ""
|
|
self.interfaces = []
|
|
self.deviceextendedProperty = {}
|
|
self.pixmap = ''
|
|
self.ui.cbModelGroup.currentIndexChanged.connect(self.loadGroupDevModel)
|
|
self.ui.cbDevModel.currentIndexChanged.connect(self.loadImage)
|
|
self.ui.pbSave.clicked.connect(self.handleAccept)
|
|
self.ui.pbCancel.clicked.connect(self.reject)
|
|
|
|
# 加载设备模型分组
|
|
def loadModelGroup(self):
|
|
modelGroups = dmGroupManager.getInfo()
|
|
self.ui.cbModelGroup.clear()
|
|
if len(modelGroups) > 0:
|
|
for modelGroup in modelGroups:
|
|
self.ui.cbModelGroup.addItem(modelGroup["name"], modelGroup)
|
|
|
|
# 加载设备模型
|
|
def loadGroupDevModel(self):
|
|
group_id = self.ui.cbModelGroup.currentData()["id"]
|
|
devModels = devModelManager.getGroupDm(group_id)
|
|
self.ui.cbDevModel.clear()
|
|
if len(devModels) > 0:
|
|
for devModel in devModels:
|
|
self.ui.cbDevModel.addItem(devModel["name"], devModel)
|
|
|
|
def showCreateDlg(self, group_id):
|
|
self.setWindowTitle("创建设备")
|
|
self.pixmap = ''
|
|
self.interfaceIndex = -1
|
|
self.group_id = group_id
|
|
self.ui.widgetDevModel.setVisible(True)
|
|
self.ui.widgetModelGroup.setVisible(True) # 恢复模型分组显示
|
|
self.loadModelGroup()
|
|
self.ui.leDevName.setText("")
|
|
self.ui.cbDevModel.setCurrentIndex(0)
|
|
self.ui.leDevDescription.setText("")
|
|
self.exec()
|
|
|
|
def showEditDlg(self, devModelId, device):
|
|
self.setWindowTitle("编辑设备")
|
|
self.deviceId = device["id"]
|
|
self.devModelId = devModelId
|
|
self.ui.leDevName.setText(device["name"])
|
|
self.ui.widgetDevModel.setVisible(False)
|
|
self.ui.widgetModelGroup.setVisible(False)
|
|
description = ""
|
|
self.deviceextendedProperty = {}
|
|
if "attr" in device:
|
|
try:
|
|
attr_json_dict = device["attr"]
|
|
if "description" in attr_json_dict:
|
|
description = attr_json_dict["description"]
|
|
if "extendedProperty" in attr_json_dict:
|
|
self.deviceextendedProperty = attr_json_dict["extendedProperty"]
|
|
if "image" in attr_json_dict:
|
|
self.pixmap = attr_json_dict["image"]
|
|
if "interfaceIndex" in attr_json_dict:
|
|
self.interfaceIndex = attr_json_dict["interfaceIndex"]
|
|
except Exception as e:
|
|
print(e)
|
|
self.ui.leDevDescription.setText(description)
|
|
self.exec()
|
|
|
|
def loadImage(self):
|
|
if self.windowTitle() == "创建设备":
|
|
devModel = self.ui.cbDevModel.currentData()
|
|
pixmap = QPixmap()
|
|
if devModel is not None:
|
|
if "attr" in devModel:
|
|
attr_json_dict = devModel["attr"]
|
|
if "image" in attr_json_dict:
|
|
self.pixmap = attr_json_dict["image"]
|
|
|
|
def handleAccept(self):
|
|
if self.windowTitle() == "创建设备":
|
|
name = self.ui.leDevName.text()
|
|
currentData = self.ui.cbDevModel.currentData()
|
|
devModelId = currentData["id"] if currentData else None
|
|
attr = {
|
|
"image": self.pixmap,
|
|
"description": self.ui.leDevDescription.text(),
|
|
"extendedProperty": self.deviceextendedProperty,
|
|
"interfaceIndex": -1
|
|
}
|
|
id = deviceManager.create(self.group_id, name, devModelId, attr, self.interfaces)
|
|
if id != "":
|
|
self.createFinished.emit()
|
|
elif self.windowTitle() == "编辑设备":
|
|
param = {
|
|
"name": self.ui.leDevName.text(),
|
|
"attr": {
|
|
"image": self.pixmap,
|
|
"description": self.ui.leDevDescription.text(),
|
|
"extendedProperty": self.deviceextendedProperty,
|
|
"interfaceIndex": self.interfaceIndex
|
|
}
|
|
}
|
|
if deviceManager.update(self.deviceId, param):
|
|
self.editFinished.emit()
|
|
self.accept()
|
|
|