|
2 | 2 | <span class="current"><%= t("admin.overview") %></span>
|
3 | 3 | <% end %>
|
4 | 4 |
|
5 |
| -<style type="text/css"> |
6 |
| -.ac-tooltip{ |
7 |
| - position:absolute; |
8 |
| - visibility:hidden; |
9 |
| - border : 1px solid #efefef; |
10 |
| - border-radius: 3px; |
11 |
| - background-color: white; |
12 |
| - opacity: .85; |
13 |
| - padding: 3px; |
14 |
| - font-size: 12px; |
15 |
| -} |
16 |
| -.ac-tooltip .ac-list{ |
17 |
| - margin: 0; |
18 |
| - padding: 0; |
19 |
| - list-style: none; |
20 |
| -} |
21 |
| -.ac-tooltip li{ |
22 |
| - line-height: 14px; |
23 |
| -} |
24 |
| -</style> |
25 | 5 |
|
26 | 6 | <div class="toolbar">
|
27 | 7 | <div class="btn-group">
|
|
33 | 13 | </div>
|
34 | 14 |
|
35 | 15 | <div class="clearfix">
|
36 |
| - <h4><%= t("admin.statics") %></h4> |
37 |
| - <table class="table table-striped table-condensed"> |
38 |
| - <tr> |
39 |
| - <td style="width:120px;"><%= t("admin.menu.users") %></td> |
40 |
| - <td><%= User.unscoped.count %> 人</td> |
41 |
| - </tr> |
42 |
| - <tr><td colspan="2"><div id="chart-user" class="chart"></div></td></tr> |
43 |
| - <tr><td><%= t("admin.menu.topics") %></td><td><%= Topic.unscoped.count %> 个</td></tr> |
44 |
| - <tr><td colspan="2"><div id="chart-topic" class="chart"></div></td></tr> |
45 |
| - <tr><td><%= t("admin.menu.replies") %></td><td><%= Reply.unscoped.count %> 条</td></tr> |
46 |
| - <tr><td colspan="2"><div id="chart-reply" class="chart"></div></td></tr> |
47 |
| - <tr><td>通知</td><td><%= Notification.unscoped.count %> 条</td></tr> |
48 |
| - <tr><td colspan="2"><div id="chart-notification" class="chart"></div></td></tr> |
49 |
| - <tr><td>图片</td><td><%= Photo.unscoped.count %> 张</td></tr> |
50 |
| - <tr><td colspan="2"><div id="chart-photo" class="chart"></div></td></tr> |
51 |
| - <% if Setting.has_module? :note %> |
52 |
| - <tr><td><%= t("admin.menu.notes") %></td><td><%= Note.unscoped.count %> 条</td></tr> |
53 |
| - <% end %> |
54 |
| - <tr><td>Device</td><td><%= Device.unscoped.count %> 台</td><td></td></tr> |
55 |
| - <tr><td>OAuth Token</td><td><%= Doorkeeper::AccessToken.count %> 条</td><td></td></tr> |
56 |
| - </table> |
| 16 | + <div class="row"> |
| 17 | + <div class="col-sm-4" id="user-stat"> |
| 18 | + <div class="stat"> |
| 19 | + <div class="total">0</div> |
| 20 | + <div class="name"> |
| 21 | + 用户总数 |
| 22 | + <span class="total-week" rel="twipsy" title="本周新增">+0</span> |
| 23 | + <span class="total-month" rel="twipsy" title="本月新增">+0</span> |
| 24 | + </div> |
| 25 | + </div> |
| 26 | + </div> |
| 27 | + |
| 28 | + <div class="col-sm-4" id="topic-stat"> |
| 29 | + <div class="stat"> |
| 30 | + <div class="total">0</div> |
| 31 | + <div class="name"> |
| 32 | + 话题总数 |
| 33 | + <span class="total-week" rel="twipsy" title="本周新增">+0</span> |
| 34 | + <span class="total-month" rel="twipsy" title="本月新增">+0</span> |
| 35 | + </div> |
| 36 | + </div> |
| 37 | + </div> |
| 38 | + |
| 39 | + <div class="col-sm-4" id="reply-stat"> |
| 40 | + <div class="stat"> |
| 41 | + <div class="total">0</div> |
| 42 | + <div class="name"> |
| 43 | + 回帖总数 |
| 44 | + <span class="total-week" rel="twipsy" title="本周新增">+0</span> |
| 45 | + <span class="total-month" rel="twipsy" title="本月新增">+0</span> |
| 46 | + </div> |
| 47 | + </div> |
| 48 | + </div> |
| 49 | + </div> |
| 50 | + <div class="row"> |
| 51 | + <div class="col-sm-3" id="notification-stat"> |
| 52 | + <div class="stat"> |
| 53 | + <div class="total">0</div> |
| 54 | + <div class="name"> |
| 55 | + 通知总数 |
| 56 | + <span class="total-week" rel="twipsy" title="本周新增">+0</span> |
| 57 | + <span class="total-month" rel="twipsy" title="本月新增">+0</span> |
| 58 | + </div> |
| 59 | + </div> |
| 60 | + </div> |
| 61 | + |
| 62 | + <div class="col-sm-3" id="comment-stat"> |
| 63 | + <div class="stat"> |
| 64 | + <div class="total">0</div> |
| 65 | + <div class="name"> |
| 66 | + 评论总数 |
| 67 | + <span class="total-week" rel="twipsy" title="本周新增">+0</span> |
| 68 | + <span class="total-month" rel="twipsy" title="本月新增">+0</span> |
| 69 | + </div> |
| 70 | + </div> |
| 71 | + </div> |
| 72 | + |
| 73 | + <div class="col-sm-3" id="note-stat"> |
| 74 | + <div class="stat"> |
| 75 | + <div class="total">0</div> |
| 76 | + <div class="name"> |
| 77 | + 记事本总数 |
| 78 | + <span class="total-week" rel="twipsy" title="本周新增">+0</span> |
| 79 | + <span class="total-month" rel="twipsy" title="本月新增">+0</span> |
| 80 | + </div> |
| 81 | + </div> |
| 82 | + </div> |
| 83 | + |
| 84 | + |
| 85 | + |
| 86 | + <div class="col-sm-3" id="photo-stat"> |
| 87 | + <div class="stat"> |
| 88 | + <div class="total">0</div> |
| 89 | + <div class="name"> |
| 90 | + 照片总数 |
| 91 | + <span class="total-week" rel="twipsy" title="本周新增">+0</span> |
| 92 | + <span class="total-month" rel="twipsy" title="本月新增">+0</span> |
| 93 | + </div> |
| 94 | + </div> |
| 95 | + </div> |
| 96 | + </div> |
57 | 97 |
|
58 |
| - <script src="https://as.alipayobjects.com/g/datavis/g2/2.0.5/index.js"></script> |
59 | 98 | <script type="text/javascript">
|
60 |
| - function createChart(source, model, color) { |
61 |
| - var dom = $('#chart-' + model); |
62 |
| - dom.html(""); |
63 |
| - var chart = new G2.Chart({ |
64 |
| - id: 'chart-' + model, |
65 |
| - width : dom.width(), |
66 |
| - height : 60, |
67 |
| - tickCount: 12, |
68 |
| - plotCfg: { |
69 |
| - margin: [10, 5] |
70 |
| - } |
71 |
| - }); |
72 |
| - chart.source(source, { |
73 |
| - date: { |
74 |
| - type: 'time', |
75 |
| - alias: '时间', |
76 |
| - formatter: function(val) { |
77 |
| - var date = new Date(val); |
78 |
| - return (date.getMonth() + 1) + '月'; |
79 |
| - } |
80 |
| - }, |
81 |
| - count: { |
82 |
| - nice: true, |
83 |
| - type: 'linear', |
84 |
| - alias: '新增数量', |
85 |
| - } |
86 |
| - }); |
87 |
| - chart.axis(false); |
88 |
| - chart.tooltip({ |
89 |
| - title: '' |
90 |
| - }); |
91 |
| - chart.line().color(color).position('date*count').shape('spline').tooltip('date*count').size(2); |
92 |
| - chart.render(); |
| 99 | + function updateStatValue(data) { |
| 100 | + var el = $('#' + data.model + '-stat'); |
| 101 | + el.find(".total").text(data.count); |
| 102 | + el.find(".total-week").text('+' + data.week_count); |
| 103 | + el.find(".total-month").text('+' + data.month_count); |
93 | 104 | }
|
94 | 105 |
|
95 |
| - $.get("/admin/stats?model=user&by=month", function(data) { |
96 |
| - createChart(data, 'user', '#356DD0'); |
97 |
| - }); |
98 |
| - $.get("/admin/stats?model=topic&by=month", function(data) { |
99 |
| - createChart(data, 'topic', '#F44336'); |
100 |
| - }); |
101 |
| - $.get("/admin/stats?model=reply&by=month", function(data) { |
102 |
| - createChart(data, 'reply', '#FFB300'); |
103 |
| - }); |
104 |
| - $.get("/admin/stats?model=notification&by=month", function(data) { |
105 |
| - createChart(data, 'notification', '#795548'); |
106 |
| - }); |
107 |
| - $.get("/admin/stats?model=photo&by=month", function(data) { |
108 |
| - createChart(data, 'photo', '#03A9F4'); |
109 |
| - }); |
| 106 | + var models = ['user', 'topic', 'reply', 'note', 'notification', 'photo', 'comment']; |
| 107 | + for (var i = 0; i < models.length; i ++) { |
| 108 | + var model = models[i]; |
| 109 | + $.get("/admin/stats?model="+ model +"&by=month", function(data) { |
| 110 | + updateStatValue(data) |
| 111 | + }); |
| 112 | + } |
110 | 113 | </script>
|
111 | 114 | </div>
|
112 | 115 |
|
0 commit comments