* @package chart * @link https://www.zentao.net */ namespace zin; $generateCharts = function() use($charts, $lang) { if(empty($charts)) return div(setClass('bg-canvas center text-gray w-full h-40'), $lang->chart->noChart); $chartList = array(); foreach($charts as $chart) { $options = array(); $filters = array(); foreach($chart->filters as $filter) { $name = $filter['name']; $type = $filter['type']; $field = $filter['field']; $value = zget($filter, 'default', ''); if($type == 'select' && !isset($options[$field])) { $fieldSetting = $chart->fieldSettings[$field]; $options[$field] = $this->chart->getSysOptions($fieldSetting['type'], $fieldSetting['object'], $fieldSetting['field'], $chart->sql, zget($filter, 'saveAs', ''), $chart->driver); } $filters[] = resultFilter(set(array('title' => $name, 'type' => $type, 'name' => $field, 'value' => $value, 'items' => zget($options, $field, array())))); } $chartID = $chart->currentGroup . '_' . $chart->id; $chartOptions = $this->chart->getEchartOptions($chart); $chartList[] = panel ( setID('chartPanel_' . $chartID), set::title($chart->name), set::shadow(false), set::headingClass('h-14'), set::bodyClass('pt-0'), $filters ? div ( setID('filter_' . $chartID), setClass('flex justify-between bg-canvas'), div ( setClass('flex flex-wrap w-full'), $filters ), button ( setClass('btn primary'), setData(array('on' => 'click', 'call' => "loadChart('{$chartID}')")), set::title($lang->chart->updateCurrentChart), $lang->chart->query ) ) : null, div ( setID('chart_' . $chartID), setClass('echart-content'), set('data-group', $chart->currentGroup), set('data-id', $chart->id), $this->chart->isChartHaveData($chartOptions, $chart->type) ? echarts ( set($chartOptions), set::width('100%'), set::height(400), $chart->type == 'waterpolo' ? set::exts('liquidfill') : null, ) : div ( setClass('no-data'), div ( setClass('no-data-dom'), span(setClass('text-muted'), $this->lang->chart->noData) ) ) ) ); } return $chartList; };