vue3-admin商品管理后台项目(图库模块开发)

今天我们继续来进行图库模块的开发工作
首先是布局实现:
使用element提供的container布局容器
在这里插入图片描述
利用布局将其分为左右两块,一块是侧边栏,一块是主体部分,然后书写它的样式

<template>
    <el-container class="bg-white rounded" :style="{ height: (h + 'px') }">
      <el-header class="image-header">Header</el-header>
      <el-container>
        <el-aside width="220px" class="image-aside">
            <div class="top">
                <div v-for="i in 100" :key="i">{
   {
    i }}</div>
            </div>
            <div class="bottom">
                分页区域
            </div>
        </el-aside>
        <el-main class="image-main">
            <div class="top">
                <div v-for="i in 100" :key="i">{
   {
    i }}</div>
            </div>
            <div class="bottom">
                分页区域
            </div>
        </el-main>
      </el-container>
    </el-container>
</template>

<script setup>
// 拿到浏览器高度
const windowHeight = window.innerHeight || document.body.clientHeight;
// 减去header高度+导肮栏高度+padding
const h = windowHeight - 64 - 44 -40;
</script>

<style>
.image-header{
   
    border-bottom: 1px solid #eeeeee;
    @apply flex items-center;
}

.image-aside{
   
    border-right: 1px solid #eeeeee;
    position: relative;
}

.image-main{
   
    position: relative;
}

.image-aside .top, .image-main .top{
   
    /* 相对aside定义,撑满左右两边和上下 */
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    bottom: 50px;
    /* y轴方向上默认 */
    overflow-y: auto;
}

.image-aside .bottom, .image-main .bottom{
   
    position: absolute;
    bottom: 0;
    height: 50px;
    left: 0;
    right: 0;
    @apply flex items-center justify-center;
}
</style>

另外,在App.vue里面对其滚动条进行样式优化:

然后目前的效果就是:
在这里插入图片描述

因为后面很多部分要用到相同的侧边栏和主体部分,所以我们对这两块进行抽离:
在components文件夹下面创建ImageAside.vue和ImageMain.vue
然后抽离:
ImageAside.vue

<template>
    <el-aside width="220px" class="image-aside">
        <div class="top">
            <div v-for="i in 100" :key="i">{
   {
    i }}</div>
        </div>
        <div class="bottom">
            分页区域
        </div>
    </el-aside>
</template>

<style>
.image-aside{
   
    border-right: 1px solid #eeeeee;
    position: relative;
}

.image-aside .top{
   
    /* 相对aside定义,撑满左右两边和上下 */
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    bottom: 50px;
    /* y轴方向上默认 */
    overflow-y: auto;
}

.image-aside .bottom{
   
    position: absolute;
    bottom: 0;
    height: 50px;
    left: 0;
    right: 0;
    @apply flex items-center justify-center;
}
</style>

ImageMain.vue

<template>
    <el-main class="image-main">
        <div class="top">
            <div v-for="i in 100" :key="i">{
   {
    i }}</div>
        </div>
        <div class="bottom">
            分页区域
        </div>
    </el-main>
</template>

<style>
.image-main{
   
    position: relative;
}
.image-main .top{
   
    /* 相对aside定义,撑满左右两边和上下 */
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    bottom: 50px;
    /* y轴方向上默认 */
    overflow-y: auto;
}

.image-main .bottom{
   
    position: absolute;
    bottom: 0;
    height: 50px;
    left: 0;
    right: 0;
    @apply flex items-center justify-center;
}
</style>

此时的list.vue

<template>
    <el-container class="bg-white rounded" :style="{ height: (h + 'px') }">
      <el-header class="image-header">Header</el-header>
      <el-container>
        <!-- <el-aside width="220px" class="image-aside">
            <div class="top">
                <div v-for="i in 100" :key="i">{
   {
    i }}</div>
            </div>
            <div class="bottom">
                分页区域
            </div>
        </el-aside> -->
        <ImageAside />
        <!-- <el-main class="image-main">
            <div class="top">
                <div v-for="i in 100" :key="i">{
   {
    i }}</div>
            </div>
            <div class="bottom">
                分页区域
            </div>
        </el-main> -->
        <ImageMain />
      </el-container>
    </el-container>
</template>

<script setup>
// 引入公共侧边栏 
import ImageAside from "~/components/ImageAside.vue"
// 引入公共主体部分
import ImageMain from "~/components/ImageMain.vue"
// 拿到浏览器高度
const windowHeight = window.innerHeight || document.body.clientHeight;
// 减去header高度+导肮栏高度+padding
const h = windowHeight - 64 - 44 -40;
</script>

<style>
.image-header{
   
    border-bottom: 1px solid #eeeeee;
    @apply flex items-center;
}
</style>

抽离完成

然后我们进行图库分类组件开发:
除去之前的1-100,然后加上需要的按钮图标
此时的ImageAside.vue

<template>
    <el-aside width="220px" class="image-aside">
        <div class="top">

            <AsideList>
                分类标题
            </AsideList>

            <!-- 激活状态 -->
            <AsideList active>
                分类标题
            </AsideList>

        </div>
        <div class="bottom">
            分页区域
        </div>
    </el-aside>
</template>
<!-- 公共侧边栏部分抽离 -->

<script setup>
import AsideList from './AsideList.vue';
</script>

<style>
.image-aside{
   
    border-right: 1px solid #eeeeee;
    position
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mzldustu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值