diff --git a/mini-program/src/components/ScriptAudioPlayer.vue b/mini-program/src/components/ScriptAudioPlayer.vue
new file mode 100644
index 0000000..635de66
--- /dev/null
+++ b/mini-program/src/components/ScriptAudioPlayer.vue
@@ -0,0 +1,319 @@
+
+
+
+ {{ statusText }}
+
+
+
+
+
+
diff --git a/mini-program/src/pages/main/ScriptDetailView.vue b/mini-program/src/pages/main/ScriptDetailView.vue
index f2f8182..30a757a 100644
--- a/mini-program/src/pages/main/ScriptDetailView.vue
+++ b/mini-program/src/pages/main/ScriptDetailView.vue
@@ -28,6 +28,7 @@
字数
+
@@ -61,6 +62,7 @@
import { computed, onMounted, ref } from 'vue'
import { useAppStore } from '../../stores/app.js'
import Markdown from '../../components/Markdown.vue'
+import ScriptAudioPlayer from '../../components/ScriptAudioPlayer.vue'
const store = useAppStore()
const statusBarHeight = ref(20)
diff --git a/mini-program/src/services/tts.js b/mini-program/src/services/tts.js
new file mode 100644
index 0000000..87e68a4
--- /dev/null
+++ b/mini-program/src/services/tts.js
@@ -0,0 +1,30 @@
+import { get, post } from './request.js'
+
+const DEFAULT_SOURCE_TYPE = 'epic_script'
+const DEFAULT_VOICE = 'default_zh_female'
+
+export const createTtsTask = ({
+ sourceType = DEFAULT_SOURCE_TYPE,
+ sourceId,
+ voice = DEFAULT_VOICE
+}) => {
+ return post('/tts/tasks', { sourceType, sourceId, voice })
+}
+
+export const getTtsTask = (id) => {
+ return get(`/tts/tasks/${id}`)
+}
+
+export const getTtsTaskBySource = ({
+ sourceType = DEFAULT_SOURCE_TYPE,
+ sourceId,
+ voice = DEFAULT_VOICE
+}) => {
+ return get('/tts/tasks/by-source', { sourceType, sourceId, voice })
+}
+
+export default {
+ createTtsTask,
+ getTtsTask,
+ getTtsTaskBySource
+}