educode_sales 0.6.6 → 0.7.0

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/activities_controller.rb +0 -2
  3. data/app/controllers/educode_sales/businesses_controller.rb +259 -43
  4. data/app/controllers/educode_sales/customers_controller.rb +48 -15
  5. data/app/controllers/educode_sales/home_controller.rb +6 -0
  6. data/app/controllers/educode_sales/money_plans_controller.rb +3 -3
  7. data/app/controllers/educode_sales/operation_plans_controller.rb +1 -1
  8. data/app/controllers/educode_sales/plans_controller.rb +1 -1
  9. data/app/controllers/educode_sales/sale_trends_controller.rb +107 -18
  10. data/app/controllers/educode_sales/staffs_controller.rb +29 -0
  11. data/app/controllers/educode_sales/teacher_follows_controller.rb +1 -93
  12. data/app/controllers/educode_sales/teachers_controller.rb +1 -1
  13. data/app/models/educode_sales/business_export_record.rb +5 -0
  14. data/app/models/educode_sales/customer_add.rb +4 -0
  15. data/app/models/educode_sales/staff.rb +1 -0
  16. data/app/models/educode_sales/staff_school.rb +6 -0
  17. data/app/views/educode_sales/activities/index.html.erb +7 -1
  18. data/app/views/educode_sales/activities/new.html.erb +1 -1
  19. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +4 -4
  20. data/app/views/educode_sales/businesses/edit_plan.html.erb +5 -2
  21. data/app/views/educode_sales/businesses/export_records.html.erb +53 -0
  22. data/app/views/educode_sales/businesses/export_records.json.jbuilder +11 -0
  23. data/app/views/educode_sales/businesses/get_export_data.json.jbuilder +30 -0
  24. data/app/views/educode_sales/businesses/index.html.erb +161 -8
  25. data/app/views/educode_sales/businesses/index.json.jbuilder +10 -7
  26. data/app/views/educode_sales/businesses/new_follow_record.html.erb +6 -5
  27. data/app/views/educode_sales/businesses/show_follow.html.erb +37 -3
  28. data/app/views/educode_sales/businesses/show_follow.json.jbuilder +1 -0
  29. data/app/views/educode_sales/commons/index.html.erb +7 -1
  30. data/app/views/educode_sales/customers/index.html.erb +31 -1
  31. data/app/views/educode_sales/customers/index.json.jbuilder +12 -0
  32. data/app/views/educode_sales/customers/new.html.erb +106 -53
  33. data/app/views/educode_sales/home/staff_schools.json.jbuilder +9 -0
  34. data/app/views/educode_sales/money_plans/index.html.erb +2 -2
  35. data/app/views/educode_sales/roles/edit.html.erb +16 -10
  36. data/app/views/educode_sales/roles/index.html.erb +7 -1
  37. data/app/views/educode_sales/sale_trends/trends.html.erb +96 -44
  38. data/app/views/educode_sales/sale_trends/trends.json.jbuilder +2 -1
  39. data/app/views/educode_sales/sales/index.json.jbuilder +1 -1
  40. data/app/views/educode_sales/staffs/edit.html.erb +46 -5
  41. data/app/views/educode_sales/staffs/index.html.erb +74 -2
  42. data/app/views/educode_sales/staffs/index.json.jbuilder +1 -0
  43. data/app/views/educode_sales/teachers/index.html.erb +1 -1
  44. data/app/views/layouts/educode_sales/application.html.erb +1 -1
  45. data/config/routes.rb +4 -0
  46. data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +7 -0
  47. data/db/migrate/20220121060006_create_educode_sales_business_export_records.rb +10 -0
  48. data/db/migrate/20220125013811_create_educode_sales_staff_schools.rb +10 -0
  49. data/db/migrate/20220125033552_create_educode_sales_customer_adds.rb +9 -0
  50. data/lib/educode_sales/version.rb +1 -1
  51. metadata +12 -2
@@ -1,53 +1,67 @@
1
+ <!--<form class="layui-form layuimini-form" id="custom_data" data-required="true" action="">-->
2
+ <!-- <div class="layui-form-item" style="padding: 25px">-->
3
+ <!-- <div class="layui-inline">-->
4
+ <!-- <label class="layui-form-label required">客户:</label>-->
5
+ <!-- <div class="layui-input-block" style="width: 500px;">-->
6
+ <!-- <input type="text" name="name" lay-verify="required" placeholder="请输入客户" autocomplete="off"-->
7
+ <!-- class="layui-input" id="inputFocus">-->
8
+ <!-- </div>-->
9
+ <!-- </div>-->
10
+ <!-- <br>-->
11
+ <!-- <div class="layui-inline city_input">-->
12
+ <!-- <label class="layui-form-label ">省:</label>-->
13
+ <!-- <div class="layui-input-block" style="width: 500px;">-->
14
+ <!-- <select id="province" class="province layui-input"></select>-->
15
+ <!-- </div>-->
16
+ <!-- </div>-->
17
+ <!-- <br>-->
18
+ <!-- <div class="layui-inline city_input">-->
19
+ <!-- <label class="layui-form-label ">市:</label>-->
20
+ <!-- <div class="layui-input-block" style="width: 500px;">-->
21
+ <!-- <select id="city" class="city layui-input"></select>-->
22
+ <!-- </div>-->
23
+ <!-- </div>-->
24
+ <!-- <br>-->
25
+ <!-- <div class="layui-inline">-->
26
+ <!-- <label class="layui-form-label ">地址:</label>-->
27
+ <!-- <div class="layui-input-block" style="width: 500px;">-->
28
+ <!-- <input type="text" name="address" autocomplete="off"-->
29
+ <!-- class="layui-input" placeholder="请输入地址" >-->
30
+ <!-- </div>-->
31
+ <!-- </div>-->
32
+ <!-- <br>-->
33
+ <!-- <div class="layui-form-item">-->
34
+ <!-- <label class="layui-form-label">学校性质:</label>-->
35
+ <!-- <div class="layui-input-block">-->
36
+ <!-- <input type="checkbox" name="project_985" lay-skin="primary" value="1" title="985工程">-->
37
+ <!-- <input type="checkbox" name="project_211" lay-skin="primary" value="1" title="211工程" >-->
38
+ <!-- <input type="checkbox" name="regular_college" lay-skin="primary" value="1" title="本科院校">-->
39
+ <!-- </div>-->
40
+ <!-- </div>-->
41
+ <!-- <div class="layui-form-item">-->
42
+ <!-- <div class="layui-input-block">-->
43
+ <!-- <input type="checkbox" name="junior_college" lay-skin="primary" value="1" title="大专院校">-->
44
+ <!-- <input type="checkbox" name="secondary_school" lay-skin="primary" value="1" title="中专院校" >-->
45
+ <!-- <input type="checkbox" name="military_school" lay-skin="primary" value="1" title="军事院校">-->
46
+ <!-- </div>-->
47
+ <!-- </div>-->
48
+ <!-- <div class="layui-form-item">-->
49
+ <!-- <div class="layui-input-block">-->
50
+ <!-- <input type="checkbox" name="enterprise" lay-skin="primary" value="1" title="企业">-->
51
+ <!-- </div>-->
52
+ <!-- </div>-->
53
+ <!-- <div class="layui-inline" style="padding-left: 120px">-->
54
+ <!-- <button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="data-reset-btn">提交-->
55
+ <!-- </button>-->
56
+ <!-- </div>-->
57
+ <!-- </div>-->
58
+ <!--</form>-->
1
59
  <form class="layui-form layuimini-form" id="custom_data" data-required="true" action="">
2
60
  <div class="layui-form-item" style="padding: 25px">
3
- <div class="layui-inline">
4
- <label class="layui-form-label required">客户:</label>
5
- <div class="layui-input-block" style="width: 500px;">
6
- <input type="text" name="name" lay-verify="required" placeholder="请输入客户" autocomplete="off"
7
- class="layui-input" id="inputFocus">
8
- </div>
9
- </div>
10
- <br>
11
- <div class="layui-inline city_input">
12
- <label class="layui-form-label ">省:</label>
13
- <div class="layui-input-block" style="width: 500px;">
14
- <select id="province" class="province layui-input"></select>
15
- </div>
16
- </div>
17
- <br>
18
- <div class="layui-inline city_input">
19
- <label class="layui-form-label ">市:</label>
20
- <div class="layui-input-block" style="width: 500px;">
21
- <select id="city" class="city layui-input"></select>
22
- </div>
23
- </div>
24
- <br>
25
- <div class="layui-inline">
26
- <label class="layui-form-label ">地址:</label>
27
- <div class="layui-input-block" style="width: 500px;">
28
- <input type="text" name="address" autocomplete="off"
29
- class="layui-input" placeholder="请输入地址" >
30
- </div>
31
- </div>
32
- <br>
33
- <div class="layui-form-item">
34
- <label class="layui-form-label">学校性质:</label>
35
- <div class="layui-input-block">
36
- <input type="checkbox" name="project_985" lay-skin="primary" value="1" title="985工程">
37
- <input type="checkbox" name="project_211" lay-skin="primary" value="1" title="211工程" >
38
- <input type="checkbox" name="regular_college" lay-skin="primary" value="1" title="本科院校">
39
- </div>
40
- </div>
41
- <div class="layui-form-item">
42
- <div class="layui-input-block">
43
- <input type="checkbox" name="junior_college" lay-skin="primary" value="1" title="大专院校">
44
- <input type="checkbox" name="secondary_school" lay-skin="primary" value="1" title="中专院校" >
45
- <input type="checkbox" name="military_school" lay-skin="primary" value="1" title="军事院校">
46
- </div>
47
- </div>
48
- <div class="layui-form-item">
49
- <div class="layui-input-block">
50
- <input type="checkbox" name="enterprise" lay-skin="primary" value="1" title="企业">
61
+ <div class="layui-form-item" >
62
+ <label class="layui-form-label">学校</label>
63
+ <div class="layui-input-inline" style="">
64
+ <div id="edit_assign_follow" style="width: 1140px;"></div>
51
65
  </div>
52
66
  </div>
53
67
  <div class="layui-inline" style="padding-left: 120px">
@@ -56,10 +70,7 @@
56
70
  </div>
57
71
  </div>
58
72
  </form>
59
-
60
-
61
73
  <script>
62
- document.getElementById("inputFocus").focus();
63
74
 
64
75
  layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'selectInput', 'transfer'], function () {
65
76
  var form = layui.form,
@@ -75,6 +86,39 @@
75
86
  // 当前弹出层,防止ID被覆盖
76
87
  var parentIndex = layer.index;
77
88
 
89
+ var sales_list = xmSelect.render({
90
+ el: '#edit_assign_follow',
91
+ remoteSearch: true,
92
+ autoRow: true,
93
+ // clickClose: true,
94
+ delay: 1000,
95
+ tips: '支持名称/省份搜索,请至少输入一个字符',
96
+ searchTips: '支持名称/省份搜索,请至少输入一个字符',
97
+ paging: true,
98
+ pageRemote: true,
99
+ filterable: true,
100
+ remoteMethod: function (val, cb, show, pageIndex) {
101
+ if(!val){
102
+ return cb([]);
103
+ }
104
+ $.ajax( '/missions/staff_schools', {
105
+ method: 'get',
106
+ data: {
107
+ q: val,
108
+ page: pageIndex
109
+ },
110
+ dataType: 'json',
111
+ success: function (res) {
112
+ var data = res.data;
113
+ if (res.code == 0) {
114
+ cb(res.data, res.count);
115
+ } else {
116
+ layer.msg(res.msg, {time: 2000, icon: 2, shade: 0.01});
117
+ }
118
+ }
119
+ })
120
+ }
121
+ })
78
122
 
79
123
  var dataCustom = [
80
124
  {
@@ -338,8 +382,17 @@
338
382
  });
339
383
  //监听提交
340
384
  form.on('submit(data-reset-btn)', function (data) {
341
- data.field.province = $("#province option:selected").text(); //获取选中的项
342
- data.field.city = $("#city option:selected").text(); //获取选中的项
385
+ var schools = [];
386
+ sales_list.getValue().forEach(function(d) {
387
+ schools.push(d.value);
388
+ })
389
+ if (schools.length == 0) {
390
+ layer.alert("请选择学校");
391
+ return false;
392
+ }
393
+ data.field['school_ids'] = schools;
394
+ // data.field.province = $("#province option:selected").text(); //获取选中的项
395
+ // data.field.city = $("#city option:selected").text(); //获取选中的项
343
396
  console.log(data.field);
344
397
  request.authPost("missions/customers", data.field, function (res) {
345
398
  if (res.success === false) {
@@ -0,0 +1,9 @@
1
+ json.data do
2
+ json.array! @schools do |d|
3
+ json.value d.id
4
+ json.name "#{d.name}-#{d.province}"
5
+ end
6
+ end
7
+ json.count @schools.size
8
+ json.code 0
9
+ json.msg "success"
@@ -28,7 +28,7 @@
28
28
  <div class="layui-inline">
29
29
  <label class="layui-form-label">回款时间</label>
30
30
  <div class="layui-input-inline">
31
- <input type="text" class="layui-input" id="date" name="date" placeholder=" - ">
31
+ <input type="text" class="layui-input" id="date" name="date" placeholder=" - " autocomplete="off">
32
32
  </div>
33
33
  </div>
34
34
  <div class="layui-inline">
@@ -43,7 +43,7 @@
43
43
 
44
44
  <script type="text/html" id="toolbarDemo">
45
45
  <div class="layui-btn-container">
46
- <span class="table-label">回款列表</span>
46
+ <span class="table-label">回款计划</span>
47
47
  </div>
48
48
  </script>
49
49
 
@@ -3,9 +3,9 @@
3
3
  <li class="layui-this">操作权限</li>
4
4
  <li>数据浏览权限</li>
5
5
  </ul>
6
- <div class="layui-tab-content">
7
- <div class="layui-tab-item layui-show">
8
- <form class="layui-form line" action="">
6
+ <div class="layui-tab-content caozuo">
7
+ <div class="layui-tab-item layui-show" style="height: 800px;!important;">
8
+ <form class="layui-form " action="">
9
9
  <% id = 0 %>
10
10
  <% EducodeSales::Permission.all.order(position: :asc).group_by{ |d| d.clazz}.each do |k, d| %>
11
11
  <div class="layui-form-item">
@@ -32,7 +32,7 @@
32
32
  <label class="layui-form-label">商机管理</label>
33
33
  <div class="layui-input-block">
34
34
  <%= radio_button_tag("business", "自己", @areas.include?("商机管理-自己"), {title: '本人创建列表', id: 1}) %>
35
- <%= radio_button_tag("business", "区域", @areas.include?("商机管理-区域"), {title: '本人负责区域列表', id: 2}) %>
35
+ <%= radio_button_tag("business", "区域", @areas.include?("商机管理-区域"), {title: '本人负责区域及监管院校列表', id: 2}) %>
36
36
  <%= radio_button_tag("business", "全部", @areas.include?("商机管理-全部"), {title: '全部列表', id: 3}) %>
37
37
  </div>
38
38
  </div>
@@ -40,7 +40,7 @@
40
40
  <label class="layui-form-label">回款管理</label>
41
41
  <div class="layui-input-block">
42
42
  <%= radio_button_tag("money_plan", "自己", @areas.include?("回款管理-自己"), {title: '本人负责列表', id: 16}) %>
43
- <%= radio_button_tag("money_plan", "区域", @areas.include?("回款管理-区域"), {title: '本人负责区域列表', id: 17}) %>
43
+ <%= radio_button_tag("money_plan", "区域", @areas.include?("回款管理-区域"), {title: '本人负责区域及监管院校列表', id: 17}) %>
44
44
  <%= radio_button_tag("money_plan", "全部", @areas.include?("回款管理-全部"), {title: '全部列表', id: 18}) %>
45
45
  </div>
46
46
  </div>
@@ -48,7 +48,7 @@
48
48
  <label class="layui-form-label">客户管理</label>
49
49
  <div class="layui-input-block">
50
50
  <%= radio_button_tag("customer", "自己", @areas.include?("客户管理-自己"), {title: '本人负责列表', id: 13}) %>
51
- <%= radio_button_tag("customer", "区域", @areas.include?("客户管理-区域"), {title: '本人负责区域列表', id:14}) %>
51
+ <%= radio_button_tag("customer", "区域", @areas.include?("客户管理-区域"), {title: '本人负责区域及监管院校列表', id:14}) %>
52
52
  <%= radio_button_tag("customer", "全部", @areas.include?("客户管理-全部"), {title: '全部列表', id: 15}) %>
53
53
  </div>
54
54
  </div>
@@ -56,7 +56,7 @@
56
56
  <label class="layui-form-label">销售计划</label>
57
57
  <div class="layui-input-block">
58
58
  <%= radio_button_tag("sale_plan", "自己", @areas.include?("销售计划-自己"), {title: '本人创建列表', id: 4}) %>
59
- <%= radio_button_tag("sale_plan", "区域", @areas.include?("销售计划-区域"), {title: '本人负责区域列表', id: 5}) %>
59
+ <%= radio_button_tag("sale_plan", "区域", @areas.include?("销售计划-区域"), {title: '本人负责区域及监管院校列表', id: 5}) %>
60
60
  <%= radio_button_tag("sale_plan", "全部", @areas.include?("销售计划-全部"), {title: '全部列表', id: 6}) %>
61
61
  </div>
62
62
  </div>
@@ -64,7 +64,7 @@
64
64
  <label class="layui-form-label">教师运营</label>
65
65
  <div class="layui-input-block">
66
66
  <%= radio_button_tag("teacher", "自己", @areas.include?("教师运营-自己"), {title: '本人创建列表', id: 7}) %>
67
- <%= radio_button_tag("teacher", "区域", @areas.include?("教师运营-区域"), {title: '本人负责区域列表', id:8}) %>
67
+ <%= radio_button_tag("teacher", "区域", @areas.include?("教师运营-区域"), {title: '本人负责区域及监管院校列表', id:8}) %>
68
68
  <%= radio_button_tag("teacher", "全部", @areas.include?("教师运营-全部"), {title: '全部列表', id: 9}) %>
69
69
  </div>
70
70
  </div>
@@ -72,7 +72,7 @@
72
72
  <label class="layui-form-label">运营计划</label>
73
73
  <div class="layui-input-block">
74
74
  <%= radio_button_tag("operation", "自己", @areas.include?("运营计划-自己"), {title: '本人创建列表', id: 10}) %>
75
- <%= radio_button_tag("operation", "区域", @areas.include?("运营计划-区域"), {title: '本人负责区域列表', id:11}) %>
75
+ <%= radio_button_tag("operation", "区域", @areas.include?("运营计划-区域"), {title: '本人负责区域及监管院校列表', id:11}) %>
76
76
  <%= radio_button_tag("operation", "全部", @areas.include?("运营计划-全部"), {title: '全部列表', id: 12}) %>
77
77
  </div>
78
78
  </div>
@@ -139,4 +139,10 @@
139
139
  })
140
140
  //…
141
141
  });
142
- </script>
142
+ </script>
143
+ <style>
144
+ .caozuo .layui-tab-item {
145
+ width: 100% !important;
146
+ height: 900px !important;
147
+ }
148
+ </style>
@@ -152,4 +152,10 @@
152
152
  }
153
153
  });
154
154
  })
155
- </script>
155
+ </script>
156
+ <style>
157
+ .layui-table-tool-temp{
158
+ padding-right: 0px; !important;
159
+ }
160
+
161
+ </style>
@@ -20,7 +20,7 @@
20
20
  <h5>商机目标</h5>
21
21
  </div>
22
22
  <div class="panel-content y-t-10">
23
- <h1 class="no-margins" id="chance_money_value"><%= @sale_trend.chance_money %>万</h1>
23
+ <h1 class="no-margins" id="chance_money_value"><%=@sale_trend.present? ? @sale_trend.chance_money : EducodeSales::SaleTrend.sum(:chance_money)%>万</h1>
24
24
  <div id="chance_money_field" class="layui-hide">
25
25
  <input type="text" name="chance_money" autocomplete="off"
26
26
  class="layui-input" id="chance_money">
@@ -39,7 +39,7 @@
39
39
  <h5>中标目标</h5>
40
40
  </div>
41
41
  <div class="panel-content y-t-10">
42
- <h1 class="no-margins" id="ballot_money_value"><%= @sale_trend.ballot_money %>万</h1>
42
+ <h1 class="no-margins" id="ballot_money_value"><%=@sale_trend.present? ? @sale_trend.ballot_money : EducodeSales::SaleTrend.sum(:ballot_money)%>万</h1>
43
43
  <div id="ballot_money_field" class="layui-hide">
44
44
  <input type="text" name="ballot_money" autocomplete="off" class="layui-input" id="ballot_money">
45
45
  </div>
@@ -57,7 +57,7 @@
57
57
  <h5>签单目标</h5>
58
58
  </div>
59
59
  <div class="panel-content y-t-10">
60
- <h1 class="no-margins" id="sign_money_value"><%= @sale_trend.sign_money %>万</h1>
60
+ <h1 class="no-margins" id="sign_money_value"><%=@sale_trend.present? ? @sale_trend.sign_money : EducodeSales::SaleTrend.sum(:sign_money)%>万</h1>
61
61
  <div id="sign_money_field" class="layui-hide">
62
62
  <input type="text" name="sign_money" autocomplete="off" class="layui-input" id="sign_money">
63
63
  </div>
@@ -75,7 +75,7 @@
75
75
  <h5>回款目标</h5>
76
76
  </div>
77
77
  <div class="panel-content y-t-10">
78
- <h1 class="no-margins" id="returned_money_value"><%= @sale_trend.returned_money %>万</h1>
78
+ <h1 class="no-margins" id="returned_money_value"><%=@sale_trend.present? ? @sale_trend.returned_money : EducodeSales::SaleTrend.sum(:returned_money)%>万</h1>
79
79
  <div id="returned_money_field" class="layui-hide">
80
80
  <input type="text" name="returned_money" autocomplete="off" class="layui-input" id="returned_money">
81
81
  </div>
@@ -88,7 +88,7 @@
88
88
  <div class="panel layui-bg-number">
89
89
  <div class="panel-body">
90
90
  <div class="panel-title">
91
- <h5>现有商机<a href="/missions/businesses?name=(销售态势-现有商机)" style="color: #0000FF;float: right">查看商机</a></h5>
91
+ <h5>现有商机<a href="/missions/businesses?name=(销售态势-<%=@year %>-现有商机)" style="color: #0000FF;float: right">查看商机</a></h5>
92
92
  </div>
93
93
  <div class="panel-content y-t-10">
94
94
  <h1 class="no-margins"><%= @business_amount %>万</h1>
@@ -195,12 +195,12 @@
195
195
  </div>
196
196
  </form>
197
197
  <br>
198
- <div class="layui-tab layui-tab-card" id="商机跟进数">
198
+ <div class="" id="商机跟进数">
199
199
  <ul class="layui-tab-title">
200
200
  <li class="layui-this">商机跟进数</li>
201
201
  </ul>
202
- <div class="layui-tab-content" style="padding-right: 50px">
203
- <div class="layui-tab-item layui-show " style="padding-left: 20px">
202
+ <div class="" style="padding-right: 50px">
203
+ <div class=" layui-show " style="padding-left: 20px">
204
204
  <div style="margin: 10px 10px 10px 10px">
205
205
  <form class="layui-form layui-form-pane" lay-filter="search_form">
206
206
  <div class="layui-form-item">
@@ -213,10 +213,10 @@
213
213
  <div class="layui-inline">
214
214
  <label class="layui-form-label">时间范围</label>
215
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] %>" >
217
- <input type="text" class="layui-input year layui-hide" id="date_year" name="date_year" placeholder=" - " value="<%=params[:date_year] %>">
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) %>">
219
- <input type="text" class="layui-input day layui-hide" id="date" name="date" placeholder=" - " value="<%=params[:date] %>">
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
220
  </div>
221
221
  </div>
222
222
  <div class="layui-inline">
@@ -232,12 +232,12 @@
232
232
  </div>
233
233
  <br>
234
234
  <br>
235
- <div class="layui-tab layui-tab-card " id="销售额分析" lay-filter="test1">
235
+ <div class=" " id="销售额分析" lay-filter="test1">
236
236
  <ul class="layui-tab-title">
237
237
  <li class="layui-this">销售额分析</li>
238
238
  </ul>
239
- <div class="layui-tab-content" style="padding-right: 50px">
240
- <div class="layui-tab-item layui-show" style="padding-left: 20px">
239
+ <div class="" style="padding-right: 50px">
240
+ <div class=" layui-show" style="padding-left: 20px">
241
241
  <div style="margin: 10px 10px 10px 10px">
242
242
  <form class="layui-form layui-form-pane" lay-filter="search_form">
243
243
  <div class="layui-form-item">
@@ -256,8 +256,8 @@
256
256
  <div class="layui-inline">
257
257
  <label class="layui-form-label">时间范围</label>
258
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") %>">
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] %>">
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
261
  </div>
262
262
  </div>
263
263
  <div class="layui-inline">
@@ -274,12 +274,12 @@
274
274
  </div>
275
275
  <br>
276
276
  <br>
277
- <div class="layui-tab layui-tab-card " id="销售额分析" lay-filter="test1">
277
+ <div class=" " id="销售额分析" lay-filter="test1">
278
278
  <ul class="layui-tab-title">
279
279
  <li class="layui-this">商机区域分布</li>
280
280
  </ul>
281
- <div class="layui-tab-content" style="padding-right: 50px">
282
- <div class="layui-tab-item layui-show" style="padding-left: 20px">
281
+ <div class="" style="padding-right: 50px">
282
+ <div class=" layui-show" style="padding-left: 20px">
283
283
  <div style="margin: 10px 10px 10px 10px">
284
284
  <form class="layui-form layui-form-pane" lay-filter="search_form">
285
285
  <div class="layui-form-item">
@@ -307,6 +307,46 @@
307
307
 
308
308
  </div>
309
309
  </div>
310
+ <div class=" " id="销售人员跟进分析" lay-filter="test1">
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>
347
+
348
+ </div>
349
+ </div>
310
350
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.css">
311
351
  <script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.js"></script>
312
352
  <script>
@@ -329,6 +369,15 @@
329
369
  var element = layui.element;
330
370
  laydate = layui.laydate;
331
371
 
372
+ form.on('select(customer_time_range)', function(data){
373
+ const value = data.value;
374
+ if(value == "diy"){
375
+ $(".diy_range").removeClass("layui-hide")
376
+ }else {
377
+ $(".diy_range").addClass('layui-hide')
378
+ }
379
+ })
380
+
332
381
  if(follow_type == "day"){
333
382
  $(".year").addClass('layui-hide')
334
383
  $(".month").addClass('layui-hide')
@@ -394,6 +443,10 @@
394
443
  elem: '#date',
395
444
  range: true
396
445
  });
446
+ laydate.render({
447
+ elem: '#customer_date',
448
+ range: true
449
+ });
397
450
  laydate.render({
398
451
  elem: '#date_week',
399
452
  range: true
@@ -530,24 +583,21 @@
530
583
  options: opt
531
584
  });
532
585
 
586
+ var ctx = document.getElementById('myChart4');
587
+ var myChart4 = new Chart(ctx, {
588
+ type: 'bar',
589
+ data: <%=raw @customer_data.to_json %>,
590
+ options: opt
591
+ });
592
+
533
593
  $(document).ready(function () {
534
594
  $(".follow_count_bt").click(function () {
535
595
  layer.load(0, {});
536
596
  $.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) {
537
597
  layer.closeAll('loading');
538
598
  var data1 = res.data1;
539
- var ctx = document.getElementById('myChart');
540
- var myChart = new Chart(ctx, {
541
- type: 'line',
542
- data: data1,
543
- options: {
544
- elements: {
545
- line: {
546
- tension: 0
547
- }
548
- }
549
- }
550
- });
599
+ myChart.data = data1
600
+ myChart.update()
551
601
  });
552
602
  });
553
603
  $(".goal_count_bt").click(function () {
@@ -555,12 +605,9 @@
555
605
  $.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) {
556
606
  layer.closeAll('loading');
557
607
  var data2 = res.data2;
558
- var ctx = document.getElementById('myChart2');
559
- var myChart2 = new Chart(ctx, {
560
- type: 'bar',
561
- data: data2,
562
- options: opt
563
- });
608
+ myChart2.data = data2
609
+ myChart2.update()
610
+
564
611
  });
565
612
  });
566
613
  $(".business_bt").click(function () {
@@ -568,12 +615,17 @@
568
615
  $.get('/missions/sale_trends/trends.json?business_count_type=' + $("#business_count_type").val() + '&business_type=' + $("#business_type").val()).done(function(res) {
569
616
  layer.closeAll('loading');
570
617
  var data3 = res.data3;
571
- var ctx = document.getElementById('myChart3');
572
- var myChart3 = new Chart(ctx, {
573
- type: 'bar',
574
- data: data3,
575
- options: opt
576
- });
618
+ myChart3.data = data3
619
+ myChart3.update()
620
+ });
621
+ });
622
+ $(".customer_bt").click(function () {
623
+ layer.load(0, {});
624
+ $.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) {
625
+ layer.closeAll('loading');
626
+ var data4 = res.data4;
627
+ myChart4.data = data4
628
+ myChart4.update()
577
629
  });
578
630
  });
579
631
  });
@@ -1,3 +1,4 @@
1
1
  json.data1 @follow_count_data
2
2
  json.data2 @goal_count_data
3
- json.data3 @business_data
3
+ json.data3 @business_data
4
+ json.data4 @customer_data
@@ -60,7 +60,7 @@ json.data do
60
60
  json.school_count school_count
61
61
  follow_school_count = (EducodeSales::CustomerFollow.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").pluck(:school_id) + EducodeSales::Business.where(id: EducodeSales::FollowUp.where("created_at >= ? AND created_at <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").where(staff_id: d.id).pluck(:business_id).uniq).pluck(:school_id)).uniq.size
62
62
  json.follow_school_count follow_school_count
63
- json.follow_school_counts EducodeSales::CustomerFollow.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01", "#{@year}-12-31").size + EducodeSales::FollowUp.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01", "#{@year}-12-31").size
63
+ json.follow_school_counts EducodeSales::CustomerFollow.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").size + EducodeSales::FollowUp.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").size
64
64
  follow_school_rate = (follow_school_count!=0 ? school_count.to_f * 100 / follow_school_count : 0).round(2)
65
65
  json.follow_school_rate follow_school_rate.to_s + '%'
66
66
  follow_department_rate = (follow_school_count!=0 ? school_count.to_f * 110 / follow_school_count : 0).round(2)