From 925c8ad6bced6fadba811e8541caa1afecc48a90 Mon Sep 17 00:00:00 2001
From: hxuanyu <2252193204@qq.com>
Date: Fri, 27 Jun 2025 10:24:02 +0800
Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=87=8D=E6=9E=84=EF=BC=8C?=
=?UTF-8?q?=E5=A2=9E=E5=BC=BA=E6=89=A9=E5=B1=95=E6=80=A7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 94 +++++++++++++++++--
src/views/PreviewView.vue | 21 ++---
.../clock/Config.vue} | 20 +---
.../{ClockWidget.vue => clock/Widget.vue} | 18 +---
src/widgets/clock/index.ts | 11 +++
src/widgets/clock/types.ts | 33 +++++++
.../date/Config.vue} | 16 +---
.../{DateWidget.vue => date/Widget.vue} | 16 +---
src/widgets/date/index.ts | 11 +++
src/widgets/date/types.ts | 29 ++++++
.../image/Config.vue} | 13 +--
.../{ImageWidget.vue => image/Widget.vue} | 13 +--
src/widgets/image/index.ts | 11 +++
src/widgets/image/types.ts | 23 +++++
src/widgets/registry.ts | 86 +++--------------
.../text/Config.vue} | 15 +--
.../{TextWidget.vue => text/Widget.vue} | 15 +--
src/widgets/text/index.ts | 11 +++
src/widgets/text/types.ts | 27 ++++++
src/widgets/types.ts | 20 ++++
20 files changed, 293 insertions(+), 210 deletions(-)
rename src/{components/config/ClockConfig.vue => widgets/clock/Config.vue} (95%)
rename src/widgets/{ClockWidget.vue => clock/Widget.vue} (90%)
create mode 100644 src/widgets/clock/index.ts
create mode 100644 src/widgets/clock/types.ts
rename src/{components/config/DateConfig.vue => widgets/date/Config.vue} (95%)
rename src/widgets/{DateWidget.vue => date/Widget.vue} (91%)
create mode 100644 src/widgets/date/index.ts
create mode 100644 src/widgets/date/types.ts
rename src/{components/config/ImageConfig.vue => widgets/image/Config.vue} (94%)
rename src/widgets/{ImageWidget.vue => image/Widget.vue} (89%)
create mode 100644 src/widgets/image/index.ts
create mode 100644 src/widgets/image/types.ts
rename src/{components/config/TextConfig.vue => widgets/text/Config.vue} (95%)
rename src/widgets/{TextWidget.vue => text/Widget.vue} (85%)
create mode 100644 src/widgets/text/index.ts
create mode 100644 src/widgets/text/types.ts
create mode 100644 src/widgets/types.ts
diff --git a/README.md b/README.md
index 174ce55..1d271b4 100644
--- a/README.md
+++ b/README.md
@@ -83,12 +83,7 @@ npm run preview
```
src/
├── assets/ # 静态资源
-├── components/ # 组件
-│ └── config/ # 小组件配置面板组件
-│ ├── ClockConfig.vue
-│ ├── DateConfig.vue
-│ ├── TextConfig.vue
-│ └── ImageConfig.vue
+├── components/ # 通用组件
├── router/ # 路由配置
├── utils/ # 工具函数
│ └── configUtils.ts # 配置编码/解码工具
@@ -96,8 +91,91 @@ src/
│ ├── HomeView.vue # 主页
│ ├── ConfigView.vue # 配置页面
│ └── PreviewView.vue# 预览页面
-├── widgets/ # 小组件实现
-│ ├── registry.ts # 小组件注册中心
+├── widgets/ # 小组件模块
+│ ├── clock/ # 时钟小组件模块
+│ │ ├── index.ts # 模块导出
+│ │ ├── types.ts # 类型定义
+│ │ ├── Widget.vue # 小组件组件
+│ │ └── Config.vue # 配置组件
+│ ├── date/ # 日期小组件模块
+│ ├── text/ # 文本小组件模块
+│ ├── image/ # 图片小组件模块
+│ └── registry.ts # 小组件注册中心
+```
+
+## 小组件开发指南
+
+### 创建新小组件
+
+1. **创建小组件文件夹**:在 `src/widgets/` 下创建新的文件夹,如 `newwidget/`
+
+2. **创建必要文件**:
+ - `types.ts` - 定义配置接口和默认配置
+ - `Widget.vue` - 小组件显示组件
+ - `Config.vue` - 小组件配置组件
+ - `index.ts` - 模块导出文件
+
+3. **实现类型定义**(types.ts):
+ ```typescript
+ // 小组件配置接口
+ export interface NewWidgetConfig {
+ // 配置属性定义
+ }
+
+ // 默认配置
+ export const defaultConfig: NewWidgetConfig = {
+ // 默认值
+ };
+ ```
+
+4. **实现小组件组件**(Widget.vue):
+ ```vue
+
+
+
+
+
+ ```
+
+5. **实现配置组件**(Config.vue):
+ ```vue
+
+
+
+
+
+ ```
+
+6. **导出模块**(index.ts):
+ ```typescript
+ import Widget from './Widget.vue';
+ import Config from './Config.vue';
+ import { defaultConfig } from './types';
+
+ export default {
+ label: '新小组件',
+ value: 'newwidget',
+ component: Widget,
+ configComponent: Config,
+ getDefaultConfig: () => defaultConfig
+ };
+ ```
+
+7. **注册小组件**:在 `registry.ts` 中导入并添加到 `widgets` 数组
+
+### 架构优势
+
+- **模块化设计**:每个小组件独立成模块,包含所有相关代码
+- **类型安全**:TypeScript 提供完整的类型检查和智能提示
+- **可扩展性**:添加新小组件无需修改核心逻辑,只需创建新模块并注册
+- **代码组织**:相关代码集中在同一文件夹,便于维护和理解
+- **零侵入**:新增小组件不会影响现有小组件和核心功能
│ ├── ClockWidget.vue
│ ├── DateWidget.vue
│ ├── TextWidget.vue
diff --git a/src/views/PreviewView.vue b/src/views/PreviewView.vue
index 8076c2a..6dfe457 100644
--- a/src/views/PreviewView.vue
+++ b/src/views/PreviewView.vue
@@ -11,25 +11,18 @@