educode_sales 1.10.58 → 1.10.59

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,677 @@
1
+ <%= Gon::Base.render_data(:namespace => 'gon_target') %>
2
+ <div id="year_target_wraper">
3
+ <div class="layuimini-main min-height-table" id="year_target_table_wraper">
4
+ <form class="layui-form layui-form-pane" lay-filter="assessment_progress_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 large-select">
9
+ <%= select_tag "staff_id", options_for_select(@staffs), { id: 'weekly_staff_id', include_blank: true} %>
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" autocomplete="off" name="year" value="<%= Time.now.year %>" id="target_year">
16
+ </div>
17
+ </div>
18
+ <div class="layui-inline">
19
+ <label class="layui-form-label">客户类型</label>
20
+ <div class="layui-input-inline">
21
+ <div id="target_property" style="width: 190px;"></div>
22
+ </div>
23
+ </div>
24
+ <div class="layui-inline">
25
+ <label class="layui-form-label">目标类别</label>
26
+ <div class="layui-input-inline">
27
+ <div id="target_clazz" style="width: 190px;"></div>
28
+ </div>
29
+ </div>
30
+ <div class="layui-inline">
31
+ <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="target_reset_btn">重置
32
+ </button>
33
+ <button type="submit" id="progress_search_btn" class="layui-btn layui-btn-primary" lay-submit lay-filter="progress_search_btn">检索
34
+ </button>
35
+ </div>
36
+ </div>
37
+ </form>
38
+ <table class="layui-tab" id="target_table" lay-filter="year_all_target_form"></table>
39
+ </div>
40
+ <hr style="height:30px;background: #ccc; margin: 0px 15px;"/>
41
+ <div class="layuimini-main min-height-table" id="year_target_add_wraper">
42
+ <form class="layui-form layui-form-pane" lay-filter="add_year_target_form">
43
+ <div class="layui-form-item">
44
+ <div class="layui-inline">
45
+ <label class="layui-form-label">人员</label>
46
+ <div class="layui-input-inline large-select" style="width: 120px">
47
+ <%= select_tag "staff_id", options_for_select(@staffs), { id: "add_staff_id", include_blank: true } %>
48
+ </div>
49
+ </div>
50
+ <div class="layui-inline">
51
+ <label class="layui-form-label">年度</label>
52
+ <div class="layui-input-inline" style="width:100px">
53
+ <input type="text" class="layui-input" autocomplete="off" name="year" value="<%= Time.now.year %>" id="add_target_year">
54
+ </div>
55
+ </div>
56
+ <div class="layui-inline">
57
+ <label class="layui-form-label">客户类型</label>
58
+ <div class="layui-input-inline">
59
+ <div id="add_target_property" style="width: 160px;"></div>
60
+ </div>
61
+ </div>
62
+ <div class="layui-inline">
63
+ <label class="layui-form-label">目标类别</label>
64
+ <div class="layui-input-inline">
65
+ <div id="add_target_clazz" style="width: 140px;"></div>
66
+ </div>
67
+ </div>
68
+ <div class="layui-inline">
69
+ <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_add_taregt">重置
70
+ </button>
71
+ <button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_target_history">检索
72
+ </button>
73
+ <% if can? :new_create, EducodeSales::SalePlan %>
74
+ <button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="add_btn">添加
75
+ </button>
76
+ <% end %>
77
+ </div>
78
+ </div>
79
+ </form>
80
+ <table class="layui-tab" id="target_history_table" lay-filter="target_history_table"></table>
81
+ </div>
82
+ </div>
83
+ <script type="text/html" id="target_progress_toolbar">
84
+ <div class="layui-btn-container">
85
+ <span class="table-label">年度销售目标执行情况</span>
86
+ <button class="layui-btn layui-btn-primary layui-btn-sm pull-right" lay-event="export"> 导出</button>
87
+ <button class="layui-btn layui-btn-primary layui-btn-sm pull-right" lay-event="show_all" id="show_all"> 分类显示</button>
88
+ <button class="layui-btn layui-btn-default layui-btn-sm pull-right" lay-event="show_staff" id="show_staff"> 人员显示</button>
89
+ </div>
90
+ </script>
91
+ <script type="text/html" id="add_target_progress_toolbar">
92
+ <div class="layui-btn-container">
93
+ <span class="table-label">&nbsp;</span>
94
+ <button class="layui-btn layui-btn-default layui-btn-sm data-add-btn pull-right" lay-event="add">添加</button>
95
+ </div>
96
+ </script>
97
+ <script type="text/html" id="op">
98
+ {{# if (d.state == "" || d.state == undefined) { }}
99
+ <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="add">保存</a>
100
+ <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="cancel">取消</a>
101
+ {{# } else if (d.state == '待审核') {}}
102
+ <% if can? :new_audit, EducodeSales::SalePlan %>
103
+ <a class="layui-btn layui-btn-default layui-btn-xs" lay-event="audit">审核</a>
104
+ <% end %>
105
+ {{# } else if (d.state == '已通过') {}}
106
+ {{# if (d.edit) { }}
107
+ <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="save_edit">保存</a>
108
+ <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="cancel_edit">取消</a>
109
+ {{# } else { }}
110
+ <% if can? :new_update, EducodeSales::SalePlan %>
111
+ {{# if (d.is_use) { }}
112
+ <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">编辑</a>
113
+ {{# } else { }}
114
+ {{# }}}
115
+ <% end %>
116
+ <!-- <a class="layui-btn layui-btn-default layui-btn-xs" lay-event="audit">审核</a>-->
117
+ {{# }}}
118
+ {{# } else if (d.state == '已驳回') {}}
119
+ <a class="layui-btn layui-btn-purple layui-btn-xs" lay-event="reject">审核意见</a>
120
+ {{# }}}
121
+ </script>
122
+ <script type="text/html" id="month_1">
123
+ {{# if (d.m_target_1 ) { }}
124
+ <div class="mtarget">{{d.m_target_1}}</div>
125
+ {{# } else { }}
126
+ <div class="target">{{d.target_1}}</div>
127
+ {{# }}}
128
+ </script>
129
+ <script type="text/html" id="month_2">
130
+ {{# if (d.m_target_2 ) { }}
131
+ <div class="mtarget">{{d.m_target_2}}</div>
132
+ {{# } else { }}
133
+ <div class="target">{{d.target_2}}</div>
134
+ {{# }}}
135
+ </script>
136
+ <script type="text/html" id="month_3">
137
+ {{# if (d.m_target_3 ) { }}
138
+ <div class="mtarget">{{d.m_target_3}}</div>
139
+ {{# } else { }}
140
+ <div class="target">{{d.target_3}}</div>
141
+ {{# }}}
142
+ </script>
143
+ <script type="text/html" id="month_4">
144
+ {{# if (d.m_target_4 ) { }}
145
+ <div class="mtarget">{{d.m_target_4}}</div>
146
+ {{# } else { }}
147
+ <div class="target">{{d.target_4}}</div>
148
+ {{# }}}
149
+ </script>
150
+ <script type="text/html" id="month_5">
151
+ {{# if (d.m_target_5 ) { }}
152
+ <div class="mtarget">{{d.m_target_5}}</div>
153
+ {{# } else { }}
154
+ <div class="target">{{d.target_5}}</div>
155
+ {{# }}}
156
+ </script>
157
+ <script type="text/html" id="month_6">
158
+ {{# if (d.m_target_6 ) { }}
159
+ <div class="mtarget">{{d.m_target_6}}</div>
160
+ {{# } else { }}
161
+ <div class="target">{{d.target_6}}</div>
162
+ {{# }}}
163
+ </script>
164
+ <script type="text/html" id="month_7">
165
+ {{# if (d.m_target_7 ) { }}
166
+ <div class="mtarget">{{d.m_target_7}}</div>
167
+ {{# } else { }}
168
+ <div class="target">{{d.target_7}}</div>
169
+ {{# }}}
170
+ </script>
171
+ <script type="text/html" id="month_8">
172
+ {{# if (d.m_target_8 ) { }}
173
+ <div class="mtarget">{{d.m_target_8}}</div>
174
+ {{# } else { }}
175
+ <div class="target">{{d.target_8}}</div>
176
+ {{# }}}
177
+ </script>
178
+ <script type="text/html" id="month_9">
179
+ {{# if (d.m_target_9 ) { }}
180
+ <div class="mtarget">{{d.m_target_9}}</div>
181
+ {{# } else { }}
182
+ <div class="target">{{d.target_9}}</div>
183
+ {{# }}}
184
+ </script>
185
+ <script type="text/html" id="month_10">
186
+ {{# if (d.m_target_10 ) { }}
187
+ <div class="mtarget">{{d.m_target_10}}</div>
188
+ {{# } else { }}
189
+ <div class="target">{{d.target_10}}</div>
190
+ {{# }}}
191
+ </script>
192
+ <script type="text/html" id="month_11">
193
+ {{# if (d.m_target_11 ) { }}
194
+ <div class="mtarget">{{d.m_target_11}}</div>
195
+ {{# } else { }}
196
+ <div class="target">{{d.target_11}}</div>
197
+ {{# }}}
198
+ </script>
199
+ <script type="text/html" id="month_12">
200
+ {{# if (d.m_target_12 ) { }}
201
+ <div class="mtarget">{{d.m_target_12}}</div>
202
+ {{# } else { }}
203
+ <div class="target">{{d.target_12}}</div>
204
+ {{# }}}
205
+ </script>
206
+ <script>
207
+ layui.use(['form', 'table', 'miniPage', 'element', 'rate', 'laydate', 'request', 'xmSelect'], function () {
208
+
209
+ $ = layui.jquery,
210
+ form = layui.form,
211
+ laydate = layui.laydate,
212
+ request = layui.request,
213
+ table = layui.table,
214
+ rate = layui.rate,
215
+ xmSelect = layui.xmSelect,
216
+ miniPage = layui.miniPage,
217
+ dropdown = layui.dropdown;
218
+
219
+
220
+ laydate.render({
221
+ elem: '#target_year',
222
+ type: 'year'
223
+ });
224
+
225
+ var target_property = xmSelect.render({
226
+ el: '#target_property',
227
+ name: 'school_tag_id',
228
+ data: gon_target.school_tags
229
+ })
230
+
231
+ var target_clazz = xmSelect.render({
232
+ el: '#target_clazz',
233
+ name: 'target_clazz',
234
+ data: [{value: '中标', name: '中标'}, {value: '回款', name: '回款'}, {value: '商机', name: '商机'}]
235
+ })
236
+
237
+ form.on('submit(target_reset_btn)', function (data) {
238
+ target_property.setValue([]);
239
+ target_clazz.setValue([]);
240
+ return false;
241
+ })
242
+
243
+ laydate.render({
244
+ elem: '#add_target_year',
245
+ type: 'year'
246
+ });
247
+
248
+ var add_property_list = xmSelect.render({
249
+ el: '#add_target_property',
250
+ radio: true,
251
+ name: 'school_tag_id',
252
+ data: gon_target.school_tags
253
+ })
254
+
255
+ var add_clazz = xmSelect.render({
256
+ el: '#add_target_clazz',
257
+ radio: true,
258
+ name: 'target_clazz',
259
+ data: [{value: '中标', name: '中标'}, {value: '回款', name: '回款'}, {value: '商机', name: '商机'}]
260
+ })
261
+
262
+
263
+ var target_table = table.render({
264
+ elem: '#target_table'
265
+ , toolbar: '#target_progress_toolbar'
266
+ , totalRow: true
267
+ , url: '/missions/plans/years_all_target'
268
+ , page: true
269
+ , title: "绩效考核指标完成情况" // 目前发现的作用(导出文件的文件名)
270
+ , defaultToolbar: ['filter']
271
+ , height: 'full-200'
272
+ , cols: [
273
+ [ //标题栏
274
+ {field: 'id', group: 'id', align: 'center', title: '序号', width: 80, rowspan: 3}
275
+ , {field: 'name', align: 'center', title: '姓名', width: 100, rowspan: 3}
276
+ , {field: 'target_clazz', align: 'center', title: '类别', width: 100, rowspan: 3, totalRowText: '合计'}
277
+ , {field: 'year_target', align: 'center', title: '年度目标', width: 100, rowspan: 3, totalRow: true}
278
+ , {field: 'school_tag_name', align: 'center', title: '客户类型', width: 100, rowspan: 3}
279
+ , {field: 'year_clazz_target', align: 'center', title: '分项目标', width: 100, rowspan: 3, totalRow: true}
280
+ , {field: 'year_plan', title: '年度计划', width: 100, rowspan: 3, totalRow: true}
281
+ , {field: 'year_diff', title: '年度差额', width: 100, rowspan: 3, totalRow: true}
282
+
283
+ , {align: 'center', title: '1月', colspan: 3}
284
+ , {align: 'center', title: '2月', colspan: 3}
285
+ , {align: 'center', title: '3月', colspan: 3}
286
+ , {align: 'center', title: '4月', colspan: 3}
287
+ , {align: 'center', title: '5月', colspan: 3}
288
+ , {align: 'center', title: '6月', colspan: 3}
289
+ , {align: 'center', title: '7月', colspan: 3}
290
+ , {align: 'center', title: '8月', colspan: 3}
291
+ , {align: 'center', title: '9月', colspan: 3}
292
+ , {align: 'center', title: '10月', colspan: 3}
293
+ , {align: 'center', title: '11月', colspan: 3}
294
+ , {align: 'center', title: '12月', colspan: 3}
295
+ ],
296
+ [
297
+ {field: 'target_1', title: '目标', width: 100, totalRow: true}
298
+ , {field: 'plan_1', title: '计划', width: 100, totalRow: true}
299
+ , {field: 'finish_1', title: '完成', width: 100, totalRow: true}
300
+
301
+ , {field: 'target_2', title: '目标', width: 100, totalRow: true}
302
+ , {field: 'plan_2', title: '计划', width: 100, totalRow: true}
303
+ , {field: 'finish_2', title: '完成', width: 100, totalRow: true}
304
+
305
+ , {field: 'target_3', title: '目标', width: 100, totalRow: true}
306
+ , {field: 'plan_3', title: '计划', width: 100, totalRow: true}
307
+ , {field: 'finish_3', title: '完成', width: 100, totalRow: true}
308
+
309
+ , {field: 'target_4', title: '目标', width: 100, totalRow: true}
310
+ , {field: 'plan_4', title: '计划', width: 100, totalRow: true}
311
+ , {field: 'finish_4', title: '完成', width: 100, totalRow: true}
312
+
313
+ , {field: 'target_5', title: '目标', width: 100, totalRow: true}
314
+ , {field: 'plan_5', title: '计划', width: 100, totalRow: true}
315
+ , {field: 'finish_5', title: '完成', width: 100, totalRow: true}
316
+
317
+ , {field: 'target_6', title: '目标', width: 100, totalRow: true}
318
+ , {field: 'plan_6', title: '计划', width: 100, totalRow: true}
319
+ , {field: 'finish_6', title: '完成', width: 100, totalRow: true}
320
+
321
+ , {field: 'target_7', title: '目标', width: 100, totalRow: true}
322
+ , {field: 'plan_7', title: '计划', width: 100, totalRow: true}
323
+ , {field: 'finish_7', title: '完成', width: 100, totalRow: true}
324
+
325
+ , {field: 'target_8', title: '目标', width: 100, totalRow: true}
326
+ , {field: 'plan_8', title: '计划', width: 100, totalRow: true}
327
+ , {field: 'finish_8', title: '完成', width: 100, totalRow: true}
328
+
329
+ , {field: 'target_9', title: '目标', width: 100, totalRow: true}
330
+ , {field: 'plan_9', title: '计划', width: 100, totalRow: true}
331
+ , {field: 'finish_9', title: '完成', width: 100, totalRow: true}
332
+
333
+ , {field: 'target_10', title: '目标', width: 100, totalRow: true}
334
+ , {field: 'plan_10', title: '计划', width: 100, totalRow: true}
335
+ , {field: 'finish_10', title: '完成', width: 100, totalRow: true}
336
+
337
+ , {field: 'target_11', title: '目标', width: 100, totalRow: true}
338
+ , {field: 'plan_11', title: '计划', width: 100, totalRow: true}
339
+ , {field: 'finish_11', title: '完成', width: 100, totalRow: true}
340
+
341
+ , {field: 'target_12', title: '目标', width: 100, totalRow: true}
342
+ , {field: 'plan_12', title: '计划', width: 100, totalRow: true}
343
+ , {field: 'finish_12', title: '完成', width: 100, totalRow: true}
344
+ ]],
345
+ done: function (res, curr, count) {
346
+ merge(res);
347
+ var id = res.data[0]['id'];
348
+ if (!id) {
349
+ $("[data-field='id']").css('display', 'none');
350
+ $("[data-field='name']").css('display', 'none');
351
+ }
352
+ table.render('select');
353
+ }
354
+ });
355
+
356
+ table.on('toolbar(year_all_target_form)', function (obj) {
357
+ search = form.val('assessment_progress_form')
358
+ var event = obj.event;
359
+ switch (event) {
360
+ case 'show_staff':
361
+ search.type = 'staff';
362
+ break;
363
+ case 'show_all':
364
+ search.type = 'all';
365
+ search.staff_id = '';
366
+ break;
367
+ case 'export':
368
+ layer.load(0, {});
369
+ request.authGet("missions/plans/years_all_target?=" + $.param({q: search}), {}, function (res) {
370
+ data = res.data
371
+ table.exportFile(target_table.config.id, data, 'xls');
372
+ layer.closeAll('loading');
373
+ });
374
+ break;
375
+ }
376
+ if (event === 'show_staff' || event === 'show_all') {
377
+ loadFinishTable(search);
378
+ var $ = layui.$;
379
+ var buttonId = `#${event}`;
380
+ // 移除所有按钮的 layui-btn-default 类名,添加 layui-btn-primary 类名
381
+ $(buttonId).siblings('.layui-btn').removeClass('layui-btn-default').addClass('layui-btn-primary');
382
+ $(buttonId).removeClass('layui-btn-primary').addClass('layui-btn-default');
383
+ }
384
+ })
385
+
386
+ function editable(i) {
387
+ return function (d) {
388
+ if (d.id == "" || (d.edit && gon_target.month <= i)) {
389
+ return 'text';
390
+ }
391
+ };
392
+ }
393
+
394
+ add_progress_table = table.render({
395
+ elem: '#target_history_table'
396
+ , url: '/missions/plans/year_target'
397
+ , defaultToolbar: []
398
+ , cols: [[
399
+ {field: 'num', title: '序号', width: 50},
400
+ {field: 'staff', title: '姓名', width: 100},
401
+ {field: 'school_tag', title: '客户类型', width: 100}
402
+ , {field: 'target_clazz', title: '目标类别', width: 100}
403
+ , {field: 'year', title: '年份', width: 100}
404
+ , {field: 'year_target', title: '年度目标', width: 100}
405
+ , {field: 'year_finish', title: '年度完成', width: 100}
406
+ , {field: 'year_diff', title: '年度差额', width: 100}
407
+ , {field: 'm_target_1', title: '1月', width: 100, edit: editable(1), templet: "#month_1"}
408
+ , {field: 'm_target_2', title: '2月', width: 100, edit: editable(2), templet: "#month_2"}
409
+ , {field: 'm_target_3', title: '3月', width: 100, edit: editable(3), templet: "#month_3"}
410
+ , {field: 'm_target_4', title: '4月', width: 100, edit: editable(4), templet: "#month_4"}
411
+ , {field: 'm_target_5', title: '5月', width: 100, edit: editable(5), templet: "#month_5"}
412
+ , {field: 'm_target_6', title: '6月', width: 100, edit: editable(6), templet: "#month_6"}
413
+ , {field: 'm_target_7', title: '7月', width: 100, edit: editable(7), templet: "#month_7"}
414
+ , {field: 'm_target_8', title: '8月', width: 100, edit: editable(8), templet: "#month_8"}
415
+ , {field: 'm_target_9', title: '9月', width: 100, edit: editable(9), templet: "#month_9"}
416
+ , {field: 'm_target_10', title: '10月', width: 100, edit: editable(10), templet: "#month_10"}
417
+ , {field: 'm_target_11', title: '11月', width: 100, edit: editable(11), templet: "#month_11"}
418
+ , {field: 'm_target_12', title: '12月', width: 100, edit: editable(12), templet: "#month_12"}
419
+ , {field: 'state', title: '审核状态', width: 100}
420
+ , {field: 'reviewer', title: '审批人', width: 100}
421
+ , {field: 'updated_at', title: '更新时间', width: 150}
422
+ , {templet: '#op', title: '操作', width: 200}
423
+ ]]
424
+ });
425
+ form.render();
426
+
427
+ table.on('tool(target_history_table)', function (obj) {
428
+ console.log('---', obj)
429
+ var data = table.cache['target_history_table'];
430
+ if (obj.event == 'cancel') {
431
+ data.splice(obj.index, 1);
432
+ table.renderData('target_history_table');
433
+ } else if (obj.event == 'add') {
434
+ request.post('missions/plans/add_year_target', obj.data, function (res) {
435
+ // data[obj.index].id = res.id;
436
+ // data[obj.index].state = res.state;
437
+ // data[obj.index].updated_at = res.updated_at;
438
+ // table.renderData('target_history_table');
439
+ table.reload('target_history_table')
440
+ })
441
+ } else if (obj.event == 'reject') {
442
+ layer.open({
443
+ type: 1,
444
+ area: ['420px', '240px'],
445
+ title: '审核意见',
446
+ content: '<div style="padding: 16px;">' + obj.data.comment + '</div>'
447
+ });
448
+ } else if (obj.event == 'edit') {
449
+ data[obj.index].edit = true;
450
+ table.renderData('target_history_table');
451
+ change_fields = {}
452
+ } else if (obj.event == 'save_edit') {
453
+ console.log("change_fields", change_fields)
454
+ change_fields.staff_id = obj.data.staff_id;
455
+ change_fields.year_target = obj.data.year_target;
456
+ change_fields.target_clazz = obj.data.target_clazz;
457
+ change_fields.year = obj.data.year;
458
+ change_fields.school_tag_id = obj.data.school_tag_id;
459
+ change_fields.year_diff = obj.data.year_diff;
460
+ change_fields.year_finish = obj.data.year_finish;
461
+
462
+ request.post('missions/plans/add_year_target', change_fields, function (res) {
463
+ table.reload('target_history_table')
464
+ })
465
+ } else if (obj.event == 'cancel_edit') {
466
+ data[obj.index].edit = false;
467
+ table.renderData('target_history_table');
468
+ } else if (obj.event == 'audit') {
469
+ layer.prompt({
470
+ title: '请输入审核', formType: 2, btn: ['同意', '驳回', '取消'],
471
+ yes: function (index, layero, that) {
472
+ var comment = $(that.layero[0]).find("textarea").val();
473
+ request.put('missions/plans/' + obj.data.id + '/update_year_target', {
474
+ comment: comment,
475
+ state: '已通过'
476
+ }, function (res) {
477
+ // var data = table.cache['target_history_table'];
478
+ // data[obj.index].state = res.state;
479
+ // data[obj.index].updated_at = res.updated_at;
480
+ // table.renderData('target_history_table');
481
+ table.reload('target_history_table');
482
+ table.reload('target_table')
483
+ })
484
+ layer.close(index);
485
+ },
486
+ btn2: function (index, layero, that) {
487
+ var comment = $(that.layero[0]).find("textarea").val();
488
+ if (comment == "") {
489
+ layer.msg('请输入审核意见')
490
+ } else {
491
+ request.put('missions/plans/' + obj.data.id + '/update_year_target', {
492
+ comment: comment,
493
+ state: '已驳回'
494
+ }, function (res) {
495
+ console.log(res)
496
+ var data = table.cache['target_history_table'];
497
+ data[obj.index].state = res.state;
498
+ data[obj.index].updated_at = res.updated_at;
499
+ table.renderData('target_history_table');
500
+ })
501
+ layer.close(index);
502
+ }
503
+ return false // 点击该按钮后不关闭弹层
504
+ },
505
+ btn3: function (index, layero, that) {
506
+ //console.log(7, index, layero, that)
507
+ // 按钮3 的回调
508
+ layer.close(index);
509
+ return false // 点击该按钮后不关闭弹层
510
+ }
511
+ })
512
+ }
513
+ })
514
+
515
+ var change_fields = {};
516
+ table.on('edit(target_history_table)', function (obj) {
517
+ var value = obj.value // 得到修改后的值
518
+ var data = obj.data // 得到所在行所有键值
519
+ var field = obj.field; // 得到字段
520
+ console.log("====0", obj)
521
+ var update = {};
522
+ console.log('--2vvv', value, value == '')
523
+ if (value == '') {
524
+ change_fields[field] = '';
525
+ } else if (isNaN(parseFloat(value))) {
526
+ update[field] = 0;
527
+ change_fields[field] = 0;
528
+ } else {
529
+ update[field] = parseFloat(value);
530
+ change_fields[field] = parseFloat(value);
531
+ }
532
+
533
+ var year_target = 0;
534
+ for (var i = 1; i <= 12; i++) {
535
+ console.log(parseFloat(data['m_target_' + i]))
536
+ year_target += parseFloat(data['m_target_' + i]) || 0
537
+ }
538
+ update['year_diff'] = year_target - data.year_finish;
539
+ update['year_target'] = year_target;
540
+ obj.update(update);
541
+ })
542
+
543
+ function merge(res) {
544
+ var data = res.data;
545
+ var mergeIndex = 0;//定位需要添加合并属性的行数
546
+ var mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数
547
+ var columsName = ['id','name','target_clazz',{name:'year_target',mergeBase:'target_clazz',valueBase:'year_clazz_target'}];//需要合并的列名称
548
+ var columsIndex = [0,1,2,3];//需要合并的列索引值
549
+
550
+ for (var k = 0; k < columsName.length; k++) { //这里循环所有要合并的列
551
+ var trArr = $(".layui-table-body>.layui-table").find("tr");//所有行
552
+ for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据
553
+ var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列
554
+ var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列
555
+ var opt = columsName[k];
556
+ var name = opt.name;
557
+ var mergeBase = opt.mergeBase;
558
+ var valueBase = opt.valueBase;
559
+
560
+ if(name && mergeBase){
561
+ tdCurValue = parseFloat(tdPreArr[0].querySelector('.layui-table-cell').textContent) || 0;
562
+ if(valueBase && !tdCurValue){
563
+ tdPreArr[0].querySelector('.layui-table-cell').innerHTML = data[i-1][valueBase];
564
+ }
565
+
566
+ if (data[i]['name'] === data[i-1]['name'] && data[i][mergeBase] === data[i-1][mergeBase]) { //后一行的值与前一行的值做比较,相同就需要合并
567
+ mark += 1;
568
+ tdPreArr.each(function (a,b) {//相同列的第一列增加rowspan属性
569
+ $(this).attr("rowspan", mark);
570
+
571
+ var oldV = parseFloat($(this).find('.layui-table-cell').html()) || 0;
572
+ var curentV;
573
+ if(valueBase){
574
+ curentV = parseFloat(data[i][valueBase]) || 0;
575
+ }else{
576
+ curentV = parseFloat(data[i][name]) || 0;
577
+ }
578
+ var newV = oldV + curentV;
579
+ $(this).find('.layui-table-cell').html(newV);
580
+ });
581
+ tdCurArr.each(function () {//当前行隐藏
582
+ $(this).css("display", "none");
583
+ });
584
+ }else {
585
+ mergeIndex = i;
586
+ mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
587
+ }
588
+ }else{
589
+ if (data[i]['name'] === data[i-1]['name'] && data[i][columsName[k]] === data[i-1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并
590
+ mark += 1;
591
+ tdPreArr.each(function () {//相同列的第一列增加rowspan属性
592
+ $(this).attr("rowspan", mark);
593
+ });
594
+ tdCurArr.each(function () {//当前行隐藏
595
+ $(this).css("display", "none");
596
+ });
597
+ }else {
598
+ mergeIndex = i;
599
+ mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
600
+ }
601
+ }
602
+ }
603
+ mergeIndex = 0;
604
+ mark = 1;
605
+ }
606
+ }
607
+
608
+ form.on('submit(progress_search_btn)', function (data) {
609
+ var search = data.field;
610
+ loadFinishTable(search);
611
+ return false;
612
+ })
613
+
614
+ form.on('submit(reset_add_taregt)', function (data) {
615
+ add_property_list.setValue([])
616
+ add_clazz.setValue([]);
617
+ form.val('add_year_target_form', {
618
+ year: '', staff_id: ''
619
+ })
620
+ return false;
621
+ })
622
+
623
+ form.on("submit(add_btn)", function (data) {
624
+ var search = data.field;
625
+ search.school_tag_id = add_property_list.getValue('valueStr');
626
+ console.log(search)
627
+ if (search.staff_id == "") {
628
+ layer.msg('请选择人员')
629
+ } else if (search.year == "") {
630
+ layer.msg('请选择年度')
631
+ } else if (search.school_tag_id == "") {
632
+ layer.msg('请选择客户类型')
633
+ } else if (search.target_clazz == "") {
634
+ layer.msg('请选择目标类别')
635
+ } else {
636
+ request.post('missions/plans/cal_finish_amount', {
637
+ school_tag_id: search.school_tag_id,
638
+ target_clazz: search.target_clazz,
639
+ year: search.year,
640
+ staff_id: search.staff_id
641
+ }, function (res) {
642
+ console.log(res)
643
+ var data = table.cache['target_history_table'];
644
+ var fields = {};
645
+ search.id = "";
646
+ search.year_finish = res.amount;
647
+ search.school_tag = add_property_list.getValue('nameStr');
648
+ search.staff = $("#add_staff_id option:selected").text();
649
+
650
+ data.push(search)
651
+ table.renderData('target_history_table');
652
+ })
653
+
654
+ }
655
+ return false;
656
+ })
657
+ form.on("submit(search_target_history)", function (data) {
658
+ var search = data.field;
659
+ search.school_tag_id = add_property_list.getValue('valueStr');
660
+ table.reload('target_history_table', {
661
+ where: search,
662
+ url: '/missions/plans/year_target'
663
+ });
664
+ return false;
665
+ })
666
+
667
+
668
+ function loadFinishTable(search) {
669
+ table.reload('target_table', {
670
+ where: search,
671
+ url: '/missions/plans/years_all_target'
672
+ });
673
+ }
674
+
675
+ })
676
+
677
+ </script>