Bläddra i källkod

update comp-user/login

warrior 8 månader sedan
förälder
incheckning
6cac5dd3f9
25 ändrade filer med 1027 tillägg och 185 borttagningar
  1. 2 3
      projects/textbook/src/app/comp-manage/comp-manage.component.html
  2. 20 3
      projects/textbook/src/app/comp-manage/comp-manage.component.ts
  3. 2 2
      projects/textbook/src/app/comp-nav/comp-nav.component.html
  4. 3 0
      projects/textbook/src/app/comp-nav/comp-nav.component.scss
  5. 31 3
      projects/textbook/src/app/comp-user/comp-user.component.html
  6. 7 2
      projects/textbook/src/app/comp-user/comp-user.component.scss
  7. 145 63
      projects/textbook/src/modules/login/login/login.component.html
  8. 21 5
      projects/textbook/src/modules/login/login/login.component.scss
  9. 3 0
      projects/textbook/src/modules/login/login/login.component.ts
  10. 3 3
      projects/textbook/src/modules/nav-author/components/attachment/attachment.component.html
  11. 4 0
      projects/textbook/src/modules/nav-author/components/attachment/attachment.component.ts
  12. 3 3
      projects/textbook/src/modules/nav-author/components/basic-in/basic-in.component.html
  13. 5 5
      projects/textbook/src/modules/nav-author/components/basic-in/basic-in.component.ts
  14. 2 2
      projects/textbook/src/modules/nav-author/components/textbook-content/textbook-content.component.html
  15. 10 11
      projects/textbook/src/modules/nav-author/components/textbook-pertain/textbook-pertain.component.html
  16. 10 12
      projects/textbook/src/modules/nav-author/components/textbook-pertain/textbook-pertain.component.ts
  17. 2 1
      projects/textbook/src/modules/nav-author/modules.routes.ts
  18. 17 0
      projects/textbook/src/modules/nav-author/recycle/recycle.component.html
  19. 41 0
      projects/textbook/src/modules/nav-author/recycle/recycle.component.scss
  20. 24 0
      projects/textbook/src/modules/nav-author/recycle/recycle.component.spec.ts
  21. 30 0
      projects/textbook/src/modules/nav-author/recycle/recycle.component.ts
  22. 324 63
      projects/textbook/src/modules/nav-author/textbook-details/textbook-details.component.html
  23. 1 1
      projects/textbook/src/modules/nav-author/textbook-details/textbook-details.component.scss
  24. 146 2
      projects/textbook/src/modules/nav-author/textbook-details/textbook-details.component.ts
  25. 171 1
      server/db/schemas/EduTextbook.js

+ 2 - 3
projects/textbook/src/app/comp-manage/comp-manage.component.html

@@ -1,10 +1,9 @@
 <div class="page">
   <div class="content-left" [style.width]="isCollapsed ? '' : '248px'">
     <div class="btn-menu">
-      <button mat-icon-button (click)="toggleCollapsed()" aria-label="LogOut">
+      <button mat-icon-button (click)="toggleCollapsed()" aria-label="LogOut" style="margin-right: 4px;">
         <mat-icon
-          fontIcon="more"
-          [fontIcon]="isCollapsed ? 'menu-unfold' : 'menu-fold'"
+        svgIcon="menu"
         ></mat-icon>
       </button>
       {{ isCollapsed ? "" : "教材遴选系统" }}

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

@@ -1,8 +1,9 @@
 import { Component, OnInit} from '@angular/core';
 import { CompNavComponent } from '../comp-nav/comp-nav.component';
+import {DomSanitizer} from '@angular/platform-browser';
 import { RouterOutlet, Router } from '@angular/router';
 import { CommonCompModule } from '../../services/common.modules';
-import { MatIconModule } from '@angular/material/icon';
+import { MatIconRegistry, MatIconModule } from '@angular/material/icon';
 import { textbookServer } from '../../services/textbook';
 @Component({
   selector: 'app-comp-manage',
@@ -12,6 +13,16 @@ import { textbookServer } from '../../services/textbook';
   styleUrls: ['./comp-manage.component.scss'],
 })
 export class CompManageComponent implements OnInit {
+  MENU_ICON:string = `<svg width="18" height="20" viewBox="0 0 18 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+  <path d="M18 2H4C3.46957 2 2.96086 2.21071 2.58579 2.58579C2.21071 2.96086 2 3.46957 2 4C2 4.53043 2.21071 5.03914 2.58579 5.41421C2.96086 5.78929 3.46957 6 4 6H18V19C18 19.2652 17.8946 19.5196 17.7071 19.7071C17.5196 19.8946 17.2652 20 17 20H4C2.93913 20 1.92172 19.5786 1.17157 18.8284C0.421427 18.0783 0 17.0609 0 16V4C0 2.93913 0.421427 1.92172 1.17157 1.17157C1.92172 0.421427 2.93913 0 4 0H17C17.2652 0 17.5196 0.105357 17.7071 0.292893C17.8946 0.48043 18 0.734783 18 1V2Z" fill="url(#paint0_linear_5_11023)"/>
+  <defs>
+  <linearGradient id="paint0_linear_5_11023" x1="9" y1="-2.21282e-07" x2="25.5" y2="40" gradientUnits="userSpaceOnUse">
+  <stop stop-color="#E04860"/>
+  <stop offset="1" stop-color="#E99306"/>
+  </linearGradient>
+  </defs>
+  </svg>
+  `
   optionsMap: any = {
     "navAdmin":[
       {
@@ -143,7 +154,7 @@ export class CompManageComponent implements OnInit {
       {
         name: '回收站',
         id: '2',
-        path: '/nav-author/manage/textbook',
+        path: '/nav-author/manage/recycle',
         params: {
           isDeleted: true,
         },
@@ -153,7 +164,13 @@ export class CompManageComponent implements OnInit {
   active: string = localStorage.getItem('active') || '1';
   isCollapsed:boolean = false;
 
-  constructor(public router: Router,public textbook:textbookServer) {
+  constructor(
+    public router: Router,
+    public textbook:textbookServer,
+    iconRegistry: MatIconRegistry, 
+    sanitizer: DomSanitizer
+  ) {
+    iconRegistry.addSvgIconLiteral('menu', sanitizer.bypassSecurityTrustHtml(this.MENU_ICON));
    }
 
   ngOnInit() {

+ 2 - 2
projects/textbook/src/app/comp-nav/comp-nav.component.html

@@ -28,10 +28,10 @@
           nz-button
           nzType="link"
           (click)="clickMe()"
-          style="margin-bottom: 6px"
+          style="margin-bottom: 6px;color:#3e49b3;"
           >我的</a
         >
-        <a nz-button nzType="link" (click)="authServr.logout()">退出登录</a>
+        <a nz-button nzType="link" style="color:#3e49b3" (click)="authServr.logout()">退出登录</a>
       </div>
     </ng-template>
   </div>

+ 3 - 0
projects/textbook/src/app/comp-nav/comp-nav.component.scss

@@ -29,3 +29,6 @@
     flex-shrink: 0;
   }
 }
+::ng-deep .ant-popover-title{
+  min-width: 100px;
+}

+ 31 - 3
projects/textbook/src/app/comp-user/comp-user.component.html

@@ -1,8 +1,36 @@
 <div class="page">
   <div class="login-content">
-    <div class="title">本科国家级规划教材遴选报送系统</div>
+    <div class="title">
+      <div>
+        <svg
+          width="24"
+          height="27"
+          viewBox="0 0 18 20"
+          fill="none"
+          xmlns="http://www.w3.org/2000/svg"
+        >
+          <path
+            d="M18 2H4C3.46957 2 2.96086 2.21071 2.58579 2.58579C2.21071 2.96086 2 3.46957 2 4C2 4.53043 2.21071 5.03914 2.58579 5.41421C2.96086 5.78929 3.46957 6 4 6H18V19C18 19.2652 17.8946 19.5196 17.7071 19.7071C17.5196 19.8946 17.2652 20 17 20H4C2.93913 20 1.92172 19.5786 1.17157 18.8284C0.421427 18.0783 0 17.0609 0 16V4C0 2.93913 0.421427 1.92172 1.17157 1.17157C1.92172 0.421427 2.93913 0 4 0H17C17.2652 0 17.5196 0.105357 17.7071 0.292893C17.8946 0.48043 18 0.734783 18 1V2Z"
+            fill="url(#paint0_linear_5_11023)"
+          />
+          <defs>
+            <linearGradient
+              id="paint0_linear_5_11023"
+              x1="9"
+              y1="-2.21282e-07"
+              x2="25.5"
+              y2="40"
+              gradientUnits="userSpaceOnUse"
+            >
+              <stop stop-color="#E04860" />
+              <stop offset="1" stop-color="#E99306" />
+            </linearGradient>
+          </defs>
+        </svg>
+      </div>
+
+      登录教材遴选管理系统
+    </div>
     <router-outlet></router-outlet>
   </div>
 </div>
-
-

+ 7 - 2
projects/textbook/src/app/comp-user/comp-user.component.scss

@@ -12,15 +12,20 @@
 }
 .title{
   font-size: 1.5rem !important;
+  text-align: left;
 }
 .login-content{
   position: absolute;
   transform:translateY(-50%);
   top: 50%;
   right: 100px;
-  padding: 10px;
+  padding:10px 50px;
   text-align: center;
   max-width: 500px;
+  min-width: 460px;
+  min-height: 536px;
   margin: 0 auto;
-  background: #f5f5f5;
+  background: #fff;
+  border-radius: 8px;
+  overflow: hidden;
 }

+ 145 - 63
projects/textbook/src/modules/login/login/login.component.html

@@ -1,5 +1,5 @@
 <div class="region">
-  <div class="selector">
+  <!-- <div class="selector">
     @for (item of selector; track $index) {
     <div
       class="option"
@@ -10,69 +10,151 @@
       {{ item.name }}
     </div>
     }
-  </div>
+  </div> -->
   <div class="form">
-    <div class="title">{{ currentProfile.name }}</div>
-    <form
-      nz-form
-      [formGroup]="validateForm"
-      class="login-form"
-      (ngSubmit)="submitForm()"
-    >
-      <nz-form-item style="margin-bottom: 16px;">
-        <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="user">用户名</nz-form-label>
-        <nz-form-control>
-          <nz-input-group>
-            <input
-              type="text"
-              nz-input
-              formControlName="userName"
-              placeholder="请输入用户名"
-            />
-          </nz-input-group>
-        </nz-form-control>
-      </nz-form-item>
-      <nz-form-item style="margin-bottom: 16px;">
-        <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="password">密码</nz-form-label>
-        <nz-form-control>
-          <nz-input-group>
-            <input
-              type="password"
-              nz-input
-              formControlName="password"
-              placeholder="请输入密码"
-            />
-          </nz-input-group>
-        </nz-form-control>
-      </nz-form-item>
-      <nz-form-item style="margin-bottom: 16px;">
-        <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="code">验证码</nz-form-label>
-        <nz-form-control>
-          <nz-input-group>
-            <input
-              type="text"
-              nz-input
-              formControlName="code"
-              placeholder="请输入验证码"
-            />
-          </nz-input-group>
-        </nz-form-control>
-      </nz-form-item>
-      <div nz-row class="login-form-margin">
-        <div nz-col [nzSpan]="12">
-          <a class="login-form-left" (click)="goUrl('/user/register')">立即注册</a>
-        </div>
-        <div nz-col [nzSpan]="12">
-          <a class="login-form-forgot" (click)="goUrl('/user/reset_password')">忘记密码</a>
-        </div>
-      </div>
-      <button
-        nz-button
-        class="login-form-button"
-        [nzType]="'primary'"
+    <nz-tabset>
+      <nz-tab nzTitle="密码登录">
+        <form
+          nz-form
+          [formGroup]="validateForm"
+          class="login-form"
+          (ngSubmit)="submitForm()"
+        >
+          <nz-form-item style="margin-bottom: 16px">
+            <!-- <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="user"
+              >用户名</nz-form-label
+            > -->
+            <nz-form-control>
+              <nz-input-group nzPrefixIcon="user">
+                <input
+                  type="text"
+                  nz-input
+                  formControlName="userName"
+                  placeholder="请输入用户名"
+                />
+              </nz-input-group>
+            </nz-form-control>
+          </nz-form-item>
+          <nz-form-item style="margin-bottom: 16px">
+            <!-- <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="password"
+              >密码</nz-form-label
+            > -->
+            <nz-form-control>
+              <nz-input-group nzPrefixIcon="lock">
+                <input
+                  type="password"
+                  nz-input
+                  formControlName="password"
+                  placeholder="请输入密码"
+                />
+              </nz-input-group>
+            </nz-form-control>
+          </nz-form-item>
+          <nz-form-item style="margin-bottom: 16px">
+            <!-- <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="code"
+              >验证码</nz-form-label
+            > -->
+            <nz-form-control>
+              <nz-input-group nzPrefixIcon="safety-certificate">
+                <input
+                  type="text"
+                  nz-input
+                  formControlName="code"
+                  placeholder="请输入验证码"
+                />
+              </nz-input-group>
+            </nz-form-control>
+          </nz-form-item>
+          <!-- <div nz-row class="login-form-margin">
+            <div nz-col [nzSpan]="12">
+              <a class="login-form-left" (click)="goUrl('/user/register')"
+                >立即注册</a
+              >
+            </div>
+            <div nz-col [nzSpan]="12">
+              <a
+                class="login-form-forgot"
+                (click)="goUrl('/user/reset_password')"
+                >忘记密码</a
+              >
+            </div>
+          </div> -->
+          <button nz-button class="login-form-button" [nzType]="'primary'">
+            登录
+          </button>
+        </form>
+      </nz-tab>
+      <nz-tab nzTitle="验证码登录"> 
+        <form
+        nz-form
+        [formGroup]="validateForm"
+        class="login-form"
+        (ngSubmit)="submitForm()"
       >
-        登录
-      </button>
-    </form>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="user"
+            >用户名</nz-form-label
+          >
+          <nz-form-control>
+            <nz-input-group>
+              <input
+                type="text"
+                nz-input
+                formControlName="userName"
+                placeholder="请输入用户名"
+              />
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="password"
+            >密码</nz-form-label
+          >
+          <nz-form-control>
+            <nz-input-group>
+              <input
+                type="password"
+                nz-input
+                formControlName="password"
+                placeholder="请输入密码"
+              />
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="code"
+            >验证码</nz-form-label
+          >
+          <nz-form-control>
+            <nz-input-group>
+              <input
+                type="text"
+                nz-input
+                formControlName="code"
+                placeholder="请输入验证码"
+              />
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
+        <div nz-row class="login-form-margin">
+          <div nz-col [nzSpan]="12">
+            <a class="login-form-left" (click)="goUrl('/user/register')"
+              >立即注册</a
+            >
+          </div>
+          <div nz-col [nzSpan]="12">
+            <a
+              class="login-form-forgot"
+              (click)="goUrl('/user/reset_password')"
+              >忘记密码</a
+            >
+          </div>
+        </div>
+        <button nz-button class="login-form-button" [nzType]="'primary'">
+          登录
+        </button>
+      </form>
+      </nz-tab>
+    </nz-tabset>
   </div>
 </div>

+ 21 - 5
projects/textbook/src/modules/login/login/login.component.scss

@@ -1,9 +1,10 @@
 .region {
-  width: 450px;
+  // width: 360px;
   margin: 20px auto 50px;
   display: flex;
   justify-content: center;
-  background-color: white;
+  // background-color: white;
+  // border-radius: 10px;
   .selector {
     font-size: 14px;
     width: 150px;
@@ -23,9 +24,12 @@
     }
   }
   .form {
-    width: 300px;
-    padding: 10px;
-    box-shadow: rgba(100, 100, 111, 0.2) 0px 7px 29px 0px;
+    width: 360px;
+    // padding: 10px;
+    // box-shadow: rgba(100, 100, 111, 0.2) 0px 7px 29px 0px;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
     .title{
       text-align: left;
       margin-bottom: 6px;
@@ -50,3 +54,15 @@
     }
   }
 }
+::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;
+}

+ 3 - 0
projects/textbook/src/modules/login/login/login.component.ts

@@ -10,6 +10,8 @@ import {
 import { CommonCompModule } from '../common.modules';
 import { textbookServer } from '../../../services/textbook';
 import { AuthServr } from '../../../services/auth.service';
+import Parse from "parse";
+
 @Component({
   selector: 'app-login',
   standalone: true,
@@ -68,6 +70,7 @@ export class LoginComponent {
     public router: Router,
     private authServr: AuthServr
   ) {
+    Parse?.User?.logOut()
   }
   submitForm(): void {
     if (this.validateForm.valid) {

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

@@ -202,7 +202,7 @@
           style="width: 100%"
         >
           <nz-upload
-            formControlName="textbookFiles"
+            formControlName="selfResults"
             nzAction="https://www.mocky.io/v2/5cc8019d300000980a055e76"
             [nzHeaders]="{ authorization: 'authorization-text' }"
             (nzChange)="handleChange($event)"
@@ -463,7 +463,7 @@
           style="width: 450px"
         >
           <nz-upload
-            formControlName="textbookFiles"
+            formControlName="unitMaterial"
             nzAction="https://www.mocky.io/v2/5cc8019d300000980a055e76"
             [nzHeaders]="{ authorization: 'authorization-text' }"
             (nzChange)="handleChange($event)"
@@ -497,5 +497,5 @@
   >
     上一步
   </button>
-  <button nz-button nzType="primary" (click)="submitForm('complete')">完成</button>
+  <button nz-button nzType="primary" style="background: #3e49b3; border: 1px #3e49b3" (click)="submitForm('complete')">完成</button>
 </div>

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

@@ -48,10 +48,14 @@ export class AttachmentComponent implements OnInit {
     textbookTypes: FormControl<Array<string> | any>; //教材电子版
     textbookFiles: FormControl<Array<string> | any>; //上传教材文件
     links: FormControl<string>; //教材数字内容链接地址、账号
+    selfResults:FormControl<object|any>, //图书编校质量自查结果记录表
+    unitMaterial:FormControl<object|any>, //申报单位承诺意见材料
   }> = this.fb.group({
     textbookTypes: ['', [Validators.required]],
     textbookFiles: ['', [Validators.required]],
     links: ['', [Validators.required]],
+    selfResults: ['', [Validators.required]],
+    unitMaterial: ['', [Validators.required]],
   });
   checkOptionsOne = [
     { label: '纸质教材', value: '纸质教材' },

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

@@ -14,7 +14,7 @@
           <input
             type="text"
             nz-input
-            formControlName="name"
+            formControlName="title"
             placeholder="请输入申报教材名称"
           />
         </nz-input-group>
@@ -233,7 +233,7 @@
           <input
             type="text"
             nz-input
-            formControlName="edition"
+            formControlName="editionUnit"
             placeholder="请输入出版单位"
           />
         </nz-input-group>
@@ -440,7 +440,7 @@
   >
     保存本页
   </button>
-  <button nz-button nzType="primary" (click)="submitForm('next')">
+  <button nz-button nzType="primary" style="background: #3e49b3; border: 1px #3e49b3" (click)="submitForm('next')">
     下一页
   </button>
 </div>

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

@@ -34,7 +34,7 @@ export class BasicInComponent implements OnInit {
   @Output() save: EventEmitter<any> = new EventEmitter<any>();
 
   validateForm: FormGroup<{
-    name: FormControl<string>; //申报教材名称
+    title: FormControl<string>; //申报教材名称
     ISBN: FormControl<string>; //国际标准书号
     author: FormControl<string>; //第一主编(作者)
     unit: FormControl<string>; //第一主编(作者)单位
@@ -46,8 +46,8 @@ export class BasicInComponent implements OnInit {
     authors: FormControl<string>; //其他主编姓名
     editor: FormControl<string>; //其他编者姓名
 
-    approval: FormControl<string>; //是否重点立项教材
-    edition: FormControl<string>; //出版单位
+    approval: FormControl<string>; //是否重点立项教材
+    editionUnit: FormControl<string>; //出版单位
     editionFirst: FormControl<Date>; //初版时间
     carrierShape: FormControl<string>; //载体形式
 
@@ -66,7 +66,7 @@ export class BasicInComponent implements OnInit {
 
     // remember: FormControl<boolean>;
   }> = this.fb.group({
-    name: ['', [Validators.required]],
+    title: ['', [Validators.required]],
     ISBN: ['', [Validators.required]],
     author: ['', [Validators.required]],
     unit: ['', [Validators.required]],
@@ -78,7 +78,7 @@ export class BasicInComponent implements OnInit {
     authors: ['', [Validators.required]],
     editor: ['', [Validators.required]],
     approval: ['', [Validators.required]],
-    edition: ['', [Validators.required]],
+    editionUnit: ['', [Validators.required]],
     editionFirst: [new Date(), [Validators.required]],
     carrierShape: ['', [Validators.required]],
     editionDate: [new Date(), [Validators.required]],

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

@@ -13,7 +13,7 @@
       >
         <thead>
           <tr>
-            <th nzWidth="80px" nzLeft nzAlign="right">序号</th>
+            <th nzWidth="80px" nzLeft nzAlign="right">版次</th>
             <th nzWidth="120px">出版时间</th>
             <th nzWidth="100px">字数</th>
             <th nzWidth="100px">重印次数</th>
@@ -170,7 +170,7 @@
   >
     上一页
   </button>
-  <button nz-button nzType="primary" (click)="submitForm('next')">
+  <button nz-button style="background: #3e49b3; border: 1px #3e49b3" nzType="primary" (click)="submitForm('next')">
     下一页
   </button>
 </div>

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

@@ -10,11 +10,11 @@
         <div nz-col nzSpan="12">
           <nz-form-item class="row" style="margin-bottom: 16px">
             <nz-form-label class="label" [nzNoColon]="true" [nzSm]="10" [nzXs]="10" nzRequired
-              >适用专业代码(六位)及名称</nz-form-label
+              >适用专业代码(六位)及名称</nz-form-label
             >
             <nz-form-control
               class="val"
-              nzErrorTip="填写适用专业代码(六位)及名称"
+              nzErrorTip="适用专业代码(六位)及名称"
               style="width: 100%"
             >
               <nz-select
@@ -22,7 +22,7 @@
                 nzShowSearch
                 nzAllowClear
                 nzPlaceHolder="填写 6 位专业代码选择"
-                formControlName="code"
+                formControlName="major"
                 (ngModelChange)="changeCode()"
                 (nzOnSearch)="getCode($event)"
               >
@@ -102,7 +102,7 @@
       <div class="title">作者(含主编,不超过 6 人,教材中明确出现姓名)</div>
       <nz-table
         #basicTable
-        [nzData]="dataArr"
+        [nzData]="authorList"
         [nzScroll]="{ x: (maxWidth || '1200') + 'px' }"
       >
         <thead>
@@ -121,7 +121,7 @@
           </tr>
         </thead>
         <tbody>
-          @for (data of dataArr; track data.mobile;let index = $index) {
+          @for (data of authorList; track data.mobile;let index = $index) {
           <tr>
             <td nzLeft nzAlign="right">{{ index + 1 }}</td>
             <td nzLeft>
@@ -212,7 +212,7 @@
               </nz-select>
             </td>
             <td nzRight>
-              <a (click)="onPush('dataArr', index)"
+              <a (click)="onPush('authorList', index)"
                 ><span
                   nz-icon
                   style="font-size: 20px; margin-right: 10px"
@@ -220,7 +220,7 @@
                   nzTheme="outline"
                 ></span
               ></a>
-              <a (click)="onDel('dataArr',index)"
+              <a (click)="onDel('authorList',index)"
                 ><span
                   nz-icon
                   style="font-size: 20px"
@@ -235,10 +235,9 @@
       </nz-table>
     </div>
     <div class="author-content">
-      <div class="nav">作者信息</div>
+      <div class="nav">第一主编(作者)情况</div>
       <nz-form-item class="row" style="margin-bottom: 16px">
-        <div class="title">作者信息</div>
-
+        <div class="title">相关教学经历</div>
         <nz-form-control
           class="val"
           nzErrorTip="请输入第一主编(作者)承担学校教学任务、开展教学研究情况、教材编写情况以及取得的教学成果"
@@ -340,7 +339,7 @@
   >
     上一页
   </button>
-  <button nz-button nzType="primary" (click)="submitForm('next')">
+  <button nz-button nzType="primary" style="background: #3e49b3; border: 1px #3e49b3" (click)="submitForm('next')">
     下一页
   </button>
 </div>

+ 10 - 12
projects/textbook/src/modules/nav-author/components/textbook-pertain/textbook-pertain.component.ts

@@ -51,22 +51,20 @@ export class TextbookPertainComponent implements OnInit {
   @Output() state: EventEmitter<any> = new EventEmitter<any>();
   @Output() save: EventEmitter<any> = new EventEmitter<any>();
   validateForm: FormGroup<{
-    code: FormControl<string>; //适用专业代码及名称
+    major: FormControl<string>; //适用专业代码及名称
     period: FormControl<number | any>; //课程学时
     lessons: FormControl<string>; //适用课程
     characteristic: FormControl<Array<any> | any>; //适用课程性质
     // authors: FormControl<Array<any> | any>; //作者信息
-    authorDetails: FormControl<string>; //第一主编(作者)情况
-    type: FormControl<string>; //申报类型
+    authorDetails: FormControl<string>; //第一主编(作者)相关教学经历
     // achievement: FormControl<Array<any> | any>; //相关科学研究项目、成果或论文专著(限5项)
   }> = this.fb.group({
-    code: ['', [Validators.required]],
+    major: ['', [Validators.required]],
     period: ['', [Validators.required]],
     lessons: ['', [Validators.required]],
     characteristic: ['', [Validators.required]],
     // authors: ['', [Validators.required]],
     authorDetails: ['', [Validators.required]],
-    type: ['', [Validators.required]],
     // achievement: ['', [Validators.required]],
   });
   //适用专业代码及名称
@@ -104,7 +102,7 @@ export class TextbookPertainComponent implements OnInit {
   //   { label: '实验课', value: '实验课' },
   // ];
   //作者信息
-  dataArr: Array<author> = [
+  authorList: Array<author> = [
     {
       name: '',
       unit: '',
@@ -165,8 +163,8 @@ export class TextbookPertainComponent implements OnInit {
   //添加作者信息
   onPush(type: string, idx: number) {
     switch (type) {
-      case 'dataArr':
-        this.dataArr.splice(idx+1, 0, {
+      case 'authorList':
+        this.authorList.splice(idx+1, 0, {
           name: '',
           unit: '',
           birth: '',
@@ -194,9 +192,9 @@ export class TextbookPertainComponent implements OnInit {
   //删除作者信息
   onDel(type: string, idx: number) {
     switch (type) {
-      case 'dataArr':
-        if (this.dataArr.length == 1) {
-          this.dataArr = [
+      case 'authorList':
+        if (this.authorList.length == 1) {
+          this.authorList = [
             {
               name: '',
               unit: '',
@@ -211,7 +209,7 @@ export class TextbookPertainComponent implements OnInit {
           ];
           return;
         }
-        this.dataArr.splice(idx, 1);
+        this.authorList.splice(idx, 1);
         break;
       case 'achievementOptions':
         if (this.achievementOptions.length == 1) {

+ 2 - 1
projects/textbook/src/modules/nav-author/modules.routes.ts

@@ -5,6 +5,7 @@ import { ApplyComponent } from './apply/apply.component';
 // import { ProfileComponent } from '../user/profile/profile.component';
 import { SpaceComponent } from './space/space.component'
 import { TextbookDetailsComponent } from './textbook-details/textbook-details.component'
+import { RecycleComponent } from './recycle/recycle.component'
 const routes: Routes = [
   {
     path: '',
@@ -32,7 +33,7 @@ const routes: Routes = [
       // },
       {
         path: 'recycle',//回收站
-        component: PageTextbookComponent,
+        component: RecycleComponent,
       },
     ],
   },

+ 17 - 0
projects/textbook/src/modules/nav-author/recycle/recycle.component.html

@@ -0,0 +1,17 @@
+<div class="space-page">
+  <div class="space-head">
+    <div class="content">
+      <div class="title">
+        回收站
+      </div>
+      <div class="text">
+        在此查看已删除教材,将需要重新编辑的教材恢复至个人空间
+      </div>
+    </div>
+    <div class="btn">
+    </div>
+  </div>
+  <div class="space-content">
+    <app-page-textbook></app-page-textbook>
+  </div>
+</div>

+ 41 - 0
projects/textbook/src/modules/nav-author/recycle/recycle.component.scss

@@ -0,0 +1,41 @@
+.space-page {
+  padding: 20px;
+  font-family: PingFang SC;
+  .space-head {
+    display: flex;
+    justify-content: space-between;
+    .content {
+      .title {
+        //styleName: 字体/标题-大-Medium;
+        font-family: PingFang SC;
+        font-size: 24px;
+        font-weight: 500;
+        line-height: 38px;
+        text-align: left;
+      }
+      .text {
+        font-family: PingFang SC;
+        font-size: 14px;
+        font-weight: 400;
+        line-height: 22px;
+        text-align: left;
+        color: #231C1F99;
+      }
+    }
+  }
+  .space-content{
+    margin: 20px 0;
+  }
+}
+::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;
+}

+ 24 - 0
projects/textbook/src/modules/nav-author/recycle/recycle.component.spec.ts

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

+ 30 - 0
projects/textbook/src/modules/nav-author/recycle/recycle.component.ts

@@ -0,0 +1,30 @@
+import { Component, OnInit } from '@angular/core';
+import { CommonCompModule } from '../../../services/common.modules';
+import { Router } from '@angular/router';
+import * as Parse from 'parse';
+import { PageTextbookComponent } from '../components/page-textbook/page-textbook.component';
+
+@Component({
+  selector: 'app-recycle',
+  standalone: true,
+  imports: [CommonCompModule,PageTextbookComponent],
+  templateUrl: './recycle.component.html',
+  styleUrls: ['./recycle.component.scss'],
+})
+export class RecycleComponent  implements OnInit {
+
+  user: Parse.Object = Parse.User.current()!;
+
+  constructor(private router: Router) {}
+
+  ngOnInit() {}
+
+  goUrl(url:string,params?:object|any){
+    console.log(url);
+    if(params){
+      this.router.navigate([url,params])
+    }else{
+      this.router.navigate([url])
+    }
+  }
+}

+ 324 - 63
projects/textbook/src/modules/nav-author/textbook-details/textbook-details.component.html

@@ -1,6 +1,6 @@
 <div class="site-page-header">
   <nz-page-header
-    nzTitle="教材详情 - 通信技术原理"
+    nzTitle="教材详情 - {{textBook.type}}"
     nzSubtitle=""
     style="padding: 0"
   >
@@ -13,118 +13,123 @@
 </div>
 <div class="content">
   <div nz-row>
-    <div nz-col nzSpan="16" #scroll>
-      <div class="templ1" #templ1>
+    <div nz-col nzSpan="18" #scroll>
+      <div class="templ1" #templ1 style="width: 500px; height: 700px">
         <div class="title">教材基本信息</div>
         <div class="base-content">
           <div class="row">
             <div class="label">申报教材名称</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.title}}</div>
           </div>
           <div class="row">
             <div class="label">第一主编(作者)</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.author}}</div>
           </div>
           <div class="row">
             <div class="label">第一主编(作者)单位</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.unit}}</div>
           </div>
           <div class="row">
             <div class="label">申报类型</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.type}}</div>
           </div>
           <div class="row">
             <div class="label">教材应用对象及所属学科专业类</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.majorPoniter}}</div>
           </div>
           <div class="row">
             <div class="label">教材主要语种类型</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.lang}}</div>
           </div>
           <div class="row">
             <div class="label">国际标准书号</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.ISBN}}</div>
           </div>
           <div class="row">
             <div class="label">其他主编姓名</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.authors}}</div>
           </div>
           <div class="row">
             <div class="label">其他编者姓名</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.editor}}</div>
           </div>
           <div class="row">
             <div class="label">是否为重点立项教材</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.approval}}</div>
           </div>
           <div class="row">
             <div class="label">出版单位</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.editionUnit}}</div>
           </div>
           <div class="row">
             <div class="label">初版时间</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.editionFirst | date :'yyyy-MM'}}</div>
           </div>
           <div class="row">
             <div class="label">载体形式</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.carrierShape}}</div>
           </div>
           <div class="row">
             <div class="label">本版出版时间及版次</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.editionDate | date :'yyyy-MM'}}/{{textBook.editionNumber}}</div>
           </div>
           <div class="row">
             <div class="label">最新印次时间及印次</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.printDate | date :'yyyy-MM'}}/{{textBook.printNumber}}</div>
           </div>
           <div class="row">
             <div class="label">初版以来合计印数</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.printSum}}</div>
           </div>
           <div class="row">
             <div class="label">初版以来是否曾列为重点项目</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.importantProject}}</div>
           </div>
           <div class="row">
             <div class="label">版权页截图</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.copyrightImgUrl}}</div>
           </div>
           <div class="row">
             <div class="label">中国版本图书馆 CIP 查询截图</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.CIPImgUrl}}</div>
           </div>
         </div>
       </div>
-      <div class="templ" #templ1>
+      <div class="templ">
         <div class="title">教材适用情况</div>
         <div class="base-content">
           <div class="row">
             <div class="label">适用专业代码(六位)及名称</div>
-            <div class="value">000416 / 通信工程</div>
+            <div class="value">{{textBook.major.code}}/{{textBook.major.name}}</div>
           </div>
           <div class="row">
             <div class="label">适用课程</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.lessons}}</div>
           </div>
           <div class="row">
             <div class="label">课程学时</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.period}}</div>
           </div>
           <div class="row">
             <div class="label">适用课程性质</div>
-            <div class="value">通信技术原理</div>
+            <div class="value">{{textBook.characteristic}}</div>
           </div>
         </div>
       </div>
-      <div class="templ" #templ1>
+      <div class="templ">
         <div class="title">教材适用情况</div>
-        <div class="text mar10">作者(含主编,不超过 6 人,教材中明确出现姓名)</div>
+        <div class="text mar10">
+          作者(含主编,不超过 6 人,教材中明确出现姓名)
+        </div>
         <div class="base-content">
           <nz-table
             #basicTable
             [nzShowPagination]="false"
             [nzData]="textBook.authorList"
-            [nzScroll]="{ x: (templ1.style.width || '1000') + 'px', y: '240px' }"
+            [nzScroll]="{
+              x: (templ1.style.width || '1000') + 'px',
+              y: '240px'
+            }"
           >
             <thead>
               <tr>
@@ -179,57 +184,313 @@
         <div class="text mar10">第一主编(作者)情况</div>
         <div class="base-content">
           <div class="text-tips">相关教学经历</div>
-          <div class="note">在接受调查的19为华尔街分析师中,看涨和看平下周金价走势的各有8人,占比42%,看空金价的有三人,占比16%。与此同时,在接受网上调查的369名普通投资者中,有221人(60%)预计下周金价将上涨,有95人(26%)料走软,53人(14%)持中立态度。这些投资者预计金价将在下周末前重新测试1980美元左右的阻力位。</div>
+          <div class="note">
+            {{ textBook.authorDetails }}
+          </div>
           <div class="text-tips">相关科学研究项目、成果或论文专著(限5项)</div>
           <nz-table
             #basicTable
             [nzShowPagination]="false"
             [nzData]="textBook.achievementOptions"
-            [nzScroll]="{ x: (templ1.style.width || '1000') + 'px', y: '240px' }"
+            [nzScroll]="{
+              x: (templ1.style.width || '1000') + 'px',
+              y: '240px'
+            }"
+          >
+            <thead>
+              <tr>
+                <th nzWidth="80px" nzLeft nzAlign="right">序号</th>
+                <th nzWidth="160px" nzLeft>名称</th>
+                <th nzWidth="160px">来源/出版单位</th>
+                <th nzWidth="80px">时间</th>
+              </tr>
+            </thead>
+            <tbody>
+              @for (data of textBook.achievementOptions; track data.name;let
+              index = $index) {
+              <tr>
+                <td nzLeft nzAlign="right">{{ index + 1 }}</td>
+                <td nzLeft>
+                  {{ data.name }}
+                </td>
+                <td>
+                  {{ data.unit }}
+                </td>
+                <td>
+                  {{ data.date | date : "yyyy-MM" }}
+                </td>
+              </tr>
+              }
+            </tbody>
+          </nz-table>
+        </div>
+      </div>
+      <div class="templ">
+        <div class="title">申报教材建设历程</div>
+        <div class="base-content">
+          <nz-table
+            #basicTable
+            [nzShowPagination]="false"
+            [nzData]="textBook.courses"
+            [nzScroll]="{
+              x: (templ1.style.width || '1000') + 'px',
+              y: '240px'
+            }"
+          >
+            <thead>
+              <tr>
+                <th nzWidth="80px" nzLeft nzAlign="right">版次</th>
+                <th nzWidth="120px">出版时间</th>
+                <th nzWidth="100px">字数</th>
+                <th nzWidth="100px">重印次数</th>
+                <th nzWidth="100px">本版总印数</th>
+                <th nzWidth="200px">获奖励情况</th>
+              </tr>
+            </thead>
+            <tbody>
+              @for (data of textBook.courses; track data;let index = $index) {
+              <tr>
+                <td nzLeft nzAlign="right">{{ index + 1 }}</td>
+                <td>
+                  {{ data.date | date : "yyyy-MM" }}
+                </td>
+                <td>
+                  {{ data.wordage }}
+                </td>
+                <td>
+                  {{ data.num }}
+                </td>
+                <td>
+                  {{ data.sumNum }}
+                </td>
+                <td>
+                  {{ data.accolade }}
+                </td>
+              </tr>
+              }
+            </tbody>
+          </nz-table>
+        </div>
+      </div>
+      <div class="templ">
+        <div class="title">申报教材特色及创新</div>
+        <div class="base-content">
+          <div class="note">
+            {{ textBook.innovateExplain }}
+          </div>
+        </div>
+      </div>
+      <div class="templ">
+        <div class="title">申报教材应用情况及社会影响力</div>
+        <div class="base-content">
+          <div class="note">
+            {{ textBook.influence }}
+          </div>
+        </div>
+      </div>
+      <div class="templ">
+        <div class="title">附件材料</div>
+        <div class="base-content">
+          <div class="row">
+            <div class="label">教材电子版</div>
+            <div class="value">
+              @for (item of textBook.textbookFiles; track item.name) {
+              <a style="margin-right: 10px" [href]="item.url">{{
+                item.name
+              }}</a>
+              }
+            </div>
+          </div>
+          <div class="row">
+            <div class="label">教材数字内容链接地址、账号</div>
+            <div class="value">
+              @for (item of textBook.links; track item) {
+              <li>{{ item }}</li>
+              }
+            </div>
+          </div>
+          <div class="text-tips">所有作者政治审查意见</div>
+          <nz-table
+            #basicTable
+            [nzShowPagination]="false"
+            [nzData]="textBook.opinions"
+            [nzScroll]="{
+              x: (templ1.style.width || '1000') + 'px',
+              y: '240px'
+            }"
+          >
+            <thead>
+              <tr>
+                <th nzWidth="80px" nzLeft nzAlign="right">序号</th>
+                <th nzWidth="100px">作者</th>
+                <th nzWidth="100px">单位</th>
+                <th nzWidth="100px">出生年月</th>
+                <th nzWidth="100px">国籍</th>
+                <th nzWidth="100px" nzRight>作者政治审查表</th>
+              </tr>
+            </thead>
+            <tbody>
+              @for (data of textBook.opinions; track data.name;let index =
+              $index) {
+              <tr>
+                <td nzLeft nzAlign="right">{{ index + 1 }}</td>
+                <td>
+                  {{ data.name }}
+                </td>
+                <td>
+                  {{ data.unit }}
+                </td>
+                <td>
+                  {{ data.birth | date : "yyyy-MM" }}
+                </td>
+                <td>
+                  {{ data.nationality }}
+                </td>
+                <td nzRight>
+                  <a [href]="data.reviewFile.url">{{ data.reviewFile.name }}</a>
+                </td>
+              </tr>
+              }
+            </tbody>
+          </nz-table>
+          <div class="row" style="margin-top: 10px">
+            <div class="label">图书编校质量自查结果记录表</div>
+            <div class="value">
+              <a [href]="textBook.selfResults.url">{{
+                textBook.selfResults.name
+              }}</a>
+            </div>
+          </div>
+          <div class="row">
+            <div class="label">专家审核意见表</div>
+            <div class="value">
+              <a [href]="textBook.expertOpinion.url">{{
+                textBook.expertOpinion.name
+              }}</a>
+            </div>
+          </div>
+          <div class="row">
+            <div class="label">教材使用情况证明材料</div>
+            <div class="value">
+              <a [href]="textBook.evidence.url">{{ textBook.evidence.name }}</a>
+            </div>
+          </div>
+          <div class="row">
+            <div class="label">其他材料</div>
+            <div class="value">
+              @for (item of textBook.moreMaterial; track item.name) {
+              <a style="margin-right: 10px" [href]="item.url">{{
+                item.name
+              }}</a>
+              }
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="templ">
+        <div class="title">教材作者诚信承诺</div>
+        <div class="base-content">
+          <nz-table
+            #basicTable
+            [nzShowPagination]="false"
+            [nzData]="textBook.authorSign"
+            [nzScroll]="{
+              x: (templ1.style.width || '1000') + 'px',
+              y: '240px'
+            }"
           >
-          <thead>
-            <tr>
-              <th nzWidth="80px" nzLeft nzAlign="right">序号</th>
-              <th nzWidth="160px" nzLeft>名称</th>
-              <th nzWidth="160px">来源/出版单位</th>
-              <th nzWidth="80px">时间</th>
-            </tr>
-          </thead>
-          <tbody>
-            @for (data of textBook.achievementOptions; track data.name;let index = $index) {
-            <tr>
-              <td nzLeft nzAlign="right">{{ index + 1 }}</td>
-              <td nzLeft>
-                {{data.name}}
-              </td>
-              <td>
-                {{data.unit}}
-              </td>
-              <td>
-                {{ data.date | date : "yyyy-MM" }}
-              </td>
-            </tr>
-            }
-          </tbody>
+            <thead>
+              <tr>
+                <th nzWidth="80px" nzLeft nzAlign="right">序号</th>
+                <th nzWidth="100px">作者</th>
+                <th nzWidth="100px">单位</th>
+                <th nzWidth="100px">出生年月</th>
+                <th nzWidth="100px">国籍</th>
+                <th nzWidth="100px" nzRight>作者签名</th>
+              </tr>
+            </thead>
+            <tbody>
+              @for (data of textBook.authorSign; track data.name;let index =
+              $index) {
+              <tr>
+                <td nzLeft nzAlign="right">{{ index + 1 }}</td>
+                <td>
+                  {{ data.name }}
+                </td>
+                <td>
+                  {{ data.unit }}
+                </td>
+                <td>
+                  {{ data.birth | date : "yyyy-MM" }}
+                </td>
+                <td>
+                  {{ data.nationality }}
+                </td>
+                <td nzRight>
+                  <a [href]="data.reviewFile.url">{{ data.reviewFile.name }}</a>
+                </td>
+              </tr>
+              }
+            </tbody>
           </nz-table>
         </div>
       </div>
+      <div class="templ">
+        <div class="title">申报单位承诺意见</div>
+        <div class="base-content">
+          <div class="row">
+            <div class="label">申报单位承诺意见材料</div>
+            <div class="value">
+              <a style="margin-right: 10px" [href]="textBook.unitMaterial.url">{{textBook.unitMaterial.name}}</a>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="templ">
+        <div class="title">初评推荐意见</div>
+        <div class="base-content">
+          <div class="row">
+            <div class="label">省级教育行政部门初评专家组意见</div>
+            <div class="value">
+              <span style="color:#231C1F99">暂未填写</span>
+            </div>
+          </div>
+          <div class="row">
+            <div class="label">省级教育行政部门意见</div>
+            <div class="value">
+              <span style="color:#231C1F99">暂无</span>
+            </div>
+          </div>
+        </div>
+      </div>
     </div>
-    <div nz-col nzSpan="8">
+
+    <div nz-col nzSpan="6">
       <nz-anchor
-        [nzAffix]
+        style="position: fixed"
         (nzClick)="handleClick($event)"
         [nzShowInkInFixed]="true"
+        [nzShowInkInFixed]="true"
       >
-        <nz-link nzHref="#base" nzTitle="教材基本信息"></nz-link>
+        <nz-link nzHref="#templ1" nzTitle="教材基本信息"></nz-link>
         <nz-link
           nzHref="#components-anchor-demo-static"
-          nzTitle="Static demo"
+          nzTitle="教材适用情况"
         ></nz-link>
-        <nz-link nzHref="#api" nzTitle="API">
-          <nz-link nzHref="#nz-anchor" nzTitle="nz-anchor"></nz-link>
-          <nz-link nzHref="#nz-link" nzTitle="nz-link"></nz-link>
+        <nz-link nzHref="#api" nzTitle="作者信息">
+          <nz-link nzHref="#nz-anchor" nzTitle="作者"></nz-link>
+          <nz-link nzHref="#nz-link" nzTitle="第一主编(作者)情况"></nz-link>
         </nz-link>
+        <nz-link nzHref="#base" nzTitle="申报教材建设历程"></nz-link>
+        <nz-link nzHref="#base" nzTitle="申报教材特色及创新"></nz-link>
+        <nz-link
+          nzHref="#base"
+          nzTitle="申报教材应用情况及社会影响力"
+        ></nz-link>
+        <nz-link nzHref="#base" nzTitle="附件材料清单"></nz-link>
+        <nz-link nzHref="#base" nzTitle="教材作者诚信承诺"></nz-link>
+        <nz-link nzHref="#base" nzTitle="申报单位承诺意见"></nz-link>
+        <nz-link nzHref="#base" nzTitle="初评推荐意见"></nz-link>
       </nz-anchor>
     </div>
   </div>

+ 1 - 1
projects/textbook/src/modules/nav-author/textbook-details/textbook-details.component.scss

@@ -44,7 +44,7 @@
       display: flex;
       margin-bottom: 14px;
       .label {
-        width: 200px;
+        width: 220px;
         font-family: PingFang SC;
         font-size: 14px;
         font-weight: 400;

+ 146 - 2
projects/textbook/src/modules/nav-author/textbook-details/textbook-details.component.ts

@@ -1,4 +1,12 @@
-import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+import {
+  Component,
+  OnInit,
+  Input,
+  Output,
+  EventEmitter,
+  ViewChild,
+  ElementRef,
+} from '@angular/core';
 import { CommonCompModule } from '../../../services/common.modules';
 import { Router } from '@angular/router';
 import { ReactiveFormsModule } from '@angular/forms';
@@ -8,6 +16,7 @@ import { TextbookContentComponent } from '../components/textbook-content/textboo
 import { AttachmentComponent } from '../components/attachment/attachment.component';
 import { NzAnchorModule } from 'ng-zorro-antd/anchor';
 import { DatePipe } from '@angular/common';
+
 interface author {
   name: string;
   unit: string;
@@ -37,7 +46,48 @@ interface author {
   providers: [DatePipe],
 })
 export class TextbookDetailsComponent implements OnInit {
+  @ViewChild('templ1') templ1: any;
+
   textBook: object | any = {
+    title: '', //申报教材名称
+    ISBN: '', //国际标准书号
+    author: '', //第一主编(作者)
+    unit: '', //第一主编(作者)单位
+    type: '', //申报类型
+    typeNumber: '', //全册次数
+
+    majorPoniter: '', //教材应用对象及所诉学科专业类
+    lang: '', //教材主要语种类型
+    authors: '', //其他主编姓名
+    editor: '', //其他编者姓名
+
+    approval: '', //是否为重点立项教材
+    editionUnit: '', //出版单位
+    editionFirst: '', //初版时间
+    carrierShape: '', //载体形式
+
+    editionDate: '', //出版时间
+    editionNumber: '', //出版版次
+    printDate: '', //最新印次时间
+    printNumber: '', //最新印次
+
+    printSum: '', //初版以来合计印次
+
+    importantProject: '', //初版以来是否列为重点项目
+    importantProjectOther: '', //其他省部级及以上项目
+
+    copyrightImgUrl: '', //版权页截图
+    CIPImgUrl: '', //中国版本图书馆CIP查询截图
+    major:{ //适用专业代码(六位)及名称
+      code:'000416',
+      name:'通信工程'
+    },
+    lessons:[],
+    characteristic:[],
+    period:1,
+
+    authorDetails:
+      '从事英语教学和外事管理二十年,教学经验丰富,系“双师型”教师,主持和参与多项省部级科研课题,连续多年担任全国导游资格面试中英文考官,2015 年和 2016 年担任全国职业院校技能大赛英文导游裁判长;2020 年入选“中国东盟双百职校强强合作旗舰计划”专家和来华留学生高等教育质量认证(高职院校类)技术专家库;2021 年湖北省教育厅推荐入选教育部鲁班工坊建设联盟专家库首批专家。组织申报学校荣获世界职教院校联盟卓越奖(2016 年铜奖、2018 年银奖、2020 年金奖)。',
     authorList: [
       {
         name: '曹春海',
@@ -51,13 +101,105 @@ export class TextbookDetailsComponent implements OnInit {
         work: '主编',
       },
     ],
-    achievementOptions: [//相关科学研究项目、成果或论文专著(限5项)
+    achievementOptions: [
+      //相关科学研究项目、成果或论文专著(限5项)
       {
         name: '双语教育对人脑杏仁核发育影响研究',
         unit: '二十一世纪出版社',
         date: new Date('2000-1-1'),
       },
     ],
+    courses: [
+      //申报教材建设历程
+      {
+        date: new Date('2000-1-1'), //出版时间
+        wordage: 569, //字数
+        num: 2, //重印次数
+        sumNum: 3, //本版总印数
+        accolade: '国家高等教材特等奖', //获奖励情况
+      },
+    ],
+    //申报教材特色及创新
+    innovateExplain:
+      '本教材最大的特色是教材内容编写延用情景启发模式,表现形式上融情景、体验、拓展、互动于一体,打造生动、立体课堂,提高学生学习兴趣及主动性。',
+    //申报教材应用情况及社会影响力
+    influence:
+      '指导教学更有章法、更可复制。本教材系“十四五”职业教育江苏省规划教材、“十三五”江苏省高等学校重点教材、高等院校人文素质教育重点教材、精品工程项目教材,内容丰富、取材合适、系统性强,在促进学生成长成才、科学指导就业创业等方面有着成熟而广泛的应用前景,目前已推广到南通中等专业学校、聊城苏通技工学校等省内外多所职业院校,均得到师生的一致好评',
+    textbookFiles: [
+      //附件教材
+      {
+        name: '汉语版.pdf',
+        url: 'https://www.jyvtc.edu.cn/yssj/resource/cms/2022/01/2022010610314324023.pdf',
+      },
+      {
+        name: '维语版.pdf',
+        url: 'https://www.jyvtc.edu.cn/yssj/resource/cms/2022/01/2022010610314324023.pdf',
+      },
+    ],
+    links: [
+      //数字内容链接地址、账号
+      'https://www.hep.com.cn/book/show/0519241c-ed3a-4bdf-9c79-2eedc51fbe21 账号:xxxxxx 密码:xxxxxx',
+      'https://www.hepmall.com/index.php/gallery-index-.html?scontent=%E7%B3%BB%E7%BB%9F%E5%88%86%E6%9E%90%E4%B8%8E%E8%AE%BE%E8%AE%A',
+    ],
+    opinions: [
+      //所有作者政治审查意见
+      {
+        name: '曹春海', //作者
+        unit: '外语教育出版社', //单位
+        birth: new Date(), //出生年月
+        nationality: '中华人民共和国', //国籍
+        reviewFile: {
+          //作者政治审查表
+          name: '维语版.pdf',
+          url: 'https://www.jyvtc.edu.cn/yssj/resource/cms/2022/01/2022010610314324023.pdf',
+        },
+      },
+    ],
+    selfResults: {
+      //图书编校质量自查结果记录表
+      name: '自查表.pdf',
+      url: 'https://www.jyvtc.edu.cn/yssj/resource/cms/2022/01/2022010610314324023.pdf',
+    },
+    //专家审核意见表
+    expertOpinion:{
+      name: '意见表.pdf',
+      url: 'https://www.jyvtc.edu.cn/yssj/resource/cms/2022/01/2022010610314324023.pdf',
+    },
+    //教材使用情况证明材料
+    evidence:{
+      name: '材料.pdf',
+      url: 'https://www.jyvtc.edu.cn/yssj/resource/cms/2022/01/2022010610314324023.pdf',
+    },
+    //其他材料
+    moreMaterial:[
+      {
+        name: '材料1.pdf',
+        url: 'https://www.jyvtc.edu.cn/yssj/resource/cms/2022/01/2022010610314324023.pdf',
+      },
+      {
+        name: '材料2.pdf',
+        url: 'https://www.jyvtc.edu.cn/yssj/resource/cms/2022/01/2022010610314324023.pdf',
+      },
+    ],
+    //所有作者签名&教材作者诚信承诺
+    authorSign:[
+      {
+        name: '曹春海', //作者
+        unit: '外语教育出版社', //单位
+        birth: new Date(), //出生年月
+        nationality: '中华人民共和国', //国籍
+        reviewFile: {
+          //作者政治审查表/作者签名
+          name: '曹春海签名.pdf',
+          url: 'https://www.jyvtc.edu.cn/yssj/resource/cms/2022/01/2022010610314324023.pdf',
+        },
+      },
+    ],
+    //申报单位承诺意见材料
+    unitMaterial:{
+      name: '承诺意见表.pdf',
+      url: 'https://www.jyvtc.edu.cn/yssj/resource/cms/2022/01/2022010610314324023.pdf',
+    },
   };
   constructor() {}
 
@@ -65,6 +207,8 @@ export class TextbookDetailsComponent implements OnInit {
 
   handleClick(e: string): void {
     console.log(e);
+    // let dom:any = [e]
+    // dom.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'start' });
   }
   back() {
     history.back();

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

@@ -1,14 +1,184 @@
 const EduTextbook = {
     "className": "EduTextbook",
     "fields": {
+        "status": {
+            "type": "String",
+            "required": false
+        },
+        "user": {
+            "type": "Pointer",
+            "targetClass":"_User",
+            "required": false
+        },
+
         "title": {
             "type": "String",
             "required": false
         },
-        "desc": {
+        "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": "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": "Object",
+            "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
+        },
         "user": {
             "type": "Pointer",
             "targetClass":"_User",