main.qml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. import QtQuick
  2. import QtQuick.VirtualKeyboard
  3. import QtQuick.Layouts
  4. import "./content"
  5. import QtQuick.Controls
  6. import com.lock 1.0 // 导入 C++ 类
  7. import com.rfid 1.0
  8. import com.pro 1.0
  9. import com.httpclient 1.0
  10. import com.finger 1.0
  11. import com.timeout 1.0
  12. // import com.InteractiveCore 1.0
  13. import com.InteractiveTask 1.0
  14. // import com.InteractiveFace 1.0
  15. ApplicationWindow {
  16. id: window
  17. visible: true
  18. width: 1920
  19. height: 1080
  20. title: "Cabinet"
  21. property bool lockWorkStat: false
  22. property bool windowIsQuit: false
  23. signal lockThreadExit
  24. signal rfidThreadExit
  25. signal httpThreadExit
  26. signal proThreadExit
  27. signal fingerThreadExit
  28. visibility: Window.FullScreen // 设置窗口为全屏
  29. flags: Qt.FramelessWindowHint // 设置窗口无边框
  30. // flags: Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint // 设置窗口无边框且强制置顶
  31. Image {
  32. id: image
  33. x: 0
  34. y: 0
  35. width: 1920
  36. height: 1080
  37. // width: parent.width
  38. // height: parent.height
  39. source: "qrc:/png/backspace.png"
  40. fillMode: Image.PreserveAspectFit
  41. }
  42. // 捕获关闭事件
  43. onClosing: {
  44. // close.accepted = false; // 阻止默认关闭行为
  45. // confirmExitDialog.open(); // 打开确认对话框
  46. exitWork();
  47. Qt.quit(); // 用户选择“是”,退出应用程序
  48. }
  49. WaitPromptBox {
  50. id: waitPromptBox
  51. visible: false
  52. }
  53. InfoPromptBox {
  54. id: infoPromptBox
  55. visible: false
  56. }
  57. HangPromptBox {
  58. id: hangPromptBox
  59. visible: false
  60. }
  61. Component.onCompleted:{
  62. waitPromptBox.hide();
  63. infoPromptBox.hide();
  64. hangPromptBox.hide();
  65. loginScreen.visible = true;
  66. }
  67. Dialog {
  68. id: confirmExitDialog
  69. title: "Confirm Exit"
  70. standardButtons: Dialog.Yes | Dialog.No
  71. contentItem: Text {
  72. text: "是否确认退出程序?"
  73. font.pixelSize: 16
  74. }
  75. onAccepted: {
  76. exitWork();
  77. }
  78. onRejected: {
  79. confirmExitDialog.close(); // 用户选择“否”,关闭对话框
  80. }
  81. }
  82. function exitWork() {
  83. console.log("Work exit!");
  84. httpThreadExit();
  85. lockThreadExit();
  86. rfidThreadExit();
  87. proThreadExit();
  88. fingerThreadExit();
  89. quit_timer.start();
  90. }
  91. Timer {
  92. id: quit_timer
  93. interval: 2000 // 1秒后触发一次(1000毫秒)
  94. running: false // 默认不运行,通过程序控制启动和停止
  95. repeat: false // 不重复触发
  96. onTriggered: {
  97. Qt.quit(); // 用户选择“是”,退出应用程序
  98. }
  99. }
  100. // InteractiveCore {
  101. // id: interactiveCore
  102. // }
  103. // InteractiveFace{
  104. // id: interactiveFace
  105. // }
  106. Timeout {
  107. id: timeout
  108. Component.onCompleted: {
  109. // signal_timeoutRun.connect();
  110. }
  111. onSignal_timeoutRun: function(epoch)
  112. {
  113. materialDialog.timeout_refresh(epoch);
  114. }
  115. onSignal_timeoutStart:
  116. {
  117. materialDialog.show();
  118. }
  119. onSignal_timeoutEnd:
  120. {
  121. materialDialog.hide();
  122. }
  123. }
  124. Lock {
  125. id: lockThread
  126. onSignal_lock_run:(value)=>{ console.log("lockWorkStat:", value); } // 连接信号到槽(这里是JavaScript函数)
  127. Component.onCompleted: {
  128. lockThreadExit.connect(lockThread.slot_set_thread_stop);
  129. // 锁状态改变
  130. signal_lockStat.connect(proThread.slot_lockStat);
  131. signal_lockStat.connect(mainScreen.lockStat_callback);
  132. // 物资取还调用开柜
  133. materialTakeBack.signal_openLock.connect(lockThread.slot_openLock);
  134. // 物资更换调用开柜
  135. materialReplace.signal_openLock.connect(lockThread.slot_openLock);
  136. // 物资手动更换调用开柜
  137. materialManualReplace.signal_openLock.connect(lockThread.slot_openLock);
  138. // 异常处理调用开柜
  139. materialException.signal_openLock.connect(lockThread.slot_openLock);
  140. // 物资检查计划调用开柜
  141. materialCheckPlan.signal_openLock.connect(lockThread.slot_openLock);
  142. // 物资取还锁状态改变
  143. proThread.signal_lockStatTakeBack.connect(materialTakeBack.lockStat_callback);
  144. // 物资手动更换锁状态改变
  145. proThread.signal_lockStatReplaceHand.connect(materialManualReplace.lockStat_callback);
  146. // 物资自动更换锁状态改变
  147. proThread.signal_lockStatReplaceAuto.connect(materialReplace.lockStat_callback);
  148. // 异常处理锁状态改变
  149. proThread.signal_lockStatException.connect(materialException.lockStat_callback);
  150. // 物资检查计划锁状态改变
  151. proThread.signal_lockStatCheckPlan.connect(materialCheckPlan.lockStat_callback);
  152. start();
  153. } // 开始线程执行
  154. }
  155. Rfid {
  156. id: rfidThread
  157. Component.onCompleted: {
  158. rfidThreadExit.connect(rfidThread.slot_set_thread_stop);
  159. // 开始读rfid
  160. materialTakeBack.startReader.connect(rfidThread.slot_start_read_tid);
  161. materialReplace.startReader.connect(rfidThread.slot_start_read_tid);
  162. materialManualReplace.startReader.connect(rfidThread.slot_start_read_tid);
  163. materialException.startReader.connect(rfidThread.slot_start_read_tid);
  164. materialCheckPlan.startReader.connect(rfidThread.slot_start_read_tid);
  165. // 读rfid返回
  166. signal_tid_update.connect(proThread.slot_tid_update);
  167. start();
  168. } // 开始线程执行
  169. }
  170. Pro {
  171. id: proThread
  172. Component.onCompleted: {
  173. proThreadExit.connect(proThread.slot_set_thread_stop);
  174. loginScreen.signal_login.connect(proThread.slot_login);
  175. mainScreen.signal_logout.connect(proThread.slot_logout);
  176. signal_login_return_stat.connect(loginScreen.login_return_stat);
  177. signal_login_return_param.connect(mainScreen.login_return_param);
  178. signal_updateMaterial.connect(materialSelmodel.slot_updateMaterial);
  179. signal_updateMaterial.connect(materialTakeBack.slot_updateMaterial);
  180. signal_updateMaterialHand.connect(materialManualReplace.slot_updateMaterialHand);
  181. // signal_updatetakebackMaterial.connect(materialStatistics.slot_updatetakebackMaterial);
  182. signal_fingerWork.connect(fingerThread.slot_fingerWork);
  183. signal_post_request_data.connect(httpThread.slot_post_request_data);
  184. signal_get_request_data.connect(httpThread.slot_get_request_data);
  185. signal_addFinger_act.connect(setView.slot_addFinger_act);
  186. materialTakeBack.signal_takebackstat.connect(proThread.slot_takebackstat);
  187. setView.signal_saveConfig.connect(proThread.slot_saveConfig);
  188. setView.signal_addfinger.connect(proThread.slot_addfinger);
  189. loginScreen.signal_fingerWork.connect(proThread.slot_fingerWork);
  190. // 物资更换锁状态改变
  191. materialReplace.signal_takebackstat.connect(proThread.slot_takebackstat);
  192. materialManualReplace.signal_takebackstat.connect(proThread.slot_takebackstat);
  193. // 异常处理锁状态改变
  194. materialException.signal_takebackstat.connect(proThread.slot_takebackstat);
  195. // 物资检查计划
  196. materialCheckPlan.signal_takebackstat.connect(proThread.slot_takebackstat);
  197. // // 手动更换
  198. // signal_updatetakebackMaterialHand.connect(materialReplaceHand.slot_updatetakebackMaterial);
  199. // // 自动更换
  200. // signal_updatetakebackMaterialAuto.connect(materialReplaceAuto.slot_updatetakebackMaterial);
  201. // // 物资检查计划
  202. // signal_updatematerialCheckPlan.connect(materialCheckUpdate.slot_updatetakebackMaterial);
  203. signal_updatetakebackMaterial.connect(materialStocktaking.slot_updatetakebackMaterial);
  204. signal_updatetakebackMaterialHand.connect(materialStocktaking.slot_updatetakebackMaterial);
  205. signal_updatetakebackMaterialAuto.connect(materialStocktaking.slot_updatetakebackMaterial);
  206. signal_updateExceptionHandle.connect(materialStocktaking.slot_updatetakebackMaterial);
  207. signal_updatematerialCheckPlan.connect(materialStocktaking.slot_updatetakebackMaterial);
  208. // 2025-06-23 wxh
  209. // 获取使用说明
  210. materialInstructions.signal_get.connect(proThread.slot_instructionsGet);
  211. // 使用说明数据返回
  212. proThread.signal_materialTypeGet.connect(materialInstructions.slot_materialTypeGet);
  213. proThread.signal_instructionsGet.connect(materialInstructions.slot_instructionsGet);
  214. // pdf实时下载
  215. materialInstructions.signal_pdf_click.connect(proThread.slot_pdf_click);
  216. proThread.signal_pdf_relay.connect(materialInstructions.slot_pdf_relay);
  217. // 获取物资检查计划
  218. materialCheckPlan.signal_getMaterialCheckPlan.connect(proThread.slot_getMaterialCheckPlan);
  219. // 获取物资检查计划数据返回
  220. proThread.signal_getMaterialCheckPlan.connect(materialCheckPlan.slot_getMaterialCheckPlan);
  221. // 获取物资检查列表
  222. materialCheckForm.signal_getMaterialCheckForm.connect(proThread.slot_getMaterialCheckForm);
  223. // 获取物资键槽列表返回
  224. proThread.signal_getMaterialCheckForm.connect(materialCheckForm.slot_getMaterialCheckForm);
  225. // 保存
  226. materialCheckForm.signal_postSaveForm.connect(proThread.slot_postSaveForm);
  227. proThread.signal_postSaveForm.connect(materialCheckForm.slot_postSaveForm);
  228. // 检查签名
  229. materialCheckSign.signal_postCheckSign.connect(proThread.slot_postCheckSign);
  230. proThread.signal_postCheckSign.connect(materialCheckSign.slot_postCheckSign);
  231. // 最终提交物资检查记录
  232. materialCheckPlan.signal_postSubmit.connect(proThread.slot_postSubmit);
  233. proThread.signal_postSubmit.connect(materialCheckPlan.slot_postSubmit);
  234. // 获取物资列表信息
  235. // materialReplace.signal_getMaterialInfoList.connect(proThread.slot_getMaterialInfoList);
  236. // proThread.signal_getMaterialInfoList.connect(materialReplace.slot_getMaterialInfoList);
  237. signal_backRefresh.connect(materialDialogBack.slot_backRefresh);
  238. signal_takeRefresh.connect(materialDialogTake.slot_takeRefresh);
  239. // 全局鼠标点击事件,退出定时器
  240. signal_global_mouse_clicked.connect(mainScreen.resetLogin_timeout);
  241. start();
  242. } // 开始线程执行
  243. }
  244. Httpclient{
  245. id: httpThread
  246. Component.onCompleted: {
  247. httpThreadExit.connect(httpThread.slot_set_thread_stop);
  248. signal_response_data.connect(proThread.slot_response_data);
  249. start();
  250. }
  251. }
  252. Finger{
  253. id: fingerThread
  254. Component.onCompleted: {
  255. fingerThreadExit.connect(fingerThread.slot_set_thread_stop);
  256. signal_fingerStat.connect(proThread.slot_fingerStat);
  257. // start();
  258. }
  259. }
  260. Login {
  261. id: loginScreen
  262. visible: false
  263. }
  264. MainScreen{
  265. id:mainScreen
  266. visible: false
  267. }
  268. MaterialSelModel{
  269. id:materialSelmodel
  270. visible: false
  271. }
  272. MaterialTakeBack{
  273. id: materialTakeBack
  274. visible: false
  275. }
  276. MaterialStatistics {
  277. id: materialStatistics
  278. visible: false
  279. }
  280. MaterialInstructions {
  281. id: materialInstructions
  282. visible: false
  283. }
  284. MaterialCheckPlan {
  285. id: materialCheckPlan
  286. visible: false
  287. }
  288. MaterialCheckUpdate {
  289. id: materialCheckUpdate
  290. visible: false
  291. }
  292. MaterialCheckForm {
  293. id: materialCheckForm
  294. visible: false
  295. }
  296. MaterialCheckSign {
  297. id: materialCheckSign
  298. visible: false
  299. }
  300. MaterialReplace {
  301. id: materialReplace
  302. visible: false
  303. }
  304. MaterialManualReplace {
  305. id: materialManualReplace
  306. visible: false
  307. }
  308. MaterialReplaceHand
  309. {
  310. id: materialReplaceHand
  311. visible: false
  312. }
  313. MaterialReplaceAuto
  314. {
  315. id: materialReplaceAuto
  316. visible: false
  317. }
  318. SetView {
  319. id: setView
  320. visible: false
  321. }
  322. // 异常处理
  323. MaterialException {
  324. id: materialException
  325. visible: false
  326. }
  327. MaterialExceptionReport {
  328. id: materialExceptionReport
  329. visible: false
  330. }
  331. // MaterialExceptionFinish {
  332. // id: materialExceptionFinish
  333. // visible: false
  334. // }
  335. MaterialDialog {
  336. id: materialDialog
  337. visible: false
  338. }
  339. MaterialDialogTake {
  340. id: materialDialogTake
  341. visible: false
  342. }
  343. MaterialDialogBack {
  344. id: materialDialogBack
  345. visible: false
  346. }
  347. FacialRecognition
  348. {
  349. id: facialRecognition
  350. visible: false
  351. }
  352. MaterialStocktaking {
  353. id: materialStocktaking
  354. visible: false
  355. }
  356. // 更新电磁锁板子工作状态
  357. function lock_run_stat_callback(value) {
  358. lockWorkStat = value;
  359. }
  360. }