|
@@ -132,7 +132,7 @@
|
|
aiChatRecordList(queryForm).then(resp =>{
|
|
aiChatRecordList(queryForm).then(resp =>{
|
|
chatRecordList.value = resp.rows;
|
|
chatRecordList.value = resp.rows;
|
|
loadingHistoryRecord.value = false
|
|
loadingHistoryRecord.value = false
|
|
- setInterval(()=>{
|
|
|
|
|
|
+ setTimeout(()=>{
|
|
scrollToBottom();
|
|
scrollToBottom();
|
|
}, 100);
|
|
}, 100);
|
|
if(resp.total == 0){
|
|
if(resp.total == 0){
|
|
@@ -268,22 +268,22 @@
|
|
|
|
|
|
/* 语音识别 ↓*/
|
|
/* 语音识别 ↓*/
|
|
// 控制录音弹窗
|
|
// 控制录音弹窗
|
|
- let voiceOpen = false
|
|
|
|
|
|
+ let iatVoiceOpen = false
|
|
// 是否开始录音
|
|
// 是否开始录音
|
|
- let startVoiceStatus = false
|
|
|
|
|
|
+ let iatStartVoiceStatus = false
|
|
// 识别中状态
|
|
// 识别中状态
|
|
- let identifyStatus = false
|
|
|
|
|
|
+ let iatIdentifyStatus = false
|
|
// 录音对象
|
|
// 录音对象
|
|
- let recorder = null
|
|
|
|
- let transcription = ''
|
|
|
|
- let btnStatus = ''
|
|
|
|
- let resultText = ''
|
|
|
|
- let resultTextTemp = ''
|
|
|
|
- let countdownInterval = null
|
|
|
|
|
|
+ let iatRecorder = null
|
|
|
|
+ let iatTranscription = ''
|
|
|
|
+ let iatBtnStatus = ''
|
|
|
|
+ let iatResultText = ''
|
|
|
|
+ let iatResultTextTemp = ''
|
|
|
|
+ let iatCountdownInterval = null
|
|
let iatWS = null
|
|
let iatWS = null
|
|
- let recognition = null
|
|
|
|
- let buttonDisabled = true
|
|
|
|
- let loading = false
|
|
|
|
|
|
+ let iatRecognition = null
|
|
|
|
+ let iatButtonDisabled = true
|
|
|
|
+ let iatLoading = false
|
|
let xfIatKeys = {
|
|
let xfIatKeys = {
|
|
APPID: '5a2643f4',
|
|
APPID: '5a2643f4',
|
|
APISecret: 'MTg4MWIzY2VmYTg2YTEwMjliMDY1N2Iz',
|
|
APISecret: 'MTg4MWIzY2VmYTg2YTEwMjliMDY1N2Iz',
|
|
@@ -292,12 +292,12 @@
|
|
// 初始化语音识别
|
|
// 初始化语音识别
|
|
function initSpeechRecognition(){
|
|
function initSpeechRecognition(){
|
|
// 初始化录音
|
|
// 初始化录音
|
|
- recorder = new window.RecorderManager('/ai/iat/dist');
|
|
|
|
|
|
+ iatRecorder = new window.RecorderManager('/ai/iat/dist');
|
|
// 开始录音
|
|
// 开始录音
|
|
- recorder.onStart = () => {
|
|
|
|
|
|
+ iatRecorder.onStart = () => {
|
|
changeBtnStatus('OPEN');
|
|
changeBtnStatus('OPEN');
|
|
};
|
|
};
|
|
- recorder.onFrameRecorded = ({ isLastFrame, frameBuffer }) => {
|
|
|
|
|
|
+ iatRecorder.onFrameRecorded = ({ isLastFrame, frameBuffer }) => {
|
|
if (iatWS.readyState === iatWS.OPEN) {
|
|
if (iatWS.readyState === iatWS.OPEN) {
|
|
iatWS.send(
|
|
iatWS.send(
|
|
JSON.stringify({
|
|
JSON.stringify({
|
|
@@ -314,40 +314,40 @@
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
};
|
|
- recorder.onStop = () => {
|
|
|
|
|
|
+ iatRecorder.onStop = () => {
|
|
console.log('录音结束,停止定时器');
|
|
console.log('录音结束,停止定时器');
|
|
- clearInterval(countdownInterval);
|
|
|
|
- startVoiceStatus = false;
|
|
|
|
|
|
+ clearInterval(iatCountdownInterval);
|
|
|
|
+ iatStartVoiceStatus = false;
|
|
};
|
|
};
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
async function startVoice() {
|
|
async function startVoice() {
|
|
- if (loading) {
|
|
|
|
|
|
+ if (iatLoading) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- voiceOpen = true;
|
|
|
|
|
|
+ iatVoiceOpen = true;
|
|
await playIatVoice();
|
|
await playIatVoice();
|
|
}
|
|
}
|
|
|
|
|
|
async function playIatVoice() {
|
|
async function playIatVoice() {
|
|
- if (loading) {
|
|
|
|
|
|
+ if (iatLoading) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- startVoiceStatus = !startVoiceStatus;
|
|
|
|
|
|
+ iatStartVoiceStatus = !iatStartVoiceStatus;
|
|
// 浏览器自带的识别
|
|
// 浏览器自带的识别
|
|
- if (recognition) {
|
|
|
|
- if (startVoiceStatus) {
|
|
|
|
- recognition.start();
|
|
|
|
|
|
+ if (iatRecognition) {
|
|
|
|
+ if (iatStartVoiceStatus) {
|
|
|
|
+ iatRecognition.start();
|
|
} else {
|
|
} else {
|
|
- recognition.stop();
|
|
|
|
|
|
+ iatRecognition.stop();
|
|
}
|
|
}
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- if (startVoiceStatus) {
|
|
|
|
|
|
+ if (iatStartVoiceStatus) {
|
|
connectWebSocket();
|
|
connectWebSocket();
|
|
} else {
|
|
} else {
|
|
- recorder.stop();
|
|
|
|
|
|
+ iatRecorder.stop();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -355,15 +355,15 @@
|
|
* 关闭录音弹窗
|
|
* 关闭录音弹窗
|
|
*/
|
|
*/
|
|
function closeVoiceOpen() {
|
|
function closeVoiceOpen() {
|
|
- voiceOpen = false;
|
|
|
|
- startVoiceStatus = false;
|
|
|
|
- if (recorder) {
|
|
|
|
- recorder.stop();
|
|
|
|
|
|
+ iatVoiceOpen = false;
|
|
|
|
+ iatStartVoiceStatus = false;
|
|
|
|
+ if (iatRecorder) {
|
|
|
|
+ iatRecorder.stop();
|
|
}
|
|
}
|
|
- if (recognition) {
|
|
|
|
- recognition.stop();
|
|
|
|
|
|
+ if (iatRecognition) {
|
|
|
|
+ iatRecognition.stop();
|
|
}
|
|
}
|
|
- transcription = '';
|
|
|
|
|
|
+ iatTranscription = '';
|
|
}
|
|
}
|
|
|
|
|
|
function renderResult(resultData) {
|
|
function renderResult(resultData) {
|
|
@@ -381,15 +381,14 @@
|
|
if (data.pgs) {
|
|
if (data.pgs) {
|
|
if (data.pgs === 'apd') {
|
|
if (data.pgs === 'apd') {
|
|
// 将resultTextTemp同步给resultText
|
|
// 将resultTextTemp同步给resultText
|
|
- resultText = resultTextTemp;
|
|
|
|
|
|
+ iatResultText = iatResultTextTemp;
|
|
}
|
|
}
|
|
// 将结果存储在resultTextTemp中
|
|
// 将结果存储在resultTextTemp中
|
|
- resultTextTemp = resultText + str;
|
|
|
|
|
|
+ iatResultTextTemp = iatResultText + str;
|
|
} else {
|
|
} else {
|
|
- resultText += str;
|
|
|
|
|
|
+ iatResultText += str;
|
|
}
|
|
}
|
|
- inputMessage.value = resultTextTemp || resultText || '';
|
|
|
|
- console.log("识别:"+inputMessage.value);
|
|
|
|
|
|
+ inputMessage.value = iatResultTextTemp || iatResultText || '';
|
|
}
|
|
}
|
|
if (jsonData.code === 0 && jsonData.data.status === 2) {
|
|
if (jsonData.code === 0 && jsonData.data.status === 2) {
|
|
iatWS.close();
|
|
iatWS.close();
|
|
@@ -414,7 +413,7 @@
|
|
iatWS.onopen = e => {
|
|
iatWS.onopen = e => {
|
|
console.log('iatWS.onopen', e);
|
|
console.log('iatWS.onopen', e);
|
|
// 开始录音
|
|
// 开始录音
|
|
- recorder.start({
|
|
|
|
|
|
+ iatRecorder.start({
|
|
sampleRate: 16000,
|
|
sampleRate: 16000,
|
|
frameSize: 1280,
|
|
frameSize: 1280,
|
|
});
|
|
});
|
|
@@ -444,12 +443,12 @@
|
|
};
|
|
};
|
|
iatWS.onerror = e => {
|
|
iatWS.onerror = e => {
|
|
console.error(e);
|
|
console.error(e);
|
|
- recorder.stop();
|
|
|
|
|
|
+ iatRecorder.stop();
|
|
changeBtnStatus('CLOSED');
|
|
changeBtnStatus('CLOSED');
|
|
};
|
|
};
|
|
iatWS.onclose = e => {
|
|
iatWS.onclose = e => {
|
|
console.log(e);
|
|
console.log(e);
|
|
- recorder.stop();
|
|
|
|
|
|
+ iatRecorder.stop();
|
|
changeBtnStatus('CLOSED');
|
|
changeBtnStatus('CLOSED');
|
|
};
|
|
};
|
|
}
|
|
}
|
|
@@ -480,11 +479,11 @@
|
|
function countdown() {
|
|
function countdown() {
|
|
let seconds = 60;
|
|
let seconds = 60;
|
|
console.log(`录音中(${seconds}s)`);
|
|
console.log(`录音中(${seconds}s)`);
|
|
- countdownInterval = setInterval(() => {
|
|
|
|
|
|
+ iatCountdownInterval = setInterval(() => {
|
|
seconds -= 1;
|
|
seconds -= 1;
|
|
if (seconds <= 0) {
|
|
if (seconds <= 0) {
|
|
- clearInterval(countdownInterval);
|
|
|
|
- recorder.stop();
|
|
|
|
|
|
+ clearInterval(iatCountdownInterval);
|
|
|
|
+ iatRecorder.stop();
|
|
} else {
|
|
} else {
|
|
console.log(`录音中(${seconds}s)`);
|
|
console.log(`录音中(${seconds}s)`);
|
|
}
|
|
}
|
|
@@ -492,13 +491,13 @@
|
|
}
|
|
}
|
|
|
|
|
|
function changeBtnStatus(status) {
|
|
function changeBtnStatus(status) {
|
|
- btnStatus = status;
|
|
|
|
|
|
+ iatBtnStatus = status;
|
|
if (status === 'CONNECTING') {
|
|
if (status === 'CONNECTING') {
|
|
console.log('建立连接中');
|
|
console.log('建立连接中');
|
|
- resultText = '';
|
|
|
|
- resultTextTemp = '';
|
|
|
|
|
|
+ iatResultText = '';
|
|
|
|
+ iatResultTextTemp = '';
|
|
} else if (status === 'OPEN') {
|
|
} else if (status === 'OPEN') {
|
|
- if (recorder) {
|
|
|
|
|
|
+ if (iatRecorder) {
|
|
countdown();
|
|
countdown();
|
|
}
|
|
}
|
|
} else if (status === 'CLOSING') {
|
|
} else if (status === 'CLOSING') {
|
|
@@ -536,7 +535,9 @@
|
|
|
|
|
|
let chatContainerRef = ref(null)
|
|
let chatContainerRef = ref(null)
|
|
function scrollToBottom(){
|
|
function scrollToBottom(){
|
|
- chatContainerRef.value.scrollTop = chatContainerRef.value.scrollHeight+20;
|
|
|
|
|
|
+ if(chatContainerRef.value.scrollHeight){
|
|
|
|
+ chatContainerRef.value.scrollTop = chatContainerRef.value.scrollHeight+20;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
onMounted(()=>{
|
|
onMounted(()=>{
|