+ class="flex h-screen w-screen items-start justify-center overflow-hidden pt-8 font-sans select-none bg-gray-100 drag-region dark:bg-gray-900">
diff --git a/frontend/src/style.css b/frontend/src/style.css
index bd6213e..e37112e 100644
--- a/frontend/src/style.css
+++ b/frontend/src/style.css
@@ -1,3 +1,25 @@
@tailwind base;
@tailwind components;
-@tailwind utilities;
\ No newline at end of file
+@tailwind utilities;
+
+html,
+body,
+#app {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ overflow: hidden;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ @apply bg-white text-black dark:bg-gray-900 dark:text-white;
+}
+
+.drag-region {
+ -webkit-app-region: drag;
+ --wails-draggable: drag;
+}
diff --git a/internal/services/appservice.go b/internal/services/appservice.go
index 57e8ce1..7a3742a 100644
--- a/internal/services/appservice.go
+++ b/internal/services/appservice.go
@@ -30,6 +30,15 @@ type AppService struct {
const HotkeyShowSecondWindow = 1
+const (
+ mainWindowWidth = 1280
+ mainWindowHeight = 800
+ mainWindowMinWidth = 1024
+ mainWindowMinHeight = 720
+ secondWindowWidth = 340
+ secondWindowHeight = 320
+)
+
func ConfigureAppService(a *AppService, app *application.App, i18nFS embed.FS, suidb *SuiStore) {
a.App = app
a.I18nFS = i18nFS
@@ -37,8 +46,16 @@ func ConfigureAppService(a *AppService, app *application.App, i18nFS embed.FS, s
isWindows := runtime.GOOS == "windows"
mainWindow := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
- Title: "main",
- Frameless: isWindows,
+ Title: "main",
+ Name: "main",
+ Width: mainWindowWidth,
+ Height: mainWindowHeight,
+ MinWidth: mainWindowMinWidth,
+ MinHeight: mainWindowMinHeight,
+ InitialPosition: application.WindowCentered,
+ StartState: application.WindowStateNormal,
+ DisableResize: false,
+ Frameless: isWindows,
Mac: application.MacWindow{
InvisibleTitleBarHeight: 50,
Backdrop: application.MacBackdropTranslucent,
@@ -53,8 +70,8 @@ func ConfigureAppService(a *AppService, app *application.App, i18nFS embed.FS, s
secondWindow := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{
Title: "second",
Name: "second",
- Width: 340,
- Height: 320,
+ Width: secondWindowWidth,
+ Height: secondWindowHeight,
Mac: application.MacWindow{
InvisibleTitleBarHeight: 50,
TitleBar: application.MacTitleBarHidden,
diff --git a/progress.md b/progress.md
index 80403fa..2cf352a 100644
--- a/progress.md
+++ b/progress.md
@@ -78,3 +78,24 @@
- `npm install` 仍报告 3 个 moderate audit findings。
- 前端构建仍提示 Browserslist 数据过期。
- Vite 仍提示生产 chunk 大于 500 kB。
+
+### 实现主窗口启动参数与根布局策略
+
+- 任务:实现 `T-011`,把已确定的主窗口与布局策略落到代码。
+- 结果:
+ - Go 侧主窗口设置为初始 `1280x800`、最小 `1024x720`、居中、可调整大小、正常窗口状态。
+ - 第二窗口继续保持 `340x320` 小窗。
+ - 前端 `html`、`body`、`#app` 和应用根容器撑满窗口并隐藏外层滚动。
+ - 主窗口侧边栏、顶部栏和内容区使用 flex 填满窗口。
+ - Dashboard、General、Tags 等现有页面补充了宽度和最小尺寸约束。
+ - 根路由保留为主窗口入口,不再自动跳转到第二窗口。
+- 验证:
+ - `.\init.ps1` 通过。
+ - `go test ./...` 通过。
+ - `cd frontend && npm run build` 通过。
+ - `go build -o bin\cmbone.exe .` 通过。
+ - `bin\cmbone.exe` 启动 6 秒 smoke 通过。
+- 非阻塞警告:
+ - `npm install` 仍报告 3 个 moderate audit findings。
+ - 前端构建仍提示 Browserslist 数据过期。
+ - Vite 仍提示生产 chunk 大于 500 kB。