diff --git a/package.json b/package.json index 055bba9..d9a1c8a 100644 --- a/package.json +++ b/package.json @@ -36,9 +36,11 @@ "@zumer/snapdom": "^2.0.1", "ai": "^6.0.41", "better-sqlite3": "^12.4.6", + "echarts": "^6.0.0", "electron-updater": "^6.6.2", "markdown-it": "^14.1.0", "stream-json": "^1.9.1", + "vue-echarts": "^8.0.1", "vue-i18n": "^11.2.8", "zod": "^4.3.5" }, @@ -57,7 +59,6 @@ "@vue/eslint-config-prettier": "^10.2.0", "@vueuse/core": "^13.9.0", "axios": "^1.13.2", - "chart.js": "^4.5.1", "cross-env": "^7.0.3", "dayjs": "^1.11.19", "electron": "^35.0.0", @@ -72,7 +73,6 @@ "tailwindcss": "^4.0.0", "vite": "^6.3.5", "vue": "^3.5.25", - "vue-chartjs": "^5.3.3", "vue-router": "^4.6.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b80982d..af3c878 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,9 @@ importers: better-sqlite3: specifier: ^12.4.6 version: 12.5.0 + echarts: + specifier: ^6.0.0 + version: 6.0.0 electron-updater: specifier: ^6.6.2 version: 6.7.3 @@ -47,6 +50,9 @@ importers: stream-json: specifier: ^1.9.1 version: 1.9.1 + vue-echarts: + specifier: ^8.0.1 + version: 8.0.1(echarts@6.0.0)(vue@3.5.26(typescript@5.9.3)) vue-i18n: specifier: ^11.2.8 version: 11.2.8(vue@3.5.26(typescript@5.9.3)) @@ -96,9 +102,6 @@ importers: axios: specifier: ^1.13.2 version: 1.13.2 - chart.js: - specifier: ^4.5.1 - version: 4.5.1 cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -141,9 +144,6 @@ importers: vue: specifier: ^3.5.25 version: 3.5.26(typescript@5.9.3) - vue-chartjs: - specifier: ^5.3.3 - version: 5.3.3(chart.js@4.5.1)(vue@3.5.26(typescript@5.9.3)) vue-router: specifier: ^4.6.3 version: 4.6.4(vue@3.5.26(typescript@5.9.3)) @@ -677,9 +677,6 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@kurkle/color@0.3.4': - resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==} - '@malept/cross-spawn-promise@2.0.0': resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} engines: {node: '>= 12.13.0'} @@ -1790,10 +1787,6 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chart.js@4.5.1: - resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} - engines: {pnpm: '>=8'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -2028,6 +2021,9 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + echarts@6.0.0: + resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==} + ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} @@ -3735,6 +3731,9 @@ packages: peerDependencies: typescript: '>=4.8.4' + tslib@2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -3975,12 +3974,6 @@ packages: yaml: optional: true - vue-chartjs@5.3.3: - resolution: {integrity: sha512-jqxtL8KZ6YJ5NTv6XzrzLS7osyegOi28UGNZW0h9OkDL7Sh1396ht4Dorh04aKrl2LiSalQ84WtqiG0RIJb0tA==} - peerDependencies: - chart.js: ^4.1.1 - vue: ^3.0.0-0 || ^2.7.0 - vue-component-type-helpers@3.2.2: resolution: {integrity: sha512-x8C2nx5XlUNM0WirgfTkHjJGO/ABBxlANZDtHw2HclHtQnn+RFPTnbjMJn8jHZW4TlUam0asHcA14lf1C6Jb+A==} @@ -3995,6 +3988,12 @@ packages: '@vue/composition-api': optional: true + vue-echarts@8.0.1: + resolution: {integrity: sha512-23rJTFLu1OUEGRWjJGmdGt8fP+8+ja1gVgzMYPIPaHWpXegcO1viIAaeu2H4QHESlVeHzUAHIxKXGrwjsyXAaA==} + peerDependencies: + echarts: ^6.0.0 + vue: ^3.3.0 + vue-eslint-parser@9.4.3: resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} engines: {node: ^14.17.0 || >=16.0.0} @@ -4117,6 +4116,9 @@ packages: zod@4.3.5: resolution: {integrity: sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==} + zrender@6.0.0: + resolution: {integrity: sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==} + snapshots: 7zip-bin@5.2.0: {} @@ -4686,8 +4688,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@kurkle/color@0.3.4': {} - '@malept/cross-spawn-promise@2.0.0': dependencies: cross-spawn: 7.0.6 @@ -6042,10 +6042,6 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chart.js@4.5.1: - dependencies: - '@kurkle/color': 0.3.4 - chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -6262,6 +6258,11 @@ snapshots: eastasianwidth@0.2.0: {} + echarts@6.0.0: + dependencies: + tslib: 2.3.0 + zrender: 6.0.0 + ejs@3.1.10: dependencies: jake: 10.9.4 @@ -8134,6 +8135,8 @@ snapshots: dependencies: typescript: 5.9.3 + tslib@2.3.0: {} + tslib@2.8.1: {} tunnel-agent@0.6.0: @@ -8323,17 +8326,17 @@ snapshots: lightningcss: 1.30.2 yaml: 2.8.2 - vue-chartjs@5.3.3(chart.js@4.5.1)(vue@3.5.26(typescript@5.9.3)): - dependencies: - chart.js: 4.5.1 - vue: 3.5.26(typescript@5.9.3) - vue-component-type-helpers@3.2.2: {} vue-demi@0.14.10(vue@3.5.26(typescript@5.9.3)): dependencies: vue: 3.5.26(typescript@5.9.3) + vue-echarts@8.0.1(echarts@6.0.0)(vue@3.5.26(typescript@5.9.3)): + dependencies: + echarts: 6.0.0 + vue: 3.5.26(typescript@5.9.3) + vue-eslint-parser@9.4.3(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 4.4.3 @@ -8451,3 +8454,7 @@ snapshots: yocto-queue@0.1.0: {} zod@4.3.5: {} + + zrender@6.0.0: + dependencies: + tslib: 2.3.0 diff --git a/src/components/analysis/Overview/ActivityTimeDistribution.vue b/src/components/analysis/Overview/ActivityTimeDistribution.vue index c96ef17..3135ea0 100644 --- a/src/components/analysis/Overview/ActivityTimeDistribution.vue +++ b/src/components/analysis/Overview/ActivityTimeDistribution.vue @@ -2,8 +2,8 @@ import { computed } from 'vue' import { useI18n } from 'vue-i18n' import type { HourlyActivity, WeekdayActivity, MonthlyActivity } from '@/types/analysis' -import { BarChart } from '@/components/charts' -import type { BarChartData } from '@/components/charts' +import { EChartBar } from '@/components/charts' +import type { EChartBarData } from '@/components/charts' import { SectionCard } from '@/components/UI' const { t, locale } = useI18n() @@ -20,7 +20,7 @@ const props = defineProps<{ // --- 24小时分布逻辑 --- // 24小时分布图数据 -const hourlyChartData = computed(() => { +const hourlyChartData = computed(() => { return { labels: props.hourlyActivity.map((h) => `${h.hour}:00`), values: props.hourlyActivity.map((h) => h.messageCount), @@ -60,7 +60,7 @@ const eveningRatio = computed(() => { // --- 星期分布逻辑 --- // 星期分布图数据 -const weekdayChartData = computed(() => { +const weekdayChartData = computed(() => { return { labels: props.weekdayActivity.map((w) => props.weekdayNames[w.weekday - 1]), values: props.weekdayActivity.map((w) => w.messageCount), @@ -69,7 +69,7 @@ const weekdayChartData = computed(() => { // --- 月份分布逻辑 --- // 月份分布图数据 -const monthlyChartData = computed(() => { +const monthlyChartData = computed(() => { return { labels: props.monthlyActivity.map((m) => { // 中文用 X月,英文用 Jan, Feb 等 @@ -89,11 +89,7 @@ const monthlyChartData = computed(() => {
- +
@@ -135,7 +131,7 @@ const monthlyChartData = computed(() => {