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,27 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
constructor(authProfileServ,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
canActivate(route, state) {
|
|
13
|
-
// 当前路由url
|
|
14
|
-
let url = state.url;
|
|
15
|
-
// 调用checkLogin检查是否登录
|
|
16
|
-
return this.authProfileServ.checkProfile(url);
|
|
17
|
-
}
|
|
18
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthProfileGuard, deps: [{ token: i1.AuthProfileService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
19
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthProfileGuard, providedIn: 'root' }); }
|
|
20
|
-
}
|
|
21
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthProfileGuard, decorators: [{
|
|
22
|
-
type: Injectable,
|
|
23
|
-
args: [{
|
|
24
|
-
providedIn: 'root'
|
|
25
|
-
}]
|
|
26
|
-
}], ctorParameters: () => [{ type: i1.AuthProfileService }, { type: i2.Router }] });
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1wcm9maWxlLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi91c2VyL3Byb2ZpbGUvYXV0aC1wcm9maWxlLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBOzs7O0FBTTNELE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFBbUIsZUFBbUMsRUFBUyxNQUFjO1FBQTFELG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBQ2pGLFdBQVcsQ0FDVCxLQUE2QixFQUM3QixLQUEwQjtRQUN4QixVQUFVO1FBQ1YsSUFBSSxHQUFHLEdBQVcsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUM1QixxQkFBcUI7UUFDckIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDOytHQVRVLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTs7NEZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyU3RhdGVTbmFwc2hvdCwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEF1dGhQcm9maWxlU2VydmljZSB9IGZyb20gJy4vYXV0aC1wcm9maWxlLnNlcnZpY2UnXHJcbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhQcm9maWxlR3VhcmQgIHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgYXV0aFByb2ZpbGVTZXJ2OiBBdXRoUHJvZmlsZVNlcnZpY2UsIHB1YmxpYyByb3V0ZXI6IFJvdXRlcikge31cclxuICBjYW5BY3RpdmF0ZShcclxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+IHwgYm9vbGVhbiB8IFVybFRyZWUge1xyXG4gICAgICAvLyDlvZPliY3ot6/nlLF1cmxcclxuICAgICAgbGV0IHVybDogc3RyaW5nID0gc3RhdGUudXJsO1xyXG4gICAgICAvLyDosIPnlKhjaGVja0xvZ2lu5qOA5p+l5piv5ZCm55m75b2VXHJcbiAgICAgIHJldHVybiB0aGlzLmF1dGhQcm9maWxlU2Vydi5jaGVja1Byb2ZpbGUodXJsKTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
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/user/profile/auth-profile.guard.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Injectable}from"@angular/core";import{Router}from"@angular/router";import{AuthProfileService}from"./auth-profile.service";import{FmodeParse}from"@fmode/parse";import*as i0 from"@angular/core";import*as i1 from"./auth-profile.service";import*as i2 from"@angular/router";const Parse=FmodeParse.with("nova");export class AuthProfileGuard{constructor(r,e){this.authProfileServ=r,this.router=e}canActivate(r,e){let t=e.url;return this.authProfileServ.checkProfile(t)}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AuthProfileGuard,deps:[{token:i1.AuthProfileService},{token:i2.Router}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AuthProfileGuard,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AuthProfileGuard,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.AuthProfileService},{type:i2.Router}]});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL3Byb2ZpbGUvYXV0aC1wcm9maWxlLmd1YXJkLm1qcw==`
|
|
10
|
+
|
|
@@ -1,122 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
set profileId(v) {
|
|
13
|
-
this._profileId = v;
|
|
14
|
-
localStorage.setItem("Parse/ProfileId", v);
|
|
15
|
-
}
|
|
16
|
-
get profilePointer() {
|
|
17
|
-
return { __type: "Pointer", className: "Profile", objectId: this.companyId };
|
|
18
|
-
}
|
|
19
|
-
get companyId() {
|
|
20
|
-
if (this._companyId)
|
|
21
|
-
return this._companyId;
|
|
22
|
-
return localStorage.getItem("Parse/CompanyId");
|
|
23
|
-
}
|
|
24
|
-
set companyId(v) {
|
|
25
|
-
this._companyId = v;
|
|
26
|
-
localStorage.setItem("Parse/CompanyId", v);
|
|
27
|
-
}
|
|
28
|
-
get companyPointer() {
|
|
29
|
-
return { __type: "Pointer", className: "company", objectId: this.companyId };
|
|
30
|
-
}
|
|
31
|
-
get user() {
|
|
32
|
-
return this._user || Parse.User.current();
|
|
33
|
-
}
|
|
34
|
-
set user(v) {
|
|
35
|
-
this._user = v;
|
|
36
|
-
}
|
|
37
|
-
constructor(router) {
|
|
38
|
-
this.router = router;
|
|
39
|
-
this.user = Parse.User.current();
|
|
40
|
-
}
|
|
41
|
-
async getProfile() {
|
|
42
|
-
if (this.profile?.id) {
|
|
43
|
-
return this.profile;
|
|
44
|
-
}
|
|
45
|
-
if (this.profileId) {
|
|
46
|
-
let query = new Parse.Query("Profile");
|
|
47
|
-
query.include("company");
|
|
48
|
-
this.profile = await query.get(this.profileId);
|
|
49
|
-
return this.profile;
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
return this.profile;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
async bindProfile(profile) {
|
|
56
|
-
this.profile = profile;
|
|
57
|
-
this.profileId = profile.id;
|
|
58
|
-
if (profile?.get("company")?.id) {
|
|
59
|
-
this.companyId = profile?.get("company")?.id;
|
|
60
|
-
}
|
|
61
|
-
console.log(profile, this.user);
|
|
62
|
-
this.profile.set("user", this.user?.toPointer());
|
|
63
|
-
await this.profile.save();
|
|
64
|
-
console.log(localStorage.getItem("homePath"));
|
|
65
|
-
console.log(profile?.get("company")?.get("rootPage"));
|
|
66
|
-
let url = localStorage.getItem("homePath") || profile?.get("company")?.get("rootPage") || this.redirectUrl || "/";
|
|
67
|
-
url = decodeURIComponent(url);
|
|
68
|
-
this.router.navigate([url]);
|
|
69
|
-
}
|
|
70
|
-
async checkProfile(url) {
|
|
71
|
-
// 如果已登录,直接跳转当前路由 跳出该函数
|
|
72
|
-
let profile = this.profile;
|
|
73
|
-
if (profile?.id) {
|
|
74
|
-
this.setCurrentProfileLocalStorage(profile);
|
|
75
|
-
return true;
|
|
76
|
-
}
|
|
77
|
-
// 若已登录,但未加载profile则进行加载
|
|
78
|
-
if (this.profileId) {
|
|
79
|
-
let query = new Parse.Query("Profile");
|
|
80
|
-
query.include("company");
|
|
81
|
-
profile = await query.get(this.profileId);
|
|
82
|
-
if (profile?.id) {
|
|
83
|
-
this.profile = profile;
|
|
84
|
-
this.setCurrentProfileLocalStorage(profile);
|
|
85
|
-
}
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
// 否则重定向到login页面
|
|
89
|
-
// console.log(this.authService.isLoggedIn)
|
|
90
|
-
this.redirectUrl = url;
|
|
91
|
-
this.router.navigate(['/profile/bind']);
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
// 选择员工身份后,更新帐套信息至本地存储
|
|
95
|
-
async setCurrentProfileLocalStorage(profile) {
|
|
96
|
-
// 查询部门权限
|
|
97
|
-
let query = Parse.Query.fromJSON("Department", {
|
|
98
|
-
where: {
|
|
99
|
-
$or: [
|
|
100
|
-
{ "leader": profile.toPointer() },
|
|
101
|
-
// {"managers":{$eq:profile?.id}},
|
|
102
|
-
]
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
let departList = await query.find();
|
|
106
|
-
departList.forEach(depart => {
|
|
107
|
-
if (depart?.id) {
|
|
108
|
-
this.isManager = true;
|
|
109
|
-
this.isLeader = true;
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthProfileService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
114
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthProfileService, providedIn: 'root' }); }
|
|
115
|
-
}
|
|
116
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthProfileService, decorators: [{
|
|
117
|
-
type: Injectable,
|
|
118
|
-
args: [{
|
|
119
|
-
providedIn: 'root',
|
|
120
|
-
}]
|
|
121
|
-
}], ctorParameters: () => [{ type: i1.Router }] });
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1wcm9maWxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3VzZXIvcHJvZmlsZS9hdXRoLXByb2ZpbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUl6QyxNQUFNLE9BQU8sa0JBQWtCO0lBTTdCLElBQUksU0FBUztRQUNYLElBQUcsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUE7UUFDMUMsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUNELElBQUksU0FBUyxDQUFDLENBQVE7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDcEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sRUFBQyxNQUFNLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLElBQUksQ0FBQyxTQUFTLEVBQUMsQ0FBQTtJQUN2RSxDQUFDO0lBQ0QsSUFBSSxTQUFTO1FBQ1gsSUFBRyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQTtRQUMxQyxPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsQ0FBUTtRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNwQixZQUFZLENBQUMsT0FB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RyxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQSxFQUFFO1lBQ3pCLElBQUcsTUFBTSxFQUFFLEVBQUUsRUFBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO2dCQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtZQUN0QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFSCxDQUFDOytHQWxIVyxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgUGFyc2UgZnJvbSBcInBhcnNlXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoUHJvZmlsZVNlcnZpY2Uge1xyXG4gIHByb2ZpbGU6UGFyc2UuT2JqZWN0XHJcbiAgX3Byb2ZpbGVJZDpzdHJpbmdcclxuICBfY29tcGFueUlkOnN0cmluZ1xyXG4gIGlzTGVhZGVyOmJvb2xlYW47XHJcbiAgaXNNYW5hZ2VyOmJvb2xlYW47XHJcbiAgZ2V0IHByb2ZpbGVJZCgpe1xyXG4gICAgaWYodGhpcy5fcHJvZmlsZUlkKSByZXR1cm4gdGhpcy5fcHJvZmlsZUlkXHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJQYXJzZS9Qcm9maWxlSWRcIilcclxuICB9XHJcbiAgc2V0IHByb2ZpbGVJZCh2OnN0cmluZyl7XHJcbiAgICB0aGlzLl9wcm9maWxlSWQgPSB2O1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJQYXJzZS9Qcm9maWxlSWRcIix2KTtcclxuICB9XHJcbiAgZ2V0IHByb2ZpbGVQb2ludGVyKCl7XHJcbiAgICByZXR1cm4ge19fdHlwZTpcIlBvaW50ZXJcIixjbGFzc05hbWU6XCJQcm9maWxlXCIsb2JqZWN0SWQ6dGhpcy5jb21wYW55SWR9XHJcbiAgfVxyXG4gIGdldCBjb21wYW55SWQoKXtcclxuICAgIGlmKHRoaXMuX2NvbXBhbnlJZCkgcmV0dXJuIHRoaXMuX2NvbXBhbnlJZFxyXG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiUGFyc2UvQ29tcGFueUlkXCIpXHJcbiAgfVxyXG4gIHNldCBjb21wYW55SWQodjpzdHJpbmcpe1xyXG4gICAgdGhpcy5fY29tcGFueUlkID0gdjtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiUGFyc2UvQ29tcGFueUlkXCIsdik7XHJcbiAgfVxyXG4gIGdldCBjb21wYW55UG9pbnRlcigpe1xyXG4gICAgcmV0dXJuIHtfX3R5cGU6XCJQb2ludGVyXCIsY2xhc3NOYW1lOlwiY29tcGFueVwiLG9iamVjdElkOnRoaXMuY29tcGFueUlkfVxyXG4gIH1cclxuICAvLyBzdG9yZSB0aGUgVVJMIHNvIHdlIGNhbiByZWRpcmVjdCBhZnRlciBsb2dnaW5nIGluXHJcbiAgcmVkaXJlY3RVcmw6IHN0cmluZztcclxuICBfdXNlcjpQYXJzZS5Vc2VyO1xyXG4gIGdldCB1c2VyKCl7XHJcbiAgICByZXR1cm4gdGhpcy5fdXNlciB8fCBQYXJzZS5Vc2VyLmN1cnJlbnQoKTtcclxuICB9XHJcbiAgc2V0IHVzZXIodil7XHJcbiAgICB0aGlzLl91c2VyID0gdlxyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcm91dGVyOiBSb3V0ZXIpIHtcclxuICAgIHRoaXMudXNlciA9IFBhcnNlLlVzZXIuY3VycmVudCgpO1xyXG4gIH1cclxuICBhc3luYyBnZXRQcm9maWxlKCl7XHJcbiAgICBpZih0aGlzLnByb2ZpbGU/LmlkKXtcclxuICAgICAgcmV0dXJuIHRoaXMucHJvZmlsZVxyXG4gICAgfVxyXG4gICAgaWYodGhpcy5wcm9maWxlSWQpe1xyXG4gICAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJQcm9maWxlXCIpO1xyXG4gICAgICBxdWVyeS5pbmNsdWRlKFwiY29tcGFueVwiKVxyXG4gICAgICB0aGlzLnByb2ZpbGUgPSBhd2FpdCBxdWVyeS5nZXQodGhpcy5wcm9maWxlSWQpO1xyXG4gICAgICByZXR1cm4gdGhpcy5wcm9maWxlIFxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiB0aGlzLnByb2ZpbGUgXHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIGJpbmRQcm9maWxlKHByb2ZpbGU6UGFyc2UuT2JqZWN0KXtcclxuICAgIHRoaXMucHJvZmlsZSA9IHByb2ZpbGU7XHJcbiAgICB0aGlzLnByb2ZpbGVJZCA9IHByb2ZpbGUuaWRcclxuICAgIGlmKHByb2ZpbGU/LmdldChcImNvbXBhbnlcIik/LmlkKXtcclxuICAgICAgdGhpcy5jb21wYW55SWQgPSBwcm9maWxlPy5nZXQoXCJjb21wYW55XCIpPy5pZFxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2cocHJvZmlsZSx0aGlzLnVzZXIpO1xyXG4gICAgdGhpcy5wcm9maWxlLnNldChcInVzZXJcIix0aGlzLnVzZXI/LnRvUG9pbnRlcigpKVxyXG4gICAgYXdhaXQgdGhpcy5wcm9maWxlLnNhdmUoKTtcclxuICAgIGNvbnNvbGUubG9nKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaG9tZVBhdGhcIikpXHJcbiAgICBjb25zb2xlLmxvZyhwcm9maWxlPy5nZXQoXCJjb21wYW55XCIpPy5nZXQoXCJyb290UGFnZVwiKSlcclxuICAgIGxldCB1cmwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhvbWVQYXRoXCIpfHwgcHJvZmlsZT8uZ2V0KFwiY29tcGFueVwiKT8uZ2V0KFwicm9vdFBhZ2VcIikgfHx0aGlzLnJlZGlyZWN0VXJsIHx8XCIvXCJcclxuICAgIHVybCA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmwpXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XHJcbiAgfVxyXG4gIGFzeW5jIGNoZWNrUHJvZmlsZSh1cmw6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8g5aaC5p6c5bey55m75b2VLOebtOaOpei3s+i9rOW9k+WJjei3r+eUsSDot7Plh7ror6Xlh73mlbBcclxuICAgIGxldCBwcm9maWxlID0gdGhpcy5wcm9maWxlXHJcbiAgICBpZiAocHJvZmlsZT8uaWQpIHsgXHJcbiAgICAgIHRoaXMuc2V0Q3VycmVudFByb2ZpbGVMb2NhbFN0b3JhZ2UocHJvZmlsZSlcclxuICAgICAgcmV0dXJuIHRydWU7IFxyXG4gICAgfVxyXG5cclxuICAgIC8vIOiLpeW3sueZu+W9le+8jOS9huacquWKoOi9vXByb2ZpbGXliJnov5vooYzliqDovb1cclxuICAgIGlmKHRoaXMucHJvZmlsZUlkKXtcclxuICAgICAgbGV0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiUHJvZmlsZVwiKTtcclxuICAgICAgcXVlcnkuaW5jbHVkZShcImNvbXBhbnlcIilcclxuICAgICAgcHJvZmlsZSA9IGF3YWl0IHF1ZXJ5LmdldCh0aGlzLnByb2ZpbGVJZCk7XHJcbiAgICAgIGlmKHByb2ZpbGU/LmlkKXtcclxuICAgICAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlXHJcbiAgICAgIHRoaXMuc2V0Q3VycmVudFByb2ZpbGVMb2NhbFN0b3JhZ2UocHJvZmlsZSlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOWQpuWImemHjeWumuWQkeWIsGxvZ2lu6aG16Z2iXHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmF1dGhTZXJ2aWNlLmlzTG9nZ2VkSW4pXHJcbiAgICB0aGlzLnJlZGlyZWN0VXJsID0gdXJsO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZS9iaW5kJ10pO1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG4gICAvLyDpgInmi6nlkZjlt6Xouqvku73lkI7vvIzmm7TmlrDluJDlpZfkv6Hmga/oh7PmnKzlnLDlrZjlgqhcclxuIGFzeW5jIHNldEN1cnJlbnRQcm9maWxlTG9jYWxTdG9yYWdlKHByb2ZpbGU6UGFyc2UuT2JqZWN0KXtcclxuXHJcbiAgLy8g5p+l6K+i6YOo6Zeo5p2D6ZmQXHJcbiAgbGV0IHF1ZXJ5ID0gUGFyc2UuUXVlcnkuZnJvbUpTT04oXCJEZXBhcnRtZW50XCIse1xyXG4gICAgd2hlcmU6e1xyXG4gICAgICAkb3I6W1xyXG4gICAgICAgIHtcImxlYWRlclwiOnByb2ZpbGUudG9Qb2ludGVyKCl9LFxyXG4gICAgICAgIC8vIHtcIm1hbmFnZXJzXCI6eyRlcTpwcm9maWxlPy5pZH19LFxyXG4gICAgICBdXHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgbGV0IGRlcGFydExpc3QgPSBhd2FpdCBxdWVyeS5maW5kKCk7XHJcbiAgZGVwYXJ0TGlzdC5mb3JFYWNoKGRlcGFydD0+e1xyXG4gICAgaWYoZGVwYXJ0Py5pZCl7XHJcbiAgICAgIHRoaXMuaXNNYW5hZ2VyID0gdHJ1ZVxyXG4gICAgICB0aGlzLmlzTGVhZGVyID0gdHJ1ZVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gfVxyXG59Il19
|
|
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/user/profile/auth-profile.service.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Injectable}from"@angular/core";import{FmodeParse}from"@fmode/parse";import{Router}from"@angular/router";import*as i0 from"@angular/core";import*as i1 from"@angular/router";const Parse=FmodeParse.with("nova");export class AuthProfileService{get profileId(){return this._profileId?this._profileId:localStorage.getItem("Parse/ProfileId")}set profileId(e){this._profileId=e,localStorage.setItem("Parse/ProfileId",e)}get profilePointer(){return{__type:"Pointer",className:"Profile",objectId:this.companyId}}get companyId(){return this._companyId?this._companyId:localStorage.getItem("Parse/CompanyId")}set companyId(e){this._companyId=e,localStorage.setItem("Parse/CompanyId",e)}get companyPointer(){return{__type:"Pointer",className:"company",objectId:this.companyId}}get user(){return this._user||Parse.User.current()}set user(e){this._user=e}constructor(e){this.router=e,this.user=Parse.User.current()}async getProfile(){if(this.profile?.id)return this.profile;if(this.profileId){let e=new Parse.Query("Profile");return e.include("company"),this.profile=await e.get(this.profileId),this.profile}return this.profile}async bindProfile(e){this.profile=e,this.profileId=e.id,e?.get("company")?.id&&(this.companyId=e?.get("company")?.id),console.log(e,this.user),this.profile.set("user",this.user?.toPointer()),await this.profile.save(),console.log(localStorage.getItem("homePath")),console.log(e?.get("company")?.get("rootPage"));let r=localStorage.getItem("homePath")||e?.get("company")?.get("rootPage")||this.redirectUrl||"/";r=decodeURIComponent(r),this.router.navigate([r])}async checkProfile(e){let r=this.profile;if(r?.id)return this.setCurrentProfileLocalStorage(r),!0;if(this.profileId){let e=new Parse.Query("Profile");return e.include("company"),r=await e.get(this.profileId),r?.id&&(this.profile=r,this.setCurrentProfileLocalStorage(r)),!0}return this.redirectUrl=e,this.router.navigate(["/profile/bind"]),!1}async setCurrentProfileLocalStorage(e){let r=Parse.Query.fromJSON("Department",{where:{$or:[{leader:e.toPointer()}]}});(await r.find()).forEach((e=>{e?.id&&(this.isManager=!0,this.isLeader=!0)}))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AuthProfileService,deps:[{token:i1.Router}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AuthProfileService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AuthProfileService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.Router}]});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL3Byb2ZpbGUvYXV0aC1wcm9maWxlLnNlcnZpY2UubWpz`
|
|
10
|
+
|
|
@@ -1,164 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import { ProfileConfirmModalComponent } from "./profile-confirm-modal.component";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import * as i2 from "@angular/router";
|
|
12
|
-
import * as i3 from "@ionic/angular";
|
|
13
|
-
import * as i4 from "../../../platform/cross.service";
|
|
14
|
-
import * as i5 from "@angular/common";
|
|
15
|
-
import * as i6 from "@angular/forms";
|
|
16
|
-
export class ProfileBindComponent {
|
|
17
|
-
onResize() {
|
|
18
|
-
this.cross.onResizeScreen();
|
|
19
|
-
}
|
|
20
|
-
constructor(authProfile, router, alertController, toastController, cross, modalController) {
|
|
21
|
-
this.authProfile = authProfile;
|
|
22
|
-
this.router = router;
|
|
23
|
-
this.alertController = alertController;
|
|
24
|
-
this.toastController = toastController;
|
|
25
|
-
this.cross = cross;
|
|
26
|
-
this.modalController = modalController;
|
|
27
|
-
this.profileList = [];
|
|
28
|
-
this.pdata = {
|
|
29
|
-
name: null,
|
|
30
|
-
mobile: null,
|
|
31
|
-
};
|
|
32
|
-
this.now = new Date();
|
|
33
|
-
this.isLoading = false;
|
|
34
|
-
this.profile = this.authProfile.profile;
|
|
35
|
-
this.currentProfile = localStorage.getItem('Parse/ProfileId');
|
|
36
|
-
this.user = Parse.User.current();
|
|
37
|
-
this.loadProfiles();
|
|
38
|
-
}
|
|
39
|
-
async loadProfiles() {
|
|
40
|
-
this.isLoading = true;
|
|
41
|
-
try {
|
|
42
|
-
let query = new Parse.Query("Profile");
|
|
43
|
-
query.include("company");
|
|
44
|
-
query.notEqualTo("isDeleted", true);
|
|
45
|
-
if (this.profile?.id) {
|
|
46
|
-
query.equalTo("mobile", this.profile.get('mobile'));
|
|
47
|
-
query.equalTo("name", this.profile.get('name'));
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
query.equalTo("user", this.user.id);
|
|
51
|
-
}
|
|
52
|
-
this.profileList = await query.find();
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
console.error('Error loading profiles:', error);
|
|
56
|
-
this.showToast('加载身份信息失败,请重试', 'danger');
|
|
57
|
-
}
|
|
58
|
-
finally {
|
|
59
|
-
this.isLoading = false;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
async bindProfile(p) {
|
|
63
|
-
if (!p?.id) {
|
|
64
|
-
p = this.profileSearched;
|
|
65
|
-
}
|
|
66
|
-
if (!p?.id)
|
|
67
|
-
return;
|
|
68
|
-
try {
|
|
69
|
-
await this.authProfile.bindProfile(p);
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
console.error('Error binding profile:', error);
|
|
73
|
-
this.showToast('绑定身份失败,请重试', 'danger');
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
async searchProfile() {
|
|
77
|
-
this.profileList = [];
|
|
78
|
-
if (!this.pdata.name || !this.pdata.mobile) {
|
|
79
|
-
this.showToast('请填写完整信息以查询您的身份', 'warning');
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
this.isLoading = true;
|
|
83
|
-
try {
|
|
84
|
-
let query = new Parse.Query("Profile");
|
|
85
|
-
query.include("company");
|
|
86
|
-
query.equalTo("name", this.pdata.name);
|
|
87
|
-
query.equalTo("mobile", this.pdata.mobile);
|
|
88
|
-
this.profileList = await query.find();
|
|
89
|
-
if (this.profileList?.length < 1) {
|
|
90
|
-
this.showToast('该身份不存在,无法绑定!', 'warning');
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
console.error('Error searching profile:', error);
|
|
95
|
-
this.showToast('查询身份失败,请重试', 'danger');
|
|
96
|
-
}
|
|
97
|
-
finally {
|
|
98
|
-
this.isLoading = false;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
async selectProfile(p) {
|
|
102
|
-
if (!p?.id)
|
|
103
|
-
return;
|
|
104
|
-
this.profileSearched = p;
|
|
105
|
-
const modal = await this.modalController.create({
|
|
106
|
-
component: ProfileConfirmModalComponent,
|
|
107
|
-
componentProps: {
|
|
108
|
-
profile: p
|
|
109
|
-
},
|
|
110
|
-
// swipeToClose: true
|
|
111
|
-
});
|
|
112
|
-
await modal.present();
|
|
113
|
-
const { data } = await modal.onWillDismiss();
|
|
114
|
-
if (data?.confirmed) {
|
|
115
|
-
this.bindProfile(p);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
goProfileManage() {
|
|
119
|
-
this.router.navigate([
|
|
120
|
-
"/common/manage/Profile",
|
|
121
|
-
{
|
|
122
|
-
rid: "x6xybaLWIC",
|
|
123
|
-
},
|
|
124
|
-
]);
|
|
125
|
-
}
|
|
126
|
-
async onShowModal() {
|
|
127
|
-
const alert = await this.alertController.create({
|
|
128
|
-
header: '团队成员管理',
|
|
129
|
-
message: '您是企业管理员,可进入添加团队成员身份',
|
|
130
|
-
buttons: [
|
|
131
|
-
{
|
|
132
|
-
text: '取消',
|
|
133
|
-
role: 'cancel'
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
text: '前往管理',
|
|
137
|
-
handler: () => {
|
|
138
|
-
this.goProfileManage();
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
]
|
|
142
|
-
});
|
|
143
|
-
await alert.present();
|
|
144
|
-
}
|
|
145
|
-
async showToast(message, color = 'success') {
|
|
146
|
-
const toast = await this.toastController.create({
|
|
147
|
-
message,
|
|
148
|
-
duration: 2000,
|
|
149
|
-
color,
|
|
150
|
-
position: 'top'
|
|
151
|
-
});
|
|
152
|
-
await toast.present();
|
|
153
|
-
}
|
|
154
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProfileBindComponent, deps: [{ token: i1.AuthProfileService }, { token: i2.Router }, { token: i3.AlertController }, { token: i3.ToastController }, { token: i4.CrossService }, { token: i3.ModalController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
155
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ProfileBindComponent, selector: "fm-profile-bind", host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<ion-content>\r\n <ng-container *ngIf=\"cross?.navMenuType == 'mobile'; else desktopTemplate\">\r\n <div class=\"ion-padding tips-block\">\r\n <img src=\"https://file-cloud.fmode.cn/CCuWCEM24z/20231213/45hm71034653179.png\" alt=\"\" />\r\n <div>\u8BF7\u4F7F\u7528\u7535\u8111\u6D4F\u89C8\u5668\u6253\u5F00</div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #desktopTemplate>\r\n <div class=\"profile-page ion-padding\">\r\n <div class=\"title\">\u4F01\u4E1A\u9879\u76EE\u7BA1\u7406\u7CFB\u7EDF</div>\r\n \r\n <div class=\"date-container\">\r\n <div class=\"date\">{{ now | date : \"yyyy\u5E74MM\u6708dd\u65E5\" }}</div>\r\n <ion-button *ngIf=\"user?.get('type') == 'admin'\" fill=\"clear\" size=\"small\" (click)=\"onShowModal()\">\r\n <ion-icon slot=\"start\" name=\"people\"></ion-icon>\r\n \u4F01\u4E1A\u7BA1\u7406\u5458\r\n </ion-button>\r\n </div>\r\n\r\n <ng-container *ngIf=\"profileList?.length > 0; else noProfileTemplate\">\r\n <h2>\r\n \u6B22\u8FCE\u60A8\uFF1A{{\r\n profile?.get(\"name\") ||\r\n this.profileList[0]?.get(\"name\") ||\r\n user?.get(\"nickname\") ||\r\n user?.get(\"name\") ||\r\n user?.get(\"username\")\r\n }}\uFF0C\u8BF7\u9009\u62E9\u60A8\u7684\u4F01\u4E1A\u8EAB\u4EFD\uFF1A\r\n </h2>\r\n </ng-container>\r\n \r\n <ng-template #noProfileTemplate>\r\n <h2>\u60A8\u8FD8\u672A\u7ED1\u5B9A\u4F01\u4E1A\uFF0C\u8BF7\u5148\u8054\u7CFB\u7BA1\u7406\u5458\u7ED1\u5B9A\uFF01</h2>\r\n </ng-template>\r\n\r\n <ion-list *ngIf=\"profileList?.length > 0\" lines=\"full\">\r\n <ion-item \r\n *ngFor=\"let p of profileList\" \r\n button \r\n detail=\"false\"\r\n [color]=\"currentProfile == p.id ? 'primary' : ''\"\r\n (click)=\"selectProfile(p)\">\r\n <ion-icon slot=\"start\" name=\"person\" color=\"primary\"></ion-icon>\r\n <ion-label>\r\n <h2>{{ p.get(\"name\") }}</h2>\r\n <p>\u4F01\u4E1A\uFF1A{{ p.get(\"company\")?.get(\"name\") || p.get(\"company\")?.get(\"title\") }}</p>\r\n </ion-label>\r\n <ion-icon *ngIf=\"currentProfile == p.id\" slot=\"end\" name=\"checkmark\" color=\"primary\"></ion-icon>\r\n </ion-item>\r\n </ion-list>\r\n\r\n <div class=\"ion-margin-top ion-text-center\">\r\n <ion-text color=\"medium\">\r\n <ion-icon name=\"information-circle-outline\"></ion-icon>\r\n \u82E5\u65E0\u5E10\u5957\u4FE1\u606F\uFF0C\u8BF7\u8F93\u5165\u4F01\u4E1A\u8EAB\u4EFD\u9A8C\u8BC1\u7ED1\u5B9A\r\n </ion-text>\r\n </div>\r\n\r\n <div class=\"form-container ion-margin-top\">\r\n <ion-item>\r\n <ion-icon slot=\"start\" name=\"person-outline\"></ion-icon>\r\n <ion-input \r\n type=\"text\" \r\n [(ngModel)]=\"pdata.name\" \r\n placeholder=\"\u8BF7\u8F93\u5165\u60A8\u7684\u59D3\u540D\"\r\n clearInput>\r\n </ion-input>\r\n </ion-item>\r\n\r\n <ion-item>\r\n <ion-icon slot=\"start\" name=\"phone-portrait-outline\"></ion-icon>\r\n <ion-input \r\n type=\"tel\" \r\n [(ngModel)]=\"pdata.mobile\" \r\n placeholder=\"\u8BF7\u8F93\u5165\u60A8\u624B\u673A\u53F7\"\r\n clearInput>\r\n </ion-input>\r\n </ion-item>\r\n\r\n <ion-button \r\n expand=\"block\" \r\n (click)=\"searchProfile()\"\r\n [disabled]=\"!pdata.name || !pdata.mobile\"\r\n class=\"ion-margin-top\">\r\n \u67E5\u8BE2\u8EAB\u4EFD\r\n <ion-spinner *ngIf=\"isLoading\" name=\"crescent\"></ion-spinner>\r\n </ion-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</ion-content>", styles: [".profile-page{max-width:500px;margin:0 auto;padding-top:20px}.profile-page .title{font-size:24px;font-weight:700;text-align:center;margin-bottom:30px;color:var(--ion-color-primary)}.profile-page .date-container{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px}.profile-page .date-container .date{font-size:16px;color:var(--ion-color-medium)}.profile-page h2{font-size:18px;color:var(--ion-color-dark);margin-bottom:20px}.profile-page ion-list{background:transparent;border-radius:8px;margin-bottom:20px}.profile-page ion-list ion-item{--border-radius: 8px;--padding-start: 10px;--inner-padding-end: 10px;margin-bottom:10px}.profile-page ion-list ion-item ion-label h2{font-weight:500;margin-bottom:5px}.profile-page ion-list ion-item ion-label p{color:var(--ion-color-medium);font-size:14px}.profile-page .form-container ion-item{--background: var(--ion-color-light);--border-radius: 8px;margin-bottom:15px}.tips-block{display:flex;flex-direction:column;align-items:center;justify-content:center;height:80vh;text-align:center}.tips-block img{width:220px;margin-bottom:20px}.tips-block div{font-size:18px;color:var(--ion-color-medium)}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.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: i3.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearInputIcon", "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", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TextValueAccessor, selector: "ion-input:not([type=number]),ion-input-otp[type=text],ion-textarea,ion-searchbar" }, { kind: "pipe", type: i5.DatePipe, name: "date" }] }); }
|
|
156
|
-
}
|
|
157
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProfileBindComponent, decorators: [{
|
|
158
|
-
type: Component,
|
|
159
|
-
args: [{ selector: "fm-profile-bind", template: "<ion-content>\r\n <ng-container *ngIf=\"cross?.navMenuType == 'mobile'; else desktopTemplate\">\r\n <div class=\"ion-padding tips-block\">\r\n <img src=\"https://file-cloud.fmode.cn/CCuWCEM24z/20231213/45hm71034653179.png\" alt=\"\" />\r\n <div>\u8BF7\u4F7F\u7528\u7535\u8111\u6D4F\u89C8\u5668\u6253\u5F00</div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #desktopTemplate>\r\n <div class=\"profile-page ion-padding\">\r\n <div class=\"title\">\u4F01\u4E1A\u9879\u76EE\u7BA1\u7406\u7CFB\u7EDF</div>\r\n \r\n <div class=\"date-container\">\r\n <div class=\"date\">{{ now | date : \"yyyy\u5E74MM\u6708dd\u65E5\" }}</div>\r\n <ion-button *ngIf=\"user?.get('type') == 'admin'\" fill=\"clear\" size=\"small\" (click)=\"onShowModal()\">\r\n <ion-icon slot=\"start\" name=\"people\"></ion-icon>\r\n \u4F01\u4E1A\u7BA1\u7406\u5458\r\n </ion-button>\r\n </div>\r\n\r\n <ng-container *ngIf=\"profileList?.length > 0; else noProfileTemplate\">\r\n <h2>\r\n \u6B22\u8FCE\u60A8\uFF1A{{\r\n profile?.get(\"name\") ||\r\n this.profileList[0]?.get(\"name\") ||\r\n user?.get(\"nickname\") ||\r\n user?.get(\"name\") ||\r\n user?.get(\"username\")\r\n }}\uFF0C\u8BF7\u9009\u62E9\u60A8\u7684\u4F01\u4E1A\u8EAB\u4EFD\uFF1A\r\n </h2>\r\n </ng-container>\r\n \r\n <ng-template #noProfileTemplate>\r\n <h2>\u60A8\u8FD8\u672A\u7ED1\u5B9A\u4F01\u4E1A\uFF0C\u8BF7\u5148\u8054\u7CFB\u7BA1\u7406\u5458\u7ED1\u5B9A\uFF01</h2>\r\n </ng-template>\r\n\r\n <ion-list *ngIf=\"profileList?.length > 0\" lines=\"full\">\r\n <ion-item \r\n *ngFor=\"let p of profileList\" \r\n button \r\n detail=\"false\"\r\n [color]=\"currentProfile == p.id ? 'primary' : ''\"\r\n (click)=\"selectProfile(p)\">\r\n <ion-icon slot=\"start\" name=\"person\" color=\"primary\"></ion-icon>\r\n <ion-label>\r\n <h2>{{ p.get(\"name\") }}</h2>\r\n <p>\u4F01\u4E1A\uFF1A{{ p.get(\"company\")?.get(\"name\") || p.get(\"company\")?.get(\"title\") }}</p>\r\n </ion-label>\r\n <ion-icon *ngIf=\"currentProfile == p.id\" slot=\"end\" name=\"checkmark\" color=\"primary\"></ion-icon>\r\n </ion-item>\r\n </ion-list>\r\n\r\n <div class=\"ion-margin-top ion-text-center\">\r\n <ion-text color=\"medium\">\r\n <ion-icon name=\"information-circle-outline\"></ion-icon>\r\n \u82E5\u65E0\u5E10\u5957\u4FE1\u606F\uFF0C\u8BF7\u8F93\u5165\u4F01\u4E1A\u8EAB\u4EFD\u9A8C\u8BC1\u7ED1\u5B9A\r\n </ion-text>\r\n </div>\r\n\r\n <div class=\"form-container ion-margin-top\">\r\n <ion-item>\r\n <ion-icon slot=\"start\" name=\"person-outline\"></ion-icon>\r\n <ion-input \r\n type=\"text\" \r\n [(ngModel)]=\"pdata.name\" \r\n placeholder=\"\u8BF7\u8F93\u5165\u60A8\u7684\u59D3\u540D\"\r\n clearInput>\r\n </ion-input>\r\n </ion-item>\r\n\r\n <ion-item>\r\n <ion-icon slot=\"start\" name=\"phone-portrait-outline\"></ion-icon>\r\n <ion-input \r\n type=\"tel\" \r\n [(ngModel)]=\"pdata.mobile\" \r\n placeholder=\"\u8BF7\u8F93\u5165\u60A8\u624B\u673A\u53F7\"\r\n clearInput>\r\n </ion-input>\r\n </ion-item>\r\n\r\n <ion-button \r\n expand=\"block\" \r\n (click)=\"searchProfile()\"\r\n [disabled]=\"!pdata.name || !pdata.mobile\"\r\n class=\"ion-margin-top\">\r\n \u67E5\u8BE2\u8EAB\u4EFD\r\n <ion-spinner *ngIf=\"isLoading\" name=\"crescent\"></ion-spinner>\r\n </ion-button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</ion-content>", styles: [".profile-page{max-width:500px;margin:0 auto;padding-top:20px}.profile-page .title{font-size:24px;font-weight:700;text-align:center;margin-bottom:30px;color:var(--ion-color-primary)}.profile-page .date-container{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px}.profile-page .date-container .date{font-size:16px;color:var(--ion-color-medium)}.profile-page h2{font-size:18px;color:var(--ion-color-dark);margin-bottom:20px}.profile-page ion-list{background:transparent;border-radius:8px;margin-bottom:20px}.profile-page ion-list ion-item{--border-radius: 8px;--padding-start: 10px;--inner-padding-end: 10px;margin-bottom:10px}.profile-page ion-list ion-item ion-label h2{font-weight:500;margin-bottom:5px}.profile-page ion-list ion-item ion-label p{color:var(--ion-color-medium);font-size:14px}.profile-page .form-container ion-item{--background: var(--ion-color-light);--border-radius: 8px;margin-bottom:15px}.tips-block{display:flex;flex-direction:column;align-items:center;justify-content:center;height:80vh;text-align:center}.tips-block img{width:220px;margin-bottom:20px}.tips-block div{font-size:18px;color:var(--ion-color-medium)}\n"] }]
|
|
160
|
-
}], ctorParameters: () => [{ type: i1.AuthProfileService }, { type: i2.Router }, { type: i3.AlertController }, { type: i3.ToastController }, { type: i4.CrossService }, { type: i3.ModalController }], propDecorators: { onResize: [{
|
|
161
|
-
type: HostListener,
|
|
162
|
-
args: ["window:resize", ["$event"]]
|
|
163
|
-
}] } });
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1iaW5kLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvdXNlci9wcm9maWxlL3Byb2ZpbGUtYmluZC9wcm9maWxlLWJpbmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi91c2VyL3Byb2ZpbGUvcHJvZmlsZS1iaW5kL3Byb2ZpbGUtYmluZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7QUFPakYsTUFBTSxPQUFPLG9CQUFvQjtJQWEvQixRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsWUFDVSxXQUErQixFQUMvQixNQUFjLEVBQ2QsZUFBZ0MsRUFDaEMsZUFBZ0MsRUFDakMsS0FBbUIsRUFDbEIsZUFBZ0M7UUFMaEMsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxvQkFBZSxHQUFmLGVBQWUsQ0FB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QzlDLE9BQU87WUFDUCxRQUFRLEVBQUUsSUFBSTtZQUNkLEtBQUs7WUFDTCxRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7UUFDSCxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDOytHQTFKVSxvQkFBb0I7bUdBQXBCLG9CQUFvQixxSENkakMsb3pIQTJGYzs7NEZEN0VELG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxpQkFBaUI7aU9BaUIzQixRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBdXRoUHJvZmlsZVNlcnZpY2UgfSBmcm9tIFwiLi4vYXV0aC1wcm9maWxlLnNlcnZpY2VcIjtcclxuaW1wb3J0IFBhcnNlIGZyb20gXCJwYXJzZVwiO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyIH0gZnJvbSBcIkBpb25pYy9hbmd1bGFyXCI7XHJcbmltcG9ydCB7IFRvYXN0Q29udHJvbGxlciB9IGZyb20gXCJAaW9uaWMvYW5ndWxhclwiO1xyXG5pbXBvcnQgeyBDcm9zc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vcGxhdGZvcm0vY3Jvc3Muc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQcm9maWxlQ29uZmlybU1vZGFsQ29tcG9uZW50IH0gZnJvbSBcIi4vcHJvZmlsZS1jb25maXJtLW1vZGFsLmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZm0tcHJvZmlsZS1iaW5kXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9wcm9maWxlLWJpbmQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vcHJvZmlsZS1iaW5kLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZmlsZUJpbmRDb21wb25lbnQge1xyXG4gIHByb2ZpbGU6IFBhcnNlLk9iamVjdDtcclxuICB1c2VyOiBQYXJzZS5Vc2VyO1xyXG4gIHByb2ZpbGVMaXN0OiBBcnJheTxQYXJzZS5PYmplY3Q+ID0gW107XHJcbiAgcGRhdGE6IGFueSA9IHtcclxuICAgIG5hbWU6IG51bGwsXHJcbiAgICBtb2JpbGU6IG51bGwsXHJcbiAgfTtcclxuICBub3c6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gIGN1cnJlbnRQcm9maWxlOiBzdHJpbmc7XHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIsIFtcIiRldmVudFwiXSlcclxuICBvblJlc2l6ZSgpIHtcclxuICAgIHRoaXMuY3Jvc3Mub25SZXNpemVTY3JlZW4oKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhdXRoUHJvZmlsZTogQXV0aFByb2ZpbGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyLFxyXG4gICAgcHVibGljIGNyb3NzOiBDcm9zc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsQ29udHJvbGxlcjogTW9kYWxDb250cm9sbGVyLFxyXG4gICkge1xyXG4gICAgdGhpcy5wcm9maWxlID0gdGhpcy5hdXRoUHJvZmlsZS5wcm9maWxlO1xyXG4gICAgdGhpcy5jdXJyZW50UHJvZmlsZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdQYXJzZS9Qcm9maWxlSWQnKTtcclxuICAgIHRoaXMudXNlciA9IFBhcnNlLlVzZXIuY3VycmVudCgpO1xyXG4gICAgdGhpcy5sb2FkUHJvZmlsZXMoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWRQcm9maWxlcygpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIlByb2ZpbGVcIik7XHJcbiAgICAgIHF1ZXJ5LmluY2x1ZGUoXCJjb21wYW55XCIpO1xyXG4gICAgICBxdWVyeS5ub3RFcXVhbFRvKFwiaXNEZWxldGVkXCIsIHRydWUpO1xyXG4gICAgICBcclxuICAgICAgaWYgKHRoaXMucHJvZmlsZT8uaWQpIHtcclxuICAgICAgICBxdWVyeS5lcXVhbFRvKFwibW9iaWxlXCIsIHRoaXMucHJvZmlsZS5nZXQoJ21vYmlsZScpKTtcclxuICAgICAgICBxdWVyeS5lcXVhbFRvKFwibmFtZVwiLCB0aGlzLnByb2ZpbGUuZ2V0KCduYW1lJykpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHF1ZXJ5LmVxdWFsVG8oXCJ1c2VyXCIsIHRoaXMudXNlci5pZCk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHRoaXMucHJvZmlsZUxpc3QgPSBhd2FpdCBxdWVyeS5maW5kKCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHByb2ZpbGVzOicsIGVycm9yKTtcclxuICAgICAgdGhpcy5zaG93VG9hc3QoJ+WKoOi9vei6q+S7veS/oeaBr+Wksei0pe+8jOivt+mHjeivlScsICdkYW5nZXInKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBiaW5kUHJvZmlsZShwPzogUGFyc2UuT2JqZWN0KSB7XHJcbiAgICBpZiAoIXA/LmlkKSB7XHJcbiAgICAgIHAgPSB0aGlzLnByb2ZpbGVTZWFyY2hlZDtcclxuICAgIH1cclxuICAgIGlmICghcD8uaWQpIHJldHVybjtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5hdXRoUHJvZmlsZS5iaW5kUHJvZmlsZShwKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGJpbmRpbmcgcHJvZmlsZTonLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuc2hvd1RvYXN0KCfnu5Hlrprouqvku73lpLHotKXvvIzor7fph43or5UnLCAnZGFuZ2VyJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9maWxlU2VhcmNoZWQ6IFBhcnNlLk9iamVjdDtcclxuXHJcbiAgYXN5bmMgc2VhcmNoUHJvZmlsZSgpIHtcclxuICAgIHRoaXMucHJvZmlsZUxpc3QgPSBbXTtcclxuICAgIGlmICghdGhpcy5wZGF0YS5uYW1lIHx8ICF0aGlzLnBkYXRhLm1vYmlsZSkge1xyXG4gICAgICB0aGlzLnNob3dUb2FzdCgn6K+35aGr5YaZ5a6M5pW05L+h5oGv5Lul5p+l6K+i5oKo55qE6Lqr5Lu9JywgJ3dhcm5pbmcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIlByb2ZpbGVcIik7XHJcbiAgICAgIHF1ZXJ5LmluY2x1ZGUoXCJjb21wYW55XCIpO1xyXG4gICAgICBxdWVyeS5lcXVhbFRvKFwibmFtZVwiLCB0aGlzLnBkYXRhLm5hbWUpO1xyXG4gICAgICBxdWVyeS5lcXVhbFRvKFwibW9iaWxlXCIsIHRoaXMucGRhdGEubW9iaWxlKTtcclxuICAgICAgdGhpcy5wcm9maWxlTGlzdCA9IGF3YWl0IHF1ZXJ5LmZpbmQoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnByb2ZpbGVMaXN0Py5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgdGhpcy5zaG93VG9hc3QoJ+ivpei6q+S7veS4jeWtmOWcqO+8jOaXoOazlee7keWumu+8gScsICd3YXJuaW5nJyk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlYXJjaGluZyBwcm9maWxlOicsIGVycm9yKTtcclxuICAgICAgdGhpcy5zaG93VG9hc3QoJ+afpeivoui6q+S7veWksei0pe+8jOivt+mHjeivlScsICdkYW5nZXInKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZWxlY3RQcm9maWxlKHA6IFBhcnNlLk9iamVjdCkge1xyXG4gICAgaWYgKCFwPy5pZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMucHJvZmlsZVNlYXJjaGVkID0gcDtcclxuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbENvbnRyb2xsZXIuY3JlYXRlKHtcclxuICAgICAgY29tcG9uZW50OiBQcm9maWxlQ29uZmlybU1vZGFsQ29tcG9uZW50LFxyXG4gICAgICBjb21wb25lbnRQcm9wczoge1xyXG4gICAgICAgIHByb2ZpbGU6IHBcclxuICAgICAgfSxcclxuICAgICAgLy8gc3dpcGVUb0Nsb3NlOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBhd2FpdCBtb2RhbC5wcmVzZW50KCk7XHJcblxyXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBtb2RhbC5vbldpbGxEaXNtaXNzKCk7XHJcbiAgICBpZiAoZGF0YT8uY29uZmlybWVkKSB7XHJcbiAgICAgIHRoaXMuYmluZFByb2ZpbGUocCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnb1Byb2ZpbGVNYW5hZ2UoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXHJcbiAgICAgIFwiL2NvbW1vbi9tYW5hZ2UvUHJvZmlsZVwiLFxyXG4gICAgICB7XHJcbiAgICAgICAgcmlkOiBcIng2eHliYUxXSUNcIixcclxuICAgICAgfSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25TaG93TW9kYWwoKSB7XHJcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XHJcbiAgICAgIGhlYWRlcjogJ+WboumYn+aIkOWRmOeuoeeQhicsXHJcbiAgICAgIG1lc3NhZ2U6ICfmgqjmmK/kvIHkuJrnrqHnkIblkZjvvIzlj6/ov5vlhaXmt7vliqDlm6LpmJ/miJDlkZjouqvku70nLFxyXG4gICAgICBidXR0b25zOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGV4dDogJ+WPlua2iCcsXHJcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGV4dDogJ+WJjeW+gOeuoeeQhicsXHJcbiAgICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ29Qcm9maWxlTWFuYWdlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9KTtcclxuXHJcbiAgICBhd2FpdCBhbGVydC5wcmVzZW50KCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzaG93VG9hc3QobWVzc2FnZTogc3RyaW5nLCBjb2xvcjogJ3N1Y2Nlc3MnIHwgJ3dhcm5pbmcnIHwgJ2RhbmdlcicgPSAnc3VjY2VzcycpIHtcclxuICAgIGNvbnN0IHRvYXN0ID0gYXdhaXQgdGhpcy50b2FzdENvbnRyb2xsZXIuY3JlYXRlKHtcclxuICAgICAgbWVzc2FnZSxcclxuICAgICAgZHVyYXRpb246IDIwMDAsXHJcbiAgICAgIGNvbG9yLFxyXG4gICAgICBwb3NpdGlvbjogJ3RvcCdcclxuICAgIH0pO1xyXG4gICAgYXdhaXQgdG9hc3QucHJlc2VudCgpO1xyXG4gIH1cclxufSIsIjxpb24tY29udGVudD5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3Jvc3M/Lm5hdk1lbnVUeXBlID09ICdtb2JpbGUnOyBlbHNlIGRlc2t0b3BUZW1wbGF0ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImlvbi1wYWRkaW5nIHRpcHMtYmxvY2tcIj5cclxuICAgICAgPGltZyBzcmM9XCJodHRwczovL2ZpbGUtY2xvdWQuZm1vZGUuY24vQ0N1V0NFTTI0ei8yMDIzMTIxMy80NWhtNzEwMzQ2NTMxNzkucG5nXCIgYWx0PVwiXCIgLz5cclxuICAgICAgPGRpdj7or7fkvb/nlKjnlLXohJHmtY/op4jlmajmiZPlvIA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2Rlc2t0b3BUZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLXBhZ2UgaW9uLXBhZGRpbmdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+5LyB5Lia6aG555uu566h55CG57O757ufPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZVwiPnt7IG5vdyB8IGRhdGUgOiBcInl5eXnlubRNTeaciGRk5pelXCIgfX08L2Rpdj5cclxuICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cInVzZXI/LmdldCgndHlwZScpID09ICdhZG1pbidcIiBmaWxsPVwiY2xlYXJcIiBzaXplPVwic21hbGxcIiAoY2xpY2spPVwib25TaG93TW9kYWwoKVwiPlxyXG4gICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJwZW9wbGVcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAg5LyB5Lia566h55CG5ZGYXHJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcm9maWxlTGlzdD8ubGVuZ3RoID4gMDsgZWxzZSBub1Byb2ZpbGVUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxoMj5cclxuICAgICAgICAgIOasoui/juaCqO+8mnt7XHJcbiAgICAgICAgICAgIHByb2ZpbGU/LmdldChcIm5hbWVcIikgfHxcclxuICAgICAgICAgICAgICB0aGlzLnByb2ZpbGVMaXN0WzBdPy5nZXQoXCJuYW1lXCIpIHx8XHJcbiAgICAgICAgICAgICAgdXNlcj8uZ2V0KFwibmlja25hbWVcIikgfHxcclxuICAgICAgICAgICAgICB1c2VyPy5nZXQoXCJuYW1lXCIpIHx8XHJcbiAgICAgICAgICAgICAgdXNlcj8uZ2V0KFwidXNlcm5hbWVcIilcclxuICAgICAgICAgIH1977yM6K+36YCJ5oup5oKo55qE5LyB5Lia6Lqr5Lu977yaXHJcbiAgICAgICAgPC9oMj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIFxyXG4gICAgICA8bmctdGVtcGxhdGUgI25vUHJvZmlsZVRlbXBsYXRlPlxyXG4gICAgICAgIDxoMj7mgqjov5jmnKrnu5HlrprkvIHkuJrvvIzor7flhYjogZTns7vnrqHnkIblkZjnu5HlrprvvIE8L2gyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPGlvbi1saXN0ICpuZ0lmPVwicHJvZmlsZUxpc3Q/Lmxlbmd0aCA+IDBcIiBsaW5lcz1cImZ1bGxcIj5cclxuICAgICAgICA8aW9uLWl0ZW0gXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcCBvZiBwcm9maWxlTGlzdFwiIFxyXG4gICAgICAgICAgYnV0dG9uIFxyXG4gICAgICAgICAgZGV0YWlsPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW2NvbG9yXT1cImN1cnJlbnRQcm9maWxlID09IHAuaWQgPyAncHJpbWFyeScgOiAnJ1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UHJvZmlsZShwKVwiPlxyXG4gICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJwZXJzb25cIiBjb2xvcj1cInByaW1hcnlcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgPGlvbi1sYWJlbD5cclxuICAgICAgICAgICAgPGgyPnt7IHAuZ2V0KFwibmFtZVwiKSB9fTwvaDI+XHJcbiAgICAgICAgICAgIDxwPuS8geS4mu+8mnt7IHAuZ2V0KFwiY29tcGFueVwiKT8uZ2V0KFwibmFtZVwiKSB8fCBwLmdldChcImNvbXBhbnlcIik/LmdldChcInRpdGxlXCIpIH19PC9wPlxyXG4gICAgICAgICAgPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICA8aW9uLWljb24gKm5nSWY9XCJjdXJyZW50UHJvZmlsZSA9PSBwLmlkXCIgc2xvdD1cImVuZFwiIG5hbWU9XCJjaGVja21hcmtcIiBjb2xvcj1cInByaW1hcnlcIj48L2lvbi1pY29uPlxyXG4gICAgICAgIDwvaW9uLWl0ZW0+XHJcbiAgICAgIDwvaW9uLWxpc3Q+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW9uLW1hcmdpbi10b3AgaW9uLXRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XHJcbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImluZm9ybWF0aW9uLWNpcmNsZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgIOiLpeaXoOW4kOWll+S/oeaBr++8jOivt+i+k+WFpeS8geS4mui6q+S7vemqjOivgee7keWumlxyXG4gICAgICAgIDwvaW9uLXRleHQ+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbmVyIGlvbi1tYXJnaW4tdG9wXCI+XHJcbiAgICAgICAgPGlvbi1pdGVtPlxyXG4gICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJwZXJzb24tb3V0bGluZVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICA8aW9uLWlucHV0IFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBkYXRhLm5hbWVcIiBcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXmgqjnmoTlp5PlkI1cIlxyXG4gICAgICAgICAgICBjbGVhcklucHV0PlxyXG4gICAgICAgICAgPC9pb24taW5wdXQ+XHJcbiAgICAgICAgPC9pb24taXRlbT5cclxuXHJcbiAgICAgICAgPGlvbi1pdGVtPlxyXG4gICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJwaG9uZS1wb3J0cmFpdC1vdXRsaW5lXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgIDxpb24taW5wdXQgXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZWxcIiBcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwZGF0YS5tb2JpbGVcIiBcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXmgqjmiYvmnLrlj7dcIlxyXG4gICAgICAgICAgICBjbGVhcklucHV0PlxyXG4gICAgICAgICAgPC9pb24taW5wdXQ+XHJcbiAgICAgICAgPC9pb24taXRlbT5cclxuXHJcbiAgICAgICAgPGlvbi1idXR0b24gXHJcbiAgICAgICAgICBleHBhbmQ9XCJibG9ja1wiIFxyXG4gICAgICAgICAgKGNsaWNrKT1cInNlYXJjaFByb2ZpbGUoKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIXBkYXRhLm5hbWUgfHwgIXBkYXRhLm1vYmlsZVwiXHJcbiAgICAgICAgICBjbGFzcz1cImlvbi1tYXJnaW4tdG9wXCI+XHJcbiAgICAgICAgICDmn6Xor6Louqvku71cclxuICAgICAgICAgIDxpb24tc3Bpbm5lciAqbmdJZj1cImlzTG9hZGluZ1wiIG5hbWU9XCJjcmVzY2VudFwiPjwvaW9uLXNwaW5uZXI+XHJcbiAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvaW9uLWNvbnRlbnQ+Il19
|
|
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/user/profile/profile-bind/profile-bind.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,HostListener}from"@angular/core";import{AuthProfileService}from"../auth-profile.service";import{FmodeParse}from"@fmode/parse";import{Router}from"@angular/router";import{AlertController,ModalController}from"@ionic/angular";import{ToastController}from"@ionic/angular";import{CrossService}from"../../../platform/cross.service";import{ProfileConfirmModalComponent}from"./profile-confirm-modal.component";import*as i0 from"@angular/core";import*as i1 from"../auth-profile.service";import*as i2 from"@angular/router";import*as i3 from"@ionic/angular";import*as i4 from"../../../platform/cross.service";import*as i5 from"@angular/common";import*as i6 from"@angular/forms";const Parse=FmodeParse.with("nova");export class ProfileBindComponent{onResize(){this.cross.onResizeScreen()}constructor(n,e,o,i,t,r){this.authProfile=n,this.router=e,this.alertController=o,this.toastController=i,this.cross=t,this.modalController=r,this.profileList=[],this.pdata={name:null,mobile:null},this.now=new Date,this.isLoading=!1,this.profile=this.authProfile.profile,this.currentProfile=localStorage.getItem("Parse/ProfileId"),this.user=Parse.User.current(),this.loadProfiles()}async loadProfiles(){this.isLoading=!0;try{let n=new Parse.Query("Profile");n.include("company"),n.notEqualTo("isDeleted",!0),this.profile?.id?(n.equalTo("mobile",this.profile.get("mobile")),n.equalTo("name",this.profile.get("name"))):n.equalTo("user",this.user.id),this.profileList=await n.find()}catch(n){console.error("Error loading profiles:",n),this.showToast("加载身份信息失败,请重试","danger")}finally{this.isLoading=!1}}async bindProfile(n){if(n?.id||(n=this.profileSearched),n?.id)try{await this.authProfile.bindProfile(n)}catch(n){console.error("Error binding profile:",n),this.showToast("绑定身份失败,请重试","danger")}}async searchProfile(){if(this.profileList=[],this.pdata.name&&this.pdata.mobile){this.isLoading=!0;try{let n=new Parse.Query("Profile");n.include("company"),n.equalTo("name",this.pdata.name),n.equalTo("mobile",this.pdata.mobile),this.profileList=await n.find(),this.profileList?.length<1&&this.showToast("该身份不存在,无法绑定!","warning")}catch(n){console.error("Error searching profile:",n),this.showToast("查询身份失败,请重试","danger")}finally{this.isLoading=!1}}else this.showToast("请填写完整信息以查询您的身份","warning")}async selectProfile(n){if(!n?.id)return;this.profileSearched=n;const e=await this.modalController.create({component:ProfileConfirmModalComponent,componentProps:{profile:n}});await e.present();const{data:o}=await e.onWillDismiss();o?.confirmed&&this.bindProfile(n)}goProfileManage(){this.router.navigate(["/common/manage/Profile",{rid:"x6xybaLWIC"}])}async onShowModal(){const n=await this.alertController.create({header:"团队成员管理",message:"您是企业管理员,可进入添加团队成员身份",buttons:[{text:"取消",role:"cancel"},{text:"前往管理",handler:()=>{this.goProfileManage()}}]});await n.present()}async showToast(n,e="success"){const o=await this.toastController.create({message:n,duration:2e3,color:e,position:"top"});await o.present()}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ProfileBindComponent,deps:[{token:i1.AuthProfileService},{token:i2.Router},{token:i3.AlertController},{token:i3.ToastController},{token:i4.CrossService},{token:i3.ModalController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:ProfileBindComponent,selector:"fm-profile-bind",host:{listeners:{"window:resize":"onResize($event)"}},ngImport:i0,template:'<ion-content>\n <ng-container *ngIf="cross?.navMenuType == \'mobile\'; else desktopTemplate">\n <div class="ion-padding tips-block">\n <img src="https://file-cloud.fmode.cn/CCuWCEM24z/20231213/45hm71034653179.png" alt="" />\n <div>请使用电脑浏览器打开</div>\n </div>\n </ng-container>\n\n <ng-template #desktopTemplate>\n <div class="profile-page ion-padding">\n <div class="title">企业项目管理系统</div>\n \n <div class="date-container">\n <div class="date">{{ now | date : "yyyy年MM月dd日" }}</div>\n <ion-button *ngIf="user?.get(\'type\') == \'admin\'" fill="clear" size="small" (click)="onShowModal()">\n <ion-icon slot="start" name="people"></ion-icon>\n 企业管理员\n </ion-button>\n </div>\n\n <ng-container *ngIf="profileList?.length > 0; else noProfileTemplate">\n <h2>\n 欢迎您:{{\n profile?.get("name") ||\n this.profileList[0]?.get("name") ||\n user?.get("nickname") ||\n user?.get("name") ||\n user?.get("username")\n }},请选择您的企业身份:\n </h2>\n </ng-container>\n \n <ng-template #noProfileTemplate>\n <h2>您还未绑定企业,请先联系管理员绑定!</h2>\n </ng-template>\n\n <ion-list *ngIf="profileList?.length > 0" lines="full">\n <ion-item \n *ngFor="let p of profileList" \n button \n detail="false"\n [color]="currentProfile == p.id ? \'primary\' : \'\'"\n (click)="selectProfile(p)">\n <ion-icon slot="start" name="person" color="primary"></ion-icon>\n <ion-label>\n <h2>{{ p.get("name") }}</h2>\n <p>企业:{{ p.get("company")?.get("name") || p.get("company")?.get("title") }}</p>\n </ion-label>\n <ion-icon *ngIf="currentProfile == p.id" slot="end" name="checkmark" color="primary"></ion-icon>\n </ion-item>\n </ion-list>\n\n <div class="ion-margin-top ion-text-center">\n <ion-text color="medium">\n <ion-icon name="information-circle-outline"></ion-icon>\n 若无帐套信息,请输入企业身份验证绑定\n </ion-text>\n </div>\n\n <div class="form-container ion-margin-top">\n <ion-item>\n <ion-icon slot="start" name="person-outline"></ion-icon>\n <ion-input \n type="text" \n [(ngModel)]="pdata.name" \n placeholder="请输入您的姓名"\n clearInput>\n </ion-input>\n </ion-item>\n\n <ion-item>\n <ion-icon slot="start" name="phone-portrait-outline"></ion-icon>\n <ion-input \n type="tel" \n [(ngModel)]="pdata.mobile" \n placeholder="请输入您手机号"\n clearInput>\n </ion-input>\n </ion-item>\n\n <ion-button \n expand="block" \n (click)="searchProfile()"\n [disabled]="!pdata.name || !pdata.mobile"\n class="ion-margin-top">\n 查询身份\n <ion-spinner *ngIf="isLoading" name="crescent"></ion-spinner>\n </ion-button>\n </div>\n </div>\n </ng-template>\n</ion-content>',styles:[".profile-page{max-width:500px;margin:0 auto;padding-top:20px}.profile-page .title{font-size:24px;font-weight:700;text-align:center;margin-bottom:30px;color:var(--ion-color-primary)}.profile-page .date-container{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px}.profile-page .date-container .date{font-size:16px;color:var(--ion-color-medium)}.profile-page h2{font-size:18px;color:var(--ion-color-dark);margin-bottom:20px}.profile-page ion-list{background:transparent;border-radius:8px;margin-bottom:20px}.profile-page ion-list ion-item{--border-radius: 8px;--padding-start: 10px;--inner-padding-end: 10px;margin-bottom:10px}.profile-page ion-list ion-item ion-label h2{font-weight:500;margin-bottom:5px}.profile-page ion-list ion-item ion-label p{color:var(--ion-color-medium);font-size:14px}.profile-page .form-container ion-item{--background: var(--ion-color-light);--border-radius: 8px;margin-bottom:15px}.tips-block{display:flex;flex-direction:column;align-items:center;justify-content:center;height:80vh;text-align:center}.tips-block img{width:220px;margin-bottom:20px}.tips-block div{font-size:18px;color:var(--ion-color-medium)}\n"],dependencies:[{kind:"directive",type:i5.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:i5.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"directive",type:i6.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i6.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"component",type:i3.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:i3.IonContent,selector:"ion-content",inputs:["color","fixedSlotPlacement","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:i3.IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"component",type:i3.IonInput,selector:"ion-input",inputs:["autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearInputIcon","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","spellcheck","step","type","value"]},{kind:"component",type:i3.IonItem,selector:"ion-item",inputs:["button","color","detail","detailIcon","disabled","download","href","lines","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i3.IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:i3.IonList,selector:"ion-list",inputs:["inset","lines","mode"]},{kind:"component",type:i3.IonSpinner,selector:"ion-spinner",inputs:["color","duration","name","paused"]},{kind:"component",type:i3.IonText,selector:"ion-text",inputs:["color","mode"]},{kind:"directive",type:i3.TextValueAccessor,selector:"ion-input:not([type=number]),ion-textarea,ion-searchbar"},{kind:"pipe",type:i5.DatePipe,name:"date"}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ProfileBindComponent,decorators:[{type:Component,args:[{selector:"fm-profile-bind",template:'<ion-content>\n <ng-container *ngIf="cross?.navMenuType == \'mobile\'; else desktopTemplate">\n <div class="ion-padding tips-block">\n <img src="https://file-cloud.fmode.cn/CCuWCEM24z/20231213/45hm71034653179.png" alt="" />\n <div>请使用电脑浏览器打开</div>\n </div>\n </ng-container>\n\n <ng-template #desktopTemplate>\n <div class="profile-page ion-padding">\n <div class="title">企业项目管理系统</div>\n \n <div class="date-container">\n <div class="date">{{ now | date : "yyyy年MM月dd日" }}</div>\n <ion-button *ngIf="user?.get(\'type\') == \'admin\'" fill="clear" size="small" (click)="onShowModal()">\n <ion-icon slot="start" name="people"></ion-icon>\n 企业管理员\n </ion-button>\n </div>\n\n <ng-container *ngIf="profileList?.length > 0; else noProfileTemplate">\n <h2>\n 欢迎您:{{\n profile?.get("name") ||\n this.profileList[0]?.get("name") ||\n user?.get("nickname") ||\n user?.get("name") ||\n user?.get("username")\n }},请选择您的企业身份:\n </h2>\n </ng-container>\n \n <ng-template #noProfileTemplate>\n <h2>您还未绑定企业,请先联系管理员绑定!</h2>\n </ng-template>\n\n <ion-list *ngIf="profileList?.length > 0" lines="full">\n <ion-item \n *ngFor="let p of profileList" \n button \n detail="false"\n [color]="currentProfile == p.id ? \'primary\' : \'\'"\n (click)="selectProfile(p)">\n <ion-icon slot="start" name="person" color="primary"></ion-icon>\n <ion-label>\n <h2>{{ p.get("name") }}</h2>\n <p>企业:{{ p.get("company")?.get("name") || p.get("company")?.get("title") }}</p>\n </ion-label>\n <ion-icon *ngIf="currentProfile == p.id" slot="end" name="checkmark" color="primary"></ion-icon>\n </ion-item>\n </ion-list>\n\n <div class="ion-margin-top ion-text-center">\n <ion-text color="medium">\n <ion-icon name="information-circle-outline"></ion-icon>\n 若无帐套信息,请输入企业身份验证绑定\n </ion-text>\n </div>\n\n <div class="form-container ion-margin-top">\n <ion-item>\n <ion-icon slot="start" name="person-outline"></ion-icon>\n <ion-input \n type="text" \n [(ngModel)]="pdata.name" \n placeholder="请输入您的姓名"\n clearInput>\n </ion-input>\n </ion-item>\n\n <ion-item>\n <ion-icon slot="start" name="phone-portrait-outline"></ion-icon>\n <ion-input \n type="tel" \n [(ngModel)]="pdata.mobile" \n placeholder="请输入您手机号"\n clearInput>\n </ion-input>\n </ion-item>\n\n <ion-button \n expand="block" \n (click)="searchProfile()"\n [disabled]="!pdata.name || !pdata.mobile"\n class="ion-margin-top">\n 查询身份\n <ion-spinner *ngIf="isLoading" name="crescent"></ion-spinner>\n </ion-button>\n </div>\n </div>\n </ng-template>\n</ion-content>',styles:[".profile-page{max-width:500px;margin:0 auto;padding-top:20px}.profile-page .title{font-size:24px;font-weight:700;text-align:center;margin-bottom:30px;color:var(--ion-color-primary)}.profile-page .date-container{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px}.profile-page .date-container .date{font-size:16px;color:var(--ion-color-medium)}.profile-page h2{font-size:18px;color:var(--ion-color-dark);margin-bottom:20px}.profile-page ion-list{background:transparent;border-radius:8px;margin-bottom:20px}.profile-page ion-list ion-item{--border-radius: 8px;--padding-start: 10px;--inner-padding-end: 10px;margin-bottom:10px}.profile-page ion-list ion-item ion-label h2{font-weight:500;margin-bottom:5px}.profile-page ion-list ion-item ion-label p{color:var(--ion-color-medium);font-size:14px}.profile-page .form-container ion-item{--background: var(--ion-color-light);--border-radius: 8px;margin-bottom:15px}.tips-block{display:flex;flex-direction:column;align-items:center;justify-content:center;height:80vh;text-align:center}.tips-block img{width:220px;margin-bottom:20px}.tips-block div{font-size:18px;color:var(--ion-color-medium)}\n"]}]}],ctorParameters:()=>[{type:i1.AuthProfileService},{type:i2.Router},{type:i3.AlertController},{type:i3.ToastController},{type:i4.CrossService},{type:i3.ModalController}],propDecorators:{onResize:[{type:HostListener,args:["window:resize",["$event"]]}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL3Byb2ZpbGUvcHJvZmlsZS1iaW5kL3Byb2ZpbGUtYmluZC5jb21wb25lbnQubWpz`
|
|
10
|
+
|
|
@@ -1,79 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
constructor(modalController) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
dismiss() {
|
|
12
|
-
this.modalController.dismiss();
|
|
13
|
-
}
|
|
14
|
-
confirm() {
|
|
15
|
-
this.modalController.dismiss({ confirmed: true });
|
|
16
|
-
}
|
|
17
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProfileConfirmModalComponent, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ProfileConfirmModalComponent, selector: "fm-profile-confirm-modal", inputs: { profile: "profile" }, ngImport: i0, template: `
|
|
19
|
-
<ion-header>
|
|
20
|
-
<ion-toolbar>
|
|
21
|
-
<ion-title>绑定身份</ion-title>
|
|
22
|
-
<ion-buttons slot="end">
|
|
23
|
-
<ion-button (click)="dismiss()">取消</ion-button>
|
|
24
|
-
</ion-buttons>
|
|
25
|
-
</ion-toolbar>
|
|
26
|
-
</ion-header>
|
|
27
|
-
|
|
28
|
-
<ion-content class="ion-padding">
|
|
29
|
-
<p>您确认绑定并切换至该身份吗?</p>
|
|
30
|
-
<ion-item lines="none">
|
|
31
|
-
<ion-label>
|
|
32
|
-
<h3>姓名:{{ profile?.get("name") }}</h3>
|
|
33
|
-
<p>帐套:{{ profile?.get("company")?.get("name") || profile?.get("company")?.get("title") }}</p>
|
|
34
|
-
</ion-label>
|
|
35
|
-
</ion-item>
|
|
36
|
-
</ion-content>
|
|
37
|
-
|
|
38
|
-
<ion-footer>
|
|
39
|
-
<ion-toolbar>
|
|
40
|
-
<ion-button expand="block" (click)="confirm()">确认绑定</ion-button>
|
|
41
|
-
</ion-toolbar>
|
|
42
|
-
</ion-footer>
|
|
43
|
-
`, isInline: true, dependencies: [{ kind: "component", type: i1.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: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }] }); }
|
|
44
|
-
}
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ProfileConfirmModalComponent, decorators: [{
|
|
46
|
-
type: Component,
|
|
47
|
-
args: [{
|
|
48
|
-
selector: 'fm-profile-confirm-modal',
|
|
49
|
-
template: `
|
|
50
|
-
<ion-header>
|
|
51
|
-
<ion-toolbar>
|
|
52
|
-
<ion-title>绑定身份</ion-title>
|
|
53
|
-
<ion-buttons slot="end">
|
|
54
|
-
<ion-button (click)="dismiss()">取消</ion-button>
|
|
55
|
-
</ion-buttons>
|
|
56
|
-
</ion-toolbar>
|
|
57
|
-
</ion-header>
|
|
58
|
-
|
|
59
|
-
<ion-content class="ion-padding">
|
|
60
|
-
<p>您确认绑定并切换至该身份吗?</p>
|
|
61
|
-
<ion-item lines="none">
|
|
62
|
-
<ion-label>
|
|
63
|
-
<h3>姓名:{{ profile?.get("name") }}</h3>
|
|
64
|
-
<p>帐套:{{ profile?.get("company")?.get("name") || profile?.get("company")?.get("title") }}</p>
|
|
65
|
-
</ion-label>
|
|
66
|
-
</ion-item>
|
|
67
|
-
</ion-content>
|
|
68
|
-
|
|
69
|
-
<ion-footer>
|
|
70
|
-
<ion-toolbar>
|
|
71
|
-
<ion-button expand="block" (click)="confirm()">确认绑定</ion-button>
|
|
72
|
-
</ion-toolbar>
|
|
73
|
-
</ion-footer>
|
|
74
|
-
`,
|
|
75
|
-
}]
|
|
76
|
-
}], ctorParameters: () => [{ type: i1.ModalController }], propDecorators: { profile: [{
|
|
77
|
-
type: Input
|
|
78
|
-
}] } });
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1jb25maXJtLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvdXNlci9wcm9maWxlL3Byb2ZpbGUtYmluZC9wcm9maWxlLWNvbmZpcm0tbW9kYWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDOzs7QUErQjFCLE1BQU0sT0FBTyw0QkFBNEI7SUFHdkMsWUFBb0IsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQUcsQ0FBQztJQUV4RCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQzsrR0FYVSw0QkFBNEI7bUdBQTVCLDRCQUE0QixnR0EzQjdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJUOzs0RkFFVSw0QkFBNEI7a0JBN0J4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCVDtpQkFDRjtvRkFFVSxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBwcm9maWxlLWNvbmZpcm0tbW9kYWwuY29tcG9uZW50LnRzXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5pbXBvcnQgUGFyc2UgZnJvbSBcInBhcnNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2ZtLXByb2ZpbGUtY29uZmlybS1tb2RhbCcsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxpb24taGVhZGVyPlxyXG4gICAgICA8aW9uLXRvb2xiYXI+XHJcbiAgICAgICAgPGlvbi10aXRsZT7nu5Hlrprouqvku708L2lvbi10aXRsZT5cclxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxyXG4gICAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImRpc21pc3MoKVwiPuWPlua2iDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICA8L2lvbi1idXR0b25zPlxyXG4gICAgICA8L2lvbi10b29sYmFyPlxyXG4gICAgPC9pb24taGVhZGVyPlxyXG5cclxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XHJcbiAgICAgIDxwPuaCqOehruiupOe7keWumuW5tuWIh+aNouiHs+ivpei6q+S7veWQl++8nzwvcD5cclxuICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiPlxyXG4gICAgICAgIDxpb24tbGFiZWw+XHJcbiAgICAgICAgICA8aDM+5aeT5ZCN77yae3sgcHJvZmlsZT8uZ2V0KFwibmFtZVwiKSB9fTwvaDM+XHJcbiAgICAgICAgICA8cD7luJDlpZfvvJp7eyBwcm9maWxlPy5nZXQoXCJjb21wYW55XCIpPy5nZXQoXCJuYW1lXCIpIHx8IHByb2ZpbGU/LmdldChcImNvbXBhbnlcIik/LmdldChcInRpdGxlXCIpIH19PC9wPlxyXG4gICAgICAgIDwvaW9uLWxhYmVsPlxyXG4gICAgICA8L2lvbi1pdGVtPlxyXG4gICAgPC9pb24tY29udGVudD5cclxuXHJcbiAgICA8aW9uLWZvb3Rlcj5cclxuICAgICAgPGlvbi10b29sYmFyPlxyXG4gICAgICAgIDxpb24tYnV0dG9uIGV4cGFuZD1cImJsb2NrXCIgKGNsaWNrKT1cImNvbmZpcm0oKVwiPuehruiupOe7keWumjwvaW9uLWJ1dHRvbj5cclxuICAgICAgPC9pb24tdG9vbGJhcj5cclxuICAgIDwvaW9uLWZvb3Rlcj5cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZmlsZUNvbmZpcm1Nb2RhbENvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgcHJvZmlsZTogUGFyc2UuT2JqZWN0O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsQ29udHJvbGxlcjogTW9kYWxDb250cm9sbGVyKSB7fVxyXG5cclxuICBkaXNtaXNzKCkge1xyXG4gICAgdGhpcy5tb2RhbENvbnRyb2xsZXIuZGlzbWlzcygpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybSgpIHtcclxuICAgIHRoaXMubW9kYWxDb250cm9sbGVyLmRpc21pc3MoeyBjb25maXJtZWQ6IHRydWUgfSk7XHJcbiAgfVxyXG59Il19
|
|
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/user/profile/profile-bind/profile-confirm-modal.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,Input}from"@angular/core";import{ModalController}from"@ionic/angular";import{FmodeParse,FmodeObject}from"@fmode/parse";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular";const Parse=FmodeParse.with("nova");export class ProfileConfirmModalComponent{constructor(o){this.modalController=o}dismiss(){this.modalController.dismiss()}confirm(){this.modalController.dismiss({confirmed:!0})}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ProfileConfirmModalComponent,deps:[{token:i1.ModalController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:ProfileConfirmModalComponent,selector:"fm-profile-confirm-modal",inputs:{profile:"profile"},ngImport:i0,template:'\n <ion-header>\n <ion-toolbar>\n <ion-title>绑定身份</ion-title>\n <ion-buttons slot="end">\n <ion-button (click)="dismiss()">取消</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <ion-content class="ion-padding">\n <p>您确认绑定并切换至该身份吗?</p>\n <ion-item lines="none">\n <ion-label>\n <h3>姓名:{{ profile?.get("name") }}</h3>\n <p>帐套:{{ profile?.get("company")?.get("name") || profile?.get("company")?.get("title") }}</p>\n </ion-label>\n </ion-item>\n </ion-content>\n\n <ion-footer>\n <ion-toolbar>\n <ion-button expand="block" (click)="confirm()">确认绑定</ion-button>\n </ion-toolbar>\n </ion-footer>\n ',isInline:!0,dependencies:[{kind:"component",type:i1.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:i1.IonButtons,selector:"ion-buttons",inputs:["collapse"]},{kind:"component",type:i1.IonContent,selector:"ion-content",inputs:["color","fixedSlotPlacement","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:i1.IonFooter,selector:"ion-footer",inputs:["collapse","mode","translucent"]},{kind:"component",type:i1.IonHeader,selector:"ion-header",inputs:["collapse","mode","translucent"]},{kind:"component",type:i1.IonItem,selector:"ion-item",inputs:["button","color","detail","detailIcon","disabled","download","href","lines","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:i1.IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:i1.IonTitle,selector:"ion-title",inputs:["color","size"]},{kind:"component",type:i1.IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ProfileConfirmModalComponent,decorators:[{type:Component,args:[{selector:"fm-profile-confirm-modal",template:'\n <ion-header>\n <ion-toolbar>\n <ion-title>绑定身份</ion-title>\n <ion-buttons slot="end">\n <ion-button (click)="dismiss()">取消</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <ion-content class="ion-padding">\n <p>您确认绑定并切换至该身份吗?</p>\n <ion-item lines="none">\n <ion-label>\n <h3>姓名:{{ profile?.get("name") }}</h3>\n <p>帐套:{{ profile?.get("company")?.get("name") || profile?.get("company")?.get("title") }}</p>\n </ion-label>\n </ion-item>\n </ion-content>\n\n <ion-footer>\n <ion-toolbar>\n <ion-button expand="block" (click)="confirm()">确认绑定</ion-button>\n </ion-toolbar>\n </ion-footer>\n '}]}],ctorParameters:()=>[{type:i1.ModalController}],propDecorators:{profile:[{type:Input}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL3Byb2ZpbGUvcHJvZmlsZS1iaW5kL3Byb2ZpbGUtY29uZmlybS1tb2RhbC5jb21wb25lbnQubWpz`
|
|
10
|
+
|