Browse Source

Qt jwt 分离18.0

maohu 3 weeks ago
commit
c175c94aac
92 changed files with 10634 additions and 0 deletions
  1. 18 0
      DisplayWindow.py
  2. 995 0
      Functions/DisplayQTMain.py
  3. 65 0
      Functions/QTMain.py
  4. 71 0
      Functions/QtFunctions/AddPGWidget.py
  5. 110 0
      Functions/QtFunctions/LogerinTxt.py
  6. 71 0
      Functions/QtFunctions/LoginWidget.py
  7. 67 0
      Functions/QtFunctions/LoginWidget_display.py
  8. 325 0
      Functions/QtFunctions/SaveFile.py
  9. 33 0
      Functions/QtFunctions/Worker2.py
  10. 1 0
      Functions/QtFunctions/__init__.py
  11. 95 0
      Functions/QtFunctions/addFlightWidget.py
  12. 93 0
      Functions/QtFunctions/addUserWidget.py
  13. 37 0
      Functions/QtFunctions/amroLoginWidget.py
  14. 40 0
      Functions/QtFunctions/amroLoginWidget2.py
  15. 104 0
      Functions/QtFunctions/changeAuth.py
  16. 68 0
      Functions/QtFunctions/changePassword.py
  17. 96 0
      Functions/QtFunctions/checkCalllist.py
  18. 70 0
      Functions/QtFunctions/checkLoadSingal.py
  19. 99 0
      Functions/QtFunctions/checkLogs.py
  20. 153 0
      Functions/QtFunctions/findServerWidget.py
  21. 160 0
      Functions/QtFunctions/handoverFlightWidget.py
  22. 57 0
      Functions/QtFunctions/ipcall.py
  23. 32 0
      Functions/QtFunctions/localipset.py
  24. 65 0
      Functions/QtFunctions/searchpeople_get.py
  25. 32 0
      Functions/QtFunctions/serveripphoneset.py
  26. 35 0
      Functions/QtFunctions/setlocalip.py
  27. 433 0
      Functions/QtFunctions/sortdisplaySever.py
  28. 533 0
      Functions/QtFunctions/workloadinfos.py
  29. 0 0
      Functions/__init__.py
  30. 79 0
      Functions/apiFunction.py
  31. 181 0
      Functions/ipFind.py
  32. 19 0
      Functions/openPdf.py
  33. 61 0
      Functions/serverFind.py
  34. 415 0
      Functions/utils.py
  35. 16 0
      QTMainWindow.py
  36. 343 0
      UI/1231.py
  37. 657 0
      UI/1231.ui
  38. 18 0
      UI/AddPG.py
  39. 97 0
      UI/AddPG.ui
  40. 18 0
      UI/AddPG2.py
  41. 0 0
      UI/__init__.py
  42. 0 0
      UI/_init_.py
  43. 18 0
      UI/addFlight.py
  44. 146 0
      UI/addFlight2.py
  45. 250 0
      UI/addFlight2.ui
  46. 18 0
      UI/addInfo.py
  47. 42 0
      UI/addInfo.ui
  48. 18 0
      UI/addloaclip.py
  49. 78 0
      UI/addloaclip2.ui
  50. 18 0
      UI/addseverlipphone.py
  51. 18 0
      UI/adduser.py
  52. 100 0
      UI/adduser.ui
  53. 18 0
      UI/amroLogin.py
  54. 18 0
      UI/amroLogin2.py
  55. 51 0
      UI/amroLogin22.py
  56. 70 0
      UI/amroLogin22.ui
  57. 18 0
      UI/changeAuth.py
  58. 132 0
      UI/changeAuth.ui
  59. 18 0
      UI/changePassword.py
  60. 93 0
      UI/changePassword.ui
  61. 19 0
      UI/checkCalllist.py
  62. 18 0
      UI/checkLoadSingal.py
  63. 126 0
      UI/checkLoadSingal.ui
  64. 19 0
      UI/checkLogs.py
  65. 92 0
      UI/checkLogs2.py
  66. 172 0
      UI/checkLogs2.ui
  67. 19 0
      UI/findserver.py
  68. 56 0
      UI/findserver.ui
  69. 20 0
      UI/findserver2.py
  70. 19 0
      UI/handoverFlight.py
  71. 98 0
      UI/handoverFlight.ui
  72. 18 0
      UI/login.py
  73. 78 0
      UI/login.ui
  74. 19 0
      UI/main.py
  75. 119 0
      UI/main.ui
  76. 70 0
      UI/main2.py
  77. 654 0
      UI/main2.ui
  78. 18 0
      UI/main22.py
  79. 350 0
      UI/main22.ui
  80. 341 0
      UI/main3.py
  81. 651 0
      UI/main3.ui
  82. 144 0
      UI/main4.py
  83. 19 0
      UI/mapWeb.py
  84. 75 0
      UI/mapWeb.ui
  85. 18 0
      UI/searchpeople_get.py
  86. 113 0
      UI/searchpeople_get.ui
  87. 21 0
      UI/show_webpage.py
  88. 66 0
      UI/workloadinfos.py
  89. 214 0
      UI/workloadinfos.ui
  90. 2 0
      _init_.py
  91. BIN
      icon/1.ico
  92. BIN
      icon/2.ico

File diff suppressed because it is too large
+ 18 - 0
DisplayWindow.py


+ 995 - 0
Functions/DisplayQTMain.py

@@ -0,0 +1,995 @@
+import datetime
+import sys
+from PyQt6 import QtCore
+from PyQt6.QtCore import Qt, QThread,QObject,QThreadPool, QTimer
+from PyQt6.QtGui import QColor, QFont
+from PyQt6.QtTextToSpeech import QTextToSpeech
+from PyQt6.QtWidgets import QApplication, QWidget, QMessageBox, QTableWidgetItem, QAbstractItemView
+from UI.main22 import Ui_Form
+from Functions.QtFunctions.LogerinTxt import app_logger
+from Functions.QtFunctions import findServerWidget as FindServerWidget
+from Functions.QtFunctions import LoginWidget_display as loginWidget
+from Functions.apiFunction import api_fc
+
+headerlabel0= ["序号","数据序号","备","机号","航班信息","机型","机型信息","发动机","机位","航班号","备","计达","备","预达",
+     "备","计飞","备","备","机位","类型","备","放行","备","工1","备","工2","备","工3","备","工4",
+     "备","班组长","备","到位","备","放行","备","销夹","电签","随机","备","随机","备","保留","备","工作包",
+     "备","进出港城市","备","维修人员","交班人员","放行","备","航班编号","备","任务编号","备","TATD","备","类型",
+     "备","附加消息","备","备","备","备"]
+headerlabel_B=["序号", "机号", "机型", "发动机", "航班号", "计达", "预达", "计飞", "机位", "类型", "工作单", "飞单", "客舱单",
+             "临工单","AMRO记录", "电签复查", "接机电签", "任务电签", "二送电签", "备", "备", "备", "备", "备", "进出港城市",
+             "维修人员", "二送人员","放行", "航班编号", "电签工卡", "备", "类型", "附加消息"]
+
+versionNumb= "18.0.0"
+
+class sortdisplaySever(QObject):
+    sortupdate = QtCore.pyqtSignal(str, dict, list, str, str)
+    def __init__(self, name, ip, selectedtime, text, displayMode, selectedbc, displayselect, thread):
+        super().__init__()
+        self.funcName = name
+        self.ipinfo = ip
+        self.selectedtime = selectedtime
+        self.text = text
+        self.displayMode = displayMode
+        self.selectedbc = selectedbc
+        self.displayselect_mode = displayselect
+        self.thread = thread
+        nowDay = datetime.datetime.now().strftime("%Y%m%d")
+        tomorr =(datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y%m%d")
+        yester =(datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d")
+        if self.selectedtime == nowDay:
+            self.date = "2"
+        elif self.selectedtime == tomorr:
+            self.date = "3"
+        elif self.selectedtime == yester:
+            self.date = "1"
+        else:
+            self.date = "4"
+
+    def run(self):
+        try:
+            list = []
+            if self.funcName == "sortTableWidgetDispaly":
+                #print("1")
+                self.sortTableWidgetDispaly()
+                self.sortupdate.emit("sortTableWidgetDispaly", self.sorttableWidgetDispalydata, list, self.seversts,self.displayMode)
+                self.sortupdate.emit("sortTableWidgetDispalyALL", self.DispalydataAll, list, self.seversts,self.displayMode)
+            if self.funcName == "sortTableWidgetDispalyALL":
+                #print("2")
+                self.sortTableWidgetDispalyALL()
+                self.sortupdate.emit("sortTableWidgetDispalyALL", self.sorttableWidgetDispalydata, list, self.seversts,self.displayMode)
+            elif self.funcName == "SearchsortTableWidgetDispaly":
+                #print("3")
+                self.SearchsortTableWidgetDispaly()
+                self.sortupdate.emit("SearchsortTableWidgetDispaly", self.sorttableWidgetDispalydata, list,self.seversts,self.displayMode)
+            elif self.funcName == "sorttableWidgetDisplayChange":
+                #print("4")
+                self.sorttableWidgetDisplayChange()
+                self.sortupdate.emit("sorttableWidgetDisplayChange", self.sortlogchange, list, self.seversts,self.displayMode)
+            elif self.funcName == "sorttableWidgetPeopleDisplay":
+                self.sorttableWidgetPeopleDisplay()
+                self.sortupdate.emit("sorttableWidgetPeopleDisplay", self.sortdiplaylist, self.peopleOnJob,self.seversts, self.displayMode)
+            elif self.funcName == "sorttableWidgetLOGDispaly":
+                self.sorttableWidgetLOGDispaly()
+                self.sortupdate.emit("sorttableWidgetLOGDispaly", self.sortlog, list, self.seversts, self.displayMode)
+            elif self.funcName == "sorttableWidgetPHONEDispaly":
+                self.sorttableWidgetPHONEDispaly()
+                self.sortupdate.emit("sorttableWidgetPHONEDispaly", self.sorttableWidgetPHONEDispalydata, list,self.seversts, "")
+            self.thread.quit()
+        except Exception as e:
+            app_logger.log_error(e)
+        finally:
+            self.thread.quit()
+
+    def severpost_nomeassge(self, postname, **kwargs):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2) + str(postdata3)
+            try:
+                # res = requests.get(url=ip, timeout=30).json()
+                if kwargs:
+                    res = api_fc.request_post('/static/{}'.format(str(postname)), **kwargs)
+                else:
+                    res = api_fc.request_get('/static/{}'.format(str(postname)))
+                self.seversts = "1"
+                return res
+            except Exception as e:
+                app_logger.log_error(e)
+                app_logger.log_error("重大bug")
+                app_logger.log_error(postname, kwargs)
+                self.seversts = "0"
+                return []
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sorttableWidgetPHONEDispaly(self):
+        try:
+            sorttableWidgetPHONEDispalydataall = self.severpost_nomeassge("getphonelist")
+            self.sorttableWidgetPHONEDispalydata = {}
+            num = 0
+            if sorttableWidgetPHONEDispalydataall != None:
+                if self.text != "":
+                    for i in sorttableWidgetPHONEDispalydataall.keys():
+                        if str.lower(str(self.text)) in str(sorttableWidgetPHONEDispalydataall[i]):
+                            self.sorttableWidgetPHONEDispalydata[str(num)] = sorttableWidgetPHONEDispalydataall[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetPHONEDispalydata = sorttableWidgetPHONEDispalydataall
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def checkall(self, datas, text):
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if datas[i]["109"] != text:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+
+    def checkStrsingle(self,datas, text, text2): #单一条件筛选
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(text) in str(datas[i]) and datas[i]["109"] != text2:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] != text1:
+                    if str(datas[i]["8"])[0] == text2 and str(datas[i]["8"])[0] == text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll2(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] != text1:
+                    if str(datas[i]["8"])[0] != text2 and str(datas[i]["8"])[0] != text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll3(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] == text1:
+                    if str(datas[i]["8"])[0] == text2 and str(datas[i]["8"])[0] == text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll4(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] == text1:
+                    if str(datas[i]["8"])[0] != text2 and str(datas[i]["8"])[0] != text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+
+    def sortTableWidgetDispaly(self):
+        try:
+            text = self.text
+            Partdisplay = self.displayselect_mode  # 不显示起飞航班
+            # print(Partdisplay)
+            tableWidgetDispalydataAll = {}
+            if self.displayMode == "A" and (self.selectedbc == "0" or self.date=="4"):
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispaly",selectedtime="%s" % self.selectedtime,date="%s"%self.date)["data"]
+            elif self.displayMode == "B"and (self.selectedbc == "0" or self.date=="4"):
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispaly2",selectedtime="%s" % self.selectedtime,date="%s"%self.date)["data"]
+            elif self.displayMode == "A" and self.selectedbc == "1":
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispalyRead",date="%s"%self.date)["data"]
+            elif self.displayMode == "B"and self.selectedbc == "1":
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispalyRead2",date="%s"%self.date)["data"]
+            self.DispalydataAll=tableWidgetDispalydataAll
+            self.sorttableWidgetDispalydata = {}
+            num = 0
+            if tableWidgetDispalydataAll != None:
+                if text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata=self.checkStrsingle(tableWidgetDispalydataAll, text, "")
+                elif text == "T1" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "2", "2", "2")
+                elif text == "T2T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "2", "1")
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6"  and text != "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "4")
+                elif text == "T1" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "2", "1")
+                elif text == "" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkall(tableWidgetDispalydataAll, "4")
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "1")
+                elif text == "T1" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "2", "1")
+                elif text == "" and Partdisplay == "3":
+                    for i in tableWidgetDispalydataAll.keys():
+                        if tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetDispalydata = tableWidgetDispalydataAll
+
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sortTableWidgetDispalyALL(self):
+        try:
+            if self.displayMode == "A" and (self.selectedbc == "0" or self.date=="4"):
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispaly",selectedtime="%s" % self.selectedtime,date="%s"%self.date)["data"]
+            elif self.displayMode == "B"and (self.selectedbc == "0" or self.date=="4"):
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispaly2",selectedtime="%s" % self.selectedtime,date="%s"%self.date)["data"]
+            elif self.displayMode == "A" and self.selectedbc == "1":
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispalyRead",date="%s"%self.date)["data"]
+            elif self.displayMode == "B"and self.selectedbc == "1":
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispalyRead2",date="%s"%self.date)["data"]
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+
+    def SearchsortTableWidgetDispaly(self):
+        try:
+            text = self.text
+            self.seversts = "1"
+            Partdisplay = self.displayselect_mode  # 不显示起飞航班
+            # print(Partdisplay)
+            tableWidgetDispalydataAll = self.selectedbc
+
+            self.sorttableWidgetDispalydata = {}
+            num = 0
+            if tableWidgetDispalydataAll != None:
+                if text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6"and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "")
+                elif text == "T1" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "2", "1")
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "4")
+                elif text == "T1" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "2", "1")
+                elif text == "" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkall(tableWidgetDispalydataAll,  "4")
+
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "3":
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]) and tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "2", "1")
+                elif text == "" and Partdisplay == "3":
+                    for i in tableWidgetDispalydataAll.keys():
+                        if tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetDispalydata = tableWidgetDispalydataAll
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+    def sorttableWidgetDisplayChange(self):
+        try:
+            text = self.text
+            logall = self.severpost_nomeassge("tableWidgetDisplayChange",
+                                              selectedtime="%s" % self.selectedtime)["data"]
+            self.sortlogchange = {}
+            num = 0
+            if text != "":
+                for i in logall.keys():
+                    if str(text) in str(logall[i]):
+                        self.sortlogchange[str(num)] = logall[i]
+                        num += 1
+            else:
+                self.sortlogchange = logall
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sorttableWidgetPeopleDisplay(self):
+        try:
+            if self.displayselect_mode == "" or self.displayselect_mode == []:
+                text = self.text
+                self.peopleOnJob = [""]
+                bc = self.selectedbc
+                nowDaystr = self.selectedtime  # 选择的日期
+                diplaylistall = self.severpost_nomeassge("qtPeopleLoad",
+                                                         selectedtime="%s" % nowDaystr,
+                                                         bc="%s" % bc )["data"]
+                self.sortdiplaylist = {}
+                num = 0
+                if text != "":
+                    for i in diplaylistall.keys():
+                        if str(text) in str(diplaylistall[i]):
+                            self.sortdiplaylist[str(num)] = diplaylistall[i]
+                            num += 1
+                else:
+                    self.sortdiplaylist = diplaylistall
+                for i in self.sortdiplaylist.keys():
+                    self.peopleOnJob.append(self.sortdiplaylist[i]["姓名"])
+            else:
+                names = self.displayselect_mode
+                text = self.text
+                self.peopleOnJob = [""]
+                bc = self.selectedbc
+                nowDaystr = self.selectedtime  # 选择的日期
+                diplaylistall = self.severpost_nomeassge("qtPeopleLoad",
+                                                         selectedtime="%s" % nowDaystr,
+                                                         bc="%s" % bc )["data"]
+                self.sortdiplaylist = {}
+                num = 0
+                if text != "":
+                    for i in diplaylistall.keys():
+                        if str(text) in str(diplaylistall[i]):
+                            for name in names:
+                                if str(name) in str(diplaylistall[i]):
+                                    self.sortdiplaylist[str(num)] = diplaylistall[i]
+                                    num += 1
+                else:
+                    for i in diplaylistall.keys():
+                        for name in names:
+                            if str(name) in str(diplaylistall[i]):
+                                self.sortdiplaylist[str(num)] = diplaylistall[i]
+                                num += 1
+                for i in self.sortdiplaylist.keys():
+                    self.peopleOnJob.append(self.sortdiplaylist[i]["姓名"])
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sorttableWidgetLOGDispaly(self):
+        try:
+            text = self.text
+            logall = self.severpost_nomeassge("tableWidgetLOGDispaly",
+                                              selectedtime="%s" % self.selectedtime)["data"]
+            self.sortlog = {}
+            num = 0
+            if text != "":
+                for i in logall.keys():
+                    if str(text) in str(logall[i]):
+                        self.sortlog[str(num)] = logall[i]
+                        num += 1
+            else:
+                self.sortlog = logall
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+class MainWidget(QWidget, Ui_Form):
+    LoginWidget_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self):
+        super().__init__()
+        try:
+            # 新增:防抖定时器
+            self.debounce_timer = QtCore.QTimer(self)
+            self.debounce_timer.setSingleShot(True)
+            self.debounce_timer.timeout.connect(self.debounced_search)
+            self.debounce_delay = 300  # 防抖延迟时间(毫秒)
+
+            self.displaySelectstr3 = "0"
+            self.displaySelect_mode = "1"
+            self.localip = None
+            self.severupdatests = "0"
+            self.localtoken = None
+            self.searchpeoplestr = []
+            self.sorttableWidgetDispalydata = {}
+            self.sorttableWidgetDispalydataALL = {}
+            self.sortdiplaylist = {}
+            self.peopleOnJob = [""]
+            self.loginSts = False
+            self.amroLoginSts = False
+            self.findSever = False
+            self.FLIGHTonChange_text = ""
+            self.threadpool = QThreadPool()
+            self.setupUi(self)
+            # self.show()
+            self.loginWidget = loginWidget.LoginWidget()
+            self.findServerWidget = FindServerWidget.findServerWidget()
+
+            # self.amroLoginWidget = amroLoginWidget()
+            if self.findSever:
+                pass
+                # if self.loginSts:
+                #     self.show()
+                # else:
+                #     self.loginWidget.show()
+            else:
+                self.findServerWidget.show()
+
+            self.findServerWidget.selectServer_signal.connect(self.setServer)
+
+            # self.amroLoginWidget.amroLogin_signal.connect(self.displayMain)
+            # data
+        except Exception:
+            pass
+
+    def setServer(self, *args):
+        try:
+            self.ipinfo = args[0] + ':7162'
+            self.clickrow = ""
+            self.clickcolumn = ""
+            # print(self.ipinfo)
+            self.version = versionNumb
+            self.findServerWidget.close()
+            self.loginWidget.ipinfo = self.ipinfo
+            self.loginWidget.login_signal.connect(self.displayMain)
+            self.loginWidget.login_user.connect(self.setUser)
+            checksts = 0
+            # ip = "http://" + str(self.ipinfo) + "/static/remoteCheck2/"+self.version
+            # res = requests.get(url=ip, timeout=180).json()
+            res = api_fc.request_post_without_token('/static/remoteCheck2', checknumber=self.version )
+            if res["返回值"] == "ok":
+                checksts = 1
+            if checksts == 1:
+                if self.loginSts:
+                    self.initDisplay()
+                    self.show()
+                else:
+                    self.loginWidget.show()
+            else:
+                QMessageBox.warning(self, "提示", "有新版更新!请前往NAS共享平台[机务一队/天府机务分部/31准备组无纸化办公/1航班助手/软件]获取电子白板最新版本!!")
+                self.close()
+        except Exception:
+            pass
+
+    def judge_bc(self):
+        try:
+            nowDay = datetime.date.today().strftime("%Y%m%d")
+            nowDay_1 = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d")
+            nowDay_str2 = datetime.date.today().strftime("%Y-%m-%d")
+            a_str = nowDay_str2 + " 04:30:00"
+            b_str = nowDay_str2 + " 20:30:00"
+            a = datetime.datetime.strptime(a_str, "%Y-%m-%d %H:%M:%S")
+            b = datetime.datetime.strptime(b_str, "%Y-%m-%d %H:%M:%S")
+            nowtime = datetime.datetime.now()
+            if a < nowtime < b:
+                self.selectedtime = nowDay
+                self.selectedtime_bc = "A"
+            elif b < nowtime:
+                self.selectedtime = nowDay
+                self.selectedtime_bc = "B"
+            elif nowtime < a:
+                self.selectedtime = nowDay_1
+                self.selectedtime_bc = "B"
+        except Exception:
+            pass
+
+    def initDisplay(self):
+        try:
+            self.oldjsondata = None
+            self.cookie = None
+            self.fl = None
+            self.tts = QTextToSpeech()
+            self.tts.setEngine('sapi')
+            self.judge_bc()
+            self.displayMode = "A"
+            self.displayLabel = headerlabel0
+            self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+            self.tableWidgetFlight.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
+            self.tableWidgetFlight.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
+            # self.lineEdit_phonenum.setText("")
+            #self.checkBox.stateChanged.connect(self.displayChange)
+            self.checkBox.setChecked(True)
+            self.checkBox_2.stateChanged.connect(self.displaySelect2)
+            self.checkBox_2.setChecked(True)
+            self.checkBox_3.stateChanged.connect(self.displaySelect3)
+            self.checkBox_3.setChecked(False)
+            self.pushbutton_searchflight.clicked.connect(self.FLIGHTonChangeman)
+            self.lineEdit_flight.textEdited[str].connect(lambda: self.changebackground())
+            #self.lineEdit_flight.textChanged.connect(self.FLIGHTonChange)
+            self.lineEdit_flight.textChanged.connect(self.on_search_text_changed)
+            self.serchTimer = QTimer()
+            self.serchTimer.start(150 * 1000)
+            self.serchTimer.timeout.connect(self.QThreadSortTimer)
+            self.updatecheck()
+        except Exception:
+            pass
+    def on_search_text_changed(self):
+        """文本变化时重置定时器"""
+        self.debounce_timer.start(self.debounce_delay)
+
+    def debounced_search(self):
+        """实际触发搜索的方法"""
+        self.FLIGHTonChange_text = self.lineEdit_flight.text()
+        self.QThreadSortNow("search")
+
+    def changebackground(self):
+        try:
+            FLIGHTonChange_text = self.lineEdit_flight.text()
+            if FLIGHTonChange_text != "":
+                self.lineEdit_flight.setStyleSheet("background-color:yellow;color:red;font-weight:bold")
+            else:
+                self.lineEdit_flight.setStyleSheet("background-color:white")
+        except Exception:
+            pass
+    def FLIGHTonChange(self):
+        try:
+            self.FLIGHTonChange_text = self.lineEdit_flight.text()
+            # print(self.FLIGHTonChange_text)
+            self.QThreadSortNow("search")
+        except Exception:
+            pass
+    def FLIGHTonChangeman(self):
+        try:
+            self.FLIGHTonChange_text = self.lineEdit_flight.text()
+            # print(self.FLIGHTonChange_text)
+            self.QThreadSortNow("main")
+        except Exception:
+            pass
+
+    def updatecheck(self):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/updatecheck"
+            # res = requests.get(url=ip, timeout=30).json()
+            res = api_fc.request_get('/static/updatecheck')
+            if res["返回值"] == "1":
+                self.label_11.setText("正 常")
+                self.label_11.setStyleSheet(
+                    "background-color:green;color:white;border-radius:5px;padding:2px;font-weight:bold")
+                if self.severupdatests != "1":
+                    self.severupdatests = "1"
+
+            elif res["返回值"] == "0":
+                self.label_11.setText("未更新")
+                self.label_11.setStyleSheet("background-color:yellow;red:white;border-radius:5px;padding:2px;font-weight:bold")
+
+        except Exception:
+            self.label_11.setText("已断开")
+            self.label_11.setStyleSheet("background-color:red;color:white;border-radius:5px;padding:2px;font-weight:bold")
+
+    def displaySelect2(self):
+        try:
+            displaySelect = self.sender()
+            if displaySelect.isChecked():
+                self.displaySelectstr2 = "1"
+                if self.loginSts == True:
+                    if self.displaySelectstr3 == "1":
+                        self.displaySelect_mode = "3"
+                    else:
+                        self.displaySelect_mode = "1"
+                    self.QThreadSortNow("main")
+            else:
+                self.displaySelectstr2 = "0"
+                self.displaySelect_mode = "0"
+                if self.loginSts == True:
+                    if self.displaySelectstr3 == "1":
+                        self.checkBox_3.setChecked(False)
+                    else:
+                        self.QThreadSortNow("main")
+        except Exception:
+            pass
+
+    def displaySelect3(self):
+        try:
+            displaySelect = self.sender()
+            if displaySelect.isChecked():
+                self.displaySelectstr3 = "1"
+                self.displaySelect_mode = "3"
+                if self.loginSts == True:
+                    if self.displaySelectstr2 == "0":
+                        self.checkBox_2.setChecked(True)
+                    else:
+                        self.QThreadSortNow("main")
+            else:
+                self.displaySelectstr3 = "0"
+                if self.loginSts == True:
+                    if self.displaySelectstr2 == "0":
+                        self.displaySelect_mode = "0"
+                    else:
+                        self.displaySelect_mode = "1"
+                    self.QThreadSortNow("main")
+        except Exception:
+            pass
+
+
+    def displayMain(self, *args):
+        try:
+            if args[0]:
+                self.initDisplay()
+                self.loginSts = True
+                self.loginWidget.close()
+                self.show()
+                self.QThreadSortNow("main")
+        except Exception:
+            pass
+
+    def setUser(self, args):
+        try:
+            self.user = args[1]
+            self.authority = args[3]
+            self.label_username.setText(self.user)
+        except Exception:
+            pass
+
+
+    def QThreadSortDispalyTimer(self, name, dict, dict2, seversts, displayMode):
+        try:
+            if name == "sortTableWidgetDispaly":
+                if displayMode == "A":
+                    self.displayLabel = headerlabel0
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+
+                elif displayMode == "B":
+                    self.displayLabel = headerlabel_B
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+                self.sorttableWidgetDispalydata = {}
+                self.sorttableWidgetDispalydata = dict
+                self.sorttableWidgetDispalydataALL={}
+                self.sorttableWidgetDispalydataALL = dict
+                self.tableWidgetDispaly()
+                # print(self.sorttableWidgetDispalydata)
+
+            if seversts == "0":
+                self.severupdatests = "-"
+                self.label_11.setText("已断开")
+                self.label_11.setStyleSheet(
+                    "background-color:red;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            elif seversts == "1" and self.severupdatests == "1":
+                self.label_11.setText("正 常")
+                self.label_11.setStyleSheet(
+                    "background-color:green;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            elif seversts == "1" and self.severupdatests == "0":
+                self.label_11.setText("未更新")
+                self.label_11.setStyleSheet(
+                    "background-color:yellow;color:red;border-radius:5px;padding:2px;font-weight:bold")
+        except Exception:
+            pass
+
+    def QThreadSortDispalyNow(self, name, dict, dict2, seversts, displayMode):
+        try:
+            if name == "sortTableWidgetDispaly":
+                if displayMode == "A":
+                    self.displayLabel = headerlabel0
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+
+                else:
+                    self.displayLabel = headerlabel_B
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+                self.sorttableWidgetDispalydata = {}
+                self.sorttableWidgetDispalydata = dict
+                self.sorttableWidgetDispalydataALL = {}
+                self.sorttableWidgetDispalydataALL = dict
+                # print(self.sorttableWidgetDispalydata)
+                self.tableWidgetDispaly()
+            elif name == "SearchsortTableWidgetDispaly":
+                if displayMode == "A":
+                    self.displayLabel = headerlabel0
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+
+                elif displayMode == "B":
+                    self.displayLabel = headerlabel_B
+                    self.tableWidgetFlight.setColumnCount(len(self.displayLabel))
+                    self.tableWidgetFlight.verticalHeader().setVisible(False)
+                    self.tableWidgetFlight.setHorizontalHeaderLabels(self.displayLabel)
+                self.sorttableWidgetDispalydata = {}
+                self.sorttableWidgetDispalydata = dict
+                self.tableWidgetDispaly()
+                # print(self.sorttableWidgetDispalydata)
+
+            if seversts == "0":
+                self.severupdatests = "-"
+                self.label_11.setText("已断开")
+                self.label_11.setStyleSheet(
+                    "background-color:red;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            elif seversts == "1" and self.severupdatests == "1":
+                self.label_11.setText("正 常")
+                self.label_11.setStyleSheet(
+                    "background-color:green;color:white;border-radius:5px;padding:2px;font-weight:bold")
+            elif seversts == "1" and self.severupdatests == "0":
+                self.label_11.setText("未更新")
+                self.label_11.setStyleSheet(
+                    "background-color:yellow;color:red;border-radius:5px;padding:2px;font-weight:bold")
+        except Exception:
+            pass
+
+
+    def QThreadSortTimer(self):
+        try:
+
+            if self.loginSts == True:
+                # print("多线程刷新1")
+                self.judge_bc()
+                self.FLIGHTonChange_text = self.lineEdit_flight.text()
+                th1 = QThread()
+                self.sortTableWidgetDispalyThread1 = sortdisplaySever("sortTableWidgetDispaly", self.ipinfo,
+                                                                      self.selectedtime, self.FLIGHTonChange_text,
+                                                                      self.displayMode, "1", self.displaySelect_mode,
+                                                                      th1)
+                self.sortTableWidgetDispalyThread1.sortupdate.connect(self.QThreadSortDispalyTimer)
+                self.sortTableWidgetDispalyThread1.moveToThread(th1)
+                th1.started.connect(self.sortTableWidgetDispalyThread1.run)
+                th1.start()
+                self.updatecheck()
+        except Exception:
+            pass
+
+    def QThreadSortNow(self, name):
+        try:
+            if "main" in str(name):
+                # print(datetime.datetime.now())
+                th11 = QThread()
+                self.sortTableWidgetDispalyThread11 = sortdisplaySever("sortTableWidgetDispaly", self.ipinfo,
+                                                                       self.selectedtime, self.FLIGHTonChange_text,
+                                                                       self.displayMode, "1", self.displaySelect_mode,
+                                                                       th11)
+                try:
+                    self.sortTableWidgetDispalyThread11.sortupdate.disconnect()
+                except TypeError:
+                    pass
+                self.sortTableWidgetDispalyThread11.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sortTableWidgetDispalyThread11.moveToThread(th11)
+                th11.started.connect(self.sortTableWidgetDispalyThread11.run)
+                th11.start()
+            elif "search" in str(name):
+                # print(datetime.datetime.now())
+                th111 = QThread()
+                self.sortTableWidgetDispalyThread111 = sortdisplaySever("SearchsortTableWidgetDispaly", self.ipinfo,
+                                                                        self.selectedtime, self.FLIGHTonChange_text,
+                                                                        self.displayMode, self.sorttableWidgetDispalydataALL, self.displaySelect_mode,
+                                                                        th111)
+                self.sortTableWidgetDispalyThread111.sortupdate.connect(self.QThreadSortDispalyNow)
+                self.sortTableWidgetDispalyThread111.moveToThread(th111)
+                th111.started.connect(self.sortTableWidgetDispalyThread111.run)
+                th111.start()
+
+        except Exception:
+            pass
+
+    def enter_item_slot(self, item):
+        try:
+            self.tool_tip = item.text()
+            # print("self.tool_tip:", self.tool_tip)
+        except Exception:
+            pass
+
+    def tableWidgetDispaly(self):
+        try:
+            selftaxi = ["166", "166L", "166R", "167", "167L", "167R", "168", "169", "170", "171", "172", "173", "174",
+                        "269", "270", "271", "272", "273", "274", "275", "287", "288", "601", "602", "603", "604",
+                        "605", "606", "607", "607L", "607R"]  # 自滑位
+            if self.sorttableWidgetDispalydata != "":
+                # print("刷新开始")
+                # dateNow=datetime.datetime.now()
+                tableWidgetDispalydata = self.sorttableWidgetDispalydata
+                col = len(self.displayLabel)
+                self.tableWidgetFlight.setRowCount(len(tableWidgetDispalydata.keys()))
+                for row in tableWidgetDispalydata.keys():
+                    for colNum in range(0, col):
+                        if colNum == 13:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                        elif colNum == 15:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                        elif colNum == 18:
+                            if tableWidgetDispalydata[row][str(colNum)] in selftaxi and tableWidgetDispalydata[row][str(colNum)] != "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("lightgreen"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+
+                            elif tableWidgetDispalydata[row][str(colNum)] not in selftaxi or tableWidgetDispalydata[row][str(colNum)] == "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                            font = QFont()
+                            # font.setFamily("SimHei")
+                            font.setFamily("Microsoft YaHei")
+                            font.setBold(True)
+
+                            self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+                        elif colNum == 19:
+                            if tableWidgetDispalydata[row][str(colNum)] == "短停送" or tableWidgetDispalydata[row][str(colNum)] == "特后前送":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str("blue")))
+                                font = QFont()
+                                font.setFamily("Microsoft YaHei")
+                                font.setBold(True)
+                                self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+
+                            else:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+
+                        elif 19 < colNum < 31:
+                            if "√" in tableWidgetDispalydata[row][str(colNum)] or tableWidgetDispalydata[row][str(colNum)] == "":
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)]).replace("*","")))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                            if tableWidgetDispalydata[row][str(colNum)] != "" and "√" not in tableWidgetDispalydata[row][str(colNum)]:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)]).replace("*","")))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+                        elif colNum == 61:
+                            if str(tableWidgetDispalydata[row][str(colNum)]) != "" and str(tableWidgetDispalydata[row][str(colNum)]) != None:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("red"))
+                                font = QFont()
+                                font.setFamily("Microsoft YaHei")
+                                font.setBold(True)
+                                self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+                            else:
+                                self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                                font = QFont()
+                                font.setFamily("Microsoft YaHei")
+                                font.setBold(True)
+                                self.tableWidgetFlight.item(int(row), colNum).setFont(font)
+                        elif colNum == 49:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                            if tableWidgetDispalydata[row][str(colNum)] != "":
+                                for i in tableWidgetDispalydata[row][str(colNum)].split(","):
+                                    if "√" not in i:
+                                        self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                        self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+                                        break
+                                    else:
+                                        self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                        self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                            else:
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+                        elif colNum == 51:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+                            if tableWidgetDispalydata[row][str(colNum)] != "" and "√" not in tableWidgetDispalydata[row][str(colNum)]:
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor("yellow"))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor("black"))
+                            else:
+                                self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                                self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+
+
+                        elif 0 < colNum < 11:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(colNum)])))
+
+                        elif colNum == 0:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(int(row)+1)))
+
+                        else:
+                            self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem( str(tableWidgetDispalydata[row][str(colNum)])))
+
+                        if colNum not in [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,49,51, 61]:
+                            self.tableWidgetFlight.item(int(row), colNum).setBackground(QColor(str(tableWidgetDispalydata[row]["99"])))
+                            self.tableWidgetFlight.item(int(row), colNum).setForeground(QColor(str(tableWidgetDispalydata[row]["101"])))
+
+                        if colNum not in [4 , 6]:
+                            self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        else:
+                            self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignCenter)
+                            self.tableWidgetFlight.setRowHeight(int(row), 35)
+
+                        if self.displayMode == "A":
+                            settips={0:"53",4:"62",49:"50",19:"47",11:"57",13:"57",15:"57",45:"45",61:"61",6:"17",38:"40",}
+                            for key,value in settips.items():
+                                if self.tableWidgetFlight.item(int(row), key):
+                                    self.tableWidgetFlight.item(int(row), key).setToolTip("%s" % (str(tableWidgetDispalydata[row][str(value)])))
+                        else:
+                            self.tableWidgetFlight.item(int(row), 0).setToolTip("[%s,%s]" % ( str(tableWidgetDispalydata[row][str(col - 5)]),str(tableWidgetDispalydata[row][str(col - 4)])))
+                            for ii in range (1,4):
+                                self.tableWidgetFlight.item(int(row), ii).setToolTip("%s" % str(tableWidgetDispalydata[row][str(24)]))
+
+                if self.displayMode == "A":
+                    self.tableWidgetFlight.resizeColumnsToContents()
+                    self.tableWidgetFlight.setWordWrap(True)
+                    for i in range(col):
+                        if i in [1,2,3,5,7,8,9,10,12,14,16,17,20,22,24,26,28,30,32,34,36,39,40,42,43,44,46,47,48,50,52,53,54,55,56,57,58,59,60,62,63,64,65]:
+                            self.tableWidgetFlight.setColumnHidden(i, True)
+                        else:
+                            self.tableWidgetFlight.setColumnHidden(i, False)
+                        if i in [21, 23, 25, 27, 29, 31]:
+                            self.tableWidgetFlight.setColumnWidth(i, 70)
+                        elif i in [45]:
+                            self.tableWidgetFlight.setColumnWidth(i, 45)
+                else:
+                    for i in range(col):
+                        if i in [col - 9, col - 11, col - 12,19,20,21,22,23,28,29,30,31]:
+                            self.tableWidgetFlight.setColumnHidden(i, True)
+                        else:
+                            self.tableWidgetFlight.setColumnHidden(i, False)
+                    self.tableWidgetFlight.resizeColumnsToContents()
+                    self.tableWidgetFlight.setColumnWidth(10, 70)
+                    self.tableWidgetFlight.setColumnWidth(11, 70)
+                    self.tableWidgetFlight.setColumnWidth(12, 70)
+                    self.tableWidgetFlight.setColumnWidth(13, 70)
+                    self.tableWidgetFlight.setColumnWidth(14, 70)
+                    self.tableWidgetFlight.setColumnWidth(15, 70)
+                    self.tableWidgetFlight.setColumnWidth(22, 45)
+        except Exception as e:
+            app_logger.log_error(e)
+
+if __name__ == '__main__':
+    app = QApplication(sys.argv)
+    mw = MainWidget()
+
+    sys.exit(app.exec())

File diff suppressed because it is too large
+ 65 - 0
Functions/QTMain.py


+ 71 - 0
Functions/QtFunctions/AddPGWidget.py

@@ -0,0 +1,71 @@
+
+import datetime
+
+from PyQt6.QtWidgets import QWidget , QMessageBox
+
+from UI.AddPG import Ui_FormAddPG
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class AddPGWidget(Ui_FormAddPG, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            nowDay = datetime.datetime.now()
+            self.dateTimeEdit.setDateTime(nowDay)
+            self.pushButton.clicked.connect(self.btn)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def getname(self, name, date, ip):
+        try:
+            self.getname = name
+            self.getdate = date
+            self.getip = ip
+            # print(self.getname)
+            # print(self.getdate)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    # def severpost_meassge(self, postname, postdata, postdata2, postdata3):
+    #     # print(ip)
+    #     try:
+    #         ip = "http://" + str(self.getip) + "/static/" + str(postname) + str(postdata) + str(postdata2) + str(
+    #             postdata3)
+    #         res = requests.get(url=ip, timeout=30).json()
+    #         if res["返回值"] == "ok":
+    #             QMessageBox.warning(self, "提示", "已创建待办")
+    #         else:
+    #             QMessageBox.warning(self, "提示", "创建待办失败,请检查配置文件或联系管理员检查服务器!")
+    #     except Exception as e:
+    #         QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+    #         app_logger.log_error(e)
+
+    def severpost_meassge(self, postname, **kwargs):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2) + str(postdata3) + str(postdata4)
+            # res = requests.get(url=ip, timeout=30).json()
+            res = api_fc.request_post('/static/{}'.format(postname), **kwargs)
+            #print('postname:{}, msg:{}'.format(postname, res['msg']))
+            if res["返回值"] == "ok":
+                QMessageBox.warning(self, "提示", "已创建待办")
+            else:
+                QMessageBox.warning(self, "提示", "创建待办失败,请检查配置文件或联系管理员检查服务器!")
+        except Exception as e:
+            app_logger.log_error(e)
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+
+    def btn(self):
+        try:
+            dealtext = self.textEdit.toPlainText()
+            time = self.dateTimeEdit.dateTime().toString('yyyy-M-d H:mm')
+            # print(time)
+            self.severpost_meassge("insertLogs",
+                                   text="/%s" % dealtext,
+                                   name="/%s" % self.getname,
+                                   time="/%s" % time)
+            self.close()
+        except Exception as e:
+            app_logger.log_error(e)

+ 110 - 0
Functions/QtFunctions/LogerinTxt.py

@@ -0,0 +1,110 @@
+
+import os
+import traceback
+from datetime import datetime
+from pathlib import Path
+
+path="D:\\flightinfo"
+class ErrorLogger:
+    """
+    错误日志记录器(单例模式,固定配置)
+    功能:
+    - 自动创建日志目录和文件
+    - 限制单个日志文件大小
+    - 自动滚动保留最近备份
+    - 最新错误显示在最前面
+    - 包含详细时间戳和错误堆栈
+    """
+
+    # 固定配置(类属性)
+    _DEFAULT_FILENAME = "app_errors.log"
+    _DEFAULT_LOG_DIR = Path(f"{path}\logs")  # 默认存储目录
+    _DEFAULT_MAX_SIZE_KB = 1024  # 默认1MB大小限制
+    _DEFAULT_BACKUP_COUNT = 5  # 默认保留5个备份
+
+    _instance = None  # 单例实例
+
+    def __new__(cls):
+        if cls._instance is None:
+            cls._instance = super().__new__(cls)
+            cls._instance.__init__()  # 确保初始化只执行一次
+        return cls._instance
+
+    def __init__(self):
+        if not hasattr(self, '_initialized'):  # 防止重复初始化
+            self.filename = self._DEFAULT_LOG_DIR / self._DEFAULT_FILENAME
+            self.max_size = self._DEFAULT_MAX_SIZE_KB * 1024
+            self.backup_count = self._DEFAULT_BACKUP_COUNT
+            self._ensure_directory_exists()
+            self._ensure_file_exists()
+            self._initialized = True
+
+    def _ensure_directory_exists(self):
+        """确保日志目录存在"""
+        try:
+            self._DEFAULT_LOG_DIR.mkdir(parents=True, exist_ok=True)
+        except Exception as e:
+            raise RuntimeError(f"无法创建日志目录 {self._DEFAULT_LOG_DIR}: {e}")
+
+    def _ensure_file_exists(self):
+        """确保日志文件存在"""
+        try:
+            if not self.filename.exists():
+                with open(self.filename, 'w', encoding='utf-8') as f:
+                    f.write("")  # 创建空文件
+        except Exception as e:
+            raise RuntimeError(f"无法创建日志文件 {self.filename}: {e}")
+
+    def _rotate_files(self):
+        """执行日志文件滚动"""
+        if self.filename.exists() and os.path.getsize(self.filename) >= self.max_size:
+            try:
+                # 删除最旧的备份
+                oldest = f"{self.filename}.{self.backup_count}"
+                if os.path.exists(oldest):
+                    os.remove(oldest)
+
+                # 重命名其他备份
+                for i in range(self.backup_count - 1, 0, -1):
+                    src = f"{self.filename}.{i}"
+                    if os.path.exists(src):
+                        os.rename(src, f"{self.filename}.{i + 1}")
+
+                # 重命名当前日志
+                os.rename(self.filename, f"{self.filename}.1")
+
+                # 创建新日志文件
+                self._ensure_file_exists()
+            except Exception as e:
+                print(f"日志滚动失败: {e}")
+
+    def log_error(self, error_msg=None):
+        """
+        记录错误信息
+        :param error_msg: 可以是Exception对象或任意可转换为字符串的内容
+        """
+        self._rotate_files()
+
+        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]  # 带毫秒的时间戳
+
+        if isinstance(error_msg, Exception):
+            error_details = "".join(traceback.format_exception(
+                type(error_msg), error_msg, error_msg.__traceback__))
+        else:
+            error_details = str(error_msg) if error_msg else "Unknown error"
+
+        log_entry = f"[{timestamp}]\n{error_details}\n{'=' * 50}\n"
+
+        try:
+            if os.path.exists(self.filename):
+                with open(self.filename, 'r+', encoding='utf-8') as f:
+                    content = f.read()
+                    f.seek(0)
+                    f.write(log_entry + content)
+            else:
+                with open(self.filename, 'w', encoding='utf-8') as f:
+                    f.write(log_entry)
+        except Exception as e:
+            print(f"无法写入错误日志: {e}")
+# 创建单例实例(推荐直接使用这个实例)
+app_logger = ErrorLogger()

+ 71 - 0
Functions/QtFunctions/LoginWidget.py

@@ -0,0 +1,71 @@
+from PyQt6 import QtCore
+from PyQt6.QtWidgets import QWidget , QMessageBox
+
+from UI.login import Ui_login
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class LoginWidget(Ui_login, QWidget):
+    login_signal = QtCore.pyqtSignal(bool)
+    login_user = QtCore.pyqtSignal(list)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            # print('login widget')
+            self.pushButton.clicked.connect(self.btn)
+            # self.setipinfo()
+            self.ipinfo = None
+        except Exception as e:
+            app_logger.log_error(e)
+ #   '''
+    def severpost_meassge(self, postname, **kwargs):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2)
+            try:
+                # res = requests.get(url=ip, timeout=30).json()
+                res = api_fc.request_post('/static/{}'.format(postname), **kwargs)
+                #print('serverpost-mesasge ------')
+                #print(res)
+
+            except Exception as e:
+                # print('登录服务器失败')
+                app_logger.log_error('登录服务器失败')
+                res = ""
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                app_logger.log_error(e)
+                print(e)
+
+            return res
+        except Exception as e:
+            app_logger.log_error(e)
+#'''
+    def btn(self):
+        try:
+            username = self.lineEditUser.text()
+            password = self.lineEditPassword.text()
+            try:
+                # res = self.severpost_meassge("loginTable", username="%s" % username, password="%s" % password)["返回值"]
+                res = api_fc.get_access_token(username, password)["返回值"]
+                #print('login button :{}'.format(res))
+                # print(res)
+            except Exception as e:
+                res = ""
+                app_logger.log_error(e)
+
+            # print(res)
+            if res != "" and int(res[3]) <= 3:
+                self.login_signal.emit(True)
+                self.login_user.emit(res)
+            else:
+                self.show_message()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def show_message(self):
+        try:
+            QMessageBox.warning(self, "警告", "无此用户或密码错误或账号无权限访问办公平台")
+        except Exception as e:
+            app_logger.log_error(e)

+ 67 - 0
Functions/QtFunctions/LoginWidget_display.py

@@ -0,0 +1,67 @@
+from PyQt6 import QtCore
+from PyQt6.QtWidgets import QWidget , QMessageBox
+
+from UI.login import Ui_login
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class LoginWidget(Ui_login, QWidget):
+    login_signal = QtCore.pyqtSignal(bool)
+    login_user = QtCore.pyqtSignal(list)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            # print('login widget')
+            self.pushButton.clicked.connect(self.btn)
+            # self.setipinfo()
+            self.ipinfo = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def severpost_meassge(self, postname, **kwargs):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2)
+            try:
+                # res = requests.get(url=ip, timeout=30).json()
+                res = api_fc.request_post('/static/{}'.format(postname), **kwargs)
+                # print(res)
+
+            except Exception as e:
+                # print('登录服务器失败')
+                app_logger.log_error('登录服务器失败')
+                res = ""
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                app_logger.log_error(e)
+
+            return res
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def btn(self):
+        try:
+            username = self.lineEditUser.text()
+            password = self.lineEditPassword.text()
+            try:
+                res = api_fc.get_access_token(username, password)["返回值"]
+                # print(res)
+            except Exception as e:
+                res = ""
+                app_logger.log_error(e)
+
+            # print(res)
+            if res != "" and int(res[3]) <= 4:
+                self.login_signal.emit(True)
+                self.login_user.emit(res)
+            else:
+                self.show_message()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def show_message(self):
+        try:
+            QMessageBox.warning(self, "警告", "无此用户或密码错误或账号无权限访问办公平台")
+        except Exception as e:
+            app_logger.log_error(e)

+ 325 - 0
Functions/QtFunctions/SaveFile.py

@@ -0,0 +1,325 @@
+import traceback
+from PyQt6.QtWidgets import QFileDialog
+from openpyxl import Workbook
+from Functions.QtFunctions.LogerinTxt import app_logger
+import datetime
+from Functions.apiFunction import api_fc
+
+
+def saveRisktable(self):
+    try:
+        fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/风险数据库.xlsx" ,"xlsx(*.xlsx)")
+        if fileName:
+            ip = "http://" + str(self.ipinfo) + "/static/saveRisktable"
+            # res = requests.get(url=ip, timeout=30).json()["返回值"]
+            res = api_fc.request_get('/static/saveRisktable')["返回值"]
+            wb = Workbook()
+            wb.create_sheet(title="风险数据库.xlsx", index=0)
+            ws = wb.active
+            ws.title = '风险数据库'
+            ws = wb['风险数据库']
+            for row in range(1, len(res ) +1):
+                for cloumn in range(1, 8):
+                    ws.cell(row, cloumn).number_format = '@'
+            ws.cell(1, 1).value = "风险编号"
+            ws.cell(1, 2).value = "状态"
+            ws.cell(1, 3).value = "提示内容"
+            ws.cell(1, 4).value = "触发条件1"
+            ws.cell(1, 5).value = "触发条件2"
+            ws.cell(1, 6).value = "触发条件3"
+            ws.cell(1, 7).value = "触发条件4"
+            ws.cell(1, 8).value = "触发条件5"
+            if len(res) != 0:
+                ii =1
+                for i in res:
+                    for j in range(0, 8):
+                        # print(ii,j)
+                        ws.cell(int(ii) + 1, j+ 1).value = i[j]
+                    ii += 1
+            wb.save(fileName)
+    except Exception:
+        print(traceback.format_exc())
+
+
+def saveAllflight(self):
+    try:
+        index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6", "计飞": "7",
+                 "机位": "8"}
+        index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位"}
+        fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/%s全天航班导出(未含保障结束).xlsx" % self.selectedtime,
+                                                  "xlsx(*.xlsx)")
+        # print(fileName)
+        if fileName:
+            # ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly22/" + "%s" % self.selectedtime
+            # res = requests.get(url=ip, timeout=30).json()
+            res = api_fc.request_post('/static/tableWidgetDispaly22',selectedtime= "%s" % self.selectedtime)['data']
+            # print(res)
+            wb = Workbook()
+            wb.create_sheet(title="%s全天航班导出(未含保障结束).xlsx" % self.selectedtime, index=0)
+            ws = wb.active
+            ws.title = '航班数据'
+            ws = wb['航班数据']
+            for row in range(1, 400):
+                for cloumn in range(1, 10):
+                    ws.cell(row, cloumn).number_format = '@'
+            ws.cell(1, 1).value = "序号"
+            ws.cell(1, 2).value = "类型"
+            ws.cell(1, 3).value = "航班号"
+            ws.cell(1, 4).value = "机型"
+            ws.cell(1, 5).value = "发动机"
+            ws.cell(1, 6).value = "机号"
+            ws.cell(1, 7).value = "计达"
+            ws.cell(1, 8).value = "预达"
+            ws.cell(1, 9).value = "计飞"
+            ws.cell(1, 10).value = "机位"
+            if len(res) != 0:
+                for i in res.keys():
+                    if res[i]["109"] != "4":
+                        for j in range(1, 11):
+                            if j == 2 and "3U" in res[i]["4"] and "CSC" in res[i]["4"]:
+                                ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                            elif j == 7 or j == 8:
+                                text = str(res[i][index[index2[j]]]).replace(":", "") if str(
+                                    res[i][index[index2[j]]]) != "" else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            elif j == 9:
+                                text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":", "") if "]" in str(
+                                    res[i][index[index2[j]]]) else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            else:
+                                ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+            wb.save(fileName)
+        self.show_message2("提示", "%s全天航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+    except Exception:
+        self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+        app_logger.error(traceback.format_exc())
+
+
+def saveAllflight2(self):
+    try:
+        time2 = datetime.datetime.strptime(self.selectedtime, "%Y%m%d")
+        time1 = str((time2 - datetime.timedelta(days=1)).strftime("%Y%m%d"))
+        index = {"序号": "1", "类型": "19", "航班号": "9", "机型": "5", "发动机": "7", "机号": "3", "计达": "11", "预达": "13",
+                 "计飞": "15", "机位": "8", "放行": "21", "工1": "23", "工2": "25", "工3": "27", "工4": "29", "备注": "61",
+                 "班组长": "31"}
+        index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位", 11: "放行",
+                  12: "工1", 13: "工2", 14: "工3", 15: "工4", 16: "备注", 17: "班组长"}
+        fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹",
+                                                  "/%s航班安排备份导出.xlsx" % (str(time1) + "-" + str(self.selectedtime)[-2:]),
+                                                  "xlsx(*.xlsx)")
+        # print(fileName)
+        wb = Workbook()
+        if fileName:
+            for selectedtime in [self.selectedtime, time1]:
+                # ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly11/" + "%s" % selectedtime
+                # res = requests.get(url=ip, timeout=30).json()
+                res = api_fc.request_post('/static/tableWidgetDispaly11',selectedtime="%s" % selectedtime)['data']
+                # print(res)
+                wb.create_sheet(title="%s" % selectedtime, index=0)
+                ws = wb.active
+                ws.title = "%s" % selectedtime
+                ws = wb["%s" % selectedtime]
+                for row in range(1, 400):
+                    for cloumn in range(1, 18):
+                        ws.cell(row, cloumn).number_format = '@'
+                ws.cell(1, 1).value = "序号"
+                ws.cell(1, 2).value = "类型"
+                ws.cell(1, 3).value = "航班号"
+                ws.cell(1, 4).value = "机型"
+                ws.cell(1, 5).value = "发动机"
+                ws.cell(1, 6).value = "机号"
+                ws.cell(1, 7).value = "计达"
+                ws.cell(1, 8).value = "预达"
+                ws.cell(1, 9).value = "计飞"
+                ws.cell(1, 10).value = "机位"
+                ws.cell(1, 11).value = "放行"
+                ws.cell(1, 12).value = "工1"
+                ws.cell(1, 13).value = "工2"
+                ws.cell(1, 14).value = "工3"
+                ws.cell(1, 15).value = "工4"
+                ws.cell(1, 16).value = "备注"
+                ws.cell(1, 17).value = "班组长"
+
+                if len(res) != 0:
+                    for i in res.keys():
+                        for j in range(1, 18):
+                            if j == 2:
+                                if "3U" not in res[i]["4"] and "CSC" not in res[i]["4"]:
+                                    ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                            elif j == 7 or j == 8:
+                                text = str(res[i][index[index2[j]]]).replace(":", "") if str(
+                                    res[i][index[index2[j]]]) != "" else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            elif j == 9:
+                                text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":", "") if "]" in str(
+                                    res[i][index[index2[j]]]) else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            else:
+                                ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+        wb.save(fileName)
+        self.show_message2("提示", "%s全天航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+    except Exception:
+        self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+        app_logger.error(traceback.format_exc())
+
+
+def saveAllflight3(self):
+    try:
+        time2 = datetime.datetime.strptime(self.selectedtime, "%Y%m%d")
+        time1 = str((time2 - datetime.timedelta(days=1)).strftime("%Y%m%d"))
+        index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6", "计飞": "7",
+                 "机位": "8", "工作单": "10", "飞单": "11", "客舱单": "12", "临工单": "13", "AMRO记录": "14", "备注": "32", "电签": "15"}
+        index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位",
+                  11: "工作单", 12: "飞单", 13: "客舱单", 14: "临工单", 15: "AMRO记录", 16: "备注", 17: "电签"}
+        fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹",
+                                                  "/%s维修记录备份导出.xlsx" % (str(time1) + "-" + str(self.selectedtime)[-2:]),
+                                                  "xlsx(*.xlsx)")
+        # print(fileName)
+        wb = Workbook()
+        if fileName:
+            for selectedtime in [self.selectedtime, time1]:
+                # ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly22/" + "%s" % selectedtime
+                # res = requests.get(url=ip, timeout=30).json()
+                res = api_fc.request_post('/static/tableWidgetDispaly22', selectedtime="%s" % self.selectedtime)['data']
+                # print(res)
+                wb.create_sheet(title="%s" % selectedtime, index=0)
+                ws = wb.active
+                ws.title = "%s" % selectedtime
+                ws = wb["%s" % selectedtime]
+                for row in range(1, 400):
+                    for cloumn in range(1, 18):
+                        ws.cell(row, cloumn).number_format = '@'
+                ws.cell(1, 1).value = "序号"
+                ws.cell(1, 2).value = "类型"
+                ws.cell(1, 3).value = "航班号"
+                ws.cell(1, 4).value = "机型"
+                ws.cell(1, 5).value = "发动机"
+                ws.cell(1, 6).value = "机号"
+                ws.cell(1, 7).value = "计达"
+                ws.cell(1, 8).value = "预达"
+                ws.cell(1, 9).value = "计飞"
+                ws.cell(1, 10).value = "机位"
+                ws.cell(1, 11).value = "工作单"
+                ws.cell(1, 12).value = "飞单"
+                ws.cell(1, 13).value = "客舱单"
+                ws.cell(1, 14).value = "临工单"
+                ws.cell(1, 15).value = "AMRO记录"
+                ws.cell(1, 16).value = "备注"
+                ws.cell(1, 17).value = "电签"
+
+                if len(res) != 0:
+                    for i in res.keys():
+                        for j in range(1, 18):
+                            if j == 2:
+                                if "3U" not in res[i]["4"] and "CSC" not in res[i]["4"]:
+                                    ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                            elif j == 6:
+                                text = "B-" + str(res[i][index[index2[j]]])
+                                ws.cell(int(i) + 2, j).value = text
+                            elif j == 7 or j == 8:
+                                text = str(res[i][index[index2[j]]]).replace(":", "") if str(
+                                    res[i][index[index2[j]]]) != "" else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            elif j == 9:
+                                text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":", "") if "]" in str(
+                                    res[i][index[index2[j]]]) else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            else:
+                                ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+        wb.save(fileName)
+        self.show_message2("提示", "%s全天航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+    except Exception:
+        self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+        app_logger.error(traceback.format_exc())
+
+
+def saveDealflight(self):
+    try:
+        index = {"序号": "0", "类型": "9", "航班号": "4", "机型": "2", "发动机": "3", "机号": "1", "计达": "5", "预达": "6", "计飞": "7",
+                 "机位": "8"}
+        index2 = {1: "序号", 2: "类型", 3: "航班号", 4: "机型", 5: "发动机", 6: "机号", 7: "计达", 8: "预达", 9: "计飞", 10: "机位"}
+        fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/%s交班航班导出.xlsx" % self.selectedtime, "xlsx(*.xlsx)")
+        # print(fileName)
+        if fileName:
+            # ip = "http://" + str(self.ipinfo) + "/static/" + "tableWidgetDispaly22/" + "%s" % self.selectedtime
+            # res = requests.get(url=ip, timeout=30).json()
+            res = api_fc.request_post('/static/tableWidgetDispaly22',selectedtime= "%s" % self.selectedtime)['data']
+            # print(res)
+            wb = Workbook()
+            wb.create_sheet(title="%s交班航班导出.xlsx" % self.selectedtime, index=0)
+            ws = wb.active
+            ws.title = '航班数据'
+            ws = wb['航班数据']
+            for row in range(1, 400):
+                for cloumn in range(1, 10):
+                    ws.cell(row, cloumn).number_format = '@'
+            ws.cell(1, 1).value = "序号"
+            ws.cell(1, 2).value = "类型"
+            ws.cell(1, 3).value = "航班号"
+            ws.cell(1, 4).value = "机型"
+            ws.cell(1, 5).value = "发动机"
+            ws.cell(1, 6).value = "机号"
+            ws.cell(1, 7).value = "计达"
+            ws.cell(1, 8).value = "预达"
+            ws.cell(1, 9).value = "计飞"
+            ws.cell(1, 10).value = "机位"
+            if len(res) != 0:
+                for i in res.keys():
+                    if res[i]["109"] == "1" or res[i]["109"] == "3":
+                        for j in range(1, 11):
+                            if j == 2:
+                                if "3U" not in res[i]["4"] and "CSC" not in res[i]["4"]:
+                                    ws.cell(int(i) + 2, j).value = "外" + str(res[i][index[index2[j]]])
+                                else:
+                                    ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+                            elif j == 7 or j == 8:
+                                text = str(res[i][index[index2[j]]]).replace(":", "") if str(
+                                    res[i][index[index2[j]]]) != "" else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            elif j == 9:
+                                text = str(str(res[i][index[index2[j]]]).split("]")[1]).replace(":", "") if "]" in str(
+                                    res[i][index[index2[j]]]) else ""
+                                ws.cell(int(i) + 2, j).value = text
+                            else:
+                                ws.cell(int(i) + 2, j).value = res[i][index[index2[j]]]
+            wb.save(fileName)
+        self.show_message2("提示", "%s交班航班导出成功!文件已保存至%s" % (self.selectedtime, fileName))
+    except Exception:
+        self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!" % fileName)
+        app_logger.error(traceback.format_exc())
+
+def saveCase(self):
+    try:
+        fileName, _ = QFileDialog.getSaveFileName(None, "选取文件夹", "/停场航班导入模板.xlsx", "xlsx(*.xlsx)")
+        if fileName:
+            wb = Workbook()
+            wb.create_sheet(title="停场航班导入模板", index=0)
+            ws = wb.active
+            ws.title = '航班数据'
+            ws = wb['航班数据']
+            for row in range(1, 50):
+                for cloumn in range(1, 7):
+                    ws.cell(row, cloumn).number_format = '@'
+            ws.cell(1, 1).value = "序号"
+            ws.cell(1, 2).value = "日期"
+            ws.cell(1, 3).value = "机号"
+            ws.cell(1, 4).value = "机位"
+            ws.cell(1, 5).value = "机型"
+            ws.cell(1, 6).value = "发动机"
+            ws.cell(1, 7).value = "录入数据请从第三行开始录入,切勿覆盖第一二行数据!!!"
+            ws.cell(2, 1).value = "1"
+            ws.cell(2, 2).value = "2024/03/21"
+            ws.cell(2, 3).value = "1663"
+            ws.cell(2, 4).value = "722"
+            ws.cell(2, 5).value = "A321"
+            ws.cell(2, 6).value = "V2500"
+            ws.cell(2, 7).value = "录入数据请从第三行开始录入,切勿覆盖第一二行数据!!!"
+            wb.save(fileName)
+            self.show_message2("提示", "导出成功!文件已保存至%s" % fileName)
+    except Exception:
+        self.show_message2("警告", "导出失败,确认%s是否被打开或联系管理员!!!")
+        app_logger.error(traceback.format_exc())

+ 33 - 0
Functions/QtFunctions/Worker2.py

@@ -0,0 +1,33 @@
+import sys
+import traceback
+
+from PyQt6 import QtCore
+from PyQt6.QtCore import QObject , pyqtSlot , QRunnable
+
+
+class WorkerSignals(QObject):
+    finished = QtCore.pyqtSignal()
+    error = QtCore.pyqtSignal(tuple)
+    result = QtCore.pyqtSignal(object)
+
+class Worker2(QRunnable):
+    def __init__(self, fn, *args, **kwargs):
+        super(Worker2, self).__init__()
+        # Store constructor arguments (re-used for processing)
+        self.fn = fn
+        self.args = args
+        self.kwargs = kwargs
+        self.signals = WorkerSignals()
+
+    @pyqtSlot()
+    def run(self):
+        try:
+            result = self.fn(*self.args, **self.kwargs)
+        except Exception:
+            traceback.print_exc()
+            exctype, value = sys.exc_info()[:2]
+            self.signals.error.emit((exctype, value, traceback.format_exc()))
+        else:
+            self.signals.result.emit(result)  # Return the result of the processing
+        finally:
+            self.signals.finished.emit()

+ 1 - 0
Functions/QtFunctions/__init__.py

@@ -0,0 +1 @@
+from .Worker2 import Worker2

+ 95 - 0
Functions/QtFunctions/addFlightWidget.py

@@ -0,0 +1,95 @@
+import datetime
+
+from PyQt6.QtCore import Qt , QSortFilterProxyModel
+from PyQt6.QtWidgets import QCompleter , QWidget , QMessageBox
+
+from UI.addFlight import Ui_FormAddFlight
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class addFlightWidget(Ui_FormAddFlight, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            nowDay = datetime.datetime.now()
+            self.dateEdit.setDateTime(nowDay)
+            self.dateTimeEdit.setDateTime(nowDay)
+            self.dateTimeEdit_2.setDateTime(nowDay)
+            self.pushButton.clicked.connect(self.btn)
+            self.comboBox.addItems(['短停', '航前', '特后前', '航后'])
+            self.comboBox.setEditable(True)
+            self.comboBox.currentIndexChanged.connect(self.changed)
+            self.filterModel = QSortFilterProxyModel(self.comboBox)
+            self.filterModel.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.filterModel.setSourceModel(self.comboBox.model())
+            self.completer = QCompleter(self.filterModel, self.comboBox)
+            self.completer.setCompletionMode(QCompleter.CompletionMode.UnfilteredPopupCompletion)
+            self.completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.comboBox.setCompleter(self.completer)
+            self.comboBox.lineEdit().textEdited.connect(self.filterModel.setFilterFixedString)
+            self.completer.activated.connect(self.on_completer_activated)
+            self.ipinfo = None
+            self.user = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def on_completer_activated(self, text):
+        try:
+            if text:
+                print(text)
+                index = self.comboBox.findText(text)
+                self.comboBox.setCurrentIndex(index)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def changed(self):
+        if self.comboBox.currentText() == "航前":
+            self.label_8.setEnabled(False)
+            self.dateTimeEdit.setEnabled(False)
+            self.label_9.setEnabled(True)
+            self.dateTimeEdit_2.setEnabled(True)
+        elif self.comboBox.currentText() == "航后":
+            self.label_9.setEnabled(False)
+            self.dateTimeEdit_2.setEnabled(False)
+            self.label_8.setEnabled(True)
+            self.dateTimeEdit.setEnabled(True)
+        else:
+            self.label_8.setEnabled(True)
+            self.dateTimeEdit.setEnabled(True)
+            self.label_9.setEnabled(True)
+            self.dateTimeEdit_2.setEnabled(True)
+
+    def btn(self):
+        if self.lineEditPWD.text() != "" and self.lineEditUser.text() != "" and self.lineEditPeople.text() != "" and self.lineEdit.text() != "" and self.lineEdit_2.text() != "":
+            # ip = "http://" + str(self.ipinfo) + "/static/" + "manAddFlight/" + "%s/%s/%s/%s/%s/%s/%s/%s/%s/%s" % (
+            #     self.comboBox.currentText(), self.lineEditPWD.text(), self.lineEditUser.text(),
+            #     self.lineEditPeople.text(),
+            #     self.lineEdit.text(), self.dateEdit.text(), self.lineEdit_2.text(), self.dateTimeEdit.text(),
+            #     self.dateTimeEdit_2.text(), self.user)
+            try:
+                # res = requests.get(url=ip, timeout=30).json()
+                res = api_fc.request_post('/static/manAddFlight',
+                                          flighttype=self.comboBox.currentText(),
+                                          acno=self.lineEditPWD.text(),
+                                          eng=self.lineEditUser.text(),
+                                          actype=self.lineEditPeople.text(),
+                                          flightno=self.lineEdit.text(),
+                                          flightdate=self.dateEdit.text(),
+                                          bay=self.lineEdit_2.text(),
+                                          eta=self.dateTimeEdit.text(),
+                                          etd=self.dateTimeEdit_2.text(),
+                                          user=self.user)
+                if res["返回值"] == "ok":
+                    self.close()
+                    QMessageBox.warning(self, "提示", "航班添加成功!!!")
+                else:
+                    self.close()
+                    QMessageBox.warning(self, "警告", "航班添加失败")
+            except Exception as e:
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                app_logger.log_error(e)
+
+        else:
+            QMessageBox.warning(self, "警告", "请完善航班信息后再提交!")

+ 93 - 0
Functions/QtFunctions/addUserWidget.py

@@ -0,0 +1,93 @@
+
+from PyQt6.QtCore import Qt , QSortFilterProxyModel
+from PyQt6.QtWidgets import QCompleter , QWidget , QMessageBox
+
+from UI.adduser import Ui_FormAdduser
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class addUserWidget(Ui_FormAdduser, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.comboBox.addItems(['1', '2', '3',"4"])
+            self.comboBox.setEditable(True)
+            self.filterModel = QSortFilterProxyModel(self.comboBox)
+            self.filterModel.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.filterModel.setSourceModel(self.comboBox.model())
+            self.completer = QCompleter(self.filterModel, self.comboBox)
+            self.completer.setCompletionMode(QCompleter.CompletionMode.UnfilteredPopupCompletion)
+            self.completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.comboBox.setCompleter(self.completer)
+
+            self.comboBox.lineEdit().textEdited.connect(self.filterModel.setFilterFixedString)
+            self.completer.activated.connect(self.on_completer_activated)
+            self.ipinfo = None
+            self.user = None
+            self.authority=None
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+
+    def severpost_meassge(self, postname, data: dict):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/" + str(postname)
+            # data = json.dumps(data)
+            # res = requests.post(url=ip, data=data, timeout=30).json()
+            res = api_fc.request_post('/static/{}'.format(postname), data=data)
+            return res
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+
+            return 'fail'
+
+    def on_completer_activated(self, text):
+        try:
+            if text:
+                index = self.comboBox.findText(text)
+                self.comboBox.setCurrentIndex(index)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def btn(self):
+        try:
+            if int(self.authority) <= 1:
+                username = self.lineEditUser.text()
+                password = self.lineEditPWD.text()
+                authority = self.comboBox.currentText()
+                people = self.lineEditPeople.text()
+                if username != "" and password != "":
+                    # print('用户名:{},密码:{},权限:{},使用人:{}'.format(username,password,authority,people))
+                    dataDic = {
+                        '登录名': username,
+                        '密码': password,
+                        '权限': authority,
+                        '使用人': people
+                    }
+
+                    res = self.severpost_meassge("addUserWidget", dataDic)
+                    if res["返回值"] == "1":
+                        self.close()
+                        self.show_message("提示", "用户创建成功!!!")
+                    elif res["返回值"] == "2":
+                        self.show_message("警告", "此用户已存在")
+                    elif res["返回值"] == "0":
+                        self.show_message("警告", "创建失败,请联系管理员!")
+                else:
+                    self.show_message("警告", "用户名或密码不能为空!!!")
+            else:
+                self.close()
+                self.show_message("警告", "权限不够,请联系管理员!!!")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def show_message(self, type, str):
+        try:
+            QMessageBox.warning(self, "%s" % type, "%s" % str)
+        except Exception as e:
+            app_logger.log_error(e)

+ 37 - 0
Functions/QtFunctions/amroLoginWidget.py

@@ -0,0 +1,37 @@
+
+from PyQt6.QtWidgets import QWidget , QMessageBox
+
+from UI.amroLogin import Ui_amroLogin
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class amroLoginWidget(Ui_amroLogin, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.ipinfo = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def btn(self):
+        try:
+            username = self.lineEditUsername.text()
+            password = self.lineEditPassword.text()
+            # ip = "http://" + str(self.ipinfo) + "/static/remotelogin/%s/%s" % (username, password)
+            try:
+                # res = requests.get(url=ip, timeout=60)
+                res = api_fc.request_post('/static/remotelogin', username=username, password=password)
+                #print('amro login res:{}'.format(res))
+                if res['status'] == "ok":
+                    QMessageBox.warning(self, "提示", "服务器AMRO登录成功!")
+                    self.close()
+                else:
+                    QMessageBox.warning(self, "提示", "服务器AMRO登录失败,请检查账号密码或服务器端登录或联系管理员检查服务器!")
+            except:
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                self.close()
+        except Exception as e:
+            app_logger.log_error(e)

+ 40 - 0
Functions/QtFunctions/amroLoginWidget2.py

@@ -0,0 +1,40 @@
+
+from PyQt6.QtWidgets import QWidget , QMessageBox
+
+from UI.amroLogin2 import Ui_amroLogin2
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class amroLoginWidget2(Ui_amroLogin2, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.ipinfo = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def btn(self):
+        try:
+            username = self.lineEditUsername.text()
+            password = self.lineEditPassword.text()
+            flightplantoken = self.lineEdit.text() #飞机排班token
+            #print("username:" + username)
+            #print("password:" + password)
+            #print("flightplantoken:" + flightplantoken)
+            # ip = "http://" + str(self.ipinfo) + "/static/remoteCookielogin/%s/%s" % (username, password)
+            try:
+                # res = requests.get(url=ip, timeout=60)
+                res = api_fc.request_post('/static/remoteCookielogin', username=username, cookie=password,cookie2=flightplantoken)
+                if res['status'] == "ok":
+                    QMessageBox.warning(self, "提示", "服务器AMRO登录成功!")
+                    self.close()
+                else:
+                    QMessageBox.warning(self, "提示", "服务器AMRO登录失败,请检查账号和Cookie或服务器端登录或联系管理员检查服务器!")
+            except:
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                self.close()
+        except Exception as e:
+            app_logger.log_error(e)

+ 104 - 0
Functions/QtFunctions/changeAuth.py

@@ -0,0 +1,104 @@
+
+from PyQt6.QtCore import Qt , QSortFilterProxyModel
+from PyQt6.QtWidgets import QCompleter , QWidget , QMessageBox
+
+from UI.changeAuth import Ui_changeAuth
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class changeAuth(Ui_changeAuth, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.ipinfo = None
+            self.label_5.setText("")
+            self.label_6.setText("")
+            self.pushButton.clicked.connect(self.btn)
+            self.user = None
+            self.comboBox.addItems(['1', '2', '3',"4"])
+            self.comboBox.setEditable(True)
+            self.filterModel1 = QSortFilterProxyModel(self.comboBox)
+            self.filterModel1.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.filterModel1.setSourceModel(self.comboBox.model())
+            self.completer1 = QCompleter(self.filterModel1, self.comboBox)
+            self.completer1.setCompletionMode(QCompleter.CompletionMode.UnfilteredPopupCompletion)
+            self.completer1.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.comboBox.setCompleter(self.completer)
+            self.comboBox.lineEdit().textEdited.connect(self.filterModel1.setFilterFixedString)
+            self.completer1.activated.connect(self.on_completer_activated1)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        self.show()
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/loginDbget/" + str(self.user)
+            # self.res = requests.get(url=ip, timeout=30).json()
+            self.res = api_fc.request_post('/static/loginDbget', username=str(self.user))["data"]
+        except Exception as e:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+            self.res = {}
+        if self.res != {}:
+            namelist = []
+            for i in self.res.keys():
+                namelist.append(self.res[i]["登录名"])
+            print(namelist)
+            self.comboBox_2.addItems(namelist)
+            self.comboBox_2.setEditable(True)
+            self.comboBox_2.currentIndexChanged.connect(self.changed)
+            self.filterModel = QSortFilterProxyModel(self.comboBox_2)
+            self.filterModel.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.filterModel.setSourceModel(self.comboBox_2.model())
+            self.completer = QCompleter(self.filterModel, self.comboBox_2)
+            self.completer.setCompletionMode(QCompleter.CompletionMode.UnfilteredPopupCompletion)
+            self.completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+            self.comboBox_2.setCompleter(self.completer)
+            self.comboBox_2.lineEdit().textEdited.connect(self.filterModel.setFilterFixedString)
+            self.completer.activated.connect(self.on_completer_activated)
+        else:
+            QMessageBox.warning(self, "提示", "获取数据库为空,请检查数据库或联系管理员")
+
+    def on_completer_activated1(self, text):
+        try:
+            if text:
+                index = self.comboBox.findText(text)
+                self.comboBox.setCurrentIndex(index)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def on_completer_activated(self, text):
+        try:
+            if text:
+                print(text)
+                index = self.comboBox_2.findText(text)
+                self.comboBox_2.setCurrentIndex(index)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def changed(self):
+        if self.res != {}:
+            self.label_5.setText(self.res[self.comboBox_2.currentText()]["使用人"])
+            self.label_6.setText(self.res[self.comboBox_2.currentText()]["权限"])
+
+    def btn(self):
+        data = {
+            '登录名': "'%s'" % self.comboBox_2.currentText(),
+            "权限": "'%s'" % self.comboBox.currentText()
+        }
+        try:
+            ip = "http://" + str(self.ipinfo) + "/static/changeAuth"
+            # data = json.dumps(data)
+            # res = requests.post(url=ip, data=data, timeout=30).json()
+            res = api_fc.request_post('/static/changeAuth', data=data)
+            if res["返回值"] == "1":
+                QMessageBox.warning(self, "提示", "权限变更成功!")
+                self.close()
+            else:
+                QMessageBox.warning(self, "提示", "权限变更失败,请联系管理员检查服务器!")
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)

+ 68 - 0
Functions/QtFunctions/changePassword.py

@@ -0,0 +1,68 @@
+
+from PyQt6.QtWidgets import QWidget , QMessageBox
+
+from UI.changePassword import Ui_FormChangePssword
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class changePassword(Ui_FormChangePssword, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.ipinfo = None
+            self.pushButton.clicked.connect(self.btn)
+            self.user = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def severpost_meassge(self, postname, **kwargs):
+
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2)
+            # res = requests.get(url=ip, timeout=30).json()
+            res = api_fc.request_post('/static/{}'.format(postname), **kwargs)
+            return res
+        except Exception as e:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+            return ''
+
+    def severpost_data(self, postname, data: dict):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/" + str(postname)
+            # data = json.dumps(data)
+            # res = requests.post(url=ip, data=data, timeout=30).json()
+            res = api_fc.request_post('/static/{}'.format(postname), data=data)
+            return res
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+
+            return 'fail'
+
+    def btn(self):
+        try:
+            oldpassword = self.lineEditold.text()
+            newpassword = self.lineEditnew.text()
+            newpassword2 = self.lineEditnew2.text()
+            #res = self.severpost_meassge("loginTable",username="/%s" % self.user,password="/%s" % oldpassword)["data"]["返回值"]
+            res =api_fc.request_post_without_token("/loginTable",username=self.user,password=oldpassword)["data"]["返回值"]
+            # print(res)
+            if res != "":
+                if newpassword == newpassword2:
+                    dataDic = {'登录名': self.user, '新密码': newpassword, "旧密码": oldpassword}
+                    res = self.severpost_data("changePassword", dataDic)
+                    if res["返回值"] == "ok":
+                        self.close()
+                        QMessageBox.warning(self, "提示", "密码修改成功!!!")
+                    else:
+                        QMessageBox.warning(self, "提示", "密码修改失败,请检查服务器连接状态或联系管理员!!!")
+                else:
+                    QMessageBox.warning(self, "警告", "两次密码输入不同!!!")
+            else:
+                QMessageBox.warning(self, "警告", "原密码错误!!!")
+        except Exception as e:
+            app_logger.log_error(e)

+ 96 - 0
Functions/QtFunctions/checkCalllist.py

@@ -0,0 +1,96 @@
+import datetime
+
+from PyQt6 import QtCore
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QWidget , QMessageBox , QTableWidgetItem
+
+from UI.checkCalllist import Ui_checkCalllist
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class checkCalllist(Ui_checkCalllist, QWidget):
+    checkCalllist_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.ipinfo = None
+            self.selectedtime = None
+            self.pushButton.clicked.connect(self.btn)
+            # self.show()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        try:
+            selectedtime_time = str(self.selectedtime) + " 00:00:00"
+            now = datetime.datetime.strptime(selectedtime_time, "%Y%m%d %H:%M:%S")
+            tom = (now + datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+            yesterday = (now - datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+            self.label_5.setText("%s/%s" % (str(yesterday)[0:10], str(tom)[0:10]))
+            # ip = "http://" + str(self.ipinfo) + "/static/checkCalllist" + "/" + str(self.selectedtime)
+            try:
+                # res = requests.get(url=ip, timeout=30).json()
+                res = api_fc.request_post('/static/checkCalllist', time=str(self.selectedtime))["data"]
+                # print(res)
+            except Exception as e:
+                # print('登录服务器失败')
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                app_logger.log_error(e)
+
+            self.peopleLabel = ["序号", "电话", "工号", "姓名", "航班号", "拨号次数", "创建时间", "接通时间"]
+            self.tableWidgetFlight.setColumnCount(len(self.peopleLabel))
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setHorizontalHeaderLabels(self.peopleLabel)
+            col = len(self.peopleLabel)
+            diplaylist = res
+            self.tableWidgetFlight.setRowCount(len(diplaylist.keys()))
+            for row in diplaylist.keys():
+                for colNum in range(0, col):
+                    if colNum == 0:
+                        self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(row)))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    else:
+                        self.tableWidgetFlight.setItem(int(row), colNum,QTableWidgetItem(diplaylist[row][self.peopleLabel[colNum]]))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidgetFlight.resizeColumnsToContents()
+            # self.show()
+        except Exception as e:
+            app_logger.log_error(e)
+    def btn(self):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/checkCalllist" + "/" + str(self.selectedtime)
+            # self.res = requests.get(url=ip, timeout=30).json()
+            self.res = api_fc.request_post('/static/checkCalllist', time=str(self.selectedtime))["data"]
+        except Exception as e:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+            self.res = {}
+        col = len(self.peopleLabel)
+        diplaylist = self.res
+        self.tableWidgetFlight.setRowCount(len(diplaylist))
+        rownum = 0
+        for row in diplaylist:
+            for colNum in range(0, col):
+                if colNum == 0:
+                    self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(row)))
+                    self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                else:
+                    self.tableWidgetFlight.setItem(int(row), colNum,QTableWidgetItem(diplaylist[row][self.peopleLabel[colNum]]))
+                    self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+        self.tableWidgetFlight.resizeColumnsToContents()
+
+    def closeEvent(self, event):
+        try:
+            reply = QMessageBox.question(self, '确认', '你确定要退出程序吗?')
+            reply = str(reply)
+            if reply == "StandardButton.Yes":
+                self.checkCalllist_signal.emit(reply)
+                event.ignore()
+            else:
+                event.ignore()
+        except Exception as e:
+            app_logger.log_error(e)

+ 70 - 0
Functions/QtFunctions/checkLoadSingal.py

@@ -0,0 +1,70 @@
+
+import datetime
+
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QWidget , QMessageBox , QTableWidgetItem
+
+from UI.checkLoadSingal import Ui_checkLoadSingal
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class checkLoadSingal(Ui_checkLoadSingal, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.worknum = None
+            self.name = None
+            self.selectedtime = None
+            self.ipinfo = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        try:
+            # print(self.worknum)
+            # print(self.name)
+            # print(self.selectedtime)
+            # print(self.ipinfo)
+            self.label_3.setText(self.name)
+            selectedtime_time = str(self.selectedtime) + " 00:00:00"
+            now = datetime.datetime.strptime(selectedtime_time, "%Y%m%d %H:%M:%S")
+            yesterday = (now - datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+            self.label_5.setText("%s/%s" % (str(yesterday)[0:10], str(now)[0:10]))
+            # print(now)
+            # print(yesterday)
+            # ip = "http://" + str(self.ipinfo) + "/static/checkLoadSingal" + "/" + str(self.worknum) + "/" + str(
+            #     yesterday) + "/" + str(now)
+            try:
+                # res = requests.get(url=ip, timeout=30).json()
+                res = api_fc.request_post('/static/checkLoadSingal',
+                                          worknum=str(self.worknum),
+                                          time1=str(yesterday),
+                                          time2=str(now))
+                # print(res)
+            except Exception as e:
+                # print('登录服务器失败')
+                app_logger.log_error('登录服务器失败, res获取失败')
+                QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                app_logger.log_error(e)
+
+            self.show()
+            peopleLabel = ["序号", "保障日期", "类型", "机号", "机位", "开始时间", "结束时间"]
+            self.tableWidgetFlight.setColumnCount(len(peopleLabel))
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setHorizontalHeaderLabels(peopleLabel)
+            col = len(peopleLabel)
+            diplaylist = res
+            self.tableWidgetFlight.setRowCount(len(diplaylist.keys()))
+            for row in diplaylist.keys():
+                for colNum in range(0, col):
+                    if colNum == 0:
+                        self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(row)))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    else:
+                        self.tableWidgetFlight.setItem(int(row), colNum,QTableWidgetItem(diplaylist[row][peopleLabel[colNum]]))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidgetFlight.resizeColumnsToContents()
+        except Exception as e:
+            app_logger.log_error(e)

+ 99 - 0
Functions/QtFunctions/checkLogs.py

@@ -0,0 +1,99 @@
+
+import datetime
+
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QWidget , QMessageBox , QTableWidgetItem
+
+from UI.checkLogs import Ui_checkLogs
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class checkLogs(Ui_checkLogs, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        self.setupUi(self)
+        self.ipinfo = None
+        self.endtime = (datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
+        self.starttime = (datetime.date.today()).strftime("%Y-%m-%d %H:%M:%S")
+        self.dateTimeEdit.setDateTime(datetime.datetime.strptime(self.starttime, "%Y-%m-%d %H:%M:%S"))
+        self.dateTimeEdit_2.setDateTime(datetime.datetime.strptime(self.endtime, "%Y-%m-%d %H:%M:%S"))
+        self.lineEdit.textChanged.connect(self.changed)
+        self.peopleLabel = ["序号", "航班编号", "警告信息", "信息状态", "提示信息", "产生时间", "处理人", "处理时间", "变更字段", "显示对象", "提示内容"]
+        self.tableWidgetFlight.setColumnCount(len(self.peopleLabel))
+        self.tableWidgetFlight.verticalHeader().setVisible(False)
+        self.tableWidgetFlight.setHorizontalHeaderLabels(self.peopleLabel)
+        self.pushButton.clicked.connect(self.btn)
+
+    def start(self):
+        self.show()
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/checkLogs/" + self.starttime + "/" + self.endtime
+            # self.res = requests.get(url=ip, timeout=30).json()
+            self.res = api_fc.request_post('/static/checkLogs',start=self.starttime,end=self.endtime)["data"]
+        except Exception as e:
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+            self.res = {}
+        col = len(self.peopleLabel)
+        diplaylist = self.res
+        self.tableWidgetFlight.setRowCount(len(diplaylist))
+        rownum = 0
+        for row in diplaylist:
+            for colNum in range(0, col):
+                if colNum == 0:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(rownum)))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                else:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(row[colNum])))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignLeft)
+            rownum += 1
+        self.tableWidgetFlight.resizeColumnsToContents()
+
+    def changed(self):
+        res = []
+        for i in self.res:
+            if str(self.lineEdit.text()) in str(i):
+                res.append(i)
+        col = len(self.peopleLabel)
+        diplaylist = res
+        self.tableWidgetFlight.setRowCount(len(diplaylist))
+        rownum = 0
+        for row in diplaylist:
+            for colNum in range(0, col):
+                if colNum == 0:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(rownum)))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                else:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(row[colNum])))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignLeft)
+            rownum += 1
+        self.tableWidgetFlight.resizeColumnsToContents()
+
+    def btn(self):
+        self.starttime = self.dateTimeEdit.text()
+        self.endtime = self.dateTimeEdit_2.text()
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/checkLogs/" + self.starttime + "/" + self.endtime
+            # self.res = requests.get(url=ip, timeout=30).json()
+            self.res = api_fc.request_post('/static/checkLogs',start=self.starttime,end=self.endtime)["data"]
+        except Exception as e :
+            # print('登录服务器失败')
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+            self.res = {}
+        col = len(self.peopleLabel)
+        diplaylist = self.res
+        self.tableWidgetFlight.setRowCount(len(diplaylist))
+        rownum = 0
+        for row in diplaylist:
+            for colNum in range(0, col):
+                if colNum == 0:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(rownum)))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                else:
+                    self.tableWidgetFlight.setItem(rownum, colNum, QTableWidgetItem(str(row[colNum])))
+                    self.tableWidgetFlight.item(rownum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignLeft)
+            rownum += 1
+        self.tableWidgetFlight.resizeColumnsToContents()

+ 153 - 0
Functions/QtFunctions/findServerWidget.py

@@ -0,0 +1,153 @@
+import os
+from PyQt6 import QtCore
+from PyQt6.QtCore import QThreadPool
+from PyQt6.QtCore import Qt
+from PyQt6.QtGui import QColor , QFont
+from PyQt6.QtWidgets import QWidget , QAbstractItemView , QMessageBox , QTableWidgetItem
+from Functions.apiFunction import api_fc
+from Functions import serverFind
+from UI.findserver import Ui_FormLink
+from UI.mapWeb import Ui_FormMapWeb
+from .LogerinTxt import app_logger
+from .Worker2 import Worker2
+
+
+class mapWebWidget(Ui_FormMapWeb, QWidget):
+    def __init__(self):
+        super().__init__()
+        self.setupUi(self)
+        # self.webEngineView.load(QUrl('http://192.168.2.22:6010/'))
+
+
+class findServerWidget(Ui_FormLink, QWidget):
+    selectServer_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.threadpool = QThreadPool()
+            self.setupUi(self)
+            self.serverList = []
+            self.tableWidget.setColumnCount(2)
+            self.tableWidget.setHorizontalHeaderLabels(['服务器地址', '备注'])
+            self.threadWork_findServer()
+            self.tableWidget.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
+            self.tableWidget.cellDoubleClicked.connect(self.selectServer)
+            self.pushButton_manset.clicked.connect(self.setipinfo)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def setipinfo(self):
+        try:
+            self.ipinfo = ""
+            if os.path.exists("server.code") is True:
+                read_path = os.getcwd() + "\\server.code"
+                with open(read_path, "r", encoding="utf-8") as f2:
+                    rember_2 = f2.read()
+                    if ';' in rember_2:
+                        self.ipinfo = rember_2.split(';')[0]
+                        self.ipinfo1 = rember_2.split(':')[0]
+                        #ip = "http://" + str(self.ipinfo) + "/static/linktest"
+                        try:
+                            #res = requests.get(url=ip, timeout=30).json()
+                            res=api_fc.request_get_without_token("/static/linktest")
+                            self.selectServer_signal.emit(self.ipinfo1)
+                            if res['status'] == "ok":
+                                QMessageBox.warning(self, "提示", "服务器人工配置成功!")
+                            else:
+                                QMessageBox.warning(self, "提示", "服务器人工配置失败,请检查配置文件或联系管理员检查服务器!")
+                        except Exception as e:
+                            QMessageBox.warning(self, "提示", "服务器人工配置失败,请联系管理员检查服务器!")
+                            app_logger.log_error(e)
+                    else:
+                        QMessageBox.warning(self, "提示", "服务器人工配置失败,请检查配置文件或联系管理员检查服务器!")
+            else:
+                QMessageBox.warning(self, "提示", "服务器人工配置失败,系统缺少配置文件!")
+        except Exception as e:
+            app_logger.log_error(e)
+    def setipinfo2(self):
+        try:
+            self.ipinfo = ""
+            if os.path.exists("server.code") is True:
+                read_path = os.getcwd() + "\\server.code"
+                with open(read_path, "r", encoding="utf-8") as f2:
+                    rember_2 = f2.read()
+                    if ';' in rember_2:
+                        self.ipinfo = rember_2.split(';')[0]
+                        self.ipinfo1 = rember_2.split(':')[0]
+                        #ip = "http://" + str(self.ipinfo) + "/static/linktest"
+                        try:
+                            #res = requests.get(url=ip, timeout=30).json()
+                            res=api_fc.request_get_without_token("/static/linktest")
+                            self.selectServer_signal.emit(self.ipinfo1)
+                            if res['status'] == "ok":
+                                QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置成功!")
+                            else:
+                                QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置成功,服务器连接失败,请检查配置文件或联系管理员检查服务器!")
+                        except Exception as e:
+                            QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置成功,服务器连接失败,请检查配置文件或联系管理员检查服务器!")
+                            app_logger.log_error(e)
+                    else:
+                        QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置失败,请检查配置文件或联系管理员检查服务器!")
+            else:
+                QMessageBox.warning(self, "提示", "服务器搜索失败,自动检索配置文件配置失败,系统缺少配置文件!")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def selectServer(self, row, col):
+        #print('selectServer')
+        #print(self.tableWidget.item(row, 0).text())
+        try:
+            self.selectServer_signal.emit(self.tableWidget.item(row, 0).text())
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def threadWork_findServer(self):
+        try:
+            worker = Worker2(self.fn)
+            worker.signals.result.connect(self.print_out_result)
+            self.threadpool.start(worker)
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def fn(self):
+        try:
+            serverList = serverFind.findServer()
+            return serverList
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def print_out_result(self, dlist):
+        try:
+            unique_tuples = list(set(tuple(sublist) for sublist in dlist))
+            self.serverList = [list(t) for t in unique_tuples]
+            # print(self.serverList)
+            if self.serverList == [] or self.serverList ==None:
+                self.setipinfo2()
+            else:
+                self.tableWidget.setRowCount(len(self.serverList))
+                rowNum = 0
+                for row in self.serverList:
+                    colNum = 0
+                    for col in row:
+                        self.tableWidget.setItem(rowNum, colNum, QTableWidgetItem(col))
+                        self.tableWidget.item(rowNum, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        if "测试服务器" in row[1]:
+                            self.tableWidget.item(rowNum, colNum).setForeground(QColor('pink'))
+                        elif row[1] == "主服务器":
+                            self.tableWidget.item(rowNum, colNum).setForeground(QColor('green'))
+                            font = QFont()
+                            font.setFamily("Microsoft YaHei")
+                            font.setBold(True)
+                            self.tableWidget.item(rowNum, colNum).setFont(font)
+                        else:
+                            self.tableWidget.item(rowNum, colNum).setForeground(QColor('blue'))
+                            font = QFont()
+                            font.setFamily("Microsoft YaHei")
+                            font.setBold(True)
+                            self.tableWidget.item(rowNum , colNum).setFont(font)
+                        colNum += 1
+                    rowNum += 1
+                self.tableWidget.resizeColumnsToContents()
+        except Exception as e:
+            app_logger.log_error(e)

+ 160 - 0
Functions/QtFunctions/handoverFlightWidget.py

@@ -0,0 +1,160 @@
+
+from PyQt6 import QtCore
+from PyQt6.QtCore import Qt
+from PyQt6.QtGui import QColor
+from PyQt6.QtWidgets import QWidget , QMessageBox , QTableWidgetItem
+
+from UI.handoverFlight import Ui_handoverFlight
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class handoverFlightWidget(Ui_handoverFlight, QWidget):
+    handoverFlight_signal = QtCore.pyqtSignal(str)
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.user = None
+            self.ipinfo = None
+            self.selectedtime=None
+            self.Allflight = {}
+        except Exception as e:
+            app_logger.log_error(e)
+    def severpostData_nomeassge(self, postname, data: dict):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/" + str(postname)
+            # data = json.dumps(data)
+            # res = requests.post(url=ip, data=data, timeout=30).json()
+            res = api_fc.request_post('/static/{}'.format(postname),data=data)
+            return res
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+    def btn(self):
+        try:
+            list = []
+            sts=[]
+            list_cz = []
+            sts_cz = []
+            rows=[]
+            for row in range(self.tableWidgetFlight.rowCount()):
+                item = self.tableWidgetFlight.item(row, 0)
+                if item and item.checkState() == Qt.CheckState.Checked and self.tableWidgetFlight.item(row, 8).text() != "":
+                    name = self.tableWidgetFlight.item(row, 10).text()
+                    rows.append(row)
+                    list.append(name)
+                    sts.append("1")
+            data = {"taskid": ','.join(list),
+                    "sts": ','.join(sts)}
+
+            if list !=[]:
+                res = self.severpostData_nomeassge("handoverflightAMRO", data=data)["返回值"]
+                if res == "ok" :
+                    QMessageBox.warning(self, "提示", f"交班提交成功!请核对附加消息交班航班!")
+                    for ii in rows:
+                        try:
+                            if "【交班航班】" not in self.tableWidgetFlight.item(ii, 11).text() and self.tableWidgetFlight.item(ii, 8).text() != "":
+                                flightid = self.tableWidgetFlight.item(ii, 12).text()
+                                flighttype = self.tableWidgetFlight.item(ii, 7).text()
+                                fjxx = "【交班航班】" + self.tableWidgetFlight.item(ii, 11).text()
+                                # ip = "http://" + str(self.ipinfo) + "/static/updateEidteItem/" + "%s/" % str(fjxx) + "%s/" % str(flightid) + "A/%s/" % str(flighttype) + "%s" % str(self.selectedtime)
+                                try:
+                                    # requests.get(url=ip, timeout=30).json()
+                                    api_fc.request_post('/static/updateEidteItem',
+                                                        text="%s" % str(fjxx),
+                                                        flightid="%s" % str(flightid),
+                                                        displayMode="A",
+                                                        flighttype="%s" % str(flighttype),
+                                                        selectedtime="%s" % str(self.selectedtime))
+                                    self.handoverFlight_signal.emit("1")
+                                except Exception as e:
+                                    QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                                    app_logger.log_error(e)
+                        except Exception as e:
+                            app_logger.log_error(e)
+
+                    self.close()
+                else:
+                    QMessageBox.warning(self, "警告", "航班交接失败,请重新尝试")
+
+            else:
+                QMessageBox.warning(self, "警告", "请选择要交接的航班!未进行派工的航班无法进行交接班")
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        try:
+            self.show()
+            peopleLabel = ["选择","序号", "机号","航班号", "预达", "计飞", "机位", "类型", "维修人员","放行", "任务编号","附加消息","航班编号" ]
+            #tableWidgetDispalydata = self.Allflight
+            tableWidgetDispalydata={}
+            for key, values in self.Allflight.items():
+                # 检查所有字段是否包含关键词
+                if(('3U' in values["9"] or "CSC" in values["9"]) and values["49"] != "" and "【交班航班】" not in values["30"]):
+                    tableWidgetDispalydata[key] = values
+            self.tableWidgetFlight.setColumnCount(len(peopleLabel))
+            self.tableWidgetFlight.setHorizontalHeaderLabels(peopleLabel)
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setRowCount(len(tableWidgetDispalydata))
+            i = 0
+            for row in tableWidgetDispalydata.keys():
+                if ("3U" in tableWidgetDispalydata[row][str(9)] or "CSC" in tableWidgetDispalydata[row][str(9)]) and \
+                        tableWidgetDispalydata[row][str(49)] != "" and "【交班航班】" not in tableWidgetDispalydata[row][str(30)]:
+                    for colNum in range(0, 13):
+                        if colNum == 0:
+                            checkbox = QTableWidgetItem()
+                            checkbox.setCheckState(Qt.CheckState.Unchecked)
+                            self.tableWidgetFlight.setItem(i, colNum, checkbox)
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 1:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(i+1)))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 2:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(3)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 3:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(9)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 4:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(13)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 5:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(15)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+
+                        elif colNum == 6:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(8)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 7:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(19)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 8:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(49)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+
+                        elif colNum == 9:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(51)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 10:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(53)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 12:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(53)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        elif colNum == 11:
+                            self.tableWidgetFlight.setItem(i, colNum, QTableWidgetItem(str(tableWidgetDispalydata[row][str(61)])))
+                            self.tableWidgetFlight.item(i, colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        if (i+1)%2 ==0 and str(tableWidgetDispalydata[row][str(109)]) =="1":
+                            self.tableWidgetFlight.item(i, colNum).setBackground(QColor('#DDE2E3'))
+                        elif str(tableWidgetDispalydata[row][str(109)]) !="1":
+                            self.tableWidgetFlight.item(i, colNum).setBackground(QColor('#00FFFF'))
+                    i += 1
+
+
+            self.tableWidgetFlight.resizeColumnsToContents()
+            self.tableWidgetFlight.setColumnHidden(12, True)
+            self.tableWidgetFlight.setColumnHidden(10, True)
+        except Exception as e:
+            app_logger.log_error(e)

+ 57 - 0
Functions/QtFunctions/ipcall.py

@@ -0,0 +1,57 @@
+
+from selenium import webdriver
+from selenium.webdriver.chrome.options import Options
+
+
+class searchinfo(object):
+    def __init__(self):
+        self.token1 = None
+
+    def start(self,ip):
+        self.token1=self.login(ip)
+        return self.token1
+
+    def login(self,ip):
+        try:
+            #return "test" + str(datetime.datetime.now())
+            chrome_options = Options()
+            chrome_options.add_argument("--headless")
+            chrome_options.add_experimental_option("detach",True)
+            chrome_options.add_argument("window-size=1920x1080")
+            chrome_options.add_argument("--start-maximized")
+            chrome_options.add_argument('--disable-gpu')  # 如果不加这个选项,有时定位会出现问题
+            browser = webdriver.Chrome(
+                executable_path=r'D:\flightinfo\Google\Chrome\Application\chromedriver.exe',
+                options=chrome_options)
+            browser.set_window_size(width=2000,height=300)
+            browser.get("http://%s/"%ip)
+            browser.find_element_by_id("username").send_keys("adminadmin")
+            browser.find_element_by_id("password").send_keys("adminadmin")
+            browser.find_element_by_id("logonButton").click()
+            # print(browser.get_cookies())
+            for cookie in browser.get_cookies():
+                #print(str(browser.get_cookies()))
+                if "keepOnLine" not in str(browser.get_cookies()):
+                    browser.get("http://%s/" % ip)
+                    browser.switch_to.frame("title_top")
+                    browser.find_element_by_id("enableSessionTimeout").click()
+                if "keepOnLine" in cookie.values() and cookie["value"] == "false":
+                    browser.get("http://%s/" % ip)
+                    browser.switch_to.frame("title_top")
+                    browser.find_element_by_id("enableSessionTimeout").click()
+            for cookie in browser.get_cookies():
+                #print(str(browser.get_cookies()))
+                if "auth" in cookie.values():
+                    return "auth=" + cookie["value"] + ";CUR_LANG=cn;" + "CTCPgSz=10;" + "keepOnLine=true"
+                else:
+                    return "fail"
+        except Exception:
+            return "fail"
+
+        #print(str(browser.get_cookies()))
+
+
+if __name__ == '__main__':
+    fl = searchinfo()
+
+

+ 32 - 0
Functions/QtFunctions/localipset.py

@@ -0,0 +1,32 @@
+
+from PyQt6 import QtCore
+from PyQt6.QtWidgets import QWidget
+
+from UI.addloaclip import Ui_Addloacalip
+from .LogerinTxt import app_logger
+
+
+class localipset(Ui_Addloacalip, QWidget):
+    localipset_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.localip1 = None
+            self.localip = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        self.show()
+        self.lineEditIP.setText(self.localip)
+
+    def btn(self):
+        try:
+            self.localip1 = self.lineEditIP.text()
+            self.localipset_signal.emit(self.localip1)
+            self.close()
+        except Exception as e:
+            app_logger.log_error(e)

+ 65 - 0
Functions/QtFunctions/searchpeople_get.py

@@ -0,0 +1,65 @@
+from PyQt6 import QtCore
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QWidget , QTableWidgetItem
+
+from UI.searchpeople_get import Ui_searchpeople_get
+from .LogerinTxt import app_logger
+
+
+class searchpeople_get(Ui_searchpeople_get, QWidget):
+    searchpeoplelist_signal = QtCore.pyqtSignal(list)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.searchpeoplelist = None
+            self.ipinfo = None
+            self.Allpeoplelist = {}
+            self.selectedtime = None
+            self.selectedbc = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def btn(self):
+        try:
+            searchpeoplelist = []
+            for row in range(self.tableWidgetFlight.rowCount()):
+                item = self.tableWidgetFlight.item(row, 2)
+                if item is not None and item.checkState() == Qt.CheckState.Checked:
+                    name = self.tableWidgetFlight.item(row, 1).text()
+                    searchpeoplelist.append(name)
+            # print(searchpeoplelist)
+            self.searchpeoplelist = searchpeoplelist
+            self.searchpeoplelist_signal.emit(self.searchpeoplelist)
+            self.close()
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        try:
+            self.show()
+            peopleLabel = ["序号", "姓名", "选择"]
+            diplaylist = self.Allpeoplelist
+            self.tableWidgetFlight.setColumnCount(len(peopleLabel))
+            self.tableWidgetFlight.setHorizontalHeaderLabels(peopleLabel)
+            self.tableWidgetFlight.verticalHeader().setVisible(False)
+            self.tableWidgetFlight.setRowCount(len(diplaylist.keys()))
+
+            for row in diplaylist.keys():
+                for colNum in range(0, 3):
+                    if colNum == 0:
+                        self.tableWidgetFlight.setItem(int(row), colNum, QTableWidgetItem(str(row)))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    elif colNum == 1:
+                        self.tableWidgetFlight.setItem(int(row), colNum,QTableWidgetItem(diplaylist[row][peopleLabel[colNum]]))
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    elif colNum == 2:
+                        checkbox = QTableWidgetItem()
+                        checkbox.setCheckState(Qt.CheckState.Unchecked)
+                        self.tableWidgetFlight.setItem(int(row), colNum, checkbox)
+                        self.tableWidgetFlight.item(int(row), colNum).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+            self.tableWidgetFlight.resizeColumnsToContents()
+        except Exception as e:
+            app_logger.log_error(e)

+ 32 - 0
Functions/QtFunctions/serveripphoneset.py

@@ -0,0 +1,32 @@
+
+from PyQt6 import QtCore
+from PyQt6.QtWidgets import QWidget
+
+from UI.addseverlipphone import Ui_Addserveripphone
+from .LogerinTxt import app_logger
+
+
+class serveripphoneset(Ui_Addserveripphone, QWidget):
+    serveripphoneset_signal = QtCore.pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        try:
+            self.setupUi(self)
+            self.pushButton.clicked.connect(self.btn)
+            self.serveripphone1 = None
+            self.serveripphone = None
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def start(self):
+        self.show()
+        self.lineEditIP.setText("172.27.241.131")
+
+    def btn(self):
+        try:
+            self.serveripphone1 = self.lineEditIP.text()
+            self.serveripphoneset_signal.emit(self.serveripphone1)
+            self.close()
+        except Exception as e:
+            app_logger.log_error(e)

+ 35 - 0
Functions/QtFunctions/setlocalip.py

@@ -0,0 +1,35 @@
+from PyQt6 import QtCore
+from PyQt6.QtCore import QObject
+
+from Functions.QtFunctions import ipcall
+from .LogerinTxt import app_logger
+
+
+class setlocalip(QObject):
+    localipupdate = QtCore.pyqtSignal(str)
+
+    def __init__(self, ip, thread):
+        super().__init__()
+        self.ip = ip
+        self.thread = thread
+
+    def run(self):
+        # print("jjingruy1")
+        try:
+            if self.ip != None:
+                try:
+                    localcalltry = ipcall.searchinfo()
+                    self.localtoken = localcalltry.start(self.ip)
+                    # print("本地测试print(self.localtoken)")
+                    # print(self.localtoken)
+                except Exception as e:
+                    self.localtoken = None
+                    self.localtoken = None
+                    app_logger.log_error(e)
+            else:
+                self.localtoken = None
+            self.localipupdate.emit(self.localtoken)
+            self.thread.quit()
+        except Exception as e:
+            app_logger.log_error(e)
+            self.thread.quit()

+ 433 - 0
Functions/QtFunctions/sortdisplaySever.py

@@ -0,0 +1,433 @@
+import datetime
+
+from PyQt6 import QtCore
+from PyQt6.QtCore import QObject
+
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+
+class sortdisplaySever(QObject):
+    sortupdate = QtCore.pyqtSignal(str, dict, list, str, str)
+
+    def __init__(self, name, ip, selectedtime, text, displayMode, selectedbc, displayselect, thread):
+        super().__init__()
+        self.funcName = name
+        self.ipinfo = ip
+        self.selectedtime = selectedtime
+        self.text = text
+        self.displayMode = displayMode
+        self.selectedbc = selectedbc
+        self.displayselect_mode = displayselect
+        self.thread = thread
+        nowDay = datetime.datetime.now().strftime("%Y%m%d")
+        tomorr =(datetime.date.today() + datetime.timedelta(days=1)).strftime("%Y%m%d")
+        yester =(datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d")
+        if self.selectedtime == nowDay:
+            self.date = "2"
+        elif self.selectedtime == tomorr:
+            self.date = "3"
+        elif self.selectedtime == yester:
+            self.date = "1"
+        else:
+            self.date = "4"
+
+    def run(self):
+        try:
+            list = []
+            if self.funcName == "sortTableWidgetDispaly":
+                #print("1")
+                self.sortTableWidgetDispaly()
+                self.sortupdate.emit("sortTableWidgetDispaly", self.sorttableWidgetDispalydata, list, self.seversts,self.displayMode)
+                self.sortupdate.emit("sortTableWidgetDispalyALL", self.DispalydataAll, list, self.seversts,self.displayMode)
+            if self.funcName == "sortTableWidgetDispalyALL":
+                #print("2")
+                self.sortTableWidgetDispalyALL()
+                self.sortupdate.emit("sortTableWidgetDispalyALL", self.sorttableWidgetDispalydata, list, self.seversts,self.displayMode)
+            elif self.funcName == "SearchsortTableWidgetDispaly":
+                #print("3")
+                self.SearchsortTableWidgetDispaly()
+                self.sortupdate.emit("SearchsortTableWidgetDispaly", self.sorttableWidgetDispalydata, list,self.seversts,self.displayMode)
+            elif self.funcName == "sorttableWidgetDisplayChange":
+                #print("4")
+                self.sorttableWidgetDisplayChange()
+                self.sortupdate.emit("sorttableWidgetDisplayChange", self.sortlogchange, list, self.seversts,self.displayMode)
+            elif self.funcName == "sorttableWidgetPeopleDisplay":
+                self.sorttableWidgetPeopleDisplay()
+                self.sortupdate.emit("sorttableWidgetPeopleDisplay", self.sortdiplaylist, self.peopleOnJob,self.seversts, self.displayMode)
+            elif self.funcName == "sorttableWidgetLOGDispaly":
+                self.sorttableWidgetLOGDispaly()
+                self.sortupdate.emit("sorttableWidgetLOGDispaly", self.sortlog, list, self.seversts, self.displayMode)
+            elif self.funcName == "sorttableWidgetPHONEDispaly":
+                self.sorttableWidgetPHONEDispaly()
+                self.sortupdate.emit("sorttableWidgetPHONEDispaly", self.sorttableWidgetPHONEDispalydata, list,self.seversts, "")
+            self.thread.quit()
+        except Exception as e:
+            app_logger.log_error(e)
+            self.thread.quit()
+
+    def severpost_nomeassge(self, postname, **kwargs):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2) + str(postdata3)
+            try:
+                # res = requests.get(url=ip, timeout=30).json()
+                res = api_fc.request_post('/static/{}'.format(postname), **kwargs)
+                self.seversts = "1"
+                return res
+            except Exception as e:
+                app_logger.log_error(e)
+                app_logger.log_error("重大bug")
+                app_logger.log_error('/static/{}  '.format(postname), **kwargs)
+                self.seversts = "0"
+                return {}
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def severget_nomeassge(self, postname, **kwargs):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/" + str(postname) + str(postdata) + str(postdata2) + str(postdata3)
+            try:
+                # res = requests.get(url=ip, timeout=30).json()
+                res = api_fc.request_get('/static/{}'.format(postname))
+                self.seversts = "1"
+                return res
+            except Exception as e:
+                app_logger.log_error(e)
+                app_logger.log_error("重大bug")
+                app_logger.log_error('/static/{}  '.format(postname), **kwargs)
+                self.seversts = "0"
+                return []
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sorttableWidgetPHONEDispaly(self):
+        try:
+            # sorttableWidgetPHONEDispalydataall = self.severpost_nomeassge("getphonelist", "", "", "")
+            sorttableWidgetPHONEDispalydataall = self.severget_nomeassge('getphonelist')['data']
+            self.sorttableWidgetPHONEDispalydata = {}
+            num = 0
+            if sorttableWidgetPHONEDispalydataall != None:
+                if self.text != "":
+                    for i in sorttableWidgetPHONEDispalydataall.keys():
+                        if str.lower(str(self.text)) in str(sorttableWidgetPHONEDispalydataall[i]):
+                            self.sorttableWidgetPHONEDispalydata[str(num)] = sorttableWidgetPHONEDispalydataall[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetPHONEDispalydata = sorttableWidgetPHONEDispalydataall
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def checkall(self, datas, text):
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if datas[i]["109"] != text:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+
+    def checkStrsingle(self,datas, text, text2): #单一条件筛选
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(text) in str(datas[i]) and datas[i]["109"] != text2:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] != text1:
+                    if str(datas[i]["8"])[0] == text2 and str(datas[i]["8"])[0] == text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll2(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] != text1:
+                    if str(datas[i]["8"])[0] != text2 and str(datas[i]["8"])[0] != text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll3(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] == text1:
+                    if str(datas[i]["8"])[0] == text2 and str(datas[i]["8"])[0] == text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+    def checkStrTerminalAll4(self,datas, text1,text2,text3,text4): #筛选航站且显示全部
+        res = {}
+        try:
+            num = 0
+            for i in datas.keys():
+                if str(datas[i]["8"]) != "" and datas[i]["109"] == text1:
+                    if str(datas[i]["8"])[0] != text2 and str(datas[i]["8"])[0] != text3:
+                        res[str(num)] = datas[i]
+                        num += 1
+                elif str(datas[i]["8"]) == "" and str(datas[i]["109"]) == text4:
+                    res[str(num)] = datas[i]
+                    num += 1
+        except Exception as e:
+            app_logger.log_error(e)
+        return res
+
+    def sortTableWidgetDispaly(self):
+        try:
+            text = self.text
+            Partdisplay = self.displayselect_mode  # 不显示起飞航班
+            # print(Partdisplay)
+            tableWidgetDispalydataAll = {}
+            if self.displayMode == "A" and (self.selectedbc == "0" or self.date=="4"):
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispaly",selectedtime="%s" % self.selectedtime,date="%s"%self.date)['data']
+            elif self.displayMode == "B"and (self.selectedbc == "0" or self.date=="4"):
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispaly2",selectedtime="%s" % self.selectedtime,date="%s"%self.date)['data']
+            elif self.displayMode == "A" and self.selectedbc == "1":
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispalyRead",date="%s"%self.date)['data']
+            elif self.displayMode == "B"and self.selectedbc == "1":
+                tableWidgetDispalydataAll = self.severpost_nomeassge("tableWidgetDispalyRead2", date="%s"%self.date)['data']
+            #print("tableWidgetDispalydataAll")
+            self.DispalydataAll=tableWidgetDispalydataAll
+            self.sorttableWidgetDispalydata = {}
+            num = 0
+            if tableWidgetDispalydataAll != None:
+                if text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata=self.checkStrsingle(tableWidgetDispalydataAll, text, "")
+                elif text == "T1" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "2", "2", "2")
+                elif text == "T2T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "2", "1")
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6"  and text != "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "4")
+                elif text == "T1" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "2", "1")
+                elif text == "" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkall(tableWidgetDispalydataAll, "4")
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "1")
+                elif text == "T1" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "2", "1")
+                elif text == "" and Partdisplay == "3":
+                    for i in tableWidgetDispalydataAll.keys():
+                        if tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetDispalydata = tableWidgetDispalydataAll
+
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sortTableWidgetDispalyALL(self):
+        try:
+            if self.displayMode == "A" and (self.selectedbc == "0" or self.date=="4"):
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispaly",selectedtime="%s" % self.selectedtime,date="%s"%self.date)['data']
+            elif self.displayMode == "B"and (self.selectedbc == "0" or self.date=="4"):
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispaly2",selectedtime="%s" % self.selectedtime,date="%s"%self.date)['data']
+            elif self.displayMode == "A" and self.selectedbc == "1":
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispalyRead",date="%s"%self.date)['data']
+            elif self.displayMode == "B"and self.selectedbc == "1":
+                self.sorttableWidgetDispalydata = self.severpost_nomeassge("tableWidgetDispalyRead2",date="%s"%self.date)['data']
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+
+    def SearchsortTableWidgetDispaly(self):
+        try:
+            text = self.text
+            self.seversts = "1"
+            Partdisplay = self.displayselect_mode  # 不显示起飞航班
+            # print(Partdisplay)
+            tableWidgetDispalydataAll = self.selectedbc
+
+            self.sorttableWidgetDispalydata = {}
+            num = 0
+            if tableWidgetDispalydataAll != None:
+                if text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6"and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "")
+                elif text == "T1" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "0":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "", "1", "2", "1")
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrsingle(tableWidgetDispalydataAll, text, "4")
+                elif text == "T1" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll2(tableWidgetDispalydataAll, "4", "1", "2", "1")
+                elif text == "" and Partdisplay == "1":
+                    self.sorttableWidgetDispalydata = self.checkall(tableWidgetDispalydataAll,  "4")
+
+                elif text != "" and text != "T1" and text != "T2" and text != "T6" and text != "T2T6" and text != "T1T6" and Partdisplay == "3":
+                    for i in tableWidgetDispalydataAll.keys():
+                        if str(text) in str(tableWidgetDispalydataAll[i]) and tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                elif text == "T1" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T2" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll3(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T2T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "1", "1")
+                elif text == "T1T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "2", "2", "1")
+                elif text == "T6" and Partdisplay == "3":
+                    self.sorttableWidgetDispalydata = self.checkStrTerminalAll4(tableWidgetDispalydataAll, "1", "1", "2", "1")
+                elif text == "" and Partdisplay == "3":
+                    for i in tableWidgetDispalydataAll.keys():
+                        if tableWidgetDispalydataAll[i]["109"] == '1':
+                            self.sorttableWidgetDispalydata[str(num)] = tableWidgetDispalydataAll[i]
+                            num += 1
+                else:
+                    self.sorttableWidgetDispalydata = tableWidgetDispalydataAll
+        except Exception as e:
+            app_logger.log_error(e)
+
+
+    def sorttableWidgetDisplayChange(self):
+        try:
+            text = self.text
+            logall = self.severpost_nomeassge("tableWidgetDisplayChange",
+                                              selectedtime="%s" % self.selectedtime)['data']
+            self.sortlogchange = {}
+            num = 0
+            if text != "":
+                for i in logall.keys():
+                    if str(text) in str(logall[i]):
+                        self.sortlogchange[str(num)] = logall[i]
+                        num += 1
+            else:
+                self.sortlogchange = logall
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sorttableWidgetPeopleDisplay(self):
+        try:
+            if self.displayselect_mode == "" or self.displayselect_mode == []:
+                text = self.text
+                self.peopleOnJob = [""]
+                bc = self.selectedbc
+                nowDaystr = self.selectedtime  # 选择的日期
+                diplaylistall = self.severpost_nomeassge("qtPeopleLoad",
+                                                         selectedtime="%s" % nowDaystr,
+                                                         bc="%s" % bc)['data']
+                self.sortdiplaylist = {}
+                num = 0
+                if text != "":
+                    for i in diplaylistall.keys():
+                        if str(text) in str(diplaylistall[i]):
+                            self.sortdiplaylist[str(num)] = diplaylistall[i]
+                            num += 1
+                else:
+                    self.sortdiplaylist = diplaylistall
+                for i in self.sortdiplaylist.keys():
+                    self.peopleOnJob.append(self.sortdiplaylist[i]["姓名"])
+            else:
+                names = self.displayselect_mode
+                text = self.text
+                self.peopleOnJob = [""]
+                bc = self.selectedbc
+                nowDaystr = self.selectedtime  # 选择的日期
+                diplaylistall = self.severpost_nomeassge("qtPeopleLoad",
+                                                         selectedtime="%s" % nowDaystr,
+                                                         bc="%s" % bc)['data']
+                self.sortdiplaylist = {}
+                num = 0
+                if text != "":
+                    for i in diplaylistall.keys():
+                        if str(text) in str(diplaylistall[i]):
+                            for name in names:
+                                if str(name) in str(diplaylistall[i]):
+                                    self.sortdiplaylist[str(num)] = diplaylistall[i]
+                                    num += 1
+                else:
+                    for i in diplaylistall.keys():
+                        for name in names:
+                            if str(name) in str(diplaylistall[i]):
+                                self.sortdiplaylist[str(num)] = diplaylistall[i]
+                                num += 1
+                for i in self.sortdiplaylist.keys():
+                    self.peopleOnJob.append(self.sortdiplaylist[i]["姓名"])
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def sorttableWidgetLOGDispaly(self):
+        try:
+            text = self.text
+            logall = self.severpost_nomeassge("tableWidgetLOGDispaly",
+                                              selectedtime="%s" % self.selectedtime)['data']
+            self.sortlog = {}
+            num = 0
+            if text != "":
+                for i in logall.keys():
+                    if str(text) in str(logall[i]):
+                        self.sortlog[str(num)] = logall[i]
+                        num += 1
+            else:
+                self.sortlog = logall
+        except Exception as e:
+            app_logger.log_error(e)

+ 533 - 0
Functions/QtFunctions/workloadinfos.py

@@ -0,0 +1,533 @@
+
+import datetime
+import json
+import os
+import time
+
+import openpyxl
+from PyQt6 import QtCore
+from PyQt6.QtCore import Qt , QTimer
+from PyQt6.QtGui import QTextDocument , QTextCursor , QTextCharFormat , QColor , QTextOption , QPalette
+from PyQt6.QtWidgets import QWidget , QMessageBox , QTableWidgetItem , QFileDialog , QStyledItemDelegate , QStyle , \
+    QMenu
+
+from UI.workloadinfos import Ui_workloadinfos
+from .LogerinTxt import app_logger
+from Functions.apiFunction import api_fc
+
+filename = "D:\\flightinfo\\logs\\peoples.json"
+class Workloadinfos(Ui_workloadinfos, QWidget):
+    def __init__(self, parent=None):
+        super().__init__(parent)
+        self.setupUi(self)
+        self.ipinfo = None
+        self.user = None
+        self.selectedbc=None
+        self.selectedtime=None
+        self.doubleclickLock = 0
+        self.headerLabel = ["序号", "交", "姓名", "备", "角色", "备", "授权", "备", "工作量", "备", "当前工作量", "备", "总工作量", "备",
+                            "总工时", "备", "当前工作", "备", "修正工时", "备", "修正详情", "备注信息", "备", "备", "备", "备", "备", "备",
+                            "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"]
+        self.tableWidgetWorkload.setSortingEnabled(True)
+        self.tableWidgetWorkload.setColumnCount(len(self.headerLabel))
+        self.tableWidgetWorkload.verticalHeader().setVisible(False)
+        self.tableWidgetWorkload.setHorizontalHeaderLabels(self.headerLabel)
+        self.refresh.clicked.connect(self.refreshnow)
+        self.changeupdate.clicked.connect(self.update)
+        self.clear.clicked.connect(self.clearselect)
+        self.autoupdateMode=False
+        self.autoupdate_check.stateChanged.connect(self.on_checkbox_changed)
+        # 保存当前排序状态
+        self.current_sort_column = -1
+        self.current_sort_order = Qt.SortOrder.AscendingOrder
+        self.searchinfo.returnPressed.connect(self.search_table)
+        self.searchinfo.textChanged.connect(self.search_table_empty)
+        self.selectall.clicked.connect(self.selectall_funciton)
+        self.load_pushbutton.clicked.connect(self.get_load)
+        self.tableWidgetWorkload.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
+        self.tableWidgetWorkload.customContextMenuRequested.connect(self.generateMenu)
+        self.tableWidgetWorkload.horizontalHeader().sortIndicatorChanged.connect(self.on_sort_changed)
+        self.changeupdate.clicked.connect(self.changeupdate_Function)
+        self.tableWidgetWorkload.cellDoubleClicked.connect(self.itemclick2)
+
+
+    def start(self):
+        self.show()
+        self.peopleresold = self.read_json_to_list()
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/getPglistInDatabase"
+            # self.peopleres = requests.get(url=ip, timeout=30).json()['返回值']
+            self.peopleres = api_fc.request_get("/static/getPglistInDatabase")['返回值']
+            #print(self.peopleres)
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+            self.peopleres = []
+        self.peopleselect=self.peopleresold if self.peopleresold else self.peopleres
+        self.comboBox_peoplelist.addItems(self.peopleres)
+        self.set_initial_selection()
+        self.refreshnow()
+        self.serchTimer = QTimer()
+        self.serchTimer.start(120 * 1000)
+        self.serchTimer.timeout.connect(self.autoupdate)
+
+    def itemclick2(self, row, column):
+        try:
+            # print(self.doubleclickLock)
+            if column == 21 and self.doubleclickLock == 0:
+                self.doubleclickLockUpdate=1
+                self.clickrow = row
+                self.clickcolumn = column
+                self.olditem = self.tableWidgetWorkload.item(row, column).text()
+                item = self.tableWidgetWorkload.item(row, column)
+                # 如果单元格对象不存在,则返回默认的背景色
+                if not item:
+                    self.color=self.tableWidgetWorkload.palette().color(QPalette.Base)
+                else:
+                    # 获取并返回单元格的背景色
+                    self.color = item.background()
+                self.tableWidgetWorkload.cellChanged.connect(self.cellchanged)
+            else:
+                self.doubleclickLockUpdate = 0
+        except Exception as e:
+            app_logger.log_error(e)
+    def cellchanged(self, row, column):
+        if self.clickrow == row and self.clickcolumn == column :
+            self.clickrow = None
+            self.clickcolumn = None
+            try:
+                self.doubleclickLock = 1
+                self.newitem = self.tableWidgetWorkload.item(row, column).text().replace("\"","*").replace("\\",";").replace("\'","*").replace("/","、").replace("#","*")
+                name = self.tableWidgetWorkload.item(row, 2).text()
+                if column == 21 and self.olditem != self.newitem:
+                    item = self.tableWidgetWorkload.item(row, column)
+                    if item.text() != "":
+                        text = item.text().replace("\"", "*").replace("\\", ";").replace("\'", "*").replace("/", "、").replace("#", "*")
+                    else:
+                        text = "清空项目12345678987654321"
+                    # ip = "http://" + str(self.ipinfo) + "/static/updateNoteItem/" + "%s/" % str(text) + "%s" % str(name)
+                    # # print(ip)
+                    # ip2 = "http://" + str(self.ipinfo) + "/static/insertLogs2/" + "排班辅助%s的备注模块:由%s变更为%s/" % (name,self.olditem, self.newitem) + "%s/" % str(self.user) + "%s" % str(datetime.datetime.now())
+                    try:
+                        # requests.get(url=ip, timeout=30).json()
+                        # requests.get(url=ip2, timeout=30).json()
+                        api_fc.request_post('/static/updateNoteItem', text=str(text), name=str(name))
+                        api_fc.request_post('/static/insertLogs2',
+                                            text="排班辅助%s的备注模块:由%s变更为%s" % (name,self.olditem, self.newitem),
+                                            name=str(self.user),
+                                            time=str(datetime.datetime.now()))
+                        self.tableWidgetWorkload.setItem(int(row), column, QTableWidgetItem(str(self.newitem)))
+                        self.tableWidgetWorkload.item(int(row), column).setBackground(QColor("yellow"))
+                        self.tableWidgetWorkload.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                    except Exception as e:
+                        app_logger.log_error(e)
+                        QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                self.doubleclickLockUpdate = 0
+                self.doubleclickLock = 0
+                self.tableWidgetWorkload.cellChanged.disconnect(self.cellchanged)
+            except Exception as e:
+                self.doubleclickLockUpdate = 0
+                self.clickrow = None
+                self.clickcolumn = None
+                app_logger.log_error(e)
+                try:
+                    self.tableWidgetWorkload.cellChanged.disconnect(self.cellchanged)
+                except:
+                    pass
+                self.tableWidgetWorkload.setItem(int(row), column, QTableWidgetItem(str(self.olditem)))
+                self.tableWidgetWorkload.item(int(row), column).setBackground(QColor(self.color))
+                self.tableWidgetWorkload.item(int(row), column).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                app_logger.log_error(e)
+                self.doubleclickLock = 0
+
+
+    def changeupdate_Function(self):
+        day=datetime.datetime.now().strftime("%Y%m%d")
+        info = self.changeinfo.text().strip().lower()
+        people = self.changepeople.text().strip()
+        costtime = self.changevalue.text().strip().lower()
+        try:
+            costtime = float(costtime)
+            if info and people and costtime:
+                timestr=str(int(time.time()*1000))
+                id= f"人工修正-{info}-{timestr}-{people}"
+                data0={
+                    "id": id,
+                    'people':people,
+                    'costtime':costtime,
+                    'info':info,
+                    'day':day
+                }
+                try:
+                    # ip = "http://" + str(self.ipinfo) + "/static/manchangecosttime"
+                    # data = json.dumps(data0)
+                    # res = requests.post(url=ip, data=data, timeout=30).json()
+                    res = api_fc.request_post('/static/manchangecosttime', data=data0)
+                    if res["返回值"] == "ok":
+                        QMessageBox.information(self, "提示", "操作成功!")
+                        self.refreshnow()
+                    else:
+                        QMessageBox.warning(self, "提示", "操作失败!")
+                except Exception as e:
+                    QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+                    app_logger.log_error(e)
+
+            else:
+                QMessageBox.warning(self,"警告", "请填写完整信息!!!")
+        except ValueError:
+            QMessageBox.warning(self,"警告", "工时内请填写数字!!!")
+
+    def generateMenu(self, pos):
+        try:
+            nowDay = datetime.date.today().strftime("%Y%m%d")
+            a_str = nowDay + " 09:00:00"
+            b_str = nowDay + " 20:30:00"
+            a = datetime.datetime.strptime(a_str, "%Y%m%d %H:%M:%S")
+            b = datetime.datetime.strptime(b_str, "%Y%m%d %H:%M:%S")
+            nowtime = datetime.datetime.now()
+            passday = (nowtime - datetime.timedelta(days=4)).strftime("%Y%m%d")
+            if a < nowtime < b:
+                for i in self.tableWidgetWorkload.selectionModel().selection().indexes():
+                    menu = QMenu()
+                    item = menu.addAction('上个班未交班')
+                    item2 = menu.addAction('上个班交班')
+
+                    screenPos = self.tableWidgetWorkload.mapToGlobal(pos)
+                    action = menu.exec(screenPos)
+                    rowIndex = i.row()
+                    taskids = self.tableWidgetWorkload.item(rowIndex, 3).text()
+                    handstsNow=self.tableWidgetWorkload.item(rowIndex, 1).text()
+                    name=self.tableWidgetWorkload.item(rowIndex, 2).text()
+                    data={
+                        "ids":taskids,
+                        "type":handstsNow,
+                        "name":name,
+                        "date":passday,
+                    }
+                    if action == item:
+                        if handstsNow == "Y":
+                            self.handoverflight(data)
+                            self.refreshnow()
+                        else:
+                            QMessageBox.warning(self, "警告", f"未查询到{name}交班记录,无需取消交班")
+                        return
+                    elif action == item2:
+                        if handstsNow != "Y":
+                            self.handoverflight(data)
+                            self.refreshnow()
+                        else:
+                            QMessageBox.warning(self, "警告", f"经查询{name}已被记录交班,不用重复记录")
+                        return
+                    else:
+                        return
+        except Exception as e:
+            app_logger.log_error(e)
+
+    def get_load(self):
+        try:
+            peoples = []
+            fileName, _ = QFileDialog.getOpenFileName(self, '打开文件', '/')
+            ext = os.path.splitext(fileName)[1].lower()
+            if ext == ".xlsx":
+                workbook = openpyxl.load_workbook(filename=fileName)
+                mysheet = workbook.active
+                myrows = list(mysheet.values)
+                if myrows[0][0] != ""and myrows[0][0] != None:
+                    for i in myrows:
+                        if i[0] != ""and i[0] != None:
+                            peoples.append(i[0])
+                if peoples:
+                    self.peopleselect=peoples
+                    self.write_list_to_json(peoples)
+                    self.set_initial_selection()
+                    self.refreshnow()
+                else:
+                    QMessageBox.information(self, "提示", "人员名单导入为空,请重新录入")
+            else:
+                QMessageBox.warning(self, "警告", "请使用xlsx文件,在第一列输入人名再导入,人名需要带字母")
+                return
+        except Exception as e:
+            app_logger.log_error(e)
+    def selectall_funciton(self):
+        self.peopleselect=self.peopleres
+        self.write_list_to_json(self.peopleselect)
+        self.set_initial_selection()
+    def search_table_empty(self):
+        """根据搜索框内容过滤表格数据"""
+        search_text = self.searchinfo.text().strip().lower()
+        if not search_text:
+            # 如果搜索框为空,显示所有行
+            for row in range(self.tableWidgetWorkload.rowCount()):
+                self.tableWidgetWorkload.setRowHidden(row, False)
+            return
+
+    def search_table(self):
+        """根据搜索框内容过滤表格数据"""
+        search_text = self.searchinfo.text().strip().lower()
+        if not search_text:
+            # 如果搜索框为空,显示所有行
+            for row in range(self.tableWidgetWorkload.rowCount()):
+                self.tableWidgetWorkload.setRowHidden(row, False)
+            return
+        # 遍历表格所有单元格进行搜索
+        for row in range(self.tableWidgetWorkload.rowCount()):
+            row_hidden = True
+            for col in range(self.tableWidgetWorkload.columnCount()):
+                item = self.tableWidgetWorkload.item(row, col)
+                if item and search_text in item.text().lower():
+                    row_hidden = False
+                    break
+            self.tableWidgetWorkload.setRowHidden(row, row_hidden)
+
+    def on_sort_changed(self, logicalIndex, order):
+        """记录当前的排序状态"""
+        self.current_sort_column = logicalIndex
+        self.current_sort_order = order
+
+    def on_checkbox_changed(self, state):
+        if state != 0:
+            self.autoupdateMode = True
+        else:
+            self.autoupdateMode = False
+
+    def ensure_file_exists(self):
+        """确保文件存在,不存在则创建空文件"""
+        directory = os.path.dirname(filename)
+        # 如果目录不存在,则创建目录
+        if directory and not os.path.exists(directory):
+            os.makedirs(directory)
+        # 如果文件不存在,则创建空文件
+        if not os.path.exists(filename):
+            with open(filename, 'w', encoding='utf-8') as f:
+                f.write("[]")  #
+
+    def write_list_to_json(self,data_list):
+        """将 Python 列表写入 JSON 文件"""
+        try:
+            self.ensure_file_exists()  # 确保文件存在
+            with open(filename, 'w', encoding='utf-8') as f:
+                json.dump(data_list, f, ensure_ascii=False)
+            #print(f"数据已成功写入 {filename}")
+        except Exception as e:
+            app_logger.log_error(e)
+            #print(f"写入文件时出错: {e}")
+    def read_json_to_list(self):
+        """从 JSON 文件读取数据并转换为 Python 列表"""
+        try:
+            self.ensure_file_exists()  # 确保文件存在
+            with open(filename, 'r', encoding='utf-8') as f:
+                data = json.load(f)
+            return data
+        except json.JSONDecodeError:
+            #print(f"文件 {filename} 格式不是有效的 JSON,将重置为空列表")
+            # 重置文件为空白列表
+            self.write_list_to_json([])
+            return None
+        except Exception as e:
+            return None
+    def set_initial_selection(self):
+        """设置多选ComboBox的初始选中值"""
+        for i in range(self.comboBox_peoplelist.model().rowCount()):
+            item = self.comboBox_peoplelist.model().item(i)
+            if item.text() in self.peopleselect:
+                item.setCheckState(QtCore.Qt.CheckState.Checked)
+            else:
+                item.setCheckState(QtCore.Qt.CheckState.Unchecked)
+        self.comboBox_peoplelist.update_text()
+    def getdatas(self):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/getworkload"
+            # data = json.dumps(self.peopleselect)
+            # res = requests.post(url=ip, data=data, timeout=30).json()
+            res = api_fc.request_post('/static/getworkload', names=self.peopleselect)["data"]
+            return res
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+    def handoverflight(self,data0):
+        try:
+            # ip = "http://" + str(self.ipinfo) + "/static/handoverflight"
+            # data = json.dumps(data0)
+            # res = requests.post(url=ip, data=data, timeout=30).json()
+            res = api_fc.request_post('/static/handoverflight', data=data0)
+            if res["返回值"] == "ok":
+                QMessageBox.information(self, "提示", "操作成功!")
+            else:
+                QMessageBox.warning(self, "提示", "操作失败!")
+        except Exception as e:
+            QMessageBox.warning(self, "提示", "服务器连接超时,请联系管理员检查服务器!")
+            app_logger.log_error(e)
+    def autoupdate(self):
+        if self.autoupdateMode:
+            res = self.getdatas()
+            self.tableDisplay(res)
+            if self.searchinfo.text():
+                self.search_table()
+
+    def tableDisplay(self,displaydata):
+        try:
+            if displaydata:
+                self.tableWidgetWorkload.setSortingEnabled(False)
+                # 清除原有数据
+                self.tableWidgetWorkload.setRowCount(0)
+                # 设置列数(假设数据是二维列表,第一行为表头)
+                self.tableWidgetWorkload.setRowCount(len(displaydata))
+                for row in range(len(displaydata)):
+                    for col in range(len(self.headerLabel)):
+                        item = QTableWidgetItem(str(displaydata[str(row)][str(col)]))
+                        self.tableWidgetWorkload.setItem(row, col, item)
+                        if col == 16 and "无" not in str(displaydata[str(row)][str(col)]):
+                            item.setForeground(QColor("red"))
+                            font = item.font()
+                            item.setFont(font)
+                        elif col == 8 :
+                            item.setForeground(QColor("green"))
+                            font = item.font()
+                            font.setBold(True)
+                            item.setFont(font)
+                        elif col == 21 and str(displaydata[str(row)][str(col)]) != "" :
+                            item.setBackground(QColor("yellow"))
+                        elif col == 1 and str(displaydata[str(row)][str(col)]) == "Y":
+                            item.setBackground(QColor("yellow"))
+                        if col not in [5]:
+                            self.tableWidgetWorkload.item(int(row), col).setTextAlignment(Qt.AlignmentFlag.AlignCenter)
+                        else:
+                            self.tableWidgetWorkload.item(int(row), col).setTextAlignment(Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignCenter)
+                            self.tableWidgetWorkload.setRowHeight(int(row), 35)
+
+                    settips = {1: "3", 14: "20"}
+                    for key, value in settips.items():
+                        if self.tableWidgetWorkload.item(int(row), key):
+                            self.tableWidgetWorkload.item(int(row), key).setToolTip("%s" % (str(displaydata[str(row)][str(value)])))
+
+                self.tableWidgetWorkload.setItemDelegate(ColoredTextDelegate())
+                self.tableWidgetWorkload.resizeColumnsToContents()
+                self.tableWidgetWorkload.setWordWrap(True)
+                self.tableWidgetWorkload.setColumnWidth(6, 100)
+
+                for i in range(len(self.headerLabel)):
+                    if i in [3,5,7,9,11,13,15,17,19,22,23,24,25,26,27,10,12,18,20]:
+                        self.tableWidgetWorkload.setColumnHidden(i, True)
+                    else:
+                        self.tableWidgetWorkload.setColumnHidden(i, False)
+
+                self.tableWidgetWorkload.setSortingEnabled(True)
+        except Exception as e:
+            app_logger.log_error(e)
+            self.tableWidgetWorkload.setSortingEnabled(True)
+
+    def refreshnow(self):
+        self.peopleselect = self.comboBox_peoplelist.get_selected_items()
+        self.write_list_to_json(self.peopleselect)
+        res=self.getdatas()
+        self.tableDisplay(res)
+        if self.searchinfo.text():
+            self.search_table()
+
+    def clearselect(self):
+        self.peopleselect=[]
+        self.write_list_to_json(self.peopleselect)
+        self.set_initial_selection()
+
+class ColoredTextDelegate(QStyledItemDelegate):
+
+    def paint(self, painter, option, index):# 保存painter状态
+        painter.save()
+
+        # 设置交替行颜色
+        palette = option.palette
+        if index.row() % 2 == 1:
+            bg_color = palette.color(QPalette.ColorRole.AlternateBase)
+        else:
+            bg_color = palette.color(QPalette.ColorRole.Base)
+
+        # 绘制背景(考虑选中状态)
+        if option.state & QStyle.StateFlag.State_Selected:
+            painter.fillRect(option.rect, palette.highlight())
+        else:
+            painter.fillRect(option.rect, bg_color)
+
+        if index.column() in [28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47]:
+            # 获取单元格文本
+
+            text = index.data(Qt.ItemDataRole.DisplayRole) or ""
+            if "预排" in text:
+                painter.fillRect(option.rect, QColor("yellow"))
+                # 设置文本绘制选项
+                painter.save()
+            text_option = QTextOption()
+            text_option.setAlignment(Qt.AlignmentFlag.AlignCenter)
+            doc = QTextDocument()
+            doc.setDefaultTextOption(text_option)
+            doc.setTextWidth(option.rect.width())
+
+            default_format = QTextCharFormat()
+            default_format.setForeground(QColor("gray"))
+            font = default_format.font()
+            font.setPointSize(8)
+            default_format.setFont(font)
+
+            balck_format = QTextCharFormat()
+            balck_format.setForeground(QColor("balck"))
+            font = balck_format.font()
+            font.setPointSize(10)
+            balck_format.setFont(font)
+            # 插入带格式文本
+            cursor = QTextCursor(doc)
+            cursor.insertText(text[:5], balck_format)
+            cursor.insertText(text[5:], default_format)
+
+            # 绘制文档
+            painter.save()
+            painter.translate(option.rect.topLeft())
+            doc.drawContents(painter)
+            painter.restore()
+        elif index.column() == 8:
+            text = index.data(Qt.ItemDataRole.DisplayRole) or ""
+            start = text.find("(")
+            end = text.find(")")
+            # 设置文本绘制选项
+            painter.save()
+            text_option = QTextOption()
+            text_option.setAlignment(Qt.AlignmentFlag.AlignCenter)
+
+            doc = QTextDocument()
+            doc.setDefaultTextOption(text_option)
+            doc.setTextWidth(option.rect.width())
+
+            default_format = QTextCharFormat()
+            default_format.setForeground(QColor("red"))
+            font = default_format.font()
+            font.setBold(True)
+            default_format.setFont(font)
+
+            balck_format = QTextCharFormat()
+            balck_format.setForeground(QColor("balck"))
+
+            # 插入带格式文本
+            cursor = QTextCursor(doc)
+            cursor.insertText(text[:start+1], balck_format)
+            cursor.insertText(text[start+1:end], default_format)
+            cursor.insertText(text[end:], balck_format)
+            # 计算垂直居中位置
+            text_height = doc.size().height()
+            y_offset = (option.rect.height() - text_height) / 2
+            # 绘制文本
+            painter.translate(option.rect.x(), option.rect.y() + y_offset)
+            doc.drawContents(painter)
+            painter.restore()
+
+        else:
+            # 其他单元格使用默认绘制
+            super().paint(painter, option, index)
+
+
+    def sizeHint(self, option, index):
+        # 确保单元格有合适的大小
+        if index.column() == 8:
+            text = index.data(Qt.ItemDataRole.DisplayRole) or ""
+            doc = QTextDocument()
+            doc.setPlainText(text)
+            doc.setTextWidth(option.rect.width())
+            return doc.size().toSize()
+        return super().sizeHint(option, index)

+ 0 - 0
Functions/__init__.py


+ 79 - 0
Functions/apiFunction.py

@@ -0,0 +1,79 @@
+import json
+import requests
+
+
+class api_fucntion:
+    def __init__(self):
+        self.url = 'http://localhost:5001'
+        self.headers = {'Content-Type': 'application/json'}
+        #self.headers_with_token = {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': ''}
+        self.access_token = None
+        self.refresh_token = None
+
+    def headers_with_token(self, token):
+        return {'Content-Type': 'application/json', 'Authorization': token}
+
+    def get_access_token(self, username, password):
+        data = {'username': username, 'password': password}
+        response = requests.post(self.url + '/loginTable', headers=self.headers, data=json.dumps(data))
+        #print(response.json())
+        if response.status_code == 200:
+            self.access_token = 'Bearer ' + response.json()['access_token']
+            self.refresh_token = 'Bearer ' + response.json()['refresh_token']
+        return response.json()['data']
+
+    def refresh_access_token(self):
+        response = requests.post(self.url + '/refresh', headers=self.headers_with_token(self.refresh_token))
+        self.access_token = 'Bearer '+response.json()['access_token']
+        if response.status_code == 200:
+            #print('Successfully refreshed access token')
+            return True
+        else:
+            #print('Failed to refresh access token')
+            return False
+
+    def request_get(self, uri, **kwargs):
+        response = requests.get(self.url + uri, headers=self.headers_with_token(self.access_token))
+        data = response.json()
+        print(type(data))
+        if response.status_code == 401 and data['msg'] == 'Token has expired':
+            if self.refresh_access_token():
+                response = requests.get(self.url + uri, headers=self.headers_with_token(self.access_token))
+                data = response.json()
+            else:
+                data['msg'] = 'Failed to refresh access token'
+        return data
+
+    def request_post(self, uri, **kwargs):
+        response = requests.post(self.url + uri, headers=self.headers_with_token(self.access_token), data=json.dumps(kwargs))
+        data = response.json()
+        if response.status_code == 401 and data['msg'] == 'Token has expired':
+            if self.refresh_access_token():
+                response = requests.post(self.url + uri, headers=self.headers_with_token(self.access_token), data=json.dumps(kwargs))
+                data = response.json()
+            else:
+                data['msg'] = 'Failed to refresh access token'
+        return data
+
+    def request_get_without_token(self, uri):
+        response = requests.get(self.url + uri, headers=self.headers)
+        data = response.json()
+        if response.status_code == 200:
+            return data
+        else:
+            data['msg'] = 'Failed to get data'
+            return data
+
+    def request_post_without_token(self, uri, **kwargs):
+        response = requests.post(self.url + uri, headers=self.headers, data=json.dumps(kwargs))
+        data = response.json()
+        if response.status_code == 200:
+            return data
+        else:
+            data['msg'] = 'Failed to post data'
+            return data
+
+api_fc = api_fucntion()
+
+
+

+ 181 - 0
Functions/ipFind.py

@@ -0,0 +1,181 @@
+import ipaddress
+import re
+import subprocess
+
+
+# 执行windows命令
+def exec_command(commands) -> list:
+    """执行windows命令"""
+    if not commands:
+        return list()
+    # 子进程的标准输出设置为管道对象
+    if isinstance(commands, str):
+        commands = [commands]
+    return_list = []
+    for i in commands:
+        p = subprocess.Popen(i, shell=True, stdout=subprocess.PIPE, universal_newlines=True)
+        p.wait()
+        res = "".join(p.stdout.readlines())
+        return_list.append(res)
+    return return_list
+
+
+def get_net_card():
+    """
+    功能:通过ipconfig返回的文本解析网卡名字、ip、掩码、网关等信息
+    注释:简单做了注释
+    测试:在window10 专业版测试通过(可以检测到以太网两个(包含手机、网线)、wifi一个)
+    测试反馈:如果使用发现其余问题可以反馈到 sunnylishaoxu@163.com,非常感谢
+    说明一:
+       默认网关. . . . . . . . . . . . . : fe80::10b1:1865:86e8:ad10%41
+                                           172.20.10.1
+    """
+    net_card_data = list()
+    res = exec_command("ipconfig")
+    temp_dict = dict(flag=True)
+    gateway_error = False
+
+    net_card_data.append({'flag': True, 'gateway1': '172.27.115.254', 'mask': '255.255.255.0'})
+    net_card_data.append({'flag': True, 'gateway1': '172.30.130.1', 'mask': '255.255.255.0'})
+    for x in res[0].splitlines():
+
+
+        try:
+            # 匹配IP正则
+            pattern = re.compile(r'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}')
+            # 测试发现有的网关会默认在下一行,情况见说明一,所以这边检查到默认网关,发现没有匹配到,则从下一行找
+            if gateway_error:
+                temp_dict['gateway1'] = pattern.search(x).group()
+                gateway_error = False
+                #print("当前网卡 %s 获取第二行网关信息 %s" % (temp_dict['card_name'], temp_dict['gateway1']))
+                continue
+            # 如果发现新的适配器,则重置上一个网卡是否可用的状态
+            if "适配器" in x:
+                temp_dict = dict(flag=True)
+                temp_dict['card_name'] = x.split(" ", 1)[1][:-1]
+                #print("当前网卡 %s" % (temp_dict['card_name']))
+                continue
+            if "IPv4 地址" in x:
+                temp_dict['ip'] = pattern.search(x).group()
+                #print("当前网卡 %s 获取IP信息 %s" % (temp_dict['card_name'], temp_dict['ip']))
+                continue
+            elif "子网掩码" in x:
+                temp_dict['mask'] = pattern.search(x).group()
+                #print("当前网卡 %s 获取子网掩码信息 %s" % (temp_dict['card_name'], temp_dict['mask']))
+                continue
+            # 测试发现有的网关会默认在下一行,情况见说明一,所以这边做了异常处理
+            elif "默认网关" in x:
+                try:
+                    temp_dict['gateway1'] = pattern.search(x).group()
+                    #temp_dict['gateway1'] = "172.27.115.254"
+                    #print("当前网卡 %s 获取默认网关信息 %s" % (temp_dict['card_name'], temp_dict['gateway1']))
+                except:
+                    gateway_error = True
+                    #print("当前网卡 %s 解析当前行默认网关信息错误" % (temp_dict['card_name']))
+
+                # 如果检查到网关,代表当前适配器信息已经获取完毕 重置网关状态与适配器信息字典
+                if temp_dict.get("gateway1"):
+                    net_card_data.append(temp_dict)
+                    #print("当前网卡 %s 当前适配器信息获取完毕 %s \n\n" % (temp_dict['card_name'], temp_dict))
+
+                    temp_dict = dict(flag=True)
+                    continue
+            # 发现媒体已断开则更改当前适配器状态
+            elif "媒体已断开" in x:
+                #print("当前网卡 %s 已断开 跳过\n\n" % (temp_dict['card_name']))
+                temp_dict['flag'] = False
+                continue
+            # 判断媒体状态正常,IP、子网掩码、网关都正常后,保持起来
+            if temp_dict.get("flag") and temp_dict.get("ip") and temp_dict.get("mask") and temp_dict.get("gateway1"):
+                #print("当前网卡 %s 当前适配器信息获取完毕 %s \n\n" % (temp_dict['card_name'], temp_dict))
+                net_card_data.append(temp_dict)
+                # 重置网关状态与适配器信息字典
+                temp_dict = dict(flag=True)
+                continue
+        except Exception as e:
+            # print(e)
+            # print(x)
+            pass
+    # for i in net_card_data:
+    #     print("%s:%s" % (i.get("card_name"), i))
+
+    #print(net_card_data)
+    return net_card_data
+
+
+# 子网掩码地址转长度
+def netmask_to_bit_length(netmask):
+    """
+    >>> netmask_to_bit_length('255.255.255.0')
+    24
+    >>>
+    """
+    # 分割字符串格式的子网掩码为四段列表
+    # 计算二进制字符串中 '1' 的个数
+    # 转换各段子网掩码为二进制, 计算十进制
+    return sum([bin(int(i)).count('1') for i in netmask.split('.')])
+
+# 子网掩码长度转地址
+def bit_length_to_netmask(mask_int):
+    """
+    >>> bit_length_to_netmask(24)
+    '255.255.255.0'
+    >>>
+    """
+    bin_array = ["1"] * mask_int + ["0"] * (32 - mask_int)
+    tmpmask = [''.join(bin_array[i * 8:i * 8 + 8]) for i in range(4)]
+    tmpmask = [str(int(netmask, 2)) for netmask in tmpmask]
+    return '.'.join(tmpmask)
+
+
+def getStartIP(gateway:str,mask:str):
+    gatewayList = gateway.split('.')
+    maskList = mask.split('.')
+    newStartIP=''
+    for i in range(4):
+        bgate = list(bin(int(gatewayList[i])).replace('0b','').zfill(8))
+        bmask = list(bin(int(maskList[i])).replace('0b','').zfill(8))
+        # print('gate:{}'.format(bgate))
+        # print('mask:{}'.format(bmask))
+        ngate = [0, 0, 0, 0, 0, 0, 0, 0]
+        for n in range(8):
+
+
+            if bmask[n]=='0':
+                ngate[n]=0
+            else:
+                ngate[n]=bgate[n]
+        # print("newGate:{}".format(ngate))
+        nbgate = ''
+        for item in ngate:
+            nbgate+=str(item)
+        # print(nbgate)
+        # print('formate gate:{}'.format(int(nbgate, 2)))
+        newStartIP += str(int(nbgate, 2))
+        newStartIP += '.'
+    # print(gatewayList)
+    # print(newStartIP[:-1])
+    return newStartIP[:-1]
+
+def ipFind():
+    res = get_net_card()
+    #print(res)
+    allNetIP = []
+    for i in res:
+        ip = i['gateway1']
+        ipl = ip.split('.')
+        mask = i['mask']
+        newip = getStartIP(ip, mask)
+        masklen = netmask_to_bit_length(mask)
+        net = ipaddress.ip_network('{}/{}'.format(newip, masklen))
+
+        for x in net.hosts():
+            allNetIP.append(str(x))
+
+    return allNetIP
+
+
+
+if __name__ == '__main__':
+    allNetIP = ipFind()
+    print(allNetIP)

+ 19 - 0
Functions/openPdf.py

@@ -0,0 +1,19 @@
+
+import os
+import subprocess
+import sys
+import tempfile
+
+
+def open_with_system_viewer(pdf_data):
+    with tempfile.NamedTemporaryFile(suffix='.pdf', delete=False) as f:
+        f.write(pdf_data)
+        temp_path = f.name
+
+    # 打开系统默认阅读器
+    if sys.platform.startswith('darwin'):  # macOS
+        subprocess.call(('open', temp_path))
+    elif os.name == 'nt':  # Windows
+        os.startfile(temp_path)
+    elif os.name == 'posix':  # Linux
+        subprocess.call(('xdg-open', temp_path))

+ 61 - 0
Functions/serverFind.py

@@ -0,0 +1,61 @@
+import time
+from concurrent.futures import ThreadPoolExecutor
+
+import requests
+
+from .ipFind import ipFind  # 假设ipFind是一个从本地模块导入的函数
+
+
+def task(i):
+    """发送HTTP请求检查服务器状态的任务函数"""
+    #sleep_seconds = random.uniform(0, 0.1)
+    #print(sleep_seconds)
+    # 可选:取消注释以显示线程执行信息
+    # print('线程名称:{},参数:{},睡眠时间:{}'.format(threading.current_thread().name, i, sleep_seconds))
+    try:
+        # 随机延迟,减少请求风暴
+        #time.sleep(sleep_seconds)
+        # 发送请求并设置合理的超时时间
+        r = requests.get(f'http://{i}:5001/findserver', timeout=0.5, headers={'Content-Type': 'application/json'})
+        r = r.json()['msg']
+        print(r)
+    except requests.exceptions.ConnectTimeout:
+        # 连接超时处理
+        r = '0'
+    except requests.exceptions.ReadTimeout:
+        # 读取超时处理
+        r = '0'
+    except requests.exceptions.ConnectionError:
+        # 连接错误处理
+        r = '0'
+    except Exception as e:
+        # 其他异常处理
+        #print(f"请求处理异常: {e}")
+        r = '0'
+    return [i, r]
+
+
+def findServer():
+    """查找可用服务器的主函数"""
+    time1 = time.time()
+    # 创建线程池,设置合理的最大工作线程数
+    with ThreadPoolExecutor(max_workers=500) as pool:
+        # 获取所有IP地址
+        allIP = ipFind()
+        # 使用线程池并行执行任务
+        result = list(pool.map(task, allIP))
+
+    #print(f'耗时:{time.time() - time1}')
+
+    # 筛选可用服务器
+    serverList = []
+    for item in result:
+        if "天府综合平台一期:" in item[1]:
+            item[1] = item[1].replace("天府综合平台一期:", "")
+            serverList.append(item)
+    return serverList
+
+
+if __name__ == '__main__':
+    l = findServer()
+    #print("可用服务器列表:", l)

+ 415 - 0
Functions/utils.py

@@ -0,0 +1,415 @@
+import datetime
+import time
+
+import requests
+from selenium import webdriver
+from selenium.webdriver import ActionChains
+from selenium.webdriver.chrome.options import Options
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support import expected_conditions as EC
+from selenium.webdriver.support.wait import WebDriverWait
+
+
+class flight_list(object):
+
+    def __init__(self):
+        self.url = r"http://me.sichuanair.com/login.shtml"
+        self.login_url = "https://login.sichuanair.com/idp/AuthnEngine?currentAuth=urn_oasis_names_tc_SAML_2.0_ac_classes_BAMUsernamePassword"
+        self.flight_list_url = "https://me.sichuanair.com/api/v1/plugins/LM_FLIGHT_LIST"
+        self.flight_list_third_url = "https://me.sichuanair.com/api/v1/plugins/LM_FLIGHT_THIRD_LIST"
+        self.task_flight_list_url="https://me.sichuanair.com/api/v1/plugins/LM_TASK_ASSIGNMENT_LIST"
+        self.LM_FJ_TASK_PG="https://me.sichuanair.com/api/v1/plugins/LM_FJ_TASK_PG"
+        self.task_filght_third_list_url="https://cscsupplier.sichuanair.com/api/v1/plugins/LM_TASK_ASSIGNMENT_THIRD_LIST"
+        self.LM_TSK_DINGDONG_url ="https://cscsupplier.sichuanair.com/api/v1/plugins/LM_TSK_DINGDONG"
+        self.LM_TSK_SURE_PG_url="https://cscsupplier.sichuanair.com/api/v1/plugins/LM_TSK_SURE_PG"
+        self.LM_TSK_EMP_PGLIST_url="https://cscsupplier.sichuanair.com/api/v1/plugins/LM_TSK_EMP_PGLIST"
+        self.MM_GJJH_LIST="https://cscsupplier.sichuanair.com/api/v1/plugins/MM_GJJH_LIST"
+        self.LM_TSK_HANDOVER_url="https://cscsupplier.sichuanair.com/api/v1/plugins/LM_TSK_HANDOVER"
+        self.LM_FLIGHT_SEARCH_LIST='https://cscsupplier.sichuanair.com/api/v1/plugins/LM_FLIGHT_SEARCH_LIST'
+        self.LM_TASK_ARCHIVE_LIST='https://cscsupplier.sichuanair.com/api/v1/plugins/LM_TASK_ARCHIVE_LIST'
+        self.jobcard='https://cscsupplier.sichuanair.com'
+
+        self.token = None
+        #amro状态
+        self.amro_status = 0
+        self.flight_list_json = None
+        self.flight_list_third_json = None
+
+
+    def start(self, username, password):
+        try:
+            self.token = self.login(username, password)
+        except Exception:
+            pass
+
+        return self.token
+
+    def login(self, username, password):
+        try:
+
+            options = webdriver.EdgeOptions()
+            options.use_chromium = True
+            #options.add_experimental_option('excludeSwitches', ['enable-logging'])
+            #options.add_argument("headless")
+            #options.add_argument("disable-gpu")
+            #options.add_argument('start-maximized')
+            #options.add_argument('window-size=1920x1080')
+            self.driver = webdriver.Edge(options=options)
+            self.actions = ActionChains(self.driver)
+        except:
+            chrome_options = Options()
+            chrome_options.add_argument("--headless")
+            chrome_options.add_argument("window-size=1920x1080")
+            chrome_options.add_argument("--start-maximized")
+            chrome_options.add_argument('--disable-gpu')  # 如果不加这个选项,有时定位会出现问题
+            self.driver = webdriver.Chrome(executable_path=r'D:\flightinfo\Google\Chrome\Application\chromedriver.exe',
+                                           # executable_path=path
+                                           options=chrome_options)
+
+            self.actions = ActionChains(self.driver)
+
+
+        self.driver.get(self.url)
+        WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, 'singleSubmit')))
+        loginbtn = self.driver.find_element('id', 'singleSubmit')
+        time.sleep(0.5)
+        self.actions.click(loginbtn)
+        self.actions.perform()
+        WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.NAME, "j_username"))).send_keys(
+            username)
+        time.sleep(0.5)
+        self.driver.find_element('name', "j_password").send_keys(password)
+        #time.sleep(0.5)
+        time.sleep(0.5)
+        self.driver.find_element_by_xpath("//button[@type='button']").click()
+        time.sleep(1)
+        for cookie in self.driver.get_cookies():
+            if "_amro_sk" in cookie.values():
+                self.amro_status = 1
+                self.driver.quit()
+                return "_amro_sk=" +cookie["value"]
+            else:
+                pass
+        self.driver.quit()
+    def get_cookie(self):
+        if self.token!=None:
+            return self.token
+        else:
+            return None
+
+    def checkCookieSts(self,cookie):
+        url = "https://me.sichuanair.com/api/v1/plugins/PROCESS_CLAIM_TASK_PRO_LIST"
+        data = {
+            'user_id': '',
+            'userId': '',
+            'accountType': 'ARCHIVE',
+            'page': '1',
+            'rows': '11'
+        }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        result = requests.post(url, data, headers=header).json()
+
+        #print(result['code'], result['msg'], result['data'])
+        return result['code']
+
+
+    def checkWorkjob(self,taskids,acno,taskType,actype,startDate,endDate,cookie):
+        data = {"taskids": taskids,
+                "acno": acno,
+                "taskType": taskType,
+                "actype": actype,
+                "startDate": startDate,
+                "endDate": endDate
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.LM_FJ_TASK_PG_json = requests.post(url=self.LM_FJ_TASK_PG, data=data, headers=header).json()
+        except Exception:
+            self.LM_FJ_TASK_PG_json = None
+        return  self.LM_FJ_TASK_PG_json
+
+    def request_jobcard(self, cookie, filename):  # 需要自动逻辑白班夜班
+        one_year_later = datetime.datetime.now() + datetime.timedelta(days=365)
+        timestamp = int(one_year_later.timestamp()*1000)
+        header = {
+            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
+            "Cookie": cookie}
+        try:
+            task_jobcard_json = requests.get(url=f'https://cscsupplier.sichuanair.com{filename}?_cache_timestamp={timestamp}',headers=header).content
+        except Exception:
+            task_jobcard_json = None
+        return task_jobcard_json
+
+    def request_MM_GJJH_LIST(self,cookie):
+        yesterday=(datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y-%m-%d")
+        today = datetime.date.today().strftime("%Y-%m-%d")
+        data={"mfrpn":"",
+            "zjcdats": yesterday,
+            "zjcdate": today,
+            "zwgh": "Y",
+            "zlynam":"",
+            "zbmtxt":"",
+            "zkstxt":"",
+            "zfdtxt":"",
+            "zlgort": "TF20",
+            "zghnam":"",
+            "ghrbm":"",
+            "ghrks":"",
+            "ghrfd":"",
+            "zghkcd":"",
+            "sort": "ZBMTXT",
+            "order": "asc"
+            }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.MM_GJJH_LIST_json = requests.post(url=self.MM_GJJH_LIST, data=data, headers=header).json()
+        except Exception:
+            self.MM_GJJH_LIST_json = None
+        return self.MM_GJJH_LIST_json
+
+    def request_task_filght_list(self, flightDate:str,cookie,bc:str):   #需要自动逻辑白班夜班
+        data = {"airportCode": "ZUTF",
+                "ddate": flightDate,
+                "notView":"",
+                "baseCode": "TF01",
+                "actype1":"(A319|A320|A321)",
+                "aclocArea1": "()",
+                "tasktype1": "()",
+                "shift":bc,
+                "tasktype":"",
+                "actype": "A319,A320,A321",
+                "aclocArea":"",
+                "isshiftex":"",
+                "repush":"",
+                "page": "1",
+                "rows": "500"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.task_flight_list_json = requests.post(url=self.task_flight_list_url, data=data, headers=header).json()
+        except Exception:
+            self.task_flight_list_json = None
+        #with open('./temp/task_flight_list_json/fl{}.json'.format(int(time.time())), 'w') as f:
+            #json.dump(self.task_flight_list_json, f, indent=4)
+
+        return self.task_flight_list_json
+
+
+    def request_task_filght_third_list(self, flightDate:str, cookie,bc:str):   #需要自动逻辑白班夜班
+        data = {"airportCode": "ZUTF",
+                "ddate": flightDate,
+                "notView":"",
+                "baseCode": "TF01",
+                "isThird": "Y",
+                "actype1":"",
+                "aclocArea1": "()",
+                "tasktype1": "()",
+                "shift":bc,
+                "tasktype":"",
+                "actype": "(A319|A320|A321|B737NG|B737MAX|C919)",
+                "aclocArea":"",
+                "isshiftex":"",
+                "repush":"",
+                "page": "1",
+                "rows": "500"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.task_filght_third_list = requests.post(url=self.task_filght_third_list_url, data=data, headers=header).json()
+        except Exception:
+            self.task_filght_third_list = None
+        #with open('./temp/task_filght_third_list/fl{}.json'.format(int(time.time())), 'w') as f:
+        #    json.dump(self.task_filght_third_list, f, indent=4)
+        return self.task_filght_third_list
+
+    def request_LM_TASK_ARCHIVE_LIST(self, flightDate:str, cookie):   #需要自动逻辑白班夜班
+        startdatePlStart=flightDate+" 00:00:00"
+        flightDate2=(datetime.datetime.strptime(flightDate, "%Y%m%d")+datetime.timedelta(days=1)).strftime("%Y%m%d")
+        startdatePlEnd=flightDate2+" 09:00:00"
+        data = {"startdatePlStart": startdatePlStart,
+                "startdatePlEnd": startdatePlEnd,
+                "airportCode":'ZUTF',
+                "taskTypeDefault": "LM",
+                "actype1": '(A319|A320|A321)',
+                "actype": "A319,A320,A321",
+                "baseCode": "TF01",
+                "page":"1",
+                "rows": "500"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01","Cookie": cookie}
+        try:
+            self.task_LM_TASK_ARCHIVE_LIST = requests.post(url=self.LM_TASK_ARCHIVE_LIST, data=data, headers=header).json()
+        except Exception:
+            self.task_LM_TASK_ARCHIVE_LIST = None
+        #with open('./temp/task_LM_FLIGHT_SEARCH_LIST/fl{}.json'.format(int(time.time())), 'w') as f:
+        #    json.dump(self.task_LM_FLIGHT_SEARCH_LIST, f, indent=4)
+        return self.task_LM_TASK_ARCHIVE_LIST
+
+    def request_LM_FLIGHT_SEARCH_LIST(self, flightDate:str, cookie):   #需要自动逻辑白班夜班
+        data = {"base4code": "ZUTF",
+                "flightDate": flightDate,
+                "flightDate1":flightDate,
+                "jcType": "",
+                "actype1": '(A319|A320|A321)',
+                "dep_4code": "",
+                "arr_4code": "",
+                "acno":'',
+                "actype": "A319,A320,A321",
+                "flightNo":"",
+                "notView":"",
+                "page":"1",
+                "onlyAf":"",
+                "rows": "500"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01","Cookie": cookie}
+        try:
+            self.task_LM_FLIGHT_SEARCH_LIST = requests.post(url=self.LM_FLIGHT_SEARCH_LIST, data=data, headers=header).json()
+        except Exception:
+            self.task_LM_FLIGHT_SEARCH_LIST = None
+        #with open('./temp/task_LM_FLIGHT_SEARCH_LIST/fl{}.json'.format(int(time.time())), 'w') as f:
+        #    json.dump(self.task_LM_FLIGHT_SEARCH_LIST, f, indent=4)
+        return self.task_LM_FLIGHT_SEARCH_LIST
+
+    def request_filght_list(self, flightDate:str, cookie):
+        data = {"base4code": "ZUTF",
+                "flightDate": flightDate,#2023-06-02
+                "tasktype": "",
+                "notView": "",
+                "jcType": "",
+                "actype1": "(A319|A320|A321)",
+                "actype": "A319,A320,A321",
+                "acno": "",
+                "dep_4code": "",
+                "arr_4code": "",
+                "flightNo": "",
+                "repush": ""
+
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.flight_list_json = requests.post(url=self.flight_list_url, data=data, headers=header).json()
+        except Exception:
+            self.flight_list_json = None
+        #with open('./temp/filght_list/fl{}.json'.format(int(time.time())), 'w') as f:
+        #    json.dump(self.flight_list_json, f, indent=4)
+        return self.flight_list_json
+
+
+    def request_LM_TSK_HANDOVER(self,dict:dict,cookie):
+        data = {
+                "taskids": dict["taskid"],
+                "tasksts": dict["sts"],  # 必须,可能需要修改,不知道影响不
+                "FunctionCode": "LM_TSK_HANDOVER"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.LM_TSK_HANDOVER = requests.post(url=self.LM_TSK_HANDOVER_url, data=data, headers=header).json()
+            #print(self.LM_TSK_HANDOVER)
+        except Exception:
+            self.LM_TSK_HANDOVER = None
+        return self.LM_TSK_HANDOVER
+
+    def request_LM_TSK_DINGDONG(self,dict:dict,cookie):
+        data = {"tasksts": "1",  # 必须
+                "taskid": "{}".format(dict["taskid"]),
+                "acno": dict["acno"],
+                "actype": dict["actype"],
+                "tasktype": dict["tasktype"],
+                "tatd": dict["tatd"],
+                "msgInfo": dict["msgInfo"],
+                "bay": dict["bay"],
+                "wxemp": dict["wxemp"],  # 必须dict["wxemp"]
+                "fxemp": dict["fxemp"],
+                "wx": dict["wx"],
+                "fx": dict["fx"],
+                "ecsj": dict["ecsj"],
+                "ecsjEmp": "",
+                "FunctionCode": "LM_TSK_DINGDONG"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.LM_TSK_DINGDONG = requests.post(url=self.LM_TSK_DINGDONG_url, data=data, headers=header).json()
+        except Exception:
+            self.LM_TSK_DINGDONG = None
+        return self.LM_TSK_DINGDONG
+    def request_flight_third_list(self, flightDate: str, cookie):
+        data = {"base4code": "ZUTF",
+                "flightDate": flightDate,
+                "flightDateStart": flightDate,
+                "tasktype": "",
+                "notView": "",
+                "isThird":"Y",
+                "actype1": "(21N|319|320|321|32N|332|738|73G|A21N|A319|A319|A320|A321|A32N|A738|A73G|AZZZ|B737|C919)",
+                "actype": "B737NG,B737MAX,A319,A320,A321,C919"
+                #"actype": "A319%2CA320%2CA321%2CB737MAX%2CB737NG"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.flight_third_list = requests.post(url=self.flight_list_third_url, data=data, headers=header).json()
+        except Exception:
+            self.flight_third_list = None
+        #with open('./temp/filght_list/fl{}.json'.format(int(time.time())), 'w') as f:
+        #    json.dump(self.flight_third_list, f, indent=4)
+        return self.flight_third_list
+
+    def request_LM_TSK_SURE_PG(self,dict:dict,cookie):
+        empNos = dict["empNos"]
+        taskid = dict["taskid"]
+        type = dict["type"]
+        shiftDate = dict["shiftDate"]
+        shift = dict["shift"]
+
+        data = {"empNos": empNos,
+                "taskid": taskid,
+                "type": type,                 #ECSJ 二次送机  WX  FX
+                "shiftDate": shiftDate,                   #夜班航前需要前一天
+                "shift": shift,
+                "FunctionCode": "LM_TSK_SURE_PG"
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            #print(data)
+            self.LM_TSK_SURE_PG = requests.post(url=self.LM_TSK_SURE_PG_url, data=data, headers=header).json()
+            #print(self.LM_TSK_SURE_PG )
+        except Exception:
+            self.LM_TSK_SURE_PG = None
+        return self.LM_TSK_SURE_PG
+
+    def request_LM_TSK_EMP_PGLIST(self,taskid:str,shiftDate:str,shift:str,cookie):
+        data = {"flightDate": shiftDate,
+                "shift": shift,
+                "type": "WX",
+                "taskid":taskid,
+                "wx": "wx",
+                "baseCode": "TF01",       #EMP_NO,NAME,MAINLY_ROLE
+                "deptNo": "",
+                "fx": "fx",
+                }
+        header = {"Accept": "application/json, text/javascript, */*; q=0.01",
+                  "Cookie": cookie}
+        try:
+            self.LM_TSK_EMP_PGLIST = requests.post(url=self.LM_TSK_EMP_PGLIST_url, data=data, headers=header).json()
+        except Exception:
+            self.LM_TSK_EMP_PGLIST = None
+        #with open('./temp/LM_TSK_EMP_PGLIST/fl{}.json'.format(int(time.time())), 'w') as f:
+        #    json.dump(self.LM_TSK_EMP_PGLIST, f, indent=4)
+        return self.LM_TSK_EMP_PGLIST
+
+
+
+if __name__ == '__main__':
+    fl = flight_list()
+    #fl.start()
+    nowDay = datetime.datetime.now().replace(microsecond=0)
+    nowDayStr = nowDay.strftime("%Y-%m-%d")
+

File diff suppressed because it is too large
+ 16 - 0
QTMainWindow.py


+ 343 - 0
UI/1231.py

@@ -0,0 +1,343 @@
+# Form implementation generated from reading ui file '1231.ui'
+#
+# Created by: PyQt6 UI code generator 6.5.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_Form(object):
+    def setupUi(self, Form):
+        Form.setObjectName("Form")
+        Form.resize(1687, 846)
+        self.gridLayout = QtWidgets.QGridLayout(Form)
+        self.gridLayout.setObjectName("gridLayout")
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.dateEdit = QtWidgets.QDateEdit(parent=Form)
+        self.dateEdit.setMinimumSize(QtCore.QSize(130, 0))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.dateEdit.setFont(font)
+        self.dateEdit.setObjectName("dateEdit")
+        self.horizontalLayout.addWidget(self.dateEdit)
+        self.pushButton = QtWidgets.QPushButton(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.pushButton.setFont(font)
+        self.pushButton.setObjectName("pushButton")
+        self.horizontalLayout.addWidget(self.pushButton)
+        self.radioButtonDay = QtWidgets.QRadioButton(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.radioButtonDay.setFont(font)
+        self.radioButtonDay.setObjectName("radioButtonDay")
+        self.horizontalLayout.addWidget(self.radioButtonDay)
+        self.radioButtonNight = QtWidgets.QRadioButton(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.radioButtonNight.setFont(font)
+        self.radioButtonNight.setObjectName("radioButtonNight")
+        self.horizontalLayout.addWidget(self.radioButtonNight)
+        self.horizontalLayout.setStretch(0, 1)
+        self.gridLayout.addLayout(self.horizontalLayout, 0, 3, 1, 1)
+        self.verticalLayout = QtWidgets.QVBoxLayout()
+        self.verticalLayout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.tableWidgetFlight = QtWidgets.QTableWidget(parent=Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.tableWidgetFlight.sizePolicy().hasHeightForWidth())
+        self.tableWidgetFlight.setSizePolicy(sizePolicy)
+        self.tableWidgetFlight.setMouseTracking(True)
+        self.tableWidgetFlight.setTabletTracking(True)
+        self.tableWidgetFlight.setAcceptDrops(True)
+        self.tableWidgetFlight.setDragDropMode(QtWidgets.QAbstractItemView.DragDropMode.DropOnly)
+        self.tableWidgetFlight.setDefaultDropAction(QtCore.Qt.DropAction.CopyAction)
+        self.tableWidgetFlight.setObjectName("tableWidgetFlight")
+        self.tableWidgetFlight.setColumnCount(0)
+        self.tableWidgetFlight.setRowCount(0)
+        self.verticalLayout.addWidget(self.tableWidgetFlight)
+        self.gridLayout.addLayout(self.verticalLayout, 2, 1, 1, 1)
+        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_5.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+        self.horizontalLayout_5.setContentsMargins(-1, 10, -1, -1)
+        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
+        self.label = QtWidgets.QLabel(parent=Form)
+        self.label.setMaximumSize(QtCore.QSize(150, 19))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label.setFont(font)
+        self.label.setObjectName("label")
+        self.horizontalLayout_5.addWidget(self.label)
+        self.label_5 = QtWidgets.QLabel(parent=Form)
+        self.label_5.setMaximumSize(QtCore.QSize(180, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_5.setFont(font)
+        self.label_5.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.UpArrowCursor))
+        self.label_5.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight)
+        self.label_5.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
+        self.label_5.setObjectName("label_5")
+        self.horizontalLayout_5.addWidget(self.label_5)
+        self.lineEdit_flight = QtWidgets.QLineEdit(parent=Form)
+        self.lineEdit_flight.setMaximumSize(QtCore.QSize(100, 19))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.lineEdit_flight.setFont(font)
+        self.lineEdit_flight.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.IBeamCursor))
+        self.lineEdit_flight.setObjectName("lineEdit_flight")
+        self.horizontalLayout_5.addWidget(self.lineEdit_flight)
+        self.pushbutton_searchflight = QtWidgets.QPushButton(parent=Form)
+        self.pushbutton_searchflight.setMaximumSize(QtCore.QSize(65, 20))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.pushbutton_searchflight.setFont(font)
+        self.pushbutton_searchflight.setCheckable(False)
+        self.pushbutton_searchflight.setObjectName("pushbutton_searchflight")
+        self.horizontalLayout_5.addWidget(self.pushbutton_searchflight)
+        self.checkBox_3 = QtWidgets.QCheckBox(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.checkBox_3.setFont(font)
+        self.checkBox_3.setLayoutDirection(QtCore.Qt.LayoutDirection.RightToLeft)
+        self.checkBox_3.setObjectName("checkBox_3")
+        self.horizontalLayout_5.addWidget(self.checkBox_3)
+        self.checkBox = QtWidgets.QCheckBox(parent=Form)
+        self.checkBox.setMaximumSize(QtCore.QSize(120, 19))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.checkBox.setFont(font)
+        self.checkBox.setLayoutDirection(QtCore.Qt.LayoutDirection.RightToLeft)
+        self.checkBox.setAutoRepeatDelay(300)
+        self.checkBox.setObjectName("checkBox")
+        self.horizontalLayout_5.addWidget(self.checkBox)
+        self.checkBox_2 = QtWidgets.QCheckBox(parent=Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(7)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.checkBox_2.sizePolicy().hasHeightForWidth())
+        self.checkBox_2.setSizePolicy(sizePolicy)
+        self.checkBox_2.setMaximumSize(QtCore.QSize(120, 16777215))
+        self.checkBox_2.setSizeIncrement(QtCore.QSize(0, 0))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.checkBox_2.setFont(font)
+        self.checkBox_2.setLayoutDirection(QtCore.Qt.LayoutDirection.RightToLeft)
+        self.checkBox_2.setObjectName("checkBox_2")
+        self.horizontalLayout_5.addWidget(self.checkBox_2)
+        self.gridLayout.addLayout(self.horizontalLayout_5, 0, 1, 1, 1)
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_2.setSpacing(5)
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.label_6 = QtWidgets.QLabel(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_6.setFont(font)
+        self.label_6.setObjectName("label_6")
+        self.horizontalLayout_2.addWidget(self.label_6)
+        self.label_username = QtWidgets.QLabel(parent=Form)
+        self.label_username.setMinimumSize(QtCore.QSize(8, 0))
+        self.label_username.setMaximumSize(QtCore.QSize(100, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_username.setFont(font)
+        self.label_username.setObjectName("label_username")
+        self.horizontalLayout_2.addWidget(self.label_username)
+        self.label_10 = QtWidgets.QLabel(parent=Form)
+        self.label_10.setMinimumSize(QtCore.QSize(55, 0))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_10.setFont(font)
+        self.label_10.setObjectName("label_10")
+        self.horizontalLayout_2.addWidget(self.label_10)
+        self.label_11 = QtWidgets.QLabel(parent=Form)
+        self.label_11.setMinimumSize(QtCore.QSize(45, 0))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_11.setFont(font)
+        self.label_11.setObjectName("label_11")
+        self.horizontalLayout_2.addWidget(self.label_11)
+        self.horizontalLayout_2.setStretch(0, 1)
+        self.horizontalLayout_2.setStretch(1, 4)
+        self.gridLayout.addLayout(self.horizontalLayout_2, 0, 2, 1, 1)
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_2.setSpacing(0)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+        self.label_2 = QtWidgets.QLabel(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_2.setFont(font)
+        self.label_2.setObjectName("label_2")
+        self.horizontalLayout_3.addWidget(self.label_2)
+        self.label_7 = QtWidgets.QLabel(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_7.setFont(font)
+        self.label_7.setObjectName("label_7")
+        self.horizontalLayout_3.addWidget(self.label_7)
+        self.lineEdit_people = QtWidgets.QLineEdit(parent=Form)
+        self.lineEdit_people.setMaximumSize(QtCore.QSize(70, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.lineEdit_people.setFont(font)
+        self.lineEdit_people.setObjectName("lineEdit_people")
+        self.horizontalLayout_3.addWidget(self.lineEdit_people)
+        self.pushButton_searchpeople = QtWidgets.QPushButton(parent=Form)
+        self.pushButton_searchpeople.setMaximumSize(QtCore.QSize(40, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.pushButton_searchpeople.setFont(font)
+        self.pushButton_searchpeople.setObjectName("pushButton_searchpeople")
+        self.horizontalLayout_3.addWidget(self.pushButton_searchpeople)
+        self.horizontalLayout_3.setStretch(0, 4)
+        self.verticalLayout_2.addLayout(self.horizontalLayout_3)
+        self.tableWidgetPerson = QtWidgets.QTableWidget(parent=Form)
+        self.tableWidgetPerson.setMouseTracking(True)
+        self.tableWidgetPerson.setTabletTracking(True)
+        self.tableWidgetPerson.setDragEnabled(True)
+        self.tableWidgetPerson.setDragDropMode(QtWidgets.QAbstractItemView.DragDropMode.DragOnly)
+        self.tableWidgetPerson.setDefaultDropAction(QtCore.Qt.DropAction.IgnoreAction)
+        self.tableWidgetPerson.setObjectName("tableWidgetPerson")
+        self.tableWidgetPerson.setColumnCount(0)
+        self.tableWidgetPerson.setRowCount(0)
+        self.verticalLayout_2.addWidget(self.tableWidgetPerson)
+        self.gridLayout.addLayout(self.verticalLayout_2, 2, 2, 1, 1)
+        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_3.setObjectName("verticalLayout_3")
+        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_4.setObjectName("verticalLayout_4")
+        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_4.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+        self.label_3 = QtWidgets.QLabel(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_3.setFont(font)
+        self.label_3.setObjectName("label_3")
+        self.horizontalLayout_4.addWidget(self.label_3)
+        self.label_8 = QtWidgets.QLabel(parent=Form)
+        self.label_8.setMaximumSize(QtCore.QSize(40, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_8.setFont(font)
+        self.label_8.setObjectName("label_8")
+        self.horizontalLayout_4.addWidget(self.label_8)
+        self.lineEdit_change = QtWidgets.QLineEdit(parent=Form)
+        self.lineEdit_change.setMaximumSize(QtCore.QSize(70, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.lineEdit_change.setFont(font)
+        self.lineEdit_change.setObjectName("lineEdit_change")
+        self.horizontalLayout_4.addWidget(self.lineEdit_change)
+        self.pushButton_searchchange = QtWidgets.QPushButton(parent=Form)
+        self.pushButton_searchchange.setMaximumSize(QtCore.QSize(40, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.pushButton_searchchange.setFont(font)
+        self.pushButton_searchchange.setObjectName("pushButton_searchchange")
+        self.horizontalLayout_4.addWidget(self.pushButton_searchchange)
+        self.pushButtonAddPG = QtWidgets.QPushButton(parent=Form)
+        self.pushButtonAddPG.setMaximumSize(QtCore.QSize(55, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.pushButtonAddPG.setFont(font)
+        self.pushButtonAddPG.setObjectName("pushButtonAddPG")
+        self.horizontalLayout_4.addWidget(self.pushButtonAddPG)
+        self.horizontalLayout_4.setStretch(0, 4)
+        self.horizontalLayout_4.setStretch(4, 1)
+        self.verticalLayout_4.addLayout(self.horizontalLayout_4)
+        self.tableWidget = QtWidgets.QTableWidget(parent=Form)
+        self.tableWidget.setEnabled(True)
+        self.tableWidget.setMaximumSize(QtCore.QSize(16777215, 16777215))
+        self.tableWidget.setMouseTracking(True)
+        self.tableWidget.setObjectName("tableWidget")
+        self.tableWidget.setColumnCount(0)
+        self.tableWidget.setRowCount(0)
+        self.verticalLayout_4.addWidget(self.tableWidget)
+        self.verticalLayout_5 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_5.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+        self.verticalLayout_5.setObjectName("verticalLayout_5")
+        self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_6.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
+        self.label_4 = QtWidgets.QLabel(parent=Form)
+        self.label_4.setMinimumSize(QtCore.QSize(0, 19))
+        self.label_4.setMaximumSize(QtCore.QSize(16777215, 19))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_4.setFont(font)
+        self.label_4.setObjectName("label_4")
+        self.horizontalLayout_6.addWidget(self.label_4)
+        self.label_9 = QtWidgets.QLabel(parent=Form)
+        self.label_9.setMaximumSize(QtCore.QSize(40, 50))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_9.setFont(font)
+        self.label_9.setObjectName("label_9")
+        self.horizontalLayout_6.addWidget(self.label_9)
+        self.lineEdit_log = QtWidgets.QLineEdit(parent=Form)
+        self.lineEdit_log.setMaximumSize(QtCore.QSize(70, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.lineEdit_log.setFont(font)
+        self.lineEdit_log.setObjectName("lineEdit_log")
+        self.horizontalLayout_6.addWidget(self.lineEdit_log)
+        self.pushButton_searchlog = QtWidgets.QPushButton(parent=Form)
+        self.pushButton_searchlog.setMaximumSize(QtCore.QSize(50, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.pushButton_searchlog.setFont(font)
+        self.pushButton_searchlog.setObjectName("pushButton_searchlog")
+        self.horizontalLayout_6.addWidget(self.pushButton_searchlog)
+        self.verticalLayout_5.addLayout(self.horizontalLayout_6)
+        self.tableWidgetLOG = QtWidgets.QTableWidget(parent=Form)
+        self.tableWidgetLOG.setMaximumSize(QtCore.QSize(16777215, 16777215))
+        self.tableWidgetLOG.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
+        self.tableWidgetLOG.setMouseTracking(True)
+        self.tableWidgetLOG.setObjectName("tableWidgetLOG")
+        self.tableWidgetLOG.setColumnCount(0)
+        self.tableWidgetLOG.setRowCount(0)
+        self.verticalLayout_5.addWidget(self.tableWidgetLOG)
+        self.verticalLayout_4.addLayout(self.verticalLayout_5)
+        self.verticalLayout_4.setStretch(1, 10)
+        self.verticalLayout_4.setStretch(2, 3)
+        self.verticalLayout_3.addLayout(self.verticalLayout_4)
+        self.gridLayout.addLayout(self.verticalLayout_3, 2, 3, 1, 1)
+        self.gridLayout.setColumnStretch(1, 40)
+
+        self.retranslateUi(Form)
+        QtCore.QMetaObject.connectSlotsByName(Form)
+
+    def retranslateUi(self, Form):
+        _translate = QtCore.QCoreApplication.translate
+        Form.setWindowTitle(_translate("Form", "Form"))
+        self.pushButton.setText(_translate("Form", "选择"))
+        self.radioButtonDay.setText(_translate("Form", "白"))
+        self.radioButtonNight.setText(_translate("Form", "夜"))
+        self.label.setText(_translate("Form", "航班信息"))
+        self.label_5.setText(_translate("Form", "查询关键词:"))
+        self.pushbutton_searchflight.setText(_translate("Form", "查询"))
+        self.checkBox_3.setText(_translate("Form", "进港监控模式"))
+        self.checkBox.setText(_translate("Form", "短停勤务分离显示"))
+        self.checkBox_2.setText(_translate("Form", "隐藏保障结束航班"))
+        self.label_6.setText(_translate("Form", "当前用户:"))
+        self.label_username.setText(_translate("Form", "无"))
+        self.label_10.setText(_translate("Form", "服务器状态:"))
+        self.label_11.setText(_translate("Form", "无"))
+        self.label_2.setText(_translate("Form", "人员信息"))
+        self.label_7.setText(_translate("Form", "关键词:"))
+        self.pushButton_searchpeople.setText(_translate("Form", "查询"))
+        self.label_3.setText(_translate("Form", "航班变化"))
+        self.label_8.setText(_translate("Form", "关键词:"))
+        self.pushButton_searchchange.setText(_translate("Form", "查询"))
+        self.pushButtonAddPG.setText(_translate("Form", "添加待办"))
+        self.label_4.setText(_translate("Form", "日志信息"))
+        self.label_9.setText(_translate("Form", "关键词:"))
+        self.pushButton_searchlog.setText(_translate("Form", "查询"))

+ 657 - 0
UI/1231.ui

@@ -0,0 +1,657 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1687</width>
+    <height>846</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" columnstretch="0,40,0,0">
+   <item row="0" column="3">
+    <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0,0,0">
+     <item>
+      <widget class="QDateEdit" name="dateEdit">
+       <property name="minimumSize">
+        <size>
+         <width>130</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pushButton">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>选择</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QRadioButton" name="radioButtonDay">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>白</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QRadioButton" name="radioButtonNight">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>夜</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="1">
+    <layout class="QVBoxLayout" name="verticalLayout" stretch="0">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <item>
+      <widget class="QTableWidget" name="tableWidgetFlight">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
+       <property name="tabletTracking">
+        <bool>true</bool>
+       </property>
+       <property name="acceptDrops">
+        <bool>true</bool>
+       </property>
+       <property name="dragDropMode">
+        <enum>QAbstractItemView::DropOnly</enum>
+       </property>
+       <property name="defaultDropAction">
+        <enum>Qt::CopyAction</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <property name="topMargin">
+      <number>10</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="maximumSize">
+        <size>
+         <width>150</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>航班信息</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_5">
+       <property name="maximumSize">
+        <size>
+         <width>180</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="cursor">
+        <cursorShape>UpArrowCursor</cursorShape>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>查询关键词:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="lineEdit_flight">
+       <property name="maximumSize">
+        <size>
+         <width>100</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="cursor">
+        <cursorShape>IBeamCursor</cursorShape>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pushbutton_searchflight">
+       <property name="maximumSize">
+        <size>
+         <width>65</width>
+         <height>20</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>查询</string>
+       </property>
+       <property name="checkable">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBox_3">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>进港监控模式</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBox">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>短停勤务分离显示</string>
+       </property>
+       <property name="autoRepeatDelay">
+        <number>300</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBox_2">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+         <horstretch>7</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="sizeIncrement">
+        <size>
+         <width>0</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>隐藏保障结束航班</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="1,4,0,0">
+     <property name="spacing">
+      <number>5</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label_6">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>当前用户:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_username">
+       <property name="minimumSize">
+        <size>
+         <width>8</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>100</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>无</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_10">
+       <property name="minimumSize">
+        <size>
+         <width>55</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>服务器状态:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_11">
+       <property name="minimumSize">
+        <size>
+         <width>45</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>无</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="2">
+    <layout class="QVBoxLayout" name="verticalLayout_2">
+     <property name="spacing">
+      <number>0</number>
+     </property>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="4,0,0,0">
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="font">
+          <font>
+           <family>黑体</family>
+          </font>
+         </property>
+         <property name="text">
+          <string>人员信息</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_7">
+         <property name="font">
+          <font>
+           <family>黑体</family>
+          </font>
+         </property>
+         <property name="text">
+          <string>关键词:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEdit_people">
+         <property name="maximumSize">
+          <size>
+           <width>70</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="font">
+          <font>
+           <family>黑体</family>
+          </font>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pushButton_searchpeople">
+         <property name="maximumSize">
+          <size>
+           <width>40</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="font">
+          <font>
+           <family>黑体</family>
+          </font>
+         </property>
+         <property name="text">
+          <string>查询</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QTableWidget" name="tableWidgetPerson">
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
+       <property name="tabletTracking">
+        <bool>true</bool>
+       </property>
+       <property name="dragEnabled">
+        <bool>true</bool>
+       </property>
+       <property name="dragDropMode">
+        <enum>QAbstractItemView::DragOnly</enum>
+       </property>
+       <property name="defaultDropAction">
+        <enum>Qt::IgnoreAction</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="3">
+    <layout class="QVBoxLayout" name="verticalLayout_3" stretch="0">
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout_4" stretch="0,10,3">
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_4" stretch="4,0,0,0,1">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetMaximumSize</enum>
+         </property>
+         <item>
+          <widget class="QLabel" name="label_3">
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+           <property name="text">
+            <string>航班变化</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLabel" name="label_8">
+           <property name="maximumSize">
+            <size>
+             <width>40</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+           <property name="text">
+            <string>关键词:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="lineEdit_change">
+           <property name="maximumSize">
+            <size>
+             <width>70</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pushButton_searchchange">
+           <property name="maximumSize">
+            <size>
+             <width>40</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+           <property name="text">
+            <string>查询</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pushButtonAddPG">
+           <property name="maximumSize">
+            <size>
+             <width>55</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+           <property name="text">
+            <string>添加待办</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <widget class="QTableWidget" name="tableWidget">
+         <property name="enabled">
+          <bool>true</bool>
+         </property>
+         <property name="maximumSize">
+          <size>
+           <width>16777215</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="mouseTracking">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_5" stretch="0,0">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetDefaultConstraint</enum>
+         </property>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_6">
+           <property name="sizeConstraint">
+            <enum>QLayout::SetDefaultConstraint</enum>
+           </property>
+           <item>
+            <widget class="QLabel" name="label_4">
+             <property name="minimumSize">
+              <size>
+               <width>0</width>
+               <height>19</height>
+              </size>
+             </property>
+             <property name="maximumSize">
+              <size>
+               <width>16777215</width>
+               <height>19</height>
+              </size>
+             </property>
+             <property name="font">
+              <font>
+               <family>黑体</family>
+              </font>
+             </property>
+             <property name="text">
+              <string>日志信息</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLabel" name="label_9">
+             <property name="maximumSize">
+              <size>
+               <width>40</width>
+               <height>50</height>
+              </size>
+             </property>
+             <property name="font">
+              <font>
+               <family>黑体</family>
+              </font>
+             </property>
+             <property name="text">
+              <string>关键词:</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLineEdit" name="lineEdit_log">
+             <property name="maximumSize">
+              <size>
+               <width>70</width>
+               <height>16777215</height>
+              </size>
+             </property>
+             <property name="font">
+              <font>
+               <family>黑体</family>
+              </font>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QPushButton" name="pushButton_searchlog">
+             <property name="maximumSize">
+              <size>
+               <width>50</width>
+               <height>16777215</height>
+              </size>
+             </property>
+             <property name="font">
+              <font>
+               <family>黑体</family>
+              </font>
+             </property>
+             <property name="text">
+              <string>查询</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <widget class="QTableWidget" name="tableWidgetLOG">
+           <property name="maximumSize">
+            <size>
+             <width>16777215</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="cursor" stdset="0">
+            <cursorShape>ArrowCursor</cursorShape>
+           </property>
+           <property name="mouseTracking">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 18 - 0
UI/AddPG.py


+ 97 - 0
UI/AddPG.ui

@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FormAddPG</class>
+ <widget class="QWidget" name="FormAddPG">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>360</width>
+    <height>160</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>360</width>
+    <height>140</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>360</width>
+    <height>160</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="2" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout_3">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetMaximumSize</enum>
+     </property>
+     <item>
+      <widget class="QLabel" name="label_2">
+       <property name="maximumSize">
+        <size>
+         <width>50</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>提醒时间</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QDateTimeEdit" name="dateTimeEdit">
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+       <property name="calendarPopup">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="8" column="0">
+    <widget class="QPushButton" name="pushButton">
+     <property name="text">
+      <string>提交</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <property name="sizeConstraint">
+        <enum>QLayout::SetFixedSize</enum>
+       </property>
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>待办内容</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QTextEdit" name="textEdit"/>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 18 - 0
UI/AddPG2.py


+ 0 - 0
UI/__init__.py


+ 0 - 0
UI/_init_.py


File diff suppressed because it is too large
+ 18 - 0
UI/addFlight.py


+ 146 - 0
UI/addFlight2.py

@@ -0,0 +1,146 @@
+# Form implementation generated from reading ui file 'addFlight2.ui'
+#
+# Created by: PyQt6 UI code generator 6.5.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtWidgets
+
+
+class Ui_FormAdduser(object):
+    def setupUi(self, FormAdduser):
+        FormAdduser.setObjectName("FormAdduser")
+        FormAdduser.resize(199, 317)
+        FormAdduser.setMaximumSize(QtCore.QSize(199, 317))
+        self.gridLayout = QtWidgets.QGridLayout(FormAdduser)
+        self.gridLayout.setObjectName("gridLayout")
+        self.verticalLayout = QtWidgets.QVBoxLayout()
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
+        self.label_10 = QtWidgets.QLabel(parent=FormAdduser)
+        self.label_10.setStyleSheet("color: rgb(255, 0, 0);\n"
+"font: 9pt \"黑体\";")
+        self.label_10.setTextFormat(QtCore.Qt.TextFormat.RichText)
+        self.label_10.setScaledContents(False)
+        self.label_10.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+        self.label_10.setWordWrap(True)
+        self.label_10.setObjectName("label_10")
+        self.horizontalLayout_6.addWidget(self.label_10)
+        self.verticalLayout.addLayout(self.horizontalLayout_6)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.label_3 = QtWidgets.QLabel(parent=FormAdduser)
+        self.label_3.setMaximumSize(QtCore.QSize(50, 16777215))
+        self.label_3.setObjectName("label_3")
+        self.horizontalLayout.addWidget(self.label_3)
+        self.comboBox = QtWidgets.QComboBox(parent=FormAdduser)
+        self.comboBox.setMaximumSize(QtCore.QSize(150, 16777215))
+        self.comboBox.setObjectName("comboBox")
+        self.horizontalLayout.addWidget(self.comboBox)
+        self.verticalLayout.addLayout(self.horizontalLayout)
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.label_2 = QtWidgets.QLabel(parent=FormAdduser)
+        self.label_2.setMaximumSize(QtCore.QSize(80, 16777215))
+        self.label_2.setObjectName("label_2")
+        self.horizontalLayout_2.addWidget(self.label_2)
+        self.lineEditPWD = QtWidgets.QLineEdit(parent=FormAdduser)
+        self.lineEditPWD.setMaximumSize(QtCore.QSize(150, 16777215))
+        self.lineEditPWD.setObjectName("lineEditPWD")
+        self.horizontalLayout_2.addWidget(self.lineEditPWD)
+        self.verticalLayout.addLayout(self.horizontalLayout_2)
+        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+        self.label = QtWidgets.QLabel(parent=FormAdduser)
+        self.label.setObjectName("label")
+        self.horizontalLayout_3.addWidget(self.label)
+        self.lineEditUser = QtWidgets.QLineEdit(parent=FormAdduser)
+        self.lineEditUser.setObjectName("lineEditUser")
+        self.horizontalLayout_3.addWidget(self.lineEditUser)
+        self.verticalLayout.addLayout(self.horizontalLayout_3)
+        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+        self.label_4 = QtWidgets.QLabel(parent=FormAdduser)
+        self.label_4.setObjectName("label_4")
+        self.horizontalLayout_4.addWidget(self.label_4)
+        self.lineEditPeople = QtWidgets.QLineEdit(parent=FormAdduser)
+        self.lineEditPeople.setObjectName("lineEditPeople")
+        self.horizontalLayout_4.addWidget(self.lineEditPeople)
+        self.verticalLayout.addLayout(self.horizontalLayout_4)
+        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
+        self.label_5 = QtWidgets.QLabel(parent=FormAdduser)
+        self.label_5.setObjectName("label_5")
+        self.horizontalLayout_5.addWidget(self.label_5)
+        self.lineEdit = QtWidgets.QLineEdit(parent=FormAdduser)
+        self.lineEdit.setObjectName("lineEdit")
+        self.horizontalLayout_5.addWidget(self.lineEdit)
+        self.verticalLayout.addLayout(self.horizontalLayout_5)
+        self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_7.setObjectName("horizontalLayout_7")
+        self.label_6 = QtWidgets.QLabel(parent=FormAdduser)
+        self.label_6.setMaximumSize(QtCore.QSize(45, 16777215))
+        self.label_6.setObjectName("label_6")
+        self.horizontalLayout_7.addWidget(self.label_6)
+        self.dateEdit = QtWidgets.QDateEdit(parent=FormAdduser)
+        self.dateEdit.setObjectName("dateEdit")
+        self.horizontalLayout_7.addWidget(self.dateEdit)
+        self.verticalLayout.addLayout(self.horizontalLayout_7)
+        self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_8.setObjectName("horizontalLayout_8")
+        self.label_7 = QtWidgets.QLabel(parent=FormAdduser)
+        self.label_7.setObjectName("label_7")
+        self.horizontalLayout_8.addWidget(self.label_7)
+        self.lineEdit_2 = QtWidgets.QLineEdit(parent=FormAdduser)
+        self.lineEdit_2.setObjectName("lineEdit_2")
+        self.horizontalLayout_8.addWidget(self.lineEdit_2)
+        self.verticalLayout.addLayout(self.horizontalLayout_8)
+        self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_10.setObjectName("horizontalLayout_10")
+        self.label_8 = QtWidgets.QLabel(parent=FormAdduser)
+        self.label_8.setEnabled(True)
+        self.label_8.setMaximumSize(QtCore.QSize(45, 16777215))
+        self.label_8.setObjectName("label_8")
+        self.horizontalLayout_10.addWidget(self.label_8)
+        self.dateTimeEdit = QtWidgets.QDateTimeEdit(parent=FormAdduser)
+        self.dateTimeEdit.setObjectName("dateTimeEdit")
+        self.horizontalLayout_10.addWidget(self.dateTimeEdit)
+        self.verticalLayout.addLayout(self.horizontalLayout_10)
+        self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_9.setObjectName("horizontalLayout_9")
+        self.label_9 = QtWidgets.QLabel(parent=FormAdduser)
+        self.label_9.setMaximumSize(QtCore.QSize(45, 16777215))
+        self.label_9.setObjectName("label_9")
+        self.horizontalLayout_9.addWidget(self.label_9)
+        self.dateTimeEdit_2 = QtWidgets.QDateTimeEdit(parent=FormAdduser)
+        self.dateTimeEdit_2.setObjectName("dateTimeEdit_2")
+        self.horizontalLayout_9.addWidget(self.dateTimeEdit_2)
+        self.verticalLayout.addLayout(self.horizontalLayout_9)
+        self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)
+        self.pushButton = QtWidgets.QPushButton(parent=FormAdduser)
+        self.pushButton.setObjectName("pushButton")
+        self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1)
+
+        self.retranslateUi(FormAdduser)
+        QtCore.QMetaObject.connectSlotsByName(FormAdduser)
+
+    def retranslateUi(self, FormAdduser):
+        _translate = QtCore.QCoreApplication.translate
+        FormAdduser.setWindowTitle(_translate("FormAdduser", "Form"))
+        self.label_10.setText(_translate("FormAdduser", "注意:人工添加请确认航班信息准确性,人工添加航班无法进行派工操作!无法自动获取航班状态!"))
+        self.label_3.setText(_translate("FormAdduser", "航班类型"))
+        self.label_2.setText(_translate("FormAdduser", "机    号"))
+        self.label.setText(_translate("FormAdduser", "发 动 机"))
+        self.label_4.setText(_translate("FormAdduser", "机    型"))
+        self.label_5.setText(_translate("FormAdduser", "航 班 号"))
+        self.label_6.setText(_translate("FormAdduser", "航班日期"))
+        self.dateEdit.setDisplayFormat(_translate("FormAdduser", "yyyy-M-d"))
+        self.label_7.setText(_translate("FormAdduser", "机    位"))
+        self.label_8.setText(_translate("FormAdduser", "预计到达"))
+        self.dateTimeEdit.setDisplayFormat(_translate("FormAdduser", "yyyy-M-d HH:mm:ss"))
+        self.label_9.setText(_translate("FormAdduser", "预计起飞"))
+        self.dateTimeEdit_2.setDisplayFormat(_translate("FormAdduser", "yyyy-M-d HH:mm:ss"))
+        self.pushButton.setText(_translate("FormAdduser", "提交"))

+ 250 - 0
UI/addFlight2.ui

@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FormAdduser</class>
+ <widget class="QWidget" name="FormAdduser">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>199</width>
+    <height>317</height>
+   </rect>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>199</width>
+    <height>317</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_6">
+       <item>
+        <widget class="QLabel" name="label_10">
+         <property name="styleSheet">
+          <string notr="true">color: rgb(255, 0, 0);
+font: 9pt &quot;黑体&quot;;</string>
+         </property>
+         <property name="text">
+          <string>注意:人工添加请确认航班信息准确性,人工添加航班无法进行派工操作!无法自动获取航班状态!</string>
+         </property>
+         <property name="textFormat">
+          <enum>Qt::RichText</enum>
+         </property>
+         <property name="scaledContents">
+          <bool>false</bool>
+         </property>
+         <property name="alignment">
+          <set>Qt::AlignCenter</set>
+         </property>
+         <property name="wordWrap">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QLabel" name="label_3">
+         <property name="maximumSize">
+          <size>
+           <width>50</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>航班类型</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QComboBox" name="comboBox">
+         <property name="maximumSize">
+          <size>
+           <width>150</width>
+           <height>16777215</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="maximumSize">
+          <size>
+           <width>80</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>机    号</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEditPWD">
+         <property name="maximumSize">
+          <size>
+           <width>150</width>
+           <height>16777215</height>
+          </size>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,0">
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>发 动 机</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEditUser"/>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_4">
+       <item>
+        <widget class="QLabel" name="label_4">
+         <property name="text">
+          <string>机    型</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEditPeople"/>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_5">
+       <item>
+        <widget class="QLabel" name="label_5">
+         <property name="text">
+          <string>航 班 号</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEdit"/>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_7">
+       <item>
+        <widget class="QLabel" name="label_6">
+         <property name="maximumSize">
+          <size>
+           <width>45</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>航班日期</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QDateEdit" name="dateEdit">
+         <property name="displayFormat">
+          <string>yyyy-MM-dd</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_8">
+       <item>
+        <widget class="QLabel" name="label_7">
+         <property name="text">
+          <string>机    位</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEdit_2"/>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_10">
+       <item>
+        <widget class="QLabel" name="label_8">
+         <property name="enabled">
+          <bool>true</bool>
+         </property>
+         <property name="maximumSize">
+          <size>
+           <width>45</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>预计到达</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QDateTimeEdit" name="dateTimeEdit">
+         <property name="displayFormat">
+          <string>yyyy-M-d HH:mm:ss</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_9">
+       <item>
+        <widget class="QLabel" name="label_9">
+         <property name="maximumSize">
+          <size>
+           <width>45</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>预计起飞</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QDateTimeEdit" name="dateTimeEdit_2">
+         <property name="displayFormat">
+          <string>yyyy-M-d HH:mm:ss</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0">
+    <widget class="QPushButton" name="pushButton">
+     <property name="text">
+      <string>提交</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 18 - 0
UI/addInfo.py


+ 42 - 0
UI/addInfo.ui

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FormAddinfo</class>
+ <widget class="QWidget" name="FormAddinfo">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>添加待办信息</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>提示信息</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QTextEdit" name="textEdit"/>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pushButton">
+       <property name="text">
+        <string>添加</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 18 - 0
UI/addloaclip.py


+ 78 - 0
UI/addloaclip2.ui

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Addloacalip</class>
+ <widget class="QWidget" name="Addloacalip">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>360</width>
+    <height>140</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>360</width>
+    <height>140</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>360</width>
+    <height>160</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="3" column="0">
+    <widget class="QPushButton" name="pushButton">
+     <property name="text">
+      <string>提交</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>IP地址</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEditIP"/>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_2">
+       <property name="maximumSize">
+        <size>
+         <width>16777215</width>
+         <height>20</height>
+        </size>
+       </property>
+       <property name="styleSheet">
+        <string notr="true">color: rgb(255, 0, 0);
+font: 9pt &quot;黑体&quot;;</string>
+       </property>
+       <property name="text">
+        <string>注意:若IP地址通过缓存获取,请在提交前确认IP电话地址</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 18 - 0
UI/addseverlipphone.py


File diff suppressed because it is too large
+ 18 - 0
UI/adduser.py


+ 100 - 0
UI/adduser.ui

@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FormAdduser</class>
+ <widget class="QWidget" name="FormAdduser">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>360</width>
+    <height>160</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>360</width>
+    <height>140</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>360</width>
+    <height>160</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>登录名</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEditUser"/>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="text">
+          <string>密   码</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEditPWD"/>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,2">
+       <item>
+        <widget class="QLabel" name="label_3">
+         <property name="text">
+          <string>权   限</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QComboBox" name="comboBox"/>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_4">
+       <item>
+        <widget class="QLabel" name="label_4">
+         <property name="text">
+          <string>使用人</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEditPeople"/>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0">
+    <widget class="QPushButton" name="pushButton">
+     <property name="text">
+      <string>提交</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 18 - 0
UI/amroLogin.py


File diff suppressed because it is too large
+ 18 - 0
UI/amroLogin2.py


+ 51 - 0
UI/amroLogin22.py

@@ -0,0 +1,51 @@
+# Form implementation generated from reading ui file 'amroLogin22.ui'
+#
+# Created by: PyQt6 UI code generator 6.5.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_amroLogin(object):
+    def setupUi(self, amroLogin):
+        amroLogin.setObjectName("amroLogin")
+        amroLogin.resize(360, 140)
+        amroLogin.setMinimumSize(QtCore.QSize(360, 140))
+        amroLogin.setMaximumSize(QtCore.QSize(360, 140))
+        self.gridLayout = QtWidgets.QGridLayout(amroLogin)
+        self.gridLayout.setObjectName("gridLayout")
+        self.lineEditUsername = QtWidgets.QLineEdit(parent=amroLogin)
+        self.lineEditUsername.setObjectName("lineEditUsername")
+        self.gridLayout.addWidget(self.lineEditUsername, 0, 1, 1, 1)
+        self.label = QtWidgets.QLabel(parent=amroLogin)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
+        self.lineEditPassword = QtWidgets.QLineEdit(parent=amroLogin)
+        self.lineEditPassword.setObjectName("lineEditPassword")
+        self.gridLayout.addWidget(self.lineEditPassword, 1, 1, 1, 1)
+        self.pushButton = QtWidgets.QPushButton(parent=amroLogin)
+        self.pushButton.setObjectName("pushButton")
+        self.gridLayout.addWidget(self.pushButton, 3, 1, 1, 1)
+        self.label_2 = QtWidgets.QLabel(parent=amroLogin)
+        self.label_2.setObjectName("label_2")
+        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
+        self.lineEdit = QtWidgets.QLineEdit(parent=amroLogin)
+        self.lineEdit.setObjectName("lineEdit")
+        self.gridLayout.addWidget(self.lineEdit, 2, 1, 1, 1)
+        self.label_3 = QtWidgets.QLabel(parent=amroLogin)
+        self.label_3.setObjectName("label_3")
+        self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
+
+        self.retranslateUi(amroLogin)
+        QtCore.QMetaObject.connectSlotsByName(amroLogin)
+
+    def retranslateUi(self, amroLogin):
+        _translate = QtCore.QCoreApplication.translate
+        amroLogin.setWindowTitle(_translate("amroLogin", "登录AMRO"))
+        self.label.setText(_translate("amroLogin", "工号"))
+        self.pushButton.setText(_translate("amroLogin", "登录"))
+        self.label_2.setText(_translate("amroLogin", "AMRO cookie"))
+        self.label_3.setText(_translate("amroLogin", "飞机排班token"))

+ 70 - 0
UI/amroLogin22.ui

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>amroLogin</class>
+ <widget class="QWidget" name="amroLogin">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>360</width>
+    <height>140</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>360</width>
+    <height>140</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>360</width>
+    <height>140</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>登录AMRO</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="1">
+    <widget class="QLineEdit" name="lineEditUsername"/>
+   </item>
+   <item row="0" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>工号</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QLineEdit" name="lineEditPassword"/>
+   </item>
+   <item row="3" column="1">
+    <widget class="QPushButton" name="pushButton">
+     <property name="text">
+      <string>登录</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string>AMRO cookie</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1">
+    <widget class="QLineEdit" name="lineEdit"/>
+   </item>
+   <item row="2" column="0">
+    <widget class="QLabel" name="label_3">
+     <property name="text">
+      <string>飞机排班token</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 18 - 0
UI/changeAuth.py


+ 132 - 0
UI/changeAuth.ui

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FormAdduser</class>
+ <widget class="QWidget" name="FormAdduser">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>360</width>
+    <height>160</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>360</width>
+    <height>140</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>360</width>
+    <height>160</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="maximumSize">
+          <size>
+           <width>33</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>用户名</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QComboBox" name="comboBox_2"/>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="maximumSize">
+          <size>
+           <width>35</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>使用人</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_5">
+         <property name="text">
+          <string>TextLabel</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,0">
+       <item>
+        <widget class="QLabel" name="label_3">
+         <property name="maximumSize">
+          <size>
+           <width>33</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>原权限</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_6">
+         <property name="text">
+          <string>TextLabel</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_4">
+       <item>
+        <widget class="QLabel" name="label_4">
+         <property name="maximumSize">
+          <size>
+           <width>33</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="text">
+          <string>新权限</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QComboBox" name="comboBox"/>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0">
+    <widget class="QPushButton" name="pushButton">
+     <property name="text">
+      <string>提交</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 18 - 0
UI/changePassword.py


+ 93 - 0
UI/changePassword.ui

@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FormAdduser</class>
+ <widget class="QWidget" name="FormAdduser">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>360</width>
+    <height>160</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>360</width>
+    <height>140</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>360</width>
+    <height>160</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="text">
+          <string>原 密 码</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEditold"/>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,0">
+       <item>
+        <widget class="QLabel" name="label_3">
+         <property name="text">
+          <string>新 密 码</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEditnew">
+         <property name="text">
+          <string/>
+         </property>
+         <property name="alignment">
+          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_4">
+       <item>
+        <widget class="QLabel" name="label_4">
+         <property name="text">
+          <string>确认密码</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEditnew2"/>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+   <item row="1" column="0">
+    <widget class="QPushButton" name="pushButton">
+     <property name="text">
+      <string>提交</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 19 - 0
UI/checkCalllist.py


File diff suppressed because it is too large
+ 18 - 0
UI/checkLoadSingal.py


+ 126 - 0
UI/checkLoadSingal.ui

@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" columnstretch="0,0">
+   <item row="2" column="1">
+    <layout class="QVBoxLayout" name="verticalLayout" stretch="0">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <item>
+      <widget class="QTableWidget" name="tableWidgetFlight">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
+       <property name="tabletTracking">
+        <bool>true</bool>
+       </property>
+       <property name="acceptDrops">
+        <bool>true</bool>
+       </property>
+       <property name="dragDropMode">
+        <enum>QAbstractItemView::DropOnly</enum>
+       </property>
+       <property name="defaultDropAction">
+        <enum>Qt::CopyAction</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="1" rowspan="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <property name="topMargin">
+      <number>10</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="maximumSize">
+        <size>
+         <width>50</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>查询人:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_3">
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_5">
+       <property name="maximumSize">
+        <size>
+         <width>180</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="cursor">
+        <cursorShape>UpArrowCursor</cursorShape>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>查询日期:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_2">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>50</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 19 - 0
UI/checkLogs.py


+ 92 - 0
UI/checkLogs2.py

@@ -0,0 +1,92 @@
+# Form implementation generated from reading ui file 'checkLogs2.ui'
+#
+# Created by: PyQt6 UI code generator 6.5.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_Form(object):
+    def setupUi(self, Form):
+        Form.setObjectName("Form")
+        Form.resize(1295, 794)
+        self.gridLayout = QtWidgets.QGridLayout(Form)
+        self.gridLayout.setObjectName("gridLayout")
+        self.verticalLayout = QtWidgets.QVBoxLayout()
+        self.verticalLayout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.tableWidgetFlight = QtWidgets.QTableWidget(parent=Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.tableWidgetFlight.sizePolicy().hasHeightForWidth())
+        self.tableWidgetFlight.setSizePolicy(sizePolicy)
+        self.tableWidgetFlight.setMouseTracking(True)
+        self.tableWidgetFlight.setTabletTracking(True)
+        self.tableWidgetFlight.setAcceptDrops(True)
+        self.tableWidgetFlight.setDragDropMode(QtWidgets.QAbstractItemView.DragDropMode.DropOnly)
+        self.tableWidgetFlight.setDefaultDropAction(QtCore.Qt.DropAction.CopyAction)
+        self.tableWidgetFlight.setObjectName("tableWidgetFlight")
+        self.tableWidgetFlight.setColumnCount(0)
+        self.tableWidgetFlight.setRowCount(0)
+        self.verticalLayout.addWidget(self.tableWidgetFlight)
+        self.gridLayout.addLayout(self.verticalLayout, 2, 1, 1, 1)
+        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_5.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+        self.horizontalLayout_5.setContentsMargins(-1, 10, -1, -1)
+        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
+        self.label = QtWidgets.QLabel(parent=Form)
+        self.label.setMaximumSize(QtCore.QSize(50, 19))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label.setFont(font)
+        self.label.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight)
+        self.label.setObjectName("label")
+        self.horizontalLayout_5.addWidget(self.label)
+        self.dateTimeEdit = QtWidgets.QDateTimeEdit(parent=Form)
+        self.dateTimeEdit.setMaximumSize(QtCore.QSize(120, 16777215))
+        self.dateTimeEdit.setCalendarPopup(True)
+        self.dateTimeEdit.setObjectName("dateTimeEdit")
+        self.horizontalLayout_5.addWidget(self.dateTimeEdit)
+        self.label_3 = QtWidgets.QLabel(parent=Form)
+        self.label_3.setMaximumSize(QtCore.QSize(50, 16777215))
+        self.label_3.setObjectName("label_3")
+        self.horizontalLayout_5.addWidget(self.label_3)
+        self.dateTimeEdit_2 = QtWidgets.QDateTimeEdit(parent=Form)
+        self.dateTimeEdit_2.setMaximumSize(QtCore.QSize(120, 16777215))
+        self.dateTimeEdit_2.setCalendarPopup(True)
+        self.dateTimeEdit_2.setObjectName("dateTimeEdit_2")
+        self.horizontalLayout_5.addWidget(self.dateTimeEdit_2)
+        self.label_4 = QtWidgets.QLabel(parent=Form)
+        self.label_4.setMaximumSize(QtCore.QSize(45, 16777215))
+        self.label_4.setObjectName("label_4")
+        self.horizontalLayout_5.addWidget(self.label_4)
+        self.lineEdit = QtWidgets.QLineEdit(parent=Form)
+        self.lineEdit.setMaximumSize(QtCore.QSize(150, 16777215))
+        self.lineEdit.setObjectName("lineEdit")
+        self.horizontalLayout_5.addWidget(self.lineEdit)
+        self.pushButton = QtWidgets.QPushButton(parent=Form)
+        self.pushButton.setMaximumSize(QtCore.QSize(50, 16777215))
+        self.pushButton.setObjectName("pushButton")
+        self.horizontalLayout_5.addWidget(self.pushButton)
+        self.label_2 = QtWidgets.QLabel(parent=Form)
+        self.label_2.setText("")
+        self.label_2.setObjectName("label_2")
+        self.horizontalLayout_5.addWidget(self.label_2)
+        self.gridLayout.addLayout(self.horizontalLayout_5, 0, 1, 2, 1)
+
+        self.retranslateUi(Form)
+        QtCore.QMetaObject.connectSlotsByName(Form)
+
+    def retranslateUi(self, Form):
+        _translate = QtCore.QCoreApplication.translate
+        Form.setWindowTitle(_translate("Form", "Form"))
+        self.label.setText(_translate("Form", "开始日期:"))
+        self.dateTimeEdit.setDisplayFormat(_translate("Form", "yyyy-M-d HH:mm:ss"))
+        self.label_3.setText(_translate("Form", "结束日期:"))
+        self.dateTimeEdit_2.setDisplayFormat(_translate("Form", "yyyy-M-d HH:mm:ss"))
+        self.label_4.setText(_translate("Form", "搜索框:"))
+        self.pushButton.setText(_translate("Form", "搜索"))

+ 172 - 0
UI/checkLogs2.ui

@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1295</width>
+    <height>794</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" columnstretch="0,0">
+   <item row="2" column="1">
+    <layout class="QVBoxLayout" name="verticalLayout" stretch="0">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <item>
+      <widget class="QTableWidget" name="tableWidgetFlight">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
+       <property name="tabletTracking">
+        <bool>true</bool>
+       </property>
+       <property name="acceptDrops">
+        <bool>true</bool>
+       </property>
+       <property name="dragDropMode">
+        <enum>QAbstractItemView::DropOnly</enum>
+       </property>
+       <property name="defaultDropAction">
+        <enum>Qt::CopyAction</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="1" rowspan="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <property name="topMargin">
+      <number>10</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="maximumSize">
+        <size>
+         <width>50</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>开始日期:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QDateTimeEdit" name="dateTimeEdit">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="displayFormat">
+        <string>yyyy-M-d HH:mm:ss</string>
+       </property>
+       <property name="calendarPopup">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_3">
+       <property name="maximumSize">
+        <size>
+         <width>50</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>结束日期:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QDateTimeEdit" name="dateTimeEdit_2">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="displayFormat">
+        <string>yyyy-M-d HH:mm:ss</string>
+       </property>
+       <property name="calendarPopup">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_4">
+       <property name="maximumSize">
+        <size>
+         <width>45</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>搜索框:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="lineEdit">
+       <property name="maximumSize">
+        <size>
+         <width>150</width>
+         <height>16777215</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pushButton">
+       <property name="maximumSize">
+        <size>
+         <width>50</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>搜索</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 19 - 0
UI/findserver.py


+ 56 - 0
UI/findserver.ui

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FormLink</class>
+ <widget class="QWidget" name="FormLink">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>440</width>
+    <height>240</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>440</width>
+    <height>240</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>440</width>
+    <height>240</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>查找服务器</string>
+  </property>
+  <property name="layoutDirection">
+   <enum>Qt::RightToLeft</enum>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QTableWidget" name="tableWidget">
+     <property name="layoutDirection">
+      <enum>Qt::LeftToRight</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QPushButton" name="pushButton_manset">
+     <property name="maximumSize">
+      <size>
+       <width>80</width>
+       <height>16777215</height>
+      </size>
+     </property>
+     <property name="text">
+      <string>人工配置</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 20 - 0
UI/findserver2.py


File diff suppressed because it is too large
+ 19 - 0
UI/handoverFlight.py


+ 98 - 0
UI/handoverFlight.ui

@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>738</width>
+    <height>532</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" columnstretch="0,0">
+   <item row="0" column="1" rowspan="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <property name="topMargin">
+      <number>10</number>
+     </property>
+     <item>
+      <widget class="QPushButton" name="pushButton">
+       <property name="text">
+        <string>提交</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="1">
+    <layout class="QVBoxLayout" name="verticalLayout" stretch="0,0">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <item alignment="Qt::AlignHCenter">
+      <widget class="QLabel" name="label_2">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>16777215</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <pointsize>14</pointsize>
+         <underline>true</underline>
+        </font>
+       </property>
+       <property name="text">
+        <string>TextLabela's'da's'da's'da's'da's</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QTableWidget" name="tableWidgetFlight">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
+       <property name="tabletTracking">
+        <bool>true</bool>
+       </property>
+       <property name="acceptDrops">
+        <bool>true</bool>
+       </property>
+       <property name="dragDropMode">
+        <enum>QAbstractItemView::DropOnly</enum>
+       </property>
+       <property name="defaultDropAction">
+        <enum>Qt::CopyAction</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 18 - 0
UI/login.py


+ 78 - 0
UI/login.ui

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>login</class>
+ <widget class="QWidget" name="login">
+  <property name="windowModality">
+   <enum>Qt::NonModal</enum>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>360</width>
+    <height>140</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>360</width>
+    <height>140</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>360</width>
+    <height>140</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>登录</string>
+  </property>
+  <property name="toolTip">
+   <string/>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <property name="sizeConstraint">
+    <enum>QLayout::SetMinimumSize</enum>
+   </property>
+   <item row="1" column="1">
+    <widget class="QLineEdit" name="lineEditPassword">
+     <property name="echoMode">
+      <enum>QLineEdit::Password</enum>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string>密码</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLineEdit" name="lineEditUser"/>
+   </item>
+   <item row="0" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>用户名</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1">
+    <widget class="QPushButton" name="pushButton">
+     <property name="text">
+      <string>登录</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>lineEditUser</tabstop>
+  <tabstop>lineEditPassword</tabstop>
+  <tabstop>pushButton</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 19 - 0
UI/main.py


+ 119 - 0
UI/main.ui

@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>766</width>
+    <height>522</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <property name="windowIcon">
+   <iconset>
+    <normaloff>../image/1.ico</normaloff>../image/1.ico</iconset>
+  </property>
+  <property name="layoutDirection">
+   <enum>Qt::LeftToRight</enum>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_2">
+   <item row="1" column="1">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="text">
+          <string>TextLabel</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEdit"/>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_3">
+         <property name="text">
+          <string>TextLabel</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QCheckBox" name="checkBox">
+         <property name="text">
+          <string>CheckBox</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="checkBox_5">
+         <property name="text">
+          <string>CheckBox</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="checkBox_4">
+         <property name="text">
+          <string>CheckBox</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="checkBox_3">
+         <property name="text">
+          <string>CheckBox</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="checkBox_2">
+         <property name="text">
+          <string>CheckBox</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QTableView" name="tableView"/>
+     </item>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+ <designerdata>
+  <property name="gridDeltaX">
+   <number>10</number>
+  </property>
+  <property name="gridDeltaY">
+   <number>10</number>
+  </property>
+  <property name="gridSnapX">
+   <bool>true</bool>
+  </property>
+  <property name="gridSnapY">
+   <bool>true</bool>
+  </property>
+  <property name="gridVisible">
+   <bool>true</bool>
+  </property>
+ </designerdata>
+</ui>

File diff suppressed because it is too large
+ 70 - 0
UI/main2.py


+ 654 - 0
UI/main2.ui

@@ -0,0 +1,654 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1687</width>
+    <height>846</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" columnstretch="0,40,0,0">
+   <item row="0" column="3">
+    <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0,0,0">
+     <item>
+      <widget class="QDateEdit" name="dateEdit">
+       <property name="minimumSize">
+        <size>
+         <width>130</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pushButton">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>选择</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QRadioButton" name="radioButtonDay">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>白</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QRadioButton" name="radioButtonNight">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>夜</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="1">
+    <layout class="QVBoxLayout" name="verticalLayout" stretch="0">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <item>
+      <widget class="QTableWidget" name="tableWidgetFlight">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
+       <property name="tabletTracking">
+        <bool>true</bool>
+       </property>
+       <property name="acceptDrops">
+        <bool>true</bool>
+       </property>
+       <property name="dragDropMode">
+        <enum>QAbstractItemView::DropOnly</enum>
+       </property>
+       <property name="defaultDropAction">
+        <enum>Qt::CopyAction</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <property name="topMargin">
+      <number>10</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="maximumSize">
+        <size>
+         <width>150</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>航班信息</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_5">
+       <property name="maximumSize">
+        <size>
+         <width>180</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="cursor">
+        <cursorShape>UpArrowCursor</cursorShape>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>查询关键词:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="lineEdit_flight">
+       <property name="maximumSize">
+        <size>
+         <width>100</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="cursor">
+        <cursorShape>IBeamCursor</cursorShape>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pushbutton_searchflight">
+       <property name="maximumSize">
+        <size>
+         <width>65</width>
+         <height>20</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>查询</string>
+       </property>
+       <property name="checkable">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBox_3">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>进港监控模式</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBox">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>短停勤务分离显示</string>
+       </property>
+       <property name="autoRepeatDelay">
+        <number>300</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBox_2">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+         <horstretch>7</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="sizeIncrement">
+        <size>
+         <width>0</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>隐藏保障结束航班</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="1,4,0,0">
+     <property name="spacing">
+      <number>0</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label_6">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>当前用户:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_username">
+       <property name="minimumSize">
+        <size>
+         <width>8</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>100</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>无</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_10">
+       <property name="minimumSize">
+        <size>
+         <width>55</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>服务器状态:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_11">
+       <property name="minimumSize">
+        <size>
+         <width>45</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>无</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="2">
+    <layout class="QVBoxLayout" name="verticalLayout_2">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="4,0,0,0">
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="font">
+          <font>
+           <family>黑体</family>
+          </font>
+         </property>
+         <property name="text">
+          <string>人员信息</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_7">
+         <property name="font">
+          <font>
+           <family>黑体</family>
+          </font>
+         </property>
+         <property name="text">
+          <string>关键词:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEdit_people">
+         <property name="maximumSize">
+          <size>
+           <width>70</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="font">
+          <font>
+           <family>黑体</family>
+          </font>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pushButton_searchpeople">
+         <property name="maximumSize">
+          <size>
+           <width>40</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="font">
+          <font>
+           <family>黑体</family>
+          </font>
+         </property>
+         <property name="text">
+          <string>查询</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QTableWidget" name="tableWidgetPerson">
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
+       <property name="tabletTracking">
+        <bool>true</bool>
+       </property>
+       <property name="dragEnabled">
+        <bool>true</bool>
+       </property>
+       <property name="dragDropMode">
+        <enum>QAbstractItemView::DragOnly</enum>
+       </property>
+       <property name="defaultDropAction">
+        <enum>Qt::IgnoreAction</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="3">
+    <layout class="QVBoxLayout" name="verticalLayout_3" stretch="0">
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout_4" stretch="0,10,3">
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_4" stretch="4,0,0,0,1">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetMaximumSize</enum>
+         </property>
+         <item>
+          <widget class="QLabel" name="label_3">
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+           <property name="text">
+            <string>航班变化</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLabel" name="label_8">
+           <property name="maximumSize">
+            <size>
+             <width>40</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+           <property name="text">
+            <string>关键词:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="lineEdit_change">
+           <property name="maximumSize">
+            <size>
+             <width>70</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pushButton_searchchange">
+           <property name="maximumSize">
+            <size>
+             <width>40</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+           <property name="text">
+            <string>查询</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pushButtonAddPG">
+           <property name="maximumSize">
+            <size>
+             <width>55</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+           <property name="text">
+            <string>添加待办</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <widget class="QTableWidget" name="tableWidget">
+         <property name="enabled">
+          <bool>true</bool>
+         </property>
+         <property name="maximumSize">
+          <size>
+           <width>16777215</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="mouseTracking">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_5" stretch="0,0">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetDefaultConstraint</enum>
+         </property>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_6">
+           <property name="sizeConstraint">
+            <enum>QLayout::SetDefaultConstraint</enum>
+           </property>
+           <item>
+            <widget class="QLabel" name="label_4">
+             <property name="minimumSize">
+              <size>
+               <width>0</width>
+               <height>19</height>
+              </size>
+             </property>
+             <property name="maximumSize">
+              <size>
+               <width>16777215</width>
+               <height>19</height>
+              </size>
+             </property>
+             <property name="font">
+              <font>
+               <family>黑体</family>
+              </font>
+             </property>
+             <property name="text">
+              <string>日志信息</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLabel" name="label_9">
+             <property name="maximumSize">
+              <size>
+               <width>40</width>
+               <height>50</height>
+              </size>
+             </property>
+             <property name="font">
+              <font>
+               <family>黑体</family>
+              </font>
+             </property>
+             <property name="text">
+              <string>关键词:</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLineEdit" name="lineEdit_log">
+             <property name="maximumSize">
+              <size>
+               <width>70</width>
+               <height>16777215</height>
+              </size>
+             </property>
+             <property name="font">
+              <font>
+               <family>黑体</family>
+              </font>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QPushButton" name="pushButton_searchlog">
+             <property name="maximumSize">
+              <size>
+               <width>50</width>
+               <height>16777215</height>
+              </size>
+             </property>
+             <property name="font">
+              <font>
+               <family>黑体</family>
+              </font>
+             </property>
+             <property name="text">
+              <string>查询</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <widget class="QTableWidget" name="tableWidgetLOG">
+           <property name="maximumSize">
+            <size>
+             <width>16777215</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="cursor" stdset="0">
+            <cursorShape>ArrowCursor</cursorShape>
+           </property>
+           <property name="mouseTracking">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 18 - 0
UI/main22.py


+ 350 - 0
UI/main22.ui

@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1458</width>
+    <height>846</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" columnstretch="0,40,0,0">
+   <item row="0" column="3">
+    <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0,0,0">
+     <item>
+      <widget class="QDateEdit" name="dateEdit">
+       <property name="minimumSize">
+        <size>
+         <width>130</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pushButton">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>选择</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QRadioButton" name="radioButtonDay">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>白</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QRadioButton" name="radioButtonNight">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>夜</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <property name="topMargin">
+      <number>10</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="maximumSize">
+        <size>
+         <width>150</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>航班信息</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_5">
+       <property name="maximumSize">
+        <size>
+         <width>180</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="cursor">
+        <cursorShape>UpArrowCursor</cursorShape>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>查询关键词:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="lineEdit_flight">
+       <property name="maximumSize">
+        <size>
+         <width>100</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="cursor">
+        <cursorShape>IBeamCursor</cursorShape>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pushbutton_searchflight">
+       <property name="maximumSize">
+        <size>
+         <width>65</width>
+         <height>20</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>查询</string>
+       </property>
+       <property name="checkable">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBox_3">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>进港监控模式</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBox">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>短停勤务分离显示</string>
+       </property>
+       <property name="autoRepeatDelay">
+        <number>300</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBox_2">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+         <horstretch>7</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="sizeIncrement">
+        <size>
+         <width>0</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>隐藏保障结束航班</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="1,4,0,0">
+     <item>
+      <widget class="QLabel" name="label_6">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>当前用户:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_username">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>100</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>无</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_10">
+       <property name="minimumSize">
+        <size>
+         <width>55</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>服务器状态:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_11">
+       <property name="minimumSize">
+        <size>
+         <width>45</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>无</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="1" colspan="3">
+    <layout class="QVBoxLayout" name="verticalLayout" stretch="0">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <item>
+      <widget class="QTableWidget" name="tableWidgetFlight">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
+       <property name="tabletTracking">
+        <bool>true</bool>
+       </property>
+       <property name="acceptDrops">
+        <bool>true</bool>
+       </property>
+       <property name="dragDropMode">
+        <enum>QAbstractItemView::DropOnly</enum>
+       </property>
+       <property name="defaultDropAction">
+        <enum>Qt::CopyAction</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 341 - 0
UI/main3.py

@@ -0,0 +1,341 @@
+# Form implementation generated from reading ui file 'main3.ui'
+#
+# Created by: PyQt6 UI code generator 6.5.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_Form(object):
+    def setupUi(self, Form):
+        Form.setObjectName("Form")
+        Form.resize(1687, 846)
+        self.gridLayout = QtWidgets.QGridLayout(Form)
+        self.gridLayout.setObjectName("gridLayout")
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.dateEdit = QtWidgets.QDateEdit(parent=Form)
+        self.dateEdit.setMinimumSize(QtCore.QSize(130, 0))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.dateEdit.setFont(font)
+        self.dateEdit.setObjectName("dateEdit")
+        self.horizontalLayout.addWidget(self.dateEdit)
+        self.pushButton = QtWidgets.QPushButton(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.pushButton.setFont(font)
+        self.pushButton.setObjectName("pushButton")
+        self.horizontalLayout.addWidget(self.pushButton)
+        self.radioButtonDay = QtWidgets.QRadioButton(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.radioButtonDay.setFont(font)
+        self.radioButtonDay.setObjectName("radioButtonDay")
+        self.horizontalLayout.addWidget(self.radioButtonDay)
+        self.radioButtonNight = QtWidgets.QRadioButton(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.radioButtonNight.setFont(font)
+        self.radioButtonNight.setObjectName("radioButtonNight")
+        self.horizontalLayout.addWidget(self.radioButtonNight)
+        self.horizontalLayout.setStretch(0, 1)
+        self.gridLayout.addLayout(self.horizontalLayout, 0, 3, 1, 1)
+        self.verticalLayout = QtWidgets.QVBoxLayout()
+        self.verticalLayout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.tableWidgetFlight = QtWidgets.QTableWidget(parent=Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.tableWidgetFlight.sizePolicy().hasHeightForWidth())
+        self.tableWidgetFlight.setSizePolicy(sizePolicy)
+        self.tableWidgetFlight.setMouseTracking(True)
+        self.tableWidgetFlight.setTabletTracking(True)
+        self.tableWidgetFlight.setAcceptDrops(True)
+        self.tableWidgetFlight.setDragDropMode(QtWidgets.QAbstractItemView.DragDropMode.DropOnly)
+        self.tableWidgetFlight.setDefaultDropAction(QtCore.Qt.DropAction.CopyAction)
+        self.tableWidgetFlight.setObjectName("tableWidgetFlight")
+        self.tableWidgetFlight.setColumnCount(0)
+        self.tableWidgetFlight.setRowCount(0)
+        self.verticalLayout.addWidget(self.tableWidgetFlight)
+        self.gridLayout.addLayout(self.verticalLayout, 2, 1, 1, 1)
+        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_5.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+        self.horizontalLayout_5.setContentsMargins(-1, 10, -1, -1)
+        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
+        self.label = QtWidgets.QLabel(parent=Form)
+        self.label.setMaximumSize(QtCore.QSize(150, 19))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label.setFont(font)
+        self.label.setObjectName("label")
+        self.horizontalLayout_5.addWidget(self.label)
+        self.label_5 = QtWidgets.QLabel(parent=Form)
+        self.label_5.setMaximumSize(QtCore.QSize(180, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_5.setFont(font)
+        self.label_5.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.UpArrowCursor))
+        self.label_5.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight)
+        self.label_5.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
+        self.label_5.setObjectName("label_5")
+        self.horizontalLayout_5.addWidget(self.label_5)
+        self.lineEdit_flight = QtWidgets.QLineEdit(parent=Form)
+        self.lineEdit_flight.setMaximumSize(QtCore.QSize(100, 19))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.lineEdit_flight.setFont(font)
+        self.lineEdit_flight.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.IBeamCursor))
+        self.lineEdit_flight.setObjectName("lineEdit_flight")
+        self.horizontalLayout_5.addWidget(self.lineEdit_flight)
+        self.pushbutton_searchflight = QtWidgets.QPushButton(parent=Form)
+        self.pushbutton_searchflight.setMaximumSize(QtCore.QSize(65, 20))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.pushbutton_searchflight.setFont(font)
+        self.pushbutton_searchflight.setCheckable(False)
+        self.pushbutton_searchflight.setObjectName("pushbutton_searchflight")
+        self.horizontalLayout_5.addWidget(self.pushbutton_searchflight)
+        self.checkBox_3 = QtWidgets.QCheckBox(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.checkBox_3.setFont(font)
+        self.checkBox_3.setLayoutDirection(QtCore.Qt.LayoutDirection.RightToLeft)
+        self.checkBox_3.setObjectName("checkBox_3")
+        self.horizontalLayout_5.addWidget(self.checkBox_3)
+        self.checkBox = QtWidgets.QCheckBox(parent=Form)
+        self.checkBox.setMaximumSize(QtCore.QSize(120, 19))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.checkBox.setFont(font)
+        self.checkBox.setLayoutDirection(QtCore.Qt.LayoutDirection.RightToLeft)
+        self.checkBox.setAutoRepeatDelay(300)
+        self.checkBox.setObjectName("checkBox")
+        self.horizontalLayout_5.addWidget(self.checkBox)
+        self.checkBox_2 = QtWidgets.QCheckBox(parent=Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(7)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.checkBox_2.sizePolicy().hasHeightForWidth())
+        self.checkBox_2.setSizePolicy(sizePolicy)
+        self.checkBox_2.setMaximumSize(QtCore.QSize(120, 16777215))
+        self.checkBox_2.setSizeIncrement(QtCore.QSize(0, 0))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.checkBox_2.setFont(font)
+        self.checkBox_2.setLayoutDirection(QtCore.Qt.LayoutDirection.RightToLeft)
+        self.checkBox_2.setObjectName("checkBox_2")
+        self.horizontalLayout_5.addWidget(self.checkBox_2)
+        self.gridLayout.addLayout(self.horizontalLayout_5, 0, 1, 1, 1)
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.label_6 = QtWidgets.QLabel(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_6.setFont(font)
+        self.label_6.setObjectName("label_6")
+        self.horizontalLayout_2.addWidget(self.label_6)
+        self.label_username = QtWidgets.QLabel(parent=Form)
+        self.label_username.setMinimumSize(QtCore.QSize(100, 0))
+        self.label_username.setMaximumSize(QtCore.QSize(100, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_username.setFont(font)
+        self.label_username.setObjectName("label_username")
+        self.horizontalLayout_2.addWidget(self.label_username)
+        self.label_10 = QtWidgets.QLabel(parent=Form)
+        self.label_10.setMinimumSize(QtCore.QSize(55, 0))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_10.setFont(font)
+        self.label_10.setObjectName("label_10")
+        self.horizontalLayout_2.addWidget(self.label_10)
+        self.label_11 = QtWidgets.QLabel(parent=Form)
+        self.label_11.setMinimumSize(QtCore.QSize(45, 0))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_11.setFont(font)
+        self.label_11.setObjectName("label_11")
+        self.horizontalLayout_2.addWidget(self.label_11)
+        self.horizontalLayout_2.setStretch(0, 1)
+        self.horizontalLayout_2.setStretch(1, 4)
+        self.gridLayout.addLayout(self.horizontalLayout_2, 0, 2, 1, 1)
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+        self.label_2 = QtWidgets.QLabel(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_2.setFont(font)
+        self.label_2.setObjectName("label_2")
+        self.horizontalLayout_3.addWidget(self.label_2)
+        self.label_7 = QtWidgets.QLabel(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_7.setFont(font)
+        self.label_7.setObjectName("label_7")
+        self.horizontalLayout_3.addWidget(self.label_7)
+        self.lineEdit_people = QtWidgets.QLineEdit(parent=Form)
+        self.lineEdit_people.setMaximumSize(QtCore.QSize(70, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.lineEdit_people.setFont(font)
+        self.lineEdit_people.setObjectName("lineEdit_people")
+        self.horizontalLayout_3.addWidget(self.lineEdit_people)
+        self.pushButton_searchpeople = QtWidgets.QPushButton(parent=Form)
+        self.pushButton_searchpeople.setMaximumSize(QtCore.QSize(40, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.pushButton_searchpeople.setFont(font)
+        self.pushButton_searchpeople.setObjectName("pushButton_searchpeople")
+        self.horizontalLayout_3.addWidget(self.pushButton_searchpeople)
+        self.horizontalLayout_3.setStretch(0, 4)
+        self.verticalLayout_2.addLayout(self.horizontalLayout_3)
+        self.tableWidgetPerson = QtWidgets.QTableWidget(parent=Form)
+        self.tableWidgetPerson.setMouseTracking(True)
+        self.tableWidgetPerson.setTabletTracking(True)
+        self.tableWidgetPerson.setDragEnabled(True)
+        self.tableWidgetPerson.setDragDropMode(QtWidgets.QAbstractItemView.DragDropMode.DragOnly)
+        self.tableWidgetPerson.setDefaultDropAction(QtCore.Qt.DropAction.IgnoreAction)
+        self.tableWidgetPerson.setObjectName("tableWidgetPerson")
+        self.tableWidgetPerson.setColumnCount(0)
+        self.tableWidgetPerson.setRowCount(0)
+        self.verticalLayout_2.addWidget(self.tableWidgetPerson)
+        self.gridLayout.addLayout(self.verticalLayout_2, 2, 2, 1, 1)
+        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_3.setObjectName("verticalLayout_3")
+        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_4.setObjectName("verticalLayout_4")
+        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_4.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+        self.label_3 = QtWidgets.QLabel(parent=Form)
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_3.setFont(font)
+        self.label_3.setObjectName("label_3")
+        self.horizontalLayout_4.addWidget(self.label_3)
+        self.label_8 = QtWidgets.QLabel(parent=Form)
+        self.label_8.setMaximumSize(QtCore.QSize(40, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_8.setFont(font)
+        self.label_8.setObjectName("label_8")
+        self.horizontalLayout_4.addWidget(self.label_8)
+        self.lineEdit_change = QtWidgets.QLineEdit(parent=Form)
+        self.lineEdit_change.setMaximumSize(QtCore.QSize(70, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.lineEdit_change.setFont(font)
+        self.lineEdit_change.setObjectName("lineEdit_change")
+        self.horizontalLayout_4.addWidget(self.lineEdit_change)
+        self.pushButton_searchchange = QtWidgets.QPushButton(parent=Form)
+        self.pushButton_searchchange.setMaximumSize(QtCore.QSize(40, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.pushButton_searchchange.setFont(font)
+        self.pushButton_searchchange.setObjectName("pushButton_searchchange")
+        self.horizontalLayout_4.addWidget(self.pushButton_searchchange)
+        self.pushButtonAddPG = QtWidgets.QPushButton(parent=Form)
+        self.pushButtonAddPG.setMaximumSize(QtCore.QSize(55, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.pushButtonAddPG.setFont(font)
+        self.pushButtonAddPG.setObjectName("pushButtonAddPG")
+        self.horizontalLayout_4.addWidget(self.pushButtonAddPG)
+        self.horizontalLayout_4.setStretch(0, 4)
+        self.horizontalLayout_4.setStretch(4, 1)
+        self.verticalLayout_4.addLayout(self.horizontalLayout_4)
+        self.tableWidget = QtWidgets.QTableWidget(parent=Form)
+        self.tableWidget.setEnabled(True)
+        self.tableWidget.setMaximumSize(QtCore.QSize(16777215, 16777215))
+        self.tableWidget.setMouseTracking(True)
+        self.tableWidget.setObjectName("tableWidget")
+        self.tableWidget.setColumnCount(0)
+        self.tableWidget.setRowCount(0)
+        self.verticalLayout_4.addWidget(self.tableWidget)
+        self.verticalLayout_5 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_5.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+        self.verticalLayout_5.setObjectName("verticalLayout_5")
+        self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_6.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
+        self.label_4 = QtWidgets.QLabel(parent=Form)
+        self.label_4.setMinimumSize(QtCore.QSize(0, 19))
+        self.label_4.setMaximumSize(QtCore.QSize(16777215, 19))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_4.setFont(font)
+        self.label_4.setObjectName("label_4")
+        self.horizontalLayout_6.addWidget(self.label_4)
+        self.label_9 = QtWidgets.QLabel(parent=Form)
+        self.label_9.setMaximumSize(QtCore.QSize(40, 50))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.label_9.setFont(font)
+        self.label_9.setObjectName("label_9")
+        self.horizontalLayout_6.addWidget(self.label_9)
+        self.lineEdit_log = QtWidgets.QLineEdit(parent=Form)
+        self.lineEdit_log.setMaximumSize(QtCore.QSize(70, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.lineEdit_log.setFont(font)
+        self.lineEdit_log.setObjectName("lineEdit_log")
+        self.horizontalLayout_6.addWidget(self.lineEdit_log)
+        self.pushButton_searchlog = QtWidgets.QPushButton(parent=Form)
+        self.pushButton_searchlog.setMaximumSize(QtCore.QSize(50, 16777215))
+        font = QtGui.QFont()
+        font.setFamily("黑体")
+        self.pushButton_searchlog.setFont(font)
+        self.pushButton_searchlog.setObjectName("pushButton_searchlog")
+        self.horizontalLayout_6.addWidget(self.pushButton_searchlog)
+        self.verticalLayout_5.addLayout(self.horizontalLayout_6)
+        self.tableWidgetLOG = QtWidgets.QTableWidget(parent=Form)
+        self.tableWidgetLOG.setMaximumSize(QtCore.QSize(16777215, 16777215))
+        self.tableWidgetLOG.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
+        self.tableWidgetLOG.setMouseTracking(True)
+        self.tableWidgetLOG.setObjectName("tableWidgetLOG")
+        self.tableWidgetLOG.setColumnCount(0)
+        self.tableWidgetLOG.setRowCount(0)
+        self.verticalLayout_5.addWidget(self.tableWidgetLOG)
+        self.verticalLayout_4.addLayout(self.verticalLayout_5)
+        self.verticalLayout_4.setStretch(1, 10)
+        self.verticalLayout_4.setStretch(2, 3)
+        self.verticalLayout_3.addLayout(self.verticalLayout_4)
+        self.gridLayout.addLayout(self.verticalLayout_3, 2, 3, 1, 1)
+        self.gridLayout.setColumnStretch(1, 40)
+
+        self.retranslateUi(Form)
+        QtCore.QMetaObject.connectSlotsByName(Form)
+
+    def retranslateUi(self, Form):
+        _translate = QtCore.QCoreApplication.translate
+        Form.setWindowTitle(_translate("Form", "Form"))
+        self.pushButton.setText(_translate("Form", "选择"))
+        self.radioButtonDay.setText(_translate("Form", "白"))
+        self.radioButtonNight.setText(_translate("Form", "夜"))
+        self.label.setText(_translate("Form", "航班信息"))
+        self.label_5.setText(_translate("Form", "查询关键词:"))
+        self.pushbutton_searchflight.setText(_translate("Form", "查询"))
+        self.checkBox_3.setText(_translate("Form", "进港监控模式"))
+        self.checkBox.setText(_translate("Form", "短停勤务分离显示"))
+        self.checkBox_2.setText(_translate("Form", "隐藏保障结束航班"))
+        self.label_6.setText(_translate("Form", "当前用户:"))
+        self.label_username.setText(_translate("Form", "无"))
+        self.label_10.setText(_translate("Form", "服务器状态:"))
+        self.label_11.setText(_translate("Form", "无"))
+        self.label_2.setText(_translate("Form", "人员信息"))
+        self.label_7.setText(_translate("Form", "关键词:"))
+        self.pushButton_searchpeople.setText(_translate("Form", "查询"))
+        self.label_3.setText(_translate("Form", "航班变化"))
+        self.label_8.setText(_translate("Form", "关键词:"))
+        self.pushButton_searchchange.setText(_translate("Form", "查询"))
+        self.pushButtonAddPG.setText(_translate("Form", "添加待办"))
+        self.label_4.setText(_translate("Form", "日志信息"))
+        self.label_9.setText(_translate("Form", "关键词:"))
+        self.pushButton_searchlog.setText(_translate("Form", "查询"))

+ 651 - 0
UI/main3.ui

@@ -0,0 +1,651 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1687</width>
+    <height>846</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" columnstretch="0,40,0,0">
+   <item row="0" column="3">
+    <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0,0,0">
+     <item>
+      <widget class="QDateEdit" name="dateEdit">
+       <property name="minimumSize">
+        <size>
+         <width>130</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pushButton">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>选择</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QRadioButton" name="radioButtonDay">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>白</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QRadioButton" name="radioButtonNight">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>夜</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="1">
+    <layout class="QVBoxLayout" name="verticalLayout" stretch="0">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <item>
+      <widget class="QTableWidget" name="tableWidgetFlight">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
+       <property name="tabletTracking">
+        <bool>true</bool>
+       </property>
+       <property name="acceptDrops">
+        <bool>true</bool>
+       </property>
+       <property name="dragDropMode">
+        <enum>QAbstractItemView::DropOnly</enum>
+       </property>
+       <property name="defaultDropAction">
+        <enum>Qt::CopyAction</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="1">
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <property name="topMargin">
+      <number>10</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="maximumSize">
+        <size>
+         <width>150</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>航班信息</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_5">
+       <property name="maximumSize">
+        <size>
+         <width>180</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="cursor">
+        <cursorShape>UpArrowCursor</cursorShape>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>查询关键词:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="lineEdit_flight">
+       <property name="maximumSize">
+        <size>
+         <width>100</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="cursor">
+        <cursorShape>IBeamCursor</cursorShape>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="pushbutton_searchflight">
+       <property name="maximumSize">
+        <size>
+         <width>65</width>
+         <height>20</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>查询</string>
+       </property>
+       <property name="checkable">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBox_3">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>进港监控模式</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBox">
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>19</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>短停勤务分离显示</string>
+       </property>
+       <property name="autoRepeatDelay">
+        <number>300</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="checkBox_2">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+         <horstretch>7</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>120</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="sizeIncrement">
+        <size>
+         <width>0</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string>隐藏保障结束航班</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="1,4,0,0">
+     <item>
+      <widget class="QLabel" name="label_6">
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>当前用户:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_username">
+       <property name="minimumSize">
+        <size>
+         <width>100</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>100</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>无</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_10">
+       <property name="minimumSize">
+        <size>
+         <width>55</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>服务器状态:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_11">
+       <property name="minimumSize">
+        <size>
+         <width>45</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="text">
+        <string>无</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="2">
+    <layout class="QVBoxLayout" name="verticalLayout_2">
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="4,0,0,0">
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="font">
+          <font>
+           <family>黑体</family>
+          </font>
+         </property>
+         <property name="text">
+          <string>人员信息</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_7">
+         <property name="font">
+          <font>
+           <family>黑体</family>
+          </font>
+         </property>
+         <property name="text">
+          <string>关键词:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="lineEdit_people">
+         <property name="maximumSize">
+          <size>
+           <width>70</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="font">
+          <font>
+           <family>黑体</family>
+          </font>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pushButton_searchpeople">
+         <property name="maximumSize">
+          <size>
+           <width>40</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="font">
+          <font>
+           <family>黑体</family>
+          </font>
+         </property>
+         <property name="text">
+          <string>查询</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <widget class="QTableWidget" name="tableWidgetPerson">
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
+       <property name="tabletTracking">
+        <bool>true</bool>
+       </property>
+       <property name="dragEnabled">
+        <bool>true</bool>
+       </property>
+       <property name="dragDropMode">
+        <enum>QAbstractItemView::DragOnly</enum>
+       </property>
+       <property name="defaultDropAction">
+        <enum>Qt::IgnoreAction</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="3">
+    <layout class="QVBoxLayout" name="verticalLayout_3" stretch="0">
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout_4" stretch="0,10,3">
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_4" stretch="4,0,0,0,1">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetMaximumSize</enum>
+         </property>
+         <item>
+          <widget class="QLabel" name="label_3">
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+           <property name="text">
+            <string>航班变化</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLabel" name="label_8">
+           <property name="maximumSize">
+            <size>
+             <width>40</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+           <property name="text">
+            <string>关键词:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="lineEdit_change">
+           <property name="maximumSize">
+            <size>
+             <width>70</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pushButton_searchchange">
+           <property name="maximumSize">
+            <size>
+             <width>40</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+           <property name="text">
+            <string>查询</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="pushButtonAddPG">
+           <property name="maximumSize">
+            <size>
+             <width>55</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="font">
+            <font>
+             <family>黑体</family>
+            </font>
+           </property>
+           <property name="text">
+            <string>添加待办</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <widget class="QTableWidget" name="tableWidget">
+         <property name="enabled">
+          <bool>true</bool>
+         </property>
+         <property name="maximumSize">
+          <size>
+           <width>16777215</width>
+           <height>16777215</height>
+          </size>
+         </property>
+         <property name="mouseTracking">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_5" stretch="0,0">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetDefaultConstraint</enum>
+         </property>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_6">
+           <property name="sizeConstraint">
+            <enum>QLayout::SetDefaultConstraint</enum>
+           </property>
+           <item>
+            <widget class="QLabel" name="label_4">
+             <property name="minimumSize">
+              <size>
+               <width>0</width>
+               <height>19</height>
+              </size>
+             </property>
+             <property name="maximumSize">
+              <size>
+               <width>16777215</width>
+               <height>19</height>
+              </size>
+             </property>
+             <property name="font">
+              <font>
+               <family>黑体</family>
+              </font>
+             </property>
+             <property name="text">
+              <string>日志信息</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLabel" name="label_9">
+             <property name="maximumSize">
+              <size>
+               <width>40</width>
+               <height>50</height>
+              </size>
+             </property>
+             <property name="font">
+              <font>
+               <family>黑体</family>
+              </font>
+             </property>
+             <property name="text">
+              <string>关键词:</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLineEdit" name="lineEdit_log">
+             <property name="maximumSize">
+              <size>
+               <width>70</width>
+               <height>16777215</height>
+              </size>
+             </property>
+             <property name="font">
+              <font>
+               <family>黑体</family>
+              </font>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QPushButton" name="pushButton_searchlog">
+             <property name="maximumSize">
+              <size>
+               <width>50</width>
+               <height>16777215</height>
+              </size>
+             </property>
+             <property name="font">
+              <font>
+               <family>黑体</family>
+              </font>
+             </property>
+             <property name="text">
+              <string>查询</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <widget class="QTableWidget" name="tableWidgetLOG">
+           <property name="maximumSize">
+            <size>
+             <width>16777215</width>
+             <height>16777215</height>
+            </size>
+           </property>
+           <property name="cursor" stdset="0">
+            <cursorShape>ArrowCursor</cursorShape>
+           </property>
+           <property name="mouseTracking">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 144 - 0
UI/main4.py

@@ -0,0 +1,144 @@
+# Form implementation generated from reading ui file 'D:\fairyJY\py\flightinfo2\flightinfo\UI\main2.ui'
+#
+# Created by: PyQt6 UI code generator 6.4.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtWidgets
+
+
+class Ui_Form(object):
+    def setupUi(self, Form):
+        Form.setObjectName("Form")
+        Form.resize(1435, 1001)
+        self.gridLayout = QtWidgets.QGridLayout(Form)
+        self.gridLayout.setObjectName("gridLayout")
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+        self.label_2 = QtWidgets.QLabel(Form)
+        self.label_2.setObjectName("label_2")
+        self.horizontalLayout_3.addWidget(self.label_2)
+        self.pushButton_add = QtWidgets.QPushButton(Form)
+        self.pushButton_add.setObjectName("pushButton_add")
+        self.horizontalLayout_3.addWidget(self.pushButton_add)
+        self.horizontalLayout_3.setStretch(0, 4)
+        self.verticalLayout_2.addLayout(self.horizontalLayout_3)
+        self.tableWidgetPerson = QtWidgets.QTableWidget(Form)
+        self.tableWidgetPerson.setObjectName("tableWidgetPerson")
+        self.tableWidgetPerson.setColumnCount(0)
+        self.tableWidgetPerson.setRowCount(0)
+        self.verticalLayout_2.addWidget(self.tableWidgetPerson)
+        self.gridLayout.addLayout(self.verticalLayout_2, 2, 2, 1, 1)
+        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_3.setObjectName("verticalLayout_3")
+        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_4.setObjectName("verticalLayout_4")
+        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_4.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+        self.label_3 = QtWidgets.QLabel(Form)
+        self.label_3.setObjectName("label_3")
+        self.horizontalLayout_4.addWidget(self.label_3)
+        self.pushButtonAddPG = QtWidgets.QPushButton(Form)
+        self.pushButtonAddPG.setObjectName("pushButtonAddPG")
+        self.horizontalLayout_4.addWidget(self.pushButtonAddPG)
+        self.horizontalLayout_4.setStretch(0, 4)
+        self.horizontalLayout_4.setStretch(1, 1)
+        self.verticalLayout_4.addLayout(self.horizontalLayout_4)
+        self.tableWidget = QtWidgets.QTableWidget(Form)
+        self.tableWidget.setMaximumSize(QtCore.QSize(16777215, 16777215))
+        self.tableWidget.setObjectName("tableWidget")
+        self.tableWidget.setColumnCount(0)
+        self.tableWidget.setRowCount(0)
+        self.verticalLayout_4.addWidget(self.tableWidget)
+        self.verticalLayout_3.addLayout(self.verticalLayout_4)
+        self.verticalLayout_5 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_5.setObjectName("verticalLayout_5")
+        self.label_4 = QtWidgets.QLabel(Form)
+        self.label_4.setObjectName("label_4")
+        self.verticalLayout_5.addWidget(self.label_4)
+        self.tableWidgetLOG = QtWidgets.QTableWidget(Form)
+        self.tableWidgetLOG.setMaximumSize(QtCore.QSize(16777215, 16777215))
+        self.tableWidgetLOG.setObjectName("tableWidgetLOG")
+        self.tableWidgetLOG.setColumnCount(0)
+        self.tableWidgetLOG.setRowCount(0)
+        self.verticalLayout_5.addWidget(self.tableWidgetLOG)
+        self.verticalLayout_3.addLayout(self.verticalLayout_5)
+        self.gridLayout.addLayout(self.verticalLayout_3, 2, 3, 1, 1)
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.label_6 = QtWidgets.QLabel(Form)
+        self.label_6.setObjectName("label_6")
+        self.horizontalLayout_2.addWidget(self.label_6)
+        self.label_username = QtWidgets.QLabel(Form)
+        self.label_username.setMinimumSize(QtCore.QSize(200, 0))
+        self.label_username.setObjectName("label_username")
+        self.horizontalLayout_2.addWidget(self.label_username)
+        self.horizontalLayout_2.setStretch(0, 1)
+        self.horizontalLayout_2.setStretch(1, 4)
+        self.gridLayout.addLayout(self.horizontalLayout_2, 0, 2, 1, 1)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.dateEdit = QtWidgets.QDateEdit(Form)
+        self.dateEdit.setMinimumSize(QtCore.QSize(130, 0))
+        self.dateEdit.setObjectName("dateEdit")
+        self.horizontalLayout.addWidget(self.dateEdit)
+        self.pushButton = QtWidgets.QPushButton(Form)
+        self.pushButton.setObjectName("pushButton")
+        self.horizontalLayout.addWidget(self.pushButton)
+        self.radioButtonDay = QtWidgets.QRadioButton(Form)
+        self.radioButtonDay.setObjectName("radioButtonDay")
+        self.horizontalLayout.addWidget(self.radioButtonDay)
+        self.radioButtonNight = QtWidgets.QRadioButton(Form)
+        self.radioButtonNight.setObjectName("radioButtonNight")
+        self.horizontalLayout.addWidget(self.radioButtonNight)
+        self.horizontalLayout.setStretch(0, 1)
+        self.gridLayout.addLayout(self.horizontalLayout, 0, 3, 1, 1)
+        self.verticalLayout = QtWidgets.QVBoxLayout()
+        self.verticalLayout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.tableWidgetFlight = QtWidgets.QTableWidget(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+        sizePolicy.setHorizontalStretch(10)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.tableWidgetFlight.sizePolicy().hasHeightForWidth())
+        self.tableWidgetFlight.setSizePolicy(sizePolicy)
+        self.tableWidgetFlight.setObjectName("tableWidgetFlight")
+        self.tableWidgetFlight.setColumnCount(0)
+        self.tableWidgetFlight.setRowCount(0)
+        self.verticalLayout.addWidget(self.tableWidgetFlight)
+        self.gridLayout.addLayout(self.verticalLayout, 2, 1, 1, 1)
+        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_5.setContentsMargins(-1, 10, -1, -1)
+        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
+        self.label = QtWidgets.QLabel(Form)
+        self.label.setObjectName("label")
+        self.horizontalLayout_5.addWidget(self.label)
+        self.checkBox = QtWidgets.QCheckBox(Form)
+        self.checkBox.setObjectName("checkBox")
+        self.horizontalLayout_5.addWidget(self.checkBox)
+        self.gridLayout.addLayout(self.horizontalLayout_5, 0, 1, 1, 1)
+        self.gridLayout.setColumnStretch(1, 40)
+
+        self.retranslateUi(Form)
+        QtCore.QMetaObject.connectSlotsByName(Form)
+
+    def retranslateUi(self, Form):
+        _translate = QtCore.QCoreApplication.translate
+        Form.setWindowTitle(_translate("Form", "Form"))
+        self.label_2.setText(_translate("Form", "人员信息"))
+        self.pushButton_add.setText(_translate("Form", "添加"))
+        self.label_3.setText(_translate("Form", "航班变化"))
+        self.pushButtonAddPG.setText(_translate("Form", "添加待办"))
+        self.label_4.setText(_translate("Form", "日志信息"))
+        self.label_6.setText(_translate("Form", "当前用户:"))
+        self.label_username.setText(_translate("Form", "无"))
+        self.pushButton.setText(_translate("Form", "选择"))
+        self.radioButtonDay.setText(_translate("Form", "白"))
+        self.radioButtonNight.setText(_translate("Form", "夜"))
+        self.label.setText(_translate("Form", "航班信息"))
+        self.checkBox.setText(_translate("Form", "短停勤务分离显示"))

File diff suppressed because it is too large
+ 19 - 0
UI/mapWeb.py


+ 75 - 0
UI/mapWeb.ui

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FormMapWeb</class>
+ <widget class="QWidget" name="FormMapWeb">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1000</width>
+    <height>1000</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>1000</width>
+    <height>1000</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>天府机场</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <layout class="QVBoxLayout" name="verticalLayout" stretch="0,5,0">
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QWebEngineView" name="webEngineView">
+       <property name="url">
+        <url>
+         <string>about:blank</string>
+        </url>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QPushButton" name="pushButton_2">
+         <property name="text">
+          <string>PushButton</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="pushButton">
+         <property name="text">
+          <string>PushButton</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QWebEngineView</class>
+   <extends>QWidget</extends>
+   <header location="global">QtWebEngineWidgets/QWebEngineView</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>

File diff suppressed because it is too large
+ 18 - 0
UI/searchpeople_get.py


+ 113 - 0
UI/searchpeople_get.ui

@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>272</width>
+    <height>235</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" columnstretch="0,0">
+   <item row="2" column="1">
+    <layout class="QVBoxLayout" name="verticalLayout" stretch="0">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <item>
+      <widget class="QTableWidget" name="tableWidgetFlight">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
+       <property name="tabletTracking">
+        <bool>true</bool>
+       </property>
+       <property name="acceptDrops">
+        <bool>true</bool>
+       </property>
+       <property name="dragDropMode">
+        <enum>QAbstractItemView::DropOnly</enum>
+       </property>
+       <property name="defaultDropAction">
+        <enum>Qt::CopyAction</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="1" rowspan="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <property name="topMargin">
+      <number>10</number>
+     </property>
+     <item>
+      <widget class="QPushButton" name="pushButton">
+       <property name="text">
+        <string>提交</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_5">
+       <property name="maximumSize">
+        <size>
+         <width>180</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="font">
+        <font>
+         <family>黑体</family>
+        </font>
+       </property>
+       <property name="cursor">
+        <cursorShape>UpArrowCursor</cursorShape>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>查询日期:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_2">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>50</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>TextLabel</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 21 - 0
UI/show_webpage.py

@@ -0,0 +1,21 @@
+import sys
+
+from PyQt6.QtCore import QUrl  # 新增导入 QUrl
+from PyQt6.QtWebEngineWidgets import QWebEngineView
+from PyQt6.QtWidgets import QApplication
+from PyQt6.QtWidgets import QMainWindow
+
+
+def show_webpage(url: str = "https://www.baidu.com"):
+    app = QApplication(sys.argv)
+    window = QMainWindow()
+    window.setWindowTitle("Web Browser")
+    window.setGeometry(100, 100, 800, 600)
+
+    web_view = QWebEngineView()
+    window.setCentralWidget(web_view)
+
+    web_view.load(QUrl(url))
+
+    window.show()
+    sys.exit(app.exec())

File diff suppressed because it is too large
+ 66 - 0
UI/workloadinfos.py


+ 214 - 0
UI/workloadinfos.ui

@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1295</width>
+    <height>794</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" columnstretch="0,0">
+   <item row="2" column="1">
+    <layout class="QVBoxLayout" name="verticalLayout" stretch="0">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <item>
+      <widget class="QTableWidget" name="tableWidgetFlight">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="mouseTracking">
+        <bool>true</bool>
+       </property>
+       <property name="tabletTracking">
+        <bool>true</bool>
+       </property>
+       <property name="acceptDrops">
+        <bool>true</bool>
+       </property>
+       <property name="dragDropMode">
+        <enum>QAbstractItemView::DropOnly</enum>
+       </property>
+       <property name="defaultDropAction">
+        <enum>Qt::CopyAction</enum>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="1" rowspan="2">
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetDefaultConstraint</enum>
+     </property>
+     <property name="topMargin">
+      <number>10</number>
+     </property>
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="maximumSize">
+        <size>
+         <width>50</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>人员列表:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="comboBox_peoplelist">
+       <property name="enabled">
+        <bool>true</bool>
+       </property>
+       <property name="maximumSize">
+        <size>
+         <width>80</width>
+         <height>16777215</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="refresh">
+       <property name="maximumSize">
+        <size>
+         <width>50</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>刷新</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_3">
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_4">
+       <property name="maximumSize">
+        <size>
+         <width>50</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>修正内容</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="changeinfo">
+       <property name="maximumSize">
+        <size>
+         <width>100</width>
+         <height>16777215</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_5">
+       <property name="maximumSize">
+        <size>
+         <width>25</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>人员:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="changepeople">
+       <property name="maximumSize">
+        <size>
+         <width>80</width>
+         <height>16777215</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_6">
+       <property name="maximumSize">
+        <size>
+         <width>30</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>工时:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="changevalue">
+       <property name="maximumSize">
+        <size>
+         <width>30</width>
+         <height>16777215</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="label_7">
+       <property name="maximumSize">
+        <size>
+         <width>55</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>标准工时库</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="changeselect">
+       <property name="maximumSize">
+        <size>
+         <width>80</width>
+         <height>16777215</height>
+        </size>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="changeupdate">
+       <property name="maximumSize">
+        <size>
+         <width>50</width>
+         <height>16777215</height>
+        </size>
+       </property>
+       <property name="text">
+        <string>提交修正</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

+ 2 - 0
_init_.py

@@ -0,0 +1,2 @@
+from . import Functions
+from . import UI

BIN
icon/1.ico


BIN
icon/2.ico


Some files were not shown because too many files changed in this diff