| | |
| | | |
| | | import SummaryCard from '#/views/erp/home/modules/summary-card.vue'; |
| | | |
| | | import { useHomeAccess } from '#/utils/use-home-access'; |
| | | |
| | | import { defaultSummary } from './data'; |
| | | import BizCards from './modules/biz-cards.vue'; |
| | | import KpiCards from './modules/kpi-cards.vue'; |
| | |
| | | defineOptions({ name: 'DashboardAnalytics' }); |
| | | |
| | | const router = useRouter(); |
| | | |
| | | const { canQuery, canSeeMenu } = useHomeAccess(); |
| | | |
| | | /** MES 生产 KPI:数据取自首页汇总接口,没有该权限就取不到数 */ |
| | | const canViewSummary = computed(() => canQuery('mes:home:query')); |
| | | const showKpi = computed( |
| | | () => |
| | | canViewSummary.value && |
| | | (canSeeMenu('MesQcIqc') || canSeeMenu('MesDvMachinery')), |
| | | ); |
| | | const canViewSale = computed( |
| | | () => canQuery('erp:sale-order:query') && canSeeMenu('ErpSaleOrder'), |
| | | ); |
| | | const canViewPurchase = computed( |
| | | () => canQuery('erp:purchase-order:query') && canSeeMenu('ErpPurchaseOrder'), |
| | | ); |
| | | /** 金额概览是销售/采购的对照口径,只有一边有权限时不成卡片 */ |
| | | const showAmountSummary = computed( |
| | | () => canViewSale.value && canViewPurchase.value, |
| | | ); |
| | | |
| | | const greeting = computed(() => { |
| | | const hour = new Date().getHours(); |
| | |
| | | } |
| | | |
| | | async function loadStatistics() { |
| | | try { |
| | | const saleOrders = await fetchAllPages<ErpSaleOrderApi.SaleOrder>( |
| | | getSaleOrderPage, |
| | | ); |
| | | saleSummary.value = aggregatePrice(saleOrders); |
| | | } catch { |
| | | /* 接口异常或无权限 */ |
| | | if (canViewSale.value) { |
| | | try { |
| | | const saleOrders = await fetchAllPages<ErpSaleOrderApi.SaleOrder>( |
| | | getSaleOrderPage, |
| | | ); |
| | | saleSummary.value = aggregatePrice(saleOrders); |
| | | } catch { |
| | | /* 接口异常或无权限 */ |
| | | } |
| | | } |
| | | try { |
| | | const purchaseOrders = await fetchAllPages<ErpPurchaseOrderApi.PurchaseOrder>( |
| | | getPurchaseOrderPage, |
| | | ); |
| | | purchaseSummary.value = aggregatePrice(purchaseOrders); |
| | | } catch { |
| | | /* 接口异常或无权限 */ |
| | | if (canViewPurchase.value) { |
| | | try { |
| | | const purchaseOrders = |
| | | await fetchAllPages<ErpPurchaseOrderApi.PurchaseOrder>( |
| | | getPurchaseOrderPage, |
| | | ); |
| | | purchaseSummary.value = aggregatePrice(purchaseOrders); |
| | | } catch { |
| | | /* 接口异常或无权限 */ |
| | | } |
| | | } |
| | | } |
| | | |
| | | async function loadHomeSummary() { |
| | | if (!canViewSummary.value) return; |
| | | try { |
| | | homeSummary.value = await getHomeSummary(); |
| | | } catch { |
| | |
| | | </div> |
| | | |
| | | <!-- 质量 / 设备 KPI --> |
| | | <KpiCards :summary="homeSummary" @navigate="handleNavigate" /> |
| | | <KpiCards v-if="showKpi" :summary="homeSummary" @navigate="handleNavigate" /> |
| | | |
| | | <!-- ERP/WMS/BPM 经营 KPI --> |
| | | <BizCards @navigate="handleNavigate" /> |
| | | |
| | | <!-- 销售 / 采购 金额概览 --> |
| | | <div class="mb-4"> |
| | | <div v-if="showAmountSummary" class="mb-4"> |
| | | <SummaryCard |
| | | :purchase-summary="purchaseSummary" |
| | | :sale-summary="saleSummary" |