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.
- checksums.yaml +4 -4
- data/app/assets/images/educode_sales/indexlogo.png +0 -0
- data/app/controllers/educode_sales/businesses_controller.rb +27 -0
- data/app/controllers/educode_sales/follow_ups_controller.rb +20 -5
- data/app/controllers/educode_sales/project_charts_controller.rb +145 -0
- data/app/controllers/educode_sales/staffs_controller.rb +35 -0
- data/app/helpers/educode_sales/application_helper.rb +153 -6
- data/app/views/educode_sales/businesses/_follows.html.erb +11 -1
- data/app/views/educode_sales/businesses/edit_follow_record.html.erb +19 -0
- data/app/views/educode_sales/businesses/index.html.erb +40 -8
- data/app/views/educode_sales/businesses/index.json.jbuilder +3 -0
- data/app/views/educode_sales/businesses/key_person.html.erb +56 -0
- data/app/views/educode_sales/businesses/key_person.json.jbuilder +17 -0
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +23 -9
- data/app/views/educode_sales/follow_ups/index.json.jbuilder +2 -0
- data/app/views/educode_sales/project_charts/_sales_analysis.html.erb +436 -0
- data/app/views/educode_sales/project_charts/sales_analysis.js.erb +1 -0
- data/app/views/educode_sales/project_charts/trends.html.erb +81 -0
- data/app/views/educode_sales/project_charts/trends.json.jbuilder +4 -0
- data/app/views/educode_sales/staffs/edit.html.erb +1 -1
- data/app/views/educode_sales/staffs/index.html.erb +20 -1
- data/app/views/educode_sales/staffs/list.html.erb +39 -0
- data/app/views/layouts/educode_sales/application.html.erb +3 -3
- data/config/routes.rb +14 -0
- data/db/migrate/20230428015007_add_deploy_time_follow_ups.rb +6 -0
- data/lib/educode_sales/version.rb +1 -1
- 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.
|
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
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
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/
|
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
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
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)
|