# 服务器添加/编辑表单重设计

**日期**: 2026-06-02  
**状态**: 已批准，实施中

## 背景

Vuetify 迁移后的 `ServersPage` 对话框与产品文档/后端 `ServerCreate` 严重偏离：

| 文档要求 | 当前 SPA | 后端 |
|---------|---------|------|
| 认证方式（密码 / SSH 密钥） | ❌ 缺失，仅密码框 | `auth_method` |
| 密码预设下拉，选后隐藏密码框 | ❌ | `preset_id` |
| SSH 密钥预设 + 路径 + 私钥粘贴 | ❌ | `ssh_key_preset_id` 等 |
| 目标路径必填，默认 `/www/wwwroot` | ❌ | `target_path` |
| Agent 端口隐藏 8601 | ❌ | `agent_port` |
| 分类 combobox（可选已有/自定义） | 纯文本 | `category` |
| 平台 / 节点（可选） | 仅平台 | `platform_id` / `node_id` |

## 目标

单对话框分区块，与 `web/app/servers.html`（2026-05-25/26 定稿）及 `ServerCreate` 对齐。

## UI 结构

```
┌─ 添加服务器 ─────────────────────────────┐
│ 【基本信息】                              │
│  名称 *    域名/IP *    SSH 端口          │
│  SSH 用户名 *（默认 root）                │
│ 【认证方式】  ( ) 密码  ( ) SSH 密钥       │
│  [密码]  密码预设 ▼  （选预设则隐藏密码）  │
│  [密钥]  密钥预设 ▼  密钥路径  私钥 PEM    │
│ 【部署】                                  │
│  目标路径 *  默认 /www/wwwroot            │
│  分类 ▼（combobox，可自定义）             │
│ 【高级 ▼】                                │
│  平台  节点  文件管理提权                  │
│                    [取消] [保存]          │
└──────────────────────────────────────────┘
```

## 数据流

- 打开对话框：`GET /presets/`、`GET /ssh-key-presets/`、`GET /servers/categories`、`GET /assets/platforms`、`GET /assets/nodes`
- 保存：`POST/PUT /api/servers/` 发送完整 `ServerCreate`/`ServerUpdate` 字段；`preset_id` / `ssh_key_preset_id` 仅传 ID，密码/私钥由后端解密预设
- 新建校验：目标路径非空；密码模式需 `preset_id` 或手动密码；密钥模式需 `ssh_key_preset_id` 或私钥内容

## 验收标准

1. 添加服务器可见认证切换、预设下拉、目标路径默认值
2. 选密码预设后密码输入框隐藏
3. 保存后 API 请求含 `auth_method`、`target_path`、`preset_id` 等正确字段
4. 编辑时回填 `auth_method`、`preset_id`、`target_path`、分类
