import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; import { languages } from '../../../../services/languages.map'; import { CommonCompModule } from '../../../../services/common.modules'; import { NzSelectModule } from 'ng-zorro-antd/select'; import { ReactiveFormsModule } from '@angular/forms'; import { NzRadioModule } from 'ng-zorro-antd/radio'; import { NzUploadModule } from 'ng-zorro-antd/upload'; import { NzTagModule } from 'ng-zorro-antd/tag'; import { NzMessageService } from 'ng-zorro-antd/message'; import { NzUploadChangeParam } from 'ng-zorro-antd/upload'; import { NzModalService } from 'ng-zorro-antd/modal'; import { textbookServer } from '../../../../services/textbook' import Parse from 'parse'; import { FormControl, FormGroup, NonNullableFormBuilder, Validators, } from '@angular/forms'; import { CompUploadComponent } from '../../../../app/comp-upload/comp-upload.component'; import { NzInputModule } from 'ng-zorro-antd/input'; import * as major from '../../../../services/majors.map' @Component({ selector: 'app-basic', imports: [ CommonCompModule, ReactiveFormsModule, NzSelectModule, NzRadioModule, NzUploadModule, NzInputModule, NzTagModule, CompUploadComponent ], standalone: true, templateUrl: './basic-in.component.html', styleUrls: ['./basic-in.component.scss'], }) export class BasicInComponent implements OnInit { @Input('eduTextbook') eduTextbook: Parse.Object|any; @Input('editFrom') editFrom: any; @Output() state: EventEmitter = new EventEmitter(); @Output() save: EventEmitter = new EventEmitter(); /** * 书号自动补全函数 * @param isbn 书号 */ async autoCompleteByISBN(){ let isbn = this.validateForm.value?.ISBN; let result = await Parse.Cloud.run("tbookISBN",{ isbn:isbn }) if(!result?.isbn){ this.msg.warning('未找到该书号的图书信息,请手动填写') } // 其他字段,需补充接口与数据库对应关系 this.validateForm.get("title")?.setValue(result?.book_name) this.validateForm.get("author")?.setValue(result?.author_name) this.validateForm.get("authors")?.setValue(result?.author) this.validateForm.get("majorPoniter")?.setValue(result?.major) this.validateForm.get("lang")?.setValue(languages.options?.[result?.languages]?.name) this.validateForm.get("editionUnit")?.setValue(result?.publisher) this.validateForm.get("editionDate")?.setValue(new Date(result?.publish_time)) this.validateForm.get("carrierShape")?.setValue(result?.publication_class) console.log(result) } validateForm: FormGroup<{ title: FormControl; //申报教材名称 ISBN: FormControl; //国际标准书号 author: FormControl; //第一主编(作者) unit: FormControl; //第一主编(作者)单位 type: FormControl; //申报类型 typeNumber: FormControl; //全册次数 majorPoniter: FormControl; //教材应用对象及所诉学科专业类 lang: FormControl; //教材主要语种类型 authors: FormControl; //其他主编姓名 editor: FormControl; //其他编者姓名 approval: FormControl; //是否为重点立项教材 editionUnit: FormControl; //出版单位 editionFirst: FormControl; //初版时间 carrierShape: FormControl; //载体形式 editionDate: FormControl; //出版时间 editionNumber: FormControl; //出版版次 printDate: FormControl; //最新印次时间 printNumber: FormControl; //最新印次 printSum: FormControl; //初版以来合计印数 importantProject: FormControl; //初版以来是否列为重点项目 importantProjectOther: FormControl; //其他省部级及以上项目 approvedImgUrl:FormControl//重点立项教材获批截图 // remember: FormControl; }> = this.fb.group({ title: ['', [Validators.required]], ISBN: ['', [Validators.required]], author: ['', [Validators.required]], unit: ['', [Validators.required]], type: ['', [Validators.required]], typeNumber: [1], majorPoniter: ['', [Validators.required]], lang: ['', [Validators.required]], authors: ['', [Validators.required]], editor: ['', [Validators.required]], approval: ['', [Validators.required]], editionUnit: ['', [Validators.required]], editionFirst: [new Date(), [Validators.required]], carrierShape: ['', [Validators.required]], editionDate: [new Date(), [Validators.required]], editionNumber: [0, [Validators.required]], printDate: [new Date(), [Validators.required]], printNumber: [0, [Validators.required]], printSum: [0, [Validators.required]], importantProject: ['', [Validators.required]], importantProjectOther: [''], approvedImgUrl:[''], // copyrightImgUrl: [''], // CIPImgUrl: [''], // remember: [true], }); /** 所属学科专业类显示数量*/ nzOptionOverflowSize=5 //教材应用对象及所诉学科专业类 selectList=major.majors.options //语言选择 selectLang: Array = languages.options; //载体形式 carrierOptions: Array = [ { name: '纸质教材', code: 'Z001', }, { name: '电子教材', code: 'Z002', }, { name: '纸质教材附带电子资源', code: 'Z003', }, ]; importantProjectList: Array = [ { title: '“十二五”普通高等教育本科国家级规划教材', value: '“十二五”普通高等教育本科国家级规划教材', }, { title: '“十二五”以来省级优秀教材', value: '“十二五”以来省级优秀教材', }, { title: '“十二五”以来省级规划教材', value: '“十二五”以来省级规划教材', }, { title: '其他省部级及以上项目', value: '其他省部级及以上项目', }, ]; // get importantProjectState(){ // return this.importantProjectList.some((item:any)=> item.value == this.validateForm.value.importantProject) // } constructor( public tbookSer: textbookServer, private fb: NonNullableFormBuilder, private modal: NzModalService, private msg: NzMessageService ) { } ngOnInit() { console.log(this.eduTextbook); this.validateForm = this.fb.group({ title: [this.eduTextbook?.get('title') || '', [Validators.required]], ISBN: [this.eduTextbook?.get('ISBN') || '', [Validators.required]], author: [this.eduTextbook?.get('author') || '', [Validators.required]], unit: [this.eduTextbook?.get('unit') || '', [Validators.required]], type: [this.eduTextbook?.get('type') || '', [Validators.required]], typeNumber: [this.eduTextbook?.get('typeNumber') || 1, [Validators.required]], majorPoniter: [this.eduTextbook?.get('majorPoniter') || '', [Validators.required]], lang: [this.eduTextbook?.get('lang') || '', [Validators.required]], authors: [this.eduTextbook?.get('authors') || '', ], editor: [this.eduTextbook?.get('editor') || '',], approval: [this.eduTextbook?.get('approval') || '', [Validators.required]], editionUnit: [this.eduTextbook?.get('editionUnit') || '', [Validators.required]], editionFirst: [this.eduTextbook?.get('editionFirst') || new Date(), [Validators.required]], carrierShape: [this.eduTextbook?.get('carrierShape') || '', [Validators.required]], editionDate: [this.eduTextbook?.get('editionDate') || new Date(), [Validators.required]], editionNumber: [this.eduTextbook?.get('editionNumber') || 0, [Validators.required]], printDate: [this.eduTextbook?.get('printDate') || new Date(), [Validators.required]], printNumber: [this.eduTextbook?.get('printNumber') || 0, [Validators.required]], printSum: [this.eduTextbook?.get('printSum') || 0, [Validators.required]], importantProject: [this.eduTextbook?.get('importantProject') || '', [Validators.required]], importantProjectOther: [this.eduTextbook?.get('importantProjectOther') || ''], approvedImgUrl: [this.eduTextbook?.get('approvedImgUrl') || '', [Validators.required]], // copyrightImgUrl: [this.eduTextbook?.get('copyrightImgUrl') || '', [Validators.required]], // CIPImgUrl: [this.eduTextbook?.get('CIPImgUrl') || '', [Validators.required]], }); this.onChangeRadio() } //校验其他省部级及以上项目是否需填 onChangeRadio(){ if (this.validateForm.value.importantProject != '其他省部级及以上项目') { this.validateForm.controls.importantProjectOther.clearValidators(); this.validateForm.controls.importantProjectOther.markAsPristine(); } else { this.validateForm.controls.importantProjectOther.setValidators(Validators.required); this.validateForm.controls.importantProjectOther.markAsDirty(); } this.validateForm.controls.importantProjectOther.updateValueAndValidity(); } //校验全册册数是否需填 requiredTypeNumber(e:boolean){ if (e) { this.validateForm.controls.typeNumber.clearValidators(); this.validateForm.controls.typeNumber.markAsPristine(); } else { this.validateForm.controls.typeNumber.setValidators(Validators.required); this.validateForm.controls.typeNumber.markAsDirty(); } this.validateForm.controls.typeNumber.updateValueAndValidity(); } handleChange(info: NzUploadChangeParam): void { if (info.file.status !== 'uploading') { console.log(info.file, info.fileList); } if (info.file.status === 'done') { this.msg.success(`${info.file.name} file uploaded successfully`); } else if (info.file.status === 'error') { this.msg.error(`${info.file.name} file upload failed.`); } } upload(e: any, type:string) { console.log(e); let file = e[0]; // if(type == 'copyrightImgUrl' || type == 'CIPImgUrl' ||type=='approvedImgUrl'){ if(type=='approvedImgUrl'){ this.validateForm.value[type] = file } } async submitForm(event?: string): Promise { console.log(this.validateForm.value); if (this.validateForm.valid) { let params = this.validateForm.value if(event == 'next'){ await this.saveEduTextbook(params, this.validateForm.valid) this.state.emit({type:'next',textBook:this.eduTextbook}); } } else { if(event == 'save'){ let params = this.validateForm.value await this.saveEduTextbook(params, this.validateForm.valid) this.modal.success({ nzTitle: '保存成功', nzContent: '

已保存并且至空间

', nzOnOk: () => console.log('Info OK') }); return } if(event == 'next'){ let params = this.validateForm.value await this.saveEduTextbook(params, this.validateForm.valid) this.state.emit({type:'next',textBook:this.eduTextbook}); } // Object.values(this.validateForm.controls).forEach((control) => { // if (control.invalid) { // control.markAsDirty(); // control.updateValueAndValidity({ onlySelf: true }); // } // }); // this.msg.warning('请填写完整的内容') // return } if(event == 'save'){ let params = this.validateForm.value await this.saveEduTextbook(params, this.validateForm.valid) this.modal.success({ nzTitle: '保存成功', nzContent: '

已保存并且至空间

', nzOnOk: () => console.log('Info OK') }); } } async saveEduTextbook(params: any, isComplete:boolean){ console.log(params); if(!this.eduTextbook){ let obj = Parse.Object.extend('EduTextbook'); this.eduTextbook = new obj(); } //如果填写未完整,仅保存,状态修改待完善101 if(this.eduTextbook.get('status') == '102' && !isComplete){ this.eduTextbook?.set('status', '101'); this.eduTextbook.set('complete', false) }else if(!this.eduTextbook.get('status')){ this.eduTextbook?.set('status', '101'); } this.eduTextbook?.set('user', Parse.User.current()?.toPointer()); this.eduTextbook?.set('company', { __type: 'Pointer', className: 'Company', objectId: this.tbookSer.company, }); this.eduTextbook?.set('title', params.title); this.eduTextbook?.set('ISBN', params.ISBN); this.eduTextbook?.set('author', params.author); this.eduTextbook?.set('unit', params.unit); this.eduTextbook?.set('type', params.type); this.eduTextbook?.set('typeNumber', params.typeNumber); this.eduTextbook?.set('majorPoniter', params.majorPoniter); this.eduTextbook?.set('lang', params.lang); this.eduTextbook?.set('authors', params.authors); this.eduTextbook?.set('editor', params.editor); this.eduTextbook?.set('approval', params.approval); this.eduTextbook?.set('editionUnit', params.editionUnit); this.eduTextbook?.set('editionFirst', params.editionFirst); this.eduTextbook?.set('carrierShape', params.carrierShape); this.eduTextbook?.set('editionDate', params.editionDate); this.eduTextbook?.set('editionNumber', params.editionNumber); this.eduTextbook?.set('printDate', params.printDate); this.eduTextbook?.set('printNumber', params.printNumber); this.eduTextbook?.set('printSum', params.printSum); this.eduTextbook?.set('importantProject', params.importantProject); this.eduTextbook?.set('importantProjectOther', params.importantProjectOther); // this.eduTextbook?.set('copyrightImgUrl', params.copyrightImgUrl); // this.eduTextbook?.set('CIPImgUrl', params.CIPImgUrl); this.eduTextbook?.set('approvedImgUrl',params.approvedImgUrl) if(this.tbookSer.profile?.user?.department?.objectId){ this.eduTextbook?.set('department', { __type: 'Pointer', className: 'Department', objectId: this.tbookSer?.profile?.user?.department?.objectId, }); } await this.eduTextbook?.save(); return } selectedValue = null; listOfOption: Array<{ value: string; text: string }> = []; nzFilterOption = (): boolean => true; eduTimeout:any /**出版单位列表 */ eduList:Array=[] /**搜索出版单位 */ async search(value: string) { clearTimeout(this.eduTimeout) this.eduTimeout = setTimeout(async() => { let query = new Parse.Query('EduProcess') query.equalTo('company', this.tbookSer.company) query.equalTo('branch','66865d66ad23a23355b12aa7') query.contains('name',value) query.limit(10) this.eduList = await query.find() }, 500); } }