vue3.0+typescript+vite2实战:后台管理系统

  • 一、技术栈
  • 二、功能架构
  • 三、框架搭建
  • 四、安装插件
    • 1、路由插件vue-router4安装使用
    • 2、vuex4的安装
    • 3、安装sass和element plus
  • 五、系统开发
    • 1、页面布局
    • 2、侧边栏开发
    • 3、全局使用动态的icon图标
    • 4、全局提示框

一、技术栈


语法演变,vue3.0更加简便!

二、功能架构

三、框架搭建

  1. vite2创建项目
  2. vite2项目结构如下:vue版本为3.2.xx
  3. 或者使用vue cli3构建项目,输入命令vue create xxx,选择语法为vue3.0 .插件包括 router、vuex

四、安装插件

如果用vue-cli3搭建的时候勾选了这些插件,就不用下面的步骤,手动去安装,可以直接使用

1、路由插件vue-router4安装使用

1、输入命令npm i vue-router@4安装 vue-router4
2、新建/router/index.ts配置路由

3、路由配置代码可以参考下面的

//router/index.ts代码
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import Home from '../views/Home.vue'
const routes: Array<RouteRecordRaw> = [{path: '/',name: 'Home',component: Home},{path: '/helloworld',name: 'helloworld',component: () => import('../components/HelloWorld.vue')}
]
const router = createRouter({history: createWebHistory(process.env.BASE_URL),routes
})
export default router//main.js代码
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
createApp(App).use(store).use(router).mount('#app')

4、使用路由router4,路由跳转实现代码参考下面的(@click=“toPath(menu.path)”):

<!--  -->
<template><template v-for="menu in menus" :key="menu.path"><el-sub-menu v-if="menu.children && menu.children.length > 0" :index="menu.index"><template #title><el-icon><component :is="menu.meta.icon" /></el-icon><span>{{ menu.meta.title }}</span></template><menu-item :menus="menu.children"></menu-item></el-sub-menu><el-menu-item v-else :index="menu.index" @click="toPath(menu.path)"><el-icon><component :is="menu.meta?.icon" /></el-icon><span>{{ menu.meta?.title }}</span></el-menu-item></template>
</template><script setup lang="ts">
import { defineProps } from "vue";
import { useRouter } from 'vue-router';
defineProps(['menus'])
const router = useRouter()
const toPath = (item: string) => {router.push({ path: item });
}
</script><style lang="scss" scoped>
.el-sub-menu {.el-menu-item {background-color: #312a2a;}}
</style>

5、获取路由route的操作如下,比如监听(包括监听函数watch的用法)路由路径变化并获取所有路由信息,具体代码如下(import { useRoute } from ‘vue-router’;)

<!-- 布局:头部 -->
<template><div><el-breadcrumb separator="/"><el-breadcrumb-item :to="{ path: '/' }">homepage</el-breadcrumb-item><el-breadcrumb-item><a href="/">promotion management</a></el-breadcrumb-item><el-breadcrumb-item>promotion list</el-breadcrumb-item><el-breadcrumb-item>promotion detail</el-breadcrumb-item></el-breadcrumb></div>
</template><script setup lang="ts">
import { useRoute } from 'vue-router';
import { ref, watch } from 'vue';
const route = useRoute();
const breadcrumb = ref([]);
const getBreadcrumb = () => {console.log("===>", route.matched);
}
watch(() => route.path, () => {getBreadcrumb()
})
</script><style lang="scss" scoped>
</style>

上面的useRouter和useRoute的区别和vue2.0一样,区别:

this.$router是指所有路由,比如跳转路由地址时可使用
this.$router.push(‘/user’)或this.$router.replace(‘/home’)进行页面跳转.
This.$route是指当前路由(地址栏里的),可获取当前地址上的参数
this.$route.params.xxx

2、vuex4的安装

  1. 安装npm i vuex@4或者npm i vuex@next
  2. src下新建store目录,新建index.ts,写入如下内容,里面定义了一个数字类型count来测试使用
import { createStore } from 'vuex'
interface State{count:number
}
export default createStore<State>({state() {return {count:0}},mutations: {increment(state){state.count++}},actions: {},modules: {}
})
  1. 组件中使用案例:
<template><div class="hello"><button @click="increment">{{count}}</button></div>
</template><script setup>
import{useStore} from 'vuex'
const store=useStore()
const count=computed(()=>{return store.state.count
})
const increment=()=>{store.commit('increment')
}
</script>
<style scoped>
</style>

3、安装sass和element plus

  1. vite安装步骤,可以参考官方文档:element plus

    安装成功后可找到相关版本编号,如下图
  2. vue-cli安装使用步骤
    1、安装插件,输入以下命令npm install element-plus --save
    npm install sass-loader sass -D
    npm install -D unplugin-vue-components unplugin-auto-import
    2、全局引用element-plus并配置。在main.ts里面写入如下关于element-plus的代码:
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
createApp(App).use(store).use(router).use(ElementPlus).mount('#app')

在组件中使用,代码和效果如下

<template><div class="hello"><h1>{{ msg }}</h1><h1>{{ obj.name }}</h1><h1>{{ obj.age }}</h1><h1>{{ sum }}</h1><button @click="increment">{{count}}</button><el-button @click="increment">{{count}}</el-button></div>
</template>
<script setup>
import { ref, reactive, computed } from "vue";
import{useStore} from 'vuex'
const msg = ref(123);
const obj = reactive({ name: "Eric", age: 12 });
const sum=computed(()=>{return msg.value-obj.age
})
const store=useStore()
const count=computed(()=>{return store.state.count
})
const increment=()=>{store.commit('increment')
}
</script>
<style scoped>
h1 {margin: 40px 0 0;
}
</style>

五、系统开发

1、页面布局

大致位置如下:

开发步骤:
1、将官网的布局代码写入组件

<template><div class="common-layout"><el-container><el-aside width="200px">Aside</el-aside><el-container><el-header>Header</el-header><el-main>Main</el-main></el-container></el-container></div>
</template>
<script setup>
</script>
<style lang="scss">
.common-layout{display: flex;height: 100vh;.el-header, .el-footer {background-color: #B3C0D1;color: #333;text-align: center;line-height: 60px;}.el-aside {background-color: #D3DCE6;color: #333;text-align: center;line-height: 200px;}.el-main {background-color: #E9EEF3;color: #333;text-align: center;line-height: 160px;}
}
</style>

2、启动后如出现报错,Syntax Error: TypeError: this.getOptions is not a function,则是上面安装sass的版本太高,卸载npm uninstall sass-loader sass -D后依次安装如下插件即可

npm install node-sass@^7.0.1
npm install sass@^1.49.9
npm install sass-loader@^7.3.1

3、一般为了便于统一管理项目的样式,我们需要定义一些全局变量。如果你需要使用sass/scss语法定义一些全局的内容需要在项目根目录的vue.config.js文件(如果没有这个文件直接创建一个即可)下加上如下代码:注意了旧版本的sass-loader使用的是data字段,新版本的sass-loader使用的是prependData字段,我用的版本是旧版的。

module.exports = {css: {loaderOptions: {sass: {// 这里的值是你的全局变量文件路径,如果有多个全局变量用逗号分割开即可,如:// data: `@import"~@/assets/scss/main.scss";@import"~@/assets/scss/mixins/util.scss"`data: '@import "~@/style/global.scss";'}}}

4、页面效果如下

5、优化页面样式
5-1、去掉App.vue的#app的所有样式
5-2、项目public文件夹下的index.html中加入

<style>html,body{margin: 0;}</style>

2、侧边栏开发

后面的直接看源码:
源码地址:github的源码地址

3、全局使用动态的icon图标

3-1、 按需引用图标
使用的是如下代码,使用什么引用什么:

<el-menu-item index="2"><el-icon><icon-menu /></el-icon><template #title>Navigator Two</template>
</el-menu-item>
<el-menu-item index="3" disabled><el-icon><Document /></el-icon><template #title>Navigator Three</template>
</el-menu-item>import {Document,Menu as IconMenu,Location,Setting,
} from "@element-plus/icons-vue";

3-2、全局使用动态的icon
3-2-1、安装依赖

npm install @element-plus/icons

3-2-2、main.ts引入使用,代码如下:

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import * as ElIcons from '@element-plus/icons'
//全局使用动态的icon
const app = createApp(App)
for (const name in ElIcons) {app.component(name, (ElIcons as any)[name])
}
app.use(store).use(router).use(ElementPlus).mount('#app')

3-2-3、去掉手动引用,直接使用即可

4、全局提示框

类似于vue2.0的this.$message.info(),使用方式就是下面红框里的代码



效果如下

vue3.0实战项目相关推荐

  1. 关于 vue3.0 实战项目 setup、 props、 reactive、ref

    关于 vue3.0 实战项目中遇到的问题 介绍vue3.0的特性: 亿点小知识 1.diff算法的优化 增加了静态标记PatchFlag 2.按需编译,体积比Vue2.x更小(Tree shaking ...

  2. Vue3.0 + Ts 项目框架搭建二:路由 Router

    前言 上篇文章我们使用 vue-cli 创建了模板项目,可以看到安装的依赖只有 vue,所以要正常的驱动项目,安装必要的依赖是跑不了. 其中Router是控制整个系统的页面路由,是最重要的依赖之一.因 ...

  3. 【Vue3.0实战逐步深入系列】为问卷系统重新布局并添加登录及注销功能

    [千字长文,熬夜更新,原创不易,多多支持,感谢大家] 前言 小伙伴们大家好.到目前为止我们的问卷调查已经实现了配置问卷,填写问卷,保存问卷,提交问卷,提交记录以及提交结果展示等基本功能.其实到这里关于 ...

  4. idea2020.2.2怎么创建web项目_创建Vue3.0的项目

    1. 查看Vue的环境版本 Vue -V 如果版本低于4.0,则需要升级Vue的版本 npm install -g @vue/cli 2. 创建Vue 3.0的项目 3. VS Code 的环境配置 ...

  5. 【Vue3.0实战逐步深入系列】扩展投票功能基于elementui进行组件封装实现一个简单的问卷调查功能

    [千字长文,熬夜更新,原创不易,多多支持,感谢大家] 前言 小伙伴们大家好.在前面一偏文章中我们把投票功能进行了简单的改造:引入了axios第三方库并进行了二次封装用于模拟请求服务器数据.同时添加了一 ...

  6. 前端学习(2670): vue3.0实战开始建立新项目功能清单

  7. 前端学习(2669): vue3.0实战开始建立新项目

  8. vue2.0实战项目——简单的快餐店系统

    最近学习vue看到网上很多学习的资料,就找了一个项目系统练习,主要是想学习了的一些知识点,系统的组合运用一遍.网上根据技术胖老师博客的内容自己也实战了一遍,挺实用的,对vue框架有了更深入的了解以及自 ...

  9. vue main.js中引入js_手把手教你深入Vue3.0(Vue-cli4)项目打包性能优化实践

    记录了自己的博客在禁用缓存的情况下,从八九秒加载时间到最终985ms的优化实践,开启缓存的情况下能达到138ms的访问速度 本人的个人博客采用的是Vue-cli4.1.2 + typescript构建 ...

最新文章

  1. 2015第22周六Java反射、泛型、容器简介
  2. Docker容器制作
  3. android应用程序的混淆打包(转)
  4. Swagger-概述
  5. CG-CTF-Web-伪装者
  6. 2019计算机二级java软件_2019年计算机二级Java考试冲刺题及答案(2)
  7. .net程序部署(setupFactory进阶)
  8. 在Windows 7上安装ACE 6.1.0
  9. SpringMVC文件上传(二)指定文件
  10. 19-background
  11. mysql 索引必须唯一_唯一索引和普通索引的区别是什么,什么时候需要建唯一
  12. 地摊经济一千年:从《韩熙载夜宴图》到木屋烧烤“撸串”
  13. mysql rename数据库_为什么现在MySQL无法重命名数据库?
  14. 碎片时间”绑架了多少焦虑的现代人?
  15. Android7.0以上如何获取头像(拍照或者从相册中选择)
  16. PAT乙级1033题解
  17. S32DS封装静态库相关问题
  18. mysql数据库结构导出word_Windows导出MySQL数据库表结构到Word文档-DBExportDoc V1.0 For MySQL...
  19. it之家 materia design 版
  20. linux系统安装fio工具步骤

热门文章

  1. ifconfig命令
  2. ArcGIS基础实验操作100例--实验66符号图层的保存与加载
  3. linux 6.4 安装oracle10g,Red Linux 6.0上安装Oracle 10g
  4. tracert traceroute查看网络路由
  5. 地图下载1之天地图瓦片解析
  6. 《剑侠情缘》网络版开发回顾
  7. (医用耗材管理系统)Spd系统模式概述-盘谷医疗一种医疗精细化管理模式
  8. 宽带上网web认证计费系统 是什么
  9. 计算机仿真模拟论文,计算机仿真论文
  10. robocopy 报错 1326