educode_sales 0.4.8 → 0.5.2

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 (85) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/educode_sales//345/233/236/346/224/266/347/253/231.png +0 -0
  3. data/app/controllers/educode_sales/businesses_controller.rb +84 -5
  4. data/app/controllers/educode_sales/follow_ups_controller.rb +4 -3
  5. data/app/controllers/educode_sales/home_controller.rb +1 -1
  6. data/app/controllers/educode_sales/operation_plans_controller.rb +34 -6
  7. data/app/controllers/educode_sales/operation_reports_controller.rb +33 -3
  8. data/app/controllers/educode_sales/operations_controller.rb +1 -1
  9. data/app/controllers/educode_sales/plans_controller.rb +43 -15
  10. data/app/controllers/educode_sales/recycles_controller.rb +95 -0
  11. data/app/controllers/educode_sales/roles_controller.rb +5 -0
  12. data/app/controllers/educode_sales/sale_reports_controller.rb +34 -4
  13. data/app/controllers/educode_sales/sale_trends_controller.rb +176 -5
  14. data/app/controllers/educode_sales/sales_controller.rb +6 -2
  15. data/app/controllers/educode_sales/staffs_controller.rb +4 -4
  16. data/app/controllers/educode_sales/upload_files_controller.rb +112 -0
  17. data/app/models/concerns/deletable.rb +8 -0
  18. data/app/models/educode_sales/application_record.rb +2 -0
  19. data/app/models/educode_sales/business.rb +15 -2
  20. data/app/models/educode_sales/common.rb +6 -1
  21. data/app/models/educode_sales/follow_up.rb +4 -2
  22. data/app/models/educode_sales/recycle.rb +5 -0
  23. data/app/models/educode_sales/sale_plan.rb +3 -0
  24. data/app/models/educode_sales/sale_report.rb +2 -0
  25. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +15 -0
  26. data/app/views/educode_sales/businesses/edit_plan.html.erb +2 -2
  27. data/app/views/educode_sales/businesses/file.html.erb +155 -0
  28. data/app/views/educode_sales/businesses/index.html.erb +71 -4
  29. data/app/views/educode_sales/businesses/index.json.jbuilder +3 -1
  30. data/app/views/educode_sales/businesses/new_follow_record.html.erb +22 -1
  31. data/app/views/educode_sales/businesses/show_follow.html.erb +46 -9
  32. data/app/views/educode_sales/businesses/show_follow.json.jbuilder +3 -0
  33. data/app/views/educode_sales/businesses/show_follow_record.html.erb +80 -2
  34. data/app/views/educode_sales/businesses/time_line.html.erb +62 -0
  35. data/app/views/educode_sales/businesses/upload_file.html.erb +43 -0
  36. data/app/views/educode_sales/operation_plans/_monthly.html.erb +4 -4
  37. data/app/views/educode_sales/operation_plans/_weekly.html.erb +4 -4
  38. data/app/views/educode_sales/operation_plans/index.html.erb +6 -1
  39. data/app/views/educode_sales/operation_plans/new_month.html.erb +15 -1
  40. data/app/views/educode_sales/operation_plans/new_week.html.erb +20 -5
  41. data/app/views/educode_sales/operation_reports/audit.html.erb +23 -15
  42. data/app/views/educode_sales/operation_reports/edit.html.erb +9 -9
  43. data/app/views/educode_sales/operation_reports/show.html.erb +22 -19
  44. data/app/views/educode_sales/places/index.html.erb +6 -1
  45. data/app/views/educode_sales/places/index.json.jbuilder +11 -1
  46. data/app/views/educode_sales/plans/_monthly.html.erb +4 -4
  47. data/app/views/educode_sales/plans/_weekly.html.erb +4 -4
  48. data/app/views/educode_sales/plans/index.html.erb +6 -1
  49. data/app/views/educode_sales/plans/new_monthly.html.erb +6 -6
  50. data/app/views/educode_sales/plans/new_week.html.erb +1 -1
  51. data/app/views/educode_sales/plans/new_weekly.html.erb +7 -7
  52. data/app/views/educode_sales/recycles/_business.html.erb +122 -0
  53. data/app/views/educode_sales/recycles/_monthPlan.html.erb +123 -0
  54. data/app/views/educode_sales/recycles/_monthly.html.erb +121 -0
  55. data/app/views/educode_sales/recycles/_weekPlan.html.erb +128 -0
  56. data/app/views/educode_sales/recycles/_weekly.html.erb +122 -0
  57. data/app/views/educode_sales/recycles/business.json.jbuilder +16 -0
  58. data/app/views/educode_sales/recycles/index.html.erb +58 -0
  59. data/app/views/educode_sales/recycles/monthPlan.json.jbuilder +16 -0
  60. data/app/views/educode_sales/recycles/monthly.json.jbuilder +15 -0
  61. data/app/views/educode_sales/recycles/weekPlan.json.jbuilder +16 -0
  62. data/app/views/educode_sales/recycles/weekly.json.jbuilder +15 -0
  63. data/app/views/educode_sales/roles/index.html.erb +19 -1
  64. data/app/views/educode_sales/roles/rename.html.erb +50 -0
  65. data/app/views/educode_sales/sale_reports/audit.html.erb +24 -13
  66. data/app/views/educode_sales/sale_reports/edit.html.erb +7 -7
  67. data/app/views/educode_sales/sale_reports/show.html.erb +13 -10
  68. data/app/views/educode_sales/sale_trends/trends.html.erb +228 -8
  69. data/app/views/educode_sales/sale_trends/trends.json.jbuilder +14 -0
  70. data/app/views/educode_sales/sales/index.html.erb +72 -6
  71. data/app/views/educode_sales/sales/index.json.jbuilder +35 -1
  72. data/app/views/educode_sales/sales/operations.json.jbuilder +11 -1
  73. data/app/views/educode_sales/staffs/index.html.erb +6 -1
  74. data/app/views/educode_sales/staffs/index.json.jbuilder +11 -1
  75. data/app/views/educode_sales/teachers/add_keys.html.erb +3 -3
  76. data/app/views/educode_sales/teachers/index.html.erb +7 -2
  77. data/app/views/educode_sales/teachers/new.html.erb +1 -0
  78. data/app/views/educode_sales/upload_files/index.json.jbuilder +13 -0
  79. data/app/views/layouts/educode_sales/application.html.erb +3 -0
  80. data/config/routes.rb +30 -0
  81. data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +6 -0
  82. data/db/migrate/20211102085743_add_bidded_date_educode_sales_follow_ups.rb +6 -0
  83. data/db/migrate/20211109015617_create_educode_sales_recycles.rb +25 -0
  84. data/lib/educode_sales/version.rb +1 -1
  85. metadata +26 -2
@@ -0,0 +1,16 @@
1
+ json.data do
2
+ json.array! @monthPlans do |d|
3
+ next if EducodeSales::SalePlan.unscoped.find(d.source_id).weekly.present?
4
+ json.id d.id
5
+ json.name EducodeSales::SalePlan.unscoped.find(d.source_id).staff.user.real_name
6
+ json.month EducodeSales::SalePlan.unscoped.find(d.source_id).month.strftime("%Y-%m")
7
+ json.weekly EducodeSales::SalePlan.unscoped.find(d.source_id).weekly
8
+ json.plan EducodeSales::SalePlan.unscoped.find(d.source_id).content
9
+ json.update_at EducodeSales::SalePlan.unscoped.find(d.source_id).updated_at.to_s
10
+ json.deleter EducodeSales::Staff.find(d.deleter_id).user.real_name
11
+ json.delete_time d.created_at.to_s
12
+ end
13
+ end
14
+
15
+ json.code 0
16
+ json.count @monthPlans.total_count
@@ -0,0 +1,15 @@
1
+ json.data do
2
+ json.array! @monthly do |d|
3
+ next if EducodeSales::SaleReport.unscoped.find(d.source_id).weekly.present?
4
+ json.id d.id
5
+ json.name EducodeSales::SaleReport.unscoped.find(d.source_id).staff.user.real_name
6
+ json.month EducodeSales::SaleReport.unscoped.find(d.source_id).month.strftime('%Y-%m')
7
+ json.plan EducodeSales::SaleReport.unscoped.find(d.source_id).content
8
+ json.update_at EducodeSales::SaleReport.unscoped.find(d.source_id).updated_at.to_s
9
+ json.deleter EducodeSales::Staff.find(d.deleter_id).user.real_name
10
+ json.delete_time d.created_at.to_s
11
+ end
12
+ end
13
+
14
+ json.code 0
15
+ json.count @monthly.total_count
@@ -0,0 +1,16 @@
1
+ json.data do
2
+ json.array! @weekPlans do |d|
3
+ next if EducodeSales::SalePlan.unscoped.find(d.source_id).weekly.nil?
4
+ json.id d.id
5
+ json.name EducodeSales::SalePlan.unscoped.find(d.source_id).staff.user.real_name
6
+ json.month EducodeSales::SalePlan.unscoped.find(d.source_id).month.strftime("%Y-%m")
7
+ json.weekly EducodeSales::SalePlan.unscoped.find(d.source_id).weekly
8
+ json.plan EducodeSales::SalePlan.unscoped.find(d.source_id).content
9
+ json.update_at EducodeSales::SalePlan.unscoped.find(d.source_id).updated_at.to_s
10
+ json.deleter EducodeSales::Staff.find(d.deleter_id).user.real_name
11
+ json.delete_time d.created_at.to_s
12
+ end
13
+ end
14
+
15
+ json.code 0
16
+ json.count @weekPlans.total_count
@@ -0,0 +1,15 @@
1
+ json.data do
2
+ json.array! @weekly do |d|
3
+ next if EducodeSales::SaleReport.unscoped.find(d.source_id).weekly.nil?
4
+ json.id d.id
5
+ json.name EducodeSales::SaleReport.unscoped.find(d.source_id).staff.user.real_name
6
+ json.weekly EducodeSales::SaleReport.unscoped.find(d.source_id).weekly
7
+ json.plan EducodeSales::SaleReport.unscoped.find(d.source_id).content
8
+ json.update_at EducodeSales::SaleReport.unscoped.find(d.source_id).updated_at.to_s
9
+ json.deleter EducodeSales::Staff.find(d.deleter_id).user.real_name
10
+ json.delete_time d.created_at.to_s
11
+ end
12
+ end
13
+
14
+ json.code 0
15
+ json.count @weekly.total_count
@@ -8,6 +8,7 @@
8
8
  </div>
9
9
  </script>
10
10
  <script type="text/html" id="role_bar">
11
+ <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="rename">重命名</a>
11
12
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
12
13
  <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
13
14
  </script>
@@ -35,7 +36,6 @@
35
36
  field: 'name',
36
37
  title: '角色',
37
38
  width: 120,
38
- edit: 'text'
39
39
  }, {
40
40
  field: 'permissions',
41
41
  title: '模块浏览权限',
@@ -124,6 +124,24 @@
124
124
  layer.full(index);
125
125
  });
126
126
  return false;
127
+ }else if (obj.event === 'rename') {
128
+ id = data.id
129
+ var content = miniPage.getHrefContent('/missions/roles/rename?id='+id);
130
+ var openWH = miniPage.getOpenWidthHeight();
131
+ rename_index = layer.open({
132
+ title: '重命名',
133
+ type: 1,
134
+ shade: 0.2,
135
+ maxmin: true,
136
+ shadeClose: true,
137
+ area: [openWH[0] + 'px', openWH[1] + 'px'],
138
+ offset: [openWH[2] + 'px', openWH[3] + 'px'],
139
+ content: content,
140
+ });
141
+ $(window).on("resize", function () {
142
+ layer.full(index);
143
+ });
144
+ return false;
127
145
  } else if (obj.event === 'delete') {
128
146
  layer.confirm('确定删除' + data.name, function (index) {
129
147
  request.delete('missions/roles/'+ data.id, {}, function(res) {
@@ -0,0 +1,50 @@
1
+ <form class="layui-form " 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="line-height: 36px;">
6
+ <input type="text" name="name" id="name" required lay-verify="required" autocomplete="off"
7
+ class="layui-input" value="<%=@name %>">
8
+ </div>
9
+ </div>
10
+ <div class="layui-inline" style="padding-left: 30px">
11
+ <button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="submits">提交
12
+ </button>
13
+ </div>
14
+ </div>
15
+ </form>
16
+
17
+
18
+ <script>
19
+
20
+ layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'selectInput', 'transfer'], function () {
21
+ var form = layui.form,
22
+ layer = layui.layer,
23
+ table = layui.table,
24
+ transfer = layui.transfer,
25
+ laytpl = layui.laytpl,
26
+ request = layui.request,
27
+ $ = layui.$;
28
+
29
+ form.render();
30
+
31
+ // 当前弹出层,防止ID被覆盖
32
+ var parentIndex = layer.index;
33
+
34
+ //监听提交
35
+ form.on('submit(submits)', function (data) {
36
+ console.log(data);
37
+ request.authPut('missions/roles/' + parent.id + '/update_role/', data.field,
38
+ function(res) {
39
+ if (res.success) {
40
+ table.reload('role');
41
+ layer.close(parent.rename_index)
42
+ } else {
43
+ layer.alert(res.msg)
44
+ }
45
+
46
+ })
47
+ return false;
48
+ });
49
+ });
50
+ </script>
@@ -36,7 +36,8 @@
36
36
  3、补充说明需要上级解决的问题和挑战。" disabled class="layui-textarea autosize"><%= @sale_report.content %></textarea>
37
37
  </div>
38
38
  </div>
39
- <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
39
+ <% if can? :level1_audit, EducodeSales::SaleReport %>
40
+ <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
40
41
  <label class="layui-form-label">大区意见</label>
41
42
  <div class="layui-input-block">
42
43
  <textarea name="level1_opinion" placeholder="给出评价、提醒、建议、办法等。"
@@ -44,7 +45,10 @@
44
45
  </div>
45
46
  </div>
46
47
  <div id="weekStar4" style="margin-bottom: 40px"></div>
47
- <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
48
+ <% end %>
49
+
50
+ <% if can? :level2_audit, EducodeSales::SaleReport %>
51
+ <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
48
52
  <label class="layui-form-label">总监意见</label>
49
53
  <div class="layui-input-block">
50
54
  <textarea name="level2_opinion" placeholder="给出评价、提醒、建议、办法等。"
@@ -52,7 +56,10 @@
52
56
  </div>
53
57
  </div>
54
58
  <div id="weekStar5" style="margin-bottom: 40px"></div>
55
- <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
59
+ <% end %>
60
+
61
+ <% if can? :level3_audit, EducodeSales::SaleReport %>
62
+ <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
56
63
  <label class="layui-form-label">副总意见</label>
57
64
  <div class="layui-input-block">
58
65
  <textarea name="level3_opinion" placeholder="给出评价、提醒、建议、办法等。"
@@ -60,11 +67,15 @@
60
67
  </div>
61
68
  </div>
62
69
  <div id="weekStar6" style="margin-bottom: 40px"></div>
70
+ <% end %>
71
+
63
72
  <br>
64
73
  <div class="layui-inline m-t-10">
74
+ <% if (can? :level1_audit, EducodeSales::SaleReport) || (can? :level2_audit, EducodeSales::SaleReport) || (can? :level3_audit, EducodeSales::SaleReport) %>
65
75
  <button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="audit_weekly_report"
66
76
  style="margin-left: 18px">提交
67
77
  </button>
78
+ <% end %>
68
79
  </div>
69
80
  </div>
70
81
  </form>
@@ -89,7 +100,7 @@
89
100
  rate.render({
90
101
  elem: '#weekStar4',
91
102
  half: true,
92
- value: "<%= @sale_report.level1_score %>",
103
+ value: parseFloat("<%= @sale_report.level1_score || 0%>"),
93
104
  length: 5,
94
105
  choose: function(value){
95
106
  level1_score = value
@@ -98,7 +109,7 @@
98
109
  rate.render({
99
110
  elem: '#weekStar5',
100
111
  half: true,
101
- value: "<%= @sale_report.level2_score %>",
112
+ value: parseFloat("<%= @sale_report.level2_score || 0%>"),
102
113
  length: 5,
103
114
  choose: function(value){
104
115
  level2_score = value
@@ -107,7 +118,7 @@
107
118
  rate.render({
108
119
  elem: '#weekStar6',
109
120
  half: true,
110
- value: "<%= @sale_report.level3_score %>",
121
+ value: parseFloat("<%= @sale_report.level3_score || 0%>"),
111
122
  length: 5,
112
123
  choose: function(value){
113
124
  level3_score = value
@@ -171,38 +182,38 @@
171
182
  },
172
183
  {
173
184
  field: 'staff',
174
- width: 120,
185
+ width: 80,
175
186
  title: '姓名'
176
187
  },
177
188
  {
178
189
  field: 'business_name',
179
- width: 270,
190
+ width: 170,
180
191
  title: '商机名称',
181
192
  },
182
193
  {
183
194
  field: 'school',
184
- width: 200,
195
+ width: 170,
185
196
  title: '单位'
186
197
  },
187
198
  {
188
199
  field: 'department',
189
- width: 190,
200
+ width: 170,
190
201
  title: '部门'
191
202
  },
192
203
  {
193
204
  field: 'weekly',
194
- width: 100,
205
+ width: 80,
195
206
  title: '周次',
196
207
  },
197
208
  {
198
209
  field: 'follow_ups_count',
199
- width: 100,
210
+ width: 80,
200
211
  title: '跟进',
201
212
  templet: '#show_follow'
202
213
  },
203
214
  {
204
215
  field: 'finish_rate',
205
- width: 100,
216
+ width: 80,
206
217
  title: '完成率',
207
218
  },
208
219
  {
@@ -108,38 +108,38 @@
108
108
  },
109
109
  {
110
110
  field: 'staff',
111
- width: 120,
111
+ width: 80,
112
112
  title: '姓名'
113
113
  },
114
114
  {
115
115
  field: 'business_name',
116
- width: 270,
116
+ width: 170,
117
117
  title: '商机名称',
118
118
  },
119
119
  {
120
120
  field: 'school',
121
- width: 200,
121
+ width: 170,
122
122
  title: '单位'
123
123
  },
124
124
  {
125
125
  field: 'department',
126
- width: 190,
126
+ width: 170,
127
127
  title: '部门'
128
128
  },
129
129
  {
130
130
  field: 'weekly',
131
- width: 100,
131
+ width: 80,
132
132
  title: '周次',
133
133
  },
134
134
  {
135
135
  field: 'follow_ups_count',
136
- width: 100,
136
+ width: 80,
137
137
  title: '跟进',
138
138
  templet: '#show_follow'
139
139
  },
140
140
  {
141
141
  field: 'finish_rate',
142
- width: 100,
142
+ width: 80,
143
143
  title: '完成率',
144
144
  },
145
145
  {
@@ -35,6 +35,7 @@
35
35
  3、补充说明需要上级解决的问题和挑战。" disabled class="layui-textarea autosize"><%= @sale_report.content %></textarea>
36
36
  </div>
37
37
  </div>
38
+ <% if @sale_report.level1_opinion.present? || @sale_report.level1_score %>
38
39
  <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
39
40
  <label class="layui-form-label">大区意见</label>
40
41
  <div class="layui-input-block">
@@ -43,7 +44,9 @@
43
44
  </div>
44
45
  </div>
45
46
  <div id="weekStar4" style="margin-bottom: 40px"></div>
46
- <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
47
+ <%end %>
48
+ <% if @sale_report.level2_opinion.present? || @sale_report.level2_score %>
49
+ <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
47
50
  <label class="layui-form-label">总监意见</label>
48
51
  <div class="layui-input-block">
49
52
  <textarea name="desc" placeholder="给出评价、提醒、建议、办法等。" disabled
@@ -51,7 +54,9 @@
51
54
  </div>
52
55
  </div>
53
56
  <div id="weekStar5" style="margin-bottom: 40px"></div>
54
- <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
57
+ <%end %>
58
+ <% if @sale_report.level3_opinion.present? || @sale_report.level3_score %>
59
+ <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
55
60
  <label class="layui-form-label">副总意见</label>
56
61
  <div class="layui-input-block">
57
62
  <textarea name="desc" placeholder="给出评价、提醒、建议、办法等。" disabled
@@ -59,6 +64,7 @@
59
64
  </div>
60
65
  </div>
61
66
  <div id="weekStar6" style="margin-bottom: 40px"></div>
67
+ <%end %>
62
68
  <br>
63
69
  </div>
64
70
  </form>
@@ -78,22 +84,19 @@
78
84
  elem: '#weekStar4',
79
85
  half: true,
80
86
  readonly: true,
81
- value: "<%= @sale_report.level1_score %>",
82
- length: "<%= @sale_report.level1_score %>"
87
+ value: parseFloat("<%= @sale_report.level1_score || 0%>"),
83
88
  })
84
89
  rate.render({
85
90
  elem: '#weekStar5',
86
91
  half: true,
87
92
  readonly: true,
88
- value: "<%= @sale_report.level2_score %>",
89
- length: "<%= @sale_report.level2_score %>"
93
+ value: parseFloat("<%= @sale_report.level2_score || 0%> "),
90
94
  })
91
95
  rate.render({
92
96
  elem: '#weekStar6',
93
97
  half: true,
94
98
  readonly: true,
95
- value: "<%= @sale_report.level3_score %>",
96
- length: "<%= @sale_report.level3_score %>"
99
+ value: parseFloat("<%= @sale_report.level3_score || 0%>"),
97
100
  })
98
101
 
99
102
  table.on('tool(showWeeklyTable)', function (obj) {
@@ -136,12 +139,12 @@
136
139
  },
137
140
  {
138
141
  field: 'business_name',
139
- width: 150,
142
+ width: 170,
140
143
  title: '商机名称',
141
144
  },
142
145
  {
143
146
  field: 'school',
144
- width: 120,
147
+ width: 170,
145
148
  title: '单位'
146
149
  },
147
150
  {