educode_sales 0.9.67 → 0.9.68
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/activities_controller.rb +52 -38
- data/app/controllers/educode_sales/businesses_controller.rb +1 -1
- data/app/controllers/educode_sales/operation_plans_controller.rb +8 -4
- data/app/controllers/educode_sales/plans_controller.rb +173 -11
- data/app/controllers/educode_sales/recycles_controller.rb +11 -1
- data/app/controllers/educode_sales/teachers_controller.rb +4 -4
- data/app/controllers/educode_sales/upload_files_controller.rb +9 -2
- data/app/models/educode_sales/activity.rb +4 -0
- data/app/models/educode_sales/assessments_setting.rb +2 -2
- data/app/models/educode_sales/business_info.rb +9 -0
- data/app/models/educode_sales/sale_plan.rb +3 -1
- data/app/models/educode_sales/staff.rb +2 -0
- data/app/views/educode_sales/activities/_follows.html.erb +50 -36
- data/app/views/educode_sales/activities/_index.html.erb +82 -9
- data/app/views/educode_sales/activities/edit.html.erb +25 -68
- data/app/views/educode_sales/activities/files.html.erb +157 -0
- data/app/views/educode_sales/activities/files.json.jbuilder +13 -0
- data/app/views/educode_sales/activities/follow_ups.json.jbuilder +1 -1
- data/app/views/educode_sales/activities/index.json.jbuilder +2 -2
- data/app/views/educode_sales/activities/new.html.erb +21 -60
- data/app/views/educode_sales/activities/upload_file.html.erb +43 -0
- data/app/views/educode_sales/businesses/get_export_data.json.jbuilder +3 -0
- data/app/views/educode_sales/businesses/new.html.erb +1 -1
- data/app/views/educode_sales/plans/_yearPlan.html.erb +234 -0
- data/app/views/educode_sales/plans/business_infos.json.jbuilder +23 -0
- data/app/views/educode_sales/plans/edit_bussiness_info.html.erb +79 -0
- data/app/views/educode_sales/plans/edit_bussiness_info_extra.html.erb +260 -0
- data/app/views/educode_sales/plans/edit_year_plan.html.erb +237 -0
- data/app/views/educode_sales/plans/index.html.erb +8 -0
- data/app/views/educode_sales/plans/new_year.html.erb +204 -0
- data/app/views/educode_sales/plans/plan_business_infos.json.jbuilder +42 -0
- data/app/views/educode_sales/plans/years_plan.json.jbuilder +17 -0
- data/app/views/educode_sales/recycles/_monthly.html.erb +1 -1
- data/app/views/educode_sales/recycles/_yearPlan.html.erb +118 -0
- data/app/views/educode_sales/recycles/index.html.erb +26 -22
- data/app/views/educode_sales/recycles/monthPlan.json.jbuilder +0 -1
- data/app/views/educode_sales/recycles/yearPlan.json.jbuilder +14 -0
- data/config/routes.rb +19 -0
- data/db/migrate/20230330141213_create_educode_sales_activity_follow_ups.rb +6 -0
- data/db/migrate/20230405074036_add_year_to_sale_plans.rb +38 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +18 -3
@@ -6,7 +6,7 @@ json.data do
|
|
6
6
|
json.info_id d.info_id
|
7
7
|
json.clazz_id d.activity.clazz_id
|
8
8
|
json.staff d.activity.sales&.user&.real_name || d.activity.staff&.user&.real_name
|
9
|
-
json.staff_manage d.activity.manages.map { |d| d.
|
9
|
+
json.staff_manage d.activity.manages.map { |d| d.staff.user.real_name}.uniq.join("、")
|
10
10
|
json.follow_up d.staff.user.real_name
|
11
11
|
json.created_at d.created_at.to_s
|
12
12
|
json.state_id d.activity.state_id
|
@@ -14,8 +14,7 @@ json.data do
|
|
14
14
|
json.clazz_id d.clazz_id
|
15
15
|
json.staff d.sales&.user&.real_name || d.staff&.user&.real_name
|
16
16
|
json.staff_manage d.manages.map { |d| d.staff.user.real_name}.uniq.join("、")
|
17
|
-
json.staff_assist d.assists.
|
18
|
-
json.expert d.experts.pluck(:name).join("、")
|
17
|
+
json.staff_assist d.assists.pluck(:name).join("、")
|
19
18
|
json.invitations d.invitations.pluck(:name).join("、")
|
20
19
|
json.sponsor d.sponsor
|
21
20
|
json.linkman d.linkman
|
@@ -24,6 +23,7 @@ json.data do
|
|
24
23
|
json.address d.address
|
25
24
|
json.meeting_form d.meeting_form
|
26
25
|
json.state_id d.state_id
|
26
|
+
json.advise d.last_follow_up&.advise || ''
|
27
27
|
|
28
28
|
json.schools_count EducodeSales::ActivityTeacher.joins(teacher: :department).where(activity_id: d.id).select("distinct(school_id)").count
|
29
29
|
schools_count += EducodeSales::ActivityTeacher.joins(teacher: :department).where(activity_id: d.id).select("distinct(school_id)").count
|
@@ -4,79 +4,73 @@
|
|
4
4
|
<div class="layui-form-item">
|
5
5
|
<div class="layui-inline">
|
6
6
|
<label class="layui-form-label required">活动名称</label>
|
7
|
-
<div class="layui-input-block">
|
7
|
+
<div class="layui-input-block" style="width: 200px;">
|
8
8
|
<input type="text" name="name" required lay-verify="required" placeholder="请输入" class="layui-input" id="inputFocus">
|
9
9
|
</div>
|
10
10
|
</div>
|
11
11
|
<div class="layui-inline">
|
12
12
|
<label class="layui-form-label required">活动类型</label>
|
13
|
-
<div class="layui-input-block">
|
13
|
+
<div class="layui-input-block" style="width: 200px;">
|
14
14
|
<%= select_tag "clazz_id", options_for_select(@clazz), { 'lay-filter': 'clazz_id', class: 'required' } %>
|
15
15
|
</div>
|
16
16
|
</div>
|
17
17
|
<div class="layui-inline">
|
18
18
|
<label class="layui-form-label required">活动状态</label>
|
19
|
-
<div class="layui-input-block">
|
19
|
+
<div class="layui-input-block" style="width: 200px;">
|
20
20
|
<%= select_tag "state_id", options_for_select(EducodeSales::Activity.state_ids.keys), { 'lay-filter': 'clazz_id', class: 'required' } %>
|
21
21
|
</div>
|
22
22
|
</div>
|
23
23
|
<div class="layui-inline">
|
24
24
|
<label class="layui-form-label required">活动时间</label>
|
25
|
-
<div class="layui-input-block">
|
25
|
+
<div class="layui-input-block" style="width: 200px;">
|
26
26
|
<input type="text" name="start_at" autocomplete="off" required lay-verify="required" class="layui-input" id="new_time" placeholder="请选择时间">
|
27
27
|
</div>
|
28
28
|
</div>
|
29
29
|
<div class="layui-inline">
|
30
30
|
<label class="layui-form-label required">活动天数</label>
|
31
|
-
<div class="layui-input-block">
|
31
|
+
<div class="layui-input-block" style="width: 200px;">
|
32
32
|
<input type="text" name="days" required lay-verify="required" class="layui-input">
|
33
33
|
</div>
|
34
34
|
</div>
|
35
35
|
<div class="layui-inline">
|
36
36
|
<label class="layui-form-label">生态经理</label>
|
37
37
|
<div class="layui-input-block">
|
38
|
-
<div id="staff_manage_list" style="width:
|
39
|
-
</div>
|
40
|
-
</div>
|
41
|
-
<div class="layui-inline">
|
42
|
-
<label class="layui-form-label">协助人员</label>
|
43
|
-
<div class="layui-input-block">
|
44
|
-
<div id="staff_assist_list" style="width: 193px;"></div>
|
38
|
+
<div id="staff_manage_list" style="width: 200px;"></div>
|
45
39
|
</div>
|
46
40
|
</div>
|
47
41
|
<div class="layui-inline">
|
48
42
|
<label class="layui-form-label">主办方</label>
|
49
|
-
<div class="layui-input-block">
|
43
|
+
<div class="layui-input-block" style="width: 200px;">
|
50
44
|
<input type="text" name="sponsor" class="layui-input">
|
51
45
|
</div>
|
52
46
|
</div>
|
53
47
|
<div class="layui-inline">
|
54
48
|
<label class="layui-form-label">联系人</label>
|
55
|
-
<div class="layui-input-block">
|
49
|
+
<div class="layui-input-block" style="width: 200px;">
|
56
50
|
<input type="text" name="linkman" class="layui-input">
|
57
51
|
</div>
|
58
52
|
</div>
|
59
53
|
<div class="layui-inline">
|
60
54
|
<label class="layui-form-label">联系电话</label>
|
61
|
-
<div class="layui-input-block">
|
55
|
+
<div class="layui-input-block" style="width: 200px;">
|
62
56
|
<input type="text" name="phone" class="layui-input">
|
63
57
|
</div>
|
64
58
|
</div>
|
65
59
|
<div class="layui-inline">
|
66
60
|
<label class="layui-form-label">规模</label>
|
67
|
-
<div class="layui-input-block">
|
61
|
+
<div class="layui-input-block" style="width: 200px;">
|
68
62
|
<input type="text" name="scale" class="layui-input">
|
69
63
|
</div>
|
70
64
|
</div>
|
71
65
|
<div class="layui-inline">
|
72
66
|
<label class="layui-form-label">会议地点</label>
|
73
|
-
<div class="layui-input-block">
|
67
|
+
<div class="layui-input-block" style="width: 200px;">
|
74
68
|
<input type="text" name="address" class="layui-input">
|
75
69
|
</div>
|
76
70
|
</div>
|
77
71
|
<div class="layui-inline">
|
78
72
|
<label class="layui-form-label">会议形式</label>
|
79
|
-
<div class="layui-input-block">
|
73
|
+
<div class="layui-input-block" style="width: 200px;">
|
80
74
|
<input type="text" name="meeting_form" class="layui-input">
|
81
75
|
</div>
|
82
76
|
</div>
|
@@ -87,22 +81,13 @@
|
|
87
81
|
</div>
|
88
82
|
</div>
|
89
83
|
<div class="layui-inline">
|
90
|
-
<label class="layui-form-label"
|
84
|
+
<label class="layui-form-label">协助人员</label>
|
91
85
|
<div class="layui-input-block">
|
92
|
-
<div id="
|
86
|
+
<div id="staff_assist_list" style="width: 600px;"></div>
|
93
87
|
</div>
|
94
88
|
</div>
|
95
89
|
</div>
|
96
90
|
<div class="layui-form-item">
|
97
|
-
<div class="layui-inline">
|
98
|
-
<label class="layui-form-label">上传附件</label>
|
99
|
-
<div class="layui-input-block">
|
100
|
-
<%= hidden_field_tag 'attachment_id' %>
|
101
|
-
<span id="attachment">
|
102
|
-
</span>
|
103
|
-
<button type="button" class="layui-btn" id="upload_file">上传文件</button>
|
104
|
-
</div>
|
105
|
-
</div>
|
106
91
|
<div class="layui-inline" style="padding-left: 30px">
|
107
92
|
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="data-reset-btn">提交 </button>
|
108
93
|
</div>
|
@@ -136,16 +121,10 @@
|
|
136
121
|
data: gon.staff_manage,
|
137
122
|
filterable: true,
|
138
123
|
})
|
139
|
-
|
140
124
|
var staff_assist = xmSelect.render({
|
141
|
-
el: '#staff_assist_list',
|
142
|
-
data: gon.staff_manage,
|
143
|
-
filterable: true,
|
144
|
-
})
|
145
|
-
var expert = xmSelect.render({
|
146
|
-
el: '#expert_list',
|
125
|
+
el: '#staff_assist_list',
|
147
126
|
filterable: true,
|
148
|
-
name: '
|
127
|
+
name: 'staff_assist_id',
|
149
128
|
remoteSearch: true,
|
150
129
|
remoteMethod: function(val, cb, show){
|
151
130
|
if(!val){
|
@@ -184,23 +163,6 @@
|
|
184
163
|
data: []
|
185
164
|
})
|
186
165
|
|
187
|
-
|
188
|
-
upload.render({
|
189
|
-
elem: '#upload_file',
|
190
|
-
url: '/missions/upload_files',
|
191
|
-
auto: true,
|
192
|
-
accept: 'file',
|
193
|
-
done: function (res) {
|
194
|
-
layer.msg('上传成功');
|
195
|
-
$("#attachment_id").val(res.attachment_id);
|
196
|
-
document.getElementById("attachment").innerHTML = '<a target="_blank" href="' + res.url+ '">' + res.filename + '</a><a href="javascript:;" style="color:red;" id="delete">删除</a>';
|
197
|
-
}
|
198
|
-
});
|
199
|
-
|
200
|
-
$(body).on("click", "#delete", function() {
|
201
|
-
document.getElementById("attachment").innerHTML = "";
|
202
|
-
$("#attachment_id").val('');
|
203
|
-
})
|
204
166
|
form.render();
|
205
167
|
|
206
168
|
// 当前弹出层,防止ID被覆盖
|
@@ -222,13 +184,12 @@
|
|
222
184
|
//监听提交
|
223
185
|
form.on('submit(data-reset-btn)', function (data) {
|
224
186
|
data.field.staff_manage_id = staff_manage.getValue('value');
|
225
|
-
|
226
|
-
|
227
|
-
expert.getValue().forEach(function(d) {
|
187
|
+
var staff_assist_id = [];
|
188
|
+
staff_assist.getValue().forEach(function(d) {
|
228
189
|
if (typeof(d.value) == 'number') {
|
229
|
-
|
190
|
+
staff_assist_id.push([d.value, d.name]);
|
230
191
|
} else {
|
231
|
-
|
192
|
+
staff_assist_id.push(['', d.name]);
|
232
193
|
|
233
194
|
}
|
234
195
|
})
|
@@ -243,7 +204,7 @@
|
|
243
204
|
}
|
244
205
|
})
|
245
206
|
data.field.invitation_ids = invitation_ids;
|
246
|
-
data.field.
|
207
|
+
data.field.staff_assist_id = staff_assist_id;
|
247
208
|
request.authPost("missions/activities", data.field, function (res) {
|
248
209
|
if (res.success === false) {
|
249
210
|
layer.alert(res.msg)
|
@@ -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 activity_id = parent.activity_id
|
19
|
+
var renderObj = upload.render({
|
20
|
+
elem: '#get_file'
|
21
|
+
,url: '/missions/upload_files?activity_id='+activity_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>
|
@@ -24,6 +24,9 @@ json.data do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
json.created_at d.created_at.to_s
|
28
|
+
json.no_followup_days (d['latest_time'] ? DateTime.parse(Time.now.strftime("%Y-%m-%d")) - DateTime.parse(d['latest_time'].strftime("%Y-%m-%d")) : DateTime.parse(Time.now.strftime("%Y-%m-%d")) - DateTime.parse(d.created_at.strftime("%Y-%m-%d"))).to_i
|
29
|
+
|
27
30
|
json.staff_manages d.last_follow_up&.assign_follow_ups.present? ? (d.last_follow_up.assign_follow_ups.map{ |d| d.staff.user.real_name}.join("、")) : d.staff&.user&.real_name
|
28
31
|
json.divide_rate d.divide_rate
|
29
32
|
json.divide_money d.divide_amount
|
@@ -25,7 +25,7 @@
|
|
25
25
|
<div class="layui-inline" style="padding-top: 20px">
|
26
26
|
<label class="layui-form-label required">项目类型</label>
|
27
27
|
<div class="layui-input-inline">
|
28
|
-
<%= select_tag "clazz_id", options_for_select(@clazz), { 'lay-filter': 'clazz_id', class: 'required' } %>
|
28
|
+
<%= select_tag "clazz_id", options_for_select(@clazz), { 'lay-filter': 'clazz_id', class: 'required', include_blank: true } %>
|
29
29
|
</div>
|
30
30
|
</div>
|
31
31
|
<div class="layui-form-item m-t-20">
|
@@ -0,0 +1,234 @@
|
|
1
|
+
<script type="text/html" id="yearPlanToolbar">
|
2
|
+
<div class="layui-btn-container">
|
3
|
+
<span class="table-label">年计划列表</span>
|
4
|
+
<% if can? :create, EducodeSales::SalePlan %>
|
5
|
+
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add"> 添加年计划</button>
|
6
|
+
<% end %>
|
7
|
+
</div>
|
8
|
+
</script>
|
9
|
+
<!--搜索-->
|
10
|
+
<div class="layuimini-main min-height-table" id="year_table_wraper">
|
11
|
+
<form class="layui-form layui-form-pane" lay-filter="month_plan_search_form">
|
12
|
+
<div class="layui-form-item">
|
13
|
+
<div class="layui-inline">
|
14
|
+
<label class="layui-form-label">人员</label>
|
15
|
+
<div class="layui-input-inline large-select">
|
16
|
+
<%= select_tag "staff_id", options_for_select(@staffs), { id: 'month_plan_staff_id', include_blank: true} %>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
<div class="layui-inline">
|
20
|
+
<label class="layui-form-label">年度</label>
|
21
|
+
<div class="layui-input-inline">
|
22
|
+
<input type="text" class="layui-input" id="year_plan_date" autocomplete="off" name="year">
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
<div class="layui-inline">
|
26
|
+
<button type="reseet" class="layui-btn layui-btn-primary" lay-submit lay-filter="month_plan_reset_btn">重置
|
27
|
+
</button>
|
28
|
+
<button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="month_plan_seach_btn">检索
|
29
|
+
</button>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
</form>
|
33
|
+
<table class="layui-hide" id="yearPlanTable" lay-filter="yearPlanTable"></table>
|
34
|
+
</div>
|
35
|
+
<script type="text/html" id="currentYearTableBar">
|
36
|
+
<% if can? :update, EducodeSales::SalePlan %>
|
37
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
|
38
|
+
<% end %>
|
39
|
+
<% if can? :destroy, EducodeSales::SalePlan %>
|
40
|
+
<a class="layui-btn layui-btn-danger layui-btn-xs data-count-delete" lay-event="delete">删除</a>
|
41
|
+
<% end %>
|
42
|
+
</script>
|
43
|
+
|
44
|
+
<script>
|
45
|
+
layui.use(['form', 'table', 'miniPage', 'element', 'rate', 'laydate', 'request'], function () {
|
46
|
+
var $ = layui.jquery,
|
47
|
+
form = layui.form,
|
48
|
+
request = layui.request,
|
49
|
+
laydate = layui.laydate,
|
50
|
+
table = layui.table,
|
51
|
+
rate = layui.rate,
|
52
|
+
miniPage = layui.miniPage;
|
53
|
+
|
54
|
+
laydate.render({
|
55
|
+
elem: '#year_plan_date',
|
56
|
+
type: 'year'
|
57
|
+
});
|
58
|
+
table.render({
|
59
|
+
elem: '#yearPlanTable',
|
60
|
+
url: '/missions/plans/years_plan',
|
61
|
+
toolbar: '#yearPlanToolbar',
|
62
|
+
defaultToolbar: ['filter'],
|
63
|
+
initSort: {
|
64
|
+
field: 'updated_at',
|
65
|
+
type: 'desc'
|
66
|
+
},
|
67
|
+
cols: [
|
68
|
+
[
|
69
|
+
{
|
70
|
+
field: 'id',
|
71
|
+
width: 60,
|
72
|
+
title:'序号',
|
73
|
+
type: 'numbers',
|
74
|
+
fixed: 'left'
|
75
|
+
},
|
76
|
+
{
|
77
|
+
field: 'staff',
|
78
|
+
width: 120,
|
79
|
+
title: '姓名',
|
80
|
+
fixed: 'left'
|
81
|
+
},
|
82
|
+
{
|
83
|
+
field: 'clazz',
|
84
|
+
width: 160,
|
85
|
+
title: '目标类型',
|
86
|
+
},
|
87
|
+
{
|
88
|
+
field: 'year',
|
89
|
+
width: 120,
|
90
|
+
title: '年份'
|
91
|
+
},
|
92
|
+
{
|
93
|
+
field: 'target_money',
|
94
|
+
width: 120,
|
95
|
+
title: '目标额'
|
96
|
+
},
|
97
|
+
{
|
98
|
+
field: 'plan_money',
|
99
|
+
width: 120,
|
100
|
+
title: '计划额',
|
101
|
+
},
|
102
|
+
{
|
103
|
+
field: 'minimum_money',
|
104
|
+
width: 120,
|
105
|
+
title: '保底额',
|
106
|
+
},
|
107
|
+
{
|
108
|
+
field: 'finish_money',
|
109
|
+
width: 120,
|
110
|
+
title: '完成额',
|
111
|
+
},
|
112
|
+
{
|
113
|
+
field: 'finish_rate',
|
114
|
+
width: 120,
|
115
|
+
title: '完成率',
|
116
|
+
},
|
117
|
+
{
|
118
|
+
field: 'updated_at',
|
119
|
+
width: 170,
|
120
|
+
title: '更新时间',
|
121
|
+
sort: true,
|
122
|
+
},
|
123
|
+
{
|
124
|
+
title: '操作',
|
125
|
+
width: 200,
|
126
|
+
toolbar: '#currentYearTableBar',
|
127
|
+
align: "center",
|
128
|
+
fixed: 'right'
|
129
|
+
}
|
130
|
+
]
|
131
|
+
],
|
132
|
+
|
133
|
+
limit: 20,
|
134
|
+
limits: [10,15,20,30,40,50,60,70,80,90],
|
135
|
+
page: true,
|
136
|
+
});
|
137
|
+
|
138
|
+
var sort = {}, search = {};
|
139
|
+
table.on('sort(yearPlanTable)', function(obj) {
|
140
|
+
sort.field = obj.field;
|
141
|
+
sort.order = obj.type;
|
142
|
+
table.reload('yearPlanTable', {
|
143
|
+
initSort: obj,
|
144
|
+
where: {
|
145
|
+
sort: sort,
|
146
|
+
q: search
|
147
|
+
}
|
148
|
+
});
|
149
|
+
})
|
150
|
+
|
151
|
+
// 监听搜索操作
|
152
|
+
form.on('submit(month_plan_seach_btn)', function (data) {
|
153
|
+
search = data.field
|
154
|
+
table.reload('yearPlanTable', {
|
155
|
+
page: {
|
156
|
+
curr: 1
|
157
|
+
},
|
158
|
+
where: {q: search, sort : sort}
|
159
|
+
}, 'data');
|
160
|
+
|
161
|
+
return false;
|
162
|
+
});
|
163
|
+
|
164
|
+
form.on('submit(month_plan_reset_btn)', function(data){
|
165
|
+
var field = data.field;
|
166
|
+
form.val('month_plan_search_form', { staff_id: '', year: '', month: '', year: ''})
|
167
|
+
return false;
|
168
|
+
});
|
169
|
+
|
170
|
+
|
171
|
+
table.on('toolbar(yearPlanTable)', function (obj) {
|
172
|
+
if (obj.event === 'add') { // 监听添加操作
|
173
|
+
var content = miniPage.getHrefContent('/missions/plans/new_year');
|
174
|
+
var openWH = miniPage.getOpenWidthHeight();
|
175
|
+
from_sales = true
|
176
|
+
yindex = layer.open({
|
177
|
+
title: '添加年计划',
|
178
|
+
type: 1,
|
179
|
+
shade: 0.2,
|
180
|
+
maxmin: true,
|
181
|
+
shadeClose: true,
|
182
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
183
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
184
|
+
content: content,
|
185
|
+
success: function (layero, index) {
|
186
|
+
// 重新渲染弹层中的下拉选择框select
|
187
|
+
form.render('select');
|
188
|
+
}
|
189
|
+
});
|
190
|
+
$(window).on("resize", function () {
|
191
|
+
layer.full(sindex);
|
192
|
+
});
|
193
|
+
}
|
194
|
+
});
|
195
|
+
|
196
|
+
table.on('tool(yearPlanTable)', function (obj) {
|
197
|
+
var data = obj.data;
|
198
|
+
if (obj.event === 'edit') {
|
199
|
+
year = data.year;
|
200
|
+
content = miniPage.getHrefContent('/missions/plans/edit_year_plan?id=' + data.id);
|
201
|
+
openWH = miniPage.getOpenWidthHeight();
|
202
|
+
from_sales = true;
|
203
|
+
plan_id = data.id
|
204
|
+
sindex = layer.open({
|
205
|
+
title: '编辑年计划',
|
206
|
+
type: 1,
|
207
|
+
shade: 0.2,
|
208
|
+
maxmin: true,
|
209
|
+
shadeClose: true,
|
210
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
211
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
212
|
+
content: content
|
213
|
+
});
|
214
|
+
$(window).on("resize", function () {
|
215
|
+
layer.full(sindex);
|
216
|
+
});
|
217
|
+
return false;
|
218
|
+
} else if (obj.event === 'delete') {
|
219
|
+
layer.confirm('确定删除' + data.staff + data.clazz, function (index) {
|
220
|
+
request.delete('missions/plans/' + data.id, {year: data.year, clazz: data.clazz}, function (res) {
|
221
|
+
layer.close(index);
|
222
|
+
table.reload("yearPlanTable")
|
223
|
+
})
|
224
|
+
});
|
225
|
+
}
|
226
|
+
});
|
227
|
+
|
228
|
+
});
|
229
|
+
</script>
|
230
|
+
<style>
|
231
|
+
.layui-table-fixed .layui-table-body {
|
232
|
+
height: auto!important;
|
233
|
+
}
|
234
|
+
</style>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
json.data do
|
2
|
+
json.array! @data do |d|
|
3
|
+
json.id d.id
|
4
|
+
json.staff d.staff.user.real_name
|
5
|
+
json.clazz EducodeSales::SalePlan::CLAZZ_NAME.invert[d.clazz]
|
6
|
+
json.year d.year
|
7
|
+
json.business_name d.business.name
|
8
|
+
json.department d.business.department&.name
|
9
|
+
json.school d.business.department&.school&.name
|
10
|
+
json.stage d.business.last_follow_up&.stage&.name
|
11
|
+
json.staff_manages d.business.last_follow_up&.assign_follow_ups.present? ? (d.business.last_follow_up.assign_follow_ups.map{ |d| d.staff.user.real_name}.join("、")) : d.business.staff&.user&.real_name
|
12
|
+
json.created_at d.created_at.to_s
|
13
|
+
json.sale_way d.business.last_follow_up&.place&.name.present? ? '渠道' : '直销'
|
14
|
+
json.budget_amount d.business&.last_follow_up ? d.business.last_follow_up.budget_amount.to_f.round(2) : 0
|
15
|
+
json.plan_bid_on d.plan_bid_on
|
16
|
+
json.plan_sign_on d.plan_sign_on
|
17
|
+
json.prepayment_plan_on d.prepayment_plan_on
|
18
|
+
json.prepayment_amount d.prepayment_amount
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
json.code 0
|
23
|
+
json.count @data.total_count
|
@@ -0,0 +1,79 @@
|
|
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" style="width: 180px;">计划投标时间</label>
|
5
|
+
<div class="layui-input-inline">
|
6
|
+
<input type="text" class="layui-input" id="plan_bid_on" autocomplete="off" name="plan_bid_on">
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
<div class="layui-inline">
|
10
|
+
<label class="layui-form-label required" style="width: 180px;">计划签单时间</label>
|
11
|
+
<div class="layui-input-inline">
|
12
|
+
<input type="text" class="layui-input" id="plan_sign_on" autocomplete="off" name="plan_sign_on">
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
<div class="layui-inline">
|
16
|
+
<label class="layui-form-label required" style="width: 180px;">计划回款时间</label>
|
17
|
+
<div class="layui-input-inline">
|
18
|
+
<input type="text" class="layui-input" id="prepayment_plan_on" autocomplete="off" name="prepayment_plan_on">
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
<div class="layui-inline">
|
22
|
+
<label class="layui-form-label required" style="width: 180px;">计划回款额</label>
|
23
|
+
<div class="layui-input-inline">
|
24
|
+
<input type="text" class="layui-input" autocomplete="off" name="prepayment_amount" value="<%= @business_info.prepayment_amount %>">
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<div class="layui-form-item m-t-20">
|
29
|
+
<div class="layui-input-block">
|
30
|
+
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="update_bussiness_info">提交</button>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
</form>
|
35
|
+
<script>
|
36
|
+
layui.use(['form', 'table', 'laytpl', 'request', 'laydate'], function () {
|
37
|
+
var form = layui.form,
|
38
|
+
layer = layui.layer,
|
39
|
+
laydate = layui.laydate,
|
40
|
+
table = layui.table,
|
41
|
+
request = layui.request,
|
42
|
+
$ = layui.$;
|
43
|
+
|
44
|
+
laydate.render({
|
45
|
+
elem: '#plan_bid_on',
|
46
|
+
value: "<%= @business_info.plan_bid_on.to_s %>",
|
47
|
+
type: 'date'
|
48
|
+
});
|
49
|
+
|
50
|
+
laydate.render({
|
51
|
+
elem: '#plan_sign_on',
|
52
|
+
value: "<%= @business_info.plan_sign_on.to_s %>",
|
53
|
+
type: 'date'
|
54
|
+
});
|
55
|
+
laydate.render({
|
56
|
+
elem: '#prepayment_plan_on',
|
57
|
+
value: "<%= @business_info.prepayment_plan_on.to_s %>",
|
58
|
+
type: 'date'
|
59
|
+
});
|
60
|
+
|
61
|
+
|
62
|
+
form.render();
|
63
|
+
|
64
|
+
form.on('submit(update_bussiness_info)', function (data) {
|
65
|
+
request.authPost("missions/plans/update_business_info?id=" + parent.id, data.field, function (res) {
|
66
|
+
if (res.success == false) {
|
67
|
+
layer.alert(res.msg)
|
68
|
+
} else {
|
69
|
+
layer.close(parent.sindex);
|
70
|
+
parent.table.reload('yearTable', {
|
71
|
+
where: {year: parent.year }
|
72
|
+
})
|
73
|
+
}
|
74
|
+
})
|
75
|
+
return false;
|
76
|
+
});
|
77
|
+
|
78
|
+
});
|
79
|
+
</script>
|