11<script setup lang="ts">
2- import { computed , onMounted , ref } from ' vue'
2+ import { computed , ref } from ' vue'
33import { Check } from ' @element-plus/icons-vue'
4- import ProviderApi from ' @/api/admin/workspace/model/provider'
54import { MODEL_STATUS } from ' @/api/enums'
65import type { ModelProviderItem , ModelItem } from ' @/api/types'
7-
6+ import { groupBy } from ' lodash '
87defineOptions ({
98 name: ' ModelSelect' ,
109 inheritAttrs: false ,
1110})
1211
13- type ModelOptions = Record <string , ModelItem []>
14-
1512interface ModelOptionGroup {
1613 icon: string
1714 models: ModelItem []
@@ -21,23 +18,24 @@ interface ModelOptionGroup {
2118
2219const props = withDefaults (
2320 defineProps <{
24- modelType? : string
2521 modelValue: string
26- options: ModelOptions | null
22+ options: ModelItem []
23+ providerOptions: ModelProviderItem []
2724 }>(),
2825 {
29- modelType: ' ' ,
3026 modelValue: ' ' ,
31- options: null ,
27+ options : () => [],
28+ providerOptions : () => [],
3229 },
3330)
34-
31+ const _options = computed (() => {
32+ return groupBy (props .options , ' provider' )
33+ })
3534const emit = defineEmits <{
3635 change: [modelId : string ]
3736 ' update:modelValue' : [modelId : string ]
3837}>()
3938
40- const providerOptions = ref <ModelProviderItem []>([])
4139const loading = ref (false )
4240
4341const selectedModelId = computed ({
@@ -50,10 +48,10 @@ const selectedModelId = computed({
5048
5149const modelOptionGroups = computed <ModelOptionGroup []>(() => {
5250 const providerMap = new Map (
53- providerOptions . value .map ((provider ) => [provider .provider , provider ]),
51+ props . providerOptions .map ((provider ) => [provider .provider , provider ]),
5452 )
5553
56- return Object .entries (props . options ?? {}).map (([provider , models ]) => {
54+ return Object .entries (_options . value ?? {}).map (([provider , models ]) => {
5755 const providerOption = providerMap .get (provider )
5856 return {
5957 icon: providerOption ?.icon ?? ' ' ,
@@ -74,25 +72,6 @@ const selectedProviderIcon = computed(
7472 models .some (({ id }) => id === selectedModelId .value ),
7573 )?.icon ?? ' ' ,
7674)
77-
78- function loadProviderOptions() {
79- loading .value = true
80-
81- return ProviderApi .getProviderList ()
82- .then ((providers ) => {
83- providerOptions .value = providers
84- })
85- .catch (() => {
86- providerOptions .value = []
87- })
88- .finally (() => {
89- loading .value = false
90- })
91- }
92-
93- onMounted (() => {
94- loadProviderOptions ()
95- })
9675 </script >
9776
9877<template >
0 commit comments