# sph-administration
**Repository Path**: ouzai-zai/sph-administration
## Basic Information
- **Project Name**: sph-administration
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-12-16
- **Last Updated**: 2021-12-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 后台管理项目
> 这是一个极简的 vue admin 管理后台。它只包含了 Element UI & axios & iconfont & permission control & lint,这些搭建后台必要的东西。
## Buid Setup
```bash
# 克隆项目
git clone https://github.com/PanJiaChen/vue-admin-template.git
# 进入项目目录
cd vue-admin-template
# 安装依赖
npm install
# 建议不要直接使用 cnpm 安装以来,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npm.taobao.org
# 启动服务
npm run dev
```
浏览器访问 [http://localhost:9528](http://localhost:9528)
## 其它
```bash
# 预览发布环境效果
npm run preview
# 预览发布环境效果 + 静态资源分析
npm run preview -- --report
# 代码格式检查
npm run lint
# 代码格式检查并自动修复
npm run lint -- --fix
```
更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/)
## 一、什么是后台管理系统
> 注意:前端领域中,开发后台管理系统,并非是Java、PHP等后台语言项目
后台管理系统:可以让用户通过一个可视化工具,实现对数据库的增删改查操作,而需要注意的是,根据不同角色(例如:老板、员工)看到的,操作的内容是不同的
模板地址:`https://github.com/PanJiaChen/vue-admin-template`
后台管理项目API接口在线文档:http://39.98.123.211:8216/swagger-ui.html#/
## 二、模板介绍
- build ---->
- index.js weback配置文件【很少修改】
- mock ----> mock数据文件夹【模拟一些假数据】
- node_modules ----> 项目依赖的模块
- public ----> ico图标,静态页面,public 文件夹里经常放置一些静态资源,在项目打包的时候webpack不会编译这个文件夹,原封不动打包到 dist 文件夹中
- src ----> 源代码
- api:涉及请求相关
- assets:放置静态资源(一般是共享的资源),放在 assets 的文件夹,webpack打包时会进行编译
- components:一般放置非路由组件,或者全局组件
- icon:这个文件夹放置svg矢量图
- layout:放置一些组件与混入
- router:路由相关
- store:vuex相关
- style:样式相关
- utils:request.js 是 axios 二次封装的文件
- views:放置路由组件
- App.vue ----> 根组件
- main.js ----> 入口文件
- permission.js ----> 导航守卫相关
- settings.js ----> 项目配置文件
- .env.development ----> webpack可以检测到是开发环境
- .env.production ----> webpack可以检测到是生产环境
- .env.development ----> webpack可以检测到是测试环境
## 三、完成登录业务
**找到 src > views > login > index.vue 文件**
首先 修改登录页的静态,将英文的地方改成中文
修改背景图
然后找到登录按钮对应的点击事件 `@click.native.prevent="handleLogin"`

然后**找到 src > store > modules > user.js 文件**,这里是vuex存储数据的地方,找到 action 下的 login 方法,因为当时还没有async -- await,所以用的是then -> catch。
把它改成async -- await 的写法

然后找到 src > api > user.js
修改aip,因为初始都是用的mock的假数据,换成真实数据

然后找到 src > utlis > request.js 修改二次封装的axios
修改请求拦截器的token字段,这个值是后台商量好的

修改响应拦截器,有的后台返回的成功数据不一定是20000 res.code !== 200
这时候去点击登录是会报错的,因为换成真实接口之后需要解决代理跨域问题

所以找到根目录下的 vue.config.js,找到devserver属性,target:为服务器,
也可以找到webpack官方API `https://webpack.docschina.org/configuration/dev-server/#devserverproxy`

## 四、退出登录业务
找到 src > layout > components > Navbar.vue,把不需要的 a 标签删掉

## 五、路由的搭建
将不需要的路由组件删除,并在路由配置中把对应的组件配置删除
找到 router > index.js
```js
{
path: '/',
// 当你访问 / 的时候,它去到的是Layout这个骨架组件
component: Layout,
//然后再重定向到dashboard组件
redirect: '/dashboard',
// 子组件
children: [{
path: 'dashboard',
name: 'Dashboard',
component: () => import('@/views/dashboard/index'),
// title 是侧边的名字,icon是图标
meta: { title: 'Dashboard', icon: 'dashboard' }
}]
}
```

## 六、搭建品牌管理路由
使用 element-ui 插件(这个模板已经安装好了,可以直接使用)
使用``标签生成分页器模板

## 七、浅拷贝、深拷贝
1. JavaScript 变量包含两种不同数据类型的值:基本类型和引用类型
1. 基本类型值的是简单的数据段,包括 ES6 新增的共有六种,number,string,null,undefined,Boolean,symbol
2. 引用类型指那些可能由多个值构成的对象,object
2. JavaScript 的变量存储方式,栈、堆
> 浅拷贝:
>
> 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。”里面的对象“会在原来的对象和它的副本之间共享。
>
> 
>
> 地址指向的是同一个堆,而当我们写 a[0] = 100的时候,b也自然受到了影响
> 深拷贝:
>
> 
>
> 一个栈对应一个堆,虽然他们的值都相同,但是修改他们并不会影响到其他
## 八、数据可视化
> 在vue中,正常是无法导入echarts
>
> 原因:官方文档明确指出v5版本 中不再支持
>
> ```js
> import echarts from 'echarts';
> // 或者按需引入
> import echarts from 'echarts/lib/echarts';
> ```
>
> 所以我们应该相应的将导入语 句改为
>
> ```js
> import * as echarts from 'echarts';
> // 按需引入
> import * as echarts from 'echarts/lib/echarts';
> ```
### 8.1、canvas的使用
- 基本:
- canvas画布是html5 中新增的一个特性
- canvas默认高度为300 * 150
- canvas画布中添加文本内容是没有意义的
- 不能通过样式去设置画布宽高
- canvas标签的宽高务必通过width | height属性去设置
- 坐标值的起始点为左上角
- 获取画布和笔
- ```js
// 获取画布
let canvas = document.querySelector('canvas')
// 获取笔
let ctx = canvas.getContext('2d')
```
- 绘制线段
- 调用画笔的moveTo方法,参数为坐标值
- ```js
// 绘制线段:起点
ctx.moveTo(100, 100)
```
- 绘制其他点
- 调用lineTo方法
- ```js
// 其他点设置
ctx.lineTo(100, 200)
```
- 落笔
- ```js
// stroke方法绘制
ctx.stroke()
```
- 起点与终点连接
- ```js
// 起点和终点连接
ctx.closePath()
```
### 8.2、svg的使用
- svg双闭合标签,默认搞度300 * 150
- svg绘制图形务必在svg标签内部绘制
绘制直线:
```js
```
绘制折线:
```js
```
绘制矩形:
```js
```
绘制圆形:
```js
```
绘制椭圆:
```js
```
绘制多边形:
```js
```
绘制任意图形:
```js
```
### 8.3、Echarts的使用
- 准备一个容器`
`,可以在样式中设置宽高,容器就是显示图表区域
- ```html
```
- 初始化图表
- ```js
// 基于坐标好的dom初始化echarts实例
let dom = document.querySelector('div')
// 创建echarts实例
var myChart = echarts.init(dom);
// 指定图标的配置项与数据
myChart.setOption({})
```
- setOption配置项有很多,需要参考文档`https://echarts.apache.org/zh/option.html#title`
- 在一个图标中显示多个图标,就是在series数组中多配置几个图表对象
- ```js
myChart.setOption({
// 图标标题
title: {
// 主标题
text: '数据可视化',
// 子标题
subtext: 'echarts基本使用',
// 主标题颜色
textStyle: {
color: 'cyan'
},
// 设置标题位置
left: 'center'
},
// x轴的配置
xAxis: {
data: ['衣服', '游戏', '直播', '电竞', '手机', '宝宝']
},
// y轴的配置
yAxis: {},
// 系列设置,绘制一个什么样的图标
series: [
{
// 图标的类型,bar柱状图,line折线图,pie饼图
type: 'bar',
// 图标数据
data: [60, 40, 21, 550, 220, 60],
color: 'red'
},
{
// 图标的类型,bar柱状图,line折线图,pie饼图
type: 'pie',
// 图标数据
data: [{ name: 'x', value: 10 }, { name: 'y', value: 34 }, { name: 'z', value: 56 },],
// 整个图表的宽高
width: 200,
height: 200,
// 图表位置
left: 150,
top: 50,
// 图表半径
radius: 30
}
]
})
```
### 8.4、Echarts 数据集
数据集则是创建一个变量,里面是个二维数组,用来存放数据
```js
let data = [
/*
第一个参数为x轴的数据,需要和xAxis的数据顺序对应
第二个参数为柱状图数据
第三个参数为折线图数据
第四个参数为饼状图某块区域的名称
第五个参数为饼状图数据
每一列称为一个[维度]从0开始
*/
['衣服', 11, 31, '衣服', 10],
['游戏', 22, 25, '游戏', 50],
['直播', 32, 49, '直播', 66],
['电竞', 47, 21, '电竞', 77],
['手机', 90, 90, '手机', 12],
['宝宝', 50, 60, '宝宝', 4],
]
myChart.setOption({
// 设置字符集
dataset: {
// 数据源
source: data
},
// x轴的配置
xAxis: {
data: ['衣服', '游戏', '直播', '电竞', '手机', '宝宝']
},
series: [
// 柱状图
{
// 图标的类型,bar柱状图,line折线图,pie饼图
type: 'bar',
color: 'red',
// 使用encode属性
encode: {
// 表示柱状图的y轴的数据映射到维度1
y: 1
}
},
// 折线图
{
type: 'line',
color: '#000',
encode: {
// 表示折线图的y轴的数据映射到维度2
y: 2
}
},
// 饼状图
{
// 图标的类型,bar柱状图,line折线图,pie饼图
type: 'pie',
// 图标数据
// data: [{ name: 'x', value: 10 }, { name: 'y', value: 34 }, { name: 'z', value: 56 },],
// 整个图表的宽高
width: 200,
height: 200,
// 图表位置
left: 150,
top: 50,
// 图表半径
radius: 30,
encode: {
// 饼状图有点特殊,他需要两个属性值,itemName和value
// itemName则是旁边的名字,value是对应的数据
itemName: 3,
value: 4
}
}
]
})
```
### 8.5、Echarts 组件的使用
在配置项中进行使用
```js
myChart.setOption({
series: [
{
name: '柱状图',
type: 'bar',
data:[20,30,50,80]
},
{
name: '折线图',
type: 'line',
data:[30,40,60,90]
},
],
// 提示组件
tooltip: {
// 提示文字的颜色
textStyle: {
color: 'red',
},
},
// 系列切换
legend: {
// 需要给每个系列定义一个name属性,用来区分是那个图表
data: ['柱状图','折线图'],
},
// 工具栏
toolbox: {
// 显示与隐藏
show: true,
// 工具分组
feature: {
// 数据区域缩放。以及返回
dataZoom: {
yAxisIndex: 'none',
},
// 数据视图工具,可以展现当前图表所用的数据,编辑后可以动态更新
dataView: {
readOnly: false,
},
// 动态类型切换
magicType: {
type: ['line','bar'],
},
// 配置项还原
restore: {},
// 下载为图片
saveAsImage: {},
},
},
// 调整布局
grid: {
left: '30',
right: '0',
},
})
```
### 8.6、双y轴坐标系
```js
mc.setOption({
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
},
// 设置两个y轴
yAxis: [
{},
{}
],
series: [
{
data: [150, 230, 258, 44, 135, 77, 260],
type: 'line',
// 设置折线图使用哪一个y轴,值为yAxis数组中的索引值
yAxisIndex: 0,
},
{
data: [100, 33, 205, 72, 144, 41, 224],
type: 'bar',
// 设置折线图使用哪一个y轴,值为yAxis数组中的索引值
yAxisIndex: 1,
},
],
})
```
88 1:05:51