57 changed files with 351 additions and 885 deletions
			
			
		| @ -0,0 +1,3 @@ | |||||
|  | <template> | ||||
|  |   <router-view /> | ||||
|  | </template> | ||||
| @ -1,235 +0,0 @@ | |||||
| <template> |  | ||||
|   <div class="luyin"> |  | ||||
|     <p>录音时长:</p> |  | ||||
|     <div style="margin-top:10px;"> |  | ||||
|       <el-button type="primary" size="small" @click="startRecorder">开始录音</el-button> |  | ||||
|       <el-button type="primary" size="small" @click="pauseRecorder">暂停录音</el-button> |  | ||||
|       <el-button type="primary" size="small" @click="endRecorder">停止录音</el-button> |  | ||||
|     </div> |  | ||||
|     <div style="margin-top:10px;"> |  | ||||
|       <el-button type="primary" size="small" @click="playRecorder">播放</el-button> |  | ||||
|       <el-button type="primary" size="small" @click="pausePlayRecorder">暂停播放</el-button> |  | ||||
|       <el-button type="primary" size="small" @click="resumePlayRecorder">恢复播放</el-button> |  | ||||
|     </div> |  | ||||
|     <div style="margin-top:10px;"> |  | ||||
|       <canvas id="canvas" /> |  | ||||
|       <span style="padding: 0 10%;" /> |  | ||||
|       <canvas id="playChart" /> |  | ||||
|     </div> |  | ||||
|     <div style="margin-top:10px;"> |  | ||||
|       <el-button type="primary" size="small" @click="getMp3Data()">下载MP3</el-button> |  | ||||
|     </div> |  | ||||
|   </div> |  | ||||
| </template> |  | ||||
| 
 |  | ||||
| <script> |  | ||||
| import lamejs from 'lamejs' |  | ||||
| export default { |  | ||||
|   data() { |  | ||||
|     return { |  | ||||
|       // 波浪图-录音 |  | ||||
|       drawRecordId: null, |  | ||||
|       oCanvas: null, |  | ||||
|       ctx: null, |  | ||||
|       // 波浪图-播放 |  | ||||
|       drawPlayId: null, |  | ||||
|       pCanvas: null, |  | ||||
|       pCtx: null |  | ||||
|     } |  | ||||
|   }, |  | ||||
|   mounted() { |  | ||||
|     this.startCanvas() |  | ||||
|   }, |  | ||||
|   methods: { |  | ||||
|     // 波浪图配置 |  | ||||
|     startCanvas() { |  | ||||
|       // 录音波浪 |  | ||||
|       this.oCanvas = document.getElementById('canvas') |  | ||||
|       this.ctx = this.oCanvas.getContext('2d') |  | ||||
|       // 播放波浪 |  | ||||
|       this.pCanvas = document.getElementById('playChart') |  | ||||
|       this.pCtx = this.pCanvas.getContext('2d') |  | ||||
|     }, |  | ||||
|     // 开始录音 |  | ||||
|     startRecorder() { |  | ||||
|       this.$recorder.start().then(() => { |  | ||||
|         // 开始录音 |  | ||||
|         this.drawRecord() // 开始绘制波浪图 |  | ||||
|       }, (error) => { |  | ||||
|         // 出错了 |  | ||||
|         console.log(`${error.name} : ${error.message}`) |  | ||||
|       }) |  | ||||
|     }, |  | ||||
|     // 暂停录音 |  | ||||
|     pauseRecorder() { |  | ||||
|       this.$recorder.pause() |  | ||||
|       this.drawRecordId && cancelAnimationFrame(this.drawRecordId) |  | ||||
|       this.drawRecordId = null |  | ||||
|     }, |  | ||||
|     // 结束录音 |  | ||||
|     endRecorder() { |  | ||||
|       this.$recorder.stop() |  | ||||
|       this.drawRecordId && cancelAnimationFrame(this.drawRecordId) |  | ||||
|       this.drawRecordId = null |  | ||||
|       this.uploadFile() |  | ||||
|     }, |  | ||||
|     // 上传录音 |  | ||||
|     async uploadFile() { |  | ||||
|       const mp3Name = encodeURIComponent('audio_recording_' + new Date().getTime() + '.mp3') |  | ||||
|       const formData = new FormData() |  | ||||
|       let file = this.convertToMp3(this.$recorder.getWAV()) |  | ||||
|       file = new File([file], mp3Name) |  | ||||
|       formData.append('file', file) |  | ||||
|       formData.append('mp3Name', mp3Name) |  | ||||
|       const { data: res } = this.$http({ |  | ||||
|         method: 'post', |  | ||||
|         url: '', |  | ||||
|         headers: { |  | ||||
|           'Content-Type': 'multipart/form-data' |  | ||||
|         }, |  | ||||
|         data: formData |  | ||||
|       }) |  | ||||
|       console.log(res) |  | ||||
|     }, |  | ||||
|     // 播放录音 |  | ||||
|     playRecorder() { |  | ||||
|       this.$recorder.play() |  | ||||
|       this.drawPlay() // 绘制波浪图 |  | ||||
|     }, |  | ||||
|     // 暂停播放 |  | ||||
|     pausePlayRecorder() { |  | ||||
|       this.$recorder.pausePlay() |  | ||||
|     }, |  | ||||
|     // 恢复录音播放 |  | ||||
|     resumePlayRecorder() { |  | ||||
|       this.$recorder.resumePlay() |  | ||||
|       this.drawPlay() // 绘制波浪图 |  | ||||
|     }, |  | ||||
|     // 绘制波浪图-录音 |  | ||||
|     drawRecord() { |  | ||||
|       // 用requestAnimationFrame稳定60fps绘制 |  | ||||
|       this.drawRecordId = requestAnimationFrame(this.drawRecord) |  | ||||
| 
 |  | ||||
|       // 实时获取音频大小数据 |  | ||||
|       const dataArray = this.$recorder.getRecordAnalyseData() |  | ||||
|       const bufferLength = dataArray.length |  | ||||
| 
 |  | ||||
|       // 填充背景色 |  | ||||
|       this.ctx.fillStyle = 'rgb(255, 255, 255)' |  | ||||
|       this.ctx.fillRect(0, 0, this.oCanvas.width, this.oCanvas.height) |  | ||||
| 
 |  | ||||
|       // 设定波形绘制颜色 |  | ||||
|       this.ctx.lineWidth = 2 |  | ||||
|       this.ctx.strokeStyle = 'rgb(152, 199, 255)' |  | ||||
| 
 |  | ||||
|       this.ctx.beginPath() |  | ||||
| 
 |  | ||||
|       var sliceWidth = this.oCanvas.width * 1.0 / bufferLength // 一个点占多少位置,共有bufferLength个点要绘制 |  | ||||
|       var x = 0 // 绘制点的x轴位置 |  | ||||
| 
 |  | ||||
|       for (var i = 0; i < bufferLength; i++) { |  | ||||
|         var v = dataArray[i] / 128.0 |  | ||||
|         var y = v * this.oCanvas.height / 2 |  | ||||
| 
 |  | ||||
|         if (i === 0) { |  | ||||
|           // 第一个点 |  | ||||
|           this.ctx.moveTo(x, y) |  | ||||
|         } else { |  | ||||
|           // 剩余的点 |  | ||||
|           this.ctx.lineTo(x, y) |  | ||||
|         } |  | ||||
|         // 依次平移,绘制所有点 |  | ||||
|         x += sliceWidth |  | ||||
|       } |  | ||||
| 
 |  | ||||
|       this.ctx.lineTo(this.oCanvas.width, this.oCanvas.height / 2) |  | ||||
|       this.ctx.stroke() |  | ||||
|     }, |  | ||||
|     // 绘制波浪图-播放 |  | ||||
|     drawPlay() { |  | ||||
|       // 用requestAnimationFrame稳定60fps绘制 |  | ||||
|       this.drawPlayId = requestAnimationFrame(this.drawPlay) |  | ||||
| 
 |  | ||||
|       // 实时获取音频大小数据 |  | ||||
|       const dataArray = this.$recorder.getPlayAnalyseData() |  | ||||
|       const bufferLength = dataArray.length |  | ||||
| 
 |  | ||||
|       // 填充背景色 |  | ||||
|       this.pCtx.fillStyle = 'rgb(255, 255, 255)' |  | ||||
|       this.pCtx.fillRect(0, 0, this.pCanvas.width, this.pCanvas.height) |  | ||||
| 
 |  | ||||
|       // 设定波形绘制颜色 |  | ||||
|       this.pCtx.lineWidth = 2 |  | ||||
|       this.pCtx.strokeStyle = 'rgb(152, 199, 255)' |  | ||||
| 
 |  | ||||
|       this.pCtx.beginPath() |  | ||||
| 
 |  | ||||
|       var sliceWidth = this.pCanvas.width * 1.0 / bufferLength // 一个点占多少位置,共有bufferLength个点要绘制 |  | ||||
|       var x = 0 // 绘制点的x轴位置 |  | ||||
| 
 |  | ||||
|       for (var i = 0; i < bufferLength; i++) { |  | ||||
|         var v = dataArray[i] / 128.0 |  | ||||
|         var y = v * this.pCanvas.height / 2 |  | ||||
| 
 |  | ||||
|         if (i === 0) { |  | ||||
|           // 第一个点 |  | ||||
|           this.pCtx.moveTo(x, y) |  | ||||
|         } else { |  | ||||
|           // 剩余的点 |  | ||||
|           this.pCtx.lineTo(x, y) |  | ||||
|         } |  | ||||
|         // 依次平移,绘制所有点 |  | ||||
|         x += sliceWidth |  | ||||
|       } |  | ||||
| 
 |  | ||||
|       this.pCtx.lineTo(this.pCanvas.width, this.pCanvas.height / 2) |  | ||||
|       this.pCtx.stroke() |  | ||||
|     }, |  | ||||
|     // 下载mp3 |  | ||||
|     getMp3Data() { |  | ||||
|       const mp3Blob = this.convertToMp3(this.$recorder.getWAV()) |  | ||||
|       this.$recorder.download(mp3Blob, 'recorder', 'mp3') |  | ||||
|     }, |  | ||||
|     // 转mp3 |  | ||||
|     convertToMp3(wavDataView) { |  | ||||
|       // 获取wav头信息 |  | ||||
|       const wav = lamejs.WavHeader.readHeader(wavDataView) // 此处其实可以不用去读wav头信息,毕竟有对应的config配置 |  | ||||
|       const { channels, sampleRate } = wav |  | ||||
|       const mp3enc = new lamejs.Mp3Encoder(channels, sampleRate, 128) |  | ||||
|       // 获取左右通道数据 |  | ||||
|       const result = this.$recorder.getChannelData() |  | ||||
|       const buffer = [] |  | ||||
| 
 |  | ||||
|       const leftData = result.left && new Int16Array(result.left.buffer, 0, result.left.byteLength / 2) |  | ||||
|       const rightData = result.right && new Int16Array(result.right.buffer, 0, result.right.byteLength / 2) |  | ||||
|       const remaining = leftData.length + (rightData ? rightData.length : 0) |  | ||||
| 
 |  | ||||
|       const maxSamples = 1152 |  | ||||
|       for (let i = 0; i < remaining; i += maxSamples) { |  | ||||
|         const left = leftData.subarray(i, i + maxSamples) |  | ||||
|         let right = null |  | ||||
|         let mp3buf = null |  | ||||
| 
 |  | ||||
|         if (channels === 2) { |  | ||||
|           right = rightData.subarray(i, i + maxSamples) |  | ||||
|           mp3buf = mp3enc.encodeBuffer(left, right) |  | ||||
|         } else { |  | ||||
|           mp3buf = mp3enc.encodeBuffer(left) |  | ||||
|         } |  | ||||
| 
 |  | ||||
|         if (mp3buf.length > 0) { |  | ||||
|           buffer.push(mp3buf) |  | ||||
|         } |  | ||||
|       } |  | ||||
| 
 |  | ||||
|       const enc = mp3enc.flush() |  | ||||
| 
 |  | ||||
|       if (enc.length > 0) { |  | ||||
|         buffer.push(enc) |  | ||||
|       } |  | ||||
| 
 |  | ||||
|       return new Blob(buffer, { type: 'audio/mp3' }) |  | ||||
|     } |  | ||||
|   } |  | ||||
| } |  | ||||
| </script> |  | ||||
| @ -1,81 +0,0 @@ | |||||
| <template> |  | ||||
|   <div /> |  | ||||
| </template> |  | ||||
| 
 |  | ||||
| <script> |  | ||||
| import Cookies from 'js-cookie' |  | ||||
| export default { |  | ||||
|   data() { |  | ||||
|     return { |  | ||||
|       returnParam: {}, |  | ||||
|       currentUser: {}, |  | ||||
|       patientInfo: {} |  | ||||
|     } |  | ||||
|   }, |  | ||||
|   created() { |  | ||||
|     var searchHref = decodeURIComponent(window.location.search).replace('?', '') |  | ||||
|     console.log(searchHref) |  | ||||
|     var params = searchHref.split('&') |  | ||||
|     params.forEach(param => { |  | ||||
|       var paramSplit = param.split('=') |  | ||||
|       this.returnParam[paramSplit[0]] = paramSplit[1] |  | ||||
|     }) |  | ||||
|     console.log(this.returnParam) |  | ||||
|     if (this.returnParam.doctorId) { |  | ||||
|       this.noPasswordLogin() |  | ||||
|     } |  | ||||
|   }, |  | ||||
|   methods: { |  | ||||
|     noPasswordLogin() { |  | ||||
|       // https://quguang.huimu.cloud/transfer?patientIdNumber=140108201204070077&doctorId=liucan&hisToken=123456 |  | ||||
|       this.$http.post('/noPasswordLogin', { |  | ||||
|         doctorId: this.returnParam.doctorId, |  | ||||
|         hisToken: this.returnParam.hisToken |  | ||||
|       }).then(({ data: res }) => { |  | ||||
|         if (res.code !== 0) { |  | ||||
|           // this.getCaptcha() |  | ||||
|           return this.$message.error(res.msg) |  | ||||
|         } |  | ||||
|         this.currentUser = res.data.currentUser |  | ||||
|         Cookies.set('xa-token', res.data.token) |  | ||||
|         window.localStorage.setItem('qg-userData', JSON.stringify(res.data.currentUser)) |  | ||||
|         this.getHisPatientInfo() |  | ||||
|       }).catch(() => { }) |  | ||||
|     }, |  | ||||
|     // HIS查询患者详情 |  | ||||
|     getHisPatientInfo() { |  | ||||
|       this.$http.get(`/patient/manage/getHisPatientInfo/${this.returnParam.patientIdNumber}`).then(({ data: res }) => { |  | ||||
|         if (res.code !== 0) { |  | ||||
|           return this.$message.error(res.msg) |  | ||||
|         } |  | ||||
|         this.patientInfo = res.data |  | ||||
|         this.savePatientInfo() |  | ||||
|       }).catch(() => {}) |  | ||||
|     }, |  | ||||
|     async savePatientInfo() { |  | ||||
|       const { data: res } = await this.$http.post('/patient/manage', this.patientInfo) |  | ||||
|       if (res.code !== 0) { |  | ||||
|         return this.$message.error(res.msg) |  | ||||
|       } |  | ||||
|       this.$router.push({ |  | ||||
|         path: '/seeDoctor', |  | ||||
|         query: { |  | ||||
|           info: this.$Base64.encode(JSON.stringify({ |  | ||||
|             patientIdNumber: this.returnParam.patientIdNumber, |  | ||||
|             patientCentreId: this.currentUser.centreId, |  | ||||
|             doctorId: this.returnParam.doctorId, |  | ||||
|             title: this.currentUser.position === '医生' ? '门诊' : '分诊' |  | ||||
|           })) |  | ||||
|         } |  | ||||
|       }) |  | ||||
|       const findMenuListInterval = setInterval(() => { |  | ||||
|         const menuList = window.SITE_CONFIG['menuList'] |  | ||||
|         menuList.length > 0 ? clearInterval(findMenuListInterval) : '' |  | ||||
|         // 设置菜单激活所在位置 |  | ||||
|         window.SITE_CONFIG.menuList.length > 0 ? this.$store.commit('activeIndexFun', res.data[0].id) : '' |  | ||||
|       }, 500) |  | ||||
|     } |  | ||||
|   } |  | ||||
| } |  | ||||
| 
 |  | ||||
| </script> |  | ||||
					Loading…
					
					
				
		Reference in new issue