yw-ui-vue2
Version:
YW-UI-Vue2
93 lines (83 loc) • 2.27 kB
JavaScript
// 获取当前多级下的所有数据
export function getKeyOfData(list, key, value) {
if (!isArray(list)) throw new Error("getKeyOfData args list invalid!");
let i = -1;
const len = list.length;
let homeItem = {};
while (++i < len) {
const item = list[i];
if (item[key] === value) {
homeItem = item;
break;
} else if (item.children && item.children.length) {
const res = getKeyOfData(item.children, key, value);
if (res[key]) return res;
}
}
return homeItem;
}
// 选中
export function setChecked(list = [], ids = []) {
list.forEach((ret) => {
// console.log(ret.id, ids.includes(ret.id));
ret.check = ids.includes(ret.id);
if (ret.children && ret.children.length) {
setChecked(ret.children, ids);
}
});
}
// 数组判定
export function isArray(arr) {
if (!Array.isArray) {
Array.isArray = (arg) => {
return Object.prototype.toString.call(arg) === "[object Array]";
};
}
return Array.isArray(arr);
}
// 将树形数据转换为一维数组
export function flattenTree(tree, dep, parentLabel = "") {
let result = [];
for (const node of tree) {
const currentLabel = parentLabel
? `${parentLabel}/${node[dep]}`
: node[dep];
result.push({
check: node.check,
label: currentLabel,
id: node.id,
key: node.id,
// item: node,
});
if (node.children && node.children.length > 0) {
result.splice(result.length - 1, 1);
result = result.concat(flattenTree(node.children, [dep], currentLabel));
}
}
return result;
}
// v-clickoutside指令 点击外部
export const clickoutside = {
// 初始化指令
bind(el, binding) {
function documentHandler(e) {
if (el.contains(e.target)) {
return false;
}
// if (binding.expression) {
// binding.value(e);
// }
// 如果绑定的参数是函数,正常情况也应该是函数,执行
if (binding.value && typeof binding.value === "function") {
binding.value(e);
}
}
el.__vueClickOutside__ = documentHandler;
document.addEventListener("click", documentHandler);
},
update() {},
unbind(el) {
document.removeEventListener("click", el.__vueClickOutside__);
delete el.__vueClickOutside__;
},
};