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
@@ -0,0 +1,16 @@
|
|
1
|
+
json.data do
|
2
|
+
json.array! @monthPlans do |d|
|
3
|
+
next if EducodeSales::SalePlan.unscoped.find(d.source_id).weekly.present?
|
4
|
+
json.id d.id
|
5
|
+
json.name EducodeSales::SalePlan.unscoped.find(d.source_id).staff.user.real_name
|
6
|
+
json.month EducodeSales::SalePlan.unscoped.find(d.source_id).month.strftime("%Y-%m")
|
7
|
+
json.weekly EducodeSales::SalePlan.unscoped.find(d.source_id).weekly
|
8
|
+
json.plan EducodeSales::SalePlan.unscoped.find(d.source_id).content
|
9
|
+
json.update_at EducodeSales::SalePlan.unscoped.find(d.source_id).updated_at.to_s
|
10
|
+
json.deleter EducodeSales::Staff.find(d.deleter_id).user.real_name
|
11
|
+
json.delete_time d.created_at.to_s
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
json.code 0
|
16
|
+
json.count @monthPlans.total_count
|
@@ -0,0 +1,15 @@
|
|
1
|
+
json.data do
|
2
|
+
json.array! @monthly do |d|
|
3
|
+
next if EducodeSales::SaleReport.unscoped.find(d.source_id).weekly.present?
|
4
|
+
json.id d.id
|
5
|
+
json.name EducodeSales::SaleReport.unscoped.find(d.source_id).staff.user.real_name
|
6
|
+
json.month EducodeSales::SaleReport.unscoped.find(d.source_id).month.strftime('%Y-%m')
|
7
|
+
json.plan EducodeSales::SaleReport.unscoped.find(d.source_id).content
|
8
|
+
json.update_at EducodeSales::SaleReport.unscoped.find(d.source_id).updated_at.to_s
|
9
|
+
json.deleter EducodeSales::Staff.find(d.deleter_id).user.real_name
|
10
|
+
json.delete_time d.created_at.to_s
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
json.code 0
|
15
|
+
json.count @monthly.total_count
|
@@ -0,0 +1,16 @@
|
|
1
|
+
json.data do
|
2
|
+
json.array! @weekPlans do |d|
|
3
|
+
next if EducodeSales::SalePlan.unscoped.find(d.source_id).weekly.nil?
|
4
|
+
json.id d.id
|
5
|
+
json.name EducodeSales::SalePlan.unscoped.find(d.source_id).staff.user.real_name
|
6
|
+
json.month EducodeSales::SalePlan.unscoped.find(d.source_id).month.strftime("%Y-%m")
|
7
|
+
json.weekly EducodeSales::SalePlan.unscoped.find(d.source_id).weekly
|
8
|
+
json.plan EducodeSales::SalePlan.unscoped.find(d.source_id).content
|
9
|
+
json.update_at EducodeSales::SalePlan.unscoped.find(d.source_id).updated_at.to_s
|
10
|
+
json.deleter EducodeSales::Staff.find(d.deleter_id).user.real_name
|
11
|
+
json.delete_time d.created_at.to_s
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
json.code 0
|
16
|
+
json.count @weekPlans.total_count
|
@@ -0,0 +1,15 @@
|
|
1
|
+
json.data do
|
2
|
+
json.array! @weekly do |d|
|
3
|
+
next if EducodeSales::SaleReport.unscoped.find(d.source_id).weekly.nil?
|
4
|
+
json.id d.id
|
5
|
+
json.name EducodeSales::SaleReport.unscoped.find(d.source_id).staff.user.real_name
|
6
|
+
json.weekly EducodeSales::SaleReport.unscoped.find(d.source_id).weekly
|
7
|
+
json.plan EducodeSales::SaleReport.unscoped.find(d.source_id).content
|
8
|
+
json.update_at EducodeSales::SaleReport.unscoped.find(d.source_id).updated_at.to_s
|
9
|
+
json.deleter EducodeSales::Staff.find(d.deleter_id).user.real_name
|
10
|
+
json.delete_time d.created_at.to_s
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
json.code 0
|
15
|
+
json.count @weekly.total_count
|
@@ -8,6 +8,7 @@
|
|
8
8
|
</div>
|
9
9
|
</script>
|
10
10
|
<script type="text/html" id="role_bar">
|
11
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="rename">重命名</a>
|
11
12
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
|
12
13
|
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
|
13
14
|
</script>
|
@@ -35,7 +36,6 @@
|
|
35
36
|
field: 'name',
|
36
37
|
title: '角色',
|
37
38
|
width: 120,
|
38
|
-
edit: 'text'
|
39
39
|
}, {
|
40
40
|
field: 'permissions',
|
41
41
|
title: '模块浏览权限',
|
@@ -124,6 +124,24 @@
|
|
124
124
|
layer.full(index);
|
125
125
|
});
|
126
126
|
return false;
|
127
|
+
}else if (obj.event === 'rename') {
|
128
|
+
id = data.id
|
129
|
+
var content = miniPage.getHrefContent('/missions/roles/rename?id='+id);
|
130
|
+
var openWH = miniPage.getOpenWidthHeight();
|
131
|
+
rename_index = layer.open({
|
132
|
+
title: '重命名',
|
133
|
+
type: 1,
|
134
|
+
shade: 0.2,
|
135
|
+
maxmin: true,
|
136
|
+
shadeClose: true,
|
137
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
138
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
139
|
+
content: content,
|
140
|
+
});
|
141
|
+
$(window).on("resize", function () {
|
142
|
+
layer.full(index);
|
143
|
+
});
|
144
|
+
return false;
|
127
145
|
} else if (obj.event === 'delete') {
|
128
146
|
layer.confirm('确定删除' + data.name, function (index) {
|
129
147
|
request.delete('missions/roles/'+ data.id, {}, function(res) {
|
@@ -0,0 +1,50 @@
|
|
1
|
+
<form class="layui-form " action="">
|
2
|
+
<div class="layui-form-item" style="padding: 25px">
|
3
|
+
<div class="layui-inline">
|
4
|
+
<label class="layui-form-label required">角色名称</label>
|
5
|
+
<div class="layui-input-block" style="line-height: 36px;">
|
6
|
+
<input type="text" name="name" id="name" required lay-verify="required" autocomplete="off"
|
7
|
+
class="layui-input" value="<%=@name %>">
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<div class="layui-inline" style="padding-left: 30px">
|
11
|
+
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="submits">提交
|
12
|
+
</button>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
</form>
|
16
|
+
|
17
|
+
|
18
|
+
<script>
|
19
|
+
|
20
|
+
layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'selectInput', 'transfer'], function () {
|
21
|
+
var form = layui.form,
|
22
|
+
layer = layui.layer,
|
23
|
+
table = layui.table,
|
24
|
+
transfer = layui.transfer,
|
25
|
+
laytpl = layui.laytpl,
|
26
|
+
request = layui.request,
|
27
|
+
$ = layui.$;
|
28
|
+
|
29
|
+
form.render();
|
30
|
+
|
31
|
+
// 当前弹出层,防止ID被覆盖
|
32
|
+
var parentIndex = layer.index;
|
33
|
+
|
34
|
+
//监听提交
|
35
|
+
form.on('submit(submits)', function (data) {
|
36
|
+
console.log(data);
|
37
|
+
request.authPut('missions/roles/' + parent.id + '/update_role/', data.field,
|
38
|
+
function(res) {
|
39
|
+
if (res.success) {
|
40
|
+
table.reload('role');
|
41
|
+
layer.close(parent.rename_index)
|
42
|
+
} else {
|
43
|
+
layer.alert(res.msg)
|
44
|
+
}
|
45
|
+
|
46
|
+
})
|
47
|
+
return false;
|
48
|
+
});
|
49
|
+
});
|
50
|
+
</script>
|
@@ -36,7 +36,8 @@
|
|
36
36
|
3、补充说明需要上级解决的问题和挑战。" disabled class="layui-textarea autosize"><%= @sale_report.content %></textarea>
|
37
37
|
</div>
|
38
38
|
</div>
|
39
|
-
|
39
|
+
<% if can? :level1_audit, EducodeSales::SaleReport %>
|
40
|
+
<div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
|
40
41
|
<label class="layui-form-label">大区意见</label>
|
41
42
|
<div class="layui-input-block">
|
42
43
|
<textarea name="level1_opinion" placeholder="给出评价、提醒、建议、办法等。"
|
@@ -44,7 +45,10 @@
|
|
44
45
|
</div>
|
45
46
|
</div>
|
46
47
|
<div id="weekStar4" style="margin-bottom: 40px"></div>
|
47
|
-
|
48
|
+
<% end %>
|
49
|
+
|
50
|
+
<% if can? :level2_audit, EducodeSales::SaleReport %>
|
51
|
+
<div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
|
48
52
|
<label class="layui-form-label">总监意见</label>
|
49
53
|
<div class="layui-input-block">
|
50
54
|
<textarea name="level2_opinion" placeholder="给出评价、提醒、建议、办法等。"
|
@@ -52,7 +56,10 @@
|
|
52
56
|
</div>
|
53
57
|
</div>
|
54
58
|
<div id="weekStar5" style="margin-bottom: 40px"></div>
|
55
|
-
|
59
|
+
<% end %>
|
60
|
+
|
61
|
+
<% if can? :level3_audit, EducodeSales::SaleReport %>
|
62
|
+
<div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
|
56
63
|
<label class="layui-form-label">副总意见</label>
|
57
64
|
<div class="layui-input-block">
|
58
65
|
<textarea name="level3_opinion" placeholder="给出评价、提醒、建议、办法等。"
|
@@ -60,11 +67,15 @@
|
|
60
67
|
</div>
|
61
68
|
</div>
|
62
69
|
<div id="weekStar6" style="margin-bottom: 40px"></div>
|
70
|
+
<% end %>
|
71
|
+
|
63
72
|
<br>
|
64
73
|
<div class="layui-inline m-t-10">
|
74
|
+
<% if (can? :level1_audit, EducodeSales::SaleReport) || (can? :level2_audit, EducodeSales::SaleReport) || (can? :level3_audit, EducodeSales::SaleReport) %>
|
65
75
|
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="audit_weekly_report"
|
66
76
|
style="margin-left: 18px">提交
|
67
77
|
</button>
|
78
|
+
<% end %>
|
68
79
|
</div>
|
69
80
|
</div>
|
70
81
|
</form>
|
@@ -89,7 +100,7 @@
|
|
89
100
|
rate.render({
|
90
101
|
elem: '#weekStar4',
|
91
102
|
half: true,
|
92
|
-
|
103
|
+
value: parseFloat("<%= @sale_report.level1_score || 0%>"),
|
93
104
|
length: 5,
|
94
105
|
choose: function(value){
|
95
106
|
level1_score = value
|
@@ -98,7 +109,7 @@
|
|
98
109
|
rate.render({
|
99
110
|
elem: '#weekStar5',
|
100
111
|
half: true,
|
101
|
-
|
112
|
+
value: parseFloat("<%= @sale_report.level2_score || 0%>"),
|
102
113
|
length: 5,
|
103
114
|
choose: function(value){
|
104
115
|
level2_score = value
|
@@ -107,7 +118,7 @@
|
|
107
118
|
rate.render({
|
108
119
|
elem: '#weekStar6',
|
109
120
|
half: true,
|
110
|
-
|
121
|
+
value: parseFloat("<%= @sale_report.level3_score || 0%>"),
|
111
122
|
length: 5,
|
112
123
|
choose: function(value){
|
113
124
|
level3_score = value
|
@@ -35,6 +35,7 @@
|
|
35
35
|
3、补充说明需要上级解决的问题和挑战。" disabled class="layui-textarea autosize"><%= @sale_report.content %></textarea>
|
36
36
|
</div>
|
37
37
|
</div>
|
38
|
+
<% if @sale_report.level1_opinion.present? || @sale_report.level1_score %>
|
38
39
|
<div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
|
39
40
|
<label class="layui-form-label">大区意见</label>
|
40
41
|
<div class="layui-input-block">
|
@@ -43,7 +44,9 @@
|
|
43
44
|
</div>
|
44
45
|
</div>
|
45
46
|
<div id="weekStar4" style="margin-bottom: 40px"></div>
|
46
|
-
|
47
|
+
<%end %>
|
48
|
+
<% if @sale_report.level2_opinion.present? || @sale_report.level2_score %>
|
49
|
+
<div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
|
47
50
|
<label class="layui-form-label">总监意见</label>
|
48
51
|
<div class="layui-input-block">
|
49
52
|
<textarea name="desc" placeholder="给出评价、提醒、建议、办法等。" disabled
|
@@ -51,7 +54,9 @@
|
|
51
54
|
</div>
|
52
55
|
</div>
|
53
56
|
<div id="weekStar5" style="margin-bottom: 40px"></div>
|
54
|
-
|
57
|
+
<%end %>
|
58
|
+
<% if @sale_report.level3_opinion.present? || @sale_report.level3_score %>
|
59
|
+
<div class="layui-form-item layui-form-text" style="margin-bottom: 0px">
|
55
60
|
<label class="layui-form-label">副总意见</label>
|
56
61
|
<div class="layui-input-block">
|
57
62
|
<textarea name="desc" placeholder="给出评价、提醒、建议、办法等。" disabled
|
@@ -59,6 +64,7 @@
|
|
59
64
|
</div>
|
60
65
|
</div>
|
61
66
|
<div id="weekStar6" style="margin-bottom: 40px"></div>
|
67
|
+
<%end %>
|
62
68
|
<br>
|
63
69
|
</div>
|
64
70
|
</form>
|
@@ -78,22 +84,19 @@
|
|
78
84
|
elem: '#weekStar4',
|
79
85
|
half: true,
|
80
86
|
readonly: true,
|
81
|
-
|
82
|
-
length: "<%= @sale_report.level1_score %>"
|
87
|
+
value: parseFloat("<%= @sale_report.level1_score || 0%>"),
|
83
88
|
})
|
84
89
|
rate.render({
|
85
90
|
elem: '#weekStar5',
|
86
91
|
half: true,
|
87
92
|
readonly: true,
|
88
|
-
|
89
|
-
length: "<%= @sale_report.level2_score %>"
|
93
|
+
value: parseFloat("<%= @sale_report.level2_score || 0%> "),
|
90
94
|
})
|
91
95
|
rate.render({
|
92
96
|
elem: '#weekStar6',
|
93
97
|
half: true,
|
94
98
|
readonly: true,
|
95
|
-
|
96
|
-
length: "<%= @sale_report.level3_score %>"
|
99
|
+
value: parseFloat("<%= @sale_report.level3_score || 0%>"),
|
97
100
|
})
|
98
101
|
|
99
102
|
table.on('tool(showWeeklyTable)', function (obj) {
|
@@ -168,12 +168,131 @@
|
|
168
168
|
</div>
|
169
169
|
</div>
|
170
170
|
</form>
|
171
|
+
<br>
|
172
|
+
<div class="layui-tab layui-tab-card" id="商机跟进数">
|
173
|
+
<ul class="layui-tab-title">
|
174
|
+
<li class="layui-this">商机跟进数</li>
|
175
|
+
</ul>
|
176
|
+
<div class="layui-tab-content" style="padding-right: 50px">
|
177
|
+
<div class="layui-tab-item layui-show " style="padding-left: 20px">
|
178
|
+
<div style="margin: 10px 10px 10px 10px">
|
179
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
180
|
+
<div class="layui-form-item">
|
181
|
+
<div class="layui-inline m-t-10">
|
182
|
+
<label class="layui-form-label">视图</label>
|
183
|
+
<div class="layui-input-inline">
|
184
|
+
<%= select_tag "follow_count_range", options_for_select([['按天','day'],['按月','month'],['按年','year']],params[:follow_count_range]), {'lay-filter': 'follow_count'}%>
|
185
|
+
</div>
|
186
|
+
</div>
|
187
|
+
<div class="layui-inline">
|
188
|
+
<label class="layui-form-label">时间范围</label>
|
189
|
+
<div class="layui-input-inline">
|
190
|
+
<input type="text" class="layui-input month layui-hide" id="date_month" name="date_month" placeholder=" - " value="<%=params[:date_month] %>" >
|
191
|
+
<input type="text" class="layui-input year layui-hide" id="date_year" name="date_year" placeholder=" - " value="<%=params[:date_year] %>">
|
192
|
+
<input type="text" class="layui-input day" id="date" name="date" placeholder=" - " value="<%=params[:date].present? ? params[:date] : (Time.now - 7.days).to_s(:date) + ' - ' + Time.now.to_s(:date) %>">
|
193
|
+
</div>
|
194
|
+
</div>
|
195
|
+
<div class="layui-inline">
|
196
|
+
<button type="submit" id="search_bt" class=" follow_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">确定
|
197
|
+
</button>
|
198
|
+
</div>
|
199
|
+
</div>
|
200
|
+
</form>
|
201
|
+
</div>
|
202
|
+
<canvas id="myChart" width="960" height="200"></canvas>
|
203
|
+
</div>
|
204
|
+
</div>
|
205
|
+
</div>
|
206
|
+
<br>
|
207
|
+
<br>
|
208
|
+
<div class="layui-tab layui-tab-card " id="销售额分析" lay-filter="test1">
|
209
|
+
<ul class="layui-tab-title">
|
210
|
+
<li class="layui-this">销售额分析</li>
|
211
|
+
</ul>
|
212
|
+
<div class="layui-tab-content" style="padding-right: 50px">
|
213
|
+
<div class="layui-tab-item layui-show" style="padding-left: 20px">
|
214
|
+
<div style="margin: 10px 10px 10px 10px">
|
215
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
216
|
+
<div class="layui-form-item">
|
217
|
+
<div class="layui-inline m-t-10">
|
218
|
+
<label class="layui-form-label">视图</label>
|
219
|
+
<div class="layui-input-inline">
|
220
|
+
<%= select_tag "goal_count_range", options_for_select([['按月','month'],['按年','year']],params[:goal_count_range]), {'lay-filter': 'goal_count'}%>
|
221
|
+
</div>
|
222
|
+
</div>
|
223
|
+
<div class="layui-inline">
|
224
|
+
<label class="layui-form-label">时间范围</label>
|
225
|
+
<div class="layui-input-inline">
|
226
|
+
<input type="text" class="layui-input goal_month " id="goal_date_month" name="goal_date_month" placeholder=" - " value="<%=params[:goal_date_month].present? ? params[:goal_date_month] : Time.now.year.to_s + "-01" + " - " + Time.now.strftime("%Y-%m") %>">
|
227
|
+
<input type="text" class="layui-input goal_year layui-hide" id="goal_date_year" name="goal_date_year" placeholder=" - " value="<%=params[:goal_date_year] %>">
|
228
|
+
</div>
|
229
|
+
</div>
|
230
|
+
<div class="layui-inline">
|
231
|
+
<button type="submit" id="search_bt" class="follow_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">确定
|
232
|
+
</button>
|
233
|
+
</div>
|
234
|
+
</div>
|
235
|
+
</form>
|
236
|
+
</div>
|
237
|
+
<canvas id="myChart2" width="960" height="200"></canvas>
|
238
|
+
</div>
|
239
|
+
|
240
|
+
</div>
|
241
|
+
</div>
|
242
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.css">
|
243
|
+
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.js"></script>
|
171
244
|
<script>
|
245
|
+
follow_type = "<%=@follow_count_range %>"
|
246
|
+
goal_type = "<%=@goal_count_range %>"
|
247
|
+
follow_flag = <%=params[:follow_count_range].present? %>
|
248
|
+
if(follow_flag){
|
249
|
+
window.location.href = "#商机跟进数"
|
250
|
+
}
|
251
|
+
|
252
|
+
goal_flag = <%=params[:goal_count_range].present? %>
|
253
|
+
if(goal_flag){
|
254
|
+
window.location.href = "#销售额分析"
|
255
|
+
}
|
172
256
|
layui.use(['form', 'jquery', 'request'], function () {
|
173
257
|
var $ = layui.jquery,
|
174
258
|
form = layui.form,
|
175
259
|
request = layui.request;
|
176
260
|
var year = "<%= @year %>";
|
261
|
+
var element = layui.element;
|
262
|
+
laydate = layui.laydate;
|
263
|
+
|
264
|
+
$(document).ready(function () {
|
265
|
+
$(".follow_count_bt").click(function () {
|
266
|
+
layer.msg("图表绘制中...", {
|
267
|
+
offset:['40%','46%']
|
268
|
+
})
|
269
|
+
layer.load(0, {});
|
270
|
+
setTimeout(function () {
|
271
|
+
layer.closeAll('loading');
|
272
|
+
}, 3000);
|
273
|
+
});
|
274
|
+
});
|
275
|
+
if(follow_type == "day"){
|
276
|
+
$(".year").addClass('layui-hide')
|
277
|
+
$(".month").addClass('layui-hide')
|
278
|
+
$(".day").removeClass('layui-hide')
|
279
|
+
}else if(follow_type == "month"){
|
280
|
+
$(".year").addClass('layui-hide')
|
281
|
+
$(".month").removeClass('layui-hide')
|
282
|
+
$(".day").addClass('layui-hide')
|
283
|
+
}else {
|
284
|
+
$(".year").removeClass('layui-hide')
|
285
|
+
$(".month").addClass('layui-hide')
|
286
|
+
$(".day").addClass('layui-hide')
|
287
|
+
}
|
288
|
+
|
289
|
+
if(goal_type == "year"){
|
290
|
+
$(".goal_year").removeClass('layui-hide')
|
291
|
+
$(".goal_month").addClass('layui-hide')
|
292
|
+
}else{
|
293
|
+
$(".goal_year").addClass('layui-hide')
|
294
|
+
$(".goal_month").removeClass('layui-hide')
|
295
|
+
}
|
177
296
|
|
178
297
|
function editForm(el) {
|
179
298
|
$("#" + el + "_edit").click(function() {
|
@@ -205,18 +324,130 @@
|
|
205
324
|
})
|
206
325
|
}
|
207
326
|
|
327
|
+
// 时间选择器
|
328
|
+
laydate.render({
|
329
|
+
elem: '#date',
|
330
|
+
range: true
|
331
|
+
});
|
332
|
+
laydate.render({
|
333
|
+
type: 'week',
|
334
|
+
elem: '#date_week',
|
335
|
+
range: true
|
336
|
+
});
|
337
|
+
laydate.render({
|
338
|
+
type: 'month',
|
339
|
+
elem: '#date_month',
|
340
|
+
range: true
|
341
|
+
});
|
342
|
+
laydate.render({
|
343
|
+
type: 'year',
|
344
|
+
elem: '#date_year',
|
345
|
+
range: true
|
346
|
+
});
|
347
|
+
laydate.render({
|
348
|
+
type: 'year',
|
349
|
+
elem: '#goal_date_year',
|
350
|
+
range: true
|
351
|
+
});
|
352
|
+
laydate.render({
|
353
|
+
type: 'month',
|
354
|
+
elem: '#goal_date_month',
|
355
|
+
range: true
|
356
|
+
});
|
357
|
+
|
358
|
+
|
208
359
|
form.on('select(year)', function(data){
|
209
360
|
console.log(data, )
|
210
361
|
year = data.value
|
211
362
|
window.location.href = "/missions/sale_trends/trends?year=" + data.value
|
212
363
|
})
|
213
|
-
|
364
|
+
form.on('select(follow_count)', function(data){
|
365
|
+
console.log(data, )
|
366
|
+
const value = data.value;
|
367
|
+
if(value == "month"){
|
368
|
+
$(".year").addClass('layui-hide')
|
369
|
+
$(".day").addClass('layui-hide')
|
370
|
+
$(".month").removeClass('layui-hide')
|
371
|
+
}else if(value == "year"){
|
372
|
+
$(".month").addClass('layui-hide')
|
373
|
+
$(".day").addClass('layui-hide')
|
374
|
+
$(".year").removeClass('layui-hide')
|
375
|
+
}else {
|
376
|
+
$(".month").addClass('layui-hide')
|
377
|
+
$(".year").addClass('layui-hide')
|
378
|
+
$(".day").removeClass('layui-hide')
|
379
|
+
}
|
380
|
+
})
|
381
|
+
|
382
|
+
form.on('select(goal_count)', function(data){
|
383
|
+
console.log(data, )
|
384
|
+
const value = data.value;
|
385
|
+
if(value == "month"){
|
386
|
+
$(".goal_year").addClass('layui-hide')
|
387
|
+
$(".goal_month").removeClass('layui-hide')
|
388
|
+
}else {
|
389
|
+
$(".goal_month").addClass('layui-hide')
|
390
|
+
$(".goal_year").removeClass('layui-hide')
|
391
|
+
}
|
392
|
+
})
|
393
|
+
|
214
394
|
editForm("chance_money");
|
215
395
|
editForm("ballot_money");
|
216
396
|
editForm("sign_money");
|
217
397
|
editForm("returned_money");
|
218
398
|
|
219
|
-
|
399
|
+
element.on('tab(test1)', function(){
|
400
|
+
window.location.href = "#销售额分析"
|
401
|
+
});
|
402
|
+
|
403
|
+
var ctx = document.getElementById('myChart');
|
404
|
+
var myChart = new Chart(ctx, {
|
405
|
+
type: 'line',
|
406
|
+
data: <%=raw @follow_count_data.to_json %>,
|
407
|
+
options: {
|
408
|
+
elements: {
|
409
|
+
line: {
|
410
|
+
tension: 0
|
411
|
+
}
|
412
|
+
}
|
413
|
+
}
|
414
|
+
});
|
415
|
+
|
416
|
+
|
417
|
+
var opt = {
|
418
|
+
events: false,
|
419
|
+
tooltips: {
|
420
|
+
enabled: false
|
421
|
+
},
|
422
|
+
hover: {
|
423
|
+
animationDuration: 0
|
424
|
+
},
|
425
|
+
animation: {
|
426
|
+
duration: 1,
|
427
|
+
onComplete: function () {
|
428
|
+
var chartInstance = this.chart,
|
429
|
+
ctx = chartInstance.ctx;
|
430
|
+
ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
|
431
|
+
ctx.textAlign = 'center';
|
432
|
+
ctx.textBaseline = 'bottom';
|
433
|
+
|
434
|
+
this.data.datasets.forEach(function (dataset, i) {
|
435
|
+
var meta = chartInstance.controller.getDatasetMeta(i);
|
436
|
+
meta.data.forEach(function (bar, index) {
|
437
|
+
var data = dataset.data[index];
|
438
|
+
ctx.fillText(data, bar._model.x, bar._model.y - 5);
|
439
|
+
});
|
440
|
+
});
|
441
|
+
}
|
442
|
+
}
|
443
|
+
};
|
444
|
+
|
220
445
|
|
446
|
+
var ctx = document.getElementById('myChart2');
|
447
|
+
var myChart2 = new Chart(ctx, {
|
448
|
+
type: 'bar',
|
449
|
+
data: <%=raw @goal_count_data.to_json %>,
|
450
|
+
options: opt
|
451
|
+
});
|
221
452
|
})
|
222
453
|
</script>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
my_array = [1,2,3,4,5]
|
2
|
+
json.data do
|
3
|
+
json.labels my_array
|
4
|
+
json.datasets do
|
5
|
+
json.array! [1,2] do |d|
|
6
|
+
json.label '人名'
|
7
|
+
json.backgroundColor "#fff"
|
8
|
+
json.borderColor "#36A2EB"
|
9
|
+
json.pointBackgroundColor "#36A2EB"
|
10
|
+
json.pointBorderColor "#fff"
|
11
|
+
json.data my_array
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|