GenPaperDetail.vue 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320
  1. <template>
  2. <div v-loading="fullscreenLoading" element-loading-text="正在组卷中...">
  3. <div class="tabs">
  4. <el-form
  5. :inline="true"
  6. :model="genPaper"
  7. label-position="right"
  8. label-width="100px"
  9. >
  10. <el-row>
  11. <el-col :span="6">
  12. <el-form-item label="课程代码" class="form-item">
  13. <el-input
  14. class="search_width"
  15. :disabled="true"
  16. placeholder="课程代码"
  17. v-model="genPaper.courseNo"
  18. ></el-input>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :span="6">
  22. <el-form-item label="课程名称" class="form-item">
  23. <el-input
  24. class="search_width"
  25. :disabled="true"
  26. placeholder="课程名称"
  27. v-model="genPaper.courseName"
  28. ></el-input>
  29. </el-form-item>
  30. </el-col>
  31. <el-col :span="6">
  32. <el-form-item label="试卷名称" class="form-item">
  33. <el-input
  34. class="search_width"
  35. placeholder="试卷名称"
  36. v-model="genPaper.paperName"
  37. ></el-input>
  38. </el-form-item>
  39. </el-col>
  40. <el-col :span="6">
  41. <el-form-item label="组卷套数" class="form-item">
  42. <el-input
  43. class="search_width"
  44. placeholder="组卷套数"
  45. :disabled="genModelType == 'M-Type'"
  46. v-model="genPaper.genNumber"
  47. ></el-input>
  48. </el-form-item>
  49. </el-col>
  50. </el-row>
  51. <el-row>
  52. <el-col :span="24">
  53. <el-form-item label="组卷模式" class="form-item">
  54. <el-radio-group
  55. v-model="genModelType"
  56. @change="genModelTypeChange"
  57. >
  58. <el-radio label="A-Type">自动组卷</el-radio>
  59. <el-radio label="M-Type">手动组卷</el-radio>
  60. </el-radio-group>
  61. </el-form-item>
  62. </el-col>
  63. </el-row>
  64. </el-form>
  65. </div>
  66. <div v-show="genModelType == 'A-Type'">
  67. <div class="tabs">
  68. <el-tabs v-model="tabs">
  69. <el-tab-pane label="步骤一:组卷模式选择" name="first">
  70. <el-radio-group
  71. class="pull-left"
  72. v-model="genType"
  73. @change="genTypeChange"
  74. >
  75. <el-radio label="SIMPLE">简易成卷</el-radio>
  76. <el-radio label="NORMAL">精确成卷</el-radio>
  77. <el-radio label="BLUE">蓝图成卷</el-radio>
  78. </el-radio-group>
  79. </el-tab-pane>
  80. </el-tabs>
  81. </div>
  82. <div class="tabs">
  83. <el-tabs v-model="tabs">
  84. <el-tab-pane label="步骤二:题源选择" name="first">
  85. <div style="width: 50%;" v-show="genType == 'SIMPLE'">
  86. <el-form
  87. :inline="true"
  88. label-position="right"
  89. label-width="100px"
  90. >
  91. <el-form-item label="题源选择" class="form-item">
  92. <el-select
  93. @change="changePaperType"
  94. v-model="paperType"
  95. clearable
  96. placeholder="题源选择"
  97. style="width: 120px;"
  98. >
  99. <el-option label="题库来源" value="IMPORT"></el-option>
  100. <el-option label="卷库来源" value="GENERATE"></el-option>
  101. </el-select>
  102. </el-form-item>
  103. </el-form>
  104. <el-table
  105. v-loading="loading"
  106. :data="selectPapers"
  107. border
  108. @selection-change="selectChange"
  109. >
  110. <el-table-column type="selection" width="55"></el-table-column>
  111. <el-table-column label="名称" width="200">
  112. <template slot-scope="scope">
  113. <div>
  114. <span>{{ scope.row.name }}</span>
  115. </div>
  116. </template>
  117. </el-table-column>
  118. <el-table-column label="总分" width="100">
  119. <template slot-scope="scope">
  120. <div>
  121. <span>{{ scope.row.totalScore }}</span>
  122. </div>
  123. </template>
  124. </el-table-column>
  125. <el-table-column label="小题数量">
  126. <template slot-scope="scope">
  127. <div>
  128. <span>{{ scope.row.unitCount }}</span>
  129. </div>
  130. </template>
  131. </el-table-column>
  132. </el-table>
  133. <div class="page pull-right">
  134. <el-pagination
  135. @current-change="selectCurrentChange"
  136. :current-page="curSelect"
  137. :page-size="pageSize"
  138. layout="total, prev, pager, next, jumper"
  139. :total="totalSelect"
  140. >
  141. </el-pagination>
  142. </div>
  143. </div>
  144. <!-- 精确组卷题源 -->
  145. <div
  146. style="width: 50%; overflow: auto;"
  147. v-show="genType == 'NORMAL'"
  148. >
  149. <el-form
  150. :inline="true"
  151. label-position="right"
  152. label-width="100px"
  153. >
  154. <el-form-item label="题源选择" class="form-item">
  155. <el-select
  156. @change="changePaperType"
  157. v-model="paperType"
  158. clearable
  159. placeholder="题源选择"
  160. style="width: 120px;"
  161. >
  162. <el-option label="题库来源" value="IMPORT"></el-option>
  163. <el-option label="卷库来源" value="GENERATE"></el-option>
  164. </el-select>
  165. </el-form-item>
  166. </el-form>
  167. <el-table
  168. v-loading="loading"
  169. :data="selectPapers"
  170. border
  171. @selection-change="selectChange"
  172. >
  173. <el-table-column type="selection" width="55"></el-table-column>
  174. <el-table-column label="名称" width="200">
  175. <template slot-scope="scope">
  176. <div>
  177. <span>{{ scope.row.name }}</span>
  178. </div>
  179. </template>
  180. </el-table-column>
  181. <el-table-column label="总分" width="100">
  182. <template slot-scope="scope">
  183. <div>
  184. <span>{{ scope.row.totalScore }}</span>
  185. </div>
  186. </template>
  187. </el-table-column>
  188. <el-table-column label="小题数量">
  189. <template slot-scope="scope">
  190. <div>
  191. <span>{{ scope.row.unitCount }}</span>
  192. </div>
  193. </template>
  194. </el-table-column>
  195. </el-table>
  196. <div class="page pull-right">
  197. <el-pagination
  198. @current-change="selectCurrentChange"
  199. :current-page="curSelect"
  200. :page-size="pageSize"
  201. layout="total, prev, pager, next, jumper"
  202. :total="totalSelect"
  203. >
  204. </el-pagination>
  205. </div>
  206. <el-form
  207. :inline="true"
  208. label-position="right"
  209. label-width="100px"
  210. >
  211. <el-form-item
  212. label="选中试卷列表"
  213. class="form-item"
  214. ></el-form-item>
  215. </el-form>
  216. <el-table :data="selectedPapers" border>
  217. <el-table-column label="名称" width="200">
  218. <template slot-scope="scope">
  219. <div>
  220. <span>{{ scope.row.name }}</span>
  221. </div>
  222. </template>
  223. </el-table-column>
  224. <el-table-column label="操作">
  225. <template slot-scope="scope">
  226. <div>
  227. <el-button
  228. type="danger"
  229. size="mini"
  230. @click="removeSelected(scope.row.id)"
  231. >移除</el-button
  232. >
  233. </div>
  234. </template>
  235. </el-table-column>
  236. </el-table>
  237. </div>
  238. <!-- 蓝图组卷题源 -->
  239. <div style="width: 50%; overflow: auto;" v-show="genType == 'BLUE'">
  240. <el-form
  241. :inline="true"
  242. label-position="right"
  243. label-width="100px"
  244. >
  245. <el-form-item label="题源选择" class="form-item">
  246. <el-select
  247. @change="changePaperType"
  248. v-model="paperType"
  249. clearable
  250. placeholder="题源选择"
  251. style="width: 120px;"
  252. >
  253. <el-option label="题库来源" value="IMPORT"></el-option>
  254. <el-option label="卷库来源" value="GENERATE"></el-option>
  255. </el-select>
  256. </el-form-item>
  257. </el-form>
  258. <el-table
  259. v-loading="loading"
  260. :data="selectPapers"
  261. border
  262. @selection-change="selectChange"
  263. >
  264. <el-table-column type="selection" width="55"></el-table-column>
  265. <el-table-column label="名称" width="200">
  266. <template slot-scope="scope">
  267. <div>
  268. <span>{{ scope.row.name }}</span>
  269. </div>
  270. </template>
  271. </el-table-column>
  272. <el-table-column label="总分" width="100">
  273. <template slot-scope="scope">
  274. <div>
  275. <span>{{ scope.row.totalScore }}</span>
  276. </div>
  277. </template>
  278. </el-table-column>
  279. <el-table-column label="小题数量">
  280. <template slot-scope="scope">
  281. <div>
  282. <span>{{ scope.row.unitCount }}</span>
  283. </div>
  284. </template>
  285. </el-table-column>
  286. </el-table>
  287. <div class="page pull-right">
  288. <el-pagination
  289. @current-change="selectCurrentChange"
  290. :current-page="curSelect"
  291. :page-size="pageSize"
  292. layout="total, prev, pager, next, jumper"
  293. :total="totalSelect"
  294. >
  295. </el-pagination>
  296. </div>
  297. <el-form
  298. :inline="true"
  299. label-position="right"
  300. label-width="100px"
  301. >
  302. <el-form-item
  303. label="选中试卷列表"
  304. class="form-item"
  305. ></el-form-item>
  306. </el-form>
  307. <el-table :data="selectedPapers" border>
  308. <el-table-column label="名称" width="200">
  309. <template slot-scope="scope">
  310. <div>
  311. <span>{{ scope.row.name }}</span>
  312. </div>
  313. </template>
  314. </el-table-column>
  315. <el-table-column label="操作">
  316. <template slot-scope="scope">
  317. <div>
  318. <el-button
  319. type="danger"
  320. size="mini"
  321. @click="removeSelected(scope.row.id)"
  322. >移除</el-button
  323. >
  324. </div>
  325. </template>
  326. </el-table-column>
  327. </el-table>
  328. </div>
  329. </el-tab-pane>
  330. </el-tabs>
  331. </div>
  332. <div class="tabs">
  333. <el-tabs v-model="tabs">
  334. <el-tab-pane label="步骤三:确定构成" name="first">
  335. <!-- 简易 -->
  336. <div
  337. style="width: 98%; overflow: auto;"
  338. v-show="genType == 'SIMPLE'"
  339. >
  340. <el-form
  341. :inline="true"
  342. label-position="right"
  343. label-width="100px"
  344. >
  345. <el-form-item label="抽取策略" class="form-item">
  346. <el-select
  347. v-model="genPaper.simpleGenPaperPolicy"
  348. clearable
  349. placeholder="抽取策略"
  350. >
  351. <el-option
  352. v-for="item in simpleGenPaperPolicys"
  353. :label="item.label"
  354. :value="item.value"
  355. :key="item.value"
  356. >
  357. </el-option>
  358. </el-select>
  359. </el-form-item>
  360. </el-form>
  361. <el-table :data="tempPapers" border>
  362. <el-table-column label="名称" width="140">
  363. <template slot-scope="scope">
  364. <div>
  365. <span>{{ scope.row.name }}</span>
  366. </div>
  367. </template>
  368. </el-table-column>
  369. <el-table-column label="总分" width="80">
  370. <template slot-scope="scope">
  371. <div>
  372. <span>{{ scope.row.totalScore }}</span>
  373. </div>
  374. </template>
  375. </el-table-column>
  376. <el-table-column label="小题数量" width="80">
  377. <template slot-scope="scope">
  378. <div>
  379. <span>{{ scope.row.unitCount }}</span>
  380. </div>
  381. </template>
  382. </el-table-column>
  383. <!-- 新增公开度和难度 -->
  384. <el-table-column label="公开(简单)" width="100">
  385. <template slot-scope="scope">
  386. <div
  387. @mouseenter="showActiveIn(1, 1, scope.row)"
  388. @mouseleave="showActiveOff"
  389. >
  390. <el-tooltip placement="top">
  391. <div slot="content">{{ message }}</div>
  392. <span
  393. ><el-input
  394. v-model="scope.row.publicSimple"
  395. @change="
  396. sum(
  397. scope.row,
  398. scope.row.publicSimple,
  399. 'publicSimple'
  400. )
  401. "
  402. ></el-input
  403. ></span>
  404. </el-tooltip>
  405. </div>
  406. </template>
  407. </el-table-column>
  408. <el-table-column label="公开(中等)" width="100">
  409. <template slot-scope="scope">
  410. <div
  411. @mouseenter="showActiveIn(1, 2, scope.row)"
  412. @mouseleave="showActiveOff"
  413. >
  414. <el-tooltip placement="top">
  415. <div slot="content">{{ message }}</div>
  416. <span
  417. ><el-input
  418. v-model="scope.row.publicMedium"
  419. @change="
  420. sum(
  421. scope.row,
  422. scope.row.publicMedium,
  423. 'publicMedium'
  424. )
  425. "
  426. ></el-input
  427. ></span>
  428. </el-tooltip>
  429. </div>
  430. </template>
  431. </el-table-column>
  432. <el-table-column label="公开(困难)" width="100">
  433. <template slot-scope="scope">
  434. <div
  435. @mouseenter="showActiveIn(1, 3, scope.row)"
  436. @mouseleave="showActiveOff"
  437. >
  438. <el-tooltip placement="top">
  439. <div slot="content">{{ message }}</div>
  440. <span
  441. ><el-input
  442. v-model="scope.row.publicDifficulty"
  443. @change="
  444. sum(
  445. scope.row,
  446. scope.row.publicDifficulty,
  447. 'publicDifficulty'
  448. )
  449. "
  450. ></el-input
  451. ></span>
  452. </el-tooltip>
  453. </div>
  454. </template>
  455. </el-table-column>
  456. <el-table-column label="非公开(简单)" width="100">
  457. <template slot-scope="scope">
  458. <div
  459. @mouseenter="showActiveIn(0, 1, scope.row)"
  460. @mouseleave="showActiveOff"
  461. >
  462. <el-tooltip placement="top">
  463. <div slot="content">{{ message }}</div>
  464. <span
  465. ><el-input
  466. v-model="scope.row.noPublicSimple"
  467. @change="
  468. sum(
  469. scope.row,
  470. scope.row.noPublicSimple,
  471. 'noPublicSimple'
  472. )
  473. "
  474. ></el-input
  475. ></span>
  476. </el-tooltip>
  477. </div>
  478. </template>
  479. </el-table-column>
  480. <el-table-column label="非公开(中等)" width="100">
  481. <template slot-scope="scope">
  482. <div
  483. @mouseenter="showActiveIn(0, 2, scope.row)"
  484. @mouseleave="showActiveOff"
  485. >
  486. <el-tooltip placement="top">
  487. <div slot="content">{{ message }}</div>
  488. <span
  489. ><el-input
  490. v-model="scope.row.noPublicMedium"
  491. @change="
  492. sum(
  493. scope.row,
  494. scope.row.noPublicMedium,
  495. 'noPublicMedium'
  496. )
  497. "
  498. ></el-input
  499. ></span>
  500. </el-tooltip>
  501. </div>
  502. </template>
  503. </el-table-column>
  504. <el-table-column label="非公开(困难)" width="100">
  505. <template slot-scope="scope">
  506. <div
  507. @mouseenter="showActiveIn(0, 3, scope.row)"
  508. @mouseleave="showActiveOff"
  509. >
  510. <el-tooltip placement="top">
  511. <div slot="content">{{ message }}</div>
  512. <span
  513. ><el-input
  514. v-model="scope.row.noPublicDifficulty"
  515. @change="
  516. sum(
  517. scope.row,
  518. scope.row.noPublicDifficulty,
  519. 'noPublicDifficulty'
  520. )
  521. "
  522. ></el-input
  523. ></span>
  524. </el-tooltip>
  525. </div>
  526. </template>
  527. </el-table-column>
  528. <!-- 总数求和 -->
  529. <el-table-column :label="setName()" width="100">
  530. <template slot-scope="scope">
  531. <div>
  532. <span
  533. ><el-input
  534. placeholder="抽取数值"
  535. v-model="scope.row.count"
  536. :disabled="true"
  537. ></el-input
  538. ></span>
  539. </div>
  540. </template>
  541. </el-table-column>
  542. <el-table-column label="操作">
  543. <template slot-scope="scope">
  544. <div>
  545. <el-button
  546. type="danger"
  547. size="mini"
  548. @click="removeSelected(scope.row.id)"
  549. >移除</el-button
  550. >
  551. </div>
  552. </template>
  553. </el-table-column>
  554. </el-table>
  555. </div>
  556. <!-- 精确 -->
  557. <div
  558. style="width: 50%; overflow: auto;"
  559. v-show="genType == 'NORMAL'"
  560. >
  561. <el-form
  562. :inline="true"
  563. label-position="right"
  564. label-width="100px"
  565. >
  566. <el-form-item label="试卷结构" class="form-item">
  567. <el-select
  568. @change="changePaperStruct"
  569. v-model="genPaper.paperStructId"
  570. clearable
  571. placeholder="试卷结构"
  572. >
  573. <el-option
  574. v-for="item in exactStructs"
  575. :label="item.name"
  576. :value="item.id"
  577. :key="item.id"
  578. >
  579. </el-option>
  580. </el-select>
  581. </el-form-item>
  582. </el-form>
  583. <el-table :data="paperDetailStructs" border>
  584. <el-table-column label="名称" width="250">
  585. <template slot-scope="scope">
  586. <div>
  587. <span>{{ scope.row.name }}</span>
  588. </div>
  589. </template>
  590. </el-table-column>
  591. <el-table-column label="总分" width="100">
  592. <template slot-scope="scope">
  593. <div>
  594. <span>{{ scope.row.totalScore }}</span>
  595. </div>
  596. </template>
  597. </el-table-column>
  598. <el-table-column label="题量">
  599. <template slot-scope="scope">
  600. <div>
  601. <span>{{ scope.row.detailCount }}</span>
  602. </div>
  603. </template>
  604. </el-table-column>
  605. </el-table>
  606. </div>
  607. <!-- 蓝图 -->
  608. <div style="width: 50%; overflow: auto;" v-show="genType == 'BLUE'">
  609. <el-form
  610. :inline="true"
  611. label-position="right"
  612. label-width="100px"
  613. >
  614. <el-form-item label="试卷结构" class="form-item">
  615. <el-select
  616. @change="changePaperStruct"
  617. v-model="genPaper.paperStructId"
  618. clearable
  619. placeholder="试卷结构"
  620. style="width: 120px;"
  621. >
  622. <el-option
  623. v-for="item in blueStructs"
  624. :label="item.name"
  625. :value="item.id"
  626. :key="item.id"
  627. >
  628. </el-option>
  629. </el-select>
  630. </el-form-item>
  631. <el-form-item label="难度">
  632. <el-input
  633. v-model="difficulty"
  634. style="width: 50px;"
  635. disabled
  636. ></el-input>
  637. </el-form-item>
  638. </el-form>
  639. <el-table :data="paperDetailStructs" border>
  640. <el-table-column label="名称" width="250">
  641. <template slot-scope="scope">
  642. <div>
  643. <span>{{ scope.row.name }}</span>
  644. </div>
  645. </template>
  646. </el-table-column>
  647. <el-table-column label="总分" width="100">
  648. <template slot-scope="scope">
  649. <div>
  650. <span>{{ scope.row.totalScore }}</span>
  651. </div>
  652. </template>
  653. </el-table-column>
  654. <el-table-column label="题量">
  655. <template slot-scope="scope">
  656. <div>
  657. <span>{{ scope.row.detailCount }}</span>
  658. </div>
  659. </template>
  660. </el-table-column>
  661. </el-table>
  662. </div>
  663. </el-tab-pane>
  664. </el-tabs>
  665. <div class="pull-right">
  666. <el-button type="primary" icon="check" @click="confirmGenPaper"
  667. >确定</el-button
  668. >
  669. <el-button type="primary" icon="caret-left" @click="back"
  670. ><i class="el-icon-arrow-left"></i> 返 回</el-button
  671. >
  672. </div>
  673. </div>
  674. </div>
  675. <div v-show="genModelType == 'M-Type'">
  676. <div style="width: 50%; overflow: auto;">
  677. <el-form :inline="true" label-position="right" label-width="100px">
  678. <el-form-item label="试卷结构" class="form-item">
  679. <el-select
  680. @change="changePaperStruct"
  681. v-model="genPaper.paperStructId"
  682. clearable
  683. placeholder="试卷结构"
  684. >
  685. <el-option
  686. v-for="item in exactStructs"
  687. :label="item.name"
  688. :value="item.id"
  689. :key="item.id"
  690. >
  691. </el-option>
  692. </el-select>
  693. </el-form-item>
  694. </el-form>
  695. <el-table :data="paperDetailStructs" border>
  696. <el-table-column label="名称" width="250">
  697. <template slot-scope="scope">
  698. <div>
  699. <span>{{ scope.row.name }}</span>
  700. </div>
  701. </template>
  702. </el-table-column>
  703. <el-table-column label="总分" width="100">
  704. <template slot-scope="scope">
  705. <div>
  706. <span>{{ scope.row.totalScore }}</span>
  707. </div>
  708. </template>
  709. </el-table-column>
  710. <el-table-column label="题量">
  711. <template slot-scope="scope">
  712. <div>
  713. <span>{{ scope.row.detailCount }}</span>
  714. </div>
  715. </template>
  716. </el-table-column>
  717. </el-table>
  718. </div>
  719. <div class="pull-right">
  720. <el-button type="primary" icon="check" @click="confirmGenPaperMType"
  721. >确定</el-button
  722. >
  723. <el-button type="primary" icon="caret-left" @click="back"
  724. ><i class="el-icon-arrow-left"></i> 返 回</el-button
  725. >
  726. </div>
  727. </div>
  728. </div>
  729. </template>
  730. <script>
  731. import { QUESTION_API } from "@/constants/constants";
  732. export default {
  733. data() {
  734. return {
  735. tabs: "first",
  736. genType: "SIMPLE",
  737. genModelType: "A-Type",
  738. genPaper: {
  739. courseNo: "",
  740. courseName: "",
  741. level: "",
  742. paperName: "",
  743. paperIds: [],
  744. genNumber: "",
  745. paperStructId: "",
  746. simpleParams: {},
  747. simpleGenPaperPolicy: "BY_QUESTIONNUM"
  748. },
  749. simpleGenPaperPolicys: [
  750. { label: "按试题数量抽取", value: "BY_QUESTIONNUM" },
  751. { label: "按试题分数抽取", value: "BY_SCORE" }
  752. ],
  753. tempPapers: [],
  754. tempPaperIds: [],
  755. selectPapers: [],
  756. selectAllPapers: [],
  757. paperStructs: [],
  758. paperDetailStructs: [],
  759. blueStructs: [], //蓝图组卷
  760. exactStructs: [], //精确组卷
  761. curSelect: 1,
  762. totalSelect: 10,
  763. pageSize: 10,
  764. loading: false,
  765. fullscreenLoading: false,
  766. difficulty: "",
  767. coursePropertyList: [],
  768. paperType: "IMPORT",
  769. selectedNPapers: [],
  770. message: ""
  771. };
  772. },
  773. methods: {
  774. setName() {
  775. if (this.genPaper.simpleGenPaperPolicy == "BY_QUESTIONNUM") {
  776. return "抽取数量";
  777. } else {
  778. return "抽取分数";
  779. }
  780. },
  781. genModelTypeChange() {
  782. if (this.genModelType == "M-Type") {
  783. this.genPaper.genNumber = "1";
  784. }
  785. },
  786. genTypeChange() {
  787. this.curSelect = 1;
  788. this.tempPapers = [];
  789. this.paperIds = [];
  790. this.genPaper.paperStructId = "";
  791. //this.genPaper.simpleGenPaperPolicy = '';
  792. this.tempPaperIds = [];
  793. this.paperDetailStructs = [];
  794. this.searchPaper();
  795. },
  796. selectChange(val) {
  797. console.log("val123:");
  798. val.forEach(element => {
  799. element.publicSimple = 0;
  800. element.publicMedium = 0;
  801. element.publicDifficulty = 0;
  802. element.noPublicSimple = 0;
  803. element.noPublicMedium = 0;
  804. element.noPublicDifficulty = 0;
  805. element.count = 0;
  806. this.tempPapers.push(element);
  807. this.tempPaperIds.push(element.id);
  808. });
  809. this.searchPaper();
  810. },
  811. searchPaper() {
  812. this.loading = true;
  813. if (this.paperType == "IMPORT") {
  814. this.$http
  815. .get(
  816. QUESTION_API +
  817. "/importPaper/" +
  818. this.tempPaperIds +
  819. "/" +
  820. this.curSelect +
  821. "/" +
  822. this.pageSize +
  823. "?courseNo=" +
  824. this.genPaper.courseNo
  825. )
  826. .then(response => {
  827. console.log("response:", response);
  828. this.selectPapers = response.data.content;
  829. this.totalSelect = response.data.totalElements;
  830. this.loading = false;
  831. });
  832. } else if (this.paperType == "GENERATE") {
  833. this.$http
  834. .get(
  835. QUESTION_API +
  836. "/genPaper/" +
  837. this.tempPaperIds +
  838. "/" +
  839. this.curSelect +
  840. "/" +
  841. this.pageSize +
  842. "?courseNo=" +
  843. this.genPaper.courseNo
  844. )
  845. .then(response => {
  846. this.selectPapers = response.data.content;
  847. this.totalSelect = response.data.totalElements;
  848. this.loading = false;
  849. });
  850. } else {
  851. console.log("空值");
  852. this.selectPapers = [];
  853. this.totalSelect = 0;
  854. this.loading = false;
  855. }
  856. },
  857. changePaperStruct() {
  858. this.paperDetailStructs = [];
  859. this.searchPaperDetailStructs();
  860. },
  861. searchPaperStructs() {
  862. console.log("bbb");
  863. var courseNo = this.genPaper.courseNo;
  864. var url = QUESTION_API + "/paperStruct?courseNo=" + courseNo;
  865. this.loading = true;
  866. this.$http.get(url).then(response => {
  867. this.paperStructs = response.data;
  868. for (let paperStructObj of this.paperStructs) {
  869. if (paperStructObj.paperStrucType == "BLUEPRINT") {
  870. for (let couProperty of this.coursePropertyList) {
  871. if (couProperty.id == paperStructObj.coursePropertyId) {
  872. this.blueStructs.push(paperStructObj);
  873. }
  874. }
  875. } else {
  876. this.exactStructs.push(paperStructObj);
  877. }
  878. }
  879. this.loading = false;
  880. });
  881. },
  882. searchPaperDetailStructs() {
  883. console.log("this.genPaper.paperStructId:", this.genPaper.paperStructId);
  884. for (let paperStruct of this.paperStructs) {
  885. if (paperStruct.id == this.genPaper.paperStructId) {
  886. this.paperDetailStructs = paperStruct.paperDetailStructs;
  887. this.difficulty = paperStruct.difficulty;
  888. break;
  889. }
  890. }
  891. },
  892. checkGenPaper() {
  893. if (!this.genPaper.paperName) {
  894. this.$notify({
  895. message: "试卷名称不能为空!",
  896. type: "error"
  897. });
  898. return false;
  899. }
  900. var numReg = /^[1-9]\d*$/;
  901. if (!this.genPaper.genNumber) {
  902. this.$notify({
  903. message: "请输入需要组卷套数!",
  904. type: "error"
  905. });
  906. return false;
  907. }
  908. if (
  909. !numReg.test(this.genPaper.genNumber) ||
  910. parseInt(this.genPaper.genNumber) >= 100
  911. ) {
  912. this.$notify({
  913. message: "组卷套数必须为1-99之间的整数!",
  914. type: "error"
  915. });
  916. return false;
  917. }
  918. if (this.genType == "SIMPLE" && this.selectedIds.length == 0) {
  919. this.$notify({
  920. message: "请选择题源范围!",
  921. type: "error"
  922. });
  923. return false;
  924. }
  925. if (this.genType == "NORMAL") {
  926. if (!this.selectedIds || this.selectedIds.length == 0) {
  927. this.$notify({
  928. message: "请选择题源范围!",
  929. type: "error"
  930. });
  931. return false;
  932. } else if (this.paperDetailStructs.length == 0) {
  933. this.$notify({
  934. message: "请选择试卷结构!",
  935. type: "error"
  936. });
  937. return false;
  938. }
  939. }
  940. if (this.genType == "BLUE") {
  941. if (!this.selectedIds || this.selectedIds.length == 0) {
  942. this.$notify({
  943. message: "请选择题源范围!",
  944. type: "error"
  945. });
  946. return false;
  947. } else if (this.paperDetailStructs.length == 0) {
  948. this.$notify({
  949. message: "请选择试卷结构!",
  950. type: "error"
  951. });
  952. return false;
  953. }
  954. }
  955. return true;
  956. },
  957. confirmGenPaperMType() {
  958. if (!this.genPaper.paperName) {
  959. this.$notify({
  960. message: "试卷名称不能为空!",
  961. type: "error"
  962. });
  963. return false;
  964. }
  965. if (this.paperDetailStructs.length == 0) {
  966. this.$notify({
  967. message: "请选择试卷结构!",
  968. type: "error"
  969. });
  970. return false;
  971. }
  972. var url = QUESTION_API + "/genPaper/manual";
  973. this.fullscreenLoading = true;
  974. this.$http.post(url, this.genPaper).then(
  975. response => {
  976. this.$notify({
  977. message: "组卷成功",
  978. type: "success"
  979. });
  980. this.fullscreenLoading = false;
  981. let paperId = response.data.paper.id;
  982. this.$router.push({
  983. path: "/edit_paper/" + paperId + "/gen_paper"
  984. });
  985. },
  986. error => {
  987. this.$notify({
  988. message: error.response.data.msg,
  989. type: "error"
  990. });
  991. this.fullscreenLoading = false;
  992. }
  993. );
  994. },
  995. confirmGenPaper() {
  996. if (!this.checkGenPaper()) {
  997. return false;
  998. } else {
  999. var url = "";
  1000. if (this.genType == "SIMPLE") {
  1001. url = QUESTION_API + "/genPaper/simple";
  1002. } else if (this.genType == "NORMAL") {
  1003. url = QUESTION_API + "/genPaper/normal";
  1004. } else {
  1005. url = QUESTION_API + "/genPaper/blue";
  1006. }
  1007. if (!this.setSimpleParams()) {
  1008. return;
  1009. }
  1010. this.fullscreenLoading = true;
  1011. this.genPaper.paperIds = this.selectedIds;
  1012. this.$http.post(url, this.genPaper).then(
  1013. response => {
  1014. this.$notify({
  1015. message: "组卷成功",
  1016. type: "success"
  1017. });
  1018. this.fullscreenLoading = false;
  1019. if (this.genPaper.genNumber == 1) {
  1020. let paperId = response.data.paper.id;
  1021. this.$router.push({
  1022. path: "/edit_paper/" + paperId + "/gen_paper"
  1023. });
  1024. } else {
  1025. this.back();
  1026. }
  1027. },
  1028. error => {
  1029. this.$notify({
  1030. message: error.response.data.msg,
  1031. type: "error"
  1032. });
  1033. this.fullscreenLoading = false;
  1034. }
  1035. );
  1036. }
  1037. },
  1038. selectCurrentChange(val) {
  1039. this.curSelect = val;
  1040. this.searchPaper();
  1041. },
  1042. back() {
  1043. this.$router.push({ path: "/questions/gen_paper/1" });
  1044. },
  1045. removePaper(id) {
  1046. for (let [index, paper] of this.selectPapers.entries()) {
  1047. if (id == paper.id) {
  1048. this.selectPapers.splice(index, 1);
  1049. break;
  1050. }
  1051. }
  1052. },
  1053. removeSelected(id) {
  1054. for (let [index, paper] of this.tempPapers.entries()) {
  1055. if (id == paper.id) {
  1056. this.tempPapers.splice(index, 1);
  1057. this.selectPapers.push(paper);
  1058. break;
  1059. }
  1060. }
  1061. for (var i = 0; i < this.tempPaperIds.length; i++) {
  1062. if (this.tempPaperIds[i] == id) {
  1063. this.tempPaperIds.splice(i, 1);
  1064. break;
  1065. }
  1066. }
  1067. this.searchPaper();
  1068. },
  1069. setSimpleParams() {
  1070. var simpleParams = new Object();
  1071. for (let paper of this.tempPapers) {
  1072. console.log("paper", paper);
  1073. if (this.genPaper.simpleGenPaperPolicy == "BY_SCORE") {
  1074. if (!this.isNumber(paper.publicSimple)) {
  1075. this.$notify({
  1076. message: "“抽取策略”中的“抽取分数”列要为正数!",
  1077. type: "error"
  1078. });
  1079. return false;
  1080. }
  1081. if (!this.isNumber(paper.publicMedium)) {
  1082. this.$notify({
  1083. message: "“抽取策略”中的“抽取分数”列要为正数!",
  1084. type: "error"
  1085. });
  1086. return false;
  1087. }
  1088. if (!this.isNumber(paper.publicDifficulty)) {
  1089. this.$notify({
  1090. message: "“抽取策略”中的“抽取分数”列要为正数!",
  1091. type: "error"
  1092. });
  1093. return false;
  1094. }
  1095. if (!this.isNumber(paper.noPublicSimple)) {
  1096. this.$notify({
  1097. message: "“抽取策略”中的“抽取分数”列要为正数!",
  1098. type: "error"
  1099. });
  1100. return false;
  1101. }
  1102. if (!this.isNumber(paper.noPublicMedium)) {
  1103. this.$notify({
  1104. message: "“抽取策略”中的“抽取分数”列要为正数!",
  1105. type: "error"
  1106. });
  1107. return false;
  1108. }
  1109. if (!this.isNumber(paper.noPublicDifficulty)) {
  1110. this.$notify({
  1111. message: "“抽取策略”中的“抽取分数”列要为正数!",
  1112. type: "error"
  1113. });
  1114. return false;
  1115. }
  1116. } else {
  1117. if (!this.isFloat(paper.publicSimple)) {
  1118. this.$notify({
  1119. message: "“抽取策略”中的“抽取数量”列要为正整数!",
  1120. type: "error"
  1121. });
  1122. return false;
  1123. }
  1124. if (!this.isFloat(paper.publicMedium)) {
  1125. this.$notify({
  1126. message: "“抽取策略”中的“抽取数量”列要为正整数!",
  1127. type: "error"
  1128. });
  1129. return false;
  1130. }
  1131. if (!this.isFloat(paper.publicDifficulty)) {
  1132. this.$notify({
  1133. message: "“抽取策略”中的“抽取数量”列要为正整数!",
  1134. type: "error"
  1135. });
  1136. return false;
  1137. }
  1138. if (!this.isFloat(paper.noPublicSimple)) {
  1139. this.$notify({
  1140. message: "“抽取策略”中的“抽取数量”列要为正整数!",
  1141. type: "error"
  1142. });
  1143. return false;
  1144. }
  1145. if (!this.isFloat(paper.noPublicMedium)) {
  1146. this.$notify({
  1147. message: "“抽取策略”中的“抽取数量”列要为正整数!",
  1148. type: "error"
  1149. });
  1150. return false;
  1151. }
  1152. if (!this.isFloat(paper.noPublicDifficulty)) {
  1153. this.$notify({
  1154. message: "“抽取策略”中的“抽取数量”列要为正整数!",
  1155. type: "error"
  1156. });
  1157. return false;
  1158. }
  1159. }
  1160. var numberParams = {};
  1161. (numberParams.publicSimple = paper.publicSimple),
  1162. (numberParams.publicMedium = paper.publicMedium),
  1163. (numberParams.publicDifficulty = paper.publicDifficulty),
  1164. (numberParams.noPublicSimple = paper.noPublicSimple),
  1165. (numberParams.noPublicMedium = paper.noPublicMedium),
  1166. (numberParams.noPublicDifficulty = paper.noPublicDifficulty),
  1167. (numberParams.count = paper.count);
  1168. simpleParams[paper.id] = numberParams;
  1169. }
  1170. this.genPaper.simpleParams = simpleParams;
  1171. console.log("this.genPaper.simpleParams:", this.genPaper.simpleParams);
  1172. return true;
  1173. },
  1174. //查询课程下开启的课程属性
  1175. getCoursePropertyList() {
  1176. var courseNo = this.genPaper.courseNo;
  1177. this.$http
  1178. .get(QUESTION_API + "/courseProperty/enable/" + courseNo)
  1179. .then(response => {
  1180. this.coursePropertyList = response.data;
  1181. this.searchPaperStructs();
  1182. });
  1183. },
  1184. changePaperType() {
  1185. this.curSelect = 1;
  1186. this.tempPapers = [];
  1187. this.tempPaperIds = [];
  1188. this.searchPaper();
  1189. },
  1190. sum(row) {
  1191. setTimeout(function() {
  1192. row.count =
  1193. parseFloat(row.publicSimple) +
  1194. parseFloat(row.publicMedium) +
  1195. parseFloat(row.publicDifficulty) +
  1196. parseFloat(row.noPublicSimple) +
  1197. parseFloat(row.noPublicMedium) +
  1198. parseFloat(row.noPublicDifficulty);
  1199. }, 2);
  1200. },
  1201. //判断是否为正数
  1202. isNumber(num) {
  1203. var reg = /^\d+(?=\.{0,1}\d+$|$)/;
  1204. if (reg.test(num)) {
  1205. return true;
  1206. }
  1207. return false;
  1208. },
  1209. //判断正小数
  1210. isFloat(num) {
  1211. var reg = /^[0-9]+$/;
  1212. if (reg.test(num)) {
  1213. return true;
  1214. }
  1215. return false;
  1216. },
  1217. //判断输入字符串是否为空或者全部都是空格
  1218. isNull(str) {
  1219. if (str == "") {
  1220. return true;
  1221. }
  1222. var regu = "^[ ]+$";
  1223. var re = new RegExp(regu);
  1224. return re.test(str);
  1225. },
  1226. //鼠标悬浮事件
  1227. showActiveIn(publicity, difficulty, row) {
  1228. //console.log('this.genPaper.simpleGenPaperPolicy',row);
  1229. if (this.genPaper.simpleGenPaperPolicy == "BY_QUESTIONNUM") {
  1230. this.$http
  1231. .get(
  1232. QUESTION_API +
  1233. "/paper/questionNumbers/" +
  1234. row.id +
  1235. "/" +
  1236. publicity +
  1237. "/" +
  1238. difficulty
  1239. )
  1240. .then(response => {
  1241. this.message = response.data;
  1242. });
  1243. }
  1244. if (this.genPaper.simpleGenPaperPolicy == "BY_SCORE") {
  1245. this.$http
  1246. .get(
  1247. QUESTION_API +
  1248. "/paper/questionScores/" +
  1249. row.id +
  1250. "/" +
  1251. publicity +
  1252. "/" +
  1253. difficulty
  1254. )
  1255. .then(response => {
  1256. this.message = response.data;
  1257. });
  1258. }
  1259. },
  1260. //鼠标离开事件
  1261. showActiveOff() {
  1262. this.message = "";
  1263. }
  1264. },
  1265. computed: {
  1266. selectedPapers() {
  1267. var selectedPapers = [];
  1268. for (let paper of this.tempPapers) {
  1269. selectedPapers.push({
  1270. id: paper.id,
  1271. name: paper.name,
  1272. totalScore: paper.totalScore,
  1273. unitCount: paper.unitCount,
  1274. simpleParam: ""
  1275. });
  1276. }
  1277. return selectedPapers;
  1278. },
  1279. selectedIds() {
  1280. var selectedIds = [];
  1281. for (let paper of this.selectedPapers) {
  1282. selectedIds.push(paper.id);
  1283. }
  1284. return selectedIds;
  1285. }
  1286. },
  1287. created() {
  1288. this.genPaper.courseNo = this.$route.params.courseNo;
  1289. this.genPaper.courseName = JSON.parse(
  1290. sessionStorage.getItem("gen_paper")
  1291. ).courseName;
  1292. this.genPaper.level = this.$route.params.level;
  1293. this.searchPaper();
  1294. this.getCoursePropertyList();
  1295. }
  1296. };
  1297. </script>
  1298. <style lang="css" scoped>
  1299. .tabs {
  1300. margin-left: 20px;
  1301. margin-bottom: 10px;
  1302. }
  1303. .form-item {
  1304. width: 300px;
  1305. }
  1306. .margin-bottom {
  1307. margin-bottom: 10px;
  1308. }
  1309. .label-margin {
  1310. margin-right: 10px;
  1311. }
  1312. </style>
  1313. <style scoped src="../styles/Common.css"></style>