Quellcode durchsuchen

接口互不影响

yanghao vor 18 Stunden
Ursprung
Commit
0f8bd1b793
1 geänderte Dateien mit 129 neuen und 140 gelöschten Zeilen
  1. 129 140
      src/views/flow/index.vue

+ 129 - 140
src/views/flow/index.vue

@@ -674,6 +674,7 @@ let crmTasks = ref([]);
 let srmTasks = ref([]);
 let ehrTasks = ref([]);
 const statsLoading = ref(true);
+let statsTimer = null;
 
 const statNumbers = reactive({
   todo: 0,
@@ -713,6 +714,124 @@ const doneCount = ref([
   { name: "SRM", value: 0 },
 ]);
 
+const withFallback = async (request, fallback, requestName) => {
+  try {
+    return await request;
+  } catch (error) {
+    console.error(`${requestName} failed:`, error);
+    return fallback;
+  }
+};
+
+const loadTaskStats = async (pageSize = 10) => {
+  if (!userStore.getUser.username) {
+    statNumbers.todo = 0;
+    statNumbers.done = 0;
+    todoCount.value = [
+      { name: "OA", value: 0 },
+      { name: "CRM", value: 0 },
+      { name: "SRM", value: 0 },
+      { name: "EHR", value: 0 },
+    ];
+    doneCount.value = [
+      { name: "OA", value: 0 },
+      { name: "CRM", value: 0 },
+      { name: "SRM", value: 0 },
+    ];
+    return;
+  }
+
+  const username = userStore.getUser.username;
+  const [oaRes, crmRes, srmRes, ehrRes, crmDoneRes, srmDoneRes] =
+    await Promise.all([
+      withFallback(
+        getOATasks({
+          id: username,
+          pageNum: 1,
+          pageSize,
+        }),
+        { todoCount: 0, doneCount: 0, todoList: [], doneList: [] },
+        "getOATasks",
+      ),
+      withFallback(
+        getCRMTasks({
+          id: username,
+          type: "pending",
+          pageNum: 1,
+          pageSize: 10,
+        }),
+        { todoCount: 0 },
+        "getCRMTasks(pending)",
+      ),
+      withFallback(
+        getSRMTasks({
+          id: username,
+          pageNum: 1,
+          pageSize: 10,
+        }),
+        { todoCount: 0, doneCount: 0 },
+        "getSRMTasks(todo)",
+      ),
+      withFallback(
+        getEHRTasks({
+          id: username,
+          pageNum: 1,
+          pageSize: 10,
+        }),
+        { todoCount: 0 },
+        "getEHRTasks",
+      ),
+      withFallback(
+        getCRMTasks({
+          id: username,
+          type: "approved",
+          pageNum: 1,
+          pageSize: 10,
+        }),
+        { todoCount: 0 },
+        "getCRMTasks(approved)",
+      ),
+      withFallback(
+        getSRMTasks({
+          id: username,
+          pageNum: 1,
+          pageSize: 10,
+        }),
+        { todoCount: 0, doneCount: 0 },
+        "getSRMTasks(done)",
+      ),
+    ]);
+
+  oaTasks.value = oaRes;
+  crmTasks.value = crmRes;
+  srmTasks.value = srmRes;
+  ehrTasks.value = ehrRes;
+
+  statNumbers.todo =
+    Number(oaRes.todoCount ?? 0) +
+    Number(crmRes.todoCount ?? 0) +
+    Number(srmRes.todoCount ?? 0) +
+    Number(ehrRes.todoCount ?? 0);
+
+  todoCount.value = [
+    { name: "OA", value: oaRes.todoCount ?? 0 },
+    { name: "CRM", value: crmRes.todoCount ?? 0 },
+    { name: "SRM", value: srmRes.todoCount ?? 0 },
+    { name: "EHR", value: ehrRes.todoCount ?? 0 },
+  ];
+
+  statNumbers.done =
+    Number(oaRes.doneCount ?? 0) +
+    Number(crmDoneRes.todoCount ?? 0) +
+    Number(srmDoneRes.doneCount ?? 0);
+
+  doneCount.value = [
+    { name: "OA", value: oaRes.doneCount ?? 0 },
+    { name: "CRM", value: crmDoneRes.todoCount ?? 0 },
+    { name: "SRM", value: srmDoneRes.doneCount ?? 0 },
+  ];
+};
+
 onMounted(async () => {
   getAll();
   // 等待 DOM 与样式生效,避免移动端首屏尺寸为 0
@@ -725,150 +844,16 @@ onMounted(async () => {
 
   if (userStore.getUser.username) {
     try {
-      const res = await getOATasks({
-        id: userStore.getUser.username,
-        pageNum: 1,
-        pageSize: 99,
-      });
-      oaTasks.value = res;
-
-      const crmRes = await getCRMTasks({
-        id: userStore.getUser.username,
-        type: "pending",
-        pageNum: 1,
-        pageSize: 10,
-      });
-      crmTasks.value = crmRes;
-
-      const srmRes = await getSRMTasks({
-        id: userStore.getUser.username,
-
-        pageNum: 1,
-        pageSize: 10,
-      });
-
-      srmTasks.value = srmRes;
-
-      const ehrRes = await getEHRTasks({
-        id: userStore.getUser.username,
-        pageNum: 1,
-        pageSize: 10,
-      });
-
-      ehrTasks.value = ehrRes;
-
-      statNumbers.todo =
-        Number(oaTasks.value.todoCount) +
-        Number(crmTasks.value.todoCount) +
-        Number(srmTasks.value.todoCount) +
-        Number(ehrTasks.value.todoCount);
-      todoCount.value = [
-        { name: "OA", value: oaTasks.value.todoCount ?? 0 },
-        { name: "CRM", value: crmTasks.value.todoCount ?? 0 },
-        { name: "SRM", value: srmTasks.value.todoCount ?? 0 },
-        { name: "EHR", value: ehrTasks.value.todoCount ?? 0 },
-      ];
-
-      // *****************已办事项统计*************************
-
-      const crmDoneRes = await getCRMTasks({
-        id: userStore.getUser.username,
-        type: "approved",
-        pageNum: 1,
-        pageSize: 10,
-      });
-
-      const srmDoneRes = await getSRMTasks({
-        id: userStore.getUser.username,
-
-        pageNum: 1,
-        pageSize: 10,
-      });
-
-      statNumbers.done =
-        Number(oaTasks.value.doneCount) +
-        Number(crmDoneRes.todoCount) +
-        Number(srmDoneRes.doneCount);
-
-      doneCount.value = [
-        { name: "OA", value: oaTasks.value.doneCount ?? 0 },
-        { name: "CRM", value: crmDoneRes.todoCount ?? 0 },
-        { name: "SRM", value: srmDoneRes.doneCount ?? 0 },
-      ];
+      await loadTaskStats(99);
     } finally {
       statsLoading.value = false;
     }
 
-    setInterval(
-      async () => {
-        const res = await getOATasks({
-          id: userStore.getUser.username,
-          pageNum: 1,
-          pageSize: 10,
-        });
-        oaTasks.value = res;
-
-        const crmRes = await getCRMTasks({
-          id: userStore.getUser.username,
-          type: "pending",
-          pageNum: 1,
-          pageSize: 10,
-        });
-        crmTasks.value = crmRes;
-
-        try {
-          const srmRes = await getSRMTasks({
-            id: userStore.getUser.username,
-            pageNum: 1,
-            pageSize: 10,
-          });
-
-          srmTasks.value = srmRes;
-        } catch (error) {
-          srmTasks.value.todoCount = 0;
-          srmTasks.value.doneCount = 0;
-        }
-
-        statNumbers.todo =
-          Number(oaTasks.value.todoCount) +
-          Number(crmTasks.value.todoCount) +
-          Number(srmTasks.value.todoCount);
-        todoCount.value = [
-          { name: "OA", value: oaTasks.value.todoCount ?? 0 },
-          { name: "CRM", value: crmTasks.value.todoCount ?? 0 },
-          { name: "SRM", value: srmTasks.value.todoCount ?? 0 },
-        ];
-
-        const crmDoneRes = await getCRMTasks({
-          id: userStore.getUser.username,
-          type: "approved",
-          pageNum: 1,
-          pageSize: 10,
-        });
-
-        let srmDoneRes = {};
-        try {
-          srmDoneRes = await getSRMTasks({
-            id: userStore.getUser.username,
-            pageNum: 1,
-            pageSize: 10,
-          });
-        } catch (error) {
-          srmDoneRes.doneCount = 0;
-        }
-        statNumbers.done =
-          Number(oaTasks.value.doneCount) +
-          Number(crmDoneRes.todoCount) +
-          Number(srmDoneRes.doneCount);
-
-        doneCount.value = [
-          { name: "OA", value: oaTasks.value.doneCount ?? 0 },
-          { name: "CRM", value: crmDoneRes.todoCount ?? 0 },
-          { name: "SRM", value: srmDoneRes.doneCount ?? 0 },
-        ];
-      },
-      10 * 60 * 1000,
-    ); // 每5分钟刷新一次
+    statsTimer = setInterval(() => {
+      loadTaskStats().catch((error) => {
+        console.error("loadTaskStats interval failed:", error);
+      });
+    }, 10 * 60 * 1000);
   } else {
     statsLoading.value = false;
   }
@@ -884,6 +869,10 @@ onBeforeUnmount(() => {
   if (tabsContainerRef.value) {
     tabsContainerRef.value.removeEventListener("scroll", handleTabScroll);
   }
+
+  if (statsTimer) {
+    clearInterval(statsTimer);
+  }
 });
 </script>