You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
3.3 KiB

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>知识点树形展示</title>
<style>
body {
margin: 0;
padding: 0;
font-family: Microsoft YaHei;
}
#treeTable {
width: 100%;
border-collapse: collapse;
}
#treeTable th, #treeTable td {
padding: 8px;
border: 1px solid #ddd;
}
#treeTable th {
background: #f5f5f5;
}
.level-0 td:first-child {
padding-left: 10px;
}
.level-1 td:first-child {
padding-left: 30px;
}
.level-2 td:first-child {
padding-left: 50px;
}
.level-3 td:first-child {
padding-left: 70px;
}
.toggle-icon {
cursor: pointer;
margin-right: 5px;
}
</style>
</head>
<body>
<table id="treeTable">
<thead>
<tr>
<th>知识点</th>
<th>先修知识</th>
<th>相关知识</th>
</tr>
</thead>
<tbody id="treeBody"></tbody>
</table>
<script src="/static/zTree/js/jquery-1.4.4.min.js"></script>
<script>
var treeData = [];
function toggleNode(nodeId) {
console.log('toggleNode', nodeId);
var node = findNodeById(treeData, nodeId);
if (node) {
node.open = !node.open;
// 强制重新渲染整个表格
updateTable();
}
}
function findNodeById(nodes, id) {
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].id == id) return nodes[i];
if (nodes[i].children) {
var found = findNodeById(nodes[i].children, id);
if (found) return found;
}
}
return null;
}
function updateTable() {
var html = '';
function buildRows(nodes, level) {
level = level || 0;
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
html += '<tr class="level-' + level + '">';
html += '<td style="padding-left:' + (level * 20) + 'px">';
if (node.children && node.children.length > 0) {
html += '<span class="toggle-icon" onclick="toggleNode(\'' + node.id + '\')">' +
(node.open ? '▼' : '▶') + '</span>';
} else {
html += '<span style="display:inline-block; width:16px;"></span>';
}
html += node.title + '</td>';
html += '<td>' + (node.prerequisite || '') + '</td>';
html += '<td>' + (node.related || '') + '</td>';
html += '</tr>';
if (node.open && node.children && node.children.length > 0) {
buildRows(node.children, level + 1);
}
}
}
buildRows(treeData);
$("#treeBody").html(html);
}
// 初始化数据
$.ajax({
url: "/api/tree-data",
type: "GET",
success: function (res) {
if (res.code === 0) {
treeData = res.data;
updateTable();
}
}
});
</script>
</body>
</html>