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,60 +313,90 @@
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;
$.ajax({ var pageSize = 15; // 每页显示15条消息
url: ns.url("aikefu://shop/kefu/getMessageList"), var total = 0;
type: 'POST',
data: { // 加载消息列表函数
conversation_id: data.conversation_id, function loadMessages(page) {
page: 1, $.ajax({
limit: 100, // 加载最多100条消息 url: ns.url("aikefu://shop/kefu/getMessageList"),
sort_field: 'create_time', type: 'POST',
sort_order: 'desc' // 默认最新消息在前面 data: {
}, conversation_id: data.conversation_id,
dataType: 'json', page: page,
success: function(res) { limit: pageSize,
var messageList = res.data?.messages || []; sort_field: 'create_time',
var html = ''; sort_order: 'desc' // 默认最新消息在前面
},
if (messageList.length > 0) { dataType: 'json',
messageList.forEach(function(item) { success: function(res) {
var role = item.role === 'user' ? (item.user_id ? '用户-' + item.user_id : '用户') : '机器人'; var messageList = res.data?.messages || [];
var roleClass = item.role === 'user' ? 'user' : 'assistant'; total = res.data?.total || 0;
var avatar = item.role === 'user' ? '/addon/aikefu/static/images/user.svg' : '/addon/aikefu/static/images/robot.svg'; var html = '';
html += '<div class="message-item ' + roleClass + '">'; if (messageList.length > 0) {
if (item.role === 'assistant') { messageList.forEach(function(item) {
html += '<img src="' + avatar + '" class="message-avatar">'; var role = item.role === 'user' ? (item.user_id ? '用户-' + item.user_id : '用户') : '机器人';
} var roleClass = item.role === 'user' ? 'user' : 'assistant';
html += '<div>'; var avatar = item.role === 'user' ? '/addon/aikefu/static/images/user.svg' : '/addon/aikefu/static/images/robot.svg';
html += '<div class="message-role">' + role + '</div>';
html += '<div class="message-content">' + item.content + '</div>'; html += '<div class="message-item ' + roleClass + '">';
html += '<div class="message-time">' + item.create_time + '</div>'; if (item.role === 'assistant') {
html += '<img src="' + avatar + '" class="message-avatar">';
}
html += '<div>';
html += '<div class="message-role">' + role + '</div>';
html += '<div class="message-content">' + item.content + '</div>';
html += '<div class="message-time">' + item.create_time + '</div>';
html += '</div>';
if (item.role === 'user') {
html += '<img src="' + avatar + '" class="message-avatar">';
}
html += '</div>';
});
} else {
html += '<div class="empty-state">';
html += '<i class="layui-icon layui-icon-message"></i>';
html += '<p>暂无消息记录</p>';
html += '</div>'; html += '</div>';
if (item.role === 'user') { }
html += '<img src="' + avatar + '" class="message-avatar">';
} layero.find('.message-list').html(html);
html += '</div>'; // 滚动到顶部显示当前页消息
}); layero.find('.message-list').scrollTop(0);
} else {
html += '<div class="empty-state">'; // 渲染分页控件
html += '<i class="layui-icon layui-icon-message"></i>'; initPagination(total, page);
html += '<p>暂无消息记录</p>'; },
html += '</div>'; error: function() {
layero.find('.message-list').html('<div class="empty-state">加载消息失败</div>');
} }
});
layero.find('.message-list').html(html); }
// 默认滚动到底部(最新消息)
layero.find('.message-list').scrollTop(layero.find('.message-list')[0].scrollHeight); // 初始化分页控件
}, function initPagination(total, curr) {
error: function() { layui.laypage.render({
layero.find('.message-list').html('<div class="empty-state">加载消息失败</div>'); 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') {