educode_sales 1.10.37 → 1.10.46

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/application_controller.rb +13 -0
  3. data/app/controllers/educode_sales/contracts_controller.rb +33 -3
  4. data/app/controllers/educode_sales/ideas_controller.rb +17 -7
  5. data/app/controllers/educode_sales/money_plan_records_controller.rb +14 -7
  6. data/app/controllers/educode_sales/money_plans_controller.rb +5 -1
  7. data/app/controllers/educode_sales/plans_controller.rb +14 -0
  8. data/app/controllers/educode_sales/sale_trends_controller.rb +82 -9
  9. data/app/controllers/educode_sales/teachers_controller.rb +7 -2
  10. data/app/helpers/educode_sales/sale_trends_helper.rb +410 -0
  11. data/app/views/educode_sales/businesses/index.html.erb +2 -2
  12. data/app/views/educode_sales/contracts/_list.html.erb +26 -2
  13. data/app/views/educode_sales/contracts/index.json.jbuilder +3 -1
  14. data/app/views/educode_sales/ideas/_index.html.erb +23 -2
  15. data/app/views/educode_sales/ideas/index.json.jbuilder +1 -1
  16. data/app/views/educode_sales/ideas/new.html.erb +11 -6
  17. data/app/views/educode_sales/money_plan_records/_index.html.erb +20 -7
  18. data/app/views/educode_sales/money_plan_records/index.json.jbuilder +3 -1
  19. data/app/views/educode_sales/money_plans/_index.html.erb +56 -42
  20. data/app/views/educode_sales/money_plans/index.json.jbuilder +3 -1
  21. data/app/views/educode_sales/plans/_target_track.html.erb +178 -0
  22. data/app/views/educode_sales/plans/index.html.erb +5 -0
  23. data/app/views/educode_sales/plans/target_track.js.erb +1 -0
  24. data/app/views/educode_sales/sale_trends/_return_money_forecast.html.erb +176 -0
  25. data/app/views/educode_sales/sale_trends/return_money_forecast.js.erb +1 -0
  26. data/app/views/educode_sales/sale_trends/trends.html.erb +6 -0
  27. data/app/views/educode_sales/teachers/_index.html.erb +21 -9
  28. data/config/routes.rb +2 -0
  29. data/lib/educode_sales/version.rb +1 -1
  30. metadata +10 -7
  31. data/app/assets/images/educode_sales/indexlogo.png +0 -0
@@ -30,4 +30,6 @@ json.data do
30
30
  end
31
31
 
32
32
  json.code 0
33
- json.count @money_plan_records.total_count
33
+ if params[:page].present?
34
+ json.count @money_plan_records.total_count
35
+ end
@@ -1,50 +1,52 @@
1
1
  <%= Gon::Base.render_data %>
2
2
  <div style="margin: 10px 10px 10px 10px" id="money_plan_list">
3
- <form class="layui-form layui-form-pane" lay-filter="search_plans">
4
- <div class="layui-form-item">
5
- <div class="layui-inline">
6
- <label class="layui-form-label">商机名称</label>
7
- <div class="layui-input-inline">
8
- <input type="text" name="business" class="layui-input">
9
- </div>
10
- </div>
11
- <div class="layui-inline">
12
- <label class="layui-form-label">客户名称</label>
13
- <div class="layui-input-inline">
14
- <input type="text" name="school" class="layui-input">
15
- </div>
16
- </div>
17
- <div class="layui-inline">
18
- <label class="layui-form-label">销售经理</label>
19
- <div class="layui-input-inline">
20
- <div id="plan_staff_manages" style="width: 190px;"></div>
21
- </div>
22
- </div>
23
- <div class="layui-inline">
24
- <label class="layui-form-label">客户类型</label>
25
- <div class="layui-input-inline">
26
- <%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), { include_blank: true } %>
27
- </div>
28
- </div>
29
- <div class="layui-inline">
30
- <label class="layui-form-label" style="width: 120px">计划回款时间</label>
31
- <div class="layui-input-inline">
32
- <input type="text" name="date_at" class="layui-input" id="date">
33
- </div>
34
- </div>
35
- <div class="layui-inline">
36
- <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
3
+ <form class="layui-form layui-form-pane" lay-filter="search_plans">
4
+ <div class="layui-form-item">
5
+ <div class="layui-inline">
6
+ <label class="layui-form-label">销售经理</label>
7
+ <div class="layui-input-inline">
8
+ <div id="plan_staff_manages" style="width: 190px;"></div>
9
+ </div>
10
+ </div>
11
+ <div class="layui-inline">
12
+ <label class="layui-form-label">商机名称</label>
13
+ <div class="layui-input-inline">
14
+ <input type="text" name="business" class="layui-input">
15
+ </div>
16
+ </div>
17
+ <div class="layui-inline">
18
+ <label class="layui-form-label">客户名称</label>
19
+ <div class="layui-input-inline">
20
+ <input type="text" name="school" class="layui-input">
21
+ </div>
22
+ </div>
23
+ <div class="layui-inline">
24
+ <label class="layui-form-label">客户类型</label>
25
+ <div class="layui-input-inline">
26
+ <%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), {include_blank: true} %>
27
+ </div>
28
+ </div>
29
+ <div class="layui-inline">
30
+ <label class="layui-form-label" style="width: 120px">计划回款时间</label>
31
+ <div class="layui-input-inline">
32
+ <input type="text" name="date_at" class="layui-input" id="date">
33
+ </div>
34
+ </div>
35
+ <div class="layui-inline">
36
+ <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
37
37
  </button>
38
- <button type="submit" class="layui-btn layui-btn-primary" id="search_bt" lay-submit lay-filter="search_teachers">搜 索
38
+ <button type="submit" class="layui-btn layui-btn-primary" id="search_bt" lay-submit lay-filter="search_teachers">搜 索
39
39
  </button>
40
- </div>
41
- </div>
42
- </form>
40
+ </div>
41
+ </div>
42
+ </form>
43
43
  </div>
44
44
  <script type="text/html" id="toolbar_money_plan">
45
+ <span class="table-label">回款计划列表</span>
45
46
  <% if can? :create, EducodeSales::MoneyPlan %>
46
47
  <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" style="margin-left: 20px;" lay-event="addMoney">添加回款计划</button>
47
- <% end %>
48
+ <% end %>
49
+ <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="export">导出</button>
48
50
  </script>
49
51
 
50
52
  <table class="layui-hide" id="money_plan_table" lay-filter="money_plan_table"></table>
@@ -82,15 +84,18 @@
82
84
 
83
85
  var staff_manages_list = xmSelect.render({
84
86
  el: '#plan_staff_manages',
87
+ name: 'plan_staff_manages',
85
88
  data: gon.staffs,
86
89
  filterable: true,
87
90
  radio: true,
88
- })
89
- table.render({
91
+ });
92
+
93
+ var money_plan_table = table.render({
90
94
  elem: '#money_plan_table',
91
95
  url: '/missions/money_plans',
92
96
  toolbar: '#toolbar_money_plan',
93
97
  defaultToolbar: ['filter'],
98
+ title: '回款计划列表',
94
99
  initSort: {
95
100
  field: 'date_at',
96
101
  type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
@@ -245,8 +250,17 @@
245
250
  $(window).on("resize", function() {
246
251
  layer.full(sindex);
247
252
  });
253
+ }else if (obj.event === 'export') {
254
+ layer.load(0, {});
255
+ var data = form.val("search_plans");
256
+ data.staff_manages = staff_manages_list.getValue('valueStr');
257
+ request.authGet("missions/money_plans?type='export'"+ $.param({q: data}), {}, function (res) {
258
+ data = res.data;
259
+ table.exportFile(money_plan_table.config.id, data, 'xls');
260
+ layer.closeAll('loading');
261
+ })
248
262
  }
249
- })
263
+ });
250
264
 
251
265
  table.on('tool(money_plan_table)', function(obj) {
252
266
  var data = obj.data;
@@ -67,4 +67,6 @@ json.data do
67
67
  end
68
68
 
69
69
  json.code 0
70
- json.count @money_plans.total_count
70
+ if params[:page].present?
71
+ json.count @money_plans.total_count
72
+ end
@@ -0,0 +1,178 @@
1
+ <%= Gon::Base.render_data %>
2
+ <div id="target_track_wraper">
3
+ <div class="layuimini-main min-height-table" id="monthly_table_wraper">
4
+ <form class="layui-form layui-form-pane" lay-filter="assessment_progress_form">
5
+ <div class="layui-form-item">
6
+ <div class="layui-inline">
7
+ <label class="layui-form-label">人员</label>
8
+ <div class="layui-input-inline large-select">
9
+ <%= select_tag "staff_id", options_for_select(@staffs), { id: 'weekly_staff_id', include_blank: true} %>
10
+ </div>
11
+ </div>
12
+ <div class="layui-inline">
13
+ <label class="layui-form-label">年度</label>
14
+ <div class="layui-input-inline">
15
+ <input type="text" class="layui-input" autocomplete="off" name="assessment_year" value="<%= Time.now.year %>" id="assessment_year">
16
+ </div>
17
+ </div>
18
+ <div class="layui-inline">
19
+ <label class="layui-form-label">客户类型</label>
20
+ <div class="layui-input-inline">
21
+ <div id="property" style="width: 190px;"></div>
22
+ </div>
23
+ </div>
24
+ <div class="layui-inline">
25
+ <label class="layui-form-label">目标类别</label>
26
+ <div class="layui-input-inline">
27
+ <div id="clazz" style="width: 190px;"></div>
28
+ </div>
29
+ </div>
30
+ <div class="layui-inline">
31
+ <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="progress_resert_btn">重置
32
+ </button>
33
+ <button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="progress_search_btn">检索
34
+ </button>
35
+ </div>
36
+ </div>
37
+ </form>
38
+ <table class="layui-tab" id="finished_table" lay-filter="progressTable"></table>
39
+ </div>
40
+ <script type="text/html" id="progress_Toolbar">
41
+ <div class="layui-btn-container">
42
+ <button class="layui-btn layui-btn-default layui-btn-sm data-add-btn pull-right" lay-event="add"> 导出</button>
43
+ <button class="layui-btn layui-btn-primary layui-btn-sm data-add-btn pull-right" lay-event="add"> 人员显示</button>
44
+ <button class="layui-btn layui-btn-primary layui-btn-sm data-add-btn pull-right" lay-event="add"> 分类显示</button>
45
+ </div>
46
+ </script>
47
+
48
+ <script>
49
+ layui.use(['form', 'table', 'miniPage', 'element', 'rate', 'laydate', 'request', 'xmSelect'], function () {
50
+
51
+ var $ = layui.jquery,
52
+ form = layui.form,
53
+ laydate = layui.laydate,
54
+ request = layui.request,
55
+ table = layui.table,
56
+ rate = layui.rate,
57
+ xmSelect = layui.xmSelect,
58
+ miniPage = layui.miniPage,
59
+ dropdown = layui.dropdown;
60
+
61
+
62
+ laydate.render({
63
+ elem: '#assessment_year',
64
+ type: 'year'
65
+ });
66
+
67
+ var property_list = xmSelect.render({
68
+ el: '#property',
69
+ data: gon.school_tags
70
+ })
71
+
72
+ var clazz = xmSelect.render({
73
+ el: '#clazz',
74
+ data: [{value: '中标', name: '中标'}, {value: '回款', name: '回款'}, {value: '商机', name: '商机'}]
75
+ })
76
+
77
+
78
+ var progress_table = table.render({
79
+ elem: '#finished_table'
80
+ ,toolbar: '#progress_Toolbar'
81
+ ,totalRow:true
82
+ ,title: "绩效考核指标完成情况" // 目前发现的作用(导出文件的文件名)
83
+ ,defaultToolbar: ['filter']
84
+ ,cols:[
85
+ [ //标题栏
86
+ {field: 'id', title: '序号', width: 120, rowspan: 2, colspan: 9},
87
+ {field: 'name', title: '姓名', width: 120, rowspan: 2, colspan: 9},
88
+ {field: 'assessment', title: '类别', width: 120, rowspan: 2},
89
+ ,{field: 'year', align: 'center', title: '年度目标', width: 100, rowspan: 2}
90
+ ,{align: 'center', title: '客户类型', width: 120,rowspan: 2}
91
+ ,{align: 'center', title: '分项目标', width: 120, rowspan: 2}
92
+ ,{field: 'name', title: '年度计划', width: 120, rowspan: 2}
93
+ ,{field: 'name', title: '年度完成', width: 120, rowspan: 2}
94
+
95
+ ,{align: 'center', title: '1月', colspan: 3}
96
+ ,{align: 'center', title: '2月', colspan: 3}
97
+ ,{align: 'center', title: '3月', colspan: 3}
98
+ ,{align: 'center', title: '4月', colspan: 3}
99
+ ,{align: 'center', title: '5月', colspan: 3}
100
+ ,{align: 'center', title: '6月', colspan: 3}
101
+ ,{align: 'center', title: '7月', colspan: 3}
102
+ ,{align: 'center', title: '8月', colspan: 3}
103
+ ,{align: 'center', title: '9月', colspan: 3}
104
+ ,{align: 'center', title: '10月', colspan: 3}
105
+ ,{align: 'center', title: '11月', colspan: 3}
106
+ ,{align: 'center', title: '12月', colspan: 3}
107
+ ],
108
+ [
109
+ {field: 'target_1', title: '目标', width: 100, totalRow:true}
110
+ ,{field: 'plan_1', title: '计划', width: 100, totalRow:true}
111
+ ,{field: 'finish_1', title: '完成', width: 100, totalRow:true}
112
+
113
+ ,{field: 'target_2', title: '目标', width: 100, totalRow:true}
114
+ ,{field: 'plan_2', title: '计划', width: 100, totalRow:true}
115
+ ,{field: 'finish_2', title: '完成', width: 100, totalRow:true}
116
+
117
+ ,{field: 'target_3', title: '目标', width: 100, totalRow:true}
118
+ ,{field: 'plan_3', title: '计划', width: 100, totalRow:true}
119
+ ,{field: 'finish_3', title: '完成', width: 100, totalRow:true}
120
+
121
+ ,{field: 'target_4', title: '目标', width: 100, totalRow:true}
122
+ ,{field: 'plan_4', title: '计划', width: 100, totalRow:true}
123
+ ,{field: 'finish_4', title: '完成', width: 100, totalRow:true}
124
+
125
+ ,{field: 'target_5', title: '目标', width: 100, totalRow:true}
126
+ ,{field: 'plan_5', title: '计划', width: 100, totalRow:true}
127
+ ,{field: 'finish_5', title: '完成', width: 100, totalRow:true}
128
+
129
+ ,{field: 'target_6', title: '目标', width: 100, totalRow:true}
130
+ ,{field: 'plan_6', title: '计划', width: 100, totalRow:true}
131
+ ,{field: 'finish_6', title: '完成', width: 100, totalRow:true}
132
+
133
+ ,{field: 'target_7', title: '目标', width: 100, totalRow:true}
134
+ ,{field: 'plan_7', title: '计划', width: 100, totalRow:true}
135
+ ,{field: 'finish_7', title: '完成', width: 100, totalRow:true}
136
+
137
+ ,{field: 'target_8', title: '目标', width: 100, totalRow:true}
138
+ ,{field: 'plan_8', title: '计划', width: 100, totalRow:true}
139
+ ,{field: 'finish_8', title: '完成', width: 100, totalRow:true}
140
+
141
+ ,{field: 'target_9', title: '目标', width: 100, totalRow:true}
142
+ ,{field: 'plan_9', title: '计划', width: 100, totalRow:true}
143
+ ,{field: 'finish_9', title: '完成', width: 100, totalRow:true}
144
+
145
+ ,{field: 'target_10', title: '目标', width: 100, totalRow:true}
146
+ ,{field: 'plan_10', title: '计划', width: 100, totalRow:true}
147
+ ,{field: 'finish_10', title: '完成', width: 100, totalRow:true}
148
+
149
+ ,{field: 'target_11', title: '目标', width: 100, totalRow:true}
150
+ ,{field: 'plan_11', title: '计划', width: 100, totalRow:true}
151
+ ,{field: 'finish_11', title: '完成', width: 100, totalRow:true}
152
+
153
+ ,{field: 'target_12', title: '目标', width: 100, totalRow:true}
154
+ ,{field: 'plan_12', title: '计划', width: 100, totalRow:true}
155
+ ,{field: 'finish_12', title: '完成', width: 100, totalRow:true}
156
+
157
+ ]]
158
+ });
159
+ loadFinishTable(form.val('assessment_progress_form'))
160
+
161
+ form.on('submit(progress_search_btn)', function (data) {
162
+ var search = data.field;
163
+ search.assessment_id = assement_list.getValue('valueStr').split(",");
164
+ loadFinishTable(search);
165
+ return false;
166
+ })
167
+
168
+ function loadFinishTable(search) {
169
+ table.reload('finished_table', {
170
+ where: search,
171
+ url: '/missions/assessments/finished'
172
+ });
173
+ }
174
+
175
+ })
176
+
177
+ </script>
178
+ </div>
@@ -5,6 +5,7 @@
5
5
  <li data="month">月计划</li>
6
6
  <li data="monthly">月报</li>
7
7
  <li data="year">年计划</li>
8
+ <!-- <li data="target_track">年度执行</li> -->
8
9
  </ul>
9
10
  <div class="layui-tab-content">
10
11
  <div class="layui-tab-item layui-show">
@@ -22,6 +23,8 @@
22
23
  <div class="layui-tab-item">
23
24
  <div id="year_plan_tab_wraper"></div>
24
25
  </div>
26
+ <div class="layui-tab-item" id="target_track_tab">
27
+ </div>
25
28
  </div>
26
29
  </div>
27
30
 
@@ -70,6 +73,8 @@
70
73
  loadPage('/missions/plans/monthly')
71
74
  } else if (data.index == 4 && $("#year_table_wraper").length == 0) {
72
75
  loadPage('/missions/plans/year_plan')
76
+ } else if (data.index == 5 && $("#target_track_wraper").length == 0) {
77
+ loadPage('/missions/plans/target_track')
73
78
  }
74
79
  });
75
80
 
@@ -0,0 +1 @@
1
+ $("#target_track_tab").html("<%= j render 'target_track' %>");
@@ -0,0 +1,176 @@
1
+ <div id="tab_9">
2
+ <div class="" style="padding-right: 50px">
3
+ <div style="margin: 10px 10px 10px 10px">
4
+ <form class="layui-form layui-form-pane" lay-filter="search_form">
5
+ <div class="layui-form-item">
6
+ <div class="layui-inline m-t-10">
7
+ <label class="layui-form-label">销售人员</label>
8
+ <div class="layui-input-inline">
9
+ <% common = EducodeSales::Common.find_by(clazz: 'staff_type', name: '销售')
10
+ staffs = EducodeSales::Staff.where(job_type: common.id) %>
11
+ <%= select_tag "staff_id", options_for_select(staffs.includes(:user).map { |d| [d.user.real_name, d.id] }, params[:staff_id]), {'lay-filter': 'staff_id', include_blank: true} %>
12
+ </div>
13
+ </div>
14
+ <div class="layui-inline m-t-10">
15
+ <label class="layui-form-label">视图</label>
16
+ <div class="layui-input-inline">
17
+ <%= select_tag "forecast_count_range", options_for_select([['按周', 'week'], ['按月', 'month'], ['按季', 'quarter'], ['按年', 'year']], params[:forecast_count_range] || "month"), {'lay-filter': 'return_forecast_count'} %>
18
+ </div>
19
+ </div>
20
+ <div class="layui-inline m-t-10">
21
+ <label class="layui-form-label">时间范围</label>
22
+ <div class="layui-input-inline">
23
+ <input type="text" class="layui-input forecast_month " id="return_forecast_date_month" name="forecast_date_month" placeholder=" - " value="<%= params[:forecast_date_month].present? ? params[:forecast_date_month] : Time.now.year.to_s + "-01" + " - " + Time.now.strftime("%Y-%m") %>" autocomplete="off">
24
+ <input type="text" class="layui-input forecast_year layui-hide" id="return_forecast_date_year" name="forecast_date_year" placeholder=" - " value="<%= params[:forecast_date_year] %>" autocomplete="off">
25
+ <input type="text" class="layui-input forecast_day layui-hide" id="return_forecast_date_day" name="forecast_date_day" placeholder=" - " value="<%= params[:forecast_date_day] %>" autocomplete="off">
26
+ </div>
27
+ </div>
28
+ <div class="layui-inline m-t-10">
29
+ <label class="layui-form-label">客户类型</label>
30
+ <div class="layui-input-inline">
31
+ <%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id), params[:property]), {include_blank: true} %>
32
+ </div>
33
+ </div>
34
+ <div class="layui-inline m-t-10">
35
+ <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_search">重 置</button>
36
+ <button type="button" class="forecast_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_sales">确 定</button>
37
+ </div>
38
+ </div>
39
+ </form>
40
+ </div>
41
+ <canvas id="return_forecast_myChart2" width="960" height="350"></canvas>
42
+ <canvas id="return_forecast_myChart2_1" width="960" height="350" style="margin-top: 30px;"></canvas>
43
+ </div>
44
+ </div>
45
+
46
+ <script>
47
+ layui.use(['form', 'jquery', 'request', 'laydate', 'element'], function () {
48
+ var $ = layui.jquery,
49
+ form = layui.form,
50
+ request = layui.request,
51
+ laydate = layui.laydate;
52
+
53
+ form.render();
54
+
55
+ var opt = {
56
+ events: false,
57
+ tooltips: {
58
+ enabled: false
59
+ },
60
+ layout: {
61
+ padding: {
62
+ left: 20,
63
+ right: 20,
64
+ top: 20,
65
+ bottom: 0
66
+ }
67
+ },
68
+ hover: {
69
+ animationDuration: 1
70
+ },
71
+ animation: {
72
+ duration: 1,
73
+ onComplete: function () {
74
+ var chartInstance = this.chart, ctx = chartInstance.ctx;
75
+ ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
76
+ ctx.textAlign = 'center';
77
+ ctx.textBaseline = 'bottom';
78
+
79
+ this.data.datasets.forEach(function (dataset, i) {
80
+ ctx.fillStyle = "#444";
81
+ var meta = chartInstance.controller.getDatasetMeta(i);
82
+ meta.data.forEach(function (bar, index) {
83
+ var data = dataset.data[index];
84
+ ctx.fillText(data, bar._model.x, bar._model.y - 5);
85
+ });
86
+ });
87
+ }
88
+ }
89
+ };
90
+
91
+ laydate.render({
92
+ type: 'year',
93
+ elem: '#return_forecast_date_year',
94
+ range: true
95
+ });
96
+
97
+ laydate.render({
98
+ elem: '#return_forecast_date_day',
99
+ range: true
100
+ });
101
+
102
+ laydate.render({
103
+ type: 'month',
104
+ elem: '#return_forecast_date_month',
105
+ range: true
106
+ });
107
+
108
+ var forecast_type = "month";
109
+ if (forecast_type === "month") {
110
+ $(".forecast_year").addClass('layui-hide');
111
+ $(".forecast_day").addClass('layui-hide');
112
+ $(".forecast_month").removeClass('layui-hide')
113
+ } else if (forecast_type === "year" || forecast_type === "quarter") {
114
+ $(".forecast_month").addClass('layui-hide');
115
+ $(".forecast_year").removeClass('layui-hide');
116
+ $(".forecast_day").addClass('layui-hide')
117
+ } else {
118
+ $(".forecast_day").removeClass('layui-hide');
119
+ $(".forecast_month").addClass('layui-hide');
120
+ $(".forecast_year").addClass('layui-hide')
121
+ }
122
+
123
+ form.on('select(return_forecast_count)', function (data) {
124
+ const value = data.value;
125
+ if (value === "month") {
126
+ $(".forecast_year").addClass('layui-hide');
127
+ $(".forecast_day").addClass('layui-hide');
128
+ $(".forecast_month").removeClass('layui-hide')
129
+ } else if (value === "year" || value === "quarter") {
130
+ $(".forecast_month").addClass('layui-hide');
131
+ $(".forecast_year").removeClass('layui-hide');
132
+ $(".forecast_day").addClass('layui-hide')
133
+ } else {
134
+ $(".forecast_day").removeClass('layui-hide');
135
+ $(".forecast_month").addClass('layui-hide');
136
+ $(".forecast_year").addClass('layui-hide')
137
+ }
138
+ });
139
+
140
+ //重置按钮
141
+ form.on('submit(reset_search)', function () {
142
+ form.val('search_form', {
143
+ staff_id: "",
144
+ property: ""
145
+ });
146
+ return false;
147
+ });
148
+
149
+ var ctx = document.getElementById('return_forecast_myChart2');
150
+ var return_forecast_myChart2 = new Chart(ctx, {
151
+ type: 'bar',
152
+ data: <%=raw @return_forecast_count_data_0.to_json %>,
153
+ options: opt
154
+ });
155
+
156
+ var ctx01 = document.getElementById('return_forecast_myChart2_1');
157
+ var return_forecast_myChart2_1 = new Chart(ctx01, {
158
+ type: 'bar',
159
+ data: <%=raw @return_forecast_count_data_1.to_json %>,
160
+ options: opt
161
+ });
162
+
163
+ form.on("submit(search_sales)", function (data) {
164
+ var layer_index = layer.load(0, {shade: [0.1, '#fff']});
165
+ Rails.ajax({
166
+ url: '/missions/sale_trends/return_money_forecast',
167
+ type: 'GET',
168
+ data: $.param(data.field, true),
169
+ dataType: "script",
170
+ success: function (res) {
171
+ layer.close(layer_index);
172
+ }
173
+ });
174
+ })
175
+ })
176
+ </script>
@@ -0,0 +1 @@
1
+ $("#page_9").html("<%= j render 'return_money_forecast' %>");
@@ -8,6 +8,7 @@
8
8
  <li class="">中标预测图</li>
9
9
  <li class="">用户分析</li>
10
10
  <li class="">拜访分析</li>
11
+ <li class="">回款预测图</li>
11
12
  </ul>
12
13
  <div class="layui-tab-content">
13
14
  <div class="layui-tab-item layui-show">
@@ -242,6 +243,9 @@
242
243
  <div class="layui-tab-item">
243
244
  <div id="page_8"></div>
244
245
  </div>
246
+ <div class="layui-tab-item">
247
+ <div id="page_9"></div>
248
+ </div>
245
249
  </div>
246
250
  </div>
247
251
 
@@ -270,6 +274,8 @@
270
274
  loadPage('/missions/sale_trends/user_stat')
271
275
  } else if (data.index == 7 && $("#tab_8").length == 0) {
272
276
  loadPage('/missions/sale_trends/visit_analysis')
277
+ } else if (data.index == 8 && $("#tab_9").length == 0) {
278
+ loadPage('/missions/sale_trends/return_money_forecast')
273
279
  }
274
280
  });
275
281
 
@@ -111,12 +111,14 @@
111
111
  <% if can? :create, EducodeSales::Teacher %>
112
112
  <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="import">导入数据</button>
113
113
  <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add">添加老师</button>
114
- <% end %>
115
- </button>
114
+ <% end %>
115
+ <% if can? :export_teacher_list, EducodeSales::Teacher %>
116
+ <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="export">导出</button>
117
+ <% end %>
116
118
  </div>
117
119
  </script>
118
120
  <div class="">
119
- <table class="layui-hide" id="teachers_table" style="min-height: 300px;" lay-filter="teachers_table"></table>
121
+ <table class="layui-hide" id="teachers_table" style="min-height: 300px;" lay-filter="teachers_table"></table>
120
122
  </div>
121
123
  <script type="text/html" id="currentTableBar">
122
124
  <% if can? :create, EducodeSales::TeacherFollow %>
@@ -295,7 +297,8 @@
295
297
  field: 'followup_at',
296
298
  width: 180,
297
299
  title: '最新跟进时间',
298
- hide: gon.filter.followup_at
300
+ hide: gon.filter.followup_at,
301
+ sort: true
299
302
  },
300
303
  {
301
304
  field: 'latest_time',
@@ -401,16 +404,16 @@
401
404
  ]];
402
405
 
403
406
  table = layui.table;
404
- table.render({
407
+ var teachers_table = table.render({
405
408
  elem: '#teachers_table',
406
409
  url: '/missions/teachers',
407
410
  where: {q: form.val('search_form')},
408
411
  toolbar: '#toolbarDemo',
409
- totalRow:true,
412
+ totalRow: true,
410
413
  defaultToolbar: ['filter'],
411
414
  cols: cols_table,
412
415
  limit: 20,
413
- limits: [10,15,20,30,40,50,60,70,80,90],
416
+ limits: [10, 15, 20, 30, 40, 50, 60, 70, 80, 90],
414
417
  page: true,
415
418
  done: function (res) {
416
419
  drowpdwonRender()
@@ -418,11 +421,11 @@
418
421
  });
419
422
  var dropmenu = gon.menus;
420
423
 
421
- drowpdwonRender = function() {
424
+ drowpdwonRender = function () {
422
425
  dropdown.render({
423
426
  elem: '.more-btn',
424
427
  data: dropmenu,
425
- click: function(data, othis){
428
+ click: function (data, othis) {
426
429
  var elem = $(this.elem);
427
430
  id = elem.data('id');
428
431
  switch (data.event) {
@@ -640,6 +643,15 @@
640
643
  $(window).on("resize", function () {
641
644
  layer.full(index);
642
645
  });
646
+ } else if (obj.event === 'export') {
647
+ layer.load(0, {});
648
+ var data = form.val('search_teachers');
649
+ console.log(data)
650
+ request.authGet("missions/teachers?type=export&" + $.param({q: data}), {}, function (res) {
651
+ data = res.data;
652
+ table.exportFile(teachers_table.config.id, data, 'xls')
653
+ layer.closeAll('loading');
654
+ })
643
655
  }
644
656
  });
645
657
 
data/config/routes.rb CHANGED
@@ -174,6 +174,7 @@ EducodeSales::Engine.routes.draw do
174
174
  get :goal_forecast
175
175
  get :user_stat
176
176
  get :visit_analysis
177
+ get :return_money_forecast
177
178
  end
178
179
  end
179
180
 
@@ -266,6 +267,7 @@ EducodeSales::Engine.routes.draw do
266
267
  get :month_plan
267
268
  get :monthly
268
269
  get :year_plan
270
+ get :target_track
269
271
  end
270
272
  member do
271
273
  delete :delete_business_info