Explorar el Código

updata:basic

xll hace 7 meses
padre
commit
5f6b17f5d5

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

@@ -9,46 +9,62 @@
       </nz-form-control>
     </nz-form-item>
     <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>国际标准书号(ISBN)</nz-form-label>
-      <nz-form-control nzErrorTip="请输入国际标准书号,仅可输入数字" [nzSm]="12" [nzXs]="12">
-        <nz-input-group nzSearch [nzAddOnAfter]="autoButton">
-          <input type="number" nz-input formControlName="ISBN" placeholder="请输入国际标准书号,仅可输入数字" />
-        </nz-input-group>
-        <ng-template #autoButton>
-          <button (click)="autoCompleteByISBN()" nz-button nzType="primary">获取教材信息</button>
-        </ng-template>
-      </nz-form-control>
-    </nz-form-item>
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>第一主编(作者)</nz-form-label>
-      <nz-form-control nzErrorTip="请输入第一主编(作者)" [nzSm]="12" [nzXs]="12">
+      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>教材应用对象及所属学科专业类</nz-form-label>
+      <nz-form-control nzErrorTip="输入所属本科专业类代码(四位)搜索所属学科" [nzSm]="12" [nzXs]="12">
         <nz-input-group>
-          <input type="text" nz-input formControlName="author" placeholder="请输入作者姓名" />
+          <nz-select style="width: 80%" nzShowSearch nzAllowClear nzPlaceHolder="填写 6 位专业代码选择"
+            formControlName="majorPoniter" (ngModelChange)="changeCode()" (nzOnSearch)="getCode($event)">
+            @for(major of selectList; track major.code;let index = $index){
+            <nz-option nzCustomContent [nzValue]="major.code" [nzLabel]="major.name+'-'+major.code">
+              <div>{{ major.name }}</div>
+              <div style="font-size: 12px;color: gray;">{{ major.code }}</div>
+            </nz-option>
+            }
+          </nz-select>
+          <!-- <nz-select [nzOptionOverflowSize]="nzOptionOverflowSize" nzShowSearch nzAllowClear nzPlaceHolder="输入所属本科专业类代码(四位)搜索所属学科" formControlName="majorPoniter">
+            @for(major of selectList; track major.code;let index = $index){
+            <nz-option nzCustomContent [nzValue]="major.code +'/'+ major.name" [nzLabel]="major.name+'-'+major.code">
+              <div>{{ major.name }}</div>
+              <div style="font-size: 12px;color: gray;">{{ major.code }}</div>
+            </nz-option>
+            }
+          </nz-select> -->
         </nz-input-group>
       </nz-form-control>
     </nz-form-item>
     <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>第一主编(作者)单位</nz-form-label>
-      <nz-form-control nzErrorTip="请输入第一主编(作者)单位" [nzSm]="12" [nzXs]="12">
+      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>是否重点立项教材</nz-form-label>
+      <nz-form-control nzErrorTip="请输入完成项" [nzSm]="12" [nzXs]="12">
         <nz-input-group>
-          <input type="text" nz-input formControlName="unit" placeholder="请输入作者单位" />
+          <nz-select nzShowSearch nzAllowClear nzPlaceHolder="请输入是否重点立项教材" formControlName="approval">
+            @for (item of options; track item.code) {
+            <nz-option nzCustomContent [nzValue]="item.name" [nzLabel]="item.name">{{item.name}}</nz-option>
+            }
+            <!-- <nz-option nzCustomContent [nzValue]="'基础学科“101计划”核心教材'" [nzLabel]="'基础学科“101计划”核心教材'">基础学科“101计划”核心教材</nz-option>
+            <nz-option nzCustomContent [nzValue]="'战略性新兴领域教材'" [nzLabel]="'战略性新兴领域教材'">战略性新兴领域教材</nz-option>
+            <nz-option nzCustomContent [nzValue]="'“四新”重点建设教材'" [nzLabel]="'“四新”重点建设教材'">“四新”重点建设教材</nz-option>
+            <nz-option nzCustomContent [nzValue]="'否'" [nzLabel]="'否'">否</nz-option> -->
+          </nz-select>
         </nz-input-group>
       </nz-form-control>
     </nz-form-item>
+    @if (validateForm.value.approval && validateForm.value.approval != '否') {
     <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>第一主编(作者)单位类型</nz-form-label>
-      <nz-form-control nzErrorTip="第一主编(作者)单位类型" [nzSm]="12" [nzXs]="12">
+      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>教材获批截图</nz-form-label>
+      <nz-form-control nzErrorTip="请上传教材获批截图" [nzSm]="12" [nzXs]="12">
+        @if (validateForm.value.approvedImgUrl) {
+        <a style="color: #3e49b3;font-size: 14px;" (click)="openFile(validateForm.value.approvedImgUrl)">
+          <span nz-icon nzType="file" nzTheme="outline"></span>
+          教材获批截图
+        </a>
+        }
         <nz-input-group>
-          <nz-select nzShowSearch nzAllowClear nzPlaceHolder="请选择第一主编(作者)单位类型" formControlName="unitType">
-            @for(type of unitSelects; track type.code;let index = $index){
-            <nz-option nzCustomContent [nzValue]="type.name" [nzLabel]="type.name">
-              <div>{{ type.name }}</div>
-            </nz-option>
-            }
-          </nz-select>
+          <app-comp-upload (change)="upload($event, 'approvedImgUrl')" title="上传教材获批截图"></app-comp-upload>
         </nz-input-group>
+        <p style="color: gray;">支持上传 PDF 格式,文件大小不超过 2M</p>
       </nz-form-control>
     </nz-form-item>
+    }
     <nz-form-item style="margin-bottom: 16px">
       <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>申报类型</nz-form-label>
       <nz-form-control nzErrorTip="请输入申报类型" [nzSm]="12" [nzXs]="12">
@@ -63,10 +79,11 @@
           <nz-radio-group style="display: flex; flex-direction: column" formControlName="type">
             <label nz-radio nzValue="单册">单册</label>
             <div class="basic-row">
-              <label nz-radio nzValue="全册">全册</label>
+              <label (click)="accordion?.openAll()" nz-radio nzValue="全册">全册</label>
               @if (validateForm.value.type =='全册') {
               <nz-input-group style="flex: 1; margin-left: 20px" [nzSuffix]="suffixTemplateInfo">
-                <input min="2"  type="number" [ngModelOptions]="{standalone: true}" [(ngModel)]="typeNumber" (ngModelChange)="typeNumberChange()" nz-input placeholder="输入册数" />
+                <input min="2" type="number" [ngModelOptions]="{standalone: true}" [(ngModel)]="typeNumber"
+                  (ngModelChange)="typeNumberChange()" nz-input placeholder="输入册数" />
               </nz-input-group>
               <ng-template #suffixTemplateInfo> 册 </ng-template>
               }
@@ -75,226 +92,280 @@
         </nz-input-group>
       </nz-form-control>
     </nz-form-item>
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>教材应用对象及所属学科专业类</nz-form-label>
-      <nz-form-control nzErrorTip="输入所属本科专业类代码(四位)搜索所属学科" [nzSm]="12" [nzXs]="12">
-        <nz-input-group>
 
 
-          <nz-select style="width: 80%" nzShowSearch nzAllowClear nzPlaceHolder="填写 6 位专业代码选择"
-                formControlName="majorPoniter" (ngModelChange)="changeCode()" (nzOnSearch)="getCode($event)">
-                @for(major of selectList; track major.code;let index = $index){
-                <nz-option nzCustomContent [nzValue]="major.code" [nzLabel]="major.name+'-'+major.code">
-                  <div>{{ major.name }}</div>
-                  <div style="font-size: 12px;color: gray;">{{ major.code }}</div>
+    <mat-accordion class="example-headers-align" multi>
+
+
+      <mat-expansion-panel>
+        <mat-expansion-panel-header>
+          <mat-panel-title>
+            <b>分册1</b>
+          </mat-panel-title>
+        </mat-expansion-panel-header>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>国际标准书号(ISBN)</nz-form-label>
+          <nz-form-control nzErrorTip="请输入国际标准书号,仅可输入数字" [nzSm]="12" [nzXs]="12">
+            <nz-input-group nzSearch [nzAddOnAfter]="autoButton">
+              <input type="number" nz-input formControlName="ISBN" placeholder="请输入国际标准书号,仅可输入数字" />
+            </nz-input-group>
+            <ng-template #autoButton>
+              <button (click)="autoCompleteByISBN()" nz-button nzType="primary">获取教材信息</button>
+            </ng-template>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>第一主编(作者)</nz-form-label>
+          <nz-form-control nzErrorTip="请输入第一主编(作者)" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <input type="text" nz-input formControlName="author" placeholder="请输入作者姓名" />
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>第一主编(作者)单位</nz-form-label>
+          <nz-form-control nzErrorTip="请输入第一主编(作者)单位" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <input type="text" nz-input formControlName="unit" placeholder="请输入作者单位" />
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>第一主编(作者)单位类型</nz-form-label>
+          <nz-form-control nzErrorTip="第一主编(作者)单位类型" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <nz-select nzShowSearch nzAllowClear nzPlaceHolder="请选择第一主编(作者)单位类型" formControlName="unitType">
+                @for(type of unitSelects; track type.code;let index = $index){
+                <nz-option nzCustomContent [nzValue]="type.name" [nzLabel]="type.name">
+                  <div>{{ type.name }}</div>
                 </nz-option>
                 }
               </nz-select>
-          <!-- <nz-select [nzOptionOverflowSize]="nzOptionOverflowSize" nzShowSearch nzAllowClear nzPlaceHolder="输入所属本科专业类代码(四位)搜索所属学科" formControlName="majorPoniter">
-            @for(major of selectList; track major.code;let index = $index){
-            <nz-option nzCustomContent [nzValue]="major.code +'/'+ major.name" [nzLabel]="major.name+'-'+major.code">
-              <div>{{ major.name }}</div>
-              <div style="font-size: 12px;color: gray;">{{ major.code }}</div>
-            </nz-option>
-            }
-          </nz-select> -->
-        </nz-input-group>
-      </nz-form-control>
-    </nz-form-item>
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>教材主要语种类型</nz-form-label>
-      <nz-form-control nzErrorTip="选择教材主要语种" [nzSm]="12" [nzXs]="12">
-        <nz-input-group>
-          <nz-select nzShowSearch nzAllowClear nzPlaceHolder="选择教材主要语种" formControlName="lang">
-            @for(lang of selectLang; track lang.lang;let index = $index){
-            <nz-option nzCustomContent [nzValue]="lang.name" [nzLabel]="lang.name">{{ lang.name }}</nz-option>
-            }
-          </nz-select>
-        </nz-input-group>
-      </nz-form-control>
-    </nz-form-item>
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8">其他主编姓名</nz-form-label>
-      <nz-form-control nzErrorTip="请输入其他主编姓名,使用「;」隔开" [nzSm]="12" [nzXs]="12">
-        <nz-input-group>
-          <textarea type="text" nz-input formControlName="authors" placeholder="请输入其他主编姓名,使用「;」隔开"></textarea>
-        </nz-input-group>
-      </nz-form-control>
-    </nz-form-item>
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8">其他编者姓名</nz-form-label>
-      <nz-form-control nzErrorTip="请输入其他编者姓名,使用「;」隔开" [nzSm]="12" [nzXs]="12">
-        <nz-input-group>
-          <textarea type="text" nz-input formControlName="editor" placeholder="请输入其他编者姓名,使用「;」隔开"></textarea>
-        </nz-input-group>
-      </nz-form-control>
-    </nz-form-item>
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>是否重点立项教材</nz-form-label>
-      <nz-form-control nzErrorTip="请输入完成项" [nzSm]="12" [nzXs]="12">
-        <nz-input-group>
-          <nz-select nzShowSearch nzAllowClear nzPlaceHolder="请输入是否重点立项教材" formControlName="approval">
-            @for (item of options; track item.code) {
-            <nz-option nzCustomContent [nzValue]="item.name" [nzLabel]="item.name">{{item.name}}</nz-option>
-            }
-            <!-- <nz-option nzCustomContent [nzValue]="'基础学科“101计划”核心教材'" [nzLabel]="'基础学科“101计划”核心教材'">基础学科“101计划”核心教材</nz-option>
-            <nz-option nzCustomContent [nzValue]="'战略性新兴领域教材'" [nzLabel]="'战略性新兴领域教材'">战略性新兴领域教材</nz-option>
-            <nz-option nzCustomContent [nzValue]="'“四新”重点建设教材'" [nzLabel]="'“四新”重点建设教材'">“四新”重点建设教材</nz-option>
-            <nz-option nzCustomContent [nzValue]="'否'" [nzLabel]="'否'">否</nz-option> -->
-          </nz-select>
-        </nz-input-group>
-      </nz-form-control>
-    </nz-form-item>
-    @if (validateForm.value.approval && validateForm.value.approval != '否') {
-      <nz-form-item style="margin-bottom: 16px">
-        <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>教材获批截图</nz-form-label>
-        <nz-form-control nzErrorTip="请上传教材获批截图" [nzSm]="12" [nzXs]="12">
-          @if (validateForm.value.approvedImgUrl) {
-            <a style="color: #3e49b3;font-size: 14px;" (click)="openFile(validateForm.value.approvedImgUrl)">
-              <span nz-icon nzType="file" nzTheme="outline"></span>
-              教材获批截图
-            </a>
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
+
+
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>教材主要语种类型</nz-form-label>
+          <nz-form-control nzErrorTip="选择教材主要语种" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <nz-select nzShowSearch nzAllowClear nzPlaceHolder="选择教材主要语种" formControlName="lang">
+                @for(lang of selectLang; track lang.lang;let index = $index){
+                <nz-option nzCustomContent [nzValue]="lang.name" [nzLabel]="lang.name">{{ lang.name }}</nz-option>
+                }
+              </nz-select>
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8">其他主编姓名</nz-form-label>
+          <nz-form-control nzErrorTip="请输入其他主编姓名,使用「;」隔开" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <textarea type="text" nz-input formControlName="authors" placeholder="请输入其他主编姓名,使用「;」隔开"></textarea>
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8">其他编者姓名</nz-form-label>
+          <nz-form-control nzErrorTip="请输入其他编者姓名,使用「;」隔开" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <textarea type="text" nz-input formControlName="editor" placeholder="请输入其他编者姓名,使用「;」隔开"></textarea>
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
+
+
+
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>出版单位</nz-form-label>
+          @if (!isShowChooseEU) {
+          <p title="点击更改出版单位" (click)="isShowChooseEU=true" style="margin-top: 6px;color: rgb(0, 140, 255);">
+            {{validateForm.value.editionUnit}}</p>
+          }@else{
+          <nz-form-control nzErrorTip="请输入出版单位" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <nz-select nzShowSearch nzServerSearch nzPlaceHolder="选择出版单位" formControlName="editionUnit"
+                [nzShowArrow]="false" [nzFilterOption]="nzFilterOption" (nzOnSearch)="search($event)">
+                @for(edu of eduList; track edu;let index = $index){
+                <nz-option nzCustomContent [nzLabel]="edu?.get('name')" [nzValue]="edu?.get('name')">
+                  {{edu?.get('name')}}
+                </nz-option>
+                }
+              </nz-select>
+            </nz-input-group>
+          </nz-form-control>
           }
-          <nz-input-group>
-            <app-comp-upload (change)="upload($event, 'approvedImgUrl')" title="上传教材获批截图"></app-comp-upload>
-          </nz-input-group>
-          <p style="color: gray;">支持上传 PDF 格式,文件大小不超过 2M</p>
-        </nz-form-control>
-      </nz-form-item>
-    }
-    
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>出版单位</nz-form-label>
-      @if (!isShowChooseEU) {
-        <p title="点击更改出版单位" (click)="isShowChooseEU=true" style="margin-top: 6px;color: rgb(0, 140, 255);">{{validateForm.value.editionUnit}}</p>
-      }@else{
-        <nz-form-control nzErrorTip="请输入出版单位" [nzSm]="12" [nzXs]="12">
-          <nz-input-group>
-            <nz-select nzShowSearch nzServerSearch nzPlaceHolder="选择出版单位" formControlName="editionUnit"
-              [nzShowArrow]="false" [nzFilterOption]="nzFilterOption" (nzOnSearch)="search($event)">
-              @for(edu of eduList; track edu;let index = $index){
-              <nz-option nzCustomContent [nzLabel]="edu?.get('name')" [nzValue]="edu?.get('name')">
-                {{edu?.get('name')}}
-              </nz-option>
-              }
-            </nz-select>
-          </nz-input-group>
-        </nz-form-control>
-      }
-      
-    </nz-form-item>
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>初版时间</nz-form-label>
-      <nz-form-control nzErrorTip="请输入初版时间" [nzSm]="12" [nzXs]="12">
-        <nz-input-group>
-          <nz-date-picker nzMode="month" style="width: 100%" formControlName="editionFirst"></nz-date-picker>
-        </nz-input-group>
-      </nz-form-control>
-    </nz-form-item>
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>
-        载体形式
-        <span style="padding: 0 5px;" nz-icon nzType="info-circle" nzTheme="outline"></span>
-      </nz-form-label>
-      <nz-form-control nzErrorTip="请输入载体形式" [nzSm]="12" [nzXs]="12">
-        <nz-input-group>
-          <nz-select nzShowSearch nzAllowClear nzPlaceHolder="选择载体形式" formControlName="carrierShape">
-            @for(item of carrierOptions; track item.code;let index = $index){
-            <nz-option nzCustomContent [nzValue]="item.name" [nzLabel]="item.name">{{ item.name }}</nz-option>
-            }
-          </nz-select>
-        </nz-input-group>
-      </nz-form-control>
-    </nz-form-item>
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>本版出版时间及版次</nz-form-label>
-      <nz-form-control nzErrorTip="请输入出版时间" [nzSm]="12" [nzXs]="12">
-        <nz-input-group>
-          <div class="basic-row">
-            <nz-date-picker nzMode="month" style="flex: 1" formControlName="editionDate"></nz-date-picker>
-            <nz-input-group style="width: 100px; margin-left: 20px" [nzSuffix]="suffixTemplateInfo">
-              <input type="number" formControlName="editionNumber" nz-input placeholder="输入版次" />
+
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>初版时间</nz-form-label>
+          <nz-form-control nzErrorTip="请输入初版时间" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <nz-date-picker nzMode="month" style="width: 100%" formControlName="editionFirst"></nz-date-picker>
             </nz-input-group>
-            <ng-template #suffixTemplateInfo> 版 </ng-template>
-          </div>
-        </nz-input-group>
-      </nz-form-control>
-    </nz-form-item>
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>最新印次时间及印次</nz-form-label>
-      <nz-form-control nzErrorTip="请输入完整内容" [nzSm]="12" [nzXs]="12">
-        <nz-input-group>
-          <div class="basic-row">
-            <nz-date-picker nzMode="month" style="flex: 1" formControlName="printDate"  [nzDisabledDate]="disabledEditionDate"></nz-date-picker>
-            <nz-input-group style="width: 100px; margin-left: 20px" [nzSuffix]="suffixTemplateInfo02">
-              <input type="number" formControlName="printNumber" nz-input placeholder="输入印次" />
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>
+            载体形式
+            <span style="padding: 0 5px;" nz-icon nzType="info-circle" nzTheme="outline"></span>
+          </nz-form-label>
+          <nz-form-control nzErrorTip="请输入载体形式" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <nz-select nzShowSearch nzAllowClear nzPlaceHolder="选择载体形式" formControlName="carrierShape">
+                @for(item of carrierOptions; track item.code;let index = $index){
+                <nz-option nzCustomContent [nzValue]="item.name" [nzLabel]="item.name">{{ item.name }}</nz-option>
+                }
+              </nz-select>
             </nz-input-group>
-            <ng-template #suffixTemplateInfo02> 次 </ng-template>
-          </div>
-        </nz-input-group>
-      </nz-form-control>
-    </nz-form-item>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>本版出版时间及版次</nz-form-label>
+          <nz-form-control nzErrorTip="请输入出版时间" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <div class="basic-row">
+                <nz-date-picker nzMode="month" style="flex: 1" formControlName="editionDate"></nz-date-picker>
+                <nz-input-group style="width: 100px; margin-left: 20px" [nzSuffix]="suffixTemplateInfo">
+                  <input type="number" formControlName="editionNumber" nz-input placeholder="输入版次" />
+                </nz-input-group>
+                <ng-template #suffixTemplateInfo> 版 </ng-template>
+              </div>
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>最新印次时间及印次</nz-form-label>
+          <nz-form-control nzErrorTip="请输入完整内容" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <div class="basic-row">
+                <nz-date-picker nzMode="month" style="flex: 1" formControlName="printDate"
+                  [nzDisabledDate]="disabledEditionDate"></nz-date-picker>
+                <nz-input-group style="width: 100px; margin-left: 20px" [nzSuffix]="suffixTemplateInfo02">
+                  <input type="number" formControlName="printNumber" nz-input placeholder="输入印次" />
+                </nz-input-group>
+                <ng-template #suffixTemplateInfo02> 次 </ng-template>
+              </div>
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
 
-    <nz-form-item style="margin-bottom: 16px"> 
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>初版以来合计印数</nz-form-label>
-      <nz-form-control nzErrorTip="请输入初版以来合计印数" [nzSm]="12" [nzXs]="12">
-        <nz-input-group>
-          <nz-input-group [nzSuffix]="suffixTemplateInfo02">
-            <input type="number" formControlName="printSum" nz-input placeholder="输入合计印数" />
-          </nz-input-group>
-          <ng-template #suffixTemplateInfo02> 册 </ng-template>
-        </nz-input-group>
-      </nz-form-control>
-    </nz-form-item>
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8">初版以来是否列为重点项目</nz-form-label>
-      <nz-form-control nzErrorTip="" [nzSm]="12" [nzXs]="12">
-        <nz-checkbox-wrapper>
-            @for (item of importantProjectList; track item.value) {
-              <label style="margin: 0;padding: 0;" [ngModelOptions]="{standalone: true}" nz-checkbox [nzValue]="item.value" [(ngModel)]="item.checked">{{item.value}}</label>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>初版以来合计印数</nz-form-label>
+          <nz-form-control nzErrorTip="请输入初版以来合计印数" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <nz-input-group [nzSuffix]="suffixTemplateInfo02">
+                <input type="number" formControlName="printSum" nz-input placeholder="输入合计印数" />
+              </nz-input-group>
+              <ng-template #suffixTemplateInfo02> 册 </ng-template>
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8">初版以来是否列为重点项目</nz-form-label>
+          <nz-form-control nzErrorTip="" [nzSm]="12" [nzXs]="12">
+            <nz-checkbox-wrapper>
+              @for (item of importantProjectList; track item.value) {
+              <label style="margin: 0;padding: 0;" [ngModelOptions]="{standalone: true}" nz-checkbox
+                [nzValue]="item.value" [(ngModel)]="item.checked">{{item.value}}</label>
               <br>
-            }
-        </nz-checkbox-wrapper>
-        @if (importantProjectList[4].checked) {
-          <input type="text" formControlName="importantProjectOther" placeholder="请输入入选项目名称" nz-input />
-          }
-        <!-- <nz-input-group>
-          <nz-radio-group style="display: flex; flex-direction: column" formControlName="importantProject">
-            @for (item of importantProjectList; track item.value) {
-            <label (click)="onChangeRadio()" nz-radio [nzValue]="item.value">{{item.title}}</label>
-            }
-            @if (validateForm.value.importantProject == '其他省部级及以上项目') {
+              }
+            </nz-checkbox-wrapper>
+            @if (importantProjectList[4].checked) {
             <input type="text" formControlName="importantProjectOther" placeholder="请输入入选项目名称" nz-input />
             }
-            <label nz-radio nzValue="否">否</label>
-          </nz-radio-group>
-        </nz-input-group> -->
-      </nz-form-control>
-    </nz-form-item>
-    <!-- <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>版权页截图</nz-form-label>
-      <nz-form-control nzErrorTip="请上传版权页截图" [nzSm]="12" [nzXs]="12">
-        <nz-input-group>
-          <app-comp-upload [width]="320" (change)="upload($event, 'copyrightImgUrl')" title="上传截图"></app-comp-upload>
-        </nz-input-group>
-      </nz-form-control>
-    </nz-form-item>
-    <nz-form-item style="margin-bottom: 16px">
-      <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>中国版本图书馆CIP查询截图</nz-form-label>
-      <nz-form-control nzErrorTip="" [nzSm]="12" [nzXs]="12">
-        <nz-input-group>
-          <div class="row-block">
-            <app-comp-upload [width]="320" (change)="upload($event, 'CIPImgUrl')" title="上传截图"></app-comp-upload>
-            <div class="tips">
-              <span nz-icon nzType="exclamation-circle" nzTheme="fill"
-                style="font-size: 16px; color: #3e49b3; margin-right: 4px"></span>如 CIP
-              数据中无“教材”字样的,须再上传内容提要或前言或后记中可以证明本书为教材的相关内容截图
-            </div>
-          </div>
-        </nz-input-group>
-      </nz-form-control>
-    </nz-form-item> -->
+            <!-- <nz-input-group>
+              <nz-radio-group style="display: flex; flex-direction: column" formControlName="importantProject">
+                @for (item of importantProjectList; track item.value) {
+                <label (click)="onChangeRadio()" nz-radio [nzValue]="item.value">{{item.title}}</label>
+                }
+                @if (validateForm.value.importantProject == '其他省部级及以上项目') {
+                <input type="text" formControlName="importantProjectOther" placeholder="请输入入选项目名称" nz-input />
+                }
+                <label nz-radio nzValue="否">否</label>
+              </nz-radio-group>
+            </nz-input-group> -->
+          </nz-form-control>
+        </nz-form-item>
+        <!-- <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>版权页截图</nz-form-label>
+          <nz-form-control nzErrorTip="请上传版权页截图" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <app-comp-upload [width]="320" (change)="upload($event, 'copyrightImgUrl')" title="上传截图"></app-comp-upload>
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item>
+        <nz-form-item style="margin-bottom: 16px">
+          <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>中国版本图书馆CIP查询截图</nz-form-label>
+          <nz-form-control nzErrorTip="" [nzSm]="12" [nzXs]="12">
+            <nz-input-group>
+              <div class="row-block">
+                <app-comp-upload [width]="320" (change)="upload($event, 'CIPImgUrl')" title="上传截图"></app-comp-upload>
+                <div class="tips">
+                  <span nz-icon nzType="exclamation-circle" nzTheme="fill"
+                    style="font-size: 16px; color: #3e49b3; margin-right: 4px"></span>如 CIP
+                  数据中无“教材”字样的,须再上传内容提要或前言或后记中可以证明本书为教材的相关内容截图
+                </div>
+              </div>
+            </nz-input-group>
+          </nz-form-control>
+        </nz-form-item> -->
+        
+      </mat-expansion-panel>
+
+
+
+      @if(validateForm.value.type=='全册'){
+
+      @for (item of eduTextbookVolumeValidList; track $index) {
+      <mat-expansion-panel>
+        <mat-expansion-panel-header>
+          <mat-panel-title>
+            <b>分册1</b>
+          </mat-panel-title>
+        </mat-expansion-panel-header>
+        <app-one></app-one>
+      </mat-expansion-panel>
+      }
+
+
+
+      }
+    </mat-accordion>
+
+
+
+
   </form>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 </div>
 <div class="footer">
   <button nz-button nzType="default" style="margin-right: 20px" (click)="submitForm('save')">

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

@@ -21,6 +21,22 @@ import { NzInputModule } from 'ng-zorro-antd/input';
 import * as major from '../../../../services/majors4.map'
 import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';
 
+import { BasicComponent } from '../create/basic/basic.component';
+
+
+
+
+import { ChangeDetectorRef } from '@angular/core';
+import { ViewChild } from '@angular/core';
+import { MatAccordion, MatExpansionModule } from '@angular/material/expansion';
+import { MatDatepickerModule } from '@angular/material/datepicker';
+import { MatInputModule } from '@angular/material/input';
+import { MatFormFieldModule } from '@angular/material/form-field';
+import { MatIconModule } from '@angular/material/icon';
+import { MatButtonModule } from '@angular/material/button';
+import { provideNativeDateAdapter } from '@angular/material/core';
+
+
 @Component({
   selector: 'app-basic',
   imports: [
@@ -32,38 +48,57 @@ import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';
     NzInputModule,
     NzTagModule,
     CompUploadComponent,
-    NzCheckboxModule
+    NzCheckboxModule,
+    BasicComponent,
+    MatButtonModule,
+    MatExpansionModule,
+    MatIconModule,
+    MatFormFieldModule,
+    MatInputModule,
+    MatDatepickerModule,
   ],
   standalone: true,
   templateUrl: './basic-in.component.html',
   styleUrls: ['./basic-in.component.scss'],
+  providers: [provideNativeDateAdapter()],
+
 })
 export class BasicInComponent implements OnInit {
-  @Input('eduTextbook') eduTextbook: Parse.Object|any;
+  @Input('eduTextbook') eduTextbook: Parse.Object | any;
   @Input('editFrom') editFrom: any;
   @Output() state: EventEmitter<any> = new EventEmitter<any>();
   @Output() save: EventEmitter<any> = new EventEmitter<any>();
 
 
+
+  @ViewChild(MatAccordion) accordion: MatAccordion | any;
+
+  ngAfterViewInit() {
+    this.accordion?.openAll()
+    this.cdr.detectChanges()
+  }
+
+
+
   changeCode() { }
   getCode(e: any) { }
 
-/***教材获批截图 */
-  approvedImgList:Array<any>=[{
-    name:'获批截图',
-    status:'done',
-    url:''
+  /***教材获批截图 */
+  approvedImgList: Array<any> = [{
+    name: '获批截图',
+    status: 'done',
+    url: ''
   }]
   /**
    * 书号自动补全函数
    * @param isbn 书号
    */
-  async autoCompleteByISBN(){
+  async autoCompleteByISBN() {
     let isbn = this.validateForm.value?.ISBN;
-    let result = await Parse.Cloud.run("tbookISBN",{
-      isbn:isbn
+    let result = await Parse.Cloud.run("tbookISBN", {
+      isbn: isbn
     })
-    if(!result?.isbn){
+    if (!result?.isbn) {
       this.msg.warning('未找到该书号的图书信息,请手动填写')
     }
 
@@ -76,27 +111,40 @@ export class BasicInComponent implements OnInit {
     this.validateForm.get("editionUnit")?.setValue(result?.publisher)
     this.validateForm.get("editionDate")?.setValue(new Date(result?.publish_time))
     this.validateForm.get("carrierShape")?.setValue(result?.publication_class)
-    
+
     console.log(result)
   }
   /**出版时间及版次不可选择时间 */
-  disabledEditionDate=(current:Date):boolean=>{
-    return current< new Date(2022,11,1)
+  disabledEditionDate = (current: Date): boolean => {
+    return current < new Date(2022, 11, 1)
   }
-    /** 全册次数*/
-    typeNumber:number=2
-    typeNumberChange(){
-      if(this.typeNumber<2){
-        this.msg.create('warning','不得小于两册')
-        this.typeNumber=2
-      }
+
+
+  /**扩展表记录 */
+  eduTextbookVolumeValidList: Array<any> = []
+  /** 全册次数*/
+  typeNumber: number = 2
+  typeNumberChange() {
+    if (this.typeNumber < 2) {
+      this.msg.create('warning', '不得小于两册')
+      this.typeNumber = 2
+    } else {
+      
     }
+    this.eduTextbookVolumeValidList = []
+      // for (let i = 1; i++; i <= this.typeNumber) {
+      //   this.eduTextbookVolumeValidList.push(false)
+      // }
+      this.eduTextbookVolumeValidList=new Array(this.typeNumber-1).fill(false)
+      console.log(this.eduTextbookVolumeValidList)
+
+  }
   validateForm: FormGroup<{
     title: FormControl<string>; //申报教材名称
     ISBN: FormControl<any>; //国际标准书号
     author: FormControl<string>; //第一主编(作者)
     unit: FormControl<string>; //第一主编(作者)单位
-    unitType:FormControl<string>//第一主编(作者)单位类型
+    unitType: FormControl<string>//第一主编(作者)单位类型
 
     type: FormControl<string>; //申报类型
     // typeNumber: FormControl<number|any>; //全册次数
@@ -120,8 +168,8 @@ export class BasicInComponent implements OnInit {
 
     // importantProject: FormControl<string>; //初版以来是否列为重点项目
     importantProjectOther: FormControl<string>; //其他省部级及以上项目
-    approvedImgUrl:FormControl<string>//重点立项教材获批截图
-  
+    approvedImgUrl: FormControl<string>//重点立项教材获批截图
+
 
     // remember: FormControl<boolean>;
   }> = this.fb.group({
@@ -146,16 +194,16 @@ export class BasicInComponent implements OnInit {
     printSum: [0, [Validators.required]],
     // importantProject: ['', [Validators.required]],
     importantProjectOther: [''],
-    approvedImgUrl:[''],
+    approvedImgUrl: [''],
     // copyrightImgUrl: [''],
     // CIPImgUrl: [''],
     // remember: [true],
-    unitType:['',[Validators.required]],
+    unitType: ['', [Validators.required]],
   });
   /** 所属学科专业类显示数量*/
-  nzOptionOverflowSize=5
+  nzOptionOverflowSize = 5
   //教材应用对象及所诉学科专业类
-  selectList=major.majors.options
+  selectList = major.majors.options
   //语言选择
   selectLang: Array<any> = languages.options;
   //可选单位类型
@@ -197,35 +245,35 @@ export class BasicInComponent implements OnInit {
     {
       label: '首届全国教材建设奖全国优秀教材(高等教育类)',
       value: '首届全国教材建设奖全国优秀教材(高等教育类)',
-      checked:false
+      checked: false
     },
     {
       label: '“十二五”普通高等教育本科国家级规划教材',
       value: '“十二五”普通高等教育本科国家级规划教材',
-      checked:false
+      checked: false
     },
     {
       label: '“十二五”以来省级优秀教材',
       value: '“十二五”以来省级优秀教材',
-      checked:false
+      checked: false
     },
     {
       label: '“十二五”以来省级规划教材',
       value: '“十二五”以来省级规划教材',
-      checked:false
+      checked: false
     },
     {
       label: '其他省部级及以上项目',
       value: '其他省部级及以上项目',
-      checked:false
+      checked: false
     },
   ];
   /**选中的重点项目 */
-  importantProject:Array<any>=[]
+  importantProject: Array<any> = []
   /**多选框改变 */
-  changeImportantProject(){
-    let checkedList = this.importantProjectList.filter(item=>item.checked)||[]
-    this.importantProject = checkedList.map(item=>item.value)
+  changeImportantProject() {
+    let checkedList = this.importantProjectList.filter(item => item.checked) || []
+    this.importantProject = checkedList.map(item => item.value)
     console.log(this.importantProject)
   }
   /* 是否重点立项教材可选列表 */
@@ -256,36 +304,41 @@ export class BasicInComponent implements OnInit {
     public tbookSer: textbookServer,
     private fb: NonNullableFormBuilder,
     private modal: NzModalService,
-    private msg: NzMessageService
+    private msg: NzMessageService,
+    private cdr: ChangeDetectorRef
   ) {
   }
 
-  isShowChooseEU:boolean=true
+  isShowChooseEU: boolean = true
   ngOnInit() {
-    if(this.eduTextbook?.get('editionUnit')){
-      this.isShowChooseEU=false
+    if (this.eduTextbook?.get('editionUnit')) {
+      this.isShowChooseEU = false
     }
-    this.importantProject = this.eduTextbook?.get('importantProject')||[]
-    if(this.importantProject?.length>0){
-      for(let i in this.importantProjectList){
-        if(this.importantProject.indexOf(this.importantProjectList[i].value)!=-1){
-          this.importantProjectList[i].checked=true
+    this.importantProject = this.eduTextbook?.get('importantProject') || []
+    if (this.importantProject?.length > 0) {
+      for (let i in this.importantProjectList) {
+        if (this.importantProject.indexOf(this.importantProjectList[i].value) != -1) {
+          this.importantProjectList[i].checked = true
         }
       }
     }
- 
+
     this.approvedImgList[0].url = this.eduTextbook?.get('approvedImgUrl')
     this.typeNumber = this.eduTextbook?.get('typeNumber') || 2
+    this.eduTextbookVolumeValidList=new Array(this.typeNumber-1).fill(false)
+      console.log(this.eduTextbookVolumeValidList)
+
+      
     // console.log(this.approvedImgList)
     console.log(this.eduTextbook);
     this.validateForm = this.fb.group({
       title: [this.eduTextbook?.get('title') || '', [Validators.required]],
-      ISBN: [parseInt(this.eduTextbook?.get('ISBN')||'')||null, [Validators.required]],
+      ISBN: [parseInt(this.eduTextbook?.get('ISBN') || '') || null, [Validators.required]],
       author: [this.eduTextbook?.get('author') || '', [Validators.required]],
       unit: [this.eduTextbook?.get('unit') || '', [Validators.required]],
-      type: [this.eduTextbook?.get('type') || '', [Validators.required]],
+      type: [this.eduTextbook?.get('type') || '全册', [Validators.required]],
       // typeNumber: [this.eduTextbook?.get('typeNumber') || 2],
-  
+
       majorPoniter: [this.eduTextbook?.get('majorPoniter')?.code || '', [Validators.required]],
       lang: [this.eduTextbook?.get('lang') || '', [Validators.required]],
       authors: [this.eduTextbook?.get('authors') || ''],
@@ -302,18 +355,18 @@ export class BasicInComponent implements OnInit {
       // importantProject: [this.eduTextbook?.get('importantProject') || '', [Validators.required]],
       importantProjectOther: [this.eduTextbook?.get('importantProjectOther') || ''],
       approvedImgUrl: [this.eduTextbook?.get('approvedImgUrl') || ''],
-      unitType: [this.eduTextbook?.get('unitType') || '',[Validators.required]],
+      unitType: [this.eduTextbook?.get('unitType') || '', [Validators.required]],
 
       // copyrightImgUrl: [this.eduTextbook?.get('copyrightImgUrl') || '', [Validators.required]],
       // CIPImgUrl: [this.eduTextbook?.get('CIPImgUrl') || '', [Validators.required]],
     });
   }
-  
-  upload(e: any, type:string) {
+
+  upload(e: any, type: string) {
     console.log(e);
     let file = e[0];
     // if(type == 'copyrightImgUrl' || type == 'CIPImgUrl' ||type=='approvedImgUrl'){
-    if(type=='approvedImgUrl'){
+    if (type == 'approvedImgUrl') {
       this.validateForm.value[type] = file?.url
     }
     console.log(this.validateForm.value)
@@ -323,12 +376,12 @@ export class BasicInComponent implements OnInit {
     console.log(this.validateForm.valid);
     if (this.validateForm.valid) {
       let params = this.validateForm.value
-      if(event == 'next'){
+      if (event == 'next') {
         await this.saveEduTextbook(params, this.validateForm.valid)
-        this.state.emit({type:'next',textBook:this.eduTextbook});
+        this.state.emit({ type: 'next', textBook: this.eduTextbook });
       }
     } else {
-      if(event == 'save'){
+      if (event == 'save') {
         let params = this.validateForm.value
         await this.saveEduTextbook(params, this.validateForm.valid)
         this.modal.success({
@@ -338,13 +391,13 @@ export class BasicInComponent implements OnInit {
         });
         return
       }
-      if(event == 'next'){
+      if (event == 'next') {
         let params = this.validateForm.value
         await this.saveEduTextbook(params, this.validateForm.valid)
-        this.state.emit({type:'next',textBook:this.eduTextbook});
+        this.state.emit({ type: 'next', textBook: this.eduTextbook });
       }
     }
-    if(event == 'save'){
+    if (event == 'save') {
       let params = this.validateForm.value
       await this.saveEduTextbook(params, this.validateForm.valid)
       this.modal.success({
@@ -355,18 +408,18 @@ export class BasicInComponent implements OnInit {
     }
   }
 
-  async saveEduTextbook(params: any, isComplete:boolean){
+  async saveEduTextbook(params: any, isComplete: boolean) {
     this.changeImportantProject()
     console.log(params);
-    if(!this.eduTextbook){
+    if (!this.eduTextbook) {
       let obj = Parse.Object.extend('EduTextbook');
       this.eduTextbook = new obj();
     }
     //如果填写未完整,仅保存,状态修改待完善101
-    if(this.eduTextbook.get('status') == '102' && !isComplete){
+    if (this.eduTextbook.get('status') == '102' && !isComplete) {
       this.eduTextbook?.set('status', '101');
       this.eduTextbook.set('complete', false)
-    }else if(!this.eduTextbook.get('status')){
+    } else if (!this.eduTextbook.get('status')) {
       this.eduTextbook?.set('status', '101');
     }
     this.eduTextbook?.set('user', Parse.User.current()?.toPointer());
@@ -376,7 +429,7 @@ export class BasicInComponent implements OnInit {
       objectId: this.tbookSer.company,
     });
     this.eduTextbook?.set('title', params.title);
-    this.eduTextbook?.set('ISBN', (params.ISBN||0).toString());
+    this.eduTextbook?.set('ISBN', (params.ISBN || 0).toString());
     this.eduTextbook?.set('author', params.author);
     this.eduTextbook?.set('unit', params.unit);
     this.eduTextbook?.set('type', params.type);
@@ -402,8 +455,8 @@ export class BasicInComponent implements OnInit {
     this.eduTextbook?.set('importantProjectOther', params.importantProjectOther);
     // this.eduTextbook?.set('copyrightImgUrl', params.copyrightImgUrl);
     // this.eduTextbook?.set('CIPImgUrl', params.CIPImgUrl);
-    this.eduTextbook?.set('approvedImgUrl',params.approvedImgUrl)
-    this.eduTextbook?.set('unitType',params.unitType)
+    this.eduTextbook?.set('approvedImgUrl', params.approvedImgUrl)
+    this.eduTextbook?.set('unitType', params.unitType)
 
     await this.eduTextbook?.save();
     return
@@ -414,21 +467,21 @@ export class BasicInComponent implements OnInit {
   selectedValue = null;
   listOfOption: Array<{ value: string; text: string }> = [];
   nzFilterOption = (): boolean => true;
-  eduTimeout:any
+  eduTimeout: any
   /**出版单位列表 */
-  eduList:Array<Parse.Object>=[]
-/**搜索出版单位 */
+  eduList: Array<Parse.Object> = []
+  /**搜索出版单位 */
   async search(value: string) {
     clearTimeout(this.eduTimeout)
-    this.eduTimeout = setTimeout(async() => {
+    this.eduTimeout = setTimeout(async () => {
       let query = new Parse.Query('Department')
-      query.notEqualTo('isDeleted',true)
-      query.equalTo('parent','66865d66ad23a23355b12aa7')
-      query.contains('name',value)
+      query.notEqualTo('isDeleted', true)
+      query.equalTo('parent', '66865d66ad23a23355b12aa7')
+      query.contains('name', value)
       query.limit(10)
       this.eduList = await query.find()
     }, 500);
- 
+
   }
   openFile(url: any) {
     window.open(url)

+ 187 - 0
projects/textbook/src/modules/nav-author/components/create/basic/basic.component.html

@@ -0,0 +1,187 @@
+<form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()">
+
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>国际标准书号(ISBN)</nz-form-label>
+    <nz-form-control nzErrorTip="请输入国际标准书号,仅可输入数字" [nzSm]="12" [nzXs]="12">
+      <nz-input-group nzSearch [nzAddOnAfter]="autoButton">
+        <input type="number" nz-input formControlName="ISBN" placeholder="请输入国际标准书号,仅可输入数字" />
+      </nz-input-group>
+      <ng-template #autoButton>
+        <button (click)="autoCompleteByISBN()" nz-button nzType="primary">获取教材信息</button>
+      </ng-template>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>第一主编(作者)</nz-form-label>
+    <nz-form-control nzErrorTip="请输入第一主编(作者)" [nzSm]="12" [nzXs]="12">
+      <nz-input-group>
+        <input type="text" nz-input formControlName="author" placeholder="请输入作者姓名" />
+      </nz-input-group>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>第一主编(作者)单位</nz-form-label>
+    <nz-form-control nzErrorTip="请输入第一主编(作者)单位" [nzSm]="12" [nzXs]="12">
+      <nz-input-group>
+        <input type="text" nz-input formControlName="unit" placeholder="请输入作者单位" />
+      </nz-input-group>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>第一主编(作者)单位类型</nz-form-label>
+    <nz-form-control nzErrorTip="第一主编(作者)单位类型" [nzSm]="12" [nzXs]="12">
+      <nz-input-group>
+        <nz-select nzShowSearch nzAllowClear nzPlaceHolder="请选择第一主编(作者)单位类型" formControlName="unitType">
+          @for(type of unitSelects; track type.code;let index = $index){
+          <nz-option nzCustomContent [nzValue]="type.name" [nzLabel]="type.name">
+            <div>{{ type.name }}</div>
+          </nz-option>
+          }
+        </nz-select>
+      </nz-input-group>
+    </nz-form-control>
+  </nz-form-item>
+
+
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>教材主要语种类型</nz-form-label>
+    <nz-form-control nzErrorTip="选择教材主要语种" [nzSm]="12" [nzXs]="12">
+      <nz-input-group>
+        <nz-select nzShowSearch nzAllowClear nzPlaceHolder="选择教材主要语种" formControlName="lang">
+          @for(lang of selectLang; track lang.lang;let index = $index){
+          <nz-option nzCustomContent [nzValue]="lang.name" [nzLabel]="lang.name">{{ lang.name }}</nz-option>
+          }
+        </nz-select>
+      </nz-input-group>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8">其他主编姓名</nz-form-label>
+    <nz-form-control nzErrorTip="请输入其他主编姓名,使用「;」隔开" [nzSm]="12" [nzXs]="12">
+      <nz-input-group>
+        <textarea type="text" nz-input formControlName="authors" placeholder="请输入其他主编姓名,使用「;」隔开"></textarea>
+      </nz-input-group>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8">其他编者姓名</nz-form-label>
+    <nz-form-control nzErrorTip="请输入其他编者姓名,使用「;」隔开" [nzSm]="12" [nzXs]="12">
+      <nz-input-group>
+        <textarea type="text" nz-input formControlName="editor" placeholder="请输入其他编者姓名,使用「;」隔开"></textarea>
+      </nz-input-group>
+    </nz-form-control>
+  </nz-form-item>
+
+
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>出版单位</nz-form-label>
+    @if (!isShowChooseEU) {
+    <p title="点击更改出版单位" (click)="isShowChooseEU=true" style="margin-top: 6px;color: rgb(0, 140, 255);">
+      {{validateForm.value.editionUnit}}</p>
+    }@else{
+    <nz-form-control nzErrorTip="请输入出版单位" [nzSm]="12" [nzXs]="12">
+      <nz-input-group>
+        <nz-select nzShowSearch nzServerSearch nzPlaceHolder="选择出版单位" formControlName="editionUnit"
+          [nzShowArrow]="false" [nzFilterOption]="nzFilterOption" (nzOnSearch)="search($event)">
+          @for(edu of eduList; track edu;let index = $index){
+          <nz-option nzCustomContent [nzLabel]="edu?.get('name')" [nzValue]="edu?.get('name')">
+            {{edu?.get('name')}}
+          </nz-option>
+          }
+        </nz-select>
+      </nz-input-group>
+    </nz-form-control>
+    }
+
+  </nz-form-item>
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>初版时间</nz-form-label>
+    <nz-form-control nzErrorTip="请输入初版时间" [nzSm]="12" [nzXs]="12">
+      <nz-input-group>
+        <nz-date-picker nzMode="month" style="width: 100%" formControlName="editionFirst"></nz-date-picker>
+      </nz-input-group>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>
+      载体形式
+      <span style="padding: 0 5px;" nz-icon nzType="info-circle" nzTheme="outline"></span>
+    </nz-form-label>
+    <nz-form-control nzErrorTip="请输入载体形式" [nzSm]="12" [nzXs]="12">
+      <nz-input-group>
+        <nz-select nzShowSearch nzAllowClear nzPlaceHolder="选择载体形式" formControlName="carrierShape">
+          @for(item of carrierOptions; track item.code;let index = $index){
+          <nz-option nzCustomContent [nzValue]="item.name" [nzLabel]="item.name">{{ item.name }}</nz-option>
+          }
+        </nz-select>
+      </nz-input-group>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>本版出版时间及版次</nz-form-label>
+    <nz-form-control nzErrorTip="请输入出版时间" [nzSm]="12" [nzXs]="12">
+      <nz-input-group>
+        <div class="basic-row">
+          <nz-date-picker nzMode="month" style="flex: 1" formControlName="editionDate"></nz-date-picker>
+          <nz-input-group style="width: 100px; margin-left: 20px" [nzSuffix]="suffixTemplateInfo">
+            <input type="number" formControlName="editionNumber" nz-input placeholder="输入版次" />
+          </nz-input-group>
+          <ng-template #suffixTemplateInfo> 版 </ng-template>
+        </div>
+      </nz-input-group>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>最新印次时间及印次</nz-form-label>
+    <nz-form-control nzErrorTip="请输入完整内容" [nzSm]="12" [nzXs]="12">
+      <nz-input-group>
+        <div class="basic-row">
+          <nz-date-picker nzMode="month" style="flex: 1" formControlName="printDate"
+            [nzDisabledDate]="disabledEditionDate"></nz-date-picker>
+          <nz-input-group style="width: 100px; margin-left: 20px" [nzSuffix]="suffixTemplateInfo02">
+            <input type="number" formControlName="printNumber" nz-input placeholder="输入印次" />
+          </nz-input-group>
+          <ng-template #suffixTemplateInfo02> 次 </ng-template>
+        </div>
+      </nz-input-group>
+    </nz-form-control>
+  </nz-form-item>
+
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8" nzRequired>初版以来合计印数</nz-form-label>
+    <nz-form-control nzErrorTip="请输入初版以来合计印数" [nzSm]="12" [nzXs]="12">
+      <nz-input-group>
+        <nz-input-group [nzSuffix]="suffixTemplateInfo02">
+          <input type="number" formControlName="printSum" nz-input placeholder="输入合计印数" />
+        </nz-input-group>
+        <ng-template #suffixTemplateInfo02> 册 </ng-template>
+      </nz-input-group>
+    </nz-form-control>
+  </nz-form-item>
+  <nz-form-item style="margin-bottom: 16px">
+    <nz-form-label [nzSm]="8" [nzNoColon]="true" [nzXs]="8">初版以来是否列为重点项目</nz-form-label>
+    <nz-form-control nzErrorTip="" [nzSm]="12" [nzXs]="12">
+      <nz-checkbox-wrapper>
+        @for (item of importantProjectList; track item.value) {
+        <label style="margin: 0;padding: 0;" [ngModelOptions]="{standalone: true}" nz-checkbox [nzValue]="item.value"
+          [(ngModel)]="item.checked">{{item.value}}</label>
+        <br>
+        }
+      </nz-checkbox-wrapper>
+      @if (importantProjectList[4].checked) {
+      <input type="text" formControlName="importantProjectOther" placeholder="请输入入选项目名称" nz-input />
+      }
+    </nz-form-control>
+  </nz-form-item>
+  
+
+
+</form>
+
+
+
+
+
+
+
+

+ 26 - 0
projects/textbook/src/modules/nav-author/components/create/basic/basic.component.scss

@@ -0,0 +1,26 @@
+.entry{
+  font-family: PingFang SC;
+  min-height: 500px;
+  // border: 1px solid;
+  .basic-row{
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    width: 100%;
+  }
+  .tips{
+    margin-top: 10px;
+    padding: 10px;
+    background: #3e49b314;
+    border-radius: 6px;
+  }
+}
+.footer{
+  display: flex;
+  margin: 10px auto;
+  align-items: center;
+  justify-content: space-evenly;
+  // width: 200px;
+  justify-content: end;
+  // padding-right: 100px;
+}

+ 24 - 0
projects/textbook/src/modules/nav-author/components/create/basic/basic.component.spec.ts

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

+ 404 - 0
projects/textbook/src/modules/nav-author/components/create/basic/basic.component.ts

@@ -0,0 +1,404 @@
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+import { languages } from '../../../../../services/languages.map';
+import { CommonCompModule } from '../../../../../services/common.modules';
+import { NzSelectModule } from 'ng-zorro-antd/select';
+import { ReactiveFormsModule } from '@angular/forms';
+import { NzRadioModule } from 'ng-zorro-antd/radio';
+import { NzUploadModule } from 'ng-zorro-antd/upload';
+import { NzTagModule } from 'ng-zorro-antd/tag';
+import { NzMessageService } from 'ng-zorro-antd/message';
+import { NzModalService } from 'ng-zorro-antd/modal';
+import { textbookServer } from '../../../../../services/textbook'
+import Parse from 'parse';
+import {
+  FormControl,
+  FormGroup,
+  NonNullableFormBuilder,
+  Validators,
+} from '@angular/forms';
+import { CompUploadComponent } from '../../../../../app/comp-upload/comp-upload.component';
+import { NzInputModule } from 'ng-zorro-antd/input';
+import * as major from '../../../../../services/majors4.map'
+import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';
+
+
+@Component({
+  selector: 'app-one',
+  templateUrl: './basic.component.html',
+  styleUrls: ['./basic.component.scss'],
+  standalone: true,
+  imports: [
+    CommonCompModule,
+    ReactiveFormsModule,
+    NzSelectModule,
+    NzRadioModule,
+    NzUploadModule,
+    NzInputModule,
+    NzTagModule,
+    CompUploadComponent,
+    NzCheckboxModule,
+  ],
+})
+export class BasicComponent implements OnInit {
+
+  @Input('eduTextbook') eduTextbook: Parse.Object | any;
+  @Input('editFrom') editFrom: any;
+  @Output() state: EventEmitter<any> = new EventEmitter<any>();
+  @Output() save: EventEmitter<any> = new EventEmitter<any>();
+
+  changeCode() { }
+  getCode(e: any) { }
+
+  /***教材获批截图 */
+  approvedImgList: Array<any> = [{
+    name: '获批截图',
+    status: 'done',
+    url: ''
+  }]
+  /**
+   * 书号自动补全函数
+   * @param isbn 书号
+   */
+  async autoCompleteByISBN() {
+    let isbn = this.validateForm.value?.ISBN;
+    let result = await Parse.Cloud.run("tbookISBN", {
+      isbn: isbn
+    })
+    if (!result?.isbn) {
+      this.msg.warning('未找到该书号的图书信息,请手动填写')
+    }
+
+    // 其他字段,需补充接口与数据库对应关系
+    this.validateForm.get("title")?.setValue(result?.book_name)
+    this.validateForm.get("author")?.setValue(result?.author_name)
+    this.validateForm.get("authors")?.setValue(result?.author)
+    this.validateForm.get("majorPoniter")?.setValue(result?.major)
+    this.validateForm.get("lang")?.setValue(languages.options?.[result?.languages]?.name)
+    this.validateForm.get("editionUnit")?.setValue(result?.publisher)
+    this.validateForm.get("editionDate")?.setValue(new Date(result?.publish_time))
+    this.validateForm.get("carrierShape")?.setValue(result?.publication_class)
+
+    console.log(result)
+  }
+  /**出版时间及版次不可选择时间 */
+  disabledEditionDate = (current: Date): boolean => {
+    return current < new Date(2022, 11, 1)
+  }
+  /** 全册次数*/
+  typeNumber: number = 2
+  typeNumberChange() {
+    if (this.typeNumber < 2) {
+      this.msg.create('warning', '不得小于两册')
+      this.typeNumber = 2
+    }
+  }
+  validateForm: FormGroup<{
+    title: FormControl<string>; //申报教材名称
+    ISBN: FormControl<any>; //国际标准书号
+    author: FormControl<string>; //第一主编(作者)
+    unit: FormControl<string>; //第一主编(作者)单位
+    unitType: FormControl<string>//第一主编(作者)单位类型
+    type: FormControl<string>; //申报类型
+    majorPoniter: FormControl<string>; //教材应用对象及所诉学科专业类
+    lang: FormControl<string>; //教材主要语种类型
+    authors: FormControl<string>; //其他主编姓名
+    editor: FormControl<string>; //其他编者姓名
+    approval: FormControl<string>; //是否为重点立项教材
+    editionUnit: FormControl<string>; //出版单位
+    editionFirst: FormControl<Date>; //初版时间
+    carrierShape: FormControl<string>; //载体形式
+    editionDate: FormControl<Date>; //出版时间
+    editionNumber: FormControl<number>; //出版版次
+    printDate: FormControl<Date>; //最新印次时间
+    printNumber: FormControl<number>; //最新印次
+    printSum: FormControl<number>; //初版以来合计印数
+    importantProjectOther: FormControl<string>; //其他省部级及以上项目
+    approvedImgUrl: FormControl<string>//重点立项教材获批截图
+  }> = this.fb.group({
+    title: ['', [Validators.required]],
+    ISBN: [null, [Validators.required]],
+    author: ['', [Validators.required]],
+    unit: ['', [Validators.required]],
+    type: ['', [Validators.required]],
+    majorPoniter: ['', [Validators.required]],
+    lang: ['', [Validators.required]],
+    authors: [''],
+    editor: [''],
+    approval: ['', [Validators.required]],
+    editionUnit: ['', [Validators.required]],
+    editionFirst: [new Date(), [Validators.required]],
+    carrierShape: ['', [Validators.required]],
+    editionDate: [new Date(), [Validators.required]],
+    editionNumber: [0, [Validators.required]],
+    printDate: [new Date(), [Validators.required]],
+    printNumber: [0, [Validators.required]],
+    printSum: [0, [Validators.required]],
+    importantProjectOther: [''],
+    approvedImgUrl: [''],
+    unitType: ['', [Validators.required]],
+  });
+  /** 所属学科专业类显示数量*/
+  nzOptionOverflowSize = 5
+  //教材应用对象及所诉学科专业类
+  selectList = major.majors.options
+  //语言选择
+  selectLang: Array<any> = languages.options;
+  //可选单位类型
+  unitSelects: Array<any> = [
+    {
+      name: '部属高校',
+      code: '部属高校',
+    },
+    {
+      name: '部省合建高校',
+      code: '部省合建高校',
+    },
+    {
+      name: '省部共建高校',
+      code: '省部共建高校',
+    },
+    {
+      name: '其他',
+      code: '其他',
+    },
+  ];
+  //载体形式
+  carrierOptions: Array<any> = [
+    {
+      name: '纸质教材',
+      code: 'Z001',
+    },
+    {
+      name: '电子教材',
+      code: 'Z002',
+    },
+    {
+      name: '纸质教材附带电子资源',
+      code: 'Z003',
+    },
+  ];
+  /**可选的重点项目 */
+  importantProjectList: Array<any> = [
+    {
+      label: '首届全国教材建设奖全国优秀教材(高等教育类)',
+      value: '首届全国教材建设奖全国优秀教材(高等教育类)',
+      checked: false
+    },
+    {
+      label: '“十二五”普通高等教育本科国家级规划教材',
+      value: '“十二五”普通高等教育本科国家级规划教材',
+      checked: false
+    },
+    {
+      label: '“十二五”以来省级优秀教材',
+      value: '“十二五”以来省级优秀教材',
+      checked: false
+    },
+    {
+      label: '“十二五”以来省级规划教材',
+      value: '“十二五”以来省级规划教材',
+      checked: false
+    },
+    {
+      label: '其他省部级及以上项目',
+      value: '其他省部级及以上项目',
+      checked: false
+    },
+  ];
+  /**选中的重点项目 */
+  importantProject: Array<any> = []
+  /**多选框改变 */
+  changeImportantProject() {
+    let checkedList = this.importantProjectList.filter(item => item.checked) || []
+    this.importantProject = checkedList.map(item => item.value)
+    console.log(this.importantProject)
+  }
+  /* 是否重点立项教材可选列表 */
+  options: Array<any> = [
+    {
+      name: '经中央有关部门审定的教材',
+      code: '经中央有关部门审定的教材',
+    },
+    {
+      name: '首届全国教材建设奖优秀教材(高等教育类)教材',
+      code: '首届全国教材建设奖优秀教材(高等教育类)教材',
+    },
+    {
+      name: '“101计划”核心教材',
+      code: '“101计划”核心教材',
+    },
+    {
+      name: '“四新”重点建设教材(含战略性新兴领域教材)',
+      code: '“四新”重点建设教材(含战略性新兴领域教材)',
+    },
+    {
+      name: '否',
+      code: '否',
+    }
+  ];
+
+  constructor(
+    public tbookSer: textbookServer,
+    private fb: NonNullableFormBuilder,
+    private modal: NzModalService,
+    private msg: NzMessageService,
+  ) {
+  }
+
+  isShowChooseEU: boolean = true
+  ngOnInit() {
+    if (this.eduTextbook?.get('editionUnit')) {
+      this.isShowChooseEU = false
+    }
+    this.importantProject = this.eduTextbook?.get('importantProject') || []
+    if (this.importantProject?.length > 0) {
+      for (let i in this.importantProjectList) {
+        if (this.importantProject.indexOf(this.importantProjectList[i].value) != -1) {
+          this.importantProjectList[i].checked = true
+        }
+      }
+    }
+
+    this.approvedImgList[0].url = this.eduTextbook?.get('approvedImgUrl')
+    this.typeNumber = this.eduTextbook?.get('typeNumber') || 2
+    console.log(this.eduTextbook);
+    this.validateForm = this.fb.group({
+      title: [this.eduTextbook?.get('title') || '', [Validators.required]],
+      ISBN: [parseInt(this.eduTextbook?.get('ISBN') || '') || null, [Validators.required]],
+      author: [this.eduTextbook?.get('author') || '', [Validators.required]],
+      unit: [this.eduTextbook?.get('unit') || '', [Validators.required]],
+      type: [this.eduTextbook?.get('type') || '全册', [Validators.required]],
+      majorPoniter: [this.eduTextbook?.get('majorPoniter')?.code || '', [Validators.required]],
+      lang: [this.eduTextbook?.get('lang') || '', [Validators.required]],
+      authors: [this.eduTextbook?.get('authors') || ''],
+      editor: [this.eduTextbook?.get('editor') || '',],
+      approval: [this.eduTextbook?.get('approval') || '', [Validators.required]],
+      editionUnit: [this.eduTextbook?.get('editionUnit') || '', [Validators.required]],
+      editionFirst: [this.eduTextbook?.get('editionFirst') || new Date(), [Validators.required]],
+      carrierShape: [this.eduTextbook?.get('carrierShape') || '', [Validators.required]],
+      editionDate: [this.eduTextbook?.get('editionDate') || new Date(), [Validators.required]],
+      editionNumber: [this.eduTextbook?.get('editionNumber') || 0, [Validators.required]],
+      printDate: [this.eduTextbook?.get('printDate') || new Date(), [Validators.required]],
+      printNumber: [this.eduTextbook?.get('printNumber') || 0, [Validators.required]],
+      printSum: [this.eduTextbook?.get('printSum') || 0, [Validators.required]],
+      importantProjectOther: [this.eduTextbook?.get('importantProjectOther') || ''],
+      approvedImgUrl: [this.eduTextbook?.get('approvedImgUrl') || ''],
+      unitType: [this.eduTextbook?.get('unitType') || '', [Validators.required]],
+    });
+  }
+
+  upload(e: any, type: string) {
+    console.log(e);
+    let file = e[0];
+    if (type == 'approvedImgUrl') {
+      this.validateForm.value[type] = file?.url
+    }
+    console.log(this.validateForm.value)
+  }
+  async submitForm(event?: string): Promise<void> {
+    console.log(this.validateForm.value);
+    console.log(this.validateForm.valid);
+    if (this.validateForm.valid) {
+      let params = this.validateForm.value
+      if (event == 'next') {
+        await this.saveEduTextbook(params, this.validateForm.valid)
+        this.state.emit({ type: 'next', textBook: this.eduTextbook });
+      }
+    } else {
+      if (event == 'save') {
+        let params = this.validateForm.value
+        await this.saveEduTextbook(params, this.validateForm.valid)
+        this.modal.success({
+          nzTitle: '保存成功',
+          nzContent: '<p>已保存并且至空间</p>',
+          nzOnOk: () => console.log('Info OK')
+        });
+        return
+      }
+      if (event == 'next') {
+        let params = this.validateForm.value
+        await this.saveEduTextbook(params, this.validateForm.valid)
+        this.state.emit({ type: 'next', textBook: this.eduTextbook });
+      }
+    }
+    if (event == 'save') {
+      let params = this.validateForm.value
+      await this.saveEduTextbook(params, this.validateForm.valid)
+      this.modal.success({
+        nzTitle: '保存成功',
+        nzContent: '<p>已保存并且至空间</p>',
+        nzOnOk: () => console.log('Info OK')
+      });
+    }
+  }
+
+  async saveEduTextbook(params: any, isComplete: boolean) {
+    this.changeImportantProject()
+    console.log(params);
+    if (!this.eduTextbook) {
+      let obj = Parse.Object.extend('EduTextbook');
+      this.eduTextbook = new obj();
+    }
+    //如果填写未完整,仅保存,状态修改待完善101
+    if (this.eduTextbook.get('status') == '102' && !isComplete) {
+      this.eduTextbook?.set('status', '101');
+      this.eduTextbook.set('complete', false)
+    } else if (!this.eduTextbook.get('status')) {
+      this.eduTextbook?.set('status', '101');
+    }
+    this.eduTextbook?.set('user', Parse.User.current()?.toPointer());
+    this.eduTextbook?.set('company', {
+      __type: 'Pointer',
+      className: 'Company',
+      objectId: this.tbookSer.company,
+    });
+    this.eduTextbook?.set('title', params.title);
+    this.eduTextbook?.set('ISBN', (params.ISBN || 0).toString());
+    this.eduTextbook?.set('author', params.author);
+    this.eduTextbook?.set('unit', params.unit);
+    this.eduTextbook?.set('type', params.type);
+    this.eduTextbook?.set('typeNumber', this.typeNumber);
+    let majorPoniter = this.selectList.find((item) => item.code == params.majorPoniter);
+    this.eduTextbook?.set('majorPoniter', majorPoniter);
+    this.eduTextbook?.set('lang', params.lang);
+    this.eduTextbook?.set('authors', params.authors);
+    this.eduTextbook?.set('editor', params.editor);
+    this.eduTextbook?.set('approval', params.approval);
+    this.eduTextbook?.set('editionUnit', params.editionUnit);
+    this.eduTextbook?.set('editionFirst', params.editionFirst);
+    this.eduTextbook?.set('carrierShape', params.carrierShape);
+    this.eduTextbook?.set('editionDate', params.editionDate);
+    this.eduTextbook?.set('editionNumber', params.editionNumber);
+    this.eduTextbook?.set('printDate', params.printDate);
+    this.eduTextbook?.set('printNumber', params.printNumber);
+    this.eduTextbook?.set('printSum', params.printSum);
+    this.eduTextbook?.set('importantProject', this.importantProject);
+    this.eduTextbook?.set('importantProjectOther', params.importantProjectOther);
+    this.eduTextbook?.set('approvedImgUrl', params.approvedImgUrl)
+    this.eduTextbook?.set('unitType', params.unitType)
+    await this.eduTextbook?.save();
+    return
+  }
+  selectedValue = null;
+  listOfOption: Array<{ value: string; text: string }> = [];
+  nzFilterOption = (): boolean => true;
+  eduTimeout: any
+  /**出版单位列表 */
+  eduList: Array<Parse.Object> = []
+  /**搜索出版单位 */
+  async search(value: string) {
+    clearTimeout(this.eduTimeout)
+    this.eduTimeout = setTimeout(async () => {
+      let query = new Parse.Query('Department')
+      query.notEqualTo('isDeleted', true)
+      query.equalTo('parent', '66865d66ad23a23355b12aa7')
+      query.contains('name', value)
+      query.limit(10)
+      this.eduList = await query.find()
+    }, 500);
+
+  }
+  openFile(url: any) {
+    window.open(url)
+  }
+}