当前位置:   article > 正文

基于SpringBoot框架和VUE的求职招聘系统_springboot vue招聘系统 源码下载

springboot vue招聘系统 源码下载

今天给大家介绍的是一个求职招聘系统,话不多说,先看图:

项目前后端分离,后端是基于springboot框架,前端是Vue。

系统分为三种角色:管理员、求职者和企业用户。

管理员:实现了对求职者和企业用户的信息管理

求职者:可以发布简历信息、修改个人信息、和企业用户在线交流

企业用户:可以发布招聘信息、修改企业信息、和求职者在线交流。

登陆界面VUE代码设计:

  1. <template>
  2. <div class="login">
  3. <vue-particles
  4. color="#dedede"
  5. :particleOpacity="0.7"
  6. :particlesNumber="80"
  7. shapeType="circle"
  8. :particleSize="4"
  9. linesColor="#dedede"
  10. :linesWidth="1"
  11. :lineLinked="true"
  12. :lineOpacity="0.4"
  13. :linesDistance="150"
  14. :moveSpeed="3"
  15. :hoverEffect="true"
  16. hoverMode="grab"
  17. :clickEffect="true"
  18. clickMode="push"
  19. ></vue-particles>
  20. <!-- 登录框-->
  21. <div class="login_box">
  22. <div class="status">
  23. <el-radio v-model="radio" label="1" >管理员</el-radio>
  24. <el-radio v-model="radio" label="2" >用户</el-radio>
  25. <el-radio v-model="radio" label="3" >企业</el-radio>
  26. </div>
  27. <el-form ref="loginFormRef" :model="loginForm" :rules="loginFormRules" label-width="0px" status-icon class="login_form">
  28. <!-- 用户名-->
  29. <el-form-item label="账号" label-width="60px" prop="username">
  30. <el-input placeholder="请输入账号" v-model="loginForm.username" @keyup.enter.native="login('loginFormRef')"
  31. prefix-icon="el-icon-user"></el-input>
  32. </el-form-item>
  33. <!-- 密码-->
  34. <el-form-item label="密码" label-width="60px" prop="password">
  35. <el-input placeholder="请输入密码" v-model="loginForm.password" show-password @keyup.enter.native="login('loginFormRef')"
  36. prefix-icon="el-icon-lock"></el-input>
  37. </el-form-item>
  38. <!-- 按钮-->
  39. <el-form-item class="btns">
  40. <!-- 回车键盘监听 -->
  41. <!-- @keyup.enter="login('loginFormRef')" -->
  42. <el-button type="primary" @click="login('loginFormRef')">登录</el-button>
  43. <el-button type="info" @click="reset('loginFormRef')">重置</el-button>
  44. <el-button @click="openDialog" type="success" >注册</el-button>
  45. </el-form-item>
  46. </el-form>
  47. </div>
  48. <div>
  49. <!--管理员注册表单-->
  50. <el-dialog title="注册" :close-on-click-modal="false" :visible.sync="adminDialog"
  51. @close="closeDialog('registerFormRef')" :append-to-body="true">
  52. <el-form :model="adminRegisterInfo" ref="registerFormRef" status-icon >
  53. <el-form-item label="用户名" prop="username">
  54. <el-input type="text" v-model="adminRegisterInfo.username"></el-input>
  55. </el-form-item>
  56. <el-form-item label="密码" prop="password">
  57. <el-input show-password v-model="adminRegisterInfo.password"></el-input>
  58. </el-form-item>
  59. <el-form-item label="确认密码" prop="rePassword">
  60. <el-input type="password" v-model="adminRegisterInfo.rePassword"></el-input>
  61. </el-form-item>
  62. </el-form>
  63. <div class="register-button" slot="footer">
  64. <el-button @click="reset('registerFormRef')">取 消</el-button>
  65. <el-button type="primary" @click="register('registerFormRef')">立即注册</el-button>
  66. </div>
  67. </el-dialog>
  68. <!--用户注册表单-->
  69. <el-dialog title="注册" :close-on-click-modal="false" :visible.sync="userDialog"
  70. @close="closeDialog('registerFormRef')" :append-to-body="true">
  71. <el-form status-icon ref="registerFormRef" :model="userRegisterInfo" size="mini">
  72. <el-form-item label="用户名" prop="username">
  73. <el-input type="text" v-model="userRegisterInfo.username"></el-input>
  74. </el-form-item>
  75. <el-form-item label="密码" prop="password">
  76. <el-input show-password type="password" v-model="userRegisterInfo.password"></el-input>
  77. </el-form-item>
  78. <el-form-item label="确认密码" prop="rePassword">
  79. <el-input type="password" v-model="userRegisterInfo.rePassword"></el-input>
  80. </el-form-item>
  81. <el-form-item label="真实姓名" prop="name">
  82. <el-input type="text" v-model="userRegisterInfo.name"></el-input>
  83. </el-form-item>
  84. <el-form-item label="年龄" prop="age">
  85. <el-input type="number" v-model="userRegisterInfo.age"></el-input>
  86. </el-form-item>
  87. <el-form-item label="性别" prop="gender">
  88. <el-input type="text" v-model="userRegisterInfo.gender"></el-input>
  89. </el-form-item>
  90. <el-form-item label="出生日期" prop="birthday">
  91. <el-input type="date" v-model="userRegisterInfo.birthday"></el-input>
  92. </el-form-item>
  93. <el-form-item label="毕业学校" prop="school">
  94. <el-input type="text" v-model="userRegisterInfo.school"></el-input>
  95. </el-form-item>
  96. <el-form-item label="联系电话" prop="phone">
  97. <el-input type="tel" v-model="userRegisterInfo.phone"></el-input>
  98. </el-form-item>
  99. <el-form-item label="电子邮箱" prop="email">
  100. <el-input type="email" v-model="userRegisterInfo.email"></el-input>
  101. </el-form-item>
  102. <el-form-item label="所学专业" prop="specialty">
  103. <el-input type="text" v-model="userRegisterInfo.specialty"></el-input>
  104. </el-form-item>
  105. <el-form-item label="最高学历" prop="education">
  106. <el-input type="text" v-model="userRegisterInfo.education"></el-input>
  107. </el-form-item>
  108. </el-form>
  109. <div class="register-button" slot="footer">
  110. <el-button @click="reset('registerFormRef')">取 消</el-button>
  111. <el-button type="primary" @click="register('registerFormRef')">立即注册</el-button>
  112. </div>
  113. </el-dialog>
  114. <!--企业注册表单-->
  115. <el-dialog title="注册" :close-on-click-modal="false" :visible.sync="entrDialog"
  116. @close="closeDialog('registerFormRef')" :append-to-body="true">
  117. <el-form :model="entrRegisterInfo" ref="registerFormRef" status-icon size="mini">
  118. <el-form-item label="用户名" prop="username">
  119. <el-input type="text" v-model="entrRegisterInfo.username"></el-input>
  120. </el-form-item>
  121. <el-form-item label="密码" prop="password">
  122. <el-input show-password v-model="entrRegisterInfo.password"></el-input>
  123. </el-form-item>
  124. <el-form-item label="确认密码" prop="rePassword">
  125. <el-input type="password" v-model="entrRegisterInfo.rePassword"></el-input>
  126. </el-form-item>
  127. <el-form-item label="企业名称" prop="name">
  128. <el-input type="text" v-model="entrRegisterInfo.name"></el-input>
  129. </el-form-item>
  130. <el-form-item label="电子邮箱" prop="email">
  131. <el-input type="email" v-model="entrRegisterInfo.email"></el-input>
  132. </el-form-item>
  133. <el-form-item label="联系电话" prop="phone">
  134. <el-input type="tel" v-model="entrRegisterInfo.phone"></el-input>
  135. </el-form-item>
  136. <el-form-item label="从事行业" prop="manage">
  137. <el-input type="text" v-model="entrRegisterInfo.manage"></el-input>
  138. </el-form-item>
  139. <el-form-item label="企业地址" prop="address">
  140. <el-input type="text" v-model="entrRegisterInfo.address"></el-input>
  141. </el-form-item>
  142. <el-form-item label="公司简介" prop="introduce">
  143. <el-input type="text" v-model="entrRegisterInfo.introduce"></el-input>
  144. </el-form-item>
  145. </el-form>
  146. <div class="register-button" slot="footer">
  147. <el-button @click="reset('registerFormRef')">取 消</el-button>
  148. <el-button type="primary" @click="register('registerFormRef')">立即注册</el-button>
  149. </div>
  150. </el-dialog>
  151. </div>
  152. </div>
  153. </template>
  154. <script>
  155. import {mapMutations} from "vuex";
  156. import Qs from 'qs'
  157. export default {
  158. name: 'login',
  159. data() {
  160. return {
  161. // 这是登录表单的数据绑定对象
  162. loginForm: {
  163. username: 'admin',
  164. password: '123456',
  165. pwdType: "password",
  166. },
  167. //管理员注册对话框
  168. adminDialog:false,
  169. //用户注册对话框
  170. userDialog:false,
  171. //企业注册对话框
  172. entrDialog:false,
  173. //管理员注册信息对象
  174. adminRegisterInfo:{},
  175. //用户注册信息对象
  176. userRegisterInfo:{},
  177. //企业注册信息对象
  178. entrRegisterInfo:{},
  179. loginUrl:'',
  180. userToken: '',
  181. loginFormRules: {
  182. username: [
  183. {required: true, message: '请输入登录账号', trigger: 'blur'},
  184. {min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur'},
  185. ],
  186. password: [
  187. {required: true, message: '请输入登陆密码', trigger: 'blur'},
  188. {min: 5, max: 15, message: '长度在 5 到 15 个字符', trigger: 'blur'},
  189. ]
  190. },
  191. radio:'1'
  192. };
  193. },
  194. methods: {
  195. ...mapMutations(['changeLogin']),
  196. //点击重置按钮,重置登录表单
  197. reset() {
  198. this.$refs.loginFormRef.resetFields();
  199. },
  200. //登录方法
  201. login(formName) {
  202. let _this = this;
  203. this.$refs[formName].validate(valid => {
  204. if (valid) {
  205. console.log('username:' + _this.username + " password:" + _this.password);
  206. console.log(_this.radio)
  207. this.$store.state.show = _this.radio;
  208. console.log(this.$store.state.show)
  209. if (_this.radio==='1'){
  210. var url='/api/login/admin'
  211. }else if(_this.radio==='2'){
  212. url='/api/login/user'
  213. }else if(_this.radio==='3'){
  214. url='/api/login/entr'
  215. }
  216. this.$axios.post(url, Qs.stringify({
  217. username:_this.loginForm.username,
  218. password:_this.loginForm.password,
  219. headers: {
  220. "Authorization": " "
  221. }
  222. })).then((response) => {
  223. console.log(response);
  224. if (response.status === 200) {
  225. _this.userToken =response.data.token;
  226. console.log(_this.userToken)//获取到的token
  227. // 将用户token保存到vuex中
  228. _this.changeLogin({Authorization: _this.userToken});
  229. _this.$store.state.username=response.data.data
  230. _this.$store.state.status=true;
  231. console.log(_this.$store.state.status)
  232. _this.$router.push({path: '/index'})
  233. return _this.$message.success("登录成功");
  234. console.log("登录成功");
  235. }
  236. }).catch((err) => {
  237. console.log("err", err);
  238. return _this.$message.error("密码或用户名错误");
  239. });
  240. } else {
  241. console.log("参数验证不合法!");
  242. return false;
  243. }
  244. })
  245. },
  246. //重置表单
  247. reset(formNameRef) {
  248. this.$refs[formNameRef].resetFields();
  249. this.dialogFormVisible = false;
  250. },
  251. //右上角X 关闭注册对话框 重置表单
  252. closeDialog(formNameRef){
  253. this.$refs[formNameRef].resetFields();
  254. },
  255. // 打开注册对话框
  256. openDialog(){
  257. let open=this.radio
  258. console.log(open)
  259. if(open === '1'){
  260. console.log("我进来了1")
  261. this.adminDialog=true;
  262. }else if(open === '2'){
  263. console.log("我进来了2")
  264. this.userDialog=true;
  265. }else if(open === '3'){
  266. console.log("我进来了3")
  267. this.entrDialog=true;
  268. }else{
  269. this.$message.error("出现未知错误")
  270. }
  271. },
  272. register(formName){
  273. this.$refs[formName].validate(async valid => {
  274. if (!valid) return this.$message.error("参数错误");
  275. let _this = this;
  276. let _res;
  277. if(_this.radio === '1'){
  278. const {data: res} = await _this.$axios.post("/api/admin/register/", Qs.stringify(_this.adminRegisterInfo))
  279. _res=res;
  280. }else if(_this.radio === '2'){
  281. const {data: res} = await _this.$axios.post("/api/user/register/", Qs.stringify(_this.userRegisterInfo))
  282. _res=res;
  283. }else if(_this.radio === '3'){
  284. const {data: res} = await _this.$axios.post("/api/enterprise/register/", Qs.stringify(_this.entrRegisterInfo))
  285. _res=res;
  286. }
  287. if(_res.code !== 200){
  288. return _this.$message.error("注册失败")
  289. }
  290. this.adminDialog=false;
  291. this.userDialog=false;
  292. this.entrDialog=false;
  293. return _this.$message.success("注册成功,请重新登录!");
  294. })
  295. },
  296. }
  297. }
  298. </script>
  299. <style scoped>
  300. .login {
  301. background: url("../assets/image/background.jpg");
  302. width: 100%;
  303. height: 100%;
  304. position: fixed;
  305. background-size: 100% 100%;
  306. }
  307. .login_box {
  308. height: 300px;
  309. width: 450px;
  310. background: rgba(126, 180, 180, 0.5);
  311. border-radius: 3px;
  312. position: absolute;
  313. left: 50%;
  314. top: 50%;
  315. transform: translate(-50%, -50%);
  316. }
  317. .login_form {
  318. position: absolute;
  319. bottom: 20px;
  320. width: 100%;
  321. padding: 0px 30px;
  322. box-sizing: border-box;
  323. }
  324. .btns {
  325. display: flex;
  326. justify-content: center;
  327. }
  328. .status {
  329. position:relative;
  330. top: 50px;
  331. bottom: 10px;
  332. left: 100px;
  333. }
  334. .register-button {
  335. text-align: center;
  336. }
  337. </style>

演示视频

基于springboot和vue的求职招聘管理系统

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/439096
推荐阅读
相关标签
  

闽ICP备14008679号