11<template >
22 <div >
3- <v-sheet class =" h-fit p-2" border rounded >
4- <v-combobox
5- v-model =" appStore.language"
6- density =" comfortable"
7- label =" 语言"
8- :items =" appStore.languageList"
9- no-data-text =" 无数据"
10- @update:model-value =" clearVoice"
11- ></v-combobox >
12- <v-select
13- v-model =" appStore.gender"
14- density =" comfortable"
15- label =" 性别"
16- :items =" appStore.genderList"
17- item-title =" label"
18- item-value =" value"
19- @update:model-value =" clearVoice"
20- ></v-select >
21- <v-select
22- v-model =" appStore.voice"
23- density =" comfortable"
24- label =" 声音"
25- :items =" filteredVoicesList"
26- item-title =" FriendlyName"
27- return-object
28- no-data-text =" 请先选择语言和性别"
29- ></v-select >
30- <v-select
31- v-model =" appStore.speed"
32- density =" comfortable"
33- label =" 语速"
34- :items =" appStore.speedList"
35- item-title =" label"
36- item-value =" value"
37- ></v-select >
38- <v-text-field
39- v-model =" appStore.tryListeningText"
40- density =" comfortable"
41- label =" 试听文本"
42- ></v-text-field >
43- <v-btn
44- class =" mb-2"
45- prepend-icon =" mdi-volume-high"
46- block
47- :loading =" tryListeningLoading"
48- @click =" handleTryListening"
49- >
50- 试听
51- </v-btn >
52- </v-sheet >
3+ <v-form :disabled =" disabled" >
4+ <v-sheet class =" h-fit p-2" border rounded >
5+ <v-combobox
6+ v-model =" appStore.language"
7+ density =" comfortable"
8+ label =" 语言"
9+ :items =" appStore.languageList"
10+ no-data-text =" 无数据"
11+ @update:model-value =" clearVoice"
12+ ></v-combobox >
13+ <v-select
14+ v-model =" appStore.gender"
15+ density =" comfortable"
16+ label =" 性别"
17+ :items =" appStore.genderList"
18+ item-title =" label"
19+ item-value =" value"
20+ @update:model-value =" clearVoice"
21+ ></v-select >
22+ <v-select
23+ v-model =" appStore.voice"
24+ density =" comfortable"
25+ label =" 声音"
26+ :items =" filteredVoicesList"
27+ item-title =" FriendlyName"
28+ return-object
29+ no-data-text =" 请先选择语言和性别"
30+ ></v-select >
31+ <v-select
32+ v-model =" appStore.speed"
33+ density =" comfortable"
34+ label =" 语速"
35+ :items =" appStore.speedList"
36+ item-title =" label"
37+ item-value =" value"
38+ ></v-select >
39+ <v-text-field
40+ v-model =" appStore.tryListeningText"
41+ density =" comfortable"
42+ label =" 试听文本"
43+ ></v-text-field >
44+ <v-btn
45+ class =" mb-2"
46+ prepend-icon =" mdi-volume-high"
47+ block
48+ :loading =" tryListeningLoading"
49+ :disabled =" disabled"
50+ @click =" handleTryListening"
51+ >
52+ 试听
53+ </v-btn >
54+ </v-sheet >
55+ </v-form >
5356 </div >
5457</template >
5558
@@ -61,6 +64,10 @@ import { useToast } from 'vue-toastification'
6164const toast = useToast ()
6265const appStore = useAppStore ()
6366
67+ defineProps <{
68+ disabled? : boolean
69+ }>()
70+
6471const configValid = () => {
6572 if (! appStore .voice ) {
6673 toast .warning (' 请选择一个声音' )
@@ -140,7 +147,6 @@ const synthesizedSpeechToFile = async (option: { text: string; withCaption?: boo
140147 return result
141148 } catch (error ) {
142149 console .log (' 语音合成失败' , error )
143- toast .error (' 语音合成失败,请检查网络' )
144150 throw error
145151 }
146152}
0 commit comments