[toc]
### 1. 优化底部容量提示,将容量提示放到sider中
```
<template>
<Layout class="layout">
<Header class="bg-white px-0 layout-header">
<Menu @on-select="handleSelect" mode="horizontal" theme="light" :active-name="topActive" class="d-flex align-items-center">
<div class="layout-logo">企业网盘</div>
<MenuItem :name="index" v-for="(item,index) in topMenus" :key="index">
<Icon :type="item.icon" />
{{item.title}}
</MenuItem>
<div class="ml-auto mr-3">
<Dropdown style="margin-left: 20px" placement="bottom-end">
<a href="javascript:void(0)">
<Avatar src="https://i.loli.net/2017/08/21/599a521472424.jpg" />
管理员
<Icon type="ios-arrow-down"></Icon>
</a>
<DropdownMenu slot="list">
<DropdownItem>个人资料</DropdownItem>
<DropdownItem>修改密码</DropdownItem>
<DropdownItem>安全退出</DropdownItem>
</DropdownMenu>
</Dropdown>
</div>
</Menu>
</Header>
<Layout>
<Sider hide-trigger class="sider">
<Menu @on-select="handleSiderSelect" class="sider-menu" theme="light" active-name="1" width="200px">
<MenuGroup title="全部文件">
<MenuItem name="1">
<Icon type="md-document" />
图片
</MenuItem>
<MenuItem name="2">
<Icon type="md-chatbubbles" />
视频
</MenuItem>
<MenuItem name="3">
<Icon type="md-chatbubbles" />
音乐
</MenuItem>
<MenuItem name="4">
<Icon type="md-chatbubbles" />
其他
</MenuItem>
</MenuGroup>
<MenuGroup title="其他操作">
<MenuItem name="5">
<Icon type="md-heart" />
我的分享
</MenuItem>
<MenuItem name="6">
<Icon type="md-leaf" />
回收站
</MenuItem>
</MenuGroup>
</Menu>
<div class="footer-left px-3">
<Progress :percent="90" :stroke-color="['#108ee9', '#87d068']" hide-info />
<div class="d-flex mt-2 justify-content-between">
<small>总共: 100GB</small>
<small class="text-warning">已用: 90GB</small>
</div>
</div>
</Sider>
<Content class="bg-white">主内容</Content>
</Layout>
</Layout>
</template>
<script>
export default {
data() {
return {
topActive: 0,
topMenus: [{
icon: "ios-paper",
title: "网盘"
},
{
icon: "ios-people",
title: "分享"
},
{
icon: "ios-construct",
title: "更多"
}
]
}
},
methods: {
handleSelect(e) {
console.log(e)
this.topActive = e;
},
handleSiderSelect(e) {
console.log(e)
}
}
}
</script>
<style scoped="scoped">
.footer-left /deep/ .ivu-progress-inner {
background: #fff !important;
border: 1px solid #eee !important;
}
.layout {
height: 100%;
}
.footer-left {
width: 200px;
background-color: #ebf0f1;
height: 55px;
position: absolute;
bottom:0;
left : 0;
}
.layout-logo {
width: 200px;
text-align: center;
font-size: 25px;
}
.layout-header {
height: 60px;
line-height: 60px;
}
.sider{
position: relative;
}
.sider,
.sider-menu {
background-color: #ebf0f1;
}
</style>
```
### 2. 解决content区域滚动条滚动问题
```
<template>
<Layout class="layout">
<Header class="bg-white px-0 layout-header">
<Menu @on-select="handleSelect" mode="horizontal" theme="light" :active-name="topActive" class="d-flex align-items-center">
<div class="layout-logo">企业网盘</div>
<MenuItem :name="index" v-for="(item,index) in topMenus" :key="index">
<Icon :type="item.icon" />
{{item.title}}
</MenuItem>
<div class="ml-auto mr-3">
<Dropdown style="margin-left: 20px" placement="bottom-end">
<a href="javascript:void(0)">
<Avatar src="https://i.loli.net/2017/08/21/599a521472424.jpg" />
管理员
<Icon type="ios-arrow-down"></Icon>
</a>
<DropdownMenu slot="list">
<DropdownItem>个人资料</DropdownItem>
<DropdownItem>修改密码</DropdownItem>
<DropdownItem>安全退出</DropdownItem>
</DropdownMenu>
</Dropdown>
</div>
</Menu>
</Header>
<Layout>
<Sider hide-trigger class="sider">
<Menu @on-select="handleSiderSelect" class="sider-menu" theme="light" active-name="1" width="200px">
<MenuGroup title="全部文件">
<MenuItem name="1">
<Icon type="md-document" />
图片
</MenuItem>
<MenuItem name="2">
<Icon type="md-chatbubbles" />
视频
</MenuItem>
<MenuItem name="3">
<Icon type="md-chatbubbles" />
音乐
</MenuItem>
<MenuItem name="4">
<Icon type="md-chatbubbles" />
其他
</MenuItem>
</MenuGroup>
<MenuGroup title="其他操作">
<MenuItem name="5">
<Icon type="md-heart" />
我的分享
</MenuItem>
<MenuItem name="6">
<Icon type="md-leaf" />
回收站
</MenuItem>
</MenuGroup>
</Menu>
<div class="footer-left px-3">
<Progress :percent="90" :stroke-color="['#108ee9', '#87d068']" hide-info />
<div class="d-flex mt-2 justify-content-between">
<small>总共: 100GB</small>
<small class="text-warning">已用: 90GB</small>
</div>
</div>
</Sider>
<Content class="bg-white layout-content">
<div class="content-box">
<router-view></router-view>
</div>
</Content>
</Layout>
</Layout>
</template>
<script>
export default {
data() {
return {
topActive: 0,
topMenus: [{
icon: "ios-paper",
title: "网盘"
},
{
icon: "ios-people",
title: "分享"
},
{
icon: "ios-construct",
title: "更多"
}
]
}
},
methods: {
handleSelect(e) {
console.log(e)
this.topActive = e;
},
handleSiderSelect(e) {
console.log(e)
}
}
}
</script>
<style scoped="scoped">
.footer-left /deep/ .ivu-progress-inner {
background: #fff !important;
border: 1px solid #eee !important;
}
.layout {
height: 100%;
}
.footer-left {
width: 200px;
background-color: #ebf0f1;
height: 55px;
position: absolute;
bottom:0;
left : 0;
}
.layout-logo {
width: 200px;
text-align: center;
font-size: 25px;
}
.layout-header {
height: 60px;
line-height: 60px;
}
.sider{
position: relative;
}
.sider,
.sider-menu {
background-color: #ebf0f1;
}
.layout-content{
position: relative;
}
.content-box{
position: absolute;
overflow-y: auto;
bottom: 0;
top: 0;
right: 0;
left: 0;
}
</style>
```
### 3. 在pages目录内创建template文件夹
### 4. 在template文件夹内创建index.vue
### 5. 配置index.vue组件的路由
```
import Vue from "vue";
import VueRouter from "vue-router";
Vue.use(VueRouter);
const routes = [
{
path: "/login",
name: "login",
component: () => import( "../views/login.vue")
},
{
path: "/",
redirect : "/index",
name: "layout",
component: () => import("../views/layout.vue"),
children : [
{
path : "/index",
name : "index",
component: () => import("../views/index.vue")
}
]
}
];
const router = new VueRouter({
mode: "history",
base: process.env.BASE_URL,
routes
});
export default router;
```
### 6.实现网盘主布局的顶部操作条
```
<template>
<div>
<div class="index-top border-bottom d-flex px-3 py-2">
<Button type="primary" icon="ios-search" class="mr-2">上传</Button>
<Button icon="ios-search" class="mr-2">新建文件夹</Button>
<Button icon="ios-search" class="mr-2">下载</Button>
<Button icon="ios-search" class="mr-2">分享</Button>
<Button icon="ios-search" class="mr-2">重命名</Button>
<Button icon="ios-search" class="mr-2">删除</Button>
<Input class="ml-auto top-search" search enter-button placeholder="请输入关键词" />
</div>
</div>
</template>
<script>
</script>
<style scoped="scoped">
.index-top{
position: absolute;
top : 0;
left: 0;
right: 0;
}
.top-search{
width: 200px;
}
</style>
```
- 第一章 VUE-CLI+IVIEW进行项目初始化
- 1.1 使用vue-cli4创建项目
- 1.2 引入iview组件库
- 1.3 引入bootstrap4和图标库
- 1.4 安装和配置vue-router
- 第二章 pc端登录页开发
- 2.1 pc端登录页开发(一)
- 2.2 pc端登录页开发(二)
- 2.3 pc端登录页开发(三)
- 第三章 pc端全局布局开发
- 3.1 pc端全局布局开发(一)
- 3.2 pc端全局布局开发(二) 顶部导航
- 第四章 pc端侧边栏开发
- 4.1 pc端侧边栏开发(一) 菜单
- 4.2 pc端侧边栏开发(二) 容量提示
- 第五章 pc端文件列表开发
- 5.1 pc端文件列表开发(一) 操作条
- 5.2 pc端文件列表开发(二) 列表(1)
- 5.3 pc端文件列表开发(三) 列表(2)
- 第六章 封装多功能文件列表组件
- 6.1 封装文件列表组件(一)
- 6.2 封装文件列表组件(二) 删除
- 6.3 封装文件列表组件(三) 多选操作
- 6.4 封装文件列表组件(四) 重命名
- 6.5 封装文件列表组件(五) 图片预览
- 第七章 前端数据交互开发
- 7.1 pc端交互-引入axios和vuex
- 7.2 pc端交互-注册登录
- 7.3 pc端交互-初始化和退出登录
- 7.4 pc端交互-拦截器完善
- 7.5 权限验证
- 7.6 pc端交互-获取文件列表
- 7.7 pc端交互-创建文件夹
- 7.8 上传文件
- 7.9 pc端交互-文件重命名
- 7.10 pc端交互-批量删除
- 7.11 pc端交互-搜索文件
- 7.12 pc端交互-切换目录
- 7.13 pc端交互-优化体验和筛选类型
- 7.14 pc端交互-下载文件
- 7.15 pc端交互-生成分享链接
- 7.16 pc端交互-我的分享列表
- 7.17 pc端交互-查看分享
- 7.18 pc端交互-保存我的网盘
- 第八章 项目打包与部署
- 8.1 部署前环境搭建
- 8.2 部署pc端部分