educode_sales 0.5.1 → 0.5.2
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/businesses_controller.rb +4 -1
- data/app/controllers/educode_sales/follow_ups_controller.rb +2 -1
- data/app/controllers/educode_sales/operation_plans_controller.rb +22 -2
- data/app/controllers/educode_sales/operation_reports_controller.rb +33 -3
- data/app/controllers/educode_sales/plans_controller.rb +22 -2
- data/app/controllers/educode_sales/roles_controller.rb +5 -0
- data/app/controllers/educode_sales/sale_reports_controller.rb +33 -3
- data/app/controllers/educode_sales/sale_trends_controller.rb +171 -0
- data/app/controllers/educode_sales/sales_controller.rb +4 -0
- data/app/controllers/educode_sales/upload_files_controller.rb +10 -3
- data/app/models/educode_sales/common.rb +2 -1
- data/app/views/educode_sales/businesses/file.html.erb +5 -4
- data/app/views/educode_sales/businesses/index.html.erb +6 -1
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +1 -1
- data/app/views/educode_sales/operation_plans/index.html.erb +6 -1
- data/app/views/educode_sales/operation_reports/audit.html.erb +5 -3
- data/app/views/educode_sales/operation_reports/show.html.erb +4 -7
- data/app/views/educode_sales/places/index.html.erb +6 -1
- data/app/views/educode_sales/places/index.json.jbuilder +11 -1
- data/app/views/educode_sales/plans/index.html.erb +6 -1
- data/app/views/educode_sales/roles/index.html.erb +19 -1
- data/app/views/educode_sales/roles/rename.html.erb +50 -0
- data/app/views/educode_sales/sale_reports/audit.html.erb +5 -3
- data/app/views/educode_sales/sale_reports/show.html.erb +3 -6
- data/app/views/educode_sales/sale_trends/trends.html.erb +222 -2
- data/app/views/educode_sales/sale_trends/trends.json.jbuilder +14 -0
- data/app/views/educode_sales/sales/index.html.erb +72 -6
- data/app/views/educode_sales/sales/index.json.jbuilder +35 -1
- data/app/views/educode_sales/sales/operations.json.jbuilder +11 -1
- data/app/views/educode_sales/staffs/index.html.erb +6 -1
- data/app/views/educode_sales/staffs/index.json.jbuilder +11 -1
- data/app/views/educode_sales/teachers/add_keys.html.erb +1 -1
- data/app/views/educode_sales/teachers/index.html.erb +6 -1
- data/app/views/educode_sales/teachers/new.html.erb +1 -0
- data/config/routes.rb +3 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +4 -2
@@ -1,8 +1,18 @@
|
|
1
|
+
area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
|
1
2
|
json.data do
|
2
3
|
json.array! @places do |d|
|
3
4
|
json.id d.id
|
4
5
|
json.name d.name
|
5
|
-
json.area_id d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
6
|
+
# json.area_id d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
7
|
+
if d.areas.present?
|
8
|
+
if d.areas.ids.sort.to_s == area_ids
|
9
|
+
json.area_id '全国'
|
10
|
+
else
|
11
|
+
json.area_id d.areas.pluck(:name).join("、")
|
12
|
+
end
|
13
|
+
else
|
14
|
+
json.area_id ''
|
15
|
+
end
|
6
16
|
json.businesses_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
|
7
17
|
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)
|
8
18
|
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)
|
@@ -8,6 +8,7 @@
|
|
8
8
|
</div>
|
9
9
|
</script>
|
10
10
|
<script type="text/html" id="role_bar">
|
11
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="rename">重命名</a>
|
11
12
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
|
12
13
|
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
|
13
14
|
</script>
|
@@ -35,7 +36,6 @@
|
|
35
36
|
field: 'name',
|
36
37
|
title: '角色',
|
37
38
|
width: 120,
|
38
|
-
edit: 'text'
|
39
39
|
}, {
|
40
40
|
field: 'permissions',
|
41
41
|
title: '模块浏览权限',
|
@@ -124,6 +124,24 @@
|
|
124
124
|
layer.full(index);
|
125
125
|
});
|
126
126
|
return false;
|
127
|
+
}else if (obj.event === 'rename') {
|
128
|
+
id = data.id
|
129
|
+
var content = miniPage.getHrefContent('/missions/roles/rename?id='+id);
|
130
|
+
var openWH = miniPage.getOpenWidthHeight();
|
131
|
+
rename_index = layer.open({
|
132
|
+
title: '重命名',
|
133
|
+
type: 1,
|
134
|
+
shade: 0.2,
|
135
|
+
maxmin: true,
|
136
|
+
shadeClose: true,
|
137
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
138
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
139
|
+
content: content,
|
140
|
+
});
|
141
|
+
$(window).on("resize", function () {
|
142
|
+
layer.full(index);
|
143
|
+
});
|
144
|
+
return false;
|
127
145
|
} else if (obj.event === 'delete') {
|
128
146
|
layer.confirm('确定删除' + data.name, function (index) {
|
129
147
|
request.delete('missions/roles/'+ data.id, {}, function(res) {
|
@@ -0,0 +1,50 @@
|
|
1
|
+
<form class="layui-form " action="">
|
2
|
+
<div class="layui-form-item" style="padding: 25px">
|
3
|
+
<div class="layui-inline">
|
4
|
+
<label class="layui-form-label required">角色名称</label>
|
5
|
+
<div class="layui-input-block" style="line-height: 36px;">
|
6
|
+
<input type="text" name="name" id="name" required lay-verify="required" autocomplete="off"
|
7
|
+
class="layui-input" value="<%=@name %>">
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<div class="layui-inline" style="padding-left: 30px">
|
11
|
+
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="submits">提交
|
12
|
+
</button>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
</form>
|
16
|
+
|
17
|
+
|
18
|
+
<script>
|
19
|
+
|
20
|
+
layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'selectInput', 'transfer'], function () {
|
21
|
+
var form = layui.form,
|
22
|
+
layer = layui.layer,
|
23
|
+
table = layui.table,
|
24
|
+
transfer = layui.transfer,
|
25
|
+
laytpl = layui.laytpl,
|
26
|
+
request = layui.request,
|
27
|
+
$ = layui.$;
|
28
|
+
|
29
|
+
form.render();
|
30
|
+
|
31
|
+
// 当前弹出层,防止ID被覆盖
|
32
|
+
var parentIndex = layer.index;
|
33
|
+
|
34
|
+
//监听提交
|
35
|
+
form.on('submit(submits)', function (data) {
|
36
|
+
console.log(data);
|
37
|
+
request.authPut('missions/roles/' + parent.id + '/update_role/', data.field,
|
38
|
+
function(res) {
|
39
|
+
if (res.success) {
|
40
|
+
table.reload('role');
|
41
|
+
layer.close(parent.rename_index)
|
42
|
+
} else {
|
43
|
+
layer.alert(res.msg)
|
44
|
+
}
|
45
|
+
|
46
|
+
})
|
47
|
+
return false;
|
48
|
+
});
|
49
|
+
});
|
50
|
+
</script>
|
@@ -71,9 +71,11 @@
|
|
71
71
|
|
72
72
|
<br>
|
73
73
|
<div class="layui-inline m-t-10">
|
74
|
+
<% if (can? :level1_audit, EducodeSales::SaleReport) || (can? :level2_audit, EducodeSales::SaleReport) || (can? :level3_audit, EducodeSales::SaleReport) %>
|
74
75
|
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="audit_weekly_report"
|
75
76
|
style="margin-left: 18px">提交
|
76
77
|
</button>
|
78
|
+
<% end %>
|
77
79
|
</div>
|
78
80
|
</div>
|
79
81
|
</form>
|
@@ -98,7 +100,7 @@
|
|
98
100
|
rate.render({
|
99
101
|
elem: '#weekStar4',
|
100
102
|
half: true,
|
101
|
-
|
103
|
+
value: parseFloat("<%= @sale_report.level1_score || 0%>"),
|
102
104
|
length: 5,
|
103
105
|
choose: function(value){
|
104
106
|
level1_score = value
|
@@ -107,7 +109,7 @@
|
|
107
109
|
rate.render({
|
108
110
|
elem: '#weekStar5',
|
109
111
|
half: true,
|
110
|
-
|
112
|
+
value: parseFloat("<%= @sale_report.level2_score || 0%>"),
|
111
113
|
length: 5,
|
112
114
|
choose: function(value){
|
113
115
|
level2_score = value
|
@@ -116,7 +118,7 @@
|
|
116
118
|
rate.render({
|
117
119
|
elem: '#weekStar6',
|
118
120
|
half: true,
|
119
|
-
|
121
|
+
value: parseFloat("<%= @sale_report.level3_score || 0%>"),
|
120
122
|
length: 5,
|
121
123
|
choose: function(value){
|
122
124
|
level3_score = value
|
@@ -84,22 +84,19 @@
|
|
84
84
|
elem: '#weekStar4',
|
85
85
|
half: true,
|
86
86
|
readonly: true,
|
87
|
-
|
88
|
-
length: "<%= @sale_report.level1_score %>"
|
87
|
+
value: parseFloat("<%= @sale_report.level1_score || 0%>"),
|
89
88
|
})
|
90
89
|
rate.render({
|
91
90
|
elem: '#weekStar5',
|
92
91
|
half: true,
|
93
92
|
readonly: true,
|
94
|
-
|
95
|
-
length: "<%= @sale_report.level2_score %>"
|
93
|
+
value: parseFloat("<%= @sale_report.level2_score || 0%> "),
|
96
94
|
})
|
97
95
|
rate.render({
|
98
96
|
elem: '#weekStar6',
|
99
97
|
half: true,
|
100
98
|
readonly: true,
|
101
|
-
|
102
|
-
length: "<%= @sale_report.level3_score %>"
|
99
|
+
value: parseFloat("<%= @sale_report.level3_score || 0%>"),
|
103
100
|
})
|
104
101
|
|
105
102
|
table.on('tool(showWeeklyTable)', function (obj) {
|
@@ -168,12 +168,130 @@
|
|
168
168
|
</div>
|
169
169
|
</div>
|
170
170
|
</form>
|
171
|
+
<br>
|
172
|
+
<div class="layui-tab layui-tab-card" id="商机跟进数">
|
173
|
+
<ul class="layui-tab-title">
|
174
|
+
<li class="layui-this">商机跟进数</li>
|
175
|
+
</ul>
|
176
|
+
<div class="layui-tab-content" style="padding-right: 50px">
|
177
|
+
<div class="layui-tab-item layui-show " style="padding-left: 20px">
|
178
|
+
<div style="margin: 10px 10px 10px 10px">
|
179
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
180
|
+
<div class="layui-form-item">
|
181
|
+
<div class="layui-inline m-t-10">
|
182
|
+
<label class="layui-form-label">视图</label>
|
183
|
+
<div class="layui-input-inline">
|
184
|
+
<%= select_tag "follow_count_range", options_for_select([['按天','day'],['按月','month'],['按年','year']],params[:follow_count_range]), {'lay-filter': 'follow_count'}%>
|
185
|
+
</div>
|
186
|
+
</div>
|
187
|
+
<div class="layui-inline">
|
188
|
+
<label class="layui-form-label">时间范围</label>
|
189
|
+
<div class="layui-input-inline">
|
190
|
+
<input type="text" class="layui-input month layui-hide" id="date_month" name="date_month" placeholder=" - " value="<%=params[:date_month] %>" >
|
191
|
+
<input type="text" class="layui-input year layui-hide" id="date_year" name="date_year" placeholder=" - " value="<%=params[:date_year] %>">
|
192
|
+
<input type="text" class="layui-input day" id="date" name="date" placeholder=" - " value="<%=params[:date] %>">
|
193
|
+
</div>
|
194
|
+
</div>
|
195
|
+
<div class="layui-inline">
|
196
|
+
<button type="submit" id="search_bt" class=" follow_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">确定
|
197
|
+
</button>
|
198
|
+
</div>
|
199
|
+
</div>
|
200
|
+
</form>
|
201
|
+
</div>
|
202
|
+
<canvas id="myChart" width="960" height="200"></canvas>
|
203
|
+
</div>
|
204
|
+
</div>
|
205
|
+
</div>
|
206
|
+
<div class="layui-tab layui-tab-card " id="销售额分析" lay-filter="test1">
|
207
|
+
<ul class="layui-tab-title">
|
208
|
+
<li class="layui-this">销售额分析</li>
|
209
|
+
</ul>
|
210
|
+
<div class="layui-tab-content" style="padding-right: 50px">
|
211
|
+
<div class="layui-tab-item layui-show" style="padding-left: 20px">
|
212
|
+
<div style="margin: 10px 10px 10px 10px">
|
213
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
214
|
+
<div class="layui-form-item">
|
215
|
+
<div class="layui-inline m-t-10">
|
216
|
+
<label class="layui-form-label">视图</label>
|
217
|
+
<div class="layui-input-inline">
|
218
|
+
<%= select_tag "goal_count_range", options_for_select([['按月','month'],['按年','year']],params[:goal_count_range]), {'lay-filter': 'goal_count'}%>
|
219
|
+
</div>
|
220
|
+
</div>
|
221
|
+
<div class="layui-inline">
|
222
|
+
<label class="layui-form-label">时间范围</label>
|
223
|
+
<div class="layui-input-inline">
|
224
|
+
<input type="text" class="layui-input goal_month " id="goal_date_month" name="goal_date_month" placeholder=" - " value="<%=params[:goal_date_month] %>">
|
225
|
+
<input type="text" class="layui-input goal_year layui-hide" id="goal_date_year" name="goal_date_year" placeholder=" - " value="<%=params[:goal_date_year] %>">
|
226
|
+
</div>
|
227
|
+
</div>
|
228
|
+
<div class="layui-inline">
|
229
|
+
<button type="submit" id="search_bt" class="follow_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">确定
|
230
|
+
</button>
|
231
|
+
</div>
|
232
|
+
</div>
|
233
|
+
</form>
|
234
|
+
</div>
|
235
|
+
<canvas id="myChart2" width="960" height="200"></canvas>
|
236
|
+
</div>
|
237
|
+
|
238
|
+
</div>
|
239
|
+
</div>
|
240
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.css">
|
241
|
+
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.js"></script>
|
171
242
|
<script>
|
243
|
+
follow_type = "<%=@follow_count_range %>"
|
244
|
+
goal_type = "<%=@goal_count_range %>"
|
245
|
+
follow_flag = <%=params[:follow_count_range].present? %>
|
246
|
+
if(follow_flag){
|
247
|
+
window.location.href = "#商机跟进数"
|
248
|
+
}
|
249
|
+
|
250
|
+
goal_flag = <%=params[:goal_count_range].present? %>
|
251
|
+
if(goal_flag){
|
252
|
+
window.location.href = "#销售额分析"
|
253
|
+
}
|
172
254
|
layui.use(['form', 'jquery', 'request'], function () {
|
173
255
|
var $ = layui.jquery,
|
174
256
|
form = layui.form,
|
175
257
|
request = layui.request;
|
176
258
|
var year = "<%= @year %>";
|
259
|
+
var element = layui.element;
|
260
|
+
laydate = layui.laydate;
|
261
|
+
|
262
|
+
$(document).ready(function () {
|
263
|
+
$(".follow_count_bt").click(function () {
|
264
|
+
layer.msg("图表绘制中...", {
|
265
|
+
time: 0, //不自动关闭
|
266
|
+
offset:['40%','46%']
|
267
|
+
})
|
268
|
+
layer.load(0, {});
|
269
|
+
setTimeout(function () {
|
270
|
+
layer.closeAll('loading');
|
271
|
+
}, 10000);
|
272
|
+
});
|
273
|
+
});
|
274
|
+
if(follow_type == "day"){
|
275
|
+
$(".year").addClass('layui-hide')
|
276
|
+
$(".month").addClass('layui-hide')
|
277
|
+
$(".day").removeClass('layui-hide')
|
278
|
+
}else if(follow_type == "month"){
|
279
|
+
$(".year").addClass('layui-hide')
|
280
|
+
$(".month").removeClass('layui-hide')
|
281
|
+
$(".day").addClass('layui-hide')
|
282
|
+
}else {
|
283
|
+
$(".year").removeClass('layui-hide')
|
284
|
+
$(".month").addClass('layui-hide')
|
285
|
+
$(".day").addClass('layui-hide')
|
286
|
+
}
|
287
|
+
|
288
|
+
if(goal_type == "year"){
|
289
|
+
$(".goal_year").removeClass('layui-hide')
|
290
|
+
$(".goal_month").addClass('layui-hide')
|
291
|
+
}else{
|
292
|
+
$(".goal_year").addClass('layui-hide')
|
293
|
+
$(".goal_month").removeClass('layui-hide')
|
294
|
+
}
|
177
295
|
|
178
296
|
function editForm(el) {
|
179
297
|
$("#" + el + "_edit").click(function() {
|
@@ -205,18 +323,120 @@
|
|
205
323
|
})
|
206
324
|
}
|
207
325
|
|
326
|
+
// 时间选择器
|
327
|
+
laydate.render({
|
328
|
+
elem: '#date',
|
329
|
+
min: -15
|
330
|
+
,max: 15,
|
331
|
+
range: true
|
332
|
+
});
|
333
|
+
laydate.render({
|
334
|
+
type: 'week',
|
335
|
+
elem: '#date_week',
|
336
|
+
min: -90
|
337
|
+
,max: 0,
|
338
|
+
range: true
|
339
|
+
});
|
340
|
+
laydate.render({
|
341
|
+
type: 'month',
|
342
|
+
elem: '#date_month',
|
343
|
+
min: -365
|
344
|
+
,max: 0,
|
345
|
+
range: true
|
346
|
+
});
|
347
|
+
laydate.render({
|
348
|
+
type: 'year',
|
349
|
+
elem: '#date_year',
|
350
|
+
min: -3660
|
351
|
+
,max: 366,
|
352
|
+
range: true
|
353
|
+
});
|
354
|
+
laydate.render({
|
355
|
+
type: 'year',
|
356
|
+
elem: '#goal_date_year',
|
357
|
+
min: -3660
|
358
|
+
,max: 366,
|
359
|
+
range: true
|
360
|
+
});
|
361
|
+
laydate.render({
|
362
|
+
type: 'month',
|
363
|
+
elem: '#goal_date_month',
|
364
|
+
min: -365
|
365
|
+
,max: 0,
|
366
|
+
range: true
|
367
|
+
});
|
368
|
+
|
369
|
+
|
208
370
|
form.on('select(year)', function(data){
|
209
371
|
console.log(data, )
|
210
372
|
year = data.value
|
211
373
|
window.location.href = "/missions/sale_trends/trends?year=" + data.value
|
212
374
|
})
|
213
|
-
|
375
|
+
form.on('select(follow_count)', function(data){
|
376
|
+
console.log(data, )
|
377
|
+
const value = data.value;
|
378
|
+
if(value == "month"){
|
379
|
+
$(".year").addClass('layui-hide')
|
380
|
+
$(".day").addClass('layui-hide')
|
381
|
+
$(".month").removeClass('layui-hide')
|
382
|
+
}else if(value == "year"){
|
383
|
+
$(".month").addClass('layui-hide')
|
384
|
+
$(".day").addClass('layui-hide')
|
385
|
+
$(".year").removeClass('layui-hide')
|
386
|
+
}else {
|
387
|
+
$(".month").addClass('layui-hide')
|
388
|
+
$(".year").addClass('layui-hide')
|
389
|
+
$(".day").removeClass('layui-hide')
|
390
|
+
}
|
391
|
+
})
|
392
|
+
|
393
|
+
form.on('select(goal_count)', function(data){
|
394
|
+
console.log(data, )
|
395
|
+
const value = data.value;
|
396
|
+
if(value == "month"){
|
397
|
+
$(".goal_year").addClass('layui-hide')
|
398
|
+
$(".goal_month").removeClass('layui-hide')
|
399
|
+
}else {
|
400
|
+
$(".goal_month").addClass('layui-hide')
|
401
|
+
$(".goal_year").removeClass('layui-hide')
|
402
|
+
}
|
403
|
+
})
|
404
|
+
|
214
405
|
editForm("chance_money");
|
215
406
|
editForm("ballot_money");
|
216
407
|
editForm("sign_money");
|
217
408
|
editForm("returned_money");
|
218
409
|
|
219
|
-
|
410
|
+
element.on('tab(test1)', function(){
|
411
|
+
window.location.href = "#销售额分析"
|
412
|
+
});
|
220
413
|
|
414
|
+
var ctx = document.getElementById('myChart');
|
415
|
+
var myChart = new Chart(ctx, {
|
416
|
+
type: 'line',
|
417
|
+
data: <%=raw @follow_count_data.to_json %>,
|
418
|
+
options: {
|
419
|
+
elements: {
|
420
|
+
line: {
|
421
|
+
tension: 0
|
422
|
+
}
|
423
|
+
}
|
424
|
+
}
|
425
|
+
});
|
426
|
+
|
427
|
+
var ctx = document.getElementById('myChart2');
|
428
|
+
var myChart2 = new Chart(ctx, {
|
429
|
+
type: 'bar',
|
430
|
+
data: <%=raw @goal_count_data.to_json %>,
|
431
|
+
options: {
|
432
|
+
scales: {
|
433
|
+
yAxes: [{
|
434
|
+
ticks: {
|
435
|
+
beginAtZero:true
|
436
|
+
}
|
437
|
+
}]
|
438
|
+
}
|
439
|
+
}
|
440
|
+
});
|
221
441
|
})
|
222
442
|
</script>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
my_array = [1,2,3,4,5]
|
2
|
+
json.data do
|
3
|
+
json.labels my_array
|
4
|
+
json.datasets do
|
5
|
+
json.array! [1,2] do |d|
|
6
|
+
json.label '人名'
|
7
|
+
json.backgroundColor "#fff"
|
8
|
+
json.borderColor "#36A2EB"
|
9
|
+
json.pointBackgroundColor "#36A2EB"
|
10
|
+
json.pointBorderColor "#fff"
|
11
|
+
json.data my_array
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div class="section">
|
2
2
|
<h4><span>销售人员列表</span></h4>
|
3
3
|
<hr>
|
4
|
-
<table class="layui-hide" id="table"></table>
|
4
|
+
<table class="layui-hide" id="table" lay-filter="table" ></table>
|
5
5
|
</div>
|
6
6
|
<script type="text/html" id="toolbarDemo">
|
7
7
|
<div class="layui-btn-container">
|
@@ -18,6 +18,26 @@
|
|
18
18
|
<a href="/missions/businesses?clazz_id={{d.b_clazz_id}}&staff_id={{d.id}}">{{d.business_b}}</a>
|
19
19
|
</div>
|
20
20
|
</script>
|
21
|
+
<script type="text/html" id="business_c">
|
22
|
+
<div class="layui-text">
|
23
|
+
<a href="/missions/businesses?clazz_id={{d.c_clazz_id}}&staff_id={{d.id}}">{{d.business_c}}</a>
|
24
|
+
</div>
|
25
|
+
</script>
|
26
|
+
<script type="text/html" id="business_d">
|
27
|
+
<div class="layui-text">
|
28
|
+
<a href="/missions/businesses?clazz_id={{d.d_clazz_id}}&staff_id={{d.id}}">{{d.business_d}}</a>
|
29
|
+
</div>
|
30
|
+
</script>
|
31
|
+
<script type="text/html" id="business_e">
|
32
|
+
<div class="layui-text">
|
33
|
+
<a href="/missions/businesses?clazz_id={{d.e_clazz_id}}&staff_id={{d.id}}">{{d.business_e}}</a>
|
34
|
+
</div>
|
35
|
+
</script>
|
36
|
+
<script type="text/html" id="business_o">
|
37
|
+
<div class="layui-text">
|
38
|
+
<a href="/missions/businesses?clazz_id={{d.o_clazz_id}}&staff_id={{d.id}}">{{d.business_o}}</a>
|
39
|
+
</div>
|
40
|
+
</script>
|
21
41
|
<script>
|
22
42
|
layui.use('table', function () {
|
23
43
|
var table = layui.table;
|
@@ -45,22 +65,53 @@
|
|
45
65
|
title: 'A类商机',
|
46
66
|
templet: "#business_a",
|
47
67
|
totalRow:true,
|
68
|
+
sort:true,
|
48
69
|
width: 120
|
49
|
-
},
|
70
|
+
},
|
71
|
+
{
|
50
72
|
field: 'business_b',
|
51
73
|
title: 'B类商机',
|
52
74
|
templet: "#business_b",
|
53
|
-
totalRow:true,
|
75
|
+
totalRow:true,sort:true,
|
54
76
|
width: 120
|
55
|
-
},
|
77
|
+
},
|
78
|
+
{
|
79
|
+
field: 'business_c',
|
80
|
+
title: 'C类商机',
|
81
|
+
templet: "#business_c",
|
82
|
+
totalRow:true,sort:true,
|
83
|
+
width: 120
|
84
|
+
},
|
85
|
+
{
|
86
|
+
field: 'business_d',
|
87
|
+
title: 'D类商机',
|
88
|
+
templet: "#business_d",
|
89
|
+
totalRow:true,sort:true,
|
90
|
+
width: 120
|
91
|
+
},
|
92
|
+
{
|
93
|
+
field: 'business_e',
|
94
|
+
title: 'E类商机',
|
95
|
+
templet: "#business_e",
|
96
|
+
totalRow:true,sort:true,
|
97
|
+
width: 120
|
98
|
+
},
|
99
|
+
{
|
100
|
+
field: 'business_o',
|
101
|
+
title: 'O类商机',
|
102
|
+
templet: "#business_o",
|
103
|
+
totalRow:true,sort:true,
|
104
|
+
width: 120
|
105
|
+
},
|
106
|
+
{
|
56
107
|
field: 'goal',
|
57
108
|
title: '中标金额',
|
58
|
-
totalRow:true,
|
109
|
+
totalRow:true,sort:true,
|
59
110
|
width: 120
|
60
111
|
}, {
|
61
112
|
field: 'return_money',
|
62
113
|
title: '回款',
|
63
|
-
totalRow:true,
|
114
|
+
totalRow:true,sort:true,
|
64
115
|
width: 120
|
65
116
|
}
|
66
117
|
]
|
@@ -69,5 +120,20 @@
|
|
69
120
|
limits: [10,15,20,30,40,50,60,70,80,90],
|
70
121
|
page: true
|
71
122
|
});
|
123
|
+
|
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
|
+
|
72
138
|
});
|
73
139
|
</script>
|
@@ -1,5 +1,10 @@
|
|
1
1
|
businesses_a_count = 0
|
2
2
|
businesses_b_count = 0
|
3
|
+
businesses_c_count = 0
|
4
|
+
businesses_d_count = 0
|
5
|
+
businesses_e_count = 0
|
6
|
+
businesses_o_count = 0
|
7
|
+
area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
|
3
8
|
json.data do
|
4
9
|
json.array! @staffs do |d|
|
5
10
|
part_a_ids = EducodeSales::Business.where("educode_sales_businesses.last_follow_up_id is null AND staff_id = ?",d.id).ids
|
@@ -11,23 +16,52 @@ json.data do
|
|
11
16
|
json.id d.id
|
12
17
|
json.name d.user.real_name
|
13
18
|
json.role d.role&.name
|
14
|
-
json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
19
|
+
# json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
20
|
+
if d.areas.present?
|
21
|
+
if d.areas.ids.sort.to_s == area_ids
|
22
|
+
json.area '全国'
|
23
|
+
else
|
24
|
+
json.area d.areas.pluck(:name).join("、")
|
25
|
+
end
|
26
|
+
else
|
27
|
+
json.area ''
|
28
|
+
end
|
15
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
|
16
30
|
businesses_a_count += business_a
|
17
31
|
json.business_a business_a
|
18
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
|
19
33
|
businesses_b_count += business_b
|
20
34
|
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
|
+
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
|
46
|
+
json.business_o business_o
|
21
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)
|
22
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)
|
23
49
|
json.a_clazz_id @a_clazz&.id
|
24
50
|
json.b_clazz_id @b_clazz&.id
|
51
|
+
json.c_clazz_id @c_clazz&.id
|
52
|
+
json.d_clazz_id @d_clazz&.id
|
53
|
+
json.e_clazz_id @e_clazz&.id
|
54
|
+
json.o_clazz_id @o_clazz&.id
|
25
55
|
end
|
26
56
|
end
|
27
57
|
|
28
58
|
json.totalRow do
|
29
59
|
json.business_a businesses_a_count.to_s
|
30
60
|
json.business_b businesses_b_count.to_s
|
61
|
+
json.business_c businesses_c_count.to_s
|
62
|
+
json.business_d businesses_d_count.to_s
|
63
|
+
json.business_e businesses_e_count.to_s
|
64
|
+
json.business_o businesses_o_count.to_s
|
31
65
|
end
|
32
66
|
json.code 0
|
33
67
|
json.count @staffs.total_count
|
@@ -1,12 +1,22 @@
|
|
1
1
|
departments_count = 0
|
2
2
|
schools_count = 0
|
3
|
+
area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
|
3
4
|
json.data do
|
4
5
|
json.array! @staffs do |d|
|
5
6
|
json.id d.id
|
6
7
|
json.name d.user.real_name
|
7
8
|
json.role d.role&.name
|
8
9
|
json.job_type EducodeSales::Common.job_type_name[d.job_type]
|
9
|
-
json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
10
|
+
# json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
11
|
+
if d.areas.present?
|
12
|
+
if d.areas.ids.sort.to_s == area_ids
|
13
|
+
json.area '全国'
|
14
|
+
else
|
15
|
+
json.area d.areas.pluck(:name).join("、")
|
16
|
+
end
|
17
|
+
else
|
18
|
+
json.area ''
|
19
|
+
end
|
10
20
|
departments = EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.staff_id = #{d.id}").select("COUNT(educode_sales_follow_ups.staff_id) AS count")[0]&.send('count') + EducodeSales::Teacher.joins(:follow_up).where("educode_sales_teacher_follows.staff_id = #{d.id}").select("COUNT(educode_sales_teacher_follows.staff_id) AS count")[0]&.send('count') || 0
|
11
21
|
json.departments departments
|
12
22
|
schools = EducodeSales::Business.joins(:last_follow_up, :department).where("educode_sales_follow_ups.staff_id = #{d.id}").select("COUNT(distinct(departments.school_id)) AS count")[0]['count'] + EducodeSales::Teacher.joins(:follow_up, :department).where("educode_sales_teacher_follows.staff_id = #{d.id}").select("COUNT(distinct(departments.school_id)) AS count")[0]['count']
|