HEX
Server: nginx/1.22.1
System: Linux VM-16-9-centos 3.10.0-1160.99.1.el7.x86_64 #1 SMP Wed Sep 13 14:19:20 UTC 2023 x86_64
User: www (1001)
PHP: 7.3.31
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/oa.sanjiangapp.com/app/cash/block/view/chartblock.html.php
<?php $jsRoot = $config->webRoot . "js/";?>
<script src="<?php echo $jsRoot . 'chartjs/chart.2.9.4.min.js'?>"></script>

<table class='table active-disabled'>
  <tr class='text-top'>
    <td>
      <div class='chart-wrapper text-center'>
        <h5><?php echo $chartTitle;?></h5>
        <div class='chart-canvas'>
          <?php $height = $longBlock ? '200' : '400';?>
          <?php if($type == 'monthTrade'):?>
          <style>
          .legend ul li{list-style:none;display:inline-block;margin-right:2%;}
          .legend ul li span{ width:50px; height:15px;display:inline-block;margin-right:5px;vertical-align: middle;text-align: center;}
          .legend ul li .lineLegend {height:3px;}
          .legend ul li .in{background-color:<?php echo $config->block->chartOptions['color']['in'];?>}
          .legend ul li .out{background-color:<?php echo $config->block->chartOptions['color']['out'];?>}
          </style>
          <div id='legend' class='legend'>
            <ul class="0-legend">
              <li><span class='lineLegend in'></span><?php echo $lang->trade->in;?></li>
              <li><span class='lineLegend out'></span><?php echo $lang->trade->out;?></li>
              <li><span class='in'></span><?php echo $lang->trade->in;?></li>
              <li><span class='out'></span><?php echo $lang->trade->out;?></li>
            </ul>
          </div>
          <?php endif;?>
          <canvas name="<?php echo 'chart-' . $type;?>" width='800' height='<?php echo $height;?>' data-responsive='true'></canvas>
        </div>
      </div>
    </td>
  </tr>
</table>

<?php js::set('data', $data);?>
<?php js::set('type', $type);?>
<script>
var options =
{
    /* Set canvas top margin. */
    layout: {padding:{top: 20}},
    hover:  {animationDuration: 0},

    animation:
    {
        duration: 1,
        /* Set value on bar. */
        onComplete: function()
        {
            var that          = this;
            var chartInstance = that.chart;
            var ctx           = chartInstance.ctx;
            ctx.font          = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
            ctx.textAlign     = 'center';
            ctx.textBaseline  = 'bottom';
            that.data.datasets.forEach(function(dataset, i)
            {
                if(dataset.showData != undefined && !dataset.showData) return;

                chartInstance.controller.getDatasetMeta(i).data.forEach(function (bar, index)
                {
                    if(that._hoverIndex && that._hoverIndex.indexOf('|' + [i, index].join(',') + '|') >= 0) return;

                    var data = dataset.data[index];
                    /* Set different value color. */
                    ctx.fillStyle = data >= 0 ? '#333' : 'red';
                    /* Set different value position. */
                    var modelY = data >= 0 ? bar._model.y - 5 : bar._model.y + 15;
                    ctx.fillText(data, bar._model.x, modelY);
                });
            });
        }
    },

    legend:  {display: false},
    scales:  {xAxes: [{ticks: {padding: 15}}], yAxes: [{ticks: {beginAtZero: true}}]},
    onHover: function(event, elements)
    {
        var hoverIndexes = [];
        if(elements.length)
        {
            for(var i = 0; i < elements.length; i++)
            {
                var element = elements[i];
                hoverIndexes.push([element._datasetIndex, element._index].join(','));
            }
        }
        this._hoverIndex = hoverIndexes.length ? '|' + hoverIndexes.join('|') + '|' : '';
    }
};

$(function()
{
    /* Adjust yearprofit block height. */
    if(v.type == 'yearProfit')
    {
        var height = '590';
        if($(document).width() < 1500) height = '370';
        $('[name=chart-yearProfit]').attr('width', '800').attr('height', height);
    }

    /* Generate charts. */
    for(var i = 0; i < $('[name=chart-' + v.type + ']').length; i++)
    {
        var ctx     = $('[name=chart-' + v.type + ']')[i].getContext('2d');
        var myChart = new Chart(ctx,
        {
            type: 'bar',
            data: v.data,
            options: options
        });
    }
});
</script>