feat: HID串口优先ttyUSB并在视频设备名称后显示路径

This commit is contained in:
mofeng-git
2026-02-11 20:45:13 +08:00
parent 74411d354c
commit 6ed1cf5bef
3 changed files with 30 additions and 5 deletions

View File

@@ -537,6 +537,25 @@ export const msdApi = {
}),
}
interface SerialDeviceOption {
path: string
name: string
}
function getSerialDevicePriority(path: string): number {
if (/^\/dev\/ttyUSB/i.test(path)) return 0
if (/^\/dev\/(ttyS|S)/i.test(path)) return 2
return 1
}
function sortSerialDevices(serialDevices: SerialDeviceOption[]): SerialDeviceOption[] {
return [...serialDevices].sort((a, b) => {
const priorityDiff = getSerialDevicePriority(a.path) - getSerialDevicePriority(b.path)
if (priorityDiff !== 0) return priorityDiff
return a.path.localeCompare(b.path, undefined, { numeric: true, sensitivity: 'base' })
})
}
// Config API
/** @deprecated 使用域特定 APIvideoConfigApi, hidConfigApi 等)替代 */
export const configApi = {
@@ -549,8 +568,8 @@ export const configApi = {
body: JSON.stringify(updates),
}),
listDevices: () =>
request<{
listDevices: async () => {
const result = await request<{
video: Array<{
path: string
name: string
@@ -578,7 +597,13 @@ export const configApi = {
ttyd_available: boolean
rustdesk_available: boolean
}
}>('/devices'),
}>('/devices')
return {
...result,
serial: sortSerialDevices(result.serial),
}
},
}
// 导出新的域分离配置 API

View File

@@ -753,7 +753,7 @@ watch(currentConfig, () => {
:value="device.path"
class="text-xs"
>
{{ device.name }}
{{ device.name }} ({{ device.path }})
</SelectItem>
</SelectContent>
</Select>

View File

@@ -1654,7 +1654,7 @@ watch(updateChannel, async () => {
<Label for="video-device">{{ t('settings.videoDevice') }}</Label>
<select id="video-device" v-model="config.video_device" class="w-full h-9 px-3 rounded-md border border-input bg-background text-sm">
<option value="">{{ t('settings.selectDevice') }}</option>
<option v-for="dev in devices.video" :key="dev.path" :value="dev.path">{{ dev.name }}</option>
<option v-for="dev in devices.video" :key="dev.path" :value="dev.path">{{ dev.name }} ({{ dev.path }})</option>
</select>
</div>
<div class="space-y-2">