educode_sales 0.9.71 → 0.9.73
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/assets/images/educode_sales/indexlogo.png +0 -0
- data/app/controllers/educode_sales/businesses_controller.rb +27 -0
- data/app/controllers/educode_sales/follow_ups_controller.rb +20 -5
- data/app/controllers/educode_sales/project_charts_controller.rb +145 -0
- data/app/controllers/educode_sales/staffs_controller.rb +35 -0
- data/app/helpers/educode_sales/application_helper.rb +153 -6
- data/app/views/educode_sales/businesses/_follows.html.erb +11 -1
- data/app/views/educode_sales/businesses/edit_follow_record.html.erb +19 -0
- data/app/views/educode_sales/businesses/index.html.erb +40 -8
- data/app/views/educode_sales/businesses/index.json.jbuilder +3 -0
- data/app/views/educode_sales/businesses/key_person.html.erb +56 -0
- data/app/views/educode_sales/businesses/key_person.json.jbuilder +17 -0
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +23 -9
- data/app/views/educode_sales/follow_ups/index.json.jbuilder +2 -0
- data/app/views/educode_sales/project_charts/_sales_analysis.html.erb +436 -0
- data/app/views/educode_sales/project_charts/sales_analysis.js.erb +1 -0
- data/app/views/educode_sales/project_charts/trends.html.erb +81 -0
- data/app/views/educode_sales/project_charts/trends.json.jbuilder +4 -0
- data/app/views/educode_sales/staffs/edit.html.erb +1 -1
- data/app/views/educode_sales/staffs/index.html.erb +20 -1
- data/app/views/educode_sales/staffs/list.html.erb +39 -0
- data/app/views/layouts/educode_sales/application.html.erb +3 -3
- data/config/routes.rb +14 -0
- data/db/migrate/20230428015007_add_deploy_time_follow_ups.rb +6 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +16 -6
@@ -0,0 +1,436 @@
|
|
1
|
+
<%
|
2
|
+
date = params[:goal_date_month].present? ? params[:goal_date_month] : "2023-04"
|
3
|
+
year = date.to_s.split("-")[0]
|
4
|
+
month = date.to_s.split("-")[1]
|
5
|
+
data_arr = get_businesses_chart(year, month) # 本月任务完成度, 本月总任务, 本月完成任务, 待交付项目, 实际交付, 本月任务完成度, 本月总任务, 本月完成任务, 待交付项目, 实际交付, 本月任务完成度, 本月总任务, 本月完成任务, 待交付项目, 实际交付, hash, chart1, chart2
|
6
|
+
data_1, data_2, data_3, data_4, data_5, data_6, data_7, data_8, data_9, data_10, data_11, data_12, data_13, data_14, data_15 =
|
7
|
+
data_arr[0], data_arr[1], data_arr[2], data_arr[3], data_arr[4], data_arr[5], data_arr[6], data_arr[7], data_arr[8], data_arr[9], data_arr[10], data_arr[11], data_arr[12], data_arr[13], data_arr[14]
|
8
|
+
staff_data = data_arr[15]
|
9
|
+
chart1 = data_arr[16]
|
10
|
+
chart2 = data_arr[17]
|
11
|
+
%>
|
12
|
+
<div id="tab_3" lay-filter="test1">
|
13
|
+
<div class="" style="padding-right: 50px">
|
14
|
+
<div style="margin: 10px 10px 10px 10px">
|
15
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
16
|
+
<div class="layui-form-item">
|
17
|
+
<div class="layui-inline">
|
18
|
+
<label class="layui-form-label">时间</label>
|
19
|
+
<div class="layui-input-inline">
|
20
|
+
<input type="text" class="layui-input goal_month " id="goal_date_month" name="goal_date_month" placeholder=" - " value="<%= date %>" autocomplete="off">
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<div class="layui-inline">
|
24
|
+
<button type="button" id="search_bt" class="goal_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_sales">确定
|
25
|
+
</button>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
</form>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<div class="layui-panel">
|
32
|
+
<br>
|
33
|
+
|
34
|
+
<h1 style="padding-left: 10px">任务分布</h1>
|
35
|
+
<br>
|
36
|
+
|
37
|
+
<br>
|
38
|
+
|
39
|
+
<form class="layui-form layui-panel">
|
40
|
+
<div class="welcome">
|
41
|
+
<div class="content-body">
|
42
|
+
<div class="layui-card-bodys">
|
43
|
+
<div class="operation_trend_panel">
|
44
|
+
<div class="layui-row layui-col-space30">
|
45
|
+
<div class="layui-col-xs3">
|
46
|
+
<div class="panel layui-bg-number">
|
47
|
+
<div class="panel-body">
|
48
|
+
<div class="panel-title">
|
49
|
+
<h5>本月任务完成度</h5>
|
50
|
+
</div>
|
51
|
+
<div class="panel-content y-t-10">
|
52
|
+
<h1 class="no-margins" id="users_count_value"><span><%= data_1 %></span>%
|
53
|
+
</h1>
|
54
|
+
<div id="users_count_field" class="layui-hide">
|
55
|
+
<input type="text" name="users_count" autocomplete="off" class="layui-input" id="users_count">
|
56
|
+
</div>
|
57
|
+
</div>
|
58
|
+
</div>
|
59
|
+
</div>
|
60
|
+
</div>
|
61
|
+
<div class="layui-col-xs3">
|
62
|
+
<div class="panel layui-bg-number">
|
63
|
+
<div class="panel-body">
|
64
|
+
<div class="panel-title">
|
65
|
+
<h5>本月总任务</h5>
|
66
|
+
</div>
|
67
|
+
<div class="panel-content y-t-10">
|
68
|
+
<h1 class="no-margins" id="teachers_count_value">
|
69
|
+
<span><%= data_2 %></span>个</h1>
|
70
|
+
<div id="teachers_count_field" class="layui-hide">
|
71
|
+
<input type="text" name="teachers_count" autocomplete="off" class="layui-input" id="teachers_count">
|
72
|
+
</div>
|
73
|
+
</div>
|
74
|
+
</div>
|
75
|
+
</div>
|
76
|
+
</div>
|
77
|
+
<div class="layui-col-xs3">
|
78
|
+
<div class="panel layui-bg-number">
|
79
|
+
<div class="panel-body">
|
80
|
+
<div class="panel-title">
|
81
|
+
<h5>本月完成任务</h5>
|
82
|
+
</div>
|
83
|
+
<div class="panel-content y-t-10">
|
84
|
+
<h1 class="no-margins" id="courses_count_value">
|
85
|
+
<span><%= data_3 %></span>个</h1>
|
86
|
+
<div id="courses_count_field" class="layui-hide">
|
87
|
+
<input type="text" name="courses_count" autocomplete="off" class="layui-input" id="courses_count">
|
88
|
+
</div>
|
89
|
+
</div>
|
90
|
+
</div>
|
91
|
+
</div>
|
92
|
+
</div>
|
93
|
+
<div class="layui-col-xs3">
|
94
|
+
<div class="panel layui-bg-number">
|
95
|
+
<div class="panel-body">
|
96
|
+
<div class="panel-title">
|
97
|
+
<h5>
|
98
|
+
待交付项目</h5>
|
99
|
+
</div>
|
100
|
+
<div class="panel-content y-t-10">
|
101
|
+
<h1 class="no-margins" id="top_teachers_count_value">
|
102
|
+
<span><%= data_4 %></span>
|
103
|
+
</h1>
|
104
|
+
<div id="top_teachers_count_field" class="layui-hide">
|
105
|
+
<input type="text" name="top_teachers_count" autocomplete="off" class="layui-input"
|
106
|
+
id="top_teachers_count">
|
107
|
+
</div>
|
108
|
+
</div>
|
109
|
+
</div>
|
110
|
+
</div>
|
111
|
+
</div>
|
112
|
+
|
113
|
+
<div class="layui-col-xs3">
|
114
|
+
<div class="panel layui-bg-number">
|
115
|
+
<div class="panel-body">
|
116
|
+
<div class="panel-title">
|
117
|
+
<h5>实际交付</h5>
|
118
|
+
</div>
|
119
|
+
<div class="panel-content y-t-10">
|
120
|
+
<h1 class="no-margins"><%= data_5 %></h1>
|
121
|
+
</div>
|
122
|
+
</div>
|
123
|
+
</div>
|
124
|
+
</div>
|
125
|
+
|
126
|
+
<div class="layui-col-xs3">
|
127
|
+
<div class="panel layui-bg-number">
|
128
|
+
<div class="panel-body">
|
129
|
+
<div class="panel-title">
|
130
|
+
<h5>待准备项目</h5>
|
131
|
+
</div>
|
132
|
+
<div class="panel-content y-t-10">
|
133
|
+
<h1 class="no-margins"><%= data_6 %></h1>
|
134
|
+
</div>
|
135
|
+
</div>
|
136
|
+
</div>
|
137
|
+
</div>
|
138
|
+
|
139
|
+
<div class="layui-col-xs3">
|
140
|
+
<div class="panel layui-bg-number">
|
141
|
+
<div class="panel-body">
|
142
|
+
<div class="panel-title">
|
143
|
+
<h5>完成准备</h5>
|
144
|
+
</div>
|
145
|
+
<div class="panel-content y-t-10">
|
146
|
+
<h1 class="no-margins"><%= data_7 %></h1>
|
147
|
+
</div>
|
148
|
+
</div>
|
149
|
+
</div>
|
150
|
+
</div>
|
151
|
+
|
152
|
+
<div class="layui-col-xs3">
|
153
|
+
<div class="panel layui-bg-number">
|
154
|
+
<div class="panel-body">
|
155
|
+
<div class="panel-title">
|
156
|
+
<h5>待验收平台包</h5>
|
157
|
+
</div>
|
158
|
+
<div class="panel-content y-t-10">
|
159
|
+
<h1 class="no-margins"><%= data_8 %></h1>
|
160
|
+
</div>
|
161
|
+
</div>
|
162
|
+
</div>
|
163
|
+
</div>
|
164
|
+
<div class="layui-col-xs3">
|
165
|
+
<div class="panel layui-bg-number">
|
166
|
+
<div class="panel-body">
|
167
|
+
<div class="panel-title">
|
168
|
+
<h5>实际验收平台包</h5>
|
169
|
+
</div>
|
170
|
+
<div class="panel-content y-t-10">
|
171
|
+
<h1 class="no-margins"><%= data_9 %></h1>
|
172
|
+
</div>
|
173
|
+
</div>
|
174
|
+
</div>
|
175
|
+
</div>
|
176
|
+
<div class="layui-col-xs3">
|
177
|
+
<div class="panel layui-bg-number">
|
178
|
+
<div class="panel-body">
|
179
|
+
<div class="panel-title">
|
180
|
+
<h5>待验收课程包</h5>
|
181
|
+
</div>
|
182
|
+
<div class="panel-content y-t-10">
|
183
|
+
<h1 class="no-margins"><%= data_10 %></h1>
|
184
|
+
</div>
|
185
|
+
</div>
|
186
|
+
</div>
|
187
|
+
</div>
|
188
|
+
<div class="layui-col-xs3">
|
189
|
+
<div class="panel layui-bg-number">
|
190
|
+
<div class="panel-body">
|
191
|
+
<div class="panel-title">
|
192
|
+
<h5>实际验收课程包</h5>
|
193
|
+
</div>
|
194
|
+
<div class="panel-content y-t-10">
|
195
|
+
<h1 class="no-margins"><%= data_11 %></h1>
|
196
|
+
</div>
|
197
|
+
</div>
|
198
|
+
</div>
|
199
|
+
</div>
|
200
|
+
|
201
|
+
</div>
|
202
|
+
</div>
|
203
|
+
</div>
|
204
|
+
</div>
|
205
|
+
</div>
|
206
|
+
</form>
|
207
|
+
<br>
|
208
|
+
<br>
|
209
|
+
|
210
|
+
<div class="layui-panel">
|
211
|
+
<canvas id="myChart2" width="960" height="350"></canvas>
|
212
|
+
</div>
|
213
|
+
</div>
|
214
|
+
|
215
|
+
<br>
|
216
|
+
<br>
|
217
|
+
<div class="layui-panel">
|
218
|
+
<br>
|
219
|
+
|
220
|
+
<h1 style="padding-left: 10px">总体分析</h1>
|
221
|
+
<br>
|
222
|
+
|
223
|
+
<form class="layui-form layui-panel">
|
224
|
+
<div class="welcome">
|
225
|
+
<div class="content-body">
|
226
|
+
<div class="layui-card-bodys">
|
227
|
+
<div class="operation_trend_panel">
|
228
|
+
<div class="layui-row layui-col-space30">
|
229
|
+
<div class="layui-col-xs3">
|
230
|
+
<div class="panel layui-bg-number">
|
231
|
+
<div class="panel-body">
|
232
|
+
<div class="panel-title">
|
233
|
+
<h5>历史遗漏项目</h5>
|
234
|
+
</div>
|
235
|
+
<div class="panel-content y-t-10">
|
236
|
+
<h1 class="no-margins" id="users_count_value"><span><%= data_12 %></span>个
|
237
|
+
</h1>
|
238
|
+
<div id="users_count_field" class="layui-hide">
|
239
|
+
<input type="text" name="users_count" autocomplete="off" class="layui-input" id="users_count">
|
240
|
+
</div>
|
241
|
+
</div>
|
242
|
+
</div>
|
243
|
+
</div>
|
244
|
+
</div>
|
245
|
+
<div class="layui-col-xs3">
|
246
|
+
<div class="panel layui-bg-number">
|
247
|
+
<div class="panel-body">
|
248
|
+
<div class="panel-title">
|
249
|
+
<h5>年度待交付项目</h5>
|
250
|
+
</div>
|
251
|
+
<div class="panel-content y-t-10">
|
252
|
+
<h1 class="no-margins" id="teachers_count_value">
|
253
|
+
<span><%= data_13 %></span>个</h1>
|
254
|
+
<div id="teachers_count_field" class="layui-hide">
|
255
|
+
<input type="text" name="teachers_count" autocomplete="off" class="layui-input" id="teachers_count">
|
256
|
+
</div>
|
257
|
+
</div>
|
258
|
+
</div>
|
259
|
+
</div>
|
260
|
+
</div>
|
261
|
+
<div class="layui-col-xs3">
|
262
|
+
<div class="panel layui-bg-number">
|
263
|
+
<div class="panel-body">
|
264
|
+
<div class="panel-title">
|
265
|
+
<h5>年度已交付项目</h5>
|
266
|
+
</div>
|
267
|
+
<div class="panel-content y-t-10">
|
268
|
+
<h1 class="no-margins" id="courses_count_value">
|
269
|
+
<span><%= data_14 %></span>个</h1>
|
270
|
+
<div id="courses_count_field" class="layui-hide">
|
271
|
+
<input type="text" name="courses_count" autocomplete="off" class="layui-input" id="courses_count">
|
272
|
+
</div>
|
273
|
+
</div>
|
274
|
+
</div>
|
275
|
+
</div>
|
276
|
+
</div>
|
277
|
+
<div class="layui-col-xs3">
|
278
|
+
<div class="panel layui-bg-number">
|
279
|
+
<div class="panel-body">
|
280
|
+
<div class="panel-title">
|
281
|
+
<h5>
|
282
|
+
年度延期项目</h5>
|
283
|
+
</div>
|
284
|
+
<div class="panel-content y-t-10">
|
285
|
+
<h1 class="no-margins" id="top_teachers_count_value">
|
286
|
+
<span><%= data_15 %></span>个
|
287
|
+
</h1>
|
288
|
+
<div id="top_teachers_count_field" class="layui-hide">
|
289
|
+
<input type="text" name="top_teachers_count" autocomplete="off" class="layui-input"
|
290
|
+
id="top_teachers_count">
|
291
|
+
</div>
|
292
|
+
</div>
|
293
|
+
</div>
|
294
|
+
</div>
|
295
|
+
</div>
|
296
|
+
|
297
|
+
</div>
|
298
|
+
</div>
|
299
|
+
</div>
|
300
|
+
</div>
|
301
|
+
</div>
|
302
|
+
</form>
|
303
|
+
<br>
|
304
|
+
<br>
|
305
|
+
|
306
|
+
|
307
|
+
<form class="layui-form form-value layui-panel">
|
308
|
+
<div class="layui-form-item" style="padding: 10px 25px 0;">
|
309
|
+
<% staff_data.each_with_index do |d, i| %>
|
310
|
+
<div class="layui-inline">
|
311
|
+
<label class="layui-form-label">Top<%= i +1 %>:</label>
|
312
|
+
<div class="layui-input-inline">
|
313
|
+
<%= d[0] %>
|
314
|
+
</div>
|
315
|
+
</div>
|
316
|
+
<div class="layui-inline">
|
317
|
+
<label class="layui-form-label">完成率:</label>
|
318
|
+
<div class="layui-input-inline">
|
319
|
+
<%= d[2].present? ? (d[2].to_f / d[1].to_f * 100.0).round(2).to_s + "%" : 0 %>
|
320
|
+
</div>
|
321
|
+
</div>
|
322
|
+
<div class="layui-inline">
|
323
|
+
<label class="layui-form-label">总任务数:</label>
|
324
|
+
<div class="layui-input-inline">
|
325
|
+
<%= d[1] %>
|
326
|
+
</div>
|
327
|
+
</div>
|
328
|
+
<div class="layui-inline">
|
329
|
+
<label class="layui-form-label" style="width: 100px">完成任务数:</label>
|
330
|
+
<div class="layui-input-inline">
|
331
|
+
<%= d[2] %>
|
332
|
+
</div>
|
333
|
+
</div>
|
334
|
+
<br>
|
335
|
+
<% end %>
|
336
|
+
</div>
|
337
|
+
</form>
|
338
|
+
<br>
|
339
|
+
<br>
|
340
|
+
|
341
|
+
<div class="layui-panel">
|
342
|
+
<canvas id="myChart2_1" width="960" height="350"></canvas>
|
343
|
+
</div>
|
344
|
+
</div>
|
345
|
+
</div>
|
346
|
+
</div>
|
347
|
+
<script>
|
348
|
+
var goal_type = "<%=@goal_count_range %>";
|
349
|
+
layui.use(['form', 'jquery', 'request', 'element'], function () {
|
350
|
+
form = layui.form;
|
351
|
+
|
352
|
+
var opt = {
|
353
|
+
events: false,
|
354
|
+
tooltips: {
|
355
|
+
enabled: false
|
356
|
+
},
|
357
|
+
layout: {
|
358
|
+
padding: {
|
359
|
+
left: 50,
|
360
|
+
right: 50,
|
361
|
+
top: 0,
|
362
|
+
bottom: 0
|
363
|
+
}
|
364
|
+
},
|
365
|
+
hover: {
|
366
|
+
animationDuration: 0
|
367
|
+
},
|
368
|
+
animation: {
|
369
|
+
duration: 1,
|
370
|
+
onComplete: function () {
|
371
|
+
var chartInstance = this.chart, ctx = chartInstance.ctx;
|
372
|
+
ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
|
373
|
+
ctx.textAlign = 'center';
|
374
|
+
ctx.textBaseline = 'bottom';
|
375
|
+
|
376
|
+
this.data.datasets.forEach(function (dataset, i) {
|
377
|
+
ctx.fillStyle = "#444";
|
378
|
+
var meta = chartInstance.controller.getDatasetMeta(i);
|
379
|
+
meta.data.forEach(function (bar, index) {
|
380
|
+
var data = dataset.data[index];
|
381
|
+
ctx.fillText(data, bar._model.x, bar._model.y - 5);
|
382
|
+
});
|
383
|
+
});
|
384
|
+
}
|
385
|
+
}
|
386
|
+
};
|
387
|
+
|
388
|
+
var res_data = <%=raw @goal_count_data.to_json %>;
|
389
|
+
var datasets = [];
|
390
|
+
var color = ['#44D7B6', '#4CACFF', '#F7B500', '#FF0000', '#FF7F00'];
|
391
|
+
res_data.datasets.forEach(function (d, i) {
|
392
|
+
datasets.push({
|
393
|
+
label: d.label,
|
394
|
+
type: 'line',
|
395
|
+
data: d.data1,
|
396
|
+
borderColor: color[i],
|
397
|
+
pointRadius: 1,
|
398
|
+
fill: false,
|
399
|
+
lineTension: 0
|
400
|
+
})
|
401
|
+
})
|
402
|
+
|
403
|
+
laydate.render({
|
404
|
+
type: 'month',
|
405
|
+
min: '2023-04',
|
406
|
+
elem: '#goal_date_month',
|
407
|
+
});
|
408
|
+
|
409
|
+
|
410
|
+
var ctx = document.getElementById('myChart2');
|
411
|
+
var myChart2 = new Chart(ctx, {
|
412
|
+
type: 'bar',
|
413
|
+
data: <%=raw chart1.to_json %>,
|
414
|
+
options: opt
|
415
|
+
});
|
416
|
+
var ctx = document.getElementById('myChart2_1');
|
417
|
+
var myChart2_1 = new Chart(ctx, {
|
418
|
+
type: 'bar',
|
419
|
+
data: <%=raw chart2.to_json %>,
|
420
|
+
options: opt
|
421
|
+
});
|
422
|
+
form.render();
|
423
|
+
form.on("submit(search_sales)", function (data) {
|
424
|
+
var layer_index = layer.load(0, {shade: [0.1, '#fff']});
|
425
|
+
Rails.ajax({
|
426
|
+
url: '/missions/project_charts/sales_analysis',
|
427
|
+
type: 'GET',
|
428
|
+
data: $.param(data.field, true),
|
429
|
+
dataType: "script",
|
430
|
+
success: function (res) {
|
431
|
+
layer.close(layer_index);
|
432
|
+
}
|
433
|
+
});
|
434
|
+
})
|
435
|
+
})
|
436
|
+
</script>
|
@@ -0,0 +1 @@
|
|
1
|
+
$("#page_3").html("<%= j render 'sales_analysis' %>");
|
@@ -0,0 +1,81 @@
|
|
1
|
+
<div class="layui-tab" lay-filter="sale_trend_tab">
|
2
|
+
<ul class="layui-tab-title">
|
3
|
+
<li class="">统计分析</li>
|
4
|
+
</ul>
|
5
|
+
<div class="layui-tab-content">
|
6
|
+
|
7
|
+
<div class="layui-tab-item layui-show">
|
8
|
+
<div id="page_3"></div>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
|
14
|
+
<script>
|
15
|
+
layui.use(['form', 'jquery', 'request', 'element'], function () {
|
16
|
+
var $ = layui.jquery,
|
17
|
+
form = layui.form,
|
18
|
+
request = layui.request;
|
19
|
+
var year = "<%= @year %>";
|
20
|
+
var element = layui.element;
|
21
|
+
laydate = layui.laydate;
|
22
|
+
element.render();
|
23
|
+
loadPage('/missions/project_charts/sales_analysis')
|
24
|
+
// element.on('tab(sale_trend_tab)', function (data) {
|
25
|
+
// loadPage('/missions/sale_trends/sales_analysis')
|
26
|
+
// });
|
27
|
+
|
28
|
+
|
29
|
+
function loadPage(url) {
|
30
|
+
var layer_index = layer.load(0, {shade: [0.1, '#fff']});
|
31
|
+
Rails.ajax({
|
32
|
+
url: url,
|
33
|
+
type: 'GET',
|
34
|
+
dataType: "script",
|
35
|
+
success: function (res) {
|
36
|
+
layer.close(layer_index);
|
37
|
+
}
|
38
|
+
});
|
39
|
+
}
|
40
|
+
|
41
|
+
function editForm(el) {
|
42
|
+
$("#" + el + "_edit").click(function () {
|
43
|
+
if ($("#" + el + "_field")[0].classList.contains("layui-hide")) {
|
44
|
+
$("#" + el + "_field").removeClass("layui-hide")
|
45
|
+
$("#" + el + "_value").addClass("layui-hide")
|
46
|
+
} else {
|
47
|
+
$("#" + el + "_field").addClass("layui-hide")
|
48
|
+
$("#" + el + "_value").removeClass("layui-hide")
|
49
|
+
}
|
50
|
+
})
|
51
|
+
$("#" + el).blur(function () {
|
52
|
+
if (this.value == '') {
|
53
|
+
layer.msg("不能为空")
|
54
|
+
} else {
|
55
|
+
var data = {};
|
56
|
+
data[el] = this.value;
|
57
|
+
var self = this;
|
58
|
+
data['year'] = year;
|
59
|
+
request.post( 'missions/sale_trends/sale_trends',
|
60
|
+
data,
|
61
|
+
function(res) {
|
62
|
+
$("#" + el + "_field").addClass("layui-hide");
|
63
|
+
$("#" + el + "_value").removeClass("layui-hide");
|
64
|
+
$("#" + el + "_value")[0].innerText = self.value + "万";
|
65
|
+
}
|
66
|
+
)
|
67
|
+
}
|
68
|
+
})
|
69
|
+
}
|
70
|
+
|
71
|
+
form.on('select(year)', function(data){
|
72
|
+
year = data.value
|
73
|
+
window.location.href = "/missions/sale_trends/trends?year=" + data.value
|
74
|
+
})
|
75
|
+
|
76
|
+
editForm("chance_money");
|
77
|
+
editForm("ballot_money");
|
78
|
+
editForm("sign_money");
|
79
|
+
editForm("returned_money");
|
80
|
+
})
|
81
|
+
</script>
|
@@ -5,7 +5,7 @@
|
|
5
5
|
<div class="layui-form-item">
|
6
6
|
<label class="layui-form-label required">姓名</label>
|
7
7
|
<div class="layui-input-block" style="line-height: 36px;">
|
8
|
-
<%= @staff.user.real_name %>
|
8
|
+
<%= "#{@staff.user.real_name} - #{@staff.user.phone}" %>
|
9
9
|
</div>
|
10
10
|
</div>
|
11
11
|
<div class="layui-form-item">
|
@@ -42,6 +42,9 @@
|
|
42
42
|
<table class="layui-hide" id="staff_filter" lay-filter="staff_filter"></table>
|
43
43
|
</div>
|
44
44
|
<script type="text/html" id="staff_bar">
|
45
|
+
<% if @current_admin.is_admin? %>
|
46
|
+
<a class="layui-btn layui-btn-default layui-btn-xs data-count-edit" lay-event="transfer"> 一键转移</a>
|
47
|
+
<% end %>
|
45
48
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
|
46
49
|
<a class="layui-btn layui-btn-xs layui-btn-warm data-count-delete" lay-event="disable">禁用</a>
|
47
50
|
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
|
@@ -111,7 +114,7 @@
|
|
111
114
|
},
|
112
115
|
{
|
113
116
|
title: '操作',
|
114
|
-
|
117
|
+
width: 260,
|
115
118
|
toolbar: '#staff_bar',
|
116
119
|
align: "center"
|
117
120
|
}
|
@@ -210,6 +213,22 @@
|
|
210
213
|
table.reload("staff_filter")
|
211
214
|
})
|
212
215
|
});
|
216
|
+
} else if (obj.event == 'transfer') {
|
217
|
+
var content = miniPage.getHrefContent('/missions/staffs/'+ data.id + '/list');
|
218
|
+
var openWH = miniPage.getOpenWidthHeight();
|
219
|
+
name = data.name;
|
220
|
+
index = layer.open({
|
221
|
+
title: '转移该人员数据到其它人员上',
|
222
|
+
type: 1,
|
223
|
+
shade: 0.2,
|
224
|
+
maxmin: false,
|
225
|
+
shadeClose: true,
|
226
|
+
area: ['700px', '600px'],
|
227
|
+
content: content,
|
228
|
+
});
|
229
|
+
$(window).on("resize", function () {
|
230
|
+
layer.full(index);
|
231
|
+
});
|
213
232
|
}
|
214
233
|
});
|
215
234
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
<%= Gon::Base.render_data %>
|
3
|
+
<div class="layui-form layuimini-form" style="padding:30px">
|
4
|
+
<div class="layui-form-item">
|
5
|
+
<label class="layui-form-label required">人员</label>
|
6
|
+
<div class="layui-input-block" style="width: 300px">
|
7
|
+
<%= select_tag "staff_id", options_for_select(@staffs), { 'lay-filter': 'staff_id' } %>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<hr>
|
11
|
+
<div class="layui-form-item">
|
12
|
+
<div class="layui-input-block">
|
13
|
+
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
|
18
|
+
<script>
|
19
|
+
layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'selectInput'], function () {
|
20
|
+
var form = layui.form,
|
21
|
+
layer = layui.layer,
|
22
|
+
table = layui.table,
|
23
|
+
laytpl = layui.laytpl,
|
24
|
+
request = layui.request,
|
25
|
+
$ = layui.$;
|
26
|
+
|
27
|
+
form.render();
|
28
|
+
var parentIndex = layer.index;
|
29
|
+
form.on('submit(saveBtn)', function (data) {
|
30
|
+
layer.confirm('确定转移 ' + parent.name + " 的数据到 " + gon.trans_staffs[data.field.staff_id] + " ?", function (index) {
|
31
|
+
request.post('missions/staffs/' + parent.staff_id +"/transfer", {to_id: data.field.staff_id}, function (res) {
|
32
|
+
layer.close(index);
|
33
|
+
layer.close(parentIndex)
|
34
|
+
})
|
35
|
+
});
|
36
|
+
return false;
|
37
|
+
});
|
38
|
+
});
|
39
|
+
</script>
|
@@ -163,9 +163,9 @@
|
|
163
163
|
<dd>
|
164
164
|
<a href="/missions/projects" class="<%= current?('layui-this', projects_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/7.运营活动.png", size: "15" %>
|
165
165
|
<i style="font-size: 25px; padding-right: 15px"></i>项目交付管理</a></dd>
|
166
|
-
|
167
|
-
|
168
|
-
|
166
|
+
<dd>
|
167
|
+
<a href="/missions/project_charts/trends" class="<%= current?('layui-this', trends_project_charts_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/2.市场态势.png", size: "15" %>
|
168
|
+
<i style="font-size: 25px; padding-right: 15px"></i>统计分析</a></dd>
|
169
169
|
</dl>
|
170
170
|
</li>
|
171
171
|
<% end %>
|
data/config/routes.rb
CHANGED
@@ -135,6 +135,7 @@ EducodeSales::Engine.routes.draw do
|
|
135
135
|
put :update_follow_up
|
136
136
|
put :audit
|
137
137
|
put :update_advise
|
138
|
+
get :key_person
|
138
139
|
end
|
139
140
|
end
|
140
141
|
|
@@ -275,6 +276,17 @@ EducodeSales::Engine.routes.draw do
|
|
275
276
|
member do
|
276
277
|
end
|
277
278
|
end
|
279
|
+
|
280
|
+
resources :project_charts do
|
281
|
+
collection do
|
282
|
+
get :trends
|
283
|
+
post :sale_trends
|
284
|
+
get :business_followup_analysis
|
285
|
+
get :sales_analysis
|
286
|
+
get :business_area
|
287
|
+
get :sales_followup_analysis
|
288
|
+
end
|
289
|
+
end
|
278
290
|
resources :ideas do
|
279
291
|
collection do
|
280
292
|
get :detail
|
@@ -332,6 +344,8 @@ EducodeSales::Engine.routes.draw do
|
|
332
344
|
delete :disable
|
333
345
|
get :follow_up_schools
|
334
346
|
get :follow_up_departments
|
347
|
+
get :list
|
348
|
+
post :transfer
|
335
349
|
end
|
336
350
|
end
|
337
351
|
|