educode_sales 1.10.37 → 1.10.46
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/educode_sales/application_controller.rb +13 -0
- data/app/controllers/educode_sales/contracts_controller.rb +33 -3
- data/app/controllers/educode_sales/ideas_controller.rb +17 -7
- data/app/controllers/educode_sales/money_plan_records_controller.rb +14 -7
- data/app/controllers/educode_sales/money_plans_controller.rb +5 -1
- data/app/controllers/educode_sales/plans_controller.rb +14 -0
- data/app/controllers/educode_sales/sale_trends_controller.rb +82 -9
- data/app/controllers/educode_sales/teachers_controller.rb +7 -2
- data/app/helpers/educode_sales/sale_trends_helper.rb +410 -0
- data/app/views/educode_sales/businesses/index.html.erb +2 -2
- data/app/views/educode_sales/contracts/_list.html.erb +26 -2
- data/app/views/educode_sales/contracts/index.json.jbuilder +3 -1
- data/app/views/educode_sales/ideas/_index.html.erb +23 -2
- data/app/views/educode_sales/ideas/index.json.jbuilder +1 -1
- data/app/views/educode_sales/ideas/new.html.erb +11 -6
- data/app/views/educode_sales/money_plan_records/_index.html.erb +20 -7
- data/app/views/educode_sales/money_plan_records/index.json.jbuilder +3 -1
- data/app/views/educode_sales/money_plans/_index.html.erb +56 -42
- data/app/views/educode_sales/money_plans/index.json.jbuilder +3 -1
- data/app/views/educode_sales/plans/_target_track.html.erb +178 -0
- data/app/views/educode_sales/plans/index.html.erb +5 -0
- data/app/views/educode_sales/plans/target_track.js.erb +1 -0
- data/app/views/educode_sales/sale_trends/_return_money_forecast.html.erb +176 -0
- data/app/views/educode_sales/sale_trends/return_money_forecast.js.erb +1 -0
- data/app/views/educode_sales/sale_trends/trends.html.erb +6 -0
- data/app/views/educode_sales/teachers/_index.html.erb +21 -9
- data/config/routes.rb +2 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +10 -7
- data/app/assets/images/educode_sales/indexlogo.png +0 -0
@@ -1,50 +1,52 @@
|
|
1
1
|
<%= Gon::Base.render_data %>
|
2
2
|
<div style="margin: 10px 10px 10px 10px" id="money_plan_list">
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
3
|
+
<form class="layui-form layui-form-pane" lay-filter="search_plans">
|
4
|
+
<div class="layui-form-item">
|
5
|
+
<div class="layui-inline">
|
6
|
+
<label class="layui-form-label">销售经理</label>
|
7
|
+
<div class="layui-input-inline">
|
8
|
+
<div id="plan_staff_manages" style="width: 190px;"></div>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
<div class="layui-inline">
|
12
|
+
<label class="layui-form-label">商机名称</label>
|
13
|
+
<div class="layui-input-inline">
|
14
|
+
<input type="text" name="business" class="layui-input">
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<div class="layui-inline">
|
18
|
+
<label class="layui-form-label">客户名称</label>
|
19
|
+
<div class="layui-input-inline">
|
20
|
+
<input type="text" name="school" class="layui-input">
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<div class="layui-inline">
|
24
|
+
<label class="layui-form-label">客户类型</label>
|
25
|
+
<div class="layui-input-inline">
|
26
|
+
<%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), {include_blank: true} %>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
<div class="layui-inline">
|
30
|
+
<label class="layui-form-label" style="width: 120px">计划回款时间</label>
|
31
|
+
<div class="layui-input-inline">
|
32
|
+
<input type="text" name="date_at" class="layui-input" id="date">
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
<div class="layui-inline">
|
36
|
+
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
|
37
37
|
</button>
|
38
|
-
|
38
|
+
<button type="submit" class="layui-btn layui-btn-primary" id="search_bt" lay-submit lay-filter="search_teachers">搜 索
|
39
39
|
</button>
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
</div>
|
41
|
+
</div>
|
42
|
+
</form>
|
43
43
|
</div>
|
44
44
|
<script type="text/html" id="toolbar_money_plan">
|
45
|
+
<span class="table-label">回款计划列表</span>
|
45
46
|
<% if can? :create, EducodeSales::MoneyPlan %>
|
46
47
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" style="margin-left: 20px;" lay-event="addMoney">添加回款计划</button>
|
47
|
-
|
48
|
+
<% end %>
|
49
|
+
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="export">导出</button>
|
48
50
|
</script>
|
49
51
|
|
50
52
|
<table class="layui-hide" id="money_plan_table" lay-filter="money_plan_table"></table>
|
@@ -82,15 +84,18 @@
|
|
82
84
|
|
83
85
|
var staff_manages_list = xmSelect.render({
|
84
86
|
el: '#plan_staff_manages',
|
87
|
+
name: 'plan_staff_manages',
|
85
88
|
data: gon.staffs,
|
86
89
|
filterable: true,
|
87
90
|
radio: true,
|
88
|
-
})
|
89
|
-
|
91
|
+
});
|
92
|
+
|
93
|
+
var money_plan_table = table.render({
|
90
94
|
elem: '#money_plan_table',
|
91
95
|
url: '/missions/money_plans',
|
92
96
|
toolbar: '#toolbar_money_plan',
|
93
97
|
defaultToolbar: ['filter'],
|
98
|
+
title: '回款计划列表',
|
94
99
|
initSort: {
|
95
100
|
field: 'date_at',
|
96
101
|
type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
|
@@ -245,8 +250,17 @@
|
|
245
250
|
$(window).on("resize", function() {
|
246
251
|
layer.full(sindex);
|
247
252
|
});
|
253
|
+
}else if (obj.event === 'export') {
|
254
|
+
layer.load(0, {});
|
255
|
+
var data = form.val("search_plans");
|
256
|
+
data.staff_manages = staff_manages_list.getValue('valueStr');
|
257
|
+
request.authGet("missions/money_plans?type='export'"+ $.param({q: data}), {}, function (res) {
|
258
|
+
data = res.data;
|
259
|
+
table.exportFile(money_plan_table.config.id, data, 'xls');
|
260
|
+
layer.closeAll('loading');
|
261
|
+
})
|
248
262
|
}
|
249
|
-
})
|
263
|
+
});
|
250
264
|
|
251
265
|
table.on('tool(money_plan_table)', function(obj) {
|
252
266
|
var data = obj.data;
|
@@ -0,0 +1,178 @@
|
|
1
|
+
<%= Gon::Base.render_data %>
|
2
|
+
<div id="target_track_wraper">
|
3
|
+
<div class="layuimini-main min-height-table" id="monthly_table_wraper">
|
4
|
+
<form class="layui-form layui-form-pane" lay-filter="assessment_progress_form">
|
5
|
+
<div class="layui-form-item">
|
6
|
+
<div class="layui-inline">
|
7
|
+
<label class="layui-form-label">人员</label>
|
8
|
+
<div class="layui-input-inline large-select">
|
9
|
+
<%= select_tag "staff_id", options_for_select(@staffs), { id: 'weekly_staff_id', include_blank: true} %>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
<div class="layui-inline">
|
13
|
+
<label class="layui-form-label">年度</label>
|
14
|
+
<div class="layui-input-inline">
|
15
|
+
<input type="text" class="layui-input" autocomplete="off" name="assessment_year" value="<%= Time.now.year %>" id="assessment_year">
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
<div class="layui-inline">
|
19
|
+
<label class="layui-form-label">客户类型</label>
|
20
|
+
<div class="layui-input-inline">
|
21
|
+
<div id="property" style="width: 190px;"></div>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
<div class="layui-inline">
|
25
|
+
<label class="layui-form-label">目标类别</label>
|
26
|
+
<div class="layui-input-inline">
|
27
|
+
<div id="clazz" style="width: 190px;"></div>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
<div class="layui-inline">
|
31
|
+
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="progress_resert_btn">重置
|
32
|
+
</button>
|
33
|
+
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="progress_search_btn">检索
|
34
|
+
</button>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
</form>
|
38
|
+
<table class="layui-tab" id="finished_table" lay-filter="progressTable"></table>
|
39
|
+
</div>
|
40
|
+
<script type="text/html" id="progress_Toolbar">
|
41
|
+
<div class="layui-btn-container">
|
42
|
+
<button class="layui-btn layui-btn-default layui-btn-sm data-add-btn pull-right" lay-event="add"> 导出</button>
|
43
|
+
<button class="layui-btn layui-btn-primary layui-btn-sm data-add-btn pull-right" lay-event="add"> 人员显示</button>
|
44
|
+
<button class="layui-btn layui-btn-primary layui-btn-sm data-add-btn pull-right" lay-event="add"> 分类显示</button>
|
45
|
+
</div>
|
46
|
+
</script>
|
47
|
+
|
48
|
+
<script>
|
49
|
+
layui.use(['form', 'table', 'miniPage', 'element', 'rate', 'laydate', 'request', 'xmSelect'], function () {
|
50
|
+
|
51
|
+
var $ = layui.jquery,
|
52
|
+
form = layui.form,
|
53
|
+
laydate = layui.laydate,
|
54
|
+
request = layui.request,
|
55
|
+
table = layui.table,
|
56
|
+
rate = layui.rate,
|
57
|
+
xmSelect = layui.xmSelect,
|
58
|
+
miniPage = layui.miniPage,
|
59
|
+
dropdown = layui.dropdown;
|
60
|
+
|
61
|
+
|
62
|
+
laydate.render({
|
63
|
+
elem: '#assessment_year',
|
64
|
+
type: 'year'
|
65
|
+
});
|
66
|
+
|
67
|
+
var property_list = xmSelect.render({
|
68
|
+
el: '#property',
|
69
|
+
data: gon.school_tags
|
70
|
+
})
|
71
|
+
|
72
|
+
var clazz = xmSelect.render({
|
73
|
+
el: '#clazz',
|
74
|
+
data: [{value: '中标', name: '中标'}, {value: '回款', name: '回款'}, {value: '商机', name: '商机'}]
|
75
|
+
})
|
76
|
+
|
77
|
+
|
78
|
+
var progress_table = table.render({
|
79
|
+
elem: '#finished_table'
|
80
|
+
,toolbar: '#progress_Toolbar'
|
81
|
+
,totalRow:true
|
82
|
+
,title: "绩效考核指标完成情况" // 目前发现的作用(导出文件的文件名)
|
83
|
+
,defaultToolbar: ['filter']
|
84
|
+
,cols:[
|
85
|
+
[ //标题栏
|
86
|
+
{field: 'id', title: '序号', width: 120, rowspan: 2, colspan: 9},
|
87
|
+
{field: 'name', title: '姓名', width: 120, rowspan: 2, colspan: 9},
|
88
|
+
{field: 'assessment', title: '类别', width: 120, rowspan: 2},
|
89
|
+
,{field: 'year', align: 'center', title: '年度目标', width: 100, rowspan: 2}
|
90
|
+
,{align: 'center', title: '客户类型', width: 120,rowspan: 2}
|
91
|
+
,{align: 'center', title: '分项目标', width: 120, rowspan: 2}
|
92
|
+
,{field: 'name', title: '年度计划', width: 120, rowspan: 2}
|
93
|
+
,{field: 'name', title: '年度完成', width: 120, rowspan: 2}
|
94
|
+
|
95
|
+
,{align: 'center', title: '1月', colspan: 3}
|
96
|
+
,{align: 'center', title: '2月', colspan: 3}
|
97
|
+
,{align: 'center', title: '3月', colspan: 3}
|
98
|
+
,{align: 'center', title: '4月', colspan: 3}
|
99
|
+
,{align: 'center', title: '5月', colspan: 3}
|
100
|
+
,{align: 'center', title: '6月', colspan: 3}
|
101
|
+
,{align: 'center', title: '7月', colspan: 3}
|
102
|
+
,{align: 'center', title: '8月', colspan: 3}
|
103
|
+
,{align: 'center', title: '9月', colspan: 3}
|
104
|
+
,{align: 'center', title: '10月', colspan: 3}
|
105
|
+
,{align: 'center', title: '11月', colspan: 3}
|
106
|
+
,{align: 'center', title: '12月', colspan: 3}
|
107
|
+
],
|
108
|
+
[
|
109
|
+
{field: 'target_1', title: '目标', width: 100, totalRow:true}
|
110
|
+
,{field: 'plan_1', title: '计划', width: 100, totalRow:true}
|
111
|
+
,{field: 'finish_1', title: '完成', width: 100, totalRow:true}
|
112
|
+
|
113
|
+
,{field: 'target_2', title: '目标', width: 100, totalRow:true}
|
114
|
+
,{field: 'plan_2', title: '计划', width: 100, totalRow:true}
|
115
|
+
,{field: 'finish_2', title: '完成', width: 100, totalRow:true}
|
116
|
+
|
117
|
+
,{field: 'target_3', title: '目标', width: 100, totalRow:true}
|
118
|
+
,{field: 'plan_3', title: '计划', width: 100, totalRow:true}
|
119
|
+
,{field: 'finish_3', title: '完成', width: 100, totalRow:true}
|
120
|
+
|
121
|
+
,{field: 'target_4', title: '目标', width: 100, totalRow:true}
|
122
|
+
,{field: 'plan_4', title: '计划', width: 100, totalRow:true}
|
123
|
+
,{field: 'finish_4', title: '完成', width: 100, totalRow:true}
|
124
|
+
|
125
|
+
,{field: 'target_5', title: '目标', width: 100, totalRow:true}
|
126
|
+
,{field: 'plan_5', title: '计划', width: 100, totalRow:true}
|
127
|
+
,{field: 'finish_5', title: '完成', width: 100, totalRow:true}
|
128
|
+
|
129
|
+
,{field: 'target_6', title: '目标', width: 100, totalRow:true}
|
130
|
+
,{field: 'plan_6', title: '计划', width: 100, totalRow:true}
|
131
|
+
,{field: 'finish_6', title: '完成', width: 100, totalRow:true}
|
132
|
+
|
133
|
+
,{field: 'target_7', title: '目标', width: 100, totalRow:true}
|
134
|
+
,{field: 'plan_7', title: '计划', width: 100, totalRow:true}
|
135
|
+
,{field: 'finish_7', title: '完成', width: 100, totalRow:true}
|
136
|
+
|
137
|
+
,{field: 'target_8', title: '目标', width: 100, totalRow:true}
|
138
|
+
,{field: 'plan_8', title: '计划', width: 100, totalRow:true}
|
139
|
+
,{field: 'finish_8', title: '完成', width: 100, totalRow:true}
|
140
|
+
|
141
|
+
,{field: 'target_9', title: '目标', width: 100, totalRow:true}
|
142
|
+
,{field: 'plan_9', title: '计划', width: 100, totalRow:true}
|
143
|
+
,{field: 'finish_9', title: '完成', width: 100, totalRow:true}
|
144
|
+
|
145
|
+
,{field: 'target_10', title: '目标', width: 100, totalRow:true}
|
146
|
+
,{field: 'plan_10', title: '计划', width: 100, totalRow:true}
|
147
|
+
,{field: 'finish_10', title: '完成', width: 100, totalRow:true}
|
148
|
+
|
149
|
+
,{field: 'target_11', title: '目标', width: 100, totalRow:true}
|
150
|
+
,{field: 'plan_11', title: '计划', width: 100, totalRow:true}
|
151
|
+
,{field: 'finish_11', title: '完成', width: 100, totalRow:true}
|
152
|
+
|
153
|
+
,{field: 'target_12', title: '目标', width: 100, totalRow:true}
|
154
|
+
,{field: 'plan_12', title: '计划', width: 100, totalRow:true}
|
155
|
+
,{field: 'finish_12', title: '完成', width: 100, totalRow:true}
|
156
|
+
|
157
|
+
]]
|
158
|
+
});
|
159
|
+
loadFinishTable(form.val('assessment_progress_form'))
|
160
|
+
|
161
|
+
form.on('submit(progress_search_btn)', function (data) {
|
162
|
+
var search = data.field;
|
163
|
+
search.assessment_id = assement_list.getValue('valueStr').split(",");
|
164
|
+
loadFinishTable(search);
|
165
|
+
return false;
|
166
|
+
})
|
167
|
+
|
168
|
+
function loadFinishTable(search) {
|
169
|
+
table.reload('finished_table', {
|
170
|
+
where: search,
|
171
|
+
url: '/missions/assessments/finished'
|
172
|
+
});
|
173
|
+
}
|
174
|
+
|
175
|
+
})
|
176
|
+
|
177
|
+
</script>
|
178
|
+
</div>
|
@@ -5,6 +5,7 @@
|
|
5
5
|
<li data="month">月计划</li>
|
6
6
|
<li data="monthly">月报</li>
|
7
7
|
<li data="year">年计划</li>
|
8
|
+
<!-- <li data="target_track">年度执行</li> -->
|
8
9
|
</ul>
|
9
10
|
<div class="layui-tab-content">
|
10
11
|
<div class="layui-tab-item layui-show">
|
@@ -22,6 +23,8 @@
|
|
22
23
|
<div class="layui-tab-item">
|
23
24
|
<div id="year_plan_tab_wraper"></div>
|
24
25
|
</div>
|
26
|
+
<div class="layui-tab-item" id="target_track_tab">
|
27
|
+
</div>
|
25
28
|
</div>
|
26
29
|
</div>
|
27
30
|
|
@@ -70,6 +73,8 @@
|
|
70
73
|
loadPage('/missions/plans/monthly')
|
71
74
|
} else if (data.index == 4 && $("#year_table_wraper").length == 0) {
|
72
75
|
loadPage('/missions/plans/year_plan')
|
76
|
+
} else if (data.index == 5 && $("#target_track_wraper").length == 0) {
|
77
|
+
loadPage('/missions/plans/target_track')
|
73
78
|
}
|
74
79
|
});
|
75
80
|
|
@@ -0,0 +1 @@
|
|
1
|
+
$("#target_track_tab").html("<%= j render 'target_track' %>");
|
@@ -0,0 +1,176 @@
|
|
1
|
+
<div id="tab_9">
|
2
|
+
<div class="" style="padding-right: 50px">
|
3
|
+
<div style="margin: 10px 10px 10px 10px">
|
4
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
5
|
+
<div class="layui-form-item">
|
6
|
+
<div class="layui-inline m-t-10">
|
7
|
+
<label class="layui-form-label">销售人员</label>
|
8
|
+
<div class="layui-input-inline">
|
9
|
+
<% common = EducodeSales::Common.find_by(clazz: 'staff_type', name: '销售')
|
10
|
+
staffs = EducodeSales::Staff.where(job_type: common.id) %>
|
11
|
+
<%= select_tag "staff_id", options_for_select(staffs.includes(:user).map { |d| [d.user.real_name, d.id] }, params[:staff_id]), {'lay-filter': 'staff_id', include_blank: true} %>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
<div class="layui-inline m-t-10">
|
15
|
+
<label class="layui-form-label">视图</label>
|
16
|
+
<div class="layui-input-inline">
|
17
|
+
<%= select_tag "forecast_count_range", options_for_select([['按周', 'week'], ['按月', 'month'], ['按季', 'quarter'], ['按年', 'year']], params[:forecast_count_range] || "month"), {'lay-filter': 'return_forecast_count'} %>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
<div class="layui-inline m-t-10">
|
21
|
+
<label class="layui-form-label">时间范围</label>
|
22
|
+
<div class="layui-input-inline">
|
23
|
+
<input type="text" class="layui-input forecast_month " id="return_forecast_date_month" name="forecast_date_month" placeholder=" - " value="<%= params[:forecast_date_month].present? ? params[:forecast_date_month] : Time.now.year.to_s + "-01" + " - " + Time.now.strftime("%Y-%m") %>" autocomplete="off">
|
24
|
+
<input type="text" class="layui-input forecast_year layui-hide" id="return_forecast_date_year" name="forecast_date_year" placeholder=" - " value="<%= params[:forecast_date_year] %>" autocomplete="off">
|
25
|
+
<input type="text" class="layui-input forecast_day layui-hide" id="return_forecast_date_day" name="forecast_date_day" placeholder=" - " value="<%= params[:forecast_date_day] %>" autocomplete="off">
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
<div class="layui-inline m-t-10">
|
29
|
+
<label class="layui-form-label">客户类型</label>
|
30
|
+
<div class="layui-input-inline">
|
31
|
+
<%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id), params[:property]), {include_blank: true} %>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
<div class="layui-inline m-t-10">
|
35
|
+
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_search">重 置</button>
|
36
|
+
<button type="button" class="forecast_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_sales">确 定</button>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
</form>
|
40
|
+
</div>
|
41
|
+
<canvas id="return_forecast_myChart2" width="960" height="350"></canvas>
|
42
|
+
<canvas id="return_forecast_myChart2_1" width="960" height="350" style="margin-top: 30px;"></canvas>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<script>
|
47
|
+
layui.use(['form', 'jquery', 'request', 'laydate', 'element'], function () {
|
48
|
+
var $ = layui.jquery,
|
49
|
+
form = layui.form,
|
50
|
+
request = layui.request,
|
51
|
+
laydate = layui.laydate;
|
52
|
+
|
53
|
+
form.render();
|
54
|
+
|
55
|
+
var opt = {
|
56
|
+
events: false,
|
57
|
+
tooltips: {
|
58
|
+
enabled: false
|
59
|
+
},
|
60
|
+
layout: {
|
61
|
+
padding: {
|
62
|
+
left: 20,
|
63
|
+
right: 20,
|
64
|
+
top: 20,
|
65
|
+
bottom: 0
|
66
|
+
}
|
67
|
+
},
|
68
|
+
hover: {
|
69
|
+
animationDuration: 1
|
70
|
+
},
|
71
|
+
animation: {
|
72
|
+
duration: 1,
|
73
|
+
onComplete: function () {
|
74
|
+
var chartInstance = this.chart, ctx = chartInstance.ctx;
|
75
|
+
ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
|
76
|
+
ctx.textAlign = 'center';
|
77
|
+
ctx.textBaseline = 'bottom';
|
78
|
+
|
79
|
+
this.data.datasets.forEach(function (dataset, i) {
|
80
|
+
ctx.fillStyle = "#444";
|
81
|
+
var meta = chartInstance.controller.getDatasetMeta(i);
|
82
|
+
meta.data.forEach(function (bar, index) {
|
83
|
+
var data = dataset.data[index];
|
84
|
+
ctx.fillText(data, bar._model.x, bar._model.y - 5);
|
85
|
+
});
|
86
|
+
});
|
87
|
+
}
|
88
|
+
}
|
89
|
+
};
|
90
|
+
|
91
|
+
laydate.render({
|
92
|
+
type: 'year',
|
93
|
+
elem: '#return_forecast_date_year',
|
94
|
+
range: true
|
95
|
+
});
|
96
|
+
|
97
|
+
laydate.render({
|
98
|
+
elem: '#return_forecast_date_day',
|
99
|
+
range: true
|
100
|
+
});
|
101
|
+
|
102
|
+
laydate.render({
|
103
|
+
type: 'month',
|
104
|
+
elem: '#return_forecast_date_month',
|
105
|
+
range: true
|
106
|
+
});
|
107
|
+
|
108
|
+
var forecast_type = "month";
|
109
|
+
if (forecast_type === "month") {
|
110
|
+
$(".forecast_year").addClass('layui-hide');
|
111
|
+
$(".forecast_day").addClass('layui-hide');
|
112
|
+
$(".forecast_month").removeClass('layui-hide')
|
113
|
+
} else if (forecast_type === "year" || forecast_type === "quarter") {
|
114
|
+
$(".forecast_month").addClass('layui-hide');
|
115
|
+
$(".forecast_year").removeClass('layui-hide');
|
116
|
+
$(".forecast_day").addClass('layui-hide')
|
117
|
+
} else {
|
118
|
+
$(".forecast_day").removeClass('layui-hide');
|
119
|
+
$(".forecast_month").addClass('layui-hide');
|
120
|
+
$(".forecast_year").addClass('layui-hide')
|
121
|
+
}
|
122
|
+
|
123
|
+
form.on('select(return_forecast_count)', function (data) {
|
124
|
+
const value = data.value;
|
125
|
+
if (value === "month") {
|
126
|
+
$(".forecast_year").addClass('layui-hide');
|
127
|
+
$(".forecast_day").addClass('layui-hide');
|
128
|
+
$(".forecast_month").removeClass('layui-hide')
|
129
|
+
} else if (value === "year" || value === "quarter") {
|
130
|
+
$(".forecast_month").addClass('layui-hide');
|
131
|
+
$(".forecast_year").removeClass('layui-hide');
|
132
|
+
$(".forecast_day").addClass('layui-hide')
|
133
|
+
} else {
|
134
|
+
$(".forecast_day").removeClass('layui-hide');
|
135
|
+
$(".forecast_month").addClass('layui-hide');
|
136
|
+
$(".forecast_year").addClass('layui-hide')
|
137
|
+
}
|
138
|
+
});
|
139
|
+
|
140
|
+
//重置按钮
|
141
|
+
form.on('submit(reset_search)', function () {
|
142
|
+
form.val('search_form', {
|
143
|
+
staff_id: "",
|
144
|
+
property: ""
|
145
|
+
});
|
146
|
+
return false;
|
147
|
+
});
|
148
|
+
|
149
|
+
var ctx = document.getElementById('return_forecast_myChart2');
|
150
|
+
var return_forecast_myChart2 = new Chart(ctx, {
|
151
|
+
type: 'bar',
|
152
|
+
data: <%=raw @return_forecast_count_data_0.to_json %>,
|
153
|
+
options: opt
|
154
|
+
});
|
155
|
+
|
156
|
+
var ctx01 = document.getElementById('return_forecast_myChart2_1');
|
157
|
+
var return_forecast_myChart2_1 = new Chart(ctx01, {
|
158
|
+
type: 'bar',
|
159
|
+
data: <%=raw @return_forecast_count_data_1.to_json %>,
|
160
|
+
options: opt
|
161
|
+
});
|
162
|
+
|
163
|
+
form.on("submit(search_sales)", function (data) {
|
164
|
+
var layer_index = layer.load(0, {shade: [0.1, '#fff']});
|
165
|
+
Rails.ajax({
|
166
|
+
url: '/missions/sale_trends/return_money_forecast',
|
167
|
+
type: 'GET',
|
168
|
+
data: $.param(data.field, true),
|
169
|
+
dataType: "script",
|
170
|
+
success: function (res) {
|
171
|
+
layer.close(layer_index);
|
172
|
+
}
|
173
|
+
});
|
174
|
+
})
|
175
|
+
})
|
176
|
+
</script>
|
@@ -0,0 +1 @@
|
|
1
|
+
$("#page_9").html("<%= j render 'return_money_forecast' %>");
|
@@ -8,6 +8,7 @@
|
|
8
8
|
<li class="">中标预测图</li>
|
9
9
|
<li class="">用户分析</li>
|
10
10
|
<li class="">拜访分析</li>
|
11
|
+
<li class="">回款预测图</li>
|
11
12
|
</ul>
|
12
13
|
<div class="layui-tab-content">
|
13
14
|
<div class="layui-tab-item layui-show">
|
@@ -242,6 +243,9 @@
|
|
242
243
|
<div class="layui-tab-item">
|
243
244
|
<div id="page_8"></div>
|
244
245
|
</div>
|
246
|
+
<div class="layui-tab-item">
|
247
|
+
<div id="page_9"></div>
|
248
|
+
</div>
|
245
249
|
</div>
|
246
250
|
</div>
|
247
251
|
|
@@ -270,6 +274,8 @@
|
|
270
274
|
loadPage('/missions/sale_trends/user_stat')
|
271
275
|
} else if (data.index == 7 && $("#tab_8").length == 0) {
|
272
276
|
loadPage('/missions/sale_trends/visit_analysis')
|
277
|
+
} else if (data.index == 8 && $("#tab_9").length == 0) {
|
278
|
+
loadPage('/missions/sale_trends/return_money_forecast')
|
273
279
|
}
|
274
280
|
});
|
275
281
|
|
@@ -111,12 +111,14 @@
|
|
111
111
|
<% if can? :create, EducodeSales::Teacher %>
|
112
112
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="import">导入数据</button>
|
113
113
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add">添加老师</button>
|
114
|
-
|
115
|
-
|
114
|
+
<% end %>
|
115
|
+
<% if can? :export_teacher_list, EducodeSales::Teacher %>
|
116
|
+
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="export">导出</button>
|
117
|
+
<% end %>
|
116
118
|
</div>
|
117
119
|
</script>
|
118
120
|
<div class="">
|
119
|
-
<table class="layui-hide" id="teachers_table" style="min-height: 300px;" lay-filter="teachers_table"></table>
|
121
|
+
<table class="layui-hide" id="teachers_table" style="min-height: 300px;" lay-filter="teachers_table"></table>
|
120
122
|
</div>
|
121
123
|
<script type="text/html" id="currentTableBar">
|
122
124
|
<% if can? :create, EducodeSales::TeacherFollow %>
|
@@ -295,7 +297,8 @@
|
|
295
297
|
field: 'followup_at',
|
296
298
|
width: 180,
|
297
299
|
title: '最新跟进时间',
|
298
|
-
hide: gon.filter.followup_at
|
300
|
+
hide: gon.filter.followup_at,
|
301
|
+
sort: true
|
299
302
|
},
|
300
303
|
{
|
301
304
|
field: 'latest_time',
|
@@ -401,16 +404,16 @@
|
|
401
404
|
]];
|
402
405
|
|
403
406
|
table = layui.table;
|
404
|
-
table.render({
|
407
|
+
var teachers_table = table.render({
|
405
408
|
elem: '#teachers_table',
|
406
409
|
url: '/missions/teachers',
|
407
410
|
where: {q: form.val('search_form')},
|
408
411
|
toolbar: '#toolbarDemo',
|
409
|
-
totalRow:true,
|
412
|
+
totalRow: true,
|
410
413
|
defaultToolbar: ['filter'],
|
411
414
|
cols: cols_table,
|
412
415
|
limit: 20,
|
413
|
-
|
416
|
+
limits: [10, 15, 20, 30, 40, 50, 60, 70, 80, 90],
|
414
417
|
page: true,
|
415
418
|
done: function (res) {
|
416
419
|
drowpdwonRender()
|
@@ -418,11 +421,11 @@
|
|
418
421
|
});
|
419
422
|
var dropmenu = gon.menus;
|
420
423
|
|
421
|
-
drowpdwonRender = function() {
|
424
|
+
drowpdwonRender = function () {
|
422
425
|
dropdown.render({
|
423
426
|
elem: '.more-btn',
|
424
427
|
data: dropmenu,
|
425
|
-
click: function(data, othis){
|
428
|
+
click: function (data, othis) {
|
426
429
|
var elem = $(this.elem);
|
427
430
|
id = elem.data('id');
|
428
431
|
switch (data.event) {
|
@@ -640,6 +643,15 @@
|
|
640
643
|
$(window).on("resize", function () {
|
641
644
|
layer.full(index);
|
642
645
|
});
|
646
|
+
} else if (obj.event === 'export') {
|
647
|
+
layer.load(0, {});
|
648
|
+
var data = form.val('search_teachers');
|
649
|
+
console.log(data)
|
650
|
+
request.authGet("missions/teachers?type=export&" + $.param({q: data}), {}, function (res) {
|
651
|
+
data = res.data;
|
652
|
+
table.exportFile(teachers_table.config.id, data, 'xls')
|
653
|
+
layer.closeAll('loading');
|
654
|
+
})
|
643
655
|
}
|
644
656
|
});
|
645
657
|
|
data/config/routes.rb
CHANGED
@@ -174,6 +174,7 @@ EducodeSales::Engine.routes.draw do
|
|
174
174
|
get :goal_forecast
|
175
175
|
get :user_stat
|
176
176
|
get :visit_analysis
|
177
|
+
get :return_money_forecast
|
177
178
|
end
|
178
179
|
end
|
179
180
|
|
@@ -266,6 +267,7 @@ EducodeSales::Engine.routes.draw do
|
|
266
267
|
get :month_plan
|
267
268
|
get :monthly
|
268
269
|
get :year_plan
|
270
|
+
get :target_track
|
269
271
|
end
|
270
272
|
member do
|
271
273
|
delete :delete_business_info
|