HTML页面: <script src="/assets/plugins/highcharts-6.1.0/code/highcharts.js"></script> <script src="/assets/plugins/highcharts-6.1.0/code/modules/exporting.js"></script> <script src="/assets/plugins/highcharts-6.1.0/code/modules/oldie.js"></script> <script src="https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js"></script> <script src="/assets/plugins/jquery/jquery-1.8.3.min.js"></script> <script> $('body').css('background-color', '#fff'); var arr = ''; arr = {{ now_date_num }} var cate_arr = {{ date_num }}; var date=new Date; var year=date.getFullYear(); var month=date.getMonth()+1; var subject = 'container'; var chart = Highcharts.chart(subject, { credits: { enabled: false // 禁用版权信息 }, chart: { type: 'line' }, title: { text: year+'年'+ month+'月微信订单分析' }, subtitle: { useHTML: true, align: 'center', text: '<a href="javascript:void(0)" class="month_1">一月</a> <a href="javascript:void(0)" class="month_1">二月</a><a href="javascript:void(0)" class="month_1">三月</a><a href="javascript:void(0)" class="month_1">四月</a><a href="javascript:void(0)" class="month_1">五月</a><a href="javascript:void(0)" class="month_1">六月</a><a href="javascript:void(0)" class="month_1">七月</a><a href="javascript:void(0)" class="month_1">八月</a><a href="javascript:void(0)" class="month_1">九月</a><a href="javascript:void(0)" class="month_1">十月</a><a href="javascript:void(0)" class="month_1">十一月</a><a href="javascript:void(0)" class="month_1">十二月</a>' }, xAxis: { title: { text: '日期' }, categories: cate_arr }, yAxis: { title: { text : '销售金额', } }, plotOptions: { line: { dataLabels: { // 开启数据标签 enabled: true }, // 关闭鼠标跟踪,对应的提示框、点击事件会失效 enableMouseTracking: true, } }, series: [{ name: '{{ cny_total_amount }}(CNY)', data: {{ cny_amount }} }, { name: '{{ usd_total_amount }}(USD)', data: {{ usd_amount }} }] }); $(document).on('click', '.month_1', function(){ var text = $(this).html(); $.post('/admin/order_monthly_analysis/get_month_data',{id:text},function(data){ chart.series[0].update({ name:data.cny_total_amount+'(CNY)', data:data.cny_amount }); //修改数据 chart.series[1].update({ name:data.usd_total_amount+'(USD)', data:data.usd_amount }); //动态x轴 chart.xAxis[0].update({ categories: data.date_num }); //修改标题 chart.title.update({ text: year+'年'+ data.month+'月微信订单分析' }); },'json') }) </script>
PHP代码:
public function index() { $sql = "SELECT date_format(pay_time,'%Y-%m-%d') AS dt,currency_unit,SUM(total_amount) as amount FROM swap_order"; $sql .= " WHERE flag != '定制订单' AND order_state >0 AND refund_state = 0 AND pay_state = 1 AND is_delete =".Action::UNDELETED." AND date_format(pay_time,'%Y-%m') = date_format(now(), '%Y-%m') "; $sql .= " GROUP BY date_format(pay_time,'%Y-%m-%d'),currency_unit"; $sql .= " ORDER BY dt"; $data = $this->orderModel->query($sql); $cny_total_amount = 0; $usd_total_amount = 0; $cny_amount = []; $usd_amount = []; $now_date_num = date('t');//当月的天数 $date_num = []; for ($i=1;$i<=$now_date_num;$i++) { array_push($date_num, $i); } foreach ($data as $key => $value) { $er = substr($value['dt'], -2); $da = intval($er); if ($value['currency_unit'] == 'CNY') { $data[$key]['amount'] = (float)bcdiv($value['amount'], 100, 2); $cny_total_amount += $value['amount']; $cny_amount[$da] = $data[$key]['amount']; } if ($value['currency_unit'] == 'USD') { $data[$key]['amount'] = (float)bcdiv($value['amount'], 100, 2); $usd_total_amount += $value['amount']; $usd_amount[$da] = $data[$key]['amount']; } } $data_cny = []; $data_usd = []; for ($i=1; $i<=$now_date_num; $i++) { $is_true = ''; foreach ($cny_amount as $key => $value) { if ($i == $key) { $is_true = array_push($data_cny, $value); } } if ($is_true) { continue; } array_push($data_cny, null); } for ($i=1; $i<=$now_date_num; $i++) { $is_true = ''; foreach ($usd_amount as $key => $value) { if ($i == $key) { $is_true = array_push($data_usd, $value); } } if ($is_true) { continue; } array_push($data_usd, null); } $res['data'] = $data; $res['cny_total_amount'] = bcdiv($cny_total_amount, 100, 2); $res['usd_total_amount'] = bcdiv($usd_total_amount, 100, 2); $res['cny_amount'] = json_encode($data_cny); $res['usd_amount'] = json_encode($data_usd); $res['now_date_num'] = (float)$now_date_num; $res['date_num'] = json_encode($date_num); $this->render('order_monthly_analysis', $res); } public function get_month_data() { $id = $this->getParams('id'); $year = date('Y'); $sdt = ''; if ($id) { switch($id) { case '一月' : $sdt = $year.'-01'; break; case '二月' : $sdt = $year.'-02'; break; case '三月' : $sdt = $year.'-03'; break; case '四月' : $sdt = $year.'-04'; break; case '五月' : $sdt = $year.'-05'; break; case '六月' : $sdt = $year.'-06'; break; case '七月' : $sdt = $year.'-07'; break; case '八月' : $sdt = $year.'-08'; break; case '九月' : $sdt = $year.'-09'; break; case '十月' : $sdt = $year.'-10'; break; case '十一月' : $sdt = $year.'-11'; break; case '十二月' : $sdt = $year.'-12'; break; } } else { $sdt = "date_format(now(),'%Y-%m')"; } $month = substr($sdt, -2); if ($id && $sdt) { $sdt = "'$sdt'"; } $sql = "SELECT date_format(pay_time,'%Y-%m-%d') AS dt,currency_unit,SUM(total_amount) as amount FROM swap_order"; $sql .= " WHERE flag != '定制订单' AND order_state >0 AND refund_state = 0 AND pay_state = 1 AND is_delete =".Action::UNDELETED." AND date_format(pay_time,'%Y-%m') = ".$sdt; $sql .= " GROUP BY date_format(pay_time,'%Y-%m-%d'),currency_unit"; $sql .= " ORDER BY dt"; $data = $this->orderModel->query($sql); $cny_total_amount = 0; $usd_total_amount = 0; $cny_amount = []; $usd_amount = []; $sdt = trim($sdt, "'"); $now_date_num = date('t', strtotime($sdt)); $date_num = []; for ($i=1;$i<=$now_date_num;$i++) { array_push($date_num, $i); } foreach ($data as $key => $value) { $er = substr($value['dt'], -2); $da = intval($er); if ($value['currency_unit'] == 'CNY') { $data[$key]['amount'] = (float)bcdiv($value['amount'], 100, 2); $cny_total_amount += $value['amount']; $cny_amount[$da] = $data[$key]['amount']; } if ($value['currency_unit'] == 'USD') { $data[$key]['amount'] = (float)bcdiv($value['amount'], 100, 2); $usd_total_amount += $value['amount']; $usd_amount[$da] = $data[$key]['amount']; } } $data_cny = []; $data_usd = []; for ($i=1; $i<=$now_date_num; $i++) { $is_true = ''; foreach ($cny_amount as $key => $value) { if ($i == $key) { $is_true = array_push($data_cny, $value); } } if ($is_true) { continue; } array_push($data_cny, null); } for ($i=1; $i<=$now_date_num; $i++) { $is_true = ''; foreach ($usd_amount as $key => $value) { if ($i == $key) { $is_true = array_push($data_usd, $value); } } if ($is_true) { continue; } array_push($data_usd, null); } $res['data'] = $data; $res['cny_total_amount'] = bcdiv($cny_total_amount, 100, 2); $res['usd_total_amount'] = bcdiv($usd_total_amount, 100, 2); $res['cny_amount'] = $data_cny; $res['usd_amount'] = $data_usd; $res['now_date_num'] = (float)$now_date_num; $res['month'] = (int)$month; $res['date_num'] = $date_num; echo json_encode($res); }