新增:添加mapper文件和其他资源

dev
cs 3 months ago
parent 61825be40b
commit 9b99dc064a

@ -0,0 +1,45 @@
/** 白屏阶段会执行的 CSS 加载动画 */
#app-loading {
position: relative;
top: 45vh;
margin: 0 auto;
color: #409eff;
font-size: 12px;
}
#app-loading,
#app-loading::before,
#app-loading::after {
width: 2em;
height: 2em;
border-radius: 50%;
animation: 2s ease-in-out infinite app-loading-animation;
}
#app-loading::before,
#app-loading::after {
content: "";
position: absolute;
}
#app-loading::before {
left: -4em;
animation-delay: -0.2s;
}
#app-loading::after {
left: 4em;
animation-delay: 0.2s;
}
@keyframes app-loading-animation {
0%,
80%,
100% {
box-shadow: 0 2em 0 -2em;
}
40% {
box-shadow: 0 2em 0 0;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

@ -0,0 +1,21 @@
<!doctype html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="/Recruit/favicon.ico" />
<link rel="stylesheet" href="/Recruit/app-loading.css" />
<title>招聘管理系统</title>
<script type="module" crossorigin src="/Recruit/static/index-1243327e.js"></script>
<link rel="modulepreload" crossorigin href="/Recruit/static/vue-1357a625.js">
<link rel="modulepreload" crossorigin href="/Recruit/static/element-b0a266eb.js">
<link rel="modulepreload" crossorigin href="/Recruit/static/vxe-ab33838e.js">
<link rel="stylesheet" href="/Recruit/static/index-e5828985.css">
</head>
<body>
<div id="app">
<div id="app-loading"></div>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
import{_}from"./index-1243327e.js";import{ah as e,l as n,m as c,p as d,I as l,V as t,P as o,T as p}from"./vue-1357a625.js";const u={},i={class:"error-page"},f={class:"error-page-svg"};function m(r,v){const a=e("el-button"),s=e("router-link");return n(),c("div",i,[d("div",f,[l(r.$slots,"default",{},void 0,!0)]),t(s,{to:"/"},{default:o(()=>[t(a,{type:"primary"},{default:o(()=>[p("回到首页")]),_:1})]),_:1})])}const h=_(u,[["render",m],["__scopeId","data-v-5f207ac3"]]);export{h as E};

@ -0,0 +1 @@
.error-page[data-v-5f207ac3]{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.error-page-svg[data-v-5f207ac3]{width:400px;margin-bottom:50px}

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 KiB

@ -0,0 +1 @@
const r=e=>{switch(e){case 0:return"无";case 1:return"学士";case 2:return"硕士";case 3:return"博士";default:return"异常"}},t=e=>{switch(e){case 0:return"专科";case 1:return"本科";case 2:return"研究生";default:return"异常"}},s=e=>{switch(e){case"无":return 0;case"学士":return 1;case"硕士":return 2;case"博士":return 3;default:return-1}},a=e=>{switch(e){case"专科":return 0;case"本科":return 1;case"研究生":return 2;default:return-1}};export{r as a,a as b,t as g,s};

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
[data-v-64233a8b] .my-label{background:var(--el-color-success-light-9)!important}[data-v-64233a8b] .my-content{background:var(--el-color-danger-light-9)}

@ -0,0 +1 @@
@charset "UTF-8";.login-container[data-v-d3e57967]{display:flex;justify-content:center;align-items:center;background-image:url(/Recruit/static/banner_1-197f4ad3.jpg);background-position:center;background-repeat:no-repeat;background-size:cover;width:100%;min-height:100%}.login-container .theme-switch[data-v-d3e57967]{position:fixed;top:5%;right:5%;cursor:pointer}.login-container .login-card[data-v-d3e57967]{width:480px;border-radius:20px;box-shadow:0 0 10px #dcdfe6;background-color:#fff;overflow:hidden}.login-container .login-card .title[data-v-d3e57967]{display:flex;justify-content:center;align-items:center;height:150px}.login-container .login-card .title img[data-v-d3e57967]{height:100%}.login-container .login-card .content[data-v-d3e57967]{padding:20px 50px 50px}.login-container .login-card .content[data-v-d3e57967] .el-input-group__append{padding:0;overflow:hidden}.login-container .login-card .content[data-v-d3e57967] .el-input-group__append .el-image{width:100px;height:40px;border-left:0px;-webkit-user-select:none;user-select:none;cursor:pointer;text-align:center}.login-container .login-card .content aaa[data-v-d3e57967]{color:#a39;text-decoration:none;margin-left:10px}.login-container .login-card .content .el-button[data-v-d3e57967]{width:100%;margin-top:10px}

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
import{i as e}from"./index-1243327e.js";function r(t){return e({url:"tableBatch",method:"post",data:t})}function n(t){return e({url:`tableBatch/${t}`,method:"delete"})}function u(t){return e({url:"tableBatch",method:"put",data:t})}function o(t){return e({url:"tableBatch/open",method:"get",params:t})}function l(t){return e({url:"tableBatches",method:"post",data:t})}function i(){return e({url:"tableBatchOption",method:"get"})}export{i as a,r as c,n as d,l as g,o as s,u};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.el-drawer__body .el-col{text-align:center;padding:.5em .8em;outline:transparent 1px solid}.el-drawer__body .text-left-override{text-align:left}.el-drawer__body .el-row{margin-top:.3em;outline:#ccc 1px solid}.el-col{text-align:center;padding:.5em .3em;outline:transparent 1px solid}.el-upload-listc{display:flex;justify-content:space-between;align-items:center;width:60%}.custom-file-itemc{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
import{i as e}from"./index-1243327e.js";function i(t){return e({url:"tablePosition",method:"post",data:t})}function n(t){const o=Array.isArray(t)?t:[t];return e({url:"tablePositionDel",method:"post",data:o})}function r(t){return e({url:"tablePosition",method:"put",data:t})}function s(t){return e({url:"tablePositions",method:"post",data:t})}function u(){return e({url:"getPositionOption",method:"get"})}export{u as a,i as c,n as d,s as g,r as u};

@ -0,0 +1 @@
.el-drawer__body .el-col{text-align:center;padding:.5em .8em;outline:transparent 1px solid}.el-drawer__body .text-left-override{text-align:left}.el-drawer__body .el-row{margin-top:.3em;outline:#ccc 1px solid}.infinite-list{padding:0;margin:0;list-style:none}.table-wrapper li{margin-bottom:20px}li .el-card__body{padding:0}td{padding:20px}td.td-btn{cursor:pointer;transition:all .5s ease-out}td.td-btn:hover{cursor:pointer;transition:all;color:#00f;box-shadow:inset -2px -2px 5px 2px #888,inset 2px 2px 5px 2px #f4f4f4}

@ -0,0 +1 @@
import{i as r}from"./index-1243327e.js";function n(){return r({url:"userInfo",method:"get"})}function o(e){return r({url:"userInfo",method:"post",data:e})}function s(e){return r({url:"realName",method:"post",data:e})}function u(e){return r({url:"user/pwd",method:"post",data:e})}export{o as a,n as g,u as n,s};

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
import{H as k,aF as b,r as f,_ as C,ah as s,l as F,m as I,V as e,p as n,P as a,u as g,T as _,a3 as R,a9 as S,aI as q,aJ as z}from"./vue-1357a625.js";import{_ as B}from"./logo-text-2-52bab0ac.js";import{e as K,_ as M}from"./index-1243327e.js";import{q as N,t as U}from"./element-b0a266eb.js";import{_ as T}from"./index.vue_vue_type_script_setup_true_lang-3a2a2642.js";import"./vxe-ab33838e.js";const D=r=>(q("data-v-d3e57967"),r=r(),z(),r),E={class:"login-container"},H={class:"login-card"},J=D(()=>n("div",{class:"title"},[n("img",{src:B})],-1)),L={class:"content"},P=k({__name:"index",setup(r){const x=b(),m=f(null),i=f(!1),o=C({username:"",password:"",code:""}),h={username:[{required:!0,message:"请输入用户名",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:8,max:16,message:"长度在 8 到 16 个字符",trigger:"blur"}]},u=()=>{var d;(d=m.value)==null||d.validate((t,l)=>{t?(i.value=!0,K().login(o).then(()=>{x.push({path:"/"})}).catch(()=>{o.password=""}).finally(()=>{i.value=!1})):console.error("表单校验不通过",l)})};return(d,t)=>{const l=s("el-input"),c=s("el-form-item"),v=s("el-link"),w=s("el-text"),y=s("el-button"),V=s("el-form");return F(),I("div",E,[e(T,{class:"theme-switch"}),n("div",H,[J,n("div",L,[e(V,{ref_key:"loginFormRef",ref:m,model:o,rules:h,onKeyup:S(u,["enter"])},{default:a(()=>[e(c,{prop:"username"},{default:a(()=>[e(l,{modelValue:o.username,"onUpdate:modelValue":t[0]||(t[0]=p=>o.username=p),modelModifiers:{trim:!0},placeholder:"用户名",type:"text",tabindex:"1","prefix-icon":g(N),size:"large"},null,8,["modelValue","prefix-icon"])]),_:1}),e(c,{prop:"password"},{default:a(()=>[e(l,{modelValue:o.password,"onUpdate:modelValue":t[1]||(t[1]=p=>o.password=p),modelModifiers:{trim:!0},placeholder:"密码",type:"password",tabindex:"2","prefix-icon":g(U),size:"large","show-password":""},null,8,["modelValue","prefix-icon"])]),_:1}),e(w,null,{default:a(()=>[_("没有账号? "),e(v,{href:"#/register"},{default:a(()=>[_("去注册")]),_:1})]),_:1}),e(y,{loading:i.value,type:"primary",size:"large",onClick:R(u,["prevent"])},{default:a(()=>[_("登 录")]),_:1},8,["loading","onClick"])]),_:1},8,["model","onKeyup"])])])])}}});const W=M(P,[["__scopeId","data-v-d3e57967"]]);export{W as default};

@ -0,0 +1 @@
import{i as o}from"./index-1243327e.js";function i(t){return o({url:"searchPositions",method:"post",data:t})}function u(){return o({url:"batchs",method:"get"})}function s(t){return o({url:"submitA",method:"post",data:t})}function n(t){return o({url:"submitB",method:"post",data:t})}function a(t){return o({url:"submitC",method:"post",data:t})}function e(t){return o({url:"submitC",method:"put",data:t})}export{n as a,a as b,u as c,i as g,e as r,s};

@ -0,0 +1 @@
.search-wrapper[data-v-2f683bf2]{margin-bottom:20px}.search-wrapper[data-v-2f683bf2] .el-card__body{padding-bottom:2px}.toolbar-wrapper[data-v-2f683bf2]{display:flex;justify-content:space-between;margin-bottom:20px}.table-wrapper[data-v-2f683bf2]{margin-bottom:20px}.pager-wrapper[data-v-2f683bf2]{display:flex;justify-content:flex-end}

@ -0,0 +1 @@
import{H as t,aE as r,aF as a,l as o,m as s}from"./vue-1357a625.js";const _=t({__name:"index",setup(n){const e=r();return a().replace({path:"/"+e.params.path,query:e.query}),(c,p)=>(o(),s("div"))}});export{_ as default};

@ -0,0 +1 @@
.search-wrapper[data-v-00c90673]{margin-bottom:20px}.search-wrapper[data-v-00c90673] .el-card__body{padding-bottom:2px}.toolbar-wrapper[data-v-00c90673]{display:flex;justify-content:space-between;margin-bottom:20px}.table-wrapper[data-v-00c90673]{margin-bottom:20px}.pager-wrapper[data-v-00c90673]{display:flex;justify-content:flex-end}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.search-wrapper[data-v-4d9ef9a6]{margin-bottom:20px}.search-wrapper[data-v-4d9ef9a6] .el-card__body{padding-bottom:2px}.toolbar-wrapper[data-v-4d9ef9a6]{display:flex;justify-content:space-between;margin-bottom:20px}.table-wrapper[data-v-4d9ef9a6]{margin-bottom:20px}.pager-wrapper[data-v-4d9ef9a6]{display:flex;justify-content:flex-end}

@ -0,0 +1 @@
.search-wrapper[data-v-cdf8801a]{margin-bottom:20px}.search-wrapper[data-v-cdf8801a] .el-card__body{padding-bottom:2px}.toolbar-wrapper[data-v-cdf8801a]{display:flex;justify-content:space-between;margin-bottom:20px}.table-wrapper[data-v-cdf8801a]{margin-bottom:20px}.pager-wrapper[data-v-cdf8801a]{display:flex;justify-content:flex-end}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.el-col{text-align:center;padding:.5em .3em;outline:transparent 1px solid}.el-upload-listc{display:flex;justify-content:space-between;align-items:center;width:60%}.custom-file-itemc{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-wrapper[data-v-580bc85b]{margin-bottom:20px}.search-wrapper[data-v-580bc85b] .el-card__body{padding-bottom:2px}.toolbar-wrapper[data-v-580bc85b]{display:flex;justify-content:space-between;margin-bottom:20px}.table-wrapper[data-v-580bc85b]{margin-bottom:20px}.pager-wrapper[data-v-580bc85b]{display:flex;justify-content:flex-end}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.register-container[data-v-891f63b1]{display:flex;justify-content:center;align-items:center;background-image:url(/Recruit/static/banner_1-197f4ad3.jpg);background-position:center;background-repeat:no-repeat;background-size:cover;width:100%;min-height:100%}.register-container .theme-switch[data-v-891f63b1]{position:fixed;top:5%;right:5%;cursor:pointer}.register-container .register-card[data-v-891f63b1]{width:480px;border-radius:20px;box-shadow:0 0 10px #dcdfe6;background-color:#fff;overflow:hidden}.register-container .register-card .title[data-v-891f63b1]{display:flex;justify-content:center;align-items:center;flex-direction:column;height:150px}.register-container .register-card .title img[data-v-891f63b1]{height:100%}.register-container .register-card .content[data-v-891f63b1]{padding:20px 50px 50px}.register-container .register-card .content[data-v-891f63b1] .el-input-group__append{padding:0;overflow:hidden}.register-container .register-card .content[data-v-891f63b1] .el-input-group__append .el-image{width:100px;height:40px;border-left:0px;-webkit-user-select:none;user-select:none;cursor:pointer;text-align:center}.register-container .register-card .content .el-button[data-v-891f63b1]{width:100%;margin-top:10px}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1 @@
.search-wrapper[data-v-76affdc1]{margin-bottom:20px}.search-wrapper[data-v-76affdc1] .el-card__body{padding-bottom:2px}.toolbar-wrapper[data-v-76affdc1]{display:flex;justify-content:space-between;margin-bottom:20px}.table-wrapper[data-v-76affdc1]{margin-bottom:20px}.pager-wrapper[data-v-76affdc1]{display:flex;justify-content:flex-end}

@ -0,0 +1 @@
import{H as C,aF as M,r as f,_ as z,d as F,ah as l,l as x,m as I,V as e,p,P as s,T as i,O as S,S as B,u as g,a3 as E,a9 as N,aI as U,aJ as q}from"./vue-1357a625.js";import{_ as H}from"./logo-text-2-52bab0ac.js";import{f as K,e as T,_ as $}from"./index-1243327e.js";import{v as A,t as y,E as h}from"./element-b0a266eb.js";import{_ as D}from"./index.vue_vue_type_script_setup_true_lang-3a2a2642.js";import"./vxe-ab33838e.js";const J=d=>(U("data-v-891f63b1"),d=d(),q(),d),O={class:"register-container"},j={class:"register-card"},G={class:"title"},L=J(()=>p("img",{src:H},null,-1)),Q={class:"content"},W=C({__name:"index",setup(d){const V=M(),w=f(null),u=f(!1),o=z({password:"",confirmPassword:"",phone:"",code:""}),b={password:[{required:!0,message:"请输入密码",trigger:"blur"},{min:8,max:16,message:"长度在 8 到 16 个字符",trigger:"blur"}],confirmPassword:[{required:!0,message:"请确认密码",trigger:"blur"},{validator:(a,r,t)=>{r!==o.password?t(new Error("两次输入的密码不一致")):t()},message:"密码不同",trigger:"blur"}],phone:[{required:!0,message:"请输入手机号",trigger:"blur"},{pattern:/^[1][3,4,5,7,8,9][0-9]{9}$/,message:"手机号格式不正确",trigger:"blur"}]},v=()=>{var a;(a=w.value)==null||a.validate((r,t)=>{r?(u.value=!0,T().register(o).then(()=>{V.push({path:"/"})}).catch(()=>{o.password=""}).finally(()=>{u.value=!1})):(console.error("表单校验不通过",t),h.error("表单校验不通过"))})},c=f(!0);return F(()=>{K().then(a=>{a.data==0&&(c.value=!1,h.error("注册功能已经关闭"))}).catch(()=>{c.value=!1,h.error("注册系统异常,请联系管理员")})}),(a,r)=>{const t=l("el-text"),m=l("el-input"),_=l("el-form-item"),k=l("el-link"),R=l("el-button"),P=l("el-form");return x(),I("div",O,[e(D,{class:"theme-switch"}),p("div",j,[p("div",G,[L,e(t,{size:"large"},{default:s(()=>[i("手机号注册")]),_:1}),c.value?B("",!0):(x(),S(t,{key:0,type:"warning",tag:"p"},{default:s(()=>[i("已到报名截止时间,停止注册")]),_:1}))]),p("div",Q,[e(P,{ref_key:"registerFormRef",ref:w,model:o,rules:b,onKeyup:N(v,["enter"])},{default:s(()=>[e(_,{prop:"phone"},{default:s(()=>[e(m,{modelValue:o.phone,"onUpdate:modelValue":r[0]||(r[0]=n=>o.phone=n),modelModifiers:{trim:!0},placeholder:"手机号",type:"text",tabindex:"2","prefix-icon":g(A),size:"large"},null,8,["modelValue","prefix-icon"])]),_:1}),e(_,{prop:"password"},{default:s(()=>[e(m,{modelValue:o.password,"onUpdate:modelValue":r[1]||(r[1]=n=>o.password=n),modelModifiers:{trim:!0},placeholder:"密码",type:"password",tabindex:"2","prefix-icon":g(y),size:"large","show-password":""},null,8,["modelValue","prefix-icon"])]),_:1}),e(_,{prop:"confirmPassword"},{default:s(()=>[e(m,{modelValue:o.confirmPassword,"onUpdate:modelValue":r[2]||(r[2]=n=>o.confirmPassword=n),modelModifiers:{trim:!0},placeholder:"确认密码",type:"password",tabindex:"2","prefix-icon":g(y),size:"large","show-password":""},null,8,["modelValue","prefix-icon"])]),_:1}),e(t,null,{default:s(()=>[i("已有账号? "),e(k,{href:"#/login"},{default:s(()=>[i("去登录")]),_:1})]),_:1}),e(R,{loading:u.value,type:"primary",size:"large",onClick:E(v,["prevent"])},{default:s(()=>[i("注 册")]),_:1},8,["loading","onClick"])]),_:1},8,["model","onKeyup"])])])])}}});const ae=$(W,[["__scopeId","data-v-891f63b1"]]);export{ae as default};

@ -0,0 +1 @@
.center[data-v-8c75ae0c]{height:100%;display:flex;justify-content:center;align-items:center}h2#card-usage~.example .example-showcase{background-color:var(--el-fill-color)!important}.el-statistic[data-v-8c75ae0c]{--el-statistic-content-font-size: 28px}.el-row[data-v-8c75ae0c]{margin-bottom:20px}.statistic-card[data-v-8c75ae0c]{height:100%;padding:20px;border-radius:4px;background-color:var(--el-bg-color-overlay)}.statistic-footer[data-v-8c75ae0c]{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;font-size:12px;color:var(--el-text-color-regular);margin-top:16px}.statistic-footer .footer-item[data-v-8c75ae0c]{display:flex;justify-content:space-between;align-items:center}.statistic-footer .footer-item span[data-v-8c75ae0c]:last-child{display:inline-flex;align-items:center;margin-left:4px}.green[data-v-8c75ae0c]{color:var(--el-color-success)}.red[data-v-8c75ae0c]{color:var(--el-color-error)}.center[data-v-a169ec51]{height:100%;display:flex;justify-content:center;align-items:center}

@ -0,0 +1 @@
import{h as k}from"./index-1243327e.js";import{w as h}from"./element-b0a266eb.js";import{H as g,ah as o,l,O as m,P as e,V as n,m as C,a8 as x,u as t,F as B,p as s,U as b}from"./vue-1357a625.js";const L=g({__name:"index",setup(v){const{themeList:c,activeThemeName:d,setTheme:r}=k();return(N,T)=>{const _=o("el-icon"),p=o("el-tooltip"),i=o("el-dropdown-item"),u=o("el-dropdown-menu"),f=o("el-dropdown");return l(),m(f,{trigger:"click",onCommand:t(r)},{dropdown:e(()=>[n(u,null,{default:e(()=>[(l(!0),C(B,null,x(t(c),(a,w)=>(l(),m(i,{key:w,disabled:t(d)===a.name,command:a.name},{default:e(()=>[s("span",null,b(a.title),1)]),_:2},1032,["disabled","command"]))),128))]),_:1})]),default:e(()=>[s("div",null,[n(p,{effect:"dark",content:"主题模式",placement:"bottom"},{default:e(()=>[n(_,{size:20},{default:e(()=>[n(t(h))]),_:1})]),_:1})])]),_:1},8,["onCommand"])}}});export{L as _};

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@ -0,0 +1 @@
const t="/Recruit/static/logo-text-2-cf7332f6.png";export{t as _};

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

@ -0,0 +1 @@
import{_ as t}from"./vue-1357a625.js";const r={total:0,currentPage:1,pageSizes:[10,20,50],pageSize:10,layout:"total, sizes, prev, pager, next, jumper"};function u(n={}){const e=t({...r,...n});return{paginationData:e,handleCurrentChange:a=>{e.currentPage=a},handleSizeChange:a=>{e.pageSize=a}}}export{u};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,379 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace必须是唯一的建议用该文件所在的包路径全类名,可以使用 namespace 属性和 id 属性的组合来调用该查询语句。 -->
<mapper namespace="edu.ahbvc.recruit.mapper.ThingInter">
<!-- 后台管理员查看所有用户的所有投递信息 -->
<select id="getAuditThings"
resultType="edu.ahbvc.recruit.model.ThingWithUser">
SELECT
`ut`.`id` thingId, `ut`.`status`,bp.id recruitId,
batchs.id batchid,
batchs.`name` batchname,
p.id positionId, p.jobTitle,
u.id userId,
u.`name` username
FROM
`user-thing` AS ut
LEFT JOIN `batch-position` AS
`bp` ON `bp`.id = ut.thingid
LEFT JOIN `positions` AS p ON `p`.id =
bp.positionid
LEFT JOIN `user` AS u ON ut.userid = u.id
LEFT JOIN batchs ON
batchs.id=`bp`.batchid
<where>
(status == -1 or status == 1)
<if test="jobTitles != null and jobTitles.size() > 0">
AND p.id IN
<foreach item="item" collection="jobTitles" open="("
separator="," close=")">
#{item}
</foreach>
</if>
<if test="batches != null and batches.size() > 0">
AND batchs.id IN
<foreach item="item2" collection="batches" open="("
separator="," close=")">
#{item2}
</foreach>
</if>
</where>
ORDER BY
bp.batchid DESC,p.id DESC
LIMIT #{currentPage}, #{size}
</select>
<!-- 后台管理员查看所有用户的所有投递信息 -->
<select id="getThings"
resultType="edu.ahbvc.recruit.model.ThingWithUser">
SELECT
`ut`.`id` thingId, `ut`.`status`,bp.id recruitId,
`ut`.`awardsAndPunishments`,
`ut`.`note`,
`ut`.`qualificationResult`,
`ut`.`ticket_num` ticketNum,
CASE
WHEN `ut`.`time` = '0000-00-00 00:00:00' THEN '1970-01-01 00:00:00'
ELSE `ut`.`time`
END AS time,
batchs.id batchid,
batchs.`name` batchname,
p.id positionId, p.jobTitle,
u.id userId, p.code,
u.`name` username
FROM
`user-thing` AS ut
LEFT JOIN `batch-position` AS
`bp` ON `bp`.id = ut.thingid
LEFT JOIN `positions` AS p ON `p`.id =
bp.positionid
LEFT JOIN `user` AS u ON ut.userid = u.id
LEFT JOIN batchs ON
batchs.id=bp.batchid
<where>
<if test="jobTitles != null and jobTitles.size() > 0">
AND p.id IN
<foreach item="item" collection="jobTitles" open="("
separator="," close=")">
#{item}
</foreach>
</if>
<if test="batches != null and batches.size() > 0">
AND batchs.id IN
<foreach item="item2" collection="batches" open="("
separator="," close=")">
#{item2}
</foreach>
</if>
<if test="status != null and status.size() > 0">
AND `ut`.status IN
<foreach item="item3" collection="status " open="("
separator="," close=")">
#{item3}
</foreach>
</if>
AND u.name LIKE CONCAT( '%', IFNULL(#{name}, ''), '%')
</where>
ORDER BY
`ut`.`time` DESC
LIMIT #{currentPage}, #{size}
</select>
<select id="getThingsById"
resultType="edu.ahbvc.recruit.model.ThingWithUser">
SELECT
`ut`.`id` thingId, `ut`.`status`,
`ut`.`awardsAndPunishments`, `ut`.`note`,
`ut`.`qualificationResult`,
bp.id recruitId,
batchs.id batchid,
batchs.`name` batchname,
p.id positionId, p.jobTitle, p.degree,
p.code,
u.id userId,
u.`name` username
FROM
`user-thing` AS ut
LEFT JOIN `batch-position` AS
`bp` ON `bp`.id = ut.thingid
LEFT JOIN `positions` AS p ON `p`.id =
bp.positionid
LEFT JOIN `user` AS u ON ut.userid = u.id
LEFT JOIN batchs ON
batchs.id=bp.batchid
<where>
<if test="thingId != null and thingId.size() > 0">
AND ut.id IN
<foreach item="item" collection="thingId" open="("
separator="," close=")">
#{item}
</foreach>
</if>
</where>
ORDER BY
bp.batchid DESC,p.id DESC
</select>
<!-- 后台管理员查看所有用户的所有投递信息数量(表格记录数量) -->
<select id="getThingsNum">
SELECT count(*)
FROM
`user-thing` AS ut
LEFT JOIN `batch-position` AS
`bp` ON `bp`.id = ut.thingid
LEFT JOIN `positions` AS p ON `p`.id =
bp.positionid
LEFT JOIN `user` AS u ON ut.userid = u.id
LEFT JOIN batchs ON
batchs.id=bp.batchid
<where>
<if test="jobTitles != null and jobTitles.size() > 0">
AND p.id IN
<foreach item="item" collection="jobTitles" open="("
separator="," close=")">
#{item}
</foreach>
</if>
<if test="batches != null and batches.size() > 0">
AND batchs.id IN
<foreach item="item2" collection="batches" open="("
separator="," close=")">
#{item2}
</foreach>
</if>
<if test="status != null and status.size() > 0">
AND `ut`.status IN
<foreach item="item3" collection="status " open="("
separator="," close=")">
#{item3}
</foreach>
</if>
AND u.name LIKE CONCAT( '%', IFNULL(#{name}, ''), '%')
</where>
ORDER BY
bp.batchid DESC,p.id DESC
</select>
<!-- 后台查看所有的可投递岗位,支持筛选 -->
<select id="getRecruits"
resultType="edu.ahbvc.recruit.model.Thing">
SELECT
bp.id recruitId, batchs.id batchId,
batchs.`name` batchname,
p.id positionId, p.jobTitle, p.code
FROM
`batch-position` AS `bp`
LEFT JOIN `positions` AS p ON `p`.id = bp.positionid
LEFT JOIN batchs ON batchs.id = bp.batchid
<where>
<if test="jobTitle != null and jobTitle.size() > 0">
AND p.id IN
<foreach item="item" collection="jobTitle" open="("
separator="," close=")">
#{item}
</foreach>
</if>
<if test="batch != null and batch.size() > 0">
AND batchs.id IN
<foreach item="item2" collection="batch" open="("
separator="," close=")">
#{item2}
</foreach>
</if>
</where>
ORDER BY
bp.batchid DESC,
p.id DESC
LIMIT #{currentPage}, #{size}
</select>
<!-- 后台查看所有的可投递岗位数量,支持筛选 -->
<select id="getRecruitNum">
SELECT COUNT(*)
FROM
`batch-position` AS `bp`
LEFT JOIN `positions` AS p ON `p`.id = bp.positionid
LEFT JOIN batchs ON batchs.id = bp.batchid
<where>
<if test="jobTitle != null and jobTitle.size() > 0">
AND p.id IN
<foreach item="item" collection="jobTitle" open="("
separator="," close=")">
#{item}
</foreach>
</if>
<if test="batch != null and batch.size() > 0">
AND batchs.`id` IN
<foreach item="item" collection="batch" open="("
separator="," close=")">
#{item}
</foreach>
</if>
</where>
ORDER BY
bp.batchid DESC,
p.id DESC
</select>
<!-- /** * @param userid 对应用户的id * @param batch 所查找的批次,为0表示从全部查找 * @return
对应批次下的招聘信息的简略版本,ok字段表示该用户已经申报的招聘岗位 * 对应批次下的全部信息 * 已经在XML文件中配置 * 拟被前台用户调用
* 暂时废弃 */ public List<Batch> -->
<!-- id用来配合namespace来定位这个操作使用 namespace 属性和 id 属性的组合来调用该查询语句。 例如edu.ahbvc.interfacer.ThingInter.getthingForuser可以用于调用这个查询语句。 -->
<select id="getthingForuser" resultType="edu.ahbvc.recruit.model.Batch">
SELECT
positions.*,
positions.batch batchid,
CASE WHEN
`user-thing`.id IS NOT NULL THEN 1 ELSE NULL END
AS ok
FROM
positions
LEFT JOIN `user-thing` ON `user-thing`.thingid =
positions.id
AND
`user-thing`.userid = #{userid}
<where>
<if test="batch != 0">
batch = #{batch};
</if>
</where>
</select>
<!-- 正在被前台调用 -->
<select id="getThingAboutUser"
resultType="edu.ahbvc.recruit.model.Thing">
SELECT
positions.*,
batchs.`name` batchname,
batchs.`id` batchId,
`user-thing`.`status`,
`user-thing`.`id` thingId,
`user-thing`.`qualificationResult`
FROM
`user-thing`
LEFT JOIN `batch-position` ON `batch-position`.id=`user-thing`.thingid
LEFT JOIN positions ON positions.id = `batch-position`.positionid
LEFT JOIN batchs ON batchs.id = `batch-position`.batchid
WHERE
`user-thing`.userid = #{userid}
</select>
<delete id="delPositions">
<if test="id != null and id.size() > 0">
DELETE FROM `positions`
<where>
`id` IN
<foreach item="item" collection="id" open="("
separator="," close=")">
#{item}
</foreach>
</where>
</if>
</delete>
<select id="getPositions" resultType="edu.ahbvc.recruit.model.Position">
SELECT
positions.*
FROM
positions
LIMIT #{currentPage}, #{size}
</select>
<select id="getPositionsNum">
SELECT COUNT(positions.id)
FROM positions
</select>
<select id="getSomePosition" resultType="edu.ahbvc.recruit.model.Position">
SELECT
`batch-position`.id recruitId,
positions.*,
COUNT( `user-thing`.userid ) toll
FROM
positions
LEFT JOIN `batch-position` ON `batch-position`.positionid = positions.id
LEFT JOIN `user-thing` ON `user-thing`.thingid = positions.id
LEFT JOIN batchs ON batchs.id = `batch-position`.batchid
WHERE
`batch-position`.batchid = #{batchid}
GROUP BY
positions.id
LIMIT #{offset}, #{size}
</select>
<select id="getBatches" resultType="edu.ahbvc.recruit.model.Batch">
SELECT
batchs.*,
COUNT( positions.id ) num
FROM `batchs`
LEFT JOIN `batch-position` ON `batch-position`.batchid = batchs.id
LEFT JOIN positions ON positions.id = `batch-position`.positionid
<where>
batchs.`name` LIKE CONCAT( '%', IFNULL(#{key}, ''), '%')
<if test="state != null">
AND batchs.open = #{state}
</if>
</where>
GROUP BY
batchs.id
LIMIT #{currentPage}, #{size}
</select>
<select id="getBatchesNum">
SELECT COUNT(batchs.id)
FROM `batchs`
<where>
batchs.`name` LIKE CONCAT( '%', IFNULL(#{key}, ''), '%')
<if test="state != null">
AND batchs.open = #{state}
</if>
</where>
</select>
<resultMap type="edu.ahbvc.recruit.model.export.Excel" id="mapPrintExcelData" autoMapping="true">
<id property="userid" column="id"/>
<collection ofType="edu.ahbvc.recruit.model.resume.Education" javaType="java.util.List" property="education" autoMapping="true">
</collection>
</resultMap>
<select id="getPrintData" resultMap="mapPrintExcelData">
SELECT `u`.id, `p`.`code`, `u`.`name`, `u`.`sex`,
`u`.`birthday`, `u`.`idnum`, `u`.`zzmm`, `u`.`nation`,
`education`.school, `education`.`specialty`, `education`.`id` eid,
`education`.`education`, `education`.`degree`,
`education`.`graduationTime`,
`u`.`phone`, `ut`.`status`, `ut`.`note`
FROM
`user-thing` AS ut
JOIN `batch-position` AS `bp` ON `bp`.id = ut.thingid
LEFT JOIN `positions` AS p ON `p`.id = bp.positionid
LEFT JOIN `user` AS u ON ut.userid = u.id
LEFT JOIN `education` ON education.id = u.id
</select>
</mapper>

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace必须是唯一的建议用该文件所在的包路径全类名,可以使用 namespace 属性和 id 属性的组合来调用该查询语句。 -->
<mapper namespace="edu.ahbvc.recruit.mapper.UserInter">
<insert id="addEducation">
INSERT INTO `education` (`id`, `school`, `graduationTime`, `degree`,
`education`, `specialty`)
VALUES
<foreach collection="e" item="item" separator=",">
(#{item.id}, #{item.school}, #{item.graduationTime}, #{item.degree},
#{item.education}, #{item.specialty})
</foreach>
</insert>
<insert id="addWorkExperience">
INSERT INTO `workexperience` (`id`, `company`, `work_time_start`,
`work_time_end`, `position`)
VALUES
<foreach collection="w" item="workExp" separator=",">
(#{workExp.id}, #{workExp.company}, #{workExp.work_time_start},
#{workExp.work_time_end}, #{workExp.position})
</foreach>
</insert>
<insert id="addPaper">
INSERT INTO `paper` (`id`, `journal`, `title`, `time`, `journal_num`)
VALUES
<foreach collection="p" item="paper" separator=",">
(#{paper.id},
#{paper.journal}, #{paper.title}, #{paper.time},
#{paper.journalNum})
</foreach>
</insert>
<insert id="addProject">
INSERT INTO `project` (`id`, `type`, `time`, `title`, `level`, `rank`)
VALUES
<foreach collection="p" item="project" separator=",">
(#{project.id}, #{project.type}, #{project.time}, #{project.title},
#{project.level}, #{project.rank})
</foreach>
</insert>
<insert id="addResearch">
INSERT INTO `research` (`id`, `name`)
VALUES
<foreach collection="r" item="research" separator=",">
(#{research.id}, #{research.name})
</foreach>
</insert>
<insert id="addFamilyConnections">
INSERT INTO `familyconnections` (`id`, `name`, `connection`, `work`)
VALUES
<foreach collection="f" item="item" separator=",">
(#{item.id},
#{item.name}, #{item.connection}, #{item.work})
</foreach>
</insert>
<select id="delUserResumeAllData" statementType="CALLABLE">
CALL delete_user_data(#{userid,mode=IN,jdbcType=INTEGER});
</select>
</mapper>

@ -0,0 +1,86 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org" lang="zh-CN">
<head>
<title>Spring Security Example</title>
<style>
/* Basic styling for the form */
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
form {
background: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
label {
margin-bottom: 10px;
display: block;
}
input[type="text"],
input[type="password"],
input[type="submit"] {
width: 100%;
padding: 8px;
margin-top: 5px;
box-sizing: border-box;
border-radius: 5px;
border: 1px solid #ccc;
transition: border 0.3s, box-shadow 0.3s;
}
/* Hover effect for inputs */
input[type="text"]:hover,
input[type="password"]:hover {
border-color: #888;
}
/* Focus effect for inputs */
input[type="text"]:focus,
input[type="password"]:focus {
border-color: #0056b3;
box-shadow: 0 0 5px rgba(0, 86, 179, 0.5);
}
/* Hover and active state for the submit button */
input[type="submit"] {
background-color: #007bff;
color: white;
cursor: pointer;
transition: background-color 0.3s;
}
input[type="submit"]:hover,
input[type="submit"]:active {
background-color: #0056b3;
}
/* Animations for error and logout messages */
div[title] {
margin-bottom: 10px;
color: red;
opacity: 0;
animation: fadeIn 1s forwards;
}
/* Keyframes for fadeIn effect */
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
</head>
<body>
<h3>出了点错误</h3>
<h4>Something went wrong</h4>
</body>
</html>

@ -0,0 +1,89 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org" lang="ZH-CN">
<head>
<title>Spring Security Example</title>
<style>
/* Basic styling for the form */
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
form {
background: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
label {
margin-bottom: 10px;
display: block;
}
input[type="text"],
input[type="password"],
input[type="submit"] {
width: 100%;
padding: 8px;
margin-top: 5px;
box-sizing: border-box;
border-radius: 5px;
border: 1px solid #ccc;
transition: border 0.3s, box-shadow 0.3s;
}
/* Hover effect for inputs */
input[type="text"]:hover,
input[type="password"]:hover {
border-color: #888;
}
/* Focus effect for inputs */
input[type="text"]:focus,
input[type="password"]:focus {
border-color: #0056b3;
box-shadow: 0 0 5px rgba(0, 86, 179, 0.5);
}
/* Hover and active state for the submit button */
input[type="submit"] {
background-color: #007bff;
color: white;
cursor: pointer;
transition: background-color 0.3s;
}
input[type="submit"]:hover,
input[type="submit"]:active {
background-color: #0056b3;
}
/* Animations for error and logout messages */
div[title] {
margin-bottom: 10px;
color: red;
opacity: 0;
animation: fadeIn 1s forwards;
}
/* Keyframes for fadeIn effect */
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
</head>
<body>
<form action="/login" method="post">
<div><label> User Name : <input type="text" name="username"/> </label></div>
<div><label> Password: <input type="password" name="password"/> </label></div>
<div><input type="submit" value="Sign In"/></div>
</form>
</body>
</html>
Loading…
Cancel
Save