当前位置:   article > 正文

vue3-admin-template页面

vue3-admin-template

vue3-admin-template

本人学习视频网址为:视频地址
源码:github

网页采用技术框架

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

网页展示

登录页面

 

 

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

代码部分

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

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

 

ehcart代码封装(部分代码)

  1. initChart() {
  2. //赋值
  3. this.initChartData();
  4. //判断echart是否渲染
  5. if (this.echarts) {
  6. this.echarts.setOption(this.option);
  7. } else {
  8. this.echarts = echarts.init(this.$refs.echarts);
  9. this.echarts.setOption(this.option);
  10. }
  11. },
  12. //放入数据
  13. initChartData() {
  14. if (this.isAxisChart) {
  15. this.xAxisoption.xAxis.data = this.chartData.xData;
  16. this.xAxisoption.series = this.chartData.series;
  17. } else {
  18. this.videooption.series = this.chartData.series;
  19. }
  20. },
  21. },

 折叠侧边菜单栏

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

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

用户管理列表界面

 

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

  1. //确认是增加还是修改
  2. comfirm() {
  3. //确定按钮修改表格数据
  4. if (this.titletype === "add") {
  5. addUserData(this.formData).then((res) => {
  6. console.log(res);
  7. });
  8. this.isshow = false;
  9. this.getlist();
  10. } else {
  11. updateUserData(this.formData).then((res) => {
  12. console.log(res);
  13. this.isshow = false;
  14. this.getlist();
  15. });
  16. }
  17. },
  18. //新增用户信息
  19. adduser() {
  20. this.isshow = true;
  21. this.titletype = "add";
  22. //防止修改回显
  23. this.formData = {
  24. name: "",
  25. addr: "",
  26. age: "",
  27. birthday: "",
  28. sex: "",
  29. };
  30. },
  31. //获取表格数据,由于是mock自动生成这里不需要传入page
  32. getlist(page = 1, name = "") {
  33. console.log(typeof page != "number");
  34. if (typeof page != "number") {
  35. name = page;
  36. page = 1;
  37. } else {
  38. this.config.page = page;
  39. }
  40. getUserList({ page: this.config.page, name: name }).then((res) => {
  41. console.log(res);
  42. this.tableData = res.data.list.map((item) => {
  43. item.sexLabel = item.sex === 0 ? "女" : "男";
  44. item.birthday = item.birth;
  45. return item;
  46. });
  47. this.config.total = res.data.count;
  48. });
  49. },

面包屑
面包屑即点开侧边菜单栏后会显示出标签,如下图所示
其原理是在侧边栏选择路由时调用vuex中的方法push当前路由标签进去,删除时需要注意删除的位置,分为以下几点:
1.由于标签渲染有下标参与,因此在进行删除时传入当前标签的下标,如果与标签list的长度一样则是最右边删除,只需要删除当前标签和前一个标签显示为高亮。
2.如果删除不是本页的标签,即直接删除即可。
3.如果标签在中间,则需要考虑标签高亮向左还是向右,本页面是向右一个标签显示高亮,即删除当前标签后,由于标签长度会减一,而传入进来的标签下标就是右边一个标签,通俗说1是下标,让删除1的标签后原本下标为2的标签瞬间变为1,直接跳转到下一个页面标签即可。

  1. closepage(item, index) {
  2. //获取已点击路由数量
  3. let length = this.tags.length - 1;
  4. if (this.$route.name !== item.name) {
  5. this.deletemenu(index);
  6. return;
  7. }
  8. //如果关闭最右边的变标签
  9. else if (length == index) {
  10. this.deletemenu(index);
  11. this.$router.push({
  12. name: this.tags[length - 1].name,
  13. });
  14. }
  15. //中间的被关闭,下一个成为高亮表示
  16. else {
  17. this.deletemenu(index);
  18. this.$router.push({
  19. name: this.tags[index].name,
  20. });
  21. }
  22. },

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/400739?site
推荐阅读
相关标签
  

闽ICP备14008679号