telephone-clients 4.0.0-1-77 → 4.0.0-1-78

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.
Files changed (31) hide show
  1. package/CHANGELOG.md +37 -37
  2. package/README.md +38 -38
  3. package/package.json +1 -1
  4. package/release.bat +5 -5
  5. package/src/components/pc/NewRepairPaper.vue +704 -704
  6. package/src/components/pc/NewRepairTablePaper.vue +442 -442
  7. package/src/components/pc/RecordListLeft.vue +1 -1
  8. package/src/components/pc/WorkHistory.vue +650 -650
  9. package/src/components/sendsingle/onlinecharge.vue +424 -424
  10. package/src/components/workorder/ChangeMeterPageNew.vue +663 -658
  11. package/src/components/workorder/ChangeMeterUserInfo.vue +130 -130
  12. package/src/components/workorder/RepairFirstV.vue +736 -736
  13. package/src/components/workorder/RepairInfo.vue +178 -178
  14. package/src/components/workorder/RepairOrderT.vue +713 -713
  15. package/src/components/workorder/oldMeterPage.vue +104 -104
  16. package/src/components/workorder/repairFirstTable.vue +715 -715
  17. package/src/filiale/meihekou/android/Othercharge.vue +454 -454
  18. package/src/filiale/meihekou/android/PhoneStandWorkNew.vue +692 -692
  19. package/src/filiale/meihekou/android/ServiceOnlineQuery.vue +477 -477
  20. package/src/filiale/meihekou/pc/RepairsWork.vue +1003 -1003
  21. package/src/filiale/meihekou/pc/WorkListNew.vue +1049 -1049
  22. package/src/filiale/meihekou/telephoneAndroid.js +26 -26
  23. package/src/filiale/xinjiangdexin/telephone.js +16 -16
  24. package/src/filiale/xinliansihui/android/AppInstallationMaterial.vue +864 -864
  25. package/src/filiale/xinliansihui/android/FaultAll.vue +923 -923
  26. package/src/filiale/xinliansihui/android/RepairFirstV.vue +734 -734
  27. package/src/filiale/xinliansihui/android/RepairOrderT.vue +713 -713
  28. package/src/filiale/xinliansihui/telephoneAndroid.js +11 -11
  29. package/src/main.js +24 -24
  30. package/src/telephone-android.js +425 -425
  31. package/src/telephone.js +796 -796
@@ -1,1049 +1,1049 @@
1
- <template>
2
- <div class="flex">
3
- <work-busy :is-busy="saveing" v-show="saveing"></work-busy>
4
- <criteria-paged :model="model" v-ref:paged>
5
- <criteria partial='criteria' v-ref:criteria @condition-changed='$parent.search'>
6
- <div novalidate class="form-horizontal select-overspread container-fluid auto" partial>
7
- <div class="row">
8
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
9
- <label class="font_normal_body" style="width: 40%">工单编号</label>
10
- <input type="text" class="input_search" v-model="model.f_service_id" placeholder='工单编号'
11
- condition="tswo.f_service_id like '%{}%'"
12
- :size="model.f_service_id ? model.f_service_id.length : 6"
13
- >
14
- </div>
15
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
16
- <label class="font_normal_body" style="width: 40%">用户编号</label>
17
- <input type="text" class="input_search" v-model="model.f_userinfo_code" placeholder='用户编号'
18
- condition="tswo.f_userinfo_code like '%{}%'"
19
- :size="model.f_userinfo_code ? model.f_userinfo_code.length : 6"
20
- >
21
- </div>
22
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
23
- <label class="font_normal_body" style="width: 40%">用户姓名</label>
24
- <input type="text" class="input_search" v-model="model.f_user_name" placeholder='用户姓名'
25
- condition="tswo.f_user_name like '%{}%'"
26
- :size="model.f_user_name ? model.f_user_name.length : 6"
27
- >
28
- </div>
29
- <div class="form-group col-sm-6 button-range" style="margin-right: 10px">
30
-
31
- <button class="button_search button_spacing" @click="search(),$dispatch('search')"
32
- style="margin-right: 9px">查询
33
- </button>
34
- <button class="button_search button_spacing" @click="$parent.$parent.repairSendAll()"
35
- style="margin-right: 9px">批量下发
36
- </button>
37
- <button class="button_search button_spacing" @click="$parent.$parent.repairendAll()"
38
- style="margin-right: 9px">批量结案
39
- </button>
40
-
41
- <export-excel-tel
42
- :data="$parent.$parent.searchData"
43
- :field="$parent.$parent.excelHeaders"
44
- sqlurl="af-telephone/rs/logic/telephoneExport" sql-name="operatorService" template-name='工单导出'
45
- :choose-col="true"></export-excel-tel>
46
- <div style="float: right;" class="button_spacing"
47
- :class="{'button_shrink_top':$parent.$parent.criteriaShow,'button_shrink_bottom':!$parent.$parent.criteriaShow}"
48
- @click="$parent.$parent.hidden()"></div>
49
-
50
- </div>
51
- </div>
52
- <div class="row" v-show="$parent.$parent.criteriaShow">
53
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
54
- <label class="font_normal_body" style="width: 40%">来电电话</label>
55
- <input type="text" class="input_search" v-model="model.f_phone" placeholder='来电电话'
56
- condition="tswo.f_phone like '%{}%'"
57
- :size="model.f_phone ? model.f_phone.length : 6"
58
- >
59
- </div>
60
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
61
- <label class="font_normal_body" style="width: 40%">联系电话</label>
62
- <input type="text" class="input_search" v-model="model.f_contact_phone" placeholder='联系电话'
63
- condition="tswo.f_contact_phone = '{}'"
64
- :size="model.f_contact_phone ? model.f_contact_phone.length : 6"
65
- >
66
- </div>
67
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
68
- <label class="font_normal_body" style="width: 40%">地&emsp;&emsp;址</label>
69
- <input type="text" class="input_search" v-model="model.f_address" placeholder='地址'
70
- condition="tswo.f_address like '%{}%'"
71
- :size="model.f_address ? model.f_address.length : 6"
72
- >
73
- </div>
74
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
75
- <label class="font_normal_body" style="width: 40%">受&ensp;理&ensp;人</label>
76
- <input type="text" class="input_search" v-model="model.f_attendant" placeholder='受理人'
77
- condition="tswo.f_attendant like '%{}%'"
78
- :size="model.f_attendant ? model.f_attendant.length : 6"
79
- >
80
- </div>
81
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
82
- <label class="font_normal_body" style="width: 40%">接&ensp;单&ensp;人</label>
83
- <input type="text" class="input_search" v-model="model.f_order_man" placeholder='接单人'
84
- condition="tswo.f_order_man like '%{}%'"
85
- :size="model.f_order_man ? model.f_order_man.length : 6"
86
- >
87
- </div>
88
- </div>
89
- <div class="row" v-show="$parent.$parent.criteriaShow">
90
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
91
- <label class=" font_normal_body" for="f_workorder_type" style="width: 40%">工单类型</label>
92
- <v-select id="f_workorder_type" :value.sync="model.f_workorder_type" :value-single="true"
93
- v-model="model.f_workorder_type"
94
- :options='$parent.$parent.serviceorders' placeholder='工单类型'
95
- condition="tswo.f_workorder_type = '{}'"
96
- close-on-select>
97
- </v-select>
98
- </div>
99
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
100
- <label class=" font_normal_body" style="width: 40%">报修类型</label>
101
- <v-select :value.sync="model.f_repairtype" :value-single="true"
102
- v-model="model.f_repairtype"
103
- :options='$parent.$parent.repairstypes' placeholder='报修类型'
104
- condition="tswo.f_repairtype = '{}'"
105
- close-on-select>
106
- </v-select>
107
- </div>
108
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
109
- <label class="font_normal_body" style="width: 40%">派单时间</label>
110
- <datepicker placeholder="起始派单时间"
111
- :value.sync="model.f_created_date"
112
- v-model="model.f_created_date"
113
- :format="'yyyy-MM-dd 00:00:00'"
114
- condition="tswo.f_created_date > '{}'"
115
- ></datepicker>
116
- </div>
117
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
118
- <label class="font_normal_body" style="width: 40%">派单时间</label>
119
- <datepicker placeholder="终止派单时间"
120
- :value.sync="model.f_finish_date"
121
- v-model="model.f_finish_date"
122
- :format="'yyyy-MM-dd 23:59:59'"
123
- condition="tswo.f_created_date < '{}'"
124
- ></datepicker>
125
- </div>
126
- <div class="col-sm-2 form-group form-input-group" style="float:right;width: 15%;margin-left: 20px">
127
- <input type="radio" id="one" value="wait" style="float: left" v-model="$parent.$parent.picked">
128
- <label for="one" style="margin-top: 10px;float: left">待办</label>
129
- <input type="radio" id="two" value="done" style="float: left" v-model="$parent.$parent.picked">
130
- <label for="two" style="margin-top: 10px;float: left">已办</label>
131
- </div>
132
-
133
- </div>
134
- <div class="row" v-show="$parent.$parent.criteriaShow">
135
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
136
- <label class="font_normal_body" style="width: 40%">片&emsp;&emsp;区</label>
137
- <v-select :value.sync="model.f_slice_area" v-model='model.f_slice_area'
138
- :value-single="true"
139
- :options='$parent.$parent.slice_areas' placeholder='片区'
140
- close-on-select
141
- condition="f_slice_area = '{}'"></v-select>
142
- </div>
143
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
144
- <label class=" font_normal_body" style="width: 40%">工单状态</label>
145
- <v-select :value.sync="model.defname" :value-single="true"
146
- v-model="model.defname"
147
- :options='$parent.$parent.defnames' placeholder='工单状态'
148
- condition="sa.defname = '{}'"
149
- close-on-select>
150
- </v-select>
151
- </div>
152
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
153
- <label class=" font_normal_body" style="width: 40%">用户类型</label>
154
- <v-select :value.sync="model.f_user_type" :value-single="true"
155
- v-model="model.f_user_type"
156
- :options='$parent.$parent.userType' placeholder='用户类型'
157
- condition="tswo.f_user_type = '{}'"
158
- close-on-select>
159
- </v-select>
160
- </div>
161
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
162
- <label class="font_normal_body" style="width: 40%">故障明细</label>
163
- <input type="text" class="input_search" v-model="model.f_failure" placeholder='故障明细'
164
- condition="tswo.failure like '%{}%'"
165
- :size="model.f_failure ? model.f_failure.length : 6"
166
- >
167
- </div>
168
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
169
- <label class="font_normal_body" style="width: 40%">工单备注</label>
170
- <input type="text" class="input_search" v-model="model.fo_remarks" placeholder='工单备注'
171
- condition="tswo.f_remarks like '%{}%'"
172
- :size="model.fo_remarks ? model.fo_remarks.length : 6"
173
- >
174
- </div>
175
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
176
- <label class="font_normal_body" style="width: 40%">截止日期</label>
177
- <datepicker placeholder="起始截止时间"
178
- :value.sync="model.f_finishstr_date"
179
- v-model="model.f_finishstr_date"
180
- :format="'yyyy-MM-dd 00:00:00'"
181
- condition="tswo.f_finish_date > '{}'"
182
- ></datepicker>
183
- </div>
184
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
185
- <label class="font_normal_body" style="width: 40%">截止日期</label>
186
- <datepicker placeholder="终止截止时间"
187
- :value.sync="model.f_finishend_date"
188
- v-model="model.f_finishend_date"
189
- :format="'yyyy-MM-dd 23:59:59'"
190
- condition="tswo.f_finish_date < '{}'"
191
- ></datepicker>
192
- </div>
193
- <div class="col-sm-3 form-group form-input-group" style="width: 20%">
194
- <label class="font_normal_body" style="width: 40%" >逾期天数</label>
195
- <v-select :value.sync="model.overday" :value-single="true" v-model="model.overday"
196
- :options='$parent.$parent.overdays' placeholder='逾期天数'
197
- close-on-select>
198
- </v-select>
199
- </div>
200
- </div>
201
-
202
-
203
- </div>
204
- </criteria>
205
- <data-grid partial='list' v-ref:grid :model="model" class="list_area table_sy"
206
- :classname="'table tablenew table-bordered table-striped table-hover'">
207
- <template partial='head'>
208
- <tr>
209
- <th>
210
- <nobr><input type="checkbox" v-model="$parent.$parent.$parent.checkAll"/> 全选</nobr>
211
- </th>
212
-
213
- <th><nobr>
214
- 工单类型
215
- </nobr></th>
216
- <th><nobr>
217
- 工单编号
218
- </nobr></th>
219
- <th><nobr>
220
- 派单时间
221
- </nobr></th>
222
- <th><nobr>
223
- 所属片区
224
- </nobr></th>
225
- <th><nobr>
226
- 用户信息
227
- </nobr></th>
228
- <th><nobr>
229
- 用户类型
230
- </nobr></th>
231
- <th><nobr>
232
- 来电电话
233
- </nobr></th>
234
- <th><nobr>
235
- 联系电话
236
- </nobr></th>
237
- <th><nobr>
238
- 工单状态
239
- </nobr></th>
240
- <th><nobr>
241
- 报修类型
242
- </nobr></th>
243
- <th><nobr>
244
- 报修内容
245
- </nobr></th>
246
- <th><nobr>
247
- 故障明细
248
- </nobr></th>
249
- <th><nobr>
250
- 工单备注
251
- </nobr></th>
252
- <th><nobr>
253
- 截止日期
254
- </nobr></th>
255
- <th><nobr>
256
- 操作
257
- </nobr></th>
258
- </tr>
259
- </template>
260
- <template partial='body'>
261
- <td style="text-align: center;white-space:nowrap;"><input class="rowCheckbox" type="checkbox"
262
- v-if="row.defname === '站点接单'"
263
- onClick="event.cancelBubble = true"
264
- :checked="$parent.$parent.$parent.isChecked(row.id)"
265
- @change="$parent.$parent.$parent.setCheckes(row)"/><nobr></nobr>
266
- </td>
267
-
268
- <td
269
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
270
- {{ row.f_workorder_type }}<span style="color: red" v-if="row.f_remindersign==='true'">(催单)</span>
271
- <nobr><span style="color: red" v-if="row.f_state==='打回'">(打回)</span>
272
- </nobr></td>
273
- <td
274
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
275
- <nobr>{{ row.f_service_id }}</nobr>
276
- </td>
277
- <td
278
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
279
- <nobr>{{ row.f_created_date }}</nobr>
280
- </td>
281
- <td
282
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
283
- <nobr>{{ row.f_slice_area }}</nobr>
284
- </td>
285
- <td
286
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
287
- <nobr> {{ row.f_user_name }}&nbsp;&nbsp;&nbsp;{{ row.f_address }}&nbsp;&nbsp;&nbsp;{{ row.f_contact_name }}</nobr>
288
- </td>
289
- <td
290
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
291
- <nobr> {{ row.f_user_type }}</nobr>
292
- </td>
293
- <td
294
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
295
- <nobr>{{ row.f_phone }}</nobr>
296
- </td>
297
- <td
298
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
299
- <nobr>{{ row.f_contact_phone }}</nobr>
300
- </td>
301
- <td
302
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
303
- <nobr>{{ row.defname }}</nobr>
304
- </td>
305
- <td
306
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
307
- <nobr>{{ row.f_repairtype }}</nobr>
308
- </td>
309
- <td
310
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
311
- <nobr>{{ row.f_repairtype + ':' + row.f_json}}</nobr>
312
- </td>
313
- <td
314
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
315
- <nobr>{{ $parent.$parent.$parent.trouble(row.failure) }}</nobr>
316
- </td>
317
- <td
318
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
319
- <nobr>{{ row.f_remarks}}</nobr>
320
- </td>
321
- <td
322
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
323
- <nobr>{{ row.f_finish_date}}</nobr>
324
- </td>
325
- <td
326
- :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''"
327
- style="text-align: center;"><nobr>
328
- <div
329
- v-show="row.defname === '站点接单' && $parent.$parent.$parent.picked === 'wait' && row.f_workorder_type != '投诉单'&&row.f_workorder_type != '咨询单'">
330
- <button type="button" name="button" class="button_spacing button_search-2"
331
- @click.stop="$parent.$parent.$parent.proc(row, '结案')">结案
332
- </button>
333
- <button type="button" name="button" class="button_spacing button_search-2"
334
- @click.stop="$parent.$parent.$parent.proc(row, '工单退回')">退回
335
- </button>
336
- <button type="button" name="button" class="button_spacing button_search-2"
337
- @click.stop="$parent.$parent.$parent.proc(row, '工单下发')">下发
338
- </button>
339
- <div v-if="row.f_single_path">
340
- <button type="button" name="button" class="button_spacing button_search-2"
341
- @click.stop="$parent.$parent.$parent.showpicture(row)">抢修图片
342
- </button>
343
- </div>
344
- </div>
345
- <div
346
- v-show="row.defname === '站点接单' && $parent.$parent.$parent.picked === 'wait' && row.f_workorder_type == '投诉单'">
347
- <button type="button" name="button" class="button_spacing button_search-2"
348
- @click.stop="$parent.$parent.$parent.complanReview(row, '投诉处理')">
349
- 投诉处理
350
- </button>
351
- </div>
352
-
353
- <div
354
- v-show="row.defname === '站点接单' && $parent.$parent.$parent.picked === 'wait' && row.f_workorder_type == '咨询单'">
355
- <button type="button" name="button" class="button_spacing button_search-2"
356
- @click.stop="$parent.$parent.$parent.seekworkReview(row, '咨询处理')">
357
- 咨询处理
358
- </button>
359
- </div>
360
- </nobr></td>
361
- </template>
362
- </data-grid>
363
- </criteria-paged>
364
- </div>
365
- <modal :show.sync="editflag==='工单退回'||editflag==='工单下发'" v-ref:modal backdrop="false">
366
- <header slot="modal-header" class="modal-header">
367
- {{ editflag }}
368
- </header>
369
- <article slot="modal-body" class="modal-body">
370
- <div v-if="editflag==='工单退回'" class="form-inline">
371
- <site-back :row="selectone" @success="selfSearch()" @cancel='editflag = null'></site-back>
372
- </div>
373
- <div v-if="editflag==='工单下发'">
374
- <site-send :row="selectone" :rowlist="serlist" @success="selfSearch()" @cancel="editflag = null"></site-send>
375
- </div>
376
- </article>
377
- <footer slot="modal-footer" class="modal-footer" v-show="false">
378
- <button type="button" class="btn btn-success" @click='imgclose'>关闭</button>
379
- </footer>
380
- </modal>
381
- <modal :show.sync="editflag==='结案' || editflag==='批量结案'" v-ref:modalCase backdrop="false">
382
- <header slot="modal-header" class="modal-header">
383
- 工单结案
384
- </header>
385
- <article slot="modal-body" class="modal-body">
386
- <div class="col-sm-12 form-group">
387
- <label class="control-label col-sm-2">结案备注</label>
388
- <div class="col-sm-9">
389
- <input class="form-control" type="text" v-model="f_caseremarks"/>
390
- </div>
391
- </div>
392
- </article>
393
- <footer slot="modal-footer" class="modal-footer">
394
- <button type="button" class="btn btn-success" @click='caseok'>确定</button>
395
- <button type="button" class="btn btn-success" @click='caseclose'>关闭</button>
396
- </footer>
397
- </modal>
398
- <modal :show.sync="imgshow" v-ref:modal backdrop="true">
399
- <header slot="modal-header" class="modal-header">
400
- 在线抢修照片
401
- </header>
402
- <article slot="modal-body" class="modal-body">
403
- <div class="from-group" style="display: flex">
404
- <img-self :src="'rs/image/file/'+imgfilename" width="220" height="300"></img-self>
405
- <img-self v-if="imgfilename1" :src="'rs/image/file/'+imgfilename1" style="margin-left: 10px" width="220"
406
- height="300"></img-self>
407
- <img-self v-if="imgfilename2" :src="'rs/image/file/'+imgfilename2" style="margin-left: 10px" width="220"
408
- height="300"></img-self>
409
- </div>
410
- </article>
411
- <footer slot="modal-footer" class="modal-footer">
412
- <button type="button" class="btn btn-success" @click='imgclose'>关闭</button>
413
- </footer>
414
- </modal>
415
- <!-- 投诉单处理弹窗 -->
416
- <modal :show.sync="isComplanReview" v-ref:complanModal backdrop="false">
417
- <header slot="modal-header" class="modal-header">
418
- 投诉审核
419
- </header>
420
- <article slot="modal-body" class="modal-body">
421
- <div class="select-overspread form-horizontal auto workOrderInfo">
422
- <div class="row">
423
- <div class="col-sm-12 form-group form-input-group">
424
- <label class="font_normal_body" style="width: 10%">工单编号</label>
425
- <h5 style="padding: 0px">{{ showModalComplan.f_service_id }}</h5>
426
- </div>
427
- <div class="col-sm-12 form-input-group">
428
- <label class="font_normal_body" style="width: 10%">投诉内容</label>
429
- <textarea name="name" rows="3" v-model="showModalComplan.f_content"
430
- class="form-control ver-textarea" id="f_content" name="f_content" readonly="readonly"></textarea>
431
- </div>
432
- <div class="col-sm-4 form-group form-input-group">
433
- <label class="font_normal_body" style="width: 30%">来电电话</label>
434
- <input type="text" name="" v-model='showModalComplan.f_phone'
435
- class="form-control" readonly="readonly">
436
- </div>
437
- <div class="col-sm-4 form-group form-input-group">
438
- <label class="font_normal_body" style="width: 30%">联系人</label>
439
- <input type="text" name="" v-model='showModalComplan.f_user_name'
440
- class="form-control" readonly="readonly">
441
- </div>
442
- <div class="col-sm-4 form-group form-input-group">
443
- <label class="font_normal_body" style="width: 30%">联系电话</label>
444
- <input type="text" name="" v-model='showModalComplan.f_contact_phone'
445
- class="form-control" readonly="readonly">
446
- </div>
447
-
448
- <div class="col-sm-12 form-input-group">
449
- <label class="font_normal_body" style="width: 10%">描述</label>
450
- <textarea name="name" rows="3" v-model="showModalComplan.f_remarks"
451
- class="form-control ver-textarea" readonly="readonly"></textarea>
452
- </div>
453
- <div class="col-sm-12 form-input-group">
454
- <label class="font_normal_body" style="width: 10%">处理结果</label>
455
- <textarea name="name" rows="4" v-model="f_complaint_results"
456
- class="form-control ver-textarea"></textarea>
457
- </div>
458
- </div>
459
- </div>
460
- </article>
461
- <footer slot="modal-footer" class="modal-footer">
462
- <button type="button" name="button"
463
- class="button_search button_spacing" @click='inputCompainInfo()'>提交
464
- </button>
465
- <button type="button" name="button" style="background-color: #5ac0d9;border-radius: 4px;"
466
- class="button_spacing button_search" @click='isComplanReview=false;showModalComplan = {}'>取消
467
- </button>
468
- </footer>
469
- </modal>
470
- <!-- 咨询处理弹窗 -->
471
- <modal :show.sync="isSeekWork" v-ref:seekWorkModel backdrop="false">
472
- <header slot="modal-header" class="modal-header">
473
- 咨询审核
474
- </header>
475
- <article slot="modal-body" class="modal-body">
476
- <div class="select-overspread form-horizontal auto workOrderInfo">
477
- <div class="row">
478
- <div class="col-sm-12 form-group form-input-group">
479
- <label class="font_normal_body" style="width: 10%">工单编号</label>
480
- <h5 style="padding: 0px">{{ showModalSeekWork.f_service_id }}</h5>
481
- </div>
482
- <div class="col-sm-12 form-input-group">
483
- <label class="font_normal_body" style="width: 10%">咨询内容</label>
484
- <textarea name="name" rows="3" v-model="showModalSeekWork.f_content"
485
- class="form-control ver-textarea" id="f_content1" name="f_content" readonly="readonly"></textarea>
486
- </div>
487
- <div class="col-sm-4 form-group form-input-group">
488
- <label class="font_normal_body" style="width: 30%">来电电话</label>
489
- <input type="text" name="" v-model='showModalSeekWork.f_phone'
490
- class="form-control" readonly="readonly">
491
- </div>
492
- <div class="col-sm-4 form-group form-input-group">
493
- <label class="font_normal_body" style="width: 30%">联系人</label>
494
- <input type="text" name="" v-model='showModalSeekWork.f_user_name'
495
- class="form-control" readonly="readonly">
496
- </div>
497
- <div class="col-sm-4 form-group form-input-group">
498
- <label class="font_normal_body" style="width: 30%">联系电话</label>
499
- <input type="text" name="" v-model='showModalSeekWork.f_contact_phone'
500
- class="form-control" readonly="readonly">
501
- </div>
502
-
503
- <div class="col-sm-12 form-input-group">
504
- <label class="font_normal_body" style="width: 10%">描述</label>
505
- <textarea name="name" rows="3" v-model="showModalSeekWork.f_remarks"
506
- class="form-control ver-textarea" readonly="readonly"></textarea>
507
- </div>
508
- <div class="col-sm-12 form-input-group">
509
- <label class="font_normal_body" style="width: 10%">处理结果</label>
510
- <textarea name="name" rows="4" v-model="f_complaint_seekwork_results"
511
- class="form-control ver-textarea"></textarea>
512
- </div>
513
- </div>
514
- </div>
515
- </article>
516
- <footer slot="modal-footer" class="modal-footer">
517
-
518
- <button type="button" name="button"
519
- class="button_search button_spacing" @click='inputSeekWorkInfo()'>提交
520
- </button>
521
- <button type="button" name="button" style="background-color: #5ac0d9;border-radius: 4px;"
522
- class="button_spacing button_search" @click='isSeekWork=false;showModalSeekWork = {}'>取消
523
- </button>
524
- </footer>
525
- </modal>
526
- <progress-bar v-if="btnshow" :label="bartext" :color="barcolor" :percentage="barperc"
527
- :height="barheight"></progress-bar>
528
- </template>
529
-
530
- <script>
531
- import {PagedList, HttpResetClass} from 'vue-client'
532
-
533
- export default {
534
- title: '工单列表',
535
- data() {
536
- return {
537
- slice_areas:[],
538
- // 结案备注
539
- f_caseremarks: '',
540
- criteriaShow: false,
541
- f_complaint_results: '',
542
- serlist: [],
543
- userType:this.$appdata.getParam('用户类型')?[{label: '全部', value: ''}, ...this.$appdata.getParam('用户类型')]:[{label: '全部', value: ''}],
544
- overdays:[{label: '全部', value: ''}, {label: '一级(7天以上)', value: '一级'}, {label: '二级(7天内)', value: '二级'}],
545
- checkes: [],
546
- remakes: null,
547
- editflag: null,
548
- selectone: '',
549
- model: new PagedList('af-telephone/rs/sql/operatorService', 20,{overday:'this.overday'}),
550
- row: null,
551
- orderMan: '',
552
- checkAll: false,
553
- msgs: [],
554
- service: Object,
555
- pendingCount: 0,
556
- imgfilename: '',
557
- imgfilename1: '',
558
- imgfilename2: '',
559
- select: {
560
- defname: ''
561
- },
562
- btnshow: false,
563
- bartext: '',
564
- barperc: 0,
565
- barheight: 15,
566
- barcolor: '#7697c4',
567
- saveing:false,
568
- rowlist: [],
569
- // 待办/已办选择
570
- picked: 'wait',
571
- imgshow: false,
572
- isComplanReview: false,
573
- // defname:this.$appdata.getParam('工单状态'),
574
- searchData: {
575
- condition: {
576
- condition: '1=1',
577
- sign: '1=1'
578
- },
579
- userid: this.$login.f.name,
580
- overday: ''
581
- },
582
- excelHeaders: {
583
- 'f_workorder_type': '工单类型',
584
- 'f_service_id': '工单编号',
585
- 'f_created_date': '派单时间',
586
- 'f_slice_area':'所属片区',
587
- 'f_user_name': '用户姓名',
588
- 'f_address': '用户地址',
589
- 'f_user_type': '用户类型',
590
- 'f_contact_name': '联系人',
591
- 'f_phone': '来电电话',
592
- 'f_contact_phone': '联系电话',
593
- 'f_repairtype' : '报修类型',
594
- 'f_json': '故障明细',
595
- 'f_finish_date':'截止日期',
596
- 'f_remarks': '工单备注'
597
- },
598
- //投诉单在modal框显示的信息
599
- showModalComplan: {
600
- serviceacitivity: [{f_complaint_results: ''}]
601
- },
602
- isSeekWork: false,
603
- /*咨询单信息*/
604
- showModalSeekWork: {
605
- serviceacitivity: [{f_complaint_results: ''}]
606
- },
607
- /*咨询单结果*/
608
- f_complaint_seekwork_results: ''
609
- }
610
-
611
- },
612
- props: {
613
- user: {
614
- type: Object
615
- },
616
- maintenance: [],
617
- // serviceId : [String, Number]
618
- serviceId: '',
619
- // 工单状态 工单位置
620
- defname: {
621
- type: String
622
- }
623
- },
624
- ready() {
625
- // this.getEmp()
626
- let messageTime = 60
627
- const time = this.$appdata.getSingleValue("站点提醒时间")
628
- if (time && time > 60) {
629
- messageTime = time
630
- }
631
- setInterval(() => {
632
- const data = {
633
- condition: {
634
- condition: '1=1',
635
- sign: '1=1'
636
- },
637
- userid: this.$login.f.name
638
- }
639
- new HttpResetClass().load('post', 'af-telephone/rs/sql/operatorService', {data: data}, {
640
- resolveMsg: null,
641
- rejectMsg: null
642
- }).then(res => {
643
- if (res.data && res.data.length > 0) {
644
- this.$showMessage("您有" + res.data.length + "条工单待处理,请及时处理")
645
- }
646
- })
647
- }, messageTime * 1000)
648
- this.initSliceAreas()
649
- this.selfSearch().then(() => {
650
- this.$emit('ready')
651
- }).catch((error) => {
652
- this.$emit('error', error)
653
- })
654
- // 开启轮询查询是否由自己的工单
655
- // this.pollQuery()
656
- },
657
- watch: {
658
- 'serviceId'() {
659
- this.selfSearch()
660
- },
661
- // 待办/已办选择变化后,根据选择内容,重新设置path查询路径,进行查询
662
- 'picked'() {
663
- this.serlist = []
664
- if (this.picked) {
665
- if (this.picked === 'wait') {
666
- this.model.url = 'af-telephone/rs/sql/operatorService'
667
- } else if (this.picked === 'done') {
668
- this.model.url = 'af-telephone/rs/sql/doneService'
669
- }
670
- this.model.rows = []
671
- this.selfSearch()
672
- }
673
- }
674
- },
675
- methods: {
676
- initSliceAreas(){
677
- let criteria = {
678
- items: 'name',
679
- tablename: 't_zone',
680
- condition: `name IS NOT NULL and f_orgid = '${this.$login.f.orgid}'`,
681
- groupitem: 'name'
682
- }
683
- new HttpResetClass().load('POST', `af-telephone/rs/sql/tel_singleTable_GroupBy`, {data: criteria}, {
684
- warnMsg: null,
685
- resolveMsg: null
686
- }).then((result)=>{
687
- result.data.forEach(item => this.slice_areas.push({
688
- label: item.name,
689
- value: item.name
690
- }))
691
- })
692
- },
693
- // 结案确认
694
- async caseok(){
695
- if(this.editflag == '批量结案' && this.serlist.length > 0 && this.serlist.length <100 ){
696
- this.bartext = '正在批量结案' + this.serlist.length + '个单子'
697
- this.btnshow = true
698
- this.$showAlert('正在批量结案,请稍等!!!!!', 'warning', 2000)
699
- this.saveing = true
700
- for (var index in this.serlist) {
701
- this.barperc = ((parseInt(index) + 1) * 100) / (parseInt(this.serlist.length))
702
- let userdata = Object.assign({}, userdata, this.serlist[index])
703
- userdata.f_advice = this.f_advice
704
- let data = {
705
- model: userdata,
706
- f_caseremarks:this.f_caseremarks,
707
- loginUser: {name: this.$login.f.name, ename: this.$login.f.ename}
708
- }
709
- try {
710
- let http = new HttpResetClass()
711
- let resChannel = await http.load('POST', `af-telephone/rs/logic/serviceCase`, data, {resolveMsg: null, rejectMsg: null})
712
- } catch (e) {
713
- this.$showAlert('结案失败' + data.model.f_service_id)
714
- }
715
- }
716
- this.saveing = false
717
- this.btnshow = false
718
- this.barperc = 0
719
- this.$showMessage('批量结案' + this.serlist.length + '个单子成功', ['confirm']).then((res) => {
720
- if (res === 'confirm') {
721
- this.f_caseremarks = ''
722
- // 刷新界面
723
- this.selfSearch()
724
- }
725
- })
726
- }
727
- if(this.editflag == '结案'){
728
- // 工单结案操作
729
- let data = {model: this.selectone, loginUser: {name: this.$login.f.name, ename: this.$login.f.ename},f_caseremarks:this.f_caseremarks}
730
- this.$resetpost(`af-telephone/rs/logic/serviceCase`, data).then(() => {
731
- this.f_caseremarks = ''
732
- // 刷新界面
733
- this.selfSearch()
734
- })
735
- }
736
- },
737
- repairendAll(){
738
- //tag
739
- if (!this.$refs.paged.$refs.criteria.model.f_workorder_type){
740
- this.$showMessage('必须选择工单类型后查询')
741
- return
742
- }
743
- this.selectone={
744
- f_workorder_type:this.$refs.paged.$refs.criteria.model.f_workorder_type
745
- }
746
-
747
- if (this.checkAll){
748
- //如果全选,根据条件去查询数据
749
- let data={
750
- condition:this.model.params.condition,
751
- userid:this.$login.f.name
752
- }
753
- new HttpResetClass().load('post','af-telephone/rs/sql/operatorService',{data:data},{resolveMsg:null,rejectMsg:null}).then(res=>{
754
- const results=res.data
755
- this.rowlist=results.filter(result=>{
756
- //tag)
757
- console.log("999",result,JSON.stringify(result).indexOf('站点接单')!=-1)
758
- return JSON.stringify(result).indexOf('站点接单')!=-1
759
- })
760
- console.log(this.rowlist)
761
- //tag
762
- this.serlist=JSON.parse(JSON.stringify(this.rowlist))
763
- this.editflag ='批量结案'
764
- })
765
-
766
- }else{
767
- if (this.rowlist.length===0){
768
- this.$showMessage('请选择工单')
769
- return
770
- }
771
- //不全选,去取数据
772
- this.serlist=JSON.parse(JSON.stringify(this.rowlist))
773
- console.log("752752",this.rowlist)
774
- this.editflag ='批量结案'
775
- }
776
- },
777
- trouble (val) {
778
- let failureall=''
779
- // val=[{"f_failure_type":"抽油烟机","failurecase":[],"f_equipment":""},{"f_failure_type":"抽油烟机","failurecase":[],"f_equipment":""},{"f_failure_type":"抽油烟机","failurecase":[],"f_equipment":""}]
780
-
781
- let failure = JSON.parse(val)
782
- for (let i = 0; i <failure.length; i++) {
783
- if (failure[i].failurecase.length>0){
784
- failureall+=failure[i].f_failure_type+":"
785
- for (let j = 0; j < failure[i].failurecase.length; j++) {
786
- failureall+=failure[i].failurecase[j]
787
- if (j+1!=failure[i].failurecase.length){
788
- failureall+=","
789
- }
790
- }
791
-
792
- }else{
793
- failureall+=failure[i].f_failure_type
794
- }
795
- if (i+1!=failure.length){
796
- failureall+=';'
797
- }
798
- }
799
- return failureall
800
- },
801
- // 结案返回
802
- caseclose() {
803
- this.f_caseremarks = ''
804
- this.editflag = null
805
- },
806
- repairSendAll() {
807
- //tag
808
- if (!this.$refs.paged.$refs.criteria.model.f_workorder_type) {
809
- this.$showMessage('必须选择工单类型后查询')
810
- return
811
- }
812
- this.selectone = {
813
- f_workorder_type: this.$refs.paged.$refs.criteria.model.f_workorder_type
814
- }
815
-
816
- if (this.checkAll) {
817
- //如果全选,根据条件去查询数据
818
- let data = {
819
- condition: this.model.params.condition,
820
- userid: this.$login.f.name
821
- }
822
- new HttpResetClass().load('post', 'af-telephone/rs/sql/operatorService', {data: data}, {
823
- resolveMsg: null,
824
- rejectMsg: null
825
- }).then(res => {
826
- const results = res.data
827
- this.rowlist = results.filter(result => {
828
- //tag)
829
- console.log("999", result, JSON.stringify(result).indexOf('站点接单') != -1)
830
- return JSON.stringify(result).indexOf('站点接单') != -1
831
- })
832
- console.log(this.rowlist)
833
- //tag
834
- this.serlist = JSON.parse(JSON.stringify(this.rowlist))
835
- this.editflag = '工单下发'
836
- })
837
-
838
- } else {
839
- if (this.rowlist.length === 0) {
840
- this.$showMessage('请选择工单')
841
- return
842
- }
843
- //不全选,去取数据
844
- this.serlist = JSON.parse(JSON.stringify(this.rowlist))
845
- console.log("752752", this.rowlist)
846
- this.editflag = '工单下发'
847
- }
848
- },
849
- isChecked(v) {
850
- // 如果全选,不在的按选中算,否则,在的按选中算
851
- if (this.checkAll) {
852
- return true
853
- } else {
854
- return this.rowlist.includes(v)
855
- }
856
- },
857
-
858
- setCheckes(row) {
859
- if (!this.checkAll) {
860
- let index = this.checkes.indexOf(row.id)
861
- if (index < 0) {
862
- this.checkes.push(row.id)
863
- this.rowlist.push(row)
864
- } else {
865
- this.checkes.splice(index, 1)
866
- this.rowlist.splice(this.rowlist.findIndex(res => {
867
- return res.id === row.id
868
- }), 1)
869
- }
870
- }
871
- },
872
- hidden() {
873
- this.criteriaShow = !this.criteriaShow
874
- },
875
- // 提交投诉单内容
876
- inputCompainInfo() {
877
- if (this.f_complaint_results != '') {
878
- this.showModalComplan.serviceacitivity[0].f_complaint_results = this.f_complaint_results
879
- this.$resetpost('af-telephone/rs/logic/saveComplaintResult', {
880
- showModalComplan: this.showModalComplan,
881
- loginUser: {name: this.$login.f.name, ename: this.$login.f.ename, loginid: this.$login.f.id}
882
- }).then((res) => {
883
- this.isComplanReview = false
884
- this.showModalComplan = {}
885
- this.$refs.paged.$refs.criteria.search()
886
- })
887
- } else {
888
- //tag
889
- return this.$showAlert('请填写投诉单结果!', 'warning', 2000)
890
- }
891
-
892
- },
893
- //提交咨询单内容
894
- inputSeekWorkInfo() {
895
- if (this.f_complaint_seekwork_results != '') {
896
- this.showModalSeekWork.serviceacitivity[0].f_complaint_results = this.f_complaint_seekwork_results
897
- this.$resetpost('af-telephone/rs/logic/saveConsultResult', {
898
- model: this.showModalSeekWork,
899
- loginUser: {name: this.$login.f.name, ename: this.$login.f.ename, loginid: this.$login.f.id}
900
- }).then((res) => {
901
- this.isSeekWork = false
902
- this.showModalSeekWork = {}
903
- this.f_complaint_seekwork_results = ''
904
- this.$refs.paged.$refs.criteria.search()
905
- })
906
- } else {
907
- //tag
908
- return this.$showAlert('请填写咨询单结果!', 'warning', 2000)
909
- }
910
- },
911
- imgclose() {
912
- this.imgshow = false
913
- },
914
- //检查是否为同一类型
915
- addInList(val) {
916
- if (!this.checkInList(val)) {
917
- this.serlist.push(val)
918
- //tag
919
- } else {
920
- var copyserlist = []
921
- for (var index in this.serlist) {
922
- if (this.serlist[index].f_service_id != val.f_service_id) {
923
- copyserlist.push(this.serlist[index])
924
- }
925
- }
926
- this.serlist = copyserlist
927
- //tag
928
- }
929
- },
930
- checkInList(val) {
931
- var checkstr = false
932
- this.serlist.forEach((item) => {
933
- if (item.f_service_id == val.f_service_id) {
934
- checkstr = true
935
- }
936
- })
937
- return checkstr
938
- },
939
- isInList(val) {
940
- var checkstr = false
941
- this.serlist.forEach((item) => {
942
- if (item.f_service_id == val.f_service_id) {
943
- checkstr = true
944
- }
945
- })
946
- return checkstr
947
- },
948
- proc(selectone, type) {
949
- this.editflag = type
950
- this.selectone = selectone
951
- },
952
- complanReview(itemVal, type) {
953
- //tag
954
- this.showModalComplan = itemVal
955
- this.showModalComplan.serviceacitivity = [
956
- {f_service_acitivity_type: '投诉单', f_result_status: '已完成'}]
957
- this.showModalComplan.id_back = this.showModalComplan.id
958
- this.isComplanReview = true
959
- },
960
- seekworkReview(itemVal, type) {
961
- //tag
962
- this.showModalSeekWork = itemVal
963
- this.showModalSeekWork.serviceacitivity = [
964
- {f_service_acitivity_type: '投诉单', f_result_status: '已完成'}]
965
- this.showModalSeekWork.id_back = this.showModalSeekWork.id
966
- this.isSeekWork = true
967
- },
968
- showpicture(val) {
969
- //tag
970
- //tag)
971
- this.imgshow = true
972
- this.imgfilename = val.f_single_path
973
- this.imgfilename1 = val.f_singlea_path
974
- this.imgfilename2 = val.f_singleb_path
975
- },
976
- search(args) {
977
- this.serlist = []
978
- this.checkes = []
979
- //tag
980
- let data = {}
981
- if(args.model.overday){
982
- if(args.model.overday == '一级'){
983
- this.model.overday = ` and overday > 604800 and (f_state != '撤销' or f_state is null)`
984
- }
985
- if(args.model.overday == '二级'){
986
- this.model.overday = ` and overday <= 604800 and overday > 0 and (f_state != '撤销' or f_state is null)`
987
- }
988
- }
989
- data.condition = this.$refs.paged.$refs.criteria.condition ? this.$refs.paged.$refs.criteria.condition : '1=1'
990
- data.sign = this.$refs.paged.$refs.criteria.select ? `defname = '${this.$refs.paged.$refs.criteria.select.defname[0]}'` : '1=1'
991
- data.condition += ` and tswo.f_filiale_id = '${this.$login.f.orgid}'`
992
- this.searchData.condition = data
993
- this.searchData.overday = this.model.overday
994
- data.overday = this.model.overday
995
- this.searchData = Object.assign(this.searchData, args.model)
996
- return this.model.search(data, args.model)
997
- },
998
- clearAllCheckboxes() {
999
- const checkboxes = document.querySelectorAll('.rowCheckbox');
1000
- checkboxes.forEach(checkbox => {
1001
- checkbox.checked = false;
1002
- });
1003
- },
1004
- selfSearch() {
1005
- this.clearAllCheckboxes()
1006
- // 取消编辑状态
1007
- this.serlist = []
1008
- this.rowlist = []
1009
- this.checkes = []
1010
- this.editflag = null
1011
-
1012
- this.model.paramSource = {
1013
- userid: '\'' + this.$login.f.name + '\''
1014
- }
1015
- //tag
1016
- let data = {}
1017
- data.condition = ` 1 = 1 and tswo.f_filiale_id = '${this.$login.f.orgid}'`
1018
- data.sign = '1=1'
1019
- return this.model.search(data)
1020
- },
1021
- },
1022
- computed: {
1023
- serviceorders() {
1024
- return [{label: '全部', value: ''}, ...this.$appdata.getParam('工单类型')]
1025
- },
1026
- repairstypes() {
1027
- return [{label: '全部', value: ''}, ...this.$appdata.getParam('报修类型')]
1028
- },
1029
- defnames() {
1030
- return [{label: '全部', value: ''}, ...this.$appdata.getParam('工单状态')]
1031
- }
1032
-
1033
- }
1034
- }
1035
- </script>
1036
- <style scoped lang="less">
1037
- .workOrderInfo {
1038
- .row {
1039
- div {
1040
- margin-top: 10px;
1041
-
1042
- [readonly] {
1043
- background-color: #eeeeee;
1044
- }
1045
- }
1046
- }
1047
- }
1048
- </style>
1049
-
1
+ <template>
2
+ <div class="flex">
3
+ <work-busy :is-busy="saveing" v-show="saveing"></work-busy>
4
+ <criteria-paged :model="model" v-ref:paged>
5
+ <criteria partial='criteria' v-ref:criteria @condition-changed='$parent.search'>
6
+ <div novalidate class="form-horizontal select-overspread container-fluid auto" partial>
7
+ <div class="row">
8
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
9
+ <label class="font_normal_body" style="width: 40%">工单编号</label>
10
+ <input type="text" class="input_search" v-model="model.f_service_id" placeholder='工单编号'
11
+ condition="tswo.f_service_id like '%{}%'"
12
+ :size="model.f_service_id ? model.f_service_id.length : 6"
13
+ >
14
+ </div>
15
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
16
+ <label class="font_normal_body" style="width: 40%">用户编号</label>
17
+ <input type="text" class="input_search" v-model="model.f_userinfo_code" placeholder='用户编号'
18
+ condition="tswo.f_userinfo_code like '%{}%'"
19
+ :size="model.f_userinfo_code ? model.f_userinfo_code.length : 6"
20
+ >
21
+ </div>
22
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
23
+ <label class="font_normal_body" style="width: 40%">用户姓名</label>
24
+ <input type="text" class="input_search" v-model="model.f_user_name" placeholder='用户姓名'
25
+ condition="tswo.f_user_name like '%{}%'"
26
+ :size="model.f_user_name ? model.f_user_name.length : 6"
27
+ >
28
+ </div>
29
+ <div class="form-group col-sm-6 button-range" style="margin-right: 10px">
30
+
31
+ <button class="button_search button_spacing" @click="search(),$dispatch('search')"
32
+ style="margin-right: 9px">查询
33
+ </button>
34
+ <button class="button_search button_spacing" @click="$parent.$parent.repairSendAll()"
35
+ style="margin-right: 9px">批量下发
36
+ </button>
37
+ <button class="button_search button_spacing" @click="$parent.$parent.repairendAll()"
38
+ style="margin-right: 9px">批量结案
39
+ </button>
40
+
41
+ <export-excel-tel
42
+ :data="$parent.$parent.searchData"
43
+ :field="$parent.$parent.excelHeaders"
44
+ sqlurl="af-telephone/rs/logic/telephoneExport" sql-name="operatorService" template-name='工单导出'
45
+ :choose-col="true"></export-excel-tel>
46
+ <div style="float: right;" class="button_spacing"
47
+ :class="{'button_shrink_top':$parent.$parent.criteriaShow,'button_shrink_bottom':!$parent.$parent.criteriaShow}"
48
+ @click="$parent.$parent.hidden()"></div>
49
+
50
+ </div>
51
+ </div>
52
+ <div class="row" v-show="$parent.$parent.criteriaShow">
53
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
54
+ <label class="font_normal_body" style="width: 40%">来电电话</label>
55
+ <input type="text" class="input_search" v-model="model.f_phone" placeholder='来电电话'
56
+ condition="tswo.f_phone like '%{}%'"
57
+ :size="model.f_phone ? model.f_phone.length : 6"
58
+ >
59
+ </div>
60
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
61
+ <label class="font_normal_body" style="width: 40%">联系电话</label>
62
+ <input type="text" class="input_search" v-model="model.f_contact_phone" placeholder='联系电话'
63
+ condition="tswo.f_contact_phone = '{}'"
64
+ :size="model.f_contact_phone ? model.f_contact_phone.length : 6"
65
+ >
66
+ </div>
67
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
68
+ <label class="font_normal_body" style="width: 40%">地&emsp;&emsp;址</label>
69
+ <input type="text" class="input_search" v-model="model.f_address" placeholder='地址'
70
+ condition="tswo.f_address like '%{}%'"
71
+ :size="model.f_address ? model.f_address.length : 6"
72
+ >
73
+ </div>
74
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
75
+ <label class="font_normal_body" style="width: 40%">受&ensp;理&ensp;人</label>
76
+ <input type="text" class="input_search" v-model="model.f_attendant" placeholder='受理人'
77
+ condition="tswo.f_attendant like '%{}%'"
78
+ :size="model.f_attendant ? model.f_attendant.length : 6"
79
+ >
80
+ </div>
81
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
82
+ <label class="font_normal_body" style="width: 40%">接&ensp;单&ensp;人</label>
83
+ <input type="text" class="input_search" v-model="model.f_order_man" placeholder='接单人'
84
+ condition="tswo.f_order_man like '%{}%'"
85
+ :size="model.f_order_man ? model.f_order_man.length : 6"
86
+ >
87
+ </div>
88
+ </div>
89
+ <div class="row" v-show="$parent.$parent.criteriaShow">
90
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
91
+ <label class=" font_normal_body" for="f_workorder_type" style="width: 40%">工单类型</label>
92
+ <v-select id="f_workorder_type" :value.sync="model.f_workorder_type" :value-single="true"
93
+ v-model="model.f_workorder_type"
94
+ :options='$parent.$parent.serviceorders' placeholder='工单类型'
95
+ condition="tswo.f_workorder_type = '{}'"
96
+ close-on-select>
97
+ </v-select>
98
+ </div>
99
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
100
+ <label class=" font_normal_body" style="width: 40%">报修类型</label>
101
+ <v-select :value.sync="model.f_repairtype" :value-single="true"
102
+ v-model="model.f_repairtype"
103
+ :options='$parent.$parent.repairstypes' placeholder='报修类型'
104
+ condition="tswo.f_repairtype = '{}'"
105
+ close-on-select>
106
+ </v-select>
107
+ </div>
108
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
109
+ <label class="font_normal_body" style="width: 40%">派单时间</label>
110
+ <datepicker placeholder="起始派单时间"
111
+ :value.sync="model.f_created_date"
112
+ v-model="model.f_created_date"
113
+ :format="'yyyy-MM-dd 00:00:00'"
114
+ condition="tswo.f_created_date > '{}'"
115
+ ></datepicker>
116
+ </div>
117
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
118
+ <label class="font_normal_body" style="width: 40%">派单时间</label>
119
+ <datepicker placeholder="终止派单时间"
120
+ :value.sync="model.f_finish_date"
121
+ v-model="model.f_finish_date"
122
+ :format="'yyyy-MM-dd 23:59:59'"
123
+ condition="tswo.f_created_date < '{}'"
124
+ ></datepicker>
125
+ </div>
126
+ <div class="col-sm-2 form-group form-input-group" style="float:right;width: 15%;margin-left: 20px">
127
+ <input type="radio" id="one" value="wait" style="float: left" v-model="$parent.$parent.picked">
128
+ <label for="one" style="margin-top: 10px;float: left">待办</label>
129
+ <input type="radio" id="two" value="done" style="float: left" v-model="$parent.$parent.picked">
130
+ <label for="two" style="margin-top: 10px;float: left">已办</label>
131
+ </div>
132
+
133
+ </div>
134
+ <div class="row" v-show="$parent.$parent.criteriaShow">
135
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
136
+ <label class="font_normal_body" style="width: 40%">片&emsp;&emsp;区</label>
137
+ <v-select :value.sync="model.f_slice_area" v-model='model.f_slice_area'
138
+ :value-single="true"
139
+ :options='$parent.$parent.slice_areas' placeholder='片区'
140
+ close-on-select
141
+ condition="f_slice_area = '{}'"></v-select>
142
+ </div>
143
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
144
+ <label class=" font_normal_body" style="width: 40%">工单状态</label>
145
+ <v-select :value.sync="model.defname" :value-single="true"
146
+ v-model="model.defname"
147
+ :options='$parent.$parent.defnames' placeholder='工单状态'
148
+ condition="sa.defname = '{}'"
149
+ close-on-select>
150
+ </v-select>
151
+ </div>
152
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
153
+ <label class=" font_normal_body" style="width: 40%">用户类型</label>
154
+ <v-select :value.sync="model.f_user_type" :value-single="true"
155
+ v-model="model.f_user_type"
156
+ :options='$parent.$parent.userType' placeholder='用户类型'
157
+ condition="tswo.f_user_type = '{}'"
158
+ close-on-select>
159
+ </v-select>
160
+ </div>
161
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
162
+ <label class="font_normal_body" style="width: 40%">故障明细</label>
163
+ <input type="text" class="input_search" v-model="model.f_failure" placeholder='故障明细'
164
+ condition="tswo.failure like '%{}%'"
165
+ :size="model.f_failure ? model.f_failure.length : 6"
166
+ >
167
+ </div>
168
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
169
+ <label class="font_normal_body" style="width: 40%">工单备注</label>
170
+ <input type="text" class="input_search" v-model="model.fo_remarks" placeholder='工单备注'
171
+ condition="tswo.f_remarks like '%{}%'"
172
+ :size="model.fo_remarks ? model.fo_remarks.length : 6"
173
+ >
174
+ </div>
175
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
176
+ <label class="font_normal_body" style="width: 40%">截止日期</label>
177
+ <datepicker placeholder="起始截止时间"
178
+ :value.sync="model.f_finishstr_date"
179
+ v-model="model.f_finishstr_date"
180
+ :format="'yyyy-MM-dd 00:00:00'"
181
+ condition="tswo.f_finish_date > '{}'"
182
+ ></datepicker>
183
+ </div>
184
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
185
+ <label class="font_normal_body" style="width: 40%">截止日期</label>
186
+ <datepicker placeholder="终止截止时间"
187
+ :value.sync="model.f_finishend_date"
188
+ v-model="model.f_finishend_date"
189
+ :format="'yyyy-MM-dd 23:59:59'"
190
+ condition="tswo.f_finish_date < '{}'"
191
+ ></datepicker>
192
+ </div>
193
+ <div class="col-sm-3 form-group form-input-group" style="width: 20%">
194
+ <label class="font_normal_body" style="width: 40%" >逾期天数</label>
195
+ <v-select :value.sync="model.overday" :value-single="true" v-model="model.overday"
196
+ :options='$parent.$parent.overdays' placeholder='逾期天数'
197
+ close-on-select>
198
+ </v-select>
199
+ </div>
200
+ </div>
201
+
202
+
203
+ </div>
204
+ </criteria>
205
+ <data-grid partial='list' v-ref:grid :model="model" class="list_area table_sy"
206
+ :classname="'table tablenew table-bordered table-striped table-hover'">
207
+ <template partial='head'>
208
+ <tr>
209
+ <th>
210
+ <nobr><input type="checkbox" v-model="$parent.$parent.$parent.checkAll"/> 全选</nobr>
211
+ </th>
212
+
213
+ <th><nobr>
214
+ 工单类型
215
+ </nobr></th>
216
+ <th><nobr>
217
+ 工单编号
218
+ </nobr></th>
219
+ <th><nobr>
220
+ 派单时间
221
+ </nobr></th>
222
+ <th><nobr>
223
+ 所属片区
224
+ </nobr></th>
225
+ <th><nobr>
226
+ 用户信息
227
+ </nobr></th>
228
+ <th><nobr>
229
+ 用户类型
230
+ </nobr></th>
231
+ <th><nobr>
232
+ 来电电话
233
+ </nobr></th>
234
+ <th><nobr>
235
+ 联系电话
236
+ </nobr></th>
237
+ <th><nobr>
238
+ 工单状态
239
+ </nobr></th>
240
+ <th><nobr>
241
+ 报修类型
242
+ </nobr></th>
243
+ <th><nobr>
244
+ 报修内容
245
+ </nobr></th>
246
+ <th><nobr>
247
+ 故障明细
248
+ </nobr></th>
249
+ <th><nobr>
250
+ 工单备注
251
+ </nobr></th>
252
+ <th><nobr>
253
+ 截止日期
254
+ </nobr></th>
255
+ <th><nobr>
256
+ 操作
257
+ </nobr></th>
258
+ </tr>
259
+ </template>
260
+ <template partial='body'>
261
+ <td style="text-align: center;white-space:nowrap;"><input class="rowCheckbox" type="checkbox"
262
+ v-if="row.defname === '站点接单'"
263
+ onClick="event.cancelBubble = true"
264
+ :checked="$parent.$parent.$parent.isChecked(row.id)"
265
+ @change="$parent.$parent.$parent.setCheckes(row)"/><nobr></nobr>
266
+ </td>
267
+
268
+ <td
269
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
270
+ {{ row.f_workorder_type }}<span style="color: red" v-if="row.f_remindersign==='true'">(催单)</span>
271
+ <nobr><span style="color: red" v-if="row.f_state==='打回'">(打回)</span>
272
+ </nobr></td>
273
+ <td
274
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
275
+ <nobr>{{ row.f_service_id }}</nobr>
276
+ </td>
277
+ <td
278
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
279
+ <nobr>{{ row.f_created_date }}</nobr>
280
+ </td>
281
+ <td
282
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
283
+ <nobr>{{ row.f_slice_area }}</nobr>
284
+ </td>
285
+ <td
286
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
287
+ <nobr> {{ row.f_user_name }}&nbsp;&nbsp;&nbsp;{{ row.f_address }}&nbsp;&nbsp;&nbsp;{{ row.f_contact_name }}</nobr>
288
+ </td>
289
+ <td
290
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
291
+ <nobr> {{ row.f_user_type }}</nobr>
292
+ </td>
293
+ <td
294
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
295
+ <nobr>{{ row.f_phone }}</nobr>
296
+ </td>
297
+ <td
298
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
299
+ <nobr>{{ row.f_contact_phone }}</nobr>
300
+ </td>
301
+ <td
302
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
303
+ <nobr>{{ row.defname }}</nobr>
304
+ </td>
305
+ <td
306
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
307
+ <nobr>{{ row.f_repairtype }}</nobr>
308
+ </td>
309
+ <td
310
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
311
+ <nobr>{{ row.f_repairtype + ':' + row.f_json}}</nobr>
312
+ </td>
313
+ <td
314
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
315
+ <nobr>{{ $parent.$parent.$parent.trouble(row.failure) }}</nobr>
316
+ </td>
317
+ <td
318
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
319
+ <nobr>{{ row.f_remarks}}</nobr>
320
+ </td>
321
+ <td
322
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''">
323
+ <nobr>{{ row.f_finish_date}}</nobr>
324
+ </td>
325
+ <td
326
+ :style="Math.floor((new Date().getTime() - new Date(row.f_created_date).getTime())/1000/60/60)>3&&row.defname=='站点接单'?'background-color: #f1eecb':''"
327
+ style="text-align: center;"><nobr>
328
+ <div
329
+ v-show="row.defname === '站点接单' && $parent.$parent.$parent.picked === 'wait' && row.f_workorder_type != '投诉单'&&row.f_workorder_type != '咨询单'">
330
+ <button type="button" name="button" class="button_spacing button_search-2"
331
+ @click.stop="$parent.$parent.$parent.proc(row, '结案')">结案
332
+ </button>
333
+ <button type="button" name="button" class="button_spacing button_search-2"
334
+ @click.stop="$parent.$parent.$parent.proc(row, '工单退回')">退回
335
+ </button>
336
+ <button type="button" name="button" class="button_spacing button_search-2"
337
+ @click.stop="$parent.$parent.$parent.proc(row, '工单下发')">下发
338
+ </button>
339
+ <div v-if="row.f_single_path">
340
+ <button type="button" name="button" class="button_spacing button_search-2"
341
+ @click.stop="$parent.$parent.$parent.showpicture(row)">抢修图片
342
+ </button>
343
+ </div>
344
+ </div>
345
+ <div
346
+ v-show="row.defname === '站点接单' && $parent.$parent.$parent.picked === 'wait' && row.f_workorder_type == '投诉单'">
347
+ <button type="button" name="button" class="button_spacing button_search-2"
348
+ @click.stop="$parent.$parent.$parent.complanReview(row, '投诉处理')">
349
+ 投诉处理
350
+ </button>
351
+ </div>
352
+
353
+ <div
354
+ v-show="row.defname === '站点接单' && $parent.$parent.$parent.picked === 'wait' && row.f_workorder_type == '咨询单'">
355
+ <button type="button" name="button" class="button_spacing button_search-2"
356
+ @click.stop="$parent.$parent.$parent.seekworkReview(row, '咨询处理')">
357
+ 咨询处理
358
+ </button>
359
+ </div>
360
+ </nobr></td>
361
+ </template>
362
+ </data-grid>
363
+ </criteria-paged>
364
+ </div>
365
+ <modal :show.sync="editflag==='工单退回'||editflag==='工单下发'" v-ref:modal backdrop="false">
366
+ <header slot="modal-header" class="modal-header">
367
+ {{ editflag }}
368
+ </header>
369
+ <article slot="modal-body" class="modal-body">
370
+ <div v-if="editflag==='工单退回'" class="form-inline">
371
+ <site-back :row="selectone" @success="selfSearch()" @cancel='editflag = null'></site-back>
372
+ </div>
373
+ <div v-if="editflag==='工单下发'">
374
+ <site-send :row="selectone" :rowlist="serlist" @success="selfSearch()" @cancel="editflag = null"></site-send>
375
+ </div>
376
+ </article>
377
+ <footer slot="modal-footer" class="modal-footer" v-show="false">
378
+ <button type="button" class="btn btn-success" @click='imgclose'>关闭</button>
379
+ </footer>
380
+ </modal>
381
+ <modal :show.sync="editflag==='结案' || editflag==='批量结案'" v-ref:modalCase backdrop="false">
382
+ <header slot="modal-header" class="modal-header">
383
+ 工单结案
384
+ </header>
385
+ <article slot="modal-body" class="modal-body">
386
+ <div class="col-sm-12 form-group">
387
+ <label class="control-label col-sm-2">结案备注</label>
388
+ <div class="col-sm-9">
389
+ <input class="form-control" type="text" v-model="f_caseremarks"/>
390
+ </div>
391
+ </div>
392
+ </article>
393
+ <footer slot="modal-footer" class="modal-footer">
394
+ <button type="button" class="btn btn-success" @click='caseok'>确定</button>
395
+ <button type="button" class="btn btn-success" @click='caseclose'>关闭</button>
396
+ </footer>
397
+ </modal>
398
+ <modal :show.sync="imgshow" v-ref:modal backdrop="true">
399
+ <header slot="modal-header" class="modal-header">
400
+ 在线抢修照片
401
+ </header>
402
+ <article slot="modal-body" class="modal-body">
403
+ <div class="from-group" style="display: flex">
404
+ <img-self :src="'rs/image/file/'+imgfilename" width="220" height="300"></img-self>
405
+ <img-self v-if="imgfilename1" :src="'rs/image/file/'+imgfilename1" style="margin-left: 10px" width="220"
406
+ height="300"></img-self>
407
+ <img-self v-if="imgfilename2" :src="'rs/image/file/'+imgfilename2" style="margin-left: 10px" width="220"
408
+ height="300"></img-self>
409
+ </div>
410
+ </article>
411
+ <footer slot="modal-footer" class="modal-footer">
412
+ <button type="button" class="btn btn-success" @click='imgclose'>关闭</button>
413
+ </footer>
414
+ </modal>
415
+ <!-- 投诉单处理弹窗 -->
416
+ <modal :show.sync="isComplanReview" v-ref:complanModal backdrop="false">
417
+ <header slot="modal-header" class="modal-header">
418
+ 投诉审核
419
+ </header>
420
+ <article slot="modal-body" class="modal-body">
421
+ <div class="select-overspread form-horizontal auto workOrderInfo">
422
+ <div class="row">
423
+ <div class="col-sm-12 form-group form-input-group">
424
+ <label class="font_normal_body" style="width: 10%">工单编号</label>
425
+ <h5 style="padding: 0px">{{ showModalComplan.f_service_id }}</h5>
426
+ </div>
427
+ <div class="col-sm-12 form-input-group">
428
+ <label class="font_normal_body" style="width: 10%">投诉内容</label>
429
+ <textarea name="name" rows="3" v-model="showModalComplan.f_content"
430
+ class="form-control ver-textarea" id="f_content" name="f_content" readonly="readonly"></textarea>
431
+ </div>
432
+ <div class="col-sm-4 form-group form-input-group">
433
+ <label class="font_normal_body" style="width: 30%">来电电话</label>
434
+ <input type="text" name="" v-model='showModalComplan.f_phone'
435
+ class="form-control" readonly="readonly">
436
+ </div>
437
+ <div class="col-sm-4 form-group form-input-group">
438
+ <label class="font_normal_body" style="width: 30%">联系人</label>
439
+ <input type="text" name="" v-model='showModalComplan.f_user_name'
440
+ class="form-control" readonly="readonly">
441
+ </div>
442
+ <div class="col-sm-4 form-group form-input-group">
443
+ <label class="font_normal_body" style="width: 30%">联系电话</label>
444
+ <input type="text" name="" v-model='showModalComplan.f_contact_phone'
445
+ class="form-control" readonly="readonly">
446
+ </div>
447
+
448
+ <div class="col-sm-12 form-input-group">
449
+ <label class="font_normal_body" style="width: 10%">描述</label>
450
+ <textarea name="name" rows="3" v-model="showModalComplan.f_remarks"
451
+ class="form-control ver-textarea" readonly="readonly"></textarea>
452
+ </div>
453
+ <div class="col-sm-12 form-input-group">
454
+ <label class="font_normal_body" style="width: 10%">处理结果</label>
455
+ <textarea name="name" rows="4" v-model="f_complaint_results"
456
+ class="form-control ver-textarea"></textarea>
457
+ </div>
458
+ </div>
459
+ </div>
460
+ </article>
461
+ <footer slot="modal-footer" class="modal-footer">
462
+ <button type="button" name="button"
463
+ class="button_search button_spacing" @click='inputCompainInfo()'>提交
464
+ </button>
465
+ <button type="button" name="button" style="background-color: #5ac0d9;border-radius: 4px;"
466
+ class="button_spacing button_search" @click='isComplanReview=false;showModalComplan = {}'>取消
467
+ </button>
468
+ </footer>
469
+ </modal>
470
+ <!-- 咨询处理弹窗 -->
471
+ <modal :show.sync="isSeekWork" v-ref:seekWorkModel backdrop="false">
472
+ <header slot="modal-header" class="modal-header">
473
+ 咨询审核
474
+ </header>
475
+ <article slot="modal-body" class="modal-body">
476
+ <div class="select-overspread form-horizontal auto workOrderInfo">
477
+ <div class="row">
478
+ <div class="col-sm-12 form-group form-input-group">
479
+ <label class="font_normal_body" style="width: 10%">工单编号</label>
480
+ <h5 style="padding: 0px">{{ showModalSeekWork.f_service_id }}</h5>
481
+ </div>
482
+ <div class="col-sm-12 form-input-group">
483
+ <label class="font_normal_body" style="width: 10%">咨询内容</label>
484
+ <textarea name="name" rows="3" v-model="showModalSeekWork.f_content"
485
+ class="form-control ver-textarea" id="f_content1" name="f_content" readonly="readonly"></textarea>
486
+ </div>
487
+ <div class="col-sm-4 form-group form-input-group">
488
+ <label class="font_normal_body" style="width: 30%">来电电话</label>
489
+ <input type="text" name="" v-model='showModalSeekWork.f_phone'
490
+ class="form-control" readonly="readonly">
491
+ </div>
492
+ <div class="col-sm-4 form-group form-input-group">
493
+ <label class="font_normal_body" style="width: 30%">联系人</label>
494
+ <input type="text" name="" v-model='showModalSeekWork.f_user_name'
495
+ class="form-control" readonly="readonly">
496
+ </div>
497
+ <div class="col-sm-4 form-group form-input-group">
498
+ <label class="font_normal_body" style="width: 30%">联系电话</label>
499
+ <input type="text" name="" v-model='showModalSeekWork.f_contact_phone'
500
+ class="form-control" readonly="readonly">
501
+ </div>
502
+
503
+ <div class="col-sm-12 form-input-group">
504
+ <label class="font_normal_body" style="width: 10%">描述</label>
505
+ <textarea name="name" rows="3" v-model="showModalSeekWork.f_remarks"
506
+ class="form-control ver-textarea" readonly="readonly"></textarea>
507
+ </div>
508
+ <div class="col-sm-12 form-input-group">
509
+ <label class="font_normal_body" style="width: 10%">处理结果</label>
510
+ <textarea name="name" rows="4" v-model="f_complaint_seekwork_results"
511
+ class="form-control ver-textarea"></textarea>
512
+ </div>
513
+ </div>
514
+ </div>
515
+ </article>
516
+ <footer slot="modal-footer" class="modal-footer">
517
+
518
+ <button type="button" name="button"
519
+ class="button_search button_spacing" @click='inputSeekWorkInfo()'>提交
520
+ </button>
521
+ <button type="button" name="button" style="background-color: #5ac0d9;border-radius: 4px;"
522
+ class="button_spacing button_search" @click='isSeekWork=false;showModalSeekWork = {}'>取消
523
+ </button>
524
+ </footer>
525
+ </modal>
526
+ <progress-bar v-if="btnshow" :label="bartext" :color="barcolor" :percentage="barperc"
527
+ :height="barheight"></progress-bar>
528
+ </template>
529
+
530
+ <script>
531
+ import {PagedList, HttpResetClass} from 'vue-client'
532
+
533
+ export default {
534
+ title: '工单列表',
535
+ data() {
536
+ return {
537
+ slice_areas:[],
538
+ // 结案备注
539
+ f_caseremarks: '',
540
+ criteriaShow: false,
541
+ f_complaint_results: '',
542
+ serlist: [],
543
+ userType:this.$appdata.getParam('用户类型')?[{label: '全部', value: ''}, ...this.$appdata.getParam('用户类型')]:[{label: '全部', value: ''}],
544
+ overdays:[{label: '全部', value: ''}, {label: '一级(7天以上)', value: '一级'}, {label: '二级(7天内)', value: '二级'}],
545
+ checkes: [],
546
+ remakes: null,
547
+ editflag: null,
548
+ selectone: '',
549
+ model: new PagedList('af-telephone/rs/sql/operatorService', 20,{overday:'this.overday'}),
550
+ row: null,
551
+ orderMan: '',
552
+ checkAll: false,
553
+ msgs: [],
554
+ service: Object,
555
+ pendingCount: 0,
556
+ imgfilename: '',
557
+ imgfilename1: '',
558
+ imgfilename2: '',
559
+ select: {
560
+ defname: ''
561
+ },
562
+ btnshow: false,
563
+ bartext: '',
564
+ barperc: 0,
565
+ barheight: 15,
566
+ barcolor: '#7697c4',
567
+ saveing:false,
568
+ rowlist: [],
569
+ // 待办/已办选择
570
+ picked: 'wait',
571
+ imgshow: false,
572
+ isComplanReview: false,
573
+ // defname:this.$appdata.getParam('工单状态'),
574
+ searchData: {
575
+ condition: {
576
+ condition: '1=1',
577
+ sign: '1=1'
578
+ },
579
+ userid: this.$login.f.name,
580
+ overday: ''
581
+ },
582
+ excelHeaders: {
583
+ 'f_workorder_type': '工单类型',
584
+ 'f_service_id': '工单编号',
585
+ 'f_created_date': '派单时间',
586
+ 'f_slice_area':'所属片区',
587
+ 'f_user_name': '用户姓名',
588
+ 'f_address': '用户地址',
589
+ 'f_user_type': '用户类型',
590
+ 'f_contact_name': '联系人',
591
+ 'f_phone': '来电电话',
592
+ 'f_contact_phone': '联系电话',
593
+ 'f_repairtype' : '报修类型',
594
+ 'f_json': '故障明细',
595
+ 'f_finish_date':'截止日期',
596
+ 'f_remarks': '工单备注'
597
+ },
598
+ //投诉单在modal框显示的信息
599
+ showModalComplan: {
600
+ serviceacitivity: [{f_complaint_results: ''}]
601
+ },
602
+ isSeekWork: false,
603
+ /*咨询单信息*/
604
+ showModalSeekWork: {
605
+ serviceacitivity: [{f_complaint_results: ''}]
606
+ },
607
+ /*咨询单结果*/
608
+ f_complaint_seekwork_results: ''
609
+ }
610
+
611
+ },
612
+ props: {
613
+ user: {
614
+ type: Object
615
+ },
616
+ maintenance: [],
617
+ // serviceId : [String, Number]
618
+ serviceId: '',
619
+ // 工单状态 工单位置
620
+ defname: {
621
+ type: String
622
+ }
623
+ },
624
+ ready() {
625
+ // this.getEmp()
626
+ let messageTime = 60
627
+ const time = this.$appdata.getSingleValue("站点提醒时间")
628
+ if (time && time > 60) {
629
+ messageTime = time
630
+ }
631
+ setInterval(() => {
632
+ const data = {
633
+ condition: {
634
+ condition: '1=1',
635
+ sign: '1=1'
636
+ },
637
+ userid: this.$login.f.name
638
+ }
639
+ new HttpResetClass().load('post', 'af-telephone/rs/sql/operatorService', {data: data}, {
640
+ resolveMsg: null,
641
+ rejectMsg: null
642
+ }).then(res => {
643
+ if (res.data && res.data.length > 0) {
644
+ this.$showMessage("您有" + res.data.length + "条工单待处理,请及时处理")
645
+ }
646
+ })
647
+ }, messageTime * 1000)
648
+ this.initSliceAreas()
649
+ this.selfSearch().then(() => {
650
+ this.$emit('ready')
651
+ }).catch((error) => {
652
+ this.$emit('error', error)
653
+ })
654
+ // 开启轮询查询是否由自己的工单
655
+ // this.pollQuery()
656
+ },
657
+ watch: {
658
+ 'serviceId'() {
659
+ this.selfSearch()
660
+ },
661
+ // 待办/已办选择变化后,根据选择内容,重新设置path查询路径,进行查询
662
+ 'picked'() {
663
+ this.serlist = []
664
+ if (this.picked) {
665
+ if (this.picked === 'wait') {
666
+ this.model.url = 'af-telephone/rs/sql/operatorService'
667
+ } else if (this.picked === 'done') {
668
+ this.model.url = 'af-telephone/rs/sql/doneService'
669
+ }
670
+ this.model.rows = []
671
+ this.selfSearch()
672
+ }
673
+ }
674
+ },
675
+ methods: {
676
+ initSliceAreas(){
677
+ let criteria = {
678
+ items: 'name',
679
+ tablename: 't_zone',
680
+ condition: `name IS NOT NULL and f_orgid = '${this.$login.f.orgid}'`,
681
+ groupitem: 'name'
682
+ }
683
+ new HttpResetClass().load('POST', `af-telephone/rs/sql/tel_singleTable_GroupBy`, {data: criteria}, {
684
+ warnMsg: null,
685
+ resolveMsg: null
686
+ }).then((result)=>{
687
+ result.data.forEach(item => this.slice_areas.push({
688
+ label: item.name,
689
+ value: item.name
690
+ }))
691
+ })
692
+ },
693
+ // 结案确认
694
+ async caseok(){
695
+ if(this.editflag == '批量结案' && this.serlist.length > 0 && this.serlist.length <100 ){
696
+ this.bartext = '正在批量结案' + this.serlist.length + '个单子'
697
+ this.btnshow = true
698
+ this.$showAlert('正在批量结案,请稍等!!!!!', 'warning', 2000)
699
+ this.saveing = true
700
+ for (var index in this.serlist) {
701
+ this.barperc = ((parseInt(index) + 1) * 100) / (parseInt(this.serlist.length))
702
+ let userdata = Object.assign({}, userdata, this.serlist[index])
703
+ userdata.f_advice = this.f_advice
704
+ let data = {
705
+ model: userdata,
706
+ f_caseremarks:this.f_caseremarks,
707
+ loginUser: {name: this.$login.f.name, ename: this.$login.f.ename}
708
+ }
709
+ try {
710
+ let http = new HttpResetClass()
711
+ let resChannel = await http.load('POST', `af-telephone/rs/logic/serviceCase`, data, {resolveMsg: null, rejectMsg: null})
712
+ } catch (e) {
713
+ this.$showAlert('结案失败' + data.model.f_service_id)
714
+ }
715
+ }
716
+ this.saveing = false
717
+ this.btnshow = false
718
+ this.barperc = 0
719
+ this.$showMessage('批量结案' + this.serlist.length + '个单子成功', ['confirm']).then((res) => {
720
+ if (res === 'confirm') {
721
+ this.f_caseremarks = ''
722
+ // 刷新界面
723
+ this.selfSearch()
724
+ }
725
+ })
726
+ }
727
+ if(this.editflag == '结案'){
728
+ // 工单结案操作
729
+ let data = {model: this.selectone, loginUser: {name: this.$login.f.name, ename: this.$login.f.ename},f_caseremarks:this.f_caseremarks}
730
+ this.$resetpost(`af-telephone/rs/logic/serviceCase`, data).then(() => {
731
+ this.f_caseremarks = ''
732
+ // 刷新界面
733
+ this.selfSearch()
734
+ })
735
+ }
736
+ },
737
+ repairendAll(){
738
+ //tag
739
+ if (!this.$refs.paged.$refs.criteria.model.f_workorder_type){
740
+ this.$showMessage('必须选择工单类型后查询')
741
+ return
742
+ }
743
+ this.selectone={
744
+ f_workorder_type:this.$refs.paged.$refs.criteria.model.f_workorder_type
745
+ }
746
+
747
+ if (this.checkAll){
748
+ //如果全选,根据条件去查询数据
749
+ let data={
750
+ condition:this.model.params.condition,
751
+ userid:this.$login.f.name
752
+ }
753
+ new HttpResetClass().load('post','af-telephone/rs/sql/operatorService',{data:data},{resolveMsg:null,rejectMsg:null}).then(res=>{
754
+ const results=res.data
755
+ this.rowlist=results.filter(result=>{
756
+ //tag)
757
+ console.log("999",result,JSON.stringify(result).indexOf('站点接单')!=-1)
758
+ return JSON.stringify(result).indexOf('站点接单')!=-1
759
+ })
760
+ console.log(this.rowlist)
761
+ //tag
762
+ this.serlist=JSON.parse(JSON.stringify(this.rowlist))
763
+ this.editflag ='批量结案'
764
+ })
765
+
766
+ }else{
767
+ if (this.rowlist.length===0){
768
+ this.$showMessage('请选择工单')
769
+ return
770
+ }
771
+ //不全选,去取数据
772
+ this.serlist=JSON.parse(JSON.stringify(this.rowlist))
773
+ console.log("752752",this.rowlist)
774
+ this.editflag ='批量结案'
775
+ }
776
+ },
777
+ trouble (val) {
778
+ let failureall=''
779
+ // val=[{"f_failure_type":"抽油烟机","failurecase":[],"f_equipment":""},{"f_failure_type":"抽油烟机","failurecase":[],"f_equipment":""},{"f_failure_type":"抽油烟机","failurecase":[],"f_equipment":""}]
780
+
781
+ let failure = JSON.parse(val)
782
+ for (let i = 0; i <failure.length; i++) {
783
+ if (failure[i].failurecase.length>0){
784
+ failureall+=failure[i].f_failure_type+":"
785
+ for (let j = 0; j < failure[i].failurecase.length; j++) {
786
+ failureall+=failure[i].failurecase[j]
787
+ if (j+1!=failure[i].failurecase.length){
788
+ failureall+=","
789
+ }
790
+ }
791
+
792
+ }else{
793
+ failureall+=failure[i].f_failure_type
794
+ }
795
+ if (i+1!=failure.length){
796
+ failureall+=';'
797
+ }
798
+ }
799
+ return failureall
800
+ },
801
+ // 结案返回
802
+ caseclose() {
803
+ this.f_caseremarks = ''
804
+ this.editflag = null
805
+ },
806
+ repairSendAll() {
807
+ //tag
808
+ if (!this.$refs.paged.$refs.criteria.model.f_workorder_type) {
809
+ this.$showMessage('必须选择工单类型后查询')
810
+ return
811
+ }
812
+ this.selectone = {
813
+ f_workorder_type: this.$refs.paged.$refs.criteria.model.f_workorder_type
814
+ }
815
+
816
+ if (this.checkAll) {
817
+ //如果全选,根据条件去查询数据
818
+ let data = {
819
+ condition: this.model.params.condition,
820
+ userid: this.$login.f.name
821
+ }
822
+ new HttpResetClass().load('post', 'af-telephone/rs/sql/operatorService', {data: data}, {
823
+ resolveMsg: null,
824
+ rejectMsg: null
825
+ }).then(res => {
826
+ const results = res.data
827
+ this.rowlist = results.filter(result => {
828
+ //tag)
829
+ console.log("999", result, JSON.stringify(result).indexOf('站点接单') != -1)
830
+ return JSON.stringify(result).indexOf('站点接单') != -1
831
+ })
832
+ console.log(this.rowlist)
833
+ //tag
834
+ this.serlist = JSON.parse(JSON.stringify(this.rowlist))
835
+ this.editflag = '工单下发'
836
+ })
837
+
838
+ } else {
839
+ if (this.rowlist.length === 0) {
840
+ this.$showMessage('请选择工单')
841
+ return
842
+ }
843
+ //不全选,去取数据
844
+ this.serlist = JSON.parse(JSON.stringify(this.rowlist))
845
+ console.log("752752", this.rowlist)
846
+ this.editflag = '工单下发'
847
+ }
848
+ },
849
+ isChecked(v) {
850
+ // 如果全选,不在的按选中算,否则,在的按选中算
851
+ if (this.checkAll) {
852
+ return true
853
+ } else {
854
+ return this.rowlist.includes(v)
855
+ }
856
+ },
857
+
858
+ setCheckes(row) {
859
+ if (!this.checkAll) {
860
+ let index = this.checkes.indexOf(row.id)
861
+ if (index < 0) {
862
+ this.checkes.push(row.id)
863
+ this.rowlist.push(row)
864
+ } else {
865
+ this.checkes.splice(index, 1)
866
+ this.rowlist.splice(this.rowlist.findIndex(res => {
867
+ return res.id === row.id
868
+ }), 1)
869
+ }
870
+ }
871
+ },
872
+ hidden() {
873
+ this.criteriaShow = !this.criteriaShow
874
+ },
875
+ // 提交投诉单内容
876
+ inputCompainInfo() {
877
+ if (this.f_complaint_results != '') {
878
+ this.showModalComplan.serviceacitivity[0].f_complaint_results = this.f_complaint_results
879
+ this.$resetpost('af-telephone/rs/logic/saveComplaintResult', {
880
+ showModalComplan: this.showModalComplan,
881
+ loginUser: {name: this.$login.f.name, ename: this.$login.f.ename, loginid: this.$login.f.id}
882
+ }).then((res) => {
883
+ this.isComplanReview = false
884
+ this.showModalComplan = {}
885
+ this.$refs.paged.$refs.criteria.search()
886
+ })
887
+ } else {
888
+ //tag
889
+ return this.$showAlert('请填写投诉单结果!', 'warning', 2000)
890
+ }
891
+
892
+ },
893
+ //提交咨询单内容
894
+ inputSeekWorkInfo() {
895
+ if (this.f_complaint_seekwork_results != '') {
896
+ this.showModalSeekWork.serviceacitivity[0].f_complaint_results = this.f_complaint_seekwork_results
897
+ this.$resetpost('af-telephone/rs/logic/saveConsultResult', {
898
+ model: this.showModalSeekWork,
899
+ loginUser: {name: this.$login.f.name, ename: this.$login.f.ename, loginid: this.$login.f.id}
900
+ }).then((res) => {
901
+ this.isSeekWork = false
902
+ this.showModalSeekWork = {}
903
+ this.f_complaint_seekwork_results = ''
904
+ this.$refs.paged.$refs.criteria.search()
905
+ })
906
+ } else {
907
+ //tag
908
+ return this.$showAlert('请填写咨询单结果!', 'warning', 2000)
909
+ }
910
+ },
911
+ imgclose() {
912
+ this.imgshow = false
913
+ },
914
+ //检查是否为同一类型
915
+ addInList(val) {
916
+ if (!this.checkInList(val)) {
917
+ this.serlist.push(val)
918
+ //tag
919
+ } else {
920
+ var copyserlist = []
921
+ for (var index in this.serlist) {
922
+ if (this.serlist[index].f_service_id != val.f_service_id) {
923
+ copyserlist.push(this.serlist[index])
924
+ }
925
+ }
926
+ this.serlist = copyserlist
927
+ //tag
928
+ }
929
+ },
930
+ checkInList(val) {
931
+ var checkstr = false
932
+ this.serlist.forEach((item) => {
933
+ if (item.f_service_id == val.f_service_id) {
934
+ checkstr = true
935
+ }
936
+ })
937
+ return checkstr
938
+ },
939
+ isInList(val) {
940
+ var checkstr = false
941
+ this.serlist.forEach((item) => {
942
+ if (item.f_service_id == val.f_service_id) {
943
+ checkstr = true
944
+ }
945
+ })
946
+ return checkstr
947
+ },
948
+ proc(selectone, type) {
949
+ this.editflag = type
950
+ this.selectone = selectone
951
+ },
952
+ complanReview(itemVal, type) {
953
+ //tag
954
+ this.showModalComplan = itemVal
955
+ this.showModalComplan.serviceacitivity = [
956
+ {f_service_acitivity_type: '投诉单', f_result_status: '已完成'}]
957
+ this.showModalComplan.id_back = this.showModalComplan.id
958
+ this.isComplanReview = true
959
+ },
960
+ seekworkReview(itemVal, type) {
961
+ //tag
962
+ this.showModalSeekWork = itemVal
963
+ this.showModalSeekWork.serviceacitivity = [
964
+ {f_service_acitivity_type: '投诉单', f_result_status: '已完成'}]
965
+ this.showModalSeekWork.id_back = this.showModalSeekWork.id
966
+ this.isSeekWork = true
967
+ },
968
+ showpicture(val) {
969
+ //tag
970
+ //tag)
971
+ this.imgshow = true
972
+ this.imgfilename = val.f_single_path
973
+ this.imgfilename1 = val.f_singlea_path
974
+ this.imgfilename2 = val.f_singleb_path
975
+ },
976
+ search(args) {
977
+ this.serlist = []
978
+ this.checkes = []
979
+ //tag
980
+ let data = {}
981
+ if(args.model.overday){
982
+ if(args.model.overday == '一级'){
983
+ this.model.overday = ` and overday > 604800 and (f_state != '撤销' or f_state is null)`
984
+ }
985
+ if(args.model.overday == '二级'){
986
+ this.model.overday = ` and overday <= 604800 and overday > 0 and (f_state != '撤销' or f_state is null)`
987
+ }
988
+ }
989
+ data.condition = this.$refs.paged.$refs.criteria.condition ? this.$refs.paged.$refs.criteria.condition : '1=1'
990
+ data.sign = this.$refs.paged.$refs.criteria.select ? `defname = '${this.$refs.paged.$refs.criteria.select.defname[0]}'` : '1=1'
991
+ data.condition += ` and tswo.f_filiale_id = '${this.$login.f.orgid}'`
992
+ this.searchData.condition = data
993
+ this.searchData.overday = this.model.overday
994
+ data.overday = this.model.overday
995
+ this.searchData = Object.assign(this.searchData, args.model)
996
+ return this.model.search(data, args.model)
997
+ },
998
+ clearAllCheckboxes() {
999
+ const checkboxes = document.querySelectorAll('.rowCheckbox');
1000
+ checkboxes.forEach(checkbox => {
1001
+ checkbox.checked = false;
1002
+ });
1003
+ },
1004
+ selfSearch() {
1005
+ this.clearAllCheckboxes()
1006
+ // 取消编辑状态
1007
+ this.serlist = []
1008
+ this.rowlist = []
1009
+ this.checkes = []
1010
+ this.editflag = null
1011
+
1012
+ this.model.paramSource = {
1013
+ userid: '\'' + this.$login.f.name + '\''
1014
+ }
1015
+ //tag
1016
+ let data = {}
1017
+ data.condition = ` 1 = 1 and tswo.f_filiale_id = '${this.$login.f.orgid}'`
1018
+ data.sign = '1=1'
1019
+ return this.model.search(data)
1020
+ },
1021
+ },
1022
+ computed: {
1023
+ serviceorders() {
1024
+ return [{label: '全部', value: ''}, ...this.$appdata.getParam('工单类型')]
1025
+ },
1026
+ repairstypes() {
1027
+ return [{label: '全部', value: ''}, ...this.$appdata.getParam('报修类型')]
1028
+ },
1029
+ defnames() {
1030
+ return [{label: '全部', value: ''}, ...this.$appdata.getParam('工单状态')]
1031
+ }
1032
+
1033
+ }
1034
+ }
1035
+ </script>
1036
+ <style scoped lang="less">
1037
+ .workOrderInfo {
1038
+ .row {
1039
+ div {
1040
+ margin-top: 10px;
1041
+
1042
+ [readonly] {
1043
+ background-color: #eeeeee;
1044
+ }
1045
+ }
1046
+ }
1047
+ }
1048
+ </style>
1049
+