PyWxDump/test.html
2025-05-01 18:14:28 +08:00

864 lines
26 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>恋爱报告报告 - 2025-04-29 至 2025-04-30</title>
<style>
/* 严格定义的CSS样式确保风格一致性 */
:root {
--bg-primary: #0f0e17;
--bg-secondary: #1a1925;
--bg-tertiary: #252336;
--text-primary: #fffffe;
--text-secondary: #a7a9be;
--accent-primary: #ff8906;
--accent-secondary: #f25f4c;
--accent-tertiary: #e53170;
--accent-blue: #3da9fc;
--accent-purple: #7209b7;
--accent-cyan: #00b4d8;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'SF Pro Display', 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', sans-serif;
background-color: var(--bg-primary);
color: var(--text-primary);
line-height: 1.6;
font-size: 16px;
width: 1200px;
margin: 0 auto;
padding: 20px;
}
header {
text-align: center;
padding: 30px 0;
background-color: var(--bg-secondary);
margin-bottom: 30px;
}
h1 {
font-size: 36px;
font-weight: 700;
color: var(--accent-primary);
margin-bottom: 10px;
}
.date {
font-size: 18px;
color: var(--text-secondary);
margin-bottom: 20px;
}
.meta-info {
display: flex;
justify-content: center;
gap: 20px;
}
.meta-info span {
background-color: var(--bg-tertiary);
padding: 5px 15px;
border-radius: 20px;
font-size: 14px;
}
section {
background-color: var(--bg-secondary);
margin-bottom: 30px;
padding: 25px;
}
h2 {
font-size: 28px;
font-weight: 600;
color: var(--accent-blue);
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 2px solid var(--accent-blue);
}
h3 {
font-size: 22px;
font-weight: 600;
color: var(--accent-primary);
margin: 15px 0 10px 0;
}
h4 {
font-size: 18px;
font-weight: 600;
color: var(--accent-secondary);
margin: 12px 0 8px 0;
}
p {
margin-bottom: 15px;
}
ul, ol {
margin-left: 20px;
margin-bottom: 15px;
}
li {
margin-bottom: 5px;
}
a {
color: var(--accent-blue);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
/* 卡片容器样式 */
.topics-container, .tutorials-container, .messages-container,
.dialogues-container, .qa-container, .participants-container {
display: grid;
grid-template-columns: 1fr;
gap: 20px;
}
/* 卡片样式 */
.topic-card, .tutorial-card, .message-card,
.dialogue-card, .qa-card, .participant-item, .night-owl-item {
background-color: var(--bg-tertiary);
padding: 20px;
}
/* 话题卡片 */
.topic-category {
display: inline-block;
background-color: var(--accent-blue);
color: var(--text-primary);
padding: 3px 10px;
border-radius: 15px;
font-size: 14px;
margin-bottom: 10px;
}
.topic-keywords {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin: 10px 0;
}
.keyword {
background-color: rgba(61, 169, 252, 0.2);
padding: 3px 10px;
border-radius: 12px;
font-size: 14px;
}
.topic-mentions {
color: var(--accent-cyan);
font-weight: 600;
}
/* 教程卡片 */
.tutorial-type {
display: inline-block;
background-color: var(--accent-secondary);
color: var(--text-primary);
padding: 3px 10px;
border-radius: 15px;
font-size: 14px;
margin-bottom: 10px;
}
.tutorial-meta {
color: var(--text-secondary);
margin-bottom: 10px;
font-size: 14px;
}
.tutorial-category {
margin-top: 10px;
font-style: italic;
color: var(--text-secondary);
}
/* 消息卡片 */
.message-meta {
margin-bottom: 10px;
}
.message-meta span {
margin-right: 15px;
font-size: 14px;
}
.message-type {
background-color: var(--accent-tertiary);
color: var(--text-primary);
padding: 3px 10px;
border-radius: 15px;
}
.priority {
padding: 3px 10px;
border-radius: 15px;
}
.priority-high {
background-color: var(--accent-secondary);
}
.priority-medium {
background-color: var(--accent-primary);
}
.priority-low {
background-color: var(--accent-blue);
}
/* 对话卡片 */
.dialogue-type {
display: inline-block;
background-color: var(--accent-purple);
color: var(--text-primary);
padding: 3px 10px;
border-radius: 15px;
font-size: 14px;
margin-bottom: 10px;
}
.dialogue-content {
background-color: rgba(255, 255, 255, 0.05);
padding: 15px;
margin-bottom: 15px;
}
.dialogue-highlight {
font-style: italic;
color: var(--accent-primary);
margin: 10px 0;
font-weight: 600;
}
/* 问答卡片 */
.question {
margin-bottom: 15px;
}
.question-meta, .answer-meta {
color: var(--text-secondary);
margin-bottom: 5px;
font-size: 14px;
}
.question-tags {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 10px;
}
.tag {
background-color: rgba(114, 9, 183, 0.2);
padding: 3px 10px;
border-radius: 12px;
font-size: 14px;
}
.answer {
background-color: rgba(255, 255, 255, 0.05);
padding: 15px;
margin-top: 10px;
}
.accepted-badge {
background-color: var(--accent-primary);
color: var(--text-primary);
padding: 3px 10px;
border-radius: 15px;
font-size: 14px;
}
/* 热度图 */
.heatmap-container {
display: grid;
grid-template-columns: 1fr;
gap: 15px;
}
.heat-topic {
font-weight: 600;
margin-bottom: 5px;
}
.heat-bar {
height: 20px;
background-color: rgba(255, 255, 255, 0.1);
margin: 5px 0;
border-radius: 10px;
overflow: hidden;
}
.heat-fill {
height: 100%;
border-radius: 10px;
}
/* 话唠榜 */
.participant-rank {
font-size: 28px;
font-weight: 700;
color: var(--accent-primary);
margin-right: 15px;
float: left;
}
.participant-name {
font-weight: 600;
font-size: 18px;
margin-bottom: 5px;
}
.participant-count {
color: var(--accent-cyan);
margin-bottom: 10px;
}
.participant-characteristics, .participant-words {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 10px;
}
.characteristic {
background-color: rgba(242, 95, 76, 0.2);
padding: 3px 10px;
border-radius: 12px;
font-size: 14px;
}
.word {
background-color: rgba(229, 49, 112, 0.2);
padding: 3px 10px;
border-radius: 12px;
font-size: 14px;
}
/* 熬夜冠军 */
.night-owl-item {
background: linear-gradient(135deg, #0f0e17 0%, #192064 100%);
padding: 20px;
display: flex;
align-items: center;
}
.owl-crown {
font-size: 40px;
margin-right: 20px;
}
.owl-name {
font-weight: 600;
font-size: 18px;
margin-bottom: 5px;
}
.owl-title {
color: var(--accent-primary);
font-style: italic;
margin-bottom: 10px;
}
.owl-time, .owl-messages {
color: var(--text-secondary);
margin-bottom: 5px;
}
.owl-note {
font-size: 14px;
color: var(--text-secondary);
margin-top: 10px;
font-style: italic;
}
/* 词云 - 云朵样式 */
.cloud-container {
position: relative;
margin: 0 auto;
padding: 20px 0;
}
.cloud-wordcloud {
position: relative;
width: 600px;
height: 400px;
margin: 0 auto;
background-color: var(--bg-tertiary);
border-radius: 50%;
box-shadow:
40px 40px 0 -5px var(--bg-tertiary),
80px 10px 0 -10px var(--bg-tertiary),
110px 35px 0 -5px var(--bg-tertiary),
-40px 50px 0 -8px var(--bg-tertiary),
-70px 20px 0 -10px var(--bg-tertiary);
overflow: visible;
}
.cloud-word {
position: absolute;
transform-origin: center;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
transition: all 0.3s ease;
}
.cloud-word:hover {
transform: scale(1.1);
z-index: 10;
}
.cloud-legend {
margin-top: 60px;
display: flex;
justify-content: center;
gap: 30px;
}
.legend-item {
display: flex;
align-items: center;
gap: 10px;
}
.legend-color {
width: 20px;
height: 20px;
border-radius: 50%;
}
/* 底部 */
footer {
text-align: center;
padding: 20px 0;
margin-top: 50px;
background-color: var(--bg-secondary);
color: var(--text-secondary);
font-size: 14px;
}
footer p {
margin: 5px 0;
}
.disclaimer {
margin-top: 15px;
font-style: italic;
}
/* 新增头像相关样式 */
.user-avatar {
width: 50px;
height: 50px;
border-radius: 50%;
object-fit: cover;
transition: transform 0.3s ease;
position: relative;
cursor: pointer;
border: 2px solid var(--accent-primary);
}
/* 头像悬停效果 */
.user-avatar:hover {
transform: scale(1.1) rotate(5deg);
z-index: 100;
}
/* 头像tooltip */
.avatar-tooltip {
visibility: hidden;
background-color: var(--bg-tertiary);
color: var(--text-primary);
text-align: center;
padding: 5px 10px;
border-radius: 6px;
position: absolute;
z-index: 1000;
bottom: 125%;
left: 50%;
transform: translateX(-50%);
white-space: nowrap;
opacity: 0;
transition: opacity 0.3s;
font-size: 14px;
box-shadow: 0 3px 10px rgba(0,0,0,0.2);
}
.user-avatar:hover .avatar-tooltip {
visibility: visible;
opacity: 1;
}
/* 热度用户专区 */
.hot-users {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(80px, 1fr));
gap: 20px;
margin-top: 20px;
}
.hot-user-item {
position: relative;
text-align: center;
}
/* 皇冠标识 */
.hot-crown {
position: absolute;
top: -10px;
right: -5px;
font-size: 24px;
color: #ffd700;
filter: drop-shadow(0 2px 2px rgba(0,0,0,0.3));
}
</style>
</head>
<body>
<header>
<h1>恋爱报告报告</h1>
<p class="date">2025-04-29 至 2025-04-30</p>
<div class="meta-info">
<span>总消息数500+</span>
<span>活跃用户2</span>
<span>时间范围00:05:04 至 22:20:26</span>
</div>
</header>
<!-- 1. 今日讨论热点 -->
<section class="hot-topics">
<h2>今日讨论热点</h2>
<div class="topics-container">
<!-- 在这里填充讨论热点内容严格按照以下格式保留3-5个话题 -->
<div class="topic-card">
<h3>恋爱沟通</h3>
<div class="topic-category">情感交流</div>
<p class="topic-summary">双方围绕情感需求、沟通方式和相互理解展开多次对话,涉及'控制欲''陪伴需求''表达方式'等核心矛盾点。典型对话如'你就不能说话吗'-'不困了,跟我聊聊天',体现双方对沟通频率的认知差异。</p>
<div class="topic-keywords">
<span class="keyword">控制</span><span class="keyword">陪伴</span><span class="keyword">理解</span>
</div>
<div class="topic-mentions">提及次数30+</div>
</div>
<div class="topic-card">
<h3>项目合作</h3>
<div class="topic-category">学业协作</div>
<p class="topic-summary">4月29日上午集中讨论服务设计项目开发事宜涉及原型设计、比赛规划、老师对接等具体内容。昏沉沉的提出开发支持意愿要哄宝宝开心则负责团队协调双方就'高保真原型''互联网+大赛'等专业概念进行多次确认。</p>
<div class="topic-keywords">
<span class="keyword">原型</span><span class="keyword">开发</span><span class="keyword">比赛</span>
</div>
<div class="topic-mentions">提及次数50+</div>
</div>
<!-- 复制上述卡片结构添加更多话题 -->
</div>
</section>
<!-- 2. 实用教程与资源分享 -->
<section class="tutorials">
<h2>实用教程与资源分享</h2>
<div class="tutorials-container">
<!-- 在这里填充教程和资源内容,严格按照以下格式 -->
<div class="tutorial-card">
<div class="tutorial-type">RESOURCE</div>
<h3>产品设计开发流程</h3>
<div class="tutorial-meta">
<span class="shared-by">分享者:昏沉沉的</span>
<span class="share-time">时间2025-04-29 09:42:26</span>
</div>
<p class="tutorial-summary">讨论软件产品开发各阶段要点,强调从调研到高保真原型的设计闭环</p>
<div class="key-points">
<h4>要点:</h4>
<ul><li>功能闭环</li><li>UI完善</li><li>比赛适配</li></ul>
</div>
<div class="tutorial-link">
<a href="" class="link valid">查看原文: 微信聊天</a>
</div>
<div class="tutorial-category">分类:产品设计</div>
</div>
<!-- 复制上述卡片结构添加更多资源 -->
</div>
</section>
<!-- 3. 重要消息汇总 -->
<section class="important-messages">
<h2>重要消息汇总</h2>
<div class="messages-container">
<!-- 在这里填充重要消息内容,严格按照以下格式 -->
<div class="message-card">
<div class="message-meta">
<span class="time">2025-04-29 00:29:04</span>
<span class="sender">要哄宝宝开心,宝宝开心我就开心</span>
<span class="message-type">OTHER</span>
<span class="priority priority-高">优先级:高</span>
</div>
<p class="message-content">只要你做的不论是我,还是外人看来是爱我的</p>
<div class="message-full-content">
<p>完整情感需求表达</p>
</div>
</div>
<div class="message-card">
<div class="message-meta">
<span class="time">2025-04-29 10:15:17</span>
<span class="sender">昏沉沉的</span>
<span class="message-type">EVENT</span>
<span class="priority priority-中">优先级:中</span>
</div>
<p class="message-content">你说你男朋友做开发的 做出来原型的话可以让你男朋友看一下 可以开发</p>
<div class="message-full-content">
<p>项目合作具体提案</p>
</div>
</div>
<!-- 复制上述卡片结构添加更多消息 -->
</div>
</section>
<!-- 4. 有趣对话或金句 -->
<section class="interesting-dialogues">
<h2>有趣对话或金句</h2>
<div class="dialogues-container">
<!-- 在这里填充对话内容,严格按照以下格式 -->
<div class="dialogue-card">
<div class="dialogue-type">DIALOGUE</div>
<div class="dialogue-content">
<div class="message">
<div class="message-meta">
<span class="speaker">要哄宝宝开心,宝宝开心我就开心</span>
<span class="time">2025-04-29 00:07:44</span>
</div>
<p class="message-content">不困了,跟我聊聊天</p>
</div>
<div class="message">
<div class="message-meta">
<span class="speaker">昏沉沉的</span>
<span class="time">2025-04-29 00:07:42</span>
</div>
<p class="message-content">不能跟你说话吗</p>
</div>
</div>
<div class="dialogue-highlight">沟通需求 vs 陪伴需求</div>
<div class="dialogue-topic">相关话题:情感表达差异</div>
</div>
<!-- 复制上述卡片结构添加更多对话 -->
</div>
</section>
<!-- 5. 问题与解答 -->
<section class="questions-answers">
<h2>问题与解答</h2>
<div class="qa-container">
<!-- 在这里填充问答内容,严格按照以下格式 -->
<div class="qa-card">
<div class="question">
<div class="question-meta">
<span class="asker">要哄宝宝开心,宝宝开心我就开心</span>
<span class="time">2025-04-29 10:33:25</span>
</div>
<p class="question-content">你开发要钱吗</p>
<div class="question-tags">
<span class="tag">项目</span><span class="tag">费用</span>
</div>
</div>
<div class="answers">
<div class="answer">
<div class="answer-meta">
<span class="responder">昏沉沉的</span>
<span class="time">2025-04-29 10:45:18</span>
<span class='accepted-badge'>最佳回答</span>
</div>
<p class="answer-content">那不就完了</p>
</div>
</div>
</div>
<!-- 复制上述卡片结构添加更多问答 -->
</div>
</section>
<!-- 6. 群内数据可视化 -->
<section class="analytics">
<h2>群内数据可视化</h2>
<!-- 话题热度 -->
<h3>话题热度</h3>
<div class="heatmap-container">
<!-- 在这里填充话题热度数据,严格按照以下格式 -->
<!-- 复制上述结构添加更多热度项,每项使用不同颜色 -->
<div class="heat-item">
<div class="heat-topic">情感交流</div>
<div class="heat-percentage">45%%</div>
<div class="heat-bar">
<div class="heat-fill" style="width: 45%%; background-color: #3da9fc;"></div>
</div>
<div class="heat-count">200+条消息</div>
</div>
<div class="heat-item">
<div class="heat-topic">项目讨论</div>
<div class="heat-percentage">30%%</div>
<div class="heat-bar">
<div class="heat-fill" style="width: 30%%; background-color: #f25f4c;"></div>
</div>
<div class="heat-count">150+条消息</div>
</div>
<!-- 可用的颜色: #3da9fc, #f25f4c, #7209b7, #e53170, #00b4d8, #4cc9f0 -->
</div>
<!-- 话唠榜 -->
<!-- 在话唠榜添加头像 -->
<section class="analytics">
<h3>话唠榜</h3>
<div class="participants-container">
<div class="participant-item">
<div class="participant-rank">1</div>
<div class="participant-info">
<div class="participant-name">要哄宝宝开心,宝宝开心我就开心</div>
<div class="participant-count">发言数300+</div>
<div class="participant-characteristics">
<span class="characteristic">情感表达</span><span class="characteristic">细节追问</span>
</div>
<div class="participant-words">
<span class="word"></span><span class="word">OK</span><span class="word"></span>
</div>
</div>
</div>
</div>
</section>
<!-- 熬夜冠军 -->
<h3>熬夜冠军</h3>
<div class="night-owls-container">
<!-- 在这里填充熬夜冠军数据,严格按照以下格式 -->
<div class="night-owl-item">
<div class="owl-crown" title="熬夜冠军">👑</div>
<div class="owl-info">
<div class="owl-name">昏沉沉的</div>
<div class="owl-title">深夜程序员</div>
<div class="owl-time">最晚活跃时间01:42:38</div>
<div class="owl-messages">深夜消息数50+</div>
<div class="owl-last-message">对不起</div>
<div class="owl-note">熬夜时段定义为23:00-06:00已考虑不同时区</div>
</div>
</div>
</section>
<!-- 7. 词云 -->
<section class="word-cloud">
<h2>热门词云</h2>
<div class="cloud-container">
<!-- 词云容器 - 现在是云朵样式 -->
<div class="cloud-wordcloud" id="word-cloud">
<!-- 为每个词创建一个span元素使用绝对定位放置 -->
<!-- 以下是一些示例请根据实际内容生成40-60个词 -->
<span class="cloud-word" style="left: 300px; top: 120px;
font-size: 38px; color: #00b4d8;
transform: rotate(-15deg);">开发</span>
<span class="cloud-word" style="left: 300px; top: 120px;
font-size: 32px; color: #00b4d8;
transform: rotate(15deg);">睡觉</span>
<!-- 继续添加更多词 -->
</div>
<div class="cloud-legend">
<div class="legend-item">
<span class="legend-color" style="background-color: #00b4d8;"></span>
<span class="legend-label">项目 相关词汇</span>
</div>
<div class="legend-item">
<span class="legend-color" style="background-color: #4361ee;"></span>
<span class="legend-label">情感 相关词汇</span>
</div>
</div>
</div>
</section>
<!-- 8. 页面底部 -->
<footer>
<p>数据来源:恋爱私聊记录聊天记录</p>
<p>生成时间:<span class="generation-time">2025-05-01 10:00:00</span></p>
<p>统计周期2025-04-29 至 2025-04-30 [时间范围]</p>
<p class="disclaimer">免责声明:本报告内容基于群聊公开讨论,如有不当内容或侵权问题请联系管理员处理。</p>
</footer>
</body>
<script>
document.addEventListener('DOMContentLoaded', function() {
// 获取所有词云元素
const cloudWords = document.querySelectorAll('.cloud-word');
const container = document.querySelector('.cloud-wordcloud');
const containerWidth = container.offsetWidth;
const containerHeight = container.offsetHeight;
// 为每个词云元素设置随机位置
cloudWords.forEach(word => {
const wordWidth = word.offsetWidth;
const wordHeight = word.offsetHeight;
// 计算随机位置,确保词云元素不会超出容器边界
const randomLeft = Math.random() * (containerWidth - wordWidth);
const randomTop = Math.random() * (containerHeight - wordHeight);
// 设置位置
word.style.left = `${randomLeft}px`;
word.style.top = `${randomTop}px`;
// 添加悬停效果
word.addEventListener('mouseover', function() {
this.style.transform = 'scale(1.1)';
this.style.zIndex = '10';
});
word.addEventListener('mouseout', function() {
this.style.transform = 'scale(1)';
this.style.zIndex = '1';
});
});
});
</script>
</html>