diff --git a/.vite/deps/_metadata.json b/.vite/deps/_metadata.json new file mode 100644 index 0000000..2378c33 --- /dev/null +++ b/.vite/deps/_metadata.json @@ -0,0 +1,8 @@ +{ + "hash": "de7e4cff", + "configHash": "9a7296da", + "lockfileHash": "e3b0c442", + "browserHash": "8c168d3c", + "optimized": {}, + "chunks": {} +} \ No newline at end of file diff --git a/.vite/deps/package.json b/.vite/deps/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/.vite/deps/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/build.ps1 b/build.ps1 index c6ba415..39dc949 100644 --- a/build.ps1 +++ b/build.ps1 @@ -91,17 +91,17 @@ switch ($Target) { 'dev' { $root = (Get-Location).Path Write-Host '' - Write-Host '[dev] 前端热更新: http://localhost:5173' -ForegroundColor Green - Write-Host '[dev] 后端 API : http://localhost:3000' -ForegroundColor Green - Write-Host '[dev] 后台管理 : http://localhost:3000/admin/dashboard' -ForegroundColor Green - Write-Host '[dev] 正在新窗口启动 Go 后端...' -ForegroundColor Cyan + Write-Host '[dev] 前端开发 : http://localhost:5173 (Vite HMR)' -ForegroundColor Green + Write-Host '[dev] 后端 API : http://localhost:3000 (Go)' -ForegroundColor Green + Write-Host '[dev] 提示 : 请访问 5173 端口,Vite 会自动代理 API 到 3000' -ForegroundColor Yellow + Write-Host '[dev] 正在新窗口启动 Go 后端 (仅 API)...' -ForegroundColor Cyan Start-Process powershell -ArgumentList @( '-NoExit', '-Command', - "Set-Location '$root'; Write-Host '[backend] Go API on :3000' -ForegroundColor Cyan; go run $MainPkg" + "Set-Location '$root'; Write-Host '[backend] Go API on :3000' -ForegroundColor Cyan; go run $MainPkg --dev" ) | Out-Null Start-Sleep -Seconds 2 Push-Location frontend - 90| try { + try { if (-not (Test-Path node_modules)) { npm install } npm run dev } finally { diff --git a/config/config.go b/config/config.go index bf13c55..f77bc80 100644 --- a/config/config.go +++ b/config/config.go @@ -30,6 +30,8 @@ type Config struct { LogFile string // 系统服务控制动作:install|uninstall|start|stop|restart|status,空表示正常运行 ServiceAction string + // 开发模式:后端代理前端请求到 Vite 开发服务器(非内嵌静态资源) + DevMode bool } // Parse 解析命令行与 app.ini,并初始化数据目录 @@ -42,6 +44,7 @@ func Parse() (*Config, error) { dataFlag := flag.String("data", "", "数据存储目录(覆盖配置文件)") jwtFlag := flag.String("jwt-secret", "", "JWT 签名密钥(覆盖配置文件;留空则自动生成)") serviceFlag := flag.String("service", "", "系统服务控制:install|uninstall|start|stop|restart|status") + devFlag := flag.Bool("dev", false, "开发模式:代理前端到 Vite 开发服务器(默认 http://localhost:5173)") flag.Parse() action := strings.ToLower(strings.TrimSpace(*serviceFlag)) @@ -96,6 +99,7 @@ func Parse() (*Config, error) { JWTSecret: jwtSecret, LogFile: filepath.Join(absData, "jiang13.log"), ServiceAction: action, + DevMode: *devFlag, } needDirs := action == "" || action == "install" diff --git a/frontend/src/components/ArticleEditor.tsx b/frontend/src/components/ArticleEditor.tsx index 18336c4..40c8401 100644 --- a/frontend/src/components/ArticleEditor.tsx +++ b/frontend/src/components/ArticleEditor.tsx @@ -774,14 +774,36 @@ const ArticleEditor = forwardRef(function ArticleEdi
{mode === 'rich' ? (
-
+
{ + // 点击编辑器外空白区域时,聚焦并将光标置于文末 + if (editor && (e.target === e.currentTarget || (e.target as HTMLElement).classList.contains('article-editor-content'))) { + e.preventDefault(); + editor.chain().focus('end').run(); + } + }} + >
) : (
-
+
{ + if (e.target === e.currentTarget) { + e.preventDefault(); + const ta = markdownRef.current; + if (ta) { + ta.focus(); + const len = ta.value.length; + ta.setSelectionRange(len, len); + } + } + }} + >