apply-clients 3.3.2 → 3.3.6

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 (28) hide show
  1. package/package.json +2 -1
  2. package/src/AndroidApp.vue +2 -2
  3. package/src/apply.js +1 -0
  4. package/src/applyAndroid.js +1 -0
  5. package/src/components/android/AppTakePic.vue +143 -139
  6. package/src/components/android/Process/AppExplorationUser.vue +2 -2
  7. package/src/components/android/Process/AppServiceControl.vue +153 -35
  8. package/src/components/android/Process/Processes/AppChargeManagement.vue +468 -0
  9. package/src/components/android/Process/Processes/AppInstallationDetails.vue +5 -2
  10. package/src/components/product/ApplyCharge/ApplyChargeList.vue +32 -14
  11. package/src/components/product/ApplyCharge/ApplyChargeSearch.vue +30 -30
  12. package/src/components/product/Function/InstallFunction.vue +1 -1
  13. package/src/components/product/Function/Service/FunctionServiceControl.vue +15 -9
  14. package/src/components/product/Order/OrderApplyList.vue +48 -37
  15. package/src/components/product/Order/OrderMessage.vue +20 -5
  16. package/src/components/product/Process/ExplorationSelect.vue +4 -0
  17. package/src/components/product/Process/ExplorationUser.vue +126 -126
  18. package/src/components/product/Process/Processes/InstallationDetails.vue +100 -83
  19. package/src/components/product/Process/Processes/addressAndUserinfoManagement.vue +24 -23
  20. package/src/components/product/Process/Processes/chargeManagement.vue +65 -7
  21. package/src/components/product/Process/Processes/printCharge.vue +130 -126
  22. package/src/components/product/Process/Processes/selectApply.vue +5 -1
  23. package/src/components/product/Process/Service/ServiceControl.vue +211 -47
  24. package/src/components/product/Supervisory/Service/SupervisoryServiceControl.vue +127 -23
  25. package/src/components/product/Supervisory/SupervisoryControl.vue +100 -100
  26. package/src/components/product/Supervisory/SupervisoryhCart.vue +121 -107
  27. package/src/components/product/VueUtils/ApplyUpload.vue +262 -261
  28. package/src/components/product/VueUtils/GaoPaiYi/HighMeter.vue +1090 -0
@@ -0,0 +1,1090 @@
1
+ <template>
2
+ <modal :show.sync="true" v-ref:modal backdrop="false" width="720px">
3
+ <header slot="modal-header">
4
+ <div class="header">
5
+ <span class="glyphicon glyphicon-remove-circle close" style="margin-top: 35px;margin-right: 30px" @click="close"></span>
6
+ <h4 class="title">高拍仪</h4>
7
+ </div>
8
+ </header>
9
+ <article slot="modal-body" class="form-control" style="padding: 0px">
10
+ <div class="form-group">
11
+ <!--<div class="auto" style="margin-top: 5px">-->
12
+ <!--<strong>&emsp;视频操作:</strong>-->
13
+ <!--<button class="btn btn-info" @click="GetFbl()">取分辨率</button>-->
14
+ <!--<button class="btn btn-info" @click="SetResolution()">设置分辨率</button>-->
15
+ <!--<button class="btn btn-info" @click="SetOrientation()">设置视频方向</button>-->
16
+ <!--<button class="btn btn-info" @click="SetLeft()">左旋</button>-->
17
+ <!--<button class="btn btn-info" @click="SetRight()">右旋</button>-->
18
+ <!--<button class="btn btn-info" @click="SetQuality()">设置质量</button>-->
19
+ <!--<button class="btn btn-info" @click="SetAutoCutOn()">自动裁边开</button>-->
20
+ <!--<button class="btn btn-info" @click="SetAutoCutOff()">自动裁边关</button>-->
21
+ <!--<button class="btn btn-info" @click="SetBox()">预设框选</button>-->
22
+ <!--<button class="btn btn-info" @click="ShowResetInfo()">当前预设</button>-->
23
+ <!--<button class="btn btn-info" @click="ResetBox()">取消预设</button>-->
24
+ <!--<button class="btn btn-info" @click="FormatDlg()">视频格式</button>-->
25
+ <!--<button class="btn btn-info" @click="PropertyDlg()">视频属性</button>-->
26
+ <!--</div>-->
27
+ <!--<div class="auto" style="margin-top: 5px">-->
28
+ <!--<strong>&emsp;截&emsp;&emsp;图:</strong>-->
29
+ <!--<button class="btn btn-info" @click="bb()">截图[本地]</button>-->
30
+ <!--<button class="btn btn-info" @click="bbase64()">截图[内存]</button>-->
31
+ <!--<button class="btn btn-info" @click="TestBase64()">Base64测试</button>-->
32
+ <!--<button class="btn btn-info" @click="bbStartClean()">开启自动去底色</button>-->
33
+ <!--<button class="btn btn-info" @click="bbCloseClean()">关闭自动去底色</button>-->
34
+ <!--</div>-->
35
+ <!--<div class="auto" style="margin-top: 5px">-->
36
+ <!--<strong>&emsp;PDF功能:</strong>-->
37
+ <!--<button class="btn btn-info" @click="SetPDFPath()">设置PDF临时目录</button>-->
38
+ <!--<button class="btn btn-info" @click="BeginPDF()">开始制作PDF</button>-->
39
+ <!--<button class="btn btn-info" @click="GetPDF()">PDF拍照</button>-->
40
+ <!--<button class="btn btn-info" @click="EndPDF()">完成制作</button>-->
41
+ <!--<button class="btn btn-info" @click="PDFtoBASE64()">PDF转base64</button>-->
42
+ <!--<button class="btn btn-info" @click="BASE64toPDF()">base64转PDF</button>-->
43
+ <!--<button class="btn btn-info" @click="PDFtoBASE64Str()">PDF转base64Str</button>-->
44
+ <!--</div>-->
45
+ <!--<div class="auto" style="margin-top: 5px">-->
46
+ <!--<strong>&emsp;其他操作:</strong>-->
47
+ <!--<button class="btn btn-info" @click="printimage()">打印</button>-->
48
+ <!--<button class="btn btn-info" @click="ShowErrorInfo()">启用错误提示</button>-->
49
+ <!--<button class="btn btn-info" @click="IDCardCompare()">人证对比</button>-->
50
+ <!--</div>-->
51
+ <div class="operation-group">
52
+ <strong class="operation" style="margin-top: 2px">视频操作:</strong>
53
+ <button class="btn btn-info photo" @click="bb()">拍照</button>
54
+ <button class="btn btn-info" @click="cam_switch(1)">打开视频1</button>
55
+ <button class="btn btn-info" @click="cam_switch(2)">打开视频2</button>
56
+ <button class="btn btn-info" @click="CloseVideo()">关闭视频</button>
57
+ <!--<button class="btn btn-info" @click="GetInitRet()">初始化结果</button>-->
58
+ <!--<button class="btn btn-info" @click="GetPid()">取PID</button>-->
59
+ <!-- <div style="display: inline-block;margin-left: 570px">-->
60
+ <!-- <strong class="operation">读取身份证:</strong>-->
61
+ <!-- <button class="btn btn-info readIDCard" @click=Begin()>读身份证</button>-->
62
+ <!-- <button class="btn btn-default stop" @click=Stop()>停止读卡</button>-->
63
+ <!-- </div>-->
64
+ <!--<button class="btn btn-info" @click=HCopy()>横向复印</button>-->
65
+ <!--<button class="btn btn-info" @click=VCopy()>竖向复印</button>-->
66
+ <!--<button class="btn btn-info" @click=PCopy()>正面复印</button>-->
67
+ <!--<button class="btn btn-info" @click=NCopy()>反面复印</button>-->
68
+ </div>
69
+ <div class="showInfo">
70
+ <div style="width:100%;height:100%;position: relative;">
71
+ <IMG ID="Base64IMG" src="" class="img" style="position: absolute;top:0;left:0" :style="jd" ></IMG>
72
+ <button style="position: absolute;buttom:-10px;left:0px;" @click="splitsimg">旋转</button>
73
+ </div>
74
+ <textarea id="Console" disabled="disabled"></textarea>
75
+ <IMG id="cam" :src="cameraurl" width="640" height="640">
76
+ </IMG>
77
+ </div>
78
+ <!-- <div class="IdCard">-->
79
+ <!-- <div class="auto IdInputDiv" style="margin-top: 20px"><strong class="IdHint">姓&emsp;&emsp;名</strong><input size=49 id="Name" class="IdInput"></div>-->
80
+ <!-- <div class="auto IdInputDiv" ><strong class="IdHint">性&emsp;&emsp;别</strong><input type="text" size=49 id="Sex" class="IdInput"></div>-->
81
+ <!-- <div class="auto IdInputDiv" ><strong class="IdHint">民&emsp;&emsp;族</strong><input type="text" size=49 id="Nation" class="IdInput"></div>-->
82
+ <!-- <div class="auto IdInputDiv"><strong class="IdHint">出&emsp;&emsp;生</strong><input type="text" size=49 id="Born" class="IdInput"></div>-->
83
+ <!-- <div class="auto IdInputDiv"><strong class="IdHint">地&emsp;&emsp;址</strong><input type="text" size=49 id="Address" class="IdInput"></div>-->
84
+ <!-- <div class="auto IdInputDiv"><strong class="IdHint">身份证号</strong><input type="text" size=49 id="CardNo" class="IdInput"></div>-->
85
+ <!-- <div class="auto IdInputDiv"><strong class="IdHint">签发机关</strong><input type="text" size=49 id="Police" class="IdInput"></div>-->
86
+ <!-- <div class="auto IdInputDiv"><strong class="IdHint">期限起始</strong><input type="text" size=49 id="ActivityLFrom" class="IdInput"></div>-->
87
+ <!-- <div class="auto IdInputDiv"><strong class="IdHint">期限失效</strong><input type="text" size=49 id="ActivityLTo" class="IdInput"></div>-->
88
+ <!-- <div class="auto IdInputDiv"><strong class="IdHint">设&emsp;备ID</strong><input type="text" size=49 id="DeviceNo" class="IdInput"></div>-->
89
+ <!-- <div class="auto IdInputDiv" style="float: left"><strong class="IdHint">照片编码</strong><TEXTAREA id="PhotoBuffer"style="width: 400px;height: 92px"></TEXTAREA>-->
90
+ <!-- </div>-->
91
+ <!-- <div class="auto IdInputDiv" style="float: left"><strong class="IdHint">照&emsp;&emsp;片</strong><IMG style="width: 130px; height:169px" id=PhotoDisplay />-->
92
+ <!-- </div>-->
93
+ <!-- </div>-->
94
+ <!--<div style="display: inline-block;margin-top: 5px;margin-left: 5px;height: 640px;float: left;">-->
95
+ <!--<IMG id="IMG3" src="" style="width:300px;height:160px;display: block">-->
96
+ <!--<button class="btn btn-success" @click="DelPDF3()">删除图片</button>-->
97
+ <!--<IMG id="IMG2" src="" style="width:300px;height:160px;display: block">-->
98
+ <!--<button class="btn btn-success" @click="DelPDF2()">删除图片</button>-->
99
+ <!--<IMG id="IMG1" src="" style="width:300px;height:160px;display: block">-->
100
+ <!--<button class="btn btn-success" @click="DelPDF1()">删除图片</button>-->
101
+ <!--</div>-->
102
+ </div>
103
+ </article>
104
+ <footer slot="modal-footer" class="modal-footer">
105
+ <!--<button type="button" class="btn btn-default" @click='close'>取消</button>-->
106
+ <!--<button type="button" class="btn btn-success" @click='confirm(filename)'>确认</button>-->
107
+ </footer>
108
+ </modal>
109
+ </template>
110
+
111
+ <script>
112
+ let ws
113
+ let server_addr = 'ws://127.0.0.1:18888'// 本机端口地址
114
+ export default {
115
+ title: '高拍仪',
116
+ data () {
117
+ return {
118
+ cameraurl: '',
119
+ jd: 'transform:rotate(0deg)',
120
+ degs: 0
121
+ }
122
+ },
123
+ props: ['show'],
124
+ methods: {
125
+ splitsimg () {
126
+ this.degs += 90
127
+ this.jd = `transform:rotate(${this.degs}deg)`
128
+ },
129
+ // 页面load消息
130
+ onLoad () {
131
+ return new Promise((resolve, reject) => {
132
+ if (ws) {
133
+ resolve()
134
+ }
135
+ // output("正在连接:" + server_addr);
136
+ ws = new WebSocket(server_addr)
137
+ ws.onopen = (evt) => {
138
+ if (this.connected) {
139
+ resolve()
140
+ }
141
+ this.connected = true
142
+ this.output('已经连接到服务器')
143
+ // 打开视频
144
+ this.cam_switch(1)
145
+ // 打开自动裁边
146
+ resolve()
147
+ }
148
+ ws.onclose = (evt) => {
149
+ if (!this.connected) {
150
+ window.location.href = 'FLShell://'
151
+ setTimeout('this.onLoad()', 3)
152
+ } else {
153
+ this.output('已断开服务器连接')
154
+ this.connected = false
155
+ }
156
+ ws = null
157
+ reject(new Error('连接失败'))
158
+ }
159
+ ws.onmessage = (evt) => {
160
+ if (evt.data.length === 0) {
161
+ return
162
+ }
163
+ if (typeof evt.data === 'string') {
164
+ let msg = JSON.parse(evt.data)
165
+ if (msg.err && msg.err !== 0) {
166
+ this.output('错误 - ' + msg.err + ', ' + msg.msg)
167
+ reject('错误 - ' + msg.err + ', ' + msg.msg)
168
+ } else if (msg.msg) {
169
+ this.output(msg.msg)
170
+ }
171
+
172
+ if (msg.user_data) {
173
+ this.callback[msg.user_data](msg)
174
+ if (typeof msg.user_data === 'number') {
175
+ this.callback[msg.user_data] = undefined
176
+ }
177
+ }
178
+ } else {
179
+ let file = new FileReader()
180
+ file.onload = (evt) => {
181
+ if (evt.target.readyState == FileReader.DONE) {
182
+ let data = new Uint8Array(evt.target.result)
183
+ if (data[0] == this.SVR_BIN_MSG.CAP_FRAME) {
184
+ return this.drawImage(data)
185
+ }
186
+ }
187
+ }
188
+
189
+ file.readAsArrayBuffer(evt.data)
190
+ }
191
+ }
192
+ let canvas = document.getElementById('cam')
193
+ canvas.onmousedown = (e) => {
194
+ canvas.style.cursor = 'crosshair'
195
+
196
+ this.clicked = true
197
+
198
+ this.sendMsg(this.CLT_MSG.PRESET_MOUSEDOWN, {origX: e.layerX, origY: e.layerY}, function (msg) {
199
+ if (msg.err !== 0) { }
200
+ })
201
+ }
202
+
203
+ canvas.onmousemove = (e) => {
204
+ if (!this.clicked) {
205
+ canvas.style.cursor = 'default'
206
+ return
207
+ }
208
+ canvas.style.cursor = 'crosshair'
209
+
210
+ this.sendMsg(this.CLT_MSG.PRESET_MOUSEMOVE, {offx: e.layerX, offy: e.layerY}, (msg) => {
211
+ if (msg.err !== 0) { }
212
+ })
213
+ }
214
+
215
+ onmouseout = canvas.onmouseup = (e) => {
216
+ canvas.style.cursor = 'default'
217
+ if (!this.clicked) { return }
218
+
219
+ this.sendMsg(this.CLT_MSG.PRESET_MOUSEUP, {offx: e.layerX, offy: e.layerY}, (msg) => {
220
+ if (msg.err !== 0) {
221
+
222
+ }
223
+ })
224
+ this.clicked = false
225
+ }
226
+ })
227
+ },
228
+ // 打开视频
229
+ cam_switch (capID) {
230
+ if (capID == 1) {
231
+ this.cameraurl = 'http://127.0.0.1:38088/video=stream&camidx=0'
232
+ }
233
+ if (capID == 2) {
234
+ this.cameraurl = 'http://127.0.0.1:38088/video=stream&camidx=1'
235
+ }
236
+ },
237
+ // 关闭视频
238
+ CloseVideo () {
239
+ this.cameraurl = ''
240
+ },
241
+ // //获取初始化结果
242
+ // GetInitRet(){
243
+ // if(this.iswaiting) return
244
+ // this.iswaiting = true
245
+ // this.sendMsg(this.CLT_MSG.GET_EVENT,(msg)=> {
246
+ // if(msg.err !== 0){
247
+ // this.iswaiting = false
248
+ // return
249
+ // }
250
+ // let event = msg.event
251
+ // switch(event){
252
+ // case 2:
253
+ // this.output("设备连接中断,请重新连接后再次打开视频。");
254
+ // break
255
+ //
256
+ // case 1:
257
+ // this.output("初始化成功");
258
+ // break;
259
+ //
260
+ // case 0:
261
+ // this.output("设备非法");
262
+ // break
263
+ // }
264
+ // this.iswaiting = false
265
+ // })
266
+ // },
267
+ // //获取PID
268
+ // GetPid(){
269
+ // if(this.iswaiting) return
270
+ // this.iswaiting = true
271
+ // this.sendMsg(this.CLT_MSG.GET_PID, (msg) => {
272
+ // if(msg.err !== 0) {
273
+ // this.iswaiting = false
274
+ // return
275
+ // }
276
+ //
277
+ // this.output("pid : " + msg.pid)
278
+ // this.iswaiting = false
279
+ // })
280
+ // },
281
+ // //获取分辨率
282
+ // GetFbl(){
283
+ // if(this.iswaiting) return
284
+ // this.iswaiting = true;
285
+ // this.sendMsg(this.CLT_MSG.GET_FBL, (msg) => {
286
+ // if(msg.err !== 0) {
287
+ // this.iswaiting = false;
288
+ // return;
289
+ // }
290
+ //
291
+ // this.output("分辨率 : " + msg.fbl);
292
+ // this.iswaiting = false
293
+ // });
294
+ // },
295
+ // //设置分辨率
296
+ // SetResolution(){
297
+ // if(this.iswaiting) return
298
+ // this.iswaiting = true
299
+ // let first = false
300
+ // let second = false
301
+ // this.sendMsg(this.CLT_MSG.SET_MJPG, {isMJPG:1},(msg) => { //设置MJPG格式
302
+ // if(msg.err !== 0) {
303
+ // first = true
304
+ // if(first == true && second == true){
305
+ // this.iswaiting = false
306
+ // return
307
+ // }
308
+ // }
309
+ // this.output("MJPG : " + 1)
310
+ // first = true
311
+ // if(first == true && second == true){
312
+ // this.iswaiting = false
313
+ // }
314
+ // })
315
+ // this.sendMsg(this.CLT_MSG.SET_FBL, {width:800,height:600},(msg) => { //设置分辨率
316
+ // if(msg.err !== 0) {
317
+ // second = true
318
+ // if(first == true && second == true){
319
+ // this.iswaiting = false
320
+ // }
321
+ // return
322
+ // }
323
+ // this.output("设置分辨率 : width=" + 800 + ",height=" + 600)
324
+ // second = true
325
+ // if(first == true && second == true){
326
+ // this.iswaiting = false
327
+ // }
328
+ // })
329
+ // },
330
+ // //设置视频旋转方向
331
+ // SetOrientation(){
332
+ // let oriT = 0
333
+ // // 设置转动 0 正常 1 上下转 2 左转 3 右转
334
+ // if(this.iswaiting){
335
+ // return
336
+ // }
337
+ // this.iswaiting = true
338
+ // oriT = 2
339
+ // if(oriT == 1){
340
+ // this.rotanumber = 2
341
+ // }else if(oriT == 2){
342
+ // this.rotanumber = 3
343
+ // }else if(oriT == 3){
344
+ // this.rotanumber = 1
345
+ // }
346
+ // this.sendMsg(this.CLT_MSG.SET_TURN, {turn:oriT},(msg) => {
347
+ // if(msg.err !== 0) {
348
+ // this.iswaiting = false
349
+ // return
350
+ // }
351
+ //
352
+ // this.output("设置旋转 : turn=" + oriT)
353
+ // this.iswaiting = false
354
+ // });
355
+ // },
356
+ // //设置视频旋转方向
357
+ // SetLeft(){
358
+ // // 设置转动 0 正常 1 上下转 2 左转 3 右转
359
+ // if(this.iswaiting) return
360
+ // this.iswaiting = true
361
+ // this.rotanumber--;
362
+ // let T = 0;
363
+ // if(this.rotanumber%4 == 0){
364
+ // T = 0;
365
+ // }else if(this.rotanumber%4 == -1 || this.rotanumber%4 == 3){
366
+ // T = 2;
367
+ // }else if(this.rotanumber%4 == -2 || this.rotanumber%4 == 2){
368
+ // T = 1;
369
+ // }else if(this.rotanumber%4 == -3 || this.rotanumber%4 == 1){
370
+ // T = 3
371
+ // }
372
+ // this.sendMsg(this.CLT_MSG.SET_TURN, {turn:T},(msg) => {
373
+ // if(msg.err !== 0) {
374
+ // this.iswaiting = false
375
+ // return
376
+ // }
377
+ // this.output("设置旋转 : turn=" + T)
378
+ // this.iswaiting = false
379
+ // })
380
+ // },
381
+ // //设置视频旋转方向
382
+ // SetRight(){
383
+ // // 设置转动 0 正常 1 上下转 2 左转 3 右转
384
+ // if(this.iswaiting) return
385
+ // this.iswaiting = true
386
+ // this.rotanumber++;
387
+ // var T = 0;
388
+ // if(this.rotanumber%4 == 0){
389
+ // T = 0
390
+ // }else if(this.rotanumber%4 == 1 || this.rotanumber%4 == -3){
391
+ // T = 3
392
+ // }else if(this.rotanumber%4 == 2 || this.rotanumber%4 == -2){
393
+ // T = 1
394
+ // }else if(this.rotanumber%4 == 3 || this.rotanumber%4 == -1){
395
+ // T = 2
396
+ // }
397
+ // this.sendMsg(this.CLT_MSG.SET_TURN, {turn:T},(msg) => {
398
+ // if(msg.err !== 0) {
399
+ // this.iswaiting = false
400
+ // return
401
+ // }
402
+ //
403
+ // this.output("设置旋转 : turn=" + T)
404
+ // this.iswaiting = false
405
+ // })
406
+ // },
407
+ // 设置截图保存的jpg格式压缩质量
408
+ SetQuality () {
409
+ if (this.iswaiting) return
410
+ this.iswaiting = true
411
+ this.sendMsg(this.CLT_MSG.SET_QUALITY, {quality: 50}, (msg) => {
412
+ if (msg.err !== 0) {
413
+ this.iswaiting = false
414
+ return
415
+ }
416
+ this.output('设置拍照图片质量 : quality=' + 50)
417
+ this.iswaiting = false
418
+ })
419
+ },
420
+ // 设置自动裁边开启
421
+ SetAutoCutOn () {
422
+ console.log('设置自动采编')
423
+ if (this.iswaiting) return
424
+ this.iswaiting = true
425
+ this.sendMsg(this.CLT_MSG.SET_AUTOCROP, {open: 1}, (msg) => {
426
+ if (msg.err !== 0) {
427
+ this.iswaiting = false
428
+ return
429
+ }
430
+ this.output('设置自动裁边 : open=' + 1)
431
+ this.iswaiting = false
432
+ })
433
+ },
434
+ // 设置自动裁边关闭
435
+ SetAutoCutOff () {
436
+ if (this.iswaiting) return
437
+ this.iswaiting = true
438
+ this.sendMsg(this.CLT_MSG.SET_AUTOCROP, {open: 0}, (msg) => {
439
+ if (msg.err !== 0) {
440
+ this.iswaiting = false
441
+ return
442
+ }
443
+ this.output('设置自动裁边 : open=' + 0)
444
+ this.iswaiting = false
445
+ })
446
+ },
447
+ // //设置预设框选
448
+ // SetBox(){
449
+ // if(this.iswaiting) return
450
+ // this.iswaiting = true
451
+ // this.resetx = 20
452
+ // this.resety = 20
453
+ // this.resetwidth = 300
454
+ // this.resetheight = 400
455
+ // this.sendMsg(this.CLT_MSG.SET_PREST, {left:this.resetx, top:this.resety, width:this.resetwidth, height:this.resetheight},(msg) =>{
456
+ // if(msg.err !== 0) {
457
+ // this.iswaiting = false
458
+ // return
459
+ // }
460
+ // this.output("设置预设框选 : left=" + this.resetx + ",top=" + this.resety + ",width=" + this.resetwidth + ",height=" + this.resetheight);
461
+ // this.iswaiting = false;
462
+ // })
463
+ // },
464
+ // //获取当前预设框选参数
465
+ // ShowResetInfo(){
466
+ // if(this.iswaiting) return
467
+ // this.iswaiting = true
468
+ // this.sendMsg(this.CLT_MSG.GET_PREST_INFO, (msg) => {
469
+ // if(msg.err !== 0) {
470
+ // this.iswaiting = false
471
+ // return
472
+ // }
473
+ // this.output("当前预设 : " + msg.prest_info)
474
+ // this.iswaiting = false
475
+ // })
476
+ // },
477
+ // 取消预设框选
478
+ ResetBox () {
479
+ if (this.iswaiting) return
480
+ this.iswaiting = true
481
+ this.sendMsg(this.CLT_MSG.SET_PREST, {left: 0, top: 0, width: 0, height: 0}, (msg) => {
482
+ if (msg.err !== 0) {
483
+ this.iswaiting = false
484
+ return
485
+ }
486
+ this.resetx = 0
487
+ this.resety = 0
488
+ this.resetwidth = 0
489
+ this.resetheight = 0
490
+ this.output('取消预设框选')
491
+ this.iswaiting = false
492
+ })
493
+ },
494
+ // //视频格式弹窗
495
+ // FormatDlg(){
496
+ // if(this.iswaiting) return
497
+ // this.iswaiting = true
498
+ // this.sendMsg(this.CLT_MSG.FORMAT_DLG,(msg) => {
499
+ // if(msg.err !== 0) {
500
+ // this.iswaiting = false;
501
+ // return
502
+ // }
503
+ // this.iswaiting = false;
504
+ // })
505
+ // },
506
+ // //视频属性弹窗
507
+ // PropertyDlg(){
508
+ // if(this.iswaiting) return
509
+ // this.iswaiting = true
510
+ // this.sendMsg(this.CLT_MSG.PROPERTY_DLG,(msg) => {
511
+ // if(msg.err !== 0) {
512
+ // this.iswaiting = false;
513
+ // return
514
+ // }
515
+ // this.iswaiting = false;
516
+ // })
517
+ // },
518
+ // //设置颜色模式 只针对截图
519
+ bb () {
520
+ let camidx = 0
521
+ if (this.cameraurl === 'http://127.0.0.1:38088/video=stream&camidx=0') {
522
+ camidx = 0
523
+ } else if (this.cameraurl === 'http://127.0.0.1:38088/video=stream&camidx=1') {
524
+ camidx = 1
525
+ } else {
526
+ this.showAlert('请先打开视频', 'warning', 2000)
527
+ return
528
+ }
529
+ let param = {
530
+ camidx: camidx
531
+ }
532
+ this.$resetpost('http://127.0.0.1:38088/video=grabimage', param).then((msg) => { // 截图
533
+ console.log(msg)
534
+
535
+ if (msg.data.code != '0') {
536
+ this.$showAlert(msg.data.message, 'warning', 2000)
537
+ return
538
+ }
539
+ let s = 'data:image/jpg;base64,' + msg.data.photoBase64
540
+ document.getElementById('Base64IMG').src = s// 网页预览图片
541
+
542
+ this.output('base64 长度 : ' + s.length)
543
+
544
+ this.$dispatch('photo-finish', msg.data.photoBase64)
545
+ // document.getElementById("Base64IMG").src= "D:\\1234.jpg?" + Math.random();//网页预览图片
546
+ })
547
+ },
548
+ // 内存截图
549
+ bbase64 () {
550
+ if (this.iswaiting) return
551
+ this.iswaiting = true
552
+ this.sendMsg(this.CLT_MSG.GET_PICTURE_MEM, {turn: 0}, (msg) => {
553
+ if (msg.err !== 0) {
554
+ this.iswaiting = false
555
+ return
556
+ }
557
+ let s = 'data:image/jpg;base64,' + msg.base64str
558
+ document.getElementById('Base64IMG').src = s// 网页预览图片
559
+ alert(s)
560
+ this.output('base64 长度 : ' + s.length)
561
+ this.iswaiting = false
562
+ })
563
+ },
564
+ // base64编码测试
565
+ TestBase64 () {
566
+ if (this.iswaiting) return
567
+ this.iswaiting = true
568
+ this.sendMsg(this.CLT_MSG.TEST_BASE64, {code: '123456789'}, (msg) => {
569
+ if (msg.err !== 0) {
570
+ this.iswaiting = false
571
+ return
572
+ }
573
+ this.output('base64 内容 : ' + msg.base64str)
574
+ this.iswaiting = false
575
+ })
576
+ },
577
+ // //开启去底色
578
+ // bbStartClean(){
579
+ // if(this.iswaiting) return;
580
+ // this.iswaiting = true;
581
+ // this.sendMsg(this.CLT_MSG.SET_CLEAN_PARAM,{param1:280,param2:1.15,param3:8},(msg) => {
582
+ // if(msg.err !== 0){
583
+ // this.iswaiting = false
584
+ // return
585
+ // }
586
+ // this.output("去底色: " + 280 + "," + 1.15 + "," + 8)
587
+ // this.iswaiting = false
588
+ // })
589
+ // },
590
+ // //关闭去底色
591
+ // bbCloseClean(){
592
+ // if(this.iswaiting) return
593
+ // this.iswaiting = true
594
+ // this.sendMsg(this.CLT_MSG.SET_CLEAN_PARAM,{param1:-1},(msg) => {
595
+ // if(msg.err !== 0){
596
+ // this.iswaiting = false;
597
+ // return
598
+ // }
599
+ // this.output("去底色: " + -1);
600
+ // this.iswaiting = false;
601
+ // });
602
+ // },
603
+ // //设置制作PDF临时目录
604
+ // SetPDFPath(){
605
+ // if(this.iswaiting) return
606
+ // this.iswaiting = true
607
+ // this.sendMsg(this.CLT_MSG.SET_TEMPDIR,{path:"d:\\tp\\temp"},(msg) => {
608
+ // if(msg.err !== 0){
609
+ // this.iswaiting = false
610
+ // return
611
+ // }
612
+ // this.output("设置PDF路径: " + "d:\\tp\\temp")
613
+ // this.iswaiting = false
614
+ // })
615
+ // },
616
+ // //开始制作PDF
617
+ // BeginPDF(){
618
+ // if(this.iswaiting) return
619
+ // this.iswaiting = true
620
+ // this.sendMsg(this.CLT_MSG.BEGIN_PDF,(msg) => {
621
+ // if(msg.err !== 0){
622
+ // this.iswaiting = false
623
+ // return
624
+ // }
625
+ // this.output("开始制作PDF")
626
+ // this.iswaiting = false
627
+ // })
628
+ // },
629
+ // //PDF截图 保存到PDF临时目录
630
+ // GetPDF(){
631
+ // if(this.iswaiting) return
632
+ // this.iswaiting = true
633
+ // this.sendMsg(this.CLT_MSG.GET_PDF_PICTURES,{turn:0},(msg) => {
634
+ // if(msg.err !== 0){
635
+ // this.iswaiting = false
636
+ // return
637
+ // }
638
+ // // let s = "file://" + msg.path
639
+ // let s = "data:image/jpg;base64," + msg.base64str;
640
+ // document.getElementById("IMG1").src= null;
641
+ // document.getElementById("IMG1").src= document.getElementById("IMG2").src;
642
+ //
643
+ // document.getElementById("IMG2").src= null;
644
+ // document.getElementById("IMG2").src= document.getElementById("IMG3").src;
645
+ //
646
+ // document.getElementById("IMG3").src= null;
647
+ // document.getElementById("IMG3").src= s;
648
+ // this.output("PDF 文件 : " + msg.path + ",PDF文件 BASE64码长度:" + msg.base64str.length);
649
+ // this.iswaiting = false;
650
+ // })
651
+ // },
652
+ // // 结束制作PDF
653
+ // EndPDF(){
654
+ // if(this.iswaiting) return
655
+ // this.iswaiting = true
656
+ // this.sendMsg(this.CLT_MSG.END_PDF_PICTURES,{path:"D:\\tp\\1234.pdf"},(msg) => {
657
+ // if(msg.err !== 0){
658
+ // this.iswaiting = false
659
+ // return
660
+ // }
661
+ // this.output("结束PDF PDF文件:" + "D:\\tp\\1234.pdf");
662
+ // this.iswaiting = false;
663
+ // })
664
+ // },
665
+ // //PDF文件转码成BASE64文件 适合所有格式文件 非PDF也可使用
666
+ // PDFtoBASE64(){
667
+ // if(this.iswaiting) return
668
+ // this.iswaiting = true
669
+ // this.sendMsg(this.CLT_MSG.PDF_TO_BASE64,{src:"D:\\tp\\1234.pdf",des:"D:\\tp\\temp\\1234.txt"},(msg) => {
670
+ // if(msg.err !== 0){
671
+ // this.iswaiting = false
672
+ // if(msg.err == 108){return this.output("读文件错误")}
673
+ // if(msg.err == 109){return this.output("写文件错误")}
674
+ // }
675
+ // this.output("文件 :" + "D:\\tp\\1234.pdf" + "转成base64 :" + "D:\\tp\\temp\\1234.txt");
676
+ // this.iswaiting = false
677
+ // })
678
+ // },
679
+ // //base64文件转成PDF文件 适合所有文件 非PDF文件也可使用
680
+ // BASE64toPDF(){
681
+ // if(this.iswaiting) return
682
+ // this.iswaiting = true
683
+ // this.sendMsg(this.CLT_MSG.BASE64_TO_PDF,{src:"D:\\tp\\temp\\1234.txt",des:"D:\\tp\\pdfpdf.pdf"},(msg) => {
684
+ // if(msg.err !== 0){
685
+ // this.iswaiting = false;
686
+ // if(msg.err == 108){return this.output("读文件错误")}
687
+ // if(msg.err == 109){return this.output("写文件错误")}
688
+ // }
689
+ // this.output("base64文件: " + "D:\\tp\\temp\\1234.txt" + "转成:" + "D:\\tp\\pdfpdf.pdf")
690
+ // this.iswaiting = false
691
+ // })
692
+ // },
693
+ // //PDF文件转成BASE64码字符串 适合所有文件 非PDF文件也可使用
694
+ // PDFtoBASE64Str(){
695
+ // if(this.iswaiting) return
696
+ // this.iswaiting = true
697
+ // this.sendMsg(this.CLT_MSG.PDF_TO_BASE64_STR,{file:"D:\\tp\\pdfpdf.pdf"},(msg) => {
698
+ // if(msg.err !== 0){
699
+ // this.iswaiting = false
700
+ // if(msg.err == 108){return this.output("读文件错误")}
701
+ // }
702
+ // alert(msg.base64str)
703
+ // this.output("文件 BASE64 长度: " + msg.base64str.length)
704
+ // this.iswaiting = false
705
+ // })
706
+ // },
707
+ // //打印图片
708
+ // printimage(){
709
+ // if(this.iswaiting) return
710
+ // this.iswaiting = true
711
+ // this.sendMsg(this.CLT_MSG.PRINT_IMAGE,{file:"D:\\tp\\1234.jpg"},(msg) => {
712
+ // if(msg.err !== 0){ //错误消息可以不用处理 在config.js中已经有了统一的打印处理 在output函数中设置打印位置
713
+ // this.iswaiting = false;
714
+ // if(msg.err == 112){return this.output("开启打印机错误");}
715
+ // if(msg.err == 111){return this.output("请检查打印机纸张");}
716
+ // if(msg.err == 110){return this.output("没有默认打印机");}
717
+ // }
718
+ // this.output("打印作业号: " + msg.print_no);
719
+ // this.iswaiting = false;
720
+ // })
721
+ // },
722
+ // //显示错误弹窗
723
+ // ShowErrorInfo(){
724
+ // if(this.iswaiting) return
725
+ // this.iswaiting = true
726
+ // this.sendMsg(this.CLT_MSG.SHOW_ERROR_BOX,{on:1},(msg) => {
727
+ // if(msg.err !== 0){
728
+ // this.iswaiting = false
729
+ // return
730
+ // }
731
+ // this.output("错误提示开关:" + 1)
732
+ // this.iswaiting = false;
733
+ // })
734
+ // },
735
+ // //删除制作PDF的图片文件
736
+ // DelPDF3(){
737
+ // if(this.iswaiting) return
738
+ // this.iswaiting = true
739
+ // this.sendMsg(this.CLT_MSG.DEL_PICTURE_PDF,{file:1},(msg) => {
740
+ // if(msg.err !== 0){
741
+ // this.iswaiting = false
742
+ // return
743
+ // }
744
+ // this.output("删除PDF图片文件成功")
745
+ // this.iswaiting = false
746
+ // })
747
+ // document.getElementById("IMG3").src= null;
748
+ // document.getElementById("IMG3").src= document.getElementById("IMG2").src;
749
+ //
750
+ // document.getElementById("IMG2").src= null;
751
+ // document.getElementById("IMG2").src= document.getElementById("IMG1").src;
752
+ //
753
+ // document.getElementById("IMG1").src= null;
754
+ // },
755
+ // //删除制作PDF的临时图片文件
756
+ // DelPDF2(){
757
+ // if(this.iswaiting) return
758
+ // this.iswaiting = true
759
+ // this.sendMsg(this.CLT_MSG.DEL_PICTURE_PDF,{file:2},(msg) => {
760
+ // if(msg.err !== 0){
761
+ // this.iswaiting = false
762
+ // return
763
+ // }
764
+ // this.output("删除PDF图片文件成功")
765
+ // this.iswaiting = false
766
+ // })
767
+ // document.getElementById("IMG2").src= null;
768
+ // document.getElementById("IMG2").src= document.getElementById("IMG1").src;
769
+ // document.getElementById("IMG1").src= null;
770
+ // },
771
+ // //删除制作PDF的临时图片文件
772
+ // DelPDF1(){
773
+ // if(this.iswaiting) return
774
+ // this.iswaiting = true
775
+ // this.sendMsg(this.CLT_MSG.DEL_PICTURE_PDF,{file:3},(msg) => {
776
+ // if(msg.err !== 0){
777
+ // this.iswaiting = false;
778
+ // return
779
+ // }
780
+ // this.output("删除PDF图片文件成功")
781
+ // this.iswaiting = false
782
+ // })
783
+ // document.getElementById("IMG1").src= null;
784
+ // },
785
+ // //人证对比
786
+ // IDCardCompare(){
787
+ // if(this.iswaiting) return
788
+ // this.iswaiting = true
789
+ // let send = {file1:"D:\\1.jpg",file2:"D:\\2.jpg"}
790
+ // this.sendMsg(this.CLT_MSG.IDCARD_COMPARE,send,(msg) => {
791
+ // if(msg.err !== 0){
792
+ // this.iswaiting = false
793
+ // return
794
+ // }
795
+ // this.output("对比完成:" + send.file1 + "与" + send.file2 + "相似度"+ msg.cmpresult)
796
+ // this.iswaiting = false
797
+ // })
798
+ // },
799
+ ReadIDCard () {
800
+ return this.sendMsg(this.CLT_MSG.READ_IDCARD, (msg) => {
801
+ if (msg.err !== 0) { return }
802
+ this.setText(msg)
803
+ this.output('单读卡')
804
+ })
805
+ },
806
+ // 读身份证
807
+ Begin () {
808
+ this.sendMsg(this.CLT_MSG.BEGIN_READ_IDCARD, {user_data: 'idcard'})
809
+ this.callback['idcard'] = (msg) => {
810
+ if (msg.err !== 0) { return }
811
+ this.setText(msg)
812
+ this.output('读取身份证')
813
+ }
814
+ this.output('开始读卡')
815
+ },
816
+ // 停止读身份证
817
+ Stop () {
818
+ this.sendMsg(this.CLT_MSG.STOP_READ_IDCARD, (msg) => {
819
+ if (msg.err !== 0) { return }
820
+ this.output('停止读卡')
821
+ })
822
+ },
823
+ // //横向复印
824
+ // HCopy(){
825
+ // this.sendMsg(this.CLT_MSG.HCOPY_IDCARD, {copy_path:"D:\\"},(msg) => {
826
+ // if(msg.err !== 0){return}
827
+ // document.getElementById("IDCardDisplay").src = "data:image/jpg;base64," + msg.hcopy
828
+ // this.sendMsg(this.CLT_MSG.PRINT_IMAGE,{file:msg.filename},(msg2) => {
829
+ // if(msg2.err !== 0){ return}
830
+ // his.output("打印作业号: " + msg2.print_no)
831
+ // })
832
+ // this.output("横向复印" + msg.filename)
833
+ // })
834
+ // },
835
+ // //竖向复印
836
+ // VCopy(){
837
+ // this.sendMsg(this.CLT_MSG.VCOPY_IDCARD, {copy_path:"D:\\"},(msg) => {
838
+ // if(msg.err !== 0){return}
839
+ // document.getElementById("IDCardDisplay").src = "data:image/jpg;base64," + msg.vcopy;
840
+ // this.sendMsg(this.CLT_MSG.PRINT_IMAGE,{file:msg.filename},(msg2) => {
841
+ // if(msg2.err !== 0){ return}
842
+ // this.output("打印作业号: " + msg2.print_no)
843
+ // })
844
+ // this.output("竖向复印" + msg.filename)
845
+ // })
846
+ // },
847
+ // //正面复印
848
+ // PCopy(){
849
+ // this.sendMsg(this.CLT_MSG.PCOPY_IDCARD, {copy_path:"D:\\"},(msg) => {
850
+ // if(msg.err !== 0){return}
851
+ // document.getElementById("IDCardDisplay").src = "data:image/jpg;base64," + msg.pcopy
852
+ // this.sendMsg(this.CLT_MSG.PRINT_IMAGE,{file:msg.filename},(msg2) => {
853
+ // if(msg2.err !== 0){ return}
854
+ // this.output("打印作业号: " + msg2.print_no)
855
+ // })
856
+ // this.output("正面复印" + msg.filename)
857
+ // })
858
+ // },
859
+ // //反面复印
860
+ // NCopy(){
861
+ // this.sendMsg(this.CLT_MSG.NCOPY_IDCARD, {copy_path:"D:\\"},(msg) => {
862
+ // if(msg.err !== 0){return}
863
+ // document.getElementById("IDCardDisplay").src = "data:image/jpg;base64," + msg.ncopy
864
+ // this.sendMsg(this.CLT_MSG.PRINT_IMAGE,{file:msg.filename},(msg2) => {
865
+ // if(msg2.err !== 0){ return}
866
+ // this.output("打印作业号: " + msg2.print_no)
867
+ // })
868
+ // this.output("反面复印" + msg.filename)
869
+ // })
870
+ // },
871
+ // 视频帧绘制函数
872
+ drawImage (data) {
873
+ // 校验视频是否在一定时间内的
874
+ if (!this.checkTimestamp(data[2] * 256 + data[1])) {
875
+ return
876
+ }
877
+ // 视频帧头有时间戳 注意偏移 和 大小端处理
878
+ let width = data[this.base_offset + 1] * 256 + data[this.base_offset]
879
+ let height = data[this.base_offset + 3] * 256 + data[this.base_offset + 2]
880
+
881
+ let cam = document.getElementById('cam')
882
+ let context = cam.getContext('2d')
883
+ if (this.orgdrawwidth != width || this.orgdrawheight != height) {
884
+ this.orgdrawwidth = width
885
+ this.orgdrawheight = height
886
+ cam.height = cam.height
887
+ }
888
+
889
+ let image = context.createImageData(width, height)
890
+ for (let n = 0; n != height; ++n) {
891
+ for (let m = 0; m != width; ++m) {
892
+ let image_offset = ((height - n - 1) * width + m) * 4
893
+ let data_offset = (n * width + m) * 3 + this.base_offset + 4
894
+ image.data[image_offset] = data[data_offset + 2]
895
+ image.data[image_offset + 1] = data[data_offset + 1]
896
+ image.data[image_offset + 2] = data[data_offset]
897
+ image.data[image_offset + 3] = 255
898
+ }
899
+ }
900
+ context.putImageData(image, 0, 0)
901
+ },
902
+ checkTimestamp (svr_time) {
903
+ let myDate = new Date()
904
+ let clt_time = myDate.getSeconds() * 1000 + myDate.getMilliseconds()
905
+ if (clt_time < svr_time) {
906
+ clt_time += 60 * 1000
907
+ }
908
+ return clt_time - svr_time < 3000
909
+ },
910
+ sendMsg (proto, msg, cb) {
911
+ if (!ws) {
912
+ return
913
+ }
914
+
915
+ if (typeof msg !== 'object') {
916
+ if (typeof msg === 'function') {
917
+ cb = msg
918
+ msg = {}
919
+ } else {
920
+ msg = {}
921
+ }
922
+ }
923
+
924
+ msg.proto = proto
925
+ if (typeof cb === 'function') {
926
+ this.callback[++this.context] = cb
927
+ msg.user_data = this.context
928
+ }
929
+
930
+ ws.send(JSON.stringify(msg))
931
+ },
932
+ output (content) {
933
+ if (content.length == 0) { return }
934
+ let console = document.getElementById('Console')
935
+ console.value += content
936
+ console.value += '\r'
937
+ console.scrollTop = console.scrollHeight
938
+ },
939
+ // 显示读到的身份证信息
940
+ setText (msg) {
941
+ document.getElementById('Name').value = msg.strName
942
+ document.getElementById('Sex').value = msg.strSex
943
+ document.getElementById('Nation').value = msg.strNation
944
+ document.getElementById('Born').value = msg.strBirth
945
+ document.getElementById('Address').value = msg.strAddress
946
+ document.getElementById('CardNo').value = msg.strID
947
+ document.getElementById('Police').value = msg.strOrg
948
+ document.getElementById('ActivityLFrom').value = msg.strVaildityfrom
949
+ document.getElementById('ActivityLTo').value = msg.strVaildityto
950
+ document.getElementById('DeviceNo').value = msg.strName
951
+ document.getElementById('PhotoBuffer').value = msg.base64BMP
952
+ document.getElementById('PhotoDisplay').src = 'data:image/jpg;base64,' + msg.base64BMP
953
+ },
954
+ close () {
955
+ this.show = !this.show
956
+ if (this.isopen) {
957
+ this.CloseVideo()
958
+ }
959
+ }
960
+ },
961
+ ready () {
962
+ this.onLoad().then(() => {
963
+ this.$emit('ready')
964
+ }).catch((error) => {
965
+ this.$emit('error', error)
966
+ })
967
+ }
968
+ }
969
+ </script>
970
+
971
+ <style scoped>
972
+ .modal-bk{
973
+ border-radius:18px 0;
974
+ }
975
+ .header{
976
+ background-color: #d8e9f3;
977
+ height: 88px;
978
+ }
979
+ .title{
980
+ position: absolute;
981
+ font-family:PingFang-SC-Bold;
982
+ font-size:36px;
983
+ color: #666666;
984
+ margin-top: 32px;
985
+ margin-left: 300px;
986
+ margin-bottom: 0px;
987
+ }
988
+ .operation{
989
+ font-family:PingFang-SC-Medium;
990
+ font-size: 22px;
991
+ color:#666666;
992
+ line-height: 5px;
993
+ }
994
+ .operation-group{
995
+ margin-left: 36px;
996
+ margin-top: 20px;
997
+ }
998
+ .photo{
999
+ font-family: PingFang-SC-Medium;
1000
+ font-size: 20px;
1001
+ color: #ffffff;
1002
+ margin-left: 20px;
1003
+ border-radius: 4px;
1004
+ background-color: #2fadf5;
1005
+ height: 32px;
1006
+ width: 92px;
1007
+ line-height:12px;
1008
+ }
1009
+ .readIDCard{
1010
+ font-family: PingFang-SC-Medium;
1011
+ font-size: 20px;
1012
+ color: #ffffff;
1013
+ border-radius: 4px;
1014
+ background-color: #2fadf5;
1015
+ margin-left: 20px;
1016
+ width: 120px;
1017
+ height: 32px;
1018
+ line-height: 12px;
1019
+ }
1020
+ .stop{
1021
+ border-radius: 4px;
1022
+ border: 1px solid #2fadf5;
1023
+ font-family: PingFang-SC-Medium;
1024
+ font-size: 20px;
1025
+ color: #2fadf5;
1026
+ width: 120px;
1027
+ height: 32px;
1028
+ line-height: 12px;
1029
+ }
1030
+ .showInfo{
1031
+ float: left;
1032
+ width: 640px;
1033
+ display: inline-block;
1034
+ margin-top: 20px;
1035
+ margin-left: 36px;
1036
+ }
1037
+ #Console{
1038
+ margin-left: 18px;
1039
+ border-radius: 4px;
1040
+ border: 1px solid #b5b5b5;
1041
+ height:300px;
1042
+ width:322px;
1043
+ resize:none;
1044
+ background-color: #f6f6f6;
1045
+ }
1046
+ .img{
1047
+ height:300px;
1048
+ width:300px;
1049
+ float: left;
1050
+ border-radius: 4px;
1051
+ border: 1px solid #b5b5b5;
1052
+ }
1053
+ #cam{
1054
+ border-radius: 4px;
1055
+ border:1px solid #b5b5b5;
1056
+ display: inline-block
1057
+ }
1058
+ .IdCard{
1059
+ height: 950px;
1060
+ width: 692px;
1061
+ display: inline-block;
1062
+ border-radius: 20px;
1063
+ background-color: #fafafa;
1064
+ border: 1px solid #d8f1ff;
1065
+ margin-left: 40px;
1066
+ margin-top: 20px;
1067
+ }
1068
+ .IdInput{
1069
+ border-radius: 4px;
1070
+ border: 1px solid #939393;
1071
+ width: 400px;
1072
+ height: 38px;
1073
+ margin-left: 20px;
1074
+ }
1075
+ .IdInputDiv{
1076
+ margin-top: 20px;
1077
+ margin-left: 100px;
1078
+ }
1079
+ .IdHint{
1080
+ font-family: PingFang-SC-Medium;
1081
+ font-size: 18px;
1082
+ color: #7e7c81;
1083
+ }
1084
+ #PhotoBuffer,#PhotoDisplay{
1085
+ border-radius: 4px;
1086
+ background-color: #ffffff;
1087
+ border: 1px solid #939393;
1088
+ margin-left: 20px;
1089
+ }
1090
+ </style>