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.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/educode_sales/indexlogo.png +0 -0
  3. data/app/controllers/educode_sales/businesses_controller.rb +27 -0
  4. data/app/controllers/educode_sales/follow_ups_controller.rb +20 -5
  5. data/app/controllers/educode_sales/project_charts_controller.rb +145 -0
  6. data/app/controllers/educode_sales/staffs_controller.rb +35 -0
  7. data/app/helpers/educode_sales/application_helper.rb +153 -6
  8. data/app/views/educode_sales/businesses/_follows.html.erb +11 -1
  9. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +19 -0
  10. data/app/views/educode_sales/businesses/index.html.erb +40 -8
  11. data/app/views/educode_sales/businesses/index.json.jbuilder +3 -0
  12. data/app/views/educode_sales/businesses/key_person.html.erb +56 -0
  13. data/app/views/educode_sales/businesses/key_person.json.jbuilder +17 -0
  14. data/app/views/educode_sales/businesses/new_follow_record.html.erb +23 -9
  15. data/app/views/educode_sales/follow_ups/index.json.jbuilder +2 -0
  16. data/app/views/educode_sales/project_charts/_sales_analysis.html.erb +436 -0
  17. data/app/views/educode_sales/project_charts/sales_analysis.js.erb +1 -0
  18. data/app/views/educode_sales/project_charts/trends.html.erb +81 -0
  19. data/app/views/educode_sales/project_charts/trends.json.jbuilder +4 -0
  20. data/app/views/educode_sales/staffs/edit.html.erb +1 -1
  21. data/app/views/educode_sales/staffs/index.html.erb +20 -1
  22. data/app/views/educode_sales/staffs/list.html.erb +39 -0
  23. data/app/views/layouts/educode_sales/application.html.erb +3 -3
  24. data/config/routes.rb +14 -0
  25. data/db/migrate/20230428015007_add_deploy_time_follow_ups.rb +6 -0
  26. data/lib/educode_sales/version.rb +1 -1
  27. 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>
@@ -0,0 +1,4 @@
1
+ json.data1 @follow_count_data
2
+ json.data2 @goal_count_data
3
+ json.data3 @business_data
4
+ json.data4 @customer_data
@@ -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
- width: 200,
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
- <!-- <dd>-->
167
- <!-- <a href="/missions/idea_recycles" class="<%#= current?('layui-this', idea_recycles_path) %>"><i style="padding-right: 35px"></i><%#= image_tag "educode_sales/回收站.png", size: "15" %>-->
168
- <!-- <i style="font-size: 25px; padding-right: 15px"></i>方案回收站</a></dd>-->
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
 
@@ -0,0 +1,6 @@
1
+ class AddDeployTimeFollowUps < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :educode_sales_follow_ups, :deploy_time, :date
4
+ add_column :educode_sales_follow_ups, :rival, :string
5
+ end
6
+ end