车间能级提升-智能设备管理系统
朱桂飞
2025-02-20 f0bb114ba37709cbe1aa55047fbf0c57cc07ab9d
eims-ui/apps/web-antd/src/views/eims/fixture/dashboard/index.vue
@@ -1,14 +1,104 @@
<script setup lang="ts">
import { AnalysisOverview, Page, WorkbenchTrends } from '@vben/common-ui';
import { onMounted, ref } from 'vue';
import { overviewItems, trendItems } from './data';
import { AnalysisOverview, type AnalysisOverviewItem, Page, type WorkbenchTrendItem, WorkbenchTrends } from '@vben/common-ui';
import { DictEnum } from '@vben/constants';
import { listFixture } from '#/api/eims/fixture';
import { operLogList } from '#/api/monitor/operlog';
import { dictDataInfo } from '#/api/system/dict/dict-data';
import { SYS_OPER_TYPE } from '#/constants/dict';
const fixtureList = ref<AnalysisOverviewItem[]>([
  {
    icon: 'svg:card',
    title: '工具总数',
    totalTitle: '工具总数',
    totalValue: 0,
    value: 0
  },
  {
    icon: 'svg:cake',
    title: '可用工具数',
    totalTitle: '可用工具数',
    totalValue: 0,
    value: 0
  },
  {
    icon: 'svg:download',
    title: '借出总数',
    totalTitle: '借出总数',
    totalValue: 0,
    value: 0
  },
  {
    icon: 'svg:bell',
    title: '最近更新',
    totalTitle: '最近更新',
    totalValue: 0,
    value: 0
  }
]);
const logList = ref<WorkbenchTrendItem[]>([]);
async function initFixtrueList() {
  const data = await listFixture({
    pageNum: 1,
    pageSize: 100_000
  });
  if (!data) {
    console.error('Failed to fetch data.');
    return;
  }
  const rows = data.rows;
  const now = Date.now(); // 获取当前时间的时间戳
  const sevenDaysAgo = now - 7 * 24 * 60 * 60 * 1000; // 计算7天前的时间戳
  const kongxian = rows.filter((item) => item.borrowStatus === '0' || item.borrowStatus === null);
  const jiechu = rows.filter((item) => item.borrowStatus === '1');
  const zuijin = rows.filter((item) => new Date(item.createTime).getTime() >= sevenDaysAgo);
  fixtureList.value[0]!.value = fixtureList.value[0]!.totalValue = data.total || 0;
  fixtureList.value[1]!.value = fixtureList.value[1]!.totalValue = kongxian.length;
  fixtureList.value[2]!.value = fixtureList.value[2]!.totalValue = jiechu.length;
  fixtureList.value[3]!.value = fixtureList.value[3]!.totalValue = zuijin.length;
}
async function initLogList() {
  const params = { title: '借用记录', orderByColumn: 'operTime', isAsc: 'desc' };
  const res = await operLogList({
    pageNum: 1,
    pageSize: 20,
    ...params
  });
  let list = res?.rows;
  list = list.filter((i) => i.businessType.toString() === SYS_OPER_TYPE.ADD || i.businessType.toString() === SYS_OPER_TYPE.EDIT);
  list = list.filter((i) => i.jsonResult !== null && JSON.parse(i.jsonResult).code === 200);
  const recordStatusList = await dictDataInfo(DictEnum.FIXTURE_BORROW_RECORD_STATUS);
  list.forEach((row) => {
    const operParam = JSON.parse(row.operParam);
    const label = recordStatusList.find((item) => item.dictValue === operParam.status)?.dictLabel;
    logList.value.push({
      avatar: 'svg:avatar-1',
      content: `${row?.deptName}  ${row?.operName} <a>${label}</a> ${operParam?.fixtureName} `,
      date: row.operTime,
      title: row.title
    });
  });
}
onMounted(() => {
  initFixtrueList();
  initLogList();
});
</script>
<template>
  <Page :auto-content-height="true">
    <div class="h-full">
      <AnalysisOverview :items="overviewItems" />
      <WorkbenchTrends :items="trendItems" class="mt-5" title="最新动态" />
      <AnalysisOverview :items="fixtureList" />
      <WorkbenchTrends :items="logList" class="mt-5" title="最新动态" />
      <div class="h-5"></div>
    </div>
  </Page>