evui 3.3.10 → 3.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/evui.common.js +2439 -1032
- package/dist/evui.common.js.map +1 -1
- package/dist/evui.umd.js +2439 -1032
- package/dist/evui.umd.js.map +1 -1
- package/dist/evui.umd.min.js +1 -1
- package/dist/evui.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/components/chart/chart.core.js +65 -24
- package/src/components/chart/element/element.heatmap.js +195 -51
- package/src/components/chart/element/element.line.js +22 -9
- package/src/components/chart/element/element.scatter.js +26 -9
- package/src/components/chart/element/element.tip.js +103 -83
- package/src/components/chart/helpers/helpers.constant.js +13 -11
- package/src/components/chart/model/model.series.js +1 -1
- package/src/components/chart/model/model.store.js +19 -74
- package/src/components/chart/plugins/plugins.interaction.js +15 -4
- package/src/components/chart/plugins/plugins.legend.js +6 -3
- package/src/components/chart/plugins/plugins.pie.js +17 -0
- package/src/components/chart/plugins/plugins.tooltip.js +205 -32
- package/src/components/chart/scale/scale.js +10 -11
- package/src/components/chart/scale/scale.step.js +38 -3
- package/src/components/chart/scale/scale.time.category.js +35 -3
- package/src/components/chart/uses.js +12 -0
- package/src/components/grid/Grid.vue +109 -36
- package/src/components/grid/grid.summary.vue +235 -0
- package/src/components/grid/style/grid.scss +0 -14
- package/src/components/grid/uses.js +55 -46
- package/src/components/treeGrid/TreeGrid.vue +269 -36
- package/src/components/treeGrid/TreeGridNode.vue +8 -9
- package/src/components/treeGrid/uses.js +152 -37
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { getCurrentInstance, nextTick } from 'vue';
|
|
2
|
-
import {
|
|
2
|
+
import { uniqBy } from 'lodash-es';
|
|
3
3
|
import { numberWithComma } from '@/common/utils';
|
|
4
4
|
|
|
5
5
|
const ROW_INDEX = 0;
|
|
6
6
|
const ROW_CHECK_INDEX = 1;
|
|
7
7
|
const ROW_DATA_INDEX = 2;
|
|
8
|
+
const ROW_SELECT_INDEX = 3;
|
|
8
9
|
|
|
9
10
|
export const commonFunctions = () => {
|
|
10
11
|
const { props } = getCurrentInstance();
|
|
@@ -32,18 +33,18 @@ export const commonFunctions = () => {
|
|
|
32
33
|
/**
|
|
33
34
|
* 데이터 타입에 따라 변환된 데이터을 반환한다.
|
|
34
35
|
*
|
|
35
|
-
* @param {
|
|
36
|
+
* @param {object} column - 컬럼 정보
|
|
36
37
|
* @param {number|string} value - 데이터
|
|
37
38
|
* @returns {number|string} 변환된 데이터
|
|
38
39
|
*/
|
|
39
|
-
const getConvertValue = (
|
|
40
|
-
let convertValue = value;
|
|
40
|
+
const getConvertValue = (column, value) => {
|
|
41
|
+
let convertValue = column.type === 'number' || column.type === 'float' ? Number(value) : value;
|
|
41
42
|
|
|
42
|
-
if (type === 'number') {
|
|
43
|
+
if (column.type === 'number') {
|
|
43
44
|
convertValue = numberWithComma(value);
|
|
44
45
|
convertValue = convertValue === false ? value : convertValue;
|
|
45
|
-
} else if (type === 'float') {
|
|
46
|
-
convertValue =
|
|
46
|
+
} else if (column.type === 'float') {
|
|
47
|
+
convertValue = convertValue.toFixed(column.decimal ?? 3);
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
return convertValue;
|
|
@@ -96,7 +97,7 @@ export const scrollEvent = (params) => {
|
|
|
96
97
|
firstVisibleIndex = 0;
|
|
97
98
|
}
|
|
98
99
|
|
|
99
|
-
const lastVisibleIndex = firstVisibleIndex + rowCount;
|
|
100
|
+
const lastVisibleIndex = firstVisibleIndex + rowCount + 1;
|
|
100
101
|
const firstIndex = Math.max(firstVisibleIndex, 0);
|
|
101
102
|
const lastIndex = lastVisibleIndex;
|
|
102
103
|
|
|
@@ -338,7 +339,7 @@ export const resizeEvent = (params) => {
|
|
|
338
339
|
|
|
339
340
|
export const clickEvent = (params) => {
|
|
340
341
|
const { emit } = getCurrentInstance();
|
|
341
|
-
const selectInfo = params;
|
|
342
|
+
const { selectInfo } = params;
|
|
342
343
|
const getClickedRowData = (event, row) => {
|
|
343
344
|
const tagName = event.target.tagName.toLowerCase();
|
|
344
345
|
let cellInfo = {};
|
|
@@ -361,17 +362,41 @@ export const clickEvent = (params) => {
|
|
|
361
362
|
* @param {object} event - 이벤트 객체
|
|
362
363
|
* @param {array} row - row 데이터
|
|
363
364
|
*/
|
|
365
|
+
let timer = null;
|
|
364
366
|
const onRowClick = (event, row) => {
|
|
365
367
|
if (event.target && event.target.parentElement
|
|
366
368
|
&& event.target.parentElement.classList.contains('row-checkbox-input')) {
|
|
367
369
|
return false;
|
|
368
370
|
}
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
selectInfo.
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
371
|
+
clearTimeout(timer);
|
|
372
|
+
timer = setTimeout(() => {
|
|
373
|
+
if (selectInfo.useSelect) {
|
|
374
|
+
const rowData = row[ROW_DATA_INDEX];
|
|
375
|
+
if (row[ROW_SELECT_INDEX]) {
|
|
376
|
+
row[ROW_SELECT_INDEX] = false;
|
|
377
|
+
if (selectInfo.multiple) {
|
|
378
|
+
if (event.ctrlKey) {
|
|
379
|
+
selectInfo.selectedRow.splice(selectInfo.selectedRow.indexOf(row[ROW_DATA_INDEX]), 1);
|
|
380
|
+
} else {
|
|
381
|
+
selectInfo.selectedRow = [rowData];
|
|
382
|
+
}
|
|
383
|
+
} else {
|
|
384
|
+
selectInfo.selectedRow = [];
|
|
385
|
+
}
|
|
386
|
+
} else {
|
|
387
|
+
row[ROW_SELECT_INDEX] = true;
|
|
388
|
+
if (event.ctrlKey
|
|
389
|
+
&& selectInfo.multiple
|
|
390
|
+
&& (!selectInfo.limitCount || selectInfo.limitCount > selectInfo.selectedRow.length)) {
|
|
391
|
+
selectInfo.selectedRow.push(rowData);
|
|
392
|
+
} else {
|
|
393
|
+
selectInfo.selectedRow = [rowData];
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
emit('update:selected', selectInfo.selectedRow);
|
|
397
|
+
emit('click-row', getClickedRowData(event, row));
|
|
398
|
+
}
|
|
399
|
+
}, 100);
|
|
375
400
|
return true;
|
|
376
401
|
};
|
|
377
402
|
/**
|
|
@@ -381,9 +406,7 @@ export const clickEvent = (params) => {
|
|
|
381
406
|
* @param {array} row - row 데이터
|
|
382
407
|
*/
|
|
383
408
|
const onRowDblClick = (event, row) => {
|
|
384
|
-
|
|
385
|
-
selectInfo.selectedRow = rowData;
|
|
386
|
-
emit('update:selected', rowData);
|
|
409
|
+
clearTimeout(timer);
|
|
387
410
|
emit('dblclick-row', getClickedRowData(event, row));
|
|
388
411
|
};
|
|
389
412
|
return { onRowClick, onRowDblClick };
|
|
@@ -420,12 +443,9 @@ export const checkEvent = (params) => {
|
|
|
420
443
|
if (row[ROW_CHECK_INDEX]) {
|
|
421
444
|
if (checkInfo.useCheckbox.mode === 'single') {
|
|
422
445
|
checkInfo.checkedRows = [row[ROW_DATA_INDEX]];
|
|
423
|
-
checkInfo.checkedIndex.clear();
|
|
424
446
|
} else {
|
|
425
447
|
checkInfo.checkedRows.push(row[ROW_DATA_INDEX]);
|
|
426
448
|
}
|
|
427
|
-
checkInfo.checkedIndex.add(row[ROW_INDEX]);
|
|
428
|
-
|
|
429
449
|
let store = stores.store;
|
|
430
450
|
if (pageInfo.isClientPaging) {
|
|
431
451
|
store = getPagingData();
|
|
@@ -437,10 +457,8 @@ export const checkEvent = (params) => {
|
|
|
437
457
|
} else {
|
|
438
458
|
if (checkInfo.useCheckbox.mode === 'single') {
|
|
439
459
|
checkInfo.checkedRows = [];
|
|
440
|
-
checkInfo.checkedIndex.clear();
|
|
441
460
|
} else {
|
|
442
461
|
checkInfo.checkedRows.splice(checkInfo.checkedRows.indexOf(row[ROW_DATA_INDEX]), 1);
|
|
443
|
-
checkInfo.checkedIndex.delete(row[ROW_INDEX]);
|
|
444
462
|
}
|
|
445
463
|
checkInfo.isHeaderChecked = false;
|
|
446
464
|
}
|
|
@@ -464,12 +482,8 @@ export const checkEvent = (params) => {
|
|
|
464
482
|
if (!checkInfo.checkedRows.includes(row[ROW_DATA_INDEX])) {
|
|
465
483
|
checkInfo.checkedRows.push(row[ROW_DATA_INDEX]);
|
|
466
484
|
}
|
|
467
|
-
if (!checkInfo.checkedIndex.has(row[ROW_INDEX])) {
|
|
468
|
-
checkInfo.checkedIndex.add(row[ROW_INDEX]);
|
|
469
|
-
}
|
|
470
485
|
} else {
|
|
471
486
|
checkInfo.checkedRows.splice(checkInfo.checkedRows.indexOf(row[ROW_DATA_INDEX]), 1);
|
|
472
|
-
checkInfo.checkedIndex.delete(row[ROW_INDEX]);
|
|
473
487
|
}
|
|
474
488
|
row[ROW_CHECK_INDEX] = isHeaderChecked;
|
|
475
489
|
});
|
|
@@ -760,13 +774,13 @@ export const filterEvent = (params) => {
|
|
|
760
774
|
for (let ix = 0; ix < stores.orderedColumns.length; ix++) {
|
|
761
775
|
const column = stores.orderedColumns[ix] || {};
|
|
762
776
|
let columnValue = row[ROW_DATA_INDEX][ix];
|
|
763
|
-
|
|
777
|
+
column.type = column.type || 'string';
|
|
764
778
|
if (columnValue) {
|
|
765
779
|
if (typeof columnValue === 'object') {
|
|
766
780
|
columnValue = columnValue[column.field];
|
|
767
781
|
}
|
|
768
782
|
if (!column.hide && (column?.searchable === undefined || column?.searchable)) {
|
|
769
|
-
columnValue = getConvertValue(
|
|
783
|
+
columnValue = getConvertValue(column, columnValue).toString();
|
|
770
784
|
isShow = columnValue.toLowerCase().includes(searchWord.toString().toLowerCase());
|
|
771
785
|
if (isShow) {
|
|
772
786
|
break;
|
|
@@ -888,30 +902,25 @@ export const storeEvent = (params) => {
|
|
|
888
902
|
/**
|
|
889
903
|
* 전달된 데이터를 내부 store 및 속성에 저장한다.
|
|
890
904
|
*
|
|
891
|
-
* @param {array}
|
|
905
|
+
* @param {array} rows - row 데이터
|
|
892
906
|
* @param {boolean} isMakeIndex - 인덱스 생성 유무
|
|
893
907
|
*/
|
|
894
|
-
const setStore = (
|
|
895
|
-
const store = [];
|
|
896
|
-
let checked;
|
|
897
|
-
let selected = false;
|
|
908
|
+
const setStore = (rows, isMakeIndex = true) => {
|
|
898
909
|
if (isMakeIndex) {
|
|
910
|
+
const store = [];
|
|
899
911
|
let hasUnChecked = false;
|
|
900
|
-
|
|
901
|
-
checked = props.checked.includes(
|
|
912
|
+
rows.forEach((row, idx) => {
|
|
913
|
+
const checked = props.checked.includes(row);
|
|
914
|
+
let selected = false;
|
|
915
|
+
if (selectInfo.useSelect) {
|
|
916
|
+
selected = props.selected.includes(row);
|
|
917
|
+
}
|
|
902
918
|
if (!checked) {
|
|
903
919
|
hasUnChecked = true;
|
|
904
920
|
}
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
}
|
|
909
|
-
store.push([ix, checked, value[ix]]);
|
|
910
|
-
}
|
|
911
|
-
if (!selected) {
|
|
912
|
-
selectInfo.selectedRow = [];
|
|
913
|
-
}
|
|
914
|
-
checkInfo.isHeaderChecked = value.length > 0 ? !hasUnChecked : false;
|
|
921
|
+
store.push([idx, checked, row, selected]);
|
|
922
|
+
});
|
|
923
|
+
checkInfo.isHeaderChecked = rows.length > 0 ? !hasUnChecked : false;
|
|
915
924
|
stores.originStore = store;
|
|
916
925
|
}
|
|
917
926
|
if (filterInfo.isFiltering) {
|