From f7ffeb54c2d4fe05deaee17e714269d05766545f Mon Sep 17 00:00:00 2001 From: hxuanyu <2252193204@qq.com> Date: Fri, 27 Jun 2025 16:07:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=A1=E6=97=B6=E5=99=A8?= =?UTF-8?q?=E5=B0=8F=E7=BB=84=E4=BB=B6=EF=BC=8C=E6=94=AF=E6=8C=81=E5=80=92?= =?UTF-8?q?=E8=AE=A1=E6=97=B6=E5=92=8C=E6=AD=A3=E8=AE=A1=E6=97=B6=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=8C=E5=8C=85=E5=90=AB=E4=B8=B0=E5=AF=8C=E7=9A=84?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E5=92=8C=E9=85=8D=E7=BD=AE=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 34 ++++ src/widgets/registry.ts | 2 + src/widgets/timer/Config.vue | 360 +++++++++++++++++++++++++++++++++++ src/widgets/timer/Widget.vue | 354 ++++++++++++++++++++++++++++++++++ src/widgets/timer/index.ts | 14 ++ src/widgets/timer/types.ts | 57 ++++++ 6 files changed, 821 insertions(+) create mode 100644 src/widgets/timer/Config.vue create mode 100644 src/widgets/timer/Widget.vue create mode 100644 src/widgets/timer/index.ts create mode 100644 src/widgets/timer/types.ts diff --git a/README.md b/README.md index 1d271b4..e2d71d2 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ 2. **日期小组件**:显示当前日期,可自定义格式、样式和特效 3. **文本小组件**:显示文本,支持渐变、阴影、字体等自定义样式 4. **图片小组件**:显示图片,可自定义大小、特效和位置 +5. **计时器小组件**:支持倒计时和正计时功能,具有丰富的样式和提示功能 ## 使用方法 @@ -62,6 +63,34 @@ - **圆角**:调整图片圆角半径 - **阴影效果**:添加阴影及调整阴影颜色和模糊度 +### 计时器小组件 + +- **计时器模式**: + - **倒计时**:设定时长,从指定时间倒数至零 + - **正计时**:从零开始向上计时(秒表功能) +- **时间设置**: + - 倒计时模式:可设置分钟和秒数 + - 时间格式:支持 mm:ss 和 hh:mm:ss 格式 + - 毫秒显示:可选择是否显示毫秒 +- **控制功能**: + - 自动开始:组件加载后自动开始计时 + - 手动控制:开始、暂停、重置按钮 + - 点击切换:点击计时器进行状态切换 +- **倒计时专属功能**: + - **警告设置**:设置警告阈值和警告颜色 + - **进度条**:显示剩余时间进度,可自定义颜色和高度 + - **音效提示**:倒计时结束播放提示音,可调节音量 + - **结束颜色**:倒计时结束时的特殊颜色显示 +- **样式设置**: + - 字体大小、字体类型、字重 + - 文本颜色或渐变色 + - 文字阴影及模糊度 +- **预设样式**: + - 游戏风格:适合游戏直播的醒目样式 + - 会议计时:适合会议和演讲的专业样式 + - 运动计时:适合健身和运动的动感样式 + - 简约风格:简洁的极简主义设计 + ## 开发 ```bash @@ -100,6 +129,11 @@ src/ │ ├── date/ # 日期小组件模块 │ ├── text/ # 文本小组件模块 │ ├── image/ # 图片小组件模块 +│ ├── timer/ # 计时器小组件模块 +│ │ ├── index.ts # 模块导出 +│ │ ├── types.ts # 类型定义 +│ │ ├── Widget.vue # 小组件组件 +│ │ └── Config.vue # 配置组件 │ └── registry.ts # 小组件注册中心 ``` diff --git a/src/widgets/registry.ts b/src/widgets/registry.ts index 4463ef0..5a19a56 100644 --- a/src/widgets/registry.ts +++ b/src/widgets/registry.ts @@ -3,6 +3,7 @@ import ClockWidget from './clock'; import DateWidget from './date'; import TextWidget from './text'; import ImageWidget from './image'; +import TimerWidget from './timer'; // 导入类型定义 @@ -14,6 +15,7 @@ export const widgets: WidgetRegistration[] = [ DateWidget, TextWidget, ImageWidget, + TimerWidget, ]; // 获取小组件显示信息列表(用于 UI 展示) diff --git a/src/widgets/timer/Config.vue b/src/widgets/timer/Config.vue new file mode 100644 index 0000000..bcfd7a4 --- /dev/null +++ b/src/widgets/timer/Config.vue @@ -0,0 +1,360 @@ + + + + + diff --git a/src/widgets/timer/Widget.vue b/src/widgets/timer/Widget.vue new file mode 100644 index 0000000..eefc86b --- /dev/null +++ b/src/widgets/timer/Widget.vue @@ -0,0 +1,354 @@ + + + + + diff --git a/src/widgets/timer/index.ts b/src/widgets/timer/index.ts new file mode 100644 index 0000000..59ae15c --- /dev/null +++ b/src/widgets/timer/index.ts @@ -0,0 +1,14 @@ +import Widget from './Widget.vue'; +import Config from './Config.vue'; +import { defaultConfig } from './types'; +import { createWidget } from '../createWidget'; + +export default createWidget({ + label: '计时器小组件', + value: 'timer', + icon: '⏱️', + description: '支持倒计时和正计时功能,可自定义样式、进度条和提示音', + component: Widget, + configComponent: Config, + defaultConfig +}); diff --git a/src/widgets/timer/types.ts b/src/widgets/timer/types.ts new file mode 100644 index 0000000..a6c583b --- /dev/null +++ b/src/widgets/timer/types.ts @@ -0,0 +1,57 @@ +// 计时器模式 +export type TimerMode = 'countdown' | 'stopwatch'; + +// 计时器状态 +export type TimerStatus = 'stopped' | 'running' | 'paused' | 'finished'; + +// 计时器小组件配置接口 +export interface TimerConfig { + mode: TimerMode; + duration: number; // 倒计时持续时间(秒) + autoStart: boolean; // 是否自动开始 + showMilliseconds: boolean; // 是否显示毫秒 + format: string; // 时间显示格式 + color: string; + fontSize: number; + fontWeight: string; + fontFamily: string; + textShadow: boolean; + shadowColor: string; + shadowBlur: number; + useGradient: boolean; + gradientColors: string[]; + finishedColor: string; // 倒计时结束时的颜色 + playSound: boolean; // 是否播放提示音 + soundVolume: number; // 音量 (0-100) + warningThreshold: number; // 警告阈值(秒) + warningColor: string; // 警告颜色 + showProgress: boolean; // 是否显示进度条 + progressColor: string; // 进度条颜色 + progressHeight: number; // 进度条高度 +} + +// 计时器小组件默认配置 +export const defaultConfig: TimerConfig = { + mode: 'countdown', + duration: 300, // 5分钟 + autoStart: false, + showMilliseconds: false, + format: 'mm:ss', + color: '#ffffff', + fontSize: 48, + fontWeight: 'normal', + fontFamily: 'Arial', + textShadow: false, + shadowColor: 'rgba(0,0,0,0.5)', + shadowBlur: 4, + useGradient: false, + gradientColors: ['#ff0000', '#0000ff'], + finishedColor: '#ff0000', + playSound: true, + soundVolume: 50, + warningThreshold: 30, + warningColor: '#ff6b35', + showProgress: true, + progressColor: '#3498db', + progressHeight: 4 +};