UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

58 lines (48 loc) • 1.44 kB
// type import type { SetupContext } from 'vue'; import type Node from './store/node'; import type { TreeNodeData, TreeKey, TreeContext } from './types/tree'; export const NODE_KEY = '$treeNodeId'; // 设置一个节点数据标记 export const markNodeData = (node: Node, data: TreeNodeData): void => { // 没有数据 if (!data || data[NODE_KEY]) { return; } // 创建一个真正的常量属性 Object.defineProperty(data, NODE_KEY, { value: node.id, enumerable: false, // 不能在数据属性和访问器属性之间更改 // 不能被删除 configurable: false, // 不可写入 writable: false, }); }; // 获取节点的key export const getNodeKey = (key: TreeKey, data: TreeNodeData): any => { if (!key) { return data[NODE_KEY]; } return data[key]; }; // 当前点击事件 export const handleCurrentChange = ( store: TreeContext['store'], emit: SetupContext['emit'], setCurrent: () => void ) => { // 上一个点击节点 const preCurrentNode = store.value.currentNode; // 设置当前节点 setCurrent(); // 当前点击的节点 const currentNode = store.value.currentNode; // 点击相同的节点 if (preCurrentNode === currentNode) { return; } // 当前选中节点变化时触发的事件 emit('on-current-change', currentNode ? currentNode.data : null, currentNode); };