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