2025-04-02 14:29:44 +08:00

166 lines
8.1 KiB
HTML

<div class="mb-6">
<div class="flex items-center">
<a href="/admin/robots/{{.Robot.ID}}/contacts/{{.Contact.ID}}" class="text-indigo-600 hover:text-indigo-800 mr-4">
<i class="fas fa-arrow-left"></i>
</a>
<h1 class="text-2xl font-bold text-gray-800">{{.Contact.Nickname}} 的聊天记录</h1>
</div>
</div>
<div class="mb-6 bg-white rounded-lg shadow-md p-6">
<div class="flex items-center">
{{if .Contact.Avatar}}
<img src="{{.Contact.Avatar}}" alt="{{.Contact.Nickname}}" class="w-16 h-16 rounded-full mr-4">
{{else}}
<div class="w-16 h-16 rounded-full bg-gray-200 flex items-center justify-center text-gray-500 mr-4">
{{if eq .Contact.Type "group"}}
<i class="fas fa-users text-3xl"></i>
{{else}}
<i class="fas fa-user text-3xl"></i>
{{end}}
</div>
{{end}}
<div>
<h2 class="text-xl font-medium">{{.Contact.Nickname}}</h2>
<p class="text-gray-500">{{.Contact.WechatID}}</p>
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium {{if eq .Contact.Type "group"}}bg-blue-100 text-blue-800{{else}}bg-green-100 text-green-800{{end}}">
{{if eq .Contact.Type "group"}}群聊{{else}}好友{{end}}
</span>
</div>
<div class="ml-auto">
<button onclick="App.openModal('send-message-modal'); setMessageRecipient('{{.Contact.ID}}', '{{.Contact.Nickname}}', '{{.Contact.Type}}', '{{.Contact.Avatar}}');"
class="btn btn-primary">
<i class="fas fa-paper-plane mr-2"></i> 发送消息
</button>
</div>
</div>
</div>
<!-- 消息列表 -->
<div class="bg-white rounded-lg shadow-md p-6">
<!-- 分页控制 -->
<div class="flex justify-between items-center mb-6">
<span class="text-gray-600">共 {{.TotalPages}} 页</span>
<div class="flex space-x-2">
{{if .HasPrev}}
<a href="/admin/robots/{{.Robot.ID}}/contacts/{{.Contact.ID}}/messages?page={{.PrevPage}}" class="px-3 py-1 bg-gray-200 hover:bg-gray-300 rounded">
<i class="fas fa-chevron-left mr-1"></i> 上一页
</a>
{{else}}
<span class="px-3 py-1 bg-gray-100 text-gray-400 rounded cursor-not-allowed">
<i class="fas fa-chevron-left mr-1"></i> 上一页
</span>
{{end}}
<span class="px-3 py-1 bg-indigo-600 text-white rounded">{{.Page}}</span>
{{if .HasNext}}
<a href="/admin/robots/{{.Robot.ID}}/contacts/{{.Contact.ID}}/messages?page={{.NextPage}}" class="px-3 py-1 bg-gray-200 hover:bg-gray-300 rounded">
下一页 <i class="fas fa-chevron-right ml-1"></i>
</a>
{{else}}
<span class="px-3 py-1 bg-gray-100 text-gray-400 rounded cursor-not-allowed">
下一页 <i class="fas fa-chevron-right ml-1"></i>
</span>
{{end}}
</div>
</div>
<!-- 消息列表 -->
<div class="space-y-6">
{{if .Messages}}
{{range .Messages}}
<div class="flex {{if .IsFromMe}}justify-end{{else}}justify-start{{end}}">
<div class="max-w-[70%] {{if .IsFromMe}}bg-indigo-100 rounded-tl-lg rounded-tr-lg rounded-bl-lg{{else}}bg-gray-100 rounded-tl-lg rounded-tr-lg rounded-br-lg{{end}} p-4">
{{if not .IsFromMe}}
<div class="flex items-center mb-2">
<span class="text-xs text-gray-500 font-medium">{{.SenderName}}</span>
</div>
{{end}}
{{if eq .ContentType "text"}}
<p class="text-gray-800 whitespace-pre-wrap">{{.Content}}</p>
{{else if eq .ContentType "image"}}
<div class="mb-2">
<img src="{{.MediaURL}}" alt="图片消息" class="max-w-full rounded-md">
</div>
<p class="text-xs text-gray-500">图片消息</p>
{{else if eq .ContentType "file"}}
<div class="flex items-center">
<i class="fas fa-file text-gray-400 text-2xl mr-3"></i>
<div>
<p class="text-gray-800">{{.Content}}</p>
<p class="text-xs text-gray-500">文件消息</p>
</div>
</div>
{{else if eq .ContentType "video"}}
<div class="flex items-center">
<i class="fas fa-video text-gray-400 text-2xl mr-3"></i>
<div>
<p class="text-gray-800">视频消息</p>
</div>
</div>
{{else if eq .ContentType "voice"}}
<div class="flex items-center">
<i class="fas fa-microphone text-gray-400 text-2xl mr-3"></i>
<div>
<p class="text-gray-800">语音消息</p>
</div>
</div>
{{else}}
<p class="text-gray-800">{{.Content}}</p>
{{end}}
<div class="flex justify-end mt-2">
<span class="text-xs text-gray-400">{{.SendTime.Format "2006-01-02 15:04:05"}}</span>
</div>
</div>
</div>
{{end}}
{{else}}
<div class="text-center py-12">
<i class="fas fa-comment-slash text-5xl text-gray-300 mb-4"></i>
<p class="text-gray-500">没有聊天记录</p>
</div>
{{end}}
</div>
<!-- 底部分页控制 -->
<div class="flex justify-center mt-8">
<div class="inline-flex rounded-md shadow-sm">
{{if gt .TotalPages 1}}
{{if gt .Page 2}}
<a href="/admin/robots/{{.Robot.ID}}/contacts/{{.Contact.ID}}/messages?page=1" class="px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 rounded-l-md">
1
</a>
{{end}}
{{if .HasPrev}}
<a href="/admin/robots/{{.Robot.ID}}/contacts/{{.Contact.ID}}/messages?page={{.PrevPage}}" class="px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 {{if not (gt .Page 2)}}rounded-l-md{{end}}">
{{.PrevPage}}
</a>
{{end}}
<span class="px-4 py-2 border border-gray-300 bg-indigo-600 text-sm font-medium text-white">
{{.Page}}
</span>
{{if .HasNext}}
<a href="/admin/robots/{{.Robot.ID}}/contacts/{{.Contact.ID}}/messages?page={{.NextPage}}" class="px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 {{if not (lt .Page .TotalPages)}}rounded-r-md{{end}}">
{{.NextPage}}
</a>
{{end}}
{{if lt .Page (sub .TotalPages 1)}}
<a href="/admin/robots/{{.Robot.ID}}/contacts/{{.Contact.ID}}/messages?page={{.TotalPages}}" class="px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50 rounded-r-md">
{{.TotalPages}}
</a>
{{end}}
{{end}}
</div>
</div>
</div>
<!-- 引入发送消息对话框组件 -->
{{ embed "robot/send_message" .}}