fmode-ng 0.0.83 → 0.0.85
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/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +1 -1
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +1 -1
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +1 -1
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +1 -1
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +1 -1
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +1 -1
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +1 -1
- package/esm2022/lib/aigc/index.mjs +1 -1
- package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -0
- package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -0
- package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -0
- package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -0
- package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -0
- package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -0
- package/esm2022/lib/aigc/story/index.mjs +10 -0
- package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -0
- package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -0
- package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -0
- package/esm2022/lib/aigc/story/story.service.mjs +10 -0
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +1 -1
- package/esm2022/lib/aigc/voice/index.mjs +1 -1
- package/esm2022/lib/aigc/voice/{audio.player.mjs → lib/audio/audio.player.mjs} +2 -2
- package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -0
- package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -0
- package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +10 -0
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +1 -1
- package/esm2022/lib/aigc/voice/tts/index.mjs +1 -1
- package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -0
- package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +10 -0
- package/esm2022/lib/aigc/voice/tts/provider-microsoft.mjs +10 -0
- package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +1 -1
- package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -0
- package/esm2022/lib/core/agent/chat/fmode-chat.mjs +1 -1
- package/esm2022/lib/core/agent/chat/index.mjs +1 -1
- package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +1 -1
- package/esm2022/lib/core/index.mjs +10 -0
- package/esm2022/lib/core/voice/index.mjs +10 -0
- package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -0
- package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -0
- package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -0
- package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -0
- package/esm2022/lib/icon/filetype/file.svg.mjs +10 -0
- package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -0
- package/esm2022/lib/icon/filetype/index.mjs +10 -0
- package/esm2022/lib/icon/filetype/md.svg.mjs +10 -0
- package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -0
- package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -0
- package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -0
- package/esm2022/lib/icon/filetype/video.svg.mjs +10 -0
- package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -0
- package/esm2022/lib/icon/index.mjs +10 -0
- package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -0
- package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -0
- package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -0
- package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +10 -0
- package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -0
- package/esm2022/lib/person/index.mjs +10 -0
- package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -0
- package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -0
- package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -0
- package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -0
- package/esm2022/lib/person/person.service.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -0
- package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -0
- package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -0
- package/esm2022/lib/text/index.mjs +10 -0
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/fmode-ng.mjs +1 -1
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.d.ts +5 -3
- package/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.d.ts +4 -2
- package/lib/aigc/chat/chat-message-card/comp-message-card.component.d.ts +6 -1
- package/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.d.ts +6 -3
- package/lib/aigc/chat/chat-modal-input/modal-input.component.d.ts +5 -1
- package/lib/aigc/index.d.ts +1 -0
- package/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.d.ts +23 -0
- package/lib/aigc/story/fm-story-card/fm-story-card.component.d.ts +26 -0
- package/lib/aigc/story/fm-story-list/fm-story-list.component.d.ts +71 -0
- package/lib/aigc/story/fm-story-list/story-preview.d.ts +20 -0
- package/lib/aigc/story/fm-story-loader/fm-story-loader.component.d.ts +38 -0
- package/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.d.ts +13 -0
- package/lib/aigc/story/index.d.ts +5 -0
- package/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.d.ts +14 -0
- package/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.d.ts +29 -0
- package/lib/aigc/story/modal-chat-story/modal-chat-story.component.d.ts +44 -0
- package/lib/aigc/story/story.service.d.ts +12 -0
- package/lib/aigc/voice/fmode-voice.service.d.ts +3 -6
- package/lib/aigc/voice/index.d.ts +3 -2
- package/lib/aigc/voice/lib/audio/audio.streamer.d.ts +33 -0
- package/lib/aigc/voice/{stream.player.d.ts → lib/audio/streamer.microsoft.d.ts} +2 -2
- package/lib/aigc/voice/lib/audio/streamer.pcm.d.ts +45 -0
- package/lib/aigc/voice/tts/fmode-tts-class.d.ts +17 -37
- package/lib/aigc/voice/tts/index.d.ts +3 -0
- package/lib/aigc/voice/tts/int-tts-provider.d.ts +35 -0
- package/lib/aigc/voice/tts/provider-doubao.d.ts +43 -0
- package/lib/aigc/voice/tts/provider-microsoft.d.ts +21 -0
- package/lib/core/agent/chat/completion/fmode-completion.d.ts +2 -1
- package/lib/core/agent/chat/completion/int-gpt-chat-options.d.ts +72 -0
- package/lib/core/agent/chat/index.d.ts +1 -1
- package/lib/core/agent/chat/interface.d.ts +3 -0
- package/lib/core/agent/prompt/agent.prompt.d.ts +2 -1
- package/lib/core/index.d.ts +2 -0
- package/lib/core/voice/index.d.ts +1 -0
- package/lib/icon/filetype/audio.svg.d.ts +1 -0
- package/lib/icon/filetype/avatar.svg.d.ts +1 -0
- package/lib/icon/filetype/chat.svg.d.ts +1 -0
- package/lib/icon/filetype/docx.svg.d.ts +1 -0
- package/lib/icon/filetype/file.svg.d.ts +1 -0
- package/lib/icon/filetype/filetype.pipe.d.ts +8 -0
- package/lib/icon/filetype/index.d.ts +11 -0
- package/lib/icon/filetype/md.svg.d.ts +1 -0
- package/lib/icon/filetype/pdf.svg.d.ts +1 -0
- package/lib/icon/filetype/pptx.svg.d.ts +1 -0
- package/lib/icon/filetype/svgtoblob.d.ts +1 -0
- package/lib/icon/filetype/video.svg.d.ts +1 -0
- package/lib/icon/filetype/xlsx.svg.d.ts +1 -0
- package/lib/icon/index.d.ts +1 -0
- package/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.d.ts +20 -0
- package/lib/person/comp-person-item/comp-person-item.component.d.ts +10 -0
- package/lib/person/comp-person-story/comp-person-story.component.d.ts +67 -0
- package/lib/person/edit-upload/edit-upload.component.d.ts +81 -0
- package/lib/person/edit-upload/edit-upload.module.d.ts +11 -0
- package/lib/person/index.d.ts +4 -0
- package/lib/person/modal-person-select/modal-person-select.component.d.ts +25 -0
- package/lib/person/modal-user-verify/secret-text.pipe.d.ts +7 -0
- package/lib/person/modal-user-verify/user-verify.component.d.ts +88 -0
- package/lib/person/person-detail/person-detail.component.d.ts +41 -0
- package/lib/person/person.service.d.ts +33 -0
- package/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.d.ts +23 -0
- package/lib/text/fm-article-editor/article.service.d.ts +41 -0
- package/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.d.ts +19 -0
- package/lib/text/fm-article-editor/draft.service.d.ts +33 -0
- package/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.d.ts +73 -0
- package/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.d.ts +81 -0
- package/lib/text/fm-article-editor/fm-article-editor.component.d.ts +90 -0
- package/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.d.ts +36 -0
- package/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.d.ts +12 -0
- package/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.d.ts +55 -0
- package/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.d.ts +31 -0
- package/lib/text/fm-article-editor/outline-count.pipe.d.ts +7 -0
- package/lib/text/fm-article-editor/prompt/prompt-insertion-article.d.ts +6 -0
- package/lib/text/fm-article-editor/task-article-generation.d.ts +23 -0
- package/lib/text/fm-article-editor/tasks/task-article-draft-create.d.ts +18 -0
- package/lib/text/fm-article-editor/tasks/task-article-outline-edit.d.ts +14 -0
- package/lib/text/fm-article-editor/tasks/task-article-outline.d.ts +19 -0
- package/lib/text/fm-article-editor/tasks/task-article-preview.d.ts +7 -0
- package/lib/text/fm-article-editor/tasks/task-article-writing-options.d.ts +14 -0
- package/lib/text/fm-article-editor/tasks/task-document-select.d.ts +14 -0
- package/lib/text/fm-text-quill/fm-text-quill.component.d.ts +39 -0
- package/lib/text/index.d.ts +3 -0
- package/package.json +6 -2
- package/public-api.d.ts +4 -0
- package/esm2022/lib/aigc/voice/lib/recorder/engine-pcm.mjs +0 -10
- package/esm2022/lib/aigc/voice/lib/recorder/engine-wav.mjs +0 -10
- package/esm2022/lib/aigc/voice/stream.player.mjs +0 -10
- package/lib/aigc/voice/lib/recorder/engine-pcm.d.ts +0 -1
- package/lib/aigc/voice/lib/recorder/engine-wav.d.ts +0 -1
- /package/lib/aigc/voice/{audio.player.d.ts → lib/audio/audio.player.d.ts} +0 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/person/modal-user-verify/user-verify.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,Input,Output,EventEmitter}from"@angular/core";import Parse from"parse";import{HttpClient}from"@angular/common/http";import{NzMessageService}from"ng-zorro-antd/message";import{AuthService}from"../../user/login/auth.service";import{NovaCloudService}from"../../nova-cloud/nova-cloud.service";import{AccountService}from"../../user/account/account.service";import{EditUploadModule}from"../edit-upload/edit-upload.module";import{IonIcon,IonContent,IonDatetime,IonDatetimeButton,IonLabel,IonSegment,IonSegmentButton,IonSelect,IonSelectOption,ModalController,IonButton,IonInput,IonItem,IonList,IonImg,IonSpinner}from"@ionic/angular/standalone";import{NzInputModule}from"ng-zorro-antd/input";import{NzIconModule}from"ng-zorro-antd/icon";import{NzTabsModule}from"ng-zorro-antd/tabs";import{NzButtonModule}from"ng-zorro-antd/button";import{NzModalModule}from"ng-zorro-antd/modal";import{NzGridModule}from"ng-zorro-antd/grid";import{NzRadioModule}from"ng-zorro-antd/radio";import{CommonModule}from"@angular/common";import{FormsModule,ReactiveFormsModule}from"@angular/forms";import{NzImageModule}from"ng-zorro-antd/image";import{SecretTextPipe}from"./secret-text.pipe";import*as i0 from"@angular/core";import*as i1 from"@angular/common/http";import*as i2 from"ng-zorro-antd/message";import*as i3 from"../../user/account/account.service";import*as i4 from"../../user/login/auth.service";import*as i5 from"../../nova-cloud/nova-cloud.service";import*as i6 from"@ionic/angular/standalone";import*as i7 from"@angular/common";import*as i8 from"@angular/forms";import*as i9 from"ng-zorro-antd/input";import*as i10 from"ng-zorro-antd/icon";import*as i11 from"ng-zorro-antd/button";import*as i12 from"ng-zorro-antd/core/transition-patch";import*as i13 from"ng-zorro-antd/core/wave";import*as i14 from"ng-zorro-antd/grid";import*as i15 from"ng-zorro-antd/radio";import*as i16 from"ng-zorro-antd/image";import*as i17 from"../edit-upload/edit-upload.component";export class ModalUserVerifyComponent{constructor(n,e,t,i,o,a){this.http=n,this.message=e,this.novaAccount=t,this.authServ=i,this.novaCloud=o,this.modalCtrl=a,this.isVisible=!1,this.isVisibleChange=new EventEmitter,this.verifyOptions={idcard:!1,student:!1,bankcard:!1,autoFinish:!0},this.verifyResult={},this.isLoading=!0,this.tab="idcard",this.company="",this.idcard="",this.idcardData={},this.name="",this.sex="",this.idcard_image_front="",this.idcard_image_back="",this.identity_auth=!1,this.studentDateil={studentID:"",mobile:"",school:"",schoolMajor:"",studentType:"毕业",education:"本科",workUnit:"",workid:"",diploma:"",degreeNumber:"",entrySchool:2023,college:""},this.eduImage="",this.bankMap={bank:"",bankcard:"",bankmobile:""},this.options=[],this.bankOptions=["招商银行","工商银行","农业银行","中国银行","建设银行","交通银行","邮政储蓄银行","农商银行","中信银行","光大银行","华夏银行","广发银行","平安银行","浦发银行","兴业银行","民生银行","恒丰银行","浙商银行","渤海银行"]}veifyFinishBack(){let n=!1;this.verifyOptions&&Object.keys(this.verifyOptions).forEach((e=>{"autoFinish"!=e&&this.verifyOptions?.[e]&&(this.verifyResult?.[e]||(n=!0))}));let e=Parse.User.current(),t=!1;e?.get("sex")!=this.profile?.get("sex")&&(e?.set("sex",this.profile?.get("sex")),t=!0),e?.get("realname")!=this.profile?.get("name")&&(e?.set("realname",this.profile?.get("name")),t=!0),t&&e?.save(),this.verifyOptions?.autoFinish&&(n||this.modalCtrl.dismiss({verifyResult:this.verifyResult,profile:this.profile,account:this.account},"confirm"))}async ngOnInit(){this.company=this.authServ.company||localStorage.getItem("company")||"",await this.novaAccount.getProfile(),this.getOptions(),this.getProfile(),await this.getAccount(),this.veifyFinishBack(),this.isLoading=!1,this.onBreakPointSet&&this.onBreakPointSet(.75)}getOptions(){let n=(new Date).getFullYear();for(let e=n-20;e<=n;e++)this.options.unshift(e)}async getProfile(){let n=this.novaAccount.profile;console.log(n),n?.id&&(this.profile=n,this.studentDateil={studentID:n?.get("studentID"),mobile:n?.get("mobile"),school:n?.get("school"),schoolMajor:n?.get("schoolMajor"),studentType:n?.get("studentType"),education:n?.get("education"),workUnit:n?.get("workUnit"),workid:n?.get("workid"),diploma:n?.get("diploma"),degreeNumber:n?.get("degreeNumber"),entrySchool:n?.get("entrySchool")?n.get("entrySchool").getFullYear():null,college:n?.get("college")},this.eduImage=n?.get("eduImage"),this.name=n?.get("name"),n?.get("isCheck")&&(this.idcard=n?.get("idcard"),this.sex=n?.get("sex"),this.idcard_image_front=n?.get("attachment")[0],this.idcard_image_back=n?.get("attachment")[1],this.verifyResult.idcard=!0))}async getAccount(){let n=Parse.User.current()?.id,e=new Parse.Query("Account");e.equalTo("user",n),e.equalTo("company",this.company),e.notEqualTo("isDeleted",!0),this.account=await e.first(),this.account?.id&&this.account?.get("bank")&&(this.bankMap=this.account.get("bank")?.[0]||{bank:"",bankcard:"",bankmobile:""},this.verifyResult.bankcard=!0)}onClose(){this.isVisibleChange.emit(!1)}async uploadChange(n,e){console.log(n,e);let t,i,o=n[0];switch(console.log(o),this[e]=o,e){case"idcard_image_front":t={company:this.company,image_url:o},i=await this.novaCloud.api("/apig/idcard/ocr",t),i&&i.cards[0]?.name&&i.cards[0]?.id_card_number?(this.name=i.cards[0].name,this.idcard=i.cards[0].id_card_number,this.sex=i.cards[0].gender,this.idcardData=i.cards[0]):this.message.create("error","未识别到身份信息,请确保身份证照片清晰不反光!");break;case"idcard_image_back":if(t={company:this.company,image_url:o},i=await this.novaCloud.api("/apig/idcard/ocr",t),i&&i.cards[0]?.side&&"back"==i.cards[0].side)return void(this.identity_auth=!0);this.message.create("error","未识别到身份信息,请确保身份证照片清晰不反光!")}}onDeleted(n){switch(this[n]="",n){case"idcard_image_front":this.name="",this.idcard="";break;case"idcard_image_back":this.identity_auth=!1}}authDisabled(){if(!this.verifyOptions?.idcard?.ocr)return!0;return!!(this.name&&this.idcard&&this.identity_auth)}authDisabledStudent(){return!0}async onSubmit(){if(!this.verifyOptions?.idcard?.ocr||this.name&&this.idcard&&this.identity_auth){let n={company:this.company,cardNo:this.idcard,realName:this.name},e=await this.novaCloud.api("/apig/idcard",n);if(console.log(e),e&&0===e?.error_code&&1==e?.result?.isok){let n=Parse.User.current()?.id,e=[];this.idcard_image_front&&e.push(this.idcard_image_front),this.idcard_image_back&&e.push(this.idcard_image_back);let t=new Parse.Query("Profile");t.equalTo("user",n),t.equalTo("company",this.company),t.notEqualTo("isDeleted",!0);let i=await t.first();if(!i?.id){i=new(Parse.Object.extend("Profile"))}i?.set("name",this.name),i?.set("idcard",this.idcard),i?.set("sex",this.sex),i?.set({city:this.idcardData?.city,area:[this.idcardData?.province,this.idcardData?.city,this.idcardData?.district],birthdate:this.idcardData?.birthday}),i?.set("company",{__type:"Pointer",className:"Company",objectId:this.company}),i?.set("user",{__type:"Pointer",className:"_User",objectId:n}),i?.set("attachment",e),i?.set("isCheck",!0),i?.get("type")||i?.set("type","user"),await(i?.save()),this.message.create("success","认证成功"),this.isVisibleChange.emit(!1),await this.novaAccount.getProfile(),this.profile=this.novaAccount.profile,this.verifyResult.idcard=!0}else this.message.create("error","认证失败:请检查身份信息是否正确。")}this.veifyFinishBack()}onChangeDate(n){console.log(n)}mobileStatus(n){return/^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(n)?"":"error"}async onSubimtStudent(){let{studentID:n,mobile:e,school:t,schoolMajor:i,studentType:o,education:a,workUnit:r,workid:l,diploma:d,degreeNumber:s,entrySchool:c,college:p}=this.studentDateil;console.log(this.studentDateil);if(!(n&&e&&t&&this.name))return void this.message.create("error","认证失败:请检查信息填写是否完整。");if(!/^[1][3,4,5,7,8][0-9]{9}$/.test(e))return void this.message.create("error","认证失败:手机号格式错误。");let u=Parse.User.current()?.id,m=new Parse.Query("Profile");m.equalTo("user",u),m.equalTo("company",this.company),m.notEqualTo("isDeleted",!0);let g=await m.first();if(!g?.id){g=new(Parse.Object.extend("Profile"))}g?.set("name",this.name),g?.set("studentID",n),g?.set("mobile",e),g?.set("school",t),g?.set("college",p),g?.set("schoolMajor",i),g?.set("studentType",o),g?.set("education",a),g?.set("workUnit",String(r)),g?.set("workid",l),g?.set("eduImage",this.eduImage),g?.set("diploma",d),g?.set("degreeNumber",s),c&&"在校"!=o&&g?.set("entrySchool",new Date((new Date).setFullYear(c))),g?.set("company",{__type:"Pointer",className:"Company",objectId:this.company}),g?.set("user",{__type:"Pointer",className:"_User",objectId:u}),g?.get("type")||g?.set("type","student"),await(g?.save()),this.message.create("success","认证成功"),this.verifyResult.student=!0,this.isVisibleChange.emit(!1),await this.novaAccount.getProfile(),this.profile=this.novaAccount.profile,this.veifyFinishBack()}cardNoStatus(){return/^([1-9]{1})(\d{15}|\d{18})$/.test(this.bankMap.bankcard)?"":"error"}saveBankAuth(){return!(this.name&&this.idcard&&this.bankMap.bankcard&&this.bankMap.bankmobile)}async onSubimtBank(){if(!this.name||!this.idcard)return void this.message.create("error","请先完成实名或学生认证。");if(!this.bankMap.bankcard||!this.bankMap.bankmobile)return void this.message.create("error","请填写完整信息。");if(!/^([1-9]{1})(\d{15}|\d{18})$/.test(this.bankMap.bankcard))return void this.message.create("error","认证失败:请检查银行卡信息是否正确。");let n={company:this.company,bankcard:this.bankMap.bankcard.replace(/\s/g,""),name:this.name,idcard:this.idcard,mobile:this.bankMap.bankmobile},e=await this.novaCloud.api("/apig/bankcard",n);if(console.log(e),e&&200==e.code&&e?.success&&"一致"==e.data.msg){let n=e.data.bank_info,t=Parse.User.current()?.id,i=new Parse.Query("Account");i.equalTo("user",t),i.equalTo("company",this.company),i.notEqualTo("isDeleted",!0);let o=await i.first();if(!o?.id){o=new(Parse.Object.extend("Profile"))}o?.set("company",{__type:"Pointer",className:"Company",objectId:this.company}),o?.set("user",{__type:"Pointer",className:"_User",objectId:t}),o?.set("bank",[{bank:n.bank,bankcard:this.bankMap.bankcard,bankmobile:this.bankMap.bankmobile,city:n.city}]),await(o?.save());let a=new Parse.Query("Profile");a.equalTo("user",t),a.equalTo("company",this.company),a.notEqualTo("isDeleted",!0),a.select("objectId");let r=await a.first();if(!r?.id){r=new(Parse.Object.extend("Profile"))}r?.set("company",{__type:"Pointer",className:"Company",objectId:this.company}),r?.set("user",{__type:"Pointer",className:"_User",objectId:t}),r?.set("cardtype",n.bank),r?.set("cardnum",this.bankMap.bankcard),r?.set("nativePlace",n.city),await(r?.save()),this.message.create("success","认证成功"),this.verifyResult.bankcard=!0,this.isVisibleChange.emit(!1),this.veifyFinishBack()}else this.message.create("error","认证失败:请检查银行卡信息是否正确。")}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ModalUserVerifyComponent,deps:[{token:i1.HttpClient},{token:i2.NzMessageService},{token:i3.AccountService},{token:i4.AuthService},{token:i5.NovaCloudService},{token:i6.ModalController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"17.0.0",version:"17.3.12",type:ModalUserVerifyComponent,isStandalone:!0,selector:"app-user-verify",inputs:{isVisible:"isVisible",verifyOptions:"verifyOptions"},outputs:{isVisibleChange:"isVisibleChange"},ngImport:i0,template:'\n<ion-content *ngIf="isLoading">\n <div class="page" *ngIf="isLoading">\n <ion-spinner name="crescent" color="primary" style="width:80px;height:80px;"></ion-spinner>\n <ion-label color="primary">正在加载认证组件...</ion-label>\n </div>\n</ion-content>\n\n<ion-content class="ion-padding" *ngIf="!isLoading">\n <ion-segment [(ngModel)]="tab">\n <ion-segment-button *ngIf="verifyOptions?.idcard" value="idcard"><ion-icon name="card-outline"></ion-icon> 实名认证</ion-segment-button>\n <ion-segment-button *ngIf="verifyOptions?.student" value="student"><ion-icon name="school-outline"></ion-icon> 学生认证</ion-segment-button>\n <ion-segment-button *ngIf="verifyOptions?.bankcard" value="bankcard"><ion-icon name="wallet-outline"></ion-icon> 银行卡认证</ion-segment-button>\n </ion-segment>\n\n \x3c!-- <ng-container [ngTemplateOutlet]="rightAvatar"></ng-container> --\x3e\n <ng-container *ngIf="tab==\'idcard\'&&verifyOptions?.idcard">\n <ion-list>\n \x3c!-- 身份证OCR识别 --\x3e\n <ng-container *ngIf="verifyOptions?.idcard?.ocr">\n <ion-item>\n <ion-label><span class="required">*</span> 身份证正面</ion-label>\n <fm-edit-upload\n *ngIf="!idcard_image_front"\n [(file)]="idcard_image_front"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_front\')"\n ></fm-edit-upload>\n <ion-img *ngIf="idcard_image_front" [src]="idcard_image_front"></ion-img>\n </ion-item>\n <ion-item>\n <ion-label><span class="required">*</span> 身份证国徽面</ion-label>\n <fm-edit-upload\n *ngIf="!idcard_image_back"\n [(file)]="idcard_image_back"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_back\')"\n ></fm-edit-upload>\n <ion-img *ngIf="idcard_image_back" [src]="idcard_image_back"></ion-img>\n </ion-item>\n </ng-container>\n\n \x3c!-- 身份证手动输入 --\x3e\n <ng-container>\n <ion-item>\n @if (profile?.get(\'isCheck\')){\n <ion-input [ngModel]="name | secretText" label="姓名" [readonly]="true"></ion-input>\n }@else{\n <ion-input [(ngModel)]="name" label="姓名" [readonly]="verifyOptions?.idcard?.ocr" [placeholder]="verifyOptions?.idcard?.ocr?\'请上传身份证\':\'输入姓名\'"></ion-input>\n }\n </ion-item>\n\n <ion-item>\n @if (profile?.get(\'isCheck\')){\n <ion-input [ngModel]="idcard | secretText:\'idcard\'" label="身份证号" [readonly]="true"></ion-input>\n }@else{\n <ion-input [(ngModel)]="idcard" label="身份证号" [readonly]="verifyOptions?.idcard?.ocr" [placeholder]="verifyOptions?.idcard?.ocr?\'自动识别\':\'输入身份证号\'"></ion-input>\n }\n </ion-item>\n </ng-container>\n\n \x3c!-- 身份证认证状态 --\x3e\n <ion-button color="success" *ngIf="profile?.get(\'isCheck\'); else elseIdcard" expand="block">已实名</ion-button>\n <ng-template #elseIdcard>\n <ion-button color="primary" (click)="onSubmit()" [disabled]="!authDisabled()" expand="block">提交认证</ion-button>\n </ng-template>\n \n </ion-list>\n\n \x3c!-- <div class="tab-content">\n <div nz-row>\n <div nz-col nzSpan="12" class="li">\n <div class="label"><span>*</span> 身份证正面</div>\n <fm-edit-upload\n *ngIf="!idcard_image_front"\n [(file)]="idcard_image_front"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_front\')"\n ></fm-edit-upload>\n <div class="img-view" *ngIf="idcard_image_front">\n <span\n *ngIf="!profile?.get(\'isCheck\')"\n nz-icon\n nzType="close"\n nzTheme="outline"\n (click)="onDeleted(\'idcard_image_front\')"\n ></span>\n <img\n nz-image\n width="80px"\n height="80px"\n nzSrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"\n [nzSrc]="idcard_image_front"\n alt="身份证正面"\n />\n </div>\n </div>\n <div nz-col nzSpan="12" class="li">\n <div class="label"><span>*</span> 身份证国徽面</div>\n <fm-edit-upload\n *ngIf="!idcard_image_back"\n [(file)]="idcard_image_back"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_back\')"\n ></fm-edit-upload>\n <div class="img-view" *ngIf="idcard_image_back">\n <span\n *ngIf="!profile?.get(\'isCheck\')"\n nz-icon\n nzType="close"\n nzTheme="outline"\n (click)="onDeleted(\'idcard_image_back\')"\n ></span>\n <img\n nz-image\n width="80px"\n height="80px"\n nzSrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"\n [nzSrc]="idcard_image_back"\n alt="身份证国徽面"\n />\n </div>\n </div>\n </div>\n <div class="input-view">\n <nz-input-group nzAddOnBefore="姓名">\n <input\n type="text"\n nz-input\n [(ngModel)]="name"\n placeholder="请上传身份证"\n [disabled]="true"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="身份证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="idcard"\n placeholder="请上传身份证"\n [disabled]="true"\n />\n </nz-input-group>\n </div>\n <div nz-row>\n <button\n nz-button\n *ngIf="profile && profile?.get(\'isCheck\'); else elseTemplate"\n nzType="primary"\n nzBlock\n [disabled]="true"\n >\n 已实名\n </button>\n <ng-template #elseTemplate>\n <button\n nz-button\n nzType="primary"\n nzBlock\n (click)="onSubmit()"\n [disabled]="!authDisabled()"\n >\n 确定\n </button>\n </ng-template>\n </div>\n </div> --\x3e\n\n </ng-container>\n\n <ng-container *ngIf="tab==\'student\'&&verifyOptions?.student">\n \n \n <div class="info">\n <div class="input-view">\n <nz-input-group nzAddOnBefore="姓名">\n <input\n type="text"\n nz-input\n [(ngModel)]="name"\n placeholder="请先完成实名认证"\n [disabled]="profile && profile?.get(\'isCheck\')"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="学信网账号">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.studentID"\n placeholder="请填写学信网账号"\n [nzStatus]="studentDateil.studentID != \'\' ? \'\' : \'error\'"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="手机号">\n <input\n type="text"\n nz-input\n maxlength="11"\n [(ngModel)]="studentDateil.mobile"\n placeholder="请填写手机号"\n [nzStatus]="mobileStatus(studentDateil.mobile)"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="学校名称">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.school"\n placeholder="请填写学校名称"\n [nzStatus]="studentDateil.school != \'\' ? \'\' : \'error\'"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="所属学院">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.college"\n placeholder="请填写所属学院"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="专业名称">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.schoolMajor"\n placeholder="请填写专业名称"\n />\n </nz-input-group>\n </div>\n <div class="info-row">\n <div class="info-row-lable">是否在校</div>\n <nz-radio-group [(ngModel)]="studentDateil.studentType">\n <label nz-radio nzValue="在校">是</label>\n <label nz-radio nzValue="毕业">否</label>\n </nz-radio-group>\n </div>\n <ng-container\n *ngIf="studentDateil.studentType == \'在校\'; else template1"\n >\n <div class="info-row">\n <div class="info-row-lable">阶段</div>\n <nz-radio-group [(ngModel)]="studentDateil.education">\n <label nz-radio nzValue="大专">大专</label>\n <label nz-radio nzValue="本科">本科</label>\n <label nz-radio nzValue="硕士">硕士</label>\n <label nz-radio nzValue="博士">博士</label>\n </nz-radio-group>\n </div>\n <div class="info-row">\n <div class="info-row-lable info-select">年级:</div>\n <ion-select\n interface="action-sheet"\n cancel-text="关闭"\n [(ngModel)]="studentDateil.workUnit"\n placeholder="点击选择"\n >\n <ng-container *ngFor="let item of options">\n <ion-select-option [value]="item"\n >{{ item }}级</ion-select-option\n >\n </ng-container>\n </ion-select>\n </div>\n <nz-input-group nzAddOnBefore="学生证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.diploma"\n placeholder="请填写学生证号"\n />\n </nz-input-group>\n <div nz-row style="margin: 10px 0">\n <div nz-col nzSpan="12" class="li">\n <div class="label">\n <span style="color: red">*</span> 学生证照片\n </div>\n <fm-edit-upload\n *ngIf="!eduImage"\n [(file)]="eduImage"\n [company]="company"\n (fileListChange)="uploadChange($event, \'eduImage\')"\n ></fm-edit-upload>\n <div class="img-view" *ngIf="eduImage">\n <span\n *ngIf="!profile?.get(\'isCross\')"\n nz-icon\n nzType="close"\n nzTheme="outline"\n (click)="onDeleted(\'eduImage\')"\n ></span>\n <img\n nz-image\n width="100px"\n height="100px"\n nzSrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"\n [nzSrc]="eduImage"\n alt="学生证照片"\n />\n </div>\n </div>\n </div>\n </ng-container>\n <ng-template #template1>\n <div class="info-row">\n <div class="info-row-lable">最高学历</div>\n <nz-radio-group [(ngModel)]="studentDateil.education">\n <label nz-radio nzValue="大专">大专</label>\n <label nz-radio nzValue="学士">学士</label>\n <label nz-radio nzValue="硕士">硕士</label>\n <label nz-radio nzValue="博士">博士</label>\n </nz-radio-group>\n </div>\n <div class="info-row">\n <div class="info-row-lable info-select">毕业年份:</div>\n <ion-select\n interface="action-sheet"\n cancel-text="关闭"\n [(ngModel)]="studentDateil.entrySchool"\n placeholder="点击选择"\n >\n <ng-container *ngFor="let item of options">\n <ion-select-option [value]="item"\n >{{ item }}年</ion-select-option\n >\n </ng-container>\n </ion-select>\n </div>\n <nz-input-group nzAddOnBefore="毕业证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.degreeNumber"\n placeholder="请填写毕业证号"\n />\n </nz-input-group>\n </ng-template>\n <div nz-row style="margin: 10px auto">\n <button\n nz-button\n nzType="primary"\n nzBlock\n (click)="onSubimtStudent()"\n [disabled]="false"\n >\n 确定\n </button>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf="tab==\'bankcard\'&&verifyOptions?.bankcard">\n \n \n <div class="info">\n <div class="input-view">\n <nz-input-group nzAddOnBefore="姓名">\n <input\n type="text"\n nz-input\n [(ngModel)]="name"\n placeholder="请先完成实名认证"\n [disabled]="true"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="身份证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="idcard"\n placeholder="请先完成实名认证"\n [disabled]="true"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="银行卡账号">\n <input\n type="text"\n nz-input\n [(ngModel)]="bankMap.bankcard"\n placeholder="请填写银行卡账号"\n [nzStatus]="cardNoStatus()"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="银行卡预留手机号">\n <input\n type="text"\n nz-input\n [(ngModel)]="bankMap.bankmobile"\n maxlength="11"\n placeholder="请填写银行卡预留手机号"\n [nzStatus]="mobileStatus(bankMap.bankmobile)"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="开户行">\n <input\n type="text"\n nz-input\n [ngModel]="bankMap.bank"\n maxlength="11"\n placeholder="认证成功后自动识别"\n [disabled]="true"\n />\n </nz-input-group>\n \x3c!-- <div class="info-row">\n <div class="info-row-lable info-select">开户行:</div>\n <ion-select\n interface="action-sheet"\n cancel-text="关闭"\n [(ngModel)]="bankMap.bank"\n placeholder="点击选择"\n >\n <ng-container *ngFor="let item of bankOptions">\n <ion-select-option [value]="item"\n >{{ item }}</ion-select-option\n >\n </ng-container>\n </ion-select>\n </div> --\x3e\n </div>\n <div nz-row>\n <button\n nz-button\n nzType="primary"\n nzBlock\n (click)="onSubimtBank()"\n [disabled]="saveBankAuth()"\n >\n 确定\n </button>\n </div>\n </div>\n </ng-container>\n\n\n\n</ion-content>\n',styles:[".required{color:red}.page{display:flex;justify-content:center;align-items:center;flex-direction:column}.tab-content{width:80%;align-items:center;justify-content:center;margin:auto}.tab-content .li{display:flex;flex-direction:column;align-items:center}.tab-content .li .label{margin-bottom:10px}.tab-content .li .label span{color:red}.tab-content .li .img-view{position:relative}.tab-content .li .img-view span{position:absolute;right:-10px;top:0}.input-view{margin:10px auto}.info .info-row{display:flex;align-items:center;border:1px solid #d9d9d9;padding:6px 0}.info .info-row .info-row-lable{padding:0 10px;flex-shrink:0}.info .info-row .info-select{min-width:70px}.info .img-view{position:relative;width:100px}.info .img-view span{position:absolute;right:-10px;top:0}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i7.NgForOf,selector:"[ngFor][ngForOf]",inputs:["ngForOf","ngForTrackBy","ngForTemplate"]},{kind:"directive",type:i7.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:FormsModule},{kind:"directive",type:i8.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i8.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i8.MaxLengthValidator,selector:"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]",inputs:["maxlength"]},{kind:"directive",type:i8.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"ngmodule",type:ReactiveFormsModule},{kind:"ngmodule",type:NzInputModule},{kind:"directive",type:i9.NzInputDirective,selector:"input[nz-input],textarea[nz-input]",inputs:["nzBorderless","nzSize","nzStepperless","nzStatus","disabled"],exportAs:["nzInput"]},{kind:"component",type:i9.NzInputGroupComponent,selector:"nz-input-group",inputs:["nzAddOnBeforeIcon","nzAddOnAfterIcon","nzPrefixIcon","nzSuffixIcon","nzAddOnBefore","nzAddOnAfter","nzPrefix","nzStatus","nzSuffix","nzSize","nzSearch","nzCompact"],exportAs:["nzInputGroup"]},{kind:"ngmodule",type:NzIconModule},{kind:"directive",type:i10.NzIconDirective,selector:"[nz-icon]",inputs:["nzSpin","nzRotate","nzType","nzTheme","nzTwotoneColor","nzIconfont"],exportAs:["nzIcon"]},{kind:"ngmodule",type:NzTabsModule},{kind:"ngmodule",type:NzButtonModule},{kind:"component",type:i11.NzButtonComponent,selector:"button[nz-button], a[nz-button]",inputs:["nzBlock","nzGhost","nzSearch","nzLoading","nzDanger","disabled","tabIndex","nzType","nzShape","nzSize"],exportAs:["nzButton"]},{kind:"directive",type:i12.ɵNzTransitionPatchDirective,selector:"[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group",inputs:["hidden"]},{kind:"directive",type:i13.NzWaveDirective,selector:'[nz-wave],button[nz-button]:not([nzType="link"]):not([nzType="text"])',inputs:["nzWaveExtraNode"],exportAs:["nzWave"]},{kind:"ngmodule",type:NzModalModule},{kind:"ngmodule",type:NzGridModule},{kind:"directive",type:i14.NzColDirective,selector:"[nz-col],nz-col,nz-form-control,nz-form-label",inputs:["nzFlex","nzSpan","nzOrder","nzOffset","nzPush","nzPull","nzXs","nzSm","nzMd","nzLg","nzXl","nzXXl"],exportAs:["nzCol"]},{kind:"directive",type:i14.NzRowDirective,selector:"[nz-row],nz-row,nz-form-item",inputs:["nzAlign","nzJustify","nzGutter"],exportAs:["nzRow"]},{kind:"ngmodule",type:NzRadioModule},{kind:"component",type:i15.NzRadioComponent,selector:"[nz-radio],[nz-radio-button]",inputs:["nzValue","nzDisabled","nzAutoFocus","nz-radio-button"],exportAs:["nzRadio"]},{kind:"component",type:i15.NzRadioGroupComponent,selector:"nz-radio-group",inputs:["nzDisabled","nzButtonStyle","nzSize","nzName"],exportAs:["nzRadioGroup"]},{kind:"ngmodule",type:NzImageModule},{kind:"directive",type:i16.NzImageDirective,selector:"img[nz-image]",inputs:["nzSrc","nzSrcset","nzDisablePreview","nzFallback","nzPlaceholder","nzScaleStep"],exportAs:["nzImage"]},{kind:"ngmodule",type:EditUploadModule},{kind:"component",type:i17.EditUploadComponent,selector:"fm-edit-upload",inputs:["files","dragdrop","multi","max_file_size","type","avatarType","company","file","fileList","path"],outputs:["filesChange","fileChange","fileListChange"]},{kind:"component",type:IonContent,selector:"ion-content",inputs:["color","fixedSlotPlacement","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:IonSegment,selector:"ion-segment",inputs:["color","disabled","mode","scrollable","selectOnFocus","swipeGesture","value"]},{kind:"component",type:IonSegmentButton,selector:"ion-segment-button",inputs:["contentId","disabled","layout","mode","type","value"]},{kind:"component",type:IonLabel,selector:"ion-label",inputs:["color","mode","position"]},{kind:"component",type:IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{kind:"component",type:IonImg,selector:"ion-img",inputs:["alt","src"]},{kind:"component",type:IonSpinner,selector:"ion-spinner",inputs:["color","duration","name","paused"]},{kind:"component",type:IonList,selector:"ion-list",inputs:["inset","lines","mode"]},{kind:"component",type:IonItem,selector:"ion-item",inputs:["button","color","detail","detailIcon","disabled","download","href","lines","mode","rel","routerAnimation","routerDirection","target","type"]},{kind:"component",type:IonInput,selector:"ion-input",inputs:["accept","autocapitalize","autocomplete","autocorrect","autofocus","clearInput","clearOnEdit","color","counter","counterFormatter","debounce","disabled","enterkeyhint","errorText","fill","helperText","inputmode","label","labelPlacement","max","maxlength","min","minlength","mode","multiple","name","pattern","placeholder","readonly","required","shape","size","spellcheck","step","type","value"]},{kind:"component",type:IonButton,selector:"ion-button",inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]},{kind:"component",type:IonSelect,selector:"ion-select",inputs:["cancelText","color","compareWith","disabled","errorText","expandedIcon","fill","helperText","interface","interfaceOptions","justify","label","labelPlacement","mode","multiple","name","okText","placeholder","selectedText","shape","toggleIcon","value"]},{kind:"component",type:IonSelectOption,selector:"ion-select-option",inputs:["disabled","value"]},{kind:"pipe",type:SecretTextPipe,name:"secretText"}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ModalUserVerifyComponent,decorators:[{type:Component,args:[{selector:"app-user-verify",standalone:!0,imports:[CommonModule,FormsModule,ReactiveFormsModule,NzInputModule,NzIconModule,NzTabsModule,NzButtonModule,NzModalModule,NzGridModule,NzRadioModule,NzImageModule,EditUploadModule,IonContent,IonSegment,IonSegmentButton,IonLabel,IonIcon,IonImg,IonSpinner,IonList,IonItem,IonInput,IonButton,IonDatetime,IonDatetimeButton,IonSelect,IonSelectOption,SecretTextPipe],template:'\n<ion-content *ngIf="isLoading">\n <div class="page" *ngIf="isLoading">\n <ion-spinner name="crescent" color="primary" style="width:80px;height:80px;"></ion-spinner>\n <ion-label color="primary">正在加载认证组件...</ion-label>\n </div>\n</ion-content>\n\n<ion-content class="ion-padding" *ngIf="!isLoading">\n <ion-segment [(ngModel)]="tab">\n <ion-segment-button *ngIf="verifyOptions?.idcard" value="idcard"><ion-icon name="card-outline"></ion-icon> 实名认证</ion-segment-button>\n <ion-segment-button *ngIf="verifyOptions?.student" value="student"><ion-icon name="school-outline"></ion-icon> 学生认证</ion-segment-button>\n <ion-segment-button *ngIf="verifyOptions?.bankcard" value="bankcard"><ion-icon name="wallet-outline"></ion-icon> 银行卡认证</ion-segment-button>\n </ion-segment>\n\n \x3c!-- <ng-container [ngTemplateOutlet]="rightAvatar"></ng-container> --\x3e\n <ng-container *ngIf="tab==\'idcard\'&&verifyOptions?.idcard">\n <ion-list>\n \x3c!-- 身份证OCR识别 --\x3e\n <ng-container *ngIf="verifyOptions?.idcard?.ocr">\n <ion-item>\n <ion-label><span class="required">*</span> 身份证正面</ion-label>\n <fm-edit-upload\n *ngIf="!idcard_image_front"\n [(file)]="idcard_image_front"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_front\')"\n ></fm-edit-upload>\n <ion-img *ngIf="idcard_image_front" [src]="idcard_image_front"></ion-img>\n </ion-item>\n <ion-item>\n <ion-label><span class="required">*</span> 身份证国徽面</ion-label>\n <fm-edit-upload\n *ngIf="!idcard_image_back"\n [(file)]="idcard_image_back"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_back\')"\n ></fm-edit-upload>\n <ion-img *ngIf="idcard_image_back" [src]="idcard_image_back"></ion-img>\n </ion-item>\n </ng-container>\n\n \x3c!-- 身份证手动输入 --\x3e\n <ng-container>\n <ion-item>\n @if (profile?.get(\'isCheck\')){\n <ion-input [ngModel]="name | secretText" label="姓名" [readonly]="true"></ion-input>\n }@else{\n <ion-input [(ngModel)]="name" label="姓名" [readonly]="verifyOptions?.idcard?.ocr" [placeholder]="verifyOptions?.idcard?.ocr?\'请上传身份证\':\'输入姓名\'"></ion-input>\n }\n </ion-item>\n\n <ion-item>\n @if (profile?.get(\'isCheck\')){\n <ion-input [ngModel]="idcard | secretText:\'idcard\'" label="身份证号" [readonly]="true"></ion-input>\n }@else{\n <ion-input [(ngModel)]="idcard" label="身份证号" [readonly]="verifyOptions?.idcard?.ocr" [placeholder]="verifyOptions?.idcard?.ocr?\'自动识别\':\'输入身份证号\'"></ion-input>\n }\n </ion-item>\n </ng-container>\n\n \x3c!-- 身份证认证状态 --\x3e\n <ion-button color="success" *ngIf="profile?.get(\'isCheck\'); else elseIdcard" expand="block">已实名</ion-button>\n <ng-template #elseIdcard>\n <ion-button color="primary" (click)="onSubmit()" [disabled]="!authDisabled()" expand="block">提交认证</ion-button>\n </ng-template>\n \n </ion-list>\n\n \x3c!-- <div class="tab-content">\n <div nz-row>\n <div nz-col nzSpan="12" class="li">\n <div class="label"><span>*</span> 身份证正面</div>\n <fm-edit-upload\n *ngIf="!idcard_image_front"\n [(file)]="idcard_image_front"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_front\')"\n ></fm-edit-upload>\n <div class="img-view" *ngIf="idcard_image_front">\n <span\n *ngIf="!profile?.get(\'isCheck\')"\n nz-icon\n nzType="close"\n nzTheme="outline"\n (click)="onDeleted(\'idcard_image_front\')"\n ></span>\n <img\n nz-image\n width="80px"\n height="80px"\n nzSrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"\n [nzSrc]="idcard_image_front"\n alt="身份证正面"\n />\n </div>\n </div>\n <div nz-col nzSpan="12" class="li">\n <div class="label"><span>*</span> 身份证国徽面</div>\n <fm-edit-upload\n *ngIf="!idcard_image_back"\n [(file)]="idcard_image_back"\n [company]="company"\n (fileListChange)="uploadChange($event, \'idcard_image_back\')"\n ></fm-edit-upload>\n <div class="img-view" *ngIf="idcard_image_back">\n <span\n *ngIf="!profile?.get(\'isCheck\')"\n nz-icon\n nzType="close"\n nzTheme="outline"\n (click)="onDeleted(\'idcard_image_back\')"\n ></span>\n <img\n nz-image\n width="80px"\n height="80px"\n nzSrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"\n [nzSrc]="idcard_image_back"\n alt="身份证国徽面"\n />\n </div>\n </div>\n </div>\n <div class="input-view">\n <nz-input-group nzAddOnBefore="姓名">\n <input\n type="text"\n nz-input\n [(ngModel)]="name"\n placeholder="请上传身份证"\n [disabled]="true"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="身份证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="idcard"\n placeholder="请上传身份证"\n [disabled]="true"\n />\n </nz-input-group>\n </div>\n <div nz-row>\n <button\n nz-button\n *ngIf="profile && profile?.get(\'isCheck\'); else elseTemplate"\n nzType="primary"\n nzBlock\n [disabled]="true"\n >\n 已实名\n </button>\n <ng-template #elseTemplate>\n <button\n nz-button\n nzType="primary"\n nzBlock\n (click)="onSubmit()"\n [disabled]="!authDisabled()"\n >\n 确定\n </button>\n </ng-template>\n </div>\n </div> --\x3e\n\n </ng-container>\n\n <ng-container *ngIf="tab==\'student\'&&verifyOptions?.student">\n \n \n <div class="info">\n <div class="input-view">\n <nz-input-group nzAddOnBefore="姓名">\n <input\n type="text"\n nz-input\n [(ngModel)]="name"\n placeholder="请先完成实名认证"\n [disabled]="profile && profile?.get(\'isCheck\')"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="学信网账号">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.studentID"\n placeholder="请填写学信网账号"\n [nzStatus]="studentDateil.studentID != \'\' ? \'\' : \'error\'"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="手机号">\n <input\n type="text"\n nz-input\n maxlength="11"\n [(ngModel)]="studentDateil.mobile"\n placeholder="请填写手机号"\n [nzStatus]="mobileStatus(studentDateil.mobile)"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="学校名称">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.school"\n placeholder="请填写学校名称"\n [nzStatus]="studentDateil.school != \'\' ? \'\' : \'error\'"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="所属学院">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.college"\n placeholder="请填写所属学院"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="专业名称">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.schoolMajor"\n placeholder="请填写专业名称"\n />\n </nz-input-group>\n </div>\n <div class="info-row">\n <div class="info-row-lable">是否在校</div>\n <nz-radio-group [(ngModel)]="studentDateil.studentType">\n <label nz-radio nzValue="在校">是</label>\n <label nz-radio nzValue="毕业">否</label>\n </nz-radio-group>\n </div>\n <ng-container\n *ngIf="studentDateil.studentType == \'在校\'; else template1"\n >\n <div class="info-row">\n <div class="info-row-lable">阶段</div>\n <nz-radio-group [(ngModel)]="studentDateil.education">\n <label nz-radio nzValue="大专">大专</label>\n <label nz-radio nzValue="本科">本科</label>\n <label nz-radio nzValue="硕士">硕士</label>\n <label nz-radio nzValue="博士">博士</label>\n </nz-radio-group>\n </div>\n <div class="info-row">\n <div class="info-row-lable info-select">年级:</div>\n <ion-select\n interface="action-sheet"\n cancel-text="关闭"\n [(ngModel)]="studentDateil.workUnit"\n placeholder="点击选择"\n >\n <ng-container *ngFor="let item of options">\n <ion-select-option [value]="item"\n >{{ item }}级</ion-select-option\n >\n </ng-container>\n </ion-select>\n </div>\n <nz-input-group nzAddOnBefore="学生证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.diploma"\n placeholder="请填写学生证号"\n />\n </nz-input-group>\n <div nz-row style="margin: 10px 0">\n <div nz-col nzSpan="12" class="li">\n <div class="label">\n <span style="color: red">*</span> 学生证照片\n </div>\n <fm-edit-upload\n *ngIf="!eduImage"\n [(file)]="eduImage"\n [company]="company"\n (fileListChange)="uploadChange($event, \'eduImage\')"\n ></fm-edit-upload>\n <div class="img-view" *ngIf="eduImage">\n <span\n *ngIf="!profile?.get(\'isCross\')"\n nz-icon\n nzType="close"\n nzTheme="outline"\n (click)="onDeleted(\'eduImage\')"\n ></span>\n <img\n nz-image\n width="100px"\n height="100px"\n nzSrc="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"\n [nzSrc]="eduImage"\n alt="学生证照片"\n />\n </div>\n </div>\n </div>\n </ng-container>\n <ng-template #template1>\n <div class="info-row">\n <div class="info-row-lable">最高学历</div>\n <nz-radio-group [(ngModel)]="studentDateil.education">\n <label nz-radio nzValue="大专">大专</label>\n <label nz-radio nzValue="学士">学士</label>\n <label nz-radio nzValue="硕士">硕士</label>\n <label nz-radio nzValue="博士">博士</label>\n </nz-radio-group>\n </div>\n <div class="info-row">\n <div class="info-row-lable info-select">毕业年份:</div>\n <ion-select\n interface="action-sheet"\n cancel-text="关闭"\n [(ngModel)]="studentDateil.entrySchool"\n placeholder="点击选择"\n >\n <ng-container *ngFor="let item of options">\n <ion-select-option [value]="item"\n >{{ item }}年</ion-select-option\n >\n </ng-container>\n </ion-select>\n </div>\n <nz-input-group nzAddOnBefore="毕业证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="studentDateil.degreeNumber"\n placeholder="请填写毕业证号"\n />\n </nz-input-group>\n </ng-template>\n <div nz-row style="margin: 10px auto">\n <button\n nz-button\n nzType="primary"\n nzBlock\n (click)="onSubimtStudent()"\n [disabled]="false"\n >\n 确定\n </button>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf="tab==\'bankcard\'&&verifyOptions?.bankcard">\n \n \n <div class="info">\n <div class="input-view">\n <nz-input-group nzAddOnBefore="姓名">\n <input\n type="text"\n nz-input\n [(ngModel)]="name"\n placeholder="请先完成实名认证"\n [disabled]="true"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="身份证号">\n <input\n type="text"\n nz-input\n [(ngModel)]="idcard"\n placeholder="请先完成实名认证"\n [disabled]="true"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="银行卡账号">\n <input\n type="text"\n nz-input\n [(ngModel)]="bankMap.bankcard"\n placeholder="请填写银行卡账号"\n [nzStatus]="cardNoStatus()"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="银行卡预留手机号">\n <input\n type="text"\n nz-input\n [(ngModel)]="bankMap.bankmobile"\n maxlength="11"\n placeholder="请填写银行卡预留手机号"\n [nzStatus]="mobileStatus(bankMap.bankmobile)"\n />\n </nz-input-group>\n <nz-input-group nzAddOnBefore="开户行">\n <input\n type="text"\n nz-input\n [ngModel]="bankMap.bank"\n maxlength="11"\n placeholder="认证成功后自动识别"\n [disabled]="true"\n />\n </nz-input-group>\n \x3c!-- <div class="info-row">\n <div class="info-row-lable info-select">开户行:</div>\n <ion-select\n interface="action-sheet"\n cancel-text="关闭"\n [(ngModel)]="bankMap.bank"\n placeholder="点击选择"\n >\n <ng-container *ngFor="let item of bankOptions">\n <ion-select-option [value]="item"\n >{{ item }}</ion-select-option\n >\n </ng-container>\n </ion-select>\n </div> --\x3e\n </div>\n <div nz-row>\n <button\n nz-button\n nzType="primary"\n nzBlock\n (click)="onSubimtBank()"\n [disabled]="saveBankAuth()"\n >\n 确定\n </button>\n </div>\n </div>\n </ng-container>\n\n\n\n</ion-content>\n',styles:[".required{color:red}.page{display:flex;justify-content:center;align-items:center;flex-direction:column}.tab-content{width:80%;align-items:center;justify-content:center;margin:auto}.tab-content .li{display:flex;flex-direction:column;align-items:center}.tab-content .li .label{margin-bottom:10px}.tab-content .li .label span{color:red}.tab-content .li .img-view{position:relative}.tab-content .li .img-view span{position:absolute;right:-10px;top:0}.input-view{margin:10px auto}.info .info-row{display:flex;align-items:center;border:1px solid #d9d9d9;padding:6px 0}.info .info-row .info-row-lable{padding:0 10px;flex-shrink:0}.info .info-row .info-select{min-width:70px}.info .img-view{position:relative;width:100px}.info .img-view span{position:absolute;right:-10px;top:0}\n"]}]}],ctorParameters:()=>[{type:i1.HttpClient},{type:i2.NzMessageService},{type:i3.AccountService},{type:i4.AuthService},{type:i5.NovaCloudService},{type:i6.ModalController}],propDecorators:{isVisible:[{type:Input}],isVisibleChange:[{type:Output}],verifyOptions:[{type:Input}]}});export async function openUserVerifyModal(n,e,t){let i=t&&Object.keys(t)?.[0]||"idcard";null==t?.autoFinish&&t&&(t.autoFinish=!0);let o=await n.create({component:ModalUserVerifyComponent,componentProps:{verifyOptions:t,tab:i,onBreakPointSet:()=>{o?.setCurrentBreakpoint(.75)}},breakpoints:[.35,.75,1],initialBreakpoint:.35});o.present();let{data:a,role:r}=await o.onWillDismiss();if("confirm"==r)return a}
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9wZXJzb24vbW9kYWwtdXNlci12ZXJpZnkvdXNlci12ZXJpZnkuY29tcG9uZW50Lm1qcw==`
|
|
10
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/person/person-detail/person-detail.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component}from"@angular/core";import{FormsModule,ReactiveFormsModule}from"@angular/forms";import{NzInputModule}from"ng-zorro-antd/input";import{NzRadioModule}from"ng-zorro-antd/radio";import{CommonModule}from"@angular/common";import{NzDatePickerModule}from"ng-zorro-antd/date-picker";import{EditUploadModule}from"../edit-upload/edit-upload.module";import{ActivatedRoute}from"@angular/router";import{NzMessageService}from"ng-zorro-antd/message";import{Location}from"@angular/common";import*as Parse from"parse";import{IonModal,IonDatetimeButton,ModalController,IonDatetime,IonButton,IonHeader,IonButtons,IonToolbar,IonContent,IonTitle}from"@ionic/angular/standalone";import*as i0 from"@angular/core";import*as i1 from"@angular/router";import*as i2 from"ng-zorro-antd/message";import*as i3 from"@angular/common";import*as i4 from"@ionic/angular/standalone";import*as i5 from"ng-zorro-antd/input";import*as i6 from"ng-zorro-antd/radio";import*as i7 from"@angular/forms";import*as i8 from"../edit-upload/edit-upload.component";export class PersonDetailComponent{cancel(){this.modalCtrl.dismiss(null)}async confirm(){await this.addPerson(),this.person?.id&&this.modalCtrl.dismiss(this.person,"confirm")}constructor(t,e,n,o){this.route=t,this.message=e,this.location=n,this.modalCtrl=o,this.radioValue="男",this.company="",this.avatar="",this.thumb="",this.gender={"男":"男","女":"女"},this.route.queryParamMap.subscribe((t=>{this.personId=t.get("personId"),console.log(this.personId)}))}ngOnInit(){this.person?.id||this.getPerson()}changeAvatar(){this.avatar="",console.log(this.avatar)}changeThumb(){this.thumb="",console.log(this.thumb)}onDateChange(t){const e=t.detail.value,n=new Date(e);this.date=n,console.log(this.date)}async getPerson(){if(!this.personId)return;let t=new Parse.Query("Person");t.equalTo("company","Svehl6FceL"),t.equalTo("objectId",this.personId),t.notEqualTo("isDeleted",!0),this.person=await t.first(),this.person?.id&&(this.name=this.person.get("name"),this.radioValue=this.person.get("gender"),this.birthday=this.person.get("birthday"),this.post=this.person.get("post"),this.mobile=this.person.get("mobile"),this.hobby=this.person.get("hobby"),this.avatar=this.person.get("avatar"),this.thumb=this.person.get("thumb"))}async addPerson(){if(this.currentUser=Parse.User.current(),!this.name)return this.message.error("姓名未填写");if(!this.radioValue)return this.message.error("性别未填写");if(!this.person){let t=Parse.Object.extend("Person");this.person=new t}if(this.person){this.person.set("name",this.name),this.person.set("gender",this.gender[this.radioValue]),this.person.set("birthday",this.date),this.person.set("post",this.post),this.person.set("mobile",String(this.mobile)),this.person.set("hobby",this.hobby),this.person.set("avatar",this.avatar),this.person.set("thumb",this.thumb),this.person.set("creator",{__type:"Pointer",className:"_User",objectId:this.currentUser?.id}),this.person.set("company",{__type:"Pointer",className:"Company",objectId:"Svehl6FceL"});try{this.person=await this.person.save(),this.person?.id&&this.message.success("保存成功")}catch(t){console.log(t),this.message.error("保存失败")}}}goBack(){this.location.back()}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PersonDetailComponent,deps:[{token:i1.ActivatedRoute},{token:i2.NzMessageService},{token:i3.Location},{token:i4.ModalController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:PersonDetailComponent,isStandalone:!0,selector:"app-person-detail",providers:[],ngImport:i0,template:'<ion-header>\n <ion-toolbar>\n <ion-buttons slot="start" (click)="cancel()">\n <ion-button>取消</ion-button>\n </ion-buttons>\n <ion-title>基础信息</ion-title>\n <ion-buttons slot="end" (click)="confirm()">\n <ion-button>完成</ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n\n<div class="page">\n \x3c!-- <div class="top">完善人物基础信息</div> --\x3e\n <div class="box">\n <div class="item">\n <div class="title">姓名</div>\n <div class="input" style="padding: 3% 1% 1% 1%;">\n <input nz-input placeholder="请输入真实姓名" [(ngModel)]="name" nzBorderless style="width: 100%;background-color: #1e1f22;color: #fff;" />\n <div style="\n height: 1px;\n width: 95%;\n background-color: #353a4a;\n margin: 2% auto;"></div>\n </div>\n </div>\n <div class="item">\n <div class="title">性别</div>\n <div class="sex">\n <nz-radio-group [(ngModel)]="radioValue">\n <label nz-radio nzValue="男" style="color: #fff;">男</label>\n <label nz-radio nzValue="女" style="color: #fff;">女</label>\n </nz-radio-group>\n <div style="\n height: 1px;\n width: 100%;\n background-color: #353a4a;\n margin: 2% auto;"></div>\n </div>\n </div>\n <div class="item" style="padding: 3%;display: flex;">\n <div style="display: flex; flex-direction: row;width: 50%;text-align: center;">\n <div class="upload_avatar">\n <fm-edit-upload *ngIf="!avatar" [(file)]="avatar" [multi]="true" [company]="company"></fm-edit-upload>\n <img style="width: 130px;height:130px; object-fit: cover;" *ngIf="avatar" [src]="avatar" alt="" >\n <div>上传头像</div>\n </div>\n <div *ngIf="avatar" (click)="changeAvatar()" style="margin-left: 4px; font-size: 20px;margin-top: -20px; height: 25px; cursor: pointer;">x</div>\n </div>\n <div style="display: flex; flex-direction: row;width: 50%;text-align: center;">\n <div class="upload_avatar">\n <fm-edit-upload *ngIf="!thumb" [(file)]="thumb" [multi]="true" [company]="company"></fm-edit-upload>\n <img style="height: 130px; object-fit: cover;" *ngIf="thumb" [src]="thumb" alt="" >\n <div>上传封面</div>\n </div>\n <div *ngIf="thumb" (click)="changeThumb()" style="margin-left: 4px; font-size: 20px;margin-top: -20px; height: 25px; cursor: pointer;">x</div>\n </div>\n </div>\n <div class="item">\n <div class="title">生日</div>\n <div class="birthday">\n <ion-datetime-button datetime="datetime" [(ngModel)]="birthday"></ion-datetime-button>\n <ion-modal [keepContentsMounted]="true">\n <ng-template>\n <ion-datetime id="datetime" presentation="date"\n (ionChange)="onDateChange($event)"></ion-datetime>\n </ng-template>\n </ion-modal>\n <div style="\n height: 1px;\n width: 100%;\n background-color: #353a4a;\n margin: 2% auto;"></div>\n </div>\n </div>\n <div class="item">\n <div class="title">现任职位</div>\n <div class="input" style="padding: 3% 1% 1% 1%;">\n <input nz-input placeholder="请输入现任职位" [(ngModel)]="post" nzBorderless style="width: 100%;background-color: #1e1f22;color: #fff;" />\n <div style="\n height: 1px;\n width: 95%;\n background-color: #353a4a;\n margin: 2% auto;"></div>\n </div>\n </div>\n <div class="item">\n <div class="title">联系方式</div>\n <div class="input" style="padding: 3% 1% 1% 1%;">\n <input nz-input placeholder="请输入联系方式" [(ngModel)]="mobile" type="number" maxlength="11" nzBorderless style="width: 100%;background-color: #1e1f22;color: #fff;" />\n <div style="\n height: 1px;\n width: 95%;\n background-color: #353a4a;\n margin: 2% auto;"></div>\n </div>\n </div>\n <div class="item">\n <div class="title">兴趣爱好</div>\n <div class="input" style="padding: 3% 1% 1% 1%;">\n <input nz-input placeholder="请输入兴趣爱好" [(ngModel)]="hobby" nzBorderless style="width: 100%;background-color: #1e1f22;color: #fff;" />\n <div style="\n height: 1px;\n width: 95%;\n background-color: #353a4a;\n margin: 2% auto;"></div>\n </div>\n </div>\n\n <ion-button style="width: 90%;margin-left: 5%;" (click)="confirm()">完成</ion-button>\n </div>\n</div>\n</ion-content>\n',styles:[".page{width:100%;height:100%;padding:2%;background-color:#030810;color:#fff;overflow-y:scroll}.page .top{padding:3%;color:#ba6b16}.page .box{height:95%;padding:5% 0;background-color:#1e1f22;border-radius:20px}.page .box span{margin-left:3%}.page .box .item .title{margin-left:3%;margin-top:12px}.page .box .item .sex,.page .box .item .birthday{padding:3%}.page .box ion-button{--background: #6e23ce}ion-datetime-button{display:block}\n"],dependencies:[{kind:"component",type:IonDatetimeButton,selector:"ion-datetime-button",inputs:["color","datetime","disabled","mode"]},{kind:"component",type:IonModal,selector:"ion-modal"},{kind:"component",type:IonDatetime,selector:"ion-datetime",inputs:["cancelText","clearText","color","dayValues","disabled","doneText","firstDayOfWeek","formatOptions","highlightedDates","hourCycle","hourValues","isDateEnabled","locale","max","min","minuteValues","mode","monthValues","multiple","name","preferWheel","presentation","readonly","showClearButton","showDefaultButtons","showDefaultTimeLabel","showDefaultTitle","size","titleSelectedDatesFormatter","value","yearValues"]},{kind:"component",type:IonButton,selector:"ion-button",inputs:["buttonType","color","disabled","download","expand","fill","form","href","mode","rel","routerAnimation","routerDirection","shape","size","strong","target","type"]},{kind:"component",type:IonHeader,selector:"ion-header",inputs:["collapse","mode","translucent"]},{kind:"component",type:IonButtons,selector:"ion-buttons",inputs:["collapse"]},{kind:"component",type:IonToolbar,selector:"ion-toolbar",inputs:["color","mode"]},{kind:"component",type:IonContent,selector:"ion-content",inputs:["color","fixedSlotPlacement","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:IonTitle,selector:"ion-title",inputs:["color","size"]},{kind:"ngmodule",type:NzDatePickerModule},{kind:"ngmodule",type:NzInputModule},{kind:"directive",type:i5.NzInputDirective,selector:"input[nz-input],textarea[nz-input]",inputs:["nzBorderless","nzSize","nzStepperless","nzStatus","disabled"],exportAs:["nzInput"]},{kind:"ngmodule",type:NzRadioModule},{kind:"component",type:i6.NzRadioComponent,selector:"[nz-radio],[nz-radio-button]",inputs:["nzValue","nzDisabled","nzAutoFocus","nz-radio-button"],exportAs:["nzRadio"]},{kind:"component",type:i6.NzRadioGroupComponent,selector:"nz-radio-group",inputs:["nzDisabled","nzButtonStyle","nzSize","nzName"],exportAs:["nzRadioGroup"]},{kind:"ngmodule",type:ReactiveFormsModule},{kind:"directive",type:i7.DefaultValueAccessor,selector:"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]"},{kind:"directive",type:i7.NumberValueAccessor,selector:"input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]"},{kind:"directive",type:i7.NgControlStatus,selector:"[formControlName],[ngModel],[formControl]"},{kind:"directive",type:i7.MaxLengthValidator,selector:"[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]",inputs:["maxlength"]},{kind:"ngmodule",type:FormsModule},{kind:"directive",type:i7.NgModel,selector:"[ngModel]:not([formControlName]):not([formControl])",inputs:["name","disabled","ngModel","ngModelOptions"],outputs:["ngModelChange"],exportAs:["ngModel"]},{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i3.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:EditUploadModule},{kind:"component",type:i8.EditUploadComponent,selector:"fm-edit-upload",inputs:["files","dragdrop","multi","max_file_size","type","avatarType","company","file","fileList","path"],outputs:["filesChange","fileChange","fileListChange"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PersonDetailComponent,decorators:[{type:Component,args:[{selector:"app-person-detail",standalone:!0,imports:[IonDatetimeButton,IonModal,IonDatetime,IonButton,IonHeader,IonButtons,IonToolbar,IonContent,IonTitle,NzDatePickerModule,NzInputModule,NzRadioModule,ReactiveFormsModule,FormsModule,CommonModule,EditUploadModule],providers:[],template:'<ion-header>\n <ion-toolbar>\n <ion-buttons slot="start" (click)="cancel()">\n <ion-button>取消</ion-button>\n </ion-buttons>\n <ion-title>基础信息</ion-title>\n <ion-buttons slot="end" (click)="confirm()">\n <ion-button>完成</ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n\n<div class="page">\n \x3c!-- <div class="top">完善人物基础信息</div> --\x3e\n <div class="box">\n <div class="item">\n <div class="title">姓名</div>\n <div class="input" style="padding: 3% 1% 1% 1%;">\n <input nz-input placeholder="请输入真实姓名" [(ngModel)]="name" nzBorderless style="width: 100%;background-color: #1e1f22;color: #fff;" />\n <div style="\n height: 1px;\n width: 95%;\n background-color: #353a4a;\n margin: 2% auto;"></div>\n </div>\n </div>\n <div class="item">\n <div class="title">性别</div>\n <div class="sex">\n <nz-radio-group [(ngModel)]="radioValue">\n <label nz-radio nzValue="男" style="color: #fff;">男</label>\n <label nz-radio nzValue="女" style="color: #fff;">女</label>\n </nz-radio-group>\n <div style="\n height: 1px;\n width: 100%;\n background-color: #353a4a;\n margin: 2% auto;"></div>\n </div>\n </div>\n <div class="item" style="padding: 3%;display: flex;">\n <div style="display: flex; flex-direction: row;width: 50%;text-align: center;">\n <div class="upload_avatar">\n <fm-edit-upload *ngIf="!avatar" [(file)]="avatar" [multi]="true" [company]="company"></fm-edit-upload>\n <img style="width: 130px;height:130px; object-fit: cover;" *ngIf="avatar" [src]="avatar" alt="" >\n <div>上传头像</div>\n </div>\n <div *ngIf="avatar" (click)="changeAvatar()" style="margin-left: 4px; font-size: 20px;margin-top: -20px; height: 25px; cursor: pointer;">x</div>\n </div>\n <div style="display: flex; flex-direction: row;width: 50%;text-align: center;">\n <div class="upload_avatar">\n <fm-edit-upload *ngIf="!thumb" [(file)]="thumb" [multi]="true" [company]="company"></fm-edit-upload>\n <img style="height: 130px; object-fit: cover;" *ngIf="thumb" [src]="thumb" alt="" >\n <div>上传封面</div>\n </div>\n <div *ngIf="thumb" (click)="changeThumb()" style="margin-left: 4px; font-size: 20px;margin-top: -20px; height: 25px; cursor: pointer;">x</div>\n </div>\n </div>\n <div class="item">\n <div class="title">生日</div>\n <div class="birthday">\n <ion-datetime-button datetime="datetime" [(ngModel)]="birthday"></ion-datetime-button>\n <ion-modal [keepContentsMounted]="true">\n <ng-template>\n <ion-datetime id="datetime" presentation="date"\n (ionChange)="onDateChange($event)"></ion-datetime>\n </ng-template>\n </ion-modal>\n <div style="\n height: 1px;\n width: 100%;\n background-color: #353a4a;\n margin: 2% auto;"></div>\n </div>\n </div>\n <div class="item">\n <div class="title">现任职位</div>\n <div class="input" style="padding: 3% 1% 1% 1%;">\n <input nz-input placeholder="请输入现任职位" [(ngModel)]="post" nzBorderless style="width: 100%;background-color: #1e1f22;color: #fff;" />\n <div style="\n height: 1px;\n width: 95%;\n background-color: #353a4a;\n margin: 2% auto;"></div>\n </div>\n </div>\n <div class="item">\n <div class="title">联系方式</div>\n <div class="input" style="padding: 3% 1% 1% 1%;">\n <input nz-input placeholder="请输入联系方式" [(ngModel)]="mobile" type="number" maxlength="11" nzBorderless style="width: 100%;background-color: #1e1f22;color: #fff;" />\n <div style="\n height: 1px;\n width: 95%;\n background-color: #353a4a;\n margin: 2% auto;"></div>\n </div>\n </div>\n <div class="item">\n <div class="title">兴趣爱好</div>\n <div class="input" style="padding: 3% 1% 1% 1%;">\n <input nz-input placeholder="请输入兴趣爱好" [(ngModel)]="hobby" nzBorderless style="width: 100%;background-color: #1e1f22;color: #fff;" />\n <div style="\n height: 1px;\n width: 95%;\n background-color: #353a4a;\n margin: 2% auto;"></div>\n </div>\n </div>\n\n <ion-button style="width: 90%;margin-left: 5%;" (click)="confirm()">完成</ion-button>\n </div>\n</div>\n</ion-content>\n',styles:[".page{width:100%;height:100%;padding:2%;background-color:#030810;color:#fff;overflow-y:scroll}.page .top{padding:3%;color:#ba6b16}.page .box{height:95%;padding:5% 0;background-color:#1e1f22;border-radius:20px}.page .box span{margin-left:3%}.page .box .item .title{margin-left:3%;margin-top:12px}.page .box .item .sex,.page .box .item .birthday{padding:3%}.page .box ion-button{--background: #6e23ce}ion-datetime-button{display:block}\n"]}]}],ctorParameters:()=>[{type:i1.ActivatedRoute},{type:i2.NzMessageService},{type:i3.Location},{type:i4.ModalController}]});export async function openPersonDetailEditModal(t,e){let n=await t.create({component:PersonDetailComponent,componentProps:{person:e},breakpoints:[.5,1],initialBreakpoint:.5});n.present();let{data:o,role:i}=await n.onWillDismiss();if("confirm"==i){let t=o;return"PersonAuthor"==o?.className?o?.get("person"):t}return null}
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9wZXJzb24vcGVyc29uLWRldGFpbC9wZXJzb24tZGV0YWlsLmNvbXBvbmVudC5tanM=`
|
|
10
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* @copyright © 未来飞马 © 未来全栈 www.fmode.cn
|
|
4
|
+
* 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
|
|
5
|
+
* 保留所有权利 All Rights Reserved.
|
|
6
|
+
* /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/person/person.service.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Injectable}from"@angular/core";import{MatDialog}from"@angular/material/dialog";import Parse from"parse";import{AgentPrompt}from"../core/agent/prompt";import*as i0 from"@angular/core";import*as i1 from"@angular/material/dialog";const agentPrompt=new AgentPrompt;export class PersonService{constructor(e){this.dialog=e,this.personMap={},this.objectMap={},this.PromptTplPersonRelationCode="person-relation-tpl"}async loadPersonById(e){if(this.personMap[e])return this.personMap[e];let r=new Parse.Query("Person");r.include("userVerify");let t=await r.get(e);return t?.id&&(this.personMap[e]=t),t}async loadObjectById(e,r,t){if(this.objectMap[r])return this.objectMap[r];let a=new Parse.Query(e);a.include(...t);let o=await a.get(r);return o?.id&&(this.objectMap[r]=o),o}test(){return new Promise((e=>{}))}async loadSelfPerson(){let e=new Parse.Query("Person");return e.notEqualTo("isDeleted",!0),e.include("userVerify"),e.equalTo("userVerify",Parse.User.current()?.id),await e.first()}async queryOwnPerson(e){let r=Parse.User.current();if(!r?.id)return[];let t=new Parse.Query("Person");t.include("userVerify"),t.notEqualTo("isDeleted",!0),t.notEqualTo("userVerify",r?.id),t.equalTo("creator",r?.id),t.addDescending("updatedAt"),e?.roleTags.length>0&&t.containedIn("tags",e?.roleTags);let a=await t.find();return a.forEach((e=>this.personMap[e?.id]=e)),a}async queryAuthPerson(e){let r=Parse.User.current();if(!r?.id)return[];let t={};e?.roleTags?.length>0&&(t.person={$inQuery:{where:{tags:{$in:e?.roleTags}},className:"Person"}});let a=Parse.Query.fromJSON("PersonAuthor",{where:t});a.include("person","person.userVerify"),a.notEqualTo("isDeleted",!0),a.equalTo("isVerified",!0),a.equalTo("user",r?.id),a.addDescending("updatedAt");let o=await a.find();return o.forEach((e=>this.personMap[e?.id]=e.get("person"))),o}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PersonService,deps:[{token:i1.MatDialog}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PersonService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:PersonService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.MatDialog}]});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9wZXJzb24vcGVyc29uLnNlcnZpY2UubWpz`
|
|
10
|
+
|
package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
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-article-editor/article-editor-topbar/article-editor-topbar.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{CommonModule}from"@angular/common";import{Component,EventEmitter,Input,Output,ViewChild}from"@angular/core";import{MatButtonModule}from"@angular/material/button";import{MatChipsModule}from"@angular/material/chips";import{MatSlideToggleModule}from"@angular/material/slide-toggle";import{IonicModule,NavController}from"@ionic/angular";import{NzAvatarModule}from"ng-zorro-antd/avatar";import{NzDividerModule}from"ng-zorro-antd/divider";import{NzIconModule}from"ng-zorro-antd/icon";import{addIcons}from"ionicons";import{chevronBackOutline,folderOutline,cloudDoneOutline,createOutline}from"ionicons/icons";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular";import*as i2 from"@angular/common";import*as i3 from"@angular/material/button";import*as i4 from"@angular/material/chips";import*as i5 from"ng-zorro-antd/avatar";import*as i6 from"ng-zorro-antd/divider";import*as i7 from"ng-zorro-antd/icon";import*as i8 from"@angular/material/slide-toggle";addIcons({chevronBackOutline:chevronBackOutline,folderOutline:folderOutline,cloudDoneOutline:cloudDoneOutline,createOutline:createOutline});export class ArticleEditorTopbarComponent{goBack(){this.navCtrl.back()}navEvent(n){this.onNavEvent.emit(n)}onPublicChange(n){this.article?.set("isPublic",n?.checked),this.article?.save()}presentPopover(n){this.popover.event=n,this.isOpen=!0}constructor(n){this.navCtrl=n,this.contentChanged=!1,this.isSaving=!1,this.onNavEvent=new EventEmitter,this.showCard=!1,this.isOpen=!1,this.showPopover=!1}ngOnInit(){}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ArticleEditorTopbarComponent,deps:[{token:i1.NavController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:ArticleEditorTopbarComponent,isStandalone:!0,selector:"fm-article-editor-topbar",inputs:{article:"article",contentChanged:"contentChanged",isSaving:"isSaving"},outputs:{onNavEvent:"onNavEvent"},viewQueries:[{propertyName:"popover",first:!0,predicate:["popover"],descendants:!0}],ngImport:i0,template:'<div class="nav">\n\n<div class="nav-left">\n <div (click)="goBack()">\n <ion-icon class="icon" name="chevron-back-outline"></ion-icon>\n <span>返回上级</span>\n </div>\n <div *ngIf="article?.get(\'chapter\')?.get(\'book\')?.id" (click)="navEvent(\'backmenu\')" style="width:100px;">\n <ion-icon class="icon" name="folder-outline"></ion-icon>\n <span *ngIf="!article?.get(\'chapter\')?.get(\'book\')?.id">返回首页</span>\n <span *ngIf="article?.get(\'chapter\')?.get(\'book\')?.id">打开目录</span>\n </div>\n <div (click)="navEvent(\'save\')">\n <ion-icon *ngIf="!isSaving" class="icon" name="cloud-done-outline"></ion-icon>\n <span *ngIf="isSaving" nz-icon [nzType]="\'sync\'" [nzSpin]="true"></span>\n <span [style.color]="contentChanged?\'red\':\'black\'">保存文章</span> <ion-badge *ngIf="contentChanged">新内容</ion-badge>\n </div>\n</div>\n\n<div class="nav-middle">\n <mat-chip-listbox aria-label="Dog selection">\n <mat-chip (click)="navEvent(\'options\')" [disabled]="!article?.get(\'writingOptions\')">\n \x3c!-- <img matChipAvatar src="https://material.angular.io/assets/img/examples/shiba1.jpg" alt="Photo of a Shiba Inu"/> --\x3e\n 设定\n </mat-chip>\n <mat-chip (click)="navEvent(\'outline\')" [disabled]="!article?.get(\'outlineJson\')">\n \x3c!-- <img matChipAvatar src="https://material.angular.io/assets/img/examples/shiba1.jpg" alt="Photo of a Shiba Inu"/> --\x3e\n 大纲\n </mat-chip>\n <mat-chip (click)="navEvent(\'preview\')" [disabled]="!article?.get(\'contentArray\')?.length">\n \x3c!-- <img matChipAvatar src="https://material.angular.io/assets/img/examples/shiba1.jpg" alt="Photo of a Shiba Inu"/> --\x3e\n 预览\n </mat-chip>\n </mat-chip-listbox>\n \x3c!-- <button>开始</button>\n <button>效率</button>\n <button>审阅</button> --\x3e\n\n</div>\n\n<div class="nav-right">\n\n <mat-slide-toggle [checked]="article?.get(\'isPublic\')" (change)="onPublicChange($event)">公开文章</mat-slide-toggle>\n \x3c!-- <button>登录/注册</button> --\x3e\n \x3c!-- <nz-avatar nzText="USER"></nz-avatar> --\x3e\n \x3c!-- <button class="bubble-card-trigger" (click)="showCard = !showCard">协作</button> --\x3e\n\n <div class="bubble-card" *ngIf="showCard">\n\n <div class="bubble-card-content">\n <div class="bubble-card-tab">\n <div class="invite">邀请协作</div>\n </div>\n <nz-divider></nz-divider>\n\n <div class="search-bar">\n <ion-searchbar class="search-input" style="font-size:14px" color="#ffffff"\n placeholder="输入 用户名 / 邮箱 / 手机号 添加协作权限" font-size="14px"></ion-searchbar>\n </div>\n \x3c!-- 协助者 --\x3e\n <div class="people-manage">\n\n <div class="people-top">协作者</div>\n <nz-divider></nz-divider>\n <div class="people-list">\n <div class="people">\n <div class="people-avatar">\n <nz-avatar nzText="USER"></nz-avatar>\n\n </div>\n <div class="people-name">\n <p>用户名</p>\n </div>\n <div class="people-source">\n <p>2191982744%qq.com</p>\n </div>\n <div class="permission-management">\n <ion-button color="light" (click)="presentPopover($event)">权限管理</ion-button>\n <ion-popover #popover [isOpen]="isOpen" (didDismiss)="isOpen = false">\n <ng-template>\n <ion-list>\n <ion-item>\n <ion-checkbox justify="start">只读</ion-checkbox>\n </ion-item>\n\n <ion-item>\n <ion-checkbox justify="end">可编辑</ion-checkbox>\n </ion-item>\n\n\n </ion-list>\n </ng-template>\n </ion-popover>\n </div>\n </div>\n\n\n\n\n </div>\n </div>\n\n \x3c!-- 协助者End --\x3e\n\n \x3c!-- 管理者 --\x3e\n <div class="people-manage">\n\n <div class="people-top">管理者</div>\n <nz-divider></nz-divider>\n <div class="people-list">\n <div class="people">\n <div class="people-avatar">\n <nz-avatar nzText="USER"></nz-avatar>\n\n </div>\n <div class="people-name">\n <p>用户名</p>\n </div>\n <div class="people-source">\n <p>2191982744%qq.com</p>\n </div>\n <div class="people-position">\n <p>管理员</p>\n </div>\n </div>\n\n\n\n\n </div>\n </div>\n \x3c!-- 管理者End --\x3e\n\n </div>\n </div>\n\n <button mat-button (click)="navEvent(\'toggle-aitool\')">\n <ion-icon style="font-size:20px;margin-bottom:-3px;" class="icon" name="create-outline"></ion-icon>\n <span>AI写作</span>\n </button>\n \x3c!-- <ion-button color="#fafafa" style="font-size: 13px; color:#252525;margin-top: 7px;" mode="ios"\n id="popover-button">分享</ion-button> --\x3e\n <ion-popover trigger="popover-button" [dismissOnSelect]="true">\n <ng-template>\n <ion-content>\n <ion-list>\n <ion-item [button]="true" [detail]="false">下载文档</ion-item>\n <ion-item [button]="true" [detail]="false">删除文档</ion-item>\n <ion-item [button]="true" id="nested-trigger">更多</ion-item>\n\n <ion-popover trigger="nested-trigger" [dismissOnSelect]="true" side="end">\n <ng-template>\n <ion-content>\n <ion-list>\n <ion-item [button]="true" [detail]="false">Nested option</ion-item>\n </ion-list>\n </ion-content>\n </ng-template>\n </ion-popover>\n </ion-list>\n </ion-content>\n </ng-template>\n </ion-popover>\n</div>\n</div>\n',styles:["mat-button{display:felx;justify-content:center;align-items:center}.back-btn{margin-top:3px;width:100px;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;align-items:center;background-color:transparent}.nav{background-color:#fafafa;display:flex;height:55px;width:100%;z-index:3;justify-content:space-between;align-items:center;box-shadow:0 4px 6px #00000026}.nav .nav-left{display:flex;justify-content:flex-start;align-items:flex-start;width:350px;padding-left:20px}.nav .nav-left div{display:flex;justify-content:center;align-items:center}.nav .nav-left div span{margin-left:5px;display:inline-block;color:#4b4b4b}.nav .nav-middle{display:flex;width:33%;align-items:center;justify-content:center}.nav .nav-middle button{padding:2%;width:33%;background-color:#fafafa;border:none;text-align:center}.nav .nav-right{display:flex;width:33%;height:50%;align-items:center;justify-content:flex-end}.nav .nav-right nz-avatar{cursor:pointer;margin-right:5%}.nav .nav-right ion-list{padding:20px}.nav .nav-right .bubble-card-trigger{position:relative}.nav .nav-right .bubble-card-content{width:35vw;height:55vh;background-color:#fff;position:absolute;right:1vw;top:5vh;z-index:999}.nav .nav-right .bubble-card-content .bubble-card-tab{height:6%;width:100%}.nav .nav-right .bubble-card-content .bubble-card-tab .invite{padding:3% 4%;margin-left:1.2%;font-size:18px;font-weight:700}.nav .nav-right .bubble-card-content .search-bar{width:92%;margin-left:4%;margin-bottom:2%;font-size:14px}.nav .nav-right .bubble-card-content .people-manage{width:100%;height:auto;padding:3% 4%;margin-left:1.2%;font-size:16px}.nav .nav-right .bubble-card-content .people-manage .people-top{height:15%}.nav .nav-right .bubble-card-content .people-manage .people-list .people{display:flex;align-items:center;height:10%;width:92%;cursor:pointer;transition:background-color .3s}.nav .nav-right .bubble-card-content .people-manage .people-list .people .people-avatar{width:10%;height:10%;margin:0% 3%}.nav .nav-right .bubble-card-content .people-manage .people-list .people .people-name{margin-right:4%;margin-top:5%;width:15%;height:1%}.nav .nav-right .bubble-card-content .people-manage .people-list .people .people-source{margin-top:5.5%;width:33%}.nav .nav-right .bubble-card-content .people-manage .people-list .people .people-source p{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nav .nav-right .bubble-card-content .people-manage .people-list .people .permission-management{margin-left:5%}.nav .nav-right .bubble-card-content .people-manage .people-list .people .people-position{margin-left:11%}.nav .nav-right .bubble-card-content .people-manage .people-list .people .people-position p{margin-top:revert}.nav .nav-right .bubble-card-content .people-manage .people-list .people:hover{background-color:#fafafa}.nav .nav-right .bubble-card-content nz-divider{margin:4% 0}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i2.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:MatButtonModule},{kind:"component",type:i3.MatButton,selector:" button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ",exportAs:["matButton"]},{kind:"ngmodule",type:MatChipsModule},{kind:"component",type:i4.MatChip,selector:"mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]",inputs:["role","id","aria-label","aria-description","value","color","removable","highlighted","disableRipple","disabled","tabIndex"],outputs:["removed","destroyed"],exportAs:["matChip"]},{kind:"component",type:i4.MatChipListbox,selector:"mat-chip-listbox",inputs:["multiple","aria-orientation","selectable","compareWith","required","hideSingleSelectionIndicator","value"],outputs:["change"]},{kind:"ngmodule",type:IonicModule},{kind:"component",type:i1.IonBadge,selector:"ion-badge",inputs:["color","mode"]},{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.IonCheckbox,selector:"ion-checkbox",inputs:["alignment","checked","color","disabled","errorText","helperText","indeterminate","justify","labelPlacement","mode","name","required","value"]},{kind:"component",type:i1.IonContent,selector:"ion-content",inputs:["color","fixedSlotPlacement","forceOverscroll","fullscreen","scrollEvents","scrollX","scrollY"]},{kind:"component",type:i1.IonIcon,selector:"ion-icon",inputs:["color","flipRtl","icon","ios","lazy","md","mode","name","sanitize","size","src"]},{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.IonList,selector:"ion-list",inputs:["inset","lines","mode"]},{kind:"component",type:i1.IonSearchbar,selector:"ion-searchbar",inputs:["animated","autocapitalize","autocomplete","autocorrect","cancelButtonIcon","cancelButtonText","clearIcon","color","debounce","disabled","enterkeyhint","inputmode","maxlength","minlength","mode","name","placeholder","searchIcon","showCancelButton","showClearButton","spellcheck","type","value"]},{kind:"component",type:i1.IonPopover,selector:"ion-popover"},{kind:"directive",type:i1.BooleanValueAccessor,selector:"ion-checkbox,ion-toggle"},{kind:"directive",type:i1.TextValueAccessor,selector:"ion-input:not([type=number]),ion-textarea,ion-searchbar"},{kind:"ngmodule",type:NzAvatarModule},{kind:"component",type:i5.NzAvatarComponent,selector:"nz-avatar",inputs:["nzShape","nzSize","nzGap","nzText","nzSrc","nzSrcSet","nzAlt","nzIcon"],outputs:["nzError"],exportAs:["nzAvatar"]},{kind:"ngmodule",type:NzDividerModule},{kind:"component",type:i6.NzDividerComponent,selector:"nz-divider",inputs:["nzText","nzType","nzOrientation","nzDashed","nzPlain"],exportAs:["nzDivider"]},{kind:"ngmodule",type:NzIconModule},{kind:"directive",type:i7.NzIconDirective,selector:"[nz-icon]",inputs:["nzSpin","nzRotate","nzType","nzTheme","nzTwotoneColor","nzIconfont"],exportAs:["nzIcon"]},{kind:"ngmodule",type:MatSlideToggleModule},{kind:"component",type:i8.MatSlideToggle,selector:"mat-slide-toggle",inputs:["name","id","labelPosition","aria-label","aria-labelledby","aria-describedby","required","color","disabled","disableRipple","tabIndex","checked","hideIcon"],outputs:["change","toggleChange"],exportAs:["matSlideToggle"]}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ArticleEditorTopbarComponent,decorators:[{type:Component,args:[{selector:"fm-article-editor-topbar",standalone:!0,imports:[CommonModule,MatButtonModule,MatChipsModule,IonicModule,NzAvatarModule,NzDividerModule,NzIconModule,MatSlideToggleModule],template:'<div class="nav">\n\n<div class="nav-left">\n <div (click)="goBack()">\n <ion-icon class="icon" name="chevron-back-outline"></ion-icon>\n <span>返回上级</span>\n </div>\n <div *ngIf="article?.get(\'chapter\')?.get(\'book\')?.id" (click)="navEvent(\'backmenu\')" style="width:100px;">\n <ion-icon class="icon" name="folder-outline"></ion-icon>\n <span *ngIf="!article?.get(\'chapter\')?.get(\'book\')?.id">返回首页</span>\n <span *ngIf="article?.get(\'chapter\')?.get(\'book\')?.id">打开目录</span>\n </div>\n <div (click)="navEvent(\'save\')">\n <ion-icon *ngIf="!isSaving" class="icon" name="cloud-done-outline"></ion-icon>\n <span *ngIf="isSaving" nz-icon [nzType]="\'sync\'" [nzSpin]="true"></span>\n <span [style.color]="contentChanged?\'red\':\'black\'">保存文章</span> <ion-badge *ngIf="contentChanged">新内容</ion-badge>\n </div>\n</div>\n\n<div class="nav-middle">\n <mat-chip-listbox aria-label="Dog selection">\n <mat-chip (click)="navEvent(\'options\')" [disabled]="!article?.get(\'writingOptions\')">\n \x3c!-- <img matChipAvatar src="https://material.angular.io/assets/img/examples/shiba1.jpg" alt="Photo of a Shiba Inu"/> --\x3e\n 设定\n </mat-chip>\n <mat-chip (click)="navEvent(\'outline\')" [disabled]="!article?.get(\'outlineJson\')">\n \x3c!-- <img matChipAvatar src="https://material.angular.io/assets/img/examples/shiba1.jpg" alt="Photo of a Shiba Inu"/> --\x3e\n 大纲\n </mat-chip>\n <mat-chip (click)="navEvent(\'preview\')" [disabled]="!article?.get(\'contentArray\')?.length">\n \x3c!-- <img matChipAvatar src="https://material.angular.io/assets/img/examples/shiba1.jpg" alt="Photo of a Shiba Inu"/> --\x3e\n 预览\n </mat-chip>\n </mat-chip-listbox>\n \x3c!-- <button>开始</button>\n <button>效率</button>\n <button>审阅</button> --\x3e\n\n</div>\n\n<div class="nav-right">\n\n <mat-slide-toggle [checked]="article?.get(\'isPublic\')" (change)="onPublicChange($event)">公开文章</mat-slide-toggle>\n \x3c!-- <button>登录/注册</button> --\x3e\n \x3c!-- <nz-avatar nzText="USER"></nz-avatar> --\x3e\n \x3c!-- <button class="bubble-card-trigger" (click)="showCard = !showCard">协作</button> --\x3e\n\n <div class="bubble-card" *ngIf="showCard">\n\n <div class="bubble-card-content">\n <div class="bubble-card-tab">\n <div class="invite">邀请协作</div>\n </div>\n <nz-divider></nz-divider>\n\n <div class="search-bar">\n <ion-searchbar class="search-input" style="font-size:14px" color="#ffffff"\n placeholder="输入 用户名 / 邮箱 / 手机号 添加协作权限" font-size="14px"></ion-searchbar>\n </div>\n \x3c!-- 协助者 --\x3e\n <div class="people-manage">\n\n <div class="people-top">协作者</div>\n <nz-divider></nz-divider>\n <div class="people-list">\n <div class="people">\n <div class="people-avatar">\n <nz-avatar nzText="USER"></nz-avatar>\n\n </div>\n <div class="people-name">\n <p>用户名</p>\n </div>\n <div class="people-source">\n <p>2191982744%qq.com</p>\n </div>\n <div class="permission-management">\n <ion-button color="light" (click)="presentPopover($event)">权限管理</ion-button>\n <ion-popover #popover [isOpen]="isOpen" (didDismiss)="isOpen = false">\n <ng-template>\n <ion-list>\n <ion-item>\n <ion-checkbox justify="start">只读</ion-checkbox>\n </ion-item>\n\n <ion-item>\n <ion-checkbox justify="end">可编辑</ion-checkbox>\n </ion-item>\n\n\n </ion-list>\n </ng-template>\n </ion-popover>\n </div>\n </div>\n\n\n\n\n </div>\n </div>\n\n \x3c!-- 协助者End --\x3e\n\n \x3c!-- 管理者 --\x3e\n <div class="people-manage">\n\n <div class="people-top">管理者</div>\n <nz-divider></nz-divider>\n <div class="people-list">\n <div class="people">\n <div class="people-avatar">\n <nz-avatar nzText="USER"></nz-avatar>\n\n </div>\n <div class="people-name">\n <p>用户名</p>\n </div>\n <div class="people-source">\n <p>2191982744%qq.com</p>\n </div>\n <div class="people-position">\n <p>管理员</p>\n </div>\n </div>\n\n\n\n\n </div>\n </div>\n \x3c!-- 管理者End --\x3e\n\n </div>\n </div>\n\n <button mat-button (click)="navEvent(\'toggle-aitool\')">\n <ion-icon style="font-size:20px;margin-bottom:-3px;" class="icon" name="create-outline"></ion-icon>\n <span>AI写作</span>\n </button>\n \x3c!-- <ion-button color="#fafafa" style="font-size: 13px; color:#252525;margin-top: 7px;" mode="ios"\n id="popover-button">分享</ion-button> --\x3e\n <ion-popover trigger="popover-button" [dismissOnSelect]="true">\n <ng-template>\n <ion-content>\n <ion-list>\n <ion-item [button]="true" [detail]="false">下载文档</ion-item>\n <ion-item [button]="true" [detail]="false">删除文档</ion-item>\n <ion-item [button]="true" id="nested-trigger">更多</ion-item>\n\n <ion-popover trigger="nested-trigger" [dismissOnSelect]="true" side="end">\n <ng-template>\n <ion-content>\n <ion-list>\n <ion-item [button]="true" [detail]="false">Nested option</ion-item>\n </ion-list>\n </ion-content>\n </ng-template>\n </ion-popover>\n </ion-list>\n </ion-content>\n </ng-template>\n </ion-popover>\n</div>\n</div>\n',styles:["mat-button{display:felx;justify-content:center;align-items:center}.back-btn{margin-top:3px;width:100px;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;align-items:center;background-color:transparent}.nav{background-color:#fafafa;display:flex;height:55px;width:100%;z-index:3;justify-content:space-between;align-items:center;box-shadow:0 4px 6px #00000026}.nav .nav-left{display:flex;justify-content:flex-start;align-items:flex-start;width:350px;padding-left:20px}.nav .nav-left div{display:flex;justify-content:center;align-items:center}.nav .nav-left div span{margin-left:5px;display:inline-block;color:#4b4b4b}.nav .nav-middle{display:flex;width:33%;align-items:center;justify-content:center}.nav .nav-middle button{padding:2%;width:33%;background-color:#fafafa;border:none;text-align:center}.nav .nav-right{display:flex;width:33%;height:50%;align-items:center;justify-content:flex-end}.nav .nav-right nz-avatar{cursor:pointer;margin-right:5%}.nav .nav-right ion-list{padding:20px}.nav .nav-right .bubble-card-trigger{position:relative}.nav .nav-right .bubble-card-content{width:35vw;height:55vh;background-color:#fff;position:absolute;right:1vw;top:5vh;z-index:999}.nav .nav-right .bubble-card-content .bubble-card-tab{height:6%;width:100%}.nav .nav-right .bubble-card-content .bubble-card-tab .invite{padding:3% 4%;margin-left:1.2%;font-size:18px;font-weight:700}.nav .nav-right .bubble-card-content .search-bar{width:92%;margin-left:4%;margin-bottom:2%;font-size:14px}.nav .nav-right .bubble-card-content .people-manage{width:100%;height:auto;padding:3% 4%;margin-left:1.2%;font-size:16px}.nav .nav-right .bubble-card-content .people-manage .people-top{height:15%}.nav .nav-right .bubble-card-content .people-manage .people-list .people{display:flex;align-items:center;height:10%;width:92%;cursor:pointer;transition:background-color .3s}.nav .nav-right .bubble-card-content .people-manage .people-list .people .people-avatar{width:10%;height:10%;margin:0% 3%}.nav .nav-right .bubble-card-content .people-manage .people-list .people .people-name{margin-right:4%;margin-top:5%;width:15%;height:1%}.nav .nav-right .bubble-card-content .people-manage .people-list .people .people-source{margin-top:5.5%;width:33%}.nav .nav-right .bubble-card-content .people-manage .people-list .people .people-source p{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nav .nav-right .bubble-card-content .people-manage .people-list .people .permission-management{margin-left:5%}.nav .nav-right .bubble-card-content .people-manage .people-list .people .people-position{margin-left:11%}.nav .nav-right .bubble-card-content .people-manage .people-list .people .people-position p{margin-top:revert}.nav .nav-right .bubble-card-content .people-manage .people-list .people:hover{background-color:#fafafa}.nav .nav-right .bubble-card-content nz-divider{margin:4% 0}\n"]}]}],ctorParameters:()=>[{type:i1.NavController}],propDecorators:{popover:[{type:ViewChild,args:["popover"]}],article:[{type:Input}],contentChanged:[{type:Input}],isSaving:[{type:Input}],onNavEvent:[{type:Output}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi90ZXh0L2ZtLWFydGljbGUtZWRpdG9yL2FydGljbGUtZWRpdG9yLXRvcGJhci9hcnRpY2xlLWVkaXRvci10b3BiYXIuY29tcG9uZW50Lm1qcw==`
|
|
10
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
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-article-editor/article.service.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Injectable}from"@angular/core";import{Router}from"@angular/router";import{ClipboardService}from"../../aigc/comp-markdown-preview/clipboard.service";import{WechatJssdkService}from"../../social/wechat/wechat-jssdk.service";import Parse from"parse";import{taskArticleGeneration}from"./task-article-generation";import{MatDialog}from"@angular/material/dialog";import{ModalController}from"@ionic/angular/standalone";import{PersonService}from"../../person/person.service";import*as i0 from"@angular/core";import*as i1 from"@angular/router";import*as i2 from"../../social/wechat/wechat-jssdk.service";import*as i3 from"../../aigc/comp-markdown-preview/clipboard.service";import*as i4 from"@angular/material/dialog";import*as i5 from"@ionic/angular/standalone";import*as i6 from"../../person/person.service";export class ArticleService{constructor(e,t,i,r,a,s){this.router=e,this.wxjssdk=t,this.clipboard=i,this.dialog=r,this.modalCtrl=a,this.personServ=s,this.Article=Parse.Object.extend("Article"),this.articleList=[],this.limit=20,this.skip=0,this.likeMap={},this.ArticleLike=Parse.Object.extend("ArticleLike"),this.collectMap={}}async loadArticle(e){if(e.currentTab=e.currentTab||"article",e.isNew=e.isNew||!1,!Parse.User.current()?.id)return[];e?.isNew?(this.articleList=[],this.skip=0):this.skip+=this.articleList?.length;let t=new Parse.Query("Article");t.include("chapter.book.person","author.user"),t.addDescending("createdAt"),t.skip(this.skip),t.notEqualTo("isDeleted",!0),"mine"==e?.currentTab?t.equalTo("author",Parse.User?.current()?.id):t.equalTo("isPublic",!0);let i=await t.find();return this.loadArtcleAnalysis(i),this.articleList?.length?this.articleList=this.articleList.concat(i):this.articleList=i,this.articleList}async createArticle(e){let t=new this.Article;t.set("title",this.newTitle());let i=localStorage.getItem("company");return i&&t?.set("company",{__type:"Pointer",className:"Company",objectId:i}),t?.get("author")?.id||t?.set("author",Parse.User.current()?.toPointer()),t=await(t?.save()),e?.noRedirect||this.router.navigate(["editor","article",t?.id]),t}async newArticleByStory(){let e={createNewDraft:!0},t=await this.createArticle({noRedirect:!0});taskArticleGeneration((()=>{}),{dialog:this.dialog,modalCtrl:this.modalCtrl,shareData:e,article:t,personServ:this.personServ})}newTitle(){let e=new Date;return`${e.getFullYear()}-${e.getMonth()+1}-${e.getDate()}-新创作`}async shareArticle(e){if(!e?.id)return;this.getArticleBanner(e);let t="https://www.yuban.co/app/article/"+e?.id+"?invite="+Parse.User.current()?.id;if(this.wxjssdk.isWechat)this.initWxShareInfo(e);else{let i=`${e?.get("title")} ${t} POWERED BY 自传语伴`;this.clipboard.copyToClipboard(i)}}initWxShareInfo(e){let t=this.getArticleBanner(e),i=Parse.User.current()?.get("avatar"),r="https://www.yuban.co/app/article/"+e?.id+"?invite="+Parse.User.current()?.id;if(this.wxjssdk.isWechat){let a={title:e?.get("title"),desc:e?.get("desc"),link:r,type:"link",imgUrl:t[0]||i||"https://file.yuban.co/img/icon.png",success:()=>{console.log("分享成功")},error:()=>{console.log("分享失败")},cancel:()=>{console.log("取消分享")}};this.wxjssdk.setCurrentPageShareInfo(a)}}getArticleBanner(e){let t=[],i=e?.get("image");return i&&t.push(i),t=t.concat(e?.get("cover")||[]),console.log("bannerList",t),t}async loadArtcleAnalysis(e){let t=Parse.User.current()?.id;if(!t)return;let i=new Parse.Query("ArticleLike");i.select("article","type"),i.equalTo("user",t),i.notEqualTo("isDeleted",!0),i.containedIn("article",e?.map((e=>e?.id))),(await i.find()).forEach((e=>{let t=e?.get("article")?.id||e?.get("article")?.objectId;"collect"==e?.get("type")&&(this.collectMap[t]=!0),"like"==e?.get("type")&&(this.likeMap[t]=!0)}))}viewArticle(e){e?.id&&(e.increment("viewCount"),e.save())}async likeArticle(e,t="like"){if(e?.id&&Parse.User.current()?.id){let i=new Parse.Query("ArticleLike");i.equalTo("user",Parse.User.current()),i.equalTo("type",t),i.equalTo("article",e?.id);let r=await i.first();r?.id||(r=new this.ArticleLike),r?.set("type",t),r?.set("user",Parse.User.current()),r?.set("article",e.toPointer()),null==r?.get("isDeleted")?r?.set("isDeleted",!1):r?.set("isDeleted",!r.get("isDeleted")),localStorage.getItem("company")&&r?.set("company",{__type:"Pointer",className:"Company",objectId:localStorage.getItem("company")}),r=await(r?.save()),"like"==t&&(this.likeMap[e?.id]=!r?.get("isDeleted")),"collect"==t&&(this.collectMap[e?.id]=!r?.get("isDeleted"));let a=new Parse.Query("ArticleLike");a.notEqualTo("isDeleted",!0),a.equalTo("type",t),a.equalTo("article",e?.id),"like"==t&&e.set("likeCount",await a.count()||0),"collect"==t&&e.set("collectCount",await a.count()||0),e=await e.save()}}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ArticleService,deps:[{token:i1.Router},{token:i2.WechatJssdkService},{token:i3.ClipboardService},{token:i4.MatDialog},{token:i5.ModalController},{token:i6.PersonService}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ArticleService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:ArticleService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.Router},{type:i2.WechatJssdkService},{type:i3.ClipboardService},{type:i4.MatDialog},{type:i5.ModalController},{type:i6.PersonService}]});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi90ZXh0L2ZtLWFydGljbGUtZWRpdG9yL2FydGljbGUuc2VydmljZS5tanM=`
|
|
10
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
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-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Component,Input}from"@angular/core";import{EditUploadModule}from"../../../person/edit-upload/edit-upload.module";import{CommonModule}from"@angular/common";import{FormsModule}from"@angular/forms";import Parse from"parse";import{ModalController}from"@ionic/angular/standalone";import*as i0 from"@angular/core";import*as i1 from"@ionic/angular/standalone";import*as i2 from"../../../person/edit-upload/edit-upload.component";import*as i3 from"@angular/common";export class CompUploadBookBannersComponent{constructor(n){this.modalCtrl=n}ngOnInit(){this.getArticle()}changeBanner(){this.banner="",console.log(this.banner)}async getArticle(){let n=new Parse.Query("Article");n.equalTo("objectId",this.articleId),n.notEqualTo("isDeleted",!0),n.include("author"),this.article=await n.first(),console.log("article",this.article)}async saveSelection(){if(!this.banner)return void console.log("没有上传封面图");console.log("this.bookId",this.articleId);let n=new Parse.Query("Article");n.equalTo("objectId",this.articleId);try{let e=await n.first();e?(e.set("image",this.banner),await e.save(),console.log("封面图保存成功"),await this.modalCtrl.dismiss({success:!0,banner:this.banner},"confirm")):console.log("未找到相关章节")}catch(n){console.error("保存失败",n),alert("保存失败")}}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompUploadBookBannersComponent,deps:[{token:i1.ModalController}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CompUploadBookBannersComponent,isStandalone:!0,selector:"app-comp-upload-book-banners",inputs:{articleId:"articleId"},ngImport:i0,template:'<div class="background">\n <div class="fixed-navbar">\n <div class="left">\n </div>\n <div class="center">\n 封面上传\n </div>\n <div class="right" (click)="saveSelection()">保存</div>\n </div>\n <div class="content">\n <div style="display: flex; flex-direction: row;width: 50%;text-align: center;margin-top: 20px;margin-left: 13%;">\n <div class="upload_avatar">\n <fm-edit-upload *ngIf="!banner" [(file)]="banner" [multi]="true"></fm-edit-upload>\n <img style="width: 110px;height: 110px;object-fit: cover;" *ngIf="banner"\n [src]="banner" alt="">\n </div>\n <div *ngIf="banner" (click)="changeBanner()" style="margin-left: -12px;\n font-size: 11px;\n margin-top: -12px;\n height: 24px;\n cursor: pointer;\n width: 24px;\n border-radius: 50%;\n background-color: #ccc;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;">\n <span nz-icon nzType="close" nzTheme="outline"></span>\n </div>\n </div>\n </div>\n</div>\n',styles:[".background{background:linear-gradient(#040a15,#0e254b);width:100%;height:100%;margin:0;padding:0;overflow-y:auto;overflow-x:hidden}.background .fixed-navbar{height:8vh;position:sticky;top:0;display:flex;flex-direction:row;justify-content:space-between;align-items:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:999}.background .fixed-navbar .left{flex:1;display:flex;justify-content:flex-start;align-items:center;color:#fff}.background .fixed-navbar .center{color:#fff;font-size:1.3rem;font-weight:700}.background .fixed-navbar .right{display:flex;justify-content:flex-end;margin-right:20px;font-size:1rem;flex:1}.background .content{padding:8% 5%}\n"],dependencies:[{kind:"ngmodule",type:EditUploadModule},{kind:"component",type:i2.EditUploadComponent,selector:"fm-edit-upload",inputs:["files","dragdrop","multi","max_file_size","type","avatarType","company","file","fileList","path"],outputs:["filesChange","fileChange","fileListChange"]},{kind:"ngmodule",type:CommonModule},{kind:"directive",type:i3.NgIf,selector:"[ngIf]",inputs:["ngIf","ngIfThen","ngIfElse"]},{kind:"ngmodule",type:FormsModule}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompUploadBookBannersComponent,decorators:[{type:Component,args:[{selector:"app-comp-upload-book-banners",standalone:!0,imports:[EditUploadModule,CommonModule,FormsModule],template:'<div class="background">\n <div class="fixed-navbar">\n <div class="left">\n </div>\n <div class="center">\n 封面上传\n </div>\n <div class="right" (click)="saveSelection()">保存</div>\n </div>\n <div class="content">\n <div style="display: flex; flex-direction: row;width: 50%;text-align: center;margin-top: 20px;margin-left: 13%;">\n <div class="upload_avatar">\n <fm-edit-upload *ngIf="!banner" [(file)]="banner" [multi]="true"></fm-edit-upload>\n <img style="width: 110px;height: 110px;object-fit: cover;" *ngIf="banner"\n [src]="banner" alt="">\n </div>\n <div *ngIf="banner" (click)="changeBanner()" style="margin-left: -12px;\n font-size: 11px;\n margin-top: -12px;\n height: 24px;\n cursor: pointer;\n width: 24px;\n border-radius: 50%;\n background-color: #ccc;\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;">\n <span nz-icon nzType="close" nzTheme="outline"></span>\n </div>\n </div>\n </div>\n</div>\n',styles:[".background{background:linear-gradient(#040a15,#0e254b);width:100%;height:100%;margin:0;padding:0;overflow-y:auto;overflow-x:hidden}.background .fixed-navbar{height:8vh;position:sticky;top:0;display:flex;flex-direction:row;justify-content:space-between;align-items:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:999}.background .fixed-navbar .left{flex:1;display:flex;justify-content:flex-start;align-items:center;color:#fff}.background .fixed-navbar .center{color:#fff;font-size:1.3rem;font-weight:700}.background .fixed-navbar .right{display:flex;justify-content:flex-end;margin-right:20px;font-size:1rem;flex:1}.background .content{padding:8% 5%}\n"]}]}],ctorParameters:()=>[{type:i1.ModalController}],propDecorators:{articleId:[{type:Input}]}});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi90ZXh0L2ZtLWFydGljbGUtZWRpdG9yL2NvbXAtdXBsb2FkLWJvb2stYmFubmVycy9jb21wLXVwbG9hZC1ib29rLWJhbm5lcnMuY29tcG9uZW50Lm1qcw==`
|
|
10
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
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-article-editor/draft.service.mjs
|
|
7
|
+
*/
|
|
8
|
+
import{Injectable}from"@angular/core";import{FmodeChatCompletion}from"../../aigc";import Parse from"parse";import{finalize,from}from"rxjs";import{AgentPrompt}from"../../core";import{PersonService}from"../../person/person.service";import{PromptInsertionDocumentList,PromptInsertionRoleList}from"./prompt/prompt-insertion-article";import*as i0 from"@angular/core";import*as i1 from"../../person/person.service";const agentPrompt=new AgentPrompt;var PromptTplArticleSectionCode="article-section-create-tpl";export class DraftService{constructor(t){this.personServ=t,this.DraftListMap={},this.DraftCountMap={},this.total=0,this.aiCount=0,this.draftCount=0}async loadArticleDraft(t){if(!t?.id)return;let e=new Parse.Query("ArticleDraft");e.equalTo("article",t?.id),e.addDescending("updatedAt"),e.notEqualTo("isDeleted",!0),this.DraftListMap[t?.id]=await e.find(),this.DraftCountMap[t.id]||(this.DraftCountMap[t.id]={}),this.DraftCountMap[t.id].total=this.DraftListMap[t?.id]?.length,this.DraftCountMap[t.id].aiCount=this.DraftListMap[t?.id].filter((t=>"ai"==t?.get("type")))?.length,this.DraftCountMap[t.id].draftCount=this.total-this.aiCount}async newSectionCreate(t){let e=t?.draft?.get("outlineJson"),n=e?.sections?.[t?.sectionIndex],o=t.writingOptions;if(o.title=n?.title,o.outline="",o.skill="",o.case="",o.count="",o.writtingPerson=o.writtingPerson||"第三人称",o.personName=t?.person?.get("name")||"",o.personGender=t?.person?.get("gender")||"",n?.outline&&(o.outline=`,主要内容:${n?.outline}.`),n?.skill&&(o.skill=`,写作技巧:${n?.skill}.`),n?.case&&(o.case=`,细节案例:${n?.case}.`),n?.count&&(o.count=`,总字数达${n?.count||2e3}以上.`),t?.contentArray?.length){let n=e?.sections||[],r=n.map(((e,n)=>`# ${e.title}\n${t?.contentArray?.[n]?.content||"待完成"}\n`))?.join("\n");o.createdContent="\n已编写内容:\n"+r+"\n"}let r,i,s=await agentPrompt.getFormatTpl(PromptTplArticleSectionCode,o),a=[];if(n?.docList?.length>0){let e=new Parse.Query("Document");e.notEqualTo("isDeleted",!0),e.containedIn("objectId",n?.docList);let o=await(e?.find());o?.length>0&&(t.documentList=o);let r=new Parse.Query("Story");r.include("chatSession","person","recorder","user"),r.notEqualTo("isDeleted",!0),r.containedIn("objectId",n?.docList),a=await(r?.find())}if(t.documentList?.length||a?.length){try{r=await PromptInsertionRoleList(t.documentList,a)}catch(t){console.error("PromptInsertionRoleList",t)}try{i=await PromptInsertionDocumentList(t.documentList,a,this.personServ)}catch(t){console.error("PromptInsertionDocumentList",t)}}i&&(s=i+s),r&&(s=r+s);let c=new FmodeChatCompletion([{role:"user",content:s}]);c.model="fmode-4.0-cn-256k",t.draft?.set("model",c?.model);let l=c.sendCompletion({isDirect:!0}).pipe(finalize((()=>{undefined.complete=!0}))).subscribe((async e=>{if(t?.contentArray?.[t?.sectionIndex]||(t.contentArray[t.sectionIndex]={type:"markdown",content:""}),"string"==typeof e?.content&&(e.content=e.content?.replaceAll(`## ${n?.title}`,""),e.content=e.content?.replaceAll(`# ${n?.title}`,""),e.content=e.content?.replaceAll(`${n?.title}`,"")),t.contentArray[t?.sectionIndex].content=`# ${n?.title}\n${e.content}`,e?.complete){t?.afterComplete&&t?.afterComplete(t?.draft);try{t?.cdRef?.detectChanges(),l?.closed||l?.unsubscribe&&l?.unsubscribe()}catch(t){console.error("unsubscribe",t)}}t?.cdRef?.detectChanges()}));return l}testCreateLongArticle(t,e,n,o,r){let i="";return from(["大连宇科创新科技有限公司作为国内领先的氢能测试装备和解决方案提供商,其在氢能领域的技术创新和未来发展方向备受瞩目。公司通过团队核心成员丰富的燃料电池及系统研发经验,采用创新加湿技术、流体控制模式和独创算法等,打造了高精度、高稳定性、功能完善的氢能测试设备,为客户提供极具竞争力、安全可信赖的产品、解决方案与服务。","在技术创新方面,大连宇科创新科技有限公司不断提升研发水准,致力于为燃料电池领域科技发展做出积极贡献。公司拥有国家级高新技术企业认证,通过ISO9001质量体系认证、ISO14001环境管理体系认证、ISO45001职业健康安全管理体系认证等多项资质,展现了其在技术水平和产品质量方面的领先地位。","在未来发展方向上,大连宇科创新科技有限公司将继续坚持以自主研发和自主品牌为发展核心,不断推动技术创新,增强企业核心竞争力。公司与中科院大连化学物理研究所、大连海事大学等高校建立合作关系,共同推进企业与高校的全面技术术合作,形成专业、产业相互促进,共同发展的局面。","在市场前景方面,大连宇科创新科技有限公司已经与中国科学院、清华大学、国家电投集团等知名机构建立了合作关系,市场反馈良好。公司在行业机构测评中取得了多个荣誉,技术水平已达到国内领先水平。随着氢能装备产业的快速发展,公司有望在未来取得更大的市场份额,成为行业的领头羊。","综上所述,大连宇科创新科技有限公司在氢能测试装备领域具有较强的技术创新性和市场竞争力,未来发展潜力巨大。建议公司继续加大研发投入,拓展合作伙伴关系,不断提升产品质量和服务水平,以应对市场竞争,实现更好的发展。 ","综上所述,大连宇科创新科技有限公司在氢能测试装备领域取得了令人瞩目的成就,不仅在技术创新方面具有国内领先地位,还在服务质量和市场影响力上展现出强大实力。其通过不断提升研发水准和加强核心竞争力,为燃料电池领域的科技发展做出了积极贡献。","展望未来,大连宇科创新科技有限公司将继续坚持自主研发和品牌建设,不断拓展业务领域,加大创新力度,助推我国氢能装备产业的快速发展。公司的发展潜力和价值不可估量,对氢能技术的推动和应用具有重要意义。","因此,鼓励广大读者关注和支持氢能技术的发展,共同见证大连宇科创新科技有限公司在未来的辉煌成就,为构建清洁能源时代贡献自己的力量。让我们携手并肩,共同开创氢能技术的美好未来! "]).subscribe((s=>{i+=s,e[n]||(e[n]={type:"markdown",content:""}),e[n].content=i,s?.indexOf("因此,鼓励")>-1&&o&&o(t),r?.detectChanges()}))}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:DraftService,deps:[{token:i1.PersonService}],target:i0.ɵɵFactoryTarget.Injectable})}static{this.ɵprov=i0.ɵɵngDeclareInjectable({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:DraftService,providedIn:"root"})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:DraftService,decorators:[{type:Injectable,args:[{providedIn:"root"}]}],ctorParameters:()=>[{type:i1.PersonService}]});
|
|
9
|
+
var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi90ZXh0L2ZtLWFydGljbGUtZWRpdG9yL2RyYWZ0LnNlcnZpY2UubWpz`
|
|
10
|
+
|