更新记录

1.0.5(2025-09-28) 下载此版本

修复已知BUG

1.0.2(2025-09-28) 下载此版本

完成重构

1.0.4(2025-09-28) 下载此版本

去除无用代码

查看更多

平台兼容性

uni-app(4.51)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟

logo

uvui-ts

Vue3 + TypeScript 多平台快速开发的 UI 框架

star star

📦 安装

npm install @toothdy/uvui-ts
# 或
yarn add @toothdy/uvui-ts
# 或
pnpm add @toothdy/uvui-ts

🚀 快速开始

完整引入

// main.ts
import { createApp } from 'vue';
import App from './App.vue';
import uvUI from '@toothdy/uvui-ts';

const app = createApp(App);
app.use(uvUI);
app.mount('#app');

按需引入

<template>
  <uv-button type="primary">按钮</uv-button>
</template>

<script setup lang="ts">
// 组件会自动注册,无需手动导入
</script>

配置组件自动注册

在你的项目 pages.json 文件中添加 easycom 配置

{
  "easycom": {
    "autoscan": true,
    "custom": {
      "^uv-(.*)": "@/uv-ui/components/uv-$1/uv-$1.vue"
    }
  }
}

配置样式文件

在你的项目 App.vue 中引入核心样式

<style lang="scss">
// 引入 uvui-ts 核心样式
@use '@/uni_modules/uvui-ts/index.scss';

@use '@toothdy/uvui-ts/index.scss';
</style>

在你的项目 uni.scss 文件中引入主题样式

// 引入 uvui-ts 主题样式
@use '@toothdy/uvui-ts/theme.scss' as *;

使用工具函数

// 在 template 中直接使用
<template>
  <view>{{ $uv.test.mobile('***') }}</view>
</template>

// 在 script 中使用
<script setup lang="ts">
// 检查是否为手机号
const isMobile = uni.$uv.test.mobile('***')

// HTTP 请求
const response = await uni.$uv.http.get('/api/data')

// 路由跳转
uni.$uv.route.to('/pages/detail/index', { id: 1 })

// 防抖函数
const debouncedFn = uni.$uv.debounce(() => {
  console.log('执行防抖函数')
}, 300)
</script>

✨ 特性

1. 🎯 TypeScript 支持

  • 完整类型定义:所有组件和工具函数都有完整的 TypeScript 类型定义
  • 智能提示:开发时享受完整的代码提示和类型检查
  • 类型安全:编译时发现潜在问题,提高代码质量

2. 🌐 全端兼容

  • 多平台支持:H5、微信小程序、支付宝小程序、百度小程序、字节跳动小程序、QQ小程序、快应用、App(Vue/nvue)
  • 自适应组件:组件会根据不同平台自动适配样式和功能
  • 平台差异抹平:底层处理各平台差异和兼容性问题

3. 🛠️ 现代化开发体验

  • Vue 3 Composition API:基于最新的 Vue 3 语法开发
  • Vite 构建:快速的开发和构建体验
  • SCSS 支持:使用现代 SCSS 编译器,支持 @use 语法
  • ESLint + Prettier:统一的代码风格和质量保证

4. 🔧 强大的工具库

内置丰富的工具函数,开箱即用:

  • HTTP 请求:基于 luch-request 的网络请求库
  • 路由管理:简化的路由跳转和参数传递
  • 表单验证:常用的验证规则函数
  • 颜色处理:颜色转换和渐变计算
  • 防抖节流:性能优化工具函数
  • 日期处理:基于 dayjs 的日期工具

📁 项目结构

src/uv-ui/
├── components/           # UI 组件 (90+ 个组件)
│   ├── uv-button/       # 按钮组件
│   ├── uv-input/        # 输入框组件
│   ├── uv-modal/        # 模态框组件
│   └── ...              # 更多组件
├── libs/                # 工具库
│   ├── config/          # 配置文件
│   ├── css/             # 样式文件
│   ├── function/        # 工具函数
│   ├── hooks/           # Vue 3 Hooks
│   ├── luch-request/    # HTTP 请求库
│   └── utils/           # 通用工具
├── index.ts             # 入口文件
├── index.d.ts           # 类型声明文件
├── package.json         # 包配置
└── README.md            # 说明文档

🔨 工具函数

HTTP 请求

// GET 请求
const response = await uni.$uv.http.get('/api/users');

// POST 请求
const result = await uni.$uv.http.post('/api/users', {
  name: 'John',
  age: 25,
});

// 请求拦截器
uni.$uv.http.interceptors.request.use(
  config => {
    config.headers.Authorization = `Bearer ${token}`;
    return config;
  },
  error => Promise.reject(error)
);

路由管理

// 基本页面跳转 (默认 navigateTo)
uni.$uv.route('/pages/detail/index', { id: 1 });

// 高级配置跳转
uni.$uv.route({
  type: 'navigateTo',
  url: '/pages/detail/index',
  params: { id: 1 },
  animationType: 'slide-in-right',
  animationDuration: 300,
});

// 替换当前页面
uni.$uv.route({
  type: 'redirectTo',
  url: '/pages/login/index',
});

// 关闭所有页面并跳转
uni.$uv.route({
  type: 'reLaunch',
  url: '/pages/home/index',
});

// 跳转到 tabBar 页面
uni.$uv.route({
  type: 'switchTab',
  url: '/pages/tabbar/home',
});

// 返回上一页或多级页面
uni.$uv.route({
  type: 'navigateBack',
  delta: 2,
});

表单验证

// 手机号验证
uni.$uv.test.mobile('***'); // true

// 邮箱验证
uni.$uv.test.email('test@example.com'); // true

// 身份证验证
uni.$uv.test.idCard('110101199003070134'); // true

颜色处理

// 颜色渐变
const gradient = uni.$uv.colorGradient('#ff0000', '#0000ff', 10);

// 十六进制转 RGB
const rgb = uni.$uv.hexToRgb('#ff0000'); // [255, 0, 0]

// RGB 转十六进制
const hex = uni.$uv.rgbToHex(255, 0, 0); // '#ff0000'

防抖节流

// 防抖函数
const debouncedFn = uni.$uv.debounce(() => {
  console.log('防抖执行');
}, 300);

// 节流函数
const throttledFn = uni.$uv.throttle(() => {
  console.log('节流执行');
}, 1000);

组件列表

下表为 uvui-ts 的组件清单,所有组件都经过 TypeScript 重构,支持完整的类型定义。

组件名 组件说明
uv-action-sheet 底部操作菜单
uv-add-tips 添加提示
uv-album 相册
uv-alert 警告提示
uv-avatar 头像
uv-avatar-group 头像组
uv-back-top 返回顶部
uv-badge 徽标数
uv-button 按钮
uv-calendar 日历
uv-calendars 新版日历(推荐)
uv-cell 单元格
uv-checkbox 复选框
uv-code 验证码倒计时
uv-code-input 验证码输入
uv-collapse 折叠面板
uv-column-notice 列通知
uv-count-down 倒计时
uv-count-to 数字滚动
uv-datetime-picker 时间选择器
uv-divider 分割线
uv-drop-down 下拉筛选
uv-empty 内容为空
uv-float-drawer 浮动抽屉
uv-form 表单
uv-gap 间隔槽
uv-grid 宫格布局
uv-icon 图标
uv-image 图片
uv-index-list 索引列表
uv-input 增强输入框
uv-keyboard 键盘
uv-keyboard-car 车牌键盘
uv-keyboard-number 数字键盘
uv-line 线条
uv-line-progress 线形进度条
uv-link 超链接
uv-list 列表
uv-load-more 加载更多
uv-loading-icon 加载动画
uv-loading-page 加载页
uv-modal 模态框
uv-navbar 自定义导航栏
uv-no-network 无网络提示
uv-notice-bar 滚动通知
uv-notify 消息提示
uv-number-box 步进器
uv-overlay 遮罩层
uv-parse 富文本解析器
uv-pick-color 颜色选择器
uv-picker 选择器
uv-popup 弹出层
uv-preview-video 视频预览
uv-qrcode 二维码
uv-radio 单选框
uv-rate 评分
uv-read-more 展开阅读更多
uv-row 栅格布局
uv-row-notice 行通知
uv-safe-bottom 安全底部
uv-scroll-list 横向滚动列表
uv-search 多功能搜索框
uv-skeleton 骨架屏
uv-slider 滑动选择器
uv-status-bar 状态栏
uv-steps 步骤条
uv-sticky 吸顶
uv-subsection 分段器
uv-swipe-action 滑动单元格
uv-swiper 轮播图
uv-switch 开关选择器
uv-tabbar 底部导航栏
uv-tabs 标签选项卡
uv-tags 标签
uv-text 文本
uv-textarea 增强文本域
uv-toast 消息提示
uv-toolbar 工具栏
uv-tooltip 长按提示
uv-transition 动画
uv-upload 上传
uv-vtabs 垂直选项卡
uv-waterfall 瀑布流

⚠️ 重要:tsconfig.json 配置

为了获得完整的智能提示,你的项目 tsconfig.json 必须包含以下配置

{
  "compilerOptions": {
    "moduleResolution": "bundler",
    "module": "ESNext",
    "target": "ESNext"
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

关键配置说明

  • "moduleResolution": "bundler" - 必须设置,否则无法识别 uvui-ts 组件类型
  • "module": "ESNext" - 支持现代 ES 模块语法
  • "target": "ESNext" - 编译目标为最新 ES 标准
  • "include" - 指定 TypeScript 编译包含的文件类型,确保 .vue 文件被正确处理

⚠️ 注意

  • 缺少 "moduleResolution": "bundler" 将导致组件无智能提示
  • 需要 TypeScript 4.7+ 版本支持
  • 适用于 Vite、Webpack 等现代构建工具

🔗 链接

💬 交流反馈

欢迎加入我们的 QQ 群交流反馈:

uvui-ts 官方群:***

📄 开源协议

遵循 MIT 开源协议,意味着您无需支付任何费用,也无需授权。

🤝 贡献指南

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

🙏 致谢

感谢所有为 uvui-ts 做出贡献的开发者们!


注意:本项目基于 uv-ui 1.x 版本改造而来,感谢原作者的开源贡献!

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议