educode_sales 0.9.3 → 0.9.4
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/sale_trends_controller.rb +265 -256
- 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 +214 -545
- data/config/routes.rb +4 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +10 -2
@@ -1,411 +1,260 @@
|
|
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
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
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>B类商机<a href="/missions/businesses?clazz_id=<%=EducodeSales::Common.find_by(extras: EducodeSales::Common::BTYPE)&.id %>" style="color: #0000FF;float: right">查看商机</a></h5>
|
192
|
+
</div>
|
193
|
+
<div class="panel-content y-t-10">
|
194
|
+
<h1 class="no-margins"><%= @b_amount %>万</h1>
|
195
|
+
</div>
|
196
|
+
</div>
|
197
|
+
</div>
|
198
|
+
</div>
|
187
199
|
</div>
|
188
200
|
</div>
|
189
201
|
</div>
|
190
202
|
</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
203
|
</div>
|
268
204
|
</form>
|
269
|
-
</div>
|
270
|
-
<canvas id="myChart2" width="960" height="200"></canvas>
|
271
205
|
</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>
|
206
|
+
<div class="layui-tab-item">
|
207
|
+
<div id="page_2"></div>
|
306
208
|
</div>
|
307
209
|
|
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>
|
210
|
+
<div class="layui-tab-item">
|
211
|
+
<div id="page_3"></div>
|
212
|
+
</div>
|
347
213
|
|
214
|
+
<div class="layui-tab-item">
|
215
|
+
<div id="page_4"></div>
|
216
|
+
</div>
|
217
|
+
<div class="layui-tab-item">
|
218
|
+
<div id="page_5"></div>
|
219
|
+
</div>
|
348
220
|
</div>
|
349
221
|
</div>
|
222
|
+
|
223
|
+
|
350
224
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.css">
|
351
225
|
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.js"></script>
|
352
226
|
<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 () {
|
227
|
+
layui.use(['form', 'jquery', 'request', 'element'], function () {
|
365
228
|
var $ = layui.jquery,
|
366
229
|
form = layui.form,
|
367
230
|
request = layui.request;
|
368
231
|
var year = "<%= @year %>";
|
369
232
|
var element = layui.element;
|
370
233
|
laydate = layui.laydate;
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
234
|
+
element.render();
|
235
|
+
element.on('tab(sale_trend_tab)', function(data) {
|
236
|
+
if (data.index == 1 && $("#tab_2").length == 0) {
|
237
|
+
loadPage('/missions/sale_trends/business_followup_analysis')
|
238
|
+
} else if (data.index == 2 && $("#tab_3").length == 0 ) {
|
239
|
+
loadPage('/missions/sale_trends/sales_analysis')
|
240
|
+
} else if (data.index == 3 && $("#tab_4").length == 0 ) {
|
241
|
+
loadPage('/missions/sale_trends/business_area')
|
242
|
+
} else if (data.index == 4 && $("#tab_5").length == 0 ) {
|
243
|
+
loadPage('/missions/sale_trends/sales_followup_analysis')
|
244
|
+
}
|
245
|
+
});
|
246
|
+
|
247
|
+
|
248
|
+
function loadPage(url) {
|
249
|
+
var layer_index = layer.load(0, {shade: [0.1, '#fff']});
|
250
|
+
Rails.ajax({
|
251
|
+
url: url,
|
252
|
+
type: 'GET',
|
253
|
+
dataType: "script",
|
254
|
+
success: function (res) {
|
255
|
+
layer.close(layer_index);
|
378
256
|
}
|
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
|
-
|
403
|
-
if(goal_type == "year"){
|
404
|
-
$(".goal_year").removeClass('layui-hide')
|
405
|
-
$(".goal_month").addClass('layui-hide')
|
406
|
-
}else{
|
407
|
-
$(".goal_year").addClass('layui-hide')
|
408
|
-
$(".goal_month").removeClass('layui-hide')
|
257
|
+
});
|
409
258
|
}
|
410
259
|
|
411
260
|
function editForm(el) {
|
@@ -438,194 +287,14 @@
|
|
438
287
|
})
|
439
288
|
}
|
440
289
|
|
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
290
|
form.on('select(year)', function(data){
|
477
291
|
year = data.value
|
478
292
|
window.location.href = "/missions/sale_trends/trends?year=" + data.value
|
479
293
|
})
|
480
|
-
|
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
|
-
|
294
|
+
|
517
295
|
editForm("chance_money");
|
518
296
|
editForm("ballot_money");
|
519
297
|
editForm("sign_money");
|
520
298
|
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
299
|
})
|
631
300
|
</script>
|