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
@@ -26,9 +26,9 @@
|
|
26
26
|
</div>
|
27
27
|
</div>
|
28
28
|
<div class="layui-inline">
|
29
|
-
<label class="layui-form-label"
|
29
|
+
<label class="layui-form-label">回款时间</label>
|
30
30
|
<div class="layui-input-inline">
|
31
|
-
<input type="text" class="layui-input" id="date" name="date" placeholder=" - ">
|
31
|
+
<input type="text" class="layui-input" id="date" name="date" placeholder=" - " autocomplete="off">
|
32
32
|
</div>
|
33
33
|
</div>
|
34
34
|
<div class="layui-inline">
|
@@ -43,7 +43,7 @@
|
|
43
43
|
|
44
44
|
<script type="text/html" id="toolbarDemo">
|
45
45
|
<div class="layui-btn-container">
|
46
|
-
<span class="table-label"
|
46
|
+
<span class="table-label">回款计划</span>
|
47
47
|
</div>
|
48
48
|
</script>
|
49
49
|
|
@@ -52,9 +52,7 @@
|
|
52
52
|
<script type="text/html" id="currentTableBar">
|
53
53
|
</script>
|
54
54
|
<script type="text/html" id="business">
|
55
|
-
<
|
56
|
-
<a href="/missions/businesses?name={{d.business}}&school={{d.school}}">{{d.business}}</a>
|
57
|
-
</div>
|
55
|
+
<a href="javascript:void(0);" lay-event="business" class="layui-table-link">{{ d.business }}</a>
|
58
56
|
</script>
|
59
57
|
|
60
58
|
<script type="text/html" id="school">
|
@@ -83,7 +81,7 @@
|
|
83
81
|
totalRow: true,
|
84
82
|
defaultToolbar: ['filter'],
|
85
83
|
initSort: {
|
86
|
-
field: '
|
84
|
+
field: 'date_at' //排序字段,对应 cols 设定的各字段名
|
87
85
|
,type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
|
88
86
|
},
|
89
87
|
cols: [
|
@@ -95,7 +93,7 @@
|
|
95
93
|
totalRowText:'本页/总计'
|
96
94
|
},
|
97
95
|
{
|
98
|
-
field: '
|
96
|
+
field: 'date_at',
|
99
97
|
width: 120,
|
100
98
|
sort: true,
|
101
99
|
title: '回款时间'
|
@@ -174,6 +172,47 @@
|
|
174
172
|
return false;
|
175
173
|
});
|
176
174
|
|
175
|
+
table.on('tool(place)', function (obj) {
|
176
|
+
var data = obj.data;
|
177
|
+
id = data.id
|
178
|
+
if (obj.event === 'add_event') { // 监听添加操作
|
179
|
+
var content = miniPage.getHrefContent('/missions/businesses/show_follow_record?follow_up_id=' + data.id);
|
180
|
+
var openWH = miniPage.getOpenWidthHeight();
|
181
|
+
show_index = layer.open({
|
182
|
+
title: '查看商机跟进记录',
|
183
|
+
type: 1,
|
184
|
+
shade: 0.2,
|
185
|
+
maxmin: true,
|
186
|
+
shadeClose: true,
|
187
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
188
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
189
|
+
content: content
|
190
|
+
});
|
191
|
+
$(window).on("resize", function () {
|
192
|
+
layer.full(index);
|
193
|
+
});
|
194
|
+
} else if (obj.event === 'business') {
|
195
|
+
console.log(data);
|
196
|
+
business_id = data.business_id
|
197
|
+
business_name = data.business
|
198
|
+
content = miniPage.getHrefContent('/missions/businesses/show_follow?id=' + data.business_id);
|
199
|
+
openWH = miniPage.getOpenWidthHeight();
|
200
|
+
index = layer.open({
|
201
|
+
title: '商机列表/' + data.business + '的跟进记录',
|
202
|
+
type: 1,
|
203
|
+
shade: 0.2,
|
204
|
+
maxmin: true,
|
205
|
+
shadeClose: true,
|
206
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
207
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
208
|
+
content: content
|
209
|
+
});
|
210
|
+
$(window).on("resize", function () {
|
211
|
+
layer.full(index);
|
212
|
+
});
|
213
|
+
}
|
214
|
+
});
|
215
|
+
|
177
216
|
});
|
178
217
|
</script>
|
179
218
|
<style>
|
@@ -2,11 +2,12 @@ total_amount = 0
|
|
2
2
|
json.data do
|
3
3
|
json.array! @money_plans do |d|
|
4
4
|
json.id d.id
|
5
|
-
json.
|
5
|
+
json.date_at d.date_at.to_s(:date)
|
6
6
|
json.amount d.amount
|
7
7
|
total_amount += d.amount
|
8
8
|
json.clazz d.clazz
|
9
9
|
json.business d.follow_up.business.name
|
10
|
+
json.business_id d.follow_up.business.id
|
10
11
|
json.school School.find(d.follow_up.business.school_id).name
|
11
12
|
json.school_id School.find(d.follow_up.business.school_id).id
|
12
13
|
json.staff d.staff.user.real_name
|
@@ -131,12 +131,26 @@
|
|
131
131
|
templet: "#business_a",
|
132
132
|
|
133
133
|
},
|
134
|
+
// {
|
135
|
+
// field: 'amount',
|
136
|
+
// width: 120,
|
137
|
+
// totalRow:true,
|
138
|
+
// sort: true,
|
139
|
+
// title: '中标金额'
|
140
|
+
// },
|
134
141
|
{
|
135
|
-
field: '
|
142
|
+
field: 'total_amount',
|
136
143
|
width: 120,
|
137
144
|
totalRow:true,
|
138
145
|
sort: true,
|
139
|
-
title: '
|
146
|
+
title: '项目总额'
|
147
|
+
},
|
148
|
+
{
|
149
|
+
field: 'divide_amount',
|
150
|
+
width: 120,
|
151
|
+
totalRow:true,
|
152
|
+
sort: true,
|
153
|
+
title: '渠道分成'
|
140
154
|
},
|
141
155
|
{
|
142
156
|
field: 'return_mount',
|
@@ -17,7 +17,9 @@ json.data do
|
|
17
17
|
business_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
|
18
18
|
json.businesses_count business_count
|
19
19
|
all_businesses_count += business_count
|
20
|
-
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("actual_amount - divide_amount").round(2)
|
20
|
+
# 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("actual_amount - divide_amount").round(2)
|
21
|
+
json.total_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("total_amount").round(2)
|
22
|
+
json.divide_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("divide_amount").round(2)
|
21
23
|
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)
|
22
24
|
end
|
23
25
|
end
|
@@ -5,8 +5,8 @@ json.data do
|
|
5
5
|
json.name business.name
|
6
6
|
json.school business.department.school.name
|
7
7
|
json.department business.department.name
|
8
|
-
json.last_follow_person business.
|
9
|
-
json.latest_time business.
|
8
|
+
json.last_follow_person business.last_follow_up_id.present? ? EducodeSales::FollowUp.unscoped.find(business.last_follow_up_id).staff.user.real_name : EducodeSales::Staff.find(business.staff_id).user.real_name
|
9
|
+
json.latest_time business.last_follow_up_id.present? ? EducodeSales::FollowUp.unscoped.find(business.last_follow_up_id).created_at.to_s : business.created_at.to_s
|
10
10
|
json.deleter EducodeSales::Staff.find(d.deleter_id).user.real_name
|
11
11
|
json.delete_time d.created_at.to_s
|
12
12
|
end
|
@@ -20,7 +20,7 @@
|
|
20
20
|
<h5>商机目标</h5>
|
21
21
|
</div>
|
22
22
|
<div class="panel-content y-t-10">
|
23
|
-
<h1 class="no-margins" id="chance_money_value"
|
23
|
+
<h1 class="no-margins" id="chance_money_value"><%=@sale_trend.present? ? @sale_trend.chance_money : EducodeSales::SaleTrend.sum(:chance_money)%>万</h1>
|
24
24
|
<div id="chance_money_field" class="layui-hide">
|
25
25
|
<input type="text" name="chance_money" autocomplete="off"
|
26
26
|
class="layui-input" id="chance_money">
|
@@ -39,7 +39,7 @@
|
|
39
39
|
<h5>中标目标</h5>
|
40
40
|
</div>
|
41
41
|
<div class="panel-content y-t-10">
|
42
|
-
<h1 class="no-margins" id="ballot_money_value"
|
42
|
+
<h1 class="no-margins" id="ballot_money_value"><%=@sale_trend.present? ? @sale_trend.ballot_money : EducodeSales::SaleTrend.sum(:ballot_money)%>万</h1>
|
43
43
|
<div id="ballot_money_field" class="layui-hide">
|
44
44
|
<input type="text" name="ballot_money" autocomplete="off" class="layui-input" id="ballot_money">
|
45
45
|
</div>
|
@@ -57,7 +57,7 @@
|
|
57
57
|
<h5>签单目标</h5>
|
58
58
|
</div>
|
59
59
|
<div class="panel-content y-t-10">
|
60
|
-
<h1 class="no-margins" id="sign_money_value"
|
60
|
+
<h1 class="no-margins" id="sign_money_value"><%=@sale_trend.present? ? @sale_trend.sign_money : EducodeSales::SaleTrend.sum(:sign_money)%>万</h1>
|
61
61
|
<div id="sign_money_field" class="layui-hide">
|
62
62
|
<input type="text" name="sign_money" autocomplete="off" class="layui-input" id="sign_money">
|
63
63
|
</div>
|
@@ -75,7 +75,7 @@
|
|
75
75
|
<h5>回款目标</h5>
|
76
76
|
</div>
|
77
77
|
<div class="panel-content y-t-10">
|
78
|
-
<h1 class="no-margins" id="returned_money_value"
|
78
|
+
<h1 class="no-margins" id="returned_money_value"><%=@sale_trend.present? ? @sale_trend.returned_money : EducodeSales::SaleTrend.sum(:returned_money)%>万</h1>
|
79
79
|
<div id="returned_money_field" class="layui-hide">
|
80
80
|
<input type="text" name="returned_money" autocomplete="off" class="layui-input" id="returned_money">
|
81
81
|
</div>
|
@@ -88,7 +88,7 @@
|
|
88
88
|
<div class="panel layui-bg-number">
|
89
89
|
<div class="panel-body">
|
90
90
|
<div class="panel-title">
|
91
|
-
<h5>现有商机<a href="/missions/businesses?name=(
|
91
|
+
<h5>现有商机<a href="/missions/businesses?name=(销售态势-<%=@year %>-现有商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
92
92
|
</div>
|
93
93
|
<div class="panel-content y-t-10">
|
94
94
|
<h1 class="no-margins"><%= @business_amount %>万</h1>
|
@@ -195,12 +195,12 @@
|
|
195
195
|
</div>
|
196
196
|
</form>
|
197
197
|
<br>
|
198
|
-
<div class="
|
198
|
+
<div class="" id="商机跟进数">
|
199
199
|
<ul class="layui-tab-title">
|
200
200
|
<li class="layui-this">商机跟进数</li>
|
201
201
|
</ul>
|
202
|
-
<div class="
|
203
|
-
<div class="
|
202
|
+
<div class="" style="padding-right: 50px">
|
203
|
+
<div class=" layui-show " style="padding-left: 20px">
|
204
204
|
<div style="margin: 10px 10px 10px 10px">
|
205
205
|
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
206
206
|
<div class="layui-form-item">
|
@@ -213,10 +213,10 @@
|
|
213
213
|
<div class="layui-inline">
|
214
214
|
<label class="layui-form-label">时间范围</label>
|
215
215
|
<div class="layui-input-inline">
|
216
|
-
<input type="text" class="layui-input month layui-hide" id="date_month" name="date_month" placeholder=" - " value="<%=params[:date_month] %>" >
|
217
|
-
<input type="text" class="layui-input year layui-hide" id="date_year" name="date_year" placeholder=" - " value="<%=params[:date_year] %>">
|
218
|
-
<input type="text" class="layui-input week " id="date_week" name="date_week" placeholder=" - " value="<%=params[:date_week].present? ? params[:date_week] : (Time.now - 30.days).beginning_of_week.to_s(:date) + ' - ' + Time.now.end_of_week.to_s(:date) %>">
|
219
|
-
<input type="text" class="layui-input day layui-hide" id="date" name="date" placeholder=" - " value="<%=params[:date] %>">
|
216
|
+
<input type="text" class="layui-input month layui-hide" id="date_month" name="date_month" placeholder=" - " value="<%=params[:date_month] %>" autocomplete="off" >
|
217
|
+
<input type="text" class="layui-input year layui-hide" id="date_year" name="date_year" placeholder=" - " value="<%=params[:date_year] %>" autocomplete="off">
|
218
|
+
<input type="text" class="layui-input week " id="date_week" name="date_week" placeholder=" - " value="<%=params[:date_week].present? ? params[:date_week] : (Time.now - 30.days).beginning_of_week.to_s(:date) + ' - ' + Time.now.end_of_week.to_s(:date) %>" autocomplete="off">
|
219
|
+
<input type="text" class="layui-input day layui-hide" id="date" name="date" placeholder=" - " value="<%=params[:date] %>" autocomplete="off">
|
220
220
|
</div>
|
221
221
|
</div>
|
222
222
|
<div class="layui-inline">
|
@@ -232,12 +232,12 @@
|
|
232
232
|
</div>
|
233
233
|
<br>
|
234
234
|
<br>
|
235
|
-
<div class="
|
235
|
+
<div class=" " id="销售额分析" lay-filter="test1">
|
236
236
|
<ul class="layui-tab-title">
|
237
237
|
<li class="layui-this">销售额分析</li>
|
238
238
|
</ul>
|
239
|
-
<div class="
|
240
|
-
<div class="
|
239
|
+
<div class="" style="padding-right: 50px">
|
240
|
+
<div class=" layui-show" style="padding-left: 20px">
|
241
241
|
<div style="margin: 10px 10px 10px 10px">
|
242
242
|
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
243
243
|
<div class="layui-form-item">
|
@@ -256,8 +256,8 @@
|
|
256
256
|
<div class="layui-inline">
|
257
257
|
<label class="layui-form-label">时间范围</label>
|
258
258
|
<div class="layui-input-inline">
|
259
|
-
<input type="text" class="layui-input goal_month " id="goal_date_month" name="goal_date_month" placeholder=" - " value="<%=params[:goal_date_month].present? ? params[:goal_date_month] : Time.now.year.to_s + "-01" + " - " + Time.now.strftime("%Y-%m") %>">
|
260
|
-
<input type="text" class="layui-input goal_year layui-hide" id="goal_date_year" name="goal_date_year" placeholder=" - " value="<%=params[:goal_date_year] %>">
|
259
|
+
<input type="text" class="layui-input goal_month " id="goal_date_month" name="goal_date_month" placeholder=" - " value="<%=params[:goal_date_month].present? ? params[:goal_date_month] : Time.now.year.to_s + "-01" + " - " + Time.now.strftime("%Y-%m") %>" autocomplete="off">
|
260
|
+
<input type="text" class="layui-input goal_year layui-hide" id="goal_date_year" name="goal_date_year" placeholder=" - " value="<%=params[:goal_date_year] %>" autocomplete="off">
|
261
261
|
</div>
|
262
262
|
</div>
|
263
263
|
<div class="layui-inline">
|
@@ -274,12 +274,12 @@
|
|
274
274
|
</div>
|
275
275
|
<br>
|
276
276
|
<br>
|
277
|
-
<div class="
|
277
|
+
<div class=" " id="销售额分析" lay-filter="test1">
|
278
278
|
<ul class="layui-tab-title">
|
279
279
|
<li class="layui-this">商机区域分布</li>
|
280
280
|
</ul>
|
281
|
-
<div class="
|
282
|
-
<div class="
|
281
|
+
<div class="" style="padding-right: 50px">
|
282
|
+
<div class=" layui-show" style="padding-left: 20px">
|
283
283
|
<div style="margin: 10px 10px 10px 10px">
|
284
284
|
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
285
285
|
<div class="layui-form-item">
|
@@ -307,6 +307,46 @@
|
|
307
307
|
|
308
308
|
</div>
|
309
309
|
</div>
|
310
|
+
<div class=" " id="销售人员跟进分析" lay-filter="test1">
|
311
|
+
<ul class="layui-tab-title">
|
312
|
+
<li class="layui-this">销售人员跟进分析</li>
|
313
|
+
</ul>
|
314
|
+
<div class="" style="padding-right: 50px">
|
315
|
+
<div class=" layui-show" style="padding-left: 20px">
|
316
|
+
<div style="margin: 10px 10px 10px 10px">
|
317
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
318
|
+
<div class="layui-form-item">
|
319
|
+
<div class="layui-inline m-t-10">
|
320
|
+
<label class="layui-form-label">维度</label>
|
321
|
+
<div class="layui-input-inline">
|
322
|
+
<%= select_tag "customer_count_type", options_for_select([['按跟进客户数统计','money'],['按跟进客户次数统计','count']],params[:goal_count_range]), {'lay-filter': 'goal_count'}%>
|
323
|
+
</div>
|
324
|
+
</div>
|
325
|
+
<div class="layui-inline m-t-10">
|
326
|
+
<label class="layui-form-label">时间范围</label>
|
327
|
+
<div class="layui-input-inline">
|
328
|
+
<% options = [['上周','last_week'],['本周','this_week'],['上月','last_month'],['本月','this_month'],['去年','last_year'],['今年','this_year'],['全部','all'],['自定义','diy']]%>
|
329
|
+
<%= select_tag "customer_time_range", options_for_select(options,'this_year'), { 'lay-filter': 'customer_time_range'} %>
|
330
|
+
</div>
|
331
|
+
</div>
|
332
|
+
<div class="layui-inline m-t-10 layui-hide diy_range" id="diy_range">
|
333
|
+
<label class="layui-form-label">自定义范围</label>
|
334
|
+
<div class="layui-input-inline">
|
335
|
+
<input type="text" class="layui-input" id="customer_date" name="customer_date" placeholder=" - " autocomplete="off">
|
336
|
+
</div>
|
337
|
+
</div>
|
338
|
+
<div class="layui-inline">
|
339
|
+
<button type="button" id="search_bt" class="customer_bt layui-btn layui-btn-primary" lay-submit lay-filter="customer_chart">确定
|
340
|
+
</button>
|
341
|
+
</div>
|
342
|
+
</div>
|
343
|
+
</form>
|
344
|
+
</div>
|
345
|
+
<canvas id="myChart4" width="960" height="200"></canvas>
|
346
|
+
</div>
|
347
|
+
|
348
|
+
</div>
|
349
|
+
</div>
|
310
350
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.css">
|
311
351
|
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.js"></script>
|
312
352
|
<script>
|
@@ -329,6 +369,15 @@
|
|
329
369
|
var element = layui.element;
|
330
370
|
laydate = layui.laydate;
|
331
371
|
|
372
|
+
form.on('select(customer_time_range)', function(data){
|
373
|
+
const value = data.value;
|
374
|
+
if(value == "diy"){
|
375
|
+
$(".diy_range").removeClass("layui-hide")
|
376
|
+
}else {
|
377
|
+
$(".diy_range").addClass('layui-hide')
|
378
|
+
}
|
379
|
+
})
|
380
|
+
|
332
381
|
if(follow_type == "day"){
|
333
382
|
$(".year").addClass('layui-hide')
|
334
383
|
$(".month").addClass('layui-hide')
|
@@ -394,6 +443,10 @@
|
|
394
443
|
elem: '#date',
|
395
444
|
range: true
|
396
445
|
});
|
446
|
+
laydate.render({
|
447
|
+
elem: '#customer_date',
|
448
|
+
range: true
|
449
|
+
});
|
397
450
|
laydate.render({
|
398
451
|
elem: '#date_week',
|
399
452
|
range: true
|
@@ -530,24 +583,21 @@
|
|
530
583
|
options: opt
|
531
584
|
});
|
532
585
|
|
586
|
+
var ctx = document.getElementById('myChart4');
|
587
|
+
var myChart4 = new Chart(ctx, {
|
588
|
+
type: 'bar',
|
589
|
+
data: <%=raw @customer_data.to_json %>,
|
590
|
+
options: opt
|
591
|
+
});
|
592
|
+
|
533
593
|
$(document).ready(function () {
|
534
594
|
$(".follow_count_bt").click(function () {
|
535
595
|
layer.load(0, {});
|
536
596
|
$.get('/missions/sale_trends/trends.json?follow_count_range=' + $("#follow_count_range").val() + '&date_month=' + $("#date_month").val() + '&date_week=' + $("#date_week").val() + '&date_year=' + $("#date_year").val() + '&date=' + $("#date").val()).done(function(res) {
|
537
597
|
layer.closeAll('loading');
|
538
598
|
var data1 = res.data1;
|
539
|
-
|
540
|
-
|
541
|
-
type: 'line',
|
542
|
-
data: data1,
|
543
|
-
options: {
|
544
|
-
elements: {
|
545
|
-
line: {
|
546
|
-
tension: 0
|
547
|
-
}
|
548
|
-
}
|
549
|
-
}
|
550
|
-
});
|
599
|
+
myChart.data = data1
|
600
|
+
myChart.update()
|
551
601
|
});
|
552
602
|
});
|
553
603
|
$(".goal_count_bt").click(function () {
|
@@ -555,12 +605,9 @@
|
|
555
605
|
$.get('/missions/sale_trends/trends.json?count_type=' + $("#count_type").val() + '&goal_count_range=' + $("#goal_count_range").val() + '&goal_date_month=' + $("#goal_date_month").val() + '&goal_date_year=' + $("#goal_date_year").val()).done(function(res) {
|
556
606
|
layer.closeAll('loading');
|
557
607
|
var data2 = res.data2;
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
data: data2,
|
562
|
-
options: opt
|
563
|
-
});
|
608
|
+
myChart2.data = data2
|
609
|
+
myChart2.update()
|
610
|
+
|
564
611
|
});
|
565
612
|
});
|
566
613
|
$(".business_bt").click(function () {
|
@@ -568,12 +615,17 @@
|
|
568
615
|
$.get('/missions/sale_trends/trends.json?business_count_type=' + $("#business_count_type").val() + '&business_type=' + $("#business_type").val()).done(function(res) {
|
569
616
|
layer.closeAll('loading');
|
570
617
|
var data3 = res.data3;
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
618
|
+
myChart3.data = data3
|
619
|
+
myChart3.update()
|
620
|
+
});
|
621
|
+
});
|
622
|
+
$(".customer_bt").click(function () {
|
623
|
+
layer.load(0, {});
|
624
|
+
$.get('/missions/sale_trends/trends.json?customer_count_type=' + $("#customer_count_type").val() + '&customer_time_range=' + $("#customer_time_range").val()).done(function(res) {
|
625
|
+
layer.closeAll('loading');
|
626
|
+
var data4 = res.data4;
|
627
|
+
myChart4.data = data4
|
628
|
+
myChart4.update()
|
577
629
|
});
|
578
630
|
});
|
579
631
|
});
|
@@ -36,7 +36,7 @@ json.data do
|
|
36
36
|
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
|
37
37
|
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
|
38
38
|
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
|
39
|
-
school_count = EducodeSales::CustomerExtension.where(customer_staff_id: d.id).size
|
39
|
+
school_count = EducodeSales::CustomerExtension.joins(:school).where(customer_staff_id: d.id).size
|
40
40
|
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)
|
41
41
|
json.return_money @businesses.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", @x).where.not("educode_sales_money_plans.clazz!= ?", 1).sum(:amount).round(2)
|
42
42
|
json.school_count school_count
|
@@ -58,7 +58,7 @@ json.data do
|
|
58
58
|
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).where("educode_sales_follow_ups.bidded_date >= ? AND educode_sales_follow_ups.bidded_date <= ?", "#{@year}-01-01", "#{@year}-12-31").sum(:total_amount).round(2)
|
59
59
|
json.return_money @businesses.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", @x).where.not("educode_sales_money_plans.clazz!= ?", 1).where("educode_sales_money_plans.date_at >= ? AND educode_sales_money_plans.date_at <= ? ", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").sum(:amount).round(2)
|
60
60
|
json.school_count school_count
|
61
|
-
follow_school_count = (EducodeSales::CustomerFollow.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01", "#{@year}-12-31").pluck(:school_id) + EducodeSales::Business.where(id: EducodeSales::FollowUp.where("created_at >= ? AND created_at <= ?", "#{@year}-01-01", "#{@year}-12-31").where(staff_id: d.id).pluck(:business_id).uniq).pluck(:school_id)).uniq.size
|
61
|
+
follow_school_count = (EducodeSales::CustomerFollow.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").pluck(:school_id) + EducodeSales::Business.where(id: EducodeSales::FollowUp.where("created_at >= ? AND created_at <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").where(staff_id: d.id).pluck(:business_id).uniq).pluck(:school_id)).uniq.size
|
62
62
|
json.follow_school_count follow_school_count
|
63
63
|
json.follow_school_counts EducodeSales::CustomerFollow.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01", "#{@year}-12-31").size + EducodeSales::FollowUp.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01", "#{@year}-12-31").size
|
64
64
|
follow_school_rate = (follow_school_count!=0 ? school_count.to_f * 100 / follow_school_count : 0).round(2)
|
@@ -4,9 +4,43 @@
|
|
4
4
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add"> 添加人员</button>
|
5
5
|
</div>
|
6
6
|
</script>
|
7
|
-
|
7
|
+
<div class="layuimini-main min-height-table" id="week_table_wraper">
|
8
|
+
<div class="layui-form layui-form-pane" lay-filter="week_plan_form_filter">
|
9
|
+
<div class="layui-form-item">
|
10
|
+
<div class="layui-inline">
|
11
|
+
<label class="layui-form-label">用户名</label>
|
12
|
+
<div class="layui-input-inline large-select">
|
13
|
+
<input type="text" class="layui-input" id="name" autocomplete="off" name="name">
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
<div class="layui-inline">
|
17
|
+
<label class="layui-form-label">角色</label>
|
18
|
+
<div class="layui-input-inline">
|
19
|
+
<%= select_tag "role", options_for_select(EducodeSales::Role.all.pluck(:name, :id)), {'lay-filter': 'role', include_blank: true} %>
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
<div class="layui-inline">
|
23
|
+
<label class="layui-form-label">人员类型</label>
|
24
|
+
<div class="layui-input-inline large-select">
|
25
|
+
<%= select_tag "staff_type", options_for_select(EducodeSales::Common.where(clazz: 'staff_type').pluck(:name, :id)), {'lay-filter': 'staff_type', include_blank: true} %>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
<div class="layui-inline">
|
29
|
+
<label class="layui-form-label">状态</label>
|
30
|
+
<div class="layui-input-inline large-select">
|
31
|
+
<%= select_tag "banned", options_for_select([["启用",0],["禁用",1]]), {'lay-filter': 'banned', include_blank: true} %>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
<div class="layui-inline">
|
35
|
+
<button type="reset" lay-submit class="layui-btn layui-btn-primary" lay-filter="week_plan_reset">重置
|
36
|
+
</button>
|
37
|
+
<button type="submit" lay-submit class="layui-btn layui-btn-primary" lay-filter="week_plan_search">检索
|
38
|
+
</button>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
</div>
|
8
42
|
<table class="layui-hide" id="staff_filter" lay-filter="staff_filter"></table>
|
9
|
-
|
43
|
+
</div>
|
10
44
|
<script type="text/html" id="staff_bar">
|
11
45
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
|
12
46
|
<a class="layui-btn layui-btn-xs layui-btn-warm data-count-delete" lay-event="disable">禁用</a>
|
@@ -97,6 +131,38 @@
|
|
97
131
|
});
|
98
132
|
}
|
99
133
|
});
|
134
|
+
var sort = {}, search = {};
|
135
|
+
// table.on('sort(weekPlanTable)', function(obj) {
|
136
|
+
// sort.field = obj.field;
|
137
|
+
// sort.order = obj.type;
|
138
|
+
// table.reload('weekPlanTable', {
|
139
|
+
// initSort: obj,
|
140
|
+
// where: {
|
141
|
+
// sort: sort,
|
142
|
+
// q: search
|
143
|
+
// }
|
144
|
+
// });
|
145
|
+
// })
|
146
|
+
|
147
|
+
// 监听搜索操作
|
148
|
+
form.on('submit(week_plan_search)', function (data) {
|
149
|
+
search = data.field
|
150
|
+
table.reload('staff_filter', {
|
151
|
+
page: {
|
152
|
+
curr: 1
|
153
|
+
},
|
154
|
+
where: {q: search, sort : sort}
|
155
|
+
}, 'data');
|
156
|
+
|
157
|
+
return false;
|
158
|
+
});
|
159
|
+
|
160
|
+
form.on('submit(week_plan_reset)', function(data){
|
161
|
+
var field = data.field;
|
162
|
+
form.val('week_plan_form_filter', {name: '', role: '', staff_type: '', banned: ''})
|
163
|
+
return false;
|
164
|
+
});
|
165
|
+
|
100
166
|
table.on('tool(staff_filter)', function (obj) {
|
101
167
|
var data = obj.data;
|
102
168
|
staff_id = data.id;
|
@@ -19,44 +19,44 @@
|
|
19
19
|
<%= select_tag "professional_title", options_for_select(['教授', '研究员', '副教授', '副研究员', '讲师', '助理研究员', '助理教授'], @person&.professional_title), { include_blank: true } %>
|
20
20
|
</div>
|
21
21
|
</div>
|
22
|
-
<div class="layui-inline">
|
22
|
+
<div class="layui-inline show_item" style="display:none;">
|
23
23
|
<label class="layui-form-label">导流来源</label>
|
24
24
|
<div class="layui-input-inline">
|
25
25
|
<%= select_tag "teacher_source", options_for_select(EducodeSales::Common.where(clazz: 'teacher_source').pluck(:name, :id)), { include_blank: true } %>
|
26
26
|
</div>
|
27
27
|
</div>
|
28
|
-
<div class="layui-inline">
|
28
|
+
<div class="layui-inline show_item" style="display:none;">
|
29
29
|
<label class="layui-form-label">态度</label>
|
30
30
|
<div class="layui-input-inline">
|
31
31
|
|
32
32
|
<%= select_tag "attitude", options_for_select(EducodeSales::Common.where(clazz: 'teacher_attitude').pluck(:name, :id)), { include_blank: true } %>
|
33
33
|
</div>
|
34
34
|
</div>
|
35
|
-
<div class="layui-inline">
|
35
|
+
<div class="layui-inline show_item" style="display:none;">
|
36
36
|
<label class="layui-form-label">注册时间</label>
|
37
37
|
<div class="layui-input-inline">
|
38
38
|
<input type="text" class="layui-input" id="time" placeholder="请选择时间" autocomplete="off" name="regist_at">
|
39
39
|
</div>
|
40
40
|
</div>
|
41
|
-
<div class="layui-inline">
|
41
|
+
<div class="layui-inline show_item" style="display:none;">
|
42
42
|
<label class="layui-form-label">注册状态</label>
|
43
43
|
<div class="layui-input-inline">
|
44
44
|
<%= select_tag "status", options_for_select([["已注册","1"],["未注册","0"]]), { include_blank: true } %>
|
45
45
|
</div>
|
46
46
|
</div>
|
47
|
-
<div class="layui-inline">
|
47
|
+
<div class="layui-inline show_item" style="display:none;">
|
48
48
|
<label class="layui-form-label">区域</label>
|
49
49
|
<div class="layui-input-inline">
|
50
50
|
<%= select_tag "area", options_for_select(EducodeSales::Common.where(clazz: 'area').pluck(:name, :id)), { include_blank: true } %>
|
51
51
|
</div>
|
52
52
|
</div>
|
53
|
-
<div class="layui-inline">
|
53
|
+
<div class="layui-inline show_item" style="display:none;">
|
54
54
|
<label class="layui-form-label">起止时间</label>
|
55
55
|
<div class="layui-input-inline">
|
56
56
|
<input type="text" class="layui-input" id="date" name="date" autocomplete="off" placeholder=" - ">
|
57
57
|
</div>
|
58
58
|
</div>
|
59
|
-
<div class="layui-inline">
|
59
|
+
<div class="layui-inline show_item" style="display:none;">
|
60
60
|
<label class="layui-form-label">教研助理</label>
|
61
61
|
<div class="layui-input-inline">
|
62
62
|
<%= select_tag "assist", options_for_select(@staffs, params[:assist]), { 'lay-filter': 'assist', include_blank: true } %>
|
@@ -68,6 +68,8 @@
|
|
68
68
|
</button>
|
69
69
|
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_teachers">搜 索
|
70
70
|
</button>
|
71
|
+
<a style="padding-left: 20px;color: #0000FF" href="javascript:;" type="submit" class="" lay-submit lay-filter="show_hide">高级搜索
|
72
|
+
</a>
|
71
73
|
</div>
|
72
74
|
</div>
|
73
75
|
</form>
|
@@ -150,12 +152,14 @@
|
|
150
152
|
width: 60,
|
151
153
|
title:'序号',type: 'numbers',
|
152
154
|
totalRowText:'合计',
|
155
|
+
fixed: 'left'
|
153
156
|
|
154
157
|
},
|
155
158
|
{
|
156
159
|
field: 'name',
|
157
160
|
width: 80,
|
158
161
|
title: '姓名',
|
162
|
+
fixed: 'left',
|
159
163
|
templet: "#name"
|
160
164
|
},
|
161
165
|
{
|
@@ -409,6 +413,10 @@
|
|
409
413
|
})
|
410
414
|
return false;
|
411
415
|
});
|
416
|
+
form.on('submit(show_hide)', function (data) {
|
417
|
+
$(".show_item").toggle()
|
418
|
+
return false;
|
419
|
+
});
|
412
420
|
/**
|
413
421
|
* toolbar事件监听
|
414
422
|
*/
|