| <link rel="icon" type="image/svg+xml" href="/vite.svg" /> | <link rel="icon" type="image/svg+xml" href="/vite.svg" /> | ||||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||
| <title>Vite + Vue + TS</title> | <title>Vite + Vue + TS</title> | ||||
| <script type="module" crossorigin src="/assets/index-JJeaanAG.js"></script> | |||||
| <link rel="stylesheet" crossorigin href="/assets/index-0kds0h5a.css"> | |||||
| <script type="module" crossorigin src="/assets/index-M75Plfpg.js"></script> | |||||
| <link rel="stylesheet" crossorigin href="/assets/index-9Ic14vNC.css"> | |||||
| </head> | </head> | ||||
| <body> | <body> | ||||
| <div id="app"></div> | <div id="app"></div> |
| msgModel(response.data.msg) | msgModel(response.data.msg) | ||||
| break; | break; | ||||
| case 600: | case 600: | ||||
| if (response.data.errors) { | |||||
| if (response.data.errors && Object.keys(response.data.errors).length > 0 ) { | |||||
| msgModel(response.data.errors) | msgModel(response.data.errors) | ||||
| } else { | } else { | ||||
| msgModel(response.data.msg) | msgModel(response.data.msg) |
| export const PostJobseekerRegister = postModel(url.JobseekerRegister); | export const PostJobseekerRegister = postModel(url.JobseekerRegister); | ||||
| export const PostCompanyRegister = postModel(url.CompanyRegister); | export const PostCompanyRegister = postModel(url.CompanyRegister); | ||||
| export const PostJobseekerlogin = postModel(url.Jobseekerlogin); | |||||
| export const GetCaptcha = getModel(url.Captcha); | export const GetCaptcha = getModel(url.Captcha); | ||||
| export const PostSmsSend = postModel(url.SmsSend); | export const PostSmsSend = postModel(url.SmsSend); | ||||
| export const PostJobseekerSmsLogin = postModel(url.JobseekerSmsLogin); | export const PostJobseekerSmsLogin = postModel(url.JobseekerSmsLogin); | ||||
| export const PostCustomerVerify = postModel(url.CustomerVerify); | export const PostCustomerVerify = postModel(url.CustomerVerify); | ||||
| export const PostJobseekerEditPwd = postModel(url.JobseekerEditPwd); | export const PostJobseekerEditPwd = postModel(url.JobseekerEditPwd); | ||||
| export const PostCompanyLoginByMobile = postModel(url.CompanyLoginByMobile); | |||||
| // 招聘会 | // 招聘会 | ||||
| export const PostRecruitmentBookcompany = getModel(url.RecruitmentBookcompany);// 获取招聘会参与的企业 | export const PostRecruitmentBookcompany = getModel(url.RecruitmentBookcompany);// 获取招聘会参与的企业 | ||||
| export const GetCompanyTalentPoolList = getModel(url.CompanyTalentPoolList); // 人才库列表 | export const GetCompanyTalentPoolList = getModel(url.CompanyTalentPoolList); // 人才库列表 | ||||
| // 企业开通微信小程序账号公司权限 | // 企业开通微信小程序账号公司权限 | ||||
| export const PostCompanycustomercodeAdd = getModel(url.CompanycustomercodeAdd); // 添加 | |||||
| export const PostCompanycustomercodeAdd = postModel(url.CompanycustomercodeAdd); // 添加 | |||||
| export const PostCompanycustomercodeDel = postModel(url.CompanycustomercodeDel); // 删除 | export const PostCompanycustomercodeDel = postModel(url.CompanycustomercodeDel); // 删除 | ||||
| export const PostCompanycustomercodeUpdate = postModel(url.CompanycustomercodeUpdate); // 编辑 | export const PostCompanycustomercodeUpdate = postModel(url.CompanycustomercodeUpdate); // 编辑 | ||||
| export const PostCompanycustomercodeList = getModel(url.CompanycustomercodeList); // 列表 | |||||
| export const PostCompanycustomercodeDetail = getModel(url.CompanycustomercodeDetail); // 添加 | |||||
| export const GetCompanycustomercodeList = getModel(url.CompanycustomercodeList); // 列表 | |||||
| export const GetCompanycustomercodeDetail = getModel(url.CompanycustomercodeDetail); // 添加 | |||||
| // 展示广告位 | // 展示广告位 | ||||
| export const GetAdvertscheduleList = getModel(url.AdvertscheduleList); // 添加 | export const GetAdvertscheduleList = getModel(url.AdvertscheduleList); // 添加 | ||||
| export const GetRecruitmentbookList = getModel(url.RecruitmentbookList); // 列表 | export const GetRecruitmentbookList = getModel(url.RecruitmentbookList); // 列表 | ||||
| export const GetRecruitmentbookDetail = getModel(url.RecruitmentbookDetail); // 详情 | export const GetRecruitmentbookDetail = getModel(url.RecruitmentbookDetail); // 详情 | ||||
| // 收藏 | |||||
| export const PostJobseekAddfavorite = postModel(url.JobseekAddfavorite); | |||||
| export const PostJobseekDelfavorite = postModel(url.JobseekDelfavorite); | |||||
| export const PostJobseekUpdatefavorite = postModel(url.JobseekUpdatefavorite); | |||||
| export const GetJobseekListfavorite = getModel(url.JobseekListfavorite); | |||||
| export const GetJobseekFavoritedetail = getModel(url.JobseekFavoritedetail); | |||||
| // 投递 | |||||
| export const PostJobseekAddapplication = postModel(url.JobseekAddapplication); | |||||
| export const PostJobseekDelapplication = postModel(url.JobseekDelapplication); | |||||
| export const PostJobseekUpdateapplication = postModel(url.JobseekUpdateapplication); | |||||
| export const GetJobseekListapplication = getModel(url.JobseekListapplication); | |||||
| export const GetJobseekApplicationdetail = getModel(url.JobseekApplicationdetail); | |||||
| // 简历 | // 简历 | ||||
| // 列表 | // 列表 | ||||
| export const PostJobseekerList = postModel(url.JobseekerList); | export const PostJobseekerList = postModel(url.JobseekerList); |
| JobseekerSmsLogin : String, | JobseekerSmsLogin : String, | ||||
| CustomerVerify : String, | CustomerVerify : String, | ||||
| JobseekerEditPwd : String, | JobseekerEditPwd : String, | ||||
| CompanyLoginByMobile: String, | |||||
| Jobseekerlogin: String, | |||||
| // 招聘会 | // 招聘会 | ||||
| RecruitmentBookcompany : String, | RecruitmentBookcompany : String, | ||||
| RecruitmentbookList : String, | RecruitmentbookList : String, | ||||
| RecruitmentbookDetail : String, | RecruitmentbookDetail : String, | ||||
| // 收藏 | |||||
| 'JobseekAddfavorite':String, | |||||
| 'JobseekDelfavorite': String, | |||||
| 'JobseekUpdatefavorite': String, | |||||
| 'JobseekListfavorite': String, | |||||
| 'JobseekFavoritedetail': String, | |||||
| // 投递 | |||||
| 'JobseekAddapplication': String, | |||||
| 'JobseekDelapplication':String, | |||||
| 'JobseekUpdateapplication': String, | |||||
| 'JobseekListapplication': String, | |||||
| 'JobseekApplicationdetail':String, | |||||
| // 简历 | // 简历 |
| let web: string = '/web'; | |||||
| let common: string = '/common'; | |||||
| let web : string = '/web'; | |||||
| let common : string = '/common'; | |||||
| // 角色 | // 角色 | ||||
| export const url : urlType.url = { | export const url : urlType.url = { | ||||
| // 字典 | // 字典 | ||||
| dictTree: common + '/dict/tree', | dictTree: common + '/dict/tree', | ||||
| ImageUpload: common + '/image/upload?imgtype=1', | ImageUpload: common + '/image/upload?imgtype=1', | ||||
| JobseekerRegister: web + '/jobseeker/register', // 个人注册 | JobseekerRegister: web + '/jobseeker/register', // 个人注册 | ||||
| CompanyRegister: web + '/company/register', // 企业注册 | CompanyRegister: web + '/company/register', // 企业注册 | ||||
| Captcha: common + '/captcha', // 获取验证码 | Captcha: common + '/captcha', // 获取验证码 | ||||
| SmsSend: common + '/sms/send', // 短信验证码 | SmsSend: common + '/sms/send', // 短信验证码 | ||||
| JobseekerSmsLogin: web + '/jobseeker/smslogin', // 个人登录 | JobseekerSmsLogin: web + '/jobseeker/smslogin', // 个人登录 | ||||
| Jobseekerlogin: web + '/jobseeker/login', // 个人登录 | |||||
| CustomerVerify: web + '/customer/verify', // 转换为HR | CustomerVerify: web + '/customer/verify', // 转换为HR | ||||
| JobseekerEditPwd: web + '/jobseek/edit_pwd', // 修改密码 | JobseekerEditPwd: web + '/jobseek/edit_pwd', // 修改密码 | ||||
| CompanyLoginByMobile: web + '/company/login_by_mobile', // 企业登录 | |||||
| // 招聘会 | // 招聘会 | ||||
| RecruitmentBookcompany: web + '/recruitment/bookcompany', // 获取招聘会参与的企业 | RecruitmentBookcompany: web + '/recruitment/bookcompany', // 获取招聘会参与的企业 | ||||
| RecruitmentList: web + '/recruitment/list', // 招聘会列表 | RecruitmentList: web + '/recruitment/list', // 招聘会列表 | ||||
| // 求职者管理中心 | // 求职者管理中心 | ||||
| ViewhistoryList: web + '/viewhistory/list', // 获取简历被查看记录 | ViewhistoryList: web + '/viewhistory/list', // 获取简历被查看记录 | ||||
| InterviewList: web + '/interview/list', // 获取应聘记录列表 | InterviewList: web + '/interview/list', // 获取应聘记录列表 | ||||
| // 企业管理中心 | // 企业管理中心 | ||||
| CompanyRecommentResume: web + '/company/recomment_resume', // 推荐简历 | CompanyRecommentResume: web + '/company/recomment_resume', // 推荐简历 | ||||
| CompanyProfile: web + '/company/profile', // 企业基本资料 | CompanyProfile: web + '/company/profile', // 企业基本资料 | ||||
| CompanyJobRecycleList: web + '/company/job_recycle_list', // 回收站列表 | CompanyJobRecycleList: web + '/company/job_recycle_list', // 回收站列表 | ||||
| CompanyJobRecoverRecycle: web + '/company/job_recover_recycle', // 回收站列表 | CompanyJobRecoverRecycle: web + '/company/job_recover_recycle', // 回收站列表 | ||||
| CompanyJobStatusChange: web + '/company/job_status_change', // 回收站列表 | CompanyJobStatusChange: web + '/company/job_status_change', // 回收站列表 | ||||
| // 部门管理 | // 部门管理 | ||||
| CompanyDepartmentAdd: web + '/company/department_add', // 新增部门 | CompanyDepartmentAdd: web + '/company/department_add', // 新增部门 | ||||
| CompanyDepartmentEdit: web + '/company/department_edit', // 编辑部门 | CompanyDepartmentEdit: web + '/company/department_edit', // 编辑部门 | ||||
| CompanyDepartmentList: web + '/company/department_list', // 部门列表 | CompanyDepartmentList: web + '/company/department_list', // 部门列表 | ||||
| CompanyDepartmentDel: web + '/company/department_del', // 部门删除 | CompanyDepartmentDel: web + '/company/department_del', // 部门删除 | ||||
| CompanyRecrBookList: web + '/company/recr_book_list', // 已预定招聘会列表 | CompanyRecrBookList: web + '/company/recr_book_list', // 已预定招聘会列表 | ||||
| // 简历管理 | // 简历管理 | ||||
| CompanyResumeList: web + '/company/resume_list', // 收到的简历列表 | CompanyResumeList: web + '/company/resume_list', // 收到的简历列表 | ||||
| CompanyResumeRecycle: web + '/company/resume_recycle', // 简历放进回收站 | CompanyResumeRecycle: web + '/company/resume_recycle', // 简历放进回收站 | ||||
| CompanyResumeInterviewAdmission: web + '/company/interview_admission', // 是否录取 | CompanyResumeInterviewAdmission: web + '/company/interview_admission', // 是否录取 | ||||
| CompanyResumeInterviewViewStatus: web + '/company/interview_view_status', // 是否参加面试 | CompanyResumeInterviewViewStatus: web + '/company/interview_view_status', // 是否参加面试 | ||||
| CompanyResumeViewedContactList: web + '/company/viewed_contact_list', // 已查看联系方式 | CompanyResumeViewedContactList: web + '/company/viewed_contact_list', // 已查看联系方式 | ||||
| // 人才库 | // 人才库 | ||||
| CompanyTalentPoolAdd: web + '/company/talent_pool_add', // 添加人才库 | CompanyTalentPoolAdd: web + '/company/talent_pool_add', // 添加人才库 | ||||
| CompanyTalentPoolDel: web + '/company/talent_pool_del', // 删除人才库记录 | CompanyTalentPoolDel: web + '/company/talent_pool_del', // 删除人才库记录 | ||||
| CompanyTalentPoolList: web + '/company/talent_pool_list', // 人才库列表 | CompanyTalentPoolList: web + '/company/talent_pool_list', // 人才库列表 | ||||
| // 企业开通微信小程序账号公司权限 | // 企业开通微信小程序账号公司权限 | ||||
| CompanycustomercodeAdd: web + '/companycustomercode/add', // 添加 | CompanycustomercodeAdd: web + '/companycustomercode/add', // 添加 | ||||
| CompanycustomercodeDel: web + '/companycustomercode/del', // 删除 | CompanycustomercodeDel: web + '/companycustomercode/del', // 删除 | ||||
| CompanycustomercodeUpdate: web + '/companycustomercode/update', // 编辑 | CompanycustomercodeUpdate: web + '/companycustomercode/update', // 编辑 | ||||
| CompanycustomercodeList: web + '/companycustomercode/list', // 列表 | CompanycustomercodeList: web + '/companycustomercode/list', // 列表 | ||||
| CompanycustomercodeDetail: web + '/companycustomercode/detail', // 详情 | CompanycustomercodeDetail: web + '/companycustomercode/detail', // 详情 | ||||
| // 展示广告位 | // 展示广告位 | ||||
| AdvertscheduleList: web + '/advertschedule/list', // 详情 | AdvertscheduleList: web + '/advertschedule/list', // 详情 | ||||
| // 资讯 | // 资讯 | ||||
| SectionList: web + '/section/list', // 列表 | SectionList: web + '/section/list', // 列表 | ||||
| SectionDetail: web + '/section/detail', // 详情 | SectionDetail: web + '/section/detail', // 详情 | ||||
| ArticleList: web + '/article/list', | |||||
| ArticlenDetail: web + '/article/detail', | |||||
| ArticleList: web + '/article/list', | |||||
| ArticlenDetail: web + '/article/detail', | |||||
| // 职位 | // 职位 | ||||
| JobDetail: web + '/job/detail', // 获取职位详情 | JobDetail: web + '/job/detail', // 获取职位详情 | ||||
| JobSearch: web + '/job/search', // 职位搜索 | JobSearch: web + '/job/search', // 职位搜索 | ||||
| JobUrgentjobs: web + '/job/urgentjobs', // 急招职位 | JobUrgentjobs: web + '/job/urgentjobs', // 急招职位 | ||||
| JobHighpayjobs: web + '/job/highpayjobs', // 高薪职位 | JobHighpayjobs: web + '/job/highpayjobs', // 高薪职位 | ||||
| JobCampusjobs: web + '/job/campusjobs', // 校园招聘 | JobCampusjobs: web + '/job/campusjobs', // 校园招聘 | ||||
| // 招聘会企业预定 | // 招聘会企业预定 | ||||
| RecruitmentbookAdd: web + '/recruitmentbook/add', // 添加 | RecruitmentbookAdd: web + '/recruitmentbook/add', // 添加 | ||||
| RecruitmentbookDel: web + '/recruitmentbook/del', // 删除 | RecruitmentbookDel: web + '/recruitmentbook/del', // 删除 | ||||
| RecruitmentbookUpdate: web + '/recruitmentbook/update', // 编辑 | RecruitmentbookUpdate: web + '/recruitmentbook/update', // 编辑 | ||||
| RecruitmentbookList: web + '/recruitmentbook/list', // 列表 | RecruitmentbookList: web + '/recruitmentbook/list', // 列表 | ||||
| RecruitmentbookDetail: web + '/recruitmentbook/detail', // 详情 | RecruitmentbookDetail: web + '/recruitmentbook/detail', // 详情 | ||||
| // 反馈 | // 反馈 | ||||
| FeedbackAdd: common + '/feedback/add', // 添加 | FeedbackAdd: common + '/feedback/add', // 添加 | ||||
| FeedbackDel: common + '/feedback/del', // 删除 | FeedbackDel: common + '/feedback/del', // 删除 | ||||
| FeedbackUpdate: common + '/feedback/update', // 编辑 | FeedbackUpdate: common + '/feedback/update', // 编辑 | ||||
| FeedbackList: common + '/feedback/list', // 列表 | FeedbackList: common + '/feedback/list', // 列表 | ||||
| FeedbackDetail: common + '/feedback/detail', // 详情 | FeedbackDetail: common + '/feedback/detail', // 详情 | ||||
| // 简历 | // 简历 | ||||
| JobseekerList: web + '/jobseeker/list', // 获取简历完整资料列表 | JobseekerList: web + '/jobseeker/list', // 获取简历完整资料列表 | ||||
| JobseekerDetail: web + '/jobseeker/detail', // 获取简历完整资料 | JobseekerDetail: web + '/jobseeker/detail', // 获取简历完整资料 | ||||
| PersonInterviewList: web + '/person/interview_list', // 面试邀请记录 | PersonInterviewList: web + '/person/interview_list', // 面试邀请记录 | ||||
| PersonInterviewViewStatus: web + '/person/interview_view_status', // 是否参加面试 | PersonInterviewViewStatus: web + '/person/interview_view_status', // 是否参加面试 | ||||
| PersonInterviewDel: web + '/person/interview_del', // 删除面试邀请 | PersonInterviewDel: web + '/person/interview_del', // 删除面试邀请 | ||||
| // 收藏 | |||||
| 'JobseekAddfavorite': web + '/jobseek/addfavorite', // 添加 | |||||
| 'JobseekDelfavorite': web + '/jobseek/delfavorite', // 删除 | |||||
| 'JobseekUpdatefavorite': web + '/jobseek/updatefavorite', // 修改 | |||||
| 'JobseekListfavorite': web + '/jobseek/listfavorite', // 查看 | |||||
| 'JobseekFavoritedetail': web + '/jobseek/favoritedetail', // 详情 | |||||
| // 投递 | |||||
| 'JobseekAddapplication': web + '/jobseek/addapplication', // 添加 | |||||
| 'JobseekDelapplication': web + '/jobseek/delapplication', // 删除 | |||||
| 'JobseekUpdateapplication': web + '/jobseek/updateapplication', // 修改 | |||||
| 'JobseekListapplication': web + '/jobseek/listapplication', // 查看 | |||||
| 'JobseekApplicationdetail': web + '/jobseek/applicationdetail', // 详情 | |||||
| // 基本资料 | // 基本资料 | ||||
| 'JobapplicantAdd': web + '/jobapplicant/add', // 添加 | 'JobapplicantAdd': web + '/jobapplicant/add', // 添加 | ||||
| 'JobapplicantDel': web + '/jobapplicant/del', // 删除 | 'JobapplicantDel': web + '/jobapplicant/del', // 删除 | ||||
| 'JobapplicantUpdateexperience': web + '/jobapplicant/updateexperience', // 修改 | 'JobapplicantUpdateexperience': web + '/jobapplicant/updateexperience', // 修改 | ||||
| 'JobapplicantListexperience': web + '/jobapplicant/listexperience', // 查看 | 'JobapplicantListexperience': web + '/jobapplicant/listexperience', // 查看 | ||||
| 'JobapplicantExperiencedetail': web + '/jobapplicant/experiencedetail', // 详情 | 'JobapplicantExperiencedetail': web + '/jobapplicant/experiencedetail', // 详情 | ||||
| } | } |
| <template> | |||||
| <template v-if="!seekerList || seekerList.length == 0"> | |||||
| <a-empty style="height: 100vh;"> | |||||
| <template #description> | |||||
| 无求职者信息 | |||||
| </template> | |||||
| </a-empty> | |||||
| </template> | |||||
| <template v-else> | |||||
| <a-row :gutter="[20,20]"> | |||||
| <a-col span="24" v-for="(item, index) in seekerList"> | |||||
| <a-card> | |||||
| <div class="talent-box"> | |||||
| <a-list> | |||||
| <a-list-item> | |||||
| <template #actions> | |||||
| <a-button @click="detail(item)"> | |||||
| <StarOutlined /> | |||||
| 预览 | |||||
| </a-button> | |||||
| <a-button> | |||||
| <StarOutlined /> | |||||
| 收藏 | |||||
| </a-button> | |||||
| <a-button> | |||||
| 邀请面试 | |||||
| </a-button> | |||||
| </template> | |||||
| <a-list-item-meta> | |||||
| <template #title> | |||||
| {{item.seekername}} | |||||
| </template> | |||||
| <template #description> | |||||
| <div> | |||||
| {{item.gender}} | |||||
| <a-divider type="vertical" /> | |||||
| {{item.education_text}} | |||||
| <a-divider type="vertical" /> | |||||
| {{item.now_level1_text}}{{item.now_level2_text}} | |||||
| </div> | |||||
| <div style="margin-top: 10px; overflow: hidden; | |||||
| display: -webkit-box; | |||||
| -webkit-line-clamp: 1; | |||||
| -webkit-box-orient: vertical; | |||||
| text-overflow: ellipsis;"> | |||||
| <div v-html="item.introduction"></div> | |||||
| </div> | |||||
| </template> | |||||
| <template #avatar> | |||||
| <image-container | |||||
| :imgObj="{src: '/images/onlylogo.jpg',width: '48px',height:'48px'}"></image-container> | |||||
| </template> | |||||
| </a-list-item-meta> | |||||
| </a-list-item> | |||||
| </a-list> | |||||
| </div> | |||||
| </a-card> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="center"> | |||||
| <a-space> | |||||
| <a-pagination hideOnSinglePage :total="commomParams.page.total" @change="getPage" /> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| <resume-detail v-if="detail_record" :detail_record="detail_record"></resume-detail> | |||||
| </template> | |||||
| </template> | |||||
| <script setup lang="ts"> | |||||
| import { ref, computed, onMounted, defineProps, watch } from 'vue'; | |||||
| import ResumeDetail from '@/components/jobseeker/resume/detail/index.vue' | |||||
| import { PostJobseekerList } from '@/apis/models'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal, showOtherModal1 } = useCommon(); | |||||
| let props = defineProps(['search']); | |||||
| let seekerList = ref<object[]>([]) | |||||
| let loading = ref<Boolean>(true); | |||||
| const getPage = (data : object) => { | |||||
| commomParams.value.search.page = data.current; | |||||
| commomParams.value.search.pagesize = data.pageSize; | |||||
| getData(); | |||||
| } | |||||
| const getData = async () => { | |||||
| try { | |||||
| loading.value = true; | |||||
| let res = await PostJobseekerList(commomParams.value.search); | |||||
| loading.value = false; | |||||
| seekerList.value = res.data.seekers; | |||||
| commomParams.value.page = { | |||||
| current: commomParams.value.search.page, | |||||
| pageSize: commomParams.value.search.pagesize, | |||||
| total: res.data.total, | |||||
| pageSizeOptions: ['10', '20', '30', '40'], | |||||
| hideOnSinglePage: false, | |||||
| showSizeChanger: true | |||||
| }; | |||||
| } catch { | |||||
| loading.value = false; | |||||
| } | |||||
| } | |||||
| const onLoadMore = () => { | |||||
| commomParams.value.search.page = commomParams.value.search.page + 1; | |||||
| getData(); | |||||
| } | |||||
| let detail_record = ref<Object>(null) | |||||
| const detail = (record) => { | |||||
| detail_record.value = record; | |||||
| showOtherModal1() | |||||
| } | |||||
| // onMounted(() => { | |||||
| // getData(); | |||||
| // }) | |||||
| watch(() => [props.search], (newVal) => { | |||||
| if (newVal[0] ) { | |||||
| commomParams.value.search = newVal[0]; | |||||
| getData(); | |||||
| } | |||||
| }, { immediate: true }) | |||||
| </script> | |||||
| <style scoped lang="less"> | |||||
| </style> |
| <a-input v-model:value="value" placeholder="请输入计算机能力" size="large" /> | <a-input v-model:value="value" placeholder="请输入计算机能力" size="large" /> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <!-- | |||||
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-form-item label="工作经验"> | <a-form-item label="工作经验"> | ||||
| <a-xuanze :dict="2021" placeholder="请选择工作经验" @saveSelect="saveEthnicity" | <a-xuanze :dict="2021" placeholder="请选择工作经验" @saveSelect="saveEthnicity" | ||||
| :select_content="commomParams.search.ethnicity"></a-xuanze> | :select_content="commomParams.search.ethnicity"></a-xuanze> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item label="最小年龄" name="age_min"> | |||||
| <a-xuanze :dict="2012" placeholder="请选择民族" @saveSelect="saveEthnicity" | |||||
| :select_content="commomParams.search.ethnicity"></a-xuanze> | |||||
| </a-col> --> | |||||
| <!-- <a-col span="6"> | |||||
| <a-form-item label="最大年龄"> | |||||
| <a-input-number :min="0" v-model:value="commomParams.search.keyword" placeholder="请输入最小年龄" | |||||
| size="large" style="width: 100%;"/> | |||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | |||||
| <a-form-item label="最大年龄" name="age_max"> | |||||
| <a-xuanze :dict="2012" placeholder="请选择民族" @saveSelect="saveEthnicity" | |||||
| :select_content="commomParams.search.ethnicity"></a-xuanze> | |||||
| <a-col span="6"> | |||||
| <a-form-item label="最大年龄"> | |||||
| <a-input-number :max="99" v-model:value="commomParams.search.keyword" placeholder="请输入最大年龄" | |||||
| size="large" style="width: 100%;"/> | |||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item label="最小年龄" name="age_min"> | |||||
| <a-xuanze :dict="2012" placeholder="请选择民族" @saveSelect="saveEthnicity" | |||||
| :select_content="commomParams.search.ethnicity"></a-xuanze> | |||||
| </a-col> --> | |||||
| <a-col span="6"> | |||||
| <a-form-item label="最小工作经验(年)"> | |||||
| <a-input-number :min="0" v-model:value="commomParams.search.min_work_experience" placeholder="请输入最小工作经验" | |||||
| size="large" style="width: 100%;"/> | |||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="12"> | |||||
| <a-form-item label="最大年龄" name="age_max"> | |||||
| <a-xuanze :dict="2012" placeholder="请选择民族" @saveSelect="saveEthnicity" | |||||
| :select_content="commomParams.search.ethnicity"></a-xuanze> | |||||
| <a-col span="6"> | |||||
| <a-form-item label="最大工作经验(年)"> | |||||
| <a-input-number :max="99" v-model:value="commomParams.search.max_work_experience" placeholder="请输入最大工作经验" | |||||
| size="large" style="width: 100%;"/> | |||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="24"> | <a-col span="24"> | ||||
| <a-flex justify="flex-end"> | <a-flex justify="flex-end"> | ||||
| <a-space> | <a-space> | ||||
| <a-button type="primary" @click="saveForm" size="large">开始搜索</a-button> | |||||
| <a-button type="primary" @click="getData" size="large">开始搜索</a-button> | |||||
| </a-space> | </a-space> | ||||
| </a-flex> | </a-flex> | ||||
| </a-col> | </a-col> | ||||
| commomParams.value.search.english = 0; | commomParams.value.search.english = 0; | ||||
| commomParams.value.search.mandarin = 0; | commomParams.value.search.mandarin = 0; | ||||
| commomParams.value.search.cantonese = 0; | commomParams.value.search.cantonese = 0; | ||||
| commomParams.value.search.other_language = ''; | |||||
| commomParams.value.search.other_language = 0; | |||||
| commomParams.value.search.max_work_experience = 0; | commomParams.value.search.max_work_experience = 0; | ||||
| commomParams.value.search.min_work_experience = 0; | commomParams.value.search.min_work_experience = 0; | ||||
| commomParams.value.search.gender = '不限'; | |||||
| commomParams.value.search.gender = ''; | |||||
| commomParams.value.search.maxheight = 0; | commomParams.value.search.maxheight = 0; | ||||
| commomParams.value.search.minheight = 0; | commomParams.value.search.minheight = 0; | ||||
| commomParams.value.search.maxweight = 0; | commomParams.value.search.maxweight = 0; | ||||
| commomParams.value.search.minweight = 0; | commomParams.value.search.minweight = 0; | ||||
| watch(() => props.search_params, (newVal) => { | |||||
| emit('searchData', commomParams.value.search) | |||||
| }, { | |||||
| immediate: true | |||||
| }) | |||||
| // watch(() => props.search_params, (newVal) => { | |||||
| // emit('searchData', commomParams.value.search) | |||||
| // }, { | |||||
| // immediate: true | |||||
| // }) | |||||
| const getData = () => { | const getData = () => { | ||||
| emit('searchData', commomParams.value.search) | emit('searchData', commomParams.value.search) | ||||
| emit('clearData', commomParams.value.search) | emit('clearData', commomParams.value.search) | ||||
| } | } | ||||
| const saveTitle = (data) => { | |||||
| commomParams.value.search.title = data.val ? data.val : 0; | |||||
| } | |||||
| const saveEducation = (data) => { | |||||
| commomParams.value.search.education = data.val ? data.val : 0; | |||||
| } | |||||
| const saveMaritalStatus = (data) => { | |||||
| commomParams.value.search.marital_status = data.val ? data.val : 0; | |||||
| } | |||||
| const savePoliticalStatus = (data) => { | |||||
| commomParams.value.search.title = data.val ? data.val : 0; | |||||
| } | |||||
| const saveAvailableDateDesire = (data) => { | |||||
| commomParams.value.search.available_date_desire = data.val ? data.val : 0; | |||||
| } | |||||
| const saveEnglish = (data) => { | |||||
| commomParams.value.search.english = data.val ? data.val : 0; | |||||
| } | |||||
| const saveMandarin = (data) => { | |||||
| commomParams.value.search.mandarin = data.val ? data.val : 0; | |||||
| } | |||||
| const saveCantonese = (data) => { | |||||
| commomParams.value.search.cantonese = data.val ? data.val : 0; | |||||
| } | |||||
| const saveOtherLanguage = (data) => { | |||||
| commomParams.value.search.other_language = data.val ? data.val : 0; | |||||
| } | |||||
| </script> | </script> | ||||
| <style> | <style> |
| <a-flex vertical style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;"> | <a-flex vertical style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;"> | ||||
| <a-card :title="item.job_name"> | <a-card :title="item.job_name"> | ||||
| <template #extra> | <template #extra> | ||||
| <a-space> | |||||
| <a-button @click="rejectInterview(item.id)">拒绝面试</a-button> | |||||
| <a-button @click="receiveInterview(item.id)" class="main-color">接受面试</a-button> | |||||
| </a-space> | |||||
| <div>企业查看状态:{{item.status_text}}</div> | |||||
| </template> | </template> | ||||
| <div>面试时间:{{item.invite_date}}</div> | |||||
| <div>面试结果:{{item.employ_status_txt}}</div> | |||||
| <div>面试企业:{{item.company_name}}</div> | |||||
| <div>投递时间:{{item.created_at}}</div> | |||||
| <div>企业名称:{{item.company_name}}</div> | |||||
| </a-card> | </a-card> | ||||
| </a-flex> | </a-flex> | ||||
| </a-col> | </a-col> | ||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||
| import { ref, computed, onMounted, defineEmits, createVNode } from 'vue'; | import { ref, computed, onMounted, defineEmits, createVNode } from 'vue'; | ||||
| import { GetInterviewList } from '@/apis/models'; | |||||
| import { GetJobseekListapplication } from '@/apis/models'; | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | import { warnToast, successToast } from '@/utils/toastHelper'; | ||||
| import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
| let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | ||||
| const getData = async () => { | const getData = async () => { | ||||
| try { | try { | ||||
| loading.value = true; | loading.value = true; | ||||
| let res = await GetInterviewList(commomParams.value.search); | |||||
| let res = await GetJobseekListapplication(commomParams.value.search); | |||||
| loading.value = false; | loading.value = false; | ||||
| jobList.value = res.data.interviews; | |||||
| jobList.value = res.data.jobapplicationrecords; | |||||
| commomParams.value.page = { | commomParams.value.page = { | ||||
| current: commomParams.value.search.page, | current: commomParams.value.search.page, | ||||
| pageSize: commomParams.value.search.pagesize, | pageSize: commomParams.value.search.pagesize, |
| <template> | <template> | ||||
| <template v-if="!jobList || jobList.length == 0"> | |||||
| <a-empty style="height: 100vh;"> | |||||
| <template #description> | |||||
| 无职位信息 | |||||
| </template> | |||||
| </a-empty> | |||||
| </template> | |||||
| <template v-else> | |||||
| <a-row :gutter="[10,20]"> | |||||
| <a-col span="8" v-for="(item, index) in jobList"> | |||||
| <a-card :title="item.job_name"> | |||||
| <template #extra> | |||||
| <a-button @click="cancelCollect(item.id,item.job_id)">取消收藏</a-button> | |||||
| </template> | |||||
| <div>企业名称:{{item.company_name}}</div> | |||||
| <div>收藏时间:{{item.created_at}}</div> | |||||
| <a-popover trigger="click" placement="rightTop"> | |||||
| <template #content> | |||||
| <job-detail v-if="detail_record" :detail_record="detail_record"></job-detail> | |||||
| </template> | |||||
| <a-button @click="detail(item.job_id)">详情</a-button> | |||||
| </a-popover> | |||||
| </a-card> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </template> | |||||
| </template> | </template> | ||||
| <script> | |||||
| <script setup lang="ts"> | |||||
| import { ref, computed, onMounted, defineEmits, createVNode } from 'vue'; | |||||
| import { GetJobseekListfavorite, PostJobseekUpdatefavorite } from '@/apis/models'; | |||||
| import JobDetail from '@/components/jobseeker/invite/detail/index.vue' | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal, showOtherModal1 } = useCommon(); | |||||
| let loading = ref<Boolean>(true); | |||||
| let jobList = ref([]); | |||||
| let total = ref<Number>(0) | |||||
| const searchData = (data : object) => { | |||||
| commomParams.value.search = data | |||||
| getData(); | |||||
| } | |||||
| const clearData = (data : object) => { | |||||
| if (data) { | |||||
| commomParams.value.search = data | |||||
| } else { | |||||
| commomParams.value.search = { | |||||
| page: 1, | |||||
| pagesize: 12, | |||||
| sort: 'id', | |||||
| sortby: 'asc', | |||||
| keyword: '' | |||||
| } | |||||
| } | |||||
| getData(); | |||||
| } | |||||
| const getPage = (page, pageSize) => { | |||||
| commomParams.value.search.page = page; | |||||
| commomParams.value.search.pagesize = pageSize; | |||||
| getData(); | |||||
| } | |||||
| const getData = async () => { | |||||
| try { | |||||
| loading.value = true; | |||||
| let res = await GetJobseekListfavorite(commomParams.value.search); | |||||
| loading.value = false; | |||||
| jobList.value = res.data.jobapplicantfavorites; | |||||
| commomParams.value.page = { | |||||
| current: commomParams.value.search.page, | |||||
| pageSize: commomParams.value.search.pagesize, | |||||
| total: res.data.total, | |||||
| pageSizeOptions: ['10', '20', '30', '40'], | |||||
| hideOnSinglePage: false, | |||||
| showSizeChanger: true | |||||
| }; | |||||
| } catch { | |||||
| loading.value = false; | |||||
| } | |||||
| } | |||||
| const cancelCollect = (id : Number, job_id : Number) => { | |||||
| Modal.confirm({ | |||||
| title: `是否要取消收藏该职位`, | |||||
| centered: true, | |||||
| icon: createVNode(ExclamationCircleOutlined), | |||||
| onOk() { | |||||
| PostJobseekUpdatefavorite({ id: id, job_id: job_id }).then(res => { | |||||
| successToast('已取消收藏') | |||||
| getData(); | |||||
| }) | |||||
| }, | |||||
| onCancel() { | |||||
| }, | |||||
| }); | |||||
| } | |||||
| let detail_record = ref<Object>(null) | |||||
| const detail = (record) => { | |||||
| detail_record.value = record; | |||||
| showOtherModal1() | |||||
| } | |||||
| onMounted(() => { | |||||
| getData(); | |||||
| }) | |||||
| </script> | </script> | ||||
| <style> | |||||
| <style lang="less" scoped> | |||||
| .job-box { | |||||
| display: flex; | |||||
| flex-direction: column; | |||||
| justify-content: space-around; | |||||
| // align-items: center; | |||||
| width: 100%; | |||||
| .job-title { | |||||
| padding: 20px; | |||||
| background-color: #ffffff; | |||||
| .aaaa { | |||||
| display: flex; | |||||
| justify-content: space-between; | |||||
| } | |||||
| } | |||||
| .job-company { | |||||
| padding: 20px; | |||||
| background-color: #cccccc; | |||||
| .aaaa { | |||||
| display: flex; | |||||
| justify-content: space-between; | |||||
| } | |||||
| } | |||||
| } | |||||
| .mt10 { | |||||
| margin-bottom: 10px; | |||||
| } | |||||
| </style> | </style> |
| <template> | |||||
| <a-spin :spinning="spinning"> | |||||
| <template v-if="detail"> | |||||
| <a-card :title="detail.base.name" style="width: 500px;" :bordered="false"> | |||||
| <template #extra>{{detail.base.pay_range_text}}</template> | |||||
| <a-flex style="width: 100%;"> | |||||
| <a-descriptions :column="1" title="职位描述"> | |||||
| <a-descriptions-item label="职位性质">{{detail.company.nature_text}}</a-descriptions-item> | |||||
| <a-descriptions-item label="招聘人数">{{detail.base.invite_count}}人</a-descriptions-item> | |||||
| <a-descriptions-item | |||||
| label="工作地区">{{detail.locations ? detail.locations[0].name : '未知地址'}}</a-descriptions-item> | |||||
| <a-descriptions-item label="月新范围">{{detail.base.pay_range_text}}</a-descriptions-item> | |||||
| <a-descriptions-item label="食宿条件">{{detail.base.shisu_text}}</a-descriptions-item> | |||||
| <a-descriptions-item label="节假日">{{detail.base.holidays_text}}</a-descriptions-item> | |||||
| <a-descriptions-item label="有效期">{{detail.base.disabled_date}}</a-descriptions-item> | |||||
| <a-descriptions-item label="有效期至">{{detail.base.name}}</a-descriptions-item> | |||||
| <a-descriptions-item label="联系人">{{detail.contact.contact}}</a-descriptions-item> | |||||
| <a-descriptions-item | |||||
| label="职业类别">{{detail.base.types ? detail.base.types[0].name : '未知'}}</a-descriptions-item> | |||||
| <a-descriptions-item label="联系电话">{{detail.contact.mobile}} <a-button size="small"> | |||||
| 查看 | |||||
| </a-button></a-descriptions-item> | |||||
| <a-descriptions-item></a-descriptions-item> | |||||
| <a-descriptions-item label="职业描述"> | |||||
| <div v-html="detail.base.describe_text"></div></a-descriptions-item> | |||||
| </a-descriptions> | |||||
| </a-flex> | |||||
| </a-card> | |||||
| </template> | |||||
| </a-spin> | |||||
| </template> | |||||
| <script setup lang="ts"> | |||||
| import { ref, onMounted, defineProps, computed, watch, defineEmits } from 'vue'; | |||||
| import { GetJobDetail } from '@/apis/models'; | |||||
| import { message } from 'ant-design-vue'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, commomParams, hideOtherModal1, openOtherModel_1 } = useCommon(); | |||||
| const emit = defineEmits(); | |||||
| let props = defineProps(['detail_record']); | |||||
| let detail = ref<Object>(null) | |||||
| let spinning = ref<Boolean>(false); // 加载中 | |||||
| openOtherModel_1 = computed(() => { | |||||
| return store.state.openOtherModel_1; | |||||
| }) | |||||
| watch(() => [props.detail_record], (newVal) => { | |||||
| if (newVal[0]) { | |||||
| spinning.value = false | |||||
| GetJobDetail({ id: props.detail_record }).then(res => { | |||||
| detail.value = res.data | |||||
| console.log(detail.value) | |||||
| }) | |||||
| } | |||||
| }, { immediate: true }) | |||||
| const cancelModal = () => { | |||||
| hideOtherModal1() | |||||
| } | |||||
| </script> | |||||
| <style lang="less" scoped> | |||||
| .a-row:first-child { | |||||
| border-bottom: none; | |||||
| border-radius: 10px 10px 0 0; | |||||
| } | |||||
| .a-row:last-child { | |||||
| border-radius: 0 0 10px 10px; | |||||
| } | |||||
| .a-row { | |||||
| padding: 6px; | |||||
| border: 1px #f0f0f0 solid; | |||||
| .a-col:first-child {} | |||||
| } | |||||
| .a-col { | |||||
| padding: 6px; | |||||
| // padding-top: 6px; | |||||
| } | |||||
| </style> |
| <a-row :gutter="[10,20]"> | <a-row :gutter="[10,20]"> | ||||
| <a-col span="12" v-for="(item, index) in jobList"> | <a-col span="12" v-for="(item, index) in jobList"> | ||||
| <a-flex vertical style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;"> | <a-flex vertical style="width: 100%;background-color: #fff;border-radius: 10px;padding: 20px;"> | ||||
| <a-card :title="item.job_name"> | |||||
| <a-card :title="item.job_name" @click="detail(item.job_id)"> | |||||
| <template #extra> | <template #extra> | ||||
| <a-space> | <a-space> | ||||
| <a-button @click="rejectInterview(item.id)">拒绝面试</a-button> | <a-button @click="rejectInterview(item.id)">拒绝面试</a-button> | ||||
| <div>面试时间:{{item.invite_date}}</div> | <div>面试时间:{{item.invite_date}}</div> | ||||
| <div>面试结果:{{item.employ_status_txt}}</div> | <div>面试结果:{{item.employ_status_txt}}</div> | ||||
| <div>面试企业:{{item.company_name}}</div> | <div>面试企业:{{item.company_name}}</div> | ||||
| <a-popover trigger="click" placement="rightTop"> | |||||
| <template #content> | |||||
| <job-detail v-if="detail_record" :detail_record="detail_record"></job-detail> | |||||
| </template> | |||||
| <a-button @click="detail(item.job_id)">详情</a-button> | |||||
| </a-popover> | |||||
| </a-card> | </a-card> | ||||
| </a-flex> | </a-flex> | ||||
| </a-col> | </a-col> | ||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||
| import { ref, computed, onMounted, defineEmits, createVNode } from 'vue'; | import { ref, computed, onMounted, defineEmits, createVNode } from 'vue'; | ||||
| import { GetPersonInterviewList, PostPersonInterviewViewStatus } from '@/apis/models'; | import { GetPersonInterviewList, PostPersonInterviewViewStatus } from '@/apis/models'; | ||||
| import JobDetail from '@/components/jobseeker/invite/detail/index.vue' | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | import { warnToast, successToast } from '@/utils/toastHelper'; | ||||
| import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
| let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||||
| let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal, showOtherModal1 } = useCommon(); | |||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| let loading = ref<Boolean>(true); | let loading = ref<Boolean>(true); | ||||
| let jobList = ref([]); | let jobList = ref([]); | ||||
| Modal.confirm({ | Modal.confirm({ | ||||
| title: `是否要拒绝面试`, | title: `是否要拒绝面试`, | ||||
| centered: true, | centered: true, | ||||
| icon: PostPersonInterviewViewStatus(ExclamationCircleOutlined), | |||||
| icon: createVNode(ExclamationCircleOutlined), | |||||
| onOk() { | onOk() { | ||||
| PostPersonInterviewViewStatus({ id: id, view_status: 3 }).then(res => { | PostPersonInterviewViewStatus({ id: id, view_status: 3 }).then(res => { | ||||
| successToast('已拒绝') | successToast('已拒绝') | ||||
| }); | }); | ||||
| } | } | ||||
| let detail_record = ref<Object>(null) | |||||
| const detail = (record) => { | |||||
| detail_record.value = record; | |||||
| showOtherModal1() | |||||
| } | |||||
| onMounted(() => { | onMounted(() => { | ||||
| getData(); | getData(); | ||||
| }) | }) |
| <template> | |||||
| <a-modal v-model:visible="openOtherModel_1" title="预览简历" ok-text="提交" cancel-text="取消" @ok="sumbitForm" | |||||
| @cancel="cancelModal" width="60%"> | |||||
| <a-spin :spinning="spinning"> | |||||
| <a-typography> | |||||
| <a-typography-title :level="4">基本资料</a-typography-title> | |||||
| <a-typography-paragraph> | |||||
| <a-row :gutter="[20,20]"> | |||||
| <a-col span="24"> | |||||
| <a-row :gutter="[20,20]"> | |||||
| <a-col span="10"> | |||||
| <a-row> | |||||
| <a-col span="24"> | |||||
| 姓 名:{{detail.seekername}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 性 别:{{detail.gender}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 身份证号:{{detail.id_number}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 民 族:{{detail.ethnicity_txt}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 身 高:{{detail.height}}cm | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 政治面貌:{{detail.political_status_txt}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 联系方式:{{detail.mobile}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 邮 箱:{{detail.email}} | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-row> | |||||
| <a-col span="24"> | |||||
| 出生日期:{{detail.dob}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 婚姻状况:{{detail.marital_status_txt}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 学 历:{{detail.education_txt}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 体 重:{{detail.weight}}kg | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 现居地址:{{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 : ''}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 籍 贯:{{detail.native_place_txt}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 户口地址:{{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 : ''}} | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-col> | |||||
| <a-col span="6"> | |||||
| <image-container | |||||
| :imgObj="{src: detail.photo? 'https://admin1.jcjob.cn/img/' + detail.photo : '', width: '200px',height: '280px',mode: 'fill'}"></image-container> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-typography-paragraph> | |||||
| <a-typography-title :level="4">个人简介</a-typography-title> | |||||
| <a-typography-paragraph> | |||||
| <div v-html="detail.description"></div> | |||||
| </a-typography-paragraph> | |||||
| <a-typography-title :level="4">求职期望</a-typography-title> | |||||
| <a-typography-paragraph> | |||||
| <a-row> | |||||
| <a-col span="24"> | |||||
| 工作经验:{{detail.work_experience}}年 | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 期望薪资:{{detail.salary_range_txt}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-row> | |||||
| <a-col span="8" v-if="detail.desire_areas"> | |||||
| <a-row> | |||||
| <a-col span="24" v-for="(item,index) in detail.desire_areas"> | |||||
| 期望地址{{index + 1}}:{{item.level1_txt ? item.level1_txt : ''}}{{item.level2_txt ? item.level2_txt : ''}}{{item.level3_txt ? item.level3_txt : ''}}{{item.level4_txt ? item.level4_txt : ''}} | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-col> | |||||
| <a-col span="8" v-if="detail.desire_positions"> | |||||
| <a-row> | |||||
| <a-col span="24" v-for="(item,index) in detail.desire_positions"> | |||||
| 期望职位{{index + 1}}:{{item.level1_txt ? item.level1_txt : ''}}{{item.level2_txt ? item.level2_txt : ''}} | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-col> | |||||
| <a-col span="8" v-if="detail.desire_industrys"> | |||||
| <a-row> | |||||
| <a-col span="24" v-for="(item,index) in detail.desire_industrys"> | |||||
| 期望行业{{index + 1}}:{{item.industry_txt}} | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-typography-paragraph> | |||||
| </a-typography> | |||||
| <a-typography-title :level="4">专业技能掌握能力</a-typography-title> | |||||
| <a-typography-paragraph> | |||||
| <a-row> | |||||
| <a-col span="24"> | |||||
| 英 语:{{detail.english_txt}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 国 语:{{detail.mandarin_txt}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 粤 语:{{detail.cantonese_txt}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 第二外语:{{detail.salary_range_txt}} | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| 计算机能力:{{detail.computer_skills}} | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-typography-paragraph> | |||||
| <a-typography-title :level="4">工作经历</a-typography-title> | |||||
| <a-typography-paragraph> | |||||
| <template v-for="(item,index) in detail.experiences"> | |||||
| <a-card :title="item.company_name" style="margin-bottom: 10px;"> | |||||
| <template #extra>{{item.position}}</template> | |||||
| <p>工作时间:{{item.start_year}}.{{item.start_month}}至{{item.end_year}}.{{item.end_month}}</p> | |||||
| <p>离职原因:{{item.reason_for_leaving}}</p> | |||||
| </a-card> | |||||
| </template> | |||||
| </a-typography-paragraph> | |||||
| <a-typography-title :level="4">教育/培训经历</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;"> | |||||
| <template #extra>{{item.major}}</template> | |||||
| <p>教育/培训时间:{{item.start_year}}.{{item.start_month}}至{{item.end_year}}.{{item.end_month}}</p> | |||||
| <p>曾担任的职务:{{item.positions_held}}</p> | |||||
| <p>获得的证书:{{item.certificate}}</p> | |||||
| <p>获得的奖项:{{item.awards}}</p> | |||||
| </a-card> | |||||
| </template> | |||||
| </a-typography-paragraph> | |||||
| </a-spin> | |||||
| </a-modal> | |||||
| </template> | |||||
| <script setup lang="ts"> | |||||
| 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 { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, commomParams, hideOtherModal1, openOtherModel_1 } = useCommon(); | |||||
| const emit = defineEmits(); | |||||
| let props = defineProps(['detail_record']); | |||||
| let detailTitle = ref<String>('') | |||||
| let detail = ref<Object>({}) | |||||
| let trainList = ref<Object[]>([]) | |||||
| let experienceList = ref<Object[]>([]) | |||||
| let introduction = ref<Object>({}) | |||||
| let spinning = ref<Boolean>(false); // 加载中 | |||||
| openOtherModel_1 = computed(() => { | |||||
| return store.state.openOtherModel_1; | |||||
| }) | |||||
| watch(() => [props.detail_record], (newVal) => { | |||||
| if (newVal[0]) { | |||||
| spinning.value = false | |||||
| GetJobseekerDetail({ customer_id: props.detail_record.customer_id }).then(res => { | |||||
| detail.value = res.data | |||||
| console.log(detail.value) | |||||
| }) | |||||
| } | |||||
| }, { immediate: true }) | |||||
| const cancelModal = () => { | |||||
| hideOtherModal1() | |||||
| } | |||||
| </script> | |||||
| <style lang="less" scoped> | |||||
| .a-row:first-child { | |||||
| border-bottom: none; | |||||
| border-radius: 10px 10px 0 0; | |||||
| } | |||||
| .a-row:last-child { | |||||
| border-radius: 0 0 10px 10px; | |||||
| } | |||||
| .a-row { | |||||
| padding: 6px; | |||||
| border: 1px #f0f0f0 solid; | |||||
| .a-col:first-child {} | |||||
| } | |||||
| .a-col { | |||||
| padding: 6px; | |||||
| // padding-top: 6px; | |||||
| } | |||||
| </style> |
| let interviewListLength = ref<Number>(0) | let interviewListLength = ref<Number>(0) | ||||
| onMounted(() => { | onMounted(() => { | ||||
| GetPersonInterviewList({ status: 0 }).then(res => { | |||||
| interviewListLength.value = res.data.list.length | |||||
| }) | |||||
| if(sessionStorage.getItem('pageType') == 'personal' && sessionStorage.getItem('role') == 'personal') { | |||||
| GetPersonInterviewList({ status: 0 }).then(res => { | |||||
| interviewListLength.value = res.data.list.length | |||||
| }) | |||||
| } | |||||
| }) | }) | ||||
| </script> | </script> | ||||
| export const cols = <ColType.type[]>[ | |||||
| { | |||||
| title: '验证码', | |||||
| dataIndex: 'code' | |||||
| }, { | |||||
| title: '绑定的账号', | |||||
| dataIndex: 'customer.username' | |||||
| }, { | |||||
| title: '使用状态', | |||||
| dataIndex: 'customer_id' | |||||
| }, { | |||||
| title: '生成时间', | |||||
| dataIndex: 'created_at', | |||||
| }, | |||||
| { | |||||
| title: '操作', | |||||
| dataIndex: 'operation', | |||||
| slots: { customRender: 'operation' }, | |||||
| }, | |||||
| ] |
| <template> | |||||
| <a-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></a-search> | |||||
| <a-card title="转换验证码"> | |||||
| <template #extra> | |||||
| <a-button @click="getCode">生成验证码</a-button> | |||||
| </template> | |||||
| <a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | |||||
| @page="getPage" :loading="loading"> | |||||
| <template #default="{ record }"> | |||||
| <a-row :gutter="20"> | |||||
| <a-col> | |||||
| <a-dropdown placement="bottomRight"> | |||||
| <template #overlay> | |||||
| <a-menu> | |||||
| <a-menu-item key="1"> | |||||
| <a-button @click="copyCode(record.code)" block>复制</a-button> | |||||
| </a-menu-item> | |||||
| <a-menu-item key="2"> | |||||
| <a-button @click="del(record.id)" block>删除</a-button> | |||||
| </a-menu-item> | |||||
| </a-menu> | |||||
| </template> | |||||
| <a-button> | |||||
| 操作 | |||||
| <DownOutlined /> | |||||
| </a-button> | |||||
| </a-dropdown> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </template> | |||||
| </a-biaoge> | |||||
| </a-card> | |||||
| </template> | |||||
| <script setup lang="ts"> | |||||
| import { ref, onMounted, computed, defineEmits, createVNode } from 'vue'; | |||||
| import { PostCompanycustomercodeAdd, PostCompanycustomercodeDel, PostCompanycustomercodeUpdate, GetCompanycustomercodeList } from '@/apis/models'; | |||||
| import ASearch from '@/components/user/conver/search.vue'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| import { cols } from '@/components/user/conver/columns'; | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
| const emit = defineEmits(); | |||||
| let { commomParams, ExclamationCircleOutlined, Modal } = useCommon(); | |||||
| let loading = ref<Boolean>(true); | |||||
| onMounted(() => { | |||||
| getData(); | |||||
| }) | |||||
| const searchData = (data : object) => { | |||||
| commomParams.value.search = data | |||||
| getData(); | |||||
| } | |||||
| const clearData = (data : object) => { | |||||
| if (data) { | |||||
| commomParams.value.search = data | |||||
| } else { | |||||
| commomParams.value.search = { | |||||
| page: 1, | |||||
| pagesize: 10, | |||||
| sort: 'id', | |||||
| sortby: 'asc', | |||||
| keyword: '' | |||||
| } | |||||
| } | |||||
| getData(); | |||||
| } | |||||
| const getPage = (data : object) => { | |||||
| commomParams.value.search.page = data.current; | |||||
| commomParams.value.search.pagesize = data.pageSize; | |||||
| getData(); | |||||
| } | |||||
| const getData = async () => { | |||||
| try { | |||||
| loading.value = true; | |||||
| let res = await GetCompanycustomercodeList(commomParams.value.search); | |||||
| loading.value = false; | |||||
| commomParams.value.table.data = res.data.companycustomercodes; | |||||
| commomParams.value.table.columns = cols; | |||||
| commomParams.value.page = { | |||||
| current: commomParams.value.search.page, | |||||
| pageSize: commomParams.value.search.pagesize, | |||||
| total: res.data.total, | |||||
| pageSizeOptions: ['10', '20', '30', '40'], | |||||
| hideOnSinglePage: false, | |||||
| showSizeChanger: true | |||||
| }; | |||||
| } catch { | |||||
| loading.value = false; | |||||
| } | |||||
| } | |||||
| // 修改 | |||||
| const edit = (record : Object) => { | |||||
| emit('toEdit', { record: record }) | |||||
| } | |||||
| const getCode = (id) => { | |||||
| Modal.confirm({ | |||||
| title: '是否要生成验证码', | |||||
| icon: createVNode(ExclamationCircleOutlined), | |||||
| centered: true, | |||||
| onOk() { | |||||
| PostCompanycustomercodeAdd().then(res => { | |||||
| successToast('已生成验证码') | |||||
| getData() | |||||
| }) | |||||
| }, | |||||
| onCancel() { | |||||
| }, | |||||
| }); | |||||
| } | |||||
| const copyCode = async (code) => { | |||||
| try { | |||||
| await navigator.clipboard.writeText(code); | |||||
| successToast('复制成功'); | |||||
| } catch (err) { | |||||
| warnToast('复制到剪贴板失败,请手动复制'); | |||||
| } | |||||
| } | |||||
| const del = (id : number) => { | |||||
| commomParams.value.delParam = { id: id }; | |||||
| PostCompanycustomercodeDel(commomParams.value.delParam).then(res => { | |||||
| successToast('删除成功'); | |||||
| getData(); | |||||
| }) | |||||
| } | |||||
| </script> | |||||
| <style scoped lang="less"> | |||||
| </style> |
| <template> | |||||
| <a-form :model="commomParams.search"> | |||||
| <a-row :gutter="20"> | |||||
| <a-col span="6"> | |||||
| <a-form-item> | |||||
| <a-input-search v-model:value="commomParams.search.keyword" placeholder="请输入账号名" enter-button="搜索" | |||||
| @search="getData" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="6"> | |||||
| <a-button type="primary" @click="clearSearch">重置</a-button> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| </template> | |||||
| <script lang="ts" setup> | |||||
| import { ref, onMounted, watch, computed } from 'vue'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { commomParams } = useCommon(); | |||||
| let props = defineProps(['search_params']); | |||||
| const emit = defineEmits(); | |||||
| watch(() => props.search_params, (newVal) => { | |||||
| emit('searchData', commomParams.value.search) | |||||
| },{ | |||||
| immediate: true | |||||
| }) | |||||
| const getData = () => { | |||||
| emit('searchData', commomParams.value.search) | |||||
| } | |||||
| // 清空搜索 | |||||
| const clearSearch = () => { | |||||
| commomParams.value.search = { | |||||
| page: 1, | |||||
| pagesize: 10, | |||||
| sort: 'id', | |||||
| sortby: 'asc', | |||||
| keyword: '' | |||||
| } | |||||
| emit('clearData', commomParams.value.search) | |||||
| } | |||||
| </script> | |||||
| <style> | |||||
| </style> |
| <a-col span="12"> | <a-col span="12"> | ||||
| <a-row> | <a-row> | ||||
| <a-col span="24"> | <a-col span="24"> | ||||
| <a-form-item required label="邮箱" name="email"> | |||||
| <a-input v-model:value="createForm.email" placeholder="请输入邮箱" /> | |||||
| <a-form-item label="邮箱" name="email"> | |||||
| <a-input v-model:value="createForm.email" placeholder="请输入邮箱" size="large"/> | |||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="24"> | <a-col span="24"> |
| state.show_edit = payload.show_edit; | state.show_edit = payload.show_edit; | ||||
| } | } | ||||
| const getOpenMoreModel = (state : object, payload : object) => { | |||||
| state.openOtherModel_1 = payload.openOtherModel_1; | |||||
| } | |||||
| export const mutations = { | export const mutations = { | ||||
| getRouteName, | getRouteName, | ||||
| setShowLoginBox, | setShowLoginBox, | ||||
| getToken, | getToken, | ||||
| getRole, | getRole, | ||||
| getPageType, | getPageType, | ||||
| getShowEdit | |||||
| getShowEdit, | |||||
| getOpenMoreModel | |||||
| } | } |
| token: '', | token: '', | ||||
| role: '', | role: '', | ||||
| pageType: '', | pageType: '', | ||||
| show_edit: false | |||||
| show_edit: false, | |||||
| openOtherModel_1: false, | |||||
| } | } |
| token ?: String, | token ?: String, | ||||
| role ?: String, | role ?: String, | ||||
| pageType ?: String, | pageType ?: String, | ||||
| show_edit ?: Boolean | |||||
| show_edit ?: Boolean, | |||||
| openOtherModel_1 : Boolean, | |||||
| } | } |
| <a-col span="18"> | <a-col span="18"> | ||||
| <a-row> | <a-row> | ||||
| <a-col span="4"> | <a-col span="4"> | ||||
| <common-left-sider :menu_list="menu_list" :selected_key="[1]" | |||||
| <common-left-sider :menu_list="menu_list" :selected_key="[2]" | |||||
| @changeKey="changeKey"></common-left-sider> | @changeKey="changeKey"></common-left-sider> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="20"> | <a-col span="20"> | ||||
| <div style="width: 100%;background-color: #fff;padding: 20px;border-radius: 10px;"> | <div style="width: 100%;background-color: #fff;padding: 20px;border-radius: 10px;"> | ||||
| <resume-search v-if="curKey == 1"></resume-search> | |||||
| <resume-result v-if="curKey == 2"></resume-result> | |||||
| <resume-search v-if="curKey == 1" @searchData="searchData"></resume-search> | |||||
| <a-tabs v-model:activeKey="activeKey" @change="activeKeyChange" v-if="curKey == 2" | |||||
| type="card"> | |||||
| <a-tab-pane :key="1" tab="推荐人才"> | |||||
| <resume-result v-if="activeKey == 1" :search="searchParams"></resume-result> | |||||
| </a-tab-pane> | |||||
| <a-tab-pane :key="2" tab="最新简历" force-render> | |||||
| <resume-result :search="searchParams"></resume-result> | |||||
| </a-tab-pane> | |||||
| <a-tab-pane :key="3" tab="应届毕业生"> | |||||
| <resume-result v-if="activeKey == 3" :search="searchParams"></resume-result> | |||||
| </a-tab-pane> | |||||
| </a-tabs> | |||||
| </div> | </div> | ||||
| </a-col> | </a-col> | ||||
| </a-row> | </a-row> | ||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||
| import { ref, computed, onMounted } from 'vue'; | import { ref, computed, onMounted } from 'vue'; | ||||
| import ResumeSearch from '@/components/company/search/index.vue' | import ResumeSearch from '@/components/company/search/index.vue' | ||||
| import ResumeResult from '@/components/resume/result/index.vue' | |||||
| let menu_list = ref([{ title: '简历搜索', key: 1 },{ title: '搜索结果', key: 2 }]) | |||||
| let curKey = ref<Number>(1) | |||||
| import ResumeResult from '@/components/company/result/index.vue' | |||||
| let menu_list = ref([{ title: '简历搜索', key: 1 }, { title: '简历列表', key: 2 }]) | |||||
| let curKey = ref<Number>(2) | |||||
| let activeKey = ref<Number>(1); | |||||
| let searchParams = ref<any>(null) | |||||
| const changeKey = (data) => { | const changeKey = (data) => { | ||||
| curKey.value = data.key; | curKey.value = data.key; | ||||
| } | } | ||||
| const searchData = (data) => { | |||||
| searchParams.value = data; | |||||
| if(activeKey.value == 2) { | |||||
| searchParams.value.sortby = 'desc' | |||||
| } | |||||
| curKey.value = 2 | |||||
| } | |||||
| </script> | </script> | ||||
| <style> | |||||
| <style scoped> | |||||
| :deep(.ant-tabs-tab-btn) { | |||||
| color: #4FBE70 !important; | |||||
| } | |||||
| </style> | </style> |
| {{basic.qq ? basic.qq : '未填写'}} | {{basic.qq ? basic.qq : '未填写'}} | ||||
| </a-descriptions-item> | </a-descriptions-item> | ||||
| <a-descriptions-item> | <a-descriptions-item> | ||||
| <a-button type="link" class="main-color"> | |||||
| <RedoOutlined style="color: #4FBE70" />刷新简历 | |||||
| <a-button type="link" class="main-color" @click="refreshResume"> | |||||
| <RedoOutlined style="color: #4FBE70" :spin="refreshing" rotate="90"/>刷新简历 | |||||
| </a-button> | </a-button> | ||||
| </a-descriptions-item> | </a-descriptions-item> | ||||
| <a-descriptions-item label="简历是否在家政可见"> | <a-descriptions-item label="简历是否在家政可见"> | ||||
| <a-col span="18"> | <a-col span="18"> | ||||
| <a-tabs v-model:activeKey="activeKey" @change="activeKeyChange"> | <a-tabs v-model:activeKey="activeKey" @change="activeKeyChange"> | ||||
| <a-tab-pane :key="1" tab="面试记录"> | <a-tab-pane :key="1" tab="面试记录"> | ||||
| <invite-interview></invite-interview> | |||||
| <invite-interview v-if="activeKey == 1"></invite-interview> | |||||
| </a-tab-pane> | </a-tab-pane> | ||||
| <a-tab-pane :key="2" tab="投递记录" force-render> | <a-tab-pane :key="2" tab="投递记录" force-render> | ||||
| <invite-apply></invite-apply> | |||||
| <invite-apply v-if="activeKey == 2"></invite-apply> | |||||
| </a-tab-pane> | </a-tab-pane> | ||||
| <a-tab-pane :key="3" tab="谁看过我"> | <a-tab-pane :key="3" tab="谁看过我"> | ||||
| <invite-seeme></invite-seeme> | |||||
| <invite-seeme v-if="activeKey == 3"></invite-seeme> | |||||
| </a-tab-pane> | </a-tab-pane> | ||||
| <a-tab-pane :key="4" tab="收藏的职位"> | <a-tab-pane :key="4" tab="收藏的职位"> | ||||
| <invite-collect></invite-collect> | |||||
| <invite-collect v-if="activeKey == 4"></invite-collect> | |||||
| </a-tab-pane> | </a-tab-pane> | ||||
| </a-tabs> | </a-tabs> | ||||
| </a-col> | </a-col> | ||||
| import InviteApply from '@/components/jobseeker/invite/apply/index.vue' | import InviteApply from '@/components/jobseeker/invite/apply/index.vue' | ||||
| import InviteSeeme from '@/components/jobseeker/invite/seeme/index.vue' | import InviteSeeme from '@/components/jobseeker/invite/seeme/index.vue' | ||||
| import InviteCollect from '@/components/jobseeker/invite/collect/index.vue' | import InviteCollect from '@/components/jobseeker/invite/collect/index.vue' | ||||
| import { GetJobseekerDetail, GetCompanyRecommentResume, GetViewHistoryList, GetPersonInterviewList } from '@/apis/models'; | |||||
| import { GetJobseekerDetail, GetCompanyRecommentResume, GetViewHistoryList, GetPersonInterviewList, PostJobapplicantUpdate } from '@/apis/models'; | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
| import { EditOutlined, FileSearchOutlined, RedoOutlined } from '@ant-design/icons-vue'; | import { EditOutlined, FileSearchOutlined, RedoOutlined } from '@ant-design/icons-vue'; | ||||
| import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
| let { commomParams, ExclamationCircleOutlined, Modal, onMenu } = useCommon(); | let { commomParams, ExclamationCircleOutlined, Modal, onMenu } = useCommon(); | ||||
| let jobList = ref<object[]>([]) | |||||
| let jobList = ref<Object[]>([]) | |||||
| let basic = ref<Object>({}) | let basic = ref<Object>({}) | ||||
| let seeLength = ref<Number>(0) | let seeLength = ref<Number>(0) | ||||
| let activeKey = ref<Number>(1) | |||||
| let refreshing = ref<Boolean>(false) | |||||
| let createForm = ref<Object>({ | |||||
| hide_resume: 0, | |||||
| house_keeping_status: 0, | |||||
| remind_interview: 2 | |||||
| }) | |||||
| const toResume = () => { | const toResume = () => { | ||||
| debugger | |||||
| onMenu('/jobseeker/resume') | onMenu('/jobseeker/resume') | ||||
| } | } | ||||
| const refreshResume = () => { | |||||
| refreshing.value = true; | |||||
| successToast('简历已刷新') | |||||
| refreshing.value = false | |||||
| } | |||||
| onMounted(() => { | onMounted(() => { | ||||
| GetJobseekerDetail({ customer_id: sessionStorage.getItem('id') }).then(res => { | GetJobseekerDetail({ customer_id: sessionStorage.getItem('id') }).then(res => { | ||||
| basic.value = res.data | basic.value = res.data |
| export let dataForm = { | export let dataForm = { | ||||
| username: "18022147412", | |||||
| password: "123456", | |||||
| username: "", | |||||
| password: "", | |||||
| capt_id: "", | capt_id: "", | ||||
| captcha: "" | captcha: "" | ||||
| } | } | ||||
| capt_id: "", | capt_id: "", | ||||
| captcha: "" | captcha: "" | ||||
| } | } | ||||
| smsDataForm = { | |||||
| mobile: "", | |||||
| captcha: "", | |||||
| capt_id: "" | |||||
| }; | |||||
| smsLoginDataForm = { | |||||
| mobile: "", | |||||
| sms_code: "", | |||||
| } | |||||
| return { dataForm, otherDataForm, personalDataForm, companyDataForm } | |||||
| return { dataForm, otherDataForm, personalDataForm, companyDataForm, smsDataForm, smsLoginDataForm} | |||||
| } | } |
| <script lang="ts" setup> | <script lang="ts" setup> | ||||
| import { ref, onMounted, computed, onBeforeUnmount } from 'vue'; | import { ref, onMounted, computed, onBeforeUnmount } from 'vue'; | ||||
| import { GetCaptcha, PostCompanyLogin, PostSmsSend, PostJobseekerSmsLogin } from '@/apis/models'; | |||||
| import { GetCaptcha, PostJobseekerlogin,PostCompanyLogin, PostSmsSend, PostJobseekerSmsLogin, PostCompanyLoginByMobile} from '@/apis/models'; | |||||
| import { store } from '@/store/index'; | import { store } from '@/store/index'; | ||||
| import { router } from '@/router/index'; | import { router } from '@/router/index'; | ||||
| import { dataForm, otherDataForm, personalDataForm, companyDataForm, smsDataForm, smsLoginDataForm, reset } from '@/views/login/data.ts'; | import { dataForm, otherDataForm, personalDataForm, companyDataForm, smsDataForm, smsLoginDataForm, reset } from '@/views/login/data.ts'; | ||||
| const loginTypeChange = () => { | const loginTypeChange = () => { | ||||
| getCaptcha() | |||||
| resetForm() | |||||
| } | } | ||||
| const changeLoginMethod = (val : string) => { | const changeLoginMethod = (val : string) => { | ||||
| loginMethod.value = val; | loginMethod.value = val; | ||||
| createForm.value = reset().dataForm as LoginType.LoginFormType; | |||||
| getCaptcha() | |||||
| resetForm() | |||||
| } | } | ||||
| const toModule = (val : string) => { | const toModule = (val : string) => { | ||||
| currentModule.value = val; | currentModule.value = val; | ||||
| createForm.value = reset().dataForm as LoginType.LoginFormType; | createForm.value = reset().dataForm as LoginType.LoginFormType; | ||||
| personalForm.value = reset().dataForm as RegisterType.RegisterPersonalFormType; | |||||
| companyForm.value = reset().dataForm as RegisterType.RegisterCompanyFormType; | |||||
| smsForm.value = reset().dataForm as LoginType.SmsFormType; | |||||
| smsLoginForm.value = reset().dataForm as LoginType.SmsLoginFormType; | |||||
| personalForm.value = reset().personalDataForm as RegisterType.RegisterPersonalFormType; | |||||
| companyForm.value = reset().companyDataForm as RegisterType.RegisterCompanyFormType; | |||||
| smsForm.value = reset().smsDataForm as LoginType.SmsFormType; | |||||
| smsLoginForm.value = reset().smsLoginDataForm as LoginType.SmsLoginFormType; | |||||
| getCaptcha() | getCaptcha() | ||||
| } | } | ||||
| const resetForm = () => { | const resetForm = () => { | ||||
| createForm.value = reset().dataForm as LoginType.LoginFormType; | createForm.value = reset().dataForm as LoginType.LoginFormType; | ||||
| personalForm.value = reset().dataForm as RegisterType.RegisterPersonalFormType; | |||||
| companyForm.value = reset().dataForm as RegisterType.RegisterCompanyFormType; | |||||
| smsForm.value = reset().dataForm as LoginType.SmsFormType; | |||||
| smsLoginForm.value = reset().dataForm as LoginType.SmsLoginFormType; | |||||
| personalForm.value = reset().personalDataForm as RegisterType.RegisterPersonalFormType; | |||||
| companyForm.value = reset().companyDataForm as RegisterType.RegisterCompanyFormType; | |||||
| smsForm.value = reset().smsDataForm as LoginType.SmsFormType; | |||||
| smsLoginForm.value = reset().smsLoginDataForm as LoginType.SmsLoginFormType; | |||||
| getCaptcha() | getCaptcha() | ||||
| } | } | ||||
| const getCaptcha = () => { | const getCaptcha = () => { | ||||
| capt_id.value = '' | capt_id.value = '' | ||||
| createForm.value.captcha = ''; | |||||
| GetCaptcha().then(res => { | GetCaptcha().then(res => { | ||||
| capt_id.value = res.data.capt_id; | capt_id.value = res.data.capt_id; | ||||
| codeImage.value = res.data.img; | codeImage.value = res.data.img; | ||||
| const login = () => { | const login = () => { | ||||
| if (loginSegmentedValue.value == '我要求职') { | if (loginSegmentedValue.value == '我要求职') { | ||||
| if (loginMethod == 'password') { | |||||
| if (loginMethod.value == 'password') { | |||||
| createForm.value.capt_id = capt_id.value; | createForm.value.capt_id = capt_id.value; | ||||
| PostCompanyLogin(createForm.value).then(res => { | |||||
| PostJobseekerlogin(createForm.value).then(res => { | |||||
| successToast('登录成功'); | successToast('登录成功'); | ||||
| store.commit('setShowLoginBox', { | store.commit('setShowLoginBox', { | ||||
| showLoginBox: false | showLoginBox: false | ||||
| token: res.data.jwttoken.accesstoken | token: res.data.jwttoken.accesstoken | ||||
| }) | }) | ||||
| store.commit('getRole', { | store.commit('getRole', { | ||||
| role: 'company' | |||||
| role: 'personal' | |||||
| }) | }) | ||||
| store.commit('getPageType', { | store.commit('getPageType', { | ||||
| pageType: 'company' | |||||
| pageType: 'personal' | |||||
| }) | }) | ||||
| sessionStorage.setItem('token', res.data.jwttoken.accesstoken) | sessionStorage.setItem('token', res.data.jwttoken.accesstoken) | ||||
| sessionStorage.setItem('role', 'company') | |||||
| sessionStorage.setItem('pageType', 'company') | |||||
| sessionStorage.setItem('id', res.data.company_id) | |||||
| sessionStorage.setItem('role', 'personal') | |||||
| sessionStorage.setItem('pageType', 'personal') | |||||
| sessionStorage.setItem('id', res.data.customerid) | |||||
| store.commit('permissions/SET_PERMISSION', null) | store.commit('permissions/SET_PERMISSION', null) | ||||
| store.commit('permissions/SET_MENU', []) | store.commit('permissions/SET_MENU', []) | ||||
| resetForm() | resetForm() | ||||
| router.push('/manage/home') | |||||
| router.push('/jobseeker/home') | |||||
| }).catch(err => { | }).catch(err => { | ||||
| getCaptcha() | getCaptcha() | ||||
| }) | }) | ||||
| }) | }) | ||||
| } | } | ||||
| } else { | } else { | ||||
| createForm.value.capt_id = capt_id.value; | |||||
| PostCompanyLogin(createForm.value).then(res => { | |||||
| successToast('登录成功'); | |||||
| store.commit('setShowLoginBox', { | |||||
| showLoginBox: false | |||||
| }) | |||||
| store.commit('getToken', { | |||||
| token: res.data.jwttoken.accesstoken | |||||
| }) | |||||
| store.commit('getRole', { | |||||
| role: 'company' | |||||
| if (loginMethod.value == 'password') { | |||||
| createForm.value.capt_id = capt_id.value; | |||||
| PostCompanyLogin(createForm.value).then(res => { | |||||
| successToast('登录成功'); | |||||
| store.commit('setShowLoginBox', { | |||||
| showLoginBox: false | |||||
| }) | |||||
| store.commit('getToken', { | |||||
| token: res.data.jwttoken.accesstoken | |||||
| }) | |||||
| store.commit('getRole', { | |||||
| role: 'company' | |||||
| }) | |||||
| store.commit('getPageType', { | |||||
| pageType: 'company' | |||||
| }) | |||||
| sessionStorage.setItem('token', res.data.jwttoken.accesstoken) | |||||
| sessionStorage.setItem('role', 'company') | |||||
| sessionStorage.setItem('pageType', 'company') | |||||
| sessionStorage.setItem('id', res.data.company_id) | |||||
| store.commit('permissions/SET_PERMISSION', null) | |||||
| store.commit('permissions/SET_MENU', []) | |||||
| resetForm() | |||||
| router.push('/manage/home') | |||||
| }).catch(err => { | |||||
| getCaptcha() | |||||
| }) | }) | ||||
| store.commit('getPageType', { | |||||
| pageType: 'company' | |||||
| } else { | |||||
| smsLoginForm.value.mobile = createForm.value.username ? createForm.value.username : ''; | |||||
| smsLoginForm.value.sms_code = Number(smsLoginForm.value.sms_code) | |||||
| PostCompanyLoginByMobile(smsLoginForm.value).then(res => { | |||||
| successToast('登录成功'); | |||||
| store.commit('setShowLoginBox', { | |||||
| showLoginBox: false | |||||
| }) | |||||
| store.commit('getToken', { | |||||
| token: res.data.jwttoken.accesstoken | |||||
| }) | |||||
| store.commit('getRole', { | |||||
| role: 'company' | |||||
| }) | |||||
| store.commit('getPageType', { | |||||
| pageType: 'company' | |||||
| }) | |||||
| sessionStorage.setItem('token', res.data.jwttoken.accesstoken) | |||||
| sessionStorage.setItem('role', 'company') | |||||
| sessionStorage.setItem('pageType', 'company') | |||||
| sessionStorage.setItem('id', res.data.company_id) | |||||
| store.commit('permissions/SET_PERMISSION', null) | |||||
| store.commit('permissions/SET_MENU', []) | |||||
| resetForm() | |||||
| router.push('/manage/home') | |||||
| }).catch(err => { | |||||
| getCaptcha() | |||||
| }) | }) | ||||
| sessionStorage.setItem('token', res.data.jwttoken.accesstoken) | |||||
| sessionStorage.setItem('role', 'company') | |||||
| sessionStorage.setItem('pageType', 'company') | |||||
| sessionStorage.setItem('id', res.data.company_id) | |||||
| store.commit('permissions/SET_PERMISSION', null) | |||||
| store.commit('permissions/SET_MENU', []) | |||||
| resetForm() | |||||
| router.push('/manage/home') | |||||
| }).catch(err => { | |||||
| getCaptcha() | |||||
| }) | |||||
| } | |||||
| } | } | ||||
| } | } |
| <user-expense v-if="curKey == 1"></user-expense> | <user-expense v-if="curKey == 1"></user-expense> | ||||
| <user-password v-if="curKey == 2"></user-password> | <user-password v-if="curKey == 2"></user-password> | ||||
| <user-email v-if="curKey == 3"></user-email> | <user-email v-if="curKey == 3"></user-email> | ||||
| <user-conver v-if="curKey == 4"></user-conver> | |||||
| </div> | </div> | ||||
| </a-col> | </a-col> | ||||
| </a-row> | </a-row> | ||||
| import UserExpense from '@/components/user/expense/index.vue' | import UserExpense from '@/components/user/expense/index.vue' | ||||
| import UserPassword from '@/components/user/password/index.vue' | import UserPassword from '@/components/user/password/index.vue' | ||||
| import UserEmail from '@/components/user/email/index.vue' | import UserEmail from '@/components/user/email/index.vue' | ||||
| import UserConver from '@/components/user/conver/index.vue' | |||||
| let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}]) | let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}]) | ||||
| let menu_list = ref([{ title: '费用管理', key: 1 },{ title: '修改登录密码', key: 2},{ title: '修改邮箱', key: 3}]) | |||||
| let menu_list = ref([{ title: '费用管理', key: 1 },{ title: '修改登录密码', key: 2},{ title: '修改邮箱', key: 3},{ title: '生成招聘者代码', key: 4}]) | |||||
| let curKey = ref<Number>(1) | let curKey = ref<Number>(1) | ||||
| const changeKey = (data) => { | const changeKey = (data) => { | ||||
| curKey.value = data.key; | curKey.value = data.key; |