cache 缓存层
统一存放缓存的实现类
config 配置层
controller只做简单的调用,不做具体的逻辑实现
controller 控制器
service 服务层 - impl 实现层
validate Dto层
vo Vo层
负责返回前端规定的字段格式
resources 资源目录
common 公共类库
core 核心目录
entity 实体目录
exception 异常目录
mapper Mapper
plugin 扩展插件
utils 目录
ArithUtil : 算术运算工具
ListUtil : 列表数组工具
MapUtil : Map对象工具
ConfigUtil : 配置管理工具
HttpUtil : Http请求工具
IpUtil : Ip获取工具
RedisUtil : Redis工具
RequestUtil : 请求信息工具
SpringUtil : Spring容器工具
TimeUtil : 时间日期工具
ToolsUtil : 通用工具类
UrlUtil : 资源路径处理工具
YmlUtil : application配置获取工具
validator 自定验证器
负责请求参数的处理和对参数的校验
开启IDEA的目录注释,增加源码的阅读效率 treeinfotip
安装操作: File -> Settings -> Plugins -> Marketplace
swagger默认是开启状态, 如果你需要关闭可以在 application.yml
中进行配置
注意: 在生产环境中, 最好把swagger关闭
访问地址: http://localhost:8080/swagger-ui/index.html
PS: 地址中的 http://localhost:8080 改成你自己的项目地址
编辑器推荐使用Visual Studio Code,编辑器插件推荐安装ESLintopen in new window、Prettier ESLintopen in new window、Tailwind CSS IntelliSenseopen in new window、Vue Language Features (Volar)open in new window、TypeScript Vue Plugin (Volar)open in new window
使用eslint去检查代码规范,使用prettier去格式化代码
使用vscode进行开发,搭配vscode的一些插件,实现自动修改一些错误,同时项目中也自带了vscode的一些配置,在 .vscode/setting.json 文件中。
执行命令:
yarn lint
// 如果没安装yarn,使用npm run lint
变量命名规则:需要以VITE_
为前缀的
如何使用:import.meta.env.VITE_
路径:src/config/index.ts
,说明如下:
const config = {
terminal: 1, //终端
title: '后台管理系统', //网站默认标题
version: '1.2.1', //版本号
baseUrl: `${import.meta.env.VITE_APP_BASE_URL}/`, //请求接口域名
urlPrefix: 'adminapi', //请求默认前缀
timeout: 10 * 1000 //请求超时时长
}
修改系统默认的主题 路径:src/config/setting.ts
,说明如下:
const defaultSetting = {
sideWidth: 200, //侧边栏宽度
sideTheme: 'light', //侧边栏主题
sideDarkColor: '#1d2124', //侧边栏深色主题颜色
theme: '#4A5DFF', //主题色
successTheme: '#67c23a', //成功主题色
warningTheme: '#e6a23c', //警告主题色
dangerTheme: '#f56c6c', //危险主题色
errorTheme: '#f56c6c', //错误主题色
infoTheme: '#909399' //信息主题色
}
//以上各种主题色分别对应element-plus的几种行为主题
目前路由分为两部分,一部分是静态路由:src/router/routes.ts
,一部分是动态路由:在系统中的菜单中添加。
Vue 路由懒加载是一种技术,它可以让我们按需加载 Vue 应用程序的路由组件,而不是一次性加载所有的路由组件。这可以显著提高应用程序的性能和响应速度。
在 Vue 中,路由懒加载通常使用 import
语句来实现。具体来说,我们可以将路由组件定义为一个函数,当需要加载该组件时,我们调用该函数来获取组件的定义。例如,在 vue-router
中,我们可以使用 component: () => import('@/views/Home.vue')
的方式来实现懒加载。
以下是一个示例路由配置,其中使用了路由懒加载:
{
path: '/home',
name: 'Home',
component: () => import('@/views/Home.vue')
}
需要注意的是,由于路由懒加载使用了动态导入(Dynamic Imports)功能,因此需要确保你的项目支持 ES6 模块化,并且需要使用 webpack 进行打包构建。
path: '/path' // 路由路径
name:'router-name' // 设定路由的名字
meta : {
title: 'title' // 设置该路由在侧边栏的名字
icon: 'icon-name' // 设置该路由的图标
activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。
query: '{"id": 1}' // 访问路由的默认传递参数
hidden: true // 当设置 true 的时候该路由不会在侧边栏出现
hideTab: true //当设置 true 的时候该路由不会在多标签tab栏出现
}
component: () => import('@/views/user/setting.vue') // 路由组件
import 'vue-router'
declare module 'vue-router' {
// 扩展 RouteMeta
interface RouteMeta {
title?: string
icon?: string
hidden?: boolean
activeMenu?: string
hideTab?: boolean
}
}
使用了插件unplugin-auto-importopen in new window、unplugin-vue-componentsopen in new window、vite-plugin-style-importopen in new window
写在components
中的组件和element-plus
的组件都是自动且按需引入的,不需要在组件中注册
使用scssopen in new window作为预处理语言,同时也使用了tailwindcssopen in new window
├──styles
│ ├── dark.css # 深色模式下的css变量
│ ├── element.scss # 修改element-plus组件的样式
│ ├── index.scss # 入口
│ ├── tailwind.css # 引入tailwindcss样式表
│ ├── var.css # css变量
具体使用说明详见https://tailwindcss.com/open in new window
在vscode中安装插件Tailwind CSS IntelliSenseopen in new window,可以得到提示,如果没有提示出现,就按空格键
黑暗模式的原理是利用css变量和在html标签添加class="dark"
实现
注意
apple M系列芯片在uniapp下编译的报错处理:在node_modules
下复制粘贴esbuild-darwin-arm64
一份,重命名为esbuild-darwin-64
如何配置请参考uniapp pages.json 页面路由open in new window,此外系统也对其进行了扩展,如下:
...
{
"path": "",
"style": {
"navigationBarTitleText": "个人设置"
},
// 扩展项
"auth": true
// 用于页面跳转拦截,auth为true则代表页面需要登陆才能查看
// 为false则不需要登陆
},
...
路由拦截的原理是通过uni.addInterceptor
对uni.navigateTo
、uni.redirectTo
、uni.reLaunch
、uni.switchTab
等进行拦截,因此必须使用api形式的跳转才能被拦截到
uni.addInterceptor
文档详见uniapp拦截器open in new window
路由跳转api文档详见uniapp页面和路由open in new window
注意
拦截uni.switchTab
本身没有问题。但是在微信小程序端点击tabbar
的底层逻辑并不是触发uni.switchTab
。所以误认为拦截无效,此类场景的解决方案是在tabbar页面的页面生命周期onShow中处理。
位于uniapp/src/components
中的组件无需注册,不过需要遵循uniapp easycom
规则,需符合components/组件名称/组件名称.vue目录结构,也可以自定义规则,详见文档uniapp easycom文档
HBuilderX 2.5.5
起支持easycom
组件模式。
传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。easycom
将其精简为一步。只要组件安装在项目根目录或uni_modules的components目录下,并符合components/组件名称/组件名称.vue
或uni_modules/插件ID/components/组件名称/组件名称.vue
目录结构。就可以不用引用、注册,直接在页面中使用。如下:
不管components目录下安装了多少组件,easycom
打包后会自动剔除没有使用的组件,对组件库的使用尤为友好。
组件库批量安装,随意使用,自动按需打包。以官方的uni-ui
为例,在HBuilderX新建项目界面选择uni-ui
项目模板,只需在页面中敲u,拉出大量组件代码块,直接选择,即可使用。大幅提升开发效率,降低使用门槛。
在uni-app插件市场下载符合components/组件名称/组件名称.vue
目录结构的组件,均可直接使用。
easycom
是自动开启的,不需要手动开启,有需求时可以在pages.json
的easycom
节点进行个性化设置,如关闭自动扫描,或自定义扫描匹配组件的策略。设置参数如下:
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
autoscan | Boolean | true | 是否开启自动扫描,开启后将会自动扫描符合components/组件名称/组件名称.vue 目录结构的组件 |
custom | Object | - | 以正则方式自定义组件匹配规则。如果autoscan 不能满足需求,可以使用custom 自定义匹配规则 |
自定义easycom配置的示例
如果需要匹配node_modules内的vue文件,需要使用packageName/path/to/vue-file-$1.vue
形式的匹配规则,其中packageName
为安装的包名,/path/to/vue-file-$1.vue
为vue文件在包内的路径。
"easycom": {
"autoscan": true,
"custom": {
"^uni-(.*)": "@/components/uni-$1.vue", // 匹配components目录内的vue文件
"^vue-file-(.*)": "packageName/path/to/vue-file-$1.vue" // 匹配node_modules内的vue文件
}
}
复制代码
说明
easycom
方式引入的组件无需在页面内import
,也不需要在components
内声明,即可在任意页面使用
easycom
方式引入组件不是全局引入,而是局部引入。例如在H5端只有加载相应页面才会加载使用的组件
在组件名完全一致的情况下,easycom
引入的优先级低于手动引入(区分连字符形式与驼峰形式)
考虑到编译速度,直接在pages.json
内修改easycom
不会触发重新编译,需要改动页面内容触发。
easycom
只处理vue组件,不处理小程序专用组件(如微信的wxml格式组件)。不处理后缀为.nvue的组件。但vue组件也可以全端运行,包括小程序和app-nvue。可以参考uni ui,使用vue后缀,同时兼容nvue页面。
nvue
页面里引用.vue
后缀的组件,会按照nvue方式使用原生渲染,其中不支持的css会被忽略掉。这种情况同样支持easycom
下面以pinia为例子:在src/plugins/modules
下面新建一个文件pinia.ts
// pinia.ts
import { App } from 'vue'
import { createPinia } from 'pinia'
const pinia = createPinia()
export default (app: App) => {
app.use(pinia)
}
这样就完成了插件的注册,不需要将文件引入到main.ts
HbuildX安装插件Tailwind CSS语言服务open in new window,点击链接前往插件
由于小程序有体积和资源加载限制,因此尽量确保每个包的大小小于2M,微信小程序支持总体积一共不能超过20M,因此多分几个包也无所谓,还有主包包含了公共代码,因此尽量将新的页面写到分包里去。如何分包及更多细节请见文档uniapp subpackages
在Uniapp中,可以通过配置manifest.json文件来实现分包。具体步骤如下:
在项目根目录下创建一个名为subpackages的文件夹。
在subpackages文件夹中创建一个子包,例如叫做testPackage。
在testPackage文件夹中创建页面或组件,并在manifest.json文件中进行配置。
示例代码如下:
{
"subPackages": [
{
"root": "subpackages/testPackage",
"pages": [
"pages/testA",
"pages/testB"
]
}
]
}
上面的代码表示将testPackage作为一个子包,其中包含了两个页面testA和testB。在这个示例中,我们将testPackage放在了subpackages文件夹中,但是这并不是必须的,你也可以将它放在任何一个合适的位置。
需要注意的是,一个页面只能属于一个子包,而不能同时存在于多个子包中。
除了上述配置方式外,还可以通过代码动态加载子包。具体方法请参考Uniapp官方文档中的相关章节。
在Uniapp中,分包打包和上传小程序可以参考以下步骤:
在manifest.json文件中配置好子包以及子包所包含的页面或组件。
进入命令行工具,使用命令npm run build
进行打包。在打包时,会根据manifest.json文件中的配置将代码分为主包和子包。
打包完成后,在项目目录下会生成一个dist文件夹,里面包含了主包和子包的所有代码。
登录微信公众平台,进入小程序管理后台,点击“开发”->“开发设置”->“上传代码”,选择刚才生成的dist文件夹。
在上传代码的界面中,需要填写版本号以及版本描述等信息。同时,如果存在分包,则还需要在“分包预览图”中上传子包的预览图。
点击“上传”,等待上传完成后即可提交审核。
需要注意的是,微信小程序对于总体积有一定限制,因此在分包时需要注意控制每个包的大小,避免超过限制。同时,在上传代码时也需要注意填写正确的版本号和版本描述,以便审核人员能够快速了解到本次更新的内容。
仓库地址:https://github.com/webVueBlog/JavaGuideInterview