gemercheung 9 ماه پیش
والد
کامیت
f1cb22c9b9

+ 1 - 0
src/api/alova.ts

@@ -12,6 +12,7 @@ export const Alova = createAlova({
   statesHook: VueHook,
   requestAdapter: adapterFetch(),
   timeout: 3000,
+  cacheFor: null,
   cacheLogger: process.env.NODE_ENV === 'development',
   responded: {
     onSuccess: async (response, method) => {

+ 24 - 0
src/api/module/message.ts

@@ -0,0 +1,24 @@
+import { Alova, url } from '../alova'
+
+/**
+ * 拉取列表数据
+ * @param num
+ */
+export const fetchMessageList = (num: string) => {
+  return Alova.Get(url.messageList, {
+    params: {
+      num
+    }
+  })
+}
+
+export const auditMessage = (params: { num: string; id: number }) => {
+  return Alova.Post(url.messageAudit, {
+    ...params
+  })
+}
+export const delMessage = (params: { num: string; id: number }) => {
+  return Alova.Post(url.messageDel, {
+    ...params
+  })
+}

+ 8 - 4
src/api/module/tts.ts

@@ -20,14 +20,18 @@ export const saveTOTTS = (params: SaveTOTTSParams) => {
   return Alova.Post(url.ttsSave, {
     ...params,
     speed: String(params.speed),
-    volume: String(params.volume)
+    volume: String(params.volume),
+    //
+    voiceType: '101040'
   })
 }
 
 export const saveTOSTT = (params: { id?: string; num: string; file: File }) => {
-  return Alova.Post(url.ttsSave, {
-    ...params
-  })
+  const forms = new FormData()
+  forms.append('file', params.file)
+  forms.append('num', params.num)
+  params.id && forms.append('id', params.id)
+  return Alova.Post(url.sttSave, forms)
 }
 
 export const deleteTTS = (params: { id: number; num: string }) => {

+ 14 - 10
src/api/url.ts

@@ -1,10 +1,14 @@
-const url = {
-    //tts
-    ttsList: "/service/scene/edit/scrb/textVoiceTransfer/list",
-    ttsDel: "/service/scene/edit/scrb/textVoiceTransfer/delete",
-    ttsSave: "/service/scene/edit/scrb/tts/save",
-    sttSave: '/service/scene/edit/scrb/asr/save'
-
-}
-
-export { url }
+const url = {
+  //tts
+  ttsList: '/service/scene/edit/scrb/textVoiceTransfer/list',
+  ttsDel: '/service/scene/edit/scrb/textVoiceTransfer/delete',
+  ttsSave: '/service/scene/edit/scrb/tts/save',
+  sttSave: '/service/scene/edit/scrb/asr/save',
+  messageList: '/service/scene/edit/scrb/leaveWord/list',
+  messageAdd: '/service/scene/scrb/leaveWord/add',
+  messageDel: '/service/scene/edit/scrb/leaveWord/delete',
+  messageAudit: '/service/scene/edit/scrb/leaveWord/audit',
+
+}
+
+export { url }

+ 1 - 0
src/views/basicSettings/index.vue

@@ -9,6 +9,7 @@
       :block-scroll="false"
       :show-mask="false"
       to="#drawer-target"
+      style="--n-body-padding: 0px"
     >
       <n-drawer-content title="基础设置">
         <div class="drawerContent m-5">

+ 1 - 0
src/views/digitalHuman/index.vue

@@ -10,6 +10,7 @@
       :show-mask="false"
       :mask-closable="false"
       to="#drawer-target"
+      style="--n-body-padding: 0px"
     >
       <n-drawer-content title="数字人播报">
         <div class="drawerContent m-5">

+ 138 - 0
src/views/message/index.vue

@@ -1,9 +1,147 @@
 <template>
   <div>留言互动</div>
+  <n-drawer
+    v-model:show="show"
+    :width="340"
+    placement="right"
+    :trap-focus="false"
+    :block-scroll="false"
+    :show-mask="false"
+    :mask-closable="false"
+    to="#drawer-target"
+    style="--n-body-padding: 0px"
+  >
+    <n-drawer-content title="留言列表">
+      <n-list
+        hoverable
+        clickable
+        style="--n-color-modal: none"
+        :show-divider="false"
+      >
+        <n-list-item
+          v-for="(ms, index) in messageList"
+          :key="index"
+          style=""
+          @click="handleMessageClick(ms)"
+        >
+          <n-flex justify="space-between">
+            {{ ms.content.content }}
+
+            <n-dropdown
+              trigger="hover"
+              :options="ms.status === 0 ? fullPptions : delPptions"
+              @select="(key) => handleSelect(key, ms)"
+            >
+              <n-icon :size="20">
+                <svg
+                  xmlns="http://www.w3.org/2000/svg"
+                  xmlns:xlink="http://www.w3.org/1999/xlink"
+                  viewBox="0 0 32 32"
+                >
+                  <circle cx="8" cy="16" r="2" fill="currentColor"></circle>
+                  <circle cx="16" cy="16" r="2" fill="currentColor"></circle>
+                  <circle cx="24" cy="16" r="2" fill="currentColor"></circle>
+                </svg>
+              </n-icon>
+            </n-dropdown>
+          </n-flex>
+        </n-list-item>
+      </n-list>
+    </n-drawer-content>
+  </n-drawer>
 </template>
 
 <script setup lang="ts">
+import { computed, onBeforeMount, onMounted, ref, watch } from 'vue'
+import { useMainStore } from '@/store'
+import { NList, NListItem, NDropdown, useDialog, useMessage } from 'naive-ui'
+import {
+  fetchMessageList,
+  auditMessage,
+  delMessage
+} from '@/api/module/message'
+import type { MessageItem } from './type'
+import { sdk } from '@/sdk'
+
+const show = ref(true)
 defineProps<{ msg: string }>()
+
+const messageList = ref<MessageItem[]>([])
+const dialog = useDialog()
+const message = useMessage()
+const main = useMainStore()
+onBeforeMount(() => {
+  main.setWidthSceneRef(340)
+})
+
+onMounted(() => {
+  show.value = true
+  refresh()
+
+  // sdk.then((sdk) => {
+  //
+  // })
+})
+
+const refresh = async () => {
+  const res = await fetchMessageList(main.sceneCode)
+  console.log('res', res)
+  messageList.value = (res as never as MessageItem[]) || []
+}
+const handleMessageClick = async (ms: MessageItem) => {
+  sdk.then((sdk) => {
+    sdk.TagManager.openTag(ms.content.sid) // 打开热点
+  })
+}
+const fullPptions = ref([
+  {
+    label: '审核并屏示',
+    key: '1'
+  },
+  {
+    label: '删除',
+    key: '2'
+  }
+])
+const delPptions = ref([
+  {
+    label: '删除',
+    key: '2'
+  }
+])
+
+const handleSelect = async (key: string, ms: MessageItem) => {
+  console.log('handleSelect', key, ms.id)
+  switch (key) {
+    case '1':
+      await auditMessage({
+        id: Number(ms.id),
+        num: main.sceneCode
+      })
+      message.success('审核成功!')
+      await refresh()
+      break
+    case '2':
+      dialog.warning({
+        title: '删除',
+        content: '是否确定删除?',
+        negativeText: '取消',
+        positiveText: '确认',
+        onPositiveClick: async () => {
+          await delMessage({
+            id: Number(ms.id),
+            num: main.sceneCode
+          })
+          sdk.then((sdk) => {
+            sdk.TagManager.removeTag(ms.content.sid) // 打开热点
+          })
+          await refresh()
+        }
+      })
+      break
+  }
+}
+
 // __sdk.TagManager.openTag('1730448544227') // 打开热点
 // __sdk.TagManager.removeTag('1730448544227') // 移除热点
 </script>

+ 9 - 0
src/views/message/type.ts

@@ -0,0 +1,9 @@
+export interface MessageItem {
+  content: {
+    content: string
+    sid: string
+  },
+  id: string
+  num: number
+  status: number
+}

+ 14 - 7
src/views/textToaudio/index.vue

@@ -4,9 +4,9 @@
       <div class="title">文字语音互转</div>
       <div class="bottomList">
         <n-space>
-          <n-button type="primary" @click="handleAddTTS"> 音转文</n-button>
+          <n-button type="primary" @click="handleAddTTS"> 文转音</n-button>
           <n-button type="primary" @click="showSTTModel.show = true">
-            文转
+            音转文
           </n-button>
         </n-space>
       </div>
@@ -24,6 +24,7 @@
       :is-editing="showTTSModel.isEditing"
       :data="showTTSModel.data"
       @close="showTTSModel.show = false"
+      @submit="(showTTSModel.show = false) && refresh()"
     ></TtsModel>
 
     <SttModel
@@ -31,6 +32,7 @@
       :is-editing="showSTTModel.isEditing"
       :data="showSTTModel.data"
       @close="showSTTModel.show = false"
+      @submit="(howSTTModel.show = false) && refresh()"
     ></SttModel>
   </div>
 </template>
@@ -78,13 +80,18 @@ const paginationReactive = reactive({
 onMounted(async () => {
   watchEffect(async () => {
     if (main.sceneCode) {
-      const res = await fetchTtsList(main.sceneCode)
-      console.log('data', res)
-      data.value = res as never as TTSItem[]
+     await refresh()
     }
   })
 })
 
+const refresh = async () => {
+  console.warn('refresh')
+  const res = await fetchTtsList(main.sceneCode)
+  console.log('data', res)
+  data.value = res as never as TTSItem[]
+}
+
 const columns = [
   {
     title: '序号',
@@ -193,11 +200,11 @@ const handleDelTTS = (id: number) => {
     negativeText: '取消',
     positiveText: '确认',
     onPositiveClick: async () => {
-      const res = await deleteTTS({
+      await deleteTTS({
         id,
         num: main.sceneCode
       })
-      console.log(res)
+      await refresh()
     }
   })
 }

+ 5 - 4
src/views/textToaudio/sttModel.vue

@@ -70,7 +70,7 @@ const form = reactive<{ file: File | null }>({
   file: null
 })
 
-const emits = defineEmits(['close'])
+const emits = defineEmits(['close','submit'])
 
 const props = defineProps({
   show: {
@@ -98,14 +98,15 @@ const handleSave = async () => {
       file: form.file,
       num: main.sceneCode
     }
-    const res = await saveTOSTT(data)
-    console.log(res)
+    await saveTOSTT(data)
+    emits('submit')
+
   } else {
     message.error('请上传语音文件')
   }
 }
 const handleFileChange = (options: { fileList: UploadFileInfo[] }) => {
-  form.file = options.fileList[0]
+  form.file = options.fileList[0].file
 }
 
 watchEffect(() => {

+ 7 - 7
src/views/textToaudio/ttsModel.vue

@@ -74,16 +74,16 @@
               <n-slider
                 v-model:value="form.speed"
                 :step="0.1"
-                :min="0"
-                :max="2"
+                :min="0.6"
+                :max="2.5"
               />
             </n-form-item>
             <n-form-item label="音量" path="inputValue">
               <n-slider
                 v-model:value="form.volume"
-                :step="0.1"
-                :min="0"
-                :max="2"
+                :step="1"
+                :min="-10"
+                :max="10"
               />
             </n-form-item>
           </n-form>
@@ -115,8 +115,8 @@ const formId = ref()
 const form = reactive({
   document: '',
   voiceType: 0,
-  speed: 0.5,
-  volume: 0.5
+  speed: 1,
+  volume: 5
 })
 
 const emits = defineEmits(['close', 'submit'])

+ 1 - 0
src/views/topicNavigation/index.vue

@@ -9,6 +9,7 @@
       :show-mask="false"
       :mask-closable="false"
       to="#drawer-target"
+      style="--n-body-padding: 0px"
     >
       <n-drawer-content title="专题导航">
         <div class="drawerContent m-5">