textbook-pertain.component.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. <div class="entry">
  2. <form
  3. nz-form
  4. [formGroup]="validateForm"
  5. class="login-form"
  6. (ngSubmit)="submitForm()"
  7. >
  8. <div class="first-head">
  9. <div nz-row>
  10. <div nz-col nzSpan="12">
  11. <nz-form-item class="row" style="margin-bottom: 16px">
  12. <nz-form-label
  13. class="label"
  14. [nzNoColon]="true"
  15. [nzSm]="16"
  16. [nzXs]="16"
  17. nzRequired
  18. >适用专业代码(六位)及名称</nz-form-label
  19. >
  20. <nz-form-control
  21. class="val"
  22. nzErrorTip="适用专业代码(六位)及名称"
  23. style="width: 100%"
  24. >
  25. <nz-select
  26. style="width: 80%"
  27. nzShowSearch
  28. nzAllowClear
  29. nzPlaceHolder="填写 6 位专业代码选择"
  30. formControlName="major"
  31. >
  32. @for(major of selectList; track major?.code;let index = $index){
  33. <nz-option
  34. nzCustomContent
  35. [nzValue]="major?.code"
  36. [nzLabel]="major?.name + '-' + major?.code"
  37. >
  38. <div>{{ major?.name }}</div>
  39. <div style="font-size: 12px; color: gray">
  40. {{ major?.code }}
  41. </div>
  42. </nz-option>
  43. }
  44. </nz-select>
  45. </nz-form-control>
  46. </nz-form-item>
  47. <nz-form-item class="row" style="margin-bottom: 16px">
  48. <nz-form-label
  49. class="label"
  50. [nzNoColon]="true"
  51. [nzSm]="8"
  52. [nzXs]="8"
  53. nzRequired
  54. >课程学时</nz-form-label
  55. >
  56. <nz-form-control
  57. class="val"
  58. nzErrorTip="请填写课程学时"
  59. style="width: 100%"
  60. >
  61. <nz-input-group
  62. style="width: 80%"
  63. [nzSuffix]="suffixTemplateInfo"
  64. >
  65. <nz-input-number
  66. style="width: 100%"
  67. placeholder="填写学时数"
  68. nzBorderless
  69. [nzPrecision]="0"
  70. formControlName="period"
  71. [nzMin]="1"
  72. [nzStep]="1"
  73. ></nz-input-number>
  74. </nz-input-group>
  75. <ng-template #suffixTemplateInfo> 学时 </ng-template>
  76. </nz-form-control>
  77. </nz-form-item>
  78. </div>
  79. <div nz-col nzSpan="12">
  80. <nz-form-item class="row" style="margin-bottom: 16px">
  81. <nz-form-label
  82. class="label"
  83. [nzNoColon]="true"
  84. [nzSm]="6"
  85. [nzXs]="6"
  86. nzRequired
  87. >适用课程</nz-form-label
  88. >
  89. <nz-form-control
  90. class="val"
  91. nzErrorTip="请填写适用课程"
  92. style="width: 100%"
  93. >
  94. <input
  95. type="text"
  96. formControlName="lessons"
  97. nz-input
  98. placeholder="填写适用课程名称,多门课程名称使用“;”分隔"
  99. />
  100. </nz-form-control>
  101. </nz-form-item>
  102. <nz-form-item class="row" style="margin-bottom: 16px">
  103. <nz-form-label
  104. class="label"
  105. [nzNoColon]="true"
  106. [nzSm]="6"
  107. [nzXs]="6"
  108. nzRequired
  109. >适用课程性质</nz-form-label
  110. >
  111. <nz-form-control
  112. class="val"
  113. nzErrorTip="请选择适用课程性质"
  114. style="width: 100%"
  115. >
  116. <nz-checkbox-wrapper class="check">
  117. <div nz-row>
  118. @for (checkItem of checkOptionsOne; track $index) {
  119. <label
  120. [ngModelOptions]="{ standalone: true }"
  121. nz-checkbox
  122. [nzValue]="checkItem.value"
  123. [(ngModel)]="checkItem.checked"
  124. >{{ checkItem.value }}</label
  125. >
  126. }
  127. </div>
  128. </nz-checkbox-wrapper>
  129. <nz-radio-group
  130. class="check"
  131. [ngModelOptions]="{ standalone: true }"
  132. [(ngModel)]="checkTwo"
  133. (ngModelChange)="changeRadio()"
  134. >
  135. @for (checkItem of checkOptionsTwo; track $index) {
  136. <label nz-radio [nzValue]="checkItem.value">{{
  137. checkItem.label
  138. }}</label>
  139. }
  140. </nz-radio-group>
  141. <nz-checkbox-wrapper class="check">
  142. <div nz-row>
  143. @for (checkItem of checkOptionsThree; track $index) {
  144. <label
  145. [ngModelOptions]="{ standalone: true }"
  146. nz-checkbox
  147. [nzValue]="checkItem.value"
  148. [(ngModel)]="checkItem.checked"
  149. >{{ checkItem.value }}</label
  150. >
  151. } (如不涉及,此行可不选)
  152. </div>
  153. </nz-checkbox-wrapper>
  154. </nz-form-control>
  155. </nz-form-item>
  156. <!-- <nz-form-item class="row" style="margin-bottom: 16px">
  157. <nz-form-label class="label" [nzNoColon]="true" [nzSm]="6" [nzXs]="6" nzRequired>适用课程性质</nz-form-label>
  158. <nz-form-control class="val" nzErrorTip="请选择适用课程性质" style="width: 100%">
  159. <nz-checkbox-group [(ngModel)]="checkOptionsOne" formControlName="characteristic"></nz-checkbox-group>
  160. <nz-checkbox-group [(ngModel)]="checkOptionsOne" formControlName="characteristic"></nz-checkbox-group>
  161. </nz-form-control>
  162. </nz-form-item> -->
  163. </div>
  164. </div>
  165. </div>
  166. <!-- <div class="author-content">
  167. <div class="nav">作者信息</div>
  168. <nz-form-label class="title" [nzNoColon]="true" [nzSm]="24" [nzXs]="24" nzRequired>
  169. <span style="font-size: 16px">
  170. 作者(含主编,不超过 6 人,教材中明确出现姓名)
  171. </span>
  172. </nz-form-label>
  173. <nz-table #basicTable [nzData]="authorList" [nzScroll]="{ x: (maxWidth || '1200') + 'px' }">
  174. <thead>
  175. <tr>
  176. <th nzWidth="80px" nzLeft nzAlign="right">序号</th>
  177. <th nzWidth="160px" nzLeft>姓名</th>
  178. <th nzWidth="160px">单位</th>
  179. <th nzWidth="160px">出生年月</th>
  180. <th nzWidth="160px">国籍</th>
  181. <th nzWidth="160px">职务</th>
  182. <th nzWidth="160px">职称</th>
  183. <th nzWidth="300px">手机号码</th>
  184. <th nzWidth="160px">电子邮箱</th>
  185. <th nzWidth="160px">分工</th>
  186. <th nzWidth="100px" nzRight>操作</th>
  187. </tr>
  188. </thead>
  189. <tbody>
  190. @for (data of authorList; track data.mobile;let index = $index) {
  191. <tr>
  192. <td nzLeft nzAlign="right">{{ index + 1 }}</td>
  193. <td nzLeft>
  194. <input nz-input placeholder="请输入作者姓名" [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.name"
  195. nzStatus="" />
  196. </td>
  197. <td>
  198. <input nz-input placeholder="请输入作者单位" [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.unit"
  199. nzStatus="" />
  200. </td>
  201. <td>
  202. <nz-date-picker nzMode="month" [ngModelOptions]="{ standalone: true }"
  203. [(ngModel)]="data.birth"></nz-date-picker>
  204. </td>
  205. <td>
  206. <input nz-input placeholder="请输入作者国籍" [ngModelOptions]="{ standalone: true }"
  207. [(ngModel)]="data.nationality" nzStatus="" />
  208. </td>
  209. <td>
  210. <input nz-input placeholder="请输入作者职务" [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.job"
  211. nzStatus="" />
  212. </td>
  213. <td>
  214. <input nz-input placeholder="请输入作者职称" [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.title"
  215. nzStatus="" />
  216. </td>
  217. <td>
  218. <nz-input-group nzCompact>
  219. <nz-select style="width: 90px;" [ngModelOptions]="{ standalone: true }" [ngModel]="'+86'">
  220. <nz-option [nzLabel]="'+0000'" [nzValue]="'+0000'"></nz-option>
  221. <nz-option [nzLabel]="'+86'" [nzValue]="'+86'"></nz-option>
  222. </nz-select>
  223. <input type="number" nz-input placeholder="请输入作者手机号码" [ngModelOptions]="{ standalone: true }"
  224. [(ngModel)]="data.mobile" nzStatus="" style="width: 160px;"/>
  225. </nz-input-group>
  226. </td>
  227. <td>
  228. <input nz-input placeholder="请输入作者邮箱" [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.email"
  229. nzStatus="" />
  230. </td>
  231. <td>
  232. <nz-select style="width: 80%" nzShowSearch nzAllowClear nzPlaceHolder="请选择分工"
  233. [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.work">
  234. @for(work of workOptions; track work){
  235. <nz-option nzCustomContent [nzValue]="work" [nzLabel]="work">{{
  236. work
  237. }}</nz-option>
  238. }
  239. </nz-select>
  240. </td>
  241. <td nzRight>
  242. <a (click)="onPush('authorList', index)"><span nz-icon style="font-size: 20px; margin-right: 10px"
  243. nzType="plus-circle" nzTheme="outline"></span></a>
  244. <a (click)="onDel('authorList', index)"><span nz-icon style="font-size: 20px" nzType="delete"
  245. nzTheme="outline"></span></a>
  246. </td>
  247. </tr>
  248. }
  249. </tbody>
  250. </nz-table>
  251. </div>
  252. <div class="author-content">
  253. <div class="nav">第一主编(作者)情况</div>
  254. <nz-form-item class="row" style="margin-bottom: 16px">
  255. <nz-form-label class="title" [nzNoColon]="true" [nzSm]="24" [nzXs]="24" nzRequired>
  256. <span style="font-size: 16px"> 相关教学经历 </span>
  257. </nz-form-label>
  258. <nz-form-control class="val" nzErrorTip="请输入第一主编(作者)承担学校教学任务、开展教学研究情况、教材编写情况以及取得的教学成果" style="width: 100%">
  259. <nz-textarea-count [nzMaxCharacterCount]="500">
  260. <textarea rows="4" maxlength="500" formControlName="authorDetails" placeholder="请输入第一主编(作者)承担学校教学任务、开展教学研究情况、教材编写情况以及取得的教学成果"
  261. nz-input></textarea>
  262. </nz-textarea-count>
  263. </nz-form-control>
  264. </nz-form-item>
  265. </div>
  266. <div class="author-content">
  267. <nz-form-label class="title" [nzNoColon]="true" [nzSm]="24" [nzXs]="24" nzRequired>
  268. <span style="font-size: 16px">
  269. 相关科学研究项目、成果或论文专著(限5项)
  270. </span>
  271. </nz-form-label>
  272. <nz-table #basicTable [nzData]="achievementOptions" [nzScroll]="{ x: (maxWidth || '1200') + 'px' }">
  273. <thead>
  274. <tr>
  275. <th nzWidth="80px" nzLeft nzAlign="right">序号</th>
  276. <th nzWidth="220px" nzLeft>名称</th>
  277. <th nzWidth="180px">来源/出版单位</th>
  278. <th nzWidth="120px">时间</th>
  279. <th nzWidth="80px" nzRight>操作</th>
  280. </tr>
  281. </thead>
  282. <tbody>
  283. @for (data of achievementOptions; track data.name;let index = $index)
  284. {
  285. <tr>
  286. <td nzLeft nzAlign="right">{{ index + 1 }}</td>
  287. <td nzLeft>
  288. <input nz-input placeholder="请输入项目/成果/论文名称" [ngModelOptions]="{ standalone: true }"
  289. [(ngModel)]="data.name" nzStatus="" />
  290. </td>
  291. <td>
  292. <input nz-input placeholder="请输入单位名称" [ngModelOptions]="{ standalone: true }" [(ngModel)]="data.unit"
  293. nzStatus="" />
  294. </td>
  295. <td>
  296. <nz-date-picker nzMode="month" [ngModelOptions]="{ standalone: true }"
  297. [(ngModel)]="data.date"></nz-date-picker>
  298. </td>
  299. <td nzRight>
  300. <a (click)="onPush('achievementOptions', index)"><span nz-icon style="font-size: 20px; margin-right: 10px"
  301. nzType="plus-circle" nzTheme="outline"></span></a>
  302. <a (click)="onDel('achievementOptions', index)"><span nz-icon style="font-size: 20px" nzType="delete"
  303. nzTheme="outline"></span></a>
  304. </td>
  305. </tr>
  306. }
  307. </tbody>
  308. </nz-table>
  309. </div> -->
  310. <div class="black">
  311. <div class="nav">作者信息</div>
  312. @if (eduTextbook?.get('type')=='全册') {
  313. <nz-collapse [nzBordered]="false">
  314. @for (panel of eduTextbook?.get('childrens'); track panel) {
  315. <nz-collapse-panel
  316. #p
  317. [nzHeader]="title"
  318. [nzActive]="false"
  319. nzExpandedIcon="caret-right"
  320. style="
  321. background: #f7f7f7;
  322. border-radius: 4px;
  323. margin-bottom: 24px;
  324. border: 0px;
  325. "
  326. >
  327. <ng-template #title>
  328. <span class="panel-title">{{ "分册" + ($index + 1) }}</span>
  329. </ng-template>
  330. <div class="">
  331. <app-author
  332. #children
  333. [eduTextbook]="eduTextbook?.id"
  334. [eduTextbookVolume]="panel"
  335. ></app-author>
  336. </div>
  337. <ng-template #expandedIcon let-active>
  338. {{ active }}
  339. <span
  340. nz-icon
  341. nzType="caret-right"
  342. class="ant-collapse-arrow"
  343. [nzRotate]="p.nzActive ? 90 : -90"
  344. ></span>
  345. </ng-template>
  346. </nz-collapse-panel>
  347. }
  348. </nz-collapse>
  349. } @else {
  350. <app-author
  351. #children
  352. [eduTextbookVolume]="eduTextbook?.get('childrens')[0]"
  353. ></app-author>
  354. }
  355. <!-- <mat-accordion class="example-headers-align" multi>
  356. @if(eduTextbook?.get('type')=='全册'){ @for (item of
  357. eduTextbook?.get('childrens'); track $index) {
  358. <mat-expansion-panel>
  359. <mat-expansion-panel-header>
  360. <mat-panel-title>
  361. <b>分册{{ $index + 1 }}</b>
  362. </mat-panel-title>
  363. </mat-expansion-panel-header>
  364. <app-author
  365. #children
  366. [eduTextbook]="eduTextbook?.id"
  367. [eduTextbookVolume]="item"
  368. ></app-author>
  369. </mat-expansion-panel>
  370. } } @else {
  371. <app-author
  372. #children
  373. [eduTextbookVolume]="eduTextbook?.get('childrens')[0]"
  374. ></app-author>
  375. }
  376. </mat-accordion> -->
  377. </div>
  378. </form>
  379. </div>
  380. <div
  381. style="
  382. width: 100%;
  383. display: flex;
  384. justify-content: flex-end;
  385. padding: 30px 0 0;
  386. "
  387. >
  388. <!-- <a (click)="downloadFile()">
  389. <span nz-icon nzType="download" nzTheme="outline"></span>
  390. 下载本页所有附件模板
  391. </a> -->
  392. <div class="footer">
  393. <div>
  394. <button
  395. nz-button
  396. nzType="default"
  397. style="margin-right: 20px"
  398. (click)="submitForm('save')"
  399. >
  400. 保存本页
  401. </button>
  402. <button
  403. nz-button
  404. nzType="default"
  405. style="margin-right: 20px"
  406. (click)="submitForm('pre')"
  407. >
  408. 上一页
  409. </button>
  410. <button
  411. nz-button
  412. nzType="primary"
  413. style="background: #3e49b3; border: 1px #3e49b3"
  414. (click)="submitForm('next')"
  415. >
  416. 下一页
  417. </button>
  418. </div>
  419. </div>
  420. </div>
  421. <div class="loading" [hidden]="!loading">
  422. <nz-spin nzSimple [nzSize]="'large'"></nz-spin>
  423. </div>