Browse Source

update 优化创建教材相关

warrior 7 months ago
parent
commit
512fa4fc7e

+ 6 - 0
projects/textbook/src/app/textbook/textbook.component.ts

@@ -445,6 +445,10 @@ export class TextbookComponent implements OnInit {
       this.message.warning('你的申报单位暂无进行的流程');
       return;
     }
+    let inviteUnit = parentMap[1]?.title //推荐单位
+    // if(parentMap[0]?.title == '省级教育行政部门' || parentMap[0]?.title == '有关部门(单位)教育司(局)'){
+    //   inviteUnit = parentMap[2]?.title
+    // }
     this.modal.confirm({
       nzTitle: '确认提交教材?',
       nzContent: `提交后,教材将不可编辑,并从「我的教材」移至「已提交评审教材」。`,
@@ -475,6 +479,7 @@ export class TextbookComponent implements OnInit {
               objectId: parentMap[1]?.key,
             });
           }
+          data.set('inviteUnit', inviteUnit);
           await data.save();
         } else {
           let count = 0,
@@ -507,6 +512,7 @@ export class TextbookComponent implements OnInit {
                     objectId: parentMap[1]?.key,
                   });
                 }
+                item.set('inviteUnit', inviteUnit);
                 item.save().then(() => resolve(true));
               } else {
                 failCount++;

+ 3 - 2
projects/textbook/src/modules/common/textbook-details/textbook-details.component.html

@@ -228,11 +228,12 @@
               x: (templ1.style.width || '1000') + 'px',
               y: '240px'
             }"
+            nzTableLayout="fixed"
           >
             <thead>
               <tr>
                 <th nzWidth="80px" nzLeft nzAlign="right">序号</th>
-                <th nzWidth="160px" nzLeft>名称</th>
+                <th nzWidth="160px" nzEllipsis>名称</th>
                 <th nzWidth="160px">来源/出版单位</th>
                 <th nzWidth="80px">时间</th>
               </tr>
@@ -242,7 +243,7 @@
               index = $index) {
               <tr>
                 <td nzEllipsis nzLeft nzAlign="right">{{ index + 1 }}</td>
-                <td nzEllipsis nzLeft>
+                <td nzEllipsis>
                   {{ data.name }}
                 </td>
                 <td nzEllipsis>

+ 4 - 3
projects/textbook/src/modules/nav-author/components/attachment/attachment.component.ts

@@ -232,8 +232,8 @@ export class AttachmentComponent implements OnInit {
     })
     /* 检验authorList字段是否留空 */
     let authorListAuth
-    // console.log(textBookJson.authorList);
-    authorListAuth = textBookJson.authorList.some((obj:any)=>{
+    console.log(this.authorList);
+    authorListAuth = this.authorList.some((obj:any)=>{
       return Object.keys(obj).some((item: string) => !obj[item])
     })
     // console.log(authorListAuth);
@@ -266,10 +266,11 @@ export class AttachmentComponent implements OnInit {
       this.state.emit({ type: 'pre' });
       return;
     }
-    await this.saveEduTextbook(params, (!isPageNull || !isIgnoreFiled));
+    await this.saveEduTextbook(params, (!isPageNull && !isIgnoreFiled));
     if (event == 'complete') {
       this.state.emit({ type: 'complete', textBook: this.eduTextbook });
       if (isPageNull || isIgnoreFiled) {
+        console.log('教材填写不完整');
       } else {
         this.eduTextbook.set('complete', true)
         this.eduTextbook.set('status', '102')

+ 23 - 12
projects/textbook/src/modules/nav-author/components/basic-in/basic-in.component.html

@@ -35,6 +35,20 @@
         </nz-input-group>
       </nz-form-control>
     </nz-form-item>
+    <nz-form-item style="margin-bottom: 16px">
+      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>第一主编(作者)单位类型</nz-form-label>
+      <nz-form-control nzErrorTip="第一主编(作者)单位类型" [nzSm]="12" [nzXs]="12">
+        <nz-input-group>
+          <nz-select nzShowSearch nzAllowClear nzPlaceHolder="请选择第一主编(作者)单位类型" formControlName="unitType">
+            @for(type of unitSelects; track type.code;let index = $index){
+            <nz-option nzCustomContent [nzValue]="type.name" [nzLabel]="type.name">
+              <div>{{ type.name }}</div>
+            </nz-option>
+            }
+          </nz-select>
+        </nz-input-group>
+      </nz-form-control>
+    </nz-form-item>
     <nz-form-item style="margin-bottom: 16px">
       <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>申报类型</nz-form-label>
       <nz-form-control nzErrorTip="请输入申报类型" [nzSm]="12" [nzXs]="12">
@@ -47,9 +61,9 @@
           /> -->
 
           <nz-radio-group style="display: flex; flex-direction: column" formControlName="type">
-            <label nz-radio nzValue="单册" (click)="requiredTypeNumber(false)">单册</label>
+            <label nz-radio nzValue="单册">单册</label>
             <div class="basic-row">
-              <label nz-radio nzValue="全册" (click)="requiredTypeNumber(true)">全册</label>
+              <label nz-radio nzValue="全册">全册</label>
               @if (validateForm.value.type =='全册') {
               <nz-input-group style="flex: 1; margin-left: 20px" [nzSuffix]="suffixTemplateInfo">
                 <input min="2" type="number" formControlName="typeNumber" nz-input placeholder="输入册数" />
@@ -109,12 +123,9 @@
       <nz-form-control nzErrorTip="请输入完成项" [nzSm]="12" [nzXs]="12">
         <nz-input-group>
           <nz-select nzShowSearch nzAllowClear nzPlaceHolder="请输入是否重点立项教材" formControlName="approval">
-            <nz-option nzCustomContent [nzValue]="'经中央有关部门审定的教材'" [nzLabel]="'经中央有关部门审定的教材'">经有关部门审定的教材</nz-option>
-            <nz-option nzCustomContent [nzValue]="'首届全国教材建设奖优秀教材(高等教育类)教材'" [nzLabel]="'首届全国教材建设奖优秀教材(高等教育类)教材'">首届全国教材建设奖优秀教材(高等教育类)教材</nz-option>
-            <nz-option nzCustomContent [nzValue]="'“101计划”核心教材'" [nzLabel]="'“101计划”核心教材'">“101计划”核心教材</nz-option>
-            <nz-option nzCustomContent [nzValue]="'“四新”重点建设教材(含战略性新兴领域教材)'" [nzLabel]="'“四新”重点建设教材(含战略性新兴领域教材)'">“四新”重点建设教材(含战略性新兴领域教材)</nz-option>
-            <nz-option nzCustomContent [nzValue]="'否'" [nzLabel]="'否'">否</nz-option>
-            
+            @for (item of options; track item.code) {
+            <nz-option nzCustomContent [nzValue]="item.name" [nzLabel]="item.name">{{item.name}}</nz-option>
+            }
             <!-- <nz-option nzCustomContent [nzValue]="'基础学科“101计划”核心教材'" [nzLabel]="'基础学科“101计划”核心教材'">基础学科“101计划”核心教材</nz-option>
             <nz-option nzCustomContent [nzValue]="'战略性新兴领域教材'" [nzLabel]="'战略性新兴领域教材'">战略性新兴领域教材</nz-option>
             <nz-option nzCustomContent [nzValue]="'“四新”重点建设教材'" [nzLabel]="'“四新”重点建设教材'">“四新”重点建设教材</nz-option>
@@ -123,12 +134,12 @@
         </nz-input-group>
       </nz-form-control>
     </nz-form-item>
-    @if (validateForm.value.approval&&validateForm.value.approval != '否') {
+    @if (validateForm.value.approval && validateForm.value.approval != '否') {
       <nz-form-item style="margin-bottom: 16px">
         <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>教材获批截图</nz-form-label>
         <nz-form-control nzErrorTip="请上传教材获批截图" [nzSm]="12" [nzXs]="12">
-          @if (validateForm?.value?.approvedImgUrl) {
-            <a style="color: #3e49b3;font-size: 14px;" (click)="openFile(validateForm?.value?.approvedImgUrl)">
+          @if (validateForm.value.approvedImgUrl) {
+            <a style="color: #3e49b3;font-size: 14px;" (click)="openFile(validateForm.value.approvedImgUrl)">
               <span nz-icon nzType="file" nzTheme="outline"></span>
               教材获批截图
             </a>
@@ -225,7 +236,7 @@
       </nz-form-control>
     </nz-form-item>
     <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>初版以来是否列为重点项目</nz-form-label>
+      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8">初版以来是否列为重点项目</nz-form-label>
       <nz-form-control nzErrorTip="" [nzSm]="12" [nzXs]="12">
         <nz-checkbox-wrapper>
             @for (item of importantProjectList; track item.value) {

+ 75 - 47
projects/textbook/src/modules/nav-author/components/basic-in/basic-in.component.ts

@@ -83,6 +83,8 @@ export class BasicInComponent implements OnInit {
     ISBN: FormControl<string>; //国际标准书号
     author: FormControl<string>; //第一主编(作者)
     unit: FormControl<string>; //第一主编(作者)单位
+    unitType:FormControl<string>//第一主编(作者)单位类型
+
     type: FormControl<string>; //申报类型
     typeNumber: FormControl<number|any>; //全册次数
 
@@ -118,8 +120,8 @@ export class BasicInComponent implements OnInit {
     typeNumber: [2],
     majorPoniter: ['', [Validators.required]],
     lang: ['', [Validators.required]],
-    authors: ['', [Validators.required]],
-    editor: ['', [Validators.required]],
+    authors: [''],
+    editor: [''],
     approval: ['', [Validators.required]],
     editionUnit: ['', [Validators.required]],
     editionFirst: [new Date(), [Validators.required]],
@@ -135,6 +137,7 @@ export class BasicInComponent implements OnInit {
     // copyrightImgUrl: [''],
     // CIPImgUrl: [''],
     // remember: [true],
+    unitType:['',[Validators.required]],
   });
   /** 所属学科专业类显示数量*/
   nzOptionOverflowSize=5
@@ -142,6 +145,25 @@ export class BasicInComponent implements OnInit {
   selectList=major.majors.options
   //语言选择
   selectLang: Array<any> = languages.options;
+  //可选单位类型
+  unitSelects: Array<any> = [
+    {
+      name: '部属高校',
+      code: '部属高校',
+    },
+    {
+      name: '部省合建高校',
+      code: '部省合建高校',
+    },
+    {
+      name: '省部共建高校',
+      code: '省部共建高校',
+    },
+    {
+      name: '其他',
+      code: '其他',
+    },
+  ];
   //载体形式
   carrierOptions: Array<any> = [
     {
@@ -193,33 +215,30 @@ export class BasicInComponent implements OnInit {
     this.importantProject = checkedList.map(item=>item.value)
     console.log(this.importantProject)
   }
-  // importantProjectList: Array<any> = [
-  //   {
-  //     title: '首届全国教材建设奖全国优秀教材(高等教育类)',
-  //     value: '首届全国教材建设奖全国优秀教材(高等教育类)',
-  //   },
-  //   {
-  //     title: '“十二五”普通高等教育本科国家级规划教材',
-  //     value: '“十二五”普通高等教育本科国家级规划教材',
-  //   },
-  //   {
-  //     title: '“十二五”以来省级优秀教材',
-  //     value: '“十二五”以来省级优秀教材',
-  //   },
-  //   {
-  //     title: '“十二五”以来省级规划教材',
-  //     value: '“十二五”以来省级规划教材',
-  //   },
- 
-    
-  //   {
-  //     title: '其他省部级及以上项目',
-  //     value: '其他省部级及以上项目',
-  //   },
-  // ];
-  // get importantProjectState(){
-  //   return this.importantProjectList.some((item:any)=> item.value == this.validateForm.value.importantProject)
-  // }
+  /* 是否重点立项教材可选列表 */
+  options: Array<any> = [
+    {
+      name: '经中央有关部门审定的教材',
+      code: '经中央有关部门审定的教材',
+    },
+    {
+      name: '首届全国教材建设奖优秀教材(高等教育类)教材',
+      code: '首届全国教材建设奖优秀教材(高等教育类)教材',
+    },
+    {
+      name: '“101计划”核心教材',
+      code: '“101计划”核心教材',
+    },
+    {
+      name: '“四新”重点建设教材(含战略性新兴领域教材)',
+      code: '“四新”重点建设教材(含战略性新兴领域教材)',
+    },
+    {
+      name: '否',
+      code: '否',
+    }
+  ];
+  
   constructor(
     public tbookSer: textbookServer,
     private fb: NonNullableFormBuilder,
@@ -243,7 +262,7 @@ export class BasicInComponent implements OnInit {
     }
  
     this.approvedImgList[0].url = this.eduTextbook.get('approvedImgUrl')
-    console.log(this.approvedImgList)
+    // console.log(this.approvedImgList)
     console.log(this.eduTextbook);
     this.validateForm = this.fb.group({
       title: [this.eduTextbook?.get('title') || '', [Validators.required]],
@@ -251,11 +270,11 @@ export class BasicInComponent implements OnInit {
       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') || 2, [Validators.required]],
+      typeNumber: [this.eduTextbook?.get('typeNumber') || 2],
   
       majorPoniter: [this.eduTextbook?.get('majorPoniter') || '', [Validators.required]],
       lang: [this.eduTextbook?.get('lang') || '', [Validators.required]],
-      authors: [this.eduTextbook?.get('authors') || '', ],
+      authors: [this.eduTextbook?.get('authors') || ''],
       editor: [this.eduTextbook?.get('editor') || '',],
       approval: [this.eduTextbook?.get('approval') || '', [Validators.required]],
       editionUnit: [this.eduTextbook?.get('editionUnit') || '', [Validators.required]],
@@ -268,15 +287,17 @@ export class BasicInComponent implements OnInit {
       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]],
+      approvedImgUrl: [this.eduTextbook?.get('approvedImgUrl') || ''],
+      unitType: [this.eduTextbook?.get('unitType') || '',[Validators.required]],
+
       // copyrightImgUrl: [this.eduTextbook?.get('copyrightImgUrl') || '', [Validators.required]],
       // CIPImgUrl: [this.eduTextbook?.get('CIPImgUrl') || '', [Validators.required]],
     });
-    this.onChangeRadio()
   }
-  //校验其他省部级及以上项目是否需填
-  onChangeRadio(){
+  //校验各项是否需填
+  required(){
     // if (this.validateForm.value.importantProject != '其他省部级及以上项目') {
+    //校验其他省部级及以上项目是否需填
     if (!this.importantProjectList[4].checked) {
       this.validateForm.controls.importantProjectOther.clearValidators();
       this.validateForm.controls.importantProjectOther.markAsPristine();
@@ -285,10 +306,9 @@ export class BasicInComponent implements OnInit {
       this.validateForm.controls.importantProjectOther.markAsDirty();
     }
     this.validateForm.controls.importantProjectOther.updateValueAndValidity();
-  }
-  //校验全册册数是否需填
-  requiredTypeNumber(e:boolean){
-    if (e) {
+    
+    //校验全册册数是否需填
+    if (this.validateForm.value.type == '单册') {
       this.validateForm.controls.typeNumber.clearValidators();
       this.validateForm.controls.typeNumber.markAsPristine();
     } else {
@@ -296,7 +316,18 @@ export class BasicInComponent implements OnInit {
       this.validateForm.controls.typeNumber.markAsDirty();
     }
     this.validateForm.controls.typeNumber.updateValueAndValidity();
+
+    //校验教材获批截图是否需填
+    if (!this.validateForm.value.approval || this.validateForm.value.approval == '否') {
+      this.validateForm.controls.approvedImgUrl.clearValidators();
+      this.validateForm.controls.approvedImgUrl.markAsPristine();
+    } else {
+      this.validateForm.controls.approvedImgUrl.setValidators(Validators.required);
+      this.validateForm.controls.approvedImgUrl.markAsDirty();
+    }
+    this.validateForm.controls.approvedImgUrl.updateValueAndValidity();
   }
+
   upload(e: any, type:string) {
     console.log(e);
     let file = e[0];
@@ -306,7 +337,9 @@ export class BasicInComponent implements OnInit {
     }
   }
   async submitForm(event?: string): Promise<void> {
+    this.required()
     console.log(this.validateForm.value);
+    console.log(this.validateForm.valid);
     if (this.validateForm.valid) {
       let params = this.validateForm.value
       if(event == 'next'){
@@ -395,13 +428,8 @@ export class BasicInComponent implements OnInit {
     // 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,
-    //   });
-    // }
+    this.eduTextbook?.set('unitType',params.unitType)
+
     await this.eduTextbook?.save();
     return
   }

+ 1 - 1
projects/textbook/src/modules/nav-province-school-contact/modules.routes.ts

@@ -9,7 +9,7 @@ import { PageTextbookComponent } from "../nav-province-contact/page-textbook/pag
 const routes: Routes = [
   {
     path: '',
-    redirectTo:'manage/textbook',
+    redirectTo:'manage/user',
     pathMatch: "full",
   },
   {

+ 9 - 1
server/db/schemas/EduTextbook.js

@@ -244,7 +244,15 @@ export const EduTextbook = {
         'cipProveFile':{//cip相关截图
             "type":'Array',
             "required": false  
-        }
+        },
+        'inviteUnit':{//推荐单位
+            "type":'Array',
+            "required": false  
+        },
+        'unitType':{//推荐单位类型
+            "type":'Array',
+            "required": false  
+        },
     },
     "classLevelPermissions": {
         "find": {