educode_sales 0.5.5 → 0.5.9

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 (77) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/educode_sales//345/256/242/346/210/267/347/256/241/347/220/206.png +0 -0
  3. data/app/controllers/educode_sales/businesses_controller.rb +20 -1
  4. data/app/controllers/educode_sales/customer_extensions_controller.rb +17 -0
  5. data/app/controllers/educode_sales/customer_follows_controller.rb +41 -0
  6. data/app/controllers/educode_sales/customers_controller.rb +194 -0
  7. data/app/controllers/educode_sales/follow_ups_controller.rb +58 -1
  8. data/app/controllers/educode_sales/home_controller.rb +18 -2
  9. data/app/controllers/educode_sales/roles_controller.rb +4 -1
  10. data/app/controllers/educode_sales/sale_trends_controller.rb +19 -9
  11. data/app/controllers/educode_sales/sales_controller.rb +3 -0
  12. data/app/controllers/educode_sales/teachers_controller.rb +41 -14
  13. data/app/models/educode_sales/customer.rb +4 -0
  14. data/app/models/educode_sales/customer_extension.rb +7 -0
  15. data/app/models/educode_sales/customer_follow.rb +5 -0
  16. data/app/models/educode_sales/permission.rb +2 -1
  17. data/app/models/educode_sales/role_area.rb +1 -0
  18. data/app/models/educode_sales/teacher.rb +2 -1
  19. data/app/models/educode_sales/teacher_assign_follow.rb +6 -0
  20. data/app/views/educode_sales/activities/index.html.erb +4 -5
  21. data/app/views/educode_sales/activities/show_teachers.html.erb +1 -1
  22. data/app/views/educode_sales/businesses/_follows.html.erb +258 -0
  23. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +69 -6
  24. data/app/views/educode_sales/businesses/index.html.erb +155 -66
  25. data/app/views/educode_sales/businesses/index.json.jbuilder +1 -1
  26. data/app/views/educode_sales/businesses/new.html.erb +3 -0
  27. data/app/views/educode_sales/businesses/new_follow_record.html.erb +70 -6
  28. data/app/views/educode_sales/businesses/show_follow.html.erb +15 -10
  29. data/app/views/educode_sales/businesses/show_follow.json.jbuilder +1 -0
  30. data/app/views/educode_sales/businesses/show_follow_record.html.erb +8 -0
  31. data/app/views/educode_sales/businesses/time_line.html.erb +1 -1
  32. data/app/views/educode_sales/customers/edit.html.erb +60 -0
  33. data/app/views/educode_sales/customers/edit_department.html.erb +52 -0
  34. data/app/views/educode_sales/customers/edit_follow_record.html.erb +50 -0
  35. data/app/views/educode_sales/customers/give.html.erb +51 -0
  36. data/app/views/educode_sales/customers/index.html.erb +485 -0
  37. data/app/views/educode_sales/customers/index.json.jbuilder +25 -0
  38. data/app/views/educode_sales/customers/new.html.erb +89 -0
  39. data/app/views/educode_sales/customers/new_department.html.erb +53 -0
  40. data/app/views/educode_sales/customers/new_follow_record.html.erb +54 -0
  41. data/app/views/educode_sales/customers/show_department.json.jbuilder +13 -0
  42. data/app/views/educode_sales/customers/show_follow.html.erb +439 -0
  43. data/app/views/educode_sales/customers/show_follow.json.jbuilder +13 -0
  44. data/app/views/educode_sales/customers/show_follow_record.html.erb +17 -0
  45. data/app/views/educode_sales/follow_ups/index.json.jbuilder +20 -0
  46. data/app/views/educode_sales/home/sales_place.json.jbuilder +9 -0
  47. data/app/views/educode_sales/operation_plans/_monthPlan.html.erb +6 -0
  48. data/app/views/educode_sales/operation_plans/_monthly.html.erb +2 -0
  49. data/app/views/educode_sales/operation_plans/_weekPlan.html.erb +6 -0
  50. data/app/views/educode_sales/operation_plans/_weekly.html.erb +2 -0
  51. data/app/views/educode_sales/places/index.json.jbuilder +1 -1
  52. data/app/views/educode_sales/plans/_monthPlan.html.erb +5 -0
  53. data/app/views/educode_sales/plans/_monthly.html.erb +1 -0
  54. data/app/views/educode_sales/plans/_weekPlan.html.erb +5 -0
  55. data/app/views/educode_sales/plans/_weekly.html.erb +1 -0
  56. data/app/views/educode_sales/recycles/index.html.erb +1 -1
  57. data/app/views/educode_sales/roles/edit.html.erb +8 -0
  58. data/app/views/educode_sales/sale_trends/trends.html.erb +2 -2
  59. data/app/views/educode_sales/sales/index.html.erb +58 -19
  60. data/app/views/educode_sales/sales/index.json.jbuilder +31 -16
  61. data/app/views/educode_sales/sales/operations.html.erb +4 -1
  62. data/app/views/educode_sales/teachers/course_list.json.jbuilder +1 -1
  63. data/app/views/educode_sales/teachers/edit.html.erb +53 -7
  64. data/app/views/educode_sales/teachers/index.html.erb +42 -3
  65. data/app/views/educode_sales/teachers/index.json.jbuilder +6 -3
  66. data/app/views/educode_sales/teachers/new.html.erb +55 -17
  67. data/app/views/educode_sales/teachers/show_follow.html.erb +10 -5
  68. data/app/views/educode_sales/teachers/show_follow.json.jbuilder +1 -0
  69. data/app/views/layouts/educode_sales/application.html.erb +8 -1
  70. data/config/routes.rb +26 -0
  71. data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +15 -0
  72. data/db/migrate/20211201023750_create_educode_sales_teacher_assign_follows.rb +11 -0
  73. data/db/migrate/20211206054756_add_year_to_follow_ups.rb +5 -0
  74. data/db/migrate/20211214100803_create_customer_extensions.rb +9 -0
  75. data/db/migrate/20211215025029_create_educode_sales_customer_follows.rb +12 -0
  76. data/lib/educode_sales/version.rb +1 -1
  77. metadata +30 -2
@@ -0,0 +1,20 @@
1
+ json.data do
2
+ json.array! @follow_ups do |d|
3
+ json.id d.id
4
+ json.clazz d.clazz.name
5
+ json.stage d.stage.name
6
+ json.staff d.staff.user.real_name
7
+ json.description d.description
8
+ json.advise d.advise
9
+ json.school d.business.department.school.name
10
+ json.created_at d.created_at.to_s
11
+ json.business d.business.name
12
+ json.business_id d.business.id
13
+ teacher_ids = d.key_person.pluck(:teacher_id)
14
+ json.key_people EducodeSales::Teacher.where(id: teacher_ids).pluck(:name).join('、')
15
+
16
+ end
17
+ end
18
+
19
+ json.code 0
20
+ json.count @follow_ups.total_count
@@ -0,0 +1,9 @@
1
+ json.data do
2
+ json.array! @places do |d|
3
+ json.value d.id
4
+ json.name d.name
5
+ end
6
+ end
7
+ json.count (@places.total_count/10 + 1)
8
+ json.code 0
9
+ json.msg "success"
@@ -79,6 +79,10 @@
79
79
  toolbar: '#monthPlanToolbar',
80
80
  totalRow:true,
81
81
  defaultToolbar: ['filter'],
82
+ initSort: {
83
+ field: 'updated_at' //排序字段,对应 cols 设定的各字段名
84
+ ,type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
85
+ },
82
86
  cols: [
83
87
  [
84
88
  {
@@ -111,6 +115,8 @@
111
115
  field: 'content',
112
116
  width: 400,
113
117
  title: '计划内容',
118
+ templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
119
+
114
120
  },
115
121
  {
116
122
  field: 'count',
@@ -114,6 +114,8 @@
114
114
  field: 'content',
115
115
  width: 300,
116
116
  title: '个人总结',
117
+ templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
118
+
117
119
  },
118
120
  {
119
121
  field: 'level1_score',
@@ -80,6 +80,10 @@
80
80
  toolbar: '#weekPlanToolbar',
81
81
  totalRow:true,
82
82
  defaultToolbar: ['filter'],
83
+ initSort: {
84
+ field: 'updated_at' //排序字段,对应 cols 设定的各字段名
85
+ ,type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
86
+ },
83
87
  cols: [
84
88
  [
85
89
  {
@@ -122,6 +126,8 @@
122
126
  field: 'content',
123
127
  width: 300,
124
128
  title: '计划内容',
129
+ templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
130
+
125
131
  },
126
132
  {
127
133
  field: 'count',
@@ -115,6 +115,8 @@
115
115
  field: 'content',
116
116
  width: 300,
117
117
  title: '个人总结',
118
+ templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
119
+
118
120
  },
119
121
  {
120
122
  field: 'level1_score',
@@ -17,7 +17,7 @@ json.data do
17
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
18
  json.businesses_count business_count
19
19
  all_businesses_count += business_count
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)
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("actual_amount - divide_amount").round(2)
21
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)
22
22
  end
23
23
  end
@@ -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>
@@ -36,6 +36,14 @@
36
36
  <%= radio_button_tag("business", "全部", @areas.include?("商机管理-全部"), {title: '全部列表', id: 3}) %>
37
37
  </div>
38
38
  </div>
39
+ <div class="layui-form-item">
40
+ <label class="layui-form-label">客户管理</label>
41
+ <div class="layui-input-block">
42
+ <%= radio_button_tag("customer", "自己", @areas.include?("客户管理-自己"), {title: '本人负责列表', id: 13}) %>
43
+ <%= radio_button_tag("customer", "区域", @areas.include?("客户管理-区域"), {title: '本人负责区域列表', id:14}) %>
44
+ <%= radio_button_tag("customer", "全部", @areas.include?("客户管理-全部"), {title: '全部列表', id: 15}) %>
45
+ </div>
46
+ </div>
39
47
  <div class="layui-form-item">
40
48
  <label class="layui-form-label">销售计划</label>
41
49
  <div class="layui-input-block">
@@ -207,7 +207,7 @@
207
207
  <div class="layui-inline m-t-10">
208
208
  <label class="layui-form-label">视图</label>
209
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'}%>
210
+ <%= select_tag "follow_count_range", options_for_select([['按天','day'],['按周','week'],['按月','month'],['按年','year']],params[:follow_count_range] || 'week'), {'lay-filter': 'follow_count'}%>
211
211
  </div>
212
212
  </div>
213
213
  <div class="layui-inline">
@@ -215,7 +215,7 @@
215
215
  <div class="layui-input-inline">
216
216
  <input type="text" class="layui-input month layui-hide" id="date_month" name="date_month" placeholder=" - " value="<%=params[:date_month] %>" >
217
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) %>">
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
219
  <input type="text" class="layui-input day layui-hide" id="date" name="date" placeholder=" - " value="<%=params[:date] %>">
220
220
  </div>
221
221
  </div>
@@ -1,5 +1,11 @@
1
1
  <div class="section">
2
- <h4><span>销售人员列表</span></h4>
2
+ <form class="layui-form select_year" action="">
3
+ <span>销售人员列表</span>
4
+ <div class="layui-input-inline" style="float: right">
5
+ <%= select_tag "years", options_for_select(@years,@year), {'lay-filter': 'year' } %>
6
+ </div>
7
+ <span style="float: right;padding-right: 10px">年度</span>
8
+ </form>
3
9
  <hr>
4
10
  <table class="layui-hide" id="table" lay-filter="table" ></table>
5
11
  </div>
@@ -40,11 +46,18 @@
40
46
  </script>
41
47
  <script>
42
48
  layui.use('table', function () {
43
- var table = layui.table;
49
+ var form = layui.form,
50
+ table = layui.table;
51
+
52
+ form.on('select(year)', function(data){
53
+ console.log(data, )
54
+ year = data.value
55
+ window.location.href = "/missions/sales?year=" + data.value
56
+ })
44
57
 
45
58
  table.render({
46
59
  elem: '#table',
47
- url: '/missions/sales',
60
+ url: '/missions/sales?year=<%= @year %>',
48
61
  cellMinWidth: 80,
49
62
  totalRow:true,
50
63
  cols: [
@@ -60,6 +73,7 @@
60
73
  }, {
61
74
  field: 'area',
62
75
  title: '负责区域',
76
+ templet:'<div><span title="{{d.area}}">{{d.area}}</span></div>'
63
77
  }, {
64
78
  field: 'business_a',
65
79
  title: 'A类商机',
@@ -108,12 +122,43 @@
108
122
  title: '中标金额',
109
123
  totalRow:true,sort:true,
110
124
  width: 120
111
- }, {
125
+ },
126
+ {
112
127
  field: 'return_money',
113
128
  title: '回款金额',
114
129
  totalRow:true,sort:true,
115
130
  width: 120
116
- }
131
+ },
132
+ {
133
+ field: 'school_count',
134
+ title: '负责学校数',
135
+ totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
136
+ width: 120
137
+ },
138
+ {
139
+ field: 'follow_school_count',
140
+ title: '跟进学校数',
141
+ totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
142
+ width: 120
143
+ },
144
+ {
145
+ field: 'follow_school_counts',
146
+ title: '跟进学校次数',
147
+ totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
148
+ width: 120
149
+ },
150
+ {
151
+ field: 'follow_school_rate',
152
+ title: '学校覆盖率',
153
+ totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
154
+ width: 120
155
+ },
156
+ {
157
+ field: 'follow_department_rate',
158
+ title: '学院覆盖率',
159
+ totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
160
+ width: 120
161
+ },
117
162
  ]
118
163
  ],
119
164
  limit: 20,
@@ -121,19 +166,13 @@
121
166
  page: true
122
167
  });
123
168
 
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
169
 
138
170
  });
139
- </script>
171
+ </script>
172
+ <style>
173
+ .select_year .layui-form-select .layui-input {
174
+ padding-right: 30px;
175
+ cursor: pointer;
176
+ height: 22px;
177
+ }
178
+ </style>
@@ -26,32 +26,47 @@ 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(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", @x).where.not("educode_sales_money_plans.clazz!= ?", 1).sum(:amount).round(2)
38
+ json.school_count EducodeSales::CustomerExtension.where(customer_staff_id: d.id).size
39
+ else
40
+ 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
41
+ 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
42
+ 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
43
+ 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
44
+ 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
45
+ 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
46
+ 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.bidded_date >= ? AND educode_sales_follow_ups.bidded_date <= ?", "#{@year}-01-01", "#{@year}-12-31").sum(:total_amount).round(2)
47
+ json.return_money @businesses.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", @x).where.not("educode_sales_money_plans.clazz!= ?", 1).where("educode_sales_money_plans.date_at >= ? AND educode_sales_money_plans.date_at <= ? ", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").sum(:amount).round(2)
48
+ json.school_count EducodeSales::CustomerExtension.where(customer_staff_id: d.id).size
49
+ end
50
+
31
51
  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
52
  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
53
  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
54
+ json.business_d business_d
55
+ json.business_e business_e
46
56
  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)
57
+
49
58
  json.a_clazz_id @a_clazz&.id
50
59
  json.b_clazz_id @b_clazz&.id
51
60
  json.c_clazz_id @c_clazz&.id
52
61
  json.d_clazz_id @d_clazz&.id
53
62
  json.e_clazz_id @e_clazz&.id
54
63
  json.o_clazz_id @o_clazz&.id
64
+ businesses_a_count += business_a
65
+ businesses_b_count += business_b
66
+ businesses_c_count += business_c
67
+ businesses_d_count += business_d
68
+ businesses_e_count += business_e
69
+ businesses_o_count += business_o
55
70
  end
56
71
  end
57
72
 
@@ -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;