educode_sales 0.5.1 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/educode_sales/businesses_controller.rb +5 -1
- data/app/controllers/educode_sales/follow_ups_controller.rb +2 -1
- data/app/controllers/educode_sales/operation_plans_controller.rb +22 -2
- data/app/controllers/educode_sales/operation_reports_controller.rb +33 -3
- data/app/controllers/educode_sales/plans_controller.rb +22 -2
- data/app/controllers/educode_sales/roles_controller.rb +5 -0
- data/app/controllers/educode_sales/sale_reports_controller.rb +33 -3
- data/app/controllers/educode_sales/sale_trends_controller.rb +196 -0
- data/app/controllers/educode_sales/sales_controller.rb +4 -0
- data/app/controllers/educode_sales/upload_files_controller.rb +33 -26
- data/app/models/educode_sales/common.rb +2 -1
- data/app/views/educode_sales/businesses/edit_follow_record.html.erb +3 -3
- data/app/views/educode_sales/businesses/file.html.erb +4 -5
- data/app/views/educode_sales/businesses/index.html.erb +14 -2
- data/app/views/educode_sales/businesses/index.json.jbuilder +1 -0
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +2 -2
- data/app/views/educode_sales/businesses/show_follow_record.html.erb +1 -1
- data/app/views/educode_sales/operation_plans/index.html.erb +6 -1
- data/app/views/educode_sales/operation_reports/audit.html.erb +5 -3
- data/app/views/educode_sales/operation_reports/show.html.erb +4 -7
- data/app/views/educode_sales/places/index.html.erb +20 -5
- data/app/views/educode_sales/places/index.json.jbuilder +18 -2
- data/app/views/educode_sales/plans/index.html.erb +6 -1
- data/app/views/educode_sales/roles/index.html.erb +19 -1
- data/app/views/educode_sales/roles/rename.html.erb +50 -0
- data/app/views/educode_sales/sale_reports/audit.html.erb +5 -3
- data/app/views/educode_sales/sale_reports/show.html.erb +3 -6
- data/app/views/educode_sales/sale_trends/trends.html.erb +284 -4
- data/app/views/educode_sales/sale_trends/trends.json.jbuilder +14 -0
- data/app/views/educode_sales/sales/index.html.erb +75 -9
- data/app/views/educode_sales/sales/index.json.jbuilder +35 -1
- data/app/views/educode_sales/sales/operations.json.jbuilder +11 -1
- data/app/views/educode_sales/staffs/index.html.erb +6 -1
- data/app/views/educode_sales/staffs/index.json.jbuilder +11 -1
- data/app/views/educode_sales/teachers/add_keys.html.erb +1 -1
- data/app/views/educode_sales/teachers/index.html.erb +6 -1
- data/app/views/educode_sales/teachers/new.html.erb +1 -0
- data/app/views/educode_sales/upload_files/index.json.jbuilder +1 -1
- data/config/routes.rb +3 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +4 -2
@@ -101,7 +101,7 @@
|
|
101
101
|
<div class="panel layui-bg-number">
|
102
102
|
<div class="panel-body">
|
103
103
|
<div class="panel-title">
|
104
|
-
<h5
|
104
|
+
<h5>已中标(总额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已中标商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
105
105
|
</div>
|
106
106
|
<div class="panel-content y-t-10">
|
107
107
|
<h1 class="no-margins"><%= @goal_amount %>万</h1>
|
@@ -114,7 +114,7 @@
|
|
114
114
|
<div class="panel layui-bg-number">
|
115
115
|
<div class="panel-body">
|
116
116
|
<div class="panel-title">
|
117
|
-
<h5
|
117
|
+
<h5>已签单(总额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已签单商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
118
118
|
</div>
|
119
119
|
<div class="panel-content y-t-10">
|
120
120
|
<h1 class="no-margins"><%= @service_amount %>万</h1>
|
@@ -148,6 +148,32 @@
|
|
148
148
|
</div>
|
149
149
|
</div>
|
150
150
|
</div>
|
151
|
+
<div class="layui-col-xs3">
|
152
|
+
<div class="panel layui-bg-number">
|
153
|
+
<div class="panel-body">
|
154
|
+
<div class="panel-title">
|
155
|
+
<h5>已中标(合同额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已中标商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
156
|
+
</div>
|
157
|
+
<div class="panel-content y-t-10">
|
158
|
+
<h1 class="no-margins"><%= @actual_goal_amount %>万</h1>
|
159
|
+
</div>
|
160
|
+
</div>
|
161
|
+
</div>
|
162
|
+
</div>
|
163
|
+
|
164
|
+
<div class="layui-col-xs3">
|
165
|
+
<div class="panel layui-bg-number">
|
166
|
+
<div class="panel-body">
|
167
|
+
<div class="panel-title">
|
168
|
+
<h5>已签单(合同额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已签单商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
169
|
+
</div>
|
170
|
+
<div class="panel-content y-t-10">
|
171
|
+
<h1 class="no-margins"><%= @actual_service_amount %>万</h1>
|
172
|
+
</div>
|
173
|
+
</div>
|
174
|
+
</div>
|
175
|
+
</div>
|
176
|
+
|
151
177
|
<div class="layui-row layui-col-space30" >
|
152
178
|
<div class="layui-col-xs3">
|
153
179
|
<div class="panel layui-bg-number">
|
@@ -168,12 +194,146 @@
|
|
168
194
|
</div>
|
169
195
|
</div>
|
170
196
|
</form>
|
197
|
+
<br>
|
198
|
+
<div class="layui-tab layui-tab-card" id="商机跟进数">
|
199
|
+
<ul class="layui-tab-title">
|
200
|
+
<li class="layui-this">商机跟进数</li>
|
201
|
+
</ul>
|
202
|
+
<div class="layui-tab-content" style="padding-right: 50px">
|
203
|
+
<div class="layui-tab-item layui-show " style="padding-left: 20px">
|
204
|
+
<div style="margin: 10px 10px 10px 10px">
|
205
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
206
|
+
<div class="layui-form-item">
|
207
|
+
<div class="layui-inline m-t-10">
|
208
|
+
<label class="layui-form-label">视图</label>
|
209
|
+
<div class="layui-input-inline">
|
210
|
+
<%= select_tag "follow_count_range", options_for_select([['按周','week'],['按天','day'],['按月','month'],['按年','year']],params[:follow_count_range]), {'lay-filter': 'follow_count'}%>
|
211
|
+
</div>
|
212
|
+
</div>
|
213
|
+
<div class="layui-inline">
|
214
|
+
<label class="layui-form-label">时间范围</label>
|
215
|
+
<div class="layui-input-inline">
|
216
|
+
<input type="text" class="layui-input month layui-hide" id="date_month" name="date_month" placeholder=" - " value="<%=params[:date_month] %>" >
|
217
|
+
<input type="text" class="layui-input year layui-hide" id="date_year" name="date_year" placeholder=" - " value="<%=params[:date_year] %>">
|
218
|
+
<input type="text" class="layui-input week " id="date_week" name="date_week" placeholder=" - " value="<%=params[:date_week].present? ? params[:date_week] : (Time.now - 30.days).to_s(:date) + ' - ' + Time.now.to_s(:date) %>">
|
219
|
+
<input type="text" class="layui-input day layui-hide" id="date" name="date" placeholder=" - " value="<%=params[:date] %>">
|
220
|
+
</div>
|
221
|
+
</div>
|
222
|
+
<div class="layui-inline">
|
223
|
+
<button type="submit" id="search_bt" class=" follow_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">确定
|
224
|
+
</button>
|
225
|
+
</div>
|
226
|
+
</div>
|
227
|
+
</form>
|
228
|
+
</div>
|
229
|
+
<canvas id="myChart" width="960" height="200"></canvas>
|
230
|
+
</div>
|
231
|
+
</div>
|
232
|
+
</div>
|
233
|
+
<br>
|
234
|
+
<br>
|
235
|
+
<div class="layui-tab layui-tab-card " id="销售额分析" lay-filter="test1">
|
236
|
+
<ul class="layui-tab-title">
|
237
|
+
<li class="layui-this">销售额分析</li>
|
238
|
+
</ul>
|
239
|
+
<div class="layui-tab-content" style="padding-right: 50px">
|
240
|
+
<div class="layui-tab-item layui-show" style="padding-left: 20px">
|
241
|
+
<div style="margin: 10px 10px 10px 10px">
|
242
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
243
|
+
<div class="layui-form-item">
|
244
|
+
<div class="layui-inline m-t-10">
|
245
|
+
<label class="layui-form-label">维度</label>
|
246
|
+
<div class="layui-input-inline">
|
247
|
+
<%= select_tag "count_type", options_for_select([['按合同额统计','actual_amount'],['按总额统计','total_amount']],params[:count_type]), {'lay-filter': 'count_type'}%>
|
248
|
+
</div>
|
249
|
+
</div>
|
250
|
+
<div class="layui-inline m-t-10">
|
251
|
+
<label class="layui-form-label">视图</label>
|
252
|
+
<div class="layui-input-inline">
|
253
|
+
<%= select_tag "goal_count_range", options_for_select([['按月','month'],['按年','year']],params[:goal_count_range]), {'lay-filter': 'goal_count'}%>
|
254
|
+
</div>
|
255
|
+
</div>
|
256
|
+
<div class="layui-inline">
|
257
|
+
<label class="layui-form-label">时间范围</label>
|
258
|
+
<div class="layui-input-inline">
|
259
|
+
<input type="text" class="layui-input goal_month " id="goal_date_month" name="goal_date_month" placeholder=" - " value="<%=params[:goal_date_month].present? ? params[:goal_date_month] : Time.now.year.to_s + "-01" + " - " + Time.now.strftime("%Y-%m") %>">
|
260
|
+
<input type="text" class="layui-input goal_year layui-hide" id="goal_date_year" name="goal_date_year" placeholder=" - " value="<%=params[:goal_date_year] %>">
|
261
|
+
</div>
|
262
|
+
</div>
|
263
|
+
<div class="layui-inline">
|
264
|
+
<button type="submit" id="search_bt" class="follow_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">确定
|
265
|
+
</button>
|
266
|
+
</div>
|
267
|
+
</div>
|
268
|
+
</form>
|
269
|
+
</div>
|
270
|
+
<canvas id="myChart2" width="960" height="200"></canvas>
|
271
|
+
</div>
|
272
|
+
|
273
|
+
</div>
|
274
|
+
</div>
|
275
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.css">
|
276
|
+
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.js"></script>
|
171
277
|
<script>
|
278
|
+
follow_type = "<%=@follow_count_range %>"
|
279
|
+
goal_type = "<%=@goal_count_range %>"
|
280
|
+
follow_flag = <%=params[:follow_count_range].present? %>
|
281
|
+
if(follow_flag){
|
282
|
+
window.location.href = "#商机跟进数"
|
283
|
+
}
|
284
|
+
|
285
|
+
goal_flag = <%=params[:goal_count_range].present? %>
|
286
|
+
if(goal_flag){
|
287
|
+
window.location.href = "#销售额分析"
|
288
|
+
}
|
172
289
|
layui.use(['form', 'jquery', 'request'], function () {
|
173
290
|
var $ = layui.jquery,
|
174
291
|
form = layui.form,
|
175
292
|
request = layui.request;
|
176
293
|
var year = "<%= @year %>";
|
294
|
+
var element = layui.element;
|
295
|
+
laydate = layui.laydate;
|
296
|
+
|
297
|
+
$(document).ready(function () {
|
298
|
+
$(".follow_count_bt").click(function () {
|
299
|
+
layer.msg("图表绘制中...", {
|
300
|
+
offset:['40%','46%']
|
301
|
+
})
|
302
|
+
layer.load(0, {});
|
303
|
+
setTimeout(function () {
|
304
|
+
layer.closeAll('loading');
|
305
|
+
}, 3000);
|
306
|
+
});
|
307
|
+
});
|
308
|
+
if(follow_type == "day"){
|
309
|
+
$(".year").addClass('layui-hide')
|
310
|
+
$(".month").addClass('layui-hide')
|
311
|
+
$(".week").addClass('layui-hide')
|
312
|
+
$(".day").removeClass('layui-hide')
|
313
|
+
}else if(follow_type == "month"){
|
314
|
+
$(".year").addClass('layui-hide')
|
315
|
+
$(".week").addClass('layui-hide')
|
316
|
+
$(".month").removeClass('layui-hide')
|
317
|
+
$(".day").addClass('layui-hide')
|
318
|
+
}else if(follow_type == "week"){
|
319
|
+
$(".year").addClass('layui-hide')
|
320
|
+
$(".day").addClass('layui-hide')
|
321
|
+
$(".week").removeClass('layui-hide')
|
322
|
+
$(".month").addClass('layui-hide')
|
323
|
+
}else {
|
324
|
+
$(".year").removeClass('layui-hide')
|
325
|
+
$(".month").addClass('layui-hide')
|
326
|
+
$(".day").addClass('layui-hide')
|
327
|
+
$(".week").addClass('layui-hide')
|
328
|
+
}
|
329
|
+
|
330
|
+
if(goal_type == "year"){
|
331
|
+
$(".goal_year").removeClass('layui-hide')
|
332
|
+
$(".goal_month").addClass('layui-hide')
|
333
|
+
}else{
|
334
|
+
$(".goal_year").addClass('layui-hide')
|
335
|
+
$(".goal_month").removeClass('layui-hide')
|
336
|
+
}
|
177
337
|
|
178
338
|
function editForm(el) {
|
179
339
|
$("#" + el + "_edit").click(function() {
|
@@ -205,18 +365,138 @@
|
|
205
365
|
})
|
206
366
|
}
|
207
367
|
|
368
|
+
// 时间选择器
|
369
|
+
laydate.render({
|
370
|
+
elem: '#date',
|
371
|
+
range: true
|
372
|
+
});
|
373
|
+
laydate.render({
|
374
|
+
elem: '#date_week',
|
375
|
+
range: true
|
376
|
+
});
|
377
|
+
laydate.render({
|
378
|
+
type: 'month',
|
379
|
+
elem: '#date_month',
|
380
|
+
range: true
|
381
|
+
});
|
382
|
+
laydate.render({
|
383
|
+
type: 'year',
|
384
|
+
elem: '#date_year',
|
385
|
+
range: true
|
386
|
+
});
|
387
|
+
laydate.render({
|
388
|
+
type: 'year',
|
389
|
+
elem: '#goal_date_year',
|
390
|
+
range: true
|
391
|
+
});
|
392
|
+
laydate.render({
|
393
|
+
type: 'month',
|
394
|
+
elem: '#goal_date_month',
|
395
|
+
range: true
|
396
|
+
});
|
397
|
+
|
398
|
+
|
208
399
|
form.on('select(year)', function(data){
|
209
400
|
console.log(data, )
|
210
401
|
year = data.value
|
211
402
|
window.location.href = "/missions/sale_trends/trends?year=" + data.value
|
212
403
|
})
|
213
|
-
|
404
|
+
form.on('select(follow_count)', function(data){
|
405
|
+
console.log(data, )
|
406
|
+
const value = data.value;
|
407
|
+
if(value == "month"){
|
408
|
+
$(".year").addClass('layui-hide')
|
409
|
+
$(".day").addClass('layui-hide')
|
410
|
+
$(".week").addClass('layui-hide')
|
411
|
+
$(".month").removeClass('layui-hide')
|
412
|
+
}else if(value == "year"){
|
413
|
+
$(".month").addClass('layui-hide')
|
414
|
+
$(".day").addClass('layui-hide')
|
415
|
+
$(".week").addClass('layui-hide')
|
416
|
+
$(".year").removeClass('layui-hide')
|
417
|
+
}else if(value == "week"){
|
418
|
+
$(".month").addClass('layui-hide')
|
419
|
+
$(".day").addClass('layui-hide')
|
420
|
+
$(".week").removeClass('layui-hide')
|
421
|
+
$(".year").addClass('layui-hide')
|
422
|
+
}else {
|
423
|
+
$(".month").addClass('layui-hide')
|
424
|
+
$(".year").addClass('layui-hide')
|
425
|
+
$(".day").removeClass('layui-hide')
|
426
|
+
$(".week").addClass('layui-hide')
|
427
|
+
|
428
|
+
}
|
429
|
+
})
|
430
|
+
|
431
|
+
form.on('select(goal_count)', function(data){
|
432
|
+
console.log(data, )
|
433
|
+
const value = data.value;
|
434
|
+
if(value == "month"){
|
435
|
+
$(".goal_year").addClass('layui-hide')
|
436
|
+
$(".goal_month").removeClass('layui-hide')
|
437
|
+
}else {
|
438
|
+
$(".goal_month").addClass('layui-hide')
|
439
|
+
$(".goal_year").removeClass('layui-hide')
|
440
|
+
}
|
441
|
+
})
|
442
|
+
|
214
443
|
editForm("chance_money");
|
215
444
|
editForm("ballot_money");
|
216
445
|
editForm("sign_money");
|
217
446
|
editForm("returned_money");
|
218
447
|
|
219
|
-
|
448
|
+
element.on('tab(test1)', function(){
|
449
|
+
window.location.href = "#销售额分析"
|
450
|
+
});
|
451
|
+
|
452
|
+
var ctx = document.getElementById('myChart');
|
453
|
+
var myChart = new Chart(ctx, {
|
454
|
+
type: 'line',
|
455
|
+
data: <%=raw @follow_count_data.to_json %>,
|
456
|
+
options: {
|
457
|
+
elements: {
|
458
|
+
line: {
|
459
|
+
tension: 0
|
460
|
+
}
|
461
|
+
}
|
462
|
+
}
|
463
|
+
});
|
464
|
+
|
465
|
+
|
466
|
+
var opt = {
|
467
|
+
events: false,
|
468
|
+
tooltips: {
|
469
|
+
enabled: false
|
470
|
+
},
|
471
|
+
hover: {
|
472
|
+
animationDuration: 0
|
473
|
+
},
|
474
|
+
animation: {
|
475
|
+
duration: 1,
|
476
|
+
onComplete: function () {
|
477
|
+
var chartInstance = this.chart,
|
478
|
+
ctx = chartInstance.ctx;
|
479
|
+
ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
|
480
|
+
ctx.textAlign = 'center';
|
481
|
+
ctx.textBaseline = 'bottom';
|
482
|
+
|
483
|
+
this.data.datasets.forEach(function (dataset, i) {
|
484
|
+
var meta = chartInstance.controller.getDatasetMeta(i);
|
485
|
+
meta.data.forEach(function (bar, index) {
|
486
|
+
var data = dataset.data[index];
|
487
|
+
ctx.fillText(data, bar._model.x, bar._model.y - 5);
|
488
|
+
});
|
489
|
+
});
|
490
|
+
}
|
491
|
+
}
|
492
|
+
};
|
493
|
+
|
220
494
|
|
495
|
+
var ctx = document.getElementById('myChart2');
|
496
|
+
var myChart2 = new Chart(ctx, {
|
497
|
+
type: 'bar',
|
498
|
+
data: <%=raw @goal_count_data.to_json %>,
|
499
|
+
options: opt
|
500
|
+
});
|
221
501
|
})
|
222
502
|
</script>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
my_array = [1,2,3,4,5]
|
2
|
+
json.data do
|
3
|
+
json.labels my_array
|
4
|
+
json.datasets do
|
5
|
+
json.array! [1,2] do |d|
|
6
|
+
json.label '人名'
|
7
|
+
json.backgroundColor "#fff"
|
8
|
+
json.borderColor "#36A2EB"
|
9
|
+
json.pointBackgroundColor "#36A2EB"
|
10
|
+
json.pointBorderColor "#fff"
|
11
|
+
json.data my_array
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div class="section">
|
2
2
|
<h4><span>销售人员列表</span></h4>
|
3
3
|
<hr>
|
4
|
-
<table class="layui-hide" id="table"></table>
|
4
|
+
<table class="layui-hide" id="table" lay-filter="table" ></table>
|
5
5
|
</div>
|
6
6
|
<script type="text/html" id="toolbarDemo">
|
7
7
|
<div class="layui-btn-container">
|
@@ -18,6 +18,26 @@
|
|
18
18
|
<a href="/missions/businesses?clazz_id={{d.b_clazz_id}}&staff_id={{d.id}}">{{d.business_b}}</a>
|
19
19
|
</div>
|
20
20
|
</script>
|
21
|
+
<script type="text/html" id="business_c">
|
22
|
+
<div class="layui-text">
|
23
|
+
<a href="/missions/businesses?clazz_id={{d.c_clazz_id}}&staff_id={{d.id}}">{{d.business_c}}</a>
|
24
|
+
</div>
|
25
|
+
</script>
|
26
|
+
<script type="text/html" id="business_d">
|
27
|
+
<div class="layui-text">
|
28
|
+
<a href="/missions/businesses?clazz_id={{d.d_clazz_id}}&staff_id={{d.id}}">{{d.business_d}}</a>
|
29
|
+
</div>
|
30
|
+
</script>
|
31
|
+
<script type="text/html" id="business_e">
|
32
|
+
<div class="layui-text">
|
33
|
+
<a href="/missions/businesses?clazz_id={{d.e_clazz_id}}&staff_id={{d.id}}">{{d.business_e}}</a>
|
34
|
+
</div>
|
35
|
+
</script>
|
36
|
+
<script type="text/html" id="business_o">
|
37
|
+
<div class="layui-text">
|
38
|
+
<a href="/missions/businesses?clazz_id={{d.o_clazz_id}}&staff_id={{d.id}}">{{d.business_o}}</a>
|
39
|
+
</div>
|
40
|
+
</script>
|
21
41
|
<script>
|
22
42
|
layui.use('table', function () {
|
23
43
|
var table = layui.table;
|
@@ -45,22 +65,53 @@
|
|
45
65
|
title: 'A类商机',
|
46
66
|
templet: "#business_a",
|
47
67
|
totalRow:true,
|
48
|
-
|
49
|
-
|
68
|
+
sort:true,
|
69
|
+
width: 100
|
70
|
+
},
|
71
|
+
{
|
50
72
|
field: 'business_b',
|
51
73
|
title: 'B类商机',
|
52
74
|
templet: "#business_b",
|
53
|
-
totalRow:true,
|
54
|
-
width:
|
55
|
-
},
|
75
|
+
totalRow:true,sort:true,
|
76
|
+
width: 100
|
77
|
+
},
|
78
|
+
{
|
79
|
+
field: 'business_c',
|
80
|
+
title: 'C类商机',
|
81
|
+
templet: "#business_c",
|
82
|
+
totalRow:true,sort:true,
|
83
|
+
width: 100
|
84
|
+
},
|
85
|
+
{
|
86
|
+
field: 'business_d',
|
87
|
+
title: 'D类商机',
|
88
|
+
templet: "#business_d",
|
89
|
+
totalRow:true,sort:true,
|
90
|
+
width: 100
|
91
|
+
},
|
92
|
+
{
|
93
|
+
field: 'business_e',
|
94
|
+
title: 'E类商机',
|
95
|
+
templet: "#business_e",
|
96
|
+
totalRow:true,sort:true,
|
97
|
+
width: 100
|
98
|
+
},
|
99
|
+
{
|
100
|
+
field: 'business_o',
|
101
|
+
title: 'O类商机',
|
102
|
+
templet: "#business_o",
|
103
|
+
totalRow:true,sort:true,
|
104
|
+
width: 100
|
105
|
+
},
|
106
|
+
{
|
56
107
|
field: 'goal',
|
57
108
|
title: '中标金额',
|
58
|
-
totalRow:true,
|
109
|
+
totalRow:true,sort:true,
|
59
110
|
width: 120
|
60
111
|
}, {
|
61
112
|
field: 'return_money',
|
62
|
-
title: '
|
63
|
-
totalRow:true,
|
113
|
+
title: '回款金额',
|
114
|
+
totalRow:true,sort:true,
|
64
115
|
width: 120
|
65
116
|
}
|
66
117
|
]
|
@@ -69,5 +120,20 @@
|
|
69
120
|
limits: [10,15,20,30,40,50,60,70,80,90],
|
70
121
|
page: true
|
71
122
|
});
|
123
|
+
|
124
|
+
// var sort = {}, search = {};
|
125
|
+
// table.on('sort(table)', function (obj) {
|
126
|
+
// sort.field = obj.field;
|
127
|
+
// sort.order = obj.type;
|
128
|
+
// table.reload('table', {
|
129
|
+
// initSort: obj,
|
130
|
+
// where: {
|
131
|
+
// sort: sort,
|
132
|
+
// q: search
|
133
|
+
// }
|
134
|
+
// });
|
135
|
+
// })
|
136
|
+
|
137
|
+
|
72
138
|
});
|
73
139
|
</script>
|
@@ -1,5 +1,10 @@
|
|
1
1
|
businesses_a_count = 0
|
2
2
|
businesses_b_count = 0
|
3
|
+
businesses_c_count = 0
|
4
|
+
businesses_d_count = 0
|
5
|
+
businesses_e_count = 0
|
6
|
+
businesses_o_count = 0
|
7
|
+
area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
|
3
8
|
json.data do
|
4
9
|
json.array! @staffs do |d|
|
5
10
|
part_a_ids = EducodeSales::Business.where("educode_sales_businesses.last_follow_up_id is null AND staff_id = ?",d.id).ids
|
@@ -11,23 +16,52 @@ json.data do
|
|
11
16
|
json.id d.id
|
12
17
|
json.name d.user.real_name
|
13
18
|
json.role d.role&.name
|
14
|
-
json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
19
|
+
# json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
20
|
+
if d.areas.present?
|
21
|
+
if d.areas.ids.sort.to_s == area_ids
|
22
|
+
json.area '全国'
|
23
|
+
else
|
24
|
+
json.area d.areas.pluck(:name).join("、")
|
25
|
+
end
|
26
|
+
else
|
27
|
+
json.area ''
|
28
|
+
end
|
15
29
|
business_a = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @a_clazz&.id).count
|
16
30
|
businesses_a_count += business_a
|
17
31
|
json.business_a business_a
|
18
32
|
business_b = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @b_clazz&.id).count
|
19
33
|
businesses_b_count += business_b
|
20
34
|
json.business_b business_b
|
35
|
+
business_c = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @c_clazz&.id).count
|
36
|
+
businesses_c_count += business_c
|
37
|
+
json.business_c business_c
|
38
|
+
business_d = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @d_clazz&.id).count
|
39
|
+
businesses_d_count += business_d
|
40
|
+
json.business_d business_b
|
41
|
+
business_e = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @e_clazz&.id).count
|
42
|
+
businesses_e_count += business_e
|
43
|
+
json.business_e business_b
|
44
|
+
business_o = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @o_clazz&.id).count
|
45
|
+
businesses_o_count += business_o
|
46
|
+
json.business_o business_o
|
21
47
|
json.goal @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id != ? AND educode_sales_follow_ups.stage_id in (?)", @x, @step_ids).sum(:total_amount).round(2)
|
22
48
|
json.return_money @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id != ?", @x).sum("educode_sales_businesses.return_money").round(2)
|
23
49
|
json.a_clazz_id @a_clazz&.id
|
24
50
|
json.b_clazz_id @b_clazz&.id
|
51
|
+
json.c_clazz_id @c_clazz&.id
|
52
|
+
json.d_clazz_id @d_clazz&.id
|
53
|
+
json.e_clazz_id @e_clazz&.id
|
54
|
+
json.o_clazz_id @o_clazz&.id
|
25
55
|
end
|
26
56
|
end
|
27
57
|
|
28
58
|
json.totalRow do
|
29
59
|
json.business_a businesses_a_count.to_s
|
30
60
|
json.business_b businesses_b_count.to_s
|
61
|
+
json.business_c businesses_c_count.to_s
|
62
|
+
json.business_d businesses_d_count.to_s
|
63
|
+
json.business_e businesses_e_count.to_s
|
64
|
+
json.business_o businesses_o_count.to_s
|
31
65
|
end
|
32
66
|
json.code 0
|
33
67
|
json.count @staffs.total_count
|
@@ -1,12 +1,22 @@
|
|
1
1
|
departments_count = 0
|
2
2
|
schools_count = 0
|
3
|
+
area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
|
3
4
|
json.data do
|
4
5
|
json.array! @staffs do |d|
|
5
6
|
json.id d.id
|
6
7
|
json.name d.user.real_name
|
7
8
|
json.role d.role&.name
|
8
9
|
json.job_type EducodeSales::Common.job_type_name[d.job_type]
|
9
|
-
json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
10
|
+
# json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
11
|
+
if d.areas.present?
|
12
|
+
if d.areas.ids.sort.to_s == area_ids
|
13
|
+
json.area '全国'
|
14
|
+
else
|
15
|
+
json.area d.areas.pluck(:name).join("、")
|
16
|
+
end
|
17
|
+
else
|
18
|
+
json.area ''
|
19
|
+
end
|
10
20
|
departments = EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.staff_id = #{d.id}").select("COUNT(educode_sales_follow_ups.staff_id) AS count")[0]&.send('count') + EducodeSales::Teacher.joins(:follow_up).where("educode_sales_teacher_follows.staff_id = #{d.id}").select("COUNT(educode_sales_teacher_follows.staff_id) AS count")[0]&.send('count') || 0
|
11
21
|
json.departments departments
|
12
22
|
schools = EducodeSales::Business.joins(:last_follow_up, :department).where("educode_sales_follow_ups.staff_id = #{d.id}").select("COUNT(distinct(departments.school_id)) AS count")[0]['count'] + EducodeSales::Teacher.joins(:follow_up, :department).where("educode_sales_teacher_follows.staff_id = #{d.id}").select("COUNT(distinct(departments.school_id)) AS count")[0]['count']
|
@@ -1,15 +1,25 @@
|
|
1
|
+
area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
|
1
2
|
json.data do
|
2
3
|
json.array! @staffs do |d|
|
3
4
|
json.id d.id
|
4
5
|
json.name d.user.real_name
|
5
6
|
json.role d.role&.name
|
6
|
-
json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
7
7
|
json.job_type EducodeSales::Common.job_type_name[d.job_type]
|
8
8
|
json.month d.month
|
9
9
|
json.enabled_at d.enabled_at ? d.enabled_at.to_s(:date) : ''
|
10
10
|
json.expired_at d.enabled_at ? "#{d.enabled_at.to_s(:date)}-#{d.expired_at.to_s(:date)}" : ''
|
11
|
+
if d.areas.present?
|
12
|
+
if d.areas.ids.sort.to_s == area_ids
|
13
|
+
json.area '全国'
|
14
|
+
else
|
15
|
+
json.area d.areas.pluck(:name).join("、")
|
16
|
+
end
|
17
|
+
else
|
18
|
+
json.area ''
|
19
|
+
end
|
11
20
|
end
|
12
21
|
end
|
13
22
|
|
23
|
+
|
14
24
|
json.code 0
|
15
25
|
json.count @staffs.total_count
|
@@ -144,7 +144,7 @@
|
|
144
144
|
$(document).on('click','#new_teacher1',function(){
|
145
145
|
var content = miniPage.getHrefContent('/missions/teachers/new');
|
146
146
|
var openWH = miniPage.getOpenWidthHeight();
|
147
|
-
|
147
|
+
teacher_uni_index = layer.open({
|
148
148
|
id:"a",
|
149
149
|
title: '添加老师',
|
150
150
|
type: 1,
|
@@ -4,7 +4,7 @@ json.data do
|
|
4
4
|
json.name d.filename
|
5
5
|
json.size d.filesize < 1000000 ? (d.filesize.to_f / 1000).round(2).to_s + 'KB' : (d.filesize.to_f / 1000000).round(2).to_s + 'MB'
|
6
6
|
json.created_on d.created_on.to_s
|
7
|
-
json.upload_person
|
7
|
+
json.upload_person d.author.real_name
|
8
8
|
json.disk_filename d.disk_filename
|
9
9
|
json.content_type d.content_type
|
10
10
|
end
|
data/config/routes.rb
CHANGED