index.vue 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609
  1. <template>
  2. <div id="examArrangement">
  3. <table-list
  4. :tableSets="tableSet"
  5. :tableData="tableData"
  6. :navText="navText"
  7. @addClick="addClick"
  8. :loading="loading"
  9. @editInfo="editInfo"
  10. >
  11. <template slot="btn" slot-scope="props">
  12. <el-button
  13. type="text"
  14. @click="addClick(props.scope.row, 0)"
  15. :disabled="props.scope.row.status === 1"
  16. >修改计划</el-button
  17. >
  18. <el-button
  19. type="text"
  20. @click="setExams(props.scope.row, 1)"
  21. :disabled="props.scope.row.status === 1"
  22. >考点设置</el-button
  23. >
  24. <el-button
  25. type="text"
  26. @click="setExams(props.scope.row, 2)"
  27. :disabled="props.scope.row.status === 1"
  28. >考培设置</el-button
  29. >
  30. <el-button
  31. type="text"
  32. @click="editGoods(props.scope.row)"
  33. :disabled="props.scope.row.status === 1"
  34. >适用商品</el-button
  35. >
  36. <el-button type="text" @click="watchs(props.scope.row)">预览</el-button>
  37. <el-button
  38. type="text"
  39. @click="del(props.scope.row, 1)"
  40. v-if="props.scope.row.status === 0"
  41. >启用</el-button
  42. >
  43. <el-button
  44. type="text"
  45. @click="del(props.scope.row, 2)"
  46. v-if="props.scope.row.status === 1"
  47. >关闭</el-button
  48. >
  49. <el-button type="text" @click="del(props.scope.row, 3)">删除</el-button>
  50. </template>
  51. </table-list>
  52. <pagination
  53. :total="total"
  54. :pageSize="pageSize"
  55. :currentPage="currentPage"
  56. @handleSizeChange="handleSizeChange"
  57. @handleCurrentChange="handleCurrentChange"
  58. />
  59. <el-dialog
  60. :visible.sync="dialogVisible"
  61. width="610px"
  62. :show-close="false"
  63. :close-on-click-modal="false"
  64. >
  65. <div slot="title" class="hearders">
  66. <div class="leftTitle">
  67. {{ statusPop === 1 ? "添加" : statusPop === 0 ? "修改" : "详情" }}
  68. </div>
  69. <div class="rightBoxs">
  70. <img src="@/assets/images/Close@2x.png" alt="" @click="close" />
  71. </div>
  72. </div>
  73. <div>
  74. <el-form
  75. label-position="right"
  76. label-width="150px"
  77. :model="listData"
  78. :rules="rules"
  79. ref="listData"
  80. >
  81. <el-form-item label="考试封面" prop="applyUrl">
  82. <div class="dis_fs">
  83. <img
  84. class="imgBoxs"
  85. :src="$methodsTools.splitImgHost(listData.applyUrl)"
  86. alt="加载失败"
  87. />
  88. <label class="btns"
  89. >修改封面
  90. <input
  91. ref="file"
  92. type="file"
  93. style="display: none"
  94. @change="editImg"
  95. />
  96. </label>
  97. </div>
  98. <div
  99. style="
  100. font-size: 12px;
  101. color: #999;
  102. line-height: 20px;
  103. margin-top: 10px;
  104. "
  105. >
  106. 注:请上传小于300kb,尺寸为1920*930的像素图片,支持gif、jpg、jpeg、png等类型
  107. </div>
  108. </el-form-item>
  109. <el-form-item label="考试标题" prop="applyName">
  110. <el-input
  111. :disabled="statusPop === 2"
  112. v-model="listData.applyName"
  113. ></el-input>
  114. </el-form-item>
  115. <el-form-item label="考试简介" prop="applyIntroduce">
  116. <el-input
  117. type="textarea"
  118. :rows="4"
  119. :disabled="statusPop === 2"
  120. v-model="listData.applyIntroduce"
  121. ></el-input>
  122. </el-form-item>
  123. <el-form-item label="可报学员" prop="applyStatus">
  124. <el-checkbox-group
  125. v-model="listData.applyStatus"
  126. style="width: 60%; display: inline-block"
  127. >
  128. <el-checkbox :label="1">非补考学员</el-checkbox>
  129. <el-checkbox :label="2">补考学员</el-checkbox>
  130. </el-checkbox-group>
  131. <span style="font-size: 12px; color: #999">注:可多选</span>
  132. </el-form-item>
  133. <el-form-item label="报名开放时间" required>
  134. <el-col :span="11">
  135. <el-form-item prop="applyStartTime">
  136. <el-date-picker
  137. type="datetime"
  138. placeholder="开始日期"
  139. @change="changeEndTime(1)"
  140. v-model="listData.applyStartTime"
  141. style="width: 100%"
  142. value-format="timestamp"
  143. ></el-date-picker>
  144. </el-form-item>
  145. </el-col>
  146. <el-col class="line" style="text-align: center" :span="2">-</el-col>
  147. <el-col :span="11">
  148. <el-form-item prop="applyEndTime">
  149. <el-date-picker
  150. type="datetime"
  151. placeholder="结束日期"
  152. @change="changeEndTime(2)"
  153. v-model="listData.applyEndTime"
  154. style="width: 100%"
  155. value-format="timestamp"
  156. ></el-date-picker>
  157. </el-form-item>
  158. </el-col>
  159. </el-form-item>
  160. </el-form>
  161. </div>
  162. <span slot="footer" class="dialog-footer">
  163. <el-button @click="close">取 消</el-button>
  164. <el-button
  165. type="primary"
  166. v-if="statusPop !== 2"
  167. @click="submit('listData')"
  168. >确 定</el-button
  169. >
  170. </span>
  171. </el-dialog>
  172. <el-dialog
  173. :visible.sync="dialogExamBoxs"
  174. width="620px"
  175. :show-close="false"
  176. :close-on-click-modal="false"
  177. >
  178. <div slot="title" class="hearders">
  179. <div class="leftTitle">
  180. {{
  181. intStatus === 1
  182. ? "设置考试地点"
  183. : intStatus === 2
  184. ? "设置考培地点"
  185. : "未知"
  186. }}
  187. </div>
  188. <div class="rightBoxs">
  189. <img
  190. src="@/assets/images/Close@2x.png"
  191. alt=""
  192. @click="dialogExamBoxs = false"
  193. />
  194. </div>
  195. </div>
  196. <div>
  197. <el-button type="text" @click="openExamPlace">{{
  198. intStatus === 1
  199. ? "添加考试地点"
  200. : intStatus === 2
  201. ? "添加考前培训地点"
  202. : "未知"
  203. }}</el-button>
  204. <div
  205. v-for="(item, index) in examPlaces"
  206. :key="index"
  207. style="margin-bottom: 10px"
  208. >
  209. <div class="dis_fs">
  210. <div class="bors">
  211. {{ item.siteAddress }}
  212. <i
  213. class="el-icon-error"
  214. style="
  215. color: #f56c6c;
  216. font-size: 14px;
  217. margin: 0px 6px;
  218. cursor: pointer;
  219. "
  220. @click="examPlaces.splice(index, 1)"
  221. ></i>
  222. </div>
  223. <el-button
  224. style="margin-left: 10px"
  225. type="text"
  226. size="mini"
  227. @click="
  228. item.examApplySiteTime.push({
  229. examTime: '',
  230. examApplySiteTimeTwo: [{}],
  231. })
  232. "
  233. >{{
  234. intStatus === 1
  235. ? "添加考试时间"
  236. : intStatus === 2
  237. ? "添加考培时间"
  238. : "未知"
  239. }}</el-button
  240. >
  241. </div>
  242. <div
  243. v-for="(items, indexs) in item.examApplySiteTime"
  244. :key="indexs"
  245. class="dis_fs"
  246. >
  247. <div class="mar_bgc">
  248. <div class="dis_fs jbtw">
  249. <el-date-picker
  250. size="mini"
  251. v-model="items.examTime"
  252. type="date"
  253. placeholder="选择日期"
  254. format="yyyy 年 MM 月 dd 日"
  255. value-format="timestamp"
  256. >
  257. </el-date-picker>
  258. <el-button
  259. size="mini"
  260. type="text"
  261. @click="items.examApplySiteTimeTwo.push({})"
  262. >添加时间点</el-button
  263. >
  264. </div>
  265. <ul>
  266. <li
  267. class="dis_fs"
  268. style="margin-bottom: 6px"
  269. v-for="(its, ids) in items.examApplySiteTimeTwo"
  270. :key="ids"
  271. >
  272. <div class="dis_fs">
  273. <el-time-picker
  274. style="width: 130px"
  275. size="mini"
  276. v-model="its.startTime"
  277. format="HH:mm"
  278. value-format="HH:mm"
  279. placeholder="开始时间"
  280. @change="
  281. its.endTime && its.startTime > its.endTime
  282. ? (its.startTime = '')
  283. : ''
  284. "
  285. >
  286. </el-time-picker
  287. ><span style="margin: 0px 10px">至</span>
  288. <el-time-picker
  289. style="width: 130px"
  290. size="mini"
  291. v-model="its.endTime"
  292. format="HH:mm"
  293. value-format="HH:mm"
  294. placeholder="结束时间"
  295. @change="
  296. its.startTime && its.endTime < its.startTime
  297. ? (its.endTime = '')
  298. : ''
  299. "
  300. >
  301. </el-time-picker>
  302. </div>
  303. <div style="margin-left: 14px">
  304. 人数上限:<el-input-number
  305. style="width: 60px"
  306. :precision="0"
  307. size="mini"
  308. :min="1"
  309. :max="item.people"
  310. v-model="its.num"
  311. :controls="false"
  312. ></el-input-number
  313. ><el-button
  314. style="margin-left: 6px"
  315. type="text"
  316. size="mini"
  317. @click="items.examApplySiteTimeTwo.splice(ids, 1)"
  318. >删除</el-button
  319. >
  320. </div>
  321. </li>
  322. </ul>
  323. </div>
  324. <div style="width: 10%; text-align: center; align-self: start">
  325. <el-button
  326. type="text"
  327. @click="item.examApplySiteTime.splice(indexs, 1)"
  328. >删除</el-button
  329. >
  330. </div>
  331. </div>
  332. </div>
  333. </div>
  334. <span slot="footer" class="dialog-footer">
  335. <el-button @click="dialogExamBoxs = false">取 消</el-button>
  336. <el-button
  337. type="primary"
  338. v-if="statusPop !== 2"
  339. @click="submitPla('listData')"
  340. >确 定</el-button
  341. >
  342. </span>
  343. </el-dialog>
  344. <el-dialog
  345. :visible.sync="dialogExamPlace"
  346. width="860px"
  347. :show-close="false"
  348. :close-on-click-modal="false"
  349. >
  350. <div slot="title" class="hearders">
  351. <div class="leftTitle">考试地点列表</div>
  352. <div class="rightBoxs">
  353. <img
  354. src="@/assets/images/Close@2x.png"
  355. alt=""
  356. @click="dialogExamPlace = false"
  357. />
  358. </div>
  359. </div>
  360. <div>
  361. <el-table
  362. ref="multipleTable2"
  363. :data="boxtableData2"
  364. border
  365. @select-all="selectAll2"
  366. @select="select2"
  367. :row-key="getRowKeys2"
  368. :header-cell-style="{
  369. 'background-color': '#eee',
  370. padding: '8px',
  371. color: '#333',
  372. }"
  373. >
  374. <el-table-column
  375. align="center"
  376. type="selection"
  377. width="55"
  378. header-align="center"
  379. :selectable="checkboxT2"
  380. :reserve-selection="true"
  381. >
  382. </el-table-column>
  383. <template v-for="(item, index) in tableSetTSBBOX2">
  384. <el-table-column
  385. v-if="item.scope !== 'inputs'"
  386. :width="item.width"
  387. :key="index"
  388. :label="item.label"
  389. align="center"
  390. :show-overflow-tooltip="true"
  391. header-align="center"
  392. >
  393. <template slot-scope="scope">
  394. <span v-if="item.scope === 'status'">
  395. {{ scope.row[item.prop] === 1 ? "启用" : "关闭" }}
  396. </span>
  397. <span v-else>{{ scope.row[item.prop] }}</span></template
  398. >
  399. </el-table-column></template
  400. >
  401. </el-table>
  402. <pagination
  403. :total="total2"
  404. :pageSize="pageSize2"
  405. :currentPage="currentPage2"
  406. @handleSizeChange="handleSizeChange2"
  407. @handleCurrentChange="handleCurrentChange2"
  408. />
  409. </div>
  410. <span slot="footer" class="dialog-footer">
  411. <el-button @click="dialogExamPlace = false">取 消</el-button>
  412. <el-button
  413. type="primary"
  414. v-if="statusPop !== 2"
  415. @click="submitPlaces"
  416. :disabled="!activeLists.length"
  417. >确 定</el-button
  418. >
  419. </span>
  420. </el-dialog>
  421. <el-dialog
  422. :visible.sync="dialogVisiblenew"
  423. width="560px"
  424. :show-close="false"
  425. :close-on-click-modal="false"
  426. >
  427. <div slot="title" class="hearders">
  428. <div class="leftTitle">适用商品</div>
  429. <div class="rightBoxs">
  430. <img
  431. src="@/assets/images/Close@2x.png"
  432. alt=""
  433. @click="dialogVisiblenew = false"
  434. />
  435. </div>
  436. </div>
  437. <div>
  438. <el-form
  439. label-position="right"
  440. label-width="150px"
  441. :model="listDataGoods"
  442. :rules="rulesnew"
  443. ref="listDataGoods"
  444. >
  445. <el-form-item label="商品类型" prop="goodsType">
  446. <el-select
  447. v-model="listDataGoods.goodsType"
  448. placeholder="请选择"
  449. disabled
  450. >
  451. <el-option
  452. v-for="item in options"
  453. :key="item.value"
  454. :label="item.label"
  455. :value="item.value"
  456. >
  457. </el-option>
  458. </el-select>
  459. </el-form-item>
  460. <el-form-item label="业务层级" prop="educationTypeId">
  461. <el-select
  462. v-model="listDataGoods.educationTypeId"
  463. placeholder="选择教育类型"
  464. @change="listDataGoods.businessId = ''"
  465. :disabled="statusPop === 0"
  466. >
  467. <el-option
  468. v-for="item in educationType"
  469. :key="item.id"
  470. :label="item.educationName"
  471. :value="item.id"
  472. >
  473. </el-option>
  474. </el-select>
  475. </el-form-item>
  476. <el-form-item
  477. label=""
  478. prop="businessId"
  479. v-if="listDataGoods.educationTypeId"
  480. >
  481. <el-select
  482. v-model="listDataGoods.businessId"
  483. :disabled="statusPop === 0"
  484. placeholder="选择业务层次"
  485. >
  486. <el-option
  487. v-for="item in businessList"
  488. :key="item.id"
  489. :label="item.projectName + '-' + item.businessName"
  490. :value="item.id"
  491. >
  492. </el-option>
  493. </el-select>
  494. </el-form-item>
  495. <el-form-item label="适用商品" prop="goodsId">
  496. <span v-if="!listDataGoods.businessId" style="color: #f56c6c"
  497. >请先选择业务层级</span
  498. >
  499. <el-checkbox-group
  500. style="overflow: auto; max-height: 500px"
  501. v-model="listDataGoods.goodsId"
  502. v-else-if="listDataGoods.businessId && goodsList.length"
  503. >
  504. <el-checkbox
  505. v-for="(item, index) in goodsList"
  506. :key="index"
  507. :label="item.goodsId"
  508. :disabled="
  509. item.goodsStatus === 0 &&
  510. bfListData.goodsId.indexOf(item.goodsId) === -1
  511. "
  512. >{{ item.code + "-" + item.goodsName + "-" }}
  513. <span
  514. :style="
  515. item.goodsStatus === 0 &&
  516. bfListData.goodsId.indexOf(item.goodsId) === -1
  517. ? ''
  518. : 'color:#F56C6C'
  519. "
  520. >¥{{ item.standPrice }}</span
  521. ></el-checkbox
  522. >
  523. </el-checkbox-group>
  524. <span style="color: #f56c6c" v-else>该业务层级下,无适用商品</span>
  525. </el-form-item>
  526. </el-form>
  527. </div>
  528. <span slot="footer" class="dialog-footer">
  529. <el-button @click="dialogVisiblenew = false">取 消</el-button>
  530. <el-button
  531. type="primary"
  532. v-if="statusPop !== 2"
  533. @click="submitnew('listDataGoods')"
  534. >确 定</el-button
  535. >
  536. </span>
  537. </el-dialog>
  538. <el-dialog
  539. :visible.sync="dialoginfoWatch"
  540. width="900px"
  541. :show-close="false"
  542. :close-on-click-modal="false"
  543. >
  544. <div slot="title" class="hearders">
  545. <div class="leftTitle">【{{ infoData.applyName }}】预览</div>
  546. <div class="rightBoxs">
  547. <img
  548. src="@/assets/images/Close@2x.png"
  549. alt=""
  550. @click="dialoginfoWatch = false"
  551. />
  552. </div>
  553. </div>
  554. <div>
  555. <el-form :model="infoData" class="demo-form-inline" label-width="130px">
  556. <el-row :gutter="20">
  557. <el-col :span="12" style="border-right: 1px solid #999">
  558. <el-button type="info" style="margin-bottom: 20px" size="mini"
  559. >考试计划信息</el-button
  560. >
  561. <el-form-item label="考试封面:">
  562. <div class="imgBoxWatch">
  563. <img
  564. :src="$methodsTools.splitImgHost(infoData.applyUrl)"
  565. alt="加载失败"
  566. />
  567. </div>
  568. </el-form-item>
  569. <el-form-item label="考试标题:">
  570. <span>{{ infoData.applyName }}</span>
  571. </el-form-item>
  572. <el-form-item label="考试简介:">
  573. <span>{{ infoData.applyIntroduce }}</span>
  574. </el-form-item>
  575. <el-form-item label="报考学员:">
  576. <span v-for="(item, index) in infoData.applyStatus" :key="index"
  577. >{{ item === 1 ? "非补考学员" : item === 2 ? "补考学员" : ""
  578. }}{{
  579. index === infoData.applyStatus.length - 1 ? "" : "、"
  580. }}</span
  581. >
  582. </el-form-item>
  583. <el-form-item label="报名开放时间:">
  584. <span>{{
  585. $methodsTools.onlyForma(infoData.applyStartTime)
  586. }}</span>
  587. <span>{{
  588. $methodsTools.onlyForma(infoData.applyEndTime)
  589. }}</span>
  590. </el-form-item>
  591. <el-form-item label="考试地点和时间:">
  592. <div
  593. v-for="(item, index) in infoData.examApplySite"
  594. :key="index"
  595. >
  596. <span>{{ item.siteAddress }}({{ item.people }})</span>
  597. <div
  598. v-for="(items, indexs) in item.examApplySiteTime"
  599. :key="indexs"
  600. style="
  601. margin-bottom: 10px;
  602. background-color: #eee;
  603. padding: 0px 10px;
  604. "
  605. >
  606. <div
  607. v-for="(itemsxs, indexsx) in items.siteTime"
  608. :key="indexsx"
  609. >
  610. {{ $methodsTools.onlyForma(items.examTime, false) }}
  611. {{ itemsxs.startTime }}-{{
  612. itemsxs.endTime
  613. }}
  614. (人数上限:{{ itemsxs.num }})
  615. </div>
  616. </div>
  617. </div>
  618. </el-form-item>
  619. <el-form-item label="考培地点和时间:">
  620. <div
  621. v-for="(item, index) in infoData.examApplySiteTrain"
  622. :key="index"
  623. >
  624. <span>{{ item.siteAddress }}({{ item.people }})</span>
  625. <div
  626. v-for="(items, indexs) in item.examApplySiteTime"
  627. :key="indexs"
  628. style="
  629. margin-bottom: 10px;
  630. background-color: #eee;
  631. padding: 0px 10px;
  632. "
  633. >
  634. <div
  635. v-for="(itemsxs, indexsx) in items.siteTime"
  636. :key="indexsx"
  637. >
  638. {{ $methodsTools.onlyForma(items.examTime, false) }}
  639. {{ itemsxs.startTime }}-{{
  640. itemsxs.endTime
  641. }}
  642. (人数上限:{{ itemsxs.num }})
  643. </div>
  644. </div>
  645. </div>
  646. </el-form-item>
  647. </el-col>
  648. <el-col :span="12">
  649. <el-button type="info" style="margin-bottom: 20px" size="mini"
  650. >适用商品</el-button
  651. >
  652. <el-form-item label="商品类型:">
  653. <span v-for="(item, index) in options" :key="index">{{
  654. item.value === infoData.goodsType ? item.label : ""
  655. }}</span>
  656. </el-form-item>
  657. <el-form-item label="业务层级:">
  658. <span
  659. >{{ infoData.educationName }}-{{ infoData.projectName }}-{{
  660. infoData.businessName
  661. }}</span
  662. >
  663. </el-form-item>
  664. <el-form-item label="适用商品:">
  665. <div
  666. v-for="(item, index) in infoData.examNumberGoods"
  667. :key="index"
  668. >
  669. {{ index + 1 }}.{{ item.code }}-{{ item.goodsName }}-<span
  670. style="color: #f56c6c"
  671. >¥{{ item.standPrice }}</span
  672. >
  673. </div>
  674. </el-form-item>
  675. </el-col>
  676. </el-row>
  677. </el-form>
  678. </div>
  679. <span slot="footer" class="dialog-footer">
  680. <el-button @click="dialoginfoWatch = false">取 消</el-button>
  681. </span>
  682. </el-dialog>
  683. </div>
  684. </template>
  685. <script>
  686. import { mapGetters } from "vuex";
  687. import searchBox from "@/components/searchBox";
  688. import tableList from "@/components/tableList";
  689. import pagination from "@/components/pagination";
  690. export default {
  691. name: "ExamArrangement",
  692. components: { searchBox, tableList, pagination },
  693. data() {
  694. return {
  695. total2: 0,
  696. pageSize2: 10,
  697. currentPage2: 1,
  698. loading: false, //当前表单加载是否加载动画
  699. navText: {
  700. title: "考试安排",
  701. index: 0,
  702. ch: "条",
  703. num: true,
  704. changeWidth: "300px",
  705. choice: true,
  706. border: true,
  707. addHide: false,
  708. backFatherBtn: {
  709. status: false,
  710. title: "未定义",
  711. },
  712. },
  713. // 表单
  714. tableSet: [
  715. {
  716. label: "考试编码",
  717. prop: "code",
  718. hidden: true,
  719. width: "140px",
  720. },
  721. {
  722. label: "考试标题",
  723. prop: "applyName",
  724. hidden: true,
  725. width: "120px",
  726. },
  727. {
  728. label: "可报学员",
  729. prop: "applyStatus",
  730. hidden: true,
  731. width: "160px",
  732. scope: "morePeople",
  733. },
  734. {
  735. label: "报名开放时间",
  736. prop1: "applyStartTime",
  737. prop2: "applyEndTime",
  738. hidden: true,
  739. scope: "TimeLists",
  740. Diszing: false,
  741. width: "220px",
  742. },
  743. {
  744. label: "使用状态",
  745. prop: "status",
  746. hidden: true,
  747. scope: "isOptions",
  748. options: [
  749. {
  750. label: "进行中",
  751. value: 1,
  752. },
  753. {
  754. label: "未启用",
  755. value: 0,
  756. },
  757. {
  758. label: "删除",
  759. value: -1,
  760. },
  761. {
  762. label: "已过期",
  763. value: 2,
  764. },
  765. ],
  766. },
  767. {
  768. label: "预约/取消(人次)",
  769. prop: "people",
  770. prop1: "cancelPeople",
  771. hidden: true,
  772. scope: "jumpPeolpe",
  773. type: 1,
  774. width: "140px",
  775. },
  776. ],
  777. tableData: [], //表单数据
  778. total: 0, //一共多少条
  779. pageSize: 10, //每页多少条数据
  780. currentPage: 1, //当前页码
  781. // 弹窗数据
  782. listData: {
  783. applyStatus: [],
  784. },
  785. statusPop: -1,
  786. dialogVisible: false,
  787. //表单验证
  788. rules: {
  789. applyUrl: [
  790. {
  791. required: true,
  792. message: "请上传考试封面",
  793. trigger: "change",
  794. },
  795. ],
  796. applyName: [
  797. { required: true, message: "请输入考试安排", trigger: "blur" },
  798. ],
  799. applyStatus: [
  800. {
  801. type: "array",
  802. required: true,
  803. message: "请至少选择一个可报学员",
  804. trigger: "change",
  805. },
  806. ],
  807. applyStartTime: [
  808. {
  809. type: "date",
  810. required: true,
  811. message: "请选择报名开始时间",
  812. trigger: "change",
  813. },
  814. ],
  815. applyEndTime: [
  816. {
  817. type: "date",
  818. required: true,
  819. message: "请选择报名结束时间",
  820. trigger: "change",
  821. },
  822. ],
  823. },
  824. dialogExamBoxs: false, //考点
  825. dialogExamPlace: false, //考试地点列表
  826. dialogVisiblenew: false,
  827. examPlaces: [],
  828. activeLists: [], //当前选中地点
  829. boxtableData2: [],
  830. newOpenId: "",
  831. intStatus: 0, //1考试地点2考培地点
  832. tableSetTSBBOX2: [
  833. {
  834. label: "考试地点编码",
  835. prop: "code",
  836. hidden: true,
  837. },
  838. {
  839. label: "考试地点",
  840. prop: "siteAddress",
  841. hidden: true,
  842. },
  843. {
  844. label: "同时间可容纳人数",
  845. prop: "people",
  846. hidden: true,
  847. },
  848. {
  849. label: "状态",
  850. prop: "status",
  851. hidden: true,
  852. scope: "status",
  853. },
  854. ],
  855. options: [
  856. {
  857. label: "视频",
  858. value: 1,
  859. },
  860. {
  861. label: "题库",
  862. value: 2,
  863. },
  864. {
  865. label: "补考",
  866. value: 3,
  867. },
  868. {
  869. label: "前培",
  870. value: 4,
  871. },
  872. ],
  873. //表单验证
  874. rulesnew: {
  875. goodsType: [
  876. { required: true, message: "请选择商品类型", trigger: "change" },
  877. ],
  878. educationTypeId: [
  879. { required: true, message: "请选择教育类型", trigger: "change" },
  880. ],
  881. businessId: [
  882. { required: true, message: "请选择业务层次", trigger: "change" },
  883. ],
  884. goodsId: [
  885. {
  886. type: "array",
  887. required: true,
  888. message: "请至少选择一个商品",
  889. trigger: "change",
  890. },
  891. ],
  892. },
  893. busList: [],
  894. businessList: [],
  895. goodsList: [],
  896. bfListData: {},
  897. listDataGoods: {},
  898. dialoginfoWatch: false,
  899. infoData: {
  900. applyStatus: [],
  901. },
  902. };
  903. },
  904. mounted() {
  905. this.getDict();
  906. this.search();
  907. this.getExamPlace();
  908. },
  909. activated() {
  910. this.getDict();
  911. this.search();
  912. this.getExamPlace();
  913. },
  914. watch: {
  915. "listDataGoods.educationTypeId"(value) {
  916. this.businessList = this.busList.filter((item) => {
  917. return item.educationId == value;
  918. });
  919. },
  920. "listDataGoods.businessId"(value) {
  921. if (value) {
  922. if (this.statusPop === 1) {
  923. this.listDataGoods.goodsId = [];
  924. }
  925. this.$api
  926. .inquirepayservelistGoods({ businessId: value })
  927. .then((res) => {
  928. console.log(1121, res.rows);
  929. this.goodsList = res.rows;
  930. });
  931. }
  932. },
  933. },
  934. computed: { ...mapGetters(["educationType"]) },
  935. methods: {
  936. //修改适用商品
  937. editGoods(row) {
  938. this.$api
  939. .inquirepayservegoodsInfo({ applyId: row.applyId })
  940. .then((res) => {
  941. this.$api
  942. .inquirepayservelistGoods({ businessId: res.data.businessId })
  943. .then((result) => {
  944. this.goodsList = result.rows;
  945. });
  946. if (res.data.goodsType && res.data.goodsId.length) {
  947. this.statusPop = 0;
  948. this.bfListData = JSON.parse(JSON.stringify(res.data));
  949. this.listDataGoods = JSON.parse(JSON.stringify(res.data));
  950. } else {
  951. this.statusPop = 1;
  952. this.bfListData = {
  953. goodsId: [],
  954. };
  955. this.listDataGoods = {
  956. applyId: row.applyId,
  957. goodsType: 1,
  958. businessId: "",
  959. goodsId: [],
  960. };
  961. }
  962. this.$nextTick(() => {
  963. this.$refs.listDataGoods.clearValidate();
  964. });
  965. this.dialogVisiblenew = true;
  966. });
  967. },
  968. //提交验证适用商品表单
  969. submitnew(formName) {
  970. this.$refs[formName].validate((valid) => {
  971. if (valid) {
  972. this.rulesTableSumbitnew();
  973. } else {
  974. return false;
  975. }
  976. });
  977. },
  978. //验证通过
  979. rulesTableSumbitnew() {
  980. var data = JSON.parse(JSON.stringify(this.listDataGoods));
  981. this.busList.map((item) => {
  982. if (item.id === data.businessId) {
  983. data.projectId = item.projectId;
  984. }
  985. });
  986. this.$api.systemapplyaddGoods(data).then((res) => {
  987. this.$message.success("适用商品设置成功");
  988. this.dialogVisiblenew = false;
  989. this.search();
  990. });
  991. },
  992. //获取初始基础参数
  993. getDict() {
  994. this.$api.inquirebusinessList({ status: 1 }).then((res) => {
  995. this.busList = res.rows;
  996. });
  997. },
  998. submitPla() {
  999. var data = JSON.parse(JSON.stringify(this.examPlaces));
  1000. if (!data.length) {
  1001. if (this.intStatus === 1) {
  1002. this.$message.warning("请添加考试地点");
  1003. return;
  1004. }
  1005. if (this.intStatus === 2) {
  1006. this.$message.warning("请添加考培地点");
  1007. return;
  1008. }
  1009. }
  1010. for (let i = 0; i < data.length; i++) {
  1011. if (this.intStatus === 1) {
  1012. data[i].status = 1;
  1013. }
  1014. if (this.intStatus === 2) {
  1015. data[i].status = 2;
  1016. }
  1017. if (!data[i].examApplySiteTime.length) {
  1018. if (this.intStatus === 1) {
  1019. this.$message.warning("您还有考试日期没有设置考试时间点,请先设置");
  1020. return;
  1021. }
  1022. if (this.intStatus === 2) {
  1023. this.$message.warning("您还有考培日期没有设置考培时间点,请先设置");
  1024. return;
  1025. }
  1026. } else {
  1027. for (let j = 0; j < data[i].examApplySiteTime.length; j++) {
  1028. if (!data[i].examApplySiteTime[j].examTime) {
  1029. if (this.intStatus === 1) {
  1030. this.$message.warning("您还有考试日期没有设置,请先设置");
  1031. }
  1032. if (this.intStatus === 2) {
  1033. this.$message.warning("您还有考培日期没有设置,请先设置");
  1034. }
  1035. return;
  1036. } else {
  1037. data[i].examApplySiteTime[j].examTime =
  1038. this.$methodsTools.time10to13(
  1039. data[i].examApplySiteTime[j].examTime,
  1040. 1
  1041. );
  1042. }
  1043. if (!data[i].examApplySiteTime[j].examApplySiteTimeTwo.length) {
  1044. if (this.intStatus === 1) {
  1045. this.$message.warning("您还有考试时间点没有设置,请先设置");
  1046. }
  1047. if (this.intStatus === 2) {
  1048. this.$message.warning("您还有考培时间点没有设置,请先设置");
  1049. }
  1050. return;
  1051. } else {
  1052. for (
  1053. let k = 0;
  1054. k < data[i].examApplySiteTime[j].examApplySiteTimeTwo.length;
  1055. k++
  1056. ) {
  1057. if (
  1058. !data[i].examApplySiteTime[j].examApplySiteTimeTwo[k]
  1059. .startTime
  1060. ) {
  1061. this.$message.warning("您还有开始时间没有设置,请先设置");
  1062. return;
  1063. }
  1064. if (
  1065. !data[i].examApplySiteTime[j].examApplySiteTimeTwo[k].endTime
  1066. ) {
  1067. this.$message.warning("您还有结束时间没有设置,请先设置");
  1068. return;
  1069. }
  1070. if (!data[i].examApplySiteTime[j].examApplySiteTimeTwo[k].num) {
  1071. this.$message.warning("您还有人数上限没有设置,请先设置");
  1072. return;
  1073. }
  1074. }
  1075. const stsTime1 = data[i].examApplySiteTime[
  1076. j
  1077. ].examApplySiteTimeTwo.map(
  1078. (val) => val.startTime + "-" + val.endTime
  1079. );
  1080. const idsSet1 = new Set(stsTime1);
  1081. if (idsSet1.size == stsTime1.length) {
  1082. } else {
  1083. if (this.intStatus === 1) {
  1084. this.$message.warning(
  1085. "同一考试日期下的时间点,出现重复,请修改"
  1086. );
  1087. }
  1088. if (this.intStatus === 2) {
  1089. this.$message.warning(
  1090. "同一考培日期下的时间点,出现重复,请修改"
  1091. );
  1092. }
  1093. return;
  1094. }
  1095. }
  1096. }
  1097. const stsTime = data[i].examApplySiteTime.map((val) => val.examTime);
  1098. const idsSet = new Set(stsTime);
  1099. if (idsSet.size == stsTime.length) {
  1100. } else {
  1101. if (this.intStatus === 1) {
  1102. this.$message.warning(
  1103. "同一考试地点下的考试日期,出现重复,请修改"
  1104. );
  1105. }
  1106. if (this.intStatus === 2) {
  1107. this.$message.warning(
  1108. "同一考培地点下的考培日期,出现重复,请修改"
  1109. );
  1110. }
  1111. return;
  1112. }
  1113. }
  1114. }
  1115. this.$api.systemapplyaddSite(data).then((res) => {
  1116. if (this.intStatus === 1) {
  1117. this.$message.success("设置考试地点时间成功");
  1118. }
  1119. if (this.intStatus === 2) {
  1120. this.$message.success("设置考培地点时间成功");
  1121. }
  1122. this.dialogExamBoxs = false;
  1123. this.search();
  1124. });
  1125. },
  1126. //添加考点地点
  1127. submitPlaces() {
  1128. let array = [];
  1129. this.activeLists.forEach((item) => {
  1130. array.push({
  1131. applyId: this.newOpenId,
  1132. siteId: item.siteId,
  1133. siteAddress: item.siteAddress,
  1134. people: item.people,
  1135. examApplySiteTime: [{ examTime: "", examApplySiteTimeTwo: [{}] }],
  1136. });
  1137. });
  1138. this.examPlaces = this.examPlaces.concat(array);
  1139. this.dialogExamPlace = false;
  1140. },
  1141. getExamPlace() {
  1142. var data = {
  1143. status: 1,
  1144. pageSize: this.pageSize2,
  1145. pageNum: this.currentPage2,
  1146. };
  1147. this.$api.inquiresystemsite(data).then((res) => {
  1148. this.boxtableData2 = res.rows;
  1149. this.total2 = res.total;
  1150. });
  1151. },
  1152. openExamPlace() {
  1153. this.activeListExamPlace = [];
  1154. this.examPlaces.forEach((item) => {
  1155. this.activeListExamPlace.push(item.siteId);
  1156. });
  1157. this.dialogExamPlace = true;
  1158. this.$nextTick(function () {
  1159. this.activeLists = [];
  1160. this.$refs.multipleTable2.clearSelection();
  1161. });
  1162. },
  1163. //设置考点
  1164. setExams(row, int) {
  1165. this.intStatus = int;
  1166. this.newOpenId = row.applyId;
  1167. this.$api
  1168. .inquirepayservesiteInfo({ addressStatus: int, applyId: row.applyId })
  1169. .then((res) => {
  1170. res.rows.forEach((item) => {
  1171. item.examApplySiteTime.forEach((items) => {
  1172. items.examTime = this.$methodsTools.time10to13(items.examTime, 2);
  1173. items.examApplySiteTimeTwo = JSON.parse(items.siteTime);
  1174. });
  1175. });
  1176. this.examPlaces = res.rows;
  1177. this.dialogExamBoxs = true;
  1178. });
  1179. },
  1180. // 判断选择时间逻辑
  1181. changeEndTime(int) {
  1182. if (this.listData.applyStartTime === this.listData.applyEndTime) {
  1183. this.$message.warning("开始时间与结束时间不允许相同");
  1184. if (int === 1) {
  1185. this.listData.applyStartTime = "";
  1186. }
  1187. if (int === 2) {
  1188. this.listData.applyEndTime = "";
  1189. }
  1190. return;
  1191. }
  1192. if (
  1193. int === 1 &&
  1194. this.listData.applyEndTime &&
  1195. this.listData.applyStartTime > this.listData.applyEndTime
  1196. ) {
  1197. this.$message.warning(
  1198. "当前选择的开始时间大于结束时间,请重新选择开始时间!"
  1199. );
  1200. this.listData.applyStartTime = "";
  1201. return;
  1202. }
  1203. if (
  1204. int === 2 &&
  1205. this.listData.applyStartTime &&
  1206. this.listData.applyEndTime < this.listData.applyStartTime
  1207. ) {
  1208. this.$message.warning(
  1209. "当前选择的结束时间小于开始时间,请重新选择结束时间!"
  1210. );
  1211. this.listData.applyEndTime = "";
  1212. return;
  1213. }
  1214. },
  1215. editInfo(v) {
  1216. this.addClick(v, 0);
  1217. },
  1218. editImg(e) {
  1219. var file = e.target.files[0];
  1220. if (file === undefined) {
  1221. return;
  1222. }
  1223. if (file.size > 0.3 * 1024 * 1024) {
  1224. this.$message.warning("图片不得大于300kb");
  1225. return;
  1226. }
  1227. var type = this.$refs.file.value.toLowerCase().split(".").splice(-1);
  1228. if (
  1229. type[0] != "jpg" &&
  1230. type[0] != "png" &&
  1231. type[0] != "jpeg" &&
  1232. type[0] != "gif"
  1233. ) {
  1234. this.$message.warning("上传格式需为:.jpg/.png/.jpeg/gif");
  1235. this.$refs.file.value = "";
  1236. return;
  1237. }
  1238. this.$upload.upload(file, 0).then((res) => {
  1239. this.listData.applyUrl = res;
  1240. });
  1241. },
  1242. search(v) {
  1243. this.loading = true;
  1244. var data = {
  1245. status: "0,1,2",
  1246. pageSize: this.pageSize,
  1247. pageNum: this.currentPage,
  1248. };
  1249. this.$api
  1250. .inquiresystemapplyList(data)
  1251. .then((res) => {
  1252. this.tableData = res.rows;
  1253. this.total = res.total;
  1254. this.navText.index = res.total;
  1255. })
  1256. .finally(() => {
  1257. this.loading = false;
  1258. });
  1259. },
  1260. init() {
  1261. this.search();
  1262. },
  1263. watchs(v) {
  1264. console.log(v);
  1265. this.$api.obtainsystemapply(v.applyId).then((res) => {
  1266. if (res.data.applyStatus) {
  1267. res.data.applyStatus = res.data.applyStatus.split(",").map(Number);
  1268. }
  1269. if (res.data.examApplySite.length) {
  1270. for (let i = 0; i < res.data.examApplySite.length; i++) {
  1271. for (
  1272. let j = 0;
  1273. j < res.data.examApplySite[i].examApplySiteTime.length;
  1274. j++
  1275. ) {
  1276. res.data.examApplySite[i].examApplySiteTime[j].siteTime =
  1277. JSON.parse(
  1278. res.data.examApplySite[i].examApplySiteTime[j].siteTime
  1279. );
  1280. }
  1281. }
  1282. }
  1283. if (res.data.examApplySiteTrain.length) {
  1284. for (let i = 0; i < res.data.examApplySiteTrain.length; i++) {
  1285. for (
  1286. let j = 0;
  1287. j < res.data.examApplySiteTrain[i].examApplySiteTime.length;
  1288. j++
  1289. ) {
  1290. res.data.examApplySiteTrain[i].examApplySiteTime[j].siteTime =
  1291. JSON.parse(
  1292. res.data.examApplySiteTrain[i].examApplySiteTime[j].siteTime
  1293. );
  1294. }
  1295. }
  1296. }
  1297. console.log(res.data);
  1298. this.infoData = res.data;
  1299. this.dialoginfoWatch = true;
  1300. });
  1301. },
  1302. del(v, int) {
  1303. this.$alert(
  1304. `确定${
  1305. int === 1 ? "启用" : int === 2 ? "关闭" : int === 3 ? "删除" : "xxx"
  1306. }考试计划【${v.applyName}】?<br />${
  1307. int === 1
  1308. ? "启用后,学员端预约考试的入口同步开通,请慎重考虑!"
  1309. : int === 2
  1310. ? "关闭后,学员端预约考试的入口同步关闭,请慎重考虑!"
  1311. : int === 3
  1312. ? "内容删除后将无法恢复,请慎重考虑"
  1313. : "xxx"
  1314. }`,
  1315. "操作提示",
  1316. {
  1317. dangerouslyUseHTMLString: true,
  1318. }
  1319. )
  1320. .then(() => {
  1321. var data = {
  1322. applyId: v.applyId,
  1323. };
  1324. if (int === 1) {
  1325. data.status = 1;
  1326. }
  1327. if (int === 2) {
  1328. data.status = 0;
  1329. }
  1330. if (int === 3) {
  1331. data.status = -1;
  1332. }
  1333. this.$api.editsystemapply(data).then((res) => {
  1334. this.$message.success(
  1335. `${
  1336. int === 1
  1337. ? "启用"
  1338. : int === 2
  1339. ? "关闭"
  1340. : int === 3
  1341. ? "删除"
  1342. : "xxx"
  1343. }成功`
  1344. );
  1345. this.search();
  1346. this.listDataGoods.businessId = "";
  1347. this.$store.commit("EXAMLIST");
  1348. });
  1349. })
  1350. .catch(() => {
  1351. // this.$message({
  1352. // type: "info",
  1353. // message: "已取消删除",
  1354. // });
  1355. });
  1356. },
  1357. addClick(v, int) {
  1358. if (v === undefined) {
  1359. this.statusPop = 1;
  1360. this.listData = {
  1361. applyStatus: [],
  1362. applyUrl: "oss/images/avatar/20211013/1634097664410_1397766697",
  1363. };
  1364. this.$nextTick(() => {
  1365. this.$refs.listData.clearValidate();
  1366. });
  1367. this.dialogVisible = true;
  1368. } else {
  1369. this.statusPop = int;
  1370. this.$api.obtainsystemapply(v.applyId).then((res) => {
  1371. if (res.data.applyStatus) {
  1372. res.data.applyStatus = res.data.applyStatus.split(",").map(Number);
  1373. }
  1374. if (res.data.applyStartTime) {
  1375. res.data.applyStartTime = this.$methodsTools.time10to13(
  1376. res.data.applyStartTime,
  1377. 2
  1378. );
  1379. }
  1380. if (res.data.applyEndTime) {
  1381. res.data.applyEndTime = this.$methodsTools.time10to13(
  1382. res.data.applyEndTime,
  1383. 2
  1384. );
  1385. }
  1386. this.listData = res.data;
  1387. this.$nextTick(() => {
  1388. this.$refs.listData.clearValidate();
  1389. });
  1390. this.dialogVisible = true;
  1391. });
  1392. }
  1393. },
  1394. submit(formName) {
  1395. this.$refs[formName].validate((valid) => {
  1396. if (valid) {
  1397. this.rulesTableSumbit();
  1398. } else {
  1399. return false;
  1400. }
  1401. });
  1402. },
  1403. rulesTableSumbit() {
  1404. var data = JSON.parse(JSON.stringify(this.listData));
  1405. data.applyStatus = data.applyStatus.toString();
  1406. data.applyStartTime = this.$methodsTools.time10to13(
  1407. data.applyStartTime,
  1408. 1
  1409. );
  1410. data.applyEndTime = this.$methodsTools.time10to13(data.applyEndTime, 1);
  1411. if (this.statusPop === 1) {
  1412. data.status = 0;
  1413. this.$api.appsystemapply(data).then((res) => {
  1414. this.$message.success("新增成功");
  1415. this.dialogVisible = false;
  1416. this.search();
  1417. this.$store.commit("EXAMLIST");
  1418. });
  1419. }
  1420. if (this.statusPop === 0) {
  1421. this.$api.editsystemapply(data).then((res) => {
  1422. this.$message.success("修改成功");
  1423. this.dialogVisible = false;
  1424. this.search();
  1425. this.$store.commit("EXAMLIST");
  1426. });
  1427. }
  1428. },
  1429. close() {
  1430. this.dialogVisible = false;
  1431. },
  1432. handleSizeChange(v) {
  1433. this.pageSize = v;
  1434. this.currentPage = 1;
  1435. this.search();
  1436. },
  1437. handleCurrentChange(v) {
  1438. this.currentPage = v;
  1439. this.search();
  1440. },
  1441. handleSizeChange2(v) {
  1442. this.pageSize2 = v;
  1443. this.currentPage2 = 1;
  1444. this.getExamPlace();
  1445. },
  1446. handleCurrentChange2(v) {
  1447. this.currentPage2 = v;
  1448. this.getExamPlace();
  1449. },
  1450. selectAll2(value) {
  1451. this.activeLists = value;
  1452. },
  1453. select2(value) {
  1454. this.activeLists = value;
  1455. },
  1456. checkboxT2(row, index) {
  1457. if (this.activeListExamPlace.indexOf(row.siteId) !== -1) {
  1458. return false;
  1459. } else {
  1460. return true;
  1461. }
  1462. },
  1463. getRowKeys2(row) {
  1464. return row.siteId;
  1465. },
  1466. },
  1467. };
  1468. </script>
  1469. <style lang="less" scoped>
  1470. .imgBoxWatch {
  1471. width: 200px;
  1472. height: 110px;
  1473. border: 1px solid #eee;
  1474. img {
  1475. width: 100%;
  1476. height: 100%;
  1477. }
  1478. }
  1479. /deep/.el-button {
  1480. border-radius: 8px;
  1481. }
  1482. /deep/.el-dialog {
  1483. border-radius: 8px;
  1484. .el-dialog__header {
  1485. padding: 0;
  1486. .hearders {
  1487. height: 40px;
  1488. display: flex;
  1489. align-items: center;
  1490. justify-content: space-between;
  1491. padding: 0px 18px 0px 20px;
  1492. border-bottom: 1px solid #e2e2e2;
  1493. .leftTitle {
  1494. font-size: 14px;
  1495. font-weight: bold;
  1496. color: #2f4378;
  1497. }
  1498. .rightBoxs {
  1499. display: flex;
  1500. align-items: center;
  1501. img {
  1502. width: 14px;
  1503. height: 14px;
  1504. margin-left: 13px;
  1505. cursor: pointer;
  1506. }
  1507. }
  1508. }
  1509. }
  1510. .el-dialog__footer {
  1511. padding: 0;
  1512. .dialog-footer {
  1513. padding: 0px 40px;
  1514. height: 70px;
  1515. border-top: 1px solid #e2e2e2;
  1516. display: flex;
  1517. align-items: center;
  1518. justify-content: flex-end;
  1519. }
  1520. }
  1521. }
  1522. .imgBox {
  1523. width: 100%;
  1524. // height: 210px;
  1525. border: 1px solid #e2e2e2;
  1526. border-radius: 8px;
  1527. padding: 8px 8px 3px;
  1528. display: flex;
  1529. flex-direction: column;
  1530. align-items: center;
  1531. .imgLabel {
  1532. flex: 1;
  1533. width: 100%;
  1534. border: 1px dotted #e2e2e2;
  1535. color: #999;
  1536. font-size: 14px;
  1537. cursor: pointer;
  1538. border-radius: 8px;
  1539. .msPhoto {
  1540. display: flex;
  1541. justify-content: center;
  1542. align-items: center;
  1543. max-width: 100%;
  1544. max-height: 270px;
  1545. img {
  1546. max-width: 100%;
  1547. max-height: 270px;
  1548. }
  1549. }
  1550. .imgbbx {
  1551. display: flex;
  1552. flex-direction: column;
  1553. align-items: center;
  1554. justify-content: center;
  1555. width: 100%;
  1556. height: 100%;
  1557. i {
  1558. font-weight: bold;
  1559. margin: 14px 0;
  1560. font-size: 24px;
  1561. }
  1562. }
  1563. }
  1564. p {
  1565. margin: 5px 0px;
  1566. }
  1567. }
  1568. .dis_fs {
  1569. display: flex;
  1570. align-items: center;
  1571. .imgBoxs {
  1572. width: 200px;
  1573. height: 130px;
  1574. border: 1px solid #999;
  1575. margin-right: 6px;
  1576. }
  1577. .btns {
  1578. align-self: end;
  1579. border: 1px solid #999;
  1580. font-size: 12px;
  1581. height: 28px;
  1582. line-height: 28px;
  1583. padding: 0px 10px;
  1584. border-radius: 4px;
  1585. cursor: pointer;
  1586. }
  1587. }
  1588. .jbtw {
  1589. justify-content: space-between;
  1590. }
  1591. .bors {
  1592. border: 1px solid #999;
  1593. padding: 0px 8px;
  1594. height: 30px;
  1595. line-height: 30px;
  1596. border-radius: 4px;
  1597. }
  1598. .mar_bgc {
  1599. width: 90%;
  1600. padding: 12px;
  1601. margin-top: 12px;
  1602. background-color: #eee;
  1603. }
  1604. </style>