(Vite-Vue-Admin)Vue3+vite+element-plus项目功能和问题总结

news/2024/7/9 23:40:46 标签: vite, vue, elementplus

1.vite快速构建vue3项目 npm create vite@latest vite-vue-admin -- --template vue
2.element-plus三种引入方式(全局引入,按需引入,手动引入)
3.vue3引入路由
4.layout整体布局实现(header,aslide,main)

可以写一个公共的样式文件index.less
5.问题:设置整个高度为100%不生效:解决,不仅设置#app,还要设置html和body。

    html,body,#app{
      margin: 0;
      padding: 0;
      height: 100%;
    }

6.header图标使用

  • element-plus的el-icon引入 npm install @element-plus/icons-vue;注意图标需要全局引入,或者配置按需引入;
  • el-button中使用图标,最好在el-button下再引入el-icon或者svg图标好设置图标大小
  • element-plus中el-avatar以及el-image组件使用本地路径的图片无法显示的问题。解决:需要使用new URL(url, import.meta.url)特定图片处理方法(import.meta.url 是一个 ESM 的原生功能,会暴露当前模块的 URL。将它与原生的 URL 构造器 组合使用,在一个 JavaScript 模块中,通过相对路径我们就能得到一个被完整解析的静态资源 URL)

7.header右侧下拉菜单实现:el-dropdown;里面可以有表单然后包含处理方法

8.左侧菜单的初步实现(el-menu);动态图标使用<component>  ;el-menu的index对应路由路径配置    

<el-icon>
        <component class="icons" :is="item.icon"></component>
      </el-icon>

9.基础样式整理实现

10.vue3中如何使用vuex实现菜单折叠vuex在setup中mapState等辅助函数用法)

const store = useStore();
const isCollapse = computed(() => store.state.layout.isCollapse);

const collapseMenu = (isCollapse) =>{
  store.commit("layout/modifyCollapse",isCollapse);
}

11.左侧路由跳转右侧展示相应组件的实现
12.home组件左侧动态实现
13.vue3本地mock和线上fastmock的使用(本地:一定要引入mock.js文件到main.js)
14.二次封装axios的原因及实现:请求封装,线上fastmock,

  • 三个环境的配置(vite获取环境变量import.meta.env.MODE):导出的config包括当前环境;三个环境配置根据当前环境的返回;全局mock设置
  • Mock总开关和单个接口自定义开关(便于接口调试和联调):isMock是mock是否使用线上mock控制的总开关,如果这里设置true,后面单个接口可以不设置,如果想单独设置false也可以在具体接口中设置,在后续联调时好一次性修改
  • 判断是线上环境不能使用mock ,使用线上api
  • 注意属性值method不是methods

15.Home组件右侧上面数据的展示:el-card用户信息,购买数据显示

16.注意布局格式:el-row和el-col
17.Home组件右侧echarts表格的渲染

  • 获取数据折线图,柱状图,拼图数据,并设置option的基本配置
  • 获取数据:重点在接口数据获取后,数据的重新组装,xAxis.data和series数据不对,就显示不出来
  • Setup中获取proxy方法类似于this
  • 折线图:x轴数据,series数据,type通过过去的数据设置进去(根据echarts 官网),echarts.init()方法,参数必须是真实的DOM元素
  • 柱状图:
  • 饼图

18.面包屑的实现:breakcrumb vue
    问题:setup中使用vuex辅助函数?
    首页一直显示,其他分级显示
    less样式穿透:deep()

多级菜单可以设置多个属性:

 menuItem: [{first: "其他", second: "页面1"}]
      <el-breadcrumb separator="/">
        <el-breadcrumb-item class="root" :to="{ path: '/' }">首页</el-breadcrumb-item>
        <el-breadcrumb-item v-if="menuItem.first && menuItem.first!=='首页'">
          <a href="/">{{menuItem.first}}</a>

        </el-breadcrumb-item>
        <el-breadcrumb-item v-if="menuItem.second">{{menuItem.second}}</el-breadcrumb-item>
      </el-breadcrumb>

19.tags标签展示及切换
tags标签的删除(删除后高亮显示逻辑)
    Tag显示和删除,高亮显示,tag实现步骤
    el-tag tag为home时不能删除
    左侧菜单点击时,tag显示
    点击tag进行路由跳转
    关闭tag ,取length 关闭后索引减一且vuex中数据删除
    删除当前跳转后一个,删除最后一个跳转前一个

element-plus的el-tag标签关闭标签时的高亮显示逻辑-CSDN博客

20.use组件table数据的展示:用户管理用本地mock实现,因为有增删改查
用户管理分页实现
分页样式处理
用户搜索的实现
用户新增UI实现
用户新增数据实现
    渲染,分页,点击某页时数据更新
    分页样式,

21.计算表格高度,用calc计算高度用于动态计算长度值

用户搜索
    用户新增:dialog,新增完成后,关闭弹窗,提示,重置表单,刷新表单数据,重置表单需要有prop属性重置表单不生效?日期处理;

setup()函数中emit的用法:

 setup(props,context) {
    const dialogVisible = props.dialogVisible;
    // 关闭弹窗
    const handleClose = done => {
          context.emit("closeDialog", false);
    }
}


新增用户表单验证:新增和编辑共用组件;title处理:变量区分;编辑时数据通过插槽传入;

22.浅拷贝对编辑数据进行处理Object.assign;?

23.点击后再点新增新增窗口有值?通过nextTick进行处理

主要通过Object.assign()对userForm数据进行浅拷贝,并且通过nextTick()方法使浅拷贝的数据立即生效

    // 打开用户编辑窗口
    const openEditDialog = row => {
      dialogVisible.value = true;
      type.value = "edit";
      proxy.$nextTick(() => {
        Object.assign(userForm.value, row);
      });
    };


用户编辑实现第一步
用户编辑实现第二步
删除用户

24.登录静态页面实现
    登录后左侧菜单数据不一样,菜单显示不同
    菜单数据app里面调用,每次登录都要获取
登录后返回左侧菜单的列表
存储到vuex中的aside组件显示出来
解决数据持久化问题 

import createPersistedState from 'vuex-persistedstate'

const store = createStore({
    modules:{
        layout,
        token
    },
    plugins: [createPersistedState()]
});


25动态路由实现(重点)
    登录后需要调用menu数据,然后根据menu数据动态设置路由数据
    路由里面通过循环路由数据生成动态路由
    router.addRoute()
    问题:路由重复? 动态路由设置在app.vue里面刷新时有问题

动态路由配置总结:vue3动态路由配置总结-CSDN博客
登出功能实现
26.路由守卫实现(路由拦截逻辑)
    token设置,获取,清楚,通过js-cookie进行设置
    没有token且路由不为login
    登录以后用错误路由地址栏回车:路由匹配,获取到路由用当前路由进行匹配
    否则进行跳转


// 路由守卫中再次设置路由(此时是在地址栏直接回车时处理)
store.commit("layout/setDynamicRoutes", router);

// 判断路由在配置的动态路由中是否存在,不存在则跳转到home,存在则直接跳转
const checkRouter = (path) =>{
  let hasCheck =  router.getRoutes().filter(item=>item.path == path).length;
  if (hasCheck) {
    return true
  } else {
    return false
  }
}

router.beforeEach((to, from, next) => {
  // 要重新获取token
  const token = store.state.token.token;
  
  //注意这里的逻辑: 如果咩有token且路由不为/login则直接跳转到login页面
  // 如果路由存在且有token则直接到home页面否则直接next
  if (!token && to.path !== '/login') {
    next('/login');
    // 否则检查路由是否存在,不存在直接跳转home页面
  }else if(!checkRouter(to.path)){
    next('/main');
  }else {
    // 存在则直接跳转
    next();
  }
});

27.api封装中实现请求拦截后ElMessage弹窗处理信息,发现ElMessage样式错误

如果要再非vue组件中使用element-plus组件且有样式需要组件和样式文件一起引入(这种情况配置了按需引入也没用)

import { ElMessage } from 'element-plus'
import 'element-plus/dist/index.css'


http://www.niftyadmin.cn/n/5143682.html

相关文章

Jenkins自动化部署相关shell命令

1. 只后台启动&#xff1a; nohup java -jar jar/demo*.jar & 2. 增加命令启动日志输出位置&#xff0c;防止超时处理配置&#xff1a; nohup java -jar /soft/gitee-demo-0.0.1-SNAPSHOT.jar >mylog.log 2>&1 & 简化写法&#xff1a; nohup java -jar /s…

docker容器的总结

1、容器的本质 容器的本质是进程&#xff0c;容器就是未来云计算系统中的进程 2、容器和虚拟化对比 容器是应用程序层的抽象&#xff0c;将代码和依赖项打包在一起。多个容器可以在同一台计算机上运行&#xff0c;并与其他容器共享OS内核&#xff0c;每个容器在用户空间中作为…

【MyBatis Plus】使用 MyBatis Plus 完成分页功能,以及通用分页实体的实现

文章目录 一、MyBatis Plus 分页插件1.1 了解 MyBatis Plus 的插件功能1.2 配置分页插件1.3 测试分页功能 二、实现通用分页实体2.1 分页查询需求2.2 分页实体类2.3 分页查询接口2.4 通用实体的转换2.4.1 PageQuery 转换为 MP Page2.4.2 分页结果 PO 转换 VO 一、MyBatis Plus …

[概述] 获取点云数据的仪器

这里所说的获取点云的仪器指的是可以获取场景中物体距离信息的相关设备&#xff0c;下面分别从测距原理以及适用场景来进行介绍。 一、三角测距法 三角测距原理 就是利用三角形的几何关系来测量物体的距离。想象一下&#xff0c;你站在一个地方&#xff0c;你的朋友站在另一…

Jetpack:026-Jetpack中的Slider

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack多点触控相关的内容&#xff0c;本章回中 主要介绍Slider。闲话休提&#xff0c;让我们一起Talk Android Jetpack吧&#xff01; 1. 概念介绍 我们在本章回…

Vue3.0 computed计算属性:VCA

一、Vue3 计算属性computed函数 介绍 与 语法 计算属性:计算属性与方法函数的区别就是计算属性存在缓存&#xff0c;只要函数内变量变化, 会自动重新计算结果返回&#xff0c;不变化则从缓存中直接取值返回 // 第一种语法get方法 &#xff08;没有set&#xff09; const 函数名…

计算样本方差和总体方差

例如&#xff0c;给出了三个数据&#xff0c;194、183、175&#xff0c;现在计算样本方差和总体方差。 手工计算 它们的平均值 样本方差 总体方差 用excel计算 样本方差 总体方差

Python:按位异或的反运算

简介&#xff1a;按位异或是一个常用的二进制运算操作&#xff0c;但它的"反运算"是什么&#xff1f;本文将探讨按位异或及其反运算在Python中的应用&#xff0c;以及如何利用Python对其进行处理。 历史攻略&#xff1a; Python&#xff1a;位运算 python&#xf…