educode_sales 0.9.96 → 0.9.98

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 63f1a9066c14a86f9c577ae32986fe5f6887b9a24eff3ceb84eee0bd1f35e645
4
- data.tar.gz: 8caaf272560cd43c59c86747910f4f398ee49be736f0b0b00190636d13ddf6b2
3
+ metadata.gz: dc83991c421ec745be1b0b4e1b78bd38327b29c3463e1ed43e0253a602305ffa
4
+ data.tar.gz: 237c8dfda5375b0ca1fdf8672361890f2acbb2054fa974b089d41de26fbbb130
5
5
  SHA512:
6
- metadata.gz: 48235ecc3dbdec34879a9c4e07bcf0ec2c7e9673308e7ff32f878efda9c88305b405d8c3f38848565e5e5a53e8f97d8579fe229c9dd943f15574b3c57f97f477
7
- data.tar.gz: dc623573607a70e5ade7dfc55aa4e7f1c18f73d9170d04741ada0c6e2f7e27187978587a3ee068a3a9a2946855082fb680c48e30c8914824fcb0d4617685b189
6
+ metadata.gz: 5798c8ef35a26bbd366b2ff2e5fcca79a16d55984ba9a13ae4a2d9b2161bdd1bd45bd285b914f8b9bfa11c1e10b3f4d1d7114fb18c086065562f85afe71cfbaf
7
+ data.tar.gz: 2469abce54faa1b52c5431a276ee01752829fb3e399c1831f6d33a84ef5b52aed43abb6980baf679afd3fd3d00dbc5a032ef4eb5157cf77469b7527c71de575b
@@ -428,6 +428,33 @@ module EducodeSales
428
428
  gon.watche_ids = Staff.all.map { |d| {name: d.user&.real_name, value: d.id, selected: staff_ids.include?(d.id)}}
429
429
  gon.department = {value: @business.department_id, name: "#{@business.department&.school&.name}-#{@business.department&.name}"}
430
430
  gon.value = @business.department_id
431
+
432
+
433
+
434
+ if @business.activity
435
+ gon.activity = [{value: @business.activity_id, name: @business.activity.name}]
436
+ gon.activity_id = @business.activity_id
437
+ else
438
+ gon.activity = []
439
+ gon.activity_id = ''
440
+ end
441
+
442
+ if @business.place
443
+ gon.place = [{value: @business.place_id, name: @business.place.name}]
444
+ gon.place_id = @business.place_id
445
+ else
446
+ gon.place = []
447
+ gon.place_id = ''
448
+ end
449
+
450
+ if @business.customer
451
+ gon.customer = [{value: @business.customer_id, name: "#{@business.customer.school.name} #{@business.customer.name}"}]
452
+ gon.customer_id = @business.customer_id
453
+ else
454
+ gon.customer = []
455
+ gon.customer_id = ''
456
+ end
457
+
431
458
  render layout: false
432
459
  end
433
460
 
@@ -454,7 +481,10 @@ module EducodeSales
454
481
  end
455
482
  end
456
483
 
457
- if business.update(name: params[:name], department_id: department.id, source: params[:source], school_id: department.school_id)
484
+ if business.update(name: params[:name], department_id: department.id, source: params[:source], school_id: department.school_id,
485
+ activity_id: params[:activity_id], place_id: params[:place_id], customer_id: params[:customer_id],
486
+ company_source: params[:company_source], phone: params[:phone], email: params[:email], partner: params[:partner], invite_info: params[:invite_info], friend: params[:friend]
487
+ )
458
488
  if params[:merge_business_ids].present?
459
489
  merge_business = Business.where(id: params[:merge_business_ids].split(","))
460
490
  merge_business.each do |b|
@@ -92,5 +92,18 @@ module EducodeSales
92
92
  @places = @places.page(params[:page]).per(10)
93
93
  end
94
94
 
95
+
96
+ def search_activity
97
+ @data = Activity.where("name like ?", "%#{params[:q]}%").limit(20)
98
+ end
99
+
100
+ def search_customer
101
+ part_a_ids = EducodeSales::CustomerFollow.all.pluck(:school_id)
102
+ part_b_ids = EducodeSales::Business.pluck(:school_id)
103
+ school_ids = (part_a_ids + part_b_ids + EducodeSales::CustomerAdd.all.pluck(:school_id)).uniq
104
+ @data = Department.joins(:school).where("schools.name like ?", "%#{params[:q]}%").where("schools.id in (?)", school_ids).limit(20)
105
+ p @data
106
+ end
107
+
95
108
  end
96
109
  end
@@ -173,7 +173,7 @@ module EducodeSales
173
173
  def sales_analysis
174
174
  respond_to do |format|
175
175
  format.html do
176
-
176
+
177
177
  end
178
178
  format.js do
179
179
  x = EducodeSales::Common.find_by(extras: EducodeSales::Common::XTYPE)&.id
@@ -455,8 +455,8 @@ module EducodeSales
455
455
  format.js do
456
456
  user_stat = EducodeSales::UserStatService.new
457
457
  gon.table_1 = user_stat.table_1
458
- gon.table_2 = user_stat.table_2(0)
459
- gon.table_3 = user_stat.table_2(1)
458
+ gon.table_2 = user_stat.table_2(1)
459
+ gon.table_3 = user_stat.table_2(0)
460
460
  end
461
461
  end
462
462
  end
@@ -511,7 +511,7 @@ module EducodeSales
511
511
  if params[:property].present?
512
512
  # 客户类型
513
513
  business = business.joins(department: [school: :school_tags]).where("school_tags.id = ?", params[:property])
514
- end
514
+ end
515
515
 
516
516
  data_1 = business.
517
517
  where("educode_sales_follow_ups.clazz_id != ?", x).
@@ -12,6 +12,10 @@ module EducodeSales
12
12
  belongs_to :p_sale_staff, class_name: 'Staff', optional: true
13
13
  belongs_to :p_deleter, class_name: 'Staff', optional: true
14
14
 
15
+ belongs_to :place, class_name: 'Place', optional: true
16
+ belongs_to :customer, class_name: 'Department', optional: true
17
+ belongs_to :activity, class_name: 'Activity', optional: true
18
+
15
19
  has_many :sale_plans
16
20
  has_many :follow_ups
17
21
  has_many :business_clazz_changes
@@ -12,23 +12,23 @@ module EducodeSales
12
12
 
13
13
  def table_1
14
14
  # 公有云
15
- user_years_1 = year_users(1)
15
+ user_years_1 = public_user
16
16
  # 私有云
17
- user_years_2 = year_users(2)
18
- school_years_1 = school_users(1)
19
- school_years_2 = school_users(2)
20
- department_years_1 = department_users(1)
21
- department_years_2 = department_users(2)
17
+ user_years_2 = {} #year_users(2)
18
+ school_years_1 = public_school
19
+ school_years_2 = {}# school_users(2)
20
+ department_years_1 = public_department
21
+ department_years_2 = {} #department_users(2)
22
22
 
23
23
  years = {}
24
24
  (2018..Time.current.year).each do |d|
25
25
  years[d] = {
26
26
  'year' => d,
27
- 'user_1' => user_years_1[d.to_s] || 0,
27
+ 'user_1' => (user_years_1[d.to_s] || 0) + (years[d-1] && years[d-1]['user_1']).to_i,
28
28
  'user_2' => user_years_2[d.to_s] || 0,
29
- 'school_1' => school_years_1[d.to_s] || 0,
29
+ 'school_1' => (school_years_1[d.to_s] || 0) + (years[d-1] && years[d-1]['school_1']).to_i,
30
30
  'school_2' => school_years_2[d.to_s] || 0,
31
- 'department_1' => department_years_1[d.to_s] || 0,
31
+ 'department_1' => (department_years_1[d.to_s] || 0) + (years[d-1] && years[d-1]['department_1']).to_i,
32
32
  'department_2' => department_years_2[d.to_s] || 0
33
33
  }
34
34
  end
@@ -94,7 +94,7 @@ module EducodeSales
94
94
  signed_users['10000-49999'][1] += 1
95
95
  end
96
96
  end
97
-
97
+
98
98
 
99
99
  ['1-9', '10-99', '100-999', '1000-9999', '10000-49999'].map do |d|
100
100
  {
@@ -109,10 +109,30 @@ module EducodeSales
109
109
  end
110
110
  end
111
111
 
112
+
113
+ def public_user
114
+ UserExtension.where(school_id: @school_ids).
115
+ group("DATE_FORMAT(user_extensions.created_at, '%Y')").
116
+ select("count(*) as count, DATE_FORMAT(user_extensions.created_at, '%Y') as year").count("*")
117
+ end
118
+
119
+ def public_school
120
+ School.where(id: @school_ids).
121
+ group("DATE_FORMAT(schools.created_at, '%Y')").
122
+ select("count(*) as count, DATE_FORMAT(schools.created_at, '%Y') as year").count("*")
123
+ end
124
+
125
+ def public_department
126
+ Department.where(school_id: @school_ids).
127
+ group("DATE_FORMAT(departments.created_at, '%Y')").
128
+ select("count(*) as count, DATE_FORMAT(departments.created_at, '%Y') as year").count("*")
129
+ end
130
+
112
131
  def year_users(clazz)
113
132
  EducodeSales::Business.joins(:last_follow_up).
114
133
  joins("join user_extensions ON user_extensions.department_id = educode_sales_businesses.department_id").
115
134
  where("educode_sales_follow_ups.o_business_deployment = #{clazz}").
135
+ where(school_id: @school_ids).
116
136
  group("DATE_FORMAT(user_extensions.created_at, '%Y')").
117
137
  select("count(*) as count, DATE_FORMAT(user_extensions.created_at, '%Y') as year").
118
138
  distinct.count("user_extensions.id")
@@ -122,6 +142,7 @@ module EducodeSales
122
142
  EducodeSales::Business.joins(:last_follow_up).
123
143
  joins("join schools ON schools.id = educode_sales_businesses.school_id").
124
144
  where("educode_sales_follow_ups.o_business_deployment = #{clazz}").
145
+ where(school_id: @school_ids).
125
146
  group("DATE_FORMAT(schools.created_at, '%Y')").
126
147
  select("count(*) as count, DATE_FORMAT(schools.created_at, '%Y') as year").
127
148
  distinct.count("school_id")
@@ -131,6 +152,7 @@ module EducodeSales
131
152
  EducodeSales::Business.joins(:last_follow_up).
132
153
  joins("join departments ON departments.id = educode_sales_businesses.department_id").
133
154
  where("educode_sales_follow_ups.o_business_deployment = #{clazz}").
155
+ where(school_id: @school_ids).
134
156
  group("DATE_FORMAT(departments.created_at, '%Y')").
135
157
  select("count(*) as count, DATE_FORMAT(departments.created_at, '%Y') as year").
136
158
  distinct.count("school_id")
@@ -16,12 +16,68 @@
16
16
  </div>
17
17
  <br>
18
18
  <div class="layui-inline" style="padding-top: 20px">
19
- <label class="layui-form-label ">商机来源</label>
20
- <input id="source" type="text" name="source" autocomplete="off" class="layui-input" value="<%=@business.source %>" style="width: 300px;" placeholder="请输入商机来源">
19
+ <label class="layui-form-label required">商机来源</label>
20
+ <input id="source" type="text" name="source" autocomplete="off" lay-verify="required" class="layui-input" value="<%=@business.source %>" style="width: 300px;" placeholder="请输入商机来源">
21
21
  </div>
22
22
  <div class="layui-inline" style="padding-top: 20px">
23
23
  <p style="padding-left: 40px">请填写提供本商机的人名(如‘张明’);如果为非头歌用户,请增加单位信息(如‘张明,华为公司’)</p>
24
24
  </div>
25
+ <div class="layui-form-item" style="padding-top: 20px">
26
+ <label class="layui-form-label">会议活动</label>
27
+ <div class="layui-input-inline" style="line-height: 38px;">
28
+ <div id="activity" style="width: 300px"></div>
29
+ </div>
30
+ </div>
31
+ <div class="layui-form-item">
32
+ <label class="layui-form-label">渠道代理:</label>
33
+ <div class="layui-input-inline" style="line-height: 38px;">
34
+ <div id="place" style="width: 300px"></div>
35
+ </div>
36
+ </div>
37
+ <div class="layui-form-item">
38
+ <label class="layui-form-label">客户</label>
39
+ <div class="layui-input-inline" style="line-height: 38px;">
40
+ <div id="customer" style="width: 300px"></div>
41
+ </div>
42
+ </div>
43
+ <div class="layui-inline">
44
+ <label class="layui-form-label">公司资源</label>
45
+ <div class="layui-input-block">
46
+ <input type="text" name="company_source" autocomplete="off" class="layui-input" value="<%= @business.company_source %>">
47
+ </div>
48
+ </div>
49
+ <div class="layui-inline">
50
+ <label class="layui-form-label">400电话</label>
51
+ <div class="layui-input-block">
52
+ <input type="text" name="phone" autocomplete="off" class="layui-input" value="<%= @business.phone %>">
53
+ </div>
54
+ </div>
55
+ <div class="layui-inline">
56
+ <label class="layui-form-label">商务邮箱</label>
57
+ <div class="layui-input-block">
58
+ <input type="text" name="email" autocomplete="off" class="layui-input" value="<%= @business.email %>">
59
+ </div>
60
+ </div>
61
+
62
+ <div class="layui-inline">
63
+ <label class="layui-form-label">合作伙伴</label>
64
+ <div class="layui-input-block">
65
+ <input type="text" name="partner" autocomplete="off" class="layui-input" value="<%= @business.partner %>">
66
+ </div>
67
+ </div>
68
+ <div class="layui-inline">
69
+ <label class="layui-form-label">招标信息</label>
70
+ <div class="layui-input-block">
71
+ <input type="text" name="invite_info" autocomplete="off" class="layui-input" value="<%= @business.invite_info %>">
72
+ </div>
73
+ </div>
74
+
75
+ <div class="layui-inline">
76
+ <label class="layui-form-label">朋友</label>
77
+ <div class="layui-input-block">
78
+ <input type="text" name="friend" autocomplete="off" class="layui-input" value="<%= @business.friend %>">
79
+ </div>
80
+ </div>
25
81
  <% if can?(:merge_business, EducodeSales::Business) %>
26
82
  <div class="layui-inline-block" style="padding-top: 20px">
27
83
  <label class="layui-form-label ">合并商机</label>
@@ -133,6 +189,90 @@
133
189
  data: []
134
190
  })
135
191
 
192
+ var activity_id = gon.activity_id;
193
+ var activity_select = selectInput.render({
194
+ elem: '#activity',
195
+ name: 'activity_id', // 渲染的input的name值
196
+ layFilter: 'test', //同layui form参数lay-filter
197
+ // layVerify: 'required', //同layui form参数lay-verify
198
+ layVerType: 'tips', // 同layui form参数lay-verType
199
+ layReqText: '请填写文本', //同layui form参数lay-ReqText
200
+ initValue: gon.activity_id, // 渲染初始化默认值
201
+ hasSelectIcon: false,
202
+ placeholder: '请输入会议活动', // 渲染的inputplaceholder值
203
+ data: gon.activity,
204
+ remoteSearch: true, // 是否启用远程搜索 默认是false,和远程搜索回调保存同步
205
+ remoteMethod: function (value, cb) { // 远程搜索的回调函数
206
+ if (!value) {
207
+ activity_id = "";
208
+ return cb([]);
209
+ }
210
+ request.get('missions/search_activity?q=' + value, {}, function (res) {
211
+ if (res.data.length == 0) {
212
+ activity_select.emptyValue();
213
+ return cb([])
214
+ }
215
+ return cb(res)
216
+ })
217
+ }
218
+ });
219
+
220
+ var place_id = gon.place_id;
221
+ var place_select = selectInput.render({
222
+ elem: '#place',
223
+ name: 'place_id', // 渲染的input的name值
224
+ layFilter: 'test', //同layui form参数lay-filter
225
+ // layVerify: 'required', //同layui form参数lay-verify
226
+ layVerType: 'tips', // 同layui form参数lay-verType
227
+ layReqText: '请填写文本', //同layui form参数lay-ReqText
228
+ initValue: gon.place_id, // 渲染初始化默认值
229
+ hasSelectIcon: false,
230
+ placeholder: '请输入渠道代理', // 渲染的inputplaceholder值
231
+ data: gon.place,
232
+ remoteSearch: true, // 是否启用远程搜索 默认是false,和远程搜索回调保存同步
233
+ remoteMethod: function (value, cb) { // 远程搜索的回调函数
234
+ if (!value) {
235
+ place_id = "";
236
+ return cb([]);
237
+ }
238
+ request.get('missions/sales_place?q=' + value, {}, function (res) {
239
+ if (res.data.length == 0) {
240
+ place_select.emptyValue();
241
+ return cb([])
242
+ }
243
+ return cb(res)
244
+ })
245
+ }
246
+ });
247
+
248
+ var customer_id = gon.customer_id;
249
+ var customer_select = selectInput.render({
250
+ elem: '#customer',
251
+ name: 'customer_id', // 渲染的input的name值
252
+ layFilter: 'test', //同layui form参数lay-filter
253
+ // layVerify: 'required', //同layui form参数lay-verify
254
+ layVerType: 'tips', // 同layui form参数lay-verType
255
+ layReqText: '请填写文本', //同layui form参数lay-ReqText
256
+ initValue: gon.customer_id, // 渲染初始化默认值
257
+ hasSelectIcon: false,
258
+ placeholder: '请输入客户', // 渲染的inputplaceholder值
259
+ data: gon.customer,
260
+ remoteSearch: true, // 是否启用远程搜索 默认是false,和远程搜索回调保存同步
261
+ remoteMethod: function (value, cb) { // 远程搜索的回调函数
262
+ if (!value) {
263
+ customer_id = "";
264
+ return cb([]);
265
+ }
266
+ request.get('missions/search_customer?q=' + value, {}, function (res) {
267
+ if (res.data.length == 0) {
268
+ customer_select.emptyValue();
269
+ return cb([])
270
+ }
271
+ return cb(res)
272
+ })
273
+ }
274
+ });
275
+
136
276
  // 当前弹出层,防止ID被覆盖
137
277
  var parentIndex = layer.index;
138
278
 
@@ -143,9 +283,11 @@
143
283
  return false;
144
284
  } else {
145
285
  var field = data.field;
146
- console.log('field', field)
147
286
  field.department_id = department.getValue() || department_id;
148
287
  field.merge_business_ids = data.field.merge_business_ids;
288
+ field.activity_id = activity_select.getValue() || activity_id;
289
+ field.place_id = place_select.getValue() || place_id;
290
+ field.customer_id = customer_select.getValue() || customer_id;
149
291
  request.authPut("missions/businesses/" + parent.id, field, function (res) {
150
292
  if (res.success == false) {
151
293
  layer.alert(res.msg)
@@ -57,7 +57,7 @@
57
57
  <%= select_tag "business_year", options_for_select((2015..Time.now.year).to_a.reverse, params[:business_year]), { include_blank: true } %>
58
58
  </div>
59
59
  </div>
60
-
60
+
61
61
  <div class="layui-inline show_item_contract" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
62
62
  <label class="layui-form-label">中标时间</label>
63
63
  <div class="layui-input-inline">
@@ -349,6 +349,12 @@
349
349
  title: '部署类型',
350
350
  sort: true,
351
351
  },
352
+ {
353
+ field: 'p_deploy_time',
354
+ width: 150,
355
+ title: '部署时间',
356
+ sort: true,
357
+ },
352
358
  {
353
359
  field: 'budget_amount',
354
360
  width: 105,
@@ -25,7 +25,7 @@ json.data do
25
25
  json.service_end_time d.last_follow_up&.service_start_time.to_s + "-" + d.last_follow_up&.service_end_time.to_s
26
26
  json.created_at d.created_at.to_s
27
27
  json.no_followup_days (d['latest_time'] ? DateTime.parse(Time.now.strftime("%Y-%m-%d")) - DateTime.parse(d['latest_time'].strftime("%Y-%m-%d")) : DateTime.parse(Time.now.strftime("%Y-%m-%d")) - DateTime.parse(d.created_at.strftime("%Y-%m-%d"))).to_i
28
-
28
+
29
29
  json.staff_manages d.last_follow_up&.assign_follow_ups.present? ? (d.last_follow_up.assign_follow_ups.map{ |d| d.staff.user.real_name}.join("、")) : d.staff&.user&.real_name
30
30
  json.divide_rate d.divide_rate
31
31
  json.divide_money d.divide_amount.to_f.round(2)
@@ -0,0 +1,8 @@
1
+ json.data do
2
+ json.array! @data do |d|
3
+ json.value d.id
4
+ json.name d.name
5
+ end
6
+ end
7
+ json.code 0
8
+ json.msg 'succcess'
@@ -0,0 +1,8 @@
1
+ json.data do
2
+ json.array! @data do |d|
3
+ json.value d.id
4
+ json.name "#{d.school.name} #{d.name}"
5
+ end
6
+ end
7
+ json.code 0
8
+ json.msg 'succcess'
@@ -3,10 +3,10 @@
3
3
  <div class="" style="padding-right: 50px">
4
4
  <table class="layui-hide" id="table_7_year"></table>
5
5
  </div>
6
- <div class="" style="padding-right: 50px">
6
+ <div class="" style="padding-right: 50px;margin-top:30px;">
7
7
  <table class="layui-hide" id="table_7_school"></table>
8
8
  </div>
9
- <div class="" style="padding-right: 50px">
9
+ <div class="" style="padding-right: 50px;margin-top:30px;">
10
10
  <table class="layui-hide" id="table_7_signed"></table>
11
11
  </div>
12
12
  </div>
@@ -24,13 +24,18 @@
24
24
  title: '年份',
25
25
  align: 'center',
26
26
  width: 150,
27
- rowspan: 2
28
- }
27
+ rowspan: 2,
28
+ totalRowText:'合计',
29
+ }
29
30
  , {
30
31
  title: '公有云',
31
32
  align: 'center',
32
33
  width: 220,
33
34
  colspan: 3
35
+ }, {
36
+ align: 'center',
37
+ title: '混合云',
38
+ colspan: 3
34
39
  }, {
35
40
  align: 'center',
36
41
  title: '私有云',
@@ -41,40 +46,66 @@
41
46
  field: 'user_1',
42
47
  title: '用户数',
43
48
  align: 'center',
44
- width: 150
49
+ width: 110,
50
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
45
51
  }, {
46
52
  field: 'school_1',
47
53
  title: '学校数',
48
54
  align: 'center',
49
- width: 150
55
+ width: 110,
56
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
50
57
  }, {
51
58
  field: 'department_1',
52
59
  title: '学院数',
53
60
  align: 'center',
54
- width: 150
61
+ width: 110,
62
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
55
63
  },{
56
64
  field: 'user_2',
57
65
  title: '用户数',
58
66
  align: 'center',
59
- width: 150
67
+ width: 110,
68
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
60
69
  }, {
61
70
  field: 'school_2',
62
71
  title: '学校数',
63
72
  align: 'center',
64
- width: 150
73
+ width: 110,
74
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
65
75
  }, {
66
76
  field: 'department_2',
67
77
  align: 'center',
68
78
  title: '学院数',
69
- width: 150
79
+ width: 110,
80
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
81
+ },{
82
+ field: 'user_2',
83
+ title: '用户数',
84
+ align: 'center',
85
+ width: 110,
86
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
87
+ }, {
88
+ field: 'school_2',
89
+ title: '学校数',
90
+ align: 'center',
91
+ width: 110,
92
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
93
+ }, {
94
+ field: 'department_2',
95
+ align: 'center',
96
+ title: '学院数',
97
+ width: 110,
98
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
70
99
  }]
71
100
  ],
72
101
  data: gon.table_1,
102
+ totalRow: true,
73
103
  page: false
74
104
  });
75
105
 
76
106
  table.render({
77
107
  elem: '#table_7_school',
108
+ totalRow: true,
78
109
  cols: [
79
110
  [
80
111
  {
@@ -82,8 +113,9 @@
82
113
  title: '用户数分布',
83
114
  align: 'center',
84
115
  width: 150,
85
- rowspan: 2
86
- }
116
+ rowspan: 2,
117
+ totalRowText:'合计',
118
+ }
87
119
  , {
88
120
  title: '客户数',
89
121
  align: 'center',
@@ -98,32 +130,38 @@
98
130
  field: 'schools',
99
131
  title: '学校数',
100
132
  align: 'center',
101
- width: 150
133
+ width: 150,
134
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
102
135
  }, {
103
136
  field: 'departments',
104
137
  title: '学院数',
105
138
  align: 'center',
106
- width: 150
139
+ width: 150,
140
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
107
141
  }, {
108
142
  field: 'majors',
109
143
  title: '专业数',
110
144
  align: 'center',
111
- width: 150
145
+ width: 150,
146
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
112
147
  },{
113
148
  field: 'signed_schools',
114
149
  title: '学校数',
115
150
  align: 'center',
116
- width: 150
151
+ width: 150,
152
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
117
153
  }, {
118
154
  field: 'signed_departments',
119
155
  title: '学院数',
120
156
  align: 'center',
121
- width: 150
157
+ width: 150,
158
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
122
159
  }, {
123
160
  field: 'signed_majors',
124
161
  align: 'center',
125
162
  title: '专业数',
126
- width: 150
163
+ width: 150,
164
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
127
165
  }]
128
166
  ],
129
167
  data: gon.table_2,
@@ -132,15 +170,17 @@
132
170
 
133
171
  table.render({
134
172
  elem: '#table_7_signed',
173
+ totalRow: true,
135
174
  cols: [
136
175
  [
137
176
  {
138
177
  field: 'num',
139
- title: '用户数分布',
178
+ title: '教师数分布',
140
179
  align: 'center',
141
180
  width: 150,
142
- rowspan: 2
143
- }
181
+ rowspan: 2,
182
+ totalRowText:'合计',
183
+ }
144
184
  , {
145
185
  title: '客户数',
146
186
  align: 'center',
@@ -155,32 +195,38 @@
155
195
  field: 'schools',
156
196
  title: '学校数',
157
197
  align: 'center',
158
- width: 150
198
+ width: 150,
199
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
159
200
  }, {
160
201
  field: 'departments',
161
202
  title: '学院数',
162
203
  align: 'center',
163
- width: 150
204
+ width: 150,
205
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
164
206
  }, {
165
207
  field: 'majors',
166
208
  title: '专业数',
167
209
  align: 'center',
168
- width: 150
210
+ width: 150,
211
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
169
212
  },{
170
213
  field: 'signed_schools',
171
214
  title: '学校数',
172
215
  align: 'center',
173
- width: 150
216
+ width: 150,
217
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
174
218
  }, {
175
219
  field: 'signed_departments',
176
220
  title: '学院数',
177
221
  align: 'center',
178
- width: 150
222
+ width: 150,
223
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
179
224
  }, {
180
225
  field: 'signed_majors',
181
226
  align: 'center',
182
227
  title: '专业数',
183
- width: 150
228
+ width: 150,
229
+ totalRow: '{{ parseInt(d.TOTAL_NUMS) }}',
184
230
  }]
185
231
  ],
186
232
  data: gon.table_3,
data/config/routes.rb CHANGED
@@ -17,6 +17,8 @@ EducodeSales::Engine.routes.draw do
17
17
  get :staff_business, to: "home#staff_business"
18
18
  get :staff_departments, to: "home#staff_departments"
19
19
  get :filter, to: "application#filter"
20
+ get :search_activity, to: "home#search_activity"
21
+ get :search_customer, to: "home#search_customer"
20
22
 
21
23
 
22
24
  resources :sessions do
@@ -0,0 +1,13 @@
1
+ class AddActivityEducodeSalesBusiness < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :educode_sales_businesses, :activity_id, :integer
4
+ add_column :educode_sales_businesses, :place_id, :integer
5
+ add_column :educode_sales_businesses, :customer_id, :integer
6
+ add_column :educode_sales_businesses, :company_source, :string
7
+ add_column :educode_sales_businesses, :phone, :string
8
+ add_column :educode_sales_businesses, :email, :string
9
+ add_column :educode_sales_businesses, :partner, :string
10
+ add_column :educode_sales_businesses, :invite_info, :string
11
+ add_column :educode_sales_businesses, :friend, :string
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '0.9.96'
2
+ VERSION = '0.9.98'
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.96
4
+ version: 0.9.98
5
5
  platform: ruby
6
6
  authors:
7
7
  - anke1460
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-18 00:00:00.000000000 Z
11
+ date: 2023-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -355,6 +355,8 @@ files:
355
355
  - app/views/educode_sales/home/sales_place.json.jbuilder
356
356
  - app/views/educode_sales/home/sales_staff.json.jbuilder
357
357
  - app/views/educode_sales/home/search.json.jbuilder
358
+ - app/views/educode_sales/home/search_activity.json.jbuilder
359
+ - app/views/educode_sales/home/search_customer.json.jbuilder
358
360
  - app/views/educode_sales/home/search_edu_teacher.json.jbuilder
359
361
  - app/views/educode_sales/home/search_edu_user.json.jbuilder
360
362
  - app/views/educode_sales/home/search_operation_teacher.json.jbuilder
@@ -679,6 +681,7 @@ files:
679
681
  - db/migrate/20230501034307_create_educode_sales_follow_up_trends.rb
680
682
  - db/migrate/20230502142912_create_educode_sales_product_catalogs.rb
681
683
  - db/migrate/20230510144317_create_educode_sales_sales_details.rb
684
+ - db/migrate/20230520023902_add_activity_educode_sales_business.rb
682
685
  - lib/educode_sales.rb
683
686
  - lib/educode_sales/engine.rb
684
687
  - lib/educode_sales/version.rb
@@ -702,7 +705,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
702
705
  - !ruby/object:Gem::Version
703
706
  version: '0'
704
707
  requirements: []
705
- rubygems_version: 3.0.0
708
+ rubygems_version: 3.0.9
706
709
  signing_key:
707
710
  specification_version: 4
708
711
  summary: Summary of EducodeSales.