zhuf 1 年之前
父节点
当前提交
37546c59ae
共有 6 个文件被更改,包括 157 次插入11 次删除
  1. 140 1
      src/pages/caiji/rx/name.vue
  2. 2 2
      src/pages/caiji/rx/read.vue
  3. 3 3
      src/pages/caiji/sy/name.vue
  4. 3 0
      src/pages/caiji/sy/record/[id].vue
  5. 5 5
      src/request.ts
  6. 4 0
      src/vite-env.d.ts

+ 140 - 1
src/pages/caiji/rx/name.vue

@@ -1,7 +1,146 @@
 <script setup lang='ts'>
+import request from '~/request'
+import { showFailToast, showSuccessToast, showDialog } from 'vant';
+
+const router = useRouter()
+
+function onClickLeft() {
+  router.back()
+}
+
+const form = reactive({
+  // axa_sycj_zdysyid_v2: undefined,
+  axi_name: undefined,
+  mode: '2',
+  file: undefined,
+  axi_rxcj_spwj_v2: undefined,
+})
+function onSubmit() {
+  request({
+    url: '/aimooc/xnszr_img/add',
+    data: {
+      aimooc_xnszr_audio: {
+        axi_is_system: 2,
+        axi_name: form.axi_name,
+        axi_rxcj_spwj_v2: form.axi_rxcj_spwj_v2,
+      }
+    }
+  }).then((res: any) => {
+    const info = res.data.one_info
+    console.log('info : ', info)
+    if (res?.code === '1') {
+      showDialog({
+        title: '提示',
+        message: '提交成功',
+        confirmButtonText: '返回首页',
+      }).then(() => {
+        router.back()
+      })
+    } else {
+      showDialog({
+        title: '提示',
+        message: res?.msg,
+        confirmButtonText: '重新提交',
+      }).then(() => {
+        onSubmit()
+      })
+    }
+    // router.back()
+  })
+};
+
+function afterRead(file: any) {
+  file.status = 'uploading';
+  file.message = '上传中...';
+  console.log('文件类型 : ', file.file.type)
+  // form.axi_rxcj_spwj_v2 = file.content
+  request({
+    url: '/upload/main/file',
+    data: {
+      filedata: file.file
+    },
+    transformRequest: [
+      function (data: any) {
+        const formData = new FormData();
+        Object.keys(data).forEach(key => formData.append(key, data[key]))
+        return formData;
+      },
+    ],
+  }).then((res: any) => {
+    console.log('res : ', res)
+    if (res?.code === '1') {
+      form.axi_rxcj_spwj_v2 = res.data.url
+      file.status = 'finished';
+      file.message = '上传成功';
+    } else {
+      showFailToast(res?.msg)
+      file.status = 'failed';
+      file.message = '上传失败';
+    }
+  })
+}
+
+function changeMode(name: string) {
+  if (form.axi_rxcj_spwj_v2) {
+    form.file = undefined
+    form.axi_rxcj_spwj_v2 = undefined
+  }
+  if (name === '2') {
+    try {
+      navigator?.mediaDevices
+        ?.getUserMedia({ video: true })
+        ?.catch(() => {
+          showDialog({
+            title: '提示',
+            message: '请在设置中打开相机权限,如果已经打开依然提示说明您的浏览器不支持',
+          });
+          form.mode = '1'
+        });
+    } catch (error) {
+      showDialog({
+        title: '提示',
+        message: '请在设置中打开相机权限,如果已经打开依然提示说明您的浏览器不支持',
+      });
+      form.mode = '1'
+    }
+  }
+}
+
 
 </script>
 
 <template>
-  <div></div>
+  <van-nav-bar title="选择人像采集模式" left-arrow @click-left="onClickLeft"></van-nav-bar>
+  <div class="flex-auto py-4 ">
+    <van-form class="h-full flex flex-col" @submit="onSubmit">
+      <van-cell-group inset>
+        <van-field v-model="form.axi_name" name="请输入数字人名称" label="数字人名称" placeholder=""
+          :rules="[{ required: true, message: '数字人名称不能为空' }]" />
+        <van-field name="请选择人像采集模式" label="人像采集模式">
+          <template #input>
+            <van-radio-group v-model="form.mode" @change="changeMode">
+              <van-radio name="2">已有录制,上传视频</van-radio>
+              <van-radio class="mt-14px" name="1">手机录制</van-radio>
+            </van-radio-group>
+          </template>
+        </van-field>
+        <van-field v-if="form.mode === '1'" name="录制视频" label="录制视频" :rules="[{ required: true, message: '录制视频不能为空' }]">
+          <template #input>
+            <van-uploader v-model="form.file" :max-count="1" accept="video/*" capture="user" :after-read="afterRead" />
+          </template>
+        </van-field>
+        <van-field v-if="form.mode === '2'" name="上传视频" label="上传视频" :rules="[{ required: true, message: '上传视频不能为空' }]">
+          <template #input>
+            <van-uploader v-model="form.file" :max-count="1" accept="video/*" :after-read="afterRead" />
+          </template>
+        </van-field>
+
+      </van-cell-group>
+      <div class="px-4 mt-20">
+        <van-button block type="primary" native-type="submit">
+          提交
+        </van-button>
+      </div>
+    </van-form>
+  </div>
 </template>

+ 2 - 2
src/pages/caiji/rx/read.vue

@@ -7,7 +7,7 @@ function onClickLeft() {
   router.back();
 }
 
-const leftTime = ref(1);
+const leftTime = ref(15);
 const timer = ref();
 
 onMounted(() => {
@@ -49,7 +49,7 @@ onMounted(() => {
         </p>
         <div class="text-lg font-semibold">设备</div>
         <p style="margin-top: 0">
-          选择一款可拍摄分辨率1080P及以上、帧率30FPS及以上视频的手机或摄像机。
+          选择一款可拍摄分辨率1080P及以上、帧率30FPS及以上视频的手机或摄像机。
         </p>
         <p>
           手机或摄像机使用专业二脚架或手机支架固定,关闭自动对焦功能,确保拍摄画面稳定、不失焦、无抖动。

+ 3 - 3
src/pages/caiji/sy/name.vue

@@ -73,8 +73,8 @@ function onSubmit(values: any) {
         <!-- <van-field v-model="form.axa_sycj_zdysyid_v2" name="声音id" label="声音id" placeholder="自定义的声音id,英文或拼音"
           :rules="[{ required: true, message: '' }]" /> -->
         <van-field v-model="form.axa_name" name="声音名字" label="声音名字" placeholder="声音名字,一般为中文名"
-          :rules="[{ required: true, message: '' }]" />
-        <van-field name="性别" label="性别" :rules="[{ required: true, message: '' }]">
+          :rules="[{ required: true, message: '声音名字不能为空' }]" />
+        <van-field name="性别" label="性别" :rules="[{ required: true, message: '性别不能为空' }]">
           <template #input>
             <van-radio-group v-model="form.axa_sycj_syxb_v2" direction="horizontal">
               <van-radio name="male">男性</van-radio>
@@ -83,7 +83,7 @@ function onSubmit(values: any) {
           </template>
         </van-field>
         <van-field v-model="form.axa_mssc" name="声音描述" label="声音描述" placeholder="声音描述" rows="3" autosize type="textarea"
-          :rules="[{ required: true, message: '' }]" />
+          :rules="[{ required: true, message: '声音描述不能为空' }]" />
       </van-cell-group>
       <div class="px-4 mt-20">
         <van-button block type="primary" native-type="submit">

+ 3 - 0
src/pages/caiji/sy/record/[id].vue

@@ -171,6 +171,9 @@ function stopAudioRecord() {
   mediaRecorder = null
 
   const blob = new Blob(audioChunks, { type: 'video/webm' });
+  if (userAudio.value) {
+    window.URL.revokeObjectURL(userAudio.value);
+  }
   userAudio.value = window.URL.createObjectURL(blob);
 
   isRecording.value = false

+ 5 - 5
src/request.ts

@@ -1,12 +1,11 @@
 import axios from 'axios'
+import { user } from '~/store/user'
 
-// const user = JSON.parse(localStorage.getItem('userInfo') ?? 'null');
-// const token = user?.token
-const token = '0ccdZ9QR_a7mNT9eNB784IbdZC3cJBtRMbuXWg_btjWlPsYX_bLlRN6RJ2Rtq3vsHs90gRM51pbxYqamXsT18QuDMQn0cQ'
+const token = user.value?.token
 
-const isDev = false
+// const isDev = false
 
-const baseURL = isDev ? 'https://aimoocapi.bozedu.net' : 'https://aimoocapi.bozedu.net'
+const baseURL = window.GLOBAL_CONFIG.api
 
 const Request = axios.create({
   baseURL,
@@ -23,6 +22,7 @@ Request.interceptors.request.use(
       {
         token,
         api: 'json',
+        site: 'aimk',
         issubmit: 1
       },
       config.data || {}

+ 4 - 0
src/vite-env.d.ts

@@ -1 +1,5 @@
 /// <reference types="vite/client" />
+
+interface window {
+  GLOBAL_CONFIG: any
+}