更新记录

1.2.0(2025-01-11) 下载此版本

更换组件库至 wot design,优化部分开发体验。

1.1.0(2024-12-30) 下载此版本

增强功能,重大更新!

1.0.0(2024-12-26) 下载此版本

1.0.0(2024-12-25)

查看更多

平台兼容性

Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
app-vue app-nvue × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
× × × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
×

uniapp-template

一个注重"功能"和"开发体验"的 uniapp 模板。

🛠️ 技术栈

🔨 快速开始

# 安装依赖
pnpm install

# 开发
pnpm dev            # H5
pnpm dev:mp-weixin     # 微信小程序

# 打包
pnpm build

✨ 特性

🎨 主题系统

  • 运行时动态切换主题
  • 基于 CSS 变量实现
  • 支持小程序和 H5

⚡️ 请求管理

  • 基于 alova 的请求策略
  • OpenAPI 自动生成
  • 全局加载状态管理
  • 请求缓存与共享、Token 自动注入
  • 推荐安装 alova 的 vscode 插件提升开发体验
  • 关于 alova 不 await 或者不 .then 就不执行的情况,使用 useRequest 就行了,否则必须 await 或者 .then

🚀 开发体验

  • API 自动引入(Vue/Pinia/Alova)
  • ESLint + UnoCSS 代码规范
  • TypeScript 类型支持、Vue3 代码片段
  • store、hook、Vue 和 uniapp API 自动引入
  • 支持 $ 开头的功能直接使用,并拥有完整的类型提示
  • 支持自动压缩上传服务器或者阿里云OSS或者你可以定义其他上传方式
  • 全局等待加载,优雅处理全局异步状态管理、不阻塞ui渲染,可选并行或等待

📱 路由增强

  • 基于 name 的路由跳转
  • 路由守卫拦截、权限控制、页面预加载
  • 按钮权限自定义 hasPermission 函数,然后添加自动导入,或者挂载到vue实例上,在页面中使用 v-if 判断

📦 分包优化

📖 开发指南

开发环境

  • Node.js: 20+(现在很多项目都要求node20以上)
  • 包管理器: pnpm(节省磁盘空间)
  • IDE: VSCode(会自动推荐插件安装)

文档说明

  • 代码中包含详细的示例和注释,建议通过阅读源码来掌握框架用法
  • 代码结构清晰简单,容易理解和上手

组件说明

  • 支持 component is 动态组件
  • 内置 z-paging 列表组件
  • 优化的自定义 TabBar

工具函数

  • 缓存管理(默认7天)
  • 全局模板变量(支持ts类型定义)
  • 加密解密,md5,base64,aes

组件库说明

  • 默认使用 wot-design 组件库,但不强制绑定,uvui 请参考历史 commit
  • 建议使用 z-tabs 替代 wd-tabs,对 zpaging 支持更友好
  • 得益于主题系统的设计,可以方便地切换到其他组件库
  • 图标库使用 i-lucide-*,或者 wd-icon,前者按需导入,后者则全部被导入了

注意事项

  • 关于 public 文件夹,原则上来说静态图片都应该放在 static 下面,public 的存在是为了放一些需要在web服务器根目录的给某些app嵌套h5要求放一些文件
  • 关于 hooks,拥有自动导入,定义的 hooks 只要使用 export 导出,就可以自动导入
  • 组件库使用 wot-design(开发体验最好用的组件库)
  • 环境变量配置在 .env 和 .env.* 文件
  • 分包配置在 vite.config.ts,分包优化在 pages.config.ts
  • 如果自动格式化 eslint 插件没生效。请安装依赖后重启 vscode
  • 如果 ts 服务出现异常,请使用 ctrl + shift + p 然后输入 ts server restart,或者重启 vscode
  • 如果对 tabbar 有严格要求,可以把 custom 移除,使用原生的
  • 关于 pinia 持久化,推荐使用 watch 手动控制,然后在初始化时获取

项目结构

├── .vscode # VSCode 配置
│ ├── extensions.json # 推荐插件
│ └── vue3.code-snippets # Vue3 代码片段
├── env # 环境变量配置
├── plugins # Vite 插件
├── public # 公共资源
├── src
│ ├── api # API 接口
│ ├── components # 组件
│ │ ├── tab-bar # 自定义 TabBar
│ │ └── zq-ui # 自动注册组件
│ ├── hooks # 钩子函数(自动导入)
│ ├── layouts # 布局组件
│ ├── pages # 主包页面
│ │ ├── index # 首页
│ │ ├── my # 我的
│ │ ├── test-page # 测试页面
│ │ └── theme # 主题设置
│ ├── pages-sub # 分包页面
│ │ └── list # 列表页面
│ ├── router # 路由配置
│ ├── store # 状态管理
│ │ └── modules # Store 模块
│ ├── types # 类型定义
│ ├── utils # 工具函数
│ ├── App.vue # 根组件
│ ├── main.ts # 入口文件
│ ├── manifest.json # 应用配置
│ ├── pages.json # 页面配置
│ └── uni.scss # 主题样式
├── static # 静态资源
├── .eslintrc.json # ESLint 配置
├── .gitignore # Git 忽略文件
├── manifest.config.ts # 清单配置
├── package.json # 项目配置
├── pages.config.ts # 页面配置
├── tsconfig.json # TypeScript 配置
├── uno.config.ts # UnoCSS 配置
└── vite.config.ts # Vite 配置

在我印象中最理想的 uniapp 组件库 应该是 radix、shadcn/ui、origin ui 那样的组件库,希望有人能实现一个🙏。

🤝 贡献

欢迎提交 Issue 和 PR!

📄 开源协议

MIT License © 2024 zhe-qi

隐私、权限声明

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

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

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

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问