import { seriesLoadScripts, loadLinks, $$ } from '../../utils/util' import { generateRandomKey, replaceHtml } from '../../utils/chartUtil' import { getdatabyselection, getcellvalue } from '../../global/getdata'; import chartInfo from '../../store' import formula from '../../global/formula'; import { luckysheet_getcelldata } from '../../function/func'; import { getSheetIndex, getRangetxt } from '../../methods/get' import { rowLocation, colLocation, mouseposition } from '../../global/location' import { luckysheetMoveHighlightCell, luckysheetMoveHighlightCell2, luckysheetMoveHighlightRange, luckysheetMoveHighlightRange2, luckysheetMoveEndCell } from '../../controllers/sheetMove'; import { isEditMode } from '../../global/validate'; import luckysheetsizeauto from '../../controllers/resize'; import { getvisibledatarow, getvisibledatacolumn, setluckysheet_scroll_status } from '../../methods/get' let _rowLocation = rowLocation let _colLocation = colLocation // Dynamically load dependent scripts and styles const dependScripts = [ 'https://cdn.jsdelivr.net/npm/vue@2.6.11', 'https://unpkg.com/vuex@3.4.0', 'https://cdn.bootcdn.net/ajax/libs/element-ui/2.13.2/index.js', 'https://cdn.bootcdn.net/ajax/libs/echarts/4.8.0/echarts.min.js', 'expendPlugins/chart/chartmix.umd.js' // 'http://192.168.10.246:8000/chartmix.umd.js' ] const dependLinks = [ 'https://cdn.bootcdn.net/ajax/libs/element-ui/2.13.2/theme-chalk/index.css', 'expendPlugins/chart/chartmix.css' // 'http://192.168.10.246:8000/chartmix.css' ] // Initialize the chart component function chart(data) { loadLinks(dependLinks); seriesLoadScripts(dependScripts, null, function () { const store = new Vuex.Store() console.info('chartmix::', chartmix.default) Vue.use(chartmix.default, { store }) let outDom = document.getElementById('luckysheet_info_detail') chartmix.default.initChart(outDom, chartInfo.lang) $('.chartSetting').css({ position: 'absolute', right: 0, width: '300px', display: 'none', background: '#fff', paddingLeft: '10px', border: '1px solid #ccc', height: 'auto', zIndex: 99999999 }) chartInfo.createChart = chartmix.default.createChart chartInfo.highlightChart = chartmix.default.highlightChart chartInfo.deleteChart = chartmix.default.deleteChart chartInfo.resizeChart = chartmix.default.resizeChart chartInfo.changeChartRange = chartmix.default.changeChartRange chartInfo.changeChartCellData = chartmix.default.changeChartCellData chartInfo.chart_selection = chart_selection() chartInfo.chartparam.jfrefreshchartall = jfrefreshchartall chartInfo.chartparam.changeChartCellData = chartmix.default.changeChartCellData chartInfo.chartparam.renderChart = chartmix.default.renderChart // 初始化渲染图表 for (let i = 0; i < data.length; i++) { if (data[i].status == '1') { renderCharts(data[i].chart) } } }); } // rendercharts function renderCharts(chartLists) { for (let i = 0; i < chartLists.length; i++) { let chart = chartLists[i] let chart_id_c = chart.chart_id + '_c' let modelChartShowHTML = '' let $t = $( replaceHtml(modelChartShowHTML, { id: chart_id_c, addclass: 'luckysheet-data-visualization-chart', title: '图表生成', content: '' }) ).appendTo($('.luckysheet-cell-main')) let container = document.getElementById(chart_id_c) let { render, chart_json } = chartInfo.createChart($(`#${chart_id_c}`).children('.luckysheet-modal-dialog-content')[0], chartData, chart_id, rangeArray, rangeTxt) chartInfo.currentChart = chart_json.chartOptions console.dir(JSON.stringify(chart_json)) width = chart.width height = chart.height left = chart.left top = chart.top container.style.width = width + 'px' container.style.height = height + 'px' container.style.position = 'absolute' container.style.background = '#fff' container.style.left = left + 'px' container.style.top = top + 'px' render.style.width = '100%' render.style.height = '100%' container.style.zIndex = chartInfo.zIndex ? chartInfo.zIndex : 15 chartInfo.zIndex++ } } function jfrefreshchartall(flowdata1, r_st, r_ed, c_st, c_ed) { let chart = chartInfo.currentChart if (!chart) { return } if (chart.rangeArray.length == 1) { var row = chart.rangeArray[0].row; var column = chart.rangeArray[0].column; //不在范围内的不更新 if ( r_st > row[1] || r_ed < row[0] || c_st > column[1] || c_ed < column[0] ) { return } //根据原有的范围取得数据 var luckysheetgetcellrange = formula.getcellrange( chart.rangeTxt ); var sheetIndex = luckysheetgetcellrange.sheetIndex == -1 ? 0 : luckysheetgetcellrange.sheetIndex; //sheetIndex为-1时,转化为0 var selection = { row: luckysheetgetcellrange.row, column: luckysheetgetcellrange.column, dataSheetIndex: sheetIndex }; //数组 var getcelldata = luckysheet_getcelldata(chart.rangeTxt); if ( typeof getcelldata === "object" && getcelldata.length != 0 && getcelldata.data.length != null ) { //getcelldata有值,且不为空数组 && getcelldata.data为二维数组 var chartData = getcelldata.data; chartInfo.chartparam.changeChartCellData(chart.chart_id, chartData); } } } function chart_selection() { return { create: function () { var chart_json = chartInfo.currentChart if (chart_json.rangeArray.length > 1) { return } $('#luckysheet-chart-rangeShow').empty() $('#luckysheet-cell-selected-boxs').hide() $('#luckysheet-cell-selected-focus').hide() $('#luckysheet-rows-h-selected').hide() $('#luckysheet-cols-h-selected').hide() $('#luckysheet-row-count-show').hide() $('#luckysheet-column-count-show').hide() var st_r = chart_json.rangeArray[0].row[0] var st_c = chart_json.rangeArray[0].column[0] var rangeSplitArray = chart_json.rangeSplitArray //首行是否标题 var rangeRowCheck = chart_json.rangeRowCheck if (rangeRowCheck.exits) { var chart_rowtitle_html = getRangeShowHtml( 'rowtitle', rangeSplitArray.rowtitle.row[0] + st_r, rangeSplitArray.rowtitle.row[1] + st_r, rangeSplitArray.rowtitle.column[0] + st_c, rangeSplitArray.rowtitle.column[1] + st_c ) } else { var chart_rowtitle_html = '' } //首列是否标题 var rangeColCheck = chart_json.rangeColCheck if (rangeColCheck.exits) { var chart_coltitle_html = getRangeShowHtml( 'coltitle', rangeSplitArray.coltitle.row[0] + st_r, rangeSplitArray.coltitle.row[1] + st_r, rangeSplitArray.coltitle.column[0] + st_c, rangeSplitArray.coltitle.column[1] + st_c ) } else { var chart_coltitle_html = '' } //内容块 var chart_content_html = getRangeShowHtml( 'content', rangeSplitArray.content.row[0] + st_r, rangeSplitArray.content.row[1] + st_r, rangeSplitArray.content.column[0] + st_c, rangeSplitArray.content.column[1] + st_c ) $('#luckysheet-chart-rangeShow').append( chart_rowtitle_html + chart_coltitle_html + chart_content_html ) function getRangeShowHtml(type, r1, r2, c1, c2) { var visibledatarow = getvisibledatarow() var visibledatacolumn = getvisibledatacolumn() var row = visibledatarow[r2], row_pre = r1 - 1 == -1 ? 0 : visibledatarow[r1 - 1] var col = visibledatacolumn[c2], col_pre = c1 - 1 == -1 ? 0 : visibledatacolumn[c1 - 1] if (type == 'rowtitle') { var color = '#C65151' } if (type == 'coltitle') { var color = '#9667C0' } if (type == 'content') { var color = '#4970D1' } var html = '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' return html } }, rangeMove: false, rangeMovexy: null, rangeMoveIndex: null, rangeMoveObj: null, rangeMoveDraging: function (event, sheetBarHeight, statisticBarHeight) { var chart_json = chartInfo.currentChart var st_r = chart_json.rangeArray[0].row[0] var st_c = chart_json.rangeArray[0].column[0] var rangeRowCheck = chart_json.rangeRowCheck var rangeColCheck = chart_json.rangeColCheck var rangeSplitArray = chart_json.rangeSplitArray var mouse = mouseposition(event.pageX, event.pageY) var scrollLeft = $('#luckysheet-cell-main').scrollLeft() var scrollTop = $('#luckysheet-cell-main').scrollTop() var x = mouse[0] + scrollLeft var y = mouse[1] + scrollTop var winH = $(window).height() + scrollTop - sheetBarHeight - statisticBarHeight, winW = $(window).width() + scrollLeft var rowLocation = _rowLocation(y), row_index = rowLocation[2] var colLocation = _colLocation(x), col_index = colLocation[2] var visibledatarow = getvisibledatarow() var visibledatacolumn = getvisibledatacolumn() var $id = chartInfo.chart_selection.rangeMoveObj.attr('id') if ($id == 'luckysheet-chart-rangeShow-content') { //行 var row_s = chartInfo.chart_selection.rangeMoveIndex[0] - chartInfo.chart_selection.rangeMovexy[0] + row_index if (rangeRowCheck.exits) { if (row_s < st_r + rangeRowCheck.range[1] + 1 || y < 0) { row_s = st_r + rangeRowCheck.range[1] + 1 } } else { if (row_s < 0 || y < 0) { row_s = 0 } } var row_e = rangeSplitArray.content.row[1] - rangeSplitArray.content.row[0] + row_s if (row_e >= visibledatarow.length - 1 || y > winH) { row_s = visibledatarow.length - 1 - rangeSplitArray.content.row[1] + rangeSplitArray.content.row[0] row_e = visibledatarow.length - 1 } //列 var col_s = chartInfo.chart_selection.rangeMoveIndex[1] - chartInfo.chart_selection.rangeMovexy[1] + col_index if (rangeColCheck.exits) { if (col_s < st_c + rangeColCheck.range[1] + 1 || x < 0) { col_s = st_c + rangeColCheck.range[1] + 1 } } else { if (col_s < 0 || x < 0) { col_s = 0 } } var col_e = rangeSplitArray.content.column[1] - rangeSplitArray.content.column[0] + col_s if (col_e >= visibledatacolumn.length - 1 || x > winW) { col_s = visibledatacolumn.length - 1 - rangeSplitArray.content.column[1] + rangeSplitArray.content.column[0] col_e = visibledatacolumn.length - 1 } //更新 if (rangeRowCheck.exits && rangeColCheck.exits) { chart_json.rangeArray = [{ row: [st_r, row_e], column: [st_c, col_e] }] chart_json.rangeSplitArray.range = { row: [st_r, row_e], column: [st_c, col_e] } chart_json.rangeSplitArray.content = { row: [row_s - st_r, row_e - st_r], column: [col_s - st_c, col_e - st_c] } chart_json.rangeSplitArray.rowtitle = { row: chart_json.rangeSplitArray.rowtitle.row, column: [col_s - st_c, col_e - st_c] } chart_json.rangeSplitArray.coltitle = { row: [row_s - st_r, row_e - st_r], column: chart_json.rangeSplitArray.coltitle.column } } else if (rangeRowCheck.exits) { chart_json.rangeArray = [{ row: [st_r, row_e], column: [col_s, col_e] }] chart_json.rangeSplitArray.range = { row: [st_r, row_e], column: [col_s, col_e] } chart_json.rangeSplitArray.content = { row: [row_s - st_r, row_e - st_r], column: chart_json.rangeSplitArray.content.column } } else if (rangeColCheck.exits) { chart_json.rangeArray = [{ row: [row_s, row_e], column: [st_c, col_e] }] chart_json.rangeSplitArray.range = { row: [row_s, row_e], column: [st_c, col_e] } chart_json.rangeSplitArray.content = { row: chart_json.rangeSplitArray.content.row, column: [col_s - st_c, col_e - st_c] } } else { chart_json.rangeArray = [ { row: [row_s, row_e], column: [col_s, col_e] } ] chart_json.rangeSplitArray.range = { row: [row_s, row_e], column: [col_s, col_e] } } } else if ($id == 'luckysheet-chart-rangeShow-rowtitle') { //列 var col_s = chartInfo.chart_selection.rangeMoveIndex[1] - chartInfo.chart_selection.rangeMovexy[1] + col_index if (rangeColCheck.exits) { if (col_s < st_c + rangeColCheck.range[1] + 1 || x < 0) { col_s = st_c + rangeColCheck.range[1] + 1 } } else { if (col_s < 0 || x < 0) { col_s = 0 } } var col_e = rangeSplitArray.rowtitle.column[1] - rangeSplitArray.rowtitle.column[0] + col_s if (col_e >= visibledatacolumn.length - 1 || x > winW) { col_s = visibledatacolumn.length - 1 - rangeSplitArray.rowtitle.column[1] + rangeSplitArray.rowtitle.column[0] col_e = visibledatacolumn.length - 1 } //更新 if (rangeColCheck.exits) { chart_json.rangeArray = [ { row: chart_json.rangeArray[0].row, column: [st_c, col_e] } ] chart_json.rangeSplitArray.range = { row: chart_json.rangeArray[0].row, column: [st_c, col_e] } chart_json.rangeSplitArray.rowtitle = { row: chart_json.rangeSplitArray.rowtitle.row, column: [col_s - st_c, col_e - st_c] } chart_json.rangeSplitArray.content = { row: chart_json.rangeSplitArray.content.row, column: [col_s - st_c, col_e - st_c] } } else { chart_json.rangeArray = [ { row: chart_json.rangeArray[0].row, column: [col_s, col_e] } ] chart_json.rangeSplitArray.range = { row: chart_json.rangeArray[0].row, column: [col_s, col_e] } } } else if ($id == 'luckysheet-chart-rangeShow-coltitle') { //行 var row_s = chartInfo.chart_selection.rangeMoveIndex[0] - chartInfo.chart_selection.rangeMovexy[0] + row_index if (rangeRowCheck.exits) { if (row_s < st_r + rangeRowCheck.range[1] + 1 || y < 0) { row_s = st_r + rangeRowCheck.range[1] + 1 } } else { if (row_s < 0 || y < 0) { row_s = 0 } } //更新 var row_e = rangeSplitArray.coltitle.row[1] - rangeSplitArray.coltitle.row[0] + row_s if (row_e >= visibledatarow.length - 1 || y > winH) { row_s = visibledatarow.length - 1 - rangeSplitArray.coltitle.row[1] + rangeSplitArray.coltitle.row[0] row_e = visibledatarow.length - 1 } if (rangeRowCheck.exits) { chart_json.rangeArray = [ { row: [st_r, row_e], column: chart_json.rangeArray[0].column } ] chart_json.rangeSplitArray.range = { row: [st_r, row_e], column: chart_json.rangeArray[0].column } chart_json.rangeSplitArray.coltitle = { row: [row_s - st_r, row_e - st_r], column: chart_json.rangeSplitArray.coltitle.column } chart_json.rangeSplitArray.content = { row: [row_s - st_r, row_e - st_r], column: chart_json.rangeSplitArray.content.column } } else { chart_json.rangeArray = [ { row: [row_s, row_e], column: chart_json.rangeArray[0].column } ] chart_json.rangeSplitArray.range = { row: [row_s, row_e], column: chart_json.rangeArray[0].column } } } chartInfo.chart_selection.create(chartInfo.currentChart) }, rangeMoveDragged: function () { chartInfo.chart_selection.rangeMove = false var updateJson = chartInfo.currentChart updateJson.rangeTxt = getRangetxt( chartInfo.currentSheetIndex, updateJson.rangeArray[0], chartInfo.currentSheetIndex ) updateJson.chartData = getdatabyselection( updateJson.rangeArray[0], chartInfo.currentSheetIndex ) // 渲染 chartInfo.changeChartRange(updateJson.chart_id, updateJson.chartData, updateJson.rangeArray, updateJson.rangeTxt) }, rangeResize: false, rangeResizexy: null, rangeResizeIndex: null, rangeResizeObj: null, rangeResizeDraging: function (event, sheetBarHeight, statisticBarHeight) { var chart_json = chartInfo.currentChart var st_r = chart_json.rangeArray[0].row[0] var st_c = chart_json.rangeArray[0].column[0] var rangeRowCheck = chart_json.rangeRowCheck var rangeColCheck = chart_json.rangeColCheck var rangeSplitArray = chart_json.rangeSplitArray var mouse = mouseposition(event.pageX, event.pageY) var scrollLeft = $('#luckysheet-cell-main').scrollLeft() var scrollTop = $('#luckysheet-cell-main').scrollTop() var x = mouse[0] + scrollLeft var y = mouse[1] + scrollTop var winH = $(window).height() + scrollTop - sheetBarHeight - statisticBarHeight, winW = $(window).width() + scrollLeft var rowLocation = _rowLocation(y), row_index = rowLocation[2] var colLocation = _colLocation(x), col_index = colLocation[2] var visibledatarow = getvisibledatarow() var visibledatacolumn = getvisibledatacolumn() var $id = chartInfo.chart_selection.rangeResizeObj.attr('id') if ($id == 'luckysheet-chart-rangeShow-content') { var r1, r2, c1, c2 if (chartInfo.chart_selection.rangeResize == 'lt') { r1 = chartInfo.chart_selection.rangeResizeIndex.row[0] c1 = chartInfo.chart_selection.rangeResizeIndex.column[0] r2 = chartInfo.chart_selection.rangeResizeIndex.row[1] c2 = chartInfo.chart_selection.rangeResizeIndex.column[1] } else if (chartInfo.chart_selection.rangeResize == 'lb') { r1 = chartInfo.chart_selection.rangeResizeIndex.row[1] c1 = chartInfo.chart_selection.rangeResizeIndex.column[0] r2 = chartInfo.chart_selection.rangeResizeIndex.row[0] c2 = chartInfo.chart_selection.rangeResizeIndex.column[1] } else if (chartInfo.chart_selection.rangeResize == 'rt') { r1 = chartInfo.chart_selection.rangeResizeIndex.row[0] c1 = chartInfo.chart_selection.rangeResizeIndex.column[1] r2 = chartInfo.chart_selection.rangeResizeIndex.row[1] c2 = chartInfo.chart_selection.rangeResizeIndex.column[0] } else if (chartInfo.chart_selection.rangeResize == 'rb') { r1 = chartInfo.chart_selection.rangeResizeIndex.row[1] c1 = chartInfo.chart_selection.rangeResizeIndex.column[1] r2 = chartInfo.chart_selection.rangeResizeIndex.row[0] c2 = chartInfo.chart_selection.rangeResizeIndex.column[0] } //行 if (rangeRowCheck.exits) { var row_s = r1 - chartInfo.chart_selection.rangeResizexy[0] + row_index if (row_s < st_r + rangeRowCheck.range[1] + 1 || y < 0) { row_s = st_r + rangeRowCheck.range[1] + 1 } else if (row_s >= visibledatarow.length - 1 || y > winH) { row_s = visibledatarow.length - 1 } } else { var row_s = st_r - chartInfo.chart_selection.rangeResizexy[0] + row_index if (row_s < 0 || y < 0) { row_s = 0 } else if (row_s >= visibledatarow.length - 1 || y > winH) { row_s = visibledatarow.length - 1 } } //列 if (rangeColCheck.exits) { var col_s = c1 - chartInfo.chart_selection.rangeResizexy[1] + col_index if (col_s < st_c + rangeColCheck.range[1] + 1 || x < 0) { col_s = st_c + rangeColCheck.range[1] + 1 } else if (col_s >= visibledatacolumn.length - 1 || x > winW) { col_s = visibledatacolumn.length - 1 } } else { var col_s = st_c - chartInfo.chart_selection.rangeResizexy[1] + col_index if (col_s < 0 || x < 0) { col_s = 0 } else if (col_s >= visibledatacolumn.length - 1 || x > winW) { col_s = visibledatacolumn.length - 1 } } var obj_r1, obj_r2, obj_c1, obj_c2 if (row_s > r2) { obj_r1 = r2 obj_r2 = row_s } else { obj_r1 = row_s obj_r2 = r2 } if (col_s > c2) { obj_c1 = c2 obj_c2 = col_s } else { obj_c1 = col_s obj_c2 = c2 } if (!rangeRowCheck.exits && !rangeColCheck.exits) { chart_json.rangeArray = [ { row: [obj_r1, obj_r2], column: [obj_c1, obj_c2] } ] chart_json.rangeSplitArray.range = { row: [obj_r1, obj_r2], column: [obj_c1, obj_c2] } } else { chart_json.rangeArray = [ { row: [st_r, obj_r2], column: [st_c, obj_c2] } ] chart_json.rangeSplitArray.range = { row: [st_r, obj_r2], column: [st_c, obj_c2] } chart_json.rangeSplitArray.content = { row: [obj_r1 - st_r, obj_r2 - st_r], column: [obj_c1 - st_c, obj_c2 - st_c] } if (rangeRowCheck.exits) { chart_json.rangeSplitArray.rowtitle = { row: chart_json.rangeSplitArray.rowtitle.row, column: [obj_c1 - st_c, obj_c2 - st_c] } } if (rangeColCheck.exits) { chart_json.rangeSplitArray.coltitle = { row: [obj_r1 - st_r, obj_r2 - st_r], column: chart_json.rangeSplitArray.coltitle.column } } } } else if ($id == 'luckysheet-chart-rangeShow-rowtitle') { var c1, c2 if ( chartInfo.chart_selection.rangeResize == 'lt' || chartInfo.chart_selection.rangeResize == 'lb' ) { c1 = chartInfo.chart_selection.rangeResizeIndex.column[0] c2 = chartInfo.chart_selection.rangeResizeIndex.column[1] } else if ( chartInfo.chart_selection.rangeResize == 'rt' || chartInfo.chart_selection.rangeResize == 'rb' ) { c1 = chartInfo.chart_selection.rangeResizeIndex.column[1] c2 = chartInfo.chart_selection.rangeResizeIndex.column[0] } //列 if (rangeColCheck.exits) { var col_s = c1 - chartInfo.chart_selection.rangeResizexy[1] + col_index if (col_s < st_c + rangeColCheck.range[1] + 1 || x < 0) { col_s = st_c + rangeColCheck.range[1] + 1 } else if (col_s >= visibledatacolumn.length - 1 || x > winW) { col_s = visibledatacolumn.length - 1 } } else { var col_s = st_c - chartInfo.chart_selection.rangeResizexy[1] + col_index if (col_s < 0 || x < 0) { col_s = 0 } else if (col_s >= visibledatacolumn.length - 1 || x > winW) { col_s = visibledatacolumn.length - 1 } } var obj_c1, obj_c2 if (col_s > c2) { obj_c1 = c2 obj_c2 = col_s } else { obj_c1 = col_s obj_c2 = c2 } //更新 if (!rangeColCheck.exits) { chart_json.rangeArray = [ { row: chart_json.rangeArray[0].row, column: [obj_c1, obj_c2] } ] chart_json.rangeSplitArray.range = { row: chart_json.rangeArray[0].row, column: [obj_c1, obj_c2] } } else { chart_json.rangeArray = [ { row: chart_json.rangeArray[0].row, column: [st_c, obj_c2] } ] chart_json.rangeSplitArray.range = { row: chart_json.rangeArray[0].row, column: [st_c, obj_c2] } chart_json.rangeSplitArray.rowtitle = { row: chart_json.rangeSplitArray.rowtitle.row, column: [obj_c1 - st_c, obj_c2 - st_c] } chart_json.rangeSplitArray.content = { row: chart_json.rangeSplitArray.content.row, column: [obj_c1 - st_c, obj_c2 - st_c] } } } else if ($id == 'luckysheet-chart-rangeShow-coltitle') { var r1, r2 if ( chartInfo.chart_selection.rangeResize == 'lt' || chartInfo.chart_selection.rangeResize == 'rt' ) { r1 = chartInfo.chart_selection.rangeResizeIndex.row[0] r2 = chartInfo.chart_selection.rangeResizeIndex.row[1] } else if ( chartInfo.chart_selection.rangeResize == 'lb' || chartInfo.chart_selection.rangeResize == 'rb' ) { r1 = chartInfo.chart_selection.rangeResizeIndex.row[1] r2 = chartInfo.chart_selection.rangeResizeIndex.row[0] } //行 if (rangeRowCheck.exits) { var row_s = r1 - chartInfo.chart_selection.rangeResizexy[0] + row_index if (row_s < st_r + rangeRowCheck.range[1] + 1 || y < 0) { row_s = st_r + rangeRowCheck.range[1] + 1 } else if (row_s >= visibledatarow.length - 1 || y > winH) { row_s = visibledatarow.length - 1 } } else { var row_s = st_r - chartInfo.chart_selection.rangeResizexy[0] + row_index if (row_s < 0 || y < 0) { row_s = 0 } else if (row_s >= visibledatarow.length - 1 || y > winH) { row_s = visibledatarow.length - 1 } } var obj_r1, obj_r2 if (row_s > r2) { obj_r1 = r2 obj_r2 = row_s } else { obj_r1 = row_s obj_r2 = r2 } //更新 if (!rangeRowCheck.exits) { chart_json.rangeArray = [ { row: [obj_r1, obj_r2], column: chart_json.rangeArray[0].column } ] chart_json.rangeSplitArray.range = { row: [obj_r1, obj_r2], column: chart_json.rangeArray[0].column } } else { chart_json.rangeArray = [ { row: [st_r, obj_r2], column: chart_json.rangeArray[0].column } ] chart_json.rangeSplitArray.range = { row: [st_r, obj_r2], column: chart_json.rangeArray[0].column } chart_json.rangeSplitArray.coltitle = { row: [obj_r1 - st_r, obj_r2 - st_r], column: chart_json.rangeSplitArray.coltitle.column } chart_json.rangeSplitArray.content = { row: [obj_r1 - st_r, obj_r2 - st_r], column: chart_json.rangeSplitArray.content.column } } } chartInfo.chart_selection.create(chartInfo.currentChart) }, rangeResizeDragged: function () { chartInfo.chart_selection.rangeResize = null updateJson.rangeTxt = getRangetxt( chartInfo.currentSheetIndex, updateJson.rangeArray[0], chartInfo.currentSheetIndex ) updateJson.chartData = getdatabyselection( updateJson.rangeArray[0], chartInfo.currentSheetIndex ) // 渲染 chartInfo.changeChartRange(updateJson.chart_id, updateJson.chartData, updateJson.rangeArray, updateJson.rangeTxt) } } } // create chart function createLuckyChart(width, height, left, top) { //如果只选中一个单元格,则自动填充选取 var jfgird_select_save = luckysheet.getluckysheet_select_save(); if ( jfgird_select_save.length == 1 && jfgird_select_save[0].row[0] == jfgird_select_save[0].row[1] && jfgird_select_save[0].column[0] == jfgird_select_save[0].column[1] ) { luckysheetMoveHighlightRange2("right", "rangeOfSelect"); luckysheetMoveHighlightRange2("down", "rangeOfSelect"); jfgird_select_save = luckysheet.getluckysheet_select_save(); } //处理右边的空白单元格,自动略过并修改选区 ---------------start var shiftpositon_row = -1; var row_ed = jfgird_select_save[0]["row"][1] - jfgird_select_save[0]["row"][0]; for ( var r = jfgird_select_save[0]["row"][0]; r <= jfgird_select_save[0]["row"][1]; r++ ) { for ( var c = jfgird_select_save[0]["column"][0]; c <= jfgird_select_save[0]["column"][1]; c++ ) { var value = getcellvalue(r, c, luckysheet.flowdata()); //console.log("value,r,c",value,r,c); if (value != null && value.toString().length > 0) { shiftpositon_row = r; break; } } if (shiftpositon_row !== -1) { break; } } if (shiftpositon_row == -1) { shiftpositon_row = 0; } jfgird_select_save[0]["row"] = [shiftpositon_row, shiftpositon_row]; luckysheet.setluckysheet_select_save(jfgird_select_save); chartInfo.luckysheet_shiftpositon = $.extend(true, {}, jfgird_select_save[0]); luckysheetMoveEndCell("down", "range", false, row_ed); jfgird_select_save = luckysheet.getluckysheet_select_save(); var shiftpositon_col = -1; var column_ed = jfgird_select_save[0]["column"][1] - jfgird_select_save[0]["column"][0]; for ( var c = jfgird_select_save[0]["column"][0]; c <= jfgird_select_save[0]["column"][1]; c++ ) { for ( var r = jfgird_select_save[0]["row"][0]; r <= jfgird_select_save[0]["row"][1]; r++ ) { var value = getcellvalue(r, c, luckysheet.flowdata()); if (value != null && value.toString().length > 0) { shiftpositon_col = c; break; } } if (shiftpositon_col !== -1) { break; } } if (shiftpositon_col == -1) { shiftpositon_col = 0; } jfgird_select_save[0]["column"] = [shiftpositon_col, shiftpositon_col]; luckysheet.setluckysheet_select_save(jfgird_select_save); chartInfo.luckysheet_shiftpositon = $.extend(true, {}, jfgird_select_save[0]); luckysheetMoveEndCell("right", "range", false, column_ed); jfgird_select_save = luckysheet.getluckysheet_select_save() var rangeArray = $.extend(true, [], jfgird_select_save); var rangeTxt = getRangetxt(chartInfo.currentSheetIndex, rangeArray[0], chartInfo.currentSheetIndex) let chartData = getdatabyselection() console.dir(chartData) let chart_id = generateRandomKey('chart') let chart_id_c = chart_id + '_c' let modelChartShowHTML = '' let $t = $( replaceHtml(modelChartShowHTML, { id: chart_id_c, addclass: 'luckysheet-data-visualization-chart', title: '图表生成', content: '' }) ).appendTo($('.luckysheet-cell-main')) let container = document.getElementById(chart_id_c) let { render, chart_json } = chartInfo.createChart($(`#${chart_id_c}`).children('.luckysheet-modal-dialog-content')[0], chartData, chart_id, rangeArray, rangeTxt) chartInfo.currentChart = chart_json.chartOptions console.dir(JSON.stringify(chart_json)) width = width ? width : 400 height = height ? height : 250 left = left ? left : 0 top = top ? top : 0 container.style.width = width + 'px' container.style.height = height + 'px' container.style.position = 'absolute' container.style.background = '#fff' container.style.left = left + 'px' container.style.top = top + 'px' render.style.width = '100%' render.style.height = '100%' container.style.zIndex = chartInfo.zIndex ? chartInfo.zIndex : 15 chartInfo.zIndex++ // insert chartinfo let sheetFile = chartInfo.luckysheetfile[getSheetIndex(chartInfo.currentSheetIndex)]; if (!sheetFile.chart) { sheetFile.chart = []; } sheetFile.chart.push({ chart_id, width, height, left, top, sheetIndex: sheetFile.index }) //处理区域高亮框参数,当前页中,只有当前的图表的needRangShow为true,其他为false showNeedRangeShow(chart_id); // delete current chart $(`#${chart_id}_c .luckysheet-modal-controll-del`).click(function (e) { delChart(chart_id) }) // chartInfo.chartparam.luckysheetCurrentChartMoveObj = $(`#${chart_id}_c `) // chartInfo.chartparam.luckysheetCurrentChartResizeObj = $(`#${chart_id}_c `) // chartInfo.chartparam.luckysheetCurrentChartActive = true $t.children('.luckysheet-modal-dialog-content').mousedown(function (e) { if (!chartInfo.chartparam.luckysheetCurrentChartMaxState) { //当前图表显示区域高亮 showNeedRangeShow(chart_id); } e.stopPropagation() }) $t.dblclick(function (e) { if (!chartInfo.chartparam.luckysheetCurrentChartMaxState) { $(this) .find('.jfgrid-modal-controll-update') .click() } else { // TODO:全屏关闭 // closebtn.click() } e.stopPropagation() }) // move chart .mousedown(function (e) { if (!chartInfo.chartparam.luckysheetCurrentChartMaxState) { //当前图表显示区域高亮 showNeedRangeShow(chart_id); setluckysheet_scroll_status(true); //允许拖动渲染框 if ( !$(e.target).is(".luckysheet-modal-dialog-controll") && !$(e.target).is(".luckysheet-modal-controll-btn") && !$(e.target).is("i") ) { // Debounce chartInfo.chartparam.luckysheetCurrentChartMoveTimeout = setTimeout( function () { chartInfo.chartparam.luckysheetCurrentChartMove = true; }, 100 ); } var toffset = chartInfo.chartparam.luckysheetCurrentChartMoveObj.offset(); var tpsition = chartInfo.chartparam.luckysheetCurrentChartMoveObj.position(); //luckysheetCurrentChartMoveXy: [鼠标点相对chart框的距离X方向,鼠标点相对chart框的距离Y方向,chart框相对cell-main的距离X方向,chart框相对cell-main的距离Y方向,水平滚动条的位置,垂直滚动条的位置] chartInfo.chartparam.luckysheetCurrentChartMoveXy = [ e.pageX - toffset.left, e.pageY - toffset.top, tpsition.left, tpsition.top, $("#luckysheet-scrollbar-x").scrollLeft(), $("#luckysheet-scrollbar-y").scrollTop() ]; chartInfo.chartparam.luckysheetCurrentChartMoveWinH = $( "#luckysheet-cell-main" )[0].scrollHeight; chartInfo.chartparam.luckysheetCurrentChartMoveWinW = $( "#luckysheet-cell-main" )[0].scrollWidth; if ( !$(e.target).hasClass("luckysheet-mousedown-cancel") && $(e.target).filter("[class*='sp-palette']").length == 0 && $(e.target).filter("[class*='sp-thumb']").length == 0 && $(e.target).filter("[class*='sp-']").length == 0 ) { $("#luckysheet-rightclick-menu").hide(); $("#luckysheet-cols-h-hover").hide(); $("#luckysheet-cols-menu-btn").hide(); $("#luckysheet-rightclick-menu").hide(); $( "#luckysheet-sheet-list, #luckysheet-rightclick-sheet-menu, #luckysheet-user-menu" ).hide(); $( "body > .luckysheet-filter-menu, body > .luckysheet-filter-submenu, body > .luckysheet-cols-menu" ).hide(); } e.stopPropagation(); } }).find(".luckysheet-modal-dialog-resize-item") .mousedown(function (e) { if (chartInfo.chartparam.luckysheetCurrentChartActive) { chartInfo.chartparam.luckysheetCurrentChartResize = $(this).data("type"); //开始状态resize var mouse = mouseposition(e.pageX, e.pageY), scrollLeft = $("#luckysheet-scrollbar-x").scrollLeft(), scrollTop = $("#luckysheet-scrollbar-y").scrollTop(); var x = mouse[0] + scrollLeft; var y = mouse[1] + scrollTop; var position = chartInfo.chartparam.luckysheetCurrentChartResizeObj.position(); //参数:x,y:鼠标位置,$t.width(), $t.height(): chart框宽高, position.left + scrollLeft, position.top + scrollTop :chart框位置 ,scrollLeft, scrollTop:滚动条位置 chartInfo.chartparam.luckysheetCurrentChartResizeXy = [ x, y, $t.width(), $t.height(), position.left + scrollLeft, position.top + scrollTop, scrollLeft, scrollTop ]; chartInfo.chartparam.luckysheetCurrentChartResizeWinH = $( "#luckysheet-cell-main" )[0].scrollHeight; chartInfo.chartparam.luckysheetCurrentChartResizeWinW = $( "#luckysheet-cell-main" )[0].scrollWidth; chartInfo.chartparam.luckysheetCurrentChart = chart_id; e.stopPropagation(); } }) } // delete chart function delChart(chart_id) { // delete container $(`.luckysheet-cell-main #${chart_id}_c`).remove() // Hide selected range hideAllNeedRangeShow() // delete storage let sheetFile = chartInfo.luckysheetfile[getSheetIndex(chartInfo.currentSheetIndex)] let index = sheetFile.chart.findIndex(item => item.chart_id == chart_id) sheetFile.chart.splice(index, 1) // api call chartInfo.deleteChart(chart_id) } //设置某个图表的高亮区域状态为显示,处理当前页的所有图表,只取一个图表设置为显示,其他隐藏,其他页不管 function showNeedRangeShow(chart_id) { let chartLists = chartInfo.luckysheetfile[getSheetIndex(chartInfo.currentSheetIndex)].chart; for (let chartId in chartLists) { // if (chartLists[chartId].sheetIndex == chartInfo.currentSheetIndex) { //当前sheet的图表先设置为false chartLists[chartId].needRangeShow = false if (chartLists[chartId].chart_id == chart_id) { chartLists[chartId].needRangeShow = true } // } } //操作DOM当前图表选择区域高亮 selectRangeBorderShow(chart_id) } //隐藏当前sheet所有的图表高亮区域 function hideAllNeedRangeShow() { let chartLists = chartInfo.luckysheetfile[getSheetIndex(chartInfo.currentSheetIndex)].chart; for (let chartId in chartLists) { // if (chartLists[chartId].sheetIndex == chartInfo.currentSheetIndex) { //当前sheet的图表设置为false chartLists[chartId].needRangeShow = false // } } //操作DOM 当前图表选择区域隐藏 selectRangeBorderHide() } //选择区域高亮 function selectRangeBorderShow(chart_id) { let $t = $('#' + chart_id + '_c') // Highlight of data range chartInfo.chart_selection.create(chart_id) chartInfo.chartparam.luckysheetCurrentChartActive = true chartInfo.chartparam.luckysheetCurrentChartMoveObj = $t chartInfo.chartparam.luckysheetCurrentChartResizeObj = $t chartInfo.chartparam.luckysheetCurrentChart = chart_id //luckysheet取cell-main,后续扩展到其他的用户自定义元素 $('#luckysheet-cell-main') .find('.luckysheet-modal-dialog-resize') .hide() $('#luckysheet-cell-main') .find('.luckysheet-modal-dialog-controll') .hide() $t.css('z-index', chartInfo.chartparam.luckysheetCurrentChartZIndexRank++) $t.find('.luckysheet-modal-dialog-resize').show() $t.find('.luckysheet-modal-dialog-controll').show() if ( ($('.chartSetting').is(':visible') || chartInfo.chartparam.luckysheet_chart_redo_click) && chart_id != chartInfo.chartparam.luckysheetCurrentChart ) { // TODO: 第一次创建图表时候需要初始化数据选择框 qkSelection // generator.ini(chartMixConfig) $('body .luckysheet-cols-menu').hide() } // 切换到当前图表设置项 chartInfo.highlightChart(chart_id) } //选择区域高亮隐藏 function selectRangeBorderHide(settingShow) { $('#luckysheet-cell-main .luckysheet-modal-dialog-resize, #luckysheet-cell-main .luckysheet-modal-dialog-controll').hide() $('#luckysheet-cell-main').find('.luckysheet-datavisual-selection-set div').remove() chartInfo.chartparam.luckysheetCurrentChartActive = false $('#luckysheet-chart-rangeShow').empty() //标识:是否处理设置界面 if (!settingShow && $('.chartSetting').is(':visible') && !isEditMode()) { hideChartSettingComponent() } } // 显示图表设置界面 function showChartSettingComponent(refresh, chart_id) { if (!$('.chartSetting').is(':visible')) { //隐藏设置界面 $('.chartSetting').show(); //.luckysheet-modal-dialog-resize为图表显示框的缩放框,.luckysheet-modal-dialog-controll为显示框右边的控制按钮 $("#luckysheet-cell-main .luckysheet-modal-dialog-resize, #luckysheet-cell-main .luckysheet-modal-dialog-controll").show(); // 切换图表后再打开设置界面时候执行更新DOM if (!!chart_id) { chartInfo.highlightChart(chart_id) } $('#luckysheet-cell-main').find('.luckysheet-datavisual-selection-set div').show() chartInfo.chartparam.luckysheetCurrentChartActive = true if (!isEditMode() && !refresh) { setTimeout(function () { luckysheetsizeauto() }, 0) } } } // 隐藏图表设置界面 function hideChartSettingComponent(refresh) { if ($('.chartSetting').is(':visible')) { //隐藏设置界面 $('.chartSetting').hide(); //.luckysheet-modal-dialog-resize为图表显示框的缩放框,.luckysheet-modal-dialog-controll为显示框右边的控制按钮 $('#luckysheet-cell-main .luckysheet-modal-dialog-resize, #luckysheet-cell-main .luckysheet-modal-dialog-controll').hide() $('#luckysheet-cell-main').find('.luckysheet-datavisual-selection-set div').remove() chartInfo.chartparam.luckysheetCurrentChartActive = false if (!isEditMode() && !refresh) { setTimeout(function () { luckysheetsizeauto() }, 0) } } } // 隐藏其他sheet的图表,显示当前sheet的图表 chartMix 切换sheet页显示隐藏图表 function renderChartShow(index) { //传入index,图表显示隐藏 selectRangeBorderHide('true') //隐藏数据高亮区域,随意传入一个字符串,表示不处理chartSetting界面 const luckysheetfile = chartInfo.luckysheetfile; luckysheetfile.forEach((file) => { //切换当前页的所有图表都显示出来 if (file.index == index) { const chartLists = file.chart || []; chartLists.forEach((chart) => { chart.isShow = true; $('#' + chart.chart_id + '_c').show(); if (chart.needRangeShow == true) { //一个sheet页只有一个图表高亮显示,//重要!因为在store了做了存储,所以能在此处找到对应图表设置显示隐藏 //操作DOM当前图表选择区域高亮 selectRangeBorderShow(chart.chart_id) } }) } // 隐藏其他页的图表 else { const chartLists = file.chart || []; chartLists.forEach((chart) => { chart.isShow = false; $('#' + chart.chart_id + '_c').hide(); }) } }); } export { chart, createLuckyChart, hideAllNeedRangeShow, renderChartShow }