基于Vue3小兔鲜新版(公司营销版),根据实际情况修改~

创建项目并整理目录

1. 创建项目

cnpm init vue@latest

使用 cnpm 而不是 npm ,会快亿点!

image.png

cnpm install

2. 整理目录

image-20240109221234273

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预处理器,需要开发者单独安装

cnpm i sass -D

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的组件中,按照官方的配置文档来

  1. 自动导入定制化样式文件进行样式覆盖
  2. 按需定制主题配置 (需要安装 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

cnpm i axios

2. 基础配置

官方文档地址:https://axios-http.com/zh/docs/intro
基础配置通常包括:

  1. 实例化 - baseURL + timeout
  2. 拦截器 - 携带token 401拦截等

新建utils/http.js

import axios from 'axios'

// 创建axios实例
const http = axios.create({
baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net',
timeout: 5000
})

// axios请求拦截器
http.interceptors.request.use(config => {
return config
}, e => Promise.reject(e))

// axios响应式拦截器
http.interceptors.response.use(res => res.data, e => {
return Promise.reject(e)
})


export default http

3. 修改基地址

修改http.js

const http = axios.create({
// baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net',
baseURL:'/api',
timeout: 5000
})

修改vite.config.js,在末尾添加:

server: {
proxy: {
'/api': {
target: 'http://127.0.0.1:8080',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '') // 不可以省略rewrite
}
}
}

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>
// createRouter:创建router实例对象
// createWebHistory:创建history模式的路由

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),
// path和component对应关系的位置
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. 静态资源引入

  1. 图片资源 - assets 目录下新建 images 文件夹

  2. 样式资源 - 把 common.scss 文件(小兔鲜配套素材)放到 styles 目录下

  3. 修改main.js,引入初始化样式文件,同时注掉自带的main.css

// import './assets/main.css'
import '@/styles/common.scss'

2. Error Lens插件安装

image.png

IDEA没有这个插件,跳过(

scss变量自动导入

新建styles/var.scss

$xtxColor: #27ba9b;
$helpColor: #e26237;
$sucColor: #1dc779;
$warnColor: #ffb302;
$priceColor: #cf4444;

修改vite.config.js

css: {
preprocessorOptions: {
scss: {
// 自动导入scss文件
additionalData: `
@use "@/styles/element/index.scss" as *;
@use "@/styles/var.scss" as *;
`,
}
}
}

参考链接

3. 项目起步 (yuque.com)