2024-03-08 17:59:45 +08:00
|
|
|
<script setup lang="ts">
|
2024-03-22 11:22:07 +08:00
|
|
|
import { computed, ref } from 'vue';
|
2024-03-21 10:57:53 +08:00
|
|
|
import { useAppStore } from '@/store/modules/app';
|
2024-03-22 11:22:07 +08:00
|
|
|
import { fetchCardCount } from '@/service/api';
|
2024-03-08 17:59:45 +08:00
|
|
|
import HeaderBanner from './modules/header-banner.vue';
|
|
|
|
import CardData from './modules/card-data.vue';
|
|
|
|
import LineChart from './modules/line-chart.vue';
|
|
|
|
import PieChart from './modules/pie-chart.vue';
|
|
|
|
import ProjectNews from './modules/project-news.vue';
|
2024-03-28 16:22:18 +08:00
|
|
|
import RetryTab from './modules/retry-tab.vue';
|
2024-03-08 17:59:45 +08:00
|
|
|
import CreativityBanner from './modules/creativity-banner.vue';
|
2024-03-21 10:57:53 +08:00
|
|
|
|
|
|
|
const appStore = useAppStore();
|
|
|
|
const gap = computed(() => (appStore.isMobile ? 0 : 16));
|
2024-03-22 11:22:07 +08:00
|
|
|
const cardCount = ref<Api.Dashboard.CardCount>();
|
2024-03-28 16:22:18 +08:00
|
|
|
const tabParams = ref<Api.Dashboard.DashboardLineParams>({
|
|
|
|
type: 'WEEK'
|
|
|
|
});
|
2024-03-30 17:55:53 +08:00
|
|
|
const dateRange = ref<[number, number] | null>();
|
|
|
|
const formattedValue = ref<[string, string] | null>(
|
|
|
|
tabParams.value.startTime && tabParams.value.endTime ? [tabParams.value.startTime, tabParams.value.endTime] : null
|
|
|
|
);
|
2024-03-22 11:22:07 +08:00
|
|
|
|
|
|
|
const getCardData = async () => {
|
|
|
|
const { data: cardData, error } = await fetchCardCount();
|
|
|
|
if (!error) {
|
|
|
|
cardCount.value = cardData;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
getCardData();
|
2024-03-30 17:55:53 +08:00
|
|
|
|
|
|
|
const onUpdateDate = (value: [string, string]) => {
|
|
|
|
if (value) {
|
|
|
|
tabParams.value.type = 'OTHERS';
|
|
|
|
tabParams.value.startTime = value[0];
|
|
|
|
tabParams.value.endTime = value[1];
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const onClearDate = () => {
|
|
|
|
tabParams.value.type = 'WEEK';
|
|
|
|
tabParams.value.startTime = undefined;
|
|
|
|
tabParams.value.endTime = undefined;
|
|
|
|
};
|
|
|
|
|
|
|
|
const onUpdateType = (value: string) => {
|
|
|
|
if (value !== 'OTHERS') {
|
|
|
|
dateRange.value = null;
|
|
|
|
formattedValue.value = null;
|
|
|
|
tabParams.value.startTime = undefined;
|
|
|
|
tabParams.value.endTime = undefined;
|
|
|
|
}
|
|
|
|
};
|
2024-03-08 17:59:45 +08:00
|
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
2024-03-21 10:57:53 +08:00
|
|
|
<NSpace vertical :size="16">
|
2024-03-08 17:59:45 +08:00
|
|
|
<HeaderBanner />
|
2024-03-28 16:22:18 +08:00
|
|
|
<CardData :model-value="cardCount!" />
|
|
|
|
<NCard :bordered="false" class="card-wrapper">
|
|
|
|
<div class="relative">
|
|
|
|
<NTabs type="line" animated>
|
|
|
|
<NTabPane name="retryTask" :tab="$t('page.home.retryTask')">
|
2024-03-30 17:55:53 +08:00
|
|
|
<RetryTab :type="0" :line-params="tabParams" />
|
2024-03-28 16:22:18 +08:00
|
|
|
</NTabPane>
|
|
|
|
<NTabPane name="jobTask" :tab="$t('page.home.jobTask')">
|
2024-03-30 17:55:53 +08:00
|
|
|
<RetryTab :type="1" :line-params="tabParams" />
|
2024-03-28 16:22:18 +08:00
|
|
|
</NTabPane>
|
|
|
|
</NTabs>
|
2024-03-30 17:55:53 +08:00
|
|
|
<div class="absolute right-40px top-0 flex gap-16px">
|
|
|
|
<NRadioGroup v-model:value="tabParams.type" @update:value="onUpdateType">
|
2024-03-28 16:22:18 +08:00
|
|
|
<NRadioButton value="DAY" label="今日" />
|
|
|
|
<NRadioButton value="WEEK" label="最近一周" />
|
|
|
|
<NRadioButton value="MONTH" label="最近一月" />
|
|
|
|
<NRadioButton value="YEAR" label="全年" />
|
|
|
|
</NRadioGroup>
|
2024-03-30 17:55:53 +08:00
|
|
|
<NDatePicker
|
|
|
|
v-model:value="dateRange"
|
|
|
|
v-model:formatted-value="formattedValue"
|
|
|
|
value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
|
type="daterange"
|
|
|
|
class="w-300px"
|
|
|
|
clearable
|
|
|
|
@update:formatted-value="onUpdateDate"
|
|
|
|
@clear="onClearDate"
|
|
|
|
/>
|
|
|
|
<NSelect v-model:value="tabParams.groupName" class="w-200px" />
|
2024-03-28 16:22:18 +08:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</NCard>
|
2024-03-21 10:57:53 +08:00
|
|
|
<NGrid :x-gap="gap" :y-gap="16" responsive="screen" item-responsive>
|
|
|
|
<NGi span="24 s:24 m:14">
|
|
|
|
<NCard :bordered="false" class="card-wrapper">
|
2024-03-28 16:22:18 +08:00
|
|
|
<LineChart />
|
2024-03-21 10:57:53 +08:00
|
|
|
</NCard>
|
|
|
|
</NGi>
|
|
|
|
<NGi span="24 s:24 m:10">
|
|
|
|
<NCard :bordered="false" class="card-wrapper">
|
|
|
|
<PieChart />
|
|
|
|
</NCard>
|
|
|
|
</NGi>
|
|
|
|
</NGrid>
|
|
|
|
<NGrid :x-gap="gap" :y-gap="16" responsive="screen" item-responsive>
|
|
|
|
<NGi span="24 s:24 m:14">
|
2024-03-08 17:59:45 +08:00
|
|
|
<ProjectNews />
|
2024-03-21 10:57:53 +08:00
|
|
|
</NGi>
|
|
|
|
<NGi span="24 s:24 m:10">
|
2024-03-08 17:59:45 +08:00
|
|
|
<CreativityBanner />
|
2024-03-21 10:57:53 +08:00
|
|
|
</NGi>
|
|
|
|
</NGrid>
|
|
|
|
</NSpace>
|
2024-03-08 17:59:45 +08:00
|
|
|
</template>
|
|
|
|
|
|
|
|
<style scoped></style>
|