vue3项目,vite+vue3+ts+pinia(10)-elementplus布局

news2024/11/18 9:49:28

项目创建好,接下来引入Container 布局容器,

  1. 在src下新建layout文件夹, layoutName.vue
<template>
  <el-container>
    <el-aside width="200px">
      aside
    </el-aside>
    <el-container>
      <el-header>Header</el-header>
      <el-main> <router-view /> </el-main>
    </el-container>
  </el-container>
</template>

<script lang="ts" setup>
</script>

<style scoped>
.el-container{
  height: 100vh;
}
</style>
  1. router=> index.ts
import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
import AppLayout from '@/layout/layoutName.vue'

const routes: RouteRecordRaw [] = [
  {
    path: '/',
    component: AppLayout,
    children: [
      {
        path: '/',
        name: 'home',
        component: () => import('@/views/home/indexName.vue')
      }
    ]
  },
  {
    path: '/login',
    name: 'login',
    component: () => import('../views/login/indexName.vue')
  }
]

const router = createRouter({
  history: createWebHashHistory(),
  routes
})

export default router


  1. styles => common.css 目录下
    *{
    margin: 0;
    padding: 0;
    }
  2. 注意要main.ts 文件下, 要注释 // import ‘./style.css’,不然 他们会居中
  3. 终端: npm run dev
  4. 接下来是看菜单: Menu 菜单, 在elementplus中搜索,
  5. 在layout文件中新建 components文件夹,再建 layoutAside.vue ,从网友中复制过来
<template>
  <el-menu
    active-text-color="#ffd04b"
    background-color="#304156"
    class="el-menu-vertical-demo"
    default-active="2"
    text-color="#fff"
  >
    <el-sub-menu index="1">
      <template #title>
        <el-icon><location /></el-icon>
        <span>Navigator One</span>
      </template>
      <el-menu-item-group title="Group One">
        <el-menu-item index="1-1">
          item one
        </el-menu-item>
        <el-menu-item index="1-2">
          item two
        </el-menu-item>
      </el-menu-item-group>
      <el-menu-item-group title="Group Two">
        <el-menu-item index="1-3">
          item three
        </el-menu-item>
      </el-menu-item-group>
      <el-sub-menu index="1-4">
        <template #title>
          item four
        </template>
        <el-menu-item index="1-4-1">
          item one
        </el-menu-item>
      </el-sub-menu>
    </el-sub-menu>
    <el-menu-item index="2">
      <el-icon><icon-menu /></el-icon>
      <span>Navigator Two</span>
    </el-menu-item>
    <el-menu-item
      index="3"
      disabled
    >
      <el-icon><document /></el-icon>
      <span>Navigator Three</span>
    </el-menu-item>
    <el-menu-item index="4">
      <el-icon><setting /></el-icon>
      <span>Navigator Four</span>
    </el-menu-item>
  </el-menu>
</template>

<script setup lang='ts'>

</script>

<style scoped>

</style>

  1. 在layoutName.vue 中
<template>
  <el-container>
    <el-aside width="200px">
      <Aside />
    </el-aside>
    <el-container>
      <el-header>Header</el-header>
      <el-main> <router-view /> </el-main>
    </el-container>
  </el-container>
</template>

<script lang="ts" setup>
import Aside from './components/layoutAside.vue'
</script>

<style scoped>
.el-container{
  height: 100vh;
}
.el-aside{
  background-color: #304156;
  color:#333;
}
</style>

  1. 终端运行发现, 图标不生效(icon), 在elementplus 中找icon, 发现要安装,根据自己情况安装一下
# NPM
$ npm install @element-plus/icons-vue
# Yarn
$ yarn add @element-plus/icons-vue
# pnpm
$ pnpm install @element-plus/icons-vue
  1. 在src => plugins => element-plus-icon.ts, 新建的(element-plus-icon.ts), 这用于插件
import { App } from 'vue'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'

export default {
  install (app: App) {
    for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
      app.component(key, component)
    }
  }
}

  1. 在main.ts 中注册icon ,
import { createApp } from 'vue'
import App from './App.vue'
// 引入element icon
import elementIcon from './plugins/element-plus-icon'

const app = createApp(App)
app.use(elementIcon)
...
  1. 接下是对router和layoutAside, 改进
  2. 在src => views 目录下新product 文件夹, 如图
    在这里插入图片描述
  3. 在route目录下, 新建modules目录, 再建 product.ts
import { RouteRecordRaw, RouterView } from 'vue-router'

const routes: RouteRecordRaw = {
  path: 'product',
  name: 'product',
  component: RouterView,
  children: [
    {
      path: 'product_list',
      name: 'product_list',
      component: () => import('@/views/product/list/indexName.vue')
    },
    {
      path: 'product_attr',
      name: 'product_attr',
      component: () => import('@/views/product/attr/indexName.vue')
    },
    {
      path: 'product_classify',
      name: 'product_classify',
      component: () => import('@/views/product/classify/indexName.vue')
    },
    {
      path: 'product_reply',
      name: 'product_reply',
      component: () => import('@/views/product/reply/indexName.vue')
    }
  ]

}

export default routes

  1. 在router目录index.ts中, 导入进来,引用它
import product from './modules/product'

const routes: RouteRecordRaw [] = [
  {
    path: '/',
    component: AppLayout,
    children: [
      {
        path: '/',
        name: 'home',
        component: () => import('@/views/home/indexName.vue')
      },
      product
    ]
  },
  ...
]
  1. router 和 界面创建好了, 剩下就是layoutAside.vue了
<template>
  <el-menu
    active-text-color="#ffd04b"
    background-color="#304156"
    class="el-menu-vertical-demo"
    default-active="2"
    text-color="#fff"
    router
  >
    <el-menu-item index="/">
      <el-icon><House /></el-icon>
      <span>首页</span>
    </el-menu-item>

    <el-sub-menu index="1">
      <template #title>
        <el-icon><location /></el-icon>
        <span>商品</span>
      </template>
      <el-menu-item index="/product/product_list">
        <el-icon><House /></el-icon>
        <span>列表</span>
      </el-menu-item>
      <el-menu-item index="/product/product_attr">
        <el-icon><House /></el-icon>
        <span>规格</span>
      </el-menu-item>
    </el-sub-menu>
  </el-menu>
</template>

<script setup lang='ts'>

</script>

<style scoped>
.em-menu{
  border-right: none;
}

</style>

  1. 终端运行: npm run dev, 就ok
    在这里插入图片描述

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

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

相关文章

CompletableFuture异步编程Api使用详解

Java 8 引入了很多的新特性&#xff0c;其中就包含了 CompletableFuture 类的引入&#xff0c;它允许我们通过在与主应用程序线程不同的线程上&#xff08;也就是异步&#xff09;运行任务&#xff0c;并向主线程通知任务的进度、完成或失败&#xff0c;来编写非阻塞代码。 Fu…

LVS-DR模式部署

目录 一、环境准备 1、DR模式介绍 2、DR模式工作原理 3、服务器准备 二、实验拓扑 三、配置网络环境 1、配置调度器网络环境 2、配置Web服务器网络环境 四、创建LVS-DR集群 1、创建LVS集群 2、添加Real Server 3、查看lvs配置 五、LVS服务器开启路由转发 六、效果…

TCP四次挥手 2MSL TIME_WAIT详解

TCP四次挥手 & 2MSL & TIME_WAIT详解TCP四次挥手流程各状态解析2MSL(2倍最大报文段生成时间)2MSL (Maximum Segment Lifetime) TIME_WAIT状态的存在有两个理由该状态为什么设计在主动关闭这一方?如何正确对待2MSL TIME_WAIT?TCP四次挥手流程 【注意】只要是申请关闭连…

基于Open vSwitch的传统限速和SDN限速--实验

基于Open vSwitch的传统限速和SDN限速--实验基于Open vSwitch的传统限速和SDN限速--实验1.下载与安装1.1 安装Docker1.2 Open vSwitch的安装2.配置实验环境3.实验步骤3.1启动floodlight控制器3.2创建拓扑3.3网卡限速3.4队列限速3.5 Meter表限速4.三种方式数据对比5.实验分析6.总…

仿大众点评——秒杀系统部分03——RabbitMq措施

RabbitMq保证消息不丢失 RabbitMQ如何保证消息的可靠性&#xff1a; 1.从生产者到消息队列&#xff0c;congfirm模式&#xff08;与事务相比confirm模式最大的优势是异步&#xff09;通过消息确认机制来保证&#xff0c;通过给每个指派唯一标志&#xff0c;完成消费后返回ack确…

【LeetCode每日一题】——136.只出现一次的数字

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 数组 二【题目难度】 简单 三【题目编号】 136.只出现一次的数字 四【题目描述】 给你一个 非…

[附源码]SSM计算机毕业设计风景区管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

再学DataX

一、DataX简介 DataX官网文档&#xff1a;https://github.com/alibaba/DataX/blob/master/introduction.md DataX 是一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同…

MyBatis基于XML的使用——动态sql

1、动态sql 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它 类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQL 语句有多痛苦&#xff0c;例如拼接时要确保不能忘记添加必要的空格&#xff0c;还要注意去掉列表最后一个列名的逗号。 利用动态 SQL&#…

14服务-ClearDiagnosticlnformation

诊断协议那些事儿 诊断协议那些事儿专栏系列文章&#xff0c;本文介绍存储数据传输服务下的14服务ClearDiagnosticlnformation&#xff0c;客户端使用ClearDiagnosticlnformation服务清除一个或多个服务器存储器中的诊断信息。 关联文章&#xff1a;$19服务:DTCStatusMask和s…

CockroachDB-读和写

本文知识点来源于官网地址https://www.cockroachlabs.com/docs/stable/architecture/reads-and-writes-overview.html 查询执行 当CRDB执行查询时&#xff0c;集群将请求路由到包含相关数据的范围的Leaseholder。如果查询涉及多个范围&#xff0c;则请求将发送给多个Leasehol…

求实数的整数次幂(循环版)(高效)(位运算解题)

求实数的整数次幂(循环版)(高效) (10 分) 原理图&#xff1a; 请编写函数&#xff0c;用循环语句以最快的方法求任意实数的任意整数次幂。 函数原型 double Power(double x, int n); 说明&#xff1a;参数 x 为底数&#xff0c;n 为指数。若参数正确&#xff0c;则函数值为…

智能驾驶开启产业新赛道:资本扎堆布局车规级高精定位

2022年被称为高阶智能驾驶元年的背后&#xff0c;新的产业链正在悄然发展。 车规级高精定位便是其中之一。2022年10月&#xff0c;主业聚焦于动力总成测试的上海华依科技集团股份有限公司&#xff08;以下简称“华依科技”&#xff0c;688071.SH&#xff09;&#xff0c;发布公…

漫画风格迁移神器 AnimeGANv2:快速生成你的漫画形象

生成你的漫画形象&#xff01; 漫画风格迁移神器 AnimeGANv2 文章目录生成你的漫画形象&#xff01; 漫画风格迁移神器 AnimeGANv2快速在线生成你的漫画形象AnimeGAN 简要介绍与其他动漫风格迁移模型的效果对比AnimeGANv2 的优点AnimeGANv2 风格多样化AnimeGANv2 网络结构快速生…

基于stm32单片机的水位检测自动抽水系统

资料编号&#xff1a;106 下面是相关功能视频演示&#xff1a; 106-基于stm32单片机的水位检测自动抽水系统Proteus仿真&#xff08;源码仿真全套资料&#xff09;功能介绍&#xff1a; 使用滑动变阻器模拟水位监测器&#xff0c;通过改变电压值表示水位的变化。stm32通过ADC…

【前端】从 0 到 1 实现一个网站框架(一、注册 [1] )

Hi~你好呀&#xff0c;等你很久啦~ 我是 LStar&#xff0c;一枚来自北京的初二女生&#xff0c;2020 年年初加入 CSDN。 话不多说&#xff0c;直入主题~&#xff08;我现在看两年多前我 11 岁那会发的文章&#xff0c;越看越想笑。为了不让四年后 18 岁的我看着这篇文章露出 …

超详细的mysql多表操作教程

目录 外键约束 概念 特点 操作 多表联合查询 概念 操作 多表操作总结 外键约束 概念 特点 定义一个外键时&#xff0c;需要遵守下列规则&#xff1a; 主表必须已经存在于数据库中&#xff0c;或者是当前正在创建的表。 必须为主表定义主键。 主键不能包含空值&#xf…

967亿销售额!博世解码智能汽车新蓝图

随着新一轮科技革命和产业变革的深化&#xff0c;在低碳化、电动化和智能化的推动下&#xff0c;处于变革关键时期的新能源汽车产业&#xff0c;正逐步由“政策驱动”转向“市场驱动”&#xff0c;智能化、网联化成为新趋势。 据中国汽车工业协会统计&#xff0c;今年我国新能…

通过 Traefik Hub 暴露家里的网络服务

Traefik Hub 简介 &#x1f4da;️Reference: 你的云原生网络平台 -- 发布和加固你的容器从未如此简单。 Traefik Hub 为您在 Kubernetes 或其他容器平台上运行的服务提供一个网关。 Traefik Hub 定位&#xff1a; 云原生网络平台 它有 2 大核心功能&#xff0c;我这次体验感…

pytorch深度学习实战lesson23

第二十三课 AlexNet AlexNet是在2012年被发表的一个金典之作&#xff0c;并在当年取得了ImageNet最好成绩&#xff0c;也是在那年之后&#xff0c;更多的更深的神经网路被提出&#xff0c;比如优秀的vgg,GoogleLeNet. 其官方提供的数据模型&#xff0c;准确率达到57.1%,top 1-5…