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.
 
 
 
 

133 lines
3.8 KiB

export default {
reloadAllChildren: function(table,maps, rows,parentIdName,loadChildren,idMaps) {
if(!rows||rows.length==0){
return;
}
if(!maps || maps.length==0){
return;
}
if(!table){
return;
}
var lazyTreeNodeMap=table.store.states.lazyTreeNodeMap
var parentIds=rows.map(i=>i[parentIdName])
if(idMaps==null){
idMaps=new Map();
}
if(parentIds.length==0){
return;
}
parentIds.forEach(k=>{
if(!idMaps.has(k)){
idMaps.set(k,k);
if (maps.get(k)) {
const { tree, treeNode, resolve } = maps.get(k)
lazyTreeNodeMap[k]=[]
if (tree) { // 重新执行父节点加载子级操作
loadChildren(tree, treeNode, resolve)
if(tree[parentIdName]){
this.reloadAllChildren(table,maps, [tree],parentIdName,loadChildren,idMaps)
}
}
}
}
});
},
reloadChildren: function(table,maps, parentId,parentIdName,loadChildren) {
var params={};
params[parentIdName]=parentId;
this.reloadAllChildren(table,maps, [params],parentIdName,loadChildren)
},
reloadChildrenByOpType: function(table,maps, parentId,parentIdName,loadChildren,opType) {
var lazyTreeNodeMap=table.store.states.lazyTreeNodeMap
if (maps.get(parentId)) {
const { tree, treeNode, resolve } = maps.get(parentId)
if (tree) { // 重新执行父节点加载子级操作
var oldDatas=lazyTreeNodeMap[parentId]
loadChildren(tree, treeNode, resolve,oldDatas,opType)
}
}
},
clearOpType: function(table,maps,parentId,parentIdName,loadChildren) {
var lazyTreeNodeMap=table.store.states.lazyTreeNodeMap
if (maps.get(parentId)) {
const { tree, treeNode, resolve } = maps.get(parentId)
if (tree) { // 重新执行父节点加载子级操作
var oldDatas=lazyTreeNodeMap[parentId]
loadChildren(tree, treeNode, resolve,oldDatas,"clearOpType")
}
}
},
/**
* 将类表数据转换为如下树状结构的数据
* {
* xxx:'',
* xxx2:'',
* children:[
* xxx:'',
* xxx2:'',
* ]
* }
* @param {*} data2 将要转换的数据
* @param {*} pidName 上级字段名称,如 pmenId
* @param {*} idName 本条数据主键字段名称 如 menuId
* @param {*} rowCallBack(data),如果需要对部分字段进行转换,可以传入这个回调函数。比如需要将 name:'陈天财' => label:'陈天财'
* @returns
*/
translateDataToTree: function(data2,pidName,idName,rowCallBack) {
var data=JSON.parse(JSON.stringify(data2));
let parents = data.filter(value =>{
//如果我的上级为空,则我是最上级
if(value[pidName] == 'undefined' || value[pidName] == null || value[pidName] == ''|| value[pidName] == '0'){
return true;
//如果我的上级不在列表中,我作为最上级
}else if(data.some(i=>value[pidName]==i[idName])){
return false;
}else {
return true
}
})
let children = data.filter(value =>{
if(data.some(i=>value[pidName]==i[idName])){
return true;
}else{
return false;
}
})
let translator = (parents, children) => {
parents.forEach((parent) => {
if(rowCallBack){
rowCallBack(parent)
}
children.forEach((current, index) => {
if (current[pidName] === parent[idName]) {
let temp = JSON.parse(JSON.stringify(children))
temp.splice(index, 1)
translator([current], temp)
typeof parent.children !== 'undefined' && parent.children ? parent.children.push(current) : parent.children = [current]
parent.childrenCnt=parent.children.length
}
}
)
}
)
}
translator(parents, children)
return parents
},
}