educode_sales 0.9.58 → 0.9.60

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 (30) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/educode_sales/indexlogo.png +0 -0
  3. data/app/controllers/educode_sales/activities_controller.rb +54 -1
  4. data/app/controllers/educode_sales/home_controller.rb +4 -0
  5. data/app/controllers/educode_sales/ideas_controller.rb +86 -1
  6. data/app/controllers/educode_sales/upload_files_controller.rb +1 -1
  7. data/app/models/educode_sales/activity.rb +6 -0
  8. data/app/models/educode_sales/activity_staff.rb +9 -0
  9. data/app/models/educode_sales/idea.rb +23 -10
  10. data/app/models/educode_sales/role_area.rb +1 -0
  11. data/app/views/educode_sales/activities/edit.html.erb +69 -2
  12. data/app/views/educode_sales/activities/index.html.erb +27 -1
  13. data/app/views/educode_sales/activities/index.json.jbuilder +5 -0
  14. data/app/views/educode_sales/activities/new.html.erb +100 -15
  15. data/app/views/educode_sales/businesses/time_line.html.erb +30 -0
  16. data/app/views/educode_sales/home/search_edu_user.json.jbuilder +13 -0
  17. data/app/views/educode_sales/idea_recycles/detail.html.erb +25 -4
  18. data/app/views/educode_sales/idea_recycles/index.html.erb +3 -3
  19. data/app/views/educode_sales/idea_recycles/index.json.jbuilder +1 -1
  20. data/app/views/educode_sales/ideas/detail.html.erb +25 -4
  21. data/app/views/educode_sales/ideas/edit.html.erb +134 -27
  22. data/app/views/educode_sales/ideas/index.html.erb +3 -3
  23. data/app/views/educode_sales/ideas/index.json.jbuilder +4 -4
  24. data/app/views/educode_sales/ideas/new.html.erb +118 -15
  25. data/config/routes.rb +1 -0
  26. data/db/migrate/20230319050647_add_clazz_to_educode_sales_activities.rb +6 -0
  27. data/db/migrate/20230319105048_create_educode_sales_activity_staffs.rb +13 -0
  28. data/db/migrate/20230322034022_add_to_school_name_to_ideas.rb +17 -0
  29. data/lib/educode_sales/version.rb +1 -1
  30. metadata +12 -6
@@ -14,7 +14,7 @@
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>
@@ -135,7 +135,7 @@
135
135
  },
136
136
  {
137
137
  field: 'staff',
138
- title: '指派人',
138
+ title: '方案指派人',
139
139
  width: 100
140
140
  },
141
141
  {
@@ -161,7 +161,7 @@
161
161
  {
162
162
  field: 'project',
163
163
  width: 150,
164
- title: '项目规模(人)'
164
+ title: '并发规模(人)'
165
165
  },
166
166
  {
167
167
  field: 'money',
@@ -1,11 +1,11 @@
1
1
  json.data do
2
2
  json.array! @ideas do |d|
3
3
  json.(d, :id, :name, :level, :status, :types, :model, :content)
4
- json.school d.school&.name
4
+ json.school d.school_name
5
5
  json.staff d.staff&.user&.real_name
6
- json.hardware d.hardware.to_f.round(2)
7
- json.project d.project.to_i
8
- json.money d.money.to_f.round(2)
6
+ json.hardware d.hardware
7
+ json.project d.project
8
+ json.money d.money
9
9
  json.end_time d.end_time.to_s
10
10
  json.creator d.creator&.user&.real_name
11
11
  json.deleter d.deleter&.user&.real_name
@@ -6,9 +6,17 @@
6
6
  <h2 style="padding-left: 25px">方案信息</h2>
7
7
  </div>
8
8
  <div class="layui-row" style="padding-top: 15px">
9
- <div class="layui-inline">
10
- <label class="layui-form-label required">单位部门</label>
11
- <div class="layui-input-block" id="department" style="width: 300px;"></div>
9
+ <div class="layui-col-md6">
10
+ <labeL class="layui-form-label required">学校/单位:</labeL>
11
+ <div class="layui-input-block">
12
+ <input type="text" name="school_name" autocomplete="off" lay-verify="required" lay-reqtext="学校不能为空" placeholder="请输入学校/单位名称" value="<%= @idea&.school_name %>" class="layui-input">
13
+ </div>
14
+ </div>
15
+ <div class="layui-col-md6">
16
+ <labeL class="layui-form-label">院系/部门:</labeL>
17
+ <div class="layui-input-block">
18
+ <input type="text" name="department_name" autocomplete="off" placeholder="请输入院系/部门名称" value="<%= @idea&.department_name %>" class="layui-input">
19
+ </div>
12
20
  </div>
13
21
  </div>
14
22
  <div class="layui-row" style="padding-top: 15px">
@@ -25,6 +33,20 @@
25
33
  </div>
26
34
  </div>
27
35
  </div>
36
+ <div class="layui-row" style="padding-top: 15px">
37
+ <div class="layui-col-md6">
38
+ <labeL class="layui-form-label required">销售负责人:</labeL>
39
+ <div class="layui-input-block">
40
+ <div id="sale_staff_id"></div>
41
+ </div>
42
+ </div>
43
+ <div class="layui-col-md6">
44
+ <labeL class="layui-form-label">协作人:</labeL>
45
+ <div class="layui-input-block">
46
+ <div id="assist_staff_ids"></div>
47
+ </div>
48
+ </div>
49
+ </div>
28
50
  <div class="layui-row" style="padding-top: 15px">
29
51
  <div class="layui-col-md6">
30
52
  <labeL class="layui-form-label required">项目名称:</labeL>
@@ -33,9 +55,9 @@
33
55
  </div>
34
56
  </div>
35
57
  <div class="layui-col-md6">
36
- <labeL class="layui-form-label required">指派人:</labeL>
58
+ <labeL class="layui-form-label required">方案指派人:</labeL>
37
59
  <div class="layui-input-block">
38
- <%= select_tag "staff_id", options_for_select(EducodeSales::Staff.all.map { |d| [d.user&.real_name, d.id] }, @idea&.staff_id), { 'lay-filter': 'staff_id', include_blank: false } %>
60
+ <div id="new_staff_id"></div>
39
61
  </div>
40
62
  </div>
41
63
  </div>
@@ -75,17 +97,17 @@
75
97
  </div>
76
98
  </div>
77
99
  <div class="layui-col-md6">
78
- <labeL class="layui-form-label required">项目预算(万):</labeL>
100
+ <labeL class="layui-form-label">项目预算(万):</labeL>
79
101
  <div class="layui-input-block">
80
- <input type="number" name="money" autocomplete="off" lay-verify="required" lay-reqtext="项目预算不能为空" placeholder="请输入项目预算" value="<%= @idea&.money %>" class="layui-input">
102
+ <input type="number" name="money" autocomplete="off" placeholder="请输入项目预算" value="<%= @idea&.money %>" class="layui-input">
81
103
  </div>
82
104
  </div>
83
105
  </div>
84
106
  <div class="layui-row" style="padding-top: 5px">
85
107
  <div class="layui-col-md6">
86
- <labeL class="layui-form-label required">项目规模(人):</labeL>
108
+ <labeL class="layui-form-label">并发规模(人):</labeL>
87
109
  <div class="layui-input-block">
88
- <input type="number" name="project" autocomplete="off" lay-verify="required" lay-reqtext="项目规模不能为空" placeholder="请输入项目规模" value="<%= @idea&.project %>" class="layui-input">
110
+ <input type="number" name="project" autocomplete="off" placeholder="请输入项目规模" value="<%= @idea&.project %>" class="layui-input">
89
111
  </div>
90
112
  </div>
91
113
  <div class="layui-col-md6">
@@ -95,12 +117,28 @@
95
117
  </div>
96
118
  </div>
97
119
  </div>
120
+ <div class="layui-row" style="padding-top: 5px;display: none">
121
+ <div class="layui-col-md6">
122
+ <labeL class="layui-form-label">文件id:</labeL>
123
+ <div class="layui-input-block">
124
+ <input type="text" name="attachment_id" id="attachment_id" autocomplete="off" value="" class="layui-input">
125
+ </div>
126
+ </div>
127
+ </div>
98
128
  <div class="layui-row" style="padding-top: 15px">
99
129
  <labeL class="layui-form-label">反馈情况:</labeL>
100
130
  <div class="layui-input-block">
101
131
  <textarea name="content" placeholder="反馈情况" class="layui-textarea"><%= @idea&.content.to_s %></textarea>
102
132
  </div>
103
133
  </div>
134
+ <div class="layui-row" style="padding-top: 15px">
135
+ <div class="layui-col-md6">
136
+ <labeL class="layui-form-label">方案材料:</labeL>
137
+ <div class="layui-btn-container">
138
+ <button type="button" class="layui-btn layui-btn-normal" id="test8">选择文件</button>
139
+ </div>
140
+ </div>
141
+ </div>
104
142
  <div class="layui-row" style="padding-top: 30px; float: left">
105
143
  <div class="layui-input-block">
106
144
  <button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
@@ -110,7 +148,33 @@
110
148
  </div>
111
149
  </div>
112
150
  <script>
113
- layui.use(['form', 'table', 'upload', 'layer', 'laytpl', 'request', 'selectInput', 'xmSelect'], function () {
151
+
152
+ function displayFile() {
153
+ var input = document.getElementById("fileInput");
154
+ var fileName = document.getElementById("fileName");
155
+ fileName.innerText = "已选择文件:" + input.files[0].name;
156
+ }
157
+
158
+ function uploadFile() {
159
+ var input = document.getElementById("fileInput");
160
+ var file = input.files[0];
161
+ var formData = new FormData();
162
+ formData.append("file", file);
163
+
164
+ var xhr = new XMLHttpRequest();
165
+ xhr.open("POST", "/api/upload");
166
+ xhr.onload = function() {
167
+ if (xhr.status === 200) {
168
+ console.log(xhr.responseText);
169
+ alert("上传成功!");
170
+ } else {
171
+ alert("上传失败!");
172
+ }
173
+ };
174
+ xhr.send(formData);
175
+ }
176
+
177
+ layui.use(['form', 'upload', 'table', 'upload', 'layer', 'laytpl', 'request', 'selectInput', 'xmSelect'], function () {
114
178
  var form = layui.form,
115
179
  layer = layui.layer,
116
180
  request = layui.request,
@@ -119,6 +183,7 @@
119
183
  laytpl = layui.laytpl,
120
184
  request = layui.request,
121
185
  xmSelect = layui.xmSelect,
186
+ upload = layui.upload,
122
187
  $ = layui.$;
123
188
  selectInput = layui.selectInput;
124
189
 
@@ -128,6 +193,21 @@
128
193
  elem: '#new_time'
129
194
  });
130
195
  form.render();
196
+
197
+ upload.render({
198
+ elem: '#test8'
199
+ , url: '/missions/upload_files' //此处配置你自己的上传接口即可
200
+ , auto: true
201
+ , accept: 'file' //普通文件
202
+ , bindAction: '#test9'
203
+ , done: function (res) {
204
+ layer.msg('上传成功');
205
+ $("#attachment_id").val(res.attachment_id)
206
+ // $("#filename").val(res.filename)
207
+ }
208
+ });
209
+
210
+
131
211
  var department_id = gon.value;
132
212
  var department = selectInput.render({
133
213
  elem: '#department',
@@ -155,13 +235,36 @@
155
235
  // 当前弹出层,防止ID被覆盖
156
236
  var parentIndex = layer.index;
157
237
 
238
+
239
+ var staff_list = xmSelect.render({
240
+ el: '#new_staff_id',
241
+ data: gon.staffs,
242
+ filterable: true,
243
+ radio: true,
244
+ })
245
+ var sale_staff_list = xmSelect.render({
246
+ el: '#sale_staff_id',
247
+ data: gon.staffs,
248
+ filterable: true,
249
+ radio: true,
250
+ })
251
+ var assist_staff_list = xmSelect.render({
252
+ el: '#assist_staff_ids',
253
+ data: gon.staffs,
254
+ filterable: true,
255
+ multiple:true
256
+ })
257
+
158
258
  //监听提交
159
259
  form.on('submit(saveBtn)', function (data) {
160
- if (department.getValue() == "" && department_id == "") {
161
- layer.alert("请选择单位部门")
162
- return false;
163
- } else {
260
+ // if (department.getValue() == "" && department_id == "") {
261
+ // layer.alert("请选择单位部门")
262
+ // return false;
263
+ // } else {
164
264
  data.field.department_id = department.getValue() || department_id;
265
+ data.field.staff_id = staff_list.getValue('valueStr');
266
+ data.field.sale_staff_id = sale_staff_list.getValue('valueStr');
267
+ data.field.assist_staff_ids = assist_staff_list.getValue('valueStr');
165
268
  request.authPost("missions/ideas/", data.field, function (res) {
166
269
  if (res.success == false) {
167
270
  layer.alert(res.msg)
@@ -174,7 +277,7 @@
174
277
  });
175
278
  }
176
279
  })
177
- }
280
+ // }
178
281
  return false;
179
282
  });
180
283
 
data/config/routes.rb CHANGED
@@ -7,6 +7,7 @@ EducodeSales::Engine.routes.draw do
7
7
  get :search_users, to: "home#search_users"
8
8
  get :search_teacher, to: "home#search_teacher"
9
9
  get :search_edu_teacher,to: "home#search_edu_teacher"
10
+ get :search_edu_user,to: "home#search_edu_user"
10
11
  get :search_operation_teacher,to: "home#search_operation_teacher"
11
12
  get :search, to: "home#search"
12
13
  get :no_permission, to: "home#no_permission"
@@ -0,0 +1,6 @@
1
+ class AddClazzToEducodeSalesActivities < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :educode_sales_activities, :clazz_id, :integer
4
+ add_column :educode_sales_follow_ups, :comment, :text
5
+ end
6
+ end
@@ -0,0 +1,13 @@
1
+ class CreateEducodeSalesActivityStaffs < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :educode_sales_activity_staffs do |t|
4
+ t.references :staff
5
+ t.references :activity
6
+ t.integer :user_id
7
+ t.integer :clazz_id
8
+ t.string :name
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ class AddToSchoolNameToIdeas < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :educode_sales_ideas,:school_name,:string
4
+ add_column :educode_sales_ideas,:department_name,:string
5
+ add_column :educode_sales_ideas,:sale_staff_id,:integer
6
+ add_column :educode_sales_ideas,:idea_staff_id,:integer
7
+ add_column :educode_sales_ideas,:assist_staff_ids,:text
8
+ add_column :educode_sales_ideas,:attachment_id,:integer
9
+
10
+ ideas = EducodeSales::Idea.all
11
+ ideas.each do |d|
12
+ d.school_name = d.school&.name
13
+ d.department_name = d.department&.name
14
+ d.save
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '0.9.58'
2
+ VERSION = '0.9.60'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: educode_sales
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.58
4
+ version: 0.9.60
5
5
  platform: ruby
6
6
  authors:
7
7
  - anke1460
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-17 00:00:00.000000000 Z
11
+ date: 2023-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -105,6 +105,7 @@ files:
105
105
  - app/assets/images/educode_sales/icon-login.png
106
106
  - app/assets/images/educode_sales/icon.png
107
107
  - app/assets/images/educode_sales/indexLogo.png
108
+ - app/assets/images/educode_sales/indexlogo.png
108
109
  - app/assets/images/educode_sales/loading-0.gif
109
110
  - app/assets/images/educode_sales/loading-1.gif
110
111
  - app/assets/images/educode_sales/loading-2.gif
@@ -187,6 +188,7 @@ files:
187
188
  - app/models/ability.rb
188
189
  - app/models/concerns/deletable.rb
189
190
  - app/models/educode_sales/activity.rb
191
+ - app/models/educode_sales/activity_staff.rb
190
192
  - app/models/educode_sales/activity_teacher.rb
191
193
  - app/models/educode_sales/application_record.rb
192
194
  - app/models/educode_sales/assessments_setting.rb
@@ -300,6 +302,7 @@ files:
300
302
  - app/views/educode_sales/home/sales_staff.json.jbuilder
301
303
  - app/views/educode_sales/home/search.json.jbuilder
302
304
  - app/views/educode_sales/home/search_edu_teacher.json.jbuilder
305
+ - app/views/educode_sales/home/search_edu_user.json.jbuilder
303
306
  - app/views/educode_sales/home/search_operation_teacher.json.jbuilder
304
307
  - app/views/educode_sales/home/search_teacher.json.jbuilder
305
308
  - app/views/educode_sales/home/search_users.json.jbuilder
@@ -559,6 +562,9 @@ files:
559
562
  - db/migrate/20230306131055_add_score_to_assessments_settings.rb
560
563
  - db/migrate/20230308022633_add_permissions_to_educode_sales_permissions.rb
561
564
  - db/migrate/20230314122536_add_delet_reason_to_business.rb
565
+ - db/migrate/20230319050647_add_clazz_to_educode_sales_activities.rb
566
+ - db/migrate/20230319105048_create_educode_sales_activity_staffs.rb
567
+ - db/migrate/20230322034022_add_to_school_name_to_ideas.rb
562
568
  - lib/educode_sales.rb
563
569
  - lib/educode_sales/engine.rb
564
570
  - lib/educode_sales/version.rb
@@ -567,7 +573,7 @@ homepage: https://www.educoder.net
567
573
  licenses:
568
574
  - MIT
569
575
  metadata: {}
570
- post_install_message:
576
+ post_install_message:
571
577
  rdoc_options: []
572
578
  require_paths:
573
579
  - lib
@@ -582,8 +588,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
582
588
  - !ruby/object:Gem::Version
583
589
  version: '0'
584
590
  requirements: []
585
- rubygems_version: 3.0.0
586
- signing_key:
591
+ rubygems_version: 3.0.9
592
+ signing_key:
587
593
  specification_version: 4
588
594
  summary: Summary of EducodeSales.
589
595
  test_files: []