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.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/activities_controller.rb +0 -2
  3. data/app/controllers/educode_sales/businesses_controller.rb +81 -43
  4. data/app/controllers/educode_sales/money_plans_controller.rb +2 -2
  5. data/app/controllers/educode_sales/sale_trends_controller.rb +105 -18
  6. data/app/controllers/educode_sales/teacher_follows_controller.rb +1 -93
  7. data/app/models/educode_sales/business_export_record.rb +5 -0
  8. data/app/views/educode_sales/activities/index.html.erb +7 -1
  9. data/app/views/educode_sales/activities/new.html.erb +1 -1
  10. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +4 -4
  11. data/app/views/educode_sales/businesses/edit_plan.html.erb +5 -2
  12. data/app/views/educode_sales/businesses/export_records.html.erb +53 -0
  13. data/app/views/educode_sales/businesses/export_records.json.jbuilder +11 -0
  14. data/app/views/educode_sales/businesses/index.html.erb +66 -5
  15. data/app/views/educode_sales/businesses/index.json.jbuilder +31 -2
  16. data/app/views/educode_sales/businesses/new_follow_record.html.erb +6 -5
  17. data/app/views/educode_sales/commons/index.html.erb +7 -1
  18. data/app/views/educode_sales/money_plans/index.html.erb +2 -2
  19. data/app/views/educode_sales/roles/index.html.erb +7 -1
  20. data/app/views/educode_sales/sale_trends/trends.html.erb +96 -44
  21. data/app/views/educode_sales/sale_trends/trends.json.jbuilder +2 -1
  22. data/app/views/educode_sales/teachers/index.html.erb +1 -1
  23. data/app/views/layouts/educode_sales/application.html.erb +1 -1
  24. data/config/routes.rb +2 -0
  25. data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +2 -0
  26. data/lib/educode_sales/version.rb +1 -1
  27. 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
- drowpdwonRender()
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="z-index: 101">
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="z-index: 102">
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);
@@ -129,4 +129,10 @@
129
129
  });
130
130
 
131
131
  });
132
- </script>
132
+ </script>
133
+ <style>
134
+ .layui-table-tool-temp{
135
+ padding-right: 0px; !important;
136
+ }
137
+
138
+ </style>
@@ -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">回款列表</span>
46
+ <span class="table-label">回款计划</span>
47
47
  </div>
48
48
  </script>
49
49
 
@@ -152,4 +152,10 @@
152
152
  }
153
153
  });
154
154
  })
155
- </script>
155
+ </script>
156
+ <style>
157
+ .layui-table-tool-temp{
158
+ padding-right: 0px; !important;
159
+ }
160
+
161
+ </style>
@@ -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"><%= @sale_trend.chance_money %>万</h1>
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"><%= @sale_trend.ballot_money %>万</h1>
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"><%= @sale_trend.sign_money %>万</h1>
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"><%= @sale_trend.returned_money %>万</h1>
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=(销售态势-现有商机)" style="color: #0000FF;float: right">查看商机</a></h5>
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="layui-tab layui-tab-card" id="商机跟进数">
198
+ <div class="" id="商机跟进数">
199
199
  <ul class="layui-tab-title">
200
200
  <li class="layui-this">商机跟进数</li>
201
201
  </ul>
202
- <div class="layui-tab-content" style="padding-right: 50px">
203
- <div class="layui-tab-item layui-show " style="padding-left: 20px">
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="layui-tab layui-tab-card " id="销售额分析" lay-filter="test1">
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="layui-tab-content" style="padding-right: 50px">
240
- <div class="layui-tab-item layui-show" style="padding-left: 20px">
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="layui-tab layui-tab-card " id="销售额分析" lay-filter="test1">
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="layui-tab-content" style="padding-right: 50px">
282
- <div class="layui-tab-item layui-show" style="padding-left: 20px">
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
- var ctx = document.getElementById('myChart');
540
- var myChart = new Chart(ctx, {
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
- var ctx = document.getElementById('myChart2');
559
- var myChart2 = new Chart(ctx, {
560
- type: 'bar',
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
- var ctx = document.getElementById('myChart3');
572
- var myChart3 = new Chart(ctx, {
573
- type: 'bar',
574
- data: data3,
575
- options: opt
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
  });
@@ -1,3 +1,4 @@
1
1
  json.data1 @follow_count_data
2
2
  json.data2 @goal_count_data
3
- json.data3 @business_data
3
+ json.data3 @business_data
4
+ json.data4 @customer_data
@@ -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>回款管理</a>
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
@@ -82,6 +82,8 @@ EducodeSales::Engine.routes.draw do
82
82
 
83
83
  resources :businesses do
84
84
  collection do
85
+ get :export_records
86
+ get :add_export_records
85
87
  get :show_keys
86
88
  get :add_keys
87
89
  get :show_follow
@@ -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')
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '0.6.6'
2
+ VERSION = '0.6.7'
3
3
  end
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.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-14 00:00:00.000000000 Z
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