考虑到有的同学对vue3不熟悉,因此,我把ControlView.vue这个页面清空,我们从0开始写。

<template style="width: 100%">

</template>

<script setup>

</script>
<style scoped> </style>

搭建页面的基本框架

展开代码后复制你需要的代码。比如我选择上中下这种结构,我就复制上中下这种结构的代码

运行查看效果

显然,这个样式依旧有一点问题,需要我们补充一点样式。

我们希望他他占满整个页面(100vh)

引用组件

Header设计

关于header的布局,我们使用ant-design-vue中的栅格组件

当然还是要做一些细节调整

左边的栅栏内容靠左显示,右边的栅栏内容靠右显示

我们希望:

右边,用户没有登录的时候,显示登录按钮,用户登录的时候,显示头像和昵称

我们准备两个div,一个是存放已登录显示的内容,一个存放未登录显示的内容

未登录的时候就显示这个登录按钮就行了,麻烦点的是登录后要显示的内容。

我们在父组件(ControlView.vue)里面去判断它有没有登录

怎么判断用户有没有登录呢,我们之前写登录的时候,用户登录成功,会在本地缓存一个token,现在,我们把这个token读取出来,看这个token包含的信息就行了。

有token就是登录了,没token就是没登录,这是第一个判断

有token但是这个token不一定是有效token,因此我们要解密这个token,然后判断token是否有效。

你怎么加密的就怎么解密,方式可以和我不一样的。

例如我解密token后,提取时间,判断登录是否过期,在提取身份,判断用户是否有权限访问这个页面。

设置一个变量为isLoginIn,用来记录我们判断的登录状态

判断用户是否登录的事情就解决了。

我建议的话,你别整的我这么麻烦。保存的时候不加密了,需要用的时候就不用解密了。练习嘛,不用太为难自己了,等熟练了之后再去考虑安全性的问题吧。

父组件传值子组件

接下来要做的就是父组件给子组件传值——父组件告诉子组件,到底登录没有

首先要设置子组件

然后再去父组件设置

子组件获取到登录状态后,就可以根据登录状态来控制到底显示啥了

(使用v-if 和v-else)

如下图,登录了的话,就不会显示这个登录按钮了

接下来就是登录后显示内容的设计了

添加一个文字头像吧,先准备好用户信息

然后使用UI组件

好,我们再增加一个退出登录的功能

这里我们使用了选择框,点击退出登录,清除token,并跳转到登录页面。

好,现在我把这个文件的完整代码贴出来。

<script setup>
import {useRouter} from "vue-router"; import {defineProps, onMounted, ref} from 'vue'; onMounted(() => {
console.log(props.isLoginIn)
})
const props = defineProps({
isLoginIn: {
type: Boolean,
required: true
}
});
const router = useRouter();
const navigateToLogin = () => {
router.push("/login")
}
const user = ref({
avatar: '',
nickname: localStorage.getItem("userNickname")
});
const SelectValue = ref([])
const selectOptions = [
{value: "用户昵称", label: user.value.nickname},
{value: "个人信息", label: "个人信息", disabled: true},
{value: "消息通知", label: "消息通知", disabled: true},
{value: "退出登录", label: "退出登录"}, ]
const selectHandleChange = (value, all) => {
if (value === "退出登录") {
localStorage.removeItem("token")
router.push("/login")
}
}
const placement = ref('bottomRight')
</script> <template>
<a-row>
<a-col :span="8" style="text-align: left">
<h3> 控制中心</h3>
</a-col>
<a-col :span="16" :offset="0" style="text-align: right">
<div v-if="!isLoginIn">
<a-button type="primary" danger @click="navigateToLogin">登录</a-button>
</div>
<div v-else>
<a-avatar style="color: #f56a00; background-color: #fde3cf">{{ user.nickname.charAt(0) }}</a-avatar>
<a-select :bordered=false :showArrow=false :showSearch=false size="small" :dropdown-match-select-width=true :placement=placement
v-model:value="SelectValue"
style="width:50%;max-width: 100px;text-align:center;"
:placeholder=user.nickname
:options="selectOptions"
@change="selectHandleChange"
></a-select>
</div> </a-col>
</a-row>
</template> <style scoped> </style>

我们的header先做到这里,接下来,我们做content。就写在下一篇笔记吧

2024年1月Java项目开发指南15:vue3+AntDesignVue 设计页面的更多相关文章

  1. 转:Java项目开发规范参考

    Java项目开发规范参考 - KevinLee的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net/u011383131/article/details/51227860 ...

  2. IDEA 学习笔记之 Java项目开发深入学习(2)

    Java项目开发深入学习(2): 查找变量被用到的地方 编译当前文件 增加变量watch 注意:我使用了keymap (eclipse模板),所以很多快捷键和eclipse一样. F5单步调试进入函数 ...

  3. IDEA 学习笔记之 Java项目开发深入学习(1)

    Java项目开发深入学习(1): 定义编译输出路径: 继承以上工程配置 重新定义新的项目编译路径 添加source目录:点击添加,再点击移除: 编译项目: 常用快捷键总结: Ctrl+Space 代码 ...

  4. IDEA 学习笔记之 Java项目开发

    Java项目开发: 新建模块: 添加JDK: 导入本地Jars: 从远程Maven仓库下载: 创建package: 新建类/接口/枚举等: 字体太小,改字体: Duplicate Scheme 修改编 ...

  5. 《Maven在Java项目开发中的应用》论文笔记(十七)

    标题:Maven在Java项目开发中的应用 一.基本信息 时间:2019 来源:山西农业大学 关键词:Maven:Java Web:仓库:开发人员:极限编程; 二.研究内容 1.Maven 基本原理概 ...

  6. 收藏基本Java项目开发的书

    一.Java项目开发全程实录 第1章 进销存管理系统(Swing+SQL Server2000实现) 第2章企业内部通信系统(Swing+JavaDB实现) 第3章 企业人事管理系统( Swing+H ...

  7. Java项目开发中实现分页的三种方式一篇包会

    前言   Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...

  8. Java项目开发

    项目开发整体构建: MVC+DAO设计模式 用面向对象的方式理解和使用数据库,一个数据库对应一个java项目 数据库--项目 表--类 字段--属性 表中的一条数据--类的一个对象 M:模型层 Jav ...

  9. Java项目开发流程()

    1项目启动 2需求调研 3系统设计详细设计 4程序开发 5测试 6试用培训维护 项目成员组成 1需求工程师其要求 2系统分析师设计师其要求 3开发工程师其要求 4测试工程师其要求 5管理人员 6其他人 ...

  10. HarmonyOS三方件开发指南(15)-LoadingView功能介绍

    目录: 1. LoadingView组件功能介绍2. Lottie使用方法3. Lottie开发实现4.<HarmonyOS三方件开发指南>系列文章合集 1. LoadingView组件功 ...

随机推荐

  1. LeetCode 564. Find the Closest Palindrome (构造)

    题意: 给一个数字n 求离n最近(且不等)的回文串 存在多个答案返回最小的 首先很容易想到 将数字分为两段,如 12345 -> 123/45,然后将后半段根据前面的进行镜像重置 123/45 ...

  2. usb请求块以及提交方式

    URB结构体 struct urb { /* private: usb core and host controller only fields in the urb */ struct kref k ...

  3. Exchange2016虚拟目录介绍

    Exchange2016虚拟目录介绍 Autodiscover 允许Outlook自动发现邮箱设置,以便用户无需手动配置Outlook的高级设置. ecp 用于访问EAC. EWS 提供如服务可用性, ...

  4. 我被 .NET8 JIT 的一个BUG反复折磨了半年之久

    很久很久没有写过博客了, 正好最近园子又挣得一线生机, 必须得凑个热闹水一篇. 事情是这样的, 在今年的早些时候, 把公司的一部分api服务器的.net版本从6升级到了8, 毕竟6马上就是EOL了(. ...

  5. Ubuntu 22.04 全局快捷键失效问题

    安装完 Ubuntu 22.04 后,你有可能会发现系统的快捷键失效了.侧栏用 Win + x 选中程序不可用了.为各种应用程序设置的快捷键也不起作用了. 出现此现象的原因,是因为 Ubuntu 22 ...

  6. ROS入门21讲(7)

    十二.launch启动文件的使用方法 1.launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master) 2.Launch文件语法: <launch> <n ...

  7. CSS动画(轮播图)

    1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa78enaFEibNNCoXO9Hr2PI7boFTRgZHl3icicXwzLGLTQPxCl ...

  8. Git项目提交规范结合Husky + commitlint使用

    一.前置条件 为了更好地 GIT 提交,加入了代码提交规范和规范校验,优雅的提交: 方便团队协作和快速定位问题,采取 Husky + commitlint 辅助项目做约定.  npm install ...

  9. 【VMware VCF】使用 Offline Bundle Transfer Utility(OBTU)配置 VCF 脱机库。

    VMware Cloud Foundation 环境中,软件包仓库的来源支持两种方式,分别是 Online Depot 和 Offline Depot.第一种方式,是在 VCF 环境能够连接互联网的情 ...

  10. ESP8266 + mg90s(舵机)

    ESP8266+mg90s(舵机) 准备阶段 ESP8266(nodeMcu) MG90S(舵机) 面包板 线3 连线 ESP8266 MG90S(舵机) GND 棕色 VCC 红色 模拟引脚 橙色 ...