apply-clients 3.3.79 → 3.3.84

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/.project +17 -0
  2. package/build/dev-server-app.js +76 -76
  3. package/build/dev-server.js +156 -127
  4. package/package.json +1 -1
  5. package/src/App.vue +22 -20
  6. package/src/apply.js +5 -0
  7. package/src/applyAndroid.js +39 -34
  8. package/src/components/android/AppOnetomany.vue +50 -8
  9. package/src/components/android/AppServiceView.vue +88 -8
  10. package/src/components/android/AppSign.vue +151 -142
  11. package/src/components/android/AppTakePic.vue +144 -143
  12. package/src/components/android/AreaSelect/AppResAreaSelect.vue +108 -0
  13. package/src/components/android/AreaSelect/AppResAreaSelectGroup.vue +135 -0
  14. package/src/components/android/Process/AppExplorationUser.vue +495 -492
  15. package/src/components/android/Process/AppServiceControl.vue +64 -1
  16. package/src/components/android/Supervisory/AppProcessSupervisory.vue +311 -311
  17. package/src/components/product/AreaSelect/MyAreaSelect.vue +423 -0
  18. package/src/components/product/AreaSelect/ResAreaSelect.vue +106 -0
  19. package/src/components/product/AreaSelect/ResAreaSelectGroup.vue +150 -0
  20. package/src/components/product/AreaSelect/utils/EventListener.js +29 -0
  21. package/src/components/product/AreaSelect/utils/coerceBoolean.js +7 -0
  22. package/src/components/product/Function/InstallInfoSelect.vue +320 -320
  23. package/src/components/product/Onetomany.vue +49 -7
  24. package/src/components/product/Print/BuildOrder/buildOrderList.vue +8 -4
  25. package/src/components/product/Print/BuildOrder/printBuildOrder.vue +4 -0
  26. package/src/components/product/Process/ExplorationSelect.vue +36 -23
  27. package/src/components/product/Process/Service/ServiceControl.vue +62 -0
  28. package/src/components/product/ServiceView.vue +276 -6
  29. package/src/components/product/Supervisory/SupervisoryList.vue +29 -11
  30. package/src/main.js +27 -27
  31. package/yarn.lock +0 -9013
@@ -151,7 +151,7 @@ import {guid, toStandardTimeString} from '../Util'
151
151
  import Vue from 'vue'
152
152
  export default {
153
153
  title: 'onetomany',
154
- props: ['onetomany', 'index'],
154
+ props: ['onetomany', 'index','selectdata'],
155
155
  data () {
156
156
  return {
157
157
  showModal: false,
@@ -163,12 +163,54 @@ export default {
163
163
  ready () {
164
164
  },
165
165
  methods: {
166
- confirmModal () {
166
+ async confirmModal () {
167
167
  if (this.modelTitle === '新增') {
168
- if (this.onetomany.add.event) {
169
- this.$dispatch(this.onetomany.add.event, this.index)
170
- } else {
171
- this.$dispatch('onetomanyadd', this.index)
168
+ //报警器设备型号校验
169
+ if (this.modelTitle === '新增' && this.selectdata.f_apply_type === '报警器报建'){
170
+ let data = {
171
+ f_material_name : "",
172
+ f_bjq_sid: "",
173
+ }
174
+ this.onetomany.fields.forEach(item=>{
175
+ if (item.label === '材料编号'){
176
+ data.f_bjq_sid = item.value
177
+ }
178
+ if (item.label === '材料名称'){
179
+ data.f_material_name = item.value
180
+ }
181
+ })
182
+ if (data.f_material_name.substr(0,3) === '报警器'){
183
+ let res = await this.$resetpost(
184
+ `${this.$androidUtil.getProxyUrl()}/ncc/rs/logic/bjqcheck`,
185
+ // `/rs/logic/bjqcheck`,
186
+ data
187
+ )
188
+ if (res.data.code == 200){
189
+ if (this.onetomany.add.event) {
190
+ this.$dispatch(this.onetomany.add.event, this.index)
191
+ } else {
192
+ this.$dispatch('onetomanyadd', this.index)
193
+ }
194
+ this.closeModal()
195
+ }else {
196
+ this.disableButton = true
197
+ this.$showMessage(res.data.msg)
198
+ }
199
+ }else {
200
+ if (this.onetomany.add.event) {
201
+ this.$dispatch(this.onetomany.add.event, this.index)
202
+ } else {
203
+ this.$dispatch('onetomanyadd', this.index)
204
+ }
205
+ this.closeModal()
206
+ }
207
+ }else {
208
+ if (this.onetomany.add.event) {
209
+ this.$dispatch(this.onetomany.add.event, this.index)
210
+ } else {
211
+ this.$dispatch('onetomanyadd', this.index)
212
+ }
213
+ this.closeModal()
172
214
  }
173
215
  }
174
216
  if (this.modelTitle === '修改') {
@@ -177,9 +219,9 @@ export default {
177
219
  } else {
178
220
  this.$dispatch('onetomanyupdate', this.index, this.rowIndex)
179
221
  }
222
+ this.closeModal()
180
223
  }
181
-
182
- this.closeModal()
224
+ // this.closeModal()
183
225
  },
184
226
  onchange (fieldIndex) {
185
227
  this.disableModalButton()
@@ -5,7 +5,7 @@
5
5
  <div v-for="(index,item) in data.fields">
6
6
  <!--input-->
7
7
  <div :style="item.style ? item.style : ''"
8
- v-if="(item.type==='input' || item.type==='number'||item.type === 'tel'||item.type === 'email') && !item.hidden && (item.device === 'app' || !item.device)&& (item.label !== '证件号码')&&(item.label !== '身份证') && (item.label !== '用户电话')"
8
+ v-if="(item.type==='input' || item.type==='number'||item.type === 'tel'||item.type === 'email') && !item.hidden && (item.device === 'app' || !item.device) && (item.label != '证件号码')&&(item.label != '身份证') && (item.label != '用户电话')"
9
9
  :class="[item.required && !(item.value) ? 'apply-has-error' : '', item.bootstraped ? item.bootstraped + ' form-group app-input':'col-xs-12 form-group app-input']">
10
10
  <label class="control-label-justify">{{item.label}}</label>
11
11
  <div :style="item.value_style ? item.value_style:''"
@@ -24,9 +24,30 @@
24
24
  </div>
25
25
  </div>
26
26
 
27
+ <div :style="item.style ? item.style : ''"
28
+ v-if="(data.fields[index-1].value ==='营业执照'||data.fields[index-1].value ==='军官证')&& (item.label === '证件号码')"
29
+ :class="[item.required && !(item.value) ? 'apply-has-error' : '', item.bootstraped ? item.bootstraped + ' form-group app-input':'col-xs-12 form-group app-input']">
30
+ <label class="control-label-justify">{{item.label}}</label>
31
+ <div :style="item.value_style ? item.value_style:''"
32
+ :class="item.value_bootstraped ? item.value_bootstraped : 'col-xs-8'">
33
+ <input class="" style="width: 100%"
34
+ :type="item.type"
35
+ v-model="data.fields[index].value"
36
+ :placeholder="item.placeholder"
37
+ :value="data.fields[index].value"
38
+ :readonly="item.readonly"
39
+ :disabled="item.disabled"
40
+ @change="onchange(index)"
41
+ @blur="onblur(index)"
42
+ @input="oninput(index)"
43
+ />
44
+ </div>
45
+ </div>
46
+
47
+
27
48
  <!--input身份证验证-->
28
49
  <div :style="item.style ? item.style : ''"
29
- v-if="(item.label==='身份证') || (data.f_credentials === '身份证' && item.label === '证件号码')"
50
+ v-if="(item.label==='身份证') || (item.label === '证件号码' && data.fields[index-1].value ==='身份证')"
30
51
  :class="[$v.f_idnumber2.identityCardValid ? 'apply-has-error' : '',item.bootstraped ? item.bootstraped + ' form-group app-input':'col-xs-12 form-group app-input']">
31
52
  <label class="control-label-justify">{{item.label}}</label>
32
53
  <div :style="item.value_style ? item.value_style:''"
@@ -60,7 +81,7 @@
60
81
  type="number"
61
82
  onKeypress="return(/[\d\.]/.test(String.fromCharCode(event.keyCode)))"
62
83
  oninput="if(value.length > 11) value=value.slice(0,11)"
63
- v-validate:f_user_phone="{minlength: 11, maxlength: 11 }"
84
+ v-validate:f_user_phone="{minlength: 7, maxlength: 11 }"
64
85
  v-model="data.fields[index].value"
65
86
  :placeholder="item.placeholder"
66
87
  :value="data.fields[index].value"
@@ -158,11 +179,21 @@
158
179
  </div>
159
180
  </div>
160
181
  </div>
161
-
182
+ <!--区域地址联动-->
183
+ <div>
184
+ <app-res-area-select-group
185
+ v-if="data.f_apply_type === '报警器报建' && data.defname === '工程施工' && data.title === '工程施工' && data.f_sub_state !='完工'"
186
+ labelstyle = "control-label"
187
+ @shiji-select = "getSelectShijiValue"
188
+ @xian-select = "getSelectXianValue"
189
+ @shequ-select = "getSelectShequValue"
190
+ >
191
+ </app-res-area-select-group>
192
+ </div>
162
193
  <div class="col-sm-12 col-xs-12" id="test11">
163
194
  <accordion one-at-a-time="true">
164
195
  <panel v-for="(i,item) in data.onetomany" :header="item.title" :is-open="false" type="primary">
165
- <app-onetomany :onetomany="item" :index="i"></app-onetomany>
196
+ <app-onetomany :onetomany="item" :index="i" :selectdata="data"></app-onetomany>
166
197
  </panel>
167
198
  <panel v-for="(i,item) in data.components" :header="item.title" :is-open="false" type="primary" v-if="item.device === 'app' || !item.device">
168
199
  <component :is="item.name" :selectdata="data" :mark="item.mark"></component>
@@ -171,7 +202,8 @@
171
202
  </div>
172
203
 
173
204
  <!--自定义组件-->
174
- <slot></slot>
205
+ <slot>
206
+ </slot>
175
207
 
176
208
  <!-- 按钮组 -->
177
209
  <div class="text-center">
@@ -298,7 +330,7 @@
298
330
  </button>
299
331
  </footer>
300
332
  </modal>
301
- </form>>
333
+ </form>
302
334
  </div>
303
335
  </template>
304
336
  <script>
@@ -338,7 +370,12 @@ export default {
338
370
  model: {}, // 公司等属性
339
371
  disable_button: true, // 控制按钮禁用
340
372
  disable_modal_button: true, // 控制按钮禁用
341
- showButModal: false
373
+ showButModal: false,
374
+ areaData:{
375
+ sjvalue:'',
376
+ xianvalue:'',
377
+ sqvalue:'',
378
+ }
342
379
  }
343
380
  },
344
381
  watch: {
@@ -364,6 +401,34 @@ export default {
364
401
  // 是否禁用按钮
365
402
  this.disableButton()
366
403
  },
404
+ async getSelectShijiValue(sjvalue,sjlable) {
405
+
406
+ this.areaData.sjvalue = sjvalue
407
+ console.log("这是父级接收的市级值:",sjvalue,sjlable)
408
+ this.data.areaData = this.areaData
409
+ console.log(this.areaData)
410
+ // 是否禁用按钮
411
+ this.disableButton()
412
+ },
413
+ async getSelectXianValue(xianvalue,xianlable) {
414
+
415
+ this.areaData.xianvalue = xianvalue
416
+ this.data.areaData = this.areaData
417
+ console.log("这是父级接收的县级值:",xianvalue,xianlable)
418
+ console.log(this.areaData)
419
+
420
+ // 是否禁用按钮
421
+ this.disableButton()
422
+ },
423
+ async getSelectShequValue(sqvalue,sqlable) {
424
+ this.areaData.sqvalue = sqvalue
425
+ this.data.areaData = this.areaData
426
+ console.log(this.areaData)
427
+ console.log("这是父级接收的社区值:",sqvalue,sqlable)
428
+
429
+ // 是否禁用按钮
430
+ this.disableButton()
431
+ },
367
432
  // 是否禁用按钮
368
433
  disableButton () {
369
434
  let flag = false
@@ -383,6 +448,17 @@ export default {
383
448
  }
384
449
  }
385
450
 
451
+ //区域下拉框必选 流程模式为报警器报建
452
+ if (this.data.f_apply_type === '报警器报建' && this.data.defname === '工程施工' && this.data.title === '工程施工' && this.data.f_sub_state !='完工'){
453
+ if (!flag){
454
+ if (this.areaData.sjvalue ==null || this.areaData.sjvalue.length ==0 || this.areaData.sqvalue == null || this.areaData.sqvalue.length ==0
455
+ || this.areaData.xianvalue == null || this.areaData.xianvalue == 0){
456
+ console.log("区域为空禁止提交:",this.areaData)
457
+ flag = true
458
+ }
459
+ }
460
+ }
461
+
386
462
  this.disable_button = flag
387
463
  },
388
464
  // 失去焦点且值最终发生变化触发
@@ -435,6 +511,9 @@ export default {
435
511
  },
436
512
  // 点击按钮组按钮
437
513
  async click_but (button) {
514
+ //报警器区域地址
515
+ this.data.areaData = this.areaData
516
+
438
517
  if (this.data.defname === '通气点火') {
439
518
 
440
519
  this.$showMessage(`请确认表号是否正确`).then((res) => {
@@ -482,6 +561,7 @@ export default {
482
561
  this.$dispatch('button')
483
562
  }
484
563
  }
564
+
485
565
  },
486
566
  confirmModal () {
487
567
  this.closeModal()
@@ -1,142 +1,151 @@
1
- <template>
2
- <div class="panel">
3
- <div class="panel-body panel-self" style="background-color: #F8F8F8;">
4
- <div class="row form-group" style="height: 240px;overflow: scroll;">
5
- <img :src="f_sign_path" width="100%" height="100%" />
6
- </div>
7
- <div class="row text-right form-group">
8
- <button class="btn" style="background-color: #f1e404;border-radius: 5px;margin-right: 10px" @click="clean">清除</button>
9
- <button class="btn" style="background-color: #7dc1f4;border-radius: 5px;margin-right: 10px" @click="sign">签名</button>
10
- </div>
11
- </div>
12
- </div>
13
- </template>
14
- <script>
15
- import {getNowDate, guid, isEmpty} from '../Util'
16
- import {PagedList} from 'vue-client'
17
- import {HttpResetClass} from 'vue-client'
18
- import QRCode from 'qrcodejs2'
19
- import Vue from "vue";
20
-
21
- export default {
22
- title: '签字',
23
- props: ['filePath'],
24
- data () {
25
- return {
26
- f_sign_path: null,
27
- fileName: null
28
- }
29
- },
30
- ready () {
31
- this.f_sign_path = this.filePath
32
- },
33
- methods: {
34
- clean () {
35
- this.f_sign_path = null
36
- this.fileName = null
37
- this.$emit('sign-clean')
38
- },
39
- sign () {
40
- this.delAudioFile(this.f_sign_path)
41
- this.fileName = guid() + '.jpg'
42
- HostApp.__callback__ = this.signCallback
43
- HostApp.__this__ = this
44
- HostApp.getSignature({
45
- file: this.fileName,
46
- requestCode: 111,
47
- callback: 'javascript:HostApp.__callback__("f_sign_path", "%s");'
48
- })
49
- },
50
- // 签名回调
51
- signCallback (prop, signPath) {
52
- console.log('==============签字回调============')
53
- console.log(signPath)
54
- HostApp.__this__.$set(prop, signPath)
55
- console.log(HostApp.__this__.f_sign_path)
56
-
57
- HostApp.__this__.uploadFile()
58
-
59
- HostApp.__callback__ = null
60
- HostApp.__this__ = null
61
- },
62
- uploadFile () {
63
- console.log('===================签字文件上传==============')
64
- let data = {
65
- username: Vue.user.name,
66
- fremarks: '报装手机签字文件',
67
- fileName: HostApp.__this__.fileName,
68
- fileUrl: HostApp.__this__.f_sign_path
69
- }
70
-
71
- console.log('-----------bzLogic-----------------')
72
- console.log(JSON.stringify(data))
73
- let res = HostApp.bzLogic({
74
- 'logic': 'appFileUpload',
75
- 'data': data
76
- })
77
- console.log('===============上传回调=================')
78
- console.log(JSON.stringify(res))
79
- HostApp.__this__.getFiles(res.id)
80
- },
81
- async getFiles (fileid) {
82
- let http = new HttpResetClass()
83
-
84
- let data = {
85
- tablename: 't_files',
86
- condition: `id = '${fileid}'`
87
- }
88
- let res = await http.load('POST', `${this.$androidUtil.getProxyUrl()}/rs/sql/singleTable`, {data: data}, {
89
- // let res = await http.load('POST', `rs/sql/singleTable`, {data: data}, {
90
- warnMsg: null,
91
- resolveMsg: null
92
- })
93
-
94
- console.log('=========查询回调===============')
95
- let fileUrl = `${this.$androidUtil.getProxyUrl()}/${res.data[0].f_downloadpath.substring(res.data[0].f_downloadpath.lastIndexOf(":\\") + 2)}`
96
- console.log(fileUrl)
97
- // HostApp.__this__.$set('f_sign_path', fileUrl)
98
- // HostApp.__this__.f_sign_path = fileUrl
99
- this.f_sign_path = fileUrl
100
-
101
- this.$emit('sign-success', fileUrl)
102
- },
103
- delAudioFile (signPath) {
104
- if (!signPath) {
105
- return
106
- }
107
- HostApp.delfile(signPath)
108
- this.f_sign_path = null
109
- this.fileName = null
110
- }
111
- },
112
- events: {
113
- },
114
- computed: {
115
- },
116
- watch: {
117
- }
118
- }
119
- </script>
120
- <style scoped lang="less">
121
- .qrcode {
122
- display: inline-block !important;
123
- margin: 10px 0px;
124
- }
125
- .panel-self{
126
- border-radius: 10px;
127
- border:1px solid #499EDF;
128
- background-color: #F8F8F8;
129
- }
130
- .vertical-center {
131
- display: flex;
132
- align-items: center;
133
- text-align: center;
134
- }
135
- /*清除model中的浮动*/
136
- .clearfix:after,.clearfix:before{
137
- display: table;
138
- }
139
- .clearfix:after{
140
- clear: both;
141
- }
142
- </style>
1
+ <template>
2
+ <div class="panel">
3
+ <div class="panel-body panel-self" style="background-color: #F8F8F8;">
4
+ <div class="row form-group" style="height: 240px;overflow: scroll;">
5
+ <img :src="f_sign_path" width="100%" height="100%" />
6
+ </div>
7
+ <div class="row text-right form-group">
8
+ <button class="btn" style="background-color: #f1e404;border-radius: 5px;margin-right: 10px" @click="clean">清除</button>
9
+ <button class="btn" style="background-color: #7dc1f4;border-radius: 5px;margin-right: 10px" @click="sign">签名</button>
10
+ </div>
11
+ </div>
12
+ </div>
13
+ </template>
14
+ <script>
15
+ import {getNowDate, guid, isEmpty} from '../Util'
16
+ import {PagedList} from 'vue-client'
17
+ import {HttpResetClass} from 'vue-client'
18
+ import QRCode from 'qrcodejs2'
19
+ import Vue from "vue";
20
+
21
+ export default {
22
+ title: '签字',
23
+ props: ['filePath'],
24
+ data () {
25
+ return {
26
+ f_sign_path: null,
27
+ fileName: null
28
+ }
29
+ },
30
+ ready () {
31
+ this.f_sign_path = this.filePath
32
+ },
33
+ methods: {
34
+ clean () {
35
+ this.f_sign_path = null
36
+ this.fileName = null
37
+ this.$emit('sign-clean')
38
+ },
39
+ sign () {
40
+ console.log('==============签字开始============')
41
+ console.log(this.f_sign_path)
42
+ console.log(guid() )
43
+ this.delAudioFile(this.f_sign_path)
44
+ console.log(this.signCallback)
45
+ this.fileName = guid() + '.jpg'
46
+ console.log(this.fileName)
47
+ HostApp.__callback__ = this.signCallback
48
+ HostApp.__this__ = this
49
+
50
+
51
+ HostApp.getSignature({
52
+ file: this.fileName,
53
+ requestCode: 111,
54
+ callback: 'javascript:HostApp.__callback__("f_sign_path", "%s");'
55
+ })
56
+ },
57
+ // 签名回调
58
+ signCallback (prop, signPath) {
59
+ console.log('==============签字回调============')
60
+ console.log(signPath)
61
+ HostApp.__this__.$set(prop, signPath)
62
+ console.log(HostApp.__this__.f_sign_path)
63
+
64
+ HostApp.__this__.uploadFile()
65
+
66
+ HostApp.__callback__ = null
67
+ HostApp.__this__ = null
68
+ },
69
+ uploadFile () {
70
+ console.log('===================签字文件上传==============')
71
+ let data = {
72
+ username: Vue.user.name,
73
+ fremarks: '报装手机签字文件',
74
+ fileName: HostApp.__this__.fileName,
75
+ fileUrl: HostApp.__this__.f_sign_path
76
+ }
77
+
78
+ console.log('-----------bzLogic-----------------')
79
+ console.log(JSON.stringify(data))
80
+ let res = HostApp.bzLogic({
81
+ 'logic': 'appFileUpload',
82
+ 'data': data
83
+ })
84
+ console.log('===============上传回调=================')
85
+ console.log(JSON.stringify(res))
86
+ HostApp.__this__.getFiles(res.id)
87
+ },
88
+ async getFiles (fileid) {
89
+ let http = new HttpResetClass()
90
+
91
+ let data = {
92
+ tablename: 't_files',
93
+ condition: `id = '${fileid}'`
94
+ }
95
+ let res = await http.load('POST', `${this.$androidUtil.getProxyUrl()}/rs/sql/singleTable`, {data: data}, {
96
+ // let res = await http.load('POST', `rs/sql/singleTable`, {data: data}, {
97
+ warnMsg: null,
98
+ resolveMsg: null
99
+ })
100
+
101
+ console.log('=========查询回调===============')
102
+ let fileUrl = `${this.$androidUtil.getProxyUrl()}/${res.data[0].f_downloadpath.substring(res.data[0].f_downloadpath.lastIndexOf(":\\") + 2)}`
103
+ console.log(fileUrl)
104
+ // HostApp.__this__.$set('f_sign_path', fileUrl)
105
+ // HostApp.__this__.f_sign_path = fileUrl
106
+ this.f_sign_path = fileUrl
107
+
108
+ this.$emit('sign-success', fileUrl)
109
+ },
110
+ delAudioFile (signPath) {
111
+ console.log('=========回调===============')
112
+ console.log(signPath)
113
+ if (!signPath) {
114
+ return
115
+ }
116
+ HostApp.delfile(signPath)
117
+ this.f_sign_path = null
118
+ this.fileName = null
119
+ }
120
+ },
121
+ events: {
122
+ },
123
+ computed: {
124
+ },
125
+ watch: {
126
+ }
127
+ }
128
+ </script>
129
+ <style scoped lang="less">
130
+ .qrcode {
131
+ display: inline-block !important;
132
+ margin: 10px 0px;
133
+ }
134
+ .panel-self{
135
+ border-radius: 10px;
136
+ border:1px solid #499EDF;
137
+ background-color: #F8F8F8;
138
+ }
139
+ .vertical-center {
140
+ display: flex;
141
+ align-items: center;
142
+ text-align: center;
143
+ }
144
+ /*清除model中的浮动*/
145
+ .clearfix:after,.clearfix:before{
146
+ display: table;
147
+ }
148
+ .clearfix:after{
149
+ clear: both;
150
+ }
151
+ </style>