Index: arms/js/analysisCost.js =================================================================== diff -u -r3938c8030307d428b3e2dc2f4b5dc7947f451eea -r18e047f12fc2926010d97d163de07ab387e77b51 --- arms/js/analysisCost.js (.../analysisCost.js) (revision 3938c8030307d428b3e2dc2f4b5dc7947f451eea) +++ arms/js/analysisCost.js (.../analysisCost.js) (revision 18e047f12fc2926010d97d163de07ab387e77b51) @@ -221,16 +221,19 @@ var responseMap = apiResponse.response; var line = responseMap.line; var bar = responseMap.bar; + var candleStick = responseMap.candleStick; console.log(" [ analysisCost :: line ] :: response data -> " + JSON.stringify(line)); console.log(" [ analysisCost :: bar ] :: response data -> " + JSON.stringify(bar)); + console.log(" [ analysisCost :: candleStick ] :: response data -> " + JSON.stringify(candleStick)); var maxCost = Math.max(...Object.values(line)); var productChartDom = document.getElementById('product-accumulate-cost-by-month'); $(productChartDom).height("500px"); - var mymChart = echarts.init(productChartDom); + var productCostChart = echarts.init(productChartDom); var option; var dates = Object.keys(line); var lineCosts = Object.values(line); var barCosts = Object.values(bar); + var candleStickCosts = Object.values(candleStick); option = { dataZoom: [{ type: 'slider', @@ -242,37 +245,73 @@ formatter: function(params) { var lineTooltip = new Intl.NumberFormat().format(params[0].value); var barTooltip = new Intl.NumberFormat().format(params[1].value); - return '날짜: ' + params[0].name + '
성과 기준선: ' + lineTooltip + '
성과: ' + barTooltip; + var candleStickTooltip = params[2] ? params[2].value : null; + var candleText = ''; + if (candleStickTooltip) { + var 시가 = new Intl.NumberFormat().format(candleStickTooltip[1]); + var 종가 = new Intl.NumberFormat().format(candleStickTooltip[2]); + var 최저가 = new Intl.NumberFormat().format(candleStickTooltip[3]); + var 최고가 = new Intl.NumberFormat().format(candleStickTooltip[4]); + candleText = `시가: ${시가}
종가: ${종가}
최저가: ${최저가}
최고가: ${최고가}`; + return '날짜: ' + params[0].name + '
성과 기준선: ' + lineTooltip + '
성과: ' + barTooltip + (candleText ? '
' + candleText : ''); + } else { + return '날짜: ' + params[0].name + '
성과 기준선: ' + lineTooltip + '
성과: ' + barTooltip; + } } }, xAxis: { type: 'category', data: dates }, - yAxis: { - type: 'value', - min: 0, - max: maxCost, - interval: Math.floor(maxCost / 10) - }, + yAxis: [ + { + type: 'value', + min: 0, + max: maxCost, + interval: Math.floor(maxCost / 10), + name: '누적 성과 비용' + }, + { + type: 'value', + scale: true, + name: '총 연봉 비용 변동 추이' + } + ], + legend: { - data: ['성과 기준선', '비용'] + data: ['누적 성과 기준선', '누적 성과 비용', '총 연봉 비용 변동 추이'] }, series: [{ - name: '성과 기준선', + name: '누적 성과 기준선', data: lineCosts, type: 'line', + yAxisIndex: 0 }, { - name: '비용', + name: '누적 성과 비용', data: barCosts, type: 'bar', + yAxisIndex: 0 + }, + { + name: '총 연봉 비용 변동 추이', + type: 'candlestick', + data: candleStickCosts, + yAxisIndex: 1, + itemStyle: { + color: 'red', // 양봉 색상 + color0: 'blue', // 음봉 색상 + borderColor: 'red', // 테두리 색상 + borderColor0: 'blue', // 음봉 테두리 색상 + // borderWidth: 3, // 테두리 두께 + }, + // barWidth: 3, // 캔들 가로 두께 }] }; if (option && typeof option === 'object') { - mymChart.setOption(option); + productCostChart.setOption(option); } - window.addEventListener('resize', mymChart.resize); + window.addEventListener('resize', productCostChart.resize); } } });