test(addon/aikefu): 测试会话管理及消息展示是否有分页功能

This commit is contained in:
2025-12-09 10:47:04 +08:00
parent 345e7393ae
commit 2f9e1fabd6

View File

@@ -188,37 +188,35 @@
var role = item.role === 'user' ? (item.user_id ? '用户-' + item.user_id : '用户') : '机器人'; var role = item.role === 'user' ? (item.user_id ? '用户-' + item.user_id : '用户') : '机器人';
var roleClass = item.role === 'user' ? 'user' : 'assistant'; var roleClass = item.role === 'user' ? 'user' : 'assistant';
var avatar = item.role === 'user' ? '/addon/aikefu/static/images/user.svg' : '/addon/aikefu/static/images/robot.svg'; var avatar = item.role === 'user' ? '/addon/aikefu/static/images/user.svg' : '/addon/aikefu/static/images/robot.svg';
}}} <div class="message-item {{= roleClass }}">
<div class="message-item {{roleClass}}"> {{# if(item.role === 'assistant') { }}}
{{# if(item.role === 'assistant') { <img src="{{= avatar }}" class="message-avatar">
<img src="{{avatar}}" class="message-avatar"> {{# } }}
}}}
<div> <div>
<div class="message-role">{{role}}</div> <div class="message-role">{{= role }}</div>
<div class="message-content">{{item.content}}</div> <div class="message-content">{{= item.content }}</div>
<div class="message-time">{{item.create_time}}</div> <div class="message-time">{{= item.create_time }}</div>
</div> </div>
{{# if(item.role === 'user') { {{# if(item.role === 'user') { }}}
<img src="{{avatar}}" class="message-avatar"> <img src="{{= avatar }}" class="message-avatar">
}}} {{# } }}
</div> </div>
{{# }); });
} else { } else {
}}}
<div class="empty-state"> <div class="empty-state">
<i class="layui-icon layui-icon-message"></i> <i class="layui-icon layui-icon-message"></i>
<p>暂无消息记录</p> <p>暂无消息记录</p>
</div> </div>
{{# } } }}
}}
</div> </div>
</script> </script>
<script> <script>
layui.use(['table', 'form', 'layer'], function() { layui.use(['table', 'form', 'layer', 'laypage'], function() {
var table = layui.table; var table = layui.table;
var form = layui.form; var form = layui.form;
var layer = layui.layer; var layer = layui.layer;
var laypage = layui.laypage;
// 渲染表格 // 渲染表格
var tableIns = table.render({ var tableIns = table.render({
@@ -315,23 +313,29 @@
layer.open({ layer.open({
type: 1, type: 1,
title: '消息记录', title: '消息记录',
content: '<div class="message-list" style="padding: 25px; max-height: 650px; overflow-y: auto;">加载中...</div>', content: '<div style="padding: 25px; max-height: 700px;"><div class="message-list" style="max-height: 580px; overflow-y: auto; margin-bottom: 20px;">加载中...</div><div id="messagePage" style="text-align: center;"></div></div>',
area: ['80%', '70%'], area: ['80%', '70%'],
success: function(layero, index) { success: function(layero, index) {
// 获取消息列表 var currentPage = 1;
var pageSize = 15; // 每页显示15条消息
var total = 0;
// 加载消息列表函数
function loadMessages(page) {
$.ajax({ $.ajax({
url: ns.url("aikefu://shop/kefu/getMessageList"), url: ns.url("aikefu://shop/kefu/getMessageList"),
type: 'POST', type: 'POST',
data: { data: {
conversation_id: data.conversation_id, conversation_id: data.conversation_id,
page: 1, page: page,
limit: 100, // 加载最多100条消息 limit: pageSize,
sort_field: 'create_time', sort_field: 'create_time',
sort_order: 'desc' // 默认最新消息在前面 sort_order: 'desc' // 默认最新消息在前面
}, },
dataType: 'json', dataType: 'json',
success: function(res) { success: function(res) {
var messageList = res.data?.messages || []; var messageList = res.data?.messages || [];
total = res.data?.total || 0;
var html = ''; var html = '';
if (messageList.length > 0) { if (messageList.length > 0) {
@@ -362,14 +366,38 @@
} }
layero.find('.message-list').html(html); layero.find('.message-list').html(html);
// 默认滚动到底部(最新消息 // 滚动到顶部显示当前页消息
layero.find('.message-list').scrollTop(layero.find('.message-list')[0].scrollHeight); layero.find('.message-list').scrollTop(0);
// 渲染分页控件
initPagination(total, page);
}, },
error: function() { error: function() {
layero.find('.message-list').html('<div class="empty-state">加载消息失败</div>'); layero.find('.message-list').html('<div class="empty-state">加载消息失败</div>');
} }
}); });
} }
// 初始化分页控件
function initPagination(total, curr) {
layui.laypage.render({
elem: layero.find('#messagePage')[0],
count: total,
limit: pageSize,
curr: curr,
layout: ['prev', 'page', 'next', 'count', 'skip'],
jump: function(obj, first) {
if (!first) {
currentPage = obj.curr;
loadMessages(currentPage);
}
}
});
}
// 初始加载第一页消息
loadMessages(currentPage);
}
}); });
} else if (layEvent === 'end') { } else if (layEvent === 'end') {
// 结束会话 // 结束会话