# uni-basic **Repository Path**: wangbin3162/uni-basic ## Basic Information - **Project Name**: uni-basic - **Description**: uni-app基础工程 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-01-09 - **Last Updated**: 2023-01-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # uni-basic ## 一、介绍 uni-app基础工程 ## 二、目录结构 整个目录结构的介绍,分别代表每个文件夹和文件的作用,开头*标识的,不需要进行操作,可以忽略的文件夹 ├── api // 所有请求相关资源,modules文件里存放具体模块的接口,统一请求 │ ├── modules // modules文件里存放具体模块的接口,后缀统一增加.api予以区分 │ ├── config.js // 请求封装配置文件,区分不同环境,不同参数配置 │ └── request.js // 统一封装的请求文件,包含请求的拦截器和接口包装函数 ├── assets // 资源文件,存储公共资源 │ └── styles // 公共样式文件夹 ├── components // 公共组件,存储和页面没有关联的通用组件,采用一级层级,内部组件会自动注册 │ └── c-xxx // 通用组件编写方式,内部组件和文件夹同名,以c-开头,方便与其他引入的组件区分 ├── docs // *打包部署h5的静态资源,不用管,实际项目删除即可 ├── node_modules // *依赖安装文件夹 ├── pages // 实际存放的页面文件夹,里面包含所有页面级别的内容,采用一级路径,如包含子页面则在内部添加编写即可 │ ├── index // 首页 │ ├── login // 登录配置页面 │ └── mine // 我的页面 ├── router // 路由文件夹 │ └── router.js // 路由文件,集成路由导航守卫,监听路由跳转 ├── static // 静态无需编译的文件夹,里面主要存放所有图片资源 ├── store // vuex状态管理文件夹 │ ├── modules // modules存放不同状态管理模块,注意,其实一般情况下,大部分功能状态都无需放置到全局 │ └── index.js // store入口文件 ├── uni_modules // *uni插件安装目录 ├── unpackage // *打包部署后的文件 ├── utils // util工具包,自定义工具函数放置在这 ├── .gitignore // *git 忽略项 ├── App.vue // 入口页面 ├── index.html // *入口静态文件 ├── main.js // 入口文件 加载组件 初始化等 ├── mainifest.json // *项目配置文件,用于设置打包等相关参数 ├── package.json // *依赖包文件 ├── page.json // 页面相关配置文件,每个页面路由,全局参数都需要在此添加和编辑 ├── uni.scss // 全局样式属性定义,用于定义主题等相关属性。自动注入,全局可用。 └── vue.config.js // vue配置文件 ## 三、部分配置项说明 ### 1、请求接口的封装 api文件夹统一封装了请求模块,request.js 封装了统一的请求拦截,和接口调用函数,不同模块的api需要在不同的modules里进行分别管理,用法参考user config文件配置了请求相关的配置信息,如baseURL,header等。需要根据实际业务进行配置和修改。 ### 2、路由拦截器 全局借助了uni-simple-router插件封装了路由的跳转拦截器,部分代码如下。 ```js //全局路由前置守卫 router.beforeEach(async (to, from, next) => { // 判断当前窗口是白名单,如果是则不重定向路由 const pass = whiteList.some((item) => item === to.fullPath) const token = uni.getStorageSync('token') if (!pass && !token) { uni.navigateTo({ url: '/pages/login/login' }) } if (token && token !== 'undefined') { const userInfo = store.state.user.userInfo if (!userInfo) { try { await store.dispatch('user/getUserInfo') } catch (error) { await store.dispatch('user/logout') } } } next() }) ``` 其中前置路由拦截,主要会根据是否存在token及白名单进行处理,调取不同的业务逻辑 ### 3、全局状态管理 store文件夹封装了全局vuex状态管理,其中index.js为入口文件,如需要增加模块,则需要在modules文件夹里编写。参考app模块,自行 根据业务模块增加,但实际业务中不太推荐状态全局化。 ### 4、页面配置 pages.json用于配置全部页面相关的信息,如新增一个页面需要在pages文件夹里创建,同时也需要在当前json文件中进行增加和编辑。 ### 5、vue.config 暂时不用增加额外配置,借助uni-read-pages插件,项目会自动读取pages.json中的页面信息自动生成路由并生成路由表,同时,借助unplugin-vue2-script-setup/webpack 插件,实现了vue2使用script setup语法糖的功能 ### 6、通用组件封装 components文件夹统一封装与页面无关的通用组件,统一使用c-开头,并在pages.json中配置easycom进行自动注入。 ## 四、规范要求说明 1、新增页面后必须在pages.json中进行注入,在pages文件夹右键新增时可以勾选自动添加至json进行创建。 2、图片引用统一使用标签进行设置,以此来实现多端兼容,原生标签不用 3、所有样式表class,推荐使用全小写加中划线-连字符,如login-box类似这种。 4、所有通用组件,均以第一层级添加至components文件夹内进行自动注入,如组件过于复杂,可在组件文件夹内增加多个vue文件进行组装。 5、默认依赖vue2,但项目中引入了@vue/composition-api插件,和setup插件,以供vue2使用composition-api和setup语法糖。 6、推荐使用vue3的兼容setup兼容写法,但使用时可能会遇到部分问题,因此,不强求所有页面组件等全用vue3兼容写法,但仍需要优先考虑vue3写法。