|
|
|
|
@ -355,6 +355,10 @@ const selectForm = async (aiFormSetting: AiFormSettingVO) => {
|
|
|
|
|
|
|
|
|
|
const resetAiAssistant = () =>{
|
|
|
|
|
chatList.value = [];
|
|
|
|
|
selectLists.value = [];
|
|
|
|
|
type1Elements.value = [];
|
|
|
|
|
type2Elements.value = [];
|
|
|
|
|
selectedType2Elements.value = [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// function selectForm(aiFormSetting: AiFormSettingVO) {
|
|
|
|
|
@ -440,12 +444,130 @@ function onModelChange() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
watch(state, (newVal) => {
|
|
|
|
|
if (newVal.isShowSearch) {
|
|
|
|
|
loadForms()
|
|
|
|
|
getAiModelList();
|
|
|
|
|
// 创建重置函数
|
|
|
|
|
const resetAllState = () => {
|
|
|
|
|
// 重置表单选择状态
|
|
|
|
|
selectedFormSettingId.value = null
|
|
|
|
|
selectedForm.value = null
|
|
|
|
|
|
|
|
|
|
// 重置聊天记录
|
|
|
|
|
chatList.value = []
|
|
|
|
|
selectLists.value = []
|
|
|
|
|
type1Elements.value = []
|
|
|
|
|
type2Elements.value = []
|
|
|
|
|
selectedType2Elements.value = []
|
|
|
|
|
|
|
|
|
|
// 重置输入区域
|
|
|
|
|
inputValue.value = ''
|
|
|
|
|
aiThinking.value = false
|
|
|
|
|
aiLoading.value = false
|
|
|
|
|
|
|
|
|
|
// 重置录音相关状态
|
|
|
|
|
isRecording.value = false
|
|
|
|
|
audioAsrLoading.value = false
|
|
|
|
|
recognitionResult.value = ''
|
|
|
|
|
uploadProgress.value = 0
|
|
|
|
|
isUploading.value = false
|
|
|
|
|
|
|
|
|
|
// 重置选择对话框
|
|
|
|
|
selectDialog.value = false
|
|
|
|
|
selectDialogList.value = null
|
|
|
|
|
selectDialogListIndex.value = undefined
|
|
|
|
|
selectDialogFilterText.value = ''
|
|
|
|
|
selectedOption.value = ''
|
|
|
|
|
|
|
|
|
|
// 重置窗口位置和大小
|
|
|
|
|
windowPosition.value = { x: 'auto', y: 0 }
|
|
|
|
|
windowSize.value = { width: '24%', height: '100vh' }
|
|
|
|
|
isCustomPosition.value = false
|
|
|
|
|
|
|
|
|
|
// 重置当前组件
|
|
|
|
|
currentComponent.value = null
|
|
|
|
|
currentProps.value = {}
|
|
|
|
|
isShowLeft.value = false
|
|
|
|
|
currentSize.value = "menu"
|
|
|
|
|
|
|
|
|
|
// 重置更多对话框
|
|
|
|
|
showMore.value = false
|
|
|
|
|
moreFilterText.value = ''
|
|
|
|
|
|
|
|
|
|
// 重置sendForm
|
|
|
|
|
sendForm.value = {}
|
|
|
|
|
|
|
|
|
|
// 清理录音相关资源
|
|
|
|
|
if (microphoneStream) {
|
|
|
|
|
microphoneStream.getTracks().forEach(track => track.stop())
|
|
|
|
|
microphoneStream = null
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (mediaRecorder && mediaRecorder.state !== 'inactive') {
|
|
|
|
|
mediaRecorder.stop()
|
|
|
|
|
mediaRecorder = null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
audioChunks = []
|
|
|
|
|
|
|
|
|
|
// 清理录音文件URL
|
|
|
|
|
recordings.value.forEach(recording => {
|
|
|
|
|
URL.revokeObjectURL(recording.url)
|
|
|
|
|
})
|
|
|
|
|
recordings.value = []
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 添加窗口关闭时的清理函数
|
|
|
|
|
const cleanupOnClose = () => {
|
|
|
|
|
// 停止录音(如果正在录音)
|
|
|
|
|
if (isRecording.value) {
|
|
|
|
|
stopRecording()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 清理音频资源
|
|
|
|
|
if (microphoneStream) {
|
|
|
|
|
microphoneStream.getTracks().forEach(track => track.stop())
|
|
|
|
|
microphoneStream = null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mediaRecorder && mediaRecorder.state !== 'inactive') {
|
|
|
|
|
mediaRecorder.stop()
|
|
|
|
|
mediaRecorder = null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
audioChunks = []
|
|
|
|
|
|
|
|
|
|
// 重置状态
|
|
|
|
|
resetAllState()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 监听窗口显示状态变化
|
|
|
|
|
watch(() => state.isShowSearch, async (newVal) => {
|
|
|
|
|
if (newVal) {
|
|
|
|
|
console.log('AI窗口打开,重置状态并重新加载')
|
|
|
|
|
|
|
|
|
|
// 重置状态
|
|
|
|
|
resetAllState()
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// 并行加载表单和模型数据
|
|
|
|
|
await Promise.all([
|
|
|
|
|
loadForms(),
|
|
|
|
|
getAiModelList()
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
// 初始化表单映射
|
|
|
|
|
initFormPageMap()
|
|
|
|
|
|
|
|
|
|
// 重置共享存储数据
|
|
|
|
|
sharedStore.updateDynamicValue({
|
|
|
|
|
message: null,
|
|
|
|
|
timestamp: null
|
|
|
|
|
})
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('重新加载数据失败:', error)
|
|
|
|
|
ElMessage.error('加载数据失败,请重试')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}, { immediate: true })
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const selectLists = ref([]);
|
|
|
|
|
|
|
|
|
|
@ -494,6 +616,7 @@ const sendForm = ref({});
|
|
|
|
|
const handleSend = async (selectedText?: string) => {
|
|
|
|
|
if ((!canSend.value || aiThinking.value) && !selectedText) return
|
|
|
|
|
const userMsg = selectedText || inputValue.value
|
|
|
|
|
selectLists.value = [];
|
|
|
|
|
chatList.value.push({text: userMsg, from: 'user', type: 'text'})
|
|
|
|
|
scrollToBottom()
|
|
|
|
|
aiThinking.value = true
|
|
|
|
|
@ -1077,8 +1200,9 @@ onMounted(() => {
|
|
|
|
|
// processData(testData1);
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 组件卸载时清理资源
|
|
|
|
|
onBeforeUnmount(() => {
|
|
|
|
|
|
|
|
|
|
cleanupOnClose()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 组件卸载时清理资源
|
|
|
|
|
@ -1158,6 +1282,7 @@ function onInputKeydown(e: KeyboardEvent) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function close() {
|
|
|
|
|
cleanupOnClose()
|
|
|
|
|
state.isShowSearch = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|