Springboot项目搭建(7)-Layout界面布局

1.概要

初步搭建了Layout界面的布局,其中包括左侧导航栏及其路由功能,和右侧头、体、脚部分的大致排版。最后在头部分中的昵称与头像替换成动态数据。

2.Layout主页布局

文件地址:src\views\Layout.vue

2.1 script行为模块

从elementUI中选取图标图案。

<script setup>
import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchButton,CaretBottom
} from "@element-plus/icons-vue"
</script>

2.2 template结构模块

2.2.1 左侧菜单

<template><el-container class="layout-container"><!-- 左侧菜单 --><el-aside width="200px"><!-- 网站logo --><div class="el-aside__logo"></div><!-- 下拉菜单组件 --><el-menu active-text-color="#ffd04b" background-color="#232323" text-color="#fff" router><el-menu-item index="/article/category"><el-icon><Management/></el-icon><span>文章分类</span></el-menu-item><el-menu-item index="/article/manage"><el-icon><Promotion/></el-icon><span>文章管理</span></el-menu-item><el-sub-menu><template #title><el-icon><UserFilled/></el-icon><span>个人中心</span></template><el-menu-item index="/user/info"><el-icon><User/></el-icon><span>基本资料</span></el-menu-item><el-menu-item index="/user/avatar"><el-icon><Crop/></el-icon><span>更换头像</span></el-menu-item><el-menu-item index="/user/resetPassword"><el-icon><EditPen/></el-icon><span>重置密码</span></el-menu-item></el-sub-menu></el-menu></el-aside><!-- 右侧内容区 --><!-- ... --></el-container>
</template>

2.2.2 右侧菜单

<template><el-container class="layout-container"><!-- 左侧菜单 --><!-- ... --><!-- 右侧内容区 --><el-container><!-- 头部分 --><el-header><div>用户:<strong>昼夜节律</strong></div><!-- 下拉菜单 --><el-dropdown placement="bottom-end" @command="handleCommand"><span class="el-dropdown__box">头像<el-icon><CaretBottom/></el-icon></span><template #dropdown><ed-dropdown-menu><el-dropdown-item command="info" :icon="User">基本资料</el-dropdown-item><el-dropdown-item command="avatar" :icon="Crop">更换头像</el-dropdown-item><el-dropdown-item command="resetPassword" :icon="EditPen">重置密码</el-dropdown-item><el-dropdown-item command="logout" :icon="SwitchButton">退出登录</el-dropdown-item></ed-dropdown-menu></template></el-dropdown></el-header><!-- 体部分 --><el-main><RouterView></RouterView></el-main><!-- 脚部分 --><el-footer>XXX版权所有,备案地址,友情链接</el-footer></el-container></el-container>
</template>

2.3 style样式模块

<style lang="scss" scoped>
.layout-container{height: 100vh;background-color: #999;.el-aside{background-color: #232323;&__logo{height:120px;background: url('@/assets/logo.png') no-repeat center / 120px auto;}.el-menu{border-right: none;}}.el-header{background-color: #fff;display: flex;align-items: center;justify-content: space-between;.el-dropdown__box{display: flex;align-items: center;.el-icon{color: #999;margin-left: 10px;}&:active,&:focus{outline: none;}}}.el-footer{display: flex;align-items: center;justify-content: center;font-size: 14px;color: #666;}
}
</style>

2.4 效果视图 

3.左侧菜单点击跳转路由

新建文件×5,用于存放不同功能的网址内容,分别是:

文章管理:src\views\article\ArticleCategory.vue
文章分类:src\views\article\ArticleManage.vue
更换头像:src\views\user\UserAvatar.vue
用户信息:src\views\user\UserInfo.vue
更改密码:src\views\user\UserPassword.vue

文件地址:src\router\index.js

import { createRouter, createWebHistory } from 'vue-router'
import Login from '@/views/Login.vue'
import Layout from '@/views/Layout.vue'
import ArticleCategory from '@/views/article/ArticleCategory.vue'
import ArticleManage from '@/views/article/ArticleManage.vue'
import UserAvatar from '@/views/user/UserAvatar.vue'
import UserInfo from '@/views/user/UserInfo.vue'
import UserPassword from '@/views/user/UserPassword.vue'
//配置路由关系
const routes = [{path:'/login',component:Login},{path:'/',component:Layout,redirect:'article/manage',children:[{path:'/article/category',component:ArticleCategory},{path:'/article/manage',component:ArticleManage},{path:'/user/info',component:UserInfo},{path:'/user/avatar',component:UserAvatar},{path:'/user/resetPassword',component:UserPassword}]}
]
const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: routes
})
export default router

4.定义一个新Store

使用 Vue.js 的状态管理库 Pinia 来创建一个名为 useUserInfoStore 的状态存储(store)。

文件地址:src\stores\userInfo.js

import { defineStore } from "pinia";
import { ref } from "vue";
const useUserInfoStore = defineStore('userInfo',()=>{//定义状态数据const info = ref('')const setInfo = (newInfo)=>{info.value = newInfo}const removeInfo = ()=>{info.value=''}return {info,setInfo,removeInfo}
},{persist:true
})
export default useUserInfoStore;

5.向后端获取用户信息

发送一个 POST 请求到服务器的 /user/userinfo 路径,以获取用户信息。

export const userInfoService=()=>{return request.post('/user/userinfo')
}

6.顶部导航动态信息显示

6.1 调用服务端接口

从服务端获取用户信息并将其存储到 Pinia store 中。

<script setup>
import {...} from "@element-plus/icons-vue"
import avatar from '@/assets/default.png'
import { userInfoService } from "@/apis/user.js";
import useUserInfoStore from "@/stores/userInfo";
import { useTokenStore } from "@/stores/token";
const userInfoStore = useUserInfoStore()
//调用访问服务端接口函数,获取用户详细信息
const getUserInfo = async()=>{//调用接口let result = await userInfoService();//将数据存储到pinia中userInfoStore.setInfo(result.data)
}
getUserInfo()
</script>

6.2 替换固态数据

给用户名及其头像换成数据库中的动态数据。

注:此时头像为“未加载成功”条件下的默认头像

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp 安卓和ios震动方法,支持息屏和后台震动,ios和安卓均通过测试

最近使用uniapp开发震动功能&#xff0c;发现uniapp提供的 uni.vibrateLong()的方法震动比较弱&#xff0c;而且不支持息屏和后台震动。plus.ios.importClass("UIImpactFeedbackGenerator")是在网上看到的&#xff0c;这个震动也比较弱&#xff0c;ios也不支持息屏和…

JAVA项目-------医院挂号系统

1&#xff0c;项目目的 1、科室管理&#xff1a;新增科室&#xff0c;删除科室&#xff08;如果有医生在&#xff0c;则不能删除该科室&#xff09;&#xff0c;修改科室。 2、医生管理&#xff1a;录入医生信息&#xff0c;以及科室信息。修改医生信息&#xff08;主要是修改…

c语言的qsort函数理解与使用

介绍&#xff1a;qsort 函数是 C 标准库中用于排序的快速排序算法函数。它的用法非常灵活&#xff0c;可以对任意类型的元素进行排序&#xff0c;只要提供了比较函数即可。 qsort 函数原型及参数解释&#xff1a; void qsort ( void* base, //指向要排序的数组的首元素…

SpringBoot(三十八)SpringBoot-mybatis开启事务

在浏览myBatis相关文档的时候,突然想到一个小问题,到目前为止,好像我还没有使用过事务,这个不太应该。 这里我们刚好来测试一下事务叭。 一:添加pom依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifact…

#渗透测试#红蓝攻防#HW#漏洞挖掘#漏洞复现01-笑脸漏洞(vsftpd)

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

(73)脉冲幅度调制PAM调制解调通信系统的MATLAB仿真

文章目录 前言一、PAM调制的基本原理二、PAM调制的步骤三、PAM调制示例四、PAM调制的应用五、MATLAB仿真1. 仿真代码2. 仿真结果 总结 前言 PAM&#xff08;Pulse Amplitude Modulation&#xff0c;脉冲振幅调制&#xff09;是一种模拟信号到数字信号的转换方式&#xff0c;它…

算法的NPU终端移植:深入探讨与实践指南

目录 ​编辑 引言 算法选择 模型压缩 权重剪枝 量化 知识蒸馏 硬件适配 指令集适配 内存管理 并行计算 性能测试 速度测试 精度测试 功耗测试 案例分析 图像识别算法的NPU移植案例 结论 引言 在人工智能技术的浪潮中&#xff0c;神经网络处理器&#xff08;…

汽车免拆诊断案例 | 2017款捷豹F-PACE车发动机偶尔怠速不稳

故障现象  一辆2017款捷豹F-PACE车&#xff0c;搭载2.0 L GTDi发动机&#xff0c;累计行驶里程约为16万km。车主反映&#xff0c;车辆组合仪表上发动机故障灯点亮&#xff08;图1&#xff09;&#xff0c;且发动机偶尔怠速不稳。 图1 发动机故障灯点亮 故障诊断 接车后试车…

不建模,无代码,如何快速搭建VR虚拟展厅?

不建模、无代码搭建虚拟展厅&#xff0c;可以借助一些专业的虚拟展厅搭建平台或工具来实现。以下是一些具体的步骤和建议&#xff1a; 一、选择平台或工具 首先&#xff0c;需要选择一个适合的平台或工具来搭建虚拟展厅。这些平台通常提供预设的展厅模板、拖拽式编辑工具和丰富…

力扣做题笔记

1. nums.pop(nums[right]) 用法错误 在 JavaScript 中&#xff0c;Array.prototype.pop() 方法是用于移除数组中的最后一个元素&#xff0c;并返回被移除的那个元素。它不接受参数作为要移除元素的值&#xff0c;而是直接移除数组末尾的元素。 正确的做法应该是先获取要移除的索…

TypeScript 字面量类型与类型别名

在 TypeScript 的世界中&#xff0c;类型系统提供了丰富的工具来帮助开发者定义和管理数据类型。今天&#xff0c;我们将探讨两个核心概念&#xff1a;字面量类型&#xff08;Literal Types&#xff09;和类型别名&#xff08;Type Aliases&#xff09;。这两种类型特性在 Type…

数星星 (C++ 树状数组)

1265. 数星星 - AcWing题库 分析&#xff1a; 星星是按纵坐标递增给我们的&#xff0c;如果纵坐标相同&#xff0c;就按横坐标来给 所以星星是从低到高&#xff0c;一行一行来给的 题目要求我们去求每个等级的星星各有多少个 星星的等级由它左下角&#xff08;包括左边和下…

AIGC培训讲师人工智能培训讲师叶梓Python深度学习与AIGC培训提纲

【课程时长】 8天&#xff08;6小时/天&#xff09; 【课程简介】 随着AIGC&#xff08;基于AI的内容生成&#xff09;技术的崛起&#xff0c;以ChatGPT为代表的人工智能技术正引领全球科技潮流。为了帮助学员更好地理解和应用这一技术&#xff0c;特推出了本课程。 本课程…

若依前端报错 components.at is not a function

问题描述 使用若依框架,报错components.at is not a function 解决办法 node版本升级到大于16.6.0&#xff0c;这里使用的18.14.2解决的 webstorm nvm切换node版本方法 点击这里

GB28181系列三:SIP消息格式

我的音视频/流媒体开源项目(github) GB28181系列目录 目录 一、SIP消息Header字段 二、SIP URI(URL) 三、SIP路由机制 1、路由机制介绍 2、严格路由&#xff08;Strict Routing&#xff09;与松散路由&#xff08;Louse Routing&#xff09; 3、总结 四、SIP消…

STM32-C语言基础知识

C语言基础知识 stdint.h简介 给寄存器某个位赋值 给位6赋值为1流程&#xff1a;先清0&#xff0c;再赋值 带参数的宏定义 建议使用do {…}while(0)来构造宏定义 条件编译 条件编译后面必须跟宏语句&#xff0c;如#if _LED_H 指针使用常见的2大问题 1、未初始化 2、越界使…

计算机网络 实验八 应用层相关协议分析

一、实验目的 熟悉CMailServer邮件服务软件和Outlook Express客户端软件的基本配置与使用&#xff1b;分析SMTP及POP3协议报文格式和SMTP及POP3协议的工作过程。 二、实验原理 为了观察到邮件发送的全部过程&#xff0c;需要在本地计算机上配置邮件服务器和客户代理。在这里我…

spring知识点复习--针对面试的

前言 此内容是笔者通过B站的视频总结而来。原视频链接地址&#xff1a;6、Bean Factory与FactoryBean有什么区别_哔哩哔哩_bilibili 1.谈谈springIOC的理解&#xff0c;原理与实现 回答涉及到的点&#xff1a; 控制反转&#xff1a;是一种理论思想&#xff0c;原来的对象是由…

若依解析(一)登录认证流程

JWTSpringSecurity 6.X 实现登录 JWT token只包含uuid ,token 解析uuid&#xff0c;然后某个常量加UUID 从Redis缓存查询用户信息 流程图如下 感谢若依&#xff0c;感谢开源&#xff0c;能有这么好系统供我学习。 设计数据库&#xff0c;部门表&#xff0c;用户表&#xff0c…

阿里巴巴即将超越OpenAI的o1?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…