index.vue 59 KB

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