educode_sales 0.9.71 → 0.9.73

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/assets/images/educode_sales/indexlogo.png +0 -0
  3. data/app/controllers/educode_sales/businesses_controller.rb +27 -0
  4. data/app/controllers/educode_sales/follow_ups_controller.rb +20 -5
  5. data/app/controllers/educode_sales/project_charts_controller.rb +145 -0
  6. data/app/controllers/educode_sales/staffs_controller.rb +35 -0
  7. data/app/helpers/educode_sales/application_helper.rb +153 -6
  8. data/app/views/educode_sales/businesses/_follows.html.erb +11 -1
  9. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +19 -0
  10. data/app/views/educode_sales/businesses/index.html.erb +40 -8
  11. data/app/views/educode_sales/businesses/index.json.jbuilder +3 -0
  12. data/app/views/educode_sales/businesses/key_person.html.erb +56 -0
  13. data/app/views/educode_sales/businesses/key_person.json.jbuilder +17 -0
  14. data/app/views/educode_sales/businesses/new_follow_record.html.erb +23 -9
  15. data/app/views/educode_sales/follow_ups/index.json.jbuilder +2 -0
  16. data/app/views/educode_sales/project_charts/_sales_analysis.html.erb +436 -0
  17. data/app/views/educode_sales/project_charts/sales_analysis.js.erb +1 -0
  18. data/app/views/educode_sales/project_charts/trends.html.erb +81 -0
  19. data/app/views/educode_sales/project_charts/trends.json.jbuilder +4 -0
  20. data/app/views/educode_sales/staffs/edit.html.erb +1 -1
  21. data/app/views/educode_sales/staffs/index.html.erb +20 -1
  22. data/app/views/educode_sales/staffs/list.html.erb +39 -0
  23. data/app/views/layouts/educode_sales/application.html.erb +3 -3
  24. data/config/routes.rb +14 -0
  25. data/db/migrate/20230428015007_add_deploy_time_follow_ups.rb +6 -0
  26. data/lib/educode_sales/version.rb +1 -1
  27. metadata +16 -6
@@ -130,6 +130,18 @@
130
130
  </select>
131
131
  </div>
132
132
  </div>
133
+ <div class="layui-inline show_item" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
134
+ <label class="layui-form-label">销售经理</label>
135
+ <div class="layui-input-inline">
136
+ <div id="staff_manages" style="width: 190px;"></div>
137
+ </div>
138
+ </div>
139
+ <div class="layui-inline show_item" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
140
+ <label class="layui-form-label">客户类型</label>
141
+ <div class="layui-input-inline">
142
+ <%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), { include_blank: true } %>
143
+ </div>
144
+ </div>
133
145
  <div class="layui-inline">
134
146
  <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
135
147
  </button>
@@ -228,7 +240,7 @@
228
240
  </script>
229
241
 
230
242
  <script type="text/html" id="show_keys">
231
- <a href="javascript:void(0);" lay-event="show_keys" class="layui-table-link">{{ d.teachers_count }}</a>
243
+ <a href="javascript:void(0);" lay-event="show_keys" class="layui-table-link">{{ d.keys_person_count }}</a>
232
244
  </script>
233
245
  <script type="text/html" id="show_follow">
234
246
  <a href="javascript:void(0);" lay-event="show_follow" class="layui-table-link">{{ d.follow_ups_count }}</a>
@@ -306,6 +318,14 @@
306
318
  radio: true,
307
319
  })
308
320
 
321
+ var staff_manages_list = xmSelect.render({
322
+ el: '#staff_manages',
323
+ data: gon.staffs,
324
+ filterable: true,
325
+ radio: true,
326
+ })
327
+
328
+
309
329
  var business_step_list = xmSelect.render({
310
330
  el: '#business_step',
311
331
  data: gon.business_step
@@ -361,6 +381,8 @@
361
381
  data.business_type = business_type_list.getValue('valueStr')
362
382
  data.business_step = business_step_list.getValue('valueStr');
363
383
  data.staff_id = staff_list.getValue('valueStr');
384
+ data.staff_manages = staff_manages_list.getValue('valueStr');
385
+
364
386
  <% if params[:year].present? %>
365
387
  data.year = "<%= params[:year] %>";
366
388
  <% end %>
@@ -429,12 +451,18 @@
429
451
  totalRow: true,
430
452
  hide: gon.filter.follow_ups_count
431
453
  },
432
- // {
433
- // field: 'teachers_count',
434
- // width: 100,
435
- // title: '关键人',
436
- // templet: '#show_keys'
437
- // },
454
+ {
455
+ field: 'keys_person_count',
456
+ width: 100,
457
+ title: '关键人',
458
+ templet: '#show_keys'
459
+ },
460
+ {
461
+ field: 'rival',
462
+ width: 100,
463
+ title: '竞争对手',
464
+ hide: gon.filter.rival
465
+ },
438
466
  {
439
467
  field: 'clazz',
440
468
  width: 80,
@@ -798,6 +826,7 @@
798
826
  data.business_type = business_type.toString();
799
827
  data.business_step = business_step.toString();
800
828
  data.staff_id = staff_list.getValue('valueStr');
829
+ data.staff_manages = staff_manages_list.getValue('valueStr');
801
830
  <% if params[:year].present? %>
802
831
  data.year = "<%= params[:year] %>";
803
832
  <% end %>
@@ -813,6 +842,7 @@
813
842
  place_id: data.place_id,
814
843
  select: data.select,
815
844
  staff_id: data.staff_id,
845
+ staff_manages: data.staff_manages,
816
846
  signed_date: data.signed_date,
817
847
  date_at: data.date_at,
818
848
  bidded_date: data.bidded_date,
@@ -1047,6 +1077,7 @@
1047
1077
  })
1048
1078
  data.field.place_id = index_place_list.getValue('valueStr');
1049
1079
  data.field.staff_id = staff_list.getValue('valueStr');
1080
+ data.field.staff_manages = staff_manages_list.getValue('valueStr');
1050
1081
  data.field.business_type = business_type.toString();
1051
1082
  data.field.business_step = business_step.toString();
1052
1083
  <% if params[:year].present? %>
@@ -1096,6 +1127,7 @@
1096
1127
  business_step_list.setValue([])
1097
1128
  index_place_list.setValue([])
1098
1129
  staff_list.setValue([])
1130
+ staff_manages_list.setValue([]);
1099
1131
 
1100
1132
  return false;
1101
1133
  });
@@ -1367,7 +1399,7 @@
1367
1399
  } else if (obj.event === 'show_keys') {
1368
1400
  business_id = obj.data.id
1369
1401
  follow_up_id = obj.data.follow_up_id;
1370
- content = miniPage.getHrefContent('/missions/businesses/show_keys');
1402
+ content = miniPage.getHrefContent('/missions/businesses/' + business_id + '/key_person');
1371
1403
  openWH = miniPage.getOpenWidthHeight();
1372
1404
  index = layer.open({
1373
1405
  title: '关键人',
@@ -34,6 +34,9 @@ json.data do
34
34
 
35
35
  json.majors d.department&.department_majors&.pluck(:name).present? ? d.department&.department_majors&.pluck(:name).join(",") : ""
36
36
 
37
+ json.keys_person_count d.last_follow_up.present? ? EducodeSales::KeyPerson.where("follow_up_id = #{d.last_follow_up.id}").count : 0
38
+ json.rival d.last_follow_up&.rival || ''
39
+
37
40
  # school_property = d.department.school.school_property
38
41
  # property = []
39
42
 
@@ -0,0 +1,56 @@
1
+ <table class="layui-hide" id="keyTable"></table>
2
+ <script>
3
+ layui.use(['table'], function () {
4
+ var table = layui.table
5
+ table.render({
6
+ elem: '#keyTable',
7
+ url: '/missions/businesses/' + parent.business_id + "/key_person?follow_up_id=" + parent.follow_up_id,
8
+ defaultToolbar: [],
9
+ cols: [
10
+ [
11
+ {
12
+ field: 'id',
13
+ width: 80,
14
+ title:'序号',type: 'numbers',
15
+ },
16
+ {
17
+ field: 'name',
18
+ width: 140,
19
+ title: '姓名'
20
+ },
21
+ {
22
+ field: 'job',
23
+ width: 140,
24
+ title: '职务',
25
+ },
26
+ {
27
+ field: 'attitude',
28
+ width: 140,
29
+ title: '态度'
30
+ },
31
+ {
32
+ field: 'professional_title',
33
+ width: 140,
34
+ title: '职称'
35
+ },
36
+ {
37
+ field: 'sex',
38
+ width: 100,
39
+ title: '性别'
40
+ },
41
+ {
42
+ field: 'birth_date',
43
+ width: 200,
44
+ title: '生日',
45
+ },
46
+ {
47
+ field: 'remark',
48
+ width: 300,
49
+ title: '其他信息',
50
+ }
51
+ ]
52
+ ],
53
+ skin: 'line'
54
+ });
55
+ });
56
+ </script>
@@ -0,0 +1,17 @@
1
+ json.data do
2
+ json.array! @teachers do |d|
3
+ json.id d.id
4
+ json.name d.teacher.name
5
+ json.professional_title d.professional_title
6
+ json.job d.job
7
+ json.attitude_id d.attitude_id.present? ? d.attitude_id : ''
8
+ json.attitude d.attitude&.name
9
+ json.sex d.sex
10
+ json.birth_date d.birth_date
11
+ json.remark d.remark
12
+ json.tel d.tel
13
+ end
14
+ end
15
+
16
+ json.code 0
17
+ json.count @teachers.total_count
@@ -67,6 +67,12 @@
67
67
  placeholder="请选择日期">
68
68
  </div>
69
69
  </div>
70
+ <div class="layui-inline">
71
+ <label class="layui-form-label">部署时间</label>
72
+ <div class="layui-input-inline">
73
+ <input type="text" class="layui-input" name="deploy_time" value="<%= @last_follow_up&.deploy_time %>" id="p_deploy_time" placeholder="请选择日期">
74
+ </div>
75
+ </div>
70
76
  <br>
71
77
  <div class="layui-inline service_show layui-hide">
72
78
  <label class="layui-form-label required">服务期</label>
@@ -132,13 +138,21 @@
132
138
  </div>
133
139
  </div>
134
140
  <div class="layui-form-item">
135
- <div class="layui-inline">
136
- <label class="layui-form-label required">所属年度</label>
137
- <div class="layui-input-inline">
138
- <input type="text" class="layui-input" name="year" autocomplete="off" lay-verify="required" id="year"
139
- value="<%= @last_follow_up&.year%>"
140
- placeholder="请选择年度"> </div>
141
+ <div class="layui-inline">
142
+ <label class="layui-form-label required">所属年度</label>
143
+ <div class="layui-input-inline">
144
+ <input type="text" class="layui-input" name="year" autocomplete="off" lay-verify="required" id="year"
145
+ value="<%= @last_follow_up&.year%>"
146
+ placeholder="请选择年度"> </div>
147
+ </div>
141
148
  </div>
149
+ <div class="layui-form-item">
150
+ <div class="layui-inline">
151
+ <label class="layui-form-label">竞争对手</label>
152
+ <div class="layui-input-inline">
153
+ <input type="text" class="layui-input" name="rival" autocomplete="off" value="<%= @last_follow_up&.rival%>">
154
+ </div>
155
+ </div>
142
156
  </div>
143
157
  <div class="layui-form-item">
144
158
  <label class="layui-form-label">指定跟进人</label>
@@ -223,7 +237,9 @@
223
237
  laydate.render({
224
238
  elem: '#invitation_at_add'
225
239
  })
226
-
240
+ laydate.render({
241
+ elem: '#p_deploy_time'
242
+ })
227
243
  laydate.render({
228
244
  elem: '#reception_at_add'
229
245
  });
@@ -322,8 +338,6 @@
322
338
  data.field.assign_follow_up = assign_follow;
323
339
  data.field.business_id = "<%= @business.id %>";
324
340
  data.field.place_id = place_list.getValue('valueStr');
325
- console.log("start")
326
- console.log(data.field)
327
341
  request.authPost("missions/follow_ups", data.field, function (res) {
328
342
  if (res.success == false) {
329
343
  layer.alert(res.msg)
@@ -11,6 +11,8 @@ json.data do
11
11
  json.created_at d.created_at.to_s
12
12
  json.business d.business.name
13
13
  json.business_id d.business.id
14
+ json.rival d.rival || ''
15
+ json.staff_manages d.business.last_follow_up&.assign_follow_ups.present? ? (d.business.last_follow_up.assign_follow_ups.map{ |d| d.staff.user.real_name}.join("、")) : d.business.staff&.user&.real_name
14
16
  # teacher_ids = d.key_person.pluck(:teacher_id)
15
17
  json.tel d.key_person.pluck(:tel).select { |d| d.present? }.join("、")
16
18
  json.key_people d.key_person.map { |d| d.teacher.name }.join("、")# key_people(teacher_ids)