educode_sales 0.6.6 → 0.6.7
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/activities_controller.rb +0 -2
- data/app/controllers/educode_sales/businesses_controller.rb +81 -43
- data/app/controllers/educode_sales/money_plans_controller.rb +2 -2
- data/app/controllers/educode_sales/sale_trends_controller.rb +105 -18
- data/app/controllers/educode_sales/teacher_follows_controller.rb +1 -93
- data/app/models/educode_sales/business_export_record.rb +5 -0
- data/app/views/educode_sales/activities/index.html.erb +7 -1
- data/app/views/educode_sales/activities/new.html.erb +1 -1
- data/app/views/educode_sales/businesses/edit_follow_record.html.erb +4 -4
- data/app/views/educode_sales/businesses/edit_plan.html.erb +5 -2
- data/app/views/educode_sales/businesses/export_records.html.erb +53 -0
- data/app/views/educode_sales/businesses/export_records.json.jbuilder +11 -0
- data/app/views/educode_sales/businesses/index.html.erb +66 -5
- data/app/views/educode_sales/businesses/index.json.jbuilder +31 -2
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +6 -5
- data/app/views/educode_sales/commons/index.html.erb +7 -1
- data/app/views/educode_sales/money_plans/index.html.erb +2 -2
- data/app/views/educode_sales/roles/index.html.erb +7 -1
- data/app/views/educode_sales/sale_trends/trends.html.erb +96 -44
- data/app/views/educode_sales/sale_trends/trends.json.jbuilder +2 -1
- data/app/views/educode_sales/teachers/index.html.erb +1 -1
- data/app/views/layouts/educode_sales/application.html.erb +1 -1
- data/config/routes.rb +2 -0
- data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +2 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +5 -2
@@ -60,13 +60,13 @@
|
|
60
60
|
<div class="layui-inline show_item" style="display:none;">
|
61
61
|
<label class="layui-form-label">创建时间</label>
|
62
62
|
<div class="layui-input-inline">
|
63
|
-
<input type="text" class="layui-input" id="date" name="date" placeholder=" - ">
|
63
|
+
<input type="text" class="layui-input" id="date" name="date" placeholder=" - " autocomplete="off">
|
64
64
|
</div>
|
65
65
|
</div>
|
66
66
|
<div class="layui-inline show_item" style="display:none;">
|
67
67
|
<label class="layui-form-label">招标时间</label>
|
68
68
|
<div class="layui-input-inline">
|
69
|
-
<input type="text" class="layui-input" id="invitation_at" name="invitation_at" placeholder=" - ">
|
69
|
+
<input type="text" class="layui-input" id="invitation_at" name="invitation_at" placeholder=" - " autocomplete="off">
|
70
70
|
</div>
|
71
71
|
</div>
|
72
72
|
<div class="layui-inline">
|
@@ -74,7 +74,7 @@
|
|
74
74
|
</button>
|
75
75
|
<button type="submit" id="search_bt" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">搜索
|
76
76
|
</button>
|
77
|
-
<a style="padding-left: 20px;color: #0000FF" href="javascript:;" type="submit" class="" lay-submit lay-filter="show_hide"
|
77
|
+
<a style="padding-left: 20px;color: #0000FF" href="javascript:;" type="submit" class="" lay-submit lay-filter="show_hide">高级搜索
|
78
78
|
</a>
|
79
79
|
</div>
|
80
80
|
</div>
|
@@ -88,6 +88,7 @@
|
|
88
88
|
<script type="text/html" id="bussinessBar">
|
89
89
|
<div class="layui-btn-container">
|
90
90
|
<span class="table-label">商机列表</span>
|
91
|
+
<a class="layui-btn-xs data-count-edit export_more-btn pull-right" style="color: #0000FF;" data-name="export" data-id="export">导出<i class="layui-icon layui-icon-down layui-nav-more"></i></a>
|
91
92
|
<% if can? :create, EducodeSales::Business %>
|
92
93
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add"> 添加商机</button>
|
93
94
|
<% end %>
|
@@ -203,12 +204,13 @@
|
|
203
204
|
|
204
205
|
|
205
206
|
table = layui.table;
|
206
|
-
table.render({
|
207
|
+
var business_table = table.render({
|
207
208
|
elem: '#businesses_table',
|
208
209
|
url: '/missions/businesses',
|
209
210
|
where: {q: form.val('search_form')},
|
210
211
|
defaultToolbar: ['filter'],
|
211
212
|
toolbar: '#bussinessBar',
|
213
|
+
title: '商机数据表',
|
212
214
|
totalRow: true,//开启合并行
|
213
215
|
cols: [
|
214
216
|
[
|
@@ -328,6 +330,11 @@
|
|
328
330
|
sort: true,
|
329
331
|
totalRow: true
|
330
332
|
},
|
333
|
+
{
|
334
|
+
field: 'return_money_days',
|
335
|
+
width: 120,
|
336
|
+
title: '首次回款周期(天)',
|
337
|
+
},
|
331
338
|
{
|
332
339
|
field: 'place',
|
333
340
|
width: 160,
|
@@ -348,12 +355,16 @@
|
|
348
355
|
page: true,
|
349
356
|
skin: 'line',
|
350
357
|
done: function (res) {
|
351
|
-
|
358
|
+
exportData=res.data1;
|
359
|
+
console.log(exportData);
|
360
|
+
drowpdwonRender()
|
361
|
+
export_drowpdwonRender()
|
352
362
|
}
|
353
363
|
|
354
364
|
});
|
355
365
|
|
356
366
|
var dropmenu = gon.menus;
|
367
|
+
var export_dropmenu = gon.export_menus;
|
357
368
|
|
358
369
|
drowpdwonRender = function() {
|
359
370
|
dropdown.render({
|
@@ -386,6 +397,56 @@
|
|
386
397
|
});
|
387
398
|
}
|
388
399
|
|
400
|
+
export_drowpdwonRender = function() {
|
401
|
+
dropdown.render({
|
402
|
+
elem: '.export_more-btn',
|
403
|
+
data: export_dropmenu,
|
404
|
+
click: function(data, othis){
|
405
|
+
var elem = $(this.elem);
|
406
|
+
id = elem.data('id');
|
407
|
+
switch (data.event) {
|
408
|
+
case 'export_csv':
|
409
|
+
export_csv();
|
410
|
+
break;
|
411
|
+
case 'export_excel':
|
412
|
+
export_excel();
|
413
|
+
break;
|
414
|
+
case 'export_records':
|
415
|
+
export_records();
|
416
|
+
break;
|
417
|
+
}
|
418
|
+
}
|
419
|
+
});
|
420
|
+
}
|
421
|
+
|
422
|
+
function export_csv() {
|
423
|
+
table.exportFile(business_table.config.id,exportData, 'csv');
|
424
|
+
request.get('/missions/businesses/add_export_records?type=csv', {}, function (res) {
|
425
|
+
})
|
426
|
+
}
|
427
|
+
function export_excel() {
|
428
|
+
table.exportFile(business_table.config.id,exportData, 'xls');
|
429
|
+
request.get('/missions/businesses/add_export_records?type=excel', {}, function (res) {
|
430
|
+
})
|
431
|
+
}
|
432
|
+
function export_records() {
|
433
|
+
var content = miniPage.getHrefContent('/missions/businesses/export_records')
|
434
|
+
var openWH = miniPage.getOpenWidthHeight();
|
435
|
+
sindex = layer.open({
|
436
|
+
title: '·',
|
437
|
+
type: 1,
|
438
|
+
shade: 0.2,
|
439
|
+
maxmin: true,
|
440
|
+
shadeClose: true,
|
441
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
442
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
443
|
+
content: content
|
444
|
+
});
|
445
|
+
$(window).on("resize", function () {
|
446
|
+
layer.full(sindex);
|
447
|
+
});
|
448
|
+
}
|
449
|
+
|
389
450
|
function week(id) {
|
390
451
|
var content = miniPage.getHrefContent('/missions/plans/new_week?business_id=' + id);
|
391
452
|
var openWH = miniPage.getOpenWidthHeight();
|
@@ -9,8 +9,6 @@ json.data do
|
|
9
9
|
json.follow_ups_count d.follow_ups.where(deleted_at: nil).size
|
10
10
|
follow_ups_count += d.follow_ups_count
|
11
11
|
json.follow_up_id d.last_follow_up_id
|
12
|
-
# json.teachers_count d.follow_ups.sum(:key_people_count)
|
13
|
-
# json.teachers_count EducodeSales::FollowUp.order(created_at: :desc).find_by(business_id: d.id).present? ? EducodeSales::FollowUp.order(created_at: :desc).find_by(business_id: d.id).key_people_count : 0
|
14
12
|
json.clazz d.last_follow_up&.clazz&.name || ""
|
15
13
|
json.stage d.last_follow_up&.stage&.name
|
16
14
|
json.invitation_at d.last_follow_up&.invitation_at.to_s
|
@@ -21,6 +19,37 @@ json.data do
|
|
21
19
|
json.actual_amount d.last_follow_up&.actual_amount
|
22
20
|
json.return_money d.return_money
|
23
21
|
json.wait_return_money d.wait_return_money.to_i.round(2)
|
22
|
+
json.return_money_days d.last_follow_up&.reception_at.present? && d.last_follow_up.money_plans.where(clazz: '已完成').present? ? (d.last_follow_up.money_plans.where(clazz: '已完成').order(created_at: :asc).first.date_at.to_s(:date).to_date - d.last_follow_up&.reception_at).to_i : ''
|
23
|
+
json.place d.last_follow_up&.place&.name
|
24
|
+
json.last_follow_person d.last_follow_up.present? ? d.last_follow_up.staff.user.real_name : EducodeSales::Staff.find(d.staff_id).user.real_name
|
25
|
+
json.source d.source
|
26
|
+
json.assign_follow_ups d.last_follow_up.present? ? d.last_follow_up.assign_follow_ups.pluck(:staff_id) : []
|
27
|
+
json.current_staff_id @current_admin.id
|
28
|
+
json.staff_id d.staff_id
|
29
|
+
json.latest_time d.last_follow_up.present? ? d.last_follow_up.created_at.to_s : ''
|
30
|
+
end
|
31
|
+
end
|
32
|
+
json.data1 do
|
33
|
+
json.array! @businesses_exports do |d|
|
34
|
+
json.id d.id
|
35
|
+
json.name d.name
|
36
|
+
json.department d.department.name
|
37
|
+
json.school d.department.school.name
|
38
|
+
json.school_id d.department.school.id
|
39
|
+
json.follow_ups_count d.follow_ups.where(deleted_at: nil).size
|
40
|
+
follow_ups_count += d.follow_ups_count
|
41
|
+
json.follow_up_id d.last_follow_up_id
|
42
|
+
json.clazz d.last_follow_up&.clazz&.name || ""
|
43
|
+
json.stage d.last_follow_up&.stage&.name
|
44
|
+
json.invitation_at d.last_follow_up&.invitation_at.to_s
|
45
|
+
json.reception_at d.last_follow_up&.reception_at.to_s
|
46
|
+
json.bidded_date d.last_follow_up&.bidded_date.to_s
|
47
|
+
json.signed_date d.last_follow_up&.signed_date.to_s
|
48
|
+
json.total_amount d.last_follow_up&.total_amount
|
49
|
+
json.actual_amount d.last_follow_up&.actual_amount
|
50
|
+
json.return_money d.return_money
|
51
|
+
json.wait_return_money d.wait_return_money.to_i.round(2)
|
52
|
+
json.return_money_days d.last_follow_up&.reception_at.present? && d.last_follow_up.money_plans.where(clazz: '已完成').present? ? (d.last_follow_up.money_plans.where(clazz: '已完成').order(created_at: :asc).first.date_at.to_s(:date).to_date - d.last_follow_up&.reception_at).to_i : ''
|
24
53
|
json.place d.last_follow_up&.place&.name
|
25
54
|
json.last_follow_person d.last_follow_up.present? ? d.last_follow_up.staff.user.real_name : EducodeSales::Staff.find(d.staff_id).user.real_name
|
26
55
|
json.source d.source
|
@@ -87,10 +87,9 @@
|
|
87
87
|
<br>
|
88
88
|
<div class="layui-inline new_place_select">
|
89
89
|
<label class="layui-form-label">渠道</label>
|
90
|
-
<div class="layui-input-inline" style="
|
90
|
+
<div class="layui-input-inline" style="">
|
91
91
|
<div id="place" style="width: 190px;"></div>
|
92
92
|
</div>
|
93
|
-
总额里,渠道拿到的部分。
|
94
93
|
</div>
|
95
94
|
<br>
|
96
95
|
<div class="layui-inline">
|
@@ -98,6 +97,7 @@
|
|
98
97
|
<div class="layui-input-inline">
|
99
98
|
<input name="divide_amount" class="layui-input" value="<%= @last_follow_up&.divide_amount%>">
|
100
99
|
</div>
|
100
|
+
总额里,渠道拿到的部分。
|
101
101
|
</div>
|
102
102
|
<div class="layui-form-item">
|
103
103
|
<div class="layui-inline">
|
@@ -110,10 +110,10 @@
|
|
110
110
|
</div>
|
111
111
|
<div class="layui-form-item">
|
112
112
|
<label class="layui-form-label">指定跟进人</label>
|
113
|
-
<div class="layui-input-inline" style="
|
113
|
+
<div class="layui-input-inline" style="">
|
114
114
|
<div id="assign_follow" style="width: 512px;"></div>
|
115
115
|
</div>
|
116
|
-
<div class="layui-inline" style="padding: 9px 15px">
|
116
|
+
<div class="layui-inline" style="padding: 9px 15px;z-index: -1;">
|
117
117
|
<label class="layui-form-label" style="padding-left: 220px"></label>
|
118
118
|
指定跟进人和商机创建者,同时拥有对该商机的管理权限
|
119
119
|
</div>
|
@@ -143,7 +143,7 @@
|
|
143
143
|
</div>
|
144
144
|
<div class="layui-form-item m-t-20">
|
145
145
|
<div class="layui-input-block">
|
146
|
-
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="add_follow_up">提交</button>
|
146
|
+
<button class="layui-btn layui-btn-normal submit-btn" lay-submit lay-filter="add_follow_up">提交</button>
|
147
147
|
</div>
|
148
148
|
</div>
|
149
149
|
</div>
|
@@ -248,6 +248,7 @@
|
|
248
248
|
form.render();
|
249
249
|
|
250
250
|
form.on('submit(add_follow_up)', function (data) {
|
251
|
+
$(".submit-btn").addClass("layui-hide");
|
251
252
|
var assign_follow = [];
|
252
253
|
sales_list.getValue().forEach(function(d) {
|
253
254
|
assign_follow.push(d.value);
|
@@ -28,7 +28,7 @@
|
|
28
28
|
<div class="layui-inline">
|
29
29
|
<label class="layui-form-label">回款时间</label>
|
30
30
|
<div class="layui-input-inline">
|
31
|
-
<input type="text" class="layui-input" id="date" name="date" placeholder=" - ">
|
31
|
+
<input type="text" class="layui-input" id="date" name="date" placeholder=" - " autocomplete="off">
|
32
32
|
</div>
|
33
33
|
</div>
|
34
34
|
<div class="layui-inline">
|
@@ -43,7 +43,7 @@
|
|
43
43
|
|
44
44
|
<script type="text/html" id="toolbarDemo">
|
45
45
|
<div class="layui-btn-container">
|
46
|
-
<span class="table-label"
|
46
|
+
<span class="table-label">回款计划</span>
|
47
47
|
</div>
|
48
48
|
</script>
|
49
49
|
|
@@ -20,7 +20,7 @@
|
|
20
20
|
<h5>商机目标</h5>
|
21
21
|
</div>
|
22
22
|
<div class="panel-content y-t-10">
|
23
|
-
<h1 class="no-margins" id="chance_money_value"
|
23
|
+
<h1 class="no-margins" id="chance_money_value"><%=@sale_trend.present? ? @sale_trend.chance_money : EducodeSales::SaleTrend.sum(:chance_money)%>万</h1>
|
24
24
|
<div id="chance_money_field" class="layui-hide">
|
25
25
|
<input type="text" name="chance_money" autocomplete="off"
|
26
26
|
class="layui-input" id="chance_money">
|
@@ -39,7 +39,7 @@
|
|
39
39
|
<h5>中标目标</h5>
|
40
40
|
</div>
|
41
41
|
<div class="panel-content y-t-10">
|
42
|
-
<h1 class="no-margins" id="ballot_money_value"
|
42
|
+
<h1 class="no-margins" id="ballot_money_value"><%=@sale_trend.present? ? @sale_trend.ballot_money : EducodeSales::SaleTrend.sum(:ballot_money)%>万</h1>
|
43
43
|
<div id="ballot_money_field" class="layui-hide">
|
44
44
|
<input type="text" name="ballot_money" autocomplete="off" class="layui-input" id="ballot_money">
|
45
45
|
</div>
|
@@ -57,7 +57,7 @@
|
|
57
57
|
<h5>签单目标</h5>
|
58
58
|
</div>
|
59
59
|
<div class="panel-content y-t-10">
|
60
|
-
<h1 class="no-margins" id="sign_money_value"
|
60
|
+
<h1 class="no-margins" id="sign_money_value"><%=@sale_trend.present? ? @sale_trend.sign_money : EducodeSales::SaleTrend.sum(:sign_money)%>万</h1>
|
61
61
|
<div id="sign_money_field" class="layui-hide">
|
62
62
|
<input type="text" name="sign_money" autocomplete="off" class="layui-input" id="sign_money">
|
63
63
|
</div>
|
@@ -75,7 +75,7 @@
|
|
75
75
|
<h5>回款目标</h5>
|
76
76
|
</div>
|
77
77
|
<div class="panel-content y-t-10">
|
78
|
-
<h1 class="no-margins" id="returned_money_value"
|
78
|
+
<h1 class="no-margins" id="returned_money_value"><%=@sale_trend.present? ? @sale_trend.returned_money : EducodeSales::SaleTrend.sum(:returned_money)%>万</h1>
|
79
79
|
<div id="returned_money_field" class="layui-hide">
|
80
80
|
<input type="text" name="returned_money" autocomplete="off" class="layui-input" id="returned_money">
|
81
81
|
</div>
|
@@ -88,7 +88,7 @@
|
|
88
88
|
<div class="panel layui-bg-number">
|
89
89
|
<div class="panel-body">
|
90
90
|
<div class="panel-title">
|
91
|
-
<h5>现有商机<a href="/missions/businesses?name=(
|
91
|
+
<h5>现有商机<a href="/missions/businesses?name=(销售态势-<%=@year %>-现有商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
92
92
|
</div>
|
93
93
|
<div class="panel-content y-t-10">
|
94
94
|
<h1 class="no-margins"><%= @business_amount %>万</h1>
|
@@ -195,12 +195,12 @@
|
|
195
195
|
</div>
|
196
196
|
</form>
|
197
197
|
<br>
|
198
|
-
<div class="
|
198
|
+
<div class="" id="商机跟进数">
|
199
199
|
<ul class="layui-tab-title">
|
200
200
|
<li class="layui-this">商机跟进数</li>
|
201
201
|
</ul>
|
202
|
-
<div class="
|
203
|
-
<div class="
|
202
|
+
<div class="" style="padding-right: 50px">
|
203
|
+
<div class=" layui-show " style="padding-left: 20px">
|
204
204
|
<div style="margin: 10px 10px 10px 10px">
|
205
205
|
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
206
206
|
<div class="layui-form-item">
|
@@ -213,10 +213,10 @@
|
|
213
213
|
<div class="layui-inline">
|
214
214
|
<label class="layui-form-label">时间范围</label>
|
215
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).beginning_of_week.to_s(:date) + ' - ' + Time.now.end_of_week.to_s(:date) %>">
|
219
|
-
<input type="text" class="layui-input day layui-hide" id="date" name="date" placeholder=" - " value="<%=params[:date] %>">
|
216
|
+
<input type="text" class="layui-input month layui-hide" id="date_month" name="date_month" placeholder=" - " value="<%=params[:date_month] %>" autocomplete="off" >
|
217
|
+
<input type="text" class="layui-input year layui-hide" id="date_year" name="date_year" placeholder=" - " value="<%=params[:date_year] %>" autocomplete="off">
|
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).beginning_of_week.to_s(:date) + ' - ' + Time.now.end_of_week.to_s(:date) %>" autocomplete="off">
|
219
|
+
<input type="text" class="layui-input day layui-hide" id="date" name="date" placeholder=" - " value="<%=params[:date] %>" autocomplete="off">
|
220
220
|
</div>
|
221
221
|
</div>
|
222
222
|
<div class="layui-inline">
|
@@ -232,12 +232,12 @@
|
|
232
232
|
</div>
|
233
233
|
<br>
|
234
234
|
<br>
|
235
|
-
<div class="
|
235
|
+
<div class=" " id="销售额分析" lay-filter="test1">
|
236
236
|
<ul class="layui-tab-title">
|
237
237
|
<li class="layui-this">销售额分析</li>
|
238
238
|
</ul>
|
239
|
-
<div class="
|
240
|
-
<div class="
|
239
|
+
<div class="" style="padding-right: 50px">
|
240
|
+
<div class=" layui-show" style="padding-left: 20px">
|
241
241
|
<div style="margin: 10px 10px 10px 10px">
|
242
242
|
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
243
243
|
<div class="layui-form-item">
|
@@ -256,8 +256,8 @@
|
|
256
256
|
<div class="layui-inline">
|
257
257
|
<label class="layui-form-label">时间范围</label>
|
258
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] %>">
|
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") %>" autocomplete="off">
|
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] %>" autocomplete="off">
|
261
261
|
</div>
|
262
262
|
</div>
|
263
263
|
<div class="layui-inline">
|
@@ -274,12 +274,12 @@
|
|
274
274
|
</div>
|
275
275
|
<br>
|
276
276
|
<br>
|
277
|
-
<div class="
|
277
|
+
<div class=" " id="销售额分析" lay-filter="test1">
|
278
278
|
<ul class="layui-tab-title">
|
279
279
|
<li class="layui-this">商机区域分布</li>
|
280
280
|
</ul>
|
281
|
-
<div class="
|
282
|
-
<div class="
|
281
|
+
<div class="" style="padding-right: 50px">
|
282
|
+
<div class=" layui-show" style="padding-left: 20px">
|
283
283
|
<div style="margin: 10px 10px 10px 10px">
|
284
284
|
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
285
285
|
<div class="layui-form-item">
|
@@ -307,6 +307,46 @@
|
|
307
307
|
|
308
308
|
</div>
|
309
309
|
</div>
|
310
|
+
<div class=" " id="销售人员跟进分析" lay-filter="test1">
|
311
|
+
<ul class="layui-tab-title">
|
312
|
+
<li class="layui-this">销售人员跟进分析</li>
|
313
|
+
</ul>
|
314
|
+
<div class="" style="padding-right: 50px">
|
315
|
+
<div class=" layui-show" style="padding-left: 20px">
|
316
|
+
<div style="margin: 10px 10px 10px 10px">
|
317
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
318
|
+
<div class="layui-form-item">
|
319
|
+
<div class="layui-inline m-t-10">
|
320
|
+
<label class="layui-form-label">维度</label>
|
321
|
+
<div class="layui-input-inline">
|
322
|
+
<%= select_tag "customer_count_type", options_for_select([['按跟进客户数统计','money'],['按跟进客户次数统计','count']],params[:goal_count_range]), {'lay-filter': 'goal_count'}%>
|
323
|
+
</div>
|
324
|
+
</div>
|
325
|
+
<div class="layui-inline m-t-10">
|
326
|
+
<label class="layui-form-label">时间范围</label>
|
327
|
+
<div class="layui-input-inline">
|
328
|
+
<% options = [['上周','last_week'],['本周','this_week'],['上月','last_month'],['本月','this_month'],['去年','last_year'],['今年','this_year'],['全部','all'],['自定义','diy']]%>
|
329
|
+
<%= select_tag "customer_time_range", options_for_select(options,'this_year'), { 'lay-filter': 'customer_time_range'} %>
|
330
|
+
</div>
|
331
|
+
</div>
|
332
|
+
<div class="layui-inline m-t-10 layui-hide diy_range" id="diy_range">
|
333
|
+
<label class="layui-form-label">自定义范围</label>
|
334
|
+
<div class="layui-input-inline">
|
335
|
+
<input type="text" class="layui-input" id="customer_date" name="customer_date" placeholder=" - " autocomplete="off">
|
336
|
+
</div>
|
337
|
+
</div>
|
338
|
+
<div class="layui-inline">
|
339
|
+
<button type="button" id="search_bt" class="customer_bt layui-btn layui-btn-primary" lay-submit lay-filter="customer_chart">确定
|
340
|
+
</button>
|
341
|
+
</div>
|
342
|
+
</div>
|
343
|
+
</form>
|
344
|
+
</div>
|
345
|
+
<canvas id="myChart4" width="960" height="200"></canvas>
|
346
|
+
</div>
|
347
|
+
|
348
|
+
</div>
|
349
|
+
</div>
|
310
350
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.css">
|
311
351
|
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.js"></script>
|
312
352
|
<script>
|
@@ -329,6 +369,15 @@
|
|
329
369
|
var element = layui.element;
|
330
370
|
laydate = layui.laydate;
|
331
371
|
|
372
|
+
form.on('select(customer_time_range)', function(data){
|
373
|
+
const value = data.value;
|
374
|
+
if(value == "diy"){
|
375
|
+
$(".diy_range").removeClass("layui-hide")
|
376
|
+
}else {
|
377
|
+
$(".diy_range").addClass('layui-hide')
|
378
|
+
}
|
379
|
+
})
|
380
|
+
|
332
381
|
if(follow_type == "day"){
|
333
382
|
$(".year").addClass('layui-hide')
|
334
383
|
$(".month").addClass('layui-hide')
|
@@ -394,6 +443,10 @@
|
|
394
443
|
elem: '#date',
|
395
444
|
range: true
|
396
445
|
});
|
446
|
+
laydate.render({
|
447
|
+
elem: '#customer_date',
|
448
|
+
range: true
|
449
|
+
});
|
397
450
|
laydate.render({
|
398
451
|
elem: '#date_week',
|
399
452
|
range: true
|
@@ -530,24 +583,21 @@
|
|
530
583
|
options: opt
|
531
584
|
});
|
532
585
|
|
586
|
+
var ctx = document.getElementById('myChart4');
|
587
|
+
var myChart4 = new Chart(ctx, {
|
588
|
+
type: 'bar',
|
589
|
+
data: <%=raw @customer_data.to_json %>,
|
590
|
+
options: opt
|
591
|
+
});
|
592
|
+
|
533
593
|
$(document).ready(function () {
|
534
594
|
$(".follow_count_bt").click(function () {
|
535
595
|
layer.load(0, {});
|
536
596
|
$.get('/missions/sale_trends/trends.json?follow_count_range=' + $("#follow_count_range").val() + '&date_month=' + $("#date_month").val() + '&date_week=' + $("#date_week").val() + '&date_year=' + $("#date_year").val() + '&date=' + $("#date").val()).done(function(res) {
|
537
597
|
layer.closeAll('loading');
|
538
598
|
var data1 = res.data1;
|
539
|
-
|
540
|
-
|
541
|
-
type: 'line',
|
542
|
-
data: data1,
|
543
|
-
options: {
|
544
|
-
elements: {
|
545
|
-
line: {
|
546
|
-
tension: 0
|
547
|
-
}
|
548
|
-
}
|
549
|
-
}
|
550
|
-
});
|
599
|
+
myChart.data = data1
|
600
|
+
myChart.update()
|
551
601
|
});
|
552
602
|
});
|
553
603
|
$(".goal_count_bt").click(function () {
|
@@ -555,12 +605,9 @@
|
|
555
605
|
$.get('/missions/sale_trends/trends.json?count_type=' + $("#count_type").val() + '&goal_count_range=' + $("#goal_count_range").val() + '&goal_date_month=' + $("#goal_date_month").val() + '&goal_date_year=' + $("#goal_date_year").val()).done(function(res) {
|
556
606
|
layer.closeAll('loading');
|
557
607
|
var data2 = res.data2;
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
data: data2,
|
562
|
-
options: opt
|
563
|
-
});
|
608
|
+
myChart2.data = data2
|
609
|
+
myChart2.update()
|
610
|
+
|
564
611
|
});
|
565
612
|
});
|
566
613
|
$(".business_bt").click(function () {
|
@@ -568,12 +615,17 @@
|
|
568
615
|
$.get('/missions/sale_trends/trends.json?business_count_type=' + $("#business_count_type").val() + '&business_type=' + $("#business_type").val()).done(function(res) {
|
569
616
|
layer.closeAll('loading');
|
570
617
|
var data3 = res.data3;
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
618
|
+
myChart3.data = data3
|
619
|
+
myChart3.update()
|
620
|
+
});
|
621
|
+
});
|
622
|
+
$(".customer_bt").click(function () {
|
623
|
+
layer.load(0, {});
|
624
|
+
$.get('/missions/sale_trends/trends.json?customer_count_type=' + $("#customer_count_type").val() + '&customer_time_range=' + $("#customer_time_range").val()).done(function(res) {
|
625
|
+
layer.closeAll('loading');
|
626
|
+
var data4 = res.data4;
|
627
|
+
myChart4.data = data4
|
628
|
+
myChart4.update()
|
577
629
|
});
|
578
630
|
});
|
579
631
|
});
|
@@ -68,7 +68,7 @@
|
|
68
68
|
</button>
|
69
69
|
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_teachers">搜 索
|
70
70
|
</button>
|
71
|
-
<a style="padding-left: 20px;color: #0000FF" href="javascript:;" type="submit" class="" lay-submit lay-filter="show_hide"
|
71
|
+
<a style="padding-left: 20px;color: #0000FF" href="javascript:;" type="submit" class="" lay-submit lay-filter="show_hide">高级搜索
|
72
72
|
</a>
|
73
73
|
</div>
|
74
74
|
</div>
|
@@ -71,7 +71,7 @@
|
|
71
71
|
</dd>
|
72
72
|
<% end %>
|
73
73
|
<% if can? :read, EducodeSales::MoneyPlan %>
|
74
|
-
<dd><a href="/missions/money_plans" class="<%= current?('layui-this', money_plans_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/money_plans.png",size:"15"%><i style="font-size: 25px; padding-right: 15px"></i
|
74
|
+
<dd><a href="/missions/money_plans" class="<%= current?('layui-this', money_plans_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/money_plans.png",size:"15"%><i style="font-size: 25px; padding-right: 15px"></i>回款计划</a>
|
75
75
|
</dd>
|
76
76
|
<% end %>
|
77
77
|
<% if can? :read, EducodeSales::Customer %>
|
data/config/routes.rb
CHANGED
@@ -7,6 +7,8 @@ class CreateEducodeSalesRolePermissions < ActiveRecord::Migration[5.2]
|
|
7
7
|
t.timestamps
|
8
8
|
end
|
9
9
|
if EducodeSales::Permission.last.nil?
|
10
|
+
EducodeSales::Permission.create(name: '导出商机', subject: 'Business', action: 'export_business', clazz: 'business', position: '11')
|
11
|
+
|
10
12
|
|
11
13
|
#附件管理权限
|
12
14
|
EducodeSales::Permission.create(name: '查看附件', subject: 'Business', action: 'show_file', clazz: 'business', position: '11')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: educode_sales
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- anke1460
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
11
|
+
date: 2022-01-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -177,6 +177,7 @@ files:
|
|
177
177
|
- app/models/educode_sales/application_record.rb
|
178
178
|
- app/models/educode_sales/assign_follow_up.rb
|
179
179
|
- app/models/educode_sales/business.rb
|
180
|
+
- app/models/educode_sales/business_export_record.rb
|
180
181
|
- app/models/educode_sales/common.rb
|
181
182
|
- app/models/educode_sales/course_subject.rb
|
182
183
|
- app/models/educode_sales/customer.rb
|
@@ -212,6 +213,8 @@ files:
|
|
212
213
|
- app/views/educode_sales/businesses/edit.html.erb
|
213
214
|
- app/views/educode_sales/businesses/edit_follow_record.html.erb
|
214
215
|
- app/views/educode_sales/businesses/edit_plan.html.erb
|
216
|
+
- app/views/educode_sales/businesses/export_records.html.erb
|
217
|
+
- app/views/educode_sales/businesses/export_records.json.jbuilder
|
215
218
|
- app/views/educode_sales/businesses/file.html.erb
|
216
219
|
- app/views/educode_sales/businesses/index.html.erb
|
217
220
|
- app/views/educode_sales/businesses/index.json.jbuilder
|