51 lines
1.3 KiB
JavaScript
51 lines
1.3 KiB
JavaScript
module.exports = Self => {
|
|
Self.remoteMethodCtx('getLeaves', {
|
|
description: 'Returns the nodes for a department',
|
|
accepts: [{
|
|
arg: 'parentId',
|
|
type: 'Number',
|
|
description: 'Get the children of the specified father',
|
|
}, {
|
|
arg: 'search',
|
|
type: 'String',
|
|
description: 'Filter nodes whose name starts with',
|
|
}],
|
|
returns: {
|
|
type: ['object'],
|
|
root: true
|
|
},
|
|
http: {
|
|
path: `/getLeaves`,
|
|
verb: 'GET'
|
|
}
|
|
});
|
|
|
|
Self.getLeaves = async(ctx, parentId = null, search) => {
|
|
let [res] = await Self.rawSql(
|
|
`CALL department_getLeaves(?, ?)`,
|
|
[parentId, search],
|
|
{userId: ctx.req.accessToken.userId}
|
|
);
|
|
|
|
let map = new Map();
|
|
for (let node of res) {
|
|
if (!map.has(node.parentFk))
|
|
map.set(node.parentFk, []);
|
|
map.get(node.parentFk).push(node);
|
|
}
|
|
function setLeaves(nodes) {
|
|
if (!nodes) return;
|
|
for (let node of nodes) {
|
|
node.childs = map.get(node.id);
|
|
setLeaves(node.childs);
|
|
}
|
|
}
|
|
|
|
let leaves = map.get(parentId);
|
|
|
|
setLeaves(leaves);
|
|
|
|
return leaves || [];
|
|
};
|
|
};
|