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
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
|
|
},
|
|
|
|
}
|