3 changed files with 123 additions and 8 deletions
@ -0,0 +1,100 @@ |
|||||
|
<template> |
||||
|
<el-dialog class="chat-voice" title="语言录制" :visible.sync="visible" width="35%" :before-close="handleClose"> |
||||
|
<div> |
||||
|
录音时长:{{duration}} |
||||
|
</div> |
||||
|
|
||||
|
<el-row> |
||||
|
<el-button round type="primary" v-show="state=='STOP'" @click="handleStartRecord()">开始录音</el-button> |
||||
|
<el-button round type="warning" v-show="state=='RUNNING'" @click="handlePauseRecord()">暂停录音</el-button> |
||||
|
<el-button round type="primary" v-show="state=='PAUSE'" @click="handleResumeRecord()">继续录音</el-button> |
||||
|
<el-button round type="danger" v-show="state=='RUNNING'||state=='PAUSE'" @click="handleCompleteRecord()">结束录音</el-button> |
||||
|
<el-button round type="success" v-show="state=='COMPLETE'" @click="handlePlayRecord()">播放录音</el-button> |
||||
|
<el-button round type="primary" v-show="state=='COMPLETE'" @click="handleRestartRecord()">重新录音</el-button> |
||||
|
<el-button round type="primary" v-show="state=='COMPLETE'" @click="handleSendRecord()">立即发送</el-button> |
||||
|
</el-row> |
||||
|
|
||||
|
</el-dialog> |
||||
|
|
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import Recorderx, { |
||||
|
ENCODE_TYPE |
||||
|
} from 'recorderx'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'chatVoice', |
||||
|
props: { |
||||
|
visible: { |
||||
|
type: Boolean |
||||
|
} |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
rc: new Recorderx(), |
||||
|
state: 'STOP', //STOP、RUNNING、PAUSE、COMPLETE |
||||
|
duration: 0 |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
handleClose() { |
||||
|
this.$emit("close"); |
||||
|
}, |
||||
|
handleStartRecord() { |
||||
|
this.rc.start().then(() => { |
||||
|
this.$message.success("开始录音"); |
||||
|
}).catch(error => { |
||||
|
this.$message.error("录音失败" + error.message); |
||||
|
}); |
||||
|
console.log(this.rc) |
||||
|
this.state = 'RUNNING'; |
||||
|
}, |
||||
|
handlePauseRecord() { |
||||
|
this.state = 'PAUSE'; |
||||
|
}, |
||||
|
handleResumeRecord() { |
||||
|
this.state = 'RUNNING'; |
||||
|
}, |
||||
|
handleCompleteRecord() { |
||||
|
this.rc.pause() |
||||
|
let wav = this.rc.getRecord({ |
||||
|
encodeTo: ENCODE_TYPE.WAV, |
||||
|
}); |
||||
|
console.log(wav); |
||||
|
this.state = 'COMPLETE'; |
||||
|
}, |
||||
|
handlePlayRecord() { |
||||
|
|
||||
|
}, |
||||
|
handleRestartRecord() { |
||||
|
this.state = 'RUNNING'; |
||||
|
}, |
||||
|
handleSendRecord() { |
||||
|
this.upload(); |
||||
|
}, |
||||
|
upload() { |
||||
|
let wav = this.rc.getRecord({ |
||||
|
encodeTo: ENCODE_TYPE.WAV, |
||||
|
}); |
||||
|
let name = new Date().getDate() + '.wav'; |
||||
|
var formData = new window.FormData() |
||||
|
formData.append('file', wav, name); |
||||
|
this.$http({ |
||||
|
url: '/file/upload', |
||||
|
data: formData, |
||||
|
method: 'post', |
||||
|
headers: { |
||||
|
'Content-Type': 'multipart/form-data' |
||||
|
} |
||||
|
}).then((url)=>{ |
||||
|
this.$message.success("上传成功"); |
||||
|
console.log(url); |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style> |
||||
|
</style> |
||||
Loading…
Reference in new issue