Browse Source

update 联系人提交遴选材料

warrior 7 months ago
parent
commit
ae10030fd3
25 changed files with 254 additions and 71 deletions
  1. 1 1
      projects/textbook/src/app/textbook/textbook.component.html
  2. 1 1
      projects/textbook/src/app/textbook/textbook.component.scss
  3. 13 8
      projects/textbook/src/app/textbook/textbook.component.ts
  4. 1 1
      projects/textbook/src/modules/nav-admin/page-process/page-process.component.html
  5. 1 0
      projects/textbook/src/modules/nav-admin/page-process/process-create/process-create.component.ts
  6. 1 1
      projects/textbook/src/modules/nav-admin/page-process/process-list/process-list.component.scss
  7. 28 5
      projects/textbook/src/modules/nav-admin/page-process/process-list/process-list.component.ts
  8. 1 1
      projects/textbook/src/modules/nav-admin/page-role/page-role.component.scss
  9. 1 1
      projects/textbook/src/modules/nav-admin/page-user/page-user.component.scss
  10. 1 1
      projects/textbook/src/modules/nav-author/space/space.component.ts
  11. 5 5
      projects/textbook/src/modules/nav-province-contact/page-process/page-process.component.html
  12. 2 2
      projects/textbook/src/modules/nav-province-contact/page-process/page-process.component.ts
  13. 1 1
      projects/textbook/src/modules/nav-province-contact/page-process/process-list/process-list.component.scss
  14. 14 4
      projects/textbook/src/modules/nav-province-contact/page-process/process-list/process-list.component.ts
  15. 1 1
      projects/textbook/src/modules/nav-province-contact/page-role/page-role.component.scss
  16. 6 6
      projects/textbook/src/modules/nav-province-contact/page-textbook/page-textbook.component.html
  17. 3 4
      projects/textbook/src/modules/nav-province-contact/page-textbook/page-textbook.component.ts
  18. 7 3
      projects/textbook/src/modules/nav-province-contact/submitted/complete/complete.component.html
  19. 106 7
      projects/textbook/src/modules/nav-province-contact/submitted/complete/complete.component.ts
  20. 6 4
      projects/textbook/src/modules/nav-province-contact/submitted/export-list/export-list.component.html
  21. 33 8
      projects/textbook/src/modules/nav-province-contact/submitted/export-list/export-list.component.ts
  22. 2 2
      projects/textbook/src/modules/nav-province-contact/submitted/submitted.component.html
  23. 13 2
      projects/textbook/src/modules/nav-province-contact/submitted/submitted.component.ts
  24. 5 1
      server/db/schemas/EduProcess.js
  25. 1 1
      server/db/schemas/EduTextbook.js

+ 1 - 1
projects/textbook/src/app/textbook/textbook.component.html

@@ -17,7 +17,7 @@
     @if (filterObj?.btns?.verify && count != 0) {
     <div
       class="sbt"
-      (click)="toUrl('/nav-province-contact/manage/submitted/' + eduProcessId)"
+      (click)="toUrl('/nav-province-contact/manage/submitted/' + eduProcess?.id)"
     >
       提交推荐教材列表
     </div>

+ 1 - 1
projects/textbook/src/app/textbook/textbook.component.scss

@@ -17,7 +17,7 @@
     cursor: pointer;
   }
 }
-.activeTd:hover{
+.activeTd{
   color: #c6233f;
 }
 // 选中,批量操作区域

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

@@ -46,7 +46,7 @@ export class TextbookComponent implements OnInit {
   @Input('uid') uid: string = ''; //个人空间
   @Input('path') path: string = '/nav-admin/manage/textbook/details';
   @Input('discard') discard: Boolean = false; //是否删除
-  @Input('eduProcessId') eduProcessId: any = ''; //流程id,verify存在时需要
+  @Input('eduProcess') eduProcess?: Parse.Object; //流程id,verify存在时需要
 
   //相关权限配置
   @Input('filterObj') filterObj: any = {
@@ -209,7 +209,7 @@ export class TextbookComponent implements OnInit {
         query.containedIn(key, element.value);
       }
     }
-    this.eduProcessId && query.equalTo('eduProcess', this.eduProcessId);
+    this.eduProcess?.id && query.equalTo('eduProcess', this.eduProcess.id);
     this.depart && query.equalTo('department', this.depart);
     this.recommend && query.equalTo('recommend', true);
     this.filterObj?.noStared && query.notEqualTo('recommend', true);
@@ -384,6 +384,10 @@ export class TextbookComponent implements OnInit {
   }
   //加入/移除推荐
   updateStatus(data?: Parse.Object, recommend?: boolean) {
+    if(this.eduProcess?.get('status') != '200'){
+      this.message.warning('当前流程状态非遴选中,不可此操作')
+      return
+    }
     this.modal.confirm({
       nzTitle: `${recommend ? '加入' : '移除'}推荐`,
       nzContent: `确定${recommend ? '加入' : '移除'}推荐吗?`,
@@ -408,13 +412,15 @@ export class TextbookComponent implements OnInit {
           try {
             await Promise.all(deletePromiseList);
             this.getTextbook();
-            history.go();
           } catch (err) {}
         }
       },
       nzCancelText: '取消',
       nzOnCancel: () => console.log('Cancel'),
     });
+    if(this.filterObj?.btns?.verify){
+      history.go();
+    }
   }
   //提交教材
   async submit(data?: Parse.Object) {
@@ -428,8 +434,8 @@ export class TextbookComponent implements OnInit {
       return;
     }
     this.modal.confirm({
-      nzTitle: '提交教材',
-      nzContent: `提交后在已提交评审教材中查看`,
+      nzTitle: '确认提交教材',
+      nzContent: `提交后,教材将不可编辑,并从「我的教材」移至「已提交评审教材」。`,
       nzOkText: '确认',
       nzOkType: 'primary',
       nzOkDanger: false,
@@ -519,7 +525,7 @@ export class TextbookComponent implements OnInit {
           data.set('discard', null);
           data.set('code', null);
           await data.save();
-        } else {
+        } else { 
           let selectedList = this.textbookList.filter((item: any) =>
             this.setOfCheckedId.has(item?.id)
           );
@@ -548,7 +554,7 @@ export class TextbookComponent implements OnInit {
     query.lessThanOrEqualTo('startDate', new Date());
     query.greaterThan('deadline', new Date());
     query.notEqualTo('isDeleted', true);
-    query.notEqualTo('status', '100');
+    query.containedIn('status', ['200','300']);
     query.select('objectId');
     let res = await query.first();
     return res?.id;
@@ -577,7 +583,6 @@ export class TextbookComponent implements OnInit {
     }
     this.route.navigate([url]);
   }
-
   //导出
   async export() {
     let data: any = await this.getTextbook('', true);

+ 1 - 1
projects/textbook/src/modules/nav-admin/page-process/page-process.component.html

@@ -28,7 +28,7 @@
         [fieldsArray]="fieldsArray"
         [queryParams]="queryParams"
       ></comp-table-list> -->
-      <app-textbook [filterObj]="filterObj" [depart]="eduProcess?.get('department')?.id"></app-textbook>
+      <app-textbook [filterObj]="filterObj" [eduProcess]="eduProcess"></app-textbook>
       }
     </nz-tab>
   </nz-tabset>

+ 1 - 0
projects/textbook/src/modules/nav-admin/page-process/process-create/process-create.component.ts

@@ -202,6 +202,7 @@ export class ProcessCreateComponent implements OnInit {
         objectId: pid,
       });
     }
+    !this.eduProcess?.get('status') && this.eduProcess?.set('status', '200');
     this.eduProcess = await this.eduProcess?.save();
     this.msg.success(this.isEdit ? '已保存' : '已创建');
     this.showProfileFrom = false;

+ 1 - 1
projects/textbook/src/modules/nav-admin/page-process/process-list/process-list.component.scss

@@ -67,7 +67,7 @@
       .activeTd{
         cursor: pointer;
       }
-      .activeTd:hover{
+      .activeTd{
         color: #c6233f;
       }
     }

+ 28 - 5
projects/textbook/src/modules/nav-admin/page-process/process-list/process-list.component.ts

@@ -114,7 +114,7 @@ export class ProcessListComponent implements OnInit {
     if (
       e?.get('deadline') &&
       new Date() > new Date(e?.get('deadline')) &&
-      e?.get('status') == '200'
+      e?.get('status') == '400'
     ) {
       return {
         title: '已结束',
@@ -125,7 +125,7 @@ export class ProcessListComponent implements OnInit {
         del: true,
       };
     }
-    if (e?.get('status') == '200') {
+    if (e?.get('status') == '400') {
       return {
         title: '已完成',
         color: 'green',
@@ -146,7 +146,7 @@ export class ProcessListComponent implements OnInit {
       };
     }
     if (
-      !e.get('status') &&
+      e.get('status') == '200' &&
       e?.get('startDate') &&
       new Date() >= new Date(e?.get('startDate'))
     ) {
@@ -169,6 +169,16 @@ export class ProcessListComponent implements OnInit {
         del: true,
       };
     }
+    if (e.get('status') == '300') {
+      return {
+        title: '已公示',
+        color: 'red',
+        strat: false,
+        stop: true,
+        end: true,
+        del: false,
+      };
+    }
     return;
   };
   /* 新建组织 */
@@ -449,7 +459,7 @@ export class ProcessListComponent implements OnInit {
     switch (type) {
       case 'strat':
         if (data?.get('status') == '100') {
-          data?.set('status', null);
+          data?.set('status', '200');
         }
         if (!data?.get('startDate') || data?.get('startDate') > new Date()) {
           data?.set('startDate', new Date());
@@ -466,7 +476,7 @@ export class ProcessListComponent implements OnInit {
         data?.set('status', '100');
         break;
       case 'end':
-        data?.set('status', '200');
+        data?.set('status', '400');
         data?.set('deadline', new Date());
         break;
       case 'del':
@@ -482,6 +492,19 @@ export class ProcessListComponent implements OnInit {
   /* 批量预设(临时) */
   // async saveProcess() {
   //   let count = 0;
+  //   let query = new Parse.Query('EduProcess')
+  //   query.equalTo('status', null)
+  //   query.limit(2000);
+  //   query.exists('startDate')
+  //   let r = await query.find()
+  //   console.log(r);
+  //   for (let index = 0; index < r.length; index++) {
+  //     const element = r[index];
+  //     element.set('status', '200')
+  //     await element.save()
+  //     count++
+  //     console.log(count);
+  //   }
   //   let query = new Parse.Query('Department')
   //   query.equalTo('parent',null)
   //   query.equalTo('name','省级教育行政部门')

+ 1 - 1
projects/textbook/src/modules/nav-admin/page-role/page-role.component.scss

@@ -69,7 +69,7 @@
   .activeTd{
     cursor: pointer;
   }
-  .activeTd:hover{
+  .activeTd{
     color: #c6233f;
   }
 }

+ 1 - 1
projects/textbook/src/modules/nav-admin/page-user/page-user.component.scss

@@ -57,7 +57,7 @@
   .activeTd{
     cursor: pointer;
   }
-  .activeTd:hover{
+  .activeTd{
     color: #c6233f;
   }
 }

+ 1 - 1
projects/textbook/src/modules/nav-author/space/space.component.ts

@@ -31,7 +31,7 @@ export class SpaceComponent implements OnInit {
     }
   }
   submitTextBook = {
-    status:['200','400'],
+    status:['200','201','400'],
     btns:{
       review:true,//编辑
     }

+ 5 - 5
projects/textbook/src/modules/nav-province-contact/page-process/page-process.component.html

@@ -24,19 +24,19 @@
       }
     </nz-tab>
     <nz-tab nzTitle="教材列表">
-      @if (active == 1) {
+      @if (active == 1 && eduProcess) {
       <div class="title">待评审教材列表</div>
       <app-textbook
-        [depart]="eduProcess?.get('department')?.id"
         [filterObj]="beforeFilterObj"
-      ></app-textbook>
+        [eduProcess]="eduProcess"
+        ></app-textbook>
       <br />
       <div class="title">推荐教材列表</div>
       <app-textbook
         [filterObj]="afterFilterObj"
         [recommend]="true"
-        [depart]="eduProcess?.get('department')?.id"
-      ></app-textbook>
+        [eduProcess]="eduProcess"
+        ></app-textbook>
       }
     </nz-tab>
   </nz-tabset>

+ 2 - 2
projects/textbook/src/modules/nav-province-contact/page-process/page-process.component.ts

@@ -33,7 +33,7 @@ export class PageProcessComponent  implements OnInit {
     showMore: true, //显示更多字段
     isCheck: true,
     noStared:true,
-    status: ['200'],
+    status: ['200','201','400'],
     btns: {
       reject: true, //退回教材
       star: true, //移除推荐
@@ -44,7 +44,7 @@ export class PageProcessComponent  implements OnInit {
   afterFilterObj: any = {
     showMore: true, //显示更多字段
     isCheck: true,
-    status: ['200'],
+    status: ['200','201','400'],
     btns: {
       verify:true,
       remove: true, //移除推荐

+ 1 - 1
projects/textbook/src/modules/nav-province-contact/page-process/process-list/process-list.component.scss

@@ -67,7 +67,7 @@
       .activeTd{
         cursor: pointer;
       }
-      .activeTd:hover{
+      .activeTd{
         color: #c6233f;
       }
     }

+ 14 - 4
projects/textbook/src/modules/nav-province-contact/page-process/process-list/process-list.component.ts

@@ -110,7 +110,7 @@ export class ProcessListComponent implements OnInit {
     if (
       e?.get('deadline') &&
       new Date() > new Date(e?.get('deadline')) &&
-      e?.get('status') == '200'
+      e?.get('status') == '400'
     ) {
       return {
         title: '已结束',
@@ -121,7 +121,7 @@ export class ProcessListComponent implements OnInit {
         del: true,
       };
     }
-    if (e?.get('status') == '200') {
+    if (e?.get('status') == '400') {
       return {
         title: '已完成',
         color: 'green',
@@ -142,7 +142,7 @@ export class ProcessListComponent implements OnInit {
       };
     }
     if (
-      !e.get('status') &&
+      e.get('status') == '200' &&
       e?.get('startDate') &&
       new Date() >= new Date(e?.get('startDate'))
     ) {
@@ -165,6 +165,16 @@ export class ProcessListComponent implements OnInit {
         del: true,
       };
     }
+    if (e.get('status') == '300') {
+      return {
+        title: '已公示',
+        color: 'red',
+        strat: false,
+        stop: true,
+        end: true,
+        del: false,
+      };
+    }
     return;
   };
   constructor(
@@ -350,7 +360,7 @@ export class ProcessListComponent implements OnInit {
           data?.set('status', '100');
           break;
         case 'end':
-          data?.set('status', '200');
+          data?.set('status', '400');
           data?.set('deadline', new Date());
           break;
         case 'del':

+ 1 - 1
projects/textbook/src/modules/nav-province-contact/page-role/page-role.component.scss

@@ -69,7 +69,7 @@
   .activeTd{
     cursor: pointer;
   }
-  .activeTd:hover{
+  .activeTd{
     color: #c6233f;
   }
 }

+ 6 - 6
projects/textbook/src/modules/nav-province-contact/page-textbook/page-textbook.component.html

@@ -13,7 +13,7 @@
         *nzSpaceItem
         nz-button
         nzType="primary"
-        (click)="toUrl('/nav-province-contact/manage/submitted/' + processId)"
+        (click)="toUrl('/nav-province-contact/manage/submitted/' + process?.id)"
       >
       提交推荐教材列表
       </button>
@@ -34,20 +34,20 @@
 <div class="conetent">
   <nz-tabset [(nzSelectedIndex)]="active">
     <nz-tab nzTitle="待评审教材">
-      @if (!active) {
+      @if (!active && process) {
         <app-textbook
-        [depart]="this.tbookSer.profile.user.department?.objectId"
+        [eduProcess]="process"
         [filterObj]="beforeFilterObj"
       ></app-textbook>
       }
     </nz-tab>
     <nz-tab nzTitle="推荐教材">
-      @if (active) {
+      @if (active && process) {
         <app-textbook
         [filterObj]="afterFilterObj"
         [recommend]="true"
-        [depart]="this.tbookSer.profile.user.department?.objectId"
-      ></app-textbook>
+        [eduProcess]="process"
+        ></app-textbook>
       }
     </nz-tab>
   </nz-tabset>

+ 3 - 4
projects/textbook/src/modules/nav-province-contact/page-textbook/page-textbook.component.ts

@@ -57,13 +57,13 @@ export class PageTextbookComponent implements OnInit {
   afterFilterObj: any = {
     showMore: true, //显示更多字段
     isCheck: true,
-    status: ['200'],
+    status: ['200','201','400'],
     btns: {
       remove: true, //移除推荐
       export:true
     },
   };
-  processId?:string = ''
+  process?:Parse.Object
 
   constructor(
     public tbookSer: textbookServer,
@@ -97,9 +97,8 @@ export class PageTextbookComponent implements OnInit {
     query.greaterThan('deadline', new Date());
     query.notEqualTo('isDeleted', true);
     query.notEqualTo('status', '100');
-    query.select('objectId');
     let res = await query.first();
-    this.processId = res?.id;
+    this.process = res
   }
   toUrl(url: string, params?: object) {
     if (params) {

+ 7 - 3
projects/textbook/src/modules/nav-province-contact/submitted/complete/complete.component.html

@@ -1,11 +1,15 @@
 <div class="manage">
+  @if (!disabled) {
+    <nz-empty [nzNotFoundContent]="'公示已结束,点击【完成报送】,将推荐教材提交至上级'"></nz-empty>
+  }@else {
   <nz-empty [nzNotFoundContent]="deadline + '后可完成报送'"></nz-empty>
+  }
 </div>
 
 <div class="footer">
-  <div class="tips">共 36 册(套)推荐报送教材</div>
+  <div class="tips">共 {{count}} 册(套)推荐报送教材</div>
   <div class="btns">
-  <button nz-button disabled="true" nzType="default" style="margin-right: 20px">撤销公示</button>
-    <button nz-button nzType="primary" disabled="true">完成报送</button>
+  <button nz-button nzType="default" style="margin-right: 20px" (click)="revoke()">撤销公示</button>
+    <button nz-button nzType="primary" [disabled]="disabled" (click)="complete()">完成报送</button>
   </div>
 </div>

+ 106 - 7
projects/textbook/src/modules/nav-province-contact/submitted/complete/complete.component.ts

@@ -1,7 +1,9 @@
-import { Component, EventEmitter, OnInit, Output } from '@angular/core';
+import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
 import { Router, ActivatedRoute } from '@angular/router';
 import { CommonCompModule } from '../../../../services/common.modules';
 import { NzEmptyModule } from 'ng-zorro-antd/empty';
+import Parse from 'parse';
+import { NzModalService } from 'ng-zorro-antd/modal';
 @Component({
   selector: 'app-complete',
   templateUrl: './complete.component.html',
@@ -10,33 +12,130 @@ import { NzEmptyModule } from 'ng-zorro-antd/empty';
   standalone: true,
 })
 export class CompleteComponent implements OnInit {
-  date: Date = new Date('2024/7/31');
+  @Input('eduProcess') eduProcess?: Parse.Object;
+  count: number = 0;
+  date: Date = new Date();
   t: any;
   deadline: string = '';
+  disabled: boolean = true;
   time() {
     if (new Date().getTime() > this.date.getTime()) {
       clearTimeout(this.t);
+      this.disabled = false;
+      return
     }
     this.t = setTimeout(() => {
       let hs = this.date.getTime() - new Date().getTime();
-      let a = 60 * 60 * 1000
+      let a = 60 * 60 * 1000;
       let day: number = Math.floor(hs / (24 * a));
       let h = Math.floor((hs - day * (24 * a)) / a);
       let m = Math.floor((hs - day * (24 * a) - h * a) / (60 * 1000));
-      let s = Math.floor((hs - day * (24 * a) - h * a - (m * 60 * 1000))  / 1000);
+      let s = Math.floor((hs - day * (24 * a) - h * a - m * 60 * 1000) / 1000);
       this.deadline = day + '天' + h + '小时' + m + '分' + s + '秒';
-      this.time()
+      this.time();
     }, 1000);
   }
-  constructor(private router: Router, private activeRoute: ActivatedRoute) {}
+  constructor(
+    private modal: NzModalService,
+    private router: Router,
+    private activeRoute: ActivatedRoute
+  ) {}
 
   ngOnInit() {
+    this.date = new Date(
+      this.eduProcess?.get('releaseDate').getTime() + 1000 * 60 * 60 * 24
+    );
     this.time();
+    this.getEduTextbook();
+    if(this.eduProcess?.get('status') == '400'){
+      this.modal.confirm({
+        nzTitle: '流程已完成',
+        nzContent: `报送已提交,请退出该页面`,
+        nzOkText: '确认',
+        nzOkType: 'primary',
+        nzCancelText:null,
+        nzOkDanger: false,
+        nzOnOk: async () => {
+          history.back()
+        }
+      })
+    }
+  }
+  //报送
+  async getEduTextbook() {
+    let query = new Parse.Query('EduTextbook');
+    query.equalTo('eduProcess', this.eduProcess?.id);
+    query.notEqualTo('isDeleted', true);
+    query.notEqualTo('discard', true);
+    query.equalTo('render', true);
+    query.equalTo('recommend', true);
+    query.containedIn('status', ['200', '201']);
+    this.count = await query.count();
   }
-
   ngOnDestroy(): void {
     //Called once, before the instance is destroyed.
     //Add 'implements OnDestroy' to the class.
     clearTimeout(this.t);
   }
+
+  //完成报送
+  complete(){
+    this.modal.confirm({
+      nzTitle: '完成报送',
+      nzContent: `提交后,提交所有推荐教材且流程将结束不可再遴选教材`,
+      nzOkText: '确认',
+      nzOkType: 'primary',
+      nzOkDanger: false,
+      nzOnOk: async () => {
+        this.eduProcess?.set('status', '400');
+        await this.eduProcess?.save();
+        let query = new Parse.Query('EduTextbook');
+        query.equalTo('eduProcess', this.eduProcess?.id);
+        query.notEqualTo('isDeleted', true);
+        query.notEqualTo('discard', true);
+        query.equalTo('render', true);
+        query.equalTo('recommend', true);
+        query.containedIn('status', ['201']);
+        let list = await query.find();
+        for (let index = 0; index < list.length; index++) {
+          const item = list[index];
+          item.set('status', '400');
+          await item.save();
+        }
+        history.go(0)
+      },
+      nzCancelText: '取消',
+      nzOnCancel: () => console.log('Cancel'),
+    });
+  }
+  async revoke() {
+    this.modal.confirm({
+      nzTitle: '撤销公示',
+      nzContent: `提交后,教材将重新进入遴选中。`,
+      nzOkText: '确认',
+      nzOkType: 'primary',
+      nzOkDanger: false,
+      nzOnOk: async () => {
+        this.eduProcess?.set('status', '200');
+        this.eduProcess?.set('releaseDate', null);
+        await this.eduProcess?.save();
+        let query = new Parse.Query('EduTextbook');
+        query.equalTo('eduProcess', this.eduProcess?.id);
+        query.notEqualTo('isDeleted', true);
+        query.notEqualTo('discard', true);
+        query.equalTo('render', true);
+        query.equalTo('recommend', true);
+        query.containedIn('status', ['201']);
+        let list = await query.find();
+        for (let index = 0; index < list.length; index++) {
+          const item = list[index];
+          item.set('status', '200');
+          await item.save();
+        }
+        history.go(0)
+      },
+      nzCancelText: '取消',
+      nzOnCancel: () => console.log('Cancel'),
+    });
+  }
 }

+ 6 - 4
projects/textbook/src/modules/nav-province-contact/submitted/export-list/export-list.component.html

@@ -4,20 +4,22 @@
       eduProcess?.get("name")
     }}“十四五”普通高等教育本科国家级规划教材第一次遴选推荐名单
   </div>
-  <app-textbook
+  @if (eduProcess) {
+    <app-textbook
     #textbook
     [recommend]="true"
     [filterObj]="filterObj"
-    [depart]="eduProcess?.get('department')?.id"
+    [eduProcess]="eduProcess"
   ></app-textbook>
+  }
 </div>
 
 <div class="footer">
-  <div class="tips">共 36 册(套)推荐报送教材</div>
+  <div class="tips">共 {{textbook?.count}} 册(套)推荐报送教材</div>
   <div class="btns">
     <button
       nz-button
-      (click)="textbook.export()"
+      (click)="textbook?.export()"
       nzType="default"
       style="margin-right: 20px"
     >

+ 33 - 8
projects/textbook/src/modules/nav-province-contact/submitted/export-list/export-list.component.ts

@@ -1,4 +1,4 @@
-import { Component, EventEmitter, OnInit, Output } from '@angular/core';
+import { Component, EventEmitter, OnInit, Output, ViewChild,ElementRef, Input } from '@angular/core';
 import { Router, ActivatedRoute } from '@angular/router';
 import { TextbookComponent } from '../../../../app/textbook/textbook.component';
 import { CommonCompModule } from '../../../../services/common.modules';
@@ -12,9 +12,13 @@ import Parse from 'parse';
   standalone: true,
 })
 export class ExportListComponent implements OnInit {
+  
+  @ViewChild('textbook') textbook: ElementRef|any;
+  
   @Output() change: EventEmitter<any> = new EventEmitter<any>();
   textBookList: Parse.Object | any;
-  eduProcess?:Parse.Object
+  @Input('eduProcess')eduProcess?:Parse.Object
+
   filterObj: any = {
     isCheck: false,
     status:['200'],
@@ -24,18 +28,39 @@ export class ExportListComponent implements OnInit {
 
   ngOnInit() {
     this.activeRoute.paramMap.subscribe(async (params) => {
-      let id = params.get('id');
-      let query = new Parse.Query('EduProcess');
-      query.include('department');
-      query.equalTo('objectId', id);
-      this.eduProcess = await query.first();
+      // let id = params.get('id');
+      // let query = new Parse.Query('EduProcess');
+      // query.include('department');
+      // query.equalTo('objectId', id);
+      // this.eduProcess = await query.first();
     });
   }
-  onChange(type: string) {
+  async onChange(type: string) {
     if (type == 'next') {
+      await this.submitted()
       this.change.emit('next');
     } else {
       this.change.emit('pre');
     }
   }
+  //报送
+  async submitted(){
+    this.eduProcess?.set('status','300')
+    this.eduProcess?.set('releaseDate',new Date())
+    await this.eduProcess?.save()
+    let query = new Parse.Query('EduTextbook')
+    query.equalTo('eduProcess',this.eduProcess?.id)
+    query.notEqualTo('isDeleted',true)
+    query.notEqualTo('discard',true)
+    query.equalTo('render',true)
+    query.equalTo('recommend',true)
+    query.equalTo('status','200')
+    let list = await query.find()
+    for (let index = 0; index < list.length; index++) {
+      const item = list[index];
+      item.set('status','201')
+      await item.save()
+    }
+
+  }
 }

+ 2 - 2
projects/textbook/src/modules/nav-province-contact/submitted/submitted.component.html

@@ -28,7 +28,7 @@
   @switch (state) { @case (0) {
   <app-export-file (change)="onChange($event)"></app-export-file>
   } @case (1) {
-  <app-export-list (change)="onChange($event)"></app-export-list>
+  <app-export-list [eduProcess]="eduProcess" (change)="onChange($event)"></app-export-list>
 
-  } @case (2) { <app-complete></app-complete>} }
+  } @case (2) { <app-complete [eduProcess]="eduProcess"></app-complete>} }
 </div>

+ 13 - 2
projects/textbook/src/modules/nav-province-contact/submitted/submitted.component.ts

@@ -31,9 +31,20 @@ export class SubmittedComponent implements OnInit {
     };
     return map[this.state];
   }
-  constructor() {}
+  constructor(private router: Router, private activeRoute: ActivatedRoute) {}
 
-  ngOnInit() {}
+  ngOnInit() {
+    this.activeRoute.paramMap.subscribe(async (params) => {
+      let id = params.get('id');
+      let query = new Parse.Query('EduProcess');
+      query.include('department');
+      query.equalTo('objectId', id);
+      this.eduProcess = await query.first();
+      if(this.eduProcess?.get('status') == '300' || this.eduProcess?.get('status') == '400'){
+        this.state = 2
+      }
+    });
+  }
   back() {
     history.back();
   }

+ 5 - 1
server/db/schemas/EduProcess.js

@@ -45,10 +45,14 @@ export const EduProcess = {
       "type": "Date",
       "required": false
     },
-    "status": {//状态 100:暂停 200:已提交
+    "status": {//状态 100:暂停 200:已开始 300:已公示 400:已提交(完成)
       "type": "String",
       "required": false
     },
+    "releaseDate": {//公示时间
+      "type": "Date",
+      "required": false
+    },
   },
   "classLevelPermissions": {
     "find": {

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

@@ -2,7 +2,7 @@ export const EduTextbook = {
     "className": "EduTextbook",
     "fields": {
         "status": {
-            //状态 101:待完善资料 102:可提交状态 200:已提交遴选中 201:公示中 300:被打回 400:已通过
+            //状态 101:待完善资料 102:可提交状态 200:已提交遴选中 201:公示中 300:被打回 400:已报送
             "type": "String",
             "required": false
         },