# uniapp 现代化的 Uniapp 开发模板。 使用 vue3 开发,已配置好**多语言**、**主题切换**等特色功能。 ## 支持平台 - h5 - 小程序 - ios - android ## 运行 > 环境要求: node >= 18.20.4 pnpm >=6.32.3 ```bash # 安装依赖 pnpm install # 启动h5开发环境 pnpm dev:h5 # 启动微信小程序开发环境 pnpm dev:mp-weixin # 启动ios开发环境 pnpm dev:app-ios ``` 效果图:
## 技术栈 uniapp + vue3 + wot design uni + vite5 + pinia + typescript + unocss + sass ## 功能 - [x] 布局设置 - [x] 基础组件 - [x] 多语言 - [x] 主题切换 - [x] 路由拦截 - [x] 权限管理 - [x] 请求拦截 - [x] 状态管理 - [x] 状态持久化 - [x] 网络请求 - [x] 预设图标 - [x] 代码检查 - [x] 支持分包 - [x] 小程序开发 - [x] 自定义 tabbar - [x] 自定义 tabbar keepalive效果 - [x] 接口请求支持防抖 - [ ] app 检查升级 ### 路由权限 支持路由权限控制,比如某些页面需要登录才能查看,通过`pages.json` 中的页面配置属性 `actions`配置。 `interceptors/router.ts` 是路由拦截的核心文件,会自动拦截`navigateTo`、`reLaunch`、`redirectTo`等方法的路由跳转,判断是否需要登录,如果需要登录权限,需要登录权限的会跳转到权限提醒页面。 ```json { "root": "subPages/test", "name": "test", "pages": [ { "path": "index", "actions": ["login"], "layout": true, "style": { "navigationStyle": "custom" } } ] } ``` ### 接口请求防抖 支持接口请求防抖,避免短时间内出现重复请求,浪费服务器资源。 可以在请求配置中设置是否需要防抖。 ```ts import { request } from '@/utils/request' request.get(`pet/findByStatus`, { loading: true, // 是否显示loading disableDebounce: false, // 是否禁用防抖 debounceTime: 500, // 防抖时间 }) ``` ### 布局设置 使用 [@uni-helper/vite-plugin-uni-layouts](https://github.com/uni-helper/vite-plugin-uni-layouts) 实现全局的布局组件,`src/layouts/default.vue` 是默认的布局,该布局实现了一些基础页面功能,比如内容边距和页脚等。 在添加页面时,页面默认是被包裹在 `default.vue` 布局中,也可以不使用布局,或者自定义新的布局。 1. 使用默认布局 默认使用 `default.vue` 布局,无需指定 `layout` 字段。 ```json "pages": [ { "path": "pages/splash/index", "style": { "navigationStyle": "custom" } }, ] ``` 2. 不使用默认布局 将 `layout` 字段设置为 `false` 即可。 ```json "pages": [ { "path": "pages/splash/index", "layout": false, "style": { "navigationStyle": "custom" } }, ] ``` 3. 使用自定义布局 > 注意:不要修改 src/layouts 目录名称 在 `src/layouts` 目录下新建一个布局文件,比如 `new.vue`,你可以自由的在这个文件中添加你所需要的内容,需要注意的是不要忘记设置一个默认插槽来放置你的页面。 ```vue ``` ### 基础组件 提供了一些基础组件,使用时无需引入,直接使用即可,你可以使用首字母大写驼峰或者字母小写连字符的方式引用。 ```vue ``` - MConfigProvider 全局的系统配置组件,每个页面都会插入在该组件下,借助 `pinia` 和 `page-meta` 用于切换主题后同步每个页面的主题设置。 需要自定义深色主题和亮色主题下的导航条颜色,可在该组件内设置。 > 通过自定义的 vite 插件 vite-plugin-uni-provider 来实现,插件位于 build 目录下 - MSafeAreaTop 用于设置顶部安全区域 - MCard 卡片布局组件,将内容包裹在卡片样式中,可以通过 `space` 属性来实现 flex 布局的间距效果和分隔符。 - MContent 布局组件,用于包裹页面内容,可以设置页面的背景色,方便用于统一整个应用的页面布局。 - MFooter 页脚组件。 - MIcon svg 图标组件,通过 `name` 属性来指定图标名称,图标放置在 `src/assets/icons` 目录下,你可以通过 `svg` 格式来添加自定义图标。 - MNavbar 导航栏组件,用于显示导航栏。 - MTabbar 标签栏组件,用于显示标签栏。 ### husky 配置说明 安装 husky > nodejs >= 18 ```bash pnpm add husky@8.0.3 -D ``` 配置 package.json 配置该脚本后,install 后会自动执行该命令 ```json script : { "prepare": "husky install" } ``` 添加 git 钩子 ```bash npx husky add .husky/pre-commit "pnpm pre-commit" ``` 安装 lint-staged 用于只检查暂存区的文件 ```bash pnpm add lint-staged -D ``` 配置 lint-staged ```json "lint-staged": { "*.{vue,js,ts,jsx,tsx}": [ "pnpm format", "pnpm lint" ], "*.{css,scss,vue,html}": [ "pnpm format", "pnpm lint:style" ] } ``` 安装 eslint 和配置 配置 lint 脚本命令 添加 husky commit 钩子 ```bash npx husky add .husky/pre-commit "npm run lint" ``` 安装和配置 commitlint 添加 husky commit type校验 钩子 ```bash npx husky add .husky/commit-msg "npx --no-install commitlint --edit $HUSKY_GIT_PARAMS" ``` 问题1: husky 不生效? > 找到项目的.git 文件,查看是否有hooks目录及文件,没有的话,手动安装husky;如有hooks目录,尝试删除该目录后卸载husky后重新安装,重新设置husky钩子函数