@@ -1 +1 @@ | |||
import{d as p,r as c,o as _,c as r,a as e,b as l,w as d,e as i,f as t,p as h,g as m,_ as u}from"./index-yE18koBL.js";const s=o=>(h("data-v-7bdb0e8f"),o=o(),m(),o),f={class:"nopage"},b=s(()=>e("span",{style:{color:"#0074D9"}},"4",-1)),y=s(()=>e("span",{style:{color:"#67C23A"}},"0",-1)),g=s(()=>e("span",{style:{color:"#0074D9"}},"4",-1)),v=s(()=>e("p",null,"你页面走丢了~",-1)),x=p({__name:"404",setup(o){const a=()=>{sessionStorage.pageType=="company"?t.push("/manage/home"):sessionStorage.pageType=="personal"?t.push("/jobseeker/home"):t.push("/job/home")};return(C,S)=>{const n=c("a-button");return _(),r("div",f,[b,y,g,e("div",null,[v,e("p",null,[l(n,{type:"primary",onClick:a},{default:d(()=>[i("返回首页")]),_:1})])])])}}}),I=u(x,[["__scopeId","data-v-7bdb0e8f"]]);export{I as default}; | |||
import{d as p,r as c,o as _,c as r,a as e,b as l,w as d,e as i,f as t,p as h,g as m,_ as u}from"./index-1KOpwZRJ.js";const s=o=>(h("data-v-7bdb0e8f"),o=o(),m(),o),f={class:"nopage"},b=s(()=>e("span",{style:{color:"#0074D9"}},"4",-1)),y=s(()=>e("span",{style:{color:"#67C23A"}},"0",-1)),g=s(()=>e("span",{style:{color:"#0074D9"}},"4",-1)),v=s(()=>e("p",null,"你页面走丢了~",-1)),x=p({__name:"404",setup(o){const a=()=>{sessionStorage.pageType=="company"?t.push("/manage/home"):sessionStorage.pageType=="personal"?t.push("/jobseeker/home"):t.push("/job/home")};return(C,S)=>{const n=c("a-button");return _(),r("div",f,[b,y,g,e("div",null,[v,e("p",null,[l(n,{type:"primary",onClick:a},{default:d(()=>[i("返回首页")]),_:1})])])])}}}),I=u(x,[["__scopeId","data-v-7bdb0e8f"]]);export{I as default}; |
@@ -6,8 +6,8 @@ | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
<script src="https://map.qq.com/api/gljs?v=1.exp&key=MPBBZ-HUICZ-EGRXB-7AHZI-R4GQZ-QWBSO"></script> | |||
<title>菊城人才网</title> | |||
<script type="module" crossorigin src="/assets/index-yE18koBL.js"></script> | |||
<link rel="stylesheet" crossorigin href="/assets/index-1PIseYT9.css"> | |||
<script type="module" crossorigin src="/assets/index-1KOpwZRJ.js"></script> | |||
<link rel="stylesheet" crossorigin href="/assets/index-ia0wri7Z.css"> | |||
</head> | |||
<body> | |||
<div id="app"></div> |
@@ -12,7 +12,9 @@ | |||
"ant-design-vue": "^4.1.0", | |||
"axios": "^1.6.4", | |||
"dayjs": "^1.11.10", | |||
"file-saver": "^2.0.5", | |||
"he": "^1.2.0", | |||
"html-docx-js-typescript": "^0.1.5", | |||
"less": "^4.2.0", | |||
"less-loader": "^11.1.3", | |||
"vue": "^3.3.11", | |||
@@ -1186,6 +1188,11 @@ | |||
"balanced-match": "^1.0.0" | |||
} | |||
}, | |||
"node_modules/browser-or-node": { | |||
"version": "1.3.0", | |||
"resolved": "https://registry.npmmirror.com/browser-or-node/-/browser-or-node-1.3.0.tgz", | |||
"integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" | |||
}, | |||
"node_modules/browserslist": { | |||
"version": "4.22.2", | |||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", | |||
@@ -1320,6 +1327,11 @@ | |||
"url": "https://opencollective.com/core-js" | |||
} | |||
}, | |||
"node_modules/core-util-is": { | |||
"version": "1.0.3", | |||
"resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", | |||
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" | |||
}, | |||
"node_modules/csstype": { | |||
"version": "3.1.3", | |||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", | |||
@@ -1575,6 +1587,11 @@ | |||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", | |||
"peer": true | |||
}, | |||
"node_modules/file-saver": { | |||
"version": "2.0.5", | |||
"resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz", | |||
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" | |||
}, | |||
"node_modules/follow-redirects": { | |||
"version": "1.15.4", | |||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", | |||
@@ -1724,6 +1741,21 @@ | |||
"he": "bin/he" | |||
} | |||
}, | |||
"node_modules/html-docx-js-typescript": { | |||
"version": "0.1.5", | |||
"resolved": "https://registry.npmmirror.com/html-docx-js-typescript/-/html-docx-js-typescript-0.1.5.tgz", | |||
"integrity": "sha512-GNojWFDYbpHSIgKml6/0oAom8mtHrHRTWKMyLRdeJQHO/CyeM6H39DYgzYvPp4OhBp2Ti8dxMKFq0/FkpYD4bg==", | |||
"dependencies": { | |||
"browser-or-node": "^1.2.1", | |||
"jszip": "^3.4.0", | |||
"tslib": "^1.13.0" | |||
} | |||
}, | |||
"node_modules/html-docx-js-typescript/node_modules/tslib": { | |||
"version": "1.14.1", | |||
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", | |||
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" | |||
}, | |||
"node_modules/iconv-lite": { | |||
"version": "0.6.3", | |||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", | |||
@@ -1748,6 +1780,16 @@ | |||
"node": ">=0.10.0" | |||
} | |||
}, | |||
"node_modules/immediate": { | |||
"version": "3.0.6", | |||
"resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", | |||
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" | |||
}, | |||
"node_modules/inherits": { | |||
"version": "2.0.4", | |||
"resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", | |||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" | |||
}, | |||
"node_modules/is-arguments": { | |||
"version": "1.1.1", | |||
"resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz", | |||
@@ -1796,6 +1838,11 @@ | |||
"resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", | |||
"integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" | |||
}, | |||
"node_modules/isarray": { | |||
"version": "1.0.0", | |||
"resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", | |||
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" | |||
}, | |||
"node_modules/jest-worker": { | |||
"version": "27.5.1", | |||
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", | |||
@@ -1827,6 +1874,17 @@ | |||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", | |||
"peer": true | |||
}, | |||
"node_modules/jszip": { | |||
"version": "3.10.1", | |||
"resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", | |||
"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", | |||
"dependencies": { | |||
"lie": "~3.3.0", | |||
"pako": "~1.0.2", | |||
"readable-stream": "~2.3.6", | |||
"setimmediate": "^1.0.5" | |||
} | |||
}, | |||
"node_modules/less": { | |||
"version": "4.2.0", | |||
"resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", | |||
@@ -1868,6 +1926,14 @@ | |||
"webpack": "^5.0.0" | |||
} | |||
}, | |||
"node_modules/lie": { | |||
"version": "3.3.0", | |||
"resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", | |||
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", | |||
"dependencies": { | |||
"immediate": "~3.0.5" | |||
} | |||
}, | |||
"node_modules/loader-runner": { | |||
"version": "4.3.0", | |||
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", | |||
@@ -2081,6 +2147,11 @@ | |||
"node": ">= 0.4" | |||
} | |||
}, | |||
"node_modules/pako": { | |||
"version": "1.0.11", | |||
"resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", | |||
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" | |||
}, | |||
"node_modules/parchment": { | |||
"version": "1.1.4", | |||
"resolved": "https://registry.npmmirror.com/parchment/-/parchment-1.1.4.tgz", | |||
@@ -2141,6 +2212,11 @@ | |||
"node": "^10 || ^12 || >=14" | |||
} | |||
}, | |||
"node_modules/process-nextick-args": { | |||
"version": "2.0.1", | |||
"resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", | |||
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" | |||
}, | |||
"node_modules/proxy-from-env": { | |||
"version": "1.1.0", | |||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", | |||
@@ -2211,6 +2287,25 @@ | |||
"safe-buffer": "^5.1.0" | |||
} | |||
}, | |||
"node_modules/readable-stream": { | |||
"version": "2.3.8", | |||
"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", | |||
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", | |||
"dependencies": { | |||
"core-util-is": "~1.0.0", | |||
"inherits": "~2.0.3", | |||
"isarray": "~1.0.0", | |||
"process-nextick-args": "~2.0.0", | |||
"safe-buffer": "~5.1.1", | |||
"string_decoder": "~1.1.1", | |||
"util-deprecate": "~1.0.1" | |||
} | |||
}, | |||
"node_modules/readable-stream/node_modules/safe-buffer": { | |||
"version": "5.1.2", | |||
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", | |||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" | |||
}, | |||
"node_modules/regenerator-runtime": { | |||
"version": "0.14.1", | |||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", | |||
@@ -2375,6 +2470,11 @@ | |||
"node": ">= 0.4" | |||
} | |||
}, | |||
"node_modules/setimmediate": { | |||
"version": "1.0.5", | |||
"resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", | |||
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" | |||
}, | |||
"node_modules/shallow-equal": { | |||
"version": "1.2.1", | |||
"resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", | |||
@@ -2406,6 +2506,19 @@ | |||
"source-map": "^0.6.0" | |||
} | |||
}, | |||
"node_modules/string_decoder": { | |||
"version": "1.1.1", | |||
"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", | |||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", | |||
"dependencies": { | |||
"safe-buffer": "~5.1.0" | |||
} | |||
}, | |||
"node_modules/string_decoder/node_modules/safe-buffer": { | |||
"version": "5.1.2", | |||
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", | |||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" | |||
}, | |||
"node_modules/stylis": { | |||
"version": "4.3.1", | |||
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", | |||
@@ -2558,6 +2671,11 @@ | |||
"punycode": "^2.1.0" | |||
} | |||
}, | |||
"node_modules/util-deprecate": { | |||
"version": "1.0.2", | |||
"resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", | |||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" | |||
}, | |||
"node_modules/vite": { | |||
"version": "5.0.11", | |||
"resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", |
@@ -13,7 +13,9 @@ | |||
"ant-design-vue": "^4.1.0", | |||
"axios": "^1.6.4", | |||
"dayjs": "^1.11.10", | |||
"file-saver": "^2.0.5", | |||
"he": "^1.2.0", | |||
"html-docx-js-typescript": "^0.1.5", | |||
"less": "^4.2.0", | |||
"less-loader": "^11.1.3", | |||
"vue": "^3.3.11", |
@@ -15,7 +15,7 @@ export const url : urlType.url = { | |||
CustomerVerify: web + '/jobseek/verify', // 转换为HR | |||
JobseekerEditPwd: web + '/jobseek/edit_pwd', // 修改密码 | |||
CompanyLoginByMobile: web + '/company/login_by_mobile', // 企业登录 | |||
JobseekerResetPwd: web + '/jobseek/resetpwd', // 修改密码 | |||
JobseekerResetPwd: web + '/jobseeker/resetpwd', // 修改密码 | |||
'SysconfigDetail': common + '/sysconfig/detail', // 详情 | |||
@@ -7,7 +7,7 @@ | |||
<div class="text-decoration"> | |||
<div class="text-content">基本资料</div> | |||
</div> | |||
</a-typography-title> | |||
</a-typography-title> | |||
<a-typography-paragraph> | |||
<a-row :gutter="[20,20]"> | |||
<a-col span="24"> | |||
@@ -77,15 +77,19 @@ | |||
</a-col> | |||
</a-row> | |||
</a-typography-paragraph> | |||
<a-typography-title :level="4"><div class="text-decoration"> | |||
<a-typography-title :level="4"> | |||
<div class="text-decoration"> | |||
<div class="text-content">个人简介</div> | |||
</div></a-typography-title> | |||
</div> | |||
</a-typography-title> | |||
<a-typography-paragraph> | |||
<div v-html="detail.introduction"></div> | |||
</a-typography-paragraph> | |||
<a-typography-title :level="4"><div class="text-decoration"> | |||
<a-typography-title :level="4"> | |||
<div class="text-decoration"> | |||
<div class="text-content">求职期望</div> | |||
</div></a-typography-title> | |||
</div> | |||
</a-typography-title> | |||
<a-typography-paragraph> | |||
<a-row> | |||
<a-col span="24"> | |||
@@ -128,9 +132,11 @@ | |||
</a-row> | |||
</a-typography-paragraph> | |||
</a-typography> | |||
<a-typography-title :level="4"><div class="text-decoration"> | |||
<div class="text-content">专业技能掌握能力</div> | |||
</div></a-typography-title> | |||
<a-typography-title :level="4"> | |||
<div class="text-decoration"> | |||
<div class="text-content">专业技能掌握能力</div> | |||
</div> | |||
</a-typography-title> | |||
<a-typography-paragraph> | |||
<a-row> | |||
<a-space direction="vertical"> | |||
@@ -152,9 +158,11 @@ | |||
</a-space> | |||
</a-row> | |||
</a-typography-paragraph> | |||
<a-typography-title :level="4"><div class="text-decoration"> | |||
<div class="text-content">工作经历</div> | |||
</div></a-typography-title> | |||
<a-typography-title :level="4"> | |||
<div class="text-decoration"> | |||
<div class="text-content">工作经历</div> | |||
</div> | |||
</a-typography-title> | |||
<a-typography-paragraph> | |||
<template v-for="(item,index) in detail.experiences"> | |||
<a-card :title="item.company_name" style="margin-bottom: 10px;"> | |||
@@ -164,9 +172,11 @@ | |||
</a-card> | |||
</template> | |||
</a-typography-paragraph> | |||
<a-typography-title :level="4"><div class="text-decoration"> | |||
<div class="text-content">教育/培训经历</div> | |||
</div></a-typography-title> | |||
<a-typography-title :level="4"> | |||
<div class="text-decoration"> | |||
<div class="text-content">教育/培训经历</div> | |||
</div> | |||
</a-typography-title> | |||
<a-typography-paragraph> | |||
<template v-for="(item,index) in detail.trainings"> | |||
<a-card :title="item.school_or_institution" style="margin-bottom: 10px;"> | |||
@@ -179,6 +189,261 @@ | |||
</template> | |||
</a-typography-paragraph> | |||
</a-spin> | |||
<a-flex justify="flex-end"> | |||
<a-space> | |||
<a-button type="primary" @click="exportToWord">导出简历</a-button> | |||
</a-space> | |||
</a-flex> | |||
<div v-show="false"> | |||
<div id="export-container"> | |||
<div class="resume-word"> | |||
<h1 class="resume-word-title" style="text-align: center;">个人简历</h1> | |||
<div> | |||
<div class="resume-word-item"> | |||
<div style="color: #4FBE70"> | |||
<h3 class="resume-word-item-title-content">基本资料</h3> | |||
</div> | |||
<div class="resume-word-item-content"> | |||
<table border="1" style="border-collapse: collapse;text-align: center;width: 100%;"> | |||
<tbody> | |||
<tr style="height: 30px;"> | |||
<td>姓 名</td> | |||
<td>{{detail.seekername}}</td> | |||
<td>性 别</td> | |||
<td>{{detail.gender}}</td> | |||
<td rowspan="6" style="text-align: center; vertical-align: middle;"> | |||
<img :src="imageprefix+detail.photo" alt="" width="90" height="150"> | |||
</td> | |||
</tr> | |||
<tr style="height: 30px;"> | |||
<td>出生日期</td> | |||
<td>{{detail.dob}}</td> | |||
<td>职 称</td> | |||
<td>{{detail.title_txt}}</td> | |||
</tr> | |||
<tr style="height: 30px;"> | |||
<td>现居住地</td> | |||
<td>{{detail.now_level1_txt ? detail.now_level1_txt : ''}}{{detail.now_level2_txt ? detail.now_level2_txt : ''}}{{detail.now_level3_txt ? detail.now_level3_txt : ''}}{{detail.now_level4_txt ? detail.now_level4_txt : ''}} | |||
</td> | |||
<td>户口所在地</td> | |||
<td>{{detail.now_level1_txt ? detail.now_level1_txt : ''}}{{detail.now_level2_txt ? detail.now_level2_txt : ''}}{{detail.now_level3_txt ? detail.now_level3_txt : ''}}{{detail.now_level4_txt ? detail.now_level4_txt : ''}} | |||
</td> | |||
</tr> | |||
<tr style="height: 30px;"> | |||
<td>学 历</td> | |||
<td>{{detail.education_txt}}</td> | |||
<td>婚姻状况</td> | |||
<td>{{detail.marital_status_txt}}</td> | |||
</tr> | |||
<tr style="height: 30px;"> | |||
<td>民 族</td> | |||
<td>{{detail.ethnicity_txt}}</td> | |||
<td>政治面貌</td> | |||
<td>{{detail.political_status_txt}}</td> | |||
</tr> | |||
<tr style="height: 30px;"> | |||
<td>体 重</td> | |||
<td>{{detail.weight}}kg</td> | |||
<td>身 高</td> | |||
<td>{{detail.height}}cm</td> | |||
</tr> | |||
</tbody> | |||
</table> | |||
</div> | |||
</div> | |||
<!-- 个人简介 --> | |||
<div class="resume-word-item"> | |||
<div style="color: #4FBE70"> | |||
<h3 class="resume-word-item-title-content">个人简介</h3> | |||
</div> | |||
<div class="resume-word-item-content"> | |||
<p v-html="detail.introduction"></p> | |||
</div> | |||
</div> | |||
<!-- 求职期望 --> | |||
<div class="resume-word-item"> | |||
<div style="color: #4FBE70"> | |||
<h3 class="resume-word-item-title-content">求职期望</h3> | |||
</div> | |||
<div class="resume-word-item-content"> | |||
<table border="1" style="border-collapse: collapse;width: 100%;text-align: center;"> | |||
<tbody> | |||
<tr style="height: 30px;"> | |||
<td style="width: 20%;">求职类型</td> | |||
<td style="width: 30%;">{{detail.job_type_txt}}</td> | |||
<td style="width: 20%;">可到职日期</td> | |||
<td style="width: 30%;">{{detail.available_date_txt}}</td> | |||
</tr> | |||
<tr style="height: 30px;"> | |||
<td style="width: 20%;">人才类型</td> | |||
<td style="width: 30%;">{{detail.talent_type_txt}}</td> | |||
<td style="width: 20%;">工作经验</td> | |||
<td style="width: 30%;">{{detail.work_experience}}年</td> | |||
</tr> | |||
<tr style="height: 30px;"> | |||
<td style="width: 20%;">月薪要求</td> | |||
<td colspan="3" style="width: 80%;">{{detail.salary_range_txt}}</td> | |||
</tr> | |||
<tr style="height: 30px;" v-for="(item,index) in detail.desire_areas"> | |||
<td style="width: 20%;">期望工作地区{{index + 1}}</td> | |||
<td colspan="3" style="width: 80%;"> | |||
{{item.level1_txt ? item.level1_txt : ''}}{{item.level2_txt ? item.level2_txt : ''}}{{item.level3_txt ? item.level3_txt : ''}}{{item.level4_txt ? item.level4_txt : ''}} | |||
</td> | |||
</tr> | |||
<tr style="height: 30px;" v-for="(item,index) in detail.desire_industrys"> | |||
<td style="width: 20%;">期望从事行业{{index + 1}}</td> | |||
<td colspan="3" style="width: 80%;">{{item.industry_txt}}</td> | |||
</tr> | |||
<tr style="height: 30px;" v-for="(item,index) in detail.desire_positions"> | |||
<td style="width: 20%;">期望从事职位{{index + 1}}</td> | |||
<td colspan="3" style="width: 80%;"> | |||
{{item.level1_txt ? item.level1_txt : ''}}{{item.level2_txt ? item.level2_txt : ''}} | |||
</td> | |||
</tr> | |||
</tbody> | |||
</table> | |||
</div> | |||
</div> | |||
<!-- 教育培训 --> | |||
<div class="resume-word-item"> | |||
<div style="color: #4FBE70"> | |||
<h3 class="resume-word-item-title-content">教育培训</h3> | |||
</div> | |||
<div class="resume-word-item-content"> | |||
<table border="1" style="border-collapse: collapse;width: 100%;text-align: center;"> | |||
<thead> | |||
<th style="height: 30px;width:20%;">起止时间</th> | |||
<th style="height: 30px;width:20%;">学校/培训机构</th> | |||
<th style="height: 30px;width: 20%;">专业</th> | |||
<th style="height: 30px;width:20%;">曾担任的职务</th> | |||
<th style="height: 30px;width: 20%;">获得证书奖项</th> | |||
</thead> | |||
<tbody> | |||
<tr style="height: 30px;" v-for="(item,index) in detail.trainings"> | |||
<td style="width: 20%;"> | |||
{{item.start_year}}.{{item.start_month}}至{{item.end_year}}.{{item.end_month}} | |||
</td> | |||
<td style="width: 20%;">{{item.school_or_institution}}</td> | |||
<td style="width: 20%;">{{item.major}}</td> | |||
<td style="width: 20%;">{{item.positions_held}}</td> | |||
<td style="width: 20%;"> | |||
<div> | |||
{{item.certificate}} | |||
</div> | |||
<div> | |||
{{item.awards}} | |||
</div> | |||
</td> | |||
</tr> | |||
</tbody> | |||
</table> | |||
</div> | |||
</div> | |||
<!-- 工作经历 --> | |||
<div class="resume-word-item"> | |||
<div style="color: #4FBE70"> | |||
<h3 class="resume-word-item-title-content">工作经历</h3> | |||
</div> | |||
<div class="resume-word-item-content"> | |||
<table border="1" style="border-collapse: collapse;width: 100%;text-align: center;"> | |||
<thead> | |||
<th style="height: 30px;width: 25%;">起止时间</th> | |||
<th style="height: 30px;width: 25%;">单位名称</th> | |||
<th style="height: 30px;width: 25%;">职位</th> | |||
<th style="height: 30px;width: 25%;">离职原因</th> | |||
</thead> | |||
<tbody> | |||
<tr style="height: 30px;" v-for="(item,index) in detail.experiences"> | |||
<td style="width: 25%;"> | |||
{{item.start_year}}.{{item.start_month}}至{{item.end_year}}.{{item.end_month}} | |||
</td> | |||
<td style="width: 25%;">{{item.company_name}}</td> | |||
<td style="width: 25%;">{{item.position}}</td> | |||
<td style="width: 25%;">{{item.reason_for_leaving}}</td> | |||
</tr> | |||
</tbody> | |||
</table> | |||
</div> | |||
</div> | |||
<!-- 专业技能掌握能力 --> | |||
<div class="resume-word-item"> | |||
<div style="color: #4FBE70"> | |||
<h3 class="resume-word-item-title-content">专业技能掌握能力</h3> | |||
</div> | |||
<div class="resume-word-item-content"> | |||
<table border="1" style="border-collapse: collapse;width: 100%;text-align: center;"> | |||
<tbody> | |||
<tr style="height: 30px;"> | |||
<td style="width: 25%;">英 语</td> | |||
<td style="width: 25%;">{{detail.english_txt}}</td> | |||
<td style="width: 25%;">粤 语</td> | |||
<td style="width: 25%;">{{detail.mandarin_txt}}</td> | |||
</tr> | |||
<tr style="height: 30px;"> | |||
<td style="width:25%;">国 语</td> | |||
<td style="width: 25%;">{{detail.cantonese_txt}}</td> | |||
<td style="width: 25%;">第二外语</td> | |||
<td style="width: 25%;">{{detail.other_language_txt}}</td> | |||
</tr> | |||
<tr style="height: 30px;"> | |||
<td style="width: 25%;">计算机能力</td> | |||
<td colspan="7" style="width: 75%;">{{detail.computer_skills}}</td> | |||
</tr> | |||
</tbody> | |||
</table> | |||
</div> | |||
</div> | |||
<!-- 联系信息 --> | |||
<div class="resume-word-item"> | |||
<div style="color: #4FBE70"> | |||
<h3 class="resume-word-item-title-content">联系信息</h3> | |||
</div> | |||
<div class="resume-word-item-content"> | |||
<table border="1" style="border-collapse: collapse;width: 100%;text-align: center;"> | |||
<tbody> | |||
<tr style="height: 30px;"> | |||
<td style="width: 15%;">移动电话</td> | |||
<td style="width: 35%;">{{detail.mobile}}</td> | |||
<td style="width: 15%;">固定电话</td> | |||
<td style="width: 35%;">{{detail.landline}}</td> | |||
</tr> | |||
<tr style="height: 30px;"> | |||
<td style="width: 15%;">联系邮箱</td> | |||
<td style="width: 35%;">{{detail.email}}</td> | |||
<td style="width: 15%;">Q Q</td> | |||
<td style="width: 35%;">{{detail.qq}}</td> | |||
</tr> | |||
<tr style="height: 30px;"> | |||
<td style="width: 15%;">通讯地址</td> | |||
<td style="width: 35%;">{{detail.mailing_address}} | |||
</td> | |||
<td style="width: 15%;">邮 编</td> | |||
<td style="width: 35%;">{{detail.postal_code}} | |||
</td> | |||
</tr> | |||
<tr style="height: 30px;"> | |||
<td style="width: 15%;">个人主页</td> | |||
<td colspan="3" style="width: 85%;">{{detail.personal_website}}</td> | |||
</tr> | |||
</tbody> | |||
</table> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</a-modal> | |||
</template> | |||
@@ -186,8 +451,10 @@ | |||
import { ref, onMounted, defineProps, computed, watch, defineEmits } from 'vue'; | |||
import { GetJobseekerDetail, GetJobapplicantIntroductiondetail, PostJobapplicantTrainingdetail, PostJobapplicantDesireindustrydetail, PostJobapplicantExperiencedetail } from '@/apis/models'; | |||
import { message } from 'ant-design-vue'; | |||
import * as htmlDocx from "html-docx-js-typescript"; | |||
import { saveAs } from 'file-saver' | |||
import { useCommon } from '@/hooks/useCommon'; | |||
let { store, commomParams, hideOtherModal1, openOtherModel_1, imageprefix} = useCommon(); | |||
let { store, commomParams, hideOtherModal1, openOtherModel_1, imageprefix } = useCommon(); | |||
const emit = defineEmits(); | |||
let props = defineProps(['detail_record']); | |||
let detailTitle = ref<String>('') | |||
@@ -201,6 +468,12 @@ | |||
return store.state.openOtherModel_1; | |||
}) | |||
const exportToWord = async () => { | |||
const htmlContent = document.getElementById('export-container'); // 获取需要转换的HTML内容 | |||
const convertedFile = htmlDocx.asBlob(htmlContent?.outerHTML!); | |||
const fileData = await convertedFile | |||
saveAs((fileData as Blob), detail.value.seekername + '个人简历.docx') | |||
} | |||
watch(() => [props.detail_record], (newVal) => { | |||
if (newVal[0]) { | |||
@@ -238,14 +511,14 @@ | |||
padding: 6px; | |||
// padding-top: 6px; | |||
} | |||
.text-decoration { | |||
position: relative; | |||
display: inline-block; | |||
overflow: visible; | |||
} | |||
.text-decoration::before { | |||
content: ''; | |||
width: 6px; | |||
@@ -254,7 +527,7 @@ | |||
position: absolute; | |||
top: 4px | |||
} | |||
.text-content { | |||
position: relative; | |||
margin-left: 20px; |
@@ -1,22 +1,41 @@ | |||
<template> | |||
<a-card title="修改密码"> | |||
<a-form :model="createForm" layout="vertical"> | |||
<a-card title="重置密码"> | |||
<a-form :model="createForm" layout="vertical"> | |||
<a-row gutter="20"> | |||
<a-col span="12"> | |||
<a-row> | |||
<a-row gutter="20"> | |||
<a-col span="24"> | |||
<a-form-item required label="旧密码" name="old_password"> | |||
<a-input v-model:value="createForm.old_password" placeholder="请输入旧密码" size="large"/> | |||
<a-form-item required label="手机号"> | |||
<a-input v-model:value="smsForm.mobile" placeholder="手机号" size="large" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-form-item required label="新密码" name="new_password"> | |||
<a-input v-model:value="createForm.new_password" placeholder="请输入新密码" size="large"/> | |||
<a-col span="12"> | |||
<a-form-item required label="验证码"> | |||
<a-input v-model:value="smsForm.captcha" placeholder="验证码" size="large" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-form-item required label="图形验证码"> | |||
<image-container :imgObj="{src: codeImage,width: '100%',height: '40px', mode: 'fill'}" | |||
@click="getCaptcha"></image-container> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="18"> | |||
<a-form-item required label="短信验证码"> | |||
<a-input v-model:value="createForm.sms_code" placeholder="短信验证码" size="large" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="6"> | |||
<a-form-item required label="验证码"> | |||
<a-button type="primary" block size="large" @click="sendCode" | |||
:disabled="state.disabled"> | |||
{{ state.codeTxt }}</a-button> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-form-item required label="确认密码" name="comform_password"> | |||
<a-input v-model:value="createForm.comform_password" placeholder="请输入确认密码" size="large"/> | |||
<a-form-item required label="重置密码" name="new_pwd"> | |||
<a-input v-model:value="createForm.new_pwd" placeholder="请输入确认密码" size="large" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
@@ -26,43 +45,139 @@ | |||
</a-col> | |||
</a-row> | |||
</a-col> | |||
</a-row> | |||
</a-form> | |||
</a-card> | |||
</template> | |||
<script setup lang="ts"> | |||
import { ref, onMounted, computed } from 'vue'; | |||
import { PostCompanyPwdEdit } from '@/apis/models'; | |||
import { ref, onMounted, computed, onBeforeUnmount } from 'vue'; | |||
import { PostJobseekerEditPwd, PostSmsSend, GetCaptcha, PostJobseekerResetPwd } from '@/apis/models'; | |||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||
let createForm : companyListType.addrFormType = ref({ | |||
old_password: '', | |||
new_password: '', | |||
comform_password: '' | |||
import { store } from '@/store/index'; | |||
import { router } from '@/router/index'; | |||
import { useMenu } from '@/hooks/useMenu'; | |||
let { onMenu, routerCur, routerArrayCur, routerArrayParentChildCur } = useMenu(); | |||
let smsForm = ref<Object>({ | |||
mobile: "", | |||
captcha: "", | |||
capt_id: "" | |||
}) | |||
const saveForm = () => { | |||
if(createForm.value.new_password != createForm.value.comform_password) { | |||
warnToast('新密码和确认密码不一致') | |||
let createForm = ref({ | |||
mobile: '', | |||
sms_code: '', | |||
new_pwd: '', | |||
}) | |||
let capt_id = ref<String>('') | |||
let codeImage = ref<String>('') | |||
interface State { | |||
count : number; | |||
sending : boolean; | |||
disabled : boolean; | |||
} | |||
const state = ref<State>({ | |||
count: 60, | |||
codeTxt: '获取验证码', | |||
disabled: false, | |||
}); | |||
let timer = ref<any>(null) | |||
const sendCode = () => { | |||
smsForm.value.capt_id = capt_id.value; | |||
if (!smsForm.value.mobile) { | |||
warnToast('请输入手机号') | |||
return false; | |||
} | |||
PostCompanyPwdEdit(createForm.value).then(res => { | |||
successToast('修改成功,请重新登录') | |||
if (!smsForm.value.captcha) { | |||
warnToast('请输入图形验证码') | |||
return false; | |||
} | |||
PostSmsSend(smsForm.value).then(res => { | |||
successToast('发送验证码成功,验证码有效期为一分钟'); | |||
timer.value = setInterval(function () { | |||
if (state.value.count > 1) { | |||
state.value.count = state.value.count - 1; | |||
state.value.codeTxt = '剩余' + (state.value.count - 1) + '秒'; | |||
state.value.disabled = true | |||
} else { | |||
clearInterval(timer.value); | |||
state.value.count = 60; | |||
state.value.codeTxt = '获取验证码'; | |||
state.value.disabled = false | |||
}; | |||
}, 1000) | |||
}) | |||
}; | |||
const getCaptcha = () => { | |||
smsForm.value.captcha = ''; | |||
GetCaptcha().then(res => { | |||
capt_id.value = res.data.capt_id; | |||
codeImage.value = res.data.img; | |||
}) | |||
} | |||
const saveForm = () => { | |||
createForm.value.mobile = smsForm.value.mobile; | |||
createForm.value.sms_code = Number(createForm.value.sms_code) | |||
PostJobseekerResetPwd(createForm.value).then(res => { | |||
successToast('重置成功,请重新登录') | |||
resetForm() | |||
quit() | |||
}) | |||
} | |||
const quit = () => { | |||
if (routerCur() == '/job/home') { | |||
sessionStorage.clear() | |||
location.reload() | |||
} else { | |||
store.commit('getPageType', { | |||
pageType: '' | |||
}) | |||
store.commit('setShowLoginBox', { | |||
showLoginBox: false | |||
}) | |||
sessionStorage.clear() | |||
sessionStorage.setItem('pageType', '') | |||
store.commit('permissions/SET_PERMISSION', null) | |||
store.commit('permissions/SET_MENU', []) | |||
router.push('/job/home') | |||
} | |||
} | |||
const resetForm = () => { | |||
smsForm.value = { | |||
mobile: "", | |||
captcha: "", | |||
capt_id: "" | |||
} | |||
createForm.value = { | |||
old_password: '', | |||
new_password: '', | |||
comform_password: '' | |||
mobile: '', | |||
sms_code: '', | |||
new_pwd: '', | |||
} | |||
} | |||
onMounted(() => { | |||
getCaptcha() | |||
}) | |||
onBeforeUnmount(() => { | |||
clearInterval(timer.value); | |||
}) | |||
</script> | |||
<style scoped lang="less"> | |||
</style> |
@@ -55,7 +55,7 @@ const JobseekerPasswordRoute : AppRouteRecordRaw = { | |||
name: 'JobseekerPassword', | |||
component: routerList.JobseekerPassword, | |||
meta: { | |||
title: '修改密码', | |||
title: '重置密码', | |||
icon: HomeOutlined | |||
}, | |||
}; |
@@ -2,42 +2,42 @@ | |||
<div class="content-padding-inline" style="margin: 30px 0;"> | |||
<a-row :gutter="[20,20]" type="flex" justify="center"> | |||
<a-col span="18"> | |||
<a-card title="修改密码"> | |||
<a-card title="重置密码"> | |||
<a-form :model="createForm" layout="vertical"> | |||
<a-row gutter="20"> | |||
<a-col span="12"> | |||
<a-row gutter="20"> | |||
<a-col span="24"> | |||
<a-form-item label="手机号"> | |||
<a-form-item required label="手机号"> | |||
<a-input v-model:value="smsForm.mobile" placeholder="手机号" size="large" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-form-item label="验证码"> | |||
<a-form-item required label="验证码"> | |||
<a-input v-model:value="smsForm.captcha" placeholder="验证码" size="large" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-form-item label="图形验证码"> | |||
<a-form-item required label="图形验证码"> | |||
<image-container :imgObj="{src: codeImage,width: '100%',height: '40px', mode: 'fill'}" | |||
@click="getCaptcha"></image-container> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="18"> | |||
<a-form-item label="短信验证码"> | |||
<a-form-item required label="短信验证码"> | |||
<a-input v-model:value="createForm.sms_code" placeholder="短信验证码" size="large" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="6"> | |||
<a-form-item label="验证码"> | |||
<a-form-item required label="验证码"> | |||
<a-button type="primary" block size="large" @click="sendCode" | |||
:disabled="state.disabled"> | |||
{{ state.codeTxt }}</a-button> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-form-item label="确认密码" name="comform_password"> | |||
<a-input v-model:value="createForm.new_password" placeholder="请输入确认密码" | |||
<a-form-item required label="重置密码" name="new_pwd"> | |||
<a-input v-model:value="createForm.new_pwd" placeholder="请输入确认密码" | |||
size="large" /> | |||
</a-form-item> | |||
</a-col> | |||
@@ -55,9 +55,7 @@ | |||
</a-card> | |||
</a-col> | |||
</a-row> | |||
</div> | |||
</template> | |||
@@ -65,6 +63,10 @@ | |||
import { ref, onMounted, computed, onBeforeUnmount } from 'vue'; | |||
import { PostJobseekerEditPwd, PostSmsSend, GetCaptcha, PostJobseekerResetPwd } from '@/apis/models'; | |||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||
import { store } from '@/store/index'; | |||
import { router } from '@/router/index'; | |||
import { useMenu } from '@/hooks/useMenu'; | |||
let { onMenu, routerCur, routerArrayCur, routerArrayParentChildCur } = useMenu(); | |||
let smsForm = ref<Object>({ | |||
mobile: "", | |||
captcha: "", | |||
@@ -120,7 +122,7 @@ | |||
const getCaptcha = () => { | |||
createForm.value.captcha = ''; | |||
smsForm.value.captcha = ''; | |||
GetCaptcha().then(res => { | |||
capt_id.value = res.data.capt_id; | |||
codeImage.value = res.data.img; | |||
@@ -129,11 +131,33 @@ | |||
const saveForm = () => { | |||
createForm.value.mobile = smsForm.value.mobile; | |||
createForm.value.sms_code = Number(createForm.value.sms_code) | |||
PostJobseekerResetPwd(createForm.value).then(res => { | |||
successToast('重置成功') | |||
successToast('重置成功,请重新登录') | |||
resetForm() | |||
quit() | |||
}) | |||
} | |||
const quit = () => { | |||
if(routerCur() == '/job/home') { | |||
sessionStorage.clear() | |||
location.reload() | |||
} else { | |||
store.commit('getPageType', { | |||
pageType: '' | |||
}) | |||
store.commit('setShowLoginBox', { | |||
showLoginBox: false | |||
}) | |||
sessionStorage.clear() | |||
sessionStorage.setItem('pageType', '') | |||
store.commit('permissions/SET_PERMISSION', null) | |||
store.commit('permissions/SET_MENU', []) | |||
router.push('/job/home') | |||
} | |||
} | |||
const resetForm = () => { | |||
smsForm.value = { | |||
@@ -142,8 +166,9 @@ | |||
capt_id: "" | |||
} | |||
createForm.value = { | |||
mobile: '', | |||
sms_code: '', | |||
new_password: '', | |||
new_pwd: '', | |||
} | |||
} | |||
@@ -28,7 +28,7 @@ | |||
import UserEmail from '@/components/user/email/index.vue' | |||
import UserConver from '@/components/user/conver/index.vue' | |||
let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}]) | |||
let menu_list = ref([{ title: '费用管理', key: 1 },{ title: '修改登录密码', key: 2},{ title: '修改邮箱', key: 3},{ title: '生成招聘者代码', key: 4}]) | |||
let menu_list = ref([{ title: '费用管理', key: 1 },{ title: '重置密码', key: 2},{ title: '修改邮箱', key: 3},{ title: '生成招聘者代码', key: 4}]) | |||
let curKey = ref<Number>(1) | |||
const changeKey = (data) => { | |||
curKey.value = data.key; |