educode_sales 0.9.3 → 0.9.6
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 +7 -6
- data/app/controllers/educode_sales/sale_trends_controller.rb +281 -259
- data/app/models/educode_sales/sale_trend.rb +2 -0
- data/app/views/educode_sales/sale_trends/_business_area.html.erb +83 -0
- data/app/views/educode_sales/sale_trends/_business_followup_analysis.html.erb +110 -0
- data/app/views/educode_sales/sale_trends/_sales_analysis.html.erb +121 -0
- data/app/views/educode_sales/sale_trends/_sales_followup_analysis.html.erb +106 -0
- data/app/views/educode_sales/sale_trends/business_area.js.erb +1 -0
- data/app/views/educode_sales/sale_trends/business_followup_analysis.js.erb +1 -0
- data/app/views/educode_sales/sale_trends/sales_analysis.js.erb +1 -0
- data/app/views/educode_sales/sale_trends/sales_followup_analysis.js.erb +1 -0
- data/app/views/educode_sales/sale_trends/trends.html.erb +223 -541
- data/config/routes.rb +4 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +10 -2
@@ -1,411 +1,273 @@
|
|
1
|
-
<
|
2
|
-
<
|
3
|
-
<
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
<div class="
|
15
|
-
<
|
16
|
-
|
17
|
-
|
18
|
-
<span class="layui-icon layui-icon-edit pull-right" id="chance_money_edit"></span>
|
19
|
-
<% end %>
|
20
|
-
<h5>商机目标</h5>
|
21
|
-
</div>
|
22
|
-
<div class="panel-content y-t-10">
|
23
|
-
<h1 class="no-margins" id="chance_money_value"><%=@sale_trend.present? ? @sale_trend.chance_money : EducodeSales::SaleTrend.sum(:chance_money)%>万</h1>
|
24
|
-
<div id="chance_money_field" class="layui-hide">
|
25
|
-
<input type="text" name="chance_money" autocomplete="off"
|
26
|
-
class="layui-input" id="chance_money">
|
27
|
-
</div>
|
28
|
-
</div>
|
1
|
+
<div class="layui-tab" lay-filter="sale_trend_tab">
|
2
|
+
<ul class="layui-tab-title">
|
3
|
+
<li class="layui-this">年度统计</li>
|
4
|
+
<li class="">商机跟进数</li>
|
5
|
+
<li class="">销售额分析</li>
|
6
|
+
<li class="">商机区域分布</li>
|
7
|
+
<li class="">销售人员跟进分析</li>
|
8
|
+
</ul>
|
9
|
+
<div class="layui-tab-content">
|
10
|
+
<div class="layui-tab-item layui-show">
|
11
|
+
<form class="layui-form" action="">
|
12
|
+
<div class="welcome">
|
13
|
+
<div class="content-body" style="padding: 15px;">
|
14
|
+
<div class="m-b-10">
|
15
|
+
<i class="fa fa-warning icon"></i>年度
|
16
|
+
<div class="layui-input-inline">
|
17
|
+
<%= select_tag "years", options_for_select(@years, @year), {'lay-filter': 'year'} %>
|
29
18
|
</div>
|
30
19
|
</div>
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
20
|
+
<div class="layui-card-bodys">
|
21
|
+
<div class="">
|
22
|
+
<div class="layui-row layui-col-space30">
|
23
|
+
<div class="layui-col-xs3">
|
24
|
+
<div class="panel layui-bg-number">
|
25
|
+
<div class="panel-body">
|
26
|
+
<div class="panel-title">
|
27
|
+
<% if can? :sale_trends, EducodeSales::SaleTrend %>
|
28
|
+
<span class="layui-icon layui-icon-edit pull-right" id="chance_money_edit"></span>
|
29
|
+
<% end %>
|
30
|
+
<h5>商机目标</h5>
|
31
|
+
</div>
|
32
|
+
<div class="panel-content y-t-10">
|
33
|
+
<h1 class="no-margins" id="chance_money_value"><%=@sale_trend.present? ? @sale_trend.chance_money : EducodeSales::SaleTrend.sum(:chance_money)%>万</h1>
|
34
|
+
<div id="chance_money_field" class="layui-hide">
|
35
|
+
<input type="text" name="chance_money" autocomplete="off"
|
36
|
+
class="layui-input" id="chance_money">
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
</div>
|
45
40
|
</div>
|
46
41
|
</div>
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
42
|
+
<div class="layui-col-xs3">
|
43
|
+
<div class="panel layui-bg-number">
|
44
|
+
<div class="panel-body">
|
45
|
+
<div class="panel-title">
|
46
|
+
<% if can? :sale_trends, EducodeSales::SaleTrend %>
|
47
|
+
<span class="layui-icon layui-icon-edit pull-right" id="ballot_money_edit"></span>
|
48
|
+
<% end %>
|
49
|
+
<h5>中标目标</h5>
|
50
|
+
</div>
|
51
|
+
<div class="panel-content y-t-10">
|
52
|
+
<h1 class="no-margins" id="ballot_money_value"><%=@sale_trend.present? ? @sale_trend.ballot_money : EducodeSales::SaleTrend.sum(:ballot_money)%>万</h1>
|
53
|
+
<div id="ballot_money_field" class="layui-hide">
|
54
|
+
<input type="text" name="ballot_money" autocomplete="off" class="layui-input" id="ballot_money">
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
</div>
|
58
|
+
</div>
|
64
59
|
</div>
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
60
|
+
<div class="layui-col-xs3">
|
61
|
+
<div class="panel layui-bg-number">
|
62
|
+
<div class="panel-body">
|
63
|
+
<div class="panel-title">
|
64
|
+
<% if can? :sale_trends, EducodeSales::SaleTrend %>
|
65
|
+
<span class="layui-icon layui-icon-edit pull-right" id="sign_money_edit"></span>
|
66
|
+
<% end %>
|
67
|
+
<h5>签单目标</h5>
|
68
|
+
</div>
|
69
|
+
<div class="panel-content y-t-10">
|
70
|
+
<h1 class="no-margins" id="sign_money_value"><%=@sale_trend.present? ? @sale_trend.sign_money : EducodeSales::SaleTrend.sum(:sign_money)%>万</h1>
|
71
|
+
<div id="sign_money_field" class="layui-hide">
|
72
|
+
<input type="text" name="sign_money" autocomplete="off" class="layui-input" id="sign_money">
|
73
|
+
</div>
|
74
|
+
</div>
|
75
|
+
</div>
|
76
|
+
</div>
|
76
77
|
</div>
|
77
|
-
<div class="
|
78
|
-
<
|
79
|
-
|
80
|
-
|
78
|
+
<div class="layui-col-xs3" >
|
79
|
+
<div class="panel layui-bg-number">
|
80
|
+
<div class="panel-body">
|
81
|
+
<div class="panel-title">
|
82
|
+
<% if can? :sale_trends, EducodeSales::SaleTrend %>
|
83
|
+
<span class="layui-icon layui-icon-edit pull-right" id="returned_money_edit"></span>
|
84
|
+
<% end %>
|
85
|
+
<h5>回款目标</h5>
|
86
|
+
</div>
|
87
|
+
<div class="panel-content y-t-10">
|
88
|
+
<h1 class="no-margins" id="returned_money_value"><%=@sale_trend.present? ? @sale_trend.returned_money : EducodeSales::SaleTrend.sum(:returned_money)%>万</h1>
|
89
|
+
<div id="returned_money_field" class="layui-hide">
|
90
|
+
<input type="text" name="returned_money" autocomplete="off" class="layui-input" id="returned_money">
|
91
|
+
</div>
|
92
|
+
</div>
|
93
|
+
</div>
|
81
94
|
</div>
|
82
95
|
</div>
|
83
|
-
</div>
|
84
|
-
</div>
|
85
|
-
</div>
|
86
96
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
97
|
+
<div class="layui-col-xs3">
|
98
|
+
<div class="panel layui-bg-number">
|
99
|
+
<div class="panel-body">
|
100
|
+
<div class="panel-title">
|
101
|
+
<h5>现有商机<a href="/missions/businesses?name=(销售态势-<%=@year %>-现有商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
102
|
+
</div>
|
103
|
+
<div class="panel-content y-t-10">
|
104
|
+
<h1 class="no-margins"><%= @business_amount.round(2) %>万</h1>
|
105
|
+
</div>
|
106
|
+
</div>
|
107
|
+
</div>
|
95
108
|
</div>
|
96
|
-
</div>
|
97
|
-
</div>
|
98
|
-
</div>
|
99
109
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
110
|
+
<div class="layui-col-xs3">
|
111
|
+
<div class="panel layui-bg-number">
|
112
|
+
<div class="panel-body">
|
113
|
+
<div class="panel-title">
|
114
|
+
<h5>已中标(总额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已中标商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
115
|
+
</div>
|
116
|
+
<div class="panel-content y-t-10">
|
117
|
+
<h1 class="no-margins"><%= @goal_amount %>万</h1>
|
118
|
+
</div>
|
119
|
+
</div>
|
120
|
+
</div>
|
108
121
|
</div>
|
109
|
-
</div>
|
110
|
-
</div>
|
111
|
-
</div>
|
112
122
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
123
|
+
<div class="layui-col-xs3">
|
124
|
+
<div class="panel layui-bg-number">
|
125
|
+
<div class="panel-body">
|
126
|
+
<div class="panel-title">
|
127
|
+
<h5>已签单(总额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已签单商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
128
|
+
</div>
|
129
|
+
<div class="panel-content y-t-10">
|
130
|
+
<h1 class="no-margins"><%= @service_amount %>万</h1>
|
131
|
+
</div>
|
132
|
+
</div>
|
133
|
+
</div>
|
121
134
|
</div>
|
122
|
-
</div>
|
123
|
-
</div>
|
124
|
-
</div>
|
125
135
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
136
|
+
<div class="layui-col-xs3">
|
137
|
+
<div class="panel layui-bg-number">
|
138
|
+
<div class="panel-body">
|
139
|
+
<div class="panel-title">
|
140
|
+
<h5>已回款<a href="/missions/businesses?name=(销售态势-<%=@year %>-已回款商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
141
|
+
</div>
|
142
|
+
<div class="panel-content y-t-10">
|
143
|
+
<h1 class="no-margins"><%= @return_amount %>万</h1>
|
144
|
+
</div>
|
145
|
+
</div>
|
146
|
+
</div>
|
134
147
|
</div>
|
135
|
-
</div>
|
136
|
-
</div>
|
137
|
-
</div>
|
138
148
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
</div>
|
151
|
-
<div class="layui-col-xs3">
|
152
|
-
<div class="panel layui-bg-number">
|
153
|
-
<div class="panel-body">
|
154
|
-
<div class="panel-title">
|
155
|
-
<h5>已中标(合同额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已中标商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
149
|
+
<div class="layui-col-xs3">
|
150
|
+
<div class="panel layui-bg-number">
|
151
|
+
<div class="panel-body">
|
152
|
+
<div class="panel-title">
|
153
|
+
<h5>A类商机<a href="/missions/businesses?clazz_id=<%=EducodeSales::Common.find_by(extras: EducodeSales::Common::ATYPE)&.id %>" style="color: #0000FF;float: right">查看商机</a></h5>
|
154
|
+
</div>
|
155
|
+
<div class="panel-content y-t-10">
|
156
|
+
<h1 class="no-margins"><%= @a_amount %>万</h1>
|
157
|
+
</div>
|
158
|
+
</div>
|
159
|
+
</div>
|
156
160
|
</div>
|
157
|
-
<div class="
|
158
|
-
<
|
161
|
+
<div class="layui-col-xs3">
|
162
|
+
<div class="panel layui-bg-number">
|
163
|
+
<div class="panel-body">
|
164
|
+
<div class="panel-title">
|
165
|
+
<h5>已中标(合同额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已中标商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
166
|
+
</div>
|
167
|
+
<div class="panel-content y-t-10">
|
168
|
+
<h1 class="no-margins"><%= @actual_goal_amount %>万</h1>
|
169
|
+
</div>
|
170
|
+
</div>
|
171
|
+
</div>
|
159
172
|
</div>
|
160
|
-
</div>
|
161
|
-
</div>
|
162
|
-
</div>
|
163
173
|
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
174
|
+
<div class="layui-col-xs3">
|
175
|
+
<div class="panel layui-bg-number">
|
176
|
+
<div class="panel-body">
|
177
|
+
<div class="panel-title">
|
178
|
+
<h5>已签单(合同额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已签单商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
179
|
+
</div>
|
180
|
+
<div class="panel-content y-t-10">
|
181
|
+
<h1 class="no-margins"><%= @actual_service_amount %>万</h1>
|
182
|
+
</div>
|
183
|
+
</div>
|
184
|
+
</div>
|
172
185
|
</div>
|
173
|
-
</div>
|
174
|
-
</div>
|
175
|
-
</div>
|
176
186
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
187
|
+
<div class="layui-col-xs3">
|
188
|
+
<div class="panel layui-bg-number">
|
189
|
+
<div class="panel-body">
|
190
|
+
<div class="panel-title">
|
191
|
+
<h5>应收款<a href="/missions/businesses?name=(销售态势-<%=@year %>-应收款商机)" style="color: #0000FF;float: right">查看商机</a></h5>
|
192
|
+
</div>
|
193
|
+
<div class="panel-content y-t-10">
|
194
|
+
<h1 class="no-margins"><%= @receivable_amount %>万</h1>
|
195
|
+
</div>
|
196
|
+
</div>
|
197
|
+
</div>
|
183
198
|
</div>
|
184
|
-
|
185
|
-
|
199
|
+
|
200
|
+
<div class="layui-col-xs3">
|
201
|
+
<div class="panel layui-bg-number">
|
202
|
+
<div class="panel-body">
|
203
|
+
<div class="panel-title">
|
204
|
+
<h5>B类商机<a href="/missions/businesses?clazz_id=<%=EducodeSales::Common.find_by(extras: EducodeSales::Common::BTYPE)&.id %>" style="color: #0000FF;float: right">查看商机</a></h5>
|
205
|
+
</div>
|
206
|
+
<div class="panel-content y-t-10">
|
207
|
+
<h1 class="no-margins"><%= @b_amount %>万</h1>
|
208
|
+
</div>
|
209
|
+
</div>
|
210
|
+
</div>
|
186
211
|
</div>
|
187
212
|
</div>
|
188
213
|
</div>
|
189
214
|
</div>
|
190
215
|
</div>
|
191
|
-
</div>
|
192
|
-
</div>
|
193
|
-
</div>
|
194
|
-
</div>
|
195
|
-
</div>
|
196
|
-
</form>
|
197
|
-
<br>
|
198
|
-
<div class="" id="商机跟进数">
|
199
|
-
<ul class="layui-tab-title">
|
200
|
-
<li class="layui-this">商机跟进数</li>
|
201
|
-
</ul>
|
202
|
-
<div class="" style="padding-right: 50px">
|
203
|
-
<div class=" layui-show " style="padding-left: 20px">
|
204
|
-
<div style="margin: 10px 10px 10px 10px">
|
205
|
-
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
206
|
-
<div class="layui-form-item">
|
207
|
-
<div class="layui-inline m-t-10">
|
208
|
-
<label class="layui-form-label">视图</label>
|
209
|
-
<div class="layui-input-inline">
|
210
|
-
<%= select_tag "follow_count_range", options_for_select([['按天','day'],['按周','week'],['按月','month'],['按年','year']],params[:follow_count_range] || 'week'), {'lay-filter': 'follow_count'}%>
|
211
|
-
</div>
|
212
|
-
</div>
|
213
|
-
<div class="layui-inline">
|
214
|
-
<label class="layui-form-label">时间范围</label>
|
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] %>" 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
|
-
</div>
|
221
|
-
</div>
|
222
|
-
<div class="layui-inline">
|
223
|
-
<button type="button" id="search_bt" class=" follow_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">确定
|
224
|
-
</button>
|
225
|
-
</div>
|
226
|
-
</div>
|
227
|
-
</form>
|
228
|
-
</div>
|
229
|
-
<canvas id="myChart" width="960" height="200"></canvas>
|
230
|
-
</div>
|
231
|
-
</div>
|
232
|
-
</div>
|
233
|
-
<br>
|
234
|
-
<br>
|
235
|
-
<div class=" " id="销售额分析" lay-filter="test1">
|
236
|
-
<ul class="layui-tab-title">
|
237
|
-
<li class="layui-this">销售额分析</li>
|
238
|
-
</ul>
|
239
|
-
<div class="" style="padding-right: 50px">
|
240
|
-
<div class=" layui-show" style="padding-left: 20px">
|
241
|
-
<div style="margin: 10px 10px 10px 10px">
|
242
|
-
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
243
|
-
<div class="layui-form-item">
|
244
|
-
<div class="layui-inline m-t-10">
|
245
|
-
<label class="layui-form-label">维度</label>
|
246
|
-
<div class="layui-input-inline">
|
247
|
-
<%= select_tag "count_type", options_for_select([['按合同额统计','actual_amount'],['按总额统计','total_amount']],params[:count_type]), {'lay-filter': 'count_type'}%>
|
248
|
-
</div>
|
249
|
-
</div>
|
250
|
-
<div class="layui-inline m-t-10">
|
251
|
-
<label class="layui-form-label">视图</label>
|
252
|
-
<div class="layui-input-inline">
|
253
|
-
<%= select_tag "goal_count_range", options_for_select([['按月','month'],['按年','year']],params[:goal_count_range]), {'lay-filter': 'goal_count'}%>
|
254
|
-
</div>
|
255
|
-
</div>
|
256
|
-
<div class="layui-inline">
|
257
|
-
<label class="layui-form-label">时间范围</label>
|
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") %>" 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
|
-
</div>
|
262
|
-
</div>
|
263
|
-
<div class="layui-inline">
|
264
|
-
<button type="button" id="search_bt" class="goal_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">确定
|
265
|
-
</button>
|
266
|
-
</div>
|
267
216
|
</div>
|
268
217
|
</form>
|
269
|
-
</div>
|
270
|
-
<canvas id="myChart2" width="960" height="200"></canvas>
|
271
218
|
</div>
|
272
|
-
|
273
|
-
|
274
|
-
</div>
|
275
|
-
<br>
|
276
|
-
<br>
|
277
|
-
<div class=" " id="销售额分析" lay-filter="test1">
|
278
|
-
<ul class="layui-tab-title">
|
279
|
-
<li class="layui-this">商机区域分布</li>
|
280
|
-
</ul>
|
281
|
-
<div class="" style="padding-right: 50px">
|
282
|
-
<div class=" layui-show" style="padding-left: 20px">
|
283
|
-
<div style="margin: 10px 10px 10px 10px">
|
284
|
-
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
285
|
-
<div class="layui-form-item">
|
286
|
-
<div class="layui-inline m-t-10">
|
287
|
-
<label class="layui-form-label">维度</label>
|
288
|
-
<div class="layui-input-inline">
|
289
|
-
<%= select_tag "business_count_type", options_for_select([['按商机总额统计','money'],['按商机数量统计','count']],params[:goal_count_range]), {'lay-filter': 'goal_count'}%>
|
290
|
-
</div>
|
291
|
-
</div>
|
292
|
-
<div class="layui-inline m-t-10">
|
293
|
-
<label class="layui-form-label">商机类型</label>
|
294
|
-
<div class="layui-input-inline">
|
295
|
-
<%= select_tag "business_type", options_for_select(EducodeSales::Common.where(clazz: 'business_type').where.not(extras: "x_class").pluck(:name, :id), params[:clazz_id]), { 'lay-filter': 'clazz_id', include_blank: true } %>
|
296
|
-
</div>
|
297
|
-
</div>
|
298
|
-
<div class="layui-inline">
|
299
|
-
<button type="button" id="search_bt" class="business_bt layui-btn layui-btn-primary" lay-submit lay-filter="business_chart">确定
|
300
|
-
</button>
|
301
|
-
</div>
|
302
|
-
</div>
|
303
|
-
</form>
|
304
|
-
</div>
|
305
|
-
<canvas id="myChart3" width="960" height="200"></canvas>
|
219
|
+
<div class="layui-tab-item">
|
220
|
+
<div id="page_2"></div>
|
306
221
|
</div>
|
307
222
|
|
308
|
-
|
309
|
-
|
310
|
-
|
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>
|
223
|
+
<div class="layui-tab-item">
|
224
|
+
<div id="page_3"></div>
|
225
|
+
</div>
|
347
226
|
|
227
|
+
<div class="layui-tab-item">
|
228
|
+
<div id="page_4"></div>
|
229
|
+
</div>
|
230
|
+
<div class="layui-tab-item">
|
231
|
+
<div id="page_5"></div>
|
232
|
+
</div>
|
348
233
|
</div>
|
349
234
|
</div>
|
235
|
+
|
236
|
+
|
350
237
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.css">
|
351
238
|
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.js"></script>
|
352
239
|
<script>
|
353
|
-
|
354
|
-
goal_type = "<%=@goal_count_range %>"
|
355
|
-
follow_flag = <%=params[:follow_count_range].present? %>
|
356
|
-
if(follow_flag){
|
357
|
-
window.location.href = "#商机跟进数"
|
358
|
-
}
|
359
|
-
|
360
|
-
goal_flag = <%=params[:goal_count_range].present? %>
|
361
|
-
if(goal_flag){
|
362
|
-
window.location.href = "#销售额分析"
|
363
|
-
}
|
364
|
-
layui.use(['form', 'jquery', 'request'], function () {
|
240
|
+
layui.use(['form', 'jquery', 'request', 'element'], function () {
|
365
241
|
var $ = layui.jquery,
|
366
242
|
form = layui.form,
|
367
243
|
request = layui.request;
|
368
244
|
var year = "<%= @year %>";
|
369
245
|
var element = layui.element;
|
370
246
|
laydate = layui.laydate;
|
247
|
+
element.render();
|
248
|
+
element.on('tab(sale_trend_tab)', function(data) {
|
249
|
+
if (data.index == 1 && $("#tab_2").length == 0) {
|
250
|
+
loadPage('/missions/sale_trends/business_followup_analysis')
|
251
|
+
} else if (data.index == 2 && $("#tab_3").length == 0 ) {
|
252
|
+
loadPage('/missions/sale_trends/sales_analysis')
|
253
|
+
} else if (data.index == 3 && $("#tab_4").length == 0 ) {
|
254
|
+
loadPage('/missions/sale_trends/business_area')
|
255
|
+
} else if (data.index == 4 && $("#tab_5").length == 0 ) {
|
256
|
+
loadPage('/missions/sale_trends/sales_followup_analysis')
|
257
|
+
}
|
258
|
+
});
|
371
259
|
|
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
|
-
|
381
|
-
if(follow_type == "day"){
|
382
|
-
$(".year").addClass('layui-hide')
|
383
|
-
$(".month").addClass('layui-hide')
|
384
|
-
$(".week").addClass('layui-hide')
|
385
|
-
$(".day").removeClass('layui-hide')
|
386
|
-
}else if(follow_type == "month"){
|
387
|
-
$(".year").addClass('layui-hide')
|
388
|
-
$(".week").addClass('layui-hide')
|
389
|
-
$(".month").removeClass('layui-hide')
|
390
|
-
$(".day").addClass('layui-hide')
|
391
|
-
}else if(follow_type == "week"){
|
392
|
-
$(".year").addClass('layui-hide')
|
393
|
-
$(".day").addClass('layui-hide')
|
394
|
-
$(".week").removeClass('layui-hide')
|
395
|
-
$(".month").addClass('layui-hide')
|
396
|
-
}else {
|
397
|
-
$(".year").removeClass('layui-hide')
|
398
|
-
$(".month").addClass('layui-hide')
|
399
|
-
$(".day").addClass('layui-hide')
|
400
|
-
$(".week").addClass('layui-hide')
|
401
|
-
}
|
402
260
|
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
261
|
+
function loadPage(url) {
|
262
|
+
var layer_index = layer.load(0, {shade: [0.1, '#fff']});
|
263
|
+
Rails.ajax({
|
264
|
+
url: url,
|
265
|
+
type: 'GET',
|
266
|
+
dataType: "script",
|
267
|
+
success: function (res) {
|
268
|
+
layer.close(layer_index);
|
269
|
+
}
|
270
|
+
});
|
409
271
|
}
|
410
272
|
|
411
273
|
function editForm(el) {
|
@@ -438,194 +300,14 @@
|
|
438
300
|
})
|
439
301
|
}
|
440
302
|
|
441
|
-
// 时间选择器
|
442
|
-
laydate.render({
|
443
|
-
elem: '#date',
|
444
|
-
range: true
|
445
|
-
});
|
446
|
-
laydate.render({
|
447
|
-
elem: '#customer_date',
|
448
|
-
range: true
|
449
|
-
});
|
450
|
-
laydate.render({
|
451
|
-
elem: '#date_week',
|
452
|
-
range: true
|
453
|
-
});
|
454
|
-
laydate.render({
|
455
|
-
type: 'month',
|
456
|
-
elem: '#date_month',
|
457
|
-
range: true
|
458
|
-
});
|
459
|
-
laydate.render({
|
460
|
-
type: 'year',
|
461
|
-
elem: '#date_year',
|
462
|
-
range: true
|
463
|
-
});
|
464
|
-
laydate.render({
|
465
|
-
type: 'year',
|
466
|
-
elem: '#goal_date_year',
|
467
|
-
range: true
|
468
|
-
});
|
469
|
-
laydate.render({
|
470
|
-
type: 'month',
|
471
|
-
elem: '#goal_date_month',
|
472
|
-
range: true
|
473
|
-
});
|
474
|
-
|
475
|
-
|
476
303
|
form.on('select(year)', function(data){
|
477
304
|
year = data.value
|
478
305
|
window.location.href = "/missions/sale_trends/trends?year=" + data.value
|
479
306
|
})
|
480
|
-
form.on('select(follow_count)', function(data){
|
481
|
-
const value = data.value;
|
482
|
-
if(value == "month"){
|
483
|
-
$(".year").addClass('layui-hide')
|
484
|
-
$(".day").addClass('layui-hide')
|
485
|
-
$(".week").addClass('layui-hide')
|
486
|
-
$(".month").removeClass('layui-hide')
|
487
|
-
}else if(value == "year"){
|
488
|
-
$(".month").addClass('layui-hide')
|
489
|
-
$(".day").addClass('layui-hide')
|
490
|
-
$(".week").addClass('layui-hide')
|
491
|
-
$(".year").removeClass('layui-hide')
|
492
|
-
}else if(value == "week"){
|
493
|
-
$(".month").addClass('layui-hide')
|
494
|
-
$(".day").addClass('layui-hide')
|
495
|
-
$(".week").removeClass('layui-hide')
|
496
|
-
$(".year").addClass('layui-hide')
|
497
|
-
}else {
|
498
|
-
$(".month").addClass('layui-hide')
|
499
|
-
$(".year").addClass('layui-hide')
|
500
|
-
$(".day").removeClass('layui-hide')
|
501
|
-
$(".week").addClass('layui-hide')
|
502
|
-
|
503
|
-
}
|
504
|
-
})
|
505
|
-
|
506
|
-
form.on('select(goal_count)', function(data){
|
507
|
-
const value = data.value;
|
508
|
-
if(value == "month"){
|
509
|
-
$(".goal_year").addClass('layui-hide')
|
510
|
-
$(".goal_month").removeClass('layui-hide')
|
511
|
-
}else {
|
512
|
-
$(".goal_month").addClass('layui-hide')
|
513
|
-
$(".goal_year").removeClass('layui-hide')
|
514
|
-
}
|
515
|
-
})
|
516
307
|
|
517
308
|
editForm("chance_money");
|
518
309
|
editForm("ballot_money");
|
519
310
|
editForm("sign_money");
|
520
311
|
editForm("returned_money");
|
521
|
-
|
522
|
-
element.on('tab(test1)', function(){
|
523
|
-
window.location.href = "#销售额分析"
|
524
|
-
});
|
525
|
-
|
526
|
-
var ctx = document.getElementById('myChart');
|
527
|
-
var myChart = new Chart(ctx, {
|
528
|
-
type: 'line',
|
529
|
-
data: <%=raw @follow_count_data.to_json %>,
|
530
|
-
options: {
|
531
|
-
elements: {
|
532
|
-
line: {
|
533
|
-
tension: 0
|
534
|
-
}
|
535
|
-
}
|
536
|
-
}
|
537
|
-
});
|
538
|
-
|
539
|
-
|
540
|
-
var opt = {
|
541
|
-
events: false,
|
542
|
-
tooltips: {
|
543
|
-
enabled: false
|
544
|
-
},
|
545
|
-
hover: {
|
546
|
-
animationDuration: 0
|
547
|
-
},
|
548
|
-
animation: {
|
549
|
-
duration: 1,
|
550
|
-
onComplete: function () {
|
551
|
-
var chartInstance = this.chart,
|
552
|
-
ctx = chartInstance.ctx;
|
553
|
-
ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
|
554
|
-
ctx.textAlign = 'center';
|
555
|
-
ctx.textBaseline = 'bottom';
|
556
|
-
|
557
|
-
this.data.datasets.forEach(function (dataset, i) {
|
558
|
-
var meta = chartInstance.controller.getDatasetMeta(i);
|
559
|
-
meta.data.forEach(function (bar, index) {
|
560
|
-
var data = dataset.data[index];
|
561
|
-
ctx.fillText(data, bar._model.x, bar._model.y - 5);
|
562
|
-
});
|
563
|
-
});
|
564
|
-
}
|
565
|
-
}
|
566
|
-
};
|
567
|
-
|
568
|
-
|
569
|
-
var ctx = document.getElementById('myChart2');
|
570
|
-
var myChart2 = new Chart(ctx, {
|
571
|
-
type: 'bar',
|
572
|
-
data: <%=raw @goal_count_data.to_json %>,
|
573
|
-
options: opt
|
574
|
-
});
|
575
|
-
|
576
|
-
var ctx = document.getElementById('myChart3');
|
577
|
-
var myChart3 = new Chart(ctx, {
|
578
|
-
type: 'bar',
|
579
|
-
data: <%=raw @business_data.to_json %>,
|
580
|
-
options: opt
|
581
|
-
});
|
582
|
-
|
583
|
-
var ctx = document.getElementById('myChart4');
|
584
|
-
var myChart4 = new Chart(ctx, {
|
585
|
-
type: 'bar',
|
586
|
-
data: <%=raw @customer_data.to_json %>,
|
587
|
-
options: opt
|
588
|
-
});
|
589
|
-
|
590
|
-
$(document).ready(function () {
|
591
|
-
$(".follow_count_bt").click(function () {
|
592
|
-
layer.load(0, {});
|
593
|
-
$.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) {
|
594
|
-
layer.closeAll('loading');
|
595
|
-
var data1 = res.data1;
|
596
|
-
myChart.data = data1
|
597
|
-
myChart.update()
|
598
|
-
});
|
599
|
-
});
|
600
|
-
$(".goal_count_bt").click(function () {
|
601
|
-
layer.load(0, {});
|
602
|
-
$.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) {
|
603
|
-
layer.closeAll('loading');
|
604
|
-
var data2 = res.data2;
|
605
|
-
myChart2.data = data2
|
606
|
-
myChart2.update()
|
607
|
-
|
608
|
-
});
|
609
|
-
});
|
610
|
-
$(".business_bt").click(function () {
|
611
|
-
layer.load(0, {});
|
612
|
-
$.get('/missions/sale_trends/trends.json?business_count_type=' + $("#business_count_type").val() + '&business_type=' + $("#business_type").val()).done(function(res) {
|
613
|
-
layer.closeAll('loading');
|
614
|
-
var data3 = res.data3;
|
615
|
-
myChart3.data = data3
|
616
|
-
myChart3.update()
|
617
|
-
});
|
618
|
-
});
|
619
|
-
$(".customer_bt").click(function () {
|
620
|
-
layer.load(0, {});
|
621
|
-
$.get('/missions/sale_trends/trends.json?customer_count_type=' + $("#customer_count_type").val() + '&customer_time_range=' + $("#customer_time_range").val() + '&customer_date=' + $("#customer_date").val()).done(function(res) {
|
622
|
-
layer.closeAll('loading');
|
623
|
-
var data4 = res.data4;
|
624
|
-
myChart4.data = data4
|
625
|
-
myChart4.update()
|
626
|
-
});
|
627
|
-
});
|
628
|
-
});
|
629
|
-
|
630
312
|
})
|
631
313
|
</script>
|