app.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. const pages = document.querySelectorAll(".page");
  2. const tabs = document.querySelectorAll("[data-tab]");
  3. const jumpers = document.querySelectorAll("[data-jump]");
  4. const toast = document.querySelector("#toast");
  5. let feedbackCount = 18;
  6. let redCount = 5;
  7. let auditCount = 11;
  8. let warningCount = 4;
  9. let weeklyCount = 55;
  10. let closureRate = 82;
  11. function activatePage(name) {
  12. pages.forEach((page) => {
  13. page.classList.toggle("active", page.dataset.page === name);
  14. if (page.dataset.page === name) page.scrollTop = 0;
  15. });
  16. tabs.forEach((tab) => {
  17. tab.classList.toggle("active", tab.dataset.tab === name);
  18. });
  19. }
  20. function showToast(message) {
  21. toast.textContent = message;
  22. toast.classList.add("show");
  23. window.clearTimeout(showToast.timer);
  24. showToast.timer = window.setTimeout(() => {
  25. toast.textContent = "";
  26. toast.classList.remove("show");
  27. }, 2200);
  28. }
  29. function updateMetrics() {
  30. document.querySelector("#mobileFeedbackCount").textContent = feedbackCount;
  31. document.querySelector("#mobileRedCount").textContent = redCount;
  32. document.querySelector("#mobileAuditCount").textContent = auditCount;
  33. document.querySelector("#warningCount").textContent = `${warningCount} 项`;
  34. document.querySelector("#pendingAuditText").textContent = `${Math.max(0, auditCount - 8)} 个`;
  35. document.querySelector("#weeklyCount").textContent = weeklyCount;
  36. document.querySelector("#closureRate").textContent = `${closureRate}%`;
  37. }
  38. tabs.forEach((tab) => {
  39. tab.addEventListener("click", () => activatePage(tab.dataset.tab));
  40. });
  41. jumpers.forEach((button) => {
  42. button.addEventListener("click", () => activatePage(button.dataset.jump));
  43. });
  44. document.querySelectorAll(".segmented button").forEach((button) => {
  45. button.addEventListener("click", () => {
  46. button.parentElement.querySelectorAll("button").forEach((item) => {
  47. item.classList.toggle("selected", item === button);
  48. });
  49. });
  50. });
  51. document.querySelector("#feedbackForm").addEventListener("submit", (event) => {
  52. event.preventDefault();
  53. const data = new FormData(event.currentTarget);
  54. const customer = data.get("customer") || "新客户";
  55. const level = data.get("level");
  56. const type = data.get("type");
  57. const status = data.get("status") || "已巡查";
  58. feedbackCount += 1;
  59. weeklyCount += 1;
  60. warningCount += 1;
  61. if (level === "红色预警" || status === "异常") redCount += 1;
  62. document.querySelector("#warningList").insertAdjacentHTML("afterbegin", `
  63. <li>
  64. <b>${level.replace("预警", "")}</b>
  65. <div>
  66. <strong>${customer} · ${type}</strong>
  67. <p>${status}:${data.get("summary")}</p>
  68. </div>
  69. </li>
  70. `);
  71. document.querySelector("#detailCustomer").textContent = customer;
  72. document.querySelector("#detailLevel").textContent = level;
  73. document.querySelector("#detailType").textContent = type;
  74. document.querySelector("#detailTimeline").insertAdjacentHTML("afterbegin", `
  75. <li>
  76. <strong>新日查反馈</strong>
  77. <p>${data.get("summary")}</p>
  78. <span>刚刚</span>
  79. </li>
  80. `);
  81. updateMetrics();
  82. showToast("每日巡查已提交,异常项已同步预警。");
  83. activatePage("home");
  84. });
  85. document.querySelector("#actionForm").addEventListener("submit", (event) => {
  86. event.preventDefault();
  87. auditCount += 1;
  88. document.querySelector("#auditIssueName").textContent = "肖女士木作收口整改";
  89. document.querySelector("#auditIssueDesc").textContent = "处置记录已提交,等待监察部核查。";
  90. updateMetrics();
  91. showToast("处置记录和满意度已保存,状态已同步到待核查。");
  92. });
  93. document.querySelector("#auditPassBtn").addEventListener("click", () => {
  94. auditCount = Math.max(0, auditCount - 1);
  95. closureRate = Math.min(99, closureRate + 1);
  96. updateMetrics();
  97. showToast("核查通过,问题已处理并进入复盘。");
  98. });
  99. document.querySelector("#auditRejectBtn").addEventListener("click", () => {
  100. redCount += 1;
  101. auditCount = Math.max(0, auditCount - 1);
  102. warningCount += 1;
  103. updateMetrics();
  104. showToast("已驳回整改,问题升级为红色预警。");
  105. });
  106. updateMetrics();