certificate_list.html 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <!-- +---------------------------------------------------------------------- -->
  2. <!-- | CRMEB [ CRMEB赋能开发者,助力企业发展 ] -->
  3. <!-- +---------------------------------------------------------------------- -->
  4. <!-- | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved. -->
  5. <!-- +---------------------------------------------------------------------- -->
  6. <!-- | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 -->
  7. <!-- +---------------------------------------------------------------------- -->
  8. <!-- | Author: CRMEB Team <admin@crmeb.com> -->
  9. <!-- +---------------------------------------------------------------------- -->
  10. {extend name="public/container"}
  11. {block name="title"}我的证书{/block}
  12. {block name="head"}
  13. <style>
  14. body {
  15. background-color: #f5f5f5;
  16. }
  17. .honor-list-page ul {
  18. padding: .2rem .3rem;
  19. }
  20. .honor-list-page li {
  21. padding-right: .3rem;
  22. padding-left: .3rem;
  23. border-radius: .12rem;
  24. background-color: #fff;
  25. }
  26. .honor-list-page li ~ li {
  27. margin-top: .2rem;
  28. }
  29. .honor-list-page li .name {
  30. overflow: hidden;
  31. white-space: nowrap;
  32. text-overflow: ellipsis;
  33. padding-top: .3rem;
  34. padding-bottom: .3rem;
  35. font-size: .3rem;
  36. color: #282828;
  37. }
  38. .honor-list-page li .name img {
  39. width: .25rem;
  40. margin-right: .05rem;
  41. pointer-events: none;
  42. -webkit-touch-callout: none;
  43. }
  44. .honor-list-page li .desc {
  45. display: -webkit-box;
  46. display: flex;
  47. -webkit-box-pack: justify;
  48. justify-content: space-between;
  49. -webkit-box-align: center;
  50. align-items: center;
  51. height: 1.48rem;
  52. border-top: 1px dashed #e3e3e3;
  53. font-size: .3rem;
  54. color: #9e9e9e;
  55. }
  56. .honor-list-page li .attr {
  57. display: -webkit-box;
  58. display: flex;
  59. margin-left: -.3rem;
  60. font-size: .24rem;
  61. text-align: center;
  62. color: #999;
  63. }
  64. .honor-list-page li .cell {
  65. position: relative;
  66. padding-right: .35rem;
  67. padding-left: .35rem;
  68. }
  69. .honor-list-page li .cell::before {
  70. content: "";
  71. position: absolute;
  72. top: 50%;
  73. left: 0;
  74. height: .4rem;
  75. border-left: 1px solid rgba(0, 0, 0, .05);
  76. -webkit-transform: translateY(-50%);
  77. transform: translateY(-50%);
  78. }
  79. .honor-list-page li .cell:first-child::before {
  80. display: none;
  81. }
  82. .honor-list-page li a {
  83. height: .5rem;
  84. padding-right: .27rem;
  85. padding-left: .27rem;
  86. border: 1px solid #191C6E;
  87. border-radius: .25rem;
  88. font-size: .24rem;
  89. line-height: .5rem;
  90. text-align: center;
  91. color: #191C6E;
  92. }
  93. .empty {
  94. position: fixed;
  95. top: 50%;
  96. left: 50%;
  97. width: 4.14rem;
  98. -webkit-transform: translate(-50%, -50%);
  99. transform: translate(-50%, -50%);
  100. -webkit-touch-callout: none;
  101. pointer-events: none;
  102. }
  103. </style>
  104. {/block}
  105. {block name="content"}
  106. <div v-cloak id="app">
  107. <div class="honor-list-page">
  108. <ul v-if="certificateList.length">
  109. <li v-for="item in certificateList" :key="item.id">
  110. <div class="name">
  111. <img src="{__WAP_PATH}zsff/images/question01.png">{{ item.certtitle }}
  112. </div>
  113. <div class="desc">
  114. <div v-if="item.obtain === 1 || item.obtain === 3">发放时间<br />{{item.add_time}}</div>
  115. <div v-else class="attr">
  116. <div class="cell">
  117. 题目数
  118. <div>{{ item.content.item_number }}</div>
  119. </div>
  120. <div class="cell">
  121. 错题数
  122. <div>{{ item.content.wrong_question }}</div>
  123. </div>
  124. <div class="cell">
  125. 本次用时
  126. <div>{{ item.content.duration | formatTime }}</div>
  127. </div>
  128. </div>
  129. <a :href="'{:url('topic/certificate_detail')}?obtain=' + item.obtain + '&id=' + item.id">查看证书</a>
  130. </div>
  131. </li>
  132. </ul>
  133. <img v-else-if="page > 1 && !loading" class="empty" src="{__WAP_PATH}zsff/images/no_certificate.png">
  134. </div>
  135. <quick-menu></quick-menu>
  136. </div>
  137. <script>
  138. require([
  139. 'vue',
  140. 'helper',
  141. 'store',
  142. 'moment',
  143. 'quick'
  144. ], function (Vue, $h, $http, moment) {
  145. var vm = new Vue({
  146. el: '#app',
  147. filters: {
  148. formatTime: function (time) {
  149. var hour = Math.floor(time / 3600000);
  150. var minute = Math.floor((time - hour * 3600000) / 60000);
  151. var second = Math.floor((time - hour * 3600000 - minute * 60000) / 1000);
  152. if (hour < 10) {
  153. hour = '0' + hour;
  154. }
  155. if (minute < 10) {
  156. minute = '0' + minute;
  157. }
  158. if (second < 10) {
  159. second = '0' + second;
  160. }
  161. return hour + ':' + minute + ':' + second;
  162. }
  163. },
  164. data: {
  165. page: 1,
  166. limit: 15,
  167. loading: false,
  168. finished: false,
  169. certificateList: []
  170. },
  171. watch: {
  172. loading: function (val) {
  173. val ? $h.loadFFF() : $h.loadClear();
  174. }
  175. },
  176. created: function () {
  177. this.getCertificateList();
  178. },
  179. mounted: function () {
  180. this.$nextTick(function () {
  181. $h.EventUtil.listenTouchDirection(document, function () {
  182. vm.getCertificateList();
  183. });
  184. });
  185. },
  186. methods: {
  187. getCertificateList: function () {
  188. if (this.loading || this.finished) {
  189. return;
  190. }
  191. this.loading = true;
  192. $http.basePost($h.U({
  193. c: 'topic',
  194. a: 'getUserCertificate'
  195. }), {
  196. page: this.page++,
  197. limit: this.limit
  198. }, function (res) {
  199. var certificateList = res.data.data;
  200. for (let i in certificateList) {
  201. //console.log((certificateList[i].add_time * 1000).format('YYYY.MM.DD'))
  202. certificateList[i].add_time = moment(certificateList[i].add_time * 1000).format('YYYY.MM.DD')
  203. }
  204. vm.certificateList = vm.certificateList.concat(certificateList);
  205. vm.loading = false;
  206. vm.finished = vm.limit > certificateList.length;
  207. });
  208. }
  209. }
  210. });
  211. });
  212. </script>
  213. {/block}