项目创建好,接下来引入Container 布局容器,
- 在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>
 
- 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
 
- styles => common.css 目录下
*{
margin: 0;
padding: 0;
} - 注意要main.ts 文件下, 要注释 // import ‘./style.css’,不然 他们会居中
 - 终端: npm run dev
 - 接下来是看菜单: Menu 菜单, 在elementplus中搜索,
 - 在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>
 
- 在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>
 
- 终端运行发现, 图标不生效(icon), 在elementplus 中找icon, 发现要安装,根据自己情况安装一下
 
# NPM
$ npm install @element-plus/icons-vue
# Yarn
$ yarn add @element-plus/icons-vue
# pnpm
$ pnpm install @element-plus/icons-vue
 
- 在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)
    }
  }
}
 
- 在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)
...
 
- 接下是对router和layoutAside, 改进
 - 在src => views 目录下新product 文件夹, 如图

 - 在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
 
- 在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
    ]
  },
  ...
]
 
- 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>
 
- 终端运行: npm run dev, 就ok

 










