educode_sales 0.4.7 → 0.5.1

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 (76) 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 +81 -5
  4. data/app/controllers/educode_sales/follow_ups_controller.rb +2 -2
  5. data/app/controllers/educode_sales/home_controller.rb +1 -1
  6. data/app/controllers/educode_sales/operation_plans_controller.rb +12 -4
  7. data/app/controllers/educode_sales/operations_controller.rb +1 -1
  8. data/app/controllers/educode_sales/plans_controller.rb +26 -18
  9. data/app/controllers/educode_sales/recycles_controller.rb +95 -0
  10. data/app/controllers/educode_sales/sale_reports_controller.rb +1 -1
  11. data/app/controllers/educode_sales/sale_trends_controller.rb +6 -6
  12. data/app/controllers/educode_sales/sales_controller.rb +2 -2
  13. data/app/controllers/educode_sales/staffs_controller.rb +4 -4
  14. data/app/controllers/educode_sales/upload_files_controller.rb +105 -0
  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 +4 -0
  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 +4 -0
  22. data/app/models/educode_sales/sale_report.rb +2 -0
  23. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +15 -0
  24. data/app/views/educode_sales/businesses/edit_plan.html.erb +2 -2
  25. data/app/views/educode_sales/businesses/file.html.erb +154 -0
  26. data/app/views/educode_sales/businesses/index.html.erb +65 -3
  27. data/app/views/educode_sales/businesses/index.json.jbuilder +3 -1
  28. data/app/views/educode_sales/businesses/new_follow_record.html.erb +22 -1
  29. data/app/views/educode_sales/businesses/show_follow.html.erb +54 -12
  30. data/app/views/educode_sales/businesses/show_follow.json.jbuilder +3 -0
  31. data/app/views/educode_sales/businesses/show_follow_record.html.erb +80 -2
  32. data/app/views/educode_sales/businesses/time_line.html.erb +62 -0
  33. data/app/views/educode_sales/businesses/upload_file.html.erb +43 -0
  34. data/app/views/educode_sales/operation_plans/_monthly.html.erb +4 -4
  35. data/app/views/educode_sales/operation_plans/_weekly.html.erb +4 -4
  36. data/app/views/educode_sales/operation_plans/edit_month.html.erb +6 -6
  37. data/app/views/educode_sales/operation_plans/edit_week.html.erb +7 -7
  38. data/app/views/educode_sales/operation_plans/new_month.html.erb +17 -2
  39. data/app/views/educode_sales/operation_plans/new_week.html.erb +21 -6
  40. data/app/views/educode_sales/operation_reports/audit.html.erb +20 -14
  41. data/app/views/educode_sales/operation_reports/edit.html.erb +11 -11
  42. data/app/views/educode_sales/operation_reports/show.html.erb +20 -14
  43. data/app/views/educode_sales/plans/_monthly.html.erb +4 -4
  44. data/app/views/educode_sales/plans/_weekly.html.erb +4 -4
  45. data/app/views/educode_sales/plans/edit_month.html.erb +6 -6
  46. data/app/views/educode_sales/plans/edit_week.html.erb +7 -7
  47. data/app/views/educode_sales/plans/new_month.html.erb +1 -1
  48. data/app/views/educode_sales/plans/new_monthly.html.erb +6 -6
  49. data/app/views/educode_sales/plans/new_week.html.erb +2 -2
  50. data/app/views/educode_sales/plans/new_weekly.html.erb +7 -7
  51. data/app/views/educode_sales/recycles/_business.html.erb +122 -0
  52. data/app/views/educode_sales/recycles/_monthPlan.html.erb +123 -0
  53. data/app/views/educode_sales/recycles/_monthly.html.erb +121 -0
  54. data/app/views/educode_sales/recycles/_weekPlan.html.erb +128 -0
  55. data/app/views/educode_sales/recycles/_weekly.html.erb +122 -0
  56. data/app/views/educode_sales/recycles/business.json.jbuilder +16 -0
  57. data/app/views/educode_sales/recycles/index.html.erb +58 -0
  58. data/app/views/educode_sales/recycles/monthPlan.json.jbuilder +16 -0
  59. data/app/views/educode_sales/recycles/monthly.json.jbuilder +15 -0
  60. data/app/views/educode_sales/recycles/weekPlan.json.jbuilder +16 -0
  61. data/app/views/educode_sales/recycles/weekly.json.jbuilder +15 -0
  62. data/app/views/educode_sales/sale_reports/audit.html.erb +21 -12
  63. data/app/views/educode_sales/sale_reports/edit.html.erb +9 -9
  64. data/app/views/educode_sales/sale_reports/show.html.erb +12 -6
  65. data/app/views/educode_sales/sale_trends/trends.html.erb +6 -6
  66. data/app/views/educode_sales/teachers/add_keys.html.erb +2 -2
  67. data/app/views/educode_sales/teachers/index.html.erb +1 -1
  68. data/app/views/educode_sales/teachers/show_follow.html.erb +9 -3
  69. data/app/views/educode_sales/upload_files/index.json.jbuilder +13 -0
  70. data/app/views/layouts/educode_sales/application.html.erb +3 -0
  71. data/config/routes.rb +27 -0
  72. data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +6 -0
  73. data/db/migrate/20211102085743_add_bidded_date_educode_sales_follow_ups.rb +6 -0
  74. data/db/migrate/20211109015617_create_educode_sales_recycles.rb +25 -0
  75. data/lib/educode_sales/version.rb +1 -1
  76. metadata +24 -2
@@ -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
@@ -4,6 +4,10 @@ module EducodeSales
4
4
 
5
5
  XTYPE = "x_class"
6
6
  OTYPE = 'o_class'
7
+ ATYPE = 'a_class'
8
+ BTYPE = 'b_class'
9
+ CTYPE = 'c_class'
10
+ DTYPE = 'd_class'
7
11
 
8
12
  validates :name, uniqueness: {scope: :clazz, message: '已存在'}
9
13
 
@@ -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,8 +1,12 @@
1
1
  module EducodeSales
2
2
  class SalePlan < ApplicationRecord
3
+ include ::Deletable
3
4
  belongs_to :business
4
5
  belongs_to :staff
6
+ validates :business_id, presence: true
5
7
 
6
8
  validates :month, presence: true
9
+
10
+ default_scope -> {where(deleted_at: nil)}
7
11
  end
8
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
@@ -41,6 +41,21 @@
41
41
  id="invitation_at_edit" placeholder="请选择日期">
42
42
  </div>
43
43
  </div>
44
+ <div class="layui-inline">
45
+ <label class="layui-form-label">中标时间</label>
46
+ <div class="layui-input-inline">
47
+ <input type="text" class="layui-input" value="<%= @follow_up.bidded_date %>" name="bidded_date"
48
+ id="invitation_at_edit" placeholder="请选择日期">
49
+ </div>
50
+ </div>
51
+ <br>
52
+ <div class="layui-inline">
53
+ <label class="layui-form-label">签单时间</label>
54
+ <div class="layui-input-inline">
55
+ <input type="text" class="layui-input" value="<%= @follow_up.signed_date %>" name="signed_date"
56
+ id="invitation_at_edit" placeholder="请选择日期">
57
+ </div>
58
+ </div>
44
59
  <div class="layui-inline">
45
60
  <label class="layui-form-label">验收时间</label>
46
61
  <div class="layui-input-inline">
@@ -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 () {
@@ -0,0 +1,154 @@
1
+ <script type="text/html" id="toolbarDemo">
2
+ <div class="layui-btn-container">
3
+ <span class="table-label">附件信息</span>
4
+ <%# if can? :create, EducodeSales::file %>
5
+ <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="upload_file">上传文件</button>
6
+ <%# end %>
7
+ </div>
8
+ </script>
9
+
10
+ <table class="layui-hide" id="file" lay-filter="file"></table>
11
+
12
+ <script type="text/html" id="currentTableBar_file">
13
+ <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="preview">预览</a>
14
+ <a href="/missions/upload_files/download?id={{d.id}}" class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="download">下载</a>
15
+ <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
16
+ </script>
17
+
18
+ <script type="text/html" id="showchance">
19
+ <a href="/missions/businesses" class="layui-table-link">{{ d.chance }}</a>
20
+ </script>
21
+
22
+ <script>
23
+ layui.use(['form', 'table', 'miniPage', 'element', 'request'], function () {
24
+ var $ = layui.jquery,
25
+ form = layui.form,
26
+ table = layui.table,
27
+ request = layui.request,
28
+ upload = layui.upload;
29
+ miniPage = layui.miniPage;
30
+
31
+
32
+ var business_id = parent.id
33
+ table.render({
34
+ elem: '#file',
35
+ url: '/missions/upload_files?business_id='+business_id,
36
+ toolbar: '#toolbarDemo',
37
+ defaultToolbar: [],
38
+ cols: [
39
+ [
40
+ {
41
+ field: 'id',
42
+ width: 80,
43
+ title:'序号',type: 'numbers',
44
+ },
45
+ {
46
+ field: 'name',
47
+ title: '文件名'
48
+ },
49
+ {
50
+ field: 'size',
51
+ width: 100,
52
+ title: '文件大小',
53
+ },
54
+ {
55
+ field: 'created_on',
56
+ width: 200,
57
+ title: '上传时间',
58
+ sort: true
59
+ },
60
+ {
61
+ field: 'upload_person',
62
+ width: 80,
63
+ totalRow:true,
64
+ title: '上传人',
65
+ },
66
+ {
67
+ title: '操作',
68
+ width: 200,
69
+ toolbar: '#currentTableBar_file',
70
+ align: "center"
71
+ }
72
+ ]
73
+ ],
74
+ limit: 20,
75
+ limits: [10,15,20,30,40,50,60,70,80,90],
76
+ page: true
77
+ });
78
+
79
+
80
+ var sort = {};
81
+ table.on('sort(file)', function (obj) {
82
+ sort.field = obj.field;
83
+ sort.order = obj.type;
84
+ table.reload('file', {
85
+ initSort: obj,
86
+ where: {
87
+ sort: sort
88
+ }
89
+ });
90
+ })
91
+
92
+
93
+ table.on('toolbar(file)', function (obj) {
94
+ if (obj.event === 'upload_file') { //
95
+ id =parent.id
96
+ var content = miniPage.getHrefContent('/missions/businesses/upload_file');
97
+ var openWH = miniPage.getOpenWidthHeight();
98
+ import_index = layer.open({
99
+ title: '上传文件',
100
+ type: 1,
101
+ shade: 0.2,
102
+ shadeClose: true,
103
+ area: ['200px', '100px'],
104
+ offset: 'auto',
105
+ closeBtn: 0,
106
+ content: content,
107
+ });
108
+ $(window).on("resize", function () {
109
+ layer.full(index);
110
+ });
111
+ }
112
+ });
113
+
114
+
115
+
116
+ table.on('tool(file)', function (obj) {
117
+ var data = obj.data;
118
+ var id = data.id
119
+ name = data.disk_filename
120
+ if (obj.event === 'preview') {
121
+ if (data.content_type.split("/")[0] === "image"){
122
+ // var img = "<img src='/images/" + name + "' />";
123
+ layer.photos({
124
+ photos: { "data": [{"src": '/images/'+name}] }
125
+ ,anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机
126
+ });
127
+ }else if (data.content_type.split("/")[1] === "pdf"){
128
+ var pdf = '/images/' + name;
129
+ console.log(pdf);
130
+ var openWH = miniPage.getOpenWidthHeight();
131
+ layer.open({
132
+ title: data.name,
133
+ type: 2,
134
+ area: ['1000px', '750px'],
135
+ fixed: false, //不固定
136
+ maxmin: true,
137
+ content: pdf
138
+ });
139
+ }else{
140
+ layer.msg("附件不支持预览,请下载查看!")
141
+ }
142
+ return false;
143
+ }else if (obj.event === 'delete') {
144
+ layer.confirm('确定删除' + data.name, function (index) {
145
+ request.delete('missions/upload_files/' + data.id + '?disk_filename=' + data.disk_filename, {}, function (res) {
146
+ layer.close(index);
147
+ table.reload("file")
148
+ })
149
+ });
150
+ }
151
+ });
152
+
153
+ });
154
+ </script>
@@ -5,7 +5,7 @@
5
5
  <div class="layui-inline">
6
6
  <label class="layui-form-label">商机名称</label>
7
7
  <div class="layui-input-inline">
8
- <input type="text" name="name" autocomplete="off" class="layui-input">
8
+ <input type="text" name="name" autocomplete="off" class="layui-input" value="<%=params[:name] %>">
9
9
  </div>
10
10
  </div>
11
11
  <div class="layui-inline">
@@ -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>
@@ -169,6 +169,18 @@
169
169
  title: '招标时间',
170
170
  sort: true
171
171
  },
172
+ {
173
+ field: 'bidded_date',
174
+ width: 105,
175
+ title: '中标时间',
176
+ sort: true
177
+ },
178
+ {
179
+ field: 'signed_date',
180
+ width: 105,
181
+ title: '签单时间',
182
+ sort: true
183
+ },
172
184
  {
173
185
  field: 'reception_at',
174
186
  width: 105,
@@ -248,6 +260,12 @@
248
260
  case 'edit':
249
261
  edit(id);
250
262
  break;
263
+ case 'file':
264
+ file(id, elem.data('name'));
265
+ break;
266
+ case 'time_line':
267
+ time_line(id, elem.data('name'));
268
+ break;
251
269
  case 'delete':
252
270
  deleteBusiness(id, elem.data('name'));
253
271
  break;
@@ -292,6 +310,41 @@
292
310
  layer.full(sindex);
293
311
  });
294
312
  }
313
+ function time_line(id,name) {
314
+ var content = miniPage.getHrefContent('/missions/businesses/time_line?business_id=' + id);
315
+ var openWH = miniPage.getOpenWidthHeight();
316
+ sindex = layer.open({
317
+ title: '商机列表/'+name+'的跟进时间线',
318
+ type: 1,
319
+ shade: 0.2,
320
+ maxmin: true,
321
+ shadeClose: true,
322
+ area: [openWH[0] + 'px', openWH[1] + 'px'],
323
+ offset: [openWH[2] + 'px', openWH[3] + 'px'],
324
+ content: content
325
+ });
326
+ $(window).on("resize", function () {
327
+ layer.full(sindex);
328
+ });
329
+ }
330
+ function file(id, name) {
331
+ id = id
332
+ var content = miniPage.getHrefContent('/missions/businesses/file?business_id=' + id);
333
+ var openWH = miniPage.getOpenWidthHeight();
334
+ sindex = layer.open({
335
+ title: '商机列表/'+name+'的附件信息',
336
+ type: 1,
337
+ shade: 0.2,
338
+ // maxmin: true,
339
+ shadeClose: true,
340
+ area: [openWH[0] + 'px', openWH[1] + 'px'],
341
+ offset: [openWH[2] + 'px', openWH[3] + 'px'],
342
+ content: content
343
+ });
344
+ $(window).on("resize", function () {
345
+ // layer.full(sindex);
346
+ });
347
+ }
295
348
 
296
349
  function month(id) {
297
350
  var content = miniPage.getHrefContent('/missions/plans/new_month?business_id=' + id);
@@ -320,6 +373,13 @@
320
373
  });
321
374
  }
322
375
 
376
+ function hn(){
377
+ $("#search_bt").trigger("click");
378
+ }
379
+ $(document).ready(function(){
380
+ window.onload=hn;
381
+ });
382
+
323
383
 
324
384
  var sort = {}, search = {};
325
385
  table.on('sort(businesses_table)', function (obj) {
@@ -337,7 +397,8 @@
337
397
  // 监听搜索操作
338
398
  form.on('submit(search_bussiness)', function (data) {
339
399
  search = data.field
340
- table.reload('businesses_table', {
400
+ console.log(search);
401
+ table.reload('businesses_table', {
341
402
  page: {
342
403
  curr: 1
343
404
  },
@@ -533,6 +594,7 @@
533
594
  });
534
595
  } else if (obj.event === 'show_follow') {
535
596
  business_id = obj.data.id
597
+ business_name = data.name
536
598
  content = miniPage.getHrefContent('/missions/businesses/show_follow?id=' + id);
537
599
  openWH = miniPage.getOpenWidthHeight();
538
600
  index = layer.open({
@@ -14,6 +14,8 @@ json.data do
14
14
  json.stage d.last_follow_up&.stage&.name
15
15
  json.invitation_at d.last_follow_up&.invitation_at.to_s
16
16
  json.reception_at d.last_follow_up&.reception_at.to_s
17
+ json.bidded_date d.last_follow_up&.bidded_date.to_s
18
+ json.signed_date d.last_follow_up&.signed_date.to_s
17
19
  json.total_amount d.last_follow_up&.total_amount
18
20
  json.return_money d.return_money
19
21
  json.place d.last_follow_up&.place&.name
@@ -22,7 +24,7 @@ json.data do
22
24
  json.assign_follow_ups d.last_follow_up.present? ? d.last_follow_up.assign_follow_ups.pluck(:staff_id) : []
23
25
  json.current_staff_id @current_admin.id
24
26
  json.staff_id d.staff_id
25
- json.latest_time d.last_follow_up.present? ? d.last_follow_up.created_at.to_s : ''
27
+ json.latest_time d.last_follow_up.present? ? d.last_follow_up.created_at.to_s : d.created_at.to_s
26
28
  end
27
29
  end
28
30
 
@@ -42,6 +42,23 @@
42
42
  placeholder="请选择日期">
43
43
  </div>
44
44
  </div>
45
+ <div class="layui-inline">
46
+ <label class="layui-form-label">中标时间</label>
47
+ <div class="layui-input-inline">
48
+ <input type="text" class="layui-input" name="bidded_date" autocomplete="off" id="invitation_at_add"
49
+ value="<%= @last_follow_up&.bidded_date%>"
50
+ placeholder="请选择日期">
51
+ </div>
52
+ </div>
53
+ <br>
54
+ <div class="layui-inline">
55
+ <label class="layui-form-label">签单时间</label>
56
+ <div class="layui-input-inline">
57
+ <input type="text" class="layui-input" name="signed_date" autocomplete="off" id="invitation_at_add"
58
+ value="<%= @last_follow_up&.signed_date%>"
59
+ placeholder="请选择日期">
60
+ </div>
61
+ </div>
45
62
  <div class="layui-inline">
46
63
  <label class="layui-form-label">验收时间</label>
47
64
  <div class="layui-input-inline">
@@ -80,9 +97,13 @@
80
97
  </div>
81
98
  <div class="layui-form-item">
82
99
  <label class="layui-form-label">指定跟进人</label>
83
- <div class="layui-input-inline">
100
+ <div class="layui-input-inline" style="z-index: 10000">
84
101
  <div id="assign_follow" style="width: 512px;"></div>
85
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>
86
107
  </div>
87
108
  <div class="layui-form-item layui-form-text">
88
109
  <label class="layui-form-label required">最新进展</label>
@@ -1,6 +1,7 @@
1
1
  <script type="text/html" id="toolbarDemo_follow">
2
2
  <div class="layui-btn-container">
3
3
  <span class="table-label">跟进记录</span>
4
+ <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="time_line"> 时间线视图>></button>
4
5
  <% if can? :add_follow, EducodeSales::Business %>
5
6
  <% if @current_admin.is_admin %>
6
7
  <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add"> 添加跟进记录</button>
@@ -8,17 +9,20 @@
8
9
  <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add"> 添加跟进记录</button>
9
10
  <% end %>
10
11
  <% end %>
12
+ <span class="table-label pull-right" style="padding-right: 20px">温馨提示:仅可以在24小时之内,编辑/删除最新的跟进记录</span>
11
13
  </div>
12
14
  </script>
13
- <div class="edit-table">
14
- <table class="layui-hide" id="sale_plan_follow_table" lay-filter="sale_plan_follow_table"></table>
15
+ <div class="edit-table tool">
16
+ <div class="z-index">
17
+ <table class="layui-hide" id="sale_plan_follow_table" lay-filter="sale_plan_follow_table"></table>
18
+ </div>
15
19
  <table class="layui-hide" id="unfinish_table" lay-filter="unfinish_table" style="min-height: 300px;"></table>
16
20
  </div>
17
21
  <script type="text/html" id="currentTableBar_follow">
18
22
  <% if can? :follow, EducodeSales::Business %>
19
23
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="show">查看</a>
20
24
  <% end %>
21
- {{# if(d.is_latest){ }}
25
+ {{# if(d.is_latest && d.flag){ }}
22
26
  <% if can? :update_follow, EducodeSales::Business %>
23
27
  <% if @current_admin.is_admin %>
24
28
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
@@ -107,11 +111,27 @@
107
111
  title: '关键人',
108
112
  templet: '#add_keys'
109
113
  },
114
+ {
115
+ field: 'money_plans_count',
116
+ width: 120,
117
+ title: '回款计划',
118
+ templet: '#edit_plan'
119
+ },
110
120
  {
111
121
  field: 'invitation_at',
112
122
  width: 110,
113
123
  title: '招标时间',
114
124
  },
125
+ {
126
+ field: 'bidded_date',
127
+ width: 110,
128
+ title: '中标时间',
129
+ },
130
+ {
131
+ field: 'signed_date',
132
+ width: 110,
133
+ title: '签单时间',
134
+ },
115
135
  {
116
136
  field: 'reception_at',
117
137
  width: 110,
@@ -137,12 +157,7 @@
137
157
  width: 100,
138
158
  title: '已回款',
139
159
  },
140
- {
141
- field: 'money_plans_count',
142
- width: 120,
143
- title: '回款计划',
144
- templet: '#edit_plan'
145
- },
160
+
146
161
  {
147
162
  field: 'place',
148
163
  width: 200,
@@ -201,6 +216,25 @@
201
216
  $(window).on("resize", function () {
202
217
  layer.full(index);
203
218
  });
219
+ } else if (obj.event === 'time_line') { // 监听添加操作
220
+ layer.closeAll()
221
+ business_id = parent.business_id
222
+ business_name = parent.business_name
223
+ var content = miniPage.getHrefContent('/missions/businesses/time_line?business_id=' + id);
224
+ var openWH = miniPage.getOpenWidthHeight();
225
+ sindex = layer.open({
226
+ title: '商机列表/'+ parent.business_name +'的跟进时间线',
227
+ type: 1,
228
+ shade: 0.2,
229
+ maxmin: true,
230
+ shadeClose: true,
231
+ area: [openWH[0] + 'px', openWH[1] + 'px'],
232
+ offset: [openWH[2] + 'px', openWH[3] + 'px'],
233
+ content: content
234
+ });
235
+ $(window).on("resize", function () {
236
+ layer.full(sindex);
237
+ });
204
238
  }
205
239
  });
206
240
 
@@ -219,7 +253,7 @@
219
253
  } else if (obj.event === 'show') { // 监听添加操作
220
254
  var content = miniPage.getHrefContent('/missions/businesses/show_follow_record?follow_up_id=' + data.id);
221
255
  var openWH = miniPage.getOpenWidthHeight();
222
- var index = layer.open({
256
+ show_index = layer.open({
223
257
  title: '查看商机跟进记录',
224
258
  type: 1,
225
259
  shade: 0.2,
@@ -255,6 +289,7 @@
255
289
  content = miniPage.getHrefContent('/missions/teachers/add_keys?follow_up_id=' + obj.data.id);
256
290
  openWH = miniPage.getOpenWidthHeight();
257
291
  is_latest = obj.data.is_latest
292
+ flag = obj.data.flag
258
293
  keyindex = layer.open({
259
294
  title: '关键人',
260
295
  type: 1,
@@ -276,6 +311,7 @@
276
311
  content = miniPage.getHrefContent('/missions/businesses/edit_plan');
277
312
  openWH = miniPage.getOpenWidthHeight();
278
313
  is_latest = obj.data.is_latest
314
+ flag = obj.data.flag
279
315
  plan_index = layer.open({
280
316
  title: '回款计划',
281
317
  type: 1,
@@ -495,5 +531,11 @@
495
531
 
496
532
  });
497
533
  </script>
498
-
499
-
534
+ <style>
535
+ .z-index .layui-table-tool{
536
+ z-index: 10000; !important;
537
+ }
538
+ .tool .layui-table-tool-temp{
539
+ padding-right: 30px; !important;
540
+ }
541
+ </style>
@@ -7,6 +7,8 @@ json.data do
7
7
  json.teachers_count d.key_people_count
8
8
  json.invitation_at d.invitation_at&.to_s(:date)
9
9
  json.reception_at d.reception_at&.to_s(:date)
10
+ json.bidded_date d.bidded_date&.to_s(:date)
11
+ json.signed_date d.signed_date&.to_s(:date)
10
12
  json.total_amount d.total_amount
11
13
  json.actual_amount d.actual_amount
12
14
  json.divide_amount d.divide_amount ? d.divide_amount : ""
@@ -15,6 +17,7 @@ json.data do
15
17
  json.money_plans_count d.money_plans_count
16
18
  json.money d.money_plans.where(clazz: 1).sum(:amount).round(2)
17
19
  json.is_latest d.id == @latest&.id
20
+ json.flag d.created_at.present? ? (Time.now - d.created_at).to_f/3600 < 24 : false
18
21
  end
19
22
  end
20
23