Files
Aether/frontend/src/components/ui/select.vue
fawney19 cf2eee222e refactor: 前端全面替换 any 为 unknown 并统一错误处理,后端用量记录补写请求头/体
- 前端 API 层、stores、conversation 解析器、组件全面替换 any 为 unknown/具体类型
- 错误处理统一使用 parseApiError/getErrorStatus 替代 err.response?.data?.detail 模式
- 后端 handler/TaskService/UsageLifecycle/StreamTracker 链路传递 request_headers/request_body
- streaming/pending 状态更新时可补写客户端和提供商的请求头及请求体
- 新增 TaskService 和 UsageService 相关测试
2026-02-22 00:43:41 +08:00

58 lines
1.4 KiB
Vue

<script setup lang="ts">
import { computed } from 'vue'
import { SelectRoot as SelectRootPrimitive } from 'radix-vue'
interface Props {
defaultValue?: string
modelValue?: string
open?: boolean
defaultOpen?: boolean
dir?: 'ltr' | 'rtl'
name?: string
autocomplete?: string
disabled?: boolean
required?: boolean
}
const props = withDefaults(defineProps<Props>(), {
defaultValue: undefined,
modelValue: undefined,
open: undefined,
dir: undefined,
name: undefined,
autocomplete: undefined,
})
const emit = defineEmits<{
'update:modelValue': [value: string]
'update:open': [value: boolean]
}>()
// open 未传入时不绑定,让 radix-vue 走 uncontrolled 模式
const openProp = computed(() =>
props.open !== undefined ? { open: props.open } : {}
)
// modelValue 未传入时不绑定,让 radix-vue 走 uncontrolled 模式
const modelValueProp = computed(() =>
props.modelValue !== undefined ? { modelValue: props.modelValue } : {}
)
</script>
<template>
<SelectRootPrimitive
:default-value="defaultValue"
v-bind="{ ...modelValueProp, ...openProp }"
:default-open="defaultOpen"
:dir="dir"
:name="name"
:autocomplete="autocomplete"
:disabled="disabled"
:required="required"
@update:model-value="emit('update:modelValue', $event)"
@update:open="emit('update:open', $event)"
>
<slot />
</SelectRootPrimitive>
</template>