| <link rel="icon" type="image/svg+xml" href="/logo_1.jpg" /> | <link rel="icon" type="image/svg+xml" href="/logo_1.jpg" /> | ||||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||
| <title>菊城人才市场后台管理</title> | <title>菊城人才市场后台管理</title> | ||||
| <script type="module" crossorigin src="/assets/index-FqUzogG2.js"></script> | |||||
| <link rel="stylesheet" crossorigin href="/assets/index-16BdRqwF.css"> | |||||
| <script type="module" crossorigin src="/assets/index-hNvYYgrW.js"></script> | |||||
| <link rel="stylesheet" crossorigin href="/assets/index-y3nhvaGm.css"> | |||||
| </head> | </head> | ||||
| <body> | <body> | ||||
| <div id="app"></div> | <div id="app"></div> |
| "echarts": "^5.4.3", | "echarts": "^5.4.3", | ||||
| "he": "^1.2.0", | "he": "^1.2.0", | ||||
| "moment": "^2.30.1", | "moment": "^2.30.1", | ||||
| "vue": "^3.2.36", | |||||
| "vue": "^3.4.21", | |||||
| "vue-router": "^4.2.5", | "vue-router": "^4.2.5", | ||||
| "vuex": "^4.1.0" | "vuex": "^4.1.0" | ||||
| }, | }, |
| <template> | <template> | ||||
| <a-config-provider :locale="zhCN"> | <a-config-provider :locale="zhCN"> | ||||
| <router-view></router-view> | |||||
| <router-view></router-view> | |||||
| </a-config-provider> | </a-config-provider> | ||||
| </template> | </template> | ||||
| export const PostJobapplicantDelcontact = postModel(url.JobapplicantDelcontact); | export const PostJobapplicantDelcontact = postModel(url.JobapplicantDelcontact); | ||||
| export const PostJobapplicantUpdatecontact = postModel(url.JobapplicantUpdatecontact); | export const PostJobapplicantUpdatecontact = postModel(url.JobapplicantUpdatecontact); | ||||
| export const PostJobapplicantListcontact = getModel(url.JobapplicantListcontact); | export const PostJobapplicantListcontact = getModel(url.JobapplicantListcontact); | ||||
| export const PostJobapplicantContactdetail = getModel(url.JobapplicantContactdetail); | |||||
| export const GetJobapplicantContactdetail = getModel(url.JobapplicantContactdetail); | |||||
| // 证书技能 | // 证书技能 | ||||
| export const PostJobapplicantAddskill = postModel(url.JobapplicantAddskill); | export const PostJobapplicantAddskill = postModel(url.JobapplicantAddskill); | ||||
| export const PostJobapplicantDelskill = postModel(url.JobapplicantDelskill); | export const PostJobapplicantDelskill = postModel(url.JobapplicantDelskill); | ||||
| export const PostJobapplicantUpdateskill = postModel(url.JobapplicantUpdateskill); | export const PostJobapplicantUpdateskill = postModel(url.JobapplicantUpdateskill); | ||||
| export const PostJobapplicantListskill = getModel(url.JobapplicantListskill); | export const PostJobapplicantListskill = getModel(url.JobapplicantListskill); | ||||
| export const PostJobapplicantSkilldetail = getModel(url.JobapplicantSkilldetail); | export const PostJobapplicantSkilldetail = getModel(url.JobapplicantSkilldetail); | ||||
| // 培训经历 | |||||
| // 培训经历 | |||||
| export const PostJobapplicantAddtraining = postModel(url.JobapplicantAddtraining); | export const PostJobapplicantAddtraining = postModel(url.JobapplicantAddtraining); | ||||
| export const PostJobapplicantDeltraining = postModel(url.JobapplicantDeltraining); | export const PostJobapplicantDeltraining = postModel(url.JobapplicantDeltraining); | ||||
| export const PostJobapplicantUpdatetraining = postModel(url.JobapplicantUpdatetraining); | export const PostJobapplicantUpdatetraining = postModel(url.JobapplicantUpdatetraining); | ||||
| export const PostJobapplicantListtraining = getModel(url.JobapplicantListtraining); | export const PostJobapplicantListtraining = getModel(url.JobapplicantListtraining); | ||||
| export const PostJobapplicantTrainingdetail = getModel(url.JobapplicantTrainingdetail); | export const PostJobapplicantTrainingdetail = getModel(url.JobapplicantTrainingdetail); | ||||
| // 求职意向-基本 | |||||
| // 求职意向-基本 | |||||
| export const PostJobapplicantAdddesirebase = postModel(url.JobapplicantAdddesirebase); | export const PostJobapplicantAdddesirebase = postModel(url.JobapplicantAdddesirebase); | ||||
| export const PostJobapplicantDeldesirebase = postModel(url.JobapplicantDeldesirebase); | export const PostJobapplicantDeldesirebase = postModel(url.JobapplicantDeldesirebase); | ||||
| export const PostJobapplicantUpdatedesirebase = postModel(url.JobapplicantUpdatedesirebase); | export const PostJobapplicantUpdatedesirebase = postModel(url.JobapplicantUpdatedesirebase); | ||||
| export const PostJobapplicantListdesirebase = getModel(url.JobapplicantListdesirebase); | |||||
| // export const PostJobapplicantListdesirebase = getModel(url.JobapplicantListdesirebase); | |||||
| export const PostJobapplicantDesirebasedetail = getModel(url.JobapplicantDesirebasedetail); | export const PostJobapplicantDesirebasedetail = getModel(url.JobapplicantDesirebasedetail); | ||||
| // 求职意向-地区 | |||||
| // 求职意向-地区 | |||||
| export const PostJobapplicantAdddesirearea = postModel(url.JobapplicantAdddesirearea); | export const PostJobapplicantAdddesirearea = postModel(url.JobapplicantAdddesirearea); | ||||
| export const PostJobapplicantDeldesirearea = postModel(url.JobapplicantDeldesirearea); | export const PostJobapplicantDeldesirearea = postModel(url.JobapplicantDeldesirearea); | ||||
| export const PostJobapplicantUpdatedesirearea = postModel(url.JobapplicantUpdatedesirearea); | export const PostJobapplicantUpdatedesirearea = postModel(url.JobapplicantUpdatedesirearea); | ||||
| export const PostJobapplicantListdesirearea = getModel(url.JobapplicantListdesirearea); | export const PostJobapplicantListdesirearea = getModel(url.JobapplicantListdesirearea); | ||||
| export const PostJobapplicantDesireareadetail = getModel(url.JobapplicantDesireareadetail); | export const PostJobapplicantDesireareadetail = getModel(url.JobapplicantDesireareadetail); | ||||
| // 求职意向-职位 | |||||
| // 求职意向-职位 | |||||
| export const PostJobapplicantAdddesireindustry = postModel(url.JobapplicantAdddesireindustry); | export const PostJobapplicantAdddesireindustry = postModel(url.JobapplicantAdddesireindustry); | ||||
| export const PostJobapplicantDeldesireindustry = postModel(url.JobapplicantDeldesireindustry); | export const PostJobapplicantDeldesireindustry = postModel(url.JobapplicantDeldesireindustry); | ||||
| export const PostJobapplicantUpdatedesireindustry = postModel(url.JobapplicantUpdatedesireindustry); | export const PostJobapplicantUpdatedesireindustry = postModel(url.JobapplicantUpdatedesireindustry); | ||||
| export const PostJobapplicantExperiencedetail = getModel(url.JobapplicantExperiencedetail); | export const PostJobapplicantExperiencedetail = getModel(url.JobapplicantExperiencedetail); | ||||
| // 证书 | // 证书 | ||||
| export const PostJobapplicantAddcertificate = postModel(url.JobapplicantAddcertificate); | export const PostJobapplicantAddcertificate = postModel(url.JobapplicantAddcertificate); | ||||
| export const PostJobapplicantDelcertificate = postModel(url.JobapplicantDelcertificate); | |||||
| export const PostJobapplicantUpdatecertificate = postModel(url.JobapplicantUpdatecertificate); | export const PostJobapplicantUpdatecertificate = postModel(url.JobapplicantUpdatecertificate); | ||||
| export const PostJobapplicantListcertificate = getModel(url.JobapplicantListcertificate); | export const PostJobapplicantListcertificate = getModel(url.JobapplicantListcertificate); | ||||
| export const PostJobapplicantCertificatedetail = getModel(url.JobapplicantCertificatedetail); | export const PostJobapplicantCertificatedetail = getModel(url.JobapplicantCertificatedetail); | ||||
| export const PostJobapplicantUpdateintroduction = postModel(url.JobapplicantUpdateintroduction); // 个人介绍 | export const PostJobapplicantUpdateintroduction = postModel(url.JobapplicantUpdateintroduction); // 个人介绍 | ||||
| export const GetJobapplicantListintroduction = getModel(url.JobapplicantListintroduction); // 个人介绍 | export const GetJobapplicantListintroduction = getModel(url.JobapplicantListintroduction); // 个人介绍 | ||||
| export const GetJobapplicantIntroductiondetail = getModel(url.JobapplicantIntroductiondetail); // 个人详情 | export const GetJobapplicantIntroductiondetail = getModel(url.JobapplicantIntroductiondetail); // 个人详情 | ||||
| // 统计 | // 统计 | ||||
| export const GetStatsMajor = getModel(url.StatsMajor); | export const GetStatsMajor = getModel(url.StatsMajor); | ||||
| export const GetStatsCertificate = getModel(url.StatsCertificate); | export const GetStatsCertificate = getModel(url.StatsCertificate); | ||||
| // 反馈 | // 反馈 | ||||
| export const PostCustomerAdd = postModel(url.CustomerAdd); | export const PostCustomerAdd = postModel(url.CustomerAdd); | ||||
| export const PostCustomerDel = postModel(url.CustomerDel); | export const PostCustomerDel = postModel(url.CustomerDel); | ||||
| export const GetCustomerUpdate = getModel(url.CustomerUpdate); | |||||
| export const PostCustomerUpdate = postModel(url.CustomerUpdate); | |||||
| export const GetCustomerList = getModel(url.CustomerList); | export const GetCustomerList = getModel(url.CustomerList); | ||||
| export const GetCustomerDetail = getModel(url.CustomerDetail); | export const GetCustomerDetail = getModel(url.CustomerDetail); | ||||
| 'JobseekerList': admin + '/jobseeker/list', // 查看 | 'JobseekerList': admin + '/jobseeker/list', // 查看 | ||||
| 'JobseekerDetail': admin + '/jobseeker/detail', // 详情 | 'JobseekerDetail': admin + '/jobseeker/detail', // 详情 | ||||
| // 基本资料 | // 基本资料 | ||||
| 'JobapplicantAdd': admin + '/jobapplicant/add', // 添加 | |||||
| 'JobapplicantDel': admin + '/jobapplicant/del', // 删除 | |||||
| 'JobapplicantUpdate': admin + '/jobapplicant/update', // 修改 | |||||
| 'JobapplicantList': admin + '/jobapplicant/list', // 查看 | |||||
| 'JobapplicantDetail': admin + '/jobapplicant/detail', // 详情 | |||||
| 'JobapplicantAdd': admin + '/jobapplicant/add', // 添加 | |||||
| 'JobapplicantDel': admin + '/jobapplicant/del', // 删除 | |||||
| 'JobapplicantUpdate': admin + '/jobapplicant/update', // 修改 | |||||
| 'JobapplicantList': admin + '/jobapplicant/list', // 查看 | |||||
| 'JobapplicantDetail': admin + '/jobapplicant/detail', // 详情 | |||||
| // 个人介绍 | // 个人介绍 | ||||
| 'JobapplicantAddintroduction': '/admin/jobapplicant/addintroduction', | 'JobapplicantAddintroduction': '/admin/jobapplicant/addintroduction', | ||||
| 'JobapplicantDelintroduction': admin + '/jobapplicant/delintroduction', // 删除 | |||||
| 'JobapplicantUpdateintroduction': admin + '/jobapplicant/updateintroduction', // 修改 | |||||
| 'JobapplicantDelintroduction': admin + '/jobapplicant/delintroduction', // 删除 | |||||
| 'JobapplicantUpdateintroduction': admin + '/jobapplicant/updateintroduction', // 修改 | |||||
| 'JobapplicantListintroduction': '/admin/jobapplicant/listintroduction', | 'JobapplicantListintroduction': '/admin/jobapplicant/listintroduction', | ||||
| 'JobapplicantIntroductiondetail': '/admin/jobapplicant/introductiondetail', | 'JobapplicantIntroductiondetail': '/admin/jobapplicant/introductiondetail', | ||||
| // 联系信息 | // 联系信息 | ||||
| 'JobapplicantAddcontact': admin + '/jobapplicant/addcontact', // 添加 | |||||
| 'JobapplicantDelcontact': admin + '/jobapplicant/delcontact', // 删除 | |||||
| 'JobapplicantUpdatecontact': admin + '/jobapplicant/updatecontact', // 修改 | |||||
| 'JobapplicantListcontact': admin + '/jobapplicant/listcontact', // 查看 | |||||
| 'JobapplicantContactdetail': admin + '/jobapplicant/contactdetail', // 详情 | |||||
| 'JobapplicantAddcontact': admin + '/jobapplicant/addcontact', // 添加 | |||||
| 'JobapplicantDelcontact': admin + '/jobapplicant/delcontact', // 删除 | |||||
| 'JobapplicantUpdatecontact': admin + '/jobapplicant/updatecontact', // 修改 | |||||
| 'JobapplicantListcontact': admin + '/jobapplicant/listcontact', // 查看 | |||||
| 'JobapplicantContactdetail': admin + '/jobapplicant/contactdetail', // 详情 | |||||
| // 专业技能 | // 专业技能 | ||||
| 'JobapplicantAddskill': admin + '/jobapplicant/addskill', // 添加 | |||||
| 'JobapplicantDelskill': admin + '/jobapplicant/delskill', // 删除 | |||||
| 'JobapplicantUpdateskill': admin + '/jobapplicant/updateskill', // 修改 | |||||
| 'JobapplicantListskill': admin + '/jobapplicant/listskill', // 查看 | |||||
| 'JobapplicantSkilldetail': admin + '/jobapplicant/skilldetail', // 详情 | |||||
| 'JobapplicantAddskill': admin + '/jobapplicant/addskill', // 添加 | |||||
| 'JobapplicantDelskill': admin + '/jobapplicant/delskill', // 删除 | |||||
| 'JobapplicantUpdateskill': admin + '/jobapplicant/updateskill', // 修改 | |||||
| 'JobapplicantListskill': admin + '/jobapplicant/listskill', // 查看 | |||||
| 'JobapplicantSkilldetail': admin + '/jobapplicant/skilldetail', // 详情 | |||||
| // 培训经历 | // 培训经历 | ||||
| 'JobapplicantAddtraining': admin + '/jobapplicant/addtraining', // 添加 | |||||
| 'JobapplicantDeltraining': admin + '/jobapplicant/deltraining', // 删除 | |||||
| 'JobapplicantUpdatetraining': admin + '/jobapplicant/updatetraining', // 修改 | |||||
| 'JobapplicantListtraining': admin + '/jobapplicant/listtraining', // 查看 | |||||
| 'JobapplicantTrainingdetail': admin + '/jobapplicant/trainingdetail', // 详情 | |||||
| 'JobapplicantAddtraining': admin + '/jobapplicant/addtraining', // 添加 | |||||
| 'JobapplicantDeltraining': admin + '/jobapplicant/deltraining', // 删除 | |||||
| 'JobapplicantUpdatetraining': admin + '/jobapplicant/updatetraining', // 修改 | |||||
| 'JobapplicantListtraining': admin + '/jobapplicant/listtraining', // 查看 | |||||
| 'JobapplicantTrainingdetail': admin + '/jobapplicant/trainingdetail', // 详情 | |||||
| // 求职意向-基本 | // 求职意向-基本 | ||||
| 'JobapplicantAdddesirebase': '/admin/jobapplicant/adddesirebase', // 添加 | 'JobapplicantAdddesirebase': '/admin/jobapplicant/adddesirebase', // 添加 | ||||
| 'JobapplicantDeldesirebase': '/admin/jobapplicant/deldesirebase', // 删除 | 'JobapplicantDeldesirebase': '/admin/jobapplicant/deldesirebase', // 删除 | ||||
| 'JobapplicantUpdatedesirebase': '/admin/jobapplicant/updatedesirebase', // 修改 | 'JobapplicantUpdatedesirebase': '/admin/jobapplicant/updatedesirebase', // 修改 | ||||
| 'JobapplicantDesirebasedetail': '/admin/jobapplicant/desirebasedetail', // 详情 | 'JobapplicantDesirebasedetail': '/admin/jobapplicant/desirebasedetail', // 详情 | ||||
| // 求职意向-地区 | // 求职意向-地区 | ||||
| 'JobapplicantAdddesirearea': admin + '/jobapplicant/adddesirearea', // 添加 | |||||
| 'JobapplicantDeldesirearea': admin + '/jobapplicant/deldesirearea', // 删除 | |||||
| 'JobapplicantUpdatedesirearea': admin + '/jobapplicant/updatedesirearea', // 修改 | |||||
| 'JobapplicantListdesirearea': admin + '/jobapplicant/listdesirearea', // 查看 | |||||
| 'JobapplicantDesireareadetail': admin + '/jobapplicant/desireareadetail', // 详情 | |||||
| 'JobapplicantAdddesirearea': admin + '/jobapplicant/adddesirearea', // 添加 | |||||
| 'JobapplicantDeldesirearea': admin + '/jobapplicant/deldesirearea', // 删除 | |||||
| 'JobapplicantUpdatedesirearea': admin + '/jobapplicant/updatedesirearea', // 修改 | |||||
| 'JobapplicantListdesirearea': admin + '/jobapplicant/listdesirearea', // 查看 | |||||
| 'JobapplicantDesireareadetail': admin + '/jobapplicant/desireareadetail', // 详情 | |||||
| // 求职意向-职位 | // 求职意向-职位 | ||||
| 'JobapplicantAdddesireindustry': admin + '/jobapplicant/adddesireindustry', // 添加 | |||||
| 'JobapplicantDeldesireindustry': admin + '/jobapplicant/deldesireindustry', // 删除 | |||||
| 'JobapplicantUpdatedesireindustry': admin + '/jobapplicant/updatedesireindustry', // 修改 | |||||
| 'JobapplicantListdesireindustry': admin + '/jobapplicant/listdesireindustry', // 查看 | |||||
| 'JobapplicantDesireindustrydetail': admin + '/jobapplicant/desireindustrydetail', // 详情 | |||||
| 'JobapplicantAdddesireindustry': admin + '/jobapplicant/adddesireposition', // 添加 | |||||
| 'JobapplicantDeldesireindustry': admin + '/jobapplicant/deldesireposition', // 删除 | |||||
| 'JobapplicantUpdatedesireindustry': admin + '/jobapplicant/updatedesireposition', // 修改 | |||||
| 'JobapplicantListdesireindustry': admin + '/jobapplicant/listdesireposition', // 查看 | |||||
| 'JobapplicantDesireindustrydetail': admin + '/jobapplicant/desirepositiondetail', // 详情 | |||||
| // 证书 | // 证书 | ||||
| 'JobapplicantAddcertificate': admin + '/jobapplicant/addcertificate', // 添加 | |||||
| 'JobapplicantDelcertificate': admin + '/jobapplicant/delcertificate', // 删除 | |||||
| 'JobapplicantUpdatecertificate': admin + '/jobapplicant/updatecertificate', // 修改 | |||||
| 'JobapplicantListcertificate': admin + '/jobapplicant/listcertificate', // 查看 | |||||
| 'JobapplicantCertificatedetail': admin + '/jobapplicant/certificatedetail', // 详情 | |||||
| 'JobapplicantAddcertificate': admin + '/jobapplicant/addcertificate', // 添加 | |||||
| 'JobapplicantDelcertificate': admin + '/jobapplicant/delcertificate', // 删除 | |||||
| 'JobapplicantUpdatecertificate': admin + '/jobapplicant/updatecertificate', // 修改 | |||||
| 'JobapplicantListcertificate': admin + '/jobapplicant/listcertificate', // 查看 | |||||
| 'JobapplicantCertificatedetail': admin + '/jobapplicant/certificatedetail', // 详情 | |||||
| // 工作经历 | // 工作经历 | ||||
| 'JobapplicantAddexperience': admin + '/jobapplicant/addexperience', // 添加 | |||||
| 'JobapplicantDelexperience': admin + '/jobapplicant/delexperience', // 删除 | |||||
| 'JobapplicantUpdateexperience': admin + '/jobapplicant/updateexperience', // 修改 | |||||
| 'JobapplicantListexperience': admin + '/jobapplicant/listexperience', // 查看 | |||||
| 'JobapplicantExperiencedetail': admin + '/jobapplicant/experiencedetail', // 详情 | |||||
| 'JobapplicantAddexperience': admin + '/jobapplicant/addexperience', // 添加 | |||||
| 'JobapplicantDelexperience': admin + '/jobapplicant/delexperience', // 删除 | |||||
| 'JobapplicantUpdateexperience': admin + '/jobapplicant/updateexperience', // 修改 | |||||
| 'JobapplicantListexperience': admin + '/jobapplicant/listexperience', // 查看 | |||||
| 'JobapplicantExperiencedetail': admin + '/jobapplicant/experiencedetail', // 详情 | |||||
| // 统计 | // 统计 | ||||
| StatsMajor: admin + '/stats/major', // 求职者专业统计 | StatsMajor: admin + '/stats/major', // 求职者专业统计 |
| <template> | <template> | ||||
| <a-c-form :createForm="createForm"> | |||||
| <a-form :model="createForm" layout="vertical"> | |||||
| <a-form-item required label="简历是否可见" name="简历是否可见"> | <a-form-item required label="简历是否可见" name="简历是否可见"> | ||||
| <a-radio-group v-model:value="createForm.hide_resume" button-style="solid"> | <a-radio-group v-model:value="createForm.hide_resume" button-style="solid"> | ||||
| <a-radio-button value="1">是</a-radio-button> | <a-radio-button value="1">是</a-radio-button> | ||||
| </a-radio-group> | </a-radio-group> | ||||
| </a-form-item> | </a-form-item> | ||||
| <a-form-item required label="出生日期" name="dob"> | <a-form-item required label="出生日期" name="dob"> | ||||
| <a-date-picker v-model:value="createForm.dob" :locale="locale" :format="dateFormat" @panelChange="dobChange"/> | |||||
| <a-date-picker v-model:value="createForm.dob" :locale="locale" :format="dateFormat" | |||||
| @panelChange="dobChange" /> | |||||
| </a-form-item> | </a-form-item> | ||||
| <a-form-item required label="工作经验(年)" name="work_experience"> | <a-form-item required label="工作经验(年)" name="work_experience"> | ||||
| <a-input v-model:value="createForm.work_experience" placeholder="请输入工作经验" /> | <a-input v-model:value="createForm.work_experience" placeholder="请输入工作经验" /> | ||||
| <a-c-select :dict="2006" :placeholder="educationPlaceholder" @saveSelect="saveEducation"></a-c-select> | <a-c-select :dict="2006" :placeholder="educationPlaceholder" @saveSelect="saveEducation"></a-c-select> | ||||
| </a-form-item> | </a-form-item> | ||||
| <a-form-item label="户口所在地"> | <a-form-item label="户口所在地"> | ||||
| <a-c-cascader :dict="2009" @saveCascader="regLevelSave" placeholder="请选择户口所在地" ></a-c-cascader> | |||||
| <a-c-cascader :dict="2009" @saveCascader="regLevelSave" placeholder="请选择户口所在地"></a-c-cascader> | |||||
| </a-form-item> | </a-form-item> | ||||
| <a-form-item label="现居地"> | <a-form-item label="现居地"> | ||||
| <a-c-cascader :dict="2009" @saveCascader="nowLevelSave" placeholder="请选择现居地" ></a-c-cascader> | |||||
| <a-c-cascader :dict="2009" @saveCascader="nowLevelSave" placeholder="请选择现居地"></a-c-cascader> | |||||
| </a-form-item> | </a-form-item> | ||||
| <a-form-item label="职称"> | <a-form-item label="职称"> | ||||
| <a-c-select :dict="2014" :placeholder="titlePlaceholder" @saveSelect="saveTitle"></a-c-select> | <a-c-select :dict="2014" :placeholder="titlePlaceholder" @saveSelect="saveTitle"></a-c-select> | ||||
| @saveSelect="savePoliticalStatus"></a-c-select> | @saveSelect="savePoliticalStatus"></a-c-select> | ||||
| </a-form-item> | </a-form-item> | ||||
| <a-form-item label="籍贯"> | <a-form-item label="籍贯"> | ||||
| <a-c-cascader :dict="2009" @saveCascader="nativePlaceSave" placeholder="请选择籍贯"></a-c-cascader> | |||||
| <a-c-cascader :dict="2009" @saveCascader="nativePlaceSave" placeholder="请选择籍贯"></a-c-cascader> | |||||
| </a-form-item> | </a-form-item> | ||||
| <a-form-item :wrapper-col="{ span: 14, offset: 4 }"> | <a-form-item :wrapper-col="{ span: 14, offset: 4 }"> | ||||
| <a-button type="primary" @click="onSubmit">保存</a-button> | <a-button type="primary" @click="onSubmit">保存</a-button> | ||||
| <a-button style="margin-left: 10px">重置</a-button> | <a-button style="margin-left: 10px">重置</a-button> | ||||
| </a-form-item> | </a-form-item> | ||||
| </a-c-form> | |||||
| </a-form> | |||||
| </template> | </template> | ||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||
| native_place: 0 | native_place: 0 | ||||
| } | } | ||||
| } | } | ||||
| // 出生日期 | // 出生日期 | ||||
| const dateFormat = ref('YYYY-MM-DD'); | const dateFormat = ref('YYYY-MM-DD'); | ||||
| const dobChange = (val) => { | const dobChange = (val) => { | ||||
| moment(val, 'YYYY-MM-DD'); | moment(val, 'YYYY-MM-DD'); | ||||
| console.log(val) | console.log(val) | ||||
| } | } | ||||
| // 学历 | // 学历 | ||||
| const educationPlaceholder = ref('请选择学历'); | const educationPlaceholder = ref('请选择学历'); | ||||
| const saveEducation = (data) => { | const saveEducation = (data) => { |
| <template> | |||||
| <a-cascader v-model:value="cascaderParentId" @change="parentChange" :options="listOptions" | |||||
| :fieldNames="listFieldNames" :changeOnSelect="true" :placeholder="placeholder" style="width: 100%" | |||||
| change-on-select :size="size" /> | |||||
| </template> | |||||
| <script lang="ts" setup> | |||||
| import { ref, onMounted, defineProps, watch, defineEmits } from 'vue'; | |||||
| import { GetDictTree } from '@/apis/models'; | |||||
| const props = defineProps({ | |||||
| dict: { | |||||
| type: String, | |||||
| default: '' | |||||
| }, | |||||
| placeholder: { | |||||
| type: String, | |||||
| default: '' | |||||
| }, | |||||
| cascader_content: { | |||||
| type: Array, | |||||
| default: [] | |||||
| }, | |||||
| size: { | |||||
| type: String, | |||||
| default: 'mini' | |||||
| }, | |||||
| }); | |||||
| let listOptions = ref([]); | |||||
| let cascaderParentId = ref<Number>([]); | |||||
| const listFieldNames = ref({ label: 'name', value: 'id', children: 'children' }); | |||||
| let placeholder = ref('请选择'); | |||||
| let size = ref('large'); | |||||
| watch(() => [props.dict, props.cascader_content, props.placeholder, props.size], | |||||
| (newVal, oldVal) => { | |||||
| GetDictTree({ | |||||
| code: newVal[0] | |||||
| }).then(res => { | |||||
| listOptions.value = res.data.dicts | |||||
| }) | |||||
| cascaderParentId.value = newVal[1] | |||||
| placeholder.value = newVal[2] | |||||
| size.value = newVal[3] | |||||
| },{immediate: true}) | |||||
| onMounted(() => { | |||||
| GetDictTree({ | |||||
| code: props.dict | |||||
| }).then(res => { | |||||
| listOptions.value = res.data.dicts | |||||
| }) | |||||
| }) | |||||
| const emit = defineEmits(); | |||||
| const parentChange = (val, selectedOptions) => { | |||||
| console.log(val) | |||||
| emit('saveCascader', { arr1: val, arr2: selectedOptions }); | |||||
| } | |||||
| </script> | |||||
| <style> | |||||
| </style> |
| import UploadOne from '@/components/upload/one.vue'; | import UploadOne from '@/components/upload/one.vue'; | ||||
| import UploadFile from '@/components/upload/file.vue'; | import UploadFile from '@/components/upload/file.vue'; | ||||
| import ImageContainer from '@/components/form/image-container.vue'; | import ImageContainer from '@/components/form/image-container.vue'; | ||||
| import AJilian from '@/components/form/jilian.vue'; | |||||
| import { Model } from 'node_modules/echarts/index'; | import { Model } from 'node_modules/echarts/index'; | ||||
| // router.beforeEach(async (to, from, next) => { | // router.beforeEach(async (to, from, next) => { | ||||
| // document.title = `${to.meta.title} - 菊城人才市场后台管理`; | // document.title = `${to.meta.title} - 菊城人才市场后台管理`; | ||||
| app.component('QuillEditor', QuillEditor) | app.component('QuillEditor', QuillEditor) | ||||
| app.component('upload-one', UploadOne) | app.component('upload-one', UploadOne) | ||||
| app.component('upload-file', UploadFile) | app.component('upload-file', UploadFile) | ||||
| app.component('a-jilian', AJilian); | |||||
| app.use(router); | app.use(router); | ||||
| app.use(store); | app.use(store); | ||||
| app.use(Antd); | app.use(Antd); |
| icon: HomeOutlined | icon: HomeOutlined | ||||
| }, | }, | ||||
| }, | }, | ||||
| { | |||||
| path: '/customer/list', | |||||
| name: 'customerList', | |||||
| component: routerList.CustomerList, | |||||
| meta: { | |||||
| title: '账号列表', | |||||
| icon: HomeOutlined | |||||
| }, | |||||
| } | |||||
| ] | ] | ||||
| }; | }; | ||||
| background-color: #f9f9f9; | background-color: #f9f9f9; | ||||
| } | } | ||||
| } | } | ||||
| .resume-form { | |||||
| background-color: #f8f8f8; | |||||
| padding: 16px; | |||||
| margin: 16px 0; | |||||
| border-radius: 8px; | |||||
| } |
| // 学历要求 | // 学历要求 | ||||
| const saveSchoolDegree = (data) => { | const saveSchoolDegree = (data) => { | ||||
| createForm.value.school_degree = data.val.keyl; | |||||
| createForm.value.school_degree = data.val.key; | |||||
| } | } | ||||
| // 职称要求 | // 职称要求 |
| declare namespace CustomerListType { | declare namespace CustomerListType { | ||||
| type addrFormType = { | |||||
| type addFormType = { | |||||
| role?: Number, | role?: Number, | ||||
| mobile?: String, | mobile?: String, | ||||
| username?: String, | username?: String, |
| @cancel="cancelModal" width="50%"> | @cancel="cancelModal" width="50%"> | ||||
| <a-form :model="createForm" :label-col="{span: 4}" labelAlign="right"> | <a-form :model="createForm" :label-col="{span: 4}" labelAlign="right"> | ||||
| <a-row gutter="20"> | <a-row gutter="20"> | ||||
| <a-col span="24"> | |||||
| <a-form-item required label="角色" name="role"> | |||||
| <a-select v-model:value="createForm.role" placeholder="请选择角色"> | |||||
| <a-select-option v-for="(item,index) in role_list" :key="id" | |||||
| :value="item.id">{{item.name}}</a-select-option> | |||||
| </a-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | <a-col span="24"> | ||||
| <a-form-item required label="手机号" name="mobile"> | <a-form-item required label="手机号" name="mobile"> | ||||
| <a-input v-model:value="createForm.mobile" placeholder="请输入手机号" /> | <a-input v-model:value="createForm.mobile" placeholder="请输入手机号" /> | ||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | ||||
| import { PostCustomerAdd, GetCustomerUpdate,GetCustomerDetail, GetRoleList } from '@/apis/models'; | |||||
| import { PostCustomerAdd, PostCustomerUpdate,GetCustomerDetail } from '@/apis/models'; | |||||
| import { dataForm, otherDataForm, reset } from '@/views/customer/list/add/data.ts'; | import { dataForm, otherDataForm, reset } from '@/views/customer/list/add/data.ts'; | ||||
| import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
| let { store, openAddModel, hideModal, message, richOption } = useCommon(); | let { store, openAddModel, hideModal, message, richOption } = useCommon(); | ||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| let props = defineProps(['edit_record']); | let props = defineProps(['edit_record']); | ||||
| let title = ref<String>('新增账号'); | |||||
| let role_list = ref([]) | |||||
| onMounted(() => { | |||||
| getRole() | |||||
| }) | |||||
| const getRole = () => { | |||||
| GetRoleList({page: 1, pagesize: 100}).then(res => { | |||||
| role_list.value = res.data.roles | |||||
| }) | |||||
| } | |||||
| let title = ref<String>('新增求职者账号'); | |||||
| let createForm = ref<CustomerListType.addFormType>(dataForm) | let createForm = ref<CustomerListType.addFormType>(dataForm) | ||||
| }).catch(err => { | }).catch(err => { | ||||
| }) | }) | ||||
| } else { | } else { | ||||
| GetCustomerUpdate(createForm.value).then(res => { | |||||
| PostCustomerUpdate(createForm.value).then(res => { | |||||
| message.success('修改账号成功'); | message.success('修改账号成功'); | ||||
| hideModal(); | hideModal(); | ||||
| resetForm(); | resetForm(); | ||||
| }) | }) | ||||
| watch(() => props.edit_record, (newVal) => { | watch(() => props.edit_record, (newVal) => { | ||||
| GetRoleList() | |||||
| if (newVal) { | if (newVal) { | ||||
| title.value = '编辑账号'; | |||||
| title.value = '编辑求职者账号'; | |||||
| createForm.value = { | createForm.value = { | ||||
| id: newVal.id, | id: newVal.id, | ||||
| name: newVal.name, | |||||
| address: newVal.address, | |||||
| telephone:newVal.telephone, | |||||
| fax: newVal.fax, | |||||
| postal: newVal.postal, | |||||
| role: 1, | |||||
| mobile: newVal.mobile, | |||||
| username: newVal.username, | |||||
| password: newVal.password, | |||||
| email: newVal.email, | email: newVal.email, | ||||
| content: newVal.content, | |||||
| } | } | ||||
| } else { | } else { | ||||
| title.value = '新增账号'; | |||||
| title.value = '新增求职者账号'; | |||||
| } | } | ||||
| }) | }) | ||||
| </script> | </script> |
| export let dataForm = { | export let dataForm = { | ||||
| role: null, | |||||
| role: 1, | |||||
| mobile: '', | mobile: '', | ||||
| username: '', | username: '', | ||||
| password: '', | password: '', | ||||
| export const reset = () => { | export const reset = () => { | ||||
| dataForm = { | dataForm = { | ||||
| role: null, | |||||
| role: 1, | |||||
| mobile: '', | mobile: '', | ||||
| username: '', | username: '', | ||||
| password: '', | password: '', |
| export const cols = <ColType.type[]>[ | export const cols = <ColType.type[]>[ | ||||
| { | { | ||||
| title: '用户', | title: '用户', | ||||
| dataIndex: 'name' | |||||
| dataIndex: 'username' | |||||
| }, | }, | ||||
| { | { | ||||
| title: '邮箱', | title: '邮箱', | ||||
| dataIndex: 'email' | dataIndex: 'email' | ||||
| }, | }, | ||||
| { | { | ||||
| title: '消息内容', | |||||
| dataIndex: 'content' | |||||
| title: '联系方式', | |||||
| dataIndex: 'mobile' | |||||
| }, | |||||
| { | |||||
| title: '登录次数', | |||||
| dataIndex: 'login_count' | |||||
| }, | |||||
| { | |||||
| title: '账号状态', | |||||
| dataIndex: 'status', | |||||
| slots: { customRender: 'status' }, | |||||
| }, | |||||
| { | |||||
| title: '注册日期', | |||||
| dataIndex: 'created_at' | |||||
| }, | }, | ||||
| { | { | ||||
| title: '操作', | title: '操作', |
| <template> | <template> | ||||
| <list-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></list-search> | <list-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></list-search> | ||||
| <a-c-operation @refresh="clearData"> | <a-c-operation @refresh="clearData"> | ||||
| </a-c-operation> | </a-c-operation> | ||||
| <a-c-table :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | <a-c-table :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | ||||
| @page="getPage" :loading="loading"> | @page="getPage" :loading="loading"> | ||||
| <template #status="{ record }"> | |||||
| <div v-if="record.status == 1"> | |||||
| <a-popconfirm title="是否禁用该求职者账号?" @confirm="handleUser(record, 2)"> | |||||
| <a-space> | |||||
| <a-tag color="green" >使用中</a-tag> | |||||
| <a-button type="primary" size="small" danger>禁用该账号</a-button> | |||||
| </a-space> | |||||
| </a-popconfirm> | |||||
| </div> | |||||
| <div v-if="record.status == 2"> | |||||
| <a-popconfirm title="是否启用该求职者账号?" @confirm="handleUser(record, 1)"> | |||||
| <a-space> <a-tag color="red">已禁用</a-tag> | |||||
| <a-button type="primary" size="small">启用该账号</a-button> | |||||
| </a-space> | |||||
| </a-popconfirm> | |||||
| </div> | |||||
| </template> | |||||
| <template #default="{ record }"> | <template #default="{ record }"> | ||||
| <a-row :gutter="10"> | <a-row :gutter="10"> | ||||
| <a-col><a-button type="primary" size="small" primary @click="edit(record)">编辑</a-button></a-col> | <a-col><a-button type="primary" size="small" primary @click="edit(record)">编辑</a-button></a-col> | ||||
| <a-popconfirm title="是否删除该反馈消息?" @confirm="del(record.id)"> | |||||
| <a-popconfirm title="是否删除该求职者账号?" @confirm="del(record.id)"> | |||||
| <a-col><a-button type="primary" size="small" danger>删除</a-button></a-col> | <a-col><a-button type="primary" size="small" danger>删除</a-button></a-col> | ||||
| </a-popconfirm> | </a-popconfirm> | ||||
| </a-row> | </a-row> | ||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||
| import { ref, onMounted, watch, computed } from 'vue'; | |||||
| import { ref, onMounted, watch, computed, createVNode } from 'vue'; | |||||
| import ListSearch from '@/views/customer/list/search/index.vue'; | import ListSearch from '@/views/customer/list/search/index.vue'; | ||||
| import ListAdd from '@/views/customer/list/add/add.vue'; | import ListAdd from '@/views/customer/list/add/add.vue'; | ||||
| import { GetCustomerList, GetCustomerDetail, PostCustomerDel } from '@/apis/models'; | |||||
| import { GetCustomerList, GetCustomerDetail, PostCustomerUpdate, PostCustomerDel } from '@/apis/models'; | |||||
| import { UserOutlined, DownOutlined } from '@ant-design/icons-vue'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
| import { cols } from '@/views/customer/list/columns'; | import { cols } from '@/views/customer/list/columns'; | ||||
| let { store, commomParams, showModal, showOtherModal1, message } = useCommon(); | |||||
| let { store, commomParams, showModal, showOtherModal1, message, ExclamationCircleOutlined, Modal } = useCommon(); | |||||
| let loading = ref<Boolean>(true); | let loading = ref<Boolean>(true); | ||||
| onMounted(() => { | onMounted(() => { | ||||
| getData(commomParams.value.search); | getData(commomParams.value.search); | ||||
| page: 1, | page: 1, | ||||
| pagesize: 10, | pagesize: 10, | ||||
| sort: 'id', | sort: 'id', | ||||
| sortby: 'asc', | |||||
| sortby: 'desc', | |||||
| keyword: '' | keyword: '' | ||||
| } | } | ||||
| } | } | ||||
| loading.value = true; | loading.value = true; | ||||
| let res = await GetCustomerList(commomParams.value.search); | let res = await GetCustomerList(commomParams.value.search); | ||||
| loading.value = false; | loading.value = false; | ||||
| commomParams.value.table.data = res.data.feedbacks; | |||||
| commomParams.value.table.data = res.data.customers; | |||||
| commomParams.value.table.columns = cols; | commomParams.value.table.columns = cols; | ||||
| commomParams.value.page = { | commomParams.value.page = { | ||||
| current: commomParams.value.search.page, | current: commomParams.value.search.page, | ||||
| edit_record.value = null; | edit_record.value = null; | ||||
| } | } | ||||
| // 禁用 | |||||
| const handleUser = (record : object, status : Number) => { | |||||
| PostCustomerUpdate({ id: record.id, status: status }).then(res => { | |||||
| getData(); | |||||
| Modal.destroyAll(); | |||||
| }) | |||||
| } | |||||
| // 删除 | // 删除 | ||||
| const del = (id : number) => { | const del = (id : number) => { | ||||
| getData(); | getData(); | ||||
| }) | }) | ||||
| } | } | ||||
| </script> | </script> | ||||
| <style lang="less" scoped> | <style lang="less" scoped> |
| <template> | <template> | ||||
| <a-drawer :width="500" title="搜索" placement="right" :open="openSearchModel" @close="onClose"> | <a-drawer :width="500" title="搜索" placement="right" :open="openSearchModel" @close="onClose"> | ||||
| <template #extra> | <template #extra> | ||||
| <a-button style="margin-right: 8px" @click="clearSearch">清空搜索</a-button> | |||||
| <a-button type="primary" @click="getData">搜索</a-button> | |||||
| <a-button style="margin-right: 8px" @click="clearSearch">清空搜索</a-button> | |||||
| <a-button type="primary" @click="getData">搜索</a-button> | |||||
| </template> | </template> | ||||
| <a-form :model="commomParams.search"> | <a-form :model="commomParams.search"> | ||||
| <a-row :gutter="[10]"> | <a-row :gutter="[10]"> | ||||
| <a-col span="24"> | <a-col span="24"> | ||||
| <a-form-item> | <a-form-item> | ||||
| <a-input addon-before="配置项名称" v-model:value="commomParams.search.keyword" | |||||
| placeholder="请输入配置项名称" /> | |||||
| <a-input addon-before="关键字" v-model:value="commomParams.search.keyword" | |||||
| placeholder="请输入关键字" @keyup.enter="getData"/> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-form-item> | |||||
| <a-select v-model:value="commomParams.search.status" placeholder="请选择账号状态" | |||||
| @change="statusChange"> | |||||
| <a-select-option :value="0">全部</a-select-option> | |||||
| <a-select-option :value="1">使用中</a-select-option> | |||||
| <a-select-option :value="2">已禁用</a-select-option> | |||||
| </a-select> | |||||
| </a-form-item> | </a-form-item> | ||||
| </a-col> | </a-col> | ||||
| </a-row> | </a-row> | ||||
| return store.state.openSearchModel; | return store.state.openSearchModel; | ||||
| }) | }) | ||||
| interface listType { | |||||
| status : Number | 0, | |||||
| } | |||||
| commomParams.value.search = commomParams.value.search as listType; | |||||
| commomParams.value.search.status = null; | |||||
| watch(() => props.search_params, (newVal) => { | |||||
| emit('searchData', commomParams.value.search) | |||||
| }) | |||||
| // watch(() => props.search_params, (newVal) => { | |||||
| // emit('searchData', commomParams.value.search) | |||||
| // }) | |||||
| const getData = () => { | const getData = () => { | ||||
| emit('searchData', commomParams.value.search); | emit('searchData', commomParams.value.search); | ||||
| page: 1, | page: 1, | ||||
| pagesize: 10, | pagesize: 10, | ||||
| sort: 'id', | sort: 'id', | ||||
| sortby: 'asc', | |||||
| sortby: 'desc', | |||||
| keyword: '' | keyword: '' | ||||
| } | } | ||||
| } | } | ||||
| clearSearch() | clearSearch() | ||||
| hideSearch() | hideSearch() | ||||
| } | } | ||||
| const statusChange = (val) => { | |||||
| getData() | |||||
| } | |||||
| </script> | </script> | ||||
| <style> | <style> |
| <template> | <template> | ||||
| <a-modal v-model:visible="show_add" title="新增求职简历" ok-text="提交" cancel-text="取消" | |||||
| @cancel="hideModal" width="100%" > | |||||
| <a-collapse v-model:activeKey="activeKey" accordion> | |||||
| <a-modal v-model:visible="openAddModel" :title="title" ok-text="提交" cancel-text="取消" @ok="sumbitForm" :footer="null" | |||||
| @cancel="cancelModal" width="80%"> | |||||
| <a-space direction="vertical" style="width: 100%;"> | |||||
| <a-segmented v-model:value="activeKey" @change="resumeModeChange" :options="['基本资料', '联系信息','个人简介', '专业技能掌握程度','培训经历', '求职意向','工作经历', '证书']" size="large" block> | |||||
| </a-segmented> | |||||
| <resume-basic v-if="openAddModel && activeKey == '基本资料'" :customer_record="customer_record"></resume-basic> | |||||
| <resume-contact v-if="openAddModel && activeKey == '联系信息'" :customer_record="customer_record"></resume-contact> | |||||
| <resume-introduction v-if="openAddModel && activeKey == '个人简介'" :customer_record="customer_record"></resume-introduction> | |||||
| <resume-skill v-if="openAddModel && activeKey == '专业技能掌握程度'" :customer_record="customer_record"></resume-skill> | |||||
| <resume-train v-if="openAddModel && activeKey == '培训经历'" :customer_record="customer_record"></resume-train> | |||||
| <resume-intention v-if="openAddModel && activeKey == '求职意向'" :customer_record="customer_record"></resume-intention> | |||||
| <resume-experience v-if="openAddModel && activeKey=='工作经历'" :customer_record=" customer_record"></resume-experience> | |||||
| <resume-credential v-if="openAddModel && activeKey == '证书'" :customer_record="customer_record"></resume-credential> | |||||
| </a-space> | |||||
| <!-- <a-collapse v-model:activeKey="activeKey" accordion> | |||||
| <a-collapse-panel key="1" header="基本资料"> | <a-collapse-panel key="1" header="基本资料"> | ||||
| <resume-basic @toNext="toNext" :customer_record="customer_record"></resume-basic> | |||||
| </a-collapse-panel> | </a-collapse-panel> | ||||
| <a-collapse-panel key="2" header="联系信息"> | <a-collapse-panel key="2" header="联系信息"> | ||||
| <resume-contact @toNext="toNext" :customer_record="customer_record"></resume-contact> | <resume-contact @toNext="toNext" :customer_record="customer_record"></resume-contact> | ||||
| <a-collapse-panel key="8" header="证书"> | <a-collapse-panel key="8" header="证书"> | ||||
| <resume-credential @toNext="toNext" :customer_record="customer_record"></resume-credential> | <resume-credential @toNext="toNext" :customer_record="customer_record"></resume-credential> | ||||
| </a-collapse-panel> | </a-collapse-panel> | ||||
| </a-collapse> | |||||
| </a-collapse> --> | |||||
| </a-modal> | </a-modal> | ||||
| </template> | </template> | ||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | |||||
| import ResumeBasic from '@/views/jobSeeker/resume/add/basic/basic.vue'; | import ResumeBasic from '@/views/jobSeeker/resume/add/basic/basic.vue'; | ||||
| import ResumeContact from '@/views/jobSeeker/resume/add/contact/contact.vue'; | import ResumeContact from '@/views/jobSeeker/resume/add/contact/contact.vue'; | ||||
| import ResumeCredential from '@/views/jobSeeker/resume/add/credential/credential.vue'; | import ResumeCredential from '@/views/jobSeeker/resume/add/credential/credential.vue'; | ||||
| import ResumeIntroduction from '@/views/jobSeeker/resume/add/introduction/introduction.vue'; | import ResumeIntroduction from '@/views/jobSeeker/resume/add/introduction/introduction.vue'; | ||||
| import ResumeSkill from '@/views/jobSeeker/resume/add/skill/skill.vue'; | import ResumeSkill from '@/views/jobSeeker/resume/add/skill/skill.vue'; | ||||
| import ResumeTrain from '@/views/jobSeeker/resume/add/train/train.vue'; | import ResumeTrain from '@/views/jobSeeker/resume/add/train/train.vue'; | ||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | |||||
| import { PostRoleAdd, updateRole } from '@/apis/models'; | |||||
| import { message } from 'ant-design-vue'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, openAddModel, hideModal, dayjs, disabledDate, richOption, message, imageprefix } = useCommon(); | |||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| let props = defineProps(['edit_record']); | let props = defineProps(['edit_record']); | ||||
| let show_add = ref<Boolean>(true) | |||||
| let activeKey = ref<String>("1") | |||||
| let title = ref<String>('编辑简历'); | |||||
| let activeKey = ref<String>("基本资料") | |||||
| let customer_record = ref<Object>(props.edit_record) | let customer_record = ref<Object>(props.edit_record) | ||||
| onMounted(() => { | |||||
| if (props.edit_record) { | |||||
| openAddModel = computed(() => { | |||||
| return store.state.openAddModel; | |||||
| }) | |||||
| watch(() => props.edit_record, async (newVal) => { | |||||
| if (newVal) { | |||||
| title.value = '编辑简历'; | |||||
| customer_record.value = props.edit_record | customer_record.value = props.edit_record | ||||
| } else { | |||||
| title.value = '编辑简历'; | |||||
| } | } | ||||
| }) | }) | ||||
| const toNext = (data) => { | |||||
| console.log(data) | |||||
| activeKey.value = data.activeKey | |||||
| } | |||||
| const hideModal = () => { | |||||
| show_add.value = false; | |||||
| emit('closeAdd', { show: false }); | |||||
| const resumeModeChange = (data) => { | |||||
| activeKey.value = data | |||||
| } | } | ||||
| const cancelModal = () => { | |||||
| emit('closeAdd'); | |||||
| hideModal(); | |||||
| } | |||||
| </script> | </script> | ||||
| <style> | <style> |
| declare namespace basicType { | |||||
| type addBasicType = { | |||||
| declare namespace JobseekerBasicType { | |||||
| type JobseekerBasicFormType = { | |||||
| id ?: Number, | id ?: Number, | ||||
| customer_id ?: Number, | customer_id ?: Number, | ||||
| hide_resume ?: Number, | hide_resume ?: Number, | ||||
| political_status ?: Number, | political_status ?: Number, | ||||
| native_place ?: Number, | native_place ?: Number, | ||||
| } | } | ||||
| type OtherFormType = { | |||||
| dob?: String, | |||||
| reg_level_cascader?: String, | |||||
| } | |||||
| } | } |
| <template> | <template> | ||||
| <a-form :model="createForm" :label-col="{span: 4}" labelAlign="left"> | |||||
| <a-row gutter="20"> | |||||
| <a-col span="24"> | |||||
| <a-form-item required label="简历是否可见" name="hide_resume" :label-col="{span: 0}"> | |||||
| <a-radio-group v-model:value="createForm.hide_resume" button-style="solid"> | |||||
| <a-radio-button :value="1">是</a-radio-button> | |||||
| <a-radio-button :value="2">否</a-radio-button> | |||||
| </a-radio-group> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-form-item required label="家政版块是否可见" name="house_keeping_status" :label-col="{span: 0}"> | |||||
| <a-radio-group v-model:value="createForm.house_keeping_status" button-style="solid"> | |||||
| <a-radio-button :value="1">是</a-radio-button> | |||||
| <a-radio-button :value="2">否</a-radio-button> | |||||
| </a-radio-group> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-form-item required label="性别" name="createForm.gender" :label-col="{span: 0}"> | |||||
| <a-radio-group v-model:value="createForm.gender" button-style="solid"> | |||||
| <a-radio-button value="男">男</a-radio-button> | |||||
| <a-radio-button value="女">女</a-radio-button> | |||||
| </a-radio-group> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="出生日期" name="dob"> | |||||
| <a-date-picker v-model:value="createForm.dob" @Change="dobChange" style="width: 100%;" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <div style="width: 100%;"> | |||||
| <a-form :model="createForm" layout="vertical" class="resume-form"> | |||||
| <a-row :gutter="20"> | |||||
| <a-col span="24"> | |||||
| <a-form-item required label="上传相片" name="photo"> | |||||
| <upload upload_txt="上传相片" @uploadSuccess="uploadPhotoSuccess" | |||||
| :success_image="addOtherForm.photo_img" images_length="1" image_type="1"></upload> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="简历是否可见" name="hide_resume"> | |||||
| <a-radio-group v-model:value="createForm.hide_resume" button-style="solid" size="mini"> | |||||
| <a-radio-button :value="1" style="width: 50%;">是</a-radio-button> | |||||
| <a-radio-button :value="2" style="width: 50%;">否</a-radio-button> | |||||
| </a-radio-group> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="家政版块是否可见" name="house_keeping_status"> | |||||
| <a-radio-group v-model:value="createForm.house_keeping_status" button-style="solid" | |||||
| size="mini"> | |||||
| <a-radio-button :value="1" style="width: 50%;">是</a-radio-button> | |||||
| <a-radio-button :value="2" style="width: 50%;">否</a-radio-button> | |||||
| </a-radio-group> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="性别" name="gender"> | |||||
| <a-radio-group v-model:value="createForm.gender" button-style="solid" size="mini" | |||||
| > | |||||
| <a-radio-button value="男" style="width: 50%;">男</a-radio-button> | |||||
| <a-radio-button value="女" style="width: 50%;">女</a-radio-button> | |||||
| </a-radio-group> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="姓名"> | |||||
| <a-input v-model:value="createForm.name" placeholder="请输入姓名" size="mini" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="出生日期" name="dob"> | |||||
| <a-date-picker v-model:value="addOtherForm.dob" @Change="dobChange" style="width: 100%;" | |||||
| size="mini" :disabledDate="disabledDateFront" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="身份证" name="id_number"> | |||||
| <a-input v-model:value="createForm.id_number" placeholder="请输入身份证" size="mini" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="工作经验(年)" name="work_experience"> | |||||
| <a-input-number :min="0" type="number" v-model:value="createForm.work_experience" | |||||
| placeholder="请输入工作经验" style="width: 100%;" size="mini" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="学历" name="education"> | |||||
| <a-xuanze :dict="2006" placeholder="请选择学历" @saveSelect="saveEducation" | |||||
| :select_content="createForm.education"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="户口所在地"> | |||||
| <a-jilian :dict="2009" @saveCascader="regLevelSave" placeholder="请选择户口所在地" | |||||
| :cascader_content="addOtherForm.reg_level_cascader"></a-jilian> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="现居地"> | |||||
| <a-jilian :dict="2009" @saveCascader="nowLevelSave" placeholder="请选择现居地" | |||||
| :cascader_content="addOtherForm.now_level_cascader"></a-jilian> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="职称"> | |||||
| <a-xuanze :dict="2014" placeholder="请选择职称" @saveSelect="saveTitle" | |||||
| :select_content="createForm.title"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="婚姻状况"> | |||||
| <a-xuanze :dict="2011" placeholder="请选择婚姻状况" @saveSelect="saveMaritalStatus" | |||||
| :select_content="createForm.marital_status"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="民族"> | |||||
| <a-xuanze :dict="208" placeholder="请选择民族" @saveSelect="saveEthnicity" | |||||
| :select_content="createForm.ethnicity"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="姓名" name="name"> | |||||
| <a-input v-model:value="createForm.name" placeholder="请输入姓名" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="身份证" name="id_number"> | |||||
| <a-input v-model:value="createForm.id_number" placeholder="请输入身份证" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="工作经验" name="work_experience"> | |||||
| <a-input-number :min="0" type="number" v-model:value="createForm.work_experience" | |||||
| placeholder="请输入工作经验" style="width: 100%;" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="学历" name="education"> | |||||
| <a-c-select :dict="2006" :placeholder="educationPlaceholder" | |||||
| @saveSelect="saveEducation"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="户口所在地"> | |||||
| <a-c-cascader :dict="2009" @saveCascader="regLevelSave" placeholder="请选择户口所在地"></a-c-cascader> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="现居地"> | |||||
| <a-c-cascader :dict="2009" @saveCascader="nowLevelSave" placeholder="请选择现居地"></a-c-cascader> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="职称"> | |||||
| <a-c-select :dict="2014" :placeholder="titlePlaceholder" @saveSelect="saveTitle"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="婚姻状况"> | |||||
| <a-c-select :dict="2011" :placeholder="maritalStatusPlaceholder" | |||||
| @saveSelect="saveMaritalStatus"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="民族"> | |||||
| <a-c-select :dict="2012" :placeholder="ethnicityPlaceholder" | |||||
| @saveSelect="saveEthnicity"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="政治面貌"> | |||||
| <a-c-select :dict="2010" :placeholder="politicalStatusPlaceholder" | |||||
| @saveSelect="savePoliticalStatus"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="籍贯"> | |||||
| <a-c-cascader :dict="2009" @saveCascader="nativePlaceSave" placeholder="请选择籍贯"></a-c-cascader> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="身高(厘米cm)"> | |||||
| <a-input-number :min="0" type="number" v-model:value="createForm.height" placeholder="请输入身高" | |||||
| style="width: 100%;" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="体重(千克kg)"> | |||||
| <a-input-number :min="0" type="number" v-model:value="createForm.weight" placeholder="请输入体重" | |||||
| style="width: 100%;" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| </a-row> | |||||
| <a-row gutter="20"> | |||||
| <a-col> | |||||
| <a-button type="primary" @click="onSubmit">保存</a-button> | |||||
| </a-col> | |||||
| <a-col> | |||||
| <a-button style="margin-left: 10px">重置</a-button> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="政治面貌"> | |||||
| <a-xuanze :dict="2010" placeholder="请选择政治面貌" @saveSelect="savePoliticalStatus" | |||||
| :select_content="createForm.political_status"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="籍贯"> | |||||
| <a-jilian :dict="2009" @saveCascader="nativePlaceSave" placeholder="请选择籍贯" | |||||
| :cascader_content="addOtherForm.native_place_txt"></a-jilian> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="身高(厘米cm)"> | |||||
| <a-input-number :min="0" type="number" v-model:value="createForm.height" placeholder="请输入身高" | |||||
| style="width: 100%;" size="mini" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="体重(千克kg)"> | |||||
| <a-input-number :min="0" type="number" v-model:value="createForm.weight" placeholder="请输入体重" | |||||
| style="width: 100%;" size="mini" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="flex-end"> | |||||
| <a-space> | |||||
| <a-button @click="resetForm" size="mini">取消</a-button> | |||||
| <a-button type="primary" @click="sumbitForm" size="mini">保存</a-button> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| </div> | |||||
| </template> | </template> | ||||
| <script lang="ts" setup> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | |||||
| import { message } from 'ant-design-vue'; | |||||
| import { PostJobapplicantAdd, PostJobapplicantUpdate } from '@/apis/models'; | |||||
| import dayjs from 'dayjs'; | |||||
| import 'dayjs/locale/zh-cn'; | |||||
| <script setup lang="ts"> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue'; | |||||
| import { PostJobapplicantAdd, PostJobapplicantUpdate, GetJobapplicantDetail } from '@/apis/models'; | |||||
| import Upload from '@/components/upload/one.vue'; | |||||
| import { intersectionAlike } from '@/utils/dataHelper'; | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
| import { dataForm, otherDataForm, reset } from '@/views/jobSeeker/resume/add/basic/data.ts'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, dayjs, richOption, ExclamationCircleOutlined, Modal, imageprefix, disabledDateFront } = useCommon(); | |||||
| const dayjsRef = ref(dayjs); | |||||
| let props = defineProps(['customer_record']); | let props = defineProps(['customer_record']); | ||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| dayjs.locale('zh-cn'); | |||||
| let createForm = ref<basicType.addBasicType>({ | |||||
| id: 0, | |||||
| customer_id: 0, | |||||
| hide_resume: 0, | |||||
| house_keeping_status: 0, | |||||
| photo: 'aaa.jpg', | |||||
| name: '', | |||||
| id_number: '', | |||||
| gender: "女", | |||||
| dob: '', | |||||
| work_experience: 0, | |||||
| education: 0, | |||||
| reg_level1: 0, | |||||
| reg_level2: 0, | |||||
| reg_level3: 0, | |||||
| reg_level4: 0, | |||||
| now_level1: 0, | |||||
| now_level2: 0, | |||||
| now_level3: 0, | |||||
| now_level4: 0, | |||||
| title: 0, | |||||
| marital_status: 0, | |||||
| ethnicity: 0, | |||||
| height: 0, | |||||
| weight: 0, | |||||
| political_status: 0, | |||||
| native_place: 0 | |||||
| }) | |||||
| let createForm = ref<JobseekerBasicType.JobseekerBasicFormType>(dataForm) | |||||
| let addOtherForm = ref<JobseekerBasicType.OtherFormType>(otherDataForm) | |||||
| onMounted(() => { | onMounted(() => { | ||||
| if (props.customer_record) { | |||||
| createForm.value = { | |||||
| id: props.customer_record.id, | |||||
| customer_id: props.customer_record.customer_id, | |||||
| hide_resume: props.customer_record.hide_resume, | |||||
| house_keeping_status: props.customer_record.house_keeping_status, | |||||
| photo: props.customer_record.photo?props.customer_record.photo: 'aaa.jpg', | |||||
| name: props.customer_record.seekername, | |||||
| id_number: props.customer_record.id_number, | |||||
| gender: props.customer_record.gender, | |||||
| dob: props.customer_record.dob, | |||||
| work_experience: props.customer_record.work_experience, | |||||
| education: props.customer_record.education, | |||||
| reg_level1: props.customer_record.reg_level1, | |||||
| reg_level2: props.customer_record.reg_level2, | |||||
| reg_level3: props.customer_record.reg_level3, | |||||
| reg_level4: props.customer_record.reg_level4, | |||||
| now_level1: props.customer_record.now_level1, | |||||
| now_level2: props.customer_record.now_level2, | |||||
| now_level3: props.customer_record.now_level3, | |||||
| now_level4: props.customer_record.now_level4, | |||||
| title: props.customer_record.title, | |||||
| marital_status: props.customer_record.marital_status, | |||||
| ethnicity: props.customer_record.ethnicity, | |||||
| height: props.customer_record.height, | |||||
| weight: props.customer_record.weight, | |||||
| political_status: props.customer_record.political_status, | |||||
| native_place: props.customer_record.native_place | |||||
| } | |||||
| } | |||||
| getBasic() | |||||
| }) | }) | ||||
| const onSubmit = () => { | |||||
| PostJobapplicantUpdate(createForm.value).then(res => { | |||||
| message.success('基本资料编辑成功') | |||||
| emit('toNext', {activeKey: "2"}) | |||||
| const getBasic = () => { | |||||
| GetJobapplicantDetail({customer_id: props.customer_record.customer_id}).then(res => { | |||||
| createForm.value = intersectionAlike(createForm.value, res.data) | |||||
| createForm.value.id = res.data.id; | |||||
| createForm.value.customer_id = res.data.customer_id; | |||||
| addOtherForm.value = { | |||||
| dob: dayjsRef.value(res.data.dob), | |||||
| reg_level_cascader: [res.data.reg_level1, res.data.reg_level2, res.data.reg_level3, res.data.reg_level4], | |||||
| now_level_cascader: [res.data.now_level1, res.data.now_level2, res.data.now_level3, res.data.now_level4], | |||||
| native_place_txt: res.data.native_place_txt, | |||||
| photo_img: imageprefix + res.data.photo | |||||
| } | |||||
| }) | }) | ||||
| } | } | ||||
| const resetForm = () => { | |||||
| createForm.value = { | |||||
| id: 0, | |||||
| customer_id: 0, | |||||
| hide_resume: 0, | |||||
| house_keeping_status: 0, | |||||
| photo: 'aaa.jpg', | |||||
| name: '', | |||||
| id_number: '', | |||||
| gender: "女", | |||||
| dob: '', | |||||
| work_experience: 0, | |||||
| education: 0, | |||||
| reg_level1: 0, | |||||
| reg_level2: 0, | |||||
| reg_level3: 0, | |||||
| reg_level4: 0, | |||||
| now_level1: 0, | |||||
| now_level2: 0, | |||||
| now_level3: 0, | |||||
| now_level4: 0, | |||||
| title: 0, | |||||
| marital_status: 0, | |||||
| ethnicity: 0, | |||||
| height: 0, | |||||
| weight: 0, | |||||
| political_status: 0, | |||||
| native_place: 0 | |||||
| } | |||||
| // 营业执照 | |||||
| const uploadPhotoSuccess = (data : Object) => { | |||||
| addOtherForm.value.photo_img = imageprefix + data | |||||
| createForm.value.photo = data | |||||
| } | } | ||||
| // 出生日期 | // 出生日期 | ||||
| const dayjsRef = ref(dayjs); | |||||
| const dobChange = (val) => { | const dobChange = (val) => { | ||||
| dayjsRef.value(val).format('YYYY-MM-DD'); | |||||
| createForm.value.dob = dayjsRef.value(val).format('YYYY-MM-DD'); | |||||
| } | } | ||||
| // 学历 | // 学历 | ||||
| const educationPlaceholder = ref('请选择学历'); | const educationPlaceholder = ref('请选择学历'); | ||||
| const saveEducation = (data) => { | const saveEducation = (data) => { | ||||
| createForm.value.education = data.val; | |||||
| createForm.value.education = data.val.key; | |||||
| } | } | ||||
| // 职称 | // 职称 | ||||
| const titlePlaceholder = ref('请选择职称') | const titlePlaceholder = ref('请选择职称') | ||||
| const saveTitle = (data) => { | const saveTitle = (data) => { | ||||
| createForm.value.title = data.val; | |||||
| createForm.value.title = data.val.key; | |||||
| } | } | ||||
| // 婚姻状态 | // 婚姻状态 | ||||
| const maritalStatusPlaceholder = ref('请选择婚姻状态') | const maritalStatusPlaceholder = ref('请选择婚姻状态') | ||||
| const saveMaritalStatus = (data) => { | const saveMaritalStatus = (data) => { | ||||
| createForm.value.marital_status = data.val; | |||||
| createForm.value.marital_status = data.val.key; | |||||
| } | } | ||||
| // 民族 | // 民族 | ||||
| const ethnicityPlaceholder = ref('请选择民族') | const ethnicityPlaceholder = ref('请选择民族') | ||||
| const saveEthnicity = (data) => { | const saveEthnicity = (data) => { | ||||
| createForm.value.ethnicity = data.val; | |||||
| createForm.value.ethnicity = data.val.key; | |||||
| } | } | ||||
| // 政治面貌 | // 政治面貌 | ||||
| const politicalStatusPlaceholder = ref('请选择政治面貌') | const politicalStatusPlaceholder = ref('请选择政治面貌') | ||||
| const savePoliticalStatus = (data) => { | const savePoliticalStatus = (data) => { | ||||
| createForm.value.political_status = data.val; | |||||
| createForm.value.political_status = data.val.key; | |||||
| } | } | ||||
| createForm.value.native_place = data.arr1[1]; | createForm.value.native_place = data.arr1[1]; | ||||
| } | } | ||||
| } | } | ||||
| const sumbitForm = () => { | |||||
| if (createForm.value.id) { | |||||
| PostJobapplicantUpdate(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| getBasic(); | |||||
| }).catch(err => { | |||||
| }) | |||||
| } else { | |||||
| PostJobapplicantAdd(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| getBasic(); | |||||
| }).catch(err => { | |||||
| }) | |||||
| } | |||||
| } | |||||
| const resetForm = () => { | |||||
| createForm.value = reset().dataForm as JobseekerBasicType.JobseekerBasicFormType; | |||||
| addOtherForm.value = reset().otherDataForm as JobseekerBasicType.OtherFormType; | |||||
| } | |||||
| // watch(() => [props.form_state], (newVal) => { | |||||
| // state.value = newVal[0]; | |||||
| // getBasic(); | |||||
| // }) | |||||
| </script> | </script> | ||||
| <style> | <style> |
| export let dataForm = { | |||||
| id: 0, | |||||
| customer_id: 0, | |||||
| hide_resume: 0, | |||||
| house_keeping_status: 0, | |||||
| photo: 'aaa.jpg', | |||||
| name: '', | |||||
| id_number: '', | |||||
| gender: "女", | |||||
| dob: '', | |||||
| work_experience: 0, | |||||
| education: 0, | |||||
| reg_level1: 0, | |||||
| reg_level2: 0, | |||||
| reg_level3: 0, | |||||
| reg_level4: 0, | |||||
| now_level1: 0, | |||||
| now_level2: 0, | |||||
| now_level3: 0, | |||||
| now_level4: 0, | |||||
| title: 0, | |||||
| marital_status: 0, | |||||
| ethnicity: 0, | |||||
| height: 0, | |||||
| weight: 0, | |||||
| political_status: 0, | |||||
| native_place: 0, | |||||
| } | |||||
| export let otherDataForm = { | |||||
| dob: '', | |||||
| reg_level_cascader: '', | |||||
| now_level_cascader: '', | |||||
| native_place_txt: '', | |||||
| photo_img: '' | |||||
| } | |||||
| export const reset = () => { | |||||
| dataForm = { | |||||
| id: 0, | |||||
| customer_id: 0, | |||||
| hide_resume: 0, | |||||
| house_keeping_status: 0, | |||||
| photo: 'aaa.jpg', | |||||
| name: '', | |||||
| id_number: '', | |||||
| gender: "女", | |||||
| dob: '', | |||||
| work_experience: 0, | |||||
| education: 0, | |||||
| reg_level1: 0, | |||||
| reg_level2: 0, | |||||
| reg_level3: 0, | |||||
| reg_level4: 0, | |||||
| now_level1: 0, | |||||
| now_level2: 0, | |||||
| now_level3: 0, | |||||
| now_level4: 0, | |||||
| title: 0, | |||||
| marital_status: 0, | |||||
| ethnicity: 0, | |||||
| height: 0, | |||||
| weight: 0, | |||||
| political_status: 0, | |||||
| native_place: 0 | |||||
| } | |||||
| otherDataForm = { | |||||
| dob: '', | |||||
| reg_level_cascader: '', | |||||
| now_level_cascader: '', | |||||
| native_place_txt: '', | |||||
| photo_img: '' | |||||
| } | |||||
| return { dataForm, otherDataForm } | |||||
| } |
| declare namespace contactType { | |||||
| type addContactType = { | |||||
| declare namespace JobseekerContactType { | |||||
| type JobseekerContactFormType = { | |||||
| id ?: Number, | id ?: Number, | ||||
| customer_id ?: Number, | customer_id ?: Number, | ||||
| landline?: String, | landline?: String, | ||||
| mailing_address?: String, | mailing_address?: String, | ||||
| postal_code?: String, | postal_code?: String, | ||||
| } | } | ||||
| } | } |
| <template> | |||||
| <a-form :model="createForm" :label-col="{span: 4}" labelAlign="left"> | |||||
| <a-row gutter="20"> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="固话" name="landline"> | |||||
| <a-input v-model:value="createForm.landline" placeholder="请输入固话" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="移动电话" name="mobile"> | |||||
| <a-input v-model:value="createForm.mobile" placeholder="请输入移动电话" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="QQ" name="qq"> | |||||
| <a-input v-model:value="createForm.qq" placeholder="请输入QQ" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="个人网站" name="personal_website"> | |||||
| <a-input v-model:value="createForm.personal_website" placeholder="请输入个人网站" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="通信地址" name="mailing_address"> | |||||
| <a-input v-model:value="createForm.mailing_address" placeholder="请输入通信地址" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="邮编" name="postal_code"> | |||||
| <a-input v-model:value="createForm.postal_code" placeholder="请输入邮编" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| </a-row> | |||||
| <a-row gutter="20"> | |||||
| <a-col> | |||||
| <a-button type="primary" @click="onSubmit">保存</a-button> | |||||
| </a-col> | |||||
| <a-col> | |||||
| <a-button style="margin-left: 10px">重置</a-button> | |||||
| </a-col> | |||||
| <a-col> | |||||
| <a-popconfirm title="是否要联系信息?删除后不可恢复" @confirm="onDel(createForm.customer_id)"> | |||||
| <a-button danger >删除全部</a-button> | |||||
| </a-popconfirm> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| <template> | |||||
| <div style="width: 100%;"> | |||||
| <a-form :model="createForm" layout="vertical" class="resume-form"> | |||||
| <a-row :gutter="20"> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="固话" name="landline"> | |||||
| <a-input v-model:value="createForm.landline" placeholder="请输入固话" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="移动电话" name="mobile"> | |||||
| <a-input v-model:value="createForm.mobile" placeholder="请输入移动电话" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="QQ" name="qq"> | |||||
| <a-input v-model:value="createForm.qq" placeholder="请输入QQ" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="个人网站" name="personal_website"> | |||||
| <a-input v-model:value="createForm.personal_website" placeholder="请输入个人网站" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="通信地址" name="mailing_address"> | |||||
| <a-input v-model:value="createForm.mailing_address" placeholder="请输入通信地址" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="邮编" name="postal_code"> | |||||
| <a-input v-model:value="createForm.postal_code" placeholder="请输入邮编" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="flex-end"> | |||||
| <a-space> | |||||
| <a-button @click="resetForm" >取消</a-button> | |||||
| <a-button type="primary" @click="sumbitForm" >保存</a-button> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| </div> | |||||
| </template> | </template> | ||||
| <script lang="ts" setup> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | |||||
| import { message } from 'ant-design-vue'; | |||||
| import { PostJobapplicantAddcontact, PostJobapplicantDelcontact, PostJobapplicantUpdatecontact, PostJobapplicantContactdetail } from '@/apis/models'; | |||||
| <script setup lang="ts"> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue'; | |||||
| import { PostJobapplicantAddcontact, PostJobapplicantDelcontact, PostJobapplicantUpdatecontact, GetJobapplicantContactdetail } from '@/apis/models'; | |||||
| import { intersectionAlike } from '@/utils/dataHelper'; | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
| import { dataForm, otherDataForm, reset } from '@/views/jobSeeker/resume/add/contact/data.ts'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||||
| const dayjsRef = ref(dayjs); | |||||
| let props = defineProps(['customer_record']); | |||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| const props = defineProps(['customer_record']); | |||||
| let createForm = ref<JobseekerContactType.JobseekerContactFormType>(dataForm) | |||||
| let createForm = ref<contactType.addContactType>({ | |||||
| landline: '', | |||||
| mobile: '', | |||||
| qq: '', | |||||
| personal_website: '', | |||||
| mailing_address: '', | |||||
| postal_code: '', | |||||
| }) | |||||
| onMounted(() => { | onMounted(() => { | ||||
| if (props.customer_record) { | |||||
| createForm.value = { | |||||
| id: props.customer_record.id ? props.customer_record.id : 0, | |||||
| customer_id: props.customer_record.customer_id, | |||||
| landline: props.customer_record.landline, | |||||
| mobile: props.customer_record.mobile, | |||||
| qq: props.customer_record.qq, | |||||
| personal_website: props.customer_record.personal_website, | |||||
| mailing_address: props.customer_record.mailing_address, | |||||
| postal_code: props.customer_record.postal_code, | |||||
| } | |||||
| } | |||||
| getBasic() | |||||
| }) | }) | ||||
| const onSubmit = () => { | |||||
| // PostJobapplicantAdd(createForm.value).then(res => { | |||||
| // message.success('基本资料保存成功') | |||||
| // emit('toNext', {activeKey: "2"}) | |||||
| // }) | |||||
| emit('toNext', { activeKey: "3" }) | |||||
| const getBasic = () => { | |||||
| GetJobapplicantContactdetail({customer_id: props.customer_record.customer_id}).then(res => { | |||||
| createForm.value = intersectionAlike(createForm.value, res.data) | |||||
| createForm.value.id = res.data.id; | |||||
| createForm.value.customer_id = res.data.customer_id; | |||||
| }) | |||||
| } | } | ||||
| const resetForm = () => { | |||||
| createForm.value = { | |||||
| customer_id: props.customer_record.customer_id, | |||||
| landline: '', | |||||
| mobile: '', | |||||
| qq: '', | |||||
| personal_website: '', | |||||
| mailing_address: '', | |||||
| postal_code: '', | |||||
| const sumbitForm = () => { | |||||
| if(createForm.value.id) { | |||||
| PostJobapplicantUpdatecontact(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| getBasic(); | |||||
| // resetForm() | |||||
| }).catch(err => { | |||||
| }) | |||||
| } else { | |||||
| PostJobapplicantAddcontact(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| getBasic(); | |||||
| // resetForm() | |||||
| }).catch(err => { | |||||
| }) | |||||
| } | } | ||||
| console.log(createForm.value) | |||||
| } | } | ||||
| const onDel = (id: Number) => { | |||||
| PostJobapplicantDelcontact({id: id}).then(res => { | |||||
| message.success('删除成功'); | |||||
| resetForm(); | |||||
| }) | |||||
| const resetForm = () => { | |||||
| createForm.value = reset().dataForm as JobseekerContactType.JobseekerContactFormType; | |||||
| } | } | ||||
| // watch(() => [props.form_state], (newVal) => { | |||||
| // state.value = newVal[0]; | |||||
| // getBasic(); | |||||
| // }) | |||||
| </script> | </script> | ||||
| <style> | <style> | ||||
| </style> | |||||
| </style> |
| export let dataForm = { | |||||
| landline: '', | |||||
| mobile: '', | |||||
| qq: '', | |||||
| personal_website: '', | |||||
| mailing_address: '', | |||||
| postal_code: '', | |||||
| } | |||||
| export let otherDataForm = { | |||||
| } | |||||
| export const reset = () => { | |||||
| dataForm = { | |||||
| landline: '', | |||||
| mobile: '', | |||||
| qq: '', | |||||
| personal_website: '', | |||||
| mailing_address: '', | |||||
| postal_code: '', | |||||
| } | |||||
| otherDataForm = { | |||||
| } | |||||
| return { dataForm, otherDataForm } | |||||
| } |
| declare namespace JobseekerCredentialType { | |||||
| type JobseekerCredentialFormType = { | |||||
| id ?: Number, | |||||
| name ?: String, | |||||
| description ?: String, | |||||
| certificate_photo ?: String, | |||||
| } | |||||
| type OtherFormType = { | |||||
| photo_img ?: String, | |||||
| } | |||||
| } |
| <template> | <template> | ||||
| <a-c-form :createForm="createForm"> | |||||
| <a-form-item label="证书名称" name="name"> | |||||
| <a-input v-model:value="createForm.name" placeholder="请输入证书名称" /> | |||||
| </a-form-item> | |||||
| <a-form-item required label="证书描述" name="description"> | |||||
| <a-input v-model:value="createForm.description" placeholder="请输入证书描述" /> | |||||
| </a-form-item> | |||||
| <a-button type="primary" @click="addForm()">添加证书</a-button> | |||||
| <a-list :data-source="certificateList"> | |||||
| <template #loadMore v-if="certificateList.length > 0"> | |||||
| <a-flex justify="center"> | |||||
| <a-space> | |||||
| <div v-if="!loading"> | |||||
| <a-button @click="onLoadMore">加载更多</a-button> | |||||
| </div> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </template> | |||||
| <template #renderItem="{ item, index }"> | |||||
| <a-list-item> | |||||
| <a-skeleton avatar :title="false" :loading="!!loading" active> | |||||
| <a-card :title="item.name" style="width: 100%"> | |||||
| <template #extra> | |||||
| <a-space> | |||||
| <a-button v-if="item.id" @click="toEdit(item, index)" type="primary" size="small"> | |||||
| 编辑 | |||||
| </a-button> | |||||
| <a-popconfirm title="是否删除该证书信息" @confirm="del(item.id)"> | |||||
| <a-button v-if="item.id" size="small" danger> | |||||
| 删除 | |||||
| </a-button> | |||||
| </a-popconfirm> | |||||
| </a-space> | |||||
| </template> | |||||
| <a-form :model="createForm" layout="vertical" v-if="item.edit" class="resume-form"> | |||||
| <a-row :gutter="20"> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="证书名称" name="name"> | |||||
| <a-input v-model:value="createForm.name" placeholder="请输入证书名称" size="large" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="证书描述" name="description"> | |||||
| <a-input v-model:value="createForm.description" placeholder="请输入证书描述" | |||||
| size="large" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="上传证书" name="photo"> | |||||
| <upload upload_txt="上传证书" @uploadSuccess="uploadPhotoSuccess" | |||||
| :success_image="addOtherForm.photo_img" images_length="1" image_type="3"> | |||||
| </upload> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="flex-end"> | |||||
| <a-space> | |||||
| <a-button @click="resetForm(index)">取消</a-button> | |||||
| <a-button type="primary" @click="saveForm(index)">保存</a-button> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| <template v-else> | |||||
| <p>证书描述: {{item.description}}</p> | |||||
| <image-container | |||||
| :imgObj="{src: item.certificate_photo ,width: '150px',height:'210px'}"></image-container> | |||||
| </template> | |||||
| </a-card> | |||||
| </a-skeleton> | |||||
| </a-list-item> | |||||
| </template> | |||||
| </a-list> | |||||
| </a-c-form> | |||||
| </template> | </template> | ||||
| <script lang="ts" setup> | |||||
| import { ref, onMounted, watch, computed } from 'vue'; | |||||
| let createForm = ref({ | |||||
| name: '', | |||||
| description: '', | |||||
| certificate_photo: '', | |||||
| <script setup lang="ts"> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue'; | |||||
| import { PostJobapplicantAddcertificate, PostJobapplicantDelcertificate, PostJobapplicantUpdatecertificate, PostJobapplicantListcertificate, PostJobapplicantCertificatedetail } from '@/apis/models'; | |||||
| import Upload from '@/components/upload/one.vue'; | |||||
| import { intersectionAlike } from '@/utils/dataHelper'; | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
| import { dataForm, otherDataForm, reset } from '@/views/jobSeeker/resume/add/credential/data.ts'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal, imageprefix } = useCommon(); | |||||
| const dayjsRef = ref(dayjs); | |||||
| let props = defineProps(['customer_record']); | |||||
| const emit = defineEmits(); | |||||
| let loading = ref<Boolean>(true); | |||||
| let certificateList = ref([]); | |||||
| let createForm = ref<JobseekerCredentialType.JobseekerCredentialFormType>(dataForm) | |||||
| let addOtherForm = ref<JobseekerCredentialType.OtherFormType>(otherDataForm) | |||||
| onMounted(() => { | |||||
| commomParams.value.search.customer_id = props.customer_record.customer_id | |||||
| getData(); | |||||
| }) | }) | ||||
| const resetForm = () => { | |||||
| createForm.value = { | |||||
| name: '', | |||||
| description: '', | |||||
| certificate_photo: '', | |||||
| const getPage = (data : object) => { | |||||
| commomParams.value.search.page = data.current; | |||||
| commomParams.value.search.pagesize = data.pageSize; | |||||
| getData(); | |||||
| } | |||||
| const getData = async () => { | |||||
| try { | |||||
| let res = await PostJobapplicantListcertificate(commomParams.value.search); | |||||
| loading.value = false; | |||||
| if (!res.data.jobapplicantcertificates || res.data.jobapplicantcertificates.length <= 0) { | |||||
| warnToast('无更多数据') | |||||
| commomParams.value.search.page = 1 | |||||
| } | |||||
| res.data.jobapplicantcertificates.map(item => { | |||||
| item.certificate_photo = imageprefix + item.certificate_photo | |||||
| }) | |||||
| certificateList.value = res.data.jobapplicantcertificates ? certificateList.value.concat(res.data.jobapplicantcertificates) : certificateList.value.concat([]); | |||||
| certificateList.value.map(item => { | |||||
| return item.edit = false | |||||
| }) | |||||
| } catch { | |||||
| loading.value = false; | |||||
| } | |||||
| } | |||||
| const onLoadMore = () => { | |||||
| commomParams.value.search.page = commomParams.value.search.page + 1; | |||||
| getData(); | |||||
| } | |||||
| const addForm = () => { | |||||
| certificateList.value.unshift({ edit: true }) | |||||
| createForm.value.customer_id = props.customer_record.customer_id; | |||||
| } | |||||
| // 详情 | |||||
| const getDetail = (val) => { | |||||
| PostJobapplicantCertificatedetail({ id: val.id, customer_id: val.customer_id }).then(res => { | |||||
| createForm.value = intersectionAlike(createForm.value, res.data) | |||||
| createForm.value.id = res.data.id; | |||||
| createForm.value.customer_id = res.data.customer_id; | |||||
| addOtherForm.value = { | |||||
| photo_img: imageprefix + res.data.certificate_photo | |||||
| } | |||||
| }) | |||||
| } | |||||
| const uploadPhotoSuccess = (data : Object) => { | |||||
| addOtherForm.value.photo_img = imageprefix + data | |||||
| createForm.value.certificate_photo = data | |||||
| } | |||||
| const saveForm = (index : Number) => { | |||||
| if (createForm.value.id) { | |||||
| PostJobapplicantUpdatecertificate(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| resetForm(index) | |||||
| }).catch(err => { | |||||
| }) | |||||
| } else { | |||||
| PostJobapplicantAddcertificate(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| resetForm(index) | |||||
| }).catch(err => { | |||||
| }) | |||||
| } | } | ||||
| } | |||||
| const resetForm = (index : Number) => { | |||||
| certificateList.value = []; | |||||
| createForm.value = reset().dataForm as JobseekerCredentialType.JobseekerCredentialFormType; | |||||
| addOtherForm.value = reset().otherDataForm as JobseekerCredentialType.OtherFormType; | |||||
| getData(); | |||||
| } | |||||
| // watch(() => [props.form_state], (newVal) => { | |||||
| // state.value = newVal[0]; | |||||
| // }) | |||||
| const toEdit = (item : Object, index : Number) => { | |||||
| createForm.value.id = item.id; | |||||
| getDetail(item) | |||||
| certificateList.value[index].edit = true | |||||
| } | |||||
| const del = (id : number) => { | |||||
| commomParams.value.delParam = { id: id }; | |||||
| PostJobapplicantDelcertificate(commomParams.value.delParam).then(res => { | |||||
| successToast('删除成功'); | |||||
| certificateList.value = []; | |||||
| getData(); | |||||
| }) | |||||
| } | } | ||||
| </script> | </script> | ||||
| <style> | |||||
| <style scoped> | |||||
| :deep(.ant-list-item) { | |||||
| padding: 12px 0 !important; | |||||
| border-block-end: none !important; | |||||
| } | |||||
| </style> | </style> |
| export let dataForm = { | |||||
| name: '', | |||||
| description: '', | |||||
| certificate_photo: '', | |||||
| } | |||||
| export let otherDataForm = { | |||||
| photo_img: '' | |||||
| } | |||||
| export const reset = () => { | |||||
| dataForm = { | |||||
| name: '', | |||||
| description: '', | |||||
| certificate_photo: '', | |||||
| } | |||||
| otherDataForm = { | |||||
| photo_img: '' | |||||
| } | |||||
| return { dataForm, otherDataForm } | |||||
| } |
| export let dataForm = { | |||||
| start_year: 0, | |||||
| start_month: 0, | |||||
| end_year: 0, | |||||
| end_month: 0, | |||||
| end_today: 0, | |||||
| company_name: '', | |||||
| position: '', | |||||
| reason_for_leaving: '' | |||||
| } | |||||
| export let otherDataForm = { | |||||
| } | |||||
| export const reset = () => { | |||||
| dataForm = { | |||||
| start_year: 0, | |||||
| start_month: 0, | |||||
| end_year: 0, | |||||
| end_month: 0, | |||||
| end_today: 0, | |||||
| company_name: '', | |||||
| position: '', | |||||
| reason_for_leaving: '' | |||||
| } | |||||
| otherDataForm = { | |||||
| } | |||||
| return { dataForm, otherDataForm } | |||||
| } |
| declare namespace JobseekerExperienceType { | |||||
| type JobseekerExperienceFormType = { | |||||
| id ?: Number, | |||||
| start_year ?: Number, | |||||
| start_month ?: Number, | |||||
| end_year ?: Number, | |||||
| end_month ?: Number, | |||||
| end_today ?: Number, | |||||
| company_name ?: String, | |||||
| position ?: String, | |||||
| reason_for_leaving ?: String, | |||||
| } | |||||
| } |
| <template> | <template> | ||||
| <a-form :model="createForm" :label-col="{span: 4}" labelAlign="left"> | |||||
| <a-row gutter="20"> | |||||
| <a-col span="24"> | |||||
| <a-form-item required label="是否至今" name="是否至今"> | |||||
| <a-radio-group v-model:value="createForm.end_today" button-style="solid"> | |||||
| <a-radio-button value="1">非至今</a-radio-button> | |||||
| <a-radio-button value="2">至今</a-radio-button> | |||||
| </a-radio-group> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="公司名称" name="company_name"> | |||||
| <a-input v-model:value="createForm.company_name" placeholder="请输入公司名称" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="职位" name="position"> | |||||
| <a-input v-model:value="createForm.position" placeholder="请输入职位" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="离职原因" name="reason_for_leaving"> | |||||
| <a-input v-model:value="createForm.reason_for_leaving" placeholder="请输入离职原因" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| </a-row> | |||||
| <a-row gutter="20"> | |||||
| <a-col> | |||||
| <a-button type="primary" @click="onSubmit">保存</a-button> | |||||
| </a-col> | |||||
| <a-col> | |||||
| <a-button style="margin-left: 10px">重置</a-button> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| <a-button type="primary" @click="addForm()">添加工作经历</a-button> | |||||
| <a-list :data-source="experienceList"> | |||||
| <template #loadMore v-if="experienceList.length > 0"> | |||||
| <a-flex justify="center"> | |||||
| <a-space> | |||||
| <div v-if="!loading"> | |||||
| <a-button @click="onLoadMore">加载更多</a-button> | |||||
| </div> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </template> | |||||
| <template #renderItem="{ item, index }"> | |||||
| <a-list-item> | |||||
| <a-skeleton avatar :title="false" :loading="!!loading" active> | |||||
| <a-card :title="item.company_name" style="width: 100%"> | |||||
| <template #extra> | |||||
| <a-space> | |||||
| <a-button v-if="item.id" @click="toEdit(item, index)" type="primary" size="small"> | |||||
| 编辑 | |||||
| </a-button> | |||||
| <a-popconfirm title="是否删除该经历" @confirm="del(item.id)"> | |||||
| <a-button v-if="item.id" size="small" danger> | |||||
| 删除 | |||||
| </a-button> | |||||
| </a-popconfirm> | |||||
| </a-space> | |||||
| </template> | |||||
| <a-form :model="createForm" layout="vertical" v-if="item.edit" class="resume-form"> | |||||
| <a-row :gutter="20"> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="工作时间"> | |||||
| <a-range-picker v-model:value="time" @Change="getRange" picker="month" | |||||
| style="width: 100%;" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="是否至今"> | |||||
| <a-radio-group v-model:value="createForm.end_today" button-style="solid" | |||||
| style="width: 100%;"> | |||||
| <a-radio-button :value="1" style="width: 50%;">非至今</a-radio-button> | |||||
| <a-radio-button :value="2" style="width: 50%;">至今</a-radio-button> | |||||
| </a-radio-group> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="公司名称" name="company_name"> | |||||
| <a-input v-model:value="createForm.company_name" placeholder="请输入公司名称" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="职位" name="position"> | |||||
| <a-input v-model:value="createForm.position" placeholder="请输入职位" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="离职原因" name="reason_for_leaving"> | |||||
| <a-input v-model:value="createForm.reason_for_leaving" placeholder="请输入离职原因" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="flex-end"> | |||||
| <a-space> | |||||
| <a-button @click="resetForm(index)">取消</a-button> | |||||
| <a-button type="primary" @click="saveForm(index)">保存</a-button> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| <template v-else> | |||||
| <p>工作角色:{{item.position}}</p> | |||||
| <p>工作时间:{{item.start_year}}.{{item.start_month}}至{{item.end_year}}.{{item.end_month}}</p> | |||||
| <p>离职原因:{{item.reason_for_leaving}}</p> | |||||
| </template> | |||||
| </a-card> | |||||
| </a-skeleton> | |||||
| </a-list-item> | |||||
| </template> | |||||
| </a-list> | |||||
| </template> | </template> | ||||
| <script lang="ts" setup> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | |||||
| import { message } from 'ant-design-vue'; | |||||
| import { PostJobapplicantAdd, PostJobapplicantUpdate } from '@/apis/models'; | |||||
| <script setup lang="ts"> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue'; | |||||
| import { PostJobapplicantAddexperience, PostJobapplicantDelexperience, PostJobapplicantUpdateexperience, PostJobapplicantListexperience, PostJobapplicantExperiencedetail } from '@/apis/models'; | |||||
| import { intersectionAlike } from '@/utils/dataHelper'; | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
| import { dataForm, otherDataForm, reset } from '@/views/jobSeeker/resume/add/experience/data.ts'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||||
| const dayjsRef = ref(dayjs); | |||||
| let props = defineProps(['customer_record']); | |||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| const onSubmit = () => { | |||||
| // PostJobapplicantAdd(createForm.value).then(res => { | |||||
| // message.success('基本资料保存成功') | |||||
| // emit('toNext', {activeKey: "2"}) | |||||
| // }) | |||||
| emit('toNext', { activeKey: "8" }) | |||||
| } | |||||
| let createForm = ref({ | |||||
| start_year: 0, | |||||
| start_month: 0, | |||||
| end_year: 0, | |||||
| end_month: 0, | |||||
| end_today: 0, | |||||
| company_name: '', | |||||
| position: '', | |||||
| reason_for_leaving: '' | |||||
| let loading = ref<Boolean>(true); | |||||
| let experienceList = ref([]); | |||||
| let createForm = ref<JobseekerExperienceType.JobseekerExperienceFormType>(dataForm) | |||||
| let time = ref('') | |||||
| onMounted(() => { | |||||
| commomParams.value.search.customer_id = props.customer_record.customer_id | |||||
| getData(); | |||||
| }) | }) | ||||
| const resetForm = () => { | |||||
| createForm.value = { | |||||
| start_year: 0, | |||||
| start_month: 0, | |||||
| end_year: 0, | |||||
| end_month: 0, | |||||
| end_today: 0, | |||||
| company_name: '', | |||||
| position: '', | |||||
| reason_for_leaving: '' | |||||
| const getPage = (data : object) => { | |||||
| commomParams.value.search.page = data.current; | |||||
| commomParams.value.search.pagesize = data.pageSize; | |||||
| getData(); | |||||
| } | |||||
| const getData = async () => { | |||||
| try { | |||||
| let res = await PostJobapplicantListexperience(commomParams.value.search); | |||||
| loading.value = false; | |||||
| if (!res.data.jobapplicantexperiences || res.data.jobapplicantexperiences.length <= 0) { | |||||
| warnToast('无更多数据') | |||||
| commomParams.value.search.page = 1 | |||||
| } | |||||
| experienceList.value = res.data.jobapplicantexperiences ? experienceList.value.concat(res.data.jobapplicantexperiences) : experienceList.value.concat([]); | |||||
| experienceList.value.map(item => { | |||||
| return item.edit = false | |||||
| }) | |||||
| } catch { | |||||
| loading.value = false; | |||||
| } | |||||
| } | |||||
| const onLoadMore = () => { | |||||
| commomParams.value.search.page = commomParams.value.search.page + 1; | |||||
| getData(); | |||||
| } | |||||
| const addForm = () => { | |||||
| experienceList.value.unshift({ edit: true }) | |||||
| createForm.value.customer_id = props.customer_record.customer_id; | |||||
| } | |||||
| // 详情 | |||||
| const getDetail = (val) => { | |||||
| PostJobapplicantExperiencedetail({ id: val.id, customer_id: val.customer_id }).then(res => { | |||||
| createForm.value = intersectionAlike(createForm.value, res.data) | |||||
| createForm.value.id = res.data.id; | |||||
| createForm.value.customer_id = res.data.customer_id; | |||||
| time.value = [dayjsRef.value(`${res.data.start_year}-${res.data.start_month}`), dayjsRef.value(`${res.data.end_year}-${res.data.end_month}`)] | |||||
| }) | |||||
| } | |||||
| const getRange = (val) => { | |||||
| let day1 = dayjsRef.value(val[0]).format('YYYY-MM-DD').split('-'); | |||||
| let day2 = dayjsRef.value(val[1]).format('YYYY-MM-DD').split('-'); | |||||
| createForm.value.start_year = parseInt(day1[0], 10); | |||||
| createForm.value.start_month = parseInt(day1[1], 10); | |||||
| createForm.value.end_year = parseInt(day2[0], 10); | |||||
| createForm.value.end_month = parseInt(day2[1], 10); | |||||
| } | |||||
| const saveForm = (index : Number) => { | |||||
| if (createForm.value.id) { | |||||
| PostJobapplicantUpdateexperience(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| resetForm(index) | |||||
| }).catch(err => { | |||||
| }) | |||||
| } else { | |||||
| PostJobapplicantAddexperience(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| resetForm(index) | |||||
| }).catch(err => { | |||||
| }) | |||||
| } | } | ||||
| } | |||||
| const resetForm = (index : Number) => { | |||||
| experienceList.value = []; | |||||
| time.value = '' | |||||
| createForm.value = reset().dataForm as JobseekerExperienceType.JobseekerExperienceFormType; | |||||
| getData(); | |||||
| } | |||||
| // watch(() => [props.form_state], (newVal) => { | |||||
| // state.value = newVal[0]; | |||||
| // }) | |||||
| const toEdit = (item : Object, index : Number) => { | |||||
| createForm.value.id = item.id; | |||||
| getDetail(item) | |||||
| experienceList.value[index].edit = true | |||||
| } | |||||
| const del = (id : number) => { | |||||
| commomParams.value.delParam = { id: id }; | |||||
| PostJobapplicantDelexperience(commomParams.value.delParam).then(res => { | |||||
| successToast('删除成功'); | |||||
| experienceList.value = []; | |||||
| getData(); | |||||
| }) | |||||
| } | } | ||||
| </script> | </script> | ||||
| <style> | |||||
| <style scoped> | |||||
| :deep(.ant-list-item) { | |||||
| padding: 12px 0 !important; | |||||
| border-block-end: none !important; | |||||
| } | |||||
| </style> | </style> |
| export let dataAreaForm = { | |||||
| level1: 0, | |||||
| level2: 0, | |||||
| level3: 0, | |||||
| level4: 0, | |||||
| } | |||||
| export let dataPositionForm = { | |||||
| level1: 0, | |||||
| level2: 0, | |||||
| } | |||||
| export let dataBasicForm = { | |||||
| job_type: 0, | |||||
| talent_type: 0, | |||||
| work_experience: 0, | |||||
| other_positions: '', | |||||
| salary_range: 0, | |||||
| available_date: 0, | |||||
| title_requirement: 0, | |||||
| skill_certification: 0, | |||||
| accommodation_requirement: 0, | |||||
| holiday_rest: 0, | |||||
| } | |||||
| export let otherDataForm = { | |||||
| area: [], | |||||
| position: [] | |||||
| } | |||||
| export const reset = () => { | |||||
| dataAreaForm = { | |||||
| level1: 0, | |||||
| level2: 0, | |||||
| level3: 0, | |||||
| level4: 0, | |||||
| } | |||||
| dataPositionForm = { | |||||
| level1: 0, | |||||
| level2: 0, | |||||
| } | |||||
| dataBasicForm = { | |||||
| job_type: 0, | |||||
| talent_type: 0, | |||||
| work_experience: 0, | |||||
| other_positions: '', | |||||
| salary_range: 0, | |||||
| available_date: 0, | |||||
| title_requirement: 0, | |||||
| skill_certification: 0, | |||||
| accommodation_requirement: 0, | |||||
| holiday_rest: 0, | |||||
| } | |||||
| otherDataForm = { | |||||
| area: [], | |||||
| position: [] | |||||
| } | |||||
| return { dataAreaForm, dataPositionForm, dataBasicForm, otherDataForm } | |||||
| } |
| declare namespace JobseekerIntentionType { | |||||
| type JobseekerIntentionAreaFormType = { | |||||
| id ?: Number, | |||||
| level1 ?: Number, | |||||
| level2 ?: Number, | |||||
| level3 ?: Number, | |||||
| level4 ?: Number, | |||||
| } | |||||
| type JobseekerIntentionPositionFormType = { | |||||
| id ?: Number, | |||||
| level1 ?: Number, | |||||
| level2 ?: Number, | |||||
| } | |||||
| type JobseekerIntentionBasicFormType = { | |||||
| id ?: Number, | |||||
| job_type?: Number, | |||||
| talent_type ?: Number, | |||||
| work_experience ?: Number, | |||||
| other_positions: '', | |||||
| salary_range ?: Number, | |||||
| available_date ?: Number, | |||||
| title_requirement ?: Number, | |||||
| skill_certification ?: Number, | |||||
| accommodation_requirement ?: Number, | |||||
| holiday_rest ?: Number, | |||||
| } | |||||
| type OtherFormType = { | |||||
| area ?: Number[], | |||||
| position?: Number[], | |||||
| } | |||||
| } |
| <template> | <template> | ||||
| <a-form :model="createForm" :label-col="{span: 4}" labelAlign="left"> | |||||
| <a-row gutter="20"> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="意向地区"> | |||||
| <a-c-cascader :dict="2009" @saveCascader="areaSave"></a-c-cascader> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="意向职位一"> | |||||
| <a-c-cascader :dict="2004" @saveCascader="positionSave"></a-c-cascader> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="意向职位二"> | |||||
| <a-c-cascader :dict="2004" @saveCascader="positionSave"></a-c-cascader> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="意向职位三"> | |||||
| <a-c-cascader :dict="2004" @saveCascader="positionSave"></a-c-cascader> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="求职类型"> | |||||
| <a-c-select :dict="2019" placeholder="请选择求职类型" @saveSelect="saveJobType"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="人才类型"> | |||||
| <a-c-select :dict="2020" placeholder="请选择求职类型" @saveSelect="saveTalentType"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="工作经验" name="work_experience"> | |||||
| <a-input v-model:value="createForm.base.work_experience" placeholder="请输入工作经验" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="其他职位" name="other_positions"> | |||||
| <a-input v-model:value="createForm.base.other_positions" placeholder="请输入其他职位" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="月薪要求范围"> | |||||
| <a-c-select :dict="2005" placeholder="请选择月薪要求范围" @saveSelect="saveSalaryRange"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="可到职日期"> | |||||
| <a-c-select :dict="2013" placeholder="请选择可到职日期" @saveSelect="saveAvailableDate"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="职称要求"> | |||||
| <a-c-select :dict="2014" placeholder="请选择职称要求" @saveSelect="saveTitleRequirement"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="技能认证"> | |||||
| <a-c-select :dict="2015" placeholder="请选择技能认证" @saveSelect="saveSkillCertification"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="食宿要求"> | |||||
| <a-c-select :dict="2016" placeholder="请选择食宿要求" @saveSelect="saveAccommodationRequirement"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="节假日休息情况" :label-col="{span: 6}"> | |||||
| <a-c-select :dict="2017" placeholder="请选择节假日休息情况" @saveSelect="saveHolidayRest"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| </a-row> | |||||
| <a-row gutter="20"> | |||||
| <a-col> | |||||
| <a-button type="primary" @click="onSubmit">保存</a-button> | |||||
| </a-col> | |||||
| <a-col> | |||||
| <a-button style="margin-left: 10px">重置</a-button> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| <div> | |||||
| <a-button type="primary" @click="addPositionForm()">添加意向职位</a-button> | |||||
| <a-list :data-source="positionList"> | |||||
| <template #renderItem="{ item, index }"> | |||||
| <a-list-item> | |||||
| <a-card style="width: 100%"> | |||||
| <template #title> | |||||
| <div> | |||||
| {{item.level1_txt}} | |||||
| <span v-if="item.level2_txt">/</span> | |||||
| {{item.level2_txt}} | |||||
| </div> | |||||
| </template> | |||||
| <template #extra> | |||||
| <a-space> | |||||
| <a-button v-if="item.id" @click="toPositionEdit(item, index)" type="primary" | |||||
| size="small"> | |||||
| 编辑 | |||||
| </a-button> | |||||
| <a-popconfirm title="是否删除该意向职位" @confirm="delPosition(item.id)"> | |||||
| <a-button v-if="item.id" size="small" danger> | |||||
| 删除 | |||||
| </a-button> | |||||
| </a-popconfirm> | |||||
| </a-space> | |||||
| </template> | |||||
| <a-form :model="positionForm" layout="vertical" v-if="item.edit" class="resume-form"> | |||||
| <a-row :gutter="20"> | |||||
| <a-col span="24"> | |||||
| <a-form-item required label="意向职位"> | |||||
| <a-jilian :dict="2004" @saveCascader="positionSave" placeholder="请选择意向职位" | |||||
| :cascader_content="addOtherForm.position"></a-jilian> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="flex-end"> | |||||
| <a-space> | |||||
| <a-button @click="resetForm('position')" size="large">取消</a-button> | |||||
| <a-button type="primary" @click="sumbitPositionForm" | |||||
| size="large">保存</a-button> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| </a-card> | |||||
| </a-list-item> | |||||
| </template> | |||||
| </a-list> | |||||
| <a-button type="primary" @click="addAreaForm()">添加意向地区</a-button> | |||||
| <a-list :data-source="areaList"> | |||||
| <template #renderItem="{ item, index }"> | |||||
| <a-list-item> | |||||
| <a-card style="width: 100%"> | |||||
| <template #title> | |||||
| <div> | |||||
| {{item.level1_txt}} | |||||
| <span v-if="item.level2_txt">/</span> | |||||
| {{item.level2_txt}} | |||||
| <span v-if="item.level3_txt">/</span> | |||||
| {{item.level3_txt}} | |||||
| <span v-if="item.level4_txt">/</span> | |||||
| {{item.level4_txt}} | |||||
| </div> | |||||
| </template> | |||||
| <template #extra> | |||||
| <a-space> | |||||
| <a-button v-if="item.id" @click="toAreaEdit(item, index)" type="primary" size="small"> | |||||
| 编辑 | |||||
| </a-button> | |||||
| <a-popconfirm title="是否删除该意向地区" @confirm="delArea(item.id)"> | |||||
| <a-button v-if="item.id" size="small" danger> | |||||
| 删除 | |||||
| </a-button> | |||||
| </a-popconfirm> | |||||
| </a-space> | |||||
| </template> | |||||
| <a-form :model="createForm" layout="vertical" v-if="item.edit" class="resume-form"> | |||||
| <a-row :gutter="20"> | |||||
| <a-col span="24"> | |||||
| <a-form-item required label="意向地区"> | |||||
| <a-jilian :dict="2009" @saveCascader="areaSave" placeholder="请选择意向地区" | |||||
| :cascader_content="addOtherForm.area"></a-jilian> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="flex-end"> | |||||
| <a-space> | |||||
| <a-button @click="resetForm('area')" size="large">取消</a-button> | |||||
| <a-button type="primary" @click="sumbitAreaForm" size="large">保存</a-button> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| </a-card> | |||||
| </a-list-item> | |||||
| </template> | |||||
| </a-list> | |||||
| <a-typography-title :level="4"> | |||||
| 其他意向 | |||||
| </a-typography-title> | |||||
| <a-form layout="vertical" class="resume-form"> | |||||
| <a-row :gutter="20"> | |||||
| <a-col span="12"> | |||||
| <a-form-item label="其他职位"> | |||||
| <a-input v-model:value="basicForm.other_positions" placeholder="请输入其他职位" size="large" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="求职类型"> | |||||
| <a-xuanze :dict="2019" placeholder="请选择求职类型" @saveSelect="saveJobType" | |||||
| :select_content="basicForm.job_type"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="人才类型"> | |||||
| <a-xuanze :dict="2020" placeholder="请选择人才类型" @saveSelect="saveTalentType" | |||||
| :select_content="basicForm.talent_type"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="工作经验" name="work_experience"> | |||||
| <a-xuanze :dict="2021" placeholder="请选择求工作经验" @saveSelect="saveWorkExperience" | |||||
| :select_content="basicForm.work_experience"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="月薪要求范围"> | |||||
| <a-xuanze :dict="2005" placeholder="请选择月薪要求范围" @saveSelect="saveSalaryRange" | |||||
| :select_content="basicForm.salary_range"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="可到职日期"> | |||||
| <a-xuanze :dict="2013" placeholder="请选择可到职日期" @saveSelect="saveAvailableDate" | |||||
| :select_content="basicForm.available_date"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item label="职称要求"> | |||||
| <a-xuanze :dict="2014" placeholder="请选择职称要求" @saveSelect="saveTitleRequirement" | |||||
| :select_content="basicForm.title_requirement"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item label="技能认证"> | |||||
| <a-xuanze :dict="2015" placeholder="请选择技能认证" @saveSelect="saveSkillCertification" | |||||
| :select_content="basicForm.skill_certification"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item label="食宿要求"> | |||||
| <a-xuanze :dict="2016" placeholder="请选择食宿要求" @saveSelect="saveAccommodationRequirement" | |||||
| :select_content="basicForm.accommodation_requirement"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item label="节假日休息情况"> | |||||
| <a-xuanze :dict="2017" placeholder="请选择节假日休息情况" @saveSelect="saveHolidayRest" | |||||
| :select_content="basicForm.holiday_rest"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="flex-end"> | |||||
| <a-space> | |||||
| <a-button @click="resetForm('basic')" size="large">取消</a-button> | |||||
| <a-button type="primary" @click="sumbitBasicForm" size="large">保存</a-button> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| </div> | |||||
| </template> | </template> | ||||
| <script lang="ts" setup> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | |||||
| import { message } from 'ant-design-vue'; | |||||
| import { PostJobapplicantAdd, PostJobapplicantUpdate } from '@/apis/models'; | |||||
| <script setup lang="ts"> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue'; | |||||
| import { PostJobapplicantAdddesirearea, PostJobapplicantDeldesirearea, PostJobapplicantUpdatedesirearea, PostJobapplicantListdesirearea, PostJobapplicantDesireareadetail, PostJobapplicantAdddesireindustry, PostJobapplicantDeldesireindustry, PostJobapplicantUpdatedesireindustry, PostJobapplicantListdesireindustry, PostJobapplicantDesireindustrydetail, PostJobapplicantAdddesirebase, PostJobapplicantDeldesirebase, PostJobapplicantUpdatedesirebase, PostJobapplicantDesirebasedetail } from '@/apis/models'; | |||||
| import { intersectionAlike } from '@/utils/dataHelper'; | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
| import { dataAreaForm, dataPositionForm, dataBasicForm, otherDataForm, reset } from '@/views/jobSeeker/resume/add/intention/data.ts'; | |||||
| import { EditOutlined, FileSearchOutlined, RedoOutlined, DeleteOutlined } from '@ant-design/icons-vue'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, dayjs, commomParams, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||||
| const dayjsRef = ref(dayjs); | |||||
| let props = defineProps(['customer_record']); | |||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| const onSubmit = () => { | |||||
| // PostJobapplicantAdd(createForm.value).then(res => { | |||||
| // message.success('基本资料保存成功') | |||||
| // emit('toNext', {activeKey: "2"}) | |||||
| // }) | |||||
| emit('toNext', { activeKey: "7" }) | |||||
| } | |||||
| let createForm = ref({ | |||||
| area: { | |||||
| level1: 0, | |||||
| level2: 0, | |||||
| level3: 0, | |||||
| level4: 0, | |||||
| }, | |||||
| position: { | |||||
| industry: 0, | |||||
| }, | |||||
| base: { | |||||
| job_type: 0, | |||||
| talent_type: 0, | |||||
| work_experience: 0, | |||||
| other_positions: '', | |||||
| salary_range: 0, | |||||
| available_date: 0, | |||||
| title_requirement: 0, | |||||
| skill_certification: 0, | |||||
| accommodation_requirement: 0, | |||||
| holiday_rest: 0, | |||||
| } | |||||
| let state = ref<Boolean>(false) | |||||
| let loading = ref<Boolean>(true); | |||||
| let basic = ref<Object>(null) | |||||
| let positionList = ref<Object[]>([]) | |||||
| let areaList = ref<Object[]>([]) | |||||
| let activeKey = ref<Number>(1) | |||||
| let areaForm = ref<JobseekerIntentionType.JobseekerIntentionAreaFormType>(dataAreaForm) | |||||
| let positionForm = ref<JobseekerIntentionType.JobseekerIntentionPositionFormType>(dataPositionForm) | |||||
| let basicForm = ref<JobseekerIntentionType.JobseekerIntentionBasicFormType>(dataBasicForm) | |||||
| let addOtherForm = ref<JobseekerIntentionType.OtherFormType>(otherDataForm) | |||||
| onMounted(() => { | |||||
| getBasic() | |||||
| getPosition() | |||||
| getArea() | |||||
| }) | }) | ||||
| const resetForm = () => { | |||||
| createForm.value = { | |||||
| area: { | |||||
| level1: 0, | |||||
| level2: 0, | |||||
| level3: 0, | |||||
| level4: 0, | |||||
| }, | |||||
| position: { | |||||
| industry: 0, | |||||
| }, | |||||
| base: { | |||||
| job_type: 0, | |||||
| talent_type: 0, | |||||
| work_experience: 0, | |||||
| other_positions: '', | |||||
| salary_range: 0, | |||||
| available_date: 0, | |||||
| title_requirement: 0, | |||||
| skill_certification: 0, | |||||
| accommodation_requirement: 0, | |||||
| holiday_rest: 0, | |||||
| } | |||||
| } | |||||
| const getBasic = () => { | |||||
| PostJobapplicantDesirebasedetail({ customer_id: props.customer_record.customer_id }).then(res => { | |||||
| basic.value = res.data | |||||
| basicForm.value = intersectionAlike(basicForm.value, res.data) | |||||
| basicForm.value.id = res.data.id; | |||||
| basicForm.value.customer_id = props.customer_record.customer_id; | |||||
| }) | |||||
| } | |||||
| const getArea = () => { | |||||
| PostJobapplicantListdesirearea({ page: 1, pagesize: 100, customer_id: props.customer_record.customer_id, sortby: 'desc' }).then(res => { | |||||
| areaList.value = res.data.jobapplicantareas | |||||
| areaForm.value = intersectionAlike(areaForm.value, res.data) | |||||
| }) | |||||
| } | } | ||||
| const getPosition = () => { | |||||
| PostJobapplicantListdesireindustry({ page: 1, pagesize: 100, customer_id: props.customer_record.customer_id, sortby: 'desc' }).then(res => { | |||||
| positionList.value = res.data.jobapplicantpositions | |||||
| positionForm.value = intersectionAlike(positionForm.value, res.data) | |||||
| }) | |||||
| } | |||||
| // 意向地区 | // 意向地区 | ||||
| const addAreaForm = () => { | |||||
| areaList.value.unshift({ edit: true }) | |||||
| areaForm.value.customer_id = props.customer_record.customer_id; | |||||
| } | |||||
| const areaSave = (data) => { | const areaSave = (data) => { | ||||
| for (let i = 0; i < 4; i++) { | for (let i = 0; i < 4; i++) { | ||||
| createForm.value[`now_level${i + 1}`] = data.arr1[i] || 0; | |||||
| areaForm.value[`level${i + 1}`] = data.arr1[i] || 0; | |||||
| } | |||||
| } | |||||
| // 保存意向地区 | |||||
| const sumbitAreaForm = () => { | |||||
| if (areaForm.value.id) { | |||||
| PostJobapplicantUpdatedesirearea(areaForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| resetForm('area') | |||||
| }).catch(err => { | |||||
| }) | |||||
| } else { | |||||
| PostJobapplicantAdddesirearea(areaForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| resetForm('area') | |||||
| }).catch(err => { | |||||
| }) | |||||
| } | } | ||||
| } | } | ||||
| const toAreaEdit = (item : Object, index : Number) => { | |||||
| areaForm.value.id = item.id; | |||||
| getAreaDetail(item) | |||||
| areaList.value[index].edit = true | |||||
| } | |||||
| // 详情 | |||||
| const getAreaDetail = (val) => { | |||||
| PostJobapplicantDesireareadetail({ id: val.id, customer_id: val.customer_id }).then(res => { | |||||
| areaForm.value = intersectionAlike(areaForm.value, res.data) | |||||
| areaForm.value.id = res.data.id; | |||||
| areaForm.value.customer_id = res.data.customer_id; | |||||
| for (var i = 1; i <= 4; i++) { | |||||
| if (res.data['level' + i]) { | |||||
| addOtherForm.value.area.push(res.data['level' + i]); | |||||
| } | |||||
| } | |||||
| }) | |||||
| } | |||||
| const delArea = (id : number) => { | |||||
| commomParams.value.delParam = { id: id }; | |||||
| PostJobapplicantDeldesirearea(commomParams.value.delParam).then(res => { | |||||
| successToast('删除成功'); | |||||
| areaList.value = []; | |||||
| getArea(); | |||||
| }) | |||||
| } | |||||
| // 意向求职 | // 意向求职 | ||||
| const addPositionForm = () => { | |||||
| positionList.value.unshift({ edit: true }) | |||||
| positionForm.value.customer_id = props.customer_record.customer_id; | |||||
| } | |||||
| const positionSave = (data) => { | const positionSave = (data) => { | ||||
| for (let i = 0; i < 4; i++) { | |||||
| createForm.value[`now_level${i + 1}`] = data.arr1[i] || 0; | |||||
| for (let i = 0; i < 2; i++) { | |||||
| positionForm.value[`level${i + 1}`] = data.arr1[i] || 0; | |||||
| } | |||||
| console.log(positionForm.value) | |||||
| } | |||||
| const sumbitPositionForm = () => { | |||||
| if (positionForm.value.id) { | |||||
| PostJobapplicantUpdatedesireindustry(positionForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| resetForm('position') | |||||
| }).catch(err => { | |||||
| }) | |||||
| } else { | |||||
| PostJobapplicantAdddesireindustry(positionForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| resetForm('position') | |||||
| }).catch(err => { | |||||
| }) | |||||
| } | } | ||||
| } | } | ||||
| const toPositionEdit = (item : Object, index : Number) => { | |||||
| positionForm.value.id = item.id; | |||||
| getPositionDetail(item) | |||||
| positionList.value[index].edit = true | |||||
| } | |||||
| // 详情 | |||||
| const getPositionDetail = (val) => { | |||||
| PostJobapplicantDesireindustrydetail({ id: val.id, customer_id: val.customer_id }).then(res => { | |||||
| positionForm.value = intersectionAlike(positionForm.value, res.data) | |||||
| positionForm.value.id = res.data.id; | |||||
| positionForm.value.customer_id = res.data.customer_id; | |||||
| for (var i = 1; i <= 2; i++) { | |||||
| if (res.data['level' + i]) { | |||||
| addOtherForm.value.position.push(res.data['level' + i]); | |||||
| } | |||||
| } | |||||
| }) | |||||
| } | |||||
| const delPosition = (id : number) => { | |||||
| commomParams.value.delParam = { id: id }; | |||||
| PostJobapplicantDeldesireindustry(commomParams.value.delParam).then(res => { | |||||
| successToast('删除成功'); | |||||
| positionList.value = []; | |||||
| getPosition(); | |||||
| }) | |||||
| } | |||||
| // 求职类型 | // 求职类型 | ||||
| const saveJobType = (data) => { | const saveJobType = (data) => { | ||||
| createForm.value.job_type = data.val; | |||||
| basicForm.value.job_type = data.val.key; | |||||
| } | } | ||||
| // 人才类型 | // 人才类型 | ||||
| const saveTalentType = (data) => { | const saveTalentType = (data) => { | ||||
| createForm.value.base.talent_type = data.val; | |||||
| basicForm.value.talent_type = data.val.key; | |||||
| } | |||||
| // 工作经验 | |||||
| const saveWorkExperience = (data) => { | |||||
| basicForm.value.work_experience = data.val.key; | |||||
| } | } | ||||
| // 月薪要求范围 | // 月薪要求范围 | ||||
| const saveSalaryRange = (data) => { | const saveSalaryRange = (data) => { | ||||
| createForm.value.base.salary_range = data.val; | |||||
| basicForm.value.salary_range = data.val.key; | |||||
| } | } | ||||
| // 可到职日期 | // 可到职日期 | ||||
| const saveAvailableDate = (data) => { | const saveAvailableDate = (data) => { | ||||
| createForm.value.base.available_date = data.val; | |||||
| basicForm.value.available_date = data.val.key; | |||||
| } | } | ||||
| // 职称要求 | // 职称要求 | ||||
| const saveTitleRequirement = (data) => { | const saveTitleRequirement = (data) => { | ||||
| createForm.value.base.title_requirement = data.val; | |||||
| basicForm.value.title_requirement = data.val.key; | |||||
| } | } | ||||
| // 技能认证 | // 技能认证 | ||||
| const saveSkillCertification = (data) => { | const saveSkillCertification = (data) => { | ||||
| createForm.value.base.skill_certification = data.val; | |||||
| basicForm.value.skill_certification = data.val.key; | |||||
| } | } | ||||
| // 食宿要求 | // 食宿要求 | ||||
| const saveAccommodationRequirement = (data) => { | const saveAccommodationRequirement = (data) => { | ||||
| createForm.value.base.accommodation_requirement = data.val; | |||||
| basicForm.value.accommodation_requirement = data.val.key; | |||||
| } | } | ||||
| // 节假日休息情况 | // 节假日休息情况 | ||||
| const saveHolidayRest = (data) => { | const saveHolidayRest = (data) => { | ||||
| createForm.value.base.holiday_rest = data.val; | |||||
| basicForm.value.holiday_rest = data.val.key; | |||||
| } | } | ||||
| </script> | |||||
| <style> | |||||
| const sumbitBasicForm = () => { | |||||
| if (basicForm.value.id) { | |||||
| PostJobapplicantUpdatedesirebase(basicForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| resetForm('basic') | |||||
| }).catch(err => { | |||||
| }) | |||||
| } else { | |||||
| PostJobapplicantAdddesirebase(basicForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| resetForm('basic') | |||||
| }).catch(err => { | |||||
| }) | |||||
| } | |||||
| } | |||||
| // const toBasicEdit = (item : Object) => { | |||||
| // getBasic() | |||||
| // activeKey.value = 3 | |||||
| // emit("editEdit") | |||||
| // } | |||||
| const delBasic = (id : number) => { | |||||
| commomParams.value.delParam = { id: id }; | |||||
| PostJobapplicantDeldesirebase(commomParams.value.delParam).then(res => { | |||||
| successToast('删除成功'); | |||||
| basic.value = null; | |||||
| getBasic(); | |||||
| }) | |||||
| } | |||||
| const resetForm = (val) => { | |||||
| if (val == 'area') { | |||||
| areaForm.value = reset().dataAreaForm as JobseekerIntentionType.JobseekerIntentionAreaFormType; | |||||
| getArea(); | |||||
| } | |||||
| if (val == 'position') { | |||||
| positionForm.value = reset().dataPositionForm as JobseekerIntentionType.JobseekerIntentionPositionFormType; | |||||
| getPosition(); | |||||
| } | |||||
| if (val == 'basic') { | |||||
| basicForm.value = reset().dataBasicForm as JobseekerIntentionType.JobseekerIntentionBasicFormType; | |||||
| getBasic(); | |||||
| } | |||||
| addOtherForm.value = reset().otherDataForm as JobseekerIntentionType.OtherFormType; | |||||
| } | |||||
| // watch(() => [props.form_state], (newVal) => { | |||||
| // state.value = newVal[0]; | |||||
| // getBasic(); | |||||
| // getPosition(); | |||||
| // getArea(); | |||||
| // }) | |||||
| </script> | |||||
| <style scoped> | |||||
| :deep(.ant-list-item) { | |||||
| padding: 12px 0 !important; | |||||
| border-block-end: none !important; | |||||
| } | |||||
| </style> | </style> |
| export let dataForm = { | |||||
| id: 0, | |||||
| description: '', | |||||
| } | |||||
| export let otherDataForm = { | |||||
| description: '', | |||||
| } | |||||
| export const reset = () => { | |||||
| dataForm = { | |||||
| id: 0, | |||||
| description: '', | |||||
| } | |||||
| otherDataForm = { | |||||
| description: '', | |||||
| } | |||||
| return { dataForm, otherDataForm } | |||||
| } |
| declare namespace JobseekerIntroductionType { | |||||
| type JobseekerIntroductionFormType = { | |||||
| id ?: Number, | |||||
| description ?: String, | |||||
| } | |||||
| type OtherFormType = { | |||||
| description ?: String, | |||||
| } | |||||
| } |
| <template> | <template> | ||||
| <a-form :model="createForm" labelAlign="left"> | |||||
| <a-row gutter="20"> | |||||
| <a-col span="24"> | |||||
| <a-form-item label="个人简介" name="description"> | |||||
| <QuillEditor theme="snow" :options="options" toolbar="full"/> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| </a-row> | |||||
| <a-row gutter="20"> | |||||
| <a-col> | |||||
| <a-button type="primary" @click="onSubmit">保存</a-button> | |||||
| </a-col> | |||||
| <a-col> | |||||
| <a-button style="margin-left: 10px">重置</a-button> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| <div> | |||||
| <a-form :model="createForm" layout="vertical" class="resume-form"> | |||||
| <a-row :gutter="20"> | |||||
| <a-col span="24"> | |||||
| <a-form-item required label="个人简介" name="description"> | |||||
| <QuillEditor theme="snow" :options="richOption" toolbar="full" | |||||
| v-model:content="addOtherForm.description" @update:content="onEditorUpdate($event)" | |||||
| contentType="html" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="flex-end"> | |||||
| <a-space> | |||||
| <a-button @click="resetForm" size="large">取消</a-button> | |||||
| <a-button type="primary" @click="sumbitForm" size="large">保存</a-button> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| </div> | |||||
| </template> | </template> | ||||
| <script lang="ts" setup> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | |||||
| import { message } from 'ant-design-vue'; | |||||
| import { PostJobapplicantAdd, PostJobapplicantUpdate } from '@/apis/models'; | |||||
| import { QuillEditor } from '@vueup/vue-quill' | |||||
| import '@vueup/vue-quill/dist/vue-quill.snow.css'; | |||||
| <script setup lang="ts"> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue'; | |||||
| import { PostJobapplicantAddintroduction, PostJobapplicantUpdateintroduction, GetJobapplicantIntroductiondetail } from '@/apis/models'; | |||||
| import { intersectionAlike } from '@/utils/dataHelper'; | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
| import { dataForm, otherDataForm, reset } from '@/views/jobSeeker/resume/add/introduction/data.ts'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||||
| const dayjsRef = ref(dayjs); | |||||
| let props = defineProps(['customer_record']); | |||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| const onSubmit = () => { | |||||
| // PostJobapplicantAdd(createForm.value).then(res => { | |||||
| // message.success('基本资料保存成功') | |||||
| // emit('toNext', {activeKey: "2"}) | |||||
| // }) | |||||
| emit('toNext', { activeKey: "4" }) | |||||
| } | |||||
| let createForm = ref<JobseekerIntroductionType.JobseekerIntroductionFormType>(dataForm) | |||||
| let addOtherForm = ref<JobseekerIntroductionType.OtherFormType>(otherDataForm) | |||||
| const options = ref({ | |||||
| debug: 'info', | |||||
| modules: { | |||||
| }, | |||||
| placeholder: '请输入个人简介', | |||||
| theme: 'snow' | |||||
| onMounted(() => { | |||||
| getBasic() | |||||
| }) | }) | ||||
| const getBasic = () => { | |||||
| GetJobapplicantIntroductiondetail({ customer_id: props.customer_record.customer_id }).then(res => { | |||||
| createForm.value = intersectionAlike(createForm.value, res.data) | |||||
| createForm.value.id = res.data.id; | |||||
| createForm.value.customer_id = res.data.customer_id; | |||||
| addOtherForm.value = { | |||||
| description: res.data.description, | |||||
| } | |||||
| }) | |||||
| } | |||||
| let createForm = ref({ | |||||
| description: '', | |||||
| }) | |||||
| // 富文本 | |||||
| const onEditorUpdate = (data) => { | |||||
| createForm.value.description = data | |||||
| } | |||||
| const resetForm = () => { | |||||
| createForm.value = { | |||||
| description: '', | |||||
| const sumbitForm = () => { | |||||
| if (createForm.value.id) { | |||||
| PostJobapplicantUpdateintroduction(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| // resetForm() | |||||
| getBasic(); | |||||
| }).catch(err => { | |||||
| }) | |||||
| } else { | |||||
| PostJobapplicantAddintroduction(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| // resetForm() | |||||
| getBasic(); | |||||
| }).catch(err => { | |||||
| }) | |||||
| } | } | ||||
| } | } | ||||
| const resetForm = () => { | |||||
| createForm.value = reset().dataForm as JobseekerIntroductionType.JobseekerIntroductionFormType; | |||||
| addOtherForm.value = reset().otherDataForm as JobseekerIntroductionType.OtherFormType; | |||||
| } | |||||
| // watch(() => [props.form_state], (newVal) => { | |||||
| // state.value = newVal[0]; | |||||
| // getBasic(); | |||||
| // }) | |||||
| </script> | </script> | ||||
| <style> | <style> |
| export let dataForm = { | |||||
| english: 0, | |||||
| mandarin: 0, | |||||
| cantonese: 0, | |||||
| other_language: 0, | |||||
| computer_skills: "" | |||||
| } | |||||
| export let otherDataForm = { | |||||
| } | |||||
| export const reset = () => { | |||||
| dataForm = { | |||||
| english: 0, | |||||
| mandarin: 0, | |||||
| cantonese: 0, | |||||
| other_language: 0, | |||||
| computer_skills: "" | |||||
| } | |||||
| otherDataForm = { | |||||
| } | |||||
| return { dataForm, otherDataForm } | |||||
| } |
| declare namespace JobseekerSkillType { | |||||
| type JobseekerSkillFormType = { | |||||
| id ?: Number, | |||||
| english?: Number, | |||||
| mandarin?: Number, | |||||
| cantonese?: Number, | |||||
| other_language?: Number, | |||||
| computer_skills?: String, | |||||
| } | |||||
| } |
| <template> | <template> | ||||
| <a-form :model="createForm" :label-col="{span: 4}" labelAlign="left"> | |||||
| <a-row gutter="20"> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="英语" name="english"> | |||||
| <a-c-select :dict="2008" placeholder="请选择掌握程度" @saveSelect="saveEnglish"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="国语" name="mandarin"> | |||||
| <a-c-select :dict="2008" placeholder="请选择掌握程度" @saveSelect="saveMandarin"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="粤语" name="cantonese"> | |||||
| <a-c-select :dict="2008" placeholder="请选择掌握程度" @saveSelect="saveCantonese"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="第二外语" name="other_language"> | |||||
| <a-c-select :dict="2007" placeholder="请选择掌握程度" @saveSelect="saveOtherLanguage"></a-c-select> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="计算机能力" name="computer_skills"> | |||||
| <a-input v-model:value="createForm.computer_skills" placeholder="请输入计算机能力" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| </a-row> | |||||
| <a-row gutter="20"> | |||||
| <a-col> | |||||
| <a-button type="primary" @click="onSubmit">保存</a-button> | |||||
| </a-col> | |||||
| <a-col> | |||||
| <a-button style="margin-left: 10px">重置</a-button> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| <div style="width: 100%;"> | |||||
| <a-form :model="createForm" layout="vertical" class="resume-form"> | |||||
| <a-row :gutter="20"> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="英语" name="english"> | |||||
| <a-xuanze :dict="2008" placeholder="请选择掌握程度" @saveSelect="saveEnglish" | |||||
| :select_content="createForm.english"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="国语" name="mandarin"> | |||||
| <a-xuanze :dict="2008" placeholder="请选择掌握程度" @saveSelect="saveMandarin" | |||||
| :select_content="createForm.mandarin"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="粤语" name="cantonese"> | |||||
| <a-xuanze :dict="2008" placeholder="请选择掌握程度" @saveSelect="saveCantonese" | |||||
| :select_content="createForm.cantonese"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="第二外语" name="other_language"> | |||||
| <a-xuanze :dict="2007" placeholder="请选择掌握程度" @saveSelect="saveOtherLanguage" | |||||
| :select_content="createForm.other_language"></a-xuanze> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="计算机能力" name="computer_skills"> | |||||
| <a-input v-model:value="createForm.computer_skills" placeholder="请输入计算机能力"/> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="flex-end"> | |||||
| <a-space> | |||||
| <a-button @click="resetForm" >取消</a-button> | |||||
| <a-button type="primary" @click="sumbitForm" >保存</a-button> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| </div> | |||||
| </template> | </template> | ||||
| <script lang="ts" setup> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | |||||
| import { message } from 'ant-design-vue'; | |||||
| import { PostJobapplicantAdd, PostJobapplicantUpdate } from '@/apis/models'; | |||||
| <script setup lang="ts"> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue'; | |||||
| import { PostJobapplicantAddskill, PostJobapplicantUpdateskill, PostJobapplicantSkilldetail } from '@/apis/models'; | |||||
| import { intersectionAlike } from '@/utils/dataHelper'; | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
| import { dataForm, otherDataForm, reset } from '@/views/jobSeeker/resume/add/skill/data.ts'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||||
| const dayjsRef = ref(dayjs); | |||||
| let props = defineProps(['customer_record']); | |||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| const onSubmit = () => { | |||||
| // PostJobapplicantAdd(createForm.value).then(res => { | |||||
| // message.success('基本资料保存成功') | |||||
| // emit('toNext', {activeKey: "2"}) | |||||
| // }) | |||||
| emit('toNext', { activeKey: "5" }) | |||||
| } | |||||
| let createForm = ref({ | |||||
| english: 0, | |||||
| mandarin: 0, | |||||
| cantonese: 0, | |||||
| other_language: 0, | |||||
| computer_skills: "" | |||||
| let createForm = ref<JobseekerSkillType.JobseekerSkillFormType>(dataForm) | |||||
| onMounted(() => { | |||||
| getBasic() | |||||
| }) | }) | ||||
| const resetForm = () => { | |||||
| createForm.value = { | |||||
| english: 0, | |||||
| mandarin: 0, | |||||
| cantonese: 0, | |||||
| other_language: 0, | |||||
| computer_skills: "" | |||||
| } | |||||
| const getBasic = () => { | |||||
| PostJobapplicantSkilldetail({customer_id: props.customer_record.customer_id}).then(res => { | |||||
| createForm.value = intersectionAlike(createForm.value, res.data) | |||||
| createForm.value.id = res.data.id; | |||||
| createForm.value.customer_id = res.data.customer_id; | |||||
| }) | |||||
| } | } | ||||
| // 英语 | // 英语 | ||||
| const saveEnglish = (data) => { | const saveEnglish = (data) => { | ||||
| createForm.value.english = data.val; | |||||
| createForm.value.english = data.val.key; | |||||
| } | } | ||||
| // 国语 | // 国语 | ||||
| const saveMandarin = (data) => { | const saveMandarin = (data) => { | ||||
| createForm.value.mandarin = data.val; | |||||
| createForm.value.mandarin = data.val.key; | |||||
| } | } | ||||
| // 粤语 | // 粤语 | ||||
| const saveCantonese = (data) => { | const saveCantonese = (data) => { | ||||
| createForm.value.cantonese = data.val; | |||||
| createForm.value.cantonese = data.val.key; | |||||
| } | } | ||||
| // 第二外语 | // 第二外语 | ||||
| const saveOtherLanguage = (data) => { | const saveOtherLanguage = (data) => { | ||||
| createForm.value.english = data.val; | |||||
| createForm.value.other_language = data.val.key; | |||||
| } | |||||
| const sumbitForm = () => { | |||||
| if (createForm.value.id) { | |||||
| PostJobapplicantUpdateskill(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| getBasic(); | |||||
| // resetForm() | |||||
| }).catch(err => { | |||||
| }) | |||||
| } else { | |||||
| PostJobapplicantAddskill(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| getBasic(); | |||||
| // resetForm() | |||||
| }).catch(err => { | |||||
| }) | |||||
| } | |||||
| } | } | ||||
| const resetForm = () => { | |||||
| createForm.value = reset().dataForm as JobseekerSkillType.JobseekerSkillFormType; | |||||
| } | |||||
| // watch(() => [props.form_state], (newVal) => { | |||||
| // state.value = newVal[0]; | |||||
| // getBasic(); | |||||
| // }) | |||||
| </script> | </script> | ||||
| <style> | <style> | ||||
| </style> | |||||
| </style> |
| export let dataForm = { | |||||
| start_year: 0, | |||||
| start_month: 0, | |||||
| end_year: 0, | |||||
| end_month: 0, | |||||
| end_today: 0, | |||||
| school_or_institution: '', | |||||
| major: '', | |||||
| certificate: '', | |||||
| awards: '', | |||||
| positions_held: '', | |||||
| } | |||||
| export let otherDataForm = { | |||||
| } | |||||
| export const reset = () => { | |||||
| dataForm = { | |||||
| start_year: 0, | |||||
| start_month: 0, | |||||
| end_year: 0, | |||||
| end_month: 0, | |||||
| end_today: 0, | |||||
| school_or_institution: '', | |||||
| major: '', | |||||
| certificate: '', | |||||
| awards: '', | |||||
| positions_held: '', | |||||
| } | |||||
| otherDataForm = { | |||||
| } | |||||
| return { dataForm, otherDataForm } | |||||
| } |
| declare namespace trainType { | |||||
| type addTrainType = { | |||||
| declare namespace JobseekerTrainType { | |||||
| type JobseekerTrainFormType = { | |||||
| id ?:Number, | |||||
| start_year ?: Number, | start_year ?: Number, | ||||
| start_month ?: Number, | start_month ?: Number, | ||||
| end_year ?: Number, | end_year ?: Number, |
| <template> | <template> | ||||
| <a-form :model="createForm" :label-col="{span: 4}" labelAlign="left"> | |||||
| <a-row gutter="20"> | |||||
| <a-col span="24"> | |||||
| <a-form-item required label="是否至今" name="是否至今" :label-col="{span: 0}"> | |||||
| <a-radio-group v-model:value="createForm.end_today" button-style="solid"> | |||||
| <a-radio-button :value="1">非至今</a-radio-button> | |||||
| <a-radio-button :value="2">至今</a-radio-button> | |||||
| </a-radio-group> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="学校/培训机构" name="school_or_institution" :label-col="{span: 5}"> | |||||
| <a-input v-model:value="createForm.school_or_institution" placeholder="请输入学校/培训机构" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item required label="专业" name="major"> | |||||
| <a-input v-model:value="createForm.major" placeholder="请输入专业" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="获得证书" name="certificate"> | |||||
| <a-input v-model:value="createForm.certificate" placeholder="请输入获得证书" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="16"> | |||||
| <a-form-item label="曾获学校奖项或技能比赛奖项" name="certificate" :label-col="{span: 4}"> | |||||
| <a-input v-model:value="createForm.awards" placeholder="请输入曾获学校奖项或技能比赛奖项" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="8"> | |||||
| <a-form-item label="曾任职务" name="awards"> | |||||
| <a-input v-model:value="createForm.awards" placeholder="请输入曾任职务" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| </a-row> | |||||
| <a-row gutter="20"> | |||||
| <a-col> | |||||
| <a-button type="primary" @click="onSubmit">保存</a-button> | |||||
| </a-col> | |||||
| <a-col> | |||||
| <a-button style="margin-left: 10px">重置</a-button> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| <a-button type="primary" @click="addForm()">添加培训经历</a-button> | |||||
| <a-list :data-source="trainList"> | |||||
| <template #loadMore v-if="trainList.length > 0"> | |||||
| <a-flex justify="center"> | |||||
| <a-space> | |||||
| <div v-if="!loading"> | |||||
| <a-button @click="onLoadMore">加载更多</a-button> | |||||
| </div> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </template> | |||||
| <template #renderItem="{ item, index }"> | |||||
| <a-list-item> | |||||
| <a-skeleton avatar :title="false" :loading="!!loading" active> | |||||
| <a-card :title="item.school_or_institution" style="width: 100%"> | |||||
| <template #extra> | |||||
| <a-space> | |||||
| <a-button v-if="item.id" @click="toEdit(item, index)" type="primary" size="small"> | |||||
| 编辑 | |||||
| </a-button> | |||||
| <a-popconfirm title="是否删除该经历" @confirm="del(item.id)"> | |||||
| <a-button v-if="item.id" size="small" danger> | |||||
| 删除 | |||||
| </a-button> | |||||
| </a-popconfirm> | |||||
| </a-space> | |||||
| </template> | |||||
| <a-form :model="createForm" layout="vertical" v-if="item.edit" class="resume-form"> | |||||
| <a-row :gutter="20"> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="培训/教育时间"> | |||||
| <a-range-picker v-model:value="time" @Change="getRange" picker="month" | |||||
| style="width: 100%;" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="是否至今"> | |||||
| <a-radio-group v-model:value="createForm.end_today" button-style="solid" | |||||
| style="width: 100%;"> | |||||
| <a-radio-button :value="1" style="width: 50%;">非至今</a-radio-button> | |||||
| <a-radio-button :value="2" style="width: 50%;">至今</a-radio-button> | |||||
| </a-radio-group> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="学校/培训机构" name="school_or_institution"> | |||||
| <a-input v-model:value="createForm.school_or_institution" | |||||
| placeholder="请输入学校/培训机构" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="专业" name="major"> | |||||
| <a-input v-model:value="createForm.major" placeholder="请输入专业" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="获得证书" name="certificate"> | |||||
| <a-input v-model:value="createForm.certificate" placeholder="请输入获得证书" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="曾获学校奖项或技能比赛奖项" name="certificate"> | |||||
| <a-input v-model:value="createForm.awards" placeholder="请输入曾获学校奖项或技能比赛奖项" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="12"> | |||||
| <a-form-item required label="曾任职务" name="positions_held"> | |||||
| <a-input v-model:value="createForm.positions_held" placeholder="请输入曾任职务" /> | |||||
| </a-form-item> | |||||
| </a-col> | |||||
| <a-col span="24"> | |||||
| <a-flex justify="flex-end"> | |||||
| <a-space> | |||||
| <a-button @click="resetForm(index)">取消</a-button> | |||||
| <a-button type="primary" @click="saveForm(index)">保存</a-button> | |||||
| </a-space> | |||||
| </a-flex> | |||||
| </a-col> | |||||
| </a-row> | |||||
| </a-form> | |||||
| <template v-else> | |||||
| <p>专业:{{item.major}}</p> | |||||
| <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> | |||||
| </template> | |||||
| </a-card> | |||||
| </a-skeleton> | |||||
| </a-list-item> | |||||
| </template> | |||||
| </a-list> | |||||
| </template> | </template> | ||||
| <script lang="ts" setup> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits } from 'vue'; | |||||
| import { message } from 'ant-design-vue'; | |||||
| import { PostJobapplicantAdd, PostJobapplicantUpdate } from '@/apis/models'; | |||||
| <script setup lang="ts"> | |||||
| import { ref, onMounted, computed, defineProps, watch, defineEmits, createVNode } from 'vue'; | |||||
| import { PostJobapplicantAddtraining, PostJobapplicantDeltraining, PostJobapplicantUpdatetraining, PostJobapplicantListtraining, PostJobapplicantTrainingdetail } from '@/apis/models'; | |||||
| import { intersectionAlike } from '@/utils/dataHelper'; | |||||
| import { warnToast, successToast } from '@/utils/toastHelper'; | |||||
| import { dataForm, otherDataForm, reset } from '@/views/jobSeeker/resume/add/train/data.ts'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | |||||
| let { store, commomParams, dayjs, richOption, ExclamationCircleOutlined, Modal } = useCommon(); | |||||
| const dayjsRef = ref(dayjs); | |||||
| let props = defineProps(['customer_record']); | |||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| const onSubmit = () => { | |||||
| // PostJobapplicantAdd(createForm.value).then(res => { | |||||
| // message.success('基本资料保存成功') | |||||
| // emit('toNext', {activeKey: "2"}) | |||||
| // }) | |||||
| emit('toNext', { activeKey: "6" }) | |||||
| } | |||||
| let createForm = ref({ | |||||
| start_year: 0, | |||||
| start_month: 0, | |||||
| end_year: 0, | |||||
| end_month: 0, | |||||
| end_today: 0, | |||||
| school_or_institution: '', | |||||
| major: '', | |||||
| certificate: '', | |||||
| awards: '', | |||||
| positions_held: '', | |||||
| let state = ref<Boolean>(false) | |||||
| let loading = ref<Boolean>(true); | |||||
| let trainList = ref([]); | |||||
| let createForm = ref<JobseekerTrainType.JobseekerTrainFormType>(dataForm) | |||||
| let time = ref('') | |||||
| onMounted(() => { | |||||
| commomParams.value.search.customer_id = props.customer_record.customer_id | |||||
| getData(); | |||||
| }) | }) | ||||
| const resetForm = () => { | |||||
| createForm.value = { | |||||
| start_year: 0, | |||||
| start_month: 0, | |||||
| end_year: 0, | |||||
| end_month: 0, | |||||
| end_today: 0, | |||||
| school_or_institution: '', | |||||
| major: '', | |||||
| certificate: '', | |||||
| awards: '', | |||||
| positions_held: '', | |||||
| const getPage = (data : object) => { | |||||
| commomParams.value.search.page = data.current; | |||||
| commomParams.value.search.pagesize = data.pageSize; | |||||
| getData(); | |||||
| } | |||||
| const getData = async () => { | |||||
| try { | |||||
| let res = await PostJobapplicantListtraining(commomParams.value.search); | |||||
| loading.value = false; | |||||
| if (!res.data.jobapplicanttrainings || res.data.jobapplicanttrainings.length <= 0) { | |||||
| warnToast('无更多数据') | |||||
| commomParams.value.search.page = 1 | |||||
| } | |||||
| trainList.value = res.data.jobapplicanttrainings ? trainList.value.concat(res.data.jobapplicanttrainings) : trainList.value.concat([]); | |||||
| trainList.value.map(item => { | |||||
| return item.edit = false | |||||
| }) | |||||
| } catch { | |||||
| loading.value = false; | |||||
| } | } | ||||
| } | } | ||||
| const onLoadMore = () => { | |||||
| commomParams.value.search.page = commomParams.value.search.page + 1; | |||||
| getData(); | |||||
| } | |||||
| const addForm = () => { | |||||
| trainList.value.unshift({edit: true}) | |||||
| createForm.value.customer_id = props.customer_record.customer_id; | |||||
| } | |||||
| // 详情 | |||||
| const getDetail = (val) => { | |||||
| PostJobapplicantTrainingdetail({ id: val.id, customer_id: val.customer_id }).then(res => { | |||||
| createForm.value = intersectionAlike(createForm.value, res.data) | |||||
| createForm.value.id = res.data.id; | |||||
| createForm.value.customer_id = res.data.customer_id; | |||||
| time.value = [dayjsRef.value(`${res.data.start_year}-${res.data.start_month}`), dayjsRef.value(`${res.data.end_year}-${res.data.end_month}`)] | |||||
| }) | |||||
| } | |||||
| const getRange = (val) => { | |||||
| let day1 = dayjsRef.value(val[0]).format('YYYY-MM-DD').split('-'); | |||||
| let day2 = dayjsRef.value(val[1]).format('YYYY-MM-DD').split('-'); | |||||
| createForm.value.start_year = parseInt(day1[0], 10); | |||||
| createForm.value.start_month = parseInt(day1[1], 10); | |||||
| createForm.value.end_year = parseInt(day2[0], 10); | |||||
| createForm.value.end_month = parseInt(day2[1], 10); | |||||
| } | |||||
| const saveForm = (index : Number) => { | |||||
| if (createForm.value.id) { | |||||
| PostJobapplicantUpdatetraining(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| // getData(); | |||||
| resetForm(index) | |||||
| }).catch(err => { | |||||
| }) | |||||
| } else { | |||||
| PostJobapplicantAddtraining(createForm.value).then(res => { | |||||
| successToast('保存成功'); | |||||
| resetForm(index) | |||||
| }).catch(err => { | |||||
| }) | |||||
| } | |||||
| } | |||||
| const resetForm = (index : Number) => { | |||||
| trainList.value = []; | |||||
| time.value = '' | |||||
| createForm.value = reset().dataForm as JobseekerTrainType.JobseekerTrainFormType; | |||||
| getData(); | |||||
| } | |||||
| // watch(() => [props.form_state], (newVal) => { | |||||
| // state.value = newVal[0]; | |||||
| // }) | |||||
| const toEdit = (item : Object, index : Number) => { | |||||
| createForm.value.id = item.id; | |||||
| getDetail(item) | |||||
| trainList.value[index].edit = true | |||||
| } | |||||
| const del = (id : number) => { | |||||
| commomParams.value.delParam = { id: id }; | |||||
| PostJobapplicantDeltraining(commomParams.value.delParam).then(res => { | |||||
| successToast('删除成功'); | |||||
| trainList.value = []; | |||||
| getData(); | |||||
| }) | |||||
| } | |||||
| </script> | </script> | ||||
| <style> | |||||
| <style scoped> | |||||
| :deep(.ant-list-item) { | |||||
| padding: 12px 0 !important; | |||||
| border-block-end: none !important; | |||||
| } | |||||
| </style> | </style> |
| <template> | <template> | ||||
| <a-modal v-model:visible="openOtherModel_1" title="预览简历" ok-text="提交" cancel-text="取消" @ok="sumbitForm" | <a-modal v-model:visible="openOtherModel_1" title="预览简历" ok-text="提交" cancel-text="取消" @ok="sumbitForm" | ||||
| @cancel="cancelModal" width="50%" :footer="null"> | |||||
| @cancel="cancelModal" width="60%" :footer="null"> | |||||
| <a-spin :spinning="spinning"> | <a-spin :spinning="spinning"> | ||||
| <a-typography> | <a-typography> | ||||
| <a-typography-title :level="4"> | <a-typography-title :level="4"> | ||||
| <div class="text-decoration"> | <div class="text-decoration"> | ||||
| <div class="text-content">基本资料</div> | <div class="text-content">基本资料</div> | ||||
| </div> | </div> | ||||
| </a-typography-title> | |||||
| </a-typography-title> | |||||
| <a-typography-paragraph> | <a-typography-paragraph> | ||||
| <a-row :gutter="[20,20]"> | <a-row :gutter="[20,20]"> | ||||
| <a-col span="24"> | <a-col span="24"> | ||||
| <a-row :gutter="[20,20]"> | <a-row :gutter="[20,20]"> | ||||
| <a-col span="10"> | <a-col span="10"> | ||||
| <a-row> | <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-space direction="vertical"> | |||||
| <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-space> | |||||
| </a-row> | </a-row> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="10"> | |||||
| <a-col span="8"> | |||||
| <a-row> | <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-space direction="vertical"> | |||||
| <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-space> | |||||
| </a-row> | </a-row> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="4"> | |||||
| <a-image :src="'https://rcsc-test.jcjob.cn/img'+detail.photo" /> | |||||
| <a-col span="6"> | |||||
| <image-container :need="true" | |||||
| :imgObj="{src: detail.photo? imageprefix+detail.photo : '/images/gongzhonghao.png' ,width: '150px',height:'210px'}"></image-container> | |||||
| </a-col> | </a-col> | ||||
| </a-row> | </a-row> | ||||
| </a-col> | </a-col> | ||||
| </a-row> | </a-row> | ||||
| </a-typography-paragraph> | </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 class="text-content">个人简介</div> | ||||
| </div> | |||||
| </a-typography-title> | |||||
| </div></a-typography-title> | |||||
| <a-typography-paragraph> | <a-typography-paragraph> | ||||
| <div v-html="detail.introduction"></div> | <div v-html="detail.introduction"></div> | ||||
| </a-typography-paragraph> | </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 class="text-content">求职期望</div> | ||||
| </div> | |||||
| </a-typography-title> | |||||
| </div></a-typography-title> | |||||
| <a-typography-paragraph> | <a-typography-paragraph> | ||||
| <a-row> | <a-row> | ||||
| <a-col span="24"> | <a-col span="24"> | ||||
| <a-row> | <a-row> | ||||
| <a-col span="8" v-if="detail.desire_areas"> | <a-col span="8" v-if="detail.desire_areas"> | ||||
| <a-row> | <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-space direction="vertical"> | |||||
| <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-space> | |||||
| </a-row> | </a-row> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="8" v-if="detail.desire_positions"> | <a-col span="8" v-if="detail.desire_positions"> | ||||
| <a-row> | <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-space direction="vertical"> | |||||
| <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-space> | |||||
| </a-row> | </a-row> | ||||
| </a-col> | </a-col> | ||||
| <a-col span="8" v-if="detail.desire_industrys"> | <a-col span="8" v-if="detail.desire_industrys"> | ||||
| <a-row> | <a-row> | ||||
| <a-col span="24" v-for="(item,index) in detail.desire_industrys"> | |||||
| 期望行业{{index + 1}}:{{item.industry_txt}} | |||||
| </a-col> | |||||
| <a-space direction="vertical"> | |||||
| <a-col span="24" v-for="(item,index) in detail.desire_industrys"> | |||||
| 期望行业{{index + 1}}:{{item.industry_txt}} | |||||
| </a-col> | |||||
| </a-space> | |||||
| </a-row> | </a-row> | ||||
| </a-col> | </a-col> | ||||
| </a-row> | </a-row> | ||||
| </a-row> | </a-row> | ||||
| </a-typography-paragraph> | </a-typography-paragraph> | ||||
| </a-typography> | </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-typography-paragraph> | ||||
| <a-row> | <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-space direction="vertical"> | |||||
| <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-space> | |||||
| </a-row> | </a-row> | ||||
| </a-typography-paragraph> | </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> | <a-typography-paragraph> | ||||
| <template v-for="(item,index) in detail.experiences"> | <template v-for="(item,index) in detail.experiences"> | ||||
| <a-card :title="item.company_name" style="margin-bottom: 10px;"> | <a-card :title="item.company_name" style="margin-bottom: 10px;"> | ||||
| </a-card> | </a-card> | ||||
| </template> | </template> | ||||
| </a-typography-paragraph> | </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> | <a-typography-paragraph> | ||||
| <template v-for="(item,index) in detail.trainings"> | <template v-for="(item,index) in detail.trainings"> | ||||
| <a-card :title="item.school_or_institution" style="margin-bottom: 10px;"> | <a-card :title="item.school_or_institution" style="margin-bottom: 10px;"> | ||||
| import { GetJobseekerDetail, GetJobapplicantIntroductiondetail, PostJobapplicantTrainingdetail, PostJobapplicantDesireindustrydetail, PostJobapplicantExperiencedetail } from '@/apis/models'; | import { GetJobseekerDetail, GetJobapplicantIntroductiondetail, PostJobapplicantTrainingdetail, PostJobapplicantDesireindustrydetail, PostJobapplicantExperiencedetail } from '@/apis/models'; | ||||
| import { message } from 'ant-design-vue'; | import { message } from 'ant-design-vue'; | ||||
| import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
| let { store, commomParams, hideOtherModal1, openOtherModel_1 } = useCommon(); | |||||
| let { store, commomParams, hideOtherModal1, openOtherModel_1, imageprefix} = useCommon(); | |||||
| const emit = defineEmits(); | const emit = defineEmits(); | ||||
| let props = defineProps(['detail_record']); | let props = defineProps(['detail_record']); | ||||
| let detailTitle = ref<String>('') | let detailTitle = ref<String>('') | ||||
| let detail = ref<Boolean>(true) | |||||
| let activeKey = ref<String>(["1", "2", "3", "4", "5", "6", "7", "8"]); | |||||
| let detail = ref<Object>({}) | |||||
| let trainList = ref<Object[]>([]) | let trainList = ref<Object[]>([]) | ||||
| let experienceList = ref<Object[]>([]) | let experienceList = ref<Object[]>([]) | ||||
| let introduction = ref<Object>({}) | let introduction = ref<Object>({}) | ||||
| openOtherModel_1 = computed(() => { | openOtherModel_1 = computed(() => { | ||||
| return store.state.openOtherModel_1; | return store.state.openOtherModel_1; | ||||
| }) | }) | ||||
| const items = [ | |||||
| { | |||||
| title: '一般', | |||||
| description: 'This is a Step 1.', | |||||
| }, | |||||
| { | |||||
| title: '熟练', | |||||
| description: 'This is a Step 2.', | |||||
| }, | |||||
| { | |||||
| title: 'Step 3', | |||||
| description: 'This is a Step 3.', | |||||
| }, | |||||
| ]; | |||||
| watch(() => [props.detail_record], (newVal) => { | watch(() => [props.detail_record], (newVal) => { | ||||
| if (newVal[0]) { | if (newVal[0]) { | ||||
| spinning.value = false | spinning.value = false | ||||
| GetJobseekerDetail({ customer_id: props.detail_record.customer_id }).then(res => { | |||||
| GetJobseekerDetail({ customer_id: props.detail_record.customer_id, application_id: props.detail_record.id }).then(res => { | |||||
| detail.value = res.data | detail.value = res.data | ||||
| console.log(detail.value) | |||||
| }) | }) | ||||
| } | } | ||||
| }) | |||||
| }, { immediate: true }) | |||||
| const cancelModal = () => { | const cancelModal = () => { | ||||
| emit('closePermission'); | |||||
| hideOtherModal1() | hideOtherModal1() | ||||
| } | } | ||||
| </script> | </script> | ||||
| padding: 6px; | padding: 6px; | ||||
| // padding-top: 6px; | // padding-top: 6px; | ||||
| } | } | ||||
| .text-decoration { | .text-decoration { | ||||
| position: relative; | position: relative; | ||||
| display: inline-block; | display: inline-block; | ||||
| overflow: visible; | overflow: visible; | ||||
| } | } | ||||
| .text-decoration::before { | .text-decoration::before { | ||||
| content: ''; | content: ''; | ||||
| width: 6px; | width: 6px; | ||||
| position: absolute; | position: absolute; | ||||
| top: 4px | top: 4px | ||||
| } | } | ||||
| .text-content { | .text-content { | ||||
| position: relative; | position: relative; | ||||
| margin-left: 20px; | margin-left: 20px; |
| @page="getPage" :loading="loading"> | @page="getPage" :loading="loading"> | ||||
| <template #default="{ record }"> | <template #default="{ record }"> | ||||
| <a-row :gutter="10"> | <a-row :gutter="10"> | ||||
| <!-- <a-col><a-button type="primary" size="small" primary @click="edit(record)">编辑</a-button></a-col> --> | |||||
| <a-col><a-button type="primary" size="small" primary @click="edit(record)">编辑</a-button></a-col> | |||||
| <a-col><a-button type="primary" size="small" primary @click="detail(record)">预览</a-button></a-col> | <a-col><a-button type="primary" size="small" primary @click="detail(record)">预览</a-button></a-col> | ||||
| <a-popconfirm title="该简历通过审核?" @confirm="pass(record)"> | <a-popconfirm title="该简历通过审核?" @confirm="pass(record)"> | ||||
| <a-col v-if="record.status == 1"><a-button type="primary" size="small" primary>通过</a-button></a-col> | |||||
| <a-col v-if="record.status == 1"><a-button type="primary" size="small" >通过</a-button></a-col> | |||||
| </a-popconfirm> | </a-popconfirm> | ||||
| <a-col v-if="record.status == 1"><a-button type="primary" size="small" primary | |||||
| <a-col v-if="record.status == 1"><a-button type="primary" size="small" | |||||
| @click="interview(record)">不通过</a-button></a-col> | @click="interview(record)">不通过</a-button></a-col> | ||||
| <a-popconfirm title="是否要推送该简历到ES?" @confirm="pushEs(record.customer_id)"> | |||||
| <!-- <a-popconfirm title="是否要推送该简历到ES?" @confirm="pushEs(record.customer_id)"> | |||||
| <a-col><a-button type="primary" size="small" primary>推送该简历到ES</a-button></a-col> | <a-col><a-button type="primary" size="small" primary>推送该简历到ES</a-button></a-col> | ||||
| </a-popconfirm> | |||||
| </a-popconfirm> --> | |||||
| </a-row> | </a-row> | ||||
| </template> | </template> | ||||
| </a-c-table> | </a-c-table> | ||||
| <resume-add v-if="openForm" :edit_record="edit_record" @successAdd="successAdd" @closeAdd="closeAdd"></resume-add> | |||||
| <resume-detail :detail_record="detail_record" @closeAdd="closePermission"></resume-detail> | <resume-detail :detail_record="detail_record" @closeAdd="closePermission"></resume-detail> | ||||
| <a-modal v-model:open="openInterview" centered title="不通过原因" @ok="unpass"> | <a-modal v-model:open="openInterview" centered title="不通过原因" @ok="unpass"> | ||||
| <a-textarea v-model:value="form.aduit_memo" placeholder="请输入不通过原因" /> | <a-textarea v-model:value="form.aduit_memo" placeholder="请输入不通过原因" /> | ||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||
| import { ref, onMounted, watch, computed, createVNode } from 'vue'; | import { ref, onMounted, watch, computed, createVNode } from 'vue'; | ||||
| import ResumeSearch from '@/views/jobSeeker/resume/search/index.vue'; | import ResumeSearch from '@/views/jobSeeker/resume/search/index.vue'; | ||||
| // import ResumeAdd from '@/views/jobSeeker/resume/add/add.vue'; | |||||
| import ResumeAdd from '@/views/jobSeeker/resume/add/add.vue'; | |||||
| import ResumeDetail from '@/views/jobSeeker/resume/detail/detail.vue'; | import ResumeDetail from '@/views/jobSeeker/resume/detail/detail.vue'; | ||||
| import { PostJobseekerList, PostJobapplicantUpdate, PostEsJobseeker } from '@/apis/models'; | |||||
| import { PostJobseekerList, PostJobapplicantUpdate, PostEsJobseeker , GetCustomerUpdate} from '@/apis/models'; | |||||
| import { useCommon } from '@/hooks/useCommon'; | import { useCommon } from '@/hooks/useCommon'; | ||||
| import { cols } from '@/views/jobSeeker/resume/columns'; | import { cols } from '@/views/jobSeeker/resume/columns'; | ||||
| import { UserOutlined, DownOutlined } from '@ant-design/icons-vue'; | |||||
| let { store, commomParams, showModal, showOtherModal1, message, ExclamationCircleOutlined, Modal } = useCommon(); | let { store, commomParams, showModal, showOtherModal1, message, ExclamationCircleOutlined, Modal } = useCommon(); | ||||
| let loading = ref<Boolean>(true); | let loading = ref<Boolean>(true); | ||||
| let openForm = ref<Boolean>(false); | |||||
| onMounted(() => { | onMounted(() => { | ||||
| commomParams.value.search.rand = false | |||||
| getData(); | getData(); | ||||
| }) | }) | ||||
| } | } | ||||
| const clearData = (data : object) => { | const clearData = (data : object) => { | ||||
| commomParams.value.search.rand = false | |||||
| if (data) { | if (data) { | ||||
| commomParams.value.search = data | commomParams.value.search = data | ||||
| } else { | } else { | ||||
| pagesize: 10, | pagesize: 10, | ||||
| sort: 'id', | sort: 'id', | ||||
| sortby: 'desc', | sortby: 'desc', | ||||
| keyword: '' | |||||
| keyword: '', | |||||
| rand: false | |||||
| } | } | ||||
| } | } | ||||
| getData(); | getData(); | ||||
| // 编辑 | // 编辑 | ||||
| let edit_record = ref<Object>(null) | let edit_record = ref<Object>(null) | ||||
| const edit = (record : object) => { | const edit = (record : object) => { | ||||
| openForm.value = true | |||||
| edit_record.value = record; | edit_record.value = record; | ||||
| showModal() | showModal() | ||||
| } | } | ||||
| status: 3, | status: 3, | ||||
| aduit_memo: '' | aduit_memo: '' | ||||
| } | } | ||||
| const interview = (record : Object) => { | const interview = (record : Object) => { | ||||
| openInterview.value = true | openInterview.value = true | ||||
| form.id = record.id; | form.id = record.id; | ||||
| form.customer_id = record.customer_id; | form.customer_id = record.customer_id; | ||||
| form.status = 3 | form.status = 3 | ||||
| form.aduit_memo = '' | |||||
| form.aduit_memo = '不通过' | |||||
| } | } | ||||
| const unpass = () => { | const unpass = () => { | ||||
| PostJobapplicantUpdate(form).then(res => { | PostJobapplicantUpdate(form).then(res => { |
| interface listType { | interface listType { | ||||
| gender ?: String | gender ?: String | ||||
| education ?: Number | |||||
| education ?: Number, | |||||
| rand ?: Boolean | |||||
| } | } | ||||
| commomParams.value.search = commomParams.value.search as listType; | commomParams.value.search = commomParams.value.search as listType; | ||||
| commomParams.value.search.gender = null; | commomParams.value.search.gender = null; | ||||
| commomParams.value.search.education = null; | commomParams.value.search.education = null; | ||||
| commomParams.value.search.rand = false; | |||||
| // watch(() => props.search_params, (newVal) => { | // watch(() => props.search_params, (newVal) => { |
| <template #default="{ record }"> | <template #default="{ record }"> | ||||
| <a-row :gutter="10"> | <a-row :gutter="10"> | ||||
| <a-col><a-button type="primary" size="small" primary @click="edit(record)">编辑</a-button></a-col> | <a-col><a-button type="primary" size="small" primary @click="edit(record)">编辑</a-button></a-col> | ||||
| <a-popconfirm title="是否删除该地址?" @confirm="del(record.id)"> | |||||
| <a-popconfirm title="是否删除该配置项?" @confirm="del(record.id)"> | |||||
| <a-col><a-button type="primary" size="small" danger>删除</a-button></a-col> | <a-col><a-button type="primary" size="small" danger>删除</a-button></a-col> | ||||
| </a-popconfirm> | </a-popconfirm> | ||||
| </a-row> | </a-row> |