educode_sales 0.5.5 → 0.5.9
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/256/242/346/210/267/347/256/241/347/220/206.png +0 -0
- data/app/controllers/educode_sales/businesses_controller.rb +20 -1
- data/app/controllers/educode_sales/customer_extensions_controller.rb +17 -0
- data/app/controllers/educode_sales/customer_follows_controller.rb +41 -0
- data/app/controllers/educode_sales/customers_controller.rb +194 -0
- data/app/controllers/educode_sales/follow_ups_controller.rb +58 -1
- data/app/controllers/educode_sales/home_controller.rb +18 -2
- data/app/controllers/educode_sales/roles_controller.rb +4 -1
- data/app/controllers/educode_sales/sale_trends_controller.rb +19 -9
- data/app/controllers/educode_sales/sales_controller.rb +3 -0
- data/app/controllers/educode_sales/teachers_controller.rb +41 -14
- data/app/models/educode_sales/customer.rb +4 -0
- data/app/models/educode_sales/customer_extension.rb +7 -0
- data/app/models/educode_sales/customer_follow.rb +5 -0
- data/app/models/educode_sales/permission.rb +2 -1
- data/app/models/educode_sales/role_area.rb +1 -0
- data/app/models/educode_sales/teacher.rb +2 -1
- data/app/models/educode_sales/teacher_assign_follow.rb +6 -0
- data/app/views/educode_sales/activities/index.html.erb +4 -5
- data/app/views/educode_sales/activities/show_teachers.html.erb +1 -1
- data/app/views/educode_sales/businesses/_follows.html.erb +258 -0
- data/app/views/educode_sales/businesses/edit_follow_record.html.erb +69 -6
- data/app/views/educode_sales/businesses/index.html.erb +155 -66
- data/app/views/educode_sales/businesses/index.json.jbuilder +1 -1
- data/app/views/educode_sales/businesses/new.html.erb +3 -0
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +70 -6
- data/app/views/educode_sales/businesses/show_follow.html.erb +15 -10
- data/app/views/educode_sales/businesses/show_follow.json.jbuilder +1 -0
- data/app/views/educode_sales/businesses/show_follow_record.html.erb +8 -0
- data/app/views/educode_sales/businesses/time_line.html.erb +1 -1
- data/app/views/educode_sales/customers/edit.html.erb +60 -0
- data/app/views/educode_sales/customers/edit_department.html.erb +52 -0
- data/app/views/educode_sales/customers/edit_follow_record.html.erb +50 -0
- data/app/views/educode_sales/customers/give.html.erb +51 -0
- data/app/views/educode_sales/customers/index.html.erb +485 -0
- data/app/views/educode_sales/customers/index.json.jbuilder +25 -0
- data/app/views/educode_sales/customers/new.html.erb +89 -0
- data/app/views/educode_sales/customers/new_department.html.erb +53 -0
- data/app/views/educode_sales/customers/new_follow_record.html.erb +54 -0
- data/app/views/educode_sales/customers/show_department.json.jbuilder +13 -0
- data/app/views/educode_sales/customers/show_follow.html.erb +439 -0
- data/app/views/educode_sales/customers/show_follow.json.jbuilder +13 -0
- data/app/views/educode_sales/customers/show_follow_record.html.erb +17 -0
- data/app/views/educode_sales/follow_ups/index.json.jbuilder +20 -0
- data/app/views/educode_sales/home/sales_place.json.jbuilder +9 -0
- data/app/views/educode_sales/operation_plans/_monthPlan.html.erb +6 -0
- data/app/views/educode_sales/operation_plans/_monthly.html.erb +2 -0
- data/app/views/educode_sales/operation_plans/_weekPlan.html.erb +6 -0
- data/app/views/educode_sales/operation_plans/_weekly.html.erb +2 -0
- data/app/views/educode_sales/places/index.json.jbuilder +1 -1
- data/app/views/educode_sales/plans/_monthPlan.html.erb +5 -0
- data/app/views/educode_sales/plans/_monthly.html.erb +1 -0
- data/app/views/educode_sales/plans/_weekPlan.html.erb +5 -0
- data/app/views/educode_sales/plans/_weekly.html.erb +1 -0
- data/app/views/educode_sales/recycles/index.html.erb +1 -1
- data/app/views/educode_sales/roles/edit.html.erb +8 -0
- data/app/views/educode_sales/sale_trends/trends.html.erb +2 -2
- data/app/views/educode_sales/sales/index.html.erb +58 -19
- data/app/views/educode_sales/sales/index.json.jbuilder +31 -16
- data/app/views/educode_sales/sales/operations.html.erb +4 -1
- data/app/views/educode_sales/teachers/course_list.json.jbuilder +1 -1
- data/app/views/educode_sales/teachers/edit.html.erb +53 -7
- data/app/views/educode_sales/teachers/index.html.erb +42 -3
- data/app/views/educode_sales/teachers/index.json.jbuilder +6 -3
- data/app/views/educode_sales/teachers/new.html.erb +55 -17
- data/app/views/educode_sales/teachers/show_follow.html.erb +10 -5
- data/app/views/educode_sales/teachers/show_follow.json.jbuilder +1 -0
- data/app/views/layouts/educode_sales/application.html.erb +8 -1
- data/config/routes.rb +26 -0
- data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +15 -0
- data/db/migrate/20211201023750_create_educode_sales_teacher_assign_follows.rb +11 -0
- data/db/migrate/20211206054756_add_year_to_follow_ups.rb +5 -0
- data/db/migrate/20211214100803_create_customer_extensions.rb +9 -0
- data/db/migrate/20211215025029_create_educode_sales_customer_follows.rb +12 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +30 -2
@@ -0,0 +1,20 @@
|
|
1
|
+
json.data do
|
2
|
+
json.array! @follow_ups do |d|
|
3
|
+
json.id d.id
|
4
|
+
json.clazz d.clazz.name
|
5
|
+
json.stage d.stage.name
|
6
|
+
json.staff d.staff.user.real_name
|
7
|
+
json.description d.description
|
8
|
+
json.advise d.advise
|
9
|
+
json.school d.business.department.school.name
|
10
|
+
json.created_at d.created_at.to_s
|
11
|
+
json.business d.business.name
|
12
|
+
json.business_id d.business.id
|
13
|
+
teacher_ids = d.key_person.pluck(:teacher_id)
|
14
|
+
json.key_people EducodeSales::Teacher.where(id: teacher_ids).pluck(:name).join('、')
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
json.code 0
|
20
|
+
json.count @follow_ups.total_count
|
@@ -79,6 +79,10 @@
|
|
79
79
|
toolbar: '#monthPlanToolbar',
|
80
80
|
totalRow:true,
|
81
81
|
defaultToolbar: ['filter'],
|
82
|
+
initSort: {
|
83
|
+
field: 'updated_at' //排序字段,对应 cols 设定的各字段名
|
84
|
+
,type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
|
85
|
+
},
|
82
86
|
cols: [
|
83
87
|
[
|
84
88
|
{
|
@@ -111,6 +115,8 @@
|
|
111
115
|
field: 'content',
|
112
116
|
width: 400,
|
113
117
|
title: '计划内容',
|
118
|
+
templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
|
119
|
+
|
114
120
|
},
|
115
121
|
{
|
116
122
|
field: 'count',
|
@@ -80,6 +80,10 @@
|
|
80
80
|
toolbar: '#weekPlanToolbar',
|
81
81
|
totalRow:true,
|
82
82
|
defaultToolbar: ['filter'],
|
83
|
+
initSort: {
|
84
|
+
field: 'updated_at' //排序字段,对应 cols 设定的各字段名
|
85
|
+
,type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
|
86
|
+
},
|
83
87
|
cols: [
|
84
88
|
[
|
85
89
|
{
|
@@ -122,6 +126,8 @@
|
|
122
126
|
field: 'content',
|
123
127
|
width: 300,
|
124
128
|
title: '计划内容',
|
129
|
+
templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
|
130
|
+
|
125
131
|
},
|
126
132
|
{
|
127
133
|
field: 'count',
|
@@ -17,7 +17,7 @@ json.data do
|
|
17
17
|
business_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
|
18
18
|
json.businesses_count business_count
|
19
19
|
all_businesses_count += business_count
|
20
|
-
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(
|
20
|
+
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("actual_amount - divide_amount").round(2)
|
21
21
|
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)
|
22
22
|
end
|
23
23
|
end
|
@@ -77,6 +77,10 @@
|
|
77
77
|
url: '/missions/plans?clazz=month',
|
78
78
|
toolbar: '#monthPlanToolbar',
|
79
79
|
defaultToolbar: ['filter'],
|
80
|
+
initSort: {
|
81
|
+
field: 'updated_at' //排序字段,对应 cols 设定的各字段名
|
82
|
+
,type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
|
83
|
+
},
|
80
84
|
totalRow:true,
|
81
85
|
cols: [
|
82
86
|
[
|
@@ -115,6 +119,7 @@
|
|
115
119
|
field: 'content',
|
116
120
|
width: 300,
|
117
121
|
title: '计划内容',
|
122
|
+
templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
|
118
123
|
},
|
119
124
|
{
|
120
125
|
field: 'follow_ups_count',
|
@@ -78,6 +78,10 @@
|
|
78
78
|
toolbar: '#weekPlanToolbar',
|
79
79
|
totalRow:true,
|
80
80
|
defaultToolbar: ['filter'],
|
81
|
+
initSort: {
|
82
|
+
field: 'updated_at' //排序字段,对应 cols 设定的各字段名
|
83
|
+
,type: 'desc' //排序方式 asc: 升序、desc: 降序、null: 默认排序
|
84
|
+
},
|
81
85
|
cols: [
|
82
86
|
[
|
83
87
|
{
|
@@ -120,6 +124,7 @@
|
|
120
124
|
field: 'content',
|
121
125
|
width: 300,
|
122
126
|
title: '计划内容',
|
127
|
+
templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
|
123
128
|
},
|
124
129
|
{
|
125
130
|
field: 'follow_ups_count',
|
@@ -36,6 +36,14 @@
|
|
36
36
|
<%= radio_button_tag("business", "全部", @areas.include?("商机管理-全部"), {title: '全部列表', id: 3}) %>
|
37
37
|
</div>
|
38
38
|
</div>
|
39
|
+
<div class="layui-form-item">
|
40
|
+
<label class="layui-form-label">客户管理</label>
|
41
|
+
<div class="layui-input-block">
|
42
|
+
<%= radio_button_tag("customer", "自己", @areas.include?("客户管理-自己"), {title: '本人负责列表', id: 13}) %>
|
43
|
+
<%= radio_button_tag("customer", "区域", @areas.include?("客户管理-区域"), {title: '本人负责区域列表', id:14}) %>
|
44
|
+
<%= radio_button_tag("customer", "全部", @areas.include?("客户管理-全部"), {title: '全部列表', id: 15}) %>
|
45
|
+
</div>
|
46
|
+
</div>
|
39
47
|
<div class="layui-form-item">
|
40
48
|
<label class="layui-form-label">销售计划</label>
|
41
49
|
<div class="layui-input-block">
|
@@ -207,7 +207,7 @@
|
|
207
207
|
<div class="layui-inline m-t-10">
|
208
208
|
<label class="layui-form-label">视图</label>
|
209
209
|
<div class="layui-input-inline">
|
210
|
-
<%= select_tag "follow_count_range", options_for_select([['
|
210
|
+
<%= select_tag "follow_count_range", options_for_select([['按天','day'],['按周','week'],['按月','month'],['按年','year']],params[:follow_count_range] || 'week'), {'lay-filter': 'follow_count'}%>
|
211
211
|
</div>
|
212
212
|
</div>
|
213
213
|
<div class="layui-inline">
|
@@ -215,7 +215,7 @@
|
|
215
215
|
<div class="layui-input-inline">
|
216
216
|
<input type="text" class="layui-input month layui-hide" id="date_month" name="date_month" placeholder=" - " value="<%=params[:date_month] %>" >
|
217
217
|
<input type="text" class="layui-input year layui-hide" id="date_year" name="date_year" placeholder=" - " value="<%=params[:date_year] %>">
|
218
|
-
<input type="text" class="layui-input week " id="date_week" name="date_week" placeholder=" - " value="<%=params[:date_week].present? ? params[:date_week] : (Time.now - 30.days).to_s(:date) + ' - ' + Time.now.to_s(:date) %>">
|
218
|
+
<input type="text" class="layui-input week " id="date_week" name="date_week" placeholder=" - " value="<%=params[:date_week].present? ? params[:date_week] : (Time.now - 30.days).beginning_of_week.to_s(:date) + ' - ' + Time.now.end_of_week.to_s(:date) %>">
|
219
219
|
<input type="text" class="layui-input day layui-hide" id="date" name="date" placeholder=" - " value="<%=params[:date] %>">
|
220
220
|
</div>
|
221
221
|
</div>
|
@@ -1,5 +1,11 @@
|
|
1
1
|
<div class="section">
|
2
|
-
<
|
2
|
+
<form class="layui-form select_year" action="">
|
3
|
+
<span>销售人员列表</span>
|
4
|
+
<div class="layui-input-inline" style="float: right">
|
5
|
+
<%= select_tag "years", options_for_select(@years,@year), {'lay-filter': 'year' } %>
|
6
|
+
</div>
|
7
|
+
<span style="float: right;padding-right: 10px">年度</span>
|
8
|
+
</form>
|
3
9
|
<hr>
|
4
10
|
<table class="layui-hide" id="table" lay-filter="table" ></table>
|
5
11
|
</div>
|
@@ -40,11 +46,18 @@
|
|
40
46
|
</script>
|
41
47
|
<script>
|
42
48
|
layui.use('table', function () {
|
43
|
-
|
49
|
+
var form = layui.form,
|
50
|
+
table = layui.table;
|
51
|
+
|
52
|
+
form.on('select(year)', function(data){
|
53
|
+
console.log(data, )
|
54
|
+
year = data.value
|
55
|
+
window.location.href = "/missions/sales?year=" + data.value
|
56
|
+
})
|
44
57
|
|
45
58
|
table.render({
|
46
59
|
elem: '#table',
|
47
|
-
url: '/missions/sales',
|
60
|
+
url: '/missions/sales?year=<%= @year %>',
|
48
61
|
cellMinWidth: 80,
|
49
62
|
totalRow:true,
|
50
63
|
cols: [
|
@@ -60,6 +73,7 @@
|
|
60
73
|
}, {
|
61
74
|
field: 'area',
|
62
75
|
title: '负责区域',
|
76
|
+
templet:'<div><span title="{{d.area}}">{{d.area}}</span></div>'
|
63
77
|
}, {
|
64
78
|
field: 'business_a',
|
65
79
|
title: 'A类商机',
|
@@ -108,12 +122,43 @@
|
|
108
122
|
title: '中标金额',
|
109
123
|
totalRow:true,sort:true,
|
110
124
|
width: 120
|
111
|
-
},
|
125
|
+
},
|
126
|
+
{
|
112
127
|
field: 'return_money',
|
113
128
|
title: '回款金额',
|
114
129
|
totalRow:true,sort:true,
|
115
130
|
width: 120
|
116
|
-
}
|
131
|
+
},
|
132
|
+
{
|
133
|
+
field: 'school_count',
|
134
|
+
title: '负责学校数',
|
135
|
+
totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
|
136
|
+
width: 120
|
137
|
+
},
|
138
|
+
{
|
139
|
+
field: 'follow_school_count',
|
140
|
+
title: '跟进学校数',
|
141
|
+
totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
|
142
|
+
width: 120
|
143
|
+
},
|
144
|
+
{
|
145
|
+
field: 'follow_school_counts',
|
146
|
+
title: '跟进学校次数',
|
147
|
+
totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
|
148
|
+
width: 120
|
149
|
+
},
|
150
|
+
{
|
151
|
+
field: 'follow_school_rate',
|
152
|
+
title: '学校覆盖率',
|
153
|
+
totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
|
154
|
+
width: 120
|
155
|
+
},
|
156
|
+
{
|
157
|
+
field: 'follow_department_rate',
|
158
|
+
title: '学院覆盖率',
|
159
|
+
totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
|
160
|
+
width: 120
|
161
|
+
},
|
117
162
|
]
|
118
163
|
],
|
119
164
|
limit: 20,
|
@@ -121,19 +166,13 @@
|
|
121
166
|
page: true
|
122
167
|
});
|
123
168
|
|
124
|
-
// var sort = {}, search = {};
|
125
|
-
// table.on('sort(table)', function (obj) {
|
126
|
-
// sort.field = obj.field;
|
127
|
-
// sort.order = obj.type;
|
128
|
-
// table.reload('table', {
|
129
|
-
// initSort: obj,
|
130
|
-
// where: {
|
131
|
-
// sort: sort,
|
132
|
-
// q: search
|
133
|
-
// }
|
134
|
-
// });
|
135
|
-
// })
|
136
|
-
|
137
169
|
|
138
170
|
});
|
139
|
-
</script>
|
171
|
+
</script>
|
172
|
+
<style>
|
173
|
+
.select_year .layui-form-select .layui-input {
|
174
|
+
padding-right: 30px;
|
175
|
+
cursor: pointer;
|
176
|
+
height: 22px;
|
177
|
+
}
|
178
|
+
</style>
|
@@ -26,32 +26,47 @@ json.data do
|
|
26
26
|
else
|
27
27
|
json.area ''
|
28
28
|
end
|
29
|
-
|
30
|
-
|
29
|
+
if @year == "全部"
|
30
|
+
business_a = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @a_clazz&.id).count
|
31
|
+
business_b = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @b_clazz&.id).count
|
32
|
+
business_c = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @c_clazz&.id).count
|
33
|
+
business_d = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @d_clazz&.id).count
|
34
|
+
business_e = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @e_clazz&.id).count
|
35
|
+
business_o = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @o_clazz&.id).count
|
36
|
+
json.goal @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id != ? AND educode_sales_follow_ups.stage_id in (?)", @x, @step_ids).sum(:total_amount).round(2)
|
37
|
+
json.return_money @businesses.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", @x).where.not("educode_sales_money_plans.clazz!= ?", 1).sum(:amount).round(2)
|
38
|
+
json.school_count EducodeSales::CustomerExtension.where(customer_staff_id: d.id).size
|
39
|
+
else
|
40
|
+
business_a = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @a_clazz&.id).where("educode_sales_follow_ups.year = ?", @year).count
|
41
|
+
business_b = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @b_clazz&.id).where("educode_sales_follow_ups.year = ?", @year).count
|
42
|
+
business_c = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @c_clazz&.id).where("educode_sales_follow_ups.year = ?", @year).count
|
43
|
+
business_d = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @d_clazz&.id).where("educode_sales_follow_ups.year = ?", @year).count
|
44
|
+
business_e = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @e_clazz&.id).where("educode_sales_follow_ups.year = ?", @year).count
|
45
|
+
business_o = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @o_clazz&.id).where("educode_sales_follow_ups.year = ?", @year).count
|
46
|
+
json.goal @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id != ? AND educode_sales_follow_ups.stage_id in (?)", @x, @step_ids).where("educode_sales_follow_ups.bidded_date >= ? AND educode_sales_follow_ups.bidded_date <= ?", "#{@year}-01-01", "#{@year}-12-31").sum(:total_amount).round(2)
|
47
|
+
json.return_money @businesses.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", @x).where.not("educode_sales_money_plans.clazz!= ?", 1).where("educode_sales_money_plans.date_at >= ? AND educode_sales_money_plans.date_at <= ? ", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").sum(:amount).round(2)
|
48
|
+
json.school_count EducodeSales::CustomerExtension.where(customer_staff_id: d.id).size
|
49
|
+
end
|
50
|
+
|
31
51
|
json.business_a business_a
|
32
|
-
business_b = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @b_clazz&.id).count
|
33
|
-
businesses_b_count += business_b
|
34
52
|
json.business_b business_b
|
35
|
-
business_c = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @c_clazz&.id).count
|
36
|
-
businesses_c_count += business_c
|
37
53
|
json.business_c business_c
|
38
|
-
business_d
|
39
|
-
|
40
|
-
json.business_d business_b
|
41
|
-
business_e = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @e_clazz&.id).count
|
42
|
-
businesses_e_count += business_e
|
43
|
-
json.business_e business_b
|
44
|
-
business_o = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @o_clazz&.id).count
|
45
|
-
businesses_o_count += business_o
|
54
|
+
json.business_d business_d
|
55
|
+
json.business_e business_e
|
46
56
|
json.business_o business_o
|
47
|
-
|
48
|
-
json.return_money @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id != ?", @x).sum("educode_sales_businesses.return_money").round(2)
|
57
|
+
|
49
58
|
json.a_clazz_id @a_clazz&.id
|
50
59
|
json.b_clazz_id @b_clazz&.id
|
51
60
|
json.c_clazz_id @c_clazz&.id
|
52
61
|
json.d_clazz_id @d_clazz&.id
|
53
62
|
json.e_clazz_id @e_clazz&.id
|
54
63
|
json.o_clazz_id @o_clazz&.id
|
64
|
+
businesses_a_count += business_a
|
65
|
+
businesses_b_count += business_b
|
66
|
+
businesses_c_count += business_c
|
67
|
+
businesses_d_count += business_d
|
68
|
+
businesses_e_count += business_e
|
69
|
+
businesses_o_count += business_o
|
55
70
|
end
|
56
71
|
end
|
57
72
|
|
@@ -46,18 +46,21 @@
|
|
46
46
|
}, {
|
47
47
|
field: 'area',
|
48
48
|
title: '负责区域',
|
49
|
+
templet:'<div><span title="{{d.area}}">{{d.area}}</span></div>'
|
49
50
|
}, {
|
50
51
|
field: 'schools',
|
51
52
|
title: '跟进学校',
|
52
53
|
templet: "#school",
|
53
54
|
totalRow:true,
|
55
|
+
sort: true,
|
54
56
|
width: 120
|
55
57
|
}, {
|
56
58
|
field: 'departments',
|
57
59
|
title: '跟进二级学院',
|
58
60
|
templet: "#xschool",
|
59
61
|
totalRow:true,
|
60
|
-
|
62
|
+
sort: true,
|
63
|
+
width: 170
|
61
64
|
},
|
62
65
|
]
|
63
66
|
],
|
@@ -9,36 +9,48 @@
|
|
9
9
|
</div>
|
10
10
|
</div>
|
11
11
|
<div class="layui-inline">
|
12
|
-
<label class="layui-form-label
|
12
|
+
<label class="layui-form-label ">职称</label>
|
13
13
|
<div class="layui-input-block">
|
14
14
|
<%= select_tag "professional_title", options_for_select(['教授', '研究员', '副教授', '副研究员', '讲师', '助理研究员', '助理教授'], @teacher.professional_title), { include_blank: true } %>
|
15
15
|
</div>
|
16
16
|
</div>
|
17
17
|
<br>
|
18
18
|
<div class="layui-inline">
|
19
|
-
<label class="layui-form-label
|
19
|
+
<label class="layui-form-label ">职务</label>
|
20
20
|
<div class="layui-input-block">
|
21
|
-
<input type="text" name="job" autocomplete="off"
|
21
|
+
<input type="text" name="job" autocomplete="off"
|
22
22
|
class="layui-input" placeholder="请输入" value="<%= @teacher.job %>">
|
23
23
|
</div>
|
24
24
|
</div>
|
25
25
|
<div class="layui-inline">
|
26
|
-
<label class="layui-form-label
|
26
|
+
<label class="layui-form-label ">来源</label>
|
27
27
|
<div class="layui-input-block">
|
28
28
|
<%= select_tag "source_id", options_for_select(EducodeSales::Common.where(clazz: 'teacher_source').pluck(:name, :id), @teacher.source_id), { include_blank: true } %>
|
29
29
|
</div>
|
30
30
|
</div>
|
31
31
|
<br>
|
32
|
+
<div class="layui-inline">
|
33
|
+
<label class="layui-form-label ">微信号</label>
|
34
|
+
<div class="layui-input-block">
|
35
|
+
<input type="text" name="wechat" autocomplete="off"
|
36
|
+
class="layui-input" placeholder="请输入" value="<%= @teacher.wechat %>">
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
<br>
|
32
40
|
<div class="layui-inline">
|
33
41
|
<label class="layui-form-label required">单位部门</label>
|
34
42
|
<div class="layui-input-block" id="add_department2" style="width: 400px"></div>
|
35
|
-
<!-- <input type="text" name="edit_school" autocomplete="off" lay-verify="required"-->
|
36
|
-
<!-- class="layui-input" placeholder="请输入" value="<%#= Department.find_by(id: @teacher.department_id).name %>-<%#= School.find_by(id: Department.find_by(id: @teacher.department_id).school_id).name %>">-->
|
37
43
|
</div>
|
38
44
|
<br>
|
45
|
+
<div class="layui-form-item">
|
46
|
+
<label class="layui-form-label">教研助理</label>
|
47
|
+
<div class="layui-input-inline">
|
48
|
+
<div id="edit_teacher_assist" style="width: 400px;"></div>
|
49
|
+
</div>
|
50
|
+
</div>
|
39
51
|
<div class="layui-inline">
|
40
52
|
<label class="layui-form-label">平台账号</label>
|
41
|
-
<div class="layui-input-block" id="user_search" style="width:
|
53
|
+
<div class="layui-input-block" id="user_search" style="width: 400px;"></div>
|
42
54
|
</div>
|
43
55
|
<div class="layui-form-item m-t-20">
|
44
56
|
<div class="layui-input-block">
|
@@ -60,6 +72,35 @@
|
|
60
72
|
|
61
73
|
form.render();
|
62
74
|
|
75
|
+
var edit_teacher_assist_list = xmSelect.render({
|
76
|
+
el: '#edit_teacher_assist',
|
77
|
+
remoteSearch: true,
|
78
|
+
clickClose: true,
|
79
|
+
delay: 1000,
|
80
|
+
paging: true,
|
81
|
+
pageRemote: true,
|
82
|
+
filterable: true,
|
83
|
+
remoteMethod: function (val, cb, show, pageIndex) {
|
84
|
+
$.ajax( '/missions/sales_staff?teacher_assist=true', {
|
85
|
+
method: 'get',
|
86
|
+
data: {
|
87
|
+
q: val,
|
88
|
+
page: pageIndex
|
89
|
+
},
|
90
|
+
dataType: 'json',
|
91
|
+
success: function (res) {
|
92
|
+
var data = res.data;
|
93
|
+
if (res.code == 0) {
|
94
|
+
cb(res.data, res.count);
|
95
|
+
} else {
|
96
|
+
layer.msg(res.msg, {time: 2000, icon: 2, shade: 0.01});
|
97
|
+
}
|
98
|
+
}
|
99
|
+
})
|
100
|
+
}
|
101
|
+
})
|
102
|
+
edit_teacher_assist_list.setValue(gon.teacher_assist)
|
103
|
+
|
63
104
|
var add_department = selectInput.render({
|
64
105
|
elem: '#add_department2',
|
65
106
|
name: 'department', // 渲染的input的name值
|
@@ -125,6 +166,11 @@
|
|
125
166
|
if (department_id == '') {
|
126
167
|
return layer.alert("请选择单位部门")
|
127
168
|
}
|
169
|
+
var assign_follow = [];
|
170
|
+
edit_teacher_assist_list.getValue().forEach(function(d) {
|
171
|
+
assign_follow.push(d.value);
|
172
|
+
})
|
173
|
+
data.field.teacher_assist = assign_follow;
|
128
174
|
data.field.department_id = department_id;
|
129
175
|
data.field.user_id = user_id;
|
130
176
|
request.authPut("missions/teachers/"+ parent.id, data.field, function (res) {
|
@@ -38,6 +38,12 @@
|
|
38
38
|
<input type="text" class="layui-input" id="time" placeholder="请选择时间" autocomplete="off" name="regist_at">
|
39
39
|
</div>
|
40
40
|
</div>
|
41
|
+
<div class="layui-inline">
|
42
|
+
<label class="layui-form-label">注册状态</label>
|
43
|
+
<div class="layui-input-inline">
|
44
|
+
<%= select_tag "status", options_for_select([["已注册","1"],["未注册","0"]]), { include_blank: true } %>
|
45
|
+
</div>
|
46
|
+
</div>
|
41
47
|
<div class="layui-inline">
|
42
48
|
<label class="layui-form-label">区域</label>
|
43
49
|
<div class="layui-input-inline">
|
@@ -50,6 +56,12 @@
|
|
50
56
|
<input type="text" class="layui-input" id="date" name="date" autocomplete="off" placeholder=" - ">
|
51
57
|
</div>
|
52
58
|
</div>
|
59
|
+
<div class="layui-inline">
|
60
|
+
<label class="layui-form-label">教研助理</label>
|
61
|
+
<div class="layui-input-inline">
|
62
|
+
<%= select_tag "assist", options_for_select(@staffs, params[:assist]), { 'lay-filter': 'assist', include_blank: true } %>
|
63
|
+
</div>
|
64
|
+
</div>
|
53
65
|
|
54
66
|
<div class="layui-inline">
|
55
67
|
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
|
@@ -66,7 +78,7 @@
|
|
66
78
|
<span class="table-label">教师列表</span>
|
67
79
|
<% if can? :create, EducodeSales::Teacher %>
|
68
80
|
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="import">导入数据</button>
|
69
|
-
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add"
|
81
|
+
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add">添加老师</button>
|
70
82
|
<% end %>
|
71
83
|
<!-- <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="search_new"> 搜索添加 -->
|
72
84
|
</button>
|
@@ -86,7 +98,7 @@
|
|
86
98
|
<%# if can? :destroy, EducodeSales::Teacher %>
|
87
99
|
<!-- <a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>-->
|
88
100
|
<%# end %>
|
89
|
-
<% if can? :
|
101
|
+
<% if can? :create, EducodeSales::TeacherFollow %>
|
90
102
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="add_event">添加跟进记录</a>
|
91
103
|
<% end %>
|
92
104
|
<% if @more %>
|
@@ -148,6 +160,7 @@
|
|
148
160
|
width: 60,
|
149
161
|
title:'序号',type: 'numbers',
|
150
162
|
totalRowText:'合计',
|
163
|
+
|
151
164
|
},
|
152
165
|
{
|
153
166
|
field: 'name',
|
@@ -159,11 +172,15 @@
|
|
159
172
|
field: 'school',
|
160
173
|
width: 160,
|
161
174
|
title: '单位',
|
175
|
+
templet:'<div><span title="{{d.school}}">{{d.school}}</span></div>'
|
176
|
+
|
162
177
|
},
|
163
178
|
{
|
164
179
|
field: 'department',
|
165
180
|
width: 130,
|
166
|
-
title: '部门'
|
181
|
+
title: '部门',
|
182
|
+
templet:'<div><span title="{{d.department}}">{{d.department}}</span></div>'
|
183
|
+
|
167
184
|
},
|
168
185
|
{
|
169
186
|
field: 'professional_title',
|
@@ -230,6 +247,26 @@
|
|
230
247
|
width: 120,
|
231
248
|
title: '注册时间',
|
232
249
|
},
|
250
|
+
{
|
251
|
+
field: 'last_login_on',
|
252
|
+
width: 120,
|
253
|
+
title: '最近登录',
|
254
|
+
},
|
255
|
+
{
|
256
|
+
field: 'created_at',
|
257
|
+
width: 120,
|
258
|
+
title: '添加时间',
|
259
|
+
},
|
260
|
+
{
|
261
|
+
field: 'wechat',
|
262
|
+
width: 120,
|
263
|
+
title: '微信号',
|
264
|
+
},
|
265
|
+
{
|
266
|
+
field: 'teacher_assist',
|
267
|
+
width: 120,
|
268
|
+
title: '教研助理',
|
269
|
+
},
|
233
270
|
{
|
234
271
|
title: '操作',
|
235
272
|
minWidth: 170,
|
@@ -372,7 +409,9 @@
|
|
372
409
|
name: "",
|
373
410
|
professional_title: "",
|
374
411
|
regist_at: "",
|
412
|
+
status: "",
|
375
413
|
school: "",
|
414
|
+
assist: "",
|
376
415
|
teacher_source: ""
|
377
416
|
})
|
378
417
|
return false;
|