feat: 为统计图表添加默认时间范围本地存储功能

- 在 StatsView 和 AnalyticsVisitView 中新增本地存储功能
- 默认时间范围从 30 天改为 7 天
- 加载页面时从 localStorage 读取保存的选项
- 切换时间范围时自动保存到 localStorage
This commit is contained in:
anghunk
2026-01-27 15:42:16 +08:00
parent 221a50b262
commit e5ffc48139
2 changed files with 54 additions and 2 deletions

View File

@@ -202,12 +202,13 @@ const overview = ref<VisitOverviewResponse>({
const items = ref<VisitPageItem[]>([]);
const visitTab = ref<"pv" | "latest">("pv");
const visitTabStorageKey = "cwd-analytics-visit-tab";
const chartRangeStorageKey = "cwd-analytics-visit-chart-range";
const injectedDomainFilter = inject<Ref<string> | null>("domainFilter", null);
const domainFilter = injectedDomainFilter ?? ref("");
const last30Days = ref<{ date: string; total: number }[]>([]);
const likeStatsItems = ref<LikeStatsItem[]>([]);
const chartRange = ref<"7" | "30">("30");
const chartRange = ref<"7" | "30">("7");
const toastMessage = ref("");
const toastType = ref<"success" | "error">("success");
@@ -318,6 +319,29 @@ function saveVisitTabToStorage(value: "pv" | "latest") {
}
}
function loadChartRangeFromStorage() {
if (typeof window === "undefined") {
return;
}
try {
const value = window.localStorage.getItem(chartRangeStorageKey);
if (value === "7" || value === "30") {
chartRange.value = value;
}
} catch {
}
}
function saveChartRangeToStorage(value: "7" | "30") {
if (typeof window === "undefined") {
return;
}
try {
window.localStorage.setItem(chartRangeStorageKey, value);
} catch {
}
}
async function loadData() {
loading.value = true;
listLoading.value = true;
@@ -451,6 +475,7 @@ function changeChartRange(range: "7" | "30") {
return;
}
chartRange.value = range;
saveChartRangeToStorage(range);
renderChart();
}
@@ -462,6 +487,7 @@ function handleResize() {
onMounted(() => {
loadVisitTabFromStorage();
loadChartRangeFromStorage();
loadData();
window.addEventListener("resize", handleResize);
});

View File

@@ -125,7 +125,8 @@ const statsSummary = ref({
});
const domainStats = ref<DomainStat[]>([]);
const last7Days = ref<{ date: string; total: number }[]>([]);
const chartRange = ref<"7" | "30">("30");
const chartRange = ref<"7" | "30">("7");
const chartRangeStorageKey = "cwd-stats-chart-range";
const injectedDomainFilter = inject<Ref<string> | null>("domainFilter", null);
const domainFilter = injectedDomainFilter ?? ref("");
@@ -137,6 +138,29 @@ const toastVisible = ref(false);
const chartEl = ref<HTMLDivElement | null>(null);
let chartInstance: echarts.ECharts | null = null;
function loadChartRangeFromStorage() {
if (typeof window === "undefined") {
return;
}
try {
const value = window.localStorage.getItem(chartRangeStorageKey);
if (value === "7" || value === "30") {
chartRange.value = value;
}
} catch {
}
}
function saveChartRangeToStorage(value: "7" | "30") {
if (typeof window === "undefined") {
return;
}
try {
window.localStorage.setItem(chartRangeStorageKey, value);
} catch {
}
}
function showToast(msg: string, type: "success" | "error" = "success") {
toastMessage.value = msg;
toastType.value = type;
@@ -235,6 +259,7 @@ function changeChartRange(range: "7" | "30") {
return;
}
chartRange.value = range;
saveChartRangeToStorage(range);
renderChart();
}
@@ -245,6 +270,7 @@ function handleResize() {
}
onMounted(() => {
loadChartRangeFromStorage();
loadStats();
window.addEventListener("resize", handleResize);
});