|
@@ -2788,16 +2788,16 @@ from desktop.views import _ko
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<!-- 显示区域 -->
|
|
<!-- 显示区域 -->
|
|
|
- <div class="display-area" data-bind="foreach: messages">
|
|
|
|
|
|
|
+ <div class="display-area" data-bind="foreach: { data: messages, afterAdd: scrollToBottom }">
|
|
|
<!-- 消息 -->
|
|
<!-- 消息 -->
|
|
|
<div class="message" data-bind="html: content, css:{ 'ai-message': type==='ai', 'user-message': type==='user'}"></div>
|
|
<div class="message" data-bind="html: content, css:{ 'ai-message': type==='ai', 'user-message': type==='user'}"></div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<!-- 输入区域 -->
|
|
<!-- 输入区域 -->
|
|
|
<div class="input-area">
|
|
<div class="input-area">
|
|
|
- <textarea class="user-input clearable" placeholder="请输入你的问题..."
|
|
|
|
|
|
|
+ <textarea rows="1" class="user-input clearable" placeholder="请输入你的问题..."
|
|
|
data-bind="clearable: query, textInput: query, event: { keydown: ask, input: autoResize} "></textarea>
|
|
data-bind="clearable: query, textInput: query, event: { keydown: ask, input: autoResize} "></textarea>
|
|
|
- <button class="send-btn" data-bind="click: answer">发送</button>
|
|
|
|
|
|
|
+ <!-- <button class="send-btn" data-bind="click: answer">发送</button>-->
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -2890,6 +2890,26 @@ from desktop.views import _ko
|
|
|
inputArea.style.height = inputArea.scrollHeight + 'px';
|
|
inputArea.style.height = inputArea.scrollHeight + 'px';
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ // 滚动到底部函数
|
|
|
|
|
+ ChatPanel.prototype.scrollToBottom = function(elem) {
|
|
|
|
|
+ // elem 是刚被添加的 .message 元素
|
|
|
|
|
+ // 但我们更关心整个 .display-area 容器
|
|
|
|
|
+ const container = $('.display-area')[0];
|
|
|
|
|
+
|
|
|
|
|
+ // 判断是否“接近底部”(允许 2px 误差)
|
|
|
|
|
+ const isAtBottom = container.scrollHeight - container.scrollTop <= container.clientHeight + 2;
|
|
|
|
|
+
|
|
|
|
|
+ if (isAtBottom) {
|
|
|
|
|
+ if (container.scroll) {
|
|
|
|
|
+ // 或平滑滚动:
|
|
|
|
|
+ container.scroll({ top: container.scrollHeight, behavior: 'smooth' });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 用户在看底部 → 自动跟新
|
|
|
|
|
+ container.scrollTop = container.scrollHeight;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
ko.components.register('chat-panel', {
|
|
ko.components.register('chat-panel', {
|
|
|
viewModel: ChatPanel,
|
|
viewModel: ChatPanel,
|
|
|
template: { element: 'chat-panel-template' }
|
|
template: { element: 'chat-panel-template' }
|