FishEye: Tag 351b91e6e40146548dd1e1781e51fba4c2273bcb refers to a dead (removed) revision in file `arms/html/fullDataSheet/content-container.html'. FishEye: No comparison available. Pass `N' to diff? FishEye: Tag 351b91e6e40146548dd1e1781e51fba4c2273bcb refers to a dead (removed) revision in file `arms/html/fullDataSheet/content-header.html'. FishEye: No comparison available. Pass `N' to diff? Index: arms/html/reportFullData/content-container.html =================================================================== diff -u --- arms/html/reportFullData/content-container.html (revision 0) +++ arms/html/reportFullData/content-container.html (revision 351b91e6e40146548dd1e1781e51fba4c2273bcb) @@ -0,0 +1,704 @@ +
+
+
+
+

+ + + Full Data Sheet + +

+ +
+
+
+
+ 선택한 제품(서비스)와 버전을 바탕으로 날짜 필터링을 지원합니다. +
+ +
+
+
+
+
+
+
+

+ + + 제품(서비스) 선택 + +

+
+
+
+
+
+ 1. Product + service + 를 선택해 주세요 +
+
+
+ +
+
+
+
+
+
+
+

+ + + 버전 선택 + +

+
+
+
+
+
+ 2. Product + service + 의 버전을 선택해 주세요 +
+
+
+ +
+
+
+
+
+
+
+
+
+
+

+ + + 기간 설정 + +

+
+
+
+
+
+ 3. 선택한 버전의 기간 중 최초 시작일, 최후 종료일입니다. + 원하는 기간으로도 설정하실 수 있습니다. +
+
+
+
+ + + + +
+
~
+
+ + + + +
+
+
+
+
+
+
+
+
+
+
+
+

+ + + 작업자 목록 + +

+ +
+
+
+
+ 4. 작업자 선택 +
+ +
+
+
+
+ +
+
+
+
+
+

+ + + 작업 내용 + +

+ +
+
+
+
+ 5. 선택한 작업자(들)의 작업내용(요구사항 이슈 및 하위이슈) 목록입니다. +
+ +
+
+
+
+ +
+
+
List View (Excel)
+
+
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +

    + + + Point Of View + +

    + +
    +
    +
    +
    + 데이터의 관점 선택 +
    + +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    +

    + + + D - 6 +   + YHS-1 + +

    + +
    +
    +
    +
    차트
    +
    +
    차트 관련 정보(버전 등)
    +
    24.08.01 ~ 24.08.31
    +
    +
    +
    +
    총 이슈 개수 5
    +
    +
    +
    +
    +
    +
    +
    +
      +
    •   YHS-2
    • +
    •   YHS-3
    • +
    •   YHS-4
    • +
    •   YHS-5
    • +
    •   YHS-6
    • +
    +
    +
    +
    +
    +
    +
    +

    + + + D - 3 +   + YHS-1 + +

    + +
    +
    +
    +
    차트
    +
    +
    차트 관련 정보(버전 등)
    +
    24.08.01 ~ 24.08.31
    +
    +
    +
    +
    총 이슈 개수 5
    +
    +
    +
    +
    +
    +
    +
    +
      +
    •   YHS-2
    • +
    •   YHS-3
    • +
    •   YHS-4
    • +
    •   YHS-5
    • +
    •   YHS-6
    • +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + Index: arms/html/reportFullData/content-header.html =================================================================== diff -u --- arms/html/reportFullData/content-header.html (revision 0) +++ arms/html/reportFullData/content-header.html (revision 351b91e6e40146548dd1e1781e51fba4c2273bcb) @@ -0,0 +1,13 @@ +

    + Report + Full Data Report + +

    Index: arms/html/reportSWOT/content-container.html =================================================================== diff -u --- arms/html/reportSWOT/content-container.html (revision 0) +++ arms/html/reportSWOT/content-container.html (revision 351b91e6e40146548dd1e1781e51fba4c2273bcb) @@ -0,0 +1,147 @@ +
    +
    +
    +

    + + + Feed + + 412 +

    + +
    +
    +
    +
    + blockquote +
    + +
    +
    +
    +
    + + + + + +
    + +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + \ No newline at end of file Index: arms/html/reportSWOT/content-header.html =================================================================== diff -u --- arms/html/reportSWOT/content-header.html (revision 0) +++ arms/html/reportSWOT/content-header.html (revision 351b91e6e40146548dd1e1781e51fba4c2273bcb) @@ -0,0 +1,13 @@ +

    + Report + Report - SWOT + +

    FishEye: Tag 351b91e6e40146548dd1e1781e51fba4c2273bcb refers to a dead (removed) revision in file `arms/html/swotSheet/content-container.html'. FishEye: No comparison available. Pass `N' to diff? FishEye: Tag 351b91e6e40146548dd1e1781e51fba4c2273bcb refers to a dead (removed) revision in file `arms/html/swotSheet/content-header.html'. FishEye: No comparison available. Pass `N' to diff? Index: arms/html/template/page-sidebar.html =================================================================== diff -u -re7fefeaf0dca12dd51ff01900081a51f1997ba8a -r351b91e6e40146548dd1e1781e51fba4c2273bcb --- arms/html/template/page-sidebar.html (.../page-sidebar.html) (revision e7fefeaf0dca12dd51ff01900081a51f1997ba8a) +++ arms/html/template/page-sidebar.html (.../page-sidebar.html) (revision 351b91e6e40146548dd1e1781e51fba4c2273bcb) @@ -156,11 +156,11 @@ FishEye: Tag 351b91e6e40146548dd1e1781e51fba4c2273bcb refers to a dead (removed) revision in file `arms/js/fullDataSheet.js'. FishEye: No comparison available. Pass `N' to diff? Index: arms/js/reportFullData.js =================================================================== diff -u --- arms/js/reportFullData.js (revision 0) +++ arms/js/reportFullData.js (revision 351b91e6e40146548dd1e1781e51fba4c2273bcb) @@ -0,0 +1,600 @@ +var selectedPdServiceId; // 제품(서비스) 아이디 +var selectedVersionId; // 선택된 버전 아이디 + +var pdServiceListData; +var versionListData; + +var resourceDataTable; // +var selectedIndex; // 데이터테이블 선택한 인덱스 +var selectedPage; // 데이터테이블 선택한 인덱스 + +var excelMock;// +//////////////////////////////////////////////////////////////////////////////////////// +//Document Ready +//////////////////////////////////////////////////////////////////////////////////////// +function execDocReady() { + + var pluginGroups = [ + [ + "../reference/light-blue/lib/vendor/jquery.ui.widget.js", + "../reference/light-blue/lib/vendor/http_blueimp.github.io_JavaScript-Templates_js_tmpl.js", + "../reference/light-blue/lib/vendor/http_blueimp.github.io_JavaScript-Load-Image_js_load-image.js", + "../reference/light-blue/lib/vendor/http_blueimp.github.io_JavaScript-Canvas-to-Blob_js_canvas-to-blob.js", + "../reference/light-blue/lib/jquery.iframe-transport.js", + "../reference/light-blue/lib/jquery.fileupload.js", + "../reference/light-blue/lib/jquery.fileupload-fp.js", + "../reference/light-blue/lib/jquery.fileupload-ui.js", + ], + [ + //날짜 검색 + "../reference/light-blue/lib/bootstrap-datepicker.js", + "../reference/jquery-plugins/datetimepicker-2.5.20/build/jquery.datetimepicker.min.css", + "../reference/jquery-plugins/datetimepicker-2.5.20/build/jquery.datetimepicker.full.min.js", + // + "../reference/lightblue4/docs/lib/widgster/widgster.js", + "../reference/lightblue4/docs/lib/slimScroll/jquery.slimscroll.min.js" + ], + + [ + "../reference/jquery-plugins/select2-4.0.2/dist/css/select2_lightblue4.css", + "../reference/jquery-plugins/lou-multi-select-0.9.12/css/multiselect-lightblue4.css", + "../reference/jquery-plugins/multiple-select-1.5.2/dist/multiple-select-bluelight.css", + "../reference/jquery-plugins/select2-4.0.2/dist/js/select2.min.js", + "../reference/jquery-plugins/lou-multi-select-0.9.12/js/jquery.quicksearch.js", + "../reference/jquery-plugins/lou-multi-select-0.9.12/js/jquery.multi-select.js", + "../reference/jquery-plugins/multiple-select-1.5.2/dist/multiple-select.min.js" + ], + [ + // lightblue4 + "../reference/jquery-plugins/dataTables-1.10.16/media/css/jquery.dataTables_lightblue4.css", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/css/responsive.dataTables_lightblue4.css", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/css/select.dataTables_lightblue4.css", + "../reference/jquery-plugins/dataTables-1.10.16/media/js/jquery.dataTables.min.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/js/dataTables.responsive.min.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/js/dataTables.select.min.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/RowGroup/js/dataTables.rowsGroup.min.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/dataTables.buttons.min.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/buttons.html5.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/buttons.print.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/jszip.min.js" + ], + [ + "../reference/jquery-plugins/jspreadsheet-ce-4.13.1/dist/jsuites.js", + "../reference/jquery-plugins/jspreadsheet-ce-4.13.1/dist/index.js", + "../reference/jquery-plugins/jspreadsheet-ce-4.13.1/dist/jsuites.css", + "../reference/jquery-plugins/jspreadsheet-ce-4.13.1/dist/jspreadsheet.css", + "../reference/jquery-plugins/jspreadsheet-ce-4.13.1/dist/jspreadsheet.datatables.css", + "../reference/jquery-plugins/jspreadsheet-ce-4.13.1/dist/jspreadsheet.theme.css", + "./js/common/jspreadsheet/spreadsheet.js", + "./css/jspreadsheet/custom_icon.css", + "./css/jspreadsheet/custom_sheet.css" + ], + [ + //chart Colors + "./js/common/colorPalette.js", + // Apache Echarts + "../reference/jquery-plugins/echarts-5.4.3/dist/echarts.min.js", + "./js/common/chart/eCharts/donutChart.js", + // c3 차트(도넛) + "../reference/jquery-plugins/d3-5.16.0/d3.min.js", + "../reference/jquery-plugins/c3-0.7.20/c3.min.css", + "../reference/jquery-plugins/c3-0.7.20/c3.js", + "./js/common/chart/d3/donutChart.js" + ] + // 추가적인 플러그인 그룹들을 이곳에 추가하면 됩니다. + ]; + + loadPluginGroupsParallelAndSequential(pluginGroups) + .then(function() { + + console.log('모든 플러그인 로드 완료'); + + //사이드 메뉴 처리 + $('.widget').widgster(); + setSideMenu("sidebar_menu_report", "sidebar_menu_full_data_sheet"); + + + //제품(서비스) 셀렉트 박스 이니시에이터 + makePdServiceSelectBox(); + //버전 멀티 셀렉트 박스 이니시에이터 + makeVersionMultiSelectBox(); + //날짜 + dateTimePicker(); + + let mockAssignees = [{ + "assignee_accountId": "616fc9fa327da40069b4ed4f", + "assignee_emailAddress": "JY.J@abcde.com", + "assignee_displayName": "JJY" + }, + { + "assignee_accountId": "712020:ecc44245-6be8-4962-9a66-888bdb4f8e3a", + "assignee_emailAddress": "HS.Y@abcde.com", + "assignee_displayName": "YHS" + }, + { + "assignee_accountId": "616f6f04860f78006bbafe38", + "assignee_emailAddress": "SH.H@abcde.com", + "assignee_displayName": "HSH" + }, + { + "assignee_accountId": "63b2a039159df2c252e826e9", + "assignee_emailAddress": "DM.L@abcde.com", + "assignee_displayName": "LDM" + }, + { + "assignee_accountId": "621ee5a449c90000701efe06", + "assignee_emailAddress": "MG.L@abcde.com", + "assignee_displayName": "LMG" + }]; + + drawResourceTable(mockAssignees); + + // 높이 조정 + $('.top-menu-div').matchHeight({ + target: $('.top-menu-div-default') + }); + + let mock = { + "total": 5, + "folder": 4, + "in-progress": 1, + "open": 2, + "resolved": 1, + "closed": 1 + }; + let mock1 = { + "total": 5, + "in-progress": 2, + "open": 1, + "resolved": 1, + "closed": 1 + }; + // 스크립트 실행 로직을 이곳에 추가합니다. + for (let i = 0; i < 2; i++) { + let targetId = "donut" + i; + let chartData; + if (i===0) { chartData = mock;} + if (i===1) { chartData = mock1;} + //drawDonutChart_report(targetId, mock, cardWidth); + donutChart_fullDataSheet(targetId, chartData); + } + excelMock = [ + { + "제품(서비스) 키": "25", + "제품(서비스) 명": "ALM RMS", + "버전 키": "77", + "버전 명": "24년8월", + "작업자 명": "YHS", + "C_REQ_LINK": "3", + "요구사항 구분": "요구사항", + "ALM 이슈 제목": "요구사항 이슈입니다. 해결해주세요", + "ALM 이슈 상태": "진행 중(in-progress)", + "ALM 이슈 우선순위": "높음", + "ALM 이슈 생성일": "2024/08/01", + "ALM 이슈 수정일": "2024/08/05", + "ALM 이슈 해결일": "", + "ALM 이슈 삭제여부": "" + }, + { + "제품(서비스) 키": "25", + "제품(서비스) 명": "ALM RMS", + "버전 키": "76", + "버전 명": "24년7월", + "작업자 명": "HSH", + "C_REQ_LINK": "6", + "요구사항 구분": "요구사항", + "ALM 이슈 제목": "요구사항 이슈입니다. 해결해주세요", + "ALM 이슈 상태": "해결됨(resolved)", + "ALM 이슈 우선순위": "높음", + "ALM 이슈 생성일": "2024/07/21", + "ALM 이슈 수정일": "2024/08/01", + "ALM 이슈 해결일": "2024/08/05", + "ALM 이슈 삭제여부": "" + } + ]; + + + }) + .catch(function(e) { + console.error('플러그인 로드 중 오류 발생'); + console.error(e); + }); + +}//.execDocReady + +/////////////////////// +//제품 서비스 셀렉트 박스 +////////////////////// +function makePdServiceSelectBox() { + //제품 서비스 셀렉트 박스 이니시에이터 + $(".chzn-select").each(function() { + $(this).select2($(this).data()); + }); + + //제품 서비스 셀렉트 박스 데이터 바인딩 + $.ajax({ + url: "/auth-user/api/arms/pdService/getPdServiceMonitor.do", + type: "GET", + contentType: "application/json;charset=UTF-8", + dataType: "json", + progress: true, + statusCode: { + 200: function(data) { + ////////////////////////////////////////////////////////// + pdServiceListData = []; + for (var k in data.response) { + var obj = data.response[k]; + pdServiceListData.push({ "pdServiceId": obj.c_id, "pdServiceName": obj.c_title }); + var newOption = new Option(obj.c_title, obj.c_id, false, false); + $("#selected_pdService").append(newOption).trigger("change"); + } + ////////////////////////////////////////////////////////// + console.log("[fullDataSheet :: makePdServiceSelectBox] :: pdServiceListData => "); + console.table(pdServiceListData); + } + } + }); + + $("#selected_pdService").on("select2:open", function() { + //슬림스크롤 + makeSlimScroll(".select2-results__options"); + }); + + // --- select2 ( 제품(서비스) 검색 및 선택 ) 이벤트 --- // + $("#selected_pdService").on("select2:select", function(e) { + selectedPdServiceId = $("#selected_pdService").val(); + //refreshDetailChart(); 변수값_초기화(); + // 제품( 서비스 ) 선택했으니까 자동으로 버전을 선택할 수 있게 유도 + // 디폴트는 base version 을 선택하게 하고 ( select all ) + //~> 이벤트 연계 함수 :: Version 표시 jsTree 빌드 + bind_VersionData_By_PdService(); + drawExcel("spreadsheet", excelMock); + }); +} // end makePdServiceSelectBox() + +function bind_VersionData_By_PdService() { + $(".multiple-select option").remove(); + $.ajax({ + url: "/auth-user/api/arms/pdService/getVersionList.do?c_id=" + $("#selected_pdService").val(), + type: "GET", + dataType: "json", + progress: true, + statusCode: { + 200: function(data) { + ////////////////////////////////////////////////////////// + var pdServiceVersionIds = []; + versionListData = []; + for (var k in data.response) { + var obj = data.response[k]; + pdServiceVersionIds.push(obj.c_id); + versionListData.push({"c_id" : obj.c_id, "c_title" : obj.c_title, + "start_date" : obj.c_pds_version_start_date, + "end_date" : obj.c_pds_version_end_date}); + var newOption = new Option(obj.c_title, obj.c_id, true, false); + $(".multiple-select").append(newOption); + } + var versionTag = $(".multiple-select").val(); + selectedVersionId = pdServiceVersionIds.join(","); + + // 시작일 종료일 세팅(datetimepicker) + setEdgeDateRange(versionListData); + + if (data.length > 0) { + console.log("display 재설정."); + } + + $(".multiple-select").multipleSelect("refresh"); + } + } + }); +} + +//////////////////////////////////////// +//버전 멀티 셀렉트 박스 +//////////////////////////////////////// +function makeVersionMultiSelectBox() { + //버전 선택시 셀렉트 박스 이니시에이터 + $(".multiple-select").multipleSelect({ + filter: true, + // selectBox 닫혔을 때 + onClose: function() { + console.log("onOpen event fire!\n"); + + var checked = $("#checkbox1").is(":checked"); + var endPointUrl = ""; + var versionTag = $(".multiple-select").val(); + console.log("[ fullDataSheet :: makeVersionMultiSelectBox ] :: versionTag"); + console.log(versionTag); + selectedVersionId = versionTag.join(","); + + if (versionTag === null || versionTag == "") { + alert("버전이 선택되지 않았습니다."); + return; + } + + let filteredVersionData = versionListData.filter(item => versionTag.includes(item.c_id.toString())); + // 시작일 종료일 세팅(datetimepicker) + setEdgeDateRange(filteredVersionData); + + $(".ms-parent").css("z-index", 1000); + }, + // selectBox 열렸을 때 + onOpen: function() { + $(".ms-parent").css("z-index", 9999); + } + }); +} + +//////////////////////////////////////// +// 기간 설정 세팅 +//////////////////////////////////////// +function dateTimePicker() { + $('#date_timepicker_start').datetimepicker({ + format: 'Y-m-d', // 날짜 및 시간 형식 지정 + formatDate: 'Y/m/d', + timepicker: false, + theme: 'dark', + lang: "kr", + onSelectTime: function(current_time, $input) { + $('#date_timepicker_end').datetimepicker('setOptions', { minDate: current_time }); + }, + onShow: function(ct) { + this.setOptions({ + maxDate: $('#date_timepicker_end').val() ? $('#date_timepicker_end').val() : false + }); + } + }); + $('#date_timepicker_end').datetimepicker({ + format: 'Y-m-d', // 날짜 및 시간 형식 지정 + formatDate: 'Y/m/d', + timepicker: false, + theme: 'dark', + lang: "kr", + onSelectTime: function(current_time, $input) { + $('#date_timepicker_start').datetimepicker('setOptions', { maxDate: current_time }); + }, + onShow: function(ct) { + this.setOptions({ + minDate: $('#date_timepicker_start').val() ? $('#date_timepicker_start').val() : false + }); + } + }); +} + + +//////////////////////////////////////// +// 선택한 버전 - min,max 날짜 세팅 +//////////////////////////////////////// +function setEdgeDateRange(versionData) { + + if (!versionData || Object.keys(versionData).length === 0) { + console.log("[ fullDataSheet :: setEdgeDateRange ] :: versionData 가 없습니다."); + return false; + } + + let minMaxDate = versionData.reduce((acc, curr) => { + const startDate = new Date(curr.start_date); + const endDate = new Date(curr.end_date); + + if (!acc.min || startDate < acc.min) { + acc.min = startDate; + } + + if (!acc.max || endDate > acc.max) { + acc.max = endDate; + } + + return acc; + }, { min: null, max: null }); + console.log("[ fullDataSheet :: setEdgeDateRange ] :: " + + "minMaxDate.min => " + minMaxDate.min+ ", minMaxDate.max => " +minMaxDate.max); + + $('#date_timepicker_start').datetimepicker('setOptions', { value: minMaxDate.min }); + $('#date_timepicker_end').datetimepicker('setOptions', { value: minMaxDate.max }); +} + +//////////////////////////////////////// +// resource 목록 정보. +//////////////////////////////////////// +function drawResourceTable(tableData) { + var columnList = [ + { + name: "assignee_displayName", + title: "작업자 명", + data: "assignee_displayName", + className: "dt-body-center", + visible: true, + render: function (data, type, row, meta) { + if (type === "display") { + return '"; + } + return data; + } + }, + { + name: "assignee_emailAddress", + title: "작업자 메일", + data: "assignee_emailAddress", + className: "dt-body-center", + visible: true, + render: function (data, type, row, meta) { + if (type === "display") { + return '"; + } + return data; + } + } + ]; + var rowsGroupList = []; + var jquerySelector = "#resource_table"; + var ajaxUrl = ""; + var jsonRoot = ""; + var buttonList = []; + var selectList = {}; + var isServerSide = false; + var isAjax = false; + var columnDefList = []; + var orderList = [[0, "asc"]]; + // console.log(tableData); + resourceDataTable = dataTable_build( + jquerySelector, + ajaxUrl, + jsonRoot, + columnList, + rowsGroupList, + columnDefList, + selectList, + orderList, + buttonList, + isServerSide, + null, + tableData, + isAjax + ); + + // $("#reqstatustable").on('page.dt', function() { + // scrollPos = $(window).scrollTop(); + // $(window).scrollTop(scrollPos); + // }); + +} + +// -------------------- 데이터 테이블을 만드는 템플릿으로 쓰기에 적당하게 리팩토링 함. ------------------ // + +// 데이터 테이블 구성 이후 꼭 구현해야 할 메소드 : 열 클릭시 이벤트 +function dataTableClick(tempDataTable, selectedData) { + console.log(selectedData); +} + +// 데이터 테이블 데이터 렌더링 이후 콜백 함수. +function dataTableCallBack(settings, json) { + console.log("check"); +} + +function dataTableDrawCallback(tableInfo) { +// resourceDataTable.columns.adjust(); + console.log(tableInfo); +} + +///////////////////////////////////////////////////// +// 엑셀 그리기 +///////////////////////////////////////////////////// +function drawExcel(targetId, data) { + console.log("fullDataSheet :: drawExcel"); + console.log(data); + let $targetId = "#" + targetId; + + if($($targetId)[0].jexcel) { + console.log($($targetId)[0].jexcel); + $($targetId)[0].jexcel.destroy(); + } + console.log("width=> " + $($targetId).width()); + var excelWidth=$($targetId).width() - 50; + + var columnList = [ + { readOnly: true, type: "text", title: "제품(서비스) 키", wRatio: 0.1}, //0 + { readOnly: true, type: "text", title: "제품(서비스) 명", wRatio: 0.1}, + { readOnly: true, type: "text", title: "버전 키", wRatio: 0.05}, + { readOnly: true, type: "text", title: "버전 명", wRatio: 0.1}, + { readOnly: true, type: "text", title: "작업자", wRatio: 0.05}, //4 + { readOnly: true, type: "text", title: "C_REQ_LINK", wRatio: 0.05}, + { readOnly: true, type: "text", title: "요구사항 구분", wRatio: 0.1}, // 요구사항 이슈, 연결이슈, 하위이슈 + { readOnly: true, type: "text", title: "ALM 이슈 제목", wRatio: 0.2}, + { readOnly: true, type: "text", title: "ALM 이슈 상태", wRatio: 0.1}, + { readOnly: true, type: "text", title: "ALM 이슈 우선순위", wRatio: 0.1}, //9 + { readOnly: true, type: "calendar", title: "ALM 이슈 생성일", wRatio: 0.1}, + { readOnly: true, type: "calendar", title: "ALM 이슈 수정일", wRatio: 0.1}, + { readOnly: true, type: "calendar", title: "ALM 이슈 해결일", wRatio: 0.1}, + { readOnly: true, type: "text", title: "ALM 이슈 삭제여부", wRatio: 0.1} + ]; + + SpreadSheetFunctions.setColumns(columnList); + SpreadSheetFunctions.setColumnWidth(excelWidth); + + var customOptions = { + pagination:10, + contextMenu: [], + updateTable: function(instace, cell, col, row, val, id) { + cell.style.whiteSpace = "normal"; + if(col === 0 || col === 2 || col ===5) { + cell.style.textAlign = "right"; + cell.style.color = "#a4c6ff"; + } else if (col === 1 || col === 4 || col === 7) { + cell.style.textAlign = "left"; + } + } + }; + + SpreadSheetFunctions.setExcelData(data); + SpreadSheetFunctions.setOptions(customOptions); + + $($targetId).spreadsheet($.extend({}, { + columns: SpreadSheetFunctions.getColumns(), + data: SpreadSheetFunctions.getExcelData() + }, SpreadSheetFunctions.getOptions())); +} + +var SpreadSheetFunctions = ( function () { + let $tabFunction_data; // 엑셀 데이터 + let $tabFunction_columns;// 엑셀 컬럼 + let $tabFunction_options;// 엑셀 (커스텀)옵션 :: 정의 안할 경우 default + let $sheetInstance; + var setESheet = function(obj) { + $sheetInstance = obj; + }; + var setExcelData = function(data) { + $tabFunction_data = data; + }; + var getExcelData = function () { + return $tabFunction_data; + }; + var setColumns = function(columns) { + console.log("setColumns"); + $tabFunction_columns = columns; + }; + var getColumns = function () { + return $tabFunction_columns; + }; + var setOptions = function(options) { + $tabFunction_options = options; + }; + var getOptions = function() { + return $tabFunction_options ? $tabFunction_options : null; + }; + + var setColumnWidth = function (width) { + $tabFunction_columns = $tabFunction_columns.map(column => ({ + ...column, width: width * column.wRatio + })); + }; + + var resizeObserver = new ResizeObserver(function(entries) { + for (let entry of entries) { + var width = entry.contentRect.width; + var height = entry.contentRect.height; + handleResize(entry.target.id, width, height); + } + }); + + // 모달요소 크기 변화 관찰 + resizeObserver.observe(document.getElementById('spreadsheet')); + + function handleResize(id,width, height) { + if (id ==="spreadsheet" && height !== 0) { + console.log("handleResize") + // if (Object.keys(인력별_연봉정보).length > 0) { + // drawExcel("spreadsheet", 인력별_연봉정보); + // } else { + // console.log("인력별_연봉정보 데이터가 없습니다."); + // } + } + } + + return { + setExcelData, getExcelData, + setColumns, getColumns, + setOptions, getOptions, + setColumnWidth + }; +})(); \ No newline at end of file Index: arms/js/reportSWOT.js =================================================================== diff -u --- arms/js/reportSWOT.js (revision 0) +++ arms/js/reportSWOT.js (revision 351b91e6e40146548dd1e1781e51fba4c2273bcb) @@ -0,0 +1,412 @@ +//////////////////////////////////////////////////////////////////////////////////////// +//Document Ready +//////////////////////////////////////////////////////////////////////////////////////// +function execDocReady() { + + var pluginGroups = [ + [ "../reference/light-blue/lib/vendor/jquery.ui.widget.js", + "../reference/light-blue/lib/vendor/http_blueimp.github.io_JavaScript-Templates_js_tmpl.js", + "../reference/light-blue/lib/vendor/http_blueimp.github.io_JavaScript-Load-Image_js_load-image.js", + "../reference/light-blue/lib/vendor/http_blueimp.github.io_JavaScript-Canvas-to-Blob_js_canvas-to-blob.js", + "../reference/light-blue/lib/jquery.iframe-transport.js", + "../reference/light-blue/lib/jquery.fileupload.js", + "../reference/light-blue/lib/jquery.fileupload-fp.js", + "../reference/light-blue/lib/jquery.fileupload-ui.js"], + + [ "../reference/jquery-plugins/select2-4.0.2/dist/css/select2_lightblue4.css", + "../reference/jquery-plugins/lou-multi-select-0.9.12/css/multiselect-lightblue4.css", + "../reference/jquery-plugins/multiple-select-1.5.2/dist/multiple-select-bluelight.css", + "../reference/jquery-plugins/select2-4.0.2/dist/js/select2.min.js", + "../reference/jquery-plugins/lou-multi-select-0.9.12/js/jquery.quicksearch.js", + "../reference/jquery-plugins/lou-multi-select-0.9.12/js/jquery.multi-select.js", + "../reference/jquery-plugins/multiple-select-1.5.2/dist/multiple-select.min.js"], + + [ "../reference/jquery-plugins/datetimepicker-2.5.20/build/jquery.datetimepicker.min.css", + "../reference/light-blue/lib/bootstrap-datepicker.js", + "../reference/jquery-plugins/datetimepicker-2.5.20/build/jquery.datetimepicker.full.min.js", + "../reference/lightblue4/docs/lib/widgster/widgster.js", + //d3 변경 + "../reference/jquery-plugins/d3-5.16.0/d3.min.js", + "../reference/lightblue4/docs/lib/slimScroll/jquery.slimscroll.min.js"], + + ["../reference/jquery-plugins/dataTables-1.10.16/media/css/jquery.dataTables_lightblue4.css", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/css/responsive.dataTables_lightblue4.css", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/css/select.dataTables_lightblue4.css", + "../reference/jquery-plugins/dataTables-1.10.16/media/js/jquery.dataTables.min.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/js/dataTables.responsive.min.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/js/dataTables.select.min.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/RowGroup/js/dataTables.rowsGroup.min.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/dataTables.buttons.min.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/buttons.html5.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/buttons.print.js", + "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/jszip.min.js", + "../reference/jquery-plugins/swiper-11.1.4/swiper-bundle.min.js", + "../reference/jquery-plugins/swiper-11.1.4/swiper-bundle.min.css", + "./js/common/swiperHelper.js", + "./css/customSwiper.css" + ] + // 추가적인 플러그인 그룹들을 이곳에 추가하면 됩니다. + ]; + + loadPluginGroupsParallelAndSequential(pluginGroups) + .then(function() { + + console.log('모든 플러그인 로드 완료'); + + //사이드 메뉴 처리 + $('.widget').widgster(); + setSideMenu("sidebar_menu_product", "sidebar_menu_version_manage"); + + // 스크립트 실행 로직을 이곳에 추가합니다. + const svg = d3.select('#matrix'); + const width = +svg.attr('width') - 100; + const height = +svg.attr('height') - 100; + + const colors = [ + 'rgb(255, 77, 77)', // 긴급하고 중요한 일 + 'rgb(77, 255, 77)', // 긴급하지 않지만 중요한 일 + 'rgb(61, 61, 61)', // 긴급하지도 중요하지도 않은 일 + 'rgb(179, 115, 0)', // 긴급하지만 중요하지 않은 일 + ]; + + const MATRIX_X = 50; + const MATRIX_Y = 50; + + const priority = [ + { + x: MATRIX_X + width / 2, + y: MATRIX_Y, + color: colors[0], + text: '긴급하고 중요한 일', + index: 1, + }, + { + x: MATRIX_X + width / 2, + y: MATRIX_Y + height / 2, + color: colors[3], + text: '긴급하지만 중요하지 않은 일', + index: 2, + }, + { + x: MATRIX_X, + y: MATRIX_Y, + color: colors[1], + text: '긴급하지 않지만 중요한 일', + index: 3, + }, + { + x: MATRIX_X, + y: MATRIX_Y + height / 2, + color: colors[2], + text: '긴급하지도 중요하지도 않은 일', + index: 4, + }, + ]; + + // 매트릭스 그리기 + svg + .append('rect') + .attr('x', MATRIX_X) + .attr('y', MATRIX_Y) + .attr('width', 800) + .attr('height', 600) + .attr('rx', 8) + .attr('class', 'rectangle'); + + // 사각형 그리기 + priority.forEach((q) => { + svg + .append('rect') + .attr('x', q.x + 10) + .attr('y', q.y + 10) + .attr('width', 30) + .attr('height', 30) + .attr('rx', 8) + .attr('fill', q.color) + .attr('opacity', 0.4); + + svg + .append('text') + .attr('x', q.x + 21) + .attr('y', q.y + 30) + .attr('class', 'text') + .text(q.index); + + svg + .append('text') + .attr('x', q.x + 45) + .attr('y', q.y + 30) + .attr('class', 'text') + .text(q.text); + }); + + // 경계 그리기 + const BORDER_X = 25; + const BORDER_Y = 25; + const borders = [ + { x1: BORDER_X, y1: MATRIX_Y, x2: BORDER_X, y2: MATRIX_Y + height }, + { + x1: BORDER_X, + y1: MATRIX_Y, + x2: BORDER_X - 10, + y2: MATRIX_Y + 10, + }, + { + x1: MATRIX_X, + y1: MATRIX_Y + BORDER_Y + height, + x2: MATRIX_X + width, + y2: MATRIX_Y + BORDER_Y + height, + }, + { + x1: MATRIX_X + width, + y1: MATRIX_Y + BORDER_Y + height, + x2: MATRIX_X + width - 10, + y2: MATRIX_Y + BORDER_Y + height + 10, + }, + { + x1: MATRIX_X, + y1: MATRIX_Y + height / 2, + x2: MATRIX_X + width, + y2: MATRIX_Y + height / 2, + }, + { + x1: MATRIX_X + width / 2, + y1: MATRIX_Y, + x2: MATRIX_X + width / 2, + y2: height + 20, + }, + ]; + + borders.forEach((b) => { + svg + .append('line') + .attr('class', 'border') + .attr('x1', b.x1) + .attr('y1', b.y1) + .attr('x2', b.x2) + .attr('y2', b.y2); + }); + + // 축 레이블 추가 + svg + .append('text') + .attr('x', MATRIX_X + width / 2) + .attr('y', MATRIX_Y - 10 + height) + .attr('text-anchor', 'middle') + .attr('class', 'text') + .text('D-7'); + + svg + .append('text') + .attr('x', MATRIX_X + 15) + .attr('y', MATRIX_Y - 10 + height) + .attr('class', 'text') + .text('D-30'); + + svg + .append('text') + .attr('x', MATRIX_X - 15 + width) + .attr('y', MATRIX_Y - 10 + height) + .attr('class', 'text') + .attr('text-anchor', 'end') + .style('fill', colors[0]) + .text('D-day'); + + svg + .append('text') + .attr('x', MATRIX_X + width / 2 + width / 4) + .attr('y', MATRIX_Y * 2 + height - 5) + .attr('text-anchor', 'middle') + .attr('class', 'text') + .text('긴급함'); + + svg + .append('text') + .attr('x', MATRIX_X + width / 2 - width / 4) + .attr('y', MATRIX_Y * 2 + height - 5) + .attr('text-anchor', 'middle') + .attr('class', 'text') + .text('긴급하지 않음'); + + svg + .append('text') + .attr('x', -(MATRIX_X + height / 2 - height / 4)) + .attr('y', BORDER_Y - 10) + .attr('class', 'text') + .attr('text-anchor', 'middle') + .style('transform', 'rotate(-90deg)') + .text('중요함'); + + svg + .append('text') + .attr('x', -(MATRIX_X + height / 2 + height / 4)) + .attr('y', BORDER_Y - 10) + .attr('class', 'text') + .attr('text-anchor', 'middle') + .style('transform', 'rotate(-90deg)') + .text('중요하지 않음'); + + /** + * 1사분면 (긴급하고 중요한 일) + * - x축: MATRIX_X + width / 2 ~ MATRIX_X + width + * - y축: MATRIX_Y ~ MATRIX_Y + height / 2 + * 2사분면 (긴급하지 않지만 중요한 일) + * - x축: MATRIX_X ~ MATRIX_X + width / 2 + * - y축: MATRIX_Y ~ MATRIX_Y + height / 2 + * 3사분면 (긴급하지도 중요하지도 않은 일) + * - x축: MATRIX_X ~ MATRIX_X + width / 2 + * - y축: MATRIX_Y + height / 2 ~ MATRIX_Y + height + * 4사분면 (긴급하지만 중요하지 않은 일) + * - x축: MATRIX_X + width / 2 ~ MATRIX_X + width + * - y축: MATRIX_Y + height / 2 ~ MATRIX_Y + height + */ + const quadrants = [ + { + x1: MATRIX_X + width / 2, + y1: MATRIX_Y, + x2: MATRIX_X + width, + y2: MATRIX_Y + height / 2, + }, + { + x1: MATRIX_X, + y1: MATRIX_Y, + x2: MATRIX_X + width / 2, + y2: MATRIX_Y + height / 2, + }, + { + x1: MATRIX_X, + y1: MATRIX_Y + height / 2, + x2: MATRIX_X + width / 2, + y2: MATRIX_Y + height, + }, + { + x1: MATRIX_X + width / 2, + y1: MATRIX_Y + height / 2, + x2: MATRIX_X + width, + y2: MATRIX_Y + height, + }, + ]; + + [ + { x: 248, y: 420 }, + { x: 328, y: 575 }, + { x: 474, y: 233 }, + { x: 739, y: 270 }, + { x: 645, y: 400 }, + { x: 310, y: 537 }, + { x: 437, y: 632 }, + { x: 422, y: 529 }, + { x: 837, y: 593 }, + { x: 227, y: 145 }, + { x: 626, y: 256 }, + { x: 386, y: 55 }, + { x: 736, y: 89 }, + { x: 117, y: 72 }, + { x: 406, y: 224 }, + { x: 148, y: 227 }, + { x: 131, y: 302 }, + { x: 145, y: 294 }, + { x: 625, y: 585 }, + { x: 361, y: 268 }, + { x: 618, y: 639 }, + { x: 753, y: 168 }, + { x: 185, y: 561 }, + { x: 607, y: 134 }, + { x: 804, y: 540 }, + { x: 711, y: 534 }, + { x: 684, y: 307 }, + { x: 402, y: 74 }, + { x: 156, y: 461 }, + { x: 545, y: 311 }, + { x: 533, y: 272 }, + { x: 225, y: 92 }, + { x: 110, y: 316 }, + { x: 428, y: 390 }, + { x: 574, y: 395 }, + { x: 754, y: 67 }, + { x: 424, y: 510 }, + { x: 774, y: 217 }, + { x: 664, y: 244 }, + { x: 814, y: 144 }, + { x: 604, y: 245 }, + { x: 128, y: 609 }, + { x: 67, y: 237 }, + { x: 582, y: 52 }, + { x: 369, y: 192 }, + { x: 419, y: 273 }, + { x: 618, y: 267 }, + { x: 628, y: 588 }, + { x: 850, y: 293 }, + { x: 587, y: 261 }, + { x: 126, y: 518 }, + { x: 523, y: 279 }, + { x: 635, y: 240 }, + { x: 707, y: 226 }, + { x: 432, y: 187 }, + { x: 394, y: 335 }, + { x: 707, y: 190 }, + { x: 53, y: 158 }, + { x: 651, y: 258 }, + { x: 426, y: 591 }, + { x: 460, y: 428 }, + { x: 427, y: 152 }, + { x: 346, y: 107 }, + { x: 592, y: 253 }, + { x: 111, y: 476 }, + { x: 343, y: 191 }, + { x: 724, y: 210 }, + { x: 698, y: 405 }, + { x: 545, y: 222 }, + { x: 263, y: 547 }, + { x: 292, y: 228 }, + { x: 273, y: 299 }, + { x: 715, y: 503 }, + { x: 652, y: 561 }, + { x: 417, y: 587 }, + { x: 151, y: 505 }, + { x: 388, y: 145 }, + { x: 648, y: 576 }, + { x: 219, y: 623 }, + { x: 131, y: 613 }, + { x: 742, y: 493 }, + { x: 751, y: 517 }, + { x: 585, y: 335 }, + { x: 279, y: 371 }, + { x: 118, y: 174 }, + { x: 773, y: 519 }, + { x: 144, y: 550 }, + { x: 112, y: 303 }, + { x: 371, y: 268 }, + { x: 166, y: 528 }, + { x: 211, y: 446 }, + { x: 143, y: 472 }, + { x: 407, y: 394 }, + { x: 690, y: 468 }, + { x: 287, y: 259 }, + { x: 324, y: 431 }, + { x: 414, y: 346 }, + { x: 513, y: 650 }, + { x: 113, y: 207 }, + { x: 142, y: 83 }, + ].forEach((priority) => { + const color = quadrants.findIndex( + (q) => + priority.x >= q.x1 && + priority.x <= q.x2 && + priority.y >= q.y1 && + priority.y <= q.y2 + ); + + svg + .append('circle') + .attr('cx', priority.x) + .attr('cy', priority.y) + .attr('r', 5) + .attr('fill', colors[color]); + }); + + }) + .catch(function() { + console.error('플러그인 로드 중 오류 발생'); + }); +} \ No newline at end of file Index: arms/locales/en.json =================================================================== diff -u -rd245d032e54b776b961818908fba8f93ce126d7e -r351b91e6e40146548dd1e1781e51fba4c2273bcb --- arms/locales/en.json (.../en.json) (revision d245d032e54b776b961818908fba8f93ce126d7e) +++ arms/locales/en.json (.../en.json) (revision 351b91e6e40146548dd1e1781e51fba4c2273bcb) @@ -20,8 +20,8 @@ "c": "Cost Analysis" }, "report": { - "f": "Full Data Sheet", - "s": "SWOT Sheet" + "f": "Full Data Report", + "s": "SWOT Report" }, "community": { "n": "Notice Board", Index: arms/locales/ko.json =================================================================== diff -u -rd245d032e54b776b961818908fba8f93ce126d7e -r351b91e6e40146548dd1e1781e51fba4c2273bcb --- arms/locales/ko.json (.../ko.json) (revision d245d032e54b776b961818908fba8f93ce126d7e) +++ arms/locales/ko.json (.../ko.json) (revision 351b91e6e40146548dd1e1781e51fba4c2273bcb) @@ -21,8 +21,8 @@ "c": "비용 분석. Cost" }, "report": { - "f": "전체 데이터 시트", - "s": "SWOT 시트", + "f": "전체 데이터 리포트", + "s": "SWOT 리포트", }, "community": { "n": "공지 사항",