safecheck-client 3.0.35-gongyi → 3.0.35-gongyi-3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,479 +1,479 @@
1
- <template>
2
- <div>
3
- <div :style="{'height':needRepair?'60%':'100%'}">
4
- <criteria-paged :model="model" :pager="false" v-ref:paged>
5
- <criteria partial='criteria'>
6
- <div partial>
7
- <ul class="nav nav-tabs">
8
- <li role="presentation" class="active"><a style=" color: #5ac0d9 !important;">隐患明细</a></li>
9
- </ul>
10
- </div>
11
- </criteria>
12
- <data-grid :model="model" partial='list' class="table_sy">
13
- <template partial='head'>
14
- <tr>
15
- <!-- <th>-->
16
- <!-- <nobr>隐患设备</nobr>-->
17
- <!-- </th>-->
18
- <th>
19
- <nobr>隐患项</nobr>
20
- </th>
21
- <th>
22
- <nobr>隐患原因</nobr>
23
- </th>
24
- <th>
25
- <nobr>隐患处理方式</nobr>
26
- </th>
27
- <th>
28
- <nobr>操作</nobr>
29
- </th>
30
- </tr>
31
- </template>
32
- <template partial='body'>
33
- <!-- <td style="text-align: center">-->
34
- <!-- <nobr>{{row.f_device_type}}</nobr>-->
35
- <!-- </td>-->
36
- <td style="text-align: center">
37
- <nobr>{{row.f_item_name}}</nobr>
38
- </td>
39
- <td style="text-align: center">
40
- <nobr>{{row.f_item_value}}</nobr>
41
- </td>
42
- <td style="text-align: center">
43
- <nobr>{{row.f_repaire_type}}</nobr>
44
- </td>
45
- <td style="text-align: center">
46
- <img-button style="float: left;margin-left: 12%" v-if="row.f_repaire_type != '无隐患' && row.f_repaire_type != '维修已处理'" :src="'/rs/image/file/'+row.f_path" :value="'隐患图片'"></img-button>
47
- <button v-if="row.f_repaire_type == '维修已处理'" class="button_new-1 button_spacing" @click="$parent.$parent.$parent.solveDefect( row, 'view')">处理详情</button>
48
- <!-- <button v-if="row.f_repaire_type == '隐患未处理'" class="button_spacing button_search-1" @click="$parent.$parent.$parent.solveDefect( row, 'solve')">处理隐患</button>-->
49
- </td>
50
- </template>
51
- </data-grid>
52
- </criteria-paged>
53
- </div>
54
-
55
- <div style="overflow-y: scroll;height: 40%" v-if="needRepair">
56
- <div class="form-horizontal auto">
57
- <ul class="nav nav-tabs">
58
- <li role="presentation" class="active"><a style=" color: #000 !important;font-size: 14px">转维修</a></li>
59
- </ul>
60
- <validator name='v' @valid="valid = true" @invalid="valid = false">
61
- <div class="row">
62
- <div class="col-sm-4" :class="[$v.dispatchtype.required ? 'select-error' : '']">
63
- <label for="dispatchtype" class="font_normal_body">派发类型</label>
64
- <input id="dispatchtype" type="text" v-show="false" v-model="$refs.dispatchtype.selectedItems" v-validate:dispatchtype='{required: true }'>
65
- <v-select :value.sync="toRepairModal.preData.dispatchType" v-model="toRepairModal.preData.dispatchType"
66
- :options='toRepairModal.preData.dispatchTypeOptions' placeholder='派发类型'
67
- close-on-select v-ref:dispatchtype>
68
- </v-select>
69
- </div>
70
- <div class="col-sm-4 " v-if="toRepairModal.preData.dispatchType == '派发给站点'">
71
- <label class="font_normal_body">站&nbsp;&nbsp;点</label>
72
- <right-tree
73
- islist
74
- :userid="$login.f.id"
75
- :source="'dep=this.getParentByType($organization$).getSpecialResByType($department$),tool.getFullTree(dep.where(row.hasSpecialRole($派单员$)))'"
76
- @re-res="getSiteRes">
77
- </right-tree>
78
- </div>
79
- <div class="col-sm-4 " v-if="toRepairModal.preData.dispatchType == '派发给维修员'" :class="[$v.f_repairman.required ? 'select-error' : '']">
80
- <input type="text" v-show="false" v-model="toRepairModal.preData.f_repairman" v-validate:f_repairman='{required: true }'>
81
- <label class="font_normal_body">维修员</label>
82
- <v-select
83
- :value.sync="toRepairModal.preData.f_repairman"
84
- :value-single="true"
85
- :options='toRepairModal.preData.repairers'
86
- placeholder='请选择维修员'
87
- close-on-select></v-select>
88
- </div>
89
- <div class="col-sm-4" :class="[$v.f_repairtype.required ? 'select-error' : '']">
90
- <input type="text" v-show="false" v-model="toRepairModal.preData.f_repairtype" v-validate:f_repairtype='{required: true }'>
91
- <label class="font_normal_body">报修类型</label>
92
- <v-select :value.sync="toRepairModal.preData.f_repairtype" style="width:60%"
93
- class="select select_list"
94
- :value-single="true"
95
- :options='toRepairModal.preData.repairTypeOptions'
96
- close-on-select>
97
- </v-select>
98
- </div>
99
- </div>
100
- <div class="row">
101
- <div class="col-sm-8 form-group">
102
- <label class="font_normal_body" >备&emsp;&emsp;注</label>
103
- <input class="input_search" style="width: 60%" type="text" v-model="toRepairModal.preData.f_remarks" placeholder="备注">
104
- </div>
105
- <div class="col-sm-4" style="margin-top: 1%">
106
- <button class="button_search" :disabled="!valid" @click="confirm">转维修</button>
107
- </div>
108
- </div>
109
- </validator>
110
- </div>
111
- </div>
112
- <modal :show.sync="showSolveModal" v-ref:solveModal>
113
- <div slot="modal-header" class="modal-header">
114
- <h4 class="modal-title">
115
- {{solveModal.preData.type == 'view'?'处理详情':'处理隐患'}}
116
- </h4>
117
- </div>
118
- <div slot="modal-body" class="modal-body">
119
- <div style="width: 100%;height: 36px;background-color: #f1f8ff;float: left">
120
- <div style="width: 8px;height: 100%;background-color: #6aa6e2;margin-right: 20px;float: left"></div>
121
- <div style="width: auto;height:100%;float: left;"><p class="title-font" style="margin-top: 5px">处理前</p></div>
122
- </div>
123
-
124
- <div class="col-sm-6" style="margin-top: 10px">
125
- <label class="font_normal_body">安&nbsp;检&nbsp;员</label>
126
- <input class="input_search" style="width: 60%" type="text" disabled="true" v-model="check.f_checker_name" placeholder="安检员">
127
- </div>
128
- <div class="col-sm-6" style="margin-top: 10px">
129
- <label class="font_normal_body">安检时间</label>
130
- <input class="input_search" style="width: 60%" type="text" disabled="true" v-model="check.f_offsite_time" placeholder="安检时间">
131
- </div>
132
- <div class="col-sm-12" style="margin-bottom: 10px">
133
- <label class="font_normal_body">隐患图片</label>
134
- <img-self :width="200" :height="200" :src="solveModal.preData.defectImg"></img-self>
135
- </div>
136
-
137
- <div style="width: 100%;height: 36px;background-color: #f1f8ff;float: left">
138
- <div style="width: 8px;height: 100%;background-color: #6aa6e2;margin-right: 20px;float: left"></div>
139
- <div style="width: auto;height:100%;float: left;"><p class="title-font" style="margin-top: 5px">处理后</p></div>
140
- </div>
141
- <div class="col-sm-6" style="margin-top: 10px">
142
- <label class="font_normal_body">处&nbsp;理&nbsp;人</label>
143
- <input class="input_search" style="width: 60%" disabled="true" type="text" v-model="solveModal.uploadData.f_repairman" placeholder="处理人">
144
- </div>
145
- <div class="col-sm-6" style="margin-top: 10px">
146
- <label class="font_normal_body">处理时间</label>
147
- <datepicker
148
- :disabled="solveModal.preData.type == 'view'"
149
- placeholder='处理时间' style="width:60%"
150
- :disabled-days-of-week="[]"
151
- :format="'yyyy-MM-dd'"
152
- :show-rest-button="reset"
153
- :value.sync="solveModal.uploadData.f_repair_date">
154
- </datepicker>
155
- </div>
156
- <!--<div v-if="solveModal.preData.type == 'solve'" class="col-sm-12" style="margin-bottom: 10px">
157
- <label class="font_normal_body">处理后图片</label>
158
- <avatar-upload :width="200" :height="200" :img-src.sync="solveModal.uploadData.imgSrc" :filename.sync="solveModal.uploadData.filename" v-ref:imginfo></avatar-upload>
159
- </div>
160
- <div v-if="solveModal.preData.type == 'view' && solveModal.preData.repairedImg" class="col-sm-12" style="margin-bottom: 10px">
161
- <label class="font_normal_body">处理后图片</label>
162
- <img-self :width="200" :height="200" :src="solveModal.preData.repairedImg"></img-self>
163
- </div>-->
164
- </div>
165
- <div slot="modal-footer" class="modal-footer" style="text-align: center">
166
- <button class="button_search" v-if="solveModal.preData.type == 'solve'" @click="ok">确认</button>
167
- <button class="button_search" @click="cancel">取消</button>
168
- </div>
169
- </modal>
170
-
171
- </div>
172
- </template>
173
-
174
- <script>
175
- import {PagedList, HttpResetClass} from 'vue-client'
176
- import * as Util from '../Util'
177
- import co from 'co'
178
-
179
- const upSolveDefect = function* (self) {
180
- let uploadData = self.solveModal.uploadData
181
- console.log('uploadData => ' + JSON.stringify(uploadData))
182
- self.$resetpost('/rs/logic/pcRepairDefect', self.solveModal.uploadData, {resolveMsg: null, rejectMsg: null})
183
- .then(res => {
184
- if (res.data.code == 200) {
185
- self.$showMessage('隐患已处理。')
186
- self.showSolveModal = false
187
- self.model.search('', {})
188
- }
189
- })
190
- }
191
-
192
- const sendRepair = function* (self) {
193
- let preData = self.toRepairModal.preData
194
- let uploadData = self.toRepairModal.uploadData
195
-
196
- if (preData.dispatchType == '派发给站点') {
197
- uploadData.model.serviceacitivity[0].f_meetunit = preData.f_meetunit
198
- uploadData.model.serviceacitivity[0].f_reciever = preData.f_reciever
199
- uploadData.model.f_meetunit = preData.f_meetunit
200
- uploadData.model.f_orgstr = preData.f_reciever
201
- uploadData.model.f_outlets = preData.f_outlets
202
- } else if (preData.dispatchType == '派发给维修员') {
203
- uploadData.model.serviceacitivity[0].f_reciever = preData.f_repairman
204
- // uploadData.model.f_meetunit = self.$login.f.orgpathnames
205
- // uploadData.model.f_orgstr = self.$login.f.orgpathstr
206
- // uploadData.model.f_outlets = self.$login.f.f_parentname
207
- uploadData.model.f_meetunit = self.$login.f.deps
208
- uploadData.model.f_orgid = self.$login.f.orgid
209
- uploadData.model.f_filiale = self.$login.f.org
210
- uploadData.model.f_outlets = self.$login.f.deps
211
- uploadData.model.f_filiale_id = self.$login.f.orgid
212
- uploadData.toRepair = '一级派单'
213
- }
214
- let res = yield self.$resetpost('/rs/sql/GetUserForRepaire', {data: {f_userinfo_id: self.check.f_userinfo_id}})
215
- preData.userInfo = res.data[0]
216
- uploadData.model = Object.assign(uploadData.model, preData.userInfo)
217
- uploadData.user.f_userinfo_id = preData.userInfo.f_userinfo_id
218
- uploadData.model.f_repair_date = Util.getNowDate()
219
- uploadData.model.f_repairtype = preData.f_repairtype
220
- uploadData.model.f_remarks = preData.f_remarks
221
- // 拼接failure
222
- let failure = []
223
- self.model.rows.forEach(row => {
224
- if (row.f_repaire_type == '隐患未处理') {
225
- failure.push({
226
- f_failure_type: row.f_item_name,
227
- failurecase: row.f_item_value.split(',')
228
- })
229
- }
230
- })
231
- uploadData.model.failure = failure
232
- // 拼接repairitems
233
- let rows = JSON.parse(JSON.stringify(self.model.rows))
234
- let repairitems = {
235
- data: []
236
- }
237
- let safecheckOptions = [{"data": "已处理"}, {"data": "未处理"}]
238
- // 取隐患未处理的
239
- rows = rows.filter(row => row.f_repaire_type == '隐患未处理')
240
- console.log('row => ' + JSON.stringify(rows))
241
- // 开始拼接
242
- rows.forEach(row => {
243
- let existIndex = -1
244
- // 判断该设备是否已经存在
245
- for (let i = 0; i < repairitems.data.length; i++) {
246
- if (repairitems.data[i].f_type == row.f_device_type) {
247
- existIndex = i
248
- break
249
- }
250
- }
251
- if (existIndex == -1) {
252
- // 不存在则新建
253
- let newItem = {
254
- f_type: row.f_device_type,
255
- details: [{
256
- f_defect_id:row.id,
257
- f_project: `${row.f_item_name}:${row.f_item_value}`,
258
- type: 'selector',
259
- options: safecheckOptions
260
- }]
261
- }
262
- repairitems.data.push(newItem)
263
- } else {
264
- // 存在则追加
265
- repairitems.data[existIndex].details.push({
266
- f_defect_id:row.id,
267
- f_project: `${row.f_item_name}:${row.f_item_value}`,
268
- type: 'selector',
269
- options: safecheckOptions
270
- })
271
- }
272
- })
273
- uploadData.model.f_repairitems = repairitems
274
- console.log('uploadData ---> ' + JSON.stringify(uploadData))
275
- // 调工单接口
276
- let result = yield self.$resetpost('/rs/logic/callerSend', uploadData)
277
- console.log('result ===> ' + JSON.stringify(result))
278
- if (result.data.f_service_id) {
279
- let updateRes = yield self.$resetpost('/rs/logic/updateDefectState', {itemsId: self.$login.convertToIn(rows.map(row => row.id))})
280
- if (updateRes.data.code == 200) {
281
- self.$showMessage('隐患已转维修。')
282
- self.model.search(`f_repaire_type != '无隐患'`, {})
283
- }
284
- }
285
- }
286
-
287
- export default {
288
- title: '隐患项列表',
289
- data() {
290
- return {
291
- model: new PagedList('rs/sql/GetDefectByPaperId', 100, {
292
- f_paper_id: 'this.f_paper_id'
293
- }),
294
- showSolveModal: false,
295
- showToRepairModal: false,
296
- showDefectModal:false,
297
- valid: false,
298
- needRepair: true,
299
- solveModal: {
300
- preData: {
301
- type: 'view',
302
- defectImg: '',
303
- repairedImg: ''
304
- },
305
- uploadData: {
306
- id: '',
307
- f_repairman: this.$login.f.name,
308
- f_repair_date: Util.getNowDate().substr(0, 10),
309
- f_repair_path: '',
310
- imgSrc: '',
311
- filename: ''
312
- }
313
- },
314
- toRepairModal: {
315
- preData: {
316
- dispatchTypeOptions: [{label: '派发给站点', value: '派发给站点'}, {label: '派发给维修员', value: '派发给维修员'}],
317
- repairTypeOptions: this.$appdata.getParam('报修类型'),
318
- dispatchType: '',
319
- f_repairman: '',
320
- f_repairtype: '',
321
- f_remarks: '',
322
- f_meetunit: '',
323
- f_reciever: '',
324
- f_outlets: '',
325
- userInfo: {},
326
- repairers: []
327
- },
328
- uploadData: {
329
- model: {
330
- serviceacitivity: [{
331
- f_service_acitivity_type: '派单'
332
- }],
333
- f_repairitems: {},
334
- failure: '',
335
- f_source: '安检',
336
- f_service_id: '',
337
- f_contact_phone: '',
338
- f_meetunit: '',
339
- f_phone: '',
340
- f_user_name: '',
341
- f_address: '',
342
- f_repair_date: '',
343
- f_reciever: '',
344
- f_remarks: '',
345
- f_user_type: '',
346
- f_area: '',
347
- f_unit_name: '',
348
- f_street: '',
349
- f_residential_area: '',
350
- f_building: '',
351
- f_unit: '',
352
- f_floor: '',
353
- f_room: '',
354
- aState: '',
355
- f_repairtype: '',
356
- f_userinfo_id: '',
357
- f_userinfo_code: '',
358
- f_orgstr: '',
359
- f_outlets: '',
360
- f_attendant: this.$login.f.name
361
- },
362
- loginUser: {
363
- name: this.$login.f.name,
364
- ename: this.$login.f.ename
365
- },
366
- user: {
367
- f_userinfo_id: ''
368
- },
369
- callObj: null
370
- }
371
- }
372
- }
373
- },
374
- props: ['check'],
375
- ready() {
376
- if (this.check) {
377
- this.model.f_paper_id = this.check.id
378
- this.model.search(`f_repaire_type != '无隐患'`, {})
379
- }
380
- this.getEmp()
381
- },
382
- methods: {
383
- solveDefect(row, type) {
384
- this.solveModal.preData.defectImg = '/rs/image/file/' + row.f_path
385
- if(row.f_repair_path){
386
- this.solveModal.preData.repairedImg = '/rs/image/file/' + row.f_repair_path
387
- }
388
- this.solveModal.uploadData.id = row.id
389
- this.solveModal.preData.type = type
390
- if (type == 'view') {
391
- if(row.f_repair_path){
392
- this.solveModal.preData.f_repair_path = '/rs/image/file/' + row.f_repair_path
393
- }
394
- this.solveModal.uploadData.f_repairman = row.f_repairman
395
- this.solveModal.uploadData.f_repair_date = row.f_repair_date
396
- } else {
397
- this.solveModal.uploadData.f_repairman = this.$login.f.name
398
- this.solveModal.uploadData.f_repair_date = Util.getNowDate().substr(0, 10)
399
- }
400
- this.showSolveModal = !this.showSolveModal
401
- },
402
- ok() {
403
- if (!(this.solveModal.uploadData.filename && this.solveModal.uploadData.filename.length > 0)) {
404
- this.$showMessage('请录入处理后照片')
405
- return
406
- }
407
- co(upSolveDefect(this))
408
- },
409
- cancel() {
410
- this.showSolveModal = false
411
- this.showToRepairModal = false
412
- },
413
- toRepair() {
414
- this.showToRepairModal = !this.showToRepairModal
415
- },
416
- getSiteRes(obj) {
417
- console.log('siteRes ---> ')
418
- console.log(obj)
419
- if(obj.resids[0]){
420
- this.toRepairModal.preData.f_meetunit = obj.res.join('.')
421
- this.toRepairModal.preData.f_reciever = obj.resids.join('.')
422
- }else {
423
- this.toRepairModal.preData.f_meetunit = ''
424
- this.toRepairModal.preData.f_reciever = ''
425
- this.toRepairModal.preData.f_outlets = ''
426
- }
427
- },
428
- // 获取维修员
429
- getEmp() {
430
- let val = {source: 'this.getParentByType($organization$).getChildByName($维修员$).getUsers()', userid: `${this.$login.f.id}`}
431
- let http = new HttpResetClass()
432
- http.load('POST', '/rs/search', {data: val}, {resolveMsg: null, rejectMsg: null}).then((res) => {
433
- res.data.forEach((item) => {
434
- let http1 = new HttpResetClass()
435
- http1.load('POST', 'rs/sql/tel_singleTable_OrderBy', {
436
- data: {
437
- items: 'f_user_telephone',
438
- tablename: 't_user',
439
- condition: `id = ${item.id}`,
440
- orderitem: 'id'
441
- }
442
- }, {resolveMsg: null, rejectMsg: null}).then((ress) => {
443
- this.toRepairModal.preData.repairers.push({label: `${item.name}:${ress.data[0].f_user_telephone}`, value: item.name})
444
- })
445
- })
446
- })
447
- },
448
- confirm() {
449
- if (this.toRepairModal.preData.dispatchType == '派发给站点' && !this.toRepairModal.preData.f_meetunit) {
450
- this.$showMessage('请选择站点。')
451
- return
452
- }
453
- co(sendRepair(this))
454
- }
455
- },
456
- watch: {
457
- 'check'() {
458
- this.model.f_paper_id = this.check.id
459
- this.model.search(`f_repaire_type != '无隐患'`, {})
460
- },
461
- 'model.rows'() {
462
- if (this.model.rows.length > 0) {
463
- if (this.model.rows[0].f_repaire_type == '隐患未处理') {
464
- this.needRepair = true
465
- return
466
- }
467
- }
468
- this.needRepair = false
469
- }
470
- }
471
- }
472
- </script>
473
- <style lang="less" scoped>
474
- .select-error {
475
- button {
476
- border-bottom: 1px solid #a94442 !important;
477
- }
478
- }
479
- </style>
1
+ <template>
2
+ <div>
3
+ <div :style="{'height':needRepair?'60%':'100%'}">
4
+ <criteria-paged :model="model" :pager="false" v-ref:paged>
5
+ <criteria partial='criteria'>
6
+ <div partial>
7
+ <ul class="nav nav-tabs">
8
+ <li role="presentation" class="active"><a style=" color: #5ac0d9 !important;">隐患明细</a></li>
9
+ </ul>
10
+ </div>
11
+ </criteria>
12
+ <data-grid :model="model" partial='list' class="table_sy">
13
+ <template partial='head'>
14
+ <tr>
15
+ <!-- <th>-->
16
+ <!-- <nobr>隐患设备</nobr>-->
17
+ <!-- </th>-->
18
+ <th>
19
+ <nobr>隐患项</nobr>
20
+ </th>
21
+ <th>
22
+ <nobr>隐患原因</nobr>
23
+ </th>
24
+ <th>
25
+ <nobr>隐患处理方式</nobr>
26
+ </th>
27
+ <th>
28
+ <nobr>操作</nobr>
29
+ </th>
30
+ </tr>
31
+ </template>
32
+ <template partial='body'>
33
+ <!-- <td style="text-align: center">-->
34
+ <!-- <nobr>{{row.f_device_type}}</nobr>-->
35
+ <!-- </td>-->
36
+ <td style="text-align: center">
37
+ <nobr>{{row.f_item_name}}</nobr>
38
+ </td>
39
+ <td style="text-align: center">
40
+ <nobr>{{row.f_item_value}}</nobr>
41
+ </td>
42
+ <td style="text-align: center">
43
+ <nobr>{{row.f_repaire_type}}</nobr>
44
+ </td>
45
+ <td style="text-align: center">
46
+ <img-button style="float: left;margin-left: 12%" v-if="row.f_repaire_type != '无隐患' && row.f_repaire_type != '维修已处理'" :src="'/rs/image/file/'+row.f_path" :value="'隐患图片'"></img-button>
47
+ <button v-if="row.f_repaire_type == '维修已处理'" class="button_new-1 button_spacing" @click="$parent.$parent.$parent.solveDefect( row, 'view')">处理详情</button>
48
+ <!-- <button v-if="row.f_repaire_type == '隐患未处理'" class="button_spacing button_search-1" @click="$parent.$parent.$parent.solveDefect( row, 'solve')">处理隐患</button>-->
49
+ </td>
50
+ </template>
51
+ </data-grid>
52
+ </criteria-paged>
53
+ </div>
54
+
55
+ <div style="overflow-y: scroll;height: 40%" v-if="needRepair">
56
+ <div class="form-horizontal auto">
57
+ <ul class="nav nav-tabs">
58
+ <li role="presentation" class="active"><a style=" color: #000 !important;font-size: 14px">转维修</a></li>
59
+ </ul>
60
+ <validator name='v' @valid="valid = true" @invalid="valid = false">
61
+ <div class="row">
62
+ <div class="col-sm-4" :class="[$v.dispatchtype.required ? 'select-error' : '']">
63
+ <label for="dispatchtype" class="font_normal_body">派发类型</label>
64
+ <input id="dispatchtype" type="text" v-show="false" v-model="$refs.dispatchtype.selectedItems" v-validate:dispatchtype='{required: true }'>
65
+ <v-select :value.sync="toRepairModal.preData.dispatchType" v-model="toRepairModal.preData.dispatchType"
66
+ :options='toRepairModal.preData.dispatchTypeOptions' placeholder='派发类型'
67
+ close-on-select v-ref:dispatchtype>
68
+ </v-select>
69
+ </div>
70
+ <div class="col-sm-4 " v-if="toRepairModal.preData.dispatchType == '派发给站点'">
71
+ <label class="font_normal_body">站&nbsp;&nbsp;点</label>
72
+ <right-tree
73
+ islist
74
+ :userid="$login.f.id"
75
+ :source="'dep=this.getParentByType($organization$).getSpecialResByType($department$),tool.getFullTree(dep.where(row.hasSpecialRole($派单员$)))'"
76
+ @re-res="getSiteRes">
77
+ </right-tree>
78
+ </div>
79
+ <div class="col-sm-4 " v-if="toRepairModal.preData.dispatchType == '派发给维修员'" :class="[$v.f_repairman.required ? 'select-error' : '']">
80
+ <input type="text" v-show="false" v-model="toRepairModal.preData.f_repairman" v-validate:f_repairman='{required: true }'>
81
+ <label class="font_normal_body">维修员</label>
82
+ <v-select
83
+ :value.sync="toRepairModal.preData.f_repairman"
84
+ :value-single="true"
85
+ :options='toRepairModal.preData.repairers'
86
+ placeholder='请选择维修员'
87
+ close-on-select></v-select>
88
+ </div>
89
+ <div class="col-sm-4" :class="[$v.f_repairtype.required ? 'select-error' : '']">
90
+ <input type="text" v-show="false" v-model="toRepairModal.preData.f_repairtype" v-validate:f_repairtype='{required: true }'>
91
+ <label class="font_normal_body">报修类型</label>
92
+ <v-select :value.sync="toRepairModal.preData.f_repairtype" style="width:60%"
93
+ class="select select_list"
94
+ :value-single="true"
95
+ :options='toRepairModal.preData.repairTypeOptions'
96
+ close-on-select>
97
+ </v-select>
98
+ </div>
99
+ </div>
100
+ <div class="row">
101
+ <div class="col-sm-8 form-group">
102
+ <label class="font_normal_body" >备&emsp;&emsp;注</label>
103
+ <input class="input_search" style="width: 60%" type="text" v-model="toRepairModal.preData.f_remarks" placeholder="备注">
104
+ </div>
105
+ <div class="col-sm-4" style="margin-top: 1%">
106
+ <button class="button_search" :disabled="!valid" @click="confirm">转维修</button>
107
+ </div>
108
+ </div>
109
+ </validator>
110
+ </div>
111
+ </div>
112
+ <modal :show.sync="showSolveModal" v-ref:solveModal>
113
+ <div slot="modal-header" class="modal-header">
114
+ <h4 class="modal-title">
115
+ {{solveModal.preData.type == 'view'?'处理详情':'处理隐患'}}
116
+ </h4>
117
+ </div>
118
+ <div slot="modal-body" class="modal-body">
119
+ <div style="width: 100%;height: 36px;background-color: #f1f8ff;float: left">
120
+ <div style="width: 8px;height: 100%;background-color: #6aa6e2;margin-right: 20px;float: left"></div>
121
+ <div style="width: auto;height:100%;float: left;"><p class="title-font" style="margin-top: 5px">处理前</p></div>
122
+ </div>
123
+
124
+ <div class="col-sm-6" style="margin-top: 10px">
125
+ <label class="font_normal_body">安&nbsp;检&nbsp;员</label>
126
+ <input class="input_search" style="width: 60%" type="text" disabled="true" v-model="check.f_checker_name" placeholder="安检员">
127
+ </div>
128
+ <div class="col-sm-6" style="margin-top: 10px">
129
+ <label class="font_normal_body">安检时间</label>
130
+ <input class="input_search" style="width: 60%" type="text" disabled="true" v-model="check.f_offsite_time" placeholder="安检时间">
131
+ </div>
132
+ <div class="col-sm-12" style="margin-bottom: 10px">
133
+ <label class="font_normal_body">隐患图片</label>
134
+ <img-self :width="200" :height="200" :src="solveModal.preData.defectImg"></img-self>
135
+ </div>
136
+
137
+ <div style="width: 100%;height: 36px;background-color: #f1f8ff;float: left">
138
+ <div style="width: 8px;height: 100%;background-color: #6aa6e2;margin-right: 20px;float: left"></div>
139
+ <div style="width: auto;height:100%;float: left;"><p class="title-font" style="margin-top: 5px">处理后</p></div>
140
+ </div>
141
+ <div class="col-sm-6" style="margin-top: 10px">
142
+ <label class="font_normal_body">处&nbsp;理&nbsp;人</label>
143
+ <input class="input_search" style="width: 60%" disabled="true" type="text" v-model="solveModal.uploadData.f_repairman" placeholder="处理人">
144
+ </div>
145
+ <div class="col-sm-6" style="margin-top: 10px">
146
+ <label class="font_normal_body">处理时间</label>
147
+ <datepicker
148
+ :disabled="solveModal.preData.type == 'view'"
149
+ placeholder='处理时间' style="width:60%"
150
+ :disabled-days-of-week="[]"
151
+ :format="'yyyy-MM-dd'"
152
+ :show-rest-button="reset"
153
+ :value.sync="solveModal.uploadData.f_repair_date">
154
+ </datepicker>
155
+ </div>
156
+ <!--<div v-if="solveModal.preData.type == 'solve'" class="col-sm-12" style="margin-bottom: 10px">
157
+ <label class="font_normal_body">处理后图片</label>
158
+ <avatar-upload :width="200" :height="200" :img-src.sync="solveModal.uploadData.imgSrc" :filename.sync="solveModal.uploadData.filename" v-ref:imginfo></avatar-upload>
159
+ </div>
160
+ <div v-if="solveModal.preData.type == 'view' && solveModal.preData.repairedImg" class="col-sm-12" style="margin-bottom: 10px">
161
+ <label class="font_normal_body">处理后图片</label>
162
+ <img-self :width="200" :height="200" :src="solveModal.preData.repairedImg"></img-self>
163
+ </div>-->
164
+ </div>
165
+ <div slot="modal-footer" class="modal-footer" style="text-align: center">
166
+ <button class="button_search" v-if="solveModal.preData.type == 'solve'" @click="ok">确认</button>
167
+ <button class="button_search" @click="cancel">取消</button>
168
+ </div>
169
+ </modal>
170
+
171
+ </div>
172
+ </template>
173
+
174
+ <script>
175
+ import {PagedList, HttpResetClass} from 'vue-client'
176
+ import * as Util from '../Util'
177
+ import co from 'co'
178
+
179
+ const upSolveDefect = function* (self) {
180
+ let uploadData = self.solveModal.uploadData
181
+ console.log('uploadData => ' + JSON.stringify(uploadData))
182
+ self.$resetpost('/rs/logic/pcRepairDefect', self.solveModal.uploadData, {resolveMsg: null, rejectMsg: null})
183
+ .then(res => {
184
+ if (res.data.code == 200) {
185
+ self.$showMessage('隐患已处理。')
186
+ self.showSolveModal = false
187
+ self.model.search('', {})
188
+ }
189
+ })
190
+ }
191
+
192
+ const sendRepair = function* (self) {
193
+ let preData = self.toRepairModal.preData
194
+ let uploadData = self.toRepairModal.uploadData
195
+
196
+ if (preData.dispatchType == '派发给站点') {
197
+ uploadData.model.serviceacitivity[0].f_meetunit = preData.f_meetunit
198
+ uploadData.model.serviceacitivity[0].f_reciever = preData.f_reciever
199
+ uploadData.model.f_meetunit = preData.f_meetunit
200
+ uploadData.model.f_orgstr = preData.f_reciever
201
+ uploadData.model.f_outlets = preData.f_outlets
202
+ } else if (preData.dispatchType == '派发给维修员') {
203
+ uploadData.model.serviceacitivity[0].f_reciever = preData.f_repairman
204
+ // uploadData.model.f_meetunit = self.$login.f.orgpathnames
205
+ // uploadData.model.f_orgstr = self.$login.f.orgpathstr
206
+ // uploadData.model.f_outlets = self.$login.f.f_parentname
207
+ uploadData.model.f_meetunit = self.$login.f.deps
208
+ uploadData.model.f_orgid = self.$login.f.orgid
209
+ uploadData.model.f_filiale = self.$login.f.org
210
+ uploadData.model.f_outlets = self.$login.f.deps
211
+ uploadData.model.f_filiale_id = self.$login.f.orgid
212
+ uploadData.toRepair = '一级派单'
213
+ }
214
+ let res = yield self.$resetpost('/rs/sql/GetUserForRepaire', {data: {f_userinfo_id: self.check.f_userinfo_id}})
215
+ preData.userInfo = res.data[0]
216
+ uploadData.model = Object.assign(uploadData.model, preData.userInfo)
217
+ uploadData.user.f_userinfo_id = preData.userInfo.f_userinfo_id
218
+ uploadData.model.f_repair_date = Util.getNowDate()
219
+ uploadData.model.f_repairtype = preData.f_repairtype
220
+ uploadData.model.f_remarks = preData.f_remarks
221
+ // 拼接failure
222
+ let failure = []
223
+ self.model.rows.forEach(row => {
224
+ if (row.f_repaire_type == '隐患未处理') {
225
+ failure.push({
226
+ f_failure_type: row.f_item_name,
227
+ failurecase: row.f_item_value.split(',')
228
+ })
229
+ }
230
+ })
231
+ uploadData.model.failure = failure
232
+ // 拼接repairitems
233
+ let rows = JSON.parse(JSON.stringify(self.model.rows))
234
+ let repairitems = {
235
+ data: []
236
+ }
237
+ let safecheckOptions = [{"data": "已处理"}, {"data": "未处理"}]
238
+ // 取隐患未处理的
239
+ rows = rows.filter(row => row.f_repaire_type == '隐患未处理')
240
+ console.log('row => ' + JSON.stringify(rows))
241
+ // 开始拼接
242
+ rows.forEach(row => {
243
+ let existIndex = -1
244
+ // 判断该设备是否已经存在
245
+ for (let i = 0; i < repairitems.data.length; i++) {
246
+ if (repairitems.data[i].f_type == row.f_device_type) {
247
+ existIndex = i
248
+ break
249
+ }
250
+ }
251
+ if (existIndex == -1) {
252
+ // 不存在则新建
253
+ let newItem = {
254
+ f_type: row.f_device_type,
255
+ details: [{
256
+ f_defect_id:row.id,
257
+ f_project: `${row.f_item_name}:${row.f_item_value}`,
258
+ type: 'selector',
259
+ options: safecheckOptions
260
+ }]
261
+ }
262
+ repairitems.data.push(newItem)
263
+ } else {
264
+ // 存在则追加
265
+ repairitems.data[existIndex].details.push({
266
+ f_defect_id:row.id,
267
+ f_project: `${row.f_item_name}:${row.f_item_value}`,
268
+ type: 'selector',
269
+ options: safecheckOptions
270
+ })
271
+ }
272
+ })
273
+ uploadData.model.f_repairitems = repairitems
274
+ console.log('uploadData ---> ' + JSON.stringify(uploadData))
275
+ // 调工单接口
276
+ let result = yield self.$resetpost('/rs/logic/callerSend', uploadData)
277
+ console.log('result ===> ' + JSON.stringify(result))
278
+ if (result.data.f_service_id) {
279
+ let updateRes = yield self.$resetpost('/rs/logic/updateDefectState', {itemsId: self.$login.convertToIn(rows.map(row => row.id))})
280
+ if (updateRes.data.code == 200) {
281
+ self.$showMessage('隐患已转维修。')
282
+ self.model.search(`f_repaire_type != '无隐患'`, {})
283
+ }
284
+ }
285
+ }
286
+
287
+ export default {
288
+ title: '隐患项列表',
289
+ data() {
290
+ return {
291
+ model: new PagedList('rs/sql/GetDefectByPaperId', 100, {
292
+ f_paper_id: 'this.f_paper_id'
293
+ }),
294
+ showSolveModal: false,
295
+ showToRepairModal: false,
296
+ showDefectModal:false,
297
+ valid: false,
298
+ needRepair: true,
299
+ solveModal: {
300
+ preData: {
301
+ type: 'view',
302
+ defectImg: '',
303
+ repairedImg: ''
304
+ },
305
+ uploadData: {
306
+ id: '',
307
+ f_repairman: this.$login.f.name,
308
+ f_repair_date: Util.getNowDate().substr(0, 10),
309
+ f_repair_path: '',
310
+ imgSrc: '',
311
+ filename: ''
312
+ }
313
+ },
314
+ toRepairModal: {
315
+ preData: {
316
+ dispatchTypeOptions: [{label: '派发给站点', value: '派发给站点'}, {label: '派发给维修员', value: '派发给维修员'}],
317
+ repairTypeOptions: this.$appdata.getParam('报修类型'),
318
+ dispatchType: '',
319
+ f_repairman: '',
320
+ f_repairtype: '',
321
+ f_remarks: '',
322
+ f_meetunit: '',
323
+ f_reciever: '',
324
+ f_outlets: '',
325
+ userInfo: {},
326
+ repairers: []
327
+ },
328
+ uploadData: {
329
+ model: {
330
+ serviceacitivity: [{
331
+ f_service_acitivity_type: '派单'
332
+ }],
333
+ f_repairitems: {},
334
+ failure: '',
335
+ f_source: '安检',
336
+ f_service_id: '',
337
+ f_contact_phone: '',
338
+ f_meetunit: '',
339
+ f_phone: '',
340
+ f_user_name: '',
341
+ f_address: '',
342
+ f_repair_date: '',
343
+ f_reciever: '',
344
+ f_remarks: '',
345
+ f_user_type: '',
346
+ f_area: '',
347
+ f_unit_name: '',
348
+ f_street: '',
349
+ f_residential_area: '',
350
+ f_building: '',
351
+ f_unit: '',
352
+ f_floor: '',
353
+ f_room: '',
354
+ aState: '',
355
+ f_repairtype: '',
356
+ f_userinfo_id: '',
357
+ f_userinfo_code: '',
358
+ f_orgstr: '',
359
+ f_outlets: '',
360
+ f_attendant: this.$login.f.name
361
+ },
362
+ loginUser: {
363
+ name: this.$login.f.name,
364
+ ename: this.$login.f.ename
365
+ },
366
+ user: {
367
+ f_userinfo_id: ''
368
+ },
369
+ callObj: null
370
+ }
371
+ }
372
+ }
373
+ },
374
+ props: ['check'],
375
+ ready() {
376
+ if (this.check) {
377
+ this.model.f_paper_id = this.check.id
378
+ this.model.search(`f_repaire_type != '无隐患'`, {})
379
+ }
380
+ this.getEmp()
381
+ },
382
+ methods: {
383
+ solveDefect(row, type) {
384
+ this.solveModal.preData.defectImg = '/rs/image/file/' + row.f_path
385
+ if(row.f_repair_path){
386
+ this.solveModal.preData.repairedImg = '/rs/image/file/' + row.f_repair_path
387
+ }
388
+ this.solveModal.uploadData.id = row.id
389
+ this.solveModal.preData.type = type
390
+ if (type == 'view') {
391
+ if(row.f_repair_path){
392
+ this.solveModal.preData.f_repair_path = '/rs/image/file/' + row.f_repair_path
393
+ }
394
+ this.solveModal.uploadData.f_repairman = row.f_repairman
395
+ this.solveModal.uploadData.f_repair_date = row.f_repair_date
396
+ } else {
397
+ this.solveModal.uploadData.f_repairman = this.$login.f.name
398
+ this.solveModal.uploadData.f_repair_date = Util.getNowDate().substr(0, 10)
399
+ }
400
+ this.showSolveModal = !this.showSolveModal
401
+ },
402
+ ok() {
403
+ if (!(this.solveModal.uploadData.filename && this.solveModal.uploadData.filename.length > 0)) {
404
+ this.$showMessage('请录入处理后照片')
405
+ return
406
+ }
407
+ co(upSolveDefect(this))
408
+ },
409
+ cancel() {
410
+ this.showSolveModal = false
411
+ this.showToRepairModal = false
412
+ },
413
+ toRepair() {
414
+ this.showToRepairModal = !this.showToRepairModal
415
+ },
416
+ getSiteRes(obj) {
417
+ console.log('siteRes ---> ')
418
+ console.log(obj)
419
+ if(obj.resids[0]){
420
+ this.toRepairModal.preData.f_meetunit = obj.res.join('.')
421
+ this.toRepairModal.preData.f_reciever = obj.resids.join('.')
422
+ }else {
423
+ this.toRepairModal.preData.f_meetunit = ''
424
+ this.toRepairModal.preData.f_reciever = ''
425
+ this.toRepairModal.preData.f_outlets = ''
426
+ }
427
+ },
428
+ // 获取维修员
429
+ getEmp() {
430
+ let val = {source: 'this.getParentByType($organization$).getChildByName($维修员$).getUsers()', userid: `${this.$login.f.id}`}
431
+ let http = new HttpResetClass()
432
+ http.load('POST', '/rs/search', {data: val}, {resolveMsg: null, rejectMsg: null}).then((res) => {
433
+ res.data.forEach((item) => {
434
+ let http1 = new HttpResetClass()
435
+ http1.load('POST', 'rs/sql/tel_singleTable_OrderBy', {
436
+ data: {
437
+ items: 'f_user_telephone',
438
+ tablename: 't_user',
439
+ condition: `id = ${item.id}`,
440
+ orderitem: 'id'
441
+ }
442
+ }, {resolveMsg: null, rejectMsg: null}).then((ress) => {
443
+ this.toRepairModal.preData.repairers.push({label: `${item.name}:${ress.data[0].f_user_telephone}`, value: item.name})
444
+ })
445
+ })
446
+ })
447
+ },
448
+ confirm() {
449
+ if (this.toRepairModal.preData.dispatchType == '派发给站点' && !this.toRepairModal.preData.f_meetunit) {
450
+ this.$showMessage('请选择站点。')
451
+ return
452
+ }
453
+ co(sendRepair(this))
454
+ }
455
+ },
456
+ watch: {
457
+ 'check'() {
458
+ this.model.f_paper_id = this.check.id
459
+ this.model.search(`f_repaire_type != '无隐患'`, {})
460
+ },
461
+ 'model.rows'() {
462
+ if (this.model.rows.length > 0) {
463
+ if (this.model.rows[0].f_repaire_type == '隐患未处理') {
464
+ this.needRepair = true
465
+ return
466
+ }
467
+ }
468
+ this.needRepair = false
469
+ }
470
+ }
471
+ }
472
+ </script>
473
+ <style lang="less" scoped>
474
+ .select-error {
475
+ button {
476
+ border-bottom: 1px solid #a94442 !important;
477
+ }
478
+ }
479
+ </style>