• ODOO引用Echarts数据展示


    作为一个后端开发,首先想到的是将需要的数据进行处理反馈给前端。

    具体如下:

    然后就是专门的echarts模块(我这样写主要是因为echarts会用到的地方比较多,后续直接调用)

    1、

    2、echarts_action.xml

    3、actions.js

      1 ir_actions_act_window_expense_income_echarts: function (action, options) {
      2             var self = this;
      3             console.log(action)
      4             var dialog = new Dialog(
      5                 this,
      6                 _.extend({
      7                     $content: QWeb.render('Expense_Income_Chart', {
      8                         data: action.data,
      9                         help_text: action.help_text,
     10                         flags: action.flags,
     11                     }),
     12                     size: action.size || 'large',
     13                     title: action.name || _t('销售情况'),
     14                     buttons: [
     15                         {
     16                             text: _t('Close'),
     17                             close: true
     18                         }
     19                     ],
     20                 }, options)
     21             );
     22 
     23             dialog.opened().then(function () {
     24                 self._rpc({
     25                     route: '/web/sales_report_chart',
     26                     params: {
     27                         data: action.data
     28                     }
     29                 }).then(function (result) {
     30                     console.log(result)
     31                     var myChart = echarts.init(document.getElementById('chart-expense-income-report'));
     32 
     33                     var waterMarkText = 'ECHARTS';
     34                     var themeJson = result.hes_objs;
     35                     var canvas = document.createElement('canvas');
     36                     var ctx = canvas.getContext('2d');
     37                     canvas.width = canvas.height = 100;
     38                     ctx.textAlign = 'center';
     39                     ctx.textBaseline = 'middle';
     40                     ctx.globalAlpha = 0.08;
     41                     ctx.font = '20px Microsoft Yahei';
     42                     ctx.translate(50, 50);
     43                     ctx.rotate(-Math.PI / 4);
     44                     ctx.fillText(waterMarkText, 0, 0);
     45                     if (result.total_amount) {
     46                         var option = {
     47                         backgroundColor: {
     48                             type: 'pattern',
     49                             image: canvas,
     50                             repeat: 'repeat'
     51                         },
     52                         tooltip: {},
     53                         title: [{
     54                             text: result.title,
     55                             subtext: '总计: ' + result.sum_sales,
     56                             x: '25%',
     57                             textAlign: 'center'
     58                         },
     59                             {
     60                             text: '类型占比',
     61                             x: '75%',
     62                             textAlign: 'center'
     63                         }],
     64                         grid: [{
     65                             top: 100,
     66                              '70%',
     67                             bottom: '5%',
     68                             height: '80%',
     69                             left: 10,
     70                             containLabel: true
     71                         },],
     72                         xAxis: [{
     73                             type: 'category',
     74                             data: result.expense_name,
     75                             axisLabel: {
     76                                 interval: 0,
     77                             },
     78                             splitLine: {
     79                                 show: false
     80                             }
     81                         },],
     82                         yAxis: [{
     83                             type: 'value',
     84                             splitLine: {
     85                                 show: false
     86                             },
     87                             axisLabel: {
     88                                 interval: 0,
     89                                 rotate: 30,
     90                                 formatter: '{value} 元'
     91                             },
     92                         },],
     93                         series: [{
     94                             type: 'bar',
     95                             stack: 'chart',
     96                             z: 3,
     97                             label: {
     98                                 normal: {
     99                                     position: 'top',
    100                                     show: true
    101                                 }
    102                             },
    103                              itemStyle: {
    104                                         normal: {
    105                                             color: '#55A9AF'
    106                                         }
    107                                     },
    108                             data: result.total_amount
    109                         }, {
    110                             type: 'pie',
    111                             radius: [0, '30%'],
    112                             center: ['75%', '30%'],
    113                             data: Object.keys(themeJson).map(function (key) {
    114                                 return {
    115                                     name: key.replace('.js', ''),
    116                                     value: themeJson[key]
    117                                 }
    118                             }),
    119                             itemStyle: {
    120                                 emphasis: {
    121                                     shadowBlur: 10,
    122                                     shadowOffsetX: 0,
    123                                     shadowColor: 'rgba(0, 0, 0, 0.5)'
    124                                 }
    125                             }
    126                         }]
    127                     };
    128                     }
    129                     else {
    130                         var option = {
    131                             title: {
    132                                 text: "无数据!",
    133                             },
    134                         }
    135                     }
    136                     myChart.setOption(option);
    137                 }).fail(function (error, event) {
    138                     event.preventDefault();
    139                 }).always(function () {
    140                 });
    141             });
    142             return dialog.open();
    143         },
    js示例
  • 相关阅读:
    PAT甲级——A1006 Sign In and Sign Out
    PAT甲级——A1005 Spell It Right
    左神算法书籍《程序员代码面试指南》——1_05用一个栈实现另一个栈的排序
    左神算法书籍《程序员代码面试指南》——1_03如何使用递归函数和栈操作逆序一个栈
    PAT甲级——A1004 Counting Leaves
    PAT甲级——A1003Emergency
    Dijkstra算法
    PAT甲级——A1002 A+B for Polynomials
    PAT甲级——A1001A+BFormat
    Oil Deposits UVA
  • 原文地址:https://www.cnblogs.com/yifugui/p/9661276.html
Copyright © 2020-2023  润新知