forked from fanruan/fineui
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.
122 lines
3.0 KiB
122 lines
3.0 KiB
import { TreeView } from "../treeview"; |
|
import { extend, isNotNull, concat, each, shortcut } from "@/core"; |
|
import $ from "jquery"; |
|
|
|
/** |
|
* author: windy |
|
* 继承自treeView, 此树的父子节点的勾选状态互不影响, 此树不会有半选节点 |
|
* 返回value格式为[["A"], ["A", "a"]]表示勾选了A且勾选了a |
|
* @class ListTreeView |
|
* @extends TreeView |
|
*/ |
|
|
|
@shortcut() |
|
export class ListTreeView extends TreeView { |
|
static xtype = "bi.list_tree_view"; |
|
|
|
_constants = { |
|
SPLIT: "<|>", |
|
}; |
|
|
|
_defaultConfig() { |
|
return extend(super._defaultConfig(...arguments), { |
|
value: {}, |
|
}); |
|
} |
|
|
|
_init() { |
|
super._init(...arguments); |
|
const o = this.options; |
|
if (isNotNull(o.value)) { |
|
this.setSelectedValue(o.value); |
|
} |
|
} |
|
|
|
// 配置属性 |
|
_configSetting() { |
|
const self = this; |
|
|
|
function onClick(event, treeId, treeNode) { |
|
const zTree = $.fn.zTree.getZTreeObj(treeId); |
|
const checked = treeNode.checked; |
|
self._checkValue(treeNode, !checked); |
|
zTree.checkNode(treeNode, !checked, true, true); |
|
} |
|
|
|
function onCheck(event, treeId, treeNode) { |
|
self._selectTreeNode(treeId, treeNode); |
|
} |
|
|
|
return { |
|
async: { |
|
enable: false, |
|
}, |
|
check: { |
|
enable: true, |
|
chkboxType: { Y: "", N: "" }, |
|
}, |
|
data: { |
|
key: { |
|
title: "title", |
|
name: "text", |
|
}, |
|
simpleData: { |
|
enable: true, |
|
}, |
|
}, |
|
view: { |
|
showIcon: false, |
|
expandSpeed: "", |
|
nameIsHTML: true, |
|
dblClickExpand: false, |
|
}, |
|
callback: { |
|
onCheck, |
|
onClick, |
|
}, |
|
}; |
|
} |
|
|
|
_selectTreeNode(treeId, treeNode) { |
|
this._checkValue(treeNode, treeNode.checked); |
|
super._selectTreeNode(...arguments); |
|
} |
|
|
|
_transArrayToMap(treeArrays) { |
|
const map = {}; |
|
each(treeArrays, (idx, array) => { |
|
const key = array.join(this._constants.SPLIT); |
|
map[key] = true; |
|
}); |
|
|
|
return map; |
|
} |
|
|
|
_transMapToArray(treeMap) { |
|
const array = []; |
|
each(treeMap, key => { |
|
const item = key.split(this._constants.SPLIT); |
|
array.push(item); |
|
}); |
|
|
|
return array; |
|
} |
|
|
|
_checkValue(treeNode, checked) { |
|
const key = concat(this._getParentValues(treeNode), this._getNodeValue(treeNode)).join(this._constants.SPLIT); |
|
if (checked) { |
|
this.storeValue[key] = true; |
|
} else { |
|
delete this.storeValue[key]; |
|
} |
|
} |
|
|
|
setSelectedValue(value) { |
|
this.options.paras.selectedValues = value || []; |
|
this.storeValue = this._transArrayToMap(value); |
|
} |
|
|
|
getValue() { |
|
return this._transMapToArray(this.storeValue); |
|
} |
|
}
|
|
|