textbook-pertain.component.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. <div class="entry">
  2. <form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()">
  3. <div class="first-head">
  4. <div nz-row>
  5. <div nz-col nzSpan="12">
  6. <nz-form-item class="row" style="margin-bottom: 16px">
  7. <nz-form-label class="label" [nzNoColon]="true" [nzSm]="16" [nzXs]="16"
  8. nzRequired>适用专业代码(六位)及名称</nz-form-label>
  9. <nz-form-control class="val" nzErrorTip="适用专业代码(六位)及名称" style="width: 100%">
  10. <nz-select style="width: 80%" nzShowSearch nzAllowClear nzPlaceHolder="填写 6 位专业代码选择"
  11. formControlName="major" (ngModelChange)="changeCode()" (nzOnSearch)="getCode($event)">
  12. @for(major of selectList; track major.code;let index = $index){
  13. <nz-option nzCustomContent [nzValue]="major.code" [nzLabel]="major.code">
  14. <div>{{ major.name }}</div>
  15. <div style="font-size: 12px;color: gray;">{{ major.code }}</div>
  16. </nz-option>
  17. }
  18. </nz-select>
  19. </nz-form-control>
  20. </nz-form-item>
  21. <nz-form-item class="row" style="margin-bottom: 16px">
  22. <nz-form-label class="label" [nzNoColon]="true" [nzSm]="8" [nzXs]="8" nzRequired>课程学时</nz-form-label>
  23. <nz-form-control class="val" nzErrorTip="请填写课程学时" style="width: 100%">
  24. <nz-input-group style="width: 80%" [nzSuffix]="suffixTemplateInfo">
  25. <input type="number" formControlName="period" nz-input placeholder="填写学时数" />
  26. </nz-input-group>
  27. <ng-template #suffixTemplateInfo> 学时 </ng-template>
  28. </nz-form-control>
  29. </nz-form-item>
  30. </div>
  31. <div nz-col nzSpan="12">
  32. <nz-form-item class="row" style="margin-bottom: 16px">
  33. <nz-form-label class="label" [nzNoColon]="true" [nzSm]="6" [nzXs]="6" nzRequired>适用课程</nz-form-label>
  34. <nz-form-control class="val" nzErrorTip="请填写适用课程" style="width: 100%">
  35. <input type="text" formControlName="lessons" nz-input placeholder="填写适用课程名称,多门课程名称使用“;”分隔" />
  36. </nz-form-control>
  37. </nz-form-item>
  38. <nz-form-item class="row" style="margin-bottom: 16px">
  39. <nz-form-label class="label" [nzNoColon]="true" [nzSm]="6" [nzXs]="6" nzRequired>适用课程性质</nz-form-label>
  40. <nz-form-control class="val" nzErrorTip="请选择适用课程性质" style="width: 100%">
  41. <nz-checkbox-wrapper style="width: 100%;">
  42. <div nz-row>
  43. @for (checkItem of checkOptionsOne; track $index) {
  44. <label [ngModelOptions]="{standalone: true}" nz-checkbox [nzValue]="checkItem.value" [(ngModel)]="checkItem.checked">{{checkItem.value}}</label>
  45. }
  46. </div>
  47. </nz-checkbox-wrapper>
  48. <nz-radio-group style="margin: 10px 0;" [ngModelOptions]="{standalone: true}" [(ngModel)]="checkTwo" (ngModelChange)="changeRadio()">
  49. @for (checkItem of checkOptionsTwo; track $index) {
  50. <label nz-radio [nzValue]="checkItem.value">{{checkItem.label}}</label>
  51. }
  52. </nz-radio-group>
  53. <nz-checkbox-wrapper style="width: 100%;">
  54. <div nz-row>
  55. @for (checkItem of checkOptionsThree; track $index) {
  56. <label [ngModelOptions]="{standalone: true}" nz-checkbox [nzValue]="checkItem.value" [(ngModel)]="checkItem.checked">{{checkItem.value}}</label>
  57. }
  58. </div>
  59. </nz-checkbox-wrapper>
  60. </nz-form-control>
  61. </nz-form-item>
  62. <!-- <nz-form-item class="row" style="margin-bottom: 16px">
  63. <nz-form-label class="label" [nzNoColon]="true" [nzSm]="6" [nzXs]="6" nzRequired>适用课程性质</nz-form-label>
  64. <nz-form-control class="val" nzErrorTip="请选择适用课程性质" style="width: 100%">
  65. <nz-checkbox-group [(ngModel)]="checkOptionsOne" formControlName="characteristic"></nz-checkbox-group>
  66. <nz-checkbox-group [(ngModel)]="checkOptionsOne" formControlName="characteristic"></nz-checkbox-group>
  67. </nz-form-control>
  68. </nz-form-item> -->
  69. </div>
  70. </div>
  71. </div>
  72. <div class="author-content">
  73. <div class="nav">作者信息</div>
  74. <nz-form-label class="title" [nzNoColon]="true" [nzSm]="24" [nzXs]="24" nzRequired>
  75. <span style="font-size: 16px">
  76. 作者(含主编,不超过 6 人,教材中明确出现姓名)
  77. </span>
  78. </nz-form-label>
  79. <nz-table #basicTable [nzData]="authorList" [nzScroll]="{ x: (maxWidth || '1200') + 'px' }">
  80. <thead>
  81. <tr>
  82. <th nzWidth="80px" nzLeft nzAlign="right">序号</th>
  83. <th nzWidth="160px" nzLeft>姓名</th>
  84. <th nzWidth="160px">单位</th>
  85. <th nzWidth="160px">出生年月</th>
  86. <th nzWidth="160px">国籍</th>
  87. <th nzWidth="160px">职务</th>
  88. <th nzWidth="160px">职称</th>
  89. <th nzWidth="300px">手机号码</th>
  90. <th nzWidth="160px">电子邮箱</th>
  91. <th nzWidth="160px">分工</th>
  92. <th nzWidth="120px" nzRight>
  93. 作者诚信承诺签名
  94. <span style="color: red;">*</span>
  95. </th>
  96. <th nzWidth="120px" nzRight>
  97. 作者政治审查表
  98. <span style="color: red;">*</span>
  99. </th>
  100. <th nzWidth="100px" nzRight>操作</th>
  101. </tr>
  102. </thead>
  103. <tbody>
  104. @for (data of authorList; track data.mobile;let index = $index) {
  105. <tr>
  106. <td nzLeft nzAlign="right">{{ index + 1 }}</td>
  107. <td nzLeft>
  108. <input nz-input placeholder="请输入作者姓名" [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.name"
  109. nzStatus="" />
  110. </td>
  111. <td>
  112. <input nz-input placeholder="请输入作者单位" [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.unit"
  113. nzStatus="" />
  114. </td>
  115. <td>
  116. <nz-date-picker nzMode="month" [ngModelOptions]="{ standalone: true }"
  117. [(ngModel)]="data.birth"></nz-date-picker>
  118. </td>
  119. <td>
  120. <input nz-input placeholder="请输入作者国籍" [ngModelOptions]="{ standalone: true }"
  121. [(ngModel)]="data.nationality" nzStatus="" />
  122. </td>
  123. <td>
  124. <input nz-input placeholder="请输入作者职务" [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.job"
  125. nzStatus="" />
  126. </td>
  127. <td>
  128. <input nz-input placeholder="请输入作者职称" [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.title"
  129. nzStatus="" />
  130. </td>
  131. <td>
  132. <nz-input-group nzCompact>
  133. <nz-select style="width: 90px;" [ngModelOptions]="{ standalone: true }" [ngModel]="'+86'">
  134. <nz-option [nzLabel]="'+0000'" [nzValue]="'+0000'"></nz-option>
  135. <nz-option [nzLabel]="'+86'" [nzValue]="'+86'"></nz-option>
  136. </nz-select>
  137. <input type="number" nz-input placeholder="请输入作者手机号码" [ngModelOptions]="{ standalone: true }"
  138. [(ngModel)]="data.mobile" nzStatus="" style="width: 160px;"/>
  139. </nz-input-group>
  140. </td>
  141. <td>
  142. <input nz-input placeholder="请输入作者邮箱" [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.email"
  143. nzStatus="" />
  144. </td>
  145. <td>
  146. <nz-select style="width: 80%" nzShowSearch nzAllowClear nzPlaceHolder="请选择分工"
  147. [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.work">
  148. @for(work of workOptions; track work){
  149. <nz-option nzCustomContent [nzValue]="work" [nzLabel]="work">{{
  150. work
  151. }}</nz-option>
  152. }
  153. </nz-select>
  154. </td>
  155. <td nzRight>
  156. @if (data.signature) {
  157. <a style="color: #3e49b3;" (click)="openFile(data.signature)">签名文件</a>
  158. }
  159. <app-comp-upload (change)="upload($event, 'signature',index)"></app-comp-upload>
  160. </td>
  161. <td nzRight>
  162. @if (data.examine) {
  163. <a style="color: #3e49b3;" (click)="openFile(data.examine)">政治审查表 </a>
  164. }
  165. <app-comp-upload (change)="upload($event, 'examine',index)"></app-comp-upload>
  166. </td>
  167. <td nzRight>
  168. <a (click)="onPush('authorList', index)"><span nz-icon style="font-size: 20px; margin-right: 10px"
  169. nzType="plus-circle" nzTheme="outline"></span></a>
  170. <a (click)="onDel('authorList', index)"><span nz-icon style="font-size: 20px" nzType="delete"
  171. nzTheme="outline"></span></a>
  172. </td>
  173. </tr>
  174. }
  175. </tbody>
  176. </nz-table>
  177. <p>输入诚信承诺:本人自愿参加此次申报,已认真填写并检查以上材料,保证内容真实。</p>
  178. <input formControlName="accept" nz-input placeholder="请输入承诺内容" />
  179. </div>
  180. <div class="author-content">
  181. <div class="nav">第一主编(作者)情况</div>
  182. <nz-form-item class="row" style="margin-bottom: 16px">
  183. <nz-form-label class="title" [nzNoColon]="true" [nzSm]="24" [nzXs]="24" nzRequired>
  184. <span style="font-size: 16px"> 相关教学经历 </span>
  185. </nz-form-label>
  186. <nz-form-control class="val" nzErrorTip="请输入第一主编(作者)承担学校教学任务、开展教学研究情况、教材编写情况以及取得的教学成果" style="width: 100%">
  187. <nz-textarea-count [nzMaxCharacterCount]="500">
  188. <textarea rows="4" maxlength="500" formControlName="authorDetails" placeholder="请输入第一主编(作者)承担学校教学任务、开展教学研究情况、教材编写情况以及取得的教学成果"
  189. nz-input></textarea>
  190. </nz-textarea-count>
  191. </nz-form-control>
  192. </nz-form-item>
  193. </div>
  194. <div class="author-content">
  195. <nz-form-label class="title" [nzNoColon]="true" [nzSm]="24" [nzXs]="24" nzRequired>
  196. <span style="font-size: 16px">
  197. 相关科学研究项目、成果或论文专著(限5项)
  198. </span>
  199. </nz-form-label>
  200. <nz-table #basicTable [nzData]="achievementOptions" [nzScroll]="{ x: (maxWidth || '1200') + 'px' }">
  201. <thead>
  202. <tr>
  203. <th nzWidth="80px" nzLeft nzAlign="right">序号</th>
  204. <th nzWidth="220px" nzLeft>名称</th>
  205. <th nzWidth="180px">来源/出版单位</th>
  206. <th nzWidth="120px">时间</th>
  207. <th nzWidth="80px" nzRight>操作</th>
  208. </tr>
  209. </thead>
  210. <tbody>
  211. @for (data of achievementOptions; track data.name;let index = $index)
  212. {
  213. <tr>
  214. <td nzLeft nzAlign="right">{{ index + 1 }}</td>
  215. <td nzLeft>
  216. <input nz-input placeholder="请输入项目/成果/论文名称" [ngModelOptions]="{ standalone: true }"
  217. [(ngModel)]="data.name" nzStatus="" />
  218. </td>
  219. <td>
  220. <input nz-input placeholder="请输入单位名称" [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.unit"
  221. nzStatus="" />
  222. </td>
  223. <td>
  224. <nz-date-picker nzMode="month" [ngModelOptions]="{ standalone: true }"
  225. [(ngModel)]="data.date"></nz-date-picker>
  226. </td>
  227. <td nzRight>
  228. <a (click)="onPush('achievementOptions', index)"><span nz-icon style="font-size: 20px; margin-right: 10px"
  229. nzType="plus-circle" nzTheme="outline"></span></a>
  230. <a (click)="onDel('achievementOptions', index)"><span nz-icon style="font-size: 20px" nzType="delete"
  231. nzTheme="outline"></span></a>
  232. </td>
  233. </tr>
  234. }
  235. </tbody>
  236. </nz-table>
  237. </div>
  238. </form>
  239. </div>
  240. <div style="width: 100%;display: flex;justify-content: space-between;padding: 30px;">
  241. <a (click)="downloadFile()">
  242. <span nz-icon nzType="download" nzTheme="outline"></span>
  243. 下载本页所有附件模板
  244. </a>
  245. <div class="footer">
  246. <div>
  247. <button nz-button nzType="default" style="margin-right: 20px" (click)="submitForm('save')">
  248. 保存本页
  249. </button>
  250. <button nz-button nzType="default" style="margin-right: 20px" (click)="submitForm('pre')">
  251. 上一页
  252. </button>
  253. <button nz-button nzType="primary" style="background: #3e49b3; border: 1px #3e49b3" (click)="submitForm('next')">
  254. 下一页
  255. </button>
  256. </div>
  257. </div>
  258. </div>