灵伴桌面宠物 — 功能模块说明

1. 宠物窗口模块

1.1 视觉呈现

特性 实现方式
透明背景 Electron 窗口 transparent: true + CSS background: transparent
无边框 frame: false
置顶显示 alwaysOnTop: true
阴影效果 CSS filter: drop-shadow()
光晕 .aura 元素,glow 动画 3s 脉冲

1.2 动画系统

动画名 时长 效果
breathe 4.8s 上下浮动 4px + 缩放 1→1.03→1
sway 11s 左右旋转 ±1.5deg
glow 3s 光晕透明度 0.6→1→0.6
greet 760ms 点击跳动:上弹+旋转+缩放
heart-rise 1.3s 爱心粒子上升+旋转+缩放消失

动画控制

  • 通过 animation 设置控制开关
  • 尊重系统 prefers-reduced-motion: reduce 设置

1.3 交互行为

交互 行为 实现
拖拽 移动宠物位置 pointerdown/move/up → IPC → 主进程 win.setPosition()
滚轮 缩放 0.5x ~ 1.75x wheel 事件,40ms 防抖
单击 爱心粒子 + 跳动动画 在点击位置生成随机 ♥/✦ 粒子
双击 打开控制中心 dblclick → IPC openManager()
右键 上下文菜单 contextmenu → IPC showContextMenu()

1.4 自定义图片

  • 支持格式:PNG, JPG, GIF, WebP, APNG
  • 图片复制到用户数据目录
  • 加载成功/失败通过 reportDiagnostic 记录日志

2. 控制中心模块

2.1 布局结构

┌──────────────┬─────────────────────────────────┐
│   左侧边栏    │         右侧工作区                │
│              │                                 │
│  ┌────────┐  │  ┌───────────────────────────┐  │
│  │宠物预览 │  │  │      任务列表               │  │
│  │ 卡片    │  │  │  ┌───┐ ┌───┐ ┌───┐       │  │
│  └────────┘  │  │  │任务│ │任务│ │任务│ ...   │  │
│              │  │  └───┘ └───┘ └───┘       │  │
│  ┌────────┐  │  └───────────────────────────┘  │
│  │宠物设置 │  │                                 │
│  │·开机自启│  │  ┌───────────────────────────┐  │
│  │·总在最前│  │  │      任务编辑器             │  │
│  │·动态效果│  │  │  名称: [____]              │  │
│  │·大小    │  │  │  时间: [____]              │  │
│  └────────┘  │  │  启用: [switch]            │  │
│              │  │  说明: [____]              │  │
│  ┌────────┐  │  │  脚本: [textarea]          │  │
│  │旧任务   │  │  │  [保存] [删除] [运行]      │  │
│  │迁移     │  │  └───────────────────────────┘  │
│  └────────┘  │                                 │
└──────────────┴─────────────────────────────────┘

2.2 视觉设计

  • 主题:深色主题,CSS 变量驱动
  • 主色调:紫色 #9573f2 + 青色强调 #43d8c2
  • 面板:毛玻璃效果 backdrop-filter: blur()
  • 背景:渐变光晕
  • 交互:自定义 checkbox 开关、range 滑块、滚动条

2.3 功能操作

操作 说明
新建任务 点击”新建”按钮,清空编辑器
编辑任务 点击任务列表中的任务,填充编辑器
保存任务 点击”保存”,校验后通过 IPC 持久化
删除任务 点击”删除”,确认后移除
启用/禁用 点击任务开关或编辑器开关
手动运行 点击”运行”立即执行 PowerShell 脚本
重置任务 恢复为 3 个默认内置模板

3. 系统托盘模块

3.1 托盘功能

操作 行为
左键单击 切换宠物显示/隐藏
左键双击 打开控制中心
右键菜单 显示宠物 / 隐藏宠物 / 控制中心 / 退出

3.2 托盘图标

  • 文件:assets/tray.png (32x32)
  • 随应用启动创建,退出时销毁

4. 配置存储模块

4.1 数据持久化

  • 格式:JSON
  • 路径%APPDATA%/<Electron userData>/config.json
  • 写入策略:先写 .tmpfs.rename(原子操作)

4.2 容错机制

读取配置:
  try JSON.parse → 成功 → 合并默认值
                → 失败 → 备份为 config.json.broken-{timestamp}
                       → 使用默认配置

4.3 数据校验

字段 校验规则
任务名称 非空字符串
任务时间 HH:mm 格式
任务脚本 非空,最大长度限制

5. 任务调度模块

5.1 调度策略

  • 轮询间隔:每 5 秒
  • 匹配精度:分钟级别(HH:mm)
  • 防重复lastRunDate 记录每日运行状态

5.2 执行流程

1. tick() 触发
2. 遍历所有 enabled 任务
3. 比对当前时间与任务时间
4. 检查 lastRunDate !== today
5. 写入 .ps1 临时文件 (UTF-8 BOM)
6. 执行 powershell.exe -File xxx.ps1
7. 收集 stdout/stderr (最近16KB)
8. 写入 task-runs.log
9. 发送事件通知 UI

5.3 内置任务详情

早起 (08:00)

# 启动 Wallpaper Engine
Start-Process -FilePath "steam://rungameid/431960"

锻炼 (20:00)

# 切换 Wallpaper Engine 壁纸
# 通过 Steam 协议启动并传参

早睡+关机 (23:00)

# 停止 Wallpaper Engine
Stop-Process -Name "wallpaper64" -Force -ErrorAction SilentlyContinue
Stop-Process -Name "wallpaper32" -Force -ErrorAction SilentlyContinue
# 15分钟后关机
shutdown /s /t 900

6. 旧任务迁移模块

6.1 功能说明

检测并接管用户已有的 Windows 计划任务(早起、锻炼、早睡),将其禁用并启用应用内对应模板。

6.2 实现方式

  • 以管理员权限运行 PowerShell
  • 禁用旧的计划任务
  • 启用应用内对应的内置模板

6.3 触发方式

控制中心 → 旧任务迁移面板 → 点击对应按钮 → 确认对话框 → 执行迁移