|
@@ -866,6 +866,54 @@ var idTree = {
|
|
|
return datas;
|
|
|
};
|
|
|
|
|
|
+ // 检查树结构数据有没问题
|
|
|
+ Tree.prototype.check = function (roots) {
|
|
|
+ return isValid(roots);
|
|
|
+ function isValid(nodes) {
|
|
|
+ for (let node of nodes) {
|
|
|
+ if (node.data.ParentID != -1 &&
|
|
|
+ (!node.parent || node.parent.data.ID !== node.data.ParentID)) {
|
|
|
+ console.log(`${node.serialNo() + 1}:${node.data.name} parent对应错误`);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (node.data.ParentID == -1 && node.parent) {
|
|
|
+ console.log(`${node.serialNo() + 1}:${node.data.name} 不应有parent`);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (node.data.NextSiblingID != -1 &&
|
|
|
+ (!node.nextSibling || node.nextSibling.data.ID !== node.data.NextSiblingID)) {
|
|
|
+ console.log(`${node.serialNo() + 1}:${node.data.name} next对应错误`);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (node.data.NextSiblingID == -1 && node.nextSibling) {
|
|
|
+ console.log(`${node.serialNo() + 1}:${node.data.name} 不应有next`);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ let sameDepthNodes = node.parent ? node.parent.children : roots,
|
|
|
+ nodeIdx = sameDepthNodes.indexOf(node),
|
|
|
+ nextIdx = sameDepthNodes.indexOf(node.nextSibling);
|
|
|
+ if (nodeIdx != -1 && nextIdx != -1 && nodeIdx > nextIdx) {
|
|
|
+ console.log(`${node.serialNo() + 1}:${node.data.name} node索引大于next索引`);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // nextSibling跟parent children的下一节点对应不上
|
|
|
+ if (nodeIdx != -1 &&
|
|
|
+ (nodeIdx === sameDepthNodes.length - 1 && nextIdx != -1) ||
|
|
|
+ (nodeIdx !== sameDepthNodes.length - 1 && nodeIdx + 1 !== nextIdx)) {
|
|
|
+ console.log(`${node.serialNo() + 1}:${node.data.name} nextSibling与树显示的下一节点对应不上`);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (node.children.length) {
|
|
|
+ let v = isValid(node.children);
|
|
|
+ if (!v) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
|
|
|
/*Tree.prototype.editedData = function (field, id, newText) {
|
|
|
var node = this.findNode(id), result = {allow: false, nodes: []};
|