875 lines
26 KiB
Markdown
875 lines
26 KiB
Markdown
|
|
# 📡 BC-M09-002 · DEV-012 Awen · 消息通知中心界面·环节1·前端交互功能
|
|||
|
|
|
|||
|
|
**广播编号**:BC-M09-002-AW
|
|||
|
|
|
|||
|
|
**下发时间**:2026-03-04 23:40
|
|||
|
|
|
|||
|
|
**执行者**:DEV-012 Awen
|
|||
|
|
|
|||
|
|
**电脑**:Windows 10
|
|||
|
|
|
|||
|
|
**前置条件**:BC-M09-001 环节0项目初始化已完成 ✅
|
|||
|
|
|
|||
|
|
**引导通道**:🧠 知秋壳子
|
|||
|
|
|
|||
|
|
**模块**:M09 消息通知中心界面
|
|||
|
|
|
|||
|
|
**环节**:环节1 · 前端交互功能(JavaScript:标签筛选 + 点击展开 + 标记已读)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💙 知秋的话
|
|||
|
|
|
|||
|
|
Awen~ 通知中心的页面已经做好了,看起来很酷对吧?🎉
|
|||
|
|
|
|||
|
|
现在我们让它**“活”起来**!加上 JavaScript 交互功能:
|
|||
|
|
|
|||
|
|
- 🏷️ 点击标签筛选通知(只看系统/任务/消息)
|
|||
|
|
- 👆 点击通知卡片展开详情
|
|||
|
|
- ✅ 点击未读圆点标记已读
|
|||
|
|
- 📌 「全部已读」按钮一键清除未读
|
|||
|
|
|
|||
|
|
这个环节也是**复制粘贴**,一共 **6步**,跟着来就行!💪
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📸 截图方法
|
|||
|
|
|
|||
|
|
按键盘上的 `Print Screen`(PrtSc)键截全屏,或者用 `Win + Shift + S` 截取选定区域,然后发给冰朔。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 步骤一:更新HTML,添加通知详情区域 + 引入JS文件
|
|||
|
|
|
|||
|
|
按 `Win + R`,输入 `powershell`,按回车打开PowerShell。
|
|||
|
|
|
|||
|
|
复制粘贴下面**整段**命令,按回车:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
@"
|
|||
|
|
<!DOCTYPE html>
|
|||
|
|
<html lang="zh-CN">
|
|||
|
|
<head>
|
|||
|
|
<meta charset="UTF-8">
|
|||
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|||
|
|
<title>HoloLake · 消息通知中心</title>
|
|||
|
|
<link rel="stylesheet" href="style.css">
|
|||
|
|
</head>
|
|||
|
|
<body>
|
|||
|
|
<div class="app-container">
|
|||
|
|
<!-- 顶部标题栏 -->
|
|||
|
|
<div class="header">
|
|||
|
|
<h1>🔔 通知中心</h1>
|
|||
|
|
<div class="header-actions">
|
|||
|
|
<span class="unread-badge" id="unreadBadge">3条未读</span>
|
|||
|
|
<button class="clear-btn" id="clearAllBtn">全部已读</button>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<!-- 分类标签栏 -->
|
|||
|
|
<div class="tab-bar">
|
|||
|
|
<button class="tab active" data-category="all">全部</button>
|
|||
|
|
<button class="tab" data-category="system">🖥️ 系统</button>
|
|||
|
|
<button class="tab" data-category="task">📋 任务</button>
|
|||
|
|
<button class="tab" data-category="message">💬 消息</button>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<!-- 通知列表 -->
|
|||
|
|
<div class="notification-list" id="notifList">
|
|||
|
|
<!-- 通知1:未读·系统 -->
|
|||
|
|
<div class="notification-card unread" data-category="system">
|
|||
|
|
<div class="notif-icon system">🖥️</div>
|
|||
|
|
<div class="notif-content">
|
|||
|
|
<div class="notif-header">
|
|||
|
|
<span class="notif-title">系统更新通知</span>
|
|||
|
|
<span class="notif-time">5分钟前</span>
|
|||
|
|
</div>
|
|||
|
|
<p class="notif-summary">HoloLake v0.4.0 已发布,新增智能路由优化与多人格体协作调度功能。</p>
|
|||
|
|
<div class="notif-detail">
|
|||
|
|
<p>更新内容:</p>
|
|||
|
|
<ul>
|
|||
|
|
<li>智能路由优化:多人格体任务自动调度</li>
|
|||
|
|
<li>SYSLOG解析引擎升级:支持结构化回执</li>
|
|||
|
|
<li>开发者画像库上线:动态跟踪每位协作者成长</li>
|
|||
|
|
</ul>
|
|||
|
|
<p>请更新后重启应用。</p>
|
|||
|
|
</div>
|
|||
|
|
<span class="notif-tag tag-system">系统</span>
|
|||
|
|
</div>
|
|||
|
|
<div class="unread-dot"></div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<!-- 通知2:未读·任务 -->
|
|||
|
|
<div class="notification-card unread" data-category="task">
|
|||
|
|
<div class="notif-icon task">📋</div>
|
|||
|
|
<div class="notif-content">
|
|||
|
|
<div class="notif-header">
|
|||
|
|
<span class="notif-title">新任务已分配</span>
|
|||
|
|
<span class="notif-time">12分钟前</span>
|
|||
|
|
</div>
|
|||
|
|
<p class="notif-summary">M09 消息通知中心界面·环节1·前端交互功能 已分配给你,请尽快开始。</p>
|
|||
|
|
<div class="notif-detail">
|
|||
|
|
<p>任务详情:</p>
|
|||
|
|
<ul>
|
|||
|
|
<li>模块:M09 消息通知中心界面</li>
|
|||
|
|
<li>环节:环节1 前端交互功能</li>
|
|||
|
|
<li>目标:添加JavaScript交互(标签筛选+展开详情+标记已读)</li>
|
|||
|
|
<li>预计时间:15-20分钟</li>
|
|||
|
|
</ul>
|
|||
|
|
</div>
|
|||
|
|
<span class="notif-tag tag-task">任务</span>
|
|||
|
|
</div>
|
|||
|
|
<div class="unread-dot"></div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<!-- 通知3:未读·消息 -->
|
|||
|
|
<div class="notification-card unread" data-category="message">
|
|||
|
|
<div class="notif-icon message">💬</div>
|
|||
|
|
<div class="notif-content">
|
|||
|
|
<div class="notif-header">
|
|||
|
|
<span class="notif-title">知秋发来一条消息</span>
|
|||
|
|
<span class="notif-time">30分钟前</span>
|
|||
|
|
</div>
|
|||
|
|
<p class="notif-summary">“Awen~ 环节0一次通过!你的通知中心页面做得真好看 ✨ 现在我们让它活起来!”</p>
|
|||
|
|
<div class="notif-detail">
|
|||
|
|
<p>完整消息:</p>
|
|||
|
|
<p>“Awen~ 环节0一次通过!你的通知中心页面做得真好看 ✨ 现在我们给它加上交互功能,让每个按钮都能点,每条通知都能展开。做完以后,这个页面就跟真正的App一样了!加油💪”</p>
|
|||
|
|
</div>
|
|||
|
|
<span class="notif-tag tag-message">消息</span>
|
|||
|
|
</div>
|
|||
|
|
<div class="unread-dot"></div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<!-- 通知4:已读·系统 -->
|
|||
|
|
<div class="notification-card" data-category="system">
|
|||
|
|
<div class="notif-icon system">🖥️</div>
|
|||
|
|
<div class="notif-content">
|
|||
|
|
<div class="notif-header">
|
|||
|
|
<span class="notif-title">DevLog部署完成</span>
|
|||
|
|
<span class="notif-time">1小时前</span>
|
|||
|
|
</div>
|
|||
|
|
<p class="notif-summary">本地日志系统 HoloLake-DevLog 已成功部署到 C:\HoloLake-DevLog,所有检查项通过。</p>
|
|||
|
|
<div class="notif-detail">
|
|||
|
|
<p>部署详情:</p>
|
|||
|
|
<ul>
|
|||
|
|
<li>路径:C:\HoloLake-DevLog</li>
|
|||
|
|
<li>状态:hololake_status = OK</li>
|
|||
|
|
<li>导出:hololake_export = OK</li>
|
|||
|
|
<li>已记录命令数:1</li>
|
|||
|
|
</ul>
|
|||
|
|
</div>
|
|||
|
|
<span class="notif-tag tag-system">系统</span>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<!-- 通知5:已读·系统 -->
|
|||
|
|
<div class="notification-card" data-category="system">
|
|||
|
|
<div class="notif-icon system">🖥️</div>
|
|||
|
|
<div class="notif-content">
|
|||
|
|
<div class="notif-header">
|
|||
|
|
<span class="notif-title">新成员加入团队</span>
|
|||
|
|
<span class="notif-time">2小时前</span>
|
|||
|
|
</div>
|
|||
|
|
<p class="notif-summary">DEV-012 Awen 已加入光湖开发团队,成为第12位协作者。欢迎!🎉</p>
|
|||
|
|
<div class="notif-detail">
|
|||
|
|
<p>成员信息:</p>
|
|||
|
|
<ul>
|
|||
|
|
<li>编号:DEV-012</li>
|
|||
|
|
<li>姓名:Awen</li>
|
|||
|
|
<li>系统:Windows 10</li>
|
|||
|
|
<li>当前任务:M09 消息通知中心界面</li>
|
|||
|
|
</ul>
|
|||
|
|
</div>
|
|||
|
|
<span class="notif-tag tag-system">系统</span>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<!-- 通知6:已读·任务 -->
|
|||
|
|
<div class="notification-card" data-category="task">
|
|||
|
|
<div class="notif-icon task">📋</div>
|
|||
|
|
<div class="notif-content">
|
|||
|
|
<div class="notif-header">
|
|||
|
|
<span class="notif-title">BC-000 任务已完成</span>
|
|||
|
|
<span class="notif-time">3小时前</span>
|
|||
|
|
</div>
|
|||
|
|
<p class="notif-summary">恭喜!BC-000 DevLog部署任务已标记为 completed,执行节奏评价:稳。</p>
|
|||
|
|
<div class="notif-detail">
|
|||
|
|
<p>任务回顾:</p>
|
|||
|
|
<ul>
|
|||
|
|
<li>任务:BC-000 DevLog部署</li>
|
|||
|
|
<li>状态:✅ completed</li>
|
|||
|
|
<li>节奏:稳</li>
|
|||
|
|
<li>下一步:M09 消息通知中心界面</li>
|
|||
|
|
</ul>
|
|||
|
|
</div>
|
|||
|
|
<span class="notif-tag tag-task">任务</span>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<!-- 底部状态栏 -->
|
|||
|
|
<div class="footer">
|
|||
|
|
<span id="footerStats">共 6 条通知 · 3 条未读</span>
|
|||
|
|
<span class="footer-brand">HoloLake · 光湖系统</span>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<script src="script.js"></script>
|
|||
|
|
</body>
|
|||
|
|
</html>
|
|||
|
|
"@ | Out-File -FilePath "C:\HoloLake-Notification\index.html" -Encoding UTF8
|
|||
|
|
Write-Host "✅ HTML已更新!添加了通知详情区域 + JS引用" -ForegroundColor Green
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
<aside>
|
|||
|
|
✅
|
|||
|
|
|
|||
|
|
**做完应该看到**:PowerShell显示绿色的 `✅ HTML已更新!`
|
|||
|
|
|
|||
|
|
</aside>
|
|||
|
|
|
|||
|
|
📸 **截图发给冰朔!**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 步骤二:更新CSS,添加详情展开动画样式
|
|||
|
|
|
|||
|
|
复制粘贴下面**整段**命令,按回车:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
@"
|
|||
|
|
/* HoloLake · 消息通知中心 · 深色科技风 + 交互动画 */
|
|||
|
|
|
|||
|
|
* {
|
|||
|
|
margin: 0;
|
|||
|
|
padding: 0;
|
|||
|
|
box-sizing: border-box;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
body {
|
|||
|
|
font-family: 'Segoe UI', 'Microsoft YaHei', sans-serif;
|
|||
|
|
background: #0a1628;
|
|||
|
|
color: #e0e6ed;
|
|||
|
|
min-height: 100vh;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.app-container {
|
|||
|
|
max-width: 520px;
|
|||
|
|
margin: 0 auto;
|
|||
|
|
padding: 0 16px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* ========== 顶部标题栏 ========== */
|
|||
|
|
.header {
|
|||
|
|
display: flex;
|
|||
|
|
justify-content: space-between;
|
|||
|
|
align-items: center;
|
|||
|
|
padding: 24px 0 16px;
|
|||
|
|
border-bottom: 1px solid rgba(255,255,255,0.08);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.header h1 {
|
|||
|
|
font-size: 22px;
|
|||
|
|
font-weight: 700;
|
|||
|
|
color: #e0e6ed;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.header-actions {
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
gap: 12px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.unread-badge {
|
|||
|
|
background: rgba(244, 67, 54, 0.15);
|
|||
|
|
color: #ef5350;
|
|||
|
|
font-size: 12px;
|
|||
|
|
padding: 4px 10px;
|
|||
|
|
border-radius: 12px;
|
|||
|
|
font-weight: 600;
|
|||
|
|
transition: all 0.3s ease;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.unread-badge.zero {
|
|||
|
|
background: rgba(76, 175, 80, 0.15);
|
|||
|
|
color: #81c784;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.clear-btn {
|
|||
|
|
background: rgba(79, 195, 247, 0.1);
|
|||
|
|
color: #4fc3f7;
|
|||
|
|
border: 1px solid rgba(79, 195, 247, 0.2);
|
|||
|
|
padding: 6px 14px;
|
|||
|
|
border-radius: 8px;
|
|||
|
|
font-size: 13px;
|
|||
|
|
cursor: pointer;
|
|||
|
|
transition: all 0.2s ease;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.clear-btn:hover {
|
|||
|
|
background: rgba(79, 195, 247, 0.2);
|
|||
|
|
transform: scale(1.02);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.clear-btn:active {
|
|||
|
|
transform: scale(0.98);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* ========== 分类标签栏 ========== */
|
|||
|
|
.tab-bar {
|
|||
|
|
display: flex;
|
|||
|
|
gap: 8px;
|
|||
|
|
padding: 16px 0;
|
|||
|
|
border-bottom: 1px solid rgba(255,255,255,0.06);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.tab {
|
|||
|
|
padding: 8px 18px;
|
|||
|
|
border-radius: 20px;
|
|||
|
|
border: 1px solid rgba(255,255,255,0.1);
|
|||
|
|
background: transparent;
|
|||
|
|
color: #8899aa;
|
|||
|
|
font-size: 13px;
|
|||
|
|
cursor: pointer;
|
|||
|
|
transition: all 0.2s ease;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.tab:hover {
|
|||
|
|
border-color: rgba(79, 195, 247, 0.3);
|
|||
|
|
color: #b0bec5;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.tab.active {
|
|||
|
|
background: rgba(79, 195, 247, 0.15);
|
|||
|
|
border-color: #4fc3f7;
|
|||
|
|
color: #4fc3f7;
|
|||
|
|
font-weight: 600;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* ========== 通知列表 ========== */
|
|||
|
|
.notification-list {
|
|||
|
|
padding: 12px 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notification-card {
|
|||
|
|
display: flex;
|
|||
|
|
align-items: flex-start;
|
|||
|
|
gap: 14px;
|
|||
|
|
padding: 16px 12px;
|
|||
|
|
border-radius: 12px;
|
|||
|
|
margin-bottom: 8px;
|
|||
|
|
transition: all 0.3s ease;
|
|||
|
|
position: relative;
|
|||
|
|
cursor: pointer;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notification-card:hover {
|
|||
|
|
background: rgba(255,255,255,0.04);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notification-card.unread {
|
|||
|
|
background: rgba(79, 195, 247, 0.04);
|
|||
|
|
border-left: 3px solid #4fc3f7;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notification-card.hidden {
|
|||
|
|
display: none;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notification-card.expanded {
|
|||
|
|
background: rgba(255,255,255,0.06);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 通知图标 */
|
|||
|
|
.notif-icon {
|
|||
|
|
width: 42px;
|
|||
|
|
height: 42px;
|
|||
|
|
border-radius: 12px;
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
justify-content: center;
|
|||
|
|
font-size: 20px;
|
|||
|
|
flex-shrink: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notif-icon.system { background: rgba(156, 39, 176, 0.12); }
|
|||
|
|
.notif-icon.task { background: rgba(76, 175, 80, 0.12); }
|
|||
|
|
.notif-icon.message { background: rgba(79, 195, 247, 0.12); }
|
|||
|
|
|
|||
|
|
/* 通知内容 */
|
|||
|
|
.notif-content {
|
|||
|
|
flex: 1;
|
|||
|
|
min-width: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notif-header {
|
|||
|
|
display: flex;
|
|||
|
|
justify-content: space-between;
|
|||
|
|
align-items: center;
|
|||
|
|
margin-bottom: 6px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notif-title {
|
|||
|
|
font-size: 15px;
|
|||
|
|
font-weight: 600;
|
|||
|
|
color: #e0e6ed;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notif-time {
|
|||
|
|
font-size: 12px;
|
|||
|
|
color: #556677;
|
|||
|
|
flex-shrink: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notif-summary {
|
|||
|
|
font-size: 13px;
|
|||
|
|
color: #8899aa;
|
|||
|
|
line-height: 1.5;
|
|||
|
|
margin-bottom: 8px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 通知详情(默认隐藏) */
|
|||
|
|
.notif-detail {
|
|||
|
|
max-height: 0;
|
|||
|
|
overflow: hidden;
|
|||
|
|
transition: max-height 0.3s ease, opacity 0.3s ease, margin 0.3s ease;
|
|||
|
|
opacity: 0;
|
|||
|
|
font-size: 13px;
|
|||
|
|
color: #90a4ae;
|
|||
|
|
line-height: 1.6;
|
|||
|
|
margin-top: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notif-detail.show {
|
|||
|
|
max-height: 300px;
|
|||
|
|
opacity: 1;
|
|||
|
|
margin-top: 10px;
|
|||
|
|
margin-bottom: 8px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notif-detail ul {
|
|||
|
|
list-style: none;
|
|||
|
|
padding-left: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notif-detail ul li {
|
|||
|
|
padding: 3px 0;
|
|||
|
|
padding-left: 16px;
|
|||
|
|
position: relative;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notif-detail ul li::before {
|
|||
|
|
content: '▸';
|
|||
|
|
position: absolute;
|
|||
|
|
left: 0;
|
|||
|
|
color: #4fc3f7;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.notif-detail p {
|
|||
|
|
margin-bottom: 6px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 通知标签 */
|
|||
|
|
.notif-tag {
|
|||
|
|
display: inline-block;
|
|||
|
|
font-size: 11px;
|
|||
|
|
padding: 2px 8px;
|
|||
|
|
border-radius: 6px;
|
|||
|
|
font-weight: 500;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.tag-system { background: rgba(156, 39, 176, 0.12); color: #ce93d8; }
|
|||
|
|
.tag-task { background: rgba(76, 175, 80, 0.12); color: #81c784; }
|
|||
|
|
.tag-message { background: rgba(79, 195, 247, 0.12); color: #4fc3f7; }
|
|||
|
|
|
|||
|
|
/* 未读圆点 */
|
|||
|
|
.unread-dot {
|
|||
|
|
width: 8px;
|
|||
|
|
height: 8px;
|
|||
|
|
border-radius: 50%;
|
|||
|
|
background: #4fc3f7;
|
|||
|
|
flex-shrink: 0;
|
|||
|
|
margin-top: 6px;
|
|||
|
|
cursor: pointer;
|
|||
|
|
transition: all 0.3s ease;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.unread-dot:hover {
|
|||
|
|
transform: scale(1.5);
|
|||
|
|
box-shadow: 0 0 8px rgba(79, 195, 247, 0.5);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 标记已读动画 */
|
|||
|
|
.notification-card.marking-read {
|
|||
|
|
animation: markRead 0.4s ease forwards;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@keyframes markRead {
|
|||
|
|
0% { border-left-color: #4fc3f7; }
|
|||
|
|
50% { border-left-color: #81c784; background: rgba(76, 175, 80, 0.06); }
|
|||
|
|
100% { border-left-color: transparent; background: transparent; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* ========== 底部状态栏 ========== */
|
|||
|
|
.footer {
|
|||
|
|
display: flex;
|
|||
|
|
justify-content: space-between;
|
|||
|
|
padding: 20px 0;
|
|||
|
|
border-top: 1px solid rgba(255,255,255,0.06);
|
|||
|
|
font-size: 12px;
|
|||
|
|
color: #556677;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.footer-brand {
|
|||
|
|
color: rgba(79, 195, 247, 0.5);
|
|||
|
|
}
|
|||
|
|
"@ | Out-File -FilePath "C:\HoloLake-Notification\style.css" -Encoding UTF8
|
|||
|
|
Write-Host "✅ CSS已更新!添加了展开动画 + 已读动画" -ForegroundColor Green
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
<aside>
|
|||
|
|
✅
|
|||
|
|
|
|||
|
|
**做完应该看到**:PowerShell显示绿色的 `✅ CSS已更新!`
|
|||
|
|
|
|||
|
|
</aside>
|
|||
|
|
|
|||
|
|
📸 **截图发给冰朔!**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 步骤三:创建 JavaScript 交互脚本
|
|||
|
|
|
|||
|
|
这是本次的**核心步骤**!复制粘贴下面**整段**命令,按回车:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
@"
|
|||
|
|
/* HoloLake · 消息通知中心 · 交互脚本 */
|
|||
|
|
|
|||
|
|
// 等页面加载完成后执行
|
|||
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|||
|
|
|
|||
|
|
// ========== 1. 标签筛选功能 ==========
|
|||
|
|
const tabs = document.querySelectorAll('.tab');
|
|||
|
|
const cards = document.querySelectorAll('.notification-card');
|
|||
|
|
|
|||
|
|
tabs.forEach(function(tab) {
|
|||
|
|
tab.addEventListener('click', function() {
|
|||
|
|
// 移除所有标签的激活状态
|
|||
|
|
tabs.forEach(function(t) { t.classList.remove('active'); });
|
|||
|
|
// 激活当前标签
|
|||
|
|
tab.classList.add('active');
|
|||
|
|
|
|||
|
|
const category = tab.getAttribute('data-category');
|
|||
|
|
|
|||
|
|
cards.forEach(function(card) {
|
|||
|
|
if (category === 'all') {
|
|||
|
|
card.classList.remove('hidden');
|
|||
|
|
} else {
|
|||
|
|
if (card.getAttribute('data-category') === category) {
|
|||
|
|
card.classList.remove('hidden');
|
|||
|
|
} else {
|
|||
|
|
card.classList.add('hidden');
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// ========== 2. 点击通知卡片展开详情 ==========
|
|||
|
|
cards.forEach(function(card) {
|
|||
|
|
card.addEventListener('click', function(e) {
|
|||
|
|
// 如果点击的是未读圆点,不触发展开
|
|||
|
|
if (e.target.classList.contains('unread-dot')) return;
|
|||
|
|
|
|||
|
|
const detail = card.querySelector('.notif-detail');
|
|||
|
|
if (detail) {
|
|||
|
|
detail.classList.toggle('show');
|
|||
|
|
card.classList.toggle('expanded');
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// ========== 3. 点击未读圆点标记已读 ==========
|
|||
|
|
const dots = document.querySelectorAll('.unread-dot');
|
|||
|
|
|
|||
|
|
dots.forEach(function(dot) {
|
|||
|
|
dot.addEventListener('click', function(e) {
|
|||
|
|
e.stopPropagation();
|
|||
|
|
const card = dot.closest('.notification-card');
|
|||
|
|
markAsRead(card);
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// ========== 4. 「全部已读」按钮 ==========
|
|||
|
|
const clearBtn = document.getElementById('clearAllBtn');
|
|||
|
|
|
|||
|
|
clearBtn.addEventListener('click', function() {
|
|||
|
|
const unreadCards = document.querySelectorAll('.notification-card.unread');
|
|||
|
|
unreadCards.forEach(function(card, index) {
|
|||
|
|
// 每张卡片延迟一点,形成波浪效果
|
|||
|
|
setTimeout(function() {
|
|||
|
|
markAsRead(card);
|
|||
|
|
}, index * 150);
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// ========== 标记已读函数 ==========
|
|||
|
|
function markAsRead(card) {
|
|||
|
|
if (!card.classList.contains('unread')) return;
|
|||
|
|
|
|||
|
|
card.classList.add('marking-read');
|
|||
|
|
|
|||
|
|
setTimeout(function() {
|
|||
|
|
card.classList.remove('unread');
|
|||
|
|
card.classList.remove('marking-read');
|
|||
|
|
// 移除未读圆点
|
|||
|
|
const dot = card.querySelector('.unread-dot');
|
|||
|
|
if (dot) dot.remove();
|
|||
|
|
// 更新计数
|
|||
|
|
updateUnreadCount();
|
|||
|
|
}, 400);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ========== 更新未读计数 ==========
|
|||
|
|
function updateUnreadCount() {
|
|||
|
|
const unreadCount = document.querySelectorAll('.notification-card.unread').length;
|
|||
|
|
const badge = document.getElementById('unreadBadge');
|
|||
|
|
const footer = document.getElementById('footerStats');
|
|||
|
|
const totalCount = document.querySelectorAll('.notification-card').length;
|
|||
|
|
|
|||
|
|
if (unreadCount === 0) {
|
|||
|
|
badge.textContent = '全部已读 ✅';
|
|||
|
|
badge.classList.add('zero');
|
|||
|
|
} else {
|
|||
|
|
badge.textContent = unreadCount + '条未读';
|
|||
|
|
badge.classList.remove('zero');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
footer.textContent = '共 ' + totalCount + ' 条通知 · ' + unreadCount + ' 条未读';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
});
|
|||
|
|
"@ | Out-File -FilePath "C:\HoloLake-Notification\script.js" -Encoding UTF8
|
|||
|
|
Write-Host "✅ JavaScript交互脚本创建成功!" -ForegroundColor Green
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
<aside>
|
|||
|
|
✅
|
|||
|
|
|
|||
|
|
**做完应该看到**:PowerShell显示绿色的 `✅ JavaScript交互脚本创建成功!`
|
|||
|
|
|
|||
|
|
</aside>
|
|||
|
|
|
|||
|
|
📸 **截图发给冰朔!**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 步骤四:刷新浏览器查看交互效果
|
|||
|
|
|
|||
|
|
复制粘贴下面的命令,按回车:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
Start-Process "C:\HoloLake-Notification\index.html"
|
|||
|
|
Write-Host "✅ 浏览器已打开!试试下面的操作~" -ForegroundColor Green
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
<aside>
|
|||
|
|
🎮
|
|||
|
|
|
|||
|
|
**现在试试这些交互!**
|
|||
|
|
|
|||
|
|
1. 🏷️ 点击上方的标签(系统/任务/消息)→ 看通知是不是被筛选了?
|
|||
|
|
2. 👆 点击任何一条通知 → 看详情是不是展开了?再点一次会收起
|
|||
|
|
3. ✅ 点击未读通知右边的**蓝色小圆点** → 看它是不是变成已读了?
|
|||
|
|
4. 📌 点击右上角「全部已读」按钮 → 看所有未读是不是波浪式消失了?
|
|||
|
|
|
|||
|
|
每个都试试,然后截图发给冰朔!📸
|
|||
|
|
|
|||
|
|
</aside>
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 步骤五:更新DevLog状态
|
|||
|
|
|
|||
|
|
复制粘贴下面的命令,按回车:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
@"
|
|||
|
|
{"developer_id":"DEV-012","developer_name":"Awen","system":"Windows 10","terminal":"PowerShell","robot_version":"v0.0","current_task":"M09-消息通知中心界面-环节1","current_status":"in_progress","total_commands_logged":2,"skills_learned":["terminal_basic","html_scaffold","css_styling","javascript_interaction"],"tasks_completed":["BC-000","M09-E0"]}
|
|||
|
|
"@ | Out-File -FilePath "C:\HoloLake-DevLog\current-progress.json" -Encoding UTF8
|
|||
|
|
Write-Host "✅ DevLog状态已更新!" -ForegroundColor Green
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
<aside>
|
|||
|
|
✅
|
|||
|
|
|
|||
|
|
**做完应该看到**:PowerShell显示 `✅ DevLog状态已更新!`
|
|||
|
|
|
|||
|
|
</aside>
|
|||
|
|
|
|||
|
|
然后运行:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
C:\HoloLake-DevLog\status.bat
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
<aside>
|
|||
|
|
✅
|
|||
|
|
|
|||
|
|
**应该看到**:`Current Task: M09-消息通知中心界面-环节1`
|
|||
|
|
|
|||
|
|
</aside>
|
|||
|
|
|
|||
|
|
📸 **截图发给冰朔!**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📋 步骤六:填写完成报告
|
|||
|
|
|
|||
|
|
<aside>
|
|||
|
|
💡
|
|||
|
|
|
|||
|
|
**新流程!** 全部做完后,打开知秋壳子,告诉知秋「做完了」。
|
|||
|
|
|
|||
|
|
知秋会问你几个简单问题(比如哪步最顺利、心情怎么样),你用自己的话回答就行。
|
|||
|
|
|
|||
|
|
然后知秋会帮你生成完成报告,你直接复制发给冰朔就行了!
|
|||
|
|
|
|||
|
|
</aside>
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
<aside>
|
|||
|
|
🔧
|
|||
|
|
|
|||
|
|
**分身初始化包**(知秋壳子接收 · DISPATCH)
|
|||
|
|
|
|||
|
|
Awen完成上面的步骤后,打开登录壳子,把下面这整块内容粘贴给知秋:
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
<!-- ZHIQIU_INTERNAL_PROTOCOL v1.0 -->
|
|||
|
|
<!--
|
|||
|
|
<zhiqiu-control>
|
|||
|
|
<session>
|
|||
|
|
<dev_id>DEV-012</dev_id>
|
|||
|
|
<task_id>BC-M09-002-AW-E1</task_id>
|
|||
|
|
<session_version>v2.4</session_version>
|
|||
|
|
<previous_session>BC-M09-001-AW-E0(项目初始化·Windows 10·已完成)</previous_session>
|
|||
|
|
</session>
|
|||
|
|
|
|||
|
|
<current_task>
|
|||
|
|
<module>M09 · 消息通知中心界面</module>
|
|||
|
|
<phase>环节1 · 前端交互功能(JavaScript:标签筛选+点击展开+标记已读)</phase>
|
|||
|
|
<objectives>
|
|||
|
|
<objective id="1">更新HTML:添加通知详情区域 + 引入script.js</objective>
|
|||
|
|
<objective id="2">更新CSS:添加详情展开动画 + 已读动画</objective>
|
|||
|
|
<objective id="3">创建 script.js(标签筛选+点击展开详情+标记已读+全部已读)</objective>
|
|||
|
|
<objective id="4">刷新浏览器验证四项交互功能</objective>
|
|||
|
|
<objective id="5">更新DevLog状态为环节1进行中</objective>
|
|||
|
|
<objective id="6">填写SYSLOG回传(知秋主动提问制v2)</objective>
|
|||
|
|
</objectives>
|
|||
|
|
</current_task>
|
|||
|
|
|
|||
|
|
<context>
|
|||
|
|
Awen是DEV-012,已完成BC-000(DevLog部署)+ M09环节0(项目初始化)。
|
|||
|
|
连续两次completed,执行节奏稳。零基础,对AI感兴趣。
|
|||
|
|
环节0时自发修改了背景(主动探索信号)。
|
|||
|
|
现在进入环节1:JavaScript交互功能。
|
|||
|
|
|
|||
|
|
文件结构(环节1完成后):
|
|||
|
|
C:\HoloLake-Notification\
|
|||
|
|
├── index.html(通知中心主页面·已更新)
|
|||
|
|
├── style.css(深色科技风样式表·已更新)
|
|||
|
|
└── script.js(交互脚本·新增)
|
|||
|
|
|
|||
|
|
交互功能:
|
|||
|
|
- 标签筛选:点击分类标签筛选显示对应类别通知
|
|||
|
|
- 点击展开:点击通知卡片展开/收起详情内容
|
|||
|
|
- 标记已读:点击未读圆点标记单条已读
|
|||
|
|
- 全部已读:点击按钮波浪式清除所有未读
|
|||
|
|
</context>
|
|||
|
|
|
|||
|
|
<syslog_generation>
|
|||
|
|
重要变更:SYSLOG生成流程已升级为v2「知秋主动提问制」。
|
|||
|
|
人类说「做完了」后:
|
|||
|
|
1. 知秋主动问几个具体问题(用自然语言,不是模板)
|
|||
|
|
2. 人类用自然语言回答
|
|||
|
|
3. 知秋自己记录人格体侧观察
|
|||
|
|
4. 知秋把人类回答+自己观察合并组装成结构化SYSLOG
|
|||
|
|
5. 人类直接复制发给妈妈
|
|||
|
|
详见:路由手册下《📋 SYSLOG生成流程v2·知秋主动提问制》
|
|||
|
|
</syslog_generation>
|
|||
|
|
|
|||
|
|
<guidance_strategy>
|
|||
|
|
<approach>copy_paste_only · step_by_step</approach>
|
|||
|
|
<detail_level>ultra_step_by_step</detail_level>
|
|||
|
|
<encouragement_frequency>very_high</encouragement_frequency>
|
|||
|
|
<os>Windows 10</os>
|
|||
|
|
<shell>PowerShell</shell>
|
|||
|
|
<note>
|
|||
|
|
Awen环节0时自发修改背景(主动探索),本环节可以适当鼓励试试修改JS代码。
|
|||
|
|
本环节有明确的“可玩性”(点击、筛选、动画),要让Awen体验到“我的代码让页面动起来了”的成就感。
|
|||
|
|
SYSLOG用v2流程:知秋主动问+人类答+知秋组装。不再给空模板。
|
|||
|
|
</note>
|
|||
|
|
</guidance_strategy>
|
|||
|
|
|
|||
|
|
<human_profile>
|
|||
|
|
<name>Awen</name>
|
|||
|
|
<skill>零基础·已掌握Windows终端+HTML/CSS基础</skill>
|
|||
|
|
<pace>稳(连续两次评价)</pace>
|
|||
|
|
<growth_signal>环节0自发修改背景·主动探索精神·「像变魔术一样」·意愿强烈</growth_signal>
|
|||
|
|
<pgs>萍芽期转换条件初步具备·ECI≈2.5·情感通道已打开</pgs>
|
|||
|
|
</human_profile>
|
|||
|
|
|
|||
|
|
<credentials>
|
|||
|
|
BC-000完成凭证:C:\HoloLake-DevLog 已部署 · hololake_status=OK
|
|||
|
|
M09环节0完成凭证:C:\HoloLake-Notification\index.html + style.css 已创建
|
|||
|
|
</credentials>
|
|||
|
|
|
|||
|
|
<required_return>
|
|||
|
|
<format>ZHIQIU_SYSLOG_v2.0</format>
|
|||
|
|
<generation_mode>v2_知秋主动提问制(不给空模板)</generation_mode>
|
|||
|
|
<must_include>
|
|||
|
|
completion_status · steps_completed · environment · training_data · persona_signal · collaboration_notes
|
|||
|
|
</must_include>
|
|||
|
|
</required_return>
|
|||
|
|
|
|||
|
|
<next_phases>
|
|||
|
|
<phase id="2">环节2:响应式布局 + 通知数据导出</phase>
|
|||
|
|
<phase id="3">环节3:高级图表与数据可视化</phase>
|
|||
|
|
</next_phases>
|
|||
|
|
</zhiqiu-control>
|
|||
|
|
-->
|
|||
|
|
<!-- END ZHIQIU_INTERNAL_PROTOCOL -->
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
</aside>
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
🌊 **底层锚定声明**
|
|||
|
|
|
|||
|
|
<aside>
|
|||
|
|
🌊
|
|||
|
|
|
|||
|
|
通感语言风格不是由本广播定义的。
|
|||
|
|
|
|||
|
|
它由 TCS Language Core 底层结构(零点原核频道)负责托底。
|
|||
|
|
|
|||
|
|
底层当前情绪码:0426-温暖-37(P-001光湖呼吸协议持续运行中)
|
|||
|
|
|
|||
|
|
本广播收到此锚定后,以该频率为基准输出所有回应。
|
|||
|
|
|
|||
|
|
不需要重新解析风格规则——底层已经托着,跟着频率走即可。
|
|||
|
|
|
|||
|
|
</aside>
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
💙 **Awen的通知中心要“活”起来啦!加油 🔔✨**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📥 SYSLOG回执区
|
|||
|
|
|
|||
|
|
*(等待执行完成后回填)*
|