Skip to content

架构概览

Parrot UI 采用 Monorepo 架构,核心包 @parrotui/core 统一导出所有组件及基础设施。

整体架构

┌─────────────────────────────────────────────────────────────┐
│                      Application Layer                      │
│                  页面直接导入组件 / Composables                │
├─────────────────────────────────────────────────────────────┤
│                    @parrotui/core (index.ts)                 │
│   统一导出所有组件、Composables、Directives、Utils、Tokens     │
├──────────┬──────────┬──────────┬──────────┬─────────────────┤
│Components│Composable│Directives│  Utils   │     Tokens      │
│ 14 分类  │ 4 个 Hook│ 3 个指令 │ 4 个模块 │ 颜色/间距/阴影   │
│ 165 组件 │          │          │          │                 │
├──────────┴──────────┴──────────┴──────────┴─────────────────┤
│                       Styles Layer                          │
│    variables.css  ·  base.css  ·  animations.css  ·  reset  │
├─────────────────────────────────────────────────────────────┤
│                  uni-app X Runtime (UTS)                     │
│        Android  ·  iOS  ·  HarmonyOS  ·  小程序  ·  Web      │
└─────────────────────────────────────────────────────────────┘

设计原则

原则说明
Token 驱动所有颜色、间距、字体、阴影均由设计令牌统一管理,确保视觉一致性
BEM 命名CSS 类名统一使用 parrot- 前缀 + BEM 规范
rpx 响应式使用 rpx 单位实现跨平台屏幕适配
Composition API所有组件使用 <script setup lang="uts">
按需导出通过 index.ts 统一导出,支持 Tree-shaking
14 分类体系组件按职责划分为 14 个物理分类,结构清晰

目录结构

packages/parrotui-core/
├── index.ts                    # 统一导出入口(165 组件 + API)
├── components/                 # 14 分类组件目录
│   ├── basic/          (25)    # 基础组件
│   ├── display/        (16)    # 展示组件
│   ├── form/           (24)    # 表单组件
│   ├── data/            (7)    # 数据组件
│   ├── feedback/        (6)    # 操作反馈
│   ├── navigation/     (18)    # 导航组件
│   ├── overlay/        (13)    # 弹层组件
│   ├── layout/         (16)    # 布局组件
│   ├── motion/          (4)    # 动效组件
│   ├── canvas/          (4)    # 画布组件
│   ├── utility/        (13)    # 工具组件
│   ├── extended/        (8)    # 扩展组件
│   ├── experimental/    (5)    # 实验组件
│   └── system/          (6)    # 系统组件
├── composables/                # 组合式 API
│   ├── useColor.ts             # 颜色访问
│   ├── useResponsive.ts        # 响应式检测
│   ├── useLocale.ts            # 国际化
│   └── useTheme.ts             # 主题管理
├── directives/                 # 指令工具
│   ├── vcopy.ts                # 剪贴板
│   ├── vloading.ts             # 加载状态
│   └── vpermission.ts          # 权限控制
├── utils/                      # 工具函数
│   ├── color.ts                # 颜色操作
│   ├── dom.ts                  # DOM 查询
│   ├── event.ts                # 事件总线
│   └── validator.ts            # 表单验证
├── tokens/                     # 设计令牌
│   ├── colors.ts               # 7 色系 × 10 级
│   ├── spacing.ts              # 间距规范
│   ├── typography.ts           # 字体规范
│   └── shadows.ts              # 阴影规范
├── theme/                      # 主题配置
│   ├── index.ts                # ThemeConfig 接口
│   ├── light.ts                # 亮色主题
│   ├── dark.ts                 # 暗色主题
│   └── adminTheme.ts           # 后台管理预设
└── styles/                     # 全局样式
    ├── variables.css           # CSS 变量(色值 + 语义)
    ├── base.css                # 140+ 工具类
    ├── animations.css          # 16 个动画关键帧
    └── reset.css               # 样式重置

14 分类体系

组件按照功能职责划分为 14 个物理分类,每个分类有独立的目录:

分类数量职责说明
basic25最基础的 UI 原子:按钮、文本、图标、数字显示等
display16信息展示:头像、徽标、标签、骨架屏、卡片等
form24数据录入:输入框、选择器、日期、上传、表单等
data7数据展示:列表、表格、分页、进度、倒计时
feedback6操作反馈:消息提示、加载状态、警告
navigation18导航导引:导航栏、标签页、步骤条、菜单等
overlay13弹出浮层:对话框、抽屉、弹出层、操作面板
layout16页面布局:栅格、卡片、折叠面板、瀑布流等
motion4动效组件:Lottie、数字滚轮、贝塞尔曲线
canvas4画布能力:海报、二维码、条形码、签名
utility13辅助工具:状态栏、留白、懒加载、回到顶部等
extended8业务增强:筛选栏、验证码、图片裁剪、拖拽
experimental5实验性功能:虚拟列表、手势、语音、AI
system6系统级功能:通知、权限、日志、更新检测

组件命名规范

每个组件遵循以下约定:

  • 目录名:PascalCase(如 Button/InputNumber/
  • 文件名:kebab-case + parrot 前缀(如 parrot-button.uvue
  • 导出名:Parrot + PascalCase(如 ParrotButton
  • 模板标签:kebab-case(如 <parrot-button />

技术栈

  • 框架:Vue 3 + Composition API
  • 运行时:uni-app X (UTS)
  • 类型:TypeScript strict mode
  • 样式:CSS + rpx 单位
  • 构建:VitePress (文档) + pnpm workspace (Monorepo)
  • 部署:GitHub Actions + GitHub Pages

Released under the MIT License.