feat: v2 Vue3 frontend + multiple optimizations

- New Vue 3 + Vite frontend at /v2/ (OLED dark theme, Fira Sans/Code)
- Date selector: support day/week/month range (backend unchanged)
- SSE auto-reconnect (up to 3 retries)
- Visibility polling pause (dashboard pauses when tab hidden)
- Friendly Chinese HTTP error messages
- Cancel task with confirmation in Dashboard
- Split AiWorkflowService (1700->845 lines):
  - AiApiService: AI API calls + streaming
  - ExcelExportService: POI Excel generation
- Dockerfile: 3-stage build (Node frontend -> Maven -> JRE)
- WebApplication.java: System.out -> Logger
- .gitignore: v2 build output, backup dirs

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
liumangmang
2026-06-08 15:12:52 +08:00
parent c9c40869d7
commit 1b182c2930
37 changed files with 4782 additions and 1913 deletions
@@ -1,7 +1,6 @@
package com.svnlog.web.dto;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
public class SvnVersionRangeRequest {
@@ -12,11 +11,16 @@ public class SvnVersionRangeRequest {
private String password;
@NotNull
private Integer year;
@NotNull
private Integer month;
private String rangeType;
private String date;
private String week;
private String clientTraceId;
public String getPresetId() {
@@ -59,6 +63,30 @@ public class SvnVersionRangeRequest {
this.month = month;
}
public String getRangeType() {
return rangeType;
}
public void setRangeType(String rangeType) {
this.rangeType = rangeType;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getWeek() {
return week;
}
public void setWeek(String week) {
this.week = week;
}
public String getClientTraceId() {
return clientTraceId;
}