@@ -5,8 +5,8 @@ | |||
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |||
<title>Vite + Vue + TS</title> | |||
<script type="module" crossorigin src="/assets/index-Dy-MjAvr.js"></script> | |||
<link rel="stylesheet" crossorigin href="/assets/index-mwKMr71z.css"> | |||
<script type="module" crossorigin src="/assets/index-Jqf8tmaN.js"></script> | |||
<link rel="stylesheet" crossorigin href="/assets/index-xQS6ffIc.css"> | |||
</head> | |||
<body> | |||
<div id="app"></div> |
@@ -9,7 +9,7 @@ | |||
"version": "0.0.0", | |||
"dependencies": { | |||
"@vueup/vue-quill": "^1.2.0", | |||
"ant-design-vue": "^4.0.0-rc.6", | |||
"ant-design-vue": "^4.1.0", | |||
"axios": "^1.6.4", | |||
"dayjs": "^1.11.10", | |||
"less": "^4.2.0", | |||
@@ -27,7 +27,7 @@ | |||
}, | |||
"node_modules/@ant-design/colors": { | |||
"version": "6.0.0", | |||
"resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz", | |||
"resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz", | |||
"integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", | |||
"dependencies": { | |||
"@ctrl/tinycolor": "^3.4.0" | |||
@@ -35,13 +35,13 @@ | |||
}, | |||
"node_modules/@ant-design/icons-svg": { | |||
"version": "4.3.1", | |||
"resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.3.1.tgz", | |||
"resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.3.1.tgz", | |||
"integrity": "sha512-4QBZg8ccyC6LPIRii7A0bZUk3+lEDCLnhB+FVsflGdcWPPmV+j3fire4AwwoqHV/BibgvBmR9ZIo4s867smv+g==" | |||
}, | |||
"node_modules/@ant-design/icons-vue": { | |||
"version": "6.1.0", | |||
"resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz", | |||
"integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==", | |||
"version": "7.0.1", | |||
"resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz", | |||
"integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==", | |||
"dependencies": { | |||
"@ant-design/colors": "^6.0.0", | |||
"@ant-design/icons-svg": "^4.2.1" | |||
@@ -74,7 +74,7 @@ | |||
}, | |||
"node_modules/@ctrl/tinycolor": { | |||
"version": "3.6.1", | |||
"resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", | |||
"resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", | |||
"integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", | |||
"engines": { | |||
"node": ">=10" | |||
@@ -1111,12 +1111,12 @@ | |||
} | |||
}, | |||
"node_modules/ant-design-vue": { | |||
"version": "4.0.0-rc.6", | |||
"resolved": "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-4.0.0-rc.6.tgz", | |||
"integrity": "sha512-j+GAhgC1p1+nmQVbaEeY2miZ1h+8jBLlxTESX93MwcshVaYTkZNhiyddtl92VvEDJTedzuX+1oT3TP5wG/+tHg==", | |||
"version": "4.1.0", | |||
"resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-4.1.0.tgz", | |||
"integrity": "sha512-sVQAfTCxpGRfFykM033/0ZWfNWbsL8EsqhBP9knbP4Ptc52zG57mQsCPWvq6Cj3yqmDJW6ykY05v0KB+5rAPXg==", | |||
"dependencies": { | |||
"@ant-design/colors": "^6.0.0", | |||
"@ant-design/icons-vue": "^6.1.0", | |||
"@ant-design/icons-vue": "^7.0.0", | |||
"@babel/runtime": "^7.10.5", | |||
"@ctrl/tinycolor": "^3.5.0", | |||
"@emotion/hash": "^0.9.0", | |||
@@ -1141,10 +1141,6 @@ | |||
"engines": { | |||
"node": ">=12.22.0" | |||
}, | |||
"funding": { | |||
"type": "opencollective", | |||
"url": "https://opencollective.com/ant-design-vue" | |||
}, | |||
"peerDependencies": { | |||
"vue": ">=3.2.0" | |||
} |
@@ -9,15 +9,15 @@ | |||
"preview": "vite preview" | |||
}, | |||
"dependencies": { | |||
"ant-design-vue": "^4.0.0-rc.6", | |||
"@vueup/vue-quill": "^1.2.0", | |||
"ant-design-vue": "^4.1.0", | |||
"axios": "^1.6.4", | |||
"dayjs": "^1.11.10", | |||
"less": "^4.2.0", | |||
"less-loader": "^11.1.3", | |||
"vue": "^3.3.11", | |||
"vue-router": "^4.2.5", | |||
"vuex": "^4.0.2", | |||
"@vueup/vue-quill": "^1.2.0", | |||
"dayjs": "^1.11.10" | |||
"vuex": "^4.0.2" | |||
}, | |||
"devDependencies": { | |||
"@vitejs/plugin-vue": "^4.5.2", |
@@ -0,0 +1,76 @@ | |||
import axios from 'axios'; | |||
import * as typeHelper from '@/utils/typeHelper'; | |||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||
import { router } from '@/router'; | |||
const instance = axios.create({ | |||
// baseURL: 'http://114.132.85.7:8889', | |||
baseURL: 'https://rcsc-test.jcjob.cn/api', | |||
timeout: 30000, | |||
headers: { | |||
'Content-Type': 'application/json' | |||
}, | |||
withCredentials: false, | |||
}) | |||
// 请求拦截 | |||
// 添加请求拦截器 | |||
instance.interceptors.request.use(function (config) { | |||
sessionStorage.getItem('token') ? config.headers.Authorization = sessionStorage.getItem('token') : ''; | |||
// 在发送请求之前做些什么 | |||
return config; | |||
}, function (error) { | |||
// 对请求错误做些什么 | |||
return Promise.reject(error); | |||
}); | |||
// 添加响应拦截器 | |||
instance.interceptors.response.use(function (response) { | |||
switch(response.data.code) { | |||
case -1: | |||
warnToast(response.data.msg); | |||
break; | |||
case 0: | |||
break; | |||
case 1: | |||
return response; | |||
break; | |||
case 401: | |||
warnToast(response.data.msg); | |||
case 403: | |||
warnToast(response.data.msg); | |||
break; | |||
case 600: | |||
warnToast(response.data.msg); | |||
break; | |||
default: | |||
warnToast(response.data.msg); | |||
} | |||
// 2xx 范围内的状态码都会触发该函数。 | |||
// 对响应数据做点什么 | |||
return response; | |||
}, function (error) { | |||
// 超出 2xx 范围的状态码都会触发该函数。 | |||
// 对响应错误做点什么 | |||
return Promise.reject(error); | |||
}); | |||
export const httpGet : Function = (url : string, data : object, cb : Function) => { | |||
instance.get(url, { | |||
params: data | |||
}).then(res => { | |||
const resData = res; | |||
typeHelper.isFunction(cb) && cb(resData); | |||
}).catch(err => { | |||
cb(err.response) | |||
}) | |||
} | |||
export const httpPost : Function = (url : string, data : object, cb : Function) => { | |||
instance.post(url, data).then(res => { | |||
const resData = res; | |||
typeHelper.isFunction(cb) && cb(resData); | |||
}).catch(err => { | |||
cb(err.response) | |||
}) | |||
} |
@@ -0,0 +1,66 @@ | |||
import { postModel, getModel } from '@/utils/reqHelper' | |||
import { url } from '../url' | |||
// 字典数据 | |||
export const GetDictTree = getModel(url.dictTree); | |||
export const PostImageUpload = postModel(url.ImageUpload); | |||
export const PostJobseekerRegister = postModel(url.JobseekerRegister); | |||
export const PostCompanyRegister = postModel(url.CompanyRegister); | |||
export const GetCaptcha = getModel(url.Captcha); | |||
// 招聘会 | |||
export const PostRecruitmentBookcompany = getModel(url.RecruitmentBookcompany);// 获取招聘会参与的企业 | |||
export const PostRecruitmentList = getModel(url.RecruitmentList);// 招聘会列表 | |||
// 求职者管理中心 | |||
export const PostViewhistoryList = getModel(url.ViewhistoryList);// 获取简历被查看记录 | |||
export const PostInterviewList = getModel(url.InterviewList); // 获取应聘记录列表 | |||
// 企业管理中心 | |||
export const PostCompanyProfile = getModel(url.CompanyProfile); // 企业基本资料 | |||
export const PostCompanyLogin = postModel(url.CompanyLogin); // 登录 | |||
export const PostCompanyInfo = getModel(url.CompanyInfo); // 企业信息 | |||
export const PostCompanyProbationList = getModel(url.CompanyProbationList); // 见习基地 | |||
export const PostCompanyFamousList = getModel(url.CompanyFamousList); // 知名企业/推荐企业 | |||
// 用户管理 | |||
export const PostCompanyFee = getModel(url.CompanyFee); // 费用管理 | |||
export const PostCompanyPwdEdit = postModel(url.CompanyPwdEdit); // 修改密码 | |||
export const PostCompanyEmailEdit = postModel(url.CompanyEmailEdit); // 修改邮箱 | |||
// 职位管理 | |||
export const PostCompanyJobAdd = getModel(url.CompanyJobAdd); // 添加职位 | |||
export const PostCompanyJobEdit = postModel(url.CompanyJobEdit); // 编辑职位 | |||
export const PostCompanyJobList = postModel(url.CompanyJobList); // 企业职位列表 | |||
export const PostCompanyJobInfo = getModel(url.CompanyJobInfo); // 职位信息 | |||
// 部门管理 | |||
export const PostCompanyDepartmentAdd = getModel(url.CompanyDepartmentAdd); // 新增部门 | |||
export const PostCompanyDepartmentEdit = postModel(url.CompanyDepartmentEdit); // 编辑部门 | |||
export const PostCompanyDepartmentList = postModel(url.CompanyDepartmentList); // 部门列表 | |||
export const PostCompanyRecrBookList = getModel(url.CompanyRecrBookList); // 已预定招聘会列表 | |||
// 企业开通微信小程序账号公司权限 | |||
export const PostCompanycustomercodeAdd = getModel(url.CompanycustomercodeAdd); // 添加 | |||
export const PostCompanycustomercodeDel = postModel(url.CompanycustomercodeDel); // 删除 | |||
export const PostCompanycustomercodeUpdate = postModel(url.CompanycustomercodeUpdate); // 编辑 | |||
export const PostCompanycustomercodeList = getModel(url.CompanycustomercodeList); // 列表 | |||
export const PostCompanycustomercodeDetail = getModel(url.CompanycustomercodeDetail); // 添加 | |||
// 展示广告位 | |||
export const PostAdvertscheduleList = postModel(url.AdvertscheduleList); // 添加 | |||
// 职位 | |||
export const PostJobDetail = postModel(url.JobDetail); // 获取职位详情 | |||
export const PostJobSearch = postModel(url.JobSearch); // 职位搜索 | |||
export const PostJobNewest = postModel(url.JobNewest); // 最新职位 | |||
export const PostJobCompanyjobs = postModel(url.JobCompanyjobs); // 企业当前招聘职位 | |||
export const PostJobUrgentjobs = postModel(url.JobUrgentjobs); // 急招职位 | |||
export const PostJobHighpayjobs = postModel(url.JobHighpayjobs); // 高薪职位 | |||
export const PostJobCampusjobs = postModel(url.JobCampusjobs); // 校园招聘 | |||
// 招聘会企业预定 | |||
export const PostRecruitmentbookAdd = postModel(url.RecruitmentbookAdd); // 添加 | |||
export const PostRecruitmentbookDel = postModel(url.RecruitmentbookDel); // 删除 | |||
export const PostRecruitmentbookUpdate = postModel(url.RecruitmentbookUpdate); // 编辑 | |||
export const GetRecruitmentbookList = getModel(url.RecruitmentbookList); // 列表 | |||
export const GetRecruitmentbookDetail = getModel(url.RecruitmentbookDetail); // 详情 |
@@ -0,0 +1,9 @@ | |||
declare namespace roleType { | |||
type addRoleType = { | |||
id ?: string, | |||
name: string, | |||
code: string, | |||
description: string | |||
} | |||
} |
@@ -0,0 +1,9 @@ | |||
declare namespace searchType { | |||
type searchParams = { | |||
page : string, | |||
pagesize : string, | |||
sort : string, | |||
sortby : string, | |||
keyword ?: string | |||
} | |||
} |
@@ -0,0 +1,129 @@ | |||
declare namespace urlType { | |||
type url = { | |||
// 字典 | |||
dictTree: String, | |||
ImageUpload: String, | |||
JobseekerRegister : String, | |||
CompanyRegister : String, | |||
Captcha : String, | |||
// 招聘会 | |||
RecruitmentBookcompany : String, | |||
RecruitmentList : String, | |||
// 求职者管理中心 | |||
ViewhistoryList : String, | |||
InterviewList : String, | |||
// 企业管理中心 | |||
CompanyProfile : String, | |||
CompanyLogin : String, | |||
CompanyInfo : String, | |||
CompanyProbationList : String, | |||
CompanyFamousList : String, | |||
// 用户管理 | |||
CompanyFee : String, | |||
CompanyPwdEdit : String, | |||
CompanyEmailEdit : String, | |||
// 职位管理 | |||
CompanyJobAdd : String, | |||
CompanyJobEdit : String, | |||
CompanyJobList : String, | |||
CompanyJobInfo : String, | |||
// 部门管理 | |||
CompanyDepartmentAdd : String, | |||
CompanyDepartmentEdit : String, | |||
CompanyDepartmentList : String, | |||
CompanyRecrBookList : String, | |||
// 企业开通微信小程序账号公司权限 | |||
CompanycustomercodeAdd : String, | |||
CompanycustomercodeDel : String, | |||
CompanycustomercodeUpdate : String, | |||
CompanycustomercodeList : String, | |||
CompanycustomercodeDetail : String, | |||
// 展示广告位 | |||
AdvertscheduleList : String, | |||
// 职位 | |||
JobDetail : String, | |||
JobSearch : String, | |||
JobNewest : String, | |||
JobCompanyjobs : String, | |||
JobUrgentjobs : String, | |||
JobHighpayjobs : String, | |||
JobCampusjobs : String, | |||
// 招聘会企业预定 | |||
RecruitmentbookAdd : String, | |||
RecruitmentbookDel : String, | |||
RecruitmentbookUpdate : String, | |||
RecruitmentbookList : String, | |||
RecruitmentbookDetail : String, | |||
// 简历 | |||
// 列表 | |||
'JobseekerList': String, // 查看 | |||
'JobseekerDetail': String, // 详情 | |||
// 基本资料 | |||
'JobapplicantAdd' : String, // 添加 | |||
'JobapplicantDel' : String, // 删除 | |||
'JobapplicantUpdate' : String, // 修改 | |||
'JobapplicantList' : String, // 查看 | |||
'JobapplicantDetail' : String, // 详情 | |||
// 个人介绍 | |||
'JobapplicantAddintroduction' : String, | |||
'JobapplicantDelintroduction' : String, | |||
'JobapplicantUpdateintroduction' : String, | |||
'JobapplicantListintroduction' : String, | |||
'JobapplicantIntroductiondetail' : String, | |||
// 联系信息 | |||
'JobapplicantAddcontact' : String, | |||
'JobapplicantDelcontact' : String, | |||
'JobapplicantUpdatecontact' : String, | |||
'JobapplicantListcontact' : String, | |||
'JobapplicantContactdetail' : String, | |||
// 专业技能 | |||
'JobapplicantAddskill' : String, | |||
'JobapplicantDelskill' : String, | |||
'JobapplicantUpdateskill' : String, | |||
'JobapplicantListskill' : String, | |||
'JobapplicantSkilldetail' : String, | |||
// 培训经历 | |||
'JobapplicantAddtraining' : String, | |||
'JobapplicantDeltraining' : String, | |||
'JobapplicantUpdatetraining' : String, | |||
'JobapplicantListtraining' : String, | |||
'JobapplicantTrainingdetail' : String, | |||
// 求职意向-基本 | |||
'JobapplicantAdddesirebase' : String, | |||
'JobapplicantDeldesirebase' : String, | |||
'JobapplicantUpdatedesirebase' : String, | |||
'JobapplicantDesirebasedetail' : String, | |||
// 求职意向-地区 | |||
'JobapplicantAdddesirearea' : String, | |||
'JobapplicantDeldesirearea' : String, | |||
'JobapplicantUpdatedesirearea' : String, | |||
'JobapplicantListdesirearea' : String, | |||
'JobapplicantDesireareadetail' : String, | |||
// 求职意向-职位 | |||
'JobapplicantAdddesireindustry' : String, | |||
'JobapplicantDeldesireindustry' : String, | |||
'JobapplicantUpdatedesireindustry' : String, | |||
'JobapplicantListdesireindustry' : String, | |||
'JobapplicantDesireindustrydetail' : String, | |||
// 证书 | |||
'JobapplicantAddcertificate' : String, | |||
'JobapplicantDelcertificate' : String, | |||
'JobapplicantUpdatecertificate' : String, | |||
'JobapplicantListcertificate' : String, | |||
'JobapplicantCertificatedetail' : String, | |||
// 工作经历 | |||
'JobapplicantAddexperience' : String, | |||
'JobapplicantDelexperience' : String, | |||
'JobapplicantUpdateexperience' : String, | |||
'JobapplicantListexperience' : String, | |||
'JobapplicantExperiencedetail' : String, | |||
} | |||
} |
@@ -0,0 +1,131 @@ | |||
let web: string = '/web'; | |||
let common: string = '/common'; | |||
// 角色 | |||
export const url : urlType.url = { | |||
// 字典 | |||
dictTree: common + '/dict/tree', | |||
ImageUpload: common + '/image/upload?imgtype=1', | |||
JobseekerRegister: web + '/jobseeker/register', // 个人注册 | |||
CompanyRegister: web + '/company/register', // 企业注册 | |||
Captcha: common + '/captcha', // 获取验证码 | |||
// 招聘会 | |||
RecruitmentBookcompany: web + '/recruitment/bookcompany', // 获取招聘会参与的企业 | |||
RecruitmentList: web + '/recruitment/list', // 招聘会列表 | |||
// 求职者管理中心 | |||
ViewhistoryList: web + '/viewhistory/list', // 获取简历被查看记录 | |||
InterviewList: web + '/interview/list', // 获取应聘记录列表 | |||
// 企业管理中心 | |||
CompanyProfile: web + '/company/profile', // 企业基本资料 | |||
CompanyLogin: web + '/company/login', // 登录 | |||
CompanyInfo: web + '/company/info', // 企业信息 | |||
CompanyProbationList: web + '/company/probation_list', // 见习基地 | |||
CompanyFamousList: web + '/company/famous_list', // 知名企业/推荐企业 | |||
// 用户管理 | |||
CompanyFee: web + '/company/fee', // 费用管理 | |||
CompanyPwdEdit: web + '/company/pwd_edit', // 修改密码 | |||
CompanyEmailEdit: web + '/company/email_edit', // 修改密码 | |||
// 职位管理 | |||
CompanyJobAdd: web + '/company/job_add', // 添加职位 | |||
CompanyJobEdit: web + '/company/job_edit', // 编辑职位 | |||
CompanyJobList: web + '/company/job_list', // 企业职位列表 | |||
CompanyJobInfo: web + '/company/job_info', // 职位信息 | |||
// 部门管理 | |||
CompanyDepartmentAdd: web + '/company/department_add', // 新增部门 | |||
CompanyDepartmentEdit: web + '/company/department_edit', // 编辑部门 | |||
CompanyDepartmentList: web + '/company/department_list', // 部门列表 | |||
CompanyRecrBookList: web + '/company/recr_book_list', // 已预定招聘会列表 | |||
// 企业开通微信小程序账号公司权限 | |||
CompanycustomercodeAdd: web + '/companycustomercode/add', // 添加 | |||
CompanycustomercodeDel: web + '/companycustomercode/del', // 删除 | |||
CompanycustomercodeUpdate: web + '/companycustomercode/update', // 编辑 | |||
CompanycustomercodeList: web + '/companycustomercode/list', // 列表 | |||
CompanycustomercodeDetail: web + '/companycustomercode/detail', // 详情 | |||
// 展示广告位 | |||
AdvertscheduleList: web + '/advertschedule/list', // 详情 | |||
// 职位 | |||
JobDetail: web + '/job/detail', // 获取职位详情 | |||
JobSearch: web + '/job/search', // 职位搜索 | |||
JobNewest: web + '/job/newest', // 最新职位 | |||
JobCompanyjobs: web + '/job/companyjobs', // 企业当前招聘职位 | |||
JobUrgentjobs: web + '/job/urgentjobs', // 急招职位 | |||
JobHighpayjobs: web + '/job/highpayjobs', // 高薪职位 | |||
JobCampusjobs: web + '/job/campusjobs', // 校园招聘 | |||
// 招聘会企业预定 | |||
RecruitmentbookAdd: web + '/recruitmentbook/add', // 添加 | |||
RecruitmentbookDel: web + '/recruitmentbook/del', // 删除 | |||
RecruitmentbookUpdate: web + '/recruitmentbook/update', // 编辑 | |||
RecruitmentbookList: web + '/recruitmentbook/list', // 列表 | |||
RecruitmentbookDetail: web + '/recruitmentbook/detail', // 详情 | |||
// 简历 | |||
JobseekerList: web + '/jobseeker/list', // 获取简历完整资料列表 | |||
JobseekerDetail: web + '/jobseeker/detail', // 获取简历完整资料 | |||
// 基本资料 | |||
'JobapplicantAdd': web + '/jobapplicant/add', // 添加 | |||
'JobapplicantDel': web + '/jobapplicant/del', // 删除 | |||
'JobapplicantUpdate': web + '/jobapplicant/update', // 修改 | |||
'JobapplicantList': web + '/jobapplicant/list', // 查看 | |||
'JobapplicantDetail': web + '/jobapplicant/detail', // 详情 | |||
// 个人介绍 | |||
'JobapplicantAddintroduction': '/web/jobapplicant/addintroduction', | |||
'JobapplicantDelintroduction': web + '/jobapplicant/delintroduction', // 删除 | |||
'JobapplicantUpdateintroduction': web + '/jobapplicant/updateintroduction', // 修改 | |||
'JobapplicantListintroduction': '/web/jobapplicant/listintroduction', | |||
'JobapplicantIntroductiondetail': '/web/jobapplicant/introductiondetail', | |||
// 联系信息 | |||
'JobapplicantAddcontact': web + '/jobapplicant/addcontact', // 添加 | |||
'JobapplicantDelcontact': web + '/jobapplicant/delcontact', // 删除 | |||
'JobapplicantUpdatecontact': web + '/jobapplicant/updatecontact', // 修改 | |||
'JobapplicantListcontact': web + '/jobapplicant/listcontact', // 查看 | |||
'JobapplicantContactdetail': web + '/jobapplicant/contactdetail', // 详情 | |||
// 专业技能 | |||
'JobapplicantAddskill': web + '/jobapplicant/addskill', // 添加 | |||
'JobapplicantDelskill': web + '/jobapplicant/delskill', // 删除 | |||
'JobapplicantUpdateskill': web + '/jobapplicant/updateskill', // 修改 | |||
'JobapplicantListskill': web + '/jobapplicant/listskill', // 查看 | |||
'JobapplicantSkilldetail': web + '/jobapplicant/skilldetail', // 详情 | |||
// 培训经历 | |||
'JobapplicantAddtraining': web + '/jobapplicant/addtraining', // 添加 | |||
'JobapplicantDeltraining': web + '/jobapplicant/deltraining', // 删除 | |||
'JobapplicantUpdatetraining': web + '/jobapplicant/updatetraining', // 修改 | |||
'JobapplicantListtraining': web + '/jobapplicant/listtraining', // 查看 | |||
'JobapplicantTrainingdetail': web + '/jobapplicant/trainingdetail', // 详情 | |||
// 求职意向-基本 | |||
'JobapplicantAdddesirebase': '/web/jobapplicant/adddesirebase', // 添加 | |||
'JobapplicantDeldesirebase': '/web/jobapplicant/deldesirebase', // 删除 | |||
'JobapplicantUpdatedesirebase': '/web/jobapplicant/updatedesirebase', // 修改 | |||
'JobapplicantDesirebasedetail': '/web/jobapplicant/desirebasedetail', // 详情 | |||
// 求职意向-地区 | |||
'JobapplicantAdddesirearea': web + '/jobapplicant/adddesirearea', // 添加 | |||
'JobapplicantDeldesirearea': web + '/jobapplicant/deldesirearea', // 删除 | |||
'JobapplicantUpdatedesirearea': web + '/jobapplicant/updatedesirearea', // 修改 | |||
'JobapplicantListdesirearea': web + '/jobapplicant/listdesirearea', // 查看 | |||
'JobapplicantDesireareadetail': web + '/jobapplicant/desireareadetail', // 详情 | |||
// 求职意向-职位 | |||
'JobapplicantAdddesireindustry': web + '/jobapplicant/adddesireindustry', // 添加 | |||
'JobapplicantDeldesireindustry': web + '/jobapplicant/deldesireindustry', // 删除 | |||
'JobapplicantUpdatedesireindustry': web + '/jobapplicant/updatedesireindustry', // 修改 | |||
'JobapplicantListdesireindustry': web + '/jobapplicant/listdesireindustry', // 查看 | |||
'JobapplicantDesireindustrydetail': web + '/jobapplicant/desireindustrydetail', // 详情 | |||
// 证书 | |||
'JobapplicantAddcertificate': web + '/jobapplicant/addcertificate', // 添加 | |||
'JobapplicantDelcertificate': web + '/jobapplicant/delcertificate', // 删除 | |||
'JobapplicantUpdatecertificate': web + '/jobapplicant/updatecertificate', // 修改 | |||
'JobapplicantListcertificate': web + '/jobapplicant/listcertificate', // 查看 | |||
'JobapplicantCertificatedetail': web + '/jobapplicant/certificatedetail', // 详情 | |||
// 工作经历 | |||
'JobapplicantAddexperience': web + '/jobapplicant/addexperience', // 添加 | |||
'JobapplicantDelexperience': web + '/jobapplicant/delexperience', // 删除 | |||
'JobapplicantUpdateexperience': web + '/jobapplicant/updateexperience', // 修改 | |||
'JobapplicantListexperience': web + '/jobapplicant/listexperience', // 查看 | |||
'JobapplicantExperiencedetail': web + '/jobapplicant/experiencedetail', // 详情 | |||
} |
@@ -0,0 +1,60 @@ | |||
<template> | |||
<a-table :data-source="data" :columns="columns" :pagination="pagination" @change="pageChange" :loading="loading"> | |||
<template #image="{ record }"> | |||
<slot name="image" :record='record'></slot> | |||
</template> | |||
<template #operation="{ record }"> | |||
<slot :record='record'></slot> | |||
</template> | |||
</a-table> | |||
</template> | |||
<script lang="ts" setup> | |||
import { ref, onMounted,defineEmits, defineProps, watch } from 'vue'; | |||
let props = defineProps(['data', 'columns', 'pagination', 'loading']); | |||
const emit = defineEmits(); | |||
let data = ref<Object[]>([]) | |||
let columns = ref<Object[]>([]) | |||
let loading = ref<Boolean>(props.loading); | |||
let pagination = ref<CommonType.PageType>({ | |||
current: 1, | |||
pageSize: 10, | |||
total: 10, | |||
pageSizeOptions: ['10', '20', '30', '40'], | |||
hideOnSinglePage: false, | |||
showSizeChanger: true | |||
}) | |||
watch(() => [props.data, props.columns, props.pagination, props.loading], | |||
(newVal, oldVal) => { | |||
data.value = newVal[0]; | |||
columns.value = newVal[1]; | |||
pagination.value = newVal[2]; | |||
loading.value = newVal[3] | |||
}) | |||
const pageChange = (val) => { | |||
emit("page", val) | |||
} | |||
</script> | |||
<style scoped lang="less"> | |||
:deep(.ant-table-thead >tr>th) { | |||
background-color: #fff !important; | |||
border: none !important; | |||
color: #bbb !important; | |||
} | |||
:deep(.ant-table-thead >tr>th::before) { | |||
display: none !important; | |||
} | |||
:deep(.ant-table-tbody >tr >td) { | |||
border: none !important; | |||
} | |||
:deep(.ant-table-pagination) { | |||
justify-content: center !important; | |||
padding: 20px 0 !important; | |||
} | |||
</style> |
@@ -0,0 +1,39 @@ | |||
<template> | |||
<a-cascader v-model:value="cascaderParentId" @change="parentChange" :options="listOptions" | |||
:fieldNames="listFieldNames" :changeOnSelect="true" :placeholder="placeholder" style="width: 100%" change-on-select/> | |||
</template> | |||
<script lang="ts" setup> | |||
import { ref, onMounted, defineProps, watch, defineEmits } from 'vue'; | |||
import { GetDictTree } from '@/apis/models'; | |||
const props = defineProps(['dict', 'placeholder', 'cascader_content']); | |||
let listOptions = ref([]); | |||
let cascaderParentId = ref<String>([]); | |||
const listFieldNames = ref({ label: 'name', value: 'id', children: 'children' }); | |||
let placeholder = ref('请选择'); | |||
placeholder.value = props.placeholder | |||
watch(() => [props.dict, props.cascader_content], | |||
(newVal, oldVal) => { | |||
GetDictTree({ | |||
code: newVal[0] | |||
}).then(res => { | |||
listOptions.value = res.data.dicts | |||
}) | |||
cascaderParentId.value = newVal[1] | |||
}) | |||
onMounted(() => { | |||
GetDictTree({ | |||
code: props.dict | |||
}).then(res => { | |||
listOptions.value = res.data.dicts | |||
}) | |||
}) | |||
const emit = defineEmits(); | |||
const parentChange = (val, selectedOptions) => { | |||
emit('saveCascader', {arr1: val, arr2: selectedOptions}); | |||
} | |||
</script> | |||
<style> | |||
</style> |
@@ -0,0 +1,179 @@ | |||
<template> | |||
<a-page-header title="已有账号,去登录" :avatar="{ src: 'https://avatars1.githubusercontent.com/u/8186664?s=460&v=4' }"> | |||
<a-tabs v-model:activeKey="activeKey"> | |||
<a-tab-pane key="1" tab="个人注册" force-render> | |||
<a-form :model="personalForm" :label-col="{span: 2}" labelAlign="right"> | |||
<a-row gutter="20"> | |||
<a-col span="24"> | |||
<a-form-item required label="手机号" name="mobile"> | |||
<a-input v-model:value="personalForm.mobile" placeholder="请输入账号" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-form-item required label="密码" name="password"> | |||
<a-input-password v-model:value="personalForm.password" placeholder="请输入密码" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-form-item required label="验证码" name="captcha" :label-col="{span: 4}"> | |||
<a-input v-model:value="personalForm.captcha" placeholder="请输入验证码" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col> | |||
<a-form-item> | |||
<a-button type="primary" @click="getCaptcha">换一个</a-button> | |||
</a-form-item> | |||
</a-col> | |||
<a-col> | |||
<a-form-item> | |||
<a-image width="200px" height="100px" :src="codeImage"></a-image> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-form-item label="操作"> | |||
<a-button type="primary" @click="onPersonalRegister">注册</a-button> | |||
</a-form-item> | |||
</a-col> | |||
</a-row> | |||
</a-form> | |||
</a-tab-pane> | |||
<a-tab-pane key="2" tab="企业注册" force-render> | |||
<a-form :model="companyForm" :label-col="{span: 2}" labelAlign="right"> | |||
<a-row gutter="20"> | |||
<a-col span="24"> | |||
<a-form-item required label="联系手机" name="contact_mobile"> | |||
<a-input v-model:value="companyForm.contact_mobile" placeholder="请输入联系号码" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-form-item required label="密码" name="password"> | |||
<a-input-password v-model:value="companyForm.password" placeholder="请输入密码" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-form-item required label="确认密码" name="comform_password"> | |||
<a-input-password v-model:value="companyForm.comform_password" placeholder="请输入确认密码" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-form-item required label="邮箱" name="email"> | |||
<a-input v-model:value="companyForm.email" placeholder="请输入邮箱" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-form-item required label="企业名称" name="full_name"> | |||
<a-input v-model:value="companyForm.full_name" placeholder="请输入企业名称" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-form-item required label="联系人" name="contact_name"> | |||
<a-input v-model:value="companyForm.contact_name" placeholder="请输入联系人" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-form-item required label="联系固话" name="contact_phone"> | |||
<a-input v-model:value="companyForm.contact_phone" placeholder="请输入联系固话" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-form-item required label="验证码" name="captcha" :label-col="{span: 4}"> | |||
<a-input v-model:value="companyForm.captcha" placeholder="请输入验证码" /> | |||
</a-form-item> | |||
</a-col> | |||
<a-col> | |||
<a-form-item> | |||
<a-button type="primary" @click="getCaptcha">换一个</a-button> | |||
</a-form-item> | |||
</a-col> | |||
<a-col> | |||
<a-form-item> | |||
<a-image width="200px" height="100px" :src="codeImage"></a-image> | |||
</a-form-item> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-form-item label="操作"> | |||
<a-button type="primary" @click="onCompanyRegister">注册</a-button> | |||
</a-form-item> | |||
</a-col> | |||
</a-row> | |||
</a-form></a-tab-pane> | |||
</a-tabs> | |||
</a-page-header> | |||
</template> | |||
<script setup lang="ts"> | |||
import { ref, onMounted, watch, computed } from 'vue'; | |||
import { GetCaptcha, PostJobseekerRegister, PostCompanyRegister } from '@/apis/models'; | |||
import { store } from '@/store/index'; | |||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||
let codeImage = ref<String>('') | |||
onMounted(() => { | |||
getCaptcha() | |||
}) | |||
let cpt_id = ref<String>('') | |||
const getCaptcha = () => { | |||
companyForm.value.captcha = ''; | |||
personalForm.value.captcha = ''; | |||
GetCaptcha().then(res => { | |||
cpt_id.value = res.data.cpt_id; | |||
codeImage.value = res.data.img; | |||
}) | |||
} | |||
// 个人注册 | |||
let personalForm = ref<Object>({ | |||
mobile: "", | |||
password: "", | |||
cpt_id: "", | |||
captcha: "" | |||
}) | |||
const onPersonalRegister = () => { | |||
personalForm.value.cpt_id = cpt_id.value; | |||
if (personalForm.value.mobile && personalForm.value.password && personalForm.value.captcha) { | |||
PostJobseekerRegister(personalForm.value).then(res => { | |||
successToast('注册成功,可以进行登录'); | |||
store.commit('getIntoRegister', { | |||
intoRegister: false | |||
}) | |||
}).catch(err => { | |||
getCaptcha() | |||
}) | |||
} else { | |||
warnToast('请补充完整信息'); | |||
} | |||
} | |||
// 企业注册 | |||
let companyForm = ref<Object>({ | |||
password: "", | |||
comform_password: "", | |||
email: "", | |||
full_name: "", | |||
contact_name: "", | |||
contact_phone: "", | |||
contact_mobile: "", | |||
cpt_id: "", | |||
captcha: "" | |||
}) | |||
const onCompanyRegister = () => { | |||
companyForm.value.cpt_id = cpt_id.value; | |||
if (companyForm.value.password != companyForm.value.comform_password) { | |||
warnToast('两次密码不一致'); | |||
} | |||
PostCompanyRegister(companyForm.value).then(res => { | |||
successToast('注册成功,可以进行登录'); | |||
store.commit('getIntoRegister', { | |||
intoRegister: false | |||
}) | |||
}).catch(err => { | |||
getCaptcha() | |||
}) | |||
} | |||
</script> | |||
<style> | |||
</style> |
@@ -8,27 +8,57 @@ | |||
<a-row type="flex" justify="end"> | |||
<a-col span="5"> | |||
<div class="login-box"> | |||
<a-tabs v-model:activeKey="activeKey"> | |||
<a-tabs v-model:activeKey="loginType" @change="loginTypeChange"> | |||
<a-tab-pane key="1" tab="我要找工作"> | |||
<a-row :gutter="[0, 16]"> | |||
<a-row :gutter="[10, 16]"> | |||
<a-col span="24"> | |||
<a-input v-model:value="value" placeholder="账号" /> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-input v-model:value="value" placeholder="密码" /> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-col span="12"> | |||
<a-input v-model:value="value" placeholder="验证码" /> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-image :src="codeImage" @click="getCaptcha" :preview="false"></a-image> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-button type="primary" block @click="register">注册</a-button> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-button type="primary" block @click="login">登录</a-button> | |||
</a-col> | |||
<a-col span="24"> | |||
忘记密码? | |||
</a-col> | |||
</a-row> | |||
</a-tab-pane> | |||
<a-tab-pane key="2" tab="我要招聘" force-render> | |||
<a-row :gutter="[10, 16]"> | |||
<a-col span="24"> | |||
<a-button type="primary" block @click="login">登录/注册</a-button> | |||
<a-input v-model:value="loginForm.username" placeholder="账号" /> | |||
</a-col> | |||
<a-col span="24"> | |||
<a-input v-model:value="loginForm.password" placeholder="密码" /> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-input v-model:value="loginForm.captcha" placeholder="验证码" /> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-image :src="codeImage" @click="getCaptcha" :preview="false"></a-image> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-button type="primary" block @click="register">注册</a-button> | |||
</a-col> | |||
<a-col span="12"> | |||
<a-button type="primary" block @click="companylogin">登录</a-button> | |||
</a-col> | |||
<a-col span="24"> | |||
忘记密码? | |||
</a-col> | |||
</a-row> | |||
</a-tab-pane> | |||
<a-tab-pane key="2" tab="我要招聘" force-render>我要招聘</a-tab-pane> | |||
</a-tabs> | |||
</div> | |||
</a-col> | |||
@@ -40,14 +70,34 @@ | |||
</template> | |||
<script setup lang="ts"> | |||
import { ref, computed } from 'vue'; | |||
import { ref,onMounted, computed } from 'vue'; | |||
import { GetCaptcha, PostCompanyLogin} from '@/apis/models'; | |||
import { store } from '@/store/index'; | |||
import { router } from '@/router/index'; | |||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||
let loginType = ref<String>('1') | |||
const loginTypeChange = () => { | |||
getCaptcha() | |||
} | |||
const showLoginBox = computed(() => { | |||
return store.state.showLoginBox | |||
}) | |||
onMounted(() => { | |||
getCaptcha() | |||
}) | |||
let cpt_id = ref<String>('') | |||
let codeImage = ref<String>('') | |||
const getCaptcha = () => { | |||
loginForm.value.captcha = ''; | |||
GetCaptcha().then(res => { | |||
cpt_id.value = res.data.cpt_id; | |||
codeImage.value = res.data.img; | |||
}) | |||
} | |||
const login = () => { | |||
store.commit('setShowLoginBox', { | |||
showLoginBox: false | |||
@@ -62,6 +112,40 @@ | |||
router.push('/manage/home') | |||
} | |||
// 进入注册 | |||
const register = () => { | |||
store.commit('getIntoRegister', { | |||
intoRegister: true | |||
}) | |||
} | |||
// 企业登录 | |||
let loginForm = ref<Object>({ | |||
username: "", | |||
password: "", | |||
cpt_id: "", | |||
captcha: "" | |||
}) | |||
const companylogin = () => { | |||
loginForm.value.cpt_id = cpt_id.value; | |||
PostCompanyLogin(loginForm.value).then(res => { | |||
successToast('登录成功'); | |||
store.commit('setShowLoginBox', { | |||
showLoginBox: false | |||
}) | |||
store.commit('getRoleName', { | |||
roleName: 'company' | |||
}) | |||
sessionStorage.setItem('role', 'company') | |||
sessionStorage.setItem('token', res.data.jwttoken.accesstoken) | |||
store.commit('permissions/SET_PERMISSION', null) | |||
store.commit('permissions/SET_MENU', []) | |||
router.push('/manage/home') | |||
}).catch(err => { | |||
getCaptcha() | |||
}) | |||
} | |||
</script> | |||
<style lang="less" scoped> |
@@ -120,7 +120,7 @@ | |||
} | |||
const logined = computed(() => { | |||
return store.state.roleName | |||
return sessionStorage.getItem('role') | |||
}) | |||
const quit = () => { | |||
store.commit('setShowLoginBox', { |
@@ -43,7 +43,7 @@ | |||
overflow-y: auto; | |||
background-color: #f0f0f0 !important; | |||
padding-top: 64px; | |||
padding-bottom: 30px; | |||
// padding-bottom: 30px; | |||
} | |||
@@ -38,7 +38,6 @@ | |||
return store.state.permissions.menuList; | |||
}) | |||
let selectedMenu = computed(() => { | |||
console.log(131,routerCur()) | |||
let newSelectedMenu = [routerCur()]; | |||
return newSelectedMenu; | |||
}) | |||
@@ -48,6 +47,12 @@ | |||
store.commit('getRouteName', { | |||
routeName: routerCur() | |||
}) | |||
store.commit('getIntoRegister', { | |||
intoRegister: false | |||
}) | |||
store.commit('setShowLoginBox', { | |||
showLoginBox: false | |||
}) | |||
// return newOpenSubMenu; | |||
}) | |||
@@ -0,0 +1,16 @@ | |||
export const cols = <ColType.type[]>[ | |||
{ | |||
title: '招聘会名称', | |||
dataIndex: 'title' | |||
}, { | |||
title: '地点', | |||
dataIndex: 'address' | |||
}, { | |||
title: '开始时间', | |||
dataIndex: 'open_date' | |||
}, { | |||
title: '审核状态', | |||
dataIndex: 'status_text' | |||
} | |||
] |
@@ -0,0 +1,96 @@ | |||
<template> | |||
<a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | |||
@page="getPage" :loading="loading"> | |||
</a-biaoge> | |||
</template> | |||
<script setup lang="ts"> | |||
import { ref, onMounted, computed } from 'vue'; | |||
import {PostCompanyRecrBookList } from '@/apis/models'; | |||
import { useCommon } from '@/hooks/useCommon'; | |||
import { cols } from '@/components/meet/result/columns'; | |||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||
let { commomParams } = useCommon(); | |||
let loading = ref<Boolean>(true); | |||
onMounted(() => { | |||
getData(commomParams.value.search); | |||
}) | |||
const searchData = (data : object) => { | |||
commomParams.value.search = data | |||
getData(); | |||
} | |||
const clearData = (data : object) => { | |||
if (data) { | |||
commomParams.value.search = data | |||
} else { | |||
commomParams.value.search = { | |||
page: 1, | |||
pagesize: 10, | |||
sort: 'id', | |||
sortby: 'asc', | |||
keyword: '' | |||
} | |||
} | |||
getData(); | |||
} | |||
const getPage = (data : object) => { | |||
commomParams.value.search.page = data.current; | |||
commomParams.value.search.pagesize = data.pageSize; | |||
getData(); | |||
} | |||
const getData = async () => { | |||
try { | |||
loading.value = true; | |||
let res = await PostCompanyRecrBookList(); | |||
loading.value = false; | |||
commomParams.value.table.data = res.data.list; | |||
commomParams.value.table.columns = cols; | |||
commomParams.value.page = { | |||
current: commomParams.value.search.page, | |||
pageSize: commomParams.value.search.pagesize, | |||
total: res.data.total, | |||
pageSizeOptions: ['10', '20', '30', '40'], | |||
hideOnSinglePage: false, | |||
showSizeChanger: true | |||
}; | |||
} catch { | |||
loading.value = false; | |||
} | |||
} | |||
// 申请 | |||
const applyFor = (val) => { | |||
PostRecruitmentbookAdd({ recruitment_id: val, company_id: 0}).then(res => { | |||
successToast('预定成功') | |||
}) | |||
} | |||
// 详情 | |||
let detailData = ref<object>({}) | |||
const toDetail = (val) => { | |||
PostRecruitmentbookAdd({ id: val}).then(res => { | |||
detailData.value = res.data | |||
}) | |||
} | |||
</script> | |||
<style scoped lang="less"> | |||
:deep(.ant-table-thead >tr>th) { | |||
background-color: #fff !important; | |||
border: none !important; | |||
color: #bbb !important; | |||
} | |||
:deep(.ant-table-thead >tr>th::before) { | |||
display: none !important; | |||
} | |||
:deep(.ant-table-tbody >tr >td) { | |||
border: none !important; | |||
} | |||
</style> |
@@ -0,0 +1,21 @@ | |||
export const cols = <ColType.type[]>[ | |||
{ | |||
title: '招聘会名称', | |||
dataIndex: 'title' | |||
}, { | |||
title: '地点', | |||
dataIndex: 'address' | |||
}, { | |||
title: '开始时间', | |||
dataIndex: 'open_date' | |||
}, { | |||
title: '开通状态', | |||
dataIndex: 'status' | |||
}, | |||
{ | |||
title: '操作', | |||
dataIndex: 'operation', | |||
slots: { customRender: 'operation' }, | |||
}, | |||
] |
@@ -1,190 +1,105 @@ | |||
<template> | |||
<a-table :data-source="dataSource" :columns="columns"> | |||
<template #operation="{ record }"> | |||
<a-popconfirm v-if="dataSource.length" title="Sure to delete?" @confirm="onDelete(record.key)"> | |||
<a>删除</a> | |||
</a-popconfirm> | |||
<div style="margin: 16px;"> | |||
<a-search @searchData="searchData" @clearData="clearData" :search_params="commomParams.search"></a-search> | |||
</div> | |||
<a-biaoge :data="commomParams.table.data" :columns="commomParams.table.columns" :pagination="commomParams.page" | |||
@page="getPage" :loading="loading"> | |||
<template #default="{ record }"> | |||
<a-row :gutter="20"> | |||
<a-popconfirm title="是否要申请参加该招聘会?" @confirm="applyFor(record.id)"> | |||
<a-col><a-button type="primary" size="small">申请</a-button></a-col> | |||
</a-popconfirm> | |||
<a-popconfirm placement="topLeft" ok-text="关闭" @confirm="confirm"> | |||
<template #title> | |||
<a-typography> | |||
<a-typography-title :level="3">{{detailData.title}}</a-typography-title> | |||
<a-typography-paragraph>发布时间:{{detailData.created_at}}</a-typography-paragraph> | |||
<a-typography-text > | |||
<div v-html="detailData.content"></div> | |||
</a-typography-text> | |||
</a-typography> | |||
</template> | |||
<a-button type="primary" size="small" @click="toDetail(record.id)">详情</a-button> | |||
</a-popconfirm> | |||
</a-row> | |||
</template> | |||
</a-table> | |||
</a-biaoge> | |||
</template> | |||
<script setup lang="ts"> | |||
import { ref, onMounted, computed } from 'vue'; | |||
let createForm : companyListType.addrFormType = ref({ | |||
name: '', | |||
company_id: 0, | |||
contact: '', | |||
phone: '', | |||
mobile: '', | |||
email: '', | |||
import { PostRecruitmentList, PostRecruitmentbookAdd, PostRecruitmentBookcompany } from '@/apis/models'; | |||
import { useCommon } from '@/hooks/useCommon'; | |||
import { cols } from '@/components/meet/subscribe/columns'; | |||
import ASearch from '@/components/meet/subscribe/search.vue'; | |||
import { warnToast, successToast } from '@/utils/toastHelper'; | |||
let { commomParams } = useCommon(); | |||
let loading = ref<Boolean>(true); | |||
onMounted(() => { | |||
getData(commomParams.value.search); | |||
}) | |||
const searchData = (data : object) => { | |||
commomParams.value.search = data | |||
getData(); | |||
} | |||
const clearData = (data : object) => { | |||
if (data) { | |||
commomParams.value.search = data | |||
} else { | |||
commomParams.value.search = { | |||
page: 1, | |||
pagesize: 10, | |||
sort: 'id', | |||
sortby: 'asc', | |||
keyword: '' | |||
} | |||
} | |||
getData(); | |||
} | |||
const getPage = (data : object) => { | |||
commomParams.value.search.page = data.current; | |||
commomParams.value.search.pagesize = data.pageSize; | |||
getData(); | |||
} | |||
const getData = async () => { | |||
try { | |||
loading.value = true; | |||
let res = await PostRecruitmentList(commomParams.value.search); | |||
loading.value = false; | |||
commomParams.value.table.data = res.data.recruitments; | |||
commomParams.value.table.columns = cols; | |||
commomParams.value.page = { | |||
current: commomParams.value.search.page, | |||
pageSize: commomParams.value.search.pagesize, | |||
total: res.data.total, | |||
pageSizeOptions: ['10', '20', '30', '40'], | |||
hideOnSinglePage: false, | |||
showSizeChanger: true | |||
}; | |||
} catch { | |||
loading.value = false; | |||
} | |||
} | |||
// 申请 | |||
const applyFor = (val) => { | |||
PostRecruitmentbookAdd({ recruitment_id: val, company_id: 0}).then(res => { | |||
successToast('预定成功') | |||
}) | |||
} | |||
let dataSource = ref([ | |||
{ | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, | |||
{ | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, { | |||
key: '1', | |||
name: '第一部部门第一部部门第一部部门', | |||
age: '王二狗', | |||
address: '082-12331231', | |||
phone: '1223245645646', | |||
email: '6146545@126.com', | |||
}, | |||
]) | |||
let columns = ref([ | |||
{ | |||
title: '时间', | |||
dataIndex: 'name', | |||
key: 'name', | |||
}, | |||
{ | |||
title: '招聘会主题', | |||
dataIndex: 'age', | |||
key: 'age', | |||
}, | |||
{ | |||
title: '地点', | |||
dataIndex: 'address', | |||
key: 'address', | |||
}, | |||
{ | |||
title: '操作', | |||
dataIndex: 'operation', | |||
slots: { customRender: 'operation' }, | |||
}, | |||
]) | |||
// 详情 | |||
let detailData = ref<object>({}) | |||
const toDetail = (val) => { | |||
PostRecruitmentbookAdd({ id: val}).then(res => { | |||
detailData.value = res.data | |||
}) | |||
} | |||
</script> | |||
<style scoped lang="less"> | |||
@@ -193,12 +108,12 @@ | |||
border: none !important; | |||
color: #bbb !important; | |||
} | |||
:deep(.ant-table-thead >tr>th::before) { | |||
display: none !important; | |||
} | |||
:deep(.ant-table-tbody >tr >td) { | |||
border: none !important; | |||
} | |||
</style> |
@@ -0,0 +1,44 @@ | |||
<template> | |||
<a-form :model="commomParams.search"> | |||
<a-row :gutter="20"> | |||
<a-col span="12"> | |||
<a-form-item> | |||
<a-input-search v-model:value="commomParams.search.keyword" placeholder="请输入招聘会名称" enter-button="搜索" | |||
@search="getData" /> | |||
</a-form-item> | |||
</a-col> | |||
</a-row> | |||
</a-form> | |||
</template> | |||
<script lang="ts" setup> | |||
import { ref, onMounted, watch, computed } from 'vue'; | |||
import { useCommon } from '@/hooks/useCommon'; | |||
let { commomParams } = useCommon(); | |||
let props = defineProps(['search_params']); | |||
const emit = defineEmits(); | |||
watch(() => props.search_params, (newVal) => { | |||
console.log(newVal) | |||
}) | |||
const getData = () => { | |||
emit('searchData', commomParams.value.search) | |||
} | |||
// 清空搜索 | |||
const clearSearch = () => { | |||
commomParams.value.search = { | |||
page: 1, | |||
pagesize: 10, | |||
sort: 'id', | |||
sortby: 'asc', | |||
keyword: '' | |||
} | |||
emit('clearData', commomParams.value.search) | |||
} | |||
</script> | |||
<style> | |||
</style> |
@@ -62,6 +62,7 @@ export const useCommon = () => { | |||
// 点击菜单获取路由 | |||
const onMenu = (path) => { | |||
routerTo(path); | |||
}; | |||
@@ -4,9 +4,12 @@ import App from './App.vue'; | |||
import { router } from './router' | |||
import { store } from './store'; | |||
import Antd from 'ant-design-vue'; | |||
import 'ant-design-vue/dist/reset.css'; | |||
import CommonLeftSider from '@/components/common/left-sider.vue'; | |||
import CommonLeftSider from '@/components/common/left-sider.vue'; | |||
import ABiaoge from '@/components/biaoge/index.vue'; | |||
import { routesModuleList } from '@/router/dynamic'; | |||
import { routesManageModuleList } from '@/router/manageDynamic'; | |||
router.beforeEach((to, from, next) => { | |||
@@ -24,6 +27,7 @@ router.beforeEach((to, from, next) => { | |||
const app = createApp(App); | |||
app.component('common-left-sider', CommonLeftSider); | |||
app.component('a-biaoge', ABiaoge); | |||
app.use(router); | |||
app.use(store); | |||
app.use(Antd); |
@@ -169,6 +169,17 @@ const NewsRoute : AppRouteRecordRaw = { | |||
}, | |||
}; | |||
// 注册页面 | |||
const RegisterRoute : AppRouteRecordRaw = { | |||
path: '/register', | |||
name: 'register', | |||
component: routerList.News, | |||
meta: { | |||
title: '注册', | |||
icon: HomeOutlined | |||
}, | |||
}; | |||
export const routesModuleList : AppRouteModule[] = [ | |||
@@ -180,5 +191,6 @@ export const routesModuleList : AppRouteModule[] = [ | |||
ExpertRoute, | |||
TrainRoute, | |||
RelationshipRoute, | |||
NewsRoute | |||
NewsRoute, | |||
RegisterRoute | |||
]; |
@@ -3,21 +3,21 @@ import { store } from '@/store/index'; | |||
import type { AppRouteRecordRaw } from '@/router/types'; | |||
import { HomeOutlined } from '@ant-design/icons-vue'; | |||
// import LOGIN from '@/views/login/login.vue'; | |||
import LOGIN from '@/views/login/login.vue'; | |||
// import HOME from '@/views/home/home.vue'; | |||
import Layout from '@/components/layout/index.vue'; | |||
import { routesModuleList } from '@/router/dynamic'; | |||
import { routesManageModuleList } from '@/router/manageDynamic'; | |||
// // 登录路由 | |||
// export const LoginRoute: AppRouteRecordRaw = { | |||
// path: '/login', | |||
// name: 'login', | |||
// component: LOGIN, | |||
// meta: { | |||
// title: '登录' | |||
// } | |||
// } | |||
export const LoginRoute: AppRouteRecordRaw = { | |||
path: '/login', | |||
name: 'login', | |||
component: LOGIN, | |||
meta: { | |||
title: '登录' | |||
} | |||
} | |||
// layout路由 |
@@ -14,9 +14,15 @@ const getRoleName = (state, payload) => { | |||
state.roleName = payload.roleName; | |||
} | |||
const getIntoRegister = (state, payload) => { | |||
state.intoRegister = payload.intoRegister; | |||
} | |||
export const mutations = { | |||
getRouteName, | |||
setShowLoginBox, | |||
getLogined, | |||
getRoleName | |||
getRoleName, | |||
getIntoRegister | |||
} |
@@ -4,5 +4,6 @@ export const state = <StateType>{ | |||
routeName: '', | |||
showLoginBox: false, | |||
logined: false, | |||
roleName: '' | |||
roleName: '', | |||
intoRegister: false | |||
} |
@@ -3,4 +3,5 @@ export interface StateType { | |||
showLoginBox ?: Boolean, | |||
logined ?: Boolean, | |||
roleName ?: String, | |||
intoRegister ?: Boolean | |||
} |
@@ -0,0 +1,52 @@ | |||
export const findidx : Function = (arr: any, val: any) => { | |||
return arr.findIndex(item => { | |||
return item.id === val | |||
}) | |||
} | |||
export const intersectionAlike : Function = (objA: any, objB: any) => { | |||
const result = {}; | |||
for (const keyA in objA) { | |||
if (objB.hasOwnProperty(keyA)) { | |||
result[keyA] = objB[keyA]; | |||
} | |||
} | |||
return result; | |||
} | |||
export const hasValue : Function = (obj: any) => { | |||
let result = ''; | |||
result = Object.keys(obj).filter(key => obj[key] !== 0).map(key => `${obj[key]}`).join('') | |||
return result; | |||
} | |||
export const divObj : Function = (obj: any) => { | |||
const result = [] | |||
obj.reduce((acc, curr, index) => { | |||
curr.idx = index; | |||
result.push(curr) | |||
// const key = `node${index}Info`; | |||
// acc[key] = curr; | |||
// return acc; | |||
}, {}); | |||
return result; | |||
} | |||
export const alreadyValue: Function = (obj: any) => { | |||
const result = [] | |||
obj.reduce((acc, curr, index) => { | |||
curr.idx = index; | |||
result.push(curr) | |||
// const key = `node${index}Info`; | |||
// acc[key] = curr; | |||
// return acc; | |||
}, {}); | |||
return result; | |||
} |
@@ -0,0 +1,6 @@ | |||
const ImagePath = '~/static/images/'; | |||
export const ImageUrl: object = { | |||
// 未登录头像 | |||
logo: ImagePath + 'logo.jpg', | |||
} |
@@ -0,0 +1,30 @@ | |||
import { httpGet, httpPost } from '@/apis' | |||
export const getModel : Function = (url : string) => { | |||
return function (params : object) { | |||
return new Promise((resolve, reject) => { | |||
httpGet(url, params, function (response) { | |||
if (response.data.code == 0) { | |||
resolve(response.data) | |||
} else { | |||
reject(response) | |||
} | |||
}) | |||
}) | |||
} | |||
} | |||
export const postModel : Function = (url : string) => { | |||
return function (params : object) { | |||
return new Promise((resolve, reject) => { | |||
httpPost(url, params, function (response) { | |||
if (response.data.code == 0) { | |||
resolve(response.data) | |||
} else { | |||
reject(response) | |||
} | |||
}) | |||
}) | |||
} | |||
} | |||
@@ -0,0 +1,51 @@ | |||
interface TimeType { | |||
nowTime ?: string; | |||
nowDate ?: string; | |||
nowWeek ?: string; | |||
} | |||
const timeParams : TimeType = { | |||
nowTime: '', | |||
nowDate: '', | |||
nowWeek: '' | |||
} | |||
export const getTime = () => { | |||
const yy = new Date().getFullYear(); | |||
const mm = new Date().getMonth() + 1; | |||
const dd = new Date().getDate(); | |||
const week = new Date().getDay(); | |||
const hh = new Date().getHours(); | |||
const mf = | |||
new Date().getMinutes() < 10 ? | |||
"0" + new Date().getMinutes() : | |||
new Date().getMinutes(); | |||
const ss = new Date().getSeconds().toString(); | |||
// ss = ss.length < 2 ? ('0' + ss) : ss; | |||
switch (week) { | |||
case 1: | |||
timeParams.nowWeek = "星期一"; | |||
break; | |||
case 2: | |||
timeParams.nowWeek = "星期二"; | |||
break; | |||
case 3: | |||
timeParams.nowWeek = "星期三"; | |||
break; | |||
case 4: | |||
timeParams.nowWeek = "星期四"; | |||
break; | |||
case 5: | |||
timeParams.nowWeek = "星期五"; | |||
break; | |||
case 6: | |||
timeParams.nowWeek = "星期六"; | |||
break; | |||
case 7: | |||
timeParams.nowWeek = "星期日"; | |||
} | |||
timeParams.nowTime = hh + ":" + mf + ":" + ss; | |||
timeParams.nowDate = yy + "/" + mm + "/" + dd; | |||
return timeParams; | |||
} |
@@ -0,0 +1,32 @@ | |||
import { message } from 'ant-design-vue'; | |||
export const warnToast : Function = (msg : string) => { | |||
message.warning({ | |||
content: () => msg, | |||
class: 'custom-class', | |||
style: { | |||
zIndex: '10001', | |||
}, | |||
}); | |||
} | |||
export const errorToast : Function = (msg : string) => { | |||
message.error({ | |||
content: () => msg, | |||
class: 'custom-class', | |||
style: { | |||
zIndex: '10001', | |||
}, | |||
}); | |||
} | |||
export const successToast : Function = (msg : string) => { | |||
message.success({ | |||
content: () => msg, | |||
class: 'custom-class', | |||
style: { | |||
zIndex: '10001', | |||
}, | |||
}); | |||
} | |||
@@ -0,0 +1,9 @@ | |||
function isType<T>(type:T) { | |||
return function(obj) { | |||
return Object.prototype.toString.call(obj) === "[object " + type + "]"; | |||
} | |||
} | |||
export let isFunction = (obj) => { | |||
return isType("Function")(obj); | |||
} |
@@ -1,11 +1,20 @@ | |||
<template> | |||
<job-swiper></job-swiper> | |||
<a-row type="flex" justify="center" class="content-padding-inline"> | |||
<a-col span="18"> | |||
<home-hot></home-hot> | |||
<home-job></home-job> | |||
</a-col> | |||
</a-row> | |||
<template v-if="intoRegister"> | |||
<a-row type="flex" justify="center" class="content-padding-inline register-box"> | |||
<a-col span="14"> | |||
<job-register></job-register> | |||
</a-col> | |||
</a-row> | |||
</template> | |||
<template v-else> | |||
<job-swiper></job-swiper> | |||
<a-row type="flex" justify="center" class="content-padding-inline"> | |||
<a-col span="18"> | |||
<home-hot></home-hot> | |||
<home-job></home-job> | |||
</a-col> | |||
</a-row> | |||
</template> | |||
</template> | |||
<script setup lang="ts"> | |||
@@ -13,7 +22,21 @@ | |||
import JobSwiper from '@/components/job/swiper/index.vue' | |||
import HomeHot from '@/views/home/hot/index.vue' | |||
import HomeJob from '@/views/home/job/index.vue' | |||
import JobRegister from '@/components/job/register/index.vue' | |||
import { store } from '@/store/index'; | |||
let intoRegister = computed(() => { | |||
return store.state.intoRegister | |||
}) | |||
</script> | |||
<style> | |||
<style lang="less" scoped> | |||
.register-box { | |||
width: 100%; | |||
height: 100%; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
background-color: #ffffff; | |||
// background-image: url('https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/V-_oS6r-i7wAAAAAAAAAAAAAFl94AQBr'); | |||
} | |||
</style> |
@@ -0,0 +1,24 @@ | |||
.login-box { | |||
width: 100%; | |||
height: 100%; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
background-image: url('https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/V-_oS6r-i7wAAAAAAAAAAAAAFl94AQBr'); | |||
} | |||
.login-content { | |||
display: flex; | |||
flex-direction: column; | |||
justify-content: center; | |||
align-items: center; | |||
.title { | |||
font-weight: 800; | |||
} | |||
.sub-title { | |||
margin-bottom: 36px; | |||
font-size: 12px; | |||
} | |||
} |
@@ -0,0 +1,84 @@ | |||
<template> | |||
<div class="login-box"> | |||
<div class="login-content"> | |||
<h2 class="title">菊城人才市场招聘后台管理系统</h2> | |||
<div class="sub-title">欢迎使用</div> | |||
<a-form> | |||
<a-row> | |||
<a-col :span="24"><a-form-item> | |||
<a-input placeholder="账号"> | |||
<template #prefix> | |||
<user-outlined type="user" /> | |||
</template> | |||
</a-input> | |||
</a-form-item> | |||
</a-col> | |||
</a-row> | |||
<a-row> | |||
<a-col :span="24"> | |||
<a-form-item> | |||
<a-input type="password" placeholder="密码"> | |||
<template #prefix> | |||
<LockOutlined /> | |||
</template> | |||
<template #suffix> | |||
<a-tooltip title="Extra information"> | |||
<EyeInvisibleOutlined style="color: rgba(0, 0, 0, 0.25)" /> | |||
</a-tooltip> | |||
</template> | |||
</a-input> | |||
</a-form-item> | |||
</a-col> | |||
</a-row> | |||
<a-row :gutter="10"> | |||
<a-col :span="16"> | |||
<a-form-item> | |||
<a-input type="password" placeholder="验证码"> | |||
<template #prefix> | |||
<LockOutlined /> | |||
</template> | |||
<template #suffix> | |||
<a-tooltip title="Extra information"> | |||
<EyeInvisibleOutlined style="color: rgba(0, 0, 0, 0.25)" /> | |||
</a-tooltip> | |||
</template> | |||
</a-input> | |||
</a-form-item> | |||
</a-col> | |||
<a-col :span="8"> | |||
<a-button style="width: 100%;">验证码</a-button> | |||
</a-col> | |||
</a-row> | |||
<a-row type="flex" justify="end"> | |||
<a-col :span="6"> | |||
<a-form-item> | |||
<div>忘记密码?</div> | |||
</a-form-item> | |||
</a-col> | |||
</a-row> | |||
<a-row> | |||
<a-col :span="24"> | |||
<a-button @click="toLogin" style="width: 100%;" type="primary">登录</a-button> | |||
</a-col> | |||
</a-row> | |||
</a-form> | |||
</div> | |||
</div> | |||
</template> | |||
<script lang="ts" setup> | |||
import { ref } from 'vue'; | |||
import { useAsRouter } from '@/hooks/useAsRouter' | |||
import { UserOutlined, InfoCircleOutlined, LockOutlined, EyeInvisibleOutlined } from '@ant-design/icons-vue'; | |||
import {message} from 'ant-design-vue'; | |||
const { routerTo } = useAsRouter(); | |||
const toLogin = () => { | |||
message.success('两次密码不一致'); | |||
// sessionStorage.setItem('token', '1321'); | |||
// routerTo('/home'); | |||
} | |||
</script> | |||
<style lang="less"> | |||
@import 'login.less'; | |||
</style> |
@@ -7,23 +7,23 @@ | |||
<a-list-item> | |||
<a-list-item-meta> | |||
<template #title> | |||
人才 | |||
{{basic.contact}} | |||
</template> | |||
<template #description> | |||
企业编号:13213 | |||
</template> | |||
<template #avatar> | |||
<a-avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" :size="48" /> | |||
<a-avatar :src="basic.photo" :size="48" /> | |||
</template> | |||
</a-list-item-meta> | |||
<div style="margin-left: 64px;"> | |||
<a-descriptions :column="2" > | |||
<a-descriptions-item label="登录账号" >Zhou Maomao</a-descriptions-item> | |||
<a-descriptions-item label="会员始止时间">1810000000</a-descriptions-item> | |||
<a-descriptions-item label="联系电话">Hangzhou, Zhejiang</a-descriptions-item> | |||
<a-descriptions-item label="服务终止日期">empty</a-descriptions-item> | |||
<a-descriptions-item label="电子邮箱">empty</a-descriptions-item> | |||
<a-descriptions-item label="被访问次数">Zhou Maomao</a-descriptions-item> | |||
<a-descriptions-item label="登录账号" >{{basic.login_name ? basic.login_name : '未知'}}</a-descriptions-item> | |||
<a-descriptions-item label="会员始止时间">{{basic.start_date}}-{{basic.end_date}}</a-descriptions-item> | |||
<a-descriptions-item label="联系电话">{{basic.mobile ? basic.mobile : '未填写'}}</a-descriptions-item> | |||
<a-descriptions-item label="服务终止日期">{{basic.end_date}}</a-descriptions-item> | |||
<a-descriptions-item label="电子邮箱">{{basic.email ? basic.email : '未填写'}}</a-descriptions-item> | |||
<a-descriptions-item label="被访问次数">{{basic.click_count ? basic.click_count : '0'}}次</a-descriptions-item> | |||
</a-descriptions> | |||
</div> | |||
</a-list-item> | |||
@@ -31,8 +31,8 @@ | |||
</div> | |||
</a-col> | |||
<a-col span="18"> | |||
<div style="width: 100%; background-color: #fff;"> | |||
当月已查看 | |||
<div style="width: 100%; background-color: #fff;padding: 10px 20px;"> | |||
当月已查看{{basic.month_look_resume_qty}}份简历,还可以查看{{basic.limit_resume_qty}}份简历 | |||
</div> | |||
</a-col> | |||
<a-col span="18"> | |||
@@ -56,8 +56,15 @@ | |||
<script setup lang="ts"> | |||
import { ref, computed, onMounted } from 'vue'; | |||
import JobTalents from '@/components/job/talents/index.vue' | |||
import { PostCompanyProfile } from '@/apis/models'; | |||
let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}]) | |||
console.log(1233232) | |||
let basic = ref<Object>({}) | |||
onMounted(() => { | |||
PostCompanyProfile().then(res => { | |||
basic.value = res.data | |||
}) | |||
}) | |||
</script> | |||
<style> |
@@ -10,7 +10,7 @@ | |||
<a-col span="20"> | |||
<div style="width: 100%;background-color: #fff;padding: 10px;"> | |||
<meet-subscribe v-if="curKey == 1"></meet-subscribe> | |||
<meet-subscribe v-if="curKey == 2"></meet-subscribe> | |||
<meet-result v-if="curKey == 2"></meet-result> | |||
</div> | |||
</a-col> | |||
</a-row> | |||
@@ -22,8 +22,9 @@ | |||
<script setup lang="ts"> | |||
import { ref, computed, onMounted } from 'vue'; | |||
import MeetSubscribe from '@/components/meet/subscribe/index.vue' | |||
import MeetResult from '@/components/meet/result/index.vue' | |||
let companyList = ref<object[]>([{}, {}, {}, {}, {}, {}]) | |||
let menu_list = ref([{ name: '招聘会预定', key: 1 },{ name: '预定审核结果', key: 2}]) | |||
let menu_list = ref([{ name: '参与的招聘会', key: 1 },{ name: '预定审核结果', key: 2}]) | |||
let curKey = ref<Number>(1) | |||
const changeKey = (data) => { | |||
curKey.value = data.key; |
@@ -2,16 +2,11 @@ import { defineConfig } from 'vite' | |||
import vue from '@vitejs/plugin-vue' | |||
import path from 'path' | |||
// https://vitejs.dev/config/ | |||
export default defineConfig({ | |||
plugins: [vue()], | |||
//base: '/web/', | |||
build: { | |||
outDir: 'dist' | |||
}, | |||
resolve: { | |||
alias: { | |||
'@': path.resolve(__dirname, 'src') | |||
} | |||
} | |||
plugins: [vue()], | |||
resolve: { | |||
alias: { | |||
'@': path.resolve(__dirname, 'src') | |||
} | |||
} | |||
}) |