# notbooks
**Repository Path**: z_qaz/notbook
## Basic Information
- **Project Name**: notbooks
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-12-11
- **Last Updated**: 2021-01-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# notbooks
## git的使用
下载git上的项目:在电脑某个硬盘创建一个文件夹,并在文件夹鼠标右键选择Git Bash,然后输入git clone命令克隆并下载项目
git clone https:*******.git
cd:进入某个目录
mkdir:创建一个文件
pwd:显示当前的目录路径
#### 添加文件到版本库
1. git init (初始化)
2. git add 文件名:将文件提交到暂存区
3. git commit -m '备注':将暂存区文件提交到仓库(单引号内为注释)
4. 检查是否有未提交的文件
通过下面的命令,检查该版本库是否有文件未提交:
git status:检查当前文件状态
5. 检查文件是否被修改
修改文件后,通过命令git status发现,文件已经被修改,但是未提交
git diff:查看文件修改的内容
6. 查看历史变更记录
git log:获得历史修改记录
git log --pretty=oneline:使记录只显示主要的内容,一行显示
7. 版本回退
cat:查看文件内容
git reset --hard HEAD^:回退到上一个版本
git reflog:获取历史版本号
git reset --hard 版本号:回退到该版本号对应的版本
PS:如果要回退到上上个版本,可以使用git reset --hard HEAD^^命令,但是这样稍显麻烦,如果回退到100个版本之前,只需要执行这个命令即可:git reset --hard HEAD~100;
8. 将本地文件推送到github仓库
git push
git remote add origin https://github.com/zwg481026/APITest.git是将你本地的仓库和github仓库进行关联,在操作时候,需要将github地址替换为自己的,否则无法推送!
第一次推送master分支时,加上了 –u参数,Git会将本地的master分支内容推送的远程新的master分支,还会把2个master分支关联起来,在以后的推送或者拉取时就可以简化操作。
推送成功后,可以立刻在github页面中看到远程库的内容已经和本地一模一样了登录你的github,从仓库中查看:
之后,只要本地做了修改提交,就可以使用git push origin master命令进行文件推送。
## 本地时间的封装
#### datatime.ts
```
//实时显示当前时间
private getDay = '';
private gettime = '';
private getWeek = '';
private getTime() {
var _this = this;
let yy = new Date().getFullYear();
let mm = new Date().getMonth() + 1;
let dd = new Date().getDate();
let hh = new Date().getHours();
let mf = new Date().getMinutes() < 10 ? '0' + new Date().getMinutes() : new Date().getMinutes();
let ss = new Date().getSeconds() < 10 ? '0' + new Date().getSeconds() : new Date().getSeconds();
let week = new Date().getDay();
let weeks = ["日", "一", "二", "三", "四", "五", "六"];
let getWeek = "星期" + weeks[week];
_this.getDay = yy + '-' + mm + '-' + dd;
_this.gettime = hh + ':' + mf + ':' + ss;
_this.getWeek = getWeek;
}
mounted() {
var _this = this;//声明一个变量指向Vue实例this,保证作用域一致
setInterval(() => {
_this.getTime();
}, 1000);
}
```
#### datatime.vue
```
直接调用需要的数据
{{ getDay }}
{{ getWeek }}
```
## 滚动条设置
```
//右边滚动条
::-webkit-scrollbar {
width: 10px; /*滚动条宽度*/
height: 16px; /*滚动条高度*/
}
/*定义滚动条轨道 内阴影+圆角*/
::-webkit-scrollbar-track {
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
border-radius: 10px; /*滚动条的背景区域的圆角*/
background-color: #f5f5f5; /*滚动条的背景颜色*/
}
/*定义滑块 内阴影+圆角*/
::-webkit-scrollbar-thumb {
border-radius: 10px; /*滚动条的圆角*/
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
background-color: #00e8ff; /*滚动条的背景颜色*/
}
```
## 公司项目说明
##### 前序准备
你需要在本地安装 [node](http://nodejs.org/) 和 [git](https://git-scm.com/)。本项目技术栈基于 [typescript](https://www.typescriptlang.org/)、[vue](https://cn.vuejs.org/index.html)、[vuex](https://vuex.vuejs.org/zh-cn/)、[vue-router](https://router.vuejs.org/zh-cn/) 、[vue-cli](https://github.com/vuejs/vue-cli) 、[axios](https://github.com/axios/axios) 和 [element-ui](https://github.com/ElemeFE/element),所有的请求数据都使用[faker.js](https://github.com/Marak/Faker.js)进行模拟,提前了解和学习这些知识会对使用本项目有很大的帮助。
##### 目录结构
本项目已经为你生成了一个完整的开发框架,提供了涵盖后台开发的各类功能和坑位,下面是整个项目的目录结构。
```bash
├── mock # mock 服务器 与 模拟数据
├── public # 静态资源 (会被直接复制)
│ │── favicon.ico # favicon图标
│ │── manifest.json # PWA 配置文件
│ └── index.html # html模板
├── src # 源代码
│ ├── api # 所有请求
│ ├── assets # 主题 字体等静态资源 (由 webpack 处理加载)
│ ├── components # 全局组件
│ ├── directive # 全局指令
│ ├── filters # 全局过滤函数
│ ├── icons # svg 图标
│ ├── lang # 国际化
│ ├── layout # 全局布局
│ ├── pwa # PWA service worker 相关的文件
│ ├── router # 路由
│ ├── store # 全局 vuex store
│ ├── styles # 全局样式
│ ├── utils # 全局方法
│ ├── views # 所有页面
│ ├── App.vue # 入口页面
│ ├── main.js # 入口文件 加载组件 初始化等
│ ├── permission.ts # 权限管理
│ ├── settings.ts # 设置文件
│ └── shims.d.ts # 模块注入
├── tests # 测试
├── .circleci/ # 自动化 CI 配置
├── .browserslistrc # browserslistrc 配置文件 (用于支持 Autoprefixer)
├── .editorconfig # 编辑相关配置
├── .env.development # 本地环境变量配置
├── .env.production # 生产环境变量配置
├── .eslintrc.js # eslint 配置
├── babel.config.js # babel-loader 配置
├── cypress.json # e2e 测试配置
├── jest.config.js # jest 单元测试配置
├── package.json # package.json 依赖
├── postcss.config.js # postcss 配置
├── tsconfig.json # typescript 配置
└── vue.config.js # vue-cli 配置
```
## 代码封装
### 附件中图片的展示
封装 .ts文件内容
```
ispic(path:any)
{
let istrue=false;
let fileName = path.lastIndexOf(".");//取到文件名开始到最后一个点的长度
let fileNameLength = path.length;//取到文件名长度
let fileFormat = path.substring(fileName + 1, fileNameLength);//截
fileFormat=fileFormat.toLowerCase();
let extList='jpg,png,jpeg,gif';
istrue= extList.includes(fileFormat)
return istrue;
}
```
.vue文件
```
附件:
```
### 处理适配
```
// 处理适配
private zoomRatio: any = 0;
private zoomRatio2: any = 0;
private scale() {
(window.top as any).zoomRatio = document.documentElement.clientWidth / 1920;
(window.top as any).zoomRatio2 = document.documentElement.clientHeight / 1080;
document.documentElement.style.zoom = (window.top as any).zoomRatio;
}
//返回上一页
private goBack() {
this.$router.go(-1)
}
```
### filter过滤器
封装时间过滤器
```
import Vue from 'vue';
import moment from 'moment';
import { StringUtil } from '@/utils/stringutil';
Vue.filter('misToDatetime', function (value: string) {
let ref = value;
try {
if (!StringUtil.isNullOrEmpty(value)) {
ref = moment(value).format('YYYY-MM-DD HH:mm:ss');
}
} catch (error) {
}
return ref;
});
const misToDatetime = Vue.filter('misToDatetime');
Vue.filter('misToDate', function (value: string) {
let ref = value;
try {
if (!StringUtil.isNullOrEmpty(value)) {
ref = moment(value).format('YYYY-MM-DD');
}
} catch (error) {
}
return ref;
});
const misToDate = Vue.filter('misToDate');
Vue.filter('misToDatetimeMinute', function (value: string) {
let ref = value;
try {
if (!StringUtil.isNullOrEmpty(value)) {
ref = moment(value).format('YYYY-MM-DD HH:mm');
}
} catch (error) {
}
return ref;
});
const misToDatetimeMinute = Vue.filter('misToDatetimeMinute');
const myFilters = {
misToDatetime,
misToDate,
misToDatetimeMinute
}
export default myFilters;
```
过滤器的使用
不用引入
```
{{props.row.createtime | misToDatetimeMinute}}
```
## 路由传参 接收
api文件里的接口文件 ——> failname.ts
封装接口
```
export const 接口名 = (参数) =>
request({
url:"/××××××/××××/××××"
method:" post/get ",
data / params
})
```
## typescript
定义数组,如果报红 private arrlist:Array = [];
## echarts
x轴上的刻度信息只显示奇数部分,不显示偶数部分
解决办法:
在xAxis中的axisLabel下添加interval属性,将这个属性设置为0,即: interval: 0
## 改变饼状图的颜色
ts文件中的写法
```
async initMemberEchart(){
let colorList = ['#62daab', '#6395f9','#cfdffd'];
let total = 300;
let data: any = []
let option: any = {
tooltip:{
trigger:'item',
formatter:'{a}
{b} : {c} ({d}%)'
},
legend: {
icon: 'circle',
orient: 'horizontal', // 'vertical'
x: 'center', // 'center' | 'left' | {number},
y: 'bottom', // 'center' | 'bottom' | {number}
data: ['户籍选民', '居住选民','单位选民']
},
series: [
{
name:"饼状图名字",
radius:['50%','70%'],
type:'pie',
avoidLableOverlap:false,
data:[
{
value:12,name:'户籍选民',itemStyle:{color:'#6395f9'}
},
{
value:223,name:'居住选民',itemStyle:{color:'#cfdffd'}
},
{
value:284,name:'单位选民',itemStyle:{color:'#62daab'}
},
]
}
]
}
let chart = echarts.init(document.getElementById('chartMember') as HTMLDivElement);
chart.setOption(option);
}
```
## VS code 快捷键
F9 打开和停止调试断点
F11 单步调试
F5 启动调试
一、主命令框
F1 或 Ctrl+Shift+P(俗称万能键) :打开命令面板。在打开的输入框内,可以输入任何命令
例如:
按一下 Backspace 会进入到 Ctrl+P 模式
在 Ctrl+P 下输入 > 可以进入 Ctrl+Shift+P 模式
在 Ctrl+P 窗口下还可以直接输入文件名,跳转到该文件
在 Ctrl+P 模式下输入 “?” 会弹出下拉菜单,
常用的如下:
? 列出当前可执行的动作
! 显示 Errors或 Warnings,也可以 Ctrl+Shift+M
: 跳转到行数,也可以 Ctrl+G 直接进入
@ 跳转到 symbol(搜索变量或者函数),也可以 Ctrl+Shift+O 直接进入
@ 根据分类跳转 symbol,查找属性或函数,也可以 Ctrl+Shift+O 后输入" : "进入
# 根据名字查找 symbol,也可以 Ctrl+T
二、 常用快捷键
1、编辑器与窗口管理
新建文件: Ctrl+N
文件之间切换: Ctrl+Tab
打开一个新的VS Code编辑器: Ctrl+Shift+N
关闭当前窗口: Ctrl+W
关闭当前的VS Code编辑器: Ctrl+Shift+W
切出一个新的编辑器窗口(最多3个): Ctrl+\
切换左中右3个编辑器窗口的快捷键: Ctrl+1 Ctrl+2 Ctrl+3
2、代码编辑
(1) 格式调整
代码行向左或向右缩进: Ctrl+[ 、 Ctrl+]
复制或剪切当前行/当前选中内容: Ctrl+C 、 Ctrl+V
代码格式化: Shift+Alt+F
向上或向下移动一行: Alt+Up 或 Alt+Down
向上或向下复制一行: Shift+Alt+Up 或 Shift+Alt+Down
在当前行下方插入一行: Ctrl+Enter
在当前行上方插入一行: Ctrl+Shift+Enter
(2) 光标相关
移动到行首: Home
移动到行尾: End
移动到文件结尾: Ctrl+End
移动到文件开头: Ctrl+Home
移动到定义处: F12
查看定义处缩略图(只看一眼而不跳转过去): Alt+F12
选择从光标到行尾的内容: Shift+End
选择从光标到行首的内容: Shift+Home
删除光标右侧的所有内容(当前行): Ctrl+Delete
扩展/缩小选取范围: Shift+Alt+Right 和 Shift+Alt+Left
多行编辑(列编辑): Alt+Shift+鼠标左键 或 Ctrl+Alt+Down/Up
同时选中所有匹配编辑(与当前行或选定内容匹配): Ctrl+Shift+L
下一个匹配的也被选中: Ctrl+D
回退上一个光标操作: Ctrl+U
撤销上一步操作: Ctrl+Z
手动保存: Ctrl+S
(3) 重构代码
找到所有的引用: Shift+F12
同时修改本文件中所有匹配的: Ctrl+F2
跳转到下一个 Error 或 Warning: 当有多个错误时可以按 F8 逐个跳转
(4) 查找替换
查找: Ctrl+F
查找替换: Ctrl+H
(5) 显示相关
全屏显示(再次按则恢复): F11
放大或缩小(以编辑器左上角为基准): Ctrl +/-
侧边栏显示或隐藏: Ctrl+B
显示资源管理器(光标切到侧边栏中才有效): Ctrl+Shift+E
显示搜索(光标切到侧边栏中才有效): Ctrl+Shift+F
显示(光标切到侧边栏中才有效): Git Ctrl+Shift+G
显示 Debug: Ctrl+Shift+D
显示 Output: Ctrl+Shift+U
(6) 其他设置
自动保存:File -> AutoSave(中文界面下“文件”->“自动保存”) 或者 Ctrl+Shift+P,输入 auto
## vue 地图插件
https://dafrok.github.io/vue-baidu-map/#/zh/overlay/marker
## //打印
```
private doPrint() {
print({
printable: 'qrCode',
type: 'html',
targetStyles: ['*'],
ignoreElements: ['no-print', 'bc', 'gb']
})
}
```
## 接口文档的添加
获取所有数据 ,增删改查 ,
当Parameter Type为body时,用(data:any)传参
为path时,需要路由传参,url:'... /'+params(id)
为query时,用(params:any)传参
// 获取所有选民 query
export const getElector = (params: any) =>
request({
url: '/microservice-base/rest/elector',
method: 'get',
params
})
// 新增单个选民 body
export const createOne = (data: any) =>
request({
url: '/microservice-base/rest/elector/createOne',
method: 'post',
data
})
// 删除单个选民 path
export const deleteOne = (params: any) =>
request({
url: '/microservice-base/rest/elector/deleteOne/'+params,
method: 'post',
})
// 更新单个选民 body
export const updateOne = (data: any) =>
request({
url: '/microservice-base/rest/elector/updateOne',
method: 'post',
data
})
// 获取单个选民 path
export const getElectorOne = (id: any) =>
request({
url: '/microservice-base/rest/elector/' + id,
method: 'get',
})
## 导出 导入 下载模板
#### 接口文档
导出和模板接口文档需要加上 responseType: 'blob'
```
// 导出多个选民或候选代表 query
export const getExportExcel = (params: any) =>
request({
url: '/microservice-base/rest/elector/exportExcel',
method: 'get',
params,
responseType: 'blob'
})
// 下载导入模板 path
export const getTemplate = (params: any) =>
request({
url: '/microservice-base/rest/elector/getTemplate/'+ params,
method: 'get',
params,
responseType: 'blob'
})
// 导入多个选民 formData
export const importElector = (data: any) =>
request({
url: '/microservice-base/rest/elector/importElector',
method: 'post',
data
})
```
#### .vue & .ts
```
文件导入
下载模板
下载模板
导出
```
```
//导出
private async handleExport() {
let obj = {
name: this.listQuery.name,
sex: this.listQuery.sex,
type: this.listQuery.type,
fuzzy:this.listQuery.fuzzy,
electorateId:this.listQuery.electorateId,
electorType: this.listQuery.electorType,
}
let that = this
await getElector(obj).then(async (res) => {
if (res.resData) {
// let obj = {
// materialReportId: localStorage.getItem("projectId"),
// type:0
// }
let obj = {
name: this.listQuery.name,
sex: this.listQuery.sex,
type: this.listQuery.type,
fuzzy:this.listQuery.fuzzy,
electorateId:this.listQuery.electorateId,
electorType: this.listQuery.electorType,
}
await getExportExcel(obj).then((res) => {
let blob = new Blob([res], { type: "application/octet-stream" });
let download = document.createElement('a');
download.href = window.URL.createObjectURL(blob);
download.download = '选民信息表格.xls';
download.click();
window.URL.revokeObjectURL(download.href);
})
} else {
this.$message.error("无法导出未保存的表格,请选保存表格!");
}
})
}
// 导入
private fileList = [];
private async filchangepel(file: any) {
const fd = new FormData();
fd.append("file", file.raw);
const res: any = await importElector(fd);
if (res.msg == "请求处理成功") {
this.$message.success("导入成功");
this.fileList = [];
this.importVisible = false;
this.getList();
}
}
//下载模板
private async downtTemplate() {
let type = 0
await getTemplate(type).then((res) => {
let blob = new Blob([res], { type: "application/octet-stream" });
let download = document.createElement('a');
download.href = window.URL.createObjectURL(blob);
download.download = '选民信息模板.xls';
download.click();
window.URL.revokeObjectURL(download.href);
})
}
```
*** 样式 ***
1. xxxx
2. xxxx
3. xxxx
####
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 特技
1. ***
2.
3.
4.
5.
6.