diff --git a/src/App.vue b/src/App.vue index b650c4c5..ba6a0e7e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -87,4 +87,16 @@ border: 1px solid #e7e7e7 !important; box-shadow: 0px 1px 5px 1px rgba(92,98,111,.3); } - + +#app { + pointer-events: none; +} + +#app > *:not(.case-expert-dialog) { + pointer-events: auto; +} + +.case-expert-dialog { + pointer-events: auto; +} + \ No newline at end of file diff --git a/src/views/portal/case/AICall.vue b/src/views/portal/case/AICall.vue index 71904f87..de28de92 100644 --- a/src/views/portal/case/AICall.vue +++ b/src/views/portal/case/AICall.vue @@ -33,6 +33,7 @@ class="welcome-message" ref="messageContainer" @scroll="handleScroll" + @wheel="handleWheel" >
@@ -191,7 +192,7 @@ export default { left: parseInt(dialogEl.style.left), top: parseInt(dialogEl.style.top) }; - sessionStorage.setItem('aiCallDialogPosition', JSON.stringify(currentPosition)); + // sessionStorage.setItem('aiCallDialogPosition', JSON.stringify(currentPosition)); // 移除全局事件监听 document.removeEventListener('mousemove', handleMouseMove); @@ -515,12 +516,12 @@ export default { } // 检查是否有保存的位置状态 - const savedPosition = sessionStorage.getItem('aiCallDialogPosition'); - if (savedPosition) { - const { left, top } = JSON.parse(savedPosition); - dialogEl.style.left = left + 'px'; - dialogEl.style.top = top + 'px'; - } + // const savedPosition = sessionStorage.getItem('aiCallDialogPosition'); + // if (savedPosition) { + // const { left, top } = JSON.parse(savedPosition); + // dialogEl.style.left = left + 'px'; + // dialogEl.style.top = top + 'px'; + // } } let doc = document.querySelector('.welcome-message') @@ -567,7 +568,7 @@ closeMinimizedWindow() { console.log('关闭弹窗') // 清除保存的状态 sessionStorage.removeItem('aiCallDialogSize'); - sessionStorage.removeItem('aiCallDialogPosition'); + // sessionStorage.removeItem('aiCallDialogPosition'); this.$emit('close') // 可以在这里执行其他逻辑 }, @@ -657,6 +658,31 @@ closeMinimizedWindow() { } }, + // 处理鼠标滚轮事件 + handleWheel(event) { + const element = this.$refs.messageContainer; + if (!element) return; + + // 阻止事件冒泡,防止滚动底层页面 + event.stopPropagation(); + + // 计算滚动方向和距离 + const delta = event.deltaY || event.detail || event.wheelDelta; + + // 检查是否可以继续滚动 + if (delta < 0 && element.scrollTop === 0) { + // 向上滚动且已在顶部,阻止默认行为 + event.preventDefault(); + } else if (delta > 0 && element.scrollHeight - element.scrollTop <= element.clientHeight) { + // 向下滚动且已在底部,阻止默认行为 + event.preventDefault(); + } else { + // 允许在容器内滚动 + element.scrollTop += delta; + event.preventDefault(); + } + }, + // 最小化窗口的点击事件处理方法 onMinimizedWindowClick() { // 当点击最小化窗口时,如果dialogVisible为false,则通过事件通知父组件显示对话框 @@ -671,6 +697,9 @@ closeMinimizedWindow() {