educode_sales 0.6.4 → 0.6.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.
- checksums.yaml +4 -4
- data/app/controllers/educode_sales/activities_controller.rb +0 -2
- data/app/controllers/educode_sales/businesses_controller.rb +103 -47
- data/app/controllers/educode_sales/money_plans_controller.rb +8 -7
- data/app/controllers/educode_sales/sale_trends_controller.rb +105 -18
- data/app/controllers/educode_sales/staffs_controller.rb +19 -0
- data/app/controllers/educode_sales/teacher_follows_controller.rb +1 -93
- data/app/models/educode_sales/business_export_record.rb +5 -0
- data/app/views/educode_sales/activities/index.html.erb +7 -1
- data/app/views/educode_sales/activities/new.html.erb +1 -1
- data/app/views/educode_sales/businesses/edit_follow_record.html.erb +13 -4
- data/app/views/educode_sales/businesses/edit_plan.html.erb +5 -2
- data/app/views/educode_sales/businesses/export_records.html.erb +53 -0
- data/app/views/educode_sales/businesses/export_records.json.jbuilder +11 -0
- data/app/views/educode_sales/businesses/file.html.erb +8 -4
- data/app/views/educode_sales/businesses/index.html.erb +119 -16
- data/app/views/educode_sales/businesses/index.json.jbuilder +37 -7
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +10 -5
- data/app/views/educode_sales/commons/index.html.erb +7 -1
- data/app/views/educode_sales/customers/edit.html.erb +3 -0
- data/app/views/educode_sales/customers/edit_follow_record.html.erb +1 -1
- data/app/views/educode_sales/customers/new.html.erb +3 -0
- data/app/views/educode_sales/customers/new_follow_record.html.erb +1 -1
- data/app/views/educode_sales/customers/show_follow.html.erb +1 -1
- data/app/views/educode_sales/money_plans/index.html.erb +47 -8
- data/app/views/educode_sales/money_plans/index.json.jbuilder +2 -1
- data/app/views/educode_sales/places/index.html.erb +16 -2
- data/app/views/educode_sales/places/index.json.jbuilder +3 -1
- data/app/views/educode_sales/recycles/business.json.jbuilder +2 -2
- data/app/views/educode_sales/roles/index.html.erb +7 -1
- data/app/views/educode_sales/sale_trends/trends.html.erb +96 -44
- data/app/views/educode_sales/sale_trends/trends.json.jbuilder +2 -1
- data/app/views/educode_sales/sales/index.json.jbuilder +2 -2
- data/app/views/educode_sales/staffs/index.html.erb +68 -2
- data/app/views/educode_sales/teachers/index.html.erb +15 -7
- data/app/views/layouts/educode_sales/application.html.erb +6 -1
- data/config/routes.rb +2 -0
- data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +7 -0
- data/db/migrate/20220121060006_create_educode_sales_business_export_records.rb +10 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +6 -2
@@ -69,25 +69,29 @@
|
|
69
69
|
<div class="layui-input-inline">
|
70
70
|
<input name="total_amount" type="number" class="layui-input" value="<%= @follow_up.total_amount %>">
|
71
71
|
</div>
|
72
|
-
</div>
|
72
|
+
客户采购支出的费用。总额的生命历程:1.在最初阶段,是商机的预算总额;2.在挂网阶段,是项目的挂网预算总额;3.在中标阶段,是项目的中标总额。 </div>
|
73
|
+
<br>
|
73
74
|
<div class="layui-inline">
|
74
75
|
<label class="layui-form-label">合同额(万)</label>
|
75
76
|
<div class="layui-input-inline">
|
76
77
|
<input name="actual_amount" type="number" class="layui-input" placeholder="本单位的签单金额" value="<%= @follow_up.actual_amount %>">
|
77
78
|
</div>
|
79
|
+
客户签给头歌的费用。合同额的生命历程:1.在中标之前,合同额都是0;2.在中标之后,实际与头歌签合同的金额。
|
78
80
|
</div>
|
79
81
|
<br>
|
80
82
|
<div class="layui-inline place_select">
|
81
83
|
<label class="layui-form-label">渠道</label>
|
82
|
-
<div class="layui-input-inline" style="
|
84
|
+
<div class="layui-input-inline" style="">
|
83
85
|
<div id="edit_place" style="width: 190px;"></div>
|
84
86
|
</div>
|
85
87
|
</div>
|
88
|
+
<br>
|
86
89
|
<div class="layui-inline">
|
87
90
|
<label class="layui-form-label">渠道分成(万)</label>
|
88
91
|
<div class="layui-input-inline">
|
89
92
|
<input name="divide_amount" class="layui-input" value="<%= @follow_up.divide_amount%>">
|
90
93
|
</div>
|
94
|
+
总额里,渠道拿到的部分。
|
91
95
|
</div>
|
92
96
|
<div class="layui-form-item">
|
93
97
|
<div class="layui-inline">
|
@@ -95,14 +99,19 @@
|
|
95
99
|
<div class="layui-input-inline">
|
96
100
|
<input type="text" class="layui-input" name="year" lay-verify="required" autocomplete="off" id="edit_year"
|
97
101
|
value="<%= @follow_up&.year%>"
|
98
|
-
placeholder="请选择年度">
|
102
|
+
placeholder="请选择年度">
|
103
|
+
</div>
|
99
104
|
</div>
|
100
105
|
</div>
|
101
106
|
<div class="layui-form-item">
|
102
107
|
<label class="layui-form-label">指定跟进人</label>
|
103
|
-
<div class="layui-input-inline">
|
108
|
+
<div class="layui-input-inline" style="">
|
104
109
|
<div id="edit_assign_follow" style="width: 512px;"></div>
|
105
110
|
</div>
|
111
|
+
<div class="layui-inline" style="padding: 9px 15px;z-index: -1">
|
112
|
+
<label class="layui-form-label" style="padding-left: 220px"></label>
|
113
|
+
指定跟进人和商机创建者,同时拥有对该商机的管理权限
|
114
|
+
</div>
|
106
115
|
</div>
|
107
116
|
<div class="layui-form-item layui-form-text">
|
108
117
|
<label class="layui-form-label required">最新进展</label>
|
@@ -12,12 +12,15 @@
|
|
12
12
|
</div>
|
13
13
|
</div>
|
14
14
|
<div class="layui-input-inline" style="width: 300px;">
|
15
|
-
<label class="layui-form-label required"
|
15
|
+
<label class="layui-form-label required">回款金额</label>
|
16
16
|
<div class="layui-input-block">
|
17
17
|
<input type="number" name="amount" autocomplete="off" lay-verify="required" lay-reqtext="回款金额不能为空"
|
18
18
|
placeholder="请输入回款金额" value="" class="layui-input" id="return_money_amount">
|
19
19
|
</div>
|
20
20
|
</div>
|
21
|
+
<div class="layui-input-inline" style="width: 0;!important;">
|
22
|
+
<label class="layui-form-label" style="padding-left: 0;width: 10px;!important;">万</label>
|
23
|
+
</div>
|
21
24
|
<div class="layui-input-inline" style="width: 300px;" id="professional_title_div">
|
22
25
|
<label class="layui-form-label required">状态</label>
|
23
26
|
<div class="layui-input-block">
|
@@ -115,7 +118,7 @@
|
|
115
118
|
}, {
|
116
119
|
field: 'amount',
|
117
120
|
width: 200,
|
118
|
-
title: '回款金额',
|
121
|
+
title: '回款金额(万)',
|
119
122
|
edit: true
|
120
123
|
}, {
|
121
124
|
field: 'clazz',
|
@@ -0,0 +1,53 @@
|
|
1
|
+
<script type="text/html" id="activity_toolbar">
|
2
|
+
<div class="layui-btn-container">
|
3
|
+
<span class="table-label">导出记录</span>
|
4
|
+
</div>
|
5
|
+
</script>
|
6
|
+
<div class="min-height-table">
|
7
|
+
<table class="layui-hide" id="activities_table" lay-filter="activities_table"></table>
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<script type="text/html" id="currentTableBar">
|
11
|
+
</script>
|
12
|
+
|
13
|
+
<script>
|
14
|
+
layui.use(['form', 'table', 'miniPage', 'element', 'request'], function () {
|
15
|
+
var $ = layui.jquery,
|
16
|
+
form = layui.form,
|
17
|
+
table = layui.table,
|
18
|
+
request = layui.request,
|
19
|
+
miniPage = layui.miniPage;
|
20
|
+
|
21
|
+
table.render({
|
22
|
+
elem: '#activities_table',
|
23
|
+
url: '/missions/businesses/export_records',
|
24
|
+
toolbar: '#activity_toolbar',
|
25
|
+
defaultToolbar: [],
|
26
|
+
cols: [
|
27
|
+
[
|
28
|
+
{
|
29
|
+
field: 'id',
|
30
|
+
title:'序号',type: 'numbers',
|
31
|
+
},
|
32
|
+
{
|
33
|
+
field: 'name',
|
34
|
+
title: '文件名',
|
35
|
+
},
|
36
|
+
{
|
37
|
+
field: 'staff',
|
38
|
+
title: '导出人',
|
39
|
+
},
|
40
|
+
{
|
41
|
+
field: 'created_at',
|
42
|
+
title: '导出时间',
|
43
|
+
},
|
44
|
+
]
|
45
|
+
],
|
46
|
+
limit: 20,
|
47
|
+
limits: [10,15,20,30,40,50,60,70,80,90],
|
48
|
+
page: true
|
49
|
+
});
|
50
|
+
|
51
|
+
|
52
|
+
});
|
53
|
+
</script>
|
@@ -2,9 +2,9 @@
|
|
2
2
|
<script type="text/html" id="toolbarDemo">
|
3
3
|
<div class="layui-btn-container">
|
4
4
|
<span class="table-label">附件信息</span>
|
5
|
-
|
5
|
+
<% if can? :upload_file, EducodeSales::Business %>
|
6
6
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="upload_file">上传文件</button>
|
7
|
-
|
7
|
+
<% end %>
|
8
8
|
</div>
|
9
9
|
</script>
|
10
10
|
|
@@ -12,8 +12,12 @@
|
|
12
12
|
|
13
13
|
<script type="text/html" id="currentTableBar_file">
|
14
14
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="preview">预览</a>
|
15
|
-
|
16
|
-
|
15
|
+
<% if can? :download_file, EducodeSales::Business %>
|
16
|
+
<a href="/missions/upload_files/download?id={{d.id}}" class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="download">下载</a>
|
17
|
+
<% end %>
|
18
|
+
<% if can? :delete_file, EducodeSales::Business %>
|
19
|
+
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
|
20
|
+
<% end %>
|
17
21
|
</script>
|
18
22
|
|
19
23
|
<script type="text/html" id="showchance">
|
@@ -33,34 +33,40 @@
|
|
33
33
|
<%= select_tag "staff_id", options_for_select(@staffs, params[:staff_id]), { 'lay-filter': 'staff_id', include_blank: true } %>
|
34
34
|
</div>
|
35
35
|
</div>
|
36
|
-
<div class="layui-inline">
|
36
|
+
<div class="layui-inline show_item" style="display:none;">
|
37
37
|
<label class="layui-form-label">项目类型</label>
|
38
38
|
<div class="layui-input-inline">
|
39
|
-
|
39
|
+
<div id="business_type" style="width: 190px;"></div>
|
40
40
|
</div>
|
41
41
|
</div>
|
42
|
-
<div class="layui-inline">
|
42
|
+
<div class="layui-inline show_item" style="display:none;">
|
43
43
|
<label class="layui-form-label">项目阶段</label>
|
44
44
|
<div class="layui-input-inline">
|
45
|
-
|
45
|
+
<div id="business_step" style="width: 190px;"></div>
|
46
46
|
</div>
|
47
47
|
</div>
|
48
|
-
<div class="layui-inline">
|
48
|
+
<div class="layui-inline show_item" style="display:none;">
|
49
49
|
<label class="layui-form-label">渠道名称</label>
|
50
50
|
<div class="layui-input-inline">
|
51
51
|
<div id="index_place" style="width: 190px;"></div>
|
52
52
|
</div>
|
53
53
|
</div>
|
54
|
-
<div class="layui-inline">
|
54
|
+
<div class="layui-inline show_item" style="display:none;">
|
55
55
|
<label class="layui-form-label">区域</label>
|
56
56
|
<div class="layui-input-inline">
|
57
57
|
<%= select_tag "area", options_for_select(EducodeSales::Common.where(clazz: 'area').pluck(:name, :id)), { include_blank: true } %>
|
58
58
|
</div>
|
59
59
|
</div>
|
60
|
-
<div class="layui-inline">
|
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
|
+
</div>
|
65
|
+
</div>
|
66
|
+
<div class="layui-inline show_item" style="display:none;">
|
67
|
+
<label class="layui-form-label">招标时间</label>
|
68
|
+
<div class="layui-input-inline">
|
69
|
+
<input type="text" class="layui-input" id="invitation_at" name="invitation_at" placeholder=" - " autocomplete="off">
|
64
70
|
</div>
|
65
71
|
</div>
|
66
72
|
<div class="layui-inline">
|
@@ -68,6 +74,8 @@
|
|
68
74
|
</button>
|
69
75
|
<button type="submit" id="search_bt" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">搜索
|
70
76
|
</button>
|
77
|
+
<a style="padding-left: 20px;color: #0000FF" href="javascript:;" type="submit" class="" lay-submit lay-filter="show_hide">高级搜索
|
78
|
+
</a>
|
71
79
|
</div>
|
72
80
|
</div>
|
73
81
|
</form>
|
@@ -80,6 +88,7 @@
|
|
80
88
|
<script type="text/html" id="bussinessBar">
|
81
89
|
<div class="layui-btn-container">
|
82
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>
|
83
92
|
<% if can? :create, EducodeSales::Business %>
|
84
93
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add"> 添加商机</button>
|
85
94
|
<% end %>
|
@@ -126,6 +135,10 @@
|
|
126
135
|
elem: '#date',
|
127
136
|
range: true
|
128
137
|
});
|
138
|
+
laydate.render({
|
139
|
+
elem: '#invitation_at',
|
140
|
+
range: true
|
141
|
+
});
|
129
142
|
|
130
143
|
var is_show = <%=params[:name].present? || params[:clazz_id].present? || params[:place_id].present? || params[:school].present? %>
|
131
144
|
if(is_show){
|
@@ -135,6 +148,15 @@
|
|
135
148
|
$('.businesses_list_div').addClass('layui-show');
|
136
149
|
}
|
137
150
|
|
151
|
+
var business_type_list = xmSelect.render({
|
152
|
+
el: '#business_type',
|
153
|
+
data: gon.business_type
|
154
|
+
})
|
155
|
+
business_type_list.setValue(gon.type)
|
156
|
+
var business_step_list = xmSelect.render({
|
157
|
+
el: '#business_step',
|
158
|
+
data: gon.business_step
|
159
|
+
})
|
138
160
|
var index_place_list = xmSelect.render({
|
139
161
|
el: '#index_place',
|
140
162
|
model: {
|
@@ -182,17 +204,14 @@
|
|
182
204
|
|
183
205
|
|
184
206
|
table = layui.table;
|
185
|
-
table.render({
|
207
|
+
var business_table = table.render({
|
186
208
|
elem: '#businesses_table',
|
187
209
|
url: '/missions/businesses',
|
188
210
|
where: {q: form.val('search_form')},
|
189
211
|
defaultToolbar: ['filter'],
|
190
212
|
toolbar: '#bussinessBar',
|
213
|
+
title: '商机数据表',
|
191
214
|
totalRow: true,//开启合并行
|
192
|
-
initSort: {
|
193
|
-
field: 'latest_time' //排序字段,对应 cols 设定的各字段名
|
194
|
-
,type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
|
195
|
-
},
|
196
215
|
cols: [
|
197
216
|
[
|
198
217
|
{
|
@@ -304,6 +323,18 @@
|
|
304
323
|
sort: true,
|
305
324
|
totalRow: true
|
306
325
|
},
|
326
|
+
{
|
327
|
+
field: 'wait_return_money',
|
328
|
+
width: 100,
|
329
|
+
title: '待回款',
|
330
|
+
sort: true,
|
331
|
+
totalRow: true
|
332
|
+
},
|
333
|
+
{
|
334
|
+
field: 'return_money_days',
|
335
|
+
width: 120,
|
336
|
+
title: '首次回款周期(天)',
|
337
|
+
},
|
307
338
|
{
|
308
339
|
field: 'place',
|
309
340
|
width: 160,
|
@@ -324,12 +355,16 @@
|
|
324
355
|
page: true,
|
325
356
|
skin: 'line',
|
326
357
|
done: function (res) {
|
327
|
-
|
358
|
+
exportData=res.data1;
|
359
|
+
console.log(exportData);
|
360
|
+
drowpdwonRender()
|
361
|
+
export_drowpdwonRender()
|
328
362
|
}
|
329
363
|
|
330
364
|
});
|
331
365
|
|
332
366
|
var dropmenu = gon.menus;
|
367
|
+
var export_dropmenu = gon.export_menus;
|
333
368
|
|
334
369
|
drowpdwonRender = function() {
|
335
370
|
dropdown.render({
|
@@ -362,6 +397,56 @@
|
|
362
397
|
});
|
363
398
|
}
|
364
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
|
+
|
365
450
|
function week(id) {
|
366
451
|
var content = miniPage.getHrefContent('/missions/plans/new_week?business_id=' + id);
|
367
452
|
var openWH = miniPage.getOpenWidthHeight();
|
@@ -485,7 +570,17 @@
|
|
485
570
|
|
486
571
|
// 监听搜索操作
|
487
572
|
form.on('submit(search_bussiness)', function (data) {
|
573
|
+
var business_type = [];
|
574
|
+
business_type_list.getValue().forEach(function(d) {
|
575
|
+
business_type.push(d.value);
|
576
|
+
})
|
577
|
+
var business_step = [];
|
578
|
+
business_step_list.getValue().forEach(function(d) {
|
579
|
+
business_step.push(d.value);
|
580
|
+
})
|
488
581
|
data.field.place_id = index_place_list.getValue('valueStr');
|
582
|
+
data.field.business_type = business_type.toString();
|
583
|
+
data.field.business_step = business_step.toString();
|
489
584
|
search = data.field
|
490
585
|
console.log(search);
|
491
586
|
table.reload('businesses_table', {
|
@@ -507,13 +602,21 @@
|
|
507
602
|
return false;
|
508
603
|
});
|
509
604
|
|
605
|
+
form.on('submit(show_hide)', function (data) {
|
606
|
+
$(".show_item").toggle()
|
607
|
+
return false;
|
608
|
+
});
|
510
609
|
form.on('submit(reset_business_search)', function (data) {
|
511
610
|
var field = data.field;
|
512
611
|
form.val('search_form', {
|
513
612
|
name: '', department: '', staff_id: '', business_type: '', business_step: '',
|
514
|
-
place_id: '', date: '', area: ''
|
613
|
+
place_id: '', date: '', area: '', invitation_at: ''
|
515
614
|
})
|
516
|
-
|
615
|
+
business_type_list.setValue([])
|
616
|
+
business_step_list.setValue([])
|
617
|
+
index_place_list.setValue([])
|
618
|
+
|
619
|
+
return false;
|
517
620
|
});
|
518
621
|
|
519
622
|
table.on('toolbar(businesses_table)', function (obj) {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
follow_count = 0
|
2
2
|
json.data do
|
3
3
|
json.array! @businesses do |d|
|
4
4
|
json.id d.id
|
@@ -6,11 +6,10 @@ json.data do
|
|
6
6
|
json.department d.department.name
|
7
7
|
json.school d.department.school.name
|
8
8
|
json.school_id d.department.school.id
|
9
|
-
|
10
|
-
follow_ups_count
|
9
|
+
follow_ups_count = d.follow_ups.where(deleted_at: nil).size
|
10
|
+
json.follow_ups_count follow_ups_count
|
11
|
+
follow_count += follow_ups_count
|
11
12
|
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
13
|
json.clazz d.last_follow_up&.clazz&.name || ""
|
15
14
|
json.stage d.last_follow_up&.stage&.name
|
16
15
|
json.invitation_at d.last_follow_up&.invitation_at.to_s
|
@@ -20,18 +19,49 @@ json.data do
|
|
20
19
|
json.total_amount d.last_follow_up&.total_amount
|
21
20
|
json.actual_amount d.last_follow_up&.actual_amount
|
22
21
|
json.return_money d.return_money
|
22
|
+
json.wait_return_money d.wait_return_money.to_i.round(2)
|
23
|
+
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
24
|
json.place d.last_follow_up&.place&.name
|
24
25
|
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
26
|
json.source d.source
|
26
27
|
json.assign_follow_ups d.last_follow_up.present? ? d.last_follow_up.assign_follow_ups.pluck(:staff_id) : []
|
27
28
|
json.current_staff_id @current_admin.id
|
28
29
|
json.staff_id d.staff_id
|
29
|
-
json.latest_time d.last_follow_up.present? ? d.last_follow_up.created_at.to_s :
|
30
|
+
json.latest_time d.last_follow_up.present? ? d.last_follow_up.created_at.to_s : ''
|
31
|
+
end
|
32
|
+
end
|
33
|
+
json.data1 do
|
34
|
+
json.array! @businesses_exports do |d|
|
35
|
+
json.id d.id
|
36
|
+
json.name d.name
|
37
|
+
json.department d.department.name
|
38
|
+
json.school d.department.school.name
|
39
|
+
json.school_id d.department.school.id
|
40
|
+
json.follow_ups_count d.follow_ups.where(deleted_at: nil).size
|
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 : ''
|
53
|
+
json.place d.last_follow_up&.place&.name
|
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
|
55
|
+
json.source d.source
|
56
|
+
json.assign_follow_ups d.last_follow_up.present? ? d.last_follow_up.assign_follow_ups.pluck(:staff_id) : []
|
57
|
+
json.current_staff_id @current_admin.id
|
58
|
+
json.staff_id d.staff_id
|
59
|
+
json.latest_time d.last_follow_up.present? ? d.last_follow_up.created_at.to_s : ''
|
30
60
|
end
|
31
61
|
end
|
32
62
|
|
33
63
|
json.totalRow do
|
34
|
-
json.follow_ups_count
|
64
|
+
json.follow_ups_count follow_count.to_i.to_s
|
35
65
|
end
|
36
66
|
json.code 0
|
37
67
|
json.count @businesses.total_count
|
@@ -74,26 +74,30 @@
|
|
74
74
|
<input name="total_amount" type="number" class="layui-input" autocomplete="off"
|
75
75
|
value="<%= @last_follow_up&.total_amount%>">
|
76
76
|
</div>
|
77
|
-
</div>
|
77
|
+
客户采购支出的费用。总额的生命历程:1.在最初阶段,是商机的预算总额;2.在挂网阶段,是项目的挂网预算总额;3.在中标阶段,是项目的中标总额。 </div>
|
78
|
+
<br>
|
78
79
|
<div class="layui-inline">
|
79
80
|
<label class="layui-form-label">合同额(万)</label>
|
80
81
|
<div class="layui-input-inline">
|
81
82
|
<input name="actual_amount" type="number" class="layui-input" autocomplete="off" placeholder="本单位的签单金额"
|
82
83
|
value="<%= @last_follow_up&.actual_amount%>">
|
83
84
|
</div>
|
85
|
+
客户签给头歌的费用。合同额的生命历程:1.在中标之前,合同额都是0;2.在中标之后,实际与头歌签合同的金额。
|
84
86
|
</div>
|
85
87
|
<br>
|
86
88
|
<div class="layui-inline new_place_select">
|
87
89
|
<label class="layui-form-label">渠道</label>
|
88
|
-
<div class="layui-input-inline" style="
|
90
|
+
<div class="layui-input-inline" style="">
|
89
91
|
<div id="place" style="width: 190px;"></div>
|
90
92
|
</div>
|
91
93
|
</div>
|
94
|
+
<br>
|
92
95
|
<div class="layui-inline">
|
93
96
|
<label class="layui-form-label">渠道分成(万)</label>
|
94
97
|
<div class="layui-input-inline">
|
95
98
|
<input name="divide_amount" class="layui-input" value="<%= @last_follow_up&.divide_amount%>">
|
96
99
|
</div>
|
100
|
+
总额里,渠道拿到的部分。
|
97
101
|
</div>
|
98
102
|
<div class="layui-form-item">
|
99
103
|
<div class="layui-inline">
|
@@ -106,10 +110,10 @@
|
|
106
110
|
</div>
|
107
111
|
<div class="layui-form-item">
|
108
112
|
<label class="layui-form-label">指定跟进人</label>
|
109
|
-
<div class="layui-input-inline" style="
|
113
|
+
<div class="layui-input-inline" style="">
|
110
114
|
<div id="assign_follow" style="width: 512px;"></div>
|
111
115
|
</div>
|
112
|
-
<div class="layui-inline" style="padding: 9px 15px">
|
116
|
+
<div class="layui-inline" style="padding: 9px 15px;z-index: -1;">
|
113
117
|
<label class="layui-form-label" style="padding-left: 220px"></label>
|
114
118
|
指定跟进人和商机创建者,同时拥有对该商机的管理权限
|
115
119
|
</div>
|
@@ -139,7 +143,7 @@
|
|
139
143
|
</div>
|
140
144
|
<div class="layui-form-item m-t-20">
|
141
145
|
<div class="layui-input-block">
|
142
|
-
<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>
|
143
147
|
</div>
|
144
148
|
</div>
|
145
149
|
</div>
|
@@ -244,6 +248,7 @@
|
|
244
248
|
form.render();
|
245
249
|
|
246
250
|
form.on('submit(add_follow_up)', function (data) {
|
251
|
+
$(".submit-btn").addClass("layui-hide");
|
247
252
|
var assign_follow = [];
|
248
253
|
sales_list.getValue().forEach(function(d) {
|
249
254
|
assign_follow.push(d.value);
|
@@ -12,7 +12,7 @@
|
|
12
12
|
<%= select_tag "department_id",options_for_select(@school.departments.pluck(:name, :id),@follow_up.department_id)%>
|
13
13
|
</div>
|
14
14
|
</div>
|
15
|
-
<div class="layui-form-item " style="padding-left:
|
15
|
+
<div class="layui-form-item " style="padding-left: 150px">
|
16
16
|
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit_follow_up">提交
|
17
17
|
</button>
|
18
18
|
</div>
|
@@ -12,7 +12,7 @@
|
|
12
12
|
<%= select_tag "department_id",options_for_select(@school.departments.pluck(:name, :id)), { include_blank: true}%>
|
13
13
|
</div>
|
14
14
|
</div>
|
15
|
-
<div class="layui-form-item " style="padding-left:
|
15
|
+
<div class="layui-form-item " style="padding-left: 150px">
|
16
16
|
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="add_follow_up">提交
|
17
17
|
</button>
|
18
18
|
</div>
|
@@ -393,7 +393,7 @@
|
|
393
393
|
content = miniPage.getHrefContent('/missions/customers/edit_follow_record?id=' + data.id);
|
394
394
|
openWH = miniPage.getOpenWidthHeight();
|
395
395
|
editFollowIndex = layer.open({
|
396
|
-
title: '
|
396
|
+
title: '编辑跟进记录',
|
397
397
|
type: 1,
|
398
398
|
shade: 0.2,
|
399
399
|
maxmin: true,
|