Files
2026-09-24 16:25:22 +08:00

129 lines
2.9 KiB
Plaintext

import { X_PICKER_X_ITEM } from "./interface.uts"
/**
* 当前树有多少个被选中了。
*/
export function getTreeSelectedNum(item : X_PICKER_X_ITEM[], target : Set<string>) : number {
let inx = 0;
function jshz(tree : X_PICKER_X_ITEM[]) {
for (let i = 0; i < tree.length; i++) {
let item = tree[i]
if (item.children.length > 0) {
jshz(item.children)
} else if (target.has(item.id)) {
inx += 1
}
}
}
jshz(item)
return inx;
}
/**
* 根据目标节点,过滤掉父节点。
* @param item
* @param target
*/
export function filterParentNode(item : X_PICKER_X_ITEM[], target : Set<string>) : string[] {
function jshz(tree : X_PICKER_X_ITEM[]) : string[] {
let arr = [] as string[]
for (let i = 0; i < tree.length; i++) {
let item = tree[i]
if (item.children.length > 0) {
arr = arr.concat(jshz(item.children))
} else if (target.has(item.id)) {
arr.push(item.id)
}
}
return arr;
}
return jshz(item)
}
/**
* 根据给定的长度值,赋值默认值
*/
export function setDefaultByValueAr(list : X_PICKER_X_ITEM[], value : string[], maxLen : number) : string[] {
let v = value;
let pr = [] as string[];
for (let j = 0; j < maxLen; j++) {
pr.push("")
}
v = v.concat(pr).slice(0, maxLen)
let defaultAr = [] as string[];
function setvalue(item : X_PICKER_X_ITEM[]) {
if (item.length > 0) {
defaultAr.push(item[0].id);
if (item[0].children.length > 0) {
setvalue(item[0].children)
}
}
}
setvalue(list);
for (let i = 0; i < maxLen; i++) {
if (defaultAr.length - 1 >= i && v[i] == "") {
v[i] = defaultAr[i]
}
}
return v;
}
// 通过 ID 查找节点的函数
export function findNodeById(TreeNode : X_PICKER_X_ITEM[], id : string) : X_PICKER_X_ITEM | null {
let newnode = null as X_PICKER_X_ITEM | null
for (let i = 0; i < TreeNode.length; i++) {
let node = TreeNode[i]
if (node.id === id) {
newnode = node;
break;
}
if (node.children.length > 0) {
const foundNode = findNodeById(node.children, id);
if (foundNode != null) {
newnode = foundNode;
break;
}
}
}
return newnode;
}
// 查找节点的上级节点
export function findParentNode(nodes: X_PICKER_X_ITEM[], targetNodeId: string ): X_PICKER_X_ITEM | null {
function search(node: X_PICKER_X_ITEM): X_PICKER_X_ITEM | null {
if (node.children.length>0) {
for (let i = 0; i < node.children.length; i++) {
const child = node.children[i];
if (child.id === targetNodeId) {
return node;
} else {
const foundParent = search(child);
if (foundParent !=null) {
return foundParent;
}
}
}
}
return null;
}
// 使用for循环遍历根节点数组
for (let i = 0; i < nodes.length; i++) {
const root = nodes[i];
const parentNode = search(root);
if (parentNode!=null) {
return parentNode;
}
}
return null; // 如果未找到目标节点的父节点,则返回undefined
}