educode_sales 1.10.37 → 1.10.41
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 +4 -4
- data/app/controllers/educode_sales/application_controller.rb +13 -0
- data/app/controllers/educode_sales/contracts_controller.rb +33 -3
- data/app/controllers/educode_sales/ideas_controller.rb +17 -7
- data/app/controllers/educode_sales/money_plan_records_controller.rb +14 -7
- data/app/controllers/educode_sales/money_plans_controller.rb +5 -1
- data/app/controllers/educode_sales/sale_trends_controller.rb +17 -9
- data/app/views/educode_sales/businesses/index.html.erb +2 -2
- data/app/views/educode_sales/contracts/_list.html.erb +26 -2
- data/app/views/educode_sales/contracts/index.json.jbuilder +3 -1
- data/app/views/educode_sales/ideas/_index.html.erb +23 -2
- data/app/views/educode_sales/ideas/index.json.jbuilder +1 -1
- data/app/views/educode_sales/ideas/new.html.erb +11 -6
- data/app/views/educode_sales/money_plan_records/_index.html.erb +20 -7
- data/app/views/educode_sales/money_plan_records/index.json.jbuilder +3 -1
- data/app/views/educode_sales/money_plans/_index.html.erb +56 -42
- data/app/views/educode_sales/money_plans/index.json.jbuilder +3 -1
- data/lib/educode_sales/version.rb +1 -1
- metadata +5 -6
- data/app/assets/images/educode_sales/indexlogo.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75f1104743151bb685cb17c27471acf756a43103c059b78fdbbc85d897008420
|
4
|
+
data.tar.gz: 1abca2361e351da1e62f2a04e1a98c72e01f953ab653d6e6fc3904294532e38e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b93100ae277a43e93b44ed6ba56433123a8427d44b34ec3706b09e62987698d3672b81f8322bc6fc4af43f0e4ea0b2758b71e11368b87b33d7225ca28287b0a2
|
7
|
+
data.tar.gz: 1ddb1e12b4f3102d9ad751d04fc00975cd18c765fa378f454862a73e8f2927b8cc3810ad151ae06b9d1451a26bfb2604ec730822dc63a72da23449d9fe948b17
|
@@ -41,6 +41,19 @@ module EducodeSales
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
def paginate(relation)
|
45
|
+
limit = params[:limit] || params[:per_page]
|
46
|
+
limit = (limit.to_i.zero? || limit.to_i > 100) ? 20 : limit.to_i
|
47
|
+
page = params[:page].to_i.zero? ? 1 : params[:page].to_i
|
48
|
+
offset = (page - 1) * limit
|
49
|
+
|
50
|
+
if relation.is_a?(Array)
|
51
|
+
relation[offset, limit]
|
52
|
+
else
|
53
|
+
relation.limit(limit).offset(offset)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
44
57
|
|
45
58
|
|
46
59
|
rescue_from CanCan::AccessDenied do |exception|
|
@@ -206,8 +206,8 @@ module EducodeSales
|
|
206
206
|
@businesses = @businesses.order("educode_sales_businesses.created_at desc")
|
207
207
|
end
|
208
208
|
|
209
|
-
|
210
|
-
|
209
|
+
if params[:page].present?
|
210
|
+
@businesses = @businesses.select("
|
211
211
|
distinct
|
212
212
|
educode_sales_businesses.*,
|
213
213
|
last_follow.invitation_at,
|
@@ -237,8 +237,38 @@ module EducodeSales
|
|
237
237
|
GROUP BY educode_sales_follow_ups.business_id
|
238
238
|
) AS total_follow_ups ON educode_sales_businesses.id = total_follow_ups.business_id
|
239
239
|
").includes(:users, last_follow_up: [:clazz, :assign_follow_ups]).page(params[:page]).per(params[:limit])
|
240
|
+
end
|
240
241
|
|
241
|
-
|
242
|
+
@businesses = @businesses.select("
|
243
|
+
distinct
|
244
|
+
educode_sales_businesses.*,
|
245
|
+
last_follow.invitation_at,
|
246
|
+
last_follow.budget_amount,
|
247
|
+
last_follow.o_business_deployment,
|
248
|
+
last_follow.service_time_long,
|
249
|
+
last_follow.service_end_time,
|
250
|
+
last_follow.service_start_time,
|
251
|
+
last_follow.reception_at,
|
252
|
+
last_follow.bidded_date,
|
253
|
+
last_follow.signed_date,
|
254
|
+
last_follow.year,
|
255
|
+
last_follow.created_at as latest_time,
|
256
|
+
last_follow.actual_amount,
|
257
|
+
last_follow.divide_rate,
|
258
|
+
last_follow.divide_amount,
|
259
|
+
(last_follow.total_amount - last_follow.actual_amount) as divide_money,
|
260
|
+
(last_follow.actual_amount - educode_sales_businesses.return_money) as wait_return_money,
|
261
|
+
last_follow.total_amount,
|
262
|
+
total_follow_ups.follow_ups_counts
|
263
|
+
").joins("
|
264
|
+
LEFT JOIN educode_sales_follow_ups AS last_follow ON educode_sales_businesses.last_follow_up_id = last_follow.id AND last_follow.deleted_at IS NULL
|
265
|
+
LEFT JOIN (
|
266
|
+
SELECT COUNT(*) AS follow_ups_counts, educode_sales_follow_ups.business_id
|
267
|
+
FROM educode_sales_follow_ups
|
268
|
+
WHERE educode_sales_follow_ups.deleted_at IS NULL
|
269
|
+
GROUP BY educode_sales_follow_ups.business_id
|
270
|
+
) AS total_follow_ups ON educode_sales_businesses.id = total_follow_ups.business_id
|
271
|
+
").includes(:users, last_follow_up: [:clazz, :assign_follow_ups])
|
242
272
|
end
|
243
273
|
end
|
244
274
|
end
|
@@ -44,6 +44,9 @@ module EducodeSales
|
|
44
44
|
@sale_staff_arr = EducodeSales::Staff.joins(:user).where(id: sale_staff_ids).pluck("concat(users.lastname,users.firstname)", :id)
|
45
45
|
filter = Filter.find_or_create_by(staff_id: @current_admin.id, clazz: "ideas")
|
46
46
|
gon.filter = filter.extras || {}
|
47
|
+
|
48
|
+
#协助人
|
49
|
+
@assist_staffs = Staff.where.not(role_id: 11).includes(:user).map{ |d| {name: d.user.real_name, value: d.id}}
|
47
50
|
end
|
48
51
|
format.json do
|
49
52
|
@ideas = params[:is_deleted].to_s == "true" ? Idea.deleted : Idea.not_deleted
|
@@ -54,14 +57,14 @@ module EducodeSales
|
|
54
57
|
level = @current_admin.role.role_areas.find_by(clazz: '方案管理').try(:level)
|
55
58
|
case level
|
56
59
|
when '自己'
|
57
|
-
idea_ids = @ideas.select { |d| Array(d.other_staff_ids).include?(@current_admin.id) || d.sale_staff_id == @current_admin.id || Array(d.assist_staff_ids).include?(@current_admin.id) || d.staff_id == @current_admin.id }.map { |d| d.id }
|
60
|
+
idea_ids = @ideas.select { |d| Array(d.other_staff_ids).include?(@current_admin.id.to_s) || d.sale_staff_id == @current_admin.id || Array(d.assist_staff_ids).include?(@current_admin.id.to_s) || d.staff_id == @current_admin.id }.map { |d| d.id }
|
58
61
|
@ideas = @ideas.where("educode_sales_ideas.creator_id = ? OR educode_sales_ideas.id in (?)", @current_admin.id, idea_ids)
|
59
62
|
when '区域'
|
60
63
|
# 查看区域商机,需要排除掉其它人员手上的监管学校
|
61
64
|
other_staff_school_id = EducodeSales::StaffSchool.where.not(staff_id: @current_admin.id).where("school_id IN (SELECT school_id FROM educode_sales_staff_schools WHERE staff_id = #{@current_admin.id}) IS NOT TRUE").distinct.pluck :school_id
|
62
65
|
|
63
66
|
school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id) + StaffSchool.where(staff_id: @current_admin.id).pluck(:school_id) - other_staff_school_id
|
64
|
-
idea_ids = @ideas.select { |d| Array(d.other_staff_ids).include?(@current_admin.id) || d.sale_staff_id == @current_admin.id || Array(d.assist_staff_ids).include?(@current_admin.id) || d.staff_id == @current_admin.id }.map { |d| d.id }
|
67
|
+
idea_ids = @ideas.select { |d| Array(d.other_staff_ids).include?(@current_admin.id.to_s) || d.sale_staff_id == @current_admin.id || Array(d.assist_staff_ids).include?(@current_admin.id.to_s) || d.staff_id == @current_admin.id }.map { |d| d.id }
|
65
68
|
@ideas = @ideas.left_joins(department: :school).where("schools.id in (?) OR educode_sales_ideas.creator_id = ? OR educode_sales_ideas.id in (?)", school_ids, @current_admin.id, idea_ids)
|
66
69
|
else
|
67
70
|
@ideas = @ideas
|
@@ -74,7 +77,7 @@ module EducodeSales
|
|
74
77
|
@ideas = @ideas.where("educode_sales_ideas.created_at >= ? AND educode_sales_ideas.created_at <= ?", date[0] + " 00:00:00", date[1] + " 23:59:59")
|
75
78
|
end
|
76
79
|
if params[:q].present? && params[:q][:name].present?
|
77
|
-
@ideas = @ideas.where("educode_sales_ideas.name like ?", "%#{params[:q][:name]}%")
|
80
|
+
@ideas = @ideas.joins(:business).where("educode_sales_ideas.name like ? or educode_sales_businesses.name like ?", "%#{params[:q][:name]}%", "%#{params[:q][:name]}%")
|
78
81
|
end
|
79
82
|
if params[:q].present? && params[:q][:school].present?
|
80
83
|
@ideas = @ideas.left_joins(:school).where("schools.name like ?", "%#{params[:q][:school]}%")
|
@@ -109,7 +112,12 @@ module EducodeSales
|
|
109
112
|
@ideas = @ideas.where(level: params[:q][:level])
|
110
113
|
end
|
111
114
|
|
112
|
-
|
115
|
+
if params[:q].present? && params[:q][:assist_staffs].present?
|
116
|
+
@ideas = @ideas.select{|d| d&.assist_staff_ids.include?(params[:q][:assist_staffs])}
|
117
|
+
end
|
118
|
+
@ideas_count = @ideas.count
|
119
|
+
|
120
|
+
@ideas = paginate @ideas
|
113
121
|
end
|
114
122
|
end
|
115
123
|
end
|
@@ -141,10 +149,11 @@ module EducodeSales
|
|
141
149
|
other_staff_ids = Array(params[:other_staff_ids].to_s.split(","))
|
142
150
|
if params[:business_id].present?
|
143
151
|
idea.business_id = params[:business_id]
|
152
|
+
idea.school_id = idea.business&.department&.school_id
|
144
153
|
elsif params[:school_id].present?
|
145
154
|
idea.name = params[:project_name]
|
146
155
|
end
|
147
|
-
if
|
156
|
+
if idea.school_id.blank?
|
148
157
|
idea.school_id = params[:school_id]
|
149
158
|
end
|
150
159
|
idea.attachment_ids = attachment_ids
|
@@ -180,10 +189,11 @@ module EducodeSales
|
|
180
189
|
# @idea.other_staff_ids = other_staff_ids
|
181
190
|
if params[:business_id].present?
|
182
191
|
@idea.business_id = params[:business_id]
|
192
|
+
@idea.school_id = @idea.business&.department&.school_id
|
183
193
|
elsif params[:school_id].present?
|
184
194
|
@idea.name = params[:project_name]
|
185
195
|
end
|
186
|
-
if
|
196
|
+
if @idea.school_id.blank?
|
187
197
|
@idea.school_id = params[:school_id]
|
188
198
|
end
|
189
199
|
check_changes
|
@@ -357,7 +367,7 @@ module EducodeSales
|
|
357
367
|
params.permit(:name, :level, :staff_id,
|
358
368
|
:status, :types, :model, :hardware, :project,
|
359
369
|
:money, :end_time, :content, :department_id,
|
360
|
-
:manager_name, :manager_phone, :school_name, :department_name, :attachment_id, :idea_type)
|
370
|
+
:manager_name, :manager_phone, :school_name, :department_name, :attachment_id, :idea_type, :school_id, :business_id)
|
361
371
|
end
|
362
372
|
|
363
373
|
def find_idea
|
@@ -18,6 +18,7 @@ module EducodeSales
|
|
18
18
|
format.json do
|
19
19
|
@money_plan_records = MoneyPlanRecord.left_joins(:money_plan_claims).group("educode_sales_money_plan_records.id").select("educode_sales_money_plan_records.*, COUNT(educode_sales_money_plan_claims.id) AS claim_num")
|
20
20
|
if @current_admin.is_admin?
|
21
|
+
@money_plan_records = @money_plan_records
|
21
22
|
else
|
22
23
|
level = @current_admin.role.role_areas.find_by(clazz: '回款管理').level
|
23
24
|
case level
|
@@ -79,7 +80,11 @@ module EducodeSales
|
|
79
80
|
else
|
80
81
|
@money_plan_records = @money_plan_records.order(created_at: :desc)
|
81
82
|
end
|
82
|
-
|
83
|
+
|
84
|
+
if params[:page].present?
|
85
|
+
@money_plan_records = @money_plan_records.page(params[:page]).per(params[:limit])
|
86
|
+
end
|
87
|
+
@money_plan_records = @money_plan_records
|
83
88
|
end
|
84
89
|
end
|
85
90
|
end
|
@@ -195,12 +200,14 @@ module EducodeSales
|
|
195
200
|
key_person.save
|
196
201
|
end
|
197
202
|
|
198
|
-
last_follow_up.money_plans.each do |d|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
end
|
203
|
+
# last_follow_up.money_plans.each do |d|
|
204
|
+
# money = d.dup
|
205
|
+
# money.staff = @current_admin
|
206
|
+
# money.follow_up_id = follow_up.id
|
207
|
+
# money.save
|
208
|
+
# end
|
209
|
+
# 上次的回款计划的跟进也要同步到最新的跟进id,不然回款计划列表会找不到
|
210
|
+
EducodeSales::MoneyPlan.where(business_id: d.id, id: params[:money_plan_ids]).update_all(follow_up_id: follow_up.id)
|
204
211
|
|
205
212
|
# 合同里签到日期全同步到最新跟进
|
206
213
|
last_follow_up.contract_date_lists.update_all(follow_up_id: follow_up.id)
|
@@ -59,7 +59,11 @@ module EducodeSales
|
|
59
59
|
else
|
60
60
|
@money_plans = @money_plans.order(date_at: :desc)
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
|
+
if params[:page].present?
|
64
|
+
@money_plans = @money_plans.page(params[:page]).per(params[:limit])
|
65
|
+
end
|
66
|
+
@money_plans = @money_plans
|
63
67
|
end
|
64
68
|
end
|
65
69
|
end
|
@@ -537,7 +537,7 @@ module EducodeSales
|
|
537
537
|
data_1_hash = {}
|
538
538
|
data_1_total_hash = {}
|
539
539
|
data_1.each do |d|
|
540
|
-
data_1_hash[d.month] = d.count_type.round(2)
|
540
|
+
data_1_hash[d.month] = d.count_type ? d.count_type.round(2) : 0
|
541
541
|
end
|
542
542
|
|
543
543
|
last_month = 0
|
@@ -577,10 +577,14 @@ module EducodeSales
|
|
577
577
|
last_month = month.split("-")[0]
|
578
578
|
end
|
579
579
|
|
580
|
-
data_3 =
|
581
|
-
|
582
|
-
|
583
|
-
|
580
|
+
data_3 = EducodeSales::MoneyPlanRecord.from("(
|
581
|
+
SELECT distinct(educode_sales_money_plan_records.id), educode_sales_money_plan_records.amount, date_at
|
582
|
+
FROM educode_sales_money_plan_records
|
583
|
+
JOIN educode_sales_money_plan_claims ON educode_sales_money_plan_claims.money_plan_record_id = educode_sales_money_plan_records.id
|
584
|
+
GROUP BY educode_sales_money_plan_records.id
|
585
|
+
) AS educode_sales_money_plan_records
|
586
|
+
").
|
587
|
+
where("educode_sales_money_plan_records.date_at >= ? AND educode_sales_money_plan_records.date_at <= ? ", begin_at, end_at).
|
584
588
|
select("SUM(amount) AS count_type, DATE_FORMAT(date_at, '%Y-%m') AS month").
|
585
589
|
group("DATE_FORMAT(date_at, '%Y-%m')").
|
586
590
|
order("DATE_FORMAT(date_at, '%Y-%m')")
|
@@ -692,10 +696,14 @@ module EducodeSales
|
|
692
696
|
last_month = month.split("-")[0]
|
693
697
|
end
|
694
698
|
|
695
|
-
data_3 = EducodeSales::
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
+
data_3 = EducodeSales::MoneyPlanRecord.from("(
|
700
|
+
SELECT distinct(educode_sales_money_plan_records.id), educode_sales_money_plan_records.amount, date_at
|
701
|
+
FROM educode_sales_money_plan_records
|
702
|
+
JOIN educode_sales_money_plan_claims ON educode_sales_money_plan_claims.money_plan_record_id = educode_sales_money_plan_records.id
|
703
|
+
GROUP BY educode_sales_money_plan_records.id
|
704
|
+
) AS educode_sales_money_plan_records
|
705
|
+
").
|
706
|
+
where("educode_sales_money_plan_records.date_at >= ? AND educode_sales_money_plan_records.date_at <= ? ", begin_at, end_at).
|
699
707
|
select("SUM(amount) AS count_type, DATE_FORMAT(date_at, '%Y') AS year").
|
700
708
|
group("DATE_FORMAT(date_at, '%Y')").
|
701
709
|
order("DATE_FORMAT(date_at, '%Y')")
|
@@ -838,7 +838,7 @@
|
|
838
838
|
data.year = "<%= params[:year] %>";
|
839
839
|
<% end %>
|
840
840
|
layer.load(0, {});
|
841
|
-
request.authPost("
|
841
|
+
request.authPost("missions/businesses/get_export_data", {
|
842
842
|
name: data.name,
|
843
843
|
area: data.area,
|
844
844
|
business_step: data.business_step,
|
@@ -859,7 +859,7 @@
|
|
859
859
|
data = res.data
|
860
860
|
table.exportFile(business_table.config.id,data, type);
|
861
861
|
layer.closeAll('loading');
|
862
|
-
request.get('
|
862
|
+
request.get('missions/businesses/add_export_records?type=' + type, {}, function (res) {
|
863
863
|
})
|
864
864
|
})
|
865
865
|
|
@@ -137,6 +137,7 @@
|
|
137
137
|
<script type="text/html" id="toolbar_contract">
|
138
138
|
<div class="layui-btn-container">
|
139
139
|
<span class="table-label">合同列表</span>
|
140
|
+
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="export">导出</button>
|
140
141
|
</div>
|
141
142
|
</script>
|
142
143
|
<script>
|
@@ -189,11 +190,13 @@
|
|
189
190
|
|
190
191
|
var business_step_list = xmSelect.render({
|
191
192
|
el: '#contract_business_step',
|
193
|
+
name: 'contract_business_step',
|
192
194
|
data: gon.business_step
|
193
195
|
})
|
194
196
|
|
195
197
|
var index_place_list = xmSelect.render({
|
196
198
|
el: '#contract_index_place',
|
199
|
+
name: 'contract_index_place',
|
197
200
|
model: {
|
198
201
|
icon: 'hidden',
|
199
202
|
label: {
|
@@ -481,7 +484,7 @@
|
|
481
484
|
$(".show_item_contract").toggle()
|
482
485
|
return false;
|
483
486
|
});
|
484
|
-
var
|
487
|
+
var contract_table = table.render({
|
485
488
|
elem: '#contact_table',
|
486
489
|
url: '/missions/contracts',
|
487
490
|
autoSort: false,
|
@@ -519,7 +522,7 @@
|
|
519
522
|
if (search['clazz']) {
|
520
523
|
data.field['clazz'] = search['clazz']
|
521
524
|
}
|
522
|
-
search = data.field
|
525
|
+
search = data.field;
|
523
526
|
table.reload('contact_table', {
|
524
527
|
url: '/missions/contracts',
|
525
528
|
page: {
|
@@ -543,6 +546,27 @@
|
|
543
546
|
return false;
|
544
547
|
});
|
545
548
|
|
549
|
+
/**
|
550
|
+
* toolbar事件监听
|
551
|
+
*/
|
552
|
+
table.on('toolbar(contact_table)', function (obj) {
|
553
|
+
if (obj.event === 'export') { //导出
|
554
|
+
layer.load(0, {});
|
555
|
+
var data = form.val("search_form");
|
556
|
+
var business_step = [];
|
557
|
+
business_step_list.getValue().forEach(function(d) {
|
558
|
+
business_step.push(d.value);
|
559
|
+
});
|
560
|
+
data.business_step = business_step.toString();
|
561
|
+
request.authGet("missions/contracts?" + $.param({q:data}), {
|
562
|
+
}, function (res) {
|
563
|
+
data = res.data;
|
564
|
+
table.exportFile(contract_table.config.id, data, 'xls');
|
565
|
+
layer.closeAll('loading');
|
566
|
+
})
|
567
|
+
}
|
568
|
+
});
|
569
|
+
|
546
570
|
table.on('tool(contact_table)', function (obj) {
|
547
571
|
var data = obj.data;
|
548
572
|
id = data.id
|
@@ -67,6 +67,12 @@
|
|
67
67
|
<input type="text" class="layui-input" id="school" name="school" placeholder=" - " autocomplete="off">
|
68
68
|
</div>
|
69
69
|
</div>
|
70
|
+
<div class="layui-inline">
|
71
|
+
<label class="layui-form-label">协助人</label>
|
72
|
+
<div class="layui-input-inline">
|
73
|
+
<div id="assist_staffs"></div>
|
74
|
+
</div>
|
75
|
+
</div>
|
70
76
|
|
71
77
|
<div class="layui-inline">
|
72
78
|
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
|
@@ -156,6 +162,15 @@
|
|
156
162
|
range: true
|
157
163
|
});
|
158
164
|
|
165
|
+
//协助人选择
|
166
|
+
var assist_staffs_select = xmSelect.render({
|
167
|
+
el: '#assist_staffs',
|
168
|
+
name: 'assist_staffs',
|
169
|
+
data: <%=raw @assist_staffs.to_json %>,
|
170
|
+
filterable: true,
|
171
|
+
radio: true
|
172
|
+
});
|
173
|
+
|
159
174
|
cols_table = [
|
160
175
|
[
|
161
176
|
{
|
@@ -342,7 +357,12 @@
|
|
342
357
|
|
343
358
|
// 监听搜索操作
|
344
359
|
form.on('submit(search_ideas)', function (data) {
|
345
|
-
|
360
|
+
var assist_staffs_value = [];
|
361
|
+
assist_staffs_select.getValue().forEach(function (d) {
|
362
|
+
assist_staffs_value.push(d.value)
|
363
|
+
});
|
364
|
+
data.field.assist_staffs = assist_staffs_value.toString();
|
365
|
+
search = data.field;
|
346
366
|
table.reload('ideas_table', {
|
347
367
|
page: {
|
348
368
|
curr: 1
|
@@ -365,7 +385,8 @@
|
|
365
385
|
types: "",
|
366
386
|
level: "",
|
367
387
|
history_type: ""
|
368
|
-
})
|
388
|
+
});
|
389
|
+
assist_staffs_select.setValue([]);
|
369
390
|
return false;
|
370
391
|
});
|
371
392
|
// form.on('submit(show_hide)', function (data) {
|
@@ -5,6 +5,12 @@
|
|
5
5
|
<div class="layui-row">
|
6
6
|
<h2 style="padding-left: 25px">方案信息</h2>
|
7
7
|
</div>
|
8
|
+
<div class="layui-col-md6" style="display: none">
|
9
|
+
<labeL class="layui-form-label">部门:</labeL>
|
10
|
+
<div class="layui-input-block">
|
11
|
+
<div id="department_id" style="width: 600px;"></div>
|
12
|
+
</div>
|
13
|
+
</div>
|
8
14
|
<div class="layui-row" style="padding-top: 15px">
|
9
15
|
<div class="layui-col-md6">
|
10
16
|
<labeL class="layui-form-label">单位联系人:</labeL>
|
@@ -419,11 +425,11 @@
|
|
419
425
|
})
|
420
426
|
data.field.school_id = schools[0];
|
421
427
|
|
422
|
-
var departments = [];
|
423
|
-
department_list.getValue().forEach(function (d) {
|
424
|
-
|
425
|
-
})
|
426
|
-
data.field.department_id = departments[0];
|
428
|
+
// var departments = [];
|
429
|
+
// department_list.getValue().forEach(function (d) {
|
430
|
+
// departments.push(d.value);
|
431
|
+
// })
|
432
|
+
// data.field.department_id = departments[0];
|
427
433
|
var business = [];
|
428
434
|
business_list.getValue().forEach(function (d) {
|
429
435
|
business.push(d.value);
|
@@ -434,7 +440,6 @@
|
|
434
440
|
data.field.assist_staff_ids = assist_staff_list.getValue('valueStr');
|
435
441
|
data.field.other_staff_ids = other_staff_list.getValue('valueStr');
|
436
442
|
data.field.attachment_ids = attachment_list.getValue('valueStr');
|
437
|
-
data.field.school_id = school_list.getValue('valueStr');
|
438
443
|
request.authPost("missions/ideas/", data.field, function (res) {
|
439
444
|
if (res.success == false) {
|
440
445
|
layer.alert(res.msg)
|
@@ -60,6 +60,7 @@
|
|
60
60
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" id="upload_money_plan_btn" style="margin-left: 20px;">批量导入回款计划</button>
|
61
61
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" style="margin-left: 20px;"
|
62
62
|
lay-event="add_record">添加回款记录</button>
|
63
|
+
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="export">导出</button>
|
63
64
|
<% end %>
|
64
65
|
</script>
|
65
66
|
|
@@ -95,9 +96,10 @@
|
|
95
96
|
range: true
|
96
97
|
});
|
97
98
|
form.render();
|
98
|
-
table.render({
|
99
|
+
var money_plan_record_table = table.render({
|
99
100
|
elem: '#money_plan_record_table',
|
100
101
|
url: '/missions/money_plan_records',
|
102
|
+
title: '回款记录列表',
|
101
103
|
toolbar: '#toolbar_money_plan_record',
|
102
104
|
defaultToolbar: ['filter'],
|
103
105
|
totalRow:true,
|
@@ -174,11 +176,13 @@
|
|
174
176
|
});
|
175
177
|
|
176
178
|
var staff_manages_list = xmSelect.render({
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
179
|
+
el: '#staff_manages',
|
180
|
+
name: 'staff_manages',
|
181
|
+
data: gon.staffs,
|
182
|
+
filterable: true,
|
183
|
+
radio: true,
|
184
|
+
});
|
185
|
+
|
182
186
|
var sort = {},
|
183
187
|
search = {};
|
184
188
|
table.on('sort(money_plan_record_table)', function(obj) {
|
@@ -243,8 +247,17 @@
|
|
243
247
|
$(window).on("resize", function() {
|
244
248
|
layer.full(sindex);
|
245
249
|
});
|
250
|
+
}else if(obj.event === 'export'){
|
251
|
+
layer.load(0, {});
|
252
|
+
var data = form.val("submit_form_record");
|
253
|
+
data.staff_manages = staff_manages_list.getValue('valueStr');
|
254
|
+
request.authGet("missions/money_plan_records?"+ $.param({q: data}), {}, function (res) {
|
255
|
+
data = res.data;
|
256
|
+
table.exportFile(money_plan_record_table.config.id, data, 'xls');
|
257
|
+
layer.closeAll('loading');
|
258
|
+
})
|
246
259
|
}
|
247
|
-
})
|
260
|
+
});
|
248
261
|
table.on('tool(money_plan_record_table)', function(obj) {
|
249
262
|
var data = obj.data;
|
250
263
|
id = data.id;
|
@@ -1,50 +1,52 @@
|
|
1
1
|
<%= Gon::Base.render_data %>
|
2
2
|
<div style="margin: 10px 10px 10px 10px" id="money_plan_list">
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
3
|
+
<form class="layui-form layui-form-pane" lay-filter="search_plans">
|
4
|
+
<div class="layui-form-item">
|
5
|
+
<div class="layui-inline">
|
6
|
+
<label class="layui-form-label">销售经理</label>
|
7
|
+
<div class="layui-input-inline">
|
8
|
+
<div id="plan_staff_manages" style="width: 190px;"></div>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
<div class="layui-inline">
|
12
|
+
<label class="layui-form-label">商机名称</label>
|
13
|
+
<div class="layui-input-inline">
|
14
|
+
<input type="text" name="business" class="layui-input">
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<div class="layui-inline">
|
18
|
+
<label class="layui-form-label">客户名称</label>
|
19
|
+
<div class="layui-input-inline">
|
20
|
+
<input type="text" name="school" class="layui-input">
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<div class="layui-inline">
|
24
|
+
<label class="layui-form-label">客户类型</label>
|
25
|
+
<div class="layui-input-inline">
|
26
|
+
<%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), {include_blank: true} %>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
<div class="layui-inline">
|
30
|
+
<label class="layui-form-label" style="width: 120px">计划回款时间</label>
|
31
|
+
<div class="layui-input-inline">
|
32
|
+
<input type="text" name="date_at" class="layui-input" id="date">
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
<div class="layui-inline">
|
36
|
+
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
|
37
37
|
</button>
|
38
|
-
|
38
|
+
<button type="submit" class="layui-btn layui-btn-primary" id="search_bt" lay-submit lay-filter="search_teachers">搜 索
|
39
39
|
</button>
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
</div>
|
41
|
+
</div>
|
42
|
+
</form>
|
43
43
|
</div>
|
44
44
|
<script type="text/html" id="toolbar_money_plan">
|
45
|
+
<span class="table-label">回款计划列表</span>
|
45
46
|
<% if can? :create, EducodeSales::MoneyPlan %>
|
46
47
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" style="margin-left: 20px;" lay-event="addMoney">添加回款计划</button>
|
47
|
-
|
48
|
+
<% end %>
|
49
|
+
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="export">导出</button>
|
48
50
|
</script>
|
49
51
|
|
50
52
|
<table class="layui-hide" id="money_plan_table" lay-filter="money_plan_table"></table>
|
@@ -82,15 +84,18 @@
|
|
82
84
|
|
83
85
|
var staff_manages_list = xmSelect.render({
|
84
86
|
el: '#plan_staff_manages',
|
87
|
+
name: 'plan_staff_manages',
|
85
88
|
data: gon.staffs,
|
86
89
|
filterable: true,
|
87
90
|
radio: true,
|
88
|
-
})
|
89
|
-
|
91
|
+
});
|
92
|
+
|
93
|
+
var money_plan_table = table.render({
|
90
94
|
elem: '#money_plan_table',
|
91
95
|
url: '/missions/money_plans',
|
92
96
|
toolbar: '#toolbar_money_plan',
|
93
97
|
defaultToolbar: ['filter'],
|
98
|
+
title: '回款计划列表',
|
94
99
|
initSort: {
|
95
100
|
field: 'date_at',
|
96
101
|
type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
|
@@ -245,8 +250,17 @@
|
|
245
250
|
$(window).on("resize", function() {
|
246
251
|
layer.full(sindex);
|
247
252
|
});
|
253
|
+
}else if (obj.event === 'export') {
|
254
|
+
layer.load(0, {});
|
255
|
+
var data = form.val("search_plans");
|
256
|
+
data.staff_manages = staff_manages_list.getValue('valueStr');
|
257
|
+
request.authGet("missions/money_plans?type='export'"+ $.param({q: data}), {}, function (res) {
|
258
|
+
data = res.data;
|
259
|
+
table.exportFile(money_plan_table.config.id, data, 'xls');
|
260
|
+
layer.closeAll('loading');
|
261
|
+
})
|
248
262
|
}
|
249
|
-
})
|
263
|
+
});
|
250
264
|
|
251
265
|
table.on('tool(money_plan_table)', function(obj) {
|
252
266
|
var data = obj.data;
|
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: 1.10.
|
4
|
+
version: 1.10.41
|
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-07-
|
11
|
+
date: 2023-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -105,7 +105,6 @@ 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
|
109
108
|
- app/assets/images/educode_sales/loading-0.gif
|
110
109
|
- app/assets/images/educode_sales/loading-1.gif
|
111
110
|
- app/assets/images/educode_sales/loading-2.gif
|
@@ -758,7 +757,7 @@ homepage: https://www.educoder.net
|
|
758
757
|
licenses:
|
759
758
|
- MIT
|
760
759
|
metadata: {}
|
761
|
-
post_install_message:
|
760
|
+
post_install_message:
|
762
761
|
rdoc_options: []
|
763
762
|
require_paths:
|
764
763
|
- lib
|
@@ -774,7 +773,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
774
773
|
version: '0'
|
775
774
|
requirements: []
|
776
775
|
rubygems_version: 3.0.9
|
777
|
-
signing_key:
|
776
|
+
signing_key:
|
778
777
|
specification_version: 4
|
779
778
|
summary: Summary of EducodeSales.
|
780
779
|
test_files: []
|
Binary file
|