Explorar el Código

update 高校管理员

warrior hace 7 meses
padre
commit
6f0563c623

BIN
projects/textbook/public/img/book-3.png


+ 13 - 13
projects/textbook/src/app/comp-manage/comp-manage.component.ts

@@ -111,30 +111,30 @@ export class CompManageComponent implements OnInit {
       },
     ],
     "高校联系人":[
-      // {
-      //   id:'1',
-      //   name:'教材申报',
-      //   child:[
-      //     {
-      //       id:'1-1',
-      //       name:'全部教材',
-      //       path:'/nav-province-school-contact/manage/textbook',
-      //     }
-      //   ]
-      // },
       {
         id:'1',
-        name:'用户管理',
+        name:'教材申报',
         child:[
           {
             id:'1-1',
+            name:'全部教材',
+            path:'/nav-province-school-contact/manage/textbook',
+          }
+        ]
+      },
+      {
+        id:'2',
+        name:'用户管理',
+        child:[
+          {
+            id:'2-1',
             name:'用户列表',
             path:'/nav-province-school-contact/manage/user',
           },
           {
             name:'申报单位管理',
             path:"/nav-province-school-contact/manage/role",
-            id:'1-2',
+            id:'2-2',
           },
         ]
       },

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

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

+ 47 - 17
projects/textbook/src/app/textbook/textbook.component.ts

@@ -50,10 +50,11 @@ export class TextbookComponent implements OnInit {
 
   //相关权限配置
   @Input('filterObj') filterObj: any = {
+    status: [],
     showMore: false, //显示更多字段
     isCheck: true,
     noStared: false, //非推荐
-    status: [],
+    team:false, //只获取当前部门或下级部门所属用户提交的教材
     btns: {
       edit: false, //编辑
       isDelete: false, //删除权限
@@ -71,7 +72,7 @@ export class TextbookComponent implements OnInit {
     lang: {
       listOfFilter: [
         { value: '中文', text: '中文' },
-        { value: '英语', text: '英语' },
+        { value: '英文', text: '英文' },
         { value: '其他外国语', text: '其他外国语' },
         { value: '中国少数名族语言', text: '中国少数名族语言' },
       ],
@@ -185,28 +186,57 @@ export class TextbookComponent implements OnInit {
   }
   async getTextbook(val?: string, exported?: boolean): Promise<any[] | void> {
     this.loading = true;
-    let query = new Parse.Query('EduTextbook');
-    if (val) {
-      let query1 = Parse.Query.fromJSON('EduTextbook', {
-        where: {
-          $or: [
-            {
-              title: { $regex: `.*${val}.*` },
-            },
-          ],
-        },
-      });
-      let query2 = Parse.Query.fromJSON('EduTextbook', {
+    // let query = new Parse.Query('EduTextbook');
+    // if (val) {
+    let query1 = Parse.Query.fromJSON('EduTextbook', {
+      where: {
+        $or: [
+          {
+            title: { $regex: `.*${val || ''}.*` },
+          },
+          {
+            ISBN: { $regex: `.*${val || ''}.*` },
+          },
+          {
+            author: { $regex: `.*${val || ''}.*` },
+          },
+        ],
+      },
+    });
+    // let query2 = Parse.Query.fromJSON('EduTextbook', {
+    //   where: {
+    //     $or: [
+    //       {
+    //         ISBN: { $regex: `.*${val || ''}.*` },
+    //       },
+    //     ],
+    //   },
+    // });
+    let query = Parse.Query.or(query1);
+    if(this.filterObj.team){
+      let childrens = await this.tbookSer.getChild(this.tbookSer.profile.user.department?.objectId)
+      let query3 = Parse.Query.fromJSON('EduTextbook', {
         where: {
           $or: [
             {
-              ISBN: { $regex: `.*${val}.*` },
+              user: {
+                $inQuery: {
+                  where: {
+                    'department':{$in: [childrens],}
+                  },
+                  className: '_User',
+                },
+              },
             },
           ],
         },
-      });
-      query = Parse.Query.or(query1, query2);
+      })
+      query = Parse.Query.and(
+        query3,
+        Parse.Query.or(query1)
+      )
     }
+    // }
     // this.uid && query.equalTo('user',this.tbookSer.profile.user?.objectId);
     for (const key in this.filters) {
       const element = this.filters[key];

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

@@ -13,7 +13,7 @@
         *nzSpaceItem
         nz-button
         nzType="primary"
-        (click)="submitted()"
+        (click)="toUrl('/nav-province-contact/manage/submitted/'+ this.eduProcess?.id)"
       >
       提交推荐教材列表
       </button>

+ 31 - 5
projects/textbook/src/modules/nav-province-contact/submitted/complete/complete.component.html

@@ -1,15 +1,41 @@
 <div class="manage">
-  @if (!disabled) {
-    <nz-empty [nzNotFoundContent]="'公示已结束,点击【完成报送】,将推荐教材提交至上级'"></nz-empty>
+  @if (eduProcess?.get('status') == '400') {
+  <nz-empty
+    [nzNotFoundContent]="'已完成报送'"
+    nzNotFoundImage="/img/book-3.png"
+  ></nz-empty>
   }@else {
-  <nz-empty [nzNotFoundContent]="deadline + '后可完成报送'"></nz-empty>
+  <nz-empty
+    nzNotFoundImage="/img/book-3.png"
+    [nzNotFoundContent]="
+      '推荐教材列表已锁定,点击【完成报送】,将推荐教材提交至上级'
+    "
+  ></nz-empty>
+  <div style="display: flex; justify-content: center">
+    <button
+      nz-button
+      nzType="default"
+      style="margin-right: 20px"
+      (click)="revoke()"
+    >
+      撤销公示
+    </button>
+    <button
+      nz-button
+      nzType="primary"
+      [disabled]="disabled"
+      (click)="complete()"
+    >
+      完成报送
+    </button>
+  </div>
   }
 </div>
 
-<div class="footer">
+<!-- <div class="footer">
   <div class="tips">共 {{count}} 册(套)推荐报送教材</div>
   <div class="btns">
   <button nz-button nzType="default" style="margin-right: 20px" (click)="revoke()">撤销公示</button>
     <button nz-button nzType="primary" [disabled]="disabled" (click)="complete()">完成报送</button>
   </div>
-</div>
+</div> -->

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

@@ -17,7 +17,7 @@ export class CompleteComponent implements OnInit {
   date: Date = new Date();
   t: any;
   deadline: string = '';
-  disabled: boolean = true;
+  disabled: boolean = false;
   time() {
     if (new Date().getTime() > this.date.getTime()) {
       clearTimeout(this.t);
@@ -42,15 +42,15 @@ export class CompleteComponent implements OnInit {
   ) {}
 
   ngOnInit() {
-    this.date = new Date(
-      this.eduProcess?.get('releaseDate').getTime() + 1000 * 60 * 60 * 24
-    );
-    this.time();
+    // 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: `报送已提交,请退出该页面`,
+        nzContent: `报送已提交,请退出当前页`,
         nzOkText: '确认',
         nzOkType: 'primary',
         nzCancelText:null,

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

@@ -1,4 +1,4 @@
-<div class="comple">
+<!-- <div class="comple">
   <div class="title">提交成功</div>
   <div class="onload" (click)="textbook?.export()">
     下载推荐汇总表
@@ -12,8 +12,8 @@
   [filterObj]="filterObj"
   [eduProcess]="eduProcess"
 ></app-textbook>
-}
-<!-- <div class="manage">
+} -->
+<div class="manage">
   <div class="left">
     <div class="row">
       <div class="lable">推荐教材</div>
@@ -38,12 +38,12 @@
         生成 PDF 并下载
       </button>
   </div>
-</div> -->
+</div>
 
-<!-- <div class="footer">
+<div class="footer">
   <button nz-button nzType="default" (click)="close()" style="margin-right: 20px">取消</button>
   <button nz-button nzType="primary" (click)="next()" style="background: #3e49b3; border: 1px #3e49b3">下一步</button>
-</div> -->
+</div>
 
 <div class="loading" [hidden]="!showLoading">
   <nz-spin nzSimple [nzSize]="'large'"></nz-spin>

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

@@ -23,7 +23,7 @@
       nzType="default"
       style="margin-right: 20px"
     >
-      下载公示列
+    下载推荐汇总
     </button>
     <button
       nz-button

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

@@ -15,25 +15,25 @@
       </div>
     </nz-page-header-title>
   </nz-page-header>
-  <!-- <div class="steps">
+  <div class="steps">
     <nz-steps [nzCurrent]="state">
       <nz-step nzTitle="导出推荐汇总表" nzDescription=""></nz-step>
       <nz-step nzTitle="导出公示教材列表" nzDescription=""></nz-step>
       <nz-step nzTitle="完成报送" nzDescription=""></nz-step>
     </nz-steps>
-  </div> -->
+  </div>
 </div>
 
 <div class="content">
-  @if (eduProcess?.id) {
+  <!-- @if (eduProcess?.id) {
     <app-export-file [eduProcess]="eduProcess"></app-export-file>
-  }
-  <!-- @switch (state) { @case (0) {
+  } -->
+  @switch (state) { @case (0) {
   <app-export-file (change)="onChange($event)"></app-export-file>
   }
    @case (1) {
   <app-export-list [eduProcess]="eduProcess" (change)="onChange($event)"></app-export-list>
 
   } @case (2) { <app-complete [eduProcess]="eduProcess"></app-complete>} 
-  } -->
+  }
 </div>

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

@@ -5,11 +5,11 @@ import { UserEditComponent } from "../nav-admin/user-edit/user-edit.component";
 import { RecycleComponent } from "../nav-author/recycle/recycle.component";
 import { SpaceComponent } from "../nav-author/space/space.component";
 import { PageRoleComponent } from "../nav-province-contact/page-role/page-role.component";
-import { PageTextbookComponent } from "../nav-province-contact/page-textbook/page-textbook.component";
+import { PageTextbookComponent } from "./page-textbook/page-textbook.component";
 const routes: Routes = [
   {
     path: '',
-    redirectTo:'manage/user',
+    redirectTo:'manage/textbook',
     pathMatch: "full",
   },
   {

+ 47 - 0
projects/textbook/src/modules/nav-province-school-contact/page-textbook/page-textbook.component.html

@@ -0,0 +1,47 @@
+<nz-page-header>
+  <nz-page-header-title
+    >全部教材
+    <br />
+    <div class="subtitle">查看全部申报流程所提交的教材推荐表</div>
+  </nz-page-header-title>
+  <!-- <nz-page-header-extra>
+    <nz-space>
+      <button
+        style="background: #3e49b3; border: 1px #3e49b3"
+        *nzSpaceItem
+        nz-button
+        nzType="primary"
+        (click)="toUrl('/nav-province-contact/manage/submitted/'+ this.eduProcess?.id)"
+      >
+      提交推荐教材列表
+      </button>
+    </nz-space>
+  </nz-page-header-extra> -->
+</nz-page-header>
+<div class="conetent">
+  <!-- <nz-tabset [(nzSelectedIndex)]="active">
+    <nz-tab nzTitle="待评审教材">
+      @if (!active && eduProcess) {
+        <app-textbook
+        [eduProcess]="eduProcess"
+        [filterObj]="beforeFilterObj"
+      ></app-textbook>
+      }
+    </nz-tab>
+    <nz-tab nzTitle="推荐教材">
+      @if (active && eduProcess) {
+        <app-textbook
+        [filterObj]="afterFilterObj"
+        [recommend]="true"
+        [eduProcess]="eduProcess"
+        ></app-textbook>
+      }
+    </nz-tab>
+  </nz-tabset> -->
+  @if (eduProcess) {
+  <app-textbook
+    [eduProcess]="eduProcess"
+    [filterObj]="beforeFilterObj"
+  ></app-textbook>
+  }
+</div>

+ 29 - 0
projects/textbook/src/modules/nav-province-school-contact/page-textbook/page-textbook.component.scss

@@ -0,0 +1,29 @@
+.subtitle{
+  margin-right: 12px;
+  color: #00000073;
+  font-size: 14px;
+  font-weight: normal;
+  line-height: 1.5715;
+  // overflow: hidden;
+  // white-space: nowrap;
+  // text-overflow: ellipsis;
+}
+.conetent{
+  margin: 0 0 20px;
+  padding: 0 24px;
+}
+::ng-deep .ant-page-header-heading-title {
+  white-space: normal;
+}
+::ng-deep .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
+  color: #c6233f;
+}
+::ng-deep .ant-tabs-ink-bar {
+  background: #c6233f;
+}
+::ng-deep .ant-tabs-tab:hover {
+  color: #e97488;
+}
+::ng-deep .ant-tabs-tab-btn:active {
+  color: #e97488;
+}

+ 22 - 0
projects/textbook/src/modules/nav-province-school-contact/page-textbook/page-textbook.component.spec.ts

@@ -0,0 +1,22 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+
+import { PageTextbookComponent } from './page-textbook.component';
+
+describe('PageTextbookComponent', () => {
+  let component: PageTextbookComponent;
+  let fixture: ComponentFixture<PageTextbookComponent>;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      imports: [PageTextbookComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(PageTextbookComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  }));
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 94 - 0
projects/textbook/src/modules/nav-province-school-contact/page-textbook/page-textbook.component.ts

@@ -0,0 +1,94 @@
+import { Component, OnInit, ViewChild, Input } from '@angular/core';
+import { ActivatedRoute, RouterOutlet, Router } from '@angular/router';
+import { CompTableListComponent } from '../../../app/comp-table/comp-table-list/comp-table-list.component';
+import { NzPageHeaderModule } from 'ng-zorro-antd/page-header';
+import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb';
+import * as Parse from 'parse';
+import { CommonModule } from '@angular/common';
+import { textbookServer } from '../../../services/textbook';
+import { TextbookComponent } from '../../../app/textbook/textbook.component';
+import { NzSpaceModule } from 'ng-zorro-antd/space';
+import { CommonCompModule } from '../../../services/common.modules';
+import { NzTabsModule } from 'ng-zorro-antd/tabs';
+import { NzMessageService } from 'ng-zorro-antd/message';
+
+@Component({
+  selector: 'app-page-textbook',
+  templateUrl: './page-textbook.component.html',
+  styleUrls: ['./page-textbook.component.scss'],
+  imports: [
+    CommonModule,
+    RouterOutlet,
+    TextbookComponent,
+    CompTableListComponent,
+    NzPageHeaderModule,
+    CommonCompModule,
+    NzBreadCrumbModule,
+    NzSpaceModule,
+    NzTabsModule,
+  ],
+  standalone: true,
+})
+export class PageTextbookComponent implements OnInit {
+  @ViewChild(CompTableListComponent) list: CompTableListComponent | undefined;
+  @Input('discard') discard: boolean = false;
+  @Input('render') render: boolean = false;
+  active: number = 0;
+
+  user: Parse.User | undefined;
+
+  //待审核
+  beforeFilterObj: any = {
+    showMore: true, //显示更多字段
+    isCheck: true,
+    status: ['200','201','400'],
+    team:true,
+    btns: {
+      export:true
+    },
+  };
+  //已加入推荐
+  afterFilterObj: any = {
+    showMore: true, //显示更多字段
+    isCheck: true,
+    status: ['200','201','400'],
+    btns: {
+      export:true
+    },
+  };
+  eduProcess?:Parse.Object
+
+  constructor(
+    public tbookSer: textbookServer,
+    private message: NzMessageService,
+    private router: Router,
+    private activeRoute: ActivatedRoute // private translate:TranslateService,
+  ) {
+    this.user = Parse.User.current();
+  }
+
+  ngOnInit(): void {
+    this.getProcess()
+  }
+  async getProcess(){
+    let parentMap = await this.tbookSer.formatNode(
+      this.tbookSer?.profile?.user?.department?.objectId
+    );
+    if (!parentMap[1]?.key) return;
+    let query = new Parse.Query('EduProcess');
+    query.equalTo('department', parentMap[1]?.key);
+    // query.lessThanOrEqualTo('startDate', new Date());
+    // query.greaterThan('deadline', new Date());
+    query.notEqualTo('isDeleted', true);
+    // query.notEqualTo('status', '100');
+    let res = await query.first();
+    this.eduProcess = res
+  }
+  toUrl(url: string, params?: object) {
+    if (params) {
+      this.router.navigate([url, params]);
+    } else {
+      this.router.navigate([url]);
+    }
+  }
+}