Vue3 Vite4 ElementPlus TS模板(含Vue-Router4+Pinia4)

这篇具有很好参考价值的文章主要介绍了Vue3 Vite4 ElementPlus TS模板(含Vue-Router4+Pinia4)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

手动安装配置Vue3 ElementPlus模板比较繁琐,网上寻找一些模板不太符合自己预期,因此花点精力搭建一个符合自己需求的架子

采用最新的组件,版本如下:

  • vite 4.3.9
  • vite-plugin-mock 2.9.8
  • vue 3.3.4
  • pinia 2.1.3
  • vue-router 4.2.2
  • element-plus 2.3.6

满足自己以下功能:

  • Vite工具热启动速度快,修改后编译时间短(个人喜好)
  • element-plus 组件丰富,适合快速开发
  • 基本路由功能(vue-router官方推荐,配置也较简单)
  • vite-plugin-mock,方便快速模拟接口返回数据,这个功能比较方便

AntDesignVue组件也比较丰富,后面考虑再搭建一个AntDesignVue的版本

实现效果如下

Vue3 Vite4 ElementPlus TS模板(含Vue-Router4+Pinia4)

功能设计

vue-router4

自动在路由前和后添加NProgress动画效果
如下图在顶部加上一个进度条显示加载进度

Vue3 Vite4 ElementPlus TS模板(含Vue-Router4+Pinia4)

import { createRouter, createWebHashHistory } from 'vue-router'
import NProgress from '~/utils/nprogress'

export const router = createRouter({
    history: createWebHashHistory(),
    routes: [
        {
            path: '/',
            name: 'Root',
            redirect: '/home'
        },
        {
            path: '/home',
            name: 'Home',
            meta: {
                title: '主页'
            },
            component: () => import('~/views/Home.vue'),
            children: []
        },
        {
            path: '/about',
            name: 'About',
            meta: {
                title: '关于'
            },
            component: () => import('~/views/About.vue'),
            children: []
        }
    ],
    strict: true,
    scrollBehavior: () => ({ left: 0, top: 0 })
})

router.beforeEach(() => {
    if (!NProgress.isStarted()) {
        NProgress.start()
    }
})

router.afterEach(() => {
    NProgress.done()
})

vite-plugin-mock

这里有个坑,最新的3.0版本,按照官方配置一直报错,退回到2.9.8正常

1.修改vite.config.ts

import { viteMockServe } from 'vite-plugin-mock'

// https://vitejs.dev/config/
export default defineConfig({
    /****/
    plugins: [vue(), viteMockServe({ mockPath: './mock', localEnabled: true })],
    /****/
})

2.根目录下面添加mock文件夹,新建index.ts

目录结构如下
├── index.html
├── mock
│   └── index.ts
├── src
......
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts

这里模拟了两个路由

// index.ts
import { MockMethod } from 'vite-plugin-mock'
export default [
    {
        url: '/api/test',
        method: 'get',
        response: ({}) => {
            return {
                code: 0,
                data: {
                    name: 'leo'
                }
            }
        }
    },
    {
        url: '/api/table',
        method: 'get',
        response: ({}) => {
            return {
                code: 0,
                data: [
                    { name: 'vue3' },
                    { name: 'vite' },
                    { name: 'vue-router4' },
                    { name: 'pinia' },
                    { name: 'vite-mock' }
                ]
            }
        }
    }
] as MockMethod[]

pinia

按官网定义一个counterstore分别在home.vueabout.vue两个页面使用

Vue3 Vite4 ElementPlus TS模板(含Vue-Router4+Pinia4)

import { defineStore } from 'pinia'

export const useCounterStore = defineStore('counter', {
    state: () => {
        return { count: 0 }
    },
    actions: {
        increment() {
            this.count++
        }
    }
})

Axios封装

所有请求{code:0, data: xxxxxxx ,msg:''}格式
有报错使用ElMessage提示

import axios, { AxiosResponse } from 'axios'
import ElMessage from 'element-plus/lib/components/message/index.js'

// 创建 axios 实例
const service = axios.create({
    //   baseURL: "/api",
    timeout: 50000,
    headers: { 'Content-Type': 'application/json;charset=utf-8' }
})

// 响应拦截器
service.interceptors.response.use(
    (response: AxiosResponse) => {
        const { code, msg } = response.data
        if (code === 0) {
            return response.data
        }
        ElMessage(msg || '系统出错')
        if (code === 401) {
            ElMessage.warning('会话过期,请重新登陆!')
            window.location.href = '/'
        }
        ElMessage.error(msg || 'Error')
        return Promise.reject(new Error(msg || 'Error'))
    },
    (error: any) => {
        ElMessage.error(error.message || '系统出错')
        return Promise.reject(error.message)
    }
)

// 导出 axios 实例
export const request = service

TODO

根据需求添加登录功能、动态获取权限路由信息
创建AntDesignVue分支

项目地址

https://gitee.com/leobest2/my-vue3-template文章来源地址https://www.toymoban.com/news/detail-473733.html

到了这里,关于Vue3 Vite4 ElementPlus TS模板(含Vue-Router4+Pinia4)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vite4+Typescript+Vue3+Pinia 从零搭建(5) - 路由router

    项目代码同步至码云 weiz-vue3-template Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举。 在 src/view 下新建 home.vue 和 login.vue ,内容如下: login.vue 里修改下对应name即可 index.ts 作为路由入口, static.ts 作为静态路由, modules 内还可以

    2024年02月05日
    浏览(44)
  • vue3+vite+ts+elementplus创建项目

    # vue3+vite+ts+pinia 学习笔记 ## 1、创建项目: npm init vite@latest     选择: vue、ts ## 2、进入项目目录后:npm install 安装 ## 3、运行项目: npm run dev ## 4、安装常用插件:     1、安装 npm install vue-router@latest 配置:在src目录下新建router目录,创建index.ts文件代码如下:       ```javascript 创建

    2024年02月09日
    浏览(41)
  • Vue3+vite搭建基础架构(6)--- 使用vue-router

    这里记录下自己在Vue3+vite的项目使用vue-router的过程,不使用ts语法,方便以后直接使用。这里承接自己的博客Vue3+vite搭建基础架构(5)— 使用vue-i18n这篇博客,在该博客项目的基础上增加使用vue-router。 Vue3使用vue-router官方文档:https://router.vuejs.org/zh/installation.html 根据官网给

    2024年02月21日
    浏览(34)
  • Vite4+Typescript+Vue3+Pinia 从零搭建(2) - ts配置

    项目代码同步至码云 weiz-vue3-template 关于tsconfig的配置字段可查看其他文档,如 typeScript tsconfig配置详解 文件修改如下: 修改文件如下: 新建文件夹 types ,用来存放类型定义。比如新建 index.d.ts : 后续也可以新增其他文件,比如 global.d.ts 存放全局定义, router.d.ts 存放路由定

    2024年02月05日
    浏览(47)
  • vue3+vite+pinia+vue-router+ol项目创建及配置

    vite官网 注意:两种方式创建目录结构一致 方式一:vite创建脚手架命令: 命令行:npm create vite@latest 然后选择 方式二:命令行直接声明带上vue 定义:pinia是一个是Vue官方团队推荐代替Vuex的一款轻量级状态管理库。 pinia官网中文文档 命令行:yarn add pinia 或者 npm i pinia vue-rou

    2024年02月16日
    浏览(39)
  • 超级详细 最新 vite4+vue3+ts+element-plus+eslint-prettier 项目搭建流程

    系列文章目录 【element-plus】 table表格每行圆角解决方案 element也通用 【Vue3+Vite+Ts+element-plus】使用tsx实现左侧栏菜单无限层级封装 超级详细GitBook和GitLab集成步骤【linux环境】 1.1、项目创建 执行以下代码将vite将会自动生成初始的 vite4+vue3+ts的项目模板,pnpm、npm、yarn 选择一种执

    2024年02月04日
    浏览(46)
  • 【退役之重学前端】使用vite+vue3+vue-router,重构react+react-router前后端分离的商城后台管理系统

    前言: 对前端各个技术板块,HTML、CSS、JavaScript、ES6、vue家族,整体上能“摸其大概”。笔者计划重构一个基于react的商城后台管理系统。 —— 2024年2月16日 vue3 sass bootstrap ES7 前后端分离 分层架构 模块化开发 npm vite git

    2024年02月20日
    浏览(40)
  • vue3框架Vite + vue Router + ts 登录后返回上一页或首页

    项目(Vue3):Vite + vue Router + ts 登录后跳转情况: ① 项目中有些页面是需要登录后才可以访问的,如果没有登录的情况下,访问该页面会自动跳转到登录页,完成登录操作后,需要再次返回到该页面 ② 如果直接访问登录页,登录后跳转到首页 访问页面时,进行限制,除了部分

    2024年02月04日
    浏览(38)
  • 基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板

    最近得空学习了下uniapp结合vue3搭建跨端项目。之前也有使用uniapp开发过几款聊天/仿抖音/后台管理等项目,但都是基于vue2开发。随着vite.js破局出圈,越来越多的项目偏向于vue3开发,就想着uniapp搭配vite4.x构建项目效果会如何?经过一番尝试果然真香~ uniapp官网提供了  HBuild

    2024年02月09日
    浏览(46)
  • rouyi-vue-pro+vue3+vite4+Element Plus项目中使用生成Vue2+Element UI标准模板

    运行一个pro-vue3的前端项目,以及后端服务 在基础设施-代码生成模块中选择某张数据库表导入,并编辑生成信息,前端类型:Vue2+Element UI标准模板 在vue3项目中创建一个vue文件 1.4 srcapitest.js Vue2+Element UI标准模板生成的前端封装好的request请求接口对象 1.5 报错 问题 :在 更新

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包