yanghao 3 giorni fa
parent
commit
653903898a
4 ha cambiato i file con 69 aggiunte e 35 eliminazioni
  1. 1 0
      components.d.ts
  2. 13 0
      src/components/home/header.vue
  3. 53 33
      src/views/flow/index.vue
  4. 2 2
      src/views/login.vue

+ 1 - 0
components.d.ts

@@ -25,6 +25,7 @@ declare module 'vue' {
     ElIcon: typeof import('element-plus/es')['ElIcon']
     ElInput: typeof import('element-plus/es')['ElInput']
     ElPopover: typeof import('element-plus/es')['ElPopover']
+    ElSkeleton: typeof import('element-plus/es')['ElSkeleton']
     ElTable: typeof import('element-plus/es')['ElTable']
     ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
     ElTabPane: typeof import('element-plus/es')['ElTabPane']

+ 13 - 0
src/components/home/header.vue

@@ -423,6 +423,19 @@ onMounted(async () => {
     messages.value = messageList;
   }
 
+  setInterval(
+    async () => {
+      if (isLoggedIn.value) {
+        await getNotifyMessages(userStore.getUser.username);
+        const messageList = await getNotifyMessageList(
+          userStore.getUser.username,
+        );
+        messages.value = messageList;
+      }
+    },
+    1000 * 60 * 1,
+  );
+
   setInterval(
     () => {
       if (userStore.getIsSetUser) {

+ 53 - 33
src/views/flow/index.vue

@@ -28,43 +28,53 @@
     <!-- 任务统计 -->
     <section class="total">
       <div class="total-card" v-for="(item, index) in stats" :key="index">
-        <el-popover
-          placement="top"
-          :width="200"
-          trigger="hover"
-          popper-class="glass-popover"
-          :disabled="getDetailList(index).length === 0"
-          raw-content
-          transition="el-zoom-in-top"
+        <el-skeleton
+          :rows="1"
+          :animated="true"
+          class="w-full"
+          v-if="item.number === 0"
         >
-          <template #reference>
-            <div class="card-wrapper">
-              <!-- ... 图标和内容 ... -->
-              <div class="card-icon" :style="{ backgroundColor: item.bgcolor }">
-                <Icon :icon="item.icon" :color="item.color" />
+          <el-popover
+            placement="top"
+            :width="200"
+            trigger="hover"
+            popper-class="glass-popover"
+            :disabled="getDetailList(index).length === 0"
+            raw-content
+            transition="el-zoom-in-top"
+          >
+            <template #reference>
+              <div class="card-wrapper">
+                <!-- ... 图标和内容 ... -->
+                <div
+                  class="card-icon"
+                  :style="{ backgroundColor: item.bgcolor }"
+                >
+                  <Icon :icon="item.icon" :color="item.color" />
+                </div>
+                <div class="card-content">
+                  <p class="card-title">{{ item.title }}</p>
+                  <p class="card-number">{{ item.number }}</p>
+                </div>
               </div>
-              <div class="card-content">
-                <p class="card-title">{{ item.title }}</p>
-                <p class="card-number">{{ item.number }}</p>
+            </template>
+
+            <div class="detail-list">
+              <div
+                v-for="(task, idx) in getDetailList(index)"
+                :key="idx"
+                class="detail-item"
+                @click="handleDetailClick(task, item.title)"
+              >
+                <span class="detail-name">{{ task.name }}</span>
+                <span class="detail-val">{{ task.value }}</span>
+              </div>
+              <div v-if="getDetailList(index).length === 0" class="empty-tip">
+                暂无详细数据
               </div>
             </div>
-          </template>
-
-          <div class="detail-list">
-            <div
-              v-for="(task, idx) in getDetailList(index)"
-              :key="idx"
-              class="detail-item"
-              @click="handleDetailClick(task, item.title)"
-            >
-              <span class="detail-name">{{ task.name }}</span>
-              <span class="detail-val">{{ task.value }}</span>
-            </div>
-            <div v-if="getDetailList(index).length === 0" class="empty-tip">
-              暂无详细数据
-            </div>
-          </div>
-        </el-popover>
+          </el-popover>
+        </el-skeleton>
       </div>
     </section>
 
@@ -533,6 +543,16 @@ onMounted(async () => {
 
     const crmRes = await getCRMTasks(userStore.getUser.username);
     crmTasks.value = crmRes;
+    setInterval(
+      async () => {
+        const res = await getOATasks(userStore.getUser.username);
+        oaTasks.value = res;
+
+        const crmRes = await getCRMTasks(userStore.getUser.username);
+        crmTasks.value = crmRes;
+      },
+      5 * 60 * 1000,
+    ); // 每5分钟刷新一次
   }
 
   stats.value[0].number =

+ 2 - 2
src/views/login.vue

@@ -21,7 +21,7 @@
         <h1 class="text-2xl font-bold text-center">登录</h1>
 
         <!-- 用户名密码登陆 -->
-        <!-- <div>
+        <div>
           <el-form
             :model="form"
             :rules="rules"
@@ -62,7 +62,7 @@
               >
             </div>
           </div>
-        </div> -->
+        </div>
 
         <!-- 钉钉登陆 -->
         <div class="text-center">