index.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878
  1. <template>
  2. <div class="my-classhour">
  3. <div class="my-classhour__body">
  4. <el-tabs :value="activeName" @tab-click="tabChange">
  5. <el-tab-pane label="学习凭证" name="1"></el-tab-pane>
  6. <el-tab-pane label="学时审核" name="2"></el-tab-pane>
  7. </el-tabs>
  8. <template v-if="activeName == '2'">
  9. <div class="no-data" v-if="listData.length == 0">
  10. 您暂无相关学时审核记录哦
  11. </div>
  12. <template v-else>
  13. <div class="learn-list">
  14. <div
  15. class="classhour-item"
  16. v-for="(item, index) in listData"
  17. :key="index"
  18. >
  19. <div class="classhour-item__header">
  20. <div class="state">
  21. 学时审核状态:
  22. <div class="note" v-if="item.periodStatus === -1">
  23. 不可审核
  24. </div>
  25. <div
  26. class="note note--success"
  27. v-if="item.periodStatus === 1"
  28. >
  29. 机构审核通过
  30. </div>
  31. <div class="note note--wait" v-if="item.periodStatus === 2">
  32. 等待审核
  33. </div>
  34. <div class="note note--wait" v-if="item.periodStatus === 3">
  35. 审核中
  36. </div>
  37. <div class="note" v-if="item.periodStatus === 0">
  38. 机构审核不通过,有{{ item.rebuild }}节需要重修
  39. </div>
  40. </div>
  41. </div>
  42. <div class="classhour-item__body clearfix">
  43. <!-- <div class="img"></div> -->
  44. <div class="text">
  45. <div class="title">{{ item.goodsName }}</div>
  46. <div class="desc desc--black" v-if="item.periodStatus === 1">
  47. <template
  48. v-if="
  49. item.educationName == '继续教育' &&
  50. item.businessName == '二级' &&
  51. item.projectName == '建造师'
  52. "
  53. >
  54. 机构已审核通过,需等待信息中心复审后即可获得继续教育学时。审核时间约15个工作日,届时请前往官网申请证书延期。
  55. <div class="copy-btn">
  56. <a @click="copy">复制官网链接</a>
  57. </div>
  58. </template>
  59. </div>
  60. <div class="desc" v-if="item.periodStatus === -1">
  61. 您的学时还未修完,请尽快完成课程学习
  62. </div>
  63. <div class="desc" v-if="item.periodStatus === 2">
  64. 学习完成后7-15个工作日完成学时审核。
  65. </div>
  66. <div class="desc" v-if="item.periodStatus === 0">
  67. 请查看需重学记录,并及时重学对应课程,以免延误学时审核进度。
  68. </div>
  69. <div class="desc" v-if="item.periodStatus === 3">
  70. 会在7-15个工作日左右完成学时审核
  71. </div>
  72. </div>
  73. <div class="btns-wrap">
  74. <div class="btns" v-if="item.periodStatus !== 2">
  75. <el-button
  76. type="primary"
  77. class="btn"
  78. v-if="
  79. item.periodStatus === -1 &&
  80. !(
  81. sysTime <= item.serviceStartTime ||
  82. sysTime >= item.serviceEndTime ||
  83. (item.classStartTime &&
  84. sysTime <= item.classStartTime) ||
  85. (item.classEndTime &&
  86. sysTime >= item.classEndTime) ||
  87. item.learningStatus == 2 ||
  88. item.classStatus == 0 ||
  89. (item.learningStatus == 3 &&
  90. sysTime < item.learningTimeStart)
  91. )
  92. "
  93. @click="goCourseDetail(item)"
  94. >
  95. 课程学习
  96. </el-button>
  97. <el-button
  98. type="primary"
  99. class="btn"
  100. v-if="
  101. item.periodStatus === 1 &&
  102. item.applyStatus === 1 &&
  103. !(
  104. sysTime <= item.serviceStartTime ||
  105. sysTime >= item.serviceEndTime ||
  106. (item.classStartTime &&
  107. sysTime <= item.classStartTime) ||
  108. (item.classEndTime &&
  109. sysTime >= item.classEndTime) ||
  110. item.learningStatus == 2 ||
  111. item.classStatus == 0 ||
  112. (item.learningStatus == 3 &&
  113. sysTime < item.learningTimeStart)
  114. )
  115. "
  116. @click="appointment(item)"
  117. >
  118. 预约考试
  119. </el-button>
  120. <el-button
  121. type="primary"
  122. class="btn"
  123. v-if="
  124. item.periodStatus === 1 &&
  125. item.beforeStatus === 1 &&
  126. !(
  127. sysTime <= item.serviceStartTime ||
  128. sysTime >= item.serviceEndTime ||
  129. (item.classStartTime &&
  130. sysTime <= item.classStartTime) ||
  131. (item.classEndTime &&
  132. sysTime >= item.classEndTime) ||
  133. item.learningStatus == 2 ||
  134. item.classStatus == 0 ||
  135. (item.learningStatus == 3 &&
  136. sysTime < item.learningTimeStart)
  137. )
  138. "
  139. @click="appBeforeAddress(item)"
  140. >
  141. 进入刷题
  142. </el-button>
  143. <el-button
  144. type="primary"
  145. class="btn"
  146. v-if="item.periodStatus === 0 && item.rebuildStatus === 0"
  147. @click="getcourseperiodcheat(item)"
  148. >
  149. 查看详情
  150. </el-button>
  151. <div
  152. class="btn"
  153. v-if="item.periodStatus === 0 && item.rebuildStatus === 1"
  154. @click="goCourseDetail(item)"
  155. >
  156. 重修目录
  157. </div>
  158. </div>
  159. </div>
  160. </div>
  161. </div>
  162. </div>
  163. <div class="pagination">
  164. <el-pagination
  165. @current-change="currentChange"
  166. background
  167. layout="prev, pager, next"
  168. :total="total"
  169. :pager-count="5"
  170. :page-size="param.pageSize"
  171. >
  172. </el-pagination>
  173. </div>
  174. </template>
  175. </template>
  176. <template v-if="activeName == '1'">
  177. <div class="no-data" v-if="listData1.length == 0">
  178. 您暂无相关学习凭证记录哦
  179. </div>
  180. <template v-else>
  181. <div class="certificate-list">
  182. <div
  183. class="certificate-item"
  184. v-for="(item, index) in listData1"
  185. :key="index"
  186. >
  187. <div class="certificate-item__header">
  188. <div class="title">证书名称:</div>
  189. <div class="desc">{{ item.title }}</div>
  190. </div>
  191. <div class="certificate-item__body">
  192. <div class="title">证书编号</div>
  193. <div class="desc">{{ item.certificateCode }}</div>
  194. </div>
  195. <div class="certificate-item__footer">
  196. <div class="btn" @click="preview(item)">查看</div>
  197. <div class="btn" @click="download(item)">下载</div>
  198. </div>
  199. </div>
  200. </div>
  201. <div class="pagination">
  202. <el-pagination
  203. @current-change="currentChange"
  204. background
  205. layout="prev, pager, next"
  206. :total="total"
  207. :pager-count="5"
  208. :page-size="param.pageSize"
  209. >
  210. </el-pagination>
  211. </div>
  212. </template>
  213. </template>
  214. </div>
  215. <el-dialog
  216. title="预约考试"
  217. :visible.sync="appointModal"
  218. width="600px"
  219. class="appoint-modal"
  220. :close-on-click-modal="false"
  221. :close-on-press-escape="false"
  222. >
  223. <div class="appoint-modal__content">
  224. <el-radio
  225. v-for="(appointChild, appointIndex) in appointItem.applyList"
  226. v-model="applyId"
  227. :key="appointIndex"
  228. :label="appointChild.applyId"
  229. >{{ appointChild.applyName }}</el-radio
  230. >
  231. </div>
  232. <span slot="footer" class="dialog-footer">
  233. <el-button @click="appointModal = false">取 消</el-button>
  234. <el-button type="primary" @click="confirmAppoint">立即预约</el-button>
  235. </span>
  236. </el-dialog>
  237. <el-dialog
  238. title="实名验证确认"
  239. :visible.sync="showConfirm"
  240. width="600px"
  241. class="showconfirm"
  242. :close-on-click-modal="false"
  243. :close-on-press-escape="false"
  244. :show-close="false"
  245. >
  246. <div class="showconfirm__content">
  247. <div class="text">
  248. 为避免个人信息不正确导致您的学习时长无效,请认真核对以下信息是否正确,如信息有误请取消当前操作,立刻联系020-38946666
  249. </div>
  250. <el-descriptions :column="1">
  251. <el-descriptions-item label="姓名">{{
  252. userInfo && userInfo.realname
  253. }}</el-descriptions-item>
  254. <el-descriptions-item label="手机号">{{
  255. userInfo && userInfo.telphone
  256. }}</el-descriptions-item>
  257. <el-descriptions-item label="身份证号">{{
  258. userInfo && userInfo.idCard
  259. }}</el-descriptions-item>
  260. </el-descriptions>
  261. <div class="">
  262. <el-checkbox v-model="confirmChecked">确认个人信息无误</el-checkbox>
  263. </div>
  264. </div>
  265. <span slot="footer" class="dialog-footer">
  266. <el-button @click="showConfirm = false">取 消</el-button>
  267. <el-button
  268. type="primary"
  269. @click="confirmUser"
  270. :disabled="confirmCount > 0"
  271. :loading="confirmLoading"
  272. >{{
  273. confirmCount > 0 ? "确 定(" + confirmCount + ")" : "确 定"
  274. }}</el-button
  275. >
  276. </span>
  277. </el-dialog>
  278. <RebuildModal
  279. ref="rebuildModal"
  280. @rebuildSubmit="rebuildSubmit($event)"
  281. ></RebuildModal>
  282. <ExercisesModal ref="exercisesModal"></ExercisesModal>
  283. <el-image-viewer
  284. v-if="showViewer"
  285. :on-close="closeViewer"
  286. :url-list="[url]"
  287. />
  288. </div>
  289. </template>
  290. <script>
  291. import ElImageViewer from "element-ui/packages/image/src/image-viewer";
  292. import RebuildModal from "@/components/rebuildModal";
  293. import ExercisesModal from "@/components/exercisesModal";
  294. import { mapGetters, mapActions } from "vuex";
  295. export default {
  296. name: "MyClasshour",
  297. components: {
  298. RebuildModal,
  299. ElImageViewer,
  300. ExercisesModal
  301. },
  302. computed: {
  303. ...mapGetters(["sysTime", "userInfo"])
  304. },
  305. data() {
  306. return {
  307. appointItem: {},
  308. applyId: "",
  309. appointModal: false,
  310. copyUrl: "http://gdzczx.gdcic.net/",
  311. showViewer: false,
  312. rebuildShow: false,
  313. showDetailModal: false,
  314. confirmChecked: false,
  315. confirmTimer: null,
  316. confirmLoading: false,
  317. confirmCount: 10,
  318. showConfirm: false,
  319. activeName: "1",
  320. activeItem: {},
  321. listData: [],
  322. listData1: [],
  323. rebuildItems: [],
  324. rebuildItem: {},
  325. param: {
  326. pageNum: 1,
  327. pageSize: 10
  328. },
  329. url: "",
  330. total: 0
  331. };
  332. },
  333. mounted() {
  334. this.setSystemTime();
  335. this.getUserCertificateList();
  336. },
  337. methods: {
  338. ...mapActions(["setSystemTime"]),
  339. appBeforeAddress(item) {
  340. console.log(this.$refs.exercisesModal);
  341. this.$refs.exercisesModal.showModal(item);
  342. },
  343. closeViewer() {
  344. this.showViewer = false;
  345. },
  346. async goCourseDetail(item) {
  347. if (item.externalLinkStatus) {
  348. window.open(item.externalLink, "_blank");
  349. return
  350. }
  351. this.activeItem = item;
  352. var confirmDetail = true;
  353. if (item.educationName == "继续教育") {
  354. if (
  355. item.officialName &&
  356. item.businessName == "二级" &&
  357. item.projectName == "建造师"
  358. ) {
  359. confirmDetail = await this.userConfirmInfoDetail(item);
  360. }
  361. }
  362. if (!confirmDetail) {
  363. return;
  364. }
  365. this.$router.push({
  366. path: `/my-course-detail/${item.goodsId}`,
  367. query: {
  368. gradeId: item.gradeId,
  369. orderGoodsId: item.orderGoodsId
  370. }
  371. });
  372. },
  373. confirmUser() {
  374. if (!this.confirmChecked) {
  375. this.$message.warning("请勾选确认个人信息无误");
  376. return;
  377. }
  378. this.confirmLoading = true;
  379. let infoJson = {
  380. realname: this.userInfo.realname,
  381. idCard: this.userInfo.idCard,
  382. telphone: this.userInfo.telphone
  383. };
  384. this.$request
  385. .userConfirminfo({
  386. infoJson: JSON.stringify(infoJson),
  387. orderGoodsId: this.activeItem.orderGoodsId
  388. })
  389. .then(res => {
  390. if (res.data.pushInfo) {
  391. this.$message.success("提交成功");
  392. } else {
  393. this.$confirm(
  394. "您的信息正在推送中,请稍后再进入学习!",
  395. "提示",
  396. {
  397. confirmButtonText: "确定",
  398. closeOnClickModal: false,
  399. closeOnPressEscape: false,
  400. distinguishCancelAndClose: false,
  401. showClose: false,
  402. showCancelButton: false
  403. }
  404. )
  405. .then(_ => {})
  406. .catch(_ => {});
  407. }
  408. this.showConfirm = false;
  409. this.confirmLoading = false;
  410. });
  411. },
  412. userConfirmInfoDetail(item) {
  413. return new Promise(resolve => {
  414. this.$request
  415. .userConfirmInfoDetail({
  416. orderGoodsId: this.activeItem.orderGoodsId
  417. })
  418. .then(res => {
  419. if (!res.data) {
  420. clearInterval(this.confirmTimer);
  421. this.confirmCount = 10;
  422. this.showConfirm = true;
  423. this.confirmTimer = setInterval(() => {
  424. if (this.confirmCount > 0) {
  425. this.confirmCount--;
  426. } else {
  427. clearInterval(this.confirmTimer);
  428. }
  429. }, 1000);
  430. } else {
  431. if (res.data.pushInfo) {
  432. resolve(true);
  433. } else {
  434. this.$confirm(
  435. "您的信息正在推送中,请稍后再进入学习!",
  436. "提示",
  437. {
  438. confirmButtonText: "确定",
  439. closeOnClickModal: false,
  440. closeOnPressEscape: false,
  441. distinguishCancelAndClose: false,
  442. showClose: false,
  443. showCancelButton: false
  444. }
  445. )
  446. .then(_ => {})
  447. .catch(_ => {});
  448. resolve(false);
  449. }
  450. }
  451. });
  452. });
  453. },
  454. tabChange(e) {
  455. console.log(e.name);
  456. if (this.activeName == e.name) {
  457. return;
  458. }
  459. this.activeName = e.name;
  460. this.param.pageNum = 1;
  461. if (this.activeName == "1") {
  462. this.getUserCertificateList();
  463. } else {
  464. this.getcourseperiodlistGoods();
  465. }
  466. },
  467. currentChange(e) {
  468. this.param.pageNum = e;
  469. if (this.activeName == "1") {
  470. this.getUserCertificateList();
  471. } else {
  472. this.getcourseperiodlistGoods();
  473. }
  474. },
  475. appointment(item) {
  476. this.applyId = "";
  477. this.appointItem = item;
  478. this.appointModal = true;
  479. // var data = {
  480. // goodsId: item.goodsId,
  481. // gradeId: item.gradeId,
  482. // };
  483. // this.$request
  484. // .getApplysubscribe(data)
  485. // .then((res) => {
  486. // this.$router.push({
  487. // path: "/person-center/my-classhour/appointment",
  488. // query: {
  489. // goodsId: item.goodsId,
  490. // gradeId: item.gradeId,
  491. // orderGoodsId: item.orderGoodsId,
  492. // },
  493. // });
  494. // })
  495. // .catch((err) => {
  496. // this.$message({
  497. // type: "success",
  498. // message: err.msg,
  499. // });
  500. // });
  501. },
  502. confirmAppoint() {
  503. if (!this.applyId) {
  504. this.$message.warning("请选择要预约的考试");
  505. return;
  506. }
  507. var data = {
  508. goodsId: this.appointItem.goodsId,
  509. gradeId: this.appointItem.gradeId,
  510. applyId: this.applyId,
  511. orderGoodsId: this.appointItem.orderGoodsId
  512. };
  513. this.$request
  514. .getApplysubscribe(data)
  515. .then(res => {
  516. this.$router.push({
  517. path: "/person-center/my-examination/appointment",
  518. query: {
  519. goodsId: this.appointItem.goodsId,
  520. gradeId: this.appointItem.gradeId,
  521. orderGoodsId: this.appointItem.orderGoodsId,
  522. applyId: this.applyId
  523. }
  524. });
  525. })
  526. .catch(err => {
  527. this.$message({
  528. type: "warning",
  529. message: err.msg
  530. });
  531. });
  532. },
  533. rebuildSubmit() {
  534. this.$router.push({
  535. path: `/my-course-detail/${item.goodsId}`,
  536. query: {
  537. gradeId: item.gradeId,
  538. orderGoodsId: item.orderGoodsId
  539. }
  540. });
  541. },
  542. getcourseperiodlistGoods() {
  543. this.$request
  544. .getcourseperiodlistGoods(this.param)
  545. .then(res => {
  546. this.listData = [...res.rows];
  547. this.total = res.total;
  548. })
  549. .catch(err => {});
  550. },
  551. getUserCertificateList() {
  552. this.$request
  553. .getUserCertificateList(this.param)
  554. .then(res => {
  555. this.listData1 = [...res.rows];
  556. this.total = res.total;
  557. })
  558. .catch(err => {});
  559. },
  560. getcourseperiodcheat(item) {
  561. this.$refs.rebuildModal.showModal(item);
  562. },
  563. preview(item) {
  564. this.url = this.$tools.splitImgHost(item.certificatePath);
  565. this.showViewer = true;
  566. },
  567. download(item) {
  568. var url = this.$tools.splitImgHost(item.certificatePath);
  569. var a = document.createElement("a");
  570. var event = new MouseEvent("click");
  571. a.download = "img";
  572. a.href = url;
  573. a.dispatchEvent(event);
  574. },
  575. copy() {
  576. var copyInput = document.createElement("input");
  577. //val是要复制的内容
  578. copyInput.setAttribute("value", this.copyUrl);
  579. document.body.appendChild(copyInput);
  580. copyInput.select();
  581. try {
  582. var copyed = document.execCommand("copy");
  583. if (copyed) {
  584. document.body.removeChild(copyInput);
  585. this.$message.success("复制成功");
  586. }
  587. } catch (err) {
  588. this.$message.error("复制失败,请检查浏览器兼容");
  589. }
  590. }
  591. }
  592. };
  593. </script>
  594. <!-- Add "scoped" attribute to limit CSS to this component only -->
  595. <style scoped lang="scss">
  596. .my-classhour {
  597. &__body {
  598. /deep/ .el-tabs__header {
  599. margin-bottom: 0;
  600. }
  601. .learn-list {
  602. .classhour-item {
  603. margin-top: 24px;
  604. background: #fafbfc;
  605. border-radius: 8px;
  606. overflow: hidden;
  607. &__header {
  608. height: 40px;
  609. border-bottom: 1px solid #eee;
  610. padding: 0 18px;
  611. .state {
  612. margin-top: 8px;
  613. float: left;
  614. font-size: 14px;
  615. font-family: Microsoft YaHei;
  616. font-weight: 400;
  617. color: #666666;
  618. .note {
  619. vertical-align: middle;
  620. display: inline-block;
  621. padding: 0 20px;
  622. height: 24px;
  623. background: #ffeceb;
  624. border: 1px solid #ff3b30;
  625. border-radius: 12px;
  626. font-size: 14px;
  627. font-family: Microsoft YaHei;
  628. font-weight: 400;
  629. color: #ff3b30;
  630. text-align: center;
  631. line-height: 24px;
  632. &--success {
  633. color: #34c759;
  634. border: 1px solid #34c759;
  635. background: #e6feea;
  636. }
  637. &--wait {
  638. color: #007aff;
  639. border: 1px solid #007aff;
  640. background: rgba(247, 250, 255, 1);
  641. }
  642. }
  643. }
  644. .time {
  645. float: right;
  646. line-height: 40px;
  647. text-align: right;
  648. font-size: 12px;
  649. font-family: Microsoft YaHei;
  650. font-weight: 400;
  651. color: #666666;
  652. }
  653. }
  654. &__body {
  655. padding-bottom: 20px;
  656. .img {
  657. float: left;
  658. width: 160px;
  659. height: 90px;
  660. background: #3f8dfd;
  661. }
  662. .text {
  663. width: 700px;
  664. float: left;
  665. margin-left: 12px;
  666. .title {
  667. margin-top: 10px;
  668. font-size: 16px;
  669. font-family: Microsoft YaHei;
  670. font-weight: bold;
  671. color: #333333;
  672. .note {
  673. display: inline-block;
  674. vertical-align: middle;
  675. border: 1px solid #333333;
  676. border-radius: 4px;
  677. font-size: 12px;
  678. font-family: Microsoft YaHei;
  679. font-weight: 400;
  680. color: #333333;
  681. padding: 2px 5px;
  682. margin-left: 12px;
  683. }
  684. }
  685. .desc {
  686. font-size: 16px;
  687. font-family: Microsoft YaHei;
  688. font-weight: 400;
  689. color: #ff3b30;
  690. margin-top: 20px;
  691. .copy-btn {
  692. text-decoration: underline;
  693. padding-top: 10px;
  694. color: #007aff;
  695. }
  696. &--black {
  697. color: #333;
  698. }
  699. }
  700. }
  701. .btns-wrap {
  702. display: table;
  703. float: right;
  704. height: 90px;
  705. width: 130px;
  706. .btns {
  707. display: table-cell;
  708. vertical-align: middle;
  709. text-align: center;
  710. .btn {
  711. cursor: pointer;
  712. margin: 2px 0;
  713. width: 122px;
  714. height: 32px;
  715. padding: 0;
  716. border-radius: 16px;
  717. display: inline-block;
  718. text-align: center;
  719. line-height: 32px;
  720. color: #fff;
  721. &--warm {
  722. background: #ff3b30;
  723. }
  724. }
  725. }
  726. }
  727. }
  728. }
  729. }
  730. .certificate-list {
  731. font-size: 0;
  732. .certificate-item {
  733. display: inline-block;
  734. margin-top: 24px;
  735. margin-right: 24px;
  736. width: 354px;
  737. height: 240px;
  738. background: linear-gradient(0deg, #ffffff, #e7f1ff);
  739. border: 1px solid #eeeeee;
  740. box-shadow: 0px 0px 7px 1px rgba(0, 0, 0, 0.04);
  741. border-radius: 10px;
  742. &:nth-of-type(3n) {
  743. margin: 0;
  744. }
  745. &__header {
  746. padding-left: 18px;
  747. overflow: hidden;
  748. border-bottom: 1px solid #fff;
  749. height: 95px;
  750. .title {
  751. margin-top: 16px;
  752. font-size: 14px;
  753. font-family: Microsoft YaHei;
  754. font-weight: bold;
  755. color: #333333;
  756. }
  757. .desc {
  758. margin-top: 14px;
  759. font-size: 14px;
  760. font-family: Microsoft YaHei;
  761. font-weight: 400;
  762. color: #666666;
  763. }
  764. }
  765. &__body {
  766. padding-left: 18px;
  767. overflow: hidden;
  768. border-bottom: 1px solid #fff;
  769. height: 80px;
  770. .title {
  771. margin-top: 16px;
  772. font-size: 14px;
  773. font-family: Microsoft YaHei;
  774. font-weight: bold;
  775. color: #333333;
  776. }
  777. .desc {
  778. margin-top: 14px;
  779. font-size: 14px;
  780. font-family: Microsoft YaHei;
  781. font-weight: 400;
  782. color: #666666;
  783. }
  784. }
  785. &__footer {
  786. height: 65px;
  787. padding-top: 16px;
  788. text-align: center;
  789. .btn {
  790. cursor: pointer;
  791. margin: 0 12px;
  792. display: inline-block;
  793. width: 122px;
  794. height: 32px;
  795. border: 1px solid #3f8dfd;
  796. border-radius: 16px;
  797. text-align: center;
  798. line-height: 30px;
  799. color: #3f8dfd;
  800. font-size: 16px;
  801. }
  802. }
  803. }
  804. }
  805. .no-data {
  806. text-align: center;
  807. padding: 50px 0;
  808. color: #666;
  809. font-size: 16px;
  810. }
  811. .pagination {
  812. padding: 30px 0;
  813. text-align: center;
  814. }
  815. }
  816. .appoint-modal {
  817. &__content {
  818. .el-radio {
  819. display: block;
  820. margin: 10px 30px 10px 0;
  821. }
  822. }
  823. }
  824. }
  825. </style>