123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
- 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 { NzMessageService } from 'ng-zorro-antd/message';
- import { NzGridModule } from 'ng-zorro-antd/grid';
- import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';
- import { NzTableModule } from 'ng-zorro-antd/table';
- import { NzUploadChangeParam } from 'ng-zorro-antd/upload';
- import { NzUploadModule } from 'ng-zorro-antd/upload';
- import { NzModalService } from 'ng-zorro-antd/modal';
- import Parse from 'parse';
- import { CompUploadComponent } from '../../../../app/comp-upload/comp-upload.component';
- import {
- FormControl,
- FormGroup,
- NonNullableFormBuilder,
- Validators,
- ValidatorFn,
- AbstractControl,
- } from '@angular/forms';
- import { textbookServer } from '../../../../services/textbook';
- import * as eduTextBook from '../../../../services/EduTextbook'
- import { HttpClient } from '@angular/common/http';
- import { Router} from '@angular/router'
- @Component({
- selector: 'app-attachment',
- imports: [
- CommonCompModule,
- ReactiveFormsModule,
- NzSelectModule,
- NzRadioModule,
- NzGridModule,
- NzCheckboxModule,
- NzTableModule,
- NzUploadModule,
- CompUploadComponent,
- ],
- standalone: true,
- templateUrl: './attachment.component.html',
- styleUrls: ['./attachment.component.scss'],
- })
- export class AttachmentComponent implements OnInit {
- @Input('eduTextbook') eduTextbook: any;
- @Input('maxWidth') maxWidth: number = 0;
- @Output() state: EventEmitter<any> = new EventEmitter<any>();
- @Output() save: EventEmitter<any> = new EventEmitter<any>();
- //填写诚信承诺是否正确
- confirmationValidator: ValidatorFn = (
- control: AbstractControl
- ): { [s: string]: boolean } => {
- if (
- control.value !=
- '本人自愿参加此次申报,已认真填写并检查以上材料,保证内容真实'
- ) {
- return { required: true };
- }
- return {};
- };
- /** 版权页截图*/
- copyrightImgUrl: string = ''
- /** 中国版本图书馆CIP查询截图*/
- CIPImgUrl: string = ''
- /**图书编校质量自查结果记录表 */
- selfResults: any = {
- name: '',
- url: '',
- }
- /** 专家审查意见表*/
- expertOpinion: any = {
- name: '',
- url: '',
- }
- /** 教材使用情况证明材料*/
- evidence: any = {
- name: '',
- url: '',
- }
- /**其他材料 {name: '',url: '',} */
- moreMaterial: Array<any> = []
- /**申报单位承诺意见 */
- unitMaterial: any = {
- name: '',
- url: '',
- }
- constructor(
- public tbookSer: textbookServer,
- private msg: NzMessageService,
- private modal: NzModalService,
- private http: HttpClient,
- private router:Router
- ) { }
- ngOnInit() {
- if (this.eduTextbook.id) {
- this.copyrightImgUrl = this.eduTextbook?.get('copyrightImgUrl') || this.copyrightImgUrl
- this.CIPImgUrl = this.eduTextbook?.get('CIPImgUrl') || this.CIPImgUrl
- this.selfResults = this.eduTextbook?.get('selfResults') || this.selfResults
- this.expertOpinion = this.eduTextbook?.get('expertOpinion') || this.expertOpinion
- this.evidence = this.eduTextbook?.get('evidence') || this.evidence
- this.moreMaterial = this.eduTextbook?.get('moreMaterial') || this.moreMaterial
- this.unitMaterial = this.eduTextbook?.get('unitMaterial') || this.unitMaterial
- }
- }
- /**本页必填是否存在空项 */
- examineNull() {
- let isNull = false
- let msgList = []
- if (this.copyrightImgUrl == '' || !this.copyrightImgUrl) {
- msgList.push('版权页截图')
- isNull = true
- }
- if (this.CIPImgUrl == '' || !this.CIPImgUrl) {
- msgList.push('CIP查询截图')
- isNull = true
- }
- if (this.selfResults.url == '' || !this.selfResults.url) {
- msgList.push('自查结果记录表')
- isNull = true
- }
- if (this.expertOpinion.url == '' || !this.expertOpinion.url) {
- msgList.push('专家审查意见表')
- isNull = true
- }
- if (this.evidence.url == '' || !this.evidence.url) {
- msgList.push('证明材料')
- isNull = true
- }
- if (this.moreMaterial?.length > 0) {
- let isExist = this.moreMaterial.every(item => item?.url == '' || !item?.url)
- if (isExist) {
- msgList.push('其他材料')
- isNull = true
- }
- }
- if (this.unitMaterial.url == '' || !this.unitMaterial.url) {
- msgList.push('申报单位承诺意见')
- isNull = true
- }
- if (isNull) {
- // this.msg.create('error', `请上传完整 ${msgList.join()}`)
- }
- return isNull
- }
- /**判断是否存在未填字段 */
- isIgnoreFiledNull() {
- let selectList = this.eduTextbook?.get('characteristic')
- let check = false
- for (let i in selectList) {
- if (selectList[i].label == '通识课' || selectList[i].label == '公共基础课' || selectList[i].label == '专业课') {
- if (selectList[i].checked) {
- check = true
- break;
- }
- }
- }
- if (!check) {
- // this.msg.create('warning', '请返回选择适用课程性质')
- return true
- }
- let eduColumn = eduTextBook.EduTextbook.fields
- let ignoreFiled = [
- 'typeNumber', 'code', 'editionNumber', 'importantProjectOther',
- 'textbookFiles', 'createdAt', 'updatedAt', 'copyright', 'authorSign',
- 'CIP', 'isDeleted', 'opinions', 'printNumber', 'printSum', 'render',
- 'importantProject', 'importantProjectOther', 'complete', 'links', 'recommend',
- 'printSun', 'discard', 'edition', 'eduProcess', 'authors', 'editor',
- 'copyrightImgUrl', 'CIPImgurl', 'selfResults', 'expertOpinion', 'evidence',
- 'moreMaterial', 'unitMaterial', 'approvedImgUrl', 'department'
- ] //非必填字段
- let textBookJson = this.eduTextbook.toJSON()
- let isVrifly = Object.keys(eduColumn).some((item: string) => {
- if (!ignoreFiled.includes(item) && (textBookJson[item] === '' || textBookJson[item] === undefined || textBookJson[item] === null)) {
- console.warn('字段未填写:' + item)
- return true
- }
- return
- })
- if (isVrifly) {
- this.msg.warning('存在未填项')
- return true
- } else {
- return false
- }
- }
- async submitForm(event?: string): Promise<void> {
- let params = {
- copyrightImgUrl: this.copyrightImgUrl,
- CIPImgUrl: this.CIPImgUrl,
- selfResults: this.selfResults,
- expertOpinion: this.expertOpinion,
- evidence: this.evidence,
- moreMaterial: this.moreMaterial,
- unitMaterial: this.unitMaterial,
- }
- await this.saveEduTextbook(params, true);
- if (event == 'pre') {//上一步
- this.state.emit({ type: 'pre' });
- return;
- }
- if (event == 'complete') {
- this.state.emit({ type: 'complete', textBook: this.eduTextbook });
- let isPageNull = this.examineNull()//检查本页空项
- let isIgnoreFiled = this.isIgnoreFiledNull()//检查数据空项
- if (isPageNull || isIgnoreFiled) {
- } else {
- this.eduTextbook.set('complete', true)
- this.eduTextbook.set('status', '102')
- await this.eduTextbook.save()
- this.msg.success('已填写完成')
- }
- this.router.navigate(['/nav-author/manage/space'])
- } else if (event == 'save') {
- this.modal.success({
- nzTitle: '保存成功',
- nzContent: '<p>已保存并且至空间</p>',
- nzOnOk: () => console.log('Info OK'),
- });
- return;
- }
- }
- async saveEduTextbook(params: any, isComplete: boolean) {
- if (!this.eduTextbook) {
- this.msg.error('请先创建教材');
- return;
- }
- //如果填写未完整,仅保存,状态修改待完善101
- if (this.eduTextbook.get('status') == '102' && !isComplete) {
- this.eduTextbook?.set('status', '101');
- } 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,
- });
- params.selfResults &&
- this.eduTextbook?.set('selfResults', params.selfResults);
- params.unitMaterial &&
- this.eduTextbook?.set('unitMaterial', params.unitMaterial);
- params.expertOpinion &&
- this.eduTextbook?.set('expertOpinion', params.expertOpinion);
- params.evidence && this.eduTextbook?.set('evidence', params.evidence);
- params.moreMaterial &&
- this.eduTextbook?.set('moreMaterial', params.moreMaterial);
- this.eduTextbook?.set('copyrightImgUrl', params.copyrightImgUrl);
- this.eduTextbook?.set('CIPImgUrl', params.CIPImgUrl);
- await this.eduTextbook?.save();
- return;
- }
- upload(e: any, type: string) {
- let file = e[(e?.length - 1) || 0];
- if (type == 'copyrightImgUrl' || type == 'CIPImgUrl') {
- this[type] = file?.url
- } else if (type == 'selfResults' || type == 'expertOpinion' ||
- type == 'evidence' || type == 'unitMaterial') {
- this[type].url = file?.url
- this[type].name = file?.name
- } else if (type == 'moreMaterial') {
- this[type] = [...(this[type] || []), { name: file.name, url: file.url }]
- }
- }
- /**获取文件名 */
- getFileName(url: string) {
- if (!url) return ''
- let str = url?.split('/')[5]
- let index = str?.indexOf('-')
- let result = decodeURIComponent(str?.substring(index + 1))
- return result || '未知文件名'
- }
- downloadFile(fileName: string) {
- // let fileName = '十四五”普通高等教育本科国家级规划教材第一次遴选推荐申报表.docx'
- const fileUrl = `../../../../../public/file/${fileName}`;
- this.http.get(fileUrl, { responseType: 'blob' }).subscribe((blob) => {
- const url = window.URL.createObjectURL(blob);
- const a = document.createElement('a');
- a.href = url;
- a.download = fileName;
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- window.URL.revokeObjectURL(url);
- })
- }
- openFile(url: string) {
- console.log(url);
- window.open(url)
- }
- }
|