@@ -315,7 +315,7 @@ window.ComponentDot = class {
315
315
}
316
316
317
317
menuSelect ( select ) {
318
- if ( this . limit == 1 ) {
318
+ if ( this . limit === 1 ) {
319
319
this . SELECTED_DOM . innerHTML = `<p class="dlp-text">${ select [ this . select_data [ 0 ] ] } </p>` ;
320
320
return ;
321
321
}
@@ -878,7 +878,7 @@ window.ComponentLine = class {
878
878
case 'select' :
879
879
let td = document . createElement ( 'td' ) ;
880
880
td . style = val . style ;
881
- td . append ( this . menuMake ( [ ] , val . options , val . options_limit , val . name ) ) ;
881
+ td . append ( this . menuMake ( column , [ ] , val . options , val . options_limit , val . name ) ) ;
882
882
foot . append ( td ) ;
883
883
break ;
884
884
case 'datetime' :
@@ -934,6 +934,15 @@ window.ComponentLine = class {
934
934
continue ;
935
935
}
936
936
let td = document . createElement ( 'td' ) ;
937
+ if ( columns [ column ] . type === 'select' ) {
938
+ let v = this . DATA [ key ] [ column ] ;
939
+ if ( / ^ [ 0 - 9 ] + $ / . test ( v ) ) {
940
+ v = [ parseInt ( v ) ] ;
941
+ } else if ( Array . isArray ( v ) === false ) {
942
+ v = [ ] ;
943
+ }
944
+ value [ column ] = v ;
945
+ }
937
946
if ( value [ column ] ) {
938
947
record [ column ] = value [ column ] ;
939
948
this . makeTd ( td , columns [ column ] , value [ column ] , column ) ;
@@ -1012,14 +1021,6 @@ window.ComponentLine = class {
1012
1021
let input ;
1013
1022
let DATA = this . DATA ;
1014
1023
let DATA_INPUT = this . DATA_INPUT ;
1015
- let input_change = function input_change ( ) {
1016
- let key = input . parentNode . parentNode . getAttribute ( 'data-key' ) ;
1017
- let column = input . getAttribute ( 'data-column' ) ;
1018
- if ( DATA [ key ] ) {
1019
- DATA [ key ] [ column ] = input . value ;
1020
- DATA_INPUT . value = JSON . stringify ( DATA ) ;
1021
- }
1022
- } ;
1023
1024
switch ( settings . type ) {
1024
1025
case 'text' :
1025
1026
td . insertAdjacentHTML ( 'afterbegin' , `<p style="display: block;" class="dlp text-white dlp-text" title="${ value } ">${ value } </p>` ) ;
@@ -1030,7 +1031,12 @@ window.ComponentLine = class {
1030
1031
input . setAttribute ( 'data-column' , column ) ;
1031
1032
input . value = value ;
1032
1033
input . addEventListener ( 'input' , ( ) => {
1033
- input_change ( ) ;
1034
+ let key = input . parentNode . parentNode . getAttribute ( 'data-key' ) ;
1035
+ let column = input . getAttribute ( 'data-column' ) ;
1036
+ if ( DATA [ key ] ) {
1037
+ DATA [ key ] [ column ] = input . value ;
1038
+ DATA_INPUT . value = JSON . stringify ( DATA ) ;
1039
+ }
1034
1040
} , false ) ;
1035
1041
td . appendChild ( input ) ;
1036
1042
break ;
@@ -1053,12 +1059,17 @@ window.ComponentLine = class {
1053
1059
}
1054
1060
this . format_settings [ column ] = format ;
1055
1061
input . addEventListener ( 'blur' , ( ) => {
1056
- input_change ( ) ;
1062
+ let key = input . parentNode . parentNode . getAttribute ( 'data-key' ) ;
1063
+ let column = input . getAttribute ( 'data-column' ) ;
1064
+ if ( DATA [ key ] ) {
1065
+ DATA [ key ] [ column ] = input . value ;
1066
+ DATA_INPUT . value = JSON . stringify ( DATA ) ;
1067
+ }
1057
1068
} , false ) ;
1058
1069
td . appendChild ( input ) ;
1059
1070
break ;
1060
1071
case 'select' :
1061
- td . append ( this . menuMake ( [ ] , settings . options , settings . options_limit , settings . name ) ) ;
1072
+ td . append ( this . menuMake ( column , value , settings . options , settings . options_limit , settings . name ) ) ;
1062
1073
break ;
1063
1074
default :
1064
1075
td . insertAdjacentHTML ( 'afterbegin' , `<p style="display: block;" class="dlp text-white dlp-text" title="${ value } ">${ value } </p>` ) ;
@@ -1104,7 +1115,7 @@ window.ComponentLine = class {
1104
1115
td . className = 'operate-column' ;
1105
1116
}
1106
1117
1107
- menuMake ( selected , select , limit , placeholder ) {
1118
+ menuMake ( column , selected , select , limit , placeholder ) {
1108
1119
let menu = document . createElement ( 'div' ) ;
1109
1120
menu . className = 'dlp-dot-menu' ;
1110
1121
@@ -1125,23 +1136,51 @@ window.ComponentLine = class {
1125
1136
1126
1137
let check = _component . check ;
1127
1138
check = check . replace ( `width="16" height="16"` , `width="12" height="12"` ) ;
1128
- this . id_line_hash = [ ] ;
1129
- let line = 0 ;
1130
1139
for ( let id in select ) {
1131
1140
if ( ! select . hasOwnProperty ( id ) ) continue ;
1132
- this . id_line_hash [ id ] = line ;
1133
- line ++ ;
1134
1141
let option = document . createElement ( 'div' ) ;
1135
1142
option . className = 'option' ;
1136
1143
option . setAttribute ( 'data-id' , id ) ;
1137
1144
option . insertAdjacentHTML ( 'afterbegin' , `<div class="dlp dlp-text" data-v="${ id } ">${ select [ id ] } </div><div></div>` ) ;
1138
1145
option . addEventListener ( 'click' , ( ) => {
1139
1146
id = parseInt ( id ) ;
1140
-
1147
+ let data_key = parseInt ( menu . parentNode . parentNode . getAttribute ( 'data-key' ) ) ;
1148
+ let selected = this . DATA [ data_key ] [ column ] ;
1149
+ let index = selected . indexOf ( id ) ;
1150
+ if ( index !== - 1 ) {
1151
+ /*cancel*/
1152
+ selected . splice ( index , 1 ) ;
1153
+ option . classList . remove ( 'option-active' ) ;
1154
+ if ( option . lastChild instanceof HTMLElement ) option . lastChild . innerHTML = '' ;
1155
+ menuSelect ( select , selected , limit ) ;
1156
+ this . DATA [ data_key ] [ column ] = selected ;
1157
+ if ( selected . length === 0 ) menu_select . firstElementChild . textContent = placeholder ;
1158
+ return ;
1159
+ }
1160
+ if ( limit > 0 && selected . length >= limit ) {
1161
+ for ( let line of list . childNodes ) {
1162
+ if ( ( selected . hasOwnProperty ( '0' ) ) && line . getAttribute ( 'data-id' ) === selected [ 0 ] . toString ( ) ) line . click ( ) ;
1163
+ }
1164
+ }
1165
+ option . classList . add ( 'option-active' ) ;
1166
+ selected . push ( id ) ;
1167
+ ( option . lastChild instanceof HTMLElement ) && option . lastChild . insertAdjacentHTML ( 'afterbegin' , check ) ;
1168
+ menuSelect ( select , selected , limit ) ;
1141
1169
} , false ) ;
1142
1170
list . append ( option ) ;
1143
1171
}
1144
1172
1173
+ function menuSelect ( select , selected , limit ) {
1174
+ if ( limit === 1 ) {
1175
+ menu_select . firstElementChild . innerHTML = `<p class="dlp-text">${ select [ selected [ 0 ] ] } </p>` ;
1176
+ return ;
1177
+ }
1178
+ let html = '' ;
1179
+ for ( let id of this . select_data ) {
1180
+ html += `<span class="dlp-text" title="${ select [ id ] } ">${ select [ id ] } </span>` ;
1181
+ }
1182
+ menu_select . firstElementChild . innerHTML = html ;
1183
+ }
1145
1184
menu . append ( menu_select ) ;
1146
1185
search_box . append ( input ) ;
1147
1186
menu_list . append ( search_box ) ;
0 commit comments