MaterialCheckPlan.qml 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743
  1. import QtQuick
  2. import QtQuick.Controls
  3. import QtQuick.Layouts
  4. import com.InteractiveTask 1.0
  5. Item {
  6. id: materialcheckplan
  7. x: 290
  8. y: 130
  9. width: 1600
  10. height: 920
  11. signal signal_getMaterialCheckPlan();
  12. signal signal_postSubmit();
  13. property int planId: 0
  14. property string strMaterialCheckPlanGet: "";
  15. property bool takebackstat : false
  16. property bool opendoor : false
  17. signal startReader();
  18. signal signal_openLock();
  19. signal signal_takebackstat(bool stat);
  20. PromptInfo {
  21. id:materialcheckplan_prompt_info
  22. }
  23. Connections {
  24. target: materialcheckplan
  25. onVisibleChanged: {
  26. if (visible === true)
  27. {
  28. proThread.moveCursorTo(0, 0);
  29. }
  30. if (materialcheckplan.visible === true)
  31. {
  32. materialcheckplan_btn_submit.visible = false;
  33. materialcheckplan_btn_proceed_check.visible = false;
  34. materialcheckplan_btn_sign.visible = false;
  35. materialcheckplan_btn_start_check.visible = false;
  36. materialcheckplan_btn_return.visible = true;
  37. materialcheckplan_rect_main.visible = false;
  38. // signal_getMaterialCheckPlan();
  39. materialCheckSign.imageData = "";
  40. waitPromptBox.show();
  41. var taskType = InteractiveTask.TypeHttpGet_getLastCheckPlanByCabinetCode;
  42. interactiveCore.appendTask(
  43. taskType, null, (data) =>{
  44. // 解析返回结果
  45. var jsonObjRoot = JSON.parse(data);
  46. if (jsonObjRoot.code === 200)
  47. {
  48. var jsonObjData = jsonObjRoot.data;
  49. planId = jsonObjData.planId;
  50. pConfig.setScurrentPlanId(parseInt(planId));
  51. var planDate = jsonObjData.planDate;
  52. var planStat = jsonObjData.status;
  53. var strPlanStat = "未定义";
  54. var signatureImg = jsonObjData.signatureImg;
  55. if (planStat === "0")
  56. {
  57. strPlanStat = "待开始";
  58. materialcheckplan_btn_submit.visible = false;
  59. materialcheckplan_btn_proceed_check.visible = false;
  60. materialcheckplan_btn_sign.visible = false;
  61. materialcheckplan_btn_start_check.visible = true;
  62. materialcheckplan_btn_return.visible = true;
  63. materialcheckplan_rect_main.visible = true;
  64. materialcheckplan_text_plan_title.visible = false;
  65. }
  66. else if (planStat === "2")
  67. {
  68. strPlanStat = "进行中";
  69. materialcheckplan_btn_submit.visible = true;
  70. materialcheckplan_btn_proceed_check.visible = true;
  71. materialcheckplan_btn_sign.visible = true;
  72. materialcheckplan_btn_start_check.visible = false;
  73. materialcheckplan_btn_return.visible = true;
  74. materialcheckplan_rect_main.visible = true;
  75. materialcheckplan_text_plan_title.visible = false;
  76. }
  77. else if (planStat === "1")
  78. {
  79. strPlanStat = "已完成";
  80. materialcheckplan_btn_submit.visible = false;
  81. materialcheckplan_btn_proceed_check.visible = false;
  82. materialcheckplan_btn_sign.visible = false;
  83. materialcheckplan_btn_start_check.visible = false;
  84. materialcheckplan_btn_return.visible = true;
  85. materialcheckplan_rect_main.visible = false;
  86. materialcheckplan_text_plan_title.visible = true;
  87. }
  88. else
  89. {
  90. materialcheckplan_btn_submit.visible = false;
  91. materialcheckplan_btn_proceed_check.visible = false;
  92. materialcheckplan_btn_sign.visible = false;
  93. materialcheckplan_btn_start_check.visible = true;
  94. materialcheckplan_btn_return.visible = true;
  95. materialcheckplan_rect_main.visible = false;
  96. materialcheckplan_text_plan_title.visible = false;
  97. }
  98. materialcheckplan_text_plan_date.text = "计划日期:" + planDate;
  99. materialcheckplan_text_plan_stat.text = "计划状态:" + strPlanStat;
  100. if (signatureImg === "" || signatureImg === null)
  101. {
  102. materialcheckplan_text_sign.visible = true;
  103. materialcheckplan_image_sign.visible = false;
  104. materialcheckplan_image_sign.source = "";
  105. materialCheckSign.imageData = "";
  106. }
  107. else
  108. {
  109. materialcheckplan_text_sign.visible = false;
  110. materialcheckplan_image_sign.visible = true;
  111. materialcheckplan_image_sign.source = signatureImg;
  112. materialCheckSign.imageData = signatureImg;
  113. }
  114. var jsonArrList = jsonObjData.list;
  115. for (var i = 0; i < jsonArrList.length; ++i)
  116. {
  117. var jsonObjList = jsonArrList[i];
  118. var materialType = jsonObjList.materialsTypeName;
  119. var materialIcon = jsonObjList.materialsTypeIcon;
  120. var mainNumber = jsonObjList.allNumber;
  121. var lendNumber = jsonObjList.loanNumber;
  122. var waitNumber = jsonObjList.checkNumber;
  123. var normalNumber = jsonObjList.normalNumber;
  124. var expireNumber = jsonObjList.timeoutNumber;
  125. var damageNumber = jsonObjList.badNumber;
  126. materialcheckplan_tableModel.append({
  127. materialType: materialType,
  128. materialIcon: materialIcon,
  129. mainNumber: mainNumber,
  130. lendNumber: lendNumber,
  131. waitNumber: waitNumber,
  132. normalNumber: normalNumber,
  133. expireNumber: expireNumber,
  134. damageNumber: damageNumber,
  135. });
  136. }
  137. }
  138. else
  139. {
  140. materialcheckplan_text_plan_date.text = "";
  141. materialcheckplan_text_plan_stat.text = "";
  142. // infoPromptBox.title("提示");
  143. // infoPromptBox.message(jsonObjRoot.msg);
  144. // infoPromptBox.button_clear();
  145. // infoPromptBox.button_push("#055eb3", "确定", null, null);
  146. // infoPromptBox.show();
  147. materialcheckplan_btn_submit.visible = false;
  148. materialcheckplan_btn_proceed_check.visible = false;
  149. materialcheckplan_btn_sign.visible = false;
  150. materialcheckplan_btn_start_check.visible = false;
  151. materialcheckplan_btn_return.visible = true;
  152. materialcheckplan_rect_main.visible = false;
  153. materialcheckplan_text_plan_title.visible = true;
  154. }
  155. waitPromptBox.hide();
  156. });
  157. }
  158. else
  159. {
  160. materialcheckplan_tableModel.clear();
  161. materialcheckplan_btn_submit.visible = false;
  162. materialcheckplan_btn_proceed_check.visible = false;
  163. materialcheckplan_btn_sign.visible = false;
  164. materialcheckplan_btn_start_check.visible = true;
  165. materialcheckplan_btn_return.visible = true;
  166. }
  167. }
  168. }
  169. ListModel {
  170. id: materialcheckplan_tableModel
  171. }
  172. // 提交结果
  173. Button {
  174. id: materialcheckplan_btn_submit
  175. x: 928
  176. y: 835
  177. width: 192
  178. height: 75
  179. background: Rectangle {
  180. color: "#ff9900"
  181. radius: 10
  182. }
  183. text: qsTr("提交结果")
  184. font.pixelSize: 30
  185. palette.buttonText: "white"
  186. Connections {
  187. target: materialcheckplan_btn_submit
  188. onClicked: {
  189. // materialcheckplan_dialog_submit.open();
  190. infoPromptBox.title("操作确认");
  191. infoPromptBox.message("确定要开始提交结果吗?");
  192. infoPromptBox.button_clear();
  193. infoPromptBox.button_push("red", "取消", null, null);
  194. infoPromptBox.button_push(
  195. "#055eb3", "确定", ()=>{
  196. var taskType = InteractiveTask.TypeHttpPost_insertSubmitPlan;
  197. interactiveCore.appendTask(
  198. taskType, null, (data) =>{
  199. // 解析返回结果
  200. var jsonObjRoot = JSON.parse(data);
  201. if (jsonObjRoot.code === 200)
  202. {
  203. infoPromptBox.title("提交成功");
  204. infoPromptBox.message("检查结果提交成功");
  205. infoPromptBox.button_clear();
  206. infoPromptBox.button_push("#055eb3", "确定", null, null);
  207. infoPromptBox.show();
  208. materialCheckPlan.visible = false;
  209. materialSelmodel.visible = true;
  210. proThread.slot_getMaterial();
  211. }
  212. else
  213. {
  214. infoPromptBox.title("提交失败");
  215. infoPromptBox.message(jsonObjRoot.msg);
  216. infoPromptBox.button_clear();
  217. infoPromptBox.button_push("#055eb3", "确定", null, null);
  218. infoPromptBox.show();
  219. }
  220. });
  221. }, null);
  222. infoPromptBox.show();
  223. }
  224. }
  225. }
  226. // 继续检查
  227. Button {
  228. id: materialcheckplan_btn_proceed_check
  229. x: 1168
  230. y: 835
  231. width: 192
  232. height: 75
  233. visible: false
  234. background: Rectangle {
  235. color: "#ff0000" // 设置背景为透明
  236. radius: 10 // 可选,设置圆角
  237. }
  238. text: qsTr("继续检查")
  239. font.pixelSize: 30
  240. palette.buttonText: "white" // 设置字体颜色为绿色
  241. Connections {
  242. target: materialcheckplan_btn_proceed_check
  243. onClicked: {
  244. mainScreen.changeModel_text("物资检查表");
  245. materialCheckForm.visible = true;
  246. materialCheckPlan.visible = false;
  247. mainScreen.resetLogin_timeout();
  248. takebackstat = true;
  249. pConfig.mtakebackstat = true;
  250. pConfig.imaterworkstat = 4;
  251. signal_openLock();
  252. }
  253. }
  254. }
  255. // 开始检查
  256. Button {
  257. id: materialcheckplan_btn_start_check
  258. x: 1168
  259. y: 835
  260. width: 192
  261. height: 75
  262. background: Rectangle {
  263. color: "#ff0000" // 设置背景为透明
  264. radius: 10 // 可选,设置圆角
  265. }
  266. text: qsTr("开始检查")
  267. font.pixelSize: 30
  268. palette.buttonText: "white" // 设置字体颜色为绿色
  269. Connections {
  270. target: materialcheckplan_btn_start_check
  271. onClicked: {
  272. // materialcheckplan_dialog_confirm.open();
  273. infoPromptBox.title("操作确认");
  274. infoPromptBox.message("确定要开始检查物资吗?");
  275. infoPromptBox.button_clear();
  276. infoPromptBox.button_push("red", "取消", null, null);
  277. infoPromptBox.button_push(
  278. "#055eb3", "确定", ()=>{
  279. var taskType = InteractiveTask.TypeHttpPost_startCheckPlan;
  280. interactiveCore.appendTask(
  281. taskType, null, ()=>{
  282. mainScreen.changeModel_text("物资检查表");
  283. materialCheckForm.visible = true;
  284. materialCheckPlan.visible = false;
  285. mainScreen.resetLogin_timeout();
  286. takebackstat = true;
  287. pConfig.mtakebackstat = true;
  288. pConfig.imaterworkstat = 4;
  289. signal_openLock();
  290. });
  291. }, null);
  292. infoPromptBox.show();
  293. }
  294. }
  295. }
  296. // 返回按钮
  297. Button {
  298. id: materialcheckplan_btn_return
  299. x: 1408
  300. y: 835
  301. width: 192
  302. height: 75
  303. background: Rectangle {
  304. color: "#055eb3" // 设置背景为透明
  305. radius: 10 // 可选,设置圆角
  306. }
  307. text: qsTr("返回")
  308. font.pixelSize: 30
  309. palette.buttonText: "white" // 设置字体颜色为绿色
  310. Connections {
  311. target: materialcheckplan_btn_return
  312. onClicked: {
  313. materialcheckplan.visible = false;
  314. materialSelmodel.visible = true;
  315. mainScreen.resetLogin_timeout();
  316. }
  317. }
  318. }
  319. // 标题区域
  320. Text {
  321. id: materialcheckplan_text_plan_title
  322. x: 0
  323. y: 0
  324. width: 1600
  325. height: 90
  326. text: "当前无可执行的检查计划"
  327. font.pixelSize: 30
  328. color: "#d7d7d2"
  329. horizontalAlignment: Text.AlignLeft
  330. verticalAlignment: Text.AlignVCenter
  331. leftPadding: 20 // 添加左边距使文本不紧贴边缘
  332. }
  333. // 主体区域
  334. Rectangle {
  335. id: materialcheckplan_rect_main
  336. width: 1600
  337. height: 800
  338. color: "#272b7ae9"
  339. radius: 20
  340. clip: true
  341. // 签名
  342. Rectangle {
  343. id: materialcheckplan_btn_sign
  344. x: 1400
  345. y: 25
  346. width: 180
  347. height: 50
  348. color: "#008000"
  349. radius: 10
  350. Text
  351. {
  352. id: materialcheckplan_text_sign
  353. // anchors.fill: parent
  354. anchors.centerIn: parent
  355. text: qsTr("签名")
  356. font.pixelSize: 30
  357. color: "#ffffff"
  358. }
  359. Image {
  360. id: materialcheckplan_image_sign;
  361. anchors.fill: parent
  362. }
  363. MouseArea
  364. {
  365. anchors.fill: parent
  366. onClicked: {
  367. materialCheckPlan.visible = false;
  368. materialCheckSign.visible = true;
  369. mainScreen.resetLogin_timeout();
  370. }
  371. }
  372. }
  373. // 计划日期区域
  374. Text {
  375. id: materialcheckplan_text_plan_date
  376. x: 0
  377. y: 0
  378. width: 1600
  379. height: 90
  380. text: "计划日期:"
  381. font.pixelSize: 30
  382. color: "#d7d7d2"
  383. horizontalAlignment: Text.AlignLeft
  384. verticalAlignment: Text.AlignVCenter
  385. leftPadding: 20 // 添加左边距使文本不紧贴边缘
  386. }
  387. // 计划状态区域
  388. Text {
  389. id: materialcheckplan_text_plan_stat
  390. x: 0
  391. y: 0
  392. width: 1600
  393. height: 90
  394. text: "计划状态:"
  395. font.pixelSize: 30
  396. color: "#d7d7d2"
  397. horizontalAlignment: Text.AlignLeft
  398. verticalAlignment: Text.AlignVCenter
  399. leftPadding: 360 // 添加左边距使文本不紧贴边缘
  400. }
  401. // 表格区域
  402. Rectangle {
  403. x: 10
  404. y: 90
  405. width: 1580
  406. height: 700
  407. color: "#272b7ae9"
  408. radius: 20
  409. // 表格
  410. Column {
  411. anchors.fill: parent
  412. spacing: 0
  413. // 表头
  414. Row {
  415. id: materialcheckplan_header
  416. width: parent.width
  417. height: 100
  418. spacing: 0
  419. Repeater {
  420. model: ["物资类型", "总数量", "借出数量", "待检数量", "正常数量", "过期数量", "损坏数量"]
  421. Rectangle {
  422. width: parent.width / 7
  423. height: parent.height
  424. color: "#33ffffff"
  425. border.color: "#47bfff"
  426. clip: true
  427. Text {
  428. anchors.centerIn: parent
  429. text: modelData
  430. font.pixelSize: 25
  431. color: "#d7d7d2"
  432. font.bold: true
  433. }
  434. }
  435. }
  436. }
  437. // 表格内容
  438. ListView {
  439. width: parent.width
  440. height: parent.height - materialcheckplan_header.height
  441. clip: true
  442. model: materialcheckplan_tableModel
  443. delegate: Row {
  444. width: 1580
  445. height: 100
  446. spacing: 0
  447. property var rowData: [mainNumber, lendNumber, waitNumber, normalNumber, expireNumber, damageNumber]
  448. Rectangle {
  449. width: parent.width / 7
  450. height: parent.height
  451. color: "#272b7ae9"
  452. border.color: "#47bfff"
  453. ToolButton
  454. {
  455. anchors.centerIn: parent
  456. enabled: false // 不可点击
  457. display: AbstractButton.TextBesideIcon // 文字在图标旁边
  458. icon.source: model.materialIcon
  459. icon.width: 36
  460. icon.height: 30
  461. text: model.materialType
  462. palette.buttonText: "#d7d7d2"
  463. font {
  464. pixelSize: 25
  465. }
  466. }
  467. }
  468. Repeater {
  469. model: 6
  470. Rectangle {
  471. width: parent.width / 7
  472. height: parent.height
  473. color: "#272b7ae9"
  474. border.color: "#47bfff"
  475. Text {
  476. anchors.centerIn: parent
  477. font.pixelSize: 25
  478. color: "#d7d7d2"
  479. text: parent.parent.rowData[index]
  480. }
  481. }
  482. }
  483. }
  484. }
  485. }
  486. }
  487. }
  488. function slot_getMaterialCheckPlan(data)
  489. {
  490. slot_postSubmit(data);
  491. strMaterialCheckPlanGet = data;
  492. materialcheckplan_tableModel.clear();
  493. materialCheckSign.imageData = "";
  494. var jsonObjRoot = JSON.parse(data);
  495. if (jsonObjRoot.code === 200)
  496. {
  497. var jsonObjData = jsonObjRoot.data;
  498. planId = jsonObjData.planId;
  499. pConfig.setScurrentPlanId(parseInt(planId));
  500. var planDate = jsonObjData.planDate;
  501. var planStat = jsonObjData.status;
  502. var strPlanStat = "未定义";
  503. var signatureImg = jsonObjData.signatureImg;
  504. if (planStat === "0")
  505. {
  506. strPlanStat = "待开始";
  507. materialcheckplan_btn_submit.visible = false;
  508. materialcheckplan_btn_proceed_check.visible = false;
  509. materialcheckplan_btn_sign.visible = false;
  510. materialcheckplan_btn_start_check.visible = true;
  511. materialcheckplan_btn_return.visible = true;
  512. }
  513. else if (planStat === "1")
  514. {
  515. strPlanStat = "已完成";
  516. materialcheckplan_btn_submit.visible = false;
  517. materialcheckplan_btn_proceed_check.visible = false;
  518. materialcheckplan_btn_sign.visible = false;
  519. materialcheckplan_btn_start_check.visible = false;
  520. materialcheckplan_btn_return.visible = true;
  521. }
  522. else if (planStat === "2")
  523. {
  524. strPlanStat = "进行中";
  525. materialcheckplan_btn_submit.visible = true;
  526. materialcheckplan_btn_proceed_check.visible = true;
  527. materialcheckplan_btn_sign.visible = true;
  528. materialcheckplan_btn_start_check.visible = false;
  529. materialcheckplan_btn_return.visible = true;
  530. }else
  531. {
  532. materialcheckplan_btn_submit.visible = false;
  533. materialcheckplan_btn_proceed_check.visible = false;
  534. materialcheckplan_btn_sign.visible = false;
  535. materialcheckplan_btn_start_check.visible = true;
  536. materialcheckplan_btn_return.visible = true;
  537. }
  538. materialcheckplan_text_plan_date.text = "计划日期:" + planDate;
  539. materialcheckplan_text_plan_stat.text = "计划状态:" + strPlanStat;
  540. if (signatureImg === "" || signatureImg === null)
  541. {
  542. materialcheckplan_text_sign.visible = true;
  543. materialcheckplan_image_sign.visible = false;
  544. materialCheckSign.imageData = "";
  545. }
  546. else
  547. {
  548. materialcheckplan_text_sign.visible = false;
  549. materialcheckplan_image_sign.visible = true;
  550. materialcheckplan_image_sign.source = signatureImg;
  551. materialCheckSign.imageData = signatureImg;
  552. }
  553. var jsonArrList = jsonObjData.list;
  554. for (var i = 0; i < jsonArrList.length; ++i)
  555. {
  556. var jsonObjList = jsonArrList[i];
  557. var materialType = jsonObjList.materialsTypeName;
  558. var materialIcon = jsonObjList.materialsTypeIcon;
  559. var mainNumber = jsonObjList.allNumber;
  560. var lendNumber = jsonObjList.loanNumber;
  561. var waitNumber = jsonObjList.checkNumber;
  562. var normalNumber = jsonObjList.normalNumber;
  563. var expireNumber = jsonObjList.timeoutNumber;
  564. var damageNumber = jsonObjList.badNumber;
  565. materialcheckplan_tableModel.append({
  566. materialType: materialType,
  567. materialIcon: materialIcon,
  568. mainNumber: mainNumber,
  569. lendNumber: lendNumber,
  570. waitNumber: waitNumber,
  571. normalNumber: normalNumber,
  572. expireNumber: expireNumber,
  573. damageNumber: damageNumber,
  574. });
  575. }
  576. }
  577. }
  578. function slot_postSubmit(data)
  579. {
  580. var jsonObjRoot = JSON.parse(data);
  581. if (jsonObjRoot.code === 200)
  582. {
  583. // materialchecksign_prompt_info.promptInfoTimeout = 3;
  584. // materialchecksign_prompt_info.promptInfoText = jsonObjRoot.msg;
  585. // materialchecksign_prompt_info.promptInfoIcon = "qrc:/png/error.png"
  586. // materialchecksign_prompt_info.promptInfoColor = "#6600ff00"
  587. }
  588. else
  589. {
  590. materialcheckplan_prompt_info.promptInfoTimeout = 3;
  591. materialcheckplan_prompt_info.promptInfoText = jsonObjRoot.msg;
  592. materialcheckplan_prompt_info.promptInfoIcon = "qrc:/png/error.png"
  593. materialcheckplan_prompt_info.promptInfoColor = "#66ea3a0e"
  594. }
  595. }
  596. function lockStat_callback(left, right)
  597. {
  598. if(left === false || right === false)
  599. {
  600. opendoor = true;
  601. if(takebackstat === true)
  602. {
  603. signal_takebackstat(true);
  604. }
  605. }
  606. else if(left === true && right === true)
  607. {
  608. opendoor = false;
  609. if(takebackstat === true)
  610. {
  611. startReader();
  612. takebackstat = false;
  613. signal_takebackstat(false);
  614. pConfig.smaterialStock = true;
  615. // 开始读rfid
  616. mainScreen.switchViewOffEx();
  617. materialStocktaking.set_userinfo();
  618. materialStocktaking.materiallistclear();
  619. materialStocktaking.visible = true;
  620. mainScreen.resetLogin_timeout();
  621. }
  622. }
  623. }
  624. function start_plan(isStart)
  625. {
  626. mainScreen.changeModel_text("物资检查表");
  627. materialCheckForm.visible = true;
  628. materialCheckPlan.visible = false;
  629. materialcheckplan_dialog_confirm.close()
  630. takebackstat = true;
  631. pConfig.mtakebackstat = true;
  632. pConfig.imaterworkstat = 4;
  633. signal_openLock();
  634. }
  635. }