apply-clients 5.0.35-ezhou-16 → 5.0.35-ezhou-18

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 (20) hide show
  1. package/package.json +1 -1
  2. package/src/apply.js +1 -2
  3. package/src/components/product/EngineeringManagement/EngineerUpload.vue +304 -304
  4. package/src/components/product/EngineeringManagement/EngineeringSelect.vue +586 -586
  5. package/src/components/product/EngineeringSupervisory/EngineeringApplyStopInfo.vue +281 -281
  6. package/src/components/product/EngineeringSupervisory/EngineeringSupervisoryControl.vue +132 -132
  7. package/src/components/product/EngineeringSupervisory/EngineeringSupervisoryList.vue +340 -340
  8. package/src/components/product/EngineeringSupervisory/EngineeringSupervisoryServiceControl.vue +490 -490
  9. package/src/components/product/Function/InstallInfoSelect.vue +255 -255
  10. package/src/components/product/Function/functions/BuyerMessage.vue +512 -512
  11. package/src/components/product/Overview/addMaterialScience.vue +217 -217
  12. package/src/components/product/Process/ExplorationSelect.vue +805 -805
  13. package/src/components/product/Process/Processes/Service/ApplyChargeSearch.vue +405 -405
  14. package/src/components/product/Process/Processes/Service/ServiceControl.vue +2285 -2285
  15. package/src/components/product/Process/Processes/selectUserinfo.vue +13 -11
  16. package/src/components/product/Supervisory/Service/SupervisoryServiceControl.vue +556 -556
  17. package/src/components/product/Supervisory/SupervisoryList.vue +435 -435
  18. package/src/components/product/report/ChargeMoneyReport.vue +150 -136
  19. package/src/components/product/stopInfo/ApplyStopInfo.vue +281 -281
  20. package/src/ezhouAndroid.js +48 -48
@@ -1,586 +1,586 @@
1
- <template>
2
- <div class="d1">
3
- <div class="left col-sm-12">
4
- <criteria-paged :model="model" v-ref:cp>
5
- <criteria partial='criteria' @condition-changed='search' v-ref:cri style="padding: 20px;background-color: #f6f6f6;">
6
- <form novalidate class="" partial>
7
- <div class="col-sm-12">
8
- <div class="col-sm-2">
9
- <label class="col-sm-4 control-label">联&nbsp;&nbsp;系&nbsp;人</label>
10
- <div class="col-sm-8">
11
- <input type="text" class="form-control" placeholder='联系人' v-model="model.f_user_name"
12
- v-on:keyup.enter="search"
13
- condition="f_user_name like '{}%'">
14
- </div>
15
- </div>
16
- <div class="col-sm-2">
17
- <label class="col-sm-4 control-label">工程编号</label>
18
- <div class="col-sm-8">
19
- <input type="text" class="form-control" :options="$parent.$parent.fapplytype" placeholder='报建编号' v-model="model.f_apply_num"
20
- v-on:keyup.enter="search"
21
- condition="f_apply_num like '{}%'">
22
- </div>
23
- </div>
24
- <div class="col-sm-2">
25
- <label class="col-sm-4 control-label">工程地址</label>
26
- <div class="col-sm-8">
27
- <input type="text" class="form-control" placeholder='用户地址' v-model="model.f_address"
28
- v-on:keyup.enter="search"
29
- condition="f_address like '{}%'">
30
- </div>
31
- </div>
32
- <div class="col-sm-3 " style="width:30%">
33
- <button class="btn btn-primary btn-sm width-80" type="button" @click="$parent.$parent.searchNow(),$parent.$parent.close()" style="margin-left:5%">
34
- <span class="glyphicon glyphicon-search"></span>{{$parent.$parent.button_name}}
35
- </button>
36
- <button class="btn-primary btn btn-sm" @click.prevent="$parent.$parent.clear()">清空</button>
37
- <button class="btn btn-primary btn-sm" type="button" v-show="$parent.$parent.startFlowonce"
38
- @click="$parent.$parent.addactive('踏勘')">
39
- <span class="glyphicon glyphicon-plus" ></span>新增流程
40
- </button>
41
- </div>
42
-
43
-
44
- </div>
45
- <div class="col-sm-12 " style="margin-top:5px">
46
- <div class="col-sm-2 ">
47
- <label for="startDate" class="col-sm-4 control-label">开始日期</label>
48
- <div class="col-sm-8">
49
- <datepicker @change="$dispatch('setQueryCondition',model)" id="startDate" placeholder="开始日期"
50
- style="display: block;"
51
- v-model="model.startDate"
52
- :value.sync="model.startDate"
53
- :format="'yyyy-MM-dd HH:mm:ss'"
54
- :show-reset-button="true"
55
- condition="f_apply_date >= '{}'">
56
- </datepicker>
57
- </div>
58
- </div>
59
-
60
- <div class="col-sm-2 ">
61
- <label for="startDate" class="col-sm-4 control-label">终止日期</label>
62
- <div class="col-sm-8">
63
- <datepicker @change="$dispatch('setQueryCondition',model)" id="endDate" placeholder="终止日期"
64
- style="display: block;"
65
- v-model="model.endDate"
66
- :value.sync="model.endDate"
67
- :format="'yyyy-MM-dd HH:mm:ss'"
68
- :show-reset-button="true"
69
- condition="f_apply_date <= '{}'">
70
- </datepicker>
71
- </div>
72
-
73
- </div>
74
- <div class="col-sm-2">
75
- <label class="col-sm-4 control-label">流程状态</label>
76
- <div class="col-sm-8">
77
- <v-select style="min-width: 100%;" @change="$dispatch('setQueryCondition',model)" :options="$parent.$parent.alloptions"
78
- condition="defname = '{}'" placeholder='流程状态'
79
- v-model="model.defname" :value.sync="model.defname" close-on-select>
80
- </v-select>
81
- </div>
82
- </div>
83
-
84
- <div class="col-sm-2" style="float: left">
85
- <label class="col-sm-4 control-label">工程来源</label>
86
- <div class="col-sm-8">
87
- <v-select style="min-width: 100%;" @change="$dispatch('setQueryCondition',model)" :options="[{label:'全部',value:''},...this.$appdata.getParam('报装来源')]"
88
- condition="f_apply_source = '{}'" placeholder='工程来源'
89
- v-model="model.f_apply_source" :value.sync="model.f_apply_source" close-on-select>
90
- </v-select>
91
- </div>
92
- </div>
93
- <div class="col-sm-2">
94
- <label class="col-sm-4 control-label ">用户类型</label>
95
- <div class="col-sm-8">
96
- <v-select :options="$parent.$parent.usertype" placeholder='用户类型' condition="f_user_type like '{}'"
97
- :width="100" style="width:100%"
98
- v-model="model.f_user_type" :value.sync="model.f_user_type" close-on-select>
99
- </v-select>
100
- </div>
101
- </div>
102
-
103
- </div>
104
- <div class="col-sm-12 " style="margin-top:5px">
105
-
106
- </div>
107
-
108
-
109
- <!--<div class="col-sm-1">-->
110
- <!--<button class="btn btn-primary btn-sm" type="button" @click="$parent.$parent.modify()"><span-->
111
- <!--class="glyphicon glyphicon-plus"></span>改装登记-->
112
- <!--</button>-->
113
- <!--</div>-->
114
- <!--</div>-->
115
-
116
- </form>
117
- </criteria>
118
- <data-grid :model="model" partial='list' v-ref:grid class="data-grid" is-fixed='false' style="overflow-x:auto">
119
- <template partial='head'>
120
- <tr class="title">
121
- <th>
122
- <nobr>序号</nobr>
123
- </th>
124
- <th>
125
- <nobr>来源</nobr>
126
- </th>
127
- <th>
128
- <nobr>当前状态</nobr>
129
- </th>
130
- <th>
131
- <nobr>工程编号</nobr>
132
- </th>
133
- <th>
134
- <nobr>业务类型</nobr>
135
- </th>
136
- <th>
137
- <nobr>联系人</nobr>
138
- </th>
139
- <th>
140
- <nobr>用户类型</nobr>
141
- </th>
142
- <th>
143
- <nobr>电话</nobr>
144
- </th>
145
- <th>
146
- <nobr>地址</nobr>
147
- </th>
148
- <th>
149
- <nobr>流程状态</nobr>
150
- </th>
151
- <th>
152
- <nobr>报建类型</nobr>
153
- </th>
154
- <th>
155
- <nobr>报建日期</nobr>
156
- </th>
157
- <th>
158
- <nobr>操作</nobr>
159
- </th>
160
- </tr>
161
- </template>
162
- <template partial='body'>
163
- <tr >
164
- <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
165
- <nobr><font>{{$index+1}}</font></nobr>
166
- </td>
167
- <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
168
- <nobr><font>{{row.f_apply_source}}</font></nobr>
169
- </td>
170
- <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
171
- <nobr><font>{{row.f_sub_state!='完工' ? '未完工' :'完工'}}</font></nobr>
172
- </td>
173
- <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
174
- <nobr><font>{{row.f_apply_num}}</font></nobr>
175
- </td>
176
- <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
177
- <nobr><font>{{row.f_work_type}}</font></nobr>
178
- </td>
179
- <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
180
- <nobr><font>{{row.f_user_name}}</font></nobr>
181
- </td>
182
- <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
183
- <nobr><font>{{row.f_user_type}}</font></nobr>
184
- </td>
185
- <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
186
- <nobr><font>{{row.f_phone}}</font></nobr>
187
- </td>
188
- <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
189
- <nobr><font>{{row.f_address}}</font></nobr>
190
- </td>
191
- <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
192
- <nobr><font>{{row.defname}}</font></nobr>
193
- </td>
194
- <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
195
- <nobr><font>{{row.f_apply_type}}</font></nobr>
196
- </td>
197
- <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
198
- <nobr><font>{{row.f_apply_date}}</font></nobr>
199
- </td>
200
- <td style="text-align: center;">
201
- <dropdown v-if="row.defname != '完工'">
202
- <button type="button" data-toggle="dropdown" style="border: 0px;background: none;">
203
- <span class="glyphicon glyphicon-th-list" style="position: inherit;"></span>
204
- </button>
205
- <ul slot="dropdown-menu" class="dropdown-menu dropdown-menu-right">
206
- <li>
207
- <a href="#" @click="$parent.$parent.$parent.check(row)">{{row.defname}}</a>
208
- </li>
209
- </ul>
210
- </dropdown>
211
- </td>
212
- </tr>
213
- </template>
214
- </data-grid>
215
- </criteria-paged>
216
- </div>
217
- <modal :show.sync="showstopinfoflag" v-ref:modal backdrop="false">
218
- <header slot="modal-header" class="modal-header">
219
- <button type="button" class="close" @click="closestopinfo"><span>&times;</span></button>
220
- <h4 class="modal-title">督办信息</h4>
221
- </header>
222
- <article slot="modal-body" class="modal-body">
223
- <p >{{stopremarks}}</p>
224
- </article>
225
- <footer slot="modal-footer" class="modal-footer">
226
- </footer>
227
- </modal>
228
- </div>
229
- </template>
230
- <script>
231
- import * as Util from '../../Util'
232
- import Vue from 'vue'
233
- import {
234
- PagedList
235
- } from 'vue-client'
236
- import getNowDate from '../../getNowDate.js'
237
- import {HttpResetClass} from 'vue-client'
238
- export default {
239
- title: '勘探详情',
240
- data() {
241
- return {
242
- timer: null,
243
- timer1:null,
244
- remindTime:5,//超时提醒时间
245
- isOverNum:0,//报建是否提醒过
246
- model: new PagedList('rs/sql/checkusergongchegn', 20, {
247
- data: {
248
- id: this.$login.f.id,
249
- fengongsi: this.$login.f.f_fengongsi,
250
- }
251
- }),
252
- fapplytype: this.$appdata.getParam('用户类型'),
253
- applytype: this.$appdata.getParam('报建类型'),
254
- department: this.$appdata.getParam('受理部门'),
255
- derection: this.$appdata.getParam('方向'),
256
- containt: this.$appdata.getParam('工作内容'),
257
- condition:'',
258
- select: '',
259
- alloptions:[{label:"踏勘",value:"踏勘"},{label:"施工",value:"施工"},{label:"施工验收",value:"施工验收"},{label:"通气转单",value:"通气转单"}],
260
- button_name:"查询",
261
- showstopinfoflag:false,
262
- stopremarks:"",
263
- startFlowonce:true,
264
- usertype: this.$appdata.getParam('用户类型'),
265
- }
266
- },
267
- compiled(){
268
- console.log("开始判断")
269
- },
270
- async ready() {
271
- this.eachFind();
272
- this.$refs.cp.$refs.cri.model.startDate = Util.toStandardDateString() + ' 00:00:00'
273
- this.$refs.cp.$refs.cri.model.endDate = Util.toStandardDateString() + ' 23:59:59'
274
- await this.getConfig()
275
- let str='报建语音提醒时间'
276
- this.$refs.cp.$refs.cri.search()
277
- str='超时提前提醒时间'
278
- this.loadSingleValue(str)
279
- let self = this
280
- //判断用户是否有权限
281
- this.checkUserOperator();
282
- },
283
- methods: {
284
- //清空 查询条件项
285
- clear(){
286
- Object.keys(this.$refs.cp.$refs.cri.model).forEach((key) => {
287
- this.$refs.cp.$refs.cri.model[key] = []
288
- })
289
- },
290
- checkUserOperator(){
291
- if(this.$login.r.find(value => value == '踏勘')){
292
- this.startFlowonce=true;
293
- }
294
- },
295
- stopinfoshow(index){
296
- this.showstopinfoflag = true;
297
- let remakrs = this.model.rows[index].f_surpervise_info;
298
- console.log(JSON.stringify(remakrs))
299
- console.log(remakrs)
300
-
301
- this.stopremarks= remakrs;
302
- },
303
- closestopinfo(){
304
- this.showstopinfoflag = close;
305
- },
306
- /* getapplyName(str){
307
- console.log("开始获取所有名")
308
- console.log(JSON.stringify(str.activitys))
309
- let param = [];
310
- // let workflow = JSON.parse(str);
311
- param.push({label:"全部",value:""})
312
- str.activitys.forEach(function(item){
313
- let title = item.title;
314
- console.log(title)
315
- param.push({label:title,value:title});
316
- })
317
- this.alloptions = param;
318
-
319
- },*/
320
- generateUUID() {
321
- var d = new Date().getTime()
322
- var uuid = 'xxxxxxxx-xxxx-xxxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
323
- var r = (d + Math.random() * 16) % 16 | 0
324
- d = Math.floor(d / 16)
325
- return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16)
326
- })
327
- return uuid
328
- },
329
- searchNow(){
330
- if(this.button_name == "返回"){
331
- this.button_name ="查询";
332
- }
333
- this.$refs.cp.$refs.cri.search()
334
- this.eachFind()
335
- },
336
- async getConfig(){
337
- let http = new HttpResetClass()
338
- await http.load('POST','rs/logic/ApplyGetConfigs', {data:this.$login.f}, {resolveMsg: null, rejectMsg: null}
339
- ).then((res)=>{
340
- if(res.data.code && res.data.code == 200){
341
- Vue.workflow_vue = Vue.prototype.$workflow_vue = res.data.workflow_vue
342
- console.log("$workflow_vue===>"+JSON.stringify(this.$workflow_vue))
343
- this.getapplyName(this.$workflow_vue);
344
- }else{
345
- this.$showMessage('获取报建配置失败,原因:' + res.data.msg)
346
- return
347
- }
348
- })
349
-
350
- },
351
- async addactive(modify) {
352
- this.button_name ="返回"
353
- //await this.getConfig()
354
- this.$workflow_vue.start_activity = modify
355
- let http = new HttpResetClass()
356
- let res = await http.load('POST','rs/logic/ApplyGetProcessID',{data:{filename:this.$workflow_vue.workflow_xmlfilename,start_activity:this.$workflow_vue.start_activity}}, {resolveMsg: null, rejectMsg: '获取流程ID失败,请联系开发人员'})
357
- this.$refs.cp.pager = false
358
- let val = {
359
- defname: this.$workflow_vue.start_activity,
360
- f_process_id: res.data.f_process_id,
361
- f_apply_date: Util.toStandardTimeString(),
362
- f_apply_num: this.generateUUID(),
363
- f_apply_operator_telephone: this.$login.f.f_fgsdianhua,
364
- f_product_id: res.data.f_product_id
365
- }
366
- // // 如果是改装,将modify装入val
367
- // if(modify){
368
- // modify.f_customer_type = '个人'
369
- // modify.f_apply_type = '改装登记'
370
- // modify.f_phone = modify.f_user_phone
371
- // let temp = modify.f_residential_area
372
- // modify.f_residential_area = modify.f_area
373
- // modify.f_area = temp
374
- // Object.assign(val,modify)
375
- // }
376
-
377
- console.log(112 + JSON.stringify(this.$login.f.f_apply_department))
378
- this.$dispatch('check', val)
379
- this.$dispatch('changeheight')
380
- this.$dispatch('addactive')
381
- },
382
- // 改装申请
383
- modify(){
384
- // 调出改装申请界面
385
- this.$parent.show = false
386
- }
387
- ,
388
- check(val) {
389
- this.button_name="返回"
390
- // if(val.defname.includes("派单")){
391
- // if(val.f_unaccounts_money && parseInt(val.f_unaccounts_money)!=0){
392
- // this.$showAlert('当前用户金额未结余!!!', 'warning', 3000)
393
- // this.button_name ="查询";
394
- // return;
395
- // }
396
- // }
397
- console.log("当前qqqq的数据",val.f_process_id)
398
- this.$dispatch('check', val)
399
- this.$dispatch('addactive')
400
- }
401
- ,
402
- close() {
403
- this.$dispatch('close')
404
- }
405
- ,
406
- compare(val) {
407
- val === '完工'
408
- console.log('完工', val)
409
- return false
410
- },
411
- // 获取数据
412
- loadSingleValue(str) {
413
- let http = new HttpResetClass()
414
- let data = {
415
- singlename: str,
416
- //预先提醒时间
417
-
418
- }
419
- http.load('POST', 'rs/sql/findsingle', {data: data}, {resolveMsg: null, rejectMsg: '获取语音提醒时间失败'}).then((res) => {
420
- console.log('-----------------进去之前-----------'+JSON.stringify(res))
421
- let flag1=false
422
- let flag2=false
423
- if (res.data.length==0){
424
- flag1=true
425
- console.log('没有单值'+flag1)
426
- flag2=false
427
- }else if (res.data[0].value==0) {
428
- flag2=true
429
- console.log('为0')
430
- flag1=false
431
- }else{
432
- if (str==='报建语音提醒时间'){
433
- this.remindTime = res.data[0].value
434
- }
435
- console.log('为'+res.data[0].value)
436
- flag1=false
437
- flag2=false
438
- }
439
-
440
- if (this.isOverNum==0){
441
- if (flag1){
442
- console.log('不启动定时器')
443
-
444
- }else if (flag2) {
445
- console.log('启动定时器out')
446
- this.setOut()
447
- }else{
448
- console.log('启动定时器timer和out')
449
- this.setTimer()
450
- this.setOut()
451
- }
452
- this.isOverNum++;
453
- } else{
454
- this.isOverNum=0;
455
- }
456
-
457
-
458
- },(res)=>{
459
- //响应错误回调
460
- console.log('响应错误')
461
- })
462
-
463
- },
464
- setTimer() {
465
- if(this.timer == null) {
466
- this.timer = setInterval( () => {
467
- console.log('开始定时...每过5秒执行一次')
468
- this.$refs.cp.$refs.cri.search()
469
- console.log('数据已刷新')
470
- this.eachFind()
471
- console.log('eachfind完毕');
472
- }, 60*1000*this.remindTime)
473
- }
474
- },
475
- setOut() {
476
- if(this.timer1 == null) {
477
- this.timer1 = setTimeout( () => {
478
- console.log('开始setTimeout')
479
- this.eachFind()
480
- console.log('setTimeout完毕');
481
- }, 1000)
482
- }
483
- },
484
- //语音提醒
485
- speckText(str) {
486
- var url= "http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=6&text=" + encodeURI(str);
487
- new Audio(url).play();
488
-
489
- },
490
-
491
- eachFind() {
492
- let arr = this.$refs.cp.$refs.grid.model.rows
493
- let overNumString1=''
494
- let flagNum1=1
495
- let dbflag = 1
496
- let dbinfo = []
497
- let hourfals = 0
498
- let hourstr = ''
499
- for(let val of arr) {
500
- if(val.f_surpervise_type){
501
- dbflag = dbflag+1
502
- dbinfo.push(val.f_user_name)
503
- }
504
- if(val.ishourover =='1'){
505
- hourfals += 1
506
- hourstr+=hourfals+'条'
507
- }
508
- console.log(val.isbeforeover)
509
- if (val.isbeforeover==='预期提醒'){
510
- console.log('flagNUm:'+flagNum1);
511
- if (flagNum1==1){
512
- overNumString1=flagNum1+'条'
513
- flagNum1=flagNum1+1
514
- }else{
515
- overNumString1=overNumString1+'和第'+flagNum1+'条'
516
- flagNum1=flagNum1+1
517
- }
518
- }
519
- }
520
- if(hourfals!=0){
521
- this.speckText('请注意:第:'+overNumString1+'数据一小时后过期')
522
- this.$showMessage("请注意:第:" + overNumString1 + "数据一小时后过期")
523
- }
524
- if (flagNum1!=1){
525
- console.log(overNumString1);
526
- this.speckText('请注意:第:'+overNumString1+'数据即将过期')
527
- this.$showMessage("请注意:第:" + overNumString1 + "数据即将过期")
528
- }
529
- if(dbflag !=1){
530
- this.speckText('请注意: 您有'+dbflag-1+'条数据被督办')
531
- this.$showMessage("用户:"+dbinfo.join(",")+"需要紧急处理!!")
532
- }
533
- console.log('语音播放完毕');
534
- }
535
- },
536
- created: function() {
537
- clearInterval(this.timer)
538
- clearInterval(this.timer1)
539
- this.timer = null
540
- this.timer1 = null
541
- },
542
- beforeDestroy() {
543
- clearInterval(this.timer)
544
- clearInterval(this.timer1)
545
- this.timer = null
546
- this.timer1 = null
547
- },
548
- computed: {
549
- date() {
550
- return getNowDate()
551
- }
552
- ,
553
- selected() {
554
- return this.$refs.cp.$refs.grid.selected
555
- }
556
- }
557
- }
558
- </script>
559
- <style scoped>
560
- /*label {
561
- display: flex;
562
- justify-content:center;
563
- align-items:Center;
564
- padding-top: 8px;
565
- }*/
566
- tr.title {
567
- background-color: #6666ff;
568
- }
569
- td{
570
- text-align: center;
571
- }
572
- /* .active{
573
- color: Crimson;
574
- }
575
- .p{
576
- color: green;
577
- }*/
578
-
579
- .p1 {
580
- color: #dc0b12;
581
- font-weight:bold
582
- }
583
- .p {
584
- color: #ffaf4f;
585
- }
586
- </style>
1
+ <template>
2
+ <div class="d1">
3
+ <div class="left col-sm-12">
4
+ <criteria-paged :model="model" v-ref:cp>
5
+ <criteria partial='criteria' @condition-changed='search' v-ref:cri style="padding: 20px;background-color: #f6f6f6;">
6
+ <form novalidate class="" partial>
7
+ <div class="col-sm-12">
8
+ <div class="col-sm-2">
9
+ <label class="col-sm-4 control-label">联&nbsp;&nbsp;系&nbsp;人</label>
10
+ <div class="col-sm-8">
11
+ <input type="text" class="form-control" placeholder='联系人' v-model="model.f_user_name"
12
+ v-on:keyup.enter="search"
13
+ condition="f_user_name like '{}%'">
14
+ </div>
15
+ </div>
16
+ <div class="col-sm-2">
17
+ <label class="col-sm-4 control-label">工程编号</label>
18
+ <div class="col-sm-8">
19
+ <input type="text" class="form-control" :options="$parent.$parent.fapplytype" placeholder='报建编号' v-model="model.f_apply_num"
20
+ v-on:keyup.enter="search"
21
+ condition="f_apply_num like '{}%'">
22
+ </div>
23
+ </div>
24
+ <div class="col-sm-2">
25
+ <label class="col-sm-4 control-label">工程地址</label>
26
+ <div class="col-sm-8">
27
+ <input type="text" class="form-control" placeholder='用户地址' v-model="model.f_address"
28
+ v-on:keyup.enter="search"
29
+ condition="f_address like '{}%'">
30
+ </div>
31
+ </div>
32
+ <div class="col-sm-3 " style="width:30%">
33
+ <button class="btn btn-primary btn-sm width-80" type="button" @click="$parent.$parent.searchNow(),$parent.$parent.close()" style="margin-left:5%">
34
+ <span class="glyphicon glyphicon-search"></span>{{$parent.$parent.button_name}}
35
+ </button>
36
+ <button class="btn-primary btn btn-sm" @click.prevent="$parent.$parent.clear()">清空</button>
37
+ <button class="btn btn-primary btn-sm" type="button" v-show="$parent.$parent.startFlowonce"
38
+ @click="$parent.$parent.addactive('踏勘')">
39
+ <span class="glyphicon glyphicon-plus" ></span>新增流程
40
+ </button>
41
+ </div>
42
+
43
+
44
+ </div>
45
+ <div class="col-sm-12 " style="margin-top:5px">
46
+ <div class="col-sm-2 ">
47
+ <label for="startDate" class="col-sm-4 control-label">开始日期</label>
48
+ <div class="col-sm-8">
49
+ <datepicker @change="$dispatch('setQueryCondition',model)" id="startDate" placeholder="开始日期"
50
+ style="display: block;"
51
+ v-model="model.startDate"
52
+ :value.sync="model.startDate"
53
+ :format="'yyyy-MM-dd HH:mm:ss'"
54
+ :show-reset-button="true"
55
+ condition="f_apply_date >= '{}'">
56
+ </datepicker>
57
+ </div>
58
+ </div>
59
+
60
+ <div class="col-sm-2 ">
61
+ <label for="startDate" class="col-sm-4 control-label">终止日期</label>
62
+ <div class="col-sm-8">
63
+ <datepicker @change="$dispatch('setQueryCondition',model)" id="endDate" placeholder="终止日期"
64
+ style="display: block;"
65
+ v-model="model.endDate"
66
+ :value.sync="model.endDate"
67
+ :format="'yyyy-MM-dd HH:mm:ss'"
68
+ :show-reset-button="true"
69
+ condition="f_apply_date <= '{}'">
70
+ </datepicker>
71
+ </div>
72
+
73
+ </div>
74
+ <div class="col-sm-2">
75
+ <label class="col-sm-4 control-label">流程状态</label>
76
+ <div class="col-sm-8">
77
+ <v-select style="min-width: 100%;" @change="$dispatch('setQueryCondition',model)" :options="$parent.$parent.alloptions"
78
+ condition="defname = '{}'" placeholder='流程状态'
79
+ v-model="model.defname" :value.sync="model.defname" close-on-select>
80
+ </v-select>
81
+ </div>
82
+ </div>
83
+
84
+ <div class="col-sm-2" style="float: left">
85
+ <label class="col-sm-4 control-label">工程来源</label>
86
+ <div class="col-sm-8">
87
+ <v-select style="min-width: 100%;" @change="$dispatch('setQueryCondition',model)" :options="[{label:'全部',value:''},...this.$appdata.getParam('报装来源')]"
88
+ condition="f_apply_source = '{}'" placeholder='工程来源'
89
+ v-model="model.f_apply_source" :value.sync="model.f_apply_source" close-on-select>
90
+ </v-select>
91
+ </div>
92
+ </div>
93
+ <div class="col-sm-2">
94
+ <label class="col-sm-4 control-label ">用户类型</label>
95
+ <div class="col-sm-8">
96
+ <v-select :options="$parent.$parent.usertype" placeholder='用户类型' condition="f_user_type like '{}'"
97
+ :width="100" style="width:100%"
98
+ v-model="model.f_user_type" :value.sync="model.f_user_type" close-on-select>
99
+ </v-select>
100
+ </div>
101
+ </div>
102
+
103
+ </div>
104
+ <div class="col-sm-12 " style="margin-top:5px">
105
+
106
+ </div>
107
+
108
+
109
+ <!--<div class="col-sm-1">-->
110
+ <!--<button class="btn btn-primary btn-sm" type="button" @click="$parent.$parent.modify()"><span-->
111
+ <!--class="glyphicon glyphicon-plus"></span>改装登记-->
112
+ <!--</button>-->
113
+ <!--</div>-->
114
+ <!--</div>-->
115
+
116
+ </form>
117
+ </criteria>
118
+ <data-grid :model="model" partial='list' v-ref:grid class="data-grid" is-fixed='false' style="overflow-x:auto">
119
+ <template partial='head'>
120
+ <tr class="title">
121
+ <th>
122
+ <nobr>序号</nobr>
123
+ </th>
124
+ <th>
125
+ <nobr>来源</nobr>
126
+ </th>
127
+ <th>
128
+ <nobr>当前状态</nobr>
129
+ </th>
130
+ <th>
131
+ <nobr>工程编号</nobr>
132
+ </th>
133
+ <th>
134
+ <nobr>业务类型</nobr>
135
+ </th>
136
+ <th>
137
+ <nobr>联系人</nobr>
138
+ </th>
139
+ <th>
140
+ <nobr>用户类型</nobr>
141
+ </th>
142
+ <th>
143
+ <nobr>电话</nobr>
144
+ </th>
145
+ <th>
146
+ <nobr>地址</nobr>
147
+ </th>
148
+ <th>
149
+ <nobr>流程状态</nobr>
150
+ </th>
151
+ <th>
152
+ <nobr>报建类型</nobr>
153
+ </th>
154
+ <th>
155
+ <nobr>报建日期</nobr>
156
+ </th>
157
+ <th>
158
+ <nobr>操作</nobr>
159
+ </th>
160
+ </tr>
161
+ </template>
162
+ <template partial='body'>
163
+ <tr >
164
+ <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
165
+ <nobr><font>{{$index+1}}</font></nobr>
166
+ </td>
167
+ <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
168
+ <nobr><font>{{row.f_apply_source}}</font></nobr>
169
+ </td>
170
+ <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
171
+ <nobr><font>{{row.f_sub_state!='完工' ? '未完工' :'完工'}}</font></nobr>
172
+ </td>
173
+ <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
174
+ <nobr><font>{{row.f_apply_num}}</font></nobr>
175
+ </td>
176
+ <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
177
+ <nobr><font>{{row.f_work_type}}</font></nobr>
178
+ </td>
179
+ <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
180
+ <nobr><font>{{row.f_user_name}}</font></nobr>
181
+ </td>
182
+ <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
183
+ <nobr><font>{{row.f_user_type}}</font></nobr>
184
+ </td>
185
+ <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
186
+ <nobr><font>{{row.f_phone}}</font></nobr>
187
+ </td>
188
+ <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
189
+ <nobr><font>{{row.f_address}}</font></nobr>
190
+ </td>
191
+ <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
192
+ <nobr><font>{{row.defname}}</font></nobr>
193
+ </td>
194
+ <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
195
+ <nobr><font>{{row.f_apply_type}}</font></nobr>
196
+ </td>
197
+ <td :class="[ row.isover ==='过期' ? 'p1' : row.isbeforeover === '预期提醒'? 'p':'' ]" style="text-align: center;">
198
+ <nobr><font>{{row.f_apply_date}}</font></nobr>
199
+ </td>
200
+ <td style="text-align: center;">
201
+ <dropdown v-if="row.defname != '完工'">
202
+ <button type="button" data-toggle="dropdown" style="border: 0px;background: none;">
203
+ <span class="glyphicon glyphicon-th-list" style="position: inherit;"></span>
204
+ </button>
205
+ <ul slot="dropdown-menu" class="dropdown-menu dropdown-menu-right">
206
+ <li>
207
+ <a href="#" @click="$parent.$parent.$parent.check(row)">{{row.defname}}</a>
208
+ </li>
209
+ </ul>
210
+ </dropdown>
211
+ </td>
212
+ </tr>
213
+ </template>
214
+ </data-grid>
215
+ </criteria-paged>
216
+ </div>
217
+ <modal :show.sync="showstopinfoflag" v-ref:modal backdrop="false">
218
+ <header slot="modal-header" class="modal-header">
219
+ <button type="button" class="close" @click="closestopinfo"><span>&times;</span></button>
220
+ <h4 class="modal-title">督办信息</h4>
221
+ </header>
222
+ <article slot="modal-body" class="modal-body">
223
+ <p >{{stopremarks}}</p>
224
+ </article>
225
+ <footer slot="modal-footer" class="modal-footer">
226
+ </footer>
227
+ </modal>
228
+ </div>
229
+ </template>
230
+ <script>
231
+ import * as Util from '../../Util'
232
+ import Vue from 'vue'
233
+ import {
234
+ PagedList
235
+ } from 'vue-client'
236
+ import getNowDate from '../../getNowDate.js'
237
+ import {HttpResetClass} from 'vue-client'
238
+ export default {
239
+ title: '勘探详情',
240
+ data() {
241
+ return {
242
+ timer: null,
243
+ timer1:null,
244
+ remindTime:5,//超时提醒时间
245
+ isOverNum:0,//报建是否提醒过
246
+ model: new PagedList('rs/sql/checkusergongchegn', 20, {
247
+ data: {
248
+ id: this.$login.f.id,
249
+ fengongsi: this.$login.f.f_fengongsi,
250
+ }
251
+ }),
252
+ fapplytype: this.$appdata.getParam('用户类型'),
253
+ applytype: this.$appdata.getParam('报建类型'),
254
+ department: this.$appdata.getParam('受理部门'),
255
+ derection: this.$appdata.getParam('方向'),
256
+ containt: this.$appdata.getParam('工作内容'),
257
+ condition:'',
258
+ select: '',
259
+ alloptions:[{label:"踏勘",value:"踏勘"},{label:"施工",value:"施工"},{label:"施工验收",value:"施工验收"},{label:"通气转单",value:"通气转单"}],
260
+ button_name:"查询",
261
+ showstopinfoflag:false,
262
+ stopremarks:"",
263
+ startFlowonce:true,
264
+ usertype: this.$appdata.getParam('用户类型'),
265
+ }
266
+ },
267
+ compiled(){
268
+ console.log("开始判断")
269
+ },
270
+ async ready() {
271
+ this.eachFind();
272
+ this.$refs.cp.$refs.cri.model.startDate = Util.toStandardDateString() + ' 00:00:00'
273
+ this.$refs.cp.$refs.cri.model.endDate = Util.toStandardDateString() + ' 23:59:59'
274
+ await this.getConfig()
275
+ let str='报建语音提醒时间'
276
+ this.$refs.cp.$refs.cri.search()
277
+ str='超时提前提醒时间'
278
+ this.loadSingleValue(str)
279
+ let self = this
280
+ //判断用户是否有权限
281
+ this.checkUserOperator();
282
+ },
283
+ methods: {
284
+ //清空 查询条件项
285
+ clear(){
286
+ Object.keys(this.$refs.cp.$refs.cri.model).forEach((key) => {
287
+ this.$refs.cp.$refs.cri.model[key] = []
288
+ })
289
+ },
290
+ checkUserOperator(){
291
+ if(this.$login.r.find(value => value == '踏勘')){
292
+ this.startFlowonce=true;
293
+ }
294
+ },
295
+ stopinfoshow(index){
296
+ this.showstopinfoflag = true;
297
+ let remakrs = this.model.rows[index].f_surpervise_info;
298
+ console.log(JSON.stringify(remakrs))
299
+ console.log(remakrs)
300
+
301
+ this.stopremarks= remakrs;
302
+ },
303
+ closestopinfo(){
304
+ this.showstopinfoflag = close;
305
+ },
306
+ /* getapplyName(str){
307
+ console.log("开始获取所有名")
308
+ console.log(JSON.stringify(str.activitys))
309
+ let param = [];
310
+ // let workflow = JSON.parse(str);
311
+ param.push({label:"全部",value:""})
312
+ str.activitys.forEach(function(item){
313
+ let title = item.title;
314
+ console.log(title)
315
+ param.push({label:title,value:title});
316
+ })
317
+ this.alloptions = param;
318
+
319
+ },*/
320
+ generateUUID() {
321
+ var d = new Date().getTime()
322
+ var uuid = 'xxxxxxxx-xxxx-xxxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
323
+ var r = (d + Math.random() * 16) % 16 | 0
324
+ d = Math.floor(d / 16)
325
+ return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16)
326
+ })
327
+ return uuid
328
+ },
329
+ searchNow(){
330
+ if(this.button_name == "返回"){
331
+ this.button_name ="查询";
332
+ }
333
+ this.$refs.cp.$refs.cri.search()
334
+ this.eachFind()
335
+ },
336
+ async getConfig(){
337
+ let http = new HttpResetClass()
338
+ await http.load('POST','rs/logic/ApplyGetConfigs', {data:this.$login.f}, {resolveMsg: null, rejectMsg: null}
339
+ ).then((res)=>{
340
+ if(res.data.code && res.data.code == 200){
341
+ Vue.workflow_vue = Vue.prototype.$workflow_vue = res.data.workflow_vue
342
+ console.log("$workflow_vue===>"+JSON.stringify(this.$workflow_vue))
343
+ this.getapplyName(this.$workflow_vue);
344
+ }else{
345
+ this.$showMessage('获取报建配置失败,原因:' + res.data.msg)
346
+ return
347
+ }
348
+ })
349
+
350
+ },
351
+ async addactive(modify) {
352
+ this.button_name ="返回"
353
+ //await this.getConfig()
354
+ this.$workflow_vue.start_activity = modify
355
+ let http = new HttpResetClass()
356
+ let res = await http.load('POST','rs/logic/ApplyGetProcessID',{data:{filename:this.$workflow_vue.workflow_xmlfilename,start_activity:this.$workflow_vue.start_activity}}, {resolveMsg: null, rejectMsg: '获取流程ID失败,请联系开发人员'})
357
+ this.$refs.cp.pager = false
358
+ let val = {
359
+ defname: this.$workflow_vue.start_activity,
360
+ f_process_id: res.data.f_process_id,
361
+ f_apply_date: Util.toStandardTimeString(),
362
+ f_apply_num: this.generateUUID(),
363
+ f_apply_operator_telephone: this.$login.f.f_fgsdianhua,
364
+ f_product_id: res.data.f_product_id
365
+ }
366
+ // // 如果是改装,将modify装入val
367
+ // if(modify){
368
+ // modify.f_customer_type = '个人'
369
+ // modify.f_apply_type = '改装登记'
370
+ // modify.f_phone = modify.f_user_phone
371
+ // let temp = modify.f_residential_area
372
+ // modify.f_residential_area = modify.f_area
373
+ // modify.f_area = temp
374
+ // Object.assign(val,modify)
375
+ // }
376
+
377
+ console.log(112 + JSON.stringify(this.$login.f.f_apply_department))
378
+ this.$dispatch('check', val)
379
+ this.$dispatch('changeheight')
380
+ this.$dispatch('addactive')
381
+ },
382
+ // 改装申请
383
+ modify(){
384
+ // 调出改装申请界面
385
+ this.$parent.show = false
386
+ }
387
+ ,
388
+ check(val) {
389
+ this.button_name="返回"
390
+ // if(val.defname.includes("派单")){
391
+ // if(val.f_unaccounts_money && parseInt(val.f_unaccounts_money)!=0){
392
+ // this.$showAlert('当前用户金额未结余!!!', 'warning', 3000)
393
+ // this.button_name ="查询";
394
+ // return;
395
+ // }
396
+ // }
397
+ console.log("当前qqqq的数据",val.f_process_id)
398
+ this.$dispatch('check', val)
399
+ this.$dispatch('addactive')
400
+ }
401
+ ,
402
+ close() {
403
+ this.$dispatch('close')
404
+ }
405
+ ,
406
+ compare(val) {
407
+ val === '完工'
408
+ console.log('完工', val)
409
+ return false
410
+ },
411
+ // 获取数据
412
+ loadSingleValue(str) {
413
+ let http = new HttpResetClass()
414
+ let data = {
415
+ singlename: str,
416
+ //预先提醒时间
417
+
418
+ }
419
+ http.load('POST', 'rs/sql/findsingle', {data: data}, {resolveMsg: null, rejectMsg: '获取语音提醒时间失败'}).then((res) => {
420
+ console.log('-----------------进去之前-----------'+JSON.stringify(res))
421
+ let flag1=false
422
+ let flag2=false
423
+ if (res.data.length==0){
424
+ flag1=true
425
+ console.log('没有单值'+flag1)
426
+ flag2=false
427
+ }else if (res.data[0].value==0) {
428
+ flag2=true
429
+ console.log('为0')
430
+ flag1=false
431
+ }else{
432
+ if (str==='报建语音提醒时间'){
433
+ this.remindTime = res.data[0].value
434
+ }
435
+ console.log('为'+res.data[0].value)
436
+ flag1=false
437
+ flag2=false
438
+ }
439
+
440
+ if (this.isOverNum==0){
441
+ if (flag1){
442
+ console.log('不启动定时器')
443
+
444
+ }else if (flag2) {
445
+ console.log('启动定时器out')
446
+ this.setOut()
447
+ }else{
448
+ console.log('启动定时器timer和out')
449
+ this.setTimer()
450
+ this.setOut()
451
+ }
452
+ this.isOverNum++;
453
+ } else{
454
+ this.isOverNum=0;
455
+ }
456
+
457
+
458
+ },(res)=>{
459
+ //响应错误回调
460
+ console.log('响应错误')
461
+ })
462
+
463
+ },
464
+ setTimer() {
465
+ if(this.timer == null) {
466
+ this.timer = setInterval( () => {
467
+ console.log('开始定时...每过5秒执行一次')
468
+ this.$refs.cp.$refs.cri.search()
469
+ console.log('数据已刷新')
470
+ this.eachFind()
471
+ console.log('eachfind完毕');
472
+ }, 60*1000*this.remindTime)
473
+ }
474
+ },
475
+ setOut() {
476
+ if(this.timer1 == null) {
477
+ this.timer1 = setTimeout( () => {
478
+ console.log('开始setTimeout')
479
+ this.eachFind()
480
+ console.log('setTimeout完毕');
481
+ }, 1000)
482
+ }
483
+ },
484
+ //语音提醒
485
+ speckText(str) {
486
+ var url= "http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=6&text=" + encodeURI(str);
487
+ new Audio(url).play();
488
+
489
+ },
490
+
491
+ eachFind() {
492
+ let arr = this.$refs.cp.$refs.grid.model.rows
493
+ let overNumString1=''
494
+ let flagNum1=1
495
+ let dbflag = 1
496
+ let dbinfo = []
497
+ let hourfals = 0
498
+ let hourstr = ''
499
+ for(let val of arr) {
500
+ if(val.f_surpervise_type){
501
+ dbflag = dbflag+1
502
+ dbinfo.push(val.f_user_name)
503
+ }
504
+ if(val.ishourover =='1'){
505
+ hourfals += 1
506
+ hourstr+=hourfals+'条'
507
+ }
508
+ console.log(val.isbeforeover)
509
+ if (val.isbeforeover==='预期提醒'){
510
+ console.log('flagNUm:'+flagNum1);
511
+ if (flagNum1==1){
512
+ overNumString1=flagNum1+'条'
513
+ flagNum1=flagNum1+1
514
+ }else{
515
+ overNumString1=overNumString1+'和第'+flagNum1+'条'
516
+ flagNum1=flagNum1+1
517
+ }
518
+ }
519
+ }
520
+ if(hourfals!=0){
521
+ this.speckText('请注意:第:'+overNumString1+'数据一小时后过期')
522
+ this.$showMessage("请注意:第:" + overNumString1 + "数据一小时后过期")
523
+ }
524
+ if (flagNum1!=1){
525
+ console.log(overNumString1);
526
+ this.speckText('请注意:第:'+overNumString1+'数据即将过期')
527
+ this.$showMessage("请注意:第:" + overNumString1 + "数据即将过期")
528
+ }
529
+ if(dbflag !=1){
530
+ this.speckText('请注意: 您有'+dbflag-1+'条数据被督办')
531
+ this.$showMessage("用户:"+dbinfo.join(",")+"需要紧急处理!!")
532
+ }
533
+ console.log('语音播放完毕');
534
+ }
535
+ },
536
+ created: function() {
537
+ clearInterval(this.timer)
538
+ clearInterval(this.timer1)
539
+ this.timer = null
540
+ this.timer1 = null
541
+ },
542
+ beforeDestroy() {
543
+ clearInterval(this.timer)
544
+ clearInterval(this.timer1)
545
+ this.timer = null
546
+ this.timer1 = null
547
+ },
548
+ computed: {
549
+ date() {
550
+ return getNowDate()
551
+ }
552
+ ,
553
+ selected() {
554
+ return this.$refs.cp.$refs.grid.selected
555
+ }
556
+ }
557
+ }
558
+ </script>
559
+ <style scoped>
560
+ /*label {
561
+ display: flex;
562
+ justify-content:center;
563
+ align-items:Center;
564
+ padding-top: 8px;
565
+ }*/
566
+ tr.title {
567
+ background-color: #6666ff;
568
+ }
569
+ td{
570
+ text-align: center;
571
+ }
572
+ /* .active{
573
+ color: Crimson;
574
+ }
575
+ .p{
576
+ color: green;
577
+ }*/
578
+
579
+ .p1 {
580
+ color: #dc0b12;
581
+ font-weight:bold
582
+ }
583
+ .p {
584
+ color: #ffaf4f;
585
+ }
586
+ </style>