gtsoft-snail-job-admin/src/views/home/modules/line-retry-chart.vue

238 lines
4.9 KiB
Vue

<script setup lang="ts">
import { watch } from 'vue';
import { $t } from '@/locales';
import { useAppStore } from '@/store/modules/app';
import { useEcharts } from '@/hooks/common/echarts';
defineOptions({
name: 'LineRetryChart'
});
interface Props {
type?: number;
modelValue: Api.Dashboard.DashboardLine;
}
const props = withDefaults(defineProps<Props>(), {
type: 0
});
const appStore = useAppStore();
const { domRef, updateOptions } = useEcharts(() => ({
tabIndex: props.type,
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
data:
props.type === 0
? [
$t('common.success'),
$t('common.running'),
$t('page.manage.retryTask.status.maxRetryTimes'),
$t('page.manage.retryTask.status.pauseRetry')
]
: [$t('common.success'), $t('common.fail'), $t('common.stop'), $t('common.cancel')]
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'category',
boundaryGap: false,
data: [] as string[]
},
yAxis: {
type: 'value'
},
series: [
{
color: '#f5b386',
name: $t('common.success'),
type: 'line',
smooth: true,
stack: 'Total',
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0.25,
color: '#f5b386'
},
{
offset: 1,
color: '#fff'
}
]
}
},
emphasis: {
focus: 'series'
},
data: [] as number[]
},
{
color: '#40e9c5',
name: props.type === 0 ? $t('common.running') : $t('common.fail'),
type: 'line',
smooth: true,
stack: 'Total',
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0.25,
color: '#40e9c5'
},
{
offset: 1,
color: '#fff'
}
]
}
},
emphasis: {
focus: 'series'
},
data: []
},
{
color: '#b686d4',
name: props.type === 0 ? $t('page.manage.retryTask.status.maxRetryTimes') : $t('common.stop'),
type: 'line',
smooth: true,
stack: 'Total',
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0.25,
color: '#b686d4'
},
{
offset: 1,
color: '#fff'
}
]
}
},
emphasis: {
focus: 'series'
},
data: [] as number[]
},
{
color: '#ec6f6f',
name: props.type === 0 ? $t('page.manage.retryTask.status.pauseRetry') : $t('common.cancel'),
type: 'line',
smooth: true,
stack: 'Total',
areaStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0.25,
color: '#ec6f6f'
},
{
offset: 1,
color: '#fff'
}
]
}
},
emphasis: {
focus: 'series'
},
data: []
}
]
}));
const getData = () => {
updateOptions((opts, factory) => {
const originOpts = factory();
opts.legend.data = originOpts.legend.data;
opts.series[0].name = originOpts.series[0].name;
opts.series[1].name = originOpts.series[1].name;
opts.series[2].name = originOpts.series[2].name;
opts.series[3].name = originOpts.series[3].name;
opts.xAxis.data = props.modelValue?.dashboardLineResponseDOList.map(x => x.createDt);
opts.series[0].data = props.modelValue?.dashboardLineResponseDOList.map(x =>
opts.tabIndex === 0 ? x.successNum : x.success
);
opts.series[1].data = props.modelValue?.dashboardLineResponseDOList.map(x =>
opts.tabIndex === 0 ? x.runningNum : x.failNum
);
opts.series[2].data = props.modelValue?.dashboardLineResponseDOList.map(x =>
opts.tabIndex === 0 ? x.maxCountNum : x.stop
);
opts.series[3].data = props.modelValue?.dashboardLineResponseDOList.map(x =>
opts.tabIndex === 0 ? x.suspendNum : x.cancel
);
return opts;
});
};
watch(
() => appStore.locale,
() => {
getData();
}
);
watch(
() => props.modelValue,
() => {
getData();
}
);
watch(
() => props.type,
() => {
getData();
},
{ immediate: true }
);
</script>
<template>
<NCard :bordered="false" class="card-wrapper">
<div ref="domRef" class="h-360px overflow-hidden"></div>
</NCard>
</template>
<style scoped></style>