charts.html.php 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. /**
  3. * The preview view file of chart module of ZenTaoPMS.
  4. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  5. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  6. * @author Chenxuan Song <songchenxuan@easycorp.ltd>
  7. * @package chart
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. $generateCharts = function() use($charts, $lang)
  12. {
  13. if(empty($charts)) return div(setClass('bg-canvas center text-gray w-full h-40'), $lang->chart->noChart);
  14. $chartList = array();
  15. foreach($charts as $chart)
  16. {
  17. $options = array();
  18. $filters = array();
  19. foreach($chart->filters as $filter)
  20. {
  21. $name = $filter['name'];
  22. $type = $filter['type'];
  23. $field = $filter['field'];
  24. $value = zget($filter, 'default', '');
  25. if($type == 'select' && !isset($options[$field]))
  26. {
  27. $fieldSetting = $chart->fieldSettings[$field];
  28. $options[$field] = $this->chart->getSysOptions($fieldSetting['type'], $fieldSetting['object'], $fieldSetting['field'], $chart->sql, zget($filter, 'saveAs', ''), $chart->driver);
  29. }
  30. $filters[] = resultFilter(set(array('title' => $name, 'type' => $type, 'name' => $field, 'value' => $value, 'items' => zget($options, $field, array()))));
  31. }
  32. $chartID = $chart->currentGroup . '_' . $chart->id;
  33. $chartOptions = $this->chart->getEchartOptions($chart);
  34. $chartList[] = panel
  35. (
  36. setID('chartPanel_' . $chartID),
  37. set::title($chart->name),
  38. set::shadow(false),
  39. set::headingClass('h-14'),
  40. set::bodyClass('pt-0'),
  41. $filters ? div
  42. (
  43. setID('filter_' . $chartID),
  44. setClass('flex justify-between bg-canvas'),
  45. div
  46. (
  47. setClass('flex flex-wrap w-full'),
  48. $filters
  49. ),
  50. button
  51. (
  52. setClass('btn primary'),
  53. setData(array('on' => 'click', 'call' => "loadChart('{$chartID}')")),
  54. set::title($lang->chart->updateCurrentChart),
  55. $lang->chart->query
  56. )
  57. ) : null,
  58. div
  59. (
  60. setID('chart_' . $chartID),
  61. setClass('echart-content'),
  62. set('data-group', $chart->currentGroup),
  63. set('data-id', $chart->id),
  64. $this->chart->isChartHaveData($chartOptions, $chart->type) ? echarts(set($chartOptions), set::width('100%'), set::height(400), $chart->type == 'waterpolo' ? set::exts('liquidfill') : null) : div
  65. (
  66. setClass('no-data'),
  67. div
  68. (
  69. setClass('no-data-dom'),
  70. span(setClass('text-muted'), $this->lang->chart->noData)
  71. )
  72. )
  73. )
  74. );
  75. }
  76. return $chartList;
  77. };