const data = [
{
id: "17",
node_name: "根节点",
node_path: "0",
is_last_node: "0",
parent_id: "0",
remark: "测试",
children: [
{
id: "1",
node_name: "测试节点1",
node_path: "17",
is_last_node: "0",
parent_id: "17",
remark: "",
children: [
{
id: "5",
node_name: "测试子节点1",
node_path: "0/1",
is_last_node: "0",
parent_id: "1",
remark: "",
children: [
{
id: "9",
node_name:
"测试末级节点的父节点1",
node_path: "0/1/5",
is_last_node: "0",
parent_id: "5",
remark: "",
children: [
{
id: "14",
node_name:
"测试末级节点1",
node_path: "0/1/5/9",
is_last_node: "1",
parent_id: "9",
remark: "",
sum: 2, //合计数量
pass_info: [
//出入园数据
{
cnt: 4, //数量
tid: 12312312, //票id
node_id: 11, //节点id
ticket_name: "票A", //票名称
},
{
cnt: 1,
tid: 12312321,
node_id: 11,
ticket_name: "票B",
},
],
},
{
id: "27",
node_name:
"测试末级节点1",
node_path: "0/1/5/9",
is_last_node: "1",
parent_id: "9",
remark: "",
},
],
},
{
id: "10",
node_name:
"测试末级节点的父节点2",
node_path: "0/1/5",
is_last_node: "0",
parent_id: "5",
remark: "",
children: [
{
id: "15",
node_name:
"测试末级节点2",
node_path: "0/1/5/10",
is_last_node: "1",
parent_id: "10",
remark: "123",
},
],
},
{
id: "11",
node_name:
"测试末级节点的父节点3",
node_path: "0/1/5",
is_last_node: "1",
parent_id: "5",
remark: "",
sum: 2, //合计数量
pass_info: [
//出入园数据
{
cnt: 1, //数量
tid: 12312312, //票id
node_id: 11, //节点id
ticket_name: "票A", //票名称
},
{
cnt: 1,
tid: 12312321,
node_id: 11,
ticket_name: "票B",
},
],
},
],
},
{
id: "6",
node_name: "测试子节点2",
node_path: "0/1",
is_last_node: "0",
parent_id: "1",
remark: "",
children: [
{
id: "12",
node_name: "测试子节的子节点1",
node_path: "0/1/6",
is_last_node: "0",
parent_id: "6",
remark: "",
children: [],
},
{
id: "13",
node_name: "测试子节的子节点2",
node_path: "0/1/6",
is_last_node: "0",
parent_id: "6",
remark: "",
children: [],
},
],
},
{
id: "7",
node_name: "测试子节点3",
node_path: "0/1",
is_last_node: "0",
parent_id: "1",
remark: "",
children: [],
},
{
id: "8",
node_name: "测试子节点4",
node_path: "0/1",
is_last_node: "0",
parent_id: "1",
remark: "",
children: [],
},
],
},
{
id: "2",
node_name: "测试节点2",
node_path: "17",
is_last_node: "0",
parent_id: "17",
remark: "",
children: [],
},
{
id: "3",
node_name: "测试节点3",
node_path: "17",
is_last_node: "0",
parent_id: "17",
remark: "",
children: [
{
id: "16",
node_name: "动物园",
node_path: "0/3",
is_last_node: "0",
parent_id: "3",
remark: "测试",
children: [],
},
],
},
{
id: "4",
node_name: "测试节点4",
node_path: "17",
is_last_node: "0",
parent_id: "17",
remark: "",
children: [],
},
],
},
]
const arr1 = [{
name: 1,
children: [
{
name: 2,
children: [
{
name: 2,
children: []
},
{
name: 2
},
{
name: 2
},
{
name: 2
},
{
name: 2
},
{
name: 2
},
{
name: 2
},
{
name: 2
},
{
name: 2
},
{
name: 2
},
{
name: 2
},
{
name: 2
}
]
},
{
name: 3
},
{
name: 4
}
]
}]
const findChild = (data = [], num = 0) => {
data && data.map(item => {
if (item.children && item.children.length) {
num = findChild(item.children, num)
} else {
num++;
}
})
return num;
}
console.log(findChild(data[0].children))
const digui = (data = [], level = 0, row = {}, final = [], levels = [], tickets = [], levelSum = {}) => {
level++;
data && data.map((item, index) => {
console.log("index", index, "level", level, "name", item.node_name)
let currentRow = {
...row,
[`level${level}`]: item.node_name,
[`node_id${level}`]: item.id,
};
if (level === 2) levelSum.level2 = 0;
if (!levels.includes(level)) levels.push(level);
if (item.sum) {
currentRow.sum = item.sum;
levelSum.level2 += item.sum;
}
if (item.pass_info) {
item.pass_info.forEach(p => {
currentRow[p.ticket_name] = p.cnt;
const matchTicket = tickets.find(t => t.tid === p.tid);
if (!matchTicket) {
tickets.push({
tid: p.tid,
ticket_name: p.ticket_name,
cnt: p.cnt
})
} else {
matchTicket.cnt += p.cnt;
}
})
}
// if (item.is_last_node == "0" && item.children) {
if (item.children && item.children.length) {
digui(item.children, level, currentRow, final, levels, tickets, levelSum);
} else {
final.push({ ...currentRow, type: "num" });
final.push({ ...currentRow, type: "rate" });
}
if (level === 2) {
final.push({ ...currentRow, level2: "合计", type: "total", sum: levelSum.level2 });
}
})
return { final, levels, tickets };
}
console.log(digui(data))
console