vue el-tree 同时向后台传递选中和半选节点数据 (回显数据勾选问题已解决)

<template>
	<el-card>
		<div class="invoice-list clearfix">
			<ul class="invoice-header clearfix">
				<li class="invoice-item clearfix">
					<div class="left">计划代码</div>
				</li>
				<li class="invoice-item clearfix">
					<div class="left">计划科目</div>
				</li>
			</ul>
			<el-col>
				<el-tree
					:props="defaultProps"
					:data="tableListFir"
					show-checkbox
					default-expand-all
					ref="treeData"
					node-key="id"
					@check-change="handleSelectionChange"
					:default-checked-keys="resourceCheckedKey"
				>
					<div class="custom-tree-node clearfix" slot-scope="{node, data}">
						<span class="table_info_node clearfix">
							<span class="table_info_item">({{data.code}})  </span>
							<span class="table_info_item">{{data.name}}</span>
						</span>
					</div>
				</el-tree>
			</el-col>
		</div>
	</el-card>
</template>
<script>
	export default {
		data() {
			return {
				// 该数组是存储 要渲染的树形结构数据
				tableListFir:[],
				// 该数组是选中的节点(半选的节点和全选的节点全都存储在这个数组)
				multipleSelection: [],
				// 该数组回显数据根据所对应的ID  进行默认勾选 (:default-checked-keys 这个) 和 (node-key="id") 这个两个并存
				resourceCheckedKey: [],
                   // el-tree :props 调用
                   defaultProps: {
                     children: "children",
                     label: 'name'
                   } } }, methods: { // 渲染树形数据 tableDataFir() { var res = this.$http.request({ url: `/gsfjdsjfnjnnfg`, method: 'post', data: { // data: data; } }).then(res => { var data = res.data; if(data.status === "200") { // this.tableListFir 这个变量是el-tree data数据 (其中包含后台传的判断节点是否选中字段) this.tableListFir = data.body.LIST; // 接下来是 el-tree 回显默认勾选☑️重点✨ (如果不知道this.resourceCheckedKey做什么 可以看定义变量的介绍) this.findAllChildren(this.tableListFir, this.resourceCheckedKey); }else { this.$message.error(data.error) } }) }, // el-tree 复选框默认选中事件 handleSelectionChange(val) { // this.multipleSelection 这个数组用来存储所有半选的节点和全选的节点 用于保存的时候将数据传给后台 // 将半选和全选的节点全都存储在一个数组里面 concat 方法是合并(全选和半选)两个数组 this.multipleSelection = this.$refs.treeData.getHalfCheckedNodes().concat(this.$refs.treeData.getCheckedNodes()); }, // 遍历找出所有子节点 findAllChildren(data, arr) { data.forEach((item, index) => { if(item.children.length !== 0) { this.findAllChildren(item.children, arr); }else if(item.validSign == '1'){ // validSign 这个字段是后台用来判断前台是否默认选中的字段 validSign == 1 是选中 等于 0 是非选中 (根据你们后台实际参数进行修改) // 然后我们将 validSign == '1' 的所有子节点全部存储在arr 里面 arr.push(item.id); } }) } } } </script> <style> .invoice-list { color: #333; border: 1px solid #ebeef5; margin-top: 10px; } .invoice-list .invoice-header { height: 40px; background-color: #f8f8f9; display: flex; padding-left: 45px; text-align: center; border-bottom: 1px solid #ebeef5; } .invoice-list .invoice-header .invoice-item { background-color: #f8f8f9; padding: 10px; padding-right: 0; flex: 1; float: left; border-left: 1px solid #ebeef5; padding-left: 10px; } .invoice-list .el-tree-node__content { background: #f2f2f2; height: 30px; } .invoice-list .el-tree-node__children .el-tree-node__content { background: #fff; border-bottom: 1px solid #ebeef5; } .invoice-list .custom-tree-node { width: 100%; height: 100%; } .invoice-list .custom-tree-node .total_info_box { background: #f2f2f2; line-heght: 30px; } .invoice-list .custom-tree-node .total_info_box > span { float: left; font-size: 12px; margin: 0 15px; } .invoice-list .custom-tree-node .total_info_box > span > i { display: inline-block; margin-right: 3px; } .invoice-list .custom-tree-node .table_info_node { display: flex; height: 100%; text-align: center; } .invoice-list .custom-tree-node table_info_node .table_info_item { flex: 1; height: 100%; float: left; boeder-left: 1px solid #ebeef5; padding-left: 10px; line-height: 30px; } .el-table--border th:first-child .cell,.el-table--border td:first-child .cell { padding-left: 40%; } .corpProject { color: #333; font-size: 16px; font-weight: 400; text-align: center; } .clearfix:before .clearfix:after { content: ""; display: table; } .clearfix:after { clear: both; } .clearfix { *zoom: 1; } .left { float: left; background: #f8f8f9; } </style>

  

posted on 2019-10-09 10:34  ㅤㅤㅤㅤㅤㅤ  阅读(8032)  评论(0编辑  收藏  举报

导航