educode_sales 0.5.0 → 0.5.4

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 (68) 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 +13 -6
  4. data/app/controllers/educode_sales/follow_ups_controller.rb +3 -2
  5. data/app/controllers/educode_sales/operation_plans_controller.rb +22 -2
  6. data/app/controllers/educode_sales/operation_reports_controller.rb +33 -3
  7. data/app/controllers/educode_sales/plans_controller.rb +23 -3
  8. data/app/controllers/educode_sales/recycles_controller.rb +95 -0
  9. data/app/controllers/educode_sales/roles_controller.rb +5 -0
  10. data/app/controllers/educode_sales/sale_reports_controller.rb +34 -4
  11. data/app/controllers/educode_sales/sale_trends_controller.rb +171 -0
  12. data/app/controllers/educode_sales/sales_controller.rb +4 -0
  13. data/app/controllers/educode_sales/staffs_controller.rb +4 -4
  14. data/app/controllers/educode_sales/upload_files_controller.rb +33 -26
  15. data/app/models/concerns/deletable.rb +8 -0
  16. data/app/models/educode_sales/application_record.rb +2 -0
  17. data/app/models/educode_sales/business.rb +15 -2
  18. data/app/models/educode_sales/common.rb +2 -1
  19. data/app/models/educode_sales/follow_up.rb +4 -2
  20. data/app/models/educode_sales/recycle.rb +5 -0
  21. data/app/models/educode_sales/sale_plan.rb +3 -0
  22. data/app/models/educode_sales/sale_report.rb +2 -0
  23. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +3 -3
  24. data/app/views/educode_sales/businesses/edit_plan.html.erb +2 -2
  25. data/app/views/educode_sales/businesses/file.html.erb +5 -4
  26. data/app/views/educode_sales/businesses/index.html.erb +18 -3
  27. data/app/views/educode_sales/businesses/new_follow_record.html.erb +6 -2
  28. data/app/views/educode_sales/businesses/show_follow.html.erb +7 -2
  29. data/app/views/educode_sales/businesses/show_follow_record.html.erb +1 -1
  30. data/app/views/educode_sales/businesses/upload_file.html.erb +4 -4
  31. data/app/views/educode_sales/operation_plans/index.html.erb +6 -1
  32. data/app/views/educode_sales/operation_reports/audit.html.erb +14 -6
  33. data/app/views/educode_sales/operation_reports/show.html.erb +13 -10
  34. data/app/views/educode_sales/places/index.html.erb +6 -1
  35. data/app/views/educode_sales/places/index.json.jbuilder +11 -1
  36. data/app/views/educode_sales/plans/index.html.erb +6 -1
  37. data/app/views/educode_sales/recycles/_business.html.erb +122 -0
  38. data/app/views/educode_sales/recycles/_monthPlan.html.erb +123 -0
  39. data/app/views/educode_sales/recycles/_monthly.html.erb +121 -0
  40. data/app/views/educode_sales/recycles/_weekPlan.html.erb +128 -0
  41. data/app/views/educode_sales/recycles/_weekly.html.erb +122 -0
  42. data/app/views/educode_sales/recycles/business.json.jbuilder +16 -0
  43. data/app/views/educode_sales/recycles/index.html.erb +58 -0
  44. data/app/views/educode_sales/recycles/monthPlan.json.jbuilder +16 -0
  45. data/app/views/educode_sales/recycles/monthly.json.jbuilder +15 -0
  46. data/app/views/educode_sales/recycles/weekPlan.json.jbuilder +16 -0
  47. data/app/views/educode_sales/recycles/weekly.json.jbuilder +15 -0
  48. data/app/views/educode_sales/roles/index.html.erb +19 -1
  49. data/app/views/educode_sales/roles/rename.html.erb +50 -0
  50. data/app/views/educode_sales/sale_reports/audit.html.erb +17 -6
  51. data/app/views/educode_sales/sale_reports/show.html.erb +11 -8
  52. data/app/views/educode_sales/sale_trends/trends.html.erb +233 -2
  53. data/app/views/educode_sales/sale_trends/trends.json.jbuilder +14 -0
  54. data/app/views/educode_sales/sales/index.html.erb +75 -9
  55. data/app/views/educode_sales/sales/index.json.jbuilder +35 -1
  56. data/app/views/educode_sales/sales/operations.json.jbuilder +11 -1
  57. data/app/views/educode_sales/staffs/index.html.erb +6 -1
  58. data/app/views/educode_sales/staffs/index.json.jbuilder +11 -1
  59. data/app/views/educode_sales/teachers/add_keys.html.erb +3 -3
  60. data/app/views/educode_sales/teachers/index.html.erb +7 -2
  61. data/app/views/educode_sales/teachers/new.html.erb +1 -0
  62. data/app/views/educode_sales/upload_files/index.json.jbuilder +1 -1
  63. data/app/views/layouts/educode_sales/application.html.erb +3 -0
  64. data/config/routes.rb +18 -0
  65. data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +6 -0
  66. data/db/migrate/20211109015617_create_educode_sales_recycles.rb +25 -0
  67. data/lib/educode_sales/version.rb +1 -1
  68. metadata +20 -2
@@ -20,43 +20,50 @@ module EducodeSales
20
20
  end
21
21
 
22
22
  def create
23
- upload_file = params["file"]
24
- raise "未上传文件" unless upload_file
25
- save_path = File.join("#{Rails.root}/public/images")
26
- ext = file_ext(upload_file.original_filename)
27
- local_path, digest = file_save_to_local(save_path, upload_file.tempfile, ext)
28
- content_type = upload_file.content_type.presence || 'application/octet-stream'
29
- disk_filename = local_path[save_path.size + 1, local_path.size]
30
- @attachment = Attachment.where(disk_filename: disk_filename,
31
- author_id: @current_admin.id).first
32
- if @attachment.blank?
33
- @attachment = Attachment.new
34
- @attachment.filename = upload_file.original_filename
35
- @attachment.description = "business"
36
- @attachment.disk_filename = local_path[save_path.size + 1, local_path.size]
37
- @attachment.filesize = upload_file.tempfile.size
38
- @attachment.content_type = content_type
39
- @attachment.digest = digest
40
- @attachment.author_id = @current_admin.id
41
- @attachment.container_id = params[:business_id]
42
- @attachment.save!
43
- else
44
- logger.info "文件已存在,id = #{@attachment.id}, filename = #{@attachment.filename}"
45
- end
46
- render_success
23
+ folder = File.join(Rails.root, "public", "images", 'educode_sales')
24
+ upload_file = params["file"]
25
+ raise "未上传文件" unless upload_file
26
+ save_path = File.join(folder)
27
+ ext = file_ext(upload_file.original_filename)
28
+ local_path, digest = file_save_to_local(save_path, upload_file.tempfile, ext)
29
+ content_type = upload_file.content_type.presence || 'application/octet-stream'
30
+ disk_filename = local_path[save_path.size + 1, local_path.size]
31
+ @attachment = Attachment.where(disk_filename: disk_filename,
32
+ author_id: @current_admin.user_id).first
33
+ if @attachment.blank?
34
+ @attachment = Attachment.new
35
+ @attachment.filename = upload_file.original_filename
36
+ @attachment.description = "business"
37
+ @attachment.disk_filename = local_path[save_path.size + 1, local_path.size]
38
+ @attachment.filesize = upload_file.tempfile.size
39
+ @attachment.content_type = content_type
40
+ @attachment.digest = digest
41
+ @attachment.author_id = @current_admin.user_id
42
+ @attachment.container_id = params[:business_id]
43
+ @attachment.save!
44
+ else
45
+ logger.info "文件已存在,id = #{@attachment.id}, filename = #{@attachment.filename}"
46
+ end
47
+ render_success
47
48
  end
48
49
 
49
50
  def destroy
51
+ folder = File.join(Rails.root, "public", "images", 'educode_sales')
50
52
  file = Attachment.find(params[:id])
51
53
  file.destroy
52
- File.delete("#{Rails.root}/public/images/" + file.disk_filename)
54
+ File.delete(folder + "/" +file.disk_filename) if FileTest::exist?(folder + "/" +file.disk_filename)
53
55
  render_success
54
56
  end
55
57
 
56
58
  def download
59
+ folder = File.join(Rails.root, "public", "images", 'educode_sales')
57
60
  file = Attachment.find_by_id(params[:id])
58
61
  raise "未找到文件" unless file
59
- send_file("#{Rails.root}/public/images/" + file.disk_filename, filename: file.title, stream: true, type: file.content_type.presence || 'application/octet-stream')
62
+ send_file(folder + "/" +file.disk_filename, filename: file.title, stream: true, type: file.content_type.presence || 'application/octet-stream')
63
+ end
64
+
65
+ def edu_setting name
66
+ EduSetting.get(name)
60
67
  end
61
68
 
62
69
 
@@ -0,0 +1,8 @@
1
+ module Deletable
2
+ extend ActiveSupport::Concern
3
+
4
+ def soft_destroy(user_id)
5
+ self.update(deleted_at: Time.now)
6
+ EducodeSales::Recycle.create(source: self, deleter_id: user_id)
7
+ end
8
+ end
@@ -1,5 +1,7 @@
1
1
  module EducodeSales
2
2
  class ApplicationRecord < ActiveRecord::Base
3
3
  self.abstract_class = true
4
+
5
+
4
6
  end
5
7
  end
@@ -1,10 +1,23 @@
1
1
  module EducodeSales
2
2
  class Business < ApplicationRecord
3
+
3
4
  belongs_to :staff
4
5
  belongs_to :department
5
6
  belongs_to :last_follow_up, class_name: 'FollowUp', optional: true
6
7
 
7
- has_many :sale_plans, dependent: :destroy
8
- has_many :follow_ups, dependent: :destroy
8
+ has_many :sale_plans
9
+ has_many :follow_ups
10
+
11
+ default_scope -> {where(deleted_at: nil)}
12
+
13
+ def soft_destroy(user_id)
14
+ self.update(deleted_at: Time.now)
15
+ self.sale_plans.each do |d|
16
+ d.soft_destroy(user_id)
17
+ end
18
+ self.follow_ups.update_all(deleted_at: Time.now)
19
+ EducodeSales::Recycle.create(source: self, deleter_id: user_id)
20
+ end
21
+
9
22
  end
10
23
  end
@@ -8,6 +8,7 @@ module EducodeSales
8
8
  BTYPE = 'b_class'
9
9
  CTYPE = 'c_class'
10
10
  DTYPE = 'd_class'
11
+ ETYPE = 'e_class'
11
12
 
12
13
  validates :name, uniqueness: {scope: :clazz, message: '已存在'}
13
14
 
@@ -25,7 +26,7 @@ module EducodeSales
25
26
  }
26
27
 
27
28
  def self.job_type_name
28
- self.where(clazz: 'staff_type', name: ['销售', '运营']).pluck(:id, :name).to_h
29
+ self.where(clazz: 'staff_type').pluck(:id, :name).to_h
29
30
  end
30
31
 
31
32
  def self.teacher_source_name
@@ -1,14 +1,16 @@
1
1
  module EducodeSales
2
2
  class FollowUp < ApplicationRecord
3
+ include ::Deletable
3
4
  belongs_to :business, counter_cache: true
4
5
  belongs_to :place, optional: true
5
- has_many :money_plans, dependent: :destroy
6
+ has_many :money_plans
6
7
  has_many :key_person
7
8
  has_many :teachers, through: :key_person
8
- has_many :assign_follow_ups, dependent: :destroy
9
+ has_many :assign_follow_ups
9
10
  belongs_to :staff
10
11
  belongs_to :stage, class_name: 'Common'
11
12
  belongs_to :clazz, class_name: 'Common'
13
+ default_scope -> {where(deleted_at: nil)}
12
14
 
13
15
 
14
16
  end
@@ -0,0 +1,5 @@
1
+ module EducodeSales
2
+ class Recycle < ApplicationRecord
3
+ belongs_to :source, polymorphic: true
4
+ end
5
+ end
@@ -1,9 +1,12 @@
1
1
  module EducodeSales
2
2
  class SalePlan < ApplicationRecord
3
+ include ::Deletable
3
4
  belongs_to :business
4
5
  belongs_to :staff
5
6
  validates :business_id, presence: true
6
7
 
7
8
  validates :month, presence: true
9
+
10
+ default_scope -> {where(deleted_at: nil)}
8
11
  end
9
12
  end
@@ -1,5 +1,7 @@
1
1
  module EducodeSales
2
2
  class SaleReport < ApplicationRecord
3
+ include ::Deletable
3
4
  belongs_to :staff
5
+ default_scope -> {where(deleted_at: nil)}
4
6
  end
5
7
  end
@@ -65,13 +65,13 @@
65
65
  </div>
66
66
  <br>
67
67
  <div class="layui-inline">
68
- <label class="layui-form-label">总额</label>
68
+ <label class="layui-form-label">总额(万)</label>
69
69
  <div class="layui-input-inline">
70
70
  <input name="total_amount" type="number" class="layui-input" value="<%= @follow_up.total_amount %>">
71
71
  </div>
72
72
  </div>
73
73
  <div class="layui-inline">
74
- <label class="layui-form-label">合同额</label>
74
+ <label class="layui-form-label">合同额(万)</label>
75
75
  <div class="layui-input-inline">
76
76
  <input name="actual_amount" type="number" class="layui-input" placeholder="本单位的签单金额" value="<%= @follow_up.actual_amount %>">
77
77
  </div>
@@ -84,7 +84,7 @@
84
84
  </div>
85
85
  </div>
86
86
  <div class="layui-inline">
87
- <label class="layui-form-label">渠道分成</label>
87
+ <label class="layui-form-label">渠道分成(万)</label>
88
88
  <div class="layui-input-inline">
89
89
  <input name="divide_amount" class="layui-input" value="<%= @follow_up.divide_amount%>">
90
90
  </div>
@@ -56,13 +56,13 @@
56
56
  </div>
57
57
  </script>
58
58
  <script type="text/html" id="return_money_tabar">
59
- {{# if(parent.is_latest){ }}
59
+ {{# if(parent.is_latest && parent.flag){ }}
60
60
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">保存</a>
61
61
  <a class="layui-btn layui-btn-danger layui-btn-xs data-count-edit" lay-event="delete">删除</a>
62
62
  {{# } }}
63
63
  </script>
64
64
  <script>
65
- if(!parent.is_latest){
65
+ if(!parent.is_latest || !parent.flag){
66
66
  document.getElementById("show_plan_box").style.display="none";//隐藏
67
67
  }
68
68
  layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'laydate'], function () {
@@ -1,3 +1,4 @@
1
+ <%= Gon::Base.render_data %>
1
2
  <script type="text/html" id="toolbarDemo">
2
3
  <div class="layui-btn-container">
3
4
  <span class="table-label">附件信息</span>
@@ -112,20 +113,20 @@
112
113
  });
113
114
 
114
115
 
115
-
116
116
  table.on('tool(file)', function (obj) {
117
117
  var data = obj.data;
118
118
  var id = data.id
119
119
  name = data.disk_filename
120
+ folder = gon.folder
121
+ console.log(folder);
120
122
  if (obj.event === 'preview') {
121
123
  if (data.content_type.split("/")[0] === "image"){
122
- // var img = "<img src='/images/" + name + "' />";
123
124
  layer.photos({
124
- photos: { "data": [{"src": '/images/'+name}] }
125
+ photos: { "data": [{"src": '/images/educode_sales/' + name}] }
125
126
  ,anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机
126
127
  });
127
128
  }else if (data.content_type.split("/")[1] === "pdf"){
128
- var pdf = '/images/' + name;
129
+ var pdf = '/images/educode_sales/' + name;
129
130
  console.log(pdf);
130
131
  var openWH = miniPage.getOpenWidthHeight();
131
132
  layer.open({
@@ -53,7 +53,7 @@
53
53
  <div class="layui-inline">
54
54
  <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
55
55
  </button>
56
- <button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">搜索
56
+ <button type="submit" id="search_bt" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">搜索
57
57
  </button>
58
58
  </div>
59
59
  </div>
@@ -173,11 +173,13 @@
173
173
  field: 'bidded_date',
174
174
  width: 105,
175
175
  title: '中标时间',
176
+ sort: true
176
177
  },
177
178
  {
178
179
  field: 'signed_date',
179
180
  width: 105,
180
181
  title: '签单时间',
182
+ sort: true
181
183
  },
182
184
  {
183
185
  field: 'reception_at',
@@ -371,6 +373,13 @@
371
373
  });
372
374
  }
373
375
 
376
+ function hn(){
377
+ $("#search_bt").trigger("click");
378
+ }
379
+ $(document).ready(function(){
380
+ window.onload=hn;
381
+ });
382
+
374
383
 
375
384
  var sort = {}, search = {};
376
385
  table.on('sort(businesses_table)', function (obj) {
@@ -388,7 +397,8 @@
388
397
  // 监听搜索操作
389
398
  form.on('submit(search_bussiness)', function (data) {
390
399
  search = data.field
391
- table.reload('businesses_table', {
400
+ console.log(search);
401
+ table.reload('businesses_table', {
392
402
  page: {
393
403
  curr: 1
394
404
  },
@@ -604,4 +614,9 @@
604
614
  });
605
615
 
606
616
  });
607
- </script>
617
+ </script>
618
+ <style>
619
+ .layui-table-tool-temp{
620
+ padding-right: 30px; !important;
621
+ }
622
+ </style>
@@ -90,16 +90,20 @@
90
90
  </div>
91
91
  </div>
92
92
  <div class="layui-inline">
93
- <label class="layui-form-label">渠道分成</label>
93
+ <label class="layui-form-label">渠道分成(万)</label>
94
94
  <div class="layui-input-inline">
95
95
  <input name="divide_amount" class="layui-input" value="<%= @last_follow_up&.divide_amount%>">
96
96
  </div>
97
97
  </div>
98
98
  <div class="layui-form-item">
99
99
  <label class="layui-form-label">指定跟进人</label>
100
- <div class="layui-input-inline">
100
+ <div class="layui-input-inline" style="z-index: 100">
101
101
  <div id="assign_follow" style="width: 512px;"></div>
102
102
  </div>
103
+ <div class="layui-inline" style="padding: 9px 15px">
104
+ <label class="layui-form-label" style="padding-left: 220px"></label>
105
+ 指定跟进人和商机创建者,同时拥有对该商机的管理权限
106
+ </div>
103
107
  </div>
104
108
  <div class="layui-form-item layui-form-text">
105
109
  <label class="layui-form-label required">最新进展</label>
@@ -1,7 +1,6 @@
1
1
  <script type="text/html" id="toolbarDemo_follow">
2
2
  <div class="layui-btn-container">
3
3
  <span class="table-label">跟进记录</span>
4
- <span class="table-label" style="padding-left: 200px">温馨提示:仅可以在24小时之内,编辑/删除最新的跟进记录</span>
5
4
  <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="time_line"> 时间线视图>></button>
6
5
  <% if can? :add_follow, EducodeSales::Business %>
7
6
  <% if @current_admin.is_admin %>
@@ -10,9 +9,10 @@
10
9
  <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add"> 添加跟进记录</button>
11
10
  <% end %>
12
11
  <% end %>
12
+ <span class="table-label pull-right" style="padding-right: 20px">温馨提示:仅可以在24小时之内,编辑/删除最新的跟进记录</span>
13
13
  </div>
14
14
  </script>
15
- <div class="edit-table">
15
+ <div class="edit-table tool">
16
16
  <div class="z-index">
17
17
  <table class="layui-hide" id="sale_plan_follow_table" lay-filter="sale_plan_follow_table"></table>
18
18
  </div>
@@ -289,6 +289,7 @@
289
289
  content = miniPage.getHrefContent('/missions/teachers/add_keys?follow_up_id=' + obj.data.id);
290
290
  openWH = miniPage.getOpenWidthHeight();
291
291
  is_latest = obj.data.is_latest
292
+ flag = obj.data.flag
292
293
  keyindex = layer.open({
293
294
  title: '关键人',
294
295
  type: 1,
@@ -310,6 +311,7 @@
310
311
  content = miniPage.getHrefContent('/missions/businesses/edit_plan');
311
312
  openWH = miniPage.getOpenWidthHeight();
312
313
  is_latest = obj.data.is_latest
314
+ flag = obj.data.flag
313
315
  plan_index = layer.open({
314
316
  title: '回款计划',
315
317
  type: 1,
@@ -533,4 +535,7 @@
533
535
  .z-index .layui-table-tool{
534
536
  z-index: 10000; !important;
535
537
  }
538
+ .tool .layui-table-tool-temp{
539
+ padding-right: 30px; !important;
540
+ }
536
541
  </style>
@@ -75,7 +75,7 @@
75
75
  <div class="layui-inline">
76
76
  <label class="layui-form-label">渠道分成:</label>
77
77
  <div class="layui-input-inline">
78
- <%= @follow_up.divide_amount %>
78
+ <%= @follow_up.divide_amount %>万
79
79
  </div>
80
80
  </div>
81
81
  <div class="ayui-form-item">
@@ -1,5 +1,5 @@
1
1
  <div style="padding-left: 50px">
2
- <button type="button" class="layui-btn" id="file"><i class="layui-icon"></i>选择文件</button>
2
+ <button type="button" class="layui-btn" id="get_file"><i class="layui-icon"></i>选择文件</button>
3
3
  </div>
4
4
  <script>
5
5
  layui.use(['form', 'table', 'upload', 'layer', 'laytpl', 'request', 'selectInput'], function () {
@@ -17,7 +17,7 @@
17
17
  //指定允许上传的文件类型
18
18
  var business_id = parent.id
19
19
  var renderObj = upload.render({
20
- elem: '#file'
20
+ elem: '#get_file'
21
21
  ,url: '/missions/upload_files?business_id='+business_id //此处配置你自己的上传接口即可
22
22
  ,accept: 'file' //普通文件
23
23
  ,headers: {
@@ -28,12 +28,12 @@
28
28
  }
29
29
  ,done: function(res){
30
30
  layer.msg('导入成功');
31
- table.reload('place');
31
+ table.reload('file');
32
32
  layer.closeAll('loading'); //关闭loading
33
33
  layer.close(parent.import_index)
34
34
  }
35
35
  ,error: function(index, upload){
36
- table.reload('place');
36
+ table.reload('file');
37
37
  layer.closeAll('loading'); //关闭loading
38
38
  layer.alert('导入失败,请检查文件格式')
39
39
  layer.close(parent.import_index)
@@ -49,4 +49,9 @@
49
49
 
50
50
  })
51
51
  })
52
- </script>
52
+ </script>
53
+ <style>
54
+ .layui-table-tool-temp{
55
+ padding-right: 30px; !important;
56
+ }
57
+ </style>
@@ -32,7 +32,8 @@
32
32
  3、补充说明需要上级解决的问题和挑战。" disabled class="layui-textarea autosize"><%= @sale_report.content %></textarea>
33
33
  </div>
34
34
  </div>
35
- <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
35
+ <% if can? :level1_audit, EducodeSales::OperationReport %>
36
+ <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
36
37
  <label class="layui-form-label">大区意见</label>
37
38
  <div class="layui-input-block">
38
39
  <textarea name="level1_opinion" placeholder="给出评价、提醒、建议、办法等。"
@@ -40,7 +41,9 @@
40
41
  </div>
41
42
  </div>
42
43
  <div id="weekStar4" style="margin-bottom: 40px"></div>
43
- <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
44
+ <%end %>
45
+ <% if can? :level2_audit, EducodeSales::OperationReport %>
46
+ <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
44
47
  <label class="layui-form-label">总监意见</label>
45
48
  <div class="layui-input-block">
46
49
  <textarea name="level2_opinion" placeholder="给出评价、提醒、建议、办法等。"
@@ -48,7 +51,9 @@
48
51
  </div>
49
52
  </div>
50
53
  <div id="weekStar5" style="margin-bottom: 40px"></div>
51
- <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
54
+ <%end %>
55
+ <% if can? :level3_audit, EducodeSales::OperationReport %>
56
+ <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
52
57
  <label class="layui-form-label">副总意见</label>
53
58
  <div class="layui-input-block">
54
59
  <textarea name="level3_opinion" placeholder="给出评价、提醒、建议、办法等。"
@@ -56,11 +61,14 @@
56
61
  </div>
57
62
  </div>
58
63
  <div id="weekStar6" style="margin-bottom: 40px"></div>
64
+ <%end %>
59
65
  <br>
60
66
  <div class="layui-inline m-t-10">
67
+ <% if (can? :level1_audit, EducodeSales::OperationReport) || (can? :level2_audit, EducodeSales::OperationReport) || (can? :level3_audit, EducodeSales::OperationReport) %>
61
68
  <button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="audit_weekly_report"
62
69
  style="margin-left: 18px">提交
63
70
  </button>
71
+ <%end %>
64
72
  </div>
65
73
  </div>
66
74
  </form>
@@ -85,7 +93,7 @@
85
93
  rate.render({
86
94
  elem: '#weekStar4',
87
95
  half: true,
88
- value: "<%= @sale_report.level1_score %>",
96
+ value: parseFloat("<%= @sale_report.level1_score || 0%>"),
89
97
  length: 5,
90
98
  choose: function(value){
91
99
  level1_score = value
@@ -94,7 +102,7 @@
94
102
  rate.render({
95
103
  elem: '#weekStar5',
96
104
  half: true,
97
- value: "<%= @sale_report.level2_score %>",
105
+ value: parseFloat("<%= @sale_report.level2_score || 0%>"),
98
106
  length: 5,
99
107
  choose: function(value){
100
108
  level2_score = value
@@ -103,7 +111,7 @@
103
111
  rate.render({
104
112
  elem: '#weekStar6',
105
113
  half: true,
106
- value: "<%= @sale_report.level3_score %>",
114
+ value: parseFloat("<%= @sale_report.level3_score || 0%>"),
107
115
  length: 5,
108
116
  choose: function(value){
109
117
  level3_score = value
@@ -31,7 +31,8 @@
31
31
  3、补充说明需要上级解决的问题和挑战。" disabled class="layui-textarea autosize"><%= @sale_report.content %></textarea>
32
32
  </div>
33
33
  </div>
34
- <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
34
+ <% if @sale_report.level1_opinion.present? || @sale_report.level1_score %>
35
+ <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
35
36
  <label class="layui-form-label">大区意见</label>
36
37
  <div class="layui-input-block">
37
38
  <textarea name="desc" placeholder="给出评价、提醒、建议、办法等。" disabled
@@ -39,7 +40,9 @@
39
40
  </div>
40
41
  </div>
41
42
  <div id="weekStar4" style="margin-bottom: 40px"></div>
42
- <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
43
+ <%end %>
44
+ <% if @sale_report.level2_opinion.present? || @sale_report.level2_score %>
45
+ <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
43
46
  <label class="layui-form-label">总监意见</label>
44
47
  <div class="layui-input-block">
45
48
  <textarea name="desc" placeholder="给出评价、提醒、建议、办法等。" disabled
@@ -47,7 +50,9 @@
47
50
  </div>
48
51
  </div>
49
52
  <div id="weekStar5" style="margin-bottom: 40px"></div>
50
- <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
53
+ <%end %>
54
+ <% if @sale_report.level3_opinion.present? || @sale_report.level3_score %>
55
+ <div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
51
56
  <label class="layui-form-label">副总意见</label>
52
57
  <div class="layui-input-block">
53
58
  <textarea name="desc" placeholder="给出评价、提醒、建议、办法等。" disabled
@@ -55,6 +60,7 @@
55
60
  </div>
56
61
  </div>
57
62
  <div id="weekStar6" style="margin-bottom: 40px"></div>
63
+ <%end %>
58
64
  <br>
59
65
  </div>
60
66
  </form>
@@ -78,28 +84,25 @@
78
84
  $ = layui.jquery,
79
85
  miniPage = layui.miniPage,
80
86
  request = layui.request;
81
- table = layui.table;
87
+ table = layui.table
82
88
 
83
89
  rate.render({
84
90
  elem: '#weekStar4',
85
91
  half: true,
86
92
  readonly: true,
87
- value: "<%= @sale_report.level1_score %>",
88
- length: "<%= @sale_report.level1_score %>"
93
+ value: parseFloat("<%= @sale_report.level1_score || 0%>"),
89
94
  })
90
95
  rate.render({
91
96
  elem: '#weekStar5',
92
97
  half: true,
93
98
  readonly: true,
94
- value: "<%= @sale_report.level2_score %>",
95
- length: "<%= @sale_report.level2_score %>"
99
+ value: parseFloat("<%= @sale_report.level2_score || 0%>"),
96
100
  })
97
101
  rate.render({
98
102
  elem: '#weekStar6',
99
103
  half: true,
100
104
  readonly: true,
101
- value: "<%= @sale_report.level3_score %>",
102
- length: "<%= @sale_report.level3_score %>"
105
+ value: parseFloat("<%= @sale_report.level3_score || 0%>"),
103
106
  })
104
107
 
105
108
 
@@ -146,4 +146,9 @@
146
146
  });
147
147
 
148
148
  });
149
- </script>
149
+ </script>
150
+ <style>
151
+ .layui-table-tool-temp{
152
+ padding-right: 0px; !important;
153
+ }
154
+ </style>
@@ -1,8 +1,18 @@
1
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
1
2
  json.data do
2
3
  json.array! @places do |d|
3
4
  json.id d.id
4
5
  json.name d.name
5
- json.area_id d.areas.present? ? d.areas.pluck(:name).join("、") : ''
6
+ # json.area_id d.areas.present? ? d.areas.pluck(:name).join("、") : ''
7
+ if d.areas.present?
8
+ if d.areas.ids.sort.to_s == area_ids
9
+ json.area_id '全国'
10
+ else
11
+ json.area_id d.areas.pluck(:name).join("、")
12
+ end
13
+ else
14
+ json.area_id ''
15
+ end
6
16
  json.businesses_count EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id}").count
7
17
  json.amount EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id} AND educode_sales_follow_ups.stage_id IN (?)", @stage_ids).sum(:profit_amount).round(2)
8
18
  json.return_mount EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id}").sum(:return_money).round(2)
@@ -51,4 +51,9 @@
51
51
 
52
52
  })
53
53
  })
54
- </script>
54
+ </script>
55
+ <style>
56
+ .layui-table-tool-temp{
57
+ padding-right: 30px; !important;
58
+ }
59
+ </style>