index.vue 59 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008
  1. <template>
  2. <div id="baseAddPaper">
  3. <el-tabs v-model="activeName" type="card">
  4. <el-tab-pane label="试卷基本信息" name="first"></el-tab-pane>
  5. <el-tab-pane label="试卷题目内容" name="second" disabled></el-tab-pane>
  6. </el-tabs>
  7. <div class="boxWidth" v-show="page === 1">
  8. <el-form
  9. label-position="right"
  10. label-width="120px"
  11. :model="listDataIns"
  12. :rules="rules"
  13. ref="listDataIns"
  14. >
  15. <el-form-item label="适用业务层级" :required="true">
  16. <el-select
  17. v-model="eduType"
  18. placeholder="请选择教育类型"
  19. @change="changeEduType"
  20. >
  21. <el-option
  22. v-for="(item, index) in eduTypeOptions"
  23. :key="index"
  24. :label="item.educationName"
  25. :value="item.id"
  26. >
  27. </el-option>
  28. </el-select>
  29. <el-select
  30. v-model="courType"
  31. placeholder="请选择业务层次"
  32. @change="changecourseType"
  33. >
  34. <el-option
  35. v-for="(item, index) in newCourTypeOptions"
  36. :key="index"
  37. :label="item.projectName + '-' + item.businessName"
  38. :value="item.id"
  39. >
  40. </el-option>
  41. </el-select>
  42. <el-popover
  43. ref="popovers"
  44. placement="bottom"
  45. trigger="click"
  46. @show="showHandle"
  47. @hide="hideHandle"
  48. :disabled="courType && newSujectOption.length ? false : true"
  49. >
  50. <el-radio-group v-model="sujectApis" class="dis_flexbox">
  51. <el-radio
  52. v-for="(item, index) in newSujectOption"
  53. :label="item.newId"
  54. :key="index"
  55. >{{ item.subjectName }}</el-radio
  56. >
  57. </el-radio-group>
  58. <div style="display: block; text-align: center; margin-top: 10px">
  59. <el-button size="mini" type="primary" @click="submitSujectArray"
  60. >确定</el-button
  61. >
  62. </div>
  63. <el-button
  64. slot="reference"
  65. style="margin-left: 12px"
  66. @click="getMessage"
  67. >请选择科目</el-button
  68. >
  69. </el-popover>
  70. </el-form-item>
  71. <el-form-item label="">
  72. <!-- <span v-if="Object.keys(newSujectApis).length == 0"
  73. >未选项目类型</span
  74. > -->
  75. <div
  76. v-if="Object.keys(newSujectApis).length !== 0"
  77. style="display: flex"
  78. >
  79. <div class="listBoxStys">
  80. {{
  81. newSujectApis.educationName +
  82. " - " +
  83. newSujectApis.projectName +
  84. " - " +
  85. newSujectApis.businessName +
  86. " - " +
  87. newSujectApis.subjectName
  88. }}
  89. <i class="el-icon-error closeIcons" @click="closeType"></i>
  90. </div>
  91. </div>
  92. </el-form-item>
  93. <el-form-item label="试卷类型" prop="examPaperId">
  94. <el-select
  95. v-model="listDataIns.examPaperId"
  96. placeholder="请选择试卷类型"
  97. >
  98. <el-option
  99. v-for="item in paperexam"
  100. :key="item.paperId"
  101. :label="item.paperName"
  102. :value="item.paperId"
  103. >
  104. </el-option>
  105. </el-select>
  106. </el-form-item>
  107. <el-form-item label="地域(省)" prop="provinceId">
  108. <el-select
  109. v-model="listDataIns.provinceId"
  110. placeholder="请选择省"
  111. @change="changeCity"
  112. >
  113. <el-option
  114. v-for="item in areas"
  115. :key="item.areaId"
  116. :label="item.areaName"
  117. :value="item.areaId"
  118. >
  119. </el-option>
  120. </el-select>
  121. </el-form-item>
  122. <el-form-item
  123. label="地域(市)"
  124. prop="cityId"
  125. v-if="listDataIns.provinceId"
  126. >
  127. <el-select v-model="listDataIns.cityId" placeholder="请选择市">
  128. <el-option
  129. v-for="item in optionsCity"
  130. :key="item.areaId"
  131. :label="item.areaName"
  132. :value="item.areaId"
  133. >
  134. </el-option>
  135. </el-select>
  136. </el-form-item>
  137. <el-form-item label="年份" prop="year">
  138. <el-date-picker
  139. v-model="listDataIns.year"
  140. type="year"
  141. value-format="yyyy"
  142. placeholder="请选择年份"
  143. >
  144. </el-date-picker>
  145. </el-form-item>
  146. <el-form-item label="标题前缀" prop="prefixName">
  147. <el-input v-model="listDataIns.prefixName"></el-input>
  148. </el-form-item>
  149. <el-form-item label="试卷名称" prop="examName">
  150. <el-input v-model="listDataIns.examName"></el-input>
  151. </el-form-item>
  152. <el-form-item label="是否发布" prop="publishStatus">
  153. <el-radio-group v-model="listDataIns.publishStatus">
  154. <el-radio :label="1">是</el-radio>
  155. <el-radio :label="0">否</el-radio>
  156. </el-radio-group>
  157. </el-form-item>
  158. <el-form-item>
  159. <el-button @click="backPage">取消</el-button>
  160. <el-button type="primary" @click="submitIns('listDataIns')"
  161. >下一步</el-button
  162. >
  163. </el-form-item>
  164. </el-form>
  165. </div>
  166. <div v-show="page === 2">
  167. <table-list
  168. :tableSets="tableSet"
  169. :tableData="tableData"
  170. :navText="navText"
  171. @addClick="openActiveBox"
  172. :loading="loading"
  173. @editInfo="editInfo"
  174. @emitData="emitData"
  175. >
  176. <template slot="btn" slot-scope="props">
  177. <el-button
  178. type="text"
  179. @click="addClick(props.scope.row, 0, props.scope.$index)"
  180. >修改</el-button
  181. >
  182. <el-button
  183. type="text"
  184. @click="del(props.scope.row, props.scope.$index)"
  185. >删除</el-button
  186. >
  187. </template>
  188. </table-list>
  189. <div class="centerStys">
  190. <el-button size="small" type="warning" @click="page = 1"
  191. >上一步</el-button
  192. >
  193. <el-button size="small" @click="backPage">取消</el-button>
  194. <el-button size="small" type="primary" @click="submitTableAllInfos"
  195. >确定</el-button
  196. >
  197. </div>
  198. <el-dialog
  199. width="1080px"
  200. :visible.sync="innerVisiblePaperTopic"
  201. append-to-body
  202. :show-close="false"
  203. :fullscreen="fullscreenChildPaperTopic"
  204. :close-on-click-modal="false"
  205. >
  206. <div slot="title" class="hearders">
  207. <div class="leftTitle">
  208. {{ statusPop === 1 ? "添加" : statusPop === 0 ? "修改" : "详情" }}
  209. </div>
  210. <div class="rightBoxs">
  211. <img
  212. src="@/assets/images/Max@2x.png"
  213. alt=""
  214. @click="fullscreenChildPaperTopic = !fullscreenChildPaperTopic"
  215. />
  216. <img
  217. src="@/assets/images/Close@2x.png"
  218. alt=""
  219. @click="closeBefore"
  220. />
  221. </div>
  222. </div>
  223. <busIns
  224. @amdis="changeAmdis"
  225. ref="sujects"
  226. :typeBus="typeBus"
  227. :sujectApisTable="sujectApisTable"
  228. :newSujectApisTable="newSujectApisTable"
  229. />
  230. <el-form
  231. label-position="right"
  232. label-width="110px"
  233. :model="listData"
  234. ref="listData"
  235. :rules="rulesTest"
  236. >
  237. <el-form-item
  238. v-for="(items, indexs) in listitem"
  239. :key="indexs"
  240. :label="items.label"
  241. :prop="items.prop"
  242. >
  243. <div v-if="items.scope === 'bussing'">
  244. <div v-if="!activeExam.length">请在下面输入框添加知识点</div>
  245. <ul v-else class="BusBoxs">
  246. <li
  247. class="fot_Le"
  248. v-for="(item, index) in activeExam"
  249. :key="index"
  250. >
  251. {{ item.knowledgeName }}
  252. <i
  253. class="el-icon-error icon_clear"
  254. @click="clearBusName(index)"
  255. ></i>
  256. </li>
  257. <div style="clear: both"></div>
  258. </ul>
  259. <el-select
  260. v-model="value"
  261. placeholder="请选择知识点"
  262. @change="changeKnow"
  263. >
  264. <el-option
  265. v-for="item in options"
  266. :key="item.knowledgeId"
  267. :label="item.knowledgeName"
  268. :value="item.knowledgeId"
  269. :disabled="comLs(item)"
  270. >
  271. </el-option>
  272. </el-select>
  273. <el-button @click="addExam">自定义添加</el-button>
  274. </div>
  275. <el-radio-group
  276. v-else-if="items.scope === 'radio'"
  277. v-model="listData[items.prop]"
  278. >
  279. <el-radio :label="1">发布</el-radio>
  280. <el-radio :label="0">未发布</el-radio>
  281. </el-radio-group>
  282. <el-input
  283. v-model="listData[items.prop]"
  284. v-else
  285. ></el-input> </el-form-item
  286. ></el-form>
  287. <questionBank :dingFormInfo="listNums" :nums="1" ref="child" />
  288. <span slot="footer" class="dialog-footer">
  289. <el-button @click="closeBefore">关 闭</el-button>
  290. <el-button
  291. @click="submitForm('listData')"
  292. v-if="statusPop === 1 || statusPop === 0"
  293. >完成</el-button
  294. >
  295. </span>
  296. </el-dialog>
  297. <el-dialog
  298. :visible.sync="dialogVisible"
  299. :append-to-body="true"
  300. width="780px"
  301. :show-close="false"
  302. :close-on-click-modal="false"
  303. >
  304. <div slot="title" class="hearders">
  305. <div class="leftTitle">添加</div>
  306. <div class="rightBoxs">
  307. <img src="@/assets/images/Close@2x.png" alt="" @click="closeBoxs" />
  308. </div>
  309. </div>
  310. <div>
  311. <el-form label-position="right" label-width="110px">
  312. <el-form-item label="知识点">
  313. <div>
  314. <div v-if="!BusNameList.length">请在下面输入框添加知识点</div>
  315. <ul v-else class="BusBoxs">
  316. <li
  317. class="fot_Le"
  318. v-for="(item, index) in BusNameList"
  319. :key="index"
  320. >
  321. {{ item }}
  322. <i
  323. class="el-icon-error icon_clear"
  324. @click="clearBus(index)"
  325. ></i>
  326. </li>
  327. <div style="clear: both"></div>
  328. </ul>
  329. <el-input
  330. style="width: 40%; margin-right: 10px"
  331. v-model="BusName"
  332. ></el-input
  333. ><el-button @click="addBusName">添加</el-button>
  334. </div></el-form-item
  335. ></el-form
  336. >
  337. </div>
  338. <span slot="footer" class="dialog-footer">
  339. <el-button @click="closeBoxs">取 消</el-button>
  340. <el-button type="primary" @click="submit">确 定</el-button>
  341. </span>
  342. </el-dialog>
  343. <el-dialog
  344. :visible.sync="dialogVisibleActive"
  345. width="420px"
  346. :show-close="false"
  347. :close-on-click-modal="false"
  348. >
  349. <div slot="title" class="hearders">
  350. <div class="leftTitle">操作类型</div>
  351. <div class="rightBoxs">
  352. <img
  353. src="@/assets/images/Close@2x.png"
  354. alt=""
  355. @click="closeBoxsActive"
  356. />
  357. </div>
  358. </div>
  359. <div>
  360. <el-radio-group v-model="radioActive">
  361. <el-radio :label="1">自定义</el-radio>
  362. <el-radio :label="2">已有数据池</el-radio>
  363. </el-radio-group>
  364. </div>
  365. <span slot="footer" class="dialog-footer">
  366. <el-button @click="closeBoxsActive">取 消</el-button>
  367. <el-button type="primary" @click="submitActive">确 定</el-button>
  368. </span>
  369. </el-dialog>
  370. <el-dialog
  371. :visible.sync="dialogVisibleTable"
  372. width="960px"
  373. :show-close="false"
  374. :close-on-click-modal="false"
  375. >
  376. <div slot="title" class="hearders">
  377. <div class="leftTitle">题库数据池</div>
  378. <div class="rightBoxs">
  379. <img
  380. src="@/assets/images/Close@2x.png"
  381. alt=""
  382. @click="closeBoxsTable"
  383. />
  384. </div>
  385. </div>
  386. <div>
  387. <el-table
  388. ref="multipleTable"
  389. :data="boxtableData"
  390. border
  391. @select-all="selectAll"
  392. @select="select"
  393. :row-key="getRowKeys"
  394. :header-cell-style="{
  395. 'background-color': '#eee',
  396. padding: '8px',
  397. color: '#333',
  398. }"
  399. >
  400. <el-table-column
  401. align="center"
  402. type="selection"
  403. width="55"
  404. header-align="center"
  405. :selectable="checkboxT"
  406. :reserve-selection="true"
  407. >
  408. </el-table-column>
  409. <template v-for="(item, index) in tableSetTables">
  410. <el-table-column
  411. v-if="item.scope !== 'inputs'"
  412. :width="item.width"
  413. :key="index"
  414. :label="item.label"
  415. align="center"
  416. :show-overflow-tooltip="true"
  417. header-align="center"
  418. >
  419. <template slot-scope="scope">
  420. <span v-if="item.scope === 'Status'">
  421. {{
  422. scope.row[item.prop] === 1
  423. ? "发布"
  424. : scope.row[item.prop] === 0
  425. ? "未发布"
  426. : "未知"
  427. }}
  428. </span>
  429. <span v-else-if="item.scope === 'topic'">{{
  430. scope.row[item.prop] === 1
  431. ? "单选题"
  432. : scope.row[item.prop] === 2
  433. ? "多选题"
  434. : scope.row[item.prop] === 3
  435. ? "判断题"
  436. : scope.row[item.prop] === 4
  437. ? "案例题"
  438. : scope.row[item.prop] === 5
  439. ? "简答题"
  440. : "未知"
  441. }}</span>
  442. <div
  443. class="editInfoSty"
  444. v-else-if="item.scope === 'editInfoHTML'"
  445. >
  446. {{ getSimpleText(scope.row[item.prop]) }}
  447. </div>
  448. <div v-else-if="item.scope === 'knowledge'">
  449. <el-button
  450. type="success"
  451. size="small"
  452. v-for="(items, ks) in scope.row[item.prop]"
  453. :key="ks"
  454. >
  455. {{ items.knowledgeName }}
  456. </el-button>
  457. </div>
  458. <span v-else>{{ scope.row[item.prop] }}</span></template
  459. >
  460. </el-table-column></template
  461. >
  462. </el-table>
  463. <!-- <pagination
  464. :total="total"
  465. :pageSize="pageSize"
  466. :currentPage="currentPage"
  467. @handleSizeChange="handleSizeChange"
  468. @handleCurrentChange="handleCurrentChange"
  469. /> -->
  470. </div>
  471. <span slot="footer" class="dialog-footer">
  472. <el-button @click="closeBoxsTable">取 消</el-button>
  473. <el-button type="primary" @click="submitTable">确 定</el-button>
  474. </span>
  475. </el-dialog>
  476. <el-dialog
  477. :visible.sync="diansBoxStatus"
  478. width="960px"
  479. :show-close="false"
  480. :close-on-click-modal="false"
  481. >
  482. <div slot="title" class="hearders">
  483. <div class="leftTitle">分值设置</div>
  484. <div class="rightBoxs">
  485. <img
  486. src="@/assets/images/Close@2x.png"
  487. alt=""
  488. @click="closePagsInfos"
  489. />
  490. </div>
  491. </div>
  492. <div>
  493. <div class="dis_fos">
  494. <div>
  495. <div class="margin_bs">当前总分:{{ getAllpocis }}</div>
  496. <div class="margin_bs">
  497. 及格分数:<el-input-number
  498. style="margin: 0px 6px; width: 100px !important"
  499. v-model="passScore"
  500. controls-position="right"
  501. :min="0"
  502. size="mini"
  503. ></el-input-number>
  504. </div>
  505. <div class="margin_bs">
  506. 答卷时长:
  507. <el-radio-group v-model="djTimeType">
  508. <el-radio :label="0">无限时长</el-radio>
  509. <el-radio :label="1">有限时长</el-radio>
  510. </el-radio-group>
  511. <el-input-number
  512. v-if="djTimeType === 1"
  513. style="margin: 0px 6px; width: 100px !important"
  514. v-model="djTime"
  515. controls-position="right"
  516. :min="0"
  517. size="mini"
  518. ></el-input-number>
  519. </div>
  520. <div class="margin_bs">
  521. 答卷次数:
  522. <el-radio-group v-model="djNumType">
  523. <el-radio :label="0">无限次</el-radio>
  524. <el-radio :label="1">有限次</el-radio>
  525. </el-radio-group>
  526. <el-input-number
  527. v-if="djNumType === 1"
  528. style="margin: 0px 6px; width: 100px !important"
  529. v-model="djNum"
  530. controls-position="right"
  531. :min="0"
  532. size="mini"
  533. ></el-input-number>
  534. </div>
  535. </div>
  536. <div class="margin_bs">
  537. <el-button size="mini" @click="activeOpens"
  538. >按选中设置分数</el-button
  539. ><el-button size="mini" @click="activePicis"
  540. >按题型设置分数</el-button
  541. >
  542. </div>
  543. </div>
  544. <el-table
  545. ref="multipleTables"
  546. :data="boxtableDataPags"
  547. border
  548. @select-all="selectAllPags"
  549. @select="selectPags"
  550. :row-key="getRowKeysPags"
  551. :header-cell-style="{
  552. 'background-color': '#eee',
  553. padding: '8px',
  554. color: '#333',
  555. }"
  556. >
  557. <el-table-column
  558. align="center"
  559. type="selection"
  560. width="55"
  561. header-align="center"
  562. :reserve-selection="true"
  563. >
  564. </el-table-column>
  565. <el-table-column
  566. label="序号"
  567. type="index"
  568. width="80"
  569. align="center"
  570. ></el-table-column>
  571. <template v-for="(item, index) in tableSetTablesPags">
  572. <el-table-column
  573. v-if="item.scope !== 'inputs'"
  574. :width="item.width"
  575. :key="index"
  576. :label="item.label"
  577. :align="item.scope === 'inputS' ? 'left' : 'center'"
  578. :show-overflow-tooltip="true"
  579. header-align="center"
  580. >
  581. <template slot-scope="scope">
  582. <span v-if="item.scope === 'Status'">
  583. {{
  584. scope.row[item.prop] === 1
  585. ? "发布"
  586. : scope.row[item.prop] === 0
  587. ? "未发布"
  588. : "未知"
  589. }}
  590. </span>
  591. <span v-else-if="item.scope === 'topic'">{{
  592. scope.row[item.prop] === 1
  593. ? "单选题"
  594. : scope.row[item.prop] === 2
  595. ? "多选题"
  596. : scope.row[item.prop] === 3
  597. ? "判断题"
  598. : scope.row[item.prop] === 4
  599. ? "案例题"
  600. : scope.row[item.prop] === 5
  601. ? "简答题"
  602. : "未知"
  603. }}</span>
  604. <div
  605. class="editInfoSty"
  606. v-else-if="item.scope === 'editInfoHTML'"
  607. >
  608. {{ getSimpleText(scope.row[item.prop]) }}
  609. </div>
  610. <div v-else-if="item.scope === 'inputS'">
  611. <el-input-number
  612. style="width: 100px !important"
  613. v-model="scope.row[item.prop]"
  614. controls-position="right"
  615. :min="0"
  616. ></el-input-number>
  617. <el-tooltip
  618. class="item"
  619. effect="dark"
  620. content="右侧输入框为多选题漏选给分"
  621. placement="top-start"
  622. >
  623. <i
  624. v-if="scope.row['type'] === 2"
  625. class="el-icon-question"
  626. ></i>
  627. </el-tooltip>
  628. <el-input-number
  629. v-if="scope.row['type'] === 2"
  630. style="width: 100px !important"
  631. v-model="scope.row['partScore']"
  632. controls-position="right"
  633. :min="0"
  634. ></el-input-number>
  635. </div>
  636. <div v-else-if="item.scope === 'knowledge'">
  637. <el-button
  638. type="success"
  639. size="small"
  640. v-for="(items, ks) in scope.row[item.prop]"
  641. :key="ks"
  642. >
  643. {{ items.knowledgeName }}
  644. </el-button>
  645. </div>
  646. <span v-else>{{ scope.row[item.prop] }}</span></template
  647. >
  648. </el-table-column></template
  649. >
  650. </el-table>
  651. </div>
  652. <span slot="footer" class="dialog-footer">
  653. <el-button @click="closePagsInfos">取 消</el-button>
  654. <el-button type="primary" @click="submitPagsInfos">确 定</el-button>
  655. </span>
  656. </el-dialog>
  657. <el-dialog
  658. :visible.sync="dialogVisibleActivePocis"
  659. width="420px"
  660. append-to-body
  661. :show-close="false"
  662. :close-on-click-modal="false"
  663. >
  664. <div slot="title" class="hearders">
  665. <div class="leftTitle">分值设置</div>
  666. <div class="rightBoxs">
  667. <img
  668. src="@/assets/images/Close@2x.png"
  669. alt=""
  670. @click="closeBoxsActivePocis"
  671. />
  672. </div>
  673. </div>
  674. <div>
  675. 一共选择了{{ activeListsPags.length }}道题目,一键设置
  676. <el-input-number
  677. style="width: 100px !important"
  678. v-model="Pocis"
  679. controls-position="right"
  680. :min="0"
  681. ></el-input-number>
  682. </div>
  683. <span slot="footer" class="dialog-footer">
  684. <el-button @click="closeBoxsActivePocis">取 消</el-button>
  685. <el-button type="primary" @click="submitActivePocis">确 定</el-button>
  686. </span>
  687. </el-dialog>
  688. <el-dialog
  689. :visible.sync="dialogVisibleActivePLPoics"
  690. width="580px"
  691. append-to-body
  692. :show-close="false"
  693. :close-on-click-modal="false"
  694. >
  695. <div slot="title" class="hearders">
  696. <div class="leftTitle">分值设置</div>
  697. <div class="rightBoxs">
  698. <img
  699. src="@/assets/images/Close@2x.png"
  700. alt=""
  701. @click="closeBoxsActivePLPoics"
  702. />
  703. </div>
  704. </div>
  705. <div>
  706. <div class="margin_bs" v-if="pocisArray.danx">
  707. 单选题:共{{ pocisArray.danx }}道,共
  708. {{ pocisArray.danx * Pocis1 }} 分数,每题分数<el-input-number
  709. style="margin: 0px 6px; width: 100px !important"
  710. v-model="Pocis1"
  711. controls-position="right"
  712. :min="0"
  713. size="mini"
  714. ></el-input-number
  715. >分
  716. </div>
  717. <div class="margin_bs" v-if="pocisArray.duox">
  718. 多选题:共{{ pocisArray.duox }}道,共
  719. {{ pocisArray.duox * Pocis2 }} 分数,每题分数<el-input-number
  720. style="margin: 0px 6px; width: 100px !important"
  721. v-model="Pocis2"
  722. controls-position="right"
  723. :min="0"
  724. size="mini"
  725. ></el-input-number
  726. >分
  727. <el-tooltip
  728. class="item"
  729. effect="dark"
  730. content="右侧输入框为多选题漏选给分"
  731. placement="top-start"
  732. >
  733. <i class="el-icon-question"></i>
  734. </el-tooltip>
  735. <el-input-number
  736. style="margin: 0px 6px; width: 100px !important"
  737. v-model="Pocis2s"
  738. controls-position="right"
  739. :min="0"
  740. size="mini"
  741. ></el-input-number>
  742. </div>
  743. <div class="margin_bs" v-if="pocisArray.pand">
  744. 判断题:共{{ pocisArray.pand }}道,共
  745. {{ pocisArray.pand * Pocis3 }} 分数,每题分数<el-input-number
  746. style="margin: 0px 6px; width: 100px !important"
  747. v-model="Pocis3"
  748. controls-position="right"
  749. :min="0"
  750. size="mini"
  751. ></el-input-number
  752. >分
  753. </div>
  754. <div class="margin_bs" v-if="pocisArray.anli">
  755. 案例题:共{{ pocisArray.anli }}道,共
  756. {{ pocisArray.anli * Pocis4 }} 分数,每题分数<el-input-number
  757. style="margin: 0px 6px; width: 100px !important"
  758. v-model="Pocis4"
  759. controls-position="right"
  760. :min="0"
  761. size="mini"
  762. ></el-input-number
  763. >分
  764. </div>
  765. <div class="margin_bs" v-if="pocisArray.jiand">
  766. 简答题:共{{ pocisArray.jiand }}道,共
  767. {{ pocisArray.jiand * Pocis5 }} 分数,每题分数<el-input-number
  768. style="margin: 0px 6px; width: 100px !important"
  769. v-model="Pocis5"
  770. controls-position="right"
  771. :min="0"
  772. size="mini"
  773. ></el-input-number
  774. >分
  775. </div>
  776. </div>
  777. <span slot="footer" class="dialog-footer">
  778. <el-button @click="closeBoxsActivePLPoics" size="small"
  779. >取 消</el-button
  780. >
  781. <el-button type="primary" size="small" @click="submitActivePLPoics"
  782. >确 定</el-button
  783. >
  784. </span>
  785. </el-dialog>
  786. </div>
  787. </div>
  788. </template>
  789. <script>
  790. import tableList from "@/components/tableList";
  791. import busIns from "@/components/busIns";
  792. import questionBank from "@/components/questionBank";
  793. import { mapGetters } from "vuex";
  794. export default {
  795. components: { tableList, busIns, questionBank },
  796. name: "AddPaper",
  797. data() {
  798. return {
  799. activeName: "first",
  800. data1: {},
  801. page: 1,
  802. listDataIns: {
  803. provinceId: "",
  804. cityId: "",
  805. publishStatus: 1,
  806. }, // 弹窗数据
  807. eduTypeOptions: [], //教育类型数据
  808. projectTypeOptions: [], //项目类型数据
  809. courTypeOptions: [], //业务层次数据
  810. newCourTypeOptions: [], //当前业务层次数据
  811. sujectOption: [], //科目数据
  812. newSujectOption: [], //当前科目数据数据
  813. eduType: "", //当前选中教育类型
  814. courType: "", //当前选中业务层次
  815. newSujectApis: {},
  816. sujectApis: "", //当前存在的科目 例如'19-2'
  817. optionsCity: [],
  818. //表单验证
  819. rules: {
  820. examPaperId: [
  821. {
  822. required: true,
  823. message: "请选择试卷类型",
  824. trigger: ["change", "blur"],
  825. },
  826. ],
  827. // prefixName: [
  828. // { required: true, message: "请输入标题前缀", trigger: "blur" },
  829. // ],
  830. examName: [
  831. { required: true, message: "请输入试卷名称", trigger: "blur" },
  832. ],
  833. publishStatus: [
  834. { required: true, message: "请选择是否发布", trigger: "change" },
  835. ],
  836. },
  837. rulesTest: {
  838. // prefixName: [
  839. // { required: true, message: "请输入标签前缀", trigger: "blur" },
  840. // ],
  841. },
  842. // --------------------------分割线-------------------------------------
  843. tableSet: [
  844. {
  845. label: "排序",
  846. prop: "sort",
  847. scope: "inputs",
  848. width: "100px",
  849. hidden: true,
  850. },
  851. {
  852. label: "题型",
  853. prop: "type",
  854. hidden: true,
  855. scope: "topic",
  856. },
  857. {
  858. label: "题目编码",
  859. prop: "code",
  860. hidden: true,
  861. },
  862. {
  863. label: "标题前缀",
  864. prop: "prefixName",
  865. hidden: true,
  866. },
  867. {
  868. label: "知识点",
  869. prop: "knowledgeList",
  870. hidden: true,
  871. scope: "knowledge",
  872. width: "180px",
  873. },
  874. {
  875. label: "题目内容",
  876. prop: "content",
  877. hidden: true,
  878. scope: "editInfoHTML",
  879. },
  880. ],
  881. tableData: [],
  882. loading: false, //当前表单加载是否加载动画
  883. navText: {
  884. title: "题目管理",
  885. index: 0,
  886. ch: "条",
  887. num: false,
  888. choice: false,
  889. addHide: false,
  890. backFatherBtn: {
  891. status: true,
  892. title: "分值设置",
  893. },
  894. },
  895. dialogVisible: false,
  896. innerVisiblePaperTopic: false,
  897. fullscreenChildPaperTopic: false,
  898. statusPop: 1,
  899. dingForm: {},
  900. questionId: "",
  901. queryData: {},
  902. allOptions: [], //知识点列表
  903. options: [], //当前知识点列表
  904. activeExam: [], // 已选知识点列表
  905. value: "",
  906. BusName: "", //弹窗新增知识点输入框
  907. BusNameList: [],
  908. listNums: {},
  909. typeBus: 1,
  910. indexZB: "",
  911. listData: {
  912. publishStatus: "",
  913. prefixName: "",
  914. },
  915. int: "",
  916. listitem: [
  917. {
  918. label: "标题前缀",
  919. prop: "prefixName",
  920. },
  921. {
  922. label: "知识点",
  923. scope: "bussing",
  924. },
  925. {
  926. label: "发布状态",
  927. prop: "publishStatus",
  928. scope: "radio",
  929. },
  930. ],
  931. radioActive: "",
  932. dialogVisibleActive: false,
  933. dialogVisibleTable: false,
  934. boxtableData: [],
  935. tableSetTables: [
  936. {
  937. label: "题目类型",
  938. prop: "type",
  939. hidden: true,
  940. scope: "topic",
  941. },
  942. {
  943. label: "题目编码",
  944. prop: "code",
  945. hidden: true,
  946. },
  947. {
  948. label: "标题前缀",
  949. prop: "prefixName",
  950. hidden: true,
  951. },
  952. {
  953. label: "知识点",
  954. prop: "knowledgeList",
  955. hidden: true,
  956. scope: "knowledge",
  957. width: "180px",
  958. },
  959. {
  960. label: "题目标题",
  961. prop: "content",
  962. hidden: true,
  963. scope: "editInfoHTML",
  964. },
  965. {
  966. label: "发布状态",
  967. prop: "publishStatus",
  968. hidden: true,
  969. scope: "Status",
  970. },
  971. ],
  972. activeLists: [],
  973. disCheckList: [],
  974. sujectApisTable: [],
  975. newSujectApisTable: [],
  976. // -------------------------------------
  977. diansBoxStatus: false,
  978. boxtableDataPags: [],
  979. tableSetTablesPags: [
  980. {
  981. label: "排序",
  982. prop: "sort",
  983. hidden: true,
  984. width: "80px",
  985. },
  986. {
  987. label: "题型",
  988. prop: "type",
  989. hidden: true,
  990. scope: "topic",
  991. },
  992. {
  993. label: "标题前缀",
  994. prop: "prefixName",
  995. hidden: true,
  996. },
  997. {
  998. label: "题目标题",
  999. prop: "content",
  1000. hidden: true,
  1001. scope: "editInfoHTML",
  1002. },
  1003. {
  1004. label: "发布状态",
  1005. prop: "publishStatus",
  1006. hidden: true,
  1007. scope: "Status",
  1008. },
  1009. {
  1010. label: "分值",
  1011. prop: "score",
  1012. hidden: true,
  1013. scope: "inputS",
  1014. width: "250px",
  1015. },
  1016. ],
  1017. activeListsPags: [],
  1018. dialogVisibleActivePocis: false,
  1019. Pocis: "",
  1020. dialogVisibleActivePLPoics: false,
  1021. Pocis1: "",
  1022. Pocis2: "",
  1023. Pocis2s: "",
  1024. Pocis3: "",
  1025. Pocis4: "",
  1026. Pocis5: "",
  1027. pocisArray: {
  1028. danx: 0,
  1029. duox: 0,
  1030. pand: 0,
  1031. anli: 0,
  1032. jiand: 0,
  1033. },
  1034. passScore: "", //及格分数
  1035. djTimeType: 0, //0无限1有限
  1036. djTime: 0, //答卷时长
  1037. djNumType: 0, //0无限1有限
  1038. djNum: 0, //答卷次数
  1039. };
  1040. },
  1041. computed: {
  1042. ...mapGetters(["paperexam", "areas", "cityList"]),
  1043. getAllpocis() {
  1044. var num = 0;
  1045. this.boxtableDataPags.map((item) => {
  1046. num += item.score;
  1047. });
  1048. return num;
  1049. },
  1050. },
  1051. mounted() {
  1052. console.log(this.cityList);
  1053. this.getDict();
  1054. this.getFns();
  1055. },
  1056. watch: {
  1057. // "listDataIns.provinceId": {
  1058. // handler(newVal, oldVal) {
  1059. // this.changeCity(newVal);
  1060. // },
  1061. // // 立即处理 进入页面就触发
  1062. // immediate: true,
  1063. // },
  1064. djTime: {
  1065. handler(newVal, oldVal) {
  1066. if (newVal === 0) {
  1067. this.djTimeType = 0;
  1068. } else {
  1069. this.djTimeType = 1;
  1070. }
  1071. },
  1072. // 立即处理 进入页面就触发
  1073. immediate: true,
  1074. },
  1075. djNum: {
  1076. handler(newVal, oldVal) {
  1077. if (newVal === 0) {
  1078. this.djNumType = 0;
  1079. } else {
  1080. this.djNumType = 1;
  1081. }
  1082. },
  1083. // 立即处理 进入页面就触发
  1084. immediate: true,
  1085. },
  1086. tableData: {
  1087. handler(newVal, oldVal) {
  1088. this.navText.index = newVal.length;
  1089. },
  1090. // 立即处理 进入页面就触发
  1091. immediate: true,
  1092. },
  1093. },
  1094. methods: {
  1095. getMessage() {
  1096. if (!this.courType) {
  1097. this.$message.warning("请先选择业务层级");
  1098. } else if (!this.newSujectOption.length) {
  1099. this.$message.warning("该业务层级暂无关联科目");
  1100. }
  1101. },
  1102. getSimpleText(html) {
  1103. var re1 = new RegExp("<.+?>", "g"); //匹配html标签的正则表达式,"g"是搜索匹配多个符合的内容
  1104. var msg = html.replace(re1, ""); //执行替换成空字符
  1105. return msg;
  1106. },
  1107. changeCity(newVal) {
  1108. this.optionsCity = this.cityList.filter((item) => {
  1109. return item.parentId === newVal;
  1110. });
  1111. this.listDataIns.cityId = "";
  1112. },
  1113. clearImgs() {
  1114. this.listDataIns.coverUrl = "";
  1115. },
  1116. changeTypes() {
  1117. var self = this;
  1118. if (!this.sujectApis) {
  1119. self.newSujectApis = {};
  1120. return;
  1121. }
  1122. this.courTypeOptions.map((items) => {
  1123. if (items.id === this.sujectApis.split("-").map(Number)[0]) {
  1124. var obj = {
  1125. type: 2,
  1126. educationTypeId: items.educationId,
  1127. educationName: items.educationName,
  1128. projectId: items.projectId,
  1129. projectName: items.projectName,
  1130. businessId: items.id,
  1131. businessName: items.businessName,
  1132. };
  1133. self.sujectOption.map((i) => {
  1134. if (
  1135. i.id === self.sujectApis.split("-").map(Number)[1] &&
  1136. i.courseArrays.indexOf(items.projectId) !== -1
  1137. ) {
  1138. obj.subjectName = i.subjectName;
  1139. obj.subjectId = i.id;
  1140. }
  1141. });
  1142. self.newSujectApis = obj;
  1143. }
  1144. });
  1145. },
  1146. submitSujectArray() {
  1147. this.changeTypes();
  1148. this.$refs.popovers.doClose();
  1149. },
  1150. showHandle() {
  1151. this.sujectApis = "";
  1152. this.newSujectOption.map((item) => {
  1153. item.newId = this.courType + "-" + item.id;
  1154. if (item.newId === this.sujectApis) {
  1155. console.log("成功");
  1156. }
  1157. });
  1158. this.sujectApis =
  1159. this.newSujectApis.businessId + "-" + this.newSujectApis.subjectId;
  1160. },
  1161. hideHandle() {},
  1162. getDict() {
  1163. this.$api.inquireCourseEducationType({ status: 1 }).then((res) => {
  1164. this.eduTypeOptions = res.rows;
  1165. });
  1166. this.$api.inquireCourseProjectType({ status: 1 }).then((res) => {
  1167. this.projectTypeOptions = res.rows;
  1168. });
  1169. this.$api.inquirebusinessList({ status: 1 }).then((res) => {
  1170. this.courTypeOptions = res.rows;
  1171. this.newCourTypeOptions = res.rows;
  1172. });
  1173. this.$api.inquireCourseSubject({ status: 1 }).then((res) => {
  1174. res.rows.map((item, index) => {
  1175. var array = [];
  1176. item.courseProjectTypes.map((items, indexs) => {
  1177. array.push(items.id);
  1178. });
  1179. item.courseArrays = array;
  1180. });
  1181. this.sujectOption = res.rows;
  1182. });
  1183. },
  1184. changeEduType() {
  1185. if (!(this.courType === undefined || this.courType === "")) {
  1186. this.courType = "";
  1187. }
  1188. var arrays = [];
  1189. this.courTypeOptions.map((item) => {
  1190. if (item.educationId === this.eduType) {
  1191. arrays.push(item);
  1192. }
  1193. });
  1194. this.newCourTypeOptions = arrays;
  1195. },
  1196. changecourseType() {
  1197. this.newCourTypeOptions.map((item, index) => {
  1198. if (item.id === this.courType) {
  1199. this.eduType = item.educationId;
  1200. var array = [];
  1201. this.sujectOption.map((items, indexs) => {
  1202. if (items.courseArrays.indexOf(item.projectId) !== -1) {
  1203. array.push(items);
  1204. }
  1205. });
  1206. this.newSujectOption = array;
  1207. }
  1208. });
  1209. var arrays = [];
  1210. this.courTypeOptions.map((item) => {
  1211. if (item.educationId === this.eduType) {
  1212. arrays.push(item);
  1213. }
  1214. });
  1215. this.newCourTypeOptions = arrays;
  1216. this.$refs.popovers.doClose();
  1217. },
  1218. submitIns(formName) {
  1219. this.$refs[formName].validate((valid) => {
  1220. if (valid) {
  1221. if (JSON.stringify(this.newSujectApis) === "{}") {
  1222. this.$message.error("请选择适用业务层级");
  1223. return;
  1224. }
  1225. this.rulesTableSumbit();
  1226. } else {
  1227. return false;
  1228. }
  1229. });
  1230. },
  1231. async rulesTableSumbit() {
  1232. var data1 = {
  1233. examPaperId: this.listDataIns.examPaperId,
  1234. examName: this.listDataIns.examName,
  1235. publishStatus: this.listDataIns.publishStatus,
  1236. prefixName: this.listDataIns.prefixName,
  1237. businessList: [this.newSujectApis],
  1238. provinceId: this.listDataIns.provinceId,
  1239. cityId: this.listDataIns.cityId,
  1240. year: this.listDataIns.year,
  1241. status: 1,
  1242. };
  1243. this.$api.addbankexam(data1).then((res) => {
  1244. this.$message.success("新增成功");
  1245. this.$store.dispatch("tagsView/exitView", this.$route).then(() => {
  1246. this.$router.push({
  1247. path: "topicAddPaper",
  1248. query: {
  1249. id: res.data.examId,
  1250. code: res.data.code,
  1251. },
  1252. });
  1253. });
  1254. });
  1255. },
  1256. backPage() {
  1257. this.$store.dispatch("tagsView/delView", this.$route).then((res) => {
  1258. this.$router.push({
  1259. path: "testPaperManagement",
  1260. });
  1261. });
  1262. },
  1263. closeType() {
  1264. this.sujectApis = "";
  1265. this.changeTypes();
  1266. },
  1267. // --------------------------分割线---------------------------
  1268. editInfo(v) {
  1269. this.addClick(v, 0);
  1270. },
  1271. search(v) {
  1272. this.loading = true;
  1273. var data = {
  1274. status: 1,
  1275. pageSize: this.pageSize,
  1276. pageNum: this.currentPage,
  1277. };
  1278. this.$api
  1279. .inquirebankquestionList(data)
  1280. .then((res) => {
  1281. this.tableData = res.rows;
  1282. this.total = res.total;
  1283. this.navText.index = res.total;
  1284. })
  1285. .finally(() => {
  1286. this.loading = false;
  1287. });
  1288. },
  1289. init() {
  1290. this.search();
  1291. },
  1292. del(v, index) {
  1293. this.$alert(
  1294. "确定删除此内容?<br />内容删除后将无法恢复,请慎重考虑",
  1295. "提示",
  1296. {
  1297. dangerouslyUseHTMLString: true,
  1298. }
  1299. )
  1300. .then(() => {
  1301. this.tableData.splice(index, 1);
  1302. })
  1303. .catch(() => {
  1304. this.$message({
  1305. type: "info",
  1306. message: "已取消删除",
  1307. });
  1308. });
  1309. },
  1310. openActiveBox() {
  1311. this.radioActive = "";
  1312. this.dialogVisibleActive = true;
  1313. },
  1314. submitActive() {
  1315. if (!this.radioActive) {
  1316. this.$message.warning("请选择操作类型");
  1317. return;
  1318. }
  1319. this.dialogVisibleActive = false;
  1320. if (this.radioActive === 1) {
  1321. this.addClick();
  1322. } else {
  1323. var self = this;
  1324. this.$api
  1325. .inquirebankquestionList({
  1326. status: 1,
  1327. pageNum: 1,
  1328. pageSize: 10,
  1329. })
  1330. .then((res) => {
  1331. var aList = [];
  1332. this.tableData.map((item) => {
  1333. if (item.questionId) {
  1334. aList.push(item.questionId);
  1335. }
  1336. });
  1337. this.disCheckList = aList;
  1338. this.boxtableData = res.rows;
  1339. this.dialogVisibleTable = true;
  1340. this.$nextTick(function () {
  1341. self.$refs.multipleTable.clearSelection();
  1342. });
  1343. });
  1344. }
  1345. },
  1346. closeBoxsActive() {
  1347. this.dialogVisibleActive = false;
  1348. },
  1349. submitTable() {
  1350. if (this.activeLists.length === 0) {
  1351. this.dialogVisibleTable = false;
  1352. return;
  1353. }
  1354. this.activeLists.map((item) => {
  1355. item.optionsList = JSON.parse(item.jsonStr);
  1356. item.sort = 0;
  1357. (item.partScore = 0), (item.score = "");
  1358. });
  1359. this.tableData = this.tableData.concat(this.activeLists);
  1360. this.dialogVisibleTable = false;
  1361. this.$message.success("添加成功");
  1362. this.activeLists = [];
  1363. },
  1364. closeBoxsTable() {
  1365. this.dialogVisibleTable = false;
  1366. },
  1367. selectAll(value) {
  1368. this.activeLists = value;
  1369. },
  1370. select(value) {
  1371. this.activeLists = value;
  1372. },
  1373. checkboxT(row, index) {
  1374. if (this.disCheckList.indexOf(row.questionId) !== -1) {
  1375. return false;
  1376. } else {
  1377. return true;
  1378. }
  1379. },
  1380. getRowKeys(row) {
  1381. return row.questionId;
  1382. },
  1383. addClick(v, int, indexZB) {
  1384. var self = this;
  1385. if (v === undefined) {
  1386. self.statusPop = 1;
  1387. self.innerVisiblePaperTopic = true;
  1388. self.$nextTick(() => {
  1389. (self.listNums = {
  1390. type: 1,
  1391. optionsList: [],
  1392. answerQuestionList: [],
  1393. content: "",
  1394. status: "",
  1395. analysisContent: "",
  1396. answerQuestion: "",
  1397. }),
  1398. (self.$refs.sujects.eduType = "");
  1399. self.$refs.sujects.courType = "";
  1400. self.$refs.sujects.sujectApis = [];
  1401. self.$refs.sujects.newSujectApis = [];
  1402. self.listData = {
  1403. publishStatus: 1,
  1404. prefixName: "",
  1405. };
  1406. self.activeExam = [];
  1407. });
  1408. } else {
  1409. self.innerVisiblePaperTopic = true;
  1410. self.statusPop = int;
  1411. var vres = JSON.parse(JSON.stringify(v));
  1412. self.indexZB = indexZB;
  1413. if (vres.knowledgeIds) {
  1414. var a = [];
  1415. vres.knowledgeIds
  1416. .split(",")
  1417. .map(Number)
  1418. .map((items) => {
  1419. self.allOptions.map((item) => {
  1420. if (item.knowledgeId === items) {
  1421. a.push(item);
  1422. }
  1423. });
  1424. });
  1425. self.activeExam = a;
  1426. }
  1427. if (vres.type === 2) {
  1428. if (vres.answerQuestion) {
  1429. vres.answerQuestionList = vres.answerQuestion
  1430. .split(",")
  1431. .map(Number);
  1432. }
  1433. } else if (vres.type === 4) {
  1434. vres.optionsList.map((item) => {
  1435. if (item.type === 2) {
  1436. if (item.answerQuestion) {
  1437. item.answerQuestionList = item.answerQuestion
  1438. .split(",")
  1439. .map(Number);
  1440. }
  1441. } else {
  1442. item.answerQuestionList = [];
  1443. }
  1444. });
  1445. } else {
  1446. vres.answerQuestionList = [];
  1447. }
  1448. self.listData.prefixName = vres.prefixName;
  1449. self.listData.publishStatus = vres.publishStatus;
  1450. self.listNums = vres;
  1451. var arrays = [];
  1452. vres.businessList.map((item) => {
  1453. arrays.push(item.businessId + "-" + item.subjectId);
  1454. });
  1455. self.sujectApisTable = arrays;
  1456. self.newSujectApisTable = vres.businessList;
  1457. }
  1458. },
  1459. //-----------------------------------------------
  1460. comLs(item) {
  1461. var os = this.activeExam.some((items) => {
  1462. return items.knowledgeId === item.knowledgeId;
  1463. });
  1464. if (os) {
  1465. return true;
  1466. } else {
  1467. return false;
  1468. }
  1469. },
  1470. getFns() {
  1471. return new Promise((resolve, reject) => {
  1472. this.$api.inquireKnowledgeExamListS({ status: 1 }).then((res) => {
  1473. this.allOptions = res.rows;
  1474. resolve();
  1475. });
  1476. });
  1477. },
  1478. addBusName() {
  1479. if (this.BusName.trim()) {
  1480. var as = this.allOptions.some((item) => {
  1481. return item.knowledgeName == this.BusName;
  1482. });
  1483. if (as) {
  1484. this.$message.warning("当前知识点名称已存在");
  1485. return;
  1486. }
  1487. this.BusNameList.push(this.BusName);
  1488. this.BusName = "";
  1489. } else {
  1490. this.$message({
  1491. message: "请输入知识点内容",
  1492. type: "warning",
  1493. duration: 1200,
  1494. });
  1495. this.BusName = "";
  1496. }
  1497. },
  1498. submit() {
  1499. var data = {
  1500. examKnowledgeBusinessAddBoList: this.$refs.sujects.newSujectApis,
  1501. knowledgeName: this.BusNameList,
  1502. status: 1,
  1503. };
  1504. this.$api.addKnowledgeExam(data).then(async (res) => {
  1505. this.$message.success("添加成功");
  1506. this.dialogVisible = false;
  1507. await this.getFns();
  1508. this.changeAmdis();
  1509. });
  1510. },
  1511. closeBoxs() {
  1512. this.dialogVisible = false;
  1513. },
  1514. addExam() {
  1515. if (!this.$refs.sujects.courType) {
  1516. this.$message.warning("请选择业务层级");
  1517. return;
  1518. }
  1519. this.BusNameList = [];
  1520. this.BusName = "";
  1521. this.dialogVisible = true;
  1522. },
  1523. clearBus() {
  1524. this.BusNameList.splice(index, 1);
  1525. },
  1526. //子组件回调 业务层及变换-知识点重新筛选
  1527. changeAmdis() {
  1528. var int = this.$refs.sujects.courType;
  1529. var ao = [];
  1530. this.allOptions.map((item, index) => {
  1531. let acts = item.courseBusinessList.every((items) => {
  1532. return items.businessId === int;
  1533. });
  1534. if (acts) {
  1535. ao.push(item);
  1536. }
  1537. });
  1538. this.options = ao;
  1539. },
  1540. clearBusName(index) {
  1541. this.activeExam.splice(index, 1);
  1542. },
  1543. changeKnow(item) {
  1544. this.allOptions.map((items) => {
  1545. if (items.knowledgeId === item) {
  1546. this.activeExam.push(items);
  1547. }
  1548. });
  1549. this.value = "";
  1550. },
  1551. addListNums() {
  1552. this.listNums.push({
  1553. type: 1,
  1554. optionsList: [],
  1555. answerQuestionList: [],
  1556. content: "",
  1557. status: "",
  1558. analysisContent: "",
  1559. answerQuestion: "",
  1560. });
  1561. },
  1562. closeBefore() {
  1563. this.innerVisiblePaperTopic = false;
  1564. },
  1565. async submitForm(formName, int) {
  1566. this.$refs[formName].validate((valid) => {
  1567. if (valid) {
  1568. var self = this;
  1569. if (!this.$refs.sujects.newSujectApis.length) {
  1570. this.$message.error("请选择科目");
  1571. return;
  1572. }
  1573. var data = this.$refs.child.getInfosPage();
  1574. if (!data.content || data.content == "<p><br></p>") {
  1575. self.$message.error("请填写题目内容");
  1576. return;
  1577. }
  1578. if (data.type != 3 && data.type != 5 && !data.optionsList.length) {
  1579. self.$message.error("请添加选项");
  1580. return;
  1581. }
  1582. if (data.type != 3 && data.type != 4 && data.optionsList.length) {
  1583. var ast = data.optionsList.some((item) => {
  1584. return !item.content && !item.imgUrl;
  1585. });
  1586. if (ast) {
  1587. self.$message.error("请完善选项内容");
  1588. return;
  1589. }
  1590. }
  1591. if (data.type != 5 && data.type != 4) {
  1592. if (data.type === 2 && !data.answerQuestionList.length) {
  1593. self.$message.error("请选择正确答案");
  1594. return;
  1595. }
  1596. if (data.type !== 2 && !data.answerQuestion) {
  1597. self.$message.error("请选择正确答案");
  1598. return;
  1599. }
  1600. }
  1601. if (data.type == 4 && data.optionsList.length) {
  1602. for (let i = 0; i < data.optionsList.length; i++) {
  1603. if (
  1604. !data.optionsList[i].content ||
  1605. data.optionsList[i].content == "<p><br></p>"
  1606. ) {
  1607. self.$message.error("请填写题目内容");
  1608. return;
  1609. }
  1610. if (
  1611. data.optionsList[i].type != 3 &&
  1612. data.optionsList[i].type != 5 &&
  1613. !data.optionsList[i].optionsList.length
  1614. ) {
  1615. self.$message.error("请添加选项");
  1616. return;
  1617. }
  1618. if (
  1619. data.optionsList[i].type != 3 &&
  1620. data.optionsList[i].optionsList.length
  1621. ) {
  1622. var ast = data.optionsList[i].optionsList.some((item) => {
  1623. return !item.content && !item.imgUrl;
  1624. });
  1625. if (ast) {
  1626. self.$message.error("请完善选项内容");
  1627. return;
  1628. }
  1629. }
  1630. if (data.optionsList[i].type != 5) {
  1631. if (
  1632. data.optionsList[i].type === 2 &&
  1633. !data.optionsList[i].answerQuestionList.length
  1634. ) {
  1635. self.$message.error("请选择正确答案");
  1636. return;
  1637. }
  1638. if (
  1639. data.optionsList[i].type !== 2 &&
  1640. !data.optionsList[i].answerQuestion
  1641. ) {
  1642. self.$message.error("请选择正确答案");
  1643. return;
  1644. }
  1645. }
  1646. }
  1647. }
  1648. var numList = [];
  1649. this.activeExam.map((item) => {
  1650. numList.push(item.knowledgeId);
  1651. });
  1652. data.knowledgeList = this.activeExam;
  1653. data.prefixName = this.listData.prefixName;
  1654. data.knowledgeIds = numList.toString();
  1655. data.publishStatus = this.listData.publishStatus;
  1656. data.businessList = this.$refs.sujects.newSujectApis;
  1657. if (data.type === 2) {
  1658. if (data.answerQuestionList.length) {
  1659. data.answerQuestion = data.answerQuestionList.toString();
  1660. }
  1661. }
  1662. if (data.type === 4) {
  1663. data.optionsList.map((item) => {
  1664. if (item.type === 2) {
  1665. if (item.answerQuestionList.length) {
  1666. item.answerQuestion = item.answerQuestionList.toString();
  1667. }
  1668. }
  1669. });
  1670. }
  1671. if (this.statusPop === 1) {
  1672. data.sort = 0;
  1673. data.partScore = 0;
  1674. data.score = "";
  1675. this.tableData.push(data);
  1676. // this.$api.addbankquestion(data).then((res) => {
  1677. self.$message.success("添加成功");
  1678. self.innerVisiblePaperTopic = false;
  1679. // self.search();
  1680. // });
  1681. }
  1682. if (this.statusPop === 0) {
  1683. this.tableData.splice(this.indexZB, 1, data);
  1684. // this.$api.editbankquestion(data).then((res) => {
  1685. self.$message.success("修改成功");
  1686. self.innerVisiblePaperTopic = false;
  1687. // self.search();
  1688. // });
  1689. }
  1690. } else {
  1691. console.log("error submit!!");
  1692. return false;
  1693. }
  1694. });
  1695. },
  1696. uploadApis(item) {
  1697. return new Promise((resolve, reject) => {
  1698. this.$api.editbankquestion(item).then((res) => {
  1699. resolve();
  1700. });
  1701. });
  1702. },
  1703. addbankquestion(item) {
  1704. return new Promise((resolve, reject) => {
  1705. this.$api.addbankquestion(item).then((res) => {
  1706. resolve(res.data);
  1707. });
  1708. });
  1709. },
  1710. async submitTableAllInfos() {
  1711. var self = this;
  1712. var arrs = [];
  1713. for (let i = 0; i < this.tableData.length; i++) {
  1714. if (self.tableData[i].questionId) {
  1715. await self.uploadApis(self.tableData[i]);
  1716. } else {
  1717. var ids = await self.addbankquestion(self.tableData[i]);
  1718. self.tableData[i].questionId = ids;
  1719. }
  1720. arrs.push({
  1721. questionId: self.tableData[i].questionId,
  1722. sort: self.tableData[i].sort,
  1723. score: self.tableData[i].score,
  1724. partScore: self.tableData[i].partScore,
  1725. });
  1726. }
  1727. (this.data1.questionList = arrs), (this.data1.status = 1);
  1728. this.data1.passScore = this.passScore;
  1729. if (this.djTimeType === 0) {
  1730. this.data1.answerTime = 0;
  1731. } else {
  1732. this.data1.answerTime = this.djTime;
  1733. }
  1734. if (this.djNumType === 0) {
  1735. this.data1.answerNum = 0;
  1736. } else {
  1737. this.data1.answerNum = this.djNum;
  1738. }
  1739. this.$api.addbankexam(this.data1).then((res) => {
  1740. this.$message.success("新增成功");
  1741. setTimeout(() => {
  1742. this.$router.push({
  1743. path: "testPaperManagement",
  1744. });
  1745. }, 500);
  1746. });
  1747. },
  1748. emitData() {
  1749. if (!this.tableData.length) {
  1750. this.$message.warning("请添加题目");
  1751. return;
  1752. }
  1753. this.boxtableDataPags = JSON.parse(JSON.stringify(this.tableData));
  1754. this.diansBoxStatus = true;
  1755. },
  1756. closePagsInfos() {
  1757. this.diansBoxStatus = false;
  1758. },
  1759. submitPagsInfos() {
  1760. this.tableData = this.boxtableDataPags;
  1761. this.diansBoxStatus = false;
  1762. },
  1763. selectAllPags(value) {
  1764. this.activeListsPags = value;
  1765. },
  1766. selectPags(value) {
  1767. this.activeListsPags = value;
  1768. },
  1769. getRowKeysPags(row) {
  1770. return row.questionId;
  1771. },
  1772. activeOpens() {
  1773. if (!this.activeListsPags.length) {
  1774. this.$message.warning("请选择需要设置分值的题目");
  1775. return;
  1776. }
  1777. this.Pocis = "";
  1778. this.dialogVisibleActivePocis = true;
  1779. },
  1780. closeBoxsActivePocis() {
  1781. this.dialogVisibleActivePocis = false;
  1782. },
  1783. submitActivePocis() {
  1784. this.activeListsPags.map((item) => {
  1785. item.score = this.Pocis;
  1786. });
  1787. this.dialogVisibleActivePocis = false;
  1788. this.activeListsPags = [];
  1789. this.$refs.multipleTables.clearSelection();
  1790. },
  1791. activePicis() {
  1792. if (!this.activeListsPags.length) {
  1793. this.$message.warning("请选择需要设置分值的题目");
  1794. return;
  1795. }
  1796. this.pocisArray = {
  1797. danx: 0,
  1798. duox: 0,
  1799. pand: 0,
  1800. anli: 0,
  1801. jiand: 0,
  1802. };
  1803. for (let i = 0; i < this.activeListsPags.length; i++) {
  1804. if (this.activeListsPags[i].type === 1) {
  1805. this.pocisArray.danx++;
  1806. }
  1807. if (this.activeListsPags[i].type === 2) {
  1808. this.pocisArray.duox++;
  1809. }
  1810. if (this.activeListsPags[i].type === 3) {
  1811. this.pocisArray.pand++;
  1812. }
  1813. if (this.activeListsPags[i].type === 4) {
  1814. this.pocisArray.anli++;
  1815. }
  1816. if (this.activeListsPags[i].type === 5) {
  1817. this.pocisArray.jiand++;
  1818. }
  1819. }
  1820. this.Pocis1 = "";
  1821. this.Pocis2 = "";
  1822. this.Pocis2s = "";
  1823. this.Pocis3 = "";
  1824. this.Pocis4 = "";
  1825. this.Pocis5 = "";
  1826. this.dialogVisibleActivePLPoics = true;
  1827. },
  1828. closeBoxsActivePLPoics() {
  1829. this.dialogVisibleActivePLPoics = false;
  1830. },
  1831. submitActivePLPoics() {
  1832. this.activeListsPags.map((item) => {
  1833. if (item.type === 1) {
  1834. item.score = this.Pocis1;
  1835. }
  1836. if (item.type === 2) {
  1837. item.score = this.Pocis2;
  1838. item.partScore = this.Pocis2s;
  1839. }
  1840. if (item.type === 3) {
  1841. item.score = this.Pocis3;
  1842. }
  1843. if (item.type === 4) {
  1844. item.score = this.Pocis4;
  1845. }
  1846. if (item.type === 5) {
  1847. item.score = this.Pocis5;
  1848. }
  1849. });
  1850. this.dialogVisibleActivePLPoics = false;
  1851. this.activeListsPags = [];
  1852. this.$refs.multipleTables.clearSelection();
  1853. },
  1854. },
  1855. };
  1856. </script>
  1857. <style lang="less" scoped>
  1858. .dis_flexbox {
  1859. display: flex;
  1860. flex-direction: column;
  1861. }
  1862. .boxWidth {
  1863. width: 700px;
  1864. }
  1865. .numInputs {
  1866. width: 150px;
  1867. }
  1868. .checkboxSty {
  1869. max-height: 210px;
  1870. overflow: auto;
  1871. display: flex;
  1872. flex-direction: column;
  1873. }
  1874. .listBoxStys {
  1875. flex-shrink: 0;
  1876. padding: 0px 10px;
  1877. border-radius: 8px;
  1878. border: 1px solid #eee;
  1879. margin-right: 10px;
  1880. margin-bottom: 6px;
  1881. }
  1882. .closeIcons {
  1883. color: red;
  1884. cursor: pointer;
  1885. margin-left: 6px;
  1886. }
  1887. .ach {
  1888. display: flex;
  1889. align-items: center;
  1890. overflow: hidden;
  1891. }
  1892. .clh {
  1893. display: flex;
  1894. align-items: center;
  1895. flex-wrap: wrap;
  1896. }
  1897. .imgBoxins {
  1898. width: 375px;
  1899. height: 220px;
  1900. text-align: center;
  1901. img {
  1902. height: 100%;
  1903. }
  1904. }
  1905. .iconStsz {
  1906. font-size: 40px;
  1907. color: #67c23a;
  1908. cursor: pointer;
  1909. }
  1910. .BusBoxs {
  1911. min-height: 100px;
  1912. border: 1px solid #a4a4a4;
  1913. margin-bottom: 10px;
  1914. border-radius: 8px;
  1915. max-height: 280px;
  1916. padding: 10px;
  1917. overflow-y: auto;
  1918. .fot_Le {
  1919. border-radius: 12px;
  1920. border: 1px solid yellowgreen;
  1921. padding: 0px 10px;
  1922. height: 30px;
  1923. line-height: 30px;
  1924. text-align: center;
  1925. float: left;
  1926. margin-right: 6px;
  1927. margin-bottom: 6px;
  1928. .icon_clear {
  1929. margin-left: 2px;
  1930. font-size: 15px;
  1931. color: #f56c6c;
  1932. cursor: pointer;
  1933. }
  1934. }
  1935. }
  1936. .marg_play {
  1937. display: flex;
  1938. margin-bottom: 15px;
  1939. .spans {
  1940. text-align: right;
  1941. width: 80px;
  1942. }
  1943. }
  1944. /deep/.el-button {
  1945. border-radius: 8px;
  1946. }
  1947. /deep/.el-dialog {
  1948. border-radius: 8px;
  1949. .el-dialog__header {
  1950. padding: 0;
  1951. .hearders {
  1952. height: 40px;
  1953. display: flex;
  1954. align-items: center;
  1955. justify-content: space-between;
  1956. padding: 0px 18px 0px 20px;
  1957. border-bottom: 1px solid #e2e2e2;
  1958. .leftTitle {
  1959. font-size: 14px;
  1960. font-weight: bold;
  1961. color: #2f4378;
  1962. }
  1963. .rightBoxs {
  1964. display: flex;
  1965. align-items: center;
  1966. img {
  1967. width: 14px;
  1968. height: 14px;
  1969. margin-left: 13px;
  1970. cursor: pointer;
  1971. }
  1972. }
  1973. }
  1974. }
  1975. .el-dialog__footer {
  1976. padding: 0;
  1977. .dialog-footer {
  1978. padding: 0px 40px;
  1979. height: 70px;
  1980. border-top: 1px solid #e2e2e2;
  1981. display: flex;
  1982. align-items: center;
  1983. justify-content: center;
  1984. }
  1985. }
  1986. }
  1987. .centerStys {
  1988. display: flex;
  1989. align-items: center;
  1990. justify-content: center;
  1991. margin-top: 18px;
  1992. }
  1993. .dis_fos {
  1994. align-items: flex-end;
  1995. display: flex;
  1996. justify-content: space-between;
  1997. }
  1998. .margin_bs {
  1999. margin-bottom: 6px;
  2000. }
  2001. </style>