|
@@ -43,18 +43,17 @@
|
|
|
<div class="nt_btn">创建新的课堂</div>
|
|
<div class="nt_btn">创建新的课堂</div>
|
|
|
</div> -->
|
|
</div> -->
|
|
|
<div class="chat">
|
|
<div class="chat">
|
|
|
- <div class="chatTxt" v-text="bmData.jsonData ? bmData.jsonData.transcriptionData : ''"></div>
|
|
|
|
|
|
|
+ <div
|
|
|
|
|
+ ref="transcriptionDataRef"
|
|
|
|
|
+ class="chatTxt"
|
|
|
|
|
+ v-text="bmData.jsonData ? bmData.jsonData.transcriptionData : ''"
|
|
|
|
|
+ ></div>
|
|
|
<img src="../../assets/images/classObserve/waveanimation.png" alt="" />
|
|
<img src="../../assets/images/classObserve/waveanimation.png" alt="" />
|
|
|
<div class="time">{{ recordedForm.time }}</div>
|
|
<div class="time">{{ recordedForm.time }}</div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="controlArea" v-loading="recordedForm.loading">
|
|
<div class="controlArea" v-loading="recordedForm.loading">
|
|
|
<div class="ca_left">
|
|
<div class="ca_left">
|
|
|
- <img
|
|
|
|
|
-
|
|
|
|
|
- @click="goChat"
|
|
|
|
|
- src="../../assets/images/classObserve/rootper.svg"
|
|
|
|
|
- alt=""
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <img @click="goChat" src="../../assets/images/classObserve/rootper.svg" alt="" />
|
|
|
<van-popover placement="top" v-model="changeLanguageShow" trigger="click">
|
|
<van-popover placement="top" v-model="changeLanguageShow" trigger="click">
|
|
|
<div class="languageList">
|
|
<div class="languageList">
|
|
|
<div
|
|
<div
|
|
@@ -67,7 +66,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<template #reference>
|
|
<template #reference>
|
|
|
- <img src="../../assets/images/classObserve/langcut.svg" alt="" />
|
|
|
|
|
|
|
+ <img src="../../assets/images/classObserve/langcut.svg" alt="" />
|
|
|
</template>
|
|
</template>
|
|
|
</van-popover>
|
|
</van-popover>
|
|
|
</div>
|
|
</div>
|
|
@@ -88,21 +87,20 @@
|
|
|
</div>
|
|
</div>
|
|
|
<div class="ca_right">
|
|
<div class="ca_right">
|
|
|
<img
|
|
<img
|
|
|
- style="transform: scale(1.1,1.1);"
|
|
|
|
|
|
|
+ style="transform: scale(1.1,1.1);"
|
|
|
src="../../assets/images/classObserve/suspend.svg"
|
|
src="../../assets/images/classObserve/suspend.svg"
|
|
|
alt=""
|
|
alt=""
|
|
|
v-if="[1].includes(recordedForm.status)"
|
|
v-if="[1].includes(recordedForm.status)"
|
|
|
@click.stop="stopRecord"
|
|
@click.stop="stopRecord"
|
|
|
/>
|
|
/>
|
|
|
<img
|
|
<img
|
|
|
-
|
|
|
|
|
src="../../assets/images/classObserve/start.svg"
|
|
src="../../assets/images/classObserve/start.svg"
|
|
|
alt=""
|
|
alt=""
|
|
|
v-if="[2].includes(recordedForm.status)"
|
|
v-if="[2].includes(recordedForm.status)"
|
|
|
@click.stop="reStartRecord"
|
|
@click.stop="reStartRecord"
|
|
|
/>
|
|
/>
|
|
|
<img
|
|
<img
|
|
|
- style="transform: scale(.8,.8);"
|
|
|
|
|
|
|
+ style="transform: scale(.8,.8);"
|
|
|
src="../../assets/images/classObserve/uploadFile.svg"
|
|
src="../../assets/images/classObserve/uploadFile.svg"
|
|
|
alt=""
|
|
alt=""
|
|
|
v-if="[0, 3].includes(recordedForm.status)"
|
|
v-if="[0, 3].includes(recordedForm.status)"
|
|
@@ -182,7 +180,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</van-action-sheet>
|
|
</van-action-sheet>
|
|
|
|
|
|
|
|
- <!-- 录音转文字 -->
|
|
|
|
|
|
|
+ <!-- 录音转文字 -->
|
|
|
<iframe
|
|
<iframe
|
|
|
allow="camera *; microphone *;display-capture;midi;encrypted-media;"
|
|
allow="camera *; microphone *;display-capture;midi;encrypted-media;"
|
|
|
src="https://beta.cloud.cocorobo.cn/browser/public/index.html"
|
|
src="https://beta.cloud.cocorobo.cn/browser/public/index.html"
|
|
@@ -195,46 +193,44 @@
|
|
|
<script>
|
|
<script>
|
|
|
import { Dialog } from 'vant'
|
|
import { Dialog } from 'vant'
|
|
|
import { loginOut } from '@/api/user'
|
|
import { loginOut } from '@/api/user'
|
|
|
-import _ from "lodash";
|
|
|
|
|
-import Papa from "papaparse";
|
|
|
|
|
|
|
+import _ from 'lodash'
|
|
|
|
|
+import Papa from 'papaparse'
|
|
|
import '../../utils/aws-sdk-2.235.1.min.js'
|
|
import '../../utils/aws-sdk-2.235.1.min.js'
|
|
|
-import {upload_file_knowledgeRequest } from '@/api/classObserve.js'
|
|
|
|
|
|
|
+import { upload_file_knowledgeRequest } from '@/api/classObserve.js'
|
|
|
|
|
|
|
|
-const getFile = (url) => {
|
|
|
|
|
|
|
+const getFile = url => {
|
|
|
return new Promise((resolve, reject) => {
|
|
return new Promise((resolve, reject) => {
|
|
|
var credentials = {
|
|
var credentials = {
|
|
|
- accessKeyId: "AKIATLPEDU37QV5CHLMH",
|
|
|
|
|
- secretAccessKey: "Q2SQw37HfolS7yeaR1Ndpy9Jl4E2YZKUuuy2muZR",
|
|
|
|
|
- }; //秘钥形式的登录上传
|
|
|
|
|
- window.AWS.config.update(credentials);
|
|
|
|
|
- window.AWS.config.region = "cn-northwest-1"; //设置区域
|
|
|
|
|
- let url2 = url;
|
|
|
|
|
- let _url2 = "";
|
|
|
|
|
- if (url2.indexOf("https://view.officeapps.live.com/op/view.aspx?src=") != -1) {
|
|
|
|
|
- _url2 = url2.split("https://view.officeapps.live.com/op/view.aspx?src=")[1];
|
|
|
|
|
|
|
+ accessKeyId: 'AKIATLPEDU37QV5CHLMH',
|
|
|
|
|
+ secretAccessKey: 'Q2SQw37HfolS7yeaR1Ndpy9Jl4E2YZKUuuy2muZR'
|
|
|
|
|
+ } //秘钥形式的登录上传
|
|
|
|
|
+ window.AWS.config.update(credentials)
|
|
|
|
|
+ window.AWS.config.region = 'cn-northwest-1' //设置区域
|
|
|
|
|
+ let url2 = url
|
|
|
|
|
+ let _url2 = ''
|
|
|
|
|
+ if (url2.indexOf('https://view.officeapps.live.com/op/view.aspx?src=') != -1) {
|
|
|
|
|
+ _url2 = url2.split('https://view.officeapps.live.com/op/view.aspx?src=')[1]
|
|
|
} else {
|
|
} else {
|
|
|
- _url2 = url2;
|
|
|
|
|
|
|
+ _url2 = url2
|
|
|
}
|
|
}
|
|
|
- var s3 = new window.AWS.S3({ params: { Bucket: "ccrb" } });
|
|
|
|
|
- let name = decodeURIComponent(
|
|
|
|
|
- _url2.split("https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/")[1]
|
|
|
|
|
- );
|
|
|
|
|
|
|
+ var s3 = new window.AWS.S3({ params: { Bucket: 'ccrb' } })
|
|
|
|
|
+ let name = decodeURIComponent(_url2.split('https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/')[1])
|
|
|
var params = {
|
|
var params = {
|
|
|
- Bucket: "ccrb",
|
|
|
|
|
- Key: name,
|
|
|
|
|
- };
|
|
|
|
|
- s3.getObject(params, function (err, data) {
|
|
|
|
|
|
|
+ Bucket: 'ccrb',
|
|
|
|
|
+ Key: name
|
|
|
|
|
+ }
|
|
|
|
|
+ s3.getObject(params, function(err, data) {
|
|
|
if (err) {
|
|
if (err) {
|
|
|
- console.log(err, err.stack);
|
|
|
|
|
- resolve({ data: 1 });
|
|
|
|
|
|
|
+ console.log(err, err.stack)
|
|
|
|
|
+ resolve({ data: 1 })
|
|
|
} else {
|
|
} else {
|
|
|
- const fileContent = data.Body.toString("utf-8");
|
|
|
|
|
- resolve({ data: fileContent });
|
|
|
|
|
|
|
+ const fileContent = data.Body.toString('utf-8')
|
|
|
|
|
+ resolve({ data: fileContent })
|
|
|
} // sxuccessful response
|
|
} // sxuccessful response
|
|
|
- });
|
|
|
|
|
|
|
+ })
|
|
|
// axios({
|
|
// axios({
|
|
|
- });
|
|
|
|
|
-};
|
|
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
export default {
|
|
export default {
|
|
|
props: {
|
|
props: {
|
|
|
page: {
|
|
page: {
|
|
@@ -257,7 +253,7 @@ export default {
|
|
|
data() {
|
|
data() {
|
|
|
return {
|
|
return {
|
|
|
isParse: false,
|
|
isParse: false,
|
|
|
- loading:false,
|
|
|
|
|
|
|
+ loading: false,
|
|
|
recordedForm: {
|
|
recordedForm: {
|
|
|
time: '00:00:00', //时间
|
|
time: '00:00:00', //时间
|
|
|
status: 0, //0--未录音 1--正在录音 2--暂停 3--录音结束
|
|
status: 0, //0--未录音 1--正在录音 2--暂停 3--录音结束
|
|
@@ -270,7 +266,7 @@ export default {
|
|
|
loading: false
|
|
loading: false
|
|
|
},
|
|
},
|
|
|
historyShow: false,
|
|
historyShow: false,
|
|
|
- uploadFileLoading:false,
|
|
|
|
|
|
|
+ uploadFileLoading: false,
|
|
|
abuShowId: '',
|
|
abuShowId: '',
|
|
|
historyListLoading: false,
|
|
historyListLoading: false,
|
|
|
addNewCourseShow: false,
|
|
addNewCourseShow: false,
|
|
@@ -324,108 +320,310 @@ export default {
|
|
|
this.isParse = !this.isParse
|
|
this.isParse = !this.isParse
|
|
|
},
|
|
},
|
|
|
endRecord() {
|
|
endRecord() {
|
|
|
- if(this.recordedForm.loading)return;
|
|
|
|
|
- console.log('结束录音')
|
|
|
|
|
- this.recordedForm.status = 3
|
|
|
|
|
|
|
+ if (this.recordedForm.loading) return this.$toast('请稍等')
|
|
|
|
|
+ if ([1].includes(this.recordedForm.status)) {
|
|
|
|
|
+ //正在录音时暂停
|
|
|
|
|
+ let iiframe = this.$refs['iiframe']
|
|
|
|
|
+ iiframe.contentWindow.window.document.getElementById('scenarioStopButton').click()
|
|
|
|
|
+ // 录音借宿
|
|
|
|
|
+ iiframe.contentWindow.onSessionStopped = (s, e) => {
|
|
|
|
|
+ this.recordedForm.status = 3
|
|
|
|
|
+ // this.controlsStatus = 2;
|
|
|
|
|
+ // this.showGetTextLoading = false;
|
|
|
|
|
+ this.$toast('已结束录音')
|
|
|
|
|
+ clearInterval(this.recordedForm.timer)
|
|
|
|
|
+ console.log('结束录音👇')
|
|
|
|
|
+ console.log('结束录音', e)
|
|
|
|
|
+ this.recordedForm.audioBlob.push(e.preaudio)
|
|
|
|
|
+ let blob = new Blob(this.recordedForm.audioBlob, {
|
|
|
|
|
+ type: 'audio/wav'
|
|
|
|
|
+ })
|
|
|
|
|
+ let file = new File([blob], 'recordedFile.wav', {
|
|
|
|
|
+ type: 'text/plain'
|
|
|
|
|
+ })
|
|
|
|
|
+ this.uploadFile(file, { changeText: false, flag: true })
|
|
|
|
|
+ iiframe.contentWindow.onSessionStopped = null
|
|
|
|
|
+ iiframe.contentWindow.onRecognizedResult = null
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if ([2].includes(this.recordedForm.status)) {
|
|
|
|
|
+ //暂停时结束录音
|
|
|
|
|
+ //暂停录音时
|
|
|
|
|
+ this.recordedForm.status = 3
|
|
|
|
|
+ // this.controlsStatus = 2;
|
|
|
|
|
+ // this.showGetTextLoading = false;
|
|
|
|
|
+ clearInterval(this.recordedForm.timer)
|
|
|
|
|
+ let blob = new Blob(this.recordedForm.audioBlob, {
|
|
|
|
|
+ type: 'audio/wav'
|
|
|
|
|
+ })
|
|
|
|
|
+ let file = new File([blob], 'recordedFile.wav', { type: 'text/plain' })
|
|
|
|
|
+ this.uploadFile(file, { changeText: false, flag: true })
|
|
|
|
|
+ }
|
|
|
},
|
|
},
|
|
|
startRecord() {
|
|
startRecord() {
|
|
|
- // if(this.recordedForm.loading)return;
|
|
|
|
|
- // if(!this.tid){
|
|
|
|
|
- // return this.$parent.addNewCourseByDefault().then(_=>{
|
|
|
|
|
- // this.startRecord()
|
|
|
|
|
- // })
|
|
|
|
|
- // }
|
|
|
|
|
- // this.$toast.success("已开始录音")
|
|
|
|
|
|
|
+ if (this.recordedForm.loading) return this.$toast('请稍等')
|
|
|
|
|
+ if (!this.tid) {
|
|
|
|
|
+ return Dialog.confirm({
|
|
|
|
|
+ title: '创建课堂并录音',
|
|
|
|
|
+ message: `确定使用默认模板来创建新的课堂并开始录音?`
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(() => {
|
|
|
|
|
+ return this.$parent.addNewCourseByDefault().then(_ => {
|
|
|
|
|
+ this.startRecord()
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(_ => {
|
|
|
|
|
+ console.log('不创建')
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ // this.$toast.success("已开始录音")
|
|
|
// console.log('开始录音')
|
|
// console.log('开始录音')
|
|
|
- this.recordedForm.status = 1
|
|
|
|
|
|
|
+ if (this.uploadFileLoading) return this.$toast('请稍等...')
|
|
|
|
|
+ if ([0].includes(this.recordedForm.status)) {
|
|
|
|
|
+ Dialog.confirm({
|
|
|
|
|
+ title: '开始录音',
|
|
|
|
|
+ message: `确定开始录音?`
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(() => {
|
|
|
|
|
+ let iiframe = this.$refs['iiframe']
|
|
|
|
|
+ // 设置语言
|
|
|
|
|
+ iiframe.contentWindow.window.document.getElementById(
|
|
|
|
|
+ 'languageOptions'
|
|
|
|
|
+ ).selectedIndex = this.choiceLanguageIndex
|
|
|
|
|
+
|
|
|
|
|
+ iiframe.contentWindow.testdoContinuousPronunciationAssessment()
|
|
|
|
|
+
|
|
|
|
|
+ this.recordedForm.status = 1
|
|
|
|
|
+ this.$toast('已开始录音')
|
|
|
|
|
+ this.recordedForm.timer = setInterval(() => {
|
|
|
|
|
+ this.recordedForm.timeDuration += 1
|
|
|
|
|
+ this.recordedForm.time = this.updateRecordedTime({
|
|
|
|
|
+ duration: this.recordedForm.timeDuration
|
|
|
|
|
+ })
|
|
|
|
|
+ }, 1000)
|
|
|
|
|
+
|
|
|
|
|
+ let flag = true
|
|
|
|
|
+ this.recordedForm.textList = []
|
|
|
|
|
+ this.recordedForm.timeDuration = 0
|
|
|
|
|
+ this.recordedForm.startTime = 1
|
|
|
|
|
+ this.recordedForm.endTime = 0
|
|
|
|
|
+
|
|
|
|
|
+ iiframe.contentWindow.onRecognizedResult = e => {
|
|
|
|
|
+ this.recordedForm.endTime = this.recordedForm.timeDuration
|
|
|
|
|
+ if (flag) {
|
|
|
|
|
+ // this.controlsStatus = 1
|
|
|
|
|
+ // this.showIndexPage = false
|
|
|
|
|
+ // this.pageStatus = 2
|
|
|
|
|
+ this.$parent.bmData.jsonData.editorBarData.type = '0'
|
|
|
|
|
+ flag = false
|
|
|
|
|
+ this.uploadFileLoading = false
|
|
|
|
|
+ this.$parent.bmData.jsonData.transcriptionData = ''
|
|
|
|
|
+ this.$parent.bmData.jsonData.editorBarData.content = ''
|
|
|
|
|
+ this.recordedForm.textList = []
|
|
|
|
|
+ }
|
|
|
|
|
+ let privText = e.privText
|
|
|
|
|
+ if (privText == undefined || privText == 'undefined') return
|
|
|
|
|
+ console.log('👇转译对象👇')
|
|
|
|
|
+ console.log(e)
|
|
|
|
|
+ console.log('👇转译结果👇')
|
|
|
|
|
+ console.log(privText)
|
|
|
|
|
+ this.recordedForm.textList.push({
|
|
|
|
|
+ value: privText,
|
|
|
|
|
+ startTime: this.updateRecordedTime({
|
|
|
|
|
+ duration: this.recordedForm.startTime
|
|
|
|
|
+ }),
|
|
|
|
|
+ endTime: this.updateRecordedTime({
|
|
|
|
|
+ duration: this.recordedForm.endTime
|
|
|
|
|
+ }),
|
|
|
|
|
+ time: this.updateRecordedTime({
|
|
|
|
|
+ duration: this.recordedForm.endTime - this.recordedForm.startTime
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+ this.recordedForm.startTime = this.recordedForm.timeDuration + 1
|
|
|
|
|
+ this.$parent.bmData.jsonData.transcriptionData += privText
|
|
|
|
|
+ this.$nextTick(
|
|
|
|
|
+ () => (this.$refs.transcriptionDataRef.scrollTop = this.$refs.transcriptionDataRef.scrollHeight)
|
|
|
|
|
+ )
|
|
|
|
|
+ let _result = `<table border="0" width="100%" cellpadding="0" cellspacing="0" style="text-align: center"><tbody><tr><th>序号</th><th>开始时间</th><th>结束时间</th><th>发言内容</th><th>时长</th><th>说话人身份</th><th>行为编码</th></tr>`
|
|
|
|
|
+ this.recordedForm.textList.forEach((item, index) => {
|
|
|
|
|
+ _result += `<tr><td>${index + 1}</td><td>${item.startTime}</td><td>${item.endTime}</td><td>${
|
|
|
|
|
+ item.value
|
|
|
|
|
+ }</td><td>${item.time}</td><td></td><td></td></tr>`
|
|
|
|
|
+ })
|
|
|
|
|
+ _result += `<tr><td></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>`
|
|
|
|
|
+ this.$parent.bmData.jsonData.editorBarData.content = _result
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch((e) => {
|
|
|
|
|
+ console.log(e)
|
|
|
|
|
+ console.log('不录音')
|
|
|
|
|
+ })
|
|
|
|
|
+ } else if ([1, 2].includes(this.recordedForm.status)) {
|
|
|
|
|
+ this.$toast.fail('正在录音中')
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.$toast('请稍等...')
|
|
|
|
|
+ }
|
|
|
},
|
|
},
|
|
|
stopRecord() {
|
|
stopRecord() {
|
|
|
- if(this.recordedForm.loading)return;
|
|
|
|
|
- console.log('暂停录音')
|
|
|
|
|
- this.recordedForm.status = 2
|
|
|
|
|
|
|
+ if (this.recordedForm.loading) return this.$toast('请稍等...')
|
|
|
|
|
+ if ([1].includes(this.recordedForm.status)) {
|
|
|
|
|
+ // 录音暂停
|
|
|
|
|
+ //暂停
|
|
|
|
|
+ this.recordedForm.loading = true
|
|
|
|
|
+ let iiframe = this.$refs['iiframe']
|
|
|
|
|
+ iiframe.contentWindow.window.document.getElementById('scenarioStopButton').click()
|
|
|
|
|
+ // 录音结束
|
|
|
|
|
+ iiframe.contentWindow.onSessionStopped = (s, e) => {
|
|
|
|
|
+ this.recordedForm.status = 2
|
|
|
|
|
+ this.$toast('已停止录音')
|
|
|
|
|
+ clearInterval(this.recordedForm.timer)
|
|
|
|
|
+ console.log('停止录音👇')
|
|
|
|
|
+ console.log('停止录音', e)
|
|
|
|
|
+ this.recordedForm.audioBlob.push(e.preaudio)
|
|
|
|
|
+ iiframe.contentWindow.onSessionStopped = null
|
|
|
|
|
+ iiframe.contentWindow.onRecognizedResult = null
|
|
|
|
|
+ this.recordedForm.loading = false
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ console.log('状态错误')
|
|
|
|
|
+ // this.$toast()
|
|
|
|
|
+ }
|
|
|
},
|
|
},
|
|
|
reStartRecord() {
|
|
reStartRecord() {
|
|
|
- if(this.recordedForm.loading)return;
|
|
|
|
|
- console.log('继续录音')
|
|
|
|
|
- this.recordedForm.status = 1
|
|
|
|
|
|
|
+ if ([2].includes(this.recordedForm.status)) {
|
|
|
|
|
+ //录音开启
|
|
|
|
|
+ this.recordedForm.loading = true
|
|
|
|
|
+ let iiframe = this.$refs['iiframe']
|
|
|
|
|
+ iiframe.contentWindow.window.document.getElementById('languageOptions').selectedIndex = this.choiceLanguageIndex
|
|
|
|
|
+ iiframe.contentWindow.testdoContinuousPronunciationAssessment()
|
|
|
|
|
+ // this.controlsStatus = 1;
|
|
|
|
|
+ this.recordedForm.status = 1
|
|
|
|
|
+ this.$toast('已继续录音')
|
|
|
|
|
+ this.recordedForm.loading = false
|
|
|
|
|
+ this.recordedForm.timer = setInterval(() => {
|
|
|
|
|
+ this.recordedForm.timeDuration += 1
|
|
|
|
|
+ this.recordedForm.time = this.updateRecordedTime({
|
|
|
|
|
+ duration: this.recordedForm.timeDuration
|
|
|
|
|
+ })
|
|
|
|
|
+ }, 1000)
|
|
|
|
|
+ iiframe.contentWindow.onRecognizedResult = e => {
|
|
|
|
|
+ this.recordedForm.endTime = this.recordedForm.timeDuration
|
|
|
|
|
+ // this.showGetTextLoading = true;
|
|
|
|
|
+ let privText = e.privText
|
|
|
|
|
+ if (privText == undefined || privText == 'undefined') return
|
|
|
|
|
+ console.log('👇转译对象👇')
|
|
|
|
|
+ console.log(e)
|
|
|
|
|
+ console.log('👇转译结果👇')
|
|
|
|
|
+ console.log(privText)
|
|
|
|
|
+ this.recordedForm.textList.push({
|
|
|
|
|
+ value: privText,
|
|
|
|
|
+ startTime: this.updateRecordedTime({
|
|
|
|
|
+ duration: this.recordedForm.startTime
|
|
|
|
|
+ }),
|
|
|
|
|
+ endTime: this.updateRecordedTime({
|
|
|
|
|
+ duration: this.recordedForm.endTime
|
|
|
|
|
+ }),
|
|
|
|
|
+ time: this.updateRecordedTime({
|
|
|
|
|
+ duration: this.recordedForm.endTime - this.recordedForm.startTime
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+ this.recordedForm.startTime = this.recordedForm.timeDuration + 1
|
|
|
|
|
+ this.$parent.bmData.jsonData.transcriptionData += privText
|
|
|
|
|
+
|
|
|
|
|
+ let _result = `<table border="0" width="100%" cellpadding="0" cellspacing="0" style="text-align: center"><tbody><tr><th>序号</th><th>开始时间</th><th>结束时间</th><th>发言内容</th><th>时长</th><th>说话人身份</th><th>行为编码</th></tr>`
|
|
|
|
|
+ this.recordedForm.textList.forEach((item, index) => {
|
|
|
|
|
+ _result += `<tr><td>${index + 1}</td><td>${item.startTime}</td><td>${item.endTime}</td><td>${
|
|
|
|
|
+ item.value
|
|
|
|
|
+ }</td><td>${item.time}</td><td></td><td></td></tr>`
|
|
|
|
|
+ })
|
|
|
|
|
+ _result += `<tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>`
|
|
|
|
|
+ this.$parent.bmData.jsonData.editorBarData.content = _result
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ console.log('状态错误')
|
|
|
|
|
+ }
|
|
|
},
|
|
},
|
|
|
uploadFileFn() {
|
|
uploadFileFn() {
|
|
|
- if(!this.tid){
|
|
|
|
|
- return this.$toast("请先选择课堂或者创建课堂")
|
|
|
|
|
- // return this.$parent.addNewCourseByDefault().then(_=>{
|
|
|
|
|
- // this.uploadFileFn()
|
|
|
|
|
- // })
|
|
|
|
|
- }
|
|
|
|
|
- if (this.uploadFileLoading) return this.$toast("请稍等...");
|
|
|
|
|
- let input = document.createElement("input");
|
|
|
|
|
- input.type = "file";
|
|
|
|
|
|
|
+ if (!this.tid) {
|
|
|
|
|
+ return Dialog.confirm({
|
|
|
|
|
+ title: '创建课堂并上传文件',
|
|
|
|
|
+ message: `确定使用默认模板来创建新的课堂并上传文件?`
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(() => {
|
|
|
|
|
+ return this.$parent.addNewCourseByDefault().then(_ => {
|
|
|
|
|
+ this.uploadFileFn()
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(_ => {
|
|
|
|
|
+ console.log('不创建')
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ if (this.uploadFileLoading) return this.$toast('请稍等...')
|
|
|
|
|
+ let input = document.createElement('input')
|
|
|
|
|
+ input.type = 'file'
|
|
|
// input.accept = ".wav";
|
|
// input.accept = ".wav";
|
|
|
// input.accept = "audio/*, .txt, .pdf, .xlsx";
|
|
// input.accept = "audio/*, .txt, .pdf, .xlsx";
|
|
|
- input.accept = ".wav,.txt,.pdf,.xlsx,.doc,.docx,.csv";
|
|
|
|
|
- input.click();
|
|
|
|
|
|
|
+ input.accept = '.wav,.txt,.pdf,.xlsx,.doc,.docx,.csv'
|
|
|
|
|
+ input.click()
|
|
|
input.onchange = () => {
|
|
input.onchange = () => {
|
|
|
- this.uploadFileLoading = true;
|
|
|
|
|
- let file = input.files[0];
|
|
|
|
|
|
|
+ this.uploadFileLoading = true
|
|
|
|
|
+ let file = input.files[0]
|
|
|
if (!/\.(wav|txt|pdf|xlsx|doc|docx|csv)$/i.test(file.name)) {
|
|
if (!/\.(wav|txt|pdf|xlsx|doc|docx|csv)$/i.test(file.name)) {
|
|
|
- this.uploadFileLoading = false;
|
|
|
|
|
- return this.$toast.error(
|
|
|
|
|
- "请上传.wav,.txt,.pdf,.xlsx,.doc,.docx,.csv格式的文件"
|
|
|
|
|
- );
|
|
|
|
|
- }else{
|
|
|
|
|
-
|
|
|
|
|
- this.uploadFile(file, { changeText: true, flag: true });
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ this.uploadFileLoading = false
|
|
|
|
|
+ return this.$toast.error('请上传.wav,.txt,.pdf,.xlsx,.doc,.docx,.csv格式的文件')
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.uploadFile(file, { changeText: true, flag: true })
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
},
|
|
},
|
|
|
- uploadFile(file, { changeText = true, flag = true }) {
|
|
|
|
|
|
|
+ uploadFile(file, { changeText = true, flag = true }) {
|
|
|
var credentials = {
|
|
var credentials = {
|
|
|
- accessKeyId: "AKIATLPEDU37QV5CHLMH",
|
|
|
|
|
- secretAccessKey: "Q2SQw37HfolS7yeaR1Ndpy9Jl4E2YZKUuuy2muZR",
|
|
|
|
|
- }; //秘钥形式的登录上传
|
|
|
|
|
- window.AWS.config.update(credentials);
|
|
|
|
|
- window.AWS.config.region = "cn-northwest-1"; //设置区域
|
|
|
|
|
|
|
+ accessKeyId: 'AKIATLPEDU37QV5CHLMH',
|
|
|
|
|
+ secretAccessKey: 'Q2SQw37HfolS7yeaR1Ndpy9Jl4E2YZKUuuy2muZR'
|
|
|
|
|
+ } //秘钥形式的登录上传
|
|
|
|
|
+ window.AWS.config.update(credentials)
|
|
|
|
|
+ window.AWS.config.region = 'cn-northwest-1' //设置区域
|
|
|
|
|
|
|
|
- var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
|
|
|
|
|
- var _this = this;
|
|
|
|
|
|
|
+ var bucket = new window.AWS.S3({ params: { Bucket: 'ccrb' } }) //选择桶
|
|
|
|
|
+ var _this = this
|
|
|
|
|
|
|
|
if (file) {
|
|
if (file) {
|
|
|
- this.loading = true;
|
|
|
|
|
|
|
+ this.loading = true
|
|
|
// this.progressData.uploadLoading = true;
|
|
// this.progressData.uploadLoading = true;
|
|
|
// this.progressData.value = 0;
|
|
// this.progressData.value = 0;
|
|
|
var params = {
|
|
var params = {
|
|
|
Key:
|
|
Key:
|
|
|
- file.name.split(".")[0] +
|
|
|
|
|
|
|
+ file.name.split('.')[0] +
|
|
|
new Date().getTime() +
|
|
new Date().getTime() +
|
|
|
- "." +
|
|
|
|
|
- file.name.split(".")[file.name.split(".").length - 1],
|
|
|
|
|
|
|
+ '.' +
|
|
|
|
|
+ file.name.split('.')[file.name.split('.').length - 1],
|
|
|
ContentType: file.type,
|
|
ContentType: file.type,
|
|
|
Body: file,
|
|
Body: file,
|
|
|
- "Access-Control-Allow-Credentials": "*",
|
|
|
|
|
- ACL: "public-read",
|
|
|
|
|
- }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
|
|
|
|
|
|
|
+ 'Access-Control-Allow-Credentials': '*',
|
|
|
|
|
+ ACL: 'public-read'
|
|
|
|
|
+ } //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
|
|
|
var options = {
|
|
var options = {
|
|
|
partSize: 2048 * 1024 * 1024,
|
|
partSize: 2048 * 1024 * 1024,
|
|
|
queueSize: 2,
|
|
queueSize: 2,
|
|
|
- leavePartsOnError: true,
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ leavePartsOnError: true
|
|
|
|
|
+ }
|
|
|
bucket
|
|
bucket
|
|
|
.upload(params, options)
|
|
.upload(params, options)
|
|
|
- .on("httpUploadProgress", function (evt) {
|
|
|
|
|
|
|
+ .on('httpUploadProgress', function(evt) {
|
|
|
//这里可以写进度条
|
|
//这里可以写进度条
|
|
|
// _this.progressData.value = parseInt((evt.loaded * 100) / evt.total);
|
|
// _this.progressData.value = parseInt((evt.loaded * 100) / evt.total);
|
|
|
// console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
|
|
// console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
|
|
|
})
|
|
})
|
|
|
- .send(function (err, data) {
|
|
|
|
|
|
|
+ .send(function(err, data) {
|
|
|
if (err) {
|
|
if (err) {
|
|
|
- _this.$toast.fail("上传失败");
|
|
|
|
|
- _this.uploadFileLoading = false;
|
|
|
|
|
- _this.loading = false;
|
|
|
|
|
|
|
+ _this.$toast.fail('上传失败')
|
|
|
|
|
+ _this.uploadFileLoading = false
|
|
|
|
|
+ _this.loading = false
|
|
|
// _this.progressData.uploadLoading = false;
|
|
// _this.progressData.uploadLoading = false;
|
|
|
} else {
|
|
} else {
|
|
|
// 判断是不是音频文件
|
|
// 判断是不是音频文件
|
|
|
- const audioRegex = /\.(mp3|wav|ogg|flac|m4a)$/i;
|
|
|
|
|
- const txtRegex = /\.(txt|csv)$/i;
|
|
|
|
|
- const otherRegex = /\.(pdf|xlsx|doc|docx)$/i;
|
|
|
|
|
|
|
+ const audioRegex = /\.(mp3|wav|ogg|flac|m4a)$/i
|
|
|
|
|
+ const txtRegex = /\.(txt|csv)$/i
|
|
|
|
|
+ const otherRegex = /\.(pdf|xlsx|doc|docx)$/i
|
|
|
// if (audioRegex.test(data.Location)) {
|
|
// if (audioRegex.test(data.Location)) {
|
|
|
// // console.log(data);
|
|
// // console.log(data);
|
|
|
// _this.uploadWavFileAndGetText(file)
|
|
// _this.uploadWavFileAndGetText(file)
|
|
@@ -439,117 +637,96 @@ export default {
|
|
|
// } else if(otherRegex.test(data.Location)){
|
|
// } else if(otherRegex.test(data.Location)){
|
|
|
//
|
|
//
|
|
|
if (audioRegex.test(data.Location)) {
|
|
if (audioRegex.test(data.Location)) {
|
|
|
- if (changeText) _this.wavFileGetText(file);
|
|
|
|
|
- _this.$parent.changeAudioUrl(data);
|
|
|
|
|
|
|
+ if (changeText) _this.wavFileGetText(file)
|
|
|
|
|
+ _this.$parent.changeAudioUrl(data)
|
|
|
// _this.$emit("changeAudioUrl", data);
|
|
// _this.$emit("changeAudioUrl", data);
|
|
|
- _this.loading = false;
|
|
|
|
|
- _this.recordedForm.audioBlob = [];
|
|
|
|
|
- _this.recordedForm.time = "00:00:00";
|
|
|
|
|
- _this.recordedForm.timeDuration = 0;
|
|
|
|
|
|
|
+ _this.loading = false
|
|
|
|
|
+ _this.recordedForm.audioBlob = []
|
|
|
|
|
+ _this.recordedForm.time = '00:00:00'
|
|
|
|
|
+ _this.recordedForm.timeDuration = 0
|
|
|
// _this.progressData.uploadLoading = false;
|
|
// _this.progressData.uploadLoading = false;
|
|
|
- _this.recordedForm.textList = [];
|
|
|
|
|
- _this.$parent.saveEditorBar();
|
|
|
|
|
- return;
|
|
|
|
|
|
|
+ _this.recordedForm.textList = []
|
|
|
|
|
+ _this.$parent.saveEditorBar()
|
|
|
|
|
+ return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- upload_file_knowledgeRequest({
|
|
|
|
|
- url: data.Location,
|
|
|
|
|
- })
|
|
|
|
|
- .then((res) => {
|
|
|
|
|
- let _data = res.FunctionResponse;
|
|
|
|
|
|
|
+ upload_file_knowledgeRequest({
|
|
|
|
|
+ url: data.Location
|
|
|
|
|
+ })
|
|
|
|
|
+ .then(res => {
|
|
|
|
|
+ let _data = res.FunctionResponse
|
|
|
if (_data.result && _data.result.id) {
|
|
if (_data.result && _data.result.id) {
|
|
|
- _this.$parent.changeFileId(_data.result.id)
|
|
|
|
|
|
|
+ console.log("👇")
|
|
|
|
|
+ console.log(_data.result.id)
|
|
|
|
|
+ _this.$parent.changeFileId(_data.result.id)
|
|
|
// _this.$emit("updateFileId", _data.result.id);
|
|
// _this.$emit("updateFileId", _data.result.id);
|
|
|
// _this.$message.success("成功获取fileId");
|
|
// _this.$message.success("成功获取fileId");
|
|
|
- _this.uploadFileLoading = false;
|
|
|
|
|
|
|
+ _this.uploadFileLoading = false
|
|
|
//处理文件
|
|
//处理文件
|
|
|
if (txtRegex.test(data.Location)) {
|
|
if (txtRegex.test(data.Location)) {
|
|
|
//txt
|
|
//txt
|
|
|
- getFile(data.Location).then((_res) => {
|
|
|
|
|
- _this.controlsStatus = 2;
|
|
|
|
|
- _this.showIndexPage = false;
|
|
|
|
|
- _this.pageStatus = 2;
|
|
|
|
|
- _this.$parent.bmData.jsonData.editorBarData.type = "0";
|
|
|
|
|
- // _this.transcriptionData.content = _res.data;
|
|
|
|
|
|
|
+ getFile(data.Location).then(_res => {
|
|
|
|
|
+ _this.controlsStatus = 2
|
|
|
|
|
+ _this.showIndexPage = false
|
|
|
|
|
+ _this.pageStatus = 2
|
|
|
|
|
+ _this.$parent.bmData.jsonData.editorBarData.type = '0'
|
|
|
|
|
+ // _this.$parent.bmData.jsonData.transcriptionData = _res.data
|
|
|
if (flag) {
|
|
if (flag) {
|
|
|
const arr = Papa.parse(_res.data, {
|
|
const arr = Papa.parse(_res.data, {
|
|
|
- header: false,
|
|
|
|
|
- }).data.slice(1);
|
|
|
|
|
- console.log(arr);
|
|
|
|
|
- const _editorBarDataContent = `<table
|
|
|
|
|
- border="0"
|
|
|
|
|
- width="100%"
|
|
|
|
|
- cellpadding="0"
|
|
|
|
|
- cellspacing="0"
|
|
|
|
|
- style="text-align: center"
|
|
|
|
|
- >
|
|
|
|
|
- <tbody>
|
|
|
|
|
- <tr>
|
|
|
|
|
- <th>序号</th>
|
|
|
|
|
- <th>开始时间</th>
|
|
|
|
|
- <th>结束时间</th>
|
|
|
|
|
- <th>发言内容</th>
|
|
|
|
|
- <th>时长</th>
|
|
|
|
|
- <th>说话人身份</th>
|
|
|
|
|
- <th>行为编码</th>
|
|
|
|
|
- </tr>
|
|
|
|
|
- ${arr
|
|
|
|
|
- .map(
|
|
|
|
|
- (row) => `
|
|
|
|
|
- <tr>
|
|
|
|
|
- <td>${_.get(row, 0, "")}</td>
|
|
|
|
|
- <td>${_.get(row, 1, "")}</td>
|
|
|
|
|
- <td>${_.get(row, 2, "")}</td>
|
|
|
|
|
- <td>${_.get(row, 3, "")}</td>
|
|
|
|
|
- <td>${_.get(row, 4, "")}</td>
|
|
|
|
|
- <td>${_.get(row, 5, "")}</td>
|
|
|
|
|
- <td>${_.get(row, 6, "")}</td>
|
|
|
|
|
- </tr>
|
|
|
|
|
- `
|
|
|
|
|
- )
|
|
|
|
|
- .join("\n")}
|
|
|
|
|
- </tbody>
|
|
|
|
|
- </table>`;
|
|
|
|
|
- _this.$parent.bmData.jsonData.editorBarData.content = _editorBarDataContent;
|
|
|
|
|
|
|
+ header: false
|
|
|
|
|
+ }).data.slice(1)
|
|
|
|
|
+ const _editorBarDataContent = `<table border="0" width="100%" cellpadding="0" cellspacing="0" style="text-align: center"><tbody><tr><th>序号</th><th>开始时间</th><th>结束时间</th><th>发言内容</th><th>时长</th><th>说话人身份</th><th>行为编码</th></tr>${arr
|
|
|
|
|
+ .map(
|
|
|
|
|
+ row =>
|
|
|
|
|
+ `<tr><td>${_.get(row, 0, '')}</td><td>${_.get(row, 1, '')}</td><td>${_.get(
|
|
|
|
|
+ row,
|
|
|
|
|
+ 2,
|
|
|
|
|
+ ''
|
|
|
|
|
+ )}</td><td>${_.get(row, 3, '')}</td><td>${_.get(row, 4, '')}</td><td>${_.get(
|
|
|
|
|
+ row,
|
|
|
|
|
+ 5,
|
|
|
|
|
+ ''
|
|
|
|
|
+ )}</td><td>${_.get(row, 6, '')}</td></tr>`
|
|
|
|
|
+ )
|
|
|
|
|
+ .join('\n')}</tbody></table>`
|
|
|
|
|
+ _this.$parent.bmData.jsonData.editorBarData.content = _editorBarDataContent
|
|
|
} else {
|
|
} else {
|
|
|
- _this.$parent.bmData.jsonData.editorBarData.content = _res.data;
|
|
|
|
|
|
|
+ _this.$parent.bmData.jsonData.editorBarData.content = _res.data
|
|
|
}
|
|
}
|
|
|
- _this.$parent.bmData.jsonData.editorBarData.url = "";
|
|
|
|
|
- _this.$parent.saveEditorBar();
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ _this.$parent.bmData.jsonData.editorBarData.url = ''
|
|
|
|
|
+ _this.$parent.saveEditorBar()
|
|
|
|
|
+ })
|
|
|
} else if (otherRegex.test(data.Location)) {
|
|
} else if (otherRegex.test(data.Location)) {
|
|
|
//pdf、 docx、doc、xlxs
|
|
//pdf、 docx、doc、xlxs
|
|
|
|
|
|
|
|
- _this.$parent.bmData.jsonData.editorBarData.type = "1";
|
|
|
|
|
- _this.$parent.bmData.jsonData.editorBarData.url = data.Location;
|
|
|
|
|
- _this.$parent.bmData.jsonData.editorBarData.content = "";
|
|
|
|
|
- _this.$parent.saveEditorBar();
|
|
|
|
|
|
|
+ _this.$parent.bmData.jsonData.editorBarData.type = '1'
|
|
|
|
|
+ _this.$parent.bmData.jsonData.editorBarData.url = data.Location
|
|
|
|
|
+ _this.$parent.bmData.jsonData.editorBarData.content = ''
|
|
|
|
|
+ _this.$parent.saveEditorBar()
|
|
|
// console.log("pdf、xlsx、doc、docx文件处理");
|
|
// console.log("pdf、xlsx、doc、docx文件处理");
|
|
|
}
|
|
}
|
|
|
- _this.loading = false;
|
|
|
|
|
|
|
+ _this.loading = false
|
|
|
// _this.progressData.uploadLoading = false;
|
|
// _this.progressData.uploadLoading = false;
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
} else {
|
|
} else {
|
|
|
- _this.$toast.fail("修改fileId失败");
|
|
|
|
|
|
|
+ _this.$toast.fail('修改fileId失败')
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// this.$emit("updateFileId", data.Location)
|
|
// this.$emit("updateFileId", data.Location)
|
|
|
})
|
|
})
|
|
|
- .catch((e) => {
|
|
|
|
|
- _this.uploadFileLoading = false;
|
|
|
|
|
|
|
+ .catch(e => {
|
|
|
|
|
+ _this.uploadFileLoading = false
|
|
|
// _this.progressData.uploadLoading = false;
|
|
// _this.progressData.uploadLoading = false;
|
|
|
- console.log(e);
|
|
|
|
|
- _this.$toast.fail("获取fileId失败");
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ console.log(e)
|
|
|
|
|
+ _this.$toast.fail('获取fileId失败')
|
|
|
|
|
+ })
|
|
|
// }
|
|
// }
|
|
|
|
|
|
|
|
// console.log(data.Location)
|
|
// console.log(data.Location)
|
|
|
}
|
|
}
|
|
|
- });
|
|
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
analysis() {
|
|
analysis() {
|
|
|
this.$router.push({ path: '/outcome', query: {} })
|
|
this.$router.push({ path: '/outcome', query: {} })
|
|
|
},
|
|
},
|
|
@@ -614,6 +791,18 @@ export default {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
|
|
+ },
|
|
|
|
|
+ updateRecordedTime({ duration }) {
|
|
|
|
|
+ // 更新currentTime,将秒数转换为时分秒格式
|
|
|
|
|
+ let hours = Math.floor(duration / 3600)
|
|
|
|
|
+ let minutes = Math.floor((duration % 3600) / 60)
|
|
|
|
|
+ let seconds = Math.floor(duration % 60)
|
|
|
|
|
+ // this.recordedForm.time = `${hours.toString().padStart(2, "0")}:${minutes
|
|
|
|
|
+ // .toString()
|
|
|
|
|
+ // .padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
|
|
|
|
|
+ return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds
|
|
|
|
|
+ .toString()
|
|
|
|
|
+ .padStart(2, '0')}`
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -711,13 +900,14 @@ export default {
|
|
|
}
|
|
}
|
|
|
.classInfo {
|
|
.classInfo {
|
|
|
background-color: rgba(255, 255, 255, 0.55);
|
|
background-color: rgba(255, 255, 255, 0.55);
|
|
|
- font-size: 10px;
|
|
|
|
|
|
|
+ font-size: 12px;
|
|
|
border-radius: 3px;
|
|
border-radius: 3px;
|
|
|
display: flex;
|
|
display: flex;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
padding: 0 10px;
|
|
padding: 0 10px;
|
|
|
margin-right: 10px;
|
|
margin-right: 10px;
|
|
|
color: rgba(0, 0, 0, 0.6);
|
|
color: rgba(0, 0, 0, 0.6);
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -756,32 +946,32 @@ export default {
|
|
|
img {
|
|
img {
|
|
|
object-fit: contain;
|
|
object-fit: contain;
|
|
|
}
|
|
}
|
|
|
- .ca_left{
|
|
|
|
|
- box-sizing: border-box;
|
|
|
|
|
- padding-right: 10px;
|
|
|
|
|
- width: calc(50% - 30px);
|
|
|
|
|
- height: 100%;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- justify-content: space-around;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- img{
|
|
|
|
|
- width: 28px;
|
|
|
|
|
- height: 28px;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- .ca_right{
|
|
|
|
|
- box-sizing: border-box;
|
|
|
|
|
- padding-left: 10px;
|
|
|
|
|
- width: calc(50% - 30px);
|
|
|
|
|
- height: 100%;
|
|
|
|
|
- display: flex;
|
|
|
|
|
- justify-content: space-around;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- img{
|
|
|
|
|
- width: 28px;
|
|
|
|
|
- height: 28px;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ .ca_left {
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
|
+ padding-right: 10px;
|
|
|
|
|
+ width: calc(50% - 30px);
|
|
|
|
|
+ height: 100%;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: space-around;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ img {
|
|
|
|
|
+ width: 28px;
|
|
|
|
|
+ height: 28px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ .ca_right {
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
|
+ padding-left: 10px;
|
|
|
|
|
+ width: calc(50% - 30px);
|
|
|
|
|
+ height: 100%;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: space-around;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ img {
|
|
|
|
|
+ width: 28px;
|
|
|
|
|
+ height: 28px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
.recordBtn {
|
|
.recordBtn {
|
|
|
width: 60px;
|
|
width: 60px;
|
|
|
height: 60px;
|
|
height: 60px;
|