Vue3——大事件管理系统1/3

1.项目概述

在线演示:https://fe-bigevent-web.itheima.net/login

在演示中可以直接进行注册登录,查看相关功能

接口文档:https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835

基地址:http://big-event-vue-api-t.itheima.net

2.配置

pnpn包管理器

安装方式:npm install -g pnpm

创建项目:pnpm create vue

具体方式如下:

①打开相对应目录任务管理器,先安装npm install -g pnpm

②pnpm create vue创建项目,如果权限不够则使用管理员终端,勾选router,Eslint(校验错误),pinia,Perttier(格式化)

③安装全局组件pnpm install,启动程序

husky代码检查

husky是基于git的工具,理解为git中的工具,是git执行中的钩子,在代码提交前进行检查,更符合企业级开发

操作:

①打开bash终端初始化$ git init,输入pnpm dlx husky-init && pnpm install安装配置husky,文件包中出现husky文件夹和pre-commit文件

②更改pre-commit文件命令npm test为pnpm lint,在bash中输入pnpm lint自动校验

pnpm lin会进行全局检验,但一般情况下需要局部检查。

这里只要进行提交就会进行校验,但一般情况下需要先提交暂存区

暂存区eslint校验

①bash中安装pnpm i lint-staged -D

②配置package.json

javascript 复制代码
{
  // ... 省略 ...
  "lint-staged": {
    "*.{js,ts,vue}": [
      "eslint --fix"
    ]
  }
}

{
  "scripts": {
    // ... 省略 ...
    "lint-staged": "lint-staged"
  }
}

③修改per-commit命令为pnpm lint-staged

此时配置后,再提交代码git commit -m '你的指令'------能够进行自动查错

命令如修复错误,查找错误

目录调整

如图所示,多余文件删除。之后安装sass预处理器配置pnpm add sass -D。

这里需要在附件中找到main.scss文件拷贝至assets文件夹

路由初始化

javascript 复制代码
import { createRouter, createWebHistory } from 'vue-router'

// createRouter 创建路由实例,===> new VueRouter()
// 1. history模式: createWebHistory()   http://xxx/user
// 2. hash模式: createWebHashHistory()  http://xxx/#/user

// vite 的配置 import.meta.env.BASE_URL 是路由的基准地址,默认是 '/'
// https://vitejs.dev/guide/build.html#public-base-path

// 如果将来你部署的域名路径是:http://xxx/my-path/user
// vite.config.ts  添加配置  base: my-path,路由这就会加上 my-path 前缀了

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: []
})

export default router

在Vue.app中测试

javascript 复制代码
// 在 Vue3 CompositionAPI 中
// 1. 获取路由对象 router  useRouter
//    const router = useRouter()
// 2. 获取路由参数 route  useRoute
//    const route = useRoute()
import { useRoute, useRouter } from 'vue-router'
const router = useRouter()
const route = useRoute()

const goList = () => {
  router.push('/list')
  console.log(router, route)
}

引入element-ui

element-ui更适合pc端开发

①bash安装pnpm add element-plus

②按需使用------安装插件pnpm add -D unplugin-vue-components unplugin-auto-import

③配置插入vite

这里可以根据官网进行配置。

配置完成后,components中的组件也可以直接使用,无需导入,自动注册

javascript 复制代码
...
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    ...
    AutoImport({
      resolvers: [ElementPlusResolver()]
    }),
    Components({
      resolvers: [ElementPlusResolver()]
    })
  ]
})

Pinia构建用户仓库和持久化

①安装插件pnpm add pinia-plugin-persistedstate -D

②在main.js中使用

javascript 复制代码
import persist from 'pinia-plugin-persistedstate'
...
app.use(createPinia().use(persist))

③配置stores/users,只需要在后面加上persist:true就可实现持久化(页面刷新数据仍然存在)

注意:这里配置persist在return上一层之外

javascript 复制代码
import { defineStore } from 'pinia'
import { ref } from 'vue'

// 用户模块
export const useUserStore = defineStore(
  'big-user',
  () => {
    const token = ref('') // 定义 token
    const setToken = (t) => (token.value = t) // 设置 token

    return { token, setToken }
  },
  {
    persist: true // 持久化
  }
)

因为过多的pinia在main.js中难以维护,所以在stores中创建index.js导入所有pinia设置,再在main.js中导入shores/index进行使用

数据交互-axios配置

①安装pnpm add axios

②配置utils/request.js------编写业务逻辑

javascript 复制代码
import axios from 'axios'

const baseURL = 'http://big-event-vue-api-t.itheima.net'

const instance = axios.create({
  // TODO 1. 基础地址,超时时间
})

instance.interceptors.request.use(
  (config) => {
    // TODO 2. 携带token
    return config
  },
  (err) => Promise.reject(err)
)

instance.interceptors.response.use(
  (res) => {
    // TODO 3. 处理业务失败
    // TODO 4. 摘取核心响应数据
    return res
  },
  (err) => {
    // TODO 5. 处理401错误
    return Promise.reject(err)
  }
)

export default instance
export default {baseURL}

完成基本配置

javascript 复制代码
import { useUserStore } from '@/stores/user'
import axios from 'axios'
import router from '@/router'
import { ElMessage } from 'element-plus'

const baseURL = 'http://big-event-vue-api-t.itheima.net'

const instance = axios.create({
  baseURL,
  timeout: 100000
})

instance.interceptors.request.use(
  (config) => {
    const userStore = useUserStore()
    if (userStore.token) {
      config.headers.Authorization = userStore.token
    }
    return config
  },
  (err) => Promise.reject(err)
)

instance.interceptors.response.use(
  (res) => {
    if (res.data.code === 0) {
      return res
    }
    ElMessage({ message: res.data.message || '服务异常', type: 'error' })
    return Promise.reject(res.data)
  },
  (err) => {
    ElMessage({ message: err.response.data.message || '服务异常', type: 'error' })
    console.log(err)
    if (err.response?.status === 401) {
      router.push('/login')
    }
    return Promise.reject(err)
  }
)

export default instance
export { baseURL }

整体路由设计

javascript 复制代码
import { createRouter, createWebHistory } from 'vue-router'

// createRouter 创建路由实例,===> new VueRouter()
// 1. history模式: createWebHistory()   http://xxx/user
// 2. hash模式: createWebHashHistory()  http://xxx/#/user

// vite 的配置 import.meta.env.BASE_URL 是路由的基准地址,默认是 '/'
// https://vitejs.dev/guide/build.html#public-base-path

// 如果将来你部署的域名路径是:http://xxx/my-path/user
// vite.config.ts  添加配置  base: my-path,路由这就会加上 my-path 前缀了

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {path: '/login', component: () => import('@/views/login/LoginPage.vue')},
    {path: '/',
      component: () => import('@/views/layout/LayoutContainer.vue'),
      redirect: '/article/manage',
      children: [
        {
          path: '/article/manage',
          component: () => import('@/views/article/ArticleManage.vue')
        },
        {
          path: '/article/channel',
          component: () => import('@/views/article/ArticleChannel.vue')
        },
        {
          path: '/user/profile',
          component: () => import('@/views/user/UserProfile.vue')
        },
        {
          path: '/user/avatar',
          component: () => import('@/views/user/UserAvatar.vue')
        },
        {
          path: '/user/password',
          component: () => import('@/views/user/UserPassword.vue')
        },
      ]
    }
  ]
})

export default router
相关推荐
头发多多程序媛2 小时前
解决依赖下载报错,npm ERR! code EPERM
前端·npm·node.js
小蜜蜂dry2 小时前
nestjs学习 - 拦截器(intercept)
前端·nestjs
daols882 小时前
Vue表单vxe-form配置渲染日期范围选择器的用法
javascript·vue.js·vxe-form
CoderLiu2 小时前
Agent 沙箱架构深度解析:从 Pattern 选型到生产级框架设计
前端·人工智能·后端
happymaker06262 小时前
web前端学习日记——DAY02(CSS样式表的使用)
前端·css·学习
fanjinzhi2 小时前
Node.js通用计算15--TypeScript介绍
javascript·typescript·node.js
数据服务生2 小时前
五子棋-html版本
前端·html
BUG创建者2 小时前
openlayers上跟据经纬度画出轨迹
开发语言·javascript·vue·html
IT_陈寒2 小时前
SpringBoot项目启动速度提升300%?这5个隐藏配置太关键了!
前端·人工智能·后端