记住要永远把自己放在优先考虑项。
上一篇博客我们已经介绍过el-tree样式修改的一种了【Vue项目实战7】【ElementUI样式优化】el-tree==>添加分级图标==>添加引导线样式==>【node-click】点击节点展示全部父节点信息==>使用$store封装全局组件使用_小白Rachel的博客-CSDN博客
这篇博客我们继续整理另一种el-tree样式的优化。
本篇博客实现效果速览:(看看是否满足你的需求)
(1)CSS分层图标和分层样式(以五层为最大)
(2)选中节点展示【操作栏】包含:新增子节点,修改当前节点,删除当前节点
(3)选中节点 == 修改时回显选中节点和父节点;新增时展示当前节点;
(4)新增一级节点
(5)父节点使用若依自带的treeselect组件
目录
一、基础树结构
首先,给出最基础的树结构,(1)节点默认展开;(2)取消展开收起效果
<template>
<div class="app-content">
<div class="app-container">
<!-- 资源分组树 -->
<div>
<div style="height: 400px; padding-bottom: 10px; width: 200px">
<div class="treeBox">
<el-tree
:data="resourceData.data"
node-key="id"
ref="tree"
default-expand-all
:expand-on-click-node="false"
:props="defaultProps"
class="tree"
style="width: 100%"
@node-click="handle"
highlight-current
>
</el-tree>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "resourceTree",
data() {
return {
defaultProps: {
children: "children",
label: "name",
value: "id",
},
resourceData: {
code: 200,
message: "SUCCESS",
data: [
{
id: "c21d02ec204c3d9f9591a45a67f58195",
name: "在用资源",
parentId: "",
children: [
{
id: "5cbf0e4bf6c455f2b90f26dccc7f2c7c",
name: "测试组1",
parentId: "c21d02ec204c3d9f9591a45a67f58195",
children: [
{
id: "af5c690fb122371074db20eb19e474b2",
name: "测试组1.3",
parentId: "5cbf0e4bf6c455f2b90f26dccc7f2c7c",
children: [
{
id: "e5268c1b5f6fb09152739fc07cfc2a4b",
name: "测试组1.4",
parentId: "af5c690fb122371074db20eb19e474b2",
children: [
{
id: "a02b0e65def409e6b217c01f54e5732a",
name: "测试组1.5",
parentId: "e5268c1b5f6fb09152739fc07cfc2a4b",
children: [],
},
],
},
],
},
],
},
{
id: "88f69770e9d94e32d81ea49eb2bf05e8",
name: "测试组2",
parentId: "c21d02ec204c3d9f9591a45a67f58195",
children: [],
},
{
id: "294c01cd26f41cb54dd75c0098335b5b",
name: "317平台",
parentId: "c21d02ec204c3d9f9591a45a67f58195",
children: [
{
id: "936fba4555abad9872803d90a5304fdc",
name: "烽火",
parentId: "294c01cd26f41cb54dd75c0098335b5b",
children: [
{
id: "4a5d79d291fc74e495d6ee7129fa213e",
name: "涉访专项",
parentId: "936fba4555abad9872803d90a5304fdc",
children: [],
},
],
},
],
},
{
id: "cb6cd8a969c41698e00f7c6a9ad36d38",
name: "zB系统",
parentId: "c21d02ec204c3d9f9591a45a67f58195",
children: [],
},
],
},
{
id: "eaced9ffb820418cbe98691c781c6baa",
name: "空闲资源",
parentId: "",
children: [],
},
],
success: true,
},
treeGroup: [],
};
},
created() {},
methods: {},
};
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
</style>
二、优化tree前端样式
UI给出的设计稿如下
1.资源分组树的input形式
注意观察,其实并不是input形式,只是样式有点像input
如果在树节点添加input会是这样的效果:
存在的问题:需要给input添加内置图标,添加竖杆博主按照这种思路没有实现最终的效果,大家可以试试。
//-------------1.修改节点input框样式----------
.el-tree ::v-deep .el-tree-node .el-tree-node__content {
width: 260px;
height: 40px;
background: rgb(255, 255, 255);
margin: 5px 40px 0px 8px;
color: #666666;
font-size: 14px;
border: 1px solid #d8d8d8;
border-radius: 4px;
padding-left: 4px !important;
}
// 节点和子节点的tab间距
.tree ::v-deep .el-tree-node {
position: relative;
padding-left: 46px;
}
// 选中之后的颜色变化
.el-tree ::v-deep .is-current > .el-tree-node__content {
border: 2px solid #2181f5;
}
修改后的效果:
2.添加分层图标和分层样式
为了添加图标和内部的颜色条效果,需要在el-tree中添加代码
<span class="custom-tree-node1" slot-scope="{ node, data }">
<span class="el-tree-node__label hh">{{ node.label }}</span>
</span>
// ----------2.添加分层图标和样式--------
.custom-tree-node1 {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
// padding-left: 8px;
padding-top: 7px;
}
// 一级节点图标
.el-tree ::v-deep .el-tree-node__content .el-tree-node__label {
padding-left: 15px;
background: url("~@/assets/images/tree/1.png") no-repeat 0 3px;
}
// 颜色装饰
.el-tree ::v-deep .el-tree-node__content:before {
content: "";
min-width: 3px !important;
height: 30px;
/*display: inline-block 允许在元素上设置宽度和高度*/
display: inline-block;
background: #103289;
}
// 二级节点
.el-tree ::v-deep .el-tree-node__children .el-tree-node__label {
padding-left: 15px;
background: url("~@/assets/images/tree/2.png") no-repeat 0 3px;
}
.el-tree ::v-deep .el-tree-node__children .el-tree-node__content:before {
content: "";
width: 3px;
height: 30px;
/*display: inline-block 允许在元素上设置宽度和高度*/
display: inline-block;
background: #506cfe;
}
// 三级节点
.el-tree
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__label {
padding-left: 15px;
background: url("~@/assets/images/tree/3.png") no-repeat 0 3px;
}
.el-tree
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__content:before {
content: "";
width: 3px;
height: 30px;
/*display: inline-block 允许在元素上设置宽度和高度*/
display: inline-block;
background: #2181f5;
}
// 四级节点
.el-tree
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__children
.el-tree-node__label {
padding-left: 15px;
background: url("~@/assets/images/tree/4.png") no-repeat 0 3px;
}
.el-tree
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__children
.el-tree-node__content:before {
content: "";
width: 3px;
height: 30px;
/*display: inline-block 允许在元素上设置宽度和高度*/
display: inline-block;
background: #00b9ff;
}
// 五级节点
.el-tree
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__children
.el-tree-node__children
.el-tree-node__label {
padding-left: 15px;
background: url("~@/assets/images/tree/5.png") no-repeat 0 3px;
}
.el-tree
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__children
.el-tree-node__children
.el-tree-node__content:before {
content: "";
width: 3px;
height: 30px;
/*display: inline-block 允许在元素上设置宽度和高度*/
display: inline-block;
background: #fe9c50;
}
// 调整文字label高度
.hh {
background: #fe9c50;
content: "";
display: block;
width: 3px;
height: 26px;
background-size: 16px;
margin-right: 10px;
}
//-------------1.修改节点input框样式----------
.el-tree ::v-deep .el-tree-node .el-tree-node__content {
width: 260px;
height: 40px;
background: rgb(255, 255, 255);
margin: 5px 40px 0px 8px;
color: #666666;
font-size: 14px;
border: 1px solid #d8d8d8;
border-radius: 4px;
padding-left: 4px !important;
}
// 节点和子节点的tab间距
.tree ::v-deep .el-tree-node {
position: relative;
padding-left: 46px;
}
// 选中之后的颜色变化
.el-tree ::v-deep .is-current > .el-tree-node__content {
border: 2px solid #2181f5;
}
三、添加功能效果
效果说明:(1)点击‘新建一级资源分组’ 后弹框添加分组
(2)点击节点后==> 该节点显示操作栏{新建 修改 删除}
(3)点击节点后==> 点击‘新建’==> 弹框添加子节点分组
(4)点击节点后==>点击‘修改’==>弹框修改节点,同时支持修改上级
(5)点击节点后==>点击‘删除’==>删除该节点和节点的全部子节点
1.新建一级资源分组(弹框)
主要涉及data字段
title: "", // 弹框标题-新建/编辑
newVis: false, // 控制弹框显示
form: {}, //弹框表格
isfirst: false, // 是否是新建一级节点-控制父节点显示
isEdit: false, // 编辑-删除
rule: {
name: [
{ required: true, message: "请输入", trigger: "blur" },
],
},
(1)点击‘新建一级分组’时,调用handle1()函数;
(2)使用newVIs控制弹框显示。==> title控制标题文字;
(3)绑定rule校验规则;
(4)通过isfirst判断是否是新增一级节点 ==> 需要隐藏form表单中的‘父节点’
<!-- 新建=编辑 弹窗 -->
<el-dialog
:close-on-click-modal="false"
:title="title"
:visible.sync="newVis"
width="500px"
append-to-body
>
<el-form ref="form" :model="form" :rules="rule" label-width="120px">
<el-form-item label="父节点:" prop="parentId" v-if="!isfirst">
<!-- <el-input v-model="form.parentId" placeholder="请输入" /> -->
<treeselect
v-model="form.parentId"
:multiple="false"
:options="treeData"
:props="fullProps"
placeholder="请选择"
:normalizer="normalizer"
:disabled="isEdit ? false : true"
/>
</el-form-item>
<el-form-item label="资源分组名称:" prop="name">
<el-input v-model="form.name" placeholder="请输入" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button
type="primary"
size="mini"
@click="createGroup()"
v-if="isEdit ? false : true"
>确 定</el-button
>
<el-button type="primary" size="mini" @click="editGroup()" v-else
>修 改</el-button
>
<el-button @click="cancel()" size="mini">取 消</el-button>
</div>
</el-dialog>
2.点击节点出现【操作栏】
(1)operationVis 用于控制操作栏的显示与隐藏;==>通过在handleNodeClick()中this.operationVis = data.id; 记录选中的节点id来在el-tree中寻找到选中的节点
在el-tree组件中添加如下代码:
<div class="tree">
<el-tree
ref="tree"
:data="treeData"
:check-strictly="true"
node-key="id"
default-expand-all
:props="defaultProps"
style="width: 900px"
highlight-current
check-on-click-node
:expand-on-click-node="false"
@node-click="handleNodeClick"
>
<!-- @check="changetree"
@check-change="handleNodeClick" -->
<span class="custom-tree-node1" slot-scope="{ node, data }">
<!-- <span class="el-tree-node__label"></span>-->
<span class="el-tree-node__label hh">{{ node.label }}</span>
<span class="operation1" v-show="data.id == operationVis">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handle(0)"
>新建</el-button
>
<el-button plain size="mini" @click="handle(1)">修改</el-button>
<el-button plain size="mini" @click="handleDelete()"
>删除</el-button
>
</span>
</span>
</el-tree>
</div>
(2)setCheckedKeys 通过 keys 设置目前勾选的节点
通过 this.$refs.tree.setCheckedKeys([data.id]); 记录当前节点的id,方便新增此操作时获取到父节点信息,方便编辑时回显信息。
// 树节点击函数
handleNodeClick(data) {
// if (data.id !== "eaced9ffb820418cbe98691c781c6baa") { // 空闲节点不可编辑
this.operationVis = data.id;
// } else {
// this.operationVis = -1;
// }
this.$refs.tree.setCheckedKeys([data.id]);
},
3.新增/修改 选中节点的子节点(弹框)
// 区分下面三个函数
getCurrentNode 获取当前被选中节点的 data,若没有节点被选中则返回 null
getCheckedNodes 若节点可被选择,则返回目前被选中的节点所组成的数组
getCheckedKeys 若节点可被选择,则返回目前被选中的节点的 key 所组成的数组
选中节点之后,打印选中节点的信息
console.log("current", this.$refs.tree.getCurrentNode());
console.log("checked", this.$refs.tree.getCheckedNodes());
console.log("checkedkey", this.$refs.tree.getCheckedKeys());
(1)点击‘添加’或‘修改’,分别调用handel(0); handle(1) 用于回显数据
(2)当点击‘新增’ 需要回显父节点信息
(3)当点击‘编辑’需要回显当前节点和父节点信息
// 新建-修改弹框
handle(isEdit) {
this.isfirst = false;
this.isEdit = isEdit;
if (isEdit) {
// 如果没有选中-显示提示信息
if (this.$refs.tree.getCheckedKeys().length == 0) {
this.$message.warning("请选中资源分组进行修改");
} else {
this.title = "修改资源分组";
this.newVis = true;
this.form = {
parentId: this.$refs.tree.getCheckedNodes()[0].parentId
? this.$refs.tree.getCheckedNodes()[0].parentId
: null,
name: this.$refs.tree.getCheckedNodes()[0].name,
};
}
} else {
this.newVis = true;
this.title = "新建资源分组";
this.form = {
parentId: this.$refs.tree.getCheckedKeys()[0], // 选中的节点(可能是父节点)
name: "",
};
}
},
4.父节点使用若依自带treeselect组件
本系统使用的是若依框架,自带treeselect组件,可以直接使用,在此不做详细说明。
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
components: { Treeselect },
<treeselect
v-model="form.parentId"
:multiple="false"
:options="resourceData.data"
:props="fullProps"
placeholder="请选择"
:normalizer="normalizer"
:disabled="isEdit ? false : true"
/>
附:全部页面代码(速看)
<template>
<div class="app-content">
<div class="app-container">
<!-- 资源分组树 -->
<div>
<el-button
type="primary"
plain
icon="el-icon-plus"
size="small"
@click="handle1()"
style="margin-left: 50px; width: 200px"
>新建一级资源分组</el-button
>
<div style="min-height: 400px; padding-bottom: 10px; width: 1000px">
<div class="treeBox">
<div class="tree">
<el-tree
ref="tree"
:data="resourceData.data"
:check-strictly="true"
node-key="id"
default-expand-all
:props="defaultProps"
style="width: 900px"
highlight-current
check-on-click-node
:expand-on-click-node="false"
@node-click="handleNodeClick"
>
<span class="custom-tree-node1" slot-scope="{ node, data }">
<span class="el-tree-node__label hh">{{ node.label }}</span>
<span class="operation1" v-show="data.id == operationVis">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handle(0)"
>新建</el-button
>
<el-button plain size="mini" @click="handle(1)"
>修改</el-button
>
<el-button plain size="mini" @click="handleDelete()"
>删除</el-button
>
</span>
</span>
</el-tree>
</div>
</div>
</div>
</div>
<!-- 新建弹窗 -->
<el-dialog
:close-on-click-modal="false"
:title="title"
:visible.sync="newVis"
width="400px"
append-to-body
>
<el-form ref="form" :model="form" :rules="rule" label-width="120px">
<el-form-item label="父节点:" prop="parentId" v-if="!isfirst">
<treeselect
v-model="form.parentId"
:multiple="false"
:options="resourceData.data"
:props="fullProps"
placeholder="请选择"
:normalizer="normalizer"
:disabled="isEdit ? false : true"
/>
</el-form-item>
<el-form-item label="资源分组名称:" prop="name">
<el-input v-model="form.name" placeholder="请输入" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button
type="primary"
size="mini"
@click="createGroup()"
v-if="isEdit ? false : true"
>确 定</el-button
>
<el-button type="primary" size="mini" @click="editGroup()" v-else
>修 改</el-button
>
<el-button @click="cancel()" size="mini">取 消</el-button>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "groupTree",
components: { Treeselect },
data() {
return {
defaultProps: {
children: "children",
label: "name",
value: "id",
},
fullProps: {
children: "children",
label: "fullname",
value: "id",
},
resourceData: {
code: 200,
message: "SUCCESS",
data: [
{
id: "c21d02ec204c3d9f9591a45a67f58195",
name: "在用资源",
parentId: "",
children: [
{
id: "5cbf0e4bf6c455f2b90f26dccc7f2c7c",
name: "测试组1",
parentId: "c21d02ec204c3d9f9591a45a67f58195",
children: [
{
id: "af5c690fb122371074db20eb19e474b2",
name: "测试组1.3",
parentId: "5cbf0e4bf6c455f2b90f26dccc7f2c7c",
children: [
{
id: "e5268c1b5f6fb09152739fc07cfc2a4b",
name: "测试组1.4",
parentId: "af5c690fb122371074db20eb19e474b2",
children: [
{
id: "a02b0e65def409e6b217c01f54e5732a",
name: "测试组1.5",
parentId: "e5268c1b5f6fb09152739fc07cfc2a4b",
children: [],
},
],
},
],
},
],
},
{
id: "88f69770e9d94e32d81ea49eb2bf05e8",
name: "测试组2",
parentId: "c21d02ec204c3d9f9591a45a67f58195",
children: [],
},
{
id: "294c01cd26f41cb54dd75c0098335b5b",
name: "317平台",
parentId: "c21d02ec204c3d9f9591a45a67f58195",
children: [
{
id: "936fba4555abad9872803d90a5304fdc",
name: "烽火",
parentId: "294c01cd26f41cb54dd75c0098335b5b",
children: [
{
id: "4a5d79d291fc74e495d6ee7129fa213e",
name: "涉访专项",
parentId: "936fba4555abad9872803d90a5304fdc",
children: [],
},
],
},
],
},
{
id: "cb6cd8a969c41698e00f7c6a9ad36d38",
name: "zB系统",
parentId: "c21d02ec204c3d9f9591a45a67f58195",
children: [],
},
],
},
{
id: "eaced9ffb820418cbe98691c781c6baa",
name: "空闲资源",
parentId: "",
children: [],
},
],
success: true,
},
treeGroup: [],
// -------------三---------------
title: "", // 弹框标题-新建/编辑
newVis: false, // 控制弹框显示
form: {}, //弹框表格
isfirst: false, // 是否是新建一级节点-控制父节点显示
isEdit: false, // 编辑-删除
rule: {
name: [
{ required: true, message: "请输入", trigger: "blur" },
{
min: 2,
max: 20,
message: "资源分组名称长度必须介于 2 和 20 之间",
trigger: "blur",
},
],
},
operationVis: "", // 控制操作栏展示与隐藏
};
},
created() {},
methods: {
// 新建-编辑弹框控制函数
handle1() {
this.newVis = true;
this.title = "新建资源分组";
this.isfirst = true;
this.form = {
name: "",
};
},
// 树节点击函数
handleNodeClick(data) {
if (data.id !== "eaced9ffb820418cbe98691c781c6baa") {
this.operationVis = data.id;
} else {
this.operationVis = -1;
}
this.$refs.tree.setCheckedKeys([data.id]);
// this.$refs.tree.setCheckedNodes(data);
console.log("点击选中节点:", data.name);
console.log("checkedkey", this.$refs.tree.getCheckedKeys());
},
// 新建-修改弹框
handle(isEdit) {
this.isfirst = false;
this.isEdit = isEdit;
if (isEdit) {
this.title = "修改资源分组";
this.newVis = true;
// 修改资源-修改当前节点,回显其父节点
// console.log("current", this.$refs.tree.getCurrentNode());
console.log("checked", this.$refs.tree.getCheckedNodes());
console.log("checkedkey", this.$refs.tree.getCheckedKeys());
// console.log("currentNodeId", his.$refs.tree.getCheckedKeys()[0]);
this.form = {
parentId: this.$refs.tree.getCheckedNodes()[0].parentId
? this.$refs.tree.getCheckedNodes()[0].parentId
: null,
name: this.$refs.tree.getCheckedNodes()[0].name,
};
} else {
this.newVis = true;
this.title = "新建资源分组";
// 新增资源-在选中节点下添加
// console.log(this.$refs.tree.getCurrentKey(), "current");
console.log(this.$refs.tree.getCheckedKeys(), "checked");
this.form = {
parentId: this.$refs.tree.getCheckedKeys()[0], // 选中的节点(可能是父节点)
name: "",
};
}
},
// 格式化节点
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.id,
label: node.name,
children: node.children,
};
},
createGroup() {},
editGroup() {},
cancel() {
this.newVis = false;
this.deleteVis = false;
},
handleDelet() {},
},
};
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
.tree {
}
//-------------1.修改节点input框样式----------
.el-tree ::v-deep .el-tree-node .el-tree-node__content {
width: 200px;
height: 40px;
background: rgb(255, 255, 255);
margin: 5px 40px 0px 8px;
color: #666666;
font-size: 14px;
border: 1px solid #d8d8d8;
border-radius: 4px;
padding-left: 4px !important;
}
// 节点和子节点的tab间距
.tree ::v-deep .el-tree-node {
position: relative;
padding-left: 46px;
}
// 选中之后的颜色变化
.el-tree ::v-deep .is-current > .el-tree-node__content {
border: 2px solid #2181f5;
}
// ----------2.添加分层图标和样式--------
.custom-tree-node1 {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
// padding-left: 8px;
padding-top: 7px;
}
// 一级节点图标
.el-tree ::v-deep .el-tree-node__content .el-tree-node__label {
padding-left: 15px;
background: url("~@/assets/images/tree/1.png") no-repeat 0 3px;
}
// 颜色装饰
.el-tree ::v-deep .el-tree-node__content:before {
content: "";
min-width: 3px !important;
height: 30px;
/*display: inline-block 允许在元素上设置宽度和高度*/
display: inline-block;
background: #103289;
}
// 二级节点
.el-tree ::v-deep .el-tree-node__children .el-tree-node__label {
padding-left: 15px;
background: url("~@/assets/images/tree/2.png") no-repeat 0 3px;
}
.el-tree ::v-deep .el-tree-node__children .el-tree-node__content:before {
content: "";
width: 3px;
height: 30px;
/*display: inline-block 允许在元素上设置宽度和高度*/
display: inline-block;
background: #506cfe;
}
// 三级节点
.el-tree
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__label {
padding-left: 15px;
background: url("~@/assets/images/tree/3.png") no-repeat 0 3px;
}
.el-tree
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__content:before {
content: "";
width: 3px;
height: 30px;
/*display: inline-block 允许在元素上设置宽度和高度*/
display: inline-block;
background: #2181f5;
}
// 四级节点
.el-tree
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__children
.el-tree-node__label {
padding-left: 15px;
background: url("~@/assets/images/tree/4.png") no-repeat 0 3px;
}
.el-tree
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__children
.el-tree-node__content:before {
content: "";
width: 3px;
height: 30px;
/*display: inline-block 允许在元素上设置宽度和高度*/
display: inline-block;
background: #00b9ff;
}
// 五级节点
.el-tree
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__children
.el-tree-node__children
.el-tree-node__label {
padding-left: 15px;
background: url("~@/assets/images/tree/5.png") no-repeat 0 3px;
}
.el-tree
::v-deep
.el-tree-node__children
.el-tree-node__children
.el-tree-node__children
.el-tree-node__children
.el-tree-node__content:before {
content: "";
width: 3px;
height: 30px;
/*display: inline-block 允许在元素上设置宽度和高度*/
display: inline-block;
background: #fe9c50;
}
// 调整文字label高度
.hh {
background: #fe9c50;
content: "";
display: block;
width: 3px;
height: 26px;
background-size: 16px;
margin-right: 10px;
}
.operation1 {
margin-left: 150px;
padding-bottom: 7px;
}
</style>