diff --git a/frontend/src/components/AetherLineByLineLogo.vue b/frontend/src/components/AetherLineByLineLogo.vue
index dfceb6d..5383dd3 100644
--- a/frontend/src/components/AetherLineByLineLogo.vue
+++ b/frontend/src/components/AetherLineByLineLogo.vue
@@ -1,5 +1,8 @@
-
+
@@ -68,11 +155,27 @@
:class="{ 'star-visible': star.visible && hasScattered }"
:style="getStarStyle(star)"
>
-
-
-
-
-
+
+
+
+
+
@@ -86,11 +189,27 @@
:class="{ 'star-visible': star.visible && hasScattered }"
:style="getStarStyle(star)"
>
-
-
-
-
-
+
+
+
+
+
diff --git a/frontend/src/components/HeaderLogo.vue b/frontend/src/components/HeaderLogo.vue
index a3043c9..bd1c41d 100644
--- a/frontend/src/components/HeaderLogo.vue
+++ b/frontend/src/components/HeaderLogo.vue
@@ -7,8 +7,8 @@
@@ -32,7 +32,7 @@ const props = withDefaults(defineProps(), {
className: ''
})
-const containerClass = props.size + ' ' + props.className
+const containerClass = `${props.size } ${ props.className}`
const logoClass = 'w-full h-full'
diff --git a/frontend/src/components/PlatformSelect.vue b/frontend/src/components/PlatformSelect.vue
index f0531f1..4a3fae2 100644
--- a/frontend/src/components/PlatformSelect.vue
+++ b/frontend/src/components/PlatformSelect.vue
@@ -10,16 +10,26 @@
@keydown.escape.stop="closeDropdown"
>
-
diff --git a/frontend/src/components/RippleLogo.vue b/frontend/src/components/RippleLogo.vue
index a223a2e..b03483c 100644
--- a/frontend/src/components/RippleLogo.vue
+++ b/frontend/src/components/RippleLogo.vue
@@ -1,355 +1,599 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
-
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/frontend/src/components/ToastWithProgress.vue b/frontend/src/components/ToastWithProgress.vue
index a7d642a..76deb20 100644
--- a/frontend/src/components/ToastWithProgress.vue
+++ b/frontend/src/components/ToastWithProgress.vue
@@ -35,28 +35,42 @@
/>
-
-
+
{{ toast.title }}
-
+
{{ toast.message }}
diff --git a/frontend/src/components/charts/BarChart.vue b/frontend/src/components/charts/BarChart.vue
index b8634a6..9791aa3 100644
--- a/frontend/src/components/charts/BarChart.vue
+++ b/frontend/src/components/charts/BarChart.vue
@@ -1,6 +1,6 @@
-
+
@@ -19,6 +19,11 @@ import {
type ChartOptions
} from 'chart.js'
+const props = withDefaults(defineProps(), {
+ height: 300,
+ stacked: true
+})
+
ChartJS.register(
CategoryScale,
LinearScale,
@@ -36,11 +41,6 @@ interface Props {
stacked?: boolean
}
-const props = withDefaults(defineProps(), {
- height: 300,
- stacked: true
-})
-
const chartRef = ref()
let chart: ChartJS<'bar'> | null = null
diff --git a/frontend/src/components/charts/LineChart.vue b/frontend/src/components/charts/LineChart.vue
index bedd944..2d2d2dd 100644
--- a/frontend/src/components/charts/LineChart.vue
+++ b/frontend/src/components/charts/LineChart.vue
@@ -1,6 +1,6 @@
-
+
@@ -20,6 +20,10 @@ import {
type ChartOptions
} from 'chart.js'
+const props = withDefaults(defineProps(), {
+ height: 300
+})
+
// 注册 Chart.js 组件
ChartJS.register(
CategoryScale,
@@ -38,10 +42,6 @@ interface Props {
height?: number
}
-const props = withDefaults(defineProps(), {
- height: 300
-})
-
const chartRef = ref()
let chart: ChartJS<'line'> | null = null
diff --git a/frontend/src/components/charts/ScatterChart.vue b/frontend/src/components/charts/ScatterChart.vue
index 3ecd639..8c08d99 100644
--- a/frontend/src/components/charts/ScatterChart.vue
+++ b/frontend/src/components/charts/ScatterChart.vue
@@ -1,18 +1,26 @@
-
+
-
Y = {{ crosshairStats.yValue.toFixed(1) }} 分钟
+
+ Y = {{ crosshairStats.yValue.toFixed(1) }} 分钟
+
-
+
{{ crosshairStats.datasets[0].belowCount }} / {{ crosshairStats.datasets[0].totalCount }} 点在横线以下
({{ crosshairStats.datasets[0].belowPercent.toFixed(1) }}%)
-
+
(), {
+ height: 300
+})
+
ChartJS.register(
LinearScale,
PointElement,
@@ -87,10 +99,6 @@ interface CrosshairStats {
totalBelowPercent: number
}
-const props = withDefaults(defineProps
(), {
- height: 300
-})
-
const chartRef = ref()
let chart: ChartJS<'scatter'> | null = null
@@ -252,7 +260,7 @@ const defaultOptions: ChartOptions<'scatter'> = {
ticks: {
color: 'rgb(107, 114, 128)',
// 自定义刻度值:在实际值 0, 2, 5, 10, 30, 60, 120 处显示
- callback: function(this: Scale, tickValue: string | number) {
+ callback(this: Scale, tickValue: string | number) {
const displayVal = Number(tickValue)
const realVal = toRealValue(displayVal)
// 只在特定的显示位置显示刻度
@@ -273,7 +281,7 @@ const defaultOptions: ChartOptions<'scatter'> = {
text: '间隔 (分钟)',
color: 'rgb(107, 114, 128)'
},
- afterBuildTicks: function(scale: Scale) {
+ afterBuildTicks(scale: Scale) {
// 在特定实际值处设置刻度
const targetTicks = [0, 2, 5, 10, 30, 60, 120]
scale.ticks = targetTicks.map(val => ({
diff --git a/frontend/src/components/common/AlertDialog.vue b/frontend/src/components/common/AlertDialog.vue
index b746f53..f5dceac 100644
--- a/frontend/src/components/common/AlertDialog.vue
+++ b/frontend/src/components/common/AlertDialog.vue
@@ -1,11 +1,21 @@
-