test(addon/aikefu): 测试会话管理及消息展示是否有分页功能
This commit is contained in:
@@ -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') {
|
||||||
|
|||||||
Reference in New Issue
Block a user