Browse Source

Merge branch 'master' of http://git.fmode.cn:3000/bin/edu-textbook

warrior 7 months ago
parent
commit
bceb6dcba5

BIN
projects/textbook/public/file/专家审核意见表.docx


+ 0 - 0
projects/textbook/public/file/0516-附件2:“十四五”普通高等教育本科国家级规划教材第一次遴选推荐申报表.docx → projects/textbook/public/file/十四五”普通高等教育本科国家级规划教材第一次遴选推荐申报表.docx


BIN
projects/textbook/public/file/图书编校质量自查结果记录表.docx


BIN
projects/textbook/public/file/申报单位承诺意见.docx


+ 20 - 8
projects/textbook/src/app/textbook/textbook.component.ts

@@ -101,16 +101,12 @@ export class TextbookComponent implements OnInit {
       });
       query = Parse.Query.or(query1, query2);
     }
-    if (this.tbookSer.profile.user.department?.objectId) {
-      query.equalTo(
-        'department',
-        this.tbookSer.profile.user.department?.objectId
-      );
-    }
+    // this.uid && query.equalTo('user',this.tbookSer.profile.user?.objectId);
     this.depart && query.equalTo('department', this.depart);
     this.recommend && query.equalTo('recommend', true);
     this.filterObj?.noStared && query.notEqualTo('recommend', true);
     this.uid && query.equalTo('user', this.uid);
+    query.descending('createdAt')
     query.notEqualTo('isDeleted', true);
     if (!this.uid) {
       query.equalTo('render', true);
@@ -133,6 +129,7 @@ export class TextbookComponent implements OnInit {
     this.count = await query.count();
     query.limit(this.limit);
     query.skip(this.limit * (this.pageSize - 1));
+    // query.include('user')
     this.textbookList = await query.find();
     console.log(this.textbookList);
     this.loading = false;
@@ -272,8 +269,9 @@ export class TextbookComponent implements OnInit {
     });
   }
   //提交教材
-  submit(data?: Parse.Object) {
-    console.log(data);
+  async submit(data?: Parse.Object) {
+    let parentMap = await this.tbookSer.formatNode(this.tbookSer?.profile?.user?.department?.objectId);
+    console.log(parentMap);
     this.modal.confirm({
       nzTitle: '提交教材',
       nzContent: `提交后在已提交评审教材中查看`,
@@ -288,6 +286,13 @@ export class TextbookComponent implements OnInit {
           data.set('render', true);
           data.set('status', '200');
           data.set('code', t);
+          if(parentMap[1]?.key){
+            data.set('department', {
+              __type: 'Pointer',
+              className: 'Department',
+              objectId:parentMap[1]?.key
+            });
+          }
           await data.save();
         } else {
           let selectedList = this.textbookList.filter((item: any) =>
@@ -301,6 +306,13 @@ export class TextbookComponent implements OnInit {
               item.set('render', true);
               item.set('status', '200');
               item.set('code', t);
+              if(parentMap[1]?.key){
+                item.set('department', {
+                  __type: 'Pointer',
+                  className: 'Department',
+                  objectId:parentMap[1]?.key
+                });
+              }
               item.save().then(() => resolve(true));
             });
           });

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

@@ -28,7 +28,7 @@
     <div class="author-content">
       <div class="title">图书编校质量自查结果记录表</div>
       <div class="text">
-        教材出版单位对申报教材的编校质量自查后,按要求提供图书编校质量自查结果记录表,并加盖出版社公章。全册教材的不同分册以不同文件分别上传。<a>下载模板</a>
+        教材出版单位对申报教材的编校质量自查后,按要求提供图书编校质量自查结果记录表,并加盖出版社公章。全册教材的不同分册以不同文件分别上传。<a (click)="downloadFile('图书编校质量自查结果记录表.docx')">下载模板</a>
       </div>
       <nz-form-item class="row" style="margin-bottom: 16px">
         <nz-form-label class="label" [nzNoColon]="true" [nzSm]="10" [nzXs]="10"
@@ -46,7 +46,7 @@
       <div class="text">
         由第一主编所在单位和出版机构邀请校内外相关学科专业领域专家,对教材进行思想性、学术性审核。专家不少于
         3
-        名,其中半数以上为校外专家,专家分别实名评价并签字,并注明所在单位及专业身份。评价人不得是本教材的作者。<a>下载模板</a>
+        名,其中半数以上为校外专家,专家分别实名评价并签字,并注明所在单位及专业身份。评价人不得是本教材的作者。<a (click)="downloadFile('专家审核意见表.docx')">下载模板</a>
       </div>
       <nz-form-item class="row" style="margin-bottom: 16px">
         <nz-form-label class="label" [nzNoColon]="true" [nzSm]="10" [nzXs]="10" nzRequired>上传专家审核意见表</nz-form-label>
@@ -61,7 +61,7 @@
     <div class="author-content">
       <div class="title">教材使用情况证明材料</div>
       <div class="text">
-        教材出版单位提供教材主要使用高校名单及使用情况证明材料,并加盖公章。<a>下载模板</a>
+        教材出版单位提供教材主要使用高校名单及使用情况证明材料,并加盖公章。<a (click)="downloadFile('专家审核意见表.docx')">下载模板</a>
       </div>
       <nz-form-item class="row" style="margin-bottom: 16px">
         <nz-form-label class="label" [nzNoColon]="true" [nzSm]="10" [nzXs]="10" nzRequired>教材使用情况证明材料</nz-form-label>
@@ -88,7 +88,7 @@
       <div class="text">
         作者 /
         主编所在高校主管领导或出版单位主管领导在申报单位承诺意见表格签字并加盖高校
-        / 出版单位公章后上传此项。<a>下载模板</a>
+        / 出版单位公章后上传此项。<a (click)="downloadFile('申报单位承诺意见.docx')">下载模板</a>
       </div>
       <nz-form-item class="row" style="margin-bottom: 16px">
         <nz-form-label class="label" [nzNoColon]="true" [nzSm]="16" [nzXs]="16" nzRequired>申报单位承诺意见材料</nz-form-label>

+ 42 - 8
projects/textbook/src/modules/nav-author/components/attachment/attachment.component.ts

@@ -22,7 +22,9 @@ import {
   AbstractControl,
 } from '@angular/forms';
 import { textbookServer } from '../../../../services/textbook';
-// import * as eduTextBook from '../../../../../../../server/db/schemas/'
+import * as eduTextBook from '../../../../services/EduTextbook'
+import { HttpClient } from '@angular/common/http';
+
 @Component({
   selector: 'app-attachment',
   imports: [
@@ -91,7 +93,8 @@ export class AttachmentComponent implements OnInit {
   constructor(
     public tbookSer: textbookServer,
     private msg: NzMessageService,
-    private modal: NzModalService
+    private modal: NzModalService,
+    private http: HttpClient
   ) { }
   ngOnInit() {
     if (this.eduTextbook.id) {
@@ -156,21 +159,37 @@ export class AttachmentComponent implements OnInit {
 
   /**判断是否存在未填字段 */
   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
+    }
 
-    // eduColumn = 
+    let eduColumn = eduTextBook.EduTextbook.fields
     let ignoreFiled = [
-      'typeNumber', 'editionNumber', 'importantProjectOther',
+      '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'
+      'copyrightImgUrl', 'CIPImgurl', 'selfResults', 'expertOpinion', 'evidence',
+      'moreMaterial', 'unitMaterial','approvedImgUrl','department'
     ] //非必填字段
     let textBookJson = this.eduTextbook.toJSON()
-    let isVrifly = Object.keys(textBookJson).some((item: string) => {
+
+  
+    let isVrifly = Object.keys(eduColumn).some((item: string) => {
       if (!ignoreFiled.includes(item) && (textBookJson[item] === '' || textBookJson[item] === undefined || textBookJson[item] === null)) {
-        console.warn('字段未填写:' + item);
+        console.warn('字段未填写:' + item)
         return true
       }
       return
@@ -281,4 +300,19 @@ export class AttachmentComponent implements OnInit {
     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);
+    })
+  }
 }

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

@@ -336,13 +336,13 @@ 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,
-      });
-    }
+    // 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
   }

+ 2 - 2
projects/textbook/src/modules/nav-author/components/textbook-pertain/textbook-pertain.component.html

@@ -11,7 +11,7 @@
               <nz-select style="width: 80%" nzShowSearch nzAllowClear nzPlaceHolder="填写 6 位专业代码选择"
                 formControlName="major" (ngModelChange)="changeCode()" (nzOnSearch)="getCode($event)">
                 @for(major of selectList; track major.code;let index = $index){
-                <nz-option nzCustomContent [nzValue]="major.name" [nzLabel]="major.code">
+                <nz-option nzCustomContent [nzValue]="major.code" [nzLabel]="major.code">
                   <div>{{ major.name }}</div>
                   <div style="font-size: 12px;color: gray;">{{ major.code }}</div>
                 </nz-option>
@@ -252,7 +252,7 @@
       </nz-table>
     </div>
   </form>
-  <a>
+  <a (click)="downloadFile()">
     <span nz-icon nzType="download" nzTheme="outline"></span>
     下载本页所有附件模板
   </a>

+ 21 - 3
projects/textbook/src/modules/nav-author/components/textbook-pertain/textbook-pertain.component.ts

@@ -20,6 +20,7 @@ import {
 import { textbookServer } from '../../../../services/textbook';
 import { CompUploadComponent } from '../../../../app/comp-upload/comp-upload.component';
 import * as major from '../../../../services/majors.map'
+import { HttpClient } from '@angular/common/http';
 
 interface author {
   name: string;
@@ -157,7 +158,8 @@ export class TextbookPertainComponent implements OnInit {
     public tbookSer: textbookServer,
     private fb: NonNullableFormBuilder,
     private modal: NzModalService,
-    private msg: NzMessageService
+    private msg: NzMessageService,
+    private http: HttpClient
   ) { }
 
   ngOnInit() {
@@ -381,7 +383,7 @@ export class TextbookPertainComponent implements OnInit {
     });
     let major = this.selectList.find((item) => item.code == params.major);
     let lessons = params.lessons.split(';');
-    this.eduTextbook?.set('major', major);
+    this.eduTextbook?.set('major', major );
     params.period && this.eduTextbook?.set('period', params.period);
     lessons && this.eduTextbook?.set('lessons', lessons);
     // params.characteristic && this.eduTextbook?.set('characteristic', params.characteristic);
@@ -404,4 +406,20 @@ export class TextbookPertainComponent implements OnInit {
 
     return result || '未知文件名'
   }
-}
+  
+
+  downloadFile(){
+    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);
+    })
+  }
+  }

+ 267 - 0
projects/textbook/src/services/EduTextbook.ts

@@ -0,0 +1,267 @@
+export const EduTextbook = {
+    "className": "EduTextbook",
+    "fields": {
+        "status": {
+            //状态 101:待完善资料 102:可提交状态 200:已提交遴选中 300:被打回 400:已通过
+            "type": "String",
+            "required": false
+        },
+        "user": {
+            "type": "Pointer",
+            "targetClass":"_User",
+            "required": false
+        },
+        "department": { //所属流程
+            "type": "Pointer",
+            "targetClass":"Department",
+            "required": false
+        },
+        "render": { //是否提交
+            "type": "Boolean",
+            "required": false
+        },
+        "recommend": { //是否推荐
+            "type": "Boolean",
+            "required": false
+        },
+        "complete": { //是否填写完整
+            "type": "Boolean",
+            "required": false
+        },
+        "isDeleted": {
+            "type": "Boolean",
+            "required": false
+        },
+        "discard": { //删除至回收站
+            "type": "Boolean",
+            "required": false
+        },
+        "title": {
+            "type": "String",
+            "required": false
+        },
+        "ISBN": {
+            "type": "String",
+            "required": false
+        },
+        "author": {
+            "type": "String",
+            "required": false
+        },
+        "unit": {
+            "type": "String",
+            "required": false
+        },
+        "type": {
+            "type": "String",
+            "required": false
+        },
+        "typeNumber": {//全册次数
+            "type": "Number",
+            "required": false
+        },
+        "majorPoniter": {
+            "type": "String",
+            "required": false
+        },
+        "lang": {
+            "type": "String",
+            "required": false
+        },
+        "authors": {
+            "type": "String",
+            "required": false
+        },
+        "editor": {
+            "type": "String",
+            "required": false
+        },
+        // "approval": {//是否为重点立项教材
+        //     "type": "Boolean",
+        //     "required": false
+        // },
+        "approval": {//是否为重点立项教材
+            "type": "String",
+            "required": false
+        },
+        "edition": {
+            "type": "String",
+            "required": false
+        },
+        "editionFirst": {
+            "type": "Date",
+            "required": false
+        },
+        "carrierShape": {
+            "type": "String",
+            "required": false
+        },
+        "editionDate": {
+            "type": "Date",
+            "required": false
+        },
+        "editionNumber": {//出版版次
+            "type": "Number",
+            "required": false
+        },
+        "printDate": {
+            "type": "Date",
+            "required": false
+        },
+        "printNumber": {
+            "type": "Number",
+            "required": false
+        },
+        "printSum": {
+            "type": "Number",
+            "required": false
+        },
+        "importantProject": {//重点项目
+            "type": "String",
+            "required": false
+        },
+        "importantProjectOther": {//重点项目-其他
+            "type": "String",
+            "required": false
+        },
+        "copyright": {
+            "type": "Array",
+            "required": false
+        },
+        "CIP": {
+            "type": "Array",
+            "required": false
+        },
+        "major": {
+            "type": "Object",
+            "required": false
+        },
+        "period": {
+            "type": "Number",
+            "required": false
+        },
+        "lessons": {
+            "type": "Array",
+            "required": false
+        },
+        "characteristic": {
+            "type": "Array",
+            "required": false
+        },
+        "authorList": {
+            "type": "Array",
+            "required": false
+        },
+        "authorDetails": {
+            "type": "String",
+            "required": false
+        },
+        "achievementOptions": {
+            "type": "Array",
+            "required": false
+        },
+        "courses": {
+            "type": "Array",
+            "required": false
+        },
+        "innovateExplain": {
+            "type": "String",
+            "required": false
+        },
+        "influence": {
+            "type": "String",
+            "required": false
+        },
+        "textbookFiles": {
+            "type": "Array",
+            "required": false
+        },
+        "links": {
+            "type": "Array",
+            "required": false
+        },
+        "opinions": {
+            "type": "Array",
+            "required": false
+        },
+        "selfResults": {
+            "type": "Object",
+            "required": false
+        },
+        "expertOpinion": {
+            "type": "Object",
+            "required": false
+        },
+        "evidence": {
+            "type": "Object",
+            "required": false
+        },
+        "moreMaterial": {
+            "type": "Array",
+            "required": false
+        },
+        "authorSign": {
+            "type": "Array",
+            "required": false
+        },
+        "unitMaterial": {
+            "type": "Object",
+            "required": false
+        },
+        "accept": {//填写承诺书
+            "type": "String",
+            "required": false
+        },
+        "approvedImgUrl":{//重点立项教材获批截图            
+            "type":'String',
+            "required": false
+        },
+        "eduProcess": {//所属流程
+            "type": "Pointer",
+            "targetClass":"EduProcess",
+            "required": false
+        },
+        "code":{//编号
+            "type":'String',
+            "required": false
+        },
+        'editionUnit':{
+            "type":'String',
+            "required": false
+        },
+        'copyrightImgUrl':{
+            "type":'String',
+            "required": false  
+        },
+        'CIPImgurl':{
+            "type":'String',
+            "required": false  
+        }
+    },
+    "classLevelPermissions": {
+        "find": {
+            "*": true
+        },
+        "get": {
+            "*": true
+        },
+        "count": {
+            "*": true
+        },
+        "create": {
+            "*": true
+        },
+        "update": {
+            "*": true
+        },
+        "delete": {
+            "*": true
+        },
+        "addField": {
+            "*": true
+        },
+        "protectedFields": {
+            "*": []
+        }
+    }
+}