| @@ -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; | |||