@@ -94,19 +94,56 @@ const generateTreeData = (data, isFirstLevel = true) => {
9494const SectionContent = ( { data} ) => {
9595 const treeData = generateTreeData ( data ) ;
9696
97+ useEffect ( ( ) => {
98+ const handleClickOutside = ( e ) => {
99+ // 如果点击的不是树节点内容区域
100+ if ( ! e . target . closest ( '.ant-tree-node-content-wrapper' ) ) {
101+ window . getSelection ( ) . removeAllRanges ( ) ;
102+ }
103+ } ;
104+
105+ document . addEventListener ( 'mousedown' , handleClickOutside ) ;
106+ return ( ) => {
107+ document . removeEventListener ( 'mousedown' , handleClickOutside ) ;
108+ } ;
109+ } , [ ] ) ;
110+
97111 useEffect ( ( ) => {
98112 removeFirstLevelLine ( ) ;
113+
114+ // 监听全局 keydown 事件
115+ const handleKeyDown = ( e ) => {
116+ if ( e . ctrlKey && e . key === 'c' ) {
117+ const selectedText = window . getSelection ( ) . toString ( ) ;
118+ if ( selectedText ) {
119+ e . preventDefault ( ) ; // 阻止默认行为(可选)
120+ navigator . clipboard . writeText ( selectedText )
121+ . catch ( err => console . error ( 'Copy failed:' , err ) ) ;
122+ }
123+ }
124+ } ;
125+
126+ document . addEventListener ( 'keydown' , handleKeyDown ) ;
127+ return ( ) => document . removeEventListener ( 'keydown' , handleKeyDown ) ;
99128 } , [ treeData ] ) ;
100129
101130 return ( < >
102131 < Tree showLine = { { showLeafIcon : false } }
103132 switcherIcon = { ( { expanded} ) => < TreeSwitcherIcon expanded = { expanded } /> }
104133 defaultExpandAll = { false }
105134 treeData = { treeData }
106- titleRender = { ( nodeData ) => {
107- const className = nodeData . isFirstLevel && nodeData . children . length === 0 ? 'first-level' : 'not-first' ;
108- return < span className = { className } > { nodeData . title } </ span > ;
109- } }
135+ titleRender = { ( nodeData ) => (
136+ < span
137+ style = { {
138+ userSelect : 'text' , // 允许选择文本
139+ WebkitUserSelect : 'text' , // Safari 兼容
140+ MozUserSelect : 'text' , // Firefox 兼容
141+ } }
142+ onMouseDown = { ( e ) => e . stopPropagation ( ) } // 阻止拖拽
143+ >
144+ { nodeData . title }
145+ </ span >
146+ ) }
110147 />
111148 </ > ) ;
112149} ;
0 commit comments