educode_sales 1.10.58 → 1.10.59

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.
@@ -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>