新建项目

安装router

npm install vue-router

在src下新建目录router,在目录下新建index.js

在index.js里面配置路由

import { createRouter, createWebHistory } from 'vue-router';

// 定义路由
const routes = [
//在这里配置路由
]; // 创建路由实例
const router = createRouter({
history: createWebHistory(),
routes,
}); export default router;

然后编辑main文件


import { createApp } from 'vue'
import './style.css'
import router from "./router/index.js";
import App from './App.vue'
let app = createApp(App)
app.use(router).mount('#app')

安装AntDesignVue

官方文档:

https://www.antdv.com/docs/vue/getting-started-cn

npm i --save ant-design-vue

安装后再main.js中配置

import { createApp } from 'vue'
import './style.css'
import router from "./router/index.js";
import Antd from 'ant-design-vue';
import App from './App.vue'
import 'ant-design-vue/dist/reset.css';
let app = createApp(App)
app.use(router).use(Antd).mount('#app')

安装AntDesignVue的icon图标

npm install --save @ant-design/icons-vue

修改App.vue

<script setup>

</script>

<template style="width: 100%;height: 100%;margin: 0;padding: 0">
<router-view style="width: 100%;height: 100%"></router-view>
</template> <style scoped> </style>

创建视图view

在src下创建views文件夹

在文件夹下创建ControlView.vue作为控制中心页面

同时配置路由

{
path: '/',
name: 'ControlCenter',
component: () => import('../views/ControlView.vue')
}

router.index.js文件配置如下

import { createRouter, createWebHistory } from 'vue-router';

// 定义路由
const routes = [
{
path: '/',
name: 'ControlCenter',
component: () => import('../views/ControlView.vue'), },
// 其他路由...
]; // 创建路由实例
const router = createRouter({
history: createWebHistory(),
routes,
}); export default router;

修改index.html

删除style.css里面#app的样式

你可以尝试在 ControlView.vue这个文件写代码,然后运行看看效果

我这个文件的代码贴出来你们参考一下

<template style="width: 100%">
<div class="flex-layout" style="display: flex; flex-direction: column; min-height: 100vh;">
<a-layout class="layout" style="width: 100%;flex:1">
<a-layout-header style="width: 100%;margin: 0;padding: 0">
<a-menu
v-model:selectedKeys="selectedKeys"
theme="dark"
mode="horizontal"
:style="{ lineHeight: '64px',display:'flex', justifyContent: 'space-between' }"
class="menu-custom"
> <a-menu-item key="1"><router-link to="/index">首页</router-link></a-menu-item>
<a-menu-item key="2"><router-link to="/index">关于</router-link></a-menu-item>
<a-menu-item key="3"><router-link to="/admin">后台</router-link></a-menu-item> <a-menu-item v-if="isLoggedIn" style="" key="4" disabled>
<a-avatar style="color: #f56a00; background-color: #fde3cf">{{ user.nickname.charAt(0) }}</a-avatar>
<span style="margin-left: 8px;">{{ user.nickname }}</span>
<a-divider type="vertical"></a-divider>
<a-button type="primary" danger @click="handleLogout">退出登录</a-button>
</a-menu-item>
<a-menu-item v-else key="5" disabled>
<a href="/login">登录</a>
</a-menu-item> </a-menu>
</a-layout-header> <a-layout-content style="padding: 0 50px;overflow-y: auto">
<router-view></router-view>
</a-layout-content> <a-layout-footer class="footer" style="text-align: center; background-color: #f0f0f0; padding: 16px 0;">
千杯烈酒求一醉 王的孤独谁体会
</a-layout-footer>
</a-layout>
</div>
</template>
<script setup>
import {onMounted, ref, watchEffect} from 'vue';
import {useRoute} from "vue-router"; const selectedKeys = ref(['1']);
const route = useRoute();
// 使用 watchEffect 来监听路由变化
watchEffect(() => {
// 根据路由路径更新 selectedKeys
switch (route.path) {
case '/index':
selectedKeys.value = ['1'];
break;
case '/about':
selectedKeys.value = ['2'];
break;
case '/admin':
selectedKeys.value = ['3'];
break;
default:
selectedKeys.value = ['1']; // 默认选中的 key
break;
}
}); const isLoggedIn = ref(false);
const user = ref({
avatar: '',
nickname: localStorage.getItem("username")
}); onMounted(async () => { }); function handleLogout() {
// 退出登录逻辑
localStorage.removeItem('token');
isLoggedIn.value = false;
user.value = {avatar: '', nickname: ''};
}
</script>
<style scoped>
.site-layout-content {
min-height: 280px;
padding: 24px;
background: #fff;
} #components-layout-demo-top .logo {
float: left;
width: 120px;
height: 31px;
margin: 16px 24px 16px 0;
background: rgba(255, 255, 255, 0.3);
} .ant-row-rtl #components-layout-demo-top .logo {
float: right;
margin: 16px 0 16px 24px;
} [data-theme='dark'] .site-layout-content {
background: #141414;
} .menu-custom{
display: flex;
justify-content: space-between;
align-items: center;
} .flex-layout {
display: flex;
flex-direction: column;
min-height: 100vh; /* 确保容器至少占据整个视口高度 */
} .layout {
flex: 1; /* 让布局占据所有可用空间 */
display: flex;
flex-direction: column;
} .footer {
/* 页脚样式,根据需要自定义 */
margin-top: auto; /* 将页脚推到容器的底部 */
}
</style>

我不建议你抄我代码。

请自行查阅AntDesignVue官方文件,自己设计界面

https://www.antdv.com/components/layout-cn

2024年1月Java项目开发指南10:vite+Vue3项目创建的更多相关文章

  1. Knockout应用开发指南 第五章:创建自定义绑定

    原文:Knockout应用开发指南 第五章:创建自定义绑定 创建自定义绑定 你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定 ...

  2. Java Web开发: Tomcat中部署项目的三种方法

    web开发,在tomcat中部署项目的方法: 可以参考http://m.blog.csdn.net/blog/u012516903/15741727 定义$CATALINA_HOME指的是Tomcat ...

  3. Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的

    在前两篇博文中已经做了铺垫,下面咱们就可以用前面介绍过的内容开始做一个小项目了(项目中会用到Afinal框架,不会用Afinal的童鞋可以先看一下上一篇博文),正所谓麻雀虽小,五脏俱全,这在里我会尽量 ...

  4. 【温故知新】Java web 开发(一) 新建项目

    简述本文写作目的:本文主要用于回忆基础 java web 项目的搭建,在不使用 Spring 等框架的前提下,单纯使用 jsp 和 servlet 完成. 1. 新建 maven 项目,不使用 arc ...

  5. java web开发入门十二(idea创建maven SSM项目需要解决的问题)基于intellig idea(2019-11-09 11:23)

    一.spring mvc action返回string带双引号问题 解决方法: 在springmvc.xml中添加字符串解析器 <!-- 注册string和json解析适配器 --> &l ...

  6. Java多线程开发系列之二:如何创建多线程

    前文已介绍过多线程的基本知识了,比如什么是多线程,什么又是进程,为什么要使用多线程等等. 在了解了软件开发中使用多线程的基本常识后,我们今天来聊聊如何简单的使用多线程. 在Java中创建多线程的方式有 ...

  7. Vue/Egg大型项目开发(一)搭建项目

    项目Github地址:前端(https://github.com/14glwu/stuer)后端(https://github.com/14glwu/stuer-server) 项目线上预览:http ...

  8. 第5季-小试牛刀-项目开发\阶段2-新手上路\项目-移动物体监控系统\Sprint0-产品设计与规划

    lesson1---产品功能展示 先完成准备阶段,准备阶段要做的事情: a.项目经理选择团队, b.根据项目用户需求以及同类型的实物,制定产品功能列表 c.根据功能的难易程度,制定迭代周期以及在每周期 ...

  9. weex 项目开发(六)weexpack 项目 打包、签名、发布

    一. weexpack build android  和  weexpack run android 的 区别. (1)单纯打包 weexpack build android (2)打包并运行 wee ...

  10. AngularJS开发指南15:AngularJS的创建服务,将服务注入到控制器,管理服务依赖详解

    创建服务 虽然AngularJS提供了很多有用的服务,但是如果你要创建一个很棒的应用,你可能还是要写自己的服务.你可以通过在模块中注册一个服务工厂函数,或者通过Module#factory api或者 ...

随机推荐

  1. Win10 LTSC 从 2019(1809) 升级到 2021(21H2) 后找回丢失的 WSL

    Win 10 LTST 2019 升级 2021 很简单,直接挂载 ISO 镜像以后,运行 setup.exe,剩下的就是耐心等待了. 升级完成后,用户信息和安装的软件基本上都在,VM15 启动的时候 ...

  2. Springboot --- 使用国内的 AI 大模型 对话

    实在是不知道标题写什么了 可以在评论区给个建议哈哈哈哈 先用这个作为标题吧 尝试使用 国内给出的 AI 大模型做出一个 可以和 AI 对话的 网站出来 使用 智普AI 只能 在控制台中输出 对应的信息 ...

  3. NTPShell

    NTPShell 获取地址:https://github.com/aplyc1a/NTPShell 通过NTP协议来负载C2数据. 编译 gcc ntp.c -lpthread -o ntp 使用 c ...

  4. 云原生周刊:CNCF 2023 年度调查报告 | 2024.4.15

    开源项目推荐 highlight 该项目是一个开源全栈监控平台.其功能包括错误监控.会话重放.日志记录.分布式跟踪等. Helm Compose Helm Compose 是一个 helm 插件,用于 ...

  5. 基于 KubeSphere 的分级管理实践

    作者:许伟,航天网信研发工程师 K8s 是容器编排和分布式应用部署领域的领导者,在 K8s 环境中,我们只需要关心应用的业务逻辑,减轻了我们服务器网络以及存储等方面的管理负担.对于一个用户而言,K8s ...

  6. 2024-10-30:或值至少 K 的最短子数组 I。用go语言,给定一个非负整数数组 nums 和一个整数 k,我们需要判断数组中是否存在一个最短的非空子数组,使得该子数组所有元素的按位或(OR)运

    2024-10-30:或值至少 K 的最短子数组 I.用go语言,给定一个非负整数数组 nums 和一个整数 k,我们需要判断数组中是否存在一个最短的非空子数组,使得该子数组所有元素的按位或(OR)运 ...

  7. SSIS连接Oracle问题汇总

    一.未安装Oracle客户端 错误提示:Test connection failed because of an error in initializing provider. 未找到 Oracle ...

  8. Next.js 实战开发入门 1 开发环境部署 - 曲速引擎 Warp Drive

    开发目标 我们将构建一个简化版本的财务仪表板,其内容包括:公共主页.登录页面.受身份验证保护的仪表板页面.用户可以添加.编辑和删除发票 开发环境配置 开发客户端 Windows 10 (不限系统,兼容 ...

  9. Redis工具可视化工具Redis Desktop Manager(附安装包)

    前言 redis工具,我相信每个开发都需要,如果每次查都去client执行指令,我怕查完之后,老大就要发版咯.我之前一直用的Redis可视化工具RedisDesktopManager,总觉得差点意思, ...

  10. 部署个SSH蜜罐玩玩,又能增强安全性,又能当电子蛐蛐

    前言 最近有个旧服务器的 SSL 证书过期了,每次都申请 SSL 证书太麻烦了,我直接把 swag 方案部署上去. 然后发现这个服务器在安全方面有所疏忽,所以又加固了一下,SSH 部分我想起来之前用过 ...