|
@@ -15,22 +15,25 @@
|
|
|
<n-drawer-content title="数字人播报">
|
|
|
<div class="drawerContent m-5">
|
|
|
<!-- <div class="text-lg my-2.5">数字人播报</div>-->
|
|
|
-
|
|
|
<n-list
|
|
|
- hoverable
|
|
|
- clickable
|
|
|
+ v-if="list"
|
|
|
style="--n-color-modal: none"
|
|
|
:show-divider="false"
|
|
|
>
|
|
|
- <n-list-item v-for="(vi, index) in list" :key="index">
|
|
|
- 当前空间视频ID:
|
|
|
- <n-space></n-space>
|
|
|
- <!-- {{ vi.url}}-->
|
|
|
- {{ vi.sid }}
|
|
|
+ <!-- {{list}}-->
|
|
|
+ <n-list-item
|
|
|
+ v-for="(vi, index) in list"
|
|
|
+ :key="index"
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <div class="mb-5">
|
|
|
+ {{ `当前空间${vi.media ? '视频' : '模型'}` }} ID: {{ vi.sid }}
|
|
|
+ </div>
|
|
|
|
|
|
<n-select
|
|
|
- v-model:value="bindAudioId"
|
|
|
+ v-model:value="vi.audioId"
|
|
|
:options="audioOptions"
|
|
|
+ @update:value="(val) => handleSelect(val, vi.sid)"
|
|
|
></n-select>
|
|
|
</n-list-item>
|
|
|
</n-list>
|
|
@@ -47,7 +50,8 @@ import {
|
|
|
onMounted,
|
|
|
// reactive,
|
|
|
onUnmounted,
|
|
|
- watchEffect
|
|
|
+ watchEffect,
|
|
|
+ watch
|
|
|
} from 'vue'
|
|
|
|
|
|
import { useMainStore } from '@/store'
|
|
@@ -59,40 +63,81 @@ const main = useMainStore()
|
|
|
const active = ref(true)
|
|
|
|
|
|
const boxVideos = computed(() => main.sceneInfo.boxVideos)
|
|
|
+const boxModels = computed(() => main.sceneInfo.boxModels)
|
|
|
+const aiData = computed(() => main.getEditorData.aiSetting)
|
|
|
|
|
|
-const list = ref<any[]>([])
|
|
|
-
|
|
|
-const bindAudioId = ref()
|
|
|
+const list = ref<{ sid: string; audioFilePath: string; audioId }[]>([])
|
|
|
+const audiolist = ref<any[]>([])
|
|
|
const audioOptions = ref<any[]>([])
|
|
|
|
|
|
onMounted(async () => {
|
|
|
active.value = true
|
|
|
const res = await fetchTtsList(main.sceneCode)
|
|
|
if (res) {
|
|
|
- const arr = Array.from(res as any as SaveTOTTSParams[])
|
|
|
- .filter((i) => i.type === 'tts')
|
|
|
- .map((item) => {
|
|
|
- return {
|
|
|
- label: item.document,
|
|
|
- value: item.id
|
|
|
- }
|
|
|
- })
|
|
|
+ const result = Array.from(res as any as SaveTOTTSParams[]).filter(
|
|
|
+ (i) => i.type === 'tts'
|
|
|
+ )
|
|
|
+ audiolist.value = result
|
|
|
+ const arr = result.map((item) => {
|
|
|
+ return {
|
|
|
+ label: item.name,
|
|
|
+ value: item.id
|
|
|
+ }
|
|
|
+ })
|
|
|
console.log('array', arr)
|
|
|
audioOptions.value = arr
|
|
|
}
|
|
|
|
|
|
watchEffect(() => {
|
|
|
- if (boxVideos.value?.length) {
|
|
|
+ if (boxVideos.value?.length || boxModels.value?.length) {
|
|
|
// debugger
|
|
|
- const data = JSON.parse(boxVideos.value)
|
|
|
- console.log('boxVideos', data)
|
|
|
- list.value = data
|
|
|
+ const videoData = JSON.parse(boxVideos.value)
|
|
|
+ const boxData = JSON.parse(boxModels.value)
|
|
|
+ console.log('boxVideos', videoData)
|
|
|
+ if (videoData && aiData.value.length === 0) {
|
|
|
+ list.value = list.value.concat(
|
|
|
+ videoData.map((item) => {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ audioId: null,
|
|
|
+ audioFilePath: null
|
|
|
+ }
|
|
|
+ })
|
|
|
+ )
|
|
|
+ }
|
|
|
+ if (videoData && aiData.value.length === 0) {
|
|
|
+ list.value = list.value.concat(
|
|
|
+ boxData.map((item) => {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ audioId: null,
|
|
|
+ audioFilePath: null
|
|
|
+ }
|
|
|
+ })
|
|
|
+ )
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
})
|
|
|
+watchEffect(() => {
|
|
|
+ if (aiData.value.length > 0) {
|
|
|
+ list.value = aiData.value
|
|
|
+ }
|
|
|
+})
|
|
|
onUnmounted(() => {
|
|
|
// setWidthSceneRef(0)
|
|
|
})
|
|
|
+const handleSelect = (audioId: any, vid: any) => {
|
|
|
+ const file = audiolist.value.find((i) => i.id === audioId)
|
|
|
+ const models = Array.from(list.value.flat() || []).find((i) => i.sid === vid)
|
|
|
+ const fileName = file.voicePath.substring(file.voicePath.lastIndexOf('/') + 1)
|
|
|
+ if (file.voicePath?.length && models) {
|
|
|
+ // debugger
|
|
|
+ models.audioFilePath = fileName
|
|
|
+ console.log('models', models)
|
|
|
+ main.syncAISetting(list.value)
|
|
|
+ }
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style lang="sass" scoped>
|