Vue2尚硅谷后台管理系统自学笔记
文章目录
一、后台开发模板
1、先解压;
2、解压之后在文件所在文件夹打开cmd;
3、npm安装node依赖,npm install;
4、vscode打开文件 npm run dev运行程序。
二、完成登录业务
1、静态页面的修改(文字、注释、背景图片等)
2、书写API(换成真实接口,接口文档:http://39.98.123.211:8170/swagger-ui.html#/)
代码如下(示例):
// 登录接口
export const login = (data) => request({
url: '/admin/acl/index/login', method: 'post', data })
3、axios二次封装
- 修改X-Token为token
// 每一个请求都在请求头携带token
config.headers['token'] = getToken()
- 修改响应拦截器的code
if (res.code !== 20000 && res.code !== 200)
4、解决代理跨域问题
代码如下:
// 配置代理跨域
proxy: {
'/dev-api': {
target: 'http://gmall-h5-api.atguigu.cn',
pathRewrite: {
'^/dev-api': '' },
}
},
三、退出登录
1、修改layout文件中Navbar组件的列表文字
四、路由的搭建
1、删除原有的不需要的路由组件,并创建几个新的组件,如图:
2、修改router
新增 router 代码如下:
{
path: '/',
component: Layout, // layout是大的框架
redirect: '/dashboard',
children: [{
path: 'dashboard',
name: 'Dashboard',
component: () => import('@/views/dashboard/index'),
// meta里是侧边栏标题和小图标
meta: {
title: '首页', icon: 'dashboard' }
}]
},
{
// 这些都是侧边栏路由,所以都在首页
path: '/product',
name: 'Product',
component: Layout, // layout是大的框架
// 记得设置侧边栏图标,和商品的图标(注:小标题没有小图标)
meta: {
title: '商品管理', icon: 'el-icon-goods' },
children: [
{
path: 'attr',
name: 'Attr',
component: () => import('@/views/product/Attr'),
meta: {
title: '平台属性属性' }
},
{
path: 'spu',
name: 'Spu',
component: () => import('@/views/product/Spu'),
meta: {
title: 'Spu管理' }
},
{
path: 'sku',
name: 'Sku',
component: () => import('@/views/product/Sku'),
meta: {
title: 'Sku管理' }
},
{
path: 'trademark',
name: 'TradeMark',
component: () => import('@/views/product/tradeMark'),
meta: {
title: '品牌管理' }
},
]
},
3、修改模板的style的class错误(改后有了侧边距)
4、完成结果:
五、品牌管理组件
1、设置静态组件:
- 使用ele-ui中的button、table、pagination,messagebox提示框、form表单验证、dialog对话框
代码如下:
<template>
<div>
<el-button type="primary" icon="el-icon-plus" @click="addTradeMark"
>添加</el-button
>
<!--
:data="data"列表要展示的数据
border:是否带有纵向边框
align:设置单元格对齐方式
label:设置标题内容
width:对应列的宽度
每个el-table-column是一列数据
-->
<el-table style="width: 100%; margin-top: 10px" border :data="list">
<el-table-column type="index" label="序号" width="100px" align="center">
</el-table-column>
<el-table-column prop="tmName" label="品牌名称" width="width">
</el-table-column>
<el-table-column prop="prop" label="品牌LOGO" width="width">
<!-- row获取的是一行的数据 ,$index是每行数据的索引-->
<template slot-scope="{ row, $index }">
<img :src="row.logoUrl" alt="" style="width: 100px; height: 100px" />
</template>
</el-table-column>
<el-table-column prop="prop" label="操作" width="width">
<template slot-scope="{ row, $index }">
<el-button
type="warning"
icon="el-icon-edit"
size="mini"
@click="updateTradeMark(row)"
>
修改
</el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
@click="deleteTradeMark(row)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!--
total:总条目数
page-size:每页显示数据数
pager-count:页码按钮的数量,连续页码数要减去-2(首页和尾页)
current-page:当前页数
page-sizes:每页显示个数选择器的选项设置
layout:分页器各个组件的相对位置。->可设置靠左或者靠右
@current-change="" :当页数发生变化是调用方法,自动会传入参数pager(当前页)
@size-change="":当每页展示数据量变化是调用,自动会传入参数limit(每页展示数据量)
-->
<el-pagination
style="margin-top: 20px; text-align: center"
:total="total"
:page-size="limit"
:pager-count="7"
:current-page="page"
:page-sizes="[3, 5, 10]"
@current-change="handlePageChange"
@size-change="handleSizeChange"
layout="prev, pager, next, jumper, ->,sizes, total"
>
</el-pagination>
<!-- 添加修改的对话框 -->
<el-dialog
:title="tmForm.id ? '修改品牌' : '添加品牌'"
:visible.sync="dialogFormVisible"
>
<!--
表单验证必须绑定:
:model收集表单数据
:rules表单验证规则
ref获取表单标签
对每个表单中的item绑定prop,prop绑定的是data中rules中的规则
-->
<el-form :model="tmForm" :rules="rules" ref="ruleForm">
<el-form-item label="品牌名称" label-width="100px" prop="tmName">
<el-input
autocomplete="off"
style="width: 80%"
v-model="tmForm.tmName"
></el-input>
</el-form-item>
<el-form-item label="品牌LOGO" label-width="100px" prop="logoUrl">
<!-- action:不能用v-model获取图片数据因为不是表单元素,所以用action上传图片地址 -->
<el-upload
class="avatar-uploader"