Enroll.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. <template>
  2. <div class="enroll-all">
  3. <div class="enroll-form-box">
  4. <div class="enroll-title">员工注册</div>
  5. <el-form
  6. :model="ruleForm"
  7. :rules="rules"
  8. ref="ruleForm"
  9. label-width="100px"
  10. class="demo-ruleForm"
  11. >
  12. <div class="form-li">
  13. <el-form-item label="中文名称" prop="mandarinName">
  14. <el-input @blur="emailpj" v-model="ruleForm.mandarinName"></el-input>
  15. </el-form-item>
  16. <el-form-item label="英文名称" prop="eflName">
  17. <el-input @blur="emailpj" v-model="ruleForm.eflName"></el-input>
  18. </el-form-item>
  19. </div>
  20. <div class="form-li">
  21. <el-form-item label="邮箱" prop="email">
  22. <el-input v-model="ruleForm.email">
  23. <template slot="append">@pan-american-intl.com</template>
  24. </el-input>
  25. </el-form-item>
  26. <el-form-item label="性别" prop="sex">
  27. <el-radio-group v-model="ruleForm.sex">
  28. <el-radio label="男"></el-radio>
  29. <el-radio label="女"></el-radio>
  30. </el-radio-group>
  31. </el-form-item>
  32. </div>
  33. <div class="form-li">
  34. <el-form-item label="手机号" prop="phone">
  35. <el-input v-model="ruleForm.phone"></el-input>
  36. </el-form-item>
  37. <el-form-item label="紧急电话" prop="urgentphone">
  38. <el-input v-model="ruleForm.urgentphone"></el-input>
  39. </el-form-item>
  40. </div>
  41. <div class="form-li">
  42. <el-form-item label="密码" prop="pass">
  43. <el-input v-model="ruleForm.pass" show-password></el-input>
  44. </el-form-item>
  45. <el-form-item label="确认密码" prop="checkPass">
  46. <el-input v-model="ruleForm.checkPass" show-password></el-input>
  47. </el-form-item>
  48. </div>
  49. <div class="form-li">
  50. <el-form-item label="身份证号" prop="IDnumber">
  51. <el-input v-model="ruleForm.IDnumber"></el-input>
  52. </el-form-item>
  53. <el-form-item label="入职时间" prop="datebirth">
  54. <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.datebirth" style="width: 100%;"></el-date-picker>
  55. <!-- <el-input v-model="ruleForm.datebirth"></el-input> -->
  56. </el-form-item>
  57. </div>
  58. <div class="form-li">
  59. <el-form-item label="学历" prop="educated">
  60. <el-select v-model="ruleForm.educated" placeholder="请选择学历">
  61. <el-option label="小学" value="1"></el-option>
  62. <el-option label="初中" value="2"></el-option>
  63. <el-option label="高中" value="3"></el-option>
  64. <el-option label="专科" value="4"></el-option>
  65. <el-option label="本科" value="5"></el-option>
  66. <el-option label="研究生" value="6"></el-option>
  67. </el-select>
  68. </el-form-item>
  69. <el-form-item label="专业" prop="specialized">
  70. <el-input v-model="ruleForm.specialized"></el-input>
  71. </el-form-item>
  72. <el-form-item label="毕业院校" prop="school">
  73. <el-input v-model="ruleForm.school"></el-input>
  74. </el-form-item>
  75. <el-form-item label="教育类型" prop="recruitment">
  76. <el-select v-model="ruleForm.recruitment" placeholder="请选择教育类型">
  77. <el-option label="统招" value="0"></el-option>
  78. <el-option label="成教" value="1"></el-option>
  79. </el-select>
  80. </el-form-item>
  81. <el-form-item label="婚姻状况" prop="maritalstatus">
  82. <el-input v-model="ruleForm.maritalstatus"></el-input>
  83. </el-form-item>
  84. <el-form-item label="居住住址" prop="address">
  85. <el-input v-model="ruleForm.address"></el-input>
  86. </el-form-item>
  87. </div>
  88. <div class="form-li">
  89. <el-form-item label="家庭地址" prop="homeAddress">
  90. <el-input v-model="ruleForm.homeAddress"></el-input>
  91. </el-form-item>
  92. <el-form-item label="所属公司" prop="corporation">
  93. <el-select v-model="ruleForm.corporation" value-key="id" @change="changeCorporation" placeholder="请选择所属公司">
  94. <el-option
  95. v-for="item in CorporationOption"
  96. :key="item.companyId"
  97. :label="item.companyName"
  98. :value="item.companyId">
  99. </el-option>
  100. </el-select>
  101. </el-form-item>
  102. <el-form-item label="所属部门" prop="division">
  103. <el-select v-model="ruleForm.division" value-key="id" @change="changeDivision" placeholder="请选择所属部门">
  104. <el-option
  105. v-for="item in DivisionOption"
  106. :key="item.depId"
  107. :label="item.depName"
  108. :value="item.depId">
  109. </el-option>
  110. </el-select>
  111. </el-form-item>
  112. <el-form-item label="职位" prop="posts">
  113. <el-select v-model="ruleForm.posts" placeholder="请选择职位">
  114. <el-option
  115. v-for="item in PostsOption"
  116. :key="item.jobId"
  117. :label="item.jobName"
  118. :value="item.jobId">
  119. </el-option>
  120. </el-select>
  121. </el-form-item>
  122. </div>
  123. <el-form-item label="工作经历" prop="desc">
  124. <el-input type="textarea" v-model="ruleForm.desc"></el-input>
  125. </el-form-item>
  126. <div class="enroll-btn">
  127. <el-button type="primary" @click="submitForm('ruleForm')">立即注册</el-button>
  128. <el-button @click="resetForm('ruleForm')">重置</el-button>
  129. <el-button @click="houtui()">返回</el-button>
  130. </div>
  131. </el-form>
  132. </div>
  133. </div>
  134. </template>
  135. <script>
  136. import { pinyin } from 'pinyin-pro';
  137. export default {
  138. data() {
  139. var validatePass = (rule, value, callback) => {
  140. if (value === "") {
  141. callback(new Error("请输入密码"));
  142. } else {
  143. if (this.ruleForm.checkPass !== "") {
  144. this.$refs.ruleForm.validateField("checkPass");
  145. }
  146. callback();
  147. }
  148. };
  149. var validatePass2 = (rule, value, callback) => {
  150. if (value === "") {
  151. callback(new Error("请再次输入密码"));
  152. } else if (value !== this.ruleForm.pass) {
  153. callback(new Error("两次输入密码不一致!"));
  154. } else {
  155. callback();
  156. }
  157. };
  158. var phonePass = (rule, value, callback) => {
  159. console.log(value)
  160. console.log(this.ruleForm.phone)
  161. if (value === "") {
  162. callback(new Error("请输入紧急电话"));
  163. }else if (value === this.ruleForm.phone) {
  164. callback(new Error("紧急电话与联系电话不能一致!"));
  165. }else {
  166. callback();
  167. }
  168. };
  169. return {
  170. CorporationOption:[],//公司
  171. DivisionOption:[],//部门
  172. PostsOption:[],//职位
  173. ruleForm: {
  174. mandarinName: "",//中文名称
  175. eflName: "",//英文名称
  176. sex: "",//性别
  177. email: "",//邮箱
  178. phone: "",//手机号
  179. urgentphone: "",//紧急电话
  180. pass: "",//密码
  181. checkPass: "",//确认密码
  182. IDnumber: "",//身份证号
  183. educated: "",//学历
  184. specialized: "",//专业
  185. school: "",//毕业院校
  186. recruitment: "",//统招/成教
  187. datebirth: "",//入职时间
  188. homeAddress:"",//家庭地址
  189. maritalstatus: "",//婚姻状况
  190. address: "",//现在居住住址
  191. corporation: "",//所属公司
  192. division: "",//所属部门
  193. posts:"",//职位
  194. desc: "",//工作经历
  195. },
  196. rules: {
  197. mandarinName: [
  198. { required: true, message: "中文名称", trigger: "blur" },
  199. { min: 2, max: 6, message: "长度在 3 到 5 个字符", trigger: "blur" },
  200. ],
  201. eflName: [
  202. { required: true, message: "英文名称", trigger: "blur" },
  203. { min: 0, max: 10, message: "长度在 0 到 10 个字符", trigger: "blur" },
  204. ],
  205. sex: [{ required: true, message: "请选择性别", trigger: "change" }],
  206. email: [
  207. { required: true, message: "请输入邮箱地址", trigger: "blur" },
  208. // {
  209. // type: "email",
  210. // message: "请输入正确的邮箱地址",
  211. // trigger: ["blur", "change"],
  212. // },
  213. ],
  214. phone: [
  215. { required: true, message: "手机号必填", trigger: "blur" },
  216. {
  217. pattern: /^1[3456789]\d{9}$/,
  218. message: "手机号码格式不正确",
  219. trigger: "blur",
  220. },
  221. ],
  222. urgentphone: [
  223. { required: true,validator: phonePass, trigger: "blur" },
  224. {
  225. pattern: /^1[3456789]\d{9}$/,
  226. message: "紧急号码格式不正确",
  227. trigger: "blur",
  228. },
  229. ],
  230. pass: [
  231. { required: true, validator: validatePass, trigger: "blur" },
  232. {
  233. min: 6,
  234. max: 18,
  235. message: "长度在 6 到 18 个字符",
  236. trigger: "blur",
  237. },
  238. ],
  239. checkPass: [
  240. { required: true, validator: validatePass2, trigger: "blur" },
  241. {
  242. min: 6,
  243. max: 18,
  244. message: "长度在 6 到 18 个字符",
  245. trigger: "blur",
  246. },
  247. ],
  248. IDnumber: [
  249. { required: true, message: "请填写证件号码", trigger: "blur" },
  250. {
  251. pattern:
  252. /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/,
  253. message: "证件号码格式有误!",
  254. trigger: "blur",
  255. },
  256. ],
  257. datebirth: [
  258. {
  259. required: true,
  260. message: "请选择入职日期",
  261. trigger: "change",
  262. },
  263. ],
  264. educated: [{ required: true, message: "请选择学历", trigger: "change" }],
  265. specialized: [
  266. { required: true, message: "请填写专业", trigger: "blur" },
  267. ],
  268. school: [
  269. { required: true, message: "请填写毕业院校", trigger: "blur" },
  270. ],
  271. recruitment: [
  272. { required: true, message: "请填写统招/成教", trigger: "blur" },
  273. ],
  274. maritalstatus: [
  275. { required: true, message: "请填写婚姻状况", trigger: "blur" },
  276. ],
  277. address: [
  278. { required: true, message: "请填写现在居住住址", trigger: "blur" },
  279. ],
  280. homeAddress: [
  281. { required: true, message: "请填写家庭地址", trigger: "blur" },
  282. ],
  283. corporation: [
  284. { required: true, message: "请选择所属公司", trigger: "change" },
  285. ],
  286. division: [
  287. { required: true, message: "请选择所属部门", trigger: "blur" },
  288. ],
  289. posts: [
  290. { required: true, message: "请选择职位", trigger: "blur" },
  291. ],
  292. desc: [{ required: true, message: "请填写工作经历", trigger: "blur" }],
  293. },
  294. };
  295. },
  296. methods: {
  297. submitForm(formName) {
  298. this.$refs[formName].validate((valid) => {
  299. if (valid) {
  300. this.register()
  301. } else {
  302. console.log("error submit!!");
  303. return false;
  304. }
  305. });
  306. },
  307. resetForm(formName) {
  308. this.$refs[formName].resetFields();
  309. },
  310. //邮箱拼接
  311. emailpj(){
  312. let emailall;
  313. let surname=pinyin(this.ruleForm.mandarinName[0], {toneType: 'none'})
  314. this.ruleForm.email=this.ruleForm.eflName+'.'+surname
  315. emailall=this.ruleForm.eflName+'.'+surname+'@pan-american-intl.com'
  316. console.log(emailall)
  317. },
  318. //获取公司
  319. daraSource(){
  320. var url = "/api/register/daraSource"
  321. var that = this
  322. this.$axios({
  323. method: 'post',
  324. url: url,
  325. headers: {
  326. Authorization: 'Bearer ' + this.token
  327. }
  328. }).then(function (res) {
  329. if(res.data.code==200){
  330. console.log(res)
  331. that.CorporationOption=res.data.data;
  332. }else{
  333. that.$message({
  334. message: '加载失败!原因:'+res.data.msg,
  335. type: 'warning'
  336. });
  337. }
  338. })
  339. },
  340. //处理性别
  341. sxechuli(val){
  342. if(val=='男'){
  343. return 0
  344. }else if(val=='女'){
  345. return 1
  346. }
  347. },
  348. //日期处理(日)
  349. TimeProcessingri(val){
  350. if(val instanceof Date){
  351. let newsyear=val.getFullYear();
  352. let newsMonth=val.getMonth() + 1;
  353. let newsday=val.getDate();
  354. if((val.getMonth() + 1)<10){
  355. newsMonth='0'+newsMonth
  356. }else{
  357. newsMonth=val.getMonth() + 1
  358. }
  359. return newsyear+ '-' +newsMonth+ '-' + newsday;
  360. }else{
  361. return val
  362. }
  363. },
  364. //切换公司
  365. changeCorporation(item){
  366. console.log(item);
  367. this.ruleForm.division='';
  368. this.ruleForm.posts='';
  369. for(let i=0;i<this.CorporationOption.length;i++){
  370. if(this.CorporationOption[i].companyId==item){
  371. this.DivisionOption=this.CorporationOption[i].subDep
  372. }
  373. }
  374. // console.log(this.DivisionOption)
  375. },
  376. //切换部门
  377. changeDivision(item){
  378. this.ruleForm.posts='';
  379. for(let j=0;j<this.DivisionOption.length;j++){
  380. if(this.DivisionOption[j].depId==item){
  381. this.PostsOption=this.DivisionOption[j].subJob
  382. }
  383. }
  384. // console.log(this.PostsOption)
  385. },
  386. //注册
  387. register(){
  388. var url = "/api/register"
  389. var that = this
  390. let data={
  391. createUserId:0,
  392. cnName:that.ruleForm.mandarinName,
  393. enName:that.ruleForm.eflName,
  394. email:that.ruleForm.email+'@pan-american-intl.com',
  395. sex:that.sxechuli(that.ruleForm.sex),
  396. phone:that.ruleForm.phone,
  397. urgencyPhone:that.ruleForm.urgentphone,
  398. password:that.ruleForm.pass,
  399. address:that.ruleForm.address,
  400. idCrad:that.ruleForm.IDnumber,
  401. education:that.ruleForm.educated,
  402. major:that.ruleForm.specialized,
  403. graduationSchhol:that.ruleForm.school,
  404. educationType:that.ruleForm.recruitment,
  405. maritalStatus:that.ruleForm.maritalstatus,
  406. homeAddress:that.ruleForm.homeAddress,
  407. companyId:that.ruleForm.corporation,
  408. depId:that.ruleForm.division,
  409. jobPostId:that.ruleForm.posts,
  410. workExperience:that.ruleForm.desc,
  411. edate:that.TimeProcessingri(that.ruleForm.datebirth),
  412. }
  413. console.log(data)
  414. this.$axios({
  415. method: 'post',
  416. url: url,
  417. headers: {
  418. Authorization: 'Bearer ' + this.token
  419. },
  420. data:{
  421. createUserId:0,
  422. cnName:that.ruleForm.mandarinName,
  423. enName:that.ruleForm.eflName,
  424. email:that.ruleForm.email+'@pan-american-intl.com',
  425. sex:that.sxechuli(that.ruleForm.sex),
  426. phone:that.ruleForm.phone,
  427. urgencyPhone:that.ruleForm.urgentphone,
  428. password:that.ruleForm.pass,
  429. address:that.ruleForm.address,
  430. idCrad:that.ruleForm.IDnumber,
  431. education:that.ruleForm.educated,
  432. major:that.ruleForm.specialized,
  433. graduationSchhol:that.ruleForm.school,
  434. educationType:that.ruleForm.recruitment,
  435. maritalStatus:that.ruleForm.maritalstatus,
  436. homeAddress:that.ruleForm.homeAddress,
  437. companyId:that.ruleForm.corporation,
  438. depId:that.ruleForm.division,
  439. jobPostId:that.ruleForm.posts,
  440. workExperience:that.ruleForm.desc,
  441. edate:that.TimeProcessingri(that.ruleForm.datebirth),
  442. }
  443. }).then(function (res) {
  444. if(res.data.code==200){
  445. console.log(res)
  446. that.ruleForm= {
  447. mandarinName: "",//中文名称
  448. eflName: "",//英文名称
  449. sex: "",//性别
  450. email: "",//邮箱
  451. phone: "",//手机号
  452. urgentphone: "",//紧急电话
  453. pass: "",//密码
  454. checkPass: "",//确认密码
  455. IDnumber: "",//身份证号
  456. educated: "",//学历
  457. specialized: "",//专业
  458. school: "",//毕业院校
  459. recruitment: "",//统招/成教
  460. datebirth: "",//入职时间
  461. homeAddress:"",//家庭地址
  462. maritalstatus: "",//婚姻状况
  463. address: "",//现在居住住址
  464. corporation: "",//所属公司
  465. division: "",//所属部门
  466. posts:"",//职位
  467. desc: "",//工作经历
  468. },
  469. that.$notify({
  470. title: '注册成功',
  471. message: res.data.msg,
  472. type: 'success',
  473. duration: 0
  474. });
  475. }else{
  476. that.$message({
  477. message: '注册失败!原因:'+res.data.msg,
  478. type: 'warning'
  479. });
  480. }
  481. })
  482. },
  483. //返回
  484. houtui(){
  485. this.$router.go(-1)
  486. }
  487. },
  488. mounted(){
  489. this.daraSource()
  490. },
  491. };
  492. </script>
  493. <style>
  494. body {
  495. margin: 0;
  496. padding: 0;
  497. }
  498. .enroll-all {
  499. background-color: #f1f1f1;
  500. padding-top: 63px;
  501. height: 900px;
  502. /*background-image: url("../assets/back.png");*/
  503. /*background-repeat: no-repeat;*/
  504. /*background-size: 100% 100%;*/
  505. }
  506. .enroll-form-box {
  507. width: 800px;
  508. margin: 0 auto;
  509. box-shadow: 0 0 5px #0005;
  510. padding: 20px 20px 20px 0px;
  511. border-radius: 5px;
  512. background-color: #fff;
  513. }
  514. .enroll-title {
  515. text-align: center;
  516. font-size: 26px;
  517. font-weight: 600;
  518. color: #555;
  519. margin-bottom: 20px;
  520. }
  521. .form-li {
  522. display: flex;
  523. flex-wrap: wrap;
  524. }
  525. .form-li > div {
  526. width: 50%;
  527. }
  528. .el-select {
  529. width: 100%;
  530. }
  531. .enroll-btn {
  532. text-align: center;
  533. }
  534. .form-li .el-input-group__append, .el-input-group__prepend{
  535. padding: 0 1px;
  536. }
  537. </style>