考虑到有的同学对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. Electron.Net + Linux + Blazor 初尝备忘录

    Electron 是使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序的一个框架, Electron.NET 是.net 下对 Electron 的封装实现, 通过它可以比较容 ...

  2. Java日期时间API系列23-----Jdk8中java.time包中的新的日期时间API类,获取准确开始时间00:00:00,获取准确结束时间23:59:59等

    有时候,往往需要统计某个时间区间的销量等问题,这就需要准确的起始时间,获取准确开始时间00:00:00,获取准确结束时间23:59:59.下面增加了一一些方法,获取当天起始时间,昨天起始时间,当前月第 ...

  3. 泛型dotnet

    // 什么是泛型List<T> T:表示类型参数,指代任意类型 T可以是任意标识 // 编写代码时使用特殊符号替代位置类型,在实例化或使用/调用时才会进行具体类型的定义 // 特点:重用代 ...

  4. 在实例化对象的时候new关键字具体做了哪些操作?

    a 创建了一个空对象 {}b 通过原型链把空对象和构造函数连接起来__proto__ = prototype c 构造函数的this指向新对象,并执行函数体 d 判断构造函数的返回值,返回对象就使用该 ...

  5. 使用Redis的好处

    性能极高--redis能支持超过100K+每秒的读写频率 丰富的数据类型--Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型 ...

  6. Cookie、sessionStorage、localStorage的区别 ?

    共同点:都是保存在浏览器端的. 区别: 1.cookie数据始终携带在同源的http请求中,即cookie在浏览器和服务器间来回传递,而sessionStorage和Localstorage不会自动把 ...

  7. NetCore项目发布对前端项目进行打包合并发布

    在某个小项目中, api使用asp.net core 3.x 编写, UI页面则使用Vuejs. 正常情况下, 项目右键的发布只会发布api项目,而不会管Vuejs的项目. 所以通过简单的改造,在发布 ...

  8. 微宏科技基于 KubeSphere 的微服务架构实践

    作者:尹珉,KubeSphere Ambassador.contributor,KubeSphere 社区用户委员会杭州站站长. 公司简介 杭州微宏科技有限公司于 2012 年成立,专注于业务流程管理 ...

  9. 人形机器人是未来?6只手臂加AI模型,异形机器人重塑种植业。

    图源:reddit user IlustriousTea 近日,一则视频在媒体上引起了人们的讨论.国外一处苹果园里,机械嗡鸣声中,六只机械手熟练且快速地采摘成熟的苹果. 这是2018年于美国加利福尼亚 ...

  10. NOIP2024模拟11:忠于自我

    NOIP2024模拟11:忠于自我 T1 一句话题意:有若干个容量为 \(L\) 的包,从左往右装物品,当前包还能装则装,否则必须重开一个包装进去,对于\(\forall i \in [1,n]\), ...