index.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <template>
  2. <div class="cert-body">
  3. <div v-if="showTable" class="back-button" @click="showTable=false">
  4. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
  5. <path d="M19 11H7.83l4.88-4.88c.39-.39.39-1.03 0-1.42-.39-.39-1.02-.39-1.41 0l-6.59 6.59c-.39.39-.39 1.02 0 1.41l6.59 6.59c.39.39 1.02.39 1.41 0 .39-.39.39-1.03 0-1.42L7.83 13H19c.55 0 1-.45 1-1s-.45-1-1-1z"/>
  6. </svg>
  7. </div>
  8. <el-card style="border-radius: 10px; padding-top: 2rem;">
  9. <div class="content_box_title">
  10. <img
  11. src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAOCAYAAABaSYBTAAAABHNCSVQICAgIfAhkiAAAANRJREFUWEftmO0NgyAYhOtOMIxr6By6RoeBnVTqR2rL6wlFOJPyy+QC3j0vIlAZY55a6/ohNHbd2S7tUWJXOcFaOyilXs++xq4zZPBx24CyA0T+GAHvZisKwK6zAf5aCtgBIn9MgL3rLArArrMAvu1PDBWYAbAIl8EcAoj00hkO4ZY2l+L9KcZARZR0CLekuXXvGBvufe/56xgx/U/B/QOeyxQK+DTcmME/Ty2h5lL3z50hCG5uc1ccxXNmCIa7mGunu4hOuIpwn08z6T2rvmS42mM7AlIFLwQXiU8MAAAAAElFTkSuQmCC" />
  12. <span style="font-weight: 700;">{{showTable?'证书信息':'学时验证'}}</span>
  13. <img
  14. src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAOCAYAAABaSYBTAAAABHNCSVQICAgIfAhkiAAAALRJREFUWEft2LENgCAQBVCZwtoZkBHcwtItnMTedSgI29CgmGhiRBS8K0w+7YX75AEFiCpzGGMa59yglBpjU7nrIZM7g6q/yLHVWkvv/dSuIzaPux4yuTMo+7/GpQwt2Zi/wYb1vsIFbNmNecQFbBns48kFbDlsEhew32BvcQH7HTaKC1ga2AsuYOlgT7iApYU9cAFLD7vhApYHdsftpZRz7Elqra3XT5qOqx4yuTO4+6f+ZhZW89Ai/bICGAAAAABJRU5ErkJggg==" />
  15. </div>
  16. <el-form class="sign-serach" :rules="rules" :inline="false" :model="searchInfo" ref="searchForm"
  17. label-width="80px">
  18. <el-form-item label="身份证号" prop="cardId">
  19. <el-input placeholder="输入身份证" v-model="searchInfo.cardId" type="text" style="width:260px;"
  20. clearable></el-input>
  21. </el-form-item>
  22. <el-form-item label="学员姓名" prop="nickname">
  23. <el-input placeholder="输入姓名" v-model="searchInfo.nickname" type="text" style="width:260px;"
  24. clearable></el-input>
  25. </el-form-item>
  26. <el-form-item label="校验码" prop="code">
  27. <el-input placeholder="校验码" v-model="searchInfo.code" type="text" style="width:130px;" clearable></el-input>
  28. <span class="qr-code ng-scope" @click="changeCode()">
  29. <img alt="验证码" :src="codeShow" v-show="codeShow">
  30. </span>
  31. </el-form-item>
  32. <el-form-item class="form-btn-group" label-width="0px">
  33. <el-button size="medium" @click="resetForm">重 置</el-button>
  34. <el-button size="medium" type="primary" @click="queryCertificate">查 询</el-button>
  35. </el-form-item>
  36. </el-form>
  37. <div v-if="certificates.length>0">
  38. <div class="certificate-cards">
  39. <h3 style="margin: 1rem;">验证结果</h3>
  40. <div v-for="(item, index) in certificates" :key="index" class="card">
  41. <el-card class="custom-card">
  42. <div class="card-content">
  43. <div class="left-section">
  44. <span class="serial-number">{{ index+1 }}</span>
  45. </div>
  46. <div class="right-section">
  47. <p class="right-section-item" style="font-size: 16px;">
  48. <span > {{item.nd}}年度 {{ item.courseName }} </span>
  49. <span > <strong style="color: green;">{{ item.totalXs/10 }}</strong> 学时 </span>
  50. </p>
  51. <p class="right-section-item" style="font-size: 12px;">
  52. <span> 年度:{{item.nd}}</span>
  53. <span style="color: green;margin-right: 20px;"> 合格</span>
  54. </p>
  55. </div>
  56. </div>
  57. </el-card>
  58. </div>
  59. </div>
  60. </div>
  61. <div class="mess_style" style="margin-top: 40px;">
  62. <div class="mess_explain">
  63. <img
  64. src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAABHNCSVQICAgIfAhkiAAAATZJREFUSIm1lrtxwzAQRA8czTh36h5UgBKjEVfgBpyJylyDmwEVuhnHzp4DH6QT/hKlneFwCO7eLsATICcdAF5E9mbI630RkaOIiHNu7tWpFgcCOUpjANcZJYWCGvqE44FZLwtfrlpP3xZcaq1ZfVY2fYPzNGiUBzSEagrgHfgFvhocXzSyCRril2Tt3xrcuOTBDg51CPBtuNsO9zwbM72mgQqfgU9gN8CNdcNGzj+uLpxzPyLyMcq3juE0rTHe0NKq5v879z64EfgbTALApM9LT7AG0cQ/qP4xmiwip9323thHk4djEpGDdb0XTGMcJufcog/Zdr4Sr5lrttfkyYZbmNpm2xNrz6eX74TJTOovB8HloVeuwejptlZLfmbPtYbQ5OmRPR6uYIYWm6n/iymGudXsquJ/zhquFSAu+Z8AAAAASUVORK5CYII=" />
  65. <span>说明</span>
  66. </div>
  67. <div style="margin-top: 3rem;">
  68. <div class="mess_title">01、证书依据</div>
  69. <div class="mess_text">
  70. 宁德市建筑业协会建设行业从业人员继续教育网络培训平台
  71. </div>
  72. <div class="mess_title">02、查询范围</div>
  73. <div class="mess_text">
  74. 施工现场专业人员,企业安全生产培训,安全生产管理人员,建筑施工特种作业人员
  75. </div>
  76. <div class="mess_title">03、联系方式</div>
  77. <div class="mess_text">
  78. 电话: 0593-2823165 邮箱:3436014603@qq.com
  79. </div>
  80. </div>
  81. </div>
  82. </el-card>
  83. </div>
  84. </template>
  85. <script>
  86. import {
  87. httpServer
  88. } from "@/components/httpServer/httpServer.js";
  89. import {curDate} from "@/utils/date.js";
  90. export default {
  91. data() {
  92. return {
  93. id:'',
  94. codeShow: '',
  95. showTable: false,
  96. certificates: [
  97. ],
  98. searchInfo: {
  99. cardId: '',
  100. nickname: '',
  101. code: '',
  102. captchaId: '',
  103. },
  104. rules: {
  105. code: [{
  106. required: true,
  107. message: '请输入校验码',
  108. trigger: 'blur'
  109. },
  110. {
  111. len: 5,
  112. message: '校验码有误',
  113. trigger: 'blur'
  114. },
  115. ],
  116. nickname: [{
  117. required: true,
  118. message: '请输入姓名',
  119. trigger: 'blur',
  120. min: 2
  121. }],
  122. cardId: [{
  123. required: true,
  124. message: '请输入身份证号码',
  125. trigger: 'blur'
  126. },
  127. {
  128. validator: (rule, value, callback) => {
  129. if (!value) {
  130. return callback(new Error('请输入身份证号码'));
  131. }
  132. const cleanValue = value.replace(/[\s()]/g, '').toUpperCase();
  133. const mainlandReg = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/;
  134. const hkReg = /^(?:C(?:\d{8}|[A-HJ-NP-Z]\d{7})|[HM](?:\d{10}|\d{8}))$/;
  135. if (mainlandReg.test(cleanValue) || hkReg.test(cleanValue)) {
  136. callback();
  137. } else {
  138. callback(new Error('请输入正确的大陆身份证(18位)或香港身份证(如 A1234567)'));
  139. }
  140. },
  141. trigger: 'blur'
  142. }
  143. ],
  144. },
  145. }
  146. },
  147. methods: {
  148. resetForm() {
  149. this.searchInfo.cardId = '';
  150. this.searchInfo.nickname = '';
  151. },
  152. changeCode() {
  153. httpServer("Auth.GetValidateCode", {}).then(res => {
  154. if (res.code == 200) {
  155. this.codeShow = res.data.codeData;
  156. this.searchInfo.captchaId = res.data.captchaId;
  157. } else {
  158. this.codeShow = ''
  159. }
  160. })
  161. },
  162. queryCertificate() {
  163. this.$refs.searchForm.validate(valid => {
  164. if (!valid) this.changeCode();
  165. let param = Object.assign({}, this.searchInfo);
  166. this.certificates = []
  167. httpServer("Auth.QueryStudyHistory", param).then(res => {
  168. this.changeCode();
  169. if (res.code != 200) return;
  170. this.certificates = res.data||[]
  171. })
  172. });
  173. }
  174. },
  175. created() {
  176. this.changeCode();
  177. }
  178. }
  179. </script>
  180. <style>
  181. @import url("./index.css");
  182. </style>