UNPKG

ax5ui-grid

Version:

A grid plugin that works with Bootstrap & jQuery

357 lines (334 loc) 16 kB
<!DOCTYPE html> <!-- ~ Copyright (c) 2016. tom@axisj.com ~ - github.com/thomasjang ~ - www.axisj.com --> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, user-scalable=no"> <title>GRID</title> <link rel="stylesheet" type="text/css" href="bower_components/bootstrap/dist/css/bootstrap.min.css"/> <link rel="stylesheet" type="text/css" href="../../ax5ui-mask/dist/ax5mask.css"/> <link rel="stylesheet" type="text/css" href="../../ax5ui-calendar/dist/ax5calendar.css"/> <link rel="stylesheet" type="text/css" href="../../ax5ui-picker/dist/ax5picker.css"/> <link rel="stylesheet" type="text/css" href="../../ax5ui-select/dist/ax5select.css"/> <link rel="stylesheet" href="bower_components/font-awesome/css/font-awesome.min.css"> <link rel="stylesheet" type="text/css" href="../dist/ax5grid.css"/> <script src="bower_components/jquery/dist/jquery.min.js"></script> <script src="../../ax5core/dist/ax5core.js"></script> <script src="../../ax5ui-formatter/dist/ax5formatter.min.js"></script> <script src="../../ax5ui-calendar/dist/ax5calendar.min.js"></script> <script src="../../ax5ui-picker/dist/ax5picker.min.js"></script> <script src="../../ax5ui-select/dist/ax5select.js"></script> <script src="../dist/ax5grid.js"></script> </head> <body style="padding: 20px;"> <div style="padding: 10px;"> <button class="btn btn-default" data-set-height="300">높이조절(300px)</button> <button class="btn btn-default" data-set-height="400">높이조절(400px)</button> <button class="btn btn-default" data-set-height="800">높이조절(800px)</button> <button class="btn btn-default" data-set-height="100%">높이조절(100%)</button> </div> <div style="padding: 10px;"> <button class="btn btn-default" data-grid-control="row-add">row add</button> <button class="btn btn-default" data-grid-control="row-remove">row remove</button> <button class="btn btn-default" data-grid-control="selected-row-remove">selected row remove</button> <button class="btn btn-default" data-grid-control="row-delete">row delete</button> <button class="btn btn-default" data-grid-control="row-update">row update</button> <button class="btn btn-default" data-grid-control="cell-update">cell update</button> </div> <div style="padding: 10px;"> <button class="btn btn-default" data-grid-control="column-add">column add</button> <button class="btn btn-default" data-grid-control="column-remove">column remove</button> <button class="btn btn-default" data-grid-control="column-update">column update</button> </div> <div style="padding: 10px;"> <button class="btn btn-default" data-grid-control="select-row-toggle">toggle select list[0]</button> <button class="btn btn-default" data-grid-control="select-row-true">select list[0]</button> <button class="btn btn-default" data-grid-control="select-row-false">deselect list[0]</button> <button class="btn btn-default" data-grid-control="select-all-toggle">toggle selectAll</button> <button class="btn btn-default" data-grid-control="select-all-true">select selectAll</button> <button class="btn btn-default" data-grid-control="select-all-false">deselect selectAll</button> </div> <div style="padding: 5px;"> <button class="btn btn-default" data-grid-control="excel-export">Excel Export</button> <button class="btn btn-default" data-grid-control="excel-string">get Excel String</button> </div> <div style="height: 10px;"></div> <div style="border:1px solid #0a68b4;position: relative;height:400px;" id="grid-parent"> <div data-ax5grid="first-grid" data-ax5grid-config='{name:"my first grid"}' style="height: 100%;"></div> </div> <TEXTAREA ID="holdtext" STYLE="position:absolute;top:-1000px;"></TEXTAREA> <script> var firstGrid = new ax5.ui.grid(); ax5.def.leftArrow = "<<"; ax5.def.rightArrow = ">>"; ax5.ui.grid.formatter["myType"] = function () { return "myType" + (this.value || ""); }; var sampleData = [ {a: "A", b: "A<A", price: 1000, amount: null, saleDt: "2016-08-29", customer: "장기영", saleType: "A", isChecked: "Y", __disable_selection__: true}, {a: "A", price: 1100, amount: 11, saleDt: "2016-08-28", customer: "장서우", saleType: "B", isChecked: "N"}, {a: "A", b: "C01", price: 1200, amount: 10, saleDt: "2016-08-27", customer: "이영희", saleType: "A", isChecked: "N"}, {a: "A", b: "A01", price: 1300, amount: 8, saleDt: "2016-08-25", customer: "황인서", saleType: "C", isChecked: "Y"}, {a: "A", b: "B01", price: 1400, amount: 5, saleDt: "2016-08-29", customer: "황세진", saleType: "D", isChecked: "Y"}, {a: "A", b: "A01", price: 1500, amount: 2, saleDt: "2016-08-26", customer: "이서연", saleType: "A", isChecked: "N"} ]; /// var gridView = { initView: function () { firstGrid.setConfig({ target: $('[data-ax5grid="first-grid"]'), frozenColumnIndex: 2, frozenRowIndex: 0, showLineNumber: true, showRowSelector: true, multipleSelect: false, lineNumberColumnWidth: 40, rowSelectorColumnWidth: 28, virtualScrollY: true, virtualScrollX: false, sortable: true, // 모든 컬럼에 정렬 아이콘 표시 multiSort: false, // 다중 정렬 여부 remoteSort: false, // remoteSort에 함수를 sortable 컬럼이 클릭되었을때 실행 setColumnSort를 직접 구현. (remoteSort를 사용하면 헤더에 정렬 상태만 표시 하고 데이터 정렬은 처리 안함) header: { align: "center", columnHeight: 28 }, body: { align: "center", columnHeight: 28, /* trStyleClass: function () { //console.log('trStyleClass'); return (this.item.a !== "A") ? "test" : ""; }, */ onClick: function () { console.log(this); // this.self.select(this.dindex); }, onDataChanged: function () { //console.log('href'); //this.self.repaint(); } }, page: { navigationItemCount: 9, height: 30, display: true, firstIcon: '<i class="fa fa-step-backward" aria-hidden="true"></i>', prevIcon: '<i class="fa fa-caret-left" aria-hidden="true"></i>', nextIcon: '<i class="fa fa-caret-right" aria-hidden="true"></i>', lastIcon: '<i class="fa fa-step-forward" aria-hidden="true"></i>', onChange: function () { gridView.setData(this.page.selectPage); } }, columns: [ { key: "a", label: "필드A", width: 80, styleClass: function () { return "ABC"; }, enableFilter: true, align: "center", formatter: function () { return this.item.a + '/' + this.item.amount; }, editor: { type: "text", disabled: function () { // item, value return true; }, attributes: { 'maxlength': 5, 'data-maxlength': 10 } } }, {key: "b", label: "필드B", align: "center", editor: {type: "text"}}, { key: undefined, label: "필드C", columns: [ {key: "price", label: "단가", align: "right", width: 60, editor: {type: "money", updateWith: ['cost']}}, { key: "amount", label: "수량", align: "right", width: 50, formatter: "money", editor: {type: "number", updateWith: ['cost', 'a', 'isChecked'], attributes: {maxlength: 4}} }, { key: "cost", label: "금액", align: "right", width: 80, formatter: function () { return ax5.util.number(this.item.price * this.item.amount, {"money": true}); } } ] }, { key: "saleDt", label: "판매일자", align: "center", editor: { type: "date", config: {} } }, { key: "isChecked", label: "체크박스", width: 50, sortable: false, editor: { type: "checkbox", config: {height: 17, trueValue: "Y", falseValue: "N"}, disabled: function () { // item, value return this.item.amount < 3; } } }, { key: "saleType", label: "판매타입", width: 50, editor: { type: "select", config: { columnKeys: { optionValue: "CD", optionText: "NM" }, options: [ {CD: "A", NM: "A: String"}, {CD: "B", NM: "B: Number"}, {CD: "C", NM: "C: substr"}, {CD: "A", NM: "A: String"}, {CD: "B", NM: "B: Number"}, {CD: "C", NM: "C: substr"}, {CD: "A", NM: "A: String"}, {CD: "B", NM: "B: Number"}, {CD: "C", NM: "C: substr"}, {CD: "A", NM: "A: String"}, {CD: "B", NM: "B: Number"}, {CD: "C", NM: "C: substr"}, {CD: "D", NM: "D: substring"} ] } } }, { key: "saleDt", label: "판매일자", align: "center", editor: { type: "date", config: { content: { config: { mode: "year", selectMode: "year" } } } } }, { key: "customer", label: "고객명", editor: {type: "text"} }, { key: "desc", label: "상세설명", align: "left", width: 200, editor: {type: "textarea"} } ], footSum: [ [ {label: "전체 합계", colspan: 6, align: "center"}, {key: "price", collector: "avg", formatter: "money", align: "right"}, {key: "amount", collector: "sum", formatter: "money", align: "right"}, { key: "cost", collector: function () { var value = 0; this.list.forEach(function (n) { if (!n.__isGrouping) value += (n.price * n.amount); }); return ax5.util.number(value, {"money": 1}); }, align: "right" }, ]] }); return this; }, setData: function (_pageNo) { /* firstGrid.setData({ list: sampleData, page: { currentPage: _pageNo || 0, pageSize: 50, totalElements: 500, totalPages: 100 } }); */ firstGrid.setData(sampleData); return this; } }; $(document.body).ready(function () { gridView .initView() .setData(); $('[data-set-height]').click(function () { var height = this.getAttribute("data-set-height"); if (height == "100%") { $("#grid-parent").css({height: 500}); } else { $("#grid-parent").css({height: "auto"}); } firstGrid.setHeight(height); }); $('[data-grid-control]').click(function () { switch (this.getAttribute("data-grid-control")) { case "row-add": firstGrid.addRow($.extend({}, sampleData[(Math.floor(Math.random() * sampleData.length))], true), "last", {focus: "END"}); break; case "row-remove": firstGrid.removeRow(); break; case "selected-row-remove": firstGrid.removeRow("selected"); break; case "row-delete": firstGrid.deleteRow("selected"); break; case "row-update": firstGrid.updateRow($.extend({}, firstGrid.list[1], {price: 100, amount: 100, cost: 10000}), 1); break; case "cell-update": firstGrid.setValue(0, "price", 100); break; case "column-add": firstGrid.addColumn({key: "b", label: "필드B"}); break; case "column-remove": firstGrid.removeColumn(); break; case "column-update": firstGrid.updateColumn({key: "b", label: "필드B"}, 0); break; case "select-row-toggle": firstGrid.select(0); break; case "select-row-true": firstGrid.select(0, {selected: true}); break; case "select-row-false": firstGrid.select(0, {selected: false}); break; case "select-all-toggle": firstGrid.selectAll(); break; case "select-all-true": firstGrid.selectAll({selected: true}); break; case "select-all-false": firstGrid.selectAll({selected: false}); break; case "excel-export": firstGrid.exportExcel("grid-to-excel.xls"); // ie 풀테스트 break; case "excel-string": $("body").append(firstGrid.exportExcel()); break; } }); }); </script> </body> </html>