基于Vue3小兔鲜新版(公司营销版),根据实际情况修改~
创建项目并整理目录
1. 创建项目
2. 整理目录
jsconfig.json配置别名路径
配置别名路径可以在写代码时联想提示路径
{ "compilerOptions" : { "baseUrl" : "./", "paths" : { "@/*":["src/*"] } } }
|
elementPlus引入
1. 安装elementPlus和自动导入插件
cnpm install element-plus --save cnpm install -D unplugin-vue-components unplugin-auto-import
|
2. 配置自动按需导入
修改vite.config.js
import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({ plugins: [ AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), ] })
|
3. 测试组件
<template> <el-button type="primary">i am button</el-button> </template>
|
定制elementPlus主题
1. 安装sass
基于vite的项目默认不支持css预处理器,需要开发者单独安装
2. 准备定制化的样式文件
新建styles/element/index.scss
:
@forward 'element-plus/theme-chalk/src/common/var.scss' with ( $colors: ( 'primary': ( 'base': #27ba9b, ), 'success': ( 'base': #1dc779, ), 'warning': ( 'base': #ffb302, ), 'danger': ( 'base': #e26237, ), 'error': ( 'base': #cf4444, ), ) );
|
3. 自动导入配置
这里自动导入需要深入到elementPlus的组件中,按照官方的配置文档来
- 自动导入定制化样式文件进行样式覆盖
- 按需定制主题配置 (需要安装 unplugin-element-plus)
import { fileURLToPath, URL } from 'node:url' import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import ElementPlus from 'unplugin-element-plus/vite' export default defineConfig({ plugins: [ vue(), AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), ElementPlus({ useSource: true, }), ], resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } }, css: { preprocessorOptions: { scss: { additionalData: ` @use "@/styles/element/index.scss" as *; `, } } } })
|
axios安装并简单封装
1. 安装axios
2. 基础配置
官方文档地址:https://axios-http.com/zh/docs/intro
基础配置通常包括:
- 实例化 - baseURL + timeout
- 拦截器 - 携带token 401拦截等
新建utils/http.js
:
import axios from 'axios'
const http = axios.create({ baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net', timeout: 5000 })
http.interceptors.request.use(config => { return config }, e => Promise.reject(e))
http.interceptors.response.use(res => res.data, e => { return Promise.reject(e) })
export default http
|
3. 修改基地址
修改http.js
:
const http = axios.create({ baseURL:'/api', timeout: 5000 })
|
修改vite.config.js
,在末尾添加:
server: { proxy: { '/api': { target: 'http://127.0.0.1:8080', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, '') } } }
|
target
为后端地址。注意后端的跨域配置代理(可能后面还会发一篇教程~)
4. 封装请求函数并测试
此处测试使用的是小兔鲜的基地址,根据自己后端修改即可。
import http from '@/utils/http'
export function getCategoryAPI () { return http({ url: 'home/category/head' }) }
|
路由整体设计
1. 删除自带页面
修改router/index.js
:
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes: [
] })
export default router
|
然后删除view
目录下的文件
修改App.vue
:
<template> <!-- 一级路由出口组件 --> <RouterView /> </template>
|
2. 路由设计
路由设计原则:找页面的切换方式,如果是整体切换,则为一级路由,如果是在一级路由的内部进行的内容切换,则为二级路由。
分别在views
目录下新建Home、Layout、Login目录,然后分别新建index.vue
<template> 我是登录页 </template>
|
<template> 我是首页 <!-- 二级路由出口 --> <RouterView /> </template>
|
<template> 我是home </template>
|
<template> 我是分类 </template>
|
import { createRouter, createWebHistory } from 'vue-router' import Login from '@/views/Login/index.vue' import Layout from '@/views/Layout/index.vue' import Home from '@/views/Home/index.vue' import Category from '@/views/Category/index.vue'
const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes: [ { path: '/', component: Layout, children: [ { path: '', component: Home }, { path: 'category', component: Category } ] }, { path: '/login', component: Login } ] })
export default router
|
3. 修改eslint配置
修改.eslintrc.cjs
,添加:
rules:{ 'vue/multi-word-component-names':0 }
|
静态资源引入和Error Lens安装
1. 静态资源引入
图片资源 - assets 目录下新建 images 文件夹
样式资源 - 把 common.scss 文件(小兔鲜配套素材)放到 styles 目录下
修改main.js
,引入初始化样式文件,同时注掉自带的main.css
:
import '@/styles/common.scss'
|
2. Error Lens插件安装
IDEA没有这个插件,跳过(
scss变量自动导入
新建styles/var.scss
:
$xtxColor: #27ba9b; $helpColor: #e26237; $sucColor: #1dc779; $warnColor: #ffb302; $priceColor: #cf4444;
|
修改vite.config.js
:
css: { preprocessorOptions: { scss: { additionalData: ` @use "@/styles/element/index.scss" as *; @use "@/styles/var.scss" as *; `, } } }
|
参考链接
3. 项目起步 (yuque.com)
Rean's Blog
Enjoy technology and music