| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755 |
- window.afterPageUpdate = function($target, info, options)
- {
- window.isDropdown = false;
- window.lineCount = 1;
- window.checkedList = window.initCheckedList();
- window.chartList = [];
- for(key in chartTypeList) {
- chartList.push({value: key, text: chartTypeList[key]});
- }
- window.filterChecked = {};
- if(viewType == 'single')
- {
- var metricCurrent = $('.metric-tree .metric-current');
- if(metricCurrent.length) metricCurrent[0].scrollIntoView({block: 'center', inline: 'start' })
- }
- if(viewType == 'multiple')
- {
- window.renderCheckedLabel();
- $(window).on('resize', window.renderCheckedLabel);
- }
- window.addTitle2Star();
- window.addDivider();
- window.initFilterPanel();
- }
- window.initCheckedList = function()
- {
- if(viewType == 'multiple' && (typeof window.checkedList !== 'undefined' && Array.isArray(window.checkedList) && window.checkedList.length > 1))
- {
- return window.checkedList;
- }
- else
- {
- return [{id:current.id + '', name:current.name}];
- }
- }
- window.addTitle2Star = function()
- {
- $('.metric-collect').attr('title', collectStar);
- }
- window.addDivider = function()
- {
- let features = $('#featureBar .nav-feature').find('li.nav-item');
- let lastItem = features[features.length - 1];
- $(lastItem).addClass('divider-before');
- }
- /* 事件处理函数。 */
- window.handleCheckboxChange = function($el)
- {
- $el = $($el);
- var isChecked = $el.is(":checked");
- var value = $el.val();
- var text = $el.next().text();
- if(!isChecked && window.checkedList.length == 1)
- {
- $el.prop('checked', true);
- return;
- }
- if(isChecked && window.checkedList.length >= 10)
- {
- $el.prop('checked', false);
- return messagerWarning(maxSelectMsg.replace('%s', maxSelectNum));
- }
- window.updateCheckAction(value, text, isChecked);
- }
- window.handleNavMenuClick = function($el)
- {
- var scope = $el.attr('id');
- window.ajaxGetMetrics(scope, '', function(total){
- window.deactiveNavMenu();
- window.hideFilterPanel();
- window.resetFilterPanel();
- $el.addClass('active');
- $el.append(`<span class="label size-sm rounded-full white">${total}</span>`);
- })
- }
- window.handleFilterCheck = function()
- {
- window.updateFilterCheck();
- }
- window.handleFilterToggle = function($el)
- {
- toggleSearchBtn();
- $('.filter-panel').toggleClass('hidden');
- }
- window.handleFilterClearItem = function($el)
- {
- $el = $($el);
- if(!$el.length) return;
- var $checkboxList = $el.closest('.panel').find('.panel-body .check-list-inline .checkbox-primary');
- $checkboxList.each(function(index, elem){
- $(elem).find('input').prop('checked', false);
- });
- window.updateFilterCheck();
- }
- window.handleFilterClearAll = function($el)
- {
- $el = $($el);
- if(!$el.length) return;
- var $checkboxList = $el.closest('.panel').find('.panel-body .check-list-inline .checkbox-primary');
- $checkboxList.each(function(index, elem){
- $(elem).find('input').prop('checked', false);
- });
- window.updateFilterCheck();
- }
- window.handleFilterClick = function()
- {
- var filterBase64 = btoa(JSON.stringify(window.filterChecked));
- if(viewType == 'multiple')
- {
- window.ajaxGetMetrics('filter', filterBase64, function(total)
- {
- window.deactiveNavMenu();
- $('.side-title').text(filterLang.filterTotal.replace('%s', total));
- });
- return;
- }
- loadPage($.createLink('metric', 'preview', 'scope=filter&viewType=' + viewType + '&metricID=0&filtersBase64=' + filterBase64));
- }
- window.handleChartTypeChange = function(metricID, viewType = 'single')
- {
- if(viewType == 'single')
- {
- var chartType = $('[name=chartType]').val();
- }
- else
- {
- var chartType = $('#metricBox' + metricID).find('[name=chartType]').val();
- }
- var $form = $('#queryForm' + metricID);
- var formData = window.getFormData($form);
- $.post($.createLink('metric', 'ajaxGetEchartsOptions', 'metricID=' + metricID + '&chartType=' + chartType), formData, function(resp)
- {
- var options = JSON.parse(resp);
- if(!options) return;
- window.renderChart(metricID, viewType, options);
- });
- }
- window.handleRemoveLabel = function(id)
- {
- var checkedItem = window.checkedList.find(function(checked){return checked.id == id});
- if(!checkedItem) return;
- window.updateCheckAction(checkedItem.id, checkedItem.name, false);
- }
- window.handleDateLabelClick = function(evt)
- {
- $form = $(evt).closest('form');
- $form.find('.query-date button.btn').removeClass('selected');
- $form.find('.query-date-picker input[name="dateBegin"]').zui('datepicker').$.setValue('');
- $form.find('.query-date-picker input[name="dateEnd"]').zui('datepicker').$.setValue('');
- $(evt).addClass('selected');
- }
- window.handleCalcDateClick = function(evt)
- {
- $form = $(evt).closest('form');
- $form.find('.query-calc-date button.btn').removeClass('selected');
- $(evt).addClass('selected');
- }
- window.handleDatePickerChange = function(evt)
- {
- $form = $(evt).closest('form');
- var dateBegin = $form.find('.query-date-picker input[name="dateBegin"]').zui('datepicker').$.value;
- var dateEnd = $form.find('.query-date-picker input[name="dateEnd"]').zui('datepicker').$.value;
- if(dateBegin.length && dateEnd.length)
- {
- $form.find('.query-date button.btn').removeClass('selected');
- }
- }
- /* 事件处理函数结束。 */
- window.isMetricChecked = function(id)
- {
- return window.checkedList.filter(function(metric){return metric.id == id}).length != 0;
- }
- window.updateCheckList = function(id, name, isChecked)
- {
- if(isChecked)
- {
- return window.checkedList.push({id: id, name: name});
- }
- window.checkedList = window.checkedList.filter(function(item){return item.id != id});
- }
- window.updateCheckAction = function(id, name, isChecked)
- {
- window.updateCheckList(id, name, isChecked);
- window.updateCheckbox(id, isChecked);
- window.renderCheckedLabel();
- window.updateMetricBoxs(id, isChecked);
- }
- window.ajaxGetMetrics = function(scope, filters = '', callback)
- {
- $.get($.createLink('metric', 'ajaxGetMetrics', 'scope=' + scope + '&filters=' + filters), function(resp){
- var metrics = JSON.parse(resp);
- var total = metrics.length;
- var checked = window.checkedList.map(obj => obj.id).join(',');
- var url = $.createLink('metric', 'ajaxGetMetricSideTree', 'scope=' + scope + '&checkedList=' + checked + '&filters=' + filters);
- $('.side .metric-tree').empty();
- loadTarget(url, '.side .metric-tree');
- if(typeof callback == 'function') callback(total);
- });
- }
- window.updateFilterCheck = function()
- {
- var selector = '.filter-panel .panel-body .check-list-inline .checkbox-primary input:checked';
- window.filterChecked = {'scope': [], 'object': [], 'purpose': []};
- var hasChecked = false;
- $(selector).each(function(index, elem){
- var name = $(elem).attr('name');
- var value = $(elem).val();
- window.filterChecked[name].push(value);
- hasChecked = true;
- });
- if(!hasChecked)
- {
- $('.filter-btn .common').removeClass('hidden');
- $('.filter-btn .checked').addClass('hidden');
- return;
- }
- $('.filter-btn .common').addClass('hidden');
- $('.filter-btn .checked').removeClass('hidden');
- var checkedInfo = filterLang.checkedInfo;
- checkedInfo = checkedInfo.replace('%s', window.filterChecked.scope.length);
- checkedInfo = checkedInfo.replace('%s', window.filterChecked.object.length);
- checkedInfo = checkedInfo.replace('%s', window.filterChecked.purpose.length);
- $('.filter-btn .checked').text(checkedInfo);
- }
- window.resetFilterPanel = function()
- {
- var $checkboxList = $('.filter-panel .panel').find('.panel-body .check-list-inline .checkbox-primary');
- $checkboxList.each(function(index, elem){
- $(elem).find('input').prop('checked', false);
- });
- window.updateFilterCheck();
- $('.side-title').text(metricListLang);
- }
- window.initFilterPanel = function()
- {
- if(!$('.filter-panel').length) return;
- $('#mainMenu').after($('.filter-panel'));
- toggleSearchBtn(true);
- if(scope == 'filter')
- {
- toggleSearchBtn(false);
- $('.filter-panel').removeClass('hidden');
- window.updateFilterCheck();
- }
- else
- {
- window.hideFilterPanel();
- }
- }
- window.getMetricRecordType = function(recordRow)
- {
- if(!recordRow) return false;
- var type = [];
- if(recordRow.scope) type.push('scope');
- if(recordRow.date) type.push('date');
- if(type.length == 0) type.push('system');
- return type.join('-');
- }
- window.renderChart = function(metricID, viewType, options)
- {
- var $currentBox = $('#metricBox' + metricID);
- if(viewType == 'single') $currentBox = $('.table-and-chart-single');
- if(!$currentBox.find('.chart').length) return;
- var classes = viewType == 'single' ? 'chart chart-single' : 'chart chart-multiple';
- $currentBox.find('.chart').remove();
- $currentBox.find('.chart-side').append('<div class="' + classes + '"></div>');
- window.renderEchart($currentBox.find('.chart')[0], options);
- }
- window.renderEchart = function($obj, option)
- {
- $.getLib(config.webRoot + 'js/echarts/echarts.common.min.js', {root: false}, function() {
- var myChart = echarts.init($obj);
- option && myChart.setOption(option);
- });
- }
- window.setDropDown = function()
- {
- var $drop = $('.dropdown-icon');
- $drop.toggleClass('rotate');
- if($drop.hasClass('rotate'))
- {
- window.isDropdown = true;
- window.unfoldContent();
- }
- else
- {
- window.isDropdown = false;
- window.foldContent();
- }
- }
- window.unfoldContent = function()
- {
- var $content = $('.checked-content');
- var contentHeight = 48 + (window.lineCount - 1) * 40;
- $content.height(contentHeight);
- window.setMultiTableHeight(contentHeight);
- setTimeout(function(){
- $content.find('.gray-next').addClass('gray-visible');
- $content.find('.gray-next').removeClass('gray-hidden');
- }, 300);
- }
- window.foldContent = function()
- {
- var $content = $('.checked-content');
- var contentHeight = 48;
- $content.height(contentHeight);
- window.setMultiTableHeight(contentHeight);
- $content.find('.gray-next').addClass('gray-hidden');
- $content.find('.gray-next').removeClass('gray-visible');
- }
- window.updateMetricBoxs = function(id, isChecked)
- {
- if(!isChecked)
- {
- $('#metricBox' + id).remove();
- $('.table-and-charts').first().find('.metric-name').removeClass('metric-name-notfirst');
- }
- else
- {
- window.appendMetricBox(id);
- }
- }
- /**
- * 多选添加一个度量项到展示区。
- * Add a metricBox.
- *
- * @access public
- * @return void
- */
- window.appendMetricBox = function(id, mode = 'add')
- {
- var url = $.createLink('metric', 'ajaxGetMultipleMetricBox', 'metricID=' + id);
- var metricDom = $('<div>');
- var metricID = 'metricBox' + id;
- metricDom.attr('id', metricID);
- metricDom.attr('metric-id', id);
- metricDom.addClass('metricBox');
- $('.table-and-charts').append(metricDom);
- loadTarget(url, metricID);
- }
- window.handleQueryClick = function(id, viewType = 'single')
- {
- var $form = $('#queryForm' + id);
- var check = window.validateForm($form);
- if(!check) return;
- var formData = window.getFormData($form);
- var scopeValue = formData.get('scope') === null ? '' : formData.get('scope');
- var calcDate = formData.get('calcDate') === null ? '' : formData.get('calcDate');
- var dateBegin = formData.get('dateBegin') === null ? '' : formData.get('dateBegin').replace(/-/g, '_');
- var dateEnd = formData.get('dateEnd') === null ? '' : formData.get('dateEnd').replace(/-/g, '_');
- $.post($.createLink('metric', 'ajaxGetTableAndCharts', 'metricID=' + id + '&scope=' + scopeValue + '&calcDate=' + calcDate + '&dateBegin=' + dateBegin + '&dateEnd=' + dateEnd + '&viewType=' + viewType), formData, function(resp)
- {
- if(viewType == 'multiple')
- {
- $('#metricBox' + id).find('.table-and-chart').replaceWith(resp);
- }
- else
- {
- $('.table-and-chart-single').replaceWith(resp);
- }
- });
- }
- window.validateForm = function($form)
- {
- var formSerialize = $form.serialize();
- var formObj = window.parseSerialize(formSerialize);
- var dateBegin = formObj.dateBegin?.length ? new Date(formObj.dateBegin) : false;
- var dateEnd = formObj.dateEnd?.length ? new Date(formObj.dateEnd) : false;
- if(dateBegin && dateEnd && dateBegin > dateEnd)
- {
- zui.Messager.show(errorDateRange, {type: 'danger', time: 2000});
- return false;
- }
- return true;
- }
- window.getFormData = function($form)
- {
- var $dateBegin = $form.find('.query-date-picker input[name="dateBegin"]');
- var $dateEnd = $form.find('.query-date-picker input[name="dateEnd"]');
- var $selectedDate = $form.find('.query-date button.selected');
- var dateBeginValue = $dateBegin.length ? $dateBegin.zui('datepicker').$.value : '';
- var dateEndValue = $dateEnd.length ? $dateEnd.zui('datepicker').$.value : '';
- if(!$selectedDate.length && $dateBegin.length && $dateEnd.length && (!dateBeginValue.length || !dateEndValue.length))
- {
- var buttons = $form.find('.query-date button');
- $(buttons[0]).addClass('selected');
- $form.find('.query-date-picker input[name="dateBegin"]').zui('datepicker').$.setValue('');
- $form.find('.query-date-picker input[name="dateEnd"]').zui('datepicker').$.setValue('');
- }
- var formSerialize = $form.serialize();
- var formObj = window.parseSerialize(formSerialize);
- var formData = new FormData();
- for(var key in formObj)
- {
- var value = formObj[key];
- if(key.startsWith('scope')) key = 'scope';
- formData.append(key, value);
- }
- if($selectedDate.length)
- {
- formData.append('dateLabel', $selectedDate.attr('key'));
- formData.delete('dateBegin');
- formData.delete('dateEnd');
- }
- var $calcDate = $form.find('.query-calc-date button.selected');
- if($calcDate.length)
- {
- formData.append('calcDate', $calcDate.attr('key'));
- }
- return formData;
- }
- window.collectMetric = function(id)
- {
- $.get($.createLink('metric', 'ajaxCollectMetric', 'metricID=' + id), function(resp)
- {
- var result = JSON.parse(resp);
- $('.metric-collect-' + id).find('i').attr('class', result.collect ? 'icon icon-star star' : 'icon icon-star-empty star-empty');
- });
- }
- window.handleSidebarToggle = function(status)
- {
- setTimeout(function(){
- $('.chart-side .chart').children().each(function(index, elem){
- var chart = $(elem).zui().chart;
- if(!chart) return;
- chart.resize();
- });
- }, 300);
- }
- window.renderCheckedLabel = function()
- {
- var $content = $('.picker-multi-selections');
- if(!$content.length) return;
- $content.empty();
- var tpl = $('#item-tpl').html();
- var labels = JSON.parse(JSON.stringify(window.checkedList));
- var multi = labels.length > 1;
- var width = Math.floor($content.width());
- var left = width;
- // 当nextLine 在left <= 0 中置true后,代表接下来的元素都是换行的
- var nextLine = false;
- var lineCount = 1;
- for(var i = 0; i < labels.length; i++)
- {
- var classes = 'picker-multi-selection';
- if(nextLine) classes += ' gray-next';
- var label = labels[i];
- var data = {
- id: label.id,
- name: label.name,
- spanClass: classes,
- multiple: multi ? '' : 'hidden',
- };
- var html = $(zui.formatString(tpl, data));
- $content.append(html);
- var $label = $content.find('[metric-id="' + label.id + '"]');
- var labelWidth = $label.width();
- var labelLeft = parseInt($label.css('padding-left')) + parseInt($label.css('margin-left'));
- var labelRight = parseInt($label.css('padding-right')) + parseInt($label.css('margin-right'));
- var labelWidth = Math.ceil(labelWidth + labelLeft + labelRight + 2);
- left = left - labelWidth;
- if(left <= 0)
- {
- var $div = $label.find('.text');
- var divWidth = $div.width();
- if(divWidth < -left)
- {
- // 如果剩下的空间一点字都显示不下了,就换行
- left = width - labelWidth;
- // 如果列表是折叠的还没判定换行但是这一行一点字都显示不下,从这里加next类
- if(!nextLine) $label.addClass('gray-next');
- // 此时已经换行了,行数加1
- lineCount ++;
- }
- else
- {
- // 通过设置div的宽度,减少文字的内容
- $div.width(Math.floor($div.width()) - Math.ceil(-left) - 1);
- // 换行了,重置left
- left = width;
- // 如果这个元素后面还有元素,说明行数要+1
- if(i + 1 < labels.length) lineCount ++;
- }
- nextLine = true;
- }
- }
- $(".metric-remove").addClass('hidden');
- $('.details').removeClass('details-after');
- if(!multi)
- {
- var maxSelectTipText = maxSelectTip.replace('%s', maxSelectNum);
- $content.append(`<span class="label ghost">${maxSelectTipText}</span>`);
- }
- else
- {
- $(".metric-remove").removeClass('hidden');
- $('.details').addClass('details-after');
- }
- if(!window.isDropdown) $content.find('.gray-next').addClass('gray-hidden');
- $('.dropdown-icon').addClass('visibility-hidden');
- if(lineCount >= 2) $('.dropdown-icon').removeClass('visibility-hidden');
- var contentHeight = 48 + (lineCount - 1) * 40;
- if(window.lineCount != lineCount && window.isDropdown)
- {
- // 在展开状态缩放到只有一行了
- if(lineCount == 1)
- {
- $('.dropdown-icon').toggleClass('rotate');
- window.isDropdown = false;
- window.foldContent();
- }
- // 在展开状态多了若干行, 或者少了若干行
- else
- {
- $('.checked-content').height(contentHeight);
- window.setMultiTableHeight(contentHeight);
- }
- }
- window.lineCount = lineCount;
- $('.checked-tip').html(selectCount.replace('%s', labels.length));
- }
- /* 纯函数 */
- window.renderHeight = function()
- {
- return $('.table-side').height();
- }
- window.parseSerialize = function(serialize)
- {
- var result = {};
- serialize = serialize.replaceAll('%5B%5D', '');
- var items = serialize.split('&');
- for(var i = 0; i < items.length; i++)
- {
- var item = items[i].split('=');
- var key = item[0];
- var value = item[1];
- if(!result[key]) result[key] = [];
- if(key.startsWith('scope'))
- {
- result[key].push(value);
- }
- else
- {
- result[key] = value;
- }
- }
- return result;
- }
- window.generateCheckItem = function(text, value, scope, isChecked)
- {
- var checked = isChecked ? 'checked=""' : '';
- var currentClass = isChecked ? 'metric-current' : '';
- return `<div class="font-medium checkbox-primary ${currentClass}">
- <input type="checkbox" id="metric${value}" name="metric" ${checked} value="${value}" scope="${scope}" onchange="window.handleCheckboxChange(this)">
- <label for="metric${value}">${text}</label>
- </div>`;
- }
- window.messagerWarning = function(message)
- {
- return zui.Messager.show({
- content: message,
- icon: 'icon-exclamation-pure',
- iconClass: 'center w-6 h-6 rounded-full m-0 warning',
- contentClass: 'text-lg font-bold',
- close: false,
- className: 'p-6 bg-white text-black gap-2 messager-fail',
- });
- }
- window.getTableHeight = function(actual)
- {
- return Math.min(800, $('.table-side').height());
- }
- window.setMultiTableHeight = function(contentHeight)
- {
- $('.table-and-charts').css('max-height', 'calc(100% - ' + contentHeight + 'px)');
- }
- window.updateCheckbox = function(id, isChecked)
- {
- var $el = $('.side .metric-tree .check-list input#metric' + id);
- $el.prop('checked', isChecked);
- if(isChecked)
- {
- return $el.closest('.checkbox-primary').addClass('metric-current');
- }
- $el.closest('.checkbox-primary').removeClass('metric-current');
- }
- window.genDataZoom = function(dataLength, initZoom = 10, axis = 'x')
- {
- var percent = initZoom / dataLength * 100;
- percent = percent > 100 ? 100 : percent;
- var dataZoom = {
- start: 0,
- end: percent,
- };
- if(axis == 'x') dataZoom.xAxisIndex = [0];
- if(axis == 'y') dataZoom.yAxisIndex = [0];
- return [dataZoom];
- }
- window.hideFilterPanel = function()
- {
- toggleSearchBtn(false);
- $('.filter-panel').addClass('hidden');
- }
- window.deactiveNavMenu = function()
- {
- var itemSelector = 'menu.nav-ajax .nav-item a';
- $(itemSelector).removeClass('active');
- $(itemSelector).find('span.label').remove();
- }
- window.toggleSearchBtn = function(active = null)
- {
- if(active === null)
- {
- $('.filter-btn').toggleClass('ring-primary');
- $('.icon-search').toggleClass('text-primary');
- $('.filter-btn-text').toggleClass('text-primary');
- }
- else
- {
- if(active)
- {
- $('.filter-btn').addClass('ring-primary');
- $('.icon-search').addClass('text-primary');
- $('.filter-btn-text').addClass('text-primary');
- }
- else
- {
- $('.filter-btn').removeClass('ring-primary');
- $('.icon-search').removeClass('text-primary');
- $('.filter-btn-text').removeClass('text-primary');
- }
- }
- }
- window.collapseFilters = function()
- {
- $('.collapse-icon').toggleClass('icon-chevron-double-up');
- $('.collapse-icon').toggleClass('icon-chevron-double-down');
- $('[data-collapse=true]').parent('.checkbox-primary').toggleClass('hidden');
- }
- $(document).ready(function()
- {
- $('[data-collapse=true]').parent('.checkbox-primary').addClass('hidden');
- })
|