|
|
@@ -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 =
|