feat(desktop): ship full and mini clients

This commit is contained in:
2026-07-22 18:52:38 +08:00
parent a23a110758
commit aeb5276a73
10 changed files with 92 additions and 15 deletions

View File

@@ -9,5 +9,5 @@ npm run desktop:dev
```
- Web 开发端口:`5180`
- 桌面窗口默认尺寸`420 × 820`
- 桌面窗口默认宽度`420`;启动后高度自动适配当前屏幕全高,并停靠在屏幕右侧
- 左右停靠状态保存在本地;在 Tauri 桌面环境中会移动实际窗口。

View File

@@ -1,4 +1,4 @@
use tauri::{PhysicalPosition, Window};
use tauri::{PhysicalPosition, PhysicalSize, Window};
#[tauri::command]
fn dock_window(window: Window, side: String) -> Result<(), String> {
@@ -9,12 +9,16 @@ fn dock_window(window: Window, side: String) -> Result<(), String> {
let window_size = window.outer_size().map_err(|error| error.to_string())?;
let monitor_position = monitor.position();
let monitor_size = monitor.size();
let dock_size = PhysicalSize::new(window_size.width, monitor_size.height);
let x = if side == "left" {
monitor_position.x
} else {
monitor_position.x + monitor_size.width as i32 - window_size.width as i32
monitor_position.x + monitor_size.width as i32 - dock_size.width as i32
};
window
.set_size(dock_size)
.map_err(|error| error.to_string())?;
window
.set_position(PhysicalPosition::new(x, monitor_position.y))
.map_err(|error| error.to_string())?;

View File

@@ -31,7 +31,10 @@ export function App() {
const [experts, setExperts] = useState<Expert[]>([])
const [aiSessions, setAISessions] = useState<AISession[]>([])
const [view, setView] = useState<View>('home')
const [dockSide, setDockSide] = useState<DockSide>(() => localStorage.getItem('senlin-mini-dock') === 'left' ? 'left' : 'right')
const [dockSide, setDockSide] = useState<DockSide>(() => {
if ('__TAURI_INTERNALS__' in window) return 'right'
return localStorage.getItem('senlin-mini-dock') === 'left' ? 'left' : 'right'
})
const [loading, setLoading] = useState(Boolean(session))
const [error, setError] = useState('')
const [action, setAction] = useState<Action>(null)