@@ -26,7 +26,7 @@ type="rotate"from="0 20 20"to="360 20 20"dur="0.5s"repeatCount="indefinite"/></p
26
26
<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/>
27
27
<path d="M10.97 4.97a.235.235 0 0 0-.02.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-1.071-1.05z"/>
28
28
</svg>` ,
29
- request :function ( url , method = "GET" , data = { } , callback = null ) {
29
+ request : function ( url , method = "GET" , data = { } , callback = null ) {
30
30
let xhr = new XMLHttpRequest ( ) ;
31
31
xhr . open ( method , url , true ) ;
32
32
xhr . timeout = 30000 ;
@@ -47,14 +47,14 @@ type="rotate"from="0 20 20"to="360 20 20"dur="0.5s"repeatCount="indefinite"/></p
47
47
xhr . onreadystatechange = function ( ) {
48
48
if ( xhr . readyState === xhr . DONE && xhr . status === 200 ) {
49
49
let response = xhr . response ;
50
- if ( typeof callback === 'function' ) callback ( response ) ;
50
+ if ( typeof callback === 'function' ) callback ( response ) ;
51
51
}
52
52
} ;
53
53
xhr . onerror = function ( e ) {
54
54
console . error ( e ) ;
55
55
} ;
56
56
} ,
57
- alert :function ( message , time = 1 , callback = null ) {
57
+ alert : function ( message , time = 1 , callback = null ) {
58
58
let div = document . createElement ( 'div' ) ;
59
59
div . innerHTML = message ;
60
60
let w = window . innerWidth / 2 - 140 ;
@@ -66,8 +66,33 @@ type="rotate"from="0 20 20"to="360 20 20"dur="0.5s"repeatCount="indefinite"/></p
66
66
var task = setTimeout ( function ( ) {
67
67
clearTimeout ( task ) ;
68
68
div . parentNode . removeChild ( div ) ;
69
- if ( typeof callback === 'function' ) callback ( ) ;
69
+ if ( typeof callback === 'function' ) callback ( ) ;
70
70
} , time * 1000 ) ;
71
+ } ,
72
+ contextmenu : function ( event , list , options = { } ) {
73
+ options = Object . assign ( {
74
+ W : '70px'
75
+ } , options ) ;
76
+ let ul = document . createElement ( 'ul' ) ;
77
+ ul . className = 'dlp dlp-contextmenu' ;
78
+ for ( let k in list ) {
79
+ let li = document . createElement ( 'li' ) ;
80
+ li . className = 'dlp dlp-text' ;
81
+ li . textContent = k ;
82
+ li . style . width = options . W ;
83
+ if ( typeof list [ k ] === 'function' ) {
84
+ li . addEventListener ( 'click' , ( ) => {
85
+ list [ k ] ( ) ;
86
+ ul . remove ( ) ;
87
+ } ) ;
88
+ ul . append ( li ) ;
89
+ }
90
+ }
91
+ ul . style = `top: ${ event . pageY - 3 } px;left: ${ event . pageX - 3 } px;` ;
92
+ ul . addEventListener ( 'mouseleave' , ( ) => {
93
+ ul . remove ( ) ;
94
+ } ) ;
95
+ document . getElementsByTagName ( "BODY" ) [ 0 ] . appendChild ( ul ) ;
71
96
}
72
97
} ;
73
98
@@ -80,11 +105,14 @@ class ComponentDot {
80
105
constructor ( name , selected , select ) {
81
106
this . name = name ;
82
107
this . DOM = document . getElementById ( name ) ;
108
+ this . DOM . addEventListener ( "contextmenu" , ( e ) => {
109
+ e . preventDefault ( ) ;
110
+ } ) ;
83
111
if ( ! Array . isArray ( selected ) ) {
84
112
console . error ( 'Dot param selected must be array!' ) ;
85
113
return ;
86
114
}
87
- if ( Array . isArray ( select ) || typeof select !== 'object' ) {
115
+ if ( Array . isArray ( select ) || typeof select !== 'object' ) {
88
116
console . error ( 'Dot param select must be object such as {key:val,key2:val2,...} !' ) ;
89
117
return ;
90
118
}
@@ -251,6 +279,9 @@ class ComponentCascadeDot {
251
279
let html = `<div class="dlp-dot" ><div class="dot-top"><input type="text" class="dlp dot-search" placeholder="搜索名称"><div id="${ this . name } -select" class="dot-selected dlp-scroll"></div></div><div class="dot-body"><div class="dot-select dot-select-cascade dlp-scroll"></div></div></div>
252
280
<input name="${ this . name } [select]" value="[]" type="hidden"><input name="${ this . name } [insert]" value="[]" type="hidden"><input name="${ this . name } [delete]" value="[]" type="hidden">` ;
253
281
this . DOM . insertAdjacentHTML ( 'afterbegin' , html ) ;
282
+ this . DOM . addEventListener ( "contextmenu" , ( e ) => {
283
+ e . preventDefault ( ) ;
284
+ } ) ;
254
285
this . SELECTED_DOM = document . querySelector ( `#${ this . name } .dot-selected` ) ;
255
286
this . CONTENT_DOM = document . querySelector ( `#${ this . name } .dot-select` ) ;
256
287
this . selectInputDOM = document . querySelector ( `input[name='${ this . name } [select]']` ) ;
@@ -262,6 +293,7 @@ class ComponentCascadeDot {
262
293
makeSelect ( select ) {
263
294
this . dimensional_data = [ ] ;
264
295
this . makeDimensional ( select ) ;
296
+ let object = this ;
265
297
for ( let stack in this . dimensional_data ) {
266
298
stack = parseInt ( stack ) ;
267
299
let data = this . dimensional_data [ stack ] ;
@@ -270,6 +302,7 @@ class ComponentCascadeDot {
270
302
data . forEach ( ( v , k ) => {
271
303
if ( Array . isArray ( v . nodes ) && v . nodes . length !== 0 ) {
272
304
v . nodes = v . nodes . map ( ( N ) => N . key ) ;
305
+ v . checkAll = false ;
273
306
} else {
274
307
v . nodes = null ;
275
308
v . checked = false ;
@@ -280,6 +313,27 @@ class ComponentCascadeDot {
280
313
div . setAttribute ( 'data-id' , v . key ) ;
281
314
div . setAttribute ( 'data-k' , k ) ;
282
315
div . addEventListener ( 'click' , this . select . bind ( this , div , stack ) ) ;
316
+ if ( v . nodes !== null ) {
317
+ div . addEventListener ( "contextmenu" , ( e ) => {
318
+ e . preventDefault ( ) ;
319
+ _component . contextmenu ( e , {
320
+ '全选' : ( ) => {
321
+ let k = parseInt ( div . getAttribute ( 'data-k' ) ) ;
322
+ object . checkAll ( stack + 1 ,
323
+ this . dimensional_data [ stack ] [ k ] . nodes , v . checkAll ) ;
324
+ if ( v . checkAll === true ) {
325
+ v . checkAll = false ;
326
+ } else {
327
+ v . checkAll = true ;
328
+ }
329
+ }
330
+ } ) ;
331
+ } ) ;
332
+ } else {
333
+ div . addEventListener ( "contextmenu" , ( e ) => {
334
+ e . preventDefault ( ) ;
335
+ } ) ;
336
+ }
283
337
stackDom . append ( div ) ;
284
338
/*selected append*/
285
339
let index = this . selected_data . indexOf ( parseInt ( v . key ) ) ;
@@ -407,7 +461,7 @@ class ComponentCascadeDot {
407
461
D . classList . add ( 'dlp-label-silence' ) ;
408
462
} else {
409
463
D . classList . remove ( 'dlp-label-silence' ) ;
410
- if ( to_first_index === null ) to_first_index = index ;
464
+ if ( to_first_index === null && parseInt ( D . getAttribute ( 'data-id' ) ) === node ) to_first_index = index ;
411
465
}
412
466
}
413
467
if ( checked === true && node === data . key && data . mark !== true ) {
@@ -526,7 +580,7 @@ class ComponentCascadeDot {
526
580
div . textContent = d . val ;
527
581
div . addEventListener ( 'click' , ( ) => this . searchCoverClick ( stack , d , this . STACKS [ stack ] . childNodes [ k ] ) ) ;
528
582
this . SELECT_COVER_DOM . childNodes [ stack ] . appendChild ( div ) ;
529
- if ( ! Array . isArray ( this . COVER_STACK_HASH_DOM [ stack ] ) ) {
583
+ if ( ! Array . isArray ( this . COVER_STACK_HASH_DOM [ stack ] ) ) {
530
584
this . COVER_STACK_HASH_DOM [ stack ] = [ d . key ] ;
531
585
return ;
532
586
}
@@ -538,16 +592,16 @@ class ComponentCascadeDot {
538
592
539
593
searchCoverClick ( stack , data , dom ) {
540
594
if ( data . nodes !== null ) {
541
- let nextStack = stack + 1 ;
542
- this . dimensional_data [ nextStack ] . forEach ( ( d , k ) => {
595
+ let nextStack = stack + 1 ;
596
+ this . dimensional_data [ nextStack ] . forEach ( ( d , k ) => {
543
597
if ( data . nodes . indexOf ( d . key ) !== - 1 &&
544
598
( ! Array . isArray ( this . COVER_STACK_HASH_DOM [ nextStack ] ) || this . COVER_STACK_HASH_DOM [ nextStack ] . indexOf ( d . key ) === - 1 ) ) {
545
599
let div = document . createElement ( 'div' ) ;
546
600
div . className = 'dlp dlp-text dlp-label' ;
547
601
div . textContent = d . val ;
548
602
div . addEventListener ( 'click' , ( ) => this . searchCoverClick ( nextStack , d , this . STACKS [ nextStack ] . childNodes [ k ] ) ) ;
549
603
this . SELECT_COVER_DOM . childNodes [ nextStack ] . appendChild ( div ) ;
550
- if ( ! Array . isArray ( this . COVER_STACK_HASH_DOM [ nextStack ] ) ) {
604
+ if ( ! Array . isArray ( this . COVER_STACK_HASH_DOM [ nextStack ] ) ) {
551
605
this . COVER_STACK_HASH_DOM [ nextStack ] = [ d . key ] ;
552
606
return ;
553
607
}
@@ -558,11 +612,43 @@ class ComponentCascadeDot {
558
612
}
559
613
( dom instanceof HTMLElement ) && dom . click ( ) ;
560
614
}
615
+
616
+ checkAll ( stack , nodes , check ) {
617
+ if ( stack > ( this . dimensional_data . length - 1 ) ) return ;
618
+ if ( ! Array . isArray ( nodes ) || nodes . length <= 0 ) return ;
619
+ let currentStackDocuments = this . STACKS [ stack ] . childNodes ;
620
+ let children = [ ] ;
621
+ let to_first_index = null ;
622
+ currentStackDocuments . forEach ( ( D , index ) => {
623
+ if ( nodes . indexOf ( parseInt ( D . getAttribute ( 'data-id' ) ) ) !== - 1 ) {
624
+ let checked = this . dimensional_data [ stack ] [ index ] . checked ;
625
+ if ( check === false ) {
626
+ checked === false && D . click ( ) ;
627
+ this . dimensional_data [ stack ] [ index ] . checkAll = true ;
628
+ } else if ( check === true ) {
629
+ checked === true && D . click ( ) ;
630
+ this . dimensional_data [ stack ] [ index ] . checkAll = false ;
631
+ }
632
+ let child = this . dimensional_data [ stack ] [ index ] . nodes ;
633
+ if ( Array . isArray ( child ) ) {
634
+ child . forEach ( ( c ) => {
635
+ if ( children . indexOf ( child ) === - 1 ) children . push ( c ) ;
636
+ } ) ;
637
+ }
638
+ if ( to_first_index === null ) to_first_index = index ;
639
+ }
640
+ } ) ;
641
+ if ( to_first_index !== null ) this . STACKS [ stack ] . scrollTop = to_first_index * 27 ;
642
+ this . checkAll ( stack + 1 , children , check ) ;
643
+ }
561
644
}
562
645
563
646
class ComponentLine {
564
647
constructor ( name , columns , data , options = { } ) {
565
648
this . DOM = document . getElementById ( name ) ;
649
+ this . DOM . addEventListener ( "contextmenu" , ( e ) => {
650
+ e . preventDefault ( ) ;
651
+ } ) ;
566
652
this . COLUMNS = columns ;
567
653
this . DATA = data ;
568
654
this . OPTIONS = Object . assign ( {
0 commit comments