educode_sales 0.9.73 → 0.9.74

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/contracts_controller.rb +309 -0
  3. data/app/controllers/educode_sales/follow_ups_controller.rb +1 -1
  4. data/app/controllers/educode_sales/home_controller.rb +7 -0
  5. data/app/controllers/educode_sales/ideas_controller.rb +146 -76
  6. data/app/controllers/educode_sales/roles_controller.rb +2 -1
  7. data/app/controllers/educode_sales/upload_files_controller.rb +3 -0
  8. data/app/models/educode_sales/assign_staff.rb +6 -0
  9. data/app/models/educode_sales/contract_date_list.rb +6 -0
  10. data/app/models/educode_sales/follow_up.rb +6 -0
  11. data/app/models/educode_sales/idea.rb +16 -5
  12. data/app/models/educode_sales/idea_follow.rb +11 -0
  13. data/app/models/educode_sales/permission.rb +2 -1
  14. data/app/models/educode_sales/role_area.rb +2 -1
  15. data/app/views/educode_sales/businesses/_contract_list.html.erb +160 -0
  16. data/app/views/educode_sales/contracts/_follows.html.erb +323 -0
  17. data/app/views/educode_sales/contracts/_list.html.erb +596 -0
  18. data/app/views/educode_sales/contracts/follow_ups.json.jbuilder +23 -0
  19. data/app/views/educode_sales/contracts/index.html.erb +50 -0
  20. data/app/views/educode_sales/contracts/index.json.jbuilder +74 -0
  21. data/app/views/educode_sales/contracts/list.js.erb +1 -0
  22. data/app/views/educode_sales/contracts/new_follow_up.html.erb +671 -0
  23. data/app/views/educode_sales/home/staff_business.json.jbuilder +9 -0
  24. data/app/views/educode_sales/idea_recycles/detail.html.erb +4 -4
  25. data/app/views/educode_sales/idea_recycles/index.html.erb +5 -5
  26. data/app/views/educode_sales/ideas/_follows.html.erb +258 -0
  27. data/app/views/educode_sales/ideas/_index.html.erb +544 -0
  28. data/app/views/educode_sales/ideas/detail.html.erb +7 -7
  29. data/app/views/educode_sales/ideas/edit.html.erb +77 -15
  30. data/app/views/educode_sales/ideas/files.html.erb +157 -0
  31. data/app/views/educode_sales/ideas/files.json.jbuilder +13 -0
  32. data/app/views/educode_sales/ideas/follow_ups.json.jbuilder +14 -0
  33. data/app/views/educode_sales/ideas/index.html.erb +12 -353
  34. data/app/views/educode_sales/ideas/index.json.jbuilder +7 -1
  35. data/app/views/educode_sales/ideas/new.html.erb +81 -25
  36. data/app/views/educode_sales/ideas/new_follow_up.html.erb +105 -0
  37. data/app/views/educode_sales/ideas/search_new.html.erb +1 -1
  38. data/app/views/educode_sales/ideas/show_schools.html.erb +84 -0
  39. data/app/views/educode_sales/ideas/show_schools.json.jbuilder +12 -0
  40. data/app/views/educode_sales/ideas/show_teachers.html.erb +372 -0
  41. data/app/views/educode_sales/ideas/upload_file.html.erb +43 -0
  42. data/app/views/educode_sales/projects/detail.html.erb +1 -1
  43. data/app/views/educode_sales/projects/edit.html.erb +1 -1
  44. data/app/views/educode_sales/roles/edit.html.erb +16 -0
  45. data/app/views/layouts/educode_sales/application.html.erb +5 -5
  46. data/config/routes.rb +19 -0
  47. data/db/migrate/20230227061043_create_educode_sales_ideas.rb +2 -2
  48. data/db/migrate/20230430023424_add_plan_signed_date_to_follow_ups.rb +21 -0
  49. data/db/migrate/20230430040332_create_educode_sales_contract_date_lists.rb +15 -0
  50. data/db/migrate/20230430104708_create_idea_follows.rb +25 -0
  51. data/db/migrate/20230430121335_add_permissions_for_ideas.rb +16 -0
  52. data/db/migrate/20230430134710_create_educode_sales_assign_staffs.rb +11 -0
  53. data/lib/educode_sales/version.rb +1 -1
  54. metadata +30 -2
@@ -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.department&.school&.name.to_s}-#{d.department&.name.to_s}"
5
+ end
6
+ end
7
+ json.count @schools.size
8
+ json.code 0
9
+ json.msg "success"
@@ -28,7 +28,7 @@
28
28
  </div>
29
29
  </div>
30
30
  <div class="layui-inline">
31
- <label class="layui-form-label" style="width: 100px">学校负责人:</label>
31
+ <label class="layui-form-label" style="width: 100px">单位联系人:</label>
32
32
  <div class="layui-input-inline">
33
33
  <%= idea.manager_name %>
34
34
  </div>
@@ -47,14 +47,14 @@
47
47
  </div>
48
48
  </div>
49
49
  <div class="layui-inline">
50
- <label class="layui-form-label" style="width: 100px">方案指派人:</label>
50
+ <label class="layui-form-label" style="width: 100px">方案经理:</label>
51
51
  <div class="layui-input-inline">
52
52
  <%= idea.staff&.user&.real_name %>
53
53
  </div>
54
54
  </div>
55
55
  <br>
56
56
  <div class="layui-inline">
57
- <label class="layui-form-label" style="width: 100px">销售负责人:</label>
57
+ <label class="layui-form-label" style="width: 100px">销售经理:</label>
58
58
  <div class="layui-input-inline">
59
59
  <%= idea.sale_staff&.user&.real_name %>
60
60
  </div>
@@ -126,7 +126,7 @@
126
126
  </div>
127
127
  <br>
128
128
  <div class="layui-inline">
129
- <label class="layui-form-label" style="width: 100px">反馈情况:</label>
129
+ <label class="layui-form-label" style="width: 100px">需求说明:</label>
130
130
  <div class="layui-input-inline" style="width: 1000px">
131
131
  <%= idea.content.to_s %>
132
132
  </div>
@@ -8,13 +8,13 @@
8
8
  </div>
9
9
  </div>
10
10
  <div class="layui-inline">
11
- <label class="layui-form-label">发布人</label>
11
+ <label class="layui-form-label">申请人</label>
12
12
  <div class="layui-input-inline">
13
13
  <%= select_tag "creator_id", options_for_select(@creator_arr, ""), { include_blank: true } %>
14
14
  </div>
15
15
  </div>
16
16
  <div class="layui-inline">
17
- <label class="layui-form-label">方案指派人</label>
17
+ <label class="layui-form-label">方案经理</label>
18
18
  <div class="layui-input-inline">
19
19
  <%= select_tag "staff_id", options_for_select(@staff_arr, ""), { include_blank: true } %>
20
20
  </div>
@@ -136,7 +136,7 @@
136
136
  },
137
137
  {
138
138
  field: 'staff',
139
- title: '方案指派人',
139
+ title: '方案经理',
140
140
  width: 100
141
141
  },
142
142
  {
@@ -173,7 +173,7 @@
173
173
  {
174
174
  field: 'creator',
175
175
  width: 100,
176
- title: '发布人'
176
+ title: '申请人'
177
177
  },
178
178
  {
179
179
  field: 'end_time',
@@ -193,7 +193,7 @@
193
193
  {
194
194
  field: 'content',
195
195
  width: 200,
196
- title: '反馈情况'
196
+ title: '需求说明'
197
197
  },
198
198
  {
199
199
  field: 'deleter',
@@ -0,0 +1,258 @@
1
+ <div style="margin: 10px 10px 10px 10px">
2
+ <form class="layui-form layui-form-pane" lay-filter="search_follows_aa">
3
+ <div class="layui-form-item">
4
+ <div class="layui-inline">
5
+ <label class="layui-form-label">所属商机</label>
6
+ <div class="layui-input-inline">
7
+ <input type="text" name="search_name" class="layui-input">
8
+ </div>
9
+ </div>
10
+ <div class="layui-inline">
11
+ <label class="layui-form-label">单位</label>
12
+ <div class="layui-input-inline">
13
+ <input type="text" name="search_school" class="layui-input">
14
+ </div>
15
+ </div>
16
+ <div class="layui-inline">
17
+ <label class="layui-form-label">销售经理</label>
18
+ <div class="layui-input-inline">
19
+ <%= select_tag "search_sale_staff_id", options_for_select(@staff_arr, ""), { include_blank: true } %>
20
+ </div>
21
+ </div>
22
+ <div class="layui-inline">
23
+ <label class="layui-form-label">方案经理</label>
24
+ <div class="layui-input-inline">
25
+ <%= select_tag "search_idea_staff", options_for_select(@staff_arr, ""), { include_blank: true } %>
26
+ </div>
27
+ </div>
28
+ <div class="layui-inline">
29
+ <label class="layui-form-label">跟进时间</label>
30
+ <div class="layui-input-inline">
31
+ <input type="text" class="layui-input" id="search_created_at" name="search_created_at" placeholder=" - " autocomplete="off">
32
+ </div>
33
+ </div>
34
+ <div class="layui-inline">
35
+ <label class="layui-form-label">最新进展</label>
36
+ <div class="layui-input-inline">
37
+ <input type="text" name="search_content" class="layui-input">
38
+ </div>
39
+ </div>
40
+
41
+ <div class="layui-inline">
42
+ <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_follows_search_a">重置
43
+ </button>
44
+ <button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_follows_a">搜 索
45
+ </button>
46
+ </div>
47
+ </div>
48
+ </form>
49
+ </div>
50
+ <div class="">
51
+ <table class="layui-hide" id="activity_followp_table" style="min-height: 300px;" lay-filter="activity_followp_table"></table>
52
+ </div>
53
+ <script type="text/html" id="currentTableBar_follows">
54
+ <% if can? :advise, EducodeSales::Idea %>
55
+ <a class="layui-btn layui-btn-default layui-btn-xs data-count-edit" lay-event="advise">团队建议</a>
56
+ <% end %>
57
+ </script>
58
+
59
+ <script>
60
+ layui.use(['form', 'table', 'miniPage', 'element', 'request', 'laydate'], function () {
61
+ var $ = layui.jquery,
62
+ form = layui.form,
63
+ request = layui.request,
64
+ dropdown = layui.dropdown,
65
+ miniPage = layui.miniPage,
66
+ laydate = layui.laydate;
67
+
68
+ var table = layui.table;
69
+ table.render({
70
+ elem: '#activity_followp_table',
71
+ url: '/missions/ideas/follow_ups',
72
+ defaultToolbar: ['filter'],
73
+ initSort: {
74
+ field: 'created_at', type: 'desc'
75
+ },
76
+ cols: [
77
+ [
78
+ {
79
+ field: 'id',
80
+ width: 60,
81
+ title: '序号', type: 'numbers',
82
+ },
83
+ {
84
+ field: 'content',
85
+ title: '最新进展',
86
+ width: 300
87
+ },
88
+ {
89
+ width: 120,
90
+ title: '所属商机',
91
+ field: 'name'
92
+ },
93
+ {
94
+ field: 'school_name',
95
+ width: 150,
96
+ title: '单位',
97
+ },
98
+ {
99
+ field: 'money',
100
+ width: 150,
101
+ title: '预算',
102
+ },
103
+ {
104
+ field: 'status',
105
+ title: '状态',
106
+ width: 150,
107
+ },
108
+ {
109
+ field: 'advise',
110
+ width: 160,
111
+ title: '团队建议',
112
+ },
113
+ {
114
+ field: 'sale_staff',
115
+ width: 120,
116
+ title: '销售经理',
117
+ },
118
+ {
119
+ field: 'idea_staff',
120
+ width: 180,
121
+ title: '方案经理',
122
+ sort: true,
123
+ },
124
+ {
125
+ field: 'staff',
126
+ width: 300,
127
+ title: '跟进人'
128
+ },
129
+ {
130
+ field: 'created_at',
131
+ width: 300,
132
+ title: '跟进时间'
133
+ },
134
+ {
135
+ title: '操作',
136
+ width: 200,
137
+ toolbar: '#currentTableBar_follows',
138
+ align: "center",
139
+ fixed: 'right'
140
+ }
141
+ ]
142
+ ],
143
+ limit: 20,
144
+ page: true,
145
+ limits: [10, 15, 20, 30, 40, 50, 60, 70, 80, 90]
146
+ });
147
+
148
+ var sort = {}, search = {};
149
+ table.on('sort(activity_followp_table)', function (obj) {
150
+ sort.field = obj.field;
151
+ sort.order = obj.type;
152
+ table.reload('activity_followp_table', {
153
+ initSort: obj,
154
+ where: {
155
+ sort: sort,
156
+ q: search
157
+ }
158
+ });
159
+ })
160
+
161
+ laydate.render({
162
+ elem: '#search_created_at',
163
+ range: true
164
+ });
165
+
166
+ // 监听搜索操作
167
+ form.on('submit(search_follows_a)', function (data) {
168
+ search = data.field
169
+ table.reload('activity_followp_table', {
170
+ page: {
171
+ curr: 1
172
+ },
173
+ where: {q: search, sort: sort}
174
+ }, 'data');
175
+
176
+ return false;
177
+ });
178
+
179
+ form.on('submit(reset_follows_search_a)', function (data) {
180
+ var field = data.field;
181
+ form.val('search_follows_aa', {
182
+ search_name: "",
183
+ search_created_at: "",
184
+ search_content: "",
185
+ search_status: "",
186
+ search_school_name: "",
187
+ search_money: "",
188
+ search_advise: "",
189
+ search_sale_staff: "",
190
+ search_idea_staff: "",
191
+ })
192
+ return false;
193
+ });
194
+
195
+
196
+ table.on('tool(activity_followp_table)', function (obj) {
197
+ var data = obj.data;
198
+ id = data.teacher_id;
199
+ if (obj.event === 'detail') { // 监听添加操作
200
+ content = miniPage.getHrefContent('/missions/teachers/show_follow?id=' + data.teacher_id);
201
+ openWH = miniPage.getOpenWidthHeight();
202
+ index = layer.open({
203
+ title: '跟进记录',
204
+ type: 1,
205
+ shade: 0.2,
206
+ maxmin: true,
207
+ shadeClose: true,
208
+ area: [openWH[0] + 'px', openWH[1] + 'px'],
209
+ offset: [openWH[2] + 'px', openWH[3] + 'px'],
210
+ content: content
211
+ });
212
+ $(window).on("resize", function () {
213
+ layer.full(index);
214
+ });
215
+ } else if (obj.event == 'advise') {
216
+ layer.open({
217
+ title: '添加团队建议',
218
+ closeBtn: 0,
219
+ type: 1,
220
+ area: '400px;',
221
+ id: 'LAY_layuipro',
222
+ content: '<div class="layui-form" lay-filter="edit_project" style="padding: 20px;"><textarea autocomplete="off" type="text" name="name" lay-verify="required" class="layui-textarea">' + data.advise + '</textarea></div>',
223
+ btn: ['保存', '取消'],
224
+ btn1: function (index, l) {
225
+ if (l.find("textarea").val().trim() == '') {
226
+ layer.msg('内容不能为空')
227
+ return false;
228
+ } else {
229
+ request.authPost("/missions/ideas/add_advise", {
230
+ content: l.find("textarea").val().trim(),
231
+ id: data.id
232
+ }, function (res) {
233
+ if (res.success == false) {
234
+ layer.alert(res.msg);
235
+ } else {
236
+ layer.close(index);
237
+ table.reload('activity_followp_table');
238
+ }
239
+ })
240
+ }
241
+
242
+ return false
243
+ },
244
+ btn2: function (index, l) {
245
+ layer.close(index)
246
+ }
247
+ });
248
+ }
249
+ });
250
+
251
+ });
252
+ </script>
253
+ <style>
254
+ .layui-table-tool-temp {
255
+ padding-right: 30px;
256
+ !important;
257
+ }
258
+ </style>