fmode-ng 0.0.113 → 0.0.115
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.
- package/LICENSE.md +8 -0
- package/README.md +37 -37
- package/esm2022/fmode-ng.mjs +10 -5
- package/esm2022/lib/aigc/agent/fm-agent-task/fm-agent-task.component.mjs +8 -92
- package/esm2022/lib/aigc/agent/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
- package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -98
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -107
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -113
- package/esm2022/lib/aigc/avatar/index.mjs +10 -8
- package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -164
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -49
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -155
- package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
- package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -140
- package/esm2022/lib/aigc/chat/chat-message-card/duration-str.pipe.mjs +10 -29
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -3
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -193
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -331
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +8 -249
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -83
- package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/index.mjs +10 -8
- package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -367
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
- package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -115
- package/esm2022/lib/aigc/index.mjs +10 -14
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +10 -2
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -174
- package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
- package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-func.mjs +9 -162
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-work.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -313
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -4
- package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -62
- package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -87
- package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -345
- package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -81
- package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -152
- package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -42
- package/esm2022/lib/aigc/story/index.mjs +10 -6
- package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -47
- package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -95
- package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -253
- package/esm2022/lib/aigc/story/story.service.mjs +10 -35
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +10 -636
- package/esm2022/lib/aigc/voice/index.mjs +10 -7
- package/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs +10 -55
- package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -2
- package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -96
- package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +8 -177
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
- package/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs +10 -215
- package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +10 -189
- package/esm2022/lib/aigc/voice/tts/index.mjs +10 -5
- package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -2
- package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +8 -346
- package/esm2022/lib/code/fm-codemirror/fm-codemirror.component.mjs +8 -342
- package/esm2022/lib/code/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +8 -430
- package/esm2022/lib/core/agent/chat/completion/index.mjs +10 -2
- package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -2
- package/esm2022/lib/core/agent/chat/fmode-chat.mjs +8 -617
- package/esm2022/lib/core/agent/chat/index.mjs +10 -4
- package/esm2022/lib/core/agent/chat/interface.mjs +10 -2
- package/esm2022/lib/core/agent/index.mjs +10 -6
- package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +10 -133
- package/esm2022/lib/core/agent/prompt/index.mjs +10 -2
- package/esm2022/lib/core/agent/prompt/prompt-util.mjs +10 -16
- package/esm2022/lib/core/agent/story/agent.story.mjs +10 -64
- package/esm2022/lib/core/agent/story/index.mjs +10 -2
- package/esm2022/lib/core/agent/task/agent.task.mjs +10 -90
- package/esm2022/lib/core/agent/task/index.mjs +10 -2
- package/esm2022/lib/core/agent/waiting/index.mjs +10 -3
- package/esm2022/lib/core/agent/waiting/loading/loading.ctrl.mjs +10 -279
- package/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs +8 -190
- package/esm2022/lib/core/index.mjs +10 -4
- package/esm2022/lib/core/parse/datatype/acl.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/file.mjs +10 -69
- package/esm2022/lib/core/parse/datatype/geopoint.mjs +10 -57
- package/esm2022/lib/core/parse/datatype/relation.mjs +10 -56
- package/esm2022/lib/core/parse/fmode.cloud.mjs +10 -0
- package/esm2022/lib/core/parse/fmode.object.mjs +10 -232
- package/esm2022/lib/core/parse/fmode.parse.mjs +10 -84
- package/esm2022/lib/core/parse/fmode.query.mjs +8 -500
- package/esm2022/lib/core/parse/fmode.user.mjs +10 -275
- package/esm2022/lib/core/parse/index.mjs +10 -5
- package/esm2022/lib/core/parse/types.mjs +10 -2
- package/esm2022/lib/core/voice/index.mjs +10 -3
- package/esm2022/lib/core/voice/tts/index.mjs +10 -2
- package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -14
- package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/file.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -57
- package/esm2022/lib/icon/filetype/index.mjs +10 -12
- package/esm2022/lib/icon/filetype/md.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -8
- package/esm2022/lib/icon/filetype/video.svg.mjs +10 -3
- package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -3
- package/esm2022/lib/icon/index.mjs +10 -2
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -209
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
- package/esm2022/lib/map/index.mjs +10 -4
- package/esm2022/lib/map/map.module.mjs +10 -61
- package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -132
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -115
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -118
- package/esm2022/lib/nova-cloud/index.mjs +10 -3
- package/esm2022/lib/nova-cloud/ncloud-api-func.mjs +10 -91
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -53
- package/esm2022/lib/payment/index.mjs +10 -2
- package/esm2022/lib/payment/payment/payment.component.mjs +10 -543
- package/esm2022/lib/payment/payment.service.mjs +10 -202
- package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -48
- package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -29
- package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -211
- package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +8 -412
- package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -50
- package/esm2022/lib/person/index.mjs +10 -5
- package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -144
- package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -41
- package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -595
- package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -172
- package/esm2022/lib/person/person.service.mjs +8 -193
- package/esm2022/lib/platform/cross.service.mjs +10 -62
- package/esm2022/lib/platform/index.mjs +10 -2
- package/esm2022/lib/social/index.mjs +10 -2
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -230
- package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
- package/esm2022/lib/storage/index.mjs +10 -5
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -131
- package/esm2022/lib/storage/service-hwobs/index.mjs +10 -3
- package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +1 -1
- package/esm2022/lib/storage/service-upload/index.mjs +10 -2
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -513
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
- package/esm2022/lib/storage/service-upload/util-file-metadata.mjs +10 -93
- package/esm2022/lib/storage/storage.module.mjs +10 -42
- package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -237
- package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +8 -72
- package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -207
- package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +8 -227
- package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -303
- package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +8 -371
- package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -94
- package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -36
- package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -281
- package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -72
- package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -22
- package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -169
- package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -69
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -65
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -55
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -142
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -35
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -81
- package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -50
- package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -145
- package/esm2022/lib/text/index.mjs +10 -4
- package/esm2022/lib/user/account/account.service.mjs +10 -222
- package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -66
- package/esm2022/lib/user/index.mjs +10 -17
- package/esm2022/lib/user/login/auth.guard.mjs +10 -28
- package/esm2022/lib/user/login/auth.service.mjs +8 -433
- package/esm2022/lib/user/login/login.component.mjs +10 -916
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -311
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
- package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -164
- package/esm2022/lib/user/profile/profile-bind/profile-confirm-modal.component.mjs +10 -79
- package/esm2022/lib/user/profile/profile.module.mjs +10 -54
- package/esm2022/lib/user/staff/index.mjs +10 -4
- package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
- package/esm2022/lib/user/staff/staff.module.mjs +10 -18
- package/esm2022/lib/user/staff/staff.service.mjs +10 -85
- package/esm2022/lib/user/user-name.pipe.mjs +10 -29
- package/esm2022/lib/user/user.module.mjs +10 -102
- package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
- package/esm2022/lib/video/index.mjs +10 -2
- package/esm2022/public-api.mjs +10 -21
- package/fesm2022/fmode-ng.mjs +7 -19788
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.d.ts +2 -2
- package/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.d.ts +2 -2
- package/lib/aigc/chat/chat-list/chat-list.component.d.ts +3 -2
- package/lib/aigc/chat/chat-message-card/comp-message-card.component.d.ts +3 -3
- package/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.d.ts +2 -2
- package/lib/aigc/chat/chat-modal-input/modal-input.component.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-func.d.ts +3 -3
- package/lib/aigc/service-fmai/service-imagine/imagine-work.d.ts +4 -4
- package/lib/aigc/service-fmai/service-imagine/imagine.service.d.ts +6 -6
- package/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.d.ts +2 -2
- package/lib/aigc/story/fm-story-card/fm-story-card.component.d.ts +2 -1
- package/lib/aigc/story/fm-story-list/fm-story-list.component.d.ts +6 -6
- package/lib/aigc/story/fm-story-list/story-preview.d.ts +4 -4
- package/lib/aigc/story/fm-story-loader/fm-story-loader.component.d.ts +3 -3
- package/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.d.ts +2 -2
- package/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.d.ts +3 -2
- package/lib/aigc/story/modal-chat-story/modal-chat-story.component.d.ts +6 -6
- package/lib/aigc/story/story.service.d.ts +3 -2
- package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
- package/lib/core/agent/chat/fmode-chat.d.ts +11 -11
- package/lib/core/agent/story/agent.story.d.ts +8 -8
- package/lib/core/parse/datatype/geopoint.d.ts +5 -1
- package/lib/core/parse/fmode.cloud.d.ts +32 -0
- package/lib/core/parse/fmode.object.d.ts +2 -2
- package/lib/core/parse/fmode.parse.d.ts +15 -9
- package/lib/core/parse/fmode.query.d.ts +41 -2
- package/lib/core/parse/fmode.user.d.ts +1 -0
- package/lib/core/parse/index.d.ts +1 -0
- package/lib/core/parse/types.d.ts +2 -0
- package/lib/map/comp-poi-picker/comp-poi-picker.component.d.ts +5 -5
- package/lib/payment/payment/payment.component.d.ts +3 -3
- package/lib/payment/payment.service.d.ts +4 -4
- package/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.d.ts +2 -1
- package/lib/person/comp-person-item/comp-person-item.component.d.ts +2 -1
- package/lib/person/comp-person-story/comp-person-story.component.d.ts +13 -13
- package/lib/person/edit-upload/edit-upload.component.d.ts +1 -1
- package/lib/person/modal-person-select/modal-person-select.component.d.ts +5 -5
- package/lib/person/modal-user-verify/user-verify.component.d.ts +5 -5
- package/lib/person/person-detail/person-detail.component.d.ts +4 -4
- package/lib/person/person.service.d.ts +7 -7
- package/lib/storage/service-hwobs/hwobs.service.d.ts +4 -5
- package/lib/storage/service-upload/nova-upload.service.d.ts +5 -5
- package/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.d.ts +2 -1
- package/lib/text/fm-article-editor/article.service.d.ts +12 -12
- package/lib/text/fm-article-editor/draft.service.d.ts +5 -5
- package/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.d.ts +3 -2
- package/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.d.ts +16 -17
- package/lib/text/fm-article-editor/fm-article-editor.component.d.ts +3 -3
- package/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.d.ts +11 -10
- package/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.d.ts +2 -2
- package/lib/text/fm-article-editor/prompt/prompt-insertion-article.d.ts +3 -3
- package/lib/text/fm-article-editor/task-article-generation.d.ts +5 -4
- package/lib/text/fm-article-editor/tasks/task-article-draft-create.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline-edit.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-outline.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-article-preview.d.ts +2 -1
- package/lib/text/fm-article-editor/tasks/task-article-writing-options.d.ts +3 -3
- package/lib/text/fm-article-editor/tasks/task-document-select.d.ts +3 -3
- package/lib/user/account/account.service.d.ts +2 -2
- package/lib/user/comp-user-avatar/comp-user-avatar.component.d.ts +2 -2
- package/lib/user/login/auth.service.d.ts +5 -5
- package/lib/user/login/login.component.d.ts +3 -3
- package/lib/user/profile/auth-profile.service.d.ts +8 -8
- package/lib/user/profile/profile-bind/profile-bind.component.d.ts +7 -7
- package/lib/user/profile/profile-bind/profile-confirm-modal.component.d.ts +2 -2
- package/lib/user/staff/staff.service.d.ts +3 -3
- package/lib/user/user-name.pipe.d.ts +2 -2
- package/package.json +12 -18
|
@@ -1,595 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import { EditUploadModule } from "../edit-upload/edit-upload.module";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import { NzIconModule } from "ng-zorro-antd/icon";
|
|
12
|
-
import { NzTabsModule } from "ng-zorro-antd/tabs";
|
|
13
|
-
import { NzButtonModule } from "ng-zorro-antd/button";
|
|
14
|
-
import { NzModalModule } from "ng-zorro-antd/modal";
|
|
15
|
-
import { NzGridModule } from "ng-zorro-antd/grid";
|
|
16
|
-
import { NzRadioModule } from "ng-zorro-antd/radio";
|
|
17
|
-
import { CommonModule } from "@angular/common";
|
|
18
|
-
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
|
|
19
|
-
import { NzImageModule } from "ng-zorro-antd/image";
|
|
20
|
-
import { SecretTextPipe } from "./secret-text.pipe";
|
|
21
|
-
import * as i0 from "@angular/core";
|
|
22
|
-
import * as i1 from "@angular/common/http";
|
|
23
|
-
import * as i2 from "ng-zorro-antd/message";
|
|
24
|
-
import * as i3 from "../../user/account/account.service";
|
|
25
|
-
import * as i4 from "../../user/login/auth.service";
|
|
26
|
-
import * as i5 from "../../nova-cloud/nova-cloud.service";
|
|
27
|
-
import * as i6 from "@ionic/angular/standalone";
|
|
28
|
-
import * as i7 from "@angular/common";
|
|
29
|
-
import * as i8 from "@angular/forms";
|
|
30
|
-
import * as i9 from "ng-zorro-antd/input";
|
|
31
|
-
import * as i10 from "ng-zorro-antd/icon";
|
|
32
|
-
import * as i11 from "ng-zorro-antd/button";
|
|
33
|
-
import * as i12 from "ng-zorro-antd/core/transition-patch";
|
|
34
|
-
import * as i13 from "ng-zorro-antd/core/wave";
|
|
35
|
-
import * as i14 from "ng-zorro-antd/grid";
|
|
36
|
-
import * as i15 from "ng-zorro-antd/radio";
|
|
37
|
-
import * as i16 from "ng-zorro-antd/image";
|
|
38
|
-
import * as i17 from "../edit-upload/edit-upload.component";
|
|
39
|
-
export class ModalUserVerifyComponent {
|
|
40
|
-
constructor(http, message, novaAccount, authServ, novaCloud, modalCtrl) {
|
|
41
|
-
this.http = http;
|
|
42
|
-
this.message = message;
|
|
43
|
-
this.novaAccount = novaAccount;
|
|
44
|
-
this.authServ = authServ;
|
|
45
|
-
this.novaCloud = novaCloud;
|
|
46
|
-
this.modalCtrl = modalCtrl;
|
|
47
|
-
this.isVisible = false;
|
|
48
|
-
this.isVisibleChange = new EventEmitter();
|
|
49
|
-
this.verifyOptions = {
|
|
50
|
-
idcard: false,
|
|
51
|
-
student: false,
|
|
52
|
-
bankcard: false,
|
|
53
|
-
autoFinish: true
|
|
54
|
-
};
|
|
55
|
-
this.verifyResult = {};
|
|
56
|
-
this.isLoading = true;
|
|
57
|
-
this.tab = "idcard";
|
|
58
|
-
this.company = "";
|
|
59
|
-
this.idcard = "";
|
|
60
|
-
this.idcardData = {};
|
|
61
|
-
this.name = "";
|
|
62
|
-
this.sex = "";
|
|
63
|
-
this.idcard_image_front = ""; //身份证正面
|
|
64
|
-
this.idcard_image_back = ""; //身份证反面
|
|
65
|
-
this.identity_auth = false; //身份证反面是否上传正确
|
|
66
|
-
// radioValue:string = 'A'
|
|
67
|
-
this.studentDateil = {
|
|
68
|
-
studentID: "",
|
|
69
|
-
mobile: "",
|
|
70
|
-
school: "",
|
|
71
|
-
schoolMajor: "",
|
|
72
|
-
studentType: "毕业",
|
|
73
|
-
education: "本科",
|
|
74
|
-
workUnit: "",
|
|
75
|
-
workid: "",
|
|
76
|
-
diploma: "",
|
|
77
|
-
degreeNumber: "",
|
|
78
|
-
entrySchool: 2023,
|
|
79
|
-
college: "",
|
|
80
|
-
};
|
|
81
|
-
this.eduImage = ""; //学生证
|
|
82
|
-
//银行卡信息
|
|
83
|
-
this.bankMap = {
|
|
84
|
-
bank: "",
|
|
85
|
-
bankcard: "",
|
|
86
|
-
bankmobile: "",
|
|
87
|
-
};
|
|
88
|
-
/* 可选年级 */
|
|
89
|
-
this.options = [];
|
|
90
|
-
this.bankOptions = [
|
|
91
|
-
"招商银行",
|
|
92
|
-
"工商银行",
|
|
93
|
-
"农业银行",
|
|
94
|
-
"中国银行",
|
|
95
|
-
"建设银行",
|
|
96
|
-
"交通银行",
|
|
97
|
-
"邮政储蓄银行",
|
|
98
|
-
"农商银行",
|
|
99
|
-
"中信银行",
|
|
100
|
-
"光大银行",
|
|
101
|
-
"华夏银行",
|
|
102
|
-
"广发银行",
|
|
103
|
-
"平安银行",
|
|
104
|
-
"浦发银行",
|
|
105
|
-
"兴业银行",
|
|
106
|
-
"民生银行",
|
|
107
|
-
"恒丰银行",
|
|
108
|
-
"浙商银行",
|
|
109
|
-
"渤海银行",
|
|
110
|
-
];
|
|
111
|
-
}
|
|
112
|
-
// 验证所有所需认证项目是否已完成
|
|
113
|
-
veifyFinishBack() {
|
|
114
|
-
let hasNotVerify = false;
|
|
115
|
-
if (this.verifyOptions) {
|
|
116
|
-
Object.keys(this.verifyOptions).forEach(key => {
|
|
117
|
-
if (key == "autoFinish")
|
|
118
|
-
return;
|
|
119
|
-
if (this.verifyOptions?.[key]) {
|
|
120
|
-
if (!this.verifyResult?.[key]) {
|
|
121
|
-
hasNotVerify = true;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
// 更新用户数据
|
|
127
|
-
let user = Parse.User.current();
|
|
128
|
-
let hasUpdate = false;
|
|
129
|
-
if (user?.get('sex') != this.profile?.get("sex")) {
|
|
130
|
-
user?.set("sex", this.profile?.get("sex"));
|
|
131
|
-
hasUpdate = true;
|
|
132
|
-
}
|
|
133
|
-
if (user?.get('realname') != this.profile?.get("name")) {
|
|
134
|
-
user?.set("realname", this.profile?.get("name"));
|
|
135
|
-
hasUpdate = true;
|
|
136
|
-
}
|
|
137
|
-
if (hasUpdate) {
|
|
138
|
-
user?.save();
|
|
139
|
-
}
|
|
140
|
-
// 完成更新
|
|
141
|
-
if (!this.verifyOptions?.autoFinish)
|
|
142
|
-
return;
|
|
143
|
-
if (!hasNotVerify) {
|
|
144
|
-
this.modalCtrl.dismiss({
|
|
145
|
-
verifyResult: this.verifyResult,
|
|
146
|
-
profile: this.profile,
|
|
147
|
-
account: this.account,
|
|
148
|
-
}, "confirm");
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
async ngOnInit() {
|
|
152
|
-
this.company = this.authServ.company || localStorage.getItem("company") || "";
|
|
153
|
-
await this.novaAccount.getProfile();
|
|
154
|
-
this.getOptions();
|
|
155
|
-
this.getProfile();
|
|
156
|
-
await this.getAccount();
|
|
157
|
-
this.veifyFinishBack();
|
|
158
|
-
this.isLoading = false;
|
|
159
|
-
this.onBreakPointSet && this.onBreakPointSet(0.75);
|
|
160
|
-
}
|
|
161
|
-
getOptions() {
|
|
162
|
-
let beforYear = new Date().getFullYear();
|
|
163
|
-
for (let index = beforYear - 20; index <= beforYear; index++) {
|
|
164
|
-
this.options.unshift(index);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
async getProfile() {
|
|
168
|
-
let profile = this.novaAccount.profile;
|
|
169
|
-
console.log(profile);
|
|
170
|
-
if (profile?.id) {
|
|
171
|
-
this.profile = profile;
|
|
172
|
-
this.studentDateil = {
|
|
173
|
-
studentID: profile?.get("studentID"),
|
|
174
|
-
mobile: profile?.get("mobile"),
|
|
175
|
-
school: profile?.get("school"),
|
|
176
|
-
schoolMajor: profile?.get("schoolMajor"),
|
|
177
|
-
studentType: profile?.get("studentType"),
|
|
178
|
-
education: profile?.get("education"),
|
|
179
|
-
workUnit: profile?.get("workUnit"),
|
|
180
|
-
workid: profile?.get("workid"),
|
|
181
|
-
diploma: profile?.get("diploma"),
|
|
182
|
-
degreeNumber: profile?.get("degreeNumber"),
|
|
183
|
-
entrySchool: profile?.get("entrySchool")
|
|
184
|
-
? profile.get("entrySchool").getFullYear()
|
|
185
|
-
: null,
|
|
186
|
-
college: profile?.get("college"),
|
|
187
|
-
};
|
|
188
|
-
this.eduImage = profile?.get("eduImage");
|
|
189
|
-
this.name = profile?.get("name");
|
|
190
|
-
if (profile?.get("isCheck")) {
|
|
191
|
-
this.idcard = profile?.get("idcard");
|
|
192
|
-
this.sex = profile?.get("sex");
|
|
193
|
-
this.idcard_image_front = profile?.get("attachment")[0];
|
|
194
|
-
this.idcard_image_back = profile?.get("attachment")[1];
|
|
195
|
-
this.verifyResult.idcard = true;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
async getAccount() {
|
|
200
|
-
let uid = Parse.User.current()?.id;
|
|
201
|
-
let query = new Parse.Query("Account");
|
|
202
|
-
query.equalTo("user", uid);
|
|
203
|
-
query.equalTo("company", this.company);
|
|
204
|
-
query.notEqualTo("isDeleted", true);
|
|
205
|
-
this.account = await query.first();
|
|
206
|
-
if (this.account?.id && this.account?.get("bank")) {
|
|
207
|
-
this.bankMap = this.account.get("bank")?.[0] || {
|
|
208
|
-
bank: "",
|
|
209
|
-
bankcard: "",
|
|
210
|
-
bankmobile: "",
|
|
211
|
-
};
|
|
212
|
-
this.verifyResult.bankcard = true;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
onClose() {
|
|
216
|
-
this.isVisibleChange.emit(false);
|
|
217
|
-
}
|
|
218
|
-
//上传照片
|
|
219
|
-
async uploadChange(e, type) {
|
|
220
|
-
console.log(e, type);
|
|
221
|
-
let imgUrl = e[0];
|
|
222
|
-
console.log(imgUrl);
|
|
223
|
-
this[type] = imgUrl;
|
|
224
|
-
let param, res;
|
|
225
|
-
switch (type) {
|
|
226
|
-
/* 身份证件正面 */
|
|
227
|
-
case "idcard_image_front":
|
|
228
|
-
param = {
|
|
229
|
-
company: this.company,
|
|
230
|
-
image_url: imgUrl,
|
|
231
|
-
};
|
|
232
|
-
res = await this.novaCloud.api("/apig/idcard/ocr", param);
|
|
233
|
-
if (res && res.cards[0]?.name && res.cards[0]?.id_card_number) {
|
|
234
|
-
this.name = res.cards[0].name;
|
|
235
|
-
this.idcard = res.cards[0].id_card_number;
|
|
236
|
-
this.sex = res.cards[0].gender;
|
|
237
|
-
this.idcardData = res.cards[0];
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
this.message.create("error", "未识别到身份信息,请确保身份证照片清晰不反光!");
|
|
241
|
-
}
|
|
242
|
-
break;
|
|
243
|
-
/* 身份证件国徽面 */
|
|
244
|
-
case "idcard_image_back":
|
|
245
|
-
param = {
|
|
246
|
-
company: this.company,
|
|
247
|
-
image_url: imgUrl,
|
|
248
|
-
};
|
|
249
|
-
res = await this.novaCloud.api("/apig/idcard/ocr", param);
|
|
250
|
-
if (res && res.cards[0]?.side && res.cards[0].side == "back") {
|
|
251
|
-
this.identity_auth = true;
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
this.message.create("error", "未识别到身份信息,请确保身份证照片清晰不反光!");
|
|
255
|
-
break;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
//删除
|
|
259
|
-
onDeleted(type) {
|
|
260
|
-
this[type] = "";
|
|
261
|
-
switch (type) {
|
|
262
|
-
case "idcard_image_front":
|
|
263
|
-
this.name = "";
|
|
264
|
-
this.idcard = "";
|
|
265
|
-
break;
|
|
266
|
-
case "idcard_image_back":
|
|
267
|
-
this.identity_auth = false;
|
|
268
|
-
break;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
/* 是否可提交 */
|
|
272
|
-
authDisabled() {
|
|
273
|
-
if (!this.verifyOptions?.idcard?.ocr)
|
|
274
|
-
return true;
|
|
275
|
-
let diabled = this.name && this.idcard && this.identity_auth;
|
|
276
|
-
if (diabled)
|
|
277
|
-
return true;
|
|
278
|
-
return false;
|
|
279
|
-
}
|
|
280
|
-
//是否可提交学历认证
|
|
281
|
-
authDisabledStudent() {
|
|
282
|
-
return true;
|
|
283
|
-
}
|
|
284
|
-
async onSubmit() {
|
|
285
|
-
// console.log(this.name);
|
|
286
|
-
if (!this.verifyOptions?.idcard?.ocr || (this.name && this.idcard && this.identity_auth)) {
|
|
287
|
-
let param = {
|
|
288
|
-
company: this.company,
|
|
289
|
-
cardNo: this.idcard,
|
|
290
|
-
realName: this.name,
|
|
291
|
-
};
|
|
292
|
-
let res = await this.novaCloud.api("/apig/idcard", param);
|
|
293
|
-
console.log(res);
|
|
294
|
-
if (res && res?.error_code === 0 && res?.result?.isok == true) {
|
|
295
|
-
let uid = Parse.User.current()?.id;
|
|
296
|
-
let identity_files = [];
|
|
297
|
-
if (this.idcard_image_front)
|
|
298
|
-
identity_files.push(this.idcard_image_front);
|
|
299
|
-
if (this.idcard_image_back)
|
|
300
|
-
identity_files.push(this.idcard_image_back);
|
|
301
|
-
let query = new Parse.Query("Profile");
|
|
302
|
-
query.equalTo("user", uid);
|
|
303
|
-
query.equalTo("company", this.company);
|
|
304
|
-
query.notEqualTo("isDeleted", true);
|
|
305
|
-
let profile = await query.first();
|
|
306
|
-
if (!profile?.id) {
|
|
307
|
-
let parseObj = Parse.Object.extend("Profile");
|
|
308
|
-
profile = new parseObj();
|
|
309
|
-
}
|
|
310
|
-
profile?.set("name", this.name);
|
|
311
|
-
profile?.set("idcard", this.idcard);
|
|
312
|
-
profile?.set("sex", this.sex);
|
|
313
|
-
/* idcardData
|
|
314
|
-
{
|
|
315
|
-
"sex": "男",
|
|
316
|
-
"area": "浙江省温州市瑞安市",
|
|
317
|
-
"city": "温州市",
|
|
318
|
-
"birthday": "2006-3-13",
|
|
319
|
-
"district": "瑞安市",
|
|
320
|
-
"province": "浙江省"
|
|
321
|
-
}
|
|
322
|
-
*/
|
|
323
|
-
profile?.set({
|
|
324
|
-
city: this.idcardData?.city,
|
|
325
|
-
area: [this.idcardData?.province, this.idcardData?.city, this.idcardData?.district],
|
|
326
|
-
birthdate: this.idcardData?.birthday
|
|
327
|
-
});
|
|
328
|
-
profile?.set("company", {
|
|
329
|
-
__type: "Pointer",
|
|
330
|
-
className: "Company",
|
|
331
|
-
objectId: this.company,
|
|
332
|
-
});
|
|
333
|
-
profile?.set("user", {
|
|
334
|
-
__type: "Pointer",
|
|
335
|
-
className: "_User",
|
|
336
|
-
objectId: uid,
|
|
337
|
-
});
|
|
338
|
-
profile?.set("attachment", identity_files);
|
|
339
|
-
profile?.set("isCheck", true);
|
|
340
|
-
if (!profile?.get("type")) {
|
|
341
|
-
profile?.set("type", "user");
|
|
342
|
-
}
|
|
343
|
-
await profile?.save();
|
|
344
|
-
this.message.create("success", "认证成功");
|
|
345
|
-
this.isVisibleChange.emit(false);
|
|
346
|
-
await this.novaAccount.getProfile();
|
|
347
|
-
this.profile = this.novaAccount.profile;
|
|
348
|
-
this.verifyResult.idcard = true;
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
this.message.create("error", "认证失败:请检查身份信息是否正确。");
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
this.veifyFinishBack();
|
|
355
|
-
}
|
|
356
|
-
//选择毕业年份
|
|
357
|
-
onChangeDate(e) {
|
|
358
|
-
console.log(e);
|
|
359
|
-
}
|
|
360
|
-
mobileStatus(mobile) {
|
|
361
|
-
let reg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;
|
|
362
|
-
if (!reg.test(mobile)) {
|
|
363
|
-
return "error";
|
|
364
|
-
}
|
|
365
|
-
else {
|
|
366
|
-
return "";
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
//提交学历信息
|
|
370
|
-
async onSubimtStudent() {
|
|
371
|
-
let { studentID, mobile, school, schoolMajor, studentType, education, workUnit, workid, diploma, degreeNumber, entrySchool, college, } = this.studentDateil;
|
|
372
|
-
console.log(this.studentDateil);
|
|
373
|
-
let reg = /^[1][3,4,5,7,8][0-9]{9}$/;
|
|
374
|
-
if (!studentID ||
|
|
375
|
-
!mobile ||
|
|
376
|
-
!school ||
|
|
377
|
-
!this.name
|
|
378
|
-
// !schoolMajor ||
|
|
379
|
-
// !education ||
|
|
380
|
-
// !workUnit ||
|
|
381
|
-
// !diploma
|
|
382
|
-
) {
|
|
383
|
-
this.message.create("error", "认证失败:请检查信息填写是否完整。");
|
|
384
|
-
return;
|
|
385
|
-
}
|
|
386
|
-
if (!reg.test(mobile)) {
|
|
387
|
-
this.message.create("error", "认证失败:手机号格式错误。");
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
let uid = Parse.User.current()?.id;
|
|
391
|
-
let query = new Parse.Query("Profile");
|
|
392
|
-
query.equalTo("user", uid);
|
|
393
|
-
query.equalTo("company", this.company);
|
|
394
|
-
query.notEqualTo("isDeleted", true);
|
|
395
|
-
let profile = await query.first();
|
|
396
|
-
if (!profile?.id) {
|
|
397
|
-
let parseObj = Parse.Object.extend("Profile");
|
|
398
|
-
profile = new parseObj();
|
|
399
|
-
}
|
|
400
|
-
profile?.set("name", this.name);
|
|
401
|
-
// profile?.set("idcard", this.idcard);
|
|
402
|
-
profile?.set("studentID", studentID);
|
|
403
|
-
profile?.set("mobile", mobile);
|
|
404
|
-
profile?.set("school", school);
|
|
405
|
-
profile?.set("college", college);
|
|
406
|
-
profile?.set("schoolMajor", schoolMajor);
|
|
407
|
-
profile?.set("studentType", studentType);
|
|
408
|
-
profile?.set("education", education);
|
|
409
|
-
profile?.set("workUnit", String(workUnit));
|
|
410
|
-
profile?.set("workid", workid);
|
|
411
|
-
profile?.set("eduImage", this.eduImage);
|
|
412
|
-
profile?.set("diploma", diploma);
|
|
413
|
-
profile?.set("degreeNumber", degreeNumber);
|
|
414
|
-
entrySchool &&
|
|
415
|
-
studentType != "在校" &&
|
|
416
|
-
profile?.set("entrySchool", new Date(new Date().setFullYear(entrySchool)));
|
|
417
|
-
profile?.set("company", {
|
|
418
|
-
__type: "Pointer",
|
|
419
|
-
className: "Company",
|
|
420
|
-
objectId: this.company,
|
|
421
|
-
});
|
|
422
|
-
profile?.set("user", {
|
|
423
|
-
__type: "Pointer",
|
|
424
|
-
className: "_User",
|
|
425
|
-
objectId: uid,
|
|
426
|
-
});
|
|
427
|
-
if (!profile?.get("type")) {
|
|
428
|
-
profile?.set("type", "student");
|
|
429
|
-
}
|
|
430
|
-
await profile?.save();
|
|
431
|
-
this.message.create("success", "认证成功");
|
|
432
|
-
this.verifyResult.student = true;
|
|
433
|
-
this.isVisibleChange.emit(false);
|
|
434
|
-
await this.novaAccount.getProfile();
|
|
435
|
-
this.profile = this.novaAccount.profile;
|
|
436
|
-
this.veifyFinishBack();
|
|
437
|
-
}
|
|
438
|
-
cardNoStatus() {
|
|
439
|
-
let reg = /^([1-9]{1})(\d{15}|\d{18})$/;
|
|
440
|
-
if (!reg.test(this.bankMap.bankcard)) {
|
|
441
|
-
return "error";
|
|
442
|
-
}
|
|
443
|
-
else {
|
|
444
|
-
return "";
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
saveBankAuth() {
|
|
448
|
-
if (!this.name ||
|
|
449
|
-
!this.idcard ||
|
|
450
|
-
!this.bankMap.bankcard ||
|
|
451
|
-
!this.bankMap.bankmobile) {
|
|
452
|
-
return true;
|
|
453
|
-
}
|
|
454
|
-
else {
|
|
455
|
-
return false;
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
//银行卡
|
|
459
|
-
async onSubimtBank() {
|
|
460
|
-
if (!this.name || !this.idcard) {
|
|
461
|
-
this.message.create("error", "请先完成实名或学生认证。");
|
|
462
|
-
return;
|
|
463
|
-
}
|
|
464
|
-
if (!this.bankMap.bankcard ||
|
|
465
|
-
!this.bankMap.bankmobile) {
|
|
466
|
-
this.message.create("error", "请填写完整信息。");
|
|
467
|
-
return;
|
|
468
|
-
}
|
|
469
|
-
let reg = /^([1-9]{1})(\d{15}|\d{18})$/;
|
|
470
|
-
if (!reg.test(this.bankMap.bankcard)) {
|
|
471
|
-
this.message.create("error", "认证失败:请检查银行卡信息是否正确。");
|
|
472
|
-
return;
|
|
473
|
-
}
|
|
474
|
-
let param = {
|
|
475
|
-
company: this.company,
|
|
476
|
-
// company:'UP2cStyjuk',
|
|
477
|
-
bankcard: this.bankMap.bankcard.replace(/\s/g, ""),
|
|
478
|
-
name: this.name,
|
|
479
|
-
idcard: this.idcard,
|
|
480
|
-
mobile: this.bankMap.bankmobile,
|
|
481
|
-
};
|
|
482
|
-
let res = await this.novaCloud.api("/apig/bankcard", param);
|
|
483
|
-
console.log(res);
|
|
484
|
-
if (res && res.code == 200 && res?.success && res.data.msg == '一致') {
|
|
485
|
-
let bank_info = res.data.bank_info;
|
|
486
|
-
let uid = Parse.User.current()?.id;
|
|
487
|
-
let query = new Parse.Query("Account");
|
|
488
|
-
query.equalTo("user", uid);
|
|
489
|
-
query.equalTo("company", this.company);
|
|
490
|
-
query.notEqualTo("isDeleted", true);
|
|
491
|
-
let account = await query.first();
|
|
492
|
-
if (!account?.id) {
|
|
493
|
-
let parseObj = Parse.Object.extend("Profile");
|
|
494
|
-
account = new parseObj();
|
|
495
|
-
}
|
|
496
|
-
account?.set("company", {
|
|
497
|
-
__type: "Pointer",
|
|
498
|
-
className: "Company",
|
|
499
|
-
objectId: this.company,
|
|
500
|
-
});
|
|
501
|
-
account?.set("user", {
|
|
502
|
-
__type: "Pointer",
|
|
503
|
-
className: "_User",
|
|
504
|
-
objectId: uid,
|
|
505
|
-
});
|
|
506
|
-
account?.set("bank", [
|
|
507
|
-
{
|
|
508
|
-
bank: bank_info.bank,
|
|
509
|
-
bankcard: this.bankMap.bankcard,
|
|
510
|
-
bankmobile: this.bankMap.bankmobile,
|
|
511
|
-
city: bank_info.city
|
|
512
|
-
},
|
|
513
|
-
]);
|
|
514
|
-
await account?.save();
|
|
515
|
-
let queryProfile = new Parse.Query("Profile");
|
|
516
|
-
queryProfile.equalTo("user", uid);
|
|
517
|
-
queryProfile.equalTo("company", this.company);
|
|
518
|
-
queryProfile.notEqualTo("isDeleted", true);
|
|
519
|
-
queryProfile.select("objectId");
|
|
520
|
-
let profile = await queryProfile.first();
|
|
521
|
-
if (!profile?.id) {
|
|
522
|
-
let parseObj = Parse.Object.extend("Profile");
|
|
523
|
-
profile = new parseObj();
|
|
524
|
-
}
|
|
525
|
-
profile?.set("company", {
|
|
526
|
-
__type: "Pointer",
|
|
527
|
-
className: "Company",
|
|
528
|
-
objectId: this.company,
|
|
529
|
-
});
|
|
530
|
-
profile?.set("user", {
|
|
531
|
-
__type: "Pointer",
|
|
532
|
-
className: "_User",
|
|
533
|
-
objectId: uid,
|
|
534
|
-
});
|
|
535
|
-
profile?.set("cardtype", bank_info.bank);
|
|
536
|
-
profile?.set("cardnum", this.bankMap.bankcard);
|
|
537
|
-
profile?.set("nativePlace", bank_info.city);
|
|
538
|
-
await profile?.save();
|
|
539
|
-
this.message.create("success", "认证成功");
|
|
540
|
-
this.verifyResult.bankcard = true;
|
|
541
|
-
this.isVisibleChange.emit(false);
|
|
542
|
-
this.veifyFinishBack();
|
|
543
|
-
}
|
|
544
|
-
else {
|
|
545
|
-
this.message.create("error", "认证失败:请检查银行卡信息是否正确。");
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalUserVerifyComponent, deps: [{ token: i1.HttpClient }, { token: i2.NzMessageService }, { token: i3.AccountService }, { token: i4.AuthService }, { token: i5.NovaCloudService }, { token: i6.ModalController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
549
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ModalUserVerifyComponent, isStandalone: true, selector: "app-user-verify", inputs: { isVisible: "isVisible", verifyOptions: "verifyOptions" }, outputs: { isVisibleChange: "isVisibleChange" }, ngImport: i0, template: "\r\n<ion-content *ngIf=\"isLoading\">\r\n <div class=\"page\" *ngIf=\"isLoading\">\r\n <ion-spinner name=\"crescent\" color=\"primary\" style=\"width:80px;height:80px;\"></ion-spinner>\r\n <ion-label color=\"primary\">\u6B63\u5728\u52A0\u8F7D\u8BA4\u8BC1\u7EC4\u4EF6...</ion-label>\r\n </div>\r\n</ion-content>\r\n\r\n<ion-content class=\"ion-padding\" *ngIf=\"!isLoading\">\r\n <ion-segment [(ngModel)]=\"tab\">\r\n <ion-segment-button *ngIf=\"verifyOptions?.idcard\" value=\"idcard\"><ion-icon name=\"card-outline\"></ion-icon> \u5B9E\u540D\u8BA4\u8BC1</ion-segment-button>\r\n <ion-segment-button *ngIf=\"verifyOptions?.student\" value=\"student\"><ion-icon name=\"school-outline\"></ion-icon> \u5B66\u751F\u8BA4\u8BC1</ion-segment-button>\r\n <ion-segment-button *ngIf=\"verifyOptions?.bankcard\" value=\"bankcard\"><ion-icon name=\"wallet-outline\"></ion-icon> \u94F6\u884C\u5361\u8BA4\u8BC1</ion-segment-button>\r\n </ion-segment>\r\n\r\n <!-- <ng-container [ngTemplateOutlet]=\"rightAvatar\"></ng-container> -->\r\n <ng-container *ngIf=\"tab=='idcard'&&verifyOptions?.idcard\">\r\n <ion-list>\r\n <!-- \u8EAB\u4EFD\u8BC1OCR\u8BC6\u522B -->\r\n <ng-container *ngIf=\"verifyOptions?.idcard?.ocr\">\r\n <ion-item>\r\n <ion-label><span class=\"required\">*</span> \u8EAB\u4EFD\u8BC1\u6B63\u9762</ion-label>\r\n <fm-edit-upload\r\n *ngIf=\"!idcard_image_front\"\r\n [(file)]=\"idcard_image_front\"\r\n [company]=\"company\"\r\n (fileListChange)=\"uploadChange($event, 'idcard_image_front')\"\r\n ></fm-edit-upload>\r\n <ion-img *ngIf=\"idcard_image_front\" [src]=\"idcard_image_front\"></ion-img>\r\n </ion-item>\r\n <ion-item>\r\n <ion-label><span class=\"required\">*</span> \u8EAB\u4EFD\u8BC1\u56FD\u5FBD\u9762</ion-label>\r\n <fm-edit-upload\r\n *ngIf=\"!idcard_image_back\"\r\n [(file)]=\"idcard_image_back\"\r\n [company]=\"company\"\r\n (fileListChange)=\"uploadChange($event, 'idcard_image_back')\"\r\n ></fm-edit-upload>\r\n <ion-img *ngIf=\"idcard_image_back\" [src]=\"idcard_image_back\"></ion-img>\r\n </ion-item>\r\n </ng-container>\r\n\r\n <!-- \u8EAB\u4EFD\u8BC1\u624B\u52A8\u8F93\u5165 -->\r\n <ng-container>\r\n <ion-item>\r\n @if (profile?.get('isCheck')){\r\n <ion-input [ngModel]=\"name | secretText\" label=\"\u59D3\u540D\" [readonly]=\"true\"></ion-input>\r\n }@else{\r\n <ion-input [(ngModel)]=\"name\" label=\"\u59D3\u540D\" [readonly]=\"verifyOptions?.idcard?.ocr\" [placeholder]=\"verifyOptions?.idcard?.ocr?'\u8BF7\u4E0A\u4F20\u8EAB\u4EFD\u8BC1':'\u8F93\u5165\u59D3\u540D'\"></ion-input>\r\n }\r\n </ion-item>\r\n\r\n <ion-item>\r\n @if (profile?.get('isCheck')){\r\n <ion-input [ngModel]=\"idcard | secretText:'idcard'\" label=\"\u8EAB\u4EFD\u8BC1\u53F7\" [readonly]=\"true\"></ion-input>\r\n }@else{\r\n <ion-input [(ngModel)]=\"idcard\" label=\"\u8EAB\u4EFD\u8BC1\u53F7\" [readonly]=\"verifyOptions?.idcard?.ocr\" [placeholder]=\"verifyOptions?.idcard?.ocr?'\u81EA\u52A8\u8BC6\u522B':'\u8F93\u5165\u8EAB\u4EFD\u8BC1\u53F7'\"></ion-input>\r\n }\r\n </ion-item>\r\n </ng-container>\r\n\r\n <!-- \u8EAB\u4EFD\u8BC1\u8BA4\u8BC1\u72B6\u6001 -->\r\n <ion-button color=\"success\" *ngIf=\"profile?.get('isCheck'); else elseIdcard\" expand=\"block\">\u5DF2\u5B9E\u540D</ion-button>\r\n <ng-template #elseIdcard>\r\n <ion-button color=\"primary\" (click)=\"onSubmit()\" [disabled]=\"!authDisabled()\" expand=\"block\">\u63D0\u4EA4\u8BA4\u8BC1</ion-button>\r\n </ng-template>\r\n \r\n </ion-list>\r\n\r\n <!-- <div class=\"tab-content\">\r\n <div nz-row>\r\n <div nz-col nzSpan=\"12\" class=\"li\">\r\n <div class=\"label\"><span>*</span> \u8EAB\u4EFD\u8BC1\u6B63\u9762</div>\r\n <fm-edit-upload\r\n *ngIf=\"!idcard_image_front\"\r\n [(file)]=\"idcard_image_front\"\r\n [company]=\"company\"\r\n (fileListChange)=\"uploadChange($event, 'idcard_image_front')\"\r\n ></fm-edit-upload>\r\n <div class=\"img-view\" *ngIf=\"idcard_image_front\">\r\n <span\r\n *ngIf=\"!profile?.get('isCheck')\"\r\n nz-icon\r\n nzType=\"close\"\r\n nzTheme=\"outline\"\r\n (click)=\"onDeleted('idcard_image_front')\"\r\n ></span>\r\n <img\r\n nz-image\r\n width=\"80px\"\r\n height=\"80px\"\r\n nzSrc=\"https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png\"\r\n [nzSrc]=\"idcard_image_front\"\r\n alt=\"\u8EAB\u4EFD\u8BC1\u6B63\u9762\"\r\n />\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"12\" class=\"li\">\r\n <div class=\"label\"><span>*</span> \u8EAB\u4EFD\u8BC1\u56FD\u5FBD\u9762</div>\r\n <fm-edit-upload\r\n *ngIf=\"!idcard_image_back\"\r\n [(file)]=\"idcard_image_back\"\r\n [company]=\"company\"\r\n (fileListChange)=\"uploadChange($event, 'idcard_image_back')\"\r\n ></fm-edit-upload>\r\n <div class=\"img-view\" *ngIf=\"idcard_image_back\">\r\n <span\r\n *ngIf=\"!profile?.get('isCheck')\"\r\n nz-icon\r\n nzType=\"close\"\r\n nzTheme=\"outline\"\r\n (click)=\"onDeleted('idcard_image_back')\"\r\n ></span>\r\n <img\r\n nz-image\r\n width=\"80px\"\r\n height=\"80px\"\r\n nzSrc=\"https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png\"\r\n [nzSrc]=\"idcard_image_back\"\r\n alt=\"\u8EAB\u4EFD\u8BC1\u56FD\u5FBD\u9762\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"input-view\">\r\n <nz-input-group nzAddOnBefore=\"\u59D3\u540D\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"name\"\r\n placeholder=\"\u8BF7\u4E0A\u4F20\u8EAB\u4EFD\u8BC1\"\r\n [disabled]=\"true\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u8EAB\u4EFD\u8BC1\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"idcard\"\r\n placeholder=\"\u8BF7\u4E0A\u4F20\u8EAB\u4EFD\u8BC1\"\r\n [disabled]=\"true\"\r\n />\r\n </nz-input-group>\r\n </div>\r\n <div nz-row>\r\n <button\r\n nz-button\r\n *ngIf=\"profile && profile?.get('isCheck'); else elseTemplate\"\r\n nzType=\"primary\"\r\n nzBlock\r\n [disabled]=\"true\"\r\n >\r\n \u5DF2\u5B9E\u540D\r\n </button>\r\n <ng-template #elseTemplate>\r\n <button\r\n nz-button\r\n nzType=\"primary\"\r\n nzBlock\r\n (click)=\"onSubmit()\"\r\n [disabled]=\"!authDisabled()\"\r\n >\r\n \u786E\u5B9A\r\n </button>\r\n </ng-template>\r\n </div>\r\n </div> -->\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"tab=='student'&&verifyOptions?.student\">\r\n \r\n \r\n <div class=\"info\">\r\n <div class=\"input-view\">\r\n <nz-input-group nzAddOnBefore=\"\u59D3\u540D\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"name\"\r\n placeholder=\"\u8BF7\u5148\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1\"\r\n [disabled]=\"profile && profile?.get('isCheck')\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u5B66\u4FE1\u7F51\u8D26\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"studentDateil.studentID\"\r\n placeholder=\"\u8BF7\u586B\u5199\u5B66\u4FE1\u7F51\u8D26\u53F7\"\r\n [nzStatus]=\"studentDateil.studentID != '' ? '' : 'error'\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u624B\u673A\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n maxlength=\"11\"\r\n [(ngModel)]=\"studentDateil.mobile\"\r\n placeholder=\"\u8BF7\u586B\u5199\u624B\u673A\u53F7\"\r\n [nzStatus]=\"mobileStatus(studentDateil.mobile)\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u5B66\u6821\u540D\u79F0\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"studentDateil.school\"\r\n placeholder=\"\u8BF7\u586B\u5199\u5B66\u6821\u540D\u79F0\"\r\n [nzStatus]=\"studentDateil.school != '' ? '' : 'error'\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u6240\u5C5E\u5B66\u9662\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"studentDateil.college\"\r\n placeholder=\"\u8BF7\u586B\u5199\u6240\u5C5E\u5B66\u9662\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u4E13\u4E1A\u540D\u79F0\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"studentDateil.schoolMajor\"\r\n placeholder=\"\u8BF7\u586B\u5199\u4E13\u4E1A\u540D\u79F0\"\r\n />\r\n </nz-input-group>\r\n </div>\r\n <div class=\"info-row\">\r\n <div class=\"info-row-lable\">\u662F\u5426\u5728\u6821</div>\r\n <nz-radio-group [(ngModel)]=\"studentDateil.studentType\">\r\n <label nz-radio nzValue=\"\u5728\u6821\">\u662F</label>\r\n <label nz-radio nzValue=\"\u6BD5\u4E1A\">\u5426</label>\r\n </nz-radio-group>\r\n </div>\r\n <ng-container\r\n *ngIf=\"studentDateil.studentType == '\u5728\u6821'; else template1\"\r\n >\r\n <div class=\"info-row\">\r\n <div class=\"info-row-lable\">\u9636\u6BB5</div>\r\n <nz-radio-group [(ngModel)]=\"studentDateil.education\">\r\n <label nz-radio nzValue=\"\u5927\u4E13\">\u5927\u4E13</label>\r\n <label nz-radio nzValue=\"\u672C\u79D1\">\u672C\u79D1</label>\r\n <label nz-radio nzValue=\"\u7855\u58EB\">\u7855\u58EB</label>\r\n <label nz-radio nzValue=\"\u535A\u58EB\">\u535A\u58EB</label>\r\n </nz-radio-group>\r\n </div>\r\n <div class=\"info-row\">\r\n <div class=\"info-row-lable info-select\">\u5E74\u7EA7\uFF1A</div>\r\n <ion-select\r\n interface=\"action-sheet\"\r\n cancel-text=\"\u5173\u95ED\"\r\n [(ngModel)]=\"studentDateil.workUnit\"\r\n placeholder=\"\u70B9\u51FB\u9009\u62E9\"\r\n >\r\n <ng-container *ngFor=\"let item of options\">\r\n <ion-select-option [value]=\"item\"\r\n >{{ item }}\u7EA7</ion-select-option\r\n >\r\n </ng-container>\r\n </ion-select>\r\n </div>\r\n <nz-input-group nzAddOnBefore=\"\u5B66\u751F\u8BC1\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"studentDateil.diploma\"\r\n placeholder=\"\u8BF7\u586B\u5199\u5B66\u751F\u8BC1\u53F7\"\r\n />\r\n </nz-input-group>\r\n <div nz-row style=\"margin: 10px 0\">\r\n <div nz-col nzSpan=\"12\" class=\"li\">\r\n <div class=\"label\">\r\n <span style=\"color: red\">*</span> \u5B66\u751F\u8BC1\u7167\u7247\r\n </div>\r\n <fm-edit-upload\r\n *ngIf=\"!eduImage\"\r\n [(file)]=\"eduImage\"\r\n [company]=\"company\"\r\n (fileListChange)=\"uploadChange($event, 'eduImage')\"\r\n ></fm-edit-upload>\r\n <div class=\"img-view\" *ngIf=\"eduImage\">\r\n <span\r\n *ngIf=\"!profile?.get('isCross')\"\r\n nz-icon\r\n nzType=\"close\"\r\n nzTheme=\"outline\"\r\n (click)=\"onDeleted('eduImage')\"\r\n ></span>\r\n <img\r\n nz-image\r\n width=\"100px\"\r\n height=\"100px\"\r\n nzSrc=\"https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png\"\r\n [nzSrc]=\"eduImage\"\r\n alt=\"\u5B66\u751F\u8BC1\u7167\u7247\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #template1>\r\n <div class=\"info-row\">\r\n <div class=\"info-row-lable\">\u6700\u9AD8\u5B66\u5386</div>\r\n <nz-radio-group [(ngModel)]=\"studentDateil.education\">\r\n <label nz-radio nzValue=\"\u5927\u4E13\">\u5927\u4E13</label>\r\n <label nz-radio nzValue=\"\u5B66\u58EB\">\u5B66\u58EB</label>\r\n <label nz-radio nzValue=\"\u7855\u58EB\">\u7855\u58EB</label>\r\n <label nz-radio nzValue=\"\u535A\u58EB\">\u535A\u58EB</label>\r\n </nz-radio-group>\r\n </div>\r\n <div class=\"info-row\">\r\n <div class=\"info-row-lable info-select\">\u6BD5\u4E1A\u5E74\u4EFD\uFF1A</div>\r\n <ion-select\r\n interface=\"action-sheet\"\r\n cancel-text=\"\u5173\u95ED\"\r\n [(ngModel)]=\"studentDateil.entrySchool\"\r\n placeholder=\"\u70B9\u51FB\u9009\u62E9\"\r\n >\r\n <ng-container *ngFor=\"let item of options\">\r\n <ion-select-option [value]=\"item\"\r\n >{{ item }}\u5E74</ion-select-option\r\n >\r\n </ng-container>\r\n </ion-select>\r\n </div>\r\n <nz-input-group nzAddOnBefore=\"\u6BD5\u4E1A\u8BC1\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"studentDateil.degreeNumber\"\r\n placeholder=\"\u8BF7\u586B\u5199\u6BD5\u4E1A\u8BC1\u53F7\"\r\n />\r\n </nz-input-group>\r\n </ng-template>\r\n <div nz-row style=\"margin: 10px auto\">\r\n <button\r\n nz-button\r\n nzType=\"primary\"\r\n nzBlock\r\n (click)=\"onSubimtStudent()\"\r\n [disabled]=\"false\"\r\n >\r\n \u786E\u5B9A\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"tab=='bankcard'&&verifyOptions?.bankcard\">\r\n \r\n \r\n <div class=\"info\">\r\n <div class=\"input-view\">\r\n <nz-input-group nzAddOnBefore=\"\u59D3\u540D\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"name\"\r\n placeholder=\"\u8BF7\u5148\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1\"\r\n [disabled]=\"true\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u8EAB\u4EFD\u8BC1\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"idcard\"\r\n placeholder=\"\u8BF7\u5148\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1\"\r\n [disabled]=\"true\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u94F6\u884C\u5361\u8D26\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"bankMap.bankcard\"\r\n placeholder=\"\u8BF7\u586B\u5199\u94F6\u884C\u5361\u8D26\u53F7\"\r\n [nzStatus]=\"cardNoStatus()\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u94F6\u884C\u5361\u9884\u7559\u624B\u673A\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"bankMap.bankmobile\"\r\n maxlength=\"11\"\r\n placeholder=\"\u8BF7\u586B\u5199\u94F6\u884C\u5361\u9884\u7559\u624B\u673A\u53F7\"\r\n [nzStatus]=\"mobileStatus(bankMap.bankmobile)\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u5F00\u6237\u884C\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [ngModel]=\"bankMap.bank\"\r\n maxlength=\"11\"\r\n placeholder=\"\u8BA4\u8BC1\u6210\u529F\u540E\u81EA\u52A8\u8BC6\u522B\"\r\n [disabled]=\"true\"\r\n />\r\n </nz-input-group>\r\n <!-- <div class=\"info-row\">\r\n <div class=\"info-row-lable info-select\">\u5F00\u6237\u884C\uFF1A</div>\r\n <ion-select\r\n interface=\"action-sheet\"\r\n cancel-text=\"\u5173\u95ED\"\r\n [(ngModel)]=\"bankMap.bank\"\r\n placeholder=\"\u70B9\u51FB\u9009\u62E9\"\r\n >\r\n <ng-container *ngFor=\"let item of bankOptions\">\r\n <ion-select-option [value]=\"item\"\r\n >{{ item }}</ion-select-option\r\n >\r\n </ng-container>\r\n </ion-select>\r\n </div> -->\r\n </div>\r\n <div nz-row>\r\n <button\r\n nz-button\r\n nzType=\"primary\"\r\n nzBlock\r\n (click)=\"onSubimtBank()\"\r\n [disabled]=\"saveBankAuth()\"\r\n >\r\n \u786E\u5B9A\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n\r\n</ion-content>\r\n", styles: [".required{color:red}.page{display:flex;justify-content:center;align-items:center;flex-direction:column}.tab-content{width:80%;align-items:center;justify-content:center;margin:auto}.tab-content .li{display:flex;flex-direction:column;align-items:center}.tab-content .li .label{margin-bottom:10px}.tab-content .li .label span{color:red}.tab-content .li .img-view{position:relative}.tab-content .li .img-view span{position:absolute;right:-10px;top:0}.input-view{margin:10px auto}.info .info-row{display:flex;align-items:center;border:1px solid #d9d9d9;padding:6px 0}.info .info-row .info-row-lable{padding:0 10px;flex-shrink:0}.info .info-row .info-select{min-width:70px}.info .img-view{position:relative;width:100px}.info .img-view span{position:absolute;right:-10px;top:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i9.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i9.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i10.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzTabsModule }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i11.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i12.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i13.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzModalModule }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i14.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i14.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzRadioModule }, { kind: "component", type: i15.NzRadioComponent, selector: "[nz-radio],[nz-radio-button]", inputs: ["nzValue", "nzDisabled", "nzAutoFocus", "nz-radio-button"], exportAs: ["nzRadio"] }, { kind: "component", type: i15.NzRadioGroupComponent, selector: "nz-radio-group", inputs: ["nzDisabled", "nzButtonStyle", "nzSize", "nzName"], exportAs: ["nzRadioGroup"] }, { kind: "ngmodule", type: NzImageModule }, { kind: "directive", type: i16.NzImageDirective, selector: "img[nz-image]", inputs: ["nzSrc", "nzSrcset", "nzDisablePreview", "nzFallback", "nzPlaceholder", "nzScaleStep"], exportAs: ["nzImage"] }, { kind: "ngmodule", type: EditUploadModule }, { kind: "component", type: i17.EditUploadComponent, selector: "fm-edit-upload", inputs: ["files", "dragdrop", "multi", "max_file_size", "type", "avatarType", "company", "file", "fileList", "path"], outputs: ["filesChange", "fileChange", "fileListChange"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "selectOnFocus", "swipeGesture", "value"] }, { kind: "component", type: IonSegmentButton, selector: "ion-segment-button", inputs: ["contentId", "disabled", "layout", "mode", "type", "value"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "pipe", type: SecretTextPipe, name: "secretText" }] }); }
|
|
550
|
-
}
|
|
551
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ModalUserVerifyComponent, decorators: [{
|
|
552
|
-
type: Component,
|
|
553
|
-
args: [{ selector: "app-user-verify", standalone: true, imports: [
|
|
554
|
-
CommonModule, FormsModule, ReactiveFormsModule,
|
|
555
|
-
NzInputModule, NzIconModule, NzTabsModule, NzButtonModule, NzModalModule,
|
|
556
|
-
NzGridModule, NzRadioModule, NzImageModule,
|
|
557
|
-
EditUploadModule,
|
|
558
|
-
IonContent, IonSegment, IonSegmentButton,
|
|
559
|
-
IonLabel, IonIcon, IonImg, IonSpinner,
|
|
560
|
-
IonList, IonItem, IonInput, IonButton,
|
|
561
|
-
IonDatetime, IonDatetimeButton, IonSelect, IonSelectOption,
|
|
562
|
-
SecretTextPipe
|
|
563
|
-
], template: "\r\n<ion-content *ngIf=\"isLoading\">\r\n <div class=\"page\" *ngIf=\"isLoading\">\r\n <ion-spinner name=\"crescent\" color=\"primary\" style=\"width:80px;height:80px;\"></ion-spinner>\r\n <ion-label color=\"primary\">\u6B63\u5728\u52A0\u8F7D\u8BA4\u8BC1\u7EC4\u4EF6...</ion-label>\r\n </div>\r\n</ion-content>\r\n\r\n<ion-content class=\"ion-padding\" *ngIf=\"!isLoading\">\r\n <ion-segment [(ngModel)]=\"tab\">\r\n <ion-segment-button *ngIf=\"verifyOptions?.idcard\" value=\"idcard\"><ion-icon name=\"card-outline\"></ion-icon> \u5B9E\u540D\u8BA4\u8BC1</ion-segment-button>\r\n <ion-segment-button *ngIf=\"verifyOptions?.student\" value=\"student\"><ion-icon name=\"school-outline\"></ion-icon> \u5B66\u751F\u8BA4\u8BC1</ion-segment-button>\r\n <ion-segment-button *ngIf=\"verifyOptions?.bankcard\" value=\"bankcard\"><ion-icon name=\"wallet-outline\"></ion-icon> \u94F6\u884C\u5361\u8BA4\u8BC1</ion-segment-button>\r\n </ion-segment>\r\n\r\n <!-- <ng-container [ngTemplateOutlet]=\"rightAvatar\"></ng-container> -->\r\n <ng-container *ngIf=\"tab=='idcard'&&verifyOptions?.idcard\">\r\n <ion-list>\r\n <!-- \u8EAB\u4EFD\u8BC1OCR\u8BC6\u522B -->\r\n <ng-container *ngIf=\"verifyOptions?.idcard?.ocr\">\r\n <ion-item>\r\n <ion-label><span class=\"required\">*</span> \u8EAB\u4EFD\u8BC1\u6B63\u9762</ion-label>\r\n <fm-edit-upload\r\n *ngIf=\"!idcard_image_front\"\r\n [(file)]=\"idcard_image_front\"\r\n [company]=\"company\"\r\n (fileListChange)=\"uploadChange($event, 'idcard_image_front')\"\r\n ></fm-edit-upload>\r\n <ion-img *ngIf=\"idcard_image_front\" [src]=\"idcard_image_front\"></ion-img>\r\n </ion-item>\r\n <ion-item>\r\n <ion-label><span class=\"required\">*</span> \u8EAB\u4EFD\u8BC1\u56FD\u5FBD\u9762</ion-label>\r\n <fm-edit-upload\r\n *ngIf=\"!idcard_image_back\"\r\n [(file)]=\"idcard_image_back\"\r\n [company]=\"company\"\r\n (fileListChange)=\"uploadChange($event, 'idcard_image_back')\"\r\n ></fm-edit-upload>\r\n <ion-img *ngIf=\"idcard_image_back\" [src]=\"idcard_image_back\"></ion-img>\r\n </ion-item>\r\n </ng-container>\r\n\r\n <!-- \u8EAB\u4EFD\u8BC1\u624B\u52A8\u8F93\u5165 -->\r\n <ng-container>\r\n <ion-item>\r\n @if (profile?.get('isCheck')){\r\n <ion-input [ngModel]=\"name | secretText\" label=\"\u59D3\u540D\" [readonly]=\"true\"></ion-input>\r\n }@else{\r\n <ion-input [(ngModel)]=\"name\" label=\"\u59D3\u540D\" [readonly]=\"verifyOptions?.idcard?.ocr\" [placeholder]=\"verifyOptions?.idcard?.ocr?'\u8BF7\u4E0A\u4F20\u8EAB\u4EFD\u8BC1':'\u8F93\u5165\u59D3\u540D'\"></ion-input>\r\n }\r\n </ion-item>\r\n\r\n <ion-item>\r\n @if (profile?.get('isCheck')){\r\n <ion-input [ngModel]=\"idcard | secretText:'idcard'\" label=\"\u8EAB\u4EFD\u8BC1\u53F7\" [readonly]=\"true\"></ion-input>\r\n }@else{\r\n <ion-input [(ngModel)]=\"idcard\" label=\"\u8EAB\u4EFD\u8BC1\u53F7\" [readonly]=\"verifyOptions?.idcard?.ocr\" [placeholder]=\"verifyOptions?.idcard?.ocr?'\u81EA\u52A8\u8BC6\u522B':'\u8F93\u5165\u8EAB\u4EFD\u8BC1\u53F7'\"></ion-input>\r\n }\r\n </ion-item>\r\n </ng-container>\r\n\r\n <!-- \u8EAB\u4EFD\u8BC1\u8BA4\u8BC1\u72B6\u6001 -->\r\n <ion-button color=\"success\" *ngIf=\"profile?.get('isCheck'); else elseIdcard\" expand=\"block\">\u5DF2\u5B9E\u540D</ion-button>\r\n <ng-template #elseIdcard>\r\n <ion-button color=\"primary\" (click)=\"onSubmit()\" [disabled]=\"!authDisabled()\" expand=\"block\">\u63D0\u4EA4\u8BA4\u8BC1</ion-button>\r\n </ng-template>\r\n \r\n </ion-list>\r\n\r\n <!-- <div class=\"tab-content\">\r\n <div nz-row>\r\n <div nz-col nzSpan=\"12\" class=\"li\">\r\n <div class=\"label\"><span>*</span> \u8EAB\u4EFD\u8BC1\u6B63\u9762</div>\r\n <fm-edit-upload\r\n *ngIf=\"!idcard_image_front\"\r\n [(file)]=\"idcard_image_front\"\r\n [company]=\"company\"\r\n (fileListChange)=\"uploadChange($event, 'idcard_image_front')\"\r\n ></fm-edit-upload>\r\n <div class=\"img-view\" *ngIf=\"idcard_image_front\">\r\n <span\r\n *ngIf=\"!profile?.get('isCheck')\"\r\n nz-icon\r\n nzType=\"close\"\r\n nzTheme=\"outline\"\r\n (click)=\"onDeleted('idcard_image_front')\"\r\n ></span>\r\n <img\r\n nz-image\r\n width=\"80px\"\r\n height=\"80px\"\r\n nzSrc=\"https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png\"\r\n [nzSrc]=\"idcard_image_front\"\r\n alt=\"\u8EAB\u4EFD\u8BC1\u6B63\u9762\"\r\n />\r\n </div>\r\n </div>\r\n <div nz-col nzSpan=\"12\" class=\"li\">\r\n <div class=\"label\"><span>*</span> \u8EAB\u4EFD\u8BC1\u56FD\u5FBD\u9762</div>\r\n <fm-edit-upload\r\n *ngIf=\"!idcard_image_back\"\r\n [(file)]=\"idcard_image_back\"\r\n [company]=\"company\"\r\n (fileListChange)=\"uploadChange($event, 'idcard_image_back')\"\r\n ></fm-edit-upload>\r\n <div class=\"img-view\" *ngIf=\"idcard_image_back\">\r\n <span\r\n *ngIf=\"!profile?.get('isCheck')\"\r\n nz-icon\r\n nzType=\"close\"\r\n nzTheme=\"outline\"\r\n (click)=\"onDeleted('idcard_image_back')\"\r\n ></span>\r\n <img\r\n nz-image\r\n width=\"80px\"\r\n height=\"80px\"\r\n nzSrc=\"https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png\"\r\n [nzSrc]=\"idcard_image_back\"\r\n alt=\"\u8EAB\u4EFD\u8BC1\u56FD\u5FBD\u9762\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"input-view\">\r\n <nz-input-group nzAddOnBefore=\"\u59D3\u540D\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"name\"\r\n placeholder=\"\u8BF7\u4E0A\u4F20\u8EAB\u4EFD\u8BC1\"\r\n [disabled]=\"true\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u8EAB\u4EFD\u8BC1\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"idcard\"\r\n placeholder=\"\u8BF7\u4E0A\u4F20\u8EAB\u4EFD\u8BC1\"\r\n [disabled]=\"true\"\r\n />\r\n </nz-input-group>\r\n </div>\r\n <div nz-row>\r\n <button\r\n nz-button\r\n *ngIf=\"profile && profile?.get('isCheck'); else elseTemplate\"\r\n nzType=\"primary\"\r\n nzBlock\r\n [disabled]=\"true\"\r\n >\r\n \u5DF2\u5B9E\u540D\r\n </button>\r\n <ng-template #elseTemplate>\r\n <button\r\n nz-button\r\n nzType=\"primary\"\r\n nzBlock\r\n (click)=\"onSubmit()\"\r\n [disabled]=\"!authDisabled()\"\r\n >\r\n \u786E\u5B9A\r\n </button>\r\n </ng-template>\r\n </div>\r\n </div> -->\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"tab=='student'&&verifyOptions?.student\">\r\n \r\n \r\n <div class=\"info\">\r\n <div class=\"input-view\">\r\n <nz-input-group nzAddOnBefore=\"\u59D3\u540D\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"name\"\r\n placeholder=\"\u8BF7\u5148\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1\"\r\n [disabled]=\"profile && profile?.get('isCheck')\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u5B66\u4FE1\u7F51\u8D26\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"studentDateil.studentID\"\r\n placeholder=\"\u8BF7\u586B\u5199\u5B66\u4FE1\u7F51\u8D26\u53F7\"\r\n [nzStatus]=\"studentDateil.studentID != '' ? '' : 'error'\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u624B\u673A\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n maxlength=\"11\"\r\n [(ngModel)]=\"studentDateil.mobile\"\r\n placeholder=\"\u8BF7\u586B\u5199\u624B\u673A\u53F7\"\r\n [nzStatus]=\"mobileStatus(studentDateil.mobile)\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u5B66\u6821\u540D\u79F0\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"studentDateil.school\"\r\n placeholder=\"\u8BF7\u586B\u5199\u5B66\u6821\u540D\u79F0\"\r\n [nzStatus]=\"studentDateil.school != '' ? '' : 'error'\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u6240\u5C5E\u5B66\u9662\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"studentDateil.college\"\r\n placeholder=\"\u8BF7\u586B\u5199\u6240\u5C5E\u5B66\u9662\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u4E13\u4E1A\u540D\u79F0\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"studentDateil.schoolMajor\"\r\n placeholder=\"\u8BF7\u586B\u5199\u4E13\u4E1A\u540D\u79F0\"\r\n />\r\n </nz-input-group>\r\n </div>\r\n <div class=\"info-row\">\r\n <div class=\"info-row-lable\">\u662F\u5426\u5728\u6821</div>\r\n <nz-radio-group [(ngModel)]=\"studentDateil.studentType\">\r\n <label nz-radio nzValue=\"\u5728\u6821\">\u662F</label>\r\n <label nz-radio nzValue=\"\u6BD5\u4E1A\">\u5426</label>\r\n </nz-radio-group>\r\n </div>\r\n <ng-container\r\n *ngIf=\"studentDateil.studentType == '\u5728\u6821'; else template1\"\r\n >\r\n <div class=\"info-row\">\r\n <div class=\"info-row-lable\">\u9636\u6BB5</div>\r\n <nz-radio-group [(ngModel)]=\"studentDateil.education\">\r\n <label nz-radio nzValue=\"\u5927\u4E13\">\u5927\u4E13</label>\r\n <label nz-radio nzValue=\"\u672C\u79D1\">\u672C\u79D1</label>\r\n <label nz-radio nzValue=\"\u7855\u58EB\">\u7855\u58EB</label>\r\n <label nz-radio nzValue=\"\u535A\u58EB\">\u535A\u58EB</label>\r\n </nz-radio-group>\r\n </div>\r\n <div class=\"info-row\">\r\n <div class=\"info-row-lable info-select\">\u5E74\u7EA7\uFF1A</div>\r\n <ion-select\r\n interface=\"action-sheet\"\r\n cancel-text=\"\u5173\u95ED\"\r\n [(ngModel)]=\"studentDateil.workUnit\"\r\n placeholder=\"\u70B9\u51FB\u9009\u62E9\"\r\n >\r\n <ng-container *ngFor=\"let item of options\">\r\n <ion-select-option [value]=\"item\"\r\n >{{ item }}\u7EA7</ion-select-option\r\n >\r\n </ng-container>\r\n </ion-select>\r\n </div>\r\n <nz-input-group nzAddOnBefore=\"\u5B66\u751F\u8BC1\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"studentDateil.diploma\"\r\n placeholder=\"\u8BF7\u586B\u5199\u5B66\u751F\u8BC1\u53F7\"\r\n />\r\n </nz-input-group>\r\n <div nz-row style=\"margin: 10px 0\">\r\n <div nz-col nzSpan=\"12\" class=\"li\">\r\n <div class=\"label\">\r\n <span style=\"color: red\">*</span> \u5B66\u751F\u8BC1\u7167\u7247\r\n </div>\r\n <fm-edit-upload\r\n *ngIf=\"!eduImage\"\r\n [(file)]=\"eduImage\"\r\n [company]=\"company\"\r\n (fileListChange)=\"uploadChange($event, 'eduImage')\"\r\n ></fm-edit-upload>\r\n <div class=\"img-view\" *ngIf=\"eduImage\">\r\n <span\r\n *ngIf=\"!profile?.get('isCross')\"\r\n nz-icon\r\n nzType=\"close\"\r\n nzTheme=\"outline\"\r\n (click)=\"onDeleted('eduImage')\"\r\n ></span>\r\n <img\r\n nz-image\r\n width=\"100px\"\r\n height=\"100px\"\r\n nzSrc=\"https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png\"\r\n [nzSrc]=\"eduImage\"\r\n alt=\"\u5B66\u751F\u8BC1\u7167\u7247\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #template1>\r\n <div class=\"info-row\">\r\n <div class=\"info-row-lable\">\u6700\u9AD8\u5B66\u5386</div>\r\n <nz-radio-group [(ngModel)]=\"studentDateil.education\">\r\n <label nz-radio nzValue=\"\u5927\u4E13\">\u5927\u4E13</label>\r\n <label nz-radio nzValue=\"\u5B66\u58EB\">\u5B66\u58EB</label>\r\n <label nz-radio nzValue=\"\u7855\u58EB\">\u7855\u58EB</label>\r\n <label nz-radio nzValue=\"\u535A\u58EB\">\u535A\u58EB</label>\r\n </nz-radio-group>\r\n </div>\r\n <div class=\"info-row\">\r\n <div class=\"info-row-lable info-select\">\u6BD5\u4E1A\u5E74\u4EFD\uFF1A</div>\r\n <ion-select\r\n interface=\"action-sheet\"\r\n cancel-text=\"\u5173\u95ED\"\r\n [(ngModel)]=\"studentDateil.entrySchool\"\r\n placeholder=\"\u70B9\u51FB\u9009\u62E9\"\r\n >\r\n <ng-container *ngFor=\"let item of options\">\r\n <ion-select-option [value]=\"item\"\r\n >{{ item }}\u5E74</ion-select-option\r\n >\r\n </ng-container>\r\n </ion-select>\r\n </div>\r\n <nz-input-group nzAddOnBefore=\"\u6BD5\u4E1A\u8BC1\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"studentDateil.degreeNumber\"\r\n placeholder=\"\u8BF7\u586B\u5199\u6BD5\u4E1A\u8BC1\u53F7\"\r\n />\r\n </nz-input-group>\r\n </ng-template>\r\n <div nz-row style=\"margin: 10px auto\">\r\n <button\r\n nz-button\r\n nzType=\"primary\"\r\n nzBlock\r\n (click)=\"onSubimtStudent()\"\r\n [disabled]=\"false\"\r\n >\r\n \u786E\u5B9A\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"tab=='bankcard'&&verifyOptions?.bankcard\">\r\n \r\n \r\n <div class=\"info\">\r\n <div class=\"input-view\">\r\n <nz-input-group nzAddOnBefore=\"\u59D3\u540D\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"name\"\r\n placeholder=\"\u8BF7\u5148\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1\"\r\n [disabled]=\"true\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u8EAB\u4EFD\u8BC1\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"idcard\"\r\n placeholder=\"\u8BF7\u5148\u5B8C\u6210\u5B9E\u540D\u8BA4\u8BC1\"\r\n [disabled]=\"true\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u94F6\u884C\u5361\u8D26\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"bankMap.bankcard\"\r\n placeholder=\"\u8BF7\u586B\u5199\u94F6\u884C\u5361\u8D26\u53F7\"\r\n [nzStatus]=\"cardNoStatus()\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u94F6\u884C\u5361\u9884\u7559\u624B\u673A\u53F7\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [(ngModel)]=\"bankMap.bankmobile\"\r\n maxlength=\"11\"\r\n placeholder=\"\u8BF7\u586B\u5199\u94F6\u884C\u5361\u9884\u7559\u624B\u673A\u53F7\"\r\n [nzStatus]=\"mobileStatus(bankMap.bankmobile)\"\r\n />\r\n </nz-input-group>\r\n <nz-input-group nzAddOnBefore=\"\u5F00\u6237\u884C\">\r\n <input\r\n type=\"text\"\r\n nz-input\r\n [ngModel]=\"bankMap.bank\"\r\n maxlength=\"11\"\r\n placeholder=\"\u8BA4\u8BC1\u6210\u529F\u540E\u81EA\u52A8\u8BC6\u522B\"\r\n [disabled]=\"true\"\r\n />\r\n </nz-input-group>\r\n <!-- <div class=\"info-row\">\r\n <div class=\"info-row-lable info-select\">\u5F00\u6237\u884C\uFF1A</div>\r\n <ion-select\r\n interface=\"action-sheet\"\r\n cancel-text=\"\u5173\u95ED\"\r\n [(ngModel)]=\"bankMap.bank\"\r\n placeholder=\"\u70B9\u51FB\u9009\u62E9\"\r\n >\r\n <ng-container *ngFor=\"let item of bankOptions\">\r\n <ion-select-option [value]=\"item\"\r\n >{{ item }}</ion-select-option\r\n >\r\n </ng-container>\r\n </ion-select>\r\n </div> -->\r\n </div>\r\n <div nz-row>\r\n <button\r\n nz-button\r\n nzType=\"primary\"\r\n nzBlock\r\n (click)=\"onSubimtBank()\"\r\n [disabled]=\"saveBankAuth()\"\r\n >\r\n \u786E\u5B9A\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n\r\n</ion-content>\r\n", styles: [".required{color:red}.page{display:flex;justify-content:center;align-items:center;flex-direction:column}.tab-content{width:80%;align-items:center;justify-content:center;margin:auto}.tab-content .li{display:flex;flex-direction:column;align-items:center}.tab-content .li .label{margin-bottom:10px}.tab-content .li .label span{color:red}.tab-content .li .img-view{position:relative}.tab-content .li .img-view span{position:absolute;right:-10px;top:0}.input-view{margin:10px auto}.info .info-row{display:flex;align-items:center;border:1px solid #d9d9d9;padding:6px 0}.info .info-row .info-row-lable{padding:0 10px;flex-shrink:0}.info .info-row .info-select{min-width:70px}.info .img-view{position:relative;width:100px}.info .img-view span{position:absolute;right:-10px;top:0}\n"] }]
|
|
564
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.NzMessageService }, { type: i3.AccountService }, { type: i4.AuthService }, { type: i5.NovaCloudService }, { type: i6.ModalController }], propDecorators: { isVisible: [{
|
|
565
|
-
type: Input
|
|
566
|
-
}], isVisibleChange: [{
|
|
567
|
-
type: Output
|
|
568
|
-
}], verifyOptions: [{
|
|
569
|
-
type: Input
|
|
570
|
-
}] } });
|
|
571
|
-
export async function openUserVerifyModal(modalCtrl, alertCtrl, options) {
|
|
572
|
-
// 检测认证信息:若已认证,则返回 true
|
|
573
|
-
let firstTab = options && Object.keys(options)?.[0] || "idcard";
|
|
574
|
-
if (options?.autoFinish == undefined) {
|
|
575
|
-
if (options) {
|
|
576
|
-
options.autoFinish = true;
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
// 弹出认证组件
|
|
580
|
-
let modal = await modalCtrl.create({
|
|
581
|
-
component: ModalUserVerifyComponent,
|
|
582
|
-
componentProps: { verifyOptions: options, tab: firstTab, onBreakPointSet: () => {
|
|
583
|
-
modal?.setCurrentBreakpoint(0.75);
|
|
584
|
-
} },
|
|
585
|
-
breakpoints: [0.35, 0.75, 1],
|
|
586
|
-
initialBreakpoint: 0.35,
|
|
587
|
-
});
|
|
588
|
-
modal.present();
|
|
589
|
-
let { data, role } = await modal.onWillDismiss();
|
|
590
|
-
if (role == "confirm") {
|
|
591
|
-
return data;
|
|
592
|
-
}
|
|
593
|
-
return undefined;
|
|
594
|
-
}
|
|
595
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci12ZXJpZnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9wZXJzb24vbW9kYWwtdXNlci12ZXJpZnkvdXNlci12ZXJpZnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9wZXJzb24vbW9kYWwtdXNlci12ZXJpZnkvdXNlci12ZXJpZnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFrQixPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaFEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FB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LENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUFDLFNBQXlCLEVBQUMsU0FBeUIsRUFBQyxPQUEwQjtJQUN0SCx1QkFBdUI7SUFDdkIsSUFBSSxRQUFRLEdBQUcsT0FBTyxJQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUE7SUFDN0QsSUFBRyxPQUFPLEVBQUUsVUFBVSxJQUFJLFNBQVMsRUFBQyxDQUFDO1FBQ25DLElBQUcsT0FBTyxFQUFDLENBQUM7WUFDVixPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUNELFNBQVM7SUFDVCxJQUFJLEtBQUssR0FBTyxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDckMsU0FBUyxFQUFDLHdCQUF3QjtRQUNsQyxjQUFjLEVBQUMsRUFBQyxhQUFhLEVBQUMsT0FBTyxFQUFDLEdBQUcsRUFBQyxRQUFRLEVBQUMsZUFBZSxFQUFDLEdBQUUsRUFBRTtnQkFDckUsS0FBSyxFQUFFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ25DLENBQUMsRUFBQztRQUNGLFdBQVcsRUFBQyxDQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ3pCLGlCQUFpQixFQUFDLElBQUk7S0FDdkIsQ0FBQyxDQUFBO0lBQ0YsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ2YsSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QyxJQUFHLElBQUksSUFBRSxTQUFTLEVBQUMsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBOek1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIm5nLXpvcnJvLWFudGQvbWVzc2FnZVwiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gXCIuLi8uLi91c2VyL2xvZ2luL2F1dGguc2VydmljZVwiO1xyXG5pbXBvcnQgeyBOb3ZhQ2xvdWRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL25vdmEtY2xvdWQvbm92YS1jbG91ZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3VzZXIvYWNjb3VudC9hY2NvdW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRWRpdFVwbG9hZE1vZHVsZSB9IGZyb20gXCIuLi9lZGl0LXVwbG9hZC9lZGl0LXVwbG9hZC5tb2R1bGVcIjtcclxuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLElvbkljb24sIElvbkNvbnRlbnQsIElvbkRhdGV0aW1lLCBJb25EYXRldGltZUJ1dHRvbiwgSW9uTGFiZWwsIElvblNlZ21lbnQsIElvblNlZ21lbnRCdXR0b24sIElvblNlbGVjdCwgSW9uU2VsZWN0T3B0aW9uLCBNb2RhbENvbnRyb2xsZXIsIElvbkJ1dHRvbiwgSW9uSW5wdXQsIElvbkl0ZW0sIElvbkxpc3QsIElvbkltZywgSW9uU3Bpbm5lciB9IGZyb20gXCJAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lXCI7XHJcbmltcG9ydCB7IE56SW5wdXRNb2R1bGUgfSBmcm9tIFwibmctem9ycm8tYW50ZC9pbnB1dFwiO1xyXG5pbXBvcnQgeyBOekljb25Nb2R1bGUgfSBmcm9tIFwibmctem9ycm8tYW50ZC9pY29uXCI7XHJcbmltcG9ydCB7IE56VGFic01vZHVsZSB9IGZyb20gXCJuZy16b3Jyby1hbnRkL3RhYnNcIjtcclxuaW1wb3J0IHsgTnpCdXR0b25Nb2R1bGUgfSBmcm9tIFwibmctem9ycm8tYW50ZC9idXR0b25cIjtcclxuaW1wb3J0IHsgTnpNb2RhbE1vZHVsZSB9IGZyb20gXCJuZy16b3Jyby1hbnRkL21vZGFsXCI7XHJcbmltcG9ydCB7IE56R3JpZE1vZHVsZSB9IGZyb20gXCJuZy16b3Jyby1hbnRkL2dyaWRcIjtcclxuaW1wb3J0IHsgTnpSYWRpb01vZHVsZSB9IGZyb20gXCJuZy16b3Jyby1hbnRkL3JhZGlvXCI7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTnpJbWFnZU1vZHVsZSB9IGZyb20gXCJuZy16b3Jyby1hbnRkL2ltYWdlXCI7XHJcbmltcG9ydCB7IElvbk1vZGFsIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmVcIjtcclxuaW1wb3J0IHsgU2VjcmV0VGV4dFBpcGUgfSBmcm9tIFwiLi9zZWNyZXQtdGV4dC5waXBlXCJcclxuXHJcbmludGVyZmFjZSBzdHVkZW50IHtcclxuICBzdHVkZW50SUQ6IHN0cmluZztcclxuICBtb2JpbGU6IHN0cmluZztcclxuICBzY2hvb2w6IHN0cmluZztcclxuICBzY2hvb2xNYWpvcjogc3RyaW5nO1xyXG4gIHN0dWRlbnRUeXBlOiBzdHJpbmc7XHJcbiAgZWR1Y2F0aW9uOiBzdHJpbmc7XHJcbiAgd29ya1VuaXQ6IHN0cmluZztcclxuICB3b3JraWQ6IHN0cmluZztcclxuICBkaXBsb21hOiBzdHJpbmc7XHJcbiAgZGVncmVlTnVtYmVyOiBzdHJpbmc7XHJcbiAgZW50cnlTY2hvb2w6IG51bWJlcjtcclxuICBjb2xsZWdlOiBzdHJpbmc7XHJcbn1cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXVzZXItdmVyaWZ5XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi91c2VyLXZlcmlmeS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi91c2VyLXZlcmlmeS5jb21wb25lbnQuc2Nzc1wiXSxcclxuICBzdGFuZGFsb25lOnRydWUsXHJcbiAgaW1wb3J0czpbXHJcbiAgICBDb21tb25Nb2R1bGUsRm9ybXNNb2R1bGUsUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE56SW5wdXRNb2R1bGUsTnpJY29uTW9kdWxlLE56VGFic01vZHVsZSxOekJ1dHRvbk1vZHVsZSxOek1vZGFsTW9kdWxlLFxyXG4gICAgTnpHcmlkTW9kdWxlLE56UmFkaW9Nb2R1bGUsTnpJbWFnZU1vZHVsZSxcclxuICAgIEVkaXRVcGxvYWRNb2R1bGUsXHJcbiAgICBJb25Db250ZW50LElvblNlZ21lbnQsSW9uU2VnbWVudEJ1dHRvbixcclxuICAgIElvbkxhYmVsLElvbkljb24sSW9uSW1nLElvblNwaW5uZXIsXHJcbiAgICBJb25MaXN0LElvbkl0ZW0sSW9uSW5wdXQsSW9uQnV0dG9uLFxyXG4gICAgSW9uRGF0ZXRpbWUsSW9uRGF0ZXRpbWVCdXR0b24sSW9uU2VsZWN0LElvblNlbGVjdE9wdGlvbixcclxuICAgIFNlY3JldFRleHRQaXBlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTW9kYWxVc2VyVmVyaWZ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBpc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgaXNWaXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxCb29sZWFuPigpO1xyXG5cclxuICBASW5wdXQoKSB2ZXJpZnlPcHRpb25zOlVzZXJWZXJpZnlPcHRpb25zfHVuZGVmaW5lZD17XHJcbiAgICBpZGNhcmQ6ZmFsc2UsXHJcbiAgICBzdHVkZW50OmZhbHNlLFxyXG4gICAgYmFua2NhcmQ6ZmFsc2UsXHJcbiAgICBhdXRvRmluaXNoOnRydWVcclxuICB9O1xyXG4gIHZlcmlmeVJlc3VsdDphbnkgPSB7fTtcclxuICBvbkJyZWFrUG9pbnRTZXQ6RnVuY3Rpb258dW5kZWZpbmVkO1xyXG5cclxuICBpc0xvYWRpbmc6Ym9vbGVhbiA9IHRydWU7XHJcbiAgdGFiOnN0cmluZyA9IFwiaWRjYXJkXCI7XHJcbiAgY29tcGFueTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgaWRjYXJkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGlkY2FyZERhdGE6YW55ID0ge307XHJcbiAgbmFtZTogc3RyaW5nID0gXCJcIjtcclxuICBzZXg6IHN0cmluZyA9IFwiXCI7XHJcbiAgaWRjYXJkX2ltYWdlX2Zyb250OiBzdHJpbmc9XCJcIjsgLy/ouqvku73or4HmraPpnaJcclxuICBpZGNhcmRfaW1hZ2VfYmFjazogc3RyaW5nPVwiXCI7IC8v6Lqr5Lu96K+B5Y+N6Z2iXHJcbiAgaWRlbnRpdHlfYXV0aDogYm9vbGVhbiA9IGZhbHNlOyAvL+i6q+S7veivgeWPjemdouaYr+WQpuS4iuS8oOato+ehrlxyXG5cclxuICBwcm9maWxlOiBQYXJzZS5PYmplY3R8dW5kZWZpbmVkO1xyXG4gIGFjY291bnQ6IFBhcnNlLk9iamVjdHx1bmRlZmluZWQ7XHJcblxyXG4gIC8vIHJhZGlvVmFsdWU6c3RyaW5nID0gJ0EnXHJcbiAgc3R1ZGVudERhdGVpbDogc3R1ZGVudCA9IHtcclxuICAgIHN0dWRlbnRJRDogXCJcIixcclxuICAgIG1vYmlsZTogXCJcIixcclxuICAgIHNjaG9vbDogXCJcIixcclxuICAgIHNjaG9vbE1ham9yOiBcIlwiLFxyXG4gICAgc3R1ZGVudFR5cGU6IFwi5q+V5LiaXCIsXHJcbiAgICBlZHVjYXRpb246IFwi5pys56eRXCIsXHJcbiAgICB3b3JrVW5pdDogXCJcIixcclxuICAgIHdvcmtpZDogXCJcIixcclxuICAgIGRpcGxvbWE6IFwiXCIsXHJcbiAgICBkZWdyZWVOdW1iZXI6IFwiXCIsXHJcbiAgICBlbnRyeVNjaG9vbDogMjAyMyxcclxuICAgIGNvbGxlZ2U6IFwiXCIsXHJcbiAgfTtcclxuICBlZHVJbWFnZTogc3RyaW5nID0gXCJcIjsgLy/lrabnlJ/or4FcclxuICAvL+mTtuihjOWNoeS/oeaBr1xyXG4gIGJhbmtNYXA6IGFueSA9IHtcclxuICAgIGJhbms6IFwiXCIsXHJcbiAgICBiYW5rY2FyZDogXCJcIixcclxuICAgIGJhbmttb2JpbGU6IFwiXCIsXHJcbiAgfTtcclxuICAvKiDlj6/pgInlubTnuqcgKi9cclxuICBvcHRpb25zOiBhbnkgPSBbXTtcclxuICBiYW5rT3B0aW9uczogYW55ID0gW1xyXG4gICAgXCLmi5vllYbpk7booYxcIixcclxuICAgIFwi5bel5ZWG6ZO26KGMXCIsXHJcbiAgICBcIuWGnOS4mumTtuihjFwiLFxyXG4gICAgXCLkuK3lm73pk7booYxcIixcclxuICAgIFwi5bu66K6+6ZO26KGMXCIsXHJcbiAgICBcIuS6pOmAmumTtuihjFwiLFxyXG4gICAgXCLpgq7mlL/lgqjok4Tpk7booYxcIixcclxuICAgIFwi5Yac5ZWG6ZO26KGMXCIsXHJcbiAgICBcIuS4reS/oemTtuihjFwiLFxyXG4gICAgXCLlhYnlpKfpk7booYxcIixcclxuICAgIFwi5Y2O5aSP6ZO26KGMXCIsXHJcbiAgICBcIuW5v+WPkemTtuihjFwiLFxyXG4gICAgXCLlubPlronpk7booYxcIixcclxuICAgIFwi5rWm5Y+R6ZO26KGMXCIsXHJcbiAgICBcIuWFtOS4mumTtuihjFwiLFxyXG4gICAgXCLmsJHnlJ/pk7booYxcIixcclxuICAgIFwi5oGS5Liw6ZO26KGMXCIsXHJcbiAgICBcIua1meWVhumTtuihjFwiLFxyXG4gICAgXCLmuKTmtbfpk7booYxcIixcclxuICBdO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlOiBOek1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3ZhQWNjb3VudDogQWNjb3VudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgYXV0aFNlcnY6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3ZhQ2xvdWQ6IE5vdmFDbG91ZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsQ3RybDpNb2RhbENvbnRyb2xsZXIsXHJcbiAgKSB7fVxyXG5cclxuICAvLyDpqozor4HmiYDmnInmiYDpnIDorqTor4Hpobnnm67mmK/lkKblt7LlrozmiJBcclxuICB2ZWlmeUZpbmlzaEJhY2soKXtcclxuICAgIGxldCBoYXNOb3RWZXJpZnk6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYodGhpcy52ZXJpZnlPcHRpb25zKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMudmVyaWZ5T3B0aW9ucykuZm9yRWFjaChrZXk9PntcclxuICAgICAgICBpZihrZXk9PVwiYXV0b0ZpbmlzaFwiKSByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy52ZXJpZnlPcHRpb25zPy5ba2V5XSl7XHJcbiAgICAgICAgICBpZighdGhpcy52ZXJpZnlSZXN1bHQ/LltrZXldKXtcclxuICAgICAgICAgICAgaGFzTm90VmVyaWZ5PXRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyDmm7TmlrDnlKjmiLfmlbDmja5cclxuICAgIGxldCB1c2VyID0gUGFyc2UuVXNlci5jdXJyZW50KCk7XHJcbiAgICBsZXQgaGFzVXBkYXRlOmJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmKHVzZXI/LmdldCgnc2V4JykhPXRoaXMucHJvZmlsZT8uZ2V0KFwic2V4XCIpKXtcclxuICAgICAgdXNlcj8uc2V0KFwic2V4XCIsdGhpcy5wcm9maWxlPy5nZXQoXCJzZXhcIikpXHJcbiAgICAgIGhhc1VwZGF0ZT10cnVlXHJcbiAgICB9XHJcbiAgICBpZih1c2VyPy5nZXQoJ3JlYWxuYW1lJykhPXRoaXMucHJvZmlsZT8uZ2V0KFwibmFtZVwiKSl7XHJcbiAgICAgIHVzZXI/LnNldChcInJlYWxuYW1lXCIsdGhpcy5wcm9maWxlPy5nZXQoXCJuYW1lXCIpKVxyXG4gICAgICBoYXNVcGRhdGU9dHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYoaGFzVXBkYXRlKXtcclxuICAgICAgdXNlcj8uc2F2ZSgpO1xyXG4gICAgfVxyXG4gICAgLy8g5a6M5oiQ5pu05pawXHJcbiAgICBpZighdGhpcy52ZXJpZnlPcHRpb25zPy5hdXRvRmluaXNoKSByZXR1cm5cclxuICAgIGlmKCFoYXNOb3RWZXJpZnkpe1xyXG4gICAgICB0aGlzLm1vZGFsQ3RybC5kaXNtaXNzKHtcclxuICAgICAgICB2ZXJpZnlSZXN1bHQ6dGhpcy52ZXJpZnlSZXN1bHQsXHJcbiAgICAgICAgcHJvZmlsZTp0aGlzLnByb2ZpbGUsXHJcbiAgICAgICAgYWNjb3VudDp0aGlzLmFjY291bnQsXHJcbiAgICAgIH0sXCJjb25maXJtXCIpXHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jb21wYW55ID0gdGhpcy5hdXRoU2Vydi5jb21wYW55IHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiY29tcGFueVwiKSB8fCBcIlwiO1xyXG4gICAgYXdhaXQgdGhpcy5ub3ZhQWNjb3VudC5nZXRQcm9maWxlKCk7XHJcbiAgICB0aGlzLmdldE9wdGlvbnMoKTtcclxuICAgIHRoaXMuZ2V0UHJvZmlsZSgpO1xyXG4gICAgYXdhaXQgdGhpcy5nZXRBY2NvdW50KCk7XHJcbiAgICB0aGlzLnZlaWZ5RmluaXNoQmFjaygpO1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMub25CcmVha1BvaW50U2V0JiZ0aGlzLm9uQnJlYWtQb2ludFNldCgwLjc1KVxyXG4gIH1cclxuICBnZXRPcHRpb25zKCkge1xyXG4gICAgbGV0IGJlZm9yWWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gYmVmb3JZZWFyIC0gMjA7IGluZGV4IDw9IGJlZm9yWWVhcjsgaW5kZXgrKykge1xyXG4gICAgICB0aGlzLm9wdGlvbnMudW5zaGlmdChpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIGdldFByb2ZpbGUoKSB7XHJcbiAgICBsZXQgcHJvZmlsZSA9IHRoaXMubm92YUFjY291bnQucHJvZmlsZTtcclxuICAgIGNvbnNvbGUubG9nKHByb2ZpbGUpO1xyXG4gICAgaWYgKHByb2ZpbGU/LmlkKSB7XHJcbiAgICAgIHRoaXMucHJvZmlsZSA9IHByb2ZpbGU7XHJcbiAgICAgIHRoaXMuc3R1ZGVudERhdGVpbCA9IHtcclxuICAgICAgICBzdHVkZW50SUQ6IHByb2ZpbGU/LmdldChcInN0dWRlbnRJRFwiKSxcclxuICAgICAgICBtb2JpbGU6IHByb2ZpbGU/LmdldChcIm1vYmlsZVwiKSxcclxuICAgICAgICBzY2hvb2w6IHByb2ZpbGU/LmdldChcInNjaG9vbFwiKSxcclxuICAgICAgICBzY2hvb2xNYWpvcjogcHJvZmlsZT8uZ2V0KFwic2Nob29sTWFqb3JcIiksXHJcblxyXG4gICAgICAgIHN0dWRlbnRUeXBlOiBwcm9maWxlPy5nZXQoXCJzdHVkZW50VHlwZVwiKSxcclxuICAgICAgICBlZHVjYXRpb246IHByb2ZpbGU/LmdldChcImVkdWNhdGlvblwiKSxcclxuICAgICAgICB3b3JrVW5pdDogcHJvZmlsZT8uZ2V0KFwid29ya1VuaXRcIiksXHJcbiAgICAgICAgd29ya2lkOiBwcm9maWxlPy5nZXQoXCJ3b3JraWRcIiksXHJcbiAgICAgICAgZGlwbG9tYTogcHJvZmlsZT8uZ2V0KFwiZGlwbG9tYVwiKSxcclxuICAgICAgICBkZWdyZWVOdW1iZXI6IHByb2ZpbGU/LmdldChcImRlZ3JlZU51bWJlclwiKSxcclxuICAgICAgICBlbnRyeVNjaG9vbDogcHJvZmlsZT8uZ2V0KFwiZW50cnlTY2hvb2xcIilcclxuICAgICAgICAgID8gcHJvZmlsZS5nZXQoXCJlbnRyeVNjaG9vbFwiKS5nZXRGdWxsWWVhcigpXHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgY29sbGVnZTogcHJvZmlsZT8uZ2V0KFwiY29sbGVnZVwiKSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5lZHVJbWFnZSA9IHByb2ZpbGU/LmdldChcImVkdUltYWdlXCIpO1xyXG4gICAgICB0aGlzLm5hbWUgPSBwcm9maWxlPy5nZXQoXCJuYW1lXCIpO1xyXG4gICAgICBpZiAocHJvZmlsZT8uZ2V0KFwiaXNDaGVja1wiKSkge1xyXG4gICAgICAgIHRoaXMuaWRjYXJkID0gcHJvZmlsZT8uZ2V0KFwiaWRjYXJkXCIpO1xyXG4gICAgICAgIHRoaXMuc2V4ID0gcHJvZmlsZT8uZ2V0KFwic2V4XCIpO1xyXG4gICAgICAgIHRoaXMuaWRjYXJkX2ltYWdlX2Zyb250ID0gcHJvZmlsZT8uZ2V0KFwiYXR0YWNobWVudFwiKVswXTtcclxuICAgICAgICB0aGlzLmlkY2FyZF9pbWFnZV9iYWNrID0gcHJvZmlsZT8uZ2V0KFwiYXR0YWNobWVudFwiKVsxXTtcclxuICAgICAgICB0aGlzLnZlcmlmeVJlc3VsdC5pZGNhcmQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIGdldEFjY291bnQoKSB7XHJcbiAgICBsZXQgdWlkID0gUGFyc2UuVXNlci5jdXJyZW50KCk/LmlkO1xyXG4gICAgbGV0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiQWNjb3VudFwiKTtcclxuICAgIHF1ZXJ5LmVxdWFsVG8oXCJ1c2VyXCIsIHVpZCk7XHJcbiAgICBxdWVyeS5lcXVhbFRvKFwiY29tcGFueVwiLCB0aGlzLmNvbXBhbnkpO1xyXG4gICAgcXVlcnkubm90RXF1YWxUbyhcImlzRGVsZXRlZFwiLCB0cnVlKTtcclxuICAgIHRoaXMuYWNjb3VudCA9IGF3YWl0IHF1ZXJ5LmZpcnN0KCk7XHJcbiAgICBpZiAodGhpcy5hY2NvdW50Py5pZCAmJiB0aGlzLmFjY291bnQ/LmdldChcImJhbmtcIikpIHtcclxuICAgICAgdGhpcy5iYW5rTWFwID0gdGhpcy5hY2NvdW50LmdldChcImJhbmtcIik/LlswXSB8fCB7XHJcbiAgICAgICAgYmFuazogXCJcIixcclxuICAgICAgICBiYW5rY2FyZDogXCJcIixcclxuICAgICAgICBiYW5rbW9iaWxlOiBcIlwiLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnZlcmlmeVJlc3VsdC5iYW5rY2FyZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uQ2xvc2UoKSB7XHJcbiAgICB0aGlzLmlzVmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcclxuICB9XHJcbiAgLy/kuIrkvKDnhafniYdcclxuICBhc3luYyB1cGxvYWRDaGFuZ2UoZTogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nKSB7XHJcbiAgICBjb25zb2xlLmxvZyhlLCB0eXBlKTtcclxuICAgIGxldCBpbWdVcmwgPSBlWzBdO1xyXG4gICAgY29uc29sZS5sb2coaW1nVXJsKTtcclxuICAgIHRoaXNbdHlwZV0gPSBpbWdVcmw7XHJcbiAgICBsZXQgcGFyYW0sIHJlcztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAvKiDouqvku73or4Hku7bmraPpnaIgKi9cclxuICAgICAgY2FzZSBcImlkY2FyZF9pbWFnZV9mcm9udFwiOlxyXG4gICAgICAgIHBhcmFtID0ge1xyXG4gICAgICAgICAgY29tcGFueTogdGhpcy5jb21wYW55LFxyXG4gICAgICAgICAgaW1hZ2VfdXJsOiBpbWdVcmwsXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXMgPSBhd2FpdCB0aGlzLm5vdmFDbG91ZC5hcGkoXCIvYXBpZy9pZGNhcmQvb2NyXCIsIHBhcmFtKTtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jYXJkc1swXT8ubmFtZSAmJiByZXMuY2FyZHNbMF0/LmlkX2NhcmRfbnVtYmVyKSB7XHJcbiAgICAgICAgICB0aGlzLm5hbWUgPSByZXMuY2FyZHNbMF0ubmFtZTtcclxuICAgICAgICAgIHRoaXMuaWRjYXJkID0gcmVzLmNhcmRzWzBdLmlkX2NhcmRfbnVtYmVyO1xyXG4gICAgICAgICAgdGhpcy5zZXggPSByZXMuY2FyZHNbMF0uZ2VuZGVyO1xyXG4gICAgICAgICAgdGhpcy5pZGNhcmREYXRhID0gcmVzLmNhcmRzWzBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2UuY3JlYXRlKFxyXG4gICAgICAgICAgICBcImVycm9yXCIsXHJcbiAgICAgICAgICAgIFwi5pyq6K+G5Yir5Yiw6Lqr5Lu95L+h5oGv77yM6K+356Gu5L+d6Lqr5Lu96K+B54Wn54mH5riF5pmw5LiN5Y+N5YWJ77yBXCJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvKiDouqvku73or4Hku7blm73lvr3pnaIgKi9cclxuICAgICAgY2FzZSBcImlkY2FyZF9pbWFnZV9iYWNrXCI6XHJcbiAgICAgICAgcGFyYW0gPSB7XHJcbiAgICAgICAgICBjb21wYW55OiB0aGlzLmNvbXBhbnksXHJcbiAgICAgICAgICBpbWFnZV91cmw6IGltZ1VybCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMubm92YUNsb3VkLmFwaShcIi9hcGlnL2lkY2FyZC9vY3JcIiwgcGFyYW0pO1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNhcmRzWzBdPy5zaWRlICYmIHJlcy5jYXJkc1swXS5zaWRlID09IFwiYmFja1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmlkZW50aXR5X2F1dGggPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1lc3NhZ2UuY3JlYXRlKFxyXG4gICAgICAgICAgXCJlcnJvclwiLFxyXG4gICAgICAgICAgXCLmnKror4bliKvliLDouqvku73kv6Hmga/vvIzor7fnoa7kv53ouqvku73or4HnhafniYfmuIXmmbDkuI3lj43lhYnvvIFcIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL+WIoOmZpFxyXG4gIG9uRGVsZXRlZCh0eXBlOiBzdHJpbmcpIHtcclxuICAgIHRoaXNbdHlwZV0gPSBcIlwiO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJpZGNhcmRfaW1hZ2VfZnJvbnRcIjpcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuaWRjYXJkID0gXCJcIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImlkY2FyZF9pbWFnZV9iYWNrXCI6XHJcbiAgICAgICAgdGhpcy5pZGVudGl0eV9hdXRoID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qIOaYr+WQpuWPr+aPkOS6pCAqL1xyXG4gIGF1dGhEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmKCF0aGlzLnZlcmlmeU9wdGlvbnM/LmlkY2FyZD8ub2NyKSByZXR1cm4gdHJ1ZTtcclxuICAgIGxldCBkaWFibGVkID0gdGhpcy5uYW1lICYmIHRoaXMuaWRjYXJkICYmIHRoaXMuaWRlbnRpdHlfYXV0aDtcclxuICAgIGlmKGRpYWJsZWQpIHJldHVybiB0cnVlXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbiAgLy/mmK/lkKblj6/mj5DkuqTlrabljoborqTor4FcclxuICBhdXRoRGlzYWJsZWRTdHVkZW50KCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIGFzeW5jIG9uU3VibWl0KCkge1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5uYW1lKTtcclxuICAgIGlmICghdGhpcy52ZXJpZnlPcHRpb25zPy5pZGNhcmQ/Lm9jciB8fCAodGhpcy5uYW1lICYmIHRoaXMuaWRjYXJkICYmIHRoaXMuaWRlbnRpdHlfYXV0aCkpIHtcclxuICAgICAgbGV0IHBhcmFtID0ge1xyXG4gICAgICAgIGNvbXBhbnk6IHRoaXMuY29tcGFueSxcclxuICAgICAgICBjYXJkTm86IHRoaXMuaWRjYXJkLFxyXG4gICAgICAgIHJlYWxOYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgIH07XHJcbiAgICAgIGxldCByZXM6IGFueSA9IGF3YWl0IHRoaXMubm92YUNsb3VkLmFwaShcIi9hcGlnL2lkY2FyZFwiLCBwYXJhbSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlcyk7XHJcbiAgICAgIGlmIChyZXMgJiYgcmVzPy5lcnJvcl9jb2RlID09PSAwICYmIHJlcz8ucmVzdWx0Py5pc29rID09IHRydWUpIHtcclxuICAgICAgICBsZXQgdWlkID0gUGFyc2UuVXNlci5jdXJyZW50KCk/LmlkO1xyXG4gICAgICAgIGxldCBpZGVudGl0eV9maWxlczpzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmKHRoaXMuaWRjYXJkX2ltYWdlX2Zyb250KWlkZW50aXR5X2ZpbGVzLnB1c2godGhpcy5pZGNhcmRfaW1hZ2VfZnJvbnQpXHJcbiAgICAgICAgaWYodGhpcy5pZGNhcmRfaW1hZ2VfYmFjaylpZGVudGl0eV9maWxlcy5wdXNoKHRoaXMuaWRjYXJkX2ltYWdlX2JhY2spXHJcbiAgICAgICAgbGV0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiUHJvZmlsZVwiKTtcclxuICAgICAgICBxdWVyeS5lcXVhbFRvKFwidXNlclwiLCB1aWQpO1xyXG4gICAgICAgIHF1ZXJ5LmVxdWFsVG8oXCJjb21wYW55XCIsIHRoaXMuY29tcGFueSk7XHJcbiAgICAgICAgcXVlcnkubm90RXF1YWxUbyhcImlzRGVsZXRlZFwiLCB0cnVlKTtcclxuICAgICAgICBsZXQgcHJvZmlsZSA9IGF3YWl0IHF1ZXJ5LmZpcnN0KCk7XHJcbiAgICAgICAgaWYgKCFwcm9maWxlPy5pZCkge1xyXG4gICAgICAgICAgbGV0IHBhcnNlT2JqID0gUGFyc2UuT2JqZWN0LmV4dGVuZChcIlByb2ZpbGVcIik7XHJcbiAgICAgICAgICBwcm9maWxlID0gbmV3IHBhcnNlT2JqKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb2ZpbGU/LnNldChcIm5hbWVcIiwgdGhpcy5uYW1lKTtcclxuICAgICAgICBwcm9maWxlPy5zZXQoXCJpZGNhcmRcIiwgdGhpcy5pZGNhcmQpO1xyXG4gICAgICAgIHByb2ZpbGU/LnNldChcInNleFwiLCB0aGlzLnNleCk7XHJcbiAgICAgICAgLyogaWRjYXJkRGF0YVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIFwic2V4XCI6IFwi55S3XCIsXHJcbiAgICAgICAgICBcImFyZWFcIjogXCLmtZnmsZ/nnIHmuKnlt57luILnkZ7lronluIJcIixcclxuICAgICAgICAgIFwiY2l0eVwiOiBcIua4qeW3nuW4glwiLFxyXG4gICAgICAgICAgXCJiaXJ0aGRheVwiOiBcIjIwMDYtMy0xM1wiLFxyXG4gICAgICAgICAgXCJkaXN0cmljdFwiOiBcIueRnuWuieW4glwiLFxyXG4gICAgICAgICAgXCJwcm92aW5jZVwiOiBcIua1meaxn+ecgVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgICovXHJcbiAgICAgICAgcHJvZmlsZT8uc2V0KHtcclxuICAgICAgICAgIGNpdHk6dGhpcy5pZGNhcmREYXRhPy5jaXR5LFxyXG4gICAgICAgICAgYXJlYTpbdGhpcy5pZGNhcmREYXRhPy5wcm92aW5jZSx0aGlzLmlkY2FyZERhdGE/LmNpdHksdGhpcy5pZGNhcmREYXRhPy5kaXN0cmljdF0sXHJcbiAgICAgICAgICBiaXJ0aGRhdGU6dGhpcy5pZGNhcmREYXRhPy5iaXJ0aGRheVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHByb2ZpbGU/LnNldChcImNvbXBhbnlcIiwge1xyXG4gICAgICAgICAgX190eXBlOiBcIlBvaW50ZXJcIixcclxuICAgICAgICAgIGNsYXNzTmFtZTogXCJDb21wYW55XCIsXHJcbiAgICAgICAgICBvYmplY3RJZDogdGhpcy5jb21wYW55LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHByb2ZpbGU/LnNldChcInVzZXJcIiwge1xyXG4gICAgICAgICAgX190eXBlOiBcIlBvaW50ZXJcIixcclxuICAgICAgICAgIGNsYXNzTmFtZTogXCJfVXNlclwiLFxyXG4gICAgICAgICAgb2JqZWN0SWQ6IHVpZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwcm9maWxlPy5zZXQoXCJhdHRhY2htZW50XCIsIGlkZW50aXR5X2ZpbGVzKTtcclxuICAgICAgICBwcm9maWxlPy5zZXQoXCJpc0NoZWNrXCIsIHRydWUpO1xyXG4gICAgICAgIGlmICghcHJvZmlsZT8uZ2V0KFwidHlwZVwiKSkge1xyXG4gICAgICAgICAgcHJvZmlsZT8uc2V0KFwidHlwZVwiLCBcInVzZXJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHByb2ZpbGU/LnNhdmUoKTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2UuY3JlYXRlKFwic3VjY2Vzc1wiLCBcIuiupOivgeaIkOWKn1wiKTtcclxuICAgICAgICB0aGlzLmlzVmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgICAgICBhd2FpdCB0aGlzLm5vdmFBY2NvdW50LmdldFByb2ZpbGUoKTtcclxuICAgICAgICB0aGlzLnByb2ZpbGUgPSB0aGlzLm5vdmFBY2NvdW50LnByb2ZpbGU7XHJcbiAgICAgICAgdGhpcy52ZXJpZnlSZXN1bHQuaWRjYXJkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2UuY3JlYXRlKFwiZXJyb3JcIiwgXCLorqTor4HlpLHotKXvvJror7fmo4Dmn6Xouqvku73kv6Hmga/mmK/lkKbmraPnoa7jgIJcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudmVpZnlGaW5pc2hCYWNrKCk7XHJcblxyXG4gIH1cclxuICAvL+mAieaLqeavleS4muW5tOS7vVxyXG4gIG9uQ2hhbmdlRGF0ZShlKSB7XHJcbiAgICBjb25zb2xlLmxvZyhlKTtcclxuICB9XHJcblxyXG4gIG1vYmlsZVN0YXR1cyhtb2JpbGU6IHN0cmluZyk6IFwiZXJyb3JcInxcIndhcm5pbmdcInxcIlwiICB7XHJcbiAgICBsZXQgcmVnID0gL15bMV1bMyw0LDUsNiw3LDgsOV1bMC05XXs5fSQvO1xyXG4gICAgaWYgKCFyZWcudGVzdChtb2JpbGUpKSB7XHJcbiAgICAgIHJldHVybiBcImVycm9yXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcbiAgLy/mj5DkuqTlrabljobkv6Hmga9cclxuICBhc3luYyBvblN1YmltdFN0dWRlbnQoKSB7XHJcbiAgICBsZXQge1xyXG4gICAgICBzdHVkZW50SUQsXHJcbiAgICAgIG1vYmlsZSxcclxuICAgICAgc2Nob29sLFxyXG4gICAgICBzY2hvb2xNYWpvcixcclxuICAgICAgc3R1ZGVudFR5cGUsXHJcbiAgICAgIGVkdWNhdGlvbixcclxuICAgICAgd29ya1VuaXQsXHJcbiAgICAgIHdvcmtpZCxcclxuICAgICAgZGlwbG9tYSxcclxuICAgICAgZGVncmVlTnVtYmVyLFxyXG4gICAgICBlbnRyeVNjaG9vbCxcclxuICAgICAgY29sbGVnZSxcclxuICAgIH0gPSB0aGlzLnN0dWRlbnREYXRlaWw7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnN0dWRlbnREYXRlaWwpO1xyXG4gICAgbGV0IHJlZyA9IC9eWzFdWzMsNCw1LDcsOF1bMC05XXs5fSQvO1xyXG4gICAgaWYgKFxyXG4gICAgICAhc3R1ZGVudElEIHx8XHJcbiAgICAgICFtb2JpbGUgfHxcclxuICAgICAgIXNjaG9vbCB8fCBcclxuICAgICAgIXRoaXMubmFtZVxyXG4gICAgICAvLyAhc2Nob29sTWFqb3IgfHxcclxuICAgICAgLy8gIWVkdWNhdGlvbiB8fFxyXG4gICAgICAvLyAhd29ya1VuaXQgfHxcclxuICAgICAgLy8gIWRpcGxvbWFcclxuICAgICkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2UuY3JlYXRlKFwiZXJyb3JcIiwgXCLorqTor4HlpLHotKXvvJror7fmo4Dmn6Xkv6Hmga/loavlhpnmmK/lkKblrozmlbTjgIJcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghcmVnLnRlc3QobW9iaWxlKSkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2UuY3JlYXRlKFwiZXJyb3JcIiwgXCLorqTor4HlpLHotKXvvJrmiYvmnLrlj7fmoLzlvI/plJnor6/jgIJcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCB1aWQgPSBQYXJzZS5Vc2VyLmN1cnJlbnQoKT8uaWQ7XHJcbiAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJQcm9maWxlXCIpO1xyXG4gICAgcXVlcnkuZXF1YWxUbyhcInVzZXJcIiwgdWlkKTtcclxuICAgIHF1ZXJ5LmVxdWFsVG8oXCJjb21wYW55XCIsIHRoaXMuY29tcGFueSk7XHJcbiAgICBxdWVyeS5ub3RFcXVhbFRvKFwiaXNEZWxldGVkXCIsIHRydWUpO1xyXG4gICAgbGV0IHByb2ZpbGUgPSBhd2FpdCBxdWVyeS5maXJzdCgpO1xyXG4gICAgaWYgKCFwcm9maWxlPy5pZCkge1xyXG4gICAgICBsZXQgcGFyc2VPYmogPSBQYXJzZS5PYmplY3QuZXh0ZW5kKFwiUHJvZmlsZVwiKTtcclxuICAgICAgcHJvZmlsZSA9IG5ldyBwYXJzZU9iaigpO1xyXG4gICAgfVxyXG4gICAgcHJvZmlsZT8uc2V0KFwibmFtZVwiLCB0aGlzLm5hbWUpO1xyXG4gICAgLy8gcHJvZmlsZT8uc2V0KFwiaWRjYXJkXCIsIHRoaXMuaWRjYXJkKTtcclxuICAgIHByb2ZpbGU/LnNldChcInN0dWRlbnRJRFwiLCBzdHVkZW50SUQpO1xyXG4gICAgcHJvZmlsZT8uc2V0KFwibW9iaWxlXCIsIG1vYmlsZSk7XHJcbiAgICBwcm9maWxlPy5zZXQoXCJzY2hvb2xcIiwgc2Nob29sKTtcclxuICAgIHByb2ZpbGU/LnNldChcImNvbGxlZ2VcIiwgY29sbGVnZSk7XHJcbiAgICBwcm9maWxlPy5zZXQoXCJzY2hvb2xNYWpvclwiLCBzY2hvb2xNYWpvcik7XHJcblxyXG4gICAgcHJvZmlsZT8uc2V0KFwic3R1ZGVudFR5cGVcIiwgc3R1ZGVudFR5cGUpO1xyXG4gICAgcHJvZmlsZT8uc2V0KFwiZWR1Y2F0aW9uXCIsIGVkdWNhdGlvbik7XHJcbiAgICBwcm9maWxlPy5zZXQoXCJ3b3JrVW5pdFwiLCBTdHJpbmcod29ya1VuaXQpKTtcclxuXHJcbiAgICBwcm9maWxlPy5zZXQoXCJ3b3JraWRcIiwgd29ya2lkKTtcclxuICAgIHByb2ZpbGU/LnNldChcImVkdUltYWdlXCIsIHRoaXMuZWR1SW1hZ2UpO1xyXG4gICAgcHJvZmlsZT8uc2V0KFwiZGlwbG9tYVwiLCBkaXBsb21hKTtcclxuICAgIHByb2ZpbGU/LnNldChcImRlZ3JlZU51bWJlclwiLCBkZWdyZWVOdW1iZXIpO1xyXG4gICAgZW50cnlTY2hvb2wgJiZcclxuICAgICAgc3R1ZGVudFR5cGUgIT0gXCLlnKjmoKFcIiAmJlxyXG4gICAgICBwcm9maWxlPy5zZXQoXCJlbnRyeVNjaG9vbFwiLCBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldEZ1bGxZZWFyKGVudHJ5U2Nob29sKSkpO1xyXG5cclxuICAgIHByb2ZpbGU/LnNldChcImNvbXBhbnlcIiwge1xyXG4gICAgICBfX3R5cGU6IFwiUG9pbnRlclwiLFxyXG4gICAgICBjbGFzc05hbWU6IFwiQ29tcGFueVwiLFxyXG4gICAgICBvYmplY3RJZDogdGhpcy5jb21wYW55LFxyXG4gICAgfSk7XHJcbiAgICBwcm9maWxlPy5zZXQoXCJ1c2VyXCIsIHtcclxuICAgICAgX190eXBlOiBcIlBvaW50ZXJcIixcclxuICAgICAgY2xhc3NOYW1lOiBcIl9Vc2VyXCIsXHJcbiAgICAgIG9iamVjdElkOiB1aWQsXHJcbiAgICB9KTtcclxuICAgIGlmICghcHJvZmlsZT8uZ2V0KFwidHlwZVwiKSkge1xyXG4gICAgICBwcm9maWxlPy5zZXQoXCJ0eXBlXCIsIFwic3R1ZGVudFwiKTtcclxuICAgIH1cclxuICAgIGF3YWl0IHByb2ZpbGU/LnNhdmUoKTtcclxuICAgIHRoaXMubWVzc2FnZS5jcmVhdGUoXCJzdWNjZXNzXCIsIFwi6K6k6K+B5oiQ5YqfXCIpO1xyXG4gICAgdGhpcy52ZXJpZnlSZXN1bHQuc3R1ZGVudCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5pc1Zpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XHJcbiAgICBhd2FpdCB0aGlzLm5vdmFBY2NvdW50LmdldFByb2ZpbGUoKTtcclxuICAgIHRoaXMucHJvZmlsZSA9IHRoaXMubm92YUFjY291bnQucHJvZmlsZTtcclxuICAgIHRoaXMudmVpZnlGaW5pc2hCYWNrKCk7XHJcbiAgfVxyXG4gIGNhcmROb1N0YXR1cygpOiBcImVycm9yXCJ8XCJ3YXJuaW5nXCJ8XCJcIiB7XHJcbiAgICBsZXQgcmVnID0gL14oWzEtOV17MX0pKFxcZHsxNX18XFxkezE4fSkkLztcclxuICAgIGlmICghcmVnLnRlc3QodGhpcy5iYW5rTWFwLmJhbmtjYXJkKSkge1xyXG4gICAgICByZXR1cm4gXCJlcnJvclwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNhdmVCYW5rQXV0aCgpOiBib29sZWFuIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMubmFtZSB8fFxyXG4gICAgICAhdGhpcy5pZGNhcmQgfHxcclxuICAgICAgIXRoaXMuYmFua01hcC5iYW5rY2FyZCB8fFxyXG4gICAgICAhdGhpcy5iYW5rTWFwLmJhbmttb2JpbGVcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy/pk7booYzljaFcclxuICBhc3luYyBvblN1YmltdEJhbmsoKSB7XHJcbiAgICBpZiAoIXRoaXMubmFtZSB8fCAhdGhpcy5pZGNhcmQpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlLmNyZWF0ZShcImVycm9yXCIsIFwi6K+35YWI5a6M5oiQ5a6e5ZCN5oiW5a2m55Sf6K6k6K+B44CCXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmJhbmtNYXAuYmFua2NhcmQgfHxcclxuICAgICAgIXRoaXMuYmFua01hcC5iYW5rbW9iaWxlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5tZXNzYWdlLmNyZWF0ZShcImVycm9yXCIsIFwi6K+35aGr5YaZ5a6M5pW05L+h5oGv44CCXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgcmVnID0gL14oWzEtOV17MX0pKFxcZHsxNX18XFxkezE4fSkkLztcclxuICAgIGlmICghcmVnLnRlc3QodGhpcy5iYW5rTWFwLmJhbmtjYXJkKSkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2UuY3JlYXRlKFwiZXJyb3JcIiwgXCLorqTor4HlpLHotKXvvJror7fmo4Dmn6Xpk7booYzljaHkv6Hmga/mmK/lkKbmraPnoa7jgIJcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBwYXJhbSA9IHtcclxuICAgICAgY29tcGFueTogdGhpcy5jb21wYW55LFxyXG4gICAgICAvLyBjb21wYW55OidVUDJjU3R5anVrJyxcclxuICAgICAgYmFua2NhcmQ6IHRoaXMuYmFua01hcC5iYW5rY2FyZC5yZXBsYWNlKC9cXHMvZywgXCJcIiksXHJcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcclxuICAgICAgaWRjYXJkOiB0aGlzLmlkY2FyZCxcclxuICAgICAgbW9iaWxlOiB0aGlzLmJhbmtNYXAuYmFua21vYmlsZSxcclxuICAgIH07XHJcbiAgICBsZXQgcmVzOiBhbnkgPSBhd2FpdCB0aGlzLm5vdmFDbG91ZC5hcGkoXCIvYXBpZy9iYW5rY2FyZFwiLCBwYXJhbSk7XHJcbiAgICBjb25zb2xlLmxvZyhyZXMpO1xyXG4gICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDAgJiYgcmVzPy5zdWNjZXNzICYmIHJlcy5kYXRhLm1zZyA9PSAn5LiA6Ie0Jykge1xyXG4gICAgICBsZXQgYmFua19pbmZvID0gcmVzLmRhdGEuYmFua19pbmZvXHJcblxyXG4gICAgICBsZXQgdWlkID0gUGFyc2UuVXNlci5jdXJyZW50KCk/LmlkO1xyXG4gICAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJBY2NvdW50XCIpO1xyXG4gICAgICBxdWVyeS5lcXVhbFRvKFwidXNlclwiLCB1aWQpO1xyXG4gICAgICBxdWVyeS5lcXVhbFRvKFwiY29tcGFueVwiLCB0aGlzLmNvbXBhbnkpO1xyXG4gICAgICBxdWVyeS5ub3RFcXVhbFRvKFwiaXNEZWxldGVkXCIsIHRydWUpO1xyXG4gICAgICBsZXQgYWNjb3VudCA9IGF3YWl0IHF1ZXJ5LmZpcnN0KCk7XHJcbiAgICAgIGlmICghYWNjb3VudD8uaWQpIHtcclxuICAgICAgICBsZXQgcGFyc2VPYmogPSBQYXJzZS5PYmplY3QuZXh0ZW5kKFwiUHJvZmlsZVwiKTtcclxuICAgICAgICBhY2NvdW50ID0gbmV3IHBhcnNlT2JqKCk7XHJcbiAgICAgIH1cclxuICAgICAgYWNjb3VudD8uc2V0KFwiY29tcGFueVwiLCB7XHJcbiAgICAgICAgX190eXBlOiBcIlBvaW50ZXJcIixcclxuICAgICAgICBjbGFzc05hbWU6IFwiQ29tcGFueVwiLFxyXG4gICAgICAgIG9iamVjdElkOiB0aGlzLmNvbXBhbnksXHJcbiAgICAgIH0pO1xyXG4gICAgICBhY2NvdW50Py5zZXQoXCJ1c2VyXCIsIHtcclxuICAgICAgICBfX3R5cGU6IFwiUG9pbnRlclwiLFxyXG4gICAgICAgIGNsYXNzTmFtZTogXCJfVXNlclwiLFxyXG4gICAgICAgIG9iamVjdElkOiB1aWQsXHJcbiAgICAgIH0pO1xyXG4gICAgICBhY2NvdW50Py5zZXQoXCJiYW5rXCIsIFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBiYW5rOiBiYW5rX2luZm8uYmFuayxcclxuICAgICAgICAgIGJhbmtjYXJkOiB0aGlzLmJhbmtNYXAuYmFua2NhcmQsXHJcbiAgICAgICAgICBiYW5rbW9iaWxlOiB0aGlzLmJhbmtNYXAuYmFua21vYmlsZSxcclxuICAgICAgICAgIGNpdHk6YmFua19pbmZvLmNpdHlcclxuICAgICAgICB9LFxyXG4gICAgICBdKTtcclxuICAgICAgYXdhaXQgYWNjb3VudD8uc2F2ZSgpO1xyXG5cclxuICAgICAgbGV0IHF1ZXJ5UHJvZmlsZSA9IG5ldyBQYXJzZS5RdWVyeShcIlByb2ZpbGVcIik7XHJcbiAgICAgIHF1ZXJ5UHJvZmlsZS5lcXVhbFRvKFwidXNlclwiLCB1aWQpO1xyXG4gICAgICBxdWVyeVByb2ZpbGUuZXF1YWxUbyhcImNvbXBhbnlcIiwgdGhpcy5jb21wYW55KTtcclxuICAgICAgcXVlcnlQcm9maWxlLm5vdEVxdWFsVG8oXCJpc0RlbGV0ZWRcIiwgdHJ1ZSk7XHJcbiAgICAgIHF1ZXJ5UHJvZmlsZS5zZWxlY3QoXCJvYmplY3RJZFwiKTtcclxuICAgICAgbGV0IHByb2ZpbGUgPSBhd2FpdCBxdWVyeVByb2ZpbGUuZmlyc3QoKTtcclxuICAgICAgaWYgKCFwcm9maWxlPy5pZCkge1xyXG4gICAgICAgIGxldCBwYXJzZU9iaiA9IFBhcnNlLk9iamVjdC5leHRlbmQoXCJQcm9maWxlXCIpO1xyXG4gICAgICAgIHByb2ZpbGUgPSBuZXcgcGFyc2VPYmooKTtcclxuICAgICAgfVxyXG4gICAgICBwcm9maWxlPy5zZXQoXCJjb21wYW55XCIsIHtcclxuICAgICAgICBfX3R5cGU6IFwiUG9pbnRlclwiLFxyXG4gICAgICAgIGNsYXNzTmFtZTogXCJDb21wYW55XCIsXHJcbiAgICAgICAgb2JqZWN0SWQ6IHRoaXMuY29tcGFueSxcclxuICAgICAgfSk7XHJcbiAgICAgIHByb2ZpbGU/LnNldChcInVzZXJcIiwge1xyXG4gICAgICAgIF9fdHlwZTogXCJQb2ludGVyXCIsXHJcbiAgICAgICAgY2xhc3NOYW1lOiBcIl9Vc2VyXCIsXHJcbiAgICAgICAgb2JqZWN0SWQ6IHVpZCxcclxuICAgICAgfSk7XHJcbiAgICAgIHByb2ZpbGU/LnNldChcImNhcmR0eXBlXCIsIGJhbmtfaW5mby5iYW5rKTtcclxuICAgICAgcHJvZmlsZT8uc2V0KFwiY2FyZG51bVwiLCB0aGlzLmJhbmtNYXAuYmFua2NhcmQpO1xyXG4gICAgICBwcm9maWxlPy5zZXQoXCJuYXRpdmVQbGFjZVwiLCBiYW5rX2luZm8uY2l0eSk7XHJcbiAgICAgIFxyXG4gICAgICBhd2FpdCBwcm9maWxlPy5zYXZlKCk7XHJcbiAgICAgIHRoaXMubWVzc2FnZS5jcmVhdGUoXCJzdWNjZXNzXCIsIFwi6K6k6K+B5oiQ5YqfXCIpO1xyXG4gICAgICB0aGlzLnZlcmlmeVJlc3VsdC5iYW5rY2FyZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNWaXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLnZlaWZ5RmluaXNoQmFjaygpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMubWVzc2FnZS5jcmVhdGUoXCJlcnJvclwiLCBcIuiupOivgeWksei0pe+8muivt+ajgOafpemTtuihjOWNoeS/oeaBr+aYr+WQpuato+ehruOAglwiKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBVc2VyVmVyaWZ5T3B0aW9uc3tcclxuICAgIGlkY2FyZD86YW55fHtcclxuICAgICAgb2NyPzpib29sZWFuIC8vIOaYr+WQpuW8gOWQr09DUuivhuWIq1xyXG4gICAgfVxyXG4gICAgc3R1ZGVudD86Ym9vbGVhblxyXG4gICAgYmFua2NhcmQ/OmJvb2xlYW5cclxuICAgIGF1dG9GaW5pc2g/OmJvb2xlYW4gLy8g6aqM6K+B5a6M5oiQ5piv5ZCm6Ieq5Yqo6L+U5ZueXHJcbn1cclxuaW50ZXJmYWNlIFVzZXJWZXJpZnlSZXN1bHQge1xyXG4gICAgdmVyaWZ5UmVzdWx0OlVzZXJWZXJpZnlPcHRpb25zLFxyXG4gICAgcHJvZmlsZT86UGFyc2UuT2JqZWN0LFxyXG4gICAgYWNjb3VudD86UGFyc2UuT2JqZWN0XHJcbn1cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Vc2VyVmVyaWZ5TW9kYWwobW9kYWxDdHJsOk1vZGFsQ29udHJvbGxlcixhbGVydEN0cmw6QWxlcnRDb250cm9sbGVyLG9wdGlvbnM/OlVzZXJWZXJpZnlPcHRpb25zKTpQcm9taXNlPFVzZXJWZXJpZnlSZXN1bHR8dW5kZWZpbmVkPntcclxuICAvLyDmo4DmtYvorqTor4Hkv6Hmga/vvJroi6Xlt7LorqTor4HvvIzliJnov5Tlm54gdHJ1ZVxyXG4gIGxldCBmaXJzdFRhYiA9IG9wdGlvbnMmJk9iamVjdC5rZXlzKG9wdGlvbnMpPy5bMF0gfHwgXCJpZGNhcmRcIlxyXG4gIGlmKG9wdGlvbnM/LmF1dG9GaW5pc2ggPT0gdW5kZWZpbmVkKXtcclxuICAgIGlmKG9wdGlvbnMpe1xyXG4gICAgICBvcHRpb25zLmF1dG9GaW5pc2ggPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyDlvLnlh7rorqTor4Hnu4Tku7ZcclxuICBsZXQgbW9kYWw6YW55ID0gYXdhaXQgbW9kYWxDdHJsLmNyZWF0ZSh7XHJcbiAgICBjb21wb25lbnQ6TW9kYWxVc2VyVmVyaWZ5Q29tcG9uZW50LFxyXG4gICAgY29tcG9uZW50UHJvcHM6e3ZlcmlmeU9wdGlvbnM6b3B0aW9ucyx0YWI6Zmlyc3RUYWIsb25CcmVha1BvaW50U2V0OigpPT57XHJcbiAgICAgIG1vZGFsPy5zZXRDdXJyZW50QnJlYWtwb2ludCgwLjc1KVxyXG4gICAgfX0sXHJcbiAgICBicmVha3BvaW50czpbMC4zNSwwLjc1LDFdLFxyXG4gICAgaW5pdGlhbEJyZWFrcG9pbnQ6MC4zNSxcclxuICB9KVxyXG4gIG1vZGFsLnByZXNlbnQoKVxyXG4gIGxldCB7ZGF0YSxyb2xlfSA9IGF3YWl0IG1vZGFsLm9uV2lsbERpc21pc3MoKTtcclxuICBpZihyb2xlPT1cImNvbmZpcm1cIil7XHJcbiAgICByZXR1cm4gZGF0YVxyXG4gIH1cclxuICByZXR1cm4gdW5kZWZpbmVkXHJcbn0iLCJcclxuPGlvbi1jb250ZW50ICpuZ0lmPVwiaXNMb2FkaW5nXCI+XHJcbiAgPGRpdiBjbGFzcz1cInBhZ2VcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxyXG4gICAgPGlvbi1zcGlubmVyIG5hbWU9XCJjcmVzY2VudFwiIGNvbG9yPVwicHJpbWFyeVwiIHN0eWxlPVwid2lkdGg6ODBweDtoZWlnaHQ6ODBweDtcIj48L2lvbi1zcGlubmVyPlxyXG4gICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj7mraPlnKjliqDovb3orqTor4Hnu4Tku7YuLi48L2lvbi1sYWJlbD5cclxuICA8L2Rpdj5cclxuPC9pb24tY29udGVudD5cclxuXHJcbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XHJcbiAgPGlvbi1zZWdtZW50IFsobmdNb2RlbCldPVwidGFiXCI+XHJcbiAgICA8aW9uLXNlZ21lbnQtYnV0dG9uICpuZ0lmPVwidmVyaWZ5T3B0aW9ucz8uaWRjYXJkXCIgdmFsdWU9XCJpZGNhcmRcIj48aW9uLWljb24gbmFtZT1cImNhcmQtb3V0bGluZVwiPjwvaW9uLWljb24+IOWunuWQjeiupOivgTwvaW9uLXNlZ21lbnQtYnV0dG9uPlxyXG4gICAgPGlvbi1zZWdtZW50LWJ1dHRvbiAqbmdJZj1cInZlcmlmeU9wdGlvbnM/LnN0dWRlbnRcIiB2YWx1ZT1cInN0dWRlbnRcIj48aW9uLWljb24gbmFtZT1cInNjaG9vbC1vdXRsaW5lXCI+PC9pb24taWNvbj4g5a2m55Sf6K6k6K+BPC9pb24tc2VnbWVudC1idXR0b24+XHJcbiAgICA8aW9uLXNlZ21lbnQtYnV0dG9uICpuZ0lmPVwidmVyaWZ5T3B0aW9ucz8uYmFua2NhcmRcIiB2YWx1ZT1cImJhbmtjYXJkXCI+PGlvbi1pY29uIG5hbWU9XCJ3YWxsZXQtb3V0bGluZVwiPjwvaW9uLWljb24+IOmTtuihjOWNoeiupOivgTwvaW9uLXNlZ21lbnQtYnV0dG9uPlxyXG4gIDwvaW9uLXNlZ21lbnQ+XHJcblxyXG4gICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJpZ2h0QXZhdGFyXCI+PC9uZy1jb250YWluZXI+IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYj09J2lkY2FyZCcmJnZlcmlmeU9wdGlvbnM/LmlkY2FyZFwiPlxyXG4gICAgICAgICAgICA8aW9uLWxpc3Q+XHJcbiAgICAgICAgICAgICAgPCEtLSDouqvku73or4FPQ1Lor4bliKsgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZlcmlmeU9wdGlvbnM/LmlkY2FyZD8ub2NyXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+PHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+IOi6q+S7veivgeato+mdojwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8Zm0tZWRpdC11cGxvYWRcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlkY2FyZF9pbWFnZV9mcm9udFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbKGZpbGUpXT1cImlkY2FyZF9pbWFnZV9mcm9udFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29tcGFueV09XCJjb21wYW55XCJcclxuICAgICAgICAgICAgICAgICAgICAgIChmaWxlTGlzdENoYW5nZSk9XCJ1cGxvYWRDaGFuZ2UoJGV2ZW50LCAnaWRjYXJkX2ltYWdlX2Zyb250JylcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2ZtLWVkaXQtdXBsb2FkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpb24taW1nICpuZ0lmPVwiaWRjYXJkX2ltYWdlX2Zyb250XCIgW3NyY109XCJpZGNhcmRfaW1hZ2VfZnJvbnRcIj48L2lvbi1pbWc+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPjxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPiDouqvku73or4Hlm73lvr3pnaI8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGZtLWVkaXQtdXBsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpZGNhcmRfaW1hZ2VfYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbKGZpbGUpXT1cImlkY2FyZF9pbWFnZV9iYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb21wYW55XT1cImNvbXBhbnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGZpbGVMaXN0Q2hhbmdlKT1cInVwbG9hZENoYW5nZSgkZXZlbnQsICdpZGNhcmRfaW1hZ2VfYmFjaycpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9mbS1lZGl0LXVwbG9hZD5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWltZyAqbmdJZj1cImlkY2FyZF9pbWFnZV9iYWNrXCIgW3NyY109XCJpZGNhcmRfaW1hZ2VfYmFja1wiPjwvaW9uLWltZz5cclxuICAgICAgICAgICAgICAgICAgPC9pb24taXRlbT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSDouqvku73or4HmiYvliqjovpPlhaUgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxpb24taXRlbT5cclxuICAgICAgICAgICAgICAgICAgQGlmIChwcm9maWxlPy5nZXQoJ2lzQ2hlY2snKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pbnB1dCBbbmdNb2RlbF09XCJuYW1lIHwgc2VjcmV0VGV4dFwiIGxhYmVsPVwi5aeT5ZCNXCIgW3JlYWRvbmx5XT1cInRydWVcIj48L2lvbi1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgfUBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIDxpb24taW5wdXQgWyhuZ01vZGVsKV09XCJuYW1lXCIgbGFiZWw9XCLlp5PlkI1cIiBbcmVhZG9ubHldPVwidmVyaWZ5T3B0aW9ucz8uaWRjYXJkPy5vY3JcIiAgW3BsYWNlaG9sZGVyXT1cInZlcmlmeU9wdGlvbnM/LmlkY2FyZD8ub2NyPyfor7fkuIrkvKDouqvku73or4EnOifovpPlhaXlp5PlkI0nXCI+PC9pb24taW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGlvbi1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICBAaWYgKHByb2ZpbGU/LmdldCgnaXNDaGVjaycpKXtcclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWlucHV0IFtuZ01vZGVsXT1cImlkY2FyZCB8IHNlY3JldFRleHQ6J2lkY2FyZCdcIiBsYWJlbD1cIui6q+S7veivgeWPt1wiIFtyZWFkb25seV09XCJ0cnVlXCI+PC9pb24taW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgIH1AZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWlucHV0IFsobmdNb2RlbCldPVwiaWRjYXJkXCIgbGFiZWw9XCLouqvku73or4Hlj7dcIiBbcmVhZG9ubHldPVwidmVyaWZ5T3B0aW9ucz8uaWRjYXJkPy5vY3JcIiBbcGxhY2Vob2xkZXJdPVwidmVyaWZ5T3B0aW9ucz8uaWRjYXJkPy5vY3I/J+iHquWKqOivhuWIqyc6J+i+k+WFpei6q+S7veivgeWPtydcIj48L2lvbi1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9pb24taXRlbT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSDouqvku73or4HorqTor4HnirbmgIEgLS0+XHJcbiAgICAgICAgICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJzdWNjZXNzXCIgKm5nSWY9XCJwcm9maWxlPy5nZXQoJ2lzQ2hlY2snKTsgZWxzZSBlbHNlSWRjYXJkXCIgZXhwYW5kPVwiYmxvY2tcIj7lt7Llrp7lkI08L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlSWRjYXJkPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIiBbZGlzYWJsZWRdPVwiIWF1dGhEaXNhYmxlZCgpXCIgZXhwYW5kPVwiYmxvY2tcIj7mj5DkuqTorqTor4E8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2lvbi1saXN0PlxyXG5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IG56LXJvdz5cclxuICAgICAgICAgICAgICAgIDxkaXYgbnotY29sIG56U3Bhbj1cIjEyXCIgY2xhc3M9XCJsaVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj48c3Bhbj4qPC9zcGFuPiDouqvku73or4HmraPpnaI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGZtLWVkaXQtdXBsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaWRjYXJkX2ltYWdlX2Zyb250XCJcclxuICAgICAgICAgICAgICAgICAgICBbKGZpbGUpXT1cImlkY2FyZF9pbWFnZV9mcm9udFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbXBhbnldPVwiY29tcGFueVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpbGVMaXN0Q2hhbmdlKT1cInVwbG9hZENoYW5nZSgkZXZlbnQsICdpZGNhcmRfaW1hZ2VfZnJvbnQnKVwiXHJcbiAgICAgICAgICAgICAgICAgID48L2ZtLWVkaXQtdXBsb2FkPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLXZpZXdcIiAqbmdJZj1cImlkY2FyZF9pbWFnZV9mcm9udFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFwcm9maWxlPy5nZXQoJ2lzQ2hlY2snKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBuei1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICBuelR5cGU9XCJjbG9zZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBuelRoZW1lPVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVkKCdpZGNhcmRfaW1hZ2VfZnJvbnQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICBuei1pbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI4MHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjgwcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbnpTcmM9XCJodHRwczovL3pvcy5hbGlwYXlvYmplY3RzLmNvbS9ybXNwb3J0YWwvamtqZ2tFZnZwVVBWeVJqVUltbmlWc2xaZldQbkp1dVoucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuelNyY109XCJpZGNhcmRfaW1hZ2VfZnJvbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYWx0PVwi6Lqr5Lu96K+B5q2j6Z2iXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuei1jb2wgbnpTcGFuPVwiMTJcIiBjbGFzcz1cImxpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPjxzcGFuPio8L3NwYW4+IOi6q+S7veivgeWbveW+vemdojwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8Zm0tZWRpdC11cGxvYWRcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpZGNhcmRfaW1hZ2VfYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhmaWxlKV09XCJpZGNhcmRfaW1hZ2VfYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbXBhbnldPVwiY29tcGFueVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpbGVMaXN0Q2hhbmdlKT1cInVwbG9hZENoYW5nZSgkZXZlbnQsICdpZGNhcmRfaW1hZ2VfYmFjaycpXCJcclxuICAgICAgICAgICAgICAgICAgPjwvZm0tZWRpdC11cGxvYWQ+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWctdmlld1wiICpuZ0lmPVwiaWRjYXJkX2ltYWdlX2JhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcHJvZmlsZT8uZ2V0KCdpc0NoZWNrJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbnotaWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgbnpUeXBlPVwiY2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbnpUaGVtZT1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlZCgnaWRjYXJkX2ltYWdlX2JhY2snKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICBuei1pbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI4MHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjgwcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbnpTcmM9XCJodHRwczovL3pvcy5hbGlwYXlvYmplY3RzLmNvbS9ybXNwb3J0YWwvamtqZ2tFZnZwVVBWeVJqVUltbmlWc2xaZldQbkp1dVoucG5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuelNyY109XCJpZGNhcmRfaW1hZ2VfYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCLouqvku73or4Hlm73lvr3pnaJcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXZpZXdcIj5cclxuICAgICAgICAgICAgICAgIDxuei1pbnB1dC1ncm91cCBuekFkZE9uQmVmb3JlPVwi5aeT5ZCNXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBuei1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fkuIrkvKDouqvku73or4FcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvbnotaW5wdXQtZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8bnotaW5wdXQtZ3JvdXAgbnpBZGRPbkJlZm9yZT1cIui6q+S7veivgeWPt1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbnotaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImlkY2FyZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fkuIrkvKDouqvku73or4FcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvbnotaW5wdXQtZ3JvdXA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBuei1yb3c+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIG56LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInByb2ZpbGUgJiYgcHJvZmlsZT8uZ2V0KCdpc0NoZWNrJyk7IGVsc2UgZWxzZVRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgbnpUeXBlPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgIG56QmxvY2tcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICDlt7Llrp7lkI1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBuei1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICBuelR5cGU9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBuekJsb2NrXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhYXV0aERpc2FibGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAg56Gu5a6aXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiPT0nc3R1ZGVudCcmJnZlcmlmeU9wdGlvbnM/LnN0dWRlbnRcIj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdmlld1wiPlxyXG4gICAgICAgICAgICAgICAgPG56LWlucHV0LWdyb3VwIG56QWRkT25CZWZvcmU9XCLlp5PlkI1cIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIG56LWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+WFiOWujOaIkOWunuWQjeiupOivgVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInByb2ZpbGUgJiYgcHJvZmlsZT8uZ2V0KCdpc0NoZWNrJylcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9uei1pbnB1dC1ncm91cD5cclxuICAgICAgICAgICAgICAgIDxuei1pbnB1dC1ncm91cCBuekFkZE9uQmVmb3JlPVwi5a2m5L+h572R6LSm5Y+3XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBuei1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3R1ZGVudERhdGVpbC5zdHVkZW50SURcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+35aGr5YaZ5a2m5L+h572R6LSm5Y+3XCJcclxuICAgICAgICAgICAgICAgICAgICBbbnpTdGF0dXNdPVwic3R1ZGVudERhdGVpbC5zdHVkZW50SUQgIT0gJycgPyAnJyA6ICdlcnJvcidcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9uei1pbnB1dC1ncm91cD5cclxuICAgICAgICAgICAgICAgIDxuei1pbnB1dC1ncm91cCBuekFkZE9uQmVmb3JlPVwi5omL5py65Y+3XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBuei1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjExXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInN0dWRlbnREYXRlaWwubW9iaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+Whq+WGmeaJi+acuuWPt1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW256U3RhdHVzXT1cIm1vYmlsZVN0YXR1cyhzdHVkZW50RGF0ZWlsLm1vYmlsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9uei1pbnB1dC1ncm91cD5cclxuICAgICAgICAgICAgICAgIDxuei1pbnB1dC1ncm91cCBuekFkZE9uQmVmb3JlPVwi5a2m5qCh5ZCN56ewXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBuei1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3R1ZGVudERhdGVpbC5zY2hvb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwi6K+35aGr5YaZ5a2m5qCh5ZCN56ewXCJcclxuICAgICAgICAgICAgICAgICAgICBbbnpTdGF0dXNdPVwic3R1ZGVudERhdGVpbC5zY2hvb2wgIT0gJycgPyAnJyA6ICdlcnJvcidcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9uei1pbnB1dC1ncm91cD5cclxuICAgICAgICAgICAgICAgIDxuei1pbnB1dC1ncm91cCBuekFkZE9uQmVmb3JlPVwi5omA5bGe5a2m6ZmiXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBuei1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3R1ZGVudERhdGVpbC5jb2xsZWdlXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+Whq+WGmeaJgOWxnuWtpumZolwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L256LWlucHV0LWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPG56LWlucHV0LWdyb3VwIG56QWRkT25CZWZvcmU9XCLkuJPkuJrlkI3np7BcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIG56LWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdHVkZW50RGF0ZWlsLnNjaG9vbE1ham9yXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+Whq+WGmeS4k+S4muWQjeensFwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L256LWlucHV0LWdyb3VwPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93LWxhYmxlXCI+5piv5ZCm5Zyo5qChPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bnotcmFkaW8tZ3JvdXAgWyhuZ01vZGVsKV09XCJzdHVkZW50RGF0ZWlsLnN0dWRlbnRUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBuei1yYWRpbyBuelZhbHVlPVwi5Zyo5qChXCI+5pivPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIG56VmFsdWU9XCLmr5XkuJpcIj7lkKY8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9uei1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInN0dWRlbnREYXRlaWwuc3R1ZGVudFR5cGUgPT0gJ+WcqOagoSc7IGVsc2UgdGVtcGxhdGUxXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93LWxhYmxlXCI+6Zi25q61PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxuei1yYWRpby1ncm91cCBbKG5nTW9kZWwpXT1cInN0dWRlbnREYXRlaWwuZWR1Y2F0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIG56VmFsdWU9XCLlpKfkuJNcIj7lpKfkuJM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBuei1yYWRpbyBuelZhbHVlPVwi5pys56eRXCI+5pys56eRPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8gbnpWYWx1ZT1cIuehleWjq1wiPuehleWjqzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIG56VmFsdWU9XCLljZrlo6tcIj7ljZrlo6s8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L256LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93LWxhYmxlIGluZm8tc2VsZWN0XCI+5bm057qn77yaPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlPVwiYWN0aW9uLXNoZWV0XCJcclxuICAgICAgICAgICAgICAgICAgICBjYW5jZWwtdGV4dD1cIuWFs+mXrVwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdHVkZW50RGF0ZWlsLndvcmtVbml0XCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIueCueWHu+mAieaLqVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyBpdGVtIH1957qnPC9pb24tc2VsZWN0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxuei1pbnB1dC1ncm91cCBuekFkZE9uQmVmb3JlPVwi5a2m55Sf6K+B5Y+3XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBuei1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3R1ZGVudERhdGVpbC5kaXBsb21hXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+Whq+WGmeWtpueUn+ivgeWPt1wiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L256LWlucHV0LWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuei1yb3cgc3R5bGU9XCJtYXJnaW46IDEwcHggMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IG56LWNvbCBuelNwYW49XCIxMlwiIGNsYXNzPVwibGlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHJlZFwiPio8L3NwYW4+IOWtpueUn+ivgeeFp+eJh1xyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxmbS1lZGl0LXVwbG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZWR1SW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgWyhmaWxlKV09XCJlZHVJbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29tcGFueV09XCJjb21wYW55XCJcclxuICAgICAgICAgICAgICAgICAgICAgIChmaWxlTGlzdENoYW5nZSk9XCJ1cGxvYWRDaGFuZ2UoJGV2ZW50LCAnZWR1SW1hZ2UnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvZm0tZWRpdC11cGxvYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZy12aWV3XCIgKm5nSWY9XCJlZHVJbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcHJvZmlsZT8uZ2V0KCdpc0Nyb3NzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuei1pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG56VHlwZT1cImNsb3NlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnpUaGVtZT1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVkKCdlZHVJbWFnZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG56LWltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMDBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG56U3JjPVwiaHR0cHM6Ly96b3MuYWxpcGF5b2JqZWN0cy5jb20vcm1zcG9ydGFsL2pramdrRWZ2cFVQVnlSalVJbW5pVnNsWmZXUG5KdXVaLnBuZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuelNyY109XCJlZHVJbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIuWtpueUn+ivgeeFp+eJh1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUxPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvdy1sYWJsZVwiPuacgOmrmOWtpuWOhjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8bnotcmFkaW8tZ3JvdXAgWyhuZ01vZGVsKV09XCJzdHVkZW50RGF0ZWlsLmVkdWNhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBuei1yYWRpbyBuelZhbHVlPVwi5aSn5LiTXCI+5aSn5LiTPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgbnotcmFkaW8gbnpWYWx1ZT1cIuWtpuWjq1wiPuWtpuWjqzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIG56LXJhZGlvIG56VmFsdWU9XCLnoZXlo6tcIj7noZXlo6s8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBuei1yYWRpbyBuelZhbHVlPVwi5Y2a5aOrXCI+5Y2a5aOrPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9uei1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvdy1sYWJsZSBpbmZvLXNlbGVjdFwiPuavleS4muW5tOS7ve+8mjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVyZmFjZT1cImFjdGlvbi1zaGVldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsLXRleHQ9XCLlhbPpl61cIlxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3R1ZGVudERhdGVpbC5lbnRyeVNjaG9vbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLngrnlh7vpgInmi6lcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLXNlbGVjdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgaXRlbSB9feW5tDwvaW9uLXNlbGVjdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bnotaW5wdXQtZ3JvdXAgbnpBZGRPbkJlZm9yZT1cIuavleS4muivgeWPt1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbnotaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInN0dWRlbnREYXRlaWwuZGVncmVlTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+Whq+WGmeavleS4muivgeWPt1wiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L256LWlucHV0LWdyb3VwPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPGRpdiBuei1yb3cgc3R5bGU9XCJtYXJnaW46IDEwcHggYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBuei1idXR0b25cclxuICAgICAgICAgICAgICAgICAgbnpUeXBlPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgIG56QmxvY2tcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3ViaW10U3R1ZGVudCgpXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAg56Gu5a6aXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYj09J2JhbmtjYXJkJyYmdmVyaWZ5T3B0aW9ucz8uYmFua2NhcmRcIj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdmlld1wiPlxyXG4gICAgICAgICAgICAgICAgPG56LWlucHV0LWdyb3VwIG56QWRkT25CZWZvcmU9XCLlp5PlkI1cIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIG56LWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+WFiOWujOaIkOWunuWQjeiupOivgVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9uei1pbnB1dC1ncm91cD5cclxuICAgICAgICAgICAgICAgIDxuei1pbnB1dC1ncm91cCBuekFkZE9uQmVmb3JlPVwi6Lqr5Lu96K+B5Y+3XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBuei1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaWRjYXJkXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+WFiOWujOaIkOWunuWQjeiupOivgVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9uei1pbnB1dC1ncm91cD5cclxuICAgICAgICAgICAgICAgIDxuei1pbnB1dC1ncm91cCBuekFkZE9uQmVmb3JlPVwi6ZO26KGM5Y2h6LSm5Y+3XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBuei1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYmFua01hcC5iYW5rY2FyZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7floavlhpnpk7booYzljaHotKblj7dcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuelN0YXR1c109XCJjYXJkTm9TdGF0dXMoKVwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L256LWlucHV0LWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgPG56LWlucHV0LWdyb3VwIG56QWRkT25CZWZvcmU9XCLpk7booYzljaHpooTnlZnmiYvmnLrlj7dcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIG56LWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJiYW5rTWFwLmJhbmttb2JpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjExXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuivt+Whq+WGmemTtuihjOWNoemihOeVmeaJi+acuuWPt1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW256U3RhdHVzXT1cIm1vYmlsZVN0YXR1cyhiYW5rTWFwLmJhbmttb2JpbGUpXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvbnotaW5wdXQtZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8bnotaW5wdXQtZ3JvdXAgbnpBZGRPbkJlZm9yZT1cIuW8gOaIt+ihjFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgbnotaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJiYW5rTWFwLmJhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjExXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIuiupOivgeaIkOWKn+WQjuiHquWKqOivhuWIq1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9uei1pbnB1dC1ncm91cD5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImluZm8tcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLXJvdy1sYWJsZSBpbmZvLXNlbGVjdFwiPuW8gOaIt+ihjO+8mjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVyZmFjZT1cImFjdGlvbi1zaGVldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsLXRleHQ9XCLlhbPpl61cIlxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYmFua01hcC5iYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIueCueWHu+mAieaLqVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJhbmtPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLXNlbGVjdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgaXRlbSB9fTwvaW9uLXNlbGVjdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgbnotcm93PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBuei1idXR0b25cclxuICAgICAgICAgICAgICAgICAgbnpUeXBlPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgIG56QmxvY2tcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3ViaW10QmFuaygpXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNhdmVCYW5rQXV0aCgpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAg56Gu5a6aXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuXHJcbjwvaW9uLWNvbnRlbnQ+XHJcbiJdfQ==
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/person/modal-user-verify/user-verify.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,Input,Output,EventEmitter}from"@angular/core";import{FmodeParse}from"@fmode/parse";import{HttpClient}from"@angular/common/http";import{NzMessageService}from"ng-zorro-antd/message";import{AuthService}from"../../user/login/auth.service";import{NovaCloudService}from"../../nova-cloud/nova-cloud.service";import{AccountService}from"../../user/account/account.service";import{EditUploadModule}from"../edit-upload/edit-upload.module";import{IonIcon,IonContent,IonDatetime,IonDatetimeButton,IonLabel,IonSegment,IonSegmentButton,IonSelect,IonSelectOption,ModalController,IonButton,IonInput,IonItem,IonList,IonImg,IonSpinner}from"@ionic/angular/standalone";import{NzInputModule}from"ng-zorro-antd/input";import{NzIconModule}from"ng-zorro-antd/icon";import{NzTabsModule}from"ng-zorro-antd/tabs";import{NzButtonModule}from"ng-zorro-antd/button";import{NzModalModule}from"ng-zorro-antd/modal";import{NzGridModule}from"ng-zorro-antd/grid";import{NzRadioModule}from"ng-zorro-antd/radio";import{CommonModule}from"@angular/common";import{FormsModule,ReactiveFormsModule}from"@angular/forms";import{NzImageModule}from"ng-zorro-antd/image";import{SecretTextPipe}from"./secret-text.pipe";import*as i0 from"@angular/core";import*as i1 from"@angular/common/http";import*as i2 from"ng-zorro-antd/message";import*as i3 from"../../user/account/account.service";import*as i4 from"../../user/login/auth.service";import*as i5 from"../../nova-cloud/nova-cloud.service";import*as i6 from"@ionic/angular/standalone";import*as i7 from"@angular/common";import*as i8 from"@angular/forms";import*as i9 from"ng-zorro-antd/input";import*as i10 from"ng-zorro-antd/icon";import*as i11 from"ng-zorro-antd/button";import*as i12 from"ng-zorro-antd/core/transition-patch";import*as i13 from"ng-zorro-antd/core/wave";import*as i14 from"ng-zorro-antd/grid";import*as i15 from"ng-zorro-antd/radio";import*as i16 from"ng-zorro-antd/image";import*as i17 from"../edit-upload/edit-upload.component";const Parse=FmodeParse.with("nova");export class ModalUserVerifyComponent{constructor(n,e,t,i,o,a){this.http=n,this.message=e,this.novaAccount=t,this.authServ=i,this.novaCloud=o,this.modalCtrl=a,this.isVisible=!1,this.isVisibleChange=new EventEmitter,this.verifyOptions={idcard:!1,student:!1,bankcard:!1,autoFinish:!0},this.verifyResult={},this.isLoading=!0,this.tab="idcard",this.company="",this.idcard="",this.idcardData={},this.name="",this.sex="",this.idcard_image_front="",this.idcard_image_back="",this.identity_auth=!1,this.studentDateil={studentID:"",mobile:"",school:"",schoolMajor:"",studentType:"毕业",education:"本科",workUnit:"",workid:"",diploma:"",degreeNumber:"",entrySchool:2023,college:""},this.eduImage="",this.bankMap={bank:"",bankcard:"",bankmobile:""},this.options=[],this.bankOptions=["招商银行","工商银行","农业银行","中国银行","建设银行","交通银行","邮政储蓄银行","农商银行","中信银行","光大银行","华夏银行","广发银行","平安银行","浦发银行","兴业银行","民生银行","恒丰银行","浙商银行","渤海银行"]}veifyFinishBack(){let n=!1;this.verifyOptions&&Object.keys(this.verifyOptions).forEach((e=>{"autoFinish"!=e&&this.verifyOptions?.[e]&&(this.verifyResult?.[e]||(n=!0))}));let e=Parse.User.current(),t=!1;e?.get("sex")!=this.profile?.get("sex")&&(e?.set("sex",this.profile?.get("sex")),t=!0),e?.get("realname")!=this.profile?.get("name")&&(e?.set("realname",this.profile?.get("name")),t=!0),t&&e?.save(),this.verifyOptions?.autoFinish&&(n||this.modalCtrl.dismiss({verifyResult:this.verifyResult,profile:this.profile,account:this.account},"confirm"))}async ngOnInit(){this.company=this.authServ.company||localStorage.getItem("company")||"",await this.novaAccount.getProfile(),this.getOptions(),this.getProfile(),await this.getAccount(),this.veifyFinishBack(),this.isLoading=!1,this.onBreakPointSet&&this.onBreakPointSet(.75)}getOptions(){let n=(new Date).getFullYear();for(let e=n-20;e<=n;e++)this.options.unshift(e)}async getProfile(){let n=this.novaAccount.profile;console.log(n),n?.id&&(this.profile=n,this.studentDateil={studentID:n?.get("studentID"),mobile:n?.get("mobile"),school:n?.get("school"),schoolMajor:n?.get("schoolMajor"),studentType:n?.get("studentType"),education:n?.get("education"),workUnit:n?.get("workUnit"),workid:n?.get("workid"),diploma:n?.get("diploma"),degreeNumber:n?.get("degreeNumber"),entrySchool:n?.get("entrySchool")?n.get("entrySchool").getFullYear():null,college:n?.get("college")},this.eduImage=n?.get("eduImage"),this.name=n?.get("name"),n?.get("isCheck")&&(this.idcard=n?.get("idcard"),this.sex=n?.get("sex"),this.idcard_image_front=n?.get("attachment")[0],this.idcard_image_back=n?.get("attachment")[1],this.verifyResult.idcard=!0))}async getAccount(){let n=Parse.User.current()?.id,e=new Parse.Query("Account");e.equalTo("user",n),e.equalTo("company",this.company),e.notEqualTo("isDeleted",!0),this.account=await e.first(),this.account?.id&&this.account?.get("bank")&&(this.bankMap=this.account.get("bank")?.[0]||{bank:"",bankcard:"",bankmobile:""},this.verifyResult.bankcard=!0)}onClose(){this.isVisibleChange.emit(!1)}async uploadChange(n,e){console.log(n,e);let t,i,o=n[0];switch(console.log(o),this[e]=o,e){case"idcard_image_front":t={company:this.company,image_url:o},i=await this.novaCloud.api("/apig/idcard/ocr",t),i&&i.cards[0]?.name&&i.cards[0]?.id_card_number?(this.name=i.cards[0].name,this.idcard=i.cards[0].id_card_number,this.sex=i.cards[0].gender,this.idcardData=i.cards[0]):this.message.create("error","未识别到身份信息,请确保身份证照片清晰不反光!");break;case"idcard_image_back":if(t={company:this.company,image_url:o},i=await this.novaCloud.api("/apig/idcard/ocr",t),i&&i.cards[0]?.side&&"back"==i.cards[0].side)return void(this.identity_auth=!0);this.message.create("error","未识别到身份信息,请确保身份证照片清晰不反光!")}}onDeleted(n){switch(this[n]="",n){case"idcard_image_front":this.name="",this.idcard="";break;case"idcard_image_back":this.identity_auth=!1}}authDisabled(){if(!this.verifyOptions?.idcard?.ocr)return!0;return!!(this.name&&this.idcard&&this.identity_auth)}authDisabledStudent(){return!0}async onSubmit(){if(!this.verifyOptions?.idcard?.ocr||this.name&&this.idcard&&this.identity_auth){let n={company:this.company,cardNo:this.idcard,realName:this.name},e=await this.novaCloud.api("/apig/idcard",n);if(console.log(e),e&&0===e?.error_code&&1==e?.result?.isok){let n=Parse.User.current()?.id,e=[];this.idcard_image_front&&e.push(this.idcard_image_front),this.idcard_image_back&&e.push(this.idcard_image_back);let t=new Parse.Query("Profile");t.equalTo("user",n),t.equalTo("company",this.company),t.notEqualTo("isDeleted",!0);let i=await t.first();if(!i?.id){i=new(Parse.Object.extend("Profile"))}i?.set("name",this.name),i?.set("idcard",this.idcard),i?.set("sex",this.sex),i?.set({city:this.idcardData?.city,area:[this.idcardData?.province,this.idcardData?.city,this.idcardData?.district],birthdate:this.idcardData?.birthday}),i?.set("company",{__type:"Pointer",className:"Company",objectId:this.company}),i?.set("user",{__type:"Pointer",className:"_User",objectId:n}),i?.set("attachment",e),i?.set("isCheck",!0),i?.get("type")||i?.set("type","user"),await(i?.save()),this.message.create("success","认证成功"),this.isVisibleChange.emit(!1),await this.novaAccount.getProfile(),this.profile=this.novaAccount.profile,this.verifyResult.idcard=!0}else this.message.create("error","认证失败:请检查身份信息是否正确。")}this.veifyFinishBack()}onChangeDate(n){console.log(n)}mobileStatus(n){return/^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(n)?"":"error"}async onSubimtStudent(){let{studentID:n,mobile:e,school:t,schoolMajor:i,studentType:o,education:a,workUnit:r,workid:l,diploma:d,degreeNumber:s,entrySchool:c,college:p}=this.studentDateil;console.log(this.studentDateil);if(!(n&&e&&t&&this.name))return void this.message.create("error","认证失败:请检查信息填写是否完整。");if(!/^[1][3,4,5,7,8][0-9]{9}$/.test(e))return void this.message.create("error","认证失败:手机号格式错误。");let u=Parse.User.current()?.id,m=new Parse.Query("Profile");m.equalTo("user",u),m.equalTo("company",this.company),m.notEqualTo("isDeleted",!0);let g=await m.first();if(!g?.id){g=new(Parse.Object.extend("Profile"))}g?.set("name",this.name),g?.set("studentID",n),g?.set("mobile",e),g?.set("school",t),g?.set("college",p),g?.set("schoolMajor",i),g?.set("studentType",o),g?.set("education",a),g?.set("workUnit",String(r)),g?.set("workid",l),g?.set("eduImage",this.eduImage),g?.set("diploma",d),g?.set("degreeNumber",s),c&&"在校"!=o&&g?.set("entrySchool",new Date((new Date).setFullYear(c))),g?.set("company",{__type:"Pointer",className:"Company",objectId:this.company}),g?.set("user",{__type:"Pointer",className:"_User",objectId:u}),g?.get("type")||g?.set("type","student"),await(g?.save()),this.message.create("success","认证成功"),this.verifyResult.student=!0,this.isVisibleChange.emit(!1),await this.novaAccount.getProfile(),this.profile=this.novaAccount.profile,this.veifyFinishBack()}cardNoStatus(){return/^([1-9]{1})(\d{15}|\d{18})$/.test(this.bankMap.bankcard)?"":"error"}saveBankAuth(){return!(this.name&&this.idcard&&this.bankMap.bankcard&&this.bankMap.bankmobile)}async onSubimtBank(){if(!this.name||!this.idcard)return void this.message.create("error","请先完成实名或学生认证。");if(!this.bankMap.bankcard||!this.bankMap.bankmobile)return void this.message.create("error","请填写完整信息。");if(!/^([1-9]{1})(\d{15}|\d{18})$/.test(this.bankMap.bankcard))return void this.message.create("error","认证失败:请检查银行卡信息是否正确。");let n={company:this.company,bankcard:this.bankMap.bankcard.replace(/\s/g,""),name:this.name,idcard:this.idcard,mobile:this.bankMap.bankmobile},e=await this.novaCloud.api("/apig/bankcard",n);if(console.log(e),e&&200==e.code&&e?.success&&"一致"==e.data.msg){let n=e.data.bank_info,t=Parse.User.current()?.id,i=new Parse.Query("Account");i.equalTo("user",t),i.equalTo("company",this.company),i.notEqualTo("isDeleted",!0);let o=await i.first();if(!o?.id){o=new(Parse.Object.extend("Profile"))}o?.set("company",{__type:"Pointer",className:"Company",objectId:this.company}),o?.set("user",{__type:"Pointer",className:"_User",objectId:t}),o?.set("bank",[{bank:n.bank,bankcard:this.bankMap.bankcard,bankmobile:this.bankMap.bankmobile,city:n.city}]),await(o?.save());let a=new Parse.Query("Profile");a.equalTo("user",t),a.equalTo("company",this.company),a.notEqualTo("isDeleted",!0),a.select("objectId");let r=await a.first();if(!r?.id){r=new(Parse.Object.extend("Profile"))}r?.set("company",{__type:"Pointer",className:"Company",objectId:this.company}),r?.set("user",{__type:"Pointer",className:"_User",objectId:t}),r?.set("cardtype",n.bank),r?.set("cardnum",this.bankMap.bankcard),r?.set("nativePlace",n.city),await(r?.save()),this.message.create("success","认证成功"),this.verifyResult.bankcard=!0,this.isVisibleChange.emit(!1),this.veifyFinishBack()}else this.message.create("error","认证失败:请检查银行卡信息是否正确。")}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ModalUserVerifyComponent,deps:[{token:i1.HttpClient},{token:i2.NzMessageService},{token:i3.AccountService},{token:i4.AuthService},{token:i5.NovaCloudService},{token:i6.ModalController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"17.3.12",type:ModalUserVerifyComponent,isStandalone:!0,selector:"app-user-verify",inputs:{isVisible:"isVisible",verifyOptions:"verifyOptions"},outputs:{isVisibleChange:"isVisibleChange"},ngImport:i0,template:'\n<ion-content *ngIf="isLoading">\n <div class="page" *ngIf="isLoading">\n <ion-spinner name="crescent" color="primary" style="width:80px;height:80px;"></ion-spinner>\n <ion-label color="primary">正在加载认证组件...</ion-label>\n </div>\n</ion-content>\n\n<ion-content class="ion-padding" *ngIf="!isLoading">\n <ion-segment [(ngModel)]="tab">\n <ion-segment-button *ngIf="verifyOptions?.idcard" value="idcard"><ion-icon name="card-outline"></ion-icon> 实名认证</ion-segment-button>\n <ion-segment-button *ngIf="verifyOptions?.student" value="student"><ion-icon name="school-outline"></ion-icon> 学生认证</ion-segment-button>\n <ion-segment-button *ngIf="verifyOptions?.bankcard" value="bankcard"><ion-icon name="wallet-outline"></ion-icon> 银行卡认证</ion-segment-button>\n </ion-segment>\n\n \x3c!-- <ng-container [ngTemplateOutlet]="rightAvatar"></ng-container> --\x3e\n <ng-container *ngIf="tab==\'idcard\'&&verifyOptions?.idcard">\n <ion-list>\n \x3c!-- 身份证OCR识别 --\x3e\n <ng-container *ngIf="verifyOptions?.idcard?.ocr">\n <ion-item>\n <ion-label><span class="required">*</span> 身份证正面</ion-label>\n <fm-edit-upload\n *ngIf="!idcard_image_front"\n [(file)]="idcard_image_front"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_front\')"\n ></fm-edit-upload>\n <ion-img *ngIf="idcard_image_front" [src]="idcard_image_front"></ion-img>\n </ion-item>\n <ion-item>\n <ion-label><span class="required">*</span> 身份证国徽面</ion-label>\n <fm-edit-upload\n *ngIf="!idcard_image_back"\n [(file)]="idcard_image_back"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_back\')"\n ></fm-edit-upload>\n <ion-img *ngIf="idcard_image_back" [src]="idcard_image_back"></ion-img>\n </ion-item>\n </ng-container>\n\n \x3c!-- 身份证手动输入 --\x3e\n <ng-container>\n <ion-item>\n @if (profile?.get(\'isCheck\')){\n <ion-input [ngModel]="name | secretText" label="姓名" [readonly]="true"></ion-input>\n }@else{\n <ion-input [(ngModel)]="name" label="姓名" [readonly]="verifyOptions?.idcard?.ocr" [placeholder]="verifyOptions?.idcard?.ocr?\'请上传身份证\':\'输入姓名\'"></ion-input>\n }\n </ion-item>\n\n <ion-item>\n @if (profile?.get(\'isCheck\')){\n <ion-input [ngModel]="idcard | secretText:\'idcard\'" label="身份证号" [readonly]="true"></ion-input>\n }@else{\n <ion-input [(ngModel)]="idcard" label="身份证号" [readonly]="verifyOptions?.idcard?.ocr" [placeholder]="verifyOptions?.idcard?.ocr?\'自动识别\':\'输入身份证号\'"></ion-input>\n }\n </ion-item>\n </ng-container>\n\n \x3c!-- 身份证认证状态 --\x3e\n <ion-button color="success" *ngIf="profile?.get(\'isCheck\'); else elseIdcard" expand="block">已实名</ion-button>\n <ng-template #elseIdcard>\n <ion-button color="primary" (click)="onSubmit()" [disabled]="!authDisabled()" expand="block">提交认证</ion-button>\n </ng-template>\n \n </ion-list>\n\n \x3c!-- <div class="tab-content">\n <div nz-row>\n <div nz-col nzSpan="12" class="li">\n <div class="label"><span>*</span> 身份证正面</div>\n <fm-edit-upload\n *ngIf="!idcard_image_front"\n [(file)]="idcard_image_front"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_front\')"\n ></fm-edit-upload>\n <div class="img-view" *ngIf="idcard_image_front">\n <span\n *ngIf="!profile?.get(\'isCheck\')"\n nz-icon\n nzType="close"\n nzTheme="outline"\n (click)="onDeleted(\'idcard_image_front\')"\n ></span>\n <img\n nz-image\n width="80px"\n height="80px"\n nzSrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"\n [nzSrc]="idcard_image_front"\n alt="身份证正面"\n />\n </div>\n </div>\n <div nz-col nzSpan="12" class="li">\n <div class="label"><span>*</span> 身份证国徽面</div>\n <fm-edit-upload\n *ngIf="!idcard_image_back"\n [(file)]="idcard_image_back"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_back\')"\n ></fm-edit-upload>\n <div class="img-view" *ngIf="idcard_image_back">\n <span\n *ngIf="!profile?.get(\'isCheck\')"\n nz-icon\n nzType="close"\n nzTheme="outline"\n (click)="onDeleted(\'idcard_image_back\')"\n ></span>\n <img\n nz-image\n width="80px"\n height="80px"\n nzSrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"\n [nzSrc]="idcard_image_back"\n alt="身份证国徽面"\n />\n </div>\n </div>\n </div>\n <div class="input-view">\n <nz-input-group nzAddOnBefore="姓名">\n <input\n type="text"\n nz-input\n [(ngModel)]="name"\n placeholder="请上传身份证"\n [disabled]="true"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="身份证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="idcard"\n placeholder="请上传身份证"\n [disabled]="true"\n />\n </nz-input-group>\n </div>\n <div nz-row>\n <button\n nz-button\n *ngIf="profile && profile?.get(\'isCheck\'); else elseTemplate"\n nzType="primary"\n nzBlock\n [disabled]="true"\n >\n 已实名\n </button>\n <ng-template #elseTemplate>\n <button\n nz-button\n nzType="primary"\n nzBlock\n (click)="onSubmit()"\n [disabled]="!authDisabled()"\n >\n 确定\n </button>\n </ng-template>\n </div>\n </div> --\x3e\n\n </ng-container>\n\n <ng-container *ngIf="tab==\'student\'&&verifyOptions?.student">\n \n \n <div class="info">\n <div class="input-view">\n <nz-input-group nzAddOnBefore="姓名">\n <input\n type="text"\n nz-input\n [(ngModel)]="name"\n placeholder="请先完成实名认证"\n [disabled]="profile && profile?.get(\'isCheck\')"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="学信网账号">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.studentID"\n placeholder="请填写学信网账号"\n [nzStatus]="studentDateil.studentID != \'\' ? \'\' : \'error\'"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="手机号">\n <input\n type="text"\n nz-input\n maxlength="11"\n [(ngModel)]="studentDateil.mobile"\n placeholder="请填写手机号"\n [nzStatus]="mobileStatus(studentDateil.mobile)"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="学校名称">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.school"\n placeholder="请填写学校名称"\n [nzStatus]="studentDateil.school != \'\' ? \'\' : \'error\'"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="所属学院">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.college"\n placeholder="请填写所属学院"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="专业名称">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.schoolMajor"\n placeholder="请填写专业名称"\n />\n </nz-input-group>\n </div>\n <div class="info-row">\n <div class="info-row-lable">是否在校</div>\n <nz-radio-group [(ngModel)]="studentDateil.studentType">\n <label nz-radio nzValue="在校">是</label>\n <label nz-radio nzValue="毕业">否</label>\n </nz-radio-group>\n </div>\n <ng-container\n *ngIf="studentDateil.studentType == \'在校\'; else template1"\n >\n <div class="info-row">\n <div class="info-row-lable">阶段</div>\n <nz-radio-group [(ngModel)]="studentDateil.education">\n <label nz-radio nzValue="大专">大专</label>\n <label nz-radio nzValue="本科">本科</label>\n <label nz-radio nzValue="硕士">硕士</label>\n <label nz-radio nzValue="博士">博士</label>\n </nz-radio-group>\n </div>\n <div class="info-row">\n <div class="info-row-lable info-select">年级:</div>\n <ion-select\n interface="action-sheet"\n cancel-text="关闭"\n [(ngModel)]="studentDateil.workUnit"\n placeholder="点击选择"\n >\n <ng-container *ngFor="let item of options">\n <ion-select-option [value]="item"\n >{{ item }}级</ion-select-option\n >\n </ng-container>\n </ion-select>\n </div>\n <nz-input-group nzAddOnBefore="学生证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.diploma"\n placeholder="请填写学生证号"\n />\n </nz-input-group>\n <div nz-row style="margin: 10px 0">\n <div nz-col nzSpan="12" class="li">\n <div class="label">\n <span style="color: red">*</span> 学生证照片\n </div>\n <fm-edit-upload\n *ngIf="!eduImage"\n [(file)]="eduImage"\n [company]="company"\n (fileListChange)="uploadChange($event, \'eduImage\')"\n ></fm-edit-upload>\n <div class="img-view" *ngIf="eduImage">\n <span\n *ngIf="!profile?.get(\'isCross\')"\n nz-icon\n nzType="close"\n nzTheme="outline"\n (click)="onDeleted(\'eduImage\')"\n ></span>\n <img\n nz-image\n width="100px"\n height="100px"\n nzSrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"\n [nzSrc]="eduImage"\n alt="学生证照片"\n />\n </div>\n </div>\n </div>\n </ng-container>\n <ng-template #template1>\n <div class="info-row">\n <div class="info-row-lable">最高学历</div>\n <nz-radio-group [(ngModel)]="studentDateil.education">\n <label nz-radio nzValue="大专">大专</label>\n <label nz-radio nzValue="学士">学士</label>\n <label nz-radio nzValue="硕士">硕士</label>\n <label nz-radio nzValue="博士">博士</label>\n </nz-radio-group>\n </div>\n <div class="info-row">\n <div class="info-row-lable info-select">毕业年份:</div>\n <ion-select\n interface="action-sheet"\n cancel-text="关闭"\n [(ngModel)]="studentDateil.entrySchool"\n placeholder="点击选择"\n >\n <ng-container *ngFor="let item of options">\n <ion-select-option [value]="item"\n >{{ item }}年</ion-select-option\n >\n </ng-container>\n </ion-select>\n </div>\n <nz-input-group nzAddOnBefore="毕业证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.degreeNumber"\n placeholder="请填写毕业证号"\n />\n </nz-input-group>\n </ng-template>\n <div nz-row style="margin: 10px auto">\n <button\n nz-button\n nzType="primary"\n nzBlock\n (click)="onSubimtStudent()"\n [disabled]="false"\n >\n 确定\n </button>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf="tab==\'bankcard\'&&verifyOptions?.bankcard">\n \n \n <div class="info">\n <div class="input-view">\n <nz-input-group nzAddOnBefore="姓名">\n <input\n type="text"\n nz-input\n [(ngModel)]="name"\n placeholder="请先完成实名认证"\n [disabled]="true"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="身份证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="idcard"\n placeholder="请先完成实名认证"\n [disabled]="true"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="银行卡账号">\n <input\n type="text"\n nz-input\n [(ngModel)]="bankMap.bankcard"\n placeholder="请填写银行卡账号"\n [nzStatus]="cardNoStatus()"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="银行卡预留手机号">\n <input\n type="text"\n nz-input\n [(ngModel)]="bankMap.bankmobile"\n maxlength="11"\n placeholder="请填写银行卡预留手机号"\n [nzStatus]="mobileStatus(bankMap.bankmobile)"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="开户行">\n <input\n type="text"\n nz-input\n [ngModel]="bankMap.bank"\n maxlength="11"\n placeholder="认证成功后自动识别"\n [disabled]="true"\n />\n </nz-input-group>\n \x3c!-- <div class="info-row">\n <div class="info-row-lable info-select">开户行:</div>\n <ion-select\n interface="action-sheet"\n cancel-text="关闭"\n [(ngModel)]="bankMap.bank"\n placeholder="点击选择"\n >\n <ng-container *ngFor="let item of bankOptions">\n <ion-select-option [value]="item"\n >{{ item }}</ion-select-option\n >\n </ng-container>\n </ion-select>\n </div> --\x3e\n </div>\n <div nz-row>\n <button\n nz-button\n nzType="primary"\n nzBlock\n (click)="onSubimtBank()"\n [disabled]="saveBankAuth()"\n >\n 确定\n </button>\n </div>\n </div>\n </ng-container>\n\n\n\n</ion-content>\n',styles:[".required{color:red}.page{display:flex;justify-content:center;align-items:center;flex-direction:column}.tab-content{width:80%;align-items:center;justify-content:center;margin:auto}.tab-content .li{display:flex;flex-direction:column;align-items:center}.tab-content .li .label{margin-bottom:10px}.tab-content .li .label span{color:red}.tab-content .li .img-view{position:relative}.tab-content .li .img-view span{position:absolute;right:-10px;top:0}.input-view{margin:10px auto}.info .info-row{display:flex;align-items:center;border:1px solid #d9d9d9;padding:6px 0}.info .info-row .info-row-lable{padding:0 10px;flex-shrink:0}.info .info-row .info-select{min-width:70px}.info .img-view{position:relative;width:100px}.info .img-view span{position:absolute;right:-10px;top:0}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i7.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:i7.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:FormsModule},{kind:"directive",type:i8.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i8.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i8.MaxLengthValidator,selector:"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]",inputs:["maxlength"]},{kind:"directive",type:i8.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"ngmodule",type:ReactiveFormsModule},{kind:"ngmodule",type:NzInputModule},{kind:"directive",type:i9.NzInputDirective,selector:"input[nz-input],textarea[nz-input]",inputs:["nzBorderless","nzSize","nzStepperless","nzStatus","disabled"],exportAs:["nzInput"]},{kind:"component",type:i9.NzInputGroupComponent,selector:"nz-input-group",inputs:["nzAddOnBeforeIcon","nzAddOnAfterIcon","nzPrefixIcon","nzSuffixIcon","nzAddOnBefore","nzAddOnAfter","nzPrefix","nzStatus","nzSuffix","nzSize","nzSearch","nzCompact"],exportAs:["nzInputGroup"]},{kind:"ngmodule",type:NzIconModule},{kind:"directive",type:i10.NzIconDirective,selector:"[nz-icon]",inputs:["nzSpin","nzRotate","nzType","nzTheme","nzTwotoneColor","nzIconfont"],exportAs:["nzIcon"]},{kind:"ngmodule",type:NzTabsModule},{kind:"ngmodule",type:NzButtonModule},{kind:"component",type:i11.NzButtonComponent,selector:"button[nz-button], a[nz-button]",inputs:["nzBlock","nzGhost","nzSearch","nzLoading","nzDanger","disabled","tabIndex","nzType","nzShape","nzSize"],exportAs:["nzButton"]},{kind:"directive",type:i12.ɵNzTransitionPatchDirective,selector:"[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group",inputs:["hidden"]},{kind:"directive",type:i13.NzWaveDirective,selector:'[nz-wave],button[nz-button]:not([nzType="link"]):not([nzType="text"])',inputs:["nzWaveExtraNode"],exportAs:["nzWave"]},{kind:"ngmodule",type:NzModalModule},{kind:"ngmodule",type:NzGridModule},{kind:"directive",type:i14.NzColDirective,selector:"[nz-col],nz-col,nz-form-control,nz-form-label",inputs:["nzFlex","nzSpan","nzOrder","nzOffset","nzPush","nzPull","nzXs","nzSm","nzMd","nzLg","nzXl","nzXXl"],exportAs:["nzCol"]},{kind:"directive",type:i14.NzRowDirective,selector:"[nz-row],nz-row,nz-form-item",inputs:["nzAlign","nzJustify","nzGutter"],exportAs:["nzRow"]},{kind:"ngmodule",type:NzRadioModule},{kind:"component",type:i15.NzRadioComponent,selector:"[nz-radio],[nz-radio-button]",inputs:["nzValue","nzDisabled","nzAutoFocus","nz-radio-button"],exportAs:["nzRadio"]},{kind:"component",type:i15.NzRadioGroupComponent,selector:"nz-radio-group",inputs:["nzDisabled","nzButtonStyle","nzSize","nzName"],exportAs:["nzRadioGroup"]},{kind:"ngmodule",type:NzImageModule},{kind:"directive",type:i16.NzImageDirective,selector:"img[nz-image]",inputs:["nzSrc","nzSrcset","nzDisablePreview","nzFallback","nzPlaceholder","nzScaleStep"],exportAs:["nzImage"]},{kind:"ngmodule",type:EditUploadModule},{kind:"component",type:i17.EditUploadComponent,selector:"fm-edit-upload",inputs:["files","dragdrop","multi","max_file_size","type","avatarType","company","file","fileList","path"],outputs:["filesChange","fileChange","fileListChange"]},{kind:"component",type:IonContent,selector:"ion-content",inputs:["color","fixedSlotPlacement","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:IonSegment,selector:"ion-segment",inputs:["color","disabled","mode","scrollable","selectOnFocus","swipeGesture","value"]},{kind:"component",type:IonSegmentButton,selector:"ion-segment-button",inputs:["contentId","disabled","layout","mode","type","value"]},{kind:"component",type:IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"component",type:IonImg,selector:"ion-img",inputs:["alt","src"]},{kind:"component",type:IonSpinner,selector:"ion-spinner",inputs:["color","duration","name","paused"]},{kind:"component",type:IonList,selector:"ion-list",inputs:["inset","lines","mode"]},{kind:"component",type:IonItem,selector:"ion-item",inputs:["button","color","detail","detailIcon","disabled","download","href","lines","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:IonInput,selector:"ion-input",inputs:["accept","autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearOnEdit","color","counter","counterFormatter","debounce","disabled","enterkeyhint","errorText","fill","helperText","inputmode","label","labelPlacement","max","maxlength","min","minlength","mode","multiple","name","pattern","placeholder","readonly","required","shape","size","spellcheck","step","type","value"]},{kind:"component",type:IonButton,selector:"ion-button",inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]},{kind:"component",type:IonSelect,selector:"ion-select",inputs:["cancelText","color","compareWith","disabled","errorText","expandedIcon","fill","helperText","interface","interfaceOptions","justify","label","labelPlacement","mode","multiple","name","okText","placeholder","selectedText","shape","toggleIcon","value"]},{kind:"component",type:IonSelectOption,selector:"ion-select-option",inputs:["disabled","value"]},{kind:"pipe",type:SecretTextPipe,name:"secretText"}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ModalUserVerifyComponent,decorators:[{type:Component,args:[{selector:"app-user-verify",standalone:!0,imports:[CommonModule,FormsModule,ReactiveFormsModule,NzInputModule,NzIconModule,NzTabsModule,NzButtonModule,NzModalModule,NzGridModule,NzRadioModule,NzImageModule,EditUploadModule,IonContent,IonSegment,IonSegmentButton,IonLabel,IonIcon,IonImg,IonSpinner,IonList,IonItem,IonInput,IonButton,IonDatetime,IonDatetimeButton,IonSelect,IonSelectOption,SecretTextPipe],template:'\n<ion-content *ngIf="isLoading">\n <div class="page" *ngIf="isLoading">\n <ion-spinner name="crescent" color="primary" style="width:80px;height:80px;"></ion-spinner>\n <ion-label color="primary">正在加载认证组件...</ion-label>\n </div>\n</ion-content>\n\n<ion-content class="ion-padding" *ngIf="!isLoading">\n <ion-segment [(ngModel)]="tab">\n <ion-segment-button *ngIf="verifyOptions?.idcard" value="idcard"><ion-icon name="card-outline"></ion-icon> 实名认证</ion-segment-button>\n <ion-segment-button *ngIf="verifyOptions?.student" value="student"><ion-icon name="school-outline"></ion-icon> 学生认证</ion-segment-button>\n <ion-segment-button *ngIf="verifyOptions?.bankcard" value="bankcard"><ion-icon name="wallet-outline"></ion-icon> 银行卡认证</ion-segment-button>\n </ion-segment>\n\n \x3c!-- <ng-container [ngTemplateOutlet]="rightAvatar"></ng-container> --\x3e\n <ng-container *ngIf="tab==\'idcard\'&&verifyOptions?.idcard">\n <ion-list>\n \x3c!-- 身份证OCR识别 --\x3e\n <ng-container *ngIf="verifyOptions?.idcard?.ocr">\n <ion-item>\n <ion-label><span class="required">*</span> 身份证正面</ion-label>\n <fm-edit-upload\n *ngIf="!idcard_image_front"\n [(file)]="idcard_image_front"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_front\')"\n ></fm-edit-upload>\n <ion-img *ngIf="idcard_image_front" [src]="idcard_image_front"></ion-img>\n </ion-item>\n <ion-item>\n <ion-label><span class="required">*</span> 身份证国徽面</ion-label>\n <fm-edit-upload\n *ngIf="!idcard_image_back"\n [(file)]="idcard_image_back"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_back\')"\n ></fm-edit-upload>\n <ion-img *ngIf="idcard_image_back" [src]="idcard_image_back"></ion-img>\n </ion-item>\n </ng-container>\n\n \x3c!-- 身份证手动输入 --\x3e\n <ng-container>\n <ion-item>\n @if (profile?.get(\'isCheck\')){\n <ion-input [ngModel]="name | secretText" label="姓名" [readonly]="true"></ion-input>\n }@else{\n <ion-input [(ngModel)]="name" label="姓名" [readonly]="verifyOptions?.idcard?.ocr" [placeholder]="verifyOptions?.idcard?.ocr?\'请上传身份证\':\'输入姓名\'"></ion-input>\n }\n </ion-item>\n\n <ion-item>\n @if (profile?.get(\'isCheck\')){\n <ion-input [ngModel]="idcard | secretText:\'idcard\'" label="身份证号" [readonly]="true"></ion-input>\n }@else{\n <ion-input [(ngModel)]="idcard" label="身份证号" [readonly]="verifyOptions?.idcard?.ocr" [placeholder]="verifyOptions?.idcard?.ocr?\'自动识别\':\'输入身份证号\'"></ion-input>\n }\n </ion-item>\n </ng-container>\n\n \x3c!-- 身份证认证状态 --\x3e\n <ion-button color="success" *ngIf="profile?.get(\'isCheck\'); else elseIdcard" expand="block">已实名</ion-button>\n <ng-template #elseIdcard>\n <ion-button color="primary" (click)="onSubmit()" [disabled]="!authDisabled()" expand="block">提交认证</ion-button>\n </ng-template>\n \n </ion-list>\n\n \x3c!-- <div class="tab-content">\n <div nz-row>\n <div nz-col nzSpan="12" class="li">\n <div class="label"><span>*</span> 身份证正面</div>\n <fm-edit-upload\n *ngIf="!idcard_image_front"\n [(file)]="idcard_image_front"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_front\')"\n ></fm-edit-upload>\n <div class="img-view" *ngIf="idcard_image_front">\n <span\n *ngIf="!profile?.get(\'isCheck\')"\n nz-icon\n nzType="close"\n nzTheme="outline"\n (click)="onDeleted(\'idcard_image_front\')"\n ></span>\n <img\n nz-image\n width="80px"\n height="80px"\n nzSrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"\n [nzSrc]="idcard_image_front"\n alt="身份证正面"\n />\n </div>\n </div>\n <div nz-col nzSpan="12" class="li">\n <div class="label"><span>*</span> 身份证国徽面</div>\n <fm-edit-upload\n *ngIf="!idcard_image_back"\n [(file)]="idcard_image_back"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_back\')"\n ></fm-edit-upload>\n <div class="img-view" *ngIf="idcard_image_back">\n <span\n *ngIf="!profile?.get(\'isCheck\')"\n nz-icon\n nzType="close"\n nzTheme="outline"\n (click)="onDeleted(\'idcard_image_back\')"\n ></span>\n <img\n nz-image\n width="80px"\n height="80px"\n nzSrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"\n [nzSrc]="idcard_image_back"\n alt="身份证国徽面"\n />\n </div>\n </div>\n </div>\n <div class="input-view">\n <nz-input-group nzAddOnBefore="姓名">\n <input\n type="text"\n nz-input\n [(ngModel)]="name"\n placeholder="请上传身份证"\n [disabled]="true"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="身份证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="idcard"\n placeholder="请上传身份证"\n [disabled]="true"\n />\n </nz-input-group>\n </div>\n <div nz-row>\n <button\n nz-button\n *ngIf="profile && profile?.get(\'isCheck\'); else elseTemplate"\n nzType="primary"\n nzBlock\n [disabled]="true"\n >\n 已实名\n </button>\n <ng-template #elseTemplate>\n <button\n nz-button\n nzType="primary"\n nzBlock\n (click)="onSubmit()"\n [disabled]="!authDisabled()"\n >\n 确定\n </button>\n </ng-template>\n </div>\n </div> --\x3e\n\n </ng-container>\n\n <ng-container *ngIf="tab==\'student\'&&verifyOptions?.student">\n \n \n <div class="info">\n <div class="input-view">\n <nz-input-group nzAddOnBefore="姓名">\n <input\n type="text"\n nz-input\n [(ngModel)]="name"\n placeholder="请先完成实名认证"\n [disabled]="profile && profile?.get(\'isCheck\')"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="学信网账号">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.studentID"\n placeholder="请填写学信网账号"\n [nzStatus]="studentDateil.studentID != \'\' ? \'\' : \'error\'"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="手机号">\n <input\n type="text"\n nz-input\n maxlength="11"\n [(ngModel)]="studentDateil.mobile"\n placeholder="请填写手机号"\n [nzStatus]="mobileStatus(studentDateil.mobile)"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="学校名称">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.school"\n placeholder="请填写学校名称"\n [nzStatus]="studentDateil.school != \'\' ? \'\' : \'error\'"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="所属学院">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.college"\n placeholder="请填写所属学院"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="专业名称">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.schoolMajor"\n placeholder="请填写专业名称"\n />\n </nz-input-group>\n </div>\n <div class="info-row">\n <div class="info-row-lable">是否在校</div>\n <nz-radio-group [(ngModel)]="studentDateil.studentType">\n <label nz-radio nzValue="在校">是</label>\n <label nz-radio nzValue="毕业">否</label>\n </nz-radio-group>\n </div>\n <ng-container\n *ngIf="studentDateil.studentType == \'在校\'; else template1"\n >\n <div class="info-row">\n <div class="info-row-lable">阶段</div>\n <nz-radio-group [(ngModel)]="studentDateil.education">\n <label nz-radio nzValue="大专">大专</label>\n <label nz-radio nzValue="本科">本科</label>\n <label nz-radio nzValue="硕士">硕士</label>\n <label nz-radio nzValue="博士">博士</label>\n </nz-radio-group>\n </div>\n <div class="info-row">\n <div class="info-row-lable info-select">年级:</div>\n <ion-select\n interface="action-sheet"\n cancel-text="关闭"\n [(ngModel)]="studentDateil.workUnit"\n placeholder="点击选择"\n >\n <ng-container *ngFor="let item of options">\n <ion-select-option [value]="item"\n >{{ item }}级</ion-select-option\n >\n </ng-container>\n </ion-select>\n </div>\n <nz-input-group nzAddOnBefore="学生证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.diploma"\n placeholder="请填写学生证号"\n />\n </nz-input-group>\n <div nz-row style="margin: 10px 0">\n <div nz-col nzSpan="12" class="li">\n <div class="label">\n <span style="color: red">*</span> 学生证照片\n </div>\n <fm-edit-upload\n *ngIf="!eduImage"\n [(file)]="eduImage"\n [company]="company"\n (fileListChange)="uploadChange($event, \'eduImage\')"\n ></fm-edit-upload>\n <div class="img-view" *ngIf="eduImage">\n <span\n *ngIf="!profile?.get(\'isCross\')"\n nz-icon\n nzType="close"\n nzTheme="outline"\n (click)="onDeleted(\'eduImage\')"\n ></span>\n <img\n nz-image\n width="100px"\n height="100px"\n nzSrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"\n [nzSrc]="eduImage"\n alt="学生证照片"\n />\n </div>\n </div>\n </div>\n </ng-container>\n <ng-template #template1>\n <div class="info-row">\n <div class="info-row-lable">最高学历</div>\n <nz-radio-group [(ngModel)]="studentDateil.education">\n <label nz-radio nzValue="大专">大专</label>\n <label nz-radio nzValue="学士">学士</label>\n <label nz-radio nzValue="硕士">硕士</label>\n <label nz-radio nzValue="博士">博士</label>\n </nz-radio-group>\n </div>\n <div class="info-row">\n <div class="info-row-lable info-select">毕业年份:</div>\n <ion-select\n interface="action-sheet"\n cancel-text="关闭"\n [(ngModel)]="studentDateil.entrySchool"\n placeholder="点击选择"\n >\n <ng-container *ngFor="let item of options">\n <ion-select-option [value]="item"\n >{{ item }}年</ion-select-option\n >\n </ng-container>\n </ion-select>\n </div>\n <nz-input-group nzAddOnBefore="毕业证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.degreeNumber"\n placeholder="请填写毕业证号"\n />\n </nz-input-group>\n </ng-template>\n <div nz-row style="margin: 10px auto">\n <button\n nz-button\n nzType="primary"\n nzBlock\n (click)="onSubimtStudent()"\n [disabled]="false"\n >\n 确定\n </button>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf="tab==\'bankcard\'&&verifyOptions?.bankcard">\n \n \n <div class="info">\n <div class="input-view">\n <nz-input-group nzAddOnBefore="姓名">\n <input\n type="text"\n nz-input\n [(ngModel)]="name"\n placeholder="请先完成实名认证"\n [disabled]="true"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="身份证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="idcard"\n placeholder="请先完成实名认证"\n [disabled]="true"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="银行卡账号">\n <input\n type="text"\n nz-input\n [(ngModel)]="bankMap.bankcard"\n placeholder="请填写银行卡账号"\n [nzStatus]="cardNoStatus()"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="银行卡预留手机号">\n <input\n type="text"\n nz-input\n [(ngModel)]="bankMap.bankmobile"\n maxlength="11"\n placeholder="请填写银行卡预留手机号"\n [nzStatus]="mobileStatus(bankMap.bankmobile)"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="开户行">\n <input\n type="text"\n nz-input\n [ngModel]="bankMap.bank"\n maxlength="11"\n placeholder="认证成功后自动识别"\n [disabled]="true"\n />\n </nz-input-group>\n \x3c!-- <div class="info-row">\n <div class="info-row-lable info-select">开户行:</div>\n <ion-select\n interface="action-sheet"\n cancel-text="关闭"\n [(ngModel)]="bankMap.bank"\n placeholder="点击选择"\n >\n <ng-container *ngFor="let item of bankOptions">\n <ion-select-option [value]="item"\n >{{ item }}</ion-select-option\n >\n </ng-container>\n </ion-select>\n </div> --\x3e\n </div>\n <div nz-row>\n <button\n nz-button\n nzType="primary"\n nzBlock\n (click)="onSubimtBank()"\n [disabled]="saveBankAuth()"\n >\n 确定\n </button>\n </div>\n </div>\n </ng-container>\n\n\n\n</ion-content>\n',styles:[".required{color:red}.page{display:flex;justify-content:center;align-items:center;flex-direction:column}.tab-content{width:80%;align-items:center;justify-content:center;margin:auto}.tab-content .li{display:flex;flex-direction:column;align-items:center}.tab-content .li .label{margin-bottom:10px}.tab-content .li .label span{color:red}.tab-content .li .img-view{position:relative}.tab-content .li .img-view span{position:absolute;right:-10px;top:0}.input-view{margin:10px auto}.info .info-row{display:flex;align-items:center;border:1px solid #d9d9d9;padding:6px 0}.info .info-row .info-row-lable{padding:0 10px;flex-shrink:0}.info .info-row .info-select{min-width:70px}.info .img-view{position:relative;width:100px}.info .img-view span{position:absolute;right:-10px;top:0}\n"]}]}],ctorParameters:()=>[{type:i1.HttpClient},{type:i2.NzMessageService},{type:i3.AccountService},{type:i4.AuthService},{type:i5.NovaCloudService},{type:i6.ModalController}],propDecorators:{isVisible:[{type:Input}],isVisibleChange:[{type:Output}],verifyOptions:[{type:Input}]}});export async function openUserVerifyModal(n,e,t){let i=t&&Object.keys(t)?.[0]||"idcard";null==t?.autoFinish&&t&&(t.autoFinish=!0);let o=await n.create({component:ModalUserVerifyComponent,componentProps:{verifyOptions:t,tab:i,onBreakPointSet:()=>{o?.setCurrentBreakpoint(.75)}},breakpoints:[.35,.75,1],initialBreakpoint:.35});o.present();let{data:a,role:r}=await o.onWillDismiss();if("confirm"==r)return a}
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9wZXJzb24vbW9kYWwtdXNlci12ZXJpZnkvdXNlci12ZXJpZnkuY29tcG9uZW50Lm1qcw==`
|
|
10
|
+
|