educode_sales 0.5.0 → 0.5.4
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/assets/images/educode_sales//345/233/236/346/224/266/347/253/231.png +0 -0
- data/app/controllers/educode_sales/businesses_controller.rb +13 -6
- data/app/controllers/educode_sales/follow_ups_controller.rb +3 -2
- data/app/controllers/educode_sales/operation_plans_controller.rb +22 -2
- data/app/controllers/educode_sales/operation_reports_controller.rb +33 -3
- data/app/controllers/educode_sales/plans_controller.rb +23 -3
- data/app/controllers/educode_sales/recycles_controller.rb +95 -0
- data/app/controllers/educode_sales/roles_controller.rb +5 -0
- data/app/controllers/educode_sales/sale_reports_controller.rb +34 -4
- data/app/controllers/educode_sales/sale_trends_controller.rb +171 -0
- data/app/controllers/educode_sales/sales_controller.rb +4 -0
- data/app/controllers/educode_sales/staffs_controller.rb +4 -4
- data/app/controllers/educode_sales/upload_files_controller.rb +33 -26
- data/app/models/concerns/deletable.rb +8 -0
- data/app/models/educode_sales/application_record.rb +2 -0
- data/app/models/educode_sales/business.rb +15 -2
- data/app/models/educode_sales/common.rb +2 -1
- data/app/models/educode_sales/follow_up.rb +4 -2
- data/app/models/educode_sales/recycle.rb +5 -0
- data/app/models/educode_sales/sale_plan.rb +3 -0
- data/app/models/educode_sales/sale_report.rb +2 -0
- data/app/views/educode_sales/businesses/edit_follow_record.html.erb +3 -3
- data/app/views/educode_sales/businesses/edit_plan.html.erb +2 -2
- data/app/views/educode_sales/businesses/file.html.erb +5 -4
- data/app/views/educode_sales/businesses/index.html.erb +18 -3
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +6 -2
- data/app/views/educode_sales/businesses/show_follow.html.erb +7 -2
- data/app/views/educode_sales/businesses/show_follow_record.html.erb +1 -1
- data/app/views/educode_sales/businesses/upload_file.html.erb +4 -4
- data/app/views/educode_sales/operation_plans/index.html.erb +6 -1
- data/app/views/educode_sales/operation_reports/audit.html.erb +14 -6
- data/app/views/educode_sales/operation_reports/show.html.erb +13 -10
- data/app/views/educode_sales/places/index.html.erb +6 -1
- data/app/views/educode_sales/places/index.json.jbuilder +11 -1
- data/app/views/educode_sales/plans/index.html.erb +6 -1
- data/app/views/educode_sales/recycles/_business.html.erb +122 -0
- data/app/views/educode_sales/recycles/_monthPlan.html.erb +123 -0
- data/app/views/educode_sales/recycles/_monthly.html.erb +121 -0
- data/app/views/educode_sales/recycles/_weekPlan.html.erb +128 -0
- data/app/views/educode_sales/recycles/_weekly.html.erb +122 -0
- data/app/views/educode_sales/recycles/business.json.jbuilder +16 -0
- data/app/views/educode_sales/recycles/index.html.erb +58 -0
- data/app/views/educode_sales/recycles/monthPlan.json.jbuilder +16 -0
- data/app/views/educode_sales/recycles/monthly.json.jbuilder +15 -0
- data/app/views/educode_sales/recycles/weekPlan.json.jbuilder +16 -0
- data/app/views/educode_sales/recycles/weekly.json.jbuilder +15 -0
- data/app/views/educode_sales/roles/index.html.erb +19 -1
- data/app/views/educode_sales/roles/rename.html.erb +50 -0
- data/app/views/educode_sales/sale_reports/audit.html.erb +17 -6
- data/app/views/educode_sales/sale_reports/show.html.erb +11 -8
- data/app/views/educode_sales/sale_trends/trends.html.erb +233 -2
- data/app/views/educode_sales/sale_trends/trends.json.jbuilder +14 -0
- data/app/views/educode_sales/sales/index.html.erb +75 -9
- data/app/views/educode_sales/sales/index.json.jbuilder +35 -1
- data/app/views/educode_sales/sales/operations.json.jbuilder +11 -1
- data/app/views/educode_sales/staffs/index.html.erb +6 -1
- data/app/views/educode_sales/staffs/index.json.jbuilder +11 -1
- data/app/views/educode_sales/teachers/add_keys.html.erb +3 -3
- data/app/views/educode_sales/teachers/index.html.erb +7 -2
- data/app/views/educode_sales/teachers/new.html.erb +1 -0
- data/app/views/educode_sales/upload_files/index.json.jbuilder +1 -1
- data/app/views/layouts/educode_sales/application.html.erb +3 -0
- data/config/routes.rb +18 -0
- data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +6 -0
- data/db/migrate/20211109015617_create_educode_sales_recycles.rb +25 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +20 -2
@@ -20,43 +20,50 @@ module EducodeSales
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def create
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
23
|
+
folder = File.join(Rails.root, "public", "images", 'educode_sales')
|
24
|
+
upload_file = params["file"]
|
25
|
+
raise "未上传文件" unless upload_file
|
26
|
+
save_path = File.join(folder)
|
27
|
+
ext = file_ext(upload_file.original_filename)
|
28
|
+
local_path, digest = file_save_to_local(save_path, upload_file.tempfile, ext)
|
29
|
+
content_type = upload_file.content_type.presence || 'application/octet-stream'
|
30
|
+
disk_filename = local_path[save_path.size + 1, local_path.size]
|
31
|
+
@attachment = Attachment.where(disk_filename: disk_filename,
|
32
|
+
author_id: @current_admin.user_id).first
|
33
|
+
if @attachment.blank?
|
34
|
+
@attachment = Attachment.new
|
35
|
+
@attachment.filename = upload_file.original_filename
|
36
|
+
@attachment.description = "business"
|
37
|
+
@attachment.disk_filename = local_path[save_path.size + 1, local_path.size]
|
38
|
+
@attachment.filesize = upload_file.tempfile.size
|
39
|
+
@attachment.content_type = content_type
|
40
|
+
@attachment.digest = digest
|
41
|
+
@attachment.author_id = @current_admin.user_id
|
42
|
+
@attachment.container_id = params[:business_id]
|
43
|
+
@attachment.save!
|
44
|
+
else
|
45
|
+
logger.info "文件已存在,id = #{@attachment.id}, filename = #{@attachment.filename}"
|
46
|
+
end
|
47
|
+
render_success
|
47
48
|
end
|
48
49
|
|
49
50
|
def destroy
|
51
|
+
folder = File.join(Rails.root, "public", "images", 'educode_sales')
|
50
52
|
file = Attachment.find(params[:id])
|
51
53
|
file.destroy
|
52
|
-
File.delete("
|
54
|
+
File.delete(folder + "/" +file.disk_filename) if FileTest::exist?(folder + "/" +file.disk_filename)
|
53
55
|
render_success
|
54
56
|
end
|
55
57
|
|
56
58
|
def download
|
59
|
+
folder = File.join(Rails.root, "public", "images", 'educode_sales')
|
57
60
|
file = Attachment.find_by_id(params[:id])
|
58
61
|
raise "未找到文件" unless file
|
59
|
-
send_file("
|
62
|
+
send_file(folder + "/" +file.disk_filename, filename: file.title, stream: true, type: file.content_type.presence || 'application/octet-stream')
|
63
|
+
end
|
64
|
+
|
65
|
+
def edu_setting name
|
66
|
+
EduSetting.get(name)
|
60
67
|
end
|
61
68
|
|
62
69
|
|
@@ -1,10 +1,23 @@
|
|
1
1
|
module EducodeSales
|
2
2
|
class Business < ApplicationRecord
|
3
|
+
|
3
4
|
belongs_to :staff
|
4
5
|
belongs_to :department
|
5
6
|
belongs_to :last_follow_up, class_name: 'FollowUp', optional: true
|
6
7
|
|
7
|
-
has_many :sale_plans
|
8
|
-
has_many :follow_ups
|
8
|
+
has_many :sale_plans
|
9
|
+
has_many :follow_ups
|
10
|
+
|
11
|
+
default_scope -> {where(deleted_at: nil)}
|
12
|
+
|
13
|
+
def soft_destroy(user_id)
|
14
|
+
self.update(deleted_at: Time.now)
|
15
|
+
self.sale_plans.each do |d|
|
16
|
+
d.soft_destroy(user_id)
|
17
|
+
end
|
18
|
+
self.follow_ups.update_all(deleted_at: Time.now)
|
19
|
+
EducodeSales::Recycle.create(source: self, deleter_id: user_id)
|
20
|
+
end
|
21
|
+
|
9
22
|
end
|
10
23
|
end
|
@@ -8,6 +8,7 @@ module EducodeSales
|
|
8
8
|
BTYPE = 'b_class'
|
9
9
|
CTYPE = 'c_class'
|
10
10
|
DTYPE = 'd_class'
|
11
|
+
ETYPE = 'e_class'
|
11
12
|
|
12
13
|
validates :name, uniqueness: {scope: :clazz, message: '已存在'}
|
13
14
|
|
@@ -25,7 +26,7 @@ module EducodeSales
|
|
25
26
|
}
|
26
27
|
|
27
28
|
def self.job_type_name
|
28
|
-
self.where(clazz: 'staff_type'
|
29
|
+
self.where(clazz: 'staff_type').pluck(:id, :name).to_h
|
29
30
|
end
|
30
31
|
|
31
32
|
def self.teacher_source_name
|
@@ -1,14 +1,16 @@
|
|
1
1
|
module EducodeSales
|
2
2
|
class FollowUp < ApplicationRecord
|
3
|
+
include ::Deletable
|
3
4
|
belongs_to :business, counter_cache: true
|
4
5
|
belongs_to :place, optional: true
|
5
|
-
has_many :money_plans
|
6
|
+
has_many :money_plans
|
6
7
|
has_many :key_person
|
7
8
|
has_many :teachers, through: :key_person
|
8
|
-
has_many :assign_follow_ups
|
9
|
+
has_many :assign_follow_ups
|
9
10
|
belongs_to :staff
|
10
11
|
belongs_to :stage, class_name: 'Common'
|
11
12
|
belongs_to :clazz, class_name: 'Common'
|
13
|
+
default_scope -> {where(deleted_at: nil)}
|
12
14
|
|
13
15
|
|
14
16
|
end
|
@@ -1,9 +1,12 @@
|
|
1
1
|
module EducodeSales
|
2
2
|
class SalePlan < ApplicationRecord
|
3
|
+
include ::Deletable
|
3
4
|
belongs_to :business
|
4
5
|
belongs_to :staff
|
5
6
|
validates :business_id, presence: true
|
6
7
|
|
7
8
|
validates :month, presence: true
|
9
|
+
|
10
|
+
default_scope -> {where(deleted_at: nil)}
|
8
11
|
end
|
9
12
|
end
|
@@ -65,13 +65,13 @@
|
|
65
65
|
</div>
|
66
66
|
<br>
|
67
67
|
<div class="layui-inline">
|
68
|
-
<label class="layui-form-label"
|
68
|
+
<label class="layui-form-label">总额(万)</label>
|
69
69
|
<div class="layui-input-inline">
|
70
70
|
<input name="total_amount" type="number" class="layui-input" value="<%= @follow_up.total_amount %>">
|
71
71
|
</div>
|
72
72
|
</div>
|
73
73
|
<div class="layui-inline">
|
74
|
-
<label class="layui-form-label"
|
74
|
+
<label class="layui-form-label">合同额(万)</label>
|
75
75
|
<div class="layui-input-inline">
|
76
76
|
<input name="actual_amount" type="number" class="layui-input" placeholder="本单位的签单金额" value="<%= @follow_up.actual_amount %>">
|
77
77
|
</div>
|
@@ -84,7 +84,7 @@
|
|
84
84
|
</div>
|
85
85
|
</div>
|
86
86
|
<div class="layui-inline">
|
87
|
-
<label class="layui-form-label"
|
87
|
+
<label class="layui-form-label">渠道分成(万)</label>
|
88
88
|
<div class="layui-input-inline">
|
89
89
|
<input name="divide_amount" class="layui-input" value="<%= @follow_up.divide_amount%>">
|
90
90
|
</div>
|
@@ -56,13 +56,13 @@
|
|
56
56
|
</div>
|
57
57
|
</script>
|
58
58
|
<script type="text/html" id="return_money_tabar">
|
59
|
-
{{# if(parent.is_latest){ }}
|
59
|
+
{{# if(parent.is_latest && parent.flag){ }}
|
60
60
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">保存</a>
|
61
61
|
<a class="layui-btn layui-btn-danger layui-btn-xs data-count-edit" lay-event="delete">删除</a>
|
62
62
|
{{# } }}
|
63
63
|
</script>
|
64
64
|
<script>
|
65
|
-
if(!parent.is_latest){
|
65
|
+
if(!parent.is_latest || !parent.flag){
|
66
66
|
document.getElementById("show_plan_box").style.display="none";//隐藏
|
67
67
|
}
|
68
68
|
layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'laydate'], function () {
|
@@ -1,3 +1,4 @@
|
|
1
|
+
<%= Gon::Base.render_data %>
|
1
2
|
<script type="text/html" id="toolbarDemo">
|
2
3
|
<div class="layui-btn-container">
|
3
4
|
<span class="table-label">附件信息</span>
|
@@ -112,20 +113,20 @@
|
|
112
113
|
});
|
113
114
|
|
114
115
|
|
115
|
-
|
116
116
|
table.on('tool(file)', function (obj) {
|
117
117
|
var data = obj.data;
|
118
118
|
var id = data.id
|
119
119
|
name = data.disk_filename
|
120
|
+
folder = gon.folder
|
121
|
+
console.log(folder);
|
120
122
|
if (obj.event === 'preview') {
|
121
123
|
if (data.content_type.split("/")[0] === "image"){
|
122
|
-
// var img = "<img src='/images/" + name + "' />";
|
123
124
|
layer.photos({
|
124
|
-
photos: { "data": [{"src": '/images/'+name}] }
|
125
|
+
photos: { "data": [{"src": '/images/educode_sales/' + name}] }
|
125
126
|
,anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机
|
126
127
|
});
|
127
128
|
}else if (data.content_type.split("/")[1] === "pdf"){
|
128
|
-
var pdf = '/images/' + name;
|
129
|
+
var pdf = '/images/educode_sales/' + name;
|
129
130
|
console.log(pdf);
|
130
131
|
var openWH = miniPage.getOpenWidthHeight();
|
131
132
|
layer.open({
|
@@ -53,7 +53,7 @@
|
|
53
53
|
<div class="layui-inline">
|
54
54
|
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
|
55
55
|
</button>
|
56
|
-
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">搜索
|
56
|
+
<button type="submit" id="search_bt" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">搜索
|
57
57
|
</button>
|
58
58
|
</div>
|
59
59
|
</div>
|
@@ -173,11 +173,13 @@
|
|
173
173
|
field: 'bidded_date',
|
174
174
|
width: 105,
|
175
175
|
title: '中标时间',
|
176
|
+
sort: true
|
176
177
|
},
|
177
178
|
{
|
178
179
|
field: 'signed_date',
|
179
180
|
width: 105,
|
180
181
|
title: '签单时间',
|
182
|
+
sort: true
|
181
183
|
},
|
182
184
|
{
|
183
185
|
field: 'reception_at',
|
@@ -371,6 +373,13 @@
|
|
371
373
|
});
|
372
374
|
}
|
373
375
|
|
376
|
+
function hn(){
|
377
|
+
$("#search_bt").trigger("click");
|
378
|
+
}
|
379
|
+
$(document).ready(function(){
|
380
|
+
window.onload=hn;
|
381
|
+
});
|
382
|
+
|
374
383
|
|
375
384
|
var sort = {}, search = {};
|
376
385
|
table.on('sort(businesses_table)', function (obj) {
|
@@ -388,7 +397,8 @@
|
|
388
397
|
// 监听搜索操作
|
389
398
|
form.on('submit(search_bussiness)', function (data) {
|
390
399
|
search = data.field
|
391
|
-
|
400
|
+
console.log(search);
|
401
|
+
table.reload('businesses_table', {
|
392
402
|
page: {
|
393
403
|
curr: 1
|
394
404
|
},
|
@@ -604,4 +614,9 @@
|
|
604
614
|
});
|
605
615
|
|
606
616
|
});
|
607
|
-
</script>
|
617
|
+
</script>
|
618
|
+
<style>
|
619
|
+
.layui-table-tool-temp{
|
620
|
+
padding-right: 30px; !important;
|
621
|
+
}
|
622
|
+
</style>
|
@@ -90,16 +90,20 @@
|
|
90
90
|
</div>
|
91
91
|
</div>
|
92
92
|
<div class="layui-inline">
|
93
|
-
<label class="layui-form-label"
|
93
|
+
<label class="layui-form-label">渠道分成(万)</label>
|
94
94
|
<div class="layui-input-inline">
|
95
95
|
<input name="divide_amount" class="layui-input" value="<%= @last_follow_up&.divide_amount%>">
|
96
96
|
</div>
|
97
97
|
</div>
|
98
98
|
<div class="layui-form-item">
|
99
99
|
<label class="layui-form-label">指定跟进人</label>
|
100
|
-
<div class="layui-input-inline">
|
100
|
+
<div class="layui-input-inline" style="z-index: 100">
|
101
101
|
<div id="assign_follow" style="width: 512px;"></div>
|
102
102
|
</div>
|
103
|
+
<div class="layui-inline" style="padding: 9px 15px">
|
104
|
+
<label class="layui-form-label" style="padding-left: 220px"></label>
|
105
|
+
指定跟进人和商机创建者,同时拥有对该商机的管理权限
|
106
|
+
</div>
|
103
107
|
</div>
|
104
108
|
<div class="layui-form-item layui-form-text">
|
105
109
|
<label class="layui-form-label required">最新进展</label>
|
@@ -1,7 +1,6 @@
|
|
1
1
|
<script type="text/html" id="toolbarDemo_follow">
|
2
2
|
<div class="layui-btn-container">
|
3
3
|
<span class="table-label">跟进记录</span>
|
4
|
-
<span class="table-label" style="padding-left: 200px">温馨提示:仅可以在24小时之内,编辑/删除最新的跟进记录</span>
|
5
4
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="time_line"> 时间线视图>></button>
|
6
5
|
<% if can? :add_follow, EducodeSales::Business %>
|
7
6
|
<% if @current_admin.is_admin %>
|
@@ -10,9 +9,10 @@
|
|
10
9
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add"> 添加跟进记录</button>
|
11
10
|
<% end %>
|
12
11
|
<% end %>
|
12
|
+
<span class="table-label pull-right" style="padding-right: 20px">温馨提示:仅可以在24小时之内,编辑/删除最新的跟进记录</span>
|
13
13
|
</div>
|
14
14
|
</script>
|
15
|
-
<div class="edit-table">
|
15
|
+
<div class="edit-table tool">
|
16
16
|
<div class="z-index">
|
17
17
|
<table class="layui-hide" id="sale_plan_follow_table" lay-filter="sale_plan_follow_table"></table>
|
18
18
|
</div>
|
@@ -289,6 +289,7 @@
|
|
289
289
|
content = miniPage.getHrefContent('/missions/teachers/add_keys?follow_up_id=' + obj.data.id);
|
290
290
|
openWH = miniPage.getOpenWidthHeight();
|
291
291
|
is_latest = obj.data.is_latest
|
292
|
+
flag = obj.data.flag
|
292
293
|
keyindex = layer.open({
|
293
294
|
title: '关键人',
|
294
295
|
type: 1,
|
@@ -310,6 +311,7 @@
|
|
310
311
|
content = miniPage.getHrefContent('/missions/businesses/edit_plan');
|
311
312
|
openWH = miniPage.getOpenWidthHeight();
|
312
313
|
is_latest = obj.data.is_latest
|
314
|
+
flag = obj.data.flag
|
313
315
|
plan_index = layer.open({
|
314
316
|
title: '回款计划',
|
315
317
|
type: 1,
|
@@ -533,4 +535,7 @@
|
|
533
535
|
.z-index .layui-table-tool{
|
534
536
|
z-index: 10000; !important;
|
535
537
|
}
|
538
|
+
.tool .layui-table-tool-temp{
|
539
|
+
padding-right: 30px; !important;
|
540
|
+
}
|
536
541
|
</style>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<div style="padding-left: 50px">
|
2
|
-
<button type="button" class="layui-btn" id="
|
2
|
+
<button type="button" class="layui-btn" id="get_file"><i class="layui-icon"></i>选择文件</button>
|
3
3
|
</div>
|
4
4
|
<script>
|
5
5
|
layui.use(['form', 'table', 'upload', 'layer', 'laytpl', 'request', 'selectInput'], function () {
|
@@ -17,7 +17,7 @@
|
|
17
17
|
//指定允许上传的文件类型
|
18
18
|
var business_id = parent.id
|
19
19
|
var renderObj = upload.render({
|
20
|
-
elem: '#
|
20
|
+
elem: '#get_file'
|
21
21
|
,url: '/missions/upload_files?business_id='+business_id //此处配置你自己的上传接口即可
|
22
22
|
,accept: 'file' //普通文件
|
23
23
|
,headers: {
|
@@ -28,12 +28,12 @@
|
|
28
28
|
}
|
29
29
|
,done: function(res){
|
30
30
|
layer.msg('导入成功');
|
31
|
-
table.reload('
|
31
|
+
table.reload('file');
|
32
32
|
layer.closeAll('loading'); //关闭loading
|
33
33
|
layer.close(parent.import_index)
|
34
34
|
}
|
35
35
|
,error: function(index, upload){
|
36
|
-
table.reload('
|
36
|
+
table.reload('file');
|
37
37
|
layer.closeAll('loading'); //关闭loading
|
38
38
|
layer.alert('导入失败,请检查文件格式')
|
39
39
|
layer.close(parent.import_index)
|
@@ -32,7 +32,8 @@
|
|
32
32
|
3、补充说明需要上级解决的问题和挑战。" disabled class="layui-textarea autosize"><%= @sale_report.content %></textarea>
|
33
33
|
</div>
|
34
34
|
</div>
|
35
|
-
|
35
|
+
<% if can? :level1_audit, EducodeSales::OperationReport %>
|
36
|
+
<div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
|
36
37
|
<label class="layui-form-label">大区意见</label>
|
37
38
|
<div class="layui-input-block">
|
38
39
|
<textarea name="level1_opinion" placeholder="给出评价、提醒、建议、办法等。"
|
@@ -40,7 +41,9 @@
|
|
40
41
|
</div>
|
41
42
|
</div>
|
42
43
|
<div id="weekStar4" style="margin-bottom: 40px"></div>
|
43
|
-
|
44
|
+
<%end %>
|
45
|
+
<% if can? :level2_audit, EducodeSales::OperationReport %>
|
46
|
+
<div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
|
44
47
|
<label class="layui-form-label">总监意见</label>
|
45
48
|
<div class="layui-input-block">
|
46
49
|
<textarea name="level2_opinion" placeholder="给出评价、提醒、建议、办法等。"
|
@@ -48,7 +51,9 @@
|
|
48
51
|
</div>
|
49
52
|
</div>
|
50
53
|
<div id="weekStar5" style="margin-bottom: 40px"></div>
|
51
|
-
|
54
|
+
<%end %>
|
55
|
+
<% if can? :level3_audit, EducodeSales::OperationReport %>
|
56
|
+
<div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
|
52
57
|
<label class="layui-form-label">副总意见</label>
|
53
58
|
<div class="layui-input-block">
|
54
59
|
<textarea name="level3_opinion" placeholder="给出评价、提醒、建议、办法等。"
|
@@ -56,11 +61,14 @@
|
|
56
61
|
</div>
|
57
62
|
</div>
|
58
63
|
<div id="weekStar6" style="margin-bottom: 40px"></div>
|
64
|
+
<%end %>
|
59
65
|
<br>
|
60
66
|
<div class="layui-inline m-t-10">
|
67
|
+
<% if (can? :level1_audit, EducodeSales::OperationReport) || (can? :level2_audit, EducodeSales::OperationReport) || (can? :level3_audit, EducodeSales::OperationReport) %>
|
61
68
|
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="audit_weekly_report"
|
62
69
|
style="margin-left: 18px">提交
|
63
70
|
</button>
|
71
|
+
<%end %>
|
64
72
|
</div>
|
65
73
|
</div>
|
66
74
|
</form>
|
@@ -85,7 +93,7 @@
|
|
85
93
|
rate.render({
|
86
94
|
elem: '#weekStar4',
|
87
95
|
half: true,
|
88
|
-
value: "<%= @sale_report.level1_score %>",
|
96
|
+
value: parseFloat("<%= @sale_report.level1_score || 0%>"),
|
89
97
|
length: 5,
|
90
98
|
choose: function(value){
|
91
99
|
level1_score = value
|
@@ -94,7 +102,7 @@
|
|
94
102
|
rate.render({
|
95
103
|
elem: '#weekStar5',
|
96
104
|
half: true,
|
97
|
-
value: "<%= @sale_report.level2_score %>",
|
105
|
+
value: parseFloat("<%= @sale_report.level2_score || 0%>"),
|
98
106
|
length: 5,
|
99
107
|
choose: function(value){
|
100
108
|
level2_score = value
|
@@ -103,7 +111,7 @@
|
|
103
111
|
rate.render({
|
104
112
|
elem: '#weekStar6',
|
105
113
|
half: true,
|
106
|
-
value: "<%= @sale_report.level3_score %>",
|
114
|
+
value: parseFloat("<%= @sale_report.level3_score || 0%>"),
|
107
115
|
length: 5,
|
108
116
|
choose: function(value){
|
109
117
|
level3_score = value
|
@@ -31,7 +31,8 @@
|
|
31
31
|
3、补充说明需要上级解决的问题和挑战。" disabled class="layui-textarea autosize"><%= @sale_report.content %></textarea>
|
32
32
|
</div>
|
33
33
|
</div>
|
34
|
-
|
34
|
+
<% if @sale_report.level1_opinion.present? || @sale_report.level1_score %>
|
35
|
+
<div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
|
35
36
|
<label class="layui-form-label">大区意见</label>
|
36
37
|
<div class="layui-input-block">
|
37
38
|
<textarea name="desc" placeholder="给出评价、提醒、建议、办法等。" disabled
|
@@ -39,7 +40,9 @@
|
|
39
40
|
</div>
|
40
41
|
</div>
|
41
42
|
<div id="weekStar4" style="margin-bottom: 40px"></div>
|
42
|
-
|
43
|
+
<%end %>
|
44
|
+
<% if @sale_report.level2_opinion.present? || @sale_report.level2_score %>
|
45
|
+
<div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
|
43
46
|
<label class="layui-form-label">总监意见</label>
|
44
47
|
<div class="layui-input-block">
|
45
48
|
<textarea name="desc" placeholder="给出评价、提醒、建议、办法等。" disabled
|
@@ -47,7 +50,9 @@
|
|
47
50
|
</div>
|
48
51
|
</div>
|
49
52
|
<div id="weekStar5" style="margin-bottom: 40px"></div>
|
50
|
-
|
53
|
+
<%end %>
|
54
|
+
<% if @sale_report.level3_opinion.present? || @sale_report.level3_score %>
|
55
|
+
<div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
|
51
56
|
<label class="layui-form-label">副总意见</label>
|
52
57
|
<div class="layui-input-block">
|
53
58
|
<textarea name="desc" placeholder="给出评价、提醒、建议、办法等。" disabled
|
@@ -55,6 +60,7 @@
|
|
55
60
|
</div>
|
56
61
|
</div>
|
57
62
|
<div id="weekStar6" style="margin-bottom: 40px"></div>
|
63
|
+
<%end %>
|
58
64
|
<br>
|
59
65
|
</div>
|
60
66
|
</form>
|
@@ -78,28 +84,25 @@
|
|
78
84
|
$ = layui.jquery,
|
79
85
|
miniPage = layui.miniPage,
|
80
86
|
request = layui.request;
|
81
|
-
table = layui.table
|
87
|
+
table = layui.table
|
82
88
|
|
83
89
|
rate.render({
|
84
90
|
elem: '#weekStar4',
|
85
91
|
half: true,
|
86
92
|
readonly: true,
|
87
|
-
value: "<%= @sale_report.level1_score %>",
|
88
|
-
length: "<%= @sale_report.level1_score %>"
|
93
|
+
value: parseFloat("<%= @sale_report.level1_score || 0%>"),
|
89
94
|
})
|
90
95
|
rate.render({
|
91
96
|
elem: '#weekStar5',
|
92
97
|
half: true,
|
93
98
|
readonly: true,
|
94
|
-
value: "<%= @sale_report.level2_score %>",
|
95
|
-
length: "<%= @sale_report.level2_score %>"
|
99
|
+
value: parseFloat("<%= @sale_report.level2_score || 0%>"),
|
96
100
|
})
|
97
101
|
rate.render({
|
98
102
|
elem: '#weekStar6',
|
99
103
|
half: true,
|
100
104
|
readonly: true,
|
101
|
-
value: "<%= @sale_report.level3_score %>",
|
102
|
-
length: "<%= @sale_report.level3_score %>"
|
105
|
+
value: parseFloat("<%= @sale_report.level3_score || 0%>"),
|
103
106
|
})
|
104
107
|
|
105
108
|
|
@@ -1,8 +1,18 @@
|
|
1
|
+
area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
|
1
2
|
json.data do
|
2
3
|
json.array! @places do |d|
|
3
4
|
json.id d.id
|
4
5
|
json.name d.name
|
5
|
-
json.area_id d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
6
|
+
# json.area_id d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
7
|
+
if d.areas.present?
|
8
|
+
if d.areas.ids.sort.to_s == area_ids
|
9
|
+
json.area_id '全国'
|
10
|
+
else
|
11
|
+
json.area_id d.areas.pluck(:name).join("、")
|
12
|
+
end
|
13
|
+
else
|
14
|
+
json.area_id ''
|
15
|
+
end
|
6
16
|
json.businesses_count EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id}").count
|
7
17
|
json.amount EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id} AND educode_sales_follow_ups.stage_id IN (?)", @stage_ids).sum(:profit_amount).round(2)
|
8
18
|
json.return_mount EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id}").sum(:return_money).round(2)
|