# 业务表单控件迁移到 TDesign ## 背景 项目已接入 `tdesign-vue-next`(Vite `TDesignResolver` 按需引入)。登录页已用 `t-input` / `t-button` 等,但业务页筛选栏与弹窗表单仍大量使用原生 ``。全站 `t-select` 用量为 0。 目标方向:**能换的表单控件尽量全换**。本需求按页面分轮推进。 ## 目标 1. 统一业务页表单控件为 TDesign,优先视觉与交互一致。 2. 第一轮完成高频页:`DevicesView` / `TasksView` / `FirmwaresView`。 3. 不改变业务逻辑与接口契约。 ## 非目标 - 不改后台。 - 不重做页面布局 / 表格体系。 - 不在本轮替换地图内特殊控件、自定义外观开关(若强绑定原型 CSS,可暂留并标注)。 - 不在本轮做完整 TDesign 主题定制(与 `prototype.css` 深度对齐另开)。 - 第二轮页面(Users / OperationLogs / Account / DeviceDetail 等)不纳入本轮实现。 ## 第一轮范围 | 页面 | 控件 | |------|------| | `DevicesView` | 搜索 input、状态/绑定 select、新增机巢表单 inputs、升级固件 select | | `TasksView` | 各 Tab 搜索 input、计划/设备/结果 select、任务/航线/航点表单 inputs、number、time、星期 select;原始视频录制自定义 checkbox → `t-switch` 或 `t-checkbox`(保持布尔语义) | | `FirmwaresView` | 搜索 input、状态 select、创建/编辑表单 inputs + number + select | ## 控件映射 | 原生 | TDesign | 约定 | |------|---------|------| | `` | `t-input` | 搜索框可 `clearable`;短必填码按需 | | `type="number"` | `t-input-number` | 保留 `min/max/step`;`v-model` 数值语义不变 | | `type="time"` | `t-time-picker` | 绑定现有 `HH:mm` 字符串字段 | | 自定义录制 checkbox | `t-switch`(优先)或 `t-checkbox` | 仍绑定 `boolean` | | 纯展示/地图专用 input | 暂不换 | 标注原因 | 尺寸:默认 `size="medium"`。筛选栏与工具栏用现有容器 class 限宽,尽量少覆盖 TDesign 主题变量。 ## 行为约定 1. **v-model 类型不变**:空筛选项继续用 `''`;数值 select(如星期)继续 number。 2. **事件**:原 `@change="reload"` 改为 `t-select` 的 `@change` 调同一 `reload`(或等价 watch,但优先显式事件以免双触发)。 3. **选项数据**:在 `