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,145 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
this.theme = 'bubble';
|
|
12
|
-
this.toolbar = [
|
|
13
|
-
[{ 'header': [1, 2, 3, 4, false] }],
|
|
14
|
-
['bold', 'italic', 'underline'],
|
|
15
|
-
// [{ 'font': [] }],
|
|
16
|
-
[{ 'list': 'bullet' }],
|
|
17
|
-
[{ 'align': [] }],
|
|
18
|
-
['code-block'],
|
|
19
|
-
];
|
|
20
|
-
/**工具条:补充AI按钮事件 */
|
|
21
|
-
this.onAIClick = new EventEmitter;
|
|
22
|
-
this.contentChanged = false;
|
|
23
|
-
this.onContentChange = new EventEmitter;
|
|
24
|
-
/**段落内容:选中及润色 */
|
|
25
|
-
this.selectText = ``;
|
|
26
|
-
this.optimizeText = ``;
|
|
27
|
-
this.isOptimizing = false;
|
|
28
|
-
this.onSelectChange = new EventEmitter;
|
|
29
|
-
}
|
|
30
|
-
ngOnInit() {
|
|
31
|
-
setTimeout(() => {
|
|
32
|
-
this.initQuillEditor();
|
|
33
|
-
}, 100);
|
|
34
|
-
}
|
|
35
|
-
initQuillEditor() {
|
|
36
|
-
this.oldContent = undefined;
|
|
37
|
-
let editorHtmlElement = this.editorComp?.nativeElement;
|
|
38
|
-
this.quill = new Quill(editorHtmlElement
|
|
39
|
-
// "#editor"
|
|
40
|
-
, {
|
|
41
|
-
readOnly: this.readOnly,
|
|
42
|
-
modules: {
|
|
43
|
-
syntax: { hljs },
|
|
44
|
-
toolbar: this.toolbar,
|
|
45
|
-
history: {
|
|
46
|
-
delay: 2000,
|
|
47
|
-
maxStack: 500,
|
|
48
|
-
userOnly: true
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
theme: this.theme,
|
|
52
|
-
});
|
|
53
|
-
/**
|
|
54
|
-
* 实现文章内容选中后设置至AI改写区域
|
|
55
|
-
*/
|
|
56
|
-
this.quill.on('selection-change', (range, oldRange, source) => {
|
|
57
|
-
if (range) {
|
|
58
|
-
if (range.length == 0) {
|
|
59
|
-
// console.log('User cursor is on', range.index);
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
let text = this.quill?.getText(range.index, range.length);
|
|
63
|
-
this.selectRange = range;
|
|
64
|
-
this.selectText = text || '';
|
|
65
|
-
this.onSelectChange.emit({
|
|
66
|
-
name: "select",
|
|
67
|
-
quill: this.quill,
|
|
68
|
-
range: this.selectRange,
|
|
69
|
-
text: this.selectText
|
|
70
|
-
});
|
|
71
|
-
this.cdRef.detectChanges(); // 触发选中文字属性变化检测
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
// console.log('Cursor not in the editor');
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
/**
|
|
79
|
-
* 实现文章内容加载及存储
|
|
80
|
-
*/
|
|
81
|
-
// 加载文章内容
|
|
82
|
-
this.quill.root.innerHTML = this.content || ``;
|
|
83
|
-
if (!this.oldContent) { // 记录原始加载文章
|
|
84
|
-
setTimeout(() => {
|
|
85
|
-
this.oldContent = this.quill?.root?.innerHTML;
|
|
86
|
-
}, 2000);
|
|
87
|
-
}
|
|
88
|
-
// 实时保存文章内容
|
|
89
|
-
this.quill.on("text-change", () => {
|
|
90
|
-
this.content = this.quill?.root?.innerHTML || "";
|
|
91
|
-
if (this.oldContent && this.content) {
|
|
92
|
-
this.contentChanged = this.content != this.oldContent;
|
|
93
|
-
this.onContentChange.emit(this.content);
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
// 添加ToolbarAI按钮
|
|
97
|
-
let toolbar = this.quill.getModule('toolbar');
|
|
98
|
-
let span = document.createElement("span");
|
|
99
|
-
span.className = 'ql-formats';
|
|
100
|
-
let button = document.createElement('button');
|
|
101
|
-
button.className = 'ql-ai-optimize';
|
|
102
|
-
button.innerHTML = 'AI';
|
|
103
|
-
button.onclick = () => {
|
|
104
|
-
this.onAIClick.emit({
|
|
105
|
-
name: "AI",
|
|
106
|
-
quill: this.quill,
|
|
107
|
-
range: this.selectRange,
|
|
108
|
-
text: this.selectText,
|
|
109
|
-
});
|
|
110
|
-
// this.aitab = "AI润色"
|
|
111
|
-
// this.optimizeContent();
|
|
112
|
-
};
|
|
113
|
-
span.appendChild(button);
|
|
114
|
-
toolbar.container.appendChild(span);
|
|
115
|
-
// 修复样式 quill修复 高亮代码语言选择 字体白色看不见
|
|
116
|
-
let style = document.createElement("style");
|
|
117
|
-
style.innerText = `.ql-bubble .ql-editor .ql-code-block-container .ql-ui{color:black!important;}`;
|
|
118
|
-
toolbar.container.appendChild(style);
|
|
119
|
-
// console.log(toolbar.container)
|
|
120
|
-
}
|
|
121
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmTextQuillComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
122
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FmTextQuillComponent, isStandalone: true, selector: "fm-text-quill", inputs: { readOnly: "readOnly", content: "content", theme: "theme", toolbar: "toolbar" }, outputs: { onAIClick: "onAIClick", onContentChange: "onContentChange", onSelectChange: "onSelectChange" }, viewQueries: [{ propertyName: "editorComp", first: true, predicate: ["editorComp"], descendants: true }], ngImport: i0, template: "<!-- \u9AD8\u4EAE\u533A\u57DF \u8BED\u8A00\u9009\u62E9\u9ED1\u8272\u5B57\u4F53 -->\r\n<style>.ql-bubble .ql-editor .ql-code-block-container .ql-ui{color:black!important;}</style>\r\n<div class=\"editor-container\" #editorComp id=\"editor\"></div>", styles: [":host-context(body.dark) ::ng-deep .ql-snow .ql-stroke{stroke:#fff!important}:host-context(body.dark) ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label:before,.ql-snow .ql-picker.ql-header .ql-picker-item:before{color:#fff}:host-context(body.dark) ::ng-deep .ql-snow h1,:host-context(body.dark) ::ng-deep .ql-snow h2,:host-context(body.dark) ::ng-deep .ql-snow h3,:host-context(body.dark) ::ng-deep .ql-snow h4,:host-context(body.dark) ::ng-deep .ql-snow h5,:host-context(body.dark) ::ng-deep .ql-snow h6{color:#fff}.editor-container{height:auto}.editor-container .ql-editor{padding:0!important}.ql-editor{padding:0 2px!important}::ng-deep .ql-container.ql-snow{border:none}::ng-deep .ql-toolbar.ql-snow{border:none;border-radius:10px}.ql-toolbar.ql-snow{border:none!important}\n", ".ql-bubble .ql-editor .ql-code-block-container .ql-ui{color:black!important;}"] }); }
|
|
123
|
-
}
|
|
124
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmTextQuillComponent, decorators: [{
|
|
125
|
-
type: Component,
|
|
126
|
-
args: [{ selector: 'fm-text-quill', standalone: true, imports: [], template: "<!-- \u9AD8\u4EAE\u533A\u57DF \u8BED\u8A00\u9009\u62E9\u9ED1\u8272\u5B57\u4F53 -->\r\n<style>.ql-bubble .ql-editor .ql-code-block-container .ql-ui{color:black!important;}</style>\r\n<div class=\"editor-container\" #editorComp id=\"editor\"></div>", styles: [":host-context(body.dark) ::ng-deep .ql-snow .ql-stroke{stroke:#fff!important}:host-context(body.dark) ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label:before,.ql-snow .ql-picker.ql-header .ql-picker-item:before{color:#fff}:host-context(body.dark) ::ng-deep .ql-snow h1,:host-context(body.dark) ::ng-deep .ql-snow h2,:host-context(body.dark) ::ng-deep .ql-snow h3,:host-context(body.dark) ::ng-deep .ql-snow h4,:host-context(body.dark) ::ng-deep .ql-snow h5,:host-context(body.dark) ::ng-deep .ql-snow h6{color:#fff}.editor-container{height:auto}.editor-container .ql-editor{padding:0!important}.ql-editor{padding:0 2px!important}::ng-deep .ql-container.ql-snow{border:none}::ng-deep .ql-toolbar.ql-snow{border:none;border-radius:10px}.ql-toolbar.ql-snow{border:none!important}\n", ".ql-bubble .ql-editor .ql-code-block-container .ql-ui{color:black!important;}"] }]
|
|
127
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { editorComp: [{
|
|
128
|
-
type: ViewChild,
|
|
129
|
-
args: ["editorComp"]
|
|
130
|
-
}], readOnly: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], content: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], theme: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], toolbar: [{
|
|
137
|
-
type: Input
|
|
138
|
-
}], onAIClick: [{
|
|
139
|
-
type: Output
|
|
140
|
-
}], onContentChange: [{
|
|
141
|
-
type: Output
|
|
142
|
-
}], onSelectChange: [{
|
|
143
|
-
type: Output
|
|
144
|
-
}] } });
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm0tdGV4dC1xdWlsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL3RleHQvZm0tdGV4dC1xdWlsbC9mbS10ZXh0LXF1aWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvdGV4dC9mbS10ZXh0LXF1aWxsL2ZtLXRleHQtcXVpbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFnQixLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxLQUFnQixNQUFNLE9BQU8sQ0FBQztBQUNyQyxPQUFPLElBQUksTUFBTSxjQUFjLENBQUM7O0FBa0JoQyxNQUFNLE9BQU8sb0JBQW9CO0lBZS9CLFlBQ1UsS0FBdUI7UUFBdkIsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFaeEIsYUFBUSxHQUFXLEtBQUssQ0FBQztRQUN6QixZQUFPLEdBQW9CLEVBQUUsQ0FBQTtRQUM3QixVQUFLLEdBQVUsUUFBUSxDQUFBO1FBQ3ZCLFlBQU8sR0FBYztZQUM1QixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQztZQUMvQixvQkFBb0I7WUFDcEIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUN0QixDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLENBQUMsWUFBWSxDQUFDO1NBQ2Ys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V0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBDLGdDQUFnQztRQUNoQyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzNDLEtBQUssQ0FBQyxTQUFTLEdBQUcsK0VBQStFLENBQUE7UUFDakcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEMsaUNBQWlDO0lBQ25DLENBQUM7K0dBL0hVLG9CQUFvQjttR0FBcEIsb0JBQW9CLHdYQ3JCakMsd1BBRTREOzs0RkRtQi9DLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxlQUFlLGNBR2IsSUFBSSxXQUNSLEVBQUU7c0ZBR2UsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUdkLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBa0JJLFNBQVM7c0JBQWxCLE1BQU07Z0JBS0csZUFBZTtzQkFBeEIsTUFBTTtnQkFRRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVmlld0NoaWxkLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgRWxlbWVudFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IFF1aWxsLCB7IFJhbmdlIH0gZnJvbSAncXVpbGwnO1xyXG5pbXBvcnQgaGxqcyBmcm9tIFwiaGlnaGxpZ2h0LmpzXCI7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW50ZXJmYWNlIFF1aWxsQ2hhbmdle1xyXG4gIHF1aWxsOlF1aWxsfHVuZGVmaW5lZCxcclxuICBuYW1lOnN0cmluZ3x1bmRlZmluZWQsXHJcbiAgcmFuZ2U6UmFuZ2V8dW5kZWZpbmVkLFxyXG4gIHRleHQ6c3RyaW5nfHVuZGVmaW5lZCxcclxufVxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZm0tdGV4dC1xdWlsbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZtLXRleHQtcXVpbGwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZtLXRleHQtcXVpbGwuY29tcG9uZW50LnNjc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6W11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZtVGV4dFF1aWxsQ29tcG9uZW50ICBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcImVkaXRvckNvbXBcIikgZWRpdG9yQ29tcDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZFxyXG4gIHF1aWxsOiBRdWlsbCB8IHVuZGVmaW5lZFxyXG5cclxuICBASW5wdXQoKSByZWFkT25seTpib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY29udGVudDpzdHJpbmd8dW5kZWZpbmVkID0gYGBcclxuICBASW5wdXQoKSB0aGVtZTpzdHJpbmcgPSAnYnViYmxlJ1xyXG4gIEBJbnB1dCgpIHRvb2xiYXI6QXJyYXk8YW55PiA9IFtcclxuICAgIFt7ICdoZWFkZXInOiBbMSwgMiwgMywgNCwgZmFsc2VdIH1dLFxyXG4gICAgWydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnXSxcclxuICAgIC8vIFt7ICdmb250JzogW10gfV0sXHJcbiAgICBbeyAnbGlzdCc6ICdidWxsZXQnIH1dLFxyXG4gICAgW3sgJ2FsaWduJzogW10gfV0sXHJcbiAgICBbJ2NvZGUtYmxvY2snXSxcclxuICBdO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZFJlZjpDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmluaXRRdWlsbEVkaXRvcigpO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcbiAgLyoq5bel5YW35p2h77ya6KGl5YWFQUnmjInpkq7kuovku7YgKi9cclxuICBAT3V0cHV0KCkgb25BSUNsaWNrOkV2ZW50RW1pdHRlcjxRdWlsbENoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyPFF1aWxsQ2hhbmdlPlxyXG5cclxuICAvKirmlofnq6DlhoXlrrnvvJrliKTlrprmmK/lkKbmm7TmlLkgKi9cclxuICBvbGRDb250ZW50OnN0cmluZ3x1bmRlZmluZWRcclxuICBjb250ZW50Q2hhbmdlZDpib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIG9uQ29udGVudENoYW5nZTpFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPlxyXG5cclxuICAvKirmrrXokL3lhoXlrrnvvJrpgInkuK3lj4rmtqboibIgKi9cclxuICBzZWxlY3RUZXh0OiBzdHJpbmcgPSBgYFxyXG4gIHNlbGVjdFJhbmdlOlJhbmdlfHVuZGVmaW5lZFxyXG4gIG9wdGltaXplVGV4dDogc3RyaW5nID0gYGBcclxuICBpc09wdGltaXppbmc6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIG9wdGltaXplJDpTdWJzY3JpcHRpb258dW5kZWZpbmVkO1xyXG4gIEBPdXRwdXQoKSBvblNlbGVjdENoYW5nZTpFdmVudEVtaXR0ZXI8UXVpbGxDaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxRdWlsbENoYW5nZT5cclxuXHJcblxyXG4gIGluaXRRdWlsbEVkaXRvcigpe1xyXG4gICAgdGhpcy5vbGRDb250ZW50ID0gdW5kZWZpbmVkXHJcbiAgICBsZXQgZWRpdG9ySHRtbEVsZW1lbnQgPSB0aGlzLmVkaXRvckNvbXA/Lm5hdGl2ZUVsZW1lbnRcclxuICAgIHRoaXMucXVpbGwgPSBuZXcgUXVpbGwoXHJcbiAgICAgIGVkaXRvckh0bWxFbGVtZW50XHJcbiAgICAgIC8vIFwiI2VkaXRvclwiXHJcbiAgICAgICwge1xyXG4gICAgICAgIHJlYWRPbmx5OnRoaXMucmVhZE9ubHksXHJcbiAgICAgICAgbW9kdWxlczoge1xyXG4gICAgICAgIHN5bnRheDogeyBobGpzIH0sXHJcbiAgICAgICAgdG9vbGJhcjogdGhpcy50b29sYmFyLFxyXG4gICAgICAgIGhpc3Rvcnk6IHtcclxuICAgICAgICAgIGRlbGF5OiAyMDAwLFxyXG4gICAgICAgICAgbWF4U3RhY2s6IDUwMCxcclxuICAgICAgICAgIHVzZXJPbmx5OiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAgdGhlbWU6IHRoaXMudGhlbWUsXHJcbiAgICB9KTtcclxuICAgIC8qKlxyXG4gICAgICog5a6e546w5paH56ug5YaF5a656YCJ5Lit5ZCO6K6+572u6IezQUnmlLnlhpnljLrln59cclxuICAgICAqL1xyXG4gICAgdGhpcy5xdWlsbC5vbignc2VsZWN0aW9uLWNoYW5nZScsIChyYW5nZSwgb2xkUmFuZ2UsIHNvdXJjZSkgPT4ge1xyXG4gICAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgICBpZiAocmFuZ2UubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdVc2VyIGN1cnNvciBpcyBvbicsIHJhbmdlLmluZGV4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHRleHQgPSB0aGlzLnF1aWxsPy5nZXRUZXh0KHJhbmdlLmluZGV4LCByYW5nZS5sZW5ndGgpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RSYW5nZSA9IHJhbmdlXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdFRleHQgPSB0ZXh0IHx8ICcnXHJcbiAgICAgICAgICB0aGlzLm9uU2VsZWN0Q2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgICBuYW1lOlwic2VsZWN0XCIsXHJcbiAgICAgICAgICAgIHF1aWxsOnRoaXMucXVpbGwsXHJcbiAgICAgICAgICAgIHJhbmdlOnRoaXMuc2VsZWN0UmFuZ2UsXHJcbiAgICAgICAgICAgIHRleHQ6dGhpcy5zZWxlY3RUZXh0XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7IC8vIOinpuWPkemAieS4reaWh+Wtl+WxnuaAp+WPmOWMluajgOa1i1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnQ3Vyc29yIG5vdCBpbiB0aGUgZWRpdG9yJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLyoqXHJcbiAgICAgKiDlrp7njrDmlofnq6DlhoXlrrnliqDovb3lj4rlrZjlgqhcclxuICAgICAqL1xyXG4gICAgLy8g5Yqg6L295paH56ug5YaF5a65XHJcbiAgICB0aGlzLnF1aWxsLnJvb3QuaW5uZXJIVE1MID0gdGhpcy5jb250ZW50IHx8IGBgXHJcblxyXG4gICAgaWYoIXRoaXMub2xkQ29udGVudCkgeyAvLyDorrDlvZXljp/lp4vliqDovb3mlofnq6BcclxuICAgICAgc2V0VGltZW91dCgoKT0+eyAvLyDkv67mraNobGpzLXVuZGVmaW5lZOWvvOiHtOWJjeWQjuaWh+S4jeS4gOiHtFxyXG4gICAgICAgIHRoaXMub2xkQ29udGVudCA9IHRoaXMucXVpbGw/LnJvb3Q/LmlubmVySFRNTDtcclxuICAgICAgfSwyMDAwKVxyXG4gICAgfVxyXG4gICAgLy8g5a6e5pe25L+d5a2Y5paH56ug5YaF5a65XHJcbiAgICB0aGlzLnF1aWxsLm9uKFwidGV4dC1jaGFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLnF1aWxsPy5yb290Py5pbm5lckhUTUwgfHwgXCJcIlxyXG4gICAgICBpZih0aGlzLm9sZENvbnRlbnQgJiYgdGhpcy5jb250ZW50KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZW50Q2hhbmdlZCA9IHRoaXMuY29udGVudCAhPSB0aGlzLm9sZENvbnRlbnRcclxuICAgICAgICB0aGlzLm9uQ29udGVudENoYW5nZS5lbWl0KHRoaXMuY29udGVudClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC8vIOa3u+WKoFRvb2xiYXJBSeaMiemSrlxyXG4gICAgbGV0IHRvb2xiYXI6YW55ID0gdGhpcy5xdWlsbC5nZXRNb2R1bGUoJ3Rvb2xiYXInKTtcclxuICAgIGxldCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIilcclxuICAgIHNwYW4uY2xhc3NOYW1lID0gJ3FsLWZvcm1hdHMnO1xyXG4gICAgbGV0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4gICAgYnV0dG9uLmNsYXNzTmFtZSA9ICdxbC1haS1vcHRpbWl6ZSc7XHJcbiAgICBidXR0b24uaW5uZXJIVE1MID0gJ0FJJztcclxuICAgIGJ1dHRvbi5vbmNsaWNrID0gKCk9PntcclxuICAgICAgdGhpcy5vbkFJQ2xpY2suZW1pdCh7XHJcbiAgICAgICAgbmFtZTpcIkFJXCIsXHJcbiAgICAgICAgcXVpbGw6dGhpcy5xdWlsbCxcclxuICAgICAgICByYW5nZTp0aGlzLnNlbGVjdFJhbmdlLFxyXG4gICAgICAgIHRleHQ6dGhpcy5zZWxlY3RUZXh0LFxyXG4gICAgICB9KVxyXG4gICAgICAvLyB0aGlzLmFpdGFiID0gXCJBSea2puiJslwiXHJcbiAgICAgIC8vIHRoaXMub3B0aW1pemVDb250ZW50KCk7XHJcbiAgICB9XHJcbiAgICBzcGFuLmFwcGVuZENoaWxkKGJ1dHRvbilcclxuICAgIHRvb2xiYXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHNwYW4pO1xyXG5cclxuICAgIC8vIOS/ruWkjeagt+W8jyBxdWlsbOS/ruWkjSDpq5jkuq7ku6PnoIHor63oqIDpgInmi6kg5a2X5L2T55m96Imy55yL5LiN6KeBXHJcbiAgICBsZXQgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIilcclxuICAgIHN0eWxlLmlubmVyVGV4dCA9IGAucWwtYnViYmxlIC5xbC1lZGl0b3IgLnFsLWNvZGUtYmxvY2stY29udGFpbmVyIC5xbC11aXtjb2xvcjpibGFjayFpbXBvcnRhbnQ7fWBcclxuICAgIHRvb2xiYXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHN0eWxlKVxyXG4gICAgLy8gY29uc29sZS5sb2codG9vbGJhci5jb250YWluZXIpXHJcbiAgfVxyXG59XHJcbiIsIjwhLS0g6auY5Lqu5Yy65Z+fIOivreiogOmAieaLqem7keiJsuWtl+S9kyAtLT5cclxuPHN0eWxlPi5xbC1idWJibGUgLnFsLWVkaXRvciAucWwtY29kZS1ibG9jay1jb250YWluZXIgLnFsLXVpe2NvbG9yOmJsYWNrIWltcG9ydGFudDt9PC9zdHlsZT5cclxuPGRpdiBjbGFzcz1cImVkaXRvci1jb250YWluZXJcIiAjZWRpdG9yQ29tcCBpZD1cImVkaXRvclwiPjwvZGl2PiJdfQ==
|
|
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/text/fm-text-quill/fm-text-quill.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component}from"@angular/core";import{ViewChild,Input,Output,EventEmitter,ElementRef,ChangeDetectorRef}from"@angular/core";import Quill from"quill";import hljs from"highlight.js";import*as i0 from"@angular/core";export class FmTextQuillComponent{constructor(e){this.cdRef=e,this.readOnly=!1,this.content="",this.theme="bubble",this.toolbar=[[{header:[1,2,3,4,!1]}],["bold","italic","underline"],[{list:"bullet"}],[{align:[]}],["code-block"]],this.onAIClick=new EventEmitter,this.contentChanged=!1,this.onContentChange=new EventEmitter,this.selectText="",this.optimizeText="",this.isOptimizing=!1,this.onSelectChange=new EventEmitter}ngOnInit(){setTimeout((()=>{this.initQuillEditor()}),100)}initQuillEditor(){this.oldContent=void 0;let e=this.editorComp?.nativeElement;this.quill=new Quill(e,{readOnly:this.readOnly,modules:{syntax:{hljs:hljs},toolbar:this.toolbar,history:{delay:2e3,maxStack:500,userOnly:!0}},theme:this.theme}),this.quill.on("selection-change",((e,t,o)=>{if(e)if(0==e.length);else{let t=this.quill?.getText(e.index,e.length);this.selectRange=e,this.selectText=t||"",this.onSelectChange.emit({name:"select",quill:this.quill,range:this.selectRange,text:this.selectText}),this.cdRef.detectChanges()}})),this.quill.root.innerHTML=this.content||"",this.oldContent||setTimeout((()=>{this.oldContent=this.quill?.root?.innerHTML}),2e3),this.quill.on("text-change",(()=>{this.content=this.quill?.root?.innerHTML||"",this.oldContent&&this.content&&(this.contentChanged=this.content!=this.oldContent,this.onContentChange.emit(this.content))}));let t=this.quill.getModule("toolbar"),o=document.createElement("span");o.className="ql-formats";let n=document.createElement("button");n.className="ql-ai-optimize",n.innerHTML="AI",n.onclick=()=>{this.onAIClick.emit({name:"AI",quill:this.quill,range:this.selectRange,text:this.selectText})},o.appendChild(n),t.container.appendChild(o);let l=document.createElement("style");l.innerText=".ql-bubble .ql-editor .ql-code-block-container .ql-ui{color:black!important;}",t.container.appendChild(l)}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmTextQuillComponent,deps:[{token:i0.ChangeDetectorRef}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:FmTextQuillComponent,isStandalone:!0,selector:"fm-text-quill",inputs:{readOnly:"readOnly",content:"content",theme:"theme",toolbar:"toolbar"},outputs:{onAIClick:"onAIClick",onContentChange:"onContentChange",onSelectChange:"onSelectChange"},viewQueries:[{propertyName:"editorComp",first:!0,predicate:["editorComp"],descendants:!0}],ngImport:i0,template:'\x3c!-- 高亮区域 语言选择黑色字体 --\x3e\n<style>.ql-bubble .ql-editor .ql-code-block-container .ql-ui{color:black!important;}</style>\n<div class="editor-container" #editorComp id="editor"></div>',styles:[":host-context(body.dark) ::ng-deep .ql-snow .ql-stroke{stroke:#fff!important}:host-context(body.dark) ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label:before,.ql-snow .ql-picker.ql-header .ql-picker-item:before{color:#fff}:host-context(body.dark) ::ng-deep .ql-snow h1,:host-context(body.dark) ::ng-deep .ql-snow h2,:host-context(body.dark) ::ng-deep .ql-snow h3,:host-context(body.dark) ::ng-deep .ql-snow h4,:host-context(body.dark) ::ng-deep .ql-snow h5,:host-context(body.dark) ::ng-deep .ql-snow h6{color:#fff}.editor-container{height:auto}.editor-container .ql-editor{padding:0!important}.ql-editor{padding:0 2px!important}::ng-deep .ql-container.ql-snow{border:none}::ng-deep .ql-toolbar.ql-snow{border:none;border-radius:10px}.ql-toolbar.ql-snow{border:none!important}\n",".ql-bubble .ql-editor .ql-code-block-container .ql-ui{color:black!important;}"]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:FmTextQuillComponent,decorators:[{type:Component,args:[{selector:"fm-text-quill",standalone:!0,imports:[],template:'\x3c!-- 高亮区域 语言选择黑色字体 --\x3e\n<style>.ql-bubble .ql-editor .ql-code-block-container .ql-ui{color:black!important;}</style>\n<div class="editor-container" #editorComp id="editor"></div>',styles:[":host-context(body.dark) ::ng-deep .ql-snow .ql-stroke{stroke:#fff!important}:host-context(body.dark) ::ng-deep .ql-snow .ql-picker.ql-header .ql-picker-label:before,.ql-snow .ql-picker.ql-header .ql-picker-item:before{color:#fff}:host-context(body.dark) ::ng-deep .ql-snow h1,:host-context(body.dark) ::ng-deep .ql-snow h2,:host-context(body.dark) ::ng-deep .ql-snow h3,:host-context(body.dark) ::ng-deep .ql-snow h4,:host-context(body.dark) ::ng-deep .ql-snow h5,:host-context(body.dark) ::ng-deep .ql-snow h6{color:#fff}.editor-container{height:auto}.editor-container .ql-editor{padding:0!important}.ql-editor{padding:0 2px!important}::ng-deep .ql-container.ql-snow{border:none}::ng-deep .ql-toolbar.ql-snow{border:none;border-radius:10px}.ql-toolbar.ql-snow{border:none!important}\n",".ql-bubble .ql-editor .ql-code-block-container .ql-ui{color:black!important;}"]}]}],ctorParameters:()=>[{type:i0.ChangeDetectorRef}],propDecorators:{editorComp:[{type:ViewChild,args:["editorComp"]}],readOnly:[{type:Input}],content:[{type:Input}],theme:[{type:Input}],toolbar:[{type:Input}],onAIClick:[{type:Output}],onContentChange:[{type:Output}],onSelectChange:[{type:Output}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi90ZXh0L2ZtLXRleHQtcXVpbGwvZm0tdGV4dC1xdWlsbC5jb21wb25lbnQubWpz`
|
|
10
|
+
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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/text/index.mjs
|
|
7
|
+
*/
|
|
8
|
+
export*from"./fm-text-quill/fm-text-quill.component";export*from"./fm-article-editor/fm-article-editor.component";export*from"./fm-article-editor/article.service";
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi90ZXh0L2luZGV4Lm1qcw==`
|
|
10
|
+
|
|
@@ -1,222 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import * as i2 from
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
constructor(ncloud, authServ, http) {
|
|
12
|
-
this.ncloud = ncloud;
|
|
13
|
-
this.authServ = authServ;
|
|
14
|
-
this.http = http;
|
|
15
|
-
this.company = "";
|
|
16
|
-
this.billing = {
|
|
17
|
-
credit: {
|
|
18
|
-
usedDetail: {},
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
this.wxAppId = "";
|
|
22
|
-
this.wxpayEnabled = false;
|
|
23
|
-
this.appid = localStorage.getItem("WECHAT_APP_ID") || "wxb4193c93ae9aa696";
|
|
24
|
-
this.company = this.authServ.company || localStorage.getItem("company");
|
|
25
|
-
this.getBilling();
|
|
26
|
-
this.getProfile();
|
|
27
|
-
this.getUserOpenid();
|
|
28
|
-
}
|
|
29
|
-
/* 获取认证信息 */
|
|
30
|
-
async getProfile() {
|
|
31
|
-
let uid = Parse.User.current()?.id;
|
|
32
|
-
if (!uid)
|
|
33
|
-
return;
|
|
34
|
-
let query = new Parse.Query("Profile");
|
|
35
|
-
query.equalTo("user", uid);
|
|
36
|
-
query.equalTo("company", this.company);
|
|
37
|
-
query.notEqualTo("isDeleted", true);
|
|
38
|
-
let profile = await query.first();
|
|
39
|
-
if (profile?.id) {
|
|
40
|
-
this.profile = profile;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
async getBilling() {
|
|
44
|
-
let data;
|
|
45
|
-
if (!Parse.User.current()?.getSessionToken())
|
|
46
|
-
return; // 用户登陆时才可查询账单
|
|
47
|
-
try {
|
|
48
|
-
data = await this.ncloud.apig("aigc/account", null, "get");
|
|
49
|
-
}
|
|
50
|
-
catch (err) { }
|
|
51
|
-
if (data?.credit) {
|
|
52
|
-
this.billing = data;
|
|
53
|
-
}
|
|
54
|
-
return data;
|
|
55
|
-
}
|
|
56
|
-
/* 如果是微信内置浏览器,获取登录code */
|
|
57
|
-
async getUserOpenid() {
|
|
58
|
-
let ua = navigator.userAgent.toLowerCase();
|
|
59
|
-
let isWeixin = ua.indexOf("micromessenger") != -1;
|
|
60
|
-
let code = this.getQueryStringByName("code");
|
|
61
|
-
let openid = localStorage.getItem("openid");
|
|
62
|
-
if (!openid) {
|
|
63
|
-
if (!Parse.User.current())
|
|
64
|
-
return;
|
|
65
|
-
let wechat = Parse.User.current().get("wechat");
|
|
66
|
-
openid = wechat?.[this.appid]?.openid;
|
|
67
|
-
if (isWeixin) {
|
|
68
|
-
if (!code) {
|
|
69
|
-
this.authWechat();
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
await this.getwechat(code);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
authWechat(url = "/account/billing") {
|
|
78
|
-
if (!localStorage.getItem("openid")) {
|
|
79
|
-
// let REDIRECT_URI = "https://ai.fmode.cn" + url;
|
|
80
|
-
let REDIRECT_URI = window.location.href;
|
|
81
|
-
REDIRECT_URI = encodeURIComponent(REDIRECT_URI);
|
|
82
|
-
// console.log(REDIRECT_URI);
|
|
83
|
-
// console.log(
|
|
84
|
-
// "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
|
|
85
|
-
// this.appid +
|
|
86
|
-
// "&redirect_uri=" +
|
|
87
|
-
// REDIRECT_URI +
|
|
88
|
-
// "&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect"
|
|
89
|
-
// );
|
|
90
|
-
window.location.href =
|
|
91
|
-
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
|
|
92
|
-
this.appid +
|
|
93
|
-
"&redirect_uri=" +
|
|
94
|
-
REDIRECT_URI +
|
|
95
|
-
"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
//根据QueryString参数名称获取值
|
|
100
|
-
getQueryStringByName(name) {
|
|
101
|
-
let result = location.search.match(new RegExp("[?&]" + name + "=([^&]+)", "i"));
|
|
102
|
-
if (result == null || result.length < 1) {
|
|
103
|
-
return "";
|
|
104
|
-
}
|
|
105
|
-
return result[1];
|
|
106
|
-
}
|
|
107
|
-
async getwechat(code, url = "/account/billing") {
|
|
108
|
-
return new Promise(async (resolve, reject) => {
|
|
109
|
-
this.http
|
|
110
|
-
.post(`https://server.fmode.cn/api/wechat/get_wx`, {
|
|
111
|
-
company: this.company,
|
|
112
|
-
code: code,
|
|
113
|
-
})
|
|
114
|
-
.subscribe(async (res) => {
|
|
115
|
-
console.log(res);
|
|
116
|
-
if (res && res.code == 200 && res.data.openid) {
|
|
117
|
-
let openid = res.data.openid;
|
|
118
|
-
// localStorage.setItem('authData', JSON.stringify(res.data))
|
|
119
|
-
localStorage.setItem("openid", openid);
|
|
120
|
-
localStorage.removeItem("code");
|
|
121
|
-
let wxopts = {};
|
|
122
|
-
wxopts[this.appid] = {
|
|
123
|
-
"openid": openid,
|
|
124
|
-
},
|
|
125
|
-
Parse.User.current().set("wechat", wxopts);
|
|
126
|
-
await Parse.User.current().save();
|
|
127
|
-
resolve(true);
|
|
128
|
-
}
|
|
129
|
-
}, async (err) => {
|
|
130
|
-
console.log("Error updating items", err);
|
|
131
|
-
this.authWechat(url);
|
|
132
|
-
reject(false);
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
/* 获取微信签名 */
|
|
137
|
-
getWXSignPackageInWechat() {
|
|
138
|
-
let params = {
|
|
139
|
-
company: this.company,
|
|
140
|
-
href: encodeURIComponent(location.href.split("?")[0]),
|
|
141
|
-
};
|
|
142
|
-
this.http
|
|
143
|
-
.post(`https://server.fmode.cn/api/wechat/getconfig`, params)
|
|
144
|
-
.subscribe((response) => {
|
|
145
|
-
// 返回的签名信息
|
|
146
|
-
let res = response;
|
|
147
|
-
const signPackage = res.data;
|
|
148
|
-
this.wxAppId = signPackage.appid;
|
|
149
|
-
this.wxpayEnabled = true;
|
|
150
|
-
wx.config({
|
|
151
|
-
debug: false, // 开启调试模式
|
|
152
|
-
appId: signPackage.appid, // 必填,公众号的唯一标识
|
|
153
|
-
timestamp: signPackage.timestamp, // 必填,生成签名的时间戳
|
|
154
|
-
nonceStr: signPackage.nonceStr, // 必填,生成签名的随机串
|
|
155
|
-
signature: signPackage.signature, // 必填,签名,见附录1
|
|
156
|
-
jsApiList: [
|
|
157
|
-
"chooseWXPay", // JSAPI微信支付
|
|
158
|
-
'onMenuShareTimeline', //分享到微信朋友圈
|
|
159
|
-
'onMenuShareAppMessage', //分享给微信朋友
|
|
160
|
-
'onMenuShareQQ', //分享到QQ
|
|
161
|
-
'onMenuShareQZone', //分享到QQ空间
|
|
162
|
-
'updateAppMessageShareData', //分享到微信及QQ(新接口)
|
|
163
|
-
'updateTimelineShareData' //分享到朋友圈”及“分享到QQ空间(新接口
|
|
164
|
-
], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
|
|
165
|
-
});
|
|
166
|
-
let url = 'https://ai.fmode.cn';
|
|
167
|
-
let pathname = location.pathname;
|
|
168
|
-
url + pathname + '?invite=' + Parse.User.current()?.id;
|
|
169
|
-
let shareInfo = this.shareInfo || {
|
|
170
|
-
title: '飞码AI', // 分享标题
|
|
171
|
-
desc: '解放创意引领未来|国际前沿的AIGC平台', // 分享描述
|
|
172
|
-
link: url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
|
|
173
|
-
type: 'link', //分享类型,music、video或link,不填默认为link
|
|
174
|
-
imgUrl: 'https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png', // 分享图标
|
|
175
|
-
success: function () {
|
|
176
|
-
// 设置成功
|
|
177
|
-
console.log('分享成功');
|
|
178
|
-
},
|
|
179
|
-
error: function () {
|
|
180
|
-
console.log('分享失败');
|
|
181
|
-
},
|
|
182
|
-
cancel: function () {
|
|
183
|
-
console.log('取消分享');
|
|
184
|
-
}
|
|
185
|
-
};
|
|
186
|
-
wx.ready(() => {
|
|
187
|
-
wx.updateAppMessageShareData(shareInfo); //分享到微信好友或者qq好友
|
|
188
|
-
wx.updateTimelineShareData(shareInfo); //分享到朋友圈或者qq空间
|
|
189
|
-
});
|
|
190
|
-
wx.error(() => { });
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
async saveAccountLog(info, orderid, company, message) {
|
|
194
|
-
let url = "https://server.fmode.cn/api/apig/saveAccountLog";
|
|
195
|
-
return new Promise((res, rej) => {
|
|
196
|
-
this.http
|
|
197
|
-
.post(url, {
|
|
198
|
-
company: company,
|
|
199
|
-
uid: Parse.User.current().id,
|
|
200
|
-
orderid: orderid,
|
|
201
|
-
info: info,
|
|
202
|
-
})
|
|
203
|
-
.subscribe((data) => {
|
|
204
|
-
console.log(data);
|
|
205
|
-
res(true);
|
|
206
|
-
}, (err) => {
|
|
207
|
-
console.warn(err);
|
|
208
|
-
message && message.error("请求超时,请稍后再试");
|
|
209
|
-
rej();
|
|
210
|
-
});
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccountService, deps: [{ token: i1.NovaCloudService }, { token: i2.AuthService }, { token: i3.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
214
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccountService, providedIn: "root" }); }
|
|
215
|
-
}
|
|
216
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccountService, decorators: [{
|
|
217
|
-
type: Injectable,
|
|
218
|
-
args: [{
|
|
219
|
-
providedIn: "root",
|
|
220
|
-
}]
|
|
221
|
-
}], ctorParameters: () => [{ type: i1.NovaCloudService }, { type: i2.AuthService }, { type: i3.HttpClient }] });
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi91c2VyL2FjY291bnQvYWNjb3VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBTWxELE1BQU0sT0FBTyxjQUFjO0lBWXpCLFlBQ1UsTUFBd0IsRUFDeEIsUUFBcUIsRUFDckIsSUFBZ0I7UUFGaEIsV0FBTSxHQUFOLE1BQU0sQ0FBa0I7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBZDFCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUFRO1lBQ2IsTUFBTSxFQUFFO2dCQUNOLFVBQVUsRUFBRSxFQUFFO2FBQ2Y7U0FDRixDQUFDO1FBRUYsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLFVBQUssR0FBVSxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLG9CQUFvQixDQUFDO1FBTzNFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEVB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QUFFLElBQUk7YUFDWCxDQUFDO2lCQUNELFNBQVMsQ0FDUixDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLEdBQUcsQ0FBRSxJQUFJLENBQUMsQ0FBQTtZQUNaLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xCLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN2QyxHQUFHLEVBQUUsQ0FBQTtZQUNQLENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFFSixDQUFDOytHQXhOVSxjQUFjO21IQUFkLGNBQWMsY0FGYixNQUFNOzs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBOb3ZhQ2xvdWRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL25vdmEtY2xvdWQvbm92YS1jbG91ZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCBQYXJzZSBmcm9tIFwicGFyc2VcIjtcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tIFwiLi4vbG9naW4vYXV0aC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuZGVjbGFyZSB2YXIgd3g6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY291bnRTZXJ2aWNlIHtcclxuICBjb21wYW55OiBzdHJpbmcgPSBcIlwiO1xyXG4gIGJpbGxpbmc6IGFueSA9IHtcclxuICAgIGNyZWRpdDoge1xyXG4gICAgICB1c2VkRGV0YWlsOiB7fSxcclxuICAgIH0sXHJcbiAgfTtcclxuICBwcm9maWxlOiBQYXJzZS5PYmplY3Q7XHJcbiAgd3hBcHBJZCA9IFwiXCI7XHJcbiAgd3hwYXlFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYXBwaWQ6c3RyaW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJXRUNIQVRfQVBQX0lEXCIpIHx8IFwid3hiNDE5M2M5M2FlOWFhNjk2XCI7XHJcbiAgc2hhcmVJbmZvOmFueVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBuY2xvdWQ6IE5vdmFDbG91ZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2OiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxyXG4gICkge1xyXG4gICAgdGhpcy5jb21wYW55ID0gdGhpcy5hdXRoU2Vydi5jb21wYW55IHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiY29tcGFueVwiKTtcclxuICAgIHRoaXMuZ2V0QmlsbGluZygpO1xyXG4gICAgdGhpcy5nZXRQcm9maWxlKCk7XHJcbiAgICB0aGlzLmdldFVzZXJPcGVuaWQoKTtcclxuICB9XHJcbiAgLyog6I635Y+W6K6k6K+B5L+h5oGvICovXHJcbiAgYXN5bmMgZ2V0UHJvZmlsZSgpIHtcclxuICAgIGxldCB1aWQgPSBQYXJzZS5Vc2VyLmN1cnJlbnQoKT8uaWQ7XHJcbiAgICBpZiAoIXVpZCkgcmV0dXJuO1xyXG4gICAgbGV0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiUHJvZmlsZVwiKTtcclxuICAgIHF1ZXJ5LmVxdWFsVG8oXCJ1c2VyXCIsIHVpZCk7XHJcbiAgICBxdWVyeS5lcXVhbFRvKFwiY29tcGFueVwiLCB0aGlzLmNvbXBhbnkpO1xyXG4gICAgcXVlcnkubm90RXF1YWxUbyhcImlzRGVsZXRlZFwiLCB0cnVlKTtcclxuICAgIGxldCBwcm9maWxlID0gYXdhaXQgcXVlcnkuZmlyc3QoKTtcclxuICAgIGlmIChwcm9maWxlPy5pZCkge1xyXG4gICAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlO1xyXG4gICAgfVxyXG4gIH1cclxuICBhc3luYyBnZXRCaWxsaW5nKCkge1xyXG4gICAgbGV0IGRhdGE6IGFueTtcclxuICAgIGlmKCFQYXJzZS5Vc2VyLmN1cnJlbnQoKT8uZ2V0U2Vzc2lvblRva2VuKCkpcmV0dXJuIC8vIOeUqOaIt+eZu+mZhuaXtuaJjeWPr+afpeivoui0puWNlVxyXG4gICAgdHJ5IHtcclxuICAgICAgZGF0YSA9IGF3YWl0IHRoaXMubmNsb3VkLmFwaWcoXCJhaWdjL2FjY291bnRcIiwgbnVsbCwgXCJnZXRcIik7XHJcbiAgICB9IGNhdGNoIChlcnIpIHt9XHJcbiAgICBpZiAoZGF0YT8uY3JlZGl0KSB7XHJcbiAgICAgIHRoaXMuYmlsbGluZyA9IGRhdGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcbiAgLyog5aaC5p6c5piv5b6u5L+h5YaF572u5rWP6KeI5Zmo77yM6I635Y+W55m75b2VY29kZSAqL1xyXG4gIGFzeW5jIGdldFVzZXJPcGVuaWQoKSB7XHJcbiAgICBsZXQgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBsZXQgaXNXZWl4aW4gPSB1YS5pbmRleE9mKFwibWljcm9tZXNzZW5nZXJcIikgIT0gLTE7XHJcbiAgICBsZXQgY29kZSA9IHRoaXMuZ2V0UXVlcnlTdHJpbmdCeU5hbWUoXCJjb2RlXCIpO1xyXG4gICAgbGV0IG9wZW5pZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwib3BlbmlkXCIpO1xyXG4gICAgaWYgKCFvcGVuaWQpIHtcclxuICAgICAgaWYoIVBhcnNlLlVzZXIuY3VycmVudCgpKSByZXR1cm5cclxuICAgICAgbGV0IHdlY2hhdCA9IFBhcnNlLlVzZXIuY3VycmVudCgpLmdldChcIndlY2hhdFwiKTtcclxuICAgICAgb3BlbmlkID0gd2VjaGF0Py5bdGhpcy5hcHBpZF0/Lm9wZW5pZDtcclxuICAgICAgaWYgKGlzV2VpeGluKSB7XHJcbiAgICAgICAgaWYgKCFjb2RlKSB7XHJcbiAgICAgICAgICB0aGlzLmF1dGhXZWNoYXQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5nZXR3ZWNoYXQoY29kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGF1dGhXZWNoYXQodXJsOiBzdHJpbmcgPSBcIi9hY2NvdW50L2JpbGxpbmdcIikge1xyXG4gICAgaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIm9wZW5pZFwiKSkge1xyXG4gICAgICAvLyBsZXQgUkVESVJFQ1RfVVJJID0gXCJodHRwczovL2FpLmZtb2RlLmNuXCIgKyB1cmw7XHJcbiAgICAgIGxldCBSRURJUkVDVF9VUkkgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgUkVESVJFQ1RfVVJJID0gZW5jb2RlVVJJQ29tcG9uZW50KFJFRElSRUNUX1VSSSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFJFRElSRUNUX1VSSSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFxyXG4gICAgICAvLyAgIFwiaHR0cHM6Ly9vcGVuLndlaXhpbi5xcS5jb20vY29ubmVjdC9vYXV0aDIvYXV0aG9yaXplP2FwcGlkPVwiICtcclxuICAgICAgLy8gICAgIHRoaXMuYXBwaWQgK1xyXG4gICAgICAvLyAgICAgXCImcmVkaXJlY3RfdXJpPVwiICtcclxuICAgICAgLy8gICAgIFJFRElSRUNUX1VSSSArXHJcbiAgICAgIC8vICAgICBcIiZyZXNwb25zZV90eXBlPWNvZGUmc2NvcGU9c25zYXBpX2Jhc2Umc3RhdGU9U1RBVEUjd2VjaGF0X3JlZGlyZWN0XCJcclxuICAgICAgLy8gKTtcclxuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPVxyXG4gICAgICAgIFwiaHR0cHM6Ly9vcGVuLndlaXhpbi5xcS5jb20vY29ubmVjdC9vYXV0aDIvYXV0aG9yaXplP2FwcGlkPVwiICtcclxuICAgICAgICB0aGlzLmFwcGlkICtcclxuICAgICAgICBcIiZyZWRpcmVjdF91cmk9XCIgK1xyXG4gICAgICAgIFJFRElSRUNUX1VSSSArXHJcbiAgICAgICAgXCImcmVzcG9uc2VfdHlwZT1jb2RlJnNjb3BlPXNuc2FwaV91c2VyaW5mbyZzdGF0ZT1TVEFURSN3ZWNoYXRfcmVkaXJlY3RcIjtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuICAvL+agueaNrlF1ZXJ5U3RyaW5n5Y+C5pWw5ZCN56ew6I635Y+W5YC8XHJcbiAgZ2V0UXVlcnlTdHJpbmdCeU5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gbG9jYXRpb24uc2VhcmNoLm1hdGNoKFxyXG4gICAgICBuZXcgUmVnRXhwKFwiWz8mXVwiICsgbmFtZSArIFwiPShbXiZdKylcIiwgXCJpXCIpXHJcbiAgICApO1xyXG4gICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IHJlc3VsdC5sZW5ndGggPCAxKSB7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdFsxXTtcclxuICB9XHJcbiAgYXN5bmMgZ2V0d2VjaGF0KFxyXG4gICAgY29kZTogc3RyaW5nLFxyXG4gICAgdXJsOiBzdHJpbmcgPSBcIi9hY2NvdW50L2JpbGxpbmdcIlxyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5odHRwXHJcbiAgICAgICAgLnBvc3QoYGh0dHBzOi8vc2VydmVyLmZtb2RlLmNuL2FwaS93ZWNoYXQvZ2V0X3d4YCwge1xyXG4gICAgICAgICAgY29tcGFueTogdGhpcy5jb21wYW55LFxyXG4gICAgICAgICAgY29kZTogY29kZSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICBhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDAgJiYgcmVzLmRhdGEub3BlbmlkKSB7XHJcbiAgICAgICAgICAgICAgbGV0IG9wZW5pZCA9IHJlcy5kYXRhLm9wZW5pZDtcclxuICAgICAgICAgICAgICAvLyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXV0aERhdGEnLCBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSkpXHJcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJvcGVuaWRcIiwgb3BlbmlkKTtcclxuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImNvZGVcIik7XHJcbiAgICAgICAgICAgICAgbGV0IHd4b3B0cyA9IHt9XHJcbiAgICAgICAgICAgICAgd3hvcHRzW3RoaXMuYXBwaWRdID0ge1xyXG4gICAgICAgICAgICAgICAgXCJvcGVuaWRcIjogb3BlbmlkLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgUGFyc2UuVXNlci5jdXJyZW50KCkuc2V0KFwid2VjaGF0XCIsIHd4b3B0cyk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgUGFyc2UuVXNlci5jdXJyZW50KCkuc2F2ZSgpO1xyXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBhc3luYyAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgdXBkYXRpbmcgaXRlbXNcIiwgZXJyKTtcclxuICAgICAgICAgICAgdGhpcy5hdXRoV2VjaGF0KHVybCk7XHJcbiAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKiDojrflj5blvq7kv6Hnrb7lkI0gKi9cclxuICBnZXRXWFNpZ25QYWNrYWdlSW5XZWNoYXQoKSB7XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBjb21wYW55OiB0aGlzLmNvbXBhbnksXHJcbiAgICAgIGhyZWY6IGVuY29kZVVSSUNvbXBvbmVudChsb2NhdGlvbi5ocmVmLnNwbGl0KFwiP1wiKVswXSksXHJcbiAgICB9O1xyXG4gICAgdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0KGBodHRwczovL3NlcnZlci5mbW9kZS5jbi9hcGkvd2VjaGF0L2dldGNvbmZpZ2AsIHBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAvLyDov5Tlm57nmoTnrb7lkI3kv6Hmga9cclxuICAgICAgICBsZXQgcmVzOiBhbnkgPSByZXNwb25zZTtcclxuICAgICAgICBjb25zdCBzaWduUGFja2FnZSA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMud3hBcHBJZCA9IHNpZ25QYWNrYWdlLmFwcGlkO1xyXG4gICAgICAgIHRoaXMud3hwYXlFbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgd3guY29uZmlnKHtcclxuICAgICAgICAgIGRlYnVnOiBmYWxzZSwgLy8g5byA5ZCv6LCD6K+V5qih5byPXHJcbiAgICAgICAgICBhcHBJZDogc2lnblBhY2thZ2UuYXBwaWQsIC8vIOW/heWhq++8jOWFrOS8l+WPt+eahOWUr+S4gOagh+ivhlxyXG4gICAgICAgICAgdGltZXN0YW1wOiBzaWduUGFja2FnZS50aW1lc3RhbXAsIC8vIOW/heWhq++8jOeUn+aIkOetvuWQjeeahOaXtumXtOaIs1xyXG4gICAgICAgICAgbm9uY2VTdHI6IHNpZ25QYWNrYWdlLm5vbmNlU3RyLCAvLyDlv4XloavvvIznlJ/miJDnrb7lkI3nmoTpmo/mnLrkuLJcclxuICAgICAgICAgIHNpZ25hdHVyZTogc2lnblBhY2thZ2Uuc2lnbmF0dXJlLCAvLyDlv4XloavvvIznrb7lkI3vvIzop4HpmYTlvZUxXHJcbiAgICAgICAgICBqc0FwaUxpc3Q6IFtcclxuICAgICAgICAgICAgXCJjaG9vc2VXWFBheVwiLCAvLyBKU0FQSeW+ruS/oeaUr+S7mFxyXG4gICAgICAgICAgICAnb25NZW51U2hhcmVUaW1lbGluZScsIC8v5YiG5Lqr5Yiw5b6u5L+h5pyL5Y+L5ZyIXHJcbiAgICAgICAgICAgICdvbk1lbnVTaGFyZUFwcE1lc3NhZ2UnLCAvL+WIhuS6q+e7meW+ruS/oeaci+WPi1xyXG4gICAgICAgICAgICAnb25NZW51U2hhcmVRUScsIC8v5YiG5Lqr5YiwUVFcclxuICAgICAgICAgICAgJ29uTWVudVNoYXJlUVpvbmUnLCAvL+WIhuS6q+WIsFFR56m66Ze0XHJcbiAgICAgICAgICAgICd1cGRhdGVBcHBNZXNzYWdlU2hhcmVEYXRhJywgLy/liIbkuqvliLDlvq7kv6Hlj4pRUe+8iOaWsOaOpeWPo++8iVxyXG4gICAgICAgICAgICAndXBkYXRlVGltZWxpbmVTaGFyZURhdGEnIC8v5YiG5Lqr5Yiw5pyL5Y+L5ZyI4oCd5Y+K4oCc5YiG5Lqr5YiwUVHnqbrpl7TvvIjmlrDmjqXlj6NcclxuICAgICAgICAgIF0sIC8vIOW/heWhq++8jOmcgOimgeS9v+eUqOeahEpT5o6l5Y+j5YiX6KGo77yM5omA5pyJSlPmjqXlj6PliJfooajop4HpmYTlvZUyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IHVybCA9ICdodHRwczovL2FpLmZtb2RlLmNuJ1xyXG4gICAgICAgIGxldCBwYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lXHJcbiAgICAgICAgdXJsICsgcGF0aG5hbWUgKyAnP2ludml0ZT0nICsgUGFyc2UuVXNlci5jdXJyZW50KCk/LmlkXHJcbiAgICAgICAgbGV0IHNoYXJlSW5mbyA9IHRoaXMuc2hhcmVJbmZvIHx8IHtcclxuICAgICAgICAgIHRpdGxlOiAn6aOe56CBQUknLCAvLyDliIbkuqvmoIfpophcclxuICAgICAgICAgIGRlc2M6ICfop6PmlL7liJvmhI/lvJXpoobmnKrmnaV85Zu96ZmF5YmN5rK/55qEQUlHQ+W5s+WPsCcsIC8vIOWIhuS6q+aPj+i/sFxyXG4gICAgICAgICAgbGluazogdXJsLCAvLyDliIbkuqvpk77mjqXvvIzor6Xpk77mjqXln5/lkI3miJbot6/lvoTlv4XpobvkuI7lvZPliY3pobXpnaLlr7nlupTnmoTlhazkvJflj7dKU+WuieWFqOWfn+WQjeS4gOiHtFxyXG4gICAgICAgICAgdHlwZTogJ2xpbmsnLCAvL+WIhuS6q+exu+WeiyxtdXNpY+OAgXZpZGVv5oiWbGlua++8jOS4jeWhq+m7mOiupOS4umxpbmtcclxuICAgICAgICAgIGltZ1VybDogJ2h0dHBzOi8vZmlsZS1jbG91ZC5mbW9kZS5jbi9FNEtwR3ZURXRvLzIwMjMwODIyLzNta2Y0MTAzMzYyMzI3NS5wbmcnLCAvLyDliIbkuqvlm77moIdcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAvLyDorr7nva7miJDlip9cclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ+WIhuS6q+aIkOWKnycpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ+WIhuS6q+Wksei0pScpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCflj5bmtojliIbkuqsnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB3eC5yZWFkeSgoKSA9PiB7XHJcbiAgICAgICAgICB3eC51cGRhdGVBcHBNZXNzYWdlU2hhcmVEYXRhKHNoYXJlSW5mbyk7IC8v5YiG5Lqr5Yiw5b6u5L+h5aW95Y+L5oiW6ICFcXHlpb3lj4tcclxuICAgICAgICAgIHd4LnVwZGF0ZVRpbWVsaW5lU2hhcmVEYXRhKHNoYXJlSW5mbyk7IC8v5YiG5Lqr5Yiw5pyL5Y+L5ZyI5oiW6ICFcXHnqbrpl7RcclxuICAgICAgICB9KTtcclxuICAgICAgICB3eC5lcnJvcigoKSA9PiB7fSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBcclxuICBhc3luYyBzYXZlQWNjb3VudExvZyhpbmZvOiBvYmplY3QsIG9yZGVyaWQ6c3RyaW5nLCBjb21wYW55OnN0cmluZywgbWVzc2FnZTphbnkpIHtcclxuICAgIGxldCB1cmwgPSBcImh0dHBzOi8vc2VydmVyLmZtb2RlLmNuL2FwaS9hcGlnL3NhdmVBY2NvdW50TG9nXCI7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcyxyZWopPT57XHJcbiAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdCh1cmwsIHtcclxuICAgICAgICBjb21wYW55OiBjb21wYW55LFxyXG4gICAgICAgIHVpZDogUGFyc2UuVXNlci5jdXJyZW50KCkuaWQsXHJcbiAgICAgICAgb3JkZXJpZDogb3JkZXJpZCxcclxuICAgICAgICBpbmZvOiBpbmZvLFxyXG4gICAgICB9KVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgcmVzICh0cnVlKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKGVycik7XHJcbiAgICAgICAgICBtZXNzYWdlICYmIG1lc3NhZ2UuZXJyb3IoXCLor7fmsYLotoXml7bvvIzor7fnqI3lkI7lho3or5VcIik7XHJcbiAgICAgICAgICByZWooKVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pXHJcbiAgICBcclxuICB9XHJcbn1cclxuIl19
|
|
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/account/account.service.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Injectable}from"@angular/core";import{NovaCloudService}from"../../nova-cloud/nova-cloud.service";import{FmodeParse}from"@fmode/parse";import{AuthService}from"../login/auth.service";import{HttpClient}from"@angular/common/http";import*as i0 from"@angular/core";import*as i1 from"../../nova-cloud/nova-cloud.service";import*as i2 from"../login/auth.service";import*as i3 from"@angular/common/http";const Parse=FmodeParse.with("nova");export class AccountService{constructor(e,t,o){this.ncloud=e,this.authServ=t,this.http=o,this.company="",this.billing={credit:{usedDetail:{}}},this.wxAppId="",this.wxpayEnabled=!1,this.appid=localStorage.getItem("WECHAT_APP_ID")||"wxb4193c93ae9aa696",this.company=this.authServ.company||localStorage.getItem("company"),this.getBilling(),this.getProfile(),this.getUserOpenid()}async getProfile(){let e=Parse.User.current()?.id;if(!e)return;let t=new Parse.Query("Profile");t.equalTo("user",e),t.equalTo("company",this.company),t.notEqualTo("isDeleted",!0);let o=await t.first();o?.id&&(this.profile=o)}async getBilling(){let e;if(Parse.User.current()?.getSessionToken()){try{e=await this.ncloud.apig("aigc/account",null,"get")}catch(e){}return e?.credit&&(this.billing=e),e}}async getUserOpenid(){let e=-1!=navigator.userAgent.toLowerCase().indexOf("micromessenger"),t=this.getQueryStringByName("code"),o=localStorage.getItem("openid");if(!o){if(!Parse.User.current())return;let i=Parse.User.current().get("wechat");o=i?.[this.appid]?.openid,e&&(t?await this.getwechat(t):this.authWechat())}}authWechat(e="/account/billing"){if(!localStorage.getItem("openid")){let e=window.location.href;return e=encodeURIComponent(e),void(window.location.href="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+this.appid+"&redirect_uri="+e+"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect")}}getQueryStringByName(e){let t=location.search.match(new RegExp("[?&]"+e+"=([^&]+)","i"));return null==t||t.length<1?"":t[1]}async getwechat(e,t="/account/billing"){return new Promise((async(o,i)=>{this.http.post("https://server.fmode.cn/api/wechat/get_wx",{company:this.company,code:e}).subscribe((async e=>{if(console.log(e),e&&200==e.code&&e.data.openid){let t=e.data.openid;localStorage.setItem("openid",t),localStorage.removeItem("code");let i={};i[this.appid]={openid:t},Parse.User.current().set("wechat",i),await Parse.User.current().save(),o(!0)}}),(async e=>{console.log("Error updating items",e),this.authWechat(t),i(!1)}))}))}getWXSignPackageInWechat(){let e={company:this.company,href:encodeURIComponent(location.href.split("?")[0])};this.http.post("https://server.fmode.cn/api/wechat/getconfig",e).subscribe((e=>{const t=e.data;this.wxAppId=t.appid,this.wxpayEnabled=!0,wx.config({debug:!1,appId:t.appid,timestamp:t.timestamp,nonceStr:t.nonceStr,signature:t.signature,jsApiList:["chooseWXPay","onMenuShareTimeline","onMenuShareAppMessage","onMenuShareQQ","onMenuShareQZone","updateAppMessageShareData","updateTimelineShareData"]});let o="https://ai.fmode.cn";location.pathname;Parse.User.current()?.id;let i=this.shareInfo||{title:"飞码AI",desc:"解放创意引领未来|国际前沿的AIGC平台",link:o,type:"link",imgUrl:"https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png",success:function(){console.log("分享成功")},error:function(){console.log("分享失败")},cancel:function(){console.log("取消分享")}};wx.ready((()=>{wx.updateAppMessageShareData(i),wx.updateTimelineShareData(i)})),wx.error((()=>{}))}))}async saveAccountLog(e,t,o,i){return new Promise(((a,r)=>{this.http.post("https://server.fmode.cn/api/apig/saveAccountLog",{company:o,uid:Parse.User.current().id,orderid:t,info:e}).subscribe((e=>{console.log(e),a(!0)}),(e=>{console.warn(e),i&&i.error("请求超时,请稍后再试"),r()}))}))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AccountService,deps:[{token:i1.NovaCloudService},{token:i2.AuthService},{token:i3.HttpClient}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AccountService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:AccountService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.NovaCloudService},{type:i2.AuthService},{type:i3.HttpClient}]});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi91c2VyL2FjY291bnQvYWNjb3VudC5zZXJ2aWNlLm1qcw==`
|
|
10
|
+
|