vue3-admin-template页面

简介: vue3-admin-template页面

vue3-admin-template

本人学习视频网址为:视频地址

源码:github

网页采用技术框架

7af1b14015c04e54b18a425d139158f2.png本管理模板采用vue3开发,使用vue-router来作为路由跳转,将登录成功后产生的菜单,token放入到vuex中存储,通过axios来进行交互,来获取服务端内容,由于没有后端接口api,本管理模板将采用mock来模拟后端接口数据

网页展示

登录页面

b7110efb3ad141059eba7d5612c45164.png

采用mock模拟后端接口数据,当用户名与密码都为admin时才跳转到首页,这里用了路由导航守卫进行判断当前用户是否进行登录,如果没有自动跳转到登录界面,因此当在地址栏输入其他页面时也会跳转回登录页面

代码部分

router.beforeEach((to,from,next)=>{
   store.commit("gettoken")
    //获取token
    let token = store.state.user.token
    //如果token不存在并且要访问不是登录页
    if(!token && to.name !=="login" ){
      next({name:"login"})
    }else if (token && to.name=== "login"){
      next({name:"home"})
    }else{
      //如果没有匹配到当前路径
      if (to.matched.length == 0) { router.push(to.path)}
      next()
    }
})

 当用户名与密码输入正确时就会跳转到首页,首页有着采用element-plus组件构成的侧边栏菜单,面包屑,卡片,等等,并用echart对数据进行可视化展示,有柱状图,折线图,饼图,并且对echart进行封装,使代码看起来更简洁

d59c5d2570bf4a8ab16e3fbaefb6ab77.png

4c922f99ca144bc88117f87179d94abd.png

ehcart代码封装(部分代码)

initChart() {
      //赋值
      this.initChartData();
      //判断echart是否渲染
      if (this.echarts) {
        this.echarts.setOption(this.option);
      } else {
        this.echarts = echarts.init(this.$refs.echarts);
        this.echarts.setOption(this.option);
      }
    },
    //放入数据
    initChartData() {
      if (this.isAxisChart) {
        this.xAxisoption.xAxis.data = this.chartData.xData;
        this.xAxisoption.series = this.chartData.series;
      } else {
        this.videooption.series = this.chartData.series;
      }
    },
  },

折叠侧边菜单栏

//传入两个参数,一个为state状态,一个是所需要传入的参数
        collapseMenus(state){
            state.isCollapse = !state.isCollapse
        },

由于element组件提供了菜单栏显示,因此我们只需要在vuex的state状态中加入相应的变量以及一个取反的方法即可进行伸缩菜单栏

用户管理列表界面

10ed3b7e0c7d4088ae900f07ca4c3099.png

用户管理界面采用element-plus的表格进行数据展示,在添加按钮中可以新增新的用户,并且在搜索框中可以对姓名进行模糊搜索,在点击编辑按钮时跳出弹框对数据进行回显,由于删除功能没有后端接口的支持,用mock只能模拟流程并不能真正删除数据,分页插件能够随着点击不同页码进行跳转

//确认是增加还是修改
    comfirm() {
      //确定按钮修改表格数据
      if (this.titletype === "add") {
        addUserData(this.formData).then((res) => {
          console.log(res);
        });
        this.isshow = false;
        this.getlist();
      } else {
        updateUserData(this.formData).then((res) => {
          console.log(res);
          this.isshow = false;
          this.getlist();
        });
      }
    },
    //新增用户信息
    adduser() {
      this.isshow = true;
      this.titletype = "add";
      //防止修改回显
      this.formData = {
        name: "",
        addr: "",
        age: "",
        birthday: "",
        sex: "",
      };
    },
    //获取表格数据,由于是mock自动生成这里不需要传入page
    getlist(page = 1, name = "") {
      console.log(typeof page != "number");
      if (typeof page != "number") {
        name = page;
        page = 1;
      } else {
        this.config.page = page;
      }
      getUserList({ page: this.config.page, name: name }).then((res) => {
        console.log(res);
        this.tableData = res.data.list.map((item) => {
          item.sexLabel = item.sex === 0 ? "女" : "男";
          item.birthday = item.birth;
          return item;
        });
        this.config.total = res.data.count;
      });
    },

面包屑

面包屑即点开侧边菜单栏后会显示出标签,如下图所示

其原理是在侧边栏选择路由时调用vuex中的方法push当前路由标签进去,删除时需要注意删除的位置,分为以下几点:

1.由于标签渲染有下标参与,因此在进行删除时传入当前标签的下标,如果与标签list的长度一样则是最右边删除,只需要删除当前标签和前一个标签显示为高亮。

2.如果删除不是本页的标签,即直接删除即可。

3.如果标签在中间,则需要考虑标签高亮向左还是向右,本页面是向右一个标签显示高亮,即删除当前标签后,由于标签长度会减一,而传入进来的标签下标就是右边一个标签,通俗说1是下标,让删除1的标签后原本下标为2的标签瞬间变为1,直接跳转到下一个页面标签即可。

4bb42d9d07004edf9845c9cc1033c33c.png

closepage(item, index) {
      //获取已点击路由数量
      let length = this.tags.length - 1;
      if (this.$route.name !== item.name) {
        this.deletemenu(index);
        return;
      }
      //如果关闭最右边的变标签
      else if (length == index) {
        this.deletemenu(index);
        this.$router.push({
          name: this.tags[length - 1].name,
        });
      }
      //中间的被关闭,下一个成为高亮表示
      else {
        this.deletemenu(index);
        this.$router.push({
          name: this.tags[index].name,
        });
      }
    },


相关文章
|
2月前
|
存储 JavaScript
vue页面跳转取消上一个页面请求
本文介绍了在Vue中如何取消上一个页面的请求,以避免页面跳转时请求未完成导致的数据错误。核心方法是使用axios的请求拦截器设置请求的取消令牌(cancelToken),并在vuex中存储这些取消令牌的引用。当进行路由跳转时,通过路由守卫清除这些请求,达到取消上一个页面请求的目的。
142 2
|
1月前
|
JavaScript API
vue尚品汇商城项目-day04【24.点击搜索按钮跳转后的页面商品列表、平台售卖属性动态展示(开发Search组件)】
vue尚品汇商城项目-day04【24.点击搜索按钮跳转后的页面商品列表、平台售卖属性动态展示(开发Search组件)】
49 1
vue尚品汇商城项目-day04【24.点击搜索按钮跳转后的页面商品列表、平台售卖属性动态展示(开发Search组件)】
|
10天前
|
JavaScript UED
"Vue实战技巧大揭秘:一招解决路由跳转页面不回顶部难题,让你的单页面应用用户体验飙升!"
【10月更文挑战第23天】在Vue单页面应用中,点击路由跳转时,默认情况下页面不会自动滚动到顶部,这可能影响用户体验。本文通过一个新闻网站的案例,介绍了如何使用Vue-router的全局前置守卫和`scrollBehavior`方法,实现路由跳转时页面自动滚动到顶部的功能,提升用户浏览体验。
42 0
|
1月前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day04【28.详情页面Detail】
vue尚品汇商城项目-day04【28.详情页面Detail】
17 1
|
22天前
|
JavaScript 前端开发 安全
如何在 Vue 页面中禁止选择、右键、复制及 F12 开发者工具
【10月更文挑战第3天】 在前端开发中,保护页面内容不被随意复制或查看是一个常见需求。本文介绍了如何在 Vue 应用中实现禁止文本选择、右键菜单、复制操作以及 F12 开发者工具的方法。通过结合 CSS 和 JavaScript 事件监听,我们可以增加用户查看和复制内容的难度,尽管无法完全阻止高级用户。适当的防护措施可以为内容提供一层额外的保护,帮助开发者提升页面安全性。
298 0
|
1月前
|
JavaScript API
vue尚品汇商城项目-day06【37.获取交易数据+38.用户地址信息展示+39.交易信息展示及交易页面完成+40.提交订单+41.支付组件内获取订单号与展示支付信息】
vue尚品汇商城项目-day06【37.获取交易数据+38.用户地址信息展示+39.交易信息展示及交易页面完成+40.提交订单+41.支付组件内获取订单号与展示支付信息】
36 0
|
1月前
|
JavaScript 前端开发
vue尚品汇商城项目-day06【vue插件-42.支付页面中使用ElementUI以及按需引入】
vue尚品汇商城项目-day06【vue插件-42.支付页面中使用ElementUI以及按需引入】
26 0
|
3月前
|
JavaScript
如何在Vue页面中引入img下的图片作为背景图。../的使用
这篇文章介绍了在Vue页面中如何引入`img`目录下的图片作为背景图,提供了两种使用相对路径的方法。第一种是使用`../assets/img/`作为路径引入图片,第二种是使用`../../assets/img/`作为路径。文章还展示了使用这些方法的代码实现和效果展示,并鼓励读者学无止境。
如何在Vue页面中引入img下的图片作为背景图。../的使用
|
4月前
|
JavaScript 前端开发
在 JeecgBoot 项目中基于 Vue 3 配置多页面入口
本文介绍了在JeecgBoot Vue 3项目中配置多页面入口的步骤。首先,确保下载了项目源码,然后在项目根目录创建`home.html`作为新页面模板。接着,在`src`下建立`multiPage/home`目录,包含`App.vue`和`main.ts`文件以构建新页面。最后,更新`build/vite/plugin/html.ts`中的`htmlPlugin`以支持多页面配置。完成这些步骤后,项目将具备管理多个独立页面的能力。
103 4
|
3月前
|
存储 JavaScript 前端开发
响应式的 switchboard:让又大又慢的Vue/AIpine 页面爆快
响应式的 switchboard:让又大又慢的Vue/AIpine 页面爆快