gaoluyang
16 小时以前 8a2832d02126f33596c125c855d7effe96d69da1
src/views/dashboard/analytics/index.vue
@@ -18,6 +18,8 @@
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';
@@ -26,6 +28,26 @@
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();
@@ -116,25 +138,31 @@
}
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 {
@@ -170,13 +198,13 @@
    </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"