Selaa lähdekoodia

reactor:新增录音下载;

zhangchong 1 vuosi sitten
vanhempi
commit
65e1d78429

+ 29 - 31
src/components/AudioPlayer/index.vue

@@ -24,14 +24,7 @@
 			</div>
 			<div class="icon-div">
 				<div class="flex-center-center">
-					<SvgIcon
-						@click="handleBack"
-						name="ele-DArrowLeft"
-						title="快退"
-						class="mr5 cursor-pointer"
-						size="24px"
-						color="var(--el-color-primary)"
-					/>
+					<SvgIcon @click="handleBack" name="ele-DArrowLeft" title="快退" class="mr5 cursor-pointer" size="24px" color="var(--el-color-primary)" />
 					<el-text class="mr20" size="small" type="info">-{{ props.backSecond }}S</el-text>
 				</div>
 				<SvgIcon
@@ -62,7 +55,7 @@
 							</el-dropdown-menu>
 						</template>
 					</el-dropdown>
-					<!--          <SvgIcon name="ele-Download" class="cursor-pointer ml5" size="18px" color="var(&#45;&#45;el-color-primary)" @click="downLoad" title="下载" />-->
+					<SvgIcon name="ele-Download" class="cursor-pointer ml5" size="18px" color="var(--el-color-primary)" @click="downLoad" title="下载录音" />
 				</div>
 			</div>
 		</div>
@@ -73,8 +66,8 @@
 import { reactive, ref, computed, watch, nextTick } from 'vue';
 import { formatDuration } from '@/utils/formatTime';
 import { ElMessage } from 'element-plus';
-import { downloadFileBySrc, downloadFileByStream } from "@/utils/tools";
-import { fileDownload } from "@/api/public/file";
+import { downloadFileBySrc, downloadFileByStream } from '@/utils/tools';
+import { fileDownload } from '@/api/public/file';
 
 // 定义父组件传过来的值
 const props = defineProps({
@@ -82,10 +75,15 @@ const props = defineProps({
 		type: String,
 		required: true,
 	},
+	recordingAbsolutePath: {
+		// 录音文件绝对路径
+		type: String,
+		default: '',
+	},
 	fileName: {
 		type: String,
 		required: false,
-		default: '测试文件',
+		default: '下载录音',
 	},
 	backSecond: {
 		// 快退时间
@@ -121,25 +119,25 @@ const playPauseAudio = () => {
 };
 // 快退
 const handleBack = () => {
-  if (audioData.currentTime - props.backSecond < 0) {
-    audioData.currentTime = 0;
-    progressBarByCurrentTime();
-    return;
-  }
-  audioRef.value.currentTime = audioData.currentTime - props.backSecond;
-  audioData.currentTime = audioRef.value.currentTime;
-  progressBarByCurrentTime();
+	if (audioData.currentTime - props.backSecond < 0) {
+		audioData.currentTime = 0;
+		progressBarByCurrentTime();
+		return;
+	}
+	audioRef.value.currentTime = audioData.currentTime - props.backSecond;
+	audioData.currentTime = audioRef.value.currentTime;
+	progressBarByCurrentTime();
 };
 // 快进
 const handleForward = () => {
-  if (audioData.currentTime + props.forwardSecond > audioData.duration) {
-    audioData.currentTime = audioData.duration;
-    progressBarByCurrentTime();
-    return;
-  }
-  audioRef.value.currentTime = audioData.currentTime + props.forwardSecond;
-  audioData.currentTime = audioRef.value.currentTime;
-  progressBarByCurrentTime();
+	if (audioData.currentTime + props.forwardSecond > audioData.duration) {
+		audioData.currentTime = audioData.duration;
+		progressBarByCurrentTime();
+		return;
+	}
+	audioRef.value.currentTime = audioData.currentTime + props.forwardSecond;
+	audioData.currentTime = audioRef.value.currentTime;
+	progressBarByCurrentTime();
 };
 const icon = computed(() => {
 	if (audioData.muteState) {
@@ -240,9 +238,9 @@ const mute = () => {
 };
 // 下载
 const downLoad = () => {
-  fileDownload({path:props.url}).then((res:any) => {
-    downloadFileByStream(res, <string>props.fileName);
-  });
+	fileDownload({ path: import.meta.env.VITE_RECORD_DOWNLOAD_PREFIX + props.recordingAbsolutePath }).then((res: any) => {
+		downloadFileByStream(res, <string>props.fileName);
+	});
 };
 nextTick(() => {
 	audioRef.value.onerror = () => {

+ 4 - 3
src/components/OrderDetail/index.vue

@@ -40,7 +40,7 @@
 										size="small"
 										type="primary"
 										class="ml8"
-										@click="recordFile(state.ruleForm?.recordingAbsolutePath)"
+										@click="recordFile(state.ruleForm)"
 										v-if="state.ruleForm?.recordingAbsolutePath"
 										>录音文件</el-button
 									>
@@ -690,8 +690,9 @@ const closeDialog = () => {
 };
 // 查看录音文件
 const playRecordRef = ref<RefType>();
-const recordFile = (url: string) => {
-	playRecordRef.value.openDialog(import.meta.env.VITE_RECORD_PREFIX + url);
+const recordFile = (obj:any) => {
+  const fileName = `工单编号-${obj.no} 录音文件`
+	playRecordRef.value.openDialog(import.meta.env.VITE_RECORD_PREFIX + obj.recordingAbsolutePath,fileName,obj.recordingAbsolutePath);
 };
 // 电话外呼
 const callPhone = (number: number | string) => {

+ 5 - 3
src/views/business/visit/component/Visit-detail.vue

@@ -81,7 +81,7 @@
 										size="small"
 										type="primary"
 										class="ml8"
-										@click="recordFile(state.recordingAbsolutePath)"
+										@click="recordFile(state)"
 										v-if="state.recordingAbsolutePath"
 										>录音文件</el-button
 									>
@@ -498,8 +498,10 @@ const closeDialog = () => {
 };
 // 查看录音文件
 const playRecordRef = ref<RefType>();
-const recordFile = (url: string) => {
-	playRecordRef.value.openDialog(import.meta.env.VITE_RECORD_PREFIX + url);
+const recordFile = (obj: any) => {
+  console.log(obj,'2121')
+  const fileName = `工单编号-${obj.orderDetail?.no} 录音文件`
+  playRecordRef.value.openDialog(import.meta.env.VITE_RECORD_PREFIX + obj.recordingAbsolutePath,fileName,obj.recordingAbsolutePath);
 };
 // 呼叫
 const onCall = (phoneNumber: string) => {

+ 13 - 4
src/views/quality/done/components/Quality-inspection.vue

@@ -25,7 +25,7 @@
 							size="small"
 							type="primary"
 							class="ml8"
-							@click="recordFile(state.ruleForm?.order?.recordingAbsolutePath)"
+							@click="recordFile(state.ruleForm?.order,'order')"
 							>工单录音</el-button
 						>
 						<el-button
@@ -35,7 +35,7 @@
 							size="small"
 							type="primary"
 							class="ml8"
-							@click="recordFile(state.ruleForm?.visit?.recordingAbsolutePath)"
+							@click="recordFile(state.ruleForm?.visit,'visit')"
 							>回访录音</el-button
 						>
 					</el-form-item>
@@ -306,8 +306,17 @@ const closeItem = () => {
 };
 // 查看录音文件
 const playRecordRef = ref<RefType>();
-const recordFile = (url: string) => {
-	playRecordRef.value.openDialog(import.meta.env.VITE_RECORD_PREFIX + url);
+const recordFile = (obj: any,type:string) => {
+  switch (type) {
+    case 'order':
+      const fileName = `工单编号-${obj.no} 录音文件`;
+      playRecordRef.value.openDialog(import.meta.env.VITE_RECORD_PREFIX + obj.recordingAbsolutePath,fileName, obj.recordingAbsolutePath);
+      break;
+    case 'visit':
+      const fileNames = `工单编号-${obj.order?.no} 录音文件`;
+      playRecordRef.value.openDialog(import.meta.env.VITE_RECORD_PREFIX + obj.recordingAbsolutePath,fileNames, obj.recordingAbsolutePath);
+      break;
+  }
 };
 // 新增质检项内容
 const onAddItem = () => {

+ 13 - 4
src/views/quality/index/components/Quality-inspection.vue

@@ -25,7 +25,7 @@
 							size="small"
 							type="primary"
 							class="ml8"
-							@click="recordFile(state.orderDetail.recordingAbsolutePath)"
+							@click="recordFile(state.orderDetail,'order')"
 							>工单录音</el-button
 						>
 						<el-button
@@ -35,7 +35,7 @@
 							size="small"
 							type="primary"
 							class="ml8"
-							@click="recordFile(state.visit.recordingAbsolutePath)"
+							@click="recordFile(state.visit,'visit')"
 							>回访录音</el-button
 						>
 					</el-form-item>
@@ -300,8 +300,17 @@ const closeItem = () => {
 };
 // 查看录音文件
 const playRecordRef = ref<RefType>();
-const recordFile = (url: string) => {
-	playRecordRef.value.openDialog(import.meta.env.VITE_RECORD_PREFIX + url);
+const recordFile = (obj: any,type:string) => {
+  switch (type) {
+    case 'order':
+      const fileName = `工单编号-${obj.no} 录音文件`;
+      playRecordRef.value.openDialog(import.meta.env.VITE_RECORD_PREFIX + obj.recordingAbsolutePath,fileName, obj.recordingAbsolutePath);
+      break;
+    case 'visit':
+      const fileNames = `工单编号-${obj.order?.no} 录音文件`;
+      playRecordRef.value.openDialog(import.meta.env.VITE_RECORD_PREFIX + obj.recordingAbsolutePath,fileNames, obj.recordingAbsolutePath);
+      break;
+  }
 };
 // 新增质检项内容
 const onAddItem = () => {

+ 6 - 2
src/views/tels/callLog/component/Play-record.vue

@@ -1,7 +1,7 @@
 <template>
 	<div class="tels-callRecord-playRecord-container">
 		<el-dialog v-model="dialogVisible" width="500px" draggable title="播放录音" append-to-body destroy-on-close>
-			<audio-player :url="RecordUrl" v-if="dialogVisible" />
+			<audio-player :url="RecordUrl" :fileName="fileName" :recordingAbsolutePath="recordingAbsolutePath"/>
 		</el-dialog>
 	</div>
 </template>
@@ -14,10 +14,14 @@ const AudioPlayer = defineAsyncComponent(() => import('@/components/AudioPlayer/
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['openDialog', 'closeDialog']);
 const RecordUrl = ref<string>(''); //录音地址
+const fileName = ref<string>('');
+const recordingAbsolutePath = ref<string>('');
 const dialogVisible = ref<boolean>(false); //是否显示弹窗
 // 打开弹窗
-const openDialog = async (url: any) => {
+const openDialog = async (url: any,recordingFileName,recordingPath) => {
 	RecordUrl.value = url;
+  fileName.value = recordingFileName;
+  recordingAbsolutePath.value = recordingPath;
 	dialogVisible.value = true;
 	emit('openDialog');
 };

+ 1 - 1
src/views/tels/callLog/index.vue

@@ -584,7 +584,7 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 // 播放录音
 const playRecordRef = ref<RefType>();
 const onPlaySoundRecording = (val: any) => {
-	playRecordRef.value.openDialog(import.meta.env.VITE_RECORD_PREFIX + val.recordingAbsolutePath);
+	playRecordRef.value.openDialog(import.meta.env.VITE_RECORD_PREFIX + val.recordingAbsolutePath, val.recordingFileName,val.recordingAbsolutePath);
 };
 // 下载录音
 const onDownload = (row: any) => {