educode_sales 1.10.23 → 1.10.25

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/businesses_controller.rb +13 -0
  3. data/app/controllers/educode_sales/contracts_controller.rb +55 -0
  4. data/app/controllers/educode_sales/follow_ups_controller.rb +34 -0
  5. data/app/controllers/educode_sales/idea_follows_controller.rb +146 -0
  6. data/app/controllers/educode_sales/ideas_controller.rb +37 -0
  7. data/app/controllers/educode_sales/money_plan_records_controller.rb +14 -10
  8. data/app/controllers/educode_sales/money_plans_controller.rb +5 -3
  9. data/app/controllers/educode_sales/plans_controller.rb +28 -5
  10. data/app/helpers/educode_sales/sale_trends_helper.rb +11 -1
  11. data/app/models/educode_sales/common.rb +3 -1
  12. data/app/models/educode_sales/money_plan_claim.rb +1 -1
  13. data/app/models/educode_sales/permission.rb +2 -1
  14. data/app/models/educode_sales/sale_plan.rb +2 -0
  15. data/app/views/educode_sales/businesses/index.html.erb +123 -80
  16. data/app/views/educode_sales/ideas/_follows.html.erb +3 -2
  17. data/app/views/educode_sales/ideas/_index.html.erb +37 -7
  18. data/app/views/educode_sales/ideas/edit_follow_record.html.erb +67 -49
  19. data/app/views/educode_sales/ideas/follow_list.html.erb +252 -0
  20. data/app/views/educode_sales/ideas/follow_list.json.jbuilder +16 -0
  21. data/app/views/educode_sales/ideas/follow_ups.json.jbuilder +2 -1
  22. data/app/views/educode_sales/ideas/index.json.jbuilder +1 -0
  23. data/app/views/educode_sales/ideas/new_follow_up.html.erb +2 -0
  24. data/app/views/educode_sales/ideas/show_follow.html.erb +72 -491
  25. data/app/views/educode_sales/money_plans/index.json.jbuilder +4 -4
  26. data/app/views/educode_sales/plans/_monthPlan.html.erb +5 -0
  27. data/app/views/educode_sales/plans/_weekPlan.html.erb +5 -0
  28. data/app/views/educode_sales/plans/_yearPlan.html.erb +4 -4
  29. data/app/views/educode_sales/plans/edit_month.html.erb +6 -0
  30. data/app/views/educode_sales/plans/edit_week.html.erb +6 -0
  31. data/app/views/educode_sales/plans/index.json.jbuilder +1 -0
  32. data/app/views/educode_sales/plans/new_month.html.erb +14 -0
  33. data/app/views/educode_sales/plans/new_week.html.erb +14 -0
  34. data/config/routes.rb +4 -0
  35. data/db/migrate/20230629130033_add_clazz_to_money_plans.rb +6 -0
  36. data/lib/educode_sales/version.rb +1 -1
  37. metadata +6 -2
@@ -218,9 +218,9 @@
218
218
  <% end %>
219
219
  <% if @more %>
220
220
  {{# if(d.followed==0){}}
221
- <a class="layui-btn-xs data-count-edit more-btn more-btn1" data-name={{d.name}} data-id={{d.id}} data-clazz="{{d.extras_clazz}}">更多<i class="layui-icon layui-icon-down layui-nav-more"></i></a>
221
+ <a class="layui-btn-xs data-count-edit more-btn more-btn1" data-name={{d.name}} lay-event="more" data-id={{d.id}} data-clazz="{{d.extras_clazz}}">更多<i class="layui-icon layui-icon-down layui-nav-more"></i></a>
222
222
  {{# }else{}}
223
- <a class="layui-btn-xs data-count-edit more-btn more-btn2" data-name={{d.name}} data-id={{d.id}} data-clazz="{{d.extras_clazz}}">更多<i class="layui-icon layui-icon-down layui-nav-more"></i></a>
223
+ <a class="layui-btn-xs data-count-edit more-btn more-btn2" data-name={{d.name}} lay-event="more" data-id={{d.id}} data-clazz="{{d.extras_clazz}}">更多<i class="layui-icon layui-icon-down layui-nav-more"></i></a>
224
224
  {{# }}}
225
225
  <% end %>
226
226
 
@@ -635,7 +635,7 @@
635
635
  skin: 'line',
636
636
  done: function (res, curr, coun) {
637
637
  exportData=res.data;
638
- drowpdwonRender();
638
+ // drowpdwonRender();
639
639
  export_drowpdwonRender();
640
640
  // let headerTop = $('.layui-table-header').offset().top; //获取表格头到文档顶部的距离
641
641
  // $(".layuimini-content-page").scroll(function () {
@@ -654,84 +654,85 @@
654
654
  dropmenu2[dropmenu2.findIndex(function (elem)
655
655
  {return elem.title.includes("关注")})].title="取消关注";
656
656
 
657
- drowpdwonRender = function() {
658
- dropdown.render({
659
- elem: '.more-btn1',
660
- data: dropmenu,//dropmenu,
661
- click: function(data, othis){
662
- var elem = $(this.elem);
663
- id = elem.data('id');
657
+ // 删除,不需要重复定义两次一样的下拉菜单
658
+ // drowpdwonRender = function(is) {
659
+ // dropdown.render({
660
+ // elem: '.more-btn1',
661
+ // data: dropmenu,
662
+ // click: function(data, othis){
663
+ // var elem = $(this.elem);
664
+ // id = elem.data('id');
664
665
 
665
- switch (data.event) {
666
- case 'week':
667
- week(id);
668
- break;
669
- case 'month':
670
- month(id);
671
- break;
672
- case 'year':
673
- year(id);
674
- break;
675
- case 'edit':
676
- edit(id);
677
- break;
678
- case 'file':
679
- file(id, elem.data('name'));
680
- break;
681
- case 'time_line':
682
- time_line(id, elem.data('name'));
683
- break;
684
- case 'delete':
685
- deleteBusiness(id, elem.data('name'), elem.data('clazz'));
686
- break;
687
- case 'following':
688
- following(id);
689
- break;
690
- case 'money_plan':
691
- money_plan(id);
692
- break;
693
- }
694
- }
695
- });
696
- dropdown.render({
697
- elem: '.more-btn2',
698
- data: dropmenu2,//dropmenu,
699
- click: function(data, othis){
700
- var elem = $(this.elem);
701
- id = elem.data('id');
666
+ // switch (data.event) {
667
+ // case 'week':
668
+ // week(id);
669
+ // break;
670
+ // case 'month':
671
+ // month(id);
672
+ // break;
673
+ // case 'year':
674
+ // year(id);
675
+ // break;
676
+ // case 'edit':
677
+ // edit(id);
678
+ // break;
679
+ // case 'file':
680
+ // file(id, elem.data('name'));
681
+ // break;
682
+ // case 'time_line':
683
+ // time_line(id, elem.data('name'));
684
+ // break;
685
+ // case 'delete':
686
+ // deleteBusiness(id, elem.data('name'), elem.data('clazz'));
687
+ // break;
688
+ // case 'following':
689
+ // following(id);
690
+ // break;
691
+ // case 'money_plan':
692
+ // money_plan(id);
693
+ // break;
694
+ // }
695
+ // }
696
+ // });
697
+ // dropdown.render({
698
+ // elem: '.more-btn2',
699
+ // data: dropmenu2,//dropmenu,
700
+ // click: function(data, othis){
701
+ // var elem = $(this.elem);
702
+ // id = elem.data('id');
702
703
 
703
- switch (data.event) {
704
- case 'week':
705
- week(id);
706
- break;
707
- case 'month':
708
- month(id);
709
- break;
710
- case 'year':
711
- year(id);
712
- break;
713
- case 'edit':
714
- edit(id);
715
- break;
716
- case 'file':
717
- file(id, elem.data('name'));
718
- break;
719
- case 'time_line':
720
- time_line(id, elem.data('name'));
721
- break;
722
- case 'delete':
723
- deleteBusiness(id, elem.data('name'), elem.data('clazz'));
724
- break;
725
- case 'following':
726
- following(id);
727
- break;
728
- case 'money_plan':
729
- money_plan(id);
730
- break;
731
- }
732
- }
733
- });
734
- }
704
+ // switch (data.event) {
705
+ // case 'week':
706
+ // week(id);
707
+ // break;
708
+ // case 'month':
709
+ // month(id);
710
+ // break;
711
+ // case 'year':
712
+ // year(id);
713
+ // break;
714
+ // case 'edit':
715
+ // edit(id);
716
+ // break;
717
+ // case 'file':
718
+ // file(id, elem.data('name'));
719
+ // break;
720
+ // case 'time_line':
721
+ // time_line(id, elem.data('name'));
722
+ // break;
723
+ // case 'delete':
724
+ // deleteBusiness(id, elem.data('name'), elem.data('clazz'));
725
+ // break;
726
+ // case 'following':
727
+ // following(id);
728
+ // break;
729
+ // case 'money_plan':
730
+ // money_plan(id);
731
+ // break;
732
+ // }
733
+ // }
734
+ // });
735
+ // }
735
736
 
736
737
  export_drowpdwonRender = function() {
737
738
  dropdown.render({
@@ -1257,6 +1258,7 @@
1257
1258
 
1258
1259
  table.on('tool(businesses_table)', function (obj) {
1259
1260
  var data = obj.data;
1261
+ var that = this;
1260
1262
  id = data.id
1261
1263
  if (obj.event === 'add_event') { // 监听添加操作
1262
1264
  business_id = data.id
@@ -1454,8 +1456,49 @@
1454
1456
  layer.close(index)
1455
1457
  }
1456
1458
  });
1459
+ } else if (obj.event == 'more') {
1460
+ dropdown.render({
1461
+ elem: that,
1462
+ show: true,
1463
+ data: data.staff_id == data.current_staff_id ? dropmenu2 : gon.assign_menus,//dropmenu,
1464
+ click: function(data, othis){
1465
+ var elem = $(this.elem);
1466
+ id = elem.data('id');
1467
+
1468
+ switch (data.event) {
1469
+ case 'week':
1470
+ week(id);
1471
+ break;
1472
+ case 'month':
1473
+ month(id);
1474
+ break;
1475
+ case 'year':
1476
+ year(id);
1477
+ break;
1478
+ case 'edit':
1479
+ edit(id);
1480
+ break;
1481
+ case 'file':
1482
+ file(id, elem.data('name'));
1483
+ break;
1484
+ case 'time_line':
1485
+ time_line(id, elem.data('name'));
1486
+ break;
1487
+ case 'delete':
1488
+ deleteBusiness(id, elem.data('name'), elem.data('clazz'));
1489
+ break;
1490
+ case 'following':
1491
+ following(id);
1492
+ break;
1493
+ case 'money_plan':
1494
+ money_plan(id);
1495
+ break;
1496
+ }
1497
+ }
1498
+ });
1499
+ // drowpdwonRender(data.staff_id == data.current_staff_id)
1457
1500
  }
1458
- drowpdwonRender()
1501
+
1459
1502
  });
1460
1503
  });
1461
1504
  </script>
@@ -54,6 +54,7 @@
54
54
  <% if can? :advise, EducodeSales::Idea %>
55
55
  <a class="layui-btn layui-btn-default layui-btn-xs data-count-edit" lay-event="advise">团队建议</a>
56
56
  <% end %>
57
+ <a class="layui-btn layui-btn-default layui-btn-xs data-count-edit" lay-event="detail">详情</a>
57
58
  </script>
58
59
 
59
60
  <script>
@@ -195,9 +196,9 @@
195
196
 
196
197
  table.on('tool(activity_followp_table)', function (obj) {
197
198
  var data = obj.data;
198
- id = data.teacher_id;
199
+ idea_id = data.idea_id;
199
200
  if (obj.event === 'detail') { // 监听添加操作
200
- content = miniPage.getHrefContent('/missions/teachers/show_follow?id=' + data.teacher_id);
201
+ var content = miniPage.getHrefContent('/missions/ideas/show_follow?id=' + data.id);
201
202
  openWH = miniPage.getOpenWidthHeight();
202
203
  index = layer.open({
203
204
  title: '跟进记录',
@@ -97,7 +97,7 @@
97
97
  </div>
98
98
  <script type="text/html" id="currentTableBar">
99
99
  {{# if(d.is_deleted){}}
100
- <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edita" lay-event="add_event">详情</a>
100
+ <!-- <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edita" lay-event="add_event">详情</a>-->
101
101
  <% if can? :recycle, EducodeSales::Idea %>
102
102
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="idea_recycle_s">恢复</a>
103
103
  <% end %>
@@ -107,7 +107,7 @@
107
107
  <% if can? :add_follow, EducodeSales::Idea %>
108
108
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-add_follow" lay-event="add_follows">添加跟进</a>
109
109
  <% end %>
110
- <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edita" lay-event="add_event">详情</a>
110
+ <!-- <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edita" lay-event="add_event">详情</a>-->
111
111
  <% if can? :update, EducodeSales::Idea %>
112
112
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="idea_edit">编辑</a>
113
113
  <% end %>
@@ -132,14 +132,18 @@
132
132
  {{# } }}
133
133
  </script>
134
134
 
135
+ <script type="text/html" id="follow">
136
+ <a href="javascript:void(0);" lay-event="follow" class="layui-table-link">{{ d.idea_follows_count }}</a>
137
+ </script>
138
+
135
139
  <script>
136
140
  layui.use(['form', 'table', 'miniPage', 'element', 'request', 'laydate'], function () {
137
141
  var $ = layui.jquery,
138
- form = layui.form,
139
- request = layui.request,
140
- dropdown = layui.dropdown,
141
- miniPage = layui.miniPage,
142
- laydate = layui.laydate;
142
+ form = layui.form,
143
+ request = layui.request,
144
+ dropdown = layui.dropdown,
145
+ miniPage = layui.miniPage,
146
+ laydate = layui.laydate;
143
147
 
144
148
  var laydate = layui.laydate;
145
149
 
@@ -175,6 +179,11 @@
175
179
  title: '销售经理',
176
180
  width: 100
177
181
  },
182
+ {
183
+ field: 'assist_staffs',
184
+ title: '协助人',
185
+ width: 200
186
+ },
178
187
  {
179
188
  field: 'status',
180
189
  width: 100,
@@ -195,6 +204,7 @@
195
204
  field: 'idea_follows_count',
196
205
  width: 100,
197
206
  title: '跟进',
207
+ templet: '#follow',
198
208
  },
199
209
  {
200
210
  field: 'f_staff',
@@ -553,6 +563,26 @@
553
563
  layer.close(index)
554
564
  }
555
565
  });
566
+ } else if (obj.event === 'follow') {
567
+ content = miniPage.getHrefContent('/missions/ideas/follow_list?id=' + data.id);
568
+ openWH = miniPage.getOpenWidthHeight();
569
+ index = layer.open({
570
+ title: '跟进记录',
571
+ type: 1,
572
+ shade: 0.2,
573
+ maxmin: true,
574
+ shadeClose: true,
575
+ area: [openWH[0] + 'px', openWH[1] + 'px'],
576
+ offset: [openWH[2] + 'px', openWH[3] + 'px'],
577
+ content: content,
578
+ success: function (layero, index) {
579
+ // 重新渲染弹层中的下拉选择框select
580
+ // form.render('select');
581
+ }
582
+ });
583
+ $(window).on("resize", function () {
584
+ layer.full(index);
585
+ });
556
586
  } else if (obj.event === 'idea_edit') { // 监听添加操作
557
587
  var content = miniPage.getHrefContent('/missions/ideas/' + id + '/edit');
558
588
  var openWH = miniPage.getOpenWidthHeight();
@@ -1,48 +1,59 @@
1
- <form class="layui-form " action="">
1
+ <%= Gon::Base.render_data %>
2
+ <div class="layui-form layuimini-form">
2
3
  <div class="layui-form-item" style="padding: 25px">
3
- <div class="layui-inline">
4
- <label class="layui-form-label">教师态度</label>
5
- <div class="layui-input-inline">
6
- <%= select_tag "attitude_id",options_for_select(EducodeSales::Common.where(clazz: "teacher_attitude").pluck(:name, :id), @follow_up.attitude_id)%>
7
- </div>
4
+ <div class="layui-row">
5
+ <h2 style="padding-left: 25px">跟进</h2>
8
6
  </div>
9
- <div class="layui-inline">
10
- <label class="layui-form-label">开课计划</label>
11
- <div class="layui-input-inline">
12
- <%= select_tag "course_plan_id",options_for_select(EducodeSales::Common.where(clazz: "course_plan").pluck(:name, :id), @follow_up.course_plan_id)%>
7
+ <div class="layui-row" style="padding-top: 15px">
8
+ <div class="layui-col-md6">
9
+ <labeL class="layui-form-label required">销售经理:</labeL>
10
+ <div class="layui-input-block">
11
+ <div id="new_sale_staff_id"></div>
12
+ </div>
13
+ </div>
14
+ <div class="layui-col-md6">
15
+ <labeL class="layui-form-label">方案经理:</labeL>
16
+ <div class="layui-input-block">
17
+ <div id="new_idea_staff_id"></div>
18
+ </div>
13
19
  </div>
14
20
  </div>
15
- <br>
16
- <div class="layui-inline">
17
- <label class="layui-form-label">课堂建设</label>
18
- <div class="layui-input-inline">
19
- <%= select_tag "course_build_id",options_for_select(EducodeSales::Common.where(clazz: "course_build").pluck(:name, :id), @follow_up.course_build_id)%>
21
+ <div class="layui-row" style="padding-top: 15px">
22
+ <div class="layui-col-md6">
23
+ <labeL class="layui-form-label">预算:</labeL>
24
+ <div class="layui-input-block">
25
+ <input type="number" name="money" autocomplete="off" placeholder="请输入硬件规模" value="<%= @idea_follow&.money %>" class="layui-input">
26
+ </div>
27
+ </div>
28
+ <div class="layui-col-md6">
29
+ <labeL class="layui-form-label">状态:</labeL>
30
+ <div class="layui-input-block">
31
+ <%= select_tag "status", options_for_select(EducodeSales::IdeaFollow.statuses.keys, @idea_follow&.status), { 'lay-filter': 'status', include_blank: false } %>
32
+ </div>
20
33
  </div>
21
34
  </div>
22
- <div class="layui-inline">
23
- <label class="layui-form-label">跟进手段</label>
24
- <div class="layui-input-inline">
25
- <%= select_tag "follow_id",options_for_select(EducodeSales::Common.where(clazz: "contact").pluck(:name, :id), @follow_up.follow_id)%>
35
+ <div class="layui-row" style="padding-top: 15px">
36
+ <labeL class="layui-form-label">团队建议:</labeL>
37
+ <div class="layui-input-block">
38
+ <textarea name="content" placeholder="团队建议" class="layui-textarea"><%= @idea_follow&.content.to_s %></textarea>
26
39
  </div>
27
40
  </div>
28
- <br>
29
- <div class="layui-form-item layui-form-text">
30
- <label class="layui-form-label">跟进小结</label>
41
+ <div class="layui-row" style="padding-top: 15px">
42
+ <labeL class="layui-form-label">最新进展:</labeL>
31
43
  <div class="layui-input-block">
32
- <textarea name="description" placeholder="此处可以填写:
33
- 1、教师关注的痛点问题;
34
- 2、教师关注的教学项目、教学成果类型;
35
- 3、其他个性化需求,以及应对情况说明;
36
- 4、目前态度的产生原因等。
37
- " class="layui-textarea"><%= @follow_up.description %></textarea>
44
+ <textarea name="content" placeholder="团队建议" class="layui-textarea"><%= @idea_follow&.content.to_s %></textarea>
38
45
  </div>
39
46
  </div>
40
- <div class="layui-inline" style="padding-left: 50px">
41
- <button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit_follow_up">提交
42
- </button>
47
+ <div class="layui-row" style="padding-top: 30px; float: left">
48
+ <div class="layui-input-block">
49
+ <button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn_follow">确认保存</button>
50
+ </div>
43
51
  </div>
44
52
  </div>
45
- </form>
53
+ </div>
54
+
55
+
56
+
46
57
 
47
58
  <script>
48
59
  layui.use(['form', 'table', 'upload', 'layer', 'laytpl', 'request', 'laydate'], function () {
@@ -54,34 +65,41 @@
54
65
  laydate = layui.laydate,
55
66
  $ = layui.$;
56
67
 
57
- // laydate.render({
58
- // elem: '#invitation_at_add'
59
- // })
60
- //
61
- // laydate.render({
62
- // elem: '#reception_at_add'
63
- // });
64
-
65
68
  form.render();
66
69
 
67
- form.on('submit(edit_follow_up)', function (data) {
68
- request.authPut("missions/teacher_follows/<%= @follow_up.id%>", data.field, function (res) {
70
+
71
+ var staff_list = xmSelect.render({
72
+ el: '#new_idea_staff_id',
73
+ data: gon.idea_staffs,
74
+ filterable: true,
75
+ radio: true,
76
+ })
77
+ var sale_staff_list = xmSelect.render({
78
+ el: '#new_sale_staff_id',
79
+ data: gon.sale_staffs,
80
+ filterable: true,
81
+ radio: true,
82
+ })
83
+
84
+
85
+ //监听提交
86
+ form.on('submit(saveBtn_follow)', function (data) {
87
+ data.field.idea_staff_id = staff_list.getValue('valueStr');
88
+ data.field.sale_staff_id = sale_staff_list.getValue('valueStr');
89
+ request.authPut("missions/idea_follows/<%= @idea_follow.id%>", data.field, function (res) {
69
90
  if (res.success == false) {
70
91
  layer.alert(res.msg)
71
92
  } else {
72
93
  layer.close(parent.edit_index1);
73
94
  parent.layer.close(parent.layer.getFrameIndex(window.name))
74
- parent.table.reload('followTable')
75
- parent.table.reload('teachers_table')
76
- parent.table.reload('weekPlanTable1')
77
- parent.table.reload('monthPlanTable')
78
- parent.table.reload('sale_plan_follow_table')
95
+ table.reload('activity_followp_table')
96
+ table.reload('ideas_table')
97
+ table.reload('sale_plan_follow_table')
79
98
  }
80
99
  })
81
-
82
-
83
100
  return false;
84
101
  });
85
102
 
103
+
86
104
  });
87
105
  </script>