educode_sales 0.5.4 → 0.5.8

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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/businesses_controller.rb +20 -1
  3. data/app/controllers/educode_sales/follow_ups_controller.rb +58 -1
  4. data/app/controllers/educode_sales/home_controller.rb +18 -2
  5. data/app/controllers/educode_sales/sale_trends_controller.rb +119 -84
  6. data/app/controllers/educode_sales/sales_controller.rb +3 -0
  7. data/app/controllers/educode_sales/teachers_controller.rb +41 -14
  8. data/app/controllers/educode_sales/upload_files_controller.rb +3 -3
  9. data/app/models/educode_sales/teacher.rb +2 -1
  10. data/app/models/educode_sales/teacher_assign_follow.rb +6 -0
  11. data/app/views/educode_sales/activities/index.html.erb +4 -5
  12. data/app/views/educode_sales/activities/show_teachers.html.erb +1 -1
  13. data/app/views/educode_sales/businesses/_follows.html.erb +255 -0
  14. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +69 -6
  15. data/app/views/educode_sales/businesses/file.html.erb +2 -4
  16. data/app/views/educode_sales/businesses/index.html.erb +161 -66
  17. data/app/views/educode_sales/businesses/index.json.jbuilder +2 -1
  18. data/app/views/educode_sales/businesses/new_follow_record.html.erb +70 -6
  19. data/app/views/educode_sales/businesses/show_follow.html.erb +9 -9
  20. data/app/views/educode_sales/businesses/show_follow_record.html.erb +8 -0
  21. data/app/views/educode_sales/businesses/time_line.html.erb +1 -1
  22. data/app/views/educode_sales/follow_ups/index.json.jbuilder +20 -0
  23. data/app/views/educode_sales/home/sales_place.json.jbuilder +9 -0
  24. data/app/views/educode_sales/operation_plans/_monthPlan.html.erb +6 -0
  25. data/app/views/educode_sales/operation_plans/_monthly.html.erb +2 -0
  26. data/app/views/educode_sales/operation_plans/_weekPlan.html.erb +6 -0
  27. data/app/views/educode_sales/operation_plans/_weekly.html.erb +2 -0
  28. data/app/views/educode_sales/places/index.html.erb +14 -4
  29. data/app/views/educode_sales/places/index.json.jbuilder +7 -1
  30. data/app/views/educode_sales/plans/_monthPlan.html.erb +5 -0
  31. data/app/views/educode_sales/plans/_monthly.html.erb +1 -0
  32. data/app/views/educode_sales/plans/_weekPlan.html.erb +5 -0
  33. data/app/views/educode_sales/plans/_weekly.html.erb +1 -0
  34. data/app/views/educode_sales/recycles/index.html.erb +1 -1
  35. data/app/views/educode_sales/sale_trends/trends.html.erb +54 -5
  36. data/app/views/educode_sales/sales/index.html.erb +18 -3
  37. data/app/views/educode_sales/sales/index.json.jbuilder +27 -14
  38. data/app/views/educode_sales/sales/operations.html.erb +4 -1
  39. data/app/views/educode_sales/teachers/course_list.json.jbuilder +1 -1
  40. data/app/views/educode_sales/teachers/edit.html.erb +53 -7
  41. data/app/views/educode_sales/teachers/index.html.erb +42 -3
  42. data/app/views/educode_sales/teachers/index.json.jbuilder +4 -1
  43. data/app/views/educode_sales/teachers/new.html.erb +55 -17
  44. data/config/routes.rb +1 -0
  45. data/db/migrate/20211201023750_create_educode_sales_teacher_assign_follows.rb +11 -0
  46. data/db/migrate/20211206054756_add_year_to_follow_ups.rb +5 -0
  47. data/lib/educode_sales/version.rb +1 -1
  48. metadata +8 -2
@@ -17,6 +17,11 @@
17
17
  <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
18
18
  <% end %>
19
19
  </script>
20
+ <script type="text/html" id="business_a">
21
+ <div class="layui-text">
22
+ <a href="/missions/businesses?place_id={{d.id}}">{{d.businesses_count}}</a>
23
+ </div>
24
+ </script>
20
25
 
21
26
  <script type="text/html" id="showchance">
22
27
  <a href="/missions/businesses" class="layui-table-link">{{ d.chance }}</a>
@@ -56,20 +61,25 @@
56
61
  {
57
62
  field: 'businesses_count',
58
63
  width: 120,
59
- totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
60
- title: '商机'
64
+ totalRow: true,
65
+ sort: true,
66
+ title: '商机',
67
+ templet: "#business_a",
68
+
61
69
  },
62
70
  {
63
71
  field: 'amount',
64
72
  width: 120,
65
73
  totalRow:true,
66
- title: '中标'
74
+ sort: true,
75
+ title: '中标金额'
67
76
  },
68
77
  {
69
78
  field: 'return_mount',
70
79
  width: 120,
71
80
  totalRow:true,
72
- title: '回款',
81
+ sort: true,
82
+ title: '回款金额',
73
83
  },
74
84
  {
75
85
  title: '操作',
@@ -1,3 +1,4 @@
1
+ all_businesses_count = 0
1
2
  area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
2
3
  json.data do
3
4
  json.array! @places do |d|
@@ -13,11 +14,16 @@ json.data do
13
14
  else
14
15
  json.area_id ''
15
16
  end
16
- json.businesses_count EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id}").count
17
+ business_count = EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id}").count
18
+ json.businesses_count business_count
19
+ all_businesses_count += business_count
17
20
  json.amount EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id} AND educode_sales_follow_ups.stage_id IN (?)", @stage_ids).sum(:profit_amount).round(2)
18
21
  json.return_mount EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id}").sum(:return_money).round(2)
19
22
  end
20
23
  end
21
24
 
25
+ json.totalRow do
26
+ json.businesses_count all_businesses_count.to_s
27
+ end
22
28
  json.code 0
23
29
  json.count @places.total_count
@@ -77,6 +77,10 @@
77
77
  url: '/missions/plans?clazz=month',
78
78
  toolbar: '#monthPlanToolbar',
79
79
  defaultToolbar: ['filter'],
80
+ initSort: {
81
+ field: 'updated_at' //排序字段,对应 cols 设定的各字段名
82
+ ,type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
83
+ },
80
84
  totalRow:true,
81
85
  cols: [
82
86
  [
@@ -115,6 +119,7 @@
115
119
  field: 'content',
116
120
  width: 300,
117
121
  title: '计划内容',
122
+ templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
118
123
  },
119
124
  {
120
125
  field: 'follow_ups_count',
@@ -119,6 +119,7 @@
119
119
  field: 'content',
120
120
  width: 300,
121
121
  title: '个人总结',
122
+ templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
122
123
  },
123
124
  {
124
125
  field: 'level1_score',
@@ -78,6 +78,10 @@
78
78
  toolbar: '#weekPlanToolbar',
79
79
  totalRow:true,
80
80
  defaultToolbar: ['filter'],
81
+ initSort: {
82
+ field: 'updated_at' //排序字段,对应 cols 设定的各字段名
83
+ ,type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
84
+ },
81
85
  cols: [
82
86
  [
83
87
  {
@@ -120,6 +124,7 @@
120
124
  field: 'content',
121
125
  width: 300,
122
126
  title: '计划内容',
127
+ templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
123
128
  },
124
129
  {
125
130
  field: 'follow_ups_count',
@@ -121,6 +121,7 @@
121
121
  field: 'content',
122
122
  width: 300,
123
123
  title: '个人总结',
124
+ templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
124
125
  },
125
126
  {
126
127
  field: 'level1_score',
@@ -1,6 +1,6 @@
1
1
  <div class="layui-tab" lay-filter="sale_tab">
2
2
  <ul class="layui-tab-title">
3
- <li class="layui-this" data="business">商机列表</li>
3
+ <li class="layui-this" data="business">商机</li>
4
4
  <li data="week">周计划</li>
5
5
  <li data="weekly">周报</li>
6
6
  <li data="month">月计划</li>
@@ -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>已中标<a href="/missions/businesses?name=(销售态势-<%=@year %>-已中标商机)" style="color: #0000FF;float: right">查看商机</a></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>已签单<a href="/missions/businesses?name=(销售态势-<%=@year %>-已签单商机)" style="color: #0000FF;float: right">查看商机</a></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">
@@ -181,7 +207,7 @@
181
207
  <div class="layui-inline m-t-10">
182
208
  <label class="layui-form-label">视图</label>
183
209
  <div class="layui-input-inline">
184
- <%= select_tag "follow_count_range", options_for_select([['按天','day'],['按月','month'],['按年','year']],params[:follow_count_range]), {'lay-filter': 'follow_count'}%>
210
+ <%= select_tag "follow_count_range", options_for_select([['按天','day'],['按周','week'],['按月','month'],['按年','year']],params[:follow_count_range] || 'week'), {'lay-filter': 'follow_count'}%>
185
211
  </div>
186
212
  </div>
187
213
  <div class="layui-inline">
@@ -189,7 +215,8 @@
189
215
  <div class="layui-input-inline">
190
216
  <input type="text" class="layui-input month layui-hide" id="date_month" name="date_month" placeholder=" - " value="<%=params[:date_month] %>" >
191
217
  <input type="text" class="layui-input year layui-hide" id="date_year" name="date_year" placeholder=" - " value="<%=params[:date_year] %>">
192
- <input type="text" class="layui-input day" id="date" name="date" placeholder=" - " value="<%=params[:date].present? ? params[:date] : (Time.now - 7.days).to_s(:date) + ' - ' + Time.now.to_s(:date) %>">
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] %>">
193
220
  </div>
194
221
  </div>
195
222
  <div class="layui-inline">
@@ -214,6 +241,12 @@
214
241
  <div style="margin: 10px 10px 10px 10px">
215
242
  <form class="layui-form layui-form-pane" lay-filter="search_form">
216
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>
217
250
  <div class="layui-inline m-t-10">
218
251
  <label class="layui-form-label">视图</label>
219
252
  <div class="layui-input-inline">
@@ -275,15 +308,23 @@
275
308
  if(follow_type == "day"){
276
309
  $(".year").addClass('layui-hide')
277
310
  $(".month").addClass('layui-hide')
311
+ $(".week").addClass('layui-hide')
278
312
  $(".day").removeClass('layui-hide')
279
313
  }else if(follow_type == "month"){
280
314
  $(".year").addClass('layui-hide')
315
+ $(".week").addClass('layui-hide')
281
316
  $(".month").removeClass('layui-hide')
282
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')
283
323
  }else {
284
324
  $(".year").removeClass('layui-hide')
285
325
  $(".month").addClass('layui-hide')
286
326
  $(".day").addClass('layui-hide')
327
+ $(".week").addClass('layui-hide')
287
328
  }
288
329
 
289
330
  if(goal_type == "year"){
@@ -330,7 +371,6 @@
330
371
  range: true
331
372
  });
332
373
  laydate.render({
333
- type: 'week',
334
374
  elem: '#date_week',
335
375
  range: true
336
376
  });
@@ -367,15 +407,24 @@
367
407
  if(value == "month"){
368
408
  $(".year").addClass('layui-hide')
369
409
  $(".day").addClass('layui-hide')
410
+ $(".week").addClass('layui-hide')
370
411
  $(".month").removeClass('layui-hide')
371
412
  }else if(value == "year"){
372
413
  $(".month").addClass('layui-hide')
373
414
  $(".day").addClass('layui-hide')
415
+ $(".week").addClass('layui-hide')
374
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')
375
422
  }else {
376
423
  $(".month").addClass('layui-hide')
377
424
  $(".year").addClass('layui-hide')
378
425
  $(".day").removeClass('layui-hide')
426
+ $(".week").addClass('layui-hide')
427
+
379
428
  }
380
429
  })
381
430
 
@@ -1,5 +1,12 @@
1
1
  <div class="section">
2
- <h4><span>销售人员列表</span></h4>
2
+ <form class="layui-form" action="">
3
+ <span>销售人员列表</span>
4
+ <div style="float:right;">年度
5
+ <div class="layui-input-inline">
6
+ <%= select_tag "years", options_for_select(@years,@year), {'lay-filter': 'year' } %>
7
+ </div>
8
+ </div>
9
+ </form>
3
10
  <hr>
4
11
  <table class="layui-hide" id="table" lay-filter="table" ></table>
5
12
  </div>
@@ -40,11 +47,18 @@
40
47
  </script>
41
48
  <script>
42
49
  layui.use('table', function () {
43
- var table = layui.table;
50
+ var form = layui.form,
51
+ table = layui.table;
52
+
53
+ form.on('select(year)', function(data){
54
+ console.log(data, )
55
+ year = data.value
56
+ window.location.href = "/missions/sales?year=" + data.value
57
+ })
44
58
 
45
59
  table.render({
46
60
  elem: '#table',
47
- url: '/missions/sales',
61
+ url: '/missions/sales?year=<%= @year %>',
48
62
  cellMinWidth: 80,
49
63
  totalRow:true,
50
64
  cols: [
@@ -60,6 +74,7 @@
60
74
  }, {
61
75
  field: 'area',
62
76
  title: '负责区域',
77
+ templet:'<div><span title="{{d.area}}">{{d.area}}</span></div>'
63
78
  }, {
64
79
  field: 'business_a',
65
80
  title: 'A类商机',
@@ -26,32 +26,45 @@ json.data do
26
26
  else
27
27
  json.area ''
28
28
  end
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
30
- businesses_a_count += business_a
29
+ if @year == "全部"
30
+ 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
31
+ 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
32
+ 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
33
+ 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
34
+ 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
35
+ 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
36
+ 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)
37
+ 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)
38
+ else
39
+ 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).where("educode_sales_follow_ups.year = ?", @year).count
40
+ 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).where("educode_sales_follow_ups.year = ?", @year).count
41
+ 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).where("educode_sales_follow_ups.year = ?", @year).count
42
+ 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).where("educode_sales_follow_ups.year = ?", @year).count
43
+ 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).where("educode_sales_follow_ups.year = ?", @year).count
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).where("educode_sales_follow_ups.year = ?", @year).count
45
+ 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).where("educode_sales_follow_ups.year = ?", @year).sum(:total_amount).round(2)
46
+ 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).where("educode_sales_follow_ups.year = ?", @year).sum("educode_sales_businesses.return_money").round(2)
47
+ end
48
+
31
49
  json.business_a business_a
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
33
- businesses_b_count += business_b
34
50
  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
51
  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
52
  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
53
  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
54
  json.business_o business_o
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)
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)
55
+
49
56
  json.a_clazz_id @a_clazz&.id
50
57
  json.b_clazz_id @b_clazz&.id
51
58
  json.c_clazz_id @c_clazz&.id
52
59
  json.d_clazz_id @d_clazz&.id
53
60
  json.e_clazz_id @e_clazz&.id
54
61
  json.o_clazz_id @o_clazz&.id
62
+ businesses_a_count += business_a
63
+ businesses_b_count += business_b
64
+ businesses_c_count += business_c
65
+ businesses_d_count += business_d
66
+ businesses_e_count += business_e
67
+ businesses_o_count += business_o
55
68
  end
56
69
  end
57
70
 
@@ -46,18 +46,21 @@
46
46
  }, {
47
47
  field: 'area',
48
48
  title: '负责区域',
49
+ templet:'<div><span title="{{d.area}}">{{d.area}}</span></div>'
49
50
  }, {
50
51
  field: 'schools',
51
52
  title: '跟进学校',
52
53
  templet: "#school",
53
54
  totalRow:true,
55
+ sort: true,
54
56
  width: 120
55
57
  }, {
56
58
  field: 'departments',
57
59
  title: '跟进二级学院',
58
60
  templet: "#xschool",
59
61
  totalRow:true,
60
- width: 120
62
+ sort: true,
63
+ width: 170
61
64
  },
62
65
  ]
63
66
  ],
@@ -19,5 +19,5 @@ json.data do
19
19
  end
20
20
  end
21
21
  json.code 0
22
- json.count @courses.total_count
22
+ json.count @courses.present? ? @courses.total_count : 0
23
23
  json.msg 'succcess'
@@ -9,36 +9,48 @@
9
9
  </div>
10
10
  </div>
11
11
  <div class="layui-inline">
12
- <label class="layui-form-label required">职称</label>
12
+ <label class="layui-form-label ">职称</label>
13
13
  <div class="layui-input-block">
14
14
  <%= select_tag "professional_title", options_for_select(['教授', '研究员', '副教授', '副研究员', '讲师', '助理研究员', '助理教授'], @teacher.professional_title), { include_blank: true } %>
15
15
  </div>
16
16
  </div>
17
17
  <br>
18
18
  <div class="layui-inline">
19
- <label class="layui-form-label required">职务</label>
19
+ <label class="layui-form-label ">职务</label>
20
20
  <div class="layui-input-block">
21
- <input type="text" name="job" autocomplete="off" lay-verify="required"
21
+ <input type="text" name="job" autocomplete="off"
22
22
  class="layui-input" placeholder="请输入" value="<%= @teacher.job %>">
23
23
  </div>
24
24
  </div>
25
25
  <div class="layui-inline">
26
- <label class="layui-form-label required">来源</label>
26
+ <label class="layui-form-label ">来源</label>
27
27
  <div class="layui-input-block">
28
28
  <%= select_tag "source_id", options_for_select(EducodeSales::Common.where(clazz: 'teacher_source').pluck(:name, :id), @teacher.source_id), { include_blank: true } %>
29
29
  </div>
30
30
  </div>
31
31
  <br>
32
+ <div class="layui-inline">
33
+ <label class="layui-form-label ">微信号</label>
34
+ <div class="layui-input-block">
35
+ <input type="text" name="wechat" autocomplete="off"
36
+ class="layui-input" placeholder="请输入" value="<%= @teacher.wechat %>">
37
+ </div>
38
+ </div>
39
+ <br>
32
40
  <div class="layui-inline">
33
41
  <label class="layui-form-label required">单位部门</label>
34
42
  <div class="layui-input-block" id="add_department2" style="width: 400px"></div>
35
- <!-- <input type="text" name="edit_school" autocomplete="off" lay-verify="required"-->
36
- <!-- class="layui-input" placeholder="请输入" value="<%#= Department.find_by(id: @teacher.department_id).name %>-<%#= School.find_by(id: Department.find_by(id: @teacher.department_id).school_id).name %>">-->
37
43
  </div>
38
44
  <br>
45
+ <div class="layui-form-item">
46
+ <label class="layui-form-label">教研助理</label>
47
+ <div class="layui-input-inline">
48
+ <div id="edit_teacher_assist" style="width: 400px;"></div>
49
+ </div>
50
+ </div>
39
51
  <div class="layui-inline">
40
52
  <label class="layui-form-label">平台账号</label>
41
- <div class="layui-input-block" id="user_search" style="width: 300px;"></div>
53
+ <div class="layui-input-block" id="user_search" style="width: 400px;"></div>
42
54
  </div>
43
55
  <div class="layui-form-item m-t-20">
44
56
  <div class="layui-input-block">
@@ -60,6 +72,35 @@
60
72
 
61
73
  form.render();
62
74
 
75
+ var edit_teacher_assist_list = xmSelect.render({
76
+ el: '#edit_teacher_assist',
77
+ remoteSearch: true,
78
+ clickClose: true,
79
+ delay: 1000,
80
+ paging: true,
81
+ pageRemote: true,
82
+ filterable: true,
83
+ remoteMethod: function (val, cb, show, pageIndex) {
84
+ $.ajax( '/missions/sales_staff?teacher_assist=true', {
85
+ method: 'get',
86
+ data: {
87
+ q: val,
88
+ page: pageIndex
89
+ },
90
+ dataType: 'json',
91
+ success: function (res) {
92
+ var data = res.data;
93
+ if (res.code == 0) {
94
+ cb(res.data, res.count);
95
+ } else {
96
+ layer.msg(res.msg, {time: 2000, icon: 2, shade: 0.01});
97
+ }
98
+ }
99
+ })
100
+ }
101
+ })
102
+ edit_teacher_assist_list.setValue(gon.teacher_assist)
103
+
63
104
  var add_department = selectInput.render({
64
105
  elem: '#add_department2',
65
106
  name: 'department', // 渲染的input的name值
@@ -125,6 +166,11 @@
125
166
  if (department_id == '') {
126
167
  return layer.alert("请选择单位部门")
127
168
  }
169
+ var assign_follow = [];
170
+ edit_teacher_assist_list.getValue().forEach(function(d) {
171
+ assign_follow.push(d.value);
172
+ })
173
+ data.field.teacher_assist = assign_follow;
128
174
  data.field.department_id = department_id;
129
175
  data.field.user_id = user_id;
130
176
  request.authPut("missions/teachers/"+ parent.id, data.field, function (res) {
@@ -38,6 +38,12 @@
38
38
  <input type="text" class="layui-input" id="time" placeholder="请选择时间" autocomplete="off" name="regist_at">
39
39
  </div>
40
40
  </div>
41
+ <div class="layui-inline">
42
+ <label class="layui-form-label">注册状态</label>
43
+ <div class="layui-input-inline">
44
+ <%= select_tag "status", options_for_select([["已注册","1"],["未注册","0"]]), { include_blank: true } %>
45
+ </div>
46
+ </div>
41
47
  <div class="layui-inline">
42
48
  <label class="layui-form-label">区域</label>
43
49
  <div class="layui-input-inline">
@@ -50,6 +56,12 @@
50
56
  <input type="text" class="layui-input" id="date" name="date" autocomplete="off" placeholder=" - ">
51
57
  </div>
52
58
  </div>
59
+ <div class="layui-inline">
60
+ <label class="layui-form-label">教研助理</label>
61
+ <div class="layui-input-inline">
62
+ <%= select_tag "assist", options_for_select(@staffs, params[:assist]), { 'lay-filter': 'assist', include_blank: true } %>
63
+ </div>
64
+ </div>
53
65
 
54
66
  <div class="layui-inline">
55
67
  <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
@@ -66,7 +78,7 @@
66
78
  <span class="table-label">教师列表</span>
67
79
  <% if can? :create, EducodeSales::Teacher %>
68
80
  <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="import">导入数据</button>
69
- <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add">添加</button>
81
+ <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add">添加老师</button>
70
82
  <% end %>
71
83
  <!-- <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="search_new"> 搜索添加 -->
72
84
  </button>
@@ -86,7 +98,7 @@
86
98
  <%# if can? :destroy, EducodeSales::Teacher %>
87
99
  <!-- <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>-->
88
100
  <%# end %>
89
- <% if can? :add_follow, EducodeSales::Teacher %>
101
+ <% if can? :create, EducodeSales::TeacherFollow %>
90
102
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="add_event">添加跟进记录</a>
91
103
  <% end %>
92
104
  <% if @more %>
@@ -148,6 +160,7 @@
148
160
  width: 60,
149
161
  title:'序号',type: 'numbers',
150
162
  totalRowText:'合计',
163
+
151
164
  },
152
165
  {
153
166
  field: 'name',
@@ -159,11 +172,15 @@
159
172
  field: 'school',
160
173
  width: 160,
161
174
  title: '单位',
175
+ templet:'<div><span title="{{d.school}}">{{d.school}}</span></div>'
176
+
162
177
  },
163
178
  {
164
179
  field: 'department',
165
180
  width: 130,
166
- title: '部门'
181
+ title: '部门',
182
+ templet:'<div><span title="{{d.department}}">{{d.department}}</span></div>'
183
+
167
184
  },
168
185
  {
169
186
  field: 'professional_title',
@@ -230,6 +247,26 @@
230
247
  width: 120,
231
248
  title: '注册时间',
232
249
  },
250
+ {
251
+ field: 'last_login_on',
252
+ width: 120,
253
+ title: '最近登录',
254
+ },
255
+ {
256
+ field: 'created_at',
257
+ width: 120,
258
+ title: '添加时间',
259
+ },
260
+ {
261
+ field: 'wechat',
262
+ width: 120,
263
+ title: '微信号',
264
+ },
265
+ {
266
+ field: 'teacher_assist',
267
+ width: 120,
268
+ title: '教研助理',
269
+ },
233
270
  {
234
271
  title: '操作',
235
272
  minWidth: 170,
@@ -372,7 +409,9 @@
372
409
  name: "",
373
410
  professional_title: "",
374
411
  regist_at: "",
412
+ status: "",
375
413
  school: "",
414
+ assist: "",
376
415
  teacher_source: ""
377
416
  })
378
417
  return false;
@@ -19,8 +19,11 @@ json.data do
19
19
  json.actives d.actives
20
20
  json.students d.students_count
21
21
  json.regist_at d.user.present? ? d.user.created_on.to_s(:date) : ''
22
+ json.last_login_on (d.user.present? && d.user.last_login_on.present?) ? d.user.last_login_on.to_s(:date) : ''
22
23
  json.teacher_used d.teacher_used
23
-
24
+ json.wechat d.wechat
25
+ json.created_at d.created_at.to_s(:date)
26
+ json.teacher_assist d.teacher_assign_follows.map{|t| t.staff.user.real_name}.join(',')
24
27
  teacher_follows_count += d.teacher_follows_count
25
28
  courses_counts += d.courses_count
26
29
  end