profile_cert.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. /**
  2. * 账号相关js
  3. *
  4. * @author CaiAoLin
  5. * @date 2018/1/26
  6. * @version
  7. */
  8. $(document).ready(function() {
  9. autoFlashHeight();
  10. $('#addCert').click(function() {
  11. postData('/profile/cert/save', { type: 'add_cert' }, function(result) {
  12. console.log(result);
  13. const html = insertCertHtml(result.total, result.data);
  14. $('#certs').prepend(html);
  15. });
  16. });
  17. $('body').on('click', '#certs .add-jx-btn', function() {
  18. const _self = $(this);
  19. postData('/profile/cert/save', { type: 'add_jx', id: $(this).parents('.one-cert').data('cid') }, function(result) {
  20. console.log(result);
  21. const html = insertJxHtml(result.data, result.jxData);
  22. _self.parents('.pull-right').siblings('.all-jx').prepend(html);
  23. console.log(_self.parents('.pull-right').siblings('.all-jx').children('.one-jx').eq(0).find('.jx-date'));
  24. _self.parents('.pull-right').siblings('.all-jx').children('.one-jx').eq(0).find('.jx-date').datepicker({
  25. onShow: function (res) {
  26. res.$el.attr('readOnly', true);
  27. },
  28. onHide: function (res, animationCompleted) {
  29. if(animationCompleted) {
  30. res.$el.attr('readOnly', false);
  31. const val = res.$el.val();
  32. const oldVal = res.$el.attr('data-old-date') || '';
  33. // 日期格式判断
  34. if (val !== '' && !(isNaN(val) && !isNaN(Date.parse(val)))) {
  35. toastr.error('日期格式有误!');
  36. res.$el.val(oldVal);
  37. if (oldVal === '') {
  38. res.clear();
  39. } else {
  40. res.selectDate(new Date(oldVal));
  41. }
  42. } else if(val !== oldVal) {
  43. const data = {
  44. id: res.$el.parents('.one-cert').data('cid'),
  45. jxid: res.$el.parents('.one-jx').data('jxid'),
  46. key: 'date',
  47. value: val,
  48. };
  49. updateJxDataFun(data);
  50. res.$el.attr('data-old-date', val);
  51. }
  52. }
  53. }
  54. });
  55. });
  56. });
  57. $('body').on('change', '#certs select', function() {
  58. const value = parseInt($(this).val());
  59. const key = $(this).data('type');
  60. const update_data = {
  61. id: $(this).parents('.one-cert').data('cid'),
  62. key,
  63. value,
  64. };
  65. postData('/profile/cert/save', { type: 'update_cert', update_data }, function(result) {
  66. console.log(result);
  67. });
  68. });
  69. $('body').on('change', '#certs .one-cert-msg input[type="text"]', function() {
  70. const value = $(this).val();
  71. const key = $(this).data('type');
  72. const update_data = {
  73. id: $(this).parents('.one-cert').data('cid'),
  74. key,
  75. value,
  76. };
  77. console.log(update_data);
  78. postData('/profile/cert/save', { type: 'update_cert', update_data }, function(result) {
  79. console.log(result);
  80. });
  81. });
  82. $('body').on('change', '#certs .one-jx input[type="text"]', function() {
  83. const value = $(this).val();
  84. const key = $(this).data('type');
  85. const update_data = {
  86. id: $(this).parents('.one-cert').data('cid'),
  87. jxid: $(this).parents('.one-jx').data('jxid'),
  88. key,
  89. value,
  90. };
  91. console.log(update_data);
  92. updateJxDataFun(update_data);
  93. });
  94. // 设置默认值
  95. $('.jx-date').each(function() {
  96. const defaultValue = $(this).val(); // 获取当前元素的 value 属性作为默认值
  97. if (defaultValue) {
  98. // 初始化日期选择器,并设置默认值
  99. $(this).datepicker().data('datepicker').selectDate(new Date(defaultValue));
  100. }
  101. });
  102. $('body .jx-date').datepicker({
  103. onShow: function (res) {
  104. res.$el.attr('readOnly', true);
  105. },
  106. onHide: function (res, animationCompleted) {
  107. if(animationCompleted) {
  108. res.$el.attr('readOnly', false);
  109. const val = res.$el.val();
  110. const oldVal = res.$el.attr('data-old-date') || '';
  111. // 日期格式判断
  112. if (val !== '' && !(isNaN(val) && !isNaN(Date.parse(val)))) {
  113. toastr.error('日期格式有误!');
  114. res.$el.val(oldVal);
  115. if (oldVal === '') {
  116. res.clear();
  117. } else {
  118. res.selectDate(new Date(oldVal));
  119. }
  120. } else if(val !== oldVal) {
  121. const data = {
  122. id: res.$el.parents('.one-cert').data('cid'),
  123. jxid: res.$el.parents('.one-jx').data('jxid'),
  124. key: 'date',
  125. value: val,
  126. };
  127. updateJxDataFun(data);
  128. res.$el.attr('data-old-date', val);
  129. }
  130. }
  131. }
  132. });
  133. $('body').on('click', '#certs .del-cert-btn', function() {
  134. $('#delete-cert-cid').val($(this).attr('data-cid'));
  135. $('#delete-cert-jxid').val($(this).attr('data-jxid'));
  136. if ($(this).attr('data-filename')) {
  137. console.log($(this).attr('data-filename'), $(this).attr('data-jxid'));
  138. const txt = $(this).attr('data-jxid') ? '培训证明:' : '证书附件:';
  139. $('#delete-cert-title').text(txt + $(this).attr('data-filename'));
  140. $('#delete-cert-type').val('file');
  141. } else {
  142. $('#delete-cert-title').text($(this).parents('.modal-header').find('b').text());
  143. $('#delete-cert-type').val('cert');
  144. }
  145. });
  146. $('#delete-cert-btn').click(function() {
  147. const data = {
  148. id: $('#delete-cert-cid').val(),
  149. jxid: $('#delete-cert-jxid').val(),
  150. type: $('#delete-cert-type').val(),
  151. };
  152. console.log(data);
  153. const _self = $(this);
  154. postData('/profile/cert/save', { type: 'del_cert', delete_data: data }, function(result) {
  155. _self.parents('.modal').modal('hide');
  156. if (data.type === 'file') {
  157. if (data.jxid) {
  158. $(`.one-cert[data-cid="${data.id}"] .one-jx[data-jxid="${data.jxid}"]`).find('.file-show').html('<input type="file" class="jx-file-upload">');
  159. } else {
  160. $(`.one-cert[data-cid="${data.id}"]`).find('.one-cert-msg').find('.file-show').html('<input type="file" class="cert-file-upload">');
  161. }
  162. } else {
  163. if (data.jxid) {
  164. $(`.one-cert[data-cid="${data.id}"] .one-jx[data-jxid="${data.jxid}"]`).remove();
  165. // 教育信息重新排序
  166. for (let i = 0; i < $(`.one-cert[data-cid="${data.id}"] .one-jx`).length; i++) {
  167. $(`.one-cert[data-cid="${data.id}"] .one-jx`).eq(i).find('.jx-num').text($(`.one-cert[data-cid="${data.id}"] .one-jx`).length - i);
  168. }
  169. } else {
  170. $(`.one-cert[data-cid="${data.id}"]`).remove();
  171. // 证书信息重新排序
  172. for (let i = 0; i < $(`#certs .one-cert`).length; i++) {
  173. $(`#certs .one-cert`).eq(i).find('.cert-num').text($(`#certs .one-cert`).length - i);
  174. }
  175. }
  176. }
  177. });
  178. });
  179. // 上传证书附件
  180. $('body').on('change', '#certs .cert-file-upload', function () {
  181. const file = this.files[0];
  182. const formData = new FormData();
  183. if (file === undefined) {
  184. toastr.error('未选择上传文件!');
  185. $(this).val('');
  186. return false;
  187. }
  188. const ext = file.name.toLowerCase().split('.').splice(-1)[0];
  189. const imgStr = /(jpg|jpeg|png|bmp|BMP|JPG|PNG|JPEG|pdf|PDF)$/;
  190. if (!imgStr.test(ext)) {
  191. toastr.error('请上传正确的图片或pdf格式文件');
  192. $(this).val('');
  193. return
  194. }
  195. const filesize = file.size;
  196. if (filesize > 30 * 1024 * 1024) {
  197. toastr.error('上传的文件大小不能超过30MB!');
  198. $(this).val('');
  199. return false;
  200. }
  201. const id = $(this).parents('.one-cert').data('cid');
  202. formData.append('type', 'upload_cert');
  203. formData.append('id', id);
  204. formData.append('file', file);
  205. console.log(formData);
  206. $(this).val('');
  207. const _self = $(this).parents('.file-show');
  208. postDataWithFile('/profile/cert/upload', formData, function (result) {
  209. _self.html(`<div class="col-form-label">
  210. <a href="${fujianOssPath + result.file_path}" target="_blank">${result.file_name}</a> &nbsp;<a href="#del-cert" data-cid="${id}" data-jxid="" data-filename="${result.file_name}" data-toggle="modal" data-target="#del-cert" class="del-cert-btn text-danger">删除</a>
  211. </div>`);
  212. });
  213. });
  214. // 上传证书附件
  215. $('body').on('change', '#certs .jx-file-upload', function () {
  216. const file = this.files[0];
  217. const formData = new FormData();
  218. if (file === undefined) {
  219. toastr.error('未选择上传文件!');
  220. $(this).val('');
  221. return false;
  222. }
  223. const ext = file.name.toLowerCase().split('.').splice(-1)[0];
  224. const imgStr = /(jpg|jpeg|png|bmp|BMP|JPG|PNG|JPEG|pdf|PDF)$/;
  225. if (!imgStr.test(ext)) {
  226. toastr.error('请上传正确的图片或pdf格式文件');
  227. $(this).val('');
  228. return
  229. }
  230. const filesize = file.size;
  231. if (filesize > 30 * 1024 * 1024) {
  232. toastr.error('上传的文件大小不能超过30MB!');
  233. $(this).val('');
  234. return false;
  235. }
  236. const id = $(this).parents('.one-cert').data('cid');
  237. const jxid = $(this).parents('.one-jx').data('jxid');
  238. formData.append('type', 'upload_jx');
  239. formData.append('id', id);
  240. formData.append('jxid', jxid);
  241. formData.append('file', file);
  242. console.log(formData);
  243. $(this).val('');
  244. const _self = $(this).parents('.file-show');
  245. postDataWithFile('/profile/cert/upload', formData, function (result) {
  246. _self.html(`<div class="col-form-label">
  247. <a href="${fujianOssPath + result.file_path}" target="_blank">${result.file_name}</a> &nbsp;<a href="#del-cert" data-cid="${id}" data-jxid="${jxid}" data-filename="${result.file_name}" data-toggle="modal" data-target="#del-cert" class="del-cert-btn text-danger">删除</a>
  248. </div>`);
  249. });
  250. })
  251. function updateJxDataFun(data) {
  252. console.log(data);
  253. postData('/profile/cert/save', { type: 'update_jx', update_data: data }, function(result) {
  254. // console.log(result);
  255. });
  256. }
  257. function insertJxHtml(data, jxdata) {
  258. const html = `
  259. <div class="one-jx" data-jxid="${jxdata.id}">
  260. <div class="card mt-3">
  261. <div class="modal-header">
  262. <b>继续教育<span class="jx-num">${data.edu_json.length}</span></b>
  263. <div class="pull-right">
  264. <a href="#del-cert" data-cid="${data.id}" data-jxid="${jxdata.id}" data-toggle="modal" data-target="#del-cert" class="del-cert-btn text-danger">删除</a>
  265. </div>
  266. </div>
  267. <div class="card-body">
  268. <div class="form-group row">
  269. <label for="uname" class="ml-3 col-form-label">培训时间:</label>
  270. <div class="col-sm-10">
  271. <input data-language="zh" data-old-date="${jxdata.date}" data-type="date" placeholder="请选择时间" type="text" data-date-format="yyyy-MM-dd" class="jx-date datepicker-here form-control form-control-sm" value="${jxdata.date ? jxdata.date : ''}">
  272. </div>
  273. </div>
  274. <div class="form-group row">
  275. <label for="uname" class="ml-3 col-form-label">培训单位:</label>
  276. <div class="col-sm-10">
  277. <input type="text" class="form-control form-control-sm" data-type="unit" value="${jxdata.unit ? jxdata.unit : ''}">
  278. </div>
  279. </div>
  280. <div class="form-group row">
  281. <label for="uname" class="ml-3 col-form-label">培训证明:</label>
  282. <div class="col-sm-10 file-show">
  283. <input type="file" class="jx-file-upload">
  284. </div>
  285. </div>
  286. </div>
  287. </div>
  288. </div>`;
  289. return html;
  290. }
  291. function insertCertHtml(i, data) {
  292. let regHtml = ``;
  293. for (const r of certRegConst) {
  294. regHtml += `<option value="${r.value}">${r.name}</option>`;
  295. }
  296. let qualHtml = ``;
  297. for (const q of certQualConst) {
  298. qualHtml += `<option value="${q.value}">${q.name}</option>`;
  299. }
  300. const html = `<div class="col-6 mt-3 one-cert" data-cid="${data.id}">
  301. <div class="card">
  302. <div class="modal-header">
  303. <b>证书信息<span class="cert-num">${i}</span></b>
  304. <div class="pull-right">
  305. <a href="#del-cert" data-cid="${data.id}" data-jxid="" data-toggle="modal" data-target="#del-cert" class="del-cert-btn text-danger">删除</a>
  306. </div>
  307. </div>
  308. <div class="card-body">
  309. <b>持证情况:</b>
  310. <div class="m-3 one-cert-msg">
  311. <div class="form-group row">
  312. <label for="uname" class="ml-3 col-form-label">证件名称:</label>
  313. <div class="row col-sm-10 pr-0">
  314. <div class="col-6 pr-0">
  315. <select class="form-control form-control-sm select—cert-reg" data-type="reg">
  316. <option value="0">请选择</option>
  317. ${regHtml}
  318. </select>
  319. </div>
  320. <div class="col-6 pr-0">
  321. <select class="form-control form-control-sm select—cert-qual" data-type="qual">
  322. <option value="0">请选择</option>
  323. ${qualHtml}
  324. </select>
  325. </div>
  326. </div>
  327. </div>
  328. <div class="form-group row">
  329. <label for="uname" class="ml-3 col-form-label">证件编号:</label>
  330. <div class="col-sm-10">
  331. <input type="text" class="form-control form-control-sm" data-type="code" value="${data.code ? data.code : ''}">
  332. </div>
  333. </div>
  334. <div class="form-group row">
  335. <label for="uname" class="ml-3 col-form-label">注册单位:</label>
  336. <div class="col-sm-10">
  337. <input type="text" class="form-control form-control-sm" data-type="reg_unit" value="${data.reg_unit ? data.reg_unit : ''}">
  338. </div>
  339. </div>
  340. <div class="form-group row">
  341. <label for="uname" class="ml-3 col-form-label">技术职称:</label>
  342. <div class="col-sm-10">
  343. <input type="text" class="form-control form-control-sm" data-type="job_title" value="${data.job_title ? data.job_title : ''}">
  344. </div>
  345. </div>
  346. <div class="form-group row">
  347. <label for="uname" class="ml-3 col-form-label">证书附件:</label>
  348. <div class="col-sm-10 file-show">
  349. <input type="file" class="cert-file-upload">
  350. </div>
  351. </div>
  352. </div>
  353. <div>
  354. <b>继续教育情况:</b>
  355. <div class="pull-right">
  356. <a href="javascript:void(0);" class="add-jx-btn">+添加</a>
  357. </div>
  358. <div class="all-jx">
  359. </div>
  360. </div>
  361. </div>
  362. </div>
  363. </div>`;
  364. return html;
  365. }
  366. });