sign_up.blade.php 60 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150
  1. @extends('module.layouts.content')
  2. @push('meta')
  3. @endpush
  4. @push('css')
  5. <link href="{{ theme_asset('app/css/common.css') }}" rel="stylesheet">
  6. <link href="{{theme_asset('app/css/recruit/recruit.css')}}" rel="stylesheet" type="text/css"/>
  7. <link href="{{theme_asset('app/css/element.css')}}" rel="stylesheet" type="text/css"/>
  8. <style>
  9. table,table tr th, table tr td { border:1px solid #ccc; padding: 0 7px}
  10. table { width: 100%; min-height: 25px; line-height: 25px; text-align: center; border-collapse: collapse; padding:2px;}
  11. .el-form-item{
  12. margin-bottom: 0;
  13. }
  14. .require{
  15. color: #f56c6c;
  16. }
  17. .avatar-uploader{
  18. padding: 15px;
  19. }
  20. .avatar-uploader .el-upload {
  21. border: 1px dashed #d9d9d9;
  22. border-radius: 6px;
  23. cursor: pointer;
  24. position: relative;
  25. overflow: hidden;
  26. display: inline-block;
  27. vertical-align: middle;
  28. }
  29. .avatar-uploader .el-upload:hover {
  30. border-color: #409EFF;
  31. }
  32. .avatar-uploader-icon {
  33. font-size: 28px;
  34. color: #8c939d;
  35. width: 178px;
  36. height: 178px;
  37. line-height: 178px;
  38. text-align: center;
  39. }
  40. .avatar {
  41. width: 178px;
  42. height: 178px;
  43. display: block;
  44. }
  45. .ticket{
  46. border:3px solid #000;
  47. padding:10px;
  48. }
  49. .ticket h2{
  50. text-align:center;
  51. font:normal 20px/40px "microsoft yahei";
  52. }
  53. .ticket h3{
  54. text-align:center;
  55. font:normal 24px/30px "microsoft yahei";
  56. }
  57. .ex_rule{
  58. margin-top: 20px;
  59. }
  60. .ex_rule h4{
  61. font-size: 20px;
  62. line-height:50px;
  63. }
  64. .ex_rule p{
  65. text-indent: 30px;
  66. line-height: 25px;
  67. }
  68. .ticket .item{
  69. line-height: 30px;
  70. }
  71. @page {
  72. size: auto A4 landscape;
  73. margin: 3mm; /* this affects the margin in the printer settings */
  74. }
  75. </style>
  76. @endpush
  77. @push('js')
  78. @endpush
  79. @section('content')
  80. <div class="recruit_container" id="app" style="margin-top: 20px">
  81. <div role="alert" class="el-message el-message--error" style="position:relative" v-if="user.audit == 2">
  82. <i class="el-message__icon el-icon-error"></i>
  83. <p class="el-message__content">@{{ user.audit_log }}</p>
  84. </div>
  85. <div role="alert" class="el-message el-message--info" style="position:relative" v-if="user.audit == 1">
  86. <i class="el-message__icon el-icon-info"></i>
  87. <p class="el-message__content">您的报名资料正在审核中</p>
  88. </div>
  89. <div role="alert" class="el-message el-message--success" style="position:relative" v-if="user.audit == 3">
  90. <i class="el-message__icon el-icon-success"></i>
  91. <p class="el-message__content">您的报名资料已审核成功</p>
  92. </div>
  93. <p style="text-align:center;line-height:37px;margin-top: 30px">
  94. <span style=";font-family:方正小标宋简体;font-size:29px"><span style="font-family:方正小标宋简体">{{$title}}公开招聘工作人员报名表</span></span>
  95. </p>
  96. <el-form :model="user" ref="userForm" :status-icon="true" :show-message="false" :rules="rules" :disabled="formDisable">
  97. <table cellspacing="0" width="100%">
  98. <tbody>
  99. <tr style="height:52px;page-break-inside:avoid" class="firstRow">
  100. <td valign="center" width="100">
  101. <span class="require">*</span>姓名
  102. </td>
  103. <td valign="center" colspan="4" width="200">
  104. <el-form-item prop="realname" >
  105. <el-input v-model="user.realname" placeholder="请输入您的姓名" style="width: 200px"></el-input>
  106. </el-form-item>
  107. </td>
  108. <td valign="center" width="80">
  109. <span class="require">*</span>性别
  110. </td>
  111. <td valign="center" colspan="2">
  112. <el-form-item prop="sex" >
  113. <el-radio label="1" v-model="user.sex">男</el-radio>
  114. <el-radio label="0" v-model="user.sex">女</el-radio>
  115. </el-form-item>
  116. </td>
  117. <td valign="center" width="100">
  118. <span class="require">*</span>出生年月
  119. </td>
  120. <td valign="center" colspan="2" width="200">
  121. <el-form-item prop="birthday">
  122. <el-date-picker
  123. v-model="user.birthday"
  124. type="date"
  125. placeholder="选择您的出生年月日"
  126. value-format="yyyy-MM-dd">
  127. </el-date-picker>
  128. </el-form-item>
  129. </td>
  130. <td valign="center" rowspan="3" width="200">
  131. <el-form-item prop="avatar" ref="avatar">
  132. <el-upload
  133. class="avatar-uploader"
  134. action="{{ route('recruit.api.upload') }}"
  135. ref="user_avatar"
  136. :data="{name:'avatar',_token:'{{csrf_token()}}'}"
  137. :show-file-list="false"
  138. :before-upload="beforeImageUpload"
  139. :on-success="uploadSuccess">
  140. <img v-if="this.user.avatar" :src="this.user.avatar" class="avatar">
  141. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  142. </el-upload>
  143. </el-form-item>
  144. <div><span><span class="require">*</span>近期免冠证件照(2M以内)</span></div>
  145. </td>
  146. </tr>
  147. <tr style="height:52px;page-break-inside:avoid">
  148. <td valign="center" >
  149. <span class="require">*</span>身份证号码
  150. </td>
  151. <td valign="center" colspan="4" >
  152. <el-form-item prop="card">
  153. <el-input v-model="user.card" placeholder="请输入身份证号码 "></el-input>
  154. </el-form-item>
  155. </td>
  156. <td valign="center">
  157. <span class="require">*</span>民族
  158. </td>
  159. <td valign="center" colspan="2" >
  160. <el-form-item prop="nation">
  161. <el-input v-model="user.nation" placeholder="请输入您的民族"></el-input>
  162. </el-form-item>
  163. </td>
  164. <td valign="center" >
  165. <span class="require">*</span>籍贯
  166. </td>
  167. <td valign="center" colspan="2">
  168. <el-form-item prop="native_place">
  169. <el-input v-model="user.native_place" placeholder="请输入您的籍贯"></el-input>
  170. </el-form-item>
  171. </td>
  172. </tr>
  173. <tr style="height:52px;page-break-inside:avoid">
  174. <td valign="center" >
  175. <span class="require">*</span>政治面貌
  176. </td>
  177. <td valign="center" colspan="4" >
  178. <el-form-item prop="political_affiliation">
  179. <el-select v-model="user.political_affiliation" placeholder="请选择">
  180. <el-option
  181. v-for="item in political_affiliation"
  182. :key="item.value"
  183. :label="item.label"
  184. :value="item.value">
  185. </el-option>
  186. </el-select>
  187. </el-form-item>
  188. </td>
  189. <td valign="center" >
  190. 入党时间
  191. </td>
  192. <td valign="center" colspan="2">
  193. <el-input v-model="user.join_time" placeholder="非党员请放空"></el-input>
  194. </td>
  195. <td valign="center" >
  196. <span class="require">*</span>户籍所在地
  197. </td>
  198. <td valign="center" colspan="2" >
  199. <el-form-item prop="house_register">
  200. <el-input v-model="user.house_register" placeholder="按市县填写,如泉州晋江"></el-input>
  201. </el-form-item>
  202. </td>
  203. </tr>
  204. <tr style="height:52px;page-break-inside:avoid">
  205. <td valign="center" colspan="8" >
  206. <el-form-item prop="education" label="学历" label-width="70px">
  207. <el-select v-model="user.education" placeholder="请选择学历">
  208. <el-option label="小学" value="小学"></el-option>
  209. <el-option label="初中" value="初中"></el-option>
  210. <el-option label="技校" value="技校"></el-option>
  211. <el-option label="职高" value="职高"></el-option>
  212. <el-option label="高中" value="高中"></el-option>
  213. <el-option label="中专" value="中专"></el-option>
  214. <el-option label="专科" value="专科"></el-option>
  215. <el-option label="本科" value="本科"></el-option>
  216. <el-option label="硕士" value="硕士"></el-option>
  217. <el-option label="博士" value="博士"></el-option>
  218. </el-select>
  219. </el-form-item>
  220. </td>
  221. <td valign="center" >
  222. <span class="require">*</span>毕业院校
  223. </td>
  224. <td valign="center" colspan="4" >
  225. <el-form-item prop="school">
  226. <el-input v-model="user.school" autosize placeholder="请输入毕业院校"></el-input>
  227. </el-form-item>
  228. </td>
  229. </tr>
  230. <tr style="height:52px;page-break-inside:avoid">
  231. <td valign="center" colspan="8" >
  232. <el-form-item prop="degree" label="学位" label-width="70px">
  233. <el-select v-model="user.degree" placeholder="请选择学位">
  234. <el-option label="" value=""></el-option>
  235. <el-option label="学士学位" value="学士学位"></el-option>
  236. <el-option label="硕士学位" value="硕士学位"></el-option>
  237. <el-option label="博士学位" value="博士学位"></el-option>
  238. </el-select>
  239. </el-form-item>
  240. </td>
  241. <td valign="center" >
  242. <span class="require">*</span>所学专业
  243. </td>
  244. <td valign="center" colspan="4" >
  245. <el-form-item prop="pro">
  246. <el-input v-model="user.pro" autosize placeholder="多专业请用;分隔"></el-input>
  247. </el-form-item>
  248. </td>
  249. </tr>
  250. <tr style="height:52px;page-break-inside:avoid">
  251. <td valign="center" >
  252. <span class="require">*</span>联系电话
  253. </td>
  254. <td valign="center" colspan="7" >
  255. <el-form-item prop="mobile">
  256. <el-input v-model="user.mobile" placeholder="请输入联系电话"></el-input>
  257. </el-form-item>
  258. </td>
  259. <td valign="center" colspan="1" >
  260. <span class="require">*</span>电子邮箱
  261. </td>
  262. <td valign="center" colspan="3" >
  263. <el-form-item prop="email">
  264. <el-input v-model="user.email" placeholder="请输入电子邮箱"></el-input>
  265. </el-form-item>
  266. </td>
  267. </tr>
  268. <tr style="height:52px;page-break-inside:avoid">
  269. <td valign="center">
  270. <span class="require">*</span>通信地址
  271. </td>
  272. <td valign="center" colspan="7" >
  273. <el-form-item prop="address">
  274. <el-input v-model="user.address" placeholder="请输入地址"></el-input>
  275. </el-form-item>
  276. </td>
  277. <td valign="center" >
  278. <span class="require">*</span>报名岗位
  279. </td>
  280. <td valign="center" colspan="3" >
  281. <el-form-item prop="post_id">
  282. <el-select v-model="user.post_id" placeholder="请选择报名岗位" @change="postChange">
  283. <el-option
  284. v-for="item in post_data"
  285. :key="item.value"
  286. :label="item.label"
  287. :value="item.value">
  288. </el-option>
  289. </el-select>
  290. </el-form-item>
  291. </td>
  292. </tr>
  293. <tr style="height:52px;page-break-inside:avoid">
  294. <td valign="center">
  295. 现工作单位及职务
  296. </td>
  297. <td valign="center" colspan="7" >
  298. <el-input v-model="user.work" placeholder="请输入现工作单位及职务"></el-input>
  299. </td>
  300. <td valign="center" >
  301. 职称或职业资格
  302. </td>
  303. <td valign="center" colspan="3">
  304. <el-input v-model="user.titles" placeholder="请输入职称或职业资格"></el-input>
  305. </td>
  306. </tr>
  307. <tr style="height:52px;page-break-inside:avoid">
  308. <td valign="center" >
  309. <span class="require">*</span>紧急联系人<br />姓名
  310. </td>
  311. <td valign="center" colspan="7" >
  312. <el-form-item prop="concat_name">
  313. <el-input v-model="user.concat_name" placeholder="请输入紧急联系人姓名"></el-input>
  314. </el-form-item>
  315. </td>
  316. <td valign="center">
  317. <span class="require">*</span>联系电话
  318. </td>
  319. <td valign="center" colspan="7" >
  320. <el-form-item prop="concat_mobile">
  321. <el-input v-model="user.concat_mobile" placeholder="请输入联系电话"></el-input>
  322. </el-form-item>
  323. </td>
  324. </tr>
  325. @if(in_array('expand_special',$module))
  326. <tr style="height:52px;page-break-inside:avoid">
  327. <td valign="center" >
  328. 是否申请加分
  329. </td>
  330. <td valign="center" colspan="4">
  331. <el-form-item prop="special.point_apply" >
  332. <el-radio label="1" v-model="user.special.point_apply">是</el-radio>
  333. <el-radio label="0" v-model="user.special.point_apply">否</el-radio>
  334. </el-form-item>
  335. </td>
  336. <td valign="center" colspan="3">
  337. 符合哪一项加分条件
  338. </td>
  339. <td valign="center" colspan="4" >
  340. <el-form-item prop="special_condition">
  341. <el-input v-model="user.special.condition" placeholder="请输入您符合的加分条件" :disabled="special_switch"></el-input>
  342. </el-form-item>
  343. </td>
  344. </tr>
  345. <tr style="height:52px;page-break-inside:avoid">
  346. <td valign="center" >
  347. 申请加分佐证材料
  348. </td>
  349. <td valign="center" colspan="11">
  350. <el-form-item prop="special_material" ref="special_material">
  351. <div style="padding: 10px 0">
  352. <el-upload
  353. action="{{ route('recruit.api.upload') }}"
  354. list-type="picture-card"
  355. :data="{_token:'{{csrf_token()}}'}"
  356. :file-list="user.special.material"
  357. :before-upload="beforeImageUpload"
  358. :on-success="uploadSuccessLP"
  359. :disabled="special_switch"
  360. :multiple="true"
  361. :on-preview="handlePictureCardPreview"
  362. :on-remove="removeLP">
  363. <i class="el-icon-plus"></i>
  364. </el-upload>
  365. </div>
  366. </el-form-item>
  367. </td>
  368. </tr>
  369. @endif
  370. <tr style="height:275px;page-break-inside:avoid">
  371. <td valign="center" >
  372. <span class="require">*</span>个<br />
  373. &nbsp;人<br />
  374. &nbsp;简<br />
  375. &nbsp;历
  376. </td>
  377. <td valign="center" colspan="11" >
  378. <el-form-item prop="resume">
  379. <el-input
  380. type="textarea"
  381. :rows="12"
  382. :placeholder="resume_tip"
  383. v-model="user.resume">
  384. </el-input>
  385. </el-form-item>
  386. </td>
  387. </tr>
  388. @if(in_array('detail',$module))
  389. <tr style="height:132px;page-break-inside:avoid">
  390. <td valign="center" >
  391. 培<br />
  392. 训<br />
  393. 学<br />
  394. 习<br />
  395. 经<br />
  396. </td>
  397. <td valign="center" colspan="11" >
  398. <el-input
  399. type="textarea"
  400. :rows="6"
  401. placeholder="请输入培训经历(若有)"
  402. v-model="user.detail.train">
  403. </el-input>
  404. </td>
  405. </tr>
  406. <tr style="height:94px;page-break-inside:avoid">
  407. <td valign="center" >
  408. 奖<br />
  409. 惩<br />
  410. 情<br />
  411. </td>
  412. <td valign="center" colspan="11" >
  413. <el-input
  414. type="textarea"
  415. :rows="3"
  416. placeholder="请输入奖惩情况(若有)"
  417. v-model="user.detail.rewards_and_punishments">
  418. </el-input>
  419. </td>
  420. </tr>
  421. <tr style="height:159px;page-break-inside:avoid">
  422. <td valign="center" >
  423. 个<br />
  424. 人<br />
  425. 情<br />
  426. 况<br />
  427. 介<br />
  428. </td>
  429. <td valign="center" colspan="11" >
  430. <el-input
  431. type="textarea"
  432. :rows="6"
  433. placeholder="包括但不限于:性格能力自评;个人优缺点;考虑从原单位离职原因;选择应聘本岗位的动机。"
  434. v-model="user.detail.introduce">
  435. </el-input>
  436. </td>
  437. </tr>
  438. @endif
  439. <tr style="height:47px;page-break-inside:avoid">
  440. <td valign="center" :rowspan="this.user.family.length+1">
  441. 家庭成员及其主要社会关系<br />
  442. <el-button type="primary" icon="el-icon-plus" size="small" @click="addFamily">添加家庭成员</el-button><br />
  443. <el-button type="danger" icon="el-icon-minus" size="small" @click="delFamily">删除最后一行</el-button>
  444. </td>
  445. <td valign="center" >
  446. <p style=";text-align:center">
  447. <span style=";font-family:宋体;font-size:14px">称谓</span>
  448. </p>
  449. </td>
  450. <td width="200" valign="center" colspan="4" >
  451. <p style=";text-align:center">
  452. <span style=";font-family:宋体;font-size:14px">姓名</span>
  453. </p>
  454. </td>
  455. <td width="87" valign="center" colspan="2" >
  456. <p style=";text-align:center">
  457. <span style=";font-family:宋体;font-size:14px">出生年月</span>
  458. </p>
  459. </td>
  460. <td width="98" valign="center" colspan="1" >
  461. <p style=";text-align:center">
  462. <span style=";font-family:宋体;font-size:14px">政治面貌</span>
  463. </p>
  464. </td>
  465. <td width="241" valign="center" colspan="3" >
  466. <p style=";text-align:center">
  467. <span style=";font-family:宋体;font-size:14px">工作单位及职位</span>
  468. </p>
  469. </td>
  470. </tr>
  471. <tr style="height:52px;page-break-inside:avoid" v-for="(item,index) in user.family">
  472. <td width="85" valign="center">
  473. <el-form-item :prop="'family.'+index+'.relation'" :rules="{required: true, message: '称谓不能为空', trigger: 'blur'}">
  474. <el-input v-model="item.relation" placeholder="请输入称谓"></el-input>
  475. </el-form-item>
  476. </td>
  477. <td width="200" valign="center" colspan="4" >
  478. <el-form-item :prop="'family.'+index+'.realname'" :rules="{required: true, message: '真实姓名不能为空', trigger: 'blur'}">
  479. <el-input v-model="item.realname" placeholder="请输入真实姓名"></el-input>
  480. </el-form-item>
  481. </td>
  482. <td width="87" valign="center" colspan="2" >
  483. <el-form-item :prop="'family.'+index+'.birthday'" :rules="{required: true, message: '出生年月日不能为空', trigger: 'blur'}">
  484. <el-date-picker
  485. v-model="item.birthday"
  486. type="date"
  487. placeholder="选择出生年月日"
  488. value-format="yyyy-MM-dd">
  489. </el-date-picker>
  490. </el-form-item>
  491. </td>
  492. <td width="98" valign="center" colspan="1" >
  493. <el-form-item :prop="'family.'+index+'.political_affiliation'" :rules="{required: true, message: '请选择您的政治面貌', trigger: 'blur'}">
  494. <el-select v-model="item.political_affiliation" placeholder="请选择">
  495. <el-option
  496. v-for="select in political_affiliation"
  497. :key="select.value"
  498. :label="select.label"
  499. :value="select.value">
  500. </el-option>
  501. </el-select>
  502. </el-form-item>
  503. </td>
  504. <td width="241" valign="center" colspan="3" >
  505. <el-form-item :prop="'family.'+index+'.work'" :rules="{required: true, message: '请输入工作单位及职位', trigger: 'blur'}">
  506. <el-input v-model="item.work" placeholder="请输入工作单位及职位"></el-input>
  507. </el-form-item>
  508. </td>
  509. </tr>
  510. @if(in_array('identification',$module))
  511. <tr style="height:52px;page-break-inside:avoid">
  512. <td valign="center" >
  513. <span class="require">*</span>身份证明<br />
  514. (本人有效身份证正反面或其他身份证明材料)
  515. </td>
  516. <td valign="center" colspan="11">
  517. <el-form-item prop="identification" ref="identification">
  518. <div style="padding: 10px 0">
  519. <el-upload
  520. action="{{ route('recruit.api.upload') }}"
  521. list-type="picture-card"
  522. :data="{_token:'{{csrf_token()}}'}"
  523. :file-list="user.identification"
  524. :before-upload="beforeImageUpload"
  525. :on-success="uploadSuccessID"
  526. :multiple="true"
  527. :on-preview="handlePictureCardPreview"
  528. :on-remove="removeID">
  529. <i class="el-icon-plus"></i>
  530. </el-upload>
  531. </div>
  532. </el-form-item>
  533. </td>
  534. </tr>
  535. @endif
  536. @if(in_array('education_certification',$module))
  537. <tr style="height:52px;page-break-inside:avoid">
  538. <td valign="center" >
  539. <span class="require">*</span>学历证明<br />
  540. (毕业证书、学位证书、学信网等及考试要求的证明材料)
  541. </td>
  542. <td valign="center" colspan="11">
  543. <el-form-item prop="education_certification" ref="education_certification">
  544. <div style="padding: 10px 0">
  545. <el-upload
  546. action="{{ route('recruit.api.upload') }}"
  547. list-type="picture-card"
  548. :data="{_token:'{{csrf_token()}}'}"
  549. :file-list="user.education_certification"
  550. :before-upload="beforeImageUpload"
  551. :on-success="uploadSuccessEDU"
  552. :multiple="true"
  553. :on-preview="handlePictureCardPreview"
  554. :on-remove="removeEDU">
  555. <i class="el-icon-plus"></i>
  556. </el-upload>
  557. </div>
  558. </el-form-item>
  559. </td>
  560. </tr>
  561. @endif
  562. @if(in_array('other_certification',$module))
  563. <tr style="height:52px;page-break-inside:avoid">
  564. <td valign="center" >
  565. 其他证明<br />
  566. (职业资格、职称证书、党员证明、工作经历证明等)
  567. </td>
  568. <td valign="center" colspan="11">
  569. <div style="padding: 10px 0">
  570. <el-upload
  571. action="{{ route('recruit.api.upload') }}"
  572. list-type="picture-card"
  573. :data="{_token:'{{csrf_token()}}'}"
  574. :file-list="user.other_certification"
  575. :before-upload="beforeImageUpload"
  576. :on-success="uploadSuccessOther"
  577. :multiple="true"
  578. :on-preview="handlePictureCardPreview"
  579. :on-remove="removeOther">
  580. <i class="el-icon-plus"></i>
  581. </el-upload>
  582. </div>
  583. </td>
  584. </tr>
  585. @endif
  586. @if(in_array('remark',$module))
  587. <tr style="height:52px;page-break-inside:avoid">
  588. <td valign="center" >
  589. 备注
  590. </td>
  591. <td valign="center" colspan="11">
  592. <div style="padding: 10px 0">
  593. <el-input
  594. type="textarea"
  595. :rows="2"
  596. placeholder="若有备注请输入"
  597. v-model="user.remark">
  598. </el-input>
  599. </div>
  600. </td>
  601. </tr>
  602. @endif
  603. </tbody>
  604. <tfoot>
  605. <tr>
  606. <td height="52" colspan="12" style="padding: 10px 0">
  607. <el-form-item size="large">
  608. <el-button type="primary" @click="save('userForm')" v-if="user.audit != 2">资料暂存</el-button>
  609. <el-button type="success" @click="submit('userForm')">提交报名</el-button>
  610. </el-form-item>
  611. <p style="color: #dd4250">
  612. 提示:若材料准备需要时间,可以使用资料暂存功能,先保存已填写的表单,资料齐全且无误后再点击提交报名
  613. </p>
  614. </td>
  615. </tr>
  616. </tfoot>
  617. </table>
  618. </el-form>
  619. <el-dialog :visible.sync="dialogVisible">
  620. <img width="100%" :src="dialogImageUrl" alt="">
  621. </el-dialog>
  622. </div>
  623. @endsection
  624. @section('script')
  625. <script src="{{theme_asset('app/js/vue.min.js')}}"></script>
  626. <script src="{{theme_asset('app/js/axios.js')}}"></script>
  627. <script src="{{theme_asset('app/js/qs.min.js')}}"></script>
  628. <script src="{{theme_asset('app/js/element.js')}}"></script>
  629. <script>
  630. new Vue({
  631. el: '#app',
  632. data: function() {
  633. return {
  634. resume_tip:"个人简历请严格按如下格式填写:\r\n1993.09-1996.07 \t××市××中学(高中) 学生;\r\n1996.09-2000.07 \t×××××大学(本科)工商管理专业 学生;\r\n2000.09-2001.03\t待业;\r\n2001.04-2004.08\t×××××有限公司(私营企业)总务科 后勤;\r\n2004.09-2007.06\t××市××单位(事业单位)非编 经办;\r\n2005.09-2008.07\t××省×××大学(在职研究生)工商管理专业 学生;\r\n2007.08-至今\t ××省×××单位(参公事业单位)在编 科员。\r\n说明:1.从高中写起到至今,中间不可中断。\r\n \t 2.对在职学习的,应注明。",
  635. loading: this.$loading({
  636. lock: false,
  637. text: '加载中',
  638. spinner: 'el-icon-loading',
  639. background: 'rgba(0, 0, 0, 0.7)'
  640. }),
  641. user:eval({!! $appoint_info !!}),
  642. formDisable:false,
  643. rules:{
  644. realname:[
  645. {required: true, message: '请输入您的姓名', trigger: 'blur'}
  646. ],
  647. sex:[
  648. { required: true, message: '请选择性别', trigger: 'change' }
  649. ],
  650. birthday:[
  651. {required: true, message: '请选择出生日期', trigger: 'change' }
  652. ],
  653. avatar:[
  654. {required: true, message: '请上传蓝底/红底近期证件照', trigger: 'change'}
  655. ],
  656. card:[
  657. {required: true, message: '请输入证件号', trigger: 'blur'},
  658. {validator:this.validID, trigger: 'blur'}
  659. ],
  660. nation:[
  661. {required: true, message: '请输入您的民族', trigger: 'blur'}
  662. ],
  663. native_place:[
  664. {required: true, message: '请输入您的籍贯', trigger: 'blur'}
  665. ],
  666. political_affiliation:[
  667. {required: true, message: '请选择您的政治面貌', trigger: 'blur'}
  668. ],
  669. house_register:[
  670. {required: true, message: '请输入您的户籍所在地', trigger: 'blur'}
  671. ],
  672. // edu_type:[
  673. // {required: true, message: '请选择您的教育类型', trigger: 'change'}
  674. // ],
  675. school:[
  676. {required: true, message: '请输入学校信息', trigger: 'blur'}
  677. ],
  678. education:[
  679. {required: true, message: '请输入学历信息', trigger: 'blur'}
  680. ],
  681. pro:[
  682. {required: true, message: '请输入所学专业', trigger: 'blur'}
  683. ],
  684. mobile:[
  685. {required: true, message: '请输入手机号', trigger: 'blur'},
  686. {validator:this.validMobile, trigger: 'blur'}
  687. ],
  688. email:[
  689. {required: true, message: '请输入电子邮箱', trigger: 'blur'},
  690. {validator:this.validEmail, trigger: 'blur'}
  691. ],
  692. address:[
  693. {required: true, message: '请输入地址', trigger: 'blur'}
  694. ],
  695. post_id:[
  696. {required: true, message: '请选择报名岗位', trigger: 'blur'}
  697. ],
  698. is_push:[
  699. { required: true, message: '请选择是否接送推送', trigger: 'change' }
  700. ],
  701. concat_name:[
  702. {required: true, message: '请输入紧急联系人姓名', trigger: 'blur'}
  703. ],
  704. concat_mobile:[
  705. {required: true, message: '请输入紧急联系人电话', trigger: 'blur'}
  706. ],
  707. @if(in_array('expand_special',$module))
  708. //扩展验证
  709. special_condition:[
  710. {validator:this.validSpecialCondition, trigger: 'blur'}
  711. ],
  712. special_material:[
  713. {validator:this.validSpecialMaterial, trigger: 'change'}
  714. ],
  715. @endif
  716. resume:[
  717. {required: true, message: '请输入个人简历', trigger: 'blur'},
  718. ],
  719. @if(in_array('identification',$module))
  720. //身份验证
  721. identification:[
  722. {validator:this.validIdentification, trigger: 'change'}
  723. ],
  724. @endif
  725. @if(in_array('education_certification',$module))
  726. education_certification:[
  727. {validator:this.validEducertification, trigger: 'change'}
  728. ],
  729. @endif
  730. },
  731. init: 0,
  732. upload: '',
  733. post_data:eval({!! $post !!}),
  734. political_affiliation: [ //国家关于政治面貌的分类标准
  735. {
  736. value: '01',
  737. label: '中共党员'
  738. },
  739. {
  740. value: '02',
  741. label: '中共预备党员'
  742. },
  743. {
  744. value: '03',
  745. label: '共青团员'
  746. },
  747. {
  748. value: '04',
  749. label: '民革党员'
  750. },
  751. {
  752. value: '05',
  753. label: '民盟盟员'
  754. },
  755. {
  756. value: '06',
  757. label: '民建会员'
  758. },
  759. {
  760. value: '07',
  761. label: '民进会员'
  762. },
  763. {
  764. value: '08',
  765. label: '农工党党员'
  766. },
  767. {
  768. value: '09',
  769. label: '致公党党员'
  770. },
  771. {
  772. value: '10',
  773. label: '九三学社社员'
  774. },
  775. {
  776. value: '11',
  777. label: '台盟盟员'
  778. },
  779. {
  780. value: '12',
  781. label: '无党派人士'
  782. },
  783. {
  784. value: '13',
  785. label: '群众'
  786. }
  787. ],
  788. dialogImageUrl: '',
  789. dialogVisible: false,
  790. post_number:'{{$post_number}}',//当前是第几次提交报名
  791. post_times:'{{$post_times}}',//总共允许提交几次
  792. post_limit: eval({!! $post_limit !!}),//所有岗位的报名限制条件
  793. post_limit_value: {},//所选择的岗位限制条件
  794. }
  795. },
  796. methods: {
  797. //验证证件
  798. validID(rule, value, callback){
  799. if(!this.checkIDCard(value)) {
  800. callback(new Error('身份证号不正确'));
  801. }
  802. callback();
  803. },
  804. checkIDCard(cardNo){
  805. var weight_factor = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
  806. var check_code = ['1', '0', 'X' , '9', '8', '7', '6', '5', '4', '3', '2'];
  807. var code = cardNo + "";
  808. var last = cardNo[17];//最后一位
  809. var seventeen = code.substring(0,17);
  810. var arr = seventeen.split("");
  811. var len = arr.length;
  812. var num = 0;
  813. for(var i = 0; i < len; i++){
  814. num = num + arr[i] * weight_factor[i];
  815. }
  816. var resisue = num%11;
  817. var last_no = check_code[resisue];
  818. var idcard_patter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/;
  819. var format = idcard_patter.test(cardNo);
  820. return last === last_no && format ? true : false;
  821. },
  822. //验证手机号码
  823. validMobile(rule, value, callback){
  824. if(!(/^1[3456789]\d{9}$/.test(value))){
  825. callback(new Error('手机号码不正确'));
  826. }
  827. callback();
  828. },
  829. //验证邮箱
  830. validEmail(rule, value, callback){
  831. if(!(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/.test(value))){
  832. callback(new Error('电子邮箱不正确'));
  833. }
  834. callback();
  835. },
  836. //验证头像
  837. validAvatar(rule, value, callback){
  838. callback();
  839. },
  840. validSpecialCondition(rule, value, callback){
  841. if(this.user.special.point_apply == 1 && this.user.special.condition == ''){
  842. callback(new Error('请输入符合加分的条件'));
  843. }else{
  844. callback();
  845. }
  846. },
  847. validSpecialMaterial(rule, value, callback){
  848. if(this.user.special.point_apply == 1 && this.user.special.material.length == 0){
  849. callback(new Error('请上传佐证材料'));
  850. }else{
  851. callback();
  852. }
  853. },
  854. validIdentification(rule, value, callback){
  855. if(this.user.identification.length == 0){
  856. callback(new Error('请上传身份证明证件'));
  857. }else{
  858. callback();
  859. }
  860. },
  861. validEducertification(rule, value, callback){
  862. if(this.user.education_certification.length == 0){
  863. callback(new Error('请上传学历证明证件'));
  864. }else{
  865. callback();
  866. }
  867. },
  868. beforeImageUpload(file) {
  869. const isJPG = (file.type === 'image/jpeg' || file.type === 'image/png');
  870. const isLt2M = file.size / 1024 / 1024 < 2;
  871. if (!isJPG) {
  872. this.$message.error('上传图片只能是 JPG、PNG 格式!');
  873. }
  874. if (!isLt2M) {
  875. this.$message.error('上传图片大小不能超过 2MB!');
  876. }
  877. return isJPG && isLt2M;
  878. },
  879. uploadSuccess(response, file, fileList){
  880. if(response.status){
  881. this.user.avatar = response.path;
  882. }else{
  883. this.$message.error(response.msg);
  884. }
  885. },
  886. uploadSuccessLP(response, file, fileList){
  887. if(response.status){
  888. this.user.special.material = fileList
  889. }else{
  890. this.$message.error(response.msg);
  891. }
  892. },
  893. uploadSuccessID(response, file, fileList){
  894. if(response.status){
  895. this.user.identification = fileList
  896. }else{
  897. this.$message.error(response.msg);
  898. }
  899. },
  900. uploadSuccessEDU(response, file, fileList){
  901. if(response.status){
  902. this.user.education_certification = fileList
  903. }else{
  904. this.$message.error(response.msg);
  905. }
  906. },
  907. uploadSuccessOther(response, file, fileList){
  908. if(response.status){
  909. this.user.other_certification = fileList
  910. }else{
  911. this.$message.error(response.msg);
  912. }
  913. },
  914. removeID(file,fileList) {
  915. this.user.identification = fileList
  916. },
  917. removeLP(file,fileList) {
  918. this.user.special.material = fileList
  919. },
  920. removeEDU(file,fileList) {
  921. this.user.education_certification = fileList
  922. },
  923. removeOther(file,fileList) {
  924. this.user.other_certification = fileList
  925. },
  926. handlePictureCardPreview(file){
  927. this.dialogImageUrl = file.url;
  928. this.dialogVisible = true;
  929. },
  930. postChange(value){
  931. this.post_limit_value = this.post_limit[value];
  932. },
  933. save(formName){
  934. this.user.operation = 1;
  935. this.$refs[formName].validate((valid,object) => {
  936. if (valid) {
  937. this.loading = this.$loading({
  938. lock: false,
  939. text: '加载中',
  940. spinner: 'el-icon-loading',
  941. background: 'rgba(0, 0, 0, 0.7)'
  942. });
  943. this.user._token = '{{csrf_token()}}';
  944. axios.post("{{route('recruit.save_sign_up')}}",Qs.stringify(this.user)).then(response => {
  945. if(response.data.status){
  946. this.$alert(response.data.msg, '提交成功', {
  947. confirmButtonText: '确定',
  948. callback: action => {
  949. window.location.reload();
  950. }
  951. });
  952. }else{
  953. this.$message.error(response.data.msg);
  954. this.loading.close();
  955. return false;
  956. }
  957. });
  958. } else {
  959. for(let key in object){
  960. this.$message.error(object[key][0].message);
  961. return false;
  962. }
  963. return false;
  964. }
  965. })
  966. },
  967. submit(formName){
  968. this.user.operation = 2;
  969. this.$refs[formName].validate((valid,object) => {
  970. if (valid) {
  971. if(this.post_limit_value != '' || this.post_limit_value != null){
  972. for(let key in this.post_limit_value){//职位条件限制
  973. switch(this.post_limit_value[key].op){
  974. case '=':
  975. if(this.user[key] != this.post_limit_value[key].value){
  976. this.$message.error(this.post_limit_value[key].msg);
  977. return false;
  978. }
  979. break;
  980. case '>':
  981. if(key == 'birthday'){
  982. value = this.user[key].replace(/-/g,'');
  983. }else{
  984. value = this.user[key];
  985. }
  986. if(value <= this.post_limit_value[key].value){
  987. this.$message.error(this.post_limit_value[key].msg);
  988. return false;
  989. }
  990. break;
  991. case '>=':
  992. if(key == 'birthday'){
  993. value = this.user[key].replace(/-/g,'');
  994. }else{
  995. value = this.user[key];
  996. }
  997. if(value < this.post_limit_value[key].value){
  998. this.$message.error(this.post_limit_value[key].msg);
  999. return false;
  1000. }
  1001. break;
  1002. case '<':
  1003. if(key == 'birthday'){
  1004. value = this.user[key].replace(/-/g,'');
  1005. }else{
  1006. value = this.user[key];
  1007. }
  1008. if(value < this.post_limit_value[key].value){
  1009. this.$message.error(this.post_limit_value[key].msg);
  1010. return false;
  1011. }
  1012. break;
  1013. case '<=':
  1014. if(key == 'birthday'){
  1015. value = this.user[key].replace(/-/g,'');
  1016. }else{
  1017. value = this.user[key];
  1018. }
  1019. if(value > this.post_limit_value[key].value){
  1020. this.$message.error(this.post_limit_value[key].msg);
  1021. return false;
  1022. }
  1023. break;
  1024. case '!=':
  1025. if(key == 'birthday'){
  1026. value = this.user[key].replace(/-/g,'');
  1027. }else{
  1028. value = this.user[key];
  1029. }
  1030. if(value == this.post_limit_value[key].value){
  1031. this.$message.error(this.post_limit_value[key].msg);
  1032. return false;
  1033. }
  1034. break;
  1035. case 'like':
  1036. if(this.user[key].indexOf(this.post_limit_value[key].value) < 0){
  1037. this.$message.error(this.post_limit_value[key].msg);
  1038. return false;
  1039. }
  1040. break;
  1041. case 'in':
  1042. if(this.post_limit_value[key].value.indexOf(this.user[key]) < 0){
  1043. this.$message.error(this.post_limit_value[key].msg);
  1044. return false;
  1045. }
  1046. break;
  1047. }
  1048. }
  1049. }
  1050. var msg = '报名该场次允许提交'+this.post_times+'次,当前是您第'+this.post_number+'次提交,资料请详细检查!';
  1051. this.$confirm(msg, '提示', {
  1052. confirmButtonText: '检查无误,确定提交',
  1053. cancelButtonText: '我需要再检查一遍',
  1054. type: 'warning'
  1055. }).then(() => {
  1056. this.loading = this.$loading({
  1057. lock: false,
  1058. text: '加载中',
  1059. spinner: 'el-icon-loading',
  1060. background: 'rgba(0, 0, 0, 0.7)'
  1061. });
  1062. this.user._token = '{{csrf_token()}}';
  1063. axios.post("{{route('recruit.save_sign_up')}}",Qs.stringify(this.user)).then(response => {
  1064. if(response.data.status){
  1065. this.$alert(response.data.msg, '提交成功', {
  1066. confirmButtonText: '确定',
  1067. callback: action => {
  1068. window.location.reload();
  1069. }
  1070. });
  1071. }else{
  1072. this.$message.error(response.data.msg);
  1073. this.loading.close();
  1074. return false;
  1075. }
  1076. });
  1077. }).catch(() => {
  1078. });
  1079. } else {
  1080. for(let key in object){
  1081. this.$message.error(object[key][0].message);
  1082. return false;
  1083. }
  1084. return false;
  1085. }
  1086. })
  1087. },
  1088. addFamily(){
  1089. this.user.family.push({
  1090. appellation:'',
  1091. realname:'',
  1092. birthday:'',
  1093. political_attitudes:'',
  1094. work:''
  1095. });
  1096. },
  1097. delFamily(){
  1098. var length = this.user.family.length;
  1099. if (length > 1) {
  1100. this.user.family.pop()
  1101. }else{
  1102. this.$message.error('只剩一条记录,不能再删啦');
  1103. }
  1104. }
  1105. },
  1106. computed:{
  1107. special_switch() {
  1108. if(this.user.special.point_apply == '0'){
  1109. return true;
  1110. }else{
  1111. return false;
  1112. }
  1113. }
  1114. },
  1115. created(){
  1116. this.loading.close();
  1117. var formDisabled = parseInt("{{ $formDisable }}");
  1118. if(this.user.audit == 1 || this.user.audit == 3 || formDisabled === 1){
  1119. this.formDisable = true
  1120. }else{
  1121. this.formDisable = false;
  1122. }
  1123. }
  1124. })
  1125. </script>
  1126. @endsection