Python基础之数字化大屏

在公司内部或前台,有时需要展示数字化看板,展示公司的业务信息。看着别的公司展示的炫酷的数字化大屏,是否很羡慕?本文以Python+flask+jQuery+eCharts,简述如何开发数字化大屏进行数据展示,仅供学习分享使用,如有不足之处,还请指正。

涉及知识点

  • Python+flask开发web系统,实现数据传输。
  • jQuery通过ajax技术,实现数据的异步通信,局部刷新。
  • eCharts进行图表的展示(包括柱状图,折线图,地图等)。
  • html+css页面布局等技术。

示例效果图

在本例中,主要展示某公司的产品累计趋势,产品新增趋势,销售柱状图,地图等内容,包括数字,图表等方式,具体如下所示:

 

页面设计

为了数据展示,将数字化大屏页面分为8个部分(标题,时间,左1,左2,中1,中2,右1,右2)如下所示:

 

页面布局核心代码,如下所示:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>数字化大屏</title>
 6     <link rel="stylesheet" href="../static/css/main.css">
 7 </head>
 8 <body>
 9 <header class="head">
10     <div class="title">
11         <h1>某某公司数字化大屏</h1>
12     </div>
13     <div class="time"></div>
14 </header>
15 <aside class="left">
16     <div id="left1" class="left1">这里是左侧边栏1</div>
17     <div id="left2" class="left2">这里是左侧边栏2</div>
18 </aside>
19 <section class="center">
20     <div class="center1">
21         <div class="num">1123</div>
22         <div class="num">234</div>
23         <div class="num">1345</div>
24         <div class="num">456</div>
25         <div class="txt">累计生产</div>
26         <div class="txt">剩余生产</div>
27         <div class="txt">累计销售</div>
28         <div class="txt">累计返厂</div>
29     </div>
30     <div class="center2" id="center2"></div>
31 </section>
32 <aside class="right">
33     <div id="right1" class="right1">这里是右侧边栏1</div>
34     <div id="right2" class="right2">这里是右侧边栏2</div>
35 </aside>
36 </body>
37 </html>

核心代码

后台数据

在本例中,flask做为web开发框架,提供了一个轻量级的实现web服务的功能。另本为了演示,实现了部分功能,其他则为静态数据,如下所示:

 1 from flask import Flask
 2 from flask import request
 3 from flask import render_template
 4 from flask import jsonify
 5 import random
 6 
 7 app = Flask(__name__)
 8 
 9 
10 @app.route('/main')
11 def main():
12     return render_template('main.html')
13 
14 
15 @app.route('/get_c1_data', methods=['get', 'post'])
16 def get_c1_data():
17     """获取C1数据"""
18     total_confirmed = random.randint(0, 10000)  # 累计生产
19     remain_suspect = random.randint(0, 5000)  # 剩余生产
20     total_cure = random.randint(0, 10000)  # 累计销售
21     total_dead = random.randint(0, 200)  # 累计返厂
22     return jsonify({"total_confirmed": total_confirmed, "remain_suspect": remain_suspect, "total_cure": total_cure,
23                     "total_dead": total_dead})
24 
25 
26 if __name__ == '__main__':
27     app.run()

注意:jQuery进行ajax数据访问,返回的json格式的数据,所以引入flask中的jsonify模块,进行数据转换。

ajax访问

在本例中,为了实现局部刷新,采用ajax的方式进行访问,如下所示:

 1     <script type="text/javascript">
 2         function get_time() {
 3             var cur_time = new Date();
 4             var str_time = cur_time.getFullYear() + "年" + ((cur_time.getMonth() + 1) > 9 ? (cur_time.getMonth() + 1) : "0" + (cur_time.getMonth() + 1)) + "月" + (cur_time.getDate() > 9 ? cur_time.getDate() : "0" + cur_time.getDate()) + "日" + " " + (cur_time.getHours() > 9 ? cur_time.getHours() : "0" + cur_time.getHours()) + ":" + (cur_time.getMinutes() > 9 ? cur_time.getMinutes() : "0" + cur_time.getMinutes()) + ":" + (cur_time.getSeconds() > 9 ? cur_time.getSeconds() : "0" + cur_time.getSeconds());
 5             $(".time").text(str_time);
 6         }
 7 
 8         function get_c1_data() {
 9             $.ajax({
10                 url: "/get_c1_data",
11                 type: "post",
12                 success: function (data) {
13                     $(".num").eq(0).text(data.total_confirmed);
14                     $(".num").eq(1).text(data.remain_suspect);
15                     $(".num").eq(2).text(data.total_cure);
16                     $(".num").eq(3).text(data.total_dead);
17 
18                 },
19                 error: function () {
20 
21                 }
22             });
23         }
24 
25         $(document).ready(function () {
26             get_time();
27             get_c1_data();
28             setInterval(get_time, 1000);
29             setInterval(get_c1_data,1000);
30         });
31     </script>

图表展示

在本例中,展示了多种图表,且各自独立,为了方便起见,将各个模块的图表,单独保存在js文件中。

折线图(累计趋势图)

 1 var left1 = document.getElementById('left1');
 2 var ec_left1 = echarts.init(left1,'dark');
 3 var ec_left1_option;
 4 
 5 ec_left1_option = {
 6   title: {
 7     text: '某某产品累计趋势',
 8     left:'left'
 9   },
10   tooltip: {
11     trigger: 'axis'
12   },
13   legend: {
14     data: ['累计生产', '剩余生产', '累计销售', '累计返厂'],
15     left:'right'
16   },
17   grid: {
18     left: '3%',
19     right: '4%',
20     bottom: '3%',
21     containLabel: true
22   },
23   // toolbox: {
24   //   feature: {
25   //     saveAsImage: {}
26   //   }
27   // },
28   xAxis: {
29     type: 'category',
30     boundaryGap: false,
31     data: ['09-24', '09-25', '09-26', '09-27', '09-28', '09-29', '09-30']
32   },
33   yAxis: {
34     type: 'value'
35   },
36   series: [
37     {
38       name: '累计生产',
39       type: 'line',
40       //stack: 'Total',
41       data: [120, 132, 101, 134, 90, 230, 210]
42     },
43     {
44       name: '剩余生产',
45       type: 'line',
46       //stack: 'Total',
47       data: [220, 182, 191, 234, 290, 330, 310]
48     },
49     {
50       name: '累计销售',
51       type: 'line',
52       //stack: 'Total',
53       data: [150, 232, 201, 154, 190, 330, 410]
54     },
55     {
56       name: '累计返厂',
57       type: 'line',
58       //stack: 'Total',
59       data: [320, 332, 301, 334, 390, 330, 320]
60     }
61   ]
62 };
63 
64 ec_left1_option && ec_left1.setOption(ec_left1_option);

折线(新增趋势图)

 1 var left2 = document.getElementById('left2');
 2 var ec_left2 = echarts.init(left2,'dark');
 3 var ec_left2_option;
 4 
 5 ec_left2_option = {
 6   title: {
 7     text: '某某公司产品新增趋势',
 8     left:'left'
 9   },
10   tooltip: {
11     trigger: 'axis'
12   },
13   legend: {
14     data: ['每日数量', '每日累计'],
15     left:'right'
16   },
17   grid: {
18     left: '3%',
19     right: '4%',
20     bottom: '3%',
21     containLabel: true
22   },
23   // toolbox: {
24   //   feature: {
25   //     saveAsImage: {}
26   //   }
27   // },
28   xAxis: {
29     type: 'category',
30     boundaryGap: false,
31     data: ['09-24', '09-25', '09-26', '09-27', '09-28', '09-29', '09-30']
32   },
33   yAxis: {
34     type: 'value'
35   },
36   series: [
37     {
38       name: '每日数量',
39       type: 'line',
40       //stack: 'Total',
41       data: [120, 132, 101, 134, 90, 230, 210]
42     },
43     {
44       name: '每日累计',
45       type: 'line',
46       //stack: 'Total',
47       data: [320, 332, 301, 334, 390, 330, 320]
48     }
49   ]
50 };
51 
52 ec_left2_option && ec_left2.setOption(ec_left2_option);

柱状图

 1 var right1 = document.getElementById('right1');
 2 var ec_right1 = echarts.init(right1,'dark');
 3 var ec_right1_option;
 4 
 5 ec_right1_option = {
 6     title: {
 7     text: '非重点城市销售Top5',
 8     left:'center'
 9   },
10   xAxis: {
11     type: 'category',
12     data: ['广东', '河南', '江苏', '湖南', '河北', '沈阳', '吉林']
13   },
14   yAxis: {
15     type: 'value'
16   },
17   series: [
18     {
19       data: [120, 200, 150, 80, 70, 110, 130],
20       type: 'bar'
21     }
22   ]
23 };
24 
25 ec_right1_option && ec_right1.setOption(ec_right1_option);

圆盘转速图

  1 var right2 = document.getElementById('right2');
  2 var ec_right2 = echarts.init(right2,'dark');
  3 var ec_right2_option;
  4 
  5 ec_right2_option = {
  6   backgroundColor: '#333',
  7   // tooltip: {
  8   //   formatter: '{a} <br/>{b} : {c}%'
  9   // },
 10   // toolbox: {
 11   //   feature: {
 12   //     restore: {},
 13   //     saveAsImage: {}
 14   //   }
 15   // },
 16   series: [
 17     // left
 18     {
 19       name: 'gauge 0',
 20       type: 'gauge',
 21       min: -200,
 22       max: 250,
 23       startAngle: -30,
 24       endAngle: -315,
 25       splitNumber: 9,
 26       radius: '35%',
 27       center: ['21%', '55%'],
 28       axisLine: {
 29         lineStyle: {
 30           color: [[1, '#AE96A6']]
 31         }
 32       },
 33       splitLine: {
 34         show: false
 35       },
 36       axisTick: {
 37         show: false
 38       },
 39       axisLabel: {
 40         show: false
 41       },
 42       anchor: {},
 43       pointer: {
 44         show: false
 45       },
 46       detail: {
 47         show: false
 48       },
 49       title: {
 50         fontSize: 8,
 51         fontWeight: 800,
 52         fontFamily: 'Arial',
 53         color: '#fff',
 54         offsetCenter: [0, '-60%']
 55       },
 56       progress: {
 57         show: true,
 58         width: 3,
 59         itemStyle: {
 60           color: '#fff'
 61         }
 62       },
 63       data: [
 64         {
 65           value: 250,
 66           name: 'km/h'
 67         }
 68       ]
 69     },
 70     {
 71       name: 'gauge 1',
 72       type: 'gauge',
 73       min: 0,
 74       max: 250,
 75       startAngle: -140,
 76       endAngle: -305,
 77       splitNumber: 5,
 78       radius: '35%',
 79       center: ['21%', '55%'],
 80       axisLine: {
 81         lineStyle: {
 82           color: [[1, '#AE96A6']]
 83         }
 84       },
 85       splitLine: {
 86         distance: -7,
 87         length: 12,
 88         lineStyle: {
 89           color: '#fff',
 90           width: 4
 91         }
 92       },
 93       axisTick: {
 94         distance: -8,
 95         length: 8,
 96         lineStyle: {
 97           color: '#fff',
 98           width: 2
 99         }
100       },
101       axisLabel: {
102         distance: 14,
103         fontSize: 10,
104         fontWeight: 800,
105         fontFamily: 'Arial',
106         color: '#fff'
107       },
108       anchor: {},
109       pointer: {
110         icon: 'path://M-36.5,23.9L-41,4.4c-0.1-0.4-0.4-0.7-0.7-0.7c-0.5-0.1-1.1,0.2-1.2,0.7l-4.5,19.5c0,0.1,0,0.1,0,0.2v92.3c0,0.6,0.4,1,1,1h9c0.6,0,1-0.4,1-1V24.1C-36.5,24-36.5,23.9-36.5,23.9z M-39.5,114.6h-5v-85h5V114.6z',
111         width: 5,
112         length: '40%',
113         offsetCenter: [0, '-58%'],
114         itemStyle: {
115           color: '#f00',
116           shadowColor: 'rgba(255, 0, 0)',
117           shadowBlur: 5,
118           shadowOffsetY: 2
119         }
120       },
121       title: {
122         color: '#fff',
123         fontSize: 14,
124         fontWeight: 800,
125         fontFamily: 'Arial',
126         offsetCenter: [0, 0]
127       },
128       detail: {
129         show: false
130       },
131       data: [
132         {
133           value: 0,
134           name: '当前位置:\n \n 中科路'
135         }
136       ]
137     },
138     // middle
139     {
140       name: 'gauge 2',
141       type: 'gauge',
142       min: 0,
143       max: 8,
144       z: 10,
145       startAngle: 210,
146       endAngle: -30,
147       splitNumber: 8,
148       radius: '50%',
149       center: ['50%', '50%'],
150       axisLine: {
151         show: true,
152         lineStyle: {
153           width: 0,
154           color: [
155             [0.825, '#fff'],
156             [1, '#f00']
157           ]
158         }
159       },
160       splitLine: {
161         distance: 20,
162         length: 15,
163         lineStyle: {
164           color: 'auto',
165           width: 4,
166           shadowColor: 'rgba(255, 255, 255, 0.5)',
167           shadowBlur: 15,
168           shadowOffsetY: -10
169         }
170       },
171       axisTick: {
172         distance: 20,
173         length: 8,
174         lineStyle: {
175           color: 'auto',
176           width: 2,
177           shadowColor: 'rgba(255, 255, 255)',
178           shadowBlur: 10,
179           shadowOffsetY: -10
180         }
181       },
182       axisLabel: {
183         distance: 10,
184         fontSize: 15,
185         fontWeight: 800,
186         fontFamily: 'Arial',
187         color: '#fff'
188       },
189       anchor: {},
190       pointer: {
191         icon: 'path://M-36.5,23.9L-41,4.4c-0.1-0.4-0.4-0.7-0.7-0.7c-0.5-0.1-1.1,0.2-1.2,0.7l-4.5,19.5c0,0.1,0,0.1,0,0.2v92.3c0,0.6,0.4,1,1,1h9c0.6,0,1-0.4,1-1V24.1C-36.5,24-36.5,23.9-36.5,23.9z M-39.5,114.6h-5v-85h5V114.6z',
192         width: 10,
193         offsetCenter: [0, '-10%'],
194         length: '75%',
195         itemStyle: {
196           color: '#f00',
197           shadowColor: 'rgba(255, 0, 0)',
198           shadowBlur: 5,
199           shadowOffsetY: 3
200         }
201       },
202       title: {
203         color: '#fff',
204         fontSize: 12,
205         fontWeight: 800,
206         fontFamily: 'Arial',
207         offsetCenter: [0, '-30%']
208       },
209       data: [
210         {
211           value: 0.6,
212           name: '1/min x 1000'
213         }
214       ],
215       detail: {
216         show: false
217       }
218     },
219     {
220       name: 'gauge 3',
221       type: 'gauge',
222       min: 0,
223       max: 8,
224       z: 10,
225       splitNumber: 8,
226       radius: '50%',
227       axisLine: {
228         lineStyle: {
229           width: 14,
230           color: [[1, '#000']]
231         }
232       },
233       splitLine: {
234         show: false
235       },
236       axisTick: {
237         show: false
238       },
239       axisLabel: {
240         show: false
241       },
242       anchor: {},
243       pointer: {
244         show: false
245       },
246       title: {
247         show: false
248       },
249       detail: {
250         offsetCenter: ['25%', '50%'],
251         formatter: '{a|{value}}{b|km/h}',
252         rich: {
253           a: {
254             fontSize: 20,
255             fontWeight: 800,
256             fontFamily: 'Arial',
257             color: '#fff',
258             align: 'center',
259             padding: [0, 5, 0, 0]
260           },
261           b: {
262             fontSize: 14,
263             fontWeight: 800,
264             fontFamily: 'Arial',
265             color: '#fff',
266             padding: [0, 0, 20, 0]
267           }
268         }
269       },
270       // value is speed
271       data: [
272         {
273           value: 0,
274           name: ''
275         }
276       ]
277     },
278     //right
279     {
280       name: 'gauge 4',
281       type: 'gauge',
282       min: 0,
283       max: 8,
284       startAngle: 135,
285       endAngle: -150,
286       splitNumber: 8,
287       radius: '35%',
288       center: ['79%', '55%'],
289       axisLine: {
290         lineStyle: {
291           color: [[1, '#AE96A6']]
292         }
293       },
294       splitLine: {
295         show: false
296       },
297       axisTick: {
298         show: false
299       },
300       axisLabel: {
301         show: false
302       },
303       anchor: {},
304       pointer: {
305         show: false
306       },
307       title: {},
308       detail: {
309         offsetCenter: ['-15%', 0],
310         formatter: [
311           '{a|                  00:00}',
312           '{a|行驶时间       0:00}{b| h}',
313           '{a|行驶距离        0.0}{b| km}',
314           '{a|平均耗能        ---}{b| 1/100km}',
315           '{a|平均速度        ---}{b| km/h}'
316         ].join('\n'),
317         rich: {
318           a: {
319             fontSize: 10,
320             fontWeight: 800,
321             fontFamily: 'Arial',
322             lineHeight: 22,
323             color: '#fff',
324             align: 'left'
325           },
326           b: {
327             fontWeight: 600,
328             fontFamily: 'Arial',
329             lineHeight: 22,
330             color: '#fff',
331             align: 'left'
332           }
333         }
334       },
335       progress: {
336         show: true,
337         width: 3,
338         itemStyle: {
339           color: '#fff'
340         }
341       },
342       data: [
343         {
344           value: 250,
345           name: ''
346         }
347       ]
348     },
349     {
350       name: 'gauge 5',
351       type: 'gauge',
352       min: 0,
353       max: 1,
354       startAngle: 125,
355       endAngle: 55,
356       splitNumber: 2,
357       radius: '34%',
358       center: ['79%', '55.3%'],
359       axisLine: {
360         lineStyle: {
361           width: 9,
362           color: [
363             [0.15, '#f00'],
364             [1, 'rgba(255, 0, 0, 0)']
365           ]
366         }
367       },
368       splitLine: {
369         distance: -14,
370         length: 16,
371         lineStyle: {
372           color: '#fff',
373           width: 4
374         }
375       },
376       axisTick: {
377         distance: -14,
378         length: 10,
379         lineStyle: {
380           color: '#fff',
381           width: 2
382         }
383       },
384       axisLabel: {
385         distance: 12,
386         fontSize: 10,
387         fontWeight: 800,
388         fontFamily: 'Arial',
389         color: '#fff',
390         formatter: function (value) {
391           if (value === 0.5) {
392             return '2/4';
393           }
394           if (value === 1) {
395             return '4/4';
396           }
397           return value + '';
398         }
399       },
400       progress: {
401         show: true,
402         width: 5,
403         itemStyle: {
404           color: '#fff'
405         }
406       },
407       anchor: {
408         show: true,
409         itemStyle: {},
410         offsetCenter: ['-22%', '-57%'],
411         size: 18,
412         icon: 'path://M1.11979167,1.11111112 C1.11979167,0.497461393 1.61725306,0 2.23090279,0 L12.2309028,0 C12.8445525,1.43824153e-08 13.3420139,0.497461403 13.3420139,1.11111112 L13.3420139,10 L15.5642361,10 C16.7915356,10 17.7864583,10.9949228 17.7864583,12.2222222 L17.7864583,16.6666667 C17.7865523,17.28025 18.2839861,17.7776077 18.8975694,17.7776077 C19.5111527,17.7776077 20.0085866,17.28025 20.0086805,16.6666667 L20.0086805,8.88888888 L17.7864583,8.88888888 C17.1728086,8.88888888 16.6753472,8.3914275 16.6753472,7.77777779 L16.6753472,3.79333333 L15.6197917,2.73777777 C15.1859413,2.30392741 15.1859413,1.60051702 15.6197917,1.16666667 L15.6197917,1.16666667 C16.053642,0.732816318 16.7570524,0.732816318 17.1909028,1.16666667 L21.9053472,5.88111112 C22.1140468,6.08922811 22.2312072,6.37193273 22.2309028,6.66666667 L22.2309028,16.6666667 C22.2309028,18.5076158 20.7385186,20 18.8975695,20 C17.0566203,20 15.5642361,18.5076158 15.5642361,16.6666667 L15.5642361,12.2222222 L13.3420139,12.2222222 L13.3420139,17.7777778 L13.3420139,17.7777778 C13.9556636,17.7777778 14.453125,18.2752392 14.453125,18.8888889 L14.453125,18.8888889 C14.453125,19.5025386 13.9556636,20 13.3420139,20 L1.11979165,20 C0.506141934,20 0.00868054688,19.5025386 0.00868054687,18.8888889 L0.00868054687,18.8888889 C0.00868054688,18.2752392 0.506141934,17.7777778 1.11979165,17.7777778 L1.11979167,17.7777778 L1.11979167,1.11111112 Z M3.34201388,2.22222221 L3.34201388,8.88888888 L11.1197917,8.88888888 L11.1197917,2.22222221 L3.34201388,2.22222221 Z'
413       },
414       pointer: {
415         show: false
416       },
417       title: {},
418       detail: {
419         offsetCenter: ['10%', '-56%'],
420         formatter: '{a|831}{b| km}',
421         rich: {
422           a: {
423             fontSize: 15,
424             fontWeight: 800,
425             fontFamily: 'Arial',
426             color: '#fff'
427           },
428           b: {
429             fontWeight: 600,
430             fontFamily: 'Arial',
431             color: '#fff'
432           }
433         }
434       },
435       data: [
436         {
437           value: 0.85,
438           name: ''
439         }
440       ]
441     },
442     {
443       name: 'gauge 6',
444       type: 'gauge',
445       min: -120,
446       max: -60,
447       startAngle: 230,
448       endAngle: 310,
449       clockwise: false,
450       splitNumber: 2,
451       radius: '35%',
452       center: ['79%', '55%'],
453       axisLine: {
454         lineStyle: {
455           color: [
456             [1, '#AE96A6'],
457             [1.1, '#f00']
458           ]
459         }
460       },
461       splitLine: {
462         distance: -8,
463         length: 12,
464         lineStyle: {
465           color: '#fff',
466           width: 4
467         }
468       },
469       axisTick: {
470         splitNumber: 3,
471         length: 8,
472         distance: -8,
473         lineStyle: {
474           color: '#fff',
475           width: 2
476         }
477       },
478       axisLabel: {
479         distance: 14,
480         fontSize: 10,
481         fontWeight: 800,
482         fontFamily: 'Arial',
483         color: '#fff',
484         formatter: function (value) {
485           return -value + '';
486         }
487       },
488       anchor: {
489         show: true,
490         itemStyle: {},
491         offsetCenter: [0, '55%'],
492         size: 20,
493         icon: 'path://M-34.1-1.1L-34.1-1.1c0-0.3-0.3-0.6-0.6-0.6h-3.6v-1.5c0-0.5-0.2-0.9-0.6-1.1s-0.9-0.2-1.3,0c-0.4,0.2-0.6,0.7-0.6,1.1V7.9c0,0,0,0.1,0,0.1c-0.8,0.5-1.2,1.5-0.9,2.5c0.3,0.9,1.1,1.6,2.1,1.6c1,0,1.8-0.6,2.1-1.5c0.3-0.9,0-1.9-0.8-2.5V6.3h3.5c0.4,0,0.7-0.3,0.7-0.7l0,0c0-0.4-0.3-0.7-0.7-0.7h-3.5V2.9h3.5c0.4,0,0.7-0.3,0.7-0.7l0,0c0-0.4-0.3-0.7-0.7-0.7h-3.5v-2.1h3.6C-34.4-0.5-34.1-0.8-34.1-1.1z M-44.9,11.6c-0.7,0-1.4-0.2-2-0.6c-0.4-0.3-0.9-0.4-1.4-0.4c-0.4,0-0.9,0.2-1.2,0.4c-0.4,0.2-1.4-0.9-0.9-1.3c0.6-0.4,1.3-0.6,2-0.7c0.8,0,1.5,0.2,2.2,0.5c0.4,0.3,0.9,0.4,1.3,0.4c0.6,0,1.1-0.2,1.5-0.6s1.6,0.7,0.9,1.3S-44,11.6-44.9,11.6L-44.9,11.6z M-34.3,11.6c-0.7,0-1.4-0.3-2-0.7c-0.6-0.4,0.5-1.6,0.9-1.3s0.8,0.4,1.2,0.4c0.5,0,1-0.1,1.4-0.4c0.6-0.3,1.3-0.5,2-0.6h0c0.9,0,1.7,0.3,2.4,0.9c0.7,0.5-0.5,1.6-0.9,1.3c-0.4-0.3-1-0.6-1.5-0.6h0c-0.5,0-0.9,0.2-1.3,0.4c-0.6,0.3-1.3,0.5-2,0.6H-34.3z M-33.5,16.3c-0.7,0-1.4-0.3-1.9-0.8c-0.4-0.3-0.6-0.5-1-0.5c-0.4,0-0.7,0.2-1,0.4c-0.6,0.5-1.3,0.7-2,0.7c-0.7,0-1.4-0.3-1.9-0.8c-0.2-0.3-0.6-0.4-0.9-0.4c-0.4,0-0.7,0.1-1.1,0.5c-0.6,0.5-1.3,0.7-2.1,0.7c-0.7-0.1-1.4-0.4-1.9-0.9c-0.4-0.3-0.6-0.5-1-0.5c-0.3,0-0.6,0.2-0.9,0.4s-1.6-0.7-1.1-1.2c0.5-0.5,1.2-0.8,1.9-0.9c1-0.1,1.6,0.4,2.1,0.8c0.3,0.3,0.6,0.5,1,0.5c0.4,0,0.6-0.1,1-0.4c0.6-0.5,1.4-0.8,2.1-0.8c0.7,0,1.4,0.3,1.9,0.8c0.2,0.2,0.6,0.4,0.9,0.4c0.4,0,0.6-0.1,1-0.4c0.6-0.5,1.3-0.7,2-0.7c0.8,0,1.5,0.3,2,0.9c0.4,0.3,0.6,0.4,0.9,0.4c0.3,0,0.7-0.2,1.1-0.5c0.5-0.4,1.2-0.9,2.3-0.8c0.7,0,1.4,0.3,1.9,0.7c0.5,0.4-0.7,1.5-1,1.3s-0.6-0.4-1-0.4c-0.4,0-0.7,0.2-1.2,0.5C-32,15.9-32.7,16.2-33.5,16.3L-33.5,16.3z'
494       },
495       pointer: {
496         icon: 'path://M2.9,0.7L2.9,0.7c1.4,0,2.6,1.2,2.6,2.6v115c0,1.4-1.2,2.6-2.6,2.6l0,0c-1.4,0-2.6-1.2-2.6-2.6V3.3C0.3,1.9,1.4,0.7,2.9,0.7z',
497         width: 15,
498         length: '4',
499         offsetCenter: [0, '-90%'],
500         itemStyle: {
501           color: '#f00'
502         }
503       },
504       title: {},
505       detail: {
506         show: false
507       },
508       data: [
509         {
510           value: -120,
511           name: ''
512         }
513       ]
514     }
515   ]
516 };
517 
518 ec_right2_option && ec_right2.setOption(ec_right2_option);
View Code

中国地图

  1 // var echarts = require('echarts');
  2 const data = [
  3   { name: '海门', value: 9 },
  4   { name: '鄂尔多斯', value: 12 },
  5   { name: '招远', value: 12 },
  6   { name: '舟山', value: 12 },
  7   { name: '齐齐哈尔', value: 14 },
  8   { name: '盐城', value: 15 },
  9   { name: '赤峰', value: 16 },
 10   { name: '青岛', value: 18 },
 11   { name: '乳山', value: 18 },
 12   { name: '金昌', value: 19 },
 13   { name: '泉州', value: 21 },
 14   { name: '莱西', value: 21 },
 15   { name: '日照', value: 21 },
 16   { name: '胶南', value: 22 },
 17   { name: '南通', value: 23 },
 18   { name: '拉萨', value: 24 },
 19   { name: '云浮', value: 24 },
 20   { name: '梅州', value: 25 },
 21   { name: '文登', value: 25 },
 22   { name: '上海', value: 25 },
 23   { name: '攀枝花', value: 25 },
 24   { name: '威海', value: 25 },
 25   { name: '承德', value: 25 },
 26   { name: '厦门', value: 26 },
 27   { name: '汕尾', value: 26 },
 28   { name: '潮州', value: 26 },
 29   { name: '丹东', value: 27 },
 30   { name: '太仓', value: 27 },
 31   { name: '曲靖', value: 27 },
 32   { name: '烟台', value: 28 },
 33   { name: '福州', value: 29 },
 34   { name: '瓦房店', value: 30 },
 35   { name: '即墨', value: 30 },
 36   { name: '抚顺', value: 31 },
 37   { name: '玉溪', value: 31 },
 38   { name: '张家口', value: 31 },
 39   { name: '阳泉', value: 31 },
 40   { name: '莱州', value: 32 },
 41   { name: '湖州', value: 32 },
 42   { name: '汕头', value: 32 },
 43   { name: '昆山', value: 33 },
 44   { name: '宁波', value: 33 },
 45   { name: '湛江', value: 33 },
 46   { name: '揭阳', value: 34 },
 47   { name: '荣成', value: 34 },
 48   { name: '连云港', value: 35 },
 49   { name: '葫芦岛', value: 35 },
 50   { name: '常熟', value: 36 },
 51   { name: '东莞', value: 36 },
 52   { name: '河源', value: 36 },
 53   { name: '淮安', value: 36 },
 54   { name: '泰州', value: 36 },
 55   { name: '南宁', value: 37 },
 56   { name: '营口', value: 37 },
 57   { name: '惠州', value: 37 },
 58   { name: '江阴', value: 37 },
 59   { name: '蓬莱', value: 37 },
 60   { name: '韶关', value: 38 },
 61   { name: '嘉峪关', value: 38 },
 62   { name: '广州', value: 38 },
 63   { name: '延安', value: 38 },
 64   { name: '太原', value: 39 },
 65   { name: '清远', value: 39 },
 66   { name: '中山', value: 39 },
 67   { name: '昆明', value: 39 },
 68   { name: '寿光', value: 40 },
 69   { name: '盘锦', value: 40 },
 70   { name: '长治', value: 41 },
 71   { name: '深圳', value: 41 },
 72   { name: '珠海', value: 42 },
 73   { name: '宿迁', value: 43 },
 74   { name: '咸阳', value: 43 },
 75   { name: '铜川', value: 44 },
 76   { name: '平度', value: 44 },
 77   { name: '佛山', value: 44 },
 78   { name: '海口', value: 44 },
 79   { name: '江门', value: 45 },
 80   { name: '章丘', value: 45 },
 81   { name: '肇庆', value: 46 },
 82   { name: '大连', value: 47 },
 83   { name: '临汾', value: 47 },
 84   { name: '吴江', value: 47 },
 85   { name: '石嘴山', value: 49 },
 86   { name: '沈阳', value: 50 },
 87   { name: '苏州', value: 50 },
 88   { name: '茂名', value: 50 },
 89   { name: '嘉兴', value: 51 },
 90   { name: '长春', value: 51 },
 91   { name: '胶州', value: 52 },
 92   { name: '银川', value: 52 },
 93   { name: '张家港', value: 52 },
 94   { name: '三门峡', value: 53 },
 95   { name: '锦州', value: 54 },
 96   { name: '南昌', value: 54 },
 97   { name: '柳州', value: 54 },
 98   { name: '三亚', value: 54 },
 99   { name: '自贡', value: 56 },
100   { name: '吉林', value: 56 },
101   { name: '阳江', value: 57 },
102   { name: '泸州', value: 57 },
103   { name: '西宁', value: 57 },
104   { name: '宜宾', value: 58 },
105   { name: '呼和浩特', value: 58 },
106   { name: '成都', value: 58 },
107   { name: '大同', value: 58 },
108   { name: '镇江', value: 59 },
109   { name: '桂林', value: 59 },
110   { name: '张家界', value: 59 },
111   { name: '宜兴', value: 59 },
112   { name: '北海', value: 60 },
113   { name: '西安', value: 61 },
114   { name: '金坛', value: 62 },
115   { name: '东营', value: 62 },
116   { name: '牡丹江', value: 63 },
117   { name: '遵义', value: 63 },
118   { name: '绍兴', value: 63 },
119   { name: '扬州', value: 64 },
120   { name: '常州', value: 64 },
121   { name: '潍坊', value: 65 },
122   { name: '重庆', value: 66 },
123   { name: '台州', value: 67 },
124   { name: '南京', value: 67 },
125   { name: '滨州', value: 70 },
126   { name: '贵阳', value: 71 },
127   { name: '无锡', value: 71 },
128   { name: '本溪', value: 71 },
129   { name: '克拉玛依', value: 72 },
130   { name: '渭南', value: 72 },
131   { name: '马鞍山', value: 72 },
132   { name: '宝鸡', value: 72 },
133   { name: '焦作', value: 75 },
134   { name: '句容', value: 75 },
135   { name: '北京', value: 79 },
136   { name: '徐州', value: 79 },
137   { name: '衡水', value: 80 },
138   { name: '包头', value: 80 },
139   { name: '绵阳', value: 80 },
140   { name: '乌鲁木齐', value: 84 },
141   { name: '枣庄', value: 84 },
142   { name: '杭州', value: 84 },
143   { name: '淄博', value: 85 },
144   { name: '鞍山', value: 86 },
145   { name: '溧阳', value: 86 },
146   { name: '库尔勒', value: 86 },
147   { name: '安阳', value: 90 },
148   { name: '开封', value: 90 },
149   { name: '济南', value: 92 },
150   { name: '德阳', value: 93 },
151   { name: '温州', value: 95 },
152   { name: '九江', value: 96 },
153   { name: '邯郸', value: 98 },
154   { name: '临安', value: 99 },
155   { name: '兰州', value: 99 },
156   { name: '沧州', value: 100 },
157   { name: '临沂', value: 103 },
158   { name: '南充', value: 104 },
159   { name: '天津', value: 105 },
160   { name: '富阳', value: 106 },
161   { name: '泰安', value: 112 },
162   { name: '诸暨', value: 112 },
163   { name: '郑州', value: 113 },
164   { name: '哈尔滨', value: 114 },
165   { name: '聊城', value: 116 },
166   { name: '芜湖', value: 117 },
167   { name: '唐山', value: 119 },
168   { name: '平顶山', value: 119 },
169   { name: '邢台', value: 119 },
170   { name: '德州', value: 120 },
171   { name: '济宁', value: 120 },
172   { name: '荆州', value: 127 },
173   { name: '宜昌', value: 130 },
174   { name: '义乌', value: 132 },
175   { name: '丽水', value: 133 },
176   { name: '洛阳', value: 134 },
177   { name: '秦皇岛', value: 136 },
178   { name: '株洲', value: 143 },
179   { name: '石家庄', value: 147 },
180   { name: '莱芜', value: 148 },
181   { name: '常德', value: 152 },
182   { name: '保定', value: 153 },
183   { name: '湘潭', value: 154 },
184   { name: '金华', value: 157 },
185   { name: '岳阳', value: 169 },
186   { name: '长沙', value: 175 },
187   { name: '衢州', value: 177 },
188   { name: '廊坊', value: 193 },
189   { name: '菏泽', value: 194 },
190   { name: '合肥', value: 229 },
191   { name: '武汉', value: 273 },
192   { name: '大庆', value: 279 }
193 ];
194 const geoCoordMap = {
195   海门: [121.15, 31.89],
196   鄂尔多斯: [109.781327, 39.608266],
197   招远: [120.38, 37.35],
198   舟山: [122.207216, 29.985295],
199   齐齐哈尔: [123.97, 47.33],
200   盐城: [120.13, 33.38],
201   赤峰: [118.87, 42.28],
202   青岛: [120.33, 36.07],
203   乳山: [121.52, 36.89],
204   金昌: [102.188043, 38.520089],
205   泉州: [118.58, 24.93],
206   莱西: [120.53, 36.86],
207   日照: [119.46, 35.42],
208   胶南: [119.97, 35.88],
209   南通: [121.05, 32.08],
210   拉萨: [91.11, 29.97],
211   云浮: [112.02, 22.93],
212   梅州: [116.1, 24.55],
213   文登: [122.05, 37.2],
214   上海: [121.48, 31.22],
215   攀枝花: [101.718637, 26.582347],
216   威海: [122.1, 37.5],
217   承德: [117.93, 40.97],
218   厦门: [118.1, 24.46],
219   汕尾: [115.375279, 22.786211],
220   潮州: [116.63, 23.68],
221   丹东: [124.37, 40.13],
222   太仓: [121.1, 31.45],
223   曲靖: [103.79, 25.51],
224   烟台: [121.39, 37.52],
225   福州: [119.3, 26.08],
226   瓦房店: [121.979603, 39.627114],
227   即墨: [120.45, 36.38],
228   抚顺: [123.97, 41.97],
229   玉溪: [102.52, 24.35],
230   张家口: [114.87, 40.82],
231   阳泉: [113.57, 37.85],
232   莱州: [119.942327, 37.177017],
233   湖州: [120.1, 30.86],
234   汕头: [116.69, 23.39],
235   昆山: [120.95, 31.39],
236   宁波: [121.56, 29.86],
237   湛江: [110.359377, 21.270708],
238   揭阳: [116.35, 23.55],
239   荣成: [122.41, 37.16],
240   连云港: [119.16, 34.59],
241   葫芦岛: [120.836932, 40.711052],
242   常熟: [120.74, 31.64],
243   东莞: [113.75, 23.04],
244   河源: [114.68, 23.73],
245   淮安: [119.15, 33.5],
246   泰州: [119.9, 32.49],
247   南宁: [108.33, 22.84],
248   营口: [122.18, 40.65],
249   惠州: [114.4, 23.09],
250   江阴: [120.26, 31.91],
251   蓬莱: [120.75, 37.8],
252   韶关: [113.62, 24.84],
253   嘉峪关: [98.289152, 39.77313],
254   广州: [113.23, 23.16],
255   延安: [109.47, 36.6],
256   太原: [112.53, 37.87],
257   清远: [113.01, 23.7],
258   中山: [113.38, 22.52],
259   昆明: [102.73, 25.04],
260   寿光: [118.73, 36.86],
261   盘锦: [122.070714, 41.119997],
262   长治: [113.08, 36.18],
263   深圳: [114.07, 22.62],
264   珠海: [113.52, 22.3],
265   宿迁: [118.3, 33.96],
266   咸阳: [108.72, 34.36],
267   铜川: [109.11, 35.09],
268   平度: [119.97, 36.77],
269   佛山: [113.11, 23.05],
270   海口: [110.35, 20.02],
271   江门: [113.06, 22.61],
272   章丘: [117.53, 36.72],
273   肇庆: [112.44, 23.05],
274   大连: [121.62, 38.92],
275   临汾: [111.5, 36.08],
276   吴江: [120.63, 31.16],
277   石嘴山: [106.39, 39.04],
278   沈阳: [123.38, 41.8],
279   苏州: [120.62, 31.32],
280   茂名: [110.88, 21.68],
281   嘉兴: [120.76, 30.77],
282   长春: [125.35, 43.88],
283   胶州: [120.03336, 36.264622],
284   银川: [106.27, 38.47],
285   张家港: [120.555821, 31.875428],
286   三门峡: [111.19, 34.76],
287   锦州: [121.15, 41.13],
288   南昌: [115.89, 28.68],
289   柳州: [109.4, 24.33],
290   三亚: [109.511909, 18.252847],
291   自贡: [104.778442, 29.33903],
292   吉林: [126.57, 43.87],
293   阳江: [111.95, 21.85],
294   泸州: [105.39, 28.91],
295   西宁: [101.74, 36.56],
296   宜宾: [104.56, 29.77],
297   呼和浩特: [111.65, 40.82],
298   成都: [104.06, 30.67],
299   大同: [113.3, 40.12],
300   镇江: [119.44, 32.2],
301   桂林: [110.28, 25.29],
302   张家界: [110.479191, 29.117096],
303   宜兴: [119.82, 31.36],
304   北海: [109.12, 21.49],
305   西安: [108.95, 34.27],
306   金坛: [119.56, 31.74],
307   东营: [118.49, 37.46],
308   牡丹江: [129.58, 44.6],
309   遵义: [106.9, 27.7],
310   绍兴: [120.58, 30.01],
311   扬州: [119.42, 32.39],
312   常州: [119.95, 31.79],
313   潍坊: [119.1, 36.62],
314   重庆: [106.54, 29.59],
315   台州: [121.420757, 28.656386],
316   南京: [118.78, 32.04],
317   滨州: [118.03, 37.36],
318   贵阳: [106.71, 26.57],
319   无锡: [120.29, 31.59],
320   本溪: [123.73, 41.3],
321   克拉玛依: [84.77, 45.59],
322   渭南: [109.5, 34.52],
323   马鞍山: [118.48, 31.56],
324   宝鸡: [107.15, 34.38],
325   焦作: [113.21, 35.24],
326   句容: [119.16, 31.95],
327   北京: [116.46, 39.92],
328   徐州: [117.2, 34.26],
329   衡水: [115.72, 37.72],
330   包头: [110, 40.58],
331   绵阳: [104.73, 31.48],
332   乌鲁木齐: [87.68, 43.77],
333   枣庄: [117.57, 34.86],
334   杭州: [120.19, 30.26],
335   淄博: [118.05, 36.78],
336   鞍山: [122.85, 41.12],
337   溧阳: [119.48, 31.43],
338   库尔勒: [86.06, 41.68],
339   安阳: [114.35, 36.1],
340   开封: [114.35, 34.79],
341   济南: [117, 36.65],
342   德阳: [104.37, 31.13],
343   温州: [120.65, 28.01],
344   九江: [115.97, 29.71],
345   邯郸: [114.47, 36.6],
346   临安: [119.72, 30.23],
347   兰州: [103.73, 36.03],
348   沧州: [116.83, 38.33],
349   临沂: [118.35, 35.05],
350   南充: [106.110698, 30.837793],
351   天津: [117.2, 39.13],
352   富阳: [119.95, 30.07],
353   泰安: [117.13, 36.18],
354   诸暨: [120.23, 29.71],
355   郑州: [113.65, 34.76],
356   哈尔滨: [126.63, 45.75],
357   聊城: [115.97, 36.45],
358   芜湖: [118.38, 31.33],
359   唐山: [118.02, 39.63],
360   平顶山: [113.29, 33.75],
361   邢台: [114.48, 37.05],
362   德州: [116.29, 37.45],
363   济宁: [116.59, 35.38],
364   荆州: [112.239741, 30.335165],
365   宜昌: [111.3, 30.7],
366   义乌: [120.06, 29.32],
367   丽水: [119.92, 28.45],
368   洛阳: [112.44, 34.7],
369   秦皇岛: [119.57, 39.95],
370   株洲: [113.16, 27.83],
371   石家庄: [114.48, 38.03],
372   莱芜: [117.67, 36.19],
373   常德: [111.69, 29.05],
374   保定: [115.48, 38.85],
375   湘潭: [112.91, 27.87],
376   金华: [119.64, 29.12],
377   岳阳: [113.09, 29.37],
378   长沙: [113, 28.21],
379   衢州: [118.88, 28.97],
380   廊坊: [116.7, 39.53],
381   菏泽: [115.480656, 35.23375],
382   合肥: [117.27, 31.86],
383   武汉: [114.31, 30.52],
384   大庆: [125.03, 46.58]
385 };
386 const convertData = function (data) {
387   var res = [];
388   for (var i = 0; i < data.length; i++) {
389     var geoCoord = geoCoordMap[data[i].name];
390     if (geoCoord) {
391       res.push({
392         name: data[i].name,
393         value: geoCoord.concat(data[i].value)
394       });
395     }
396   }
397   return res;
398 };
399 const ec_center_option = {
400   // title: {
401   //   text: '全国主要城市空气质量 - 百度地图',
402   //   subtext: 'data from PM25.in',
403   //   sublink: 'http://www.pm25.in',
404   //   left: 'center'
405   // },
406   tooltip: {
407     trigger: 'item'
408   },
409   bmap: {
410     center: [104.114129, 37.550339],
411     zoom: 5,
412     roam: true,
413     mapStyle: {
414       styleJson: [
415         {
416           featureType: 'water',
417           elementType: 'all',
418           stylers: {
419             color: '#d1d1d1'
420           }
421         },
422         {
423           featureType: 'land',
424           elementType: 'all',
425           stylers: {
426             color: '#f3f3f3'
427           }
428         },
429         {
430           featureType: 'railway',
431           elementType: 'all',
432           stylers: {
433             visibility: 'off'
434           }
435         },
436         {
437           featureType: 'highway',
438           elementType: 'all',
439           stylers: {
440             color: '#fdfdfd'
441           }
442         },
443         {
444           featureType: 'highway',
445           elementType: 'labels',
446           stylers: {
447             visibility: 'on'
448           }
449         },
450         {
451           featureType: 'arterial',
452           elementType: 'geometry',
453           stylers: {
454             color: '#fefefe'
455           }
456         },
457         {
458           featureType: 'arterial',
459           elementType: 'geometry.fill',
460           stylers: {
461             color: '#fefefe'
462           }
463         },
464         {
465           featureType: 'poi',
466           elementType: 'all',
467           stylers: {
468             visibility: 'off'
469           }
470         },
471         {
472           featureType: 'green',
473           elementType: 'all',
474           stylers: {
475             visibility: 'off'
476           }
477         },
478         {
479           featureType: 'subway',
480           elementType: 'all',
481           stylers: {
482             visibility: 'off'
483           }
484         },
485         {
486           featureType: 'manmade',
487           elementType: 'all',
488           stylers: {
489             color: '#d1d1d1'
490           }
491         },
492         {
493           featureType: 'local',
494           elementType: 'all',
495           stylers: {
496             color: '#d1d1d1'
497           }
498         },
499         {
500           featureType: 'arterial',
501           elementType: 'labels',
502           stylers: {
503             visibility: 'off'
504           }
505         },
506         {
507           featureType: 'boundary',
508           elementType: 'all',
509           stylers: {
510             color: '#fefefe'
511           }
512         },
513         {
514           featureType: 'building',
515           elementType: 'all',
516           stylers: {
517             color: '#d1d1d1'
518           }
519         },
520         {
521           featureType: 'label',
522           elementType: 'labels.text.fill',
523           stylers: {
524             color: '#999999'
525           }
526         }
527       ]
528     }
529   },
530   series: [
531     {
532       name: 'pm2.5',
533       type: 'scatter',
534       coordinateSystem: 'bmap',
535       data: convertData(data),
536       symbolSize: function (val) {
537         return val[2] / 10;
538       },
539       encode: {
540         value: 2
541       },
542       label: {
543         formatter: '{b}',
544         position: 'right',
545         show: false
546       },
547       emphasis: {
548         label: {
549           show: true
550         }
551       }
552     },
553     {
554       name: 'Top 5',
555       type: 'effectScatter',
556       coordinateSystem: 'bmap',
557       data: convertData(
558           data
559               .sort(function (a, b) {
560                 return b.value - a.value;
561               })
562               .slice(0, 6)
563       ),
564       symbolSize: function (val) {
565         return val[2] / 10;
566       },
567       encode: {
568         value: 2
569       },
570       showEffectOn: 'render',
571       rippleEffect: {
572         brushType: 'stroke'
573       },
574       label: {
575         formatter: '{b}',
576         position: 'right',
577         show: true
578       },
579       itemStyle: {
580         shadowBlur: 10,
581         shadowColor: '#333'
582       },
583       emphasis: {
584         scale: true
585       },
586       zlevel: 1
587     }
588   ]
589 };
590 // 基于准备好的dom,初始化echarts实例
591 var ec_center = echarts.init(document.getElementById('center2'),'dark');
592 ec_center_option&&ec_center.setOption(ec_center_option);
View Code

页面整体调用

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>数字化大屏</title>
 6     <link rel="stylesheet" href="../static/css/main.css">
 7     <script src="../static/js/jquery-3.6.0.js"></script>
 8     <script src="../static/js/echarts.min.js"></script>
 9     <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@3.6.0/map/js/china.js"></script>
10     <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@3.6.0/map/js/world.js"></script>
11     <script src="../static/js/bmap.min.js"></script>
12     <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=你的ak"></script>
13     <script src="../static/js/dark.js"></script>
14     <script type="text/javascript">
15         function get_time() {
16             var cur_time = new Date();
17             var str_time = cur_time.getFullYear() + "" + ((cur_time.getMonth() + 1) > 9 ? (cur_time.getMonth() + 1) : "0" + (cur_time.getMonth() + 1)) + "" + (cur_time.getDate() > 9 ? cur_time.getDate() : "0" + cur_time.getDate()) + "" + " " + (cur_time.getHours() > 9 ? cur_time.getHours() : "0" + cur_time.getHours()) + ":" + (cur_time.getMinutes() > 9 ? cur_time.getMinutes() : "0" + cur_time.getMinutes()) + ":" + (cur_time.getSeconds() > 9 ? cur_time.getSeconds() : "0" + cur_time.getSeconds());
18             $(".time").text(str_time);
19         }
20 
21         function get_c1_data() {
22             $.ajax({
23                 url: "/get_c1_data",
24                 type: "post",
25                 success: function (data) {
26                     $(".num").eq(0).text(data.total_confirmed);
27                     $(".num").eq(1).text(data.remain_suspect);
28                     $(".num").eq(2).text(data.total_cure);
29                     $(".num").eq(3).text(data.total_dead);
30 
31                 },
32                 error: function () {
33 
34                 }
35             });
36         }
37 
38         $(document).ready(function () {
39             get_time();
40             get_c1_data();
41             setInterval(get_time, 1000);
42             setInterval(get_c1_data,1000);
43         });
44     </script>
45 </head>
46 <body>
47 <header class="head">
48     <div class="title">
49         <h1>某某公司数字化大屏</h1>
50     </div>
51     <div class="time"></div>
52 </header>
53 <aside class="left">
54     <div id="left1" class="left1">这里是左侧边栏1</div>
55     <div id="left2" class="left2">这里是左侧边栏2</div>
56 </aside>
57 <section class="center">
58     <div class="center1">
59         <div class="num">1123</div>
60         <div class="num">234</div>
61         <div class="num">1345</div>
62         <div class="num">456</div>
63         <div class="txt">累计生产</div>
64         <div class="txt">剩余生产</div>
65         <div class="txt">累计销售</div>
66         <div class="txt">累计返厂</div>
67 
68     </div>
69     <div class="center2" id="center2"></div>
70 </section>
71 <aside class="right">
72     <div id="right1" class="right1">这里是右侧边栏1</div>
73     <div id="right2" class="right2">这里是右侧边栏2</div>
74 </aside>
75 <script src="../static/js/ec_center.js" type="text/javascript"></script>
76 <script src="../static/js/ec_left1.js" type="text/javascript"></script>
77 <script src="../static/js/ec_left2.js" type="text/javascript"></script>
78 <script src="../static/js/ec_right1.js" type="text/javascript"></script>
79 <script src="../static/js/ec_right2.js" type="text/javascript"></script>
80 </body>
81 </html>
View Code

源码链接

备注

本文主要是记录学习,抛转引玉。与大家一起进步。

城南【作者】曾巩 【朝代】宋

雨过横塘水满堤,乱山高下路东西。
一番桃李花开尽,惟有青青草色齐。
posted @ 2021-10-01 17:20  老码识途呀  阅读(1307)  评论(5编辑  收藏  举报