mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
- 前端 API 层、stores、conversation 解析器、组件全面替换 any 为 unknown/具体类型 - 错误处理统一使用 parseApiError/getErrorStatus 替代 err.response?.data?.detail 模式 - 后端 handler/TaskService/UsageLifecycle/StreamTracker 链路传递 request_headers/request_body - streaming/pending 状态更新时可补写客户端和提供商的请求头及请求体 - 新增 TaskService 和 UsageService 相关测试
58 lines
1.4 KiB
Vue
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>
|