refactor(statistics): 重构统计数据获取逻辑

- 使用 Promise.allSettled 替代 Promise.all,提高容错性
- 添加详细的错误处理和日志记录,便于调试
- 优化用户、订单和销售额的计算逻辑,提高数据准确性
- 移除无效的 API 调用和冗余代码,简化代码结构
- 在 dashboard 页面添加刷新统计按钮,实现统计数据的强制刷新功能
This commit is contained in:
2025-09-07 13:18:09 +08:00
parent a0375d8a97
commit 7b6fac7c41
4 changed files with 142 additions and 78 deletions

View File

@@ -114,9 +114,9 @@
</template>
<script lang="ts" setup>
import {createVNode, ref} from 'vue';
import {message, Modal} from 'ant-design-vue';
import {ExclamationCircleOutlined, QrcodeOutlined} from '@ant-design/icons-vue';
import {ref} from 'vue';
import {message} from 'ant-design-vue';
import {QrcodeOutlined} from '@ant-design/icons-vue';
import type {EleProTable} from 'ele-admin-pro';
import {toDateString} from 'ele-admin-pro';
import type {
@@ -127,8 +127,6 @@ import WebsiteEdit from './components/websiteEdit.vue';
import Qrcode from '@/components/QrCode/index.vue';
import {
pageCmsWebsite,
removeCmsWebsite,
removeBatchCmsWebsite,
updateCmsWebsite
} from '@/api/cms/cmsWebsite';
import type {CmsWebsite, CmsWebsiteParam} from '@/api/cms/cmsWebsite/model';
@@ -148,8 +146,6 @@ const selection = ref<CmsWebsite[]>([]);
const current = ref<CmsWebsite | null>(null);
// 是否显示编辑弹窗
const showEdit = ref(false);
// 是否显示批量移动弹窗
const showMove = ref(false);
// 是否显示二维码
const showQrcode = ref(false);
// 二维码内容
@@ -265,11 +261,6 @@ const openEdit = (row?: CmsWebsite) => {
showEdit.value = true;
};
/* 打开批量移动弹窗 */
const openMove = () => {
showMove.value = true;
};
const updateType = (row: CmsWebsite) => {
updateCmsWebsite(row).then((msg) => {
message.success(msg);
@@ -286,48 +277,6 @@ const hideShare = () => {
showQrcode.value = false;
}
/* 删除单个 */
const remove = (row: CmsWebsite) => {
const hide = message.loading('请求中..', 0);
removeCmsWebsite(row.websiteId)
.then((msg) => {
hide();
message.success(msg);
reload();
})
.catch((e) => {
hide();
message.error(e.message);
});
};
/* 批量删除 */
const removeBatch = () => {
if (!selection.value.length) {
message.error('请至少选择一条数据');
return;
}
Modal.confirm({
title: '提示',
content: '确定要删除选中的记录吗?',
icon: createVNode(ExclamationCircleOutlined),
maskClosable: true,
onOk: () => {
const hide = message.loading('请求中..', 0);
removeBatchCmsWebsite(selection.value.map((d) => d.websiteId))
.then((msg) => {
hide();
message.success(msg);
reload();
})
.catch((e) => {
hide();
message.error(e.message);
});
}
});
};
/* 查询 */
const query = () => {
// 查询订单

View File

@@ -144,7 +144,7 @@
<ShopOutlined/>
站点管理
</a-button>
<a-button block @click="$router.push('/website/order')">
<a-button block @click="$router.push('/shopOrder')">
<CalendarOutlined/>
订单管理
</a-button>
@@ -154,7 +154,11 @@
</a-button>
<a-button block @click="$router.push('/system/login-record')">
<FileTextOutlined/>
系统日志
登录日志
</a-button>
<a-button block @click="refreshStatistics" :loading="loading">
<ReloadOutlined/>
刷新统计
</a-button>
<a-button block @click="clearSiteInfoCache">
<ClearOutlined/>
@@ -183,7 +187,8 @@ import {
AccountBookOutlined,
FileTextOutlined,
ClearOutlined,
MoneyCollectOutlined
MoneyCollectOutlined,
ReloadOutlined
} from '@ant-design/icons-vue';
import {message} from 'ant-design-vue/es';
import {openNew} from "@/utils/common";
@@ -233,6 +238,17 @@ const clearSiteInfoCache = () => {
);
};
// 刷新统计数据
const refreshStatistics = async () => {
try {
await statisticsStore.forceRefresh();
message.success('统计数据刷新成功');
} catch (error) {
console.error('刷新统计数据失败:', error);
message.error('刷新统计数据失败');
}
};
onMounted(async () => {
// 加载网站信息和统计数据
try {