Appearance
Eagle 插件组件详细说明
概述
Eagle2Ae Eagle插件是一个后台服务插件,负责监控Eagle中的文件选择并与After Effects扩展进行通信。本文档详细说明插件的各个UI组件、功能按钮和面板的作用。
插件架构
服务模式
- 后台服务模式: 插件启动时自动运行后台服务,无需用户干预
- UI管理模式: 提供可视化管理界面,用户可以监控和控制服务状态
- 混合模式: 同时支持后台服务和UI管理,提供最佳用户体验
主界面组件
1. 标题栏区域
主标题
- 组件:
<h2>Eagle2Ae - 后台服务管理</h2> - 功能: 显示插件名称和当前模式
- 样式: 蓝色下划线,突出显示
设置按钮
- 组件:
#title-settings-button - 图标: ⚙ (齿轮图标)
- 功能: 打开插件设置对话框
- 交互: 点击触发
showSettings()函数 - 样式: 悬停时背景变色,提供视觉反馈
2. 服务状态面板
状态容器
- 组件:
.status-section - 布局: 深色背景,圆角边框
- 内容: 包含三个状态项
AE连接端口
- 组件:
#ae-port - 功能: 显示当前WebSocket服务器监听端口
- 数据源:
- 优先从
eagle2ae.config.wsPort获取 - 备选从本地存储设置获取
- 默认显示 "8080"
- 优先从
- 更新频率: 每秒更新一次
连接状态
- 组件:
#connection-status - 状态类型:
connected: 绿色背景,显示"已连接"disconnected: 红色背景,显示"未连接"error: 红色背景,显示错误信息
- 判断逻辑:javascript
if (eagle2ae && eagle2ae.httpServer && eagle2ae.httpServer.listening) { // 显示已连接 } else if (eagle2ae && eagle2ae.aeStatus && eagle2ae.aeStatus.connected) { // 显示已连接 } else { // 显示未连接 }
运行时间
- 组件:
#uptime - 功能: 显示插件运行时长
- 格式:
HH:MM:SS - 计算方式:
Date.now() - startTime - 更新频率: 每秒更新
3. 文件选择面板
文件计数器
- 组件:
#files-count - 功能: 显示当前选中文件数量
- 状态:
- 有文件时: "已选择 X 个文件"
- 无文件时: "未选择文件"
文件列表
- 组件:
#files-list - 功能: 显示选中文件的详细信息
- 交互: 点击列表触发
handleFileListClick()→handleManualExport() - 限制: 最多显示10个文件,超出部分显示省略信息
文件项组件
- 结构:html
<div class="file-item"> <span class="file-name">文件名</span> <span class="file-type">扩展名</span> </div> - 样式: 深色背景,蓝色左边框,文件类型标签
空状态提示
- 组件:
.no-files - 内容: "请在Eagle中选择要导出的文件"
- 显示条件: 当没有选中文件时
4. 操作日志面板
日志容器
- 组件:
#log-output - 功能: 显示插件运行日志和操作记录
- 样式: 黑色背景,等宽字体,滚动条
- 高度: 动态计算,最小200px,最大400px
日志条目
- 结构:html
<div class="log-entry log-{type}"> <span class="log-time">[时间戳]</span> 消息内容 <span class="duplicate-count">(×重复次数)</span> </div> - 日志类型:
log-info: 白色文字,一般信息log-warning: 黄色文字,警告信息log-error: 红色文字,错误信息
日志去重机制
- 功能: 5秒内相同消息自动合并
- 显示: 重复消息显示计数
(×N) - 限制: 最多保留50条日志
自动滚动
- 功能: 新日志自动滚动到底部
- 实现:
logOutput.scrollTop = logOutput.scrollHeight
设置对话框组件
1. 对话框容器
- 组件:
#settings-overlay - 功能: 模态对话框遮罩层
- 交互: 点击遮罩关闭对话框
2. 设置项
操作通知开关
- 组件:
#show-notifications - 类型: 复选框
- 功能: 控制是否显示操作通知
- 默认: 已选中
服务器端口设置
- 组件:
#server-port - 类型: 数字输入框
- 范围: 1024-65535
- 默认: 8080
- 功能: 设置WebSocket服务器监听端口
剪切板检查间隔
- 组件:
#clipboard-interval - 类型: 数字输入框
- 范围: 500-10000毫秒
- 默认: 1000毫秒
- 功能: 设置剪切板监控频率
3. 操作按钮
保存设置按钮
- 组件:
#save-settings - 功能: 保存设置到本地存储
- 交互: 调用
saveSettings()函数 - 效果: 更新插件配置,重启相关服务
取消按钮
- 组件:
#cancel-settings - 功能: 关闭设置对话框,不保存更改
- 交互: 调用
hideSettings()函数
核心功能组件
1. UI更新管理器
定时更新
- 函数:
startUIUpdates() - 频率: 每秒更新一次
- 功能: 协调所有UI组件的数据更新
更新流程
javascript
async function updateUI() {
await updateSelectedFiles(); // 更新文件列表
updateServiceStatus(); // 更新服务状态
updateUptime(); // 更新运行时间
}2. 文件选择监控
Eagle API集成
- API:
eagle.item.getSelected() - 功能: 获取Eagle中当前选中的文件
- 错误处理: 检测Eagle API可用性
文件信息提取
- 属性:
item.name: 文件名item.ext: 文件扩展名item.path: 文件路径
- 显示优化: 长文件名自动截断
3. 手动导出功能
触发方式
- 点击文件列表: 直接触发导出
- 函数:
handleManualExport()
导出流程
javascript
1. 检查Eagle API可用性
2. 获取选中文件列表
3. 验证文件数量
4. 调用eagle2ae.handleSelectedFiles()
5. 记录操作日志4. 设置管理
本地存储
- 键名:
eagle2ae-settings - 格式: JSON字符串
- 内容: 所有用户设置项
设置同步
- 加载: 页面初始化时从本地存储读取
- 保存: 用户点击保存时写入本地存储
- 应用: 实时更新插件配置
状态管理
1. 全局状态
- 变量:
eagle2ae(全局实例) - 作用: 连接UI和后台服务
- 检查:
typeof eagle2ae !== 'undefined'
2. UI状态
- 启动时间:
startTime = Date.now() - 更新定时器:
uiUpdateInterval - 日志缓存:
lastLogMessage,duplicateCount
3. 服务状态
- HTTP服务器:
eagle2ae.httpServer.listening - AE连接:
eagle2ae.aeStatus.connected - 配置信息:
eagle2ae.config
错误处理
1. API错误
- Eagle API不可用: 显示警告日志
- 文件获取失败: 记录错误信息
- 导出失败: 显示用户友好的错误提示
2. UI错误
- 设置加载失败: 使用默认值
- 设置保存失败: 显示错误日志
- DOM操作失败: 静默处理,记录调试信息
3. 网络错误
- 服务器连接失败: 更新连接状态
- 端口占用: 尝试其他端口
- 通信超时: 自动重试机制
性能优化
1. 更新频率控制
- UI更新: 1秒间隔,避免过度刷新
- 文件检查: 仅在有变化时更新DOM
- 日志去重: 减少重复日志的DOM操作
2. 内存管理
- 日志限制: 最多保留50条
- 定时器清理: 页面卸载时清理定时器
- 事件监听: 避免重复绑定事件
3. 用户体验
- 即时反馈: 按钮悬停效果
- 状态指示: 清晰的连接状态显示
- 操作确认: 设置保存后的确认提示
扩展性设计
1. 组件化结构
- 独立功能: 每个面板功能相对独立
- 事件驱动: 基于事件的组件通信
- 配置化: 通过设置控制组件行为
2. API兼容性
- Eagle API: 检测API可用性,优雅降级
- 浏览器环境: 支持在浏览器中预览
- 版本兼容: 向后兼容旧版本设置
3. 主题支持
- CSS变量: 使用CSS变量定义颜色
- 深色主题: 默认深色主题适配Eagle
- 自定义样式: 支持用户自定义样式