winney

It is never too old to learn.

0%
winney

Markdown合并表格单元格

Markdown本身不支持单元格合并

考虑到 Markdown 支持 html ,
所以,我们可以通过插入 html 中的 table 来实现。

Html 合并行

1
2
3
4
5
6
7
8
9
10
11
12
<table>
<tr>
<td>第一列</td>
<td>第二列</td>
</tr>
<tr>
<td colspan="2">这里是合并行</td>
</tr>
<tr>
<td colspan="2">这里也是合并行</td>
</tr>
</table>

Html 合并列

1
2
3
4
5
6
7
8
9
10
11
12
13
<table>
<tr>
<td>第一列</td>
<td>第二列</td>
</tr>
<tr>
<td rowspan="2">这里是合并列</td>
<td >行二列二</td>
</tr>
<tr>
<td >行三列二</td>
</tr>
</table>

Html 合并行和列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<table>
<tr>
<td>第一列</td>
<td>第二列</td>
</tr>
<tr>
<td colspan="2">我是合并行</td>
</tr>
<tr>
<td>行二列一</td>
<td>行二列二</td>
</tr>
<tr>
<td rowspan="2">我是合并列</td>
<td >行三列二</td>
</tr>
<tr>
<td >行四列二</td>
</tr>
</table>
在markdown文档中使用GitHub仓库的图片地址
  1. 在GitHub中创建一个Public仓库存放图片

    注意:建立Private仓库,图片访问时,后面会加上一个token值,过一段时间就会失效。(这个很关键)

  2. 在仓库中选择“Add file”——Upload files,直接把图片上传到仓库;也可以将仓库下载到本地,然后push上去

  3. 在仓库中,选择需要的图片点进去,然后选择“Download”按钮,会新开一个窗口显示图片

  4. 复制新开窗口中,复制图片的访问路径(域名地址栏)

  5. 在markdown中插入图片标签,如: ![加载失败的文字提示](图片的链接)

如何用markdown文档做任务清单

1
2
3
- [ ] aaa
- [ ] bbb
-空格[空格]空格aaaa

markdown编辑软件

  • Typora(收费了)
  • 在VSCode中,安装Typora扩展(Edit markdown like typora in vscode.),还不错。跟Typora真的挺像的。

markdown自动生成器

docsify

语雀

修改图片的相对路径

(可以不需要在Typora里面设置,直接写相对路径)

1
![备注文字](./images/note6.png)

修改图片的相对路径

安装

1
cnpm i element-ui -S

引入element-ui

在 main.js 中写入以下内容(完整引入):

1
2
3
4
5
6
7
8
9
10
11
import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue';

Vue.use(ElementUI);

new Vue({
el: '#app',
render: h => h(App)
});

ElementUI表格合并单元格

摘抄自博客,仅用于学习。

序号 工单类型 taskKey templateUrl 操作
1 事件单 shijian_01 /shijian_01 编辑 删除
shijian_02 /shijian_02 编辑 删除
shijian_03 /shijian_03 编辑 删除
2 问题单 shijian_04 /shijian_04 编辑 删除
shijian_05 /shijian_05 编辑 删除
shijian_06 /shijian_06 编辑 删除

代码附上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
<template>
<div class="">
<el-table
:data="listData"
:span-method="objectSpanMethod"
class="tableArea"
style="width: 100%">
<el-table-column
prop="type"
label="序号"
align="center"
width="200"/>
<el-table-column
prop="sheetType"
label="工单类型"
/>
<el-table-column
prop="taskKey"
label="taskKey"
/>
<el-table-column
prop="templateUrl"
label="templateUrl"
/>
<el-table-column
label="操作"
>
<template slot-scope="scope">
<el-tooltip class="item" effect="dark" content="修改" placement="top-start">
<i class="el-icon-edit-outline" @click="modify(scope)" />
</el-tooltip>
<el-tooltip class="item" effect="dark" content="删除" placement="top-start">
<i class="el-icon-delete" @click="deleteData(scope)" />
</el-tooltip>
</template>
</el-table-column >
</el-table>
</div>
</template>
<script>

export default {
name: 'myNeedDeal',
data() {
return {
rowList: [],
spanArr: [],
position: 0,
listData: []
}
},

methods: {
queryData(){//查询操作
this.listData = [
{
id:1,
type:1,
sheetType: "事件单",
taskKey: "shijian_01",
templateUrl: "/shijian_01"
},
{
id:2,
type:1,
sheetType: "事件单",
taskKey: "shijian_02",
templateUrl: "/shijian_02"
},
{
id:3,
type:1,
sheetType: "事件单",
taskKey: "shijian_03",
templateUrl: "/shijian_04"
},
{
id:4,
type:2,
sheetType: "问题单",
taskKey: "wenti_01",
templateUrl: "/wenti_01"
},
{
id:5,
type:2,
sheetType: "问题单",
taskKey: "wenti_02",
templateUrl: "/wenti_02"
},
{
id:6,
type:2,
sheetType: "问题单",
taskKey: "wenti_03",
templateUrl: "/wenti_03"
}
];
this.rowspan()
},
rowspan() {
this.listData.forEach((item,index) => {
if( index === 0){
this.spanArr.push(1);
this.position = 0;
}else{
if(this.listData[index].type === this.listData[index-1].type ){
this.spanArr[this.position] += 1;
this.spanArr.push(0);
}else{
this.spanArr.push(1);
this.position = index;
}
}
})
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) { //表格合并行
if (columnIndex === 0) {
const _row = this.spanArr[rowIndex];
const _col = _row>0 ? 1 : 0;
return {
rowspan: _row,
colspan: _col
}
}
if(columnIndex === 1){
const _row = this.spanArr[rowIndex];
const _col = _row>0 ? 1 : 0;
return {
rowspan: _row,
colspan: _col
}
}
}
},
mounted() {
this.queryData();
}
}
</script>
<style lang="scss" scoped>
.el-select {
margin-right: 15px;
}
.el-input {
margin-right: 15px;
width: 200px;
}
.tableArea {
margin-top: 20px;
box-shadow: 0 0 8px 0 #aaa;
}
i[class^="el-icon"] {
margin-right: 5px;
font-size: 16px;
cursor: pointer;
}
.modify_table{
td{
padding: 10px ;
}
}
.item_title{
text-align: right;
}
</style>

详细说明:

1
:span-method="objectSpanMethod"  

这个是官方给定的绑定属性和对应的方法,objectSpanMethod 传入了 { row, column, rowIndex, columnIndex }

row: 当前行

column: 当前列

rowIndex:当前行号

columnIndex :当前列号

该函数可以返回一个包含两个元素的数组,第一个元素代表rowspan,第二个元素代表colspan。 也可以返回一个键名为rowspancolspan的对象。

1
this.spanArr 数组 ,返回的是相对应的行合并行数

这个示例打印出的this.spanArr为 [3, 0, 0, 3, 0, 0],比如,第一个元素为3,表示第一行应该向下合并3行(即第一行的rowspan为3),第二个元素的rowspan为0,就让它“消失”。

1
rowspan()这个函数就是用来返回 this.spanArr 数组的,定义每一行的 rowspan

rowspan()函数,if( index === 0),第一行,直接先给数组push进一个1,表示自己先占一行,this.position是数组元素的位置(此时是从数组元素的第一个开始,所以this.position为0), this.position为0意思表示的就是数组的第一个元素。

当到了index为2的时候,if(this.listData[index].type === this.listData[index-1].type ),让第二行与第一行作比较,

如果第二行与第一行相等的话,this.position就+1,当有n行第一行相同,this.position就为n,表示向下合并n行;第二行自己就this.spanArr.push(0),表示第二行“消失”,因为第一行和第二行合并了啊。

如果第二行与第一行不相等的话,那么this.spanArr.push(1);就让第二行自己独占一行;this.position = index意思就是把指针拿到index这行来,表示设置数组this.spanArr[this.position]的元素值,然后定义从此行开始向下合并几行(可能这句话我表述的不是很清楚你可以根据我这个示例研究下,当index为3时,this.position为3,当index为4时,第四行与第三行需要合并,那么在数组的this.position元素就要+1了,也就是this.spanArr[this.position] += 1)

还有最后一句话

1
const _col = _row>0 ? 1 : 0;

定义的这一个单元格列的合并,我们项目只合并行,不合并列;

_row:代表合并行的行数,_row的值要么是1,或者更大的自然正整数,要么是0。

1代表:独占一行

更大的自然数:代表合并了若干行

0:代表“消失”的哪那一个单元格,后面的单元格向前推一格

注意:如果配合分页一起渲染数据,要在rowspan函数中,先将this.spanArr清空数组。不添加,点分页加载数据会导致表格错乱。

1
2
3
4
rowspan() {
this.spanArr=[];
.......
},

elementui表格动态数据单元格合并

elementUI table合并相同数据的单元格

elementUI table表格动态合并

slot的使用

slots
事件名称 说明
title 标题内容
content 内容
1
2
3
4
<el-page-header @back="goBack" content="管理">
<div slot="title">修改标题</div>
<div slot="content">修改内容</div>
</el-page-header>

解决引用Element UI 导致弹出多个message消息提示的问题

改造elementui的穿梭框,让他直接点击选项就穿梭到另一个框

element-ui change事件传值

1
2
3
4
5
@change="handleSelect($event)"

handleSelect(event) {
console.log(event)
},

vue使用elementUI表单的获取select,checkbox的value值

1
2
3
4
5
6
7
8
9
10
 <el-checkbox
v-for="game in gameData"
:label="game.id"
:key="game.id"
:data-id="game.id"
:data-group="game.group_id">
{{game.name}}</el-checkbox>

// 把想要的value值放在label中,将需要显示的内容放在 <el-checkbox>标签之间
<el-checkbox :label="想要获取的value值">{{显示的内容值}}</el-checkbox>

checkbox的获取可以通过label来获得,将原来的label写在{名称}</>中,因为elementUI获取绑定的是label,
[label]</>

事件传多参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<ul class="ul-list txt-left">
<li
v-for="(game, index) in checkedData"
:label="game.id"
:key="game.id"
@click="chooseGame(index, game.id)"
:class = "isactive == index ? 'blue-txt' : '' "
class="active">
{{game.name}}</li>
</ul>

isactive: 0,

chooseGame(index, id) {
this.isactive = index
this.thisGameChannels = this.allGameChannels[id]
},

Element ui el-row el-col里面高度不一致的问题

1
2
3
4
5
6
<el-row type="flex">
<el-col>
<textarea autocomplete="off" class="el-textarea__inner" style="min-height: 33.2333px;"></textarea>
</el-col>
<el-col>test<br>test</el-col>
</el-row>

用饿了吗el-row,el-col布局页面的时候会因为el-col的内容高度不统一,造成布局混乱,解决方案就是在el-row中添加type=”flex”。

注意:里面的内容要有设定的高度,不然加上flex也无效。

yarn官网

yarn中文官网

yarn-中文官网

全局安装yarn

1
npm install --global yarn

查看版本

1
yarn --version

启动开发环境服务

1
yarn start

打包(生成静态文件)

1
yarn build

创建React项目

1
2
3
npx create-react-app my-app
cd my-app
yarn start

添加React Router

1
yarn add react-router-dom@6

使用Vite创建Vue项目

1
yarn create vite
1
2
3
4
√ Project name: ... Vue3_yarn
√ Package name: ... vue3-yarn
√ Select a framework: » vue
√ Select a variant: » vue-ts
1
2
3
cd Vue3_yarn
yarn
yarn dev

新建项目

1
yarn init
1
2
3
4
5
6
7
8
9
question name (yarn_test):
question version (1.0.0):
question description:
question entry point (index.js):
question repository url:
question author:
question license (MIT):
question private:
success Saved package.json

添加依赖

1
2
3
yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]

将依赖项添加到不同的依赖类别中

1
2
yarn add [package] --dev  # dev dependencies
yarn add [package] --peer # peer dependencies

更新依赖

1
2
3
yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]

删除依赖

1
yarn remove [package]

根据package.json文件为项目安装所有依赖

1
yarn

or

1
yarn install

更新 Yarn 本体

1
2
yarn set version latest
yarn set version from sources