educode_sales 1.10.2 → 1.10.5
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/assessments_controller.rb +101 -0
- data/app/controllers/educode_sales/follow_ups_controller.rb +13 -0
- data/app/controllers/educode_sales/teachers_controller.rb +10 -5
- data/app/controllers/educode_sales/upload_files_controller.rb +9 -1
- data/app/models/educode_sales/attendance.rb +4 -0
- data/app/views/educode_sales/assessments/_attendances.html.erb +238 -0
- data/app/views/educode_sales/assessments/attendances.js.erb +1 -0
- data/app/views/educode_sales/assessments/attendances.json.jbuilder +21 -0
- data/app/views/educode_sales/assessments/edit_attendance.html.erb +77 -0
- data/app/views/educode_sales/assessments/import.html.erb +38 -0
- data/app/views/educode_sales/assessments/index.html.erb +24 -2
- data/app/views/educode_sales/businesses/time_line.html.erb +25 -2
- data/app/views/educode_sales/follow_ups/file.html.erb +154 -0
- data/app/views/educode_sales/follow_ups/upload_file.html.erb +43 -0
- data/app/views/educode_sales/teachers/add_courses.html.erb +22 -5
- data/config/routes.rb +10 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7d2e7e3e78774b085c64185fddc9b8ecddbcbb7bf87e030c8f449fb21285f8c9
|
|
4
|
+
data.tar.gz: c1ea147b8d76cc8ef23d6004834d4c79499b2c1d7f18c233e939f030b303488f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 37e8d9e9ce8bbf78632588b9bff325548e3004dbb2a8daf7b3a64a29fd547556c41bc0ecfc3b244fb8725e2cd76cb3618cc08db4952a47189f8f0dfb1f19943e
|
|
7
|
+
data.tar.gz: a5661dcb147e98afe980d0c330c9d8fcb5f297335ec2f305e658b3f088be9c57919f7e534241d6d7b612dc903043190aa9b9132dd6a727122299e7dd847071c5
|
|
@@ -376,13 +376,114 @@ module EducodeSales
|
|
|
376
376
|
end
|
|
377
377
|
|
|
378
378
|
|
|
379
|
+
#签到记录
|
|
380
|
+
def attendances
|
|
381
|
+
respond_to do |format|
|
|
382
|
+
format.html do
|
|
383
|
+
end
|
|
384
|
+
format.js do
|
|
385
|
+
end
|
|
386
|
+
format.json do
|
|
387
|
+
@attendances = EducodeSales::Attendance
|
|
388
|
+
if params[:q].present? && params[:q][:name].present?
|
|
389
|
+
@attendances = @attendances.where("name like ?", "%#{params[:q][:name].strip}%")
|
|
390
|
+
end
|
|
391
|
+
if params[:q].present? && params[:q][:attendance_date].present?
|
|
392
|
+
date = params[:q][:attendance_date].split(" - ")
|
|
393
|
+
@attendances = @attendances.where("attendance_date >= ? and attendance_date <= ?", date[0] + ' 00:00:00', date[1] + ' 23:59:59')
|
|
394
|
+
end
|
|
395
|
+
if params[:q].present? && params[:q][:customer].present?
|
|
396
|
+
@attendances = @attendances.where("customer like ?", "%#{params[:q][:customer]}%")
|
|
397
|
+
end
|
|
398
|
+
@attendances = @attendances.page(params[:page]).per(params[:limit])
|
|
399
|
+
end
|
|
400
|
+
end
|
|
401
|
+
end
|
|
379
402
|
|
|
403
|
+
#编辑签到记录界面
|
|
404
|
+
def edit_attendance
|
|
405
|
+
@attendance = EducodeSales::Attendance.find(params[:id])
|
|
406
|
+
render layout: false
|
|
407
|
+
end
|
|
380
408
|
|
|
409
|
+
#更新签到记录信息
|
|
410
|
+
def update_attendance
|
|
411
|
+
ActiveRecord::Base.transaction do
|
|
412
|
+
@attendance = EducodeSales::Attendance.find(params[:id])
|
|
413
|
+
@attendance.attendance_date = params[:attendance_datetime]
|
|
414
|
+
@attendance.update_attributes(attendance_update)
|
|
415
|
+
render_success
|
|
416
|
+
end
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
#删除签到记录
|
|
420
|
+
def delete_attendance
|
|
421
|
+
begin
|
|
422
|
+
ActiveRecord::Base.transaction do
|
|
423
|
+
attendance = EducodeSales::Attendance.find(params[:id])
|
|
424
|
+
attendance.destroy!
|
|
425
|
+
render_success
|
|
426
|
+
end
|
|
427
|
+
rescue Exception => e
|
|
428
|
+
render_failure(e.message)
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
|
|
432
|
+
#跳转导入界面
|
|
433
|
+
def import
|
|
434
|
+
render layout: false
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
#导入签到记录接口
|
|
438
|
+
def import_attendances
|
|
439
|
+
render_failure("文件不存在或格式错误") if params[:file].blank? || !params[:file].is_a?(ActionDispatch::Http::UploadedFile)
|
|
440
|
+
Rails.logger.info "导入签到数据"
|
|
441
|
+
begin
|
|
442
|
+
doc = SimpleXlsxReader.open(params[:file])
|
|
443
|
+
rescue
|
|
444
|
+
return render_error("文件不存在或格式错误")
|
|
445
|
+
end
|
|
446
|
+
size = doc.sheets.size
|
|
447
|
+
Rails.logger.info size
|
|
448
|
+
attendance_attrs = %i[name attendance_date longitude latitude location address mobile_id ip_address customer target created_at updated_at]
|
|
449
|
+
attendance_vales = []
|
|
450
|
+
(0..size - 1).each do |index|
|
|
451
|
+
doc.sheets[index].rows.each_with_index do |d, i|
|
|
452
|
+
next if i <= 2
|
|
453
|
+
name = d[0]
|
|
454
|
+
attendance_date_time = "#{d[1]} #{d[2]}"
|
|
455
|
+
attendance_date = attendance_date_time.strip
|
|
456
|
+
longitude = d[3]
|
|
457
|
+
latitude = d[4]
|
|
458
|
+
location = d[5]
|
|
459
|
+
address = d[6]
|
|
460
|
+
mobile_id = d[7]
|
|
461
|
+
ip_address = d[8]
|
|
462
|
+
customer = d[9]
|
|
463
|
+
target = d[10]
|
|
464
|
+
attendance_vales << {name: name, attendance_date: attendance_date, longitude: longitude, latitude: latitude, location: location,
|
|
465
|
+
address: address, mobile_id: mobile_id, ip_address: ip_address, customer: customer, target: target}
|
|
466
|
+
|
|
467
|
+
end
|
|
468
|
+
end
|
|
469
|
+
EducodeSales::Attendance.bulk_insert(*attendance_attrs) do |worker|
|
|
470
|
+
attendance_vales.each do |attendance|
|
|
471
|
+
worker.add(name: attendance[:name], attendance_date: attendance[:attendance_date].to_datetime, longitude: attendance[:longitude], latitude: attendance[:latitude],
|
|
472
|
+
location: attendance[:location], address: attendance[:address], mobile_id: attendance[:mobile_id], ip_address: attendance[:ip_address], customer: attendance[:customer], target: attendance[:target])
|
|
473
|
+
end
|
|
474
|
+
end
|
|
475
|
+
render_success
|
|
476
|
+
end
|
|
381
477
|
|
|
382
478
|
|
|
383
479
|
|
|
384
480
|
|
|
385
481
|
private
|
|
482
|
+
|
|
483
|
+
def attendance_update
|
|
484
|
+
params.permit(:name, :mobile_id, :ip_address, :customer, :target)
|
|
485
|
+
end
|
|
486
|
+
|
|
386
487
|
def params_create
|
|
387
488
|
params.permit( :annual, :assessment,:assessment_year, :first_quarter, :second_quarter, :third_quarter, :fourth_quarter,
|
|
388
489
|
:january, :february, :march, :april, :may, :june, :july, :august, :september, :october, :november, :december,
|
|
@@ -287,8 +287,21 @@ module EducodeSales
|
|
|
287
287
|
render_success
|
|
288
288
|
end
|
|
289
289
|
|
|
290
|
+
def file
|
|
291
|
+
gon.folder = edu_setting('attachment_folder') + '/'
|
|
292
|
+
render layout: false
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
def upload_file
|
|
296
|
+
render layout: false
|
|
297
|
+
end
|
|
298
|
+
|
|
290
299
|
private
|
|
291
300
|
|
|
301
|
+
def edu_setting name
|
|
302
|
+
EduSetting.get(name)
|
|
303
|
+
end
|
|
304
|
+
|
|
292
305
|
def load_business
|
|
293
306
|
@business = Business.find(params[:business_id])
|
|
294
307
|
end
|
|
@@ -325,18 +325,23 @@ module EducodeSales
|
|
|
325
325
|
|
|
326
326
|
def add_courses
|
|
327
327
|
load_teacher
|
|
328
|
+
subject_names = %w[程序设计语言 计算机基础 算法设计 计算机系统能力 大数据 人工智能 数据库 电子信息 Web技术 软件工程 网络与安全 区块链 数学与统计 物联网 云计算 虚拟仿真].map{|d| {value: d, name: d}}
|
|
329
|
+
gon.subject_names = subject_names
|
|
328
330
|
render layout: false
|
|
329
331
|
end
|
|
330
332
|
|
|
331
333
|
|
|
332
334
|
def create_course
|
|
333
335
|
load_teacher
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
336
|
+
names = params[:select_subject_names].split(",")
|
|
337
|
+
begin
|
|
338
|
+
names.each do |name|
|
|
339
|
+
course_subject = @teacher.course_subjects.build(name: name, role_name: params[:role_name])
|
|
340
|
+
course_subject.save!
|
|
341
|
+
end
|
|
337
342
|
render_success
|
|
338
|
-
|
|
339
|
-
render_failure
|
|
343
|
+
rescue Exception => ex
|
|
344
|
+
render_failure(ex.message)
|
|
340
345
|
end
|
|
341
346
|
end
|
|
342
347
|
|
|
@@ -8,7 +8,12 @@ module EducodeSales
|
|
|
8
8
|
format.html do
|
|
9
9
|
end
|
|
10
10
|
format.json do
|
|
11
|
-
|
|
11
|
+
if params[:follow_up_id].present?
|
|
12
|
+
@files = Attachment.where(container_type: "EducodeSales::FollowUp", container_id: params[:follow_up_id])
|
|
13
|
+
else
|
|
14
|
+
@files = Attachment.where(description: "business", container_id:params[:business_id])
|
|
15
|
+
end
|
|
16
|
+
|
|
12
17
|
if params[:sort].present? && params[:sort][:field]
|
|
13
18
|
@files = @files.order("#{params[:sort][:field]} #{params[:sort][:order]}")
|
|
14
19
|
else
|
|
@@ -39,6 +44,9 @@ module EducodeSales
|
|
|
39
44
|
elsif params[:idea_id].present?
|
|
40
45
|
@attachment.container_id = params[:idea_id]
|
|
41
46
|
@attachment.container_type = 'EducodeSales::Idea'
|
|
47
|
+
elsif params[:follow_up_id].present?
|
|
48
|
+
@attachment.container_id = params[:follow_up_id]
|
|
49
|
+
@attachment.container_type = 'EducodeSales::FollowUp'
|
|
42
50
|
else
|
|
43
51
|
@attachment.description = "business"
|
|
44
52
|
@attachment.container_id = params[:business_id]
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
<div style="padding-right: 50px" id="tab_2">
|
|
2
|
+
<div class=" layui-show" style="padding-left: 0">
|
|
3
|
+
<div style="margin: 10px 10px 10px 10px">
|
|
4
|
+
<form class="layui-form layui-form-pane" lay-filter="search_form">
|
|
5
|
+
<div class="layui-form-item">
|
|
6
|
+
<div class="layui-inline">
|
|
7
|
+
<label class="layui-form-label">姓名</label>
|
|
8
|
+
<div class="layui-input-inline">
|
|
9
|
+
<input type="text" class="layui-input" id="name" name="name">
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="layui-inline">
|
|
13
|
+
<label class="layui-form-label">签到时间</label>
|
|
14
|
+
<div class="layui-input-inline">
|
|
15
|
+
<input type="text" class="layui-input" id="attendance_date" name="attendance_date" autocomplete="off" placeholder=" - ">
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="layui-inline">
|
|
19
|
+
<label class="layui-form-label">拜访客户</label>
|
|
20
|
+
<div class="layui-input-inline">
|
|
21
|
+
<input type="text" class="layui-input" id="customer" name="customer">
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="layui-inline">
|
|
25
|
+
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_search">重置</button>
|
|
26
|
+
<button type="button" id="search_bt" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_attendance">确定</button>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</form>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<script type="text/html" id="toolbarDemo">
|
|
35
|
+
<div class="layui-btn-container">
|
|
36
|
+
<span class="table-label">签到列表</span>
|
|
37
|
+
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="import_attendances">批量导入签到数据</button>
|
|
38
|
+
</div>
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<div class="">
|
|
42
|
+
<table class="layui-hide" id="attendance_table" style="min-height: 300px;" lay-filter="attendance_table"></table>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<script type="text/html" id="currentTableBar">
|
|
46
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
|
|
47
|
+
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
|
|
48
|
+
</script>
|
|
49
|
+
|
|
50
|
+
<script>
|
|
51
|
+
layui.use(['form', 'table', 'miniPage', 'element', 'request', 'laydate'], function () {
|
|
52
|
+
var $ = layui.jquery,
|
|
53
|
+
form = layui.form,
|
|
54
|
+
request = layui.request,
|
|
55
|
+
miniPage = layui.miniPage,
|
|
56
|
+
laydate = layui.laydate;
|
|
57
|
+
|
|
58
|
+
form.render();
|
|
59
|
+
|
|
60
|
+
laydate.render({
|
|
61
|
+
elem: '#attendance_date',
|
|
62
|
+
range: true
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
table = layui.table;
|
|
66
|
+
table.render({
|
|
67
|
+
elem: '#attendance_table',
|
|
68
|
+
url: '/missions/assessments/attendances',
|
|
69
|
+
where: {q: form.val('search_form')},
|
|
70
|
+
toolbar: '#toolbarDemo',
|
|
71
|
+
defaultToolbar: ['filter'],
|
|
72
|
+
cols: [
|
|
73
|
+
[
|
|
74
|
+
{
|
|
75
|
+
field: 'id',
|
|
76
|
+
width: 100,
|
|
77
|
+
title:'序号',
|
|
78
|
+
type: 'numbers',
|
|
79
|
+
fixed: 'left'
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
field: 'name',
|
|
83
|
+
width: 120,
|
|
84
|
+
title: '姓名',
|
|
85
|
+
fixed: 'left',
|
|
86
|
+
templet: "#name"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
field: 'attendance_date',
|
|
90
|
+
width: 120,
|
|
91
|
+
title: '日期',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
field: 'attendance_time',
|
|
95
|
+
width: 150,
|
|
96
|
+
title: '时间',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
field: 'longitude',
|
|
100
|
+
width: 150,
|
|
101
|
+
title: '经度',
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
field: 'latitude',
|
|
105
|
+
width: 120,
|
|
106
|
+
title: '纬度',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
field: 'location',
|
|
110
|
+
width: 120,
|
|
111
|
+
title: '地点',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
field: 'address',
|
|
115
|
+
width: 150,
|
|
116
|
+
title: '详细地址',
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
field: 'mobile_id',
|
|
120
|
+
width: 150,
|
|
121
|
+
title: '手机标识',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
field: 'ip_address',
|
|
125
|
+
width: 150,
|
|
126
|
+
title: 'ip地址',
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
field: 'customer',
|
|
130
|
+
width: 120,
|
|
131
|
+
title: '拜访客户',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
field: 'target',
|
|
135
|
+
width: 120,
|
|
136
|
+
title: '拜访对象',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
title: '操作',
|
|
140
|
+
minWidth: 150,
|
|
141
|
+
toolbar: '#currentTableBar',
|
|
142
|
+
align: "center",
|
|
143
|
+
fixed: 'right'
|
|
144
|
+
}
|
|
145
|
+
]
|
|
146
|
+
],
|
|
147
|
+
limit: 20,
|
|
148
|
+
limits: [10, 20, 30, 40, 50, 60, 70, 80, 90],
|
|
149
|
+
page: true
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
//重置
|
|
153
|
+
form.on('submit(reset_search)', function () {
|
|
154
|
+
form.val('search_form', {
|
|
155
|
+
name: "",
|
|
156
|
+
attendance_date: "",
|
|
157
|
+
customer: ""
|
|
158
|
+
});
|
|
159
|
+
return false;
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
var sort = {}, search = {};
|
|
163
|
+
table.on('sort(attendance_table)', function (obj) {
|
|
164
|
+
sort.field = obj.field;
|
|
165
|
+
sort.order = obj.type;
|
|
166
|
+
table.reload('attendance_table', {
|
|
167
|
+
initSort: obj,
|
|
168
|
+
where: {
|
|
169
|
+
sort: sort,
|
|
170
|
+
q: search
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
// 监听搜索操作
|
|
176
|
+
form.on('submit(search_attendance)', function (data) {
|
|
177
|
+
search = data.field;
|
|
178
|
+
table.reload('attendance_table', {
|
|
179
|
+
page: {
|
|
180
|
+
curr: 1
|
|
181
|
+
},
|
|
182
|
+
where: {q: search, sort: sort}
|
|
183
|
+
}, 'data');
|
|
184
|
+
return false;
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
//toorbar事件监听
|
|
188
|
+
table.on('toolbar(attendance_table)', function (obj) {
|
|
189
|
+
if (obj.event === 'import_attendances') { //批量导入签到记录
|
|
190
|
+
var content = miniPage.getHrefContent('/missions/assessments/import');
|
|
191
|
+
var openWH = miniPage.getOpenWidthHeight();
|
|
192
|
+
import_index = layer.open({
|
|
193
|
+
title: '导入签到记录数据',
|
|
194
|
+
type: 1,
|
|
195
|
+
shade: 0.2,
|
|
196
|
+
shadeClose: true,
|
|
197
|
+
area: ['400px', '200px'],
|
|
198
|
+
offset: 'auto',
|
|
199
|
+
closeBtn: 0,
|
|
200
|
+
content: content,
|
|
201
|
+
});
|
|
202
|
+
$(window).on("resize", function () {
|
|
203
|
+
layer.full(index);
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
//tool事件监听
|
|
209
|
+
table.on('tool(attendance_table)', function (obj) {
|
|
210
|
+
var data = obj.data;
|
|
211
|
+
var id = data.id;
|
|
212
|
+
if (obj.event === 'edit'){ //编辑签到记录
|
|
213
|
+
var content = miniPage.getHrefContent('/missions/assessments/' + id + '/edit_attendance');
|
|
214
|
+
var openWH = miniPage.getOpenWidthHeight();
|
|
215
|
+
var index = layer.open({
|
|
216
|
+
title: '编辑签到记录',
|
|
217
|
+
type: 1,
|
|
218
|
+
shade: 0.2,
|
|
219
|
+
maxmin: true,
|
|
220
|
+
shadeClose: true,
|
|
221
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
|
222
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
|
223
|
+
content: content
|
|
224
|
+
});
|
|
225
|
+
$(window).on("resize", function () {
|
|
226
|
+
layer.full(index);
|
|
227
|
+
});
|
|
228
|
+
}else if (obj.event === 'delete'){
|
|
229
|
+
layer.confirm('确定删除该签到记录吗?', function (index) {
|
|
230
|
+
request.delete('missions/assessments/' + id + "/delete_attendance", {}, function (res) {
|
|
231
|
+
layer.close(index);
|
|
232
|
+
table.reload("attendance_table")
|
|
233
|
+
})
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
})
|
|
238
|
+
</script>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
$("#page_1").html("<%= j render 'attendances' %>");
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
json.data do
|
|
2
|
+
json.array! @attendances do |d|
|
|
3
|
+
json.id d.id
|
|
4
|
+
json.name d.name
|
|
5
|
+
date = d.attendance_date.to_s.strip
|
|
6
|
+
attendance_date = date&.split(" ")[0]
|
|
7
|
+
attendance_time = date&.split(" ")[1]
|
|
8
|
+
json.attendance_date attendance_date #签到日期
|
|
9
|
+
json.attendance_time attendance_time #签到时间
|
|
10
|
+
json.longitude d.longitude #经度
|
|
11
|
+
json.latitude d.latitude #纬度
|
|
12
|
+
json.location d.location #签到地点
|
|
13
|
+
json.address d.address #详细地址
|
|
14
|
+
json.mobile_id d.mobile_id #手机标识
|
|
15
|
+
json.ip_address d.ip_address #ip地址
|
|
16
|
+
json.customer d.customer #拜访客户
|
|
17
|
+
json.target d.target #拜访对象
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
json.code 0
|
|
21
|
+
json.count @attendances&.total_count
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
<form class="layui-form layuimini-form" lay-filter="attendance_form">
|
|
2
|
+
<div class="layui-form-item" style="padding: 25px">
|
|
3
|
+
<div class="layui-inline">
|
|
4
|
+
<label class="layui-form-label">姓名:</label>
|
|
5
|
+
<div class="layui-input-block" style="width: 400px;">
|
|
6
|
+
<input type="text" name="name" value="<%= @attendance&.name %>" placeholder="请输入姓名" autocomplete="off" class="layui-input">
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="layui-inline">
|
|
10
|
+
<label class="layui-form-label">签到时间:</label>
|
|
11
|
+
<div class="layui-input-inline" style="width: 400px;">
|
|
12
|
+
<input type="text" class="layui-input" id="attendance_datetime" name="attendance_datetime" value="<%= @attendance&.attendance_date %>" autocomplete="off">
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
<br/>
|
|
16
|
+
<div class="layui-inline">
|
|
17
|
+
<label class="layui-form-label">手机标识:</label>
|
|
18
|
+
<div class="layui-input-block" style="width: 400px;">
|
|
19
|
+
<input type="text" name="mobile_id" value="<%= @attendance&.mobile_id %>" placeholder="请输入手机标识" autocomplete="off" class="layui-input">
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="layui-inline">
|
|
23
|
+
<label class="layui-form-label">ip地址:</label>
|
|
24
|
+
<div class="layui-input-block" style="width: 400px;">
|
|
25
|
+
<input type="text" name="ip_address" value="<%= @attendance&.ip_address %>" placeholder="请输入ip地址" autocomplete="off" class="layui-input">
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
<br/>
|
|
29
|
+
<div class="layui-inline">
|
|
30
|
+
<label class="layui-form-label">拜访客户:</label>
|
|
31
|
+
<div class="layui-input-block" style="width: 400px;">
|
|
32
|
+
<input type="text" name="customer" value="<%= @attendance&.customer %>" placeholder="请输入拜访客户" autocomplete="off" class="layui-input">
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="layui-inline">
|
|
36
|
+
<label class="layui-form-label">拜访对象:</label>
|
|
37
|
+
<div class="layui-input-block" style="width: 400px;">
|
|
38
|
+
<input type="text" name="target" value="<%= @attendance&.target %>" placeholder="请输入拜访对象" autocomplete="off" class="layui-input">
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
<br/>
|
|
42
|
+
<div class="layui-inline" style="padding-left: 110px">
|
|
43
|
+
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="attendance_reset">提交</button>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</form>
|
|
47
|
+
|
|
48
|
+
<script>
|
|
49
|
+
layui.use(['form', 'element', 'laydate', 'request'], function () {
|
|
50
|
+
var $ = layui.jquery,
|
|
51
|
+
form = layui.form,
|
|
52
|
+
request = layui.request,
|
|
53
|
+
laydate = layui.laydate;
|
|
54
|
+
|
|
55
|
+
form.render();
|
|
56
|
+
|
|
57
|
+
laydate.render({
|
|
58
|
+
elem: '#attendance_datetime',
|
|
59
|
+
type: 'datetime',
|
|
60
|
+
fullPanel: true
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
//监听提交
|
|
64
|
+
form.on('submit(attendance_reset)', function (data) {
|
|
65
|
+
request.authPut("missions/assessments/"+ <%= @attendance.id %> + "/update_attendance", data.field, function (res) {
|
|
66
|
+
if (res.success === false) {
|
|
67
|
+
layer.alert(res.msg)
|
|
68
|
+
} else {
|
|
69
|
+
layer.closeAll(); //关闭所有层
|
|
70
|
+
table.reload('attendance_table')
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
return false;
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
</script>
|
|
77
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<div style="padding-left: 135px; padding-top: 50px">
|
|
2
|
+
<button type="button" class="layui-btn layui-btn-lg layui-btn-radius layui-btn-normal" id="import_attendance"><i class="layui-icon"></i>选择文件</button>
|
|
3
|
+
</div>
|
|
4
|
+
<script>
|
|
5
|
+
layui.use(['form', 'table', 'upload', 'layer', 'laytpl', 'request', 'selectInput'], function () {
|
|
6
|
+
var form = layui.form,
|
|
7
|
+
layer = layui.layer,
|
|
8
|
+
table = layui.table,
|
|
9
|
+
upload = layui.upload,
|
|
10
|
+
$ = layui.$;
|
|
11
|
+
selectInput = layui.selectInput;
|
|
12
|
+
|
|
13
|
+
form.render();
|
|
14
|
+
|
|
15
|
+
//指定允许上传的文件类型
|
|
16
|
+
upload.render({
|
|
17
|
+
elem: '#import_attendance',
|
|
18
|
+
url: '/missions/assessments/import_attendances', //此处配置你自己的上传接口即可
|
|
19
|
+
accept: 'file', //普通文件
|
|
20
|
+
headers: {
|
|
21
|
+
'X-CSRF-Token': $('meta[name=csrf-token]').attr('content')
|
|
22
|
+
},
|
|
23
|
+
before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
|
|
24
|
+
layer.load(); //上传loading
|
|
25
|
+
},
|
|
26
|
+
done: function(res){
|
|
27
|
+
layer.msg('导入成功');
|
|
28
|
+
table.reload('attendance_table');
|
|
29
|
+
layer.close(parent.import_index);
|
|
30
|
+
layer.closeAll('loading'); //关闭loading
|
|
31
|
+
},
|
|
32
|
+
error: function(res){
|
|
33
|
+
layer.closeAll('loading'); //关闭loading
|
|
34
|
+
layer.msg(res.responseJSON.msg);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
</script>
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
<% if can?(:show, EducodeSales::AssessmentsSetting) %>
|
|
7
7
|
<li data="assessments" > 考核指标设置</li>
|
|
8
8
|
<%end %>
|
|
9
|
+
<li class="">签到记录</li>
|
|
9
10
|
</ul>
|
|
10
11
|
<!--<div class="layuimini-main min-height-table"></div>-->
|
|
11
12
|
<div class="layui-tab-content">
|
|
@@ -31,17 +32,26 @@
|
|
|
31
32
|
</div>
|
|
32
33
|
<%end %>
|
|
33
34
|
<%end %>
|
|
35
|
+
|
|
36
|
+
<div class="layui-tab-item">
|
|
37
|
+
<div id="page_1"></div>
|
|
34
38
|
</div>
|
|
39
|
+
|
|
35
40
|
</div>
|
|
41
|
+
</div>
|
|
36
42
|
|
|
37
43
|
<script>
|
|
38
44
|
layui.use(['element', 'table', 'jquery','laydate'], function () {
|
|
39
45
|
var $ = layui.jquery,
|
|
40
46
|
table = layui.table,
|
|
41
|
-
laydate = layui.laydate
|
|
47
|
+
laydate = layui.laydate,
|
|
42
48
|
element = layui.element;
|
|
43
49
|
|
|
44
|
-
|
|
50
|
+
element.render();
|
|
51
|
+
element.on('tab(sale_tab)', function (data) {
|
|
52
|
+
if (data.index === 2 && $("#tab_2").length === 0) {
|
|
53
|
+
loadPage('/missions/assessments/attendances')
|
|
54
|
+
}
|
|
45
55
|
// var status = $(this).attr('data')
|
|
46
56
|
// switch (status) {
|
|
47
57
|
// case 'progress':
|
|
@@ -67,6 +77,18 @@
|
|
|
67
77
|
// });
|
|
68
78
|
// return false;
|
|
69
79
|
// });
|
|
80
|
+
|
|
81
|
+
function loadPage(url) {
|
|
82
|
+
var layer_index = layer.load(0, {shade: [0.1, '#fff']});
|
|
83
|
+
Rails.ajax({
|
|
84
|
+
url: url,
|
|
85
|
+
type: 'GET',
|
|
86
|
+
dataType: "script",
|
|
87
|
+
success: function () {
|
|
88
|
+
layer.close(layer_index);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
70
92
|
})
|
|
71
93
|
</script>
|
|
72
94
|
|
|
@@ -24,7 +24,10 @@
|
|
|
24
24
|
<a href="javascript:;" class="add_key" data-is_latest="<%= f.id == @latest&.id %>" data-id=<%= f.id %> data-flag="<%= f.created_at.present? ? (Time.now - f.created_at).to_f/3600 < 24 : false %>">添加关键人</a>
|
|
25
25
|
<% end %>
|
|
26
26
|
<br/>
|
|
27
|
-
评论: <span><%= f.comment %></span> <a href="javascript:;" class="add_comment" data-id=<%= f.id %>>评论</a>
|
|
27
|
+
评论: <span><%= f.comment %></span> <a href="javascript:;" class="add_comment" data-id=<%= f.id %>>评论</a> <a href="javascript:;" class="uploadFile" data-id=<%= f.id %>>附件上传</a>
|
|
28
|
+
<br/>
|
|
29
|
+
<!-- <span class="layui-badge layui-bg-green"></span> -->
|
|
30
|
+
<button type="button" class="layui-btn layui-btn-xs layui-btn-primary add-tag"><i class="layui-icon layui-icon-addition"></i>标签设置</button>
|
|
28
31
|
</p>
|
|
29
32
|
</div>
|
|
30
33
|
</li>
|
|
@@ -99,8 +102,28 @@
|
|
|
99
102
|
layer.close(index)
|
|
100
103
|
},
|
|
101
104
|
});
|
|
102
|
-
|
|
103
105
|
})
|
|
106
|
+
|
|
107
|
+
$(".uploadFile").on("click", function(e) {
|
|
108
|
+
var data = e.currentTarget.dataset;
|
|
109
|
+
follow_up_id = parent.id
|
|
110
|
+
var content = miniPage.getHrefContent('/missions/follow_ups/' + follow_up_id + '/file');
|
|
111
|
+
var openWH = miniPage.getOpenWidthHeight();
|
|
112
|
+
lsindex = layer.open({
|
|
113
|
+
title: '附件上传',
|
|
114
|
+
type: 1,
|
|
115
|
+
shade: 0.2,
|
|
116
|
+
maxmin: true,
|
|
117
|
+
shadeClose: true,
|
|
118
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
|
119
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
|
120
|
+
content: content
|
|
121
|
+
});
|
|
122
|
+
$(window).on("resize", function () {
|
|
123
|
+
layer.full(sindex);
|
|
124
|
+
});
|
|
125
|
+
})
|
|
126
|
+
|
|
104
127
|
});
|
|
105
128
|
function demo(){
|
|
106
129
|
layer.closeAll()
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
<%= Gon::Base.render_data %>
|
|
2
|
+
<script type="text/html" id="toolbarDemo">
|
|
3
|
+
<div class="layui-btn-container">
|
|
4
|
+
<span class="table-label">附件信息</span>
|
|
5
|
+
<% if can? :upload_file, EducodeSales::Business %>
|
|
6
|
+
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="upload_file">上传文件</button>
|
|
7
|
+
<% end %>
|
|
8
|
+
</div>
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<table class="layui-hide" id="file" lay-filter="file"></table>
|
|
12
|
+
|
|
13
|
+
<script type="text/html" id="currentTableBar_file">
|
|
14
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="preview">预览</a>
|
|
15
|
+
<% if can? :download_file, EducodeSales::Business %>
|
|
16
|
+
<a href="/missions/upload_files/download?id={{d.id}}" class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="download">下载</a>
|
|
17
|
+
<% end %>
|
|
18
|
+
<% if can? :delete_file, EducodeSales::Business %>
|
|
19
|
+
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
|
|
20
|
+
<% end %>
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
<script>
|
|
25
|
+
layui.use(['form', 'table', 'miniPage', 'element', 'request'], function () {
|
|
26
|
+
var $ = layui.jquery,
|
|
27
|
+
form = layui.form,
|
|
28
|
+
table = layui.table,
|
|
29
|
+
request = layui.request,
|
|
30
|
+
upload = layui.upload;
|
|
31
|
+
miniPage = layui.miniPage;
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
var follow_up_id = parent.follow_up_id
|
|
35
|
+
table.render({
|
|
36
|
+
elem: '#file',
|
|
37
|
+
url: '/missions/upload_files?follow_up_id='+follow_up_id,
|
|
38
|
+
toolbar: '#toolbarDemo',
|
|
39
|
+
defaultToolbar: [],
|
|
40
|
+
cols: [
|
|
41
|
+
[
|
|
42
|
+
{
|
|
43
|
+
field: 'id',
|
|
44
|
+
width: 80,
|
|
45
|
+
title:'序号',type: 'numbers',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
field: 'name',
|
|
49
|
+
title: '文件名'
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
field: 'size',
|
|
53
|
+
width: 100,
|
|
54
|
+
title: '文件大小',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
field: 'created_on',
|
|
58
|
+
width: 200,
|
|
59
|
+
title: '上传时间',
|
|
60
|
+
sort: true
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
field: 'upload_person',
|
|
64
|
+
width: 80,
|
|
65
|
+
totalRow:true,
|
|
66
|
+
title: '上传人',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
title: '操作',
|
|
70
|
+
width: 200,
|
|
71
|
+
toolbar: '#currentTableBar_file',
|
|
72
|
+
align: "center"
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
],
|
|
76
|
+
limit: 20,
|
|
77
|
+
limits: [10,15,20,30,40,50,60,70,80,90],
|
|
78
|
+
page: true
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
var sort = {};
|
|
83
|
+
table.on('sort(file)', function (obj) {
|
|
84
|
+
sort.field = obj.field;
|
|
85
|
+
sort.order = obj.type;
|
|
86
|
+
table.reload('file', {
|
|
87
|
+
initSort: obj,
|
|
88
|
+
where: {
|
|
89
|
+
sort: sort
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
table.on('toolbar(file)', function (obj) {
|
|
96
|
+
if (obj.event === 'upload_file') { //
|
|
97
|
+
follow_up_id = parent.follow_up_id
|
|
98
|
+
var content = miniPage.getHrefContent('/missions/follow_ups/' + parent.follow_up_id +'/upload_file');
|
|
99
|
+
var openWH = miniPage.getOpenWidthHeight();
|
|
100
|
+
import_index = layer.open({
|
|
101
|
+
title: '上传文件',
|
|
102
|
+
type: 1,
|
|
103
|
+
shade: 0.2,
|
|
104
|
+
shadeClose: true,
|
|
105
|
+
area: ['200px', '100px'],
|
|
106
|
+
offset: 'auto',
|
|
107
|
+
closeBtn: 0,
|
|
108
|
+
content: content,
|
|
109
|
+
});
|
|
110
|
+
$(window).on("resize", function () {
|
|
111
|
+
layer.full(index);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
table.on('tool(file)', function (obj) {
|
|
118
|
+
var data = obj.data;
|
|
119
|
+
var id = data.id
|
|
120
|
+
name = data.disk_filename
|
|
121
|
+
folder = gon.folder
|
|
122
|
+
if (obj.event === 'preview') {
|
|
123
|
+
if (data.content_type.split("/")[0] === "image"){
|
|
124
|
+
layer.photos({
|
|
125
|
+
photos: { "data": [{"src": '/files/educode_sales/' + name}] }
|
|
126
|
+
,anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机
|
|
127
|
+
});
|
|
128
|
+
}else if (data.content_type.split("/")[1] === "pdf"){
|
|
129
|
+
var pdf = '/files/educode_sales/' + name;
|
|
130
|
+
var openWH = miniPage.getOpenWidthHeight();
|
|
131
|
+
layer.open({
|
|
132
|
+
title: data.name,
|
|
133
|
+
type: 2,
|
|
134
|
+
area: ['1000px', '750px'],
|
|
135
|
+
fixed: false, //不固定
|
|
136
|
+
maxmin: true,
|
|
137
|
+
content: pdf
|
|
138
|
+
});
|
|
139
|
+
}else{
|
|
140
|
+
layer.msg("附件不支持预览,请下载查看!")
|
|
141
|
+
}
|
|
142
|
+
return false;
|
|
143
|
+
}else if (obj.event === 'delete') {
|
|
144
|
+
layer.confirm('确定删除' + data.name, function (index) {
|
|
145
|
+
request.delete('missions/upload_files/' + data.id + '?disk_filename=' + data.disk_filename, {}, function (res) {
|
|
146
|
+
layer.close(index);
|
|
147
|
+
table.reload("file")
|
|
148
|
+
})
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
});
|
|
154
|
+
</script>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<div style="padding-left: 50px">
|
|
2
|
+
<button type="button" class="layui-btn" id="get_file"><i class="layui-icon"></i>选择文件</button>
|
|
3
|
+
</div>
|
|
4
|
+
<script>
|
|
5
|
+
layui.use(['form', 'table', 'upload', 'layer', 'laytpl', 'request', 'selectInput'], function () {
|
|
6
|
+
var form = layui.form,
|
|
7
|
+
layer = layui.layer,
|
|
8
|
+
table = layui.table,
|
|
9
|
+
laytpl = layui.laytpl,
|
|
10
|
+
upload = layui.upload,
|
|
11
|
+
request = layui.request,
|
|
12
|
+
$ = layui.$;
|
|
13
|
+
selectInput = layui.selectInput;
|
|
14
|
+
|
|
15
|
+
form.render();
|
|
16
|
+
|
|
17
|
+
//指定允许上传的文件类型
|
|
18
|
+
var follow_up_id = parent.follow_up_id;
|
|
19
|
+
var renderObj = upload.render({
|
|
20
|
+
elem: '#get_file'
|
|
21
|
+
,url: '/missions/upload_files?follow_up_id='+follow_up_id //此处配置你自己的上传接口即可
|
|
22
|
+
,accept: 'file' //普通文件
|
|
23
|
+
,headers: {
|
|
24
|
+
'X-CSRF-Token': $('meta[name=csrf-token]').attr('content')
|
|
25
|
+
}
|
|
26
|
+
,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
|
|
27
|
+
layer.load(); //上传loading
|
|
28
|
+
}
|
|
29
|
+
,done: function(res){
|
|
30
|
+
layer.msg('导入成功');
|
|
31
|
+
table.reload('file');
|
|
32
|
+
layer.closeAll('loading'); //关闭loading
|
|
33
|
+
layer.close(parent.import_index)
|
|
34
|
+
}
|
|
35
|
+
,error: function(index, upload){
|
|
36
|
+
table.reload('file');
|
|
37
|
+
layer.closeAll('loading'); //关闭loading
|
|
38
|
+
layer.alert('导入失败,请检查文件格式')
|
|
39
|
+
layer.close(parent.import_index)
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
</script>
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
<%= Gon::Base.render_data %>
|
|
1
2
|
<div class="layuimini-main" style="height: 100%;">
|
|
2
3
|
<div class="layui-form layuimini-form" lay-filter="common_edit">
|
|
3
4
|
<fieldset class="table-search-fieldset">
|
|
4
5
|
<legend>添加课程方向</legend>
|
|
5
6
|
<div class="layui-form-item">
|
|
6
7
|
<label class="layui-form-label required" >课程名称</label>
|
|
7
|
-
<div class="layui-input-
|
|
8
|
-
<
|
|
8
|
+
<div class="layui-input-inline">
|
|
9
|
+
<div id="subject_name" style="width: 1000px"></div>
|
|
9
10
|
</div>
|
|
10
11
|
</div>
|
|
11
12
|
<div class="layui-form-item">
|
|
12
13
|
<label class="layui-form-label required" >教学角色</label>
|
|
13
|
-
<div class="layui-input-block">
|
|
14
|
+
<div class="layui-input-block" style="width: 1000px">
|
|
14
15
|
<input type="text" name="role_name" autocomplete="off" class="layui-input" placeholder="请输入" required lay-verify="required">
|
|
15
16
|
</div>
|
|
16
17
|
</div>
|
|
@@ -42,12 +43,28 @@
|
|
|
42
43
|
|
|
43
44
|
form.render();
|
|
44
45
|
|
|
46
|
+
//课程名称复选框
|
|
47
|
+
if (document.getElementById("subject_name")) {
|
|
48
|
+
var subject_list = xmSelect.render({
|
|
49
|
+
el: '#subject_name',
|
|
50
|
+
data: gon.subject_names,
|
|
51
|
+
filterable: true
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
|
|
45
55
|
// 当前弹出层,防止ID被覆盖
|
|
46
56
|
var parentIndex = layer.index;
|
|
47
57
|
|
|
48
58
|
|
|
49
59
|
//监听提交
|
|
50
60
|
form.on('submit(add_course)', function (data) {
|
|
61
|
+
var subject_names = [];
|
|
62
|
+
if (document.getElementById("subject_name")) {
|
|
63
|
+
subject_list.getValue().forEach(function (d) {
|
|
64
|
+
subject_names.push(d.value);
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
data.field['select_subject_names'] = subject_names.join(",");
|
|
51
68
|
request.authPost('missions/teachers/'+parent.teacher_id +'/create_course', data.field, function (res) {
|
|
52
69
|
if (res.success == false) {
|
|
53
70
|
layer.alert(res.msg)
|
|
@@ -55,11 +72,11 @@
|
|
|
55
72
|
table.reload('teachers_table');
|
|
56
73
|
table.reload('coursesTable');
|
|
57
74
|
form.val('common_edit', {
|
|
58
|
-
'
|
|
75
|
+
'subject_name': '',
|
|
59
76
|
'role_name':''
|
|
60
77
|
})
|
|
61
78
|
}
|
|
62
|
-
})
|
|
79
|
+
});
|
|
63
80
|
return false;
|
|
64
81
|
});
|
|
65
82
|
|
data/config/routes.rb
CHANGED
|
@@ -153,6 +153,8 @@ EducodeSales::Engine.routes.draw do
|
|
|
153
153
|
delete :delete_money
|
|
154
154
|
put :update_advise
|
|
155
155
|
put :comment
|
|
156
|
+
get :file
|
|
157
|
+
get :upload_file
|
|
156
158
|
end
|
|
157
159
|
end
|
|
158
160
|
|
|
@@ -266,6 +268,14 @@ EducodeSales::Engine.routes.draw do
|
|
|
266
268
|
get :progress # 考核完成情况
|
|
267
269
|
post :get_export_data # 导出数据
|
|
268
270
|
get :finished
|
|
271
|
+
get :attendances
|
|
272
|
+
get :import
|
|
273
|
+
post :import_attendances
|
|
274
|
+
end
|
|
275
|
+
member do
|
|
276
|
+
get :edit_attendance
|
|
277
|
+
put :update_attendance
|
|
278
|
+
delete :delete_attendance
|
|
269
279
|
end
|
|
270
280
|
end
|
|
271
281
|
|
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.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- anke1460
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-06-
|
|
11
|
+
date: 2023-06-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -204,6 +204,7 @@ files:
|
|
|
204
204
|
- app/models/educode_sales/assessments_setting.rb
|
|
205
205
|
- app/models/educode_sales/assign_follow_up.rb
|
|
206
206
|
- app/models/educode_sales/assign_staff.rb
|
|
207
|
+
- app/models/educode_sales/attendance.rb
|
|
207
208
|
- app/models/educode_sales/business.rb
|
|
208
209
|
- app/models/educode_sales/business_clazz_change.rb
|
|
209
210
|
- app/models/educode_sales/business_export_record.rb
|
|
@@ -276,12 +277,17 @@ files:
|
|
|
276
277
|
- app/views/educode_sales/activities/show_schools.json.jbuilder
|
|
277
278
|
- app/views/educode_sales/activities/show_teachers.html.erb
|
|
278
279
|
- app/views/educode_sales/activities/upload_file.html.erb
|
|
280
|
+
- app/views/educode_sales/assessments/_attendances.html.erb
|
|
279
281
|
- app/views/educode_sales/assessments/_finished.html.erb
|
|
280
282
|
- app/views/educode_sales/assessments/_progress.html.erb
|
|
281
283
|
- app/views/educode_sales/assessments/_setup.html.erb
|
|
284
|
+
- app/views/educode_sales/assessments/attendances.js.erb
|
|
285
|
+
- app/views/educode_sales/assessments/attendances.json.jbuilder
|
|
282
286
|
- app/views/educode_sales/assessments/edit.html.erb
|
|
287
|
+
- app/views/educode_sales/assessments/edit_attendance.html.erb
|
|
283
288
|
- app/views/educode_sales/assessments/finished.json.jbuilder
|
|
284
289
|
- app/views/educode_sales/assessments/get_export_data.json.jbuilder
|
|
290
|
+
- app/views/educode_sales/assessments/import.html.erb
|
|
285
291
|
- app/views/educode_sales/assessments/index.html.erb
|
|
286
292
|
- app/views/educode_sales/assessments/index.json.jbuilder
|
|
287
293
|
- app/views/educode_sales/assessments/new.html.erb
|
|
@@ -356,9 +362,11 @@ files:
|
|
|
356
362
|
- app/views/educode_sales/customers/show_follow.json.jbuilder
|
|
357
363
|
- app/views/educode_sales/customers/show_follow_record.html.erb
|
|
358
364
|
- app/views/educode_sales/customers/show_majors.html.erb
|
|
365
|
+
- app/views/educode_sales/follow_ups/file.html.erb
|
|
359
366
|
- app/views/educode_sales/follow_ups/index.json.jbuilder
|
|
360
367
|
- app/views/educode_sales/follow_ups/money_plans.json.jbuilder
|
|
361
368
|
- app/views/educode_sales/follow_ups/teachers.json.jbuilder
|
|
369
|
+
- app/views/educode_sales/follow_ups/upload_file.html.erb
|
|
362
370
|
- app/views/educode_sales/home/index.html.erb
|
|
363
371
|
- app/views/educode_sales/home/no_permission.html.erb
|
|
364
372
|
- app/views/educode_sales/home/sales_place.json.jbuilder
|